From 4ba064d8b3e4ed1cc7b15fdda50ca4880bf1cbcc Mon Sep 17 00:00:00 2001 From: jason <2667446@qq.com> Date: Wed, 26 Jan 2022 15:57:38 +0800 Subject: [PATCH 01/47] =?UTF-8?q?=E6=8A=BD=E5=8F=96=20activiti=20=E5=88=B0?= =?UTF-8?q?module-bpm-activiti,=20=E4=B8=BA=E6=8E=A5=E5=85=A5flowable=20?= =?UTF-8?q?=E5=87=86=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 1 + yudao-admin-server/pom.xml | 3 +- .../config/vo/InfConfigExcelVO.java | 2 +- .../apiaccesslog/InfApiAccessLogExcelVO.java | 2 +- .../vo/apierrorlog/InfApiErrorLogExcelVO.java | 2 +- .../order/vo/order/PayOrderExcelVO.java | 2 +- .../order/vo/refund/vo/PayRefundExcelVO.java | 2 +- .../pay/convert/app/PayAppConvert.java | 2 - .../controller/auth/SysAuthController.java | 2 +- .../auth/SysUserSessionController.java | 13 +- .../controller/dept/SysDeptController.java | 8 +- .../controller/dept/SysPostController.java | 2 +- .../dept/vo/post/SysPostExcelVO.java | 2 +- .../dict/vo/data/SysDictDataExcelVO.java | 2 +- .../dict/vo/type/SysDictTypeExcelVO.java | 2 +- .../logger/SysOperateLogController.java | 7 +- .../vo/loginlog/SysLoginLogExcelVO.java | 2 +- .../vo/operatelog/SysOperateLogExcelVO.java | 2 +- .../permission/SysRoleController.java | 2 +- .../permission/vo/role/SysRoleExcelVO.java | 2 +- .../sms/vo/log/SysSmsLogExcelVO.java | 2 +- .../vo/template/SysSmsTemplateExcelVO.java | 2 +- .../controller/user/SysUserController.java | 16 +- .../user/SysUserProfileController.java | 13 +- .../user/vo/user/SysUserExcelVO.java | 2 +- .../user/vo/user/SysUserImportExcelVO.java | 2 +- .../system/convert/auth/SysAuthConvert.java | 2 +- .../system/convert/dept/SysDeptConvert.java | 2 +- .../system/convert/dept/SysPostConvert.java | 2 +- .../convert/permission/SysRoleConvert.java | 2 +- .../system/convert/user/SysUserConvert.java | 6 +- .../system/dal/mysql/dept/SysDeptMapper.java | 4 +- .../system/dal/mysql/dept/SysPostMapper.java | 2 +- .../dal/mysql/permission/SysRoleMapper.java | 2 +- .../mysql/permission/SysUserRoleMapper.java | 5 +- .../SysDataPermissionConfiguration.java | 2 +- .../service/auth/impl/SysAuthServiceImpl.java | 2 +- .../system/service/dept/SysDeptService.java | 48 +----- .../system/service/dept/SysPostService.java | 11 +- .../service/dept/impl/SysDeptServiceImpl.java | 37 +---- .../service/dept/impl/SysPostServiceImpl.java | 27 +--- .../service/dict/SysDictDataService.java | 10 -- .../dict/impl/SysDictDataServiceImpl.java | 19 --- .../permission/SysPermissionService.java | 8 - .../service/permission/SysRoleService.java | 11 +- .../impl/SysPermissionServiceImpl.java | 12 +- .../permission/impl/SysRoleServiceImpl.java | 25 +-- .../system/service/user/SysUserService.java | 44 ----- .../service/user/impl/SysUserServiceImpl.java | 62 +------ .../test/vo/ToolTestDemoExcelVO.java | 2 +- .../definition/BpmFormServiceTest.java | 152 ------------------ .../definition/BpmUserGroupServiceTest.java | 134 --------------- .../service/dept/SysDeptServiceTest.java | 2 +- .../service/dept/SysPostServiceTest.java | 2 +- .../permission/SysPermissionServiceTest.java | 6 +- .../permission/SysRoleServiceTest.java | 2 +- .../service/user/SysUserServiceImplTest.java | 54 ++++--- .../system/dal/dataobject/dept/SysDeptDO.java | 2 +- .../system/dal/dataobject/dept/SysPostDO.java | 2 +- .../dal/dataobject/permission/SysRoleDO.java | 8 +- .../dataobject/permission/SysUserRoleDO.java | 2 +- .../dal/mysql/dept/SysDeptCoreMapper.java | 9 ++ .../dal/mysql/dept/SysPostCoreMapper.java | 9 ++ .../mysql/permission/SysRoleCoreMapper.java | 9 ++ .../permission/SysUserRoleCoreMapper.java | 17 ++ .../dal/mysql/user/SysUserCoreMapper.java | 6 + .../system/enums/SysDictTypeConstants.java | 2 +- .../system/enums/SysErrorCodeConstants.java | 20 +++ .../service/dept/SysDeptCoreService.java | 59 +++++++ .../service/dept/SysPostCoreService.java | 19 +++ .../dept/impl/SysDeptCoreServiceImpl.java | 69 ++++++++ .../dept/impl/SysPostCoreServiceImpl.java | 50 ++++++ .../service/dict/SysDictDataCoreService.java | 12 ++ .../dict/impl/SysDictDataCoreServiceImpl.java | 29 +++- .../permission/SysPermissionCoreService.java | 20 +++ .../permission/SysRoleCoreService.java | 19 +++ .../impl/SysPermissionCoreServiceImpl.java | 28 ++++ .../impl/SysRoleCoreServiceImpl.java | 50 ++++++ .../service/user/SysUserCoreService.java | 50 ++++++ .../user/impl/SysUserCoreServiceImpl.java | 56 +++++++ yudao-dependencies/pom.xml | 28 ++++ yudao-module-bpm/pom.xml | 18 +++ .../yudao-module-bpm-activiti/pom.xml | 30 ++++ .../definition/BpmFormController.java | 0 .../definition/BpmModelController.java | 0 .../BpmProcessDefinitionController.http | 0 .../BpmProcessDefinitionController.java | 0 .../BpmTaskAssignRuleController.http | 0 .../BpmTaskAssignRuleController.java | 0 .../definition/BpmUserGroupController.java | 4 - .../definition/vo/form/BpmFormBaseVO.java | 0 .../vo/form/BpmFormCreateReqVO.java | 0 .../definition/vo/form/BpmFormPageReqVO.java | 0 .../definition/vo/form/BpmFormRespVO.java | 0 .../vo/form/BpmFormSimpleRespVO.java | 0 .../vo/form/BpmFormUpdateReqVO.java | 0 .../vo/group/BpmUserGroupBaseVO.java | 0 .../vo/group/BpmUserGroupCreateReqVO.java | 0 .../vo/group/BpmUserGroupPageReqVO.java | 0 .../vo/group/BpmUserGroupRespVO.java | 0 .../vo/group/BpmUserGroupSimpleRespVO.java | 0 .../vo/group/BpmUserGroupUpdateReqVO.java | 0 .../vo/model/BpmModeImportReqVO.java | 0 .../definition/vo/model/BpmModelBaseVO.java | 0 .../vo/model/BpmModelCreateReqVO.java | 0 .../vo/model/BpmModelPageItemRespVO.java | 0 .../definition/vo/model/BpmModelRespVO.java | 0 .../vo/model/BpmModelUpdateReqVO.java | 0 .../vo/model/BpmModelUpdateStateReqVO.java | 0 .../definition/vo/model/ModelPageReqVO.java | 0 .../BpmProcessDefinitionListReqVO.java | 0 .../BpmProcessDefinitionPageItemRespVO.java | 0 .../BpmProcessDefinitionPageReqVO.java | 0 .../process/BpmProcessDefinitionRespVO.java | 0 .../vo/rule/BpmTaskAssignRuleBaseVO.java | 0 .../vo/rule/BpmTaskAssignRuleCreateReqVO.java | 0 .../vo/rule/BpmTaskAssignRuleRespVO.java | 0 .../vo/rule/BpmTaskAssignRuleUpdateReqVO.java | 0 .../controller/oa/BpmOALeaveController.http | 0 .../controller/oa/BpmOALeaveController.java | 0 .../controller/oa/vo/BpmOALeaveBaseVO.java | 0 .../oa/vo/BpmOALeaveCreateReqVO.java | 0 .../controller/oa/vo/BpmOALeavePageReqVO.java | 0 .../controller/oa/vo/BpmOALeaveRespVO.java | 0 .../task/BpmActivityController.java | 0 .../task/BpmProcessInstanceController.http | 0 .../task/BpmProcessInstanceController.java | 0 .../controller/task/BpmTaskController.http | 0 .../controller/task/BpmTaskController.java | 0 .../task/vo/activity/BpmActivityRespVO.java | 0 .../BpmProcessInstanceCancelReqVO.java | 0 .../BpmProcessInstanceCreateReqVO.java | 0 .../BpmProcessInstanceMyPageReqVO.java | 0 .../BpmProcessInstancePageItemRespVO.java | 0 .../vo/instance/BpmProcessInstanceRespVO.java | 0 .../task/vo/task/BpmTaskApproveReqVO.java | 0 .../vo/task/BpmTaskDonePageItemRespVO.java | 0 .../task/vo/task/BpmTaskDonePageReqVO.java | 0 .../task/vo/task/BpmTaskRejectReqVO.java | 0 .../task/vo/task/BpmTaskRespVO.java | 0 .../vo/task/BpmTaskTodoPageItemRespVO.java | 0 .../task/vo/task/BpmTaskTodoPageReqVO.java | 0 .../vo/task/BpmTaskUpdateAssigneeReqVO.java | 0 .../convert/definition/BpmFormConvert.java | 0 .../convert/definition/BpmModelConvert.java | 0 .../BpmProcessDefinitionConvert.java | 0 .../definition/BpmTaskAssignRuleConvert.java | 0 .../definition/BpmUserGroupConvert.java | 0 .../convert/message/BpmMessageConvert.java | 0 .../bpm/convert/oa/BpmOALeaveConvert.java | 0 .../modules/bpm/convert/package-info.java | 0 .../bpm/convert/task/BpmActivityConvert.java | 0 .../task/BpmProcessInstanceConvert.java | 5 +- .../bpm/convert/task/BpmTaskConvert.java | 2 +- ...‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md | 0 .../dal/dataobject/definition/BpmFormDO.java | 0 .../definition/BpmProcessDefinitionExtDO.java | 0 .../definition/BpmTaskAssignRuleDO.java | 0 .../definition/BpmTaskMessageRuleDO.java | 0 .../dataobject/definition/BpmUserGroupDO.java | 0 .../dal/dataobject/leave/BpmOALeaveDO.java | 0 .../task/BpmProcessInstanceExtDO.java | 0 .../bpm/dal/dataobject/task/BpmTaskExtDO.java | 0 .../dal/mysql/definition/BpmFormMapper.java | 0 .../BpmProcessDefinitionExtMapper.java | 0 .../definition/BpmTaskAssignRuleMapper.java | 0 .../mysql/definition/BpmUserGroupMapper.java | 0 .../bpm/dal/mysql/oa/BpmOALeaveMapper.java | 0 .../task/BpmProcessInstanceExtMapper.java | 0 .../bpm/dal/mysql/task/BpmTaskExtMapper.java | 0 .../bpm/enums/BpmErrorCodeConstants.java | 0 .../definition/BpmModelFormTypeEnum.java | 0 .../definition/BpmTaskAssignRuleTypeEnum.java | 0 .../definition/BpmTaskRuleScriptEnum.java | 0 .../bpm/enums/message/BpmMessageEnum.java | 0 .../BpmProcessInstanceDeleteReasonEnum.java | 0 .../task/BpmProcessInstanceResultEnum.java | 0 .../task/BpmProcessInstanceStatusEnum.java | 0 .../config/BpmActivitiConfiguration.java | 18 +-- .../behavior/BpmActivityBehaviorFactory.java | 19 ++- .../behavior/BpmUserTaskActivitiBehavior.java | 24 +-- .../activiti/core/behavior/package-info.java | 0 .../behavior/script/BpmTaskAssignScript.java | 0 .../BpmTaskAssignLeaderAbstractScript.java | 17 +- .../impl/BpmTaskAssignLeaderX1Script.java | 0 .../impl/BpmTaskAssignLeaderX2Script.java | 0 .../impl/BpmTaskAssignStartUserScript.java | 0 .../event/BpmProcessInstanceResultEvent.java | 0 ...BpmProcessInstanceResultEventListener.java | 0 ...pmProcessInstanceResultEventPublisher.java | 0 .../activiti/core/event/package-info.java | 0 .../core/identity/EmptyUserGroupManager.java | 0 .../BpmProcessInstanceEventListener.java | 0 .../BpmTackActivitiEventListener.java | 0 .../core/listener/BpmTaskEventListener.java | 0 .../activiti/core/listener/package-info.java | 0 .../modules/bpm/framework/package-info.java | 0 .../adminserver/modules/bpm/package-info.java | 0 .../service/definition/BpmFormService.java | 0 .../service/definition/BpmModelService.java | 0 .../BpmProcessDefinitionService.java | 0 .../definition/BpmTaskAssignRuleService.java | 0 .../definition/BpmUserGroupService.java | 0 .../definition/dto/BpmFormFieldRespDTO.java | 0 .../dto/BpmModelMetaInfoRespDTO.java | 0 .../dto/BpmProcessDefinitionCreateReqDTO.java | 0 .../definition/impl/BpmFormServiceImpl.java | 0 .../definition/impl/BpmModelServiceImpl.java | 0 .../impl/BpmProcessDefinitionServiceImpl.java | 0 .../impl/BpmTaskAssignRuleServiceImpl.java | 32 ++-- .../impl/BpmUserGroupServiceImpl.java | 3 - .../service/message/BpmMessageService.java | 0 ...eSendWhenProcessInstanceApproveReqDTO.java | 0 ...geSendWhenProcessInstanceRejectReqDTO.java | 0 .../BpmMessageSendWhenTaskCreatedReqDTO.java | 0 .../message/impl/BpmMessageServiceImpl.java | 0 .../bpm/service/oa/BpmOALeaveService.java | 0 .../oa/impl/BpmOALeaveServiceImpl.java | 0 .../oa/listener/BpmOALeaveResultListener.java | 0 .../bpm/service/task/BpmActivityService.java | 0 .../task/BpmProcessInstanceService.java | 0 .../bpm/service/task/BpmTaskService.java | 0 .../dto/BpmProcessInstanceCreateReqDTO.java | 0 .../task/impl/BpmActivityServiceImpl.java | 0 .../impl/BpmProcessInstanceServiceImpl.java | 16 +- .../service/task/impl/BpmTaskServiceImpl.java | 21 +-- .../bpm/service/task/package-info.java | 0 .../BpmUserTaskActivitiBehaviorTest.java | 37 ++--- .../impl/BpmTaskAssignLeaderX2ScriptTest.java | 27 ++-- .../modules/bpm/service/package-info.java | 0 .../yudao-module-bpm-core-service/pom.xml | 15 ++ .../yudao-module-bpm-flowable/pom.xml | 23 +++ 232 files changed, 873 insertions(+), 811 deletions(-) delete mode 100644 yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormServiceTest.java delete mode 100644 yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupServiceTest.java rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver => yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice}/modules/system/dal/dataobject/dept/SysDeptDO.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver => yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice}/modules/system/dal/dataobject/dept/SysPostDO.java (93%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver => yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice}/modules/system/dal/dataobject/permission/SysRoleDO.java (83%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver => yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice}/modules/system/dal/dataobject/permission/SysUserRoleDO.java (90%) create mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/dept/SysDeptCoreMapper.java create mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/dept/SysPostCoreMapper.java create mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/permission/SysRoleCoreMapper.java create mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/permission/SysUserRoleCoreMapper.java rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver => yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice}/modules/system/enums/SysDictTypeConstants.java (96%) create mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dept/SysDeptCoreService.java create mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dept/SysPostCoreService.java create mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dept/impl/SysDeptCoreServiceImpl.java create mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dept/impl/SysPostCoreServiceImpl.java create mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/permission/SysPermissionCoreService.java create mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/permission/SysRoleCoreService.java create mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/permission/impl/SysPermissionCoreServiceImpl.java create mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/permission/impl/SysRoleCoreServiceImpl.java create mode 100644 yudao-module-bpm/pom.xml create mode 100644 yudao-module-bpm/yudao-module-bpm-activiti/pom.xml rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmFormController.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmModelController.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.http (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.http (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmUserGroupController.java (94%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormBaseVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormCreateReqVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormPageReqVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormRespVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormSimpleRespVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormUpdateReqVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupBaseVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupCreateReqVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupPageReqVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupRespVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupSimpleRespVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupUpdateReqVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModeImportReqVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelBaseVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelCreateReqVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelPageItemRespVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelRespVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelUpdateReqVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelUpdateStateReqVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/ModelPageReqVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionListReqVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionPageItemRespVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionPageReqVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionRespVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleBaseVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleCreateReqVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleRespVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleUpdateReqVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.http (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveBaseVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveCreateReqVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeavePageReqVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveRespVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmActivityController.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.http (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.http (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/activity/BpmActivityRespVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceCancelReqVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceCreateReqVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceMyPageReqVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstancePageItemRespVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceRespVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskApproveReqVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskDonePageItemRespVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskDonePageReqVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskRejectReqVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskRespVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskTodoPageItemRespVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskTodoPageReqVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskUpdateAssigneeReqVO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmFormConvert.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmModelConvert.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmProcessDefinitionConvert.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmTaskAssignRuleConvert.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmUserGroupConvert.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/message/BpmMessageConvert.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/oa/BpmOALeaveConvert.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/package-info.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmActivityConvert.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java (96%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmTaskConvert.java (98%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmFormDO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmProcessDefinitionExtDO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskAssignRuleDO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskMessageRuleDO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmUserGroupDO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/leave/BpmOALeaveDO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmProcessInstanceExtDO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmTaskExtDO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmFormMapper.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmProcessDefinitionExtMapper.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmTaskAssignRuleMapper.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmUserGroupMapper.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/oa/BpmOALeaveMapper.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmTaskExtMapper.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmModelFormTypeEnum.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmTaskAssignRuleTypeEnum.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmTaskRuleScriptEnum.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/message/BpmMessageEnum.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceDeleteReasonEnum.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceResultEnum.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceStatusEnum.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java (86%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java (74%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java (90%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/package-info.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/BpmTaskAssignScript.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderAbstractScript.java (79%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX1Script.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2Script.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignStartUserScript.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEvent.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEventListener.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEventPublisher.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/package-info.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/identity/EmptyUserGroupManager.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTackActivitiEventListener.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTaskEventListener.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/package-info.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/package-info.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/package-info.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormService.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmModelService.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmProcessDefinitionService.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmTaskAssignRuleService.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupService.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmFormFieldRespDTO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmModelMetaInfoRespDTO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmProcessDefinitionCreateReqDTO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmFormServiceImpl.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmModelServiceImpl.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmProcessDefinitionServiceImpl.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java (89%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmUserGroupServiceImpl.java (93%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/BpmMessageService.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceApproveReqDTO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceRejectReqDTO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenTaskCreatedReqDTO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/impl/BpmMessageServiceImpl.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveService.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/impl/BpmOALeaveServiceImpl.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/listener/BpmOALeaveResultListener.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmActivityService.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskService.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/dto/BpmProcessInstanceCreateReqDTO.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmActivityServiceImpl.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java (95%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java (94%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/package-info.java (100%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java (86%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2ScriptTest.java (78%) rename {yudao-admin-server => yudao-module-bpm/yudao-module-bpm-activiti}/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/package-info.java (100%) create mode 100644 yudao-module-bpm/yudao-module-bpm-core-service/pom.xml create mode 100644 yudao-module-bpm/yudao-module-bpm-flowable/pom.xml diff --git a/pom.xml b/pom.xml index 0f791a822f..4b7c953e40 100644 --- a/pom.xml +++ b/pom.xml @@ -13,6 +13,7 @@ yudao-admin-server yudao-user-server yudao-core-service + yudao-module-bpm ${artifactId} diff --git a/yudao-admin-server/pom.xml b/yudao-admin-server/pom.xml index 847e626a03..3553b38b2e 100644 --- a/yudao-admin-server/pom.xml +++ b/yudao-admin-server/pom.xml @@ -44,9 +44,10 @@ yudao-spring-boot-starter-biz-data-permission + cn.iocoder.boot - yudao-spring-boot-starter-activiti + yudao-module-bpm-activiti diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigExcelVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigExcelVO.java index 2a5c044988..28c10b2dce 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigExcelVO.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigExcelVO.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.adminserver.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogExcelVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogExcelVO.java index d0265351f9..d48dc44b0c 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogExcelVO.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogExcelVO.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apiacces import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.adminserver.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apierrorlog/InfApiErrorLogExcelVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apierrorlog/InfApiErrorLogExcelVO.java index 3224a3017e..c33e73dced 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apierrorlog/InfApiErrorLogExcelVO.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apierrorlog/InfApiErrorLogExcelVO.java @@ -3,7 +3,7 @@ package cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apierror import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; import cn.iocoder.yudao.adminserver.modules.infra.enums.InfDictTypeConstants; -import cn.iocoder.yudao.adminserver.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderExcelVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderExcelVO.java index 48d69c4903..28e5e7c613 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderExcelVO.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderExcelVO.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order; -import cn.iocoder.yudao.adminserver.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; import com.alibaba.excel.annotation.ExcelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundExcelVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundExcelVO.java index be90f1a612..b0b2c18e17 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundExcelVO.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundExcelVO.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; -import cn.iocoder.yudao.adminserver.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; import com.alibaba.excel.annotation.ExcelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/app/PayAppConvert.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/app/PayAppConvert.java index 15da37cbf0..c7e17467d8 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/app/PayAppConvert.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/app/PayAppConvert.java @@ -2,8 +2,6 @@ package cn.iocoder.yudao.adminserver.modules.pay.convert.app; import java.util.*; -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.SysUserPageItemRespVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO; import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysAuthController.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysAuthController.java index aef8cc40ac..fc104fdbc0 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysAuthController.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysAuthController.java @@ -3,7 +3,7 @@ package cn.iocoder.yudao.adminserver.modules.system.controller.auth; import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth.*; import cn.iocoder.yudao.adminserver.modules.system.convert.auth.SysAuthConvert; import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysMenuDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; import cn.iocoder.yudao.adminserver.modules.system.enums.permission.MenuTypeEnum; import cn.iocoder.yudao.adminserver.modules.system.service.auth.SysAuthService; import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysUserSessionController.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysUserSessionController.java index 25279ef802..116d38531c 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysUserSessionController.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysUserSessionController.java @@ -3,13 +3,15 @@ package cn.iocoder.yudao.adminserver.modules.system.controller.auth; import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.session.SysUserSessionPageItemRespVO; import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.session.SysUserSessionPageReqVO; import cn.iocoder.yudao.adminserver.modules.system.convert.auth.SysUserSessionConvert; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.adminserver.modules.system.service.auth.SysUserSessionService; import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService; +import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; +import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.MapUtils; @@ -38,9 +40,10 @@ public class SysUserSessionController { @Resource private SysUserSessionCoreService userSessionCoreService; @Resource - private SysUserService userService; + private SysUserCoreService userCoreService; + @Resource - private SysDeptService deptService; + private SysDeptCoreService deptCoreService; @GetMapping("/page") @ApiOperation("获得 Session 分页列表") @@ -50,9 +53,9 @@ public class SysUserSessionController { PageResult pageResult = userSessionService.getUserSessionPage(reqVO); // 获得拼接需è¦çš„æ•°æ® - Map userMap = userService.getUserMap( + Map userMap = userCoreService.getUserMap( convertList(pageResult.getList(), SysUserSessionDO::getUserId)); - Map deptMap = deptService.getDeptMap( + Map deptMap = deptCoreService.getDeptMap( convertList(userMap.values(), SysUserDO::getDeptId)); // 拼接结果返回 List sessionList = new ArrayList<>(pageResult.getList().size()); diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/SysDeptController.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/SysDeptController.java index 1bae57f324..2c384623ec 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/SysDeptController.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/SysDeptController.java @@ -1,10 +1,11 @@ package cn.iocoder.yudao.adminserver.modules.system.controller.dept; +import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.*; import cn.iocoder.yudao.adminserver.modules.system.convert.dept.SysDeptConvert; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -29,6 +30,9 @@ public class SysDeptController { @Resource private SysDeptService deptService; + @Resource + private SysDeptCoreService deptCoreService; + @PostMapping("create") @ApiOperation("创建部门") @PreAuthorize("@ss.hasPermission('system:dept:create')") @@ -80,7 +84,7 @@ public class SysDeptController { @ApiImplicitParam(name = "id", value = "ç¼–å·", required = true, example = "1024", dataTypeClass = Long.class) @PreAuthorize("@ss.hasPermission('system:dept:query')") public CommonResult getDept(@RequestParam("id") Long id) { - return success(SysDeptConvert.INSTANCE.convert(deptService.getDept(id))); + return success(SysDeptConvert.INSTANCE.convert(deptCoreService.getDept(id))); } } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/SysPostController.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/SysPostController.java index c27dc1c95e..fec11cb018 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/SysPostController.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/SysPostController.java @@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.*; import cn.iocoder.yudao.adminserver.modules.system.convert.dept.SysPostConvert; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysPostService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostExcelVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostExcelVO.java index acc23c3f8c..3286bd63a0 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostExcelVO.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostExcelVO.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.adminserver.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/data/SysDictDataExcelVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/data/SysDictDataExcelVO.java index 23174a087f..589735a24c 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/data/SysDictDataExcelVO.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/data/SysDictDataExcelVO.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.adminserver.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/type/SysDictTypeExcelVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/type/SysDictTypeExcelVO.java index fbb4da3670..1fac9c0617 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/type/SysDictTypeExcelVO.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/type/SysDictTypeExcelVO.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.type; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.adminserver.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/SysOperateLogController.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/SysOperateLogController.java index e44a4dd4d7..968ab49542 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/SysOperateLogController.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/SysOperateLogController.java @@ -9,6 +9,7 @@ import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.logger.SysOper import cn.iocoder.yudao.adminserver.modules.system.service.logger.SysOperateLogService; import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; @@ -44,7 +45,7 @@ public class SysOperateLogController { @Resource private SysOperateLogService operateLogService; @Resource - private SysUserService userService; + private SysUserCoreService userCoreService; @GetMapping("/page") @ApiOperation("查看æ“作日志分页列表") @@ -54,7 +55,7 @@ public class SysOperateLogController { // 获得拼接需è¦çš„æ•°æ® Collection userIds = CollectionUtils.convertList(pageResult.getList(), SysOperateLogDO::getUserId); - Map userMap = userService.getUserMap(userIds); + Map userMap = userCoreService.getUserMap(userIds); // æ‹¼æŽ¥æ•°æ® List list = new ArrayList<>(pageResult.getList().size()); pageResult.getList().forEach(operateLog -> { @@ -75,7 +76,7 @@ public class SysOperateLogController { // 获得拼接需è¦çš„æ•°æ® Collection userIds = CollectionUtils.convertList(list, SysOperateLogDO::getUserId); - Map userMap = userService.getUserMap(userIds); + Map userMap = userCoreService.getUserMap(userIds); // æ‹¼æŽ¥æ•°æ® List excelDataList = SysOperateLogConvert.INSTANCE.convertList(list, userMap); // 输出 diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/loginlog/SysLoginLogExcelVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/loginlog/SysLoginLogExcelVO.java index 852e9146a7..8c2693beb1 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/loginlog/SysLoginLogExcelVO.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/loginlog/SysLoginLogExcelVO.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlo import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.adminserver.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/operatelog/SysOperateLogExcelVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/operatelog/SysOperateLogExcelVO.java index 71959d8838..5233ef90c9 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/operatelog/SysOperateLogExcelVO.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/operatelog/SysOperateLogExcelVO.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operate import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.adminserver.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/SysRoleController.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/SysRoleController.java index 15d7fa3f83..2dc6f347b3 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/SysRoleController.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/SysRoleController.java @@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role.*; import cn.iocoder.yudao.adminserver.modules.system.convert.permission.SysRoleConvert; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysRoleService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRoleExcelVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRoleExcelVO.java index c8c130537e..01b758347b 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRoleExcelVO.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRoleExcelVO.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.rol import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.adminserver.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/log/SysSmsLogExcelVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/log/SysSmsLogExcelVO.java index 8376939805..69cb3963f0 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/log/SysSmsLogExcelVO.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/log/SysSmsLogExcelVO.java @@ -3,7 +3,7 @@ package cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; import cn.iocoder.yudao.framework.excel.core.convert.JsonConvert; -import cn.iocoder.yudao.adminserver.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/template/SysSmsTemplateExcelVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/template/SysSmsTemplateExcelVO.java index a3215414c9..d227caba3b 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/template/SysSmsTemplateExcelVO.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/template/SysSmsTemplateExcelVO.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.adminserver.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserController.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserController.java index ae7628e49e..ad0f328976 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserController.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserController.java @@ -1,21 +1,17 @@ package cn.iocoder.yudao.adminserver.modules.system.controller.user; import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptListReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptSimpleRespVO; import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.*; -import cn.iocoder.yudao.adminserver.modules.system.convert.dept.SysDeptConvert; import cn.iocoder.yudao.adminserver.modules.system.convert.user.SysUserConvert; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.enums.common.SysSexEnum; +import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.collection.MapUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; @@ -50,7 +46,7 @@ public class SysUserController { @Resource private SysUserCoreService userCoreService; @Resource - private SysDeptService deptService; + private SysDeptCoreService deptCoreService; @PostMapping("/create") @ApiOperation("新增用户") @@ -105,7 +101,7 @@ public class SysUserController { // 获得拼接需è¦çš„æ•°æ® Collection deptIds = convertList(pageResult.getList(), SysUserDO::getDeptId); - Map deptMap = deptService.getDeptMap(deptIds); + Map deptMap = deptCoreService.getDeptMap(deptIds); // 拼接结果返回 List userList = new ArrayList<>(pageResult.getList().size()); pageResult.getList().forEach(user -> { @@ -144,8 +140,8 @@ public class SysUserController { // 获得拼接需è¦çš„æ•°æ® Collection deptIds = convertList(users, SysUserDO::getDeptId); - Map deptMap = deptService.getDeptMap(deptIds); - Map deptLeaderUserMap = userService.getUserMap(convertSet(deptMap.values(), SysDeptDO::getLeaderUserId)); + Map deptMap = deptCoreService.getDeptMap(deptIds); + Map deptLeaderUserMap = userCoreService.getUserMap(convertSet(deptMap.values(), SysDeptDO::getLeaderUserId)); // æ‹¼æŽ¥æ•°æ® List excelUsers = new ArrayList<>(users.size()); users.forEach(user -> { diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserProfileController.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserProfileController.java index 4b47d3c55a..2dea78cd8a 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserProfileController.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserProfileController.java @@ -5,16 +5,16 @@ import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.Sy import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO; import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO; import cn.iocoder.yudao.adminserver.modules.system.convert.user.SysUserConvert; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysPostDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleDO; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysPostService; import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService; import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysRoleService; import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.social.SysSocialUserDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialCoreService; import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; @@ -48,7 +48,8 @@ public class SysUserProfileController { @Resource private SysUserCoreService userCoreService; @Resource - private SysDeptService deptService; + private SysDeptCoreService deptCoreService; + @Resource private SysPostService postService; @Resource @@ -69,7 +70,7 @@ public class SysUserProfileController { resp.setRoles(SysUserConvert.INSTANCE.convertList(userRoles)); // èŽ·å¾—éƒ¨é—¨ä¿¡æ¯ if (user.getDeptId() != null) { - SysDeptDO dept = deptService.getDept(user.getDeptId()); + SysDeptDO dept = deptCoreService.getDept(user.getDeptId()); resp.setDept(SysUserConvert.INSTANCE.convert02(dept)); } // 获得岗ä½ä¿¡æ¯ diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserExcelVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserExcelVO.java index 02712ba868..a4c978c025 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserExcelVO.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserExcelVO.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.adminserver.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserImportExcelVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserImportExcelVO.java index b641f6412e..f33acdd2f3 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserImportExcelVO.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserImportExcelVO.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.adminserver.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/auth/SysAuthConvert.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/auth/SysAuthConvert.java index dfe3ac3eab..cb92db12c9 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/auth/SysAuthConvert.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/auth/SysAuthConvert.java @@ -3,7 +3,7 @@ package cn.iocoder.yudao.adminserver.modules.system.convert.auth; import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth.SysAuthMenuRespVO; import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth.SysAuthPermissionInfoRespVO; import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysMenuDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; import cn.iocoder.yudao.adminserver.modules.system.enums.permission.MenuIdEnum; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/dept/SysDeptConvert.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/dept/SysDeptConvert.java index 364b034afe..693baffe6d 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/dept/SysDeptConvert.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/dept/SysDeptConvert.java @@ -4,7 +4,7 @@ import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDe import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptRespVO; import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptSimpleRespVO; import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/dept/SysPostConvert.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/dept/SysPostConvert.java index 934a31dba1..d466a0af97 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/dept/SysPostConvert.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/dept/SysPostConvert.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.system.convert.dept; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.*; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/permission/SysRoleConvert.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/permission/SysRoleConvert.java index 59e4d59b40..b1cd0dc007 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/permission/SysRoleConvert.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/permission/SysRoleConvert.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.adminserver.modules.system.convert.permission; import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role.*; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/user/SysUserConvert.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/user/SysUserConvert.java index 7567bba080..ff2938d36b 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/user/SysUserConvert.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/user/SysUserConvert.java @@ -4,9 +4,9 @@ import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.Sy import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO; import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO; import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.*; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysPostDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.social.SysSocialUserDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import org.mapstruct.Mapper; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/dept/SysDeptMapper.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/dept/SysDeptMapper.java index 831e25ef93..84ab4c85de 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/dept/SysDeptMapper.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/dept/SysDeptMapper.java @@ -3,11 +3,9 @@ package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.dept; import cn.iocoder.yudao.adminserver.modules.tool.enums.SqlConstants; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptListReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; import java.util.Date; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/dept/SysPostMapper.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/dept/SysPostMapper.java index 457b4a990d..85d9915b23 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/dept/SysPostMapper.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/dept/SysPostMapper.java @@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.SysPostExportReqVO; import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.SysPostPageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/permission/SysRoleMapper.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/permission/SysRoleMapper.java index 7d3ab59dec..670d5047c5 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/permission/SysRoleMapper.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/permission/SysRoleMapper.java @@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role.SysRoleExportReqVO; import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role.SysRolePageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; import org.springframework.lang.Nullable; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/permission/SysUserRoleMapper.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/permission/SysUserRoleMapper.java index 9a2c990c67..4704bb5710 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/permission/SysUserRoleMapper.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/permission/SysUserRoleMapper.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.permission; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysUserRoleDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysUserRoleDO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; @@ -20,9 +20,6 @@ public interface SysUserRoleMapper extends BaseMapperX { return selectList(new QueryWrapper().eq("role_id", roleId)); } - default List selectListByRoleIds(Collection roleIds) { - return selectList("role_id", roleIds); - } default void insertList(Long userId, Collection roleIds) { List list = roleIds.stream().map(roleId -> { diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/datapermission/config/SysDataPermissionConfiguration.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/datapermission/config/SysDataPermissionConfiguration.java index 20f2e16028..984d854403 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/datapermission/config/SysDataPermissionConfiguration.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/datapermission/config/SysDataPermissionConfiguration.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.adminserver.modules.system.framework.datapermission.config; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.framework.datapermission.core.dept.rule.DeptDataPermissionRuleCustomizer; import org.springframework.context.annotation.Bean; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java index 438bd1e75a..5b67c99d62 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java @@ -6,7 +6,7 @@ import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth.SysAu import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth.SysAuthSocialLogin2ReqVO; import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth.SysAuthSocialLoginReqVO; import cn.iocoder.yudao.adminserver.modules.system.convert.auth.SysAuthConvert; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginLogTypeEnum; import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginResultEnum; import cn.iocoder.yudao.adminserver.modules.system.service.auth.SysAuthService; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysDeptService.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysDeptService.java index bf3ce317f3..a7f9208e16 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysDeptService.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysDeptService.java @@ -4,7 +4,7 @@ import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptCreateReqVO; import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptListReqVO; import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import java.util.Collection; @@ -46,27 +46,6 @@ public interface SysDeptService { */ void deleteDept(Long id); - /** - * 获得指定编å·çš„部门列表 - * - * @param ids éƒ¨é—¨ç¼–å·æ•°ç»„ - * @return 部门列表 - */ - List getSimpleDepts(Collection ids); - - /** - * 获得指定编å·çš„部门 Map - * - * @param ids éƒ¨é—¨ç¼–å·æ•°ç»„ - * @return 部门 Map - */ - default Map getDeptMap(Collection ids) { - if (CollUtil.isEmpty(ids)) { - return Collections.emptyMap(); - } - List list = getSimpleDepts(ids); - return CollectionUtils.convertMap(list, SysDeptDO::getId); - } /** * 筛选部门列表 @@ -76,22 +55,6 @@ public interface SysDeptService { */ List getSimpleDepts(SysDeptListReqVO reqVO); - /** - * èŽ·å¾—éƒ¨é—¨ä¿¡æ¯ - * - * @param id éƒ¨é—¨ç¼–å· - * @return éƒ¨é—¨ä¿¡æ¯ - */ - SysDeptDO getDept(Long id); - - /** - * èŽ·å¾—éƒ¨é—¨ä¿¡æ¯æ•°ç»„ - * - * @param ids éƒ¨é—¨ç¼–å·æ•°ç»„ - * @return éƒ¨é—¨ä¿¡æ¯æ•°ç»„ - */ - List getDepts(Collection ids); - /** * 获得所有å­éƒ¨é—¨ï¼Œä»Žç¼“存中 * @@ -101,13 +64,4 @@ public interface SysDeptService { */ List getDeptsByParentIdFromCache(Long parentId, boolean recursive); - /** - * æ ¡éªŒéƒ¨é—¨ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: - * 1. 部门编å·ä¸å­˜åœ¨ - * 2. 部门被ç¦ç”¨ - * - * @param ids è§’è‰²ç¼–å·æ•°ç»„ - */ - void validDepts(Collection ids); - } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysPostService.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysPostService.java index 608e360b2f..4a1e7a7fd6 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysPostService.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysPostService.java @@ -6,7 +6,7 @@ import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.SysPo import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.SysPostExportReqVO; import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.SysPostPageReqVO; import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.SysPostUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; import org.springframework.lang.Nullable; import java.util.Collection; @@ -86,13 +86,4 @@ public interface SysPostService { */ SysPostDO getPost(Long id); - /** - * 校验岗ä½ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: - * 1. å²—ä½ç¼–å·ä¸å­˜åœ¨ - * 2. å²—ä½è¢«ç¦ç”¨ - * - * @param ids å²—ä½ç¼–å·æ•°ç»„ - */ - void validPosts(Collection ids); - } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/impl/SysDeptServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/impl/SysDeptServiceImpl.java index 60b33431bd..8770fbb2a4 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/impl/SysDeptServiceImpl.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/impl/SysDeptServiceImpl.java @@ -10,7 +10,7 @@ import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDe import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptUpdateReqVO; import cn.iocoder.yudao.adminserver.modules.system.convert.dept.SysDeptConvert; import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.dept.SysDeptMapper; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.adminserver.modules.system.enums.dept.DeptIdEnum; import cn.iocoder.yudao.adminserver.modules.system.mq.producer.dept.SysDeptProducer; import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; @@ -159,11 +159,6 @@ public class SysDeptServiceImpl implements SysDeptService { deptProducer.sendDeptRefreshMessage(); } - @Override - public List getSimpleDepts(Collection ids) { - return deptMapper.selectBatchIds(ids); - } - @Override public List getSimpleDepts(SysDeptListReqVO reqVO) { return deptMapper.selectList(reqVO); @@ -182,26 +177,6 @@ public class SysDeptServiceImpl implements SysDeptService { return result; } - @Override - public void validDepts(Collection ids) { - if (CollUtil.isEmpty(ids)) { - return; - } - // èŽ·å¾—ç§‘å®¤ä¿¡æ¯ - List depts = deptMapper.selectBatchIds(ids); - Map deptMap = CollectionUtils.convertMap(depts, SysDeptDO::getId); - // 校验 - ids.forEach(id -> { - SysDeptDO dept = deptMap.get(id); - if (dept == null) { - throw exception(DEPT_NOT_FOUND); - } - if (!CommonStatusEnum.ENABLE.getStatus().equals(dept.getStatus())) { - throw exception(DEPT_NOT_ENABLE, dept.getName()); - } - }); - } - /** * é€’å½’èŽ·å–æ‰€æœ‰çš„å­éƒ¨é—¨ï¼Œæ·»åŠ åˆ° result 结果 * @@ -227,16 +202,6 @@ public class SysDeptServiceImpl implements SysDeptService { recursiveCount - 1, parentDeptMap)); } - @Override - public SysDeptDO getDept(Long id) { - return deptMapper.selectById(id); - } - - @Override - public List getDepts(Collection ids) { - return deptMapper.selectBatchIds(ids); - } - private void checkCreateOrUpdate(Long id, Long parentId, String name) { // 校验自己存在 checkDeptExists(id); diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/impl/SysPostServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/impl/SysPostServiceImpl.java index 220724e332..8531fb16ed 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/impl/SysPostServiceImpl.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/impl/SysPostServiceImpl.java @@ -1,8 +1,5 @@ package cn.iocoder.yudao.adminserver.modules.system.service.dept.impl; -import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.SysPostCreateReqVO; @@ -11,16 +8,14 @@ import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.SysPo import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.SysPostUpdateReqVO; import cn.iocoder.yudao.adminserver.modules.system.convert.dept.SysPostConvert; import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.dept.SysPostMapper; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysPostService; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.util.Collection; import java.util.List; -import java.util.Map; import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -84,26 +79,6 @@ public class SysPostServiceImpl implements SysPostService { return postMapper.selectById(id); } - @Override - public void validPosts(Collection ids) { - if (CollUtil.isEmpty(ids)) { - return; - } - // 获得岗ä½ä¿¡æ¯ - List posts = postMapper.selectBatchIds(ids); - Map postMap = CollectionUtils.convertMap(posts, SysPostDO::getId); - // 校验 - ids.forEach(id -> { - SysPostDO post = postMap.get(id); - if (post == null) { - throw exception(POST_NOT_FOUND); - } - if (!CommonStatusEnum.ENABLE.getStatus().equals(post.getStatus())) { - throw exception(POST_NOT_ENABLE, post.getName()); - } - }); - } - private void checkCreateOrUpdate(Long id, String name, String code) { // 校验自己存在 checkPostExists(id); diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/SysDictDataService.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/SysDictDataService.java index 7fd19f4e93..974b02f688 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/SysDictDataService.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/SysDictDataService.java @@ -79,14 +79,4 @@ public interface SysDictDataService { */ int countByDictType(String dictType); - /** - * 校验字典数æ®ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: - * 1. 字典数æ®ä¸å­˜åœ¨ - * 2. 字典数æ®è¢«ç¦ç”¨ - * - * @param dictType 字典类型 - * @param values 字典数æ®å€¼çš„æ•°ç»„ - */ - void validDictDatas(String dictType, Collection values); - } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/impl/SysDictDataServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/impl/SysDictDataServiceImpl.java index 60fb103328..9130ebe101 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/impl/SysDictDataServiceImpl.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/impl/SysDictDataServiceImpl.java @@ -134,25 +134,6 @@ public class SysDictDataServiceImpl implements SysDictDataService { return dictDataMapper.selectCountByDictType(dictType); } - @Override - public void validDictDatas(String dictType, Collection values) { - if (CollUtil.isEmpty(values)) { - return; - } - // 获得字典数æ®ä¿¡æ¯ - List dictDatas = dictDataMapper.selectByDictTypeAndValues(dictType, values); - Map dictDataMap = CollectionUtils.convertMap(dictDatas, SysDictDataDO::getValue); - // 校验 - values.forEach(value -> { - SysDictDataDO dictData = dictDataMap.get(value); - if (dictData == null) { - throw exception(DICT_DATA_NOT_EXISTS); - } - if (!CommonStatusEnum.ENABLE.getStatus().equals(dictData.getStatus())) { - throw exception(DICT_DATA_NOT_ENABLE, dictData.getLabel()); - } - }); - } private void checkCreateOrUpdate(Long id, String value, String dictType) { // 校验自己存在 diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysPermissionService.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysPermissionService.java index 78eeb9ad05..627e61b8a9 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysPermissionService.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysPermissionService.java @@ -77,14 +77,6 @@ public interface SysPermissionService extends SecurityPermissionFrameworkService */ Set getUserRoleIdListByRoleId(Long roleId); - /** - * 获得拥有多个角色的用户编å·é›†åˆ - * - * @param roleIds 角色编å·é›†åˆ - * @return 用户编å·é›†åˆ - */ - Set getUserRoleIdListByRoleIds(Collection roleIds); - /** * 设置用户角色 * diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysRoleService.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysRoleService.java index 4272bab787..74125662d5 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysRoleService.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysRoleService.java @@ -5,7 +5,7 @@ import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role.SysRoleExportReqVO; import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role.SysRolePageReqVO; import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role.SysRoleUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; import org.springframework.lang.Nullable; import java.util.Collection; @@ -129,13 +129,6 @@ public interface SysRoleService { */ List getRoleList(SysRoleExportReqVO reqVO); - /** - * æ ¡éªŒè§’è‰²ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: - * 1. 角色编å·ä¸å­˜åœ¨ - * 2. 角色被ç¦ç”¨ - * - * @param ids è§’è‰²ç¼–å·æ•°ç»„ - */ - void validRoles(Collection ids); + } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/impl/SysPermissionServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/impl/SysPermissionServiceImpl.java index 32f61c1d88..7e90b568f6 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/impl/SysPermissionServiceImpl.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/impl/SysPermissionServiceImpl.java @@ -3,11 +3,11 @@ package cn.iocoder.yudao.adminserver.modules.system.service.permission.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ArrayUtil; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysMenuDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleMenuDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysUserRoleDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysUserRoleDO; import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.permission.SysRoleMenuMapper; import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.permission.SysUserRoleMapper; import cn.iocoder.yudao.adminserver.modules.system.mq.producer.permission.SysPermissionProducer; @@ -227,11 +227,7 @@ public class SysPermissionServiceImpl implements SysPermissionService { SysUserRoleDO::getRoleId); } - @Override - public Set getUserRoleIdListByRoleIds(Collection roleIds) { - return CollectionUtils.convertSet(userRoleMapper.selectListByRoleIds(roleIds), - SysUserRoleDO::getRoleId); - } + @Override public void assignUserRole(Long userId, Set roleIds) { diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/impl/SysRoleServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/impl/SysRoleServiceImpl.java index 0c271c3a2d..8b29e19dff 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/impl/SysRoleServiceImpl.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/impl/SysRoleServiceImpl.java @@ -3,9 +3,7 @@ package cn.iocoder.yudao.adminserver.modules.system.service.permission.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role.SysRoleCreateReqVO; import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role.SysRoleExportReqVO; @@ -13,7 +11,7 @@ import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role.SysRoleUpdateReqVO; import cn.iocoder.yudao.adminserver.modules.system.convert.permission.SysRoleConvert; import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.permission.SysRoleMapper; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; import cn.iocoder.yudao.adminserver.modules.system.enums.permission.RoleCodeEnum; import cn.iocoder.yudao.adminserver.modules.system.enums.permission.SysRoleTypeEnum; import cn.iocoder.yudao.adminserver.modules.system.mq.producer.permission.SysRoleProducer; @@ -34,7 +32,6 @@ import org.springframework.util.StringUtils; import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.util.*; -import java.util.function.Consumer; import java.util.stream.Collectors; import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*; @@ -241,26 +238,6 @@ public class SysRoleServiceImpl implements SysRoleService { return roleMapper.listRoles(reqVO); } - @Override - public void validRoles(Collection ids) { - if (CollUtil.isEmpty(ids)) { - return; - } - // èŽ·å¾—è§’è‰²ä¿¡æ¯ - List roles = roleMapper.selectBatchIds(ids); - Map roleMap = CollectionUtils.convertMap(roles, SysRoleDO::getId); - // 校验 - ids.forEach(id -> { - SysRoleDO role = roleMap.get(id); - if (role == null) { - throw exception(ROLE_NOT_EXISTS); - } - if (!CommonStatusEnum.ENABLE.getStatus().equals(role.getStatus())) { - throw exception(ROLE_IS_DISABLE, role.getName()); - } - }); - } - /** * 校验角色的唯一字段是å¦é‡å¤ * diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/SysUserService.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/SysUserService.java index fe35cfe6ba..da4695e35a 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/SysUserService.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/SysUserService.java @@ -120,26 +120,7 @@ public interface SysUserService { */ List getUsers(SysUserExportReqVO reqVO); - /** - * 获得用户列表 - * - * @param ids ç”¨æˆ·ç¼–å·æ•°ç»„ - * @return 用户列表 - */ - List getUsers(Collection ids); - /** - * 获得用户 Map - * - * @param ids ç”¨æˆ·ç¼–å·æ•°ç»„ - * @return 用户 Map - */ - default Map getUserMap(Collection ids) { - if (CollUtil.isEmpty(ids)) { - return new HashMap<>(); - } - return CollectionUtils.convertMap(getUsers(ids), SysUserDO::getId); - } /** * èŽ·å¾—ç”¨æˆ·åˆ—è¡¨ï¼ŒåŸºäºŽæ˜µç§°æ¨¡ç³ŠåŒ¹é… @@ -174,29 +155,4 @@ public interface SysUserService { */ List getUsersByStatus(Integer status); - /** - * 获得指定岗ä½çš„用户数组 - * - * @param postIds 岗使•°ç»„ - * @return 用户数组 - */ - List getUsersByPostIds(Collection postIds); - - /** - * 获得指定部门的用户数组 - * - * @param deptIds 部门数组 - * @return 用户数组 - */ - List getUsersByDeptIds(Collection deptIds); - - /** - * æ ¡éªŒç”¨æˆ·ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: - * 1. 用户编å·ä¸å­˜åœ¨ - * 2. 用户被ç¦ç”¨ - * - * @param ids ç”¨æˆ·ç¼–å·æ•°ç»„ - */ - void validUsers(Set ids); - } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/impl/SysUserServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/impl/SysUserServiceImpl.java index d5b2ad18ba..119b78e1ef 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/impl/SysUserServiceImpl.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/impl/SysUserServiceImpl.java @@ -8,8 +8,8 @@ import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.Sy import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO; import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.*; import cn.iocoder.yudao.adminserver.modules.system.convert.user.SysUserConvert; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.user.SysUserMapper; import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysPostService; @@ -17,6 +17,7 @@ import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermiss import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -52,6 +53,9 @@ public class SysUserServiceImpl implements SysUserService { @Resource private SysDeptService deptService; + + @Resource + private SysDeptCoreService deptCoreService; @Resource private SysPostService postService; @Resource @@ -174,18 +178,6 @@ public class SysUserServiceImpl implements SysUserService { return userMapper.selectList(reqVO, this.getDeptCondition(reqVO.getDeptId())); } - @Override - public List getUsers(Collection ids) { - if (CollUtil.isEmpty(ids)) { - return Collections.emptyList(); - } - return userMapper.selectBatchIds(ids); - } - - @Override - public Map getUserMap(Collection ids) { - return SysUserService.super.getUserMap(ids); - } @Override public List getUsersByNickname(String nickname) { @@ -299,7 +291,7 @@ public class SysUserServiceImpl implements SysUserService { if (deptId == null) { // å…许ä¸é€‰æ‹© return; } - SysDeptDO dept = deptService.getDept(deptId); + SysDeptDO dept = deptCoreService.getDept(deptId); if (dept == null) { throw exception(DEPT_NOT_FOUND); } @@ -389,44 +381,4 @@ public class SysUserServiceImpl implements SysUserService { return userMapper.selectListByStatus(status); } - @Override - public List getUsersByPostIds(Collection postIds) { - if (CollUtil.isEmpty(postIds)) { - return Collections.emptyList(); - } - // 过滤ä¸ç¬¦åˆæ¡ä»¶çš„ - // TODO 芋艿:暂时åªèƒ½å†…存过滤。解决方案:1ã€æ–°å»ºä¸€ä¸ªå…³è”表;2ã€åŸºäºŽ where + 函数;3ã€json å­—æ®µï¼Œé€‚åˆ mysql 8+ 版本 - List users = userMapper.selectList(); - users.removeIf(user -> !CollUtil.containsAny(user.getPostIds(), postIds)); - return users; - } - - @Override - public List getUsersByDeptIds(Collection deptIds) { - if (CollUtil.isEmpty(deptIds)) { - return Collections.emptyList(); - } - return userMapper.selectListByDeptIds(deptIds); - } - - @Override - public void validUsers(Set ids) { - if (CollUtil.isEmpty(ids)) { - return; - } - // 获得岗ä½ä¿¡æ¯ - List users = userMapper.selectBatchIds(ids); - Map userMap = CollectionUtils.convertMap(users, SysUserDO::getId); - // 校验 - ids.forEach(id -> { - SysUserDO user = userMap.get(id); - if (user == null) { - throw exception(USER_NOT_EXISTS); - } - if (!CommonStatusEnum.ENABLE.getStatus().equals(user.getStatus())) { - throw exception(USER_IS_DISABLE, user.getNickname()); - } - }); - } - } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoExcelVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoExcelVO.java index bfb9170200..87e827440c 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoExcelVO.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoExcelVO.java @@ -3,7 +3,7 @@ package cn.iocoder.yudao.adminserver.modules.tool.controller.test.vo; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; import cn.iocoder.yudao.adminserver.modules.infra.enums.InfDictTypeConstants; -import cn.iocoder.yudao.adminserver.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormServiceTest.java b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormServiceTest.java deleted file mode 100644 index c04d41d444..0000000000 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormServiceTest.java +++ /dev/null @@ -1,152 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; - -import cn.hutool.core.util.RandomUtil; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.BpmFormCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.BpmFormPageReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.BpmFormUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmFormDO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmFormMapper; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmFormFieldRespDTO; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.impl.BpmFormServiceImpl; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.json.JsonUtils; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.function.Consumer; -import java.util.function.Function; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.FORM_NOT_EXISTS; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static org.junit.jupiter.api.Assertions.*; - -/** - * {@link BpmFormServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import(BpmFormServiceImpl.class) -public class BpmFormServiceTest extends BaseDbUnitTest { - - @Resource - private BpmFormServiceImpl formService; - - @Resource - private BpmFormMapper formMapper; - - @Test - public void testCreateForm_success() { - // 准备傿•° - BpmFormCreateReqVO reqVO = randomPojo(BpmFormCreateReqVO.class, o -> { - o.setConf("{}"); - o.setFields(randomFields()); - }); - - // 调用 - Long formId = formService.createForm(reqVO); - // 断言 - assertNotNull(formId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - BpmFormDO form = formMapper.selectById(formId); - assertPojoEquals(reqVO, form); - } - - @Test - public void testUpdateForm_success() { - // mock æ•°æ® - BpmFormDO dbForm = randomPojo(BpmFormDO.class, o -> { - o.setConf("{}"); - o.setFields(randomFields()); - }); - formMapper.insert(dbForm);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - BpmFormUpdateReqVO reqVO = randomPojo(BpmFormUpdateReqVO.class, o -> { - o.setId(dbForm.getId()); // 设置更新的 ID - o.setConf("{'yudao': 'yuanma'}"); - o.setFields(randomFields()); - }); - - // 调用 - formService.updateForm(reqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - BpmFormDO form = formMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(reqVO, form); - } - - @Test - public void testUpdateForm_notExists() { - // 准备傿•° - BpmFormUpdateReqVO reqVO = randomPojo(BpmFormUpdateReqVO.class, o -> { - o.setConf("{'yudao': 'yuanma'}"); - o.setFields(randomFields()); - }); - - // 调用, 并断言异常 - assertServiceException(() -> formService.updateForm(reqVO), FORM_NOT_EXISTS); - } - - @Test - public void testDeleteForm_success() { - // mock æ•°æ® - BpmFormDO dbForm = randomPojo(BpmFormDO.class); - formMapper.insert(dbForm);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbForm.getId(); - - // 调用 - formService.deleteForm(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(formMapper.selectById(id)); - } - - @Test - public void testDeleteForm_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> formService.deleteForm(id), FORM_NOT_EXISTS); - } - - @Test - public void testGetFormPage() { - // mock æ•°æ® - BpmFormDO dbForm = randomPojo(BpmFormDO.class, o -> { // 等会查询到 - o.setName("èŠ‹é“æºç "); - }); - formMapper.insert(dbForm); - // 测试 name ä¸åŒ¹é… - formMapper.insert(cloneIgnoreId(dbForm, o -> o.setName("æºç "))); - // 准备傿•° - BpmFormPageReqVO reqVO = new BpmFormPageReqVO(); - reqVO.setName("芋é“"); - - // 调用 - PageResult pageResult = formService.getFormPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbForm, pageResult.getList().get(0)); - } - - private List randomFields() { - int size = RandomUtil.randomInt(1, 3); - return Stream.iterate(0, i -> i).limit(size) - .map(i -> JsonUtils.toJsonString(randomPojo(BpmFormFieldRespDTO.class))) - .collect(Collectors.toList()); - } - -} diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupServiceTest.java b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupServiceTest.java deleted file mode 100644 index a8704dd611..0000000000 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupServiceTest.java +++ /dev/null @@ -1,134 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; - -import cn.hutool.core.date.DateUtil; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupPageReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmUserGroupDO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmUserGroupMapper; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.impl.BpmUserGroupServiceImpl; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.date.DateUtils; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; - -import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.USER_GROUP_NOT_EXISTS; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static org.junit.jupiter.api.Assertions.*; - -/** -* {@link BpmUserGroupServiceImpl} çš„å•元测试类 -* -* @author èŠ‹é“æºç  -*/ -@Import(BpmUserGroupServiceImpl.class) -public class BpmUserGroupServiceTest extends BaseDbUnitTest { - - @Resource - private BpmUserGroupServiceImpl userGroupService; - - @Resource - private BpmUserGroupMapper userGroupMapper; - - @Test - public void testCreateUserGroup_success() { - // 准备傿•° - BpmUserGroupCreateReqVO reqVO = randomPojo(BpmUserGroupCreateReqVO.class); - - // 调用 - Long userGroupId = userGroupService.createUserGroup(reqVO); - // 断言 - assertNotNull(userGroupId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - BpmUserGroupDO userGroup = userGroupMapper.selectById(userGroupId); - assertPojoEquals(reqVO, userGroup); - } - - @Test - public void testUpdateUserGroup_success() { - // mock æ•°æ® - BpmUserGroupDO dbUserGroup = randomPojo(BpmUserGroupDO.class); - userGroupMapper.insert(dbUserGroup);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - BpmUserGroupUpdateReqVO reqVO = randomPojo(BpmUserGroupUpdateReqVO.class, o -> { - o.setId(dbUserGroup.getId()); // 设置更新的 ID - }); - - // 调用 - userGroupService.updateUserGroup(reqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - BpmUserGroupDO userGroup = userGroupMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(reqVO, userGroup); - } - - @Test - public void testUpdateUserGroup_notExists() { - // 准备傿•° - BpmUserGroupUpdateReqVO reqVO = randomPojo(BpmUserGroupUpdateReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> userGroupService.updateUserGroup(reqVO), USER_GROUP_NOT_EXISTS); - } - - @Test - public void testDeleteUserGroup_success() { - // mock æ•°æ® - BpmUserGroupDO dbUserGroup = randomPojo(BpmUserGroupDO.class); - userGroupMapper.insert(dbUserGroup);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbUserGroup.getId(); - - // 调用 - userGroupService.deleteUserGroup(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(userGroupMapper.selectById(id)); - } - - @Test - public void testDeleteUserGroup_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> userGroupService.deleteUserGroup(id), USER_GROUP_NOT_EXISTS); - } - - @Test - public void testGetUserGroupPage() { - // mock æ•°æ® - BpmUserGroupDO dbUserGroup = randomPojo(BpmUserGroupDO.class, o -> { // 等会查询到 - o.setName("èŠ‹é“æºç "); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - o.setCreateTime(DateUtils.buildTime(2021, 11, 11)); - }); - userGroupMapper.insert(dbUserGroup); - // 测试 name ä¸åŒ¹é… - userGroupMapper.insert(cloneIgnoreId(dbUserGroup, o -> o.setName("芋é“"))); - // 测试 status ä¸åŒ¹é… - userGroupMapper.insert(cloneIgnoreId(dbUserGroup, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); - // 测试 createTime ä¸åŒ¹é… - userGroupMapper.insert(cloneIgnoreId(dbUserGroup, o -> o.setCreateTime(DateUtils.buildTime(2021, 12, 12)))); - // 准备傿•° - BpmUserGroupPageReqVO reqVO = new BpmUserGroupPageReqVO(); - reqVO.setName("æºç "); - reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); - reqVO.setBeginCreateTime(DateUtils.buildTime(2021, 11, 10)); - reqVO.setEndCreateTime(DateUtils.buildTime(2021, 11, 12)); - - // 调用 - PageResult pageResult = userGroupService.getUserGroupPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbUserGroup, pageResult.getList().get(0)); - } - -} diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysDeptServiceTest.java b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysDeptServiceTest.java index 1e276e3eac..78f8cb707e 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysDeptServiceTest.java +++ b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysDeptServiceTest.java @@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptCreateReqVO; import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptListReqVO; import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.dept.SysDeptMapper; import cn.iocoder.yudao.adminserver.modules.system.enums.dept.DeptIdEnum; import cn.iocoder.yudao.adminserver.modules.system.mq.producer.dept.SysDeptProducer; diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysPostServiceTest.java b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysPostServiceTest.java index c2a811f0b3..e3efb412fe 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysPostServiceTest.java +++ b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysPostServiceTest.java @@ -7,7 +7,7 @@ import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.SysPo import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.SysPostExportReqVO; import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.SysPostPageReqVO; import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.SysPostUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.dept.SysPostMapper; import cn.iocoder.yudao.adminserver.modules.system.service.dept.impl.SysPostServiceImpl; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysPermissionServiceTest.java b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysPermissionServiceTest.java index 3dd74408d5..6de00282f5 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysPermissionServiceTest.java +++ b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysPermissionServiceTest.java @@ -2,10 +2,10 @@ package cn.iocoder.yudao.adminserver.modules.system.service.permission; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleMenuDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysUserRoleDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysUserRoleDO; import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.permission.SysRoleMenuMapper; import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.permission.SysUserRoleMapper; import cn.iocoder.yudao.adminserver.modules.system.mq.producer.permission.SysPermissionProducer; diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysRoleServiceTest.java b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysRoleServiceTest.java index 08bd6521b1..87261a45e9 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysRoleServiceTest.java +++ b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysRoleServiceTest.java @@ -8,7 +8,7 @@ import cn.iocoder.yudao.framework.security.core.enums.DataScopeEnum; import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role.SysRoleCreateReqVO; import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role.SysRolePageReqVO; import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role.SysRoleUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.permission.SysRoleMapper; import cn.iocoder.yudao.adminserver.modules.system.enums.permission.SysRoleTypeEnum; import cn.iocoder.yudao.adminserver.modules.system.mq.producer.permission.SysRoleProducer; diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/user/SysUserServiceImplTest.java b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/user/SysUserServiceImplTest.java index d1d01c9542..dc90a436ad 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/user/SysUserServiceImplTest.java +++ b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/user/SysUserServiceImplTest.java @@ -6,8 +6,8 @@ import cn.iocoder.yudao.adminserver.BaseDbUnitTest; import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO; import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO; import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.*; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.user.SysUserMapper; import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysPostService; @@ -16,11 +16,11 @@ import cn.iocoder.yudao.adminserver.modules.system.service.user.impl.SysUserServ import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.enums.common.SysSexEnum; +import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; -import cn.iocoder.yudao.framework.common.util.collection.SetUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; import org.junit.jupiter.api.Test; import org.mockito.stubbing.Answer; @@ -42,7 +42,6 @@ import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEq import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; import static java.util.Collections.singleton; -import static java.util.Collections.singletonList; import static org.assertj.core.util.Lists.newArrayList; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; @@ -65,6 +64,9 @@ public class SysUserServiceImplTest extends BaseDbUnitTest { @MockBean private SysDeptService deptService; + + @MockBean + private SysDeptCoreService deptCoreService; @MockBean private SysPostService postService; @MockBean @@ -86,7 +88,7 @@ public class SysUserServiceImplTest extends BaseDbUnitTest { o.setId(reqVO.getDeptId()); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); }); - when(deptService.getDept(eq(dept.getId()))).thenReturn(dept); + when(deptCoreService.getDept(eq(dept.getId()))).thenReturn(dept); // mock postService 的方法 List posts = CollectionUtils.convertList(reqVO.getPostIds(), postId -> randomPojo(SysPostDO.class, o -> { @@ -122,7 +124,7 @@ public class SysUserServiceImplTest extends BaseDbUnitTest { o.setId(reqVO.getDeptId()); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); }); - when(deptService.getDept(eq(dept.getId()))).thenReturn(dept); + when(deptCoreService.getDept(eq(dept.getId()))).thenReturn(dept); // mock postService 的方法 List posts = CollectionUtils.convertList(reqVO.getPostIds(), postId -> randomPojo(SysPostDO.class, o -> { @@ -357,7 +359,7 @@ public class SysUserServiceImplTest extends BaseDbUnitTest { o.setId(importUser.getDeptId()); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); }); - when(deptService.getDept(eq(dept.getId()))).thenReturn(dept); + when(deptCoreService.getDept(eq(dept.getId()))).thenReturn(dept); // mock passwordEncoder 的方法 when(passwordEncoder.encode(eq("yudaoyuanma"))).thenReturn("java"); @@ -391,7 +393,7 @@ public class SysUserServiceImplTest extends BaseDbUnitTest { o.setId(importUser.getDeptId()); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); }); - when(deptService.getDept(eq(dept.getId()))).thenReturn(dept); + when(deptCoreService.getDept(eq(dept.getId()))).thenReturn(dept); // 调用 SysUserImportRespVO respVO = userService.importUsers(newArrayList(importUser), false); @@ -421,7 +423,7 @@ public class SysUserServiceImplTest extends BaseDbUnitTest { o.setId(importUser.getDeptId()); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); }); - when(deptService.getDept(eq(dept.getId()))).thenReturn(dept); + when(deptCoreService.getDept(eq(dept.getId()))).thenReturn(dept); // 调用 SysUserImportRespVO respVO = userService.importUsers(newArrayList(importUser), true); @@ -528,7 +530,7 @@ public class SysUserServiceImplTest extends BaseDbUnitTest { o.setId(deptId); o.setStatus(CommonStatusEnum.DISABLE.getStatus()); }); - when(deptService.getDept(eq(dept.getId()))).thenReturn(dept); + when(deptCoreService.getDept(eq(dept.getId()))).thenReturn(dept); // 调用,校验异常 assertServiceException(() -> userService.checkDeptEnable(deptId), @@ -580,22 +582,22 @@ public class SysUserServiceImplTest extends BaseDbUnitTest { verify(passwordEncoder, times(1)).matches(eq(oldPassword), eq(user.getPassword())); } - @Test - public void testUsersByPostIds() { - // 准备傿•° - Collection postIds = asSet(10L, 20L); - // mock 方法 - SysUserDO user1 = randomSysUserDO(o -> o.setPostIds(asSet(10L, 30L))); - userMapper.insert(user1); - SysUserDO user2 = randomSysUserDO(o -> o.setPostIds(singleton(100L))); - userMapper.insert(user2); - - // 调用 - List result = userService.getUsersByPostIds(postIds); - // 断言 - assertEquals(1, result.size()); - assertEquals(user1, result.get(0)); - } +// @Test //TODO jason å·²ç»ç§»åˆ°userCoreService.getUsersByPostIds +// public void testUsersByPostIds() { +// // 准备傿•° +// Collection postIds = asSet(10L, 20L); +// // mock 方法 +// SysUserDO user1 = randomSysUserDO(o -> o.setPostIds(asSet(10L, 30L))); +// userMapper.insert(user1); +// SysUserDO user2 = randomSysUserDO(o -> o.setPostIds(singleton(100L))); +// userMapper.insert(user2); +// +// // 调用 +// List result = userService.getUsersByPostIds(postIds); +// // 断言 +// assertEquals(1, result.size()); +// assertEquals(user1, result.get(0)); +// } // ========== éšæœºå¯¹è±¡ ========== diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/dept/SysDeptDO.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/dept/SysDeptDO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/dept/SysDeptDO.java rename to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/dept/SysDeptDO.java index ad0be694ab..ced8296dac 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/dept/SysDeptDO.java +++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/dept/SysDeptDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept; +package cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/dept/SysPostDO.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/dept/SysPostDO.java similarity index 93% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/dept/SysPostDO.java rename to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/dept/SysPostDO.java index 29652a0d81..6e47b1da42 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/dept/SysPostDO.java +++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/dept/SysPostDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept; +package cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/permission/SysRoleDO.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/permission/SysRoleDO.java similarity index 83% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/permission/SysRoleDO.java rename to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/permission/SysRoleDO.java index 72ebedbfd1..c27f588abe 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/permission/SysRoleDO.java +++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/permission/SysRoleDO.java @@ -1,11 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission; +package cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.mybatis.core.type.JsonLongSetTypeHandler; import cn.iocoder.yudao.framework.security.core.enums.DataScopeEnum; -import cn.iocoder.yudao.adminserver.modules.system.enums.permission.RoleCodeEnum; -import cn.iocoder.yudao.adminserver.modules.system.enums.permission.SysRoleTypeEnum; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -36,7 +34,7 @@ public class SysRoleDO extends BaseDO { /** * 角色标识 * - * 枚举 {@link RoleCodeEnum} + * 枚举 */ private String code; /** @@ -52,7 +50,7 @@ public class SysRoleDO extends BaseDO { /** * 角色类型 * - * 枚举 {@link SysRoleTypeEnum} + * 枚举 */ private Integer type; /** diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/permission/SysUserRoleDO.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/permission/SysUserRoleDO.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/permission/SysUserRoleDO.java rename to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/permission/SysUserRoleDO.java index 6792f56087..ac18d8c9c2 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/permission/SysUserRoleDO.java +++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/permission/SysUserRoleDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission; +package cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import com.baomidou.mybatisplus.annotation.TableId; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/dept/SysDeptCoreMapper.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/dept/SysDeptCoreMapper.java new file mode 100644 index 0000000000..ab98c65128 --- /dev/null +++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/dept/SysDeptCoreMapper.java @@ -0,0 +1,9 @@ +package cn.iocoder.yudao.coreservice.modules.system.dal.mysql.dept; + +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SysDeptCoreMapper extends BaseMapperX { +} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/dept/SysPostCoreMapper.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/dept/SysPostCoreMapper.java new file mode 100644 index 0000000000..94a4747e92 --- /dev/null +++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/dept/SysPostCoreMapper.java @@ -0,0 +1,9 @@ +package cn.iocoder.yudao.coreservice.modules.system.dal.mysql.dept; + +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SysPostCoreMapper extends BaseMapperX { +} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/permission/SysRoleCoreMapper.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/permission/SysRoleCoreMapper.java new file mode 100644 index 0000000000..69196d8f74 --- /dev/null +++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/permission/SysRoleCoreMapper.java @@ -0,0 +1,9 @@ +package cn.iocoder.yudao.coreservice.modules.system.dal.mysql.permission; + +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SysRoleCoreMapper extends BaseMapperX { +} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/permission/SysUserRoleCoreMapper.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/permission/SysUserRoleCoreMapper.java new file mode 100644 index 0000000000..1327efde96 --- /dev/null +++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/permission/SysUserRoleCoreMapper.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.coreservice.modules.system.dal.mysql.permission; + +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysUserRoleDO; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Collection; +import java.util.List; + +@Mapper +public interface SysUserRoleCoreMapper extends BaseMapperX { + + default List selectListByRoleIds(Collection roleIds) { + return selectList(SysUserRoleDO::getRoleId, roleIds); + } + +} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/user/SysUserCoreMapper.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/user/SysUserCoreMapper.java index a59275b39e..e4afd992a8 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/user/SysUserCoreMapper.java +++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/user/SysUserCoreMapper.java @@ -5,7 +5,13 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; +import java.util.Collection; +import java.util.List; + @Mapper public interface SysUserCoreMapper extends BaseMapperX { + default List selectListByDeptIds(Collection deptIds) { + return selectList(SysUserDO::getDeptId, deptIds); + } } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/SysDictTypeConstants.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/SysDictTypeConstants.java similarity index 96% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/SysDictTypeConstants.java rename to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/SysDictTypeConstants.java index cc7ae83f8a..766e0fe5c7 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/SysDictTypeConstants.java +++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/SysDictTypeConstants.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.enums; +package cn.iocoder.yudao.coreservice.modules.system.enums; /** * System 字典类型的枚举类 diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/SysErrorCodeConstants.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/SysErrorCodeConstants.java index 173287e522..e2dbf3417f 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/SysErrorCodeConstants.java +++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/SysErrorCodeConstants.java @@ -22,4 +22,24 @@ public interface SysErrorCodeConstants { ErrorCode SOCIAL_AUTH_FAILURE = new ErrorCode(1006002000, "社交授æƒå¤±è´¥ï¼ŒåŽŸå› æ˜¯ï¼š{}"); ErrorCode SOCIAL_UNBIND_NOT_SELF = new ErrorCode(1006002001, "社交解绑失败,éžå½“å‰ç”¨æˆ·ç»‘定"); + // ========== ç”¨æˆ·æ¨¡å— 1006003000 ========== + ErrorCode USER_NOT_EXISTS = new ErrorCode(1006003000, "用户ä¸å­˜åœ¨"); + ErrorCode USER_IS_DISABLE = new ErrorCode(1006003001, "å字为ã€{}】的用户已被ç¦ç”¨"); + + // ========== éƒ¨é—¨æ¨¡å— 1006004000 ========== + ErrorCode DEPT_NOT_FOUND = new ErrorCode(1006004000, "当å‰éƒ¨é—¨ä¸å­˜åœ¨"); + ErrorCode DEPT_NOT_ENABLE = new ErrorCode(1006004001, "部门ä¸å¤„于开å¯çжæ€ï¼Œä¸å…许选择"); + + // ========== è§’è‰²æ¨¡å— 1006005000 ========== + ErrorCode ROLE_NOT_EXISTS = new ErrorCode(1006005000, "角色ä¸å­˜åœ¨"); + ErrorCode ROLE_IS_DISABLE = new ErrorCode(1006005001, "å字为ã€{}】的角色已被ç¦ç”¨"); + + // ========== 字典类型 1006006000 ========== + ErrorCode DICT_DATA_NOT_EXISTS = new ErrorCode(1006006000, "当å‰å­—典数æ®ä¸å­˜åœ¨"); + ErrorCode DICT_DATA_NOT_ENABLE = new ErrorCode(1006006001, "字典数æ®({})ä¸å¤„于开å¯çжæ€ï¼Œä¸å…许选择"); + + // ========== 岗使¨¡å— 1006007000 ========== + ErrorCode POST_NOT_FOUND = new ErrorCode(1006007000, "当å‰å²—ä½ä¸å­˜åœ¨"); + ErrorCode POST_NOT_ENABLE = new ErrorCode(1006007001, "å²—ä½({}) ä¸å¤„于开å¯çжæ€ï¼Œä¸å…许选择"); + } diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dept/SysDeptCoreService.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dept/SysDeptCoreService.java new file mode 100644 index 0000000000..e963e51e0d --- /dev/null +++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dept/SysDeptCoreService.java @@ -0,0 +1,59 @@ +package cn.iocoder.yudao.coreservice.modules.system.service.dept; + +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +public interface SysDeptCoreService { + /** + * èŽ·å¾—éƒ¨é—¨ä¿¡æ¯æ•°ç»„ + * + * @param ids éƒ¨é—¨ç¼–å·æ•°ç»„ + * @return éƒ¨é—¨ä¿¡æ¯æ•°ç»„ + */ + List getDepts(Collection ids); + + /** + * èŽ·å¾—éƒ¨é—¨ä¿¡æ¯ + * + * @param id éƒ¨é—¨ç¼–å· + * @return éƒ¨é—¨ä¿¡æ¯ + */ + SysDeptDO getDept(Long id); + + /** + * æ ¡éªŒéƒ¨é—¨ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: + * 1. 部门编å·ä¸å­˜åœ¨ + * 2. 部门被ç¦ç”¨ + * + * @param ids è§’è‰²ç¼–å·æ•°ç»„ + */ + void validDepts(Collection ids); + + /** + * 获得指定编å·çš„部门列表 + * + * @param ids éƒ¨é—¨ç¼–å·æ•°ç»„ + * @return 部门列表 + */ + List getSimpleDepts(Collection ids); + + /** + * 获得指定编å·çš„部门 Map + * + * @param ids éƒ¨é—¨ç¼–å·æ•°ç»„ + * @return 部门 Map + */ + default Map getDeptMap(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return Collections.emptyMap(); + } + List list = getSimpleDepts(ids); + return CollectionUtils.convertMap(list, SysDeptDO::getId); + } +} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dept/SysPostCoreService.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dept/SysPostCoreService.java new file mode 100644 index 0000000000..14a0653adb --- /dev/null +++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dept/SysPostCoreService.java @@ -0,0 +1,19 @@ +package cn.iocoder.yudao.coreservice.modules.system.service.dept; + +import java.util.Collection; + +/** + * å²—ä½ Core Service æŽ¥å£ + * + * @author èŠ‹é“æºç  + */ +public interface SysPostCoreService { + /** + * 校验岗ä½ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: + * 1. å²—ä½ç¼–å·ä¸å­˜åœ¨ + * 2. å²—ä½è¢«ç¦ç”¨ + * + * @param ids å²—ä½ç¼–å·æ•°ç»„ + */ + void validPosts(Collection ids); +} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dept/impl/SysDeptCoreServiceImpl.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dept/impl/SysDeptCoreServiceImpl.java new file mode 100644 index 0000000000..4cfa49ed22 --- /dev/null +++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dept/impl/SysDeptCoreServiceImpl.java @@ -0,0 +1,69 @@ +package cn.iocoder.yudao.coreservice.modules.system.service.dept.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.dept.SysDeptCoreMapper; +import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.DEPT_NOT_ENABLE; +import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.DEPT_NOT_FOUND; +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 部门 Core Service 实现类 + * + * @author èŠ‹é“æºç  + */ +@Service +@Slf4j +public class SysDeptCoreServiceImpl implements SysDeptCoreService { + + @Resource + private SysDeptCoreMapper deptCoreMapper; + + @Override + public List getDepts(Collection ids) { + return deptCoreMapper.selectBatchIds(ids); + } + + @Override + public SysDeptDO getDept(Long id) { + return deptCoreMapper.selectById(id); + } + + @Override + public void validDepts(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // èŽ·å¾—ç§‘å®¤ä¿¡æ¯ + List depts = deptCoreMapper.selectBatchIds(ids); + Map deptMap = CollectionUtils.convertMap(depts, SysDeptDO::getId); + // 校验 + ids.forEach(id -> { + SysDeptDO dept = deptMap.get(id); + if (dept == null) { + throw exception(DEPT_NOT_FOUND); + } + if (!CommonStatusEnum.ENABLE.getStatus().equals(dept.getStatus())) { + throw exception(DEPT_NOT_ENABLE, dept.getName()); + } + }); + } + + @Override + public List getSimpleDepts(Collection ids) { + return deptCoreMapper.selectBatchIds(ids); + } + +} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dept/impl/SysPostCoreServiceImpl.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dept/impl/SysPostCoreServiceImpl.java new file mode 100644 index 0000000000..0e2b2b928f --- /dev/null +++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dept/impl/SysPostCoreServiceImpl.java @@ -0,0 +1,50 @@ +package cn.iocoder.yudao.coreservice.modules.system.service.dept.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.dept.SysPostCoreMapper; +import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysPostCoreService; +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.POST_NOT_ENABLE; +import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.POST_NOT_FOUND; +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; + +/** + * å²—ä½ Core Service 实现类 + * + * @author èŠ‹é“æºç  + */ +@Service +public class SysPostCoreServiceImpl implements SysPostCoreService { + + @Resource + private SysPostCoreMapper sysPostCoreMapper; + + @Override + public void validPosts(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // 获得岗ä½ä¿¡æ¯ + List posts = sysPostCoreMapper.selectBatchIds(ids); + Map postMap = CollectionUtils.convertMap(posts, SysPostDO::getId); + // 校验 + ids.forEach(id -> { + SysPostDO post = postMap.get(id); + if (post == null) { + throw exception(POST_NOT_FOUND); + } + if (!CommonStatusEnum.ENABLE.getStatus().equals(post.getStatus())) { + throw exception(POST_NOT_ENABLE, post.getName()); + } + }); + } +} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dict/SysDictDataCoreService.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dict/SysDictDataCoreService.java index d886956219..bcac11c59e 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dict/SysDictDataCoreService.java +++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dict/SysDictDataCoreService.java @@ -2,6 +2,8 @@ package cn.iocoder.yudao.coreservice.modules.system.service.dict; import cn.iocoder.yudao.framework.dict.core.service.DictDataFrameworkService; +import java.util.Collection; + /** * å­—å…¸æ•°æ® Service æŽ¥å£ * @@ -14,4 +16,14 @@ public interface SysDictDataCoreService extends DictDataFrameworkService { */ void initLocalCache(); + /** + * 校验字典数æ®ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: + * 1. 字典数æ®ä¸å­˜åœ¨ + * 2. 字典数æ®è¢«ç¦ç”¨ + * + * @param dictType 字典类型 + * @param values 字典数æ®å€¼çš„æ•°ç»„ + */ + void validDictDatas(String dictType, Collection values); + } diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dict/impl/SysDictDataCoreServiceImpl.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dict/impl/SysDictDataCoreServiceImpl.java index 98607163d2..328cac56b7 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dict/impl/SysDictDataCoreServiceImpl.java +++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dict/impl/SysDictDataCoreServiceImpl.java @@ -5,8 +5,11 @@ import cn.iocoder.yudao.coreservice.modules.system.convert.dict.SysDictDataCoreC import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO; import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.dict.SysDictDataCoreMapper; import cn.iocoder.yudao.coreservice.modules.system.service.dict.SysDictDataCoreService; +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.dict.core.dto.DictDataRespDTO; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableTable; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; @@ -14,9 +17,11 @@ import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; import javax.annotation.Resource; -import java.util.Comparator; -import java.util.Date; -import java.util.List; +import java.util.*; + +import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.DICT_DATA_NOT_ENABLE; +import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.DICT_DATA_NOT_EXISTS; +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** * å­—å…¸æ•°æ® Service 实现类 @@ -119,4 +124,22 @@ public class SysDictDataCoreServiceImpl implements SysDictDataCoreService { return SysDictDataCoreConvert.INSTANCE.convertList03(labelDictDataCache.row(type).values()); } + @Override + public void validDictDatas(String dictType, Collection values) { + if (CollUtil.isEmpty(values)) { + return; + } + ImmutableMap dictDataMap = valueDictDataCache.row(dictType); + // 校验 + values.forEach(value -> { + SysDictDataDO dictData = dictDataMap.get(value); + if (dictData == null) { + throw exception(DICT_DATA_NOT_EXISTS); + } + if (!CommonStatusEnum.ENABLE.getStatus().equals(dictData.getStatus())) { + throw exception(DICT_DATA_NOT_ENABLE, dictData.getLabel()); + } + }); + } + } diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/permission/SysPermissionCoreService.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/permission/SysPermissionCoreService.java new file mode 100644 index 0000000000..9f3032965e --- /dev/null +++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/permission/SysPermissionCoreService.java @@ -0,0 +1,20 @@ +package cn.iocoder.yudao.coreservice.modules.system.service.permission; + +import java.util.Collection; +import java.util.Set; +/** + * æƒé™ Core Service æŽ¥å£ + * + * æä¾›ç”¨æˆ·-角色ã€è§’色-èœå•ã€è§’色-éƒ¨é—¨çš„å…³è”æƒé™å¤„ç† + * + * @author èŠ‹é“æºç  + */ +public interface SysPermissionCoreService { + /** + * 获得拥有多个角色的用户编å·é›†åˆ + * + * @param roleIds 角色编å·é›†åˆ + * @return 用户编å·é›†åˆ + */ + Set getUserRoleIdListByRoleIds(Collection roleIds); +} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/permission/SysRoleCoreService.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/permission/SysRoleCoreService.java new file mode 100644 index 0000000000..1b43e42f71 --- /dev/null +++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/permission/SysRoleCoreService.java @@ -0,0 +1,19 @@ +package cn.iocoder.yudao.coreservice.modules.system.service.permission; + +import java.util.Collection; + +/** + * 角色 Core Service æŽ¥å£ + * + * @author èŠ‹é“æºç  + */ +public interface SysRoleCoreService { + /** + * æ ¡éªŒè§’è‰²ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: + * 1. 角色编å·ä¸å­˜åœ¨ + * 2. 角色被ç¦ç”¨ + * + * @param ids è§’è‰²ç¼–å·æ•°ç»„ + */ + void validRoles(Collection ids); +} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/permission/impl/SysPermissionCoreServiceImpl.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/permission/impl/SysPermissionCoreServiceImpl.java new file mode 100644 index 0000000000..b9618a93d2 --- /dev/null +++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/permission/impl/SysPermissionCoreServiceImpl.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.coreservice.modules.system.service.permission.impl; + +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysUserRoleDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.permission.SysUserRoleCoreMapper; +import cn.iocoder.yudao.coreservice.modules.system.service.permission.SysPermissionCoreService; +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Collection; +import java.util.Set; +/** + * æƒé™ Core Service 实现类 + * + * @author èŠ‹é“æºç  + */ +@Service +public class SysPermissionCoreServiceImpl implements SysPermissionCoreService { + + @Resource + private SysUserRoleCoreMapper userRoleCoreMapper; + + @Override + public Set getUserRoleIdListByRoleIds(Collection roleIds) { + return CollectionUtils.convertSet(userRoleCoreMapper.selectListByRoleIds(roleIds), + SysUserRoleDO::getRoleId); + } +} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/permission/impl/SysRoleCoreServiceImpl.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/permission/impl/SysRoleCoreServiceImpl.java new file mode 100644 index 0000000000..ebeb7ea207 --- /dev/null +++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/permission/impl/SysRoleCoreServiceImpl.java @@ -0,0 +1,50 @@ +package cn.iocoder.yudao.coreservice.modules.system.service.permission.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.permission.SysRoleCoreMapper; +import cn.iocoder.yudao.coreservice.modules.system.service.permission.SysRoleCoreService; +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.ROLE_IS_DISABLE; +import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.ROLE_NOT_EXISTS; +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 角色 Core Service 实现类 + * + * @author èŠ‹é“æºç  + */ +@Service +public class SysRoleCoreServiceImpl implements SysRoleCoreService { + + @Resource + private SysRoleCoreMapper sysRoleCoreMapper; + + @Override + public void validRoles(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // èŽ·å¾—è§’è‰²ä¿¡æ¯ + List roles = sysRoleCoreMapper.selectBatchIds(ids); + Map roleMap = CollectionUtils.convertMap(roles, SysRoleDO::getId); + // 校验 + ids.forEach(id -> { + SysRoleDO role = roleMap.get(id); + if (role == null) { + throw exception(ROLE_NOT_EXISTS); + } + if (!CommonStatusEnum.ENABLE.getStatus().equals(role.getStatus())) { + throw exception(ROLE_IS_DISABLE, role.getName()); + } + }); + } +} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/user/SysUserCoreService.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/user/SysUserCoreService.java index bc95e343e3..c86e7a84ba 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/user/SysUserCoreService.java +++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/user/SysUserCoreService.java @@ -1,6 +1,10 @@ package cn.iocoder.yudao.coreservice.modules.system.service.user; +import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; + +import java.util.*; /** * åŽå°ç”¨æˆ· Service Core æŽ¥å£ @@ -17,4 +21,50 @@ public interface SysUserCoreService { */ SysUserDO getUser(Long id); + /** + * 获得指定部门的用户数组 + * + * @param deptIds 部门数组 + * @return 用户数组 + */ + List getUsersByDeptIds(Collection deptIds); + + /** + * 获得指定岗ä½çš„用户数组 + * + * @param postIds 岗使•°ç»„ + * @return 用户数组 + */ + List getUsersByPostIds(Collection postIds); + + /** + * 获得用户列表 + * + * @param ids ç”¨æˆ·ç¼–å·æ•°ç»„ + * @return 用户列表 + */ + List getUsers(Collection ids); + + /** + * æ ¡éªŒç”¨æˆ·ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: + * 1. 用户编å·ä¸å­˜åœ¨ + * 2. 用户被ç¦ç”¨ + * + * @param ids ç”¨æˆ·ç¼–å·æ•°ç»„ + */ + void validUsers(Set ids); + + /** + * 获得用户 Map + * + * @param ids ç”¨æˆ·ç¼–å·æ•°ç»„ + * @return 用户 Map + */ + default Map getUserMap(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return new HashMap<>(); + } + return CollectionUtils.convertMap(getUsers(ids), SysUserDO::getId); + } + } diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/user/impl/SysUserCoreServiceImpl.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/user/impl/SysUserCoreServiceImpl.java index ff203bdc44..c2b5b054d3 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/user/impl/SysUserCoreServiceImpl.java +++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/user/impl/SysUserCoreServiceImpl.java @@ -1,11 +1,19 @@ package cn.iocoder.yudao.coreservice.modules.system.service.user.impl; +import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.user.SysUserCoreMapper; import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.*; + +import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.USER_IS_DISABLE; +import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.USER_NOT_EXISTS; +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** * åŽå°ç”¨æˆ· Service Core 实现 @@ -23,4 +31,52 @@ public class SysUserCoreServiceImpl implements SysUserCoreService { return userCoreMapper.selectById(id); } + @Override + public List getUsersByDeptIds(Collection deptIds) { + if (CollUtil.isEmpty(deptIds)) { + return Collections.emptyList(); + } + return userCoreMapper.selectListByDeptIds(deptIds); + } + + @Override + public List getUsersByPostIds(Collection postIds) { + if (CollUtil.isEmpty(postIds)) { + return Collections.emptyList(); + } + // 过滤ä¸ç¬¦åˆæ¡ä»¶çš„ + // TODO 芋艿:暂时åªèƒ½å†…存过滤。解决方案:1ã€æ–°å»ºä¸€ä¸ªå…³è”表;2ã€åŸºäºŽ where + 函数;3ã€json å­—æ®µï¼Œé€‚åˆ mysql 8+ 版本 + List users = userCoreMapper.selectList(); + users.removeIf(user -> !CollUtil.containsAny(user.getPostIds(), postIds)); + return users; + } + + @Override + public List getUsers(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return Collections.emptyList(); + } + return userCoreMapper.selectBatchIds(ids); + } + + @Override + public void validUsers(Set ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // 获得岗ä½ä¿¡æ¯ + List users = userCoreMapper.selectBatchIds(ids); + Map userMap = CollectionUtils.convertMap(users, SysUserDO::getId); + // 校验 + ids.forEach(id -> { + SysUserDO user = userMap.get(id); + if (user == null) { + throw exception(USER_NOT_EXISTS); + } + if (!CommonStatusEnum.ENABLE.getStatus().equals(user.getStatus())) { + throw exception(USER_IS_DISABLE, user.getNickname()); + } + }); + } + } diff --git a/yudao-dependencies/pom.xml b/yudao-dependencies/pom.xml index 5e057116e8..7aa40966b8 100644 --- a/yudao-dependencies/pom.xml +++ b/yudao-dependencies/pom.xml @@ -43,6 +43,7 @@ 3.6.28 7.1.0.M6 + 6.7.0 1.18.20 1.4.1.Final @@ -396,6 +397,33 @@ activiti-image-generator ${activiti.version} + + + org.flowable + flowable-spring-boot-starter-basic + ${flowable.version} + + + org.flowable + flowable-spring-boot-starter-actuator + ${flowable.version} + + + cn.iocoder.boot + yudao-module-bpm-core-service + ${revision} + + + cn.iocoder.boot + yudao-module-bpm-activiti + ${revision} + + + cn.iocoder.boot + yudao-module-bpm-flowable + ${revision} + + diff --git a/yudao-module-bpm/pom.xml b/yudao-module-bpm/pom.xml new file mode 100644 index 0000000000..4924978759 --- /dev/null +++ b/yudao-module-bpm/pom.xml @@ -0,0 +1,18 @@ + + + + yudao + cn.iocoder.boot + ${revision} + + pom + + yudao-module-bpm-flowable + yudao-module-bpm-activiti + yudao-module-bpm-core-service + + 4.0.0 + yudao-module-bpm + \ No newline at end of file diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/pom.xml b/yudao-module-bpm/yudao-module-bpm-activiti/pom.xml new file mode 100644 index 0000000000..775bdf6c04 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-activiti/pom.xml @@ -0,0 +1,30 @@ + + + + yudao-module-bpm + cn.iocoder.boot + ${revision} + + 4.0.0 + + yudao-module-bpm-activiti + + + cn.iocoder.boot + yudao-spring-boot-starter-activiti + + + cn.iocoder.boot + yudao-core-service + + + + cn.iocoder.boot + yudao-spring-boot-starter-test + test + + + + \ No newline at end of file diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmFormController.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmFormController.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmFormController.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmFormController.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmModelController.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmModelController.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmModelController.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmModelController.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.http b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.http similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.http rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.http diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.http b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.http similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.http rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.http diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmUserGroupController.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmUserGroupController.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmUserGroupController.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmUserGroupController.java index 00a31e8b88..ea5fafd8e0 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmUserGroupController.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmUserGroupController.java @@ -7,9 +7,6 @@ import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.B import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmUserGroupConvert; import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmUserGroupDO; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmUserGroupService; -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.SysUserSimpleRespVO; -import cn.iocoder.yudao.adminserver.modules.system.convert.user.SysUserConvert; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -22,7 +19,6 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.validation.Valid; - import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormBaseVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormBaseVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormBaseVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormBaseVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormCreateReqVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormCreateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormCreateReqVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormPageReqVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormPageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormPageReqVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormRespVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormRespVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormRespVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormRespVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormSimpleRespVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormSimpleRespVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormSimpleRespVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormSimpleRespVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormUpdateReqVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormUpdateReqVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormUpdateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormUpdateReqVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupBaseVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupBaseVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupBaseVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupBaseVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupCreateReqVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupCreateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupCreateReqVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupPageReqVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupPageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupPageReqVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupRespVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupRespVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupRespVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupRespVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupSimpleRespVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupSimpleRespVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupSimpleRespVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupSimpleRespVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupUpdateReqVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupUpdateReqVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupUpdateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupUpdateReqVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModeImportReqVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModeImportReqVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModeImportReqVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModeImportReqVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelBaseVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelBaseVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelBaseVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelBaseVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelCreateReqVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelCreateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelCreateReqVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelPageItemRespVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelPageItemRespVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelPageItemRespVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelPageItemRespVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelRespVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelRespVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelRespVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelRespVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelUpdateReqVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelUpdateReqVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelUpdateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelUpdateReqVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelUpdateStateReqVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelUpdateStateReqVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelUpdateStateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelUpdateStateReqVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/ModelPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/ModelPageReqVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/ModelPageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/ModelPageReqVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionListReqVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionListReqVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionListReqVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionListReqVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionPageItemRespVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionPageItemRespVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionPageItemRespVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionPageItemRespVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionPageReqVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionPageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionPageReqVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionRespVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionRespVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionRespVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionRespVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleBaseVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleBaseVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleBaseVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleBaseVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleCreateReqVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleCreateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleCreateReqVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleRespVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleRespVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleRespVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleRespVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleUpdateReqVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleUpdateReqVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleUpdateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleUpdateReqVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.http b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.http similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.http rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.http diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveBaseVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveBaseVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveBaseVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveBaseVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveCreateReqVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveCreateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveCreateReqVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeavePageReqVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeavePageReqVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeavePageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeavePageReqVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveRespVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveRespVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveRespVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveRespVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmActivityController.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmActivityController.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmActivityController.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmActivityController.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.http b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.http similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.http rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.http diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.http b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.http similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.http rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.http diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/activity/BpmActivityRespVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/activity/BpmActivityRespVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/activity/BpmActivityRespVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/activity/BpmActivityRespVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceCancelReqVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceCancelReqVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceCancelReqVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceCancelReqVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceCreateReqVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceCreateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceCreateReqVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceMyPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceMyPageReqVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceMyPageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceMyPageReqVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstancePageItemRespVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstancePageItemRespVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstancePageItemRespVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstancePageItemRespVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceRespVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceRespVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceRespVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceRespVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskApproveReqVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskApproveReqVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskApproveReqVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskApproveReqVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskDonePageItemRespVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskDonePageItemRespVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskDonePageItemRespVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskDonePageItemRespVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskDonePageReqVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskDonePageReqVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskDonePageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskDonePageReqVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskRejectReqVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskRejectReqVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskRejectReqVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskRejectReqVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskRespVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskRespVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskRespVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskRespVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskTodoPageItemRespVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskTodoPageItemRespVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskTodoPageItemRespVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskTodoPageItemRespVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskTodoPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskTodoPageReqVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskTodoPageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskTodoPageReqVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskUpdateAssigneeReqVO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskUpdateAssigneeReqVO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskUpdateAssigneeReqVO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskUpdateAssigneeReqVO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmFormConvert.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmFormConvert.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmFormConvert.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmFormConvert.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmModelConvert.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmModelConvert.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmModelConvert.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmModelConvert.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmProcessDefinitionConvert.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmProcessDefinitionConvert.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmProcessDefinitionConvert.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmProcessDefinitionConvert.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmTaskAssignRuleConvert.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmTaskAssignRuleConvert.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmTaskAssignRuleConvert.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmTaskAssignRuleConvert.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmUserGroupConvert.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmUserGroupConvert.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmUserGroupConvert.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmUserGroupConvert.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/message/BpmMessageConvert.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/message/BpmMessageConvert.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/message/BpmMessageConvert.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/message/BpmMessageConvert.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/oa/BpmOALeaveConvert.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/oa/BpmOALeaveConvert.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/oa/BpmOALeaveConvert.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/oa/BpmOALeaveConvert.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/package-info.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/package-info.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/package-info.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/package-info.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmActivityConvert.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmActivityConvert.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmActivityConvert.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmActivityConvert.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java similarity index 96% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java index 88405027f5..e54e850b22 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java @@ -2,11 +2,10 @@ package cn.iocoder.yudao.adminserver.modules.bpm.convert.task; import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstancePageItemRespVO; import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.BpmTaskRespVO; import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event.BpmProcessInstanceResultEvent; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.activiti.engine.history.HistoricProcessInstance; @@ -19,10 +18,8 @@ import org.mapstruct.MappingTarget; import org.mapstruct.Mappings; import org.mapstruct.factory.Mappers; -import java.sql.SQLXML; import java.util.List; import java.util.Map; -import java.util.function.Consumer; /** * æµç¨‹å®žä¾‹ Convert diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmTaskConvert.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmTaskConvert.java similarity index 98% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmTaskConvert.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmTaskConvert.java index 303a3d00ec..424ae25178 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmTaskConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmTaskConvert.java @@ -4,7 +4,7 @@ import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.BpmTaskD import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.BpmTaskRespVO; import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.BpmTaskTodoPageItemRespVO; import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmTaskExtDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.number.NumberUtils; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmFormDO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmFormDO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmFormDO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmFormDO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmProcessDefinitionExtDO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmProcessDefinitionExtDO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmProcessDefinitionExtDO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmProcessDefinitionExtDO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskAssignRuleDO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskAssignRuleDO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskAssignRuleDO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskAssignRuleDO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskMessageRuleDO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskMessageRuleDO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskMessageRuleDO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskMessageRuleDO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmUserGroupDO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmUserGroupDO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmUserGroupDO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmUserGroupDO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/leave/BpmOALeaveDO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/leave/BpmOALeaveDO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/leave/BpmOALeaveDO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/leave/BpmOALeaveDO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmProcessInstanceExtDO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmProcessInstanceExtDO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmProcessInstanceExtDO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmProcessInstanceExtDO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmTaskExtDO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmTaskExtDO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmTaskExtDO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmTaskExtDO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmFormMapper.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmFormMapper.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmFormMapper.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmFormMapper.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmProcessDefinitionExtMapper.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmProcessDefinitionExtMapper.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmProcessDefinitionExtMapper.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmProcessDefinitionExtMapper.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmTaskAssignRuleMapper.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmTaskAssignRuleMapper.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmTaskAssignRuleMapper.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmTaskAssignRuleMapper.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmUserGroupMapper.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmUserGroupMapper.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmUserGroupMapper.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmUserGroupMapper.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/oa/BpmOALeaveMapper.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/oa/BpmOALeaveMapper.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/oa/BpmOALeaveMapper.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/oa/BpmOALeaveMapper.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmTaskExtMapper.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmTaskExtMapper.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmTaskExtMapper.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmTaskExtMapper.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmModelFormTypeEnum.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmModelFormTypeEnum.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmModelFormTypeEnum.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmModelFormTypeEnum.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmTaskAssignRuleTypeEnum.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmTaskAssignRuleTypeEnum.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmTaskAssignRuleTypeEnum.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmTaskAssignRuleTypeEnum.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmTaskRuleScriptEnum.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmTaskRuleScriptEnum.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmTaskRuleScriptEnum.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmTaskRuleScriptEnum.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/message/BpmMessageEnum.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/message/BpmMessageEnum.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/message/BpmMessageEnum.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/message/BpmMessageEnum.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceDeleteReasonEnum.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceDeleteReasonEnum.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceDeleteReasonEnum.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceDeleteReasonEnum.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceResultEnum.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceResultEnum.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceResultEnum.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceResultEnum.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceStatusEnum.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceStatusEnum.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceStatusEnum.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceStatusEnum.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java similarity index 86% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java index ccb7cad788..4e0938d462 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java @@ -7,9 +7,9 @@ import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.identity import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.listener.BpmTackActivitiEventListener; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmUserGroupService; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService; -import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; +import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; +import cn.iocoder.yudao.coreservice.modules.system.service.permission.SysPermissionCoreService; +import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; import org.activiti.api.runtime.shared.identity.UserGroupManager; import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer; import org.springframework.context.ApplicationEventPublisher; @@ -58,17 +58,17 @@ public class BpmActivitiConfiguration { @Bean public BpmActivityBehaviorFactory bpmActivityBehaviorFactory(BpmTaskAssignRuleService taskRuleService, - SysPermissionService permissionService, - SysDeptService deptService, + SysPermissionCoreService permissionCoreService, + SysDeptCoreService deptCoreService, BpmUserGroupService userGroupService, - SysUserService userService, + SysUserCoreService userCoreService, List scripts) { BpmActivityBehaviorFactory bpmActivityBehaviorFactory = new BpmActivityBehaviorFactory(); bpmActivityBehaviorFactory.setBpmTaskRuleService(taskRuleService); - bpmActivityBehaviorFactory.setPermissionService(permissionService); - bpmActivityBehaviorFactory.setDeptService(deptService); + bpmActivityBehaviorFactory.setPermissionCoreService(permissionCoreService); + bpmActivityBehaviorFactory.setDeptCoreService(deptCoreService); bpmActivityBehaviorFactory.setUserGroupService(userGroupService); - bpmActivityBehaviorFactory.setUserService(userService); + bpmActivityBehaviorFactory.setUserCoreService(userCoreService); bpmActivityBehaviorFactory.setScripts(scripts); return bpmActivityBehaviorFactory; } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java similarity index 74% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java index 1e3f542fae..2107fb72b4 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java @@ -3,9 +3,9 @@ package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavio import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmUserGroupService; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService; -import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; +import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; +import cn.iocoder.yudao.coreservice.modules.system.service.permission.SysPermissionCoreService; +import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.Setter; @@ -14,7 +14,6 @@ import org.activiti.bpmn.model.UserTask; import org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior; import org.activiti.engine.impl.bpmn.parser.factory.DefaultActivityBehaviorFactory; -import javax.annotation.Resource; import java.util.List; /** @@ -31,13 +30,13 @@ public class BpmActivityBehaviorFactory extends DefaultActivityBehaviorFactory { @Setter private BpmTaskAssignRuleService bpmTaskRuleService; @Setter - private SysPermissionService permissionService; + private SysPermissionCoreService permissionCoreService; @Setter - private SysDeptService deptService; + private SysDeptCoreService deptCoreService; @Setter private BpmUserGroupService userGroupService; @Setter - private SysUserService userService; + private SysUserCoreService userCoreService; @Setter private List scripts; @@ -45,10 +44,10 @@ public class BpmActivityBehaviorFactory extends DefaultActivityBehaviorFactory { public UserTaskActivityBehavior createUserTaskActivityBehavior(UserTask userTask) { BpmUserTaskActivitiBehavior userTaskActivityBehavior = new BpmUserTaskActivitiBehavior(userTask); userTaskActivityBehavior.setBpmTaskRuleService(bpmTaskRuleService); - userTaskActivityBehavior.setPermissionService(permissionService); - userTaskActivityBehavior.setDeptService(deptService); + userTaskActivityBehavior.setPermissionCoreService(permissionCoreService); + userTaskActivityBehavior.setDeptCoreService(deptCoreService); userTaskActivityBehavior.setUserGroupService(userGroupService); - userTaskActivityBehavior.setUserService(userService); + userTaskActivityBehavior.setSysUserCoreService(userCoreService); userTaskActivityBehavior.setScripts(scripts); return userTaskActivityBehavior; } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java index 55c426db03..69624d793d 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java @@ -9,11 +9,11 @@ import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmTaskAssignRu import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmUserGroupService; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService; -import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; +import cn.iocoder.yudao.coreservice.modules.system.service.permission.SysPermissionCoreService; +import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import com.google.common.annotations.VisibleForTesting; import lombok.Setter; @@ -49,13 +49,13 @@ public class BpmUserTaskActivitiBehavior extends UserTaskActivityBehavior { @Setter private BpmTaskAssignRuleService bpmTaskRuleService; @Setter - private SysPermissionService permissionService; + private SysPermissionCoreService permissionCoreService; @Setter - private SysDeptService deptService; + private SysDeptCoreService deptCoreService; @Setter private BpmUserGroupService userGroupService; @Setter - private SysUserService userService; + private SysUserCoreService sysUserCoreService; /** * 任务分é…脚本 */ @@ -133,21 +133,21 @@ public class BpmUserTaskActivitiBehavior extends UserTaskActivityBehavior { } private Set calculateTaskCandidateUsersByRole(TaskEntity task, BpmTaskAssignRuleDO rule) { - return permissionService.getUserRoleIdListByRoleIds(rule.getOptions()); + return permissionCoreService.getUserRoleIdListByRoleIds(rule.getOptions()); } private Set calculateTaskCandidateUsersByDeptMember(TaskEntity task, BpmTaskAssignRuleDO rule) { - List users = userService.getUsersByDeptIds(rule.getOptions()); + List users = sysUserCoreService.getUsersByDeptIds(rule.getOptions()); return convertSet(users, SysUserDO::getId); } private Set calculateTaskCandidateUsersByDeptLeader(TaskEntity task, BpmTaskAssignRuleDO rule) { - List depts = deptService.getDepts(rule.getOptions()); + List depts = deptCoreService.getDepts(rule.getOptions()); return convertSet(depts, SysDeptDO::getLeaderUserId); } private Set calculateTaskCandidateUsersByPost(TaskEntity task, BpmTaskAssignRuleDO rule) { - List users = userService.getUsersByPostIds(rule.getOptions()); + List users = sysUserCoreService.getUsersByPostIds(rule.getOptions()); return convertSet(users, SysUserDO::getId); } @@ -183,7 +183,7 @@ public class BpmUserTaskActivitiBehavior extends UserTaskActivityBehavior { if (CollUtil.isEmpty(assigneeUserIds)) { return; } - Map userMap = userService.getUserMap(assigneeUserIds); + Map userMap = sysUserCoreService.getUserMap(assigneeUserIds); assigneeUserIds.removeIf(id -> { SysUserDO user = userMap.get(id); return user == null || !CommonStatusEnum.ENABLE.getStatus().equals(user.getStatus()); diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/package-info.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/package-info.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/package-info.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/package-info.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/BpmTaskAssignScript.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/BpmTaskAssignScript.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/BpmTaskAssignScript.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/BpmTaskAssignScript.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderAbstractScript.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderAbstractScript.java similarity index 79% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderAbstractScript.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderAbstractScript.java index cfb3b2a22c..eeb8b40bd1 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderAbstractScript.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderAbstractScript.java @@ -1,10 +1,11 @@ package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.impl; import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; -import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; + +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; +import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; import org.activiti.engine.impl.persistence.entity.TaskEntity; import org.springframework.util.Assert; @@ -23,9 +24,9 @@ import static java.util.Collections.emptySet; public abstract class BpmTaskAssignLeaderAbstractScript implements BpmTaskAssignScript { @Resource - private SysUserService userService; + private SysUserCoreService userCoreService; @Resource - private SysDeptService deptService; + private SysDeptCoreService deptCoreService; protected Set calculateTaskCandidateUsers(TaskEntity task, int level) { Assert.isTrue(level > 0, "level 必须大于 0"); @@ -41,7 +42,7 @@ public abstract class BpmTaskAssignLeaderAbstractScript implements BpmTaskAssign return emptySet(); } } else { - SysDeptDO parentDept = deptService.getDept(dept.getParentId()); + SysDeptDO parentDept = deptCoreService.getDept(dept.getParentId()); if (parentDept == null) { // 找ä¸åˆ°çˆ¶çº§éƒ¨é—¨ï¼Œæ‰€ä»¥åªå¥½ç»“æŸå¯»æ‰¾ã€‚原因是:例如说,级别比较高的人,所在部门层级比较少 break; } @@ -52,11 +53,11 @@ public abstract class BpmTaskAssignLeaderAbstractScript implements BpmTaskAssign } private SysDeptDO getStartUserDept(Long startUserId) { - SysUserDO startUser = userService.getUser(startUserId); + SysUserDO startUser = userCoreService.getUser(startUserId); if (startUser.getDeptId() == null) { // 找ä¸åˆ°éƒ¨é—¨ï¼Œæ‰€ä»¥æ— æ³•使用该规则 return null; } - return deptService.getDept(startUser.getDeptId()); + return deptCoreService.getDept(startUser.getDeptId()); } } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX1Script.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX1Script.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX1Script.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX1Script.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2Script.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2Script.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2Script.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2Script.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignStartUserScript.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignStartUserScript.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignStartUserScript.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignStartUserScript.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEvent.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEvent.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEvent.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEvent.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEventListener.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEventListener.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEventListener.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEventListener.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEventPublisher.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEventPublisher.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEventPublisher.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEventPublisher.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/package-info.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/package-info.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/package-info.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/package-info.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/identity/EmptyUserGroupManager.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/identity/EmptyUserGroupManager.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/identity/EmptyUserGroupManager.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/identity/EmptyUserGroupManager.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTackActivitiEventListener.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTackActivitiEventListener.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTackActivitiEventListener.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTackActivitiEventListener.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTaskEventListener.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTaskEventListener.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTaskEventListener.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTaskEventListener.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/package-info.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/package-info.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/package-info.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/package-info.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/package-info.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/package-info.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/package-info.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/package-info.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/package-info.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/package-info.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/package-info.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/package-info.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormService.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormService.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormService.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormService.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmModelService.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmModelService.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmModelService.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmModelService.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmProcessDefinitionService.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmProcessDefinitionService.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmProcessDefinitionService.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmProcessDefinitionService.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmTaskAssignRuleService.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmTaskAssignRuleService.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmTaskAssignRuleService.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmTaskAssignRuleService.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupService.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupService.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupService.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupService.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmFormFieldRespDTO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmFormFieldRespDTO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmFormFieldRespDTO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmFormFieldRespDTO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmModelMetaInfoRespDTO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmModelMetaInfoRespDTO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmModelMetaInfoRespDTO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmModelMetaInfoRespDTO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmProcessDefinitionCreateReqDTO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmProcessDefinitionCreateReqDTO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmProcessDefinitionCreateReqDTO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmProcessDefinitionCreateReqDTO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmFormServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmFormServiceImpl.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmFormServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmFormServiceImpl.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmModelServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmModelServiceImpl.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmModelServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmModelServiceImpl.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmProcessDefinitionServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmProcessDefinitionServiceImpl.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmProcessDefinitionServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmProcessDefinitionServiceImpl.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java similarity index 89% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java index 16ae1859a9..82afa944c0 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java @@ -16,12 +16,13 @@ import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmModelServi import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmUserGroupService; -import cn.iocoder.yudao.adminserver.modules.system.enums.SysDictTypeConstants; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysPostService; -import cn.iocoder.yudao.adminserver.modules.system.service.dict.SysDictDataService; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysRoleService; -import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; + +import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; +import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysPostCoreService; +import cn.iocoder.yudao.coreservice.modules.system.service.dict.SysDictDataCoreService; +import cn.iocoder.yudao.coreservice.modules.system.service.permission.SysRoleCoreService; +import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; import cn.iocoder.yudao.framework.activiti.core.util.ActivitiUtils; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; @@ -36,7 +37,6 @@ import javax.annotation.Resource; import java.util.*; import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.*; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysDictTypeConstants.BPM_TASK_ASSIGN_RULE_TYPE; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** @@ -57,17 +57,17 @@ public class BpmTaskAssignRuleServiceImpl implements BpmTaskAssignRuleService { @Lazy // 解决循环ä¾èµ– private BpmProcessDefinitionService processDefinitionService; @Resource - private SysRoleService roleService; + private SysRoleCoreService roleCoreService; @Resource - private SysDeptService deptService; + private SysDeptCoreService deptCoreService; @Resource - private SysPostService postService; + private SysPostCoreService postService; @Resource - private SysUserService userService; + private SysUserCoreService userCoreService; @Resource private BpmUserGroupService userGroupService; @Resource - private SysDictDataService dictDataService; + private SysDictDataCoreService dictDataCoreService; @Override public List getTaskAssignRuleListByProcessDefinitionId(String processDefinitionId, @@ -182,18 +182,18 @@ public class BpmTaskAssignRuleServiceImpl implements BpmTaskAssignRuleService { private void validTaskAssignRuleOptions(Integer type, Set options) { if (Objects.equals(type, BpmTaskAssignRuleTypeEnum.ROLE.getType())) { - roleService.validRoles(options); + roleCoreService.validRoles(options); } else if (ObjectUtils.equalsAny(type, BpmTaskAssignRuleTypeEnum.DEPT_MEMBER.getType(), BpmTaskAssignRuleTypeEnum.DEPT_LEADER.getType())) { - deptService.validDepts(options); + deptCoreService.validDepts(options); } else if (Objects.equals(type, BpmTaskAssignRuleTypeEnum.POST.getType())) { postService.validPosts(options); } else if (Objects.equals(type, BpmTaskAssignRuleTypeEnum.USER.getType())) { - userService.validUsers(options); + userCoreService.validUsers(options); } else if (Objects.equals(type, BpmTaskAssignRuleTypeEnum.USER_GROUP.getType())) { userGroupService.validUserGroups(options); } else if (Objects.equals(type, BpmTaskAssignRuleTypeEnum.SCRIPT.getType())) { - dictDataService.validDictDatas(SysDictTypeConstants.BPM_TASK_ASSIGN_SCRIPT, + dictDataCoreService.validDictDatas(SysDictTypeConstants.BPM_TASK_ASSIGN_SCRIPT, CollectionUtils.convertSet(options, String::valueOf)); } else { throw new IllegalArgumentException(StrUtil.format("未知的规则类型({})", type)); diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmUserGroupServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmUserGroupServiceImpl.java similarity index 93% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmUserGroupServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmUserGroupServiceImpl.java index 3e68290817..8a342b0a24 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmUserGroupServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmUserGroupServiceImpl.java @@ -8,7 +8,6 @@ import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmUserGroupC import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmUserGroupDO; import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmUserGroupMapper; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmUserGroupService; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; @@ -23,8 +22,6 @@ import java.util.Set; import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.USER_GROUP_IS_DISABLE; import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.USER_GROUP_NOT_EXISTS; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.USER_IS_DISABLE; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.USER_NOT_EXISTS; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/BpmMessageService.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/BpmMessageService.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/BpmMessageService.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/BpmMessageService.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceApproveReqDTO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceApproveReqDTO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceApproveReqDTO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceApproveReqDTO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceRejectReqDTO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceRejectReqDTO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceRejectReqDTO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceRejectReqDTO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenTaskCreatedReqDTO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenTaskCreatedReqDTO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenTaskCreatedReqDTO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenTaskCreatedReqDTO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/impl/BpmMessageServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/impl/BpmMessageServiceImpl.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/impl/BpmMessageServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/impl/BpmMessageServiceImpl.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveService.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveService.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveService.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveService.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/impl/BpmOALeaveServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/impl/BpmOALeaveServiceImpl.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/impl/BpmOALeaveServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/impl/BpmOALeaveServiceImpl.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/listener/BpmOALeaveResultListener.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/listener/BpmOALeaveResultListener.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/listener/BpmOALeaveResultListener.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/listener/BpmOALeaveResultListener.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmActivityService.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmActivityService.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmActivityService.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmActivityService.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskService.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskService.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskService.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskService.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/dto/BpmProcessInstanceCreateReqDTO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/dto/BpmProcessInstanceCreateReqDTO.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/dto/BpmProcessInstanceCreateReqDTO.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/dto/BpmProcessInstanceCreateReqDTO.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmActivityServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmActivityServiceImpl.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmActivityServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmActivityServiceImpl.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java similarity index 95% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java index 7c87142d0e..08d115b09b 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java @@ -12,18 +12,16 @@ import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.task.BpmProcessInstanc import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceDeleteReasonEnum; import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum; import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceStatusEnum; -import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event.BpmProcessInstanceResultEvent; -import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event.BpmProcessInstanceResultEventListener; import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event.BpmProcessInstanceResultEventPublisher; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; import cn.iocoder.yudao.adminserver.modules.bpm.service.message.BpmMessageService; import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; import cn.iocoder.yudao.adminserver.modules.bpm.service.task.dto.BpmProcessInstanceCreateReqDTO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; -import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; +import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.number.NumberUtils; import lombok.extern.slf4j.Slf4j; @@ -68,9 +66,9 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService private HistoryService historyService; @Resource - private SysUserService userService; + private SysUserCoreService userCoreService; @Resource - private SysDeptService deptService; + private SysDeptCoreService deptCoreService; @Resource @Lazy // 解决循环ä¾èµ– private BpmTaskService taskService; @@ -192,10 +190,10 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService String bpmnXml = processDefinitionService.getProcessDefinitionBpmnXML(processInstance.getProcessDefinitionId()); // 获得 User - SysUserDO startUser = userService.getUser(NumberUtils.parseLong(processInstance.getStartUserId())); + SysUserDO startUser = userCoreService.getUser(NumberUtils.parseLong(processInstance.getStartUserId())); SysDeptDO dept = null; if (startUser != null) { - dept = deptService.getDept(startUser.getDeptId()); + dept = deptCoreService.getDept(startUser.getDeptId()); } // 拼接结果 diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java index b9a0ec3448..dfac6455e8 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java @@ -11,10 +11,11 @@ import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceRes import cn.iocoder.yudao.adminserver.modules.bpm.service.message.BpmMessageService; import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; -import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; + +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; +import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; import cn.iocoder.yudao.framework.activiti.core.util.ActivitiUtils; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.number.NumberUtils; @@ -59,9 +60,9 @@ public class BpmTaskServiceImpl implements BpmTaskService { private HistoryService historyService; @Resource - private SysUserService userService; + private SysUserCoreService userCoreService; @Resource - private SysDeptService deptService; + private SysDeptCoreService deptCoreService; @Resource @Lazy // 解决循环ä¾èµ– private BpmProcessInstanceService processInstanceService; @@ -95,9 +96,9 @@ public class BpmTaskServiceImpl implements BpmTaskService { // 获得 User Map Set userIds = convertSet(tasks, task -> NumberUtils.parseLong(task.getAssignee())); userIds.add(NumberUtils.parseLong(processInstance.getStartUserId())); - Map userMap = userService.getUserMap(userIds); + Map userMap = userCoreService.getUserMap(userIds); // 获得 Dept Map - Map deptMap = deptService.getDeptMap(convertSet(userMap.values(), SysUserDO::getDeptId)); + Map deptMap = deptCoreService.getDeptMap(convertSet(userMap.values(), SysUserDO::getDeptId)); // æ‹¼æŽ¥æ•°æ® return BpmTaskConvert.INSTANCE.convertList3(tasks, bpmTaskExtDOMap, processInstance, userMap, deptMap); @@ -144,7 +145,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { Map processInstanceMap = processInstanceService.getProcessInstanceMap( convertSet(tasks, Task::getProcessInstanceId)); // 获得 User Map - Map userMap = userService.getUserMap( + Map userMap = userCoreService.getUserMap( convertSet(processInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId()))); // 拼接结果 return new PageResult<>(BpmTaskConvert.INSTANCE.convertList1(tasks, processInstanceMap, userMap), @@ -180,7 +181,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { Map historicProcessInstanceMap = processInstanceService.getHistoricProcessInstanceMap( convertSet(tasks, HistoricTaskInstance::getProcessInstanceId)); // 获得 User Map - Map userMap = userService.getUserMap( + Map userMap = userCoreService.getUserMap( convertSet(historicProcessInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId()))); // 拼接结果 return new PageResult<>(BpmTaskConvert.INSTANCE.convertList2(tasks, bpmTaskExtDOMap, historicProcessInstanceMap, userMap), @@ -291,7 +292,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { @Override public void afterCommit() { ProcessInstance processInstance = processInstanceService.getProcessInstance(task.getProcessInstanceId()); - SysUserDO startUser = userService.getUser(Long.valueOf(processInstance.getStartUserId())); + SysUserDO startUser = userCoreService.getUser(Long.valueOf(processInstance.getStartUserId())); messageService.sendMessageWhenTaskAssigned(BpmMessageConvert.INSTANCE.convert(processInstance, startUser, task)); } }); diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/package-info.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/package-info.java similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/package-info.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/package-info.java diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java similarity index 86% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java index 8111823a88..8212b28c08 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java @@ -8,27 +8,28 @@ import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmTaskRuleScri import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmUserGroupService; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService; -import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; +import cn.iocoder.yudao.coreservice.modules.system.service.permission.SysPermissionCoreService; +import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; import org.activiti.engine.impl.persistence.entity.TaskEntity; -import org.activiti.engine.impl.persistence.entity.TaskEntityImpl; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; import org.mockito.Mock; -import java.util.*; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Set; -import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.*; +import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; import static java.util.Collections.singleton; -import static java.util.Collections.singletonList; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.when; @@ -39,13 +40,13 @@ public class BpmUserTaskActivitiBehaviorTest extends BaseMockitoUnitTest { @Mock private BpmTaskAssignRuleService bpmTaskRuleService; @Mock - private SysPermissionService permissionService; + private SysPermissionCoreService permissionCoreService; @Mock - private SysDeptService deptService; + private SysDeptCoreService deptCoreService; @Mock private BpmUserGroupService userGroupService; @Mock - private SysUserService userService; + private SysUserCoreService userCoreService; @Test public void testCalculateTaskCandidateUsers_Role() { @@ -53,7 +54,7 @@ public class BpmUserTaskActivitiBehaviorTest extends BaseMockitoUnitTest { BpmTaskAssignRuleDO rule = new BpmTaskAssignRuleDO().setOptions(asSet(1L, 2L)) .setType(BpmTaskAssignRuleTypeEnum.ROLE.getType()); // mock 方法 - when(permissionService.getUserRoleIdListByRoleIds(eq(rule.getOptions()))) + when(permissionCoreService.getUserRoleIdListByRoleIds(eq(rule.getOptions()))) .thenReturn(asSet(11L, 22L)); mockGetUserMap(asSet(11L, 22L)); @@ -71,7 +72,7 @@ public class BpmUserTaskActivitiBehaviorTest extends BaseMockitoUnitTest { // mock 方法 List users = CollectionUtils.convertList(asSet(11L, 22L), id -> new SysUserDO().setId(id)); - when(userService.getUsersByDeptIds(eq(rule.getOptions()))).thenReturn(users); + when(userCoreService.getUsersByDeptIds(eq(rule.getOptions()))).thenReturn(users); mockGetUserMap(asSet(11L, 22L)); // 调用 @@ -88,7 +89,7 @@ public class BpmUserTaskActivitiBehaviorTest extends BaseMockitoUnitTest { // mock 方法 SysDeptDO dept1 = randomPojo(SysDeptDO.class, o -> o.setLeaderUserId(11L)); SysDeptDO dept2 = randomPojo(SysDeptDO.class, o -> o.setLeaderUserId(22L)); - when(deptService.getDepts(eq(rule.getOptions()))).thenReturn(Arrays.asList(dept1, dept2)); + when(deptCoreService.getDepts(eq(rule.getOptions()))).thenReturn(Arrays.asList(dept1, dept2)); mockGetUserMap(asSet(11L, 22L)); // 调用 @@ -105,7 +106,7 @@ public class BpmUserTaskActivitiBehaviorTest extends BaseMockitoUnitTest { // mock 方法 List users = CollectionUtils.convertList(asSet(11L, 22L), id -> new SysUserDO().setId(id)); - when(userService.getUsersByPostIds(eq(rule.getOptions()))).thenReturn(users); + when(userCoreService.getUsersByPostIds(eq(rule.getOptions()))).thenReturn(users); mockGetUserMap(asSet(11L, 22L)); // 调用 @@ -195,7 +196,7 @@ public class BpmUserTaskActivitiBehaviorTest extends BaseMockitoUnitTest { .setStatus(CommonStatusEnum.DISABLE.getStatus())); Map userMap = MapUtil.builder(user1.getId(), user1) .put(user2.getId(), user2).build(); - when(userService.getUserMap(eq(assigneeUserIds))).thenReturn(userMap); + when(userCoreService.getUserMap(eq(assigneeUserIds))).thenReturn(userMap); // 调用 behavior.removeDisableUsers(assigneeUserIds); @@ -206,7 +207,7 @@ public class BpmUserTaskActivitiBehaviorTest extends BaseMockitoUnitTest { private void mockGetUserMap(Set assigneeUserIds) { Map userMap = CollectionUtils.convertMap(assigneeUserIds, id -> id, id -> new SysUserDO().setId(id).setStatus(CommonStatusEnum.ENABLE.getStatus())); - when(userService.getUserMap(eq(assigneeUserIds))).thenReturn(userMap); + when(userCoreService.getUserMap(eq(assigneeUserIds))).thenReturn(userMap); } } diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2ScriptTest.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2ScriptTest.java similarity index 78% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2ScriptTest.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2ScriptTest.java index ec12b5467a..2652524c0d 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2ScriptTest.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2ScriptTest.java @@ -1,9 +1,9 @@ package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.impl; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; -import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; +import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; import org.activiti.engine.impl.persistence.entity.ExecutionEntityImpl; import org.activiti.engine.impl.persistence.entity.TaskEntity; @@ -12,15 +12,12 @@ import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; import org.mockito.Mock; -import javax.annotation.Resource; - import java.util.Set; import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; class BpmTaskAssignLeaderX2ScriptTest extends BaseMockitoUnitTest { @@ -29,9 +26,9 @@ class BpmTaskAssignLeaderX2ScriptTest extends BaseMockitoUnitTest { private BpmTaskAssignLeaderX2Script script; @Mock - private SysUserService userService; + private SysUserCoreService userCoreService; @Mock - private SysDeptService deptService; + private SysDeptCoreService deptCoreService; @Test public void testCalculateTaskCandidateUsers_noDept() { @@ -39,7 +36,7 @@ class BpmTaskAssignLeaderX2ScriptTest extends BaseMockitoUnitTest { TaskEntity task = buildTaskEntity(1L); // mock 方法(startUser) SysUserDO startUser = randomPojo(SysUserDO.class, o -> o.setDeptId(10L)); - when(userService.getUser(eq(1L))).thenReturn(startUser); + when(userCoreService.getUser(eq(1L))).thenReturn(startUser); // 调用 Set result = script.calculateTaskCandidateUsers(task); @@ -53,10 +50,10 @@ class BpmTaskAssignLeaderX2ScriptTest extends BaseMockitoUnitTest { TaskEntity task = buildTaskEntity(1L); // mock 方法(startUser) SysUserDO startUser = randomPojo(SysUserDO.class, o -> o.setDeptId(10L)); - when(userService.getUser(eq(1L))).thenReturn(startUser); + when(userCoreService.getUser(eq(1L))).thenReturn(startUser); SysDeptDO startUserDept = randomPojo(SysDeptDO.class, o -> o.setId(10L).setParentId(100L) .setLeaderUserId(20L)); - when(deptService.getDept(eq(10L))).thenReturn(startUserDept); + when(deptCoreService.getDept(eq(10L))).thenReturn(startUserDept); // 调用 Set result = script.calculateTaskCandidateUsers(task); @@ -70,14 +67,14 @@ class BpmTaskAssignLeaderX2ScriptTest extends BaseMockitoUnitTest { TaskEntity task = buildTaskEntity(1L); // mock 方法(startUser) SysUserDO startUser = randomPojo(SysUserDO.class, o -> o.setDeptId(10L)); - when(userService.getUser(eq(1L))).thenReturn(startUser); + when(userCoreService.getUser(eq(1L))).thenReturn(startUser); SysDeptDO startUserDept = randomPojo(SysDeptDO.class, o -> o.setId(10L).setParentId(100L) .setLeaderUserId(20L)); - when(deptService.getDept(eq(10L))).thenReturn(startUserDept); + when(deptCoreService.getDept(eq(10L))).thenReturn(startUserDept); // mock 方法(父 dept) SysDeptDO parentDept = randomPojo(SysDeptDO.class, o -> o.setId(100L).setParentId(1000L) .setLeaderUserId(200L)); - when(deptService.getDept(eq(100L))).thenReturn(parentDept); + when(deptCoreService.getDept(eq(100L))).thenReturn(parentDept); // 调用 Set result = script.calculateTaskCandidateUsers(task); diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/package-info.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/package-info.java similarity index 100% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/package-info.java rename to yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/package-info.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/pom.xml b/yudao-module-bpm/yudao-module-bpm-core-service/pom.xml new file mode 100644 index 0000000000..b61a9db277 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-core-service/pom.xml @@ -0,0 +1,15 @@ + + + + yudao-module-bpm + cn.iocoder.boot + ${revision} + + 4.0.0 + + yudao-module-bpm-core-service + + + \ No newline at end of file diff --git a/yudao-module-bpm/yudao-module-bpm-flowable/pom.xml b/yudao-module-bpm/yudao-module-bpm-flowable/pom.xml new file mode 100644 index 0000000000..e56fc0ffe5 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-flowable/pom.xml @@ -0,0 +1,23 @@ + + + + yudao-module-bpm + cn.iocoder.boot + ${revision} + + 4.0.0 + yudao-module-bpm-flowable + + + org.flowable + flowable-spring-boot-starter-basic + + + org.flowable + flowable-spring-boot-starter-actuator + + + + \ No newline at end of file From 06fa85a35356dd3bf8155e599022de9fa219867a Mon Sep 17 00:00:00 2001 From: YunaiV Date: Thu, 27 Jan 2022 13:34:25 +0800 Subject: [PATCH 02/47] =?UTF-8?q?=E5=A4=9A=E6=A8=A1=E5=9D=97=E9=87=8D?= =?UTF-8?q?=E6=9E=84=201=EF=BC=9A=E5=B0=86=20yudao-user-server=20=E6=B6=89?= =?UTF-8?q?=E5=8F=8A=E5=88=B0=20member=20=E6=A8=A1=E5=9D=97=E7=9A=84?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=8C=E9=83=BD=E8=BF=81=E7=A7=BB=E5=88=B0?= =?UTF-8?q?=20yudao-module-member=20=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 4 +- .../modules/member/convert/package-info.java | 6 - .../dal/mysql/user/MbrUserCoreMapper.java | 10 -- .../modules/member/package-info.java | 7 - .../service/user/MbrUserCoreService.java | 19 --- .../user/impl/MbrUserCoreServiceImpl.java | 28 ---- .../modules/tool/package-info.java | 7 - yudao-dependencies/pom.xml | 2 +- ...SignUpUrlAuthenticationSuccessHandler.java | 53 -------- yudao-module-member/pom.xml | 24 ++++ .../yudao-module-member-api/pom.xml | 26 ++++ .../yudao/module/member/api/package-info.java | 4 + .../module/member/api/user/MemberUserApi.java | 20 +++ .../api/user/dto/MemberUserRespDTO.java | 32 +++++ .../yudao-module-member-impl/pom.xml | 120 ++++++++++++++++++ .../app/auth/AppAuthController.http | 0 .../app/auth/AppAuthController.java | 35 +++-- .../app/auth/vo/AppAuthCheckCodeReqVO.java | 6 +- .../app/auth/vo/AppAuthLoginReqVO.java | 6 +- .../app/auth/vo/AppAuthLoginRespVO.java | 6 +- .../auth/vo/AppAuthResetPasswordReqVO.java | 7 +- .../app/auth/vo/AppAuthSmsLoginReqVO.java | 6 +- .../app/auth/vo/AppAuthSocialBindReqVO.java | 6 +- .../app/auth/vo/AppAuthSocialLogin2ReqVO.java | 6 +- .../app/auth/vo/AppAuthSocialLoginReqVO.java | 6 +- .../app/auth/vo/AppAuthSocialUnbindReqVO.java | 6 +- .../auth/vo/AppAuthUpdatePasswordReqVO.java | 6 +- .../app/auth/vo/AppSendSmsReqVO.java | 6 +- .../member/controller/app/package-info.java | 1 + .../app/user/AppUserController.http | 0 .../app/user/AppUserController.java | 10 +- .../app/user/vo/AppUserInfoRespVO.java | 6 +- .../app/user/vo/AppUserUpdateMobileReqVO.java | 7 +- .../member/controller/package-info.java | 6 + .../member}/convert/auth/SysAuthConvert.java | 2 +- .../module}/member/convert/package-info.java | 2 +- .../member/convert/user/UserConvert.java | 14 ++ ...‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md | 0 .../dal/dataobject/sms/SysSmsCodeDO.java | 3 +- .../dal/dataobject/user/MemberUserDO.java | 6 +- .../dal/mysql/sms/SysSmsCodeMapper.java | 5 +- .../member/dal/mysql/user/MbrUserMapper.java | 2 +- .../yudao/module/member/dal/package-info.java | 7 + .../module/member/dal/redis/package-info.java | 1 + .../enums/MemberErrorCodeConstants.java | 5 +- .../member}/enums/SysErrorCodeConstants.java | 2 +- .../member}/enums/sms/SysSmsSceneEnum.java | 2 +- .../sms/SysSmsTemplateCodeConstants.java | 2 +- .../module/member/framework/package-info.java | 6 + .../security/SecurityConfiguration.java | 2 +- .../framework/sms/SmsCodeConfiguration.java | 2 +- .../framework/sms/SmsCodeProperties.java | 2 +- .../yudao/module/member/package-info.java | 1 + .../member}/service/auth/SysAuthService.java | 4 +- .../service/auth}/SysAuthServiceImpl.java | 23 ++-- .../module/member/service/package-info.java | 1 + .../service/sms/SysSmsCodeService.java | 2 +- .../service/sms}/SysSmsCodeServiceImpl.java | 17 +-- .../member/service/user/MbrUserService.java | 2 +- .../service/user}/MbrUserServiceImpl.java | 5 +- .../service/auth}/SysAuthServiceTest.java | 6 +- .../module/member/service/package-info.java | 1 + .../service/user}/MbrUserServiceImplTest.java | 4 +- .../member/test}/BaseDbAndRedisUnitTest.java | 2 +- .../module/member/test}/BaseDbUnitTest.java | 2 +- .../member/test}/RedisTestConfiguration.java | 2 +- .../test/resources/application-unit-test.yaml | 0 .../src/test/resources/file/erweima.jpg | Bin .../src/test/resources/logback-spring.xml | 0 .../src/test/resources/sql/clean.sql | 0 .../src/test/resources/sql/create_tables.sql | 0 yudao-server/pom.xml | 22 ++++ .../userserver/framework/package-info.java | 6 - .../member/controller/package-info.java | 1 - .../convert/user/UserProfileConvert.java | 15 --- ...‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md | 1 - .../modules/member/package-info.java | 8 -- .../modules/member/service/package-info.java | 1 - .../system/controller/package-info.java | 4 - .../modules/system/convert/package-info.java | 6 - ...‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md | 1 - .../system/dal/dataobject/package-info.java | 1 - .../system/dal/mysql/package-info.java | 1 - .../system/dal/redis/package-info.java | 1 - .../system/framework/package-info.java | 6 - .../modules/system/package-info.java | 7 - .../modules/system/service/package-info.java | 1 - 87 files changed, 406 insertions(+), 307 deletions(-) delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/convert/package-info.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/dal/mysql/user/MbrUserCoreMapper.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/package-info.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/service/user/MbrUserCoreService.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/service/user/impl/MbrUserCoreServiceImpl.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/tool/package-info.java delete mode 100644 yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/handler/AbstractSignUpUrlAuthenticationSuccessHandler.java create mode 100644 yudao-module-member/pom.xml create mode 100644 yudao-module-member/yudao-module-member-api/pom.xml create mode 100644 yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/package-info.java create mode 100644 yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApi.java create mode 100644 yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/dto/MemberUserRespDTO.java create mode 100644 yudao-module-member/yudao-module-member-impl/pom.xml rename yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/SysAuthController.http => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.http (100%) rename yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/SysAuthController.java => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java (81%) rename yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/SysAuthCheckCodeReqVO.java => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthCheckCodeReqVO.java (89%) rename yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/SysAuthLoginReqVO.java => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthLoginReqVO.java (84%) rename yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/SysAuthLoginRespVO.java => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthLoginRespVO.java (70%) rename yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthResetPasswordReqVO.java => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthResetPasswordReqVO.java (88%) rename yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/SysAuthSmsLoginReqVO.java => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSmsLoginReqVO.java (85%) rename yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialBindReqVO.java => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialBindReqVO.java (86%) rename yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialLogin2ReqVO.java => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialLogin2ReqVO.java (90%) rename yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialLoginReqVO.java => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialLoginReqVO.java (86%) rename yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialUnbindReqVO.java => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialUnbindReqVO.java (84%) rename yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthUpdatePasswordReqVO.java => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthUpdatePasswordReqVO.java (85%) rename yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/SysAuthSendSmsReqVO.java => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppSendSmsReqVO.java (83%) create mode 100644 yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/package-info.java rename yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/user/SysUserProfileController.http => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppUserController.http (100%) rename yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/user/SysUserProfileController.java => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppUserController.java (91%) rename yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/user/vo/MbrUserInfoRespVO.java => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppUserInfoRespVO.java (76%) rename yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/user/vo/MbrUserUpdateMobileReqVO.java => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppUserUpdateMobileReqVO.java (91%) create mode 100644 yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/package-info.java rename {yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member}/convert/auth/SysAuthConvert.java (91%) rename {yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module}/member/convert/package-info.java (56%) create mode 100644 yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/user/UserConvert.java rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module}/member/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md (100%) rename {yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member}/dal/dataobject/sms/SysSmsCodeDO.java (90%) rename yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/dal/dataobject/user/MbrUserDO.java => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java (88%) rename {yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member}/dal/mysql/sms/SysSmsCodeMapper.java (86%) rename {yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module}/member/dal/mysql/user/MbrUserMapper.java (86%) create mode 100644 yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/package-info.java create mode 100644 yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/redis/package-info.java rename yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/enums/MbrErrorCodeConstants.java => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/MemberErrorCodeConstants.java (80%) rename {yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member}/enums/SysErrorCodeConstants.java (96%) rename {yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member}/enums/sms/SysSmsSceneEnum.java (95%) rename {yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member}/enums/sms/SysSmsTemplateCodeConstants.java (88%) create mode 100644 yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/framework/package-info.java rename {yudao-user-server/src/main/java/cn/iocoder/yudao/userserver => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member}/framework/security/SecurityConfiguration.java (94%) rename {yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member}/framework/sms/SmsCodeConfiguration.java (79%) rename {yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member}/framework/sms/SmsCodeProperties.java (94%) create mode 100644 yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/package-info.java rename {yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member}/service/auth/SysAuthService.java (93%) rename {yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/impl => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth}/SysAuthServiceImpl.java (92%) create mode 100644 yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/package-info.java rename {yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member}/service/sms/SysSmsCodeService.java (95%) rename {yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/sms/impl => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/sms}/SysSmsCodeServiceImpl.java (86%) rename {yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module}/member/service/user/MbrUserService.java (96%) rename {yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/service/user/impl => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user}/MbrUserServiceImpl.java (96%) rename {yudao-user-server/src/test/java/cn/iocoder/yudao/userserver/modules/system/service => yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/auth}/SysAuthServiceTest.java (95%) create mode 100644 yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/package-info.java rename {yudao-user-server/src/test/java/cn/iocoder/yudao/userserver/modules/member/service => yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user}/MbrUserServiceImplTest.java (97%) rename {yudao-user-server/src/test/java/cn/iocoder/yudao/userserver => yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/test}/BaseDbAndRedisUnitTest.java (98%) rename {yudao-user-server/src/test/java/cn/iocoder/yudao/userserver => yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/test}/BaseDbUnitTest.java (97%) rename {yudao-user-server/src/test/java/cn/iocoder/yudao/userserver/config => yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/test}/RedisTestConfiguration.java (96%) rename {yudao-user-server => yudao-module-member/yudao-module-member-impl}/src/test/resources/application-unit-test.yaml (100%) rename {yudao-user-server => yudao-module-member/yudao-module-member-impl}/src/test/resources/file/erweima.jpg (100%) rename {yudao-user-server => yudao-module-member/yudao-module-member-impl}/src/test/resources/logback-spring.xml (100%) rename {yudao-user-server => yudao-module-member/yudao-module-member-impl}/src/test/resources/sql/clean.sql (100%) rename {yudao-user-server => yudao-module-member/yudao-module-member-impl}/src/test/resources/sql/create_tables.sql (100%) create mode 100644 yudao-server/pom.xml delete mode 100644 yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/framework/package-info.java delete mode 100644 yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/package-info.java delete mode 100644 yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/convert/user/UserProfileConvert.java delete mode 100644 yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md delete mode 100644 yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/package-info.java delete mode 100644 yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/service/package-info.java delete mode 100644 yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/package-info.java delete mode 100644 yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/convert/package-info.java delete mode 100644 yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md delete mode 100644 yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/dal/dataobject/package-info.java delete mode 100644 yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/dal/mysql/package-info.java delete mode 100644 yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/dal/redis/package-info.java delete mode 100644 yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/framework/package-info.java delete mode 100644 yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/package-info.java delete mode 100644 yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/package-info.java diff --git a/pom.xml b/pom.xml index 0f791a822f..c76c9a22d1 100644 --- a/pom.xml +++ b/pom.xml @@ -13,6 +13,8 @@ yudao-admin-server yudao-user-server yudao-core-service + yudao-module-member + yudao-server ${artifactId} @@ -20,7 +22,7 @@ https://github.com/YunaiV/ruoyi-vue-pro - 1.3.0-snapshot + 1.4.0-snapshot 1.8 ${java.version} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/convert/package-info.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/convert/package-info.java deleted file mode 100644 index 230bbc0922..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/convert/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -/** - * æä¾› POJO ç±»çš„å®žä½“è½¬æ¢ - * - * ç›®å‰ä½¿ç”¨ MapStruct 框架 - */ -package cn.iocoder.yudao.coreservice.modules.member.convert; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/dal/mysql/user/MbrUserCoreMapper.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/dal/mysql/user/MbrUserCoreMapper.java deleted file mode 100644 index 27c0c95097..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/dal/mysql/user/MbrUserCoreMapper.java +++ /dev/null @@ -1,10 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.member.dal.mysql.user; - -import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public interface MbrUserCoreMapper extends BaseMapperX { - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/package-info.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/package-info.java deleted file mode 100644 index 17abe90bd5..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -/** - * member 包下,我们放会员业务. - * 例如说:会员中心等等 - * - * 缩写:mbr - */ -package cn.iocoder.yudao.coreservice.modules.member; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/service/user/MbrUserCoreService.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/service/user/MbrUserCoreService.java deleted file mode 100644 index 934413956b..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/service/user/MbrUserCoreService.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.member.service.user; - -import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO; - -/** - * å‰å°ç”¨æˆ· Core Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface MbrUserCoreService { - /** - * 通过用户 ID 查询用户 - * - * @param id 用户ID - * @return ç”¨æˆ·å¯¹è±¡ä¿¡æ¯ - */ - MbrUserDO getUser(Long id); - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/service/user/impl/MbrUserCoreServiceImpl.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/service/user/impl/MbrUserCoreServiceImpl.java deleted file mode 100644 index 08ee22c76c..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/service/user/impl/MbrUserCoreServiceImpl.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.member.service.user.impl; - -import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO; -import cn.iocoder.yudao.coreservice.modules.member.dal.mysql.user.MbrUserCoreMapper; -import cn.iocoder.yudao.coreservice.modules.member.service.user.MbrUserCoreService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; - -/** - * User Core Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Slf4j -public class MbrUserCoreServiceImpl implements MbrUserCoreService { - - @Resource - private MbrUserCoreMapper userCoreMapper; - - @Override - public MbrUserDO getUser(Long id) { - return userCoreMapper.selectById(id); - } - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/tool/package-info.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/tool/package-info.java deleted file mode 100644 index dd3c3e9138..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/tool/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -/** - * tool 包下,我们放研å‘工具,æå‡ç ”呿•ˆçŽ‡ä¸Žè´¨é‡ã€‚ - * 例如说:代ç ç”Ÿæˆå™¨ã€æŽ¥å£æ–‡æ¡£ç­‰ç­‰ - * - * 缩写:tool - */ -package cn.iocoder.yudao.coreservice.modules.tool; diff --git a/yudao-dependencies/pom.xml b/yudao-dependencies/pom.xml index 5e057116e8..3973ed2566 100644 --- a/yudao-dependencies/pom.xml +++ b/yudao-dependencies/pom.xml @@ -14,7 +14,7 @@ https://github.com/YunaiV/ruoyi-vue-pro - 1.3.0-snapshot + 1.4.0-snapshot 2.4.12 diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/handler/AbstractSignUpUrlAuthenticationSuccessHandler.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/handler/AbstractSignUpUrlAuthenticationSuccessHandler.java deleted file mode 100644 index 01fdf08887..0000000000 --- a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/handler/AbstractSignUpUrlAuthenticationSuccessHandler.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * MIT License - * Copyright (c) 2020-2029 YongWu zheng (dcenter.top and gitee.com/pcore and github.com/ZeroOrInfinity) - * - * 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. - */ -package cn.iocoder.yudao.framework.security.core.handler; - -import org.springframework.security.core.Authentication; -import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler; -import org.springframework.security.web.savedrequest.HttpSessionRequestCache; -import org.springframework.security.web.savedrequest.RequestCache; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; - -/** - * @author weir - */ -public class AbstractSignUpUrlAuthenticationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler { - private RequestCache requestCache = new HttpSessionRequestCache(); - - @Override - public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { - if (requestCache.getRequest(request, response) != null) { - requestCache.getRequest(request, response); - } - super.onAuthenticationSuccess(request,response,authentication); - } - - @Override - public void setRequestCache(RequestCache requestCache) { - this.requestCache = requestCache; - } -} diff --git a/yudao-module-member/pom.xml b/yudao-module-member/pom.xml new file mode 100644 index 0000000000..cf150725a2 --- /dev/null +++ b/yudao-module-member/pom.xml @@ -0,0 +1,24 @@ + + + + cn.iocoder.boot + yudao + ${revision} + + 4.0.0 + + yudao-module-member-api + yudao-module-member-impl + + yudao-module-member + pom + + ${artifactId} + + member 模å—,我们放会员业务。 + 例如说:会员中心等等 + + + diff --git a/yudao-module-member/yudao-module-member-api/pom.xml b/yudao-module-member/yudao-module-member-api/pom.xml new file mode 100644 index 0000000000..914d910825 --- /dev/null +++ b/yudao-module-member/yudao-module-member-api/pom.xml @@ -0,0 +1,26 @@ + + + + cn.iocoder.boot + yudao-module-member + ${revision} + + 4.0.0 + yudao-module-member-api + jar + + ${artifactId} + + member æ¨¡å— API,暴露给其它模å—调用 + + + + + cn.iocoder.boot + yudao-common + + + + diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/package-info.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/package-info.java new file mode 100644 index 0000000000..56cd9857f8 --- /dev/null +++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/package-info.java @@ -0,0 +1,4 @@ +/** + * member API 包,定义暴露给其它模å—çš„ API + */ +package cn.iocoder.yudao.module.member.api; diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApi.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApi.java new file mode 100644 index 0000000000..3ac616af89 --- /dev/null +++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApi.java @@ -0,0 +1,20 @@ +package cn.iocoder.yudao.module.member.api.user; + +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; + +/** + * 会员用户的 API æŽ¥å£ + * + * @author èŠ‹é“æºç  + */ +public interface MemberUserApi { + + /** + * èŽ·å¾—ä¼šå‘˜ç”¨æˆ·ä¿¡æ¯ + * + * @param id ç”¨æˆ·ç¼–å· + * @return ç”¨æˆ·ä¿¡æ¯ + */ + MemberUserRespDTO getMemberUser(Long id); + +} diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/dto/MemberUserRespDTO.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/dto/MemberUserRespDTO.java new file mode 100644 index 0000000000..82eec958a3 --- /dev/null +++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/dto/MemberUserRespDTO.java @@ -0,0 +1,32 @@ +package cn.iocoder.yudao.module.member.api.user.dto; + +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; + +/** + * ç”¨æˆ·ä¿¡æ¯ Response DTO + * + * @author èŠ‹é“æºç  + */ +public class MemberUserRespDTO { + + /** + * 用户ID + */ + private Long id; + /** + * 用户昵称 + */ + private String nickname; + /** + * å¸å·çŠ¶æ€ + * + * 枚举 {@link CommonStatusEnum} + */ + private Integer status; + + /** + * 手机 + */ + private String mobile; + +} diff --git a/yudao-module-member/yudao-module-member-impl/pom.xml b/yudao-module-member/yudao-module-member-impl/pom.xml new file mode 100644 index 0000000000..d4b064f6af --- /dev/null +++ b/yudao-module-member/yudao-module-member-impl/pom.xml @@ -0,0 +1,120 @@ + + + + cn.iocoder.boot + yudao-module-member + ${revision} + + 4.0.0 + yudao-module-member-impl + jar + + ${artifactId} + + member 模å—,我们放会员业务。 + 例如说:会员中心等等 + + + + + + cn.iocoder.boot + yudao-core-service + + + + cn.iocoder.boot + yudao-spring-boot-starter-biz-dict + + + cn.iocoder.boot + yudao-spring-boot-starter-biz-sms + + + cn.iocoder.boot + yudao-spring-boot-starter-biz-weixin + + + + + cn.iocoder.boot + yudao-spring-boot-starter-web + + + + cn.iocoder.boot + yudao-spring-boot-starter-security + + + + + cn.iocoder.boot + yudao-spring-boot-starter-mybatis + + + + cn.iocoder.boot + yudao-spring-boot-starter-redis + + + + + cn.iocoder.boot + yudao-spring-boot-starter-config + + + + + + + cn.iocoder.boot + yudao-spring-boot-starter-mq + + + + + cn.iocoder.boot + yudao-spring-boot-starter-protection + + + + + cn.iocoder.boot + yudao-spring-boot-starter-monitor + + + + + cn.iocoder.boot + yudao-spring-boot-starter-test + test + + + + + + + + ${artifactId} + + + + org.springframework.boot + spring-boot-maven-plugin + + true + + + + + repackage + + + + + + + + diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/SysAuthController.http b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.http similarity index 100% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/SysAuthController.http rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.http diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/SysAuthController.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java similarity index 81% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/SysAuthController.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java index 2c0d49307d..76437eb9d8 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/SysAuthController.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.userserver.modules.system.controller.auth; +package cn.iocoder.yudao.module.member.controller.app.auth; import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialCoreService; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; -import cn.iocoder.yudao.userserver.modules.system.controller.auth.vo.*; +import cn.iocoder.yudao.module.member.controller.app.auth.vo.*; import cn.iocoder.yudao.userserver.modules.system.service.auth.SysAuthService; import cn.iocoder.yudao.userserver.modules.system.service.sms.SysSmsCodeService; import io.swagger.annotations.Api; @@ -23,12 +23,12 @@ import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getCli import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getUserAgent; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; -@Api(tags = "认è¯") +@Api(tags = "APP 端 - 认è¯") @RestController @RequestMapping("/") @Validated @Slf4j -public class SysAuthController { +public class AppAuthController { @Resource private SysAuthService authService; @@ -39,18 +39,18 @@ public class SysAuthController { @PostMapping("/login") @ApiOperation("使用手机 + 密ç ç™»å½•") - public CommonResult login(@RequestBody @Valid SysAuthLoginReqVO reqVO) { + public CommonResult login(@RequestBody @Valid AppAuthLoginReqVO reqVO) { String token = authService.login(reqVO, getClientIP(), getUserAgent()); // 返回结果 - return success(SysAuthLoginRespVO.builder().token(token).build()); + return success(AppAuthLoginRespVO.builder().token(token).build()); } @PostMapping("/sms-login") @ApiOperation("使用手机 + 验è¯ç ç™»å½•") - public CommonResult smsLogin(@RequestBody @Valid SysAuthSmsLoginReqVO reqVO) { + public CommonResult smsLogin(@RequestBody @Valid AppAuthSmsLoginReqVO reqVO) { String token = authService.smsLogin(reqVO, getClientIP(), getUserAgent()); // 返回结果 - return success(SysAuthLoginRespVO.builder().token(token).build()); + return success(AppAuthLoginRespVO.builder().token(token).build()); } @PostMapping("/send-sms-code") @@ -70,7 +70,7 @@ public class SysAuthController { @PostMapping("/reset-password") @ApiOperation(value = "é‡ç½®å¯†ç ", notes = "ç”¨æˆ·å¿˜è®°å¯†ç æ—¶ä½¿ç”¨") @PreAuthenticated - public CommonResult resetPassword(@RequestBody @Valid MbrAuthResetPasswordReqVO reqVO) { + public CommonResult resetPassword(@RequestBody @Valid AppAuthResetPasswordReqVO reqVO) { authService.resetPassword(reqVO); return success(true); } @@ -78,12 +78,11 @@ public class SysAuthController { @PostMapping("/update-password") @ApiOperation(value = "修改用户密ç ",notes = "ç”¨æˆ·ä¿®æ”¹å¯†ç æ—¶ä½¿ç”¨") @PreAuthenticated - public CommonResult updatePassword(@RequestBody @Valid MbrAuthUpdatePasswordReqVO reqVO) { + public CommonResult updatePassword(@RequestBody @Valid AppAuthUpdatePasswordReqVO reqVO) { authService.updatePassword(getLoginUserId(), reqVO); return success(true); } - // ========== 社交登录相关 ========== @GetMapping("/social-auth-redirect") @@ -97,32 +96,30 @@ public class SysAuthController { return CommonResult.success(socialService.getAuthorizeUrl(type, redirectUri)); } - @PostMapping("/social-login") @ApiOperation("社交登录,使用 code 授æƒç ") - public CommonResult socialLogin(@RequestBody @Valid MbrAuthSocialLoginReqVO reqVO) { + public CommonResult socialLogin(@RequestBody @Valid AppAuthSocialLoginReqVO reqVO) { String token = authService.socialLogin(reqVO, getClientIP(), getUserAgent()); - return success(SysAuthLoginRespVO.builder().token(token).build()); + return success(AppAuthLoginRespVO.builder().token(token).build()); } - @PostMapping("/social-login2") @ApiOperation("社交登录,使用 æ‰‹æœºå· + 手机验è¯ç ") - public CommonResult socialLogin2(@RequestBody @Valid MbrAuthSocialLogin2ReqVO reqVO) { + public CommonResult socialLogin2(@RequestBody @Valid AppAuthSocialLogin2ReqVO reqVO) { String token = authService.socialLogin2(reqVO, getClientIP(), getUserAgent()); - return success(SysAuthLoginRespVO.builder().token(token).build()); + return success(AppAuthLoginRespVO.builder().token(token).build()); } @PostMapping("/social-bind") @ApiOperation("社交绑定,使用 code 授æƒç ") - public CommonResult socialBind(@RequestBody @Valid MbrAuthSocialBindReqVO reqVO) { + public CommonResult socialBind(@RequestBody @Valid AppAuthSocialBindReqVO reqVO) { authService.socialBind(getLoginUserId(), reqVO); return CommonResult.success(true); } @DeleteMapping("/social-unbind") @ApiOperation("å–æ¶ˆç¤¾äº¤ç»‘定") - public CommonResult socialUnbind(@RequestBody MbrAuthSocialUnbindReqVO reqVO) { + public CommonResult socialUnbind(@RequestBody AppAuthSocialUnbindReqVO reqVO) { socialService.unbindSocialUser(getLoginUserId(), reqVO.getType(), reqVO.getUnionId(), UserTypeEnum.MEMBER); return CommonResult.success(true); } diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/SysAuthCheckCodeReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthCheckCodeReqVO.java similarity index 89% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/SysAuthCheckCodeReqVO.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthCheckCodeReqVO.java index 89f1f501e5..64cc22a3cf 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/SysAuthCheckCodeReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthCheckCodeReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.system.controller.auth.vo; +package cn.iocoder.yudao.module.member.controller.app.auth.vo; import cn.iocoder.yudao.framework.common.validation.InEnum; import cn.iocoder.yudao.framework.common.validation.Mobile; @@ -15,12 +15,12 @@ import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; -@ApiModel("校验验è¯ç  Request VO") +@ApiModel("APP 端 - 校验验è¯ç  Request VO") @Data @NoArgsConstructor @AllArgsConstructor @Builder -public class SysAuthCheckCodeReqVO { +public class AppAuthCheckCodeReqVO { @ApiModelProperty(value = "手机å·", example = "15601691234") @NotBlank(message = "手机å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/SysAuthLoginReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthLoginReqVO.java similarity index 84% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/SysAuthLoginReqVO.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthLoginReqVO.java index 1d51f80012..25875fd66e 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/SysAuthLoginReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthLoginReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.system.controller.auth.vo; +package cn.iocoder.yudao.module.member.controller.app.auth.vo; import cn.iocoder.yudao.framework.common.validation.Mobile; import io.swagger.annotations.ApiModel; @@ -11,12 +11,12 @@ import org.hibernate.validator.constraints.Length; import javax.validation.constraints.NotEmpty; -@ApiModel("手机 + 密ç ç™»å½• Request VO") +@ApiModel("APP 端 - 手机 + 密ç ç™»å½• Request VO") @Data @NoArgsConstructor @AllArgsConstructor @Builder -public class SysAuthLoginReqVO { +public class AppAuthLoginReqVO { @ApiModelProperty(value = "手机å·", required = true, example = "15601691300") @NotEmpty(message = "手机å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/SysAuthLoginRespVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthLoginRespVO.java similarity index 70% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/SysAuthLoginRespVO.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthLoginRespVO.java index 95c69c754e..935b3ec52b 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/SysAuthLoginRespVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthLoginRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.system.controller.auth.vo; +package cn.iocoder.yudao.module.member.controller.app.auth.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -7,12 +7,12 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -@ApiModel("手机密ç ç™»å½• Response VO") +@ApiModel("APP 端 - 手机密ç ç™»å½• Response VO") @Data @NoArgsConstructor @AllArgsConstructor @Builder -public class SysAuthLoginRespVO { +public class AppAuthLoginRespVO { @ApiModelProperty(value = "token", required = true, example = "yudaoyuanma") private String token; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthResetPasswordReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthResetPasswordReqVO.java similarity index 88% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthResetPasswordReqVO.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthResetPasswordReqVO.java index 8160174559..5ae291fdb5 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthResetPasswordReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthResetPasswordReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.system.controller.auth.vo; +package cn.iocoder.yudao.module.member.controller.app.auth.vo; import cn.iocoder.yudao.framework.common.validation.Mobile; import io.swagger.annotations.ApiModel; @@ -13,12 +13,12 @@ import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.Pattern; -@ApiModel("é‡ç½®å¯†ç  Request VO") +@ApiModel("APP 端 - é‡ç½®å¯†ç  Request VO") @Data @NoArgsConstructor @AllArgsConstructor @Builder -public class MbrAuthResetPasswordReqVO { +public class AppAuthResetPasswordReqVO { @ApiModelProperty(value = "新密ç ", required = true, example = "buzhidao") @NotEmpty(message = "新密ç ä¸èƒ½ä¸ºç©º") @@ -35,4 +35,5 @@ public class MbrAuthResetPasswordReqVO { @NotBlank(message = "手机å·ä¸èƒ½ä¸ºç©º") @Mobile private String mobile; + } diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/SysAuthSmsLoginReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSmsLoginReqVO.java similarity index 85% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/SysAuthSmsLoginReqVO.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSmsLoginReqVO.java index a7b36bb546..452e7e825e 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/SysAuthSmsLoginReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSmsLoginReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.system.controller.auth.vo; +package cn.iocoder.yudao.module.member.controller.app.auth.vo; import cn.iocoder.yudao.framework.common.validation.Mobile; import io.swagger.annotations.ApiModel; @@ -12,12 +12,12 @@ import org.hibernate.validator.constraints.Length; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.Pattern; -@ApiModel("手机 + 验è¯ç ç™»å½• Request VO") +@ApiModel("APP 端 - 手机 + 验è¯ç ç™»å½• Request VO") @Data @NoArgsConstructor @AllArgsConstructor @Builder -public class SysAuthSmsLoginReqVO { +public class AppAuthSmsLoginReqVO { @ApiModelProperty(value = "手机å·", required = true, example = "15601691300") @NotEmpty(message = "手机å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialBindReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialBindReqVO.java similarity index 86% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialBindReqVO.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialBindReqVO.java index 767446b5f0..d595e74283 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialBindReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialBindReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.system.controller.auth.vo; +package cn.iocoder.yudao.module.member.controller.app.auth.vo; import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum; import cn.iocoder.yudao.framework.common.validation.InEnum; @@ -12,12 +12,12 @@ import lombok.NoArgsConstructor; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; -@ApiModel("社交绑定 Request VO,使用 code 授æƒç ") +@ApiModel("APP 端 - 社交绑定 Request VO,使用 code 授æƒç ") @Data @NoArgsConstructor @AllArgsConstructor @Builder -public class MbrAuthSocialBindReqVO { +public class AppAuthSocialBindReqVO { @ApiModelProperty(value = "社交平å°çš„类型", required = true, example = "10", notes = "å‚è§ SysUserSocialTypeEnum 枚举值") @InEnum(SysSocialTypeEnum.class) diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialLogin2ReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialLogin2ReqVO.java similarity index 90% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialLogin2ReqVO.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialLogin2ReqVO.java index 1da763ed36..cc832e3716 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialLogin2ReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialLogin2ReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.system.controller.auth.vo; +package cn.iocoder.yudao.module.member.controller.app.auth.vo; import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum; import cn.iocoder.yudao.framework.common.validation.InEnum; @@ -14,12 +14,12 @@ import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; -@ApiModel("社交登录 Request VO,使用 code 授æƒç  + è´¦å·å¯†ç ") +@ApiModel("APP 端 - 社交登录 Request VO,使用 code 授æƒç  + è´¦å·å¯†ç ") @Data @NoArgsConstructor @AllArgsConstructor @Builder -public class MbrAuthSocialLogin2ReqVO { +public class AppAuthSocialLogin2ReqVO { @ApiModelProperty(value = "社交平å°çš„类型", required = true, example = "10", notes = "å‚è§ SysUserSocialTypeEnum 枚举值") @InEnum(SysSocialTypeEnum.class) diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialLoginReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialLoginReqVO.java similarity index 86% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialLoginReqVO.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialLoginReqVO.java index cb430231a0..3d1562522d 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialLoginReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialLoginReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.system.controller.auth.vo; +package cn.iocoder.yudao.module.member.controller.app.auth.vo; import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum; import cn.iocoder.yudao.framework.common.validation.InEnum; @@ -12,12 +12,12 @@ import lombok.NoArgsConstructor; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; -@ApiModel("社交登录 Request VO,使用 code 授æƒç ") +@ApiModel("APP 端 - 社交登录 Request VO,使用 code 授æƒç ") @Data @NoArgsConstructor @AllArgsConstructor @Builder -public class MbrAuthSocialLoginReqVO { +public class AppAuthSocialLoginReqVO { @ApiModelProperty(value = "社交平å°çš„类型", required = true, example = "10", notes = "å‚è§ SysUserSocialTypeEnum 枚举值") @InEnum(SysSocialTypeEnum.class) diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialUnbindReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialUnbindReqVO.java similarity index 84% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialUnbindReqVO.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialUnbindReqVO.java index 75e31701d1..9225080f76 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialUnbindReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialUnbindReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.system.controller.auth.vo; +package cn.iocoder.yudao.module.member.controller.app.auth.vo; import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum; import cn.iocoder.yudao.framework.common.validation.InEnum; @@ -12,12 +12,12 @@ import lombok.NoArgsConstructor; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; -@ApiModel("å–æ¶ˆç¤¾äº¤ç»‘定 Request VO,使用 code 授æƒç ") +@ApiModel("APP 端 - å–æ¶ˆç¤¾äº¤ç»‘定 Request VO,使用 code 授æƒç ") @Data @NoArgsConstructor @AllArgsConstructor @Builder -public class MbrAuthSocialUnbindReqVO { +public class AppAuthSocialUnbindReqVO { @ApiModelProperty(value = "社交平å°çš„类型", required = true, example = "10", notes = "å‚è§ SysUserSocialTypeEnum 枚举值") @InEnum(SysSocialTypeEnum.class) diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthUpdatePasswordReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthUpdatePasswordReqVO.java similarity index 85% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthUpdatePasswordReqVO.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthUpdatePasswordReqVO.java index b5cc0c7850..cbbd17fec5 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthUpdatePasswordReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthUpdatePasswordReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.system.controller.auth.vo; +package cn.iocoder.yudao.module.member.controller.app.auth.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -11,12 +11,12 @@ import org.hibernate.validator.constraints.Length; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; -@ApiModel("ä¿®æ”¹å¯†ç  Request VO") +@ApiModel("APP 端 - ä¿®æ”¹å¯†ç  Request VO") @Data @NoArgsConstructor @AllArgsConstructor @Builder -public class MbrAuthUpdatePasswordReqVO { +public class AppAuthUpdatePasswordReqVO { @ApiModelProperty(value = "用户旧密ç ", required = true, example = "123456") @NotBlank(message = "旧密ç ä¸èƒ½ä¸ºç©º") diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/SysAuthSendSmsReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppSendSmsReqVO.java similarity index 83% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/SysAuthSendSmsReqVO.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppSendSmsReqVO.java index d8c6c983f5..7a7620d630 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/SysAuthSendSmsReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppSendSmsReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.system.controller.auth.vo; +package cn.iocoder.yudao.module.member.controller.app.auth.vo; import cn.iocoder.yudao.framework.common.validation.InEnum; import cn.iocoder.yudao.framework.common.validation.Mobile; @@ -10,10 +10,10 @@ import lombok.experimental.Accessors; import javax.validation.constraints.NotNull; -@ApiModel("å‘逿‰‹æœºéªŒè¯ç  Response VO") +@ApiModel("APP 端 - å‘逿‰‹æœºéªŒè¯ç  Response VO") @Data @Accessors(chain = true) -public class SysAuthSendSmsReqVO { +public class AppSendSmsReqVO { @ApiModelProperty(value = "手机å·", example = "15601691234") @Mobile diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/package-info.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/package-info.java new file mode 100644 index 0000000000..7f013eaa96 --- /dev/null +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.member.controller.app; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/user/SysUserProfileController.http b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppUserController.http similarity index 100% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/user/SysUserProfileController.http rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppUserController.http diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/user/SysUserProfileController.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppUserController.java similarity index 91% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/user/SysUserProfileController.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppUserController.java index 8fd75788a1..758eb7b00a 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/user/SysUserProfileController.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppUserController.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.member.controller.user; +package cn.iocoder.yudao.module.member.controller.app.user; import cn.iocoder.yudao.userserver.modules.member.controller.user.vo.MbrUserInfoRespVO; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; @@ -25,12 +25,12 @@ import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getCli import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; import static cn.iocoder.yudao.userserver.modules.member.enums.MbrErrorCodeConstants.FILE_IS_EMPTY; -@Api(tags = "用户个人中心") +@Api(tags = "APP 端 - 用户个人中心") @RestController -@RequestMapping("/member/user/profile") +@RequestMapping("/member/user") @Validated @Slf4j -public class SysUserProfileController { +public class AppUserController { @Resource private MbrUserService userService; @@ -48,7 +48,7 @@ public class SysUserProfileController { @PreAuthenticated public CommonResult updateAvatar(@RequestParam("avatarFile") MultipartFile file) throws IOException { if (file.isEmpty()) { - throw ServiceExceptionUtil.exception(FILE_IS_EMPTY); + throw ServiceExceptionUtil.exception(MbrErrorCodeConstants.FILE_IS_EMPTY); } String avatar = userService.updateAvatar(getLoginUserId(), file.getInputStream()); return success(avatar); diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/user/vo/MbrUserInfoRespVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppUserInfoRespVO.java similarity index 76% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/user/vo/MbrUserInfoRespVO.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppUserInfoRespVO.java index 697c4085d3..f8d9d20d1c 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/user/vo/MbrUserInfoRespVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppUserInfoRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.member.controller.user.vo; +package cn.iocoder.yudao.module.member.controller.app.user.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -6,11 +6,11 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -@ApiModel("ç”¨æˆ·ä¸ªäººä¿¡æ¯ Response VO") +@ApiModel("APP 端 - ç”¨æˆ·ä¸ªäººä¿¡æ¯ Response VO") @Data @NoArgsConstructor @AllArgsConstructor -public class MbrUserInfoRespVO { +public class AppUserInfoRespVO { @ApiModelProperty(value = "用户昵称", required = true, example = "芋艿") private String nickname; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/user/vo/MbrUserUpdateMobileReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppUserUpdateMobileReqVO.java similarity index 91% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/user/vo/MbrUserUpdateMobileReqVO.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppUserUpdateMobileReqVO.java index 8593302d79..fe91566c96 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/user/vo/MbrUserUpdateMobileReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppUserUpdateMobileReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.member.controller.user.vo; +package cn.iocoder.yudao.module.member.controller.app.user.vo; import cn.iocoder.yudao.framework.common.validation.Mobile; import io.swagger.annotations.ApiModel; @@ -13,12 +13,12 @@ import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.Pattern; -@ApiModel("修改手机 Request VO") +@ApiModel("APP 端 - 修改手机 Request VO") @Data @NoArgsConstructor @AllArgsConstructor @Builder -public class MbrUserUpdateMobileReqVO { +public class AppUserUpdateMobileReqVO { @ApiModelProperty(value = "手机验è¯ç ", required = true, example = "1024") @NotEmpty(message = "手机验è¯ç ä¸èƒ½ä¸ºç©º") @@ -44,5 +44,4 @@ public class MbrUserUpdateMobileReqVO { @Mobile private String oldMobile; - } diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/package-info.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/package-info.java new file mode 100644 index 0000000000..ea9687d819 --- /dev/null +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/package-info.java @@ -0,0 +1,6 @@ +/** + * æä¾› RESTful API ç»™å‰ç«¯ï¼š + * 1. admin 包:æä¾›ç»™ç®¡ç†åŽå° yudao-ui-admin å‰ç«¯é¡¹ç›® + * 2. app 包:æä¾›ç»™ç”¨æˆ· APP yudao-ui-app å‰ç«¯é¡¹ç›® + */ +package cn.iocoder.yudao.module.member.controller; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/convert/auth/SysAuthConvert.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/auth/SysAuthConvert.java similarity index 91% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/convert/auth/SysAuthConvert.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/auth/SysAuthConvert.java index f2af812570..df9a353a04 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/convert/auth/SysAuthConvert.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/auth/SysAuthConvert.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.system.convert.auth; +package cn.iocoder.yudao.module.member.convert.auth; import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/convert/package-info.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/package-info.java similarity index 56% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/convert/package-info.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/package-info.java index 5877b74c18..6523a66567 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/convert/package-info.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/package-info.java @@ -3,4 +3,4 @@ * * ç›®å‰ä½¿ç”¨ MapStruct 框架 */ -package cn.iocoder.yudao.userserver.modules.member.convert; +package cn.iocoder.yudao.module.member.convert; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/user/UserConvert.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/user/UserConvert.java new file mode 100644 index 0000000000..139b6ef330 --- /dev/null +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/user/UserConvert.java @@ -0,0 +1,14 @@ +package cn.iocoder.yudao.module.member.convert.user; + +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +@Mapper +public interface UserConvert { + + UserConvert INSTANCE = Mappers.getMapper(UserConvert.class); + + AppUserInfoRespVO convert(MemberUserDO bean); + +} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md similarity index 100% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/dal/dataobject/sms/SysSmsCodeDO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/sms/SysSmsCodeDO.java similarity index 90% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/dal/dataobject/sms/SysSmsCodeDO.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/sms/SysSmsCodeDO.java index 8cce25f42a..eb51770ea8 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/dal/dataobject/sms/SysSmsCodeDO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/sms/SysSmsCodeDO.java @@ -1,9 +1,8 @@ -package cn.iocoder.yudao.userserver.modules.system.dal.dataobject.sms; +package cn.iocoder.yudao.module.member.dal.dataobject.sms; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import com.baomidou.mybatisplus.annotation.TableName; import lombok.*; -import lombok.experimental.Accessors; import java.util.Date; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/dal/dataobject/user/MbrUserDO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java similarity index 88% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/dal/dataobject/user/MbrUserDO.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java index 02efd598b0..0b77f4e1e9 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/dal/dataobject/user/MbrUserDO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user; +package cn.iocoder.yudao.module.member.dal.dataobject.user; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; @@ -16,13 +16,13 @@ import java.util.Date; * * @author èŠ‹é“æºç  */ -@TableName(value = "mbr_user", autoResultMap = true) +@TableName(value = "member_user", autoResultMap = true) @Data @EqualsAndHashCode(callSuper = true) @Builder @NoArgsConstructor @AllArgsConstructor -public class MbrUserDO extends TenantBaseDO { +public class MemberUserDO extends TenantBaseDO { /** * 用户ID diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/dal/mysql/sms/SysSmsCodeMapper.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/sms/SysSmsCodeMapper.java similarity index 86% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/dal/mysql/sms/SysSmsCodeMapper.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/sms/SysSmsCodeMapper.java index 88e10363f5..80079117f2 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/dal/mysql/sms/SysSmsCodeMapper.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/sms/SysSmsCodeMapper.java @@ -1,11 +1,12 @@ -package cn.iocoder.yudao.userserver.modules.system.dal.mysql.sms; +package cn.iocoder.yudao.module.member.dal.mysql.sms; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; +import cn.iocoder.yudao.module.member.dal.dataobject.sms.SysSmsCodeDO; import cn.iocoder.yudao.userserver.modules.system.dal.dataobject.sms.SysSmsCodeDO; import org.apache.ibatis.annotations.Mapper; - +// TODO @芋艿: @Mapper public interface SysSmsCodeMapper extends BaseMapperX { diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/dal/mysql/user/MbrUserMapper.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MbrUserMapper.java similarity index 86% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/dal/mysql/user/MbrUserMapper.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MbrUserMapper.java index 6abb5ddf32..49b6a9f8e9 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/dal/mysql/user/MbrUserMapper.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MbrUserMapper.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.member.dal.mysql.user; +package cn.iocoder.yudao.module.member.dal.mysql.user; import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/package-info.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/package-info.java new file mode 100644 index 0000000000..06c6545caf --- /dev/null +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/package-info.java @@ -0,0 +1,7 @@ +/** + * DAL = Data Access Layer æ•°æ®è®¿é—®å±‚ + * 1. data object:数æ®å¯¹è±¡ + * 2. redis:Redis çš„ CRUD æ“作 + * 3. mysql:MySQL çš„ CRUD æ“作 + */ +package cn.iocoder.yudao.module.member.dal; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/redis/package-info.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/redis/package-info.java new file mode 100644 index 0000000000..f5d6e64d24 --- /dev/null +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/redis/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.member.dal.redis; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/enums/MbrErrorCodeConstants.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/MemberErrorCodeConstants.java similarity index 80% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/enums/MbrErrorCodeConstants.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/MemberErrorCodeConstants.java index 3794eb09d4..4ee545b1bf 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/enums/MbrErrorCodeConstants.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/MemberErrorCodeConstants.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.member.enums; +package cn.iocoder.yudao.module.member.enums; import cn.iocoder.yudao.framework.common.exception.ErrorCode; @@ -7,11 +7,12 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode; * * member 系统,使用 1-004-000-000 段 */ -public interface MbrErrorCodeConstants { +public interface MemberErrorCodeConstants { // ==========用户相关 1004001000============ ErrorCode USER_NOT_EXISTS = new ErrorCode(1004001000, "用户ä¸å­˜åœ¨"); // ==========文件相关 1004002000 =========== ErrorCode FILE_IS_EMPTY = new ErrorCode(1004002000, "文件为空"); + } diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/enums/SysErrorCodeConstants.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/SysErrorCodeConstants.java similarity index 96% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/enums/SysErrorCodeConstants.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/SysErrorCodeConstants.java index 05ae0ed3b8..b1b23a3526 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/enums/SysErrorCodeConstants.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/SysErrorCodeConstants.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.system.enums; +package cn.iocoder.yudao.module.member.enums; import cn.iocoder.yudao.framework.common.exception.ErrorCode; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/enums/sms/SysSmsSceneEnum.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/sms/SysSmsSceneEnum.java similarity index 95% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/enums/sms/SysSmsSceneEnum.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/sms/SysSmsSceneEnum.java index 9cea092301..a471901176 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/enums/sms/SysSmsSceneEnum.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/sms/SysSmsSceneEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.system.enums.sms; +package cn.iocoder.yudao.module.member.enums.sms; import cn.iocoder.yudao.framework.common.core.IntArrayValuable; import lombok.AllArgsConstructor; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/enums/sms/SysSmsTemplateCodeConstants.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/sms/SysSmsTemplateCodeConstants.java similarity index 88% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/enums/sms/SysSmsTemplateCodeConstants.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/sms/SysSmsTemplateCodeConstants.java index 8a83f75f20..3ad8439cd6 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/enums/sms/SysSmsTemplateCodeConstants.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/sms/SysSmsTemplateCodeConstants.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.system.enums.sms; +package cn.iocoder.yudao.module.member.enums.sms; /** * yudao-user-server 使用到的短信模æ¿çš„ Code ç¼–ç çš„æžšä¸¾ diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/framework/package-info.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/framework/package-info.java new file mode 100644 index 0000000000..7342570b1b --- /dev/null +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/framework/package-info.java @@ -0,0 +1,6 @@ +/** + * 属于 yudao-module-member-impl çš„å°è£… + * + * @author èŠ‹é“æºç  + */ +package cn.iocoder.yudao.module.member.framework; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/framework/security/SecurityConfiguration.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/framework/security/SecurityConfiguration.java similarity index 94% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/framework/security/SecurityConfiguration.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/framework/security/SecurityConfiguration.java index 66a0ae7187..32368f8d10 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/framework/security/SecurityConfiguration.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/framework/security/SecurityConfiguration.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.framework.security; +package cn.iocoder.yudao.module.member.framework.security; import cn.iocoder.yudao.framework.web.config.WebProperties; import org.springframework.context.annotation.Bean; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/framework/sms/SmsCodeConfiguration.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/framework/sms/SmsCodeConfiguration.java similarity index 79% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/framework/sms/SmsCodeConfiguration.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/framework/sms/SmsCodeConfiguration.java index a4510ea476..fa741880b3 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/framework/sms/SmsCodeConfiguration.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/framework/sms/SmsCodeConfiguration.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.system.framework.sms; +package cn.iocoder.yudao.module.member.framework.sms; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Configuration; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/framework/sms/SmsCodeProperties.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/framework/sms/SmsCodeProperties.java similarity index 94% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/framework/sms/SmsCodeProperties.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/framework/sms/SmsCodeProperties.java index b600c28dc9..542fe2d9e7 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/framework/sms/SmsCodeProperties.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/framework/sms/SmsCodeProperties.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.system.framework.sms; +package cn.iocoder.yudao.module.member.framework.sms; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/package-info.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/package-info.java new file mode 100644 index 0000000000..dabac6ac39 --- /dev/null +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.member; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/SysAuthService.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/SysAuthService.java similarity index 93% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/SysAuthService.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/SysAuthService.java index 0145821d55..a864e1ed9d 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/SysAuthService.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/SysAuthService.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.userserver.modules.system.service.auth; +package cn.iocoder.yudao.module.member.service.auth; import cn.iocoder.yudao.framework.security.core.service.SecurityAuthFrameworkService; -import cn.iocoder.yudao.userserver.modules.system.controller.auth.vo.*; +import cn.iocoder.yudao.module.member.controller.app.auth.vo.*; import javax.validation.Valid; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/impl/SysAuthServiceImpl.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/SysAuthServiceImpl.java similarity index 92% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/impl/SysAuthServiceImpl.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/SysAuthServiceImpl.java index 037db64b81..fd68cff5e5 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/impl/SysAuthServiceImpl.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/SysAuthServiceImpl.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.system.service.auth.impl; +package cn.iocoder.yudao.module.member.service.auth; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; @@ -12,12 +12,13 @@ import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLo import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; +import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils; import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.userserver.modules.member.dal.mysql.user.MbrUserMapper; import cn.iocoder.yudao.userserver.modules.member.service.user.MbrUserService; -import cn.iocoder.yudao.userserver.modules.system.controller.auth.vo.*; +import cn.iocoder.yudao.module.member.controller.app.auth.vo.*; import cn.iocoder.yudao.userserver.modules.system.convert.auth.SysAuthConvert; import cn.iocoder.yudao.userserver.modules.system.enums.sms.SysSmsSceneEnum; import cn.iocoder.yudao.userserver.modules.system.service.auth.SysAuthService; @@ -131,13 +132,13 @@ public class SysAuthServiceImpl implements SysAuthService { String unionId = socialService.getAuthUserUnionId(authUser); List socialUsers = socialService.getAllSocialUserList(reqVO.getType(), unionId, USER_TYPE_ENUM); if (CollUtil.isEmpty(socialUsers)) { - throw exception(AUTH_THIRD_LOGIN_NOT_BIND); + throw ServiceExceptionUtil.exception(SysErrorCodeConstants.AUTH_THIRD_LOGIN_NOT_BIND); } // 自动登录 MbrUserDO user = userService.getUser(socialUsers.get(0).getUserId()); if (user == null) { - throw exception(USER_NOT_EXISTS); + throw ServiceExceptionUtil.exception(SysErrorCodeConstants.USER_NOT_EXISTS); } this.createLoginLog(user.getMobile(), SysLoginLogTypeEnum.LOGIN_SOCIAL, SysLoginResultEnum.SUCCESS); @@ -190,14 +191,14 @@ public class SysAuthServiceImpl implements SysAuthService { authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, password)); } catch (BadCredentialsException badCredentialsException) { this.createLoginLog(username, logTypeEnum, SysLoginResultEnum.BAD_CREDENTIALS); - throw exception(AUTH_LOGIN_BAD_CREDENTIALS); + throw ServiceExceptionUtil.exception(SysErrorCodeConstants.AUTH_LOGIN_BAD_CREDENTIALS); } catch (DisabledException disabledException) { this.createLoginLog(username, logTypeEnum, SysLoginResultEnum.USER_DISABLED); - throw exception(AUTH_LOGIN_USER_DISABLED); + throw ServiceExceptionUtil.exception(SysErrorCodeConstants.AUTH_LOGIN_USER_DISABLED); } catch (AuthenticationException authenticationException) { log.error("[login0][username({}) å‘生未知异常]", username, authenticationException); this.createLoginLog(username, logTypeEnum, SysLoginResultEnum.UNKNOWN_ERROR); - throw exception(AUTH_LOGIN_FAIL_UNKNOWN); + throw ServiceExceptionUtil.exception(SysErrorCodeConstants.AUTH_LOGIN_FAIL_UNKNOWN); } // 登录æˆåŠŸçš„æ—¥å¿— Assert.notNull(authentication.getPrincipal(), "Principal ä¸ä¼šä¸ºç©º"); @@ -248,7 +249,7 @@ public class SysAuthServiceImpl implements SysAuthService { // 釿–°åŠ è½½ MbrUserDO ä¿¡æ¯ MbrUserDO user = userService.getUser(loginUser.getId()); if (user == null || CommonStatusEnum.DISABLE.getStatus().equals(user.getStatus())) { - throw exception(AUTH_TOKEN_EXPIRED); // 校验 token 时,用户被ç¦ç”¨çš„æƒ…况下,也认为 token 过期,方便å‰ç«¯è·³è½¬åˆ°ç™»å½•ç•Œé¢ + throw ServiceExceptionUtil.exception(SysErrorCodeConstants.AUTH_TOKEN_EXPIRED); // 校验 token 时,用户被ç¦ç”¨çš„æƒ…况下,也认为 token 过期,方便å‰ç«¯è·³è½¬åˆ°ç™»å½•ç•Œé¢ } // 刷新 LoginUser 缓存 @@ -321,11 +322,11 @@ public class SysAuthServiceImpl implements SysAuthService { public MbrUserDO checkOldPassword(Long id, String oldPassword) { MbrUserDO user = userMapper.selectById(id); if (user == null) { - throw exception(USER_NOT_EXISTS); + throw ServiceExceptionUtil.exception(SysErrorCodeConstants.USER_NOT_EXISTS); } // 傿•°ï¼šæœªåР坆坆ç ï¼Œç¼–ç åŽçš„å¯†ç  if (!passwordEncoder.matches(oldPassword,user.getPassword())) { - throw exception(USER_PASSWORD_FAILED); + throw ServiceExceptionUtil.exception(SysErrorCodeConstants.USER_PASSWORD_FAILED); } return user; } @@ -333,7 +334,7 @@ public class SysAuthServiceImpl implements SysAuthService { public MbrUserDO checkUserIfExists(String mobile) { MbrUserDO user = userMapper.selectByMobile(mobile); if (user == null) { - throw exception(USER_NOT_EXISTS); + throw ServiceExceptionUtil.exception(SysErrorCodeConstants.USER_NOT_EXISTS); } return user; } diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/package-info.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/package-info.java new file mode 100644 index 0000000000..6223e6e6ca --- /dev/null +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.member.service; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/sms/SysSmsCodeService.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/sms/SysSmsCodeService.java similarity index 95% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/sms/SysSmsCodeService.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/sms/SysSmsCodeService.java index 281f18ce62..8f0eaf6f33 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/sms/SysSmsCodeService.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/sms/SysSmsCodeService.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.system.service.sms; +package cn.iocoder.yudao.module.member.service.sms; import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.common.validation.Mobile; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/sms/impl/SysSmsCodeServiceImpl.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/sms/SysSmsCodeServiceImpl.java similarity index 86% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/sms/impl/SysSmsCodeServiceImpl.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/sms/SysSmsCodeServiceImpl.java index 80fc15a8a3..43b7a1753c 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/sms/impl/SysSmsCodeServiceImpl.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/sms/SysSmsCodeServiceImpl.java @@ -1,8 +1,9 @@ -package cn.iocoder.yudao.userserver.modules.system.service.sms.impl; +package cn.iocoder.yudao.module.member.service.sms; import cn.hutool.core.map.MapUtil; import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO; import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsCoreService; +import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.userserver.modules.member.service.user.MbrUserService; import cn.iocoder.yudao.userserver.modules.system.dal.dataobject.sms.SysSmsCodeDO; import cn.iocoder.yudao.userserver.modules.system.dal.mysql.sms.SysSmsCodeMapper; @@ -63,7 +64,7 @@ public class SysSmsCodeServiceImpl implements SysSmsCodeService { // æ£€æµ‹æ‰‹æœºå·æ˜¯å¦å·²è¢«ä½¿ç”¨ MbrUserDO userByMobile = mbrUserService.getUserByMobile(mobile); if (userByMobile != null){ - throw exception(USER_SMS_CODE_IS_EXISTS); + throw ServiceExceptionUtil.exception(SysErrorCodeConstants.USER_SMS_CODE_IS_EXISTS); } // å‘é€çŸ­ä¿¡ @@ -75,11 +76,11 @@ public class SysSmsCodeServiceImpl implements SysSmsCodeService { SysSmsCodeDO lastSmsCode = smsCodeMapper.selectLastByMobile(mobile, null,null); if (lastSmsCode != null) { if (lastSmsCode.getTodayIndex() >= smsCodeProperties.getSendMaximumQuantityPerDay()) { // 超过当天å‘é€çš„上é™ã€‚ - throw exception(USER_SMS_CODE_EXCEED_SEND_MAXIMUM_QUANTITY_PER_DAY); + throw ServiceExceptionUtil.exception(SysErrorCodeConstants.USER_SMS_CODE_EXCEED_SEND_MAXIMUM_QUANTITY_PER_DAY); } if (System.currentTimeMillis() - lastSmsCode.getCreateTime().getTime() < smsCodeProperties.getSendFrequency().toMillis()) { // å‘é€è¿‡äºŽé¢‘ç¹ - throw exception(USER_SMS_CODE_SEND_TOO_FAST); + throw ServiceExceptionUtil.exception(SysErrorCodeConstants.USER_SMS_CODE_SEND_TOO_FAST); } // TODO 芋艿:æå‡ï¼Œæ¯ä¸ª IP æ¯å¤©å¯å‘逿•°é‡ // TODO 芋艿:æå‡ï¼Œæ¯ä¸ª IP æ¯å°æ—¶å¯å‘逿•°é‡ @@ -102,7 +103,7 @@ public class SysSmsCodeServiceImpl implements SysSmsCodeService { // 判断验è¯ç æ˜¯å¦å·²è¢«ä½¿ç”¨ if (Boolean.TRUE.equals(lastSmsCode.getUsed())) { - throw exception(USER_SMS_CODE_USED); + throw ServiceExceptionUtil.exception(SysErrorCodeConstants.USER_SMS_CODE_USED); } // 使用验è¯ç  @@ -114,7 +115,7 @@ public class SysSmsCodeServiceImpl implements SysSmsCodeService { public void sendSmsCodeLogin(Long userId) { MbrUserDO user = mbrUserService.getUser(userId); if (user == null){ - throw exception(USER_NOT_EXISTS); + throw ServiceExceptionUtil.exception(SysErrorCodeConstants.USER_NOT_EXISTS); } // å‘é€éªŒè¯ç  this.sendSmsCode(user.getMobile(),SysSmsSceneEnum.CHANGE_MOBILE_BY_SMS.getScene(), getClientIP()); @@ -127,11 +128,11 @@ public class SysSmsCodeServiceImpl implements SysSmsCodeService { // 若验è¯ç ä¸å­˜åœ¨ï¼ŒæŠ›å‡ºå¼‚常 if (lastSmsCode == null) { - throw exception(USER_SMS_CODE_NOT_FOUND); + throw ServiceExceptionUtil.exception(SysErrorCodeConstants.USER_SMS_CODE_NOT_FOUND); } if (System.currentTimeMillis() - lastSmsCode.getCreateTime().getTime() >= smsCodeProperties.getExpireTimes().toMillis()) { // 验è¯ç å·²è¿‡æœŸ - throw exception(USER_SMS_CODE_EXPIRED); + throw ServiceExceptionUtil.exception(SysErrorCodeConstants.USER_SMS_CODE_EXPIRED); } return lastSmsCode; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/service/user/MbrUserService.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MbrUserService.java similarity index 96% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/service/user/MbrUserService.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MbrUserService.java index e33978bfe2..be02945c97 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/service/user/MbrUserService.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MbrUserService.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.member.service.user; +package cn.iocoder.yudao.module.member.service.user; import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO; import cn.iocoder.yudao.userserver.modules.member.controller.user.vo.MbrUserInfoRespVO; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/service/user/impl/MbrUserServiceImpl.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MbrUserServiceImpl.java similarity index 96% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/service/user/impl/MbrUserServiceImpl.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MbrUserServiceImpl.java index ee76906994..de53135986 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/service/user/impl/MbrUserServiceImpl.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MbrUserServiceImpl.java @@ -1,10 +1,11 @@ -package cn.iocoder.yudao.userserver.modules.member.service.user.impl; +package cn.iocoder.yudao.module.member.service.user; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.IdUtil; import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.userserver.modules.member.controller.user.vo.MbrUserInfoRespVO; import cn.iocoder.yudao.userserver.modules.member.controller.user.vo.MbrUserUpdateMobileReqVO; import cn.iocoder.yudao.userserver.modules.member.convert.user.UserProfileConvert; @@ -135,7 +136,7 @@ public class MbrUserServiceImpl implements MbrUserService { SysSmsCodeDO sysSmsCodeDO = smsCodeService.checkCodeIsExpired(reqVO.getOldMobile(), reqVO.getOldCode(), SysSmsSceneEnum.CHANGE_MOBILE_BY_SMS.getScene()); // 判断旧codeæ˜¯å¦æœªè¢«ä½¿ç”¨ï¼Œå¦‚果是,抛出异常 if (Boolean.FALSE.equals(sysSmsCodeDO.getUsed())){ - throw exception(USER_SMS_CODE_IS_UNUSED); + throw ServiceExceptionUtil.exception(SysErrorCodeConstants.USER_SMS_CODE_IS_UNUSED); } // 使用新验è¯ç  diff --git a/yudao-user-server/src/test/java/cn/iocoder/yudao/userserver/modules/system/service/SysAuthServiceTest.java b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/auth/SysAuthServiceTest.java similarity index 95% rename from yudao-user-server/src/test/java/cn/iocoder/yudao/userserver/modules/system/service/SysAuthServiceTest.java rename to yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/auth/SysAuthServiceTest.java index 4c8b953c6b..ff1c8a7c65 100644 --- a/yudao-user-server/src/test/java/cn/iocoder/yudao/userserver/modules/system/service/SysAuthServiceTest.java +++ b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/auth/SysAuthServiceTest.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.system.service; +package cn.iocoder.yudao.module.member.service.auth; import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO; import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService; @@ -10,8 +10,8 @@ import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; import cn.iocoder.yudao.userserver.BaseDbAndRedisUnitTest; import cn.iocoder.yudao.userserver.modules.member.dal.mysql.user.MbrUserMapper; import cn.iocoder.yudao.userserver.modules.member.service.user.MbrUserService; -import cn.iocoder.yudao.userserver.modules.system.controller.auth.vo.MbrAuthResetPasswordReqVO; -import cn.iocoder.yudao.userserver.modules.system.controller.auth.vo.MbrAuthUpdatePasswordReqVO; +import cn.iocoder.yudao.module.member.controller.app.auth.vo.MbrAuthResetPasswordReqVO; +import cn.iocoder.yudao.module.member.controller.app.auth.vo.MbrAuthUpdatePasswordReqVO; import cn.iocoder.yudao.userserver.modules.system.service.auth.SysAuthService; import cn.iocoder.yudao.userserver.modules.system.service.auth.impl.SysAuthServiceImpl; import cn.iocoder.yudao.userserver.modules.system.service.sms.SysSmsCodeService; diff --git a/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/package-info.java b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/package-info.java new file mode 100644 index 0000000000..6223e6e6ca --- /dev/null +++ b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.member.service; diff --git a/yudao-user-server/src/test/java/cn/iocoder/yudao/userserver/modules/member/service/MbrUserServiceImplTest.java b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/MbrUserServiceImplTest.java similarity index 97% rename from yudao-user-server/src/test/java/cn/iocoder/yudao/userserver/modules/member/service/MbrUserServiceImplTest.java rename to yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/MbrUserServiceImplTest.java index 68f41643b3..ecd728ef08 100644 --- a/yudao-user-server/src/test/java/cn/iocoder/yudao/userserver/modules/member/service/MbrUserServiceImplTest.java +++ b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/MbrUserServiceImplTest.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.member.service; +package cn.iocoder.yudao.module.member.service.user; import cn.hutool.core.util.RandomUtil; import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; @@ -122,7 +122,7 @@ public class MbrUserServiceImplTest extends BaseDbAndRedisUnitTest { String oldCode = RandomUtil.randomString(4); codeDO.setMobile(userDO.getMobile()); codeDO.setCode(oldCode); - codeDO.setScene(CHANGE_MOBILE_BY_SMS.getScene()); + codeDO.setScene(SysSmsSceneEnum.CHANGE_MOBILE_BY_SMS.getScene()); codeDO.setUsed(Boolean.FALSE); when(sysSmsCodeService.checkCodeIsExpired(codeDO.getMobile(),codeDO.getCode(),codeDO.getScene())).thenReturn(codeDO); diff --git a/yudao-user-server/src/test/java/cn/iocoder/yudao/userserver/BaseDbAndRedisUnitTest.java b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/test/BaseDbAndRedisUnitTest.java similarity index 98% rename from yudao-user-server/src/test/java/cn/iocoder/yudao/userserver/BaseDbAndRedisUnitTest.java rename to yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/test/BaseDbAndRedisUnitTest.java index 2669ef49c9..50d19ad4ea 100644 --- a/yudao-user-server/src/test/java/cn/iocoder/yudao/userserver/BaseDbAndRedisUnitTest.java +++ b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/test/BaseDbAndRedisUnitTest.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver; +package cn.iocoder.yudao.module.member.test; import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration; import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration; diff --git a/yudao-user-server/src/test/java/cn/iocoder/yudao/userserver/BaseDbUnitTest.java b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/test/BaseDbUnitTest.java similarity index 97% rename from yudao-user-server/src/test/java/cn/iocoder/yudao/userserver/BaseDbUnitTest.java rename to yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/test/BaseDbUnitTest.java index af8d71a0cb..901d896bf6 100644 --- a/yudao-user-server/src/test/java/cn/iocoder/yudao/userserver/BaseDbUnitTest.java +++ b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/test/BaseDbUnitTest.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver; +package cn.iocoder.yudao.module.member.test; import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration; import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration; diff --git a/yudao-user-server/src/test/java/cn/iocoder/yudao/userserver/config/RedisTestConfiguration.java b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/test/RedisTestConfiguration.java similarity index 96% rename from yudao-user-server/src/test/java/cn/iocoder/yudao/userserver/config/RedisTestConfiguration.java rename to yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/test/RedisTestConfiguration.java index 7164efd874..99838337bb 100644 --- a/yudao-user-server/src/test/java/cn/iocoder/yudao/userserver/config/RedisTestConfiguration.java +++ b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/test/RedisTestConfiguration.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.config; +package cn.iocoder.yudao.module.member.test; import com.github.fppt.jedismock.RedisServer; import org.springframework.boot.autoconfigure.data.redis.RedisProperties; diff --git a/yudao-user-server/src/test/resources/application-unit-test.yaml b/yudao-module-member/yudao-module-member-impl/src/test/resources/application-unit-test.yaml similarity index 100% rename from yudao-user-server/src/test/resources/application-unit-test.yaml rename to yudao-module-member/yudao-module-member-impl/src/test/resources/application-unit-test.yaml diff --git a/yudao-user-server/src/test/resources/file/erweima.jpg b/yudao-module-member/yudao-module-member-impl/src/test/resources/file/erweima.jpg similarity index 100% rename from yudao-user-server/src/test/resources/file/erweima.jpg rename to yudao-module-member/yudao-module-member-impl/src/test/resources/file/erweima.jpg diff --git a/yudao-user-server/src/test/resources/logback-spring.xml b/yudao-module-member/yudao-module-member-impl/src/test/resources/logback-spring.xml similarity index 100% rename from yudao-user-server/src/test/resources/logback-spring.xml rename to yudao-module-member/yudao-module-member-impl/src/test/resources/logback-spring.xml diff --git a/yudao-user-server/src/test/resources/sql/clean.sql b/yudao-module-member/yudao-module-member-impl/src/test/resources/sql/clean.sql similarity index 100% rename from yudao-user-server/src/test/resources/sql/clean.sql rename to yudao-module-member/yudao-module-member-impl/src/test/resources/sql/clean.sql diff --git a/yudao-user-server/src/test/resources/sql/create_tables.sql b/yudao-module-member/yudao-module-member-impl/src/test/resources/sql/create_tables.sql similarity index 100% rename from yudao-user-server/src/test/resources/sql/create_tables.sql rename to yudao-module-member/yudao-module-member-impl/src/test/resources/sql/create_tables.sql diff --git a/yudao-server/pom.xml b/yudao-server/pom.xml new file mode 100644 index 0000000000..0040513149 --- /dev/null +++ b/yudao-server/pom.xml @@ -0,0 +1,22 @@ + + + + yudao + cn.iocoder.boot + ${revision} + + 4.0.0 + + yudao-server + jar + + ${artifactId} + + åŽç«¯ Server çš„ä¸»é¡¹ç›®ï¼Œé€šè¿‡å¼•å…¥éœ€è¦ yudao-module-xxx çš„ä¾èµ–, + 从而实现æä¾› RESTful API ç»™ yudao-ui-adminã€yudao-ui-user ç­‰å‰ç«¯é¡¹ç›®ã€‚ + 本质上æ¥è¯´ï¼Œå®ƒå°±æ˜¯ä¸ªç©ºå£³ï¼ˆå®¹å™¨ï¼‰ï¼ + + + diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/framework/package-info.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/framework/package-info.java deleted file mode 100644 index db25ed2a46..0000000000 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/framework/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -/** - * 属于整个 yudao-user-server çš„ framework å°è£… - * - * @author èŠ‹é“æºç  - */ -package cn.iocoder.yudao.userserver.framework; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/package-info.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/package-info.java deleted file mode 100644 index 148c73cf31..0000000000 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.userserver.modules.member.controller; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/convert/user/UserProfileConvert.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/convert/user/UserProfileConvert.java deleted file mode 100644 index 6f9d16691a..0000000000 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/convert/user/UserProfileConvert.java +++ /dev/null @@ -1,15 +0,0 @@ -package cn.iocoder.yudao.userserver.modules.member.convert.user; - -import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO; -import cn.iocoder.yudao.userserver.modules.member.controller.user.vo.MbrUserInfoRespVO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -@Mapper -public interface UserProfileConvert { - - UserProfileConvert INSTANCE = Mappers.getMapper(UserProfileConvert.class); - - MbrUserInfoRespVO convert(MbrUserDO bean); - -} diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md deleted file mode 100644 index 8153487b72..0000000000 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/package-info.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/package-info.java deleted file mode 100644 index 2334d44bfa..0000000000 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/package-info.java +++ /dev/null @@ -1,8 +0,0 @@ -/** - * weixin 包下,我们放微信相关业务. - * 例如说:微信公众å·ã€ç­‰ç­‰ - * ps:微信支付,还是放在 pay 包下 - * - * 缩写:wx - */ -package cn.iocoder.yudao.userserver.modules.member; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/service/package-info.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/service/package-info.java deleted file mode 100644 index b12c6427a7..0000000000 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/service/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.userserver.modules.member.service; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/package-info.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/package-info.java deleted file mode 100644 index aa4f746ad7..0000000000 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * å ä½ - */ -package cn.iocoder.yudao.userserver.modules.system.controller; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/convert/package-info.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/convert/package-info.java deleted file mode 100644 index d7da621f01..0000000000 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/convert/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -/** - * æä¾› POJO ç±»çš„å®žä½“è½¬æ¢ - * - * ç›®å‰ä½¿ç”¨ MapStruct 框架 - */ -package cn.iocoder.yudao.userserver.modules.system.convert; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md deleted file mode 100644 index 8153487b72..0000000000 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/dal/dataobject/package-info.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/dal/dataobject/package-info.java deleted file mode 100644 index 0c99dcc95f..0000000000 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/dal/dataobject/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.userserver.modules.system.dal.dataobject; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/dal/mysql/package-info.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/dal/mysql/package-info.java deleted file mode 100644 index a1bdeadcd9..0000000000 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/dal/mysql/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.userserver.modules.system.dal.mysql; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/dal/redis/package-info.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/dal/redis/package-info.java deleted file mode 100644 index bb50835188..0000000000 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/dal/redis/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.userserver.modules.system.dal.redis; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/framework/package-info.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/framework/package-info.java deleted file mode 100644 index cb0def51fa..0000000000 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/framework/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -/** - * 属于 system 模å—çš„ framework å°è£… - * - * @author èŠ‹é“æºç  - */ -package cn.iocoder.yudao.userserver.modules.system.framework; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/package-info.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/package-info.java deleted file mode 100644 index 89fa9c162e..0000000000 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -/** - * system 包下,我们放通用业务,支撑上层的核心业务。 - * 例如说:用户ã€éƒ¨é—¨ã€æƒé™ã€æ•°æ®å­—典等等 - * - * 缩写:sys - */ -package cn.iocoder.yudao.userserver.modules.system; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/package-info.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/package-info.java deleted file mode 100644 index d1896cb92e..0000000000 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.userserver.modules.system.service; From 1c266988c5f925472396c2f57f8fb341ed407f50 Mon Sep 17 00:00:00 2001 From: jason <2667446@qq.com> Date: Thu, 27 Jan 2022 15:14:00 +0800 Subject: [PATCH 03/47] =?UTF-8?q?=E9=81=97=E6=BC=8F=E4=BA=86=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yudao/adminserver/BaseDbUnitTest.java | 39 ++ .../definition/BpmFormServiceTest.java | 146 ++++ .../definition/BpmUserGroupServiceTest.java | 134 ++++ .../test/resources/application-unit-test.yaml | 38 ++ .../src/test/resources/application.yaml | 35 + .../src/test/resources/logback-spring.xml | 4 + .../src/test/resources/sql/clean.sql | 38 ++ .../src/test/resources/sql/create_tables.sql | 624 ++++++++++++++++++ 8 files changed, 1058 insertions(+) create mode 100644 yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java create mode 100644 yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormServiceTest.java create mode 100644 yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupServiceTest.java create mode 100644 yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/application-unit-test.yaml create mode 100644 yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/application.yaml create mode 100644 yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/logback-spring.xml create mode 100644 yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/sql/clean.sql create mode 100644 yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/sql/create_tables.sql diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java new file mode 100644 index 0000000000..5f7daeded1 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.adminserver; + +import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration; +import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration; +import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; +import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.jdbc.Sql; + +/** + * ä¾èµ–内存 DB çš„å•元测试 + * + * 注æ„,Service å±‚åŒæ ·é€‚用。对于 Service 层的å•元测试,我们针对自己模å—çš„ Mapper 走的是 H2 内存数æ®åº“,针对别的模å—çš„ Service 走的是 Mock 方法 + * + * @author èŠ‹é“æºç  + */ +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseDbUnitTest.Application.class) +@ActiveProfiles("unit-test") // 设置使用 application-unit-test é…置文件 +@Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) // æ¯ä¸ªå•元测试结æŸåŽï¼Œæ¸…ç† DB +public class BaseDbUnitTest { + + @Import({ + // DB é…置类 + YudaoDataSourceAutoConfiguration.class, // 自己的 DB é…置类 + DataSourceAutoConfiguration.class, // Spring DB 自动é…置类 + DataSourceTransactionManagerAutoConfiguration.class, // Spring 事务自动é…置类 + DruidDataSourceAutoConfigure.class, // Druid 自动é…置类 + // MyBatis é…置类 + YudaoMybatisAutoConfiguration.class, // 自己的 MyBatis é…置类 + MybatisPlusAutoConfiguration.class, // MyBatis 的自动é…置类 + }) + public static class Application { + } + +} diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormServiceTest.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormServiceTest.java new file mode 100644 index 0000000000..91a88c2b5c --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormServiceTest.java @@ -0,0 +1,146 @@ +package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; + +import cn.hutool.core.util.RandomUtil; +import cn.iocoder.yudao.adminserver.BaseDbUnitTest; +import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.BpmFormCreateReqVO; +import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.BpmFormPageReqVO; +import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.BpmFormUpdateReqVO; +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmFormDO; +import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmFormMapper; +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmFormFieldRespDTO; +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.impl.BpmFormServiceImpl; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.json.JsonUtils; +import org.junit.jupiter.api.Test; +import org.springframework.context.annotation.Import; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.FORM_NOT_EXISTS; +import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; +import static org.junit.jupiter.api.Assertions.*; + +/** + * {@link BpmFormServiceImpl} çš„å•元测试类 + * + * @author èŠ‹é“æºç  + */ +@Import(BpmFormServiceImpl.class) +public class BpmFormServiceTest extends BaseDbUnitTest { + + @Resource + private BpmFormServiceImpl formService; + + @Resource + private BpmFormMapper formMapper; + + @Test + public void testCreateForm_success() { + // 准备傿•° + BpmFormCreateReqVO reqVO = randomPojo(BpmFormCreateReqVO.class, o -> { + o.setConf("{}"); + o.setFields(randomFields()); + }); + + // 调用 + Long formId = formService.createForm(reqVO); + // 断言 + assertNotNull(formId); + // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® + BpmFormDO form = formMapper.selectById(formId); + assertPojoEquals(reqVO, form); + } + + @Test + public void testUpdateForm_success() { + // mock æ•°æ® + BpmFormDO dbForm = randomPojo(BpmFormDO.class, o -> { + o.setConf("{}"); + o.setFields(randomFields()); + }); + formMapper.insert(dbForm);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® + // 准备傿•° + BpmFormUpdateReqVO reqVO = randomPojo(BpmFormUpdateReqVO.class, o -> { + o.setId(dbForm.getId()); // 设置更新的 ID + o.setConf("{'yudao': 'yuanma'}"); + o.setFields(randomFields()); + }); + + // 调用 + formService.updateForm(reqVO); + // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® + BpmFormDO form = formMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ + assertPojoEquals(reqVO, form); + } + + @Test + public void testUpdateForm_notExists() { + // 准备傿•° + BpmFormUpdateReqVO reqVO = randomPojo(BpmFormUpdateReqVO.class, o -> { + o.setConf("{'yudao': 'yuanma'}"); + o.setFields(randomFields()); + }); + + // 调用, 并断言异常 + assertServiceException(() -> formService.updateForm(reqVO), FORM_NOT_EXISTS); + } + + @Test + public void testDeleteForm_success() { + // mock æ•°æ® + BpmFormDO dbForm = randomPojo(BpmFormDO.class); + formMapper.insert(dbForm);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® + // 准备傿•° + Long id = dbForm.getId(); + + // 调用 + formService.deleteForm(id); + // 校验数æ®ä¸å­˜åœ¨äº† + assertNull(formMapper.selectById(id)); + } + + @Test + public void testDeleteForm_notExists() { + // 准备傿•° + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> formService.deleteForm(id), FORM_NOT_EXISTS); + } + + @Test + public void testGetFormPage() { + // mock æ•°æ® + BpmFormDO dbForm = randomPojo(BpmFormDO.class, o -> { // 等会查询到 + o.setName("èŠ‹é“æºç "); + }); + formMapper.insert(dbForm); + // 测试 name ä¸åŒ¹é… + formMapper.insert(cloneIgnoreId(dbForm, o -> o.setName("æºç "))); + // 准备傿•° + BpmFormPageReqVO reqVO = new BpmFormPageReqVO(); + reqVO.setName("芋é“"); + + // 调用 + PageResult pageResult = formService.getFormPage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbForm, pageResult.getList().get(0)); + } + + private List randomFields() { + int size = RandomUtil.randomInt(1, 3); + return Stream.iterate(0, i -> i).limit(size) + .map(i -> JsonUtils.toJsonString(randomPojo(BpmFormFieldRespDTO.class))) + .collect(Collectors.toList()); + } + +} diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupServiceTest.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupServiceTest.java new file mode 100644 index 0000000000..a8704dd611 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupServiceTest.java @@ -0,0 +1,134 @@ +package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; + +import cn.hutool.core.date.DateUtil; +import cn.iocoder.yudao.adminserver.BaseDbUnitTest; +import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupCreateReqVO; +import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupPageReqVO; +import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupUpdateReqVO; +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmUserGroupDO; +import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmUserGroupMapper; +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.impl.BpmUserGroupServiceImpl; +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.date.DateUtils; +import org.junit.jupiter.api.Test; +import org.springframework.context.annotation.Import; + +import javax.annotation.Resource; + +import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.USER_GROUP_NOT_EXISTS; +import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; +import static org.junit.jupiter.api.Assertions.*; + +/** +* {@link BpmUserGroupServiceImpl} çš„å•元测试类 +* +* @author èŠ‹é“æºç  +*/ +@Import(BpmUserGroupServiceImpl.class) +public class BpmUserGroupServiceTest extends BaseDbUnitTest { + + @Resource + private BpmUserGroupServiceImpl userGroupService; + + @Resource + private BpmUserGroupMapper userGroupMapper; + + @Test + public void testCreateUserGroup_success() { + // 准备傿•° + BpmUserGroupCreateReqVO reqVO = randomPojo(BpmUserGroupCreateReqVO.class); + + // 调用 + Long userGroupId = userGroupService.createUserGroup(reqVO); + // 断言 + assertNotNull(userGroupId); + // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® + BpmUserGroupDO userGroup = userGroupMapper.selectById(userGroupId); + assertPojoEquals(reqVO, userGroup); + } + + @Test + public void testUpdateUserGroup_success() { + // mock æ•°æ® + BpmUserGroupDO dbUserGroup = randomPojo(BpmUserGroupDO.class); + userGroupMapper.insert(dbUserGroup);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® + // 准备傿•° + BpmUserGroupUpdateReqVO reqVO = randomPojo(BpmUserGroupUpdateReqVO.class, o -> { + o.setId(dbUserGroup.getId()); // 设置更新的 ID + }); + + // 调用 + userGroupService.updateUserGroup(reqVO); + // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® + BpmUserGroupDO userGroup = userGroupMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ + assertPojoEquals(reqVO, userGroup); + } + + @Test + public void testUpdateUserGroup_notExists() { + // 准备傿•° + BpmUserGroupUpdateReqVO reqVO = randomPojo(BpmUserGroupUpdateReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> userGroupService.updateUserGroup(reqVO), USER_GROUP_NOT_EXISTS); + } + + @Test + public void testDeleteUserGroup_success() { + // mock æ•°æ® + BpmUserGroupDO dbUserGroup = randomPojo(BpmUserGroupDO.class); + userGroupMapper.insert(dbUserGroup);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® + // 准备傿•° + Long id = dbUserGroup.getId(); + + // 调用 + userGroupService.deleteUserGroup(id); + // 校验数æ®ä¸å­˜åœ¨äº† + assertNull(userGroupMapper.selectById(id)); + } + + @Test + public void testDeleteUserGroup_notExists() { + // 准备傿•° + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> userGroupService.deleteUserGroup(id), USER_GROUP_NOT_EXISTS); + } + + @Test + public void testGetUserGroupPage() { + // mock æ•°æ® + BpmUserGroupDO dbUserGroup = randomPojo(BpmUserGroupDO.class, o -> { // 等会查询到 + o.setName("èŠ‹é“æºç "); + o.setStatus(CommonStatusEnum.ENABLE.getStatus()); + o.setCreateTime(DateUtils.buildTime(2021, 11, 11)); + }); + userGroupMapper.insert(dbUserGroup); + // 测试 name ä¸åŒ¹é… + userGroupMapper.insert(cloneIgnoreId(dbUserGroup, o -> o.setName("芋é“"))); + // 测试 status ä¸åŒ¹é… + userGroupMapper.insert(cloneIgnoreId(dbUserGroup, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); + // 测试 createTime ä¸åŒ¹é… + userGroupMapper.insert(cloneIgnoreId(dbUserGroup, o -> o.setCreateTime(DateUtils.buildTime(2021, 12, 12)))); + // 准备傿•° + BpmUserGroupPageReqVO reqVO = new BpmUserGroupPageReqVO(); + reqVO.setName("æºç "); + reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); + reqVO.setBeginCreateTime(DateUtils.buildTime(2021, 11, 10)); + reqVO.setEndCreateTime(DateUtils.buildTime(2021, 11, 12)); + + // 调用 + PageResult pageResult = userGroupService.getUserGroupPage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbUserGroup, pageResult.getList().get(0)); + } + +} diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/application-unit-test.yaml b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/application-unit-test.yaml new file mode 100644 index 0000000000..ddad7ace21 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/application-unit-test.yaml @@ -0,0 +1,38 @@ +spring: + main: + lazy-initialization: true # 开坿‡’加载,加快速度 + banner-mode: off # å•元测试,ç¦ç”¨ Banner + +--- #################### æ•°æ®åº“相关é…ç½® #################### + +spring: + # æ•°æ®æºé…置项 + datasource: + name: ruoyi-vue-pro + url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false; # MODE 使用 MySQL 模å¼ï¼›DATABASE_TO_UPPER é…置表和字段使用å°å†™ + driver-class-name: org.h2.Driver + username: sa + password: + schema: classpath:sql/create_tables.sql # MySQL 转 H2 的语å¥ï¼Œä½¿ç”¨ https://www.jooq.org/translate/ 工具 + druid: + async-init: true # å•元测试,异步åˆå§‹åŒ– Druid 连接池,æå‡å¯åŠ¨é€Ÿåº¦ + initial-size: 1 # å•元测试,é…置为 1,æå‡å¯åŠ¨é€Ÿåº¦ + +mybatis: + lazy-initialization: true # å•元测试,设置 MyBatis Mapper 延迟加载,加速æ¯ä¸ªå•元测试 + +--- #################### 定时任务相关é…ç½® #################### + +--- #################### é…置中心相关é…ç½® #################### + +--- #################### æœåŠ¡ä¿éšœç›¸å…³é…ç½® #################### + +# Lock4j é…置项(å•元测试,ç¦ç”¨ Lock4j) + +# Resilience4j é…置项 + +--- #################### 监控相关é…ç½® #################### + +--- #################### 芋é“相关é…ç½® #################### + +# 芋é“é…置项,设置当å‰é¡¹ç›®æ‰€æœ‰è‡ªå®šä¹‰çš„é…ç½® diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/application.yaml b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/application.yaml new file mode 100644 index 0000000000..2cfbb1abe4 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/application.yaml @@ -0,0 +1,35 @@ +spring: + application: + name: yudao-module-bpm-service + + # Jackson é…置项 + jackson: + serialization: + write-dates-as-timestamps: true # 设置 Date 的格å¼ï¼Œä½¿ç”¨æ—¶é—´æˆ³ + write-date-timestamps-as-nanoseconds: false # 设置ä¸ä½¿ç”¨ nanoseconds 的格å¼ã€‚例如说 1611460870.401,而是直接 1611460870401 + write-durations-as-timestamps: true # 设置 Duration 的格å¼ï¼Œä½¿ç”¨æ—¶é—´æˆ³ + fail-on-empty-beans: false # å…许åºåˆ—化无属性的 Bean + +# MyBatis Plus çš„é…置项 +mybatis-plus: + configuration: + map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。 + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # æ‰“å°æ—¥å¿— + global-config: + db-config: + id-type: AUTO # 自增 ID + logic-delete-value: 1 # 逻辑已删除值(默认为 1) + logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) + mapper-locations: classpath*:mapper/*.xml + type-aliases-package: ${yudao.core-service.base-package}.modules.*.dal.dataobject + +--- #################### 芋é“相关é…ç½® #################### + +yudao: + info: + version: 1.0.0 + base-package: cn.iocoder.yudao.adminserver + core-service: + base-package: cn.iocoder.yudao.coreservice + +debug: false diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/logback-spring.xml b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/logback-spring.xml new file mode 100644 index 0000000000..daf756bff0 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/logback-spring.xml @@ -0,0 +1,4 @@ + + + + diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/sql/clean.sql b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/sql/clean.sql new file mode 100644 index 0000000000..b565553f24 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/sql/clean.sql @@ -0,0 +1,38 @@ +-- inf 开头的 DB +DELETE FROM "inf_config"; +DELETE FROM "inf_file"; +DELETE FROM "inf_job"; +DELETE FROM "inf_job_log"; +DELETE FROM "inf_api_access_log"; +DELETE FROM "inf_api_error_log"; + +-- sys 开头的 DB +DELETE FROM "sys_dept"; +DELETE FROM "sys_dict_data"; +DELETE FROM "sys_role"; +DELETE FROM "sys_role_menu"; +DELETE FROM "sys_menu"; +DELETE FROM "sys_user_role"; +DELETE FROM "sys_dict_type"; +DELETE FROM "sys_user_session"; +DELETE FROM "sys_post"; +DELETE FROM "sys_login_log"; +DELETE FROM "sys_operate_log"; +DELETE FROM "sys_user"; +DELETE FROM "sys_sms_channel"; +DELETE FROM "sys_sms_template"; +DELETE FROM "sys_sms_log"; +DELETE FROM "sys_error_code"; +DELETE FROM "sys_social_user"; +DELETE FROM "sys_tenant"; + +-- pay 开头的 DB +DELETE FROM pay_merchant; +DELETE FROM pay_app; +DELETE FROM pay_channel; +DELETE FROM pay_order; +DELETE FROM pay_refund; + +-- bpm 开头的 DB +DELETE FROM "bpm_form"; +DELETE FROM "bpm_user_group"; diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/sql/create_tables.sql b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/sql/create_tables.sql new file mode 100644 index 0000000000..9b2f0d69f1 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/sql/create_tables.sql @@ -0,0 +1,624 @@ +-- inf 开头的 DB + +CREATE TABLE IF NOT EXISTS "inf_config" ( + "id" bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "group" varchar(50) NOT NULL, + "type" tinyint NOT NULL, + "name" varchar(100) NOT NULL DEFAULT '', + "key" varchar(100) NOT NULL DEFAULT '', + "value" varchar(500) NOT NULL DEFAULT '', + "sensitive" bit NOT NULL, + "remark" varchar(500) DEFAULT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '傿•°é…置表'; + +CREATE TABLE IF NOT EXISTS "inf_file" ( + "id" varchar(188) NOT NULL, + "type" varchar(63) DEFAULT NULL, + "content" blob NOT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + "tenant_id" bigint not null default '0', + PRIMARY KEY ("id") +) COMMENT '文件表'; + +CREATE TABLE IF NOT EXISTS "inf_job" ( + "id" bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY COMMENT '任务编å·', + "name" varchar(32) NOT NULL COMMENT '任务åç§°', + "status" tinyint(4) NOT NULL COMMENT '任务状æ€', + "handler_name" varchar(64) NOT NULL COMMENT '处ç†å™¨çš„åå­—', + "handler_param" varchar(255) DEFAULT NULL COMMENT '处ç†å™¨çš„傿•°', + "cron_expression" varchar(32) NOT NULL COMMENT 'CRON 表达å¼', + "retry_count" int(11) NOT NULL DEFAULT '0' COMMENT 'é‡è¯•次数', + "retry_interval" int(11) NOT NULL DEFAULT '0' COMMENT 'é‡è¯•é—´éš”', + "monitor_timeout" int(11) NOT NULL DEFAULT '0' COMMENT '监控超时时间', + "creator" varchar(64) DEFAULT '' COMMENT '创建者', + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + "updater" varchar(64) DEFAULT '' COMMENT '更新者', + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', + "deleted" bit NOT NULL DEFAULT FALSE COMMENT '是å¦åˆ é™¤', + PRIMARY KEY ("id") +) COMMENT='定时任务表'; + +CREATE TABLE IF NOT EXISTS "inf_job_log" ( + "id" bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY COMMENT '日志编å·', + "job_id" bigint(20) NOT NULL COMMENT '任务编å·', + "handler_name" varchar(64) NOT NULL COMMENT '处ç†å™¨çš„åå­—', + "handler_param" varchar(255) DEFAULT NULL COMMENT '处ç†å™¨çš„傿•°', + "execute_index" tinyint(4) NOT NULL DEFAULT '1' COMMENT '第几次执行', + "begin_time" datetime NOT NULL COMMENT '开始执行时间', + "end_time" datetime DEFAULT NULL COMMENT 'ç»“æŸæ‰§è¡Œæ—¶é—´', + "duration" int(11) DEFAULT NULL COMMENT '执行时长', + "status" tinyint(4) NOT NULL COMMENT '任务状æ€', + "result" varchar(4000) DEFAULT '' COMMENT '结果数æ®', + "creator" varchar(64) DEFAULT '' COMMENT '创建者', + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + "updater" varchar(64) DEFAULT '' COMMENT '更新者', + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', + "deleted" bit(1) NOT NULL DEFAULT FALSE COMMENT '是å¦åˆ é™¤', + PRIMARY KEY ("id") +)COMMENT='定时任务日志表'; + +-- sys 开头的 DB + +CREATE TABLE IF NOT EXISTS "sys_dept" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "name" varchar(30) NOT NULL DEFAULT '', + "parent_id" bigint NOT NULL DEFAULT '0', + "sort" int NOT NULL DEFAULT '0', + "leader_user_id" bigint DEFAULT NULL, + "phone" varchar(11) DEFAULT NULL, + "email" varchar(50) DEFAULT NULL, + "status" tinyint NOT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + "tenant_id" bigint not null default '0', + PRIMARY KEY ("id") +) COMMENT '部门表'; + +CREATE TABLE IF NOT EXISTS "sys_dict_data" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "sort" int NOT NULL DEFAULT '0', + "label" varchar(100) NOT NULL DEFAULT '', + "value" varchar(100) NOT NULL DEFAULT '', + "dict_type" varchar(100) NOT NULL DEFAULT '', + "status" tinyint NOT NULL DEFAULT '0', + "remark" varchar(500) DEFAULT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '字典数æ®è¡¨'; + +CREATE TABLE IF NOT EXISTS "sys_role" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "name" varchar(30) NOT NULL, + "code" varchar(100) NOT NULL, + "sort" int NOT NULL, + "data_scope" tinyint NOT NULL DEFAULT '1', + "data_scope_dept_ids" varchar(500) NOT NULL DEFAULT '', + "status" tinyint NOT NULL, + "type" tinyint NOT NULL, + "remark" varchar(500) DEFAULT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '角色信æ¯è¡¨'; + +CREATE TABLE IF NOT EXISTS "sys_role_menu" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "role_id" bigint NOT NULL, + "menu_id" bigint NOT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '角色和èœå•å…³è”表'; + +CREATE TABLE IF NOT EXISTS "sys_menu" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "name" varchar(50) NOT NULL, + "permission" varchar(100) NOT NULL DEFAULT '', + "menu_type" tinyint NOT NULL, + "sort" int NOT NULL DEFAULT '0', + "parent_id" bigint NOT NULL DEFAULT '0', + "path" varchar(200) DEFAULT '', + "icon" varchar(100) DEFAULT '#', + "component" varchar(255) DEFAULT NULL, + "status" tinyint NOT NULL DEFAULT '0', + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT 'èœå•æƒé™è¡¨'; + +CREATE TABLE IF NOT EXISTS "sys_user_role" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "user_id" bigint NOT NULL, + "role_id" bigint NOT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp DEFAULT NULL, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp DEFAULT NULL, + "deleted" bit DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '用户和角色关è”表'; + +CREATE TABLE IF NOT EXISTS "sys_dict_type" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "name" varchar(100) NOT NULL DEFAULT '', + "type" varchar(100) NOT NULL DEFAULT '', + "status" tinyint NOT NULL DEFAULT '0', + "remark" varchar(500) DEFAULT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '字典类型表'; + +CREATE TABLE IF NOT EXISTS `sys_user_session` ( + `id` varchar(32) NOT NULL, + `user_id` bigint DEFAULT NULL, + "user_type" tinyint NOT NULL, + `username` varchar(50) NOT NULL DEFAULT '', + `user_ip` varchar(50) DEFAULT NULL, + `user_agent` varchar(512) DEFAULT NULL, + `session_timeout` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updater` varchar(64) DEFAULT '' , + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + "tenant_id" bigint not null default '0', + PRIMARY KEY (`id`) +) COMMENT '用户在线 Session'; + +CREATE TABLE IF NOT EXISTS "sys_post" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "code" varchar(64) NOT NULL, + "name" varchar(50) NOT NULL, + "sort" integer NOT NULL, + "status" tinyint NOT NULL, + "remark" varchar(500) DEFAULT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + "tenant_id" bigint not null default '0', + PRIMARY KEY ("id") +) COMMENT 'å²—ä½ä¿¡æ¯è¡¨'; + +CREATE TABLE IF NOT EXISTS "sys_notice" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "title" varchar(50) NOT NULL COMMENT '公告标题', + "content" text NOT NULL COMMENT '公告内容', + "notice_type" tinyint NOT NULL COMMENT '公告类型(1通知 2公告)', + "status" tinyint NOT NULL DEFAULT '0' COMMENT '公告状æ€ï¼ˆ0正常 1关闭)', + "creator" varchar(64) DEFAULT '' COMMENT '创建者', + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + "updater" varchar(64) DEFAULT '' COMMENT '更新者', + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', + "deleted" bit NOT NULL DEFAULT 0 COMMENT '是å¦åˆ é™¤', + "tenant_id" bigint not null default '0', + PRIMARY KEY("id") +) COMMENT '通知公告表'; + +CREATE TABLE IF NOT EXISTS `sys_login_log` ( + `id` bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY, + `log_type` bigint(4) NOT NULL, + "user_id" bigint not null default '0', + "user_type" tinyint NOT NULL, + `trace_id` varchar(64) NOT NULL DEFAULT '', + `username` varchar(50) NOT NULL DEFAULT '', + `result` tinyint(4) NOT NULL, + `user_ip` varchar(50) NOT NULL, + `user_agent` varchar(512) NOT NULL, + `creator` varchar(64) DEFAULT '', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updater` varchar(64) DEFAULT '', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `deleted` bit(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) COMMENT ='系统访问记录'; + +CREATE TABLE IF NOT EXISTS `sys_operate_log` ( + `id` bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY, + `trace_id` varchar(64) NOT NULL DEFAULT '', + `user_id` bigint(20) NOT NULL, + `module` varchar(50) NOT NULL, + `name` varchar(50) NOT NULL, + `operate_type` bigint(4) NOT NULL DEFAULT '0', + `content` varchar(2000) NOT NULL DEFAULT '', + `exts` varchar(512) NOT NULL DEFAULT '', + `request_method` varchar(16) DEFAULT '', + `request_url` varchar(255) DEFAULT '', + `user_ip` varchar(50) DEFAULT NULL, + `user_agent` varchar(200) DEFAULT NULL, + `java_method` varchar(512) NOT NULL DEFAULT '', + `java_method_args` varchar(8000) DEFAULT '', + `start_time` datetime NOT NULL, + `duration` int(11) NOT NULL, + `result_code` int(11) NOT NULL DEFAULT '0', + `result_msg` varchar(512) DEFAULT '', + `result_data` varchar(4000) DEFAULT '', + `creator` varchar(64) DEFAULT '', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updater` varchar(64) DEFAULT '', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `deleted` bit(1) NOT NULL DEFAULT '0', + "tenant_id" bigint not null default '0', + PRIMARY KEY (`id`) +) COMMENT ='æ“作日志记录'; + +CREATE TABLE IF NOT EXISTS "sys_user" ( + "id" bigint not null GENERATED BY DEFAULT AS IDENTITY, + "username" varchar(30) not null, + "password" varchar(100) not null default '', + "nickname" varchar(30) not null, + "remark" varchar(500) default null, + "dept_id" bigint default null, + "post_ids" varchar(255) default null, + "email" varchar(50) default '', + "mobile" varchar(11) default '', + "sex" tinyint default '0', + "avatar" varchar(100) default '', + "status" tinyint not null default '0', + "login_ip" varchar(50) default '', + "login_date" timestamp default null, + "creator" varchar(64) default '', + "create_time" timestamp not null default current_timestamp, + "updater" varchar(64) default '', + "update_time" timestamp not null default current_timestamp, + "deleted" bit not null default false, + "tenant_id" bigint not null default '0', + primary key ("id") +) comment '用户信æ¯è¡¨'; + +CREATE TABLE IF NOT EXISTS "inf_api_access_log" ( + "id" bigint not null GENERATED BY DEFAULT AS IDENTITY, + "trace_id" varchar(64) not null default '', + "user_id" bigint not null default '0', + "user_type" tinyint not null default '0', + "application_name" varchar(50) not null, + "request_method" varchar(16) not null default '', + "request_url" varchar(255) not null default '', + "request_params" varchar(8000) not null default '', + "user_ip" varchar(50) not null, + "user_agent" varchar(512) not null, + "begin_time" timestamp not null, + "end_time" timestamp not null, + "duration" integer not null, + "result_code" integer not null default '0', + "result_msg" varchar(512) default '', + "creator" varchar(64) default '', + "create_time" timestamp not null default current_timestamp, + "updater" varchar(64) default '', + "update_time" timestamp not null default current_timestamp, + "deleted" bit not null default false, + "tenant_id" bigint not null default '0', + primary key ("id") +) COMMENT 'API 访问日志表'; + +CREATE TABLE IF NOT EXISTS "inf_api_error_log" ( + "id" bigint not null GENERATED BY DEFAULT AS IDENTITY, + "trace_id" varchar(64) not null, + "user_id" bigint not null default '0', + "user_type" tinyint not null default '0', + "application_name" varchar(50) not null, + "request_method" varchar(16) not null, + "request_url" varchar(255) not null, + "request_params" varchar(8000) not null, + "user_ip" varchar(50) not null, + "user_agent" varchar(512) not null, + "exception_time" timestamp not null, + "exception_name" varchar(128) not null default '', + "exception_message" clob not null, + "exception_root_cause_message" clob not null, + "exception_stack_trace" clob not null, + "exception_class_name" varchar(512) not null, + "exception_file_name" varchar(512) not null, + "exception_method_name" varchar(512) not null, + "exception_line_number" integer not null, + "process_status" tinyint not null, + "process_time" timestamp default null, + "process_user_id" bigint default '0', + "creator" varchar(64) default '', + "create_time" timestamp not null default current_timestamp, + "updater" varchar(64) default '', + "update_time" timestamp not null default current_timestamp, + "deleted" bit not null default false, + "tenant_id" bigint not null default '0', + primary key ("id") +) COMMENT '系统异常日志'; + +CREATE TABLE IF NOT EXISTS "sys_sms_channel" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "signature" varchar(10) NOT NULL, + "code" varchar(63) NOT NULL, + "status" tinyint NOT NULL, + "remark" varchar(255) DEFAULT NULL, + "api_key" varchar(63) NOT NULL, + "api_secret" varchar(63) DEFAULT NULL, + "callback_url" varchar(255) DEFAULT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '短信渠é“'; + +CREATE TABLE IF NOT EXISTS "sys_sms_template" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "type" tinyint NOT NULL, + "status" tinyint NOT NULL, + "code" varchar(63) NOT NULL, + "name" varchar(63) NOT NULL, + "content" varchar(255) NOT NULL, + "params" varchar(255) NOT NULL, + "remark" varchar(255) DEFAULT NULL, + "api_template_id" varchar(63) NOT NULL, + "channel_id" bigint NOT NULL, + "channel_code" varchar(63) NOT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '短信模æ¿'; + +CREATE TABLE IF NOT EXISTS "sys_sms_log" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "channel_id" bigint NOT NULL, + "channel_code" varchar(63) NOT NULL, + "template_id" bigint NOT NULL, + "template_code" varchar(63) NOT NULL, + "template_type" tinyint NOT NULL, + "template_content" varchar(255) NOT NULL, + "template_params" varchar(255) NOT NULL, + "api_template_id" varchar(63) NOT NULL, + "mobile" varchar(11) NOT NULL, + "user_id" bigint DEFAULT '0', + "user_type" tinyint DEFAULT '0', + "send_status" tinyint NOT NULL DEFAULT '0', + "send_time" timestamp DEFAULT NULL, + "send_code" int DEFAULT NULL, + "send_msg" varchar(255) DEFAULT NULL, + "api_send_code" varchar(63) DEFAULT NULL, + "api_send_msg" varchar(255) DEFAULT NULL, + "api_request_id" varchar(255) DEFAULT NULL, + "api_serial_no" varchar(255) DEFAULT NULL, + "receive_status" tinyint NOT NULL DEFAULT '0', + "receive_time" timestamp DEFAULT NULL, + "api_receive_code" varchar(63) DEFAULT NULL, + "api_receive_msg" varchar(255) DEFAULT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '短信日志'; + +CREATE TABLE IF NOT EXISTS "sys_error_code" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "type" tinyint NOT NULL DEFAULT '0', + "application_name" varchar(50) NOT NULL, + "code" int NOT NULL DEFAULT '0', + "message" varchar(512) NOT NULL DEFAULT '', + "memo" varchar(512) DEFAULT '', + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '错误ç è¡¨'; + +CREATE TABLE IF NOT EXISTS "sys_social_user" ( + "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "user_id" bigint NOT NULL, + "user_type" tinyint NOT NULL DEFAULT '0', + "type" tinyint NOT NULL, + "openid" varchar(32) NOT NULL, + "token" varchar(256) DEFAULT NULL, + "union_id" varchar(32) NOT NULL, + "raw_token_info" varchar(1024) NOT NULL, + "nickname" varchar(32) NOT NULL, + "avatar" varchar(255) DEFAULT NULL, + "raw_user_info" varchar(1024) NOT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '社交用户'; + +CREATE TABLE IF NOT EXISTS "sys_tenant" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "name" varchar(63) NOT NULL, + "contact_name" varchar(255) NOT NULL, + "contact_mobile" varchar(255), + "status" tinyint NOT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '租户'; + + +CREATE TABLE IF NOT EXISTS "pay_merchant" +( + "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "no" varchar(32) NOT NULL, + "name" varchar(64) NOT NULL, + "short_name" varchar(64) NOT NULL, + "status" tinyint NOT NULL, + "remark" varchar(255) DEFAULT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + "deleted" bit(1) NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '支付商户信æ¯'; + +-- bpm 开头的 DB + +CREATE TABLE IF NOT EXISTS "pay_app" ( + "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "name" varchar(64) NOT NULL, + "status" tinyint NOT NULL, + "remark" varchar(255) DEFAULT NULL, + `pay_notify_url` varchar(1024) NOT NULL, + `refund_notify_url` varchar(1024) NOT NULL, + `merchant_id` bigint(20) NOT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + "deleted" bit(1) NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT = '支付应用信æ¯'; + +CREATE TABLE IF NOT EXISTS "pay_channel" ( + "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "code" varchar(32) NOT NULL, + "status" tinyint(4) NOT NULL, + "remark" varchar(255) DEFAULT NULL, + "fee_rate" double NOT NULL DEFAULT 0, + "merchant_id" bigint(20) NOT NULL, + "app_id" bigint(20) NOT NULL, + "config" varchar(10240) NOT NULL, + "creator" varchar(64) NULL DEFAULT '', + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) NULL DEFAULT '', + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + "deleted" bit(1) NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT = '支付渠é“'; + +CREATE TABLE IF NOT EXISTS `pay_order` ( + "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, + `merchant_id` bigint(20) NOT NULL, + `app_id` bigint(20) NOT NULL, + `channel_id` bigint(20) DEFAULT NULL, + `channel_code` varchar(32) DEFAULT NULL, + `merchant_order_id` varchar(64) NOT NULL, + `subject` varchar(32) NOT NULL, + `body` varchar(128) NOT NULL, + `notify_url` varchar(1024) NOT NULL, + `notify_status` tinyint(4) NOT NULL, + `amount` bigint(20) NOT NULL, + `channel_fee_rate` double DEFAULT 0, + `channel_fee_amount` bigint(20) DEFAULT 0, + `status` tinyint(4) NOT NULL, + `user_ip` varchar(50) NOT NULL, + `expire_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP, + `success_time` datetime(0) DEFAULT CURRENT_TIMESTAMP, + `notify_time` datetime(0) DEFAULT CURRENT_TIMESTAMP, + `success_extension_id` bigint(20) DEFAULT NULL COMMENT '支付æˆåŠŸçš„è®¢å•æ‹“展å•ç¼–å·', + `refund_status` tinyint(4) NOT NULL, + `refund_times` tinyint(4) NOT NULL, + `refund_amount` bigint(20) NOT NULL, + `channel_user_id` varchar(255) DEFAULT NULL, + `channel_order_no` varchar(64) DEFAULT NULL, + `creator` varchar(64) DEFAULT '', + `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updater` varchar(64) DEFAULT '', + `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `deleted` bit(1) NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT = '支付订å•'; + +CREATE TABLE IF NOT EXISTS `pay_refund` ( + "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, + `merchant_id` bigint(20) NOT NULL, + `app_id` bigint(20) NOT NULL, + `channel_id` bigint(20) NOT NULL, + `channel_code` varchar(32) NOT NULL, + `order_id` bigint(20) NOT NULL, + `trade_no` varchar(64) NOT NULL, + `merchant_order_id` varchar(64) NOT NULL, + `merchant_refund_no` varchar(64) NOT NULL, + `notify_url` varchar(1024) NOT NULL, + `notify_status` tinyint(4) NOT NULL, + `status` tinyint(4) NOT NULL, + `type` tinyint(4) NOT NULL, + `pay_amount` bigint(20) NOT NULL, + `refund_amount` bigint(20) NOT NULL, + `reason` varchar(256) NOT NULL, + `user_ip` varchar(50) NULL DEFAULT NULL, + `channel_order_no` varchar(64) NOT NULL, + `channel_refund_no` varchar(64) NULL DEFAULT NULL, + `channel_error_code` varchar(128) NULL DEFAULT NULL, + `channel_error_msg` varchar(256) NULL DEFAULT NULL, + `channel_extras` varchar(1024) NULL DEFAULT NULL, + `expire_time` datetime(0) NULL DEFAULT NULL, + `success_time` datetime(0) NULL DEFAULT NULL, + `notify_time` datetime(0) NULL DEFAULT NULL, + `creator` varchar(64) NULL DEFAULT '', + `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updater` varchar(64) NULL DEFAULT '', + `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `deleted` bit(1) NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT = '退款订å•'; + +-- bpm 开头的 DB + +CREATE TABLE IF NOT EXISTS "bpm_form" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "name" varchar(63) NOT NULL, + "status" tinyint NOT NULL, + "fields" varchar(255) NOT NULL, + "conf" varchar(255) NOT NULL, + "remark" varchar(255), + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '动æ€è¡¨å•'; + +CREATE TABLE IF NOT EXISTS "bpm_user_group" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "name" varchar(63) NOT NULL, + "description" varchar(255) NOT NULL, + "status" tinyint NOT NULL, + "member_user_ids" varchar(255) NOT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") + ) COMMENT '用户组'; From afa0d623dba39989d66e03dbc1e7359076583fd5 Mon Sep 17 00:00:00 2001 From: jason <2667446@qq.com> Date: Thu, 27 Jan 2022 22:08:34 +0800 Subject: [PATCH 04/47] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20bpm-core-service=20?= =?UTF-8?q?=E5=A4=9A=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 22 + yudao-admin-server/pom.xml | 5 +- yudao-dependencies/pom.xml | 7 +- .../yudao-module-bpm-activiti/pom.xml | 5 +- .../bpm/enums/BpmErrorCodeConstants.java | 4 - .../config/BpmActivitiConfiguration.java | 7 +- .../behavior/BpmActivityBehaviorFactory.java | 6 +- .../behavior/BpmUserTaskActivitiBehavior.java | 10 +- .../impl/BpmTaskAssignRuleServiceImpl.java | 9 +- .../BpmUserTaskActivitiBehaviorTest.java | 12 +- .../src/test/resources/sql/clean.sql | 36 -- .../src/test/resources/sql/create_tables.sql | 608 ------------------ .../yudao-module-bpm-core-service/pom.xml | 6 +- .../yudao-module-bpm-core-service-api/pom.xml | 20 + .../bpm/api/group/BpmUserGroupServiceApi.java | 32 + .../bpm/api/group/dto/BpmUserGroupDTO.java | 17 + .../pom.xml | 35 + .../bpm/api/BpmUserGroupServiceApiImpl.java | 61 ++ .../definition/BpmUserGroupController.java | 0 .../vo/group/BpmUserGroupBaseVO.java | 0 .../vo/group/BpmUserGroupCreateReqVO.java | 0 .../vo/group/BpmUserGroupPageReqVO.java | 15 +- .../vo/group/BpmUserGroupRespVO.java | 0 .../vo/group/BpmUserGroupSimpleRespVO.java | 0 .../vo/group/BpmUserGroupUpdateReqVO.java | 0 .../definition/BpmUserGroupConvert.java | 3 + .../dataobject/definition/BpmUserGroupDO.java | 0 .../mysql/definition/BpmUserGroupMapper.java | 0 .../bpm/enums/BpmErrorCodeConstants.java | 10 + .../definition/BpmUserGroupService.java | 18 - .../impl/BpmUserGroupServiceImpl.java | 27 +- .../yudao/adminserver/BaseDbUnitTest.java | 39 ++ .../definition/BpmUserGroupServiceTest.java | 41 +- .../test/resources/application-unit-test.yaml | 38 ++ .../src/test/resources/application.yaml | 35 + .../src/test/resources/logback-spring.xml | 4 + .../src/test/resources/sql/clean.sql | 2 + .../src/test/resources/sql/create_tables.sql | 14 + 38 files changed, 401 insertions(+), 747 deletions(-) create mode 100644 yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/pom.xml create mode 100644 yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/BpmUserGroupServiceApi.java create mode 100644 yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/dto/BpmUserGroupDTO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/pom.xml create mode 100644 yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmUserGroupServiceApiImpl.java rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmUserGroupController.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupBaseVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupCreateReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupPageReqVO.java (63%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupRespVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupSimpleRespVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupUpdateReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmUserGroupConvert.java (89%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmUserGroupDO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmUserGroupMapper.java (100%) create mode 100644 yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupService.java (79%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmUserGroupServiceImpl.java (76%) create mode 100644 yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl}/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupServiceTest.java (73%) create mode 100644 yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/application-unit-test.yaml create mode 100644 yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/application.yaml create mode 100644 yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/logback-spring.xml create mode 100644 yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/sql/clean.sql create mode 100644 yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/sql/create_tables.sql diff --git a/pom.xml b/pom.xml index 4b7c953e40..61e1b33791 100644 --- a/pom.xml +++ b/pom.xml @@ -27,6 +27,9 @@ ${java.version} ${java.version} 3.0.0-M5 + 3.8.0 + 1.18.20 + 1.4.1.Final UTF-8 @@ -52,6 +55,25 @@ maven-surefire-plugin ${maven-surefire-plugin.version} + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + + + org.projectlombok + lombok + ${lombok.version} + + + org.mapstruct + mapstruct-processor + ${mapstruct.version} + + + + diff --git a/yudao-admin-server/pom.xml b/yudao-admin-server/pom.xml index 3553b38b2e..be72f792f9 100644 --- a/yudao-admin-server/pom.xml +++ b/yudao-admin-server/pom.xml @@ -49,7 +49,10 @@ cn.iocoder.boot yudao-module-bpm-activiti - + + cn.iocoder.boot + yudao-module-bpm-core-service-impl + cn.iocoder.boot diff --git a/yudao-dependencies/pom.xml b/yudao-dependencies/pom.xml index 7aa40966b8..512fefdc3f 100644 --- a/yudao-dependencies/pom.xml +++ b/yudao-dependencies/pom.xml @@ -410,7 +410,12 @@ cn.iocoder.boot - yudao-module-bpm-core-service + yudao-module-bpm-core-service-impl + ${revision} + + + cn.iocoder.boot + yudao-module-bpm-core-service-api ${revision} diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/pom.xml b/yudao-module-bpm/yudao-module-bpm-activiti/pom.xml index 775bdf6c04..a131ab0890 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/pom.xml +++ b/yudao-module-bpm/yudao-module-bpm-activiti/pom.xml @@ -19,6 +19,10 @@ cn.iocoder.boot yudao-core-service + + cn.iocoder.boot + yudao-module-bpm-core-service-api + cn.iocoder.boot @@ -26,5 +30,4 @@ test - \ No newline at end of file diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java index e2a0ff3d7a..771a04f5e7 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java @@ -57,8 +57,4 @@ public interface BpmErrorCodeConstants { ErrorCode FORM_NOT_EXISTS = new ErrorCode(1009010000, "动æ€è¡¨å•ä¸å­˜åœ¨"); ErrorCode FORM_FIELD_REPEAT = new ErrorCode(1009010000, "表å•项({}) å’Œ ({}) 使用了相åŒçš„字段å({})"); - // ========== ç”¨æˆ·ç»„æ¨¡å— 1-009-011-000 ========== - ErrorCode USER_GROUP_NOT_EXISTS = new ErrorCode(1009011000, "用户组ä¸å­˜åœ¨"); - ErrorCode USER_GROUP_IS_DISABLE = new ErrorCode(1009011001, "å字为ã€{}】的用户组已被ç¦ç”¨"); - } diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java index 4e0938d462..72210a3af2 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java @@ -6,11 +6,10 @@ import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event.Bp import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.identity.EmptyUserGroupManager; import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.listener.BpmTackActivitiEventListener; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmUserGroupService; +import cn.iocoder.yudao.coreservice.modules.bpm.api.group.BpmUserGroupServiceApi; import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; import cn.iocoder.yudao.coreservice.modules.system.service.permission.SysPermissionCoreService; import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; -import org.activiti.api.runtime.shared.identity.UserGroupManager; import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer; import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.annotation.Bean; @@ -60,14 +59,14 @@ public class BpmActivitiConfiguration { public BpmActivityBehaviorFactory bpmActivityBehaviorFactory(BpmTaskAssignRuleService taskRuleService, SysPermissionCoreService permissionCoreService, SysDeptCoreService deptCoreService, - BpmUserGroupService userGroupService, + BpmUserGroupServiceApi userGroupServiceApi, SysUserCoreService userCoreService, List scripts) { BpmActivityBehaviorFactory bpmActivityBehaviorFactory = new BpmActivityBehaviorFactory(); bpmActivityBehaviorFactory.setBpmTaskRuleService(taskRuleService); bpmActivityBehaviorFactory.setPermissionCoreService(permissionCoreService); bpmActivityBehaviorFactory.setDeptCoreService(deptCoreService); - bpmActivityBehaviorFactory.setUserGroupService(userGroupService); + bpmActivityBehaviorFactory.setUserGroupServiceApi(userGroupServiceApi); bpmActivityBehaviorFactory.setUserCoreService(userCoreService); bpmActivityBehaviorFactory.setScripts(scripts); return bpmActivityBehaviorFactory; diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java index 2107fb72b4..c426a23ee7 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavio import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmUserGroupService; +import cn.iocoder.yudao.coreservice.modules.bpm.api.group.BpmUserGroupServiceApi; import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; import cn.iocoder.yudao.coreservice.modules.system.service.permission.SysPermissionCoreService; import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; @@ -34,7 +34,7 @@ public class BpmActivityBehaviorFactory extends DefaultActivityBehaviorFactory { @Setter private SysDeptCoreService deptCoreService; @Setter - private BpmUserGroupService userGroupService; + private BpmUserGroupServiceApi userGroupServiceApi; @Setter private SysUserCoreService userCoreService; @Setter @@ -46,7 +46,7 @@ public class BpmActivityBehaviorFactory extends DefaultActivityBehaviorFactory { userTaskActivityBehavior.setBpmTaskRuleService(bpmTaskRuleService); userTaskActivityBehavior.setPermissionCoreService(permissionCoreService); userTaskActivityBehavior.setDeptCoreService(deptCoreService); - userTaskActivityBehavior.setUserGroupService(userGroupService); + userTaskActivityBehavior.setUserGroupServiceApi(userGroupServiceApi); userTaskActivityBehavior.setSysUserCoreService(userCoreService); userTaskActivityBehavior.setScripts(scripts); return userTaskActivityBehavior; diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java index 69624d793d..e2beba8e03 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java @@ -4,11 +4,11 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmUserGroupDO; import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmTaskAssignRuleTypeEnum; import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmUserGroupService; +import cn.iocoder.yudao.coreservice.modules.bpm.api.group.BpmUserGroupServiceApi; +import cn.iocoder.yudao.coreservice.modules.bpm.api.group.dto.BpmUserGroupDTO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; @@ -30,7 +30,7 @@ import java.util.*; import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.TASK_ASSIGN_SCRIPT_NOT_EXISTS; import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.TASK_CREATE_FAIL_NO_CANDIDATE_USER; -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.*; +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString; @@ -53,7 +53,7 @@ public class BpmUserTaskActivitiBehavior extends UserTaskActivityBehavior { @Setter private SysDeptCoreService deptCoreService; @Setter - private BpmUserGroupService userGroupService; + private BpmUserGroupServiceApi userGroupServiceApi; @Setter private SysUserCoreService sysUserCoreService; /** @@ -156,7 +156,7 @@ public class BpmUserTaskActivitiBehavior extends UserTaskActivityBehavior { } private Set calculateTaskCandidateUsersByUserGroup(TaskEntity task, BpmTaskAssignRuleDO rule) { - List userGroups = userGroupService.getUserGroupList(rule.getOptions()); + List userGroups = userGroupServiceApi.getUserGroupList(rule.getOptions()); Set userIds = new HashSet<>(); userGroups.forEach(bpmUserGroupDO -> userIds.addAll(bpmUserGroupDO.getMemberUserIds())); return userIds; diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java index 82afa944c0..dac572f1a1 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java @@ -1,8 +1,6 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.definition.impl; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.collection.ListUtil; -import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleCreateReqVO; @@ -15,8 +13,7 @@ import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmTaskAssignRu import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmModelService; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmUserGroupService; - +import cn.iocoder.yudao.coreservice.modules.bpm.api.group.BpmUserGroupServiceApi; import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysPostCoreService; @@ -65,7 +62,7 @@ public class BpmTaskAssignRuleServiceImpl implements BpmTaskAssignRuleService { @Resource private SysUserCoreService userCoreService; @Resource - private BpmUserGroupService userGroupService; + private BpmUserGroupServiceApi userGroupServiceApi; @Resource private SysDictDataCoreService dictDataCoreService; @@ -191,7 +188,7 @@ public class BpmTaskAssignRuleServiceImpl implements BpmTaskAssignRuleService { } else if (Objects.equals(type, BpmTaskAssignRuleTypeEnum.USER.getType())) { userCoreService.validUsers(options); } else if (Objects.equals(type, BpmTaskAssignRuleTypeEnum.USER_GROUP.getType())) { - userGroupService.validUserGroups(options); + userGroupServiceApi.validUserGroups(options); } else if (Objects.equals(type, BpmTaskAssignRuleTypeEnum.SCRIPT.getType())) { dictDataCoreService.validDictDatas(SysDictTypeConstants.BPM_TASK_ASSIGN_SCRIPT, CollectionUtils.convertSet(options, String::valueOf)); diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java index 8212b28c08..b9b9a1475b 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java @@ -2,12 +2,12 @@ package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavio import cn.hutool.core.map.MapUtil; import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmUserGroupDO; import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmTaskAssignRuleTypeEnum; import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmTaskRuleScriptEnum; import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmUserGroupService; +import cn.iocoder.yudao.coreservice.modules.bpm.api.group.BpmUserGroupServiceApi; +import cn.iocoder.yudao.coreservice.modules.bpm.api.group.dto.BpmUserGroupDTO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; @@ -44,7 +44,7 @@ public class BpmUserTaskActivitiBehaviorTest extends BaseMockitoUnitTest { @Mock private SysDeptCoreService deptCoreService; @Mock - private BpmUserGroupService userGroupService; + private BpmUserGroupServiceApi userGroupServiceApi; @Mock private SysUserCoreService userCoreService; @@ -135,9 +135,9 @@ public class BpmUserTaskActivitiBehaviorTest extends BaseMockitoUnitTest { BpmTaskAssignRuleDO rule = new BpmTaskAssignRuleDO().setOptions(asSet(1L, 2L)) .setType(BpmTaskAssignRuleTypeEnum.USER_GROUP.getType()); // mock 方法 - BpmUserGroupDO userGroup1 = randomPojo(BpmUserGroupDO.class, o -> o.setMemberUserIds(asSet(11L, 12L))); - BpmUserGroupDO userGroup2 = randomPojo(BpmUserGroupDO.class, o -> o.setMemberUserIds(asSet(21L, 22L))); - when(userGroupService.getUserGroupList(eq(rule.getOptions()))).thenReturn(Arrays.asList(userGroup1, userGroup2)); + BpmUserGroupDTO userGroup1 = randomPojo(BpmUserGroupDTO.class, o -> o.setMemberUserIds(asSet(11L, 12L))); + BpmUserGroupDTO userGroup2 = randomPojo(BpmUserGroupDTO.class, o -> o.setMemberUserIds(asSet(21L, 22L))); + when(userGroupServiceApi.getUserGroupList(eq(rule.getOptions()))).thenReturn(Arrays.asList(userGroup1, userGroup2)); mockGetUserMap(asSet(11L, 12L, 21L, 22L)); // 调用 diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/sql/clean.sql b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/sql/clean.sql index b565553f24..c14acfe995 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/sql/clean.sql +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/sql/clean.sql @@ -1,38 +1,2 @@ --- inf 开头的 DB -DELETE FROM "inf_config"; -DELETE FROM "inf_file"; -DELETE FROM "inf_job"; -DELETE FROM "inf_job_log"; -DELETE FROM "inf_api_access_log"; -DELETE FROM "inf_api_error_log"; - --- sys 开头的 DB -DELETE FROM "sys_dept"; -DELETE FROM "sys_dict_data"; -DELETE FROM "sys_role"; -DELETE FROM "sys_role_menu"; -DELETE FROM "sys_menu"; -DELETE FROM "sys_user_role"; -DELETE FROM "sys_dict_type"; -DELETE FROM "sys_user_session"; -DELETE FROM "sys_post"; -DELETE FROM "sys_login_log"; -DELETE FROM "sys_operate_log"; -DELETE FROM "sys_user"; -DELETE FROM "sys_sms_channel"; -DELETE FROM "sys_sms_template"; -DELETE FROM "sys_sms_log"; -DELETE FROM "sys_error_code"; -DELETE FROM "sys_social_user"; -DELETE FROM "sys_tenant"; - --- pay 开头的 DB -DELETE FROM pay_merchant; -DELETE FROM pay_app; -DELETE FROM pay_channel; -DELETE FROM pay_order; -DELETE FROM pay_refund; - -- bpm 开头的 DB DELETE FROM "bpm_form"; -DELETE FROM "bpm_user_group"; diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/sql/create_tables.sql b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/sql/create_tables.sql index 9b2f0d69f1..8b6433e698 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/sql/create_tables.sql +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/sql/create_tables.sql @@ -1,597 +1,3 @@ --- inf 开头的 DB - -CREATE TABLE IF NOT EXISTS "inf_config" ( - "id" bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "group" varchar(50) NOT NULL, - "type" tinyint NOT NULL, - "name" varchar(100) NOT NULL DEFAULT '', - "key" varchar(100) NOT NULL DEFAULT '', - "value" varchar(500) NOT NULL DEFAULT '', - "sensitive" bit NOT NULL, - "remark" varchar(500) DEFAULT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '傿•°é…置表'; - -CREATE TABLE IF NOT EXISTS "inf_file" ( - "id" varchar(188) NOT NULL, - "type" varchar(63) DEFAULT NULL, - "content" blob NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint not null default '0', - PRIMARY KEY ("id") -) COMMENT '文件表'; - -CREATE TABLE IF NOT EXISTS "inf_job" ( - "id" bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY COMMENT '任务编å·', - "name" varchar(32) NOT NULL COMMENT '任务åç§°', - "status" tinyint(4) NOT NULL COMMENT '任务状æ€', - "handler_name" varchar(64) NOT NULL COMMENT '处ç†å™¨çš„åå­—', - "handler_param" varchar(255) DEFAULT NULL COMMENT '处ç†å™¨çš„傿•°', - "cron_expression" varchar(32) NOT NULL COMMENT 'CRON 表达å¼', - "retry_count" int(11) NOT NULL DEFAULT '0' COMMENT 'é‡è¯•次数', - "retry_interval" int(11) NOT NULL DEFAULT '0' COMMENT 'é‡è¯•é—´éš”', - "monitor_timeout" int(11) NOT NULL DEFAULT '0' COMMENT '监控超时时间', - "creator" varchar(64) DEFAULT '' COMMENT '创建者', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - "updater" varchar(64) DEFAULT '' COMMENT '更新者', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', - "deleted" bit NOT NULL DEFAULT FALSE COMMENT '是å¦åˆ é™¤', - PRIMARY KEY ("id") -) COMMENT='定时任务表'; - -CREATE TABLE IF NOT EXISTS "inf_job_log" ( - "id" bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY COMMENT '日志编å·', - "job_id" bigint(20) NOT NULL COMMENT '任务编å·', - "handler_name" varchar(64) NOT NULL COMMENT '处ç†å™¨çš„åå­—', - "handler_param" varchar(255) DEFAULT NULL COMMENT '处ç†å™¨çš„傿•°', - "execute_index" tinyint(4) NOT NULL DEFAULT '1' COMMENT '第几次执行', - "begin_time" datetime NOT NULL COMMENT '开始执行时间', - "end_time" datetime DEFAULT NULL COMMENT 'ç»“æŸæ‰§è¡Œæ—¶é—´', - "duration" int(11) DEFAULT NULL COMMENT '执行时长', - "status" tinyint(4) NOT NULL COMMENT '任务状æ€', - "result" varchar(4000) DEFAULT '' COMMENT '结果数æ®', - "creator" varchar(64) DEFAULT '' COMMENT '创建者', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - "updater" varchar(64) DEFAULT '' COMMENT '更新者', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', - "deleted" bit(1) NOT NULL DEFAULT FALSE COMMENT '是å¦åˆ é™¤', - PRIMARY KEY ("id") -)COMMENT='定时任务日志表'; - --- sys 开头的 DB - -CREATE TABLE IF NOT EXISTS "sys_dept" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar(30) NOT NULL DEFAULT '', - "parent_id" bigint NOT NULL DEFAULT '0', - "sort" int NOT NULL DEFAULT '0', - "leader_user_id" bigint DEFAULT NULL, - "phone" varchar(11) DEFAULT NULL, - "email" varchar(50) DEFAULT NULL, - "status" tinyint NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint not null default '0', - PRIMARY KEY ("id") -) COMMENT '部门表'; - -CREATE TABLE IF NOT EXISTS "sys_dict_data" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "sort" int NOT NULL DEFAULT '0', - "label" varchar(100) NOT NULL DEFAULT '', - "value" varchar(100) NOT NULL DEFAULT '', - "dict_type" varchar(100) NOT NULL DEFAULT '', - "status" tinyint NOT NULL DEFAULT '0', - "remark" varchar(500) DEFAULT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '字典数æ®è¡¨'; - -CREATE TABLE IF NOT EXISTS "sys_role" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar(30) NOT NULL, - "code" varchar(100) NOT NULL, - "sort" int NOT NULL, - "data_scope" tinyint NOT NULL DEFAULT '1', - "data_scope_dept_ids" varchar(500) NOT NULL DEFAULT '', - "status" tinyint NOT NULL, - "type" tinyint NOT NULL, - "remark" varchar(500) DEFAULT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '角色信æ¯è¡¨'; - -CREATE TABLE IF NOT EXISTS "sys_role_menu" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "role_id" bigint NOT NULL, - "menu_id" bigint NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '角色和èœå•å…³è”表'; - -CREATE TABLE IF NOT EXISTS "sys_menu" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar(50) NOT NULL, - "permission" varchar(100) NOT NULL DEFAULT '', - "menu_type" tinyint NOT NULL, - "sort" int NOT NULL DEFAULT '0', - "parent_id" bigint NOT NULL DEFAULT '0', - "path" varchar(200) DEFAULT '', - "icon" varchar(100) DEFAULT '#', - "component" varchar(255) DEFAULT NULL, - "status" tinyint NOT NULL DEFAULT '0', - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT 'èœå•æƒé™è¡¨'; - -CREATE TABLE IF NOT EXISTS "sys_user_role" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "user_id" bigint NOT NULL, - "role_id" bigint NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp DEFAULT NULL, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp DEFAULT NULL, - "deleted" bit DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '用户和角色关è”表'; - -CREATE TABLE IF NOT EXISTS "sys_dict_type" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar(100) NOT NULL DEFAULT '', - "type" varchar(100) NOT NULL DEFAULT '', - "status" tinyint NOT NULL DEFAULT '0', - "remark" varchar(500) DEFAULT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '字典类型表'; - -CREATE TABLE IF NOT EXISTS `sys_user_session` ( - `id` varchar(32) NOT NULL, - `user_id` bigint DEFAULT NULL, - "user_type" tinyint NOT NULL, - `username` varchar(50) NOT NULL DEFAULT '', - `user_ip` varchar(50) DEFAULT NULL, - `user_agent` varchar(512) DEFAULT NULL, - `session_timeout` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updater` varchar(64) DEFAULT '' , - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint not null default '0', - PRIMARY KEY (`id`) -) COMMENT '用户在线 Session'; - -CREATE TABLE IF NOT EXISTS "sys_post" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "code" varchar(64) NOT NULL, - "name" varchar(50) NOT NULL, - "sort" integer NOT NULL, - "status" tinyint NOT NULL, - "remark" varchar(500) DEFAULT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint not null default '0', - PRIMARY KEY ("id") -) COMMENT 'å²—ä½ä¿¡æ¯è¡¨'; - -CREATE TABLE IF NOT EXISTS "sys_notice" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "title" varchar(50) NOT NULL COMMENT '公告标题', - "content" text NOT NULL COMMENT '公告内容', - "notice_type" tinyint NOT NULL COMMENT '公告类型(1通知 2公告)', - "status" tinyint NOT NULL DEFAULT '0' COMMENT '公告状æ€ï¼ˆ0正常 1关闭)', - "creator" varchar(64) DEFAULT '' COMMENT '创建者', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - "updater" varchar(64) DEFAULT '' COMMENT '更新者', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', - "deleted" bit NOT NULL DEFAULT 0 COMMENT '是å¦åˆ é™¤', - "tenant_id" bigint not null default '0', - PRIMARY KEY("id") -) COMMENT '通知公告表'; - -CREATE TABLE IF NOT EXISTS `sys_login_log` ( - `id` bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY, - `log_type` bigint(4) NOT NULL, - "user_id" bigint not null default '0', - "user_type" tinyint NOT NULL, - `trace_id` varchar(64) NOT NULL DEFAULT '', - `username` varchar(50) NOT NULL DEFAULT '', - `result` tinyint(4) NOT NULL, - `user_ip` varchar(50) NOT NULL, - `user_agent` varchar(512) NOT NULL, - `creator` varchar(64) DEFAULT '', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updater` varchar(64) DEFAULT '', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `deleted` bit(1) NOT NULL DEFAULT '0', - PRIMARY KEY (`id`) -) COMMENT ='系统访问记录'; - -CREATE TABLE IF NOT EXISTS `sys_operate_log` ( - `id` bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY, - `trace_id` varchar(64) NOT NULL DEFAULT '', - `user_id` bigint(20) NOT NULL, - `module` varchar(50) NOT NULL, - `name` varchar(50) NOT NULL, - `operate_type` bigint(4) NOT NULL DEFAULT '0', - `content` varchar(2000) NOT NULL DEFAULT '', - `exts` varchar(512) NOT NULL DEFAULT '', - `request_method` varchar(16) DEFAULT '', - `request_url` varchar(255) DEFAULT '', - `user_ip` varchar(50) DEFAULT NULL, - `user_agent` varchar(200) DEFAULT NULL, - `java_method` varchar(512) NOT NULL DEFAULT '', - `java_method_args` varchar(8000) DEFAULT '', - `start_time` datetime NOT NULL, - `duration` int(11) NOT NULL, - `result_code` int(11) NOT NULL DEFAULT '0', - `result_msg` varchar(512) DEFAULT '', - `result_data` varchar(4000) DEFAULT '', - `creator` varchar(64) DEFAULT '', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updater` varchar(64) DEFAULT '', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `deleted` bit(1) NOT NULL DEFAULT '0', - "tenant_id" bigint not null default '0', - PRIMARY KEY (`id`) -) COMMENT ='æ“作日志记录'; - -CREATE TABLE IF NOT EXISTS "sys_user" ( - "id" bigint not null GENERATED BY DEFAULT AS IDENTITY, - "username" varchar(30) not null, - "password" varchar(100) not null default '', - "nickname" varchar(30) not null, - "remark" varchar(500) default null, - "dept_id" bigint default null, - "post_ids" varchar(255) default null, - "email" varchar(50) default '', - "mobile" varchar(11) default '', - "sex" tinyint default '0', - "avatar" varchar(100) default '', - "status" tinyint not null default '0', - "login_ip" varchar(50) default '', - "login_date" timestamp default null, - "creator" varchar(64) default '', - "create_time" timestamp not null default current_timestamp, - "updater" varchar(64) default '', - "update_time" timestamp not null default current_timestamp, - "deleted" bit not null default false, - "tenant_id" bigint not null default '0', - primary key ("id") -) comment '用户信æ¯è¡¨'; - -CREATE TABLE IF NOT EXISTS "inf_api_access_log" ( - "id" bigint not null GENERATED BY DEFAULT AS IDENTITY, - "trace_id" varchar(64) not null default '', - "user_id" bigint not null default '0', - "user_type" tinyint not null default '0', - "application_name" varchar(50) not null, - "request_method" varchar(16) not null default '', - "request_url" varchar(255) not null default '', - "request_params" varchar(8000) not null default '', - "user_ip" varchar(50) not null, - "user_agent" varchar(512) not null, - "begin_time" timestamp not null, - "end_time" timestamp not null, - "duration" integer not null, - "result_code" integer not null default '0', - "result_msg" varchar(512) default '', - "creator" varchar(64) default '', - "create_time" timestamp not null default current_timestamp, - "updater" varchar(64) default '', - "update_time" timestamp not null default current_timestamp, - "deleted" bit not null default false, - "tenant_id" bigint not null default '0', - primary key ("id") -) COMMENT 'API 访问日志表'; - -CREATE TABLE IF NOT EXISTS "inf_api_error_log" ( - "id" bigint not null GENERATED BY DEFAULT AS IDENTITY, - "trace_id" varchar(64) not null, - "user_id" bigint not null default '0', - "user_type" tinyint not null default '0', - "application_name" varchar(50) not null, - "request_method" varchar(16) not null, - "request_url" varchar(255) not null, - "request_params" varchar(8000) not null, - "user_ip" varchar(50) not null, - "user_agent" varchar(512) not null, - "exception_time" timestamp not null, - "exception_name" varchar(128) not null default '', - "exception_message" clob not null, - "exception_root_cause_message" clob not null, - "exception_stack_trace" clob not null, - "exception_class_name" varchar(512) not null, - "exception_file_name" varchar(512) not null, - "exception_method_name" varchar(512) not null, - "exception_line_number" integer not null, - "process_status" tinyint not null, - "process_time" timestamp default null, - "process_user_id" bigint default '0', - "creator" varchar(64) default '', - "create_time" timestamp not null default current_timestamp, - "updater" varchar(64) default '', - "update_time" timestamp not null default current_timestamp, - "deleted" bit not null default false, - "tenant_id" bigint not null default '0', - primary key ("id") -) COMMENT '系统异常日志'; - -CREATE TABLE IF NOT EXISTS "sys_sms_channel" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "signature" varchar(10) NOT NULL, - "code" varchar(63) NOT NULL, - "status" tinyint NOT NULL, - "remark" varchar(255) DEFAULT NULL, - "api_key" varchar(63) NOT NULL, - "api_secret" varchar(63) DEFAULT NULL, - "callback_url" varchar(255) DEFAULT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '短信渠é“'; - -CREATE TABLE IF NOT EXISTS "sys_sms_template" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "type" tinyint NOT NULL, - "status" tinyint NOT NULL, - "code" varchar(63) NOT NULL, - "name" varchar(63) NOT NULL, - "content" varchar(255) NOT NULL, - "params" varchar(255) NOT NULL, - "remark" varchar(255) DEFAULT NULL, - "api_template_id" varchar(63) NOT NULL, - "channel_id" bigint NOT NULL, - "channel_code" varchar(63) NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '短信模æ¿'; - -CREATE TABLE IF NOT EXISTS "sys_sms_log" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "channel_id" bigint NOT NULL, - "channel_code" varchar(63) NOT NULL, - "template_id" bigint NOT NULL, - "template_code" varchar(63) NOT NULL, - "template_type" tinyint NOT NULL, - "template_content" varchar(255) NOT NULL, - "template_params" varchar(255) NOT NULL, - "api_template_id" varchar(63) NOT NULL, - "mobile" varchar(11) NOT NULL, - "user_id" bigint DEFAULT '0', - "user_type" tinyint DEFAULT '0', - "send_status" tinyint NOT NULL DEFAULT '0', - "send_time" timestamp DEFAULT NULL, - "send_code" int DEFAULT NULL, - "send_msg" varchar(255) DEFAULT NULL, - "api_send_code" varchar(63) DEFAULT NULL, - "api_send_msg" varchar(255) DEFAULT NULL, - "api_request_id" varchar(255) DEFAULT NULL, - "api_serial_no" varchar(255) DEFAULT NULL, - "receive_status" tinyint NOT NULL DEFAULT '0', - "receive_time" timestamp DEFAULT NULL, - "api_receive_code" varchar(63) DEFAULT NULL, - "api_receive_msg" varchar(255) DEFAULT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '短信日志'; - -CREATE TABLE IF NOT EXISTS "sys_error_code" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "type" tinyint NOT NULL DEFAULT '0', - "application_name" varchar(50) NOT NULL, - "code" int NOT NULL DEFAULT '0', - "message" varchar(512) NOT NULL DEFAULT '', - "memo" varchar(512) DEFAULT '', - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '错误ç è¡¨'; - -CREATE TABLE IF NOT EXISTS "sys_social_user" ( - "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "user_id" bigint NOT NULL, - "user_type" tinyint NOT NULL DEFAULT '0', - "type" tinyint NOT NULL, - "openid" varchar(32) NOT NULL, - "token" varchar(256) DEFAULT NULL, - "union_id" varchar(32) NOT NULL, - "raw_token_info" varchar(1024) NOT NULL, - "nickname" varchar(32) NOT NULL, - "avatar" varchar(255) DEFAULT NULL, - "raw_user_info" varchar(1024) NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '社交用户'; - -CREATE TABLE IF NOT EXISTS "sys_tenant" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar(63) NOT NULL, - "contact_name" varchar(255) NOT NULL, - "contact_mobile" varchar(255), - "status" tinyint NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '租户'; - - -CREATE TABLE IF NOT EXISTS "pay_merchant" -( - "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "no" varchar(32) NOT NULL, - "name" varchar(64) NOT NULL, - "short_name" varchar(64) NOT NULL, - "status" tinyint NOT NULL, - "remark" varchar(255) DEFAULT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - "deleted" bit(1) NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '支付商户信æ¯'; - --- bpm 开头的 DB - -CREATE TABLE IF NOT EXISTS "pay_app" ( - "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar(64) NOT NULL, - "status" tinyint NOT NULL, - "remark" varchar(255) DEFAULT NULL, - `pay_notify_url` varchar(1024) NOT NULL, - `refund_notify_url` varchar(1024) NOT NULL, - `merchant_id` bigint(20) NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - "deleted" bit(1) NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT = '支付应用信æ¯'; - -CREATE TABLE IF NOT EXISTS "pay_channel" ( - "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "code" varchar(32) NOT NULL, - "status" tinyint(4) NOT NULL, - "remark" varchar(255) DEFAULT NULL, - "fee_rate" double NOT NULL DEFAULT 0, - "merchant_id" bigint(20) NOT NULL, - "app_id" bigint(20) NOT NULL, - "config" varchar(10240) NOT NULL, - "creator" varchar(64) NULL DEFAULT '', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) NULL DEFAULT '', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - "deleted" bit(1) NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT = '支付渠é“'; - -CREATE TABLE IF NOT EXISTS `pay_order` ( - "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, - `merchant_id` bigint(20) NOT NULL, - `app_id` bigint(20) NOT NULL, - `channel_id` bigint(20) DEFAULT NULL, - `channel_code` varchar(32) DEFAULT NULL, - `merchant_order_id` varchar(64) NOT NULL, - `subject` varchar(32) NOT NULL, - `body` varchar(128) NOT NULL, - `notify_url` varchar(1024) NOT NULL, - `notify_status` tinyint(4) NOT NULL, - `amount` bigint(20) NOT NULL, - `channel_fee_rate` double DEFAULT 0, - `channel_fee_amount` bigint(20) DEFAULT 0, - `status` tinyint(4) NOT NULL, - `user_ip` varchar(50) NOT NULL, - `expire_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP, - `success_time` datetime(0) DEFAULT CURRENT_TIMESTAMP, - `notify_time` datetime(0) DEFAULT CURRENT_TIMESTAMP, - `success_extension_id` bigint(20) DEFAULT NULL COMMENT '支付æˆåŠŸçš„è®¢å•æ‹“展å•ç¼–å·', - `refund_status` tinyint(4) NOT NULL, - `refund_times` tinyint(4) NOT NULL, - `refund_amount` bigint(20) NOT NULL, - `channel_user_id` varchar(255) DEFAULT NULL, - `channel_order_no` varchar(64) DEFAULT NULL, - `creator` varchar(64) DEFAULT '', - `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updater` varchar(64) DEFAULT '', - `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `deleted` bit(1) NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT = '支付订å•'; - -CREATE TABLE IF NOT EXISTS `pay_refund` ( - "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, - `merchant_id` bigint(20) NOT NULL, - `app_id` bigint(20) NOT NULL, - `channel_id` bigint(20) NOT NULL, - `channel_code` varchar(32) NOT NULL, - `order_id` bigint(20) NOT NULL, - `trade_no` varchar(64) NOT NULL, - `merchant_order_id` varchar(64) NOT NULL, - `merchant_refund_no` varchar(64) NOT NULL, - `notify_url` varchar(1024) NOT NULL, - `notify_status` tinyint(4) NOT NULL, - `status` tinyint(4) NOT NULL, - `type` tinyint(4) NOT NULL, - `pay_amount` bigint(20) NOT NULL, - `refund_amount` bigint(20) NOT NULL, - `reason` varchar(256) NOT NULL, - `user_ip` varchar(50) NULL DEFAULT NULL, - `channel_order_no` varchar(64) NOT NULL, - `channel_refund_no` varchar(64) NULL DEFAULT NULL, - `channel_error_code` varchar(128) NULL DEFAULT NULL, - `channel_error_msg` varchar(256) NULL DEFAULT NULL, - `channel_extras` varchar(1024) NULL DEFAULT NULL, - `expire_time` datetime(0) NULL DEFAULT NULL, - `success_time` datetime(0) NULL DEFAULT NULL, - `notify_time` datetime(0) NULL DEFAULT NULL, - `creator` varchar(64) NULL DEFAULT '', - `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updater` varchar(64) NULL DEFAULT '', - `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `deleted` bit(1) NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT = '退款订å•'; - -- bpm 开头的 DB CREATE TABLE IF NOT EXISTS "bpm_form" ( @@ -608,17 +14,3 @@ CREATE TABLE IF NOT EXISTS "bpm_form" ( "deleted" bit NOT NULL DEFAULT FALSE, PRIMARY KEY ("id") ) COMMENT '动æ€è¡¨å•'; - -CREATE TABLE IF NOT EXISTS "bpm_user_group" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar(63) NOT NULL, - "description" varchar(255) NOT NULL, - "status" tinyint NOT NULL, - "member_user_ids" varchar(255) NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") - ) COMMENT '用户组'; diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/pom.xml b/yudao-module-bpm/yudao-module-bpm-core-service/pom.xml index b61a9db277..aa81886dbc 100644 --- a/yudao-module-bpm/yudao-module-bpm-core-service/pom.xml +++ b/yudao-module-bpm/yudao-module-bpm-core-service/pom.xml @@ -8,7 +8,11 @@ ${revision} 4.0.0 - + pom + + yudao-module-bpm-core-service-api + yudao-module-bpm-core-service-impl + yudao-module-bpm-core-service diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/pom.xml b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/pom.xml new file mode 100644 index 0000000000..fb5a4f08e8 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/pom.xml @@ -0,0 +1,20 @@ + + + + yudao-module-bpm-core-service + cn.iocoder.boot + ${revision} + + 4.0.0 + + yudao-module-bpm-core-service-api + + + + org.projectlombok + lombok + + + \ No newline at end of file diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/BpmUserGroupServiceApi.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/BpmUserGroupServiceApi.java new file mode 100644 index 0000000000..c83486970d --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/BpmUserGroupServiceApi.java @@ -0,0 +1,32 @@ +package cn.iocoder.yudao.coreservice.modules.bpm.api.group; + +import cn.iocoder.yudao.coreservice.modules.bpm.api.group.dto.BpmUserGroupDTO; + +import java.util.Collection; +import java.util.List; +import java.util.Set; + +/** + * Bpm 用户组 API æŽ¥å£ + * + * @author jason + */ +public interface BpmUserGroupServiceApi { + + /** + * 获得用户组列表 + * + * @param ids ç¼–å· + * @return 用户组列表 + */ + List getUserGroupList(Collection ids); + + /** + * æ ¡éªŒç”¨æˆ·ç»„ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: + * 1. 用户组编å·ä¸å­˜åœ¨ + * 2. 用户组被ç¦ç”¨ + * + * @param ids ç”¨æˆ·ç»„ç¼–å·æ•°ç»„ + */ + void validUserGroups(Set ids); +} diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/dto/BpmUserGroupDTO.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/dto/BpmUserGroupDTO.java new file mode 100644 index 0000000000..b85042527a --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/dto/BpmUserGroupDTO.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.coreservice.modules.bpm.api.group.dto; + +import lombok.Data; + +import java.util.Set; +/** + * Bpm 用户组 DTO + * + * @author jason + */ +@Data +public class BpmUserGroupDTO { + /** + * æˆå‘˜ç”¨æˆ·ç¼–å·æ•°ç»„ + */ + private Set memberUserIds; +} diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/pom.xml b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/pom.xml new file mode 100644 index 0000000000..1712458f63 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/pom.xml @@ -0,0 +1,35 @@ + + + + yudao-module-bpm-core-service + cn.iocoder.boot + ${revision} + + 4.0.0 + + yudao-module-bpm-core-service-impl + + + cn.iocoder.boot + yudao-spring-boot-starter-web + + + cn.iocoder.boot + yudao-spring-boot-starter-security + + + cn.iocoder.boot + yudao-spring-boot-starter-mybatis + + + cn.iocoder.boot + yudao-module-bpm-core-service-api + + + cn.iocoder.boot + yudao-spring-boot-starter-test + + + \ No newline at end of file diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmUserGroupServiceApiImpl.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmUserGroupServiceApiImpl.java new file mode 100644 index 0000000000..b789ba9e1b --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmUserGroupServiceApiImpl.java @@ -0,0 +1,61 @@ +package cn.iocoder.yudao.adminserver.modules.bpm.api; + +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmUserGroupConvert; +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmUserGroupDO; +import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmUserGroupMapper; +import cn.iocoder.yudao.coreservice.modules.bpm.api.group.BpmUserGroupServiceApi; +import cn.iocoder.yudao.coreservice.modules.bpm.api.group.dto.BpmUserGroupDTO; +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.USER_GROUP_IS_DISABLE; +import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.USER_GROUP_NOT_EXISTS; +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; + +/** + * Bpm 用户组 API æŽ¥å£ å®žçŽ°ç±» + * + * @author jason + */ +@Service +public class BpmUserGroupServiceApiImpl implements BpmUserGroupServiceApi { + + @Resource + private BpmUserGroupMapper userGroupMapper; + + @Override + public List getUserGroupList(Collection ids) { + return BpmUserGroupConvert.INSTANCE.convertList3(userGroupMapper.selectBatchIds(ids)); + } + + + @Override + public void validUserGroups(Set ids) { + + if (CollUtil.isEmpty(ids)) { + return; + } + // èŽ·å¾—ç”¨æˆ·ç»„ä¿¡æ¯ + List userGroups = userGroupMapper.selectBatchIds(ids); + Map userGroupMap = CollectionUtils.convertMap(userGroups, BpmUserGroupDO::getId); + // 校验 + ids.forEach(id -> { + BpmUserGroupDO userGroup = userGroupMap.get(id); + if (userGroup == null) { + throw ServiceExceptionUtil.exception(USER_GROUP_NOT_EXISTS); + } + if (!CommonStatusEnum.ENABLE.getStatus().equals(userGroup.getStatus())) { + throw exception(USER_GROUP_IS_DISABLE, userGroup.getName()); + } + }); + } +} diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmUserGroupController.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmUserGroupController.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmUserGroupController.java rename to yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmUserGroupController.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupBaseVO.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupBaseVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupBaseVO.java rename to yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupBaseVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupCreateReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupCreateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupCreateReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupPageReqVO.java similarity index 63% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupPageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupPageReqVO.java index 6a4497afc5..303a3491ea 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupPageReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupPageReqVO.java @@ -1,12 +1,15 @@ package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group; -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.date.DateUtils; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; import org.springframework.format.annotation.DateTimeFormat; -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +import java.util.Date; @ApiModel("用户组分页 Request VO") @Data @@ -20,11 +23,11 @@ public class BpmUserGroupPageReqVO extends PageParam { @ApiModelProperty(value = "状æ€", example = "1") private Integer status; - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @DateTimeFormat(pattern = DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @ApiModelProperty(value = "开始创建时间") private Date beginCreateTime; - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @DateTimeFormat(pattern = DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @ApiModelProperty(value = "结æŸåˆ›å»ºæ—¶é—´") private Date endCreateTime; diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupRespVO.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupRespVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupRespVO.java rename to yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupRespVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupSimpleRespVO.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupSimpleRespVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupSimpleRespVO.java rename to yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupSimpleRespVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupUpdateReqVO.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupUpdateReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupUpdateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupUpdateReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmUserGroupConvert.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmUserGroupConvert.java similarity index 89% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmUserGroupConvert.java rename to yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmUserGroupConvert.java index 4e7cd997f2..7f7e9afc8d 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmUserGroupConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmUserGroupConvert.java @@ -6,6 +6,7 @@ import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.B import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupRespVO; import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupUpdateReqVO; import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmUserGroupDO; +import cn.iocoder.yudao.coreservice.modules.bpm.api.group.dto.BpmUserGroupDTO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.mapstruct.Mapper; @@ -34,4 +35,6 @@ public interface BpmUserGroupConvert { @Named("convertList2") List convertList2(List list); + + List convertList3(List list); } diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmUserGroupDO.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmUserGroupDO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmUserGroupDO.java rename to yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmUserGroupDO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmUserGroupMapper.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmUserGroupMapper.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmUserGroupMapper.java rename to yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmUserGroupMapper.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java new file mode 100644 index 0000000000..5fd230cefd --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java @@ -0,0 +1,10 @@ +package cn.iocoder.yudao.adminserver.modules.bpm.enums; + +import cn.iocoder.yudao.framework.common.exception.ErrorCode; + +public interface BpmErrorCodeConstants { + // ========== ç”¨æˆ·ç»„æ¨¡å— 1-009-011-000 ========== + ErrorCode USER_GROUP_NOT_EXISTS = new ErrorCode(1009011000, "用户组ä¸å­˜åœ¨"); + ErrorCode USER_GROUP_IS_DISABLE = new ErrorCode(1009011001, "å字为ã€{}】的用户组已被ç¦ç”¨"); + +} diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupService.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupService.java similarity index 79% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupService.java rename to yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupService.java index f1fd4debe1..5d848656b5 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupService.java +++ b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupService.java @@ -46,14 +46,6 @@ public interface BpmUserGroupService { */ BpmUserGroupDO getUserGroup(Long id); - /** - * 获得用户组列表 - * - * @param ids ç¼–å· - * @return 用户组列表 - */ - List getUserGroupList(Collection ids); - /** * 获得指定状æ€çš„用户组列表 * @@ -69,14 +61,4 @@ public interface BpmUserGroupService { * @return 用户组分页 */ PageResult getUserGroupPage(BpmUserGroupPageReqVO pageReqVO); - - /** - * æ ¡éªŒç”¨æˆ·ç»„ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: - * 1. 用户组编å·ä¸å­˜åœ¨ - * 2. 用户组被ç¦ç”¨ - * - * @param ids ç”¨æˆ·ç»„ç¼–å·æ•°ç»„ - */ - void validUserGroups(Set ids); - } diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmUserGroupServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmUserGroupServiceImpl.java similarity index 76% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmUserGroupServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmUserGroupServiceImpl.java index 8a342b0a24..7de593cdfe 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmUserGroupServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmUserGroupServiceImpl.java @@ -9,6 +9,7 @@ import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmUse import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmUserGroupMapper; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmUserGroupService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import org.springframework.stereotype.Service; @@ -64,7 +65,7 @@ public class BpmUserGroupServiceImpl implements BpmUserGroupService { private void validateUserGroupExists(Long id) { if (userGroupMapper.selectById(id) == null) { - throw exception(USER_GROUP_NOT_EXISTS); + throw ServiceExceptionUtil.exception(USER_GROUP_NOT_EXISTS); } } @@ -73,10 +74,6 @@ public class BpmUserGroupServiceImpl implements BpmUserGroupService { return userGroupMapper.selectById(id); } - @Override - public List getUserGroupList(Collection ids) { - return userGroupMapper.selectBatchIds(ids); - } @Override public List getUserGroupListByStatus(Integer status) { @@ -88,24 +85,4 @@ public class BpmUserGroupServiceImpl implements BpmUserGroupService { return userGroupMapper.selectPage(pageReqVO); } - @Override - public void validUserGroups(Set ids) { - if (CollUtil.isEmpty(ids)) { - return; - } - // èŽ·å¾—ç”¨æˆ·ç»„ä¿¡æ¯ - List userGroups = userGroupMapper.selectBatchIds(ids); - Map userGroupMap = CollectionUtils.convertMap(userGroups, BpmUserGroupDO::getId); - // 校验 - ids.forEach(id -> { - BpmUserGroupDO userGroup = userGroupMap.get(id); - if (userGroup == null) { - throw exception(USER_GROUP_NOT_EXISTS); - } - if (!CommonStatusEnum.ENABLE.getStatus().equals(userGroup.getStatus())) { - throw exception(USER_GROUP_IS_DISABLE, userGroup.getName()); - } - }); - } - } diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java new file mode 100644 index 0000000000..5f7daeded1 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.adminserver; + +import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration; +import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration; +import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; +import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.jdbc.Sql; + +/** + * ä¾èµ–内存 DB çš„å•元测试 + * + * 注æ„,Service å±‚åŒæ ·é€‚用。对于 Service 层的å•元测试,我们针对自己模å—çš„ Mapper 走的是 H2 内存数æ®åº“,针对别的模å—çš„ Service 走的是 Mock 方法 + * + * @author èŠ‹é“æºç  + */ +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseDbUnitTest.Application.class) +@ActiveProfiles("unit-test") // 设置使用 application-unit-test é…置文件 +@Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) // æ¯ä¸ªå•元测试结æŸåŽï¼Œæ¸…ç† DB +public class BaseDbUnitTest { + + @Import({ + // DB é…置类 + YudaoDataSourceAutoConfiguration.class, // 自己的 DB é…置类 + DataSourceAutoConfiguration.class, // Spring DB 自动é…置类 + DataSourceTransactionManagerAutoConfiguration.class, // Spring 事务自动é…置类 + DruidDataSourceAutoConfigure.class, // Druid 自动é…置类 + // MyBatis é…置类 + YudaoMybatisAutoConfiguration.class, // 自己的 MyBatis é…置类 + MybatisPlusAutoConfiguration.class, // MyBatis 的自动é…置类 + }) + public static class Application { + } + +} diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupServiceTest.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupServiceTest.java similarity index 73% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupServiceTest.java rename to yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupServiceTest.java index a8704dd611..ff16838167 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupServiceTest.java +++ b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupServiceTest.java @@ -1,6 +1,5 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; -import cn.hutool.core.date.DateUtil; import cn.iocoder.yudao.adminserver.BaseDbUnitTest; import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupCreateReqVO; import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupPageReqVO; @@ -11,6 +10,9 @@ import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.impl.BpmUserG import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.date.DateUtils; +import cn.iocoder.yudao.framework.test.core.util.AssertUtils; +import cn.iocoder.yudao.framework.test.core.util.RandomUtils; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.Import; @@ -18,11 +20,6 @@ import javax.annotation.Resource; import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.USER_GROUP_NOT_EXISTS; import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static org.junit.jupiter.api.Assertions.*; /** * {@link BpmUserGroupServiceImpl} çš„å•元测试类 @@ -41,24 +38,24 @@ public class BpmUserGroupServiceTest extends BaseDbUnitTest { @Test public void testCreateUserGroup_success() { // 准备傿•° - BpmUserGroupCreateReqVO reqVO = randomPojo(BpmUserGroupCreateReqVO.class); + BpmUserGroupCreateReqVO reqVO = RandomUtils.randomPojo(BpmUserGroupCreateReqVO.class); // 调用 Long userGroupId = userGroupService.createUserGroup(reqVO); // 断言 - assertNotNull(userGroupId); + Assertions.assertNotNull(userGroupId); // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® BpmUserGroupDO userGroup = userGroupMapper.selectById(userGroupId); - assertPojoEquals(reqVO, userGroup); + AssertUtils.assertPojoEquals(reqVO, userGroup); } @Test public void testUpdateUserGroup_success() { // mock æ•°æ® - BpmUserGroupDO dbUserGroup = randomPojo(BpmUserGroupDO.class); + BpmUserGroupDO dbUserGroup = RandomUtils.randomPojo(BpmUserGroupDO.class); userGroupMapper.insert(dbUserGroup);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° - BpmUserGroupUpdateReqVO reqVO = randomPojo(BpmUserGroupUpdateReqVO.class, o -> { + BpmUserGroupUpdateReqVO reqVO = RandomUtils.randomPojo(BpmUserGroupUpdateReqVO.class, o -> { o.setId(dbUserGroup.getId()); // 设置更新的 ID }); @@ -66,22 +63,22 @@ public class BpmUserGroupServiceTest extends BaseDbUnitTest { userGroupService.updateUserGroup(reqVO); // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® BpmUserGroupDO userGroup = userGroupMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(reqVO, userGroup); + AssertUtils.assertPojoEquals(reqVO, userGroup); } @Test public void testUpdateUserGroup_notExists() { // 准备傿•° - BpmUserGroupUpdateReqVO reqVO = randomPojo(BpmUserGroupUpdateReqVO.class); + BpmUserGroupUpdateReqVO reqVO = RandomUtils.randomPojo(BpmUserGroupUpdateReqVO.class); // 调用, 并断言异常 - assertServiceException(() -> userGroupService.updateUserGroup(reqVO), USER_GROUP_NOT_EXISTS); + AssertUtils.assertServiceException(() -> userGroupService.updateUserGroup(reqVO), USER_GROUP_NOT_EXISTS); } @Test public void testDeleteUserGroup_success() { // mock æ•°æ® - BpmUserGroupDO dbUserGroup = randomPojo(BpmUserGroupDO.class); + BpmUserGroupDO dbUserGroup = RandomUtils.randomPojo(BpmUserGroupDO.class); userGroupMapper.insert(dbUserGroup);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° Long id = dbUserGroup.getId(); @@ -89,22 +86,22 @@ public class BpmUserGroupServiceTest extends BaseDbUnitTest { // 调用 userGroupService.deleteUserGroup(id); // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(userGroupMapper.selectById(id)); + Assertions.assertNull(userGroupMapper.selectById(id)); } @Test public void testDeleteUserGroup_notExists() { // 准备傿•° - Long id = randomLongId(); + Long id = RandomUtils.randomLongId(); // 调用, 并断言异常 - assertServiceException(() -> userGroupService.deleteUserGroup(id), USER_GROUP_NOT_EXISTS); + AssertUtils.assertServiceException(() -> userGroupService.deleteUserGroup(id), USER_GROUP_NOT_EXISTS); } @Test public void testGetUserGroupPage() { // mock æ•°æ® - BpmUserGroupDO dbUserGroup = randomPojo(BpmUserGroupDO.class, o -> { // 等会查询到 + BpmUserGroupDO dbUserGroup = RandomUtils.randomPojo(BpmUserGroupDO.class, o -> { // 等会查询到 o.setName("èŠ‹é“æºç "); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); o.setCreateTime(DateUtils.buildTime(2021, 11, 11)); @@ -126,9 +123,9 @@ public class BpmUserGroupServiceTest extends BaseDbUnitTest { // 调用 PageResult pageResult = userGroupService.getUserGroupPage(reqVO); // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbUserGroup, pageResult.getList().get(0)); + Assertions.assertEquals(1, pageResult.getTotal()); + Assertions.assertEquals(1, pageResult.getList().size()); + AssertUtils.assertPojoEquals(dbUserGroup, pageResult.getList().get(0)); } } diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/application-unit-test.yaml b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/application-unit-test.yaml new file mode 100644 index 0000000000..ddad7ace21 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/application-unit-test.yaml @@ -0,0 +1,38 @@ +spring: + main: + lazy-initialization: true # 开坿‡’加载,加快速度 + banner-mode: off # å•元测试,ç¦ç”¨ Banner + +--- #################### æ•°æ®åº“相关é…ç½® #################### + +spring: + # æ•°æ®æºé…置项 + datasource: + name: ruoyi-vue-pro + url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false; # MODE 使用 MySQL 模å¼ï¼›DATABASE_TO_UPPER é…置表和字段使用å°å†™ + driver-class-name: org.h2.Driver + username: sa + password: + schema: classpath:sql/create_tables.sql # MySQL 转 H2 的语å¥ï¼Œä½¿ç”¨ https://www.jooq.org/translate/ 工具 + druid: + async-init: true # å•元测试,异步åˆå§‹åŒ– Druid 连接池,æå‡å¯åŠ¨é€Ÿåº¦ + initial-size: 1 # å•元测试,é…置为 1,æå‡å¯åŠ¨é€Ÿåº¦ + +mybatis: + lazy-initialization: true # å•元测试,设置 MyBatis Mapper 延迟加载,加速æ¯ä¸ªå•元测试 + +--- #################### 定时任务相关é…ç½® #################### + +--- #################### é…置中心相关é…ç½® #################### + +--- #################### æœåŠ¡ä¿éšœç›¸å…³é…ç½® #################### + +# Lock4j é…置项(å•元测试,ç¦ç”¨ Lock4j) + +# Resilience4j é…置项 + +--- #################### 监控相关é…ç½® #################### + +--- #################### 芋é“相关é…ç½® #################### + +# 芋é“é…置项,设置当å‰é¡¹ç›®æ‰€æœ‰è‡ªå®šä¹‰çš„é…ç½® diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/application.yaml b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/application.yaml new file mode 100644 index 0000000000..2cfbb1abe4 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/application.yaml @@ -0,0 +1,35 @@ +spring: + application: + name: yudao-module-bpm-service + + # Jackson é…置项 + jackson: + serialization: + write-dates-as-timestamps: true # 设置 Date 的格å¼ï¼Œä½¿ç”¨æ—¶é—´æˆ³ + write-date-timestamps-as-nanoseconds: false # 设置ä¸ä½¿ç”¨ nanoseconds 的格å¼ã€‚例如说 1611460870.401,而是直接 1611460870401 + write-durations-as-timestamps: true # 设置 Duration 的格å¼ï¼Œä½¿ç”¨æ—¶é—´æˆ³ + fail-on-empty-beans: false # å…许åºåˆ—化无属性的 Bean + +# MyBatis Plus çš„é…置项 +mybatis-plus: + configuration: + map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。 + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # æ‰“å°æ—¥å¿— + global-config: + db-config: + id-type: AUTO # 自增 ID + logic-delete-value: 1 # 逻辑已删除值(默认为 1) + logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) + mapper-locations: classpath*:mapper/*.xml + type-aliases-package: ${yudao.core-service.base-package}.modules.*.dal.dataobject + +--- #################### 芋é“相关é…ç½® #################### + +yudao: + info: + version: 1.0.0 + base-package: cn.iocoder.yudao.adminserver + core-service: + base-package: cn.iocoder.yudao.coreservice + +debug: false diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/logback-spring.xml b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/logback-spring.xml new file mode 100644 index 0000000000..daf756bff0 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/logback-spring.xml @@ -0,0 +1,4 @@ + + + + diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/sql/clean.sql b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/sql/clean.sql new file mode 100644 index 0000000000..45b43e0e8f --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/sql/clean.sql @@ -0,0 +1,2 @@ +-- bpm 开头的 DB +DELETE FROM "bpm_user_group"; diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/sql/create_tables.sql b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/sql/create_tables.sql new file mode 100644 index 0000000000..da5b9a6130 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/sql/create_tables.sql @@ -0,0 +1,14 @@ +-- bpm 开头的 DB +CREATE TABLE IF NOT EXISTS "bpm_user_group" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "name" varchar(63) NOT NULL, + "description" varchar(255) NOT NULL, + "status" tinyint NOT NULL, + "member_user_ids" varchar(255) NOT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") + ) COMMENT '用户组'; From 928b7dbe23338127834ae6023d2a5ae32a16308e Mon Sep 17 00:00:00 2001 From: YunaiV Date: Fri, 28 Jan 2022 20:21:01 +0800 Subject: [PATCH 05/47] =?UTF-8?q?=E5=A4=9A=E6=A8=A1=E5=9D=97=E9=87=8D?= =?UTF-8?q?=E6=9E=84=202=EF=BC=9A=E5=9C=A8=20yudao-admin-server=20?= =?UTF-8?q?=E4=B8=AD=EF=BC=8C=E5=BC=95=E5=85=A5=20yudao-module-member=20?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yudao-admin-server/pom.xml | 7 + .../adminserver/AdminServerApplication.java | 3 +- .../security/SecurityConfiguration.java | 19 ++- .../config/BpmActivitiConfiguration.java | 14 +- .../service/auth/impl/SysAuthServiceImpl.java | 18 +-- .../service/user/impl/SysUserServiceImpl.java | 3 +- .../src/main/resources/application-local.yaml | 12 ++ .../src/main/resources/application.yaml | 18 ++- .../service/file/InfFileCoreService.java | 1 - .../sms/impl/SysSmsCoreServiceImpl.java | 13 +- .../config/YudaoMybatisAutoConfiguration.java | 3 +- .../YudaoSecurityAutoConfiguration.java | 23 ++- .../YudaoWebSecurityConfigurerAdapter.java | 32 +++-- .../filter/JWTAuthenticationTokenFilter.java | 17 ++- .../handler/LogoutSuccessHandlerImpl.java | 12 +- .../service/SecurityAuthFrameworkService.java | 10 +- .../core/service/SecurityAuthService.java | 43 ++++++ .../core/service/SecurityAuthServiceImpl.java | 64 +++++++++ .../core/filter/ApiAccessLogFilter.java | 10 +- .../framework/web/config/WebProperties.java | 53 ++++--- .../web/config/YudaoWebAutoConfiguration.java | 17 ++- .../user/{MemberUserApi.java => UserApi.java} | 6 +- ...emberUserRespDTO.java => UserRespDTO.java} | 2 +- .../yudao-module-member-impl/pom.xml | 35 +---- .../yudao/module/member/api/package-info.java | 1 + .../module/member/api/user/UserApiImpl.java | 30 ++++ .../admin/address/package-info.java | 1 + .../controller/admin/user/package-info.java | 1 + .../controller/app/address/package-info.java | 1 + .../app/auth/AppAuthController.java | 9 +- .../app/auth/vo/AppAuthCheckCodeReqVO.java | 4 +- .../auth/vo/AppAuthResetPasswordReqVO.java | 1 + ...SmsReqVO.java => AppAuthSendSmsReqVO.java} | 4 +- .../auth/vo/AppAuthUpdatePasswordReqVO.java | 1 + .../app/user/AppUserController.java | 37 +++-- .../app/user/vo/AppUserUpdateMobileReqVO.java | 2 + .../{SysAuthConvert.java => AuthConvert.java} | 10 +- .../member/convert/user/UserConvert.java | 7 +- .../user/{MemberUserDO.java => UserDO.java} | 6 +- .../dal/mysql/sms/SysSmsCodeMapper.java | 3 +- .../member/dal/mysql/user/MbrUserMapper.java | 19 --- .../member/dal/mysql/user/UserMapper.java | 19 +++ .../yudao/module/member/dal/package-info.java | 2 + .../module/member/dal/redis/package-info.java | 3 + .../security/SecurityConfiguration.java | 29 ---- .../{SysAuthService.java => AuthService.java} | 19 +-- ...hServiceImpl.java => AuthServiceImpl.java} | 135 +++++++++--------- .../module/member/service/package-info.java | 1 - .../member/service/sms/SysSmsCodeService.java | 5 +- .../service/sms/SysSmsCodeServiceImpl.java | 41 +++--- .../{MbrUserService.java => UserService.java} | 30 ++-- ...rServiceImpl.java => UserServiceImpl.java} | 97 ++++++------- .../service/auth/SysAuthServiceTest.java | 42 +++--- .../module/member/service/package-info.java | 1 - .../service/user/MbrUserServiceImplTest.java | 60 +++----- .../member/test/BaseDbAndRedisUnitTest.java | 1 - .../test/resources/application-unit-test.yaml | 5 + .../src/main/resources/application-dev.yaml | 13 ++ .../src/main/resources/application.yaml | 7 +- 59 files changed, 622 insertions(+), 460 deletions(-) create mode 100644 yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/service/SecurityAuthService.java create mode 100644 yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/service/SecurityAuthServiceImpl.java rename yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/{MemberUserApi.java => UserApi.java} (60%) rename yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/dto/{MemberUserRespDTO.java => UserRespDTO.java} (93%) create mode 100644 yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/api/package-info.java create mode 100644 yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/api/user/UserApiImpl.java create mode 100644 yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/admin/address/package-info.java create mode 100644 yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/package-info.java create mode 100644 yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/package-info.java rename yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/{AppSendSmsReqVO.java => AppAuthSendSmsReqVO.java} (88%) rename yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/auth/{SysAuthConvert.java => AuthConvert.java} (63%) rename yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/{MemberUserDO.java => UserDO.java} (90%) delete mode 100644 yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MbrUserMapper.java create mode 100644 yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/UserMapper.java delete mode 100644 yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/framework/security/SecurityConfiguration.java rename yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/{SysAuthService.java => AuthService.java} (74%) rename yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/{SysAuthServiceImpl.java => AuthServiceImpl.java} (72%) delete mode 100644 yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/package-info.java rename yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/{MbrUserService.java => UserService.java} (57%) rename yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/{MbrUserServiceImpl.java => UserServiceImpl.java} (51%) delete mode 100644 yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/package-info.java diff --git a/yudao-admin-server/pom.xml b/yudao-admin-server/pom.xml index 847e626a03..40943697fe 100644 --- a/yudao-admin-server/pom.xml +++ b/yudao-admin-server/pom.xml @@ -17,6 +17,13 @@ https://github.com/YunaiV/ruoyi-vue-pro + + + cn.iocoder.boot + yudao-module-member-impl + ${revision} + + cn.iocoder.boot diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/AdminServerApplication.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/AdminServerApplication.java index 810869768e..35f6a1d8db 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/AdminServerApplication.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/AdminServerApplication.java @@ -4,7 +4,8 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SuppressWarnings("SpringComponentScan") // 忽略 IDEA 无法识别 ${yudao.info.base-package} å’Œ ${yudao.core-service.base-package} -@SpringBootApplication(scanBasePackages = {"${yudao.info.base-package}", "${yudao.core-service.base-package}"}) +@SpringBootApplication(scanBasePackages = {"${yudao.info.base-package}", "${yudao.core-service.base-package}", + "${yudao.info.member-package}"}) // TODO èŠ‹è‰¿ï¼šé‡æž„ public class AdminServerApplication { public static void main(String[] args) { diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/security/SecurityConfiguration.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/security/SecurityConfiguration.java index e99c106b45..a5086b92e3 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/security/SecurityConfiguration.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/security/SecurityConfiguration.java @@ -23,19 +23,28 @@ public class SecurityConfiguration { public Customizer.ExpressionInterceptUrlRegistry> authorizeRequestsCustomizer() { return registry -> { // 验è¯ç çš„æŽ¥å£ - registry.antMatchers(api("/system/captcha/**")).anonymous(); + registry.antMatchers(buildAdminApi("/system/captcha/**")).anonymous(); // 获得租户编å·çš„æŽ¥å£ - registry.antMatchers(api("/system/tenant/get-id-by-name")).anonymous(); + registry.antMatchers(buildAdminApi("/system/tenant/get-id-by-name")).anonymous(); // Spring Boot Admin Server 的安全é…ç½® registry.antMatchers(adminSeverContextPath).anonymous() .antMatchers(adminSeverContextPath + "/**").anonymous(); // 短信回调 API - registry.antMatchers(api("/system/sms/callback/**")).anonymous(); + registry.antMatchers(buildAdminApi("/system/sms/callback/**")).anonymous(); + + // 设置 App API æ— éœ€è®¤è¯ + registry.antMatchers(buildAppApi("/**")); }; } - private String api(String url) { - return webProperties.getApiPrefix() + url; + private String buildAdminApi(String url) { + // TODO èŠ‹è‰¿ï¼šå¤šæ¨¡å— + return webProperties.getAdminApi().getPrefix() + url; + } + + private String buildAppApi(String url) { + // TODO èŠ‹è‰¿ï¼šå¤šæ¨¡å— + return webProperties.getAppApi().getPrefix() + url; } } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java index ccb7cad788..c18893f169 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java @@ -11,10 +11,12 @@ import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService; import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; import org.activiti.api.runtime.shared.identity.UserGroupManager; +import org.activiti.core.common.spring.identity.ActivitiUserGroupManagerImpl; import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer; import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.security.core.userdetails.UserDetailsService; import java.util.Collections; import java.util.List; @@ -28,7 +30,15 @@ import static org.activiti.spring.boot.ProcessEngineAutoConfiguration.BEHAVIOR_F public class BpmActivitiConfiguration { /** - * BPM 模å—çš„ ProcessEngineConfigurationConfigurer 实现类,主è¦è®¾ç½®å„ç§ç›‘å¬å™¨ã€ç”¨æˆ·ç»„ç®¡ç† + * 空用户组的 Bean + */ + @Bean + public UserGroupManager userGroupManager() { + return new EmptyUserGroupManager(); + } + + /** + * BPM 模å—çš„ ProcessEngineConfigurationConfigurer 实现类,主è¦è®¾ç½®å„ç§ç›‘å¬å™¨ */ @Bean public ProcessEngineConfigurationConfigurer bpmProcessEngineConfigurationConfigurer( @@ -36,8 +46,6 @@ public class BpmActivitiConfiguration { return configuration -> { // 注册监å¬å™¨ï¼Œä¾‹å¦‚说 BpmActivitiEventListener configuration.setEventListeners(Collections.singletonList(taskActivitiEventListener)); - // 用户组 - configuration.setUserGroupManager(new EmptyUserGroupManager()); }; } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java index 438bd1e75a..3f795f83da 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java @@ -60,8 +60,6 @@ import static java.util.Collections.singleton; @Slf4j public class SysAuthServiceImpl implements SysAuthService { - private static final UserTypeEnum USER_TYPE_ENUM = UserTypeEnum.ADMIN; - @Resource @Lazy // 延迟加载,因为存在相互ä¾èµ–的问题 private AuthenticationManager authenticationManager; @@ -83,7 +81,6 @@ public class SysAuthServiceImpl implements SysAuthService { @Resource private SysSocialCoreService socialService; - @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // èŽ·å– username 对应的 SysUserDO @@ -216,7 +213,7 @@ public class SysAuthServiceImpl implements SysAuthService { // 如果未绑定 SysSocialUserDO 用户,则无法自动登录,进行报错 String unionId = socialService.getAuthUserUnionId(authUser); - List socialUsers = socialService.getAllSocialUserList(reqVO.getType(), unionId, USER_TYPE_ENUM); + List socialUsers = socialService.getAllSocialUserList(reqVO.getType(), unionId, getUserType()); if (CollUtil.isEmpty(socialUsers)) { throw exception(AUTH_THIRD_LOGIN_NOT_BIND); } @@ -232,7 +229,7 @@ public class SysAuthServiceImpl implements SysAuthService { LoginUser loginUser = this.buildLoginUser(user); // 绑定社交用户(更新) - socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, USER_TYPE_ENUM); + socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, getUserType()); // 缓存登录用户到 Redis 中,返回 sessionId ç¼–å· return userSessionCoreService.createUserSession(loginUser, userIp, userAgent); @@ -248,7 +245,7 @@ public class SysAuthServiceImpl implements SysAuthService { LoginUser loginUser = this.login0(reqVO.getUsername(), reqVO.getPassword()); // 绑定社交用户(新增) - socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, USER_TYPE_ENUM); + socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, getUserType()); // 缓存登录用户到 Redis 中,返回 sessionId ç¼–å· return userSessionCoreService.createUserSession(loginUser, userIp, userAgent); @@ -261,7 +258,7 @@ public class SysAuthServiceImpl implements SysAuthService { Assert.notNull(authUser, "授æƒç”¨æˆ·ä¸ä¸ºç©º"); // 绑定社交用户(新增) - socialService.bindSocialUser(userId, reqVO.getType(), authUser, USER_TYPE_ENUM); + socialService.bindSocialUser(userId, reqVO.getType(), authUser, getUserType()); } @Override @@ -277,12 +274,17 @@ public class SysAuthServiceImpl implements SysAuthService { this.createLogoutLog(loginUser.getId(), loginUser.getUsername()); } + @Override + public UserTypeEnum getUserType() { + return UserTypeEnum.ADMIN; + } + private void createLogoutLog(Long userId, String username) { SysLoginLogCreateReqDTO reqDTO = new SysLoginLogCreateReqDTO(); reqDTO.setLogType(SysLoginLogTypeEnum.LOGOUT_SELF.getType()); reqDTO.setTraceId(TracerUtils.getTraceId()); reqDTO.setUserId(userId); - reqDTO.setUserType(USER_TYPE_ENUM.getValue()); + reqDTO.setUserType(getUserType().getValue()); reqDTO.setUsername(username); reqDTO.setUserAgent(ServletUtils.getUserAgent()); reqDTO.setUserIp(ServletUtils.getClientIP()); diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/impl/SysUserServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/impl/SysUserServiceImpl.java index d5b2ad18ba..98ca0160eb 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/impl/SysUserServiceImpl.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/impl/SysUserServiceImpl.java @@ -23,6 +23,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import com.google.common.annotations.VisibleForTesting; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; @@ -47,7 +48,7 @@ public class SysUserServiceImpl implements SysUserService { @Value("${sys.user.init-password:yudaoyuanma}") private String userInitPassword; - @Resource + @Resource(name = "sysUserMapper") // userMapper 存在é‡å private SysUserMapper userMapper; @Resource diff --git a/yudao-admin-server/src/main/resources/application-local.yaml b/yudao-admin-server/src/main/resources/application-local.yaml index 9932671dcb..411f2a6a33 100644 --- a/yudao-admin-server/src/main/resources/application-local.yaml +++ b/yudao-admin-server/src/main/resources/application-local.yaml @@ -174,6 +174,18 @@ logging: cn.iocoder.yudao.coreservice.modules.system.dal.mysql: debug cn.iocoder.yudao.coreservice.modules.tool.dal.mysql: debug +--- #################### 微信公众å·ç›¸å…³é…ç½® #################### +wx: # å‚è§ https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档 + mp: + # 公众å·é…ç½®(å¿…å¡«) + app-id: wx041349c6f39b268b + secret: 5abee519483bc9f8cb37ce280e814bd0 + # 存储é…置,解决 AccessToken 的跨节点的共享 + config-storage: + type: RedisTemplate # 采用 RedisTemplate æ“作 Redis,会自动从 Spring ä¸­èŽ·å– + key-prefix: wx # Redis Key çš„å‰ç¼€ TODO 芋艿:解决下 Redis key 管ç†çš„é…ç½® + http-client-type: HttpClient # 采用 HttpClient 请求微信公众å·å¹³å° + --- #################### 芋é“相关é…ç½® #################### # 芋é“é…置项,设置当å‰é¡¹ç›®æ‰€æœ‰è‡ªå®šä¹‰çš„é…ç½® diff --git a/yudao-admin-server/src/main/resources/application.yaml b/yudao-admin-server/src/main/resources/application.yaml index 7652dd5be3..09bbc33ada 100644 --- a/yudao-admin-server/src/main/resources/application.yaml +++ b/yudao-admin-server/src/main/resources/application.yaml @@ -48,11 +48,17 @@ yudao: info: version: 1.0.0 base-package: cn.iocoder.yudao.adminserver + member-package: cn.iocoder.yudao.module.member core-service: base-package: cn.iocoder.yudao.coreservice web: - api-prefix: /api - controller-package: ${yudao.info.base-package} + admin-api: + prefix: /api + controller: ${yudao.info.base-package} + app-api: + prefix: /app-api + controller: cn.iocoder.yudao.module.member.controller.app + swagger: title: 管ç†åŽå° description: æä¾›ç®¡ç†å‘˜ç®¡ç†çš„æ‰€æœ‰åŠŸèƒ½ @@ -72,7 +78,13 @@ yudao: - cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants tenant: # 多租户相关é…置项 tables: # é…置需è¦å¼€å¯å¤šç§Ÿæˆ·çš„表;如果实体已ç»ç»§æ‰¿ TenantBaseDO 类,则无需é‡å¤é…ç½® - url: + url: ## TODO 芋艿:è¿ç§»åˆ° web é…置项下, admin-ui: http://dashboard.yudao.iocoder.cn # Admin 管ç†åŽå° UI çš„åœ°å€ + sms-code: # 短信验è¯ç ç›¸å…³çš„é…置项 + expire-times: 10m + send-frequency: 1m + send-maximum-quantity-per-day: 10 + begin-code: 9999 # 这里é…ç½® 9999 的原因是,测试方便。 + end-code: 9999 # 这里é…ç½® 9999 的原因是,测试方便。 debug: false diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/InfFileCoreService.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/InfFileCoreService.java index a594bcef4a..8ba8b57fe7 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/InfFileCoreService.java +++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/InfFileCoreService.java @@ -9,7 +9,6 @@ import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO; */ public interface InfFileCoreService { - /** * ä¿å­˜æ–‡ä»¶ï¼Œå¹¶è¿”回文件的访问路径 * diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/impl/SysSmsCoreServiceImpl.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/impl/SysSmsCoreServiceImpl.java index 3893ba3403..787d2a1d92 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/impl/SysSmsCoreServiceImpl.java +++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/impl/SysSmsCoreServiceImpl.java @@ -2,8 +2,6 @@ package cn.iocoder.yudao.coreservice.modules.system.service.sms.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO; -import cn.iocoder.yudao.coreservice.modules.member.service.user.MbrUserCoreService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.mq.message.sms.SysSmsSendMessage; @@ -43,8 +41,6 @@ public class SysSmsCoreServiceImpl implements SysSmsCoreService { @Resource private SysUserCoreService sysUserCoreService; @Resource - private MbrUserCoreService mbrUserCoreService; - @Resource private SysSmsTemplateCoreService smsTemplateCoreService; @Resource private SysSmsLogCoreService smsLogCoreService; @@ -72,10 +68,11 @@ public class SysSmsCoreServiceImpl implements SysSmsCoreService { public Long sendSingleSmsToMember(String mobile, Long userId, String templateCode, Map templateParams) { // 如果 mobile 为空,则加载用户编å·å¯¹åº”çš„æ‰‹æœºå· if (StrUtil.isEmpty(mobile)) { - MbrUserDO user = mbrUserCoreService.getUser(userId); - if (user != null) { - mobile = user.getMobile(); - } +// MbrUserDO user = mbrUserCoreService.getUser(userId); +// if (user != null) { +// mobile = user.getMobile(); +// } + // TODO èŠ‹è‰¿ï¼šé‡æž„ } // 执行å‘é€ return this.sendSingleSms(mobile, userId, UserTypeEnum.MEMBER.getValue(), templateCode, templateParams); diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/YudaoMybatisAutoConfiguration.java b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/YudaoMybatisAutoConfiguration.java index b03fc58e4c..d589ac7688 100644 --- a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/YudaoMybatisAutoConfiguration.java +++ b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/YudaoMybatisAutoConfiguration.java @@ -15,7 +15,8 @@ import org.springframework.context.annotation.Configuration; * @author èŠ‹é“æºç  */ @Configuration -@MapperScan(value = {"${yudao.info.base-package}", "${yudao.core-service.base-package}"}, annotationClass = Mapper.class, +@MapperScan(value = {"${yudao.info.base-package}", "${yudao.core-service.base-package}", "${yudao.info.member-package}"}, + annotationClass = Mapper.class, lazyInitialization = "${mybatis.lazy-initialization:false}") // Mapper 懒加载,目å‰ä»…用于å•元测试 public class YudaoMybatisAutoConfiguration { diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityAutoConfiguration.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityAutoConfiguration.java index 684cfed9a4..ae8b12422e 100644 --- a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityAutoConfiguration.java +++ b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityAutoConfiguration.java @@ -7,6 +7,9 @@ import cn.iocoder.yudao.framework.security.core.handler.AccessDeniedHandlerImpl; import cn.iocoder.yudao.framework.security.core.handler.AuthenticationEntryPointImpl; import cn.iocoder.yudao.framework.security.core.handler.LogoutSuccessHandlerImpl; import cn.iocoder.yudao.framework.security.core.service.SecurityAuthFrameworkService; +import cn.iocoder.yudao.framework.security.core.service.SecurityAuthService; +import cn.iocoder.yudao.framework.security.core.service.SecurityAuthServiceImpl; +import cn.iocoder.yudao.framework.web.config.WebProperties; import cn.iocoder.yudao.framework.web.core.handler.GlobalExceptionHandler; import org.springframework.beans.factory.config.MethodInvokingFactoryBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -20,6 +23,7 @@ import org.springframework.security.web.access.AccessDeniedHandler; import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; import javax.annotation.Resource; +import java.util.List; /** * Spring Security 自动é…置类,主è¦ç”¨äºŽç›¸å…³ç»„ä»¶çš„é…ç½® @@ -29,7 +33,7 @@ import javax.annotation.Resource; * * @author èŠ‹é“æºç  */ -@Configuration +@Configuration(proxyBeanMethods = false) @EnableConfigurationProperties(SecurityProperties.class) public class YudaoSecurityAutoConfiguration { @@ -64,8 +68,8 @@ public class YudaoSecurityAutoConfiguration { * 退出处ç†ç±» Bean */ @Bean - public LogoutSuccessHandler logoutSuccessHandler(SecurityAuthFrameworkService securityFrameworkService) { - return new LogoutSuccessHandlerImpl(securityProperties, securityFrameworkService); + public LogoutSuccessHandler logoutSuccessHandler(SecurityAuthService securityAuthService) { + return new LogoutSuccessHandlerImpl(securityProperties, securityAuthService); } /** @@ -83,9 +87,18 @@ public class YudaoSecurityAutoConfiguration { * Token 认è¯è¿‡æ»¤å™¨ Bean */ @Bean - public JWTAuthenticationTokenFilter authenticationTokenFilter(SecurityAuthFrameworkService securityFrameworkService, + public JWTAuthenticationTokenFilter authenticationTokenFilter(SecurityAuthService securityAuthService, GlobalExceptionHandler globalExceptionHandler) { - return new JWTAuthenticationTokenFilter(securityProperties, securityFrameworkService, globalExceptionHandler); + return new JWTAuthenticationTokenFilter(securityProperties, securityAuthService, globalExceptionHandler); + } + + /** + * 安全认è¯çš„ Service Bean + */ + @Bean + public SecurityAuthService securityAuthService(List securityFrameworkServices, + WebProperties webProperties) { + return new SecurityAuthServiceImpl(securityFrameworkServices, webProperties); } /** diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java index a0f1c87cc9..a00b2c2a66 100644 --- a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java +++ b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java @@ -65,13 +65,15 @@ public class YudaoWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdap */ @Resource private JWTAuthenticationTokenFilter authenticationTokenFilter; + /** * 自定义的æƒé™æ˜ å°„ Bean * * @see #configure(HttpSecurity) */ @Resource - private Customizer.ExpressionInterceptUrlRegistry> authorizeRequestsCustomizer; + private Customizer.ExpressionInterceptUrlRegistry> + authorizeRequestsCustomizer; /** * 由于 Spring Security 创建 AuthenticationManager 对象时,没声明 @Bean 注解,导致无法被注入 @@ -89,8 +91,8 @@ public class YudaoWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdap */ @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { - auth.userDetailsService(userDetailsService) - .passwordEncoder(passwordEncoder); + auth + .userDetailsService(userDetailsService).passwordEncoder(passwordEncoder); } /** @@ -123,16 +125,16 @@ public class YudaoWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdap // 一堆自定义的 Spring Security 处ç†å™¨ .exceptionHandling().authenticationEntryPoint(authenticationEntryPoint) .accessDeniedHandler(accessDeniedHandler).and() - .logout().logoutUrl(api("/logout")).logoutSuccessHandler(logoutSuccessHandler); // 登出 + .logout().logoutUrl(buildAdminApi("/logout")).logoutSuccessHandler(logoutSuccessHandler); // 登出 // 设置æ¯ä¸ªè¯·æ±‚çš„æƒé™ ①:全局共享规则 httpSecurity.authorizeRequests() // 登录的接å£ï¼Œå¯åŒ¿å访问 - .antMatchers(api("/login")).anonymous() + .antMatchers(buildAdminApi("/login")).anonymous() // 陿€èµ„æºï¼Œå¯åŒ¿å访问 .antMatchers(HttpMethod.GET, "/*.html", "/**/*.html", "/**/*.css", "/**/*.js").permitAll() // æ–‡ä»¶çš„èŽ·å–æŽ¥å£ï¼Œå¯åŒ¿å访问 - .antMatchers(api("/infra/file/get/**")).anonymous() + .antMatchers(buildAdminApi("/infra/file/get/**")).anonymous() // Swagger æŽ¥å£æ–‡æ¡£ .antMatchers("/swagger-ui.html").anonymous() .antMatchers("/swagger-resources/**").anonymous() @@ -143,11 +145,11 @@ public class YudaoWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdap .antMatchers("/actuator/**").anonymous() // Druid 监控 TODO 芋艿:等对接了 druid admin åŽï¼Œåœ¨è°ƒæ•´ä¸‹ã€‚ .antMatchers("/druid/**").anonymous() - // oAuth2 auth2/login/gitee - .antMatchers(api("/auth2/login/**")).anonymous() - .antMatchers(api("/auth2/authorization/**")).anonymous() + // oAuth2 auth2/login/gitee TODO 芋艿:貌似å¯ä»¥åˆ é™¤ + .antMatchers(buildAdminApi("/auth2/login/**")).anonymous() + .antMatchers(buildAdminApi("/auth2/authorization/**")).anonymous() .antMatchers("/api/callback/**").anonymous() - // 设置æ¯ä¸ªè¯·æ±‚çš„æƒé™ ②:æ¯ä¸ªé¡¹ç›®çš„自定义规则 + // 设置æ¯ä¸ªè¯·æ±‚çš„æƒé™ ②:æ¯ä¸ªé¡¹ç›®çš„自定义规则 TODO 芋艿:改造æˆå¤šä¸ªï¼Œæ–¹ä¾¿æ¯ä¸ªæ¨¡å—自定义规则 .and().authorizeRequests(authorizeRequestsCustomizer) // 设置æ¯ä¸ªè¯·æ±‚çš„æƒé™ â‘¢ï¼šå…œåº•è§„åˆ™ï¼Œå¿…é¡»è®¤è¯ .authorizeRequests().anyRequest().authenticated() @@ -156,8 +158,14 @@ public class YudaoWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdap httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class); } - private String api(String url) { - return webProperties.getApiPrefix() + url; + private String buildAdminApi(String url) { + // TODO èŠ‹è‰¿ï¼šå¤šæ¨¡å— + return webProperties.getAdminApi().getPrefix() + url; + } + + private String buildAppApi(String url) { + // TODO èŠ‹è‰¿ï¼šå¤šæ¨¡å— + return webProperties.getAppApi().getPrefix() + url; } } diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/filter/JWTAuthenticationTokenFilter.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/filter/JWTAuthenticationTokenFilter.java index c83318b0d7..61685e9029 100644 --- a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/filter/JWTAuthenticationTokenFilter.java +++ b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/filter/JWTAuthenticationTokenFilter.java @@ -2,17 +2,15 @@ package cn.iocoder.yudao.framework.security.core.filter; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; import cn.iocoder.yudao.framework.security.config.SecurityProperties; import cn.iocoder.yudao.framework.security.core.LoginUser; -import cn.iocoder.yudao.framework.security.core.service.SecurityAuthFrameworkService; +import cn.iocoder.yudao.framework.security.core.service.SecurityAuthService; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.framework.web.core.handler.GlobalExceptionHandler; -import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; import lombok.AllArgsConstructor; -import org.springframework.stereotype.Component; import org.springframework.web.filter.OncePerRequestFilter; -import javax.annotation.Resource; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -30,7 +28,7 @@ public class JWTAuthenticationTokenFilter extends OncePerRequestFilter { private final SecurityProperties securityProperties; - private final SecurityAuthFrameworkService authService; + private final SecurityAuthService authService; private final GlobalExceptionHandler globalExceptionHandler; @@ -42,10 +40,10 @@ public class JWTAuthenticationTokenFilter extends OncePerRequestFilter { if (StrUtil.isNotEmpty(token)) { try { // éªŒè¯ token 有效性 - LoginUser loginUser = authService.verifyTokenAndRefresh(token); + LoginUser loginUser = authService.verifyTokenAndRefresh(request, token); // 模拟 Login 功能,方便日常开å‘调试 if (loginUser == null) { - loginUser = this.mockLoginUser(token); + loginUser = this.mockLoginUser(request, token); } // 设置当å‰ç”¨æˆ· if (loginUser != null) { @@ -67,10 +65,11 @@ public class JWTAuthenticationTokenFilter extends OncePerRequestFilter { * * 注æ„,在线上环境下,一定è¦å…³é—­è¯¥åŠŸèƒ½ï¼ï¼ï¼ * + * @param request 请求 * @param token 模拟的 token,格å¼ä¸º {@link SecurityProperties#getTokenSecret()} + ç”¨æˆ·ç¼–å· * @return 模拟的 LoginUser */ - private LoginUser mockLoginUser(String token) { + private LoginUser mockLoginUser(HttpServletRequest request, String token) { if (!securityProperties.getMockEnable()) { return null; } @@ -79,7 +78,7 @@ public class JWTAuthenticationTokenFilter extends OncePerRequestFilter { return null; } Long userId = Long.valueOf(token.substring(securityProperties.getMockSecret().length())); - return authService.mockLogin(userId); + return authService.mockLogin(request, userId); } } diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/handler/LogoutSuccessHandlerImpl.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/handler/LogoutSuccessHandlerImpl.java index 1bf8091be6..e61b351c21 100644 --- a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/handler/LogoutSuccessHandlerImpl.java +++ b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/handler/LogoutSuccessHandlerImpl.java @@ -2,16 +2,14 @@ package cn.iocoder.yudao.framework.security.core.handler; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.security.config.SecurityProperties; -import cn.iocoder.yudao.framework.security.core.service.SecurityAuthFrameworkService; -import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; +import cn.iocoder.yudao.framework.security.config.SecurityProperties; +import cn.iocoder.yudao.framework.security.core.service.SecurityAuthService; +import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import lombok.AllArgsConstructor; import org.springframework.security.core.Authentication; import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; -import org.springframework.stereotype.Component; -import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -26,14 +24,14 @@ public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler { private final SecurityProperties securityProperties; - private final SecurityAuthFrameworkService securityFrameworkService; + private final SecurityAuthService authService; @Override public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) { // 执行退出 String token = SecurityFrameworkUtils.obtainAuthorization(request, securityProperties.getTokenHeader()); if (StrUtil.isNotBlank(token)) { - securityFrameworkService.logout(token); + authService.logout(request, token); } // 返回æˆåŠŸ ServletUtils.writeJSON(response, CommonResult.success(null)); diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/service/SecurityAuthFrameworkService.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/service/SecurityAuthFrameworkService.java index 28c8f6dc0c..1f76e161f8 100644 --- a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/service/SecurityAuthFrameworkService.java +++ b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/service/SecurityAuthFrameworkService.java @@ -1,10 +1,11 @@ package cn.iocoder.yudao.framework.security.core.service; +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.security.core.LoginUser; import org.springframework.security.core.userdetails.UserDetailsService; /** - * Security 框架 Auth Service 接å£ï¼Œå®šä¹‰ security 组件需è¦çš„功能 + * Security 框架 Auth Service 接å£ï¼Œå®šä¹‰ä¸åŒç”¨æˆ·ç±»åž‹çš„ {@link UserTypeEnum} 需è¦å®žçŽ°çš„æ–¹æ³• * * @author èŠ‹é“æºç  */ @@ -34,4 +35,11 @@ public interface SecurityAuthFrameworkService extends UserDetailsService { */ void logout(String token); + /** + * 获得用户类型。æ¯ä¸ªç”¨æˆ·ç±»åž‹ï¼Œå¯¹åº”一个 SecurityAuthFrameworkService 实现类。 + * + * @return 用户类型 + */ + UserTypeEnum getUserType(); + } diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/service/SecurityAuthService.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/service/SecurityAuthService.java new file mode 100644 index 0000000000..4fee9cd0d0 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/service/SecurityAuthService.java @@ -0,0 +1,43 @@ +package cn.iocoder.yudao.framework.security.core.service; + +import cn.iocoder.yudao.framework.security.core.LoginUser; + +import javax.servlet.http.HttpServletRequest; + +/** + * 安全认è¯çš„ Service 接å£ï¼Œå¯¹ security 组件æä¾›ç»Ÿä¸€çš„ Auth 相关的方法。 + * ä¸»è¦æ˜¯ä¼šåŸºäºŽ {@link HttpServletRequest} 傿•°ï¼ŒåŒ¹é…对应的 {@link SecurityAuthFrameworkService} 实现,然åŽè°ƒç”¨å…¶æ–¹æ³•。 + * 因此,在方法的定义上,和 {@link SecurityAuthFrameworkService} å·®ä¸å¤šã€‚ + * + * @author èŠ‹é“æºç  + */ +public interface SecurityAuthService { + + /** + * 校验 token 的有效性,并获å–ç”¨æˆ·ä¿¡æ¯ + * 通过åŽï¼Œåˆ·æ–° token 的过期时间 + * + * @param request 请求 + * @param token token + * @return ç”¨æˆ·ä¿¡æ¯ + */ + LoginUser verifyTokenAndRefresh(HttpServletRequest request, String token); + + /** + * 模拟指定用户编å·çš„ LoginUser + * + * @param request 请求 + * @param userId ç”¨æˆ·ç¼–å· + * @return 登录用户 + */ + LoginUser mockLogin(HttpServletRequest request, Long userId); + + /** + * 基于 token 退出登录 + * + * @param request 请求 + * @param token token + */ + void logout(HttpServletRequest request, String token); + +} diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/service/SecurityAuthServiceImpl.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/service/SecurityAuthServiceImpl.java new file mode 100644 index 0000000000..d9ab8eb0e1 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/service/SecurityAuthServiceImpl.java @@ -0,0 +1,64 @@ +package cn.iocoder.yudao.framework.security.core.service; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; +import cn.iocoder.yudao.framework.security.core.LoginUser; +import cn.iocoder.yudao.framework.web.config.WebProperties; + +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 安全认è¯çš„ Service 实现类,基于请求地å€ï¼Œè®¡ç®—到对应的 {@link UserTypeEnum} 枚举,从而拿到对应的 {@link SecurityAuthFrameworkService} 实现 + * + * @author èŠ‹é“æºç  + */ +public class SecurityAuthServiceImpl implements SecurityAuthService { + + private final Map services = new HashMap<>(); + private final WebProperties properties; + + public SecurityAuthServiceImpl(List serviceList, WebProperties properties) { + serviceList.forEach(service -> services.put(service.getUserType(), service)); + this.properties = properties; + } + + @Override + public LoginUser verifyTokenAndRefresh(HttpServletRequest request, String token) { + return selectService(request).verifyTokenAndRefresh(token); + } + + @Override + public LoginUser mockLogin(HttpServletRequest request, Long userId) { + return selectService(request).mockLogin(userId); + } + + @Override + public void logout(HttpServletRequest request, String token) { + selectService(request).logout(token); + } + + private SecurityAuthFrameworkService selectService(HttpServletRequest request) { + // 第一步,获得用户类型 + UserTypeEnum userType = getUserType(request); + // 第二步,获得 SecurityAuthFrameworkService + SecurityAuthFrameworkService service = services.get(userType); + Assert.notNull(service, "URI({}) 用户类型({}) 找ä¸åˆ° SecurityAuthFrameworkService 实现类", + request.getRequestURI(), userType); + return service; + } + + private UserTypeEnum getUserType(HttpServletRequest request) { + if (request.getRequestURI().startsWith(properties.getAdminApi().getPrefix())) { + return UserTypeEnum.ADMIN; + } + if (request.getRequestURI().startsWith(properties.getAppApi().getPrefix())) { + return UserTypeEnum.MEMBER; + } + throw new IllegalArgumentException(StrUtil.format("URI({}) 找ä¸åˆ°åŒ¹é…的用户类型", request.getRequestURI())); + } + +} diff --git a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/filter/ApiAccessLogFilter.java b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/filter/ApiAccessLogFilter.java index 57133c8409..3295e34c15 100644 --- a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/filter/ApiAccessLogFilter.java +++ b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/filter/ApiAccessLogFilter.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.framework.apilog.core.filter; import cn.hutool.core.exceptions.ExceptionUtil; import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.StrUtil; import cn.hutool.extra.servlet.ServletUtil; import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants; import cn.iocoder.yudao.framework.common.pojo.CommonResult; @@ -25,6 +26,8 @@ import java.io.IOException; import java.util.Date; import java.util.Map; +import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.*; + /** * API 访问日志 Filter * @@ -42,7 +45,8 @@ public class ApiAccessLogFilter extends OncePerRequestFilter { @Override protected boolean shouldNotFilter(HttpServletRequest request) { // åªè¿‡æ»¤ API è¯·æ±‚çš„åœ°å€ - return !request.getRequestURI().startsWith(webProperties.getApiPrefix()); + return !StrUtil.startWithAny(request.getRequestURI(), webProperties.getAppApi().getPrefix(), + webProperties.getAppApi().getPrefix()); } @Override @@ -73,7 +77,7 @@ public class ApiAccessLogFilter extends OncePerRequestFilter { this.buildApiAccessLogDTO(accessLog, request, beginTime, queryString, requestBody, ex); apiAccessLogFrameworkService.createApiAccessLogAsync(accessLog); } catch (Throwable th) { - log.error("[createApiAccessLog][url({}) log({}) å‘生异常]", request.getRequestURI(), JsonUtils.toJsonString(accessLog), th); + log.error("[createApiAccessLog][url({}) log({}) å‘生异常]", request.getRequestURI(), toJsonString(accessLog), th); } } @@ -99,7 +103,7 @@ public class ApiAccessLogFilter extends OncePerRequestFilter { accessLog.setApplicationName(applicationName); accessLog.setRequestUrl(request.getRequestURI()); Map requestParams = MapUtil.builder().put("query", queryString).put("body", requestBody).build(); - accessLog.setRequestParams(JsonUtils.toJsonString(requestParams)); + accessLog.setRequestParams(toJsonString(requestParams)); accessLog.setRequestMethod(request.getMethod()); accessLog.setUserAgent(ServletUtils.getUserAgent(request)); accessLog.setUserIp(ServletUtil.getClientIP(request)); diff --git a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/config/WebProperties.java b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/config/WebProperties.java index 2edc3e883c..23a4aff4a5 100644 --- a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/config/WebProperties.java +++ b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/config/WebProperties.java @@ -5,6 +5,8 @@ import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.validation.annotation.Validated; import org.springframework.web.servlet.config.annotation.PathMatchConfigurer; +import javax.validation.Valid; +import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; @ConfigurationProperties(prefix = "yudao.web") @@ -12,26 +14,37 @@ import javax.validation.constraints.NotNull; @Data public class WebProperties { - /** - * API å‰ç¼€ï¼Œå®žçŽ°æ‰€æœ‰ Controller æä¾›çš„ RESTFul API 的统一å‰ç¼€ - * - * - * æ„义:通过该å‰ç¼€ï¼Œé¿å… Swaggerã€Actuator æ„外通过 Nginx 暴露出æ¥ç»™å¤–部,带æ¥å®‰å…¨æ€§é—®é¢˜ - * 这样,Nginx åªéœ€è¦é…置转å‘到 /api/* 的所有接å£å³å¯ã€‚ - * - * @see YudaoWebAutoConfiguration#configurePathMatch(PathMatchConfigurer) - */ - @NotNull(message = "API å‰ç¼€ä¸èƒ½ä¸ºç©º") - private String apiPrefix; + @NotNull(message = "APP API ä¸èƒ½ä¸ºç©º") + private Api appApi; + @NotNull(message = "Admin API ä¸èƒ½ä¸ºç©º") + private Api adminApi; - /** - * Controller 所在包 - * - * 主è¦ç›®çš„æ˜¯ï¼Œç»™è¯¥ Controller 设置指定的 {@link #apiPrefix} - * - * 因为我们有多个 modules åŒ…é‡Œä¼šåŒ…å« Controller,所以åªéœ€è¦å†™åˆ° cn.iocoder.yudao 这样的层级 - */ - @NotNull(message = "Controller 所在包ä¸èƒ½ä¸ºç©º") - private String controllerPackage; + @Data + @Valid + public static class Api { + + /** + * API å‰ç¼€ï¼Œå®žçŽ°æ‰€æœ‰ Controller æä¾›çš„ RESTFul API 的统一å‰ç¼€ + * + * + * æ„义:通过该å‰ç¼€ï¼Œé¿å… Swaggerã€Actuator æ„外通过 Nginx 暴露出æ¥ç»™å¤–部,带æ¥å®‰å…¨æ€§é—®é¢˜ + * 这样,Nginx åªéœ€è¦é…置转å‘到 /api/* 的所有接å£å³å¯ã€‚ + * + * @see YudaoWebAutoConfiguration#configurePathMatch(PathMatchConfigurer) + */ + @NotEmpty(message = "API å‰ç¼€ä¸èƒ½ä¸ºç©º") + private String prefix; + + /** + * Controller 所在包 + * + * 主è¦ç›®çš„æ˜¯ï¼Œç»™è¯¥ Controller 设置指定的 {@link #prefix} + * + * 因为我们有多个 modules åŒ…é‡Œä¼šåŒ…å« Controller,所以åªéœ€è¦å†™åˆ° cn.iocoder.yudao 这样的层级 + */ + @NotEmpty(message = "Controller 所在包ä¸èƒ½ä¸ºç©º") + private String controller; + + } } diff --git a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/config/YudaoWebAutoConfiguration.java b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/config/YudaoWebAutoConfiguration.java index 5d390cdb17..c3bcb2009c 100644 --- a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/config/YudaoWebAutoConfiguration.java +++ b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/config/YudaoWebAutoConfiguration.java @@ -38,10 +38,19 @@ public class YudaoWebAutoConfiguration implements WebMvcConfigurer { @Override public void configurePathMatch(PathMatchConfigurer configurer) { - // 设置 API å‰ç¼€ï¼Œä»…ä»…åŒ¹é… controller 包下的 - configurer.addPathPrefix(webProperties.getApiPrefix(), clazz -> - clazz.isAnnotationPresent(RestController.class) - && clazz.getPackage().getName().startsWith(webProperties.getControllerPackage())); // ä»…ä»…åŒ¹é… controller 包 + configurePathMatch(configurer, webProperties.getAdminApi()); + configurePathMatch(configurer, webProperties.getAppApi()); + } + + /** + * 设置 API å‰ç¼€ï¼Œä»…ä»…åŒ¹é… controller 包下的 + * + * @param configurer é…ç½® + * @param api API é…ç½® + */ + private void configurePathMatch(PathMatchConfigurer configurer, WebProperties.Api api) { + configurer.addPathPrefix(api.getPrefix(), clazz -> clazz.isAnnotationPresent(RestController.class) + && clazz.getPackage().getName().startsWith(api.getController())); // ä»…ä»…åŒ¹é… controller 包 } @Bean diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApi.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/UserApi.java similarity index 60% rename from yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApi.java rename to yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/UserApi.java index 3ac616af89..ba742a2599 100644 --- a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApi.java +++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/UserApi.java @@ -1,13 +1,13 @@ package cn.iocoder.yudao.module.member.api.user; -import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; +import cn.iocoder.yudao.module.member.api.user.dto.UserRespDTO; /** * 会员用户的 API æŽ¥å£ * * @author èŠ‹é“æºç  */ -public interface MemberUserApi { +public interface UserApi { /** * èŽ·å¾—ä¼šå‘˜ç”¨æˆ·ä¿¡æ¯ @@ -15,6 +15,6 @@ public interface MemberUserApi { * @param id ç”¨æˆ·ç¼–å· * @return ç”¨æˆ·ä¿¡æ¯ */ - MemberUserRespDTO getMemberUser(Long id); + UserRespDTO getUser(Long id); } diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/dto/MemberUserRespDTO.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/dto/UserRespDTO.java similarity index 93% rename from yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/dto/MemberUserRespDTO.java rename to yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/dto/UserRespDTO.java index 82eec958a3..ef2ecde492 100644 --- a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/dto/MemberUserRespDTO.java +++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/dto/UserRespDTO.java @@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; * * @author èŠ‹é“æºç  */ -public class MemberUserRespDTO { +public class UserRespDTO { /** * 用户ID diff --git a/yudao-module-member/yudao-module-member-impl/pom.xml b/yudao-module-member/yudao-module-member-impl/pom.xml index d4b064f6af..de46508069 100644 --- a/yudao-module-member/yudao-module-member-impl/pom.xml +++ b/yudao-module-member/yudao-module-member-impl/pom.xml @@ -18,16 +18,18 @@ + + cn.iocoder.boot + yudao-module-member-api + ${revision} + + cn.iocoder.boot yudao-core-service - - cn.iocoder.boot - yudao-spring-boot-starter-biz-dict - cn.iocoder.boot yudao-spring-boot-starter-biz-sms @@ -38,11 +40,6 @@ - - cn.iocoder.boot - yudao-spring-boot-starter-web - - cn.iocoder.boot yudao-spring-boot-starter-security @@ -59,32 +56,12 @@ yudao-spring-boot-starter-redis - - - cn.iocoder.boot - yudao-spring-boot-starter-config - - - - cn.iocoder.boot yudao-spring-boot-starter-mq - - - cn.iocoder.boot - yudao-spring-boot-starter-protection - - - - - cn.iocoder.boot - yudao-spring-boot-starter-monitor - - cn.iocoder.boot diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/api/package-info.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/api/package-info.java new file mode 100644 index 0000000000..5f97979b88 --- /dev/null +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/api/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.member.api; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/api/user/UserApiImpl.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/api/user/UserApiImpl.java new file mode 100644 index 0000000000..656642e511 --- /dev/null +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/api/user/UserApiImpl.java @@ -0,0 +1,30 @@ +package cn.iocoder.yudao.module.member.api.user; + +import cn.iocoder.yudao.module.member.api.user.dto.UserRespDTO; +import cn.iocoder.yudao.module.member.convert.user.UserConvert; +import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.member.service.user.UserService; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; + +/** + * 会员用户的 API 实现类 + * + * @author èŠ‹é“æºç  + */ +@Service +@Validated +public class UserApiImpl implements UserApi { + + @Resource + private UserService userService; + + @Override + public UserRespDTO getUser(Long id) { + UserDO user = userService.getUser(id); + return UserConvert.INSTANCE.convert2(user); + } + +} diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/admin/address/package-info.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/admin/address/package-info.java new file mode 100644 index 0000000000..652bbb6f19 --- /dev/null +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/admin/address/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.member.controller.admin.address; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/package-info.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/package-info.java new file mode 100644 index 0000000000..23b3c23c4f --- /dev/null +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.member.controller.admin.user; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/package-info.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/package-info.java new file mode 100644 index 0000000000..c8c1021861 --- /dev/null +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.member.controller.app.address; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java index 76437eb9d8..3876e708bd 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java @@ -5,8 +5,8 @@ import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; import cn.iocoder.yudao.module.member.controller.app.auth.vo.*; -import cn.iocoder.yudao.userserver.modules.system.service.auth.SysAuthService; -import cn.iocoder.yudao.userserver.modules.system.service.sms.SysSmsCodeService; +import cn.iocoder.yudao.module.member.service.auth.AuthService; +import cn.iocoder.yudao.module.member.service.sms.SysSmsCodeService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -31,7 +31,8 @@ import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUti public class AppAuthController { @Resource - private SysAuthService authService; + private AuthService authService; + @Resource private SysSmsCodeService smsCodeService; @Resource @@ -55,7 +56,7 @@ public class AppAuthController { @PostMapping("/send-sms-code") @ApiOperation(value = "å‘逿‰‹æœºéªŒè¯ç ") - public CommonResult sendSmsCode(@RequestBody @Valid SysAuthSendSmsReqVO reqVO) { + public CommonResult sendSmsCode(@RequestBody @Valid AppAuthSendSmsReqVO reqVO) { smsCodeService.sendSmsCode(reqVO.getMobile(), reqVO.getScene(), getClientIP()); return success(true); } diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthCheckCodeReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthCheckCodeReqVO.java index 64cc22a3cf..6d33b18edd 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthCheckCodeReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthCheckCodeReqVO.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.member.controller.app.auth.vo; import cn.iocoder.yudao.framework.common.validation.InEnum; import cn.iocoder.yudao.framework.common.validation.Mobile; -import cn.iocoder.yudao.userserver.modules.system.enums.sms.SysSmsSceneEnum; +import cn.iocoder.yudao.module.member.enums.sms.SysSmsSceneEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; @@ -15,6 +15,7 @@ import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; +// TODO 芋艿:code review 相关逻辑 @ApiModel("APP 端 - 校验验è¯ç  Request VO") @Data @NoArgsConstructor @@ -37,4 +38,5 @@ public class AppAuthCheckCodeReqVO { @NotNull(message = "å‘é€åœºæ™¯ä¸èƒ½ä¸ºç©º") @InEnum(SysSmsSceneEnum.class) private Integer scene; + } diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthResetPasswordReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthResetPasswordReqVO.java index 5ae291fdb5..9f48ee6248 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthResetPasswordReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthResetPasswordReqVO.java @@ -13,6 +13,7 @@ import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.Pattern; +// TODO 芋艿:code review 相关逻辑 @ApiModel("APP 端 - é‡ç½®å¯†ç  Request VO") @Data @NoArgsConstructor diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppSendSmsReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSendSmsReqVO.java similarity index 88% rename from yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppSendSmsReqVO.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSendSmsReqVO.java index 7a7620d630..9e53351fea 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppSendSmsReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSendSmsReqVO.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.member.controller.app.auth.vo; import cn.iocoder.yudao.framework.common.validation.InEnum; import cn.iocoder.yudao.framework.common.validation.Mobile; -import cn.iocoder.yudao.userserver.modules.system.enums.sms.SysSmsSceneEnum; +import cn.iocoder.yudao.module.member.enums.sms.SysSmsSceneEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -13,7 +13,7 @@ import javax.validation.constraints.NotNull; @ApiModel("APP 端 - å‘逿‰‹æœºéªŒè¯ç  Response VO") @Data @Accessors(chain = true) -public class AppSendSmsReqVO { +public class AppAuthSendSmsReqVO { @ApiModelProperty(value = "手机å·", example = "15601691234") @Mobile diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthUpdatePasswordReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthUpdatePasswordReqVO.java index cbbd17fec5..4bbecbc311 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthUpdatePasswordReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthUpdatePasswordReqVO.java @@ -11,6 +11,7 @@ import org.hibernate.validator.constraints.Length; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; +// TODO 芋艿:code review 相关逻辑 @ApiModel("APP 端 - ä¿®æ”¹å¯†ç  Request VO") @Data @NoArgsConstructor diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppUserController.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppUserController.java index 758eb7b00a..cf5b5348c1 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppUserController.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppUserController.java @@ -1,13 +1,12 @@ package cn.iocoder.yudao.module.member.controller.app.user; -import cn.iocoder.yudao.userserver.modules.member.controller.user.vo.MbrUserInfoRespVO; -import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; -import cn.iocoder.yudao.userserver.modules.member.service.user.MbrUserService; -import cn.iocoder.yudao.userserver.modules.member.controller.user.vo.MbrUserUpdateMobileReqVO; -import cn.iocoder.yudao.userserver.modules.system.enums.sms.SysSmsSceneEnum; -import cn.iocoder.yudao.userserver.modules.system.service.sms.SysSmsCodeService; +import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoRespVO; +import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserUpdateMobileReqVO; +import cn.iocoder.yudao.module.member.convert.user.UserConvert; +import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.member.service.user.UserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -17,13 +16,12 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.validation.Valid; - import java.io.IOException; +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.*; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; -import static cn.iocoder.yudao.userserver.modules.member.enums.MbrErrorCodeConstants.FILE_IS_EMPTY; +import static cn.iocoder.yudao.module.member.enums.MemberErrorCodeConstants.FILE_IS_EMPTY; @Api(tags = "APP 端 - 用户个人中心") @RestController @@ -33,39 +31,40 @@ import static cn.iocoder.yudao.userserver.modules.member.enums.MbrErrorCodeConst public class AppUserController { @Resource - private MbrUserService userService; + private UserService userService; @PutMapping("/update-nickname") @ApiOperation("修改用户昵称") @PreAuthenticated - public CommonResult updateNickname(@RequestParam("nickname") String nickname) { - userService.updateNickname(getLoginUserId(), nickname); + public CommonResult updateUserNickname(@RequestParam("nickname") String nickname) { + userService.updateUserNickname(getLoginUserId(), nickname); return success(true); } @PutMapping("/update-avatar") @ApiOperation("修改用户头åƒ") @PreAuthenticated - public CommonResult updateAvatar(@RequestParam("avatarFile") MultipartFile file) throws IOException { + public CommonResult updateUserAvatar(@RequestParam("avatarFile") MultipartFile file) throws IOException { if (file.isEmpty()) { - throw ServiceExceptionUtil.exception(MbrErrorCodeConstants.FILE_IS_EMPTY); + throw exception(FILE_IS_EMPTY); } - String avatar = userService.updateAvatar(getLoginUserId(), file.getInputStream()); + String avatar = userService.updateUserAvatar(getLoginUserId(), file.getInputStream()); return success(avatar); } @GetMapping("/get") @ApiOperation("获得基本信æ¯") @PreAuthenticated - public CommonResult getUserInfo() { - return success(userService.getUserInfo(getLoginUserId())); + public CommonResult getUserInfo() { + UserDO user = userService.getUser(getLoginUserId()); + return success(UserConvert.INSTANCE.convert(user)); } @PostMapping("/update-mobile") @ApiOperation(value = "修改用户手机") @PreAuthenticated - public CommonResult updateMobile(@RequestBody @Valid MbrUserUpdateMobileReqVO reqVO) { - userService.updateMobile(getLoginUserId(), reqVO); + public CommonResult updateMobile(@RequestBody @Valid AppUserUpdateMobileReqVO reqVO) { + userService.updateUserMobile(getLoginUserId(), reqVO); return success(true); } diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppUserUpdateMobileReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppUserUpdateMobileReqVO.java index fe91566c96..ded94ef1a9 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppUserUpdateMobileReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppUserUpdateMobileReqVO.java @@ -38,6 +38,8 @@ public class AppUserUpdateMobileReqVO { @Pattern(regexp = "^[0-9]+$", message = "手机验è¯ç å¿…须都是数字") private String oldCode; + // TODO @芋艿:oldMobile 应该ä¸ç”¨ä¼ é€’ + @ApiModelProperty(value = "原手机å·",required = true,example = "15823654487") @NotBlank(message = "手机å·ä¸èƒ½ä¸ºç©º") @Length(min = 8, max = 11, message = "手机å·ç é•¿åº¦ä¸º 8-11 ä½") diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/auth/SysAuthConvert.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/auth/AuthConvert.java similarity index 63% rename from yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/auth/SysAuthConvert.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/auth/AuthConvert.java index df9a353a04..419a70e0ba 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/auth/SysAuthConvert.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/auth/AuthConvert.java @@ -1,21 +1,21 @@ package cn.iocoder.yudao.module.member.convert.auth; -import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.security.core.LoginUser; +import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.factory.Mappers; @Mapper -public interface SysAuthConvert { +public interface AuthConvert { - SysAuthConvert INSTANCE = Mappers.getMapper(SysAuthConvert.class); + AuthConvert INSTANCE = Mappers.getMapper(AuthConvert.class); @Mapping(source = "mobile", target = "username") - LoginUser convert0(MbrUserDO bean); + LoginUser convert0(UserDO bean); - default LoginUser convert(MbrUserDO bean) { + default LoginUser convert(UserDO bean) { // 目的,为了设置 UserTypeEnum.MEMBER.getValue() return convert0(bean).setUserType(UserTypeEnum.MEMBER.getValue()); } diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/user/UserConvert.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/user/UserConvert.java index 139b6ef330..a490edfafc 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/user/UserConvert.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/user/UserConvert.java @@ -1,6 +1,8 @@ package cn.iocoder.yudao.module.member.convert.user; -import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; +import cn.iocoder.yudao.module.member.api.user.dto.UserRespDTO; +import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoRespVO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -9,6 +11,7 @@ public interface UserConvert { UserConvert INSTANCE = Mappers.getMapper(UserConvert.class); - AppUserInfoRespVO convert(MemberUserDO bean); + AppUserInfoRespVO convert(UserDO bean); + UserRespDTO convert2(UserDO bean); } diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/UserDO.java similarity index 90% rename from yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/UserDO.java index 0b77f4e1e9..f451680442 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/UserDO.java @@ -10,19 +10,19 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import java.util.Date; /** - * 会员中心的用户 DO + * 会员用户 DO * * uk_mobile 索引:基于 {@link #mobile} 字段 * * @author èŠ‹é“æºç  */ -@TableName(value = "member_user", autoResultMap = true) +@TableName(value = "mbr_user", autoResultMap = true) @Data @EqualsAndHashCode(callSuper = true) @Builder @NoArgsConstructor @AllArgsConstructor -public class MemberUserDO extends TenantBaseDO { +public class UserDO extends TenantBaseDO { /** * 用户ID diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/sms/SysSmsCodeMapper.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/sms/SysSmsCodeMapper.java index 80079117f2..ccdbcf6cec 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/sms/SysSmsCodeMapper.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/sms/SysSmsCodeMapper.java @@ -3,10 +3,9 @@ package cn.iocoder.yudao.module.member.dal.mysql.sms; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; import cn.iocoder.yudao.module.member.dal.dataobject.sms.SysSmsCodeDO; -import cn.iocoder.yudao.userserver.modules.system.dal.dataobject.sms.SysSmsCodeDO; import org.apache.ibatis.annotations.Mapper; -// TODO @芋艿: +// TODO @芋艿:拿到 system 模å—下 @Mapper public interface SysSmsCodeMapper extends BaseMapperX { diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MbrUserMapper.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MbrUserMapper.java deleted file mode 100644 index 49b6a9f8e9..0000000000 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MbrUserMapper.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.iocoder.yudao.module.member.dal.mysql.user; - -import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import org.apache.ibatis.annotations.Mapper; - -/** - * MbrUserDO Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface MbrUserMapper extends BaseMapperX { - - default MbrUserDO selectByMobile(String mobile) { - return selectOne(MbrUserDO::getMobile, mobile); - } - -} diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/UserMapper.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/UserMapper.java new file mode 100644 index 0000000000..d962811e67 --- /dev/null +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/UserMapper.java @@ -0,0 +1,19 @@ +package cn.iocoder.yudao.module.member.dal.mysql.user; + +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 会员 User Mapper + * + * @author èŠ‹é“æºç  + */ +@Mapper +public interface UserMapper extends BaseMapperX { + + default UserDO selectByMobile(String mobile) { + return selectOne(UserDO::getMobile, mobile); + } + +} diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/package-info.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/package-info.java index 06c6545caf..5b05c46f14 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/package-info.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/package-info.java @@ -3,5 +3,7 @@ * 1. data object:数æ®å¯¹è±¡ * 2. redis:Redis çš„ CRUD æ“作 * 3. mysql:MySQL çš„ CRUD æ“作 + * + * 其中,MySQL 的表以 mbr_ 作为å‰ç¼€ */ package cn.iocoder.yudao.module.member.dal; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/redis/package-info.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/redis/package-info.java index f5d6e64d24..8dfa9fb20d 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/redis/package-info.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/redis/package-info.java @@ -1 +1,4 @@ +/** + * å ä½ï¼ŒåŽç»­æœ‰ç±»åŽï¼Œå¯ä»¥åˆ é™¤ï¼Œé¿å… package 无法æäº¤åˆ° Git 上 + */ package cn.iocoder.yudao.module.member.dal.redis; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/framework/security/SecurityConfiguration.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/framework/security/SecurityConfiguration.java deleted file mode 100644 index 32368f8d10..0000000000 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/framework/security/SecurityConfiguration.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.yudao.module.member.framework.security; - -import cn.iocoder.yudao.framework.web.config.WebProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.Customizer; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer; - -import javax.annotation.Resource; - -@Configuration -public class SecurityConfiguration { - - @Resource - private WebProperties webProperties; - - @Bean - public Customizer.ExpressionInterceptUrlRegistry> authorizeRequestsCustomizer() { - return registry -> { - registry.antMatchers(api("/**")).permitAll(); // 默认 API 都是用户å¯è®¿é—® - }; - } - - private String api(String url) { - return webProperties.getApiPrefix() + url; - } - -} diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/SysAuthService.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/AuthService.java similarity index 74% rename from yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/SysAuthService.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/AuthService.java index a864e1ed9d..98b87c505d 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/SysAuthService.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/AuthService.java @@ -6,13 +6,13 @@ import cn.iocoder.yudao.module.member.controller.app.auth.vo.*; import javax.validation.Valid; /** - * 用户å‰å°çš„è®¤è¯ Service æŽ¥å£ + * ä¼šå‘˜çš„è®¤è¯ Service æŽ¥å£ * * æä¾›ç”¨æˆ·çš„è´¦å·å¯†ç ç™»å½•ã€token 的校验等认è¯ç›¸å…³çš„功能 * * @author èŠ‹é“æºç  */ -public interface SysAuthService extends SecurityAuthFrameworkService { +public interface AuthService extends SecurityAuthFrameworkService { /** * 手机 + 密ç ç™»å½• @@ -22,7 +22,7 @@ public interface SysAuthService extends SecurityAuthFrameworkService { * @param userAgent 用户 UA * @return 身份令牌,使用 JWT æ–¹å¼ */ - String login(@Valid SysAuthLoginReqVO reqVO, String userIp, String userAgent); + String login(@Valid AppAuthLoginReqVO reqVO, String userIp, String userAgent); /** * 手机 + 验è¯ç ç™»é™† @@ -32,7 +32,7 @@ public interface SysAuthService extends SecurityAuthFrameworkService { * @param userAgent 用户 UA * @return 身份令牌,使用 JWT æ–¹å¼ */ - String smsLogin(@Valid SysAuthSmsLoginReqVO reqVO, String userIp, String userAgent); + String smsLogin(@Valid AppAuthSmsLoginReqVO reqVO, String userIp, String userAgent); /** @@ -43,7 +43,7 @@ public interface SysAuthService extends SecurityAuthFrameworkService { * @param userAgent 用户 UA * @return 身份令牌,使用 JWT æ–¹å¼ */ - String socialLogin(@Valid MbrAuthSocialLoginReqVO reqVO, String userIp, String userAgent); + String socialLogin(@Valid AppAuthSocialLoginReqVO reqVO, String userIp, String userAgent); /** * 社交登录,使用 æ‰‹æœºå· + 手机验è¯ç  @@ -53,7 +53,7 @@ public interface SysAuthService extends SecurityAuthFrameworkService { * @param userAgent 用户 UA * @return 身份令牌,使用 JWT æ–¹å¼ */ - String socialLogin2(@Valid MbrAuthSocialLogin2ReqVO reqVO, String userIp, String userAgent); + String socialLogin2(@Valid AppAuthSocialLogin2ReqVO reqVO, String userIp, String userAgent); /** * 社交绑定,使用 code 授æƒç  @@ -61,18 +61,19 @@ public interface SysAuthService extends SecurityAuthFrameworkService { * @param userId ç”¨æˆ·ç¼–å· * @param reqVO ç»‘å®šä¿¡æ¯ */ - void socialBind(Long userId, @Valid MbrAuthSocialBindReqVO reqVO); + void socialBind(Long userId, @Valid AppAuthSocialBindReqVO reqVO); /** * ä¿®æ”¹ç”¨æˆ·å¯†ç  * @param userId 用户id * @param userReqVO 用户请求实体类 */ - void updatePassword(Long userId,MbrAuthUpdatePasswordReqVO userReqVO); + void updatePassword(Long userId, AppAuthUpdatePasswordReqVO userReqVO); /** * å¿˜è®°å¯†ç  * @param userReqVO 用户请求实体类 */ - void resetPassword(MbrAuthResetPasswordReqVO userReqVO); + void resetPassword(AppAuthResetPasswordReqVO userReqVO); + } diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/SysAuthServiceImpl.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/AuthServiceImpl.java similarity index 72% rename from yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/SysAuthServiceImpl.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/AuthServiceImpl.java index fd68cff5e5..a28b6572db 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/SysAuthServiceImpl.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/AuthServiceImpl.java @@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.member.service.auth; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; -import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.social.SysSocialUserDO; import cn.iocoder.yudao.coreservice.modules.system.enums.logger.SysLoginLogTypeEnum; import cn.iocoder.yudao.coreservice.modules.system.enums.logger.SysLoginResultEnum; @@ -12,22 +11,20 @@ import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLo import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils; import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; import cn.iocoder.yudao.framework.security.core.LoginUser; -import cn.iocoder.yudao.userserver.modules.member.dal.mysql.user.MbrUserMapper; -import cn.iocoder.yudao.userserver.modules.member.service.user.MbrUserService; import cn.iocoder.yudao.module.member.controller.app.auth.vo.*; -import cn.iocoder.yudao.userserver.modules.system.convert.auth.SysAuthConvert; -import cn.iocoder.yudao.userserver.modules.system.enums.sms.SysSmsSceneEnum; -import cn.iocoder.yudao.userserver.modules.system.service.auth.SysAuthService; -import cn.iocoder.yudao.userserver.modules.system.service.sms.SysSmsCodeService; +import cn.iocoder.yudao.module.member.convert.auth.AuthConvert; +import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.member.dal.mysql.user.UserMapper; +import cn.iocoder.yudao.module.member.enums.sms.SysSmsSceneEnum; +import cn.iocoder.yudao.module.member.service.sms.SysSmsCodeService; +import cn.iocoder.yudao.module.member.service.user.UserService; import com.google.common.annotations.VisibleForTesting; import lombok.extern.slf4j.Slf4j; import me.zhyd.oauth.model.AuthUser; import org.springframework.context.annotation.Lazy; -import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.DisabledException; @@ -46,25 +43,23 @@ import java.util.Objects; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; -import static cn.iocoder.yudao.userserver.modules.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.member.enums.SysErrorCodeConstants.*; /** - * Auth Service 实现类 + * ä¼šå‘˜çš„è®¤è¯ Service æŽ¥å£ * * @author èŠ‹é“æºç  */ @Service @Slf4j -public class SysAuthServiceImpl implements SysAuthService { - - private static final UserTypeEnum USER_TYPE_ENUM = UserTypeEnum.MEMBER; +public class AuthServiceImpl implements AuthService { @Resource @Lazy // 延迟加载,因为存在相互ä¾èµ–的问题 private AuthenticationManager authenticationManager; @Resource - private MbrUserService userService; + private UserService userService; @Resource private SysSmsCodeService smsCodeService; @Resource @@ -74,28 +69,24 @@ public class SysAuthServiceImpl implements SysAuthService { @Resource private SysSocialCoreService socialService; - @Resource - private StringRedisTemplate stringRedisTemplate; @Resource private PasswordEncoder passwordEncoder; @Resource - private MbrUserMapper userMapper; - - private static final UserTypeEnum userTypeEnum = UserTypeEnum.MEMBER; + private UserMapper userMapper; @Override public UserDetails loadUserByUsername(String mobile) throws UsernameNotFoundException { // èŽ·å– username 对应的 SysUserDO - MbrUserDO user = userService.getUserByMobile(mobile); + UserDO user = userService.getUserByMobile(mobile); if (user == null) { throw new UsernameNotFoundException(mobile); } // 创建 LoginUser 对象 - return SysAuthConvert.INSTANCE.convert(user); + return AuthConvert.INSTANCE.convert(user); } @Override - public String login(SysAuthLoginReqVO reqVO, String userIp, String userAgent) { + public String login(AppAuthLoginReqVO reqVO, String userIp, String userAgent) { // 使用手机 + 密ç ï¼Œè¿›è¡Œç™»å½•。 LoginUser loginUser = this.login0(reqVO.getMobile(), reqVO.getPassword()); @@ -105,80 +96,77 @@ public class SysAuthServiceImpl implements SysAuthService { @Override @Transactional - public String smsLogin(SysAuthSmsLoginReqVO reqVO, String userIp, String userAgent) { + public String smsLogin(AppAuthSmsLoginReqVO reqVO, String userIp, String userAgent) { // 校验验è¯ç  smsCodeService.useSmsCode(reqVO.getMobile(), SysSmsSceneEnum.LOGIN_BY_SMS.getScene(), reqVO.getCode(), userIp); // 获得获得注册用户 - MbrUserDO user = userService.createUserIfAbsent(reqVO.getMobile(), userIp); + UserDO user = userService.createUserIfAbsent(reqVO.getMobile(), userIp); Assert.notNull(user, "获å–用户失败,结果为空"); // 执行登陆 this.createLoginLog(user.getMobile(), SysLoginLogTypeEnum.LOGIN_SMS, SysLoginResultEnum.SUCCESS); - LoginUser loginUser = SysAuthConvert.INSTANCE.convert(user); + LoginUser loginUser = AuthConvert.INSTANCE.convert(user); // 缓存登录用户到 Redis 中,返回 sessionId ç¼–å· return userSessionCoreService.createUserSession(loginUser, userIp, userAgent); } @Override - public String socialLogin(MbrAuthSocialLoginReqVO reqVO, String userIp, String userAgent) { + public String socialLogin(AppAuthSocialLoginReqVO reqVO, String userIp, String userAgent) { // 使用 code 授æƒç ï¼Œè¿›è¡Œç™»å½• AuthUser authUser = socialService.getAuthUser(reqVO.getType(), reqVO.getCode(), reqVO.getState()); org.springframework.util.Assert.notNull(authUser, "授æƒç”¨æˆ·ä¸ä¸ºç©º"); // 如果未绑定 SysSocialUserDO 用户,则无法自动登录,进行报错 String unionId = socialService.getAuthUserUnionId(authUser); - List socialUsers = socialService.getAllSocialUserList(reqVO.getType(), unionId, USER_TYPE_ENUM); + List socialUsers = socialService.getAllSocialUserList(reqVO.getType(), unionId, getUserType()); if (CollUtil.isEmpty(socialUsers)) { - throw ServiceExceptionUtil.exception(SysErrorCodeConstants.AUTH_THIRD_LOGIN_NOT_BIND); + throw exception(AUTH_THIRD_LOGIN_NOT_BIND); } // 自动登录 - MbrUserDO user = userService.getUser(socialUsers.get(0).getUserId()); + UserDO user = userService.getUser(socialUsers.get(0).getUserId()); if (user == null) { - throw ServiceExceptionUtil.exception(SysErrorCodeConstants.USER_NOT_EXISTS); + throw exception(USER_NOT_EXISTS); } this.createLoginLog(user.getMobile(), SysLoginLogTypeEnum.LOGIN_SOCIAL, SysLoginResultEnum.SUCCESS); // 创建 LoginUser 对象 - LoginUser loginUser = SysAuthConvert.INSTANCE.convert(user); + LoginUser loginUser = AuthConvert.INSTANCE.convert(user); // 绑定社交用户(更新) - socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, USER_TYPE_ENUM); + socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, getUserType()); // 缓存登录用户到 Redis 中,返回 sessionId ç¼–å· return userSessionCoreService.createUserSession(loginUser, userIp, userAgent); } @Override - public String socialLogin2(MbrAuthSocialLogin2ReqVO reqVO, String userIp, String userAgent) { + public String socialLogin2(AppAuthSocialLogin2ReqVO reqVO, String userIp, String userAgent) { AuthUser authUser = socialService.getAuthUser(reqVO.getType(), reqVO.getCode(), reqVO.getState()); org.springframework.util.Assert.notNull(authUser, "授æƒç”¨æˆ·ä¸ä¸ºç©º"); // 使用手机å·ã€æ‰‹æœºéªŒè¯ç ç™»å½• - SysAuthSmsLoginReqVO loginReqVO = SysAuthSmsLoginReqVO - .builder() - .mobile(reqVO.getMobile()) - .code(reqVO.getSmsCode()) - .build(); + AppAuthSmsLoginReqVO loginReqVO = AppAuthSmsLoginReqVO.builder() + .mobile(reqVO.getMobile()).code(reqVO.getSmsCode()).build(); String sessionId = this.smsLogin(loginReqVO, userIp, userAgent); LoginUser loginUser = userSessionCoreService.getLoginUser(sessionId); // 绑定社交用户(新增) - socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, USER_TYPE_ENUM); + socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, getUserType()); return sessionId; } @Override - public void socialBind(Long userId, MbrAuthSocialBindReqVO reqVO) { + public void socialBind(Long userId, AppAuthSocialBindReqVO reqVO) { // 使用 code 授æƒç ï¼Œè¿›è¡Œç™»å½• AuthUser authUser = socialService.getAuthUser(reqVO.getType(), reqVO.getCode(), reqVO.getState()); org.springframework.util.Assert.notNull(authUser, "授æƒç”¨æˆ·ä¸ä¸ºç©º"); // 绑定社交用户(新增) - socialService.bindSocialUser(userId, reqVO.getType(), authUser, USER_TYPE_ENUM); + socialService.bindSocialUser(userId, reqVO.getType(), authUser, getUserType()); } private LoginUser login0(String username, String password) { @@ -191,14 +179,14 @@ public class SysAuthServiceImpl implements SysAuthService { authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, password)); } catch (BadCredentialsException badCredentialsException) { this.createLoginLog(username, logTypeEnum, SysLoginResultEnum.BAD_CREDENTIALS); - throw ServiceExceptionUtil.exception(SysErrorCodeConstants.AUTH_LOGIN_BAD_CREDENTIALS); + throw exception(AUTH_LOGIN_BAD_CREDENTIALS); } catch (DisabledException disabledException) { this.createLoginLog(username, logTypeEnum, SysLoginResultEnum.USER_DISABLED); - throw ServiceExceptionUtil.exception(SysErrorCodeConstants.AUTH_LOGIN_USER_DISABLED); + throw exception(AUTH_LOGIN_USER_DISABLED); } catch (AuthenticationException authenticationException) { log.error("[login0][username({}) å‘生未知异常]", username, authenticationException); this.createLoginLog(username, logTypeEnum, SysLoginResultEnum.UNKNOWN_ERROR); - throw ServiceExceptionUtil.exception(SysErrorCodeConstants.AUTH_LOGIN_FAIL_UNKNOWN); + throw exception(AUTH_LOGIN_FAIL_UNKNOWN); } // 登录æˆåŠŸçš„æ—¥å¿— Assert.notNull(authentication.getPrincipal(), "Principal ä¸ä¼šä¸ºç©º"); @@ -208,7 +196,7 @@ public class SysAuthServiceImpl implements SysAuthService { private void createLoginLog(String mobile, SysLoginLogTypeEnum logTypeEnum, SysLoginResultEnum loginResult) { // 获得用户 - MbrUserDO user = userService.getUserByMobile(mobile); + UserDO user = userService.getUserByMobile(mobile); // æ’入登录日志 SysLoginLogCreateReqDTO reqDTO = new SysLoginLogCreateReqDTO(); reqDTO.setLogType(logTypeEnum.getType()); @@ -246,10 +234,11 @@ public class SysAuthServiceImpl implements SysAuthService { return; } - // 釿–°åŠ è½½ MbrUserDO ä¿¡æ¯ - MbrUserDO user = userService.getUser(loginUser.getId()); + // 釿–°åŠ è½½ UserDO ä¿¡æ¯ + UserDO user = userService.getUser(loginUser.getId()); if (user == null || CommonStatusEnum.DISABLE.getStatus().equals(user.getStatus())) { - throw ServiceExceptionUtil.exception(SysErrorCodeConstants.AUTH_TOKEN_EXPIRED); // 校验 token 时,用户被ç¦ç”¨çš„æƒ…况下,也认为 token 过期,方便å‰ç«¯è·³è½¬åˆ°ç™»å½•ç•Œé¢ + // 校验 token 时,用户被ç¦ç”¨çš„æƒ…况下,也认为 token 过期,方便å‰ç«¯è·³è½¬åˆ°ç™»å½•ç•Œé¢ + throw exception(AUTH_TOKEN_EXPIRED); } // 刷新 LoginUser 缓存 @@ -258,8 +247,8 @@ public class SysAuthServiceImpl implements SysAuthService { @Override public LoginUser mockLogin(Long userId) { - // 获å–用户编å·å¯¹åº”çš„ MbrUserDO - MbrUserDO user = userService.getUser(userId); + // 获å–用户编å·å¯¹åº”çš„ UserDO + UserDO user = userService.getUser(userId); if (user == null) { throw new UsernameNotFoundException(String.valueOf(userId)); } @@ -268,7 +257,7 @@ public class SysAuthServiceImpl implements SysAuthService { this.createLoginLog(user.getMobile(), SysLoginLogTypeEnum.LOGIN_MOCK, SysLoginResultEnum.SUCCESS); // 创建 LoginUser 对象 - return SysAuthConvert.INSTANCE.convert(user); + return AuthConvert.INSTANCE.convert(user); } @Override @@ -285,27 +274,32 @@ public class SysAuthServiceImpl implements SysAuthService { } @Override - public void updatePassword(Long userId,MbrAuthUpdatePasswordReqVO reqVO) { + public UserTypeEnum getUserType() { + return UserTypeEnum.MEMBER; + } + + @Override + public void updatePassword(Long userId, AppAuthUpdatePasswordReqVO reqVO) { // æ£€éªŒæ—§å¯†ç  - MbrUserDO userDO = checkOldPassword(userId, reqVO.getOldPassword()); + UserDO userDO = checkOldPassword(userId, reqVO.getOldPassword()); // æ›´æ–°ç”¨æˆ·å¯†ç  - MbrUserDO mbrUserDO = MbrUserDO.builder().build(); - mbrUserDO.setId(userDO.getId()); - mbrUserDO.setPassword(passwordEncoder.encode(reqVO.getPassword())); + UserDO mbrUserDO = UserDO.builder().id(userDO.getId()) + .password(passwordEncoder.encode(reqVO.getPassword())).build(); userMapper.updateById(mbrUserDO); } @Override - public void resetPassword(MbrAuthResetPasswordReqVO reqVO) { + public void resetPassword(AppAuthResetPasswordReqVO reqVO) { // 检验用户是å¦å­˜åœ¨ - MbrUserDO userDO = checkUserIfExists(reqVO.getMobile()); + UserDO userDO = checkUserIfExists(reqVO.getMobile()); // 使用验è¯ç  - smsCodeService.useSmsCode(reqVO.getMobile(),SysSmsSceneEnum.FORGET_MOBILE_BY_SMS.getScene(),reqVO.getCode(),getClientIP()); + smsCodeService.useSmsCode(reqVO.getMobile(),SysSmsSceneEnum.FORGET_MOBILE_BY_SMS.getScene(), reqVO.getCode(), + getClientIP()); // æ›´æ–°å¯†ç  - MbrUserDO mbrUserDO = MbrUserDO.builder().build(); + UserDO mbrUserDO = UserDO.builder().build(); mbrUserDO.setId(userDO.getId()); mbrUserDO.setPassword(passwordEncoder.encode(reqVO.getPassword())); userMapper.updateById(mbrUserDO); @@ -316,36 +310,35 @@ public class SysAuthServiceImpl implements SysAuthService { * * @param id 用户 id * @param oldPassword æ—§å¯†ç  - * @return MbrUserDO 用户实体 + * @return MemberUserDO 用户实体 */ @VisibleForTesting - public MbrUserDO checkOldPassword(Long id, String oldPassword) { - MbrUserDO user = userMapper.selectById(id); + public UserDO checkOldPassword(Long id, String oldPassword) { + UserDO user = userMapper.selectById(id); if (user == null) { - throw ServiceExceptionUtil.exception(SysErrorCodeConstants.USER_NOT_EXISTS); + throw exception(USER_NOT_EXISTS); } // 傿•°ï¼šæœªåР坆坆ç ï¼Œç¼–ç åŽçš„å¯†ç  if (!passwordEncoder.matches(oldPassword,user.getPassword())) { - throw ServiceExceptionUtil.exception(SysErrorCodeConstants.USER_PASSWORD_FAILED); + throw exception(USER_PASSWORD_FAILED); } return user; } - public MbrUserDO checkUserIfExists(String mobile) { - MbrUserDO user = userMapper.selectByMobile(mobile); + public UserDO checkUserIfExists(String mobile) { + UserDO user = userMapper.selectByMobile(mobile); if (user == null) { - throw ServiceExceptionUtil.exception(SysErrorCodeConstants.USER_NOT_EXISTS); + throw exception(USER_NOT_EXISTS); } return user; } - private void createLogoutLog(Long userId, String username) { SysLoginLogCreateReqDTO reqDTO = new SysLoginLogCreateReqDTO(); reqDTO.setLogType(SysLoginLogTypeEnum.LOGOUT_SELF.getType()); reqDTO.setTraceId(TracerUtils.getTraceId()); reqDTO.setUserId(userId); - reqDTO.setUserType(USER_TYPE_ENUM.getValue()); + reqDTO.setUserType(getUserType().getValue()); reqDTO.setUsername(username); reqDTO.setUserAgent(ServletUtils.getUserAgent()); reqDTO.setUserIp(getClientIP()); diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/package-info.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/package-info.java deleted file mode 100644 index 6223e6e6ca..0000000000 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.module.member.service; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/sms/SysSmsCodeService.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/sms/SysSmsCodeService.java index 8f0eaf6f33..e06e9a246f 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/sms/SysSmsCodeService.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/sms/SysSmsCodeService.java @@ -2,8 +2,8 @@ package cn.iocoder.yudao.module.member.service.sms; import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.common.validation.Mobile; -import cn.iocoder.yudao.userserver.modules.system.dal.dataobject.sms.SysSmsCodeDO; -import cn.iocoder.yudao.userserver.modules.system.enums.sms.SysSmsSceneEnum; +import cn.iocoder.yudao.module.member.dal.dataobject.sms.SysSmsCodeDO; +import cn.iocoder.yudao.module.member.enums.sms.SysSmsSceneEnum; /** * 短信验è¯ç  Service æŽ¥å£ @@ -40,7 +40,6 @@ public interface SysSmsCodeService { */ void sendSmsCodeLogin(Long userId); - /** * 检查验è¯ç æ˜¯å¦æœ‰æ•ˆ * @param mobile 手机 diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/sms/SysSmsCodeServiceImpl.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/sms/SysSmsCodeServiceImpl.java index 43b7a1753c..41049656d0 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/sms/SysSmsCodeServiceImpl.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/sms/SysSmsCodeServiceImpl.java @@ -1,15 +1,14 @@ package cn.iocoder.yudao.module.member.service.sms; import cn.hutool.core.map.MapUtil; -import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO; import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsCoreService; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; -import cn.iocoder.yudao.userserver.modules.member.service.user.MbrUserService; -import cn.iocoder.yudao.userserver.modules.system.dal.dataobject.sms.SysSmsCodeDO; -import cn.iocoder.yudao.userserver.modules.system.dal.mysql.sms.SysSmsCodeMapper; -import cn.iocoder.yudao.userserver.modules.system.enums.sms.SysSmsSceneEnum; -import cn.iocoder.yudao.userserver.modules.system.framework.sms.SmsCodeProperties; -import cn.iocoder.yudao.userserver.modules.system.service.sms.SysSmsCodeService; +import cn.iocoder.yudao.module.member.dal.dataobject.sms.SysSmsCodeDO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.member.dal.mysql.sms.SysSmsCodeMapper; +import cn.iocoder.yudao.module.member.enums.sms.SysSmsSceneEnum; +import cn.iocoder.yudao.module.member.framework.sms.SmsCodeProperties; +import cn.iocoder.yudao.module.member.service.user.UserService; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -17,9 +16,8 @@ import javax.annotation.Resource; import java.util.Date; import static cn.hutool.core.util.RandomUtil.randomInt; -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; -import static cn.iocoder.yudao.userserver.modules.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.member.enums.SysErrorCodeConstants.*; /** * 短信验è¯ç  Service 实现类 @@ -37,7 +35,7 @@ public class SysSmsCodeServiceImpl implements SysSmsCodeService { private SysSmsCodeMapper smsCodeMapper; @Resource - private MbrUserService mbrUserService; + private UserService userService; @Resource private SysSmsCoreService smsCoreService; @@ -62,9 +60,9 @@ public class SysSmsCodeServiceImpl implements SysSmsCodeService { public void checkMobileIsRegister(String mobile, Integer scene) { // æ£€æµ‹æ‰‹æœºå·æ˜¯å¦å·²è¢«ä½¿ç”¨ - MbrUserDO userByMobile = mbrUserService.getUserByMobile(mobile); - if (userByMobile != null){ - throw ServiceExceptionUtil.exception(SysErrorCodeConstants.USER_SMS_CODE_IS_EXISTS); + UserDO user = userService.getUserByMobile(mobile); + if (user != null) { + throw ServiceExceptionUtil.exception(USER_SMS_CODE_IS_EXISTS); } // å‘é€çŸ­ä¿¡ @@ -76,11 +74,11 @@ public class SysSmsCodeServiceImpl implements SysSmsCodeService { SysSmsCodeDO lastSmsCode = smsCodeMapper.selectLastByMobile(mobile, null,null); if (lastSmsCode != null) { if (lastSmsCode.getTodayIndex() >= smsCodeProperties.getSendMaximumQuantityPerDay()) { // 超过当天å‘é€çš„上é™ã€‚ - throw ServiceExceptionUtil.exception(SysErrorCodeConstants.USER_SMS_CODE_EXCEED_SEND_MAXIMUM_QUANTITY_PER_DAY); + throw ServiceExceptionUtil.exception(USER_SMS_CODE_EXCEED_SEND_MAXIMUM_QUANTITY_PER_DAY); } if (System.currentTimeMillis() - lastSmsCode.getCreateTime().getTime() < smsCodeProperties.getSendFrequency().toMillis()) { // å‘é€è¿‡äºŽé¢‘ç¹ - throw ServiceExceptionUtil.exception(SysErrorCodeConstants.USER_SMS_CODE_SEND_TOO_FAST); + throw ServiceExceptionUtil.exception(USER_SMS_CODE_SEND_TOO_FAST); } // TODO 芋艿:æå‡ï¼Œæ¯ä¸ª IP æ¯å¤©å¯å‘逿•°é‡ // TODO 芋艿:æå‡ï¼Œæ¯ä¸ª IP æ¯å°æ—¶å¯å‘逿•°é‡ @@ -97,13 +95,12 @@ public class SysSmsCodeServiceImpl implements SysSmsCodeService { @Override public void useSmsCode(String mobile, Integer scene, String code, String usedIp) { - // 检测验è¯ç æ˜¯å¦æœ‰æ•ˆ SysSmsCodeDO lastSmsCode = this.checkCodeIsExpired(mobile, code, scene); // 判断验è¯ç æ˜¯å¦å·²è¢«ä½¿ç”¨ if (Boolean.TRUE.equals(lastSmsCode.getUsed())) { - throw ServiceExceptionUtil.exception(SysErrorCodeConstants.USER_SMS_CODE_USED); + throw ServiceExceptionUtil.exception(USER_SMS_CODE_USED); } // 使用验è¯ç  @@ -113,9 +110,9 @@ public class SysSmsCodeServiceImpl implements SysSmsCodeService { @Override public void sendSmsCodeLogin(Long userId) { - MbrUserDO user = mbrUserService.getUser(userId); + UserDO user = userService.getUser(userId); if (user == null){ - throw ServiceExceptionUtil.exception(SysErrorCodeConstants.USER_NOT_EXISTS); + throw ServiceExceptionUtil.exception(USER_NOT_EXISTS); } // å‘é€éªŒè¯ç  this.sendSmsCode(user.getMobile(),SysSmsSceneEnum.CHANGE_MOBILE_BY_SMS.getScene(), getClientIP()); @@ -128,15 +125,13 @@ public class SysSmsCodeServiceImpl implements SysSmsCodeService { // 若验è¯ç ä¸å­˜åœ¨ï¼ŒæŠ›å‡ºå¼‚常 if (lastSmsCode == null) { - throw ServiceExceptionUtil.exception(SysErrorCodeConstants.USER_SMS_CODE_NOT_FOUND); + throw ServiceExceptionUtil.exception(USER_SMS_CODE_NOT_FOUND); } if (System.currentTimeMillis() - lastSmsCode.getCreateTime().getTime() >= smsCodeProperties.getExpireTimes().toMillis()) { // 验è¯ç å·²è¿‡æœŸ - throw ServiceExceptionUtil.exception(SysErrorCodeConstants.USER_SMS_CODE_EXPIRED); + throw ServiceExceptionUtil.exception(USER_SMS_CODE_EXPIRED); } - return lastSmsCode; - } } diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MbrUserService.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/UserService.java similarity index 57% rename from yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MbrUserService.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/UserService.java index be02945c97..454e19dc63 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MbrUserService.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/UserService.java @@ -1,18 +1,18 @@ package cn.iocoder.yudao.module.member.service.user; -import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO; -import cn.iocoder.yudao.userserver.modules.member.controller.user.vo.MbrUserInfoRespVO; import cn.iocoder.yudao.framework.common.validation.Mobile; -import cn.iocoder.yudao.userserver.modules.member.controller.user.vo.MbrUserUpdateMobileReqVO; +import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoRespVO; +import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserUpdateMobileReqVO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO; import java.io.InputStream; /** - * å‰å°ç”¨æˆ· Service æŽ¥å£ + * 会员用户 Service æŽ¥å£ * * @author èŠ‹é“æºç  */ -public interface MbrUserService { +public interface UserService { /** * 通过手机查询用户 @@ -20,7 +20,7 @@ public interface MbrUserService { * @param mobile 手机 * @return 用户对象 */ - MbrUserDO getUserByMobile(String mobile); + UserDO getUserByMobile(String mobile); /** * 基于手机å·åˆ›å»ºç”¨æˆ·ã€‚ @@ -30,7 +30,7 @@ public interface MbrUserService { * @param registerIp 注册 IP * @return 用户对象 */ - MbrUserDO createUserIfAbsent(@Mobile String mobile, String registerIp); + UserDO createUserIfAbsent(@Mobile String mobile, String registerIp); /** * 更新用户的最åŽç™»é™†ä¿¡æ¯ @@ -46,14 +46,14 @@ public interface MbrUserService { * @param id 用户ID * @return ç”¨æˆ·å¯¹è±¡ä¿¡æ¯ */ - MbrUserDO getUser(Long id); + UserDO getUser(Long id); /** * 修改用户昵称 * @param userId 用户id * @param nickname 用户新昵称 */ - void updateNickname(Long userId, String nickname); + void updateUserNickname(Long userId, String nickname); /** * ä¿®æ”¹ç”¨æˆ·å¤´åƒ @@ -61,21 +61,13 @@ public interface MbrUserService { * @param inputStream å¤´åƒæ–‡ä»¶ * @return 头åƒurl */ - String updateAvatar(Long userId, InputStream inputStream); - - /** - * æ ¹æ®ç”¨æˆ·id,获å–用户头åƒä¸Žæ˜µç§° - * - * @param userId 用户id - * @return 用户å“应实体类 - */ - MbrUserInfoRespVO getUserInfo(Long userId); + String updateUserAvatar(Long userId, InputStream inputStream); /** * 修改手机 * @param userId 用户id * @param reqVO 请求实体 */ - void updateMobile(Long userId, MbrUserUpdateMobileReqVO reqVO); + void updateUserMobile(Long userId, AppUserUpdateMobileReqVO reqVO); } diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MbrUserServiceImpl.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/UserServiceImpl.java similarity index 51% rename from yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MbrUserServiceImpl.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/UserServiceImpl.java index de53135986..a899b79e66 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MbrUserServiceImpl.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/UserServiceImpl.java @@ -3,17 +3,15 @@ package cn.iocoder.yudao.module.member.service.user; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.IdUtil; import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; -import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; -import cn.iocoder.yudao.userserver.modules.member.controller.user.vo.MbrUserInfoRespVO; -import cn.iocoder.yudao.userserver.modules.member.controller.user.vo.MbrUserUpdateMobileReqVO; -import cn.iocoder.yudao.userserver.modules.member.convert.user.UserProfileConvert; -import cn.iocoder.yudao.userserver.modules.member.dal.mysql.user.MbrUserMapper; -import cn.iocoder.yudao.userserver.modules.member.service.user.MbrUserService; -import cn.iocoder.yudao.userserver.modules.system.dal.dataobject.sms.SysSmsCodeDO; -import cn.iocoder.yudao.userserver.modules.system.enums.sms.SysSmsSceneEnum; -import cn.iocoder.yudao.userserver.modules.system.service.sms.SysSmsCodeService; +import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserUpdateMobileReqVO; +import cn.iocoder.yudao.module.member.dal.dataobject.sms.SysSmsCodeDO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.member.dal.mysql.user.UserMapper; +import cn.iocoder.yudao.module.member.enums.SysErrorCodeConstants; +import cn.iocoder.yudao.module.member.enums.sms.SysSmsSceneEnum; +import cn.iocoder.yudao.module.member.service.sms.SysSmsCodeService; import com.google.common.annotations.VisibleForTesting; import lombok.extern.slf4j.Slf4j; import org.springframework.security.crypto.password.PasswordEncoder; @@ -27,41 +25,38 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; -import static cn.iocoder.yudao.userserver.modules.member.enums.MbrErrorCodeConstants.USER_NOT_EXISTS; -import static cn.iocoder.yudao.userserver.modules.system.enums.SysErrorCodeConstants.USER_SMS_CODE_IS_UNUSED; +import static cn.iocoder.yudao.module.member.enums.MemberErrorCodeConstants.USER_NOT_EXISTS; /** - * User Service 实现类 + * 会员 User Service 实现类 * * @author èŠ‹é“æºç  */ @Service @Valid @Slf4j -public class MbrUserServiceImpl implements MbrUserService { +public class UserServiceImpl implements UserService { @Resource - private MbrUserMapper userMapper; + private UserMapper memberUserMapper; @Resource private InfFileCoreService fileCoreService; + @Resource + private SysSmsCodeService smsCodeService; @Resource private PasswordEncoder passwordEncoder; - @Resource - private SysSmsCodeService smsCodeService; - - @Override - public MbrUserDO getUserByMobile(String mobile) { - return userMapper.selectByMobile(mobile); + public UserDO getUserByMobile(String mobile) { + return memberUserMapper.selectByMobile(mobile); } @Override - public MbrUserDO createUserIfAbsent(String mobile, String registerIp) { + public UserDO createUserIfAbsent(String mobile, String registerIp) { // 用户已ç»å­˜åœ¨ - MbrUserDO user = userMapper.selectByMobile(mobile); + UserDO user = memberUserMapper.selectByMobile(mobile); if (user != null) { return user; } @@ -69,94 +64,84 @@ public class MbrUserServiceImpl implements MbrUserService { return this.createUser(mobile, registerIp); } - private MbrUserDO createUser(String mobile, String registerIp) { + private UserDO createUser(String mobile, String registerIp) { // 生æˆå¯†ç  String password = IdUtil.fastSimpleUUID(); // æ’入用户 - MbrUserDO user = new MbrUserDO(); + UserDO user = new UserDO(); user.setMobile(mobile); user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // é»˜è®¤å¼€å¯ user.setPassword(passwordEncoder.encode(password)); // åŠ å¯†å¯†ç  user.setRegisterIp(registerIp); - userMapper.insert(user); + memberUserMapper.insert(user); return user; } @Override public void updateUserLogin(Long id, String loginIp) { - userMapper.updateById(new MbrUserDO().setId(id).setLoginIp(loginIp).setLoginDate(new Date())); + memberUserMapper.updateById(new UserDO().setId(id) + .setLoginIp(loginIp).setLoginDate(new Date())); } @Override - public MbrUserDO getUser(Long id) { - return userMapper.selectById(id); + public UserDO getUser(Long id) { + return memberUserMapper.selectById(id); } @Override - public void updateNickname(Long userId, String nickname) { - MbrUserDO user = this.checkUserExists(userId); + public void updateUserNickname(Long userId, String nickname) { + UserDO user = this.checkUserExists(userId); // 仅当新昵称ä¸ç­‰äºŽæ—§æ˜µç§°æ—¶è¿›è¡Œä¿®æ”¹ if (nickname.equals(user.getNickname())){ return; } - MbrUserDO userDO = new MbrUserDO(); + UserDO userDO = new UserDO(); userDO.setId(user.getId()); userDO.setNickname(nickname); - userMapper.updateById(userDO); + memberUserMapper.updateById(userDO); } @Override - public String updateAvatar(Long userId, InputStream avatarFile) { + public String updateUserAvatar(Long userId, InputStream avatarFile) { this.checkUserExists(userId); // 创建文件 String avatar = fileCoreService.createFile(IdUtil.fastUUID(), IoUtil.readBytes(avatarFile)); // 更新头åƒè·¯å¾„ - MbrUserDO userDO = MbrUserDO.builder() - .id(userId) - .avatar(avatar) - .build(); - userMapper.updateById(userDO); + memberUserMapper.updateById(UserDO.builder().id(userId).avatar(avatar).build()); return avatar; } - @Override - public MbrUserInfoRespVO getUserInfo(Long userId) { - MbrUserDO user = this.checkUserExists(userId); - // 拼接返回结果 - return UserProfileConvert.INSTANCE.convert(user); - } - - @Override @Transactional(rollbackFor = Exception.class) - public void updateMobile(Long userId, MbrUserUpdateMobileReqVO reqVO) { + public void updateUserMobile(Long userId, AppUserUpdateMobileReqVO reqVO) { // 检测用户是å¦å­˜åœ¨ checkUserExists(userId); // 校验旧手机和旧验è¯ç  - SysSmsCodeDO sysSmsCodeDO = smsCodeService.checkCodeIsExpired(reqVO.getOldMobile(), reqVO.getOldCode(), SysSmsSceneEnum.CHANGE_MOBILE_BY_SMS.getScene()); - // 判断旧codeæ˜¯å¦æœªè¢«ä½¿ç”¨ï¼Œå¦‚果是,抛出异常 + SysSmsCodeDO sysSmsCodeDO = smsCodeService.checkCodeIsExpired(reqVO.getOldMobile(), reqVO.getOldCode(), + SysSmsSceneEnum.CHANGE_MOBILE_BY_SMS.getScene()); + // 判断旧 code æ˜¯å¦æœªè¢«ä½¿ç”¨ï¼Œå¦‚果是,抛出异常 if (Boolean.FALSE.equals(sysSmsCodeDO.getUsed())){ throw ServiceExceptionUtil.exception(SysErrorCodeConstants.USER_SMS_CODE_IS_UNUSED); } // 使用新验è¯ç  - smsCodeService.useSmsCode(reqVO.getMobile(), SysSmsSceneEnum.CHANGE_MOBILE_BY_SMS.getScene(), reqVO.getCode(),getClientIP()); + smsCodeService.useSmsCode(reqVO.getMobile(), SysSmsSceneEnum.CHANGE_MOBILE_BY_SMS.getScene(), + reqVO.getCode(),getClientIP()); // 更新用户手机 - MbrUserDO userDO = MbrUserDO.builder().id(userId).mobile(reqVO.getMobile()).build(); - userMapper.updateById(userDO); + memberUserMapper.updateById(UserDO.builder().id(userId).mobile(reqVO.getMobile()).build()); } @VisibleForTesting - public MbrUserDO checkUserExists(Long id) { + public UserDO checkUserExists(Long id) { if (id == null) { return null; } - MbrUserDO user = userMapper.selectById(id); + UserDO user = memberUserMapper.selectById(id); if (user == null) { throw exception(USER_NOT_EXISTS); - }else{ - return user; } + return user; } + } diff --git a/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/auth/SysAuthServiceTest.java b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/auth/SysAuthServiceTest.java index ff1c8a7c65..aa38ab936c 100644 --- a/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/auth/SysAuthServiceTest.java +++ b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/auth/SysAuthServiceTest.java @@ -1,20 +1,18 @@ package cn.iocoder.yudao.module.member.service.auth; -import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO; import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService; import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService; import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; -import cn.iocoder.yudao.userserver.BaseDbAndRedisUnitTest; -import cn.iocoder.yudao.userserver.modules.member.dal.mysql.user.MbrUserMapper; -import cn.iocoder.yudao.userserver.modules.member.service.user.MbrUserService; -import cn.iocoder.yudao.module.member.controller.app.auth.vo.MbrAuthResetPasswordReqVO; -import cn.iocoder.yudao.module.member.controller.app.auth.vo.MbrAuthUpdatePasswordReqVO; -import cn.iocoder.yudao.userserver.modules.system.service.auth.SysAuthService; -import cn.iocoder.yudao.userserver.modules.system.service.auth.impl.SysAuthServiceImpl; -import cn.iocoder.yudao.userserver.modules.system.service.sms.SysSmsCodeService; +import cn.iocoder.yudao.module.member.controller.app.auth.vo.AppAuthResetPasswordReqVO; +import cn.iocoder.yudao.module.member.controller.app.auth.vo.AppAuthUpdatePasswordReqVO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.member.dal.mysql.user.UserMapper; +import cn.iocoder.yudao.module.member.service.sms.SysSmsCodeService; +import cn.iocoder.yudao.module.member.service.user.UserService; +import cn.iocoder.yudao.module.member.test.BaseDbAndRedisUnitTest; import org.junit.jupiter.api.Test; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Import; @@ -34,17 +32,17 @@ import static org.mockito.Mockito.when; // TODO @èŠ‹è‰¿ï¼šå•æµ‹çš„ review,等逻辑都达æˆä¸€è‡´åŽ /** - * {@link SysAuthService} çš„å•元测试类 + * {@link AuthService} çš„å•元测试类 * * @author 宋天 */ -@Import({SysAuthServiceImpl.class, YudaoRedisAutoConfiguration.class}) +@Import({AuthServiceImpl.class, YudaoRedisAutoConfiguration.class}) public class SysAuthServiceTest extends BaseDbAndRedisUnitTest { @MockBean private AuthenticationManager authenticationManager; @MockBean - private MbrUserService userService; + private UserService userService; @MockBean private SysSmsCodeService smsCodeService; @MockBean @@ -58,21 +56,21 @@ public class SysAuthServiceTest extends BaseDbAndRedisUnitTest { @MockBean private PasswordEncoder passwordEncoder; @Resource - private MbrUserMapper mbrUserMapper; + private UserMapper mbrUserMapper; @Resource - private SysAuthServiceImpl authService; + private AuthServiceImpl authService; @Test public void testUpdatePassword_success(){ // 准备傿•° - MbrUserDO userDO = randomMbrUserDO(); + UserDO userDO = randomUserDO(); mbrUserMapper.insert(userDO); // æ–°å¯†ç  String newPassword = randomString(); // 请求实体 - MbrAuthUpdatePasswordReqVO reqVO = MbrAuthUpdatePasswordReqVO.builder() + AppAuthUpdatePasswordReqVO reqVO = AppAuthUpdatePasswordReqVO.builder() .oldPassword(userDO.getPassword()) .password(newPassword) .build(); @@ -83,14 +81,14 @@ public class SysAuthServiceTest extends BaseDbAndRedisUnitTest { when(passwordEncoder.encode(newPassword)).thenReturn(newPassword); // æ›´æ–°ç”¨æˆ·å¯†ç  - authService.updatePassword(userDO.getId(),reqVO); + authService.updatePassword(userDO.getId(), reqVO); assertEquals(mbrUserMapper.selectById(userDO.getId()).getPassword(),newPassword); } @Test public void testResetPassword_success(){ // 准备傿•° - MbrUserDO userDO = randomMbrUserDO(); + UserDO userDO = randomUserDO(); mbrUserMapper.insert(userDO); // éšæœºå¯†ç  @@ -102,7 +100,7 @@ public class SysAuthServiceTest extends BaseDbAndRedisUnitTest { when(passwordEncoder.encode(password)).thenReturn(password); // æ›´æ–°ç”¨æˆ·å¯†ç  - MbrAuthResetPasswordReqVO reqVO = new MbrAuthResetPasswordReqVO(); + AppAuthResetPasswordReqVO reqVO = new AppAuthResetPasswordReqVO(); reqVO.setMobile(userDO.getMobile()); reqVO.setPassword(password); reqVO.setCode(code); @@ -115,12 +113,12 @@ public class SysAuthServiceTest extends BaseDbAndRedisUnitTest { // ========== éšæœºå¯¹è±¡ ========== @SafeVarargs - private static MbrUserDO randomMbrUserDO(Consumer... consumers) { - Consumer consumer = (o) -> { + private static UserDO randomUserDO(Consumer... consumers) { + Consumer consumer = (o) -> { o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 o.setPassword(randomString()); }; - return randomPojo(MbrUserDO.class, ArrayUtils.append(consumer, consumers)); + return randomPojo(UserDO.class, ArrayUtils.append(consumer, consumers)); } diff --git a/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/package-info.java b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/package-info.java deleted file mode 100644 index 6223e6e6ca..0000000000 --- a/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.module.member.service; diff --git a/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/MbrUserServiceImplTest.java b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/MbrUserServiceImplTest.java index ecd728ef08..96c562fa93 100644 --- a/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/MbrUserServiceImplTest.java +++ b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/MbrUserServiceImplTest.java @@ -2,18 +2,17 @@ package cn.iocoder.yudao.module.member.service.user; import cn.hutool.core.util.RandomUtil; import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; -import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; -import cn.iocoder.yudao.userserver.BaseDbAndRedisUnitTest; -import cn.iocoder.yudao.userserver.modules.member.controller.user.vo.MbrUserInfoRespVO; -import cn.iocoder.yudao.userserver.modules.member.controller.user.vo.MbrUserUpdateMobileReqVO; -import cn.iocoder.yudao.userserver.modules.member.dal.mysql.user.MbrUserMapper; -import cn.iocoder.yudao.userserver.modules.member.service.user.impl.MbrUserServiceImpl; -import cn.iocoder.yudao.userserver.modules.system.dal.dataobject.sms.SysSmsCodeDO; -import cn.iocoder.yudao.userserver.modules.system.service.auth.impl.SysAuthServiceImpl; -import cn.iocoder.yudao.userserver.modules.system.service.sms.SysSmsCodeService; +import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserUpdateMobileReqVO; +import cn.iocoder.yudao.module.member.dal.dataobject.sms.SysSmsCodeDO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.member.dal.mysql.user.UserMapper; +import cn.iocoder.yudao.module.member.enums.sms.SysSmsSceneEnum; +import cn.iocoder.yudao.module.member.service.auth.AuthServiceImpl; +import cn.iocoder.yudao.module.member.service.sms.SysSmsCodeService; +import cn.iocoder.yudao.module.member.test.BaseDbAndRedisUnitTest; import org.junit.jupiter.api.Test; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Import; @@ -27,30 +26,29 @@ import java.util.function.Consumer; import static cn.hutool.core.util.RandomUtil.*; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomString; -import static cn.iocoder.yudao.userserver.modules.system.enums.sms.SysSmsSceneEnum.CHANGE_MOBILE_BY_SMS; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.*; // TODO @èŠ‹è‰¿ï¼šå•æµ‹çš„ review,等逻辑都达æˆä¸€è‡´åŽ /** - * {@link MbrUserServiceImpl} çš„å•元测试类 + * {@link UserServiceImpl} çš„å•元测试类 * * @author 宋天 */ -@Import({MbrUserServiceImpl.class, YudaoRedisAutoConfiguration.class}) +@Import({UserServiceImpl.class, YudaoRedisAutoConfiguration.class}) public class MbrUserServiceImplTest extends BaseDbAndRedisUnitTest { @Resource - private MbrUserServiceImpl mbrUserService; + private UserServiceImpl mbrUserService; @Resource private StringRedisTemplate stringRedisTemplate; @Resource - private MbrUserMapper userMapper; + private UserMapper userMapper; @MockBean - private SysAuthServiceImpl authService; + private AuthServiceImpl authService; @MockBean private InfFileCoreService fileCoreService; @@ -64,35 +62,24 @@ public class MbrUserServiceImplTest extends BaseDbAndRedisUnitTest { @Test public void testUpdateNickName_success(){ // mock æ•°æ® - MbrUserDO userDO = randomMbrUserDO(); + UserDO userDO = randomUserDO(); userMapper.insert(userDO); // éšæœºæ˜µç§° String newNickName = randomString(); // 调用接å£ä¿®æ”¹æ˜µç§° - mbrUserService.updateNickname(userDO.getId(),newNickName); + mbrUserService.updateUserNickname(userDO.getId(),newNickName); // 查询新修改åŽçš„æ˜µç§° String nickname = mbrUserService.getUser(userDO.getId()).getNickname(); // 断言 assertEquals(newNickName,nickname); } - @Test - public void testGetUserInfo_success(){ - // mock æ•°æ® - MbrUserDO userDO = randomMbrUserDO(); - userMapper.insert(userDO); - - // æŸ¥è¯¢ç”¨æˆ·æ˜µç§°ä¸Žå¤´åƒ - MbrUserInfoRespVO userInfo = mbrUserService.getUserInfo(userDO.getId()); - System.out.println(userInfo); - } - @Test public void testUpdateAvatar_success(){ // mock æ•°æ® - MbrUserDO dbUser = randomMbrUserDO(); + UserDO dbUser = randomUserDO(); userMapper.insert(dbUser); // 准备傿•° @@ -103,7 +90,7 @@ public class MbrUserServiceImplTest extends BaseDbAndRedisUnitTest { String avatar = randomString(); when(fileCoreService.createFile(anyString(), eq(avatarFileBytes))).thenReturn(avatar); // 调用 - String str = mbrUserService.updateAvatar(userId, avatarFile); + String str = mbrUserService.updateUserAvatar(userId, avatarFile); // 断言 assertEquals(avatar, str); } @@ -112,11 +99,10 @@ public class MbrUserServiceImplTest extends BaseDbAndRedisUnitTest { public void updateMobile_success(){ // mockæ•°æ® String oldMobile = randomNumbers(11); - MbrUserDO userDO = randomMbrUserDO(); + UserDO userDO = randomUserDO(); userDO.setMobile(oldMobile); userMapper.insert(userDO); - // 旧手机和旧验è¯ç  SysSmsCodeDO codeDO = new SysSmsCodeDO(); String oldCode = RandomUtil.randomString(4); @@ -129,12 +115,12 @@ public class MbrUserServiceImplTest extends BaseDbAndRedisUnitTest { // æ›´æ–°æ‰‹æœºå· String newMobile = randomNumbers(11); String newCode = randomNumbers(4); - MbrUserUpdateMobileReqVO reqVO = new MbrUserUpdateMobileReqVO(); + AppUserUpdateMobileReqVO reqVO = new AppUserUpdateMobileReqVO(); reqVO.setMobile(newMobile); reqVO.setCode(newCode); reqVO.setOldMobile(oldMobile); reqVO.setOldCode(oldCode); - mbrUserService.updateMobile(userDO.getId(),reqVO); + mbrUserService.updateUserMobile(userDO.getId(),reqVO); assertEquals(mbrUserService.getUser(userDO.getId()).getMobile(),newMobile); } @@ -142,11 +128,11 @@ public class MbrUserServiceImplTest extends BaseDbAndRedisUnitTest { // ========== éšæœºå¯¹è±¡ ========== @SafeVarargs - private static MbrUserDO randomMbrUserDO(Consumer... consumers) { - Consumer consumer = (o) -> { + private static UserDO randomUserDO(Consumer... consumers) { + Consumer consumer = (o) -> { o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 }; - return randomPojo(MbrUserDO.class, ArrayUtils.append(consumer, consumers)); + return randomPojo(UserDO.class, ArrayUtils.append(consumer, consumers)); } } diff --git a/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/test/BaseDbAndRedisUnitTest.java b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/test/BaseDbAndRedisUnitTest.java index 50d19ad4ea..a9278498db 100644 --- a/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/test/BaseDbAndRedisUnitTest.java +++ b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/test/BaseDbAndRedisUnitTest.java @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.member.test; import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration; import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration; import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; -import cn.iocoder.yudao.userserver.config.RedisTestConfiguration; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; import org.redisson.spring.starter.RedissonAutoConfiguration; diff --git a/yudao-module-member/yudao-module-member-impl/src/test/resources/application-unit-test.yaml b/yudao-module-member/yudao-module-member-impl/src/test/resources/application-unit-test.yaml index d306a7af43..237068e6e5 100644 --- a/yudao-module-member/yudao-module-member-impl/src/test/resources/application-unit-test.yaml +++ b/yudao-module-member/yudao-module-member-impl/src/test/resources/application-unit-test.yaml @@ -42,3 +42,8 @@ mybatis: --- #################### 芋é“相关é…ç½® #################### # 芋é“é…置项,设置当å‰é¡¹ç›®æ‰€æœ‰è‡ªå®šä¹‰çš„é…ç½® +yudao: + info: + base-package: cn.iocoder.yudao.module.member.dal.mysql + core-service: + base-package: cn.iocoder.yudao.module.member.dal.mysql # TODO èŠ‹è‰¿ï¼šè¦æ¸…ç†æŽ‰ diff --git a/yudao-user-server/src/main/resources/application-dev.yaml b/yudao-user-server/src/main/resources/application-dev.yaml index 7e6aa355e1..f44bc4935d 100644 --- a/yudao-user-server/src/main/resources/application-dev.yaml +++ b/yudao-user-server/src/main/resources/application-dev.yaml @@ -124,6 +124,19 @@ logging: file: name: ${user.home}/logs/${spring.application.name}.log # 日志文件å,全路径 + +--- #################### 微信公众å·ç›¸å…³é…ç½® #################### +wx: # å‚è§ https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档 + mp: + # 公众å·é…ç½®(å¿…å¡«) + app-id: wx041349c6f39b268b + secret: 5abee519483bc9f8cb37ce280e814bd0 + # 存储é…置,解决 AccessToken 的跨节点的共享 + config-storage: + type: RedisTemplate # 采用 RedisTemplate æ“作 Redis,会自动从 Spring ä¸­èŽ·å– + key-prefix: wx # Redis Key çš„å‰ç¼€ TODO 芋艿:解决下 Redis key 管ç†çš„é…ç½® + http-client-type: HttpClient # 采用 HttpClient 请求微信公众å·å¹³å° + --- #################### 芋é“相关é…ç½® #################### # 芋é“é…置项,设置当å‰é¡¹ç›®æ‰€æœ‰è‡ªå®šä¹‰çš„é…ç½® diff --git a/yudao-user-server/src/main/resources/application.yaml b/yudao-user-server/src/main/resources/application.yaml index 209543380c..1d789232d9 100644 --- a/yudao-user-server/src/main/resources/application.yaml +++ b/yudao-user-server/src/main/resources/application.yaml @@ -66,11 +66,6 @@ yudao: constants-class-list: - cn.iocoder.yudao.userserver.modules.member.enums.MbrErrorCodeConstants - cn.iocoder.yudao.userserver.modules.system.enums.SysErrorCodeConstants - sms-code: # 短信验è¯ç ç›¸å…³çš„é…置项 - expire-times: 10m - send-frequency: 1m - send-maximum-quantity-per-day: 10 - begin-code: 9999 # 这里é…ç½® 9999 的原因是,测试方便。 - end-code: 9999 # 这里é…ç½® 9999 的原因是,测试方便。 + debug: false From e9efff7076f66305b5bc80ee416a32ee7487b6dc Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sat, 29 Jan 2022 00:44:03 +0800 Subject: [PATCH 06/47] =?UTF-8?q?=E5=A4=9A=E6=A8=A1=E5=9D=97=E9=87=8D?= =?UTF-8?q?=E6=9E=84=203=EF=BC=9Asecurity=20=E5=AE=9E=E7=8E=B0=E5=A4=9A?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=9A=84=E8=AE=A4=E8=AF=81=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- http-client.env.json | 6 +- pom.xml | 1 - yudao-admin-server/pom.xml | 6 +- .../security/SecurityConfiguration.java | 2 +- .../service/auth/impl/SysAuthServiceImpl.java | 4 +- .../framework/common/enums/UserTypeEnum.java | 6 + .../operatelog/core/aop/OperateLogAspect.java | 1 + .../core/dto/OperateLogCreateReqDTO.java | 3 + .../YudaoSecurityAutoConfiguration.java | 20 +-- .../YudaoWebSecurityConfigurerAdapter.java | 14 +- ...ultiUserDetailsAuthenticationProvider.java | 149 ++++++++++++++++++ ...tiUsernamePasswordAuthenticationToken.java | 43 +++++ .../filter/JWTAuthenticationTokenFilter.java | 12 +- .../handler/LogoutSuccessHandlerImpl.java | 6 +- .../core/service/SecurityAuthService.java | 43 ----- .../core/service/SecurityAuthServiceImpl.java | 64 -------- .../web/core/util/WebFrameworkUtils.java | 5 + .../yudao-module-member-impl/pom.xml | 4 + .../app/auth/AppAuthController.http | 3 +- .../app/auth/AppAuthController.java | 10 +- .../member/service/auth/AuthServiceImpl.java | 4 +- yudao-server/pom.xml | 22 --- 更新日志.md | 35 ++-- 23 files changed, 279 insertions(+), 184 deletions(-) create mode 100644 yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/authentication/MultiUserDetailsAuthenticationProvider.java create mode 100644 yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/authentication/MultiUsernamePasswordAuthenticationToken.java delete mode 100644 yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/service/SecurityAuthService.java delete mode 100644 yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/service/SecurityAuthServiceImpl.java delete mode 100644 yudao-server/pom.xml diff --git a/http-client.env.json b/http-client.env.json index c4686b274f..c18fbb054e 100644 --- a/http-client.env.json +++ b/http-client.env.json @@ -2,6 +2,10 @@ "local": { "baseUrl": "http://127.0.0.1:48080/api", "userServerUrl": "http://127.0.0.1:28080/api", - "token": "test1" + "token": "test1", + + "userApi": "http://127.0.0.1:48080/app-api", + "userToken": "test1", + "userTenentId": "1" } } diff --git a/pom.xml b/pom.xml index c76c9a22d1..36015806e2 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,6 @@ yudao-user-server yudao-core-service yudao-module-member - yudao-server ${artifactId} diff --git a/yudao-admin-server/pom.xml b/yudao-admin-server/pom.xml index 40943697fe..bd32454b97 100644 --- a/yudao-admin-server/pom.xml +++ b/yudao-admin-server/pom.xml @@ -13,7 +13,11 @@ jar yudao-admin-server - 管ç†åŽå° Server,æä¾›å…¶ API æŽ¥å£ + + åŽç«¯ Server çš„ä¸»é¡¹ç›®ï¼Œé€šè¿‡å¼•å…¥éœ€è¦ yudao-module-xxx çš„ä¾èµ–, + 从而实现æä¾› RESTful API ç»™ yudao-ui-adminã€yudao-ui-user ç­‰å‰ç«¯é¡¹ç›®ã€‚ + 本质上æ¥è¯´ï¼Œå®ƒå°±æ˜¯ä¸ªç©ºå£³ï¼ˆå®¹å™¨ï¼‰ï¼ + https://github.com/YunaiV/ruoyi-vue-pro diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/security/SecurityConfiguration.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/security/SecurityConfiguration.java index a5086b92e3..2d911a6753 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/security/SecurityConfiguration.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/security/SecurityConfiguration.java @@ -33,7 +33,7 @@ public class SecurityConfiguration { registry.antMatchers(buildAdminApi("/system/sms/callback/**")).anonymous(); // 设置 App API æ— éœ€è®¤è¯ - registry.antMatchers(buildAppApi("/**")); + registry.antMatchers(buildAppApi("/**")).permitAll(); }; } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java index 3f795f83da..c9e5373501 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java @@ -26,6 +26,7 @@ import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils; import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; import cn.iocoder.yudao.framework.security.core.LoginUser; +import cn.iocoder.yudao.framework.security.core.authentication.MultiUsernamePasswordAuthenticationToken; import lombok.extern.slf4j.Slf4j; import me.zhyd.oauth.model.AuthUser; import org.springframework.context.annotation.Lazy; @@ -154,7 +155,8 @@ public class SysAuthServiceImpl implements SysAuthService { try { // 调用 Spring Security çš„ AuthenticationManager#authenticate(...) 方法,使用账å·å¯†ç è¿›è¡Œè®¤è¯ // 在其内部,会调用到 loadUserByUsername æ–¹æ³•ï¼ŒèŽ·å– User ä¿¡æ¯ - authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, password)); + authentication = authenticationManager.authenticate(new MultiUsernamePasswordAuthenticationToken( + username, password, getUserType())); // org.activiti.engine.impl.identity.Authentication.setAuthenticatedUserId(username); } catch (BadCredentialsException badCredentialsException) { this.createLoginLog(username, logTypeEnum, SysLoginResultEnum.BAD_CREDENTIALS); diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/UserTypeEnum.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/UserTypeEnum.java index 7318fb045b..edaba1dd96 100644 --- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/UserTypeEnum.java +++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/UserTypeEnum.java @@ -1,5 +1,7 @@ package cn.iocoder.yudao.framework.common.enums; +import cn.hutool.core.lang.Matcher; +import cn.hutool.core.util.ArrayUtil; import lombok.AllArgsConstructor; import lombok.Getter; @@ -22,4 +24,8 @@ public enum UserTypeEnum { */ private final String name; + public static UserTypeEnum valueOf(Integer value) { + return ArrayUtil.firstMatch(userType -> userType.getValue().equals(value), UserTypeEnum.values()); + } + } diff --git a/yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelog/core/aop/OperateLogAspect.java b/yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelog/core/aop/OperateLogAspect.java index a7f23a3912..6cda19f82c 100644 --- a/yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelog/core/aop/OperateLogAspect.java +++ b/yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelog/core/aop/OperateLogAspect.java @@ -149,6 +149,7 @@ public class OperateLogAspect { private static void fillUserFields(OperateLogCreateReqDTO operateLogDTO) { operateLogDTO.setUserId(WebFrameworkUtils.getLoginUserId()); + operateLogDTO.setUserType(WebFrameworkUtils.getLoginUserType()); } private static void fillModuleFields(OperateLogCreateReqDTO operateLogDTO, diff --git a/yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelog/core/dto/OperateLogCreateReqDTO.java b/yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelog/core/dto/OperateLogCreateReqDTO.java index 1c8f49a264..d676001f28 100644 --- a/yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelog/core/dto/OperateLogCreateReqDTO.java +++ b/yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelog/core/dto/OperateLogCreateReqDTO.java @@ -21,6 +21,9 @@ public class OperateLogCreateReqDTO { @ApiModelProperty(value = "用户编å·", required = true, example = "1024") @NotNull(message = "用户编å·ä¸èƒ½ä¸ºç©º") private Long userId; + @ApiModelProperty(value = "用户类型", required = true, example = "1") + @NotNull(message = "用户类型ä¸èƒ½ä¸ºç©º") + private Integer userType; @ApiModelProperty(value = "æ“作模å—", required = true, example = "订å•") @NotEmpty(message = "æ“作模å—ä¸èƒ½ä¸ºç©º") diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityAutoConfiguration.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityAutoConfiguration.java index ae8b12422e..d5953823a2 100644 --- a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityAutoConfiguration.java +++ b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityAutoConfiguration.java @@ -1,14 +1,13 @@ package cn.iocoder.yudao.framework.security.config; import cn.iocoder.yudao.framework.security.core.aop.PreAuthenticatedAspect; +import cn.iocoder.yudao.framework.security.core.authentication.MultiUserDetailsAuthenticationProvider; import cn.iocoder.yudao.framework.security.core.context.TransmittableThreadLocalSecurityContextHolderStrategy; import cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter; import cn.iocoder.yudao.framework.security.core.handler.AccessDeniedHandlerImpl; import cn.iocoder.yudao.framework.security.core.handler.AuthenticationEntryPointImpl; import cn.iocoder.yudao.framework.security.core.handler.LogoutSuccessHandlerImpl; import cn.iocoder.yudao.framework.security.core.service.SecurityAuthFrameworkService; -import cn.iocoder.yudao.framework.security.core.service.SecurityAuthService; -import cn.iocoder.yudao.framework.security.core.service.SecurityAuthServiceImpl; import cn.iocoder.yudao.framework.web.config.WebProperties; import cn.iocoder.yudao.framework.web.core.handler.GlobalExceptionHandler; import org.springframework.beans.factory.config.MethodInvokingFactoryBean; @@ -68,8 +67,8 @@ public class YudaoSecurityAutoConfiguration { * 退出处ç†ç±» Bean */ @Bean - public LogoutSuccessHandler logoutSuccessHandler(SecurityAuthService securityAuthService) { - return new LogoutSuccessHandlerImpl(securityProperties, securityAuthService); + public LogoutSuccessHandler logoutSuccessHandler(MultiUserDetailsAuthenticationProvider authenticationProvider) { + return new LogoutSuccessHandlerImpl(securityProperties, authenticationProvider); } /** @@ -87,18 +86,19 @@ public class YudaoSecurityAutoConfiguration { * Token 认è¯è¿‡æ»¤å™¨ Bean */ @Bean - public JWTAuthenticationTokenFilter authenticationTokenFilter(SecurityAuthService securityAuthService, + public JWTAuthenticationTokenFilter authenticationTokenFilter(MultiUserDetailsAuthenticationProvider authenticationProvider, GlobalExceptionHandler globalExceptionHandler) { - return new JWTAuthenticationTokenFilter(securityProperties, securityAuthService, globalExceptionHandler); + return new JWTAuthenticationTokenFilter(securityProperties, authenticationProvider, globalExceptionHandler); } /** - * 安全认è¯çš„ Service Bean + * 身份验è¯çš„ Provider Beanï¼Œé€šè¿‡å®ƒå®žçŽ°è´¦å· + 密ç çš„è®¤è¯ */ @Bean - public SecurityAuthService securityAuthService(List securityFrameworkServices, - WebProperties webProperties) { - return new SecurityAuthServiceImpl(securityFrameworkServices, webProperties); + public MultiUserDetailsAuthenticationProvider authenticationProvider( + List securityFrameworkServices, + WebProperties webProperties, PasswordEncoder passwordEncoder) { + return new MultiUserDetailsAuthenticationProvider(securityFrameworkServices, webProperties, passwordEncoder); } /** diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java index a00b2c2a66..276ce1ed57 100644 --- a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java +++ b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.framework.security.config; +import cn.iocoder.yudao.framework.security.core.authentication.MultiUserDetailsAuthenticationProvider; import cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter; import cn.iocoder.yudao.framework.security.core.service.SecurityAuthFrameworkService; import cn.iocoder.yudao.framework.web.config.WebProperties; @@ -35,16 +36,8 @@ public class YudaoWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdap @Resource private WebProperties webProperties; - /** - * 自定义用户ã€è®¤è¯ã€‘逻辑 - */ @Resource - private SecurityAuthFrameworkService userDetailsService; - /** - * Spring Security 加密器 - */ - @Resource - private PasswordEncoder passwordEncoder; + private MultiUserDetailsAuthenticationProvider authenticationProvider; /** * 认è¯å¤±è´¥å¤„ç†ç±» Bean */ @@ -91,8 +84,7 @@ public class YudaoWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdap */ @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { - auth - .userDetailsService(userDetailsService).passwordEncoder(passwordEncoder); + auth.authenticationProvider(authenticationProvider); } /** diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/authentication/MultiUserDetailsAuthenticationProvider.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/authentication/MultiUserDetailsAuthenticationProvider.java new file mode 100644 index 0000000000..dc8533f964 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/authentication/MultiUserDetailsAuthenticationProvider.java @@ -0,0 +1,149 @@ +package cn.iocoder.yudao.framework.security.core.authentication; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; +import cn.iocoder.yudao.framework.security.core.LoginUser; +import cn.iocoder.yudao.framework.security.core.service.SecurityAuthFrameworkService; +import cn.iocoder.yudao.framework.web.config.WebProperties; +import org.springframework.security.authentication.AuthenticationProvider; +import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.crypto.password.PasswordEncoder; + +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 支æŒå¤šç”¨æˆ·ç±»åž‹çš„ AuthenticationProvider 实现类 + * + * 为什么ä¸ç”¨ {@link org.springframework.security.authentication.ProviderManager} 呢? + * åŽŸå› æ˜¯ï¼Œéœ€è¦æ¯ä¸ªç”¨æˆ·ç±»åž‹å®žçŽ°å¯¹åº”çš„ {@link AuthenticationProvider} + authentication,略显麻烦。实际,也是å¯ä»¥å®žçŽ°çš„ã€‚ + * + * å¦å¤–,é¢å¤–æ”¯æŒ verifyTokenAndRefresh 校验令牌ã€logout 登出ã€mockLogin 模拟登陆等æ“作。 + * 实际上,它就是 {@link SecurityAuthFrameworkService} 定义的三个接å£ã€‚ + * å› ä¸ºéœ€è¦æ”¯æŒå¤šç§ç±»åž‹ï¼Œæ‰€ä»¥éœ€è¦æ ¹æ®è¯·æ±‚çš„ URL,判断出对应的用户类型,从而使用对应的 SecurityAuthFrameworkService 是å¸çº³ + * + * @see cn.iocoder.yudao.framework.common.enums.UserTypeEnum + * @author èŠ‹é“æºç  + */ +public class MultiUserDetailsAuthenticationProvider extends AbstractUserDetailsAuthenticationProvider { + + private final Map services = new HashMap<>(); + + private final WebProperties properties; + + private final PasswordEncoder passwordEncoder; + + public MultiUserDetailsAuthenticationProvider(List serviceList, + WebProperties properties, PasswordEncoder passwordEncoder) { + serviceList.forEach(service -> services.put(service.getUserType(), service)); + this.properties = properties; + this.passwordEncoder = passwordEncoder; + } + + // ========== AuthenticationProvider 相关 ========== + + @Override + protected UserDetails retrieveUser(String username, UsernamePasswordAuthenticationToken authentication) + throws AuthenticationException { + // 执行用户的加载 + return selectService(authentication).loadUserByUsername(username); + } + + private SecurityAuthFrameworkService selectService(UsernamePasswordAuthenticationToken authentication) { + // 第一步,获得用户类型 + UserTypeEnum userType = getUserType(authentication); + // 第二步,获得 SecurityAuthFrameworkService + SecurityAuthFrameworkService service = services.get(userType); + Assert.notNull(service, "用户类型({}) 找ä¸åˆ° SecurityAuthFrameworkService 实现类", userType); + return service; + } + + private UserTypeEnum getUserType(UsernamePasswordAuthenticationToken authentication) { + Assert.isInstanceOf(MultiUsernamePasswordAuthenticationToken.class, authentication); + MultiUsernamePasswordAuthenticationToken multiAuthentication = (MultiUsernamePasswordAuthenticationToken) authentication; + UserTypeEnum userType = multiAuthentication.getUserType(); + Assert.notNull(userType, "用户类型ä¸èƒ½ä¸ºç©º"); + return userType; + } + + @Override // copy 自 DaoAuthenticationProvider çš„ additionalAuthenticationChecks 方法 + protected void additionalAuthenticationChecks(UserDetails userDetails, UsernamePasswordAuthenticationToken authentication) + throws AuthenticationException { + // 校验 credentials + if (authentication.getCredentials() == null) { + this.logger.debug("Failed to authenticate since no credentials provided"); + throw new BadCredentialsException(this.messages.getMessage( + "AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials")); + } + // 校验 password + String presentedPassword = authentication.getCredentials().toString(); + if (!this.passwordEncoder.matches(presentedPassword, userDetails.getPassword())) { + this.logger.debug("Failed to authenticate since password does not match stored value"); + throw new BadCredentialsException(this.messages.getMessage( + "AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials")); + } + } + + // ========== SecurityAuthFrameworkService 相关 ========== + + /** + * 校验 token 的有效性,并获å–ç”¨æˆ·ä¿¡æ¯ + * 通过åŽï¼Œåˆ·æ–° token 的过期时间 + * + * @param request 请求 + * @param token token + * @return ç”¨æˆ·ä¿¡æ¯ + */ + public LoginUser verifyTokenAndRefresh(HttpServletRequest request, String token) { + return selectService(request).verifyTokenAndRefresh(token); + } + + /** + * 模拟指定用户编å·çš„ LoginUser + * + * @param request 请求 + * @param userId ç”¨æˆ·ç¼–å· + * @return 登录用户 + */ + public LoginUser mockLogin(HttpServletRequest request, Long userId) { + return selectService(request).mockLogin(userId); + } + + /** + * 基于 token 退出登录 + * + * @param request 请求 + * @param token token + */ + public void logout(HttpServletRequest request, String token) { + selectService(request).logout(token); + } + + private SecurityAuthFrameworkService selectService(HttpServletRequest request) { + // 第一步,获得用户类型 + UserTypeEnum userType = getUserType(request); + // 第二步,获得 SecurityAuthFrameworkService + SecurityAuthFrameworkService service = services.get(userType); + Assert.notNull(service, "URI({}) 用户类型({}) 找ä¸åˆ° SecurityAuthFrameworkService 实现类", + request.getRequestURI(), userType); + return service; + } + + private UserTypeEnum getUserType(HttpServletRequest request) { + if (request.getRequestURI().startsWith(properties.getAdminApi().getPrefix())) { + return UserTypeEnum.ADMIN; + } + if (request.getRequestURI().startsWith(properties.getAppApi().getPrefix())) { + return UserTypeEnum.MEMBER; + } + throw new IllegalArgumentException(StrUtil.format("URI({}) 找ä¸åˆ°åŒ¹é…的用户类型", request.getRequestURI())); + } + +} diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/authentication/MultiUsernamePasswordAuthenticationToken.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/authentication/MultiUsernamePasswordAuthenticationToken.java new file mode 100644 index 0000000000..f0bc8dfac4 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/authentication/MultiUsernamePasswordAuthenticationToken.java @@ -0,0 +1,43 @@ +package cn.iocoder.yudao.framework.security.core.authentication; + +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; +import lombok.Getter; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.GrantedAuthority; + +import java.util.Collection; + +/** + * 支æŒå¤šç”¨æˆ·çš„ UsernamePasswordAuthenticationToken 实现类 + * + * @author èŠ‹é“æºç  + */ +@Getter +public class MultiUsernamePasswordAuthenticationToken extends UsernamePasswordAuthenticationToken { + + /** + * 用户类型 + */ + private UserTypeEnum userType; + + public MultiUsernamePasswordAuthenticationToken(Object principal, Object credentials) { + super(principal, credentials); + } + + public MultiUsernamePasswordAuthenticationToken(Object principal, Object credentials, + Collection authorities) { + super(principal, credentials, authorities); + } + + public MultiUsernamePasswordAuthenticationToken(Object principal, Object credentials, UserTypeEnum userType) { + super(principal, credentials); + this.userType = userType; + } + + public MultiUsernamePasswordAuthenticationToken(Object principal, Object credentials, + Collection authorities, UserTypeEnum userType) { + super(principal, credentials, authorities); + this.userType = userType; + } + +} diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/filter/JWTAuthenticationTokenFilter.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/filter/JWTAuthenticationTokenFilter.java index 61685e9029..804c88d35f 100644 --- a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/filter/JWTAuthenticationTokenFilter.java +++ b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/filter/JWTAuthenticationTokenFilter.java @@ -5,10 +5,10 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; import cn.iocoder.yudao.framework.security.config.SecurityProperties; import cn.iocoder.yudao.framework.security.core.LoginUser; -import cn.iocoder.yudao.framework.security.core.service.SecurityAuthService; +import cn.iocoder.yudao.framework.security.core.authentication.MultiUserDetailsAuthenticationProvider; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.framework.web.core.handler.GlobalExceptionHandler; -import lombok.AllArgsConstructor; +import lombok.RequiredArgsConstructor; import org.springframework.web.filter.OncePerRequestFilter; import javax.servlet.FilterChain; @@ -23,12 +23,12 @@ import java.io.IOException; * * @author èŠ‹é“æºç  */ -@AllArgsConstructor +@RequiredArgsConstructor public class JWTAuthenticationTokenFilter extends OncePerRequestFilter { private final SecurityProperties securityProperties; - private final SecurityAuthService authService; + private final MultiUserDetailsAuthenticationProvider authenticationProvider; private final GlobalExceptionHandler globalExceptionHandler; @@ -40,7 +40,7 @@ public class JWTAuthenticationTokenFilter extends OncePerRequestFilter { if (StrUtil.isNotEmpty(token)) { try { // éªŒè¯ token 有效性 - LoginUser loginUser = authService.verifyTokenAndRefresh(request, token); + LoginUser loginUser = authenticationProvider.verifyTokenAndRefresh(request, token); // 模拟 Login 功能,方便日常开å‘调试 if (loginUser == null) { loginUser = this.mockLoginUser(request, token); @@ -78,7 +78,7 @@ public class JWTAuthenticationTokenFilter extends OncePerRequestFilter { return null; } Long userId = Long.valueOf(token.substring(securityProperties.getMockSecret().length())); - return authService.mockLogin(request, userId); + return authenticationProvider.mockLogin(request, userId); } } diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/handler/LogoutSuccessHandlerImpl.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/handler/LogoutSuccessHandlerImpl.java index e61b351c21..1a642304ca 100644 --- a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/handler/LogoutSuccessHandlerImpl.java +++ b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/handler/LogoutSuccessHandlerImpl.java @@ -4,7 +4,7 @@ import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; import cn.iocoder.yudao.framework.security.config.SecurityProperties; -import cn.iocoder.yudao.framework.security.core.service.SecurityAuthService; +import cn.iocoder.yudao.framework.security.core.authentication.MultiUserDetailsAuthenticationProvider; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import lombok.AllArgsConstructor; import org.springframework.security.core.Authentication; @@ -24,14 +24,14 @@ public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler { private final SecurityProperties securityProperties; - private final SecurityAuthService authService; + private final MultiUserDetailsAuthenticationProvider authenticationProvider; @Override public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) { // 执行退出 String token = SecurityFrameworkUtils.obtainAuthorization(request, securityProperties.getTokenHeader()); if (StrUtil.isNotBlank(token)) { - authService.logout(request, token); + authenticationProvider.logout(request, token); } // 返回æˆåŠŸ ServletUtils.writeJSON(response, CommonResult.success(null)); diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/service/SecurityAuthService.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/service/SecurityAuthService.java deleted file mode 100644 index 4fee9cd0d0..0000000000 --- a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/service/SecurityAuthService.java +++ /dev/null @@ -1,43 +0,0 @@ -package cn.iocoder.yudao.framework.security.core.service; - -import cn.iocoder.yudao.framework.security.core.LoginUser; - -import javax.servlet.http.HttpServletRequest; - -/** - * 安全认è¯çš„ Service 接å£ï¼Œå¯¹ security 组件æä¾›ç»Ÿä¸€çš„ Auth 相关的方法。 - * ä¸»è¦æ˜¯ä¼šåŸºäºŽ {@link HttpServletRequest} 傿•°ï¼ŒåŒ¹é…对应的 {@link SecurityAuthFrameworkService} 实现,然åŽè°ƒç”¨å…¶æ–¹æ³•。 - * 因此,在方法的定义上,和 {@link SecurityAuthFrameworkService} å·®ä¸å¤šã€‚ - * - * @author èŠ‹é“æºç  - */ -public interface SecurityAuthService { - - /** - * 校验 token 的有效性,并获å–ç”¨æˆ·ä¿¡æ¯ - * 通过åŽï¼Œåˆ·æ–° token 的过期时间 - * - * @param request 请求 - * @param token token - * @return ç”¨æˆ·ä¿¡æ¯ - */ - LoginUser verifyTokenAndRefresh(HttpServletRequest request, String token); - - /** - * 模拟指定用户编å·çš„ LoginUser - * - * @param request 请求 - * @param userId ç”¨æˆ·ç¼–å· - * @return 登录用户 - */ - LoginUser mockLogin(HttpServletRequest request, Long userId); - - /** - * 基于 token 退出登录 - * - * @param request 请求 - * @param token token - */ - void logout(HttpServletRequest request, String token); - -} diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/service/SecurityAuthServiceImpl.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/service/SecurityAuthServiceImpl.java deleted file mode 100644 index d9ab8eb0e1..0000000000 --- a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/service/SecurityAuthServiceImpl.java +++ /dev/null @@ -1,64 +0,0 @@ -package cn.iocoder.yudao.framework.security.core.service; - -import cn.hutool.core.lang.Assert; -import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.security.core.LoginUser; -import cn.iocoder.yudao.framework.web.config.WebProperties; - -import javax.servlet.http.HttpServletRequest; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * 安全认è¯çš„ Service 实现类,基于请求地å€ï¼Œè®¡ç®—到对应的 {@link UserTypeEnum} 枚举,从而拿到对应的 {@link SecurityAuthFrameworkService} 实现 - * - * @author èŠ‹é“æºç  - */ -public class SecurityAuthServiceImpl implements SecurityAuthService { - - private final Map services = new HashMap<>(); - private final WebProperties properties; - - public SecurityAuthServiceImpl(List serviceList, WebProperties properties) { - serviceList.forEach(service -> services.put(service.getUserType(), service)); - this.properties = properties; - } - - @Override - public LoginUser verifyTokenAndRefresh(HttpServletRequest request, String token) { - return selectService(request).verifyTokenAndRefresh(token); - } - - @Override - public LoginUser mockLogin(HttpServletRequest request, Long userId) { - return selectService(request).mockLogin(userId); - } - - @Override - public void logout(HttpServletRequest request, String token) { - selectService(request).logout(token); - } - - private SecurityAuthFrameworkService selectService(HttpServletRequest request) { - // 第一步,获得用户类型 - UserTypeEnum userType = getUserType(request); - // 第二步,获得 SecurityAuthFrameworkService - SecurityAuthFrameworkService service = services.get(userType); - Assert.notNull(service, "URI({}) 用户类型({}) 找ä¸åˆ° SecurityAuthFrameworkService 实现类", - request.getRequestURI(), userType); - return service; - } - - private UserTypeEnum getUserType(HttpServletRequest request) { - if (request.getRequestURI().startsWith(properties.getAdminApi().getPrefix())) { - return UserTypeEnum.ADMIN; - } - if (request.getRequestURI().startsWith(properties.getAppApi().getPrefix())) { - return UserTypeEnum.MEMBER; - } - throw new IllegalArgumentException(StrUtil.format("URI({}) 找ä¸åˆ°åŒ¹é…的用户类型", request.getRequestURI())); - } - -} diff --git a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/util/WebFrameworkUtils.java b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/util/WebFrameworkUtils.java index acbfb9c2ba..273f34072d 100644 --- a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/util/WebFrameworkUtils.java +++ b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/util/WebFrameworkUtils.java @@ -55,6 +55,11 @@ public class WebFrameworkUtils { return (Integer) request.getAttribute(REQUEST_ATTRIBUTE_LOGIN_USER_TYPE); } + public static Integer getLoginUserType() { + HttpServletRequest request = getRequest(); + return getLoginUserType(request); + } + public static Long getLoginUserId() { HttpServletRequest request = getRequest(); return getLoginUserId(request); diff --git a/yudao-module-member/yudao-module-member-impl/pom.xml b/yudao-module-member/yudao-module-member-impl/pom.xml index de46508069..ce7ff84a0b 100644 --- a/yudao-module-member/yudao-module-member-impl/pom.xml +++ b/yudao-module-member/yudao-module-member-impl/pom.xml @@ -30,6 +30,10 @@ yudao-core-service + + cn.iocoder.boot + yudao-spring-boot-starter-biz-operatelog + cn.iocoder.boot yudao-spring-boot-starter-biz-sms diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.http b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.http index c9cadedccd..dbe82122ac 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.http +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.http @@ -1,6 +1,7 @@ ### 请求 /login æŽ¥å£ => æˆåŠŸ -POST {{userServerUrl}}/login +POST {{userApi}}/login Content-Type: application/json +tenant-id: {{userTenentId}} { "mobile": "15601691300", diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java index 3876e708bd..f52e96d1a8 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.member.controller.app.auth; import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialCoreService; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; import cn.iocoder.yudao.module.member.controller.app.auth.vo.*; import cn.iocoder.yudao.module.member.service.auth.AuthService; @@ -40,6 +41,7 @@ public class AppAuthController { @PostMapping("/login") @ApiOperation("使用手机 + 密ç ç™»å½•") + @OperateLog(enable = false) // é¿å… Post 请求被记录æ“作日志 public CommonResult login(@RequestBody @Valid AppAuthLoginReqVO reqVO) { String token = authService.login(reqVO, getClientIP(), getUserAgent()); // 返回结果 @@ -48,6 +50,7 @@ public class AppAuthController { @PostMapping("/sms-login") @ApiOperation("使用手机 + 验è¯ç ç™»å½•") + @OperateLog(enable = false) // é¿å… Post 请求被记录æ“作日志 public CommonResult smsLogin(@RequestBody @Valid AppAuthSmsLoginReqVO reqVO) { String token = authService.smsLogin(reqVO, getClientIP(), getUserAgent()); // 返回结果 @@ -56,12 +59,13 @@ public class AppAuthController { @PostMapping("/send-sms-code") @ApiOperation(value = "å‘逿‰‹æœºéªŒè¯ç ") + @OperateLog(enable = false) // é¿å… Post 请求被记录æ“作日志 public CommonResult sendSmsCode(@RequestBody @Valid AppAuthSendSmsReqVO reqVO) { smsCodeService.sendSmsCode(reqVO.getMobile(), reqVO.getScene(), getClientIP()); return success(true); } - @GetMapping("/send-sms-code-login") + @GetMapping("/send-sms-code-login") // TODO 芋艿:post 比较åˆç† @ApiOperation(value = "å‘已登录用户å‘é€éªŒè¯ç ",notes = "修改手机时验è¯åŽŸæ‰‹æœºå·ä½¿ç”¨") public CommonResult sendSmsCodeLogin() { smsCodeService.sendSmsCodeLogin(getLoginUserId()); @@ -71,6 +75,7 @@ public class AppAuthController { @PostMapping("/reset-password") @ApiOperation(value = "é‡ç½®å¯†ç ", notes = "ç”¨æˆ·å¿˜è®°å¯†ç æ—¶ä½¿ç”¨") @PreAuthenticated + @OperateLog(enable = false) // é¿å… Post 请求被记录æ“作日志 public CommonResult resetPassword(@RequestBody @Valid AppAuthResetPasswordReqVO reqVO) { authService.resetPassword(reqVO); return success(true); @@ -106,6 +111,7 @@ public class AppAuthController { @PostMapping("/social-login2") @ApiOperation("社交登录,使用 æ‰‹æœºå· + 手机验è¯ç ") + @OperateLog(enable = false) // é¿å… Post 请求被记录æ“作日志 public CommonResult socialLogin2(@RequestBody @Valid AppAuthSocialLogin2ReqVO reqVO) { String token = authService.socialLogin2(reqVO, getClientIP(), getUserAgent()); return success(AppAuthLoginRespVO.builder().token(token).build()); @@ -113,6 +119,7 @@ public class AppAuthController { @PostMapping("/social-bind") @ApiOperation("社交绑定,使用 code 授æƒç ") + @PreAuthenticated public CommonResult socialBind(@RequestBody @Valid AppAuthSocialBindReqVO reqVO) { authService.socialBind(getLoginUserId(), reqVO); return CommonResult.success(true); @@ -120,6 +127,7 @@ public class AppAuthController { @DeleteMapping("/social-unbind") @ApiOperation("å–æ¶ˆç¤¾äº¤ç»‘定") + @PreAuthenticated public CommonResult socialUnbind(@RequestBody AppAuthSocialUnbindReqVO reqVO) { socialService.unbindSocialUser(getLoginUserId(), reqVO.getType(), reqVO.getUnionId(), UserTypeEnum.MEMBER); return CommonResult.success(true); diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/AuthServiceImpl.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/AuthServiceImpl.java index a28b6572db..6deabba120 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/AuthServiceImpl.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/AuthServiceImpl.java @@ -14,6 +14,7 @@ import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils; import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; import cn.iocoder.yudao.framework.security.core.LoginUser; +import cn.iocoder.yudao.framework.security.core.authentication.MultiUsernamePasswordAuthenticationToken; import cn.iocoder.yudao.module.member.controller.app.auth.vo.*; import cn.iocoder.yudao.module.member.convert.auth.AuthConvert; import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO; @@ -176,7 +177,8 @@ public class AuthServiceImpl implements AuthService { try { // 调用 Spring Security çš„ AuthenticationManager#authenticate(...) 方法,使用账å·å¯†ç è¿›è¡Œè®¤è¯ // 在其内部,会调用到 loadUserByUsername æ–¹æ³•ï¼ŒèŽ·å– User ä¿¡æ¯ - authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, password)); + authentication = authenticationManager.authenticate(new MultiUsernamePasswordAuthenticationToken( + username, password, getUserType())); } catch (BadCredentialsException badCredentialsException) { this.createLoginLog(username, logTypeEnum, SysLoginResultEnum.BAD_CREDENTIALS); throw exception(AUTH_LOGIN_BAD_CREDENTIALS); diff --git a/yudao-server/pom.xml b/yudao-server/pom.xml deleted file mode 100644 index 0040513149..0000000000 --- a/yudao-server/pom.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - yudao - cn.iocoder.boot - ${revision} - - 4.0.0 - - yudao-server - jar - - ${artifactId} - - åŽç«¯ Server çš„ä¸»é¡¹ç›®ï¼Œé€šè¿‡å¼•å…¥éœ€è¦ yudao-module-xxx çš„ä¾èµ–, - 从而实现æä¾› RESTful API ç»™ yudao-ui-adminã€yudao-ui-user ç­‰å‰ç«¯é¡¹ç›®ã€‚ - 本质上æ¥è¯´ï¼Œå®ƒå°±æ˜¯ä¸ªç©ºå£³ï¼ˆå®¹å™¨ï¼‰ï¼ - - - diff --git a/更新日志.md b/更新日志.md index 5ce39fb849..9ac18dd8e2 100644 --- a/更新日志.md +++ b/更新日志.md @@ -4,29 +4,30 @@ * 钉钉ã€é£žä¹¦ç­‰é€šçŸ¥ * Vue3 æ”¯æŒ -## [v1.4.0] 计划 - -* å·¥ä½œæµ - * 修改表å•ä¸ºå¤–ç½®è¡¨å• - * ä¿®æ”¹è¯·å‡æµç¨‹ - * 暂时以用户的岗ä½ä½œä¸ºactiviti 的用户组 - * 请å‡éœ€è¦è¯·å‡äººéƒ¨é—¨ä¸‹å…·æœ‰é¡¹ç›®ç»ç†å²—ä½ï¼Œ 部门ç»ç†ï¼Œ 和人事 å²—ä½çš„用户 - * 新增 èŠ‹é“æºç éƒ¨é—¨ä¸‹ 用户 normal(å²—ä½ æ™®é€šç”¨æˆ·) projectmgr(å²—ä½ é¡¹ç›®ç»ç†) depmgrï¼ˆå²—ä½ éƒ¨é—¨ç»ç†ï¼‰ hradmin (å²—ä½ äººäº‹) - * è¯·å‡æµç¨‹å¦‚下 - 1. 请å‡äºº normal (å¯†ç  123456) 登录在我的请å‡è¡¨å•,点击新增,填写请å‡è¡¨å• - 2. 如果请å‡å¤©æ•°<=3, 项目ç»ç† 进行审批. 项目ç»ç† projectmgr(密ç ï¼š123456) 登录 待办请å‡ï¼Œä¸­è¿›è¡Œå®¡æ‰¹ï¼Œå¯ä»¥æŸ¥çœ‹åކå²è·Ÿè¸ªï¼Œå’Œæµç¨‹å›¾ - 3. 如果请å‡å¤©æ•°>3 需部门ç»ç† 进行审批,部门ç»ç†depmgr(密ç ï¼š123456) 登录 待办请å‡ï¼Œä¸­è¿›è¡Œå®¡æ‰¹ï¼Œå¯ä»¥æŸ¥çœ‹åކå²è·Ÿè¸ªï¼Œå’Œæµç¨‹å›¾ - 4. 人事登陆(用户å:hradmin 密ç :123456) 登录 待办请å‡ï¼Œ 中进行审批,å¯ä»¥æŸ¥çœ‹åކå²è·Ÿè¸ªï¼Œå’Œæµç¨‹å›¾ - 5. æµç¨‹ç»“æŸ - * 我的请å‡ä¸­ï¼Œå¯ä»¥æŸ¥è¯¢æœ¬äººçš„请å‡ç”³è¯·ï¼Œ 和进度 - ### 📠TODO * 支付 * 用户å‰å°çš„社交登陆 * 用户å‰å°çš„修改手机ã€ä¿®æ”¹å¯†ç ã€å¿˜è®°å¯†ç  -## [v1.3.0] 进行中 +## [v1.4.0] 计划,预计 2022.02.28 å‘布 + +### âš ï¸ Warning + +### 📈 Statistic + +### â­ New Features + +*ã€ä¼˜åŒ–】æ“作日志新增用户类型,实现 APP 端的 API çš„æ“作日志的记录 + +### 🞠Bug Fixes + +*ã€ä¿®å¤ã€‘用户无æƒé™è®¿é—® 指定 API 时,未返回 FORBIDDEN ç»“æžœç  + +### 🔨 Dependency Upgrades + + +## [v1.3.0] 2022.01.24 ### âš ï¸ Warning From 36d01371bb1562443e67d70d7fc9e2c3a912a30b Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sat, 29 Jan 2022 10:01:35 +0800 Subject: [PATCH 07/47] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20bpm=20=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E7=9A=84=E4=BF=AE=E6=94=B9=E5=BB=BA=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yudao-module-bpm/TODO.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 yudao-module-bpm/TODO.md diff --git a/yudao-module-bpm/TODO.md b/yudao-module-bpm/TODO.md new file mode 100644 index 0000000000..35a2e25b1f --- /dev/null +++ b/yudao-module-bpm/TODO.md @@ -0,0 +1,6 @@ +1. ç±»åå¯ä»¥åŽ»æŽ‰ Bpm å‰ç¼€å“ˆ +2. åŽç»­æŽ¥å£æˆ‘ä»¬åˆ†æˆ admin 管ç†åŽå¤©ï¼Œapp 用户å‰ç«¯ï¼›æ‰€ä»¥ controller åŒ…ä¸‹ï¼Œéœ€è¦æœ‰ admin å’Œ app 两个å­åŒ…。å¯è§ https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/feature/multi-module/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller +3. yudao-module-xxx-api 是暴露接å£ç»™å¤–部模å—,所以å¯ä»¥æŠŠ yudao-module-bpm-core-service-api æ”¹æˆ yudao-module-bpm-api。大概率用ä¸äº†æš´éœ² BpmUserGroupServiceApi 哈。 +4. yudao-module-bpm-core-service-impl 模å—,è¦ä¸æ”¹æˆ yudao-module-bpm-base,本质上是æä¾›ç»™ yudao-module-bpm-flowable-impl å’Œ yudao-module-bpm-activiti-impl 继承的。这样的è¯ï¼Œæˆ‘们在 yudao-module-bpm-base: + * 定义一些å¯è¢«ç»§æ‰¿çš„类,例如说 ModelAbstractServiceï¼› + * 定义一些无需被继承的类,例如说 UserGroupServiceã€UserGroupController 等等; From cee7e5072034dba7597b2d03eff448e79a530172 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sat, 29 Jan 2022 14:05:06 +0800 Subject: [PATCH 08/47] =?UTF-8?q?1.=E3=80=90=E4=BF=AE=E5=A4=8D=E3=80=91?= =?UTF-8?q?=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=E5=88=B7=E6=96=B0=E6=9C=AC?= =?UTF-8?q?=E5=9C=B0=E7=BC=93=E5=AD=98=E6=97=B6=EF=BC=8C=E6=97=A0=E7=A7=9F?= =?UTF-8?q?=E6=88=B7=E4=B8=8A=E7=BA=BF=E6=96=87=EF=BC=8C=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=8A=A5=E9=94=99=202.=20member=20=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=EF=BC=8C=E7=BB=9F=E4=B8=80=E4=BD=BF=E7=94=A8=20member?= =?UTF-8?q?=20=E5=89=8D=E7=BC=80=203.=20=E4=BF=AE=E6=94=B9=20Spring=20Secu?= =?UTF-8?q?rity=20logout=20=E9=85=8D=E7=BD=AE=EF=BC=8C=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=A4=9A=E7=94=A8=E6=88=B7=E7=B1=BB=E5=9E=8B=E7=9A=84=E9=80=80?= =?UTF-8?q?=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- http-client.env.json | 1 - .../system/dal/mysql/dept/SysDeptMapper.java | 2 + .../YudaoWebSecurityConfigurerAdapter.java | 8 +++- .../core/util/SecurityFrameworkUtils.java | 37 +++++++++++++------ .../config/BpmActivitiConfiguration.java | 6 --- .../app/auth/AppAuthController.http | 11 ++++-- .../app/auth/AppAuthController.java | 7 +++- .../app/weixin/AppWxMpController.http | 0 .../app/weixin/AppWxMpController.java | 6 +-- .../member/dal/dataobject/user/UserDO.java | 2 +- .../yudao/module/member/dal/package-info.java | 2 +- .../yudao/module/member/package-info.java | 7 ++++ .../src/test/resources/sql/clean.sql | 2 +- .../src/test/resources/sql/create_tables.sql | 2 +- .../userserver/UserServerApplication.java | 14 ------- .../modules/weixin/package-info.java | 7 ---- .../src/main/resources/application.yaml | 3 -- 更新日志.md | 1 + 18 files changed, 63 insertions(+), 55 deletions(-) rename yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/weixin/controller/mp/WxMpController.http => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/weixin/AppWxMpController.http (100%) rename yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/weixin/controller/mp/WxMpController.java => yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/weixin/AppWxMpController.java (90%) delete mode 100644 yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/UserServerApplication.java delete mode 100644 yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/weixin/package-info.java diff --git a/http-client.env.json b/http-client.env.json index c18fbb054e..10c1fdd4f8 100644 --- a/http-client.env.json +++ b/http-client.env.json @@ -1,7 +1,6 @@ { "local": { "baseUrl": "http://127.0.0.1:48080/api", - "userServerUrl": "http://127.0.0.1:28080/api", "token": "test1", "userApi": "http://127.0.0.1:48080/app-api", diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/dept/SysDeptMapper.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/dept/SysDeptMapper.java index 84ab4c85de..be3bedeafb 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/dept/SysDeptMapper.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/dept/SysDeptMapper.java @@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptListReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.apache.ibatis.annotations.Mapper; @@ -28,6 +29,7 @@ public interface SysDeptMapper extends BaseMapperX { return selectCount(SysDeptDO::getParentId, parentId); } + @InterceptorIgnore(tenantLine = "on") // 该方法忽略多租户。原因:该方法被异步 task 调用,此时获å–ä¸åˆ°ç§Ÿæˆ·ç¼–å· default boolean selectExistsByUpdateTimeAfter(Date maxUpdateTime) { return selectOne(new LambdaQueryWrapper().select(SysDeptDO::getId) .gt(SysDeptDO::getUpdateTime, maxUpdateTime).last(SqlConstants.LIMIT1)) != null; diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java index 276ce1ed57..312f51e046 100644 --- a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java +++ b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.framework.security.config; +import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.security.core.authentication.MultiUserDetailsAuthenticationProvider; import cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter; import cn.iocoder.yudao.framework.security.core.service.SecurityAuthFrameworkService; @@ -21,8 +22,10 @@ import org.springframework.security.web.AuthenticationEntryPoint; import org.springframework.security.web.access.AccessDeniedHandler; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; +import org.springframework.security.web.util.matcher.RequestMatcher; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; /** * 自定义的 Spring Security é…置适é…器实现 @@ -106,6 +109,7 @@ public class YudaoWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdap */ @Override protected void configure(HttpSecurity httpSecurity) throws Exception { + // 登出 httpSecurity // å¼€å¯è·¨åŸŸ .cors().and() @@ -117,7 +121,9 @@ public class YudaoWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdap // 一堆自定义的 Spring Security 处ç†å™¨ .exceptionHandling().authenticationEntryPoint(authenticationEntryPoint) .accessDeniedHandler(accessDeniedHandler).and() - .logout().logoutUrl(buildAdminApi("/logout")).logoutSuccessHandler(logoutSuccessHandler); // 登出 + // 登出地å€çš„é…ç½® + .logout().logoutSuccessHandler(logoutSuccessHandler).logoutRequestMatcher(request -> // 匹é…多ç§ç”¨æˆ·ç±»åž‹çš„登出 + StrUtil.equalsAny(request.getRequestURI(), buildAdminApi("/logout"), buildAppApi("/member/logout"))); // 设置æ¯ä¸ªè¯·æ±‚çš„æƒé™ ①:全局共享规则 httpSecurity.authorizeRequests() diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/util/SecurityFrameworkUtils.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/util/SecurityFrameworkUtils.java index 93f163086b..562c6ed9f6 100644 --- a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/util/SecurityFrameworkUtils.java +++ b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/util/SecurityFrameworkUtils.java @@ -41,6 +41,19 @@ public class SecurityFrameworkUtils { return authorization.substring(index + 7).trim(); } + /** + * 获得当å‰è®¤è¯ä¿¡æ¯ + * + * @return 认è¯ä¿¡æ¯ + */ + public static Authentication getAuthentication() { + SecurityContext context = SecurityContextHolder.getContext(); + if (context == null) { + return null; + } + return context.getAuthentication(); + } + /** * 获å–当å‰ç”¨æˆ· * @@ -48,11 +61,7 @@ public class SecurityFrameworkUtils { */ @Nullable public static LoginUser getLoginUser() { - SecurityContext context = SecurityContextHolder.getContext(); - if (context == null) { - return null; - } - Authentication authentication = context.getAuthentication(); + Authentication authentication = getAuthentication(); if (authentication == null) { return null; } @@ -88,16 +97,22 @@ public class SecurityFrameworkUtils { * @param request 请求 */ public static void setLoginUser(LoginUser loginUser, HttpServletRequest request) { - // 创建 UsernamePasswordAuthenticationToken 对象 - UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken( - loginUser, null, loginUser.getAuthorities()); - authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); - // 设置到上下文 - SecurityContextHolder.getContext().setAuthentication(authenticationToken); + // 创建 Authentication,并设置到上下文 + Authentication authentication = buildAuthentication(loginUser, request); + SecurityContextHolder.getContext().setAuthentication(authentication); + // é¢å¤–设置到 request 中,用于 ApiAccessLogFilter å¯ä»¥èŽ·å–到用户编å·ï¼› // 原因是,Spring Security çš„ Filter 在 ApiAccessLogFilter åŽé¢ï¼Œåœ¨å®ƒè®°å½•è®¿é—®æ—¥å¿—æ—¶ï¼Œçº¿ä¸Šä¸Šä¸‹æ–‡å·²ç»æ²¡æœ‰ç”¨æˆ·ç¼–å·ç­‰ä¿¡æ¯ WebFrameworkUtils.setLoginUserId(request, loginUser.getId()); WebFrameworkUtils.setLoginUserType(request, loginUser.getUserType()); } + private static Authentication buildAuthentication(LoginUser loginUser, HttpServletRequest request) { + // 创建 UsernamePasswordAuthenticationToken 对象 + UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken( + loginUser, null, loginUser.getAuthorities()); + authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); + return authenticationToken; + } + } diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java index 8e30c22db6..2e1da6f4ab 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java @@ -10,17 +10,11 @@ import cn.iocoder.yudao.coreservice.modules.bpm.api.group.BpmUserGroupServiceApi import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; import cn.iocoder.yudao.coreservice.modules.system.service.permission.SysPermissionCoreService; import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmUserGroupService; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService; -import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; import org.activiti.api.runtime.shared.identity.UserGroupManager; -import org.activiti.core.common.spring.identity.ActivitiUserGroupManagerImpl; import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer; import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.security.core.userdetails.UserDetailsService; import java.util.Collections; import java.util.List; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.http b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.http index dbe82122ac..81f250bd31 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.http +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.http @@ -1,5 +1,5 @@ ### 请求 /login æŽ¥å£ => æˆåŠŸ -POST {{userApi}}/login +POST {{userApi}}/member/login Content-Type: application/json tenant-id: {{userTenentId}} @@ -9,8 +9,9 @@ tenant-id: {{userTenentId}} } ### 请求 /send-sms-code æŽ¥å£ => æˆåŠŸ -POST {{userServerUrl}}/send-sms-code +POST {{userApi}}/member/send-sms-code Content-Type: application/json +tenant-id: {{userTenentId}} { "mobile": "15601691399", @@ -18,8 +19,9 @@ Content-Type: application/json } ### 请求 /sms-login æŽ¥å£ => æˆåŠŸ -POST {{userServerUrl}}/sms-login +POST {{userApi}}/member/sms-login Content-Type: application/json +tenant-id: {{userTenentId}} { "mobile": "15601691301", @@ -27,6 +29,7 @@ Content-Type: application/json } ### 请求 /logout æŽ¥å£ => æˆåŠŸ -POST {{userServerUrl}}/logout +POST {{userApi}}/member/logout Content-Type: application/json Authorization: Bearer c1b76bdaf2c146c581caa4d7fd81ee66 +tenant-id: {{userTenentId}} diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java index f52e96d1a8..a7c541e1fa 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java @@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; +import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.module.member.controller.app.auth.vo.*; import cn.iocoder.yudao.module.member.service.auth.AuthService; import cn.iocoder.yudao.module.member.service.sms.SysSmsCodeService; @@ -13,6 +14,7 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -26,7 +28,7 @@ import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUti @Api(tags = "APP 端 - 认è¯") @RestController -@RequestMapping("/") +@RequestMapping("/member/") @Validated @Slf4j public class AppAuthController { @@ -39,6 +41,9 @@ public class AppAuthController { @Resource private SysSocialCoreService socialService; + @Resource + private LogoutSuccessHandler logoutSuccessHandler; + @PostMapping("/login") @ApiOperation("使用手机 + 密ç ç™»å½•") @OperateLog(enable = false) // é¿å… Post 请求被记录æ“作日志 diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/weixin/controller/mp/WxMpController.http b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/weixin/AppWxMpController.http similarity index 100% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/weixin/controller/mp/WxMpController.http rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/weixin/AppWxMpController.http diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/weixin/controller/mp/WxMpController.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/weixin/AppWxMpController.java similarity index 90% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/weixin/controller/mp/WxMpController.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/weixin/AppWxMpController.java index decd907a0d..5b33d44e6d 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/weixin/controller/mp/WxMpController.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/weixin/AppWxMpController.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.weixin.controller.mp; +package cn.iocoder.yudao.module.member.controller.app.weixin; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import io.swagger.annotations.Api; @@ -19,10 +19,10 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @Api(tags = "微信公众å·") @RestController -@RequestMapping("/wx/mp") +@RequestMapping("/member/wx-mp") @Validated @Slf4j -public class WxMpController { +public class AppWxMpController { @Resource private WxMpService mpService; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/UserDO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/UserDO.java index f451680442..adefe1429d 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/UserDO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/UserDO.java @@ -16,7 +16,7 @@ import java.util.Date; * * @author èŠ‹é“æºç  */ -@TableName(value = "mbr_user", autoResultMap = true) +@TableName(value = "member_user", autoResultMap = true) @Data @EqualsAndHashCode(callSuper = true) @Builder diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/package-info.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/package-info.java index 5b05c46f14..a45c2a1613 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/package-info.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/package-info.java @@ -4,6 +4,6 @@ * 2. redis:Redis çš„ CRUD æ“作 * 3. mysql:MySQL çš„ CRUD æ“作 * - * 其中,MySQL 的表以 mbr_ 作为å‰ç¼€ + * 其中,MySQL 的表以 member_ 作为å‰ç¼€ */ package cn.iocoder.yudao.module.member.dal; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/package-info.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/package-info.java index dabac6ac39..405aa4cbf6 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/package-info.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/package-info.java @@ -1 +1,8 @@ +/** + * member 模å—,我们放会员业务。 + * 例如说:会员中心等等 + * + * 1. Controller URL:以 /member/ 开头,é¿å…和其它 Module å†²çª + * 2. DataObject 表å:以 member_ 开头,方便在数æ®åº“中区分 + */ package cn.iocoder.yudao.module.member; diff --git a/yudao-module-member/yudao-module-member-impl/src/test/resources/sql/clean.sql b/yudao-module-member/yudao-module-member-impl/src/test/resources/sql/clean.sql index bedf8d0085..9775e24542 100644 --- a/yudao-module-member/yudao-module-member-impl/src/test/resources/sql/clean.sql +++ b/yudao-module-member/yudao-module-member-impl/src/test/resources/sql/clean.sql @@ -1,2 +1,2 @@ -- mbr 开头的 DB -DELETE FROM "mbr_user"; \ No newline at end of file +DELETE FROM "member_user"; diff --git a/yudao-module-member/yudao-module-member-impl/src/test/resources/sql/create_tables.sql b/yudao-module-member/yudao-module-member-impl/src/test/resources/sql/create_tables.sql index c9dfd8c318..98d3d2bc18 100644 --- a/yudao-module-member/yudao-module-member-impl/src/test/resources/sql/create_tables.sql +++ b/yudao-module-member/yudao-module-member-impl/src/test/resources/sql/create_tables.sql @@ -1,5 +1,5 @@ -- mbr 开头的 DB -CREATE TABLE IF NOT EXISTS "mbr_user" ( +CREATE TABLE IF NOT EXISTS "member_user" ( "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY COMMENT 'ç¼–å·', "nickname" varchar(30) NOT NULL DEFAULT '' COMMENT '用户昵称', "avatar" varchar(255) NOT NULL DEFAULT '' COMMENT '头åƒ', diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/UserServerApplication.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/UserServerApplication.java deleted file mode 100644 index b0ba53e9b2..0000000000 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/UserServerApplication.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.iocoder.yudao.userserver; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SuppressWarnings("SpringComponentScan") // 忽略 IDEA 无法识别 ${yudao.info.base-package} å’Œ ${yudao.core-service.base-package} -@SpringBootApplication(scanBasePackages = {"${yudao.info.base-package}", "${yudao.core-service.base-package}"}) -public class UserServerApplication { - - public static void main(String[] args) { - SpringApplication.run(UserServerApplication.class, args); - } - -} diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/weixin/package-info.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/weixin/package-info.java deleted file mode 100644 index 69d3e22212..0000000000 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/weixin/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -/** - * weixin 包下,我们放通用业务,支撑上层的核心业务。 - * 例如说:用户ã€éƒ¨é—¨ã€æƒé™ã€æ•°æ®å­—典等等 - * - * 缩写:wx - */ -package cn.iocoder.yudao.userserver.modules.weixin; diff --git a/yudao-user-server/src/main/resources/application.yaml b/yudao-user-server/src/main/resources/application.yaml index 1d789232d9..7f11275267 100644 --- a/yudao-user-server/src/main/resources/application.yaml +++ b/yudao-user-server/src/main/resources/application.yaml @@ -37,8 +37,6 @@ mybatis-plus: mapper-locations: classpath*:mapper/*.xml type-aliases-package: ${yudao.info.base-package}.modules.*.dal.dataobject, ${yudao.core-service.base-package}.modules.*.dal.dataobject - - --- #################### 芋é“相关é…ç½® #################### yudao: @@ -67,5 +65,4 @@ yudao: - cn.iocoder.yudao.userserver.modules.member.enums.MbrErrorCodeConstants - cn.iocoder.yudao.userserver.modules.system.enums.SysErrorCodeConstants - debug: false diff --git a/更新日志.md b/更新日志.md index 9ac18dd8e2..b1f34099e4 100644 --- a/更新日志.md +++ b/更新日志.md @@ -23,6 +23,7 @@ ### 🞠Bug Fixes *ã€ä¿®å¤ã€‘用户无æƒé™è®¿é—® 指定 API 时,未返回 FORBIDDEN ç»“æžœç  +*ã€ä¿®å¤ã€‘定时任务刷新本地缓存时,无租户上线文,导致查询报错 ### 🔨 Dependency Upgrades From 06887bff1630e13874e1b4f488ac6be5fc653baa Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sat, 29 Jan 2022 16:05:32 +0800 Subject: [PATCH 09/47] =?UTF-8?q?=E5=A4=9A=E6=A8=A1=E5=9D=97=E9=87=8D?= =?UTF-8?q?=E6=9E=84=204=EF=BC=9Asystem=20=E6=A8=A1=E5=9D=97=E7=9A=84?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=EF=BC=8C=E4=BB=A5=E5=8F=8A=E5=B0=86=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E7=9A=84=E4=BB=A3=E7=A0=81=E5=85=88=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 + yudao-admin-server/pom.xml | 9 +- .../adminserver/AdminServerApplication.java | 2 +- .../convert/permission/SysMenuConvert.java | 28 ----- .../framework/captcha/package-info.java | 4 - .../framework/codegen/package-info.java | 4 - .../datapermission/package-info.java | 4 - .../modules/system/job/package-info.java | 1 - .../modules/system/package-info.java | 7 -- .../codegen/ToolCodegenColumnDO.java | 3 +- .../codegen/ToolCodegenTableDO.java | 3 +- .../codegen/config/CodegenConfiguration.java | 2 +- .../codegen/config/CodegenProperties.java | 2 +- .../tool/framework/codegen/package-info.java | 4 + .../codegen/impl/ToolCodegenEngine.java | 2 +- .../codegen/impl/ToolCodegenServiceImpl.java | 2 +- .../src/main/resources/application.yaml | 3 +- .../quartz/core/SchedulerManagerTest.java | 2 +- .../redis/core/stream/RedisStreamTest.java | 6 +- .../modules/system/service/package-info.java | 2 +- .../sms/SysSmsServiceIntegrationTest.java | 14 +-- .../config/YudaoMybatisAutoConfiguration.java | 3 +- .../mybatis/core}/enums/SqlConstants.java | 2 +- .../yudao-module-member-impl/pom.xml | 5 +- yudao-module-system/pom.xml | 24 ++++ .../yudao-module-system-api/pom.xml | 26 +++++ .../yudao-module-system-impl/pom.xml | 106 ++++++++++++++++++ .../controller/auth/SysAuthController.http | 0 .../controller/auth/SysAuthController.java | 16 +-- .../auth/SysUserSessionController.java | 12 +- .../auth/vo/auth/SysAuthLoginReqVO.java | 2 +- .../auth/vo/auth/SysAuthLoginRespVO.java | 2 +- .../auth/vo/auth/SysAuthMenuRespVO.java | 2 +- .../vo/auth/SysAuthPermissionInfoRespVO.java | 2 +- .../auth/vo/auth/SysAuthSocialBindReqVO.java | 2 +- .../vo/auth/SysAuthSocialLogin2ReqVO.java | 2 +- .../auth/vo/auth/SysAuthSocialLoginReqVO.java | 2 +- .../vo/auth/SysAuthSocialUnbindReqVO.java | 2 +- .../session/SysUserSessionPageItemRespVO.java | 2 +- .../vo/session/SysUserSessionPageReqVO.java | 2 +- .../common/SysCaptchaController.http | 0 .../common/SysCaptchaController.java | 6 +- .../common/vo/SysCaptchaImageRespVO.java | 2 +- .../controller/dept/SysDeptController.java | 8 +- .../controller/dept/SysPostController.java | 8 +- .../dept/vo/dept/SysDeptBaseVO.java | 4 +- .../dept/vo/dept/SysDeptCreateReqVO.java | 2 +- .../dept/vo/dept/SysDeptListReqVO.java | 2 +- .../dept/vo/dept/SysDeptRespVO.java | 2 +- .../dept/vo/dept/SysDeptSimpleRespVO.java | 2 +- .../dept/vo/dept/SysDeptUpdateReqVO.java | 2 +- .../dept/vo/post/SysPostBaseVO.java | 2 +- .../dept/vo/post/SysPostCreateReqVO.java | 2 +- .../dept/vo/post/SysPostExcelVO.java | 2 +- .../dept/vo/post/SysPostExportReqVO.java | 2 +- .../dept/vo/post/SysPostListReqVO.java | 2 +- .../dept/vo/post/SysPostPageReqVO.java | 2 +- .../dept/vo/post/SysPostRespVO.java | 2 +- .../dept/vo/post/SysPostSimpleRespVO.java | 2 +- .../dept/vo/post/SysPostUpdateReqVO.java | 2 +- .../dict/SysDictDataController.http | 0 .../dict/SysDictDataController.java | 8 +- .../dict/SysDictTypeController.java | 10 +- .../dict/vo/data/SysDictDataBaseVO.java | 2 +- .../dict/vo/data/SysDictDataCreateReqVO.java | 2 +- .../dict/vo/data/SysDictDataExcelVO.java | 2 +- .../dict/vo/data/SysDictDataExportReqVO.java | 2 +- .../dict/vo/data/SysDictDataPageReqVO.java | 2 +- .../dict/vo/data/SysDictDataRespVO.java | 2 +- .../dict/vo/data/SysDictDataSimpleRespVO.java | 2 +- .../dict/vo/data/SysDictDataUpdateReqVO.java | 2 +- .../dict/vo/type/SysDictTypeBaseVO.java | 2 +- .../dict/vo/type/SysDictTypeCreateReqVO.java | 2 +- .../dict/vo/type/SysDictTypeExcelVO.java | 2 +- .../dict/vo/type/SysDictTypeExportReqVO.java | 2 +- .../dict/vo/type/SysDictTypePageReqVO.java | 2 +- .../dict/vo/type/SysDictTypeRespVO.java | 2 +- .../dict/vo/type/SysDictTypeSimpleRespVO.java | 2 +- .../dict/vo/type/SysDictTypeUpdateReqVO.java | 2 +- .../errorcode/SysErrorCodeController.http | 0 .../errorcode/SysErrorCodeController.java | 10 +- .../errorcode/vo/SysErrorCodeBaseVO.java | 2 +- .../errorcode/vo/SysErrorCodeCreateReqVO.java | 2 +- .../errorcode/vo/SysErrorCodeExcelVO.java | 6 +- .../errorcode/vo/SysErrorCodeExportReqVO.java | 2 +- .../errorcode/vo/SysErrorCodePageReqVO.java | 2 +- .../errorcode/vo/SysErrorCodeRespVO.java | 2 +- .../errorcode/vo/SysErrorCodeUpdateReqVO.java | 2 +- .../logger/SysLoginLogController.java | 14 +-- .../logger/SysOperateLogController.http | 0 .../logger/SysOperateLogController.java | 17 ++- .../logger/vo/loginlog/SysLoginLogBaseVO.java | 2 +- .../vo/loginlog/SysLoginLogExcelVO.java | 2 +- .../vo/loginlog/SysLoginLogExportReqVO.java | 2 +- .../vo/loginlog/SysLoginLogPageReqVO.java | 2 +- .../logger/vo/loginlog/SysLoginLogRespVO.java | 2 +- .../vo/operatelog/SysOperateLogBaseVO.java | 2 +- .../vo/operatelog/SysOperateLogExcelVO.java | 2 +- .../operatelog/SysOperateLogExportReqVO.java | 2 +- .../vo/operatelog/SysOperateLogPageReqVO.java | 2 +- .../vo/operatelog/SysOperateLogRespVO.java | 2 +- .../notice/SysNoticeController.java | 14 +-- .../controller/notice/vo/SysNoticeBaseVO.java | 2 +- .../notice/vo/SysNoticeCreateReqVO.java | 2 +- .../notice/vo/SysNoticePageReqVO.java | 2 +- .../controller/notice/vo/SysNoticeRespVO.java | 2 +- .../notice/vo/SysNoticeUpdateReqVO.java | 2 +- .../permission/SysMenuController.http | 0 .../permission/SysMenuController.java | 10 +- .../permission/SysPermissionController.java | 10 +- .../permission/SysRoleController.http | 0 .../permission/SysRoleController.java | 8 +- .../permission/vo/menu/SysMenuBaseVO.java | 2 +- .../vo/menu/SysMenuCreateReqVO.java | 2 +- .../permission/vo/menu/SysMenuListReqVO.java | 2 +- .../permission/vo/menu/SysMenuRespVO.java | 2 +- .../vo/menu/SysMenuSimpleRespVO.java | 2 +- .../vo/menu/SysMenuUpdateReqVO.java | 2 +- ...SysPermissionAssignRoleDataScopeReqVO.java | 2 +- .../SysPermissionAssignRoleMenuReqVO.java | 2 +- .../SysPermissionAssignUserRoleReqVO.java | 2 +- .../permission/vo/role/SysRoleBaseVO.java | 2 +- .../vo/role/SysRoleCreateReqVO.java | 2 +- .../permission/vo/role/SysRoleExcelVO.java | 2 +- .../vo/role/SysRoleExportReqVO.java | 2 +- .../permission/vo/role/SysRolePageReqVO.java | 2 +- .../permission/vo/role/SysRoleRespVO.java | 2 +- .../vo/role/SysRoleSimpleRespVO.java | 2 +- .../vo/role/SysRoleUpdateReqVO.java | 2 +- .../vo/role/SysRoleUpdateStatusReqVO.java | 2 +- .../controller/sms/SmsCallbackController.java | 2 +- .../sms/SysSmsChannelController.java | 8 +- .../controller/sms/SysSmsLogController.java | 14 +-- .../sms/SysSmsTemplateController.http | 0 .../sms/SysSmsTemplateController.java | 8 +- .../sms/vo/channel/SysSmsChannelBaseVO.java | 2 +- .../vo/channel/SysSmsChannelCreateReqVO.java | 2 +- .../vo/channel/SysSmsChannelPageReqVO.java | 2 +- .../sms/vo/channel/SysSmsChannelRespVO.java | 2 +- .../vo/channel/SysSmsChannelSimpleRespVO.java | 2 +- .../vo/channel/SysSmsChannelUpdateReqVO.java | 2 +- .../sms/vo/log/SysSmsLogExcelVO.java | 2 +- .../sms/vo/log/SysSmsLogExportReqVO.java | 2 +- .../sms/vo/log/SysSmsLogPageReqVO.java | 2 +- .../sms/vo/log/SysSmsLogRespVO.java | 2 +- .../sms/vo/template/SysSmsTemplateBaseVO.java | 2 +- .../template/SysSmsTemplateCreateReqVO.java | 2 +- .../vo/template/SysSmsTemplateExcelVO.java | 2 +- .../template/SysSmsTemplateExportReqVO.java | 2 +- .../vo/template/SysSmsTemplatePageReqVO.java | 2 +- .../sms/vo/template/SysSmsTemplateRespVO.java | 2 +- .../vo/template/SysSmsTemplateSendReqVO.java | 2 +- .../template/SysSmsTemplateUpdateReqVO.java | 2 +- .../tenant/SysTenantController.java | 8 +- .../controller/tenant/vo/SysTenantBaseVO.java | 3 +- .../tenant/vo/SysTenantCreateReqVO.java | 4 +- .../tenant/vo/SysTenantExcelVO.java | 3 +- .../tenant/vo/SysTenantExportReqVO.java | 2 +- .../tenant/vo/SysTenantPageReqVO.java | 2 +- .../controller/tenant/vo/SysTenantRespVO.java | 2 +- .../tenant/vo/SysTenantUpdateReqVO.java | 3 +- .../controller/user/SysUserController.http | 0 .../controller/user/SysUserController.java | 8 +- .../user/SysUserProfileController.http | 0 .../user/SysUserProfileController.java | 20 ++-- .../user/vo/profile/SysUserProfileRespVO.java | 4 +- .../SysUserProfileUpdatePasswordReqVO.java | 2 +- .../vo/profile/SysUserProfileUpdateReqVO.java | 2 +- .../user/vo/user/SysUserBaseVO.java | 2 +- .../user/vo/user/SysUserCreateReqVO.java | 2 +- .../user/vo/user/SysUserExcelVO.java | 2 +- .../user/vo/user/SysUserExportReqVO.java | 2 +- .../user/vo/user/SysUserImportExcelVO.java | 2 +- .../user/vo/user/SysUserImportRespVO.java | 2 +- .../user/vo/user/SysUserPageItemRespVO.java | 2 +- .../user/vo/user/SysUserPageReqVO.java | 2 +- .../user/vo/user/SysUserRespVO.java | 2 +- .../user/vo/user/SysUserSimpleRespVO.java | 2 +- .../vo/user/SysUserUpdatePasswordReqVO.java | 3 +- .../user/vo/user/SysUserUpdateReqVO.java | 2 +- .../vo/user/SysUserUpdateStatusReqVO.java | 2 +- .../system/convert/auth/SysAuthConvert.java | 10 +- .../convert/auth/SysUserSessionConvert.java | 4 +- .../convert/common/SysCaptchaConvert.java | 5 +- .../system/convert/dept/SysDeptConvert.java | 10 +- .../system/convert/dept/SysPostConvert.java | 4 +- .../convert/dict/SysDictDataConvert.java | 4 +- .../convert/dict/SysDictTypeConvert.java | 6 +- .../errorcode/SysErrorCodeConvert.java | 16 +-- .../convert/logger/SysLoginLogConvert.java | 6 +- .../convert/logger/SysOperateLogConvert.java | 8 +- .../convert/notice/SysNoticeConvert.java | 10 +- .../module}/system/convert/package-info.java | 2 +- .../convert/permission/SysMenuConvert.java | 28 +++++ .../convert/permission/SysRoleConvert.java | 4 +- .../convert/sms/SysSmsChannelConvert.java | 10 +- .../system/convert/sms/SysSmsLogConvert.java | 6 +- .../convert/sms/SysSmsTemplateConvert.java | 10 +- .../convert/tenant/SysTenantConvert.java | 10 +- .../system/convert/user/SysUserConvert.java | 10 +- ...‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md | 0 .../dal/dataobject/dict/SysDictTypeDO.java | 2 +- .../dataobject/errorcode/SysErrorCodeDO.java | 4 +- .../dataobject/logger/SysOperateLogDO.java | 2 +- .../dal/dataobject/notice/SysNoticeDO.java | 4 +- .../dal/dataobject/permission/SysMenuDO.java | 4 +- .../dataobject/permission/SysRoleMenuDO.java | 2 +- .../dal/mysql/auth/SysUserSessionMapper.java | 4 +- .../system/dal/mysql/dept/SysDeptMapper.java | 6 +- .../system/dal/mysql/dept/SysPostMapper.java | 6 +- .../dal/mysql/dict/SysDictDataMapper.java | 8 +- .../dal/mysql/dict/SysDictTypeMapper.java | 8 +- .../mysql/errorcode/SysErrorCodeMapper.java | 8 +- .../dal/mysql/logger/SysLoginLogMapper.java | 8 +- .../dal/mysql/logger/SysOperateLogMapper.java | 8 +- .../dal/mysql/notice/SysNoticeMapper.java | 6 +- .../dal/mysql/permission/SysMenuMapper.java | 8 +- .../dal/mysql/permission/SysRoleMapper.java | 6 +- .../mysql/permission/SysRoleMenuMapper.java | 4 +- .../mysql/permission/SysUserRoleMapper.java | 2 +- .../dal/mysql/sms/SysSmsChannelMapper.java | 4 +- .../system/dal/mysql/sms/SysSmsLogMapper.java | 6 +- .../dal/mysql/sms/SysSmsTemplateMapper.java | 6 +- .../dal/mysql/tenant/SysTenantMapper.java | 6 +- .../system/dal/mysql/user/SysUserMapper.java | 6 +- .../dal/redis/SysRedisKeyConstants.java | 6 +- .../dal/redis/common/SysCaptchaRedisDAO.java | 4 +- .../system/enums/SysErrorCodeConstants.java | 2 +- .../module}/system/enums/dept/DeptIdEnum.java | 2 +- .../enums/errorcode/SysErrorCodeTypeEnum.java | 2 +- .../enums/logger/SysLoginLogTypeEnum.java | 2 +- .../enums/logger/SysLoginResultEnum.java | 2 +- .../enums/notice/SysNoticeTypeEnum.java | 2 +- .../system/enums/permission/MenuIdEnum.java | 2 +- .../system/enums/permission/MenuTypeEnum.java | 2 +- .../system/enums/permission/RoleCodeEnum.java | 2 +- .../enums/permission/SysRoleTypeEnum.java | 2 +- .../captcha/config/CaptchaConfig.java | 2 +- .../captcha/config/CaptchaProperties.java | 2 +- .../framework/captcha/package-info.java | 4 + .../SysDataPermissionConfiguration.java | 2 +- .../datapermission/package-info.java | 4 + .../config/ErrorCodeConfiguration.java | 12 +- .../errorcode/config/ErrorCodeProperties.java | 2 +- .../core/dto/ErrorCodeAutoGenerateReqDTO.java | 2 +- .../errorcode/core/dto/ErrorCodeRespDTO.java | 2 +- .../generator/ErrorCodeAutoGenerator.java | 2 +- .../generator/ErrorCodeAutoGeneratorImpl.java | 6 +- .../core/loader/ErrorCodeLoader.java | 2 +- .../core/loader/ErrorCodeLoaderImpl.java | 6 +- .../service/ErrorCodeFrameworkService.java | 6 +- .../framework/errorcode/package-info.java | 2 +- .../system/framework/package-info.java | 2 +- .../job/auth/SysUserSessionTimeoutJob.java | 4 +- .../yudao/module/system/job/package-info.java | 1 + .../consumer/dept/SysDeptRefreshConsumer.java | 6 +- .../dict/SysDictDataRefreshConsumer.java | 5 +- .../mq/consumer/mail/SysMailSendConsumer.java | 4 +- .../permission/SysMenuRefreshConsumer.java | 6 +- .../SysRoleMenuRefreshConsumer.java | 6 +- .../permission/SysRoleRefreshConsumer.java | 6 +- .../sms/SysSmsChannelRefreshConsumer.java | 6 +- .../mq/consumer/sms/SysSmsSendConsumer.java | 2 +- .../sms/SysSmsTemplateRefreshConsumer.java | 4 +- .../message/dept/SysDeptRefreshMessage.java | 2 +- .../dict/SysDictDataRefreshMessage.java | 2 +- .../mq/message/mail/SysMailSendMessage.java | 2 +- .../permission/SysMenuRefreshMessage.java | 2 +- .../permission/SysRoleMenuRefreshMessage.java | 2 +- .../permission/SysRoleRefreshMessage.java | 2 +- .../sms/SysSmsChannelRefreshMessage.java | 2 +- .../sms/SysSmsTemplateRefreshMessage.java | 2 +- .../mq/producer/dept/SysDeptProducer.java | 4 +- .../mq/producer/dict/SysDictDataProducer.java | 4 +- .../producer/permission/SysMenuProducer.java | 4 +- .../permission/SysPermissionProducer.java | 4 +- .../producer/permission/SysRoleProducer.java | 4 +- .../mq/producer/sms/SysSmsProducer.java | 6 +- .../yudao/module/system/package-info.java | 8 ++ .../system/service/auth/SysAuthService.java | 4 +- .../service/auth}/SysAuthServiceImpl.java | 29 +++-- .../service/auth/SysUserSessionService.java | 4 +- .../auth}/SysUserSessionServiceImpl.java | 14 +-- .../service/common/SysCaptchaService.java | 4 +- .../common}/SysCaptchaServiceImpl.java | 12 +- .../system/service/dept/SysDeptService.java | 13 +-- .../service/dept}/SysDeptServiceImpl.java | 21 ++-- .../system/service/dept/SysPostService.java | 10 +- .../service/dept}/SysPostServiceImpl.java | 18 +-- .../service/dict/SysDictDataService.java | 12 +- .../service/dict}/SysDictDataServiceImpl.java | 27 ++--- .../service/dict/SysDictTypeService.java | 12 +- .../service/dict}/SysDictTypeServiceImpl.java | 20 ++-- .../errorcode/SysErrorCodeService.java | 14 +-- .../errorcode}/SysErrorCodeServiceImpl.java | 26 ++--- .../service/logger/SysLoginLogService.java | 6 +- .../logger}/SysLoginLogServiceImpl.java | 10 +- .../service/logger/SysOperateLogService.java | 8 +- .../logger}/SysOperateLogServiceImpl.java | 20 ++-- .../service/notice/SysNoticeService.java | 10 +- .../service/notice}/SysNoticeServiceImpl.java | 18 +-- .../service/permission/SysMenuService.java | 10 +- .../permission}/SysMenuServiceImpl.java | 26 ++--- .../permission/SysPermissionService.java | 4 +- .../permission}/SysPermissionServiceImpl.java | 17 ++- .../service/permission/SysRoleService.java | 10 +- .../permission}/SysRoleServiceImpl.java | 26 ++--- .../service/sms/SysSmsChannelService.java | 8 +- .../sms}/SysSmsChannelServiceImpl.java | 22 ++-- .../system/service/sms/SysSmsLogService.java | 6 +- .../service/sms}/SysSmsLogServiceImpl.java | 10 +- .../service/sms/SysSmsTemplateService.java | 10 +- .../sms}/SysSmsTemplateServiceImpl.java | 22 ++-- .../service/tenant/SysTenantService.java | 10 +- .../service/tenant}/SysTenantServiceImpl.java | 18 +-- .../system/service/user/SysUserService.java | 10 +- .../service/user}/SysUserServiceImpl.java | 23 ++-- .../service/auth/SysAuthServiceImplTest.java | 26 ++--- .../auth/SysUserSessionServiceImplTest.java | 14 +-- .../service/common/SysCaptchaServiceTest.java | 11 +- .../service/dept/SysDeptServiceTest.java | 19 ++-- .../service/dept/SysPostServiceTest.java | 19 ++-- .../service/dict/SysDictDataServiceTest.java | 21 ++-- .../service/dict/SysDictTypeServiceTest.java | 24 ++-- .../errorcode/SysErrorCodeServiceTest.java | 36 +++--- .../logger/SysLoginLogServiceImplTest.java | 15 ++- .../logger/SysOperateLogServiceImplTest.java | 15 ++- .../notice/SysNoticeServiceImplTest.java | 19 ++-- .../permission/SysMenuServiceTest.java | 31 +++-- .../permission/SysPermissionServiceTest.java | 15 ++- .../permission/SysRoleServiceTest.java | 19 ++-- .../service/sms/SysSmsChannelServiceTest.java | 24 ++-- .../service/sms/SysSmsLogServiceTest.java | 16 +-- .../sms/SysSmsTemplateServiceTest.java | 24 ++-- .../service/tenant/SysTenantServiceTest.java | 17 ++- .../service/user/SysUserServiceImplTest.java | 23 ++-- .../system/test/BaseDbAndRedisUnitTest.java | 47 ++++++++ .../module/system/test/BaseDbUnitTest.java | 39 +++++++ .../module/system/test/BaseRedisUnitTest.java | 31 +++++ .../system/test/RedisTestConfiguration.java | 30 +++++ 340 files changed, 1260 insertions(+), 1049 deletions(-) delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/permission/SysMenuConvert.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/captcha/package-info.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/codegen/package-info.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/datapermission/package-info.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/job/package-info.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/package-info.java rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/{system => tool}/framework/codegen/config/CodegenConfiguration.java (76%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/{system => tool}/framework/codegen/config/CodegenProperties.java (89%) create mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/codegen/package-info.java rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool => yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core}/enums/SqlConstants.java (63%) create mode 100644 yudao-module-system/pom.xml create mode 100644 yudao-module-system/yudao-module-system-api/pom.xml create mode 100644 yudao-module-system/yudao-module-system-impl/pom.xml rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/auth/SysAuthController.http (100%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/auth/SysAuthController.java (90%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/auth/SysUserSessionController.java (85%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/auth/vo/auth/SysAuthLoginReqVO.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/auth/vo/auth/SysAuthLoginRespVO.java (85%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/auth/vo/auth/SysAuthMenuRespVO.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/auth/vo/auth/SysAuthPermissionInfoRespVO.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/auth/vo/auth/SysAuthSocialBindReqVO.java (93%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/auth/vo/auth/SysAuthSocialLogin2ReqVO.java (95%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/auth/vo/auth/SysAuthSocialLoginReqVO.java (93%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/auth/vo/auth/SysAuthSocialUnbindReqVO.java (93%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/auth/vo/session/SysUserSessionPageItemRespVO.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/auth/vo/session/SysUserSessionPageReqVO.java (88%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/common/SysCaptchaController.http (100%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/common/SysCaptchaController.java (76%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/common/vo/SysCaptchaImageRespVO.java (89%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dept/SysDeptController.java (91%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dept/SysPostController.java (92%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dept/vo/dept/SysDeptBaseVO.java (89%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dept/vo/dept/SysDeptCreateReqVO.java (78%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dept/vo/dept/SysDeptListReqVO.java (85%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dept/vo/dept/SysDeptRespVO.java (89%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dept/vo/dept/SysDeptSimpleRespVO.java (89%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dept/vo/dept/SysDeptUpdateReqVO.java (86%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dept/vo/post/SysPostBaseVO.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dept/vo/post/SysPostCreateReqVO.java (75%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dept/vo/post/SysPostExcelVO.java (90%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dept/vo/post/SysPostExportReqVO.java (88%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dept/vo/post/SysPostListReqVO.java (87%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dept/vo/post/SysPostPageReqVO.java (90%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dept/vo/post/SysPostRespVO.java (87%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dept/vo/post/SysPostSimpleRespVO.java (87%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dept/vo/post/SysPostUpdateReqVO.java (86%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dict/SysDictDataController.http (100%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dict/SysDictDataController.java (92%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dict/SysDictTypeController.java (90%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dict/vo/data/SysDictDataBaseVO.java (95%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dict/vo/data/SysDictDataCreateReqVO.java (76%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dict/vo/data/SysDictDataExcelVO.java (91%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dict/vo/data/SysDictDataExportReqVO.java (90%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dict/vo/data/SysDictDataPageReqVO.java (92%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dict/vo/data/SysDictDataRespVO.java (89%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dict/vo/data/SysDictDataSimpleRespVO.java (87%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dict/vo/data/SysDictDataUpdateReqVO.java (86%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dict/vo/type/SysDictTypeBaseVO.java (92%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dict/vo/type/SysDictTypeCreateReqVO.java (89%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dict/vo/type/SysDictTypeExcelVO.java (90%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dict/vo/type/SysDictTypeExportReqVO.java (93%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dict/vo/type/SysDictTypePageReqVO.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dict/vo/type/SysDictTypeRespVO.java (90%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dict/vo/type/SysDictTypeSimpleRespVO.java (89%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/dict/vo/type/SysDictTypeUpdateReqVO.java (86%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/errorcode/SysErrorCodeController.http (100%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/errorcode/SysErrorCodeController.java (89%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/errorcode/vo/SysErrorCodeBaseVO.java (92%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/errorcode/vo/SysErrorCodeCreateReqVO.java (79%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/errorcode/vo/SysErrorCodeExcelVO.java (78%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/errorcode/vo/SysErrorCodeExportReqVO.java (93%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/errorcode/vo/SysErrorCodePageReqVO.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/errorcode/vo/SysErrorCodeRespVO.java (90%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/errorcode/vo/SysErrorCodeUpdateReqVO.java (87%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/logger/SysLoginLogController.java (77%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/logger/SysOperateLogController.http (100%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/logger/SysOperateLogController.java (80%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/logger/vo/loginlog/SysLoginLogBaseVO.java (95%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/logger/vo/loginlog/SysLoginLogExcelVO.java (92%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/logger/vo/loginlog/SysLoginLogExportReqVO.java (92%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/logger/vo/loginlog/SysLoginLogPageReqVO.java (93%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/logger/vo/loginlog/SysLoginLogRespVO.java (92%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/logger/vo/operatelog/SysOperateLogBaseVO.java (97%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/logger/vo/operatelog/SysOperateLogExcelVO.java (92%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/logger/vo/operatelog/SysOperateLogExportReqVO.java (93%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/logger/vo/operatelog/SysOperateLogPageReqVO.java (93%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/logger/vo/operatelog/SysOperateLogRespVO.java (86%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/notice/SysNoticeController.java (80%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/notice/vo/SysNoticeBaseVO.java (93%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/notice/vo/SysNoticeCreateReqVO.java (76%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/notice/vo/SysNoticePageReqVO.java (89%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/notice/vo/SysNoticeRespVO.java (88%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/notice/vo/SysNoticeUpdateReqVO.java (87%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/permission/SysMenuController.http (100%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/permission/SysMenuController.java (88%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/permission/SysPermissionController.java (83%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/permission/SysRoleController.http (100%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/permission/SysRoleController.java (92%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/permission/vo/menu/SysMenuBaseVO.java (96%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/permission/vo/menu/SysMenuCreateReqVO.java (70%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/permission/vo/menu/SysMenuListReqVO.java (84%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/permission/vo/menu/SysMenuRespVO.java (90%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/permission/vo/menu/SysMenuSimpleRespVO.java (88%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/permission/vo/menu/SysMenuUpdateReqVO.java (84%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/permission/vo/permission/SysPermissionAssignRoleDataScopeReqVO.java (91%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/permission/vo/permission/SysPermissionAssignRoleMenuReqVO.java (87%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/permission/vo/permission/SysPermissionAssignUserRoleReqVO.java (87%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/permission/vo/role/SysRoleBaseVO.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/permission/vo/role/SysRoleCreateReqVO.java (73%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/permission/vo/role/SysRoleExcelVO.java (90%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/permission/vo/role/SysRoleExportReqVO.java (92%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/permission/vo/role/SysRolePageReqVO.java (93%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/permission/vo/role/SysRoleRespVO.java (93%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/permission/vo/role/SysRoleSimpleRespVO.java (86%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/permission/vo/role/SysRoleUpdateReqVO.java (85%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/permission/vo/role/SysRoleUpdateStatusReqVO.java (89%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/sms/SmsCallbackController.java (97%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/sms/SysSmsChannelController.java (91%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/sms/SysSmsLogController.java (79%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/sms/SysSmsTemplateController.http (100%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/sms/SysSmsTemplateController.java (93%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/sms/vo/channel/SysSmsChannelBaseVO.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/sms/vo/channel/SysSmsChannelCreateReqVO.java (88%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/sms/vo/channel/SysSmsChannelPageReqVO.java (93%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/sms/vo/channel/SysSmsChannelRespVO.java (89%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/sms/vo/channel/SysSmsChannelSimpleRespVO.java (90%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/sms/vo/channel/SysSmsChannelUpdateReqVO.java (87%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/sms/vo/log/SysSmsLogExcelVO.java (97%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/sms/vo/log/SysSmsLogExportReqVO.java (95%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/sms/vo/log/SysSmsLogPageReqVO.java (95%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/sms/vo/log/SysSmsLogRespVO.java (97%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/sms/vo/template/SysSmsTemplateBaseVO.java (95%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/sms/vo/template/SysSmsTemplateCreateReqVO.java (79%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/sms/vo/template/SysSmsTemplateExcelVO.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/sms/vo/template/SysSmsTemplateExportReqVO.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/sms/vo/template/SysSmsTemplatePageReqVO.java (95%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/sms/vo/template/SysSmsTemplateRespVO.java (90%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/sms/vo/template/SysSmsTemplateSendReqVO.java (89%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/sms/vo/template/SysSmsTemplateUpdateReqVO.java (87%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/tenant/SysTenantController.java (93%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/tenant/vo/SysTenantBaseVO.java (90%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/tenant/vo/SysTenantCreateReqVO.java (62%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/tenant/vo/SysTenantExcelVO.java (89%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/tenant/vo/SysTenantExportReqVO.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/tenant/vo/SysTenantPageReqVO.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/tenant/vo/SysTenantRespVO.java (85%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/tenant/vo/SysTenantUpdateReqVO.java (81%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/user/SysUserController.http (100%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/user/SysUserController.java (96%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/user/SysUserProfileController.http (100%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/user/SysUserProfileController.java (82%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/user/vo/profile/SysUserProfileRespVO.java (93%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/user/vo/profile/SysUserProfileUpdatePasswordReqVO.java (90%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/user/vo/profile/SysUserProfileUpdateReqVO.java (92%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/user/vo/user/SysUserBaseVO.java (96%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/user/vo/user/SysUserCreateReqVO.java (88%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/user/vo/user/SysUserExcelVO.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/user/vo/user/SysUserExportReqVO.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/user/vo/user/SysUserImportExcelVO.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/user/vo/user/SysUserImportRespVO.java (90%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/user/vo/user/SysUserPageItemRespVO.java (91%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/user/vo/user/SysUserPageReqVO.java (95%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/user/vo/user/SysUserRespVO.java (92%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/user/vo/user/SysUserSimpleRespVO.java (87%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/user/vo/user/SysUserUpdatePasswordReqVO.java (86%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/user/vo/user/SysUserUpdateReqVO.java (86%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/controller/user/vo/user/SysUserUpdateStatusReqVO.java (89%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/convert/auth/SysAuthConvert.java (87%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/convert/auth/SysUserSessionConvert.java (67%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/convert/common/SysCaptchaConvert.java (68%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/convert/dept/SysDeptConvert.java (55%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/convert/dept/SysPostConvert.java (82%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/convert/dict/SysDictDataConvert.java (87%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/convert/dict/SysDictTypeConvert.java (74%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/convert/errorcode/SysErrorCodeConvert.java (53%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/convert/logger/SysLoginLogConvert.java (65%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/convert/logger/SysOperateLogConvert.java (79%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/convert/notice/SysNoticeConvert.java (52%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/convert/package-info.java (56%) create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/SysMenuConvert.java rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/convert/permission/SysRoleConvert.java (78%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/convert/sms/SysSmsChannelConvert.java (67%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/convert/sms/SysSmsLogConvert.java (73%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/convert/sms/SysSmsTemplateConvert.java (62%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/convert/tenant/SysTenantConvert.java (64%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/convert/user/SysUserConvert.java (76%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md (100%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/dataobject/dict/SysDictTypeDO.java (92%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/dataobject/errorcode/SysErrorCodeDO.java (84%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/dataobject/logger/SysOperateLogDO.java (97%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/dataobject/notice/SysNoticeDO.java (84%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/dataobject/permission/SysMenuDO.java (91%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/dataobject/permission/SysRoleMenuDO.java (88%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/mysql/auth/SysUserSessionMapper.java (84%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/mysql/dept/SysDeptMapper.java (87%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/mysql/dept/SysPostMapper.java (86%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/mysql/dict/SysDictDataMapper.java (87%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/mysql/dict/SysDictTypeMapper.java (80%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/mysql/errorcode/SysErrorCodeMapper.java (85%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/mysql/logger/SysLoginLogMapper.java (83%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/mysql/logger/SysOperateLogMapper.java (84%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/mysql/notice/SysNoticeMapper.java (70%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/mysql/permission/SysMenuMapper.java (79%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/mysql/permission/SysRoleMapper.java (88%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/mysql/permission/SysRoleMenuMapper.java (90%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/mysql/permission/SysUserRoleMapper.java (95%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/mysql/sms/SysSmsChannelMapper.java (86%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/mysql/sms/SysSmsLogMapper.java (87%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/mysql/sms/SysSmsTemplateMapper.java (89%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/mysql/tenant/SysTenantMapper.java (87%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/mysql/user/SysUserMapper.java (93%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/redis/SysRedisKeyConstants.java (71%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/redis/common/SysCaptchaRedisDAO.java (84%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/enums/SysErrorCodeConstants.java (99%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/enums/dept/DeptIdEnum.java (77%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/enums/errorcode/SysErrorCodeTypeEnum.java (90%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/enums/logger/SysLoginLogTypeEnum.java (89%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/enums/logger/SysLoginResultEnum.java (88%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/enums/notice/SysNoticeTypeEnum.java (80%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/enums/permission/MenuIdEnum.java (75%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/enums/permission/MenuTypeEnum.java (81%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/enums/permission/RoleCodeEnum.java (78%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/enums/permission/SysRoleTypeEnum.java (78%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/framework/captcha/config/CaptchaConfig.java (76%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/framework/captcha/config/CaptchaProperties.java (92%) create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/captcha/package-info.java rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/framework/datapermission/config/SysDataPermissionConfiguration.java (89%) create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/package-info.java rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system}/framework/errorcode/config/ErrorCodeConfiguration.java (69%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system}/framework/errorcode/config/ErrorCodeProperties.java (87%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system}/framework/errorcode/core/dto/ErrorCodeAutoGenerateReqDTO.java (89%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system}/framework/errorcode/core/dto/ErrorCodeRespDTO.java (81%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system}/framework/errorcode/core/generator/ErrorCodeAutoGenerator.java (68%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system}/framework/errorcode/core/generator/ErrorCodeAutoGeneratorImpl.java (91%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system}/framework/errorcode/core/loader/ErrorCodeLoader.java (85%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system}/framework/errorcode/core/loader/ErrorCodeLoaderImpl.java (88%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system}/framework/errorcode/core/service/ErrorCodeFrameworkService.java (71%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system}/framework/errorcode/package-info.java (59%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/framework/package-info.java (55%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/job/auth/SysUserSessionTimeoutJob.java (83%) create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/job/package-info.java rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/mq/consumer/dept/SysDeptRefreshConsumer.java (72%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/mq/consumer/dict/SysDictDataRefreshConsumer.java (75%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/mq/consumer/mail/SysMailSendConsumer.java (72%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/mq/consumer/permission/SysMenuRefreshConsumer.java (71%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/mq/consumer/permission/SysRoleMenuRefreshConsumer.java (72%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/mq/consumer/permission/SysRoleRefreshConsumer.java (71%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/mq/consumer/sms/SysSmsChannelRefreshConsumer.java (73%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/mq/consumer/sms/SysSmsSendConsumer.java (92%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/mq/consumer/sms/SysSmsTemplateRefreshConsumer.java (82%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/mq/message/dept/SysDeptRefreshMessage.java (85%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/mq/message/dict/SysDictDataRefreshMessage.java (84%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/mq/message/mail/SysMailSendMessage.java (93%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/mq/message/permission/SysMenuRefreshMessage.java (84%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/mq/message/permission/SysRoleMenuRefreshMessage.java (84%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/mq/message/permission/SysRoleRefreshMessage.java (84%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/mq/message/sms/SysSmsChannelRefreshMessage.java (86%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/mq/message/sms/SysSmsTemplateRefreshMessage.java (86%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/mq/producer/dept/SysDeptProducer.java (76%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/mq/producer/dict/SysDictDataProducer.java (77%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/mq/producer/permission/SysMenuProducer.java (75%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/mq/producer/permission/SysPermissionProducer.java (75%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/mq/producer/permission/SysRoleProducer.java (76%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/mq/producer/sms/SysSmsProducer.java (77%) create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/package-info.java rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/auth/SysAuthService.java (91%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth}/SysAuthServiceImpl.java (91%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/auth/SysUserSessionService.java (78%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth}/SysUserSessionServiceImpl.java (86%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/common/SysCaptchaService.java (79%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/common/impl => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/common}/SysCaptchaServiceImpl.java (70%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/dept/SysDeptService.java (67%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/impl => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept}/SysDeptServiceImpl.java (90%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/dept/SysPostService.java (82%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/impl => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept}/SysPostServiceImpl.java (82%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/dict/SysDictDataService.java (73%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/impl => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict}/SysDictDataServiceImpl.java (81%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/dict/SysDictTypeService.java (73%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/impl => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict}/SysDictTypeServiceImpl.java (80%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/errorcode/SysErrorCodeService.java (65%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/errorcode/impl => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/errorcode}/SysErrorCodeServiceImpl.java (83%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/logger/SysLoginLogService.java (70%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/logger/impl => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger}/SysLoginLogServiceImpl.java (61%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/logger/SysOperateLogService.java (64%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/logger/impl => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger}/SysOperateLogServiceImpl.java (75%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/notice/SysNoticeService.java (69%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/notice/impl => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/notice}/SysNoticeServiceImpl.java (68%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/permission/SysMenuService.java (81%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/impl => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission}/SysMenuServiceImpl.java (90%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/permission/SysPermissionService.java (95%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/impl => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission}/SysPermissionServiceImpl.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/permission/SysRoleService.java (85%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/impl => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission}/SysRoleServiceImpl.java (88%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/sms/SysSmsChannelService.java (80%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/impl => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms}/SysSmsChannelServiceImpl.java (84%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/sms/SysSmsLogService.java (73%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/impl => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms}/SysSmsLogServiceImpl.java (65%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/sms/SysSmsTemplateService.java (80%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/impl => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms}/SysSmsTemplateServiceImpl.java (86%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/tenant/SysTenantService.java (78%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/tenant/impl => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant}/SysTenantServiceImpl.java (73%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/user/SysUserService.java (87%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/impl => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user}/SysUserServiceImpl.java (92%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module}/system/service/auth/SysAuthServiceImplTest.java (92%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module}/system/service/auth/SysUserSessionServiceImplTest.java (88%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module}/system/service/common/SysCaptchaServiceTest.java (77%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module}/system/service/dept/SysDeptServiceTest.java (92%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module}/system/service/dept/SysPostServiceTest.java (90%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module}/system/service/dict/SysDictDataServiceTest.java (91%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module}/system/service/dict/SysDictTypeServiceTest.java (91%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module}/system/service/errorcode/SysErrorCodeServiceTest.java (88%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module}/system/service/logger/SysLoginLogServiceImplTest.java (88%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module}/system/service/logger/SysOperateLogServiceImplTest.java (91%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module}/system/service/notice/SysNoticeServiceImplTest.java (86%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module}/system/service/permission/SysMenuServiceTest.java (91%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module}/system/service/permission/SysPermissionServiceTest.java (93%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module}/system/service/permission/SysRoleServiceTest.java (92%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module}/system/service/sms/SysSmsChannelServiceTest.java (88%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module}/system/service/sms/SysSmsLogServiceTest.java (92%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module}/system/service/sms/SysSmsTemplateServiceTest.java (94%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module}/system/service/tenant/SysTenantServiceTest.java (89%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules => yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module}/system/service/user/SysUserServiceImplTest.java (95%) create mode 100644 yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/test/BaseDbAndRedisUnitTest.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/test/BaseDbUnitTest.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/test/BaseRedisUnitTest.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/test/RedisTestConfiguration.java diff --git a/pom.xml b/pom.xml index 5ca94ea062..2512fcdc28 100644 --- a/pom.xml +++ b/pom.xml @@ -15,6 +15,8 @@ yudao-core-service yudao-module-member yudao-module-bpm + yudao-module-system + yudao-module-system-api ${artifactId} diff --git a/yudao-admin-server/pom.xml b/yudao-admin-server/pom.xml index 4cb8d93e23..09a39f280e 100644 --- a/yudao-admin-server/pom.xml +++ b/yudao-admin-server/pom.xml @@ -27,6 +27,11 @@ yudao-module-member-impl ${revision} + + cn.iocoder.boot + yudao-module-system-impl + ${revision} + @@ -50,10 +55,6 @@ cn.iocoder.boot yudao-spring-boot-starter-biz-tenant - - cn.iocoder.boot - yudao-spring-boot-starter-biz-data-permission - diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/AdminServerApplication.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/AdminServerApplication.java index 35f6a1d8db..a37d220b4c 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/AdminServerApplication.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/AdminServerApplication.java @@ -5,7 +5,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @SuppressWarnings("SpringComponentScan") // 忽略 IDEA 无法识别 ${yudao.info.base-package} å’Œ ${yudao.core-service.base-package} @SpringBootApplication(scanBasePackages = {"${yudao.info.base-package}", "${yudao.core-service.base-package}", - "${yudao.info.member-package}"}) // TODO èŠ‹è‰¿ï¼šé‡æž„ + "${yudao.info.member-package}", "${yudao.info.system-package}"}) // TODO èŠ‹è‰¿ï¼šé‡æž„ public class AdminServerApplication { public static void main(String[] args) { diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/permission/SysMenuConvert.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/permission/SysMenuConvert.java deleted file mode 100644 index c8ef1496be..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/permission/SysMenuConvert.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.system.convert.permission; - -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.menu.SysMenuCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.menu.SysMenuRespVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.menu.SysMenuSimpleRespVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.menu.SysMenuUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysMenuDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -@Mapper -public interface SysMenuConvert { - - SysMenuConvert INSTANCE = Mappers.getMapper(SysMenuConvert.class); - - List convertList(List list); - - SysMenuDO convert(SysMenuCreateReqVO bean); - - SysMenuDO convert(SysMenuUpdateReqVO bean); - - SysMenuRespVO convert(SysMenuDO bean); - - List convertList02(List list); - -} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/captcha/package-info.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/captcha/package-info.java deleted file mode 100644 index 039431db36..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/captcha/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * 基于 Hutool captcha 库,实现验è¯ç åŠŸèƒ½ - */ -package cn.iocoder.yudao.adminserver.modules.system.framework.captcha; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/codegen/package-info.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/codegen/package-info.java deleted file mode 100644 index e700260a86..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/codegen/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * 代ç ç”Ÿæˆå™¨ - */ -package cn.iocoder.yudao.adminserver.modules.system.framework.codegen; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/datapermission/package-info.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/datapermission/package-info.java deleted file mode 100644 index cdd6173e2f..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/datapermission/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * system 模å—çš„æ•°æ®æƒé™é…ç½® - */ -package cn.iocoder.yudao.adminserver.modules.system.framework.datapermission; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/job/package-info.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/job/package-info.java deleted file mode 100644 index b5c66a51bd..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/job/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.system.job; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/package-info.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/package-info.java deleted file mode 100644 index f043c0f2af..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -/** - * system 包下,我们放通用业务,支撑上层的核心业务。 - * 例如说:用户ã€éƒ¨é—¨ã€æƒé™ã€æ•°æ®å­—典等等 - * - * 缩写:sys - */ -package cn.iocoder.yudao.adminserver.modules.system; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/dataobject/codegen/ToolCodegenColumnDO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/dataobject/codegen/ToolCodegenColumnDO.java index 7d0d950c03..73f9d5dd20 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/dataobject/codegen/ToolCodegenColumnDO.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/dataobject/codegen/ToolCodegenColumnDO.java @@ -1,7 +1,6 @@ package cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dict.SysDictTypeDO; import cn.iocoder.yudao.adminserver.modules.tool.enums.codegen.ToolCodegenColumnHtmlTypeEnum; import cn.iocoder.yudao.adminserver.modules.tool.enums.codegen.ToolCodegenColumnListConditionEnum; import com.baomidou.mybatisplus.annotation.TableId; @@ -80,7 +79,7 @@ public class ToolCodegenColumnDO extends BaseDO { /** * 字典类型 * - * å…³è” {@link SysDictTypeDO#getType()} + * å…³è” DictTypeDO çš„ type 属性 */ private String dictType; /** diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/dataobject/codegen/ToolCodegenTableDO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/dataobject/codegen/ToolCodegenTableDO.java index 4ed11b2be7..33546b6637 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/dataobject/codegen/ToolCodegenTableDO.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/dataobject/codegen/ToolCodegenTableDO.java @@ -1,7 +1,6 @@ package cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysMenuDO; import cn.iocoder.yudao.adminserver.modules.tool.enums.codegen.ToolCodegenTemplateTypeEnum; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -89,7 +88,7 @@ public class ToolCodegenTableDO extends BaseDO { /** * 父èœå•ç¼–å· * - * å…³è” {@link SysMenuDO#getId()} + * å…³è” MenuDO çš„ id 属性 */ private Long parentMenuId; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/codegen/config/CodegenConfiguration.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/codegen/config/CodegenConfiguration.java similarity index 76% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/codegen/config/CodegenConfiguration.java rename to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/codegen/config/CodegenConfiguration.java index 9f514eed5a..943638c1ba 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/codegen/config/CodegenConfiguration.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/codegen/config/CodegenConfiguration.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.framework.codegen.config; +package cn.iocoder.yudao.adminserver.modules.tool.framework.codegen.config; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Configuration; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/codegen/config/CodegenProperties.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/codegen/config/CodegenProperties.java similarity index 89% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/codegen/config/CodegenProperties.java rename to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/codegen/config/CodegenProperties.java index b0f08460e9..c383fc55d4 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/codegen/config/CodegenProperties.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/codegen/config/CodegenProperties.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.framework.codegen.config; +package cn.iocoder.yudao.adminserver.modules.tool.framework.codegen.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/codegen/package-info.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/codegen/package-info.java new file mode 100644 index 0000000000..bb13d52514 --- /dev/null +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/codegen/package-info.java @@ -0,0 +1,4 @@ +/** + * 代ç ç”Ÿæˆå™¨ + */ +package cn.iocoder.yudao.adminserver.modules.tool.framework.codegen; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/impl/ToolCodegenEngine.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/impl/ToolCodegenEngine.java index f7a1e4c9be..ce8f3ac116 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/impl/ToolCodegenEngine.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/impl/ToolCodegenEngine.java @@ -9,7 +9,7 @@ import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.system.framework.codegen.config.CodegenProperties; +import cn.iocoder.yudao.adminserver.modules.tool.framework.codegen.config.CodegenProperties; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/impl/ToolCodegenServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/impl/ToolCodegenServiceImpl.java index ff9cdeafaf..f3b69fba25 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/impl/ToolCodegenServiceImpl.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/impl/ToolCodegenServiceImpl.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.tool.service.codegen.impl; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.system.framework.codegen.config.CodegenProperties; +import cn.iocoder.yudao.adminserver.modules.tool.framework.codegen.config.CodegenProperties; import cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.ToolCodegenUpdateReqVO; import cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.table.ToolCodegenTablePageReqVO; import cn.iocoder.yudao.adminserver.modules.tool.convert.codegen.ToolCodegenConvert; diff --git a/yudao-admin-server/src/main/resources/application.yaml b/yudao-admin-server/src/main/resources/application.yaml index 09bbc33ada..15af12d60b 100644 --- a/yudao-admin-server/src/main/resources/application.yaml +++ b/yudao-admin-server/src/main/resources/application.yaml @@ -49,6 +49,7 @@ yudao: version: 1.0.0 base-package: cn.iocoder.yudao.adminserver member-package: cn.iocoder.yudao.module.member + system-package: cn.iocoder.yudao.module.system core-service: base-package: cn.iocoder.yudao.coreservice web: @@ -74,7 +75,7 @@ yudao: error-code: # 错误ç ç›¸å…³é…置项 constants-class-list: - cn.iocoder.yudao.adminserver.modules.infra.enums.InfErrorCodeConstants - - cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants + - cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants - cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants tenant: # 多租户相关é…置项 tables: # é…置需è¦å¼€å¯å¤šç§Ÿæˆ·çš„表;如果实体已ç»ç»§æ‰¿ TenantBaseDO 类,则无需é‡å¤é…ç½® diff --git a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/framework/quartz/core/SchedulerManagerTest.java b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/framework/quartz/core/SchedulerManagerTest.java index efa95928b4..72ce3cd771 100644 --- a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/framework/quartz/core/SchedulerManagerTest.java +++ b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/framework/quartz/core/SchedulerManagerTest.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.framework.quartz.core; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.adminserver.modules.system.job.auth.SysUserSessionTimeoutJob; +import cn.iocoder.yudao.module.system.job.auth.SysUserSessionTimeoutJob; import cn.iocoder.yudao.framework.quartz.core.scheduler.SchedulerManager; import org.junit.jupiter.api.Test; import org.quartz.SchedulerException; diff --git a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/framework/redis/core/stream/RedisStreamTest.java b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/framework/redis/core/stream/RedisStreamTest.java index 90e25aeebf..3f1bb7fb90 100644 --- a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/framework/redis/core/stream/RedisStreamTest.java +++ b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/framework/redis/core/stream/RedisStreamTest.java @@ -2,9 +2,9 @@ package cn.iocoder.yudao.adminserver.framework.redis.core.stream; import cn.hutool.core.thread.ThreadUtil; import cn.iocoder.yudao.adminserver.BaseRedisIntegrationTest; -import cn.iocoder.yudao.adminserver.modules.system.mq.consumer.mail.SysMailSendConsumer; -import cn.iocoder.yudao.adminserver.modules.system.mq.consumer.sms.SysSmsSendConsumer; -import cn.iocoder.yudao.adminserver.modules.system.mq.message.mail.SysMailSendMessage; +import cn.iocoder.yudao.module.system.mq.consumer.mail.SysMailSendConsumer; +import cn.iocoder.yudao.module.system.mq.consumer.sms.SysSmsSendConsumer; +import cn.iocoder.yudao.module.system.mq.message.mail.SysMailSendMessage; import cn.iocoder.yudao.coreservice.modules.system.mq.message.sms.SysSmsSendMessage; import cn.iocoder.yudao.framework.mq.core.util.RedisMessageUtils; import org.junit.jupiter.api.Disabled; diff --git a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/system/service/package-info.java b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/system/service/package-info.java index b6bd21477b..372dcacfee 100644 --- a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/system/service/package-info.java +++ b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/system/service/package-info.java @@ -1 +1 @@ -package cn.iocoder.yudao.adminserver.modules.system.service; +package cn.iocoder.yudao.module.system.service; diff --git a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsServiceIntegrationTest.java b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsServiceIntegrationTest.java index dc4301952e..a6b4c47a28 100644 --- a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsServiceIntegrationTest.java +++ b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsServiceIntegrationTest.java @@ -1,14 +1,14 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.sms; +package cn.iocoder.yudao.module.system.service.sms; import cn.hutool.core.map.MapUtil; import cn.hutool.core.thread.ThreadUtil; import cn.iocoder.yudao.adminserver.BaseDbAndRedisIntegrationTest; -import cn.iocoder.yudao.adminserver.modules.system.mq.consumer.sms.SysSmsSendConsumer; -import cn.iocoder.yudao.adminserver.modules.system.mq.producer.sms.SysSmsProducer; -import cn.iocoder.yudao.adminserver.modules.system.service.sms.impl.SysSmsChannelServiceImpl; -import cn.iocoder.yudao.adminserver.modules.system.service.sms.impl.SysSmsLogServiceImpl; -import cn.iocoder.yudao.adminserver.modules.system.service.sms.impl.SysSmsTemplateServiceImpl; -import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; +import cn.iocoder.yudao.module.system.mq.consumer.sms.SysSmsSendConsumer; +import cn.iocoder.yudao.module.system.mq.producer.sms.SysSmsProducer; +import cn.iocoder.yudao.module.system.service.sms.impl.SysSmsChannelServiceImpl; +import cn.iocoder.yudao.module.system.service.sms.impl.SysSmsLogServiceImpl; +import cn.iocoder.yudao.module.system.service.sms.impl.SysSmsTemplateServiceImpl; +import cn.iocoder.yudao.module.system.service.user.SysUserService; import cn.iocoder.yudao.coreservice.modules.system.service.sms.impl.SysSmsCoreServiceImpl; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.sms.config.YudaoSmsAutoConfiguration; diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/YudaoMybatisAutoConfiguration.java b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/YudaoMybatisAutoConfiguration.java index d589ac7688..9bd5202e48 100644 --- a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/YudaoMybatisAutoConfiguration.java +++ b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/YudaoMybatisAutoConfiguration.java @@ -15,7 +15,8 @@ import org.springframework.context.annotation.Configuration; * @author èŠ‹é“æºç  */ @Configuration -@MapperScan(value = {"${yudao.info.base-package}", "${yudao.core-service.base-package}", "${yudao.info.member-package}"}, +@MapperScan(value = {"${yudao.info.base-package}", "${yudao.core-service.base-package}", + "${yudao.info.member-package}", "${yudao.info.system-package}"}, annotationClass = Mapper.class, lazyInitialization = "${mybatis.lazy-initialization:false}") // Mapper 懒加载,目å‰ä»…用于å•元测试 public class YudaoMybatisAutoConfiguration { diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/enums/SqlConstants.java b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/enums/SqlConstants.java similarity index 63% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/enums/SqlConstants.java rename to yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/enums/SqlConstants.java index a33b1b854c..cad1d6c966 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/enums/SqlConstants.java +++ b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/enums/SqlConstants.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.tool.enums; +package cn.iocoder.yudao.framework.mybatis.core.enums; /** * SQL相关常é‡ç±» diff --git a/yudao-module-member/yudao-module-member-impl/pom.xml b/yudao-module-member/yudao-module-member-impl/pom.xml index ce7ff84a0b..37a4e72864 100644 --- a/yudao-module-member/yudao-module-member-impl/pom.xml +++ b/yudao-module-member/yudao-module-member-impl/pom.xml @@ -34,10 +34,7 @@ cn.iocoder.boot yudao-spring-boot-starter-biz-operatelog - - cn.iocoder.boot - yudao-spring-boot-starter-biz-sms - + cn.iocoder.boot yudao-spring-boot-starter-biz-weixin diff --git a/yudao-module-system/pom.xml b/yudao-module-system/pom.xml new file mode 100644 index 0000000000..470f1cc2bc --- /dev/null +++ b/yudao-module-system/pom.xml @@ -0,0 +1,24 @@ + + + + cn.iocoder.boot + yudao + ${revision} + + 4.0.0 + + yudao-module-system-api + yudao-module-system-impl + + yudao-module-system + pom + + ${artifactId} + + system 模å—下,我们放通用业务,支撑上层的核心业务。 + 例如说:用户ã€éƒ¨é—¨ã€æƒé™ã€æ•°æ®å­—典等等 + + + diff --git a/yudao-module-system/yudao-module-system-api/pom.xml b/yudao-module-system/yudao-module-system-api/pom.xml new file mode 100644 index 0000000000..39a402efc6 --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/pom.xml @@ -0,0 +1,26 @@ + + + + cn.iocoder.boot + yudao-module-system + ${revision} + + 4.0.0 + yudao-module-system-api + jar + + ${artifactId} + + system æ¨¡å— API,暴露给其它模å—调用 + + + + + cn.iocoder.boot + yudao-common + + + + diff --git a/yudao-module-system/yudao-module-system-impl/pom.xml b/yudao-module-system/yudao-module-system-impl/pom.xml new file mode 100644 index 0000000000..6fc4fcf96b --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/pom.xml @@ -0,0 +1,106 @@ + + + + cn.iocoder.boot + yudao-module-system + ${revision} + + 4.0.0 + yudao-module-system-impl + jar + + ${artifactId} + + system 模å—下,我们放通用业务,支撑上层的核心业务。 + 例如说:用户ã€éƒ¨é—¨ã€æƒé™ã€æ•°æ®å­—典等等 + + + + + cn.iocoder.boot + yudao-module-system-api + ${revision} + + + + + cn.iocoder.boot + yudao-core-service + + + + cn.iocoder.boot + yudao-spring-boot-starter-biz-operatelog + + + cn.iocoder.boot + yudao-spring-boot-starter-biz-sms + + + cn.iocoder.boot + yudao-spring-boot-starter-biz-data-permission + + + + + cn.iocoder.boot + yudao-spring-boot-starter-security + + + + + cn.iocoder.boot + yudao-spring-boot-starter-mybatis + + + + cn.iocoder.boot + yudao-spring-boot-starter-redis + + + + + cn.iocoder.boot + yudao-spring-boot-starter-mq + + + + + cn.iocoder.boot + yudao-spring-boot-starter-test + test + + + + + cn.iocoder.boot + yudao-spring-boot-starter-excel + + + + + + + ${artifactId} + + + + org.springframework.boot + spring-boot-maven-plugin + + true + + + + + repackage + + + + + + + + diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysAuthController.http b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/SysAuthController.http similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysAuthController.http rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/SysAuthController.http diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysAuthController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/SysAuthController.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysAuthController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/SysAuthController.java index fc104fdbc0..52ca73cf70 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysAuthController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/SysAuthController.java @@ -1,13 +1,13 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.auth; +package cn.iocoder.yudao.module.system.controller.auth; -import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth.*; -import cn.iocoder.yudao.adminserver.modules.system.convert.auth.SysAuthConvert; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysMenuDO; +import cn.iocoder.yudao.module.system.controller.auth.vo.auth.*; +import cn.iocoder.yudao.module.system.convert.auth.SysAuthConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysMenuDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; -import cn.iocoder.yudao.adminserver.modules.system.enums.permission.MenuTypeEnum; -import cn.iocoder.yudao.adminserver.modules.system.service.auth.SysAuthService; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysRoleService; +import cn.iocoder.yudao.module.system.enums.permission.MenuTypeEnum; +import cn.iocoder.yudao.module.system.service.auth.SysAuthService; +import cn.iocoder.yudao.module.system.service.permission.SysPermissionService; +import cn.iocoder.yudao.module.system.service.permission.SysRoleService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialCoreService; import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysUserSessionController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/SysUserSessionController.java similarity index 85% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysUserSessionController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/SysUserSessionController.java index 116d38531c..f5a68686c6 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysUserSessionController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/SysUserSessionController.java @@ -1,12 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.auth; +package cn.iocoder.yudao.module.system.controller.auth; -import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.session.SysUserSessionPageItemRespVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.session.SysUserSessionPageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.convert.auth.SysUserSessionConvert; +import cn.iocoder.yudao.module.system.controller.auth.vo.session.SysUserSessionPageItemRespVO; +import cn.iocoder.yudao.module.system.controller.auth.vo.session.SysUserSessionPageReqVO; +import cn.iocoder.yudao.module.system.convert.auth.SysUserSessionConvert; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.adminserver.modules.system.service.auth.SysUserSessionService; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; -import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; +import cn.iocoder.yudao.module.system.service.auth.SysUserSessionService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthLoginReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthLoginReqVO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthLoginReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthLoginReqVO.java index 366144ea24..2eac3fb4a8 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthLoginReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthLoginReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth; +package cn.iocoder.yudao.module.system.controller.auth.vo.auth; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthLoginRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthLoginRespVO.java similarity index 85% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthLoginRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthLoginRespVO.java index 381c3223e3..7e1bea57ea 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthLoginRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthLoginRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth; +package cn.iocoder.yudao.module.system.controller.auth.vo.auth; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthMenuRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthMenuRespVO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthMenuRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthMenuRespVO.java index c39354b109..762644e20b 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthMenuRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthMenuRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth; +package cn.iocoder.yudao.module.system.controller.auth.vo.auth; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthPermissionInfoRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthPermissionInfoRespVO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthPermissionInfoRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthPermissionInfoRespVO.java index c3bd0923b4..e50bb84ccc 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthPermissionInfoRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthPermissionInfoRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth; +package cn.iocoder.yudao.module.system.controller.auth.vo.auth; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthSocialBindReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthSocialBindReqVO.java similarity index 93% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthSocialBindReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthSocialBindReqVO.java index e92d3fc504..d1a48ee779 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthSocialBindReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthSocialBindReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth; +package cn.iocoder.yudao.module.system.controller.auth.vo.auth; import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum; import cn.iocoder.yudao.framework.common.validation.InEnum; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthSocialLogin2ReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthSocialLogin2ReqVO.java similarity index 95% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthSocialLogin2ReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthSocialLogin2ReqVO.java index 13aaa71cc7..25e0d65514 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthSocialLogin2ReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthSocialLogin2ReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth; +package cn.iocoder.yudao.module.system.controller.auth.vo.auth; import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum; import cn.iocoder.yudao.framework.common.validation.InEnum; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthSocialLoginReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthSocialLoginReqVO.java similarity index 93% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthSocialLoginReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthSocialLoginReqVO.java index 71d19685d0..930fea227c 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthSocialLoginReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthSocialLoginReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth; +package cn.iocoder.yudao.module.system.controller.auth.vo.auth; import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum; import cn.iocoder.yudao.framework.common.validation.InEnum; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthSocialUnbindReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthSocialUnbindReqVO.java similarity index 93% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthSocialUnbindReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthSocialUnbindReqVO.java index 096164ed70..7bf6c8ef91 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthSocialUnbindReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthSocialUnbindReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth; +package cn.iocoder.yudao.module.system.controller.auth.vo.auth; import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum; import cn.iocoder.yudao.framework.common.validation.InEnum; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/session/SysUserSessionPageItemRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/session/SysUserSessionPageItemRespVO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/session/SysUserSessionPageItemRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/session/SysUserSessionPageItemRespVO.java index c67fa99aeb..debdf59989 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/session/SysUserSessionPageItemRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/session/SysUserSessionPageItemRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.session; +package cn.iocoder.yudao.module.system.controller.auth.vo.session; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/session/SysUserSessionPageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/session/SysUserSessionPageReqVO.java similarity index 88% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/session/SysUserSessionPageReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/session/SysUserSessionPageReqVO.java index fb8f4f2b6d..c834f5d8c8 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/session/SysUserSessionPageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/session/SysUserSessionPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.session; +package cn.iocoder.yudao.module.system.controller.auth.vo.session; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/common/SysCaptchaController.http b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/common/SysCaptchaController.http similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/common/SysCaptchaController.http rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/common/SysCaptchaController.http diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/common/SysCaptchaController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/common/SysCaptchaController.java similarity index 76% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/common/SysCaptchaController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/common/SysCaptchaController.java index 94e3c9d0da..317895005a 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/common/SysCaptchaController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/common/SysCaptchaController.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.common; +package cn.iocoder.yudao.module.system.controller.common; import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.adminserver.modules.system.controller.common.vo.SysCaptchaImageRespVO; -import cn.iocoder.yudao.adminserver.modules.system.service.common.SysCaptchaService; +import cn.iocoder.yudao.module.system.controller.common.vo.SysCaptchaImageRespVO; +import cn.iocoder.yudao.module.system.service.common.SysCaptchaService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.GetMapping; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/common/vo/SysCaptchaImageRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/common/vo/SysCaptchaImageRespVO.java similarity index 89% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/common/vo/SysCaptchaImageRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/common/vo/SysCaptchaImageRespVO.java index b3e9f2c247..5c55b16ffd 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/common/vo/SysCaptchaImageRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/common/vo/SysCaptchaImageRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.common.vo; +package cn.iocoder.yudao.module.system.controller.common.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/SysDeptController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/SysDeptController.java similarity index 91% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/SysDeptController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/SysDeptController.java index 2c384623ec..70c365560c 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/SysDeptController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/SysDeptController.java @@ -1,12 +1,12 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dept; +package cn.iocoder.yudao.module.system.controller.dept; import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.*; -import cn.iocoder.yudao.adminserver.modules.system.convert.dept.SysDeptConvert; +import cn.iocoder.yudao.module.system.controller.dept.vo.dept.*; +import cn.iocoder.yudao.module.system.convert.dept.SysDeptConvert; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; +import cn.iocoder.yudao.module.system.service.dept.SysDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/SysPostController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/SysPostController.java similarity index 92% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/SysPostController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/SysPostController.java index fec11cb018..762044dadc 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/SysPostController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/SysPostController.java @@ -1,14 +1,14 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dept; +package cn.iocoder.yudao.module.system.controller.dept; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.*; -import cn.iocoder.yudao.adminserver.modules.system.convert.dept.SysPostConvert; +import cn.iocoder.yudao.module.system.controller.dept.vo.post.*; +import cn.iocoder.yudao.module.system.convert.dept.SysPostConvert; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysPostService; +import cn.iocoder.yudao.module.system.service.dept.SysPostService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/dept/SysDeptBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptBaseVO.java similarity index 89% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/dept/SysDeptBaseVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptBaseVO.java index 8296a89bed..5e0bc14779 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/dept/SysDeptBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptBaseVO.java @@ -1,7 +1,5 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept; +package cn.iocoder.yudao.module.system.controller.dept.vo.dept; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.validation.InEnum; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/dept/SysDeptCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptCreateReqVO.java similarity index 78% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/dept/SysDeptCreateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptCreateReqVO.java index c5c5aac56d..4909ef8bcb 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/dept/SysDeptCreateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept; +package cn.iocoder.yudao.module.system.controller.dept.vo.dept; import io.swagger.annotations.ApiModel; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/dept/SysDeptListReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptListReqVO.java similarity index 85% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/dept/SysDeptListReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptListReqVO.java index b47bc53be4..840fb0480b 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/dept/SysDeptListReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptListReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept; +package cn.iocoder.yudao.module.system.controller.dept.vo.dept; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/dept/SysDeptRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptRespVO.java similarity index 89% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/dept/SysDeptRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptRespVO.java index 325cce6b1e..edcc455aa0 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/dept/SysDeptRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept; +package cn.iocoder.yudao.module.system.controller.dept.vo.dept; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/dept/SysDeptSimpleRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptSimpleRespVO.java similarity index 89% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/dept/SysDeptSimpleRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptSimpleRespVO.java index bf9c8bdc5c..b9500ea81c 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/dept/SysDeptSimpleRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptSimpleRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept; +package cn.iocoder.yudao.module.system.controller.dept.vo.dept; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/dept/SysDeptUpdateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptUpdateReqVO.java similarity index 86% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/dept/SysDeptUpdateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptUpdateReqVO.java index 5838d1dd1a..c4cd016e37 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/dept/SysDeptUpdateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept; +package cn.iocoder.yudao.module.system.controller.dept.vo.dept; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostBaseVO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostBaseVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostBaseVO.java index c6ed5c82a1..e30eedeacd 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post; +package cn.iocoder.yudao.module.system.controller.dept.vo.post; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostCreateReqVO.java similarity index 75% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostCreateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostCreateReqVO.java index 72be88dd55..9570ad07a3 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostCreateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post; +package cn.iocoder.yudao.module.system.controller.dept.vo.post; import io.swagger.annotations.ApiModel; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostExcelVO.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostExcelVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostExcelVO.java index 3286bd63a0..32042a41fc 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostExcelVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post; +package cn.iocoder.yudao.module.system.controller.dept.vo.post; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostExportReqVO.java similarity index 88% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostExportReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostExportReqVO.java index 465639236a..9b8cd5e89b 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post; +package cn.iocoder.yudao.module.system.controller.dept.vo.post; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostListReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostListReqVO.java similarity index 87% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostListReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostListReqVO.java index 0e700a9c56..a05bed03f5 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostListReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostListReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post; +package cn.iocoder.yudao.module.system.controller.dept.vo.post; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostPageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostPageReqVO.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostPageReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostPageReqVO.java index 432e16039b..49b05c2a9e 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostPageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post; +package cn.iocoder.yudao.module.system.controller.dept.vo.post; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostRespVO.java similarity index 87% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostRespVO.java index cfd42a204d..fd95be4616 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post; +package cn.iocoder.yudao.module.system.controller.dept.vo.post; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostSimpleRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostSimpleRespVO.java similarity index 87% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostSimpleRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostSimpleRespVO.java index 244667f068..fdc6636d40 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostSimpleRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostSimpleRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post; +package cn.iocoder.yudao.module.system.controller.dept.vo.post; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostUpdateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostUpdateReqVO.java similarity index 86% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostUpdateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostUpdateReqVO.java index cc95c9cd31..0868c6a455 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/post/SysPostUpdateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post; +package cn.iocoder.yudao.module.system.controller.dept.vo.post; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/SysDictDataController.http b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/SysDictDataController.http similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/SysDictDataController.http rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/SysDictDataController.http diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/SysDictDataController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/SysDictDataController.java similarity index 92% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/SysDictDataController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/SysDictDataController.java index 5db6ccf6dc..d82f5cfec7 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/SysDictDataController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/SysDictDataController.java @@ -1,13 +1,13 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dict; +package cn.iocoder.yudao.module.system.controller.dict; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.*; -import cn.iocoder.yudao.adminserver.modules.system.convert.dict.SysDictDataConvert; -import cn.iocoder.yudao.adminserver.modules.system.service.dict.SysDictDataService; +import cn.iocoder.yudao.module.system.controller.dict.vo.data.*; +import cn.iocoder.yudao.module.system.convert.dict.SysDictDataConvert; +import cn.iocoder.yudao.module.system.service.dict.SysDictDataService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/SysDictTypeController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/SysDictTypeController.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/SysDictTypeController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/SysDictTypeController.java index 4057f8a3f7..63a4b08987 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/SysDictTypeController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/SysDictTypeController.java @@ -1,13 +1,13 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dict; +package cn.iocoder.yudao.module.system.controller.dict; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.type.*; -import cn.iocoder.yudao.adminserver.modules.system.convert.dict.SysDictTypeConvert; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dict.SysDictTypeDO; -import cn.iocoder.yudao.adminserver.modules.system.service.dict.SysDictTypeService; +import cn.iocoder.yudao.module.system.controller.dict.vo.type.*; +import cn.iocoder.yudao.module.system.convert.dict.SysDictTypeConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictTypeDO; +import cn.iocoder.yudao.module.system.service.dict.SysDictTypeService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/data/SysDictDataBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataBaseVO.java similarity index 95% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/data/SysDictDataBaseVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataBaseVO.java index adb4bb2f18..c67ceb0d20 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/data/SysDictDataBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data; +package cn.iocoder.yudao.module.system.controller.dict.vo.data; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/data/SysDictDataCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataCreateReqVO.java similarity index 76% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/data/SysDictDataCreateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataCreateReqVO.java index 5c964991ca..c2688b3e30 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/data/SysDictDataCreateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data; +package cn.iocoder.yudao.module.system.controller.dict.vo.data; import io.swagger.annotations.ApiModel; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/data/SysDictDataExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataExcelVO.java similarity index 91% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/data/SysDictDataExcelVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataExcelVO.java index 589735a24c..19cd76b785 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/data/SysDictDataExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataExcelVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data; +package cn.iocoder.yudao.module.system.controller.dict.vo.data; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/data/SysDictDataExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataExportReqVO.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/data/SysDictDataExportReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataExportReqVO.java index 43e8884f26..074e02c804 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/data/SysDictDataExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data; +package cn.iocoder.yudao.module.system.controller.dict.vo.data; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/data/SysDictDataPageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataPageReqVO.java similarity index 92% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/data/SysDictDataPageReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataPageReqVO.java index 0cd2a488de..97d6d8f260 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/data/SysDictDataPageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data; +package cn.iocoder.yudao.module.system.controller.dict.vo.data; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/data/SysDictDataRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataRespVO.java similarity index 89% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/data/SysDictDataRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataRespVO.java index fa6f77fcad..e4281ca150 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/data/SysDictDataRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data; +package cn.iocoder.yudao.module.system.controller.dict.vo.data; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/data/SysDictDataSimpleRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataSimpleRespVO.java similarity index 87% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/data/SysDictDataSimpleRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataSimpleRespVO.java index e4a09e6954..2da4779bac 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/data/SysDictDataSimpleRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataSimpleRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data; +package cn.iocoder.yudao.module.system.controller.dict.vo.data; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/data/SysDictDataUpdateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataUpdateReqVO.java similarity index 86% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/data/SysDictDataUpdateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataUpdateReqVO.java index ccbd455840..428aa654aa 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/data/SysDictDataUpdateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data; +package cn.iocoder.yudao.module.system.controller.dict.vo.data; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/type/SysDictTypeBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeBaseVO.java similarity index 92% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/type/SysDictTypeBaseVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeBaseVO.java index c4458cd26b..d9e2dfe478 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/type/SysDictTypeBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.type; +package cn.iocoder.yudao.module.system.controller.dict.vo.type; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/type/SysDictTypeCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeCreateReqVO.java similarity index 89% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/type/SysDictTypeCreateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeCreateReqVO.java index 6f84ecfd70..ea5b0465ab 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/type/SysDictTypeCreateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.type; +package cn.iocoder.yudao.module.system.controller.dict.vo.type; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/type/SysDictTypeExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeExcelVO.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/type/SysDictTypeExcelVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeExcelVO.java index 1fac9c0617..25c07e6ab7 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/type/SysDictTypeExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeExcelVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.type; +package cn.iocoder.yudao.module.system.controller.dict.vo.type; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/type/SysDictTypeExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeExportReqVO.java similarity index 93% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/type/SysDictTypeExportReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeExportReqVO.java index cfe54e563d..440cef8bcf 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/type/SysDictTypeExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.type; +package cn.iocoder.yudao.module.system.controller.dict.vo.type; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/type/SysDictTypePageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypePageReqVO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/type/SysDictTypePageReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypePageReqVO.java index 434ca272d0..8cd2c9b824 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/type/SysDictTypePageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypePageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.type; +package cn.iocoder.yudao.module.system.controller.dict.vo.type; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/type/SysDictTypeRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeRespVO.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/type/SysDictTypeRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeRespVO.java index fd216bc8fe..b82e16e16d 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/type/SysDictTypeRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.type; +package cn.iocoder.yudao.module.system.controller.dict.vo.type; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/type/SysDictTypeSimpleRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeSimpleRespVO.java similarity index 89% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/type/SysDictTypeSimpleRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeSimpleRespVO.java index 7d0ef04dce..c53154f8c8 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/type/SysDictTypeSimpleRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeSimpleRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.type; +package cn.iocoder.yudao.module.system.controller.dict.vo.type; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/type/SysDictTypeUpdateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeUpdateReqVO.java similarity index 86% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/type/SysDictTypeUpdateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeUpdateReqVO.java index 9b887bd5d7..ed812dadc2 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dict/vo/type/SysDictTypeUpdateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.type; +package cn.iocoder.yudao.module.system.controller.dict.vo.type; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/errorcode/SysErrorCodeController.http b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/SysErrorCodeController.http similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/errorcode/SysErrorCodeController.http rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/SysErrorCodeController.http diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/errorcode/SysErrorCodeController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/SysErrorCodeController.java similarity index 89% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/errorcode/SysErrorCodeController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/SysErrorCodeController.java index f7dd4a4111..220789d565 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/errorcode/SysErrorCodeController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/SysErrorCodeController.java @@ -1,13 +1,13 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.errorcode; +package cn.iocoder.yudao.module.system.controller.errorcode; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import cn.iocoder.yudao.adminserver.modules.system.convert.errorcode.SysErrorCodeConvert; -import cn.iocoder.yudao.adminserver.modules.system.controller.errorcode.vo.*; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.errorcode.SysErrorCodeDO; -import cn.iocoder.yudao.adminserver.modules.system.service.errorcode.SysErrorCodeService; +import cn.iocoder.yudao.module.system.convert.errorcode.SysErrorCodeConvert; +import cn.iocoder.yudao.module.system.controller.errorcode.vo.*; +import cn.iocoder.yudao.module.system.dal.dataobject.errorcode.SysErrorCodeDO; +import cn.iocoder.yudao.module.system.service.errorcode.SysErrorCodeService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/errorcode/vo/SysErrorCodeBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeBaseVO.java similarity index 92% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/errorcode/vo/SysErrorCodeBaseVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeBaseVO.java index 118c38b251..f5d1e8d7aa 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/errorcode/vo/SysErrorCodeBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.errorcode.vo; +package cn.iocoder.yudao.module.system.controller.errorcode.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/errorcode/vo/SysErrorCodeCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeCreateReqVO.java similarity index 79% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/errorcode/vo/SysErrorCodeCreateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeCreateReqVO.java index 15190abfe1..3eb9b14a45 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/errorcode/vo/SysErrorCodeCreateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.errorcode.vo; +package cn.iocoder.yudao.module.system.controller.errorcode.vo; import io.swagger.annotations.ApiModel; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/errorcode/vo/SysErrorCodeExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeExcelVO.java similarity index 78% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/errorcode/vo/SysErrorCodeExcelVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeExcelVO.java index 8e20b6e4aa..5efbf36dc8 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/errorcode/vo/SysErrorCodeExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeExcelVO.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.errorcode.vo; +package cn.iocoder.yudao.module.system.controller.errorcode.vo; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.adminserver.modules.infra.enums.InfDictTypeConstants; +//import cn.iocoder.yudao.adminserver.modules.infra.enums.InfDictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @@ -20,7 +20,7 @@ public class SysErrorCodeExcelVO { private Long id; @ExcelProperty(value = "错误ç ç±»åž‹", converter = DictConvert.class) - @DictFormat(InfDictTypeConstants.ERROR_CODE_TYPE) + @DictFormat("inf_error_code_type") // TODO 芋艿:得æ€è€ƒä¸‹æ‚解决枚举值 private Integer type; @ExcelProperty("应用å") diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/errorcode/vo/SysErrorCodeExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeExportReqVO.java similarity index 93% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/errorcode/vo/SysErrorCodeExportReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeExportReqVO.java index 6047679942..8a46b99dc0 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/errorcode/vo/SysErrorCodeExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.errorcode.vo; +package cn.iocoder.yudao.module.system.controller.errorcode.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/errorcode/vo/SysErrorCodePageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodePageReqVO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/errorcode/vo/SysErrorCodePageReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodePageReqVO.java index baf781a595..6273ea192d 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/errorcode/vo/SysErrorCodePageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodePageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.errorcode.vo; +package cn.iocoder.yudao.module.system.controller.errorcode.vo; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/errorcode/vo/SysErrorCodeRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeRespVO.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/errorcode/vo/SysErrorCodeRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeRespVO.java index 69798f3f4b..35e4f93d64 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/errorcode/vo/SysErrorCodeRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.errorcode.vo; +package cn.iocoder.yudao.module.system.controller.errorcode.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/errorcode/vo/SysErrorCodeUpdateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeUpdateReqVO.java similarity index 87% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/errorcode/vo/SysErrorCodeUpdateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeUpdateReqVO.java index 11f124a9b1..0d6b9508e1 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/errorcode/vo/SysErrorCodeUpdateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.errorcode.vo; +package cn.iocoder.yudao.module.system.controller.errorcode.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/SysLoginLogController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/SysLoginLogController.java similarity index 77% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/SysLoginLogController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/SysLoginLogController.java index 24260c4a2f..29addebc6d 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/SysLoginLogController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/SysLoginLogController.java @@ -1,16 +1,16 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.logger; +package cn.iocoder.yudao.module.system.controller.logger; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog.SysLoginLogExcelVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog.SysLoginLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog.SysLoginLogPageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog.SysLoginLogRespVO; -import cn.iocoder.yudao.adminserver.modules.system.convert.logger.SysLoginLogConvert; -import cn.iocoder.yudao.adminserver.modules.system.service.logger.SysLoginLogService; +import cn.iocoder.yudao.module.system.controller.logger.vo.loginlog.SysLoginLogExcelVO; +import cn.iocoder.yudao.module.system.controller.logger.vo.loginlog.SysLoginLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.logger.vo.loginlog.SysLoginLogPageReqVO; +import cn.iocoder.yudao.module.system.controller.logger.vo.loginlog.SysLoginLogRespVO; +import cn.iocoder.yudao.module.system.convert.logger.SysLoginLogConvert; +import cn.iocoder.yudao.module.system.service.logger.SysLoginLogService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/SysOperateLogController.http b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/SysOperateLogController.http similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/SysOperateLogController.http rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/SysOperateLogController.http diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/SysOperateLogController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/SysOperateLogController.java similarity index 80% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/SysOperateLogController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/SysOperateLogController.java index 968ab49542..f572ed5c29 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/SysOperateLogController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/SysOperateLogController.java @@ -1,13 +1,12 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.logger; +package cn.iocoder.yudao.module.system.controller.logger; -import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog.SysOperateLogExcelVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog.SysOperateLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog.SysOperateLogPageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog.SysOperateLogRespVO; -import cn.iocoder.yudao.adminserver.modules.system.convert.logger.SysOperateLogConvert; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.logger.SysOperateLogDO; -import cn.iocoder.yudao.adminserver.modules.system.service.logger.SysOperateLogService; -import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; +import cn.iocoder.yudao.module.system.controller.logger.vo.operatelog.SysOperateLogExcelVO; +import cn.iocoder.yudao.module.system.controller.logger.vo.operatelog.SysOperateLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.logger.vo.operatelog.SysOperateLogPageReqVO; +import cn.iocoder.yudao.module.system.controller.logger.vo.operatelog.SysOperateLogRespVO; +import cn.iocoder.yudao.module.system.convert.logger.SysOperateLogConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysOperateLogDO; +import cn.iocoder.yudao.module.system.service.logger.SysOperateLogService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/loginlog/SysLoginLogBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogBaseVO.java similarity index 95% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/loginlog/SysLoginLogBaseVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogBaseVO.java index a346d946f9..6b26057962 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/loginlog/SysLoginLogBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog; +package cn.iocoder.yudao.module.system.controller.logger.vo.loginlog; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/loginlog/SysLoginLogExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogExcelVO.java similarity index 92% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/loginlog/SysLoginLogExcelVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogExcelVO.java index 8c2693beb1..bda160a3fa 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/loginlog/SysLoginLogExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogExcelVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog; +package cn.iocoder.yudao.module.system.controller.logger.vo.loginlog; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/loginlog/SysLoginLogExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogExportReqVO.java similarity index 92% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/loginlog/SysLoginLogExportReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogExportReqVO.java index a85f926857..8f936268bc 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/loginlog/SysLoginLogExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog; +package cn.iocoder.yudao.module.system.controller.logger.vo.loginlog; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/loginlog/SysLoginLogPageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogPageReqVO.java similarity index 93% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/loginlog/SysLoginLogPageReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogPageReqVO.java index 52079094c2..7c71730c90 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/loginlog/SysLoginLogPageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog; +package cn.iocoder.yudao.module.system.controller.logger.vo.loginlog; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/loginlog/SysLoginLogRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogRespVO.java similarity index 92% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/loginlog/SysLoginLogRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogRespVO.java index 65aa6494d8..3f588304b9 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/loginlog/SysLoginLogRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog; +package cn.iocoder.yudao.module.system.controller.logger.vo.loginlog; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/operatelog/SysOperateLogBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogBaseVO.java similarity index 97% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/operatelog/SysOperateLogBaseVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogBaseVO.java index d29a96ce39..735e0b198e 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/operatelog/SysOperateLogBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog; +package cn.iocoder.yudao.module.system.controller.logger.vo.operatelog; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/operatelog/SysOperateLogExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogExcelVO.java similarity index 92% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/operatelog/SysOperateLogExcelVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogExcelVO.java index 5233ef90c9..e5fc3e9410 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/operatelog/SysOperateLogExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogExcelVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog; +package cn.iocoder.yudao.module.system.controller.logger.vo.operatelog; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/operatelog/SysOperateLogExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogExportReqVO.java similarity index 93% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/operatelog/SysOperateLogExportReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogExportReqVO.java index 2c500e12b1..1c501acd6e 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/operatelog/SysOperateLogExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog; +package cn.iocoder.yudao.module.system.controller.logger.vo.operatelog; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/operatelog/SysOperateLogPageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogPageReqVO.java similarity index 93% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/operatelog/SysOperateLogPageReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogPageReqVO.java index 2a0378a59e..92efe97388 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/operatelog/SysOperateLogPageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog; +package cn.iocoder.yudao.module.system.controller.logger.vo.operatelog; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/operatelog/SysOperateLogRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogRespVO.java similarity index 86% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/operatelog/SysOperateLogRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogRespVO.java index 1ac82a91ef..fc825d62a5 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/vo/operatelog/SysOperateLogRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog; +package cn.iocoder.yudao.module.system.controller.logger.vo.operatelog; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/notice/SysNoticeController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/SysNoticeController.java similarity index 80% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/notice/SysNoticeController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/SysNoticeController.java index 5ab1944ab5..7cb255ee5b 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/notice/SysNoticeController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/SysNoticeController.java @@ -1,13 +1,13 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.notice; +package cn.iocoder.yudao.module.system.controller.notice; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.system.controller.notice.vo.SysNoticeCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.notice.vo.SysNoticePageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.notice.vo.SysNoticeRespVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.notice.vo.SysNoticeUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.convert.notice.SysNoticeConvert; -import cn.iocoder.yudao.adminserver.modules.system.service.notice.SysNoticeService; +import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticeCreateReqVO; +import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticePageReqVO; +import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticeRespVO; +import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticeUpdateReqVO; +import cn.iocoder.yudao.module.system.convert.notice.SysNoticeConvert; +import cn.iocoder.yudao.module.system.service.notice.SysNoticeService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/notice/vo/SysNoticeBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticeBaseVO.java similarity index 93% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/notice/vo/SysNoticeBaseVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticeBaseVO.java index 9bd228ed58..ddbb141cce 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/notice/vo/SysNoticeBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticeBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.notice.vo; +package cn.iocoder.yudao.module.system.controller.notice.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/notice/vo/SysNoticeCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticeCreateReqVO.java similarity index 76% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/notice/vo/SysNoticeCreateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticeCreateReqVO.java index cf86f2164a..1669618ab8 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/notice/vo/SysNoticeCreateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticeCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.notice.vo; +package cn.iocoder.yudao.module.system.controller.notice.vo; import io.swagger.annotations.ApiModel; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/notice/vo/SysNoticePageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticePageReqVO.java similarity index 89% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/notice/vo/SysNoticePageReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticePageReqVO.java index b347ab9362..6e1932a155 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/notice/vo/SysNoticePageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticePageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.notice.vo; +package cn.iocoder.yudao.module.system.controller.notice.vo; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/notice/vo/SysNoticeRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticeRespVO.java similarity index 88% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/notice/vo/SysNoticeRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticeRespVO.java index 8145e85b26..0cfb78bbb0 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/notice/vo/SysNoticeRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticeRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.notice.vo; +package cn.iocoder.yudao.module.system.controller.notice.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/notice/vo/SysNoticeUpdateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticeUpdateReqVO.java similarity index 87% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/notice/vo/SysNoticeUpdateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticeUpdateReqVO.java index 2c02d5aaef..3d6fdd586b 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/notice/vo/SysNoticeUpdateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticeUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.notice.vo; +package cn.iocoder.yudao.module.system.controller.notice.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/SysMenuController.http b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/SysMenuController.http similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/SysMenuController.http rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/SysMenuController.http diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/SysMenuController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/SysMenuController.java similarity index 88% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/SysMenuController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/SysMenuController.java index ddf388dd4b..340b3bff78 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/SysMenuController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/SysMenuController.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.permission; +package cn.iocoder.yudao.module.system.controller.permission; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.menu.*; -import cn.iocoder.yudao.adminserver.modules.system.convert.permission.SysMenuConvert; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysMenuDO; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysMenuService; +import cn.iocoder.yudao.module.system.controller.permission.vo.menu.*; +import cn.iocoder.yudao.module.system.convert.permission.SysMenuConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysMenuDO; +import cn.iocoder.yudao.module.system.service.permission.SysMenuService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/SysPermissionController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/SysPermissionController.java similarity index 83% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/SysPermissionController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/SysPermissionController.java index cbd1197aeb..500f4ac4b5 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/SysPermissionController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/SysPermissionController.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.permission; +package cn.iocoder.yudao.module.system.controller.permission; import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.permission.SysPermissionAssignRoleDataScopeReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.permission.SysPermissionAssignRoleMenuReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.permission.SysPermissionAssignUserRoleReqVO; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService; +import cn.iocoder.yudao.module.system.controller.permission.vo.permission.SysPermissionAssignRoleDataScopeReqVO; +import cn.iocoder.yudao.module.system.controller.permission.vo.permission.SysPermissionAssignRoleMenuReqVO; +import cn.iocoder.yudao.module.system.controller.permission.vo.permission.SysPermissionAssignUserRoleReqVO; +import cn.iocoder.yudao.module.system.service.permission.SysPermissionService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/SysRoleController.http b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/SysRoleController.http similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/SysRoleController.http rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/SysRoleController.http diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/SysRoleController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/SysRoleController.java similarity index 92% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/SysRoleController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/SysRoleController.java index 2dc6f347b3..7ec11bd563 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/SysRoleController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/SysRoleController.java @@ -1,14 +1,14 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.permission; +package cn.iocoder.yudao.module.system.controller.permission; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role.*; -import cn.iocoder.yudao.adminserver.modules.system.convert.permission.SysRoleConvert; +import cn.iocoder.yudao.module.system.controller.permission.vo.role.*; +import cn.iocoder.yudao.module.system.convert.permission.SysRoleConvert; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysRoleService; +import cn.iocoder.yudao.module.system.service.permission.SysRoleService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/menu/SysMenuBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuBaseVO.java similarity index 96% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/menu/SysMenuBaseVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuBaseVO.java index 66b62d03b9..87f2eb7fe5 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/menu/SysMenuBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.menu; +package cn.iocoder.yudao.module.system.controller.permission.vo.menu; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/menu/SysMenuCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuCreateReqVO.java similarity index 70% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/menu/SysMenuCreateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuCreateReqVO.java index e50c73f2f4..2c0357f864 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/menu/SysMenuCreateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.menu; +package cn.iocoder.yudao.module.system.controller.permission.vo.menu; import io.swagger.annotations.ApiModel; import lombok.*; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/menu/SysMenuListReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuListReqVO.java similarity index 84% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/menu/SysMenuListReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuListReqVO.java index 5600a132c8..e0b8a2d026 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/menu/SysMenuListReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuListReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.menu; +package cn.iocoder.yudao.module.system.controller.permission.vo.menu; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/menu/SysMenuRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuRespVO.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/menu/SysMenuRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuRespVO.java index 6175a8ca3a..ed8512ae58 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/menu/SysMenuRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.menu; +package cn.iocoder.yudao.module.system.controller.permission.vo.menu; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/menu/SysMenuSimpleRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuSimpleRespVO.java similarity index 88% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/menu/SysMenuSimpleRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuSimpleRespVO.java index 689d705d49..dc160cb966 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/menu/SysMenuSimpleRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuSimpleRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.menu; +package cn.iocoder.yudao.module.system.controller.permission.vo.menu; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/menu/SysMenuUpdateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuUpdateReqVO.java similarity index 84% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/menu/SysMenuUpdateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuUpdateReqVO.java index 736d580733..bf44bf94a8 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/menu/SysMenuUpdateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.menu; +package cn.iocoder.yudao.module.system.controller.permission.vo.menu; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/permission/SysPermissionAssignRoleDataScopeReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/permission/SysPermissionAssignRoleDataScopeReqVO.java similarity index 91% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/permission/SysPermissionAssignRoleDataScopeReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/permission/SysPermissionAssignRoleDataScopeReqVO.java index 8050e81436..08feaae0d5 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/permission/SysPermissionAssignRoleDataScopeReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/permission/SysPermissionAssignRoleDataScopeReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.permission; +package cn.iocoder.yudao.module.system.controller.permission.vo.permission; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/permission/SysPermissionAssignRoleMenuReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/permission/SysPermissionAssignRoleMenuReqVO.java similarity index 87% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/permission/SysPermissionAssignRoleMenuReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/permission/SysPermissionAssignRoleMenuReqVO.java index 47ffae9288..664d6d8e80 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/permission/SysPermissionAssignRoleMenuReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/permission/SysPermissionAssignRoleMenuReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.permission; +package cn.iocoder.yudao.module.system.controller.permission.vo.permission; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/permission/SysPermissionAssignUserRoleReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/permission/SysPermissionAssignUserRoleReqVO.java similarity index 87% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/permission/SysPermissionAssignUserRoleReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/permission/SysPermissionAssignUserRoleReqVO.java index 1a3e034154..fdbbedcbd7 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/permission/SysPermissionAssignUserRoleReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/permission/SysPermissionAssignUserRoleReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.permission; +package cn.iocoder.yudao.module.system.controller.permission.vo.permission; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRoleBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleBaseVO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRoleBaseVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleBaseVO.java index a07e20c4a6..a2553fc238 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRoleBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role; +package cn.iocoder.yudao.module.system.controller.permission.vo.role; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRoleCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleCreateReqVO.java similarity index 73% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRoleCreateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleCreateReqVO.java index f16c3adf97..a182b26c9c 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRoleCreateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role; +package cn.iocoder.yudao.module.system.controller.permission.vo.role; import io.swagger.annotations.ApiModel; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRoleExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleExcelVO.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRoleExcelVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleExcelVO.java index 01b758347b..08a37816f3 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRoleExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleExcelVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role; +package cn.iocoder.yudao.module.system.controller.permission.vo.role; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRoleExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleExportReqVO.java similarity index 92% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRoleExportReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleExportReqVO.java index 656f136d04..bc0970878a 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRoleExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role; +package cn.iocoder.yudao.module.system.controller.permission.vo.role; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRolePageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRolePageReqVO.java similarity index 93% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRolePageReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRolePageReqVO.java index 6983176fad..c6e7665e43 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRolePageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRolePageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role; +package cn.iocoder.yudao.module.system.controller.permission.vo.role; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRoleRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleRespVO.java similarity index 93% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRoleRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleRespVO.java index f3a565d716..ef11d82a30 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRoleRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role; +package cn.iocoder.yudao.module.system.controller.permission.vo.role; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRoleSimpleRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleSimpleRespVO.java similarity index 86% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRoleSimpleRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleSimpleRespVO.java index c1b973ff79..a2706f4f4a 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRoleSimpleRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleSimpleRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role; +package cn.iocoder.yudao.module.system.controller.permission.vo.role; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRoleUpdateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleUpdateReqVO.java similarity index 85% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRoleUpdateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleUpdateReqVO.java index dcf994f8d2..c6f56f63a3 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRoleUpdateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role; +package cn.iocoder.yudao.module.system.controller.permission.vo.role; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRoleUpdateStatusReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleUpdateStatusReqVO.java similarity index 89% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRoleUpdateStatusReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleUpdateStatusReqVO.java index 1741881dd1..ba861539de 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/vo/role/SysRoleUpdateStatusReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleUpdateStatusReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role; +package cn.iocoder.yudao.module.system.controller.permission.vo.role; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/SmsCallbackController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SmsCallbackController.java similarity index 97% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/SmsCallbackController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SmsCallbackController.java index 322b99d00f..0968a1d2fa 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/SmsCallbackController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SmsCallbackController.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.sms; +package cn.iocoder.yudao.module.system.controller.sms; import cn.hutool.core.util.URLUtil; import cn.hutool.extra.servlet.ServletUtil; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/SysSmsChannelController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SysSmsChannelController.java similarity index 91% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/SysSmsChannelController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SysSmsChannelController.java index 3fbb47e6ec..70c7d7059b 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/SysSmsChannelController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SysSmsChannelController.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.sms; +package cn.iocoder.yudao.module.system.controller.sms; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.*; -import cn.iocoder.yudao.adminserver.modules.system.convert.sms.SysSmsChannelConvert; -import cn.iocoder.yudao.adminserver.modules.system.service.sms.SysSmsChannelService; +import cn.iocoder.yudao.module.system.controller.sms.vo.channel.*; +import cn.iocoder.yudao.module.system.convert.sms.SysSmsChannelConvert; +import cn.iocoder.yudao.module.system.service.sms.SysSmsChannelService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/SysSmsLogController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SysSmsLogController.java similarity index 79% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/SysSmsLogController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SysSmsLogController.java index aa1eec9b2a..ee69dee3d1 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/SysSmsLogController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SysSmsLogController.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.sms; +package cn.iocoder.yudao.module.system.controller.sms; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogExcelVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogPageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogRespVO; -import cn.iocoder.yudao.adminserver.modules.system.convert.sms.SysSmsLogConvert; -import cn.iocoder.yudao.adminserver.modules.system.service.sms.SysSmsLogService; +import cn.iocoder.yudao.module.system.controller.sms.vo.log.SysSmsLogExcelVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.log.SysSmsLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.log.SysSmsLogPageReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.log.SysSmsLogRespVO; +import cn.iocoder.yudao.module.system.convert.sms.SysSmsLogConvert; +import cn.iocoder.yudao.module.system.service.sms.SysSmsLogService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/SysSmsTemplateController.http b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SysSmsTemplateController.http similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/SysSmsTemplateController.http rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SysSmsTemplateController.http diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/SysSmsTemplateController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SysSmsTemplateController.java similarity index 93% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/SysSmsTemplateController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SysSmsTemplateController.java index 5b9d8bc6e1..9328680e30 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/SysSmsTemplateController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SysSmsTemplateController.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.sms; +package cn.iocoder.yudao.module.system.controller.sms; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.*; -import cn.iocoder.yudao.adminserver.modules.system.convert.sms.SysSmsTemplateConvert; -import cn.iocoder.yudao.adminserver.modules.system.service.sms.SysSmsTemplateService; +import cn.iocoder.yudao.module.system.controller.sms.vo.template.*; +import cn.iocoder.yudao.module.system.convert.sms.SysSmsTemplateConvert; +import cn.iocoder.yudao.module.system.service.sms.SysSmsTemplateService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsCoreService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/channel/SysSmsChannelBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelBaseVO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/channel/SysSmsChannelBaseVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelBaseVO.java index fd475bdcf9..04b1f6926a 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/channel/SysSmsChannelBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel; +package cn.iocoder.yudao.module.system.controller.sms.vo.channel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/channel/SysSmsChannelCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelCreateReqVO.java similarity index 88% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/channel/SysSmsChannelCreateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelCreateReqVO.java index e9466a7b6b..fdf3e98743 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/channel/SysSmsChannelCreateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel; +package cn.iocoder.yudao.module.system.controller.sms.vo.channel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/channel/SysSmsChannelPageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelPageReqVO.java similarity index 93% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/channel/SysSmsChannelPageReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelPageReqVO.java index e30bc3d48a..d7d90ec79c 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/channel/SysSmsChannelPageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel; +package cn.iocoder.yudao.module.system.controller.sms.vo.channel; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/channel/SysSmsChannelRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelRespVO.java similarity index 89% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/channel/SysSmsChannelRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelRespVO.java index 8e7d111a3d..02654a0170 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/channel/SysSmsChannelRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel; +package cn.iocoder.yudao.module.system.controller.sms.vo.channel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/channel/SysSmsChannelSimpleRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelSimpleRespVO.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/channel/SysSmsChannelSimpleRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelSimpleRespVO.java index 451a943eba..1cf341f986 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/channel/SysSmsChannelSimpleRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelSimpleRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel; +package cn.iocoder.yudao.module.system.controller.sms.vo.channel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/channel/SysSmsChannelUpdateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelUpdateReqVO.java similarity index 87% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/channel/SysSmsChannelUpdateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelUpdateReqVO.java index 816e5c2197..72ffb28a26 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/channel/SysSmsChannelUpdateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel; +package cn.iocoder.yudao.module.system.controller.sms.vo.channel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/log/SysSmsLogExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/log/SysSmsLogExcelVO.java similarity index 97% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/log/SysSmsLogExcelVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/log/SysSmsLogExcelVO.java index 69cb3963f0..1bdc830477 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/log/SysSmsLogExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/log/SysSmsLogExcelVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log; +package cn.iocoder.yudao.module.system.controller.sms.vo.log; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/log/SysSmsLogExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/log/SysSmsLogExportReqVO.java similarity index 95% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/log/SysSmsLogExportReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/log/SysSmsLogExportReqVO.java index 94be2d84e9..3cfd6ca644 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/log/SysSmsLogExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/log/SysSmsLogExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log; +package cn.iocoder.yudao.module.system.controller.sms.vo.log; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/log/SysSmsLogPageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/log/SysSmsLogPageReqVO.java similarity index 95% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/log/SysSmsLogPageReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/log/SysSmsLogPageReqVO.java index 1ea8a1fa75..94bcc9a705 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/log/SysSmsLogPageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/log/SysSmsLogPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log; +package cn.iocoder.yudao.module.system.controller.sms.vo.log; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/log/SysSmsLogRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/log/SysSmsLogRespVO.java similarity index 97% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/log/SysSmsLogRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/log/SysSmsLogRespVO.java index 10ff01a3d5..f2a07a0ad7 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/log/SysSmsLogRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/log/SysSmsLogRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log; +package cn.iocoder.yudao.module.system.controller.sms.vo.log; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/template/SysSmsTemplateBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateBaseVO.java similarity index 95% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/template/SysSmsTemplateBaseVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateBaseVO.java index cc587872e4..622316cdc8 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/template/SysSmsTemplateBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template; +package cn.iocoder.yudao.module.system.controller.sms.vo.template; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/template/SysSmsTemplateCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateCreateReqVO.java similarity index 79% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/template/SysSmsTemplateCreateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateCreateReqVO.java index 6d5931565e..f0481861a9 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/template/SysSmsTemplateCreateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template; +package cn.iocoder.yudao.module.system.controller.sms.vo.template; import io.swagger.annotations.ApiModel; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/template/SysSmsTemplateExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateExcelVO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/template/SysSmsTemplateExcelVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateExcelVO.java index d227caba3b..d3151e621a 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/template/SysSmsTemplateExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateExcelVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template; +package cn.iocoder.yudao.module.system.controller.sms.vo.template; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/template/SysSmsTemplateExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateExportReqVO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/template/SysSmsTemplateExportReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateExportReqVO.java index 66efb4df65..930fff5580 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/template/SysSmsTemplateExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template; +package cn.iocoder.yudao.module.system.controller.sms.vo.template; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/template/SysSmsTemplatePageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplatePageReqVO.java similarity index 95% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/template/SysSmsTemplatePageReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplatePageReqVO.java index fc8bd80b13..e0d711ad23 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/template/SysSmsTemplatePageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplatePageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template; +package cn.iocoder.yudao.module.system.controller.sms.vo.template; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/template/SysSmsTemplateRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateRespVO.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/template/SysSmsTemplateRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateRespVO.java index c26d3804d8..24fae0ca1f 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/template/SysSmsTemplateRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template; +package cn.iocoder.yudao.module.system.controller.sms.vo.template; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/template/SysSmsTemplateSendReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateSendReqVO.java similarity index 89% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/template/SysSmsTemplateSendReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateSendReqVO.java index 34a773e036..0b420c1230 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/template/SysSmsTemplateSendReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateSendReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template; +package cn.iocoder.yudao.module.system.controller.sms.vo.template; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/template/SysSmsTemplateUpdateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateUpdateReqVO.java similarity index 87% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/template/SysSmsTemplateUpdateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateUpdateReqVO.java index 223aa0caed..c12a826cc6 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/vo/template/SysSmsTemplateUpdateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template; +package cn.iocoder.yudao.module.system.controller.sms.vo.template; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/tenant/SysTenantController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/SysTenantController.java similarity index 93% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/tenant/SysTenantController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/SysTenantController.java index 54db21e9b3..c4a8ca1400 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/tenant/SysTenantController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/SysTenantController.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.tenant; +package cn.iocoder.yudao.module.system.controller.tenant; -import cn.iocoder.yudao.adminserver.modules.system.controller.tenant.vo.*; -import cn.iocoder.yudao.adminserver.modules.system.convert.tenant.SysTenantConvert; -import cn.iocoder.yudao.adminserver.modules.system.service.tenant.SysTenantService; +import cn.iocoder.yudao.module.system.controller.tenant.vo.*; +import cn.iocoder.yudao.module.system.convert.tenant.SysTenantConvert; +import cn.iocoder.yudao.module.system.service.tenant.SysTenantService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.tenant.SysTenantDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/tenant/vo/SysTenantBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantBaseVO.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/tenant/vo/SysTenantBaseVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantBaseVO.java index 12511123fd..593b9aca48 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/tenant/vo/SysTenantBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantBaseVO.java @@ -1,7 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.tenant.vo; +package cn.iocoder.yudao.module.system.controller.tenant.vo; import lombok.*; -import java.util.*; import io.swagger.annotations.*; import javax.validation.constraints.*; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/tenant/vo/SysTenantCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantCreateReqVO.java similarity index 62% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/tenant/vo/SysTenantCreateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantCreateReqVO.java index 4b90bc5c35..4d41fdfe0d 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/tenant/vo/SysTenantCreateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantCreateReqVO.java @@ -1,9 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.tenant.vo; +package cn.iocoder.yudao.module.system.controller.tenant.vo; import lombok.*; -import java.util.*; import io.swagger.annotations.*; -import javax.validation.constraints.*; @ApiModel("租户创建 Request VO") @Data diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/tenant/vo/SysTenantExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantExcelVO.java similarity index 89% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/tenant/vo/SysTenantExcelVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantExcelVO.java index e98c8e66e2..8244486279 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/tenant/vo/SysTenantExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantExcelVO.java @@ -1,8 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.tenant.vo; +package cn.iocoder.yudao.module.system.controller.tenant.vo; import lombok.*; import java.util.*; -import io.swagger.annotations.*; import com.alibaba.excel.annotation.ExcelProperty; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/tenant/vo/SysTenantExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantExportReqVO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/tenant/vo/SysTenantExportReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantExportReqVO.java index e71e21db41..e70de00131 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/tenant/vo/SysTenantExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.tenant.vo; +package cn.iocoder.yudao.module.system.controller.tenant.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/tenant/vo/SysTenantPageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantPageReqVO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/tenant/vo/SysTenantPageReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantPageReqVO.java index b2f5227a61..b665ea3f65 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/tenant/vo/SysTenantPageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.tenant.vo; +package cn.iocoder.yudao.module.system.controller.tenant.vo; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/tenant/vo/SysTenantRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantRespVO.java similarity index 85% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/tenant/vo/SysTenantRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantRespVO.java index ab12ae53ce..563b5095c4 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/tenant/vo/SysTenantRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.tenant.vo; +package cn.iocoder.yudao.module.system.controller.tenant.vo; import lombok.*; import java.util.*; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/tenant/vo/SysTenantUpdateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantUpdateReqVO.java similarity index 81% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/tenant/vo/SysTenantUpdateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantUpdateReqVO.java index 0ae05af383..c24edc5ea7 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/tenant/vo/SysTenantUpdateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantUpdateReqVO.java @@ -1,7 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.tenant.vo; +package cn.iocoder.yudao.module.system.controller.tenant.vo; import lombok.*; -import java.util.*; import io.swagger.annotations.*; import javax.validation.constraints.*; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserController.http b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/SysUserController.http similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserController.http rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/SysUserController.http diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/SysUserController.java similarity index 96% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/SysUserController.java index ad0f328976..9e03727d46 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/SysUserController.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.user; +package cn.iocoder.yudao.module.system.controller.user; import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.*; -import cn.iocoder.yudao.adminserver.modules.system.convert.user.SysUserConvert; +import cn.iocoder.yudao.module.system.controller.user.vo.user.*; +import cn.iocoder.yudao.module.system.convert.user.SysUserConvert; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; +import cn.iocoder.yudao.module.system.service.user.SysUserService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.enums.common.SysSexEnum; import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserProfileController.http b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/SysUserProfileController.http similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserProfileController.http rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/SysUserProfileController.http diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserProfileController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/SysUserProfileController.java similarity index 82% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserProfileController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/SysUserProfileController.java index 2dea78cd8a..8a38f8724c 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserProfileController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/SysUserProfileController.java @@ -1,14 +1,14 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.user; +package cn.iocoder.yudao.module.system.controller.user; import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileRespVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.convert.user.SysUserConvert; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysPostService; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysRoleService; -import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; +import cn.iocoder.yudao.module.system.controller.user.vo.profile.SysUserProfileRespVO; +import cn.iocoder.yudao.module.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO; +import cn.iocoder.yudao.module.system.controller.user.vo.profile.SysUserProfileUpdateReqVO; +import cn.iocoder.yudao.module.system.convert.user.SysUserConvert; +import cn.iocoder.yudao.module.system.service.dept.SysPostService; +import cn.iocoder.yudao.module.system.service.permission.SysPermissionService; +import cn.iocoder.yudao.module.system.service.permission.SysRoleService; +import cn.iocoder.yudao.module.system.service.user.SysUserService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; @@ -32,7 +32,7 @@ import javax.validation.Valid; import java.io.IOException; import java.util.List; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.FILE_IS_EMPTY; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.FILE_IS_EMPTY; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/profile/SysUserProfileRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/profile/SysUserProfileRespVO.java similarity index 93% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/profile/SysUserProfileRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/profile/SysUserProfileRespVO.java index 4269aaec08..0abd7037a3 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/profile/SysUserProfileRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/profile/SysUserProfileRespVO.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile; +package cn.iocoder.yudao.module.system.controller.user.vo.profile; -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.SysUserBaseVO; +import cn.iocoder.yudao.module.system.controller.user.vo.user.SysUserBaseVO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/profile/SysUserProfileUpdatePasswordReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/profile/SysUserProfileUpdatePasswordReqVO.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/profile/SysUserProfileUpdatePasswordReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/profile/SysUserProfileUpdatePasswordReqVO.java index 340d2e4078..0578f3ceda 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/profile/SysUserProfileUpdatePasswordReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/profile/SysUserProfileUpdatePasswordReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile; +package cn.iocoder.yudao.module.system.controller.user.vo.profile; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/profile/SysUserProfileUpdateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/profile/SysUserProfileUpdateReqVO.java similarity index 92% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/profile/SysUserProfileUpdateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/profile/SysUserProfileUpdateReqVO.java index e77bcd7f64..bcc7a20489 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/profile/SysUserProfileUpdateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/profile/SysUserProfileUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile; +package cn.iocoder.yudao.module.system.controller.user.vo.profile; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserBaseVO.java similarity index 96% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserBaseVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserBaseVO.java index 1f41be3dba..5fc0b42b92 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user; +package cn.iocoder.yudao.module.system.controller.user.vo.user; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserCreateReqVO.java similarity index 88% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserCreateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserCreateReqVO.java index 89f2e17987..9b6676c97a 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserCreateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user; +package cn.iocoder.yudao.module.system.controller.user.vo.user; import io.swagger.annotations.ApiModel; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserExcelVO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserExcelVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserExcelVO.java index a4c978c025..04c818ee51 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserExcelVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user; +package cn.iocoder.yudao.module.system.controller.user.vo.user; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserExportReqVO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserExportReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserExportReqVO.java index 24d8d00c34..e5f33deb3b 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user; +package cn.iocoder.yudao.module.system.controller.user.vo.user; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserImportExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserImportExcelVO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserImportExcelVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserImportExcelVO.java index f33acdd2f3..43e6c9d26e 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserImportExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserImportExcelVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user; +package cn.iocoder.yudao.module.system.controller.user.vo.user; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserImportRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserImportRespVO.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserImportRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserImportRespVO.java index bb4359eed6..533ec2af8d 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserImportRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserImportRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user; +package cn.iocoder.yudao.module.system.controller.user.vo.user; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserPageItemRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserPageItemRespVO.java similarity index 91% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserPageItemRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserPageItemRespVO.java index 58959a5331..6178d6b809 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserPageItemRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserPageItemRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user; +package cn.iocoder.yudao.module.system.controller.user.vo.user; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserPageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserPageReqVO.java similarity index 95% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserPageReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserPageReqVO.java index ca1e597f95..a677d208c2 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserPageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user; +package cn.iocoder.yudao.module.system.controller.user.vo.user; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserRespVO.java similarity index 92% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserRespVO.java index 79abf64e59..66d8f6981b 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user; +package cn.iocoder.yudao.module.system.controller.user.vo.user; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserSimpleRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserSimpleRespVO.java similarity index 87% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserSimpleRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserSimpleRespVO.java index cd2b65c88d..d9ba0eb055 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserSimpleRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserSimpleRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user; +package cn.iocoder.yudao.module.system.controller.user.vo.user; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserUpdatePasswordReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserUpdatePasswordReqVO.java similarity index 86% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserUpdatePasswordReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserUpdatePasswordReqVO.java index 9364c57aa7..71e458654d 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserUpdatePasswordReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserUpdatePasswordReqVO.java @@ -1,9 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user; +package cn.iocoder.yudao.module.system.controller.user.vo.user; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import lombok.EqualsAndHashCode; import org.hibernate.validator.constraints.Length; import javax.validation.constraints.NotEmpty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserUpdateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserUpdateReqVO.java similarity index 86% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserUpdateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserUpdateReqVO.java index 7fc8ffbb92..6513490d1f 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserUpdateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user; +package cn.iocoder.yudao.module.system.controller.user.vo.user; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserUpdateStatusReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserUpdateStatusReqVO.java similarity index 89% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserUpdateStatusReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserUpdateStatusReqVO.java index dd1baa4fa7..ac20eb7454 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserUpdateStatusReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserUpdateStatusReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user; +package cn.iocoder.yudao.module.system.controller.user.vo.user; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/auth/SysAuthConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/SysAuthConvert.java similarity index 87% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/auth/SysAuthConvert.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/SysAuthConvert.java index cb92db12c9..c1f6f265db 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/auth/SysAuthConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/SysAuthConvert.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.system.convert.auth; +package cn.iocoder.yudao.module.system.convert.auth; -import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth.SysAuthMenuRespVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth.SysAuthPermissionInfoRespVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysMenuDO; +import cn.iocoder.yudao.module.system.controller.auth.vo.auth.SysAuthMenuRespVO; +import cn.iocoder.yudao.module.system.controller.auth.vo.auth.SysAuthPermissionInfoRespVO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysMenuDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; -import cn.iocoder.yudao.adminserver.modules.system.enums.permission.MenuIdEnum; +import cn.iocoder.yudao.module.system.enums.permission.MenuIdEnum; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/auth/SysUserSessionConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/SysUserSessionConvert.java similarity index 67% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/auth/SysUserSessionConvert.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/SysUserSessionConvert.java index 0defeed97a..629f030074 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/auth/SysUserSessionConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/SysUserSessionConvert.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.system.convert.auth; +package cn.iocoder.yudao.module.system.convert.auth; -import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.session.SysUserSessionPageItemRespVO; +import cn.iocoder.yudao.module.system.controller.auth.vo.session.SysUserSessionPageItemRespVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/common/SysCaptchaConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/common/SysCaptchaConvert.java similarity index 68% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/common/SysCaptchaConvert.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/common/SysCaptchaConvert.java index 0931a54dee..8e5fc34a6b 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/common/SysCaptchaConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/common/SysCaptchaConvert.java @@ -1,8 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.system.convert.common; +package cn.iocoder.yudao.module.system.convert.common; import cn.hutool.captcha.AbstractCaptcha; -import cn.hutool.captcha.ICaptcha; -import cn.iocoder.yudao.adminserver.modules.system.controller.common.vo.SysCaptchaImageRespVO; +import cn.iocoder.yudao.module.system.controller.common.vo.SysCaptchaImageRespVO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/dept/SysDeptConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/SysDeptConvert.java similarity index 55% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/dept/SysDeptConvert.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/SysDeptConvert.java index 693baffe6d..40d667641d 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/dept/SysDeptConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/SysDeptConvert.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.system.convert.dept; +package cn.iocoder.yudao.module.system.convert.dept; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptRespVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptSimpleRespVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.dept.vo.dept.SysDeptCreateReqVO; +import cn.iocoder.yudao.module.system.controller.dept.vo.dept.SysDeptRespVO; +import cn.iocoder.yudao.module.system.controller.dept.vo.dept.SysDeptSimpleRespVO; +import cn.iocoder.yudao.module.system.controller.dept.vo.dept.SysDeptUpdateReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/dept/SysPostConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/SysPostConvert.java similarity index 82% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/dept/SysPostConvert.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/SysPostConvert.java index d466a0af97..023bcfae13 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/dept/SysPostConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/SysPostConvert.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.system.convert.dept; +package cn.iocoder.yudao.module.system.convert.dept; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.*; +import cn.iocoder.yudao.module.system.controller.dept.vo.post.*; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/dict/SysDictDataConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/SysDictDataConvert.java similarity index 87% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/dict/SysDictDataConvert.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/SysDictDataConvert.java index e916def4f3..fc38f41626 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/dict/SysDictDataConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/SysDictDataConvert.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.system.convert.dict; +package cn.iocoder.yudao.module.system.convert.dict; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.*; +import cn.iocoder.yudao.module.system.controller.dict.vo.data.*; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.dict.core.dto.DictDataRespDTO; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/dict/SysDictTypeConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/SysDictTypeConvert.java similarity index 74% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/dict/SysDictTypeConvert.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/SysDictTypeConvert.java index e20451c25b..ce4bae4066 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/dict/SysDictTypeConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/SysDictTypeConvert.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.system.convert.dict; +package cn.iocoder.yudao.module.system.convert.dict; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.type.*; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dict.SysDictTypeDO; +import cn.iocoder.yudao.module.system.controller.dict.vo.type.*; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictTypeDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/errorcode/SysErrorCodeConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/errorcode/SysErrorCodeConvert.java similarity index 53% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/errorcode/SysErrorCodeConvert.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/errorcode/SysErrorCodeConvert.java index a7b8eade2b..7a571dc45e 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/errorcode/SysErrorCodeConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/errorcode/SysErrorCodeConvert.java @@ -1,13 +1,13 @@ -package cn.iocoder.yudao.adminserver.modules.system.convert.errorcode; +package cn.iocoder.yudao.module.system.convert.errorcode; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.tool.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; -import cn.iocoder.yudao.adminserver.modules.tool.framework.errorcode.core.dto.ErrorCodeRespDTO; -import cn.iocoder.yudao.adminserver.modules.system.controller.errorcode.vo.SysErrorCodeCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.errorcode.vo.SysErrorCodeExcelVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.errorcode.vo.SysErrorCodeRespVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.errorcode.vo.SysErrorCodeUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.errorcode.SysErrorCodeDO; +import cn.iocoder.yudao.module.system.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; +import cn.iocoder.yudao.module.system.framework.errorcode.core.dto.ErrorCodeRespDTO; +import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodeCreateReqVO; +import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodeExcelVO; +import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodeRespVO; +import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodeUpdateReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.errorcode.SysErrorCodeDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/logger/SysLoginLogConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/SysLoginLogConvert.java similarity index 65% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/logger/SysLoginLogConvert.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/SysLoginLogConvert.java index d6226491c9..01b9adabba 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/logger/SysLoginLogConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/SysLoginLogConvert.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.system.convert.logger; +package cn.iocoder.yudao.module.system.convert.logger; -import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog.SysLoginLogExcelVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog.SysLoginLogRespVO; +import cn.iocoder.yudao.module.system.controller.logger.vo.loginlog.SysLoginLogExcelVO; +import cn.iocoder.yudao.module.system.controller.logger.vo.loginlog.SysLoginLogRespVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.mapstruct.Mapper; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/logger/SysOperateLogConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/SysOperateLogConvert.java similarity index 79% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/logger/SysOperateLogConvert.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/SysOperateLogConvert.java index 51e08f1dc5..901e321a0a 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/logger/SysOperateLogConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/SysOperateLogConvert.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.system.convert.logger; +package cn.iocoder.yudao.module.system.convert.logger; -import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog.SysOperateLogExcelVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog.SysOperateLogRespVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.logger.SysOperateLogDO; +import cn.iocoder.yudao.module.system.controller.logger.vo.operatelog.SysOperateLogExcelVO; +import cn.iocoder.yudao.module.system.controller.logger.vo.operatelog.SysOperateLogRespVO; +import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysOperateLogDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.MapUtils; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/notice/SysNoticeConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/notice/SysNoticeConvert.java similarity index 52% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/notice/SysNoticeConvert.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/notice/SysNoticeConvert.java index ccba20e77c..bf46d698b0 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/notice/SysNoticeConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/notice/SysNoticeConvert.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.system.convert.notice; +package cn.iocoder.yudao.module.system.convert.notice; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.system.controller.notice.vo.SysNoticeCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.notice.vo.SysNoticeRespVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.notice.vo.SysNoticeUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.notice.SysNoticeDO; +import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticeCreateReqVO; +import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticeRespVO; +import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticeUpdateReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.notice.SysNoticeDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/package-info.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/package-info.java similarity index 56% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/package-info.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/package-info.java index d4052eb095..b1ce8e379d 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/package-info.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/package-info.java @@ -3,4 +3,4 @@ * * ç›®å‰ä½¿ç”¨ MapStruct 框架 */ -package cn.iocoder.yudao.adminserver.modules.system.convert; +package cn.iocoder.yudao.module.system.convert; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/SysMenuConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/SysMenuConvert.java new file mode 100644 index 0000000000..109a53f568 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/SysMenuConvert.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.module.system.convert.permission; + +import cn.iocoder.yudao.module.system.controller.permission.vo.menu.SysMenuCreateReqVO; +import cn.iocoder.yudao.module.system.controller.permission.vo.menu.SysMenuRespVO; +import cn.iocoder.yudao.module.system.controller.permission.vo.menu.SysMenuSimpleRespVO; +import cn.iocoder.yudao.module.system.controller.permission.vo.menu.SysMenuUpdateReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysMenuDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +@Mapper +public interface SysMenuConvert { + + SysMenuConvert INSTANCE = Mappers.getMapper(SysMenuConvert.class); + + List convertList(List list); + + SysMenuDO convert(SysMenuCreateReqVO bean); + + SysMenuDO convert(SysMenuUpdateReqVO bean); + + SysMenuRespVO convert(SysMenuDO bean); + + List convertList02(List list); + +} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/permission/SysRoleConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/SysRoleConvert.java similarity index 78% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/permission/SysRoleConvert.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/SysRoleConvert.java index b1cd0dc007..bc048a774b 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/permission/SysRoleConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/SysRoleConvert.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.system.convert.permission; +package cn.iocoder.yudao.module.system.convert.permission; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role.*; +import cn.iocoder.yudao.module.system.controller.permission.vo.role.*; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/sms/SysSmsChannelConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SysSmsChannelConvert.java similarity index 67% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/sms/SysSmsChannelConvert.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SysSmsChannelConvert.java index cc3b27b640..af0652eea1 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/sms/SysSmsChannelConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SysSmsChannelConvert.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.system.convert.sms; +package cn.iocoder.yudao.module.system.convert.sms; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelRespVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelSimpleRespVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.channel.SysSmsChannelCreateReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.channel.SysSmsChannelRespVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.channel.SysSmsChannelSimpleRespVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.channel.SysSmsChannelUpdateReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.sms.core.property.SmsChannelProperties; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/sms/SysSmsLogConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SysSmsLogConvert.java similarity index 73% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/sms/SysSmsLogConvert.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SysSmsLogConvert.java index afcd9443d6..d91f7b3269 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/sms/SysSmsLogConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SysSmsLogConvert.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.system.convert.sms; +package cn.iocoder.yudao.module.system.convert.sms; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogExcelVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogRespVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.log.SysSmsLogExcelVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.log.SysSmsLogRespVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.mapstruct.Mapper; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/sms/SysSmsTemplateConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SysSmsTemplateConvert.java similarity index 62% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/sms/SysSmsTemplateConvert.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SysSmsTemplateConvert.java index 4d1e0dc40d..b3a423e32f 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/sms/SysSmsTemplateConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SysSmsTemplateConvert.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.system.convert.sms; +package cn.iocoder.yudao.module.system.convert.sms; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateExcelVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateRespVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplateCreateReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplateExcelVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplateRespVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplateUpdateReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.mapstruct.Mapper; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/tenant/SysTenantConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/tenant/SysTenantConvert.java similarity index 64% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/tenant/SysTenantConvert.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/tenant/SysTenantConvert.java index 3df63f30b5..6d9d1f77b4 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/tenant/SysTenantConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/tenant/SysTenantConvert.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.system.convert.tenant; +package cn.iocoder.yudao.module.system.convert.tenant; -import cn.iocoder.yudao.adminserver.modules.system.controller.tenant.vo.SysTenantCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.tenant.vo.SysTenantExcelVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.tenant.vo.SysTenantRespVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.tenant.vo.SysTenantUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantCreateReqVO; +import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantExcelVO; +import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantRespVO; +import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantUpdateReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.tenant.SysTenantDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.mapstruct.Mapper; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/user/SysUserConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/user/SysUserConvert.java similarity index 76% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/user/SysUserConvert.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/user/SysUserConvert.java index ff2938d36b..b1436155b9 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/user/SysUserConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/user/SysUserConvert.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.system.convert.user; +package cn.iocoder.yudao.module.system.convert.user; -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileRespVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.*; +import cn.iocoder.yudao.module.system.controller.user.vo.profile.SysUserProfileRespVO; +import cn.iocoder.yudao.module.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO; +import cn.iocoder.yudao.module.system.controller.user.vo.profile.SysUserProfileUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.user.vo.user.*; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/dict/SysDictTypeDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dict/SysDictTypeDO.java similarity index 92% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/dict/SysDictTypeDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dict/SysDictTypeDO.java index 548ee6fe9a..de7a67b859 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/dict/SysDictTypeDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dict/SysDictTypeDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dict; +package cn.iocoder.yudao.module.system.dal.dataobject.dict; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/errorcode/SysErrorCodeDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/errorcode/SysErrorCodeDO.java similarity index 84% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/errorcode/SysErrorCodeDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/errorcode/SysErrorCodeDO.java index d2fdb182e7..b8cae75dfe 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/errorcode/SysErrorCodeDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/errorcode/SysErrorCodeDO.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.errorcode; +package cn.iocoder.yudao.module.system.dal.dataobject.errorcode; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.adminserver.modules.system.enums.errorcode.SysErrorCodeTypeEnum; +import cn.iocoder.yudao.module.system.enums.errorcode.SysErrorCodeTypeEnum; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/logger/SysOperateLogDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/SysOperateLogDO.java similarity index 97% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/logger/SysOperateLogDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/SysOperateLogDO.java index 417c6f45fa..ca9483e02d 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/logger/SysOperateLogDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/SysOperateLogDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.logger; +package cn.iocoder.yudao.module.system.dal.dataobject.logger; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/notice/SysNoticeDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/notice/SysNoticeDO.java similarity index 84% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/notice/SysNoticeDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/notice/SysNoticeDO.java index c61398fe63..571b011575 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/notice/SysNoticeDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/notice/SysNoticeDO.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.notice; +package cn.iocoder.yudao.module.system.dal.dataobject.notice; -import cn.iocoder.yudao.adminserver.modules.system.enums.notice.SysNoticeTypeEnum; +import cn.iocoder.yudao.module.system.enums.notice.SysNoticeTypeEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; import com.baomidou.mybatisplus.annotation.TableField; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/permission/SysMenuDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/SysMenuDO.java similarity index 91% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/permission/SysMenuDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/SysMenuDO.java index 043f2e93db..39c0b82ba5 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/permission/SysMenuDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/SysMenuDO.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission; +package cn.iocoder.yudao.module.system.dal.dataobject.permission; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.adminserver.modules.system.enums.permission.MenuTypeEnum; +import cn.iocoder.yudao.module.system.enums.permission.MenuTypeEnum; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/permission/SysRoleMenuDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/SysRoleMenuDO.java similarity index 88% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/permission/SysRoleMenuDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/SysRoleMenuDO.java index 5cb6c1a170..bfe0c3f868 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/permission/SysRoleMenuDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/SysRoleMenuDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission; +package cn.iocoder.yudao.module.system.dal.dataobject.permission; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import com.baomidou.mybatisplus.annotation.TableId; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/auth/SysUserSessionMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/auth/SysUserSessionMapper.java similarity index 84% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/auth/SysUserSessionMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/auth/SysUserSessionMapper.java index f5ae670b06..34e3ffc387 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/auth/SysUserSessionMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/auth/SysUserSessionMapper.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.auth; +package cn.iocoder.yudao.module.system.dal.mysql.auth; -import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.session.SysUserSessionPageReqVO; +import cn.iocoder.yudao.module.system.controller.auth.vo.session.SysUserSessionPageReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/dept/SysDeptMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysDeptMapper.java similarity index 87% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/dept/SysDeptMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysDeptMapper.java index be3bedeafb..995ee1e5cf 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/dept/SysDeptMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysDeptMapper.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.dept; +package cn.iocoder.yudao.module.system.dal.mysql.dept; -import cn.iocoder.yudao.adminserver.modules.tool.enums.SqlConstants; +import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptListReqVO; +import cn.iocoder.yudao.module.system.controller.dept.vo.dept.SysDeptListReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/dept/SysPostMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysPostMapper.java similarity index 86% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/dept/SysPostMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysPostMapper.java index 85d9915b23..bf154992a1 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/dept/SysPostMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysPostMapper.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.dept; +package cn.iocoder.yudao.module.system.dal.mysql.dept; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.SysPostExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.SysPostPageReqVO; +import cn.iocoder.yudao.module.system.controller.dept.vo.post.SysPostExportReqVO; +import cn.iocoder.yudao.module.system.controller.dept.vo.post.SysPostPageReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/dict/SysDictDataMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/SysDictDataMapper.java similarity index 87% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/dict/SysDictDataMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/SysDictDataMapper.java index 5cf5a732fb..9fc681a024 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/dict/SysDictDataMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/SysDictDataMapper.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.dict; +package cn.iocoder.yudao.module.system.dal.mysql.dict; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataPageReqVO; -import cn.iocoder.yudao.adminserver.modules.tool.enums.SqlConstants; +import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants; +import cn.iocoder.yudao.module.system.controller.dict.vo.data.SysDictDataExportReqVO; +import cn.iocoder.yudao.module.system.controller.dict.vo.data.SysDictDataPageReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/dict/SysDictTypeMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/SysDictTypeMapper.java similarity index 80% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/dict/SysDictTypeMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/SysDictTypeMapper.java index 90b125690f..ae213915f4 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/dict/SysDictTypeMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/SysDictTypeMapper.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.dict; +package cn.iocoder.yudao.module.system.dal.mysql.dict; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.type.SysDictTypeExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.type.SysDictTypePageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dict.SysDictTypeDO; +import cn.iocoder.yudao.module.system.controller.dict.vo.type.SysDictTypeExportReqVO; +import cn.iocoder.yudao.module.system.controller.dict.vo.type.SysDictTypePageReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictTypeDO; import org.apache.ibatis.annotations.Mapper; import java.util.List; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/errorcode/SysErrorCodeMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/errorcode/SysErrorCodeMapper.java similarity index 85% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/errorcode/SysErrorCodeMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/errorcode/SysErrorCodeMapper.java index 7760f80586..b7cac6ca95 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/errorcode/SysErrorCodeMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/errorcode/SysErrorCodeMapper.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.errorcode; +package cn.iocoder.yudao.module.system.dal.mysql.errorcode; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.yudao.adminserver.modules.system.controller.errorcode.vo.SysErrorCodeExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.errorcode.vo.SysErrorCodePageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.errorcode.SysErrorCodeDO; +import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodeExportReqVO; +import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodePageReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.errorcode.SysErrorCodeDO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/logger/SysLoginLogMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/SysLoginLogMapper.java similarity index 83% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/logger/SysLoginLogMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/SysLoginLogMapper.java index eea1812e83..b211210890 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/logger/SysLoginLogMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/SysLoginLogMapper.java @@ -1,12 +1,12 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.logger; +package cn.iocoder.yudao.module.system.dal.mysql.logger; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog.SysLoginLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog.SysLoginLogPageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginResultEnum; +import cn.iocoder.yudao.module.system.controller.logger.vo.loginlog.SysLoginLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.logger.vo.loginlog.SysLoginLogPageReqVO; +import cn.iocoder.yudao.module.system.enums.logger.SysLoginResultEnum; import org.apache.ibatis.annotations.Mapper; import java.util.List; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/logger/SysOperateLogMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/SysOperateLogMapper.java similarity index 84% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/logger/SysOperateLogMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/SysOperateLogMapper.java index c588867cd0..14d866a0b3 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/logger/SysOperateLogMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/SysOperateLogMapper.java @@ -1,12 +1,12 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.logger; +package cn.iocoder.yudao.module.system.dal.mysql.logger; import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog.SysOperateLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog.SysOperateLogPageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.logger.SysOperateLogDO; +import cn.iocoder.yudao.module.system.controller.logger.vo.operatelog.SysOperateLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.logger.vo.operatelog.SysOperateLogPageReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysOperateLogDO; import org.apache.ibatis.annotations.Mapper; import java.util.Collection; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/notice/SysNoticeMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/notice/SysNoticeMapper.java similarity index 70% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/notice/SysNoticeMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/notice/SysNoticeMapper.java index 52a484a1e3..74aee3f5d3 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/notice/SysNoticeMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/notice/SysNoticeMapper.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.notice; +package cn.iocoder.yudao.module.system.dal.mysql.notice; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.yudao.adminserver.modules.system.controller.notice.vo.SysNoticePageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.notice.SysNoticeDO; +import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticePageReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.notice.SysNoticeDO; import org.apache.ibatis.annotations.Mapper; @Mapper diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/permission/SysMenuMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysMenuMapper.java similarity index 79% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/permission/SysMenuMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysMenuMapper.java index ea55e2165d..605937fa46 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/permission/SysMenuMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysMenuMapper.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.permission; +package cn.iocoder.yudao.module.system.dal.mysql.permission; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.menu.SysMenuListReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysMenuDO; -import cn.iocoder.yudao.adminserver.modules.tool.enums.SqlConstants; +import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants; +import cn.iocoder.yudao.module.system.controller.permission.vo.menu.SysMenuListReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysMenuDO; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/permission/SysRoleMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleMapper.java similarity index 88% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/permission/SysRoleMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleMapper.java index 670d5047c5..16641f8c38 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/permission/SysRoleMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleMapper.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.permission; +package cn.iocoder.yudao.module.system.dal.mysql.permission; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role.SysRoleExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role.SysRolePageReqVO; +import cn.iocoder.yudao.module.system.controller.permission.vo.role.SysRoleExportReqVO; +import cn.iocoder.yudao.module.system.controller.permission.vo.role.SysRolePageReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/permission/SysRoleMenuMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleMenuMapper.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/permission/SysRoleMenuMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleMenuMapper.java index 698ca73194..ac806927d2 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/permission/SysRoleMenuMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleMenuMapper.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.permission; +package cn.iocoder.yudao.module.system.dal.mysql.permission; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleMenuDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleMenuDO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/permission/SysUserRoleMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysUserRoleMapper.java similarity index 95% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/permission/SysUserRoleMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysUserRoleMapper.java index 4704bb5710..71b25f2d17 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/permission/SysUserRoleMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysUserRoleMapper.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.permission; +package cn.iocoder.yudao.module.system.dal.mysql.permission; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysUserRoleDO; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/sms/SysSmsChannelMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsChannelMapper.java similarity index 86% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/sms/SysSmsChannelMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsChannelMapper.java index bd69d4f736..5f6b0bb3e9 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/sms/SysSmsChannelMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsChannelMapper.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.sms; +package cn.iocoder.yudao.module.system.dal.mysql.sms; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelPageReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.channel.SysSmsChannelPageReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/sms/SysSmsLogMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsLogMapper.java similarity index 87% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/sms/SysSmsLogMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsLogMapper.java index 0269e75e6f..e0a1039aa6 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/sms/SysSmsLogMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsLogMapper.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.sms; +package cn.iocoder.yudao.module.system.dal.mysql.sms; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogPageReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.log.SysSmsLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.log.SysSmsLogPageReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/sms/SysSmsTemplateMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsTemplateMapper.java similarity index 89% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/sms/SysSmsTemplateMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsTemplateMapper.java index 60d99a0a3f..f1deda053b 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/sms/SysSmsTemplateMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsTemplateMapper.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.sms; +package cn.iocoder.yudao.module.system.dal.mysql.sms; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplatePageReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplateExportReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplatePageReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/tenant/SysTenantMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tenant/SysTenantMapper.java similarity index 87% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/tenant/SysTenantMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tenant/SysTenantMapper.java index 999d5c59b5..dc7d27d21a 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/tenant/SysTenantMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tenant/SysTenantMapper.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.tenant; +package cn.iocoder.yudao.module.system.dal.mysql.tenant; -import cn.iocoder.yudao.adminserver.modules.system.controller.tenant.vo.SysTenantExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.tenant.vo.SysTenantPageReqVO; +import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantExportReqVO; +import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantPageReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.tenant.SysTenantDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/user/SysUserMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/SysUserMapper.java similarity index 93% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/user/SysUserMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/SysUserMapper.java index 8739301afe..f954cd3cf6 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/user/SysUserMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/SysUserMapper.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.user; +package cn.iocoder.yudao.module.system.dal.mysql.user; -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.SysUserExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.SysUserPageReqVO; +import cn.iocoder.yudao.module.system.controller.user.vo.user.SysUserExportReqVO; +import cn.iocoder.yudao.module.system.controller.user.vo.user.SysUserPageReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/redis/SysRedisKeyConstants.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/SysRedisKeyConstants.java similarity index 71% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/redis/SysRedisKeyConstants.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/SysRedisKeyConstants.java index e9d3373b25..33fa08e7e4 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/redis/SysRedisKeyConstants.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/SysRedisKeyConstants.java @@ -1,10 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.redis; +package cn.iocoder.yudao.module.system.dal.redis; import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine; -import cn.iocoder.yudao.framework.security.core.LoginUser; -import me.zhyd.oauth.model.AuthUser; - -import java.time.Duration; import static cn.iocoder.yudao.framework.redis.core.RedisKeyDefine.KeyTypeEnum.STRING; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/redis/common/SysCaptchaRedisDAO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/common/SysCaptchaRedisDAO.java similarity index 84% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/redis/common/SysCaptchaRedisDAO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/common/SysCaptchaRedisDAO.java index 701501c908..9a26095616 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/redis/common/SysCaptchaRedisDAO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/common/SysCaptchaRedisDAO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.dal.redis.common; +package cn.iocoder.yudao.module.system.dal.redis.common; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Repository; @@ -6,7 +6,7 @@ import org.springframework.stereotype.Repository; import javax.annotation.Resource; import java.time.Duration; -import static cn.iocoder.yudao.adminserver.modules.system.dal.redis.SysRedisKeyConstants.CAPTCHA_CODE; +import static cn.iocoder.yudao.module.system.dal.redis.SysRedisKeyConstants.CAPTCHA_CODE; /** * 验è¯ç çš„ Redis DAO diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/SysErrorCodeConstants.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/SysErrorCodeConstants.java similarity index 99% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/SysErrorCodeConstants.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/SysErrorCodeConstants.java index 867f8e3594..566f835d58 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/SysErrorCodeConstants.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/SysErrorCodeConstants.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.enums; +package cn.iocoder.yudao.module.system.enums; import cn.iocoder.yudao.framework.common.exception.ErrorCode; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/dept/DeptIdEnum.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/dept/DeptIdEnum.java similarity index 77% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/dept/DeptIdEnum.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/dept/DeptIdEnum.java index d228a9bbd5..2a7effec27 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/dept/DeptIdEnum.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/dept/DeptIdEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.enums.dept; +package cn.iocoder.yudao.module.system.enums.dept; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/errorcode/SysErrorCodeTypeEnum.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/errorcode/SysErrorCodeTypeEnum.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/errorcode/SysErrorCodeTypeEnum.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/errorcode/SysErrorCodeTypeEnum.java index 8c0b4c7e02..beb2e2b3ef 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/errorcode/SysErrorCodeTypeEnum.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/errorcode/SysErrorCodeTypeEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.enums.errorcode; +package cn.iocoder.yudao.module.system.enums.errorcode; import cn.iocoder.yudao.framework.common.core.IntArrayValuable; import lombok.AllArgsConstructor; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/logger/SysLoginLogTypeEnum.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/SysLoginLogTypeEnum.java similarity index 89% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/logger/SysLoginLogTypeEnum.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/SysLoginLogTypeEnum.java index 40f18e8674..ff29ab558f 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/logger/SysLoginLogTypeEnum.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/SysLoginLogTypeEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.enums.logger; +package cn.iocoder.yudao.module.system.enums.logger; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/logger/SysLoginResultEnum.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/SysLoginResultEnum.java similarity index 88% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/logger/SysLoginResultEnum.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/SysLoginResultEnum.java index 218b2d97f6..f1c8356ff4 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/logger/SysLoginResultEnum.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/SysLoginResultEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.enums.logger; +package cn.iocoder.yudao.module.system.enums.logger; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/notice/SysNoticeTypeEnum.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/notice/SysNoticeTypeEnum.java similarity index 80% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/notice/SysNoticeTypeEnum.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/notice/SysNoticeTypeEnum.java index 0c8bff35a9..c543f1cb5d 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/notice/SysNoticeTypeEnum.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/notice/SysNoticeTypeEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.enums.notice; +package cn.iocoder.yudao.module.system.enums.notice; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/permission/MenuIdEnum.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/permission/MenuIdEnum.java similarity index 75% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/permission/MenuIdEnum.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/permission/MenuIdEnum.java index a82ab25139..fc2b72ac42 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/permission/MenuIdEnum.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/permission/MenuIdEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.enums.permission; +package cn.iocoder.yudao.module.system.enums.permission; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/permission/MenuTypeEnum.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/permission/MenuTypeEnum.java similarity index 81% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/permission/MenuTypeEnum.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/permission/MenuTypeEnum.java index 213f7992fd..575a33c447 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/permission/MenuTypeEnum.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/permission/MenuTypeEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.enums.permission; +package cn.iocoder.yudao.module.system.enums.permission; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/permission/RoleCodeEnum.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/permission/RoleCodeEnum.java similarity index 78% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/permission/RoleCodeEnum.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/permission/RoleCodeEnum.java index ddfdd05340..44487a4d63 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/permission/RoleCodeEnum.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/permission/RoleCodeEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.enums.permission; +package cn.iocoder.yudao.module.system.enums.permission; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/permission/SysRoleTypeEnum.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/permission/SysRoleTypeEnum.java similarity index 78% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/permission/SysRoleTypeEnum.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/permission/SysRoleTypeEnum.java index 61b15b0be2..426c5cdb5f 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/permission/SysRoleTypeEnum.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/permission/SysRoleTypeEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.enums.permission; +package cn.iocoder.yudao.module.system.enums.permission; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/captcha/config/CaptchaConfig.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/captcha/config/CaptchaConfig.java similarity index 76% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/captcha/config/CaptchaConfig.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/captcha/config/CaptchaConfig.java index 174efe4acb..4028f6cefb 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/captcha/config/CaptchaConfig.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/captcha/config/CaptchaConfig.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.framework.captcha.config; +package cn.iocoder.yudao.module.system.framework.captcha.config; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Configuration; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/captcha/config/CaptchaProperties.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/captcha/config/CaptchaProperties.java similarity index 92% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/captcha/config/CaptchaProperties.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/captcha/config/CaptchaProperties.java index 73939df754..0d7cd0d208 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/captcha/config/CaptchaProperties.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/captcha/config/CaptchaProperties.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.framework.captcha.config; +package cn.iocoder.yudao.module.system.framework.captcha.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/captcha/package-info.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/captcha/package-info.java new file mode 100644 index 0000000000..ee406c0794 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/captcha/package-info.java @@ -0,0 +1,4 @@ +/** + * 基于 Hutool captcha 库,实现验è¯ç åŠŸèƒ½ + */ +package cn.iocoder.yudao.module.system.framework.captcha; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/datapermission/config/SysDataPermissionConfiguration.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/config/SysDataPermissionConfiguration.java similarity index 89% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/datapermission/config/SysDataPermissionConfiguration.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/config/SysDataPermissionConfiguration.java index 984d854403..0b0402956f 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/datapermission/config/SysDataPermissionConfiguration.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/config/SysDataPermissionConfiguration.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.framework.datapermission.config; +package cn.iocoder.yudao.module.system.framework.datapermission.config; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/package-info.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/package-info.java new file mode 100644 index 0000000000..a666845510 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/package-info.java @@ -0,0 +1,4 @@ +/** + * system 模å—çš„æ•°æ®æƒé™é…ç½® + */ +package cn.iocoder.yudao.module.system.framework.datapermission; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/config/ErrorCodeConfiguration.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/config/ErrorCodeConfiguration.java similarity index 69% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/config/ErrorCodeConfiguration.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/config/ErrorCodeConfiguration.java index 9a2789ec3d..e86d40b4e6 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/config/ErrorCodeConfiguration.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/config/ErrorCodeConfiguration.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.tool.framework.errorcode.config; +package cn.iocoder.yudao.module.system.framework.errorcode.config; -import cn.iocoder.yudao.adminserver.modules.tool.framework.errorcode.core.generator.ErrorCodeAutoGenerator; -import cn.iocoder.yudao.adminserver.modules.tool.framework.errorcode.core.loader.ErrorCodeLoader; -import cn.iocoder.yudao.adminserver.modules.tool.framework.errorcode.core.service.ErrorCodeFrameworkService; -import cn.iocoder.yudao.adminserver.modules.tool.framework.errorcode.core.loader.ErrorCodeLoaderImpl; -import cn.iocoder.yudao.adminserver.modules.tool.framework.errorcode.core.generator.ErrorCodeAutoGeneratorImpl; +import cn.iocoder.yudao.module.system.framework.errorcode.core.generator.ErrorCodeAutoGenerator; +import cn.iocoder.yudao.module.system.framework.errorcode.core.loader.ErrorCodeLoader; +import cn.iocoder.yudao.module.system.framework.errorcode.core.service.ErrorCodeFrameworkService; +import cn.iocoder.yudao.module.system.framework.errorcode.core.loader.ErrorCodeLoaderImpl; +import cn.iocoder.yudao.module.system.framework.errorcode.core.generator.ErrorCodeAutoGeneratorImpl; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/config/ErrorCodeProperties.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/config/ErrorCodeProperties.java similarity index 87% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/config/ErrorCodeProperties.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/config/ErrorCodeProperties.java index f652a6a899..686f03e2c8 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/config/ErrorCodeProperties.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/config/ErrorCodeProperties.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.tool.framework.errorcode.config; +package cn.iocoder.yudao.module.system.framework.errorcode.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/core/dto/ErrorCodeAutoGenerateReqDTO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/core/dto/ErrorCodeAutoGenerateReqDTO.java similarity index 89% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/core/dto/ErrorCodeAutoGenerateReqDTO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/core/dto/ErrorCodeAutoGenerateReqDTO.java index 098f0438cf..6f54258697 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/core/dto/ErrorCodeAutoGenerateReqDTO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/core/dto/ErrorCodeAutoGenerateReqDTO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.tool.framework.errorcode.core.dto; +package cn.iocoder.yudao.module.system.framework.errorcode.core.dto; import lombok.Data; import lombok.experimental.Accessors; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/core/dto/ErrorCodeRespDTO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/core/dto/ErrorCodeRespDTO.java similarity index 81% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/core/dto/ErrorCodeRespDTO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/core/dto/ErrorCodeRespDTO.java index 7e2bb2a397..c0b0cbaa3d 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/core/dto/ErrorCodeRespDTO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/core/dto/ErrorCodeRespDTO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.tool.framework.errorcode.core.dto; +package cn.iocoder.yudao.module.system.framework.errorcode.core.dto; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/core/generator/ErrorCodeAutoGenerator.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/core/generator/ErrorCodeAutoGenerator.java similarity index 68% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/core/generator/ErrorCodeAutoGenerator.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/core/generator/ErrorCodeAutoGenerator.java index 60689af962..6fb2abc020 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/core/generator/ErrorCodeAutoGenerator.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/core/generator/ErrorCodeAutoGenerator.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.tool.framework.errorcode.core.generator; +package cn.iocoder.yudao.module.system.framework.errorcode.core.generator; /** * 错误ç çš„自动生æˆå™¨ diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/core/generator/ErrorCodeAutoGeneratorImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/core/generator/ErrorCodeAutoGeneratorImpl.java similarity index 91% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/core/generator/ErrorCodeAutoGeneratorImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/core/generator/ErrorCodeAutoGeneratorImpl.java index bedbcdc199..0551e4732b 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/core/generator/ErrorCodeAutoGeneratorImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/core/generator/ErrorCodeAutoGeneratorImpl.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.adminserver.modules.tool.framework.errorcode.core.generator; +package cn.iocoder.yudao.module.system.framework.errorcode.core.generator; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ClassUtil; import cn.hutool.core.util.ReflectUtil; import cn.iocoder.yudao.framework.common.exception.ErrorCode; -import cn.iocoder.yudao.adminserver.modules.tool.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; -import cn.iocoder.yudao.adminserver.modules.tool.framework.errorcode.core.service.ErrorCodeFrameworkService; +import cn.iocoder.yudao.module.system.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; +import cn.iocoder.yudao.module.system.framework.errorcode.core.service.ErrorCodeFrameworkService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.context.event.ApplicationReadyEvent; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/core/loader/ErrorCodeLoader.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/core/loader/ErrorCodeLoader.java similarity index 85% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/core/loader/ErrorCodeLoader.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/core/loader/ErrorCodeLoader.java index d35767fd31..6712c33e9b 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/core/loader/ErrorCodeLoader.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/core/loader/ErrorCodeLoader.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.tool.framework.errorcode.core.loader; +package cn.iocoder.yudao.module.system.framework.errorcode.core.loader; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/core/loader/ErrorCodeLoaderImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/core/loader/ErrorCodeLoaderImpl.java similarity index 88% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/core/loader/ErrorCodeLoaderImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/core/loader/ErrorCodeLoaderImpl.java index 234d30dcc6..1641f520fa 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/core/loader/ErrorCodeLoaderImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/core/loader/ErrorCodeLoaderImpl.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.tool.framework.errorcode.core.loader; +package cn.iocoder.yudao.module.system.framework.errorcode.core.loader; import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.adminserver.modules.tool.framework.errorcode.core.dto.ErrorCodeRespDTO; -import cn.iocoder.yudao.adminserver.modules.tool.framework.errorcode.core.service.ErrorCodeFrameworkService; +import cn.iocoder.yudao.module.system.framework.errorcode.core.dto.ErrorCodeRespDTO; +import cn.iocoder.yudao.module.system.framework.errorcode.core.service.ErrorCodeFrameworkService; import cn.iocoder.yudao.framework.common.util.date.DateUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/core/service/ErrorCodeFrameworkService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/core/service/ErrorCodeFrameworkService.java similarity index 71% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/core/service/ErrorCodeFrameworkService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/core/service/ErrorCodeFrameworkService.java index e3f5e91cc3..2d93f75f1f 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/core/service/ErrorCodeFrameworkService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/core/service/ErrorCodeFrameworkService.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.tool.framework.errorcode.core.service; +package cn.iocoder.yudao.module.system.framework.errorcode.core.service; -import cn.iocoder.yudao.adminserver.modules.tool.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; -import cn.iocoder.yudao.adminserver.modules.tool.framework.errorcode.core.dto.ErrorCodeRespDTO; +import cn.iocoder.yudao.module.system.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; +import cn.iocoder.yudao.module.system.framework.errorcode.core.dto.ErrorCodeRespDTO; import javax.validation.Valid; import java.util.Date; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/package-info.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/package-info.java similarity index 59% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/package-info.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/package-info.java index 343ccaeb3e..012bcb33ce 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/errorcode/package-info.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/package-info.java @@ -3,4 +3,4 @@ * * 将错误ç ç¼“å­˜åœ¨å†…å­˜ä¸­ï¼ŒåŒæ—¶é€šè¿‡å®šæ—¶å™¨æ¯ n 分钟更新 */ -package cn.iocoder.yudao.adminserver.modules.tool.framework.errorcode; +package cn.iocoder.yudao.module.system.framework.errorcode; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/package-info.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/package-info.java similarity index 55% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/package-info.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/package-info.java index b745ae838a..4b8440611a 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/package-info.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/package-info.java @@ -3,4 +3,4 @@ * * @author èŠ‹é“æºç  */ -package cn.iocoder.yudao.adminserver.modules.system.framework; +package cn.iocoder.yudao.module.system.framework; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/job/auth/SysUserSessionTimeoutJob.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/job/auth/SysUserSessionTimeoutJob.java similarity index 83% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/job/auth/SysUserSessionTimeoutJob.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/job/auth/SysUserSessionTimeoutJob.java index 57588fa801..c8c719f188 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/job/auth/SysUserSessionTimeoutJob.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/job/auth/SysUserSessionTimeoutJob.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.system.job.auth; +package cn.iocoder.yudao.module.system.job.auth; import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler; -import cn.iocoder.yudao.adminserver.modules.system.service.auth.SysUserSessionService; +import cn.iocoder.yudao.module.system.service.auth.SysUserSessionService; import cn.iocoder.yudao.framework.tenant.core.job.TenantJob; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/job/package-info.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/job/package-info.java new file mode 100644 index 0000000000..a7f5954178 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/job/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.system.job; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/dept/SysDeptRefreshConsumer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/dept/SysDeptRefreshConsumer.java similarity index 72% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/dept/SysDeptRefreshConsumer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/dept/SysDeptRefreshConsumer.java index 81bed50839..dd9bd64200 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/dept/SysDeptRefreshConsumer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/dept/SysDeptRefreshConsumer.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.system.mq.consumer.dept; +package cn.iocoder.yudao.module.system.mq.consumer.dept; import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener; -import cn.iocoder.yudao.adminserver.modules.system.mq.message.dept.SysDeptRefreshMessage; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; +import cn.iocoder.yudao.module.system.mq.message.dept.SysDeptRefreshMessage; +import cn.iocoder.yudao.module.system.service.dept.SysDeptService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/dict/SysDictDataRefreshConsumer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/dict/SysDictDataRefreshConsumer.java similarity index 75% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/dict/SysDictDataRefreshConsumer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/dict/SysDictDataRefreshConsumer.java index 33f00e077e..ad14b7bfd8 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/dict/SysDictDataRefreshConsumer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/dict/SysDictDataRefreshConsumer.java @@ -1,9 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.system.mq.consumer.dict; +package cn.iocoder.yudao.module.system.mq.consumer.dict; import cn.iocoder.yudao.coreservice.modules.system.service.dict.SysDictDataCoreService; import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener; -import cn.iocoder.yudao.adminserver.modules.system.mq.message.dict.SysDictDataRefreshMessage; -import cn.iocoder.yudao.adminserver.modules.system.service.dict.SysDictDataService; +import cn.iocoder.yudao.module.system.mq.message.dict.SysDictDataRefreshMessage; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/mail/SysMailSendConsumer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/mail/SysMailSendConsumer.java similarity index 72% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/mail/SysMailSendConsumer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/mail/SysMailSendConsumer.java index ff3b017a98..10b12ce0df 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/mail/SysMailSendConsumer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/mail/SysMailSendConsumer.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.system.mq.consumer.mail; +package cn.iocoder.yudao.module.system.mq.consumer.mail; import cn.iocoder.yudao.framework.mq.core.stream.AbstractStreamMessageListener; -import cn.iocoder.yudao.adminserver.modules.system.mq.message.mail.SysMailSendMessage; +import cn.iocoder.yudao.module.system.mq.message.mail.SysMailSendMessage; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/permission/SysMenuRefreshConsumer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/SysMenuRefreshConsumer.java similarity index 71% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/permission/SysMenuRefreshConsumer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/SysMenuRefreshConsumer.java index 9048e3ccb2..4630fef841 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/permission/SysMenuRefreshConsumer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/SysMenuRefreshConsumer.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.system.mq.consumer.permission; +package cn.iocoder.yudao.module.system.mq.consumer.permission; import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener; -import cn.iocoder.yudao.adminserver.modules.system.mq.message.permission.SysMenuRefreshMessage; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysMenuService; +import cn.iocoder.yudao.module.system.mq.message.permission.SysMenuRefreshMessage; +import cn.iocoder.yudao.module.system.service.permission.SysMenuService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/permission/SysRoleMenuRefreshConsumer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/SysRoleMenuRefreshConsumer.java similarity index 72% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/permission/SysRoleMenuRefreshConsumer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/SysRoleMenuRefreshConsumer.java index 5cdaeef00e..961ee83ee0 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/permission/SysRoleMenuRefreshConsumer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/SysRoleMenuRefreshConsumer.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.system.mq.consumer.permission; +package cn.iocoder.yudao.module.system.mq.consumer.permission; import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener; -import cn.iocoder.yudao.adminserver.modules.system.mq.message.permission.SysRoleMenuRefreshMessage; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService; +import cn.iocoder.yudao.module.system.mq.message.permission.SysRoleMenuRefreshMessage; +import cn.iocoder.yudao.module.system.service.permission.SysPermissionService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/permission/SysRoleRefreshConsumer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/SysRoleRefreshConsumer.java similarity index 71% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/permission/SysRoleRefreshConsumer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/SysRoleRefreshConsumer.java index a2f4cc5284..2ed56fe1d8 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/permission/SysRoleRefreshConsumer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/SysRoleRefreshConsumer.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.system.mq.consumer.permission; +package cn.iocoder.yudao.module.system.mq.consumer.permission; import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener; -import cn.iocoder.yudao.adminserver.modules.system.mq.message.permission.SysRoleRefreshMessage; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysRoleService; +import cn.iocoder.yudao.module.system.mq.message.permission.SysRoleRefreshMessage; +import cn.iocoder.yudao.module.system.service.permission.SysRoleService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/sms/SysSmsChannelRefreshConsumer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SysSmsChannelRefreshConsumer.java similarity index 73% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/sms/SysSmsChannelRefreshConsumer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SysSmsChannelRefreshConsumer.java index 540ff17e7a..11cbed107e 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/sms/SysSmsChannelRefreshConsumer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SysSmsChannelRefreshConsumer.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.system.mq.consumer.sms; +package cn.iocoder.yudao.module.system.mq.consumer.sms; import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener; -import cn.iocoder.yudao.adminserver.modules.system.mq.message.sms.SysSmsChannelRefreshMessage; -import cn.iocoder.yudao.adminserver.modules.system.service.sms.SysSmsChannelService; +import cn.iocoder.yudao.module.system.mq.message.sms.SysSmsChannelRefreshMessage; +import cn.iocoder.yudao.module.system.service.sms.SysSmsChannelService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/sms/SysSmsSendConsumer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SysSmsSendConsumer.java similarity index 92% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/sms/SysSmsSendConsumer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SysSmsSendConsumer.java index b8ad6ad309..feeeeefea4 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/sms/SysSmsSendConsumer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SysSmsSendConsumer.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.mq.consumer.sms; +package cn.iocoder.yudao.module.system.mq.consumer.sms; import cn.iocoder.yudao.coreservice.modules.system.mq.message.sms.SysSmsSendMessage; import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsCoreService; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/sms/SysSmsTemplateRefreshConsumer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SysSmsTemplateRefreshConsumer.java similarity index 82% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/sms/SysSmsTemplateRefreshConsumer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SysSmsTemplateRefreshConsumer.java index 305672bc7e..36e2b4db44 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/sms/SysSmsTemplateRefreshConsumer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SysSmsTemplateRefreshConsumer.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.system.mq.consumer.sms; +package cn.iocoder.yudao.module.system.mq.consumer.sms; -import cn.iocoder.yudao.adminserver.modules.system.mq.message.sms.SysSmsTemplateRefreshMessage; +import cn.iocoder.yudao.module.system.mq.message.sms.SysSmsTemplateRefreshMessage; import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsTemplateCoreService; import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener; import lombok.extern.slf4j.Slf4j; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/dept/SysDeptRefreshMessage.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/dept/SysDeptRefreshMessage.java similarity index 85% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/dept/SysDeptRefreshMessage.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/dept/SysDeptRefreshMessage.java index 96362a8fe3..4403a28dc5 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/dept/SysDeptRefreshMessage.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/dept/SysDeptRefreshMessage.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.mq.message.dept; +package cn.iocoder.yudao.module.system.mq.message.dept; import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessage; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/dict/SysDictDataRefreshMessage.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/dict/SysDictDataRefreshMessage.java similarity index 84% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/dict/SysDictDataRefreshMessage.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/dict/SysDictDataRefreshMessage.java index 4415d60bca..7d919dd1fe 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/dict/SysDictDataRefreshMessage.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/dict/SysDictDataRefreshMessage.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.mq.message.dict; +package cn.iocoder.yudao.module.system.mq.message.dict; import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessage; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/mail/SysMailSendMessage.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/mail/SysMailSendMessage.java similarity index 93% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/mail/SysMailSendMessage.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/mail/SysMailSendMessage.java index a0e258796f..e511b32ad9 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/mail/SysMailSendMessage.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/mail/SysMailSendMessage.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.mq.message.mail; +package cn.iocoder.yudao.module.system.mq.message.mail; import cn.iocoder.yudao.framework.mq.core.stream.AbstractStreamMessage; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/permission/SysMenuRefreshMessage.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/SysMenuRefreshMessage.java similarity index 84% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/permission/SysMenuRefreshMessage.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/SysMenuRefreshMessage.java index 3f0ef3da97..d829f706a1 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/permission/SysMenuRefreshMessage.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/SysMenuRefreshMessage.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.mq.message.permission; +package cn.iocoder.yudao.module.system.mq.message.permission; import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessage; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/permission/SysRoleMenuRefreshMessage.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/SysRoleMenuRefreshMessage.java similarity index 84% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/permission/SysRoleMenuRefreshMessage.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/SysRoleMenuRefreshMessage.java index 8ddcb17d40..1cfd0e814b 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/permission/SysRoleMenuRefreshMessage.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/SysRoleMenuRefreshMessage.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.mq.message.permission; +package cn.iocoder.yudao.module.system.mq.message.permission; import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessage; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/permission/SysRoleRefreshMessage.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/SysRoleRefreshMessage.java similarity index 84% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/permission/SysRoleRefreshMessage.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/SysRoleRefreshMessage.java index 9e89fa1863..9ad25c627a 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/permission/SysRoleRefreshMessage.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/SysRoleRefreshMessage.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.mq.message.permission; +package cn.iocoder.yudao.module.system.mq.message.permission; import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessage; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/sms/SysSmsChannelRefreshMessage.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/sms/SysSmsChannelRefreshMessage.java similarity index 86% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/sms/SysSmsChannelRefreshMessage.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/sms/SysSmsChannelRefreshMessage.java index 22c9341d52..296df410b8 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/sms/SysSmsChannelRefreshMessage.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/sms/SysSmsChannelRefreshMessage.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.mq.message.sms; +package cn.iocoder.yudao.module.system.mq.message.sms; import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessage; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/sms/SysSmsTemplateRefreshMessage.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/sms/SysSmsTemplateRefreshMessage.java similarity index 86% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/sms/SysSmsTemplateRefreshMessage.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/sms/SysSmsTemplateRefreshMessage.java index 8401829cb8..955af3ed87 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/sms/SysSmsTemplateRefreshMessage.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/sms/SysSmsTemplateRefreshMessage.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.system.mq.message.sms; +package cn.iocoder.yudao.module.system.mq.message.sms; import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessage; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/producer/dept/SysDeptProducer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/dept/SysDeptProducer.java similarity index 76% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/producer/dept/SysDeptProducer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/dept/SysDeptProducer.java index c4bbb74192..b4f9dace2f 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/producer/dept/SysDeptProducer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/dept/SysDeptProducer.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.system.mq.producer.dept; +package cn.iocoder.yudao.module.system.mq.producer.dept; -import cn.iocoder.yudao.adminserver.modules.system.mq.message.dept.SysDeptRefreshMessage; +import cn.iocoder.yudao.module.system.mq.message.dept.SysDeptRefreshMessage; import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate; import org.springframework.stereotype.Component; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/producer/dict/SysDictDataProducer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/dict/SysDictDataProducer.java similarity index 77% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/producer/dict/SysDictDataProducer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/dict/SysDictDataProducer.java index 4bce9db1c2..165de3372b 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/producer/dict/SysDictDataProducer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/dict/SysDictDataProducer.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.system.mq.producer.dict; +package cn.iocoder.yudao.module.system.mq.producer.dict; -import cn.iocoder.yudao.adminserver.modules.system.mq.message.dict.SysDictDataRefreshMessage; +import cn.iocoder.yudao.module.system.mq.message.dict.SysDictDataRefreshMessage; import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate; import org.springframework.stereotype.Component; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/producer/permission/SysMenuProducer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/SysMenuProducer.java similarity index 75% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/producer/permission/SysMenuProducer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/SysMenuProducer.java index 1f42965300..d035824f25 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/producer/permission/SysMenuProducer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/SysMenuProducer.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.system.mq.producer.permission; +package cn.iocoder.yudao.module.system.mq.producer.permission; -import cn.iocoder.yudao.adminserver.modules.system.mq.message.permission.SysMenuRefreshMessage; +import cn.iocoder.yudao.module.system.mq.message.permission.SysMenuRefreshMessage; import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate; import org.springframework.stereotype.Component; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/producer/permission/SysPermissionProducer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/SysPermissionProducer.java similarity index 75% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/producer/permission/SysPermissionProducer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/SysPermissionProducer.java index def201962c..ca5141d846 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/producer/permission/SysPermissionProducer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/SysPermissionProducer.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.system.mq.producer.permission; +package cn.iocoder.yudao.module.system.mq.producer.permission; -import cn.iocoder.yudao.adminserver.modules.system.mq.message.permission.SysRoleMenuRefreshMessage; +import cn.iocoder.yudao.module.system.mq.message.permission.SysRoleMenuRefreshMessage; import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate; import org.springframework.stereotype.Component; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/producer/permission/SysRoleProducer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/SysRoleProducer.java similarity index 76% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/producer/permission/SysRoleProducer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/SysRoleProducer.java index c3ab839a17..1fb1be9f6f 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/producer/permission/SysRoleProducer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/SysRoleProducer.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.system.mq.producer.permission; +package cn.iocoder.yudao.module.system.mq.producer.permission; -import cn.iocoder.yudao.adminserver.modules.system.mq.message.permission.SysRoleRefreshMessage; +import cn.iocoder.yudao.module.system.mq.message.permission.SysRoleRefreshMessage; import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate; import org.springframework.stereotype.Component; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/producer/sms/SysSmsProducer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/sms/SysSmsProducer.java similarity index 77% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/producer/sms/SysSmsProducer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/sms/SysSmsProducer.java index acc4fee7a9..abd343a483 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/producer/sms/SysSmsProducer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/sms/SysSmsProducer.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.system.mq.producer.sms; +package cn.iocoder.yudao.module.system.mq.producer.sms; -import cn.iocoder.yudao.adminserver.modules.system.mq.message.sms.SysSmsChannelRefreshMessage; -import cn.iocoder.yudao.adminserver.modules.system.mq.message.sms.SysSmsTemplateRefreshMessage; +import cn.iocoder.yudao.module.system.mq.message.sms.SysSmsChannelRefreshMessage; +import cn.iocoder.yudao.module.system.mq.message.sms.SysSmsTemplateRefreshMessage; import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/package-info.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/package-info.java new file mode 100644 index 0000000000..df82ac7134 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/package-info.java @@ -0,0 +1,8 @@ +/** + * system 模å—下,我们放通用业务,支撑上层的核心业务。 + * 例如说:用户ã€éƒ¨é—¨ã€æƒé™ã€æ•°æ®å­—典等等 + * + * 1. Controller URL:以 /system/ 开头,é¿å…和其它 Module å†²çª + * 2. DataObject 表å:以 system_ 开头,方便在数æ®åº“中区分 + */ +package cn.iocoder.yudao.module.system; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/SysAuthService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/SysAuthService.java similarity index 91% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/SysAuthService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/SysAuthService.java index 2d5fe8c47c..b111147d91 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/SysAuthService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/SysAuthService.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.auth; +package cn.iocoder.yudao.module.system.service.auth; -import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth.*; +import cn.iocoder.yudao.module.system.controller.auth.vo.auth.*; import cn.iocoder.yudao.framework.security.core.service.SecurityAuthFrameworkService; import javax.validation.Valid; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/SysAuthServiceImpl.java similarity index 91% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/SysAuthServiceImpl.java index cf0592eff0..bd7fdf2d9d 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/SysAuthServiceImpl.java @@ -1,19 +1,19 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.auth.impl; +package cn.iocoder.yudao.module.system.service.auth; import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth.SysAuthLoginReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth.SysAuthSocialBindReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth.SysAuthSocialLogin2ReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth.SysAuthSocialLoginReqVO; -import cn.iocoder.yudao.adminserver.modules.system.convert.auth.SysAuthConvert; +import cn.iocoder.yudao.module.system.controller.auth.vo.auth.SysAuthLoginReqVO; +import cn.iocoder.yudao.module.system.controller.auth.vo.auth.SysAuthSocialBindReqVO; +import cn.iocoder.yudao.module.system.controller.auth.vo.auth.SysAuthSocialLogin2ReqVO; +import cn.iocoder.yudao.module.system.controller.auth.vo.auth.SysAuthSocialLoginReqVO; +import cn.iocoder.yudao.module.system.convert.auth.SysAuthConvert; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; -import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginLogTypeEnum; -import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginResultEnum; -import cn.iocoder.yudao.adminserver.modules.system.service.auth.SysAuthService; -import cn.iocoder.yudao.adminserver.modules.system.service.common.SysCaptchaService; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysPostService; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService; -import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; +import cn.iocoder.yudao.module.system.enums.logger.SysLoginLogTypeEnum; +import cn.iocoder.yudao.module.system.enums.logger.SysLoginResultEnum; +import cn.iocoder.yudao.module.system.service.auth.SysAuthService; +import cn.iocoder.yudao.module.system.service.common.SysCaptchaService; +import cn.iocoder.yudao.module.system.service.dept.SysPostService; +import cn.iocoder.yudao.module.system.service.permission.SysPermissionService; +import cn.iocoder.yudao.module.system.service.user.SysUserService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.social.SysSocialUserDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService; @@ -33,7 +33,6 @@ import org.springframework.context.annotation.Lazy; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.DisabledException; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.userdetails.UserDetails; @@ -47,7 +46,7 @@ import java.util.List; import java.util.Objects; import java.util.Set; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; import static java.util.Collections.singleton; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/SysUserSessionService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/SysUserSessionService.java similarity index 78% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/SysUserSessionService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/SysUserSessionService.java index ebfa6606d2..f47c04b8bf 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/SysUserSessionService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/SysUserSessionService.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.auth; +package cn.iocoder.yudao.module.system.service.auth; -import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.session.SysUserSessionPageReqVO; +import cn.iocoder.yudao.module.system.controller.auth.vo.session.SysUserSessionPageReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysUserSessionServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/SysUserSessionServiceImpl.java similarity index 86% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysUserSessionServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/SysUserSessionServiceImpl.java index 6e2623b286..83bc371cb3 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysUserSessionServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/SysUserSessionServiceImpl.java @@ -1,13 +1,13 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.auth.impl; +package cn.iocoder.yudao.module.system.service.auth; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.session.SysUserSessionPageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.auth.SysUserSessionMapper; -import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginLogTypeEnum; -import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginResultEnum; -import cn.iocoder.yudao.adminserver.modules.system.service.auth.SysUserSessionService; -import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; +import cn.iocoder.yudao.module.system.controller.auth.vo.session.SysUserSessionPageReqVO; +import cn.iocoder.yudao.module.system.dal.mysql.auth.SysUserSessionMapper; +import cn.iocoder.yudao.module.system.enums.logger.SysLoginLogTypeEnum; +import cn.iocoder.yudao.module.system.enums.logger.SysLoginResultEnum; +import cn.iocoder.yudao.module.system.service.auth.SysUserSessionService; +import cn.iocoder.yudao.module.system.service.user.SysUserService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.dal.redis.auth.SysLoginUserCoreRedisDAO; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/common/SysCaptchaService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/common/SysCaptchaService.java similarity index 79% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/common/SysCaptchaService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/common/SysCaptchaService.java index 32aff5b06a..c6a20b909d 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/common/SysCaptchaService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/common/SysCaptchaService.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.common; +package cn.iocoder.yudao.module.system.service.common; -import cn.iocoder.yudao.adminserver.modules.system.controller.common.vo.SysCaptchaImageRespVO; +import cn.iocoder.yudao.module.system.controller.common.vo.SysCaptchaImageRespVO; /** * 验è¯ç  Service æŽ¥å£ diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/common/impl/SysCaptchaServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/common/SysCaptchaServiceImpl.java similarity index 70% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/common/impl/SysCaptchaServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/common/SysCaptchaServiceImpl.java index daefc007f4..c97ca037c6 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/common/impl/SysCaptchaServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/common/SysCaptchaServiceImpl.java @@ -1,13 +1,13 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.common.impl; +package cn.iocoder.yudao.module.system.service.common; import cn.hutool.captcha.CaptchaUtil; import cn.hutool.captcha.CircleCaptcha; import cn.hutool.core.util.IdUtil; -import cn.iocoder.yudao.adminserver.modules.system.framework.captcha.config.CaptchaProperties; -import cn.iocoder.yudao.adminserver.modules.system.controller.common.vo.SysCaptchaImageRespVO; -import cn.iocoder.yudao.adminserver.modules.system.convert.common.SysCaptchaConvert; -import cn.iocoder.yudao.adminserver.modules.system.dal.redis.common.SysCaptchaRedisDAO; -import cn.iocoder.yudao.adminserver.modules.system.service.common.SysCaptchaService; +import cn.iocoder.yudao.module.system.framework.captcha.config.CaptchaProperties; +import cn.iocoder.yudao.module.system.controller.common.vo.SysCaptchaImageRespVO; +import cn.iocoder.yudao.module.system.convert.common.SysCaptchaConvert; +import cn.iocoder.yudao.module.system.dal.redis.common.SysCaptchaRedisDAO; +import cn.iocoder.yudao.module.system.service.common.SysCaptchaService; import org.springframework.stereotype.Service; import javax.annotation.Resource; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysDeptService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysDeptService.java similarity index 67% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysDeptService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysDeptService.java index a7f9208e16..79913ed536 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysDeptService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysDeptService.java @@ -1,16 +1,11 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.dept; +package cn.iocoder.yudao.module.system.service.dept; -import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptListReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.dept.vo.dept.SysDeptCreateReqVO; +import cn.iocoder.yudao.module.system.controller.dept.vo.dept.SysDeptListReqVO; +import cn.iocoder.yudao.module.system.controller.dept.vo.dept.SysDeptUpdateReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; -import java.util.Collection; -import java.util.Collections; import java.util.List; -import java.util.Map; /** * 部门 Service æŽ¥å£ diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/impl/SysDeptServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysDeptServiceImpl.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/impl/SysDeptServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysDeptServiceImpl.java index 8770fbb2a4..f4f2773e87 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/impl/SysDeptServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysDeptServiceImpl.java @@ -1,19 +1,18 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.dept.impl; +package cn.iocoder.yudao.module.system.service.dept; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptListReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.convert.dept.SysDeptConvert; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.dept.SysDeptMapper; +import cn.iocoder.yudao.module.system.controller.dept.vo.dept.SysDeptCreateReqVO; +import cn.iocoder.yudao.module.system.controller.dept.vo.dept.SysDeptListReqVO; +import cn.iocoder.yudao.module.system.controller.dept.vo.dept.SysDeptUpdateReqVO; +import cn.iocoder.yudao.module.system.convert.dept.SysDeptConvert; +import cn.iocoder.yudao.module.system.dal.mysql.dept.SysDeptMapper; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.adminserver.modules.system.enums.dept.DeptIdEnum; -import cn.iocoder.yudao.adminserver.modules.system.mq.producer.dept.SysDeptProducer; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; +import cn.iocoder.yudao.module.system.enums.dept.DeptIdEnum; +import cn.iocoder.yudao.module.system.mq.producer.dept.SysDeptProducer; +import cn.iocoder.yudao.module.system.service.dept.SysDeptService; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.Multimap; @@ -26,7 +25,7 @@ import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.util.*; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysPostService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysPostService.java similarity index 82% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysPostService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysPostService.java index 4a1e7a7fd6..def06e25a1 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysPostService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysPostService.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.dept; +package cn.iocoder.yudao.module.system.service.dept; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.SysPostCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.SysPostExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.SysPostPageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.SysPostUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.dept.vo.post.SysPostCreateReqVO; +import cn.iocoder.yudao.module.system.controller.dept.vo.post.SysPostExportReqVO; +import cn.iocoder.yudao.module.system.controller.dept.vo.post.SysPostPageReqVO; +import cn.iocoder.yudao.module.system.controller.dept.vo.post.SysPostUpdateReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; import org.springframework.lang.Nullable; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/impl/SysPostServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysPostServiceImpl.java similarity index 82% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/impl/SysPostServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysPostServiceImpl.java index 8531fb16ed..178daeeae7 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/impl/SysPostServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysPostServiceImpl.java @@ -1,15 +1,15 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.dept.impl; +package cn.iocoder.yudao.module.system.service.dept; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.SysPostCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.SysPostExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.SysPostPageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.SysPostUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.convert.dept.SysPostConvert; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.dept.SysPostMapper; +import cn.iocoder.yudao.module.system.controller.dept.vo.post.SysPostCreateReqVO; +import cn.iocoder.yudao.module.system.controller.dept.vo.post.SysPostExportReqVO; +import cn.iocoder.yudao.module.system.controller.dept.vo.post.SysPostPageReqVO; +import cn.iocoder.yudao.module.system.controller.dept.vo.post.SysPostUpdateReqVO; +import cn.iocoder.yudao.module.system.convert.dept.SysPostConvert; +import cn.iocoder.yudao.module.system.dal.mysql.dept.SysPostMapper; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysPostService; +import cn.iocoder.yudao.module.system.service.dept.SysPostService; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -17,7 +17,7 @@ import javax.annotation.Resource; import java.util.Collection; import java.util.List; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/SysDictDataService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/SysDictDataService.java similarity index 73% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/SysDictDataService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/SysDictDataService.java index 974b02f688..30d4690982 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/SysDictDataService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/SysDictDataService.java @@ -1,14 +1,12 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.dict; +package cn.iocoder.yudao.module.system.service.dict; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.dict.core.service.DictDataFrameworkService; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataPageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.dict.vo.data.SysDictDataCreateReqVO; +import cn.iocoder.yudao.module.system.controller.dict.vo.data.SysDictDataExportReqVO; +import cn.iocoder.yudao.module.system.controller.dict.vo.data.SysDictDataPageReqVO; +import cn.iocoder.yudao.module.system.controller.dict.vo.data.SysDictDataUpdateReqVO; -import java.util.Collection; import java.util.List; /** diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/impl/SysDictDataServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/SysDictDataServiceImpl.java similarity index 81% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/impl/SysDictDataServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/SysDictDataServiceImpl.java index 9130ebe101..1037779f08 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/impl/SysDictDataServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/SysDictDataServiceImpl.java @@ -1,21 +1,18 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.dict.impl; +package cn.iocoder.yudao.module.system.service.dict; -import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataPageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.convert.dict.SysDictDataConvert; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dict.SysDictTypeDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.dict.SysDictDataMapper; -import cn.iocoder.yudao.adminserver.modules.system.mq.producer.dict.SysDictDataProducer; -import cn.iocoder.yudao.adminserver.modules.system.service.dict.SysDictDataService; -import cn.iocoder.yudao.adminserver.modules.system.service.dict.SysDictTypeService; +import cn.iocoder.yudao.module.system.controller.dict.vo.data.SysDictDataCreateReqVO; +import cn.iocoder.yudao.module.system.controller.dict.vo.data.SysDictDataExportReqVO; +import cn.iocoder.yudao.module.system.controller.dict.vo.data.SysDictDataPageReqVO; +import cn.iocoder.yudao.module.system.controller.dict.vo.data.SysDictDataUpdateReqVO; +import cn.iocoder.yudao.module.system.convert.dict.SysDictDataConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictTypeDO; +import cn.iocoder.yudao.module.system.dal.mysql.dict.SysDictDataMapper; +import cn.iocoder.yudao.module.system.mq.producer.dict.SysDictDataProducer; +import cn.iocoder.yudao.module.system.service.dict.SysDictDataService; +import cn.iocoder.yudao.module.system.service.dict.SysDictTypeService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import com.google.common.annotations.VisibleForTesting; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -23,7 +20,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.*; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/SysDictTypeService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/SysDictTypeService.java similarity index 73% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/SysDictTypeService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/SysDictTypeService.java index 6c3324fb56..a115269a63 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/SysDictTypeService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/SysDictTypeService.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.dict; +package cn.iocoder.yudao.module.system.service.dict; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.type.SysDictTypeCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.type.SysDictTypeExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.type.SysDictTypePageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.type.SysDictTypeUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dict.SysDictTypeDO; +import cn.iocoder.yudao.module.system.controller.dict.vo.type.SysDictTypeCreateReqVO; +import cn.iocoder.yudao.module.system.controller.dict.vo.type.SysDictTypeExportReqVO; +import cn.iocoder.yudao.module.system.controller.dict.vo.type.SysDictTypePageReqVO; +import cn.iocoder.yudao.module.system.controller.dict.vo.type.SysDictTypeUpdateReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictTypeDO; import java.util.List; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/impl/SysDictTypeServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/SysDictTypeServiceImpl.java similarity index 80% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/impl/SysDictTypeServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/SysDictTypeServiceImpl.java index b054764532..7cfb1a9660 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/impl/SysDictTypeServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/SysDictTypeServiceImpl.java @@ -1,15 +1,13 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.dict.impl; +package cn.iocoder.yudao.module.system.service.dict; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.type.SysDictTypeCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.type.SysDictTypeExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.type.SysDictTypePageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.type.SysDictTypeUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.convert.dict.SysDictTypeConvert; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dict.SysDictTypeDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.dict.SysDictTypeMapper; -import cn.iocoder.yudao.adminserver.modules.system.service.dict.SysDictDataService; -import cn.iocoder.yudao.adminserver.modules.system.service.dict.SysDictTypeService; +import cn.iocoder.yudao.module.system.controller.dict.vo.type.SysDictTypeCreateReqVO; +import cn.iocoder.yudao.module.system.controller.dict.vo.type.SysDictTypeExportReqVO; +import cn.iocoder.yudao.module.system.controller.dict.vo.type.SysDictTypePageReqVO; +import cn.iocoder.yudao.module.system.controller.dict.vo.type.SysDictTypeUpdateReqVO; +import cn.iocoder.yudao.module.system.convert.dict.SysDictTypeConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictTypeDO; +import cn.iocoder.yudao.module.system.dal.mysql.dict.SysDictTypeMapper; import com.google.common.annotations.VisibleForTesting; import org.springframework.stereotype.Service; @@ -17,7 +15,7 @@ import javax.annotation.Resource; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; /** * 字典类型 Service 实现类 diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/errorcode/SysErrorCodeService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/errorcode/SysErrorCodeService.java similarity index 65% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/errorcode/SysErrorCodeService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/errorcode/SysErrorCodeService.java index 4bcfb97762..0eff899066 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/errorcode/SysErrorCodeService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/errorcode/SysErrorCodeService.java @@ -1,12 +1,12 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.errorcode; +package cn.iocoder.yudao.module.system.service.errorcode; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.tool.framework.errorcode.core.service.ErrorCodeFrameworkService; -import cn.iocoder.yudao.adminserver.modules.system.controller.errorcode.vo.SysErrorCodeCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.errorcode.vo.SysErrorCodeExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.errorcode.vo.SysErrorCodePageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.errorcode.vo.SysErrorCodeUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.errorcode.SysErrorCodeDO; +import cn.iocoder.yudao.module.system.framework.errorcode.core.service.ErrorCodeFrameworkService; +import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodeCreateReqVO; +import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodeExportReqVO; +import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodePageReqVO; +import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodeUpdateReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.errorcode.SysErrorCodeDO; import javax.validation.Valid; import java.util.List; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/errorcode/impl/SysErrorCodeServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/errorcode/SysErrorCodeServiceImpl.java similarity index 83% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/errorcode/impl/SysErrorCodeServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/errorcode/SysErrorCodeServiceImpl.java index 178e071dd0..af4e9f352a 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/errorcode/impl/SysErrorCodeServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/errorcode/SysErrorCodeServiceImpl.java @@ -1,18 +1,18 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.errorcode.impl; +package cn.iocoder.yudao.module.system.service.errorcode; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.tool.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; -import cn.iocoder.yudao.adminserver.modules.tool.framework.errorcode.core.dto.ErrorCodeRespDTO; -import cn.iocoder.yudao.adminserver.modules.system.convert.errorcode.SysErrorCodeConvert; -import cn.iocoder.yudao.adminserver.modules.system.controller.errorcode.vo.SysErrorCodeCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.errorcode.vo.SysErrorCodeExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.errorcode.vo.SysErrorCodePageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.errorcode.vo.SysErrorCodeUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.errorcode.SysErrorCodeDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.errorcode.SysErrorCodeMapper; -import cn.iocoder.yudao.adminserver.modules.system.enums.errorcode.SysErrorCodeTypeEnum; -import cn.iocoder.yudao.adminserver.modules.system.service.errorcode.SysErrorCodeService; +import cn.iocoder.yudao.module.system.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; +import cn.iocoder.yudao.module.system.framework.errorcode.core.dto.ErrorCodeRespDTO; +import cn.iocoder.yudao.module.system.convert.errorcode.SysErrorCodeConvert; +import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodeCreateReqVO; +import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodeExportReqVO; +import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodePageReqVO; +import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodeUpdateReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.errorcode.SysErrorCodeDO; +import cn.iocoder.yudao.module.system.dal.mysql.errorcode.SysErrorCodeMapper; +import cn.iocoder.yudao.module.system.enums.errorcode.SysErrorCodeTypeEnum; +import cn.iocoder.yudao.module.system.service.errorcode.SysErrorCodeService; import com.google.common.annotations.VisibleForTesting; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -25,7 +25,7 @@ import java.util.List; import java.util.Map; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/logger/SysLoginLogService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/SysLoginLogService.java similarity index 70% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/logger/SysLoginLogService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/SysLoginLogService.java index b7b30e1984..8dbff7d4d8 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/logger/SysLoginLogService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/SysLoginLogService.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.logger; +package cn.iocoder.yudao.module.system.service.logger; -import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog.SysLoginLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog.SysLoginLogPageReqVO; +import cn.iocoder.yudao.module.system.controller.logger.vo.loginlog.SysLoginLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.logger.vo.loginlog.SysLoginLogPageReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/logger/impl/SysLoginLogServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/SysLoginLogServiceImpl.java similarity index 61% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/logger/impl/SysLoginLogServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/SysLoginLogServiceImpl.java index fc651469d4..5d708773a7 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/logger/impl/SysLoginLogServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/SysLoginLogServiceImpl.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.logger.impl; +package cn.iocoder.yudao.module.system.service.logger; -import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog.SysLoginLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog.SysLoginLogPageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.logger.SysLoginLogMapper; -import cn.iocoder.yudao.adminserver.modules.system.service.logger.SysLoginLogService; +import cn.iocoder.yudao.module.system.controller.logger.vo.loginlog.SysLoginLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.logger.vo.loginlog.SysLoginLogPageReqVO; +import cn.iocoder.yudao.module.system.dal.mysql.logger.SysLoginLogMapper; +import cn.iocoder.yudao.module.system.service.logger.SysLoginLogService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.springframework.stereotype.Service; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/logger/SysOperateLogService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/SysOperateLogService.java similarity index 64% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/logger/SysOperateLogService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/SysOperateLogService.java index cf3379b398..4bab97586f 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/logger/SysOperateLogService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/SysOperateLogService.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.logger; +package cn.iocoder.yudao.module.system.service.logger; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.operatelog.core.service.OperateLogFrameworkService; -import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog.SysOperateLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog.SysOperateLogPageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.logger.SysOperateLogDO; +import cn.iocoder.yudao.module.system.controller.logger.vo.operatelog.SysOperateLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.logger.vo.operatelog.SysOperateLogPageReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysOperateLogDO; import java.util.List; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/logger/impl/SysOperateLogServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/SysOperateLogServiceImpl.java similarity index 75% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/logger/impl/SysOperateLogServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/SysOperateLogServiceImpl.java index 811710e24c..c89c37b3e3 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/logger/impl/SysOperateLogServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/SysOperateLogServiceImpl.java @@ -1,14 +1,14 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.logger.impl; +package cn.iocoder.yudao.module.system.service.logger; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog.SysOperateLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog.SysOperateLogPageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.convert.logger.SysOperateLogConvert; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.logger.SysOperateLogDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.logger.SysOperateLogMapper; -import cn.iocoder.yudao.adminserver.modules.system.service.logger.SysOperateLogService; -import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; +import cn.iocoder.yudao.module.system.controller.logger.vo.operatelog.SysOperateLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.logger.vo.operatelog.SysOperateLogPageReqVO; +import cn.iocoder.yudao.module.system.convert.logger.SysOperateLogConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysOperateLogDO; +import cn.iocoder.yudao.module.system.dal.mysql.logger.SysOperateLogMapper; +import cn.iocoder.yudao.module.system.service.logger.SysOperateLogService; +import cn.iocoder.yudao.module.system.service.user.SysUserService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.string.StrUtils; @@ -24,8 +24,8 @@ import java.util.Collections; import java.util.List; import java.util.concurrent.Future; -import static cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.logger.SysOperateLogDO.JAVA_METHOD_ARGS_MAX_LENGTH; -import static cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.logger.SysOperateLogDO.RESULT_MAX_LENGTH; +import static cn.iocoder.yudao.module.system.dal.dataobject.logger.SysOperateLogDO.JAVA_METHOD_ARGS_MAX_LENGTH; +import static cn.iocoder.yudao.module.system.dal.dataobject.logger.SysOperateLogDO.RESULT_MAX_LENGTH; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; @Service diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/notice/SysNoticeService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/notice/SysNoticeService.java similarity index 69% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/notice/SysNoticeService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/notice/SysNoticeService.java index ee4ecddb7b..c832beff30 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/notice/SysNoticeService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/notice/SysNoticeService.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.notice; +package cn.iocoder.yudao.module.system.service.notice; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.system.controller.notice.vo.SysNoticeCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.notice.vo.SysNoticePageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.notice.vo.SysNoticeUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.notice.SysNoticeDO; +import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticeCreateReqVO; +import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticePageReqVO; +import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticeUpdateReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.notice.SysNoticeDO; /** * 通知公告 Service æŽ¥å£ diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/notice/impl/SysNoticeServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/notice/SysNoticeServiceImpl.java similarity index 68% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/notice/impl/SysNoticeServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/notice/SysNoticeServiceImpl.java index 2cb770b06c..aa9f4a694d 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/notice/impl/SysNoticeServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/notice/SysNoticeServiceImpl.java @@ -1,20 +1,20 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.notice.impl; +package cn.iocoder.yudao.module.system.service.notice; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.system.controller.notice.vo.SysNoticeCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.notice.vo.SysNoticePageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.notice.vo.SysNoticeUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.convert.notice.SysNoticeConvert; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.notice.SysNoticeMapper; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.notice.SysNoticeDO; -import cn.iocoder.yudao.adminserver.modules.system.service.notice.SysNoticeService; +import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticeCreateReqVO; +import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticePageReqVO; +import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticeUpdateReqVO; +import cn.iocoder.yudao.module.system.convert.notice.SysNoticeConvert; +import cn.iocoder.yudao.module.system.dal.mysql.notice.SysNoticeMapper; +import cn.iocoder.yudao.module.system.dal.dataobject.notice.SysNoticeDO; +import cn.iocoder.yudao.module.system.service.notice.SysNoticeService; import com.google.common.annotations.VisibleForTesting; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.NOTICE_NOT_FOUND; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.NOTICE_NOT_FOUND; /** * 通知公告 Service 实现类 diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysMenuService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysMenuService.java similarity index 81% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysMenuService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysMenuService.java index 5979f16d14..155769a52f 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysMenuService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysMenuService.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.permission; +package cn.iocoder.yudao.module.system.service.permission; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.menu.SysMenuCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.menu.SysMenuListReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.menu.SysMenuUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysMenuDO; +import cn.iocoder.yudao.module.system.controller.permission.vo.menu.SysMenuCreateReqVO; +import cn.iocoder.yudao.module.system.controller.permission.vo.menu.SysMenuListReqVO; +import cn.iocoder.yudao.module.system.controller.permission.vo.menu.SysMenuUpdateReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysMenuDO; import java.util.Collection; import java.util.List; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/impl/SysMenuServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysMenuServiceImpl.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/impl/SysMenuServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysMenuServiceImpl.java index 39200225ef..855d8c9e13 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/impl/SysMenuServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysMenuServiceImpl.java @@ -1,19 +1,19 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.permission.impl; +package cn.iocoder.yudao.module.system.service.permission; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.menu.SysMenuCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.menu.SysMenuListReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.menu.SysMenuUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.convert.permission.SysMenuConvert; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.permission.SysMenuMapper; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysMenuDO; -import cn.iocoder.yudao.adminserver.modules.system.enums.permission.MenuIdEnum; -import cn.iocoder.yudao.adminserver.modules.system.enums.permission.MenuTypeEnum; -import cn.iocoder.yudao.adminserver.modules.system.mq.producer.permission.SysMenuProducer; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysMenuService; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService; +import cn.iocoder.yudao.module.system.controller.permission.vo.menu.SysMenuCreateReqVO; +import cn.iocoder.yudao.module.system.controller.permission.vo.menu.SysMenuListReqVO; +import cn.iocoder.yudao.module.system.controller.permission.vo.menu.SysMenuUpdateReqVO; +import cn.iocoder.yudao.module.system.convert.permission.SysMenuConvert; +import cn.iocoder.yudao.module.system.dal.mysql.permission.SysMenuMapper; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysMenuDO; +import cn.iocoder.yudao.module.system.enums.permission.MenuIdEnum; +import cn.iocoder.yudao.module.system.enums.permission.MenuTypeEnum; +import cn.iocoder.yudao.module.system.mq.producer.permission.SysMenuProducer; +import cn.iocoder.yudao.module.system.service.permission.SysMenuService; +import cn.iocoder.yudao.module.system.service.permission.SysPermissionService; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableMap; @@ -31,7 +31,7 @@ import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; /** * èœå• Service 实现 diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysPermissionService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysPermissionService.java similarity index 95% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysPermissionService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysPermissionService.java index 627e61b8a9..aad7a419c1 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysPermissionService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysPermissionService.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.permission; +package cn.iocoder.yudao.module.system.service.permission; import cn.iocoder.yudao.framework.datapermission.core.dept.service.DeptDataPermissionFrameworkService; import cn.iocoder.yudao.framework.security.core.service.SecurityPermissionFrameworkService; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysMenuDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysMenuDO; import org.springframework.lang.Nullable; import java.util.Collection; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/impl/SysPermissionServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysPermissionServiceImpl.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/impl/SysPermissionServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysPermissionServiceImpl.java index 7e90b568f6..83ca671dbf 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/impl/SysPermissionServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysPermissionServiceImpl.java @@ -1,20 +1,17 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.permission.impl; +package cn.iocoder.yudao.module.system.service.permission; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ArrayUtil; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysMenuDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysMenuDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleMenuDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleMenuDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysUserRoleDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.permission.SysRoleMenuMapper; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.permission.SysUserRoleMapper; -import cn.iocoder.yudao.adminserver.modules.system.mq.producer.permission.SysPermissionProducer; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysMenuService; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysRoleService; +import cn.iocoder.yudao.module.system.dal.mysql.permission.SysRoleMenuMapper; +import cn.iocoder.yudao.module.system.dal.mysql.permission.SysUserRoleMapper; +import cn.iocoder.yudao.module.system.mq.producer.permission.SysPermissionProducer; +import cn.iocoder.yudao.module.system.service.dept.SysDeptService; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.collection.MapUtils; import cn.iocoder.yudao.framework.common.util.json.JsonUtils; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysRoleService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysRoleService.java similarity index 85% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysRoleService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysRoleService.java index 74125662d5..47de67f8a6 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysRoleService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysRoleService.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.permission; +package cn.iocoder.yudao.module.system.service.permission; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role.SysRoleCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role.SysRoleExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role.SysRolePageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role.SysRoleUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.permission.vo.role.SysRoleCreateReqVO; +import cn.iocoder.yudao.module.system.controller.permission.vo.role.SysRoleExportReqVO; +import cn.iocoder.yudao.module.system.controller.permission.vo.role.SysRolePageReqVO; +import cn.iocoder.yudao.module.system.controller.permission.vo.role.SysRoleUpdateReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; import org.springframework.lang.Nullable; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/impl/SysRoleServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysRoleServiceImpl.java similarity index 88% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/impl/SysRoleServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysRoleServiceImpl.java index 8b29e19dff..f0c8b167c4 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/impl/SysRoleServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysRoleServiceImpl.java @@ -1,22 +1,22 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.permission.impl; +package cn.iocoder.yudao.module.system.service.permission; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role.SysRoleCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role.SysRoleExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role.SysRolePageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role.SysRoleUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.convert.permission.SysRoleConvert; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.permission.SysRoleMapper; +import cn.iocoder.yudao.module.system.controller.permission.vo.role.SysRoleCreateReqVO; +import cn.iocoder.yudao.module.system.controller.permission.vo.role.SysRoleExportReqVO; +import cn.iocoder.yudao.module.system.controller.permission.vo.role.SysRolePageReqVO; +import cn.iocoder.yudao.module.system.controller.permission.vo.role.SysRoleUpdateReqVO; +import cn.iocoder.yudao.module.system.convert.permission.SysRoleConvert; +import cn.iocoder.yudao.module.system.dal.mysql.permission.SysRoleMapper; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; -import cn.iocoder.yudao.adminserver.modules.system.enums.permission.RoleCodeEnum; -import cn.iocoder.yudao.adminserver.modules.system.enums.permission.SysRoleTypeEnum; -import cn.iocoder.yudao.adminserver.modules.system.mq.producer.permission.SysRoleProducer; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysRoleService; +import cn.iocoder.yudao.module.system.enums.permission.RoleCodeEnum; +import cn.iocoder.yudao.module.system.enums.permission.SysRoleTypeEnum; +import cn.iocoder.yudao.module.system.mq.producer.permission.SysRoleProducer; +import cn.iocoder.yudao.module.system.service.permission.SysPermissionService; +import cn.iocoder.yudao.module.system.service.permission.SysRoleService; import cn.iocoder.yudao.framework.security.core.enums.DataScopeEnum; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableMap; @@ -34,7 +34,7 @@ import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsChannelService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsChannelService.java similarity index 80% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsChannelService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsChannelService.java index 0a7220a791..d7fa604e29 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsChannelService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsChannelService.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.sms; +package cn.iocoder.yudao.module.system.service.sms; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelPageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.channel.SysSmsChannelCreateReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.channel.SysSmsChannelPageReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.channel.SysSmsChannelUpdateReqVO; import javax.validation.Valid; import java.util.Collection; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/impl/SysSmsChannelServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsChannelServiceImpl.java similarity index 84% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/impl/SysSmsChannelServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsChannelServiceImpl.java index 59f2a9a307..b36016a6bd 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/impl/SysSmsChannelServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsChannelServiceImpl.java @@ -1,14 +1,14 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.sms.impl; +package cn.iocoder.yudao.module.system.service.sms; import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelPageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.convert.sms.SysSmsChannelConvert; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.sms.SysSmsChannelMapper; -import cn.iocoder.yudao.adminserver.modules.system.mq.producer.sms.SysSmsProducer; -import cn.iocoder.yudao.adminserver.modules.system.service.sms.SysSmsChannelService; -import cn.iocoder.yudao.adminserver.modules.system.service.sms.SysSmsTemplateService; +import cn.iocoder.yudao.module.system.controller.sms.vo.channel.SysSmsChannelCreateReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.channel.SysSmsChannelPageReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.channel.SysSmsChannelUpdateReqVO; +import cn.iocoder.yudao.module.system.convert.sms.SysSmsChannelConvert; +import cn.iocoder.yudao.module.system.dal.mysql.sms.SysSmsChannelMapper; +import cn.iocoder.yudao.module.system.mq.producer.sms.SysSmsProducer; +import cn.iocoder.yudao.module.system.service.sms.SysSmsChannelService; +import cn.iocoder.yudao.module.system.service.sms.SysSmsTemplateService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; @@ -25,8 +25,8 @@ import java.util.Comparator; import java.util.Date; import java.util.List; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.SMS_CHANNEL_HAS_CHILDREN; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.SMS_CHANNEL_NOT_EXISTS; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.SMS_CHANNEL_HAS_CHILDREN; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.SMS_CHANNEL_NOT_EXISTS; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsLogService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsLogService.java similarity index 73% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsLogService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsLogService.java index 75bc3a6cc3..547bc6b0de 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsLogService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsLogService.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.sms; +package cn.iocoder.yudao.module.system.service.sms; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogPageReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.log.SysSmsLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.log.SysSmsLogPageReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/impl/SysSmsLogServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsLogServiceImpl.java similarity index 65% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/impl/SysSmsLogServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsLogServiceImpl.java index 866e607290..f390c98c5c 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/impl/SysSmsLogServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsLogServiceImpl.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.sms.impl; +package cn.iocoder.yudao.module.system.service.sms; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogPageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.sms.SysSmsLogMapper; -import cn.iocoder.yudao.adminserver.modules.system.service.sms.SysSmsLogService; +import cn.iocoder.yudao.module.system.controller.sms.vo.log.SysSmsLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.log.SysSmsLogPageReqVO; +import cn.iocoder.yudao.module.system.dal.mysql.sms.SysSmsLogMapper; +import cn.iocoder.yudao.module.system.service.sms.SysSmsLogService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import lombok.extern.slf4j.Slf4j; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsTemplateService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsTemplateService.java similarity index 80% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsTemplateService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsTemplateService.java index 723eef1ffc..96873a0c14 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsTemplateService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsTemplateService.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.sms; +package cn.iocoder.yudao.module.system.service.sms; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplatePageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplateCreateReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplateExportReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplatePageReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplateUpdateReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/impl/SysSmsTemplateServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsTemplateServiceImpl.java similarity index 86% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/impl/SysSmsTemplateServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsTemplateServiceImpl.java index d8c5b99130..3b6e463285 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/impl/SysSmsTemplateServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsTemplateServiceImpl.java @@ -1,15 +1,15 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.sms.impl; +package cn.iocoder.yudao.module.system.service.sms; import cn.hutool.core.util.ReUtil; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplatePageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.convert.sms.SysSmsTemplateConvert; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.sms.SysSmsTemplateMapper; -import cn.iocoder.yudao.adminserver.modules.system.mq.producer.sms.SysSmsProducer; -import cn.iocoder.yudao.adminserver.modules.system.service.sms.SysSmsChannelService; -import cn.iocoder.yudao.adminserver.modules.system.service.sms.SysSmsTemplateService; +import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplateCreateReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplateExportReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplatePageReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplateUpdateReqVO; +import cn.iocoder.yudao.module.system.convert.sms.SysSmsTemplateConvert; +import cn.iocoder.yudao.module.system.dal.mysql.sms.SysSmsTemplateMapper; +import cn.iocoder.yudao.module.system.mq.producer.sms.SysSmsProducer; +import cn.iocoder.yudao.module.system.service.sms.SysSmsChannelService; +import cn.iocoder.yudao.module.system.service.sms.SysSmsTemplateService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; @@ -29,7 +29,7 @@ import java.util.List; import java.util.Objects; import java.util.regex.Pattern; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/tenant/SysTenantService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/SysTenantService.java similarity index 78% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/tenant/SysTenantService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/SysTenantService.java index b32e81f122..357e23ad74 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/tenant/SysTenantService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/SysTenantService.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.tenant; +package cn.iocoder.yudao.module.system.service.tenant; -import cn.iocoder.yudao.adminserver.modules.system.controller.tenant.vo.SysTenantCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.tenant.vo.SysTenantExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.tenant.vo.SysTenantPageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.tenant.vo.SysTenantUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantCreateReqVO; +import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantExportReqVO; +import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantPageReqVO; +import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantUpdateReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.tenant.SysTenantDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/tenant/impl/SysTenantServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/SysTenantServiceImpl.java similarity index 73% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/tenant/impl/SysTenantServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/SysTenantServiceImpl.java index 80701affb3..bc76d2badd 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/tenant/impl/SysTenantServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/SysTenantServiceImpl.java @@ -1,12 +1,12 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.tenant.impl; +package cn.iocoder.yudao.module.system.service.tenant; -import cn.iocoder.yudao.adminserver.modules.system.controller.tenant.vo.SysTenantCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.tenant.vo.SysTenantExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.tenant.vo.SysTenantPageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.tenant.vo.SysTenantUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.convert.tenant.SysTenantConvert; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.tenant.SysTenantMapper; -import cn.iocoder.yudao.adminserver.modules.system.service.tenant.SysTenantService; +import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantCreateReqVO; +import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantExportReqVO; +import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantPageReqVO; +import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantUpdateReqVO; +import cn.iocoder.yudao.module.system.convert.tenant.SysTenantConvert; +import cn.iocoder.yudao.module.system.dal.mysql.tenant.SysTenantMapper; +import cn.iocoder.yudao.module.system.service.tenant.SysTenantService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.tenant.SysTenantDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.springframework.stereotype.Service; @@ -16,7 +16,7 @@ import javax.annotation.Resource; import java.util.Collection; import java.util.List; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.TENANT_NOT_EXISTS; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.TENANT_NOT_EXISTS; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/SysUserService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/SysUserService.java similarity index 87% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/SysUserService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/SysUserService.java index da4695e35a..a1f428b7e1 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/SysUserService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/SysUserService.java @@ -1,12 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.user; +package cn.iocoder.yudao.module.system.service.user; -import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.*; +import cn.iocoder.yudao.module.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO; +import cn.iocoder.yudao.module.system.controller.user.vo.profile.SysUserProfileUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.user.vo.user.*; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import java.io.InputStream; import java.util.*; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/impl/SysUserServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/SysUserServiceImpl.java similarity index 92% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/impl/SysUserServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/SysUserServiceImpl.java index 1b6c4e4739..5eab9a83cd 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/impl/SysUserServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/SysUserServiceImpl.java @@ -1,20 +1,20 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.user.impl; +package cn.iocoder.yudao.module.system.service.user; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.*; -import cn.iocoder.yudao.adminserver.modules.system.convert.user.SysUserConvert; +import cn.iocoder.yudao.module.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO; +import cn.iocoder.yudao.module.system.controller.user.vo.profile.SysUserProfileUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.user.vo.user.*; +import cn.iocoder.yudao.module.system.convert.user.SysUserConvert; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.user.SysUserMapper; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysPostService; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService; -import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; +import cn.iocoder.yudao.module.system.dal.mysql.user.SysUserMapper; +import cn.iocoder.yudao.module.system.service.dept.SysDeptService; +import cn.iocoder.yudao.module.system.service.dept.SysPostService; +import cn.iocoder.yudao.module.system.service.permission.SysPermissionService; +import cn.iocoder.yudao.module.system.service.user.SysUserService; import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; @@ -24,7 +24,6 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import com.google.common.annotations.VisibleForTesting; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; @@ -34,7 +33,7 @@ import javax.annotation.Resource; import java.io.InputStream; import java.util.*; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/SysAuthServiceImplTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/SysAuthServiceImplTest.java similarity index 92% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/SysAuthServiceImplTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/SysAuthServiceImplTest.java index 6e213a57d2..75ab194bce 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/SysAuthServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/SysAuthServiceImplTest.java @@ -1,14 +1,12 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.auth; +package cn.iocoder.yudao.module.system.service.auth; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth.SysAuthLoginReqVO; -import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginLogTypeEnum; -import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginResultEnum; -import cn.iocoder.yudao.adminserver.modules.system.service.auth.impl.SysAuthServiceImpl; -import cn.iocoder.yudao.adminserver.modules.system.service.common.SysCaptchaService; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysPostService; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService; -import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; +import cn.iocoder.yudao.module.system.controller.auth.vo.auth.SysAuthLoginReqVO; +import cn.iocoder.yudao.module.system.enums.logger.SysLoginLogTypeEnum; +import cn.iocoder.yudao.module.system.enums.logger.SysLoginResultEnum; +import cn.iocoder.yudao.module.system.service.common.SysCaptchaService; +import cn.iocoder.yudao.module.system.service.dept.SysPostService; +import cn.iocoder.yudao.module.system.service.permission.SysPermissionService; +import cn.iocoder.yudao.module.system.service.user.SysUserService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService; import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService; @@ -17,6 +15,7 @@ import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreServi import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.framework.test.core.util.AssertUtils; +import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.test.mock.mockito.MockBean; @@ -32,7 +31,7 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException; import javax.annotation.Resource; import java.util.Set; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; import static java.util.Collections.singleton; @@ -40,11 +39,6 @@ import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; -/** - * {@link SysAuthServiceImpl} çš„å•元测试 - * - * @author èŠ‹é“æºç  - */ @Import(SysAuthServiceImpl.class) public class SysAuthServiceImplTest extends BaseDbUnitTest { diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/SysUserSessionServiceImplTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/SysUserSessionServiceImplTest.java similarity index 88% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/SysUserSessionServiceImplTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/SysUserSessionServiceImplTest.java index 164cd90d7d..3454572354 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/SysUserSessionServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/SysUserSessionServiceImplTest.java @@ -1,11 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.auth; +package cn.iocoder.yudao.module.system.service.auth; import cn.hutool.core.date.DateUtil; -import cn.iocoder.yudao.adminserver.BaseDbAndRedisUnitTest; -import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.session.SysUserSessionPageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.auth.SysUserSessionMapper; -import cn.iocoder.yudao.adminserver.modules.system.service.auth.impl.SysUserSessionServiceImpl; -import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; +import cn.iocoder.yudao.module.system.controller.auth.vo.session.SysUserSessionPageReqVO; +import cn.iocoder.yudao.module.system.dal.mysql.auth.SysUserSessionMapper; +import cn.iocoder.yudao.module.system.service.user.SysUserService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.dal.redis.auth.SysLoginUserCoreRedisDAO; @@ -15,7 +13,7 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; -import cn.iocoder.yudao.framework.test.core.util.AssertUtils; +import cn.iocoder.yudao.module.system.test.BaseDbAndRedisUnitTest; import org.junit.jupiter.api.Test; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Import; @@ -123,7 +121,7 @@ public class SysUserSessionServiceImplTest extends BaseDbAndRedisUnitTest { assertEquals(expectedTimeoutCount, actualTimeoutCount); List userSessionDOS = userSessionMapper.selectList(); assertEquals(expectedTotal, userSessionDOS.size()); - AssertUtils.assertPojoEquals(sessionDO, userSessionDOS.get(0), "updateTime"); + assertPojoEquals(sessionDO, userSessionDOS.get(0), "updateTime"); } } diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/common/SysCaptchaServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/common/SysCaptchaServiceTest.java similarity index 77% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/common/SysCaptchaServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/common/SysCaptchaServiceTest.java index c45ed4cbf6..2248744227 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/common/SysCaptchaServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/common/SysCaptchaServiceTest.java @@ -1,10 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.common; +package cn.iocoder.yudao.module.system.service.common; -import cn.iocoder.yudao.adminserver.BaseRedisUnitTest; -import cn.iocoder.yudao.adminserver.modules.system.framework.captcha.config.CaptchaProperties; -import cn.iocoder.yudao.adminserver.modules.system.controller.common.vo.SysCaptchaImageRespVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.redis.common.SysCaptchaRedisDAO; -import cn.iocoder.yudao.adminserver.modules.system.service.common.impl.SysCaptchaServiceImpl; +import cn.iocoder.yudao.module.system.controller.common.vo.SysCaptchaImageRespVO; +import cn.iocoder.yudao.module.system.dal.redis.common.SysCaptchaRedisDAO; +import cn.iocoder.yudao.module.system.framework.captcha.config.CaptchaProperties; +import cn.iocoder.yudao.module.system.test.BaseRedisUnitTest; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.Import; diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysDeptServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/SysDeptServiceTest.java similarity index 92% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysDeptServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/SysDeptServiceTest.java index 78f8cb707e..b041e2d4cb 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysDeptServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/SysDeptServiceTest.java @@ -1,17 +1,16 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.dept; +package cn.iocoder.yudao.module.system.service.dept; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptListReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.dept.vo.dept.SysDeptCreateReqVO; +import cn.iocoder.yudao.module.system.controller.dept.vo.dept.SysDeptListReqVO; +import cn.iocoder.yudao.module.system.controller.dept.vo.dept.SysDeptUpdateReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.dept.SysDeptMapper; -import cn.iocoder.yudao.adminserver.modules.system.enums.dept.DeptIdEnum; -import cn.iocoder.yudao.adminserver.modules.system.mq.producer.dept.SysDeptProducer; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.impl.SysDeptServiceImpl; +import cn.iocoder.yudao.module.system.dal.mysql.dept.SysDeptMapper; +import cn.iocoder.yudao.module.system.enums.dept.DeptIdEnum; +import cn.iocoder.yudao.module.system.mq.producer.dept.SysDeptProducer; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; +import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; import com.google.common.collect.Multimap; import org.junit.jupiter.api.Test; import org.springframework.boot.test.mock.mockito.MockBean; @@ -25,7 +24,7 @@ import java.util.function.Consumer; import static cn.hutool.core.bean.BeanUtil.getFieldValue; import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysPostServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/SysPostServiceTest.java similarity index 90% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysPostServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/SysPostServiceTest.java index e3efb412fe..fa0da32577 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysPostServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/SysPostServiceTest.java @@ -1,17 +1,16 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.dept; +package cn.iocoder.yudao.module.system.service.dept; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.SysPostCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.SysPostExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.SysPostPageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.post.SysPostUpdateReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.dept.SysPostMapper; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.impl.SysPostServiceImpl; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; +import cn.iocoder.yudao.module.system.controller.dept.vo.post.SysPostCreateReqVO; +import cn.iocoder.yudao.module.system.controller.dept.vo.post.SysPostExportReqVO; +import cn.iocoder.yudao.module.system.controller.dept.vo.post.SysPostPageReqVO; +import cn.iocoder.yudao.module.system.controller.dept.vo.post.SysPostUpdateReqVO; +import cn.iocoder.yudao.module.system.dal.mysql.dept.SysPostMapper; +import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.Import; @@ -20,11 +19,11 @@ import java.util.List; import java.util.function.Consumer; import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; import static org.junit.jupiter.api.Assertions.*; /** diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/SysDictDataServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/SysDictDataServiceTest.java similarity index 91% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/SysDictDataServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/SysDictDataServiceTest.java index e69b6297e0..bc5f83db8c 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/SysDictDataServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/SysDictDataServiceTest.java @@ -1,19 +1,18 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.dict; +package cn.iocoder.yudao.module.system.service.dict; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataPageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.data.SysDictDataUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dict.SysDictTypeDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.dict.SysDictDataMapper; -import cn.iocoder.yudao.adminserver.modules.system.mq.producer.dict.SysDictDataProducer; -import cn.iocoder.yudao.adminserver.modules.system.service.dict.impl.SysDictDataServiceImpl; +import cn.iocoder.yudao.module.system.controller.dict.vo.data.SysDictDataCreateReqVO; +import cn.iocoder.yudao.module.system.controller.dict.vo.data.SysDictDataExportReqVO; +import cn.iocoder.yudao.module.system.controller.dict.vo.data.SysDictDataPageReqVO; +import cn.iocoder.yudao.module.system.controller.dict.vo.data.SysDictDataUpdateReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictTypeDO; +import cn.iocoder.yudao.module.system.dal.mysql.dict.SysDictDataMapper; +import cn.iocoder.yudao.module.system.mq.producer.dict.SysDictDataProducer; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; +import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; import org.junit.jupiter.api.Test; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Import; @@ -22,7 +21,7 @@ import javax.annotation.Resource; import java.util.List; import java.util.function.Consumer; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/SysDictTypeServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/SysDictTypeServiceTest.java similarity index 91% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/SysDictTypeServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/SysDictTypeServiceTest.java index 8ca3638d21..916acbf26f 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/dict/SysDictTypeServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/SysDictTypeServiceTest.java @@ -1,17 +1,16 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.dict; +package cn.iocoder.yudao.module.system.service.dict; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.type.SysDictTypeCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.type.SysDictTypeExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.type.SysDictTypePageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.dict.vo.type.SysDictTypeUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dict.SysDictTypeDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.dict.SysDictTypeMapper; -import cn.iocoder.yudao.adminserver.modules.system.service.dict.impl.SysDictTypeServiceImpl; +import cn.iocoder.yudao.module.system.controller.dict.vo.type.SysDictTypeCreateReqVO; +import cn.iocoder.yudao.module.system.controller.dict.vo.type.SysDictTypeExportReqVO; +import cn.iocoder.yudao.module.system.controller.dict.vo.type.SysDictTypePageReqVO; +import cn.iocoder.yudao.module.system.controller.dict.vo.type.SysDictTypeUpdateReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictTypeDO; +import cn.iocoder.yudao.module.system.dal.mysql.dict.SysDictTypeMapper; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; +import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; import org.junit.jupiter.api.Test; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Import; @@ -21,7 +20,7 @@ import java.util.List; import java.util.function.Consumer; import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; @@ -30,11 +29,6 @@ import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.when; -/** -* {@link SysDictTypeServiceImpl} çš„å•元测试类 -* -* @author èŠ‹é“æºç  -*/ @Import(SysDictTypeServiceImpl.class) public class SysDictTypeServiceTest extends BaseDbUnitTest { diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/errorcode/SysErrorCodeServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/errorcode/SysErrorCodeServiceTest.java similarity index 88% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/errorcode/SysErrorCodeServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/errorcode/SysErrorCodeServiceTest.java index 56c0b34949..517006d64c 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/errorcode/SysErrorCodeServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/errorcode/SysErrorCodeServiceTest.java @@ -1,19 +1,17 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.errorcode; +package cn.iocoder.yudao.module.system.service.errorcode; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.tool.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; -import cn.iocoder.yudao.adminserver.modules.infra.enums.config.InfConfigTypeEnum; -import cn.iocoder.yudao.adminserver.modules.system.controller.errorcode.vo.SysErrorCodeCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.errorcode.vo.SysErrorCodeExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.errorcode.vo.SysErrorCodePageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.errorcode.vo.SysErrorCodeUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.errorcode.SysErrorCodeDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.errorcode.SysErrorCodeMapper; -import cn.iocoder.yudao.adminserver.modules.system.enums.errorcode.SysErrorCodeTypeEnum; -import cn.iocoder.yudao.adminserver.modules.system.service.errorcode.impl.SysErrorCodeServiceImpl; +import cn.iocoder.yudao.module.system.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; +import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodeCreateReqVO; +import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodeExportReqVO; +import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodePageReqVO; +import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodeUpdateReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.errorcode.SysErrorCodeDO; +import cn.iocoder.yudao.module.system.dal.mysql.errorcode.SysErrorCodeMapper; +import cn.iocoder.yudao.module.system.enums.errorcode.SysErrorCodeTypeEnum; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; +import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; import org.assertj.core.util.Lists; import org.junit.jupiter.api.Test; import org.mockito.Mock; @@ -25,19 +23,14 @@ import java.util.List; import java.util.function.Consumer; import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.ERROR_CODE_DUPLICATE; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.ERROR_CODE_NOT_EXISTS; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.ERROR_CODE_DUPLICATE; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.ERROR_CODE_NOT_EXISTS; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; import static org.junit.jupiter.api.Assertions.*; -/** -* {@link SysErrorCodeServiceImpl} çš„å•元测试类 -* -* @author èŠ‹é“æºç  -*/ @Import(SysErrorCodeServiceImpl.class) public class SysErrorCodeServiceTest extends BaseDbUnitTest { @@ -47,9 +40,6 @@ public class SysErrorCodeServiceTest extends BaseDbUnitTest { @Resource private SysErrorCodeMapper errorCodeMapper; - @Mock - private Logger log; - @Test public void testCreateErrorCode_success() { // 准备傿•° @@ -297,7 +287,7 @@ public class SysErrorCodeServiceTest extends BaseDbUnitTest { @SafeVarargs private static SysErrorCodeDO randomInfErrorCodeDO(Consumer... consumers) { Consumer consumer = (o) -> { - o.setType(randomEle(InfConfigTypeEnum.values()).getType()); // ä¿è¯ key 的范围 + o.setType(randomEle(SysErrorCodeTypeEnum.values()).getType()); // ä¿è¯ key 的范围 }; return randomPojo(SysErrorCodeDO.class, ArrayUtils.append(consumer, consumers)); } diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/logger/SysLoginLogServiceImplTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/SysLoginLogServiceImplTest.java similarity index 88% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/logger/SysLoginLogServiceImplTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/SysLoginLogServiceImplTest.java index 820ee51677..bac9b5a6e5 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/logger/SysLoginLogServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/SysLoginLogServiceImplTest.java @@ -1,19 +1,18 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.logger; +package cn.iocoder.yudao.module.system.service.logger; import cn.hutool.core.util.RandomUtil; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils; -import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog.SysLoginLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.loginlog.SysLoginLogPageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.logger.SysLoginLogMapper; -import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginLogTypeEnum; -import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginResultEnum; -import cn.iocoder.yudao.adminserver.modules.system.service.logger.impl.SysLoginLogServiceImpl; +import cn.iocoder.yudao.module.system.controller.logger.vo.loginlog.SysLoginLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.logger.vo.loginlog.SysLoginLogPageReqVO; +import cn.iocoder.yudao.module.system.dal.mysql.logger.SysLoginLogMapper; +import cn.iocoder.yudao.module.system.enums.logger.SysLoginLogTypeEnum; +import cn.iocoder.yudao.module.system.enums.logger.SysLoginResultEnum; import cn.iocoder.yudao.framework.test.core.util.RandomUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; +import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.Import; diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/logger/SysOperateLogServiceImplTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/SysOperateLogServiceImplTest.java similarity index 91% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/logger/SysOperateLogServiceImplTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/SysOperateLogServiceImplTest.java index f375be35b1..7838defb92 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/logger/SysOperateLogServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/SysOperateLogServiceImplTest.java @@ -1,13 +1,11 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.logger; +package cn.iocoder.yudao.module.system.service.logger; import cn.hutool.core.map.MapUtil; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog.SysOperateLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog.SysOperateLogPageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.logger.SysOperateLogDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.logger.SysOperateLogMapper; -import cn.iocoder.yudao.adminserver.modules.system.service.logger.impl.SysOperateLogServiceImpl; -import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; +import cn.iocoder.yudao.module.system.controller.logger.vo.operatelog.SysOperateLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.logger.vo.operatelog.SysOperateLogPageReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysOperateLogDO; +import cn.iocoder.yudao.module.system.dal.mysql.logger.SysOperateLogMapper; +import cn.iocoder.yudao.module.system.service.user.SysUserService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.enums.common.SysSexEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; @@ -18,6 +16,7 @@ import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; import cn.iocoder.yudao.framework.operatelog.core.dto.OperateLogCreateReqDTO; import cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum; import cn.iocoder.yudao.framework.test.core.util.RandomUtils; +import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; import org.junit.jupiter.api.Test; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Import; diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/notice/SysNoticeServiceImplTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/notice/SysNoticeServiceImplTest.java similarity index 86% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/notice/SysNoticeServiceImplTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/notice/SysNoticeServiceImplTest.java index 8d1325544b..0d9144f752 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/notice/SysNoticeServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/notice/SysNoticeServiceImplTest.java @@ -1,16 +1,15 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.notice; +package cn.iocoder.yudao.module.system.service.notice; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.system.controller.notice.vo.SysNoticeCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.notice.vo.SysNoticePageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.notice.vo.SysNoticeUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.notice.SysNoticeDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.notice.SysNoticeMapper; -import cn.iocoder.yudao.adminserver.modules.system.enums.notice.SysNoticeTypeEnum; -import cn.iocoder.yudao.adminserver.modules.system.service.notice.impl.SysNoticeServiceImpl; +import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticeCreateReqVO; +import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticePageReqVO; +import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticeUpdateReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.notice.SysNoticeDO; +import cn.iocoder.yudao.module.system.dal.mysql.notice.SysNoticeMapper; +import cn.iocoder.yudao.module.system.enums.notice.SysNoticeTypeEnum; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; +import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.Import; @@ -19,7 +18,7 @@ import javax.annotation.Resource; import java.util.function.Consumer; import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.NOTICE_NOT_FOUND; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.NOTICE_NOT_FOUND; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysMenuServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/SysMenuServiceTest.java similarity index 91% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysMenuServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/SysMenuServiceTest.java index e9dab50a42..06209bb6da 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysMenuServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/SysMenuServiceTest.java @@ -1,20 +1,19 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.permission; +package cn.iocoder.yudao.module.system.service.permission; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.lang.Assert; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.menu.SysMenuCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.menu.SysMenuListReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.menu.SysMenuUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysMenuDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.permission.SysMenuMapper; -import cn.iocoder.yudao.adminserver.modules.system.enums.permission.MenuTypeEnum; -import cn.iocoder.yudao.adminserver.modules.system.mq.producer.permission.SysMenuProducer; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.impl.SysMenuServiceImpl; +import cn.iocoder.yudao.module.system.controller.permission.vo.menu.SysMenuCreateReqVO; +import cn.iocoder.yudao.module.system.controller.permission.vo.menu.SysMenuListReqVO; +import cn.iocoder.yudao.module.system.controller.permission.vo.menu.SysMenuUpdateReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysMenuDO; +import cn.iocoder.yudao.module.system.dal.mysql.permission.SysMenuMapper; +import cn.iocoder.yudao.module.system.enums.permission.MenuTypeEnum; +import cn.iocoder.yudao.module.system.mq.producer.permission.SysMenuProducer; import cn.iocoder.yudao.framework.common.util.spring.SpringAopUtils; import cn.iocoder.yudao.framework.test.core.util.RandomUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; +import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; import com.google.common.collect.Multimap; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -24,7 +23,7 @@ import org.springframework.context.annotation.Import; import javax.annotation.Resource; import java.util.*; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; @@ -87,12 +86,12 @@ public class SysMenuServiceTest extends BaseDbUnitTest { o.setParentId(parentId); o.setName("testSonName"); o.setType(MenuTypeEnum.MENU.getType()); - o.setStatus(RandomUtils.randomCommonStatus()); + o.setStatus(randomCommonStatus()); }); Long menuId = sysMenuService.createMenu(vo); //断言 - Assertions.assertNotNull(menuId); + assertNotNull(menuId); // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® SysMenuDO ret = menuMapper.selectById(menuId); assertPojoEquals(vo, ret); @@ -112,7 +111,7 @@ public class SysMenuServiceTest extends BaseDbUnitTest { o.setId(sonId); o.setParentId(parentId); o.setType(MenuTypeEnum.MENU.getType()); - o.setStatus(RandomUtils.randomCommonStatus()); + o.setStatus(randomCommonStatus()); o.setName("pppppp"); //修改åå­— }); sysMenuService.updateMenu(vo); @@ -135,7 +134,7 @@ public class SysMenuServiceTest extends BaseDbUnitTest { o.setId(sonId); o.setParentId(parentId); o.setType(MenuTypeEnum.MENU.getType()); - o.setStatus(RandomUtils.randomCommonStatus()); + o.setStatus(randomCommonStatus()); }); //断言 assertServiceException(() -> sysMenuService.updateMenu(vo), MENU_NOT_EXISTS); @@ -346,7 +345,7 @@ public class SysMenuServiceTest extends BaseDbUnitTest { } private SysMenuDO createMenuDO(MenuTypeEnum typeEnum, String menuName, Long parentId) { - return createMenuDO(typeEnum, menuName, parentId, RandomUtils.randomCommonStatus()); + return createMenuDO(typeEnum, menuName, parentId, randomCommonStatus()); } private SysMenuDO createMenuDO(MenuTypeEnum typeEnum, String menuName, Long parentId, Integer status) { diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysPermissionServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/SysPermissionServiceTest.java similarity index 93% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysPermissionServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/SysPermissionServiceTest.java index 6de00282f5..dde1a7bb76 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysPermissionServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/SysPermissionServiceTest.java @@ -1,19 +1,18 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.permission; +package cn.iocoder.yudao.module.system.service.permission; import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleMenuDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleMenuDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysUserRoleDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.permission.SysRoleMenuMapper; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.permission.SysUserRoleMapper; -import cn.iocoder.yudao.adminserver.modules.system.mq.producer.permission.SysPermissionProducer; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.impl.SysPermissionServiceImpl; +import cn.iocoder.yudao.module.system.dal.mysql.permission.SysRoleMenuMapper; +import cn.iocoder.yudao.module.system.dal.mysql.permission.SysUserRoleMapper; +import cn.iocoder.yudao.module.system.mq.producer.permission.SysPermissionProducer; +import cn.iocoder.yudao.module.system.service.dept.SysDeptService; import cn.iocoder.yudao.framework.datapermission.core.dept.service.dto.DeptDataPermissionRespDTO; import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.framework.security.core.enums.DataScopeEnum; +import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; import org.junit.jupiter.api.Test; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Import; diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysRoleServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/SysRoleServiceTest.java similarity index 92% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysRoleServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/SysRoleServiceTest.java index 87261a45e9..d58e68ad2a 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysRoleServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/SysRoleServiceTest.java @@ -1,19 +1,18 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.permission; +package cn.iocoder.yudao.module.system.service.permission; import cn.hutool.core.bean.BeanUtil; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.security.core.enums.DataScopeEnum; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role.SysRoleCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role.SysRolePageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.permission.vo.role.SysRoleUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.permission.vo.role.SysRoleCreateReqVO; +import cn.iocoder.yudao.module.system.controller.permission.vo.role.SysRolePageReqVO; +import cn.iocoder.yudao.module.system.controller.permission.vo.role.SysRoleUpdateReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.permission.SysRoleMapper; -import cn.iocoder.yudao.adminserver.modules.system.enums.permission.SysRoleTypeEnum; -import cn.iocoder.yudao.adminserver.modules.system.mq.producer.permission.SysRoleProducer; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.impl.SysRoleServiceImpl; +import cn.iocoder.yudao.module.system.dal.mysql.permission.SysRoleMapper; +import cn.iocoder.yudao.module.system.enums.permission.SysRoleTypeEnum; +import cn.iocoder.yudao.module.system.mq.producer.permission.SysRoleProducer; import cn.iocoder.yudao.framework.common.util.spring.SpringAopUtils; +import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; import org.junit.jupiter.api.Test; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Import; @@ -22,7 +21,7 @@ import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.max; diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsChannelServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsChannelServiceTest.java similarity index 88% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsChannelServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsChannelServiceTest.java index 4442751206..d3509f9e42 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsChannelServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsChannelServiceTest.java @@ -1,19 +1,18 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.sms; +package cn.iocoder.yudao.module.system.service.sms; import cn.hutool.core.bean.BeanUtil; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelPageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.sms.SysSmsChannelMapper; -import cn.iocoder.yudao.adminserver.modules.system.mq.producer.sms.SysSmsProducer; -import cn.iocoder.yudao.adminserver.modules.system.service.sms.impl.SysSmsChannelServiceImpl; +import cn.iocoder.yudao.module.system.controller.sms.vo.channel.SysSmsChannelCreateReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.channel.SysSmsChannelPageReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.channel.SysSmsChannelUpdateReqVO; +import cn.iocoder.yudao.module.system.dal.mysql.sms.SysSmsChannelMapper; +import cn.iocoder.yudao.module.system.mq.producer.sms.SysSmsProducer; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; import cn.iocoder.yudao.framework.sms.core.client.SmsClientFactory; +import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; import org.junit.jupiter.api.Test; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Import; @@ -23,8 +22,8 @@ import java.util.Date; import java.util.function.Consumer; import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.SMS_CHANNEL_HAS_CHILDREN; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.SMS_CHANNEL_NOT_EXISTS; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.SMS_CHANNEL_HAS_CHILDREN; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.SMS_CHANNEL_NOT_EXISTS; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.max; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*; @@ -33,11 +32,6 @@ import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; -/** -* {@link SysSmsChannelServiceImpl} çš„å•元测试类 -* -* @author èŠ‹é“æºç  -*/ @Import(SysSmsChannelServiceImpl.class) public class SysSmsChannelServiceTest extends BaseDbUnitTest { diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsLogServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsLogServiceTest.java similarity index 92% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsLogServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsLogServiceTest.java index fdeed2aa87..ae8e734e99 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsLogServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsLogServiceTest.java @@ -1,11 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.sms; +package cn.iocoder.yudao.module.system.service.sms; import cn.hutool.core.map.MapUtil; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogPageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.sms.SysSmsLogMapper; -import cn.iocoder.yudao.adminserver.modules.system.service.sms.impl.SysSmsLogServiceImpl; +import cn.iocoder.yudao.module.system.controller.sms.vo.log.SysSmsLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.log.SysSmsLogPageReqVO; +import cn.iocoder.yudao.module.system.dal.mysql.sms.SysSmsLogMapper; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO; import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsReceiveStatusEnum; import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsSendStatusEnum; @@ -14,6 +12,7 @@ import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; +import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.Import; @@ -29,11 +28,6 @@ import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomString; import static org.junit.jupiter.api.Assertions.assertEquals; -/** -* {@link SysSmsLogServiceImpl} çš„å•元测试类 -* -* @author èŠ‹é“æºç  -*/ @Import(SysSmsLogServiceImpl.class) public class SysSmsLogServiceTest extends BaseDbUnitTest { diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsTemplateServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsTemplateServiceTest.java similarity index 94% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsTemplateServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsTemplateServiceTest.java index a893ee2966..1ee2c90fbe 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsTemplateServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsTemplateServiceTest.java @@ -1,13 +1,11 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.sms; +package cn.iocoder.yudao.module.system.service.sms; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplatePageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.sms.SysSmsTemplateMapper; -import cn.iocoder.yudao.adminserver.modules.system.mq.producer.sms.SysSmsProducer; -import cn.iocoder.yudao.adminserver.modules.system.service.sms.impl.SysSmsTemplateServiceImpl; +import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplateCreateReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplateExportReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplatePageReqVO; +import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplateUpdateReqVO; +import cn.iocoder.yudao.module.system.dal.mysql.sms.SysSmsTemplateMapper; +import cn.iocoder.yudao.module.system.mq.producer.sms.SysSmsProducer; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsTemplateTypeEnum; @@ -20,6 +18,7 @@ import cn.iocoder.yudao.framework.sms.core.client.SmsClient; import cn.iocoder.yudao.framework.sms.core.client.SmsClientFactory; import cn.iocoder.yudao.framework.sms.core.client.SmsCommonResult; import cn.iocoder.yudao.framework.sms.core.client.dto.SmsTemplateRespDTO; +import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; import com.google.common.collect.Lists; import org.junit.jupiter.api.Test; import org.springframework.boot.test.mock.mockito.MockBean; @@ -30,7 +29,7 @@ import java.util.List; import java.util.function.Consumer; import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; @@ -39,11 +38,6 @@ import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; -/** -* {@link SysSmsTemplateServiceImpl} çš„å•元测试类 -* -* @author èŠ‹é“æºç  -*/ @Import(SysSmsTemplateServiceImpl.class) public class SysSmsTemplateServiceTest extends BaseDbUnitTest { diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/tenant/SysTenantServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/tenant/SysTenantServiceTest.java similarity index 89% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/tenant/SysTenantServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/tenant/SysTenantServiceTest.java index abb16e80e1..a6199f7060 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/tenant/SysTenantServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/tenant/SysTenantServiceTest.java @@ -1,22 +1,21 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.tenant; +package cn.iocoder.yudao.module.system.service.tenant; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.adminserver.modules.system.controller.tenant.vo.SysTenantCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.tenant.vo.SysTenantExportReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.tenant.vo.SysTenantPageReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.tenant.vo.SysTenantUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.tenant.SysTenantMapper; -import cn.iocoder.yudao.adminserver.modules.system.service.tenant.impl.SysTenantServiceImpl; +import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantCreateReqVO; +import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantExportReqVO; +import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantPageReqVO; +import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantUpdateReqVO; +import cn.iocoder.yudao.module.system.dal.mysql.tenant.SysTenantMapper; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.tenant.SysTenantDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.Import; import javax.annotation.Resource; import java.util.List; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.TENANT_NOT_EXISTS; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.TENANT_NOT_EXISTS; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/user/SysUserServiceImplTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/user/SysUserServiceImplTest.java similarity index 95% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/user/SysUserServiceImplTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/user/SysUserServiceImplTest.java index dc90a436ad..fc53a658be 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/user/SysUserServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/user/SysUserServiceImplTest.java @@ -1,18 +1,16 @@ -package cn.iocoder.yudao.adminserver.modules.system.service.user; +package cn.iocoder.yudao.module.system.service.user; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.RandomUtil; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.*; +import cn.iocoder.yudao.module.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO; +import cn.iocoder.yudao.module.system.controller.user.vo.profile.SysUserProfileUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.user.vo.user.*; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.user.SysUserMapper; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysPostService; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService; -import cn.iocoder.yudao.adminserver.modules.system.service.user.impl.SysUserServiceImpl; +import cn.iocoder.yudao.module.system.dal.mysql.user.SysUserMapper; +import cn.iocoder.yudao.module.system.service.dept.SysDeptService; +import cn.iocoder.yudao.module.system.service.dept.SysPostService; +import cn.iocoder.yudao.module.system.service.permission.SysPermissionService; import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.enums.common.SysSexEnum; @@ -22,6 +20,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; +import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; import org.junit.jupiter.api.Test; import org.mockito.stubbing.Answer; import org.springframework.boot.test.mock.mockito.MockBean; @@ -35,13 +34,11 @@ import java.util.function.Consumer; import static cn.hutool.core.util.RandomUtil.randomBytes; import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*; -import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static java.util.Collections.singleton; import static org.assertj.core.util.Lists.newArrayList; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/test/BaseDbAndRedisUnitTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/test/BaseDbAndRedisUnitTest.java new file mode 100644 index 0000000000..e5b5cdb548 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/test/BaseDbAndRedisUnitTest.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.system.test; + +import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration; +import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration; +import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; +import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; +import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; +import org.redisson.spring.starter.RedissonAutoConfiguration; +import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.jdbc.Sql; + +/** + * ä¾èµ–内存 DB + Redis çš„å•元测试 + * + * 相比 {@link BaseDbUnitTest} æ¥è¯´ï¼Œé¢å¤–增加了内存 Redis + * + * @author èŠ‹é“æºç  + */ +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseDbAndRedisUnitTest.Application.class) +@ActiveProfiles("unit-test") // 设置使用 application-unit-test é…置文件 +@Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) // æ¯ä¸ªå•元测试结æŸåŽï¼Œæ¸…ç† DB +public class BaseDbAndRedisUnitTest { + + @Import({ + // DB é…置类 + YudaoDataSourceAutoConfiguration.class, // 自己的 DB é…置类 + DataSourceAutoConfiguration.class, // Spring DB 自动é…置类 + DataSourceTransactionManagerAutoConfiguration.class, // Spring 事务自动é…置类 + DruidDataSourceAutoConfigure.class, // Druid 自动é…置类 + // MyBatis é…置类 + YudaoMybatisAutoConfiguration.class, // 自己的 MyBatis é…置类 + MybatisPlusAutoConfiguration.class, // MyBatis 的自动é…置类 + // Redis é…置类 + RedisTestConfiguration.class, // Redis 测试é…置类,用于å¯åЍ RedisServer + RedisAutoConfiguration.class, // Spring Redis 自动é…置类 + YudaoRedisAutoConfiguration.class, // 自己的 Redis é…置类 + RedissonAutoConfiguration.class, // Redisson 自动高é…置类 + }) + public static class Application { + } + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/test/BaseDbUnitTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/test/BaseDbUnitTest.java new file mode 100644 index 0000000000..053da2c7b5 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/test/BaseDbUnitTest.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.module.system.test; + +import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration; +import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration; +import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; +import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.jdbc.Sql; + +/** + * ä¾èµ–内存 DB çš„å•元测试 + * + * 注æ„,Service å±‚åŒæ ·é€‚用。对于 Service 层的å•元测试,我们针对自己模å—çš„ Mapper 走的是 H2 内存数æ®åº“,针对别的模å—çš„ Service 走的是 Mock 方法 + * + * @author èŠ‹é“æºç  + */ +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseDbUnitTest.Application.class) +@ActiveProfiles("unit-test") // 设置使用 application-unit-test é…置文件 +@Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) // æ¯ä¸ªå•元测试结æŸåŽï¼Œæ¸…ç† DB +public class BaseDbUnitTest { + + @Import({ + // DB é…置类 + YudaoDataSourceAutoConfiguration.class, // 自己的 DB é…置类 + DataSourceAutoConfiguration.class, // Spring DB 自动é…置类 + DataSourceTransactionManagerAutoConfiguration.class, // Spring 事务自动é…置类 + DruidDataSourceAutoConfigure.class, // Druid 自动é…置类 + // MyBatis é…置类 + YudaoMybatisAutoConfiguration.class, // 自己的 MyBatis é…置类 + MybatisPlusAutoConfiguration.class, // MyBatis 的自动é…置类 + }) + public static class Application { + } + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/test/BaseRedisUnitTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/test/BaseRedisUnitTest.java new file mode 100644 index 0000000000..0e3472f4fc --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/test/BaseRedisUnitTest.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.system.test; + +import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; +import org.redisson.spring.starter.RedissonAutoConfiguration; +import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.ActiveProfiles; + +/** + * ä¾èµ–内存 Redis çš„å•元测试 + * + * 相比 {@link BaseDbUnitTest} æ¥è¯´ï¼Œä»Žå†…å­˜ DB 改æˆäº†å†…å­˜ Redis + * + * @author èŠ‹é“æºç  + */ +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseRedisUnitTest.Application.class) +@ActiveProfiles("unit-test") // 设置使用 application-unit-test é…置文件 +public class BaseRedisUnitTest { + + @Import({ + // Redis é…置类 + RedisTestConfiguration.class, // Redis 测试é…置类,用于å¯åЍ RedisServer + RedisAutoConfiguration.class, // Spring Redis 自动é…置类 + YudaoRedisAutoConfiguration.class, // 自己的 Redis é…置类 + RedissonAutoConfiguration.class, // Redisson 自动高é…置类 + }) + public static class Application { + } + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/test/RedisTestConfiguration.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/test/RedisTestConfiguration.java new file mode 100644 index 0000000000..71c912d45e --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/test/RedisTestConfiguration.java @@ -0,0 +1,30 @@ +package cn.iocoder.yudao.module.system.test; + +import com.github.fppt.jedismock.RedisServer; +import org.springframework.boot.autoconfigure.data.redis.RedisProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Lazy; + +import java.io.IOException; + +@Configuration(proxyBeanMethods = false) +@Lazy(false) // ç¦æ­¢å»¶è¿ŸåŠ è½½ +@EnableConfigurationProperties(RedisProperties.class) +public class RedisTestConfiguration { + + /** + * 创建模拟的 Redis Server æœåС噍 + */ + @Bean + public RedisServer redisServer(RedisProperties properties) throws IOException { + RedisServer redisServer = new RedisServer(properties.getPort()); + // TODO 芋艿:一次执行多个å•元测试时,貌似创建多个 spring 容器,导致ä¸è¿›è¡Œ stop。这样,就导致端å£è¢«å ç”¨ï¼Œæ— æ³•å¯åŠ¨ã€‚ã€‚ã€‚ + try { + redisServer.start(); + } catch (Exception ignore) {} + return redisServer; + } + +} From 117914d92b7398b6508d67c1b6f3db898765d7b8 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sat, 29 Jan 2022 21:29:54 +0800 Subject: [PATCH 10/47] =?UTF-8?q?=E5=A4=9A=E6=A8=A1=E5=9D=97=E9=87=8D?= =?UTF-8?q?=E6=9E=84=204=EF=BC=9Asystem=20=E6=A8=A1=E5=9D=97=E7=9A=84?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=EF=BC=8C=E5=8E=BB=E9=99=A4=20Sys?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- http-client.env.json | 7 +- .../src/main/resources/application.yaml | 6 +- .../YudaoWebSecurityConfigurerAdapter.java | 5 +- .../app/auth/AppAuthController.http | 16 +-- .../app/auth/AppAuthController.java | 9 +- .../app/auth/vo/AppAuthCheckCodeReqVO.java | 2 +- .../app/auth/vo/AppAuthLoginReqVO.java | 2 +- .../app/auth/vo/AppAuthLoginRespVO.java | 2 +- .../auth/vo/AppAuthResetPasswordReqVO.java | 2 +- .../app/auth/vo/AppAuthSendSmsReqVO.java | 2 +- .../app/auth/vo/AppAuthSmsLoginReqVO.java | 2 +- .../app/auth/vo/AppAuthSocialBindReqVO.java | 2 +- .../app/auth/vo/AppAuthSocialLogin2ReqVO.java | 2 +- .../app/auth/vo/AppAuthSocialLoginReqVO.java | 2 +- .../app/auth/vo/AppAuthSocialUnbindReqVO.java | 2 +- .../auth/vo/AppAuthUpdatePasswordReqVO.java | 2 +- .../member/controller/app/package-info.java | 1 - .../app/user/AppUserController.java | 2 +- .../app/user/vo/AppUserInfoRespVO.java | 2 +- .../app/user/vo/AppUserUpdateMobileReqVO.java | 2 +- .../member/controller/package-info.java | 2 +- .../member/service/auth/AuthServiceImpl.java | 2 +- .../member/service/user/UserServiceImpl.java | 2 +- .../auth/AuthController.http} | 16 +-- .../auth/AuthController.java} | 58 ++++----- .../auth/UserSessionController.java} | 22 ++-- .../auth/vo/auth/AuthLoginReqVO.java} | 6 +- .../auth/vo/auth/AuthLoginRespVO.java} | 6 +- .../auth/vo/auth/AuthMenuRespVO.java} | 8 +- .../vo/auth/AuthPermissionInfoRespVO.java} | 6 +- .../auth/vo/auth/AuthSocialBindReqVO.java} | 6 +- .../auth/vo/auth/AuthSocialLogin2ReqVO.java} | 6 +- .../auth/vo/auth/AuthSocialLoginReqVO.java} | 6 +- .../auth/vo/auth/AuthSocialUnbindReqVO.java} | 6 +- .../session/UserSessionPageItemRespVO.java} | 6 +- .../vo/session/UserSessionPageReqVO.java} | 6 +- .../common/CaptchaController.http} | 0 .../common/CaptchaController.java} | 14 +-- .../common/vo/CaptchaImageRespVO.java} | 9 +- .../dept/DeptController.java} | 32 ++--- .../dept/PostController.java} | 38 +++--- .../dept/vo/dept/DeptBaseVO.java} | 4 +- .../dept/vo/dept/DeptCreateReqVO.java} | 6 +- .../dept/vo/dept/DeptListReqVO.java} | 6 +- .../dept/vo/dept/DeptRespVO.java} | 6 +- .../dept/vo/dept/DeptSimpleRespVO.java} | 6 +- .../dept/vo/dept/DeptUpdateReqVO.java} | 6 +- .../dept/vo/post/PostBaseVO.java} | 4 +- .../admin/dept/vo/post/PostCreateReqVO.java | 11 ++ .../dept/vo/post/PostExcelVO.java} | 4 +- .../dept/vo/post/PostExportReqVO.java} | 6 +- .../dept/vo/post/PostListReqVO.java} | 6 +- .../dept/vo/post/PostPageReqVO.java} | 6 +- .../dept/vo/post/PostRespVO.java} | 6 +- .../dept/vo/post/PostSimpleRespVO.java} | 6 +- .../dept/vo/post/PostUpdateReqVO.java} | 6 +- .../dict/DictDataController.http} | 1 + .../dict/DictDataController.java} | 36 +++--- .../dict/DictTypeController.java} | 42 +++---- .../dict/vo/data/DictDataBaseVO.java} | 4 +- .../dict/vo/data/DictDataCreateReqVO.java | 12 ++ .../dict/vo/data/DictDataExcelVO.java} | 4 +- .../dict/vo/data/DictDataExportReqVO.java} | 6 +- .../dict/vo/data/DictDataPageReqVO.java} | 6 +- .../dict/vo/data/DictDataRespVO.java} | 6 +- .../dict/vo/data/DictDataSimpleRespVO.java} | 6 +- .../dict/vo/data/DictDataUpdateReqVO.java} | 6 +- .../dict/vo/type/DictTypeBaseVO.java} | 4 +- .../dict/vo/type/DictTypeCreateReqVO.java} | 6 +- .../dict/vo/type/DictTypeExcelVO.java} | 4 +- .../dict/vo/type/DictTypeExportReqVO.java} | 6 +- .../dict/vo/type/DictTypePageReqVO.java} | 6 +- .../dict/vo/type/DictTypeRespVO.java} | 6 +- .../dict/vo/type/DictTypeSimpleRespVO.java} | 6 +- .../dict/vo/type/DictTypeUpdateReqVO.java} | 6 +- .../errorcode/ErrorCodeController.http} | 5 +- .../errorcode/ErrorCodeController.java} | 40 +++--- .../errorcode/vo/ErrorCodeBaseVO.java} | 4 +- .../errorcode/vo/ErrorCodeCreateReqVO.java} | 6 +- .../errorcode/vo/ErrorCodeExcelVO.java} | 4 +- .../errorcode/vo/ErrorCodeExportReqVO.java} | 6 +- .../errorcode/vo/ErrorCodePageReqVO.java} | 6 +- .../errorcode/vo/ErrorCodeRespVO.java} | 6 +- .../errorcode/vo/ErrorCodeUpdateReqVO.java} | 6 +- .../logger/LoginLogController.java} | 30 ++--- .../logger/OperateLogController.http} | 1 + .../logger/OperateLogController.java} | 42 +++---- .../logger/vo/loginlog/LoginLogBaseVO.java} | 4 +- .../logger/vo/loginlog/LoginLogExcelVO.java} | 4 +- .../vo/loginlog/LoginLogExportReqVO.java} | 6 +- .../vo/loginlog/LoginLogPageReqVO.java} | 6 +- .../logger/vo/loginlog/LoginLogRespVO.java} | 6 +- .../vo/operatelog/OperateLogBaseVO.java} | 4 +- .../vo/operatelog/OperateLogExcelVO.java} | 4 +- .../vo/operatelog/OperateLogExportReqVO.java} | 6 +- .../vo/operatelog/OperateLogPageReqVO.java} | 6 +- .../vo/operatelog/OperateLogRespVO.java} | 6 +- .../notice/NoticeController.java} | 32 ++--- .../notice/vo/NoticeBaseVO.java} | 4 +- .../admin/notice/vo/NoticeCreateReqVO.java | 11 ++ .../notice/vo/NoticePageReqVO.java} | 6 +- .../notice/vo/NoticeRespVO.java} | 6 +- .../notice/vo/NoticeUpdateReqVO.java} | 6 +- .../permission/MenuController.http} | 1 + .../permission/MenuController.java} | 44 +++---- .../permission/PermissionController.java} | 26 ++-- .../permission/RoleController.http} | 6 +- .../permission/RoleController.java} | 36 +++--- .../permission/vo/menu/MenuBaseVO.java} | 4 +- .../permission/vo/menu/MenuCreateReqVO.java | 10 ++ .../permission/vo/menu/MenuListReqVO.java} | 6 +- .../permission/vo/menu/MenuRespVO.java} | 6 +- .../permission/vo/menu/MenuSimpleRespVO.java} | 6 +- .../permission/vo/menu/MenuUpdateReqVO.java} | 6 +- .../PermissionAssignRoleDataScopeReqVO.java} | 6 +- .../PermissionAssignRoleMenuReqVO.java} | 6 +- .../PermissionAssignUserRoleReqVO.java} | 6 +- .../permission/vo/role/RoleBaseVO.java} | 4 +- .../permission/vo/role/RoleCreateReqVO.java | 12 ++ .../permission/vo/role/RoleExcelVO.java} | 4 +- .../permission/vo/role/RoleExportReqVO.java} | 6 +- .../permission/vo/role/RolePageReqVO.java} | 6 +- .../permission/vo/role/RoleRespVO.java} | 6 +- .../permission/vo/role/RoleSimpleRespVO.java} | 6 +- .../permission/vo/role/RoleUpdateReqVO.java} | 6 +- .../vo/role/RoleUpdateStatusReqVO.java} | 10 +- .../sms/SmsCallbackController.java | 4 +- .../sms/SmsChannelController.java} | 30 ++--- .../sms/SmsLogController.java} | 30 ++--- .../sms/SmsTemplateController.http} | 3 +- .../sms/SmsTemplateController.java} | 34 ++--- .../sms/vo/channel/SmsChannelBaseVO.java} | 4 +- .../vo/channel/SmsChannelCreateReqVO.java} | 6 +- .../sms/vo/channel/SmsChannelPageReqVO.java} | 6 +- .../sms/vo/channel/SmsChannelRespVO.java} | 6 +- .../vo/channel/SmsChannelSimpleRespVO.java} | 6 +- .../vo/channel/SmsChannelUpdateReqVO.java} | 6 +- .../sms/vo/log/SmsLogExcelVO.java} | 4 +- .../sms/vo/log/SmsLogExportReqVO.java} | 6 +- .../sms/vo/log/SmsLogPageReqVO.java} | 6 +- .../sms/vo/log/SysSmsLogRespVO.java | 4 +- .../sms/vo/template/SmsTemplateBaseVO.java} | 4 +- .../vo/template/SmsTemplateCreateReqVO.java | 14 +++ .../sms/vo/template/SmsTemplateExcelVO.java} | 4 +- .../vo/template/SmsTemplateExportReqVO.java} | 6 +- .../vo/template/SmsTemplatePageReqVO.java} | 6 +- .../sms/vo/template/SmsTemplateRespVO.java} | 6 +- .../vo/template/SmsTemplateSendReqVO.java} | 6 +- .../vo/template/SmsTemplateUpdateReqVO.java} | 6 +- .../tenant/TenantController.java} | 36 +++--- .../tenant/vo/TenantBaseVO.java} | 4 +- .../admin/tenant/vo/TenantCreateReqVO.java | 12 ++ .../tenant/vo/TenantExcelVO.java} | 4 +- .../tenant/vo/TenantExportReqVO.java} | 6 +- .../tenant/vo/TenantPageReqVO.java} | 6 +- .../tenant/vo/TenantRespVO.java} | 6 +- .../tenant/vo/TenantUpdateReqVO.java} | 6 +- .../user/UserController.http} | 4 +- .../user/UserController.java} | 60 ++++----- .../user/UserProfileController.http} | 3 +- .../user/UserProfileController.java} | 48 ++++---- .../user/vo/profile/UserProfileRespVO.java} | 8 +- .../UserProfileUpdatePasswordReqVO.java} | 6 +- .../vo/profile/UserProfileUpdateReqVO.java} | 6 +- .../user/vo/user/UserBaseVO.java} | 4 +- .../user/vo/user/UserCreateReqVO.java} | 6 +- .../user/vo/user/UserExcelVO.java} | 4 +- .../user/vo/user/UserExportReqVO.java} | 6 +- .../user/vo/user/UserImportExcelVO.java} | 4 +- .../user/vo/user/UserImportRespVO.java} | 6 +- .../user/vo/user/UserPageItemRespVO.java} | 6 +- .../user/vo/user/UserPageReqVO.java} | 6 +- .../user/vo/user/UserRespVO.java} | 6 +- .../user/vo/user/UserSimpleRespVO.java} | 4 +- .../vo/user/UserUpdatePasswordReqVO.java} | 6 +- .../user/vo/user/UserUpdateReqVO.java} | 6 +- .../user/vo/user/UserUpdateStatusReqVO.java} | 6 +- .../system/controller/app/package-info.java | 4 + .../dept/vo/post/SysPostCreateReqVO.java | 11 -- .../dict/vo/data/SysDictDataCreateReqVO.java | 12 -- .../errorcode/vo/SysErrorCodeCreateReqVO.java | 14 --- .../notice/vo/SysNoticeCreateReqVO.java | 11 -- .../system/controller/package-info.java | 6 + .../vo/menu/SysMenuCreateReqVO.java | 10 -- .../vo/role/SysRoleCreateReqVO.java | 12 -- .../tenant/vo/SysTenantCreateReqVO.java | 12 -- .../{SysAuthConvert.java => AuthConvert.java} | 30 ++--- .../convert/auth/SysUserSessionConvert.java | 15 --- .../convert/auth/UserSessionConvert.java | 15 +++ .../system/convert/common/CaptchaConvert.java | 17 +++ .../convert/common/SysCaptchaConvert.java | 17 --- .../system/convert/dept/DeptConvert.java | 28 +++++ .../system/convert/dept/PostConvert.java | 28 +++++ .../system/convert/dept/SysDeptConvert.java | 28 ----- .../system/convert/dept/SysPostConvert.java | 28 ----- .../system/convert/dict/DictDataConvert.java | 34 +++++ .../system/convert/dict/DictTypeConvert.java | 28 +++++ .../convert/dict/SysDictDataConvert.java | 34 ----- .../convert/dict/SysDictTypeConvert.java | 28 ----- .../convert/errorcode/ErrorCodeConvert.java | 42 +++++++ .../errorcode/SysErrorCodeConvert.java | 42 ------- .../convert/logger/LoginLogConvert.java | 21 ++++ ...LogConvert.java => OperateLogConvert.java} | 22 ++-- .../convert/logger/SysLoginLogConvert.java | 21 ---- .../system/convert/notice/NoticeConvert.java | 24 ++++ .../convert/notice/SysNoticeConvert.java | 24 ---- .../convert/permission/MenuConvert.java | 28 +++++ .../convert/permission/RoleConvert.java | 25 ++++ .../convert/permission/SysMenuConvert.java | 28 ----- .../convert/permission/SysRoleConvert.java | 25 ---- .../system/convert/sms/SmsChannelConvert.java | 39 ++++++ ...sSmsLogConvert.java => SmsLogConvert.java} | 10 +- .../convert/sms/SmsTemplateConvert.java | 31 +++++ .../convert/sms/SysSmsChannelConvert.java | 39 ------ .../convert/sms/SysSmsTemplateConvert.java | 31 ----- .../convert/tenant/SysTenantConvert.java | 36 ------ .../system/convert/tenant/TenantConvert.java | 36 ++++++ .../system/convert/user/SysUserConvert.java | 49 -------- .../system/convert/user/UserConvert.java | 49 ++++++++ .../{SysDictTypeDO.java => DictTypeDO.java} | 4 +- .../{SysErrorCodeDO.java => ErrorCodeDO.java} | 8 +- ...SysOperateLogDO.java => OperateLogDO.java} | 4 +- .../{SysNoticeDO.java => NoticeDO.java} | 8 +- .../{SysMenuDO.java => MenuDO.java} | 4 +- .../{SysRoleMenuDO.java => RoleMenuDO.java} | 4 +- .../dal/mysql/auth/SysUserSessionMapper.java | 4 +- .../system/dal/mysql/dept/SysDeptMapper.java | 4 +- .../system/dal/mysql/dept/SysPostMapper.java | 8 +- .../dal/mysql/dict/SysDictDataMapper.java | 8 +- .../dal/mysql/dict/SysDictTypeMapper.java | 24 ++-- .../mysql/errorcode/SysErrorCodeMapper.java | 28 ++--- ...oginLogMapper.java => LoginLogMapper.java} | 20 +-- ...teLogMapper.java => OperateLogMapper.java} | 16 +-- .../dal/mysql/notice/SysNoticeMapper.java | 10 +- .../dal/mysql/permission/SysMenuMapper.java | 24 ++-- .../dal/mysql/permission/SysRoleMapper.java | 8 +- .../mysql/permission/SysRoleMenuMapper.java | 18 +-- .../dal/mysql/sms/SysSmsChannelMapper.java | 4 +- .../system/dal/mysql/sms/SysSmsLogMapper.java | 8 +- .../dal/mysql/sms/SysSmsTemplateMapper.java | 8 +- .../dal/mysql/tenant/SysTenantMapper.java | 8 +- .../system/dal/mysql/user/SysUserMapper.java | 8 +- .../dal/redis/SysRedisKeyConstants.java | 3 +- ...tchaRedisDAO.java => CaptchaRedisDAO.java} | 2 +- ...Constants.java => ErrorCodeConstants.java} | 2 +- ...deTypeEnum.java => ErrorCodeTypeEnum.java} | 4 +- ...LogTypeEnum.java => LoginLogTypeEnum.java} | 2 +- ...inResultEnum.java => LoginResultEnum.java} | 2 +- ...oticeTypeEnum.java => NoticeTypeEnum.java} | 2 +- ...SysRoleTypeEnum.java => RoleTypeEnum.java} | 2 +- ....java => DataPermissionConfiguration.java} | 4 +- .../config/ErrorCodeConfiguration.java | 1 + ...outJob.java => UserSessionTimeoutJob.java} | 6 +- ...Consumer.java => DeptRefreshConsumer.java} | 12 +- ...umer.java => DictDataRefreshConsumer.java} | 8 +- ...endConsumer.java => MailSendConsumer.java} | 7 +- ...Consumer.java => MenuRefreshConsumer.java} | 12 +- ...umer.java => RoleMenuRefreshConsumer.java} | 12 +- ...Consumer.java => RoleRefreshConsumer.java} | 12 +- ...er.java => SmsChannelRefreshConsumer.java} | 12 +- ...SendConsumer.java => SmsSendConsumer.java} | 2 +- ...r.java => SmsTemplateRefreshConsumer.java} | 8 +- ...shMessage.java => DeptRefreshMessage.java} | 2 +- ...ssage.java => DictDataRefreshMessage.java} | 2 +- ...lSendMessage.java => MailSendMessage.java} | 2 +- ...shMessage.java => MenuRefreshMessage.java} | 2 +- ...ssage.java => RoleMenuRefreshMessage.java} | 2 +- ...shMessage.java => RoleRefreshMessage.java} | 2 +- ...age.java => SmsChannelRefreshMessage.java} | 2 +- ...ge.java => SmsTemplateRefreshMessage.java} | 2 +- ...SysDeptProducer.java => DeptProducer.java} | 8 +- ...ataProducer.java => DictDataProducer.java} | 8 +- ...SysMenuProducer.java => MenuProducer.java} | 8 +- ...nProducer.java => PermissionProducer.java} | 8 +- ...SysRoleProducer.java => RoleProducer.java} | 8 +- .../{SysSmsProducer.java => SmsProducer.java} | 14 +-- .../{SysAuthService.java => AuthService.java} | 12 +- ...hServiceImpl.java => AuthServiceImpl.java} | 75 ++++++----- ...onService.java => UserSessionService.java} | 6 +- ...eImpl.java => UserSessionServiceImpl.java} | 19 ++- ...aptchaService.java => CaptchaService.java} | 6 +- ...rviceImpl.java => CaptchaServiceImpl.java} | 15 ++- .../{SysDeptService.java => DeptService.java} | 14 +-- ...tServiceImpl.java => DeptServiceImpl.java} | 27 ++-- .../{SysPostService.java => PostService.java} | 18 +-- ...tServiceImpl.java => PostServiceImpl.java} | 27 ++-- ...tDataService.java => DictDataService.java} | 18 +-- ...viceImpl.java => DictDataServiceImpl.java} | 40 +++--- ...tTypeService.java => DictTypeService.java} | 26 ++-- ...viceImpl.java => DictTypeServiceImpl.java} | 46 +++---- ...CodeService.java => ErrorCodeService.java} | 22 ++-- ...iceImpl.java => ErrorCodeServiceImpl.java} | 57 +++++---- ...inLogService.java => LoginLogService.java} | 10 +- .../service/logger/LoginLogServiceImpl.java | 32 +++++ ...LogService.java => OperateLogService.java} | 12 +- ...ceImpl.java => OperateLogServiceImpl.java} | 29 +++-- .../logger/SysLoginLogServiceImpl.java | 33 ----- ...sNoticeService.java => NoticeService.java} | 18 +-- ...erviceImpl.java => NoticeServiceImpl.java} | 29 +++-- .../{SysMenuService.java => MenuService.java} | 28 ++--- ...uServiceImpl.java => MenuServiceImpl.java} | 64 +++++----- ...ionService.java => PermissionService.java} | 8 +- ...ceImpl.java => PermissionServiceImpl.java} | 36 +++--- .../{SysRoleService.java => RoleService.java} | 18 +-- ...eServiceImpl.java => RoleServiceImpl.java} | 40 +++--- ...nelService.java => SmsChannelService.java} | 14 +-- ...ceImpl.java => SmsChannelServiceImpl.java} | 34 +++-- ...sSmsLogService.java => SmsLogService.java} | 10 +- ...erviceImpl.java => SmsLogServiceImpl.java} | 11 +- ...teService.java => SmsTemplateService.java} | 18 +-- ...eImpl.java => SmsTemplateServiceImpl.java} | 34 +++-- ...sTenantService.java => TenantService.java} | 18 +-- ...erviceImpl.java => TenantServiceImpl.java} | 27 ++-- .../{SysUserService.java => UserService.java} | 22 ++-- ...rServiceImpl.java => UserServiceImpl.java} | 55 ++++----- ...ImplTest.java => AuthServiceImplTest.java} | 70 +++++------ ...t.java => UserSessionServiceImplTest.java} | 16 +-- ...rviceTest.java => CaptchaServiceTest.java} | 14 +-- ...tServiceTest.java => DeptServiceTest.java} | 36 +++--- ...tServiceTest.java => PostServiceTest.java} | 33 +++-- ...viceTest.java => DictDataServiceTest.java} | 43 +++---- ...viceTest.java => DictTypeServiceTest.java} | 58 ++++----- ...iceTest.java => ErrorCodeServiceTest.java} | 92 +++++++------- ...Test.java => LoginLogServiceImplTest.java} | 34 ++--- ...st.java => OperateLogServiceImplTest.java} | 34 ++--- ...plTest.java => NoticeServiceImplTest.java} | 62 +++++----- ...uServiceTest.java => MenuServiceTest.java} | 116 +++++++++--------- ...ceTest.java => PermissionServiceTest.java} | 44 +++---- ...eServiceTest.java => RoleServiceTest.java} | 76 ++++++------ ...ceTest.java => SmsChannelServiceTest.java} | 30 ++--- ...erviceTest.java => SmsLogServiceTest.java} | 14 +-- ...eTest.java => SmsTemplateServiceTest.java} | 32 ++--- ...erviceTest.java => TenantServiceTest.java} | 31 ++--- ...ImplTest.java => UserServiceImplTest.java} | 59 ++++----- 更新日志.md | 3 + 335 files changed, 2481 insertions(+), 2498 deletions(-) delete mode 100644 yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/package-info.java rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{auth/SysAuthController.http => admin/auth/AuthController.http} (61%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{auth/SysAuthController.java => admin/auth/AuthController.java} (73%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{auth/SysUserSessionController.java => admin/auth/UserSessionController.java} (78%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{auth/vo/auth/SysAuthLoginReqVO.java => admin/auth/vo/auth/AuthLoginReqVO.java} (89%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{auth/vo/auth/SysAuthLoginRespVO.java => admin/auth/vo/auth/AuthLoginRespVO.java} (69%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{auth/vo/auth/SysAuthMenuRespVO.java => admin/auth/vo/auth/AuthMenuRespVO.java} (84%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{auth/vo/auth/SysAuthPermissionInfoRespVO.java => admin/auth/vo/auth/AuthPermissionInfoRespVO.java} (81%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{auth/vo/auth/SysAuthSocialBindReqVO.java => admin/auth/vo/auth/AuthSocialBindReqVO.java} (85%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{auth/vo/auth/SysAuthSocialLogin2ReqVO.java => admin/auth/vo/auth/AuthSocialLogin2ReqVO.java} (89%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{auth/vo/auth/SysAuthSocialLoginReqVO.java => admin/auth/vo/auth/AuthSocialLoginReqVO.java} (85%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{auth/vo/auth/SysAuthSocialUnbindReqVO.java => admin/auth/vo/auth/AuthSocialUnbindReqVO.java} (83%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{auth/vo/session/SysUserSessionPageItemRespVO.java => admin/auth/vo/session/UserSessionPageItemRespVO.java} (78%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{auth/vo/session/SysUserSessionPageReqVO.java => admin/auth/vo/session/UserSessionPageReqVO.java} (71%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{common/SysCaptchaController.http => admin/common/CaptchaController.http} (100%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{common/SysCaptchaController.java => admin/common/CaptchaController.java} (61%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{common/vo/SysCaptchaImageRespVO.java => admin/common/vo/CaptchaImageRespVO.java} (64%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dept/SysDeptController.java => admin/dept/DeptController.java} (73%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dept/SysPostController.java => admin/dept/PostController.java} (73%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dept/vo/dept/SysDeptBaseVO.java => admin/dept/vo/dept/DeptBaseVO.java} (94%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dept/vo/dept/SysDeptCreateReqVO.java => admin/dept/vo/dept/DeptCreateReqVO.java} (52%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dept/vo/dept/SysDeptListReqVO.java => admin/dept/vo/dept/DeptListReqVO.java} (71%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dept/vo/dept/SysDeptRespVO.java => admin/dept/vo/dept/DeptRespVO.java} (77%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dept/vo/dept/SysDeptSimpleRespVO.java => admin/dept/vo/dept/DeptSimpleRespVO.java} (77%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dept/vo/dept/SysDeptUpdateReqVO.java => admin/dept/vo/dept/DeptUpdateReqVO.java} (69%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dept/vo/post/SysPostBaseVO.java => admin/dept/vo/post/PostBaseVO.java} (93%) create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostCreateReqVO.java rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dept/vo/post/SysPostExcelVO.java => admin/dept/vo/post/PostExcelVO.java} (88%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dept/vo/post/SysPostExportReqVO.java => admin/dept/vo/post/PostExportReqVO.java} (69%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dept/vo/post/SysPostListReqVO.java => admin/dept/vo/post/PostListReqVO.java} (72%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dept/vo/post/SysPostPageReqVO.java => admin/dept/vo/post/PostPageReqVO.java} (78%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dept/vo/post/SysPostRespVO.java => admin/dept/vo/post/PostRespVO.java} (72%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dept/vo/post/SysPostSimpleRespVO.java => admin/dept/vo/post/PostSimpleRespVO.java} (73%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dept/vo/post/SysPostUpdateReqVO.java => admin/dept/vo/post/PostUpdateReqVO.java} (69%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dict/SysDictDataController.http => admin/dict/DictDataController.http} (80%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dict/SysDictDataController.java => admin/dict/DictDataController.java} (71%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dict/SysDictTypeController.java => admin/dict/DictTypeController.java} (66%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dict/vo/data/SysDictDataBaseVO.java => admin/dict/vo/data/DictDataBaseVO.java} (94%) create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataCreateReqVO.java rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dict/vo/data/SysDictDataExcelVO.java => admin/dict/vo/data/DictDataExcelVO.java} (88%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dict/vo/data/SysDictDataExportReqVO.java => admin/dict/vo/data/DictDataExportReqVO.java} (80%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dict/vo/data/SysDictDataPageReqVO.java => admin/dict/vo/data/DictDataPageReqVO.java} (81%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dict/vo/data/SysDictDataRespVO.java => admin/dict/vo/data/DictDataRespVO.java} (75%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dict/vo/data/SysDictDataSimpleRespVO.java => admin/dict/vo/data/DictDataSimpleRespVO.java} (72%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dict/vo/data/SysDictDataUpdateReqVO.java => admin/dict/vo/data/DictDataUpdateReqVO.java} (68%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dict/vo/type/SysDictTypeBaseVO.java => admin/dict/vo/type/DictTypeBaseVO.java} (90%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dict/vo/type/SysDictTypeCreateReqVO.java => admin/dict/vo/type/DictTypeCreateReqVO.java} (73%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dict/vo/type/SysDictTypeExcelVO.java => admin/dict/vo/type/DictTypeExcelVO.java} (86%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dict/vo/type/SysDictTypeExportReqVO.java => admin/dict/vo/type/DictTypeExportReqVO.java} (85%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dict/vo/type/SysDictTypePageReqVO.java => admin/dict/vo/type/DictTypePageReqVO.java} (87%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dict/vo/type/SysDictTypeRespVO.java => admin/dict/vo/type/DictTypeRespVO.java} (78%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dict/vo/type/SysDictTypeSimpleRespVO.java => admin/dict/vo/type/DictTypeSimpleRespVO.java} (76%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{dict/vo/type/SysDictTypeUpdateReqVO.java => admin/dict/vo/type/DictTypeUpdateReqVO.java} (68%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{errorcode/SysErrorCodeController.http => admin/errorcode/ErrorCodeController.http} (64%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{errorcode/SysErrorCodeController.java => admin/errorcode/ErrorCodeController.java} (64%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{errorcode/vo/SysErrorCodeBaseVO.java => admin/errorcode/vo/ErrorCodeBaseVO.java} (89%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{sms/vo/template/SysSmsTemplateCreateReqVO.java => admin/errorcode/vo/ErrorCodeCreateReqVO.java} (51%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{errorcode/vo/SysErrorCodeExcelVO.java => admin/errorcode/vo/ErrorCodeExcelVO.java} (90%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{errorcode/vo/SysErrorCodeExportReqVO.java => admin/errorcode/vo/ErrorCodeExportReqVO.java} (81%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{errorcode/vo/SysErrorCodePageReqVO.java => admin/errorcode/vo/ErrorCodePageReqVO.java} (87%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{errorcode/vo/SysErrorCodeRespVO.java => admin/errorcode/vo/ErrorCodeRespVO.java} (78%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{errorcode/vo/SysErrorCodeUpdateReqVO.java => admin/errorcode/vo/ErrorCodeUpdateReqVO.java} (70%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{logger/SysLoginLogController.java => admin/logger/LoginLogController.java} (62%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{logger/SysOperateLogController.http => admin/logger/OperateLogController.http} (81%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{logger/SysOperateLogController.java => admin/logger/OperateLogController.java} (63%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{logger/vo/loginlog/SysLoginLogBaseVO.java => admin/logger/vo/loginlog/LoginLogBaseVO.java} (93%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{logger/vo/loginlog/SysLoginLogExcelVO.java => admin/logger/vo/loginlog/LoginLogExcelVO.java} (90%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{logger/vo/loginlog/SysLoginLogExportReqVO.java => admin/logger/vo/loginlog/LoginLogExportReqVO.java} (84%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{logger/vo/loginlog/SysLoginLogPageReqVO.java => admin/logger/vo/loginlog/LoginLogPageReqVO.java} (85%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{logger/vo/loginlog/SysLoginLogRespVO.java => admin/logger/vo/loginlog/LoginLogRespVO.java} (82%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{logger/vo/operatelog/SysOperateLogBaseVO.java => admin/logger/vo/operatelog/OperateLogBaseVO.java} (96%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{logger/vo/operatelog/SysOperateLogExcelVO.java => admin/logger/vo/operatelog/OperateLogExcelVO.java} (89%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{logger/vo/operatelog/SysOperateLogExportReqVO.java => admin/logger/vo/operatelog/OperateLogExportReqVO.java} (86%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{logger/vo/operatelog/SysOperateLogPageReqVO.java => admin/logger/vo/operatelog/OperateLogPageReqVO.java} (85%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{logger/vo/operatelog/SysOperateLogRespVO.java => admin/logger/vo/operatelog/OperateLogRespVO.java} (71%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{notice/SysNoticeController.java => admin/notice/NoticeController.java} (63%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{notice/vo/SysNoticeBaseVO.java => admin/notice/vo/NoticeBaseVO.java} (91%) create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/vo/NoticeCreateReqVO.java rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{notice/vo/SysNoticePageReqVO.java => admin/notice/vo/NoticePageReqVO.java} (74%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{notice/vo/SysNoticeRespVO.java => admin/notice/vo/NoticeRespVO.java} (71%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{notice/vo/SysNoticeUpdateReqVO.java => admin/notice/vo/NoticeUpdateReqVO.java} (69%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{permission/SysMenuController.http => admin/permission/MenuController.http} (78%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{permission/SysMenuController.java => admin/permission/MenuController.java} (63%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{permission/SysPermissionController.java => admin/permission/PermissionController.java} (73%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{permission/SysRoleController.http => admin/permission/RoleController.http} (84%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{permission/SysRoleController.java => admin/permission/RoleController.java} (76%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{permission/vo/menu/SysMenuBaseVO.java => admin/permission/vo/menu/MenuBaseVO.java} (95%) create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuCreateReqVO.java rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{permission/vo/menu/SysMenuListReqVO.java => admin/permission/vo/menu/MenuListReqVO.java} (70%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{permission/vo/menu/SysMenuRespVO.java => admin/permission/vo/menu/MenuRespVO.java} (79%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{permission/vo/menu/SysMenuSimpleRespVO.java => admin/permission/vo/menu/MenuSimpleRespVO.java} (76%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{permission/vo/menu/SysMenuUpdateReqVO.java => admin/permission/vo/menu/MenuUpdateReqVO.java} (66%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{permission/vo/permission/SysPermissionAssignRoleDataScopeReqVO.java => admin/permission/vo/permission/PermissionAssignRoleDataScopeReqVO.java} (81%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{permission/vo/permission/SysPermissionAssignRoleMenuReqVO.java => admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java} (73%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{permission/vo/permission/SysPermissionAssignUserRoleReqVO.java => admin/permission/vo/permission/PermissionAssignUserRoleReqVO.java} (73%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{permission/vo/role/SysRoleBaseVO.java => admin/permission/vo/role/RoleBaseVO.java} (92%) create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleCreateReqVO.java rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{permission/vo/role/SysRoleExcelVO.java => admin/permission/vo/role/RoleExcelVO.java} (88%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{permission/vo/role/SysRoleExportReqVO.java => admin/permission/vo/role/RoleExportReqVO.java} (86%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{permission/vo/role/SysRolePageReqVO.java => admin/permission/vo/role/RolePageReqVO.java} (86%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{permission/vo/role/SysRoleRespVO.java => admin/permission/vo/role/RoleRespVO.java} (86%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{permission/vo/role/SysRoleSimpleRespVO.java => admin/permission/vo/role/RoleSimpleRespVO.java} (72%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{permission/vo/role/SysRoleUpdateReqVO.java => admin/permission/vo/role/RoleUpdateReqVO.java} (68%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{permission/vo/role/SysRoleUpdateStatusReqVO.java => admin/permission/vo/role/RoleUpdateStatusReqVO.java} (56%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{ => admin}/sms/SmsCallbackController.java (95%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{sms/SysSmsChannelController.java => admin/sms/SmsChannelController.java} (72%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{sms/SysSmsLogController.java => admin/sms/SmsLogController.java} (66%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{sms/SysSmsTemplateController.http => admin/sms/SmsTemplateController.http} (69%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{sms/SysSmsTemplateController.java => admin/sms/SmsTemplateController.java} (74%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{sms/vo/channel/SysSmsChannelBaseVO.java => admin/sms/vo/channel/SmsChannelBaseVO.java} (92%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{sms/vo/channel/SysSmsChannelCreateReqVO.java => admin/sms/vo/channel/SmsChannelCreateReqVO.java} (71%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{sms/vo/channel/SysSmsChannelPageReqVO.java => admin/sms/vo/channel/SmsChannelPageReqVO.java} (84%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{sms/vo/channel/SysSmsChannelRespVO.java => admin/sms/vo/channel/SmsChannelRespVO.java} (76%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{sms/vo/channel/SysSmsChannelSimpleRespVO.java => admin/sms/vo/channel/SmsChannelSimpleRespVO.java} (78%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{sms/vo/channel/SysSmsChannelUpdateReqVO.java => admin/sms/vo/channel/SmsChannelUpdateReqVO.java} (69%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{sms/vo/log/SysSmsLogExcelVO.java => admin/sms/vo/log/SmsLogExcelVO.java} (96%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{sms/vo/log/SysSmsLogExportReqVO.java => admin/sms/vo/log/SmsLogExportReqVO.java} (85%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{sms/vo/log/SysSmsLogPageReqVO.java => admin/sms/vo/log/SmsLogPageReqVO.java} (90%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{ => admin}/sms/vo/log/SysSmsLogRespVO.java (96%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{sms/vo/template/SysSmsTemplateBaseVO.java => admin/sms/vo/template/SmsTemplateBaseVO.java} (94%) create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateCreateReqVO.java rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{sms/vo/template/SysSmsTemplateExcelVO.java => admin/sms/vo/template/SmsTemplateExcelVO.java} (92%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{sms/vo/template/SysSmsTemplateExportReqVO.java => admin/sms/vo/template/SmsTemplateExportReqVO.java} (84%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{sms/vo/template/SysSmsTemplatePageReqVO.java => admin/sms/vo/template/SmsTemplatePageReqVO.java} (89%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{sms/vo/template/SysSmsTemplateRespVO.java => admin/sms/vo/template/SmsTemplateRespVO.java} (79%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{sms/vo/template/SysSmsTemplateSendReqVO.java => admin/sms/vo/template/SmsTemplateSendReqVO.java} (78%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{sms/vo/template/SysSmsTemplateUpdateReqVO.java => admin/sms/vo/template/SmsTemplateUpdateReqVO.java} (68%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{tenant/SysTenantController.java => admin/tenant/TenantController.java} (74%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{tenant/vo/SysTenantBaseVO.java => admin/tenant/vo/TenantBaseVO.java} (90%) create mode 100755 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/TenantCreateReqVO.java rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{tenant/vo/SysTenantExcelVO.java => admin/tenant/vo/TenantExcelVO.java} (89%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{tenant/vo/SysTenantExportReqVO.java => admin/tenant/vo/TenantExportReqVO.java} (82%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{tenant/vo/SysTenantPageReqVO.java => admin/tenant/vo/TenantPageReqVO.java} (87%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{tenant/vo/SysTenantRespVO.java => admin/tenant/vo/TenantRespVO.java} (67%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{tenant/vo/SysTenantUpdateReqVO.java => admin/tenant/vo/TenantUpdateReqVO.java} (64%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{user/SysUserController.http => admin/user/UserController.http} (63%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{user/SysUserController.java => admin/user/UserController.java} (76%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{user/SysUserProfileController.http => admin/user/UserProfileController.http} (61%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{user/SysUserProfileController.java => admin/user/UserProfileController.java} (69%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{user/vo/profile/SysUserProfileRespVO.java => admin/user/vo/profile/UserProfileRespVO.java} (90%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{user/vo/profile/SysUserProfileUpdatePasswordReqVO.java => admin/user/vo/profile/UserProfileUpdatePasswordReqVO.java} (78%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{user/vo/profile/SysUserProfileUpdateReqVO.java => admin/user/vo/profile/UserProfileUpdateReqVO.java} (84%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{user/vo/user/SysUserBaseVO.java => admin/user/vo/user/UserBaseVO.java} (94%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{user/vo/user/SysUserCreateReqVO.java => admin/user/vo/user/UserCreateReqVO.java} (74%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{user/vo/user/SysUserExcelVO.java => admin/user/vo/user/UserExcelVO.java} (92%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{user/vo/user/SysUserExportReqVO.java => admin/user/vo/user/UserExportReqVO.java} (85%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{user/vo/user/SysUserImportExcelVO.java => admin/user/vo/user/UserImportExcelVO.java} (92%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{user/vo/user/SysUserImportRespVO.java => admin/user/vo/user/UserImportRespVO.java} (80%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{user/vo/user/SysUserPageItemRespVO.java => admin/user/vo/user/UserPageItemRespVO.java} (71%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{user/vo/user/SysUserPageReqVO.java => admin/user/vo/user/UserPageReqVO.java} (89%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{user/vo/user/SysUserRespVO.java => admin/user/vo/user/UserRespVO.java} (83%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{user/vo/user/SysUserSimpleRespVO.java => admin/user/vo/user/UserSimpleRespVO.java} (82%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{user/vo/user/SysUserUpdatePasswordReqVO.java => admin/user/vo/user/UserUpdatePasswordReqVO.java} (79%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{user/vo/user/SysUserUpdateReqVO.java => admin/user/vo/user/UserUpdateReqVO.java} (69%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/{user/vo/user/SysUserUpdateStatusReqVO.java => admin/user/vo/user/UserUpdateStatusReqVO.java} (78%) create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/app/package-info.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostCreateReqVO.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataCreateReqVO.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeCreateReqVO.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticeCreateReqVO.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/package-info.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuCreateReqVO.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleCreateReqVO.java delete mode 100755 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantCreateReqVO.java rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/{SysAuthConvert.java => AuthConvert.java} (66%) delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/SysUserSessionConvert.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/UserSessionConvert.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/common/CaptchaConvert.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/common/SysCaptchaConvert.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/DeptConvert.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/PostConvert.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/SysDeptConvert.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/SysPostConvert.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/DictDataConvert.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/DictTypeConvert.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/SysDictDataConvert.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/SysDictTypeConvert.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/errorcode/ErrorCodeConvert.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/errorcode/SysErrorCodeConvert.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/LoginLogConvert.java rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/{SysOperateLogConvert.java => OperateLogConvert.java} (54%) delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/SysLoginLogConvert.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/notice/NoticeConvert.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/notice/SysNoticeConvert.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/MenuConvert.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/RoleConvert.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/SysMenuConvert.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/SysRoleConvert.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsChannelConvert.java rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/{SysSmsLogConvert.java => SmsLogConvert.java} (62%) create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsTemplateConvert.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SysSmsChannelConvert.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SysSmsTemplateConvert.java delete mode 100755 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/tenant/SysTenantConvert.java create mode 100755 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/tenant/TenantConvert.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/user/SysUserConvert.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/user/UserConvert.java rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dict/{SysDictTypeDO.java => DictTypeDO.java} (92%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/errorcode/{SysErrorCodeDO.java => ErrorCodeDO.java} (81%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/{SysOperateLogDO.java => OperateLogDO.java} (96%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/notice/{SysNoticeDO.java => NoticeDO.java} (82%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/{SysMenuDO.java => MenuDO.java} (96%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/{SysRoleMenuDO.java => RoleMenuDO.java} (88%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/{SysLoginLogMapper.java => LoginLogMapper.java} (65%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/{SysOperateLogMapper.java => OperateLogMapper.java} (70%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/common/{SysCaptchaRedisDAO.java => CaptchaRedisDAO.java} (96%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/{SysErrorCodeConstants.java => ErrorCodeConstants.java} (99%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/errorcode/{SysErrorCodeTypeEnum.java => ErrorCodeTypeEnum.java} (84%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/{SysLoginLogTypeEnum.java => LoginLogTypeEnum.java} (94%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/{SysLoginResultEnum.java => LoginResultEnum.java} (94%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/notice/{SysNoticeTypeEnum.java => NoticeTypeEnum.java} (90%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/permission/{SysRoleTypeEnum.java => RoleTypeEnum.java} (90%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/config/{SysDataPermissionConfiguration.java => DataPermissionConfiguration.java} (90%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/job/auth/{SysUserSessionTimeoutJob.java => UserSessionTimeoutJob.java} (78%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/dept/{SysDeptRefreshConsumer.java => DeptRefreshConsumer.java} (53%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/dict/{SysDictDataRefreshConsumer.java => DictDataRefreshConsumer.java} (66%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/mail/{SysMailSendConsumer.java => MailSendConsumer.java} (56%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/{SysMenuRefreshConsumer.java => MenuRefreshConsumer.java} (52%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/{SysRoleMenuRefreshConsumer.java => RoleMenuRefreshConsumer.java} (51%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/{SysRoleRefreshConsumer.java => RoleRefreshConsumer.java} (52%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/{SysSmsChannelRefreshConsumer.java => SmsChannelRefreshConsumer.java} (50%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/{SysSmsSendConsumer.java => SmsSendConsumer.java} (89%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/{SysSmsTemplateRefreshConsumer.java => SmsTemplateRefreshConsumer.java} (65%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/dept/{SysDeptRefreshMessage.java => DeptRefreshMessage.java} (85%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/dict/{SysDictDataRefreshMessage.java => DictDataRefreshMessage.java} (83%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/mail/{SysMailSendMessage.java => MailSendMessage.java} (93%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/{SysMenuRefreshMessage.java => MenuRefreshMessage.java} (85%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/{SysRoleMenuRefreshMessage.java => RoleMenuRefreshMessage.java} (84%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/{SysRoleRefreshMessage.java => RoleRefreshMessage.java} (85%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/sms/{SysSmsChannelRefreshMessage.java => SmsChannelRefreshMessage.java} (84%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/sms/{SysSmsTemplateRefreshMessage.java => SmsTemplateRefreshMessage.java} (84%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/dept/{SysDeptProducer.java => DeptProducer.java} (65%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/dict/{SysDictDataProducer.java => DictDataProducer.java} (64%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/{SysMenuProducer.java => MenuProducer.java} (64%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/{SysPermissionProducer.java => PermissionProducer.java} (63%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/{SysRoleProducer.java => RoleProducer.java} (66%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/sms/{SysSmsProducer.java => SmsProducer.java} (56%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/{SysAuthService.java => AuthService.java} (69%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/{SysAuthServiceImpl.java => AuthServiceImpl.java} (80%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/{SysUserSessionService.java => UserSessionService.java} (72%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/{SysUserSessionServiceImpl.java => UserSessionServiceImpl.java} (83%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/common/{SysCaptchaService.java => CaptchaService.java} (78%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/common/{SysCaptchaServiceImpl.java => CaptchaServiceImpl.java} (68%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/{SysDeptService.java => DeptService.java} (69%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/{SysDeptServiceImpl.java => DeptServiceImpl.java} (90%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/{SysPostService.java => PostService.java} (76%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/{SysPostServiceImpl.java => PostServiceImpl.java} (77%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/{SysDictDataService.java => DictDataService.java} (67%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/{SysDictDataServiceImpl.java => DictDataServiceImpl.java} (77%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/{SysDictTypeService.java => DictTypeService.java} (57%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/{SysDictTypeServiceImpl.java => DictTypeServiceImpl.java} (66%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/errorcode/{SysErrorCodeService.java => ErrorCodeService.java} (54%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/errorcode/{SysErrorCodeServiceImpl.java => ErrorCodeServiceImpl.java} (66%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/{SysLoginLogService.java => LoginLogService.java} (58%) create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImpl.java rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/{SysOperateLogService.java => OperateLogService.java} (51%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/{SysOperateLogServiceImpl.java => OperateLogServiceImpl.java} (71%) delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/SysLoginLogServiceImpl.java rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/notice/{SysNoticeService.java => NoticeService.java} (59%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/notice/{SysNoticeServiceImpl.java => NoticeServiceImpl.java} (56%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/{SysMenuService.java => MenuService.java} (64%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/{SysMenuServiceImpl.java => MenuServiceImpl.java} (80%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/{SysPermissionService.java => PermissionService.java} (90%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/{SysPermissionServiceImpl.java => PermissionServiceImpl.java} (93%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/{SysRoleService.java => RoleService.java} (81%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/{SysRoleServiceImpl.java => RoleServiceImpl.java} (86%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/{SysSmsChannelService.java => SmsChannelService.java} (71%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/{SysSmsChannelServiceImpl.java => SmsChannelServiceImpl.java} (77%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/{SysSmsLogService.java => SmsLogService.java} (62%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/{SysSmsLogServiceImpl.java => SmsLogServiceImpl.java} (60%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/{SysSmsTemplateService.java => SmsTemplateService.java} (69%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/{SysSmsTemplateServiceImpl.java => SmsTemplateServiceImpl.java} (80%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/{SysTenantService.java => TenantService.java} (67%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/{SysTenantServiceImpl.java => TenantServiceImpl.java} (63%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/{SysUserService.java => UserService.java} (78%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/{SysUserServiceImpl.java => UserServiceImpl.java} (86%) rename yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/{SysAuthServiceImplTest.java => AuthServiceImplTest.java} (79%) rename yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/{SysUserSessionServiceImplTest.java => UserSessionServiceImplTest.java} (90%) rename yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/common/{SysCaptchaServiceTest.java => CaptchaServiceTest.java} (77%) rename yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/{SysDeptServiceTest.java => DeptServiceTest.java} (89%) rename yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/{SysPostServiceTest.java => PostServiceTest.java} (86%) rename yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/{SysDictDataServiceTest.java => DictDataServiceTest.java} (86%) rename yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/{SysDictTypeServiceTest.java => DictTypeServiceTest.java} (80%) rename yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/errorcode/{SysErrorCodeServiceTest.java => ErrorCodeServiceTest.java} (69%) rename yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/{SysLoginLogServiceImplTest.java => LoginLogServiceImplTest.java} (77%) rename yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/{SysOperateLogServiceImplTest.java => OperateLogServiceImplTest.java} (84%) rename yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/notice/{SysNoticeServiceImplTest.java => NoticeServiceImplTest.java} (63%) rename yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/{SysMenuServiceTest.java => MenuServiceTest.java} (70%) rename yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/{SysPermissionServiceTest.java => PermissionServiceTest.java} (83%) rename yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/{SysRoleServiceTest.java => RoleServiceTest.java} (72%) rename yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/{SysSmsChannelServiceTest.java => SmsChannelServiceTest.java} (86%) rename yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/{SysSmsLogServiceTest.java => SmsLogServiceTest.java} (94%) rename yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/{SysSmsTemplateServiceTest.java => SmsTemplateServiceTest.java} (92%) rename yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/tenant/{SysTenantServiceTest.java => TenantServiceTest.java} (85%) rename yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/user/{SysUserServiceImplTest.java => UserServiceImplTest.java} (91%) diff --git a/http-client.env.json b/http-client.env.json index 10c1fdd4f8..a73a267eff 100644 --- a/http-client.env.json +++ b/http-client.env.json @@ -1,10 +1,11 @@ { "local": { - "baseUrl": "http://127.0.0.1:48080/api", + "baseUrl": "http://127.0.0.1:48080/admin-api", "token": "test1", + "adminTenentId": "1", "userApi": "http://127.0.0.1:48080/app-api", - "userToken": "test1", - "userTenentId": "1" + "appToken": "test1", + "appTenentId": "1" } } diff --git a/yudao-admin-server/src/main/resources/application.yaml b/yudao-admin-server/src/main/resources/application.yaml index 15af12d60b..97eb6ac492 100644 --- a/yudao-admin-server/src/main/resources/application.yaml +++ b/yudao-admin-server/src/main/resources/application.yaml @@ -54,11 +54,11 @@ yudao: base-package: cn.iocoder.yudao.coreservice web: admin-api: - prefix: /api - controller: ${yudao.info.base-package} + prefix: /admin-api + controller: cn.iocoder.yudao.module.system.controller.admin # TODO èŠ‹è‰¿ï¼šéœ€è¦æ”¹é€  app-api: prefix: /app-api - controller: cn.iocoder.yudao.module.member.controller.app + controller: cn.iocoder.yudao.module.member.controller.app # TODO èŠ‹è‰¿ï¼šéœ€è¦æ”¹é€  swagger: title: 管ç†åŽå° diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java index 312f51e046..ba19b8bd2e 100644 --- a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java +++ b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java @@ -123,12 +123,13 @@ public class YudaoWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdap .accessDeniedHandler(accessDeniedHandler).and() // 登出地å€çš„é…ç½® .logout().logoutSuccessHandler(logoutSuccessHandler).logoutRequestMatcher(request -> // 匹é…多ç§ç”¨æˆ·ç±»åž‹çš„登出 - StrUtil.equalsAny(request.getRequestURI(), buildAdminApi("/logout"), buildAppApi("/member/logout"))); + StrUtil.equalsAny(request.getRequestURI(), buildAdminApi("/system/logout"), + buildAppApi("/member/logout"))); // 设置æ¯ä¸ªè¯·æ±‚çš„æƒé™ ①:全局共享规则 httpSecurity.authorizeRequests() // 登录的接å£ï¼Œå¯åŒ¿å访问 - .antMatchers(buildAdminApi("/login")).anonymous() + .antMatchers(buildAdminApi("/system/login"), buildAdminApi("/member/login")).anonymous() // 陿€èµ„æºï¼Œå¯åŒ¿å访问 .antMatchers(HttpMethod.GET, "/*.html", "/**/*.html", "/**/*.css", "/**/*.js").permitAll() // æ–‡ä»¶çš„èŽ·å–æŽ¥å£ï¼Œå¯åŒ¿å访问 diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.http b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.http index 81f250bd31..d609e8f0c2 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.http +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.http @@ -1,7 +1,7 @@ ### 请求 /login æŽ¥å£ => æˆåŠŸ -POST {{userApi}}/member/login +POST {{appApi}}/member/login Content-Type: application/json -tenant-id: {{userTenentId}} +tenant-id: {{appTenentId}} { "mobile": "15601691300", @@ -9,9 +9,9 @@ tenant-id: {{userTenentId}} } ### 请求 /send-sms-code æŽ¥å£ => æˆåŠŸ -POST {{userApi}}/member/send-sms-code +POST {{appApi}}/member/send-sms-code Content-Type: application/json -tenant-id: {{userTenentId}} +tenant-id: {{appTenentId}} { "mobile": "15601691399", @@ -19,9 +19,9 @@ tenant-id: {{userTenentId}} } ### 请求 /sms-login æŽ¥å£ => æˆåŠŸ -POST {{userApi}}/member/sms-login +POST {{appApi}}/member/sms-login Content-Type: application/json -tenant-id: {{userTenentId}} +tenant-id: {{appTenentId}} { "mobile": "15601691301", @@ -29,7 +29,7 @@ tenant-id: {{userTenentId}} } ### 请求 /logout æŽ¥å£ => æˆåŠŸ -POST {{userApi}}/member/logout +POST {{appApi}}/member/logout Content-Type: application/json Authorization: Bearer c1b76bdaf2c146c581caa4d7fd81ee66 -tenant-id: {{userTenentId}} +tenant-id: {{appTenentId}} diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java index a7c541e1fa..fd698e2022 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java @@ -14,6 +14,7 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -26,14 +27,15 @@ import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getCli import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getUserAgent; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; -@Api(tags = "APP 端 - 认è¯") +@Api(tags = "用户 APP - 认è¯") @RestController @RequestMapping("/member/") @Validated @Slf4j public class AppAuthController { - @Resource + @Autowired + @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") // AuthService 存在é‡å private AuthService authService; @Resource @@ -41,9 +43,6 @@ public class AppAuthController { @Resource private SysSocialCoreService socialService; - @Resource - private LogoutSuccessHandler logoutSuccessHandler; - @PostMapping("/login") @ApiOperation("使用手机 + 密ç ç™»å½•") @OperateLog(enable = false) // é¿å… Post 请求被记录æ“作日志 diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthCheckCodeReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthCheckCodeReqVO.java index 6d33b18edd..95fca74afa 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthCheckCodeReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthCheckCodeReqVO.java @@ -16,7 +16,7 @@ import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; // TODO 芋艿:code review 相关逻辑 -@ApiModel("APP 端 - 校验验è¯ç  Request VO") +@ApiModel("用户 APP - 校验验è¯ç  Request VO") @Data @NoArgsConstructor @AllArgsConstructor diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthLoginReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthLoginReqVO.java index 25875fd66e..1055e979b4 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthLoginReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthLoginReqVO.java @@ -11,7 +11,7 @@ import org.hibernate.validator.constraints.Length; import javax.validation.constraints.NotEmpty; -@ApiModel("APP 端 - 手机 + 密ç ç™»å½• Request VO") +@ApiModel("用户 APP - 手机 + 密ç ç™»å½• Request VO") @Data @NoArgsConstructor @AllArgsConstructor diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthLoginRespVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthLoginRespVO.java index 935b3ec52b..07ad43118e 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthLoginRespVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthLoginRespVO.java @@ -7,7 +7,7 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -@ApiModel("APP 端 - 手机密ç ç™»å½• Response VO") +@ApiModel("用户 APP - 手机密ç ç™»å½• Response VO") @Data @NoArgsConstructor @AllArgsConstructor diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthResetPasswordReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthResetPasswordReqVO.java index 9f48ee6248..a6d6ebea4f 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthResetPasswordReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthResetPasswordReqVO.java @@ -14,7 +14,7 @@ import javax.validation.constraints.NotEmpty; import javax.validation.constraints.Pattern; // TODO 芋艿:code review 相关逻辑 -@ApiModel("APP 端 - é‡ç½®å¯†ç  Request VO") +@ApiModel("用户 APP - é‡ç½®å¯†ç  Request VO") @Data @NoArgsConstructor @AllArgsConstructor diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSendSmsReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSendSmsReqVO.java index 9e53351fea..41aa36936b 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSendSmsReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSendSmsReqVO.java @@ -10,7 +10,7 @@ import lombok.experimental.Accessors; import javax.validation.constraints.NotNull; -@ApiModel("APP 端 - å‘逿‰‹æœºéªŒè¯ç  Response VO") +@ApiModel("用户 APP - å‘逿‰‹æœºéªŒè¯ç  Response VO") @Data @Accessors(chain = true) public class AppAuthSendSmsReqVO { diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSmsLoginReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSmsLoginReqVO.java index 452e7e825e..063caf80dc 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSmsLoginReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSmsLoginReqVO.java @@ -12,7 +12,7 @@ import org.hibernate.validator.constraints.Length; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.Pattern; -@ApiModel("APP 端 - 手机 + 验è¯ç ç™»å½• Request VO") +@ApiModel("用户 APP - 手机 + 验è¯ç ç™»å½• Request VO") @Data @NoArgsConstructor @AllArgsConstructor diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialBindReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialBindReqVO.java index d595e74283..55e23ac4c7 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialBindReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialBindReqVO.java @@ -12,7 +12,7 @@ import lombok.NoArgsConstructor; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; -@ApiModel("APP 端 - 社交绑定 Request VO,使用 code 授æƒç ") +@ApiModel("用户 APP - 社交绑定 Request VO,使用 code 授æƒç ") @Data @NoArgsConstructor @AllArgsConstructor diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialLogin2ReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialLogin2ReqVO.java index cc832e3716..d6bdaf009f 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialLogin2ReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialLogin2ReqVO.java @@ -14,7 +14,7 @@ import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; -@ApiModel("APP 端 - 社交登录 Request VO,使用 code 授æƒç  + è´¦å·å¯†ç ") +@ApiModel("用户 APP - 社交登录 Request VO,使用 code 授æƒç  + è´¦å·å¯†ç ") @Data @NoArgsConstructor @AllArgsConstructor diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialLoginReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialLoginReqVO.java index 3d1562522d..b919bf275d 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialLoginReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialLoginReqVO.java @@ -12,7 +12,7 @@ import lombok.NoArgsConstructor; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; -@ApiModel("APP 端 - 社交登录 Request VO,使用 code 授æƒç ") +@ApiModel("用户 APP - 社交登录 Request VO,使用 code 授æƒç ") @Data @NoArgsConstructor @AllArgsConstructor diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialUnbindReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialUnbindReqVO.java index 9225080f76..ac4308e6a5 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialUnbindReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialUnbindReqVO.java @@ -12,7 +12,7 @@ import lombok.NoArgsConstructor; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; -@ApiModel("APP 端 - å–æ¶ˆç¤¾äº¤ç»‘定 Request VO,使用 code 授æƒç ") +@ApiModel("用户 APP - å–æ¶ˆç¤¾äº¤ç»‘定 Request VO,使用 code 授æƒç ") @Data @NoArgsConstructor @AllArgsConstructor diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthUpdatePasswordReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthUpdatePasswordReqVO.java index 4bbecbc311..9addb10460 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthUpdatePasswordReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthUpdatePasswordReqVO.java @@ -12,7 +12,7 @@ import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; // TODO 芋艿:code review 相关逻辑 -@ApiModel("APP 端 - ä¿®æ”¹å¯†ç  Request VO") +@ApiModel("用户 APP - ä¿®æ”¹å¯†ç  Request VO") @Data @NoArgsConstructor @AllArgsConstructor diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/package-info.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/package-info.java deleted file mode 100644 index 7f013eaa96..0000000000 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppUserController.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppUserController.java index cf5b5348c1..9f1d25d786 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppUserController.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppUserController.java @@ -23,7 +23,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; import static cn.iocoder.yudao.module.member.enums.MemberErrorCodeConstants.FILE_IS_EMPTY; -@Api(tags = "APP 端 - 用户个人中心") +@Api(tags = "用户 APP - 用户个人中心") @RestController @RequestMapping("/member/user") @Validated diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppUserInfoRespVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppUserInfoRespVO.java index f8d9d20d1c..32e684c849 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppUserInfoRespVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppUserInfoRespVO.java @@ -6,7 +6,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -@ApiModel("APP 端 - ç”¨æˆ·ä¸ªäººä¿¡æ¯ Response VO") +@ApiModel("用户 APP - ç”¨æˆ·ä¸ªäººä¿¡æ¯ Response VO") @Data @NoArgsConstructor @AllArgsConstructor diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppUserUpdateMobileReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppUserUpdateMobileReqVO.java index ded94ef1a9..1ab6e7c843 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppUserUpdateMobileReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppUserUpdateMobileReqVO.java @@ -13,7 +13,7 @@ import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.Pattern; -@ApiModel("APP 端 - 修改手机 Request VO") +@ApiModel("用户 APP - 修改手机 Request VO") @Data @NoArgsConstructor @AllArgsConstructor diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/package-info.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/package-info.java index ea9687d819..9e2888c69c 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/package-info.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/package-info.java @@ -1,6 +1,6 @@ /** * æä¾› RESTful API ç»™å‰ç«¯ï¼š * 1. admin 包:æä¾›ç»™ç®¡ç†åŽå° yudao-ui-admin å‰ç«¯é¡¹ç›® - * 2. app 包:æä¾›ç»™ç”¨æˆ· APP yudao-ui-app å‰ç«¯é¡¹ç›® + * 2. app 包:æä¾›ç»™ç”¨æˆ· APP yudao-ui-app å‰ç«¯é¡¹ç›®ï¼Œå®ƒçš„ Controller å’Œ VO éƒ½è¦æ·»åŠ  App å‰ç¼€ï¼Œç”¨äºŽå’Œç®¡ç†åŽå°è¿›è¡ŒåŒºåˆ† */ package cn.iocoder.yudao.module.member.controller; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/AuthServiceImpl.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/AuthServiceImpl.java index 6deabba120..dfeb7f040a 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/AuthServiceImpl.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/AuthServiceImpl.java @@ -51,7 +51,7 @@ import static cn.iocoder.yudao.module.member.enums.SysErrorCodeConstants.*; * * @author èŠ‹é“æºç  */ -@Service +@Service("memberAuthService") @Slf4j public class AuthServiceImpl implements AuthService { diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/UserServiceImpl.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/UserServiceImpl.java index a899b79e66..fd0dd05827 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/UserServiceImpl.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/UserServiceImpl.java @@ -32,7 +32,7 @@ import static cn.iocoder.yudao.module.member.enums.MemberErrorCodeConstants.USER * * @author èŠ‹é“æºç  */ -@Service +@Service("memberUserService") @Valid @Slf4j public class UserServiceImpl implements UserService { diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/SysAuthController.http b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.http similarity index 61% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/SysAuthController.http rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.http index f8e32a5b8d..25124ca336 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/SysAuthController.http +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.http @@ -1,7 +1,7 @@ ### 请求 /login æŽ¥å£ => æˆåŠŸ -POST {{baseUrl}}/login +POST {{baseUrl}}/system/login Content-Type: application/json -tenant-id: 1 +tenant-id: {{adminTenentId}} { "username": "admin", @@ -11,16 +11,12 @@ tenant-id: 1 } ### 请求 /get-permission-info æŽ¥å£ => æˆåŠŸ -GET {{baseUrl}}/get-permission-info +GET {{baseUrl}}/system/get-permission-info Authorization: Bearer {{token}} -tenant-id: 1 +tenant-id: {{adminTenentId}} ### 请求 /list-menus æŽ¥å£ => æˆåŠŸ -GET {{baseUrl}}/list-menus +GET {{baseUrl}}/system/list-menus Authorization: Bearer {{token}} #Authorization: Bearer a6aa7714a2e44c95aaa8a2c5adc2a67a -tenant-id: 1 - -### 请求 /druid/xxx æŽ¥å£ => 失败 TODO 临时测试 -GET http://127.0.0.1:8080/druid/123 -Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/SysAuthController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java similarity index 73% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/SysAuthController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java index 52ca73cf70..6829c6ce95 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/SysAuthController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java @@ -1,13 +1,13 @@ -package cn.iocoder.yudao.module.system.controller.auth; +package cn.iocoder.yudao.module.system.controller.admin.auth; -import cn.iocoder.yudao.module.system.controller.auth.vo.auth.*; -import cn.iocoder.yudao.module.system.convert.auth.SysAuthConvert; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysMenuDO; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.*; +import cn.iocoder.yudao.module.system.convert.auth.AuthConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; import cn.iocoder.yudao.module.system.enums.permission.MenuTypeEnum; -import cn.iocoder.yudao.module.system.service.auth.SysAuthService; -import cn.iocoder.yudao.module.system.service.permission.SysPermissionService; -import cn.iocoder.yudao.module.system.service.permission.SysRoleService; +import cn.iocoder.yudao.module.system.service.auth.AuthService; +import cn.iocoder.yudao.module.system.service.permission.PermissionService; +import cn.iocoder.yudao.module.system.service.permission.RoleService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialCoreService; import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; @@ -21,6 +21,7 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -34,36 +35,37 @@ import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getUse import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserRoleIds; -@Api(tags = "认è¯") +@Api(tags = "管ç†åŽå° - 认è¯") @RestController -@RequestMapping("/") +@RequestMapping("/system") // 暂时ä¸è·Ÿ /auth 结尾 @Validated @Slf4j -public class SysAuthController { +public class AuthController { - @Resource - private SysAuthService authService; + @Autowired + @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") // AuthService 存在é‡å + private AuthService authService; @Resource private SysUserCoreService userCoreService; @Resource - private SysRoleService roleService; + private RoleService roleService; @Resource - private SysPermissionService permissionService; + private PermissionService permissionService; @Resource private SysSocialCoreService socialCoreService; @PostMapping("/login") @ApiOperation("使用账å·å¯†ç ç™»å½•") @OperateLog(enable = false) // é¿å… Post 请求被记录æ“作日志 - public CommonResult login(@RequestBody @Valid SysAuthLoginReqVO reqVO) { + public CommonResult login(@RequestBody @Valid AuthLoginReqVO reqVO) { String token = authService.login(reqVO, getClientIP(), getUserAgent()); // 返回结果 - return success(SysAuthLoginRespVO.builder().token(token).build()); + return success(AuthLoginRespVO.builder().token(token).build()); } @GetMapping("/get-permission-info") @ApiOperation("获å–登录用户的æƒé™ä¿¡æ¯") - public CommonResult getPermissionInfo() { + public CommonResult getPermissionInfo() { // èŽ·å¾—ç”¨æˆ·ä¿¡æ¯ SysUserDO user = userCoreService.getUser(getLoginUserId()); if (user == null) { @@ -72,24 +74,24 @@ public class SysAuthController { // 获得角色列表 List roleList = roleService.getRolesFromCache(getLoginUserRoleIds()); // 获得èœå•列表 - List menuList = permissionService.getRoleMenusFromCache( + List menuList = permissionService.getRoleMenusFromCache( getLoginUserRoleIds(), // 注æ„,基于登录的角色,因为åŽç»­çš„æƒé™åˆ¤æ–­ä¹Ÿæ˜¯åŸºäºŽå®ƒ SetUtils.asSet(MenuTypeEnum.DIR.getType(), MenuTypeEnum.MENU.getType(), MenuTypeEnum.BUTTON.getType()), SetUtils.asSet(CommonStatusEnum.ENABLE.getStatus())); // 拼接结果返回 - return success(SysAuthConvert.INSTANCE.convert(user, roleList, menuList)); + return success(AuthConvert.INSTANCE.convert(user, roleList, menuList)); } @GetMapping("list-menus") @ApiOperation("获得登录用户的èœå•列表") - public CommonResult> getMenus() { + public CommonResult> getMenus() { // 获得用户拥有的èœå•列表 - List menuList = permissionService.getRoleMenusFromCache( + List menuList = permissionService.getRoleMenusFromCache( getLoginUserRoleIds(), // 注æ„,基于登录的角色,因为åŽç»­çš„æƒé™åˆ¤æ–­ä¹Ÿæ˜¯åŸºäºŽå®ƒ SetUtils.asSet(MenuTypeEnum.DIR.getType(), MenuTypeEnum.MENU.getType()), // åªè¦ç›®å½•å’Œèœå•类型 SetUtils.asSet(CommonStatusEnum.ENABLE.getStatus())); // åªè¦å¼€å¯çš„ // è½¬æ¢æˆ Tree 结构返回 - return success(SysAuthConvert.INSTANCE.buildMenuTree(menuList)); + return success(AuthConvert.INSTANCE.buildMenuTree(menuList)); } // ========== 社交登录相关 ========== @@ -108,31 +110,31 @@ public class SysAuthController { @PostMapping("/social-login") @ApiOperation("社交登录,使用 code 授æƒç ") @OperateLog(enable = false) // é¿å… Post 请求被记录æ“作日志 - public CommonResult socialLogin(@RequestBody @Valid SysAuthSocialLoginReqVO reqVO) { + public CommonResult socialLogin(@RequestBody @Valid AuthSocialLoginReqVO reqVO) { String token = authService.socialLogin(reqVO, getClientIP(), getUserAgent()); // 返回结果 - return success(SysAuthLoginRespVO.builder().token(token).build()); + return success(AuthLoginRespVO.builder().token(token).build()); } @PostMapping("/social-login2") @ApiOperation("社交登录,使用 code 授æƒç  + è´¦å·å¯†ç ") @OperateLog(enable = false) // é¿å… Post 请求被记录æ“作日志 - public CommonResult socialLogin2(@RequestBody @Valid SysAuthSocialLogin2ReqVO reqVO) { + public CommonResult socialLogin2(@RequestBody @Valid AuthSocialLogin2ReqVO reqVO) { String token = authService.socialLogin2(reqVO, getClientIP(), getUserAgent()); // 返回结果 - return success(SysAuthLoginRespVO.builder().token(token).build()); + return success(AuthLoginRespVO.builder().token(token).build()); } @PostMapping("/social-bind") @ApiOperation("社交绑定,使用 code 授æƒç ") - public CommonResult socialBind(@RequestBody @Valid SysAuthSocialBindReqVO reqVO) { + public CommonResult socialBind(@RequestBody @Valid AuthSocialBindReqVO reqVO) { authService.socialBind(getLoginUserId(), reqVO); return CommonResult.success(true); } @DeleteMapping("/social-unbind") @ApiOperation("å–æ¶ˆç¤¾äº¤ç»‘定") - public CommonResult socialUnbind(@RequestBody SysAuthSocialUnbindReqVO reqVO) { + public CommonResult socialUnbind(@RequestBody AuthSocialUnbindReqVO reqVO) { socialCoreService.unbindSocialUser(getLoginUserId(), reqVO.getType(), reqVO.getUnionId(), UserTypeEnum.ADMIN); return CommonResult.success(true); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/SysUserSessionController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/UserSessionController.java similarity index 78% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/SysUserSessionController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/UserSessionController.java index f5a68686c6..415e5b285e 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/SysUserSessionController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/UserSessionController.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.module.system.controller.auth; +package cn.iocoder.yudao.module.system.controller.admin.auth; -import cn.iocoder.yudao.module.system.controller.auth.vo.session.SysUserSessionPageItemRespVO; -import cn.iocoder.yudao.module.system.controller.auth.vo.session.SysUserSessionPageReqVO; -import cn.iocoder.yudao.module.system.convert.auth.SysUserSessionConvert; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.session.UserSessionPageItemRespVO; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.session.UserSessionPageReqVO; +import cn.iocoder.yudao.module.system.convert.auth.UserSessionConvert; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.module.system.service.auth.SysUserSessionService; +import cn.iocoder.yudao.module.system.service.auth.UserSessionService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService; @@ -28,13 +28,13 @@ import java.util.Map; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; -@Api(tags = "用户 Session") +@Api(tags = "管ç†åŽå° - 用户 Session") @RestController @RequestMapping("/system/user-session") -public class SysUserSessionController { +public class UserSessionController { @Resource - private SysUserSessionService userSessionService; + private UserSessionService userSessionService; @Resource private SysUserSessionCoreService userSessionCoreService; @Resource @@ -46,7 +46,7 @@ public class SysUserSessionController { @GetMapping("/page") @ApiOperation("获得 Session 分页列表") @PreAuthorize("@ss.hasPermission('system:user-session:page')") - public CommonResult> getUserSessionPage(@Validated SysUserSessionPageReqVO reqVO) { + public CommonResult> getUserSessionPage(@Validated UserSessionPageReqVO reqVO) { // 获得 Session 分页 PageResult pageResult = userSessionService.getUserSessionPage(reqVO); @@ -56,9 +56,9 @@ public class SysUserSessionController { Map deptMap = deptCoreService.getDeptMap( convertList(userMap.values(), SysUserDO::getDeptId)); // 拼接结果返回 - List sessionList = new ArrayList<>(pageResult.getList().size()); + List sessionList = new ArrayList<>(pageResult.getList().size()); pageResult.getList().forEach(session -> { - SysUserSessionPageItemRespVO respVO = SysUserSessionConvert.INSTANCE.convert(session); + UserSessionPageItemRespVO respVO = UserSessionConvert.INSTANCE.convert(session); sessionList.add(respVO); // è®¾ç½®ç”¨æˆ·è´¦å· MapUtils.findAndThen(userMap, session.getUserId(), user -> { diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthLoginReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthLoginReqVO.java similarity index 89% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthLoginReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthLoginReqVO.java index 2eac3fb4a8..8e9eb4ed20 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthLoginReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthLoginReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.auth.vo.auth; +package cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -11,12 +11,12 @@ import org.hibernate.validator.constraints.Length; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.Pattern; -@ApiModel("è´¦å·å¯†ç ç™»å½• Request VO") +@ApiModel("管ç†åŽå° - è´¦å·å¯†ç ç™»å½• Request VO") @Data @NoArgsConstructor @AllArgsConstructor @Builder -public class SysAuthLoginReqVO { +public class AuthLoginReqVO { @ApiModelProperty(value = "è´¦å·", required = true, example = "yudaoyuanma") @NotEmpty(message = "登录账å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthLoginRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthLoginRespVO.java similarity index 69% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthLoginRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthLoginRespVO.java index 7e1bea57ea..bd13ba3770 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthLoginRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthLoginRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.auth.vo.auth; +package cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -7,12 +7,12 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -@ApiModel("è´¦å·å¯†ç ç™»å½• Response VO") +@ApiModel("管ç†åŽå° - è´¦å·å¯†ç ç™»å½• Response VO") @Data @NoArgsConstructor @AllArgsConstructor @Builder -public class SysAuthLoginRespVO { +public class AuthLoginRespVO { @ApiModelProperty(value = "token", required = true, example = "yudaoyuanma") private String token; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthMenuRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthMenuRespVO.java similarity index 84% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthMenuRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthMenuRespVO.java index 762644e20b..1c46ec291b 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthMenuRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthMenuRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.auth.vo.auth; +package cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -9,12 +9,12 @@ import lombok.NoArgsConstructor; import java.util.List; -@ApiModel("登录用户的èœå•ä¿¡æ¯ Response VO") +@ApiModel("管ç†åŽå° - 登录用户的èœå•ä¿¡æ¯ Response VO") @Data @NoArgsConstructor @AllArgsConstructor @Builder -public class SysAuthMenuRespVO { +public class AuthMenuRespVO { @ApiModelProperty(value = "èœå•åç§°", required = true, example = "芋é“") private Long id; @@ -37,6 +37,6 @@ public class SysAuthMenuRespVO { /** * å­è·¯ç”± */ - private List children; + private List children; } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthPermissionInfoRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthPermissionInfoRespVO.java similarity index 81% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthPermissionInfoRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthPermissionInfoRespVO.java index e50bb84ccc..bada252057 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthPermissionInfoRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthPermissionInfoRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.auth.vo.auth; +package cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -9,12 +9,12 @@ import lombok.NoArgsConstructor; import java.util.Set; -@ApiModel(value = "登录用户的æƒé™ä¿¡æ¯ Response VO", description = "é¢å¤–包括用户信æ¯å’Œè§’色列表") +@ApiModel(value = "管ç†åŽå° - 登录用户的æƒé™ä¿¡æ¯ Response VO", description = "é¢å¤–包括用户信æ¯å’Œè§’色列表") @Data @NoArgsConstructor @AllArgsConstructor @Builder -public class SysAuthPermissionInfoRespVO { +public class AuthPermissionInfoRespVO { @ApiModelProperty(value = "用户信æ¯", required = true) private UserVO user; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthSocialBindReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialBindReqVO.java similarity index 85% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthSocialBindReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialBindReqVO.java index d1a48ee779..3bb408c0b4 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthSocialBindReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialBindReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.auth.vo.auth; +package cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth; import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum; import cn.iocoder.yudao.framework.common.validation.InEnum; @@ -12,12 +12,12 @@ import lombok.NoArgsConstructor; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; -@ApiModel("社交绑定 Request VO,使用 code 授æƒç ") +@ApiModel("管ç†åŽå° - 社交绑定 Request VO,使用 code 授æƒç ") @Data @NoArgsConstructor @AllArgsConstructor @Builder -public class SysAuthSocialBindReqVO { +public class AuthSocialBindReqVO { @ApiModelProperty(value = "社交平å°çš„类型", required = true, example = "10", notes = "å‚è§ SysUserSocialTypeEnum 枚举值") @InEnum(SysSocialTypeEnum.class) diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthSocialLogin2ReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialLogin2ReqVO.java similarity index 89% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthSocialLogin2ReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialLogin2ReqVO.java index 25e0d65514..74955a6c59 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthSocialLogin2ReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialLogin2ReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.auth.vo.auth; +package cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth; import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum; import cn.iocoder.yudao.framework.common.validation.InEnum; @@ -14,12 +14,12 @@ import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; -@ApiModel("社交登录 Request VO,使用 code 授æƒç  + è´¦å·å¯†ç ") +@ApiModel("管ç†åŽå° - 社交登录 Request VO,使用 code 授æƒç  + è´¦å·å¯†ç ") @Data @NoArgsConstructor @AllArgsConstructor @Builder -public class SysAuthSocialLogin2ReqVO { +public class AuthSocialLogin2ReqVO { @ApiModelProperty(value = "社交平å°çš„类型", required = true, example = "10", notes = "å‚è§ SysUserSocialTypeEnum 枚举值") @InEnum(SysSocialTypeEnum.class) diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthSocialLoginReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialLoginReqVO.java similarity index 85% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthSocialLoginReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialLoginReqVO.java index 930fea227c..4f7b8d76d6 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthSocialLoginReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialLoginReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.auth.vo.auth; +package cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth; import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum; import cn.iocoder.yudao.framework.common.validation.InEnum; @@ -12,12 +12,12 @@ import lombok.NoArgsConstructor; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; -@ApiModel("社交登录 Request VO,使用 code 授æƒç ") +@ApiModel("管ç†åŽå° - 社交登录 Request VO,使用 code 授æƒç ") @Data @NoArgsConstructor @AllArgsConstructor @Builder -public class SysAuthSocialLoginReqVO { +public class AuthSocialLoginReqVO { @ApiModelProperty(value = "社交平å°çš„类型", required = true, example = "10", notes = "å‚è§ SysUserSocialTypeEnum 枚举值") @InEnum(SysSocialTypeEnum.class) diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthSocialUnbindReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialUnbindReqVO.java similarity index 83% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthSocialUnbindReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialUnbindReqVO.java index 7bf6c8ef91..b16f1ef772 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/auth/SysAuthSocialUnbindReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialUnbindReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.auth.vo.auth; +package cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth; import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum; import cn.iocoder.yudao.framework.common.validation.InEnum; @@ -12,12 +12,12 @@ import lombok.NoArgsConstructor; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; -@ApiModel("å–æ¶ˆç¤¾äº¤ç»‘定 Request VO,使用 code 授æƒç ") +@ApiModel("管ç†åŽå° - å–æ¶ˆç¤¾äº¤ç»‘定 Request VO,使用 code 授æƒç ") @Data @NoArgsConstructor @AllArgsConstructor @Builder -public class SysAuthSocialUnbindReqVO { +public class AuthSocialUnbindReqVO { @ApiModelProperty(value = "社交平å°çš„类型", required = true, example = "10", notes = "å‚è§ SysUserSocialTypeEnum 枚举值") @InEnum(SysSocialTypeEnum.class) diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/session/SysUserSessionPageItemRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/session/UserSessionPageItemRespVO.java similarity index 78% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/session/SysUserSessionPageItemRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/session/UserSessionPageItemRespVO.java index debdf59989..ad12877efc 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/session/SysUserSessionPageItemRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/session/UserSessionPageItemRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.auth.vo.session; +package cn.iocoder.yudao.module.system.controller.admin.auth.vo.session; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; @@ -10,12 +10,12 @@ import lombok.NoArgsConstructor; import java.util.Date; -@ApiModel(value = "用户在线 Session Response VO", description = "ç›¸æ¯”ç”¨æˆ·åŸºæœ¬ä¿¡æ¯æ¥è¯´ï¼Œä¼šå¤šéƒ¨é—¨ã€ç”¨æˆ·è´¦å·ç­‰ä¿¡æ¯") +@ApiModel(value = "管ç†åŽå° - 用户在线 Session Response VO", description = "ç›¸æ¯”ç”¨æˆ·åŸºæœ¬ä¿¡æ¯æ¥è¯´ï¼Œä¼šå¤šéƒ¨é—¨ã€ç”¨æˆ·è´¦å·ç­‰ä¿¡æ¯") @Data @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(callSuper = true) -public class SysUserSessionPageItemRespVO extends PageParam { +public class UserSessionPageItemRespVO extends PageParam { @ApiModelProperty(value = "Session ç¼–å·", required = true, example = "fe50b9f6-d177-44b1-8da9-72ea34f63db7") private String id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/session/SysUserSessionPageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/session/UserSessionPageReqVO.java similarity index 71% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/session/SysUserSessionPageReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/session/UserSessionPageReqVO.java index c834f5d8c8..7e85c87baf 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/auth/vo/session/SysUserSessionPageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/session/UserSessionPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.auth.vo.session; +package cn.iocoder.yudao.module.system.controller.admin.auth.vo.session; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; @@ -6,10 +6,10 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; -@ApiModel("在线用户 Session 分页 Request VO") +@ApiModel("管ç†åŽå° - 在线用户 Session 分页 Request VO") @Data @EqualsAndHashCode(callSuper = true) -public class SysUserSessionPageReqVO extends PageParam { +public class UserSessionPageReqVO extends PageParam { @ApiModelProperty(value = "用户 IP", example = "127.0.0.1", notes = "模糊匹é…") private String userIp; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/common/SysCaptchaController.http b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/common/CaptchaController.http similarity index 100% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/common/SysCaptchaController.http rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/common/CaptchaController.http diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/common/SysCaptchaController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/common/CaptchaController.java similarity index 61% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/common/SysCaptchaController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/common/CaptchaController.java index 317895005a..5fc0b0a6bb 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/common/SysCaptchaController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/common/CaptchaController.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.module.system.controller.common; +package cn.iocoder.yudao.module.system.controller.admin.common; import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.module.system.controller.common.vo.SysCaptchaImageRespVO; -import cn.iocoder.yudao.module.system.service.common.SysCaptchaService; +import cn.iocoder.yudao.module.system.controller.admin.common.vo.CaptchaImageRespVO; +import cn.iocoder.yudao.module.system.service.common.CaptchaService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.GetMapping; @@ -13,17 +13,17 @@ import javax.annotation.Resource; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -@Api(tags = "验è¯ç ") +@Api(tags = "管ç†åŽå° - 验è¯ç ") @RestController @RequestMapping("/system/captcha") -public class SysCaptchaController { +public class CaptchaController { @Resource - private SysCaptchaService captchaService; + private CaptchaService captchaService; @GetMapping("/get-image") @ApiOperation("生æˆå›¾ç‰‡éªŒè¯ç ") - public CommonResult getCaptchaImage() { + public CommonResult getCaptchaImage() { return success(captchaService.getCaptchaImage()); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/common/vo/SysCaptchaImageRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/common/vo/CaptchaImageRespVO.java similarity index 64% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/common/vo/SysCaptchaImageRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/common/vo/CaptchaImageRespVO.java index 5c55b16ffd..cef5d0845d 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/common/vo/SysCaptchaImageRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/common/vo/CaptchaImageRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.common.vo; +package cn.iocoder.yudao.module.system.controller.admin.common.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -7,14 +7,15 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -@ApiModel("验è¯ç å›¾ç‰‡ Response VO") +@ApiModel("管ç†åŽå° - 验è¯ç å›¾ç‰‡ Response VO") @Data @Builder @NoArgsConstructor @AllArgsConstructor -public class SysCaptchaImageRespVO { +public class CaptchaImageRespVO { - @ApiModelProperty(value = "uuid", required = true, example = "1b3b7d00-83a8-4638-9e37-d67011855968", notes = "通过该 uuid 作为该验è¯ç çš„æ ‡è¯†") + @ApiModelProperty(value = "uuid", required = true, example = "1b3b7d00-83a8-4638-9e37-d67011855968", + notes = "通过该 uuid 作为该验è¯ç çš„æ ‡è¯†") private String uuid; @ApiModelProperty(value = "图片", required = true, notes = "验è¯ç çš„图片内容,使用 Base64 ç¼–ç ") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/SysDeptController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/DeptController.java similarity index 73% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/SysDeptController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/DeptController.java index 70c365560c..2459736a5c 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/SysDeptController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/DeptController.java @@ -1,12 +1,12 @@ -package cn.iocoder.yudao.module.system.controller.dept; +package cn.iocoder.yudao.module.system.controller.admin.dept; import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.module.system.controller.dept.vo.dept.*; -import cn.iocoder.yudao.module.system.convert.dept.SysDeptConvert; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.*; +import cn.iocoder.yudao.module.system.convert.dept.DeptConvert; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.module.system.service.dept.SysDeptService; +import cn.iocoder.yudao.module.system.service.dept.DeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; @@ -21,14 +21,14 @@ import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -@Api(tags = "部门") +@Api(tags = "管ç†åŽå° - 部门") @RestController @RequestMapping("/system/dept") @Validated -public class SysDeptController { +public class DeptController { @Resource - private SysDeptService deptService; + private DeptService deptService; @Resource private SysDeptCoreService deptCoreService; @@ -36,7 +36,7 @@ public class SysDeptController { @PostMapping("create") @ApiOperation("创建部门") @PreAuthorize("@ss.hasPermission('system:dept:create')") - public CommonResult createDept(@Valid @RequestBody SysDeptCreateReqVO reqVO) { + public CommonResult createDept(@Valid @RequestBody DeptCreateReqVO reqVO) { Long deptId = deptService.createDept(reqVO); return success(deptId); } @@ -44,7 +44,7 @@ public class SysDeptController { @PutMapping("update") @ApiOperation("更新部门") @PreAuthorize("@ss.hasPermission('system:dept:update')") - public CommonResult updateDept(@Valid @RequestBody SysDeptUpdateReqVO reqVO) { + public CommonResult updateDept(@Valid @RequestBody DeptUpdateReqVO reqVO) { deptService.updateDept(reqVO); return success(true); } @@ -61,30 +61,30 @@ public class SysDeptController { @GetMapping("/list") @ApiOperation("获å–部门列表") @PreAuthorize("@ss.hasPermission('system:dept:query')") - public CommonResult> listDepts(SysDeptListReqVO reqVO) { + public CommonResult> listDepts(DeptListReqVO reqVO) { List list = deptService.getSimpleDepts(reqVO); list.sort(Comparator.comparing(SysDeptDO::getSort)); - return success(SysDeptConvert.INSTANCE.convertList(list)); + return success(DeptConvert.INSTANCE.convertList(list)); } @GetMapping("/list-all-simple") @ApiOperation(value = "获å–部门精简信æ¯åˆ—表", notes = "åªåŒ…å«è¢«å¼€å¯çš„部门,主è¦ç”¨äºŽå‰ç«¯çš„下拉选项") - public CommonResult> getSimpleDepts() { + public CommonResult> getSimpleDepts() { // 获得部门列表,åªè¦å¼€å¯çжæ€çš„ - SysDeptListReqVO reqVO = new SysDeptListReqVO(); + DeptListReqVO reqVO = new DeptListReqVO(); reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); List list = deptService.getSimpleDepts(reqVO); // 排åºåŽï¼Œè¿”回给å‰ç«¯ list.sort(Comparator.comparing(SysDeptDO::getSort)); - return success(SysDeptConvert.INSTANCE.convertList02(list)); + return success(DeptConvert.INSTANCE.convertList02(list)); } @GetMapping("/get") @ApiOperation("获得部门信æ¯") @ApiImplicitParam(name = "id", value = "ç¼–å·", required = true, example = "1024", dataTypeClass = Long.class) @PreAuthorize("@ss.hasPermission('system:dept:query')") - public CommonResult getDept(@RequestParam("id") Long id) { - return success(SysDeptConvert.INSTANCE.convert(deptCoreService.getDept(id))); + public CommonResult getDept(@RequestParam("id") Long id) { + return success(DeptConvert.INSTANCE.convert(deptCoreService.getDept(id))); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/SysPostController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/PostController.java similarity index 73% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/SysPostController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/PostController.java index 762044dadc..9191ce25fe 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/SysPostController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/PostController.java @@ -1,14 +1,14 @@ -package cn.iocoder.yudao.module.system.controller.dept; +package cn.iocoder.yudao.module.system.controller.admin.dept; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import cn.iocoder.yudao.module.system.controller.dept.vo.post.*; -import cn.iocoder.yudao.module.system.convert.dept.SysPostConvert; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.*; +import cn.iocoder.yudao.module.system.convert.dept.PostConvert; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; -import cn.iocoder.yudao.module.system.service.dept.SysPostService; +import cn.iocoder.yudao.module.system.service.dept.PostService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; @@ -27,19 +27,19 @@ import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; -@Api(tags = "å²—ä½") +@Api(tags = "管ç†åŽå° - å²—ä½") @RestController @RequestMapping("/system/post") -@Valid -public class SysPostController { +@Validated +public class PostController { @Resource - private SysPostService postService; + private PostService postService; @PostMapping("/create") @ApiOperation("创建岗ä½") @PreAuthorize("@ss.hasPermission('system:post:create')") - public CommonResult createPost(@Valid @RequestBody SysPostCreateReqVO reqVO) { + public CommonResult createPost(@Valid @RequestBody PostCreateReqVO reqVO) { Long postId = postService.createPost(reqVO); return success(postId); } @@ -47,7 +47,7 @@ public class SysPostController { @PutMapping("/update") @ApiOperation("修改岗ä½") @PreAuthorize("@ss.hasPermission('system:post:update')") - public CommonResult updatePost(@Valid @RequestBody SysPostUpdateReqVO reqVO) { + public CommonResult updatePost(@Valid @RequestBody PostUpdateReqVO reqVO) { postService.updatePost(reqVO); return success(true); } @@ -64,36 +64,36 @@ public class SysPostController { @ApiOperation("获得岗ä½ä¿¡æ¯") @ApiImplicitParam(name = "id", value = "å²—ä½ç¼–å·", required = true, example = "1024", dataTypeClass = Long.class) @PreAuthorize("@ss.hasPermission('system:post:query')") - public CommonResult getPost(@RequestParam("id") Long id) { - return success(SysPostConvert.INSTANCE.convert(postService.getPost(id))); + public CommonResult getPost(@RequestParam("id") Long id) { + return success(PostConvert.INSTANCE.convert(postService.getPost(id))); } @GetMapping("/list-all-simple") @ApiOperation(value = "获å–å²—ä½ç²¾ç®€ä¿¡æ¯åˆ—表", notes = "åªåŒ…å«è¢«å¼€å¯çš„å²—ä½ï¼Œä¸»è¦ç”¨äºŽå‰ç«¯çš„下拉选项") - public CommonResult> getSimplePosts() { + public CommonResult> getSimplePosts() { // 获得岗ä½åˆ—表,åªè¦å¼€å¯çжæ€çš„ List list = postService.getPosts(null, Collections.singleton(CommonStatusEnum.ENABLE.getStatus())); // 排åºåŽï¼Œè¿”回给å‰ç«¯ list.sort(Comparator.comparing(SysPostDO::getSort)); - return success(SysPostConvert.INSTANCE.convertList02(list)); + return success(PostConvert.INSTANCE.convertList02(list)); } @GetMapping("/page") @ApiOperation("获得岗ä½åˆ†é¡µåˆ—表") @PreAuthorize("@ss.hasPermission('system:post:query')") - public CommonResult> getPostPage(@Validated SysPostPageReqVO reqVO) { - return success(SysPostConvert.INSTANCE.convertPage(postService.getPostPage(reqVO))); + public CommonResult> getPostPage(@Validated PostPageReqVO reqVO) { + return success(PostConvert.INSTANCE.convertPage(postService.getPostPage(reqVO))); } @GetMapping("/export") @ApiOperation("å²—ä½ç®¡ç†") @PreAuthorize("@ss.hasPermission('system:post:export')") @OperateLog(type = EXPORT) - public void export(HttpServletResponse response, @Validated SysPostExportReqVO reqVO) throws IOException { + public void export(HttpServletResponse response, @Validated PostExportReqVO reqVO) throws IOException { List posts = postService.getPosts(reqVO); - List data = SysPostConvert.INSTANCE.convertList03(posts); + List data = PostConvert.INSTANCE.convertList03(posts); // 输出 - ExcelUtils.write(response, "岗使•°æ®.xls", "å²—ä½åˆ—表", SysPostExcelVO.class, data); + ExcelUtils.write(response, "岗使•°æ®.xls", "å²—ä½åˆ—表", PostExcelVO.class, data); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptBaseVO.java similarity index 94% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptBaseVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptBaseVO.java index 5e0bc14779..0661a54f91 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.dept.vo.dept; +package cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -13,7 +13,7 @@ import javax.validation.constraints.Size; * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ */ @Data -public class SysDeptBaseVO { +public class DeptBaseVO { @ApiModelProperty(value = "èœå•åç§°", required = true, example = "芋é“") @NotBlank(message = "部门åç§°ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptCreateReqVO.java similarity index 52% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptCreateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptCreateReqVO.java index 4909ef8bcb..efd6c39a3e 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptCreateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptCreateReqVO.java @@ -1,13 +1,13 @@ -package cn.iocoder.yudao.module.system.controller.dept.vo.dept; +package cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept; import io.swagger.annotations.ApiModel; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; -@ApiModel("部门创建 Request VO") +@ApiModel("管ç†åŽå° - 部门创建 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class SysDeptCreateReqVO extends SysDeptBaseVO { +public class DeptCreateReqVO extends DeptBaseVO { } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptListReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptListReqVO.java similarity index 71% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptListReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptListReqVO.java index 840fb0480b..171788b59e 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptListReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptListReqVO.java @@ -1,12 +1,12 @@ -package cn.iocoder.yudao.module.system.controller.dept.vo.dept; +package cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -@ApiModel("部门列表 Request VO") +@ApiModel("管ç†åŽå° - 部门列表 Request VO") @Data -public class SysDeptListReqVO { +public class DeptListReqVO { @ApiModelProperty(value = "部门åç§°", example = "芋é“", notes = "模糊匹é…") private String name; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptRespVO.java similarity index 77% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptRespVO.java index edcc455aa0..db60a3107c 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.dept.vo.dept; +package cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -7,10 +7,10 @@ import lombok.EqualsAndHashCode; import java.util.Date; -@ApiModel("éƒ¨é—¨ä¿¡æ¯ Response VO") +@ApiModel("管ç†åŽå° - éƒ¨é—¨ä¿¡æ¯ Response VO") @Data @EqualsAndHashCode(callSuper = true) -public class SysDeptRespVO extends SysDeptBaseVO { +public class DeptRespVO extends DeptBaseVO { @ApiModelProperty(value = "部门编å·", required = true, example = "1024") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptSimpleRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptSimpleRespVO.java similarity index 77% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptSimpleRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptSimpleRespVO.java index b9500ea81c..1a3d64f6e5 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptSimpleRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptSimpleRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.dept.vo.dept; +package cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -6,11 +6,11 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -@ApiModel("éƒ¨é—¨ç²¾ç®€ä¿¡æ¯ Response VO") +@ApiModel("管ç†åŽå° - éƒ¨é—¨ç²¾ç®€ä¿¡æ¯ Response VO") @Data @NoArgsConstructor @AllArgsConstructor -public class SysDeptSimpleRespVO { +public class DeptSimpleRespVO { @ApiModelProperty(value = "部门编å·", required = true, example = "1024") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptUpdateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptUpdateReqVO.java similarity index 69% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptUpdateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptUpdateReqVO.java index c4cd016e37..3e2f13a849 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/dept/SysDeptUpdateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.dept.vo.dept; +package cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -7,10 +7,10 @@ import lombok.EqualsAndHashCode; import javax.validation.constraints.NotNull; -@ApiModel("部门更新 Request VO") +@ApiModel("管ç†åŽå° - 部门更新 Request VO") @Data @EqualsAndHashCode(callSuper = true) -public class SysDeptUpdateReqVO extends SysDeptBaseVO { +public class DeptUpdateReqVO extends DeptBaseVO { @ApiModelProperty(value = "部门编å·", required = true, example = "1024") @NotNull(message = "部门编å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostBaseVO.java similarity index 93% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostBaseVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostBaseVO.java index e30eedeacd..7000396466 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.dept.vo.post; +package cn.iocoder.yudao.module.system.controller.admin.dept.vo.post; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -12,7 +12,7 @@ import javax.validation.constraints.Size; * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ */ @Data -public class SysPostBaseVO { +public class PostBaseVO { @ApiModelProperty(value = "å²—ä½åç§°", required = true, example = "å°åšä¸»") @NotBlank(message = "å²—ä½åç§°ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostCreateReqVO.java new file mode 100644 index 0000000000..547739c0d0 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostCreateReqVO.java @@ -0,0 +1,11 @@ +package cn.iocoder.yudao.module.system.controller.admin.dept.vo.post; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@ApiModel("管ç†åŽå° - å²—ä½åˆ›å»º Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +public class PostCreateReqVO extends PostBaseVO { +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostExcelVO.java similarity index 88% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostExcelVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostExcelVO.java index 32042a41fc..b9c2696dfb 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostExcelVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.dept.vo.post; +package cn.iocoder.yudao.module.system.controller.admin.dept.vo.post; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; @@ -10,7 +10,7 @@ import lombok.Data; * å²—ä½ Excel 导出å“应 VO */ @Data -public class SysPostExcelVO { +public class PostExcelVO { @ExcelProperty("å²—ä½åºå·") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostExportReqVO.java similarity index 69% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostExportReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostExportReqVO.java index 9b8cd5e89b..182449d952 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostExportReqVO.java @@ -1,12 +1,12 @@ -package cn.iocoder.yudao.module.system.controller.dept.vo.post; +package cn.iocoder.yudao.module.system.controller.admin.dept.vo.post; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -@ApiModel(value = "å²—ä½å¯¼å‡º Request VO", description = "傿•°å’Œ SysPostExcelVO 是一致的") +@ApiModel(value = "管ç†åŽå° - å²—ä½å¯¼å‡º Request VO", description = "傿•°å’Œ SysPostExcelVO 是一致的") @Data -public class SysPostExportReqVO { +public class PostExportReqVO { @ApiModelProperty(value = "å²—ä½ç¼–ç ", example = "yudao", notes = "模糊匹é…") private String code; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostListReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostListReqVO.java similarity index 72% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostListReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostListReqVO.java index a05bed03f5..a1369f20f7 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostListReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostListReqVO.java @@ -1,14 +1,14 @@ -package cn.iocoder.yudao.module.system.controller.dept.vo.post; +package cn.iocoder.yudao.module.system.controller.admin.dept.vo.post; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; -@ApiModel("å²—ä½åˆ—表 Request VO") +@ApiModel("管ç†åŽå° - å²—ä½åˆ—表 Request VO") @Data @EqualsAndHashCode(callSuper = true) -public class SysPostListReqVO extends SysPostBaseVO { +public class PostListReqVO extends PostBaseVO { @ApiModelProperty(value = "å²—ä½åç§°", example = "芋é“", notes = "模糊匹é…") private String name; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostPageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostPageReqVO.java similarity index 78% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostPageReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostPageReqVO.java index 49b05c2a9e..94c6b9eaab 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostPageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.dept.vo.post; +package cn.iocoder.yudao.module.system.controller.admin.dept.vo.post; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; @@ -6,10 +6,10 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; -@ApiModel("å²—ä½åˆ†é¡µ Request VO") +@ApiModel("管ç†åŽå° - å²—ä½åˆ†é¡µ Request VO") @Data @EqualsAndHashCode(callSuper = true) -public class SysPostPageReqVO extends PageParam { +public class PostPageReqVO extends PageParam { @ApiModelProperty(value = "å²—ä½ç¼–ç ", example = "yudao", notes = "模糊匹é…") private String code; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostRespVO.java similarity index 72% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostRespVO.java index fd95be4616..834e686179 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.dept.vo.post; +package cn.iocoder.yudao.module.system.controller.admin.dept.vo.post; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -7,10 +7,10 @@ import lombok.EqualsAndHashCode; import java.util.Date; -@ApiModel("å²—ä½ä¿¡æ¯ Response VO") +@ApiModel("管ç†åŽå° - å²—ä½ä¿¡æ¯ Response VO") @Data @EqualsAndHashCode(callSuper = true) -public class SysPostRespVO extends SysPostBaseVO { +public class PostRespVO extends PostBaseVO { @ApiModelProperty(value = "å²—ä½åºå·", required = true, example = "1024") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostSimpleRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostSimpleRespVO.java similarity index 73% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostSimpleRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostSimpleRespVO.java index fdc6636d40..0334a7652a 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostSimpleRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostSimpleRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.dept.vo.post; +package cn.iocoder.yudao.module.system.controller.admin.dept.vo.post; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -6,11 +6,11 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -@ApiModel("å²—ä½ç²¾ç®€ä¿¡æ¯ Response VO") +@ApiModel("管ç†åŽå° - å²—ä½ç²¾ç®€ä¿¡æ¯ Response VO") @Data @NoArgsConstructor @AllArgsConstructor -public class SysPostSimpleRespVO { +public class PostSimpleRespVO { @ApiModelProperty(value = "å²—ä½ç¼–å·", required = true, example = "1024") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostUpdateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostUpdateReqVO.java similarity index 69% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostUpdateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostUpdateReqVO.java index 0868c6a455..aeb91998b2 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostUpdateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.dept.vo.post; +package cn.iocoder.yudao.module.system.controller.admin.dept.vo.post; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -7,10 +7,10 @@ import lombok.EqualsAndHashCode; import javax.validation.constraints.NotNull; -@ApiModel("岗使›´æ–° Request VO") +@ApiModel("管ç†åŽå° - 岗使›´æ–° Request VO") @Data @EqualsAndHashCode(callSuper = true) -public class SysPostUpdateReqVO extends SysPostBaseVO { +public class PostUpdateReqVO extends PostBaseVO { @ApiModelProperty(value = "å²—ä½ç¼–å·", required = true, example = "1024") @NotNull(message = "å²—ä½ç¼–å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/SysDictDataController.http b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictDataController.http similarity index 80% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/SysDictDataController.http rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictDataController.http index f7890dc67c..f524315026 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/SysDictDataController.http +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictDataController.http @@ -1,3 +1,4 @@ ### 请求 /menu/list æŽ¥å£ => æˆåŠŸ GET {{baseUrl}}/system/dict-data/list-all-simple Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/SysDictDataController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictDataController.java similarity index 71% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/SysDictDataController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictDataController.java index d82f5cfec7..81d7cc247c 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/SysDictDataController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictDataController.java @@ -1,13 +1,13 @@ -package cn.iocoder.yudao.module.system.controller.dict; +package cn.iocoder.yudao.module.system.controller.admin.dict; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import cn.iocoder.yudao.module.system.controller.dict.vo.data.*; -import cn.iocoder.yudao.module.system.convert.dict.SysDictDataConvert; -import cn.iocoder.yudao.module.system.service.dict.SysDictDataService; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.*; +import cn.iocoder.yudao.module.system.convert.dict.DictDataConvert; +import cn.iocoder.yudao.module.system.service.dict.DictDataService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; @@ -24,19 +24,19 @@ import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; -@Api(tags = "字典数æ®") +@Api(tags = "管ç†åŽå° - 字典数æ®") @RestController @RequestMapping("/system/dict-data") @Validated -public class SysDictDataController { +public class DictDataController { @Resource - private SysDictDataService dictDataService; + private DictDataService dictDataService; @PostMapping("/create") @ApiOperation("新增字典数æ®") @PreAuthorize("@ss.hasPermission('system:dict:create')") - public CommonResult createDictData(@Valid @RequestBody SysDictDataCreateReqVO reqVO) { + public CommonResult createDictData(@Valid @RequestBody DictDataCreateReqVO reqVO) { Long dictDataId = dictDataService.createDictData(reqVO); return success(dictDataId); } @@ -44,7 +44,7 @@ public class SysDictDataController { @PutMapping("update") @ApiOperation("修改字典数æ®") @PreAuthorize("@ss.hasPermission('system:dict:update')") - public CommonResult updateDictData(@Valid @RequestBody SysDictDataUpdateReqVO reqVO) { + public CommonResult updateDictData(@Valid @RequestBody DictDataUpdateReqVO reqVO) { dictDataService.updateDictData(reqVO); return success(true); } @@ -61,35 +61,35 @@ public class SysDictDataController { @GetMapping("/list-all-simple") @ApiOperation(value = "获得全部字典数æ®åˆ—表", notes = "一般用于管ç†åŽå°ç¼“存字典数æ®åœ¨æœ¬åœ°") // 无需添加æƒé™è®¤è¯ï¼Œå› ä¸ºå‰ç«¯å…¨å±€éƒ½éœ€è¦ - public CommonResult> getSimpleDictDatas() { + public CommonResult> getSimpleDictDatas() { List list = dictDataService.getDictDatas(); - return success(SysDictDataConvert.INSTANCE.convertList(list)); + return success(DictDataConvert.INSTANCE.convertList(list)); } @GetMapping("/page") @ApiOperation("/获得字典类型的分页列表") @PreAuthorize("@ss.hasPermission('system:dict:query')") - public CommonResult> getDictTypePage(@Valid SysDictDataPageReqVO reqVO) { - return success(SysDictDataConvert.INSTANCE.convertPage(dictDataService.getDictDataPage(reqVO))); + public CommonResult> getDictTypePage(@Valid DictDataPageReqVO reqVO) { + return success(DictDataConvert.INSTANCE.convertPage(dictDataService.getDictDataPage(reqVO))); } @GetMapping(value = "/get") @ApiOperation("/查询字典数æ®è¯¦ç»†") @ApiImplicitParam(name = "id", value = "ç¼–å·", required = true, example = "1024", dataTypeClass = Long.class) @PreAuthorize("@ss.hasPermission('system:dict:query')") - public CommonResult getDictData(@RequestParam("id") Long id) { - return success(SysDictDataConvert.INSTANCE.convert(dictDataService.getDictData(id))); + public CommonResult getDictData(@RequestParam("id") Long id) { + return success(DictDataConvert.INSTANCE.convert(dictDataService.getDictData(id))); } @GetMapping("/export") @ApiOperation("导出字典数æ®") @PreAuthorize("@ss.hasPermission('system:dict:export')") @OperateLog(type = EXPORT) - public void export(HttpServletResponse response, @Valid SysDictDataExportReqVO reqVO) throws IOException { + public void export(HttpServletResponse response, @Valid DictDataExportReqVO reqVO) throws IOException { List list = dictDataService.getDictDatas(reqVO); - List data = SysDictDataConvert.INSTANCE.convertList02(list); + List data = DictDataConvert.INSTANCE.convertList02(list); // 输出 - ExcelUtils.write(response, "字典数æ®.xls", "æ•°æ®åˆ—表", SysDictDataExcelVO.class, data); + ExcelUtils.write(response, "字典数æ®.xls", "æ•°æ®åˆ—表", DictDataExcelVO.class, data); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/SysDictTypeController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictTypeController.java similarity index 66% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/SysDictTypeController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictTypeController.java index 63a4b08987..e7c9b88948 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/SysDictTypeController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictTypeController.java @@ -1,13 +1,13 @@ -package cn.iocoder.yudao.module.system.controller.dict; +package cn.iocoder.yudao.module.system.controller.admin.dict; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import cn.iocoder.yudao.module.system.controller.dict.vo.type.*; -import cn.iocoder.yudao.module.system.convert.dict.SysDictTypeConvert; -import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictTypeDO; -import cn.iocoder.yudao.module.system.service.dict.SysDictTypeService; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.*; +import cn.iocoder.yudao.module.system.convert.dict.DictTypeConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictTypeDO; +import cn.iocoder.yudao.module.system.service.dict.DictTypeService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; @@ -24,19 +24,19 @@ import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; -@Api(tags = "字典类型") +@Api(tags = "管ç†åŽå° - 字典类型") @RestController @RequestMapping("/system/dict-type") @Validated -public class SysDictTypeController { +public class DictTypeController { @Resource - private SysDictTypeService dictTypeService; + private DictTypeService dictTypeService; @PostMapping("/create") @ApiOperation("创建字典类型") @PreAuthorize("@ss.hasPermission('system:dict:create')") - public CommonResult createDictType(@Valid @RequestBody SysDictTypeCreateReqVO reqVO) { + public CommonResult createDictType(@Valid @RequestBody DictTypeCreateReqVO reqVO) { Long dictTypeId = dictTypeService.createDictType(reqVO); return success(dictTypeId); } @@ -44,7 +44,7 @@ public class SysDictTypeController { @PutMapping("/update") @ApiOperation("修改字典类型") @PreAuthorize("@ss.hasPermission('system:dict:update')") - public CommonResult updateDictType(@Valid @RequestBody SysDictTypeUpdateReqVO reqVO) { + public CommonResult updateDictType(@Valid @RequestBody DictTypeUpdateReqVO reqVO) { dictTypeService.updateDictType(reqVO); return success(true); } @@ -61,35 +61,35 @@ public class SysDictTypeController { @ApiOperation("/获得字典类型的分页列表") @GetMapping("/page") @PreAuthorize("@ss.hasPermission('system:dict:query')") - public CommonResult> pageDictTypes(@Valid SysDictTypePageReqVO reqVO) { - return success(SysDictTypeConvert.INSTANCE.convertPage(dictTypeService.getDictTypePage(reqVO))); + public CommonResult> pageDictTypes(@Valid DictTypePageReqVO reqVO) { + return success(DictTypeConvert.INSTANCE.convertPage(dictTypeService.getDictTypePage(reqVO))); } @ApiOperation("/查询字典类型详细") @ApiImplicitParam(name = "id", value = "ç¼–å·", required = true, example = "1024", dataTypeClass = Long.class) @GetMapping(value = "/get") @PreAuthorize("@ss.hasPermission('system:dict:query')") - public CommonResult getDictType(@RequestParam("id") Long id) { - return success(SysDictTypeConvert.INSTANCE.convert(dictTypeService.getDictType(id))); + public CommonResult getDictType(@RequestParam("id") Long id) { + return success(DictTypeConvert.INSTANCE.convert(dictTypeService.getDictType(id))); } @GetMapping("/list-all-simple") @ApiOperation(value = "获得全部字典类型列表", notes = "åŒ…æ‹¬å¼€å¯ + ç¦ç”¨çš„字典类型,主è¦ç”¨äºŽå‰ç«¯çš„下拉选项") // 无需添加æƒé™è®¤è¯ï¼Œå› ä¸ºå‰ç«¯å…¨å±€éƒ½éœ€è¦ - public CommonResult> listSimpleDictTypes() { - List list = dictTypeService.getDictTypeList(); - return success(SysDictTypeConvert.INSTANCE.convertList(list)); + public CommonResult> listSimpleDictTypes() { + List list = dictTypeService.getDictTypeList(); + return success(DictTypeConvert.INSTANCE.convertList(list)); } @ApiOperation("导出数æ®ç±»åž‹") @GetMapping("/export") @PreAuthorize("@ss.hasPermission('system:dict:query')") @OperateLog(type = EXPORT) - public void export(HttpServletResponse response, @Valid SysDictTypeExportReqVO reqVO) throws IOException { - List list = dictTypeService.getDictTypeList(reqVO); - List data = SysDictTypeConvert.INSTANCE.convertList02(list); + public void export(HttpServletResponse response, @Valid DictTypeExportReqVO reqVO) throws IOException { + List list = dictTypeService.getDictTypeList(reqVO); + List data = DictTypeConvert.INSTANCE.convertList02(list); // 输出 - ExcelUtils.write(response, "字典类型.xls", "类型列表", SysDictTypeExcelVO.class, data); + ExcelUtils.write(response, "字典类型.xls", "类型列表", DictTypeExcelVO.class, data); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataBaseVO.java similarity index 94% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataBaseVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataBaseVO.java index c67ceb0d20..0292f84372 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.dict.vo.data; +package cn.iocoder.yudao.module.system.controller.admin.dict.vo.data; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -12,7 +12,7 @@ import javax.validation.constraints.Size; * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ */ @Data -public class SysDictDataBaseVO { +public class DictDataBaseVO { @ApiModelProperty(value = "显示顺åºä¸èƒ½ä¸ºç©º", required = true, example = "1024") @NotNull(message = "显示顺åºä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataCreateReqVO.java new file mode 100644 index 0000000000..57dc770d09 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataCreateReqVO.java @@ -0,0 +1,12 @@ +package cn.iocoder.yudao.module.system.controller.admin.dict.vo.data; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@ApiModel("管ç†åŽå° - 字典数æ®åˆ›å»º Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +public class DictDataCreateReqVO extends DictDataBaseVO { + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataExcelVO.java similarity index 88% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataExcelVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataExcelVO.java index 19cd76b785..ee907eaa76 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataExcelVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.dict.vo.data; +package cn.iocoder.yudao.module.system.controller.admin.dict.vo.data; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; @@ -10,7 +10,7 @@ import lombok.Data; * å­—å…¸æ•°æ® Excel 导出å“应 VO */ @Data -public class SysDictDataExcelVO { +public class DictDataExcelVO { @ExcelProperty("字典编ç ") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataExportReqVO.java similarity index 80% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataExportReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataExportReqVO.java index 074e02c804..142d45017a 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.dict.vo.data; +package cn.iocoder.yudao.module.system.controller.admin.dict.vo.data; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -6,9 +6,9 @@ import lombok.Data; import javax.validation.constraints.Size; -@ApiModel("字典类型导出 Request VO") +@ApiModel("管ç†åŽå° - 字典类型导出 Request VO") @Data -public class SysDictDataExportReqVO { +public class DictDataExportReqVO { @ApiModelProperty(value = "字典标签", example = "芋é“") @Size(max = 100, message = "字典标签长度ä¸èƒ½è¶…过100个字符") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataPageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataPageReqVO.java similarity index 81% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataPageReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataPageReqVO.java index 97d6d8f260..a095aac087 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataPageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.dict.vo.data; +package cn.iocoder.yudao.module.system.controller.admin.dict.vo.data; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; @@ -8,10 +8,10 @@ import lombok.EqualsAndHashCode; import javax.validation.constraints.Size; -@ApiModel("字典类型分页列表 Request VO") +@ApiModel("管ç†åŽå° - 字典类型分页列表 Request VO") @Data @EqualsAndHashCode(callSuper = true) -public class SysDictDataPageReqVO extends PageParam { +public class DictDataPageReqVO extends PageParam { @ApiModelProperty(value = "字典标签", example = "芋é“") @Size(max = 100, message = "字典标签长度ä¸èƒ½è¶…过100个字符") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataRespVO.java similarity index 75% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataRespVO.java index e4281ca150..697097008e 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.dict.vo.data; +package cn.iocoder.yudao.module.system.controller.admin.dict.vo.data; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -9,12 +9,12 @@ import lombok.NoArgsConstructor; import java.util.Date; -@ApiModel("字典数æ®ä¿¡æ¯ Response VO") +@ApiModel("管ç†åŽå° - 字典数æ®ä¿¡æ¯ Response VO") @Data @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(callSuper = true) -public class SysDictDataRespVO extends SysDictDataBaseVO { +public class DictDataRespVO extends DictDataBaseVO { @ApiModelProperty(value = "字典数æ®ç¼–å·", required = true, example = "1024") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataSimpleRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataSimpleRespVO.java similarity index 72% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataSimpleRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataSimpleRespVO.java index 2da4779bac..c3dd560529 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataSimpleRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataSimpleRespVO.java @@ -1,12 +1,12 @@ -package cn.iocoder.yudao.module.system.controller.dict.vo.data; +package cn.iocoder.yudao.module.system.controller.admin.dict.vo.data; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -@ApiModel("æ•°æ®å­—典精简 Response VO") +@ApiModel("管ç†åŽå° - æ•°æ®å­—典精简 Response VO") @Data -public class SysDictDataSimpleRespVO { +public class DictDataSimpleRespVO { @ApiModelProperty(value = "字典类型", required = true, example = "gender") private String dictType; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataUpdateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataUpdateReqVO.java similarity index 68% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataUpdateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataUpdateReqVO.java index 428aa654aa..f6f9b81a23 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataUpdateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.dict.vo.data; +package cn.iocoder.yudao.module.system.controller.admin.dict.vo.data; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -7,10 +7,10 @@ import lombok.EqualsAndHashCode; import javax.validation.constraints.NotNull; -@ApiModel("å­—å…¸æ•°æ®æ›´æ–° Request VO") +@ApiModel("管ç†åŽå° - å­—å…¸æ•°æ®æ›´æ–° Request VO") @Data @EqualsAndHashCode(callSuper = true) -public class SysDictDataUpdateReqVO extends SysDictDataBaseVO { +public class DictDataUpdateReqVO extends DictDataBaseVO { @ApiModelProperty(value = "字典数æ®ç¼–å·", required = true, example = "1024") @NotNull(message = "字典数æ®ç¼–å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeBaseVO.java similarity index 90% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeBaseVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeBaseVO.java index d9e2dfe478..4da6da0b31 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.dict.vo.type; +package cn.iocoder.yudao.module.system.controller.admin.dict.vo.type; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -12,7 +12,7 @@ import javax.validation.constraints.Size; * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ */ @Data -public class SysDictTypeBaseVO { +public class DictTypeBaseVO { @ApiModelProperty(value = "å­—å…¸åç§°", required = true, example = "性别") @NotBlank(message = "å­—å…¸åç§°ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeCreateReqVO.java similarity index 73% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeCreateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeCreateReqVO.java index ea5b0465ab..ee2f45ae19 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeCreateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.dict.vo.type; +package cn.iocoder.yudao.module.system.controller.admin.dict.vo.type; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -8,10 +8,10 @@ import lombok.EqualsAndHashCode; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; -@ApiModel("字典类型创建 Request VO") +@ApiModel("管ç†åŽå° - 字典类型创建 Request VO") @Data @EqualsAndHashCode(callSuper = true) -public class SysDictTypeCreateReqVO extends SysDictTypeBaseVO { +public class DictTypeCreateReqVO extends DictTypeBaseVO { @ApiModelProperty(value = "字典类型", required = true, example = "sys_common_sex") @NotNull(message = "字典类型ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeExcelVO.java similarity index 86% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeExcelVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeExcelVO.java index 25c07e6ab7..fbda72b2e3 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeExcelVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.dict.vo.type; +package cn.iocoder.yudao.module.system.controller.admin.dict.vo.type; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; @@ -10,7 +10,7 @@ import lombok.Data; * 字典类型 Excel 导出å“应 VO */ @Data -public class SysDictTypeExcelVO { +public class DictTypeExcelVO { @ExcelProperty("字典主键") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeExportReqVO.java similarity index 85% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeExportReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeExportReqVO.java index 440cef8bcf..b2f3331b8d 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.dict.vo.type; +package cn.iocoder.yudao.module.system.controller.admin.dict.vo.type; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -9,9 +9,9 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel("字典类型分页列表 Request VO") +@ApiModel("管ç†åŽå° - 字典类型分页列表 Request VO") @Data -public class SysDictTypeExportReqVO { +public class DictTypeExportReqVO { @ApiModelProperty(value = "字典类型åç§°", example = "芋é“", notes = "模糊匹é…") private String name; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypePageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypePageReqVO.java similarity index 87% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypePageReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypePageReqVO.java index 8cd2c9b824..1c231b0d24 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypePageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypePageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.dict.vo.type; +package cn.iocoder.yudao.module.system.controller.admin.dict.vo.type; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; @@ -12,10 +12,10 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel("字典类型分页列表 Request VO") +@ApiModel("管ç†åŽå° - 字典类型分页列表 Request VO") @Data @EqualsAndHashCode(callSuper = true) -public class SysDictTypePageReqVO extends PageParam { +public class DictTypePageReqVO extends PageParam { @ApiModelProperty(value = "字典类型åç§°", example = "芋é“", notes = "模糊匹é…") private String name; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeRespVO.java similarity index 78% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeRespVO.java index b82e16e16d..9cfafdfa40 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.dict.vo.type; +package cn.iocoder.yudao.module.system.controller.admin.dict.vo.type; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -9,12 +9,12 @@ import lombok.NoArgsConstructor; import java.util.Date; -@ApiModel("å­—å…¸ç±»åž‹ä¿¡æ¯ Response VO") +@ApiModel("管ç†åŽå° - å­—å…¸ç±»åž‹ä¿¡æ¯ Response VO") @Data @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(callSuper = true) -public class SysDictTypeRespVO extends SysDictTypeBaseVO { +public class DictTypeRespVO extends DictTypeBaseVO { @ApiModelProperty(value = "字典类型编å·", required = true, example = "1024") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeSimpleRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeSimpleRespVO.java similarity index 76% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeSimpleRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeSimpleRespVO.java index c53154f8c8..8cca026a9f 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeSimpleRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeSimpleRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.dict.vo.type; +package cn.iocoder.yudao.module.system.controller.admin.dict.vo.type; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -6,11 +6,11 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -@ApiModel("å­—å…¸ç±»åž‹ç²¾ç®€ä¿¡æ¯ Response VO") +@ApiModel("管ç†åŽå° - å­—å…¸ç±»åž‹ç²¾ç®€ä¿¡æ¯ Response VO") @Data @NoArgsConstructor @AllArgsConstructor -public class SysDictTypeSimpleRespVO { +public class DictTypeSimpleRespVO { @ApiModelProperty(value = "字典类型编å·", required = true, example = "1024") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeUpdateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeUpdateReqVO.java similarity index 68% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeUpdateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeUpdateReqVO.java index ed812dadc2..00955f4fe3 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/type/SysDictTypeUpdateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.dict.vo.type; +package cn.iocoder.yudao.module.system.controller.admin.dict.vo.type; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -7,10 +7,10 @@ import lombok.EqualsAndHashCode; import javax.validation.constraints.NotNull; -@ApiModel("字典类型更新 Request VO") +@ApiModel("管ç†åŽå° - 字典类型更新 Request VO") @Data @EqualsAndHashCode(callSuper = true) -public class SysDictTypeUpdateReqVO extends SysDictTypeBaseVO { +public class DictTypeUpdateReqVO extends DictTypeBaseVO { @ApiModelProperty(value = "字典类型编å·", required = true, example = "1024") @NotNull(message = "字典类型编å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/SysErrorCodeController.http b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/ErrorCodeController.http similarity index 64% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/SysErrorCodeController.http rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/ErrorCodeController.http index 76226d18e3..06b8723185 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/SysErrorCodeController.http +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/ErrorCodeController.http @@ -1,7 +1,8 @@ -### +### åˆ›å»ºé”™è¯¯ç  POST {{baseUrl}}/inra/error-code/create Authorization: Bearer {{token}} -Content-Type:application/json +Content-Type: application/json +tenant-id: {{adminTenentId}} { "code": 200, diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/SysErrorCodeController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/ErrorCodeController.java similarity index 64% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/SysErrorCodeController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/ErrorCodeController.java index 220789d565..e3161b8aa1 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/SysErrorCodeController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/ErrorCodeController.java @@ -1,13 +1,13 @@ -package cn.iocoder.yudao.module.system.controller.errorcode; +package cn.iocoder.yudao.module.system.controller.admin.errorcode; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import cn.iocoder.yudao.module.system.convert.errorcode.SysErrorCodeConvert; -import cn.iocoder.yudao.module.system.controller.errorcode.vo.*; -import cn.iocoder.yudao.module.system.dal.dataobject.errorcode.SysErrorCodeDO; -import cn.iocoder.yudao.module.system.service.errorcode.SysErrorCodeService; +import cn.iocoder.yudao.module.system.convert.errorcode.ErrorCodeConvert; +import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.*; +import cn.iocoder.yudao.module.system.dal.dataobject.errorcode.ErrorCodeDO; +import cn.iocoder.yudao.module.system.service.errorcode.ErrorCodeService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; @@ -24,26 +24,26 @@ import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; -@Api(tags = "错误ç ") +@Api(tags = "管ç†åŽå° - 错误ç ") @RestController @RequestMapping("/system/error-code") @Validated -public class SysErrorCodeController { +public class ErrorCodeController { @Resource - private SysErrorCodeService errorCodeService; + private ErrorCodeService errorCodeService; @PostMapping("/create") @ApiOperation("创建错误ç ") @PreAuthorize("@ss.hasPermission('system:error-code:create')") - public CommonResult createErrorCode(@Valid @RequestBody SysErrorCodeCreateReqVO createReqVO) { + public CommonResult createErrorCode(@Valid @RequestBody ErrorCodeCreateReqVO createReqVO) { return success(errorCodeService.createErrorCode(createReqVO)); } @PutMapping("/update") @ApiOperation("更新错误ç ") @PreAuthorize("@ss.hasPermission('system:error-code:update')") - public CommonResult updateErrorCode(@Valid @RequestBody SysErrorCodeUpdateReqVO updateReqVO) { + public CommonResult updateErrorCode(@Valid @RequestBody ErrorCodeUpdateReqVO updateReqVO) { errorCodeService.updateErrorCode(updateReqVO); return success(true); } @@ -61,29 +61,29 @@ public class SysErrorCodeController { @ApiOperation("获得错误ç ") @ApiImplicitParam(name = "id", value = "ç¼–å·", required = true, example = "1024", dataTypeClass = Long.class) @PreAuthorize("@ss.hasPermission('system:error-code:query')") - public CommonResult getErrorCode(@RequestParam("id") Long id) { - SysErrorCodeDO errorCode = errorCodeService.getErrorCode(id); - return success(SysErrorCodeConvert.INSTANCE.convert(errorCode)); + public CommonResult getErrorCode(@RequestParam("id") Long id) { + ErrorCodeDO errorCode = errorCodeService.getErrorCode(id); + return success(ErrorCodeConvert.INSTANCE.convert(errorCode)); } @GetMapping("/page") @ApiOperation("获得错误ç åˆ†é¡µ") @PreAuthorize("@ss.hasPermission('system:error-code:query')") - public CommonResult> getErrorCodePage(@Valid SysErrorCodePageReqVO pageVO) { - PageResult pageResult = errorCodeService.getErrorCodePage(pageVO); - return success(SysErrorCodeConvert.INSTANCE.convertPage(pageResult)); + public CommonResult> getErrorCodePage(@Valid ErrorCodePageReqVO pageVO) { + PageResult pageResult = errorCodeService.getErrorCodePage(pageVO); + return success(ErrorCodeConvert.INSTANCE.convertPage(pageResult)); } @GetMapping("/export-excel") @ApiOperation("å¯¼å‡ºé”™è¯¯ç  Excel") @PreAuthorize("@ss.hasPermission('system:error-code:export')") @OperateLog(type = EXPORT) - public void exportErrorCodeExcel(@Valid SysErrorCodeExportReqVO exportReqVO, + public void exportErrorCodeExcel(@Valid ErrorCodeExportReqVO exportReqVO, HttpServletResponse response) throws IOException { - List list = errorCodeService.getErrorCodeList(exportReqVO); + List list = errorCodeService.getErrorCodeList(exportReqVO); // 导出 Excel - List datas = SysErrorCodeConvert.INSTANCE.convertList02(list); - ExcelUtils.write(response, "错误ç .xls", "æ•°æ®", SysErrorCodeExcelVO.class, datas); + List datas = ErrorCodeConvert.INSTANCE.convertList02(list); + ExcelUtils.write(response, "错误ç .xls", "æ•°æ®", ErrorCodeExcelVO.class, datas); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodeBaseVO.java similarity index 89% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeBaseVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodeBaseVO.java index f5d1e8d7aa..150401aa32 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodeBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.errorcode.vo; +package cn.iocoder.yudao.module.system.controller.admin.errorcode.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -10,7 +10,7 @@ import javax.validation.constraints.NotNull; * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ */ @Data -public class SysErrorCodeBaseVO { +public class ErrorCodeBaseVO { @ApiModelProperty(value = "应用å", required = true, example = "dashboard") @NotNull(message = "应用åä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodeCreateReqVO.java similarity index 51% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateCreateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodeCreateReqVO.java index f0481861a9..a0f36af1a9 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateCreateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodeCreateReqVO.java @@ -1,14 +1,14 @@ -package cn.iocoder.yudao.module.system.controller.sms.vo.template; +package cn.iocoder.yudao.module.system.controller.admin.errorcode.vo; import io.swagger.annotations.ApiModel; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; -@ApiModel("短信模æ¿åˆ›å»º Request VO") +@ApiModel("管ç†åŽå° - 错误ç åˆ›å»º Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class SysSmsTemplateCreateReqVO extends SysSmsTemplateBaseVO { +public class ErrorCodeCreateReqVO extends ErrorCodeBaseVO { } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodeExcelVO.java similarity index 90% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeExcelVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodeExcelVO.java index 5efbf36dc8..a9c317bfba 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodeExcelVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.errorcode.vo; +package cn.iocoder.yudao.module.system.controller.admin.errorcode.vo; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; @@ -14,7 +14,7 @@ import java.util.Date; * @author èŠ‹é“æºç  */ @Data -public class SysErrorCodeExcelVO { +public class ErrorCodeExcelVO { @ExcelProperty("错误ç ç¼–å·") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodeExportReqVO.java similarity index 81% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeExportReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodeExportReqVO.java index 8a46b99dc0..9f716152c8 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodeExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.errorcode.vo; +package cn.iocoder.yudao.module.system.controller.admin.errorcode.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -9,9 +9,9 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel(value = "é”™è¯¯ç  Excel 导出 Request VO", description = "傿•°å’Œ InfErrorCodePageReqVO 是一致的") +@ApiModel(value = "管ç†åŽå° - é”™è¯¯ç  Excel 导出 Request VO", description = "傿•°å’Œ InfErrorCodePageReqVO 是一致的") @Data -public class SysErrorCodeExportReqVO { +public class ErrorCodeExportReqVO { @ApiModelProperty(value = "错误ç ç±»åž‹", example = "1") private Integer type; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodePageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodePageReqVO.java similarity index 87% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodePageReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodePageReqVO.java index 6273ea192d..70eeda41ac 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodePageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodePageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.errorcode.vo; +package cn.iocoder.yudao.module.system.controller.admin.errorcode.vo; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; @@ -12,11 +12,11 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel("错误ç åˆ†é¡µ Request VO") +@ApiModel("管ç†åŽå° - 错误ç åˆ†é¡µ Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class SysErrorCodePageReqVO extends PageParam { +public class ErrorCodePageReqVO extends PageParam { @ApiModelProperty(value = "错误ç ç±»åž‹", example = "1", notes = "å‚è§ SysErrorCodeTypeEnum 枚举类") private Integer type; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodeRespVO.java similarity index 78% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodeRespVO.java index 35e4f93d64..c79b6bf8c2 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodeRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.errorcode.vo; +package cn.iocoder.yudao.module.system.controller.admin.errorcode.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -8,11 +8,11 @@ import lombok.ToString; import java.util.Date; -@ApiModel("é”™è¯¯ç  Response VO") +@ApiModel("管ç†åŽå° - é”™è¯¯ç  Response VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class SysErrorCodeRespVO extends SysErrorCodeBaseVO { +public class ErrorCodeRespVO extends ErrorCodeBaseVO { @ApiModelProperty(value = "错误ç ç¼–å·", required = true, example = "1024") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeUpdateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodeUpdateReqVO.java similarity index 70% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeUpdateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodeUpdateReqVO.java index 0d6b9508e1..ff16c02834 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeUpdateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodeUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.errorcode.vo; +package cn.iocoder.yudao.module.system.controller.admin.errorcode.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -8,11 +8,11 @@ import lombok.ToString; import javax.validation.constraints.NotNull; -@ApiModel("é”™è¯¯ç æ›´æ–° Request VO") +@ApiModel("管ç†åŽå° - é”™è¯¯ç æ›´æ–° Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class SysErrorCodeUpdateReqVO extends SysErrorCodeBaseVO { +public class ErrorCodeUpdateReqVO extends ErrorCodeBaseVO { @ApiModelProperty(value = "错误ç ç¼–å·", required = true, example = "1024") @NotNull(message = "错误ç ç¼–å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/SysLoginLogController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/LoginLogController.java similarity index 62% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/SysLoginLogController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/LoginLogController.java index 29addebc6d..ad78168355 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/SysLoginLogController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/LoginLogController.java @@ -1,16 +1,16 @@ -package cn.iocoder.yudao.module.system.controller.logger; +package cn.iocoder.yudao.module.system.controller.admin.logger; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import cn.iocoder.yudao.module.system.controller.logger.vo.loginlog.SysLoginLogExcelVO; -import cn.iocoder.yudao.module.system.controller.logger.vo.loginlog.SysLoginLogExportReqVO; -import cn.iocoder.yudao.module.system.controller.logger.vo.loginlog.SysLoginLogPageReqVO; -import cn.iocoder.yudao.module.system.controller.logger.vo.loginlog.SysLoginLogRespVO; -import cn.iocoder.yudao.module.system.convert.logger.SysLoginLogConvert; -import cn.iocoder.yudao.module.system.service.logger.SysLoginLogService; +import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogExcelVO; +import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogRespVO; +import cn.iocoder.yudao.module.system.convert.logger.LoginLogConvert; +import cn.iocoder.yudao.module.system.service.logger.LoginLogService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; @@ -27,33 +27,33 @@ import java.util.List; import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; -@Api(tags = "登录日志") +@Api(tags = "管ç†åŽå° - 登录日志") @RestController @RequestMapping("/system/login-log") @Validated -public class SysLoginLogController { +public class LoginLogController { @Resource - private SysLoginLogService loginLogService; + private LoginLogService loginLogService; @GetMapping("/page") @ApiOperation("获得登录日志分页列表") @PreAuthorize("@ss.hasPermission('system:login-log:query')") - public CommonResult> getLoginLogPage(@Valid SysLoginLogPageReqVO reqVO) { + public CommonResult> getLoginLogPage(@Valid LoginLogPageReqVO reqVO) { PageResult page = loginLogService.getLoginLogPage(reqVO); - return CommonResult.success(SysLoginLogConvert.INSTANCE.convertPage(page)); + return CommonResult.success(LoginLogConvert.INSTANCE.convertPage(page)); } @GetMapping("/export") @ApiOperation("导出登录日志 Excel") @PreAuthorize("@ss.hasPermission('system:login-log:export')") @OperateLog(type = EXPORT) - public void exportLoginLog(HttpServletResponse response, @Valid SysLoginLogExportReqVO reqVO) throws IOException { + public void exportLoginLog(HttpServletResponse response, @Valid LoginLogExportReqVO reqVO) throws IOException { List list = loginLogService.getLoginLogList(reqVO); // æ‹¼æŽ¥æ•°æ® - List data = SysLoginLogConvert.INSTANCE.convertList(list); + List data = LoginLogConvert.INSTANCE.convertList(list); // 输出 - ExcelUtils.write(response, "登录日志.xls", "æ•°æ®åˆ—表", SysLoginLogExcelVO.class, data); + ExcelUtils.write(response, "登录日志.xls", "æ•°æ®åˆ—表", LoginLogExcelVO.class, data); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/SysOperateLogController.http b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/OperateLogController.http similarity index 81% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/SysOperateLogController.http rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/OperateLogController.http index 3b88719963..f667482da4 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/SysOperateLogController.http +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/OperateLogController.http @@ -1,3 +1,4 @@ ### 请求 /system/operate-log/demo æŽ¥å£ => æˆåŠŸ GET {{baseUrl}}/system/operate-log/demo Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/SysOperateLogController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/OperateLogController.java similarity index 63% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/SysOperateLogController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/OperateLogController.java index f572ed5c29..2eca78fc15 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/SysOperateLogController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/OperateLogController.java @@ -1,12 +1,12 @@ -package cn.iocoder.yudao.module.system.controller.logger; +package cn.iocoder.yudao.module.system.controller.admin.logger; -import cn.iocoder.yudao.module.system.controller.logger.vo.operatelog.SysOperateLogExcelVO; -import cn.iocoder.yudao.module.system.controller.logger.vo.operatelog.SysOperateLogExportReqVO; -import cn.iocoder.yudao.module.system.controller.logger.vo.operatelog.SysOperateLogPageReqVO; -import cn.iocoder.yudao.module.system.controller.logger.vo.operatelog.SysOperateLogRespVO; -import cn.iocoder.yudao.module.system.convert.logger.SysOperateLogConvert; -import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysOperateLogDO; -import cn.iocoder.yudao.module.system.service.logger.SysOperateLogService; +import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogExcelVO; +import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogRespVO; +import cn.iocoder.yudao.module.system.convert.logger.OperateLogConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO; +import cn.iocoder.yudao.module.system.service.logger.OperateLogService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; @@ -35,30 +35,30 @@ import java.util.Map; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; -@Api(tags = "æ“作日志") +@Api(tags = "管ç†åŽå° - æ“作日志") @RestController @RequestMapping("/system/operate-log") @Validated -public class SysOperateLogController { +public class OperateLogController { @Resource - private SysOperateLogService operateLogService; + private OperateLogService operateLogService; @Resource private SysUserCoreService userCoreService; @GetMapping("/page") @ApiOperation("查看æ“作日志分页列表") @PreAuthorize("@ss.hasPermission('system:operate-log:query')") - public CommonResult> pageOperateLog(@Valid SysOperateLogPageReqVO reqVO) { - PageResult pageResult = operateLogService.getOperateLogPage(reqVO); + public CommonResult> pageOperateLog(@Valid OperateLogPageReqVO reqVO) { + PageResult pageResult = operateLogService.getOperateLogPage(reqVO); // 获得拼接需è¦çš„æ•°æ® - Collection userIds = CollectionUtils.convertList(pageResult.getList(), SysOperateLogDO::getUserId); + Collection userIds = CollectionUtils.convertList(pageResult.getList(), OperateLogDO::getUserId); Map userMap = userCoreService.getUserMap(userIds); // æ‹¼æŽ¥æ•°æ® - List list = new ArrayList<>(pageResult.getList().size()); + List list = new ArrayList<>(pageResult.getList().size()); pageResult.getList().forEach(operateLog -> { - SysOperateLogRespVO respVO = SysOperateLogConvert.INSTANCE.convert(operateLog); + OperateLogRespVO respVO = OperateLogConvert.INSTANCE.convert(operateLog); list.add(respVO); // æ‹¼æŽ¥ç”¨æˆ·ä¿¡æ¯ MapUtils.findAndThen(userMap, operateLog.getUserId(), user -> respVO.setUserNickname(user.getNickname())); @@ -70,16 +70,16 @@ public class SysOperateLogController { @GetMapping("/export") @PreAuthorize("@ss.hasPermission('system:operate-log:export')") @OperateLog(type = EXPORT) - public void exportOperateLog(HttpServletResponse response, @Valid SysOperateLogExportReqVO reqVO) throws IOException { - List list = operateLogService.getOperateLogs(reqVO); + public void exportOperateLog(HttpServletResponse response, @Valid OperateLogExportReqVO reqVO) throws IOException { + List list = operateLogService.getOperateLogs(reqVO); // 获得拼接需è¦çš„æ•°æ® - Collection userIds = CollectionUtils.convertList(list, SysOperateLogDO::getUserId); + Collection userIds = CollectionUtils.convertList(list, OperateLogDO::getUserId); Map userMap = userCoreService.getUserMap(userIds); // æ‹¼æŽ¥æ•°æ® - List excelDataList = SysOperateLogConvert.INSTANCE.convertList(list, userMap); + List excelDataList = OperateLogConvert.INSTANCE.convertList(list, userMap); // 输出 - ExcelUtils.write(response, "æ“作日志.xls", "æ•°æ®åˆ—表", SysOperateLogExcelVO.class, excelDataList); + ExcelUtils.write(response, "æ“作日志.xls", "æ•°æ®åˆ—表", OperateLogExcelVO.class, excelDataList); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogBaseVO.java similarity index 93% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogBaseVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogBaseVO.java index 6b26057962..e996570845 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.logger.vo.loginlog; +package cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -13,7 +13,7 @@ import javax.validation.constraints.Size; * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ */ @Data -public class SysLoginLogBaseVO { +public class LoginLogBaseVO { @ApiModelProperty(value = "日志类型", required = true, example = "1", notes = "å‚è§ SysLoginLogTypeEnum 枚举类") @NotNull(message = "日志类型ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogExcelVO.java similarity index 90% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogExcelVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogExcelVO.java index bda160a3fa..2a16454fca 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogExcelVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.logger.vo.loginlog; +package cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; @@ -12,7 +12,7 @@ import java.util.Date; * 登录日志 Excel 导出å“应 VO */ @Data -public class SysLoginLogExcelVO { +public class LoginLogExcelVO { @ExcelProperty("日志主键") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogExportReqVO.java similarity index 84% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogExportReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogExportReqVO.java index 8f936268bc..df1a57ea52 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.logger.vo.loginlog; +package cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -9,9 +9,9 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel("登录日志分页列表 Request VO") +@ApiModel("管ç†åŽå° - 登录日志分页列表 Request VO") @Data -public class SysLoginLogExportReqVO { +public class LoginLogExportReqVO { @ApiModelProperty(value = "用户 IP", example = "127.0.0.1", notes = "模拟匹é…") private String userIp; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogPageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogPageReqVO.java similarity index 85% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogPageReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogPageReqVO.java index 7c71730c90..ebefb728e2 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogPageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.logger.vo.loginlog; +package cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; @@ -11,10 +11,10 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel("登录日志分页列表 Request VO") +@ApiModel("管ç†åŽå° - 登录日志分页列表 Request VO") @Data @EqualsAndHashCode(callSuper = true) -public class SysLoginLogPageReqVO extends PageParam { +public class LoginLogPageReqVO extends PageParam { @ApiModelProperty(value = "用户 IP", example = "127.0.0.1", notes = "模拟匹é…") private String userIp; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogRespVO.java similarity index 82% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogRespVO.java index 3f588304b9..17177dadf2 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/loginlog/SysLoginLogRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.logger.vo.loginlog; +package cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -9,11 +9,11 @@ import lombok.ToString; import javax.validation.constraints.NotNull; import java.util.Date; -@ApiModel("登录日志 Response VO") +@ApiModel("管ç†åŽå° - 登录日志 Response VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class SysLoginLogRespVO extends SysLoginLogBaseVO { +public class LoginLogRespVO extends LoginLogBaseVO { @ApiModelProperty(value = "日志编å·", required = true, example = "1024") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogBaseVO.java similarity index 96% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogBaseVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogBaseVO.java index 735e0b198e..e66a20e3f2 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.logger.vo.operatelog; +package cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -13,7 +13,7 @@ import java.util.Map; * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ */ @Data -public class SysOperateLogBaseVO { +public class OperateLogBaseVO { @ApiModelProperty(value = "链路追踪编å·", required = true, example = "89aca178-a370-411c-ae02-3f0d672be4ab") @NotEmpty(message = "链路追踪编å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogExcelVO.java similarity index 89% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogExcelVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogExcelVO.java index e5fc3e9410..40546b2d9c 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogExcelVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.logger.vo.operatelog; +package cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; @@ -12,7 +12,7 @@ import java.util.Date; * æ“作日志 Excel 导出å“应 VO */ @Data -public class SysOperateLogExcelVO { +public class OperateLogExcelVO { @ExcelProperty("日志编å·") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogExportReqVO.java similarity index 86% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogExportReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogExportReqVO.java index 1c501acd6e..52dc5d99b5 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.logger.vo.operatelog; +package cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -9,9 +9,9 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel("æ“作日志分页列表 Request VO") +@ApiModel("管ç†åŽå° - æ“作日志分页列表 Request VO") @Data -public class SysOperateLogExportReqVO { +public class OperateLogExportReqVO { @ApiModelProperty(value = "æ“作模å—", example = "订å•", notes = "模拟匹é…") private String module; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogPageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogPageReqVO.java similarity index 85% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogPageReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogPageReqVO.java index 92efe97388..f94d979f4a 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogPageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.logger.vo.operatelog; +package cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; @@ -10,9 +10,9 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel("æ“作日志分页列表 Request VO") +@ApiModel("管ç†åŽå° - æ“作日志分页列表 Request VO") @Data -public class SysOperateLogPageReqVO extends PageParam { +public class OperateLogPageReqVO extends PageParam { @ApiModelProperty(value = "æ“作模å—", example = "订å•", notes = "模拟匹é…") private String module; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogRespVO.java similarity index 71% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogRespVO.java index fc825d62a5..445b400603 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/logger/vo/operatelog/SysOperateLogRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.logger.vo.operatelog; +package cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -6,11 +6,11 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; -@ApiModel("æ“作日志 Response VO") +@ApiModel("管ç†åŽå° - æ“作日志 Response VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class SysOperateLogRespVO extends SysOperateLogBaseVO { +public class OperateLogRespVO extends OperateLogBaseVO { @ApiModelProperty(value = "日志编å·", required = true, example = "1024") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/SysNoticeController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/NoticeController.java similarity index 63% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/SysNoticeController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/NoticeController.java index 7cb255ee5b..d14cfb7333 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/SysNoticeController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/NoticeController.java @@ -1,13 +1,13 @@ -package cn.iocoder.yudao.module.system.controller.notice; +package cn.iocoder.yudao.module.system.controller.admin.notice; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticeCreateReqVO; -import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticePageReqVO; -import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticeRespVO; -import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticeUpdateReqVO; -import cn.iocoder.yudao.module.system.convert.notice.SysNoticeConvert; -import cn.iocoder.yudao.module.system.service.notice.SysNoticeService; +import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticePageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeRespVO; +import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeUpdateReqVO; +import cn.iocoder.yudao.module.system.convert.notice.NoticeConvert; +import cn.iocoder.yudao.module.system.service.notice.NoticeService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; @@ -20,19 +20,19 @@ import javax.validation.Valid; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -@Api(tags = "通知公告") +@Api(tags = "管ç†åŽå° - 通知公告") @RestController @RequestMapping("/system/notice") @Validated -public class SysNoticeController { +public class NoticeController { @Resource - private SysNoticeService noticeService; + private NoticeService noticeService; @PostMapping("/create") @ApiOperation("创建通知公告") @PreAuthorize("@ss.hasPermission('system:notice:create')") - public CommonResult createNotice(@Valid @RequestBody SysNoticeCreateReqVO reqVO) { + public CommonResult createNotice(@Valid @RequestBody NoticeCreateReqVO reqVO) { Long noticeId = noticeService.createNotice(reqVO); return success(noticeId); } @@ -40,7 +40,7 @@ public class SysNoticeController { @PutMapping("/update") @ApiOperation("修改通知公告") @PreAuthorize("@ss.hasPermission('system:notice:update')") - public CommonResult updateNotice(@Valid @RequestBody SysNoticeUpdateReqVO reqVO) { + public CommonResult updateNotice(@Valid @RequestBody NoticeUpdateReqVO reqVO) { noticeService.updateNotice(reqVO); return success(true); } @@ -57,16 +57,16 @@ public class SysNoticeController { @GetMapping("/page") @ApiOperation("获å–通知公告列表") @PreAuthorize("@ss.hasPermission('system:notice:query')") - public CommonResult> pageNotices(@Validated SysNoticePageReqVO reqVO) { - return success(SysNoticeConvert.INSTANCE.convertPage(noticeService.pageNotices(reqVO))); + public CommonResult> pageNotices(@Validated NoticePageReqVO reqVO) { + return success(NoticeConvert.INSTANCE.convertPage(noticeService.pageNotices(reqVO))); } @GetMapping("/get") @ApiOperation("获得通知公告") @ApiImplicitParam(name = "id", value = "ç¼–å·", required = true, example = "1024", dataTypeClass = Long.class) @PreAuthorize("@ss.hasPermission('system:notice:query')") - public CommonResult getNotice(@RequestParam("id") Long id) { - return success(SysNoticeConvert.INSTANCE.convert(noticeService.getNotice(id))); + public CommonResult getNotice(@RequestParam("id") Long id) { + return success(NoticeConvert.INSTANCE.convert(noticeService.getNotice(id))); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticeBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/vo/NoticeBaseVO.java similarity index 91% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticeBaseVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/vo/NoticeBaseVO.java index ddbb141cce..48d74dd2bd 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticeBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/vo/NoticeBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.notice.vo; +package cn.iocoder.yudao.module.system.controller.admin.notice.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -12,7 +12,7 @@ import javax.validation.constraints.Size; * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ */ @Data -public class SysNoticeBaseVO { +public class NoticeBaseVO { @ApiModelProperty(value = "公告标题", required = true, example = "å°åšä¸»") @NotBlank(message = "公告标题ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/vo/NoticeCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/vo/NoticeCreateReqVO.java new file mode 100644 index 0000000000..49e671ce14 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/vo/NoticeCreateReqVO.java @@ -0,0 +1,11 @@ +package cn.iocoder.yudao.module.system.controller.admin.notice.vo; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@ApiModel("管ç†åŽå° - 通知公告创建 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +public class NoticeCreateReqVO extends NoticeBaseVO { +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticePageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/vo/NoticePageReqVO.java similarity index 74% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticePageReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/vo/NoticePageReqVO.java index 6e1932a155..570d530053 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticePageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/vo/NoticePageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.notice.vo; +package cn.iocoder.yudao.module.system.controller.admin.notice.vo; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; @@ -6,10 +6,10 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; -@ApiModel("通知公告分页 Request VO") +@ApiModel("管ç†åŽå° - 通知公告分页 Request VO") @Data @EqualsAndHashCode(callSuper = true) -public class SysNoticePageReqVO extends PageParam { +public class NoticePageReqVO extends PageParam { @ApiModelProperty(value = "通知公告åç§°", example = "芋é“", notes = "模糊匹é…") private String title; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticeRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/vo/NoticeRespVO.java similarity index 71% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticeRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/vo/NoticeRespVO.java index 0cfb78bbb0..1f18df030e 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticeRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/vo/NoticeRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.notice.vo; +package cn.iocoder.yudao.module.system.controller.admin.notice.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -7,10 +7,10 @@ import lombok.EqualsAndHashCode; import java.util.Date; -@ApiModel("é€šçŸ¥å…¬å‘Šä¿¡æ¯ Response VO") +@ApiModel("管ç†åŽå° - é€šçŸ¥å…¬å‘Šä¿¡æ¯ Response VO") @Data @EqualsAndHashCode(callSuper = true) -public class SysNoticeRespVO extends SysNoticeBaseVO { +public class NoticeRespVO extends NoticeBaseVO { @ApiModelProperty(value = "通知公告åºå·", required = true, example = "1024") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticeUpdateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/vo/NoticeUpdateReqVO.java similarity index 69% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticeUpdateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/vo/NoticeUpdateReqVO.java index 3d6fdd586b..30f4a3720b 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticeUpdateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/vo/NoticeUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.notice.vo; +package cn.iocoder.yudao.module.system.controller.admin.notice.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -7,10 +7,10 @@ import lombok.EqualsAndHashCode; import javax.validation.constraints.NotNull; -@ApiModel("å²—ä½å…¬å‘Šæ›´æ–° Request VO") +@ApiModel("管ç†åŽå° - å²—ä½å…¬å‘Šæ›´æ–° Request VO") @Data @EqualsAndHashCode(callSuper = true) -public class SysNoticeUpdateReqVO extends SysNoticeBaseVO { +public class NoticeUpdateReqVO extends NoticeBaseVO { @ApiModelProperty(value = "å²—ä½å…¬å‘Šç¼–å·", required = true, example = "1024") @NotNull(message = "å²—ä½å…¬å‘Šç¼–å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/SysMenuController.http b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/MenuController.http similarity index 78% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/SysMenuController.http rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/MenuController.http index c073f7bdc6..a90d8b8ab3 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/SysMenuController.http +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/MenuController.http @@ -1,3 +1,4 @@ ### 请求 /menu/list æŽ¥å£ => æˆåŠŸ GET {{baseUrl}}/system/menu/list Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/SysMenuController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/MenuController.java similarity index 63% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/SysMenuController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/MenuController.java index 340b3bff78..8678da529c 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/SysMenuController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/MenuController.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.module.system.controller.permission; +package cn.iocoder.yudao.module.system.controller.admin.permission; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.module.system.controller.permission.vo.menu.*; -import cn.iocoder.yudao.module.system.convert.permission.SysMenuConvert; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysMenuDO; -import cn.iocoder.yudao.module.system.service.permission.SysMenuService; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.*; +import cn.iocoder.yudao.module.system.convert.permission.MenuConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; +import cn.iocoder.yudao.module.system.service.permission.MenuService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; @@ -20,19 +20,19 @@ import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -@Api(tags = "èœå•") +@Api(tags = "管ç†åŽå° - èœå•") @RestController @RequestMapping("/system/menu") @Validated -public class SysMenuController { +public class MenuController { @Resource - private SysMenuService menuService; + private MenuService menuService; @PostMapping("/create") @ApiOperation("创建èœå•") @PreAuthorize("@ss.hasPermission('system:menu:create')") - public CommonResult createMenu(@Valid @RequestBody SysMenuCreateReqVO reqVO) { + public CommonResult createMenu(@Valid @RequestBody MenuCreateReqVO reqVO) { Long menuId = menuService.createMenu(reqVO); return success(menuId); } @@ -40,7 +40,7 @@ public class SysMenuController { @PutMapping("/update") @ApiOperation("修改èœå•") @PreAuthorize("@ss.hasPermission('system:menu:update')") - public CommonResult updateMenu(@Valid @RequestBody SysMenuUpdateReqVO reqVO) { + public CommonResult updateMenu(@Valid @RequestBody MenuUpdateReqVO reqVO) { menuService.updateMenu(reqVO); return success(true); } @@ -57,30 +57,30 @@ public class SysMenuController { @GetMapping("/list") @ApiOperation("获å–èœå•列表") @PreAuthorize("@ss.hasPermission('system:menu:query')") - public CommonResult> getMenus(SysMenuListReqVO reqVO) { - List list = menuService.getMenus(reqVO); - list.sort(Comparator.comparing(SysMenuDO::getSort)); - return success(SysMenuConvert.INSTANCE.convertList(list)); + public CommonResult> getMenus(MenuListReqVO reqVO) { + List list = menuService.getMenus(reqVO); + list.sort(Comparator.comparing(MenuDO::getSort)); + return success(MenuConvert.INSTANCE.convertList(list)); } @GetMapping("/list-all-simple") @ApiOperation(value = "获å–èœå•精简信æ¯åˆ—表", notes = "åªåŒ…å«è¢«å¼€å¯çš„èœå•,主è¦ç”¨äºŽå‰ç«¯çš„下拉选项") - public CommonResult> getSimpleMenus() { + public CommonResult> getSimpleMenus() { // 获得èœå•列表,åªè¦å¼€å¯çжæ€çš„ - SysMenuListReqVO reqVO = new SysMenuListReqVO(); + MenuListReqVO reqVO = new MenuListReqVO(); reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); - List list = menuService.getMenus(reqVO); + List list = menuService.getMenus(reqVO); // 排åºåŽï¼Œè¿”回个诶å‰ç«¯ - list.sort(Comparator.comparing(SysMenuDO::getSort)); - return success(SysMenuConvert.INSTANCE.convertList02(list)); + list.sort(Comparator.comparing(MenuDO::getSort)); + return success(MenuConvert.INSTANCE.convertList02(list)); } @GetMapping("/get") @ApiOperation("获å–èœå•ä¿¡æ¯") @PreAuthorize("@ss.hasPermission('system:menu:query')") - public CommonResult getMenu(Long id) { - SysMenuDO menu = menuService.getMenu(id); - return success(SysMenuConvert.INSTANCE.convert(menu)); + public CommonResult getMenu(Long id) { + MenuDO menu = menuService.getMenu(id); + return success(MenuConvert.INSTANCE.convert(menu)); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/SysPermissionController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/PermissionController.java similarity index 73% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/SysPermissionController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/PermissionController.java index 500f4ac4b5..de26fbf086 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/SysPermissionController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/PermissionController.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.module.system.controller.permission; +package cn.iocoder.yudao.module.system.controller.admin.permission; import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.module.system.controller.permission.vo.permission.SysPermissionAssignRoleDataScopeReqVO; -import cn.iocoder.yudao.module.system.controller.permission.vo.permission.SysPermissionAssignRoleMenuReqVO; -import cn.iocoder.yudao.module.system.controller.permission.vo.permission.SysPermissionAssignUserRoleReqVO; -import cn.iocoder.yudao.module.system.service.permission.SysPermissionService; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleDataScopeReqVO; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleMenuReqVO; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.permission.PermissionAssignUserRoleReqVO; +import cn.iocoder.yudao.module.system.service.permission.PermissionService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; @@ -12,6 +12,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.validation.Valid; import java.util.Set; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -21,13 +22,15 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; * * @author èŠ‹é“æºç  */ -@Api(tags = "æƒé™") +@Api(tags = "管ç†åŽå° - æƒé™") @RestController @RequestMapping("/system/permission") -public class SysPermissionController { +public class PermissionController { @Resource - private SysPermissionService permissionService; + private PermissionService permissionService; + + // TODO @芋艿:处ç†ä¸‹å…¨æ–°å•Šæ ‡è¯† @ApiOperation("获得角色拥有的èœå•ç¼–å·") @ApiImplicitParam(name = "roleId", value = "角色编å·", required = true, dataTypeClass = Long.class) @@ -40,7 +43,7 @@ public class SysPermissionController { @PostMapping("/assign-role-menu") @ApiOperation("赋予角色èœå•") // @RequiresPermissions("system:permission:assign-role-resource") - public CommonResult assignRoleMenu(@Validated @RequestBody SysPermissionAssignRoleMenuReqVO reqVO) { + public CommonResult assignRoleMenu(@Validated @RequestBody PermissionAssignRoleMenuReqVO reqVO) { permissionService.assignRoleMenu(reqVO.getRoleId(), reqVO.getMenuIds()); return success(true); } @@ -48,8 +51,7 @@ public class SysPermissionController { @PostMapping("/assign-role-data-scope") @ApiOperation("èµ‹äºˆè§’è‰²æ•°æ®æƒé™") // @RequiresPermissions("system:permission:assign-role-data-scope") - public CommonResult assignRoleDataScope( - @Validated @RequestBody SysPermissionAssignRoleDataScopeReqVO reqVO) { + public CommonResult assignRoleDataScope(@Valid @RequestBody PermissionAssignRoleDataScopeReqVO reqVO) { permissionService.assignRoleDataScope(reqVO.getRoleId(), reqVO.getDataScope(), reqVO.getDataScopeDeptIds()); return success(true); } @@ -65,7 +67,7 @@ public class SysPermissionController { @ApiOperation("赋予用户角色") @PostMapping("/assign-user-role") // @RequiresPermissions("system:permission:assign-user-role") - public CommonResult assignUserRole(@Validated @RequestBody SysPermissionAssignUserRoleReqVO reqVO) { + public CommonResult assignUserRole(@Validated @RequestBody PermissionAssignUserRoleReqVO reqVO) { permissionService.assignUserRole(reqVO.getUserId(), reqVO.getRoleIds()); return success(true); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/SysRoleController.http b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/RoleController.http similarity index 84% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/SysRoleController.http rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/RoleController.http index 4e150ac303..c28725d860 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/SysRoleController.http +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/RoleController.http @@ -2,6 +2,7 @@ POST {{baseUrl}}/system/role/create Authorization: Bearer {{token}} Content-Type: application/json +tenant-id: {{adminTenentId}} { "name": "测试角色", @@ -13,7 +14,7 @@ Content-Type: application/json POST {{baseUrl}}/system/role/update Authorization: Bearer {{token}} Content-Type: application/json - +tenant-id: {{adminTenentId}} { "id": 100, @@ -25,6 +26,7 @@ Content-Type: application/json POST {{baseUrl}}/system/role/delete Content-Type: application/x-www-form-urlencoded Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} roleId=14 @@ -32,10 +34,12 @@ roleId=14 GET {{baseUrl}}/system/role/get?id=100 Content-Type: application/x-www-form-urlencoded Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} ### /role/page æˆåŠŸ GET {{baseUrl}}/system/role/page?pageNo=1&pageSize=10 Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} ### diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/SysRoleController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/RoleController.java similarity index 76% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/SysRoleController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/RoleController.java index 7ec11bd563..ac7dce6358 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/SysRoleController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/RoleController.java @@ -1,14 +1,14 @@ -package cn.iocoder.yudao.module.system.controller.permission; +package cn.iocoder.yudao.module.system.controller.admin.permission; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import cn.iocoder.yudao.module.system.controller.permission.vo.role.*; -import cn.iocoder.yudao.module.system.convert.permission.SysRoleConvert; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.*; +import cn.iocoder.yudao.module.system.convert.permission.RoleConvert; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; -import cn.iocoder.yudao.module.system.service.permission.SysRoleService; +import cn.iocoder.yudao.module.system.service.permission.RoleService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; @@ -27,26 +27,26 @@ import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; -@Api(tags = "角色") +@Api(tags = "管ç†åŽå° - 角色") @RestController @RequestMapping("/system/role") @Validated -public class SysRoleController { +public class RoleController { @Resource - private SysRoleService roleService; + private RoleService roleService; @PostMapping("/create") @ApiOperation("创建角色") @PreAuthorize("@ss.hasPermission('system:role:create')") - public CommonResult createRole(@Valid @RequestBody SysRoleCreateReqVO reqVO) { + public CommonResult createRole(@Valid @RequestBody RoleCreateReqVO reqVO) { return success(roleService.createRole(reqVO)); } @PutMapping("/update") @ApiOperation("修改角色") @PreAuthorize("@ss.hasPermission('system:role:update')") - public CommonResult updateRole(@Valid @RequestBody SysRoleUpdateReqVO reqVO) { + public CommonResult updateRole(@Valid @RequestBody RoleUpdateReqVO reqVO) { roleService.updateRole(reqVO); return success(true); } @@ -54,7 +54,7 @@ public class SysRoleController { @PutMapping("/update-status") @ApiOperation("修改角色状æ€") @PreAuthorize("@ss.hasPermission('system:role:update')") - public CommonResult updateRoleStatus(@Valid @RequestBody SysRoleUpdateStatusReqVO reqVO) { + public CommonResult updateRoleStatus(@Valid @RequestBody RoleUpdateStatusReqVO reqVO) { roleService.updateRoleStatus(reqVO.getId(), reqVO.getStatus()); return success(true); } @@ -71,36 +71,36 @@ public class SysRoleController { @GetMapping("/get") @ApiOperation("获得角色信æ¯") @PreAuthorize("@ss.hasPermission('system:role:query')") - public CommonResult getRole(@RequestParam("id") Long id) { + public CommonResult getRole(@RequestParam("id") Long id) { SysRoleDO role = roleService.getRole(id); - return success(SysRoleConvert.INSTANCE.convert(role)); + return success(RoleConvert.INSTANCE.convert(role)); } @GetMapping("/page") @ApiOperation("获得角色分页") @PreAuthorize("@ss.hasPermission('system:role:query')") - public CommonResult> getRolePage(SysRolePageReqVO reqVO) { + public CommonResult> getRolePage(RolePageReqVO reqVO) { return success(roleService.getRolePage(reqVO)); } @GetMapping("/list-all-simple") @ApiOperation(value = "获å–角色精简信æ¯åˆ—表", notes = "åªåŒ…å«è¢«å¼€å¯çš„角色,主è¦ç”¨äºŽå‰ç«¯çš„下拉选项") - public CommonResult> getSimpleRoles() { + public CommonResult> getSimpleRoles() { // 获得角色列表,åªè¦å¼€å¯çжæ€çš„ List list = roleService.getRoles(Collections.singleton(CommonStatusEnum.ENABLE.getStatus())); // 排åºåŽï¼Œè¿”回个诶å‰ç«¯ list.sort(Comparator.comparing(SysRoleDO::getSort)); - return success(SysRoleConvert.INSTANCE.convertList02(list)); + return success(RoleConvert.INSTANCE.convertList02(list)); } @GetMapping("/export") @OperateLog(type = EXPORT) @PreAuthorize("@ss.hasPermission('system:role:export')") - public void export(HttpServletResponse response, @Validated SysRoleExportReqVO reqVO) throws IOException { + public void export(HttpServletResponse response, @Validated RoleExportReqVO reqVO) throws IOException { List list = roleService.getRoleList(reqVO); - List data = SysRoleConvert.INSTANCE.convertList03(list); + List data = RoleConvert.INSTANCE.convertList03(list); // 输出 - ExcelUtils.write(response, "角色数æ®.xls", "角色列表", SysRoleExcelVO.class, data); + ExcelUtils.write(response, "角色数æ®.xls", "角色列表", RoleExcelVO.class, data); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuBaseVO.java similarity index 95% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuBaseVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuBaseVO.java index 87f2eb7fe5..8769f3a1ba 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.permission.vo.menu; +package cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -12,7 +12,7 @@ import javax.validation.constraints.Size; * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ */ @Data -public class SysMenuBaseVO { +public class MenuBaseVO { @ApiModelProperty(value = "èœå•åç§°", required = true, example = "芋é“") @NotBlank(message = "èœå•åç§°ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuCreateReqVO.java new file mode 100644 index 0000000000..a793997ff0 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuCreateReqVO.java @@ -0,0 +1,10 @@ +package cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu; + +import io.swagger.annotations.ApiModel; +import lombok.*; + +@ApiModel("管ç†åŽå° - èœå•创建 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +public class MenuCreateReqVO extends MenuBaseVO { +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuListReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuListReqVO.java similarity index 70% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuListReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuListReqVO.java index e0b8a2d026..53b0b46a92 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuListReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuListReqVO.java @@ -1,12 +1,12 @@ -package cn.iocoder.yudao.module.system.controller.permission.vo.menu; +package cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -@ApiModel("èœå•列表 Request VO") +@ApiModel("管ç†åŽå° - èœå•列表 Request VO") @Data -public class SysMenuListReqVO { +public class MenuListReqVO { @ApiModelProperty(value = "èœå•åç§°", example = "芋é“", notes = "模糊匹é…") private String name; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuRespVO.java similarity index 79% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuRespVO.java index ed8512ae58..9fe9e12f5c 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.permission.vo.menu; +package cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -9,12 +9,12 @@ import lombok.NoArgsConstructor; import java.util.Date; -@ApiModel("èœå•ä¿¡æ¯ Response VO") +@ApiModel("管ç†åŽå° - èœå•ä¿¡æ¯ Response VO") @Data @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(callSuper = true) -public class SysMenuRespVO extends SysMenuBaseVO { +public class MenuRespVO extends MenuBaseVO { @ApiModelProperty(value = "èœå•ç¼–å·", required = true, example = "1024") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuSimpleRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuSimpleRespVO.java similarity index 76% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuSimpleRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuSimpleRespVO.java index dc160cb966..9274185186 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuSimpleRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuSimpleRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.permission.vo.menu; +package cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -6,11 +6,11 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -@ApiModel("èœå•ç²¾ç®€ä¿¡æ¯ Response VO") +@ApiModel("管ç†åŽå° - èœå•ç²¾ç®€ä¿¡æ¯ Response VO") @Data @NoArgsConstructor @AllArgsConstructor -public class SysMenuSimpleRespVO { +public class MenuSimpleRespVO { @ApiModelProperty(value = "èœå•ç¼–å·", required = true, example = "1024") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuUpdateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuUpdateReqVO.java similarity index 66% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuUpdateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuUpdateReqVO.java index bf44bf94a8..7a17843631 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuUpdateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.permission.vo.menu; +package cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -6,10 +6,10 @@ import lombok.*; import javax.validation.constraints.NotNull; -@ApiModel("èœå•æ›´æ–° Request VO") +@ApiModel("管ç†åŽå° - èœå•æ›´æ–° Request VO") @Data @EqualsAndHashCode(callSuper = true) -public class SysMenuUpdateReqVO extends SysMenuBaseVO { +public class MenuUpdateReqVO extends MenuBaseVO { @ApiModelProperty(value = "èœå•ç¼–å·", required = true, example = "1024") @NotNull(message = "èœå•ç¼–å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/permission/SysPermissionAssignRoleDataScopeReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleDataScopeReqVO.java similarity index 81% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/permission/SysPermissionAssignRoleDataScopeReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleDataScopeReqVO.java index 08feaae0d5..0683ba9b81 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/permission/SysPermissionAssignRoleDataScopeReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleDataScopeReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.permission.vo.permission; +package cn.iocoder.yudao.module.system.controller.admin.permission.vo.permission; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -8,9 +8,9 @@ import javax.validation.constraints.NotNull; import java.util.Collections; import java.util.Set; -@ApiModel("èµ‹äºˆè§’è‰²æ•°æ®æƒé™ Request VO") +@ApiModel("管ç†åŽå° - èµ‹äºˆè§’è‰²æ•°æ®æƒé™ Request VO") @Data -public class SysPermissionAssignRoleDataScopeReqVO { +public class PermissionAssignRoleDataScopeReqVO { @ApiModelProperty(value = "角色编å·", required = true, example = "1") @NotNull(message = "角色编å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/permission/SysPermissionAssignRoleMenuReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java similarity index 73% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/permission/SysPermissionAssignRoleMenuReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java index 664d6d8e80..3fc4dcb2c0 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/permission/SysPermissionAssignRoleMenuReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.permission.vo.permission; +package cn.iocoder.yudao.module.system.controller.admin.permission.vo.permission; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -8,9 +8,9 @@ import javax.validation.constraints.NotNull; import java.util.Collections; import java.util.Set; -@ApiModel("赋予角色èœå• Request VO") +@ApiModel("管ç†åŽå° - 赋予角色èœå• Request VO") @Data -public class SysPermissionAssignRoleMenuReqVO { +public class PermissionAssignRoleMenuReqVO { @ApiModelProperty(value = "角色编å·", required = true, example = "1") @NotNull(message = "角色编å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/permission/SysPermissionAssignUserRoleReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/permission/PermissionAssignUserRoleReqVO.java similarity index 73% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/permission/SysPermissionAssignUserRoleReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/permission/PermissionAssignUserRoleReqVO.java index fdbbedcbd7..75671bcd2c 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/permission/SysPermissionAssignUserRoleReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/permission/PermissionAssignUserRoleReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.permission.vo.permission; +package cn.iocoder.yudao.module.system.controller.admin.permission.vo.permission; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -8,9 +8,9 @@ import javax.validation.constraints.NotNull; import java.util.Collections; import java.util.Set; -@ApiModel("赋予用户角色 Request VO") +@ApiModel("管ç†åŽå° - 赋予用户角色 Request VO") @Data -public class SysPermissionAssignUserRoleReqVO { +public class PermissionAssignUserRoleReqVO { @ApiModelProperty(value = "角色编å·", required = true, example = "1") @NotNull(message = "角色编å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleBaseVO.java similarity index 92% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleBaseVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleBaseVO.java index a2553fc238..3f027f8dc0 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.permission.vo.role; +package cn.iocoder.yudao.module.system.controller.admin.permission.vo.role; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -12,7 +12,7 @@ import javax.validation.constraints.Size; * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ */ @Data -public class SysRoleBaseVO { +public class RoleBaseVO { @ApiModelProperty(value = "角色åç§°", required = true, example = "管ç†å‘˜") @NotBlank(message = "角色åç§°ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleCreateReqVO.java new file mode 100644 index 0000000000..785f658158 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleCreateReqVO.java @@ -0,0 +1,12 @@ +package cn.iocoder.yudao.module.system.controller.admin.permission.vo.role; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@ApiModel("管ç†åŽå° - 角色创建 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +public class RoleCreateReqVO extends RoleBaseVO { + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleExcelVO.java similarity index 88% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleExcelVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleExcelVO.java index 08a37816f3..bb82f4ab1f 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleExcelVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.permission.vo.role; +package cn.iocoder.yudao.module.system.controller.admin.permission.vo.role; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; @@ -10,7 +10,7 @@ import lombok.Data; * 角色 Excel 导出å“应 VO */ @Data -public class SysRoleExcelVO { +public class RoleExcelVO { @ExcelProperty("角色åºå·") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleExportReqVO.java similarity index 86% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleExportReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleExportReqVO.java index bc0970878a..339a22ba82 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.permission.vo.role; +package cn.iocoder.yudao.module.system.controller.admin.permission.vo.role; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -9,9 +9,9 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel("角色分页 Request VO") +@ApiModel("管ç†åŽå° - 角色分页 Request VO") @Data -public class SysRoleExportReqVO { +public class RoleExportReqVO { @ApiModelProperty(value = "角色åç§°", example = "芋é“", notes = "模糊匹é…") private String name; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRolePageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RolePageReqVO.java similarity index 86% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRolePageReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RolePageReqVO.java index c6e7665e43..d2fed80e5e 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRolePageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RolePageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.permission.vo.role; +package cn.iocoder.yudao.module.system.controller.admin.permission.vo.role; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; @@ -11,10 +11,10 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel("角色分页 Request VO") +@ApiModel("管ç†åŽå° - 角色分页 Request VO") @Data @EqualsAndHashCode(callSuper = true) -public class SysRolePageReqVO extends PageParam { +public class RolePageReqVO extends PageParam { @ApiModelProperty(value = "角色åç§°", example = "芋é“", notes = "模糊匹é…") private String name; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleRespVO.java similarity index 86% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleRespVO.java index ef11d82a30..e7c0e2c3c7 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.permission.vo.role; +package cn.iocoder.yudao.module.system.controller.admin.permission.vo.role; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -10,12 +10,12 @@ import lombok.NoArgsConstructor; import java.util.Date; import java.util.Set; -@ApiModel("è§’è‰²ä¿¡æ¯ Response VO") +@ApiModel("管ç†åŽå° - è§’è‰²ä¿¡æ¯ Response VO") @Data @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(callSuper = true) -public class SysRoleRespVO extends SysRoleBaseVO { +public class RoleRespVO extends RoleBaseVO { @ApiModelProperty(value = "角色编å·", required = true, example = "1") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleSimpleRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleSimpleRespVO.java similarity index 72% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleSimpleRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleSimpleRespVO.java index a2706f4f4a..c0a4c30838 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleSimpleRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleSimpleRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.permission.vo.role; +package cn.iocoder.yudao.module.system.controller.admin.permission.vo.role; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -6,11 +6,11 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -@ApiModel("è§’è‰²ç²¾ç®€ä¿¡æ¯ Response VO") +@ApiModel("管ç†åŽå° - è§’è‰²ç²¾ç®€ä¿¡æ¯ Response VO") @Data @NoArgsConstructor @AllArgsConstructor -public class SysRoleSimpleRespVO { +public class RoleSimpleRespVO { @ApiModelProperty(value = "角色编å·", required = true, example = "1024") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleUpdateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleUpdateReqVO.java similarity index 68% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleUpdateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleUpdateReqVO.java index c6f56f63a3..362cbb2904 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleUpdateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.permission.vo.role; +package cn.iocoder.yudao.module.system.controller.admin.permission.vo.role; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -7,10 +7,10 @@ import lombok.EqualsAndHashCode; import javax.validation.constraints.NotNull; -@ApiModel("角色更新 Request VO") +@ApiModel("管ç†åŽå° - 角色更新 Request VO") @Data @EqualsAndHashCode(callSuper = true) -public class SysRoleUpdateReqVO extends SysRoleBaseVO { +public class RoleUpdateReqVO extends RoleBaseVO { @ApiModelProperty(value = "角色编å·", required = true, example = "1024") @NotNull(message = "角色编å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleUpdateStatusReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleUpdateStatusReqVO.java similarity index 56% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleUpdateStatusReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleUpdateStatusReqVO.java index ba861539de..75a658c7ab 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleUpdateStatusReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleUpdateStatusReqVO.java @@ -1,14 +1,16 @@ -package cn.iocoder.yudao.module.system.controller.permission.vo.role; +package cn.iocoder.yudao.module.system.controller.admin.permission.vo.role; +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.validation.InEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotNull; -@ApiModel("è§’è‰²æ›´æ–°çŠ¶æ€ Request VO") +@ApiModel("管ç†åŽå° - è§’è‰²æ›´æ–°çŠ¶æ€ Request VO") @Data -public class SysRoleUpdateStatusReqVO { +public class RoleUpdateStatusReqVO { @ApiModelProperty(value = "角色编å·", required = true, example = "1024") @NotNull(message = "角色编å·ä¸èƒ½ä¸ºç©º") @@ -16,7 +18,7 @@ public class SysRoleUpdateStatusReqVO { @ApiModelProperty(value = "状æ€", required = true, example = "1", notes = "è§ SysCommonStatusEnum 枚举") @NotNull(message = "状æ€ä¸èƒ½ä¸ºç©º") -// @InEnum(value = SysCommonStatusEnum.class, message = "修改状æ€å¿…须是 {value}") +// @InEnum(value = CommonStatusEnum.class, message = "修改状æ€å¿…须是 {value}") private Integer status; } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SmsCallbackController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsCallbackController.java similarity index 95% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SmsCallbackController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsCallbackController.java index 0968a1d2fa..f13f188c44 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SmsCallbackController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsCallbackController.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.sms; +package cn.iocoder.yudao.module.system.controller.admin.sms; import cn.hutool.core.util.URLUtil; import cn.hutool.extra.servlet.ServletUtil; @@ -19,7 +19,7 @@ import javax.servlet.http.HttpServletRequest; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -@Api(tags = "短信回调") +@Api(tags = "管ç†åŽå° - 短信回调") @RestController @RequestMapping("/system/sms/callback") public class SmsCallbackController { diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SysSmsChannelController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsChannelController.java similarity index 72% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SysSmsChannelController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsChannelController.java index 70c7d7059b..86c9eee6ed 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SysSmsChannelController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsChannelController.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.module.system.controller.sms; +package cn.iocoder.yudao.module.system.controller.admin.sms; -import cn.iocoder.yudao.module.system.controller.sms.vo.channel.*; -import cn.iocoder.yudao.module.system.convert.sms.SysSmsChannelConvert; -import cn.iocoder.yudao.module.system.service.sms.SysSmsChannelService; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.*; +import cn.iocoder.yudao.module.system.convert.sms.SmsChannelConvert; +import cn.iocoder.yudao.module.system.service.sms.SmsChannelService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -19,25 +19,25 @@ import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -@Api(tags = "短信渠é“") +@Api(tags = "管ç†åŽå° - 短信渠é“") @RestController @RequestMapping("system/sms-channel") -public class SysSmsChannelController { +public class SmsChannelController { @Resource - private SysSmsChannelService smsChannelService; + private SmsChannelService smsChannelService; @PostMapping("/create") @ApiOperation("创建短信渠é“") @PreAuthorize("@ss.hasPermission('system:sms-channel:create')") - public CommonResult createSmsChannel(@Valid @RequestBody SysSmsChannelCreateReqVO createReqVO) { + public CommonResult createSmsChannel(@Valid @RequestBody SmsChannelCreateReqVO createReqVO) { return success(smsChannelService.createSmsChannel(createReqVO)); } @PutMapping("/update") @ApiOperation("更新短信渠é“") @PreAuthorize("@ss.hasPermission('system:sms-channel:update')") - public CommonResult updateSmsChannel(@Valid @RequestBody SysSmsChannelUpdateReqVO updateReqVO) { + public CommonResult updateSmsChannel(@Valid @RequestBody SmsChannelUpdateReqVO updateReqVO) { smsChannelService.updateSmsChannel(updateReqVO); return success(true); } @@ -55,26 +55,26 @@ public class SysSmsChannelController { @ApiOperation("获得短信渠é“") @ApiImplicitParam(name = "id", value = "ç¼–å·", required = true, example = "1024", dataTypeClass = Long.class) @PreAuthorize("@ss.hasPermission('system:sms-channel:query')") - public CommonResult getSmsChannel(@RequestParam("id") Long id) { + public CommonResult getSmsChannel(@RequestParam("id") Long id) { SysSmsChannelDO smsChannel = smsChannelService.getSmsChannel(id); - return success(SysSmsChannelConvert.INSTANCE.convert(smsChannel)); + return success(SmsChannelConvert.INSTANCE.convert(smsChannel)); } @GetMapping("/page") @ApiOperation("获得短信渠é“分页") @PreAuthorize("@ss.hasPermission('system:sms-channel:query')") - public CommonResult> getSmsChannelPage(@Valid SysSmsChannelPageReqVO pageVO) { + public CommonResult> getSmsChannelPage(@Valid SmsChannelPageReqVO pageVO) { PageResult pageResult = smsChannelService.getSmsChannelPage(pageVO); - return success(SysSmsChannelConvert.INSTANCE.convertPage(pageResult)); + return success(SmsChannelConvert.INSTANCE.convertPage(pageResult)); } @GetMapping("/list-all-simple") @ApiOperation(value = "获得短信渠é“精简列表", notes = "包å«è¢«ç¦ç”¨çš„短信渠é“") - public CommonResult> getSimpleSmsChannels() { + public CommonResult> getSimpleSmsChannels() { List list = smsChannelService.getSmsChannelList(); // 排åºåŽï¼Œè¿”回给å‰ç«¯ list.sort(Comparator.comparing(SysSmsChannelDO::getId)); - return success(SysSmsChannelConvert.INSTANCE.convertList03(list)); + return success(SmsChannelConvert.INSTANCE.convertList03(list)); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SysSmsLogController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsLogController.java similarity index 66% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SysSmsLogController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsLogController.java index ee69dee3d1..557e6d31e3 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SysSmsLogController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsLogController.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.module.system.controller.sms; +package cn.iocoder.yudao.module.system.controller.admin.sms; -import cn.iocoder.yudao.module.system.controller.sms.vo.log.SysSmsLogExcelVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.log.SysSmsLogExportReqVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.log.SysSmsLogPageReqVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.log.SysSmsLogRespVO; -import cn.iocoder.yudao.module.system.convert.sms.SysSmsLogConvert; -import cn.iocoder.yudao.module.system.service.sms.SysSmsLogService; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogExcelVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SysSmsLogRespVO; +import cn.iocoder.yudao.module.system.convert.sms.SmsLogConvert; +import cn.iocoder.yudao.module.system.service.sms.SmsLogService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -28,33 +28,33 @@ import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; -@Api(tags = "短信日志") +@Api(tags = "管ç†åŽå° - 短信日志") @RestController @RequestMapping("/system/sms-log") @Validated -public class SysSmsLogController { +public class SmsLogController { @Resource - private SysSmsLogService smsLogService; + private SmsLogService smsLogService; @GetMapping("/page") @ApiOperation("获得短信日志分页") @PreAuthorize("@ss.hasPermission('system:sms-log:query')") - public CommonResult> getSmsLogPage(@Valid SysSmsLogPageReqVO pageVO) { + public CommonResult> getSmsLogPage(@Valid SmsLogPageReqVO pageVO) { PageResult pageResult = smsLogService.getSmsLogPage(pageVO); - return success(SysSmsLogConvert.INSTANCE.convertPage(pageResult)); + return success(SmsLogConvert.INSTANCE.convertPage(pageResult)); } @GetMapping("/export-excel") @ApiOperation("导出短信日志 Excel") @PreAuthorize("@ss.hasPermission('system:sms-log:export')") @OperateLog(type = EXPORT) - public void exportSmsLogExcel(@Valid SysSmsLogExportReqVO exportReqVO, + public void exportSmsLogExcel(@Valid SmsLogExportReqVO exportReqVO, HttpServletResponse response) throws IOException { List list = smsLogService.getSmsLogList(exportReqVO); // 导出 Excel - List datas = SysSmsLogConvert.INSTANCE.convertList02(list); - ExcelUtils.write(response, "短信日志.xls", "æ•°æ®", SysSmsLogExcelVO.class, datas); + List datas = SmsLogConvert.INSTANCE.convertList02(list); + ExcelUtils.write(response, "短信日志.xls", "æ•°æ®", SmsLogExcelVO.class, datas); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SysSmsTemplateController.http b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsTemplateController.http similarity index 69% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SysSmsTemplateController.http rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsTemplateController.http index d5441d057c..3bf59d965f 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SysSmsTemplateController.http +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsTemplateController.http @@ -1,7 +1,8 @@ -### 请求 /menu/list æŽ¥å£ => æˆåŠŸ +### 请求 /system/sms-template/send-sms æŽ¥å£ => æˆåŠŸ POST {{baseUrl}}/system/sms-template/send-sms Authorization: Bearer {{token}} Content-Type: application/json +tenant-id: {{adminTenentId}} { "code": "test_01", diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SysSmsTemplateController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsTemplateController.java similarity index 74% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SysSmsTemplateController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsTemplateController.java index 9328680e30..2d0adc427b 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/SysSmsTemplateController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsTemplateController.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.module.system.controller.sms; +package cn.iocoder.yudao.module.system.controller.admin.sms; -import cn.iocoder.yudao.module.system.controller.sms.vo.template.*; -import cn.iocoder.yudao.module.system.convert.sms.SysSmsTemplateConvert; -import cn.iocoder.yudao.module.system.service.sms.SysSmsTemplateService; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.*; +import cn.iocoder.yudao.module.system.convert.sms.SmsTemplateConvert; +import cn.iocoder.yudao.module.system.service.sms.SmsTemplateService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsCoreService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; @@ -24,27 +24,27 @@ import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; -@Api(tags = "短信模æ¿") +@Api(tags = "管ç†åŽå° - 短信模æ¿") @RestController @RequestMapping("/system/sms-template") -public class SysSmsTemplateController { +public class SmsTemplateController { @Resource - private SysSmsTemplateService smsTemplateService; + private SmsTemplateService smsTemplateService; @Resource private SysSmsCoreService smsCoreService; @PostMapping("/create") @ApiOperation("创建短信模æ¿") @PreAuthorize("@ss.hasPermission('system:sms-template:create')") - public CommonResult createSmsTemplate(@Valid @RequestBody SysSmsTemplateCreateReqVO createReqVO) { + public CommonResult createSmsTemplate(@Valid @RequestBody SmsTemplateCreateReqVO createReqVO) { return success(smsTemplateService.createSmsTemplate(createReqVO)); } @PutMapping("/update") @ApiOperation("更新短信模æ¿") @PreAuthorize("@ss.hasPermission('system:sms-template:update')") - public CommonResult updateSmsTemplate(@Valid @RequestBody SysSmsTemplateUpdateReqVO updateReqVO) { + public CommonResult updateSmsTemplate(@Valid @RequestBody SmsTemplateUpdateReqVO updateReqVO) { smsTemplateService.updateSmsTemplate(updateReqVO); return success(true); } @@ -62,35 +62,35 @@ public class SysSmsTemplateController { @ApiOperation("获得短信模æ¿") @ApiImplicitParam(name = "id", value = "ç¼–å·", required = true, example = "1024", dataTypeClass = Long.class) @PreAuthorize("@ss.hasPermission('system:sms-template:query')") - public CommonResult getSmsTemplate(@RequestParam("id") Long id) { + public CommonResult getSmsTemplate(@RequestParam("id") Long id) { SysSmsTemplateDO smsTemplate = smsTemplateService.getSmsTemplate(id); - return success(SysSmsTemplateConvert.INSTANCE.convert(smsTemplate)); + return success(SmsTemplateConvert.INSTANCE.convert(smsTemplate)); } @GetMapping("/page") @ApiOperation("获得短信模æ¿åˆ†é¡µ") @PreAuthorize("@ss.hasPermission('system:sms-template:query')") - public CommonResult> getSmsTemplatePage(@Valid SysSmsTemplatePageReqVO pageVO) { + public CommonResult> getSmsTemplatePage(@Valid SmsTemplatePageReqVO pageVO) { PageResult pageResult = smsTemplateService.getSmsTemplatePage(pageVO); - return success(SysSmsTemplateConvert.INSTANCE.convertPage(pageResult)); + return success(SmsTemplateConvert.INSTANCE.convertPage(pageResult)); } @GetMapping("/export-excel") @ApiOperation("å¯¼å‡ºçŸ­ä¿¡æ¨¡æ¿ Excel") @PreAuthorize("@ss.hasPermission('system:sms-template:export')") @OperateLog(type = EXPORT) - public void exportSmsTemplateExcel(@Valid SysSmsTemplateExportReqVO exportReqVO, + public void exportSmsTemplateExcel(@Valid SmsTemplateExportReqVO exportReqVO, HttpServletResponse response) throws IOException { List list = smsTemplateService.getSmsTemplateList(exportReqVO); // 导出 Excel - List datas = SysSmsTemplateConvert.INSTANCE.convertList02(list); - ExcelUtils.write(response, "短信模æ¿.xls", "æ•°æ®", SysSmsTemplateExcelVO.class, datas); + List datas = SmsTemplateConvert.INSTANCE.convertList02(list); + ExcelUtils.write(response, "短信模æ¿.xls", "æ•°æ®", SmsTemplateExcelVO.class, datas); } @PostMapping("/send-sms") @ApiOperation("å‘é€çŸ­ä¿¡") @PreAuthorize("@ss.hasPermission('system:sms-template:send-sms')") - public CommonResult sendSms(@Valid @RequestBody SysSmsTemplateSendReqVO sendReqVO) { + public CommonResult sendSms(@Valid @RequestBody SmsTemplateSendReqVO sendReqVO) { return success(smsCoreService.sendSingleSms(sendReqVO.getMobile(), null, null, sendReqVO.getTemplateCode(), sendReqVO.getTemplateParams())); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/channel/SmsChannelBaseVO.java similarity index 92% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelBaseVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/channel/SmsChannelBaseVO.java index 04b1f6926a..ab5595fc0a 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/channel/SmsChannelBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.sms.vo.channel; +package cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -11,7 +11,7 @@ import javax.validation.constraints.NotNull; * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ */ @Data -public class SysSmsChannelBaseVO { +public class SmsChannelBaseVO { @ApiModelProperty(value = "短信签å", required = true, example = "èŠ‹é“æºç ") @NotNull(message = "短信签åä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/channel/SmsChannelCreateReqVO.java similarity index 71% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelCreateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/channel/SmsChannelCreateReqVO.java index fdf3e98743..edc162f474 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelCreateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/channel/SmsChannelCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.sms.vo.channel; +package cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -8,11 +8,11 @@ import lombok.ToString; import javax.validation.constraints.NotNull; -@ApiModel("短信渠é“创建 Request VO") +@ApiModel("管ç†åŽå° - 短信渠é“创建 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class SysSmsChannelCreateReqVO extends SysSmsChannelBaseVO { +public class SmsChannelCreateReqVO extends SmsChannelBaseVO { @ApiModelProperty(value = "渠é“ç¼–ç ", required = true, example = "YUN_PIAN", notes = "å‚è§ SmsChannelEnum 枚举类") @NotNull(message = "渠é“ç¼–ç ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelPageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/channel/SmsChannelPageReqVO.java similarity index 84% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelPageReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/channel/SmsChannelPageReqVO.java index d7d90ec79c..306c7d06f4 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelPageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/channel/SmsChannelPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.sms.vo.channel; +package cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; @@ -12,11 +12,11 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel("短信渠é“分页 Request VO") +@ApiModel("管ç†åŽå° - 短信渠é“分页 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class SysSmsChannelPageReqVO extends PageParam { +public class SmsChannelPageReqVO extends PageParam { @ApiModelProperty(value = "任务状æ€", example = "1") private Integer status; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/channel/SmsChannelRespVO.java similarity index 76% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/channel/SmsChannelRespVO.java index 02654a0170..b39e35edfd 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/channel/SmsChannelRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.sms.vo.channel; +package cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -8,11 +8,11 @@ import lombok.ToString; import java.util.Date; -@ApiModel("çŸ­ä¿¡æ¸ é“ Response VO") +@ApiModel("管ç†åŽå° - çŸ­ä¿¡æ¸ é“ Response VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class SysSmsChannelRespVO extends SysSmsChannelBaseVO { +public class SmsChannelRespVO extends SmsChannelBaseVO { @ApiModelProperty(value = "ç¼–å·", required = true, example = "1024") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelSimpleRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/channel/SmsChannelSimpleRespVO.java similarity index 78% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelSimpleRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/channel/SmsChannelSimpleRespVO.java index 1cf341f986..22b5bc1d48 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelSimpleRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/channel/SmsChannelSimpleRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.sms.vo.channel; +package cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -6,9 +6,9 @@ import lombok.Data; import javax.validation.constraints.NotNull; -@ApiModel("短信渠é“精简 Response VO") +@ApiModel("管ç†åŽå° - 短信渠é“精简 Response VO") @Data -public class SysSmsChannelSimpleRespVO { +public class SmsChannelSimpleRespVO { @ApiModelProperty(value = "ç¼–å·", required = true, example = "1024") @NotNull(message = "ç¼–å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelUpdateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/channel/SmsChannelUpdateReqVO.java similarity index 69% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelUpdateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/channel/SmsChannelUpdateReqVO.java index 72ffb28a26..6833287459 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/channel/SysSmsChannelUpdateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/channel/SmsChannelUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.sms.vo.channel; +package cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -8,11 +8,11 @@ import lombok.ToString; import javax.validation.constraints.NotNull; -@ApiModel("çŸ­ä¿¡æ¸ é“æ›´æ–° Request VO") +@ApiModel("管ç†åŽå° - çŸ­ä¿¡æ¸ é“æ›´æ–° Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class SysSmsChannelUpdateReqVO extends SysSmsChannelBaseVO { +public class SmsChannelUpdateReqVO extends SmsChannelBaseVO { @ApiModelProperty(value = "ç¼–å·", required = true, example = "1024") @NotNull(message = "ç¼–å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/log/SysSmsLogExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SmsLogExcelVO.java similarity index 96% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/log/SysSmsLogExcelVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SmsLogExcelVO.java index 1bdc830477..9fb8515df9 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/log/SysSmsLogExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SmsLogExcelVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.sms.vo.log; +package cn.iocoder.yudao.module.system.controller.admin.sms.vo.log; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; @@ -16,7 +16,7 @@ import java.util.Map; * @author èŠ‹é“æºç  */ @Data -public class SysSmsLogExcelVO { +public class SmsLogExcelVO { @ExcelProperty("ç¼–å·") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/log/SysSmsLogExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SmsLogExportReqVO.java similarity index 85% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/log/SysSmsLogExportReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SmsLogExportReqVO.java index 3cfd6ca644..7a57aa2ed8 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/log/SysSmsLogExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SmsLogExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.sms.vo.log; +package cn.iocoder.yudao.module.system.controller.admin.sms.vo.log; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -9,9 +9,9 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel(value = "短信日志 Excel 导出 Request VO", description = "傿•°å’Œ SysSmsLogPageReqVO 是一致的") +@ApiModel(value = "管ç†åŽå° - 短信日志 Excel 导出 Request VO", description = "傿•°å’Œ SysSmsLogPageReqVO 是一致的") @Data -public class SysSmsLogExportReqVO { +public class SmsLogExportReqVO { @ApiModelProperty(value = "短信渠é“ç¼–å·", example = "10") private Long channelId; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/log/SysSmsLogPageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SmsLogPageReqVO.java similarity index 90% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/log/SysSmsLogPageReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SmsLogPageReqVO.java index 94bcc9a705..358427e82d 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/log/SysSmsLogPageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SmsLogPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.sms.vo.log; +package cn.iocoder.yudao.module.system.controller.admin.sms.vo.log; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; @@ -12,11 +12,11 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel("短信日志分页 Request VO") +@ApiModel("管ç†åŽå° - 短信日志分页 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class SysSmsLogPageReqVO extends PageParam { +public class SmsLogPageReqVO extends PageParam { @ApiModelProperty(value = "短信渠é“ç¼–å·", example = "10") private Long channelId; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/log/SysSmsLogRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SysSmsLogRespVO.java similarity index 96% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/log/SysSmsLogRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SysSmsLogRespVO.java index f2a07a0ad7..7377fc1e50 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/log/SysSmsLogRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SysSmsLogRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.sms.vo.log; +package cn.iocoder.yudao.module.system.controller.admin.sms.vo.log; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -7,7 +7,7 @@ import lombok.Data; import java.util.Date; import java.util.Map; -@ApiModel("短信日志 Response VO") +@ApiModel("管ç†åŽå° - 短信日志 Response VO") @Data public class SysSmsLogRespVO { diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateBaseVO.java similarity index 94% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateBaseVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateBaseVO.java index 622316cdc8..9b16fa851e 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.sms.vo.template; +package cn.iocoder.yudao.module.system.controller.admin.sms.vo.template; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -10,7 +10,7 @@ import javax.validation.constraints.NotNull; * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ */ @Data -public class SysSmsTemplateBaseVO { +public class SmsTemplateBaseVO { @ApiModelProperty(value = "短信类型", required = true, example = "1", notes = "å‚è§ SysSmsTemplateTypeEnum 枚举类") @NotNull(message = "短信类型ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateCreateReqVO.java new file mode 100644 index 0000000000..ab8b89ebd9 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateCreateReqVO.java @@ -0,0 +1,14 @@ +package cn.iocoder.yudao.module.system.controller.admin.sms.vo.template; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +@ApiModel("管ç†åŽå° - 短信模æ¿åˆ›å»º Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SmsTemplateCreateReqVO extends SmsTemplateBaseVO { + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateExcelVO.java similarity index 92% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateExcelVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateExcelVO.java index d3151e621a..eb28c63cb1 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateExcelVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.sms.vo.template; +package cn.iocoder.yudao.module.system.controller.admin.sms.vo.template; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; @@ -14,7 +14,7 @@ import java.util.Date; * @author èŠ‹é“æºç  */ @Data -public class SysSmsTemplateExcelVO { +public class SmsTemplateExcelVO { @ExcelProperty("ç¼–å·") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateExportReqVO.java similarity index 84% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateExportReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateExportReqVO.java index 930fff5580..099be029f4 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.sms.vo.template; +package cn.iocoder.yudao.module.system.controller.admin.sms.vo.template; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -9,9 +9,9 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel(value = "çŸ­ä¿¡æ¨¡æ¿ Excel 导出 Request VO", description = "傿•°å’Œ SysSmsTemplatePageReqVO 是一致的") +@ApiModel(value = "管ç†åŽå° - çŸ­ä¿¡æ¨¡æ¿ Excel 导出 Request VO", description = "傿•°å’Œ SysSmsTemplatePageReqVO 是一致的") @Data -public class SysSmsTemplateExportReqVO { +public class SmsTemplateExportReqVO { @ApiModelProperty(value = "短信签å", example = "1") private Integer type; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplatePageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplatePageReqVO.java similarity index 89% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplatePageReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplatePageReqVO.java index e0d711ad23..6932d2946b 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplatePageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplatePageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.sms.vo.template; +package cn.iocoder.yudao.module.system.controller.admin.sms.vo.template; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; @@ -12,11 +12,11 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel("短信模æ¿åˆ†é¡µ Request VO") +@ApiModel("管ç†åŽå° - 短信模æ¿åˆ†é¡µ Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class SysSmsTemplatePageReqVO extends PageParam { +public class SmsTemplatePageReqVO extends PageParam { @ApiModelProperty(value = "短信签å", example = "1") private Integer type; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateRespVO.java similarity index 79% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateRespVO.java index 24fae0ca1f..6633c383b3 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.sms.vo.template; +package cn.iocoder.yudao.module.system.controller.admin.sms.vo.template; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -9,11 +9,11 @@ import lombok.ToString; import java.util.Date; import java.util.List; -@ApiModel("çŸ­ä¿¡æ¨¡æ¿ Response VO") +@ApiModel("管ç†åŽå° - çŸ­ä¿¡æ¨¡æ¿ Response VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class SysSmsTemplateRespVO extends SysSmsTemplateBaseVO { +public class SmsTemplateRespVO extends SmsTemplateBaseVO { @ApiModelProperty(value = "ç¼–å·", required = true, example = "1024") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateSendReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateSendReqVO.java similarity index 78% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateSendReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateSendReqVO.java index 0b420c1230..956b4839eb 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateSendReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateSendReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.sms.vo.template; +package cn.iocoder.yudao.module.system.controller.admin.sms.vo.template; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -7,9 +7,9 @@ import lombok.Data; import javax.validation.constraints.NotNull; import java.util.Map; -@ApiModel("短信模æ¿çš„å‘é€ Request VO") +@ApiModel("管ç†åŽå° - 短信模æ¿çš„å‘é€ Request VO") @Data -public class SysSmsTemplateSendReqVO { +public class SmsTemplateSendReqVO { @ApiModelProperty(value = "手机å·", required = true, example = "15601691300") @NotNull(message = "手机å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateUpdateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateUpdateReqVO.java similarity index 68% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateUpdateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateUpdateReqVO.java index c12a826cc6..86bdbba9a3 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/sms/vo/template/SysSmsTemplateUpdateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.sms.vo.template; +package cn.iocoder.yudao.module.system.controller.admin.sms.vo.template; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -8,11 +8,11 @@ import lombok.ToString; import javax.validation.constraints.NotNull; -@ApiModel("çŸ­ä¿¡æ¨¡æ¿æ›´æ–° Request VO") +@ApiModel("管ç†åŽå° - çŸ­ä¿¡æ¨¡æ¿æ›´æ–° Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class SysSmsTemplateUpdateReqVO extends SysSmsTemplateBaseVO { +public class SmsTemplateUpdateReqVO extends SmsTemplateBaseVO { @ApiModelProperty(value = "ç¼–å·", required = true, example = "1024") @NotNull(message = "ç¼–å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/SysTenantController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/TenantController.java similarity index 74% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/SysTenantController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/TenantController.java index c4a8ca1400..2b5fc204cd 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/SysTenantController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/TenantController.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.module.system.controller.tenant; +package cn.iocoder.yudao.module.system.controller.admin.tenant; -import cn.iocoder.yudao.module.system.controller.tenant.vo.*; -import cn.iocoder.yudao.module.system.convert.tenant.SysTenantConvert; -import cn.iocoder.yudao.module.system.service.tenant.SysTenantService; +import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.*; +import cn.iocoder.yudao.module.system.convert.tenant.TenantConvert; +import cn.iocoder.yudao.module.system.service.tenant.TenantService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.tenant.SysTenantDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -24,13 +24,13 @@ import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; -@Api(tags = "租户") +@Api(tags = "管ç†åŽå° - 租户") @RestController @RequestMapping("/system/tenant") -public class SysTenantController { +public class TenantController { @Resource - private SysTenantService tenantService; + private TenantService tenantService; @GetMapping("/get-id-by-name") @ApiOperation(value = "使用租户å,获得租户编å·", notes = "登录界é¢ï¼Œæ ¹æ®ç”¨æˆ·çš„租户å,获得租户编å·") @@ -43,14 +43,14 @@ public class SysTenantController { @PostMapping("/create") @ApiOperation("创建租户") @PreAuthorize("@ss.hasPermission('system:tenant:create')") - public CommonResult createTenant(@Valid @RequestBody SysTenantCreateReqVO createReqVO) { + public CommonResult createTenant(@Valid @RequestBody TenantCreateReqVO createReqVO) { return success(tenantService.createTenant(createReqVO)); } @PutMapping("/update") @ApiOperation("更新租户") @PreAuthorize("@ss.hasPermission('system:tenant:update')") - public CommonResult updateTenant(@Valid @RequestBody SysTenantUpdateReqVO updateReqVO) { + public CommonResult updateTenant(@Valid @RequestBody TenantUpdateReqVO updateReqVO) { tenantService.updateTenant(updateReqVO); return success(true); } @@ -68,38 +68,38 @@ public class SysTenantController { @ApiOperation("获得租户") @ApiImplicitParam(name = "id", value = "ç¼–å·", required = true, example = "1024", dataTypeClass = Long.class) @PreAuthorize("@ss.hasPermission('system:tenant:query')") - public CommonResult getTenant(@RequestParam("id") Long id) { + public CommonResult getTenant(@RequestParam("id") Long id) { SysTenantDO tenant = tenantService.getTenant(id); - return success(SysTenantConvert.INSTANCE.convert(tenant)); + return success(TenantConvert.INSTANCE.convert(tenant)); } @GetMapping("/list") @ApiOperation("获得租户列表") @ApiImplicitParam(name = "ids", value = "ç¼–å·åˆ—表", required = true, example = "1024,2048", dataTypeClass = List.class) @PreAuthorize("@ss.hasPermission('system:tenant:query')") - public CommonResult> getTenantList(@RequestParam("ids") Collection ids) { + public CommonResult> getTenantList(@RequestParam("ids") Collection ids) { List list = tenantService.getTenantList(ids); - return success(SysTenantConvert.INSTANCE.convertList(list)); + return success(TenantConvert.INSTANCE.convertList(list)); } @GetMapping("/page") @ApiOperation("获得租户分页") @PreAuthorize("@ss.hasPermission('system:tenant:query')") - public CommonResult> getTenantPage(@Valid SysTenantPageReqVO pageVO) { + public CommonResult> getTenantPage(@Valid TenantPageReqVO pageVO) { PageResult pageResult = tenantService.getTenantPage(pageVO); - return success(SysTenantConvert.INSTANCE.convertPage(pageResult)); + return success(TenantConvert.INSTANCE.convertPage(pageResult)); } @GetMapping("/export-excel") @ApiOperation("导出租户 Excel") @PreAuthorize("@ss.hasPermission('system:tenant:export')") @OperateLog(type = EXPORT) - public void exportTenantExcel(@Valid SysTenantExportReqVO exportReqVO, + public void exportTenantExcel(@Valid TenantExportReqVO exportReqVO, HttpServletResponse response) throws IOException { List list = tenantService.getTenantList(exportReqVO); // 导出 Excel - List datas = SysTenantConvert.INSTANCE.convertList02(list); - ExcelUtils.write(response, "租户.xls", "æ•°æ®", SysTenantExcelVO.class, datas); + List datas = TenantConvert.INSTANCE.convertList02(list); + ExcelUtils.write(response, "租户.xls", "æ•°æ®", TenantExcelVO.class, datas); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/TenantBaseVO.java similarity index 90% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantBaseVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/TenantBaseVO.java index 593b9aca48..72ee63b9e2 100755 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/TenantBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.tenant.vo; +package cn.iocoder.yudao.module.system.controller.admin.tenant.vo; import lombok.*; import io.swagger.annotations.*; @@ -9,7 +9,7 @@ import javax.validation.constraints.*; * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ */ @Data -public class SysTenantBaseVO { +public class TenantBaseVO { @ApiModelProperty(value = "租户å", required = true, example = "芋é“") @NotNull(message = "租户åä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/TenantCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/TenantCreateReqVO.java new file mode 100755 index 0000000000..a7e75cb77f --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/TenantCreateReqVO.java @@ -0,0 +1,12 @@ +package cn.iocoder.yudao.module.system.controller.admin.tenant.vo; + +import lombok.*; +import io.swagger.annotations.*; + +@ApiModel("管ç†åŽå° - 租户创建 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class TenantCreateReqVO extends TenantBaseVO { + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/TenantExcelVO.java similarity index 89% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantExcelVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/TenantExcelVO.java index 8244486279..9b317cb159 100755 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/TenantExcelVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.tenant.vo; +package cn.iocoder.yudao.module.system.controller.admin.tenant.vo; import lombok.*; import java.util.*; @@ -14,7 +14,7 @@ import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; * @author èŠ‹é“æºç  */ @Data -public class SysTenantExcelVO { +public class TenantExcelVO { @ExcelProperty("租户编å·") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/TenantExportReqVO.java similarity index 82% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantExportReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/TenantExportReqVO.java index e70de00131..afe5e67000 100755 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/TenantExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.tenant.vo; +package cn.iocoder.yudao.module.system.controller.admin.tenant.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -9,9 +9,9 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel(value = "租户 Excel 导出 Request VO", description = "傿•°å’Œ SysTenantPageReqVO 是一致的") +@ApiModel(value = "管ç†åŽå° - 租户 Excel 导出 Request VO", description = "傿•°å’Œ SysTenantPageReqVO 是一致的") @Data -public class SysTenantExportReqVO { +public class TenantExportReqVO { @ApiModelProperty(value = "租户å", example = "芋é“") private String name; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantPageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/TenantPageReqVO.java similarity index 87% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantPageReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/TenantPageReqVO.java index b665ea3f65..4a11a9cd62 100755 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantPageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/TenantPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.tenant.vo; +package cn.iocoder.yudao.module.system.controller.admin.tenant.vo; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; @@ -12,11 +12,11 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel("租户分页 Request VO") +@ApiModel("管ç†åŽå° - 租户分页 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class SysTenantPageReqVO extends PageParam { +public class TenantPageReqVO extends PageParam { @ApiModelProperty(value = "租户å", example = "芋é“") private String name; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/TenantRespVO.java similarity index 67% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/TenantRespVO.java index 563b5095c4..5b6940a55b 100755 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/TenantRespVO.java @@ -1,14 +1,14 @@ -package cn.iocoder.yudao.module.system.controller.tenant.vo; +package cn.iocoder.yudao.module.system.controller.admin.tenant.vo; import lombok.*; import java.util.*; import io.swagger.annotations.*; -@ApiModel("租户 Response VO") +@ApiModel("管ç†åŽå° - 租户 Response VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class SysTenantRespVO extends SysTenantBaseVO { +public class TenantRespVO extends TenantBaseVO { @ApiModelProperty(value = "租户编å·", required = true, example = "1024") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantUpdateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/TenantUpdateReqVO.java similarity index 64% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantUpdateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/TenantUpdateReqVO.java index c24edc5ea7..0e10dabedc 100755 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantUpdateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/TenantUpdateReqVO.java @@ -1,14 +1,14 @@ -package cn.iocoder.yudao.module.system.controller.tenant.vo; +package cn.iocoder.yudao.module.system.controller.admin.tenant.vo; import lombok.*; import io.swagger.annotations.*; import javax.validation.constraints.*; -@ApiModel("租户更新 Request VO") +@ApiModel("管ç†åŽå° - 租户更新 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class SysTenantUpdateReqVO extends SysTenantBaseVO { +public class TenantUpdateReqVO extends TenantBaseVO { @ApiModelProperty(value = "租户编å·", required = true, example = "1024") @NotNull(message = "租户编å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/SysUserController.http b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.http similarity index 63% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/SysUserController.http rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.http index ce138afcdb..6d9cea8010 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/SysUserController.http +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.http @@ -1,4 +1,4 @@ ### 请求 /system/user/page æŽ¥å£ => 没有æƒé™ GET {{baseUrl}}/system/user/page?pageNo=1&pageSize=10 -Authorization: Bearer test1 # ä½¿ç”¨æµ‹è¯•è´¦å· -tenant-id: 1 +Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/SysUserController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java similarity index 76% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/SysUserController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java index 9e03727d46..ddf19aec84 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/SysUserController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.module.system.controller.user; +package cn.iocoder.yudao.module.system.controller.admin.user; import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.module.system.controller.user.vo.user.*; -import cn.iocoder.yudao.module.system.convert.user.SysUserConvert; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; +import cn.iocoder.yudao.module.system.convert.user.UserConvert; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.module.system.service.user.SysUserService; +import cn.iocoder.yudao.module.system.service.user.UserService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.enums.common.SysSexEnum; import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; @@ -35,14 +35,14 @@ import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils. import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; -@Api(tags = "用户") +@Api(tags = "管ç†åŽå° - 用户") @RestController @RequestMapping("/system/user") @Validated -public class SysUserController { +public class UserController { @Resource - private SysUserService userService; + private UserService userService; @Resource private SysUserCoreService userCoreService; @Resource @@ -51,7 +51,7 @@ public class SysUserController { @PostMapping("/create") @ApiOperation("新增用户") @PreAuthorize("@ss.hasPermission('system:user:create')") - public CommonResult createUser(@Valid @RequestBody SysUserCreateReqVO reqVO) { + public CommonResult createUser(@Valid @RequestBody UserCreateReqVO reqVO) { Long id = userService.createUser(reqVO); return success(id); } @@ -59,7 +59,7 @@ public class SysUserController { @PutMapping("update") @ApiOperation("修改用户") @PreAuthorize("@ss.hasPermission('system:user:update')") - public CommonResult updateUser(@Valid @RequestBody SysUserUpdateReqVO reqVO) { + public CommonResult updateUser(@Valid @RequestBody UserUpdateReqVO reqVO) { userService.updateUser(reqVO); return success(true); } @@ -76,7 +76,7 @@ public class SysUserController { @PutMapping("/update-password") @ApiOperation("é‡ç½®ç”¨æˆ·å¯†ç ") @PreAuthorize("@ss.hasPermission('system:user:update-password')") - public CommonResult updateUserPassword(@Valid @RequestBody SysUserUpdatePasswordReqVO reqVO) { + public CommonResult updateUserPassword(@Valid @RequestBody UserUpdatePasswordReqVO reqVO) { userService.updateUserPassword(reqVO.getId(), reqVO.getPassword()); return success(true); } @@ -84,7 +84,7 @@ public class SysUserController { @PutMapping("/update-status") @ApiOperation("修改用户状æ€") @PreAuthorize("@ss.hasPermission('system:user:update')") - public CommonResult updateUserStatus(@Valid @RequestBody SysUserUpdateStatusReqVO reqVO) { + public CommonResult updateUserStatus(@Valid @RequestBody UserUpdateStatusReqVO reqVO) { userService.updateUserStatus(reqVO.getId(), reqVO.getStatus()); return success(true); } @@ -92,7 +92,7 @@ public class SysUserController { @GetMapping("/page") @ApiOperation("获得用户分页列表") @PreAuthorize("@ss.hasPermission('system:user:list')") - public CommonResult> getUserPage(@Valid SysUserPageReqVO reqVO) { + public CommonResult> getUserPage(@Valid UserPageReqVO reqVO) { // 获得用户分页列表 PageResult pageResult = userService.getUserPage(reqVO); if (CollUtil.isEmpty(pageResult.getList())) { @@ -103,10 +103,10 @@ public class SysUserController { Collection deptIds = convertList(pageResult.getList(), SysUserDO::getDeptId); Map deptMap = deptCoreService.getDeptMap(deptIds); // 拼接结果返回 - List userList = new ArrayList<>(pageResult.getList().size()); + List userList = new ArrayList<>(pageResult.getList().size()); pageResult.getList().forEach(user -> { - SysUserPageItemRespVO respVO = SysUserConvert.INSTANCE.convert(user); - respVO.setDept(SysUserConvert.INSTANCE.convert(deptMap.get(user.getDeptId()))); + UserPageItemRespVO respVO = UserConvert.INSTANCE.convert(user); + respVO.setDept(UserConvert.INSTANCE.convert(deptMap.get(user.getDeptId()))); userList.add(respVO); }); return success(new PageResult<>(userList, pageResult.getTotal())); @@ -114,26 +114,26 @@ public class SysUserController { @GetMapping("/list-all-simple") @ApiOperation(value = "获å–用户精简信æ¯åˆ—表", notes = "åªåŒ…å«è¢«å¼€å¯çš„用户,主è¦ç”¨äºŽå‰ç«¯çš„下拉选项") - public CommonResult> getSimpleUsers() { + public CommonResult> getSimpleUsers() { // 获用户门列表,åªè¦å¼€å¯çжæ€çš„ List list = userService.getUsersByStatus(CommonStatusEnum.ENABLE.getStatus()); // 排åºåŽï¼Œè¿”回给å‰ç«¯ - return success(SysUserConvert.INSTANCE.convertList04(list)); + return success(UserConvert.INSTANCE.convertList04(list)); } @GetMapping("/get") @ApiOperation("获得用户详情") @ApiImplicitParam(name = "id", value = "ç¼–å·", required = true, example = "1024", dataTypeClass = Long.class) @PreAuthorize("@ss.hasPermission('system:user:query')") - public CommonResult getInfo(@RequestParam("id") Long id) { - return success(SysUserConvert.INSTANCE.convert(userCoreService.getUser(id))); + public CommonResult getInfo(@RequestParam("id") Long id) { + return success(UserConvert.INSTANCE.convert(userCoreService.getUser(id))); } @GetMapping("/export") @ApiOperation("导出用户") @PreAuthorize("@ss.hasPermission('system:user:export')") @OperateLog(type = EXPORT) - public void exportUsers(@Validated SysUserExportReqVO reqVO, + public void exportUsers(@Validated UserExportReqVO reqVO, HttpServletResponse response) throws IOException { // 获得用户列表 List users = userService.getUsers(reqVO); @@ -143,9 +143,9 @@ public class SysUserController { Map deptMap = deptCoreService.getDeptMap(deptIds); Map deptLeaderUserMap = userCoreService.getUserMap(convertSet(deptMap.values(), SysDeptDO::getLeaderUserId)); // æ‹¼æŽ¥æ•°æ® - List excelUsers = new ArrayList<>(users.size()); + List excelUsers = new ArrayList<>(users.size()); users.forEach(user -> { - SysUserExcelVO excelVO = SysUserConvert.INSTANCE.convert02(user); + UserExcelVO excelVO = UserConvert.INSTANCE.convert02(user); // 设置部门 MapUtils.findAndThen(deptMap, user.getDeptId(), dept -> { excelVO.setDeptName(dept.getName()); @@ -157,22 +157,22 @@ public class SysUserController { }); // 输出 - ExcelUtils.write(response, "用户数æ®.xls", "用户列表", SysUserExcelVO.class, excelUsers); + ExcelUtils.write(response, "用户数æ®.xls", "用户列表", UserExcelVO.class, excelUsers); } @GetMapping("/get-import-template") @ApiOperation("获得导入用户模æ¿") public void importTemplate(HttpServletResponse response) throws IOException { // 手动创建导出 demo - List list = Arrays.asList( - SysUserImportExcelVO.builder().username("yudao").deptId(1L).email("yudao@iocoder.cn").mobile("15601691300") + List list = Arrays.asList( + UserImportExcelVO.builder().username("yudao").deptId(1L).email("yudao@iocoder.cn").mobile("15601691300") .nickname("芋é“").status(CommonStatusEnum.ENABLE.getStatus()).sex(SysSexEnum.MALE.getSex()).build(), - SysUserImportExcelVO.builder().username("yuanma").deptId(2L).email("yuanma@iocoder.cn").mobile("15601701300") + UserImportExcelVO.builder().username("yuanma").deptId(2L).email("yuanma@iocoder.cn").mobile("15601701300") .nickname("æºç ").status(CommonStatusEnum.DISABLE.getStatus()).sex(SysSexEnum.FEMALE.getSex()).build() ); // 输出 - ExcelUtils.write(response, "用户导入模æ¿.xls", "用户列表", SysUserImportExcelVO.class, list); + ExcelUtils.write(response, "用户导入模æ¿.xls", "用户列表", UserImportExcelVO.class, list); } @PostMapping("/import") @@ -182,9 +182,9 @@ public class SysUserController { @ApiImplicitParam(name = "updateSupport", value = "æ˜¯å¦æ”¯æŒæ›´æ–°ï¼Œé»˜è®¤ä¸º false", example = "true", dataTypeClass = Boolean.class) }) @PreAuthorize("@ss.hasPermission('system:user:import')") - public CommonResult importExcel(@RequestParam("file") MultipartFile file, - @RequestParam(value = "updateSupport", required = false, defaultValue = "false") Boolean updateSupport) throws Exception { - List list = ExcelUtils.read(file, SysUserImportExcelVO.class); + public CommonResult importExcel(@RequestParam("file") MultipartFile file, + @RequestParam(value = "updateSupport", required = false, defaultValue = "false") Boolean updateSupport) throws Exception { + List list = ExcelUtils.read(file, UserImportExcelVO.class); return success(userService.importUsers(list, updateSupport)); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/SysUserProfileController.http b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.http similarity index 61% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/SysUserProfileController.http rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.http index c0a817727c..f06037b37b 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/SysUserProfileController.http +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.http @@ -1,3 +1,4 @@ ### 请求 /system/user/profile/get æŽ¥å£ => 没有æƒé™ GET {{baseUrl}}/system/user/profile/get -Authorization: Bearer test1 +Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/SysUserProfileController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.java similarity index 69% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/SysUserProfileController.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.java index 8a38f8724c..4745b2f5bd 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/SysUserProfileController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.java @@ -1,14 +1,14 @@ -package cn.iocoder.yudao.module.system.controller.user; +package cn.iocoder.yudao.module.system.controller.admin.user; import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.module.system.controller.user.vo.profile.SysUserProfileRespVO; -import cn.iocoder.yudao.module.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO; -import cn.iocoder.yudao.module.system.controller.user.vo.profile.SysUserProfileUpdateReqVO; -import cn.iocoder.yudao.module.system.convert.user.SysUserConvert; -import cn.iocoder.yudao.module.system.service.dept.SysPostService; -import cn.iocoder.yudao.module.system.service.permission.SysPermissionService; -import cn.iocoder.yudao.module.system.service.permission.SysRoleService; -import cn.iocoder.yudao.module.system.service.user.SysUserService; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileRespVO; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; +import cn.iocoder.yudao.module.system.convert.user.UserConvert; +import cn.iocoder.yudao.module.system.service.dept.PostService; +import cn.iocoder.yudao.module.system.service.permission.PermissionService; +import cn.iocoder.yudao.module.system.service.permission.RoleService; +import cn.iocoder.yudao.module.system.service.user.UserService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; @@ -32,68 +32,68 @@ import javax.validation.Valid; import java.io.IOException; import java.util.List; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.FILE_IS_EMPTY; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.FILE_IS_EMPTY; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; -@Api(tags = "用户个人中心") +@Api(tags = "管ç†åŽå° - 用户个人中心") @RestController @RequestMapping("/system/user/profile") @Validated @Slf4j -public class SysUserProfileController { +public class UserProfileController { @Resource - private SysUserService userService; + private UserService userService; @Resource private SysUserCoreService userCoreService; @Resource private SysDeptCoreService deptCoreService; @Resource - private SysPostService postService; + private PostService postService; @Resource - private SysPermissionService permissionService; + private PermissionService permissionService; @Resource - private SysRoleService roleService; + private RoleService roleService; @Resource private SysSocialCoreService socialService; @GetMapping("/get") @ApiOperation("获得登录用户信æ¯") - public CommonResult profile() { + public CommonResult profile() { // èŽ·å¾—ç”¨æˆ·åŸºæœ¬ä¿¡æ¯ SysUserDO user = userCoreService.getUser(getLoginUserId()); - SysUserProfileRespVO resp = SysUserConvert.INSTANCE.convert03(user); + UserProfileRespVO resp = UserConvert.INSTANCE.convert03(user); // 获得用户角色 List userRoles = roleService.getRolesFromCache(permissionService.getUserRoleIdListByUserId(user.getId())); - resp.setRoles(SysUserConvert.INSTANCE.convertList(userRoles)); + resp.setRoles(UserConvert.INSTANCE.convertList(userRoles)); // èŽ·å¾—éƒ¨é—¨ä¿¡æ¯ if (user.getDeptId() != null) { SysDeptDO dept = deptCoreService.getDept(user.getDeptId()); - resp.setDept(SysUserConvert.INSTANCE.convert02(dept)); + resp.setDept(UserConvert.INSTANCE.convert02(dept)); } // 获得岗ä½ä¿¡æ¯ if (CollUtil.isNotEmpty(user.getPostIds())) { List posts = postService.getPosts(user.getPostIds()); - resp.setPosts(SysUserConvert.INSTANCE.convertList02(posts)); + resp.setPosts(UserConvert.INSTANCE.convertList02(posts)); } // èŽ·å¾—ç¤¾äº¤ç”¨æˆ·ä¿¡æ¯ List socialUsers = socialService.getSocialUserList(user.getId(), UserTypeEnum.ADMIN); - resp.setSocialUsers(SysUserConvert.INSTANCE.convertList03(socialUsers)); + resp.setSocialUsers(UserConvert.INSTANCE.convertList03(socialUsers)); return success(resp); } @PutMapping("/update") @ApiOperation("修改用户个人信æ¯") - public CommonResult updateUserProfile(@Valid @RequestBody SysUserProfileUpdateReqVO reqVO) { + public CommonResult updateUserProfile(@Valid @RequestBody UserProfileUpdateReqVO reqVO) { userService.updateUserProfile(getLoginUserId(), reqVO); return success(true); } @PutMapping("/update-password") @ApiOperation("修改用户个人密ç ") - public CommonResult updateUserProfilePassword(@Valid @RequestBody SysUserProfileUpdatePasswordReqVO reqVO) { + public CommonResult updateUserProfilePassword(@Valid @RequestBody UserProfileUpdatePasswordReqVO reqVO) { userService.updateUserPassword(getLoginUserId(), reqVO); return success(true); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/profile/SysUserProfileRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileRespVO.java similarity index 90% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/profile/SysUserProfileRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileRespVO.java index 0abd7037a3..788c91feb2 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/profile/SysUserProfileRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileRespVO.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.module.system.controller.user.vo.profile; +package cn.iocoder.yudao.module.system.controller.admin.user.vo.profile; -import cn.iocoder.yudao.module.system.controller.user.vo.user.SysUserBaseVO; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserBaseVO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; @@ -16,8 +16,8 @@ import java.util.List; @EqualsAndHashCode(callSuper = true) @NoArgsConstructor @AllArgsConstructor -@ApiModel("ç”¨æˆ·ä¸ªäººä¸­å¿ƒä¿¡æ¯ Response VO") -public class SysUserProfileRespVO extends SysUserBaseVO { +@ApiModel("管ç†åŽå° - ç”¨æˆ·ä¸ªäººä¸­å¿ƒä¿¡æ¯ Response VO") +public class UserProfileRespVO extends UserBaseVO { @ApiModelProperty(value = "用户编å·", required = true, example = "1") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/profile/SysUserProfileUpdatePasswordReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileUpdatePasswordReqVO.java similarity index 78% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/profile/SysUserProfileUpdatePasswordReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileUpdatePasswordReqVO.java index 0578f3ceda..2269b37df5 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/profile/SysUserProfileUpdatePasswordReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileUpdatePasswordReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.user.vo.profile; +package cn.iocoder.yudao.module.system.controller.admin.user.vo.profile; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -7,9 +7,9 @@ import org.hibernate.validator.constraints.Length; import javax.validation.constraints.NotEmpty; -@ApiModel("ç”¨æˆ·ä¸ªäººä¸­å¿ƒæ›´æ–°å¯†ç  Request VO") +@ApiModel("管ç†åŽå° - ç”¨æˆ·ä¸ªäººä¸­å¿ƒæ›´æ–°å¯†ç  Request VO") @Data -public class SysUserProfileUpdatePasswordReqVO { +public class UserProfileUpdatePasswordReqVO { @ApiModelProperty(value = "旧密ç ", required = true, example = "123456") @NotEmpty(message = "旧密ç ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/profile/SysUserProfileUpdateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java similarity index 84% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/profile/SysUserProfileUpdateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java index bcc7a20489..4f0f8f9531 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/profile/SysUserProfileUpdateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.user.vo.profile; +package cn.iocoder.yudao.module.system.controller.admin.user.vo.profile; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -8,9 +8,9 @@ import org.hibernate.validator.constraints.Length; import javax.validation.constraints.Email; import javax.validation.constraints.Size; -@ApiModel("ç”¨æˆ·ä¸ªäººä¿¡æ¯æ›´æ–° Request VO") +@ApiModel("管ç†åŽå° - ç”¨æˆ·ä¸ªäººä¿¡æ¯æ›´æ–° Request VO") @Data -public class SysUserProfileUpdateReqVO { +public class UserProfileUpdateReqVO { @ApiModelProperty(value = "用户昵称", required = true, example = "芋艿") @Size(max = 30, message = "用户昵称长度ä¸èƒ½è¶…过30个字符") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserBaseVO.java similarity index 94% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserBaseVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserBaseVO.java index 5fc0b42b92..a4be1fd8dd 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.user.vo.user; +package cn.iocoder.yudao.module.system.controller.admin.user.vo.user; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -14,7 +14,7 @@ import java.util.Set; * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ */ @Data -public class SysUserBaseVO { +public class UserBaseVO { @ApiModelProperty(value = "用户账å·", required = true, example = "yudao") @NotBlank(message = "用户账å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserCreateReqVO.java similarity index 74% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserCreateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserCreateReqVO.java index 9b6676c97a..9d0ff1988d 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserCreateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.user.vo.user; +package cn.iocoder.yudao.module.system.controller.admin.user.vo.user; import io.swagger.annotations.ApiModel; @@ -9,10 +9,10 @@ import org.hibernate.validator.constraints.Length; import javax.validation.constraints.NotEmpty; -@ApiModel("用户创建 Request VO") +@ApiModel("管ç†åŽå° - 用户创建 Request VO") @Data @EqualsAndHashCode(callSuper = true) -public class SysUserCreateReqVO extends SysUserBaseVO { +public class UserCreateReqVO extends UserBaseVO { @ApiModelProperty(value = "密ç ", required = true, example = "123456") @NotEmpty(message = "密ç ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserExcelVO.java similarity index 92% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserExcelVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserExcelVO.java index 04c818ee51..b67010ca69 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserExcelVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.user.vo.user; +package cn.iocoder.yudao.module.system.controller.admin.user.vo.user; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; @@ -12,7 +12,7 @@ import java.util.Date; * 用户 Excel 导出 VO */ @Data -public class SysUserExcelVO { +public class UserExcelVO { @ExcelProperty("用户编å·") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserExportReqVO.java similarity index 85% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserExportReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserExportReqVO.java index e5f33deb3b..1c1044a5cd 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.user.vo.user; +package cn.iocoder.yudao.module.system.controller.admin.user.vo.user; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -11,11 +11,11 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel(value = "用户导出 Request VO", description = "傿•°å’Œ SysUserPageReqVO 是一致的") +@ApiModel(value = "管ç†åŽå° - 用户导出 Request VO", description = "傿•°å’Œ SysUserPageReqVO 是一致的") @Data @NoArgsConstructor @AllArgsConstructor -public class SysUserExportReqVO { +public class UserExportReqVO { @ApiModelProperty(value = "用户账å·", example = "yudao", notes = "模糊匹é…") private String username; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserImportExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserImportExcelVO.java similarity index 92% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserImportExcelVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserImportExcelVO.java index 43e6c9d26e..b2e084af03 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserImportExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserImportExcelVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.user.vo.user; +package cn.iocoder.yudao.module.system.controller.admin.user.vo.user; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; @@ -18,7 +18,7 @@ import lombok.experimental.Accessors; @AllArgsConstructor @NoArgsConstructor @Accessors(chain = false) // 设置 chain = false,é¿å…用户导入有问题 -public class SysUserImportExcelVO { +public class UserImportExcelVO { @ExcelProperty("登录åç§°") private String username; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserImportRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserImportRespVO.java similarity index 80% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserImportRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserImportRespVO.java index 533ec2af8d..49f9b98d1e 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserImportRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserImportRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.user.vo.user; +package cn.iocoder.yudao.module.system.controller.admin.user.vo.user; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -8,10 +8,10 @@ import lombok.Data; import java.util.List; import java.util.Map; -@ApiModel("用户导入 Response VO") +@ApiModel("管ç†åŽå° - 用户导入 Response VO") @Data @Builder -public class SysUserImportRespVO { +public class UserImportRespVO { @ApiModelProperty(value = "创建æˆåŠŸçš„ç”¨æˆ·åæ•°ç»„", required = true) private List createUsernames; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserPageItemRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserPageItemRespVO.java similarity index 71% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserPageItemRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserPageItemRespVO.java index 6178d6b809..bcfe9ea23b 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserPageItemRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserPageItemRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.user.vo.user; +package cn.iocoder.yudao.module.system.controller.admin.user.vo.user; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -7,12 +7,12 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; -@ApiModel(value = "ç”¨æˆ·åˆ†é¡µæ—¶çš„ä¿¡æ¯ Response VO", description = "ç›¸æ¯”ç”¨æˆ·åŸºæœ¬ä¿¡æ¯æ¥è¯´ï¼Œä¼šå¤šéƒ¨é—¨ä¿¡æ¯") +@ApiModel(value = "管ç†åŽå° - ç”¨æˆ·åˆ†é¡µæ—¶çš„ä¿¡æ¯ Response VO", description = "ç›¸æ¯”ç”¨æˆ·åŸºæœ¬ä¿¡æ¯æ¥è¯´ï¼Œä¼šå¤šéƒ¨é—¨ä¿¡æ¯") @Data @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(callSuper = true) -public class SysUserPageItemRespVO extends SysUserRespVO { +public class UserPageItemRespVO extends UserRespVO { /** * 所在部门 diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserPageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserPageReqVO.java similarity index 89% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserPageReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserPageReqVO.java index a677d208c2..1c6073d168 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserPageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.user.vo.user; +package cn.iocoder.yudao.module.system.controller.admin.user.vo.user; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; @@ -13,12 +13,12 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel("用户分页 Request VO") +@ApiModel("管ç†åŽå° - 用户分页 Request VO") @Data @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(callSuper = true) -public class SysUserPageReqVO extends PageParam { +public class UserPageReqVO extends PageParam { @ApiModelProperty(value = "用户账å·", example = "yudao", notes = "模糊匹é…") private String username; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserRespVO.java similarity index 83% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserRespVO.java index 66d8f6981b..fb50609b02 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.user.vo.user; +package cn.iocoder.yudao.module.system.controller.admin.user.vo.user; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -6,12 +6,12 @@ import lombok.*; import java.util.Date; -@ApiModel("ç”¨æˆ·ä¿¡æ¯ Response VO") +@ApiModel("管ç†åŽå° - ç”¨æˆ·ä¿¡æ¯ Response VO") @Data @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(callSuper = true) -public class SysUserRespVO extends SysUserBaseVO { +public class UserRespVO extends UserBaseVO { @ApiModelProperty(value = "用户编å·", required = true, example = "1") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserSimpleRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSimpleRespVO.java similarity index 82% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserSimpleRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSimpleRespVO.java index d9ba0eb055..a815253e94 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserSimpleRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSimpleRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.user.vo.user; +package cn.iocoder.yudao.module.system.controller.admin.user.vo.user; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -10,7 +10,7 @@ import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor -public class SysUserSimpleRespVO { +public class UserSimpleRespVO { @ApiModelProperty(value = "用户编å·", required = true, example = "1024") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserUpdatePasswordReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserUpdatePasswordReqVO.java similarity index 79% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserUpdatePasswordReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserUpdatePasswordReqVO.java index 71e458654d..542fc2b0f2 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserUpdatePasswordReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserUpdatePasswordReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.user.vo.user; +package cn.iocoder.yudao.module.system.controller.admin.user.vo.user; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -8,9 +8,9 @@ import org.hibernate.validator.constraints.Length; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; -@ApiModel("ç”¨æˆ·æ›´æ–°å¯†ç  Request VO") +@ApiModel("管ç†åŽå° - ç”¨æˆ·æ›´æ–°å¯†ç  Request VO") @Data -public class SysUserUpdatePasswordReqVO { +public class UserUpdatePasswordReqVO { @ApiModelProperty(value = "用户编å·", required = true, example = "1024") @NotNull(message = "用户编å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserUpdateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserUpdateReqVO.java similarity index 69% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserUpdateReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserUpdateReqVO.java index 6513490d1f..84a3de60fe 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserUpdateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.user.vo.user; +package cn.iocoder.yudao.module.system.controller.admin.user.vo.user; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -7,10 +7,10 @@ import lombok.EqualsAndHashCode; import javax.validation.constraints.NotNull; -@ApiModel("用户更新 Request VO") +@ApiModel("管ç†åŽå° - 用户更新 Request VO") @Data @EqualsAndHashCode(callSuper = true) -public class SysUserUpdateReqVO extends SysUserBaseVO { +public class UserUpdateReqVO extends UserBaseVO { @ApiModelProperty(value = "用户编å·", required = true, example = "1024") @NotNull(message = "用户编å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserUpdateStatusReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserUpdateStatusReqVO.java similarity index 78% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserUpdateStatusReqVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserUpdateStatusReqVO.java index ac20eb7454..f72897527e 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/user/vo/user/SysUserUpdateStatusReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserUpdateStatusReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.controller.user.vo.user; +package cn.iocoder.yudao.module.system.controller.admin.user.vo.user; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -6,9 +6,9 @@ import lombok.Data; import javax.validation.constraints.NotNull; -@ApiModel("ç”¨æˆ·æ›´æ–°çŠ¶æ€ Request VO") +@ApiModel("管ç†åŽå° - ç”¨æˆ·æ›´æ–°çŠ¶æ€ Request VO") @Data -public class SysUserUpdateStatusReqVO { +public class UserUpdateStatusReqVO { @ApiModelProperty(value = "用户编å·", required = true, example = "1024") @NotNull(message = "角色编å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/app/package-info.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/app/package-info.java new file mode 100644 index 0000000000..9e4739f4c4 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/app/package-info.java @@ -0,0 +1,4 @@ +/** + * å ä½ï¼Œé¿å… package 无法æäº¤åˆ° Git 仓库 + */ +package cn.iocoder.yudao.module.system.controller.app; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostCreateReqVO.java deleted file mode 100644 index 9570ad07a3..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dept/vo/post/SysPostCreateReqVO.java +++ /dev/null @@ -1,11 +0,0 @@ -package cn.iocoder.yudao.module.system.controller.dept.vo.post; - -import io.swagger.annotations.ApiModel; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@ApiModel("å²—ä½åˆ›å»º Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -public class SysPostCreateReqVO extends SysPostBaseVO { -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataCreateReqVO.java deleted file mode 100644 index c2688b3e30..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/dict/vo/data/SysDictDataCreateReqVO.java +++ /dev/null @@ -1,12 +0,0 @@ -package cn.iocoder.yudao.module.system.controller.dict.vo.data; - -import io.swagger.annotations.ApiModel; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@ApiModel("字典数æ®åˆ›å»º Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -public class SysDictDataCreateReqVO extends SysDictDataBaseVO { - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeCreateReqVO.java deleted file mode 100644 index 3eb9b14a45..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/errorcode/vo/SysErrorCodeCreateReqVO.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.iocoder.yudao.module.system.controller.errorcode.vo; - -import io.swagger.annotations.ApiModel; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; - -@ApiModel("错误ç åˆ›å»º Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class SysErrorCodeCreateReqVO extends SysErrorCodeBaseVO { - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticeCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticeCreateReqVO.java deleted file mode 100644 index 1669618ab8..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/notice/vo/SysNoticeCreateReqVO.java +++ /dev/null @@ -1,11 +0,0 @@ -package cn.iocoder.yudao.module.system.controller.notice.vo; - -import io.swagger.annotations.ApiModel; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@ApiModel("通知公告创建 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -public class SysNoticeCreateReqVO extends SysNoticeBaseVO { -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/package-info.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/package-info.java new file mode 100644 index 0000000000..659a909478 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/package-info.java @@ -0,0 +1,6 @@ +/** + * æä¾› RESTful API ç»™å‰ç«¯ï¼š + * 1. admin 包:æä¾›ç»™ç®¡ç†åŽå° yudao-ui-admin å‰ç«¯é¡¹ç›® + * 2. app 包:æä¾›ç»™ç”¨æˆ· APP yudao-ui-app å‰ç«¯é¡¹ç›®ï¼Œå®ƒçš„ Controller å’Œ VO éƒ½è¦æ·»åŠ  App å‰ç¼€ï¼Œç”¨äºŽå’Œç®¡ç†åŽå°è¿›è¡ŒåŒºåˆ† + */ +package cn.iocoder.yudao.module.system.controller; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuCreateReqVO.java deleted file mode 100644 index 2c0357f864..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/menu/SysMenuCreateReqVO.java +++ /dev/null @@ -1,10 +0,0 @@ -package cn.iocoder.yudao.module.system.controller.permission.vo.menu; - -import io.swagger.annotations.ApiModel; -import lombok.*; - -@ApiModel("èœå•创建 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -public class SysMenuCreateReqVO extends SysMenuBaseVO { -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleCreateReqVO.java deleted file mode 100644 index a182b26c9c..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/permission/vo/role/SysRoleCreateReqVO.java +++ /dev/null @@ -1,12 +0,0 @@ -package cn.iocoder.yudao.module.system.controller.permission.vo.role; - -import io.swagger.annotations.ApiModel; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@ApiModel("角色创建 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -public class SysRoleCreateReqVO extends SysRoleBaseVO { - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantCreateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantCreateReqVO.java deleted file mode 100755 index 4d41fdfe0d..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/tenant/vo/SysTenantCreateReqVO.java +++ /dev/null @@ -1,12 +0,0 @@ -package cn.iocoder.yudao.module.system.controller.tenant.vo; - -import lombok.*; -import io.swagger.annotations.*; - -@ApiModel("租户创建 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class SysTenantCreateReqVO extends SysTenantBaseVO { - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/SysAuthConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java similarity index 66% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/SysAuthConvert.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java index c1f6f265db..be76b5fdd2 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/SysAuthConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java @@ -1,8 +1,8 @@ package cn.iocoder.yudao.module.system.convert.auth; -import cn.iocoder.yudao.module.system.controller.auth.vo.auth.SysAuthMenuRespVO; -import cn.iocoder.yudao.module.system.controller.auth.vo.auth.SysAuthPermissionInfoRespVO; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysMenuDO; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthMenuRespVO; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthPermissionInfoRespVO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; import cn.iocoder.yudao.module.system.enums.permission.MenuIdEnum; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; @@ -17,9 +17,9 @@ import org.slf4j.LoggerFactory; import java.util.*; @Mapper -public interface SysAuthConvert { +public interface AuthConvert { - SysAuthConvert INSTANCE = Mappers.getMapper(SysAuthConvert.class); + AuthConvert INSTANCE = Mappers.getMapper(AuthConvert.class); @Mapping(source = "updateTime", target = "updateTime", ignore = true) // 字段相åŒï¼Œä½†æ˜¯å«ä¹‰ä¸åŒï¼Œå¿½ç•¥ LoginUser convert0(SysUserDO bean); @@ -29,15 +29,15 @@ public interface SysAuthConvert { return convert0(bean).setUserType(UserTypeEnum.ADMIN.getValue()); } - default SysAuthPermissionInfoRespVO convert(SysUserDO user, List roleList, List menuList) { - return SysAuthPermissionInfoRespVO.builder() - .user(SysAuthPermissionInfoRespVO.UserVO.builder().id(user.getId()).nickname(user.getNickname()).avatar(user.getAvatar()).build()) + default AuthPermissionInfoRespVO convert(SysUserDO user, List roleList, List menuList) { + return AuthPermissionInfoRespVO.builder() + .user(AuthPermissionInfoRespVO.UserVO.builder().id(user.getId()).nickname(user.getNickname()).avatar(user.getAvatar()).build()) .roles(CollectionUtils.convertSet(roleList, SysRoleDO::getCode)) - .permissions(CollectionUtils.convertSet(menuList, SysMenuDO::getPermission)) + .permissions(CollectionUtils.convertSet(menuList, MenuDO::getPermission)) .build(); } - SysAuthMenuRespVO convertTreeNode(SysMenuDO menu); + AuthMenuRespVO convertTreeNode(MenuDO menu); /** * å°†èœå•列表,构建æˆèœå•æ ‘ @@ -45,17 +45,17 @@ public interface SysAuthConvert { * @param menuList èœå•列表 * @return èœå•æ ‘ */ - default List buildMenuTree(List menuList) { + default List buildMenuTree(List menuList) { // 排åºï¼Œä¿è¯èœå•çš„æœ‰åºæ€§ - menuList.sort(Comparator.comparing(SysMenuDO::getSort)); + menuList.sort(Comparator.comparing(MenuDO::getSort)); // 构建èœå•æ ‘ // 使用 LinkedHashMap çš„åŽŸå› ï¼Œæ˜¯ä¸ºäº†æŽ’åº ã€‚å®žé™…ä¹Ÿå¯ä»¥ç”¨ Stream API ,就是太丑了。 - Map treeNodeMap = new LinkedHashMap<>(); - menuList.forEach(menu -> treeNodeMap.put(menu.getId(), SysAuthConvert.INSTANCE.convertTreeNode(menu))); + Map treeNodeMap = new LinkedHashMap<>(); + menuList.forEach(menu -> treeNodeMap.put(menu.getId(), AuthConvert.INSTANCE.convertTreeNode(menu))); // 处ç†çˆ¶å­å…³ç³» treeNodeMap.values().stream().filter(node -> !node.getParentId().equals(MenuIdEnum.ROOT.getId())).forEach(childNode -> { // 获得父节点 - SysAuthMenuRespVO parentNode = treeNodeMap.get(childNode.getParentId()); + AuthMenuRespVO parentNode = treeNodeMap.get(childNode.getParentId()); if (parentNode == null) { LoggerFactory.getLogger(getClass()).error("[buildRouterTree][resource({}) 找ä¸åˆ°çˆ¶èµ„æº({})]", childNode.getId(), childNode.getParentId()); diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/SysUserSessionConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/SysUserSessionConvert.java deleted file mode 100644 index 629f030074..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/SysUserSessionConvert.java +++ /dev/null @@ -1,15 +0,0 @@ -package cn.iocoder.yudao.module.system.convert.auth; - -import cn.iocoder.yudao.module.system.controller.auth.vo.session.SysUserSessionPageItemRespVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -@Mapper -public interface SysUserSessionConvert { - - SysUserSessionConvert INSTANCE = Mappers.getMapper(SysUserSessionConvert.class); - - SysUserSessionPageItemRespVO convert(SysUserSessionDO session); - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/UserSessionConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/UserSessionConvert.java new file mode 100644 index 0000000000..37cec9ee46 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/UserSessionConvert.java @@ -0,0 +1,15 @@ +package cn.iocoder.yudao.module.system.convert.auth; + +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.session.UserSessionPageItemRespVO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +@Mapper +public interface UserSessionConvert { + + UserSessionConvert INSTANCE = Mappers.getMapper(UserSessionConvert.class); + + UserSessionPageItemRespVO convert(SysUserSessionDO session); + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/common/CaptchaConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/common/CaptchaConvert.java new file mode 100644 index 0000000000..54d36bee9a --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/common/CaptchaConvert.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.module.system.convert.common; + +import cn.hutool.captcha.AbstractCaptcha; +import cn.iocoder.yudao.module.system.controller.admin.common.vo.CaptchaImageRespVO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +@Mapper +public interface CaptchaConvert { + + CaptchaConvert INSTANCE = Mappers.getMapper(CaptchaConvert.class); + + default CaptchaImageRespVO convert(String uuid, AbstractCaptcha captcha) { + return CaptchaImageRespVO.builder().uuid(uuid).img(captcha.getImageBase64()).build(); + } + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/common/SysCaptchaConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/common/SysCaptchaConvert.java deleted file mode 100644 index 8e5fc34a6b..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/common/SysCaptchaConvert.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.iocoder.yudao.module.system.convert.common; - -import cn.hutool.captcha.AbstractCaptcha; -import cn.iocoder.yudao.module.system.controller.common.vo.SysCaptchaImageRespVO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -@Mapper -public interface SysCaptchaConvert { - - SysCaptchaConvert INSTANCE = Mappers.getMapper(SysCaptchaConvert.class); - - default SysCaptchaImageRespVO convert(String uuid, AbstractCaptcha captcha) { - return SysCaptchaImageRespVO.builder().uuid(uuid).img(captcha.getImageBase64()).build(); - } - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/DeptConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/DeptConvert.java new file mode 100644 index 0000000000..2d1c4d6c1d --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/DeptConvert.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.module.system.convert.dept; + +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptRespVO; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptSimpleRespVO; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptUpdateReqVO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +@Mapper +public interface DeptConvert { + + DeptConvert INSTANCE = Mappers.getMapper(DeptConvert.class); + + List convertList(List list); + + List convertList02(List list); + + DeptRespVO convert(SysDeptDO bean); + + SysDeptDO convert(DeptCreateReqVO bean); + + SysDeptDO convert(DeptUpdateReqVO bean); + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/PostConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/PostConvert.java new file mode 100644 index 0000000000..99af8b91ac --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/PostConvert.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.module.system.convert.dept; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.*; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +@Mapper +public interface PostConvert { + + PostConvert INSTANCE = Mappers.getMapper(PostConvert.class); + + List convertList02(List list); + + PageResult convertPage(PageResult page); + + PostRespVO convert(SysPostDO id); + + SysPostDO convert(PostCreateReqVO bean); + + SysPostDO convert(PostUpdateReqVO reqVO); + + List convertList03(List list); + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/SysDeptConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/SysDeptConvert.java deleted file mode 100644 index 40d667641d..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/SysDeptConvert.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.yudao.module.system.convert.dept; - -import cn.iocoder.yudao.module.system.controller.dept.vo.dept.SysDeptCreateReqVO; -import cn.iocoder.yudao.module.system.controller.dept.vo.dept.SysDeptRespVO; -import cn.iocoder.yudao.module.system.controller.dept.vo.dept.SysDeptSimpleRespVO; -import cn.iocoder.yudao.module.system.controller.dept.vo.dept.SysDeptUpdateReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -@Mapper -public interface SysDeptConvert { - - SysDeptConvert INSTANCE = Mappers.getMapper(SysDeptConvert.class); - - List convertList(List list); - - List convertList02(List list); - - SysDeptRespVO convert(SysDeptDO bean); - - SysDeptDO convert(SysDeptCreateReqVO bean); - - SysDeptDO convert(SysDeptUpdateReqVO bean); - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/SysPostConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/SysPostConvert.java deleted file mode 100644 index 023bcfae13..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/SysPostConvert.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.yudao.module.system.convert.dept; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.system.controller.dept.vo.post.*; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -@Mapper -public interface SysPostConvert { - - SysPostConvert INSTANCE = Mappers.getMapper(SysPostConvert.class); - - List convertList02(List list); - - PageResult convertPage(PageResult page); - - SysPostRespVO convert(SysPostDO id); - - SysPostDO convert(SysPostCreateReqVO bean); - - SysPostDO convert(SysPostUpdateReqVO reqVO); - - List convertList03(List list); - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/DictDataConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/DictDataConvert.java new file mode 100644 index 0000000000..33958c325b --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/DictDataConvert.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.system.convert.dict; + +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.*; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.dict.core.dto.DictDataRespDTO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.Collection; +import java.util.List; + +@Mapper +public interface DictDataConvert { + + DictDataConvert INSTANCE = Mappers.getMapper(DictDataConvert.class); + + List convertList(List list); + + DictDataRespVO convert(SysDictDataDO bean); + + PageResult convertPage(PageResult page); + + SysDictDataDO convert(DictDataUpdateReqVO bean); + + SysDictDataDO convert(DictDataCreateReqVO bean); + + List convertList02(List bean); + + DictDataRespDTO convert02(SysDictDataDO bean); + + List convertList03(Collection list); + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/DictTypeConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/DictTypeConvert.java new file mode 100644 index 0000000000..392e3082e7 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/DictTypeConvert.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.module.system.convert.dict; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.*; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictTypeDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +@Mapper +public interface DictTypeConvert { + + DictTypeConvert INSTANCE = Mappers.getMapper(DictTypeConvert.class); + + PageResult convertPage(PageResult bean); + + DictTypeRespVO convert(DictTypeDO bean); + + DictTypeDO convert(DictTypeCreateReqVO bean); + + DictTypeDO convert(DictTypeUpdateReqVO bean); + + List convertList(List list); + + List convertList02(List list); + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/SysDictDataConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/SysDictDataConvert.java deleted file mode 100644 index fc38f41626..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/SysDictDataConvert.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.iocoder.yudao.module.system.convert.dict; - -import cn.iocoder.yudao.module.system.controller.dict.vo.data.*; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.dict.core.dto.DictDataRespDTO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.Collection; -import java.util.List; - -@Mapper -public interface SysDictDataConvert { - - SysDictDataConvert INSTANCE = Mappers.getMapper(SysDictDataConvert.class); - - List convertList(List list); - - SysDictDataRespVO convert(SysDictDataDO bean); - - PageResult convertPage(PageResult page); - - SysDictDataDO convert(SysDictDataUpdateReqVO bean); - - SysDictDataDO convert(SysDictDataCreateReqVO bean); - - List convertList02(List bean); - - DictDataRespDTO convert02(SysDictDataDO bean); - - List convertList03(Collection list); - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/SysDictTypeConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/SysDictTypeConvert.java deleted file mode 100644 index ce4bae4066..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/SysDictTypeConvert.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.yudao.module.system.convert.dict; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.system.controller.dict.vo.type.*; -import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictTypeDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -@Mapper -public interface SysDictTypeConvert { - - SysDictTypeConvert INSTANCE = Mappers.getMapper(SysDictTypeConvert.class); - - PageResult convertPage(PageResult bean); - - SysDictTypeRespVO convert(SysDictTypeDO bean); - - SysDictTypeDO convert(SysDictTypeCreateReqVO bean); - - SysDictTypeDO convert(SysDictTypeUpdateReqVO bean); - - List convertList(List list); - - List convertList02(List list); - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/errorcode/ErrorCodeConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/errorcode/ErrorCodeConvert.java new file mode 100644 index 0000000000..0402aca8b4 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/errorcode/ErrorCodeConvert.java @@ -0,0 +1,42 @@ +package cn.iocoder.yudao.module.system.convert.errorcode; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.ErrorCodeCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.ErrorCodeExcelVO; +import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.ErrorCodeRespVO; +import cn.iocoder.yudao.module.system.dal.dataobject.errorcode.ErrorCodeDO; +import cn.iocoder.yudao.module.system.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; +import cn.iocoder.yudao.module.system.framework.errorcode.core.dto.ErrorCodeRespDTO; +import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.ErrorCodeUpdateReqVO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * é”™è¯¯ç  Convert + * + * @author èŠ‹é“æºç  + */ +@Mapper +public interface ErrorCodeConvert { + + ErrorCodeConvert INSTANCE = Mappers.getMapper(ErrorCodeConvert.class); + + ErrorCodeDO convert(ErrorCodeCreateReqVO bean); + + ErrorCodeDO convert(ErrorCodeUpdateReqVO bean); + + ErrorCodeRespVO convert(ErrorCodeDO bean); + + List convertList(List list); + + PageResult convertPage(PageResult page); + + List convertList02(List list); + + ErrorCodeDO convert(ErrorCodeAutoGenerateReqDTO bean); + + List convertList03(List list); + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/errorcode/SysErrorCodeConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/errorcode/SysErrorCodeConvert.java deleted file mode 100644 index 7a571dc45e..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/errorcode/SysErrorCodeConvert.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.iocoder.yudao.module.system.convert.errorcode; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.system.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; -import cn.iocoder.yudao.module.system.framework.errorcode.core.dto.ErrorCodeRespDTO; -import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodeCreateReqVO; -import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodeExcelVO; -import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodeRespVO; -import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodeUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.errorcode.SysErrorCodeDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -/** - * é”™è¯¯ç  Convert - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface SysErrorCodeConvert { - - SysErrorCodeConvert INSTANCE = Mappers.getMapper(SysErrorCodeConvert.class); - - SysErrorCodeDO convert(SysErrorCodeCreateReqVO bean); - - SysErrorCodeDO convert(SysErrorCodeUpdateReqVO bean); - - SysErrorCodeRespVO convert(SysErrorCodeDO bean); - - List convertList(List list); - - PageResult convertPage(PageResult page); - - List convertList02(List list); - - SysErrorCodeDO convert(ErrorCodeAutoGenerateReqDTO bean); - - List convertList03(List list); - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/LoginLogConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/LoginLogConvert.java new file mode 100644 index 0000000000..3d375b0046 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/LoginLogConvert.java @@ -0,0 +1,21 @@ +package cn.iocoder.yudao.module.system.convert.logger; + +import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogExcelVO; +import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogRespVO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +@Mapper +public interface LoginLogConvert { + + LoginLogConvert INSTANCE = Mappers.getMapper(LoginLogConvert.class); + + PageResult convertPage(PageResult page); + + List convertList(List list); + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/SysOperateLogConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/OperateLogConvert.java similarity index 54% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/SysOperateLogConvert.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/OperateLogConvert.java index 901e321a0a..bc5cd690ec 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/SysOperateLogConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/OperateLogConvert.java @@ -1,8 +1,8 @@ package cn.iocoder.yudao.module.system.convert.logger; -import cn.iocoder.yudao.module.system.controller.logger.vo.operatelog.SysOperateLogExcelVO; -import cn.iocoder.yudao.module.system.controller.logger.vo.operatelog.SysOperateLogRespVO; -import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysOperateLogDO; +import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogExcelVO; +import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogRespVO; +import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.MapUtils; @@ -17,25 +17,25 @@ import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants.SUCCESS; @Mapper -public interface SysOperateLogConvert { +public interface OperateLogConvert { - SysOperateLogConvert INSTANCE = Mappers.getMapper(SysOperateLogConvert.class); + OperateLogConvert INSTANCE = Mappers.getMapper(OperateLogConvert.class); - SysOperateLogDO convert(OperateLogCreateReqDTO bean); + OperateLogDO convert(OperateLogCreateReqDTO bean); - PageResult convertPage(PageResult page); + PageResult convertPage(PageResult page); - SysOperateLogRespVO convert(SysOperateLogDO bean); + OperateLogRespVO convert(OperateLogDO bean); - default List convertList(List list, Map userMap) { + default List convertList(List list, Map userMap) { return list.stream().map(operateLog -> { - SysOperateLogExcelVO excelVO = convert02(operateLog); + OperateLogExcelVO excelVO = convert02(operateLog); MapUtils.findAndThen(userMap, operateLog.getId(), user -> excelVO.setUserNickname(user.getNickname())); excelVO.setSuccessStr(SUCCESS.getCode().equals(operateLog.getResultCode()) ? "æˆåŠŸ" : "失败"); return excelVO; }).collect(Collectors.toList()); } - SysOperateLogExcelVO convert02(SysOperateLogDO bean); + OperateLogExcelVO convert02(OperateLogDO bean); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/SysLoginLogConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/SysLoginLogConvert.java deleted file mode 100644 index 01b9adabba..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/SysLoginLogConvert.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.iocoder.yudao.module.system.convert.logger; - -import cn.iocoder.yudao.module.system.controller.logger.vo.loginlog.SysLoginLogExcelVO; -import cn.iocoder.yudao.module.system.controller.logger.vo.loginlog.SysLoginLogRespVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -@Mapper -public interface SysLoginLogConvert { - - SysLoginLogConvert INSTANCE = Mappers.getMapper(SysLoginLogConvert.class); - - PageResult convertPage(PageResult page); - - List convertList(List list); - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/notice/NoticeConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/notice/NoticeConvert.java new file mode 100644 index 0000000000..ad2bedec76 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/notice/NoticeConvert.java @@ -0,0 +1,24 @@ +package cn.iocoder.yudao.module.system.convert.notice; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeRespVO; +import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeUpdateReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +@Mapper +public interface NoticeConvert { + + NoticeConvert INSTANCE = Mappers.getMapper(NoticeConvert.class); + + PageResult convertPage(PageResult page); + + NoticeRespVO convert(NoticeDO bean); + + NoticeDO convert(NoticeUpdateReqVO bean); + + NoticeDO convert(NoticeCreateReqVO bean); + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/notice/SysNoticeConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/notice/SysNoticeConvert.java deleted file mode 100644 index bf46d698b0..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/notice/SysNoticeConvert.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.iocoder.yudao.module.system.convert.notice; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticeCreateReqVO; -import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticeRespVO; -import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticeUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.notice.SysNoticeDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -@Mapper -public interface SysNoticeConvert { - - SysNoticeConvert INSTANCE = Mappers.getMapper(SysNoticeConvert.class); - - PageResult convertPage(PageResult page); - - SysNoticeRespVO convert(SysNoticeDO bean); - - SysNoticeDO convert(SysNoticeUpdateReqVO bean); - - SysNoticeDO convert(SysNoticeCreateReqVO bean); - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/MenuConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/MenuConvert.java new file mode 100644 index 0000000000..0fb3505cce --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/MenuConvert.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.module.system.convert.permission; + +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuRespVO; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuSimpleRespVO; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuUpdateReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +@Mapper +public interface MenuConvert { + + MenuConvert INSTANCE = Mappers.getMapper(MenuConvert.class); + + List convertList(List list); + + MenuDO convert(MenuCreateReqVO bean); + + MenuDO convert(MenuUpdateReqVO bean); + + MenuRespVO convert(MenuDO bean); + + List convertList02(List list); + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/RoleConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/RoleConvert.java new file mode 100644 index 0000000000..c9e1098ae4 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/RoleConvert.java @@ -0,0 +1,25 @@ +package cn.iocoder.yudao.module.system.convert.permission; + +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.*; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +@Mapper +public interface RoleConvert { + + RoleConvert INSTANCE = Mappers.getMapper(RoleConvert.class); + + SysRoleDO convert(RoleUpdateReqVO bean); + + RoleRespVO convert(SysRoleDO bean); + + SysRoleDO convert(RoleCreateReqVO bean); + + List convertList02(List list); + + List convertList03(List list); + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/SysMenuConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/SysMenuConvert.java deleted file mode 100644 index 109a53f568..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/SysMenuConvert.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.yudao.module.system.convert.permission; - -import cn.iocoder.yudao.module.system.controller.permission.vo.menu.SysMenuCreateReqVO; -import cn.iocoder.yudao.module.system.controller.permission.vo.menu.SysMenuRespVO; -import cn.iocoder.yudao.module.system.controller.permission.vo.menu.SysMenuSimpleRespVO; -import cn.iocoder.yudao.module.system.controller.permission.vo.menu.SysMenuUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysMenuDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -@Mapper -public interface SysMenuConvert { - - SysMenuConvert INSTANCE = Mappers.getMapper(SysMenuConvert.class); - - List convertList(List list); - - SysMenuDO convert(SysMenuCreateReqVO bean); - - SysMenuDO convert(SysMenuUpdateReqVO bean); - - SysMenuRespVO convert(SysMenuDO bean); - - List convertList02(List list); - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/SysRoleConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/SysRoleConvert.java deleted file mode 100644 index bc048a774b..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/SysRoleConvert.java +++ /dev/null @@ -1,25 +0,0 @@ -package cn.iocoder.yudao.module.system.convert.permission; - -import cn.iocoder.yudao.module.system.controller.permission.vo.role.*; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -@Mapper -public interface SysRoleConvert { - - SysRoleConvert INSTANCE = Mappers.getMapper(SysRoleConvert.class); - - SysRoleDO convert(SysRoleUpdateReqVO bean); - - SysRoleRespVO convert(SysRoleDO bean); - - SysRoleDO convert(SysRoleCreateReqVO bean); - - List convertList02(List list); - - List convertList03(List list); - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsChannelConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsChannelConvert.java new file mode 100644 index 0000000000..3885b7a1cd --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsChannelConvert.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.module.system.convert.sms; + +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelRespVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelSimpleRespVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelUpdateReqVO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.sms.core.property.SmsChannelProperties; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * çŸ­ä¿¡æ¸ é“ Convert + * + * @author èŠ‹é“æºç  + */ +@Mapper +public interface SmsChannelConvert { + + SmsChannelConvert INSTANCE = Mappers.getMapper(SmsChannelConvert.class); + + SysSmsChannelDO convert(SmsChannelCreateReqVO bean); + + SysSmsChannelDO convert(SmsChannelUpdateReqVO bean); + + SmsChannelRespVO convert(SysSmsChannelDO bean); + + List convertList(List list); + + PageResult convertPage(PageResult page); + + List convertList02(List list); + + List convertList03(List list); + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SysSmsLogConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsLogConvert.java similarity index 62% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SysSmsLogConvert.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsLogConvert.java index d91f7b3269..f5110b3716 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SysSmsLogConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsLogConvert.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.convert.sms; -import cn.iocoder.yudao.module.system.controller.sms.vo.log.SysSmsLogExcelVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.log.SysSmsLogRespVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogExcelVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SysSmsLogRespVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.mapstruct.Mapper; @@ -15,9 +15,9 @@ import java.util.List; * @author èŠ‹é“æºç  */ @Mapper -public interface SysSmsLogConvert { +public interface SmsLogConvert { - SysSmsLogConvert INSTANCE = Mappers.getMapper(SysSmsLogConvert.class); + SmsLogConvert INSTANCE = Mappers.getMapper(SmsLogConvert.class); SysSmsLogRespVO convert(SysSmsLogDO bean); @@ -25,6 +25,6 @@ public interface SysSmsLogConvert { PageResult convertPage(PageResult page); - List convertList02(List list); + List convertList02(List list); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsTemplateConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsTemplateConvert.java new file mode 100644 index 0000000000..bc83e1e85f --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsTemplateConvert.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.system.convert.sms; + +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateExcelVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateRespVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateUpdateReqVO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +@Mapper +public interface SmsTemplateConvert { + + SmsTemplateConvert INSTANCE = Mappers.getMapper(SmsTemplateConvert.class); + + SysSmsTemplateDO convert(SmsTemplateCreateReqVO bean); + + SysSmsTemplateDO convert(SmsTemplateUpdateReqVO bean); + + SmsTemplateRespVO convert(SysSmsTemplateDO bean); + + List convertList(List list); + + PageResult convertPage(PageResult page); + + List convertList02(List list); + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SysSmsChannelConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SysSmsChannelConvert.java deleted file mode 100644 index af0652eea1..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SysSmsChannelConvert.java +++ /dev/null @@ -1,39 +0,0 @@ -package cn.iocoder.yudao.module.system.convert.sms; - -import cn.iocoder.yudao.module.system.controller.sms.vo.channel.SysSmsChannelCreateReqVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.channel.SysSmsChannelRespVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.channel.SysSmsChannelSimpleRespVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.channel.SysSmsChannelUpdateReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.sms.core.property.SmsChannelProperties; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -/** - * çŸ­ä¿¡æ¸ é“ Convert - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface SysSmsChannelConvert { - - SysSmsChannelConvert INSTANCE = Mappers.getMapper(SysSmsChannelConvert.class); - - SysSmsChannelDO convert(SysSmsChannelCreateReqVO bean); - - SysSmsChannelDO convert(SysSmsChannelUpdateReqVO bean); - - SysSmsChannelRespVO convert(SysSmsChannelDO bean); - - List convertList(List list); - - PageResult convertPage(PageResult page); - - List convertList02(List list); - - List convertList03(List list); - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SysSmsTemplateConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SysSmsTemplateConvert.java deleted file mode 100644 index b3a423e32f..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SysSmsTemplateConvert.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.iocoder.yudao.module.system.convert.sms; - -import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplateCreateReqVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplateExcelVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplateRespVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplateUpdateReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -@Mapper -public interface SysSmsTemplateConvert { - - SysSmsTemplateConvert INSTANCE = Mappers.getMapper(SysSmsTemplateConvert.class); - - SysSmsTemplateDO convert(SysSmsTemplateCreateReqVO bean); - - SysSmsTemplateDO convert(SysSmsTemplateUpdateReqVO bean); - - SysSmsTemplateRespVO convert(SysSmsTemplateDO bean); - - List convertList(List list); - - PageResult convertPage(PageResult page); - - List convertList02(List list); - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/tenant/SysTenantConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/tenant/SysTenantConvert.java deleted file mode 100755 index 6d9d1f77b4..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/tenant/SysTenantConvert.java +++ /dev/null @@ -1,36 +0,0 @@ -package cn.iocoder.yudao.module.system.convert.tenant; - -import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantCreateReqVO; -import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantExcelVO; -import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantRespVO; -import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantUpdateReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.tenant.SysTenantDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -/** - * 租户 Convert - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface SysTenantConvert { - - SysTenantConvert INSTANCE = Mappers.getMapper(SysTenantConvert.class); - - SysTenantDO convert(SysTenantCreateReqVO bean); - - SysTenantDO convert(SysTenantUpdateReqVO bean); - - SysTenantRespVO convert(SysTenantDO bean); - - List convertList(List list); - - PageResult convertPage(PageResult page); - - List convertList02(List list); - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/tenant/TenantConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/tenant/TenantConvert.java new file mode 100755 index 0000000000..62e28b4690 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/tenant/TenantConvert.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.system.convert.tenant; + +import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantExcelVO; +import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantRespVO; +import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantUpdateReqVO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.tenant.SysTenantDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * 租户 Convert + * + * @author èŠ‹é“æºç  + */ +@Mapper +public interface TenantConvert { + + TenantConvert INSTANCE = Mappers.getMapper(TenantConvert.class); + + SysTenantDO convert(TenantCreateReqVO bean); + + SysTenantDO convert(TenantUpdateReqVO bean); + + TenantRespVO convert(SysTenantDO bean); + + List convertList(List list); + + PageResult convertPage(PageResult page); + + List convertList02(List list); + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/user/SysUserConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/user/SysUserConvert.java deleted file mode 100644 index b1436155b9..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/user/SysUserConvert.java +++ /dev/null @@ -1,49 +0,0 @@ -package cn.iocoder.yudao.module.system.convert.user; - -import cn.iocoder.yudao.module.system.controller.user.vo.profile.SysUserProfileRespVO; -import cn.iocoder.yudao.module.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO; -import cn.iocoder.yudao.module.system.controller.user.vo.profile.SysUserProfileUpdateReqVO; -import cn.iocoder.yudao.module.system.controller.user.vo.user.*; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.social.SysSocialUserDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -@Mapper -public interface SysUserConvert { - - SysUserConvert INSTANCE = Mappers.getMapper(SysUserConvert.class); - - SysUserPageItemRespVO convert(SysUserDO bean); - - SysUserPageItemRespVO.Dept convert(SysDeptDO bean); - - SysUserDO convert(SysUserCreateReqVO bean); - - SysUserDO convert(SysUserUpdateReqVO bean); - - SysUserExcelVO convert02(SysUserDO bean); - - SysUserDO convert(SysUserImportExcelVO bean); - - SysUserProfileRespVO convert03(SysUserDO bean); - - List convertList(List list); - - SysUserProfileRespVO.Dept convert02(SysDeptDO bean); - - SysUserDO convert(SysUserProfileUpdateReqVO bean); - - SysUserDO convert(SysUserProfileUpdatePasswordReqVO bean); - - List convertList02(List list); - - List convertList03(List list); - - List convertList04(List list); -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/user/UserConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/user/UserConvert.java new file mode 100644 index 0000000000..e57cb86483 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/user/UserConvert.java @@ -0,0 +1,49 @@ +package cn.iocoder.yudao.module.system.convert.user; + +import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileRespVO; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.social.SysSocialUserDO; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +@Mapper +public interface UserConvert { + + UserConvert INSTANCE = Mappers.getMapper(UserConvert.class); + + UserPageItemRespVO convert(SysUserDO bean); + + UserPageItemRespVO.Dept convert(SysDeptDO bean); + + SysUserDO convert(UserCreateReqVO bean); + + SysUserDO convert(UserUpdateReqVO bean); + + UserExcelVO convert02(SysUserDO bean); + + SysUserDO convert(UserImportExcelVO bean); + + UserProfileRespVO convert03(SysUserDO bean); + + List convertList(List list); + + UserProfileRespVO.Dept convert02(SysDeptDO bean); + + SysUserDO convert(UserProfileUpdateReqVO bean); + + SysUserDO convert(UserProfileUpdatePasswordReqVO bean); + + List convertList02(List list); + + List convertList03(List list); + + List convertList04(List list); +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dict/SysDictTypeDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dict/DictTypeDO.java similarity index 92% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dict/SysDictTypeDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dict/DictTypeDO.java index de7a67b859..01455f4383 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dict/SysDictTypeDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dict/DictTypeDO.java @@ -12,14 +12,14 @@ import lombok.*; * * @author ruoyi */ -@TableName("sys_dict_type") +@TableName("system_dict_type") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) @Builder @NoArgsConstructor @AllArgsConstructor -public class SysDictTypeDO extends BaseDO { +public class DictTypeDO extends BaseDO { /** * 字典主键 diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/errorcode/SysErrorCodeDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/errorcode/ErrorCodeDO.java similarity index 81% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/errorcode/SysErrorCodeDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/errorcode/ErrorCodeDO.java index b8cae75dfe..b279492873 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/errorcode/SysErrorCodeDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/errorcode/ErrorCodeDO.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.dal.dataobject.errorcode; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.module.system.enums.errorcode.SysErrorCodeTypeEnum; +import cn.iocoder.yudao.module.system.enums.errorcode.ErrorCodeTypeEnum; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -13,11 +13,11 @@ import lombok.ToString; * * @author èŠ‹é“æºç  */ -@TableName(value = "sys_error_code") +@TableName(value = "system_error_code") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class SysErrorCodeDO extends BaseDO { +public class ErrorCodeDO extends BaseDO { /** * 错误ç ç¼–å·ï¼Œè‡ªå¢ž @@ -27,7 +27,7 @@ public class SysErrorCodeDO extends BaseDO { /** * 错误ç ç±»åž‹ * - * 枚举 {@link SysErrorCodeTypeEnum} + * 枚举 {@link ErrorCodeTypeEnum} */ private Integer type; /** diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/SysOperateLogDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/OperateLogDO.java similarity index 96% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/SysOperateLogDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/OperateLogDO.java index ca9483e02d..ec799ec464 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/SysOperateLogDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/OperateLogDO.java @@ -19,10 +19,10 @@ import java.util.Map; * * @author èŠ‹é“æºç  */ -@TableName(value = "sys_operate_log", autoResultMap = true) +@TableName(value = "system_operate_log", autoResultMap = true) @Data @EqualsAndHashCode(callSuper = true) -public class SysOperateLogDO extends TenantBaseDO { +public class OperateLogDO extends TenantBaseDO { /** * {@link #javaMethodArgs} 的最大长度 diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/notice/SysNoticeDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/notice/NoticeDO.java similarity index 82% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/notice/SysNoticeDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/notice/NoticeDO.java index 571b011575..20860b835a 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/notice/SysNoticeDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/notice/NoticeDO.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.dal.dataobject.notice; -import cn.iocoder.yudao.module.system.enums.notice.SysNoticeTypeEnum; +import cn.iocoder.yudao.module.system.enums.notice.NoticeTypeEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; import com.baomidou.mybatisplus.annotation.TableField; @@ -13,10 +13,10 @@ import lombok.EqualsAndHashCode; * * @author ruoyi */ -@TableName("sys_notice") +@TableName("system_notice") @Data @EqualsAndHashCode(callSuper = true) -public class SysNoticeDO extends TenantBaseDO { +public class NoticeDO extends TenantBaseDO { /** * 公告ID @@ -29,7 +29,7 @@ public class SysNoticeDO extends TenantBaseDO { /** * 公告类型 * - * 枚举 {@link SysNoticeTypeEnum} + * 枚举 {@link NoticeTypeEnum} */ @TableField("notice_type") private Integer type; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/SysMenuDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/MenuDO.java similarity index 96% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/SysMenuDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/MenuDO.java index 39c0b82ba5..1920a68e24 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/SysMenuDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/MenuDO.java @@ -14,10 +14,10 @@ import lombok.EqualsAndHashCode; * * @author ruoyi */ -@TableName("sys_menu") +@TableName("system_menu") @Data @EqualsAndHashCode(callSuper = true) -public class SysMenuDO extends BaseDO { +public class MenuDO extends BaseDO { /** * èœå•ID diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/SysRoleMenuDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/RoleMenuDO.java similarity index 88% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/SysRoleMenuDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/RoleMenuDO.java index bfe0c3f868..6b7778bf07 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/SysRoleMenuDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/RoleMenuDO.java @@ -11,10 +11,10 @@ import lombok.EqualsAndHashCode; * * @author ruoyi */ -@TableName("sys_role_menu") +@TableName("system_role_menu") @Data @EqualsAndHashCode(callSuper = true) -public class SysRoleMenuDO extends BaseDO { +public class RoleMenuDO extends BaseDO { /** * 自增主键 diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/auth/SysUserSessionMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/auth/SysUserSessionMapper.java index 34e3ffc387..7d231be885 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/auth/SysUserSessionMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/auth/SysUserSessionMapper.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.dal.mysql.auth; -import cn.iocoder.yudao.module.system.controller.auth.vo.session.SysUserSessionPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.session.UserSessionPageReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; @@ -14,7 +14,7 @@ import java.util.List; @Mapper public interface SysUserSessionMapper extends BaseMapperX { - default PageResult selectPage(SysUserSessionPageReqVO reqVO, Collection userIds) { + default PageResult selectPage(UserSessionPageReqVO reqVO, Collection userIds) { return selectPage(reqVO, new QueryWrapperX() .inIfPresent("user_id", userIds) .likeIfPresent("user_ip", reqVO.getUserIp())); diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysDeptMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysDeptMapper.java index 995ee1e5cf..0bd2d024c0 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysDeptMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysDeptMapper.java @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.system.dal.mysql.dept; import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.module.system.controller.dept.vo.dept.SysDeptListReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -15,7 +15,7 @@ import java.util.List; @Mapper public interface SysDeptMapper extends BaseMapperX { - default List selectList(SysDeptListReqVO reqVO) { + default List selectList(DeptListReqVO reqVO) { return selectList(new LambdaQueryWrapperX().likeIfPresent(SysDeptDO::getName, reqVO.getName()) .eqIfPresent(SysDeptDO::getStatus, reqVO.getStatus())); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysPostMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysPostMapper.java index bf154992a1..b3657d1f40 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysPostMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysPostMapper.java @@ -3,8 +3,8 @@ package cn.iocoder.yudao.module.system.dal.mysql.dept; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.yudao.module.system.controller.dept.vo.post.SysPostExportReqVO; -import cn.iocoder.yudao.module.system.controller.dept.vo.post.SysPostPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostPageReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; @@ -20,14 +20,14 @@ public interface SysPostMapper extends BaseMapperX { .inIfPresent("status", statuses)); } - default PageResult selectPage(SysPostPageReqVO reqVO) { + default PageResult selectPage(PostPageReqVO reqVO) { return selectPage(reqVO, new QueryWrapperX() .likeIfPresent("code", reqVO.getCode()) .likeIfPresent("name", reqVO.getName()) .eqIfPresent("status", reqVO.getStatus())); } - default List selectList(SysPostExportReqVO reqVO) { + default List selectList(PostExportReqVO reqVO) { return selectList(new QueryWrapperX() .likeIfPresent("code", reqVO.getCode()) .likeIfPresent("name", reqVO.getName()) diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/SysDictDataMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/SysDictDataMapper.java index 9fc681a024..c8abca94b6 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/SysDictDataMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/SysDictDataMapper.java @@ -1,8 +1,8 @@ package cn.iocoder.yudao.module.system.dal.mysql.dict; import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants; -import cn.iocoder.yudao.module.system.controller.dict.vo.data.SysDictDataExportReqVO; -import cn.iocoder.yudao.module.system.controller.dict.vo.data.SysDictDataPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataPageReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; @@ -32,7 +32,7 @@ public interface SysDictDataMapper extends BaseMapperX { return selectCount(SysDictDataDO::getDictType, dictType); } - default PageResult selectPage(SysDictDataPageReqVO reqVO) { + default PageResult selectPage(DictDataPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .likeIfPresent(SysDictDataDO::getLabel, reqVO.getLabel()) .likeIfPresent(SysDictDataDO::getDictType, reqVO.getDictType()) @@ -40,7 +40,7 @@ public interface SysDictDataMapper extends BaseMapperX { .orderByAsc(Arrays.asList(SysDictDataDO::getDictType, SysDictDataDO::getSort))); } - default List selectList(SysDictDataExportReqVO reqVO) { + default List selectList(DictDataExportReqVO reqVO) { return selectList(new LambdaQueryWrapperX().likeIfPresent(SysDictDataDO::getLabel, reqVO.getLabel()) .likeIfPresent(SysDictDataDO::getDictType, reqVO.getDictType()) .eqIfPresent(SysDictDataDO::getStatus, reqVO.getStatus())); diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/SysDictTypeMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/SysDictTypeMapper.java index ae213915f4..de3d700af8 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/SysDictTypeMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/SysDictTypeMapper.java @@ -3,38 +3,38 @@ package cn.iocoder.yudao.module.system.dal.mysql.dict; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.yudao.module.system.controller.dict.vo.type.SysDictTypeExportReqVO; -import cn.iocoder.yudao.module.system.controller.dict.vo.type.SysDictTypePageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictTypeDO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypeExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypePageReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictTypeDO; import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper -public interface SysDictTypeMapper extends BaseMapperX { +public interface SysDictTypeMapper extends BaseMapperX { - default PageResult selectPage(SysDictTypePageReqVO reqVO) { - return selectPage(reqVO, new QueryWrapperX() + default PageResult selectPage(DictTypePageReqVO reqVO) { + return selectPage(reqVO, new QueryWrapperX() .likeIfPresent("name", reqVO.getName()) .likeIfPresent("`type`", reqVO.getType()) .eqIfPresent("status", reqVO.getStatus()) .betweenIfPresent("create_time", reqVO.getBeginCreateTime(), reqVO.getEndCreateTime())); } - default List selectList(SysDictTypeExportReqVO reqVO) { - return selectList(new QueryWrapperX() + default List selectList(DictTypeExportReqVO reqVO) { + return selectList(new QueryWrapperX() .likeIfPresent("name", reqVO.getName()) .likeIfPresent("`type`", reqVO.getType()) .eqIfPresent("status", reqVO.getStatus()) .betweenIfPresent("create_time", reqVO.getBeginCreateTime(), reqVO.getEndCreateTime())); } - default SysDictTypeDO selectByType(String type) { - return selectOne(new QueryWrapperX().eq("`type`", type)); + default DictTypeDO selectByType(String type) { + return selectOne(new QueryWrapperX().eq("`type`", type)); } - default SysDictTypeDO selectByName(String name) { - return selectOne(new QueryWrapperX().eq("name", name)); + default DictTypeDO selectByName(String name) { + return selectOne(new QueryWrapperX().eq("name", name)); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/errorcode/SysErrorCodeMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/errorcode/SysErrorCodeMapper.java index b7cac6ca95..4924c6e872 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/errorcode/SysErrorCodeMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/errorcode/SysErrorCodeMapper.java @@ -3,9 +3,9 @@ package cn.iocoder.yudao.module.system.dal.mysql.errorcode; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodeExportReqVO; -import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodePageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.errorcode.SysErrorCodeDO; +import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.ErrorCodeExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.ErrorCodePageReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.errorcode.ErrorCodeDO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; @@ -14,10 +14,10 @@ import java.util.Date; import java.util.List; @Mapper -public interface SysErrorCodeMapper extends BaseMapperX { +public interface SysErrorCodeMapper extends BaseMapperX { - default PageResult selectPage(SysErrorCodePageReqVO reqVO) { - return selectPage(reqVO, new QueryWrapperX() + default PageResult selectPage(ErrorCodePageReqVO reqVO) { + return selectPage(reqVO, new QueryWrapperX() .eqIfPresent("type", reqVO.getType()) .likeIfPresent("application_name", reqVO.getApplicationName()) .eqIfPresent("code", reqVO.getCode()) @@ -26,8 +26,8 @@ public interface SysErrorCodeMapper extends BaseMapperX { .orderByAsc("application_name", "code")); } - default List selectList(SysErrorCodeExportReqVO reqVO) { - return selectList(new QueryWrapperX() + default List selectList(ErrorCodeExportReqVO reqVO) { + return selectList(new QueryWrapperX() .eqIfPresent("type", reqVO.getType()) .likeIfPresent("application_name", reqVO.getApplicationName()) .eqIfPresent("code", reqVO.getCode()) @@ -36,16 +36,16 @@ public interface SysErrorCodeMapper extends BaseMapperX { .orderByAsc("application_name", "code")); } - default List selectListByCodes(Collection codes) { - return selectList(new QueryWrapper().in("code", codes)); + default List selectListByCodes(Collection codes) { + return selectList(new QueryWrapper().in("code", codes)); } - default SysErrorCodeDO selectByCode(Integer code) { - return selectOne(new QueryWrapper().eq("code", code)); + default ErrorCodeDO selectByCode(Integer code) { + return selectOne(new QueryWrapper().eq("code", code)); } - default List selectListByApplicationNameAndUpdateTimeGt(String applicationName, Date minUpdateTime) { - return selectList(new QueryWrapperX().eq("application_name", applicationName) + default List selectListByApplicationNameAndUpdateTimeGt(String applicationName, Date minUpdateTime) { + return selectList(new QueryWrapperX().eq("application_name", applicationName) .gtIfPresent("update_time", minUpdateTime)); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/SysLoginLogMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/LoginLogMapper.java similarity index 65% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/SysLoginLogMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/LoginLogMapper.java index b211210890..f26023388c 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/SysLoginLogMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/LoginLogMapper.java @@ -4,39 +4,39 @@ import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLogi import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.yudao.module.system.controller.logger.vo.loginlog.SysLoginLogExportReqVO; -import cn.iocoder.yudao.module.system.controller.logger.vo.loginlog.SysLoginLogPageReqVO; -import cn.iocoder.yudao.module.system.enums.logger.SysLoginResultEnum; +import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO; +import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum; import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper -public interface SysLoginLogMapper extends BaseMapperX { +public interface LoginLogMapper extends BaseMapperX { - default PageResult selectPage(SysLoginLogPageReqVO reqVO) { + default PageResult selectPage(LoginLogPageReqVO reqVO) { QueryWrapperX query = new QueryWrapperX() .likeIfPresent("user_ip", reqVO.getUserIp()) .likeIfPresent("username", reqVO.getUsername()) .betweenIfPresent("create_time", reqVO.getBeginTime(), reqVO.getEndTime()); if (Boolean.TRUE.equals(reqVO.getStatus())) { - query.eq("result", SysLoginResultEnum.SUCCESS.getResult()); + query.eq("result", LoginResultEnum.SUCCESS.getResult()); } else if (Boolean.FALSE.equals(reqVO.getStatus())) { - query.gt("result", SysLoginResultEnum.SUCCESS.getResult()); + query.gt("result", LoginResultEnum.SUCCESS.getResult()); } query.orderByDesc("id"); // é™åº return selectPage(reqVO, query); } - default List selectList(SysLoginLogExportReqVO reqVO) { + default List selectList(LoginLogExportReqVO reqVO) { QueryWrapperX query = new QueryWrapperX() .likeIfPresent("user_ip", reqVO.getUserIp()) .likeIfPresent("username", reqVO.getUsername()) .betweenIfPresent("create_time", reqVO.getBeginTime(), reqVO.getEndTime()); if (Boolean.TRUE.equals(reqVO.getStatus())) { - query.eq("result", SysLoginResultEnum.SUCCESS.getResult()); + query.eq("result", LoginResultEnum.SUCCESS.getResult()); } else if (Boolean.FALSE.equals(reqVO.getStatus())) { - query.gt("result", SysLoginResultEnum.SUCCESS.getResult()); + query.gt("result", LoginResultEnum.SUCCESS.getResult()); } query.orderByDesc("id"); // é™åº return selectList(query); diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/SysOperateLogMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/OperateLogMapper.java similarity index 70% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/SysOperateLogMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/OperateLogMapper.java index 14d866a0b3..94367c55ff 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/SysOperateLogMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/OperateLogMapper.java @@ -4,19 +4,19 @@ import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstant import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.yudao.module.system.controller.logger.vo.operatelog.SysOperateLogExportReqVO; -import cn.iocoder.yudao.module.system.controller.logger.vo.operatelog.SysOperateLogPageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysOperateLogDO; +import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO; import org.apache.ibatis.annotations.Mapper; import java.util.Collection; import java.util.List; @Mapper -public interface SysOperateLogMapper extends BaseMapperX { +public interface OperateLogMapper extends BaseMapperX { - default PageResult selectPage(SysOperateLogPageReqVO reqVO, Collection userIds) { - QueryWrapperX query = new QueryWrapperX() + default PageResult selectPage(OperateLogPageReqVO reqVO, Collection userIds) { + QueryWrapperX query = new QueryWrapperX() .likeIfPresent("module", reqVO.getModule()) .inIfPresent("user_id", userIds) .eqIfPresent("operate_type", reqVO.getType()) @@ -30,8 +30,8 @@ public interface SysOperateLogMapper extends BaseMapperX { return selectPage(reqVO, query); } - default List selectList(SysOperateLogExportReqVO reqVO, Collection userIds) { - QueryWrapperX query = new QueryWrapperX() + default List selectList(OperateLogExportReqVO reqVO, Collection userIds) { + QueryWrapperX query = new QueryWrapperX() .likeIfPresent("module", reqVO.getModule()) .inIfPresent("user_id", userIds) .eqIfPresent("operate_type", reqVO.getType()) diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/notice/SysNoticeMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/notice/SysNoticeMapper.java index 74aee3f5d3..6c6a305189 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/notice/SysNoticeMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/notice/SysNoticeMapper.java @@ -3,15 +3,15 @@ package cn.iocoder.yudao.module.system.dal.mysql.notice; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticePageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.notice.SysNoticeDO; +import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticePageReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO; import org.apache.ibatis.annotations.Mapper; @Mapper -public interface SysNoticeMapper extends BaseMapperX { +public interface SysNoticeMapper extends BaseMapperX { - default PageResult selectPage(SysNoticePageReqVO reqVO) { - return selectPage(reqVO, new QueryWrapperX() + default PageResult selectPage(NoticePageReqVO reqVO) { + return selectPage(reqVO, new QueryWrapperX() .likeIfPresent("title", reqVO.getTitle()) .eqIfPresent("status", reqVO.getStatus())); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysMenuMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysMenuMapper.java index 605937fa46..1cce445b26 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysMenuMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysMenuMapper.java @@ -1,8 +1,8 @@ package cn.iocoder.yudao.module.system.dal.mysql.permission; import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants; -import cn.iocoder.yudao.module.system.controller.permission.vo.menu.SysMenuListReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysMenuDO; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuListReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -12,25 +12,25 @@ import java.util.Date; import java.util.List; @Mapper -public interface SysMenuMapper extends BaseMapperX { +public interface SysMenuMapper extends BaseMapperX { - default SysMenuDO selectByParentIdAndName(Long parentId, String name) { - return selectOne(new LambdaQueryWrapper().eq(SysMenuDO::getParentId, parentId) - .eq(SysMenuDO::getName, name)); + default MenuDO selectByParentIdAndName(Long parentId, String name) { + return selectOne(new LambdaQueryWrapper().eq(MenuDO::getParentId, parentId) + .eq(MenuDO::getName, name)); } default Integer selectCountByParentId(Long parentId) { - return selectCount(SysMenuDO::getParentId, parentId); + return selectCount(MenuDO::getParentId, parentId); } - default List selectList(SysMenuListReqVO reqVO) { - return selectList(new LambdaQueryWrapperX().likeIfPresent(SysMenuDO::getName, reqVO.getName()) - .eqIfPresent(SysMenuDO::getStatus, reqVO.getStatus())); + default List selectList(MenuListReqVO reqVO) { + return selectList(new LambdaQueryWrapperX().likeIfPresent(MenuDO::getName, reqVO.getName()) + .eqIfPresent(MenuDO::getStatus, reqVO.getStatus())); } default boolean selectExistsByUpdateTimeAfter(Date maxUpdateTime) { - return selectOne(new LambdaQueryWrapper().select(SysMenuDO::getId) - .gt(SysMenuDO::getUpdateTime, maxUpdateTime).last(SqlConstants.LIMIT1)) != null; + return selectOne(new LambdaQueryWrapper().select(MenuDO::getId) + .gt(MenuDO::getUpdateTime, maxUpdateTime).last(SqlConstants.LIMIT1)) != null; } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleMapper.java index 16641f8c38..45af3afad6 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleMapper.java @@ -3,8 +3,8 @@ package cn.iocoder.yudao.module.system.dal.mysql.permission; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.yudao.module.system.controller.permission.vo.role.SysRoleExportReqVO; -import cn.iocoder.yudao.module.system.controller.permission.vo.role.SysRolePageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; @@ -17,14 +17,14 @@ import java.util.List; @Mapper public interface SysRoleMapper extends BaseMapperX { - default PageResult selectPage(SysRolePageReqVO reqVO) { + default PageResult selectPage(RolePageReqVO reqVO) { return selectPage(reqVO, new QueryWrapperX().likeIfPresent("name", reqVO.getName()) .likeIfPresent("code", reqVO.getCode()) .eqIfPresent("status", reqVO.getStatus()) .betweenIfPresent("create_time", reqVO.getBeginTime(), reqVO.getEndTime())); } - default List listRoles(SysRoleExportReqVO reqVO) { + default List listRoles(RoleExportReqVO reqVO) { return selectList(new QueryWrapperX().likeIfPresent("name", reqVO.getName()) .likeIfPresent("code", reqVO.getCode()) .eqIfPresent("status", reqVO.getStatus()) diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleMenuMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleMenuMapper.java index ac806927d2..478729438b 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleMenuMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleMenuMapper.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.dal.mysql.permission; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleMenuDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleMenuDO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; @@ -12,15 +12,15 @@ import java.util.List; import java.util.stream.Collectors; @Mapper -public interface SysRoleMenuMapper extends BaseMapperX { +public interface SysRoleMenuMapper extends BaseMapperX { - default List selectListByRoleId(Long roleId) { - return selectList(new QueryWrapper().eq("role_id", roleId)); + default List selectListByRoleId(Long roleId) { + return selectList(new QueryWrapper().eq("role_id", roleId)); } default void insertList(Long roleId, Collection menuIds) { - List list = menuIds.stream().map(menuId -> { - SysRoleMenuDO entity = new SysRoleMenuDO(); + List list = menuIds.stream().map(menuId -> { + RoleMenuDO entity = new RoleMenuDO(); entity.setRoleId(roleId); entity.setMenuId(menuId); return entity; @@ -30,16 +30,16 @@ public interface SysRoleMenuMapper extends BaseMapperX { } default void deleteListByRoleIdAndMenuIds(Long roleId, Collection menuIds) { - delete(new QueryWrapper().eq("role_id", roleId) + delete(new QueryWrapper().eq("role_id", roleId) .in("menu_id", menuIds)); } default void deleteListByMenuId(Long menuId) { - delete(new QueryWrapper().eq("menu_id", menuId)); + delete(new QueryWrapper().eq("menu_id", menuId)); } default void deleteListByRoleId(Long roleId) { - delete(new QueryWrapper().eq("role_id", roleId)); + delete(new QueryWrapper().eq("role_id", roleId)); } @Select("SELECT id FROM sys_role_menu WHERE update_time > #{maxUpdateTime} LIMIT 1") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsChannelMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsChannelMapper.java index 5f6b0bb3e9..8d183fcb90 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsChannelMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsChannelMapper.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.dal.mysql.sms; -import cn.iocoder.yudao.module.system.controller.sms.vo.channel.SysSmsChannelPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelPageReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; @@ -13,7 +13,7 @@ import java.util.Date; @Mapper public interface SysSmsChannelMapper extends BaseMapperX { - default PageResult selectPage(SysSmsChannelPageReqVO reqVO) { + default PageResult selectPage(SmsChannelPageReqVO reqVO) { return selectPage(reqVO, new QueryWrapperX() .likeIfPresent("signature", reqVO.getSignature()) .eqIfPresent("status", reqVO.getStatus()) diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsLogMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsLogMapper.java index e0a1039aa6..ffed029128 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsLogMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsLogMapper.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.dal.mysql.sms; -import cn.iocoder.yudao.module.system.controller.sms.vo.log.SysSmsLogExportReqVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.log.SysSmsLogPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogPageReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; @@ -13,7 +13,7 @@ import java.util.List; @Mapper public interface SysSmsLogMapper extends BaseMapperX { - default PageResult selectPage(SysSmsLogPageReqVO reqVO) { + default PageResult selectPage(SmsLogPageReqVO reqVO) { return selectPage(reqVO, new QueryWrapperX() .eqIfPresent("channel_id", reqVO.getChannelId()) .eqIfPresent("template_id", reqVO.getTemplateId()) @@ -25,7 +25,7 @@ public interface SysSmsLogMapper extends BaseMapperX { .orderByDesc("id")); } - default List selectList(SysSmsLogExportReqVO reqVO) { + default List selectList(SmsLogExportReqVO reqVO) { return selectList(new QueryWrapperX() .eqIfPresent("channel_id", reqVO.getChannelId()) .eqIfPresent("template_id", reqVO.getTemplateId()) diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsTemplateMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsTemplateMapper.java index f1deda053b..a2559bd476 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsTemplateMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsTemplateMapper.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.dal.mysql.sms; -import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplateExportReqVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplatePageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplatePageReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; @@ -18,7 +18,7 @@ public interface SysSmsTemplateMapper extends BaseMapperX { } // TODO è¿™ç§å‚数都一样的得想办法å°è£…一下 - default PageResult selectPage(SysSmsTemplatePageReqVO reqVO) { + default PageResult selectPage(SmsTemplatePageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(SysSmsTemplateDO::getType, reqVO.getType()) .eqIfPresent(SysSmsTemplateDO::getStatus, reqVO.getStatus()) @@ -30,7 +30,7 @@ public interface SysSmsTemplateMapper extends BaseMapperX { .orderByDesc(SysSmsTemplateDO::getId)); } - default List selectList(SysSmsTemplateExportReqVO reqVO) { + default List selectList(SmsTemplateExportReqVO reqVO) { return selectList(new LambdaQueryWrapperX() .eqIfPresent(SysSmsTemplateDO::getType, reqVO.getType()) .eqIfPresent(SysSmsTemplateDO::getStatus, reqVO.getStatus()) diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tenant/SysTenantMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tenant/SysTenantMapper.java index dc7d27d21a..d92f660f94 100755 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tenant/SysTenantMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tenant/SysTenantMapper.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.dal.mysql.tenant; -import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantExportReqVO; -import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantPageReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.tenant.SysTenantDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; @@ -18,7 +18,7 @@ import java.util.List; @Mapper public interface SysTenantMapper extends BaseMapperX { - default PageResult selectPage(SysTenantPageReqVO reqVO) { + default PageResult selectPage(TenantPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .likeIfPresent(SysTenantDO::getName, reqVO.getName()) .likeIfPresent(SysTenantDO::getContactName, reqVO.getContactName()) @@ -28,7 +28,7 @@ public interface SysTenantMapper extends BaseMapperX { .orderByDesc(SysTenantDO::getId)); } - default List selectList(SysTenantExportReqVO reqVO) { + default List selectList(TenantExportReqVO reqVO) { return selectList(new LambdaQueryWrapperX() .likeIfPresent(SysTenantDO::getName, reqVO.getName()) .likeIfPresent(SysTenantDO::getContactName, reqVO.getContactName()) diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/SysUserMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/SysUserMapper.java index f954cd3cf6..1d7eb74bf2 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/SysUserMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/SysUserMapper.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.dal.mysql.user; -import cn.iocoder.yudao.module.system.controller.user.vo.user.SysUserExportReqVO; -import cn.iocoder.yudao.module.system.controller.user.vo.user.SysUserPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -30,7 +30,7 @@ public interface SysUserMapper extends BaseMapperX { return selectOne(new LambdaQueryWrapper().eq(SysUserDO::getMobile, mobile)); } - default PageResult selectPage(SysUserPageReqVO reqVO, Collection deptIds) { + default PageResult selectPage(UserPageReqVO reqVO, Collection deptIds) { return selectPage(reqVO, new LambdaQueryWrapperX() .likeIfPresent(SysUserDO::getUsername, reqVO.getUsername()) .likeIfPresent(SysUserDO::getMobile, reqVO.getMobile()) @@ -39,7 +39,7 @@ public interface SysUserMapper extends BaseMapperX { .inIfPresent(SysUserDO::getDeptId, deptIds)); } - default List selectList(SysUserExportReqVO reqVO, Collection deptIds) { + default List selectList(UserExportReqVO reqVO, Collection deptIds) { return selectList(new LambdaQueryWrapperX() .likeIfPresent(SysUserDO::getUsername, reqVO.getUsername()) .likeIfPresent(SysUserDO::getMobile, reqVO.getMobile()) diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/SysRedisKeyConstants.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/SysRedisKeyConstants.java index 33fa08e7e4..16baa4638f 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/SysRedisKeyConstants.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/SysRedisKeyConstants.java @@ -14,6 +14,5 @@ public interface SysRedisKeyConstants { RedisKeyDefine CAPTCHA_CODE = new RedisKeyDefine("验è¯ç çš„缓存", "captcha_code:%s", // 傿•°ä¸º uuid STRING, String.class, RedisKeyDefine.TimeoutTypeEnum.DYNAMIC); - - + } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/common/SysCaptchaRedisDAO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/common/CaptchaRedisDAO.java similarity index 96% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/common/SysCaptchaRedisDAO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/common/CaptchaRedisDAO.java index 9a26095616..1c83a7c5c5 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/common/SysCaptchaRedisDAO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/common/CaptchaRedisDAO.java @@ -14,7 +14,7 @@ import static cn.iocoder.yudao.module.system.dal.redis.SysRedisKeyConstants.CAPT * @author èŠ‹é“æºç  */ @Repository -public class SysCaptchaRedisDAO { +public class CaptchaRedisDAO { @Resource private StringRedisTemplate stringRedisTemplate; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/SysErrorCodeConstants.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java similarity index 99% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/SysErrorCodeConstants.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java index 566f835d58..15b6803a21 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/SysErrorCodeConstants.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java @@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode; * * system 系统,使用 1-002-000-000 段 */ -public interface SysErrorCodeConstants { +public interface ErrorCodeConstants { // ========== AUTH æ¨¡å— 1002000000 ========== ErrorCode AUTH_LOGIN_BAD_CREDENTIALS = new ErrorCode(1002000000, "登录失败,账å·å¯†ç ä¸æ­£ç¡®"); diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/errorcode/SysErrorCodeTypeEnum.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/errorcode/ErrorCodeTypeEnum.java similarity index 84% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/errorcode/SysErrorCodeTypeEnum.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/errorcode/ErrorCodeTypeEnum.java index beb2e2b3ef..97349e763c 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/errorcode/SysErrorCodeTypeEnum.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/errorcode/ErrorCodeTypeEnum.java @@ -13,7 +13,7 @@ import java.util.Arrays; */ @AllArgsConstructor @Getter -public enum SysErrorCodeTypeEnum implements IntArrayValuable { +public enum ErrorCodeTypeEnum implements IntArrayValuable { /** * è‡ªåŠ¨ç”Ÿæˆ @@ -24,7 +24,7 @@ public enum SysErrorCodeTypeEnum implements IntArrayValuable { */ MANUAL_OPERATION(2); - public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(SysErrorCodeTypeEnum::getType).toArray(); + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(ErrorCodeTypeEnum::getType).toArray(); /** * 类型 diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/SysLoginLogTypeEnum.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/LoginLogTypeEnum.java similarity index 94% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/SysLoginLogTypeEnum.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/LoginLogTypeEnum.java index ff29ab558f..2f845fd105 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/SysLoginLogTypeEnum.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/LoginLogTypeEnum.java @@ -8,7 +8,7 @@ import lombok.Getter; */ @Getter @AllArgsConstructor -public enum SysLoginLogTypeEnum { +public enum LoginLogTypeEnum { LOGIN_USERNAME(100), // 使用账å·ç™»å½• LOGIN_SOCIAL(101), // 使用社交登录 diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/SysLoginResultEnum.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/LoginResultEnum.java similarity index 94% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/SysLoginResultEnum.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/LoginResultEnum.java index f1c8356ff4..7084e13da1 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/SysLoginResultEnum.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/LoginResultEnum.java @@ -8,7 +8,7 @@ import lombok.Getter; */ @Getter @AllArgsConstructor -public enum SysLoginResultEnum { +public enum LoginResultEnum { SUCCESS(0), // æˆåŠŸ BAD_CREDENTIALS(10), // è´¦å·æˆ–密ç ä¸æ­£ç¡® diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/notice/SysNoticeTypeEnum.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/notice/NoticeTypeEnum.java similarity index 90% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/notice/SysNoticeTypeEnum.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/notice/NoticeTypeEnum.java index c543f1cb5d..9a2a3c4626 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/notice/SysNoticeTypeEnum.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/notice/NoticeTypeEnum.java @@ -10,7 +10,7 @@ import lombok.Getter; */ @Getter @AllArgsConstructor -public enum SysNoticeTypeEnum { +public enum NoticeTypeEnum { NOTICE(1), ANNOUNCEMENT(2); diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/permission/SysRoleTypeEnum.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/permission/RoleTypeEnum.java similarity index 90% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/permission/SysRoleTypeEnum.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/permission/RoleTypeEnum.java index 426c5cdb5f..1607b20b34 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/permission/SysRoleTypeEnum.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/permission/RoleTypeEnum.java @@ -5,7 +5,7 @@ import lombok.Getter; @Getter @AllArgsConstructor -public enum SysRoleTypeEnum { +public enum RoleTypeEnum { /** * 内置角色 diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/config/SysDataPermissionConfiguration.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/config/DataPermissionConfiguration.java similarity index 90% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/config/SysDataPermissionConfiguration.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/config/DataPermissionConfiguration.java index 0b0402956f..cd67fdc828 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/config/SysDataPermissionConfiguration.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/config/DataPermissionConfiguration.java @@ -11,8 +11,8 @@ import org.springframework.context.annotation.Configuration; * * @author èŠ‹é“æºç  */ -@Configuration -public class SysDataPermissionConfiguration { +@Configuration(proxyBeanMethods = false) +public class DataPermissionConfiguration { @Bean public DeptDataPermissionRuleCustomizer sysDeptDataPermissionRuleCustomizer() { diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/config/ErrorCodeConfiguration.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/config/ErrorCodeConfiguration.java index e86d40b4e6..4c72ccec73 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/config/ErrorCodeConfiguration.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/errorcode/config/ErrorCodeConfiguration.java @@ -11,6 +11,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; +// TODO 芋艿:貌似放的ä½ç½®æœ‰é—®é¢˜ /** * 错误ç é…置类 */ diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/job/auth/SysUserSessionTimeoutJob.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/job/auth/UserSessionTimeoutJob.java similarity index 78% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/job/auth/SysUserSessionTimeoutJob.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/job/auth/UserSessionTimeoutJob.java index c8c719f188..d1a061d3e4 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/job/auth/SysUserSessionTimeoutJob.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/job/auth/UserSessionTimeoutJob.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.job.auth; import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler; -import cn.iocoder.yudao.module.system.service.auth.SysUserSessionService; +import cn.iocoder.yudao.module.system.service.auth.UserSessionService; import cn.iocoder.yudao.framework.tenant.core.job.TenantJob; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -16,10 +16,10 @@ import javax.annotation.Resource; @Component @TenantJob @Slf4j -public class SysUserSessionTimeoutJob implements JobHandler { +public class UserSessionTimeoutJob implements JobHandler { @Resource - private SysUserSessionService sysUserSessionService; + private UserSessionService sysUserSessionService; @Override public String execute(String param) throws Exception { diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/dept/SysDeptRefreshConsumer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/dept/DeptRefreshConsumer.java similarity index 53% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/dept/SysDeptRefreshConsumer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/dept/DeptRefreshConsumer.java index dd9bd64200..981244d909 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/dept/SysDeptRefreshConsumer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/dept/DeptRefreshConsumer.java @@ -1,27 +1,27 @@ package cn.iocoder.yudao.module.system.mq.consumer.dept; import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener; -import cn.iocoder.yudao.module.system.mq.message.dept.SysDeptRefreshMessage; -import cn.iocoder.yudao.module.system.service.dept.SysDeptService; +import cn.iocoder.yudao.module.system.mq.message.dept.DeptRefreshMessage; +import cn.iocoder.yudao.module.system.service.dept.DeptService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.annotation.Resource; /** - * 针对 {@link SysDeptRefreshMessage} 的消费者 + * 针对 {@link DeptRefreshMessage} 的消费者 * * @author èŠ‹é“æºç  */ @Component @Slf4j -public class SysDeptRefreshConsumer extends AbstractChannelMessageListener { +public class DeptRefreshConsumer extends AbstractChannelMessageListener { @Resource - private SysDeptService deptService; + private DeptService deptService; @Override - public void onMessage(SysDeptRefreshMessage message) { + public void onMessage(DeptRefreshMessage message) { log.info("[onMessage][收到 Dept 刷新消æ¯]"); deptService.initLocalCache(); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/dict/SysDictDataRefreshConsumer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/dict/DictDataRefreshConsumer.java similarity index 66% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/dict/SysDictDataRefreshConsumer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/dict/DictDataRefreshConsumer.java index ad14b7bfd8..6fe1c7c6a7 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/dict/SysDictDataRefreshConsumer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/dict/DictDataRefreshConsumer.java @@ -2,26 +2,26 @@ package cn.iocoder.yudao.module.system.mq.consumer.dict; import cn.iocoder.yudao.coreservice.modules.system.service.dict.SysDictDataCoreService; import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener; -import cn.iocoder.yudao.module.system.mq.message.dict.SysDictDataRefreshMessage; +import cn.iocoder.yudao.module.system.mq.message.dict.DictDataRefreshMessage; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.annotation.Resource; /** - * 针对 {@link SysDictDataRefreshMessage} 的消费者 + * 针对 {@link DictDataRefreshMessage} 的消费者 * * @author èŠ‹é“æºç  */ @Component @Slf4j -public class SysDictDataRefreshConsumer extends AbstractChannelMessageListener { +public class DictDataRefreshConsumer extends AbstractChannelMessageListener { @Resource private SysDictDataCoreService dictDataCoreService; @Override - public void onMessage(SysDictDataRefreshMessage message) { + public void onMessage(DictDataRefreshMessage message) { log.info("[onMessage][收到 DictData 刷新消æ¯]"); dictDataCoreService.initLocalCache(); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/mail/SysMailSendConsumer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/mail/MailSendConsumer.java similarity index 56% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/mail/SysMailSendConsumer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/mail/MailSendConsumer.java index 10b12ce0df..4b02f760ea 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/mail/SysMailSendConsumer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/mail/MailSendConsumer.java @@ -1,16 +1,17 @@ package cn.iocoder.yudao.module.system.mq.consumer.mail; import cn.iocoder.yudao.framework.mq.core.stream.AbstractStreamMessageListener; -import cn.iocoder.yudao.module.system.mq.message.mail.SysMailSendMessage; +import cn.iocoder.yudao.module.system.mq.message.mail.MailSendMessage; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; +// TODO 芋艿:这个暂未实现 @Component @Slf4j -public class SysMailSendConsumer extends AbstractStreamMessageListener { +public class MailSendConsumer extends AbstractStreamMessageListener { @Override - public void onMessage(SysMailSendMessage message) { + public void onMessage(MailSendMessage message) { log.info("[onMessage][消æ¯å†…容({})]", message); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/SysMenuRefreshConsumer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/MenuRefreshConsumer.java similarity index 52% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/SysMenuRefreshConsumer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/MenuRefreshConsumer.java index 4630fef841..a4b6335124 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/SysMenuRefreshConsumer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/MenuRefreshConsumer.java @@ -1,27 +1,27 @@ package cn.iocoder.yudao.module.system.mq.consumer.permission; import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener; -import cn.iocoder.yudao.module.system.mq.message.permission.SysMenuRefreshMessage; -import cn.iocoder.yudao.module.system.service.permission.SysMenuService; +import cn.iocoder.yudao.module.system.mq.message.permission.MenuRefreshMessage; +import cn.iocoder.yudao.module.system.service.permission.MenuService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.annotation.Resource; /** - * 针对 {@link SysMenuRefreshMessage} 的消费者 + * 针对 {@link MenuRefreshMessage} 的消费者 * * @author èŠ‹é“æºç  */ @Component @Slf4j -public class SysMenuRefreshConsumer extends AbstractChannelMessageListener { +public class MenuRefreshConsumer extends AbstractChannelMessageListener { @Resource - private SysMenuService menuService; + private MenuService menuService; @Override - public void onMessage(SysMenuRefreshMessage message) { + public void onMessage(MenuRefreshMessage message) { log.info("[onMessage][收到 Menu 刷新消æ¯]"); menuService.initLocalCache(); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/SysRoleMenuRefreshConsumer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/RoleMenuRefreshConsumer.java similarity index 51% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/SysRoleMenuRefreshConsumer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/RoleMenuRefreshConsumer.java index 961ee83ee0..d9f0e92208 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/SysRoleMenuRefreshConsumer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/RoleMenuRefreshConsumer.java @@ -1,27 +1,27 @@ package cn.iocoder.yudao.module.system.mq.consumer.permission; import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener; -import cn.iocoder.yudao.module.system.mq.message.permission.SysRoleMenuRefreshMessage; -import cn.iocoder.yudao.module.system.service.permission.SysPermissionService; +import cn.iocoder.yudao.module.system.mq.message.permission.RoleMenuRefreshMessage; +import cn.iocoder.yudao.module.system.service.permission.PermissionService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.annotation.Resource; /** - * 针对 {@link SysRoleMenuRefreshMessage} 的消费者 + * 针对 {@link RoleMenuRefreshMessage} 的消费者 * * @author èŠ‹é“æºç  */ @Component @Slf4j -public class SysRoleMenuRefreshConsumer extends AbstractChannelMessageListener { +public class RoleMenuRefreshConsumer extends AbstractChannelMessageListener { @Resource - private SysPermissionService permissionService; + private PermissionService permissionService; @Override - public void onMessage(SysRoleMenuRefreshMessage message) { + public void onMessage(RoleMenuRefreshMessage message) { log.info("[onMessage][收到 Role 与 Menu 的关è”刷新消æ¯]"); permissionService.initLocalCache(); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/SysRoleRefreshConsumer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/RoleRefreshConsumer.java similarity index 52% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/SysRoleRefreshConsumer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/RoleRefreshConsumer.java index 2ed56fe1d8..bb53b7499a 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/SysRoleRefreshConsumer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/permission/RoleRefreshConsumer.java @@ -1,27 +1,27 @@ package cn.iocoder.yudao.module.system.mq.consumer.permission; import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener; -import cn.iocoder.yudao.module.system.mq.message.permission.SysRoleRefreshMessage; -import cn.iocoder.yudao.module.system.service.permission.SysRoleService; +import cn.iocoder.yudao.module.system.mq.message.permission.RoleRefreshMessage; +import cn.iocoder.yudao.module.system.service.permission.RoleService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.annotation.Resource; /** - * 针对 {@link SysRoleRefreshMessage} 的消费者 + * 针对 {@link RoleRefreshMessage} 的消费者 * * @author èŠ‹é“æºç  */ @Component @Slf4j -public class SysRoleRefreshConsumer extends AbstractChannelMessageListener { +public class RoleRefreshConsumer extends AbstractChannelMessageListener { @Resource - private SysRoleService roleService; + private RoleService roleService; @Override - public void onMessage(SysRoleRefreshMessage message) { + public void onMessage(RoleRefreshMessage message) { log.info("[onMessage][收到 Role 刷新消æ¯]"); roleService.initLocalCache(); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SysSmsChannelRefreshConsumer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsChannelRefreshConsumer.java similarity index 50% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SysSmsChannelRefreshConsumer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsChannelRefreshConsumer.java index 11cbed107e..cc5d83d1eb 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SysSmsChannelRefreshConsumer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsChannelRefreshConsumer.java @@ -1,27 +1,27 @@ package cn.iocoder.yudao.module.system.mq.consumer.sms; import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener; -import cn.iocoder.yudao.module.system.mq.message.sms.SysSmsChannelRefreshMessage; -import cn.iocoder.yudao.module.system.service.sms.SysSmsChannelService; +import cn.iocoder.yudao.module.system.mq.message.sms.SmsChannelRefreshMessage; +import cn.iocoder.yudao.module.system.service.sms.SmsChannelService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.annotation.Resource; /** - * 针对 {@link SysSmsChannelRefreshMessage} 的消费者 + * 针对 {@link SmsChannelRefreshMessage} 的消费者 * * @author èŠ‹é“æºç  */ @Component @Slf4j -public class SysSmsChannelRefreshConsumer extends AbstractChannelMessageListener { +public class SmsChannelRefreshConsumer extends AbstractChannelMessageListener { @Resource - private SysSmsChannelService smsChannelService; + private SmsChannelService smsChannelService; @Override - public void onMessage(SysSmsChannelRefreshMessage message) { + public void onMessage(SmsChannelRefreshMessage message) { log.info("[onMessage][收到 SmsChannel 刷新消æ¯]"); smsChannelService.initSmsClients(); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SysSmsSendConsumer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsSendConsumer.java similarity index 89% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SysSmsSendConsumer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsSendConsumer.java index feeeeefea4..2239eecc18 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SysSmsSendConsumer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsSendConsumer.java @@ -16,7 +16,7 @@ import javax.annotation.Resource; */ @Component @Slf4j -public class SysSmsSendConsumer extends AbstractStreamMessageListener { +public class SmsSendConsumer extends AbstractStreamMessageListener { @Resource private SysSmsCoreService smsCoreService; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SysSmsTemplateRefreshConsumer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsTemplateRefreshConsumer.java similarity index 65% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SysSmsTemplateRefreshConsumer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsTemplateRefreshConsumer.java index 36e2b4db44..52840189a8 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SysSmsTemplateRefreshConsumer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsTemplateRefreshConsumer.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.mq.consumer.sms; -import cn.iocoder.yudao.module.system.mq.message.sms.SysSmsTemplateRefreshMessage; +import cn.iocoder.yudao.module.system.mq.message.sms.SmsTemplateRefreshMessage; import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsTemplateCoreService; import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener; import lombok.extern.slf4j.Slf4j; @@ -9,19 +9,19 @@ import org.springframework.stereotype.Component; import javax.annotation.Resource; /** - * 针对 {@link SysSmsTemplateRefreshMessage} 的消费者 + * 针对 {@link SmsTemplateRefreshMessage} 的消费者 * * @author èŠ‹é“æºç  */ @Component @Slf4j -public class SysSmsTemplateRefreshConsumer extends AbstractChannelMessageListener { +public class SmsTemplateRefreshConsumer extends AbstractChannelMessageListener { @Resource private SysSmsTemplateCoreService smsTemplateCoreService; @Override - public void onMessage(SysSmsTemplateRefreshMessage message) { + public void onMessage(SmsTemplateRefreshMessage message) { log.info("[onMessage][收到 SmsTemplate 刷新消æ¯]"); smsTemplateCoreService.initLocalCache(); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/dept/SysDeptRefreshMessage.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/dept/DeptRefreshMessage.java similarity index 85% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/dept/SysDeptRefreshMessage.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/dept/DeptRefreshMessage.java index 4403a28dc5..80d3c8c39f 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/dept/SysDeptRefreshMessage.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/dept/DeptRefreshMessage.java @@ -11,7 +11,7 @@ import lombok.EqualsAndHashCode; */ @Data @EqualsAndHashCode(callSuper = true) -public class SysDeptRefreshMessage extends AbstractChannelMessage { +public class DeptRefreshMessage extends AbstractChannelMessage { @Override public String getChannel() { diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/dict/SysDictDataRefreshMessage.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/dict/DictDataRefreshMessage.java similarity index 83% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/dict/SysDictDataRefreshMessage.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/dict/DictDataRefreshMessage.java index 7d919dd1fe..01e5b86056 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/dict/SysDictDataRefreshMessage.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/dict/DictDataRefreshMessage.java @@ -9,7 +9,7 @@ import lombok.EqualsAndHashCode; */ @Data @EqualsAndHashCode(callSuper = true) -public class SysDictDataRefreshMessage extends AbstractChannelMessage { +public class DictDataRefreshMessage extends AbstractChannelMessage { @Override public String getChannel() { diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/mail/SysMailSendMessage.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/mail/MailSendMessage.java similarity index 93% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/mail/SysMailSendMessage.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/mail/MailSendMessage.java index e511b32ad9..aee02c76e9 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/mail/SysMailSendMessage.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/mail/MailSendMessage.java @@ -14,7 +14,7 @@ import java.util.Map; */ @Data @EqualsAndHashCode(callSuper = true) -public class SysMailSendMessage extends AbstractStreamMessage { +public class MailSendMessage extends AbstractStreamMessage { /** * é‚®ç®±åœ°å€ diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/SysMenuRefreshMessage.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/MenuRefreshMessage.java similarity index 85% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/SysMenuRefreshMessage.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/MenuRefreshMessage.java index d829f706a1..abd75dbaaf 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/SysMenuRefreshMessage.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/MenuRefreshMessage.java @@ -11,7 +11,7 @@ import lombok.EqualsAndHashCode; */ @Data @EqualsAndHashCode(callSuper = true) -public class SysMenuRefreshMessage extends AbstractChannelMessage { +public class MenuRefreshMessage extends AbstractChannelMessage { @Override public String getChannel() { diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/SysRoleMenuRefreshMessage.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/RoleMenuRefreshMessage.java similarity index 84% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/SysRoleMenuRefreshMessage.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/RoleMenuRefreshMessage.java index 1cfd0e814b..0982775bc6 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/SysRoleMenuRefreshMessage.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/RoleMenuRefreshMessage.java @@ -11,7 +11,7 @@ import lombok.EqualsAndHashCode; */ @Data @EqualsAndHashCode(callSuper = true) -public class SysRoleMenuRefreshMessage extends AbstractChannelMessage { +public class RoleMenuRefreshMessage extends AbstractChannelMessage { @Override public String getChannel() { diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/SysRoleRefreshMessage.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/RoleRefreshMessage.java similarity index 85% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/SysRoleRefreshMessage.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/RoleRefreshMessage.java index 9ad25c627a..e80d8f30c3 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/SysRoleRefreshMessage.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/permission/RoleRefreshMessage.java @@ -11,7 +11,7 @@ import lombok.EqualsAndHashCode; */ @Data @EqualsAndHashCode(callSuper = true) -public class SysRoleRefreshMessage extends AbstractChannelMessage { +public class RoleRefreshMessage extends AbstractChannelMessage { @Override public String getChannel() { diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/sms/SysSmsChannelRefreshMessage.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/sms/SmsChannelRefreshMessage.java similarity index 84% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/sms/SysSmsChannelRefreshMessage.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/sms/SmsChannelRefreshMessage.java index 296df410b8..0841cdee0d 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/sms/SysSmsChannelRefreshMessage.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/sms/SmsChannelRefreshMessage.java @@ -11,7 +11,7 @@ import lombok.EqualsAndHashCode; */ @Data @EqualsAndHashCode(callSuper = true) -public class SysSmsChannelRefreshMessage extends AbstractChannelMessage { +public class SmsChannelRefreshMessage extends AbstractChannelMessage { @Override public String getChannel() { diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/sms/SysSmsTemplateRefreshMessage.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/sms/SmsTemplateRefreshMessage.java similarity index 84% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/sms/SysSmsTemplateRefreshMessage.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/sms/SmsTemplateRefreshMessage.java index 955af3ed87..4873c06c4a 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/sms/SysSmsTemplateRefreshMessage.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/sms/SmsTemplateRefreshMessage.java @@ -11,7 +11,7 @@ import lombok.EqualsAndHashCode; */ @Data @EqualsAndHashCode(callSuper = true) -public class SysSmsTemplateRefreshMessage extends AbstractChannelMessage { +public class SmsTemplateRefreshMessage extends AbstractChannelMessage { @Override public String getChannel() { diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/dept/SysDeptProducer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/dept/DeptProducer.java similarity index 65% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/dept/SysDeptProducer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/dept/DeptProducer.java index b4f9dace2f..9a2ca1b9c5 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/dept/SysDeptProducer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/dept/DeptProducer.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.mq.producer.dept; -import cn.iocoder.yudao.module.system.mq.message.dept.SysDeptRefreshMessage; +import cn.iocoder.yudao.module.system.mq.message.dept.DeptRefreshMessage; import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate; import org.springframework.stereotype.Component; @@ -10,16 +10,16 @@ import javax.annotation.Resource; * Dept 部门相关消æ¯çš„ Producer */ @Component -public class SysDeptProducer { +public class DeptProducer { @Resource private RedisMQTemplate redisMQTemplate; /** - * å‘é€ {@link SysDeptRefreshMessage} æ¶ˆæ¯ + * å‘é€ {@link DeptRefreshMessage} æ¶ˆæ¯ */ public void sendDeptRefreshMessage() { - SysDeptRefreshMessage message = new SysDeptRefreshMessage(); + DeptRefreshMessage message = new DeptRefreshMessage(); redisMQTemplate.send(message); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/dict/SysDictDataProducer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/dict/DictDataProducer.java similarity index 64% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/dict/SysDictDataProducer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/dict/DictDataProducer.java index 165de3372b..fa90c8c424 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/dict/SysDictDataProducer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/dict/DictDataProducer.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.mq.producer.dict; -import cn.iocoder.yudao.module.system.mq.message.dict.SysDictDataRefreshMessage; +import cn.iocoder.yudao.module.system.mq.message.dict.DictDataRefreshMessage; import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate; import org.springframework.stereotype.Component; @@ -10,16 +10,16 @@ import javax.annotation.Resource; * DictData 字典数æ®ç›¸å…³æ¶ˆæ¯çš„ Producer */ @Component -public class SysDictDataProducer { +public class DictDataProducer { @Resource private RedisMQTemplate redisMQTemplate; /** - * å‘é€ {@link SysDictDataRefreshMessage} æ¶ˆæ¯ + * å‘é€ {@link DictDataRefreshMessage} æ¶ˆæ¯ */ public void sendDictDataRefreshMessage() { - SysDictDataRefreshMessage message = new SysDictDataRefreshMessage(); + DictDataRefreshMessage message = new DictDataRefreshMessage(); redisMQTemplate.send(message); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/SysMenuProducer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/MenuProducer.java similarity index 64% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/SysMenuProducer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/MenuProducer.java index d035824f25..5764c872af 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/SysMenuProducer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/MenuProducer.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.mq.producer.permission; -import cn.iocoder.yudao.module.system.mq.message.permission.SysMenuRefreshMessage; +import cn.iocoder.yudao.module.system.mq.message.permission.MenuRefreshMessage; import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate; import org.springframework.stereotype.Component; @@ -10,16 +10,16 @@ import javax.annotation.Resource; * Menu èœå•相关消æ¯çš„ Producer */ @Component -public class SysMenuProducer { +public class MenuProducer { @Resource private RedisMQTemplate redisMQTemplate; /** - * å‘é€ {@link SysMenuRefreshMessage} æ¶ˆæ¯ + * å‘é€ {@link MenuRefreshMessage} æ¶ˆæ¯ */ public void sendMenuRefreshMessage() { - SysMenuRefreshMessage message = new SysMenuRefreshMessage(); + MenuRefreshMessage message = new MenuRefreshMessage(); redisMQTemplate.send(message); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/SysPermissionProducer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/PermissionProducer.java similarity index 63% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/SysPermissionProducer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/PermissionProducer.java index ca5141d846..56c8e31790 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/SysPermissionProducer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/PermissionProducer.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.mq.producer.permission; -import cn.iocoder.yudao.module.system.mq.message.permission.SysRoleMenuRefreshMessage; +import cn.iocoder.yudao.module.system.mq.message.permission.RoleMenuRefreshMessage; import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate; import org.springframework.stereotype.Component; @@ -10,16 +10,16 @@ import javax.annotation.Resource; * Permission æƒé™ç›¸å…³æ¶ˆæ¯çš„ Producer */ @Component -public class SysPermissionProducer { +public class PermissionProducer { @Resource private RedisMQTemplate redisMQTemplate; /** - * å‘é€ {@link SysRoleMenuRefreshMessage} æ¶ˆæ¯ + * å‘é€ {@link RoleMenuRefreshMessage} æ¶ˆæ¯ */ public void sendRoleMenuRefreshMessage() { - SysRoleMenuRefreshMessage message = new SysRoleMenuRefreshMessage(); + RoleMenuRefreshMessage message = new RoleMenuRefreshMessage(); redisMQTemplate.send(message); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/SysRoleProducer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/RoleProducer.java similarity index 66% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/SysRoleProducer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/RoleProducer.java index 1fb1be9f6f..c249d964e8 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/SysRoleProducer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/permission/RoleProducer.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.mq.producer.permission; -import cn.iocoder.yudao.module.system.mq.message.permission.SysRoleRefreshMessage; +import cn.iocoder.yudao.module.system.mq.message.permission.RoleRefreshMessage; import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate; import org.springframework.stereotype.Component; @@ -12,16 +12,16 @@ import javax.annotation.Resource; * @author èŠ‹é“æºç  */ @Component -public class SysRoleProducer { +public class RoleProducer { @Resource private RedisMQTemplate redisMQTemplate; /** - * å‘é€ {@link SysRoleRefreshMessage} æ¶ˆæ¯ + * å‘é€ {@link RoleRefreshMessage} æ¶ˆæ¯ */ public void sendRoleRefreshMessage() { - SysRoleRefreshMessage message = new SysRoleRefreshMessage(); + RoleRefreshMessage message = new RoleRefreshMessage(); redisMQTemplate.send(message); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/sms/SysSmsProducer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/sms/SmsProducer.java similarity index 56% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/sms/SysSmsProducer.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/sms/SmsProducer.java index abd343a483..117e666b9e 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/sms/SysSmsProducer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/sms/SmsProducer.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.mq.producer.sms; -import cn.iocoder.yudao.module.system.mq.message.sms.SysSmsChannelRefreshMessage; -import cn.iocoder.yudao.module.system.mq.message.sms.SysSmsTemplateRefreshMessage; +import cn.iocoder.yudao.module.system.mq.message.sms.SmsChannelRefreshMessage; +import cn.iocoder.yudao.module.system.mq.message.sms.SmsTemplateRefreshMessage; import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -16,24 +16,24 @@ import javax.annotation.Resource; */ @Slf4j @Component -public class SysSmsProducer { +public class SmsProducer { @Resource private RedisMQTemplate redisMQTemplate; /** - * å‘é€ {@link SysSmsChannelRefreshMessage} æ¶ˆæ¯ + * å‘é€ {@link SmsChannelRefreshMessage} æ¶ˆæ¯ */ public void sendSmsChannelRefreshMessage() { - SysSmsChannelRefreshMessage message = new SysSmsChannelRefreshMessage(); + SmsChannelRefreshMessage message = new SmsChannelRefreshMessage(); redisMQTemplate.send(message); } /** - * å‘é€ {@link SysSmsTemplateRefreshMessage} æ¶ˆæ¯ + * å‘é€ {@link SmsTemplateRefreshMessage} æ¶ˆæ¯ */ public void sendSmsTemplateRefreshMessage() { - SysSmsTemplateRefreshMessage message = new SysSmsTemplateRefreshMessage(); + SmsTemplateRefreshMessage message = new SmsTemplateRefreshMessage(); redisMQTemplate.send(message); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/SysAuthService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AuthService.java similarity index 69% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/SysAuthService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AuthService.java index b111147d91..1a2a8240cf 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/SysAuthService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AuthService.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.service.auth; -import cn.iocoder.yudao.module.system.controller.auth.vo.auth.*; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.*; import cn.iocoder.yudao.framework.security.core.service.SecurityAuthFrameworkService; import javax.validation.Valid; @@ -12,7 +12,7 @@ import javax.validation.Valid; * * @author èŠ‹é“æºç  */ -public interface SysAuthService extends SecurityAuthFrameworkService { +public interface AuthService extends SecurityAuthFrameworkService { /** * è´¦å·ç™»å½• @@ -22,7 +22,7 @@ public interface SysAuthService extends SecurityAuthFrameworkService { * @param userAgent 用户 UA * @return 身份令牌,使用 JWT æ–¹å¼ */ - String login(@Valid SysAuthLoginReqVO reqVO, String userIp, String userAgent); + String login(@Valid AuthLoginReqVO reqVO, String userIp, String userAgent); /** * 社交登录,使用 code 授æƒç  @@ -32,7 +32,7 @@ public interface SysAuthService extends SecurityAuthFrameworkService { * @param userAgent 用户 UA * @return 身份令牌,使用 JWT æ–¹å¼ */ - String socialLogin(@Valid SysAuthSocialLoginReqVO reqVO, String userIp, String userAgent); + String socialLogin(@Valid AuthSocialLoginReqVO reqVO, String userIp, String userAgent); /** * 社交登录,使用 code 授æƒç  + è´¦å·å¯†ç  @@ -42,7 +42,7 @@ public interface SysAuthService extends SecurityAuthFrameworkService { * @param userAgent 用户 UA * @return 身份令牌,使用 JWT æ–¹å¼ */ - String socialLogin2(@Valid SysAuthSocialLogin2ReqVO reqVO, String userIp, String userAgent); + String socialLogin2(@Valid AuthSocialLogin2ReqVO reqVO, String userIp, String userAgent); /** * 社交绑定,使用 code 授æƒç  @@ -50,6 +50,6 @@ public interface SysAuthService extends SecurityAuthFrameworkService { * @param userId ç”¨æˆ·ç¼–å· * @param reqVO ç»‘å®šä¿¡æ¯ */ - void socialBind(Long userId, @Valid SysAuthSocialBindReqVO reqVO); + void socialBind(Long userId, @Valid AuthSocialBindReqVO reqVO); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/SysAuthServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AuthServiceImpl.java similarity index 80% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/SysAuthServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AuthServiceImpl.java index bd7fdf2d9d..a0a45e7d71 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/SysAuthServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AuthServiceImpl.java @@ -1,19 +1,18 @@ package cn.iocoder.yudao.module.system.service.auth; import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.module.system.controller.auth.vo.auth.SysAuthLoginReqVO; -import cn.iocoder.yudao.module.system.controller.auth.vo.auth.SysAuthSocialBindReqVO; -import cn.iocoder.yudao.module.system.controller.auth.vo.auth.SysAuthSocialLogin2ReqVO; -import cn.iocoder.yudao.module.system.controller.auth.vo.auth.SysAuthSocialLoginReqVO; -import cn.iocoder.yudao.module.system.convert.auth.SysAuthConvert; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthLoginReqVO; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthSocialBindReqVO; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthSocialLogin2ReqVO; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthSocialLoginReqVO; +import cn.iocoder.yudao.module.system.convert.auth.AuthConvert; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; -import cn.iocoder.yudao.module.system.enums.logger.SysLoginLogTypeEnum; -import cn.iocoder.yudao.module.system.enums.logger.SysLoginResultEnum; -import cn.iocoder.yudao.module.system.service.auth.SysAuthService; -import cn.iocoder.yudao.module.system.service.common.SysCaptchaService; -import cn.iocoder.yudao.module.system.service.dept.SysPostService; -import cn.iocoder.yudao.module.system.service.permission.SysPermissionService; -import cn.iocoder.yudao.module.system.service.user.SysUserService; +import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum; +import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum; +import cn.iocoder.yudao.module.system.service.common.CaptchaService; +import cn.iocoder.yudao.module.system.service.dept.PostService; +import cn.iocoder.yudao.module.system.service.permission.PermissionService; +import cn.iocoder.yudao.module.system.service.user.UserService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.social.SysSocialUserDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService; @@ -46,7 +45,7 @@ import java.util.List; import java.util.Objects; import java.util.Set; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; import static java.util.Collections.singleton; @@ -56,28 +55,28 @@ import static java.util.Collections.singleton; * * @author èŠ‹é“æºç  */ -@Service +@Service("adminAuthService") @Slf4j -public class SysAuthServiceImpl implements SysAuthService { +public class AuthServiceImpl implements AuthService { @Resource @Lazy // 延迟加载,因为存在相互ä¾èµ–的问题 private AuthenticationManager authenticationManager; @Resource - private SysUserService userService; + private UserService userService; @Resource private SysUserCoreService userCoreService; @Resource - private SysPermissionService permissionService; + private PermissionService permissionService; @Resource - private SysCaptchaService captchaService; + private CaptchaService captchaService; @Resource private SysLoginLogCoreService loginLogCoreService; @Resource private SysUserSessionCoreService userSessionCoreService; @Resource - private SysPostService postService; + private PostService postService; @Resource private SysSocialCoreService socialService; @@ -99,14 +98,14 @@ public class SysAuthServiceImpl implements SysAuthService { if (user == null) { throw new UsernameNotFoundException(String.valueOf(userId)); } - this.createLoginLog(user.getUsername(), SysLoginLogTypeEnum.LOGIN_MOCK, SysLoginResultEnum.SUCCESS); + this.createLoginLog(user.getUsername(), LoginLogTypeEnum.LOGIN_MOCK, LoginResultEnum.SUCCESS); // 创建 LoginUser 对象 return this.buildLoginUser(user); } @Override - public String login(SysAuthLoginReqVO reqVO, String userIp, String userAgent) { + public String login(AuthLoginReqVO reqVO, String userIp, String userAgent) { // 判断验è¯ç æ˜¯å¦æ­£ç¡® this.verifyCaptcha(reqVO.getUsername(), reqVO.getUuid(), reqVO.getCode()); @@ -130,17 +129,17 @@ public class SysAuthServiceImpl implements SysAuthService { return; } // 验è¯ç ä¸å­˜åœ¨ - final SysLoginLogTypeEnum logTypeEnum = SysLoginLogTypeEnum.LOGIN_USERNAME; + final LoginLogTypeEnum logTypeEnum = LoginLogTypeEnum.LOGIN_USERNAME; String code = captchaService.getCaptchaCode(captchaUUID); if (code == null) { // 创建登录失败日志(验è¯ç ä¸å­˜åœ¨ï¼‰ - this.createLoginLog(username, logTypeEnum, SysLoginResultEnum.CAPTCHA_NOT_FOUND); + this.createLoginLog(username, logTypeEnum, LoginResultEnum.CAPTCHA_NOT_FOUND); throw exception(AUTH_LOGIN_CAPTCHA_NOT_FOUND); } // 验è¯ç ä¸æ­£ç¡® if (!code.equals(captchaCode)) { // 创建登录失败日志(验è¯ç ä¸æ­£ç¡®) - this.createLoginLog(username, logTypeEnum, SysLoginResultEnum.CAPTCHA_CODE_ERROR); + this.createLoginLog(username, logTypeEnum, LoginResultEnum.CAPTCHA_CODE_ERROR); throw exception(AUTH_LOGIN_CAPTCHA_CODE_ERROR); } // 正确,所以è¦åˆ é™¤ä¸‹éªŒè¯ç  @@ -148,7 +147,7 @@ public class SysAuthServiceImpl implements SysAuthService { } private LoginUser login0(String username, String password) { - final SysLoginLogTypeEnum logTypeEnum = SysLoginLogTypeEnum.LOGIN_USERNAME; + final LoginLogTypeEnum logTypeEnum = LoginLogTypeEnum.LOGIN_USERNAME; // ç”¨æˆ·éªŒè¯ Authentication authentication; try { @@ -158,23 +157,23 @@ public class SysAuthServiceImpl implements SysAuthService { username, password, getUserType())); // org.activiti.engine.impl.identity.Authentication.setAuthenticatedUserId(username); } catch (BadCredentialsException badCredentialsException) { - this.createLoginLog(username, logTypeEnum, SysLoginResultEnum.BAD_CREDENTIALS); + this.createLoginLog(username, logTypeEnum, LoginResultEnum.BAD_CREDENTIALS); throw exception(AUTH_LOGIN_BAD_CREDENTIALS); } catch (DisabledException disabledException) { - this.createLoginLog(username, logTypeEnum, SysLoginResultEnum.USER_DISABLED); + this.createLoginLog(username, logTypeEnum, LoginResultEnum.USER_DISABLED); throw exception(AUTH_LOGIN_USER_DISABLED); } catch (AuthenticationException authenticationException) { log.error("[login0][username({}) å‘生未知异常]", username, authenticationException); - this.createLoginLog(username, logTypeEnum, SysLoginResultEnum.UNKNOWN_ERROR); + this.createLoginLog(username, logTypeEnum, LoginResultEnum.UNKNOWN_ERROR); throw exception(AUTH_LOGIN_FAIL_UNKNOWN); } // 登录æˆåŠŸçš„æ—¥å¿— Assert.notNull(authentication.getPrincipal(), "Principal ä¸ä¼šä¸ºç©º"); - this.createLoginLog(username, logTypeEnum, SysLoginResultEnum.SUCCESS); + this.createLoginLog(username, logTypeEnum, LoginResultEnum.SUCCESS); return (LoginUser) authentication.getPrincipal(); } - private void createLoginLog(String username, SysLoginLogTypeEnum logTypeEnum, SysLoginResultEnum loginResult) { + private void createLoginLog(String username, LoginLogTypeEnum logTypeEnum, LoginResultEnum loginResult) { // 获得用户 SysUserDO user = userService.getUserByUsername(username); // æ’入登录日志 @@ -191,7 +190,7 @@ public class SysAuthServiceImpl implements SysAuthService { reqDTO.setResult(loginResult.getResult()); loginLogCoreService.createLoginLog(reqDTO); // 更新最åŽç™»å½•æ—¶é—´ - if (user != null && Objects.equals(SysLoginResultEnum.SUCCESS.getResult(), loginResult.getResult())) { + if (user != null && Objects.equals(LoginResultEnum.SUCCESS.getResult(), loginResult.getResult())) { userService.updateUserLogin(user.getId(), ServletUtils.getClientIP()); } } @@ -207,7 +206,7 @@ public class SysAuthServiceImpl implements SysAuthService { } @Override - public String socialLogin(SysAuthSocialLoginReqVO reqVO, String userIp, String userAgent) { + public String socialLogin(AuthSocialLoginReqVO reqVO, String userIp, String userAgent) { // 使用 code 授æƒç ï¼Œè¿›è¡Œç™»å½• AuthUser authUser = socialService.getAuthUser(reqVO.getType(), reqVO.getCode(), reqVO.getState()); Assert.notNull(authUser, "授æƒç”¨æˆ·ä¸ä¸ºç©º"); @@ -224,7 +223,7 @@ public class SysAuthServiceImpl implements SysAuthService { if (user == null) { throw exception(USER_NOT_EXISTS); } - this.createLoginLog(user.getUsername(), SysLoginLogTypeEnum.LOGIN_SOCIAL, SysLoginResultEnum.SUCCESS); + this.createLoginLog(user.getUsername(), LoginLogTypeEnum.LOGIN_SOCIAL, LoginResultEnum.SUCCESS); // 创建 LoginUser 对象 LoginUser loginUser = this.buildLoginUser(user); @@ -237,7 +236,7 @@ public class SysAuthServiceImpl implements SysAuthService { } @Override - public String socialLogin2(SysAuthSocialLogin2ReqVO reqVO, String userIp, String userAgent) { + public String socialLogin2(AuthSocialLogin2ReqVO reqVO, String userIp, String userAgent) { // 使用 code 授æƒç ï¼Œè¿›è¡Œç™»å½• AuthUser authUser = socialService.getAuthUser(reqVO.getType(), reqVO.getCode(), reqVO.getState()); Assert.notNull(authUser, "授æƒç”¨æˆ·ä¸ä¸ºç©º"); @@ -253,7 +252,7 @@ public class SysAuthServiceImpl implements SysAuthService { } @Override - public void socialBind(Long userId, SysAuthSocialBindReqVO reqVO) { + public void socialBind(Long userId, AuthSocialBindReqVO reqVO) { // 使用 code 授æƒç ï¼Œè¿›è¡Œç™»å½• AuthUser authUser = socialService.getAuthUser(reqVO.getType(), reqVO.getCode(), reqVO.getState()); Assert.notNull(authUser, "授æƒç”¨æˆ·ä¸ä¸ºç©º"); @@ -282,14 +281,14 @@ public class SysAuthServiceImpl implements SysAuthService { private void createLogoutLog(Long userId, String username) { SysLoginLogCreateReqDTO reqDTO = new SysLoginLogCreateReqDTO(); - reqDTO.setLogType(SysLoginLogTypeEnum.LOGOUT_SELF.getType()); + reqDTO.setLogType(LoginLogTypeEnum.LOGOUT_SELF.getType()); reqDTO.setTraceId(TracerUtils.getTraceId()); reqDTO.setUserId(userId); reqDTO.setUserType(getUserType().getValue()); reqDTO.setUsername(username); reqDTO.setUserAgent(ServletUtils.getUserAgent()); reqDTO.setUserIp(ServletUtils.getClientIP()); - reqDTO.setResult(SysLoginResultEnum.SUCCESS.getResult()); + reqDTO.setResult(LoginResultEnum.SUCCESS.getResult()); loginLogCoreService.createLoginLog(reqDTO); } @@ -324,7 +323,7 @@ public class SysAuthServiceImpl implements SysAuthService { } private LoginUser buildLoginUser(SysUserDO user) { - LoginUser loginUser = SysAuthConvert.INSTANCE.convert(user); + LoginUser loginUser = AuthConvert.INSTANCE.convert(user); // 补全字段 loginUser.setDeptId(user.getDeptId()); loginUser.setRoleIds(this.getUserRoleIds(loginUser.getId())); diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/SysUserSessionService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionService.java similarity index 72% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/SysUserSessionService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionService.java index f47c04b8bf..af318fec4f 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/SysUserSessionService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionService.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.service.auth; -import cn.iocoder.yudao.module.system.controller.auth.vo.session.SysUserSessionPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.session.UserSessionPageReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -9,7 +9,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; * * @author èŠ‹é“æºç  */ -public interface SysUserSessionService { +public interface UserSessionService { /** * 获得在线用户分页列表 @@ -17,7 +17,7 @@ public interface SysUserSessionService { * @param reqVO 分页æ¡ä»¶ * @return 份é¢ä¸Žåˆ—表 */ - PageResult getUserSessionPage(SysUserSessionPageReqVO reqVO); + PageResult getUserSessionPage(UserSessionPageReqVO reqVO); /** * 移除超时的在线用户 diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/SysUserSessionServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImpl.java similarity index 83% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/SysUserSessionServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImpl.java index 83bc371cb3..23d68cd6e3 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/SysUserSessionServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImpl.java @@ -2,12 +2,11 @@ package cn.iocoder.yudao.module.system.service.auth; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.module.system.controller.auth.vo.session.SysUserSessionPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.session.UserSessionPageReqVO; import cn.iocoder.yudao.module.system.dal.mysql.auth.SysUserSessionMapper; -import cn.iocoder.yudao.module.system.enums.logger.SysLoginLogTypeEnum; -import cn.iocoder.yudao.module.system.enums.logger.SysLoginResultEnum; -import cn.iocoder.yudao.module.system.service.auth.SysUserSessionService; -import cn.iocoder.yudao.module.system.service.user.SysUserService; +import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum; +import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum; +import cn.iocoder.yudao.module.system.service.user.UserService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.dal.redis.auth.SysLoginUserCoreRedisDAO; @@ -35,12 +34,12 @@ import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils. */ @Slf4j @Service -public class SysUserSessionServiceImpl implements SysUserSessionService { +public class UserSessionServiceImpl implements UserSessionService { @Resource private SysUserSessionMapper userSessionMapper; @Resource - private SysUserService userService; + private UserService userService; @Resource private SysLoginLogCoreService loginLogCoreService; @@ -48,7 +47,7 @@ public class SysUserSessionServiceImpl implements SysUserSessionService { private SysLoginUserCoreRedisDAO loginUserCoreRedisDAO; @Override - public PageResult getUserSessionPage(SysUserSessionPageReqVO reqVO) { + public PageResult getUserSessionPage(UserSessionPageReqVO reqVO) { // 处ç†åŸºäºŽç”¨æˆ·æ˜µç§°çš„æŸ¥è¯¢ Collection userIds = null; if (StrUtil.isNotEmpty(reqVO.getUsername())) { @@ -82,14 +81,14 @@ public class SysUserSessionServiceImpl implements SysUserSessionService { private void createTimeoutLogoutLog(Collection timeoutSessionDOS) { for (SysUserSessionDO timeoutSessionDO : timeoutSessionDOS) { SysLoginLogCreateReqDTO reqDTO = new SysLoginLogCreateReqDTO(); - reqDTO.setLogType(SysLoginLogTypeEnum.LOGOUT_TIMEOUT.getType()); + reqDTO.setLogType(LoginLogTypeEnum.LOGOUT_TIMEOUT.getType()); reqDTO.setTraceId(TracerUtils.getTraceId()); reqDTO.setUserId(timeoutSessionDO.getUserId()); reqDTO.setUserType(timeoutSessionDO.getUserType()); reqDTO.setUsername(timeoutSessionDO.getUsername()); reqDTO.setUserAgent(timeoutSessionDO.getUserAgent()); reqDTO.setUserIp(timeoutSessionDO.getUserIp()); - reqDTO.setResult(SysLoginResultEnum.SUCCESS.getResult()); + reqDTO.setResult(LoginResultEnum.SUCCESS.getResult()); loginLogCoreService.createLoginLog(reqDTO); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/common/SysCaptchaService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/common/CaptchaService.java similarity index 78% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/common/SysCaptchaService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/common/CaptchaService.java index c6a20b909d..ecb05d88a2 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/common/SysCaptchaService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/common/CaptchaService.java @@ -1,18 +1,18 @@ package cn.iocoder.yudao.module.system.service.common; -import cn.iocoder.yudao.module.system.controller.common.vo.SysCaptchaImageRespVO; +import cn.iocoder.yudao.module.system.controller.admin.common.vo.CaptchaImageRespVO; /** * 验è¯ç  Service æŽ¥å£ */ -public interface SysCaptchaService { +public interface CaptchaService { /** * 获得验è¯ç å›¾ç‰‡ * * @return 验è¯ç å›¾ç‰‡ */ - SysCaptchaImageRespVO getCaptchaImage(); + CaptchaImageRespVO getCaptchaImage(); /** * 是å¦å¼€å¯å›¾ç‰‡éªŒè¯ç  diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/common/SysCaptchaServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/common/CaptchaServiceImpl.java similarity index 68% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/common/SysCaptchaServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/common/CaptchaServiceImpl.java index c97ca037c6..1c1a388757 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/common/SysCaptchaServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/common/CaptchaServiceImpl.java @@ -3,11 +3,10 @@ package cn.iocoder.yudao.module.system.service.common; import cn.hutool.captcha.CaptchaUtil; import cn.hutool.captcha.CircleCaptcha; import cn.hutool.core.util.IdUtil; +import cn.iocoder.yudao.module.system.convert.common.CaptchaConvert; import cn.iocoder.yudao.module.system.framework.captcha.config.CaptchaProperties; -import cn.iocoder.yudao.module.system.controller.common.vo.SysCaptchaImageRespVO; -import cn.iocoder.yudao.module.system.convert.common.SysCaptchaConvert; -import cn.iocoder.yudao.module.system.dal.redis.common.SysCaptchaRedisDAO; -import cn.iocoder.yudao.module.system.service.common.SysCaptchaService; +import cn.iocoder.yudao.module.system.controller.admin.common.vo.CaptchaImageRespVO; +import cn.iocoder.yudao.module.system.dal.redis.common.CaptchaRedisDAO; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -16,23 +15,23 @@ import javax.annotation.Resource; * 验è¯ç  Service 实现类 */ @Service -public class SysCaptchaServiceImpl implements SysCaptchaService { +public class CaptchaServiceImpl implements CaptchaService { @Resource private CaptchaProperties captchaProperties; @Resource - private SysCaptchaRedisDAO captchaRedisDAO; + private CaptchaRedisDAO captchaRedisDAO; @Override - public SysCaptchaImageRespVO getCaptchaImage() { + public CaptchaImageRespVO getCaptchaImage() { // 生æˆéªŒè¯ç  CircleCaptcha captcha = CaptchaUtil.createCircleCaptcha(captchaProperties.getWidth(), captchaProperties.getHeight()); // 缓存到 Redis 中 String uuid = IdUtil.fastSimpleUUID(); captchaRedisDAO.set(uuid, captcha.getCode(), captchaProperties.getTimeout()); // 返回 - return SysCaptchaConvert.INSTANCE.convert(uuid, captcha); + return CaptchaConvert.INSTANCE.convert(uuid, captcha); } @Override diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysDeptService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptService.java similarity index 69% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysDeptService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptService.java index 79913ed536..e8397b542a 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysDeptService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptService.java @@ -1,8 +1,8 @@ package cn.iocoder.yudao.module.system.service.dept; -import cn.iocoder.yudao.module.system.controller.dept.vo.dept.SysDeptCreateReqVO; -import cn.iocoder.yudao.module.system.controller.dept.vo.dept.SysDeptListReqVO; -import cn.iocoder.yudao.module.system.controller.dept.vo.dept.SysDeptUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptUpdateReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import java.util.List; @@ -12,7 +12,7 @@ import java.util.List; * * @author èŠ‹é“æºç  */ -public interface SysDeptService { +public interface DeptService { /** * åˆå§‹åŒ–部门的本地缓存 @@ -25,14 +25,14 @@ public interface SysDeptService { * @param reqVO éƒ¨é—¨ä¿¡æ¯ * @return éƒ¨é—¨ç¼–å· */ - Long createDept(SysDeptCreateReqVO reqVO); + Long createDept(DeptCreateReqVO reqVO); /** * 更新部门 * * @param reqVO éƒ¨é—¨ä¿¡æ¯ */ - void updateDept(SysDeptUpdateReqVO reqVO); + void updateDept(DeptUpdateReqVO reqVO); /** * 删除部门 @@ -48,7 +48,7 @@ public interface SysDeptService { * @param reqVO 筛选æ¡ä»¶è¯·æ±‚ VO * @return 部门列表 */ - List getSimpleDepts(SysDeptListReqVO reqVO); + List getSimpleDepts(DeptListReqVO reqVO); /** * 获得所有å­éƒ¨é—¨ï¼Œä»Žç¼“存中 diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysDeptServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java similarity index 90% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysDeptServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java index f4f2773e87..2f9c1a7139 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysDeptServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java @@ -4,15 +4,14 @@ import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.module.system.controller.dept.vo.dept.SysDeptCreateReqVO; -import cn.iocoder.yudao.module.system.controller.dept.vo.dept.SysDeptListReqVO; -import cn.iocoder.yudao.module.system.controller.dept.vo.dept.SysDeptUpdateReqVO; -import cn.iocoder.yudao.module.system.convert.dept.SysDeptConvert; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptUpdateReqVO; +import cn.iocoder.yudao.module.system.convert.dept.DeptConvert; import cn.iocoder.yudao.module.system.dal.mysql.dept.SysDeptMapper; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.module.system.enums.dept.DeptIdEnum; -import cn.iocoder.yudao.module.system.mq.producer.dept.SysDeptProducer; -import cn.iocoder.yudao.module.system.service.dept.SysDeptService; +import cn.iocoder.yudao.module.system.mq.producer.dept.DeptProducer; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.Multimap; @@ -25,7 +24,7 @@ import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.util.*; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** @@ -36,7 +35,7 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU @Service @Validated @Slf4j -public class SysDeptServiceImpl implements SysDeptService { +public class DeptServiceImpl implements DeptService { /** * 定时执行 {@link #schedulePeriodicRefresh()} 的周期 @@ -69,7 +68,7 @@ public class SysDeptServiceImpl implements SysDeptService { private SysDeptMapper deptMapper; @Resource - private SysDeptProducer deptProducer; + private DeptProducer deptProducer; @Override @PostConstruct @@ -122,11 +121,11 @@ public class SysDeptServiceImpl implements SysDeptService { } @Override - public Long createDept(SysDeptCreateReqVO reqVO) { + public Long createDept(DeptCreateReqVO reqVO) { // 校验正确性 checkCreateOrUpdate(null, reqVO.getParentId(), reqVO.getName()); // æ’入部门 - SysDeptDO dept = SysDeptConvert.INSTANCE.convert(reqVO); + SysDeptDO dept = DeptConvert.INSTANCE.convert(reqVO); deptMapper.insert(dept); // å‘é€åˆ·æ–°æ¶ˆæ¯ deptProducer.sendDeptRefreshMessage(); @@ -134,11 +133,11 @@ public class SysDeptServiceImpl implements SysDeptService { } @Override - public void updateDept(SysDeptUpdateReqVO reqVO) { + public void updateDept(DeptUpdateReqVO reqVO) { // 校验正确性 checkCreateOrUpdate(reqVO.getId(), reqVO.getParentId(), reqVO.getName()); // 更新部门 - SysDeptDO updateObj = SysDeptConvert.INSTANCE.convert(reqVO); + SysDeptDO updateObj = DeptConvert.INSTANCE.convert(reqVO); deptMapper.updateById(updateObj); // å‘é€åˆ·æ–°æ¶ˆæ¯ deptProducer.sendDeptRefreshMessage(); @@ -159,7 +158,7 @@ public class SysDeptServiceImpl implements SysDeptService { } @Override - public List getSimpleDepts(SysDeptListReqVO reqVO) { + public List getSimpleDepts(DeptListReqVO reqVO) { return deptMapper.selectList(reqVO); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysPostService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostService.java similarity index 76% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysPostService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostService.java index def06e25a1..73e9759b72 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysPostService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostService.java @@ -2,10 +2,10 @@ package cn.iocoder.yudao.module.system.service.dept; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.system.controller.dept.vo.post.SysPostCreateReqVO; -import cn.iocoder.yudao.module.system.controller.dept.vo.post.SysPostExportReqVO; -import cn.iocoder.yudao.module.system.controller.dept.vo.post.SysPostPageReqVO; -import cn.iocoder.yudao.module.system.controller.dept.vo.post.SysPostUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostUpdateReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; import org.springframework.lang.Nullable; @@ -19,7 +19,7 @@ import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet; * * @author èŠ‹é“æºç  */ -public interface SysPostService { +public interface PostService { /** * åˆ›å»ºå²—ä½ @@ -27,14 +27,14 @@ public interface SysPostService { * @param reqVO å²—ä½ä¿¡æ¯ * @return å²—ä½ç¼–å· */ - Long createPost(SysPostCreateReqVO reqVO); + Long createPost(PostCreateReqVO reqVO); /** * æ›´æ–°å²—ä½ * * @param reqVO å²—ä½ä¿¡æ¯ */ - void updatePost(SysPostUpdateReqVO reqVO); + void updatePost(PostUpdateReqVO reqVO); /** * 删除岗ä½ä¿¡æ¯ @@ -68,7 +68,7 @@ public interface SysPostService { * @param reqVO 分页æ¡ä»¶ * @return 部门分页列表 */ - PageResult getPostPage(SysPostPageReqVO reqVO); + PageResult getPostPage(PostPageReqVO reqVO); /** * 获得岗ä½åˆ—表 @@ -76,7 +76,7 @@ public interface SysPostService { * @param reqVO 查询æ¡ä»¶ * @return 部门列表 */ - List getPosts(SysPostExportReqVO reqVO); + List getPosts(PostExportReqVO reqVO); /** * 获得岗ä½ä¿¡æ¯ diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysPostServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostServiceImpl.java similarity index 77% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysPostServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostServiceImpl.java index 178daeeae7..971743a29d 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysPostServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostServiceImpl.java @@ -2,14 +2,13 @@ package cn.iocoder.yudao.module.system.service.dept; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.system.controller.dept.vo.post.SysPostCreateReqVO; -import cn.iocoder.yudao.module.system.controller.dept.vo.post.SysPostExportReqVO; -import cn.iocoder.yudao.module.system.controller.dept.vo.post.SysPostPageReqVO; -import cn.iocoder.yudao.module.system.controller.dept.vo.post.SysPostUpdateReqVO; -import cn.iocoder.yudao.module.system.convert.dept.SysPostConvert; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostUpdateReqVO; +import cn.iocoder.yudao.module.system.convert.dept.PostConvert; import cn.iocoder.yudao.module.system.dal.mysql.dept.SysPostMapper; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; -import cn.iocoder.yudao.module.system.service.dept.SysPostService; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -17,7 +16,7 @@ import javax.annotation.Resource; import java.util.Collection; import java.util.List; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** @@ -27,27 +26,27 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU */ @Service @Validated -public class SysPostServiceImpl implements SysPostService { +public class PostServiceImpl implements PostService { @Resource private SysPostMapper postMapper; @Override - public Long createPost(SysPostCreateReqVO reqVO) { + public Long createPost(PostCreateReqVO reqVO) { // 校验正确性 this.checkCreateOrUpdate(null, reqVO.getName(), reqVO.getCode()); // æ’å…¥å²—ä½ - SysPostDO post = SysPostConvert.INSTANCE.convert(reqVO); + SysPostDO post = PostConvert.INSTANCE.convert(reqVO); postMapper.insert(post); return post.getId(); } @Override - public void updatePost(SysPostUpdateReqVO reqVO) { + public void updatePost(PostUpdateReqVO reqVO) { // 校验正确性 this.checkCreateOrUpdate(reqVO.getId(), reqVO.getName(), reqVO.getCode()); // æ›´æ–°å²—ä½ - SysPostDO updateObj = SysPostConvert.INSTANCE.convert(reqVO); + SysPostDO updateObj = PostConvert.INSTANCE.convert(reqVO); postMapper.updateById(updateObj); } @@ -65,12 +64,12 @@ public class SysPostServiceImpl implements SysPostService { } @Override - public PageResult getPostPage(SysPostPageReqVO reqVO) { + public PageResult getPostPage(PostPageReqVO reqVO) { return postMapper.selectPage(reqVO); } @Override - public List getPosts(SysPostExportReqVO reqVO) { + public List getPosts(PostExportReqVO reqVO) { return postMapper.selectList(reqVO); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/SysDictDataService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataService.java similarity index 67% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/SysDictDataService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataService.java index 30d4690982..c7b60e0ad0 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/SysDictDataService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataService.java @@ -2,10 +2,10 @@ package cn.iocoder.yudao.module.system.service.dict; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.system.controller.dict.vo.data.SysDictDataCreateReqVO; -import cn.iocoder.yudao.module.system.controller.dict.vo.data.SysDictDataExportReqVO; -import cn.iocoder.yudao.module.system.controller.dict.vo.data.SysDictDataPageReqVO; -import cn.iocoder.yudao.module.system.controller.dict.vo.data.SysDictDataUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataUpdateReqVO; import java.util.List; @@ -14,7 +14,7 @@ import java.util.List; * * @author ruoyi */ -public interface SysDictDataService { +public interface DictDataService { /** * åˆ›å»ºå­—å…¸æ•°æ® @@ -22,14 +22,14 @@ public interface SysDictDataService { * @param reqVO 字典数æ®ä¿¡æ¯ * @return 字典数æ®ç¼–å· */ - Long createDictData(SysDictDataCreateReqVO reqVO); + Long createDictData(DictDataCreateReqVO reqVO); /** * æ›´æ–°å­—å…¸æ•°æ® * * @param reqVO 字典数æ®ä¿¡æ¯ */ - void updateDictData(SysDictDataUpdateReqVO reqVO); + void updateDictData(DictDataUpdateReqVO reqVO); /** * åˆ é™¤å­—å…¸æ•°æ® @@ -51,7 +51,7 @@ public interface SysDictDataService { * @param reqVO 分页请求 * @return 字典数æ®åˆ†é¡µåˆ—表 */ - PageResult getDictDataPage(SysDictDataPageReqVO reqVO); + PageResult getDictDataPage(DictDataPageReqVO reqVO); /** * 获得字典数æ®åˆ—表 @@ -59,7 +59,7 @@ public interface SysDictDataService { * @param reqVO 列表请求 * @return 字典数æ®åˆ—表 */ - List getDictDatas(SysDictDataExportReqVO reqVO); + List getDictDatas(DictDataExportReqVO reqVO); /** * 获得字典数æ®è¯¦æƒ… diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/SysDictDataServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceImpl.java similarity index 77% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/SysDictDataServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceImpl.java index 1037779f08..0d25f87ca5 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/SysDictDataServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceImpl.java @@ -1,15 +1,15 @@ package cn.iocoder.yudao.module.system.service.dict; -import cn.iocoder.yudao.module.system.controller.dict.vo.data.SysDictDataCreateReqVO; -import cn.iocoder.yudao.module.system.controller.dict.vo.data.SysDictDataExportReqVO; -import cn.iocoder.yudao.module.system.controller.dict.vo.data.SysDictDataPageReqVO; -import cn.iocoder.yudao.module.system.controller.dict.vo.data.SysDictDataUpdateReqVO; -import cn.iocoder.yudao.module.system.convert.dict.SysDictDataConvert; -import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictTypeDO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataUpdateReqVO; +import cn.iocoder.yudao.module.system.convert.dict.DictDataConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictTypeDO; import cn.iocoder.yudao.module.system.dal.mysql.dict.SysDictDataMapper; -import cn.iocoder.yudao.module.system.mq.producer.dict.SysDictDataProducer; -import cn.iocoder.yudao.module.system.service.dict.SysDictDataService; -import cn.iocoder.yudao.module.system.service.dict.SysDictTypeService; +import cn.iocoder.yudao.module.system.mq.producer.dict.DictDataProducer; +import cn.iocoder.yudao.module.system.service.dict.DictDataService; +import cn.iocoder.yudao.module.system.service.dict.DictTypeService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -20,7 +20,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.*; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** @@ -30,7 +30,7 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU */ @Service @Slf4j -public class SysDictDataServiceImpl implements SysDictDataService { +public class DictDataServiceImpl implements DictDataService { /** * æŽ’åº dictType > sort @@ -40,13 +40,13 @@ public class SysDictDataServiceImpl implements SysDictDataService { .thenComparingInt(SysDictDataDO::getSort); @Resource - private SysDictTypeService dictTypeService; + private DictTypeService dictTypeService; @Resource private SysDictDataMapper dictDataMapper; @Resource - private SysDictDataProducer dictDataProducer; + private DictDataProducer dictDataProducer; /** * 如果字典数æ®å‘生å˜åŒ–,从数æ®åº“ä¸­èŽ·å–æœ€æ–°çš„å…¨é‡å­—典数æ®ã€‚ @@ -77,12 +77,12 @@ public class SysDictDataServiceImpl implements SysDictDataService { } @Override - public PageResult getDictDataPage(SysDictDataPageReqVO reqVO) { + public PageResult getDictDataPage(DictDataPageReqVO reqVO) { return dictDataMapper.selectPage(reqVO); } @Override - public List getDictDatas(SysDictDataExportReqVO reqVO) { + public List getDictDatas(DictDataExportReqVO reqVO) { List list = dictDataMapper.selectList(reqVO); list.sort(COMPARATOR_TYPE_AND_SORT); return list; @@ -94,11 +94,11 @@ public class SysDictDataServiceImpl implements SysDictDataService { } @Override - public Long createDictData(SysDictDataCreateReqVO reqVO) { + public Long createDictData(DictDataCreateReqVO reqVO) { // 校验正确性 this.checkCreateOrUpdate(null, reqVO.getValue(), reqVO.getDictType()); // æ’入字典类型 - SysDictDataDO dictData = SysDictDataConvert.INSTANCE.convert(reqVO); + SysDictDataDO dictData = DictDataConvert.INSTANCE.convert(reqVO); dictDataMapper.insert(dictData); // å‘é€åˆ·æ–°æ¶ˆæ¯ dictDataProducer.sendDictDataRefreshMessage(); @@ -106,11 +106,11 @@ public class SysDictDataServiceImpl implements SysDictDataService { } @Override - public void updateDictData(SysDictDataUpdateReqVO reqVO) { + public void updateDictData(DictDataUpdateReqVO reqVO) { // 校验正确性 this.checkCreateOrUpdate(reqVO.getId(), reqVO.getValue(), reqVO.getDictType()); // 更新字典类型 - SysDictDataDO updateObj = SysDictDataConvert.INSTANCE.convert(reqVO); + SysDictDataDO updateObj = DictDataConvert.INSTANCE.convert(reqVO); dictDataMapper.updateById(updateObj); // å‘é€åˆ·æ–°æ¶ˆæ¯ dictDataProducer.sendDictDataRefreshMessage(); @@ -169,7 +169,7 @@ public class SysDictDataServiceImpl implements SysDictDataService { @VisibleForTesting public void checkDictTypeValid(String type) { - SysDictTypeDO dictType = dictTypeService.getDictType(type); + DictTypeDO dictType = dictTypeService.getDictType(type); if (dictType == null) { throw exception(DICT_TYPE_NOT_EXISTS); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/SysDictTypeService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictTypeService.java similarity index 57% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/SysDictTypeService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictTypeService.java index a115269a63..4b334b08be 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/SysDictTypeService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictTypeService.java @@ -1,11 +1,11 @@ package cn.iocoder.yudao.module.system.service.dict; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.system.controller.dict.vo.type.SysDictTypeCreateReqVO; -import cn.iocoder.yudao.module.system.controller.dict.vo.type.SysDictTypeExportReqVO; -import cn.iocoder.yudao.module.system.controller.dict.vo.type.SysDictTypePageReqVO; -import cn.iocoder.yudao.module.system.controller.dict.vo.type.SysDictTypeUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictTypeDO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypeCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypeExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypePageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypeUpdateReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictTypeDO; import java.util.List; @@ -14,7 +14,7 @@ import java.util.List; * * @author èŠ‹é“æºç  */ -public interface SysDictTypeService { +public interface DictTypeService { /** * 创建字典类型 @@ -22,14 +22,14 @@ public interface SysDictTypeService { * @param reqVO å­—å…¸ç±»åž‹ä¿¡æ¯ * @return å­—å…¸ç±»åž‹ç¼–å· */ - Long createDictType(SysDictTypeCreateReqVO reqVO); + Long createDictType(DictTypeCreateReqVO reqVO); /** * 更新字典类型 * * @param reqVO å­—å…¸ç±»åž‹ä¿¡æ¯ */ - void updateDictType(SysDictTypeUpdateReqVO reqVO); + void updateDictType(DictTypeUpdateReqVO reqVO); /** * 删除字典类型 @@ -44,7 +44,7 @@ public interface SysDictTypeService { * @param reqVO 分页请求 * @return 字典类型分页列表 */ - PageResult getDictTypePage(SysDictTypePageReqVO reqVO); + PageResult getDictTypePage(DictTypePageReqVO reqVO); /** * 获得字典类型列表 @@ -52,7 +52,7 @@ public interface SysDictTypeService { * @param reqVO 列表请求 * @return 字典类型列表 */ - List getDictTypeList(SysDictTypeExportReqVO reqVO); + List getDictTypeList(DictTypeExportReqVO reqVO); /** * 获得字典类型详情 @@ -60,7 +60,7 @@ public interface SysDictTypeService { * @param id å­—å…¸ç±»åž‹ç¼–å· * @return 字典类型 */ - SysDictTypeDO getDictType(Long id); + DictTypeDO getDictType(Long id); /** * 获得字典类型详情 @@ -68,13 +68,13 @@ public interface SysDictTypeService { * @param type 字典类型 * @return 字典类型详情 */ - SysDictTypeDO getDictType(String type); + DictTypeDO getDictType(String type); /** * 获得全部字典类型列表 * * @return 字典类型列表 */ - List getDictTypeList(); + List getDictTypeList(); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/SysDictTypeServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictTypeServiceImpl.java similarity index 66% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/SysDictTypeServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictTypeServiceImpl.java index 7cfb1a9660..222269b511 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/SysDictTypeServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictTypeServiceImpl.java @@ -1,12 +1,12 @@ package cn.iocoder.yudao.module.system.service.dict; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.system.controller.dict.vo.type.SysDictTypeCreateReqVO; -import cn.iocoder.yudao.module.system.controller.dict.vo.type.SysDictTypeExportReqVO; -import cn.iocoder.yudao.module.system.controller.dict.vo.type.SysDictTypePageReqVO; -import cn.iocoder.yudao.module.system.controller.dict.vo.type.SysDictTypeUpdateReqVO; -import cn.iocoder.yudao.module.system.convert.dict.SysDictTypeConvert; -import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictTypeDO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypeCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypeExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypePageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypeUpdateReqVO; +import cn.iocoder.yudao.module.system.convert.dict.DictTypeConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictTypeDO; import cn.iocoder.yudao.module.system.dal.mysql.dict.SysDictTypeMapper; import com.google.common.annotations.VisibleForTesting; import org.springframework.stereotype.Service; @@ -15,7 +15,7 @@ import javax.annotation.Resource; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; /** * 字典类型 Service 实现类 @@ -23,57 +23,57 @@ import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; * @author èŠ‹é“æºç  */ @Service -public class SysDictTypeServiceImpl implements SysDictTypeService { +public class DictTypeServiceImpl implements DictTypeService { @Resource - private SysDictDataService dictDataService; + private DictDataService dictDataService; @Resource private SysDictTypeMapper dictTypeMapper; @Override - public PageResult getDictTypePage(SysDictTypePageReqVO reqVO) { + public PageResult getDictTypePage(DictTypePageReqVO reqVO) { return dictTypeMapper.selectPage(reqVO); } @Override - public List getDictTypeList(SysDictTypeExportReqVO reqVO) { + public List getDictTypeList(DictTypeExportReqVO reqVO) { return dictTypeMapper.selectList(reqVO); } @Override - public SysDictTypeDO getDictType(Long id) { + public DictTypeDO getDictType(Long id) { return dictTypeMapper.selectById(id); } @Override - public SysDictTypeDO getDictType(String type) { + public DictTypeDO getDictType(String type) { return dictTypeMapper.selectByType(type); } @Override - public Long createDictType(SysDictTypeCreateReqVO reqVO) { + public Long createDictType(DictTypeCreateReqVO reqVO) { // 校验正确性 this.checkCreateOrUpdate(null, reqVO.getName(), reqVO.getType()); // æ’入字典类型 - SysDictTypeDO dictType = SysDictTypeConvert.INSTANCE.convert(reqVO); + DictTypeDO dictType = DictTypeConvert.INSTANCE.convert(reqVO); dictTypeMapper.insert(dictType); return dictType.getId(); } @Override - public void updateDictType(SysDictTypeUpdateReqVO reqVO) { + public void updateDictType(DictTypeUpdateReqVO reqVO) { // 校验正确性 this.checkCreateOrUpdate(reqVO.getId(), reqVO.getName(), null); // 更新字典类型 - SysDictTypeDO updateObj = SysDictTypeConvert.INSTANCE.convert(reqVO); + DictTypeDO updateObj = DictTypeConvert.INSTANCE.convert(reqVO); dictTypeMapper.updateById(updateObj); } @Override public void deleteDictType(Long id) { // 校验是å¦å­˜åœ¨ - SysDictTypeDO dictType = this.checkDictTypeExists(id); + DictTypeDO dictType = this.checkDictTypeExists(id); // æ ¡éªŒæ˜¯å¦æœ‰å­—å…¸æ•°æ® if (dictDataService.countByDictType(dictType.getType()) > 0) { throw exception(DICT_TYPE_HAS_CHILDREN); @@ -83,7 +83,7 @@ public class SysDictTypeServiceImpl implements SysDictTypeService { } @Override - public List getDictTypeList() { + public List getDictTypeList() { return dictTypeMapper.selectList(); } @@ -98,7 +98,7 @@ public class SysDictTypeServiceImpl implements SysDictTypeService { @VisibleForTesting public void checkDictTypeNameUnique(Long id, String name) { - SysDictTypeDO dictType = dictTypeMapper.selectByName(name); + DictTypeDO dictType = dictTypeMapper.selectByName(name); if (dictType == null) { return; } @@ -113,7 +113,7 @@ public class SysDictTypeServiceImpl implements SysDictTypeService { @VisibleForTesting public void checkDictTypeUnique(Long id, String type) { - SysDictTypeDO dictType = dictTypeMapper.selectByType(type); + DictTypeDO dictType = dictTypeMapper.selectByType(type); if (dictType == null) { return; } @@ -127,11 +127,11 @@ public class SysDictTypeServiceImpl implements SysDictTypeService { } @VisibleForTesting - public SysDictTypeDO checkDictTypeExists(Long id) { + public DictTypeDO checkDictTypeExists(Long id) { if (id == null) { return null; } - SysDictTypeDO dictType = dictTypeMapper.selectById(id); + DictTypeDO dictType = dictTypeMapper.selectById(id); if (dictType == null) { throw exception(DICT_TYPE_NOT_EXISTS); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/errorcode/SysErrorCodeService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/errorcode/ErrorCodeService.java similarity index 54% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/errorcode/SysErrorCodeService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/errorcode/ErrorCodeService.java index 0eff899066..18875f628d 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/errorcode/SysErrorCodeService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/errorcode/ErrorCodeService.java @@ -1,12 +1,12 @@ package cn.iocoder.yudao.module.system.service.errorcode; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.system.dal.dataobject.errorcode.ErrorCodeDO; import cn.iocoder.yudao.module.system.framework.errorcode.core.service.ErrorCodeFrameworkService; -import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodeCreateReqVO; -import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodeExportReqVO; -import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodePageReqVO; -import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodeUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.errorcode.SysErrorCodeDO; +import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.ErrorCodeCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.ErrorCodeExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.ErrorCodePageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.ErrorCodeUpdateReqVO; import javax.validation.Valid; import java.util.List; @@ -16,7 +16,7 @@ import java.util.List; * * @author èŠ‹é“æºç  */ -public interface SysErrorCodeService extends ErrorCodeFrameworkService { +public interface ErrorCodeService extends ErrorCodeFrameworkService { /** * åˆ›å»ºé”™è¯¯ç  @@ -24,14 +24,14 @@ public interface SysErrorCodeService extends ErrorCodeFrameworkService { * @param createReqVO åˆ›å»ºä¿¡æ¯ * @return ç¼–å· */ - Long createErrorCode(@Valid SysErrorCodeCreateReqVO createReqVO); + Long createErrorCode(@Valid ErrorCodeCreateReqVO createReqVO); /** * æ›´æ–°é”™è¯¯ç  * * @param updateReqVO æ›´æ–°ä¿¡æ¯ */ - void updateErrorCode(@Valid SysErrorCodeUpdateReqVO updateReqVO); + void updateErrorCode(@Valid ErrorCodeUpdateReqVO updateReqVO); /** * åˆ é™¤é”™è¯¯ç  @@ -46,7 +46,7 @@ public interface SysErrorCodeService extends ErrorCodeFrameworkService { * @param id ç¼–å· * @return é”™è¯¯ç  */ - SysErrorCodeDO getErrorCode(Long id); + ErrorCodeDO getErrorCode(Long id); /** * 获得错误ç åˆ†é¡µ @@ -54,7 +54,7 @@ public interface SysErrorCodeService extends ErrorCodeFrameworkService { * @param pageReqVO 分页查询 * @return 错误ç åˆ†é¡µ */ - PageResult getErrorCodePage(SysErrorCodePageReqVO pageReqVO); + PageResult getErrorCodePage(ErrorCodePageReqVO pageReqVO); /** * 获得错误ç åˆ—表, 用于 Excel 导出 @@ -62,6 +62,6 @@ public interface SysErrorCodeService extends ErrorCodeFrameworkService { * @param exportReqVO 查询æ¡ä»¶ * @return 错误ç åˆ—表 */ - List getErrorCodeList(SysErrorCodeExportReqVO exportReqVO); + List getErrorCodeList(ErrorCodeExportReqVO exportReqVO); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/errorcode/SysErrorCodeServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/errorcode/ErrorCodeServiceImpl.java similarity index 66% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/errorcode/SysErrorCodeServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/errorcode/ErrorCodeServiceImpl.java index af4e9f352a..d347d79810 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/errorcode/SysErrorCodeServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/errorcode/ErrorCodeServiceImpl.java @@ -2,17 +2,16 @@ package cn.iocoder.yudao.module.system.service.errorcode; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.ErrorCodeCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.ErrorCodeUpdateReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.errorcode.ErrorCodeDO; import cn.iocoder.yudao.module.system.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; import cn.iocoder.yudao.module.system.framework.errorcode.core.dto.ErrorCodeRespDTO; -import cn.iocoder.yudao.module.system.convert.errorcode.SysErrorCodeConvert; -import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodeCreateReqVO; -import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodeExportReqVO; -import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodePageReqVO; -import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodeUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.errorcode.SysErrorCodeDO; +import cn.iocoder.yudao.module.system.convert.errorcode.ErrorCodeConvert; +import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.ErrorCodeExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.ErrorCodePageReqVO; import cn.iocoder.yudao.module.system.dal.mysql.errorcode.SysErrorCodeMapper; -import cn.iocoder.yudao.module.system.enums.errorcode.SysErrorCodeTypeEnum; -import cn.iocoder.yudao.module.system.service.errorcode.SysErrorCodeService; +import cn.iocoder.yudao.module.system.enums.errorcode.ErrorCodeTypeEnum; import com.google.common.annotations.VisibleForTesting; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -25,7 +24,7 @@ import java.util.List; import java.util.Map; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; @@ -37,34 +36,34 @@ import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils. @Service @Validated @Slf4j -public class SysErrorCodeServiceImpl implements SysErrorCodeService { +public class ErrorCodeServiceImpl implements ErrorCodeService { @Resource private SysErrorCodeMapper errorCodeMapper; @Override - public Long createErrorCode(SysErrorCodeCreateReqVO createReqVO) { + public Long createErrorCode(ErrorCodeCreateReqVO createReqVO) { // 校验 code é‡å¤ validateCodeDuplicate(createReqVO.getCode(), null); // æ’å…¥ - SysErrorCodeDO errorCode = SysErrorCodeConvert.INSTANCE.convert(createReqVO) - .setType(SysErrorCodeTypeEnum.MANUAL_OPERATION.getType()); + ErrorCodeDO errorCode = ErrorCodeConvert.INSTANCE.convert(createReqVO) + .setType(ErrorCodeTypeEnum.MANUAL_OPERATION.getType()); errorCodeMapper.insert(errorCode); // 返回 return errorCode.getId(); } @Override - public void updateErrorCode(SysErrorCodeUpdateReqVO updateReqVO) { + public void updateErrorCode(ErrorCodeUpdateReqVO updateReqVO) { // 校验存在 this.validateErrorCodeExists(updateReqVO.getId()); // 校验 code é‡å¤ validateCodeDuplicate(updateReqVO.getCode(), updateReqVO.getId()); // æ›´æ–° - SysErrorCodeDO updateObj = SysErrorCodeConvert.INSTANCE.convert(updateReqVO) - .setType(SysErrorCodeTypeEnum.MANUAL_OPERATION.getType()); + ErrorCodeDO updateObj = ErrorCodeConvert.INSTANCE.convert(updateReqVO) + .setType(ErrorCodeTypeEnum.MANUAL_OPERATION.getType()); errorCodeMapper.updateById(updateObj); } @@ -86,7 +85,7 @@ public class SysErrorCodeServiceImpl implements SysErrorCodeService { */ @VisibleForTesting public void validateCodeDuplicate(Integer code, Long id) { - SysErrorCodeDO errorCodeDO = errorCodeMapper.selectByCode(code); + ErrorCodeDO errorCodeDO = errorCodeMapper.selectByCode(code); if (errorCodeDO == null) { return; } @@ -107,17 +106,17 @@ public class SysErrorCodeServiceImpl implements SysErrorCodeService { } @Override - public SysErrorCodeDO getErrorCode(Long id) { + public ErrorCodeDO getErrorCode(Long id) { return errorCodeMapper.selectById(id); } @Override - public PageResult getErrorCodePage(SysErrorCodePageReqVO pageReqVO) { + public PageResult getErrorCodePage(ErrorCodePageReqVO pageReqVO) { return errorCodeMapper.selectPage(pageReqVO); } @Override - public List getErrorCodeList(SysErrorCodeExportReqVO exportReqVO) { + public List getErrorCodeList(ErrorCodeExportReqVO exportReqVO) { return errorCodeMapper.selectList(exportReqVO); } @@ -128,23 +127,23 @@ public class SysErrorCodeServiceImpl implements SysErrorCodeService { return; } // èŽ·å¾—é”™è¯¯ç  - List errorCodeDOs = errorCodeMapper.selectListByCodes( + List errorCodeDOs = errorCodeMapper.selectListByCodes( convertSet(autoGenerateDTOs, ErrorCodeAutoGenerateReqDTO::getCode)); - Map errorCodeDOMap = convertMap(errorCodeDOs, SysErrorCodeDO::getCode); + Map errorCodeDOMap = convertMap(errorCodeDOs, ErrorCodeDO::getCode); // é历 autoGenerateBOs 数组,é€ä¸ªæ’å…¥æˆ–æ›´æ–°ã€‚è€ƒè™‘åˆ°æ¯æ¬¡é‡çº§ä¸å¤§ï¼Œå°±ä¸èµ°æ‰¹é‡äº† autoGenerateDTOs.forEach(autoGenerateDTO -> { - SysErrorCodeDO errorCodeDO = errorCodeDOMap.get(autoGenerateDTO.getCode()); + ErrorCodeDO errorCodeDO = errorCodeDOMap.get(autoGenerateDTO.getCode()); // ä¸å­˜åœ¨ï¼Œåˆ™è¿›è¡Œæ–°å¢ž if (errorCodeDO == null) { - errorCodeDO = SysErrorCodeConvert.INSTANCE.convert(autoGenerateDTO) - .setType(SysErrorCodeTypeEnum.AUTO_GENERATION.getType()); + errorCodeDO = ErrorCodeConvert.INSTANCE.convert(autoGenerateDTO) + .setType(ErrorCodeTypeEnum.AUTO_GENERATION.getType()); errorCodeMapper.insert(errorCodeDO); return; } // 存在,则进行更新。更新有三个å‰ç½®æ¡ä»¶ï¼š // æ¡ä»¶ 1. åªæ›´æ–°è‡ªåŠ¨ç”Ÿæˆçš„错误ç ï¼Œå³ Type 为 ErrorCodeTypeEnum.AUTO_GENERATION - if (!SysErrorCodeTypeEnum.AUTO_GENERATION.getType().equals(errorCodeDO.getType())) { + if (!ErrorCodeTypeEnum.AUTO_GENERATION.getType().equals(errorCodeDO.getType())) { return; } // æ¡ä»¶ 2. 分组 applicationName 必须匹é…,é¿å…存在错误ç å†²çªçš„æƒ…况 @@ -159,15 +158,15 @@ public class SysErrorCodeServiceImpl implements SysErrorCodeService { return; } // 最终匹é…,进行更新 - errorCodeMapper.updateById(new SysErrorCodeDO().setId(errorCodeDO.getId()).setMessage(autoGenerateDTO.getMessage())); + errorCodeMapper.updateById(new ErrorCodeDO().setId(errorCodeDO.getId()).setMessage(autoGenerateDTO.getMessage())); }); } @Override public List getErrorCodeList(String applicationName, Date minUpdateTime) { - List errorCodeDOs = errorCodeMapper.selectListByApplicationNameAndUpdateTimeGt( + List errorCodeDOs = errorCodeMapper.selectListByApplicationNameAndUpdateTimeGt( applicationName, minUpdateTime); - return SysErrorCodeConvert.INSTANCE.convertList03(errorCodeDOs); + return ErrorCodeConvert.INSTANCE.convertList03(errorCodeDOs); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/SysLoginLogService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogService.java similarity index 58% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/SysLoginLogService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogService.java index 8dbff7d4d8..7643fe1151 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/SysLoginLogService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogService.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.service.logger; -import cn.iocoder.yudao.module.system.controller.logger.vo.loginlog.SysLoginLogExportReqVO; -import cn.iocoder.yudao.module.system.controller.logger.vo.loginlog.SysLoginLogPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -10,7 +10,7 @@ import java.util.List; /** * 登录日志 Service æŽ¥å£ */ -public interface SysLoginLogService { +public interface LoginLogService { /** * 获得登录日志分页 @@ -18,7 +18,7 @@ public interface SysLoginLogService { * @param reqVO 分页æ¡ä»¶ * @return 登录日志分页 */ - PageResult getLoginLogPage(SysLoginLogPageReqVO reqVO); + PageResult getLoginLogPage(LoginLogPageReqVO reqVO); /** * 获得登录日志列表 @@ -26,6 +26,6 @@ public interface SysLoginLogService { * @param reqVO 列表æ¡ä»¶ * @return 登录日志列表 */ - List getLoginLogList(SysLoginLogExportReqVO reqVO); + List getLoginLogList(LoginLogExportReqVO reqVO); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImpl.java new file mode 100644 index 0000000000..d2f35aee8b --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImpl.java @@ -0,0 +1,32 @@ +package cn.iocoder.yudao.module.system.service.logger; + +import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO; +import cn.iocoder.yudao.module.system.dal.mysql.logger.LoginLogMapper; +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 登录日志 Service 实现 + */ +@Service +public class LoginLogServiceImpl implements LoginLogService { + + @Resource + private LoginLogMapper loginLogMapper; + + @Override + public PageResult getLoginLogPage(LoginLogPageReqVO reqVO) { + return loginLogMapper.selectPage(reqVO); + } + + @Override + public List getLoginLogList(LoginLogExportReqVO reqVO) { + return loginLogMapper.selectList(reqVO); + } + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/SysOperateLogService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogService.java similarity index 51% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/SysOperateLogService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogService.java index 4bab97586f..4ec2d8f011 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/SysOperateLogService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogService.java @@ -2,16 +2,16 @@ package cn.iocoder.yudao.module.system.service.logger; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.operatelog.core.service.OperateLogFrameworkService; -import cn.iocoder.yudao.module.system.controller.logger.vo.operatelog.SysOperateLogExportReqVO; -import cn.iocoder.yudao.module.system.controller.logger.vo.operatelog.SysOperateLogPageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysOperateLogDO; +import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO; import java.util.List; /** * æ“作日志 Service æŽ¥å£ */ -public interface SysOperateLogService extends OperateLogFrameworkService { +public interface OperateLogService extends OperateLogFrameworkService { /** * 获得æ“作日志分页列表 @@ -19,7 +19,7 @@ public interface SysOperateLogService extends OperateLogFrameworkService { * @param reqVO 分页æ¡ä»¶ * @return æ“作日志分页列表 */ - PageResult getOperateLogPage(SysOperateLogPageReqVO reqVO); + PageResult getOperateLogPage(OperateLogPageReqVO reqVO); /** * 获得æ“作日志列表 @@ -27,6 +27,6 @@ public interface SysOperateLogService extends OperateLogFrameworkService { * @param reqVO 列表æ¡ä»¶ * @return 日志列表 */ - List getOperateLogs(SysOperateLogExportReqVO reqVO); + List getOperateLogs(OperateLogExportReqVO reqVO); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/SysOperateLogServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImpl.java similarity index 71% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/SysOperateLogServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImpl.java index c89c37b3e3..fab8ddfaa9 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/SysOperateLogServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImpl.java @@ -2,13 +2,12 @@ package cn.iocoder.yudao.module.system.service.logger; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.module.system.controller.logger.vo.operatelog.SysOperateLogExportReqVO; -import cn.iocoder.yudao.module.system.controller.logger.vo.operatelog.SysOperateLogPageReqVO; -import cn.iocoder.yudao.module.system.convert.logger.SysOperateLogConvert; -import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysOperateLogDO; -import cn.iocoder.yudao.module.system.dal.mysql.logger.SysOperateLogMapper; -import cn.iocoder.yudao.module.system.service.logger.SysOperateLogService; -import cn.iocoder.yudao.module.system.service.user.SysUserService; +import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO; +import cn.iocoder.yudao.module.system.convert.logger.OperateLogConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO; +import cn.iocoder.yudao.module.system.dal.mysql.logger.OperateLogMapper; +import cn.iocoder.yudao.module.system.service.user.UserService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.string.StrUtils; @@ -24,26 +23,26 @@ import java.util.Collections; import java.util.List; import java.util.concurrent.Future; -import static cn.iocoder.yudao.module.system.dal.dataobject.logger.SysOperateLogDO.JAVA_METHOD_ARGS_MAX_LENGTH; -import static cn.iocoder.yudao.module.system.dal.dataobject.logger.SysOperateLogDO.RESULT_MAX_LENGTH; +import static cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO.JAVA_METHOD_ARGS_MAX_LENGTH; +import static cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO.RESULT_MAX_LENGTH; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; @Service @Slf4j -public class SysOperateLogServiceImpl implements SysOperateLogService { +public class OperateLogServiceImpl implements OperateLogService { @Resource - private SysOperateLogMapper operateLogMapper; + private OperateLogMapper operateLogMapper; @Resource - private SysUserService userService; + private UserService userService; @Override @Async public Future createOperateLogAsync(OperateLogCreateReqDTO reqVO) { boolean success = false; try { - SysOperateLogDO logDO = SysOperateLogConvert.INSTANCE.convert(reqVO); + OperateLogDO logDO = OperateLogConvert.INSTANCE.convert(reqVO); logDO.setJavaMethodArgs(StrUtils.maxLength(logDO.getJavaMethodArgs(), JAVA_METHOD_ARGS_MAX_LENGTH)); logDO.setResultData(StrUtils.maxLength(logDO.getResultData(), RESULT_MAX_LENGTH)); success = operateLogMapper.insert(logDO) == 1; @@ -55,7 +54,7 @@ public class SysOperateLogServiceImpl implements SysOperateLogService { } @Override - public PageResult getOperateLogPage(SysOperateLogPageReqVO reqVO) { + public PageResult getOperateLogPage(OperateLogPageReqVO reqVO) { // 处ç†åŸºäºŽç”¨æˆ·æ˜µç§°çš„æŸ¥è¯¢ Collection userIds = null; if (StrUtil.isNotEmpty(reqVO.getUserNickname())) { @@ -69,7 +68,7 @@ public class SysOperateLogServiceImpl implements SysOperateLogService { } @Override - public List getOperateLogs(SysOperateLogExportReqVO reqVO) { + public List getOperateLogs(OperateLogExportReqVO reqVO) { // 处ç†åŸºäºŽç”¨æˆ·æ˜µç§°çš„æŸ¥è¯¢ Collection userIds = null; if (StrUtil.isNotEmpty(reqVO.getUserNickname())) { diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/SysLoginLogServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/SysLoginLogServiceImpl.java deleted file mode 100644 index 5d708773a7..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/SysLoginLogServiceImpl.java +++ /dev/null @@ -1,33 +0,0 @@ -package cn.iocoder.yudao.module.system.service.logger; - -import cn.iocoder.yudao.module.system.controller.logger.vo.loginlog.SysLoginLogExportReqVO; -import cn.iocoder.yudao.module.system.controller.logger.vo.loginlog.SysLoginLogPageReqVO; -import cn.iocoder.yudao.module.system.dal.mysql.logger.SysLoginLogMapper; -import cn.iocoder.yudao.module.system.service.logger.SysLoginLogService; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import java.util.List; - -/** - * 登录日志 Service 实现 - */ -@Service -public class SysLoginLogServiceImpl implements SysLoginLogService { - - @Resource - private SysLoginLogMapper loginLogMapper; - - @Override - public PageResult getLoginLogPage(SysLoginLogPageReqVO reqVO) { - return loginLogMapper.selectPage(reqVO); - } - - @Override - public List getLoginLogList(SysLoginLogExportReqVO reqVO) { - return loginLogMapper.selectList(reqVO); - } - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/notice/SysNoticeService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/notice/NoticeService.java similarity index 59% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/notice/SysNoticeService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/notice/NoticeService.java index c832beff30..264fc3048f 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/notice/SysNoticeService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/notice/NoticeService.java @@ -1,15 +1,15 @@ package cn.iocoder.yudao.module.system.service.notice; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticeCreateReqVO; -import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticePageReqVO; -import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticeUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.notice.SysNoticeDO; +import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticePageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeUpdateReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO; /** * 通知公告 Service æŽ¥å£ */ -public interface SysNoticeService { +public interface NoticeService { /** * 创建岗ä½å…¬å‘Šå…¬å‘Š @@ -17,14 +17,14 @@ public interface SysNoticeService { * @param reqVO å²—ä½å…¬å‘Šå…¬å‘Šä¿¡æ¯ * @return å²—ä½å…¬å‘Šå…¬å‘Šç¼–å· */ - Long createNotice(SysNoticeCreateReqVO reqVO); + Long createNotice(NoticeCreateReqVO reqVO); /** * æ›´æ–°å²—ä½å…¬å‘Šå…¬å‘Š * * @param reqVO å²—ä½å…¬å‘Šå…¬å‘Šä¿¡æ¯ */ - void updateNotice(SysNoticeUpdateReqVO reqVO); + void updateNotice(NoticeUpdateReqVO reqVO); /** * 删除岗ä½å…¬å‘Šå…¬å‘Šä¿¡æ¯ @@ -39,7 +39,7 @@ public interface SysNoticeService { * @param reqVO 分页æ¡ä»¶ * @return 部门分页列表 */ - PageResult pageNotices(SysNoticePageReqVO reqVO); + PageResult pageNotices(NoticePageReqVO reqVO); /** * 获得岗ä½å…¬å‘Šå…¬å‘Šä¿¡æ¯ @@ -47,6 +47,6 @@ public interface SysNoticeService { * @param id å²—ä½å…¬å‘Šå…¬å‘Šç¼–å· * @return å²—ä½å…¬å‘Šå…¬å‘Šä¿¡æ¯ */ - SysNoticeDO getNotice(Long id); + NoticeDO getNotice(Long id); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/notice/SysNoticeServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/notice/NoticeServiceImpl.java similarity index 56% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/notice/SysNoticeServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/notice/NoticeServiceImpl.java index aa9f4a694d..2ca561ac43 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/notice/SysNoticeServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/notice/NoticeServiceImpl.java @@ -2,19 +2,18 @@ package cn.iocoder.yudao.module.system.service.notice; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticeCreateReqVO; -import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticePageReqVO; -import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticeUpdateReqVO; -import cn.iocoder.yudao.module.system.convert.notice.SysNoticeConvert; +import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticePageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeUpdateReqVO; +import cn.iocoder.yudao.module.system.convert.notice.NoticeConvert; import cn.iocoder.yudao.module.system.dal.mysql.notice.SysNoticeMapper; -import cn.iocoder.yudao.module.system.dal.dataobject.notice.SysNoticeDO; -import cn.iocoder.yudao.module.system.service.notice.SysNoticeService; +import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO; import com.google.common.annotations.VisibleForTesting; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.NOTICE_NOT_FOUND; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.NOTICE_NOT_FOUND; /** * 通知公告 Service 实现类 @@ -22,24 +21,24 @@ import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.NOTICE_ * @author èŠ‹é“æºç  */ @Service -public class SysNoticeServiceImpl implements SysNoticeService { +public class NoticeServiceImpl implements NoticeService { @Resource private SysNoticeMapper noticeMapper; @Override - public Long createNotice(SysNoticeCreateReqVO reqVO) { - SysNoticeDO notice = SysNoticeConvert.INSTANCE.convert(reqVO); + public Long createNotice(NoticeCreateReqVO reqVO) { + NoticeDO notice = NoticeConvert.INSTANCE.convert(reqVO); noticeMapper.insert(notice); return notice.getId(); } @Override - public void updateNotice(SysNoticeUpdateReqVO reqVO) { + public void updateNotice(NoticeUpdateReqVO reqVO) { // 校验是å¦å­˜åœ¨ this.checkNoticeExists(reqVO.getId()); // 更新通知公告 - SysNoticeDO updateObj = SysNoticeConvert.INSTANCE.convert(reqVO); + NoticeDO updateObj = NoticeConvert.INSTANCE.convert(reqVO); noticeMapper.updateById(updateObj); } @@ -52,12 +51,12 @@ public class SysNoticeServiceImpl implements SysNoticeService { } @Override - public PageResult pageNotices(SysNoticePageReqVO reqVO) { + public PageResult pageNotices(NoticePageReqVO reqVO) { return noticeMapper.selectPage(reqVO); } @Override - public SysNoticeDO getNotice(Long id) { + public NoticeDO getNotice(Long id) { return noticeMapper.selectById(id); } @@ -66,7 +65,7 @@ public class SysNoticeServiceImpl implements SysNoticeService { if (id == null) { return; } - SysNoticeDO notice = noticeMapper.selectById(id); + NoticeDO notice = noticeMapper.selectById(id); if (notice == null) { throw ServiceExceptionUtil.exception(NOTICE_NOT_FOUND); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysMenuService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuService.java similarity index 64% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysMenuService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuService.java index 155769a52f..405f390e4b 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysMenuService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuService.java @@ -1,9 +1,9 @@ package cn.iocoder.yudao.module.system.service.permission; -import cn.iocoder.yudao.module.system.controller.permission.vo.menu.SysMenuCreateReqVO; -import cn.iocoder.yudao.module.system.controller.permission.vo.menu.SysMenuListReqVO; -import cn.iocoder.yudao.module.system.controller.permission.vo.menu.SysMenuUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysMenuDO; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuListReqVO; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuUpdateReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; import java.util.Collection; import java.util.List; @@ -13,7 +13,7 @@ import java.util.List; * * @author èŠ‹é“æºç  */ -public interface SysMenuService { +public interface MenuService { /** * åˆå§‹åŒ–èœå•的本地缓存 @@ -26,14 +26,14 @@ public interface SysMenuService { * @param reqVO èœå•ä¿¡æ¯ * @return 创建出æ¥çš„èœå•ç¼–å· */ - Long createMenu(SysMenuCreateReqVO reqVO); + Long createMenu(MenuCreateReqVO reqVO); /** * æ›´æ–°èœå• * * @param reqVO èœå•ä¿¡æ¯ */ - void updateMenu(SysMenuUpdateReqVO reqVO); + void updateMenu(MenuUpdateReqVO reqVO); /** * 删除èœå• @@ -47,7 +47,7 @@ public interface SysMenuService { * * @return èœå•列表 */ - List getMenus(); + List getMenus(); /** * 筛选èœå•列表 @@ -55,7 +55,7 @@ public interface SysMenuService { * @param reqVO 筛选æ¡ä»¶è¯·æ±‚ VO * @return èœå•列表 */ - List getMenus(SysMenuListReqVO reqVO); + List getMenus(MenuListReqVO reqVO); /** * 获得所有èœå•,从缓存中 @@ -66,7 +66,7 @@ public interface SysMenuService { * @param menusStatuses èœå•çŠ¶æ€æ•°ç»„ * @return èœå•列表 */ - List listMenusFromCache(Collection menuTypes, Collection menusStatuses); + List listMenusFromCache(Collection menuTypes, Collection menusStatuses); /** * 获得指定编å·çš„èœå•数组,从缓存中 @@ -78,8 +78,8 @@ public interface SysMenuService { * @param menusStatuses èœå•çŠ¶æ€æ•°ç»„ * @return èœå•数组 */ - List listMenusFromCache(Collection menuIds, Collection menuTypes, - Collection menusStatuses); + List listMenusFromCache(Collection menuIds, Collection menuTypes, + Collection menusStatuses); /** * 获得æƒé™å¯¹åº”çš„èœå•数组 @@ -87,7 +87,7 @@ public interface SysMenuService { * @param permission æƒé™æ ‡è¯† * @return 数组 */ - List getMenuListByPermissionFromCache(String permission); + List getMenuListByPermissionFromCache(String permission); /** * 获得èœå• @@ -95,6 +95,6 @@ public interface SysMenuService { * @param id èœå•ç¼–å· * @return èœå• */ - SysMenuDO getMenu(Long id); + MenuDO getMenu(Long id); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysMenuServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceImpl.java similarity index 80% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysMenuServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceImpl.java index 855d8c9e13..0bae64b787 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysMenuServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceImpl.java @@ -3,17 +3,15 @@ package cn.iocoder.yudao.module.system.service.permission; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.module.system.controller.permission.vo.menu.SysMenuCreateReqVO; -import cn.iocoder.yudao.module.system.controller.permission.vo.menu.SysMenuListReqVO; -import cn.iocoder.yudao.module.system.controller.permission.vo.menu.SysMenuUpdateReqVO; -import cn.iocoder.yudao.module.system.convert.permission.SysMenuConvert; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuListReqVO; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuUpdateReqVO; +import cn.iocoder.yudao.module.system.convert.permission.MenuConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; import cn.iocoder.yudao.module.system.dal.mysql.permission.SysMenuMapper; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysMenuDO; import cn.iocoder.yudao.module.system.enums.permission.MenuIdEnum; import cn.iocoder.yudao.module.system.enums.permission.MenuTypeEnum; -import cn.iocoder.yudao.module.system.mq.producer.permission.SysMenuProducer; -import cn.iocoder.yudao.module.system.service.permission.SysMenuService; -import cn.iocoder.yudao.module.system.service.permission.SysPermissionService; +import cn.iocoder.yudao.module.system.mq.producer.permission.MenuProducer; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableMap; @@ -31,7 +29,7 @@ import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; /** * èœå• Service 实现 @@ -40,7 +38,7 @@ import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; */ @Service @Slf4j -public class SysMenuServiceImpl implements SysMenuService { +public class MenuServiceImpl implements MenuService { /** * 定时执行 {@link #schedulePeriodicRefresh()} 的周期 @@ -54,15 +52,15 @@ public class SysMenuServiceImpl implements SysMenuService { * * 这里声明 volatile ä¿®é¥°çš„åŽŸå› æ˜¯ï¼Œæ¯æ¬¡åˆ·æ–°æ—¶ï¼Œç›´æŽ¥ä¿®æ”¹æŒ‡å‘ */ - private volatile Map menuCache; + private volatile Map menuCache; /** * æƒé™ä¸Žèœå•缓存 - * key:æƒé™ {@link SysMenuDO#getPermission()} + * key:æƒé™ {@link MenuDO#getPermission()} * value:SysMenuDO 数组,因为一个æƒé™å¯èƒ½å¯¹åº”多个 SysMenuDO 对象 * * 这里声明 volatile ä¿®é¥°çš„åŽŸå› æ˜¯ï¼Œæ¯æ¬¡åˆ·æ–°æ—¶ï¼Œç›´æŽ¥ä¿®æ”¹æŒ‡å‘ */ - private volatile Multimap permissionMenuCache; + private volatile Multimap permissionMenuCache; /** * 缓存èœå•的最大更新时间,用于åŽç»­çš„增é‡è½®è¯¢ï¼Œåˆ¤æ–­æ˜¯å¦æœ‰æ›´æ–° */ @@ -71,10 +69,10 @@ public class SysMenuServiceImpl implements SysMenuService { @Resource private SysMenuMapper menuMapper; @Resource - private SysPermissionService permissionService; + private PermissionService permissionService; @Resource - private SysMenuProducer menuProducer; + private MenuProducer menuProducer; /** * åˆå§‹åŒ– {@link #menuCache} å’Œ {@link #permissionMenuCache} 缓存 @@ -83,14 +81,14 @@ public class SysMenuServiceImpl implements SysMenuService { @PostConstruct public synchronized void initLocalCache() { // 获å–èœå•列表,如果有更新 - List menuList = this.loadMenuIfUpdate(maxUpdateTime); + List menuList = this.loadMenuIfUpdate(maxUpdateTime); if (CollUtil.isEmpty(menuList)) { return; } // 构建缓存 - ImmutableMap.Builder menuCacheBuilder = ImmutableMap.builder(); - ImmutableMultimap.Builder permMenuCacheBuilder = ImmutableMultimap.builder(); + ImmutableMap.Builder menuCacheBuilder = ImmutableMap.builder(); + ImmutableMultimap.Builder permMenuCacheBuilder = ImmutableMultimap.builder(); menuList.forEach(menuDO -> { menuCacheBuilder.put(menuDO.getId(), menuDO); permMenuCacheBuilder.put(menuDO.getPermission(), menuDO); @@ -114,7 +112,7 @@ public class SysMenuServiceImpl implements SysMenuService { * @param maxUpdateTime 当å‰èœå•的最大更新时间 * @return èœå•列表 */ - private List loadMenuIfUpdate(Date maxUpdateTime) { + private List loadMenuIfUpdate(Date maxUpdateTime) { // 第一步,判断是å¦è¦æ›´æ–°ã€‚ if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB ä¸€å®šæœ‰æ–°æ•°æ® log.info("[loadMenuIfUpdate][首次加载全é‡èœå•]"); @@ -129,13 +127,13 @@ public class SysMenuServiceImpl implements SysMenuService { } @Override - public Long createMenu(SysMenuCreateReqVO reqVO) { + public Long createMenu(MenuCreateReqVO reqVO) { // 校验父èœå•存在 checkParentResource(reqVO.getParentId(), null); // 校验èœå•(自己) checkResource(reqVO.getParentId(), reqVO.getName(), null); // æ’入数æ®åº“ - SysMenuDO menu = SysMenuConvert.INSTANCE.convert(reqVO); + MenuDO menu = MenuConvert.INSTANCE.convert(reqVO); initMenuProperty(menu); menuMapper.insert(menu); // å‘é€åˆ·æ–°æ¶ˆæ¯ @@ -145,7 +143,7 @@ public class SysMenuServiceImpl implements SysMenuService { } @Override - public void updateMenu(SysMenuUpdateReqVO reqVO) { + public void updateMenu(MenuUpdateReqVO reqVO) { // 校验更新的èœå•是å¦å­˜åœ¨ if (menuMapper.selectById(reqVO.getId()) == null) { throw ServiceExceptionUtil.exception(MENU_NOT_EXISTS); @@ -155,7 +153,7 @@ public class SysMenuServiceImpl implements SysMenuService { // 校验èœå•(自己) checkResource(reqVO.getParentId(), reqVO.getName(), reqVO.getId()); // 更新到数æ®åº“ - SysMenuDO updateObject = SysMenuConvert.INSTANCE.convert(reqVO); + MenuDO updateObject = MenuConvert.INSTANCE.convert(reqVO); initMenuProperty(updateObject); menuMapper.updateById(updateObject); // å‘é€åˆ·æ–°æ¶ˆæ¯ @@ -193,17 +191,17 @@ public class SysMenuServiceImpl implements SysMenuService { } @Override - public List getMenus() { + public List getMenus() { return menuMapper.selectList(); } @Override - public List getMenus(SysMenuListReqVO reqVO) { + public List getMenus(MenuListReqVO reqVO) { return menuMapper.selectList(reqVO); } @Override - public List listMenusFromCache(Collection menuTypes, Collection menusStatuses) { + public List listMenusFromCache(Collection menuTypes, Collection menusStatuses) { // ä»»ä¸€ä¸€ä¸ªå‚æ•°ä¸ºç©ºï¼Œåˆ™è¿”回空 if (CollectionUtils.isAnyEmpty(menuTypes, menusStatuses)) { return Collections.emptyList(); @@ -215,8 +213,8 @@ public class SysMenuServiceImpl implements SysMenuService { } @Override - public List listMenusFromCache(Collection menuIds, Collection menuTypes, - Collection menusStatuses) { + public List listMenusFromCache(Collection menuIds, Collection menuTypes, + Collection menusStatuses) { // ä»»ä¸€ä¸€ä¸ªå‚æ•°ä¸ºç©ºï¼Œåˆ™è¿”回空 if (CollectionUtils.isAnyEmpty(menuIds, menuTypes, menusStatuses)) { return Collections.emptyList(); @@ -228,12 +226,12 @@ public class SysMenuServiceImpl implements SysMenuService { } @Override - public List getMenuListByPermissionFromCache(String permission) { + public List getMenuListByPermissionFromCache(String permission) { return new ArrayList<>(permissionMenuCache.get(permission)); } @Override - public SysMenuDO getMenu(Long id) { + public MenuDO getMenu(Long id) { return menuMapper.selectById(id); } @@ -256,7 +254,7 @@ public class SysMenuServiceImpl implements SysMenuService { if (parentId.equals(childId)) { throw ServiceExceptionUtil.exception(MENU_PARENT_ERROR); } - SysMenuDO menu = menuMapper.selectById(parentId); + MenuDO menu = menuMapper.selectById(parentId); // 父èœå•ä¸å­˜åœ¨ if (menu == null) { throw ServiceExceptionUtil.exception(MENU_PARENT_NOT_EXISTS); @@ -279,7 +277,7 @@ public class SysMenuServiceImpl implements SysMenuService { */ @VisibleForTesting public void checkResource(Long parentId, String name, Long id) { - SysMenuDO menu = menuMapper.selectByParentIdAndName(parentId, name); + MenuDO menu = menuMapper.selectByParentIdAndName(parentId, name); if (menu == null) { return; } @@ -299,7 +297,7 @@ public class SysMenuServiceImpl implements SysMenuService { * * @param menu èœå• */ - private void initMenuProperty(SysMenuDO menu) { + private void initMenuProperty(MenuDO menu) { // èœå•为按钮类型时,无需 componentã€iconã€path 属性,进行置空 if (MenuTypeEnum.BUTTON.getType().equals(menu.getType())) { menu.setComponent(""); diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysPermissionService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionService.java similarity index 90% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysPermissionService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionService.java index aad7a419c1..9983bcbb91 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysPermissionService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionService.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.service.permission; import cn.iocoder.yudao.framework.datapermission.core.dept.service.DeptDataPermissionFrameworkService; import cn.iocoder.yudao.framework.security.core.service.SecurityPermissionFrameworkService; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysMenuDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; import org.springframework.lang.Nullable; import java.util.Collection; @@ -16,7 +16,7 @@ import java.util.Set; * * @author èŠ‹é“æºç  */ -public interface SysPermissionService extends SecurityPermissionFrameworkService, DeptDataPermissionFrameworkService { +public interface PermissionService extends SecurityPermissionFrameworkService, DeptDataPermissionFrameworkService { /** * åˆå§‹åŒ–æƒé™çš„æœ¬åœ°ç¼“å­˜ @@ -33,8 +33,8 @@ public interface SysPermissionService extends SecurityPermissionFrameworkService * @param menusStatuses èœå•çŠ¶æ€æ•°ç»„ * @return èœå•列表 */ - List getRoleMenusFromCache(Collection roleIds, Collection menuTypes, - Collection menusStatuses); + List getRoleMenusFromCache(Collection roleIds, Collection menuTypes, + Collection menusStatuses); /** * 获得用户拥有的角色编å·é›†åˆ diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysPermissionServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceImpl.java similarity index 93% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysPermissionServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceImpl.java index 83ca671dbf..b8da087304 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysPermissionServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceImpl.java @@ -4,14 +4,14 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ArrayUtil; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysMenuDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleMenuDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleMenuDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysUserRoleDO; import cn.iocoder.yudao.module.system.dal.mysql.permission.SysRoleMenuMapper; import cn.iocoder.yudao.module.system.dal.mysql.permission.SysUserRoleMapper; -import cn.iocoder.yudao.module.system.mq.producer.permission.SysPermissionProducer; -import cn.iocoder.yudao.module.system.service.dept.SysDeptService; +import cn.iocoder.yudao.module.system.mq.producer.permission.PermissionProducer; +import cn.iocoder.yudao.module.system.service.dept.DeptService; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.collection.MapUtils; import cn.iocoder.yudao.framework.common.util.json.JsonUtils; @@ -40,12 +40,12 @@ import java.util.*; */ @Service("ss") // 使用 Spring Security 的缩写,方便食用 @Slf4j -public class SysPermissionServiceImpl implements SysPermissionService { +public class PermissionServiceImpl implements PermissionService { /** * LoginUser çš„ Context 缓存 Key */ - public static final String CONTEXT_KEY = SysPermissionServiceImpl.class.getSimpleName(); + public static final String CONTEXT_KEY = PermissionServiceImpl.class.getSimpleName(); /** * 定时执行 {@link #schedulePeriodicRefresh()} 的周期 @@ -80,14 +80,14 @@ public class SysPermissionServiceImpl implements SysPermissionService { private SysUserRoleMapper userRoleMapper; @Resource - private SysRoleService roleService; + private RoleService roleService; @Resource - private SysMenuService menuService; + private MenuService menuService; @Resource - private SysDeptService deptService; + private DeptService deptService; @Resource - private SysPermissionProducer permissionProducer; + private PermissionProducer permissionProducer; /** * åˆå§‹åŒ– {@link #roleMenuCache} å’Œ {@link #menuRoleCache} 缓存 @@ -97,7 +97,7 @@ public class SysPermissionServiceImpl implements SysPermissionService { public void initLocalCache() { Date now = new Date(); // 获å–角色与èœå•的关è”列表,如果有更新 - List roleMenuList = this.loadRoleMenuIfUpdate(maxUpdateTime); + List roleMenuList = this.loadRoleMenuIfUpdate(maxUpdateTime); if (CollUtil.isEmpty(roleMenuList)) { return; } @@ -128,7 +128,7 @@ public class SysPermissionServiceImpl implements SysPermissionService { * @param maxUpdateTime 当å‰è§’色与èœå•的关è”的最大更新时间 * @return 角色与èœå•的关è”列表 */ - private List loadRoleMenuIfUpdate(Date maxUpdateTime) { + private List loadRoleMenuIfUpdate(Date maxUpdateTime) { // 第一步,判断是å¦è¦æ›´æ–°ã€‚ if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB ä¸€å®šæœ‰æ–°æ•°æ® log.info("[loadRoleMenuIfUpdate][首次加载全é‡è§’色与èœå•的关è”]"); @@ -143,8 +143,8 @@ public class SysPermissionServiceImpl implements SysPermissionService { } @Override - public List getRoleMenusFromCache(Collection roleIds, Collection menuTypes, - Collection menusStatuses) { + public List getRoleMenusFromCache(Collection roleIds, Collection menuTypes, + Collection menusStatuses) { // ä»»ä¸€ä¸€ä¸ªå‚æ•°ä¸ºç©ºæ—¶ï¼Œä¸è¿”回任何èœå• if (CollectionUtils.isAnyEmpty(roleIds, menusStatuses, menusStatuses)) { return Collections.emptyList(); @@ -178,11 +178,11 @@ public class SysPermissionServiceImpl implements SysPermissionService { // 如果是管ç†å‘˜çš„æƒ…况下,获å–全部èœå•ç¼–å· SysRoleDO role = roleService.getRole(roleId); if (roleService.hasAnyAdmin(Collections.singletonList(role))) { - return CollectionUtils.convertSet(menuService.getMenus(), SysMenuDO::getId); + return CollectionUtils.convertSet(menuService.getMenus(), MenuDO::getId); } // 如果是éžç®¡ç†å‘˜çš„æƒ…况下,获得拥有的èœå•ç¼–å· return CollectionUtils.convertSet(roleMenuMapper.selectListByRoleId(roleId), - SysRoleMenuDO::getMenuId); + RoleMenuDO::getMenuId); } @Override @@ -190,7 +190,7 @@ public class SysPermissionServiceImpl implements SysPermissionService { public void assignRoleMenu(Long roleId, Set menuIds) { // 获得角色拥有èœå•ç¼–å· Set dbMenuIds = CollectionUtils.convertSet(roleMenuMapper.selectListByRoleId(roleId), - SysRoleMenuDO::getMenuId); + RoleMenuDO::getMenuId); // 计算新增和删除的èœå•ç¼–å· Collection createMenuIds = CollUtil.subtract(menuIds, dbMenuIds); Collection deleteMenuIds = CollUtil.subtract(dbMenuIds, menuIds); @@ -310,7 +310,7 @@ public class SysPermissionServiceImpl implements SysPermissionService { // é历æƒé™ï¼Œåˆ¤æ–­æ˜¯å¦æœ‰ä¸€ä¸ªæ»¡è¶³ return Arrays.stream(permissions).anyMatch(permission -> { - List menuList = menuService.getMenuListByPermissionFromCache(permission); + List menuList = menuService.getMenuListByPermissionFromCache(permission); // 采用严格模å¼ï¼Œå¦‚æžœæƒé™æ‰¾ä¸åˆ°å¯¹åº”çš„ Menu çš„è¯ï¼Œè®¤ä¸º if (CollUtil.isEmpty(menuList)) { return false; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysRoleService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleService.java similarity index 81% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysRoleService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleService.java index 47de67f8a6..0bf13785dd 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysRoleService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleService.java @@ -1,10 +1,10 @@ package cn.iocoder.yudao.module.system.service.permission; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.system.controller.permission.vo.role.SysRoleCreateReqVO; -import cn.iocoder.yudao.module.system.controller.permission.vo.role.SysRoleExportReqVO; -import cn.iocoder.yudao.module.system.controller.permission.vo.role.SysRolePageReqVO; -import cn.iocoder.yudao.module.system.controller.permission.vo.role.SysRoleUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleUpdateReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; import org.springframework.lang.Nullable; @@ -17,7 +17,7 @@ import java.util.Set; * * @author èŠ‹é“æºç  */ -public interface SysRoleService { +public interface RoleService { /** * åˆå§‹åŒ–角色的本地缓存 @@ -30,14 +30,14 @@ public interface SysRoleService { * @param reqVO åˆ›å»ºè§’è‰²ä¿¡æ¯ * @return è§’è‰²ç¼–å· */ - Long createRole(SysRoleCreateReqVO reqVO); + Long createRole(RoleCreateReqVO reqVO); /** * 更新角色 * * @param reqVO æ›´æ–°è§’è‰²ä¿¡æ¯ */ - void updateRole(SysRoleUpdateReqVO reqVO); + void updateRole(RoleUpdateReqVO reqVO); /** * 删除角色 @@ -119,7 +119,7 @@ public interface SysRoleService { * @param reqVO 角色分页查询 * @return 角色分页结果 */ - PageResult getRolePage(SysRolePageReqVO reqVO); + PageResult getRolePage(RolePageReqVO reqVO); /** * 获得角色列表 @@ -127,7 +127,7 @@ public interface SysRoleService { * @param reqVO 列表查询 * @return 角色列表 */ - List getRoleList(SysRoleExportReqVO reqVO); + List getRoleList(RoleExportReqVO reqVO); diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysRoleServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceImpl.java similarity index 86% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysRoleServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceImpl.java index f0c8b167c4..cd8cbe8197 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysRoleServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceImpl.java @@ -5,18 +5,16 @@ import cn.hutool.core.collection.CollectionUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.module.system.controller.permission.vo.role.SysRoleCreateReqVO; -import cn.iocoder.yudao.module.system.controller.permission.vo.role.SysRoleExportReqVO; -import cn.iocoder.yudao.module.system.controller.permission.vo.role.SysRolePageReqVO; -import cn.iocoder.yudao.module.system.controller.permission.vo.role.SysRoleUpdateReqVO; -import cn.iocoder.yudao.module.system.convert.permission.SysRoleConvert; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleUpdateReqVO; +import cn.iocoder.yudao.module.system.convert.permission.RoleConvert; import cn.iocoder.yudao.module.system.dal.mysql.permission.SysRoleMapper; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; import cn.iocoder.yudao.module.system.enums.permission.RoleCodeEnum; -import cn.iocoder.yudao.module.system.enums.permission.SysRoleTypeEnum; -import cn.iocoder.yudao.module.system.mq.producer.permission.SysRoleProducer; -import cn.iocoder.yudao.module.system.service.permission.SysPermissionService; -import cn.iocoder.yudao.module.system.service.permission.SysRoleService; +import cn.iocoder.yudao.module.system.enums.permission.RoleTypeEnum; +import cn.iocoder.yudao.module.system.mq.producer.permission.RoleProducer; import cn.iocoder.yudao.framework.security.core.enums.DataScopeEnum; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableMap; @@ -34,7 +32,7 @@ import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** @@ -44,7 +42,7 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU */ @Service @Slf4j -public class SysRoleServiceImpl implements SysRoleService { +public class RoleServiceImpl implements RoleService { /** * 定时执行 {@link #schedulePeriodicRefresh()} 的周期 @@ -65,13 +63,13 @@ public class SysRoleServiceImpl implements SysRoleService { private volatile Date maxUpdateTime; @Resource - private SysPermissionService permissionService; + private PermissionService permissionService; @Resource private SysRoleMapper roleMapper; @Resource - private SysRoleProducer roleProducer; + private RoleProducer roleProducer; /** * åˆå§‹åŒ– {@link #roleCache} 缓存 @@ -121,12 +119,12 @@ public class SysRoleServiceImpl implements SysRoleService { } @Override - public Long createRole(SysRoleCreateReqVO reqVO) { + public Long createRole(RoleCreateReqVO reqVO) { // 校验角色 checkDuplicateRole(reqVO.getName(), reqVO.getCode(), null); // æ’入到数æ®åº“ - SysRoleDO role = SysRoleConvert.INSTANCE.convert(reqVO); - role.setType(SysRoleTypeEnum.CUSTOM.getType()); + SysRoleDO role = RoleConvert.INSTANCE.convert(reqVO); + role.setType(RoleTypeEnum.CUSTOM.getType()); role.setStatus(CommonStatusEnum.ENABLE.getStatus()); role.setDataScope(DataScopeEnum.ALL.getScope()); // é»˜è®¤å¯æŸ¥çœ‹æ‰€æœ‰æ•°æ®ã€‚原因是,å¯èƒ½ä¸€äº›é¡¹ç›®ä¸éœ€è¦é¡¹ç›®æƒé™ roleMapper.insert(role); @@ -137,13 +135,13 @@ public class SysRoleServiceImpl implements SysRoleService { } @Override - public void updateRole(SysRoleUpdateReqVO reqVO) { + public void updateRole(RoleUpdateReqVO reqVO) { // 校验是å¦å¯ä»¥æ›´æ–° this.checkUpdateRole(reqVO.getId()); // 校验角色的唯一字段是å¦é‡å¤ checkDuplicateRole(reqVO.getName(), reqVO.getCode(), reqVO.getId()); // 更新到数æ®åº“ - SysRoleDO updateObject = SysRoleConvert.INSTANCE.convert(reqVO); + SysRoleDO updateObject = RoleConvert.INSTANCE.convert(reqVO); roleMapper.updateById(updateObject); // å‘é€åˆ·æ–°æ¶ˆæ¯ roleProducer.sendRoleRefreshMessage(); @@ -229,12 +227,12 @@ public class SysRoleServiceImpl implements SysRoleService { } @Override - public PageResult getRolePage(SysRolePageReqVO reqVO) { + public PageResult getRolePage(RolePageReqVO reqVO) { return roleMapper.selectPage(reqVO); } @Override - public List getRoleList(SysRoleExportReqVO reqVO) { + public List getRoleList(RoleExportReqVO reqVO) { return roleMapper.listRoles(reqVO); } @@ -278,7 +276,7 @@ public class SysRoleServiceImpl implements SysRoleService { throw exception(ROLE_NOT_EXISTS); } // 内置角色,ä¸å…许删除 - if (SysRoleTypeEnum.SYSTEM.getType().equals(roleDO.getType())) { + if (RoleTypeEnum.SYSTEM.getType().equals(roleDO.getType())) { throw exception(ROLE_CAN_NOT_UPDATE_SYSTEM_TYPE_ROLE); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsChannelService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelService.java similarity index 71% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsChannelService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelService.java index d7fa604e29..d57a990c8e 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsChannelService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelService.java @@ -2,9 +2,9 @@ package cn.iocoder.yudao.module.system.service.sms; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.system.controller.sms.vo.channel.SysSmsChannelCreateReqVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.channel.SysSmsChannelPageReqVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.channel.SysSmsChannelUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelUpdateReqVO; import javax.validation.Valid; import java.util.Collection; @@ -16,7 +16,7 @@ import java.util.List; * @author zzf * @date 2021/1/25 9:24 */ -public interface SysSmsChannelService { +public interface SmsChannelService { /** * åˆå§‹åŒ–短信客户端 @@ -29,14 +29,14 @@ public interface SysSmsChannelService { * @param createReqVO åˆ›å»ºä¿¡æ¯ * @return ç¼–å· */ - Long createSmsChannel(@Valid SysSmsChannelCreateReqVO createReqVO); + Long createSmsChannel(@Valid SmsChannelCreateReqVO createReqVO); /** * æ›´æ–°çŸ­ä¿¡æ¸ é“ * * @param updateReqVO æ›´æ–°ä¿¡æ¯ */ - void updateSmsChannel(@Valid SysSmsChannelUpdateReqVO updateReqVO); + void updateSmsChannel(@Valid SmsChannelUpdateReqVO updateReqVO); /** * åˆ é™¤çŸ­ä¿¡æ¸ é“ @@ -74,6 +74,6 @@ public interface SysSmsChannelService { * @param pageReqVO 分页查询 * @return 短信渠é“分页 */ - PageResult getSmsChannelPage(SysSmsChannelPageReqVO pageReqVO); + PageResult getSmsChannelPage(SmsChannelPageReqVO pageReqVO); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsChannelServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceImpl.java similarity index 77% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsChannelServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceImpl.java index b36016a6bd..6c26e82035 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsChannelServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceImpl.java @@ -1,14 +1,12 @@ package cn.iocoder.yudao.module.system.service.sms; import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.module.system.controller.sms.vo.channel.SysSmsChannelCreateReqVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.channel.SysSmsChannelPageReqVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.channel.SysSmsChannelUpdateReqVO; -import cn.iocoder.yudao.module.system.convert.sms.SysSmsChannelConvert; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelUpdateReqVO; +import cn.iocoder.yudao.module.system.convert.sms.SmsChannelConvert; import cn.iocoder.yudao.module.system.dal.mysql.sms.SysSmsChannelMapper; -import cn.iocoder.yudao.module.system.mq.producer.sms.SysSmsProducer; -import cn.iocoder.yudao.module.system.service.sms.SysSmsChannelService; -import cn.iocoder.yudao.module.system.service.sms.SysSmsTemplateService; +import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; @@ -25,8 +23,8 @@ import java.util.Comparator; import java.util.Date; import java.util.List; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.SMS_CHANNEL_HAS_CHILDREN; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.SMS_CHANNEL_NOT_EXISTS; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.SMS_CHANNEL_HAS_CHILDREN; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.SMS_CHANNEL_NOT_EXISTS; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** @@ -37,7 +35,7 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU */ @Service @Slf4j -public class SysSmsChannelServiceImpl implements SysSmsChannelService { +public class SmsChannelServiceImpl implements SmsChannelService { /** * 定时执行 {@link #schedulePeriodicRefresh()} 的周期 @@ -57,10 +55,10 @@ public class SysSmsChannelServiceImpl implements SysSmsChannelService { private SysSmsChannelMapper smsChannelMapper; @Resource - private SysSmsTemplateService smsTemplateService; + private SmsTemplateService smsTemplateService; @Resource - private SysSmsProducer smsProducer; + private SmsProducer smsProducer; @Override @PostConstruct @@ -72,7 +70,7 @@ public class SysSmsChannelServiceImpl implements SysSmsChannelService { } // 创建或更新短信 Client - List propertiesList = SysSmsChannelConvert.INSTANCE.convertList02(smsChannels); + List propertiesList = SmsChannelConvert.INSTANCE.convertList02(smsChannels); propertiesList.forEach(properties -> smsClientFactory.createOrUpdateSmsClient(properties)); // 写入缓存 @@ -108,9 +106,9 @@ public class SysSmsChannelServiceImpl implements SysSmsChannelService { } @Override - public Long createSmsChannel(SysSmsChannelCreateReqVO createReqVO) { + public Long createSmsChannel(SmsChannelCreateReqVO createReqVO) { // æ’å…¥ - SysSmsChannelDO smsChannel = SysSmsChannelConvert.INSTANCE.convert(createReqVO); + SysSmsChannelDO smsChannel = SmsChannelConvert.INSTANCE.convert(createReqVO); smsChannelMapper.insert(smsChannel); // å‘é€åˆ·æ–°æ¶ˆæ¯ smsProducer.sendSmsChannelRefreshMessage(); @@ -119,11 +117,11 @@ public class SysSmsChannelServiceImpl implements SysSmsChannelService { } @Override - public void updateSmsChannel(SysSmsChannelUpdateReqVO updateReqVO) { + public void updateSmsChannel(SmsChannelUpdateReqVO updateReqVO) { // 校验存在 this.validateSmsChannelExists(updateReqVO.getId()); // æ›´æ–° - SysSmsChannelDO updateObj = SysSmsChannelConvert.INSTANCE.convert(updateReqVO); + SysSmsChannelDO updateObj = SmsChannelConvert.INSTANCE.convert(updateReqVO); smsChannelMapper.updateById(updateObj); // å‘é€åˆ·æ–°æ¶ˆæ¯ smsProducer.sendSmsChannelRefreshMessage(); @@ -165,7 +163,7 @@ public class SysSmsChannelServiceImpl implements SysSmsChannelService { } @Override - public PageResult getSmsChannelPage(SysSmsChannelPageReqVO pageReqVO) { + public PageResult getSmsChannelPage(SmsChannelPageReqVO pageReqVO) { return smsChannelMapper.selectPage(pageReqVO); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsLogService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogService.java similarity index 62% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsLogService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogService.java index 547bc6b0de..fcd66e7a1a 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsLogService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogService.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.service.sms; -import cn.iocoder.yudao.module.system.controller.sms.vo.log.SysSmsLogExportReqVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.log.SysSmsLogPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogPageReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -13,7 +13,7 @@ import java.util.List; * @author zzf * @date 13:48 2021/3/2 */ -public interface SysSmsLogService { +public interface SmsLogService { /** * 获得短信日志分页 @@ -21,7 +21,7 @@ public interface SysSmsLogService { * @param pageReqVO 分页查询 * @return 短信日志分页 */ - PageResult getSmsLogPage(SysSmsLogPageReqVO pageReqVO); + PageResult getSmsLogPage(SmsLogPageReqVO pageReqVO); /** * 获得短信日志列表, 用于 Excel 导出 @@ -29,6 +29,6 @@ public interface SysSmsLogService { * @param exportReqVO 查询æ¡ä»¶ * @return 短信日志列表 */ - List getSmsLogList(SysSmsLogExportReqVO exportReqVO); + List getSmsLogList(SmsLogExportReqVO exportReqVO); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsLogServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceImpl.java similarity index 60% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsLogServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceImpl.java index f390c98c5c..d09b77e1da 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsLogServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceImpl.java @@ -1,9 +1,8 @@ package cn.iocoder.yudao.module.system.service.sms; -import cn.iocoder.yudao.module.system.controller.sms.vo.log.SysSmsLogExportReqVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.log.SysSmsLogPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogPageReqVO; import cn.iocoder.yudao.module.system.dal.mysql.sms.SysSmsLogMapper; -import cn.iocoder.yudao.module.system.service.sms.SysSmsLogService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import lombok.extern.slf4j.Slf4j; @@ -20,18 +19,18 @@ import java.util.List; */ @Slf4j @Service -public class SysSmsLogServiceImpl implements SysSmsLogService { +public class SmsLogServiceImpl implements SmsLogService { @Resource private SysSmsLogMapper smsLogMapper; @Override - public PageResult getSmsLogPage(SysSmsLogPageReqVO pageReqVO) { + public PageResult getSmsLogPage(SmsLogPageReqVO pageReqVO) { return smsLogMapper.selectPage(pageReqVO); } @Override - public List getSmsLogList(SysSmsLogExportReqVO exportReqVO) { + public List getSmsLogList(SmsLogExportReqVO exportReqVO) { return smsLogMapper.selectList(exportReqVO); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsTemplateService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateService.java similarity index 69% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsTemplateService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateService.java index 96873a0c14..397ff9faa8 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsTemplateService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateService.java @@ -1,9 +1,9 @@ package cn.iocoder.yudao.module.system.service.sms; -import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplateCreateReqVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplateExportReqVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplatePageReqVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplateUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplatePageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateUpdateReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -17,7 +17,7 @@ import java.util.List; * @author zzf * @date 2021/1/25 9:24 */ -public interface SysSmsTemplateService { +public interface SmsTemplateService { /** * èŽ·å¾—çŸ­ä¿¡æ¨¡æ¿ @@ -33,14 +33,14 @@ public interface SysSmsTemplateService { * @param createReqVO åˆ›å»ºä¿¡æ¯ * @return ç¼–å· */ - Long createSmsTemplate(@Valid SysSmsTemplateCreateReqVO createReqVO); + Long createSmsTemplate(@Valid SmsTemplateCreateReqVO createReqVO); /** * æ›´æ–°çŸ­ä¿¡æ¨¡æ¿ * * @param updateReqVO æ›´æ–°ä¿¡æ¯ */ - void updateSmsTemplate(@Valid SysSmsTemplateUpdateReqVO updateReqVO); + void updateSmsTemplate(@Valid SmsTemplateUpdateReqVO updateReqVO); /** * åˆ é™¤çŸ­ä¿¡æ¨¡æ¿ @@ -71,7 +71,7 @@ public interface SysSmsTemplateService { * @param pageReqVO 分页查询 * @return 短信模æ¿åˆ†é¡µ */ - PageResult getSmsTemplatePage(SysSmsTemplatePageReqVO pageReqVO); + PageResult getSmsTemplatePage(SmsTemplatePageReqVO pageReqVO); /** * 获得短信模æ¿åˆ—表, 用于 Excel 导出 @@ -79,7 +79,7 @@ public interface SysSmsTemplateService { * @param exportReqVO 查询æ¡ä»¶ * @return 短信模æ¿åˆ†é¡µ */ - List getSmsTemplateList(SysSmsTemplateExportReqVO exportReqVO); + List getSmsTemplateList(SmsTemplateExportReqVO exportReqVO); /** * 获得指定短信渠é“ä¸‹çš„çŸ­ä¿¡æ¨¡æ¿æ•°é‡ diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsTemplateServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceImpl.java similarity index 80% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsTemplateServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceImpl.java index 3b6e463285..cc145d97e6 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsTemplateServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceImpl.java @@ -1,15 +1,13 @@ package cn.iocoder.yudao.module.system.service.sms; import cn.hutool.core.util.ReUtil; -import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplateCreateReqVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplateExportReqVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplatePageReqVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplateUpdateReqVO; -import cn.iocoder.yudao.module.system.convert.sms.SysSmsTemplateConvert; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplatePageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateUpdateReqVO; +import cn.iocoder.yudao.module.system.convert.sms.SmsTemplateConvert; import cn.iocoder.yudao.module.system.dal.mysql.sms.SysSmsTemplateMapper; -import cn.iocoder.yudao.module.system.mq.producer.sms.SysSmsProducer; -import cn.iocoder.yudao.module.system.service.sms.SysSmsChannelService; -import cn.iocoder.yudao.module.system.service.sms.SysSmsTemplateService; +import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; @@ -29,7 +27,7 @@ import java.util.List; import java.util.Objects; import java.util.regex.Pattern; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** @@ -40,7 +38,7 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU */ @Service @Slf4j -public class SysSmsTemplateServiceImpl implements SysSmsTemplateService { +public class SmsTemplateServiceImpl implements SmsTemplateService { /** * 正则表达å¼ï¼ŒåŒ¹é… {} 中的å˜é‡ @@ -51,13 +49,13 @@ public class SysSmsTemplateServiceImpl implements SysSmsTemplateService { private SysSmsTemplateMapper smsTemplateMapper; @Resource - private SysSmsChannelService smsChannelService; + private SmsChannelService smsChannelService; @Resource private SmsClientFactory smsClientFactory; @Resource - private SysSmsProducer smsProducer; + private SmsProducer smsProducer; @Override public SysSmsTemplateDO getSmsTemplateByCode(String code) { @@ -70,7 +68,7 @@ public class SysSmsTemplateServiceImpl implements SysSmsTemplateService { } @Override - public Long createSmsTemplate(SysSmsTemplateCreateReqVO createReqVO) { + public Long createSmsTemplate(SmsTemplateCreateReqVO createReqVO) { // æ ¡éªŒçŸ­ä¿¡æ¸ é“ SysSmsChannelDO channelDO = checkSmsChannel(createReqVO.getChannelId()); // æ ¡éªŒçŸ­ä¿¡ç¼–ç æ˜¯å¦é‡å¤ @@ -79,7 +77,7 @@ public class SysSmsTemplateServiceImpl implements SysSmsTemplateService { checkApiTemplate(createReqVO.getChannelId(), createReqVO.getApiTemplateId()); // æ’å…¥ - SysSmsTemplateDO template = SysSmsTemplateConvert.INSTANCE.convert(createReqVO); + SysSmsTemplateDO template = SmsTemplateConvert.INSTANCE.convert(createReqVO); template.setParams(parseTemplateContentParams(template.getContent())); template.setChannelCode(channelDO.getCode()); smsTemplateMapper.insert(template); @@ -90,7 +88,7 @@ public class SysSmsTemplateServiceImpl implements SysSmsTemplateService { } @Override - public void updateSmsTemplate(SysSmsTemplateUpdateReqVO updateReqVO) { + public void updateSmsTemplate(SmsTemplateUpdateReqVO updateReqVO) { // 校验存在 this.validateSmsTemplateExists(updateReqVO.getId()); // æ ¡éªŒçŸ­ä¿¡æ¸ é“ @@ -101,7 +99,7 @@ public class SysSmsTemplateServiceImpl implements SysSmsTemplateService { checkApiTemplate(updateReqVO.getChannelId(), updateReqVO.getApiTemplateId()); // æ›´æ–° - SysSmsTemplateDO updateObj = SysSmsTemplateConvert.INSTANCE.convert(updateReqVO); + SysSmsTemplateDO updateObj = SmsTemplateConvert.INSTANCE.convert(updateReqVO); updateObj.setParams(parseTemplateContentParams(updateObj.getContent())); updateObj.setChannelCode(channelDO.getCode()); smsTemplateMapper.updateById(updateObj); @@ -136,12 +134,12 @@ public class SysSmsTemplateServiceImpl implements SysSmsTemplateService { } @Override - public PageResult getSmsTemplatePage(SysSmsTemplatePageReqVO pageReqVO) { + public PageResult getSmsTemplatePage(SmsTemplatePageReqVO pageReqVO) { return smsTemplateMapper.selectPage(pageReqVO); } @Override - public List getSmsTemplateList(SysSmsTemplateExportReqVO exportReqVO) { + public List getSmsTemplateList(SmsTemplateExportReqVO exportReqVO) { return smsTemplateMapper.selectList(exportReqVO); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/SysTenantService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantService.java similarity index 67% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/SysTenantService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantService.java index 357e23ad74..63ebfd5f3b 100755 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/SysTenantService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantService.java @@ -1,9 +1,9 @@ package cn.iocoder.yudao.module.system.service.tenant; -import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantCreateReqVO; -import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantExportReqVO; -import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantPageReqVO; -import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantUpdateReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.tenant.SysTenantDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -16,7 +16,7 @@ import java.util.List; * * @author èŠ‹é“æºç  */ -public interface SysTenantService { +public interface TenantService { /** * 创建租户 @@ -24,14 +24,14 @@ public interface SysTenantService { * @param createReqVO åˆ›å»ºä¿¡æ¯ * @return ç¼–å· */ - Long createTenant(@Valid SysTenantCreateReqVO createReqVO); + Long createTenant(@Valid TenantCreateReqVO createReqVO); /** * 更新租户 * * @param updateReqVO æ›´æ–°ä¿¡æ¯ */ - void updateTenant(@Valid SysTenantUpdateReqVO updateReqVO); + void updateTenant(@Valid TenantUpdateReqVO updateReqVO); /** * 删除租户 @@ -62,7 +62,7 @@ public interface SysTenantService { * @param pageReqVO 分页查询 * @return 租户分页 */ - PageResult getTenantPage(SysTenantPageReqVO pageReqVO); + PageResult getTenantPage(TenantPageReqVO pageReqVO); /** * 获得租户列表, 用于 Excel 导出 @@ -70,7 +70,7 @@ public interface SysTenantService { * @param exportReqVO 查询æ¡ä»¶ * @return 租户列表 */ - List getTenantList(SysTenantExportReqVO exportReqVO); + List getTenantList(TenantExportReqVO exportReqVO); /** * 获得å字对应的租户 diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/SysTenantServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImpl.java similarity index 63% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/SysTenantServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImpl.java index bc76d2badd..297dbbbcc5 100755 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/SysTenantServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImpl.java @@ -1,12 +1,11 @@ package cn.iocoder.yudao.module.system.service.tenant; -import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantCreateReqVO; -import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantExportReqVO; -import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantPageReqVO; -import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantUpdateReqVO; -import cn.iocoder.yudao.module.system.convert.tenant.SysTenantConvert; +import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantUpdateReqVO; +import cn.iocoder.yudao.module.system.convert.tenant.TenantConvert; import cn.iocoder.yudao.module.system.dal.mysql.tenant.SysTenantMapper; -import cn.iocoder.yudao.module.system.service.tenant.SysTenantService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.tenant.SysTenantDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.springframework.stereotype.Service; @@ -16,7 +15,7 @@ import javax.annotation.Resource; import java.util.Collection; import java.util.List; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.TENANT_NOT_EXISTS; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.TENANT_NOT_EXISTS; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** @@ -26,26 +25,26 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU */ @Service @Validated -public class SysTenantServiceImpl implements SysTenantService { +public class TenantServiceImpl implements TenantService { @Resource private SysTenantMapper tenantMapper; @Override - public Long createTenant(SysTenantCreateReqVO createReqVO) { + public Long createTenant(TenantCreateReqVO createReqVO) { // æ’å…¥ - SysTenantDO tenant = SysTenantConvert.INSTANCE.convert(createReqVO); + SysTenantDO tenant = TenantConvert.INSTANCE.convert(createReqVO); tenantMapper.insert(tenant); // 返回 return tenant.getId(); } @Override - public void updateTenant(SysTenantUpdateReqVO updateReqVO) { + public void updateTenant(TenantUpdateReqVO updateReqVO) { // 校验存在 this.validateTenantExists(updateReqVO.getId()); // æ›´æ–° - SysTenantDO updateObj = SysTenantConvert.INSTANCE.convert(updateReqVO); + SysTenantDO updateObj = TenantConvert.INSTANCE.convert(updateReqVO); tenantMapper.updateById(updateObj); } @@ -74,12 +73,12 @@ public class SysTenantServiceImpl implements SysTenantService { } @Override - public PageResult getTenantPage(SysTenantPageReqVO pageReqVO) { + public PageResult getTenantPage(TenantPageReqVO pageReqVO) { return tenantMapper.selectPage(pageReqVO); } @Override - public List getTenantList(SysTenantExportReqVO exportReqVO) { + public List getTenantList(TenantExportReqVO exportReqVO) { return tenantMapper.selectList(exportReqVO); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/SysUserService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/UserService.java similarity index 78% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/SysUserService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/UserService.java index a1f428b7e1..15d62caf28 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/SysUserService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/UserService.java @@ -1,8 +1,8 @@ package cn.iocoder.yudao.module.system.service.user; -import cn.iocoder.yudao.module.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO; -import cn.iocoder.yudao.module.system.controller.user.vo.profile.SysUserProfileUpdateReqVO; -import cn.iocoder.yudao.module.system.controller.user.vo.user.*; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -14,7 +14,7 @@ import java.util.*; * * @author èŠ‹é“æºç  */ -public interface SysUserService { +public interface UserService { /** * 创建用户 @@ -22,14 +22,14 @@ public interface SysUserService { * @param reqVO ç”¨æˆ·ä¿¡æ¯ * @return ç”¨æˆ·ç¼–å· */ - Long createUser(SysUserCreateReqVO reqVO); + Long createUser(UserCreateReqVO reqVO); /** * 修改用户 * * @param reqVO ç”¨æˆ·ä¿¡æ¯ */ - void updateUser(SysUserUpdateReqVO reqVO); + void updateUser(UserUpdateReqVO reqVO); /** * 更新用户的最åŽç™»é™†ä¿¡æ¯ @@ -45,7 +45,7 @@ public interface SysUserService { * @param id ç”¨æˆ·ç¼–å· * @param reqVO ç”¨æˆ·ä¸ªäººä¿¡æ¯ */ - void updateUserProfile(Long id, SysUserProfileUpdateReqVO reqVO); + void updateUserProfile(Long id, UserProfileUpdateReqVO reqVO); /** * ä¿®æ”¹ç”¨æˆ·ä¸ªäººå¯†ç  @@ -53,7 +53,7 @@ public interface SysUserService { * @param id ç”¨æˆ·ç¼–å· * @param reqVO æ›´æ–°ç”¨æˆ·ä¸ªäººå¯†ç  */ - void updateUserPassword(Long id, SysUserProfileUpdatePasswordReqVO reqVO); + void updateUserPassword(Long id, UserProfileUpdatePasswordReqVO reqVO); /** * æ›´æ–°ç”¨æˆ·å¤´åƒ @@ -100,7 +100,7 @@ public interface SysUserService { * @param reqVO 分页æ¡ä»¶ * @return 分页列表 */ - PageResult getUserPage(SysUserPageReqVO reqVO); + PageResult getUserPage(UserPageReqVO reqVO); /** * 获得用户 @@ -116,7 +116,7 @@ public interface SysUserService { * @param reqVO 列表请求 * @return 用户列表 */ - List getUsers(SysUserExportReqVO reqVO); + List getUsers(UserExportReqVO reqVO); @@ -143,7 +143,7 @@ public interface SysUserService { * @param isUpdateSupport æ˜¯å¦æ”¯æŒæ›´æ–° * @return 导入结果 */ - SysUserImportRespVO importUsers(List importUsers, boolean isUpdateSupport); + UserImportRespVO importUsers(List importUsers, boolean isUpdateSupport); /** * 获得指定状æ€çš„用户们 diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/SysUserServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/UserServiceImpl.java similarity index 86% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/SysUserServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/UserServiceImpl.java index 5eab9a83cd..d5d7faefcc 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/SysUserServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/UserServiceImpl.java @@ -4,17 +4,16 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.module.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO; -import cn.iocoder.yudao.module.system.controller.user.vo.profile.SysUserProfileUpdateReqVO; -import cn.iocoder.yudao.module.system.controller.user.vo.user.*; -import cn.iocoder.yudao.module.system.convert.user.SysUserConvert; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; +import cn.iocoder.yudao.module.system.convert.user.UserConvert; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; import cn.iocoder.yudao.module.system.dal.mysql.user.SysUserMapper; -import cn.iocoder.yudao.module.system.service.dept.SysDeptService; -import cn.iocoder.yudao.module.system.service.dept.SysPostService; -import cn.iocoder.yudao.module.system.service.permission.SysPermissionService; -import cn.iocoder.yudao.module.system.service.user.SysUserService; +import cn.iocoder.yudao.module.system.service.dept.DeptService; +import cn.iocoder.yudao.module.system.service.dept.PostService; +import cn.iocoder.yudao.module.system.service.permission.PermissionService; import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; @@ -33,17 +32,17 @@ import javax.annotation.Resource; import java.io.InputStream; import java.util.*; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** - * 用户 Service 实现类 + * 管ç†å‘˜ç”¨æˆ· Service 实现类 * * @author èŠ‹é“æºç  */ -@Service +@Service("adminUserService") @Slf4j -public class SysUserServiceImpl implements SysUserService { +public class UserServiceImpl implements UserService { @Value("${sys.user.init-password:yudaoyuanma}") private String userInitPassword; @@ -52,26 +51,26 @@ public class SysUserServiceImpl implements SysUserService { private SysUserMapper userMapper; @Resource - private SysDeptService deptService; + private DeptService deptService; @Resource private SysDeptCoreService deptCoreService; @Resource - private SysPostService postService; + private PostService postService; @Resource - private SysPermissionService permissionService; + private PermissionService permissionService; @Resource private PasswordEncoder passwordEncoder; @Resource private InfFileCoreService fileService; @Override - public Long createUser(SysUserCreateReqVO reqVO) { + public Long createUser(UserCreateReqVO reqVO) { // 校验正确性 this.checkCreateOrUpdate(null, reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail(), reqVO.getDeptId(), reqVO.getPostIds()); // æ’入用户 - SysUserDO user = SysUserConvert.INSTANCE.convert(reqVO); + SysUserDO user = UserConvert.INSTANCE.convert(reqVO); user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // é»˜è®¤å¼€å¯ user.setPassword(passwordEncoder.encode(reqVO.getPassword())); // åŠ å¯†å¯†ç  userMapper.insert(user); @@ -79,12 +78,12 @@ public class SysUserServiceImpl implements SysUserService { } @Override - public void updateUser(SysUserUpdateReqVO reqVO) { + public void updateUser(UserUpdateReqVO reqVO) { // 校验正确性 this.checkCreateOrUpdate(reqVO.getId(), reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail(), reqVO.getDeptId(), reqVO.getPostIds()); // 更新用户 - SysUserDO updateObj = SysUserConvert.INSTANCE.convert(reqVO); + SysUserDO updateObj = UserConvert.INSTANCE.convert(reqVO); userMapper.updateById(updateObj); } @@ -94,17 +93,17 @@ public class SysUserServiceImpl implements SysUserService { } @Override - public void updateUserProfile(Long id, SysUserProfileUpdateReqVO reqVO) { + public void updateUserProfile(Long id, UserProfileUpdateReqVO reqVO) { // 校验正确性 this.checkUserExists(id); this.checkEmailUnique(id, reqVO.getEmail()); this.checkMobileUnique(id, reqVO.getMobile()); // 执行更新 - userMapper.updateById(SysUserConvert.INSTANCE.convert(reqVO).setId(id)); + userMapper.updateById(UserConvert.INSTANCE.convert(reqVO).setId(id)); } @Override - public void updateUserPassword(Long id, SysUserProfileUpdatePasswordReqVO reqVO) { + public void updateUserPassword(Long id, UserProfileUpdatePasswordReqVO reqVO) { // 校验旧密ç å¯†ç  this.checkOldPassword(id, reqVO.getOldPassword()); // 执行更新 @@ -164,7 +163,7 @@ public class SysUserServiceImpl implements SysUserService { } @Override - public PageResult getUserPage(SysUserPageReqVO reqVO) { + public PageResult getUserPage(UserPageReqVO reqVO) { return userMapper.selectPage(reqVO, this.getDeptCondition(reqVO.getDeptId())); } @@ -174,7 +173,7 @@ public class SysUserServiceImpl implements SysUserService { } @Override - public List getUsers(SysUserExportReqVO reqVO) { + public List getUsers(UserExportReqVO reqVO) { return userMapper.selectList(reqVO, this.getDeptCondition(reqVO.getDeptId())); } @@ -340,11 +339,11 @@ public class SysUserServiceImpl implements SysUserService { @Override @Transactional(rollbackFor = Exception.class) // 添加事务,异常则回滚所有导入 - public SysUserImportRespVO importUsers(List importUsers, boolean isUpdateSupport) { + public UserImportRespVO importUsers(List importUsers, boolean isUpdateSupport) { if (CollUtil.isEmpty(importUsers)) { throw exception(USER_IMPORT_LIST_IS_EMPTY); } - SysUserImportRespVO respVO = SysUserImportRespVO.builder().createUsernames(new ArrayList<>()) + UserImportRespVO respVO = UserImportRespVO.builder().createUsernames(new ArrayList<>()) .updateUsernames(new ArrayList<>()).failureUsernames(new LinkedHashMap<>()).build(); importUsers.forEach(importUser -> { // æ ¡éªŒï¼Œåˆ¤æ–­æ˜¯å¦æœ‰ä¸ç¬¦åˆçš„原因 @@ -358,7 +357,7 @@ public class SysUserServiceImpl implements SysUserService { // 判断如果ä¸å­˜åœ¨ï¼Œåœ¨è¿›è¡Œæ’å…¥ SysUserDO existUser = userMapper.selectByUsername(importUser.getUsername()); if (existUser == null) { - userMapper.insert(SysUserConvert.INSTANCE.convert(importUser) + userMapper.insert(UserConvert.INSTANCE.convert(importUser) .setPassword(passwordEncoder.encode(userInitPassword))); // è®¾ç½®é»˜è®¤å¯†ç  respVO.getCreateUsernames().add(importUser.getUsername()); return; @@ -368,7 +367,7 @@ public class SysUserServiceImpl implements SysUserService { respVO.getFailureUsernames().put(importUser.getUsername(), USER_USERNAME_EXISTS.getMsg()); return; } - SysUserDO updateUser = SysUserConvert.INSTANCE.convert(importUser); + SysUserDO updateUser = UserConvert.INSTANCE.convert(importUser); updateUser.setId(existUser.getId()); userMapper.updateById(updateUser); respVO.getUpdateUsernames().add(importUser.getUsername()); diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/SysAuthServiceImplTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/AuthServiceImplTest.java similarity index 79% rename from yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/SysAuthServiceImplTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/AuthServiceImplTest.java index 75ab194bce..a306eea49c 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/SysAuthServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/AuthServiceImplTest.java @@ -1,12 +1,12 @@ package cn.iocoder.yudao.module.system.service.auth; -import cn.iocoder.yudao.module.system.controller.auth.vo.auth.SysAuthLoginReqVO; -import cn.iocoder.yudao.module.system.enums.logger.SysLoginLogTypeEnum; -import cn.iocoder.yudao.module.system.enums.logger.SysLoginResultEnum; -import cn.iocoder.yudao.module.system.service.common.SysCaptchaService; -import cn.iocoder.yudao.module.system.service.dept.SysPostService; -import cn.iocoder.yudao.module.system.service.permission.SysPermissionService; -import cn.iocoder.yudao.module.system.service.user.SysUserService; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthLoginReqVO; +import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum; +import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum; +import cn.iocoder.yudao.module.system.service.common.CaptchaService; +import cn.iocoder.yudao.module.system.service.dept.PostService; +import cn.iocoder.yudao.module.system.service.permission.PermissionService; +import cn.iocoder.yudao.module.system.service.user.UserService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService; import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService; @@ -31,7 +31,7 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException; import javax.annotation.Resource; import java.util.Set; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; import static java.util.Collections.singleton; @@ -39,24 +39,24 @@ import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; -@Import(SysAuthServiceImpl.class) -public class SysAuthServiceImplTest extends BaseDbUnitTest { +@Import(AuthServiceImpl.class) +public class AuthServiceImplTest extends BaseDbUnitTest { @Resource - private SysAuthServiceImpl authService; + private AuthServiceImpl authService; @MockBean - private SysUserService userService; + private UserService userService; @MockBean private SysUserCoreService userCoreService; @MockBean - private SysPermissionService permissionService; + private PermissionService permissionService; @MockBean private AuthenticationManager authenticationManager; @MockBean private Authentication authentication; @MockBean - private SysCaptchaService captchaService; + private CaptchaService captchaService; @MockBean private SysLoginLogCoreService loginLogCoreService; @MockBean @@ -64,7 +64,7 @@ public class SysAuthServiceImplTest extends BaseDbUnitTest { @MockBean private SysSocialCoreService socialService; @MockBean - private SysPostService postService; + private PostService postService; @BeforeEach public void setUp() { @@ -131,15 +131,15 @@ public class SysAuthServiceImplTest extends BaseDbUnitTest { @Test public void testLogin_captchaNotFound() { // 准备傿•° - SysAuthLoginReqVO reqVO = randomPojo(SysAuthLoginReqVO.class); + AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class); String userIp = randomString(); String userAgent = randomString(); // 调用, 并断言异常 assertServiceException(() -> authService.login(reqVO, userIp, userAgent), AUTH_LOGIN_CAPTCHA_NOT_FOUND); // æ ¡éªŒè°ƒç”¨å‚æ•° verify(loginLogCoreService, times(1)).createLoginLog( - argThat(o -> o.getLogType().equals(SysLoginLogTypeEnum.LOGIN_USERNAME.getType()) - && o.getResult().equals(SysLoginResultEnum.CAPTCHA_NOT_FOUND.getResult())) + argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) + && o.getResult().equals(LoginResultEnum.CAPTCHA_NOT_FOUND.getResult())) ); } @@ -149,15 +149,15 @@ public class SysAuthServiceImplTest extends BaseDbUnitTest { String userIp = randomString(); String userAgent = randomString(); String code = randomString(); - SysAuthLoginReqVO reqVO = randomPojo(SysAuthLoginReqVO.class); + AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class); // mock 验è¯ç ä¸æ­£ç¡® when(captchaService.getCaptchaCode(reqVO.getUuid())).thenReturn(code); // 调用, 并断言异常 assertServiceException(() -> authService.login(reqVO, userIp, userAgent), AUTH_LOGIN_CAPTCHA_CODE_ERROR); // æ ¡éªŒè°ƒç”¨å‚æ•° verify(loginLogCoreService, times(1)).createLoginLog( - argThat(o -> o.getLogType().equals(SysLoginLogTypeEnum.LOGIN_USERNAME.getType()) - && o.getResult().equals(SysLoginResultEnum.CAPTCHA_CODE_ERROR.getResult())) + argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) + && o.getResult().equals(LoginResultEnum.CAPTCHA_CODE_ERROR.getResult())) ); } @@ -166,7 +166,7 @@ public class SysAuthServiceImplTest extends BaseDbUnitTest { // 准备傿•° String userIp = randomString(); String userAgent = randomString(); - SysAuthLoginReqVO reqVO = randomPojo(SysAuthLoginReqVO.class); + AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class); // mock 验è¯ç æ­£ç¡® when(captchaService.getCaptchaCode(reqVO.getUuid())).thenReturn(reqVO.getCode()); // mock 抛出异常 @@ -177,8 +177,8 @@ public class SysAuthServiceImplTest extends BaseDbUnitTest { // æ ¡éªŒè°ƒç”¨å‚æ•° verify(captchaService, times(1)).deleteCaptchaCode(reqVO.getUuid()); verify(loginLogCoreService, times(1)).createLoginLog( - argThat(o -> o.getLogType().equals(SysLoginLogTypeEnum.LOGIN_USERNAME.getType()) - && o.getResult().equals(SysLoginResultEnum.BAD_CREDENTIALS.getResult())) + argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) + && o.getResult().equals(LoginResultEnum.BAD_CREDENTIALS.getResult())) ); } @@ -187,7 +187,7 @@ public class SysAuthServiceImplTest extends BaseDbUnitTest { // 准备傿•° String userIp = randomString(); String userAgent = randomString(); - SysAuthLoginReqVO reqVO = randomPojo(SysAuthLoginReqVO.class); + AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class); // mock 验è¯ç æ­£ç¡® when(captchaService.getCaptchaCode(reqVO.getUuid())).thenReturn(reqVO.getCode()); // mock 抛出异常 @@ -198,8 +198,8 @@ public class SysAuthServiceImplTest extends BaseDbUnitTest { // æ ¡éªŒè°ƒç”¨å‚æ•° verify(captchaService, times(1)).deleteCaptchaCode(reqVO.getUuid()); verify(loginLogCoreService, times(1)).createLoginLog( - argThat(o -> o.getLogType().equals(SysLoginLogTypeEnum.LOGIN_USERNAME.getType()) - && o.getResult().equals(SysLoginResultEnum.USER_DISABLED.getResult())) + argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) + && o.getResult().equals(LoginResultEnum.USER_DISABLED.getResult())) ); } @@ -208,7 +208,7 @@ public class SysAuthServiceImplTest extends BaseDbUnitTest { // 准备傿•° String userIp = randomString(); String userAgent = randomString(); - SysAuthLoginReqVO reqVO = randomPojo(SysAuthLoginReqVO.class); + AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class); // mock 验è¯ç æ­£ç¡® when(captchaService.getCaptchaCode(reqVO.getUuid())).thenReturn(reqVO.getCode()); // mock 抛出异常 @@ -219,8 +219,8 @@ public class SysAuthServiceImplTest extends BaseDbUnitTest { // æ ¡éªŒè°ƒç”¨å‚æ•° verify(captchaService, times(1)).deleteCaptchaCode(reqVO.getUuid()); verify(loginLogCoreService, times(1)).createLoginLog( - argThat(o -> o.getLogType().equals(SysLoginLogTypeEnum.LOGIN_USERNAME.getType()) - && o.getResult().equals(SysLoginResultEnum.UNKNOWN_ERROR.getResult())) + argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) + && o.getResult().equals(LoginResultEnum.UNKNOWN_ERROR.getResult())) ); } @@ -232,7 +232,7 @@ public class SysAuthServiceImplTest extends BaseDbUnitTest { Long userId = randomLongId(); Set userRoleIds = randomSet(Long.class); String sessionId = randomString(); - SysAuthLoginReqVO reqVO = randomPojo(SysAuthLoginReqVO.class); + AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class); LoginUser loginUser = randomPojo(LoginUser.class, o -> { o.setId(userId); o.setRoleIds(userRoleIds); @@ -253,8 +253,8 @@ public class SysAuthServiceImplTest extends BaseDbUnitTest { // æ ¡éªŒè°ƒç”¨å‚æ•° verify(captchaService, times(1)).deleteCaptchaCode(reqVO.getUuid()); verify(loginLogCoreService, times(1)).createLoginLog( - argThat(o -> o.getLogType().equals(SysLoginLogTypeEnum.LOGIN_USERNAME.getType()) - && o.getResult().equals(SysLoginResultEnum.SUCCESS.getResult())) + argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) + && o.getResult().equals(LoginResultEnum.SUCCESS.getResult())) ); } @@ -270,8 +270,8 @@ public class SysAuthServiceImplTest extends BaseDbUnitTest { // æ ¡éªŒè°ƒç”¨å‚æ•° verify(userSessionCoreService, times(1)).deleteUserSession(token); verify(loginLogCoreService, times(1)).createLoginLog( - argThat(o -> o.getLogType().equals(SysLoginLogTypeEnum.LOGOUT_SELF.getType()) - && o.getResult().equals(SysLoginResultEnum.SUCCESS.getResult())) + argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGOUT_SELF.getType()) + && o.getResult().equals(LoginResultEnum.SUCCESS.getResult())) ); } diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/SysUserSessionServiceImplTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImplTest.java similarity index 90% rename from yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/SysUserSessionServiceImplTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImplTest.java index 3454572354..eea61a408b 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/SysUserSessionServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImplTest.java @@ -1,9 +1,9 @@ package cn.iocoder.yudao.module.system.service.auth; import cn.hutool.core.date.DateUtil; -import cn.iocoder.yudao.module.system.controller.auth.vo.session.SysUserSessionPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.session.UserSessionPageReqVO; import cn.iocoder.yudao.module.system.dal.mysql.auth.SysUserSessionMapper; -import cn.iocoder.yudao.module.system.service.user.SysUserService; +import cn.iocoder.yudao.module.system.service.user.UserService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.dal.redis.auth.SysLoginUserCoreRedisDAO; @@ -34,21 +34,21 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.when; /** - * {@link SysUserSessionServiceImpl} çš„å•元测试 + * {@link UserSessionServiceImpl} çš„å•元测试 * * @author Lyon */ -@Import({SysUserSessionServiceImpl.class}) -public class SysUserSessionServiceImplTest extends BaseDbAndRedisUnitTest { +@Import({UserSessionServiceImpl.class}) +public class UserSessionServiceImplTest extends BaseDbAndRedisUnitTest { @Resource - private SysUserSessionServiceImpl userSessionService; + private UserSessionServiceImpl userSessionService; @Resource private SysUserSessionMapper userSessionMapper; @MockBean - private SysUserService userService; + private UserService userService; @MockBean private SysLoginLogCoreService loginLogCoreService; @MockBean @@ -81,7 +81,7 @@ public class SysUserSessionServiceImplTest extends BaseDbAndRedisUnitTest { o.setUserIp("testUserIp"); })); // 准备傿•° - SysUserSessionPageReqVO reqVO = new SysUserSessionPageReqVO(); + UserSessionPageReqVO reqVO = new UserSessionPageReqVO(); reqVO.setUsername(dbUser.getUsername()); reqVO.setUserIp(userIp); diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/common/SysCaptchaServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/common/CaptchaServiceTest.java similarity index 77% rename from yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/common/SysCaptchaServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/common/CaptchaServiceTest.java index 2248744227..79fb65f43d 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/common/SysCaptchaServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/common/CaptchaServiceTest.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.service.common; -import cn.iocoder.yudao.module.system.controller.common.vo.SysCaptchaImageRespVO; -import cn.iocoder.yudao.module.system.dal.redis.common.SysCaptchaRedisDAO; +import cn.iocoder.yudao.module.system.controller.admin.common.vo.CaptchaImageRespVO; +import cn.iocoder.yudao.module.system.dal.redis.common.CaptchaRedisDAO; import cn.iocoder.yudao.module.system.framework.captcha.config.CaptchaProperties; import cn.iocoder.yudao.module.system.test.BaseRedisUnitTest; import org.junit.jupiter.api.Test; @@ -12,21 +12,21 @@ import javax.annotation.Resource; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomString; import static org.junit.jupiter.api.Assertions.*; -@Import({SysCaptchaServiceImpl.class, CaptchaProperties.class, SysCaptchaRedisDAO.class}) -public class SysCaptchaServiceTest extends BaseRedisUnitTest { +@Import({CaptchaServiceImpl.class, CaptchaProperties.class, CaptchaRedisDAO.class}) +public class CaptchaServiceTest extends BaseRedisUnitTest { @Resource - private SysCaptchaServiceImpl captchaService; + private CaptchaServiceImpl captchaService; @Resource - private SysCaptchaRedisDAO captchaRedisDAO; + private CaptchaRedisDAO captchaRedisDAO; @Resource private CaptchaProperties captchaProperties; @Test public void testGetCaptchaImage() { // 调用 - SysCaptchaImageRespVO respVO = captchaService.getCaptchaImage(); + CaptchaImageRespVO respVO = captchaService.getCaptchaImage(); // 断言 assertNotNull(respVO.getUuid()); assertNotNull(respVO.getImg()); diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/SysDeptServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceTest.java similarity index 89% rename from yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/SysDeptServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceTest.java index b041e2d4cb..fe49ea2b3b 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/SysDeptServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceTest.java @@ -1,13 +1,13 @@ package cn.iocoder.yudao.module.system.service.dept; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.module.system.controller.dept.vo.dept.SysDeptCreateReqVO; -import cn.iocoder.yudao.module.system.controller.dept.vo.dept.SysDeptListReqVO; -import cn.iocoder.yudao.module.system.controller.dept.vo.dept.SysDeptUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptUpdateReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.module.system.dal.mysql.dept.SysDeptMapper; import cn.iocoder.yudao.module.system.enums.dept.DeptIdEnum; -import cn.iocoder.yudao.module.system.mq.producer.dept.SysDeptProducer; +import cn.iocoder.yudao.module.system.mq.producer.dept.DeptProducer; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; @@ -24,7 +24,7 @@ import java.util.function.Consumer; import static cn.hutool.core.bean.BeanUtil.getFieldValue; import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; @@ -33,19 +33,19 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; /** - * {@link SysDeptServiceImpl} çš„å•元测试类 + * {@link DeptServiceImpl} çš„å•元测试类 * * @author niudehua */ -@Import(SysDeptServiceImpl.class) -class SysDeptServiceTest extends BaseDbUnitTest { +@Import(DeptServiceImpl.class) +public class DeptServiceTest extends BaseDbUnitTest { @Resource - private SysDeptServiceImpl deptService; + private DeptServiceImpl deptService; @Resource private SysDeptMapper deptMapper; @MockBean - private SysDeptProducer deptProducer; + private DeptProducer deptProducer; @Test @SuppressWarnings("unchecked") @@ -86,7 +86,7 @@ class SysDeptServiceTest extends BaseDbUnitTest { // 测试 status ä¸åŒ¹é… deptMapper.insert(ObjectUtils.cloneIgnoreId(dept, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); // 准备傿•° - SysDeptListReqVO reqVO = new SysDeptListReqVO(); + DeptListReqVO reqVO = new DeptListReqVO(); reqVO.setName("å¼€"); reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 调用 @@ -99,7 +99,7 @@ class SysDeptServiceTest extends BaseDbUnitTest { @Test void testCreateDept_success() { // 准备傿•° - SysDeptCreateReqVO reqVO = randomPojo(SysDeptCreateReqVO.class, + DeptCreateReqVO reqVO = randomPojo(DeptCreateReqVO.class, o -> { o.setParentId(DeptIdEnum.ROOT.getId()); o.setStatus(randomCommonStatus()); @@ -121,7 +121,7 @@ class SysDeptServiceTest extends BaseDbUnitTest { SysDeptDO dbDeptDO = randomPojo(SysDeptDO.class, o -> o.setStatus(randomCommonStatus())); deptMapper.insert(dbDeptDO);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° - SysDeptUpdateReqVO reqVO = randomPojo(SysDeptUpdateReqVO.class, o -> { + DeptUpdateReqVO reqVO = randomPojo(DeptUpdateReqVO.class, o -> { // 设置更新的 ID o.setParentId(DeptIdEnum.ROOT.getId()); o.setId(dbDeptDO.getId()); @@ -160,7 +160,7 @@ class SysDeptServiceTest extends BaseDbUnitTest { nameDeptDO.setParentId(DeptIdEnum.ROOT.getId()); deptMapper.insert(nameDeptDO); // 准备傿•° - SysDeptUpdateReqVO reqVO = randomPojo(SysDeptUpdateReqVO.class, + DeptUpdateReqVO reqVO = randomPojo(DeptUpdateReqVO.class, o -> { // 设置根节点部门 o.setParentId(DeptIdEnum.ROOT.getId()); @@ -175,7 +175,7 @@ class SysDeptServiceTest extends BaseDbUnitTest { @Test void testCheckDept_parentNotExitsForCreate() { - SysDeptCreateReqVO reqVO = randomPojo(SysDeptCreateReqVO.class, + DeptCreateReqVO reqVO = randomPojo(DeptCreateReqVO.class, o -> o.setStatus(randomCommonStatus())); // 调用,并断言异常 assertServiceException(() -> deptService.createDept(reqVO), DEPT_PARENT_NOT_EXITS); @@ -211,7 +211,7 @@ class SysDeptServiceTest extends BaseDbUnitTest { SysDeptDO dbDeptDO = randomPojo(SysDeptDO.class, o -> o.setStatus(randomCommonStatus())); deptMapper.insert(dbDeptDO); // 准备傿•° - SysDeptUpdateReqVO reqVO = randomPojo(SysDeptUpdateReqVO.class, + DeptUpdateReqVO reqVO = randomPojo(DeptUpdateReqVO.class, o -> { // 设置自己为父部门 o.setParentId(dbDeptDO.getId()); @@ -228,7 +228,7 @@ class SysDeptServiceTest extends BaseDbUnitTest { SysDeptDO deptDO = randomPojo(SysDeptDO.class, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())); deptMapper.insert(deptDO); // 准备傿•° - SysDeptCreateReqVO reqVO = randomPojo(SysDeptCreateReqVO.class, + DeptCreateReqVO reqVO = randomPojo(DeptCreateReqVO.class, o -> { // 设置未å¯ç”¨çš„部门为副部门 o.setParentId(deptDO.getId()); @@ -250,7 +250,7 @@ class SysDeptServiceTest extends BaseDbUnitTest { // åˆå§‹åŒ–本地缓存 deptService.initLocalCache(); // 准备傿•° - SysDeptUpdateReqVO reqVO = randomPojo(SysDeptUpdateReqVO.class, + DeptUpdateReqVO reqVO = randomPojo(DeptUpdateReqVO.class, o -> { // 设置自己的å­éƒ¨é—¨ä¸ºçˆ¶éƒ¨é—¨ o.setParentId(childDept.getId()); diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/SysPostServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/PostServiceTest.java similarity index 86% rename from yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/SysPostServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/PostServiceTest.java index fa0da32577..df64ed2b11 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/SysPostServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/PostServiceTest.java @@ -5,10 +5,10 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; -import cn.iocoder.yudao.module.system.controller.dept.vo.post.SysPostCreateReqVO; -import cn.iocoder.yudao.module.system.controller.dept.vo.post.SysPostExportReqVO; -import cn.iocoder.yudao.module.system.controller.dept.vo.post.SysPostPageReqVO; -import cn.iocoder.yudao.module.system.controller.dept.vo.post.SysPostUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostUpdateReqVO; import cn.iocoder.yudao.module.system.dal.mysql.dept.SysPostMapper; import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; import org.junit.jupiter.api.Test; @@ -23,19 +23,14 @@ import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEq import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static org.junit.jupiter.api.Assertions.*; -/** - * {@link SysPostServiceImpl} çš„å•元测试类 - * - * @author niudehua - */ -@Import(SysPostServiceImpl.class) -class SysPostServiceTest extends BaseDbUnitTest { +@Import(PostServiceImpl.class) +public class PostServiceTest extends BaseDbUnitTest { @Resource - private SysPostServiceImpl postService; + private PostServiceImpl postService; @Resource private SysPostMapper postMapper; @@ -53,7 +48,7 @@ class SysPostServiceTest extends BaseDbUnitTest { postMapper.insert(ObjectUtils.cloneIgnoreId(postDO, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); // 准备傿•° - SysPostPageReqVO reqVO = new SysPostPageReqVO(); + PostPageReqVO reqVO = new PostPageReqVO(); reqVO.setName("ç "); reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); @@ -79,7 +74,7 @@ class SysPostServiceTest extends BaseDbUnitTest { // 测试 status ä¸åŒ¹é… postMapper.insert(ObjectUtils.cloneIgnoreId(postDO, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); // 准备傿•° - SysPostExportReqVO reqVO = new SysPostExportReqVO(); + PostExportReqVO reqVO = new PostExportReqVO(); reqVO.setName("ç "); reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); @@ -107,7 +102,7 @@ class SysPostServiceTest extends BaseDbUnitTest { @Test void testCreatePost_success() { // 准备傿•° - SysPostCreateReqVO reqVO = randomPojo(SysPostCreateReqVO.class, + PostCreateReqVO reqVO = randomPojo(PostCreateReqVO.class, o -> o.setStatus(randomEle(CommonStatusEnum.values()).getStatus())); // 调用 Long postId = postService.createPost(reqVO); @@ -124,7 +119,7 @@ class SysPostServiceTest extends BaseDbUnitTest { SysPostDO postDO = randomPostDO(); postMapper.insert(postDO);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° - SysPostUpdateReqVO reqVO = randomPojo(SysPostUpdateReqVO.class, + PostUpdateReqVO reqVO = randomPojo(PostUpdateReqVO.class, o -> { // 设置更新的 ID o.setId(postDO.getId()); @@ -163,7 +158,7 @@ class SysPostServiceTest extends BaseDbUnitTest { SysPostDO postDO = randomPostDO(); postMapper.insert(postDO);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° - SysPostCreateReqVO reqVO = randomPojo(SysPostCreateReqVO.class, + PostCreateReqVO reqVO = randomPojo(PostCreateReqVO.class, // 模拟 name é‡å¤ o -> o.setName(postDO.getName())); assertServiceException(() -> postService.createPost(reqVO), POST_NAME_DUPLICATE); @@ -178,7 +173,7 @@ class SysPostServiceTest extends BaseDbUnitTest { SysPostDO codePostDO = randomPostDO(); postMapper.insert(codePostDO); // 准备傿•° - SysPostUpdateReqVO reqVO = randomPojo(SysPostUpdateReqVO.class, + PostUpdateReqVO reqVO = randomPojo(PostUpdateReqVO.class, o -> { // 设置更新的 ID o.setId(postDO.getId()); diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/SysDictDataServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceTest.java similarity index 86% rename from yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/SysDictDataServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceTest.java index bc5f83db8c..42217d3b75 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/SysDictDataServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceTest.java @@ -3,13 +3,13 @@ package cn.iocoder.yudao.module.system.service.dict; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.system.controller.dict.vo.data.SysDictDataCreateReqVO; -import cn.iocoder.yudao.module.system.controller.dict.vo.data.SysDictDataExportReqVO; -import cn.iocoder.yudao.module.system.controller.dict.vo.data.SysDictDataPageReqVO; -import cn.iocoder.yudao.module.system.controller.dict.vo.data.SysDictDataUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictTypeDO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataUpdateReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictTypeDO; import cn.iocoder.yudao.module.system.dal.mysql.dict.SysDictDataMapper; -import cn.iocoder.yudao.module.system.mq.producer.dict.SysDictDataProducer; +import cn.iocoder.yudao.module.system.mq.producer.dict.DictDataProducer; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; @@ -21,7 +21,7 @@ import javax.annotation.Resource; import java.util.List; import java.util.function.Consumer; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; @@ -29,23 +29,18 @@ import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; -/** -* {@link SysDictDataServiceImpl} çš„å•元测试类 -* -* @author èŠ‹é“æºç  -*/ -@Import(SysDictDataServiceImpl.class) -public class SysDictDataServiceTest extends BaseDbUnitTest { +@Import(DictDataServiceImpl.class) +public class DictDataServiceTest extends BaseDbUnitTest { @Resource - private SysDictDataServiceImpl dictDataService; + private DictDataServiceImpl dictDataService; @Resource private SysDictDataMapper dictDataMapper; @MockBean - private SysDictTypeService dictTypeService; + private DictTypeService dictTypeService; @MockBean - private SysDictDataProducer dictDataProducer; + private DictDataProducer dictDataProducer; @Test public void testGetDictDataPage() { @@ -63,7 +58,7 @@ public class SysDictDataServiceTest extends BaseDbUnitTest { // 测试 status ä¸åŒ¹é… dictDataMapper.insert(ObjectUtils.cloneIgnoreId(dbDictData, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); // 准备傿•° - SysDictDataPageReqVO reqVO = new SysDictDataPageReqVO(); + DictDataPageReqVO reqVO = new DictDataPageReqVO(); reqVO.setLabel("芋"); reqVO.setDictType("yu"); reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); @@ -92,7 +87,7 @@ public class SysDictDataServiceTest extends BaseDbUnitTest { // 测试 status ä¸åŒ¹é… dictDataMapper.insert(ObjectUtils.cloneIgnoreId(dbDictData, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); // 准备傿•° - SysDictDataExportReqVO reqVO = new SysDictDataExportReqVO(); + DictDataExportReqVO reqVO = new DictDataExportReqVO(); reqVO.setLabel("芋"); reqVO.setDictType("yu"); reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); @@ -107,7 +102,7 @@ public class SysDictDataServiceTest extends BaseDbUnitTest { @Test public void testCreateDictData_success() { // 准备傿•° - SysDictDataCreateReqVO reqVO = randomPojo(SysDictDataCreateReqVO.class, + DictDataCreateReqVO reqVO = randomPojo(DictDataCreateReqVO.class, o -> o.setStatus(randomCommonStatus())); // mock 方法 when(dictTypeService.getDictType(eq(reqVO.getDictType()))).thenReturn(randomDictTypeDO(reqVO.getDictType())); @@ -129,7 +124,7 @@ public class SysDictDataServiceTest extends BaseDbUnitTest { SysDictDataDO dbDictData = randomDictDataDO(); dictDataMapper.insert(dbDictData);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° - SysDictDataUpdateReqVO reqVO = randomPojo(SysDictDataUpdateReqVO.class, o -> { + DictDataUpdateReqVO reqVO = randomPojo(DictDataUpdateReqVO.class, o -> { o.setId(dbDictData.getId()); // 设置更新的 ID o.setStatus(randomCommonStatus()); }); @@ -196,7 +191,7 @@ public class SysDictDataServiceTest extends BaseDbUnitTest { // mock 方法,数æ®ç±»åž‹è¢«ç¦ç”¨ String dictType = randomString(); when(dictTypeService.getDictType(eq(dictType))).thenReturn( - randomPojo(SysDictTypeDO.class, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); + randomPojo(DictTypeDO.class, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); // 调用, 并断言异常 assertServiceException(() -> dictDataService.checkDictTypeValid(dictType), DICT_TYPE_NOT_ENABLE); @@ -257,8 +252,8 @@ public class SysDictDataServiceTest extends BaseDbUnitTest { * @param type 字典类型 * @return SysDictTypeDO 对象 */ - private static SysDictTypeDO randomDictTypeDO(String type) { - return randomPojo(SysDictTypeDO.class, o -> { + private static DictTypeDO randomDictTypeDO(String type) { + return randomPojo(DictTypeDO.class, o -> { o.setType(type); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); // ä¿è¯ status æ˜¯å¼€å¯ }); diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/SysDictTypeServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/DictTypeServiceTest.java similarity index 80% rename from yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/SysDictTypeServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/DictTypeServiceTest.java index 916acbf26f..3b2d763be4 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/SysDictTypeServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/DictTypeServiceTest.java @@ -2,11 +2,11 @@ package cn.iocoder.yudao.module.system.service.dict; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.system.controller.dict.vo.type.SysDictTypeCreateReqVO; -import cn.iocoder.yudao.module.system.controller.dict.vo.type.SysDictTypeExportReqVO; -import cn.iocoder.yudao.module.system.controller.dict.vo.type.SysDictTypePageReqVO; -import cn.iocoder.yudao.module.system.controller.dict.vo.type.SysDictTypeUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictTypeDO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypeCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypeUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypeExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypePageReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictTypeDO; import cn.iocoder.yudao.module.system.dal.mysql.dict.SysDictTypeMapper; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; @@ -20,7 +20,7 @@ import java.util.List; import java.util.function.Consumer; import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; @@ -29,21 +29,21 @@ import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.when; -@Import(SysDictTypeServiceImpl.class) -public class SysDictTypeServiceTest extends BaseDbUnitTest { +@Import(DictTypeServiceImpl.class) +public class DictTypeServiceTest extends BaseDbUnitTest { @Resource - private SysDictTypeServiceImpl dictTypeService; + private DictTypeServiceImpl dictTypeService; @Resource private SysDictTypeMapper dictTypeMapper; @MockBean - private SysDictDataService dictDataService; + private DictDataService dictDataService; @Test public void testGetDictTypePage() { // mock æ•°æ® - SysDictTypeDO dbDictType = randomPojo(SysDictTypeDO.class, o -> { // 等会查询到 + DictTypeDO dbDictType = randomPojo(DictTypeDO.class, o -> { // 等会查询到 o.setName("yunai"); o.setType("芋艿"); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); @@ -59,7 +59,7 @@ public class SysDictTypeServiceTest extends BaseDbUnitTest { // 测试 createTime ä¸åŒ¹é… dictTypeMapper.insert(ObjectUtils.cloneIgnoreId(dbDictType, o -> o.setCreateTime(buildTime(2021, 1, 1)))); // 准备傿•° - SysDictTypePageReqVO reqVO = new SysDictTypePageReqVO(); + DictTypePageReqVO reqVO = new DictTypePageReqVO(); reqVO.setName("nai"); reqVO.setType("艿"); reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); @@ -67,7 +67,7 @@ public class SysDictTypeServiceTest extends BaseDbUnitTest { reqVO.setEndCreateTime(buildTime(2021, 1, 20)); // 调用 - PageResult pageResult = dictTypeService.getDictTypePage(reqVO); + PageResult pageResult = dictTypeService.getDictTypePage(reqVO); // 断言 assertEquals(1, pageResult.getTotal()); assertEquals(1, pageResult.getList().size()); @@ -77,7 +77,7 @@ public class SysDictTypeServiceTest extends BaseDbUnitTest { @Test public void testGetDictTypeList() { // mock æ•°æ® - SysDictTypeDO dbDictType = randomPojo(SysDictTypeDO.class, o -> { // 等会查询到 + DictTypeDO dbDictType = randomPojo(DictTypeDO.class, o -> { // 等会查询到 o.setName("yunai"); o.setType("芋艿"); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); @@ -93,7 +93,7 @@ public class SysDictTypeServiceTest extends BaseDbUnitTest { // 测试 createTime ä¸åŒ¹é… dictTypeMapper.insert(ObjectUtils.cloneIgnoreId(dbDictType, o -> o.setCreateTime(buildTime(2021, 1, 1)))); // 准备傿•° - SysDictTypeExportReqVO reqVO = new SysDictTypeExportReqVO(); + DictTypeExportReqVO reqVO = new DictTypeExportReqVO(); reqVO.setName("nai"); reqVO.setType("艿"); reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); @@ -101,7 +101,7 @@ public class SysDictTypeServiceTest extends BaseDbUnitTest { reqVO.setEndCreateTime(buildTime(2021, 1, 20)); // 调用 - List list = dictTypeService.getDictTypeList(reqVO); + List list = dictTypeService.getDictTypeList(reqVO); // 断言 assertEquals(1, list.size()); assertPojoEquals(dbDictType, list.get(0)); @@ -110,13 +110,13 @@ public class SysDictTypeServiceTest extends BaseDbUnitTest { @Test public void testGetDictType() { // mock æ•°æ® - SysDictTypeDO dbDictType = randomDictTypeDO(); + DictTypeDO dbDictType = randomDictTypeDO(); dictTypeMapper.insert(dbDictType); // 准备傿•° String type = dbDictType.getType(); // 调用 - SysDictTypeDO dictType = dictTypeService.getDictType(type); + DictTypeDO dictType = dictTypeService.getDictType(type); // 断言 assertNotNull(dictType); assertPojoEquals(dbDictType, dictType); @@ -125,7 +125,7 @@ public class SysDictTypeServiceTest extends BaseDbUnitTest { @Test public void testCreateDictType_success() { // 准备傿•° - SysDictTypeCreateReqVO reqVO = randomPojo(SysDictTypeCreateReqVO.class, + DictTypeCreateReqVO reqVO = randomPojo(DictTypeCreateReqVO.class, o -> o.setStatus(randomEle(CommonStatusEnum.values()).getStatus())); // 调用 @@ -133,17 +133,17 @@ public class SysDictTypeServiceTest extends BaseDbUnitTest { // 断言 assertNotNull(dictTypeId); // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - SysDictTypeDO dictType = dictTypeMapper.selectById(dictTypeId); + DictTypeDO dictType = dictTypeMapper.selectById(dictTypeId); assertPojoEquals(reqVO, dictType); } @Test public void testUpdateDictType_success() { // mock æ•°æ® - SysDictTypeDO dbDictType = randomDictTypeDO(); + DictTypeDO dbDictType = randomDictTypeDO(); dictTypeMapper.insert(dbDictType);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° - SysDictTypeUpdateReqVO reqVO = randomPojo(SysDictTypeUpdateReqVO.class, o -> { + DictTypeUpdateReqVO reqVO = randomPojo(DictTypeUpdateReqVO.class, o -> { o.setId(dbDictType.getId()); // 设置更新的 ID o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); }); @@ -151,14 +151,14 @@ public class SysDictTypeServiceTest extends BaseDbUnitTest { // 调用 dictTypeService.updateDictType(reqVO); // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - SysDictTypeDO dictType = dictTypeMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ + DictTypeDO dictType = dictTypeMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ assertPojoEquals(reqVO, dictType); } @Test public void testDeleteDictType_success() { // mock æ•°æ® - SysDictTypeDO dbDictType = randomDictTypeDO(); + DictTypeDO dbDictType = randomDictTypeDO(); dictTypeMapper.insert(dbDictType);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° Long id = dbDictType.getId(); @@ -172,7 +172,7 @@ public class SysDictTypeServiceTest extends BaseDbUnitTest { @Test public void testDeleteDictType_hasChildren() { // mock æ•°æ® - SysDictTypeDO dbDictType = randomDictTypeDO(); + DictTypeDO dbDictType = randomDictTypeDO(); dictTypeMapper.insert(dbDictType);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° Long id = dbDictType.getId(); @@ -186,7 +186,7 @@ public class SysDictTypeServiceTest extends BaseDbUnitTest { @Test public void testCheckDictDataExists_success() { // mock æ•°æ® - SysDictTypeDO dbDictType = randomDictTypeDO(); + DictTypeDO dbDictType = randomDictTypeDO(); dictTypeMapper.insert(dbDictType);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 调用æˆåŠŸ @@ -263,11 +263,11 @@ public class SysDictTypeServiceTest extends BaseDbUnitTest { // ========== éšæœºå¯¹è±¡ ========== @SafeVarargs - private static SysDictTypeDO randomDictTypeDO(Consumer... consumers) { - Consumer consumer = (o) -> { + private static DictTypeDO randomDictTypeDO(Consumer... consumers) { + Consumer consumer = (o) -> { o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 }; - return randomPojo(SysDictTypeDO.class, ArrayUtils.append(consumer, consumers)); + return randomPojo(DictTypeDO.class, ArrayUtils.append(consumer, consumers)); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/errorcode/SysErrorCodeServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/errorcode/ErrorCodeServiceTest.java similarity index 69% rename from yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/errorcode/SysErrorCodeServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/errorcode/ErrorCodeServiceTest.java index 517006d64c..045b10f39e 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/errorcode/SysErrorCodeServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/errorcode/ErrorCodeServiceTest.java @@ -1,21 +1,19 @@ package cn.iocoder.yudao.module.system.service.errorcode; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.system.dal.dataobject.errorcode.ErrorCodeDO; import cn.iocoder.yudao.module.system.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; -import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodeCreateReqVO; -import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodeExportReqVO; -import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodePageReqVO; -import cn.iocoder.yudao.module.system.controller.errorcode.vo.SysErrorCodeUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.errorcode.SysErrorCodeDO; +import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.ErrorCodeCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.ErrorCodeExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.ErrorCodePageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.ErrorCodeUpdateReqVO; import cn.iocoder.yudao.module.system.dal.mysql.errorcode.SysErrorCodeMapper; -import cn.iocoder.yudao.module.system.enums.errorcode.SysErrorCodeTypeEnum; +import cn.iocoder.yudao.module.system.enums.errorcode.ErrorCodeTypeEnum; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; import org.assertj.core.util.Lists; import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.slf4j.Logger; import org.springframework.context.annotation.Import; import javax.annotation.Resource; @@ -23,19 +21,19 @@ import java.util.List; import java.util.function.Consumer; import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.ERROR_CODE_DUPLICATE; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.ERROR_CODE_NOT_EXISTS; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.ERROR_CODE_DUPLICATE; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.ERROR_CODE_NOT_EXISTS; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; import static org.junit.jupiter.api.Assertions.*; -@Import(SysErrorCodeServiceImpl.class) -public class SysErrorCodeServiceTest extends BaseDbUnitTest { +@Import(ErrorCodeServiceImpl.class) +public class ErrorCodeServiceTest extends BaseDbUnitTest { @Resource - private SysErrorCodeServiceImpl errorCodeService; + private ErrorCodeServiceImpl errorCodeService; @Resource private SysErrorCodeMapper errorCodeMapper; @@ -43,40 +41,40 @@ public class SysErrorCodeServiceTest extends BaseDbUnitTest { @Test public void testCreateErrorCode_success() { // 准备傿•° - SysErrorCodeCreateReqVO reqVO = randomPojo(SysErrorCodeCreateReqVO.class); + ErrorCodeCreateReqVO reqVO = randomPojo(ErrorCodeCreateReqVO.class); // 调用 Long errorCodeId = errorCodeService.createErrorCode(reqVO); // 断言 assertNotNull(errorCodeId); // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - SysErrorCodeDO errorCode = errorCodeMapper.selectById(errorCodeId); + ErrorCodeDO errorCode = errorCodeMapper.selectById(errorCodeId); assertPojoEquals(reqVO, errorCode); - assertEquals(SysErrorCodeTypeEnum.MANUAL_OPERATION.getType(), errorCode.getType()); + assertEquals(ErrorCodeTypeEnum.MANUAL_OPERATION.getType(), errorCode.getType()); } @Test public void testUpdateErrorCode_success() { // mock æ•°æ® - SysErrorCodeDO dbErrorCode = randomInfErrorCodeDO(); + ErrorCodeDO dbErrorCode = randomInfErrorCodeDO(); errorCodeMapper.insert(dbErrorCode);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° - SysErrorCodeUpdateReqVO reqVO = randomPojo(SysErrorCodeUpdateReqVO.class, o -> { + ErrorCodeUpdateReqVO reqVO = randomPojo(ErrorCodeUpdateReqVO.class, o -> { o.setId(dbErrorCode.getId()); // 设置更新的 ID }); // 调用 errorCodeService.updateErrorCode(reqVO); // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - SysErrorCodeDO errorCode = errorCodeMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ + ErrorCodeDO errorCode = errorCodeMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ assertPojoEquals(reqVO, errorCode); - assertEquals(SysErrorCodeTypeEnum.MANUAL_OPERATION.getType(), errorCode.getType()); + assertEquals(ErrorCodeTypeEnum.MANUAL_OPERATION.getType(), errorCode.getType()); } @Test public void testDeleteErrorCode_success() { // mock æ•°æ® - SysErrorCodeDO dbErrorCode = randomInfErrorCodeDO(); + ErrorCodeDO dbErrorCode = randomInfErrorCodeDO(); errorCodeMapper.insert(dbErrorCode);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° Long id = dbErrorCode.getId(); @@ -90,10 +88,10 @@ public class SysErrorCodeServiceTest extends BaseDbUnitTest { @Test public void testGetErrorCodePage() { // mock æ•°æ® - SysErrorCodeDO dbErrorCode = initGetErrorCodePage(); + ErrorCodeDO dbErrorCode = initGetErrorCodePage(); // 准备傿•° - SysErrorCodePageReqVO reqVO = new SysErrorCodePageReqVO(); - reqVO.setType(SysErrorCodeTypeEnum.AUTO_GENERATION.getType()); + ErrorCodePageReqVO reqVO = new ErrorCodePageReqVO(); + reqVO.setType(ErrorCodeTypeEnum.AUTO_GENERATION.getType()); reqVO.setApplicationName("yudao"); reqVO.setCode(1); reqVO.setMessage("yu"); @@ -101,7 +99,7 @@ public class SysErrorCodeServiceTest extends BaseDbUnitTest { reqVO.setEndCreateTime(buildTime(2020, 11, 30)); // 调用 - PageResult pageResult = errorCodeService.getErrorCodePage(reqVO); + PageResult pageResult = errorCodeService.getErrorCodePage(reqVO); // 断言 assertEquals(1, pageResult.getTotal()); assertEquals(1, pageResult.getList().size()); @@ -111,9 +109,9 @@ public class SysErrorCodeServiceTest extends BaseDbUnitTest { /** * åˆå§‹åŒ– getErrorCodePage æ–¹æ³•çš„æµ‹è¯•æ•°æ® */ - private SysErrorCodeDO initGetErrorCodePage() { - SysErrorCodeDO dbErrorCode = randomInfErrorCodeDO(o -> { // 等会查询到 - o.setType(SysErrorCodeTypeEnum.AUTO_GENERATION.getType()); + private ErrorCodeDO initGetErrorCodePage() { + ErrorCodeDO dbErrorCode = randomInfErrorCodeDO(o -> { // 等会查询到 + o.setType(ErrorCodeTypeEnum.AUTO_GENERATION.getType()); o.setApplicationName("yudaoyuanma"); o.setCode(1); o.setMessage("yudao"); @@ -121,7 +119,7 @@ public class SysErrorCodeServiceTest extends BaseDbUnitTest { }); errorCodeMapper.insert(dbErrorCode); // 测试 type ä¸åŒ¹é… - errorCodeMapper.insert(ObjectUtils.cloneIgnoreId(dbErrorCode, o -> o.setType(SysErrorCodeTypeEnum.MANUAL_OPERATION.getType()))); + errorCodeMapper.insert(ObjectUtils.cloneIgnoreId(dbErrorCode, o -> o.setType(ErrorCodeTypeEnum.MANUAL_OPERATION.getType()))); // 测试 applicationName ä¸åŒ¹é… errorCodeMapper.insert(ObjectUtils.cloneIgnoreId(dbErrorCode, o -> o.setApplicationName("yunai"))); // 测试 code ä¸åŒ¹é… @@ -136,10 +134,10 @@ public class SysErrorCodeServiceTest extends BaseDbUnitTest { @Test public void testGetErrorCodeList() { // mock æ•°æ® - SysErrorCodeDO dbErrorCode = initGetErrorCodePage(); + ErrorCodeDO dbErrorCode = initGetErrorCodePage(); // 准备傿•° - SysErrorCodeExportReqVO reqVO = new SysErrorCodeExportReqVO(); - reqVO.setType(SysErrorCodeTypeEnum.AUTO_GENERATION.getType()); + ErrorCodeExportReqVO reqVO = new ErrorCodeExportReqVO(); + reqVO.setType(ErrorCodeTypeEnum.AUTO_GENERATION.getType()); reqVO.setApplicationName("yudao"); reqVO.setCode(1); reqVO.setMessage("yu"); @@ -147,7 +145,7 @@ public class SysErrorCodeServiceTest extends BaseDbUnitTest { reqVO.setEndCreateTime(buildTime(2020, 11, 30)); // 调用 - List list = errorCodeService.getErrorCodeList(reqVO); + List list = errorCodeService.getErrorCodeList(reqVO); // 断言 assertEquals(1, list.size()); assertPojoEquals(dbErrorCode, list.get(0)); @@ -196,9 +194,9 @@ public class SysErrorCodeServiceTest extends BaseDbUnitTest { // 调用 errorCodeService.autoGenerateErrorCodes(Lists.newArrayList(generateReqDTO)); // 断言 - SysErrorCodeDO errorCode = errorCodeMapper.selectOne(null); + ErrorCodeDO errorCode = errorCodeMapper.selectOne(null); assertPojoEquals(generateReqDTO, errorCode); - assertEquals(SysErrorCodeTypeEnum.AUTO_GENERATION.getType(), errorCode.getType()); + assertEquals(ErrorCodeTypeEnum.AUTO_GENERATION.getType(), errorCode.getType()); } /** @@ -207,7 +205,7 @@ public class SysErrorCodeServiceTest extends BaseDbUnitTest { @Test public void testAutoGenerateErrorCodes_021() { // mock æ•°æ® - SysErrorCodeDO dbErrorCode = randomInfErrorCodeDO(o -> o.setType(SysErrorCodeTypeEnum.MANUAL_OPERATION.getType())); + ErrorCodeDO dbErrorCode = randomInfErrorCodeDO(o -> o.setType(ErrorCodeTypeEnum.MANUAL_OPERATION.getType())); errorCodeMapper.insert(dbErrorCode); // 准备傿•° ErrorCodeAutoGenerateReqDTO generateReqDTO = randomPojo(ErrorCodeAutoGenerateReqDTO.class, @@ -217,7 +215,7 @@ public class SysErrorCodeServiceTest extends BaseDbUnitTest { // 调用 errorCodeService.autoGenerateErrorCodes(Lists.newArrayList(generateReqDTO)); // 断言,相等,说明ä¸ä¼šæ›´æ–° - SysErrorCodeDO errorCode = errorCodeMapper.selectById(dbErrorCode.getId()); + ErrorCodeDO errorCode = errorCodeMapper.selectById(dbErrorCode.getId()); assertPojoEquals(dbErrorCode, errorCode); } @@ -227,7 +225,7 @@ public class SysErrorCodeServiceTest extends BaseDbUnitTest { @Test public void testAutoGenerateErrorCodes_022() { // mock æ•°æ® - SysErrorCodeDO dbErrorCode = randomInfErrorCodeDO(o -> o.setType(SysErrorCodeTypeEnum.AUTO_GENERATION.getType())); + ErrorCodeDO dbErrorCode = randomInfErrorCodeDO(o -> o.setType(ErrorCodeTypeEnum.AUTO_GENERATION.getType())); errorCodeMapper.insert(dbErrorCode); // 准备傿•° ErrorCodeAutoGenerateReqDTO generateReqDTO = randomPojo(ErrorCodeAutoGenerateReqDTO.class, @@ -237,7 +235,7 @@ public class SysErrorCodeServiceTest extends BaseDbUnitTest { // 调用 errorCodeService.autoGenerateErrorCodes(Lists.newArrayList(generateReqDTO)); // 断言,相等,说明ä¸ä¼šæ›´æ–° - SysErrorCodeDO errorCode = errorCodeMapper.selectById(dbErrorCode.getId()); + ErrorCodeDO errorCode = errorCodeMapper.selectById(dbErrorCode.getId()); assertPojoEquals(dbErrorCode, errorCode); } @@ -247,7 +245,7 @@ public class SysErrorCodeServiceTest extends BaseDbUnitTest { @Test public void testAutoGenerateErrorCodes_023() { // mock æ•°æ® - SysErrorCodeDO dbErrorCode = randomInfErrorCodeDO(o -> o.setType(SysErrorCodeTypeEnum.AUTO_GENERATION.getType())); + ErrorCodeDO dbErrorCode = randomInfErrorCodeDO(o -> o.setType(ErrorCodeTypeEnum.AUTO_GENERATION.getType())); errorCodeMapper.insert(dbErrorCode); // 准备傿•° ErrorCodeAutoGenerateReqDTO generateReqDTO = randomPojo(ErrorCodeAutoGenerateReqDTO.class, @@ -258,7 +256,7 @@ public class SysErrorCodeServiceTest extends BaseDbUnitTest { // 调用 errorCodeService.autoGenerateErrorCodes(Lists.newArrayList(generateReqDTO)); // 断言,相等,说明ä¸ä¼šæ›´æ–° - SysErrorCodeDO errorCode = errorCodeMapper.selectById(dbErrorCode.getId()); + ErrorCodeDO errorCode = errorCodeMapper.selectById(dbErrorCode.getId()); assertPojoEquals(dbErrorCode, errorCode); } @@ -268,7 +266,7 @@ public class SysErrorCodeServiceTest extends BaseDbUnitTest { @Test public void testAutoGenerateErrorCodes_024() { // mock æ•°æ® - SysErrorCodeDO dbErrorCode = randomInfErrorCodeDO(o -> o.setType(SysErrorCodeTypeEnum.AUTO_GENERATION.getType())); + ErrorCodeDO dbErrorCode = randomInfErrorCodeDO(o -> o.setType(ErrorCodeTypeEnum.AUTO_GENERATION.getType())); errorCodeMapper.insert(dbErrorCode); // 准备傿•° ErrorCodeAutoGenerateReqDTO generateReqDTO = randomPojo(ErrorCodeAutoGenerateReqDTO.class, @@ -278,18 +276,18 @@ public class SysErrorCodeServiceTest extends BaseDbUnitTest { // 调用 errorCodeService.autoGenerateErrorCodes(Lists.newArrayList(generateReqDTO)); // æ–­è¨€ï¼ŒåŒ¹é… - SysErrorCodeDO errorCode = errorCodeMapper.selectById(dbErrorCode.getId()); + ErrorCodeDO errorCode = errorCodeMapper.selectById(dbErrorCode.getId()); assertPojoEquals(generateReqDTO, errorCode); } // ========== éšæœºå¯¹è±¡ ========== @SafeVarargs - private static SysErrorCodeDO randomInfErrorCodeDO(Consumer... consumers) { - Consumer consumer = (o) -> { - o.setType(randomEle(SysErrorCodeTypeEnum.values()).getType()); // ä¿è¯ key 的范围 + private static ErrorCodeDO randomInfErrorCodeDO(Consumer... consumers) { + Consumer consumer = (o) -> { + o.setType(randomEle(ErrorCodeTypeEnum.values()).getType()); // ä¿è¯ key 的范围 }; - return randomPojo(SysErrorCodeDO.class, ArrayUtils.append(consumer, consumers)); + return randomPojo(ErrorCodeDO.class, ArrayUtils.append(consumer, consumers)); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/SysLoginLogServiceImplTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImplTest.java similarity index 77% rename from yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/SysLoginLogServiceImplTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImplTest.java index bac9b5a6e5..94778ef49d 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/SysLoginLogServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImplTest.java @@ -5,11 +5,11 @@ import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLogi import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils; -import cn.iocoder.yudao.module.system.controller.logger.vo.loginlog.SysLoginLogExportReqVO; -import cn.iocoder.yudao.module.system.controller.logger.vo.loginlog.SysLoginLogPageReqVO; -import cn.iocoder.yudao.module.system.dal.mysql.logger.SysLoginLogMapper; -import cn.iocoder.yudao.module.system.enums.logger.SysLoginLogTypeEnum; -import cn.iocoder.yudao.module.system.enums.logger.SysLoginResultEnum; +import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO; +import cn.iocoder.yudao.module.system.dal.mysql.logger.LoginLogMapper; +import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum; +import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum; import cn.iocoder.yudao.framework.test.core.util.RandomUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; @@ -23,34 +23,34 @@ import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEq import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; import static org.junit.jupiter.api.Assertions.assertEquals; -@Import(SysLoginLogServiceImpl.class) -public class SysLoginLogServiceImplTest extends BaseDbUnitTest { +@Import(LoginLogServiceImpl.class) +public class LoginLogServiceImplTest extends BaseDbUnitTest { @Resource - private SysLoginLogServiceImpl sysLoginLogService; + private LoginLogServiceImpl sysLoginLogService; @Resource - private SysLoginLogMapper loginLogMapper; + private LoginLogMapper loginLogMapper; @Test public void testGetLoginLogPage() { // æž„é€ æµ‹è¯•æ•°æ® // 登录æˆåŠŸçš„ SysLoginLogDO loginLogDO = RandomUtils.randomPojo(SysLoginLogDO.class, logDO -> { - logDO.setLogType(RandomUtil.randomEle(SysLoginLogTypeEnum.values()).getType()); + logDO.setLogType(RandomUtil.randomEle(LoginLogTypeEnum.values()).getType()); logDO.setTraceId(TracerUtils.getTraceId()); logDO.setUserType(RandomUtil.randomEle(UserTypeEnum.values()).getValue()); logDO.setUserIp("192.168.199.16"); logDO.setUsername("wangkai"); logDO.setCreateTime(buildTime(2021, 3, 6)); - logDO.setResult(SysLoginResultEnum.SUCCESS.getResult()); + logDO.setResult(LoginResultEnum.SUCCESS.getResult()); }); loginLogMapper.insert(loginLogDO); // 下é¢å‡ ä¸ªéƒ½æ˜¯ä¸åŒ¹é…çš„æ•°æ® // 登录失败的 - loginLogMapper.insert(ObjectUtils.cloneIgnoreId(loginLogDO, logDO -> logDO.setResult(SysLoginResultEnum.CAPTCHA_CODE_ERROR.getResult()))); + loginLogMapper.insert(ObjectUtils.cloneIgnoreId(loginLogDO, logDO -> logDO.setResult(LoginResultEnum.CAPTCHA_CODE_ERROR.getResult()))); // ä¸åŒip段的 loginLogMapper.insert(ObjectUtils.cloneIgnoreId(loginLogDO, logDO -> logDO.setUserIp("192.168.128.18"))); // ä¸åŒusername @@ -60,7 +60,7 @@ public class SysLoginLogServiceImplTest extends BaseDbUnitTest { // æž„é€ è°ƒç”¨å‚æ•° - SysLoginLogPageReqVO reqVO = new SysLoginLogPageReqVO(); + LoginLogPageReqVO reqVO = new LoginLogPageReqVO(); reqVO.setUsername("wangkai"); reqVO.setUserIp("192.168.199"); reqVO.setStatus(true); @@ -82,20 +82,20 @@ public class SysLoginLogServiceImplTest extends BaseDbUnitTest { // 登录æˆåŠŸçš„ SysLoginLogDO loginLogDO = RandomUtils.randomPojo(SysLoginLogDO.class, logDO -> { - logDO.setLogType(RandomUtil.randomEle(SysLoginLogTypeEnum.values()).getType()); + logDO.setLogType(RandomUtil.randomEle(LoginLogTypeEnum.values()).getType()); logDO.setTraceId(TracerUtils.getTraceId()); logDO.setUserType(RandomUtil.randomEle(UserTypeEnum.values()).getValue()); logDO.setUserIp("192.168.111.16"); logDO.setUsername("wangxiaokai"); logDO.setCreateTime(buildTime(2021, 3, 6)); - logDO.setResult(SysLoginResultEnum.SUCCESS.getResult()); + logDO.setResult(LoginResultEnum.SUCCESS.getResult()); }); loginLogMapper.insert(loginLogDO); // 下é¢å‡ ä¸ªéƒ½æ˜¯ä¸åŒ¹é…çš„æ•°æ® // 登录失败的 - loginLogMapper.insert(ObjectUtils.cloneIgnoreId(loginLogDO, logDO -> logDO.setResult(SysLoginResultEnum.CAPTCHA_CODE_ERROR.getResult()))); + loginLogMapper.insert(ObjectUtils.cloneIgnoreId(loginLogDO, logDO -> logDO.setResult(LoginResultEnum.CAPTCHA_CODE_ERROR.getResult()))); // ä¸åŒip段的 loginLogMapper.insert(ObjectUtils.cloneIgnoreId(loginLogDO, logDO -> logDO.setUserIp("192.168.128.18"))); // ä¸åŒusername @@ -105,7 +105,7 @@ public class SysLoginLogServiceImplTest extends BaseDbUnitTest { // æž„é€ è°ƒç”¨å‚æ•° - SysLoginLogExportReqVO reqVO = new SysLoginLogExportReqVO(); + LoginLogExportReqVO reqVO = new LoginLogExportReqVO(); reqVO.setUsername("wangxiaokai"); reqVO.setUserIp("192.168.111"); reqVO.setStatus(true); diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/SysOperateLogServiceImplTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImplTest.java similarity index 84% rename from yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/SysOperateLogServiceImplTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImplTest.java index 7838defb92..6f6edf4cf0 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/SysOperateLogServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImplTest.java @@ -1,11 +1,11 @@ package cn.iocoder.yudao.module.system.service.logger; import cn.hutool.core.map.MapUtil; -import cn.iocoder.yudao.module.system.controller.logger.vo.operatelog.SysOperateLogExportReqVO; -import cn.iocoder.yudao.module.system.controller.logger.vo.operatelog.SysOperateLogPageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysOperateLogDO; -import cn.iocoder.yudao.module.system.dal.mysql.logger.SysOperateLogMapper; -import cn.iocoder.yudao.module.system.service.user.SysUserService; +import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO; +import cn.iocoder.yudao.module.system.dal.mysql.logger.OperateLogMapper; +import cn.iocoder.yudao.module.system.service.user.UserService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.enums.common.SysSexEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; @@ -33,17 +33,17 @@ import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.when; -@Import({SysOperateLogServiceImpl.class}) -public class SysOperateLogServiceImplTest extends BaseDbUnitTest { +@Import({OperateLogServiceImpl.class}) +public class OperateLogServiceImplTest extends BaseDbUnitTest { @Resource - private SysOperateLogService operateLogServiceImpl; + private OperateLogService operateLogServiceImpl; @Resource - private SysOperateLogMapper operateLogMapper; + private OperateLogMapper operateLogMapper; @MockBean - private SysUserService userService; + private UserService userService; @Test public void testCreateOperateLogAsync() throws InterruptedException, ExecutionException { @@ -58,7 +58,7 @@ public class SysOperateLogServiceImplTest extends BaseDbUnitTest { Future future = operateLogServiceImpl.createOperateLogAsync(reqVO); future.get(); // 断言æ’å…¥æ˜¯å¦æ­£ç¡® - SysOperateLogDO sysOperateLogDO = operateLogMapper.selectOne("trace_id", traceId); + OperateLogDO sysOperateLogDO = operateLogMapper.selectOne("trace_id", traceId); assertPojoEquals(reqVO, sysOperateLogDO); } @@ -74,7 +74,7 @@ public class SysOperateLogServiceImplTest extends BaseDbUnitTest { when(userService.getUsersByNickname("wangkai")).thenReturn(Collections.singletonList(user)); Long userId = user.getId(); // 构造æ“作日志 - SysOperateLogDO sysOperateLogDO = RandomUtils.randomPojo(SysOperateLogDO.class, o -> { + OperateLogDO sysOperateLogDO = RandomUtils.randomPojo(OperateLogDO.class, o -> { o.setUserId(userId); o.setModule("order"); o.setType(OperateTypeEnum.CREATE.getType()); @@ -97,7 +97,7 @@ public class SysOperateLogServiceImplTest extends BaseDbUnitTest { operateLogMapper.insert(ObjectUtils.cloneIgnoreId(sysOperateLogDO, logDO -> logDO.setResultCode(GlobalErrorCodeConstants.BAD_REQUEST.getCode()))); // æž„é€ è°ƒç”¨å‚æ•° - SysOperateLogPageReqVO reqVO = new SysOperateLogPageReqVO(); + OperateLogPageReqVO reqVO = new OperateLogPageReqVO(); reqVO.setUserNickname("wangkai"); reqVO.setModule("order"); reqVO.setType(OperateTypeEnum.CREATE.getType()); @@ -106,7 +106,7 @@ public class SysOperateLogServiceImplTest extends BaseDbUnitTest { reqVO.setSuccess(true); // 调用service方法 - PageResult pageResult = operateLogServiceImpl.getOperateLogPage(reqVO); + PageResult pageResult = operateLogServiceImpl.getOperateLogPage(reqVO); // æ–­è¨€ï¼ŒåªæŸ¥åˆ°äº†ä¸€æ¡ç¬¦åˆæ¡ä»¶çš„ assertEquals(1, pageResult.getTotal()); assertEquals(1, pageResult.getList().size()); @@ -125,7 +125,7 @@ public class SysOperateLogServiceImplTest extends BaseDbUnitTest { when(userService.getUsersByNickname("wangkai")).thenReturn(Collections.singletonList(user)); Long userId = user.getId(); // 构造æ“作日志 - SysOperateLogDO sysOperateLogDO = RandomUtils.randomPojo(SysOperateLogDO.class, o -> { + OperateLogDO sysOperateLogDO = RandomUtils.randomPojo(OperateLogDO.class, o -> { o.setUserId(userId); o.setModule("order"); o.setType(OperateTypeEnum.CREATE.getType()); @@ -148,7 +148,7 @@ public class SysOperateLogServiceImplTest extends BaseDbUnitTest { operateLogMapper.insert(ObjectUtils.cloneIgnoreId(sysOperateLogDO, logDO -> logDO.setResultCode(GlobalErrorCodeConstants.BAD_REQUEST.getCode()))); // æž„é€ è°ƒç”¨å‚æ•° - SysOperateLogExportReqVO reqVO = new SysOperateLogExportReqVO(); + OperateLogExportReqVO reqVO = new OperateLogExportReqVO(); reqVO.setUserNickname("wangkai"); reqVO.setModule("order"); reqVO.setType(OperateTypeEnum.CREATE.getType()); @@ -157,7 +157,7 @@ public class SysOperateLogServiceImplTest extends BaseDbUnitTest { reqVO.setSuccess(true); // 调用 service 方法 - List list = operateLogServiceImpl.getOperateLogs(reqVO); + List list = operateLogServiceImpl.getOperateLogs(reqVO); // æ–­è¨€ï¼ŒåªæŸ¥åˆ°äº†ä¸€æ¡ç¬¦åˆæ¡ä»¶çš„ assertEquals(1, list.size()); assertPojoEquals(sysOperateLogDO, list.get(0)); diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/notice/SysNoticeServiceImplTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/notice/NoticeServiceImplTest.java similarity index 63% rename from yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/notice/SysNoticeServiceImplTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/notice/NoticeServiceImplTest.java index 0d9144f752..0d5babc505 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/notice/SysNoticeServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/notice/NoticeServiceImplTest.java @@ -2,12 +2,12 @@ package cn.iocoder.yudao.module.system.service.notice; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticeCreateReqVO; -import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticePageReqVO; -import cn.iocoder.yudao.module.system.controller.notice.vo.SysNoticeUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.notice.SysNoticeDO; +import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticePageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeUpdateReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO; import cn.iocoder.yudao.module.system.dal.mysql.notice.SysNoticeMapper; -import cn.iocoder.yudao.module.system.enums.notice.SysNoticeTypeEnum; +import cn.iocoder.yudao.module.system.enums.notice.NoticeTypeEnum; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; import org.junit.jupiter.api.Test; @@ -18,18 +18,18 @@ import javax.annotation.Resource; import java.util.function.Consumer; import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.NOTICE_NOT_FOUND; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.NOTICE_NOT_FOUND; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; import static org.junit.jupiter.api.Assertions.*; -@Import(SysNoticeServiceImpl.class) -class SysNoticeServiceImplTest extends BaseDbUnitTest { +@Import(NoticeServiceImpl.class) +class NoticeServiceImplTest extends BaseDbUnitTest { @Resource - private SysNoticeServiceImpl sysNoticeService; + private NoticeServiceImpl sysNoticeService; @Resource private SysNoticeMapper sysNoticeMapper; @@ -37,10 +37,10 @@ class SysNoticeServiceImplTest extends BaseDbUnitTest { @Test public void testPageNotices_success() { // æ’å…¥å‰ç½®æ•°æ® - SysNoticeDO dbNotice = randomPojo(SysNoticeDO.class, o -> { + NoticeDO dbNotice = randomPojo(NoticeDO.class, o -> { o.setTitle("尼夿‹‰æ–¯èµµå››æ¥å•¦ï¼"); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - o.setType(randomEle(SysNoticeTypeEnum.values()).getType()); + o.setType(randomEle(NoticeTypeEnum.values()).getType()); }); sysNoticeMapper.insert(dbNotice); @@ -51,10 +51,10 @@ class SysNoticeServiceImplTest extends BaseDbUnitTest { // 查询 - SysNoticePageReqVO reqVO = new SysNoticePageReqVO(); + NoticePageReqVO reqVO = new NoticePageReqVO(); reqVO.setTitle("尼夿‹‰æ–¯èµµå››æ¥å•¦ï¼"); reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); - PageResult pageResult = sysNoticeService.pageNotices(reqVO); + PageResult pageResult = sysNoticeService.pageNotices(reqVO); // éªŒè¯æŸ¥è¯¢ç»“æžœç»è¿‡ç­›é€‰ assertEquals(1, pageResult.getTotal()); @@ -66,11 +66,11 @@ class SysNoticeServiceImplTest extends BaseDbUnitTest { @Test public void testGetNotice_success() { // æ’å…¥å‰ç½®æ•°æ® - SysNoticeDO dbNotice = randomSysNoticeDO(); + NoticeDO dbNotice = randomSysNoticeDO(); sysNoticeMapper.insert(dbNotice); // 查询 - SysNoticeDO notice = sysNoticeService.getNotice(dbNotice.getId()); + NoticeDO notice = sysNoticeService.getNotice(dbNotice.getId()); // éªŒè¯æ’入与读å–对象是å¦ä¸€è‡´ assertNotNull(notice); @@ -80,38 +80,38 @@ class SysNoticeServiceImplTest extends BaseDbUnitTest { @Test public void testCreateNotice_success() { // 准备傿•° - SysNoticeCreateReqVO reqVO = randomSysNoticeCreateReqVO(); + NoticeCreateReqVO reqVO = randomSysNoticeCreateReqVO(); // 校验æ’å…¥æ˜¯å¦æˆåŠŸ Long noticeId = sysNoticeService.createNotice(reqVO); assertNotNull(noticeId); // 校验æ’å…¥å±žæ€§æ˜¯å¦æ­£ç¡® - SysNoticeDO notice = sysNoticeMapper.selectById(noticeId); + NoticeDO notice = sysNoticeMapper.selectById(noticeId); assertPojoEquals(reqVO, notice); } @Test public void testUpdateNotice_success() { // æ’å…¥å‰ç½®æ•°æ® - SysNoticeDO dbNoticeDO = randomSysNoticeDO(); + NoticeDO dbNoticeDO = randomSysNoticeDO(); sysNoticeMapper.insert(dbNoticeDO); // å‡†å¤‡æ›´æ–°å‚æ•° - SysNoticeUpdateReqVO reqVO = randomSysNoticeUpdateReqVO(o -> o.setId(dbNoticeDO.getId())); + NoticeUpdateReqVO reqVO = randomSysNoticeUpdateReqVO(o -> o.setId(dbNoticeDO.getId())); // æ›´æ–° sysNoticeService.updateNotice(reqVO); // æ£€éªŒæ˜¯å¦æ›´æ–°æˆåŠŸ - SysNoticeDO notice = sysNoticeMapper.selectById(reqVO.getId()); + NoticeDO notice = sysNoticeMapper.selectById(reqVO.getId()); assertPojoEquals(reqVO, notice); } @Test public void testDeleteNotice_success() { // æ’å…¥å‰ç½®æ•°æ® - SysNoticeDO dbNotice = randomSysNoticeDO(); + NoticeDO dbNotice = randomSysNoticeDO(); sysNoticeMapper.insert(dbNotice); // 删除 @@ -124,7 +124,7 @@ class SysNoticeServiceImplTest extends BaseDbUnitTest { @Test public void checkNoticeExists_success() { // æ’å…¥å‰ç½®æ•°æ® - SysNoticeDO dbNotice = randomSysNoticeDO(); + NoticeDO dbNotice = randomSysNoticeDO(); sysNoticeMapper.insert(dbNotice); // æˆåŠŸè°ƒç”¨ @@ -137,24 +137,24 @@ class SysNoticeServiceImplTest extends BaseDbUnitTest { } @SafeVarargs - private static SysNoticeDO randomSysNoticeDO(Consumer... consumers) { - SysNoticeDO notice = randomPojo(SysNoticeDO.class, consumers); - notice.setType(randomEle(SysNoticeTypeEnum.values()).getType()); + private static NoticeDO randomSysNoticeDO(Consumer... consumers) { + NoticeDO notice = randomPojo(NoticeDO.class, consumers); + notice.setType(randomEle(NoticeTypeEnum.values()).getType()); notice.setStatus(CommonStatusEnum.ENABLE.getStatus()); return notice; } @SafeVarargs - private static SysNoticeUpdateReqVO randomSysNoticeUpdateReqVO(Consumer... consumers) { - SysNoticeUpdateReqVO reqVO = randomPojo(SysNoticeUpdateReqVO.class, consumers); - reqVO.setType(randomEle(SysNoticeTypeEnum.values()).getType()); + private static NoticeUpdateReqVO randomSysNoticeUpdateReqVO(Consumer... consumers) { + NoticeUpdateReqVO reqVO = randomPojo(NoticeUpdateReqVO.class, consumers); + reqVO.setType(randomEle(NoticeTypeEnum.values()).getType()); reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); return reqVO; } - private static SysNoticeCreateReqVO randomSysNoticeCreateReqVO() { - SysNoticeCreateReqVO reqVO = randomPojo(SysNoticeCreateReqVO.class); - reqVO.setType(randomEle(SysNoticeTypeEnum.values()).getType()); + private static NoticeCreateReqVO randomSysNoticeCreateReqVO() { + NoticeCreateReqVO reqVO = randomPojo(NoticeCreateReqVO.class); + reqVO.setType(randomEle(NoticeTypeEnum.values()).getType()); reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); return reqVO; } diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/SysMenuServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceTest.java similarity index 70% rename from yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/SysMenuServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceTest.java index 06209bb6da..5b2b343830 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/SysMenuServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceTest.java @@ -3,19 +3,17 @@ package cn.iocoder.yudao.module.system.service.permission; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.lang.Assert; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.module.system.controller.permission.vo.menu.SysMenuCreateReqVO; -import cn.iocoder.yudao.module.system.controller.permission.vo.menu.SysMenuListReqVO; -import cn.iocoder.yudao.module.system.controller.permission.vo.menu.SysMenuUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysMenuDO; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuListReqVO; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuUpdateReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; import cn.iocoder.yudao.module.system.dal.mysql.permission.SysMenuMapper; import cn.iocoder.yudao.module.system.enums.permission.MenuTypeEnum; -import cn.iocoder.yudao.module.system.mq.producer.permission.SysMenuProducer; +import cn.iocoder.yudao.module.system.mq.producer.permission.MenuProducer; import cn.iocoder.yudao.framework.common.util.spring.SpringAopUtils; -import cn.iocoder.yudao.framework.test.core.util.RandomUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; import com.google.common.collect.Multimap; -import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Import; @@ -23,49 +21,49 @@ import org.springframework.context.annotation.Import; import javax.annotation.Resource; import java.util.*; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.verify; -@Import(SysMenuServiceImpl.class) -public class SysMenuServiceTest extends BaseDbUnitTest { +@Import(MenuServiceImpl.class) +public class MenuServiceTest extends BaseDbUnitTest { @Resource - private SysMenuServiceImpl sysMenuService; + private MenuServiceImpl sysMenuService; @MockBean - private SysPermissionService sysPermissionService; + private PermissionService sysPermissionService; @MockBean - private SysMenuProducer sysMenuProducer; + private MenuProducer sysMenuProducer; @Resource private SysMenuMapper menuMapper; @Test public void testInitLocalCache_success() throws Exception { - SysMenuDO menuDO1 = createMenuDO(MenuTypeEnum.MENU, "xxxx", 0L); + MenuDO menuDO1 = createMenuDO(MenuTypeEnum.MENU, "xxxx", 0L); menuMapper.insert(menuDO1); - SysMenuDO menuDO2 = createMenuDO(MenuTypeEnum.MENU, "xxxx", 0L); + MenuDO menuDO2 = createMenuDO(MenuTypeEnum.MENU, "xxxx", 0L); menuMapper.insert(menuDO2); // 调用 sysMenuService.initLocalCache(); // 获å–代ç†å¯¹è±¡ - SysMenuServiceImpl target = (SysMenuServiceImpl) SpringAopUtils.getTarget(sysMenuService); + MenuServiceImpl target = (MenuServiceImpl) SpringAopUtils.getTarget(sysMenuService); - Map menuCache = - (Map) BeanUtil.getFieldValue(target, "menuCache"); + Map menuCache = + (Map) BeanUtil.getFieldValue(target, "menuCache"); Assert.isTrue(menuCache.size() == 2); assertPojoEquals(menuDO1, menuCache.get(menuDO1.getId())); assertPojoEquals(menuDO2, menuCache.get(menuDO2.getId())); - Multimap permissionMenuCache = - (Multimap) BeanUtil.getFieldValue(target, "permissionMenuCache"); + Multimap permissionMenuCache = + (Multimap) BeanUtil.getFieldValue(target, "permissionMenuCache"); Assert.isTrue(permissionMenuCache.size() == 2); assertPojoEquals(menuDO1, permissionMenuCache.get(menuDO1.getPermission())); assertPojoEquals(menuDO2, permissionMenuCache.get(menuDO2.getPermission())); @@ -77,12 +75,12 @@ public class SysMenuServiceTest extends BaseDbUnitTest { @Test public void testCreateMenu_success() { //构造父目录 - SysMenuDO menuDO = createMenuDO(MenuTypeEnum.MENU, "parent", 0L); + MenuDO menuDO = createMenuDO(MenuTypeEnum.MENU, "parent", 0L); menuMapper.insert(menuDO); Long parentId = menuDO.getId(); //调用 - SysMenuCreateReqVO vo = randomPojo(SysMenuCreateReqVO.class, o -> { + MenuCreateReqVO vo = randomPojo(MenuCreateReqVO.class, o -> { o.setParentId(parentId); o.setName("testSonName"); o.setType(MenuTypeEnum.MENU.getType()); @@ -93,7 +91,7 @@ public class SysMenuServiceTest extends BaseDbUnitTest { //断言 assertNotNull(menuId); // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - SysMenuDO ret = menuMapper.selectById(menuId); + MenuDO ret = menuMapper.selectById(menuId); assertPojoEquals(vo, ret); // 校验调用 verify(sysMenuProducer).sendMenuRefreshMessage(); @@ -102,12 +100,12 @@ public class SysMenuServiceTest extends BaseDbUnitTest { @Test public void testUpdateMenu_success() { //构造父å­ç›®å½• - SysMenuDO sonMenuDO = initParentAndSonMenuDO(); + MenuDO sonMenuDO = initParentAndSonMenuDO(); Long sonId = sonMenuDO.getId(); Long parentId = sonMenuDO.getParentId(); //调用 - SysMenuUpdateReqVO vo = randomPojo(SysMenuUpdateReqVO.class, o -> { + MenuUpdateReqVO vo = randomPojo(MenuUpdateReqVO.class, o -> { o.setId(sonId); o.setParentId(parentId); o.setType(MenuTypeEnum.MENU.getType()); @@ -118,7 +116,7 @@ public class SysMenuServiceTest extends BaseDbUnitTest { //断言 // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - SysMenuDO ret = menuMapper.selectById(sonId); + MenuDO ret = menuMapper.selectById(sonId); assertPojoEquals(vo, ret); // 校验调用 verify(sysMenuProducer).sendMenuRefreshMessage(); @@ -130,7 +128,7 @@ public class SysMenuServiceTest extends BaseDbUnitTest { Long parentId = 10000L; //调用 - SysMenuUpdateReqVO vo = randomPojo(SysMenuUpdateReqVO.class, o -> { + MenuUpdateReqVO vo = randomPojo(MenuUpdateReqVO.class, o -> { o.setId(sonId); o.setParentId(parentId); o.setType(MenuTypeEnum.MENU.getType()); @@ -142,14 +140,14 @@ public class SysMenuServiceTest extends BaseDbUnitTest { @Test public void testDeleteMenu_success() { - SysMenuDO sonMenuDO = initParentAndSonMenuDO(); + MenuDO sonMenuDO = initParentAndSonMenuDO(); Long sonId = sonMenuDO.getId(); // 调用 sysMenuService.deleteMenu(sonId); // 断言 - SysMenuDO menuDO = menuMapper.selectById(sonId); + MenuDO menuDO = menuMapper.selectById(sonId); assertNull(menuDO); verify(sysPermissionService).processMenuDeleted(sonId); verify(sysMenuProducer).sendMenuRefreshMessage(); @@ -164,7 +162,7 @@ public class SysMenuServiceTest extends BaseDbUnitTest { @Test public void testDeleteMenu_existChildren() { - SysMenuDO sonMenu = initParentAndSonMenuDO(); + MenuDO sonMenu = initParentAndSonMenuDO(); Long parentId = sonMenu.getParentId(); assertServiceException(() -> sysMenuService.deleteMenu(parentId), MENU_EXISTS_CHILDREN); @@ -172,17 +170,17 @@ public class SysMenuServiceTest extends BaseDbUnitTest { @Test public void testGetMenus_success() { - Map idMenuMap = new HashMap<>(); - SysMenuDO menuDO = createMenuDO(MenuTypeEnum.MENU, "parent", 0L); + Map idMenuMap = new HashMap<>(); + MenuDO menuDO = createMenuDO(MenuTypeEnum.MENU, "parent", 0L); menuMapper.insert(menuDO); idMenuMap.put(menuDO.getId(), menuDO); - SysMenuDO sonMenu = createMenuDO(MenuTypeEnum.MENU, "son", menuDO.getId()); + MenuDO sonMenu = createMenuDO(MenuTypeEnum.MENU, "son", menuDO.getId()); menuMapper.insert(sonMenu); idMenuMap.put(sonMenu.getId(), sonMenu); // 调用 - List menuDOS = sysMenuService.getMenus(); + List menuDOS = sysMenuService.getMenus(); // 断言 assertEquals(menuDOS.size(), idMenuMap.size()); @@ -191,9 +189,9 @@ public class SysMenuServiceTest extends BaseDbUnitTest { @Test public void testGetMenusReqVo_success() { - Map idMenuMap = new HashMap<>(); + Map idMenuMap = new HashMap<>(); // 用于验è¯å¯ä»¥æ¨¡ç³Šæœç´¢å称包å«"name",状æ€ä¸º1çš„menu - SysMenuDO menu = createMenuDO(MenuTypeEnum.MENU, "name2", 0L, 1); + MenuDO menu = createMenuDO(MenuTypeEnum.MENU, "name2", 0L, 1); menuMapper.insert(menu); idMenuMap.put(menu.getId(), menu); @@ -212,10 +210,10 @@ public class SysMenuServiceTest extends BaseDbUnitTest { menuMapper.insert(menu); // 调用 - SysMenuListReqVO reqVO = new SysMenuListReqVO(); + MenuListReqVO reqVO = new MenuListReqVO(); reqVO.setStatus(1); reqVO.setName("name"); - List menuDOS = sysMenuService.getMenus(reqVO); + List menuDOS = sysMenuService.getMenus(reqVO); // 断言 assertEquals(menuDOS.size(), idMenuMap.size()); @@ -224,14 +222,14 @@ public class SysMenuServiceTest extends BaseDbUnitTest { @Test public void testListMenusFromCache_success() throws Exception { - Map mockCacheMap = new HashMap<>(); + Map mockCacheMap = new HashMap<>(); // 获å–代ç†å¯¹è±¡ - SysMenuServiceImpl target = (SysMenuServiceImpl) SpringAopUtils.getTarget(sysMenuService); + MenuServiceImpl target = (MenuServiceImpl) SpringAopUtils.getTarget(sysMenuService); BeanUtil.setFieldValue(target, "menuCache", mockCacheMap); - Map idMenuMap = new HashMap<>(); + Map idMenuMap = new HashMap<>(); // ç”¨äºŽéªŒè¯æœç´¢ç±»åž‹ä¸ºMENU,状æ€ä¸º1çš„menu - SysMenuDO menuDO = createMenuDO(1L, MenuTypeEnum.MENU, "name", 0L, 1); + MenuDO menuDO = createMenuDO(1L, MenuTypeEnum.MENU, "name", 0L, 1); mockCacheMap.put(menuDO.getId(), menuDO); idMenuMap.put(menuDO.getId(), menuDO); @@ -245,7 +243,7 @@ public class SysMenuServiceTest extends BaseDbUnitTest { menuDO = createMenuDO(4L, MenuTypeEnum.MENU, "name", 0L, 2); mockCacheMap.put(menuDO.getId(), menuDO); - List menuDOS = sysMenuService.listMenusFromCache(Collections.singletonList(MenuTypeEnum.MENU.getType()), + List menuDOS = sysMenuService.listMenusFromCache(Collections.singletonList(MenuTypeEnum.MENU.getType()), Collections.singletonList(CommonStatusEnum.DISABLE.getStatus())); assertEquals(menuDOS.size(), idMenuMap.size()); menuDOS.forEach(m -> assertPojoEquals(idMenuMap.get(m.getId()), m)); @@ -253,14 +251,14 @@ public class SysMenuServiceTest extends BaseDbUnitTest { @Test public void testListMenusFromCache2_success() throws Exception { - Map mockCacheMap = new HashMap<>(); + Map mockCacheMap = new HashMap<>(); // 获å–代ç†å¯¹è±¡ - SysMenuServiceImpl target = (SysMenuServiceImpl) SpringAopUtils.getTarget(sysMenuService); + MenuServiceImpl target = (MenuServiceImpl) SpringAopUtils.getTarget(sysMenuService); BeanUtil.setFieldValue(target, "menuCache", mockCacheMap); - Map idMenuMap = new HashMap<>(); + Map idMenuMap = new HashMap<>(); // éªŒè¯æœç´¢id为1, 类型为MENU, 状æ€ä¸º1 çš„menu - SysMenuDO menuDO = createMenuDO(1L, MenuTypeEnum.MENU, "name", 0L, 1); + MenuDO menuDO = createMenuDO(1L, MenuTypeEnum.MENU, "name", 0L, 1); mockCacheMap.put(menuDO.getId(), menuDO); idMenuMap.put(menuDO.getId(), menuDO); @@ -272,7 +270,7 @@ public class SysMenuServiceTest extends BaseDbUnitTest { menuDO = createMenuDO(4L, MenuTypeEnum.MENU, "name", 0L, 2); mockCacheMap.put(menuDO.getId(), menuDO); - List menuDOS = sysMenuService.listMenusFromCache(Collections.singletonList(1L), + List menuDOS = sysMenuService.listMenusFromCache(Collections.singletonList(1L), Collections.singletonList(MenuTypeEnum.MENU.getType()), Collections.singletonList(1)); assertEquals(menuDOS.size(), idMenuMap.size()); menuDOS.forEach(menu -> assertPojoEquals(idMenuMap.get(menu.getId()), menu)); @@ -280,7 +278,7 @@ public class SysMenuServiceTest extends BaseDbUnitTest { @Test public void testCheckParentResource_success() { - SysMenuDO menuDO = createMenuDO(MenuTypeEnum.MENU, "parent", 0L); + MenuDO menuDO = createMenuDO(MenuTypeEnum.MENU, "parent", 0L); menuMapper.insert(menuDO); Long parentId = menuDO.getId(); @@ -299,7 +297,7 @@ public class SysMenuServiceTest extends BaseDbUnitTest { @Test public void testCheckParentResource_parentTypeError() { - SysMenuDO menuDO = createMenuDO(MenuTypeEnum.BUTTON, "parent", 0L); + MenuDO menuDO = createMenuDO(MenuTypeEnum.BUTTON, "parent", 0L); menuMapper.insert(menuDO); Long parentId = menuDO.getId(); @@ -308,7 +306,7 @@ public class SysMenuServiceTest extends BaseDbUnitTest { @Test public void testCheckResource_success() { - SysMenuDO sonMenu = initParentAndSonMenuDO(); + MenuDO sonMenu = initParentAndSonMenuDO(); Long parentId = sonMenu.getParentId(); Long otherSonMenuId = randomLongId(); @@ -319,7 +317,7 @@ public class SysMenuServiceTest extends BaseDbUnitTest { @Test public void testCheckResource_sonMenuNameDuplicate(){ - SysMenuDO sonMenu=initParentAndSonMenuDO(); + MenuDO sonMenu=initParentAndSonMenuDO(); Long parentId=sonMenu.getParentId(); Long otherSonMenuId=randomLongId(); @@ -333,27 +331,27 @@ public class SysMenuServiceTest extends BaseDbUnitTest { * * @return */ - private SysMenuDO initParentAndSonMenuDO() { + private MenuDO initParentAndSonMenuDO() { //构造父å­ç›®å½• - SysMenuDO menuDO = createMenuDO(MenuTypeEnum.MENU, "parent", 0L); + MenuDO menuDO = createMenuDO(MenuTypeEnum.MENU, "parent", 0L); menuMapper.insert(menuDO); Long parentId = menuDO.getId(); - SysMenuDO sonMenuDO = createMenuDO(MenuTypeEnum.MENU, "testSonName", parentId); + MenuDO sonMenuDO = createMenuDO(MenuTypeEnum.MENU, "testSonName", parentId); menuMapper.insert(sonMenuDO); return sonMenuDO; } - private SysMenuDO createMenuDO(MenuTypeEnum typeEnum, String menuName, Long parentId) { + private MenuDO createMenuDO(MenuTypeEnum typeEnum, String menuName, Long parentId) { return createMenuDO(typeEnum, menuName, parentId, randomCommonStatus()); } - private SysMenuDO createMenuDO(MenuTypeEnum typeEnum, String menuName, Long parentId, Integer status) { + private MenuDO createMenuDO(MenuTypeEnum typeEnum, String menuName, Long parentId, Integer status) { return createMenuDO(null, typeEnum, menuName, parentId, status); } - private SysMenuDO createMenuDO(Long id, MenuTypeEnum typeEnum, String menuName, Long parentId, Integer status) { - return randomPojo(SysMenuDO.class, o -> { + private MenuDO createMenuDO(Long id, MenuTypeEnum typeEnum, String menuName, Long parentId, Integer status) { + return randomPojo(MenuDO.class, o -> { o.setId(id); o.setParentId(parentId); o.setType(typeEnum.getType()); diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/SysPermissionServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceTest.java similarity index 83% rename from yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/SysPermissionServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceTest.java index dde1a7bb76..3652c2ba30 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/SysPermissionServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceTest.java @@ -3,12 +3,12 @@ package cn.iocoder.yudao.module.system.service.permission; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleMenuDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleMenuDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysUserRoleDO; import cn.iocoder.yudao.module.system.dal.mysql.permission.SysRoleMenuMapper; import cn.iocoder.yudao.module.system.dal.mysql.permission.SysUserRoleMapper; -import cn.iocoder.yudao.module.system.mq.producer.permission.SysPermissionProducer; -import cn.iocoder.yudao.module.system.service.dept.SysDeptService; +import cn.iocoder.yudao.module.system.mq.producer.permission.PermissionProducer; +import cn.iocoder.yudao.module.system.service.dept.DeptService; import cn.iocoder.yudao.framework.datapermission.core.dept.service.dto.DeptDataPermissionRespDTO; import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.framework.security.core.enums.DataScopeEnum; @@ -30,11 +30,11 @@ import static org.mockito.ArgumentMatchers.same; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -@Import(SysPermissionServiceImpl.class) -public class SysPermissionServiceTest extends BaseDbUnitTest { +@Import(PermissionServiceImpl.class) +public class PermissionServiceTest extends BaseDbUnitTest { @Resource - private SysPermissionServiceImpl permissionService; + private PermissionServiceImpl permissionService; @Resource private SysRoleMenuMapper roleMenuMapper; @@ -42,14 +42,14 @@ public class SysPermissionServiceTest extends BaseDbUnitTest { private SysUserRoleMapper userRoleMapper; @MockBean - private SysRoleService roleService; + private RoleService roleService; @MockBean - private SysMenuService menuService; + private MenuService menuService; @MockBean - private SysDeptService deptService; + private DeptService deptService; @MockBean - private SysPermissionProducer permissionProducer; + private PermissionProducer permissionProducer; @Test public void testProcessRoleDeleted() { @@ -61,15 +61,15 @@ public class SysPermissionServiceTest extends BaseDbUnitTest { SysUserRoleDO userRoleDO02 = randomPojo(SysUserRoleDO.class); // ä¸è¢«åˆ é™¤ userRoleMapper.insert(userRoleDO02); // mock æ•°æ® RoleMenu - SysRoleMenuDO roleMenuDO01 = randomPojo(SysRoleMenuDO.class, o -> o.setRoleId(roleId)); // 被删除 + RoleMenuDO roleMenuDO01 = randomPojo(RoleMenuDO.class, o -> o.setRoleId(roleId)); // 被删除 roleMenuMapper.insert(roleMenuDO01); - SysRoleMenuDO roleMenuDO02 = randomPojo(SysRoleMenuDO.class); // ä¸è¢«åˆ é™¤ + RoleMenuDO roleMenuDO02 = randomPojo(RoleMenuDO.class); // ä¸è¢«åˆ é™¤ roleMenuMapper.insert(roleMenuDO02); // 调用 permissionService.processRoleDeleted(roleId); // æ–­è¨€æ•°æ® RoleMenuDO - List dbRoleMenus = roleMenuMapper.selectList(); + List dbRoleMenus = roleMenuMapper.selectList(); assertEquals(1, dbRoleMenus.size()); assertPojoEquals(dbRoleMenus.get(0), roleMenuDO02); // æ–­è¨€æ•°æ® UserRoleDO @@ -85,15 +85,15 @@ public class SysPermissionServiceTest extends BaseDbUnitTest { // 准备傿•° Long menuId = randomLongId(); // mock æ•°æ® - SysRoleMenuDO roleMenuDO01 = randomPojo(SysRoleMenuDO.class, o -> o.setMenuId(menuId)); // 被删除 + RoleMenuDO roleMenuDO01 = randomPojo(RoleMenuDO.class, o -> o.setMenuId(menuId)); // 被删除 roleMenuMapper.insert(roleMenuDO01); - SysRoleMenuDO roleMenuDO02 = randomPojo(SysRoleMenuDO.class); // ä¸è¢«åˆ é™¤ + RoleMenuDO roleMenuDO02 = randomPojo(RoleMenuDO.class); // ä¸è¢«åˆ é™¤ roleMenuMapper.insert(roleMenuDO02); // 调用 permissionService.processMenuDeleted(menuId); // æ–­è¨€æ•°æ® - List dbRoleMenus = roleMenuMapper.selectList(); + List dbRoleMenus = roleMenuMapper.selectList(); assertEquals(1, dbRoleMenus.size()); assertPojoEquals(dbRoleMenus.get(0), roleMenuDO02); // 断言调用 @@ -124,7 +124,7 @@ public class SysPermissionServiceTest extends BaseDbUnitTest { LoginUser loginUser = randomPojo(LoginUser.class); // mock 方法 DeptDataPermissionRespDTO respDTO = new DeptDataPermissionRespDTO(); - loginUser.setContext(SysPermissionServiceImpl.CONTEXT_KEY, respDTO); + loginUser.setContext(PermissionServiceImpl.CONTEXT_KEY, respDTO); // 调用 DeptDataPermissionRespDTO result = permissionService.getDeptDataPermission(loginUser); @@ -146,7 +146,7 @@ public class SysPermissionServiceTest extends BaseDbUnitTest { assertTrue(result.getAll()); assertFalse(result.getSelf()); assertTrue(CollUtil.isEmpty(result.getDeptIds())); - assertSame(result, loginUser.getContext(SysPermissionServiceImpl.CONTEXT_KEY, DeptDataPermissionRespDTO.class)); + assertSame(result, loginUser.getContext(PermissionServiceImpl.CONTEXT_KEY, DeptDataPermissionRespDTO.class)); } @Test @@ -165,7 +165,7 @@ public class SysPermissionServiceTest extends BaseDbUnitTest { assertEquals(roleDO.getDataScopeDeptIds().size() + 1, result.getDeptIds().size()); assertTrue(CollUtil.containsAll(result.getDeptIds(), roleDO.getDataScopeDeptIds())); assertTrue(CollUtil.contains(result.getDeptIds(), loginUser.getDeptId())); - assertSame(result, loginUser.getContext(SysPermissionServiceImpl.CONTEXT_KEY, DeptDataPermissionRespDTO.class)); + assertSame(result, loginUser.getContext(PermissionServiceImpl.CONTEXT_KEY, DeptDataPermissionRespDTO.class)); } @Test @@ -183,7 +183,7 @@ public class SysPermissionServiceTest extends BaseDbUnitTest { assertFalse(result.getSelf()); assertEquals(1, result.getDeptIds().size()); assertTrue(CollUtil.contains(result.getDeptIds(), loginUser.getDeptId())); - assertSame(result, loginUser.getContext(SysPermissionServiceImpl.CONTEXT_KEY, DeptDataPermissionRespDTO.class)); + assertSame(result, loginUser.getContext(PermissionServiceImpl.CONTEXT_KEY, DeptDataPermissionRespDTO.class)); } @Test @@ -205,7 +205,7 @@ public class SysPermissionServiceTest extends BaseDbUnitTest { assertFalse(result.getSelf()); assertEquals(1, result.getDeptIds().size()); assertTrue(CollUtil.contains(result.getDeptIds(), deptDO.getId())); - assertSame(result, loginUser.getContext(SysPermissionServiceImpl.CONTEXT_KEY, DeptDataPermissionRespDTO.class)); + assertSame(result, loginUser.getContext(PermissionServiceImpl.CONTEXT_KEY, DeptDataPermissionRespDTO.class)); } @Test @@ -222,7 +222,7 @@ public class SysPermissionServiceTest extends BaseDbUnitTest { assertFalse(result.getAll()); assertTrue(result.getSelf()); assertTrue(CollUtil.isEmpty(result.getDeptIds())); - assertSame(result, loginUser.getContext(SysPermissionServiceImpl.CONTEXT_KEY, DeptDataPermissionRespDTO.class)); + assertSame(result, loginUser.getContext(PermissionServiceImpl.CONTEXT_KEY, DeptDataPermissionRespDTO.class)); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/SysRoleServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceTest.java similarity index 72% rename from yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/SysRoleServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceTest.java index d58e68ad2a..68e55926ad 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/SysRoleServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceTest.java @@ -4,13 +4,13 @@ import cn.hutool.core.bean.BeanUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.security.core.enums.DataScopeEnum; -import cn.iocoder.yudao.module.system.controller.permission.vo.role.SysRoleCreateReqVO; -import cn.iocoder.yudao.module.system.controller.permission.vo.role.SysRolePageReqVO; -import cn.iocoder.yudao.module.system.controller.permission.vo.role.SysRoleUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleUpdateReqVO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; import cn.iocoder.yudao.module.system.dal.mysql.permission.SysRoleMapper; -import cn.iocoder.yudao.module.system.enums.permission.SysRoleTypeEnum; -import cn.iocoder.yudao.module.system.mq.producer.permission.SysRoleProducer; +import cn.iocoder.yudao.module.system.enums.permission.RoleTypeEnum; +import cn.iocoder.yudao.module.system.mq.producer.permission.RoleProducer; import cn.iocoder.yudao.framework.common.util.spring.SpringAopUtils; import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; import org.junit.jupiter.api.Test; @@ -21,7 +21,7 @@ import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.max; @@ -29,26 +29,26 @@ import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.verify; -@Import(SysRoleServiceImpl.class) -public class SysRoleServiceTest extends BaseDbUnitTest { +@Import(RoleServiceImpl.class) +public class RoleServiceTest extends BaseDbUnitTest { @Resource - private SysRoleServiceImpl sysRoleService; + private RoleServiceImpl sysRoleService; @Resource private SysRoleMapper roleMapper; @MockBean - private SysPermissionService sysPermissionService; + private PermissionService sysPermissionService; @MockBean - private SysRoleProducer sysRoleProducer; + private RoleProducer sysRoleProducer; @Test public void testInitLocalCache_success() throws Exception { - SysRoleDO roleDO1 = createRoleDO("role1", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL); + SysRoleDO roleDO1 = createRoleDO("role1", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL); roleMapper.insert(roleDO1); - SysRoleDO roleDO2 = createRoleDO("role2", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL); + SysRoleDO roleDO2 = createRoleDO("role2", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL); roleMapper.insert(roleDO2); //调用 @@ -56,7 +56,7 @@ public class SysRoleServiceTest extends BaseDbUnitTest { //断言 //获å–代ç†å¯¹è±¡ - SysRoleServiceImpl target = (SysRoleServiceImpl) SpringAopUtils.getTarget(sysRoleService); + RoleServiceImpl target = (RoleServiceImpl) SpringAopUtils.getTarget(sysRoleService); Map roleCache = (Map) BeanUtil.getFieldValue(target, "roleCache"); assertPojoEquals(roleDO1, roleCache.get(roleDO1.getId())); @@ -68,11 +68,11 @@ public class SysRoleServiceTest extends BaseDbUnitTest { @Test public void testCreateRole_success() { - SysRoleCreateReqVO reqVO = randomPojo(SysRoleCreateReqVO.class, o -> { + RoleCreateReqVO reqVO = randomPojo(RoleCreateReqVO.class, o -> { o.setCode("role_code"); o.setName("role_name"); o.setRemark("remark"); - o.setType(SysRoleTypeEnum.CUSTOM.getType()); + o.setType(RoleTypeEnum.CUSTOM.getType()); o.setSort(1); }); Long roleId = sysRoleService.createRole(reqVO); @@ -87,16 +87,16 @@ public class SysRoleServiceTest extends BaseDbUnitTest { @Test public void testUpdateRole_success() { - SysRoleDO roleDO = createRoleDO("role_name", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL); + SysRoleDO roleDO = createRoleDO("role_name", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL); roleMapper.insert(roleDO); Long roleId = roleDO.getId(); //调用 - SysRoleUpdateReqVO reqVO = randomPojo(SysRoleUpdateReqVO.class, o -> { + RoleUpdateReqVO reqVO = randomPojo(RoleUpdateReqVO.class, o -> { o.setId(roleId); o.setCode("role_code"); o.setName("update_name"); - o.setType(SysRoleTypeEnum.SYSTEM.getType()); + o.setType(RoleTypeEnum.SYSTEM.getType()); o.setSort(999); }); sysRoleService.updateRole(reqVO); @@ -110,7 +110,7 @@ public class SysRoleServiceTest extends BaseDbUnitTest { @Test public void testUpdateRoleStatus_success() { - SysRoleDO roleDO = createRoleDO("role_name", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL, CommonStatusEnum.ENABLE.getStatus()); + SysRoleDO roleDO = createRoleDO("role_name", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL, CommonStatusEnum.ENABLE.getStatus()); roleMapper.insert(roleDO); Long roleId = roleDO.getId(); @@ -126,7 +126,7 @@ public class SysRoleServiceTest extends BaseDbUnitTest { @Test public void testUpdateRoleDataScope_success() { - SysRoleDO roleDO = createRoleDO("role_name", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL); + SysRoleDO roleDO = createRoleDO("role_name", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL); roleMapper.insert(roleDO); Long roleId = roleDO.getId(); @@ -147,7 +147,7 @@ public class SysRoleServiceTest extends BaseDbUnitTest { @Test public void testDeleteRole_success() { - SysRoleDO roleDO = createRoleDO("role_name", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL); + SysRoleDO roleDO = createRoleDO("role_name", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL); roleMapper.insert(roleDO); Long roleId = roleDO.getId(); @@ -165,16 +165,16 @@ public class SysRoleServiceTest extends BaseDbUnitTest { public void testGetRoles_success() { Map idRoleMap = new HashMap<>(); // éªŒè¯æŸ¥è¯¢çжæ€ä¸º1的角色 - SysRoleDO roleDO1 = createRoleDO("role1", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 1); + SysRoleDO roleDO1 = createRoleDO("role1", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 1); roleMapper.insert(roleDO1); idRoleMap.put(roleDO1.getId(), roleDO1); - SysRoleDO roleDO2 = createRoleDO("role2", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 1); + SysRoleDO roleDO2 = createRoleDO("role2", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 1); roleMapper.insert(roleDO2); idRoleMap.put(roleDO2.getId(), roleDO2); // 以下是排除的角色 - SysRoleDO roleDO3 = createRoleDO("role3", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 2); + SysRoleDO roleDO3 = createRoleDO("role3", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 2); roleMapper.insert(roleDO3); //调用 @@ -191,21 +191,21 @@ public class SysRoleServiceTest extends BaseDbUnitTest { Map idRoleMap = new HashMap<>(); // 验è¯å称包å«"role", 状æ€ä¸º1,code为"code"的角色 // 第一页 - SysRoleDO roleDO = createRoleDO("role1", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 1, "code"); + SysRoleDO roleDO = createRoleDO("role1", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 1, "code"); roleMapper.insert(roleDO); idRoleMap.put(roleDO.getId(), roleDO); // 第二页 - roleDO = createRoleDO("role2", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 1, "code"); + roleDO = createRoleDO("role2", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 1, "code"); roleMapper.insert(roleDO); // 以下是排除的角色 - roleDO = createRoleDO("role3", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 2, "code"); + roleDO = createRoleDO("role3", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 2, "code"); roleMapper.insert(roleDO); - roleDO = createRoleDO("role4", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 1, "xxxxx"); + roleDO = createRoleDO("role4", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 1, "xxxxx"); roleMapper.insert(roleDO); //调用 - SysRolePageReqVO reqVO = randomPojo(SysRolePageReqVO.class, o -> { + RolePageReqVO reqVO = randomPojo(RolePageReqVO.class, o -> { o.setName("role"); o.setCode("code"); o.setStatus(1); @@ -226,7 +226,7 @@ public class SysRoleServiceTest extends BaseDbUnitTest { @Test public void testCheckDuplicateRole_nameDuplicate() { - SysRoleDO roleDO = createRoleDO("role_name", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL); + SysRoleDO roleDO = createRoleDO("role_name", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL); roleMapper.insert(roleDO); String duplicateName = "role_name"; @@ -239,7 +239,7 @@ public class SysRoleServiceTest extends BaseDbUnitTest { SysRoleDO roleDO = randomPojo(SysRoleDO.class, o -> { o.setName("role_999"); o.setCode("code"); - o.setType(SysRoleTypeEnum.CUSTOM.getType()); + o.setType(RoleTypeEnum.CUSTOM.getType()); o.setStatus(1); o.setDataScope(DataScopeEnum.ALL.getScope()); }); @@ -253,7 +253,7 @@ public class SysRoleServiceTest extends BaseDbUnitTest { @Test public void testCheckUpdateRole_success() { - SysRoleDO roleDO = createRoleDO("role_name", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL); + SysRoleDO roleDO = createRoleDO("role_name", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL); roleMapper.insert(roleDO); Long roleId = roleDO.getId(); @@ -267,26 +267,26 @@ public class SysRoleServiceTest extends BaseDbUnitTest { @Test public void testCheckUpdateRole_systemRoleCanNotBeUpdate() { - SysRoleDO roleDO = createRoleDO("role_name", SysRoleTypeEnum.SYSTEM, DataScopeEnum.ALL); + SysRoleDO roleDO = createRoleDO("role_name", RoleTypeEnum.SYSTEM, DataScopeEnum.ALL); roleMapper.insert(roleDO); Long roleId = roleDO.getId(); assertServiceException(() -> sysRoleService.checkUpdateRole(roleId), ROLE_CAN_NOT_UPDATE_SYSTEM_TYPE_ROLE); } - private SysRoleDO createRoleDO(String name, SysRoleTypeEnum typeEnum, DataScopeEnum scopeEnum, Integer status) { + private SysRoleDO createRoleDO(String name, RoleTypeEnum typeEnum, DataScopeEnum scopeEnum, Integer status) { return createRoleDO( name, typeEnum, scopeEnum, status, randomString()); } - private SysRoleDO createRoleDO(String name, SysRoleTypeEnum typeEnum, DataScopeEnum scopeEnum, Integer status, String code) { + private SysRoleDO createRoleDO(String name, RoleTypeEnum typeEnum, DataScopeEnum scopeEnum, Integer status, String code) { return createRoleDO(null, name, typeEnum, scopeEnum, status, code); } - private SysRoleDO createRoleDO(String name, SysRoleTypeEnum typeEnum, DataScopeEnum scopeEnum) { + private SysRoleDO createRoleDO(String name, RoleTypeEnum typeEnum, DataScopeEnum scopeEnum) { return createRoleDO(null, name, typeEnum, scopeEnum, randomCommonStatus(), randomString()); } - private SysRoleDO createRoleDO(Long id, String name, SysRoleTypeEnum typeEnum, DataScopeEnum scopeEnum, Integer status, String code) { + private SysRoleDO createRoleDO(Long id, String name, RoleTypeEnum typeEnum, DataScopeEnum scopeEnum, Integer status, String code) { SysRoleDO roleDO = randomPojo(SysRoleDO.class, o -> { o.setId(id); o.setName(name); diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsChannelServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceTest.java similarity index 86% rename from yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsChannelServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceTest.java index d3509f9e42..28d6b2703d 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsChannelServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceTest.java @@ -1,11 +1,11 @@ package cn.iocoder.yudao.module.system.service.sms; import cn.hutool.core.bean.BeanUtil; -import cn.iocoder.yudao.module.system.controller.sms.vo.channel.SysSmsChannelCreateReqVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.channel.SysSmsChannelPageReqVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.channel.SysSmsChannelUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelUpdateReqVO; import cn.iocoder.yudao.module.system.dal.mysql.sms.SysSmsChannelMapper; -import cn.iocoder.yudao.module.system.mq.producer.sms.SysSmsProducer; +import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -22,8 +22,8 @@ import java.util.Date; import java.util.function.Consumer; import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.SMS_CHANNEL_HAS_CHILDREN; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.SMS_CHANNEL_NOT_EXISTS; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.SMS_CHANNEL_HAS_CHILDREN; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.SMS_CHANNEL_NOT_EXISTS; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.max; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*; @@ -32,11 +32,11 @@ import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; -@Import(SysSmsChannelServiceImpl.class) -public class SysSmsChannelServiceTest extends BaseDbUnitTest { +@Import(SmsChannelServiceImpl.class) +public class SmsChannelServiceTest extends BaseDbUnitTest { @Resource - private SysSmsChannelServiceImpl smsChannelService; + private SmsChannelServiceImpl smsChannelService; @Resource private SysSmsChannelMapper smsChannelMapper; @@ -44,9 +44,9 @@ public class SysSmsChannelServiceTest extends BaseDbUnitTest { @MockBean private SmsClientFactory smsClientFactory; @MockBean - private SysSmsTemplateService smsTemplateService; + private SmsTemplateService smsTemplateService; @MockBean - private SysSmsProducer smsProducer; + private SmsProducer smsProducer; @Test public void testInitLocalCache_success() { @@ -71,7 +71,7 @@ public class SysSmsChannelServiceTest extends BaseDbUnitTest { @Test public void testCreateSmsChannel_success() { // 准备傿•° - SysSmsChannelCreateReqVO reqVO = randomPojo(SysSmsChannelCreateReqVO.class, o -> o.setStatus(randomCommonStatus())); + SmsChannelCreateReqVO reqVO = randomPojo(SmsChannelCreateReqVO.class, o -> o.setStatus(randomCommonStatus())); // 调用 Long smsChannelId = smsChannelService.createSmsChannel(reqVO); @@ -90,7 +90,7 @@ public class SysSmsChannelServiceTest extends BaseDbUnitTest { SysSmsChannelDO dbSmsChannel = randomSmsChannelDO(); smsChannelMapper.insert(dbSmsChannel);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° - SysSmsChannelUpdateReqVO reqVO = randomPojo(SysSmsChannelUpdateReqVO.class, o -> { + SmsChannelUpdateReqVO reqVO = randomPojo(SmsChannelUpdateReqVO.class, o -> { o.setId(dbSmsChannel.getId()); // 设置更新的 ID o.setStatus(randomCommonStatus()); o.setCallbackUrl(randomString()); @@ -108,7 +108,7 @@ public class SysSmsChannelServiceTest extends BaseDbUnitTest { @Test public void testUpdateSmsChannel_notExists() { // 准备傿•° - SysSmsChannelUpdateReqVO reqVO = randomPojo(SysSmsChannelUpdateReqVO.class); + SmsChannelUpdateReqVO reqVO = randomPojo(SmsChannelUpdateReqVO.class); // 调用, 并断言异常 assertServiceException(() -> smsChannelService.updateSmsChannel(reqVO), SMS_CHANNEL_NOT_EXISTS); @@ -169,7 +169,7 @@ public class SysSmsChannelServiceTest extends BaseDbUnitTest { // 测试 createTime ä¸åŒ¹é… smsChannelMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsChannel, o -> o.setCreateTime(buildTime(2020, 11, 11)))); // 准备傿•° - SysSmsChannelPageReqVO reqVO = new SysSmsChannelPageReqVO(); + SmsChannelPageReqVO reqVO = new SmsChannelPageReqVO(); reqVO.setSignature("芋é“"); reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); reqVO.setBeginCreateTime(buildTime(2020, 12, 1)); diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsLogServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceTest.java similarity index 94% rename from yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsLogServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceTest.java index ae8e734e99..e743897310 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsLogServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceTest.java @@ -1,8 +1,8 @@ package cn.iocoder.yudao.module.system.service.sms; import cn.hutool.core.map.MapUtil; -import cn.iocoder.yudao.module.system.controller.sms.vo.log.SysSmsLogExportReqVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.log.SysSmsLogPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogPageReqVO; import cn.iocoder.yudao.module.system.dal.mysql.sms.SysSmsLogMapper; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO; import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsReceiveStatusEnum; @@ -28,11 +28,11 @@ import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomString; import static org.junit.jupiter.api.Assertions.assertEquals; -@Import(SysSmsLogServiceImpl.class) -public class SysSmsLogServiceTest extends BaseDbUnitTest { +@Import(SmsLogServiceImpl.class) +public class SmsLogServiceTest extends BaseDbUnitTest { @Resource - private SysSmsLogServiceImpl smsLogService; + private SmsLogServiceImpl smsLogService; @Resource private SysSmsLogMapper smsLogMapper; @@ -65,7 +65,7 @@ public class SysSmsLogServiceTest extends BaseDbUnitTest { // 测试 receiveTime ä¸åŒ¹é… smsLogMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsLog, o -> o.setReceiveTime(buildTime(2021, 12, 12)))); // 准备傿•° - SysSmsLogPageReqVO reqVO = new SysSmsLogPageReqVO(); + SmsLogPageReqVO reqVO = new SmsLogPageReqVO(); reqVO.setChannelId(1L); reqVO.setTemplateId(10L); reqVO.setMobile("156"); @@ -112,7 +112,7 @@ public class SysSmsLogServiceTest extends BaseDbUnitTest { // 测试 receiveTime ä¸åŒ¹é… smsLogMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsLog, o -> o.setReceiveTime(buildTime(2021, 12, 12)))); // 准备傿•° - SysSmsLogExportReqVO reqVO = new SysSmsLogExportReqVO(); + SmsLogExportReqVO reqVO = new SmsLogExportReqVO(); reqVO.setChannelId(1L); reqVO.setTemplateId(10L); reqVO.setMobile("156"); diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsTemplateServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceTest.java similarity index 92% rename from yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsTemplateServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceTest.java index 1ee2c90fbe..540c9a3726 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsTemplateServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceTest.java @@ -1,11 +1,11 @@ package cn.iocoder.yudao.module.system.service.sms; -import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplateCreateReqVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplateExportReqVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplatePageReqVO; -import cn.iocoder.yudao.module.system.controller.sms.vo.template.SysSmsTemplateUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplatePageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateUpdateReqVO; import cn.iocoder.yudao.module.system.dal.mysql.sms.SysSmsTemplateMapper; -import cn.iocoder.yudao.module.system.mq.producer.sms.SysSmsProducer; +import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsTemplateTypeEnum; @@ -29,7 +29,7 @@ import java.util.List; import java.util.function.Consumer; import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; @@ -38,23 +38,23 @@ import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; -@Import(SysSmsTemplateServiceImpl.class) -public class SysSmsTemplateServiceTest extends BaseDbUnitTest { +@Import(SmsTemplateServiceImpl.class) +public class SmsTemplateServiceTest extends BaseDbUnitTest { @Resource - private SysSmsTemplateServiceImpl smsTemplateService; + private SmsTemplateServiceImpl smsTemplateService; @Resource private SysSmsTemplateMapper smsTemplateMapper; @MockBean - private SysSmsChannelService smsChannelService; + private SmsChannelService smsChannelService; @MockBean private SmsClientFactory smsClientFactory; @MockBean private SmsClient smsClient; @MockBean - private SysSmsProducer smsProducer; + private SmsProducer smsProducer; @Test public void testParseTemplateContentParams() { @@ -72,7 +72,7 @@ public class SysSmsTemplateServiceTest extends BaseDbUnitTest { @SuppressWarnings("unchecked") public void testCreateSmsTemplate_success() { // 准备傿•° - SysSmsTemplateCreateReqVO reqVO = randomPojo(SysSmsTemplateCreateReqVO.class, o -> { + SmsTemplateCreateReqVO reqVO = randomPojo(SmsTemplateCreateReqVO.class, o -> { o.setContent("正在进行登录æ“作{operation},您的验è¯ç æ˜¯{code}"); o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 o.setType(randomEle(SysSmsTemplateTypeEnum.values()).getType()); // ä¿è¯ type çš„ 范围 @@ -108,7 +108,7 @@ public class SysSmsTemplateServiceTest extends BaseDbUnitTest { SysSmsTemplateDO dbSmsTemplate = randomSmsTemplateDO(); smsTemplateMapper.insert(dbSmsTemplate);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° - SysSmsTemplateUpdateReqVO reqVO = randomPojo(SysSmsTemplateUpdateReqVO.class, o -> { + SmsTemplateUpdateReqVO reqVO = randomPojo(SmsTemplateUpdateReqVO.class, o -> { o.setId(dbSmsTemplate.getId()); // 设置更新的 ID o.setContent("正在进行登录æ“作{operation},您的验è¯ç æ˜¯{code}"); o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 @@ -139,7 +139,7 @@ public class SysSmsTemplateServiceTest extends BaseDbUnitTest { @Test public void testUpdateSmsTemplate_notExists() { // 准备傿•° - SysSmsTemplateUpdateReqVO reqVO = randomPojo(SysSmsTemplateUpdateReqVO.class); + SmsTemplateUpdateReqVO reqVO = randomPojo(SmsTemplateUpdateReqVO.class); // 调用, 并断言异常 assertServiceException(() -> smsTemplateService.updateSmsTemplate(reqVO), SMS_TEMPLATE_NOT_EXISTS); @@ -198,7 +198,7 @@ public class SysSmsTemplateServiceTest extends BaseDbUnitTest { // 测试 createTime ä¸åŒ¹é… smsTemplateMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsTemplate, o -> o.setCreateTime(buildTime(2021, 12, 12)))); // 准备傿•° - SysSmsTemplatePageReqVO reqVO = new SysSmsTemplatePageReqVO(); + SmsTemplatePageReqVO reqVO = new SmsTemplatePageReqVO(); reqVO.setType(SysSmsTemplateTypeEnum.PROMOTION.getType()); reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); reqVO.setCode("yudao"); @@ -244,7 +244,7 @@ public class SysSmsTemplateServiceTest extends BaseDbUnitTest { // 测试 createTime ä¸åŒ¹é… smsTemplateMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsTemplate, o -> o.setCreateTime(buildTime(2021, 12, 12)))); // 准备傿•° - SysSmsTemplateExportReqVO reqVO = new SysSmsTemplateExportReqVO(); + SmsTemplateExportReqVO reqVO = new SmsTemplateExportReqVO(); reqVO.setType(SysSmsTemplateTypeEnum.PROMOTION.getType()); reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); reqVO.setCode("yudao"); diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/tenant/SysTenantServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceTest.java similarity index 85% rename from yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/tenant/SysTenantServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceTest.java index a6199f7060..93b31c0746 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/tenant/SysTenantServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceTest.java @@ -1,9 +1,9 @@ package cn.iocoder.yudao.module.system.service.tenant; -import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantCreateReqVO; -import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantExportReqVO; -import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantPageReqVO; -import cn.iocoder.yudao.module.system.controller.tenant.vo.SysTenantUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantCreateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantUpdateReqVO; import cn.iocoder.yudao.module.system.dal.mysql.tenant.SysTenantMapper; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.tenant.SysTenantDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; @@ -15,7 +15,7 @@ import org.springframework.context.annotation.Import; import javax.annotation.Resource; import java.util.List; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.TENANT_NOT_EXISTS; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.TENANT_NOT_EXISTS; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; @@ -23,16 +23,11 @@ import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServic import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; import static org.junit.jupiter.api.Assertions.*; -/** - * {@link SysTenantServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import(SysTenantServiceImpl.class) -public class SysTenantServiceTest extends BaseDbUnitTest { +@Import(TenantServiceImpl.class) +public class TenantServiceTest extends BaseDbUnitTest { @Resource - private SysTenantServiceImpl tenantService; + private TenantServiceImpl tenantService; @Resource private SysTenantMapper tenantMapper; @@ -40,7 +35,7 @@ public class SysTenantServiceTest extends BaseDbUnitTest { @Test public void testCreateTenant_success() { // 准备傿•° - SysTenantCreateReqVO reqVO = randomPojo(SysTenantCreateReqVO.class, o -> o.setStatus(randomCommonStatus())); + TenantCreateReqVO reqVO = randomPojo(TenantCreateReqVO.class, o -> o.setStatus(randomCommonStatus())); // 调用 Long tenantId = tenantService.createTenant(reqVO); @@ -57,7 +52,7 @@ public class SysTenantServiceTest extends BaseDbUnitTest { SysTenantDO dbTenant = randomPojo(SysTenantDO.class, o -> o.setStatus(randomCommonStatus())); tenantMapper.insert(dbTenant);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° - SysTenantUpdateReqVO reqVO = randomPojo(SysTenantUpdateReqVO.class, o -> { + TenantUpdateReqVO reqVO = randomPojo(TenantUpdateReqVO.class, o -> { o.setId(dbTenant.getId()); // 设置更新的 ID o.setStatus(randomCommonStatus()); }); @@ -72,7 +67,7 @@ public class SysTenantServiceTest extends BaseDbUnitTest { @Test public void testUpdateTenant_notExists() { // 准备傿•° - SysTenantUpdateReqVO reqVO = randomPojo(SysTenantUpdateReqVO.class); + TenantUpdateReqVO reqVO = randomPojo(TenantUpdateReqVO.class); // 调用, 并断言异常 assertServiceException(() -> tenantService.updateTenant(reqVO), TENANT_NOT_EXISTS); @@ -124,7 +119,7 @@ public class SysTenantServiceTest extends BaseDbUnitTest { // 测试 createTime ä¸åŒ¹é… tenantMapper.insert(cloneIgnoreId(dbTenant, o -> o.setCreateTime(buildTime(2021, 12, 12)))); // 准备傿•° - SysTenantPageReqVO reqVO = new SysTenantPageReqVO(); + TenantPageReqVO reqVO = new TenantPageReqVO(); reqVO.setName("芋é“"); reqVO.setContactName("艿"); reqVO.setContactMobile("1560"); @@ -162,7 +157,7 @@ public class SysTenantServiceTest extends BaseDbUnitTest { // 测试 createTime ä¸åŒ¹é… tenantMapper.insert(cloneIgnoreId(dbTenant, o -> o.setCreateTime(buildTime(2021, 12, 12)))); // 准备傿•° - SysTenantExportReqVO reqVO = new SysTenantExportReqVO(); + TenantExportReqVO reqVO = new TenantExportReqVO(); reqVO.setName("芋é“"); reqVO.setContactName("艿"); reqVO.setContactMobile("1560"); diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/user/SysUserServiceImplTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/user/UserServiceImplTest.java similarity index 91% rename from yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/user/SysUserServiceImplTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/user/UserServiceImplTest.java index fc53a658be..8256f1de5c 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/user/SysUserServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/user/UserServiceImplTest.java @@ -2,15 +2,15 @@ package cn.iocoder.yudao.module.system.service.user; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.RandomUtil; -import cn.iocoder.yudao.module.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO; -import cn.iocoder.yudao.module.system.controller.user.vo.profile.SysUserProfileUpdateReqVO; -import cn.iocoder.yudao.module.system.controller.user.vo.user.*; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; import cn.iocoder.yudao.module.system.dal.mysql.user.SysUserMapper; -import cn.iocoder.yudao.module.system.service.dept.SysDeptService; -import cn.iocoder.yudao.module.system.service.dept.SysPostService; -import cn.iocoder.yudao.module.system.service.permission.SysPermissionService; +import cn.iocoder.yudao.module.system.service.dept.DeptService; +import cn.iocoder.yudao.module.system.service.dept.PostService; +import cn.iocoder.yudao.module.system.service.permission.PermissionService; import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.coreservice.modules.system.enums.common.SysSexEnum; @@ -34,7 +34,7 @@ import java.util.function.Consumer; import static cn.hutool.core.util.RandomUtil.randomBytes; import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; @@ -45,29 +45,24 @@ import static org.junit.jupiter.api.Assertions.assertNull; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; -/** - * {@link SysUserService} çš„å•元测试类 - * - * @author zxl - */ -@Import(SysUserServiceImpl.class) -public class SysUserServiceImplTest extends BaseDbUnitTest { +@Import(UserServiceImpl.class) +public class UserServiceImplTest extends BaseDbUnitTest { @Resource - private SysUserServiceImpl userService; + private UserServiceImpl userService; @Resource private SysUserMapper userMapper; @MockBean - private SysDeptService deptService; + private DeptService deptService; @MockBean private SysDeptCoreService deptCoreService; @MockBean - private SysPostService postService; + private PostService postService; @MockBean - private SysPermissionService permissionService; + private PermissionService permissionService; @MockBean private PasswordEncoder passwordEncoder; @MockBean @@ -76,7 +71,7 @@ public class SysUserServiceImplTest extends BaseDbUnitTest { @Test public void testCreatUser_success() { // 准备傿•° - SysUserCreateReqVO reqVO = randomPojo(SysUserCreateReqVO.class, o -> { + UserCreateReqVO reqVO = randomPojo(UserCreateReqVO.class, o -> { o.setSex(RandomUtil.randomEle(SysSexEnum.values()).getSex()); o.setMobile(randomString()); }); @@ -111,7 +106,7 @@ public class SysUserServiceImplTest extends BaseDbUnitTest { SysUserDO dbUser = randomSysUserDO(); userMapper.insert(dbUser); // 准备傿•° - SysUserUpdateReqVO reqVO = randomPojo(SysUserUpdateReqVO.class, o -> { + UserUpdateReqVO reqVO = randomPojo(UserUpdateReqVO.class, o -> { o.setId(dbUser.getId()); o.setSex(RandomUtil.randomEle(SysSexEnum.values()).getSex()); o.setMobile(randomString()); @@ -144,7 +139,7 @@ public class SysUserServiceImplTest extends BaseDbUnitTest { userMapper.insert(dbUser); // 准备傿•° Long userId = dbUser.getId(); - SysUserProfileUpdateReqVO reqVO = randomPojo(SysUserProfileUpdateReqVO.class, o -> { + UserProfileUpdateReqVO reqVO = randomPojo(UserProfileUpdateReqVO.class, o -> { o.setMobile(randomString()); o.setSex(RandomUtil.randomEle(SysSexEnum.values()).getSex()); }); @@ -163,7 +158,7 @@ public class SysUserServiceImplTest extends BaseDbUnitTest { userMapper.insert(dbUser); // 准备傿•° Long userId = dbUser.getId(); - SysUserProfileUpdatePasswordReqVO reqVO = randomPojo(SysUserProfileUpdatePasswordReqVO.class, o -> { + UserProfileUpdatePasswordReqVO reqVO = randomPojo(UserProfileUpdatePasswordReqVO.class, o -> { o.setOldPassword("yudao"); o.setNewPassword("yuanma"); }); @@ -255,7 +250,7 @@ public class SysUserServiceImplTest extends BaseDbUnitTest { // mock æ•°æ® SysUserDO dbUser = initGetUserPageData(); // 准备傿•° - SysUserPageReqVO reqVO = new SysUserPageReqVO(); + UserPageReqVO reqVO = new UserPageReqVO(); reqVO.setUsername("yudao"); reqVO.setMobile("1560"); reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); @@ -279,7 +274,7 @@ public class SysUserServiceImplTest extends BaseDbUnitTest { // mock æ•°æ® SysUserDO dbUser = initGetUserPageData(); // 准备傿•° - SysUserExportReqVO reqVO = new SysUserExportReqVO(); + UserExportReqVO reqVO = new UserExportReqVO(); reqVO.setUsername("yudao"); reqVO.setMobile("1560"); reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); @@ -329,11 +324,11 @@ public class SysUserServiceImplTest extends BaseDbUnitTest { @Test public void testImportUsers_01() { // 准备傿•° - SysUserImportExcelVO importUser = randomPojo(SysUserImportExcelVO.class); + UserImportExcelVO importUser = randomPojo(UserImportExcelVO.class); // mock 方法 // 调用 - SysUserImportRespVO respVO = userService.importUsers(newArrayList(importUser), true); + UserImportRespVO respVO = userService.importUsers(newArrayList(importUser), true); // 断言 assertEquals(0, respVO.getCreateUsernames().size()); assertEquals(0, respVO.getUpdateUsernames().size()); @@ -347,7 +342,7 @@ public class SysUserServiceImplTest extends BaseDbUnitTest { @Test public void testImportUsers_02() { // 准备傿•° - SysUserImportExcelVO importUser = randomPojo(SysUserImportExcelVO.class, o -> { + UserImportExcelVO importUser = randomPojo(UserImportExcelVO.class, o -> { o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 o.setSex(randomEle(SysSexEnum.values()).getSex()); // ä¿è¯ sex 的范围 }); @@ -361,7 +356,7 @@ public class SysUserServiceImplTest extends BaseDbUnitTest { when(passwordEncoder.encode(eq("yudaoyuanma"))).thenReturn("java"); // 调用 - SysUserImportRespVO respVO = userService.importUsers(newArrayList(importUser), true); + UserImportRespVO respVO = userService.importUsers(newArrayList(importUser), true); // 断言 assertEquals(1, respVO.getCreateUsernames().size()); SysUserDO user = userMapper.selectByUsername(respVO.getCreateUsernames().get(0)); @@ -380,7 +375,7 @@ public class SysUserServiceImplTest extends BaseDbUnitTest { SysUserDO dbUser = randomSysUserDO(); userMapper.insert(dbUser); // 准备傿•° - SysUserImportExcelVO importUser = randomPojo(SysUserImportExcelVO.class, o -> { + UserImportExcelVO importUser = randomPojo(UserImportExcelVO.class, o -> { o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 o.setSex(randomEle(SysSexEnum.values()).getSex()); // ä¿è¯ sex 的范围 o.setUsername(dbUser.getUsername()); @@ -393,7 +388,7 @@ public class SysUserServiceImplTest extends BaseDbUnitTest { when(deptCoreService.getDept(eq(dept.getId()))).thenReturn(dept); // 调用 - SysUserImportRespVO respVO = userService.importUsers(newArrayList(importUser), false); + UserImportRespVO respVO = userService.importUsers(newArrayList(importUser), false); // 断言 assertEquals(0, respVO.getCreateUsernames().size()); assertEquals(0, respVO.getUpdateUsernames().size()); @@ -410,7 +405,7 @@ public class SysUserServiceImplTest extends BaseDbUnitTest { SysUserDO dbUser = randomSysUserDO(); userMapper.insert(dbUser); // 准备傿•° - SysUserImportExcelVO importUser = randomPojo(SysUserImportExcelVO.class, o -> { + UserImportExcelVO importUser = randomPojo(UserImportExcelVO.class, o -> { o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 o.setSex(randomEle(SysSexEnum.values()).getSex()); // ä¿è¯ sex 的范围 o.setUsername(dbUser.getUsername()); @@ -423,7 +418,7 @@ public class SysUserServiceImplTest extends BaseDbUnitTest { when(deptCoreService.getDept(eq(dept.getId()))).thenReturn(dept); // 调用 - SysUserImportRespVO respVO = userService.importUsers(newArrayList(importUser), true); + UserImportRespVO respVO = userService.importUsers(newArrayList(importUser), true); // 断言 assertEquals(0, respVO.getCreateUsernames().size()); assertEquals(1, respVO.getUpdateUsernames().size()); diff --git a/更新日志.md b/更新日志.md index b1f34099e4..13fc8320bf 100644 --- a/更新日志.md +++ b/更新日志.md @@ -19,6 +19,9 @@ ### â­ New Features *ã€ä¼˜åŒ–】æ“作日志新增用户类型,实现 APP 端的 API çš„æ“作日志的记录 +*ã€é‡æž„ã€‘å¤§æ¨¡å—æŒ‰ç…§å¤š Maven Module çš„æ–¹å¼æ‹†åˆ†ï¼Œæå‡å¯ç»´æŠ¤æ€§ï¼Œä¸ºåŽç»­é‡æž„ onemall æä¾›åŸºç¡€ +*ã€é‡æž„】Spring Security 支æŒè¯»å–多ç§ç”¨æˆ·ç±»åž‹ï¼Œä»Žä¸åŒçš„æ•°æ®åº“表,从而实现å•项目æä¾›ç®¡ç†åŽå°ã€ç”¨æˆ· APP çš„ä¸åŒ RESTful API æŽ¥å£ + ### 🞠Bug Fixes From c5e2df943cbd2fe30ecebdd83f82515da96fa26c Mon Sep 17 00:00:00 2001 From: jason <2667446@qq.com> Date: Sat, 29 Jan 2022 22:40:50 +0800 Subject: [PATCH 11/47] =?UTF-8?q?Bpm=20=E5=8A=A8=E6=80=81=E8=A1=A8?= =?UTF-8?q?=E5=8D=95=E3=80=82=E7=A7=BB=E5=88=B0bpm-core-service=20?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../convert/definition/BpmModelConvert.java | 12 ++--- .../BpmProcessDefinitionConvert.java | 8 ++-- .../bpm/enums/BpmErrorCodeConstants.java | 2 - .../definition/impl/BpmModelServiceImpl.java | 19 ++++---- .../impl/BpmProcessDefinitionServiceImpl.java | 11 +++-- .../yudao-module-bpm-core-service-api/pom.xml | 4 ++ .../bpm/api/form/BpmFormServiceApi.java | 46 +++++++++++++++++++ .../modules/bpm/api/form/dto/BpmFormDTO.java | 39 ++++++++++++++++ .../bpm/api/group/BpmUserGroupServiceApi.java | 1 + .../bpm/api/BpmFormServiceApiImpl.java | 33 +++++++++++++ .../bpm/api/BpmUserGroupServiceApiImpl.java | 1 + .../definition/BpmFormController.java | 0 .../definition/vo/form/BpmFormBaseVO.java | 0 .../vo/form/BpmFormCreateReqVO.java | 0 .../definition/vo/form/BpmFormPageReqVO.java | 0 .../definition/vo/form/BpmFormRespVO.java | 0 .../vo/form/BpmFormSimpleRespVO.java | 0 .../vo/form/BpmFormUpdateReqVO.java | 0 .../convert/definition/BpmFormConvert.java | 5 ++ .../dal/dataobject/definition/BpmFormDO.java | 0 .../dal/mysql/definition/BpmFormMapper.java | 0 .../bpm/enums/BpmErrorCodeConstants.java | 3 ++ .../service/definition/BpmFormService.java | 0 .../definition/dto/BpmFormFieldRespDTO.java | 0 .../definition/impl/BpmFormServiceImpl.java | 10 ++-- .../definition/BpmFormServiceTest.java | 0 .../src/test/resources/sql/clean.sql | 1 + .../src/test/resources/sql/create_tables.sql | 15 ++++++ 28 files changed, 177 insertions(+), 33 deletions(-) create mode 100644 yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/form/BpmFormServiceApi.java create mode 100644 yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/form/dto/BpmFormDTO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmFormServiceApiImpl.java rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmFormController.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormBaseVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormCreateReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormPageReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormRespVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormSimpleRespVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormUpdateReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmFormConvert.java (86%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmFormDO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmFormMapper.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormService.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmFormFieldRespDTO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmFormServiceImpl.java (88%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl}/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormServiceTest.java (100%) diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmModelConvert.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmModelConvert.java index eb3362ac62..c2b2877207 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmModelConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmModelConvert.java @@ -2,9 +2,9 @@ package cn.iocoder.yudao.adminserver.modules.bpm.convert.definition; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.model.*; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmFormDO; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmModelMetaInfoRespDTO; +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; +import cn.iocoder.yudao.coreservice.modules.bpm.api.form.dto.BpmFormDTO; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.json.JsonUtils; import org.activiti.engine.impl.persistence.entity.SuspensionState; @@ -30,19 +30,19 @@ public interface BpmModelConvert { BpmModelConvert INSTANCE = Mappers.getMapper(BpmModelConvert.class); - default List convertList(List list, Map formMap, + default List convertList(List list, Map formMap, Map deploymentMap, Map processDefinitionMap) { return CollectionUtils.convertList(list, model -> { BpmModelMetaInfoRespDTO metaInfo = JsonUtils.parseObject(model.getMetaInfo(), BpmModelMetaInfoRespDTO.class); - BpmFormDO form = metaInfo != null ? formMap.get(metaInfo.getFormId()) : null; + BpmFormDTO form = metaInfo != null ? formMap.get(metaInfo.getFormId()) : null; Deployment deployment = model.getDeploymentId() != null ? deploymentMap.get(model.getDeploymentId()) : null; ProcessDefinition processDefinition = model.getDeploymentId() != null ? processDefinitionMap.get(model.getDeploymentId()) : null; return convert(model, form, deployment, processDefinition); }); } - default BpmModelPageItemRespVO convert(Model model, BpmFormDO form, Deployment deployment, ProcessDefinition processDefinition) { + default BpmModelPageItemRespVO convert(Model model, BpmFormDTO form, Deployment deployment, ProcessDefinition processDefinition) { BpmModelPageItemRespVO modelRespVO = new BpmModelPageItemRespVO(); modelRespVO.setId(model.getId()); modelRespVO.setCreateTime(model.getCreateTime()); @@ -83,7 +83,7 @@ public interface BpmModelConvert { void copyTo(BpmModelMetaInfoRespDTO from, @MappingTarget BpmModelBaseVO to); - default BpmProcessDefinitionCreateReqDTO convert2(Model model, BpmFormDO form) { + default BpmProcessDefinitionCreateReqDTO convert2(Model model, BpmFormDTO form) { BpmProcessDefinitionCreateReqDTO createReqDTO = new BpmProcessDefinitionCreateReqDTO(); createReqDTO.setModelId(model.getId()); createReqDTO.setName(model.getName()); diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmProcessDefinitionConvert.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmProcessDefinitionConvert.java index fb11704e67..ed85492f29 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmProcessDefinitionConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmProcessDefinitionConvert.java @@ -3,8 +3,8 @@ package cn.iocoder.yudao.adminserver.modules.bpm.convert.definition; import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.process.BpmProcessDefinitionPageItemRespVO; import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.process.BpmProcessDefinitionRespVO; import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmFormDO; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; +import cn.iocoder.yudao.coreservice.modules.bpm.api.form.dto.BpmFormDTO; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import org.activiti.engine.impl.persistence.entity.SuspensionState; import org.activiti.engine.repository.Deployment; @@ -29,17 +29,17 @@ public interface BpmProcessDefinitionConvert { BpmProcessDefinitionConvert INSTANCE = Mappers.getMapper(BpmProcessDefinitionConvert.class); default List convertList(List list, Map deploymentMap, - Map processDefinitionDOMap, Map formMap) { + Map processDefinitionDOMap, Map formMap) { return CollectionUtils.convertList(list, definition -> { Deployment deployment = definition.getDeploymentId() != null ? deploymentMap.get(definition.getDeploymentId()) : null; BpmProcessDefinitionExtDO definitionDO = processDefinitionDOMap.get(definition.getId()); - BpmFormDO form = definitionDO != null ? formMap.get(definitionDO.getFormId()) : null; + BpmFormDTO form = definitionDO != null ? formMap.get(definitionDO.getFormId()) : null; return convert(definition, deployment, definitionDO, form); }); } default BpmProcessDefinitionPageItemRespVO convert(ProcessDefinition bean, Deployment deployment, - BpmProcessDefinitionExtDO processDefinitionExtDO, BpmFormDO form) { + BpmProcessDefinitionExtDO processDefinitionExtDO, BpmFormDTO form) { BpmProcessDefinitionPageItemRespVO respVO = convert(bean); respVO.setSuspensionState(bean.isSuspended() ? SuspensionState.SUSPENDED.getStateCode() : SuspensionState.ACTIVE.getStateCode()); if (deployment != null) { diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java index 771a04f5e7..66fc20b8f9 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java @@ -55,6 +55,4 @@ public interface BpmErrorCodeConstants { // ========== 动æ€è¡¨å•æ¨¡å— 1-009-010-000 ========== ErrorCode FORM_NOT_EXISTS = new ErrorCode(1009010000, "动æ€è¡¨å•ä¸å­˜åœ¨"); - ErrorCode FORM_FIELD_REPEAT = new ErrorCode(1009010000, "表å•项({}) å’Œ ({}) 使用了相åŒçš„字段å({})"); - } diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmModelServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmModelServiceImpl.java index 60a3138639..1f5882a4bb 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmModelServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmModelServiceImpl.java @@ -6,14 +6,14 @@ import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.model.*; import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleRespVO; import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmModelConvert; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmFormDO; import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmModelFormTypeEnum; +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmModelService; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmFormService; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmModelService; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmModelMetaInfoRespDTO; +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; +import cn.iocoder.yudao.coreservice.modules.bpm.api.form.BpmFormServiceApi; +import cn.iocoder.yudao.coreservice.modules.bpm.api.form.dto.BpmFormDTO; import cn.iocoder.yudao.framework.activiti.core.util.ActivitiUtils; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; @@ -39,7 +39,6 @@ import java.util.*; import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception0; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; /** @@ -57,7 +56,7 @@ public class BpmModelServiceImpl implements BpmModelService { @Resource private RepositoryService repositoryService; @Resource - private BpmFormService formService; + private BpmFormServiceApi formServiceApi; @Resource private BpmProcessDefinitionService processDefinitionService; @Resource @@ -85,7 +84,7 @@ public class BpmModelServiceImpl implements BpmModelService { BpmModelMetaInfoRespDTO metaInfo = JsonUtils.parseObject(model.getMetaInfo(), BpmModelMetaInfoRespDTO.class); return metaInfo != null ? metaInfo.getFormId() : null; }); - Map formMap = formService.getFormMap(formIds); + Map formMap = formServiceApi.getFormMap(formIds); // 获得 Deployment Map Set deploymentIds = new HashSet<>(); @@ -172,7 +171,7 @@ public class BpmModelServiceImpl implements BpmModelService { } // TODO 芋艿:校验æµç¨‹å›¾çš„æœ‰æ•ˆæ€§ï¼›ä¾‹å¦‚è¯´ï¼Œæ˜¯å¦æœ‰å¼€å§‹çš„å…ƒç´ ï¼Œæ˜¯å¦æœ‰ç»“æŸçš„元素; // 校验表å•å·²é… - BpmFormDO form = checkFormConfig(model); + BpmFormDTO form = checkFormConfig(model); // 校验任务分é…规则已é…ç½® checkTaskAssignRuleAllConfig(id); @@ -225,14 +224,14 @@ public class BpmModelServiceImpl implements BpmModelService { * @param model æµç¨‹æ¨¡åž‹ * @return æµç¨‹è¡¨å• */ - private BpmFormDO checkFormConfig(Model model) { + private BpmFormDTO checkFormConfig(Model model) { BpmModelMetaInfoRespDTO metaInfo = JsonUtils.parseObject(model.getMetaInfo(), BpmModelMetaInfoRespDTO.class); if (metaInfo == null || metaInfo.getFormType() == null) { throw exception(MODEL_DEPLOY_FAIL_FORM_NOT_CONFIG); } // 校验表å•存在 if (Objects.equals(metaInfo.getFormType(), BpmModelFormTypeEnum.NORMAL.getType())) { - BpmFormDO form = formService.getForm(metaInfo.getFormId()); + BpmFormDTO form = formServiceApi.getForm(metaInfo.getFormId()); if (form == null) { throw exception(FORM_NOT_EXISTS); } diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmProcessDefinitionServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmProcessDefinitionServiceImpl.java index 289cd4d639..9d906d5eb6 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmProcessDefinitionServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmProcessDefinitionServiceImpl.java @@ -8,12 +8,12 @@ import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.process import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.process.BpmProcessDefinitionPageReqVO; import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.process.BpmProcessDefinitionRespVO; import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmProcessDefinitionConvert; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmFormDO; import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmProcessDefinitionExtMapper; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmFormService; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; +import cn.iocoder.yudao.coreservice.modules.bpm.api.form.BpmFormServiceApi; +import cn.iocoder.yudao.coreservice.modules.bpm.api.form.dto.BpmFormDTO; import cn.iocoder.yudao.framework.activiti.core.util.ActivitiUtils; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.PageUtils; @@ -31,7 +31,8 @@ import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.util.*; -import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.*; +import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.PROCESS_DEFINITION_KEY_NOT_MATCH; +import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.PROCESS_DEFINITION_NAME_NOT_MATCH; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; import static java.util.Collections.emptyList; @@ -54,7 +55,7 @@ public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionServ @Resource private RepositoryService repositoryService; @Resource - private BpmFormService bpmFormService; + private BpmFormServiceApi bpmFormServiceApi; @Resource private BpmProcessDefinitionExtMapper processDefinitionMapper; @@ -85,7 +86,7 @@ public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionServ // 获得 Form Map Set formIds = convertSet(processDefinitionDOs, BpmProcessDefinitionExtDO::getFormId); - Map formMap = bpmFormService.getFormMap(formIds); + Map formMap = bpmFormServiceApi.getFormMap(formIds); // 拼接结果 long definitionCount = definitionQuery.count(); diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/pom.xml b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/pom.xml index fb5a4f08e8..c488c22966 100644 --- a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/pom.xml +++ b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/pom.xml @@ -16,5 +16,9 @@ org.projectlombok lombok + + cn.iocoder.boot + yudao-common + \ No newline at end of file diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/form/BpmFormServiceApi.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/form/BpmFormServiceApi.java new file mode 100644 index 0000000000..f8f66a7d92 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/form/BpmFormServiceApi.java @@ -0,0 +1,46 @@ +package cn.iocoder.yudao.coreservice.modules.bpm.api.form; + +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.coreservice.modules.bpm.api.form.dto.BpmFormDTO; +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +/** + * Bpm 动æ€è¡¨å• Service API æŽ¥å£ + * + * @author @风里雾里 + */ +public interface BpmFormServiceApi { + /** + * 获得动æ€è¡¨å• + * + * @param id ç¼–å· + * @return 动æ€è¡¨å• + */ + BpmFormDTO getForm(Long id); + + /** + * 获得动æ€è¡¨å•列表 + * + * @param ids ç¼–å· + * @return 动æ€è¡¨å•列表 + */ + List getFormList(Collection ids); + + /** + * 获得动æ€è¡¨å• Map + * + * @param ids ç¼–å· + * @return 动æ€è¡¨å• Map + */ + default Map getFormMap(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return Collections.emptyMap(); + } + return CollectionUtils.convertMap(this.getFormList(ids), BpmFormDTO::getId); + } +} diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/form/dto/BpmFormDTO.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/form/dto/BpmFormDTO.java new file mode 100644 index 0000000000..0a5c0f94a5 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/form/dto/BpmFormDTO.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.coreservice.modules.bpm.api.form.dto; + +import lombok.Data; + +import java.util.List; + +/** + * 工作æµçš„表å•定义 DTO + * 用于工作æµçš„申请表å•,需è¦åЍæ€é…置的场景 + * TODO æš‚æ—¶æ‹·è´ BpmFormDO 字段, ä¸çŸ¥é“那些字段是必须的, åŽç»­åˆ æŽ‰ä¸éœ€è¦çš„字段 + * @author jason + */ +@Data +public class BpmFormDTO { + + /** + * ç¼–å· + */ + private Long id; + /** + * 表å•å + */ + private String name; + /** + * 表å•çš„é…ç½® + */ + private String conf; + /** + * 表å•项的数组 + * + * ç›®å‰ç›´æŽ¥å°† https://github.com/JakHuang/form-generator 生æˆçš„ JSON 串,直接ä¿å­˜ + * 定义:https://github.com/JakHuang/form-generator/issues/46 + */ + private List fields; + /** + * 备注 + */ + private String remark; +} diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/BpmUserGroupServiceApi.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/BpmUserGroupServiceApi.java index c83486970d..796dbd4dfd 100644 --- a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/BpmUserGroupServiceApi.java +++ b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/BpmUserGroupServiceApi.java @@ -9,6 +9,7 @@ import java.util.Set; /** * Bpm 用户组 API æŽ¥å£ * + * @author èŠ‹é“æºç  * @author jason */ public interface BpmUserGroupServiceApi { diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmFormServiceApiImpl.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmFormServiceApiImpl.java new file mode 100644 index 0000000000..104445275d --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmFormServiceApiImpl.java @@ -0,0 +1,33 @@ +package cn.iocoder.yudao.adminserver.modules.bpm.api; + +import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmFormConvert; +import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmFormMapper; +import cn.iocoder.yudao.coreservice.modules.bpm.api.form.BpmFormServiceApi; +import cn.iocoder.yudao.coreservice.modules.bpm.api.form.dto.BpmFormDTO; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Collection; +import java.util.List; +/** + * 动æ€è¡¨å• Api Service 实现类 + * + * @author 风里雾里 + * @author jason + */ +@Service +public class BpmFormServiceApiImpl implements BpmFormServiceApi { + + @Resource + private BpmFormMapper formMapper; + + @Override + public BpmFormDTO getForm(Long id) { + return BpmFormConvert.INSTANCE.convert1(formMapper.selectById(id)); + } + + @Override + public List getFormList(Collection ids) { + return BpmFormConvert.INSTANCE.convertList(formMapper.selectBatchIds(ids)); + } +} diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmUserGroupServiceApiImpl.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmUserGroupServiceApiImpl.java index b789ba9e1b..2b9ad5a6da 100644 --- a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmUserGroupServiceApiImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmUserGroupServiceApiImpl.java @@ -24,6 +24,7 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU /** * Bpm 用户组 API æŽ¥å£ å®žçŽ°ç±» * + * @author èŠ‹é“æºç  * @author jason */ @Service diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmFormController.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmFormController.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmFormController.java rename to yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmFormController.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormBaseVO.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormBaseVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormBaseVO.java rename to yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormBaseVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormCreateReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormCreateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormCreateReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormPageReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormPageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormPageReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormRespVO.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormRespVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormRespVO.java rename to yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormRespVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormSimpleRespVO.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormSimpleRespVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormSimpleRespVO.java rename to yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormSimpleRespVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormUpdateReqVO.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormUpdateReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormUpdateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormUpdateReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmFormConvert.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmFormConvert.java similarity index 86% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmFormConvert.java rename to yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmFormConvert.java index 10e77f1e82..7dc2dfabf7 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmFormConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmFormConvert.java @@ -5,6 +5,7 @@ import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.Bp import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.BpmFormSimpleRespVO; import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.BpmFormUpdateReqVO; import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmFormDO; +import cn.iocoder.yudao.coreservice.modules.bpm.api.form.dto.BpmFormDTO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -27,6 +28,10 @@ public interface BpmFormConvert { BpmFormRespVO convert(BpmFormDO bean); + BpmFormDTO convert1(BpmFormDO bean); + + List convertList(List list); + List convertList2(List list); PageResult convertPage(PageResult page); diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmFormDO.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmFormDO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmFormDO.java rename to yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmFormDO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmFormMapper.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmFormMapper.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmFormMapper.java rename to yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmFormMapper.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java index 5fd230cefd..531f7fac4c 100644 --- a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java +++ b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java @@ -7,4 +7,7 @@ public interface BpmErrorCodeConstants { ErrorCode USER_GROUP_NOT_EXISTS = new ErrorCode(1009011000, "用户组ä¸å­˜åœ¨"); ErrorCode USER_GROUP_IS_DISABLE = new ErrorCode(1009011001, "å字为ã€{}】的用户组已被ç¦ç”¨"); + // ========== 动æ€è¡¨å•æ¨¡å— 1-009-010-000 ========== + ErrorCode FORM_NOT_EXISTS = new ErrorCode(1009010000, "动æ€è¡¨å•ä¸å­˜åœ¨"); + ErrorCode FORM_FIELD_REPEAT = new ErrorCode(1009010000, "表å•项({}) å’Œ ({}) 使用了相åŒçš„字段å({})"); } diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormService.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormService.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormService.java rename to yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormService.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmFormFieldRespDTO.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmFormFieldRespDTO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmFormFieldRespDTO.java rename to yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmFormFieldRespDTO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmFormServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmFormServiceImpl.java similarity index 88% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmFormServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmFormServiceImpl.java index e7ba8dfa98..8bebc39ca9 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmFormServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmFormServiceImpl.java @@ -7,8 +7,10 @@ import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.Bp import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmFormConvert; import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmFormDO; import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmFormMapper; +import cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmFormService; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmFormFieldRespDTO; +import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.json.JsonUtils; import org.springframework.stereotype.Service; @@ -20,10 +22,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.FORM_FIELD_REPEAT; -import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.FORM_NOT_EXISTS; -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; - /** * 动æ€è¡¨å• Service 实现类 * @@ -66,7 +64,7 @@ public class BpmFormServiceImpl implements BpmFormService { private void validateFormExists(Long id) { if (formMapper.selectById(id) == null) { - throw exception(FORM_NOT_EXISTS); + throw ServiceExceptionUtil.exception(BpmErrorCodeConstants.FORM_NOT_EXISTS); } } @@ -106,7 +104,7 @@ public class BpmFormServiceImpl implements BpmFormService { continue; } // 如果存在,则报错 - throw exception(FORM_FIELD_REPEAT, oldLabel, fieldDTO.getLabel(), fieldDTO.getVModel()); + throw ServiceExceptionUtil.exception(BpmErrorCodeConstants.FORM_FIELD_REPEAT, oldLabel, fieldDTO.getLabel(), fieldDTO.getVModel()); } } diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormServiceTest.java b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormServiceTest.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormServiceTest.java rename to yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormServiceTest.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/sql/clean.sql b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/sql/clean.sql index 45b43e0e8f..43c1cc535b 100644 --- a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/sql/clean.sql +++ b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/sql/clean.sql @@ -1,2 +1,3 @@ -- bpm 开头的 DB +DELETE FROM "bpm_form"; DELETE FROM "bpm_user_group"; diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/sql/create_tables.sql b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/sql/create_tables.sql index da5b9a6130..92d2500645 100644 --- a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/sql/create_tables.sql +++ b/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/sql/create_tables.sql @@ -12,3 +12,18 @@ CREATE TABLE IF NOT EXISTS "bpm_user_group" ( "deleted" bit NOT NULL DEFAULT FALSE, PRIMARY KEY ("id") ) COMMENT '用户组'; + +CREATE TABLE IF NOT EXISTS "bpm_form" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "name" varchar(63) NOT NULL, + "status" tinyint NOT NULL, + "fields" varchar(255) NOT NULL, + "conf" varchar(255) NOT NULL, + "remark" varchar(255), + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '动æ€è¡¨å•'; From 933bb7c6a643fd1c1065ba5ef6c3262c5c9af6c8 Mon Sep 17 00:00:00 2001 From: jason <2667446@qq.com> Date: Sat, 29 Jan 2022 23:15:57 +0800 Subject: [PATCH 12/47] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=90=88=E5=B9=B6?= =?UTF-8?q?=E5=90=8E=E7=9A=84=E7=BC=96=E8=AF=91=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../framework/activiti/config/BpmActivitiConfiguration.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java index 8e30c22db6..2e1da6f4ab 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java @@ -10,17 +10,11 @@ import cn.iocoder.yudao.coreservice.modules.bpm.api.group.BpmUserGroupServiceApi import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; import cn.iocoder.yudao.coreservice.modules.system.service.permission.SysPermissionCoreService; import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmUserGroupService; -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService; -import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; import org.activiti.api.runtime.shared.identity.UserGroupManager; -import org.activiti.core.common.spring.identity.ActivitiUserGroupManagerImpl; import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer; import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.security.core.userdetails.UserDetailsService; import java.util.Collections; import java.util.List; From ab6ec2f0edaf13c1338ec3235b26ad4516db8508 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 30 Jan 2022 00:49:31 +0800 Subject: [PATCH 13/47] =?UTF-8?q?=E5=A4=9A=E6=A8=A1=E5=9D=97=E9=87=8D?= =?UTF-8?q?=E6=9E=84=204=EF=BC=9Asystem=20=E6=A8=A1=E5=9D=97=E7=9A=84?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=EF=BC=8C=E5=8E=BB=E9=99=A4=20Sys?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/vo/InfConfigExcelVO.java | 6 +- .../apiaccesslog/InfApiAccessLogExcelVO.java | 4 +- .../vo/apierrorlog/InfApiErrorLogExcelVO.java | 4 +- .../order/vo/order/PayOrderExcelVO.java | 8 +- .../order/vo/refund/vo/PayRefundExcelVO.java | 8 +- .../test/vo/ToolTestDemoExcelVO.java | 6 +- .../redis/core/stream/RedisStreamTest.java | 2 +- .../sms/SysSmsServiceIntegrationTest.java | 2 +- .../infra/enums/SysErrorCodeConstants.java | 16 ++ .../modules/infra/enums/package-info.java | 4 - .../file/impl/InfFileCoreServiceImpl.java | 2 +- .../logger/SysLoginLogCoreConvert.java | 15 -- .../modules/system/convert/package-info.java | 6 - ...‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md | 1 - .../system/dal/dataobject/package-info.java | 1 - .../dal/mysql/dict/SysDictDataCoreMapper.java | 19 --- .../system/dal/mysql/package-info.java | 1 - .../dal/mysql/sms/SysSmsLogCoreMapper.java | 13 -- .../mysql/sms/SysSmsTemplateCoreMapper.java | 16 -- .../dal/mysql/user/SysUserCoreMapper.java | 17 -- .../dal/redis/SysRedisKeyCoreConstants.java | 29 ---- .../system/mq/message/package-info.java | 4 - .../system/mq/producer/package-info.java | 4 - .../mq/producer/sms/SysSmsCoreProducer.java | 41 ----- .../modules/system/package-info.java | 7 - .../auth/SysUserSessionCoreService.java | 52 ------ .../impl/SysUserSessionCoreServiceImpl.java | 93 ----------- .../service/dict/SysDictDataCoreService.java | 29 ---- .../dict/impl/SysDictDataCoreServiceImpl.java | 145 ----------------- .../logger/SysLoginLogCoreService.java | 17 -- .../impl/SysLoginLogCoreServiceImpl.java | 30 ---- .../service/sms/SysSmsLogCoreService.java | 56 ------- .../sms/SysSmsTemplateCoreService.java | 36 ----- .../sms/impl/SysSmsLogCoreServiceImpl.java | 72 --------- .../impl/SysSmsTemplateCoreServiceImpl.java | 105 ------------ .../service/user/SysUserCoreService.java | 70 -------- .../user/impl/SysUserCoreServiceImpl.java | 82 ---------- .../service/file/InfFileCoreServiceTest.java | 3 +- .../auth/SysUserSessionCoreServiceTest.java | 125 --------------- .../dict/SysDictDataCoreServiceTest.java | 78 --------- .../logger/SysLoginLogServiceImplTest.java | 47 ------ .../modules/system/service/package-info.java | 1 - .../service/sms/SysSmsLogCoreServiceTest.java | 149 ------------------ .../sms/SysSmsTemplateServiceTest.java | 71 --------- .../convert/message/BpmMessageConvert.java | 2 +- .../task/BpmProcessInstanceConvert.java | 4 +- .../bpm/convert/task/BpmTaskConvert.java | 4 +- .../dal/dataobject/leave/BpmOALeaveDO.java | 2 +- .../bpm/enums/message/BpmMessageEnum.java | 2 +- .../config/BpmActivitiConfiguration.java | 6 +- .../behavior/BpmActivityBehaviorFactory.java | 6 +- .../behavior/BpmUserTaskActivitiBehavior.java | 10 +- .../BpmTaskAssignLeaderAbstractScript.java | 9 +- .../impl/BpmTaskAssignRuleServiceImpl.java | 14 +- .../message/impl/BpmMessageServiceImpl.java | 2 +- .../impl/BpmProcessInstanceServiceImpl.java | 8 +- .../service/task/impl/BpmTaskServiceImpl.java | 8 +- .../BpmUserTaskActivitiBehaviorTest.java | 10 +- .../impl/BpmTaskAssignLeaderX2ScriptTest.java | 8 +- .../yudao-module-member-impl/pom.xml | 6 + .../app/auth/AppAuthController.java | 3 - .../app/auth/vo/AppAuthSocialBindReqVO.java | 1 - .../app/auth/vo/AppAuthSocialLogin2ReqVO.java | 4 +- .../app/auth/vo/AppAuthSocialLoginReqVO.java | 4 +- .../app/auth/vo/AppAuthSocialUnbindReqVO.java | 4 +- .../member/service/auth/AuthServiceImpl.java | 15 +- .../service/sms/SysSmsCodeServiceImpl.java | 2 +- .../service/auth/SysAuthServiceTest.java | 6 +- .../system/enums/ErrorCodeConstants.java | 0 .../system/enums/SysErrorCodeConstants.java | 10 +- .../system/enums/social/SocialTypeEnum.java | 8 +- .../controller/admin/auth/AuthController.java | 17 +- .../admin/auth/UserSessionController.java | 25 ++- .../auth/vo/auth/AuthSocialBindReqVO.java | 4 +- .../auth/vo/auth/AuthSocialLogin2ReqVO.java | 4 +- .../auth/vo/auth/AuthSocialLoginReqVO.java | 4 +- .../auth/vo/auth/AuthSocialUnbindReqVO.java | 4 +- .../controller/admin/dept/DeptController.java | 4 +- .../controller/admin/dept/PostController.java | 2 +- .../admin/dept/vo/post/PostExcelVO.java | 4 +- .../admin/dict/DictDataController.java | 2 +- .../admin/dict/vo/data/DictDataExcelVO.java | 4 +- .../admin/dict/vo/type/DictTypeExcelVO.java | 4 +- .../admin/logger/LoginLogController.java | 2 +- .../admin/logger/OperateLogController.java | 14 +- .../logger/vo/loginlog/LoginLogExcelVO.java | 6 +- .../vo/operatelog/OperateLogExcelVO.java | 4 +- .../admin/permission/RoleController.java | 2 +- .../admin/permission/vo/role/RoleExcelVO.java | 4 +- .../admin/sms/SmsCallbackController.java | 4 +- .../admin/sms/SmsChannelController.java | 2 +- .../admin/sms/SmsLogController.java | 2 +- .../admin/sms/SmsTemplateController.java | 6 +- .../admin/sms/vo/log/SmsLogExcelVO.java | 10 +- .../sms/vo/template/SmsTemplateExcelVO.java | 8 +- .../admin/tenant/TenantController.java | 2 +- .../controller/admin/user/UserController.java | 30 ++-- .../admin/user/UserProfileController.java | 25 ++- .../admin/user/vo/user/UserExcelVO.java | 6 +- .../admin/user/vo/user/UserImportExcelVO.java | 6 +- .../system/convert/auth/AuthConvert.java | 10 +- .../convert/auth/UserSessionConvert.java | 2 +- .../system/convert/dept/DeptConvert.java | 2 +- .../system/convert/dept/PostConvert.java | 2 +- .../system/convert/dict/DictDataConvert.java | 2 +- .../convert/dict/SysDictDataCoreConvert.java | 4 +- .../convert/logger/LoginLogConvert.java | 2 +- .../convert/logger/OperateLogConvert.java | 4 +- .../logger/SysLoginLogCoreConvert.java | 15 ++ .../convert/permission/RoleConvert.java | 2 +- .../system/convert/sms/SmsChannelConvert.java | 2 +- .../system/convert/sms/SmsLogConvert.java | 2 +- .../convert/sms/SmsTemplateConvert.java | 2 +- .../system/convert/tenant/TenantConvert.java | 2 +- .../system/convert/user/UserConvert.java | 28 ++-- .../dal/dataobject/auth/SysUserSessionDO.java | 2 +- .../system/dal/dataobject/dept/SysDeptDO.java | 6 +- .../system/dal/dataobject/dept/SysPostDO.java | 2 +- .../dal/dataobject/dict/SysDictDataDO.java | 2 +- .../dal/dataobject/logger/OperateLogDO.java | 4 +- .../dal/dataobject/logger/SysLoginLogDO.java | 6 +- .../system/dal/dataobject/package-info.java | 1 + .../dal/dataobject/permission/SysRoleDO.java | 2 +- .../dataobject/permission/SysUserRoleDO.java | 2 +- .../dal/dataobject/sms/SysSmsChannelDO.java | 2 +- .../dal/dataobject/sms/SysSmsLogDO.java | 6 +- .../dal/dataobject/sms/SysSmsTemplateDO.java | 4 +- .../dataobject/social/SysSocialUserDO.java | 6 +- .../dal/dataobject/tenant/SysTenantDO.java | 2 +- .../system/dal/dataobject/user/UserDO.java | 6 +- .../mysql/auth/SysUserSessionCoreMapper.java | 4 +- .../dal/mysql/auth/SysUserSessionMapper.java | 2 +- .../dal/mysql/dept/SysDeptCoreMapper.java | 4 +- .../system/dal/mysql/dept/SysDeptMapper.java | 2 +- .../dal/mysql/dept/SysPostCoreMapper.java | 4 +- .../system/dal/mysql/dept/SysPostMapper.java | 2 +- .../dal/mysql/dict/SysDictDataMapper.java | 3 +- .../dal/mysql/logger/LoginLogMapper.java | 2 +- .../mysql/logger/SysLoginLogCoreMapper.java | 4 +- .../module/system/dal/mysql/package-info.java | 1 + .../mysql/permission/SysRoleCoreMapper.java | 4 +- .../dal/mysql/permission/SysRoleMapper.java | 2 +- .../permission/SysUserRoleCoreMapper.java | 4 +- .../mysql/permission/SysUserRoleMapper.java | 2 +- .../dal/mysql/sms/SysSmsChannelMapper.java | 2 +- .../system/dal/mysql/sms/SysSmsLogMapper.java | 2 +- .../dal/mysql/sms/SysSmsTemplateMapper.java | 12 +- .../dal/mysql/social/SysSocialUserMapper.java | 6 +- .../dal/mysql/tenant/SysTenantCoreMapper.java | 4 +- .../dal/mysql/tenant/SysTenantMapper.java | 2 +- .../system/dal/mysql/user/SysUserMapper.java | 77 --------- .../system/dal/mysql/user/UserMapper.java | 68 ++++++++ .../dal/redis/SysRedisKeyConstants.java | 16 ++ .../dal/redis/SysRedisKeyCoreConstants.java | 18 +++ .../dal/redis/auth/LoginUserRedisDAO.java | 6 +- .../redis/social/SocialAuthUserRedisDAO.java | 7 +- .../system/enums/DictTypeConstants.java | 4 +- .../system/enums/common/SysSexEnum.java | 2 +- .../enums/logger/SysLoginLogTypeEnum.java | 2 +- .../enums/logger/SysLoginResultEnum.java | 2 +- .../enums/sms/SysSmsReceiveStatusEnum.java | 2 +- .../enums/sms/SysSmsSendStatusEnum.java | 2 +- .../enums/sms/SysSmsTemplateTypeEnum.java | 2 +- .../config/DataPermissionConfiguration.java | 6 +- .../dict/DictDataRefreshConsumer.java | 6 +- .../mq/consumer/sms/SmsSendConsumer.java | 12 +- .../sms/SmsTemplateRefreshConsumer.java | 6 +- .../system/mq/message/sms/SmsSendMessage.java | 4 +- .../system/mq/producer/package-info.java | 4 + .../system/mq/producer/sms/SmsProducer.java | 19 +++ .../system/service/auth/AuthServiceImpl.java | 95 +++++------ .../service/auth/UserSessionService.java | 43 ++++- .../service/auth/UserSessionServiceImpl.java | 92 +++++++++-- .../system/service/dept/DeptService.java | 2 +- .../system/service/dept/DeptServiceImpl.java | 2 +- .../system/service/dept/PostService.java | 2 +- .../system/service/dept/PostServiceImpl.java | 2 +- .../service/dept/SysDeptCoreService.java | 4 +- .../service/dept/SysPostCoreService.java | 2 +- .../dept/impl/SysDeptCoreServiceImpl.java | 13 +- .../dept/impl/SysPostCoreServiceImpl.java | 12 +- .../system/service/dict/DictDataService.java | 21 ++- .../service/dict/DictDataServiceImpl.java | 121 ++++++++++++-- .../service/dict/DictTypeServiceImpl.java | 6 +- .../service/logger/LoginLogService.java | 10 +- .../service/logger/LoginLogServiceImpl.java | 12 +- .../service/logger/OperateLogServiceImpl.java | 6 +- .../logger/dto/LoginLogCreateReqDTO.java | 4 +- .../permission/PermissionServiceImpl.java | 6 +- .../service/permission/RoleService.java | 2 +- .../service/permission/RoleServiceImpl.java | 2 +- .../permission/SysPermissionCoreService.java | 2 +- .../permission/SysRoleCoreService.java | 2 +- .../impl/SysPermissionCoreServiceImpl.java | 8 +- .../impl/SysRoleCoreServiceImpl.java | 12 +- .../system/service/sms/SmsChannelService.java | 2 +- .../service/sms/SmsChannelServiceImpl.java | 2 +- .../system/service/sms/SmsLogService.java | 45 +++++- .../system/service/sms/SmsLogServiceImpl.java | 54 ++++++- .../service/sms/SmsTemplateService.java | 25 ++- .../service/sms/SmsTemplateServiceImpl.java | 86 +++++++++- .../system/service/sms/SysSmsSendService.java | 13 +- .../service/sms/SysSmsSendServiceImpl.java | 50 +++--- .../service/social/SocialUserService.java | 20 +-- .../service/social/SocialUserServiceImpl.java | 31 ++-- .../service/tenant/SysTenantCoreService.java | 2 +- .../system/service/tenant/TenantService.java | 2 +- .../service/tenant/TenantServiceImpl.java | 2 +- .../tenant/impl/SysTenantCoreServiceImpl.java | 8 +- .../system/service/user/UserService.java | 72 +++++++-- .../system/service/user/UserServiceImpl.java | 121 +++++++++----- .../service/auth/AuthServiceImplTest.java | 42 +++-- .../auth/UserSessionServiceImplTest.java | 116 ++++++++++++-- .../system/service/dept/DeptServiceTest.java | 2 +- .../system/service/dept/PostServiceTest.java | 2 +- .../service/dict/DictDataServiceTest.java | 36 ++++- .../logger/LoginLogServiceImplTest.java | 30 +++- .../logger/OperateLogServiceImplTest.java | 8 +- .../permission/PermissionServiceTest.java | 6 +- .../service/permission/RoleServiceTest.java | 2 +- .../service/sms/SmsChannelServiceTest.java | 2 +- .../system/service/sms/SmsLogServiceTest.java | 103 +++++++++++- .../service/sms/SmsTemplateServiceTest.java | 31 +++- .../service/sms/SysSmsSendServiceTest.java | 62 ++++---- .../service/social/SocialUsererviceTest.java | 36 ++--- .../service/tenant/TenantServiceTest.java | 2 +- .../service/user/UserServiceImplTest.java | 70 ++++---- 227 files changed, 1649 insertions(+), 2252 deletions(-) create mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/enums/SysErrorCodeConstants.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/enums/package-info.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/convert/logger/SysLoginLogCoreConvert.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/convert/package-info.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/package-info.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/dict/SysDictDataCoreMapper.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/package-info.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/sms/SysSmsLogCoreMapper.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/sms/SysSmsTemplateCoreMapper.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/user/SysUserCoreMapper.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/redis/SysRedisKeyCoreConstants.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/mq/message/package-info.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/mq/producer/package-info.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/mq/producer/sms/SysSmsCoreProducer.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/package-info.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/auth/SysUserSessionCoreService.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/auth/impl/SysUserSessionCoreServiceImpl.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dict/SysDictDataCoreService.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dict/impl/SysDictDataCoreServiceImpl.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/logger/SysLoginLogCoreService.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/logger/impl/SysLoginLogCoreServiceImpl.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsLogCoreService.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsTemplateCoreService.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/impl/SysSmsLogCoreServiceImpl.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/impl/SysSmsTemplateCoreServiceImpl.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/user/SysUserCoreService.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/user/impl/SysUserCoreServiceImpl.java delete mode 100644 yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/auth/SysUserSessionCoreServiceTest.java delete mode 100644 yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/dict/SysDictDataCoreServiceTest.java delete mode 100644 yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/logger/SysLoginLogServiceImplTest.java delete mode 100644 yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/package-info.java delete mode 100644 yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsLogCoreServiceTest.java delete mode 100644 yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsTemplateServiceTest.java rename yudao-module-system/{yudao-module-system-impl => yudao-module-system-api}/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java (100%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module}/system/enums/SysErrorCodeConstants.java (76%) rename yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/social/SysSocialTypeEnum.java => yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/social/SocialTypeEnum.java (89%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/convert/dict/SysDictDataCoreConvert.java (74%) create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/SysLoginLogCoreConvert.java rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/dataobject/auth/SysUserSessionDO.java (95%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/dataobject/dept/SysDeptDO.java (84%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/dataobject/dept/SysPostDO.java (92%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/dataobject/dict/SysDictDataDO.java (93%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/dataobject/logger/SysLoginLogDO.java (83%) create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/package-info.java rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/dataobject/permission/SysRoleDO.java (95%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/dataobject/permission/SysUserRoleDO.java (88%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/dataobject/sms/SysSmsChannelDO.java (94%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/dataobject/sms/SysSmsLogDO.java (94%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/dataobject/sms/SysSmsTemplateDO.java (92%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/dataobject/social/SysSocialUserDO.java (90%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/dataobject/tenant/SysTenantDO.java (91%) rename yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/user/SysUserDO.java => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/UserDO.java (90%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/mysql/auth/SysUserSessionCoreMapper.java (56%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/mysql/dept/SysDeptCoreMapper.java (56%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/mysql/dept/SysPostCoreMapper.java (56%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/mysql/logger/SysLoginLogCoreMapper.java (55%) create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/package-info.java rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/mysql/permission/SysRoleCoreMapper.java (54%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/mysql/permission/SysUserRoleCoreMapper.java (70%) rename yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/social/SysSocialUserCoreMapper.java => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/social/SysSocialUserMapper.java (80%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/dal/mysql/tenant/SysTenantCoreMapper.java (55%) delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/SysUserMapper.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/UserMapper.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/SysRedisKeyCoreConstants.java rename yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/redis/auth/SysLoginUserCoreRedisDAO.java => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/auth/LoginUserRedisDAO.java (85%) rename yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/redis/social/SysSocialAuthUserRedisDAO.java => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/social/SocialAuthUserRedisDAO.java (83%) rename yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/SysDictTypeConstants.java => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/DictTypeConstants.java (94%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/enums/common/SysSexEnum.java (83%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/enums/logger/SysLoginLogTypeEnum.java (89%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/enums/logger/SysLoginResultEnum.java (88%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/enums/sms/SysSmsReceiveStatusEnum.java (84%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/enums/sms/SysSmsSendStatusEnum.java (85%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/enums/sms/SysSmsTemplateTypeEnum.java (84%) rename yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/mq/message/sms/SysSmsSendMessage.java => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/sms/SmsSendMessage.java (88%) create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/package-info.java rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/dept/SysDeptCoreService.java (90%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/dept/SysPostCoreService.java (84%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/dept/impl/SysDeptCoreServiceImpl.java (74%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/dept/impl/SysPostCoreServiceImpl.java (71%) rename yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/logger/dto/SysLoginLogCreateReqDTO.java => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/dto/LoginLogCreateReqDTO.java (91%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/permission/SysPermissionCoreService.java (86%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/permission/SysRoleCoreService.java (83%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/permission/impl/SysPermissionCoreServiceImpl.java (64%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/permission/impl/SysRoleCoreServiceImpl.java (70%) rename yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsCoreService.java => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsSendService.java (79%) rename yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/impl/SysSmsCoreServiceImpl.java => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsSendServiceImpl.java (76%) rename yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/social/SysSocialCoreService.java => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java (76%) rename yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/social/impl/SysSocialCoreServiceImpl.java => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java (84%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/tenant/SysTenantCoreService.java (75%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module}/system/service/tenant/impl/SysTenantCoreServiceImpl.java (63%) rename yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsCoreServiceTest.java => yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsSendServiceTest.java (70%) rename yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/social/SysSocialCoreServiceTest.java => yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialUsererviceTest.java (80%) diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigExcelVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigExcelVO.java index 28c10b2dce..63b8087446 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigExcelVO.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigExcelVO.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.module.system.enums.DictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @@ -30,11 +30,11 @@ public class InfConfigExcelVO { private String value; @ExcelProperty(value = "傿•°ç±»åž‹", converter = DictConvert.class) - @DictFormat(SysDictTypeConstants.CONFIG_TYPE) + @DictFormat(DictTypeConstants.CONFIG_TYPE) private Integer type; @ExcelProperty(value = "æ˜¯å¦æ•感", converter = DictConvert.class) - @DictFormat(SysDictTypeConstants.BOOLEAN_STRING) + @DictFormat(DictTypeConstants.BOOLEAN_STRING) private Boolean sensitive; @ExcelProperty("备注") diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogExcelVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogExcelVO.java index d48dc44b0c..c69969b4b0 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogExcelVO.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogExcelVO.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apiacces import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.module.system.enums.DictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @@ -26,7 +26,7 @@ public class InfApiAccessLogExcelVO { private Long userId; @ExcelProperty(value = "用户类型", converter = DictConvert.class) - @DictFormat(SysDictTypeConstants.USER_TYPE) + @DictFormat(DictTypeConstants.USER_TYPE) private Integer userType; @ExcelProperty("应用å") diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apierrorlog/InfApiErrorLogExcelVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apierrorlog/InfApiErrorLogExcelVO.java index c33e73dced..dfae3311ac 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apierrorlog/InfApiErrorLogExcelVO.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apierrorlog/InfApiErrorLogExcelVO.java @@ -3,7 +3,7 @@ package cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apierror import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; import cn.iocoder.yudao.adminserver.modules.infra.enums.InfDictTypeConstants; -import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.module.system.enums.DictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @@ -27,7 +27,7 @@ public class InfApiErrorLogExcelVO { private Integer userId; @ExcelProperty(value = "用户类型", converter = DictConvert.class) - @DictFormat(SysDictTypeConstants.USER_TYPE) + @DictFormat(DictTypeConstants.USER_TYPE) private Integer userType; @ExcelProperty("应用å") diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderExcelVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderExcelVO.java index 28e5e7c613..f6836bc8c1 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderExcelVO.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderExcelVO.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order; -import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.module.system.enums.DictTypeConstants; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; import com.alibaba.excel.annotation.ExcelProperty; @@ -46,11 +46,11 @@ public class PayOrderExcelVO { @ExcelProperty("æ¸ é“æ‰‹ç»­è´¹ï¼Œå•ä½ï¼šç™¾åˆ†æ¯”") private String channelFeeRate; - @DictFormat(SysDictTypeConstants.PAY_ORDER_STATUS) + @DictFormat(DictTypeConstants.PAY_ORDER_STATUS) @ExcelProperty(value = "支付状æ€", converter = DictConvert.class) private Integer status; - @DictFormat(SysDictTypeConstants.PAY_ORDER_NOTIFY_STATUS) + @DictFormat(DictTypeConstants.PAY_ORDER_NOTIFY_STATUS) @ExcelProperty(value = "通知商户支付结果的回调状æ€", converter = DictConvert.class) private Integer notifyStatus; @@ -75,7 +75,7 @@ public class PayOrderExcelVO { @ExcelProperty("用户 IP") private String userIp; - @DictFormat(SysDictTypeConstants.PAY_ORDER_REFUND_STATUS) + @DictFormat(DictTypeConstants.PAY_ORDER_REFUND_STATUS) @ExcelProperty(value = "退款状æ€", converter = DictConvert.class) private Integer refundStatus; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundExcelVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundExcelVO.java index b0b2c18e17..793493eaa9 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundExcelVO.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundExcelVO.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; -import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.module.system.enums.DictTypeConstants; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; import com.alibaba.excel.annotation.ExcelProperty; @@ -43,15 +43,15 @@ public class PayRefundExcelVO { @ExcelProperty("异步通知商户地å€") private String notifyUrl; - @DictFormat(SysDictTypeConstants.PAY_ORDER_NOTIFY_STATUS) + @DictFormat(DictTypeConstants.PAY_ORDER_NOTIFY_STATUS) @ExcelProperty(value = "商户退款结果回调状æ€", converter = DictConvert.class) private Integer notifyStatus; - @DictFormat(SysDictTypeConstants.PAY_REFUND_ORDER_STATUS) + @DictFormat(DictTypeConstants.PAY_REFUND_ORDER_STATUS) @ExcelProperty(value = "退款状æ€", converter = DictConvert.class) private Integer status; - @DictFormat(SysDictTypeConstants.PAY_REFUND_ORDER_TYPE) + @DictFormat(DictTypeConstants.PAY_REFUND_ORDER_TYPE) @ExcelProperty(value = "退款类型", converter = DictConvert.class) private Integer type; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoExcelVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoExcelVO.java index 87e827440c..e7a98b6f19 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoExcelVO.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoExcelVO.java @@ -3,7 +3,7 @@ package cn.iocoder.yudao.adminserver.modules.tool.controller.test.vo; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; import cn.iocoder.yudao.adminserver.modules.infra.enums.InfDictTypeConstants; -import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.module.system.enums.DictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @@ -24,11 +24,11 @@ public class ToolTestDemoExcelVO { private String name; @ExcelProperty(value = "状æ€", converter = DictConvert.class) - @DictFormat(SysDictTypeConstants.COMMON_STATUS) + @DictFormat(DictTypeConstants.COMMON_STATUS) private Integer status; @ExcelProperty(value = "类型", converter = DictConvert.class) - @DictFormat(SysDictTypeConstants.OPERATE_TYPE) + @DictFormat(DictTypeConstants.OPERATE_TYPE) private Integer type; @ExcelProperty(value = "分类", converter = DictConvert.class) diff --git a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/framework/redis/core/stream/RedisStreamTest.java b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/framework/redis/core/stream/RedisStreamTest.java index 3f1bb7fb90..a99c65e47b 100644 --- a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/framework/redis/core/stream/RedisStreamTest.java +++ b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/framework/redis/core/stream/RedisStreamTest.java @@ -5,7 +5,7 @@ import cn.iocoder.yudao.adminserver.BaseRedisIntegrationTest; import cn.iocoder.yudao.module.system.mq.consumer.mail.SysMailSendConsumer; import cn.iocoder.yudao.module.system.mq.consumer.sms.SysSmsSendConsumer; import cn.iocoder.yudao.module.system.mq.message.mail.SysMailSendMessage; -import cn.iocoder.yudao.coreservice.modules.system.mq.message.sms.SysSmsSendMessage; +import cn.iocoder.yudao.module.system.mq.message.sms.SysSmsSendMessage; import cn.iocoder.yudao.framework.mq.core.util.RedisMessageUtils; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; diff --git a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsServiceIntegrationTest.java b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsServiceIntegrationTest.java index a6b4c47a28..ad63132b9a 100644 --- a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsServiceIntegrationTest.java +++ b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsServiceIntegrationTest.java @@ -9,7 +9,7 @@ import cn.iocoder.yudao.module.system.service.sms.impl.SysSmsChannelServiceImpl; import cn.iocoder.yudao.module.system.service.sms.impl.SysSmsLogServiceImpl; import cn.iocoder.yudao.module.system.service.sms.impl.SysSmsTemplateServiceImpl; import cn.iocoder.yudao.module.system.service.user.SysUserService; -import cn.iocoder.yudao.coreservice.modules.system.service.sms.impl.SysSmsCoreServiceImpl; +import cn.iocoder.yudao.module.system.service.sms.impl.SysSmsCoreServiceImpl; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.sms.config.YudaoSmsAutoConfiguration; import org.junit.jupiter.api.Test; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/enums/SysErrorCodeConstants.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/enums/SysErrorCodeConstants.java new file mode 100644 index 0000000000..4cafc58e40 --- /dev/null +++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/enums/SysErrorCodeConstants.java @@ -0,0 +1,16 @@ +package cn.iocoder.yudao.coreservice.modules.infra.enums; + +import cn.iocoder.yudao.framework.common.exception.ErrorCode; + +/** + * System é”™è¯¯ç æžšä¸¾ç±» + * + * system 系统,使用 1-006-000-000 段 + */ +public interface SysErrorCodeConstants { + + // ========= 文件相关 1006001000================= + ErrorCode FILE_PATH_EXISTS = new ErrorCode(1006001000, "文件路径已存在"); + ErrorCode FILE_NOT_EXISTS = new ErrorCode(1006001002, "文件ä¸å­˜åœ¨"); + +} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/enums/package-info.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/enums/package-info.java deleted file mode 100644 index 6231dae910..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/enums/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * å ä½ç±»ï¼Œå¯ä»¥æ— è§† - */ -package cn.iocoder.yudao.coreservice.modules.infra.enums; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/impl/InfFileCoreServiceImpl.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/impl/InfFileCoreServiceImpl.java index 3e2c7ead44..f586853463 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/impl/InfFileCoreServiceImpl.java +++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/impl/InfFileCoreServiceImpl.java @@ -10,7 +10,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.io.ByteArrayInputStream; -import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.coreservice.modules.infra.enums.SysErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/convert/logger/SysLoginLogCoreConvert.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/convert/logger/SysLoginLogCoreConvert.java deleted file mode 100644 index 9c19927385..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/convert/logger/SysLoginLogCoreConvert.java +++ /dev/null @@ -1,15 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.system.convert.logger; - -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO; -import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLogCreateReqDTO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -@Mapper -public interface SysLoginLogCoreConvert { - - SysLoginLogCoreConvert INSTANCE = Mappers.getMapper(SysLoginLogCoreConvert.class); - - SysLoginLogDO convert(SysLoginLogCreateReqDTO bean); - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/convert/package-info.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/convert/package-info.java deleted file mode 100644 index 87914750ae..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/convert/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -/** - * æä¾› POJO ç±»çš„å®žä½“è½¬æ¢ - * - * ç›®å‰ä½¿ç”¨ MapStruct 框架 - */ -package cn.iocoder.yudao.coreservice.modules.system.convert; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md deleted file mode 100644 index 8153487b72..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/package-info.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/package-info.java deleted file mode 100644 index f2ed88035c..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.dataobject; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/dict/SysDictDataCoreMapper.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/dict/SysDictDataCoreMapper.java deleted file mode 100644 index bda1a9142c..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/dict/SysDictDataCoreMapper.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.mysql.dict; - - -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import org.apache.ibatis.annotations.Mapper; - -import java.util.Date; - -@Mapper -public interface SysDictDataCoreMapper extends BaseMapperX { - - default boolean selectExistsByUpdateTimeAfter(Date maxUpdateTime) { - return selectOne(new QueryWrapper().select("id") - .gt("update_time", maxUpdateTime).last("LIMIT 1")) != null; - } - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/package-info.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/package-info.java deleted file mode 100644 index 144a054070..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.mysql; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/sms/SysSmsLogCoreMapper.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/sms/SysSmsLogCoreMapper.java deleted file mode 100644 index d09554575e..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/sms/SysSmsLogCoreMapper.java +++ /dev/null @@ -1,13 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.mysql.sms; - -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; -import org.apache.ibatis.annotations.Mapper; - -import java.util.List; - -@Mapper -public interface SysSmsLogCoreMapper extends BaseMapperX { -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/sms/SysSmsTemplateCoreMapper.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/sms/SysSmsTemplateCoreMapper.java deleted file mode 100644 index 4e064b40db..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/sms/SysSmsTemplateCoreMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.mysql.sms; - -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Select; - -import java.util.Date; - -@Mapper -public interface SysSmsTemplateCoreMapper extends BaseMapperX { - - @Select("SELECT id FROM sys_sms_template WHERE update_time > #{maxUpdateTime} LIMIT 1") - Long selectExistsByUpdateTimeAfter(Date maxUpdateTime); - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/user/SysUserCoreMapper.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/user/SysUserCoreMapper.java deleted file mode 100644 index e4afd992a8..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/user/SysUserCoreMapper.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.mysql.user; - -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import org.apache.ibatis.annotations.Mapper; - -import java.util.Collection; -import java.util.List; - -@Mapper -public interface SysUserCoreMapper extends BaseMapperX { - - default List selectListByDeptIds(Collection deptIds) { - return selectList(SysUserDO::getDeptId, deptIds); - } -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/redis/SysRedisKeyCoreConstants.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/redis/SysRedisKeyCoreConstants.java deleted file mode 100644 index 5db3e9fd48..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/redis/SysRedisKeyCoreConstants.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.redis; - -import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine; -import cn.iocoder.yudao.framework.security.core.LoginUser; -import me.zhyd.oauth.model.AuthUser; - -import java.time.Duration; - -import static cn.iocoder.yudao.framework.redis.core.RedisKeyDefine.KeyTypeEnum.STRING; - -/** - * System Redis Key 枚举类 - * - * @author èŠ‹é“æºç  - */ -public interface SysRedisKeyCoreConstants { - - RedisKeyDefine LOGIN_USER = new RedisKeyDefine("登录用户的缓存", - "login_user:%s", // 傿•°ä¸º sessionId - STRING, LoginUser.class, RedisKeyDefine.TimeoutTypeEnum.DYNAMIC); - - RedisKeyDefine SOCIAL_AUTH_USER = new RedisKeyDefine("社交登陆的授æƒç”¨æˆ·", - "social_auth_user:%d:%s", // 傿•°ä¸º type,code - STRING, AuthUser.class, Duration.ofDays(1)); - - RedisKeyDefine SOCIAL_AUTH_STATE = new RedisKeyDefine("社交登陆的 state", - "social_auth_state:%s", // 傿•°ä¸º state - STRING, String.class, Duration.ofHours(24)); // 值为 state -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/mq/message/package-info.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/mq/message/package-info.java deleted file mode 100644 index 2e18f1adf6..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/mq/message/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * å ä½ - */ -package cn.iocoder.yudao.coreservice.modules.system.mq.message; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/mq/producer/package-info.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/mq/producer/package-info.java deleted file mode 100644 index 2fe4aa305d..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/mq/producer/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * å ä½ - */ -package cn.iocoder.yudao.coreservice.modules.system.mq.producer; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/mq/producer/sms/SysSmsCoreProducer.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/mq/producer/sms/SysSmsCoreProducer.java deleted file mode 100644 index 9ecf647062..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/mq/producer/sms/SysSmsCoreProducer.java +++ /dev/null @@ -1,41 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.system.mq.producer.sms; - -import cn.iocoder.yudao.coreservice.modules.system.mq.message.sms.SysSmsSendMessage; -import cn.iocoder.yudao.framework.common.core.KeyValue; -import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; -import java.util.List; - -/** - * Sms 短信相关消æ¯çš„ Core Producer - * - * @author zzf - * @date 2021/3/9 16:35 - */ -@Slf4j -@Component -public class SysSmsCoreProducer { - - @Resource - private RedisMQTemplate redisMQTemplate; - - /** - * å‘é€ {@link SysSmsSendMessage} æ¶ˆæ¯ - * - * @param logId çŸ­ä¿¡æ—¥å¿—ç¼–å· - * @param mobile æ‰‹æœºå· - * @param channelId 渠é“ç¼–å· - * @param apiTemplateId 短信模æ¿ç¼–å· - * @param templateParams 短信模æ¿å‚æ•° - */ - public void sendSmsSendMessage(Long logId, String mobile, - Long channelId, String apiTemplateId, List> templateParams) { - SysSmsSendMessage message = new SysSmsSendMessage().setLogId(logId).setMobile(mobile); - message.setChannelId(channelId).setApiTemplateId(apiTemplateId).setTemplateParams(templateParams); - redisMQTemplate.send(message); - } - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/package-info.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/package-info.java deleted file mode 100644 index 3b87779357..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -/** - * system 包下,我们放通用业务,支撑上层的核心业务。 - * 例如说:用户ã€éƒ¨é—¨ã€æƒé™ã€æ•°æ®å­—典等等 - * - * 缩写:sys - */ -package cn.iocoder.yudao.coreservice.modules.system; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/auth/SysUserSessionCoreService.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/auth/SysUserSessionCoreService.java deleted file mode 100644 index 5106af7a32..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/auth/SysUserSessionCoreService.java +++ /dev/null @@ -1,52 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.auth; - -import cn.iocoder.yudao.framework.security.core.LoginUser; - -/** - * 在线用户 Session Core Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface SysUserSessionCoreService { - - /** - * 创建在线用户 Session - * - * @param loginUser 登录用户 - * @param userIp 用户 IP - * @param userAgent 用户 UA - * @return Session ç¼–å· - */ - String createUserSession(LoginUser loginUser, String userIp, String userAgent); - - /** - * 刷新在线用户 Session 的更新时间 - * - * @param sessionId Session ç¼–å· - * @param loginUser 登录用户 - */ - void refreshUserSession(String sessionId, LoginUser loginUser); - - /** - * 删除在线用户 Session - * - * @param sessionId Session ç¼–å· - */ - void deleteUserSession(String sessionId); - - /** - * 获得 Session ç¼–å·å¯¹åº”的在线用户 - * - * @param sessionId Session ç¼–å· - * @return 在线用户 - */ - LoginUser getLoginUser(String sessionId); - - /** - * 获得 Session 超时时间,å•ä½ï¼šæ¯«ç§’ - * - * @return è¶…æ—¶æ—¶é—´ - */ - Long getSessionTimeoutMillis(); - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/auth/impl/SysUserSessionCoreServiceImpl.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/auth/impl/SysUserSessionCoreServiceImpl.java deleted file mode 100644 index f26c6afc39..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/auth/impl/SysUserSessionCoreServiceImpl.java +++ /dev/null @@ -1,93 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.auth.impl; - -import cn.hutool.core.util.IdUtil; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.auth.SysUserSessionCoreMapper; -import cn.iocoder.yudao.coreservice.modules.system.dal.redis.auth.SysLoginUserCoreRedisDAO; -import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService; -import cn.iocoder.yudao.framework.security.config.SecurityProperties; -import cn.iocoder.yudao.framework.security.core.LoginUser; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import java.time.Duration; -import java.util.Date; - -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.addTime; - -/** - * 在线用户 Session Core Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -public class SysUserSessionCoreServiceImpl implements SysUserSessionCoreService { - - @Resource - private SysUserSessionCoreMapper userSessionCoreMapper; - - @Resource - private SysLoginUserCoreRedisDAO loginUserCoreRedisDAO; - - @Resource - private SecurityProperties securityProperties; - - @Override - public String createUserSession(LoginUser loginUser, String userIp, String userAgent) { - // ç”Ÿæˆ Session ç¼–å· - String sessionId = generateSessionId(); - // 写入 Redis 缓存 - loginUser.setUpdateTime(new Date()); - loginUserCoreRedisDAO.set(sessionId, loginUser); - // 写入 DB 中 - SysUserSessionDO userSession = SysUserSessionDO.builder().id(sessionId) - .userId(loginUser.getId()).userType(loginUser.getUserType()) - .userIp(userIp).userAgent(userAgent).username(loginUser.getUsername()) - .sessionTimeout(addTime(Duration.ofMillis(getSessionTimeoutMillis()))) - .build(); - userSessionCoreMapper.insert(userSession); - // 返回 Session ç¼–å· - return sessionId; - } - - @Override - public void refreshUserSession(String sessionId, LoginUser loginUser) { - // 写入 Redis 缓存 - loginUser.setUpdateTime(new Date()); - loginUserCoreRedisDAO.set(sessionId, loginUser); - // æ›´æ–° DB 中 - SysUserSessionDO updateObj = SysUserSessionDO.builder().id(sessionId).build(); - updateObj.setUsername(loginUser.getUsername()); - updateObj.setUpdateTime(new Date()); - updateObj.setSessionTimeout(addTime(Duration.ofMillis(getSessionTimeoutMillis()))); - userSessionCoreMapper.updateById(updateObj); - } - - @Override - public void deleteUserSession(String sessionId) { - // 删除 Redis 缓存 - loginUserCoreRedisDAO.delete(sessionId); - // 删除 DB 记录 - userSessionCoreMapper.deleteById(sessionId); - } - - @Override - public LoginUser getLoginUser(String sessionId) { - return loginUserCoreRedisDAO.get(sessionId); - } - - @Override - public Long getSessionTimeoutMillis() { - return securityProperties.getSessionTimeout().toMillis(); - } - - /** - * ç”Ÿæˆ Session ç¼–å·ï¼Œç›®å‰é‡‡ç”¨ UUID 算法 - * - * @return Session ç¼–å· - */ - private static String generateSessionId() { - return IdUtil.fastSimpleUUID(); - } - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dict/SysDictDataCoreService.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dict/SysDictDataCoreService.java deleted file mode 100644 index bcac11c59e..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dict/SysDictDataCoreService.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.dict; - -import cn.iocoder.yudao.framework.dict.core.service.DictDataFrameworkService; - -import java.util.Collection; - -/** - * å­—å…¸æ•°æ® Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface SysDictDataCoreService extends DictDataFrameworkService { - - /** - * åˆå§‹åŒ–字典数æ®çš„æœ¬åœ°ç¼“å­˜ - */ - void initLocalCache(); - - /** - * 校验字典数æ®ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: - * 1. 字典数æ®ä¸å­˜åœ¨ - * 2. 字典数æ®è¢«ç¦ç”¨ - * - * @param dictType 字典类型 - * @param values 字典数æ®å€¼çš„æ•°ç»„ - */ - void validDictDatas(String dictType, Collection values); - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dict/impl/SysDictDataCoreServiceImpl.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dict/impl/SysDictDataCoreServiceImpl.java deleted file mode 100644 index 328cac56b7..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dict/impl/SysDictDataCoreServiceImpl.java +++ /dev/null @@ -1,145 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.dict.impl; - -import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.coreservice.modules.system.convert.dict.SysDictDataCoreConvert; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.dict.SysDictDataCoreMapper; -import cn.iocoder.yudao.coreservice.modules.system.service.dict.SysDictDataCoreService; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; -import cn.iocoder.yudao.framework.dict.core.dto.DictDataRespDTO; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableTable; -import lombok.extern.slf4j.Slf4j; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Service; - -import javax.annotation.PostConstruct; -import javax.annotation.Resource; -import java.util.*; - -import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.DICT_DATA_NOT_ENABLE; -import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.DICT_DATA_NOT_EXISTS; -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; - -/** - * å­—å…¸æ•°æ® Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Slf4j -public class SysDictDataCoreServiceImpl implements SysDictDataCoreService { - - /** - * 定时执行 {@link #schedulePeriodicRefresh()} 的周期 - * 因为已ç»é€šè¿‡ Redis Pub/Sub 机制,所以频率ä¸éœ€è¦é«˜ - */ - private static final long SCHEDULER_PERIOD = 5 * 60 * 1000L; - - /** - * 字典数æ®ç¼“存,第二个 key 使用 label - * - * key1:字典类型 dictType - * key2:字典标签 label - */ - private ImmutableTable labelDictDataCache; - /** - * 字典数æ®ç¼“存,第二个 key 使用 value - * - * key1:字典类型 dictType - * key2:字典值 value - */ - private ImmutableTable valueDictDataCache; - /** - * 缓存字典数æ®çš„æœ€å¤§æ›´æ–°æ—¶é—´ï¼Œç”¨äºŽåŽç»­çš„增é‡è½®è¯¢ï¼Œåˆ¤æ–­æ˜¯å¦æœ‰æ›´æ–° - */ - private volatile Date maxUpdateTime; - - @Resource - private SysDictDataCoreMapper dictDataCoreMapper; - - @Override - @PostConstruct - public synchronized void initLocalCache() { - // 获å–字典数æ®åˆ—表,如果有更新 - List dataList = this.loadDictDataIfUpdate(maxUpdateTime); - if (CollUtil.isEmpty(dataList)) { - return; - } - - // 构建缓存 - ImmutableTable.Builder labelDictDataBuilder = ImmutableTable.builder(); - ImmutableTable.Builder valueDictDataBuilder = ImmutableTable.builder(); - dataList.forEach(dictData -> { - labelDictDataBuilder.put(dictData.getDictType(), dictData.getLabel(), dictData); - valueDictDataBuilder.put(dictData.getDictType(), dictData.getValue(), dictData); - }); - labelDictDataCache = labelDictDataBuilder.build(); - valueDictDataCache = valueDictDataBuilder.build(); - assert dataList.size() > 0; // 断言,é¿å…告警 - maxUpdateTime = dataList.stream().max(Comparator.comparing(BaseDO::getUpdateTime)).get().getUpdateTime(); - log.info("[initLocalCache][缓存字典数æ®ï¼Œæ•°é‡ä¸º:{}]", dataList.size()); - } - - @Scheduled(fixedDelay = SCHEDULER_PERIOD, initialDelay = SCHEDULER_PERIOD) - public void schedulePeriodicRefresh() { - initLocalCache(); - } - - /** - * 如果字典数æ®å‘生å˜åŒ–,从数æ®åº“ä¸­èŽ·å–æœ€æ–°çš„å…¨é‡å­—典数æ®ã€‚ - * 如果未å‘生å˜åŒ–,则返回空 - * - * @param maxUpdateTime 当å‰å­—典数æ®çš„æœ€å¤§æ›´æ–°æ—¶é—´ - * @return 字典数æ®åˆ—表 - */ - private List loadDictDataIfUpdate(Date maxUpdateTime) { - // 第一步,判断是å¦è¦æ›´æ–°ã€‚ - if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB ä¸€å®šæœ‰æ–°æ•°æ® - log.info("[loadDictDataIfUpdate][首次加载全é‡å­—典数æ®]"); - } else { // 判断数æ®åº“ä¸­æ˜¯å¦æœ‰æ›´æ–°çš„å­—å…¸æ•°æ® - if (!dictDataCoreMapper.selectExistsByUpdateTimeAfter(maxUpdateTime)) { - return null; - } - log.info("[loadDictDataIfUpdate][增é‡åŠ è½½å…¨é‡å­—典数æ®]"); - } - // 第二步,如果有更新,则从数æ®åº“åŠ è½½æ‰€æœ‰å­—å…¸æ•°æ® - return dictDataCoreMapper.selectList(); - } - - @Override - public DictDataRespDTO getDictDataFromCache(String type, String value) { - return SysDictDataCoreConvert.INSTANCE.convert02(valueDictDataCache.get(type, value)); - } - - @Override - public DictDataRespDTO parseDictDataFromCache(String type, String label) { - return SysDictDataCoreConvert.INSTANCE.convert02(labelDictDataCache.get(type, label)); - } - - @Override - public List listDictDatasFromCache(String type) { - return SysDictDataCoreConvert.INSTANCE.convertList03(labelDictDataCache.row(type).values()); - } - - @Override - public void validDictDatas(String dictType, Collection values) { - if (CollUtil.isEmpty(values)) { - return; - } - ImmutableMap dictDataMap = valueDictDataCache.row(dictType); - // 校验 - values.forEach(value -> { - SysDictDataDO dictData = dictDataMap.get(value); - if (dictData == null) { - throw exception(DICT_DATA_NOT_EXISTS); - } - if (!CommonStatusEnum.ENABLE.getStatus().equals(dictData.getStatus())) { - throw exception(DICT_DATA_NOT_ENABLE, dictData.getLabel()); - } - }); - } - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/logger/SysLoginLogCoreService.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/logger/SysLoginLogCoreService.java deleted file mode 100644 index decc2739e8..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/logger/SysLoginLogCoreService.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.logger; - -import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLogCreateReqDTO; - -/** - * 登录日志 Core Service æŽ¥å£ - */ -public interface SysLoginLogCoreService { - - /** - * 创建登录日志 - * - * @param reqDTO æ—¥å¿—ä¿¡æ¯ - */ - void createLoginLog(SysLoginLogCreateReqDTO reqDTO); - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/logger/impl/SysLoginLogCoreServiceImpl.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/logger/impl/SysLoginLogCoreServiceImpl.java deleted file mode 100644 index 7c866e8d66..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/logger/impl/SysLoginLogCoreServiceImpl.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.logger.impl; - -import cn.iocoder.yudao.coreservice.modules.system.convert.logger.SysLoginLogCoreConvert; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.logger.SysLoginLogCoreMapper; -import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLogCreateReqDTO; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; - -/** - * 登录日志 Service Core 实现 - * - * @author èŠ‹é“æºç  - */ -@Service -public class SysLoginLogCoreServiceImpl implements SysLoginLogCoreService { - - @Resource - private SysLoginLogCoreMapper loginLogMapper; - - @Override - public void createLoginLog(SysLoginLogCreateReqDTO reqDTO) { - SysLoginLogDO loginLog = SysLoginLogCoreConvert.INSTANCE.convert(reqDTO); - // æ’å…¥ - loginLogMapper.insert(loginLog); - } - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsLogCoreService.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsLogCoreService.java deleted file mode 100644 index 02a8c26960..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsLogCoreService.java +++ /dev/null @@ -1,56 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.sms; - -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; - -import java.util.Date; -import java.util.Map; - -/** - * 短信日志 Core Service æŽ¥å£ - * - * @author zzf - * @date 13:48 2021/3/2 - */ -public interface SysSmsLogCoreService { - - /** - * 创建短信日志 - * - * @param mobile æ‰‹æœºå· - * @param userId ç”¨æˆ·ç¼–å· - * @param userType 用户类型 - * @param isSend 是å¦å‘é€ - * @param template çŸ­ä¿¡æ¨¡æ¿ - * @param templateContent 短信内容 - * @param templateParams çŸ­ä¿¡å‚æ•° - * @return å‘逿—¥å¿—ç¼–å· - */ - Long createSmsLog(String mobile, Long userId, Integer userType, Boolean isSend, - SysSmsTemplateDO template, String templateContent, Map templateParams); - - /** - * 更新日志的å‘é€ç»“æžœ - * - * @param id æ—¥å¿—ç¼–å· - * @param sendCode å‘é€ç»“æžœçš„ç¼–ç  - * @param sendMsg å‘é€ç»“果的æç¤º - * @param apiSendCode 短信 API å‘é€ç»“æžœçš„ç¼–ç  - * @param apiSendMsg 短信 API å‘é€å¤±è´¥çš„æç¤º - * @param apiRequestId 短信 API å‘é€è¿”回的唯一请求 ID - * @param apiSerialNo 短信 API å‘é€è¿”回的åºå· - */ - void updateSmsSendResult(Long id, Integer sendCode, String sendMsg, - String apiSendCode, String apiSendMsg, String apiRequestId, String apiSerialNo); - - /** - * 更新日志的接收结果 - * - * @param id æ—¥å¿—ç¼–å· - * @param success æ˜¯å¦æŽ¥æ”¶æˆåŠŸ - * @param receiveTime 用户接收时间 - * @param apiReceiveCode API æŽ¥æ”¶ç»“æžœçš„ç¼–ç  - * @param apiReceiveMsg API 接收结果的说明 - */ - void updateSmsReceiveResult(Long id, Boolean success, Date receiveTime, String apiReceiveCode, String apiReceiveMsg); - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsTemplateCoreService.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsTemplateCoreService.java deleted file mode 100644 index 9a3a16099f..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsTemplateCoreService.java +++ /dev/null @@ -1,36 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.sms; - -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; - -import java.util.Map; - -/** - * çŸ­ä¿¡æ¨¡æ¿ Core Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface SysSmsTemplateCoreService { - - /** - * åˆå§‹åŒ–短信模æ¿çš„æœ¬åœ°ç¼“å­˜ - */ - void initLocalCache(); - - /** - * 获得短信模æ¿ï¼Œä»Žç¼“存中 - * - * @param code 模æ¿ç¼–ç  - * @return çŸ­ä¿¡æ¨¡æ¿ - */ - SysSmsTemplateDO getSmsTemplateByCodeFromCache(String code); - - /** - * æ ¼å¼åŒ–短信内容 - * - * @param content 短信模æ¿çš„内容 - * @param params å†…å®¹çš„å‚æ•° - * @return æ ¼å¼åŒ–åŽçš„内容 - */ - String formatSmsTemplateContent(String content, Map params); - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/impl/SysSmsLogCoreServiceImpl.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/impl/SysSmsLogCoreServiceImpl.java deleted file mode 100644 index de318ed62a..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/impl/SysSmsLogCoreServiceImpl.java +++ /dev/null @@ -1,72 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.sms.impl; - -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.sms.SysSmsLogCoreMapper; -import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsReceiveStatusEnum; -import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsSendStatusEnum; -import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsLogCoreService; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import java.util.Date; -import java.util.Map; -import java.util.Objects; - -/** - * 短信日志 Core Service 实现类 - * - * @author zzf - * @date 2021/1/25 9:25 - */ -@Slf4j -@Service -public class SysSmsLogCoreServiceImpl implements SysSmsLogCoreService { - - @Resource - private SysSmsLogCoreMapper smsLogCoreMapper; - - @Override - public Long createSmsLog(String mobile, Long userId, Integer userType, Boolean isSend, - SysSmsTemplateDO template, String templateContent, Map templateParams) { - SysSmsLogDO.SysSmsLogDOBuilder logBuilder = SysSmsLogDO.builder(); - // æ ¹æ®æ˜¯å¦è¦å‘é€ï¼Œè®¾ç½®çŠ¶æ€ - logBuilder.sendStatus(Objects.equals(isSend, true) ? SysSmsSendStatusEnum.INIT.getStatus() - : SysSmsSendStatusEnum.IGNORE.getStatus()); - // 设置手机相关字段 - logBuilder.mobile(mobile).userId(userId).userType(userType); - // 设置模æ¿ç›¸å…³å­—段 - logBuilder.templateId(template.getId()).templateCode(template.getCode()).templateType(template.getType()); - logBuilder.templateContent(templateContent).templateParams(templateParams).apiTemplateId(template.getApiTemplateId()); - // 设置渠é“相关字段 - logBuilder.channelId(template.getChannelId()).channelCode(template.getChannelCode()); - // 设置接收相关字段 - logBuilder.receiveStatus(SysSmsReceiveStatusEnum.INIT.getStatus()); - - // æ’入数æ®åº“ - SysSmsLogDO logDO = logBuilder.build(); - smsLogCoreMapper.insert(logDO); - return logDO.getId(); - } - - @Override - public void updateSmsSendResult(Long id, Integer sendCode, String sendMsg, - String apiSendCode, String apiSendMsg, String apiRequestId, String apiSerialNo) { - SysSmsSendStatusEnum sendStatus = CommonResult.isSuccess(sendCode) ? SysSmsSendStatusEnum.SUCCESS - : SysSmsSendStatusEnum.FAILURE; - smsLogCoreMapper.updateById(SysSmsLogDO.builder().id(id).sendStatus(sendStatus.getStatus()).sendTime(new Date()) - .sendCode(sendCode).sendMsg(sendMsg).apiSendCode(apiSendCode).apiSendMsg(apiSendMsg) - .apiRequestId(apiRequestId).apiSerialNo(apiSerialNo).build()); - } - - @Override - public void updateSmsReceiveResult(Long id, Boolean success, Date receiveTime, String apiReceiveCode, String apiReceiveMsg) { - SysSmsReceiveStatusEnum receiveStatus = Objects.equals(success, true) ? SysSmsReceiveStatusEnum.SUCCESS - : SysSmsReceiveStatusEnum.FAILURE; - smsLogCoreMapper.updateById(SysSmsLogDO.builder().id(id).receiveStatus(receiveStatus.getStatus()).receiveTime(receiveTime) - .apiReceiveCode(apiReceiveCode).apiReceiveMsg(apiReceiveMsg).build()); - } - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/impl/SysSmsTemplateCoreServiceImpl.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/impl/SysSmsTemplateCoreServiceImpl.java deleted file mode 100644 index aa1a28b388..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/impl/SysSmsTemplateCoreServiceImpl.java +++ /dev/null @@ -1,105 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.sms.impl; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.sms.SysSmsTemplateCoreMapper; -import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsTemplateCoreService; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import com.google.common.collect.ImmutableMap; -import lombok.extern.slf4j.Slf4j; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Service; - -import javax.annotation.PostConstruct; -import javax.annotation.Resource; -import java.util.Comparator; -import java.util.Date; -import java.util.List; -import java.util.Map; - -/** - * çŸ­ä¿¡æ¨¡æ¿ Core Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -@Service -@Slf4j -public class SysSmsTemplateCoreServiceImpl implements SysSmsTemplateCoreService { - - /** - * 定时执行 {@link #schedulePeriodicRefresh()} 的周期 - * 因为已ç»é€šè¿‡ Redis Pub/Sub 机制,所以频率ä¸éœ€è¦é«˜ - */ - private static final long SCHEDULER_PERIOD = 5 * 60 * 1000L; - - /** - * 短信模æ¿ç¼“å­˜ - * key:短信模æ¿ç¼–ç  {@link SysSmsTemplateDO#getCode()} - * - * 这里声明 volatile ä¿®é¥°çš„åŽŸå› æ˜¯ï¼Œæ¯æ¬¡åˆ·æ–°æ—¶ï¼Œç›´æŽ¥ä¿®æ”¹æŒ‡å‘ - */ - private volatile Map smsTemplateCache; - /** - * 缓存短信模æ¿çš„æœ€å¤§æ›´æ–°æ—¶é—´ï¼Œç”¨äºŽåŽç»­çš„增é‡è½®è¯¢ï¼Œåˆ¤æ–­æ˜¯å¦æœ‰æ›´æ–° - */ - private volatile Date maxUpdateTime; - - @Resource - private SysSmsTemplateCoreMapper smsTemplateCoreMapper; - - @Override - @PostConstruct - public void initLocalCache() { - // 获å–短信模æ¿åˆ—表,如果有更新 - List smsTemplateList = this.loadSmsTemplateIfUpdate(maxUpdateTime); - if (CollUtil.isEmpty(smsTemplateList)) { - return; - } - - // 写入缓存 - ImmutableMap.Builder builder = ImmutableMap.builder(); - smsTemplateList.forEach(sysSmsTemplateDO -> builder.put(sysSmsTemplateDO.getCode(), sysSmsTemplateDO)); - smsTemplateCache = builder.build(); - assert smsTemplateList.size() > 0; // 断言,é¿å…告警 - maxUpdateTime = smsTemplateList.stream().max(Comparator.comparing(BaseDO::getUpdateTime)).get().getUpdateTime(); - log.info("[initLocalCache][åˆå§‹åŒ– SmsTemplate æ•°é‡ä¸º {}]", smsTemplateList.size()); - } - - /** - * 如果短信模æ¿å‘生å˜åŒ–,从数æ®åº“ä¸­èŽ·å–æœ€æ–°çš„å…¨é‡çŸ­ä¿¡æ¨¡æ¿ã€‚ - * 如果未å‘生å˜åŒ–,则返回空 - * - * @param maxUpdateTime 当å‰çŸ­ä¿¡æ¨¡æ¿çš„æœ€å¤§æ›´æ–°æ—¶é—´ - * @return 短信模æ¿åˆ—表 - */ - private List loadSmsTemplateIfUpdate(Date maxUpdateTime) { - // 第一步,判断是å¦è¦æ›´æ–°ã€‚ - if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB ä¸€å®šæœ‰æ–°æ•°æ® - log.info("[loadSmsTemplateIfUpdate][首次加载全é‡çŸ­ä¿¡æ¨¡æ¿]"); - } else { // 判断数æ®åº“ä¸­æ˜¯å¦æœ‰æ›´æ–°çš„çŸ­ä¿¡æ¨¡æ¿ - if (smsTemplateCoreMapper.selectExistsByUpdateTimeAfter(maxUpdateTime) == null) { - return null; - } - log.info("[loadSmsTemplateIfUpdate][增é‡åŠ è½½å…¨é‡çŸ­ä¿¡æ¨¡æ¿]"); - } - // 第二步,如果有更新,则从数æ®åº“åŠ è½½æ‰€æœ‰çŸ­ä¿¡æ¨¡æ¿ - return smsTemplateCoreMapper.selectList(); - } - - @Scheduled(fixedDelay = SCHEDULER_PERIOD, initialDelay = SCHEDULER_PERIOD) - public void schedulePeriodicRefresh() { - initLocalCache(); - } - - @Override - public SysSmsTemplateDO getSmsTemplateByCodeFromCache(String code) { - return smsTemplateCache.get(code); - } - - @Override - public String formatSmsTemplateContent(String content, Map params) { - return StrUtil.format(content, params); - } - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/user/SysUserCoreService.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/user/SysUserCoreService.java deleted file mode 100644 index c86e7a84ba..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/user/SysUserCoreService.java +++ /dev/null @@ -1,70 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.user; - -import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; - -import java.util.*; - -/** - * åŽå°ç”¨æˆ· Service Core æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface SysUserCoreService { - - /** - * 通过用户 ID 查询用户 - * - * @param id 用户ID - * @return ç”¨æˆ·å¯¹è±¡ä¿¡æ¯ - */ - SysUserDO getUser(Long id); - - /** - * 获得指定部门的用户数组 - * - * @param deptIds 部门数组 - * @return 用户数组 - */ - List getUsersByDeptIds(Collection deptIds); - - /** - * 获得指定岗ä½çš„用户数组 - * - * @param postIds 岗使•°ç»„ - * @return 用户数组 - */ - List getUsersByPostIds(Collection postIds); - - /** - * 获得用户列表 - * - * @param ids ç”¨æˆ·ç¼–å·æ•°ç»„ - * @return 用户列表 - */ - List getUsers(Collection ids); - - /** - * æ ¡éªŒç”¨æˆ·ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: - * 1. 用户编å·ä¸å­˜åœ¨ - * 2. 用户被ç¦ç”¨ - * - * @param ids ç”¨æˆ·ç¼–å·æ•°ç»„ - */ - void validUsers(Set ids); - - /** - * 获得用户 Map - * - * @param ids ç”¨æˆ·ç¼–å·æ•°ç»„ - * @return 用户 Map - */ - default Map getUserMap(Collection ids) { - if (CollUtil.isEmpty(ids)) { - return new HashMap<>(); - } - return CollectionUtils.convertMap(getUsers(ids), SysUserDO::getId); - } - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/user/impl/SysUserCoreServiceImpl.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/user/impl/SysUserCoreServiceImpl.java deleted file mode 100644 index c2b5b054d3..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/user/impl/SysUserCoreServiceImpl.java +++ /dev/null @@ -1,82 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.user.impl; - -import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.user.SysUserCoreMapper; -import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import java.util.*; - -import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.USER_IS_DISABLE; -import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.USER_NOT_EXISTS; -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; - -/** - * åŽå°ç”¨æˆ· Service Core 实现 - * - * @author èŠ‹é“æºç  - */ -@Service -public class SysUserCoreServiceImpl implements SysUserCoreService { - - @Resource - private SysUserCoreMapper userCoreMapper; - - @Override - public SysUserDO getUser(Long id) { - return userCoreMapper.selectById(id); - } - - @Override - public List getUsersByDeptIds(Collection deptIds) { - if (CollUtil.isEmpty(deptIds)) { - return Collections.emptyList(); - } - return userCoreMapper.selectListByDeptIds(deptIds); - } - - @Override - public List getUsersByPostIds(Collection postIds) { - if (CollUtil.isEmpty(postIds)) { - return Collections.emptyList(); - } - // 过滤ä¸ç¬¦åˆæ¡ä»¶çš„ - // TODO 芋艿:暂时åªèƒ½å†…存过滤。解决方案:1ã€æ–°å»ºä¸€ä¸ªå…³è”表;2ã€åŸºäºŽ where + 函数;3ã€json å­—æ®µï¼Œé€‚åˆ mysql 8+ 版本 - List users = userCoreMapper.selectList(); - users.removeIf(user -> !CollUtil.containsAny(user.getPostIds(), postIds)); - return users; - } - - @Override - public List getUsers(Collection ids) { - if (CollUtil.isEmpty(ids)) { - return Collections.emptyList(); - } - return userCoreMapper.selectBatchIds(ids); - } - - @Override - public void validUsers(Set ids) { - if (CollUtil.isEmpty(ids)) { - return; - } - // 获得岗ä½ä¿¡æ¯ - List users = userCoreMapper.selectBatchIds(ids); - Map userMap = CollectionUtils.convertMap(users, SysUserDO::getId); - // 校验 - ids.forEach(id -> { - SysUserDO user = userMap.get(id); - if (user == null) { - throw exception(USER_NOT_EXISTS); - } - if (!CommonStatusEnum.ENABLE.getStatus().equals(user.getStatus())) { - throw exception(USER_IS_DISABLE, user.getNickname()); - } - }); - } - -} diff --git a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/InfFileCoreServiceTest.java b/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/InfFileCoreServiceTest.java index ce3d693959..232ccf5f44 100644 --- a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/InfFileCoreServiceTest.java +++ b/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/InfFileCoreServiceTest.java @@ -12,8 +12,7 @@ import org.springframework.context.annotation.Import; import javax.annotation.Resource; -import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.FILE_NOT_EXISTS; -import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.FILE_PATH_EXISTS; +import static cn.iocoder.yudao.coreservice.modules.infra.enums.SysErrorCodeConstants.*; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomString; diff --git a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/auth/SysUserSessionCoreServiceTest.java b/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/auth/SysUserSessionCoreServiceTest.java deleted file mode 100644 index d8aada3588..0000000000 --- a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/auth/SysUserSessionCoreServiceTest.java +++ /dev/null @@ -1,125 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.auth; - -import cn.iocoder.yudao.coreservice.BaseDbAndRedisUnitTest; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.auth.SysUserSessionCoreMapper; -import cn.iocoder.yudao.coreservice.modules.system.dal.redis.auth.SysLoginUserCoreRedisDAO; -import cn.iocoder.yudao.coreservice.modules.system.service.auth.impl.SysUserSessionCoreServiceImpl; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.security.config.SecurityProperties; -import cn.iocoder.yudao.framework.security.core.LoginUser; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; -import java.time.Duration; -import java.util.Date; - -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.addTime; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.when; - -@Import({SysUserSessionCoreServiceImpl.class, SysLoginUserCoreRedisDAO.class}) -public class SysUserSessionCoreServiceTest extends BaseDbAndRedisUnitTest { - - @Resource - private SysUserSessionCoreServiceImpl userSessionCoreService; - - @Resource - private SysUserSessionCoreMapper userSessionCoreMapper; - @Resource - private SysLoginUserCoreRedisDAO loginUserCoreRedisDAO; - - @MockBean - private SecurityProperties securityProperties; - - @Test - public void testCreateUserSession_success() { - // 准备傿•° - String userIp = randomString(); - String userAgent = randomString(); - LoginUser loginUser = randomPojo(LoginUser.class, o -> { - o.setUserType(randomEle(UserTypeEnum.values()).getValue()); - o.setTenantId(0L); // 租户设置为 0,因为暂未å¯ç”¨å¤šç§Ÿæˆ·ç»„ä»¶ - }); - // mock 方法 - when(securityProperties.getSessionTimeout()).thenReturn(Duration.ofDays(1)); - - // 调用 - String sessionId = userSessionCoreService.createUserSession(loginUser, userIp, userAgent); - // 校验 SysUserSessionDO 记录 - SysUserSessionDO userSessionDO = userSessionCoreMapper.selectById(sessionId); - assertPojoEquals(loginUser, userSessionDO, "id", "updateTime"); - assertEquals(sessionId, userSessionDO.getId()); - assertEquals(userIp, userSessionDO.getUserIp()); - assertEquals(userAgent, userSessionDO.getUserAgent()); - // 校验 LoginUser 缓存 - LoginUser redisLoginUser = loginUserCoreRedisDAO.get(sessionId); - assertPojoEquals(loginUser, redisLoginUser, "username", "password"); - } - - @Test - public void testCreateRefreshUserSession_success() { - // 准备傿•° - String sessionId = randomString(); - String userIp = randomString(); - String userAgent = randomString(); - long timeLong = randomLongId(); - String userName = randomString(); - Date date = randomDate(); - LoginUser loginUser = randomPojo(LoginUser.class, o -> o.setUserType(randomEle(UserTypeEnum.values()).getValue())); - // mock 方法 - when(securityProperties.getSessionTimeout()).thenReturn(Duration.ofDays(1)); - // mock æ•°æ® - loginUser.setUpdateTime(date); - loginUserCoreRedisDAO.set(sessionId, loginUser); - SysUserSessionDO userSession = SysUserSessionDO.builder().id(sessionId) - .userId(loginUser.getId()).userType(loginUser.getUserType()) - .userIp(userIp).userAgent(userAgent).username(userName) - .sessionTimeout(addTime(Duration.ofMillis(timeLong))) - .build(); - userSessionCoreMapper.insert(userSession); - - // 调用 - userSessionCoreService.refreshUserSession(sessionId, loginUser); - // 校验 LoginUser 缓存 - LoginUser redisLoginUser = loginUserCoreRedisDAO.get(sessionId); - assertNotEquals(redisLoginUser.getUpdateTime(), date); - // 校验 SysUserSessionDO 记录 - SysUserSessionDO updateDO = userSessionCoreMapper.selectById(sessionId); - assertEquals(updateDO.getUsername(), loginUser.getUsername()); - assertNotEquals(updateDO.getUpdateTime(), userSession.getUpdateTime()); - assertNotEquals(updateDO.getSessionTimeout(), addTime(Duration.ofMillis(timeLong))); - } - - @Test - public void testDeleteUserSession_success() { - // 准备傿•° - String sessionId = randomString(); - String userIp = randomString(); - String userAgent = randomString(); - Long timeLong = randomLongId(); - LoginUser loginUser = randomPojo(LoginUser.class, o -> o.setUserType(randomEle(UserTypeEnum.values()).getValue())); - // mock 存入 Redis - when(securityProperties.getSessionTimeout()).thenReturn(Duration.ofDays(1)); - // mock æ•°æ® - loginUserCoreRedisDAO.set(sessionId, loginUser); - SysUserSessionDO userSession = SysUserSessionDO.builder().id(sessionId) - .userId(loginUser.getId()).userType(loginUser.getUserType()) - .userIp(userIp).userAgent(userAgent).username(loginUser.getUsername()) - .sessionTimeout(addTime(Duration.ofMillis(timeLong))) - .build(); - userSessionCoreMapper.insert(userSession); - - // 调用 - userSessionCoreService.deleteUserSession(sessionId); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(loginUserCoreRedisDAO.get(sessionId)); - assertNull(userSessionCoreMapper.selectById(sessionId)); - } - -} diff --git a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/dict/SysDictDataCoreServiceTest.java b/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/dict/SysDictDataCoreServiceTest.java deleted file mode 100644 index 410c592f59..0000000000 --- a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/dict/SysDictDataCoreServiceTest.java +++ /dev/null @@ -1,78 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.dict; - -import cn.iocoder.yudao.coreservice.BaseDbUnitTest; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.dict.SysDictDataCoreMapper; -import cn.iocoder.yudao.coreservice.modules.system.service.dict.impl.SysDictDataCoreServiceImpl; -import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; -import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; -import com.google.common.collect.ImmutableTable; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; -import java.util.Date; -import java.util.function.Consumer; - -import static cn.hutool.core.bean.BeanUtil.getFieldValue; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomCommonStatus; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static org.junit.jupiter.api.Assertions.assertEquals; - -/** -* {@link SysDictDataCoreServiceImpl} çš„å•元测试类 -* -* @author èŠ‹é“æºç  -*/ -@Import(SysDictDataCoreServiceImpl.class) -public class SysDictDataCoreServiceTest extends BaseDbUnitTest { - - @Resource - private SysDictDataCoreServiceImpl dictDataCoreService; - - @Resource - private SysDictDataCoreMapper dictDataMapper; - - /** - * 测试加载到新的字典数æ®çš„æƒ…况 - */ - @Test - @SuppressWarnings("unchecked") - public void testInitLocalCache() { - // mock æ•°æ® - SysDictDataDO dictData01 = randomDictDataDO(); - dictDataMapper.insert(dictData01); - SysDictDataDO dictData02 = randomDictDataDO(); - dictDataMapper.insert(dictData02); - - // 调用 - dictDataCoreService.initLocalCache(); - // 断言 labelDictDataCache 缓存 - ImmutableTable labelDictDataCache = - (ImmutableTable) getFieldValue(dictDataCoreService, "labelDictDataCache"); - assertEquals(2, labelDictDataCache.size()); - assertPojoEquals(dictData01, labelDictDataCache.get(dictData01.getDictType(), dictData01.getLabel())); - assertPojoEquals(dictData02, labelDictDataCache.get(dictData02.getDictType(), dictData02.getLabel())); - // 断言 valueDictDataCache 缓存 - ImmutableTable valueDictDataCache = - (ImmutableTable) getFieldValue(dictDataCoreService, "valueDictDataCache"); - assertEquals(2, valueDictDataCache.size()); - assertPojoEquals(dictData01, valueDictDataCache.get(dictData01.getDictType(), dictData01.getValue())); - assertPojoEquals(dictData02, valueDictDataCache.get(dictData02.getDictType(), dictData02.getValue())); - // 断言 maxUpdateTime 缓存 - Date maxUpdateTime = (Date) getFieldValue(dictDataCoreService, "maxUpdateTime"); - assertEquals(ObjectUtils.max(dictData01.getUpdateTime(), dictData02.getUpdateTime()), maxUpdateTime); - } - - // ========== éšæœºå¯¹è±¡ ========== - - @SafeVarargs - private static SysDictDataDO randomDictDataDO(Consumer... consumers) { - Consumer consumer = (o) -> { - o.setStatus(randomCommonStatus()); // ä¿è¯ status 的范围 - }; - return randomPojo(SysDictDataDO.class, ArrayUtils.append(consumer, consumers)); - } - -} diff --git a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/logger/SysLoginLogServiceImplTest.java b/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/logger/SysLoginLogServiceImplTest.java deleted file mode 100644 index 1da56c2644..0000000000 --- a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/logger/SysLoginLogServiceImplTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.logger; - -import cn.iocoder.yudao.coreservice.BaseDbUnitTest; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.logger.SysLoginLogCoreMapper; -import cn.iocoder.yudao.coreservice.modules.system.enums.logger.SysLoginLogTypeEnum; -import cn.iocoder.yudao.coreservice.modules.system.enums.logger.SysLoginResultEnum; -import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLogCreateReqDTO; -import cn.iocoder.yudao.coreservice.modules.system.service.logger.impl.SysLoginLogCoreServiceImpl; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils; -import cn.iocoder.yudao.framework.test.core.util.RandomUtils; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; - -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; - -@Import(SysLoginLogCoreServiceImpl.class) -public class SysLoginLogServiceImplTest extends BaseDbUnitTest { - - @Resource - private SysLoginLogCoreServiceImpl loginLogCoreService; - - @Resource - private SysLoginLogCoreMapper loginLogCoreMapper; - - @Test - public void testCreateLoginLog() { - SysLoginLogCreateReqDTO reqDTO = RandomUtils.randomPojo(SysLoginLogCreateReqDTO.class, vo -> { - // æŒ‡å®šéšæœºçš„范围,é¿å…超出范围入库失败 - vo.setUserType(randomEle(UserTypeEnum.values()).getValue()); - vo.setLogType(randomEle(SysLoginLogTypeEnum.values()).getType()); - vo.setResult(randomEle(SysLoginResultEnum.values()).getResult()); - vo.setTraceId(TracerUtils.getTraceId()); - }); - - // 调用 - loginLogCoreService.createLoginLog(reqDTO); - // 断言,忽略基本字段 - SysLoginLogDO sysLoginLogDO = loginLogCoreMapper.selectOne(null); - assertPojoEquals(reqDTO, sysLoginLogDO); - } - -} diff --git a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/package-info.java b/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/package-info.java deleted file mode 100644 index 8b5f8b0109..0000000000 --- a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.system.service; diff --git a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsLogCoreServiceTest.java b/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsLogCoreServiceTest.java deleted file mode 100644 index 896f0c6d3e..0000000000 --- a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsLogCoreServiceTest.java +++ /dev/null @@ -1,149 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.sms; - -import cn.hutool.core.map.MapUtil; -import cn.iocoder.yudao.coreservice.BaseDbUnitTest; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.sms.SysSmsLogCoreMapper; -import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsReceiveStatusEnum; -import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsSendStatusEnum; -import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsTemplateTypeEnum; -import cn.iocoder.yudao.coreservice.modules.system.service.sms.impl.SysSmsLogCoreServiceImpl; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; -import java.util.Date; -import java.util.Map; -import java.util.function.Consumer; - -import static cn.hutool.core.util.RandomUtil.randomBoolean; -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -/** -* {@link SysSmsLogCoreServiceImpl} çš„å•元测试类 -* -* @author èŠ‹é“æºç  -*/ -@Import(SysSmsLogCoreServiceImpl.class) -public class SysSmsLogCoreServiceTest extends BaseDbUnitTest { - - @Resource - private SysSmsLogCoreServiceImpl smsLogCoreService; - - @Resource - private SysSmsLogCoreMapper smsLogCoreMapper; - - @Test - public void testCreateSmsLog() { - // 准备傿•° - String mobile = randomString(); - Long userId = randomLongId(); - Integer userType = randomEle(UserTypeEnum.values()).getValue(); - Boolean isSend = randomBoolean(); - SysSmsTemplateDO templateDO = randomPojo(SysSmsTemplateDO.class, - o -> o.setType(randomEle(SysSmsTemplateTypeEnum.values()).getType())); - String templateContent = randomString(); - Map templateParams = randomTemplateParams(); - // mock 方法 - - // 调用 - Long logId = smsLogCoreService.createSmsLog(mobile, userId, userType, isSend, - templateDO, templateContent, templateParams); - // 断言 - SysSmsLogDO logDO = smsLogCoreMapper.selectById(logId); - assertEquals(isSend ? SysSmsSendStatusEnum.INIT.getStatus() : SysSmsSendStatusEnum.IGNORE.getStatus(), - logDO.getSendStatus()); - assertEquals(mobile, logDO.getMobile()); - assertEquals(userType, logDO.getUserType()); - assertEquals(userId, logDO.getUserId()); - assertEquals(templateDO.getId(), logDO.getTemplateId()); - assertEquals(templateDO.getCode(), logDO.getTemplateCode()); - assertEquals(templateDO.getType(), logDO.getTemplateType()); - assertEquals(templateDO.getChannelId(), logDO.getChannelId()); - assertEquals(templateDO.getChannelCode(), logDO.getChannelCode()); - assertEquals(templateContent, logDO.getTemplateContent()); - assertEquals(templateParams, logDO.getTemplateParams()); - assertEquals(SysSmsReceiveStatusEnum.INIT.getStatus(), logDO.getReceiveStatus()); - } - - @Test - public void testUpdateSmsSendResult() { - // mock æ•°æ® - SysSmsLogDO dbSmsLog = randomSmsLogDO( - o -> o.setSendStatus(SysSmsSendStatusEnum.IGNORE.getStatus())); - smsLogCoreMapper.insert(dbSmsLog); - // 准备傿•° - Long id = dbSmsLog.getId(); - Integer sendCode = randomInteger(); - String sendMsg = randomString(); - String apiSendCode = randomString(); - String apiSendMsg = randomString(); - String apiRequestId = randomString(); - String apiSerialNo = randomString(); - - // 调用 - smsLogCoreService.updateSmsSendResult(id, sendCode, sendMsg, - apiSendCode, apiSendMsg, apiRequestId, apiSerialNo); - // 断言 - dbSmsLog = smsLogCoreMapper.selectById(id); - assertEquals(CommonResult.isSuccess(sendCode) ? SysSmsSendStatusEnum.SUCCESS.getStatus() - : SysSmsSendStatusEnum.FAILURE.getStatus(), dbSmsLog.getSendStatus()); - assertNotNull(dbSmsLog.getSendTime()); - assertEquals(sendMsg, dbSmsLog.getSendMsg()); - assertEquals(apiSendCode, dbSmsLog.getApiSendCode()); - assertEquals(apiSendMsg, dbSmsLog.getApiSendMsg()); - assertEquals(apiRequestId, dbSmsLog.getApiRequestId()); - assertEquals(apiSerialNo, dbSmsLog.getApiSerialNo()); - } - - @Test - public void testUpdateSmsReceiveResult() { - // mock æ•°æ® - SysSmsLogDO dbSmsLog = randomSmsLogDO( - o -> o.setReceiveStatus(SysSmsReceiveStatusEnum.INIT.getStatus())); - smsLogCoreMapper.insert(dbSmsLog); - // 准备傿•° - Long id = dbSmsLog.getId(); - Boolean success = randomBoolean(); - Date receiveTime = randomDate(); - String apiReceiveCode = randomString(); - String apiReceiveMsg = randomString(); - - // 调用 - smsLogCoreService.updateSmsReceiveResult(id, success, receiveTime, apiReceiveCode, apiReceiveMsg); - // 断言 - dbSmsLog = smsLogCoreMapper.selectById(id); - assertEquals(success ? SysSmsReceiveStatusEnum.SUCCESS.getStatus() - : SysSmsReceiveStatusEnum.FAILURE.getStatus(), dbSmsLog.getReceiveStatus()); - assertEquals(receiveTime, dbSmsLog.getReceiveTime()); - assertEquals(apiReceiveCode, dbSmsLog.getApiReceiveCode()); - assertEquals(apiReceiveMsg, dbSmsLog.getApiReceiveMsg()); - } - - // ========== éšæœºå¯¹è±¡ ========== - - @SafeVarargs - private static SysSmsLogDO randomSmsLogDO(Consumer... consumers) { - Consumer consumer = (o) -> { - o.setTemplateParams(randomTemplateParams()); - o.setTemplateType(randomEle(SysSmsTemplateTypeEnum.values()).getType()); // ä¿è¯ templateType 的范围 - o.setUserType(randomEle(UserTypeEnum.values()).getValue()); // ä¿è¯ userType 的范围 - o.setSendStatus(randomEle(SysSmsSendStatusEnum.values()).getStatus()); // ä¿è¯ sendStatus 的范围 - o.setReceiveStatus(randomEle(SysSmsReceiveStatusEnum.values()).getStatus()); // ä¿è¯ receiveStatus 的范围 - }; - return randomPojo(SysSmsLogDO.class, ArrayUtils.append(consumer, consumers)); - } - - - private static Map randomTemplateParams() { - return MapUtil.builder().put(randomString(), randomString()) - .put(randomString(), randomString()).build(); - } -} diff --git a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsTemplateServiceTest.java b/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsTemplateServiceTest.java deleted file mode 100644 index 1bcdb442de..0000000000 --- a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsTemplateServiceTest.java +++ /dev/null @@ -1,71 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.sms; - -import cn.iocoder.yudao.coreservice.BaseDbUnitTest; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.sms.SysSmsTemplateCoreMapper; -import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsTemplateTypeEnum; -import cn.iocoder.yudao.coreservice.modules.system.service.sms.impl.SysSmsTemplateCoreServiceImpl; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; -import java.util.Date; -import java.util.Map; -import java.util.function.Consumer; - -import static cn.hutool.core.bean.BeanUtil.getFieldValue; -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.max; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static org.junit.jupiter.api.Assertions.assertEquals; - -/** -* {@link SysSmsTemplateCoreServiceImpl} çš„å•元测试类 -* -* @author èŠ‹é“æºç  -*/ -@Import(SysSmsTemplateCoreServiceImpl.class) -public class SysSmsTemplateServiceTest extends BaseDbUnitTest { - - @Resource - private SysSmsTemplateCoreServiceImpl smsTemplateCoreService; - - @Resource - private SysSmsTemplateCoreMapper smsTemplateCoreMapper; - - @Test - @SuppressWarnings("unchecked") - void testInitLocalCache() { - // mock æ•°æ® - SysSmsTemplateDO smsTemplate01 = randomSmsTemplateDO(); - smsTemplateCoreMapper.insert(smsTemplate01); - SysSmsTemplateDO smsTemplate02 = randomSmsTemplateDO(); - smsTemplateCoreMapper.insert(smsTemplate02); - - // 调用 - smsTemplateCoreService.initLocalCache(); - // 断言 deptCache 缓存 - Map smsTemplateCache = (Map) getFieldValue(smsTemplateCoreService, "smsTemplateCache"); - assertEquals(2, smsTemplateCache.size()); - assertPojoEquals(smsTemplate01, smsTemplateCache.get(smsTemplate01.getCode())); - assertPojoEquals(smsTemplate02, smsTemplateCache.get(smsTemplate02.getCode())); - // 断言 maxUpdateTime 缓存 - Date maxUpdateTime = (Date) getFieldValue(smsTemplateCoreService, "maxUpdateTime"); - assertEquals(max(smsTemplate01.getUpdateTime(), smsTemplate02.getUpdateTime()), maxUpdateTime); - } - - // ========== éšæœºå¯¹è±¡ ========== - - @SafeVarargs - private static SysSmsTemplateDO randomSmsTemplateDO(Consumer... consumers) { - Consumer consumer = (o) -> { - o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 - o.setType(randomEle(SysSmsTemplateTypeEnum.values()).getType()); // ä¿è¯ type çš„ 范围 - }; - return randomPojo(SysSmsTemplateDO.class, ArrayUtils.append(consumer, consumers)); - } - -} diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/message/BpmMessageConvert.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/message/BpmMessageConvert.java index 7d7f1518fd..469424e67e 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/message/BpmMessageConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/message/BpmMessageConvert.java @@ -3,7 +3,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.convert.message; import cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO; import cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceRejectReqDTO; import cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.SysUserDO; import org.activiti.api.task.model.Task; import org.activiti.engine.runtime.ProcessInstance; import org.mapstruct.Mapper; diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java index e54e850b22..cd0839fe00 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java @@ -5,8 +5,8 @@ import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmP import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event.BpmProcessInstanceResultEvent; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.activiti.engine.history.HistoricProcessInstance; import org.activiti.engine.repository.ProcessDefinition; diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmTaskConvert.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmTaskConvert.java index 424ae25178..117d2c1cf8 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmTaskConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmTaskConvert.java @@ -4,8 +4,8 @@ import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.BpmTaskD import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.BpmTaskRespVO; import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.BpmTaskTodoPageItemRespVO; import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmTaskExtDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.number.NumberUtils; import org.activiti.engine.history.HistoricProcessInstance; diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/leave/BpmOALeaveDO.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/leave/BpmOALeaveDO.java index 53f8b7d753..f5ce1a91e7 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/leave/BpmOALeaveDO.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/leave/BpmOALeaveDO.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.leave; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.SysUserDO; import lombok.*; import java.util.*; import com.baomidou.mybatisplus.annotation.*; diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/message/BpmMessageEnum.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/message/BpmMessageEnum.java index 79afd41cb7..e95764a795 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/message/BpmMessageEnum.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/message/BpmMessageEnum.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.adminserver.modules.bpm.enums.message; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java index 2e1da6f4ab..e7da584058 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java @@ -7,9 +7,9 @@ import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.identity import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.listener.BpmTackActivitiEventListener; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; import cn.iocoder.yudao.coreservice.modules.bpm.api.group.BpmUserGroupServiceApi; -import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.permission.SysPermissionCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; +import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; +import cn.iocoder.yudao.module.system.service.permission.SysPermissionCoreService; +import cn.iocoder.yudao.module.system.service.user.SysUserCoreService; import org.activiti.api.runtime.shared.identity.UserGroupManager; import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer; import org.springframework.context.ApplicationEventPublisher; diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java index c426a23ee7..bc3d956912 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java @@ -3,9 +3,9 @@ package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavio import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; import cn.iocoder.yudao.coreservice.modules.bpm.api.group.BpmUserGroupServiceApi; -import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.permission.SysPermissionCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; +import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; +import cn.iocoder.yudao.module.system.service.permission.SysPermissionCoreService; +import cn.iocoder.yudao.module.system.service.user.SysUserCoreService; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.Setter; diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java index e2beba8e03..aa6cb1f131 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java @@ -9,11 +9,11 @@ import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; import cn.iocoder.yudao.coreservice.modules.bpm.api.group.BpmUserGroupServiceApi; import cn.iocoder.yudao.coreservice.modules.bpm.api.group.dto.BpmUserGroupDTO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.permission.SysPermissionCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; +import cn.iocoder.yudao.module.system.service.permission.SysPermissionCoreService; +import cn.iocoder.yudao.module.system.service.user.SysUserCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import com.google.common.annotations.VisibleForTesting; import lombok.Setter; diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderAbstractScript.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderAbstractScript.java index eeb8b40bd1..465be3b4a6 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderAbstractScript.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderAbstractScript.java @@ -2,17 +2,16 @@ package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavio import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; +import cn.iocoder.yudao.module.system.service.user.SysUserCoreService; import org.activiti.engine.impl.persistence.entity.TaskEntity; import org.springframework.util.Assert; import javax.annotation.Resource; import java.util.Set; -import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet; import static java.util.Collections.emptySet; /** diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java index dac572f1a1..2364339ed0 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java @@ -14,12 +14,12 @@ import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmModelServi import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; import cn.iocoder.yudao.coreservice.modules.bpm.api.group.BpmUserGroupServiceApi; -import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; -import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysPostCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.dict.SysDictDataCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.permission.SysRoleCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; +import cn.iocoder.yudao.module.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; +import cn.iocoder.yudao.module.system.service.dept.SysPostCoreService; +import cn.iocoder.yudao.module.system.service.dict.DictDataCoreService; +import cn.iocoder.yudao.module.system.service.permission.SysRoleCoreService; +import cn.iocoder.yudao.module.system.service.user.SysUserCoreService; import cn.iocoder.yudao.framework.activiti.core.util.ActivitiUtils; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; @@ -64,7 +64,7 @@ public class BpmTaskAssignRuleServiceImpl implements BpmTaskAssignRuleService { @Resource private BpmUserGroupServiceApi userGroupServiceApi; @Resource - private SysDictDataCoreService dictDataCoreService; + private DictDataCoreService dictDataCoreService; @Override public List getTaskAssignRuleListByProcessDefinitionId(String processDefinitionId, diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/impl/BpmMessageServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/impl/BpmMessageServiceImpl.java index c16fd476fb..1c8829876c 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/impl/BpmMessageServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/impl/BpmMessageServiceImpl.java @@ -5,7 +5,7 @@ import cn.iocoder.yudao.adminserver.modules.bpm.service.message.BpmMessageServic import cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO; import cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceRejectReqDTO; import cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO; -import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsCoreService; +import cn.iocoder.yudao.module.system.service.sms.SysSmsCoreService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java index 08d115b09b..df44537833 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java @@ -18,10 +18,10 @@ import cn.iocoder.yudao.adminserver.modules.bpm.service.message.BpmMessageServic import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; import cn.iocoder.yudao.adminserver.modules.bpm.service.task.dto.BpmProcessInstanceCreateReqDTO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; +import cn.iocoder.yudao.module.system.service.user.SysUserCoreService; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.number.NumberUtils; import lombok.extern.slf4j.Slf4j; diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java index dfac6455e8..5f97a2561a 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java @@ -12,10 +12,10 @@ import cn.iocoder.yudao.adminserver.modules.bpm.service.message.BpmMessageServic import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; +import cn.iocoder.yudao.module.system.service.user.SysUserCoreService; import cn.iocoder.yudao.framework.activiti.core.util.ActivitiUtils; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.number.NumberUtils; diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java index b9b9a1475b..082d9c9486 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java @@ -8,11 +8,11 @@ import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; import cn.iocoder.yudao.coreservice.modules.bpm.api.group.BpmUserGroupServiceApi; import cn.iocoder.yudao.coreservice.modules.bpm.api.group.dto.BpmUserGroupDTO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.permission.SysPermissionCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; +import cn.iocoder.yudao.module.system.service.permission.SysPermissionCoreService; +import cn.iocoder.yudao.module.system.service.user.SysUserCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2ScriptTest.java b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2ScriptTest.java index 2652524c0d..bc0ab21e6d 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2ScriptTest.java +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2ScriptTest.java @@ -1,9 +1,9 @@ package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.impl; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; +import cn.iocoder.yudao.module.system.service.user.SysUserCoreService; import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; import org.activiti.engine.impl.persistence.entity.ExecutionEntityImpl; import org.activiti.engine.impl.persistence.entity.TaskEntity; diff --git a/yudao-module-member/yudao-module-member-impl/pom.xml b/yudao-module-member/yudao-module-member-impl/pom.xml index 37a4e72864..d3b6bd7eed 100644 --- a/yudao-module-member/yudao-module-member-impl/pom.xml +++ b/yudao-module-member/yudao-module-member-impl/pom.xml @@ -24,6 +24,12 @@ ${revision} + + cn.iocoder.boot + yudao-module-system-api + ${revision} + + cn.iocoder.boot diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java index fd698e2022..e2924b82a6 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java @@ -1,11 +1,9 @@ package cn.iocoder.yudao.module.member.controller.app.auth; -import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialCoreService; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; -import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.module.member.controller.app.auth.vo.*; import cn.iocoder.yudao.module.member.service.auth.AuthService; import cn.iocoder.yudao.module.member.service.sms.SysSmsCodeService; @@ -15,7 +13,6 @@ import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialBindReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialBindReqVO.java index 55e23ac4c7..46ad9b6270 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialBindReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialBindReqVO.java @@ -1,6 +1,5 @@ package cn.iocoder.yudao.module.member.controller.app.auth.vo; -import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum; import cn.iocoder.yudao.framework.common.validation.InEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialLogin2ReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialLogin2ReqVO.java index d6bdaf009f..b9a854ec1d 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialLogin2ReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialLogin2ReqVO.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.member.controller.app.auth.vo; -import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum; import cn.iocoder.yudao.framework.common.validation.InEnum; +import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; @@ -22,7 +22,7 @@ import javax.validation.constraints.Pattern; public class AppAuthSocialLogin2ReqVO { @ApiModelProperty(value = "社交平å°çš„类型", required = true, example = "10", notes = "å‚è§ SysUserSocialTypeEnum 枚举值") - @InEnum(SysSocialTypeEnum.class) + @InEnum(SocialTypeEnum.class) @NotNull(message = "社交平å°çš„类型ä¸èƒ½ä¸ºç©º") private Integer type; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialLoginReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialLoginReqVO.java index b919bf275d..e262765a94 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialLoginReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialLoginReqVO.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.member.controller.app.auth.vo; -import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum; import cn.iocoder.yudao.framework.common.validation.InEnum; +import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; @@ -20,7 +20,7 @@ import javax.validation.constraints.NotNull; public class AppAuthSocialLoginReqVO { @ApiModelProperty(value = "社交平å°çš„类型", required = true, example = "10", notes = "å‚è§ SysUserSocialTypeEnum 枚举值") - @InEnum(SysSocialTypeEnum.class) + @InEnum(SocialTypeEnum.class) @NotNull(message = "社交平å°çš„类型ä¸èƒ½ä¸ºç©º") private Integer type; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialUnbindReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialUnbindReqVO.java index ac4308e6a5..245417820b 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialUnbindReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialUnbindReqVO.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.member.controller.app.auth.vo; -import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum; import cn.iocoder.yudao.framework.common.validation.InEnum; +import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; @@ -20,7 +20,7 @@ import javax.validation.constraints.NotNull; public class AppAuthSocialUnbindReqVO { @ApiModelProperty(value = "社交平å°çš„类型", required = true, example = "10", notes = "å‚è§ SysUserSocialTypeEnum 枚举值") - @InEnum(SysSocialTypeEnum.class) + @InEnum(SocialTypeEnum.class) @NotNull(message = "社交平å°çš„类型ä¸èƒ½ä¸ºç©º") private Integer type; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/AuthServiceImpl.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/AuthServiceImpl.java index dfeb7f040a..0cf21d1a9f 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/AuthServiceImpl.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/AuthServiceImpl.java @@ -2,13 +2,13 @@ package cn.iocoder.yudao.module.member.service.auth; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.social.SysSocialUserDO; -import cn.iocoder.yudao.coreservice.modules.system.enums.logger.SysLoginLogTypeEnum; -import cn.iocoder.yudao.coreservice.modules.system.enums.logger.SysLoginResultEnum; -import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLogCreateReqDTO; -import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialCoreService; +import cn.iocoder.yudao.module.system.dal.dataobject.social.SysSocialUserDO; +import cn.iocoder.yudao.module.system.enums.logger.SysLoginLogTypeEnum; +import cn.iocoder.yudao.module.system.enums.logger.SysLoginResultEnum; +import cn.iocoder.yudao.module.system.service.auth.SysUserSessionCoreService; +import cn.iocoder.yudao.module.system.service.logger.SysLoginLogCoreService; +import cn.iocoder.yudao.module.system.service.logger.dto.SysLoginLogCreateReqDTO; +import cn.iocoder.yudao.module.system.service.social.SysSocialCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils; @@ -29,7 +29,6 @@ import org.springframework.context.annotation.Lazy; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.DisabledException; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.userdetails.UserDetails; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/sms/SysSmsCodeServiceImpl.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/sms/SysSmsCodeServiceImpl.java index 41049656d0..b15f485686 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/sms/SysSmsCodeServiceImpl.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/sms/SysSmsCodeServiceImpl.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.member.service.sms; import cn.hutool.core.map.MapUtil; -import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsCoreService; +import cn.iocoder.yudao.module.system.service.sms.SysSmsCoreService; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.module.member.dal.dataobject.sms.SysSmsCodeDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO; diff --git a/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/auth/SysAuthServiceTest.java b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/auth/SysAuthServiceTest.java index aa38ab936c..93eb2878ea 100644 --- a/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/auth/SysAuthServiceTest.java +++ b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/auth/SysAuthServiceTest.java @@ -1,8 +1,8 @@ package cn.iocoder.yudao.module.member.service.auth; -import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialCoreService; +import cn.iocoder.yudao.module.system.service.auth.SysUserSessionCoreService; +import cn.iocoder.yudao.module.system.service.logger.SysLoginLogCoreService; +import cn.iocoder.yudao.module.system.service.social.SysSocialCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java similarity index 100% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java rename to yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/SysErrorCodeConstants.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/SysErrorCodeConstants.java similarity index 76% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/SysErrorCodeConstants.java rename to yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/SysErrorCodeConstants.java index e2dbf3417f..218ef6d312 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/SysErrorCodeConstants.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/SysErrorCodeConstants.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.system.enums; +package cn.iocoder.yudao.module.system.enums; import cn.iocoder.yudao.framework.common.exception.ErrorCode; @@ -14,10 +14,6 @@ public interface SysErrorCodeConstants { ErrorCode SMS_SEND_MOBILE_TEMPLATE_PARAM_MISS = new ErrorCode(1006000001, "模æ¿å‚æ•°({})缺失"); ErrorCode SMS_SEND_TEMPLATE_NOT_EXISTS = new ErrorCode(1006000000, "短信模æ¿ä¸å­˜åœ¨"); - // ========= 文件相关 1006001000================= - ErrorCode FILE_PATH_EXISTS = new ErrorCode(1006001000, "文件路径已存在"); - ErrorCode FILE_NOT_EXISTS = new ErrorCode(1006001002, "文件ä¸å­˜åœ¨"); - // ========== ç¤¾äº¤æ¨¡å— 1006002000 ========== ErrorCode SOCIAL_AUTH_FAILURE = new ErrorCode(1006002000, "社交授æƒå¤±è´¥ï¼ŒåŽŸå› æ˜¯ï¼š{}"); ErrorCode SOCIAL_UNBIND_NOT_SELF = new ErrorCode(1006002001, "社交解绑失败,éžå½“å‰ç”¨æˆ·ç»‘定"); @@ -34,10 +30,6 @@ public interface SysErrorCodeConstants { ErrorCode ROLE_NOT_EXISTS = new ErrorCode(1006005000, "角色ä¸å­˜åœ¨"); ErrorCode ROLE_IS_DISABLE = new ErrorCode(1006005001, "å字为ã€{}】的角色已被ç¦ç”¨"); - // ========== 字典类型 1006006000 ========== - ErrorCode DICT_DATA_NOT_EXISTS = new ErrorCode(1006006000, "当å‰å­—典数æ®ä¸å­˜åœ¨"); - ErrorCode DICT_DATA_NOT_ENABLE = new ErrorCode(1006006001, "字典数æ®({})ä¸å¤„于开å¯çжæ€ï¼Œä¸å…许选择"); - // ========== 岗使¨¡å— 1006007000 ========== ErrorCode POST_NOT_FOUND = new ErrorCode(1006007000, "当å‰å²—ä½ä¸å­˜åœ¨"); ErrorCode POST_NOT_ENABLE = new ErrorCode(1006007001, "å²—ä½({}) ä¸å¤„于开å¯çжæ€ï¼Œä¸å…许选择"); diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/social/SysSocialTypeEnum.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/social/SocialTypeEnum.java similarity index 89% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/social/SysSocialTypeEnum.java rename to yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/social/SocialTypeEnum.java index 3dba5bda03..8744c3509b 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/social/SysSocialTypeEnum.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/social/SocialTypeEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.system.enums.social; +package cn.iocoder.yudao.module.system.enums.social; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.ArrayUtil; @@ -16,7 +16,7 @@ import java.util.List; */ @Getter @AllArgsConstructor -public enum SysSocialTypeEnum implements IntArrayValuable { +public enum SocialTypeEnum implements IntArrayValuable { /** * Gitee @@ -51,7 +51,7 @@ public enum SysSocialTypeEnum implements IntArrayValuable { WECHAT_MINI_PROGRAM(33, "WECHAT_MINI_PROGRAM"), ; - public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(SysSocialTypeEnum::getType).toArray(); + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(SocialTypeEnum::getType).toArray(); public static final List WECHAT_ALL = ListUtil.toList(WECHAT_ENTERPRISE.type, WECHAT_MP.type, WECHAT_OPEN.type, WECHAT_MINI_PROGRAM.type); @@ -70,7 +70,7 @@ public enum SysSocialTypeEnum implements IntArrayValuable { return ARRAYS; } - public static SysSocialTypeEnum valueOfType(Integer type) { + public static SocialTypeEnum valueOfType(Integer type) { return ArrayUtil.firstMatch(o -> o.getType().equals(type), values()); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java index 6829c6ce95..6f72c3eb63 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java @@ -3,19 +3,19 @@ package cn.iocoder.yudao.module.system.controller.admin.auth; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.*; import cn.iocoder.yudao.module.system.convert.auth.AuthConvert; import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO; import cn.iocoder.yudao.module.system.enums.permission.MenuTypeEnum; import cn.iocoder.yudao.module.system.service.auth.AuthService; import cn.iocoder.yudao.module.system.service.permission.PermissionService; import cn.iocoder.yudao.module.system.service.permission.RoleService; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; +import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.system.service.social.SocialUserService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.collection.SetUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; +import cn.iocoder.yudao.module.system.service.user.UserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -45,14 +45,15 @@ public class AuthController { @Autowired @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") // AuthService 存在é‡å private AuthService authService; - @Resource - private SysUserCoreService userCoreService; + @Autowired + @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") // UserService 存在é‡å + private UserService userService; @Resource private RoleService roleService; @Resource private PermissionService permissionService; @Resource - private SysSocialCoreService socialCoreService; + private SocialUserService socialCoreService; @PostMapping("/login") @ApiOperation("使用账å·å¯†ç ç™»å½•") @@ -67,7 +68,7 @@ public class AuthController { @ApiOperation("获å–登录用户的æƒé™ä¿¡æ¯") public CommonResult getPermissionInfo() { // èŽ·å¾—ç”¨æˆ·ä¿¡æ¯ - SysUserDO user = userCoreService.getUser(getLoginUserId()); + UserDO user = userService.getUser(getLoginUserId()); if (user == null) { return null; } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/UserSessionController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/UserSessionController.java index 415e5b285e..eeca9ac8e7 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/UserSessionController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/UserSessionController.java @@ -3,19 +3,19 @@ package cn.iocoder.yudao.module.system.controller.admin.auth; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.session.UserSessionPageItemRespVO; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.session.UserSessionPageReqVO; import cn.iocoder.yudao.module.system.convert.auth.UserSessionConvert; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.module.system.service.auth.UserSessionService; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; +import cn.iocoder.yudao.module.system.dal.dataobject.auth.SysUserSessionDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.MapUtils; +import cn.iocoder.yudao.module.system.service.user.UserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -35,10 +35,9 @@ public class UserSessionController { @Resource private UserSessionService userSessionService; - @Resource - private SysUserSessionCoreService userSessionCoreService; - @Resource - private SysUserCoreService userCoreService; + @Autowired + @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") // UserService 存在é‡å + private UserService userService; @Resource private SysDeptCoreService deptCoreService; @@ -51,10 +50,10 @@ public class UserSessionController { PageResult pageResult = userSessionService.getUserSessionPage(reqVO); // 获得拼接需è¦çš„æ•°æ® - Map userMap = userCoreService.getUserMap( + Map userMap = userService.getUserMap( convertList(pageResult.getList(), SysUserSessionDO::getUserId)); Map deptMap = deptCoreService.getDeptMap( - convertList(userMap.values(), SysUserDO::getDeptId)); + convertList(userMap.values(), UserDO::getDeptId)); // 拼接结果返回 List sessionList = new ArrayList<>(pageResult.getList().size()); pageResult.getList().forEach(session -> { @@ -76,7 +75,7 @@ public class UserSessionController { example = "fe50b9f6-d177-44b1-8da9-72ea34f63db7") @PreAuthorize("@ss.hasPermission('system:user-session:delete')") public CommonResult deleteUserSession(@RequestParam("id") String id) { - userSessionCoreService.deleteUserSession(id); + userSessionService.deleteUserSession(id); return success(true); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialBindReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialBindReqVO.java index 3bb408c0b4..5debf6b205 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialBindReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialBindReqVO.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth; -import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum; +import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; import cn.iocoder.yudao.framework.common.validation.InEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -20,7 +20,7 @@ import javax.validation.constraints.NotNull; public class AuthSocialBindReqVO { @ApiModelProperty(value = "社交平å°çš„类型", required = true, example = "10", notes = "å‚è§ SysUserSocialTypeEnum 枚举值") - @InEnum(SysSocialTypeEnum.class) + @InEnum(SocialTypeEnum.class) @NotNull(message = "社交平å°çš„类型ä¸èƒ½ä¸ºç©º") private Integer type; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialLogin2ReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialLogin2ReqVO.java index 74955a6c59..90ce2cf88a 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialLogin2ReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialLogin2ReqVO.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth; -import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum; import cn.iocoder.yudao.framework.common.validation.InEnum; +import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; @@ -22,7 +22,7 @@ import javax.validation.constraints.Pattern; public class AuthSocialLogin2ReqVO { @ApiModelProperty(value = "社交平å°çš„类型", required = true, example = "10", notes = "å‚è§ SysUserSocialTypeEnum 枚举值") - @InEnum(SysSocialTypeEnum.class) + @InEnum(SocialTypeEnum.class) @NotNull(message = "社交平å°çš„类型ä¸èƒ½ä¸ºç©º") private Integer type; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialLoginReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialLoginReqVO.java index 4f7b8d76d6..bc1247d678 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialLoginReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialLoginReqVO.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth; -import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum; +import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; import cn.iocoder.yudao.framework.common.validation.InEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -20,7 +20,7 @@ import javax.validation.constraints.NotNull; public class AuthSocialLoginReqVO { @ApiModelProperty(value = "社交平å°çš„类型", required = true, example = "10", notes = "å‚è§ SysUserSocialTypeEnum 枚举值") - @InEnum(SysSocialTypeEnum.class) + @InEnum(SocialTypeEnum.class) @NotNull(message = "社交平å°çš„类型ä¸èƒ½ä¸ºç©º") private Integer type; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialUnbindReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialUnbindReqVO.java index b16f1ef772..eb43a2d27d 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialUnbindReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialUnbindReqVO.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth; -import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum; import cn.iocoder.yudao.framework.common.validation.InEnum; +import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; @@ -20,7 +20,7 @@ import javax.validation.constraints.NotNull; public class AuthSocialUnbindReqVO { @ApiModelProperty(value = "社交平å°çš„类型", required = true, example = "10", notes = "å‚è§ SysUserSocialTypeEnum 枚举值") - @InEnum(SysSocialTypeEnum.class) + @InEnum(SocialTypeEnum.class) @NotNull(message = "社交平å°çš„类型ä¸èƒ½ä¸ºç©º") private Integer type; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/DeptController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/DeptController.java index 2459736a5c..837a825ee2 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/DeptController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/DeptController.java @@ -1,11 +1,11 @@ package cn.iocoder.yudao.module.system.controller.admin.dept; -import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; +import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.*; import cn.iocoder.yudao.module.system.convert.dept.DeptConvert; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.module.system.service.dept.DeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/PostController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/PostController.java index 9191ce25fe..e5b179e323 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/PostController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/PostController.java @@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.*; import cn.iocoder.yudao.module.system.convert.dept.PostConvert; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; import cn.iocoder.yudao.module.system.service.dept.PostService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostExcelVO.java index b9c2696dfb..0053a78951 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostExcelVO.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.controller.admin.dept.vo.post; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.module.system.enums.DictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @@ -25,7 +25,7 @@ public class PostExcelVO { private Integer sort; @ExcelProperty(value = "状æ€", converter = DictConvert.class) - @DictFormat(SysDictTypeConstants.COMMON_STATUS) + @DictFormat(DictTypeConstants.COMMON_STATUS) private String status; } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictDataController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictDataController.java index 81d7cc247c..08fca2c476 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictDataController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictDataController.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.controller.admin.dict; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictDataDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataExcelVO.java index ee907eaa76..6dcb9bb505 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataExcelVO.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.controller.admin.dict.vo.data; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.module.system.enums.DictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @@ -28,7 +28,7 @@ public class DictDataExcelVO { private String dictType; @ExcelProperty(value = "状æ€", converter = DictConvert.class) - @DictFormat(SysDictTypeConstants.COMMON_STATUS) + @DictFormat(DictTypeConstants.COMMON_STATUS) private Integer status; } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeExcelVO.java index fbda72b2e3..b7db46d0eb 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeExcelVO.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.controller.admin.dict.vo.type; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.module.system.enums.DictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @@ -22,7 +22,7 @@ public class DictTypeExcelVO { private String type; @ExcelProperty(value = "状æ€", converter = DictConvert.class) - @DictFormat(SysDictTypeConstants.COMMON_STATUS) + @DictFormat(DictTypeConstants.COMMON_STATUS) private Integer status; } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/LoginLogController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/LoginLogController.java index ad78168355..9890247c8b 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/LoginLogController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/LoginLogController.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.controller.admin.logger; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO; +import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysLoginLogDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/OperateLogController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/OperateLogController.java index 2eca78fc15..935b48bafa 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/OperateLogController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/OperateLogController.java @@ -7,16 +7,17 @@ import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.Oper import cn.iocoder.yudao.module.system.convert.logger.OperateLogConvert; import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO; import cn.iocoder.yudao.module.system.service.logger.OperateLogService; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; +import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.collection.MapUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; +import cn.iocoder.yudao.module.system.service.user.UserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; @@ -43,8 +44,9 @@ public class OperateLogController { @Resource private OperateLogService operateLogService; - @Resource - private SysUserCoreService userCoreService; + @Autowired + @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") // UserService 存在é‡å + private UserService userService; @GetMapping("/page") @ApiOperation("查看æ“作日志分页列表") @@ -54,7 +56,7 @@ public class OperateLogController { // 获得拼接需è¦çš„æ•°æ® Collection userIds = CollectionUtils.convertList(pageResult.getList(), OperateLogDO::getUserId); - Map userMap = userCoreService.getUserMap(userIds); + Map userMap = userService.getUserMap(userIds); // æ‹¼æŽ¥æ•°æ® List list = new ArrayList<>(pageResult.getList().size()); pageResult.getList().forEach(operateLog -> { @@ -75,7 +77,7 @@ public class OperateLogController { // 获得拼接需è¦çš„æ•°æ® Collection userIds = CollectionUtils.convertList(list, OperateLogDO::getUserId); - Map userMap = userCoreService.getUserMap(userIds); + Map userMap = userService.getUserMap(userIds); // æ‹¼æŽ¥æ•°æ® List excelDataList = OperateLogConvert.INSTANCE.convertList(list, userMap); // 输出 diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogExcelVO.java index 2a16454fca..300cd088d8 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogExcelVO.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.module.system.enums.DictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @@ -21,11 +21,11 @@ public class LoginLogExcelVO { private String username; @ExcelProperty(value = "日志类型", converter = DictConvert.class) - @DictFormat(SysDictTypeConstants.LOGIN_TYPE) + @DictFormat(DictTypeConstants.LOGIN_TYPE) private Integer logType; @ExcelProperty(value = "登录结果", converter = DictConvert.class) - @DictFormat(SysDictTypeConstants.LOGIN_RESULT) + @DictFormat(DictTypeConstants.LOGIN_RESULT) private Integer result; @ExcelProperty("登录 IP") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogExcelVO.java index 40546b2d9c..7f38cfc797 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogExcelVO.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.module.system.enums.DictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @@ -24,7 +24,7 @@ public class OperateLogExcelVO { private String name; @ExcelProperty(value = "æ“作类型", converter = DictConvert.class) - @DictFormat(SysDictTypeConstants.OPERATE_TYPE) + @DictFormat(DictTypeConstants.OPERATE_TYPE) private String type; @ExcelProperty("æ“作人") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/RoleController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/RoleController.java index ac7dce6358..54cdb6b536 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/RoleController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/RoleController.java @@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.*; import cn.iocoder.yudao.module.system.convert.permission.RoleConvert; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO; import cn.iocoder.yudao.module.system.service.permission.RoleService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleExcelVO.java index bb82f4ab1f..d22cf9bf24 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleExcelVO.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.controller.admin.permission.vo.role; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.module.system.enums.DictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @@ -28,7 +28,7 @@ public class RoleExcelVO { private Integer dataScope; @ExcelProperty(value = "角色状æ€", converter = DictConvert.class) - @DictFormat(SysDictTypeConstants.COMMON_STATUS) + @DictFormat(DictTypeConstants.COMMON_STATUS) private String status; } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsCallbackController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsCallbackController.java index f13f188c44..6e2602cf0c 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsCallbackController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsCallbackController.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.controller.admin.sms; import cn.hutool.core.util.URLUtil; import cn.hutool.extra.servlet.ServletUtil; -import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsCoreService; +import cn.iocoder.yudao.module.system.service.sms.SysSmsSendService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; import cn.iocoder.yudao.framework.sms.core.enums.SmsChannelEnum; @@ -25,7 +25,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; public class SmsCallbackController { @Resource - private SysSmsCoreService smsCoreService; + private SysSmsSendService smsCoreService; @PostMapping("/sms/yunpian") @ApiOperation(value = "云片短信的回调", notes = "å‚è§ https://www.yunpian.com/official/document/sms/zh_cn/domestic_push_report 文档") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsChannelController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsChannelController.java index 86c9eee6ed..4774fcf59b 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsChannelController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsChannelController.java @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.system.controller.admin.sms; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.*; import cn.iocoder.yudao.module.system.convert.sms.SmsChannelConvert; import cn.iocoder.yudao.module.system.service.sms.SmsChannelService; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsChannelDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import io.swagger.annotations.Api; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsLogController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsLogController.java index 557e6d31e3..ef93cfc3de 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsLogController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsLogController.java @@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogPageReqV import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SysSmsLogRespVO; import cn.iocoder.yudao.module.system.convert.sms.SmsLogConvert; import cn.iocoder.yudao.module.system.service.sms.SmsLogService; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsLogDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsTemplateController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsTemplateController.java index 2d0adc427b..f16bfb2c97 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsTemplateController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsTemplateController.java @@ -3,8 +3,8 @@ package cn.iocoder.yudao.module.system.controller.admin.sms; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.*; import cn.iocoder.yudao.module.system.convert.sms.SmsTemplateConvert; import cn.iocoder.yudao.module.system.service.sms.SmsTemplateService; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; -import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsCoreService; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; +import cn.iocoder.yudao.module.system.service.sms.SysSmsSendService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; @@ -32,7 +32,7 @@ public class SmsTemplateController { @Resource private SmsTemplateService smsTemplateService; @Resource - private SysSmsCoreService smsCoreService; + private SysSmsSendService smsCoreService; @PostMapping("/create") @ApiOperation("创建短信模æ¿") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SmsLogExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SmsLogExcelVO.java index 9fb8515df9..f638f58fc2 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SmsLogExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SmsLogExcelVO.java @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.system.controller.admin.sms.vo.log; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; import cn.iocoder.yudao.framework.excel.core.convert.JsonConvert; -import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.module.system.enums.DictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @@ -34,7 +34,7 @@ public class SmsLogExcelVO { private String templateCode; @ExcelProperty(value = "短信类型", converter = DictConvert.class) - @DictFormat(SysDictTypeConstants.SMS_TEMPLATE_TYPE) + @DictFormat(DictTypeConstants.SMS_TEMPLATE_TYPE) private Integer templateType; @ExcelProperty("短信内容") @@ -53,11 +53,11 @@ public class SmsLogExcelVO { private Long userId; @ExcelProperty(value = "用户类型", converter = DictConvert.class) - @DictFormat(SysDictTypeConstants.USER_TYPE) + @DictFormat(DictTypeConstants.USER_TYPE) private Integer userType; @ExcelProperty(value = "å‘é€çжæ€", converter = DictConvert.class) - @DictFormat(SysDictTypeConstants.SMS_SEND_STATUS) + @DictFormat(DictTypeConstants.SMS_SEND_STATUS) private Integer sendStatus; @ExcelProperty("å‘逿—¶é—´") @@ -82,7 +82,7 @@ public class SmsLogExcelVO { private String apiSerialNo; @ExcelProperty(value = "接收状æ€", converter = DictConvert.class) - @DictFormat(SysDictTypeConstants.SMS_RECEIVE_STATUS) + @DictFormat(DictTypeConstants.SMS_RECEIVE_STATUS) private Integer receiveStatus; @ExcelProperty("接收时间") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateExcelVO.java index eb28c63cb1..a640a93c1b 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateExcelVO.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.controller.admin.sms.vo.template; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.module.system.enums.DictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @@ -20,11 +20,11 @@ public class SmsTemplateExcelVO { private Long id; @ExcelProperty(value = "短信签å", converter = DictConvert.class) - @DictFormat(SysDictTypeConstants.SMS_TEMPLATE_TYPE) + @DictFormat(DictTypeConstants.SMS_TEMPLATE_TYPE) private Integer type; @ExcelProperty(value = "å¼€å¯çжæ€", converter = DictConvert.class) - @DictFormat(SysDictTypeConstants.COMMON_STATUS) + @DictFormat(DictTypeConstants.COMMON_STATUS) private Integer status; @ExcelProperty("模æ¿ç¼–ç ") @@ -46,7 +46,7 @@ public class SmsTemplateExcelVO { private Long channelId; @ExcelProperty(value = "短信渠é“ç¼–ç ", converter = DictConvert.class) - @DictFormat(SysDictTypeConstants.SMS_CHANNEL_CODE) + @DictFormat(DictTypeConstants.SMS_CHANNEL_CODE) private String channelCode; @ExcelProperty("创建时间") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/TenantController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/TenantController.java index 2b5fc204cd..bd2fcb430b 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/TenantController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/TenantController.java @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.system.controller.admin.tenant; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.*; import cn.iocoder.yudao.module.system.convert.tenant.TenantConvert; import cn.iocoder.yudao.module.system.service.tenant.TenantService; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.tenant.SysTenantDO; +import cn.iocoder.yudao.module.system.dal.dataobject.tenant.SysTenantDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java index ddf19aec84..61c54e2932 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java @@ -3,12 +3,11 @@ package cn.iocoder.yudao.module.system.controller.admin.user; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; import cn.iocoder.yudao.module.system.convert.user.UserConvert; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.module.system.service.user.UserService; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.coreservice.modules.system.enums.common.SysSexEnum; -import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; +import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.system.enums.common.SysSexEnum; +import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -19,6 +18,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -41,11 +41,10 @@ import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.E @Validated public class UserController { - @Resource + @Autowired + @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") // UserService 存在é‡å private UserService userService; @Resource - private SysUserCoreService userCoreService; - @Resource private SysDeptCoreService deptCoreService; @PostMapping("/create") @@ -94,13 +93,13 @@ public class UserController { @PreAuthorize("@ss.hasPermission('system:user:list')") public CommonResult> getUserPage(@Valid UserPageReqVO reqVO) { // 获得用户分页列表 - PageResult pageResult = userService.getUserPage(reqVO); + PageResult pageResult = userService.getUserPage(reqVO); if (CollUtil.isEmpty(pageResult.getList())) { return success(new PageResult<>(pageResult.getTotal())); // 返回空 } // 获得拼接需è¦çš„æ•°æ® - Collection deptIds = convertList(pageResult.getList(), SysUserDO::getDeptId); + Collection deptIds = convertList(pageResult.getList(), UserDO::getDeptId); Map deptMap = deptCoreService.getDeptMap(deptIds); // 拼接结果返回 List userList = new ArrayList<>(pageResult.getList().size()); @@ -116,7 +115,7 @@ public class UserController { @ApiOperation(value = "获å–用户精简信æ¯åˆ—表", notes = "åªåŒ…å«è¢«å¼€å¯çš„用户,主è¦ç”¨äºŽå‰ç«¯çš„下拉选项") public CommonResult> getSimpleUsers() { // 获用户门列表,åªè¦å¼€å¯çжæ€çš„ - List list = userService.getUsersByStatus(CommonStatusEnum.ENABLE.getStatus()); + List list = userService.getUsersByStatus(CommonStatusEnum.ENABLE.getStatus()); // 排åºåŽï¼Œè¿”回给å‰ç«¯ return success(UserConvert.INSTANCE.convertList04(list)); } @@ -126,7 +125,7 @@ public class UserController { @ApiImplicitParam(name = "id", value = "ç¼–å·", required = true, example = "1024", dataTypeClass = Long.class) @PreAuthorize("@ss.hasPermission('system:user:query')") public CommonResult getInfo(@RequestParam("id") Long id) { - return success(UserConvert.INSTANCE.convert(userCoreService.getUser(id))); + return success(UserConvert.INSTANCE.convert(userService.getUser(id))); } @GetMapping("/export") @@ -136,12 +135,13 @@ public class UserController { public void exportUsers(@Validated UserExportReqVO reqVO, HttpServletResponse response) throws IOException { // 获得用户列表 - List users = userService.getUsers(reqVO); + List users = userService.getUsers(reqVO); // 获得拼接需è¦çš„æ•°æ® - Collection deptIds = convertList(users, SysUserDO::getDeptId); + Collection deptIds = convertList(users, UserDO::getDeptId); Map deptMap = deptCoreService.getDeptMap(deptIds); - Map deptLeaderUserMap = userCoreService.getUserMap(convertSet(deptMap.values(), SysDeptDO::getLeaderUserId)); + Map deptLeaderUserMap = userService.getUserMap( + convertSet(deptMap.values(), SysDeptDO::getLeaderUserId)); // æ‹¼æŽ¥æ•°æ® List excelUsers = new ArrayList<>(users.size()); users.forEach(user -> { diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.java index 4745b2f5bd..ffb6b0d1c2 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.java @@ -9,20 +9,20 @@ import cn.iocoder.yudao.module.system.service.dept.PostService; import cn.iocoder.yudao.module.system.service.permission.PermissionService; import cn.iocoder.yudao.module.system.service.permission.RoleService; import cn.iocoder.yudao.module.system.service.user.UserService; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.social.SysSocialUserDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.social.SysSocialUserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; +import cn.iocoder.yudao.module.system.service.social.SocialUserService; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -43,11 +43,10 @@ import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUti @Slf4j public class UserProfileController { - @Resource + @Autowired + @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") // UserService 存在é‡å private UserService userService; @Resource - private SysUserCoreService userCoreService; - @Resource private SysDeptCoreService deptCoreService; @Resource @@ -57,13 +56,13 @@ public class UserProfileController { @Resource private RoleService roleService; @Resource - private SysSocialCoreService socialService; + private SocialUserService socialService; @GetMapping("/get") @ApiOperation("获得登录用户信æ¯") public CommonResult profile() { // èŽ·å¾—ç”¨æˆ·åŸºæœ¬ä¿¡æ¯ - SysUserDO user = userCoreService.getUser(getLoginUserId()); + UserDO user = userService.getUser(getLoginUserId()); UserProfileRespVO resp = UserConvert.INSTANCE.convert03(user); // 获得用户角色 List userRoles = roleService.getRolesFromCache(permissionService.getUserRoleIdListByUserId(user.getId())); diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserExcelVO.java index b67010ca69..a9163cb6cf 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserExcelVO.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.controller.admin.user.vo.user; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.module.system.enums.DictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @@ -30,11 +30,11 @@ public class UserExcelVO { private String mobile; @ExcelProperty(value = "用户性别", converter = DictConvert.class) - @DictFormat(SysDictTypeConstants.USER_SEX) + @DictFormat(DictTypeConstants.USER_SEX) private Integer sex; @ExcelProperty(value = "å¸å·çжæ€", converter = DictConvert.class) - @DictFormat(SysDictTypeConstants.COMMON_STATUS) + @DictFormat(DictTypeConstants.COMMON_STATUS) private Integer status; @ExcelProperty("最åŽç™»å½•IP") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserImportExcelVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserImportExcelVO.java index b2e084af03..a360f1af2c 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserImportExcelVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserImportExcelVO.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.controller.admin.user.vo.user; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.coreservice.modules.system.enums.SysDictTypeConstants; +import cn.iocoder.yudao.module.system.enums.DictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.AllArgsConstructor; import lombok.Builder; @@ -36,11 +36,11 @@ public class UserImportExcelVO { private String mobile; @ExcelProperty(value = "用户性别", converter = DictConvert.class) - @DictFormat(SysDictTypeConstants.USER_SEX) + @DictFormat(DictTypeConstants.USER_SEX) private Integer sex; @ExcelProperty(value = "è´¦å·çжæ€", converter = DictConvert.class) - @DictFormat(SysDictTypeConstants.COMMON_STATUS) + @DictFormat(DictTypeConstants.COMMON_STATUS) private Integer status; } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java index be76b5fdd2..14310514d9 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java @@ -3,9 +3,9 @@ package cn.iocoder.yudao.module.system.convert.auth; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthMenuRespVO; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthPermissionInfoRespVO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO; import cn.iocoder.yudao.module.system.enums.permission.MenuIdEnum; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.security.core.LoginUser; @@ -22,14 +22,14 @@ public interface AuthConvert { AuthConvert INSTANCE = Mappers.getMapper(AuthConvert.class); @Mapping(source = "updateTime", target = "updateTime", ignore = true) // 字段相åŒï¼Œä½†æ˜¯å«ä¹‰ä¸åŒï¼Œå¿½ç•¥ - LoginUser convert0(SysUserDO bean); + LoginUser convert0(UserDO bean); - default LoginUser convert(SysUserDO bean) { + default LoginUser convert(UserDO bean) { // 目的,为了设置 UserTypeEnum.ADMIN.getValue() return convert0(bean).setUserType(UserTypeEnum.ADMIN.getValue()); } - default AuthPermissionInfoRespVO convert(SysUserDO user, List roleList, List menuList) { + default AuthPermissionInfoRespVO convert(UserDO user, List roleList, List menuList) { return AuthPermissionInfoRespVO.builder() .user(AuthPermissionInfoRespVO.UserVO.builder().id(user.getId()).nickname(user.getNickname()).avatar(user.getAvatar()).build()) .roles(CollectionUtils.convertSet(roleList, SysRoleDO::getCode)) diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/UserSessionConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/UserSessionConvert.java index 37cec9ee46..b287d8adc4 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/UserSessionConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/UserSessionConvert.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.convert.auth; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.session.UserSessionPageItemRespVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO; +import cn.iocoder.yudao.module.system.dal.dataobject.auth.SysUserSessionDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/DeptConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/DeptConvert.java index 2d1c4d6c1d..cd66acd9fa 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/DeptConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/DeptConvert.java @@ -4,7 +4,7 @@ import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptCreateRe import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptRespVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptSimpleRespVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptUpdateReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/PostConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/PostConvert.java index 99af8b91ac..d3680dae51 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/PostConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/PostConvert.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.convert.dept; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.*; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/DictDataConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/DictDataConvert.java index 33958c325b..94f67657fe 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/DictDataConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/DictDataConvert.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.convert.dict; import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.*; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictDataDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.dict.core.dto.DictDataRespDTO; import org.mapstruct.Mapper; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/convert/dict/SysDictDataCoreConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/SysDictDataCoreConvert.java similarity index 74% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/convert/dict/SysDictDataCoreConvert.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/SysDictDataCoreConvert.java index e68e165d37..c61d654cff 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/convert/dict/SysDictDataCoreConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/SysDictDataCoreConvert.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.coreservice.modules.system.convert.dict; +package cn.iocoder.yudao.module.system.convert.dict; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictDataDO; import cn.iocoder.yudao.framework.dict.core.dto.DictDataRespDTO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/LoginLogConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/LoginLogConvert.java index 3d375b0046..3208276ccb 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/LoginLogConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/LoginLogConvert.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.convert.logger; import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogExcelVO; import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogRespVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO; +import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysLoginLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/OperateLogConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/OperateLogConvert.java index bc5cd690ec..1c2261afd3 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/OperateLogConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/OperateLogConvert.java @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.system.convert.logger; import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogExcelVO; import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogRespVO; import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.MapUtils; import cn.iocoder.yudao.framework.operatelog.core.dto.OperateLogCreateReqDTO; @@ -27,7 +27,7 @@ public interface OperateLogConvert { OperateLogRespVO convert(OperateLogDO bean); - default List convertList(List list, Map userMap) { + default List convertList(List list, Map userMap) { return list.stream().map(operateLog -> { OperateLogExcelVO excelVO = convert02(operateLog); MapUtils.findAndThen(userMap, operateLog.getId(), user -> excelVO.setUserNickname(user.getNickname())); diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/SysLoginLogCoreConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/SysLoginLogCoreConvert.java new file mode 100644 index 0000000000..bfdeea7e8c --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/SysLoginLogCoreConvert.java @@ -0,0 +1,15 @@ +package cn.iocoder.yudao.module.system.convert.logger; + +import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysLoginLogDO; +import cn.iocoder.yudao.module.system.service.logger.dto.LoginLogCreateReqDTO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +@Mapper +public interface SysLoginLogCoreConvert { + + SysLoginLogCoreConvert INSTANCE = Mappers.getMapper(SysLoginLogCoreConvert.class); + + SysLoginLogDO convert(LoginLogCreateReqDTO bean); + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/RoleConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/RoleConvert.java index c9e1098ae4..5dcbf12fc6 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/RoleConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/RoleConvert.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.convert.permission; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.*; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsChannelConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsChannelConvert.java index 3885b7a1cd..6979ed0027 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsChannelConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsChannelConvert.java @@ -4,7 +4,7 @@ import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannel import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelRespVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelSimpleRespVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelUpdateReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsChannelDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.sms.core.property.SmsChannelProperties; import org.mapstruct.Mapper; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsLogConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsLogConvert.java index f5110b3716..425ac31977 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsLogConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsLogConvert.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.convert.sms; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogExcelVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SysSmsLogRespVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsTemplateConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsTemplateConvert.java index bc83e1e85f..8cca0f01fa 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsTemplateConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsTemplateConvert.java @@ -4,7 +4,7 @@ import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTempla import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateExcelVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateRespVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateUpdateReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/tenant/TenantConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/tenant/TenantConvert.java index 62e28b4690..53de4517ad 100755 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/tenant/TenantConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/tenant/TenantConvert.java @@ -4,7 +4,7 @@ import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantCreateReq import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantExcelVO; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantRespVO; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantUpdateReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.tenant.SysTenantDO; +import cn.iocoder.yudao.module.system.dal.dataobject.tenant.SysTenantDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/user/UserConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/user/UserConvert.java index e57cb86483..10d4b16d68 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/user/UserConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/user/UserConvert.java @@ -4,11 +4,11 @@ import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfi import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.social.SysSocialUserDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.social.SysSocialUserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -19,31 +19,31 @@ public interface UserConvert { UserConvert INSTANCE = Mappers.getMapper(UserConvert.class); - UserPageItemRespVO convert(SysUserDO bean); + UserPageItemRespVO convert(UserDO bean); UserPageItemRespVO.Dept convert(SysDeptDO bean); - SysUserDO convert(UserCreateReqVO bean); + UserDO convert(UserCreateReqVO bean); - SysUserDO convert(UserUpdateReqVO bean); + UserDO convert(UserUpdateReqVO bean); - UserExcelVO convert02(SysUserDO bean); + UserExcelVO convert02(UserDO bean); - SysUserDO convert(UserImportExcelVO bean); + UserDO convert(UserImportExcelVO bean); - UserProfileRespVO convert03(SysUserDO bean); + UserProfileRespVO convert03(UserDO bean); List convertList(List list); UserProfileRespVO.Dept convert02(SysDeptDO bean); - SysUserDO convert(UserProfileUpdateReqVO bean); + UserDO convert(UserProfileUpdateReqVO bean); - SysUserDO convert(UserProfileUpdatePasswordReqVO bean); + UserDO convert(UserProfileUpdatePasswordReqVO bean); List convertList02(List list); List convertList03(List list); - List convertList04(List list); + List convertList04(List list); } diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/auth/SysUserSessionDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/auth/SysUserSessionDO.java similarity index 95% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/auth/SysUserSessionDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/auth/SysUserSessionDO.java index d30d38491d..9de10295ba 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/auth/SysUserSessionDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/auth/SysUserSessionDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth; +package cn.iocoder.yudao.module.system.dal.dataobject.auth; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.security.core.LoginUser; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/dept/SysDeptDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/SysDeptDO.java similarity index 84% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/dept/SysDeptDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/SysDeptDO.java index ced8296dac..797dfa2062 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/dept/SysDeptDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/SysDeptDO.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept; +package cn.iocoder.yudao.module.system.dal.dataobject.dept; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; import com.baomidou.mybatisplus.annotation.TableId; @@ -41,7 +41,7 @@ public class SysDeptDO extends TenantBaseDO { /** * 负责人 * - * å…³è” {@link SysUserDO#getId()} + * å…³è” {@link UserDO#getId()} */ private Long leaderUserId; /** diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/dept/SysPostDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/SysPostDO.java similarity index 92% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/dept/SysPostDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/SysPostDO.java index 6e47b1da42..233ba361be 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/dept/SysPostDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/SysPostDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept; +package cn.iocoder.yudao.module.system.dal.dataobject.dept; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/dict/SysDictDataDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dict/SysDictDataDO.java similarity index 93% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/dict/SysDictDataDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dict/SysDictDataDO.java index d398d5ef34..fe12ce472b 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/dict/SysDictDataDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dict/SysDictDataDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict; +package cn.iocoder.yudao.module.system.dal.dataobject.dict; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/OperateLogDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/OperateLogDO.java index ec799ec464..5c12f825c6 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/OperateLogDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/OperateLogDO.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.dal.dataobject.logger; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum; import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; @@ -48,7 +48,7 @@ public class OperateLogDO extends TenantBaseDO { /** * ç”¨æˆ·ç¼–å· * - * {@link SysUserDO#getId()} + * {@link UserDO#getId()} */ private Long userId; /** diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/logger/SysLoginLogDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/SysLoginLogDO.java similarity index 83% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/logger/SysLoginLogDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/SysLoginLogDO.java index e7e7a4144b..0a15186469 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/logger/SysLoginLogDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/SysLoginLogDO.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger; +package cn.iocoder.yudao.module.system.dal.dataobject.logger; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.coreservice.modules.system.enums.logger.SysLoginLogTypeEnum; -import cn.iocoder.yudao.coreservice.modules.system.enums.logger.SysLoginResultEnum; +import cn.iocoder.yudao.module.system.enums.logger.SysLoginLogTypeEnum; +import cn.iocoder.yudao.module.system.enums.logger.SysLoginResultEnum; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/package-info.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/package-info.java new file mode 100644 index 0000000000..000c252fcb --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.system.dal.dataobject; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/permission/SysRoleDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/SysRoleDO.java similarity index 95% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/permission/SysRoleDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/SysRoleDO.java index c27f588abe..6b2d3eb9a3 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/permission/SysRoleDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/SysRoleDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission; +package cn.iocoder.yudao.module.system.dal.dataobject.permission; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/permission/SysUserRoleDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/SysUserRoleDO.java similarity index 88% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/permission/SysUserRoleDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/SysUserRoleDO.java index ac18d8c9c2..9c298ad9d7 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/permission/SysUserRoleDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/SysUserRoleDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission; +package cn.iocoder.yudao.module.system.dal.dataobject.permission; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import com.baomidou.mybatisplus.annotation.TableId; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/sms/SysSmsChannelDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SysSmsChannelDO.java similarity index 94% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/sms/SysSmsChannelDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SysSmsChannelDO.java index 87b67cd7fe..57fe9789e2 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/sms/SysSmsChannelDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SysSmsChannelDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms; +package cn.iocoder.yudao.module.system.dal.dataobject.sms; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/sms/SysSmsLogDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SysSmsLogDO.java similarity index 94% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/sms/SysSmsLogDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SysSmsLogDO.java index 6567ee215f..a6daa0c742 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/sms/SysSmsLogDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SysSmsLogDO.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms; +package cn.iocoder.yudao.module.system.dal.dataobject.sms; -import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsReceiveStatusEnum; -import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsSendStatusEnum; +import cn.iocoder.yudao.module.system.enums.sms.SysSmsReceiveStatusEnum; +import cn.iocoder.yudao.module.system.enums.sms.SysSmsSendStatusEnum; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.sms.core.enums.SmsFrameworkErrorCodeConstants; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/sms/SysSmsTemplateDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SysSmsTemplateDO.java similarity index 92% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/sms/SysSmsTemplateDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SysSmsTemplateDO.java index 9e1dd35c71..72fcafcd97 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/sms/SysSmsTemplateDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SysSmsTemplateDO.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms; +package cn.iocoder.yudao.module.system.dal.dataobject.sms; -import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsTemplateTypeEnum; +import cn.iocoder.yudao.module.system.enums.sms.SysSmsTemplateTypeEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import com.baomidou.mybatisplus.annotation.TableField; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/social/SysSocialUserDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/social/SysSocialUserDO.java similarity index 90% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/social/SysSocialUserDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/social/SysSocialUserDO.java index d1772a1324..336211ed1b 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/social/SysSocialUserDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/social/SysSocialUserDO.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.social; +package cn.iocoder.yudao.module.system.dal.dataobject.social; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import com.baomidou.mybatisplus.annotation.TableId; @@ -9,7 +9,7 @@ import lombok.*; /** * 社交用户 - * 通过 {@link SysSocialUserDO#getUserId()} å…³è”到对应的 {@link SysUserDO} + * 通过 {@link SysSocialUserDO#getUserId()} å…³è”到对应的 {@link UserDO} * * @author weir */ diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/tenant/SysTenantDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/tenant/SysTenantDO.java similarity index 91% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/tenant/SysTenantDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/tenant/SysTenantDO.java index c0b5298c88..ebff2004ce 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/tenant/SysTenantDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/tenant/SysTenantDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.tenant; +package cn.iocoder.yudao.module.system.dal.dataobject.tenant; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/user/SysUserDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/UserDO.java similarity index 90% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/user/SysUserDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/UserDO.java index bb5e6854ce..0f9d6e3f3f 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/user/SysUserDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/UserDO.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user; +package cn.iocoder.yudao.module.system.dal.dataobject.user; -import cn.iocoder.yudao.coreservice.modules.system.enums.common.SysSexEnum; +import cn.iocoder.yudao.module.system.enums.common.SysSexEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.mybatis.core.type.JsonLongSetTypeHandler; import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; @@ -24,7 +24,7 @@ import java.util.Set; @Builder @NoArgsConstructor @AllArgsConstructor -public class SysUserDO extends TenantBaseDO { +public class UserDO extends TenantBaseDO { /** * 用户ID diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/auth/SysUserSessionCoreMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/auth/SysUserSessionCoreMapper.java similarity index 56% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/auth/SysUserSessionCoreMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/auth/SysUserSessionCoreMapper.java index 69b5c5acbb..a589d1e9e2 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/auth/SysUserSessionCoreMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/auth/SysUserSessionCoreMapper.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.mysql.auth; +package cn.iocoder.yudao.module.system.dal.mysql.auth; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO; +import cn.iocoder.yudao.module.system.dal.dataobject.auth.SysUserSessionDO; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import org.apache.ibatis.annotations.Mapper; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/auth/SysUserSessionMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/auth/SysUserSessionMapper.java index 7d231be885..23e0ba1e5d 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/auth/SysUserSessionMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/auth/SysUserSessionMapper.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.dal.mysql.auth; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.session.UserSessionPageReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO; +import cn.iocoder.yudao.module.system.dal.dataobject.auth.SysUserSessionDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/dept/SysDeptCoreMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysDeptCoreMapper.java similarity index 56% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/dept/SysDeptCoreMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysDeptCoreMapper.java index ab98c65128..489733bbf5 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/dept/SysDeptCoreMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysDeptCoreMapper.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.mysql.dept; +package cn.iocoder.yudao.module.system.dal.mysql.dept; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import org.apache.ibatis.annotations.Mapper; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysDeptMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysDeptMapper.java index 0bd2d024c0..e2d0678e7d 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysDeptMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysDeptMapper.java @@ -4,7 +4,7 @@ import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.apache.ibatis.annotations.Mapper; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/dept/SysPostCoreMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysPostCoreMapper.java similarity index 56% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/dept/SysPostCoreMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysPostCoreMapper.java index 94a4747e92..5ce2d21523 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/dept/SysPostCoreMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysPostCoreMapper.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.mysql.dept; +package cn.iocoder.yudao.module.system.dal.mysql.dept; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import org.apache.ibatis.annotations.Mapper; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysPostMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysPostMapper.java index b3657d1f40..1a5665863e 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysPostMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysPostMapper.java @@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostPageReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/SysDictDataMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/SysDictDataMapper.java index c8abca94b6..602a77342a 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/SysDictDataMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/SysDictDataMapper.java @@ -3,11 +3,12 @@ package cn.iocoder.yudao.module.system.dal.mysql.dict; import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants; import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataPageReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictDataDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; import java.util.Arrays; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/LoginLogMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/LoginLogMapper.java index f26023388c..8473caccf9 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/LoginLogMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/LoginLogMapper.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.dal.mysql.logger; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO; +import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysLoginLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/logger/SysLoginLogCoreMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/SysLoginLogCoreMapper.java similarity index 55% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/logger/SysLoginLogCoreMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/SysLoginLogCoreMapper.java index e6dd1ff51c..6ef40e8346 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/logger/SysLoginLogCoreMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/SysLoginLogCoreMapper.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.mysql.logger; +package cn.iocoder.yudao.module.system.dal.mysql.logger; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO; +import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysLoginLogDO; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import org.apache.ibatis.annotations.Mapper; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/package-info.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/package-info.java new file mode 100644 index 0000000000..b47bbaac1f --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.system.dal.mysql; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/permission/SysRoleCoreMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleCoreMapper.java similarity index 54% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/permission/SysRoleCoreMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleCoreMapper.java index 69196d8f74..51c3cb2eeb 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/permission/SysRoleCoreMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleCoreMapper.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.mysql.permission; +package cn.iocoder.yudao.module.system.dal.mysql.permission; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import org.apache.ibatis.annotations.Mapper; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleMapper.java index 45af3afad6..659f115884 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleMapper.java @@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; import org.springframework.lang.Nullable; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/permission/SysUserRoleCoreMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysUserRoleCoreMapper.java similarity index 70% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/permission/SysUserRoleCoreMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysUserRoleCoreMapper.java index 1327efde96..6139498e62 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/permission/SysUserRoleCoreMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysUserRoleCoreMapper.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.mysql.permission; +package cn.iocoder.yudao.module.system.dal.mysql.permission; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysUserRoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysUserRoleDO; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import org.apache.ibatis.annotations.Mapper; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysUserRoleMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysUserRoleMapper.java index 71b25f2d17..6578515bdf 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysUserRoleMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysUserRoleMapper.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.dal.mysql.permission; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysUserRoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysUserRoleDO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsChannelMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsChannelMapper.java index 8d183fcb90..49a7d9f40c 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsChannelMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsChannelMapper.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.dal.mysql.sms; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelPageReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsChannelDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsLogMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsLogMapper.java index ffed029128..86f54dc244 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsLogMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsLogMapper.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.dal.mysql.sms; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogPageReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsTemplateMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsTemplateMapper.java index a2559bd476..c4ba4071a9 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsTemplateMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsTemplateMapper.java @@ -1,23 +1,27 @@ package cn.iocoder.yudao.module.system.dal.mysql.sms; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplatePageReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; +import java.util.Date; import java.util.List; @Mapper public interface SysSmsTemplateMapper extends BaseMapperX { + @Select("SELECT id FROM sys_sms_template WHERE update_time > #{maxUpdateTime} LIMIT 1") + Long selectExistsByUpdateTimeAfter(Date maxUpdateTime); + default SysSmsTemplateDO selectByCode(String code) { return selectOne(SysSmsTemplateDO::getCode, code); } - // TODO è¿™ç§å‚数都一样的得想办法å°è£…一下 default PageResult selectPage(SmsTemplatePageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(SysSmsTemplateDO::getType, reqVO.getType()) diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/social/SysSocialUserCoreMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/social/SysSocialUserMapper.java similarity index 80% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/social/SysSocialUserCoreMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/social/SysSocialUserMapper.java index 727c38e678..dc92ddb304 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/social/SysSocialUserCoreMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/social/SysSocialUserMapper.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.mysql.social; +package cn.iocoder.yudao.module.system.dal.mysql.social; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.social.SysSocialUserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.social.SysSocialUserDO; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; @@ -9,7 +9,7 @@ import java.util.Collection; import java.util.List; @Mapper -public interface SysSocialUserCoreMapper extends BaseMapperX { +public interface SysSocialUserMapper extends BaseMapperX { default List selectListByTypeAndUnionId(Integer userType, Collection types, String unionId) { return selectList(new QueryWrapper().eq("user_type", userType) diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/tenant/SysTenantCoreMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tenant/SysTenantCoreMapper.java similarity index 55% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/tenant/SysTenantCoreMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tenant/SysTenantCoreMapper.java index 197f893fac..de7656f400 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/tenant/SysTenantCoreMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tenant/SysTenantCoreMapper.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.mysql.tenant; +package cn.iocoder.yudao.module.system.dal.mysql.tenant; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.tenant.SysTenantDO; +import cn.iocoder.yudao.module.system.dal.dataobject.tenant.SysTenantDO; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import org.apache.ibatis.annotations.Mapper; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tenant/SysTenantMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tenant/SysTenantMapper.java index d92f660f94..f913d625df 100755 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tenant/SysTenantMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tenant/SysTenantMapper.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.dal.mysql.tenant; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantPageReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.tenant.SysTenantDO; +import cn.iocoder.yudao.module.system.dal.dataobject.tenant.SysTenantDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/SysUserMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/SysUserMapper.java deleted file mode 100644 index 1d7eb74bf2..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/SysUserMapper.java +++ /dev/null @@ -1,77 +0,0 @@ -package cn.iocoder.yudao.module.system.dal.mysql.user; - -import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserExportReqVO; -import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import jodd.util.StringPool; -import org.apache.ibatis.annotations.Mapper; - -import java.util.Collection; -import java.util.List; -import java.util.Optional; - -@Mapper -public interface SysUserMapper extends BaseMapperX { - - default SysUserDO selectByUsername(String username) { - return selectOne(new LambdaQueryWrapper().eq(SysUserDO::getUsername, username)); - } - - default SysUserDO selectByEmail(String email) { - return selectOne(new LambdaQueryWrapper().eq(SysUserDO::getEmail, email)); - } - - default SysUserDO selectByMobile(String mobile) { - return selectOne(new LambdaQueryWrapper().eq(SysUserDO::getMobile, mobile)); - } - - default PageResult selectPage(UserPageReqVO reqVO, Collection deptIds) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .likeIfPresent(SysUserDO::getUsername, reqVO.getUsername()) - .likeIfPresent(SysUserDO::getMobile, reqVO.getMobile()) - .eqIfPresent(SysUserDO::getStatus, reqVO.getStatus()) - .betweenIfPresent(SysUserDO::getCreateTime, reqVO.getBeginTime(), reqVO.getEndTime()) - .inIfPresent(SysUserDO::getDeptId, deptIds)); - } - - default List selectList(UserExportReqVO reqVO, Collection deptIds) { - return selectList(new LambdaQueryWrapperX() - .likeIfPresent(SysUserDO::getUsername, reqVO.getUsername()) - .likeIfPresent(SysUserDO::getMobile, reqVO.getMobile()) - .eqIfPresent(SysUserDO::getStatus, reqVO.getStatus()) - .betweenIfPresent(SysUserDO::getCreateTime, reqVO.getBeginTime(), reqVO.getEndTime()) - .inIfPresent(SysUserDO::getDeptId, deptIds)); - } - - default List selectListByNickname(String nickname) { - return selectList(new LambdaQueryWrapperX().like(SysUserDO::getNickname, nickname)); - } - - default List selectListByUsername(String username) { - return selectList(new LambdaQueryWrapperX().like(SysUserDO::getUsername, username)); - } - - // TODO 芋艿:å¯åºŸå¼ƒè¯¥æ–¹æ³• - default List selectListByDepartIdAndPostId(Long departId, Long postId) { - return selectList(new LambdaQueryWrapperX() - .eq(SysUserDO::getStatus, CommonStatusEnum.ENABLE.getStatus()) - .eq(SysUserDO::getDeptId, departId) - // TODO @jason: å°è£…一个 StringUtils .toString 。如果空的时候,设置为 nullã€‚ä¼šæ›´ç®€æ´ - .likeIfPresent(SysUserDO::getPostIds, Optional.ofNullable(postId).map(t -> String.valueOf(postId)).orElse(StringPool.EMPTY))); - } - - default List selectListByStatus(Integer status) { - return selectList(SysUserDO::getStatus, status); - } - - default List selectListByDeptIds(Collection deptIds) { - return selectList(SysUserDO::getDeptId, deptIds); - } - -} - diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/UserMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/UserMapper.java new file mode 100644 index 0000000000..7cd0fe426a --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/UserMapper.java @@ -0,0 +1,68 @@ +package cn.iocoder.yudao.module.system.dal.mysql.user; + +import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import jodd.util.StringPool; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Collection; +import java.util.List; +import java.util.Optional; + +@Mapper +public interface UserMapper extends BaseMapperX { + + default UserDO selectByUsername(String username) { + return selectOne(new LambdaQueryWrapper().eq(UserDO::getUsername, username)); + } + + default UserDO selectByEmail(String email) { + return selectOne(new LambdaQueryWrapper().eq(UserDO::getEmail, email)); + } + + default UserDO selectByMobile(String mobile) { + return selectOne(new LambdaQueryWrapper().eq(UserDO::getMobile, mobile)); + } + + default PageResult selectPage(UserPageReqVO reqVO, Collection deptIds) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(UserDO::getUsername, reqVO.getUsername()) + .likeIfPresent(UserDO::getMobile, reqVO.getMobile()) + .eqIfPresent(UserDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(UserDO::getCreateTime, reqVO.getBeginTime(), reqVO.getEndTime()) + .inIfPresent(UserDO::getDeptId, deptIds)); + } + + default List selectList(UserExportReqVO reqVO, Collection deptIds) { + return selectList(new LambdaQueryWrapperX() + .likeIfPresent(UserDO::getUsername, reqVO.getUsername()) + .likeIfPresent(UserDO::getMobile, reqVO.getMobile()) + .eqIfPresent(UserDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(UserDO::getCreateTime, reqVO.getBeginTime(), reqVO.getEndTime()) + .inIfPresent(UserDO::getDeptId, deptIds)); + } + + default List selectListByNickname(String nickname) { + return selectList(new LambdaQueryWrapperX().like(UserDO::getNickname, nickname)); + } + + default List selectListByUsername(String username) { + return selectList(new LambdaQueryWrapperX().like(UserDO::getUsername, username)); + } + + default List selectListByStatus(Integer status) { + return selectList(UserDO::getStatus, status); + } + + default List selectListByDeptIds(Collection deptIds) { + return selectList(UserDO::getDeptId, deptIds); + } + +} + diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/SysRedisKeyConstants.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/SysRedisKeyConstants.java index 16baa4638f..78b1ca24f8 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/SysRedisKeyConstants.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/SysRedisKeyConstants.java @@ -1,6 +1,10 @@ package cn.iocoder.yudao.module.system.dal.redis; import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine; +import cn.iocoder.yudao.framework.security.core.LoginUser; +import me.zhyd.oauth.model.AuthUser; + +import java.time.Duration; import static cn.iocoder.yudao.framework.redis.core.RedisKeyDefine.KeyTypeEnum.STRING; @@ -14,5 +18,17 @@ public interface SysRedisKeyConstants { RedisKeyDefine CAPTCHA_CODE = new RedisKeyDefine("验è¯ç çš„缓存", "captcha_code:%s", // 傿•°ä¸º uuid STRING, String.class, RedisKeyDefine.TimeoutTypeEnum.DYNAMIC); + + RedisKeyDefine LOGIN_USER = new RedisKeyDefine("登录用户的缓存", + "login_user:%s", // 傿•°ä¸º sessionId + STRING, LoginUser.class, RedisKeyDefine.TimeoutTypeEnum.DYNAMIC); + + RedisKeyDefine SOCIAL_AUTH_USER = new RedisKeyDefine("社交登陆的授æƒç”¨æˆ·", + "social_auth_user:%d:%s", // 傿•°ä¸º type,code + STRING, AuthUser.class, Duration.ofDays(1)); + + RedisKeyDefine SOCIAL_AUTH_STATE = new RedisKeyDefine("社交登陆的 state", + "social_auth_state:%s", // 傿•°ä¸º state + STRING, String.class, Duration.ofHours(24)); // 值为 state } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/SysRedisKeyCoreConstants.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/SysRedisKeyCoreConstants.java new file mode 100644 index 0000000000..735adcc917 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/SysRedisKeyCoreConstants.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.module.system.dal.redis; + +import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine; +import cn.iocoder.yudao.framework.security.core.LoginUser; +import me.zhyd.oauth.model.AuthUser; + +import java.time.Duration; + +import static cn.iocoder.yudao.framework.redis.core.RedisKeyDefine.KeyTypeEnum.STRING; + +/** + * System Redis Key 枚举类 + * + * @author èŠ‹é“æºç  + */ +public interface SysRedisKeyCoreConstants { + +} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/redis/auth/SysLoginUserCoreRedisDAO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/auth/LoginUserRedisDAO.java similarity index 85% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/redis/auth/SysLoginUserCoreRedisDAO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/auth/LoginUserRedisDAO.java index 921492c9d6..ead1d0287e 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/redis/auth/SysLoginUserCoreRedisDAO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/auth/LoginUserRedisDAO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.redis.auth; +package cn.iocoder.yudao.module.system.dal.redis.auth; import cn.iocoder.yudao.framework.common.util.json.JsonUtils; import cn.iocoder.yudao.framework.security.config.SecurityProperties; @@ -8,7 +8,7 @@ import org.springframework.stereotype.Repository; import javax.annotation.Resource; -import static cn.iocoder.yudao.coreservice.modules.system.dal.redis.SysRedisKeyCoreConstants.LOGIN_USER; +import static cn.iocoder.yudao.module.system.dal.redis.SysRedisKeyConstants.LOGIN_USER; /** * {@link LoginUser} çš„ RedisDAO @@ -16,7 +16,7 @@ import static cn.iocoder.yudao.coreservice.modules.system.dal.redis.SysRedisKeyC * @author èŠ‹é“æºç  */ @Repository -public class SysLoginUserCoreRedisDAO { +public class LoginUserRedisDAO { @Resource private StringRedisTemplate stringRedisTemplate; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/redis/social/SysSocialAuthUserRedisDAO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/social/SocialAuthUserRedisDAO.java similarity index 83% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/redis/social/SysSocialAuthUserRedisDAO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/social/SocialAuthUserRedisDAO.java index 0c033f89e2..12cdc94869 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/redis/social/SysSocialAuthUserRedisDAO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/social/SocialAuthUserRedisDAO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.system.dal.redis.social; +package cn.iocoder.yudao.module.system.dal.redis.social; import cn.iocoder.yudao.framework.common.util.json.JsonUtils; import me.zhyd.oauth.model.AuthCallback; @@ -8,7 +8,8 @@ import org.springframework.stereotype.Repository; import javax.annotation.Resource; -import static cn.iocoder.yudao.coreservice.modules.system.dal.redis.SysRedisKeyCoreConstants.SOCIAL_AUTH_USER; +import static cn.iocoder.yudao.module.system.dal.redis.SysRedisKeyConstants.SOCIAL_AUTH_USER; + /** * 社交 {@link me.zhyd.oauth.model.AuthUser} çš„ RedisDAO @@ -16,7 +17,7 @@ import static cn.iocoder.yudao.coreservice.modules.system.dal.redis.SysRedisKeyC * @author èŠ‹é“æºç  */ @Repository -public class SysSocialAuthUserRedisDAO { +public class SocialAuthUserRedisDAO { @Resource private StringRedisTemplate stringRedisTemplate; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/SysDictTypeConstants.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/DictTypeConstants.java similarity index 94% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/SysDictTypeConstants.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/DictTypeConstants.java index 766e0fe5c7..fc9cb3385c 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/SysDictTypeConstants.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/DictTypeConstants.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.coreservice.modules.system.enums; +package cn.iocoder.yudao.module.system.enums; /** * System 字典类型的枚举类 * * @author èŠ‹é“æºç  */ -public interface SysDictTypeConstants { +public interface DictTypeConstants { String USER_TYPE = "user_type"; // 用户类型 String COMMON_STATUS = "sys_common_status"; // ç³»ç»ŸçŠ¶æ€ diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/common/SysSexEnum.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/common/SysSexEnum.java similarity index 83% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/common/SysSexEnum.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/common/SysSexEnum.java index a7b0a9c29e..7fd76247a4 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/common/SysSexEnum.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/common/SysSexEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.system.enums.common; +package cn.iocoder.yudao.module.system.enums.common; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/logger/SysLoginLogTypeEnum.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/SysLoginLogTypeEnum.java similarity index 89% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/logger/SysLoginLogTypeEnum.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/SysLoginLogTypeEnum.java index 5a844f1818..ff29ab558f 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/logger/SysLoginLogTypeEnum.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/SysLoginLogTypeEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.system.enums.logger; +package cn.iocoder.yudao.module.system.enums.logger; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/logger/SysLoginResultEnum.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/SysLoginResultEnum.java similarity index 88% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/logger/SysLoginResultEnum.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/SysLoginResultEnum.java index 290931038c..f1c8356ff4 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/logger/SysLoginResultEnum.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/SysLoginResultEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.system.enums.logger; +package cn.iocoder.yudao.module.system.enums.logger; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/sms/SysSmsReceiveStatusEnum.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SysSmsReceiveStatusEnum.java similarity index 84% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/sms/SysSmsReceiveStatusEnum.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SysSmsReceiveStatusEnum.java index 48fd0c84c4..2b75a45e76 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/sms/SysSmsReceiveStatusEnum.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SysSmsReceiveStatusEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.system.enums.sms; +package cn.iocoder.yudao.module.system.enums.sms; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/sms/SysSmsSendStatusEnum.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SysSmsSendStatusEnum.java similarity index 85% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/sms/SysSmsSendStatusEnum.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SysSmsSendStatusEnum.java index f30e613018..ea57fa8cc3 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/sms/SysSmsSendStatusEnum.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SysSmsSendStatusEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.system.enums.sms; +package cn.iocoder.yudao.module.system.enums.sms; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/sms/SysSmsTemplateTypeEnum.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SysSmsTemplateTypeEnum.java similarity index 84% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/sms/SysSmsTemplateTypeEnum.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SysSmsTemplateTypeEnum.java index b3811e5ecd..5f853e2d75 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/sms/SysSmsTemplateTypeEnum.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SysSmsTemplateTypeEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.system.enums.sms; +package cn.iocoder.yudao.module.system.enums.sms; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/config/DataPermissionConfiguration.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/config/DataPermissionConfiguration.java index cd67fdc828..81bd82068b 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/config/DataPermissionConfiguration.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/config/DataPermissionConfiguration.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.framework.datapermission.config; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; import cn.iocoder.yudao.framework.datapermission.core.dept.rule.DeptDataPermissionRuleCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -17,7 +17,7 @@ public class DataPermissionConfiguration { @Bean public DeptDataPermissionRuleCustomizer sysDeptDataPermissionRuleCustomizer() { return rule -> { - rule.addDeptColumn(SysUserDO.class); + rule.addDeptColumn(UserDO.class); rule.addDeptColumn(SysDeptDO.class, "id"); }; } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/dict/DictDataRefreshConsumer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/dict/DictDataRefreshConsumer.java index 6fe1c7c6a7..e466f96b22 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/dict/DictDataRefreshConsumer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/dict/DictDataRefreshConsumer.java @@ -1,8 +1,8 @@ package cn.iocoder.yudao.module.system.mq.consumer.dict; -import cn.iocoder.yudao.coreservice.modules.system.service.dict.SysDictDataCoreService; import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener; import cn.iocoder.yudao.module.system.mq.message.dict.DictDataRefreshMessage; +import cn.iocoder.yudao.module.system.service.dict.DictDataService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -18,12 +18,12 @@ import javax.annotation.Resource; public class DictDataRefreshConsumer extends AbstractChannelMessageListener { @Resource - private SysDictDataCoreService dictDataCoreService; + private DictDataService dictDataService; @Override public void onMessage(DictDataRefreshMessage message) { log.info("[onMessage][收到 DictData 刷新消æ¯]"); - dictDataCoreService.initLocalCache(); + dictDataService.initLocalCache(); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsSendConsumer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsSendConsumer.java index 2239eecc18..6779549dbd 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsSendConsumer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsSendConsumer.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.mq.consumer.sms; -import cn.iocoder.yudao.coreservice.modules.system.mq.message.sms.SysSmsSendMessage; -import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsCoreService; +import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage; +import cn.iocoder.yudao.module.system.service.sms.SysSmsSendService; import cn.iocoder.yudao.framework.mq.core.stream.AbstractStreamMessageListener; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -9,20 +9,20 @@ import org.springframework.stereotype.Component; import javax.annotation.Resource; /** - * 针对 {@link SysSmsSendMessage} 的消费者 + * 针对 {@link SmsSendMessage} 的消费者 * * @author zzf * @date 2021/3/9 16:35 */ @Component @Slf4j -public class SmsSendConsumer extends AbstractStreamMessageListener { +public class SmsSendConsumer extends AbstractStreamMessageListener { @Resource - private SysSmsCoreService smsCoreService; + private SysSmsSendService smsCoreService; @Override - public void onMessage(SysSmsSendMessage message) { + public void onMessage(SmsSendMessage message) { log.info("[onMessage][消æ¯å†…容({})]", message); smsCoreService.doSendSms(message); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsTemplateRefreshConsumer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsTemplateRefreshConsumer.java index 52840189a8..02bc599842 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsTemplateRefreshConsumer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsTemplateRefreshConsumer.java @@ -1,8 +1,8 @@ package cn.iocoder.yudao.module.system.mq.consumer.sms; import cn.iocoder.yudao.module.system.mq.message.sms.SmsTemplateRefreshMessage; -import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsTemplateCoreService; import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener; +import cn.iocoder.yudao.module.system.service.sms.SmsTemplateService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -18,12 +18,12 @@ import javax.annotation.Resource; public class SmsTemplateRefreshConsumer extends AbstractChannelMessageListener { @Resource - private SysSmsTemplateCoreService smsTemplateCoreService; + private SmsTemplateService smsTemplateService; @Override public void onMessage(SmsTemplateRefreshMessage message) { log.info("[onMessage][收到 SmsTemplate 刷新消æ¯]"); - smsTemplateCoreService.initLocalCache(); + smsTemplateService.initLocalCache(); } } diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/mq/message/sms/SysSmsSendMessage.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/sms/SmsSendMessage.java similarity index 88% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/mq/message/sms/SysSmsSendMessage.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/sms/SmsSendMessage.java index 19c7d044cd..42a32623a9 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/mq/message/sms/SysSmsSendMessage.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/message/sms/SmsSendMessage.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.system.mq.message.sms; +package cn.iocoder.yudao.module.system.mq.message.sms; import cn.iocoder.yudao.framework.common.core.KeyValue; import cn.iocoder.yudao.framework.mq.core.stream.AbstractStreamMessage; @@ -15,7 +15,7 @@ import java.util.List; */ @Data @EqualsAndHashCode(callSuper = true) -public class SysSmsSendMessage extends AbstractStreamMessage { +public class SmsSendMessage extends AbstractStreamMessage { /** * çŸ­ä¿¡æ—¥å¿—ç¼–å· diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/package-info.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/package-info.java new file mode 100644 index 0000000000..255ab310c9 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/package-info.java @@ -0,0 +1,4 @@ +/** + * å ä½ + */ +package cn.iocoder.yudao.module.system.mq.producer; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/sms/SmsProducer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/sms/SmsProducer.java index 117e666b9e..e14fb953bf 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/sms/SmsProducer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/producer/sms/SmsProducer.java @@ -1,12 +1,15 @@ package cn.iocoder.yudao.module.system.mq.producer.sms; +import cn.iocoder.yudao.framework.common.core.KeyValue; import cn.iocoder.yudao.module.system.mq.message.sms.SmsChannelRefreshMessage; +import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage; import cn.iocoder.yudao.module.system.mq.message.sms.SmsTemplateRefreshMessage; import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.util.List; /** * Sms 短信相关消æ¯çš„ Producer @@ -37,4 +40,20 @@ public class SmsProducer { redisMQTemplate.send(message); } + /** + * å‘é€ {@link SmsSendMessage} æ¶ˆæ¯ + * + * @param logId çŸ­ä¿¡æ—¥å¿—ç¼–å· + * @param mobile æ‰‹æœºå· + * @param channelId 渠é“ç¼–å· + * @param apiTemplateId 短信模æ¿ç¼–å· + * @param templateParams 短信模æ¿å‚æ•° + */ + public void sendSmsSendMessage(Long logId, String mobile, + Long channelId, String apiTemplateId, List> templateParams) { + SmsSendMessage message = new SmsSendMessage().setLogId(logId).setMobile(mobile); + message.setChannelId(channelId).setApiTemplateId(apiTemplateId).setTemplateParams(templateParams); + redisMQTemplate.send(message); + } + } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AuthServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AuthServiceImpl.java index a0a45e7d71..1d1df61392 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AuthServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AuthServiceImpl.java @@ -1,33 +1,30 @@ package cn.iocoder.yudao.module.system.service.auth; import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthLoginReqVO; -import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthSocialBindReqVO; -import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthSocialLogin2ReqVO; -import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthSocialLoginReqVO; -import cn.iocoder.yudao.module.system.convert.auth.AuthConvert; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; -import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum; -import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum; -import cn.iocoder.yudao.module.system.service.common.CaptchaService; -import cn.iocoder.yudao.module.system.service.dept.PostService; -import cn.iocoder.yudao.module.system.service.permission.PermissionService; -import cn.iocoder.yudao.module.system.service.user.UserService; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.social.SysSocialUserDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLogCreateReqDTO; -import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils; import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.framework.security.core.authentication.MultiUsernamePasswordAuthenticationToken; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthLoginReqVO; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthSocialBindReqVO; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthSocialLogin2ReqVO; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthSocialLoginReqVO; +import cn.iocoder.yudao.module.system.convert.auth.AuthConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.social.SysSocialUserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum; +import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum; +import cn.iocoder.yudao.module.system.service.common.CaptchaService; +import cn.iocoder.yudao.module.system.service.logger.LoginLogService; +import cn.iocoder.yudao.module.system.service.logger.dto.LoginLogCreateReqDTO; +import cn.iocoder.yudao.module.system.service.permission.PermissionService; +import cn.iocoder.yudao.module.system.service.social.SocialUserService; +import cn.iocoder.yudao.module.system.service.user.UserService; import lombok.extern.slf4j.Slf4j; import me.zhyd.oauth.model.AuthUser; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.BadCredentialsException; @@ -40,14 +37,12 @@ import org.springframework.stereotype.Service; import org.springframework.util.Assert; import javax.annotation.Resource; -import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.Set; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static java.util.Collections.singleton; /** @@ -63,27 +58,24 @@ public class AuthServiceImpl implements AuthService { @Lazy // 延迟加载,因为存在相互ä¾èµ–的问题 private AuthenticationManager authenticationManager; - @Resource + @Autowired + @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") // UserService 存在é‡å private UserService userService; @Resource - private SysUserCoreService userCoreService; - @Resource private PermissionService permissionService; @Resource private CaptchaService captchaService; @Resource - private SysLoginLogCoreService loginLogCoreService; + private LoginLogService loginLogService; @Resource - private SysUserSessionCoreService userSessionCoreService; + private UserSessionService userSessionService; @Resource - private PostService postService; - @Resource - private SysSocialCoreService socialService; + private SocialUserService socialService; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // èŽ·å– username 对应的 SysUserDO - SysUserDO user = userService.getUserByUsername(username); + UserDO user = userService.getUserByUsername(username); if (user == null) { throw new UsernameNotFoundException(username); } @@ -94,7 +86,7 @@ public class AuthServiceImpl implements AuthService { @Override public LoginUser mockLogin(Long userId) { // 获å–用户编å·å¯¹åº”çš„ SysUserDO - SysUserDO user = userCoreService.getUser(userId); + UserDO user = userService.getUser(userId); if (user == null) { throw new UsernameNotFoundException(String.valueOf(userId)); } @@ -113,14 +105,7 @@ public class AuthServiceImpl implements AuthService { LoginUser loginUser = this.login0(reqVO.getUsername(), reqVO.getPassword()); // 缓存登陆用户到 Redis 中,返回 sessionId ç¼–å· - return userSessionCoreService.createUserSession(loginUser, userIp, userAgent); - } - - private List getUserPosts(Set postIds) { - if (CollUtil.isEmpty(postIds)) { - return Collections.emptyList(); - } - return convertList(postService.getPosts(postIds), SysPostDO::getCode); + return userSessionService.createUserSession(loginUser, userIp, userAgent); } private void verifyCaptcha(String username, String captchaUUID, String captchaCode) { @@ -175,9 +160,9 @@ public class AuthServiceImpl implements AuthService { private void createLoginLog(String username, LoginLogTypeEnum logTypeEnum, LoginResultEnum loginResult) { // 获得用户 - SysUserDO user = userService.getUserByUsername(username); + UserDO user = userService.getUserByUsername(username); // æ’入登录日志 - SysLoginLogCreateReqDTO reqDTO = new SysLoginLogCreateReqDTO(); + LoginLogCreateReqDTO reqDTO = new LoginLogCreateReqDTO(); reqDTO.setLogType(logTypeEnum.getType()); reqDTO.setTraceId(TracerUtils.getTraceId()); if (user != null) { @@ -188,7 +173,7 @@ public class AuthServiceImpl implements AuthService { reqDTO.setUserAgent(ServletUtils.getUserAgent()); reqDTO.setUserIp(ServletUtils.getClientIP()); reqDTO.setResult(loginResult.getResult()); - loginLogCoreService.createLoginLog(reqDTO); + loginLogService.createLoginLog(reqDTO); // 更新最åŽç™»å½•æ—¶é—´ if (user != null && Objects.equals(LoginResultEnum.SUCCESS.getResult(), loginResult.getResult())) { userService.updateUserLogin(user.getId(), ServletUtils.getClientIP()); @@ -219,7 +204,7 @@ public class AuthServiceImpl implements AuthService { } // 自动登录 - SysUserDO user = userCoreService.getUser(socialUsers.get(0).getUserId()); + UserDO user = userService.getUser(socialUsers.get(0).getUserId()); if (user == null) { throw exception(USER_NOT_EXISTS); } @@ -232,7 +217,7 @@ public class AuthServiceImpl implements AuthService { socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, getUserType()); // 缓存登录用户到 Redis 中,返回 sessionId ç¼–å· - return userSessionCoreService.createUserSession(loginUser, userIp, userAgent); + return userSessionService.createUserSession(loginUser, userIp, userAgent); } @Override @@ -248,7 +233,7 @@ public class AuthServiceImpl implements AuthService { socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, getUserType()); // 缓存登录用户到 Redis 中,返回 sessionId ç¼–å· - return userSessionCoreService.createUserSession(loginUser, userIp, userAgent); + return userSessionService.createUserSession(loginUser, userIp, userAgent); } @Override @@ -264,12 +249,12 @@ public class AuthServiceImpl implements AuthService { @Override public void logout(String token) { // æŸ¥è¯¢ç”¨æˆ·ä¿¡æ¯ - LoginUser loginUser = userSessionCoreService.getLoginUser(token); + LoginUser loginUser = userSessionService.getLoginUser(token); if (loginUser == null) { return; } // 删除 session - userSessionCoreService.deleteUserSession(token); + userSessionService.deleteUserSession(token); // 记录登出日志 this.createLogoutLog(loginUser.getId(), loginUser.getUsername()); } @@ -280,7 +265,7 @@ public class AuthServiceImpl implements AuthService { } private void createLogoutLog(Long userId, String username) { - SysLoginLogCreateReqDTO reqDTO = new SysLoginLogCreateReqDTO(); + LoginLogCreateReqDTO reqDTO = new LoginLogCreateReqDTO(); reqDTO.setLogType(LoginLogTypeEnum.LOGOUT_SELF.getType()); reqDTO.setTraceId(TracerUtils.getTraceId()); reqDTO.setUserId(userId); @@ -289,13 +274,13 @@ public class AuthServiceImpl implements AuthService { reqDTO.setUserAgent(ServletUtils.getUserAgent()); reqDTO.setUserIp(ServletUtils.getClientIP()); reqDTO.setResult(LoginResultEnum.SUCCESS.getResult()); - loginLogCoreService.createLoginLog(reqDTO); + loginLogService.createLoginLog(reqDTO); } @Override public LoginUser verifyTokenAndRefresh(String token) { // 获得 LoginUser - LoginUser loginUser = userSessionCoreService.getLoginUser(token); + LoginUser loginUser = userSessionService.getLoginUser(token); if (loginUser == null) { return null; } @@ -306,23 +291,23 @@ public class AuthServiceImpl implements AuthService { private LoginUser refreshLoginUserCache(String token, LoginUser loginUser) { // æ¯ 1/3 çš„ Session 超时时间,刷新 LoginUser 缓存 if (System.currentTimeMillis() - loginUser.getUpdateTime().getTime() < - userSessionCoreService.getSessionTimeoutMillis() / 3) { + userSessionService.getSessionTimeoutMillis() / 3) { return loginUser; } // 釿–°åŠ è½½ SysUserDO ä¿¡æ¯ - SysUserDO user = userCoreService.getUser(loginUser.getId()); + UserDO user = userService.getUser(loginUser.getId()); if (user == null || CommonStatusEnum.DISABLE.getStatus().equals(user.getStatus())) { throw exception(AUTH_TOKEN_EXPIRED); // 校验 token 时,用户被ç¦ç”¨çš„æƒ…况下,也认为 token 过期,方便å‰ç«¯è·³è½¬åˆ°ç™»å½•ç•Œé¢ } // 刷新 LoginUser 缓存 LoginUser newLoginUser= this.buildLoginUser(user); - userSessionCoreService.refreshUserSession(token, newLoginUser); + userSessionService.refreshUserSession(token, newLoginUser); return newLoginUser; } - private LoginUser buildLoginUser(SysUserDO user) { + private LoginUser buildLoginUser(UserDO user) { LoginUser loginUser = AuthConvert.INSTANCE.convert(user); // 补全字段 loginUser.setDeptId(user.getDeptId()); diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionService.java index af318fec4f..ef9e92caab 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionService.java @@ -1,7 +1,8 @@ package cn.iocoder.yudao.module.system.service.auth; +import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.session.UserSessionPageReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO; +import cn.iocoder.yudao.module.system.dal.dataobject.auth.SysUserSessionDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; /** @@ -26,4 +27,44 @@ public interface UserSessionService { **/ long clearSessionTimeout(); + /** + * 创建在线用户 Session + * + * @param loginUser 登录用户 + * @param userIp 用户 IP + * @param userAgent 用户 UA + * @return Session ç¼–å· + */ + String createUserSession(LoginUser loginUser, String userIp, String userAgent); + + /** + * 刷新在线用户 Session 的更新时间 + * + * @param sessionId Session ç¼–å· + * @param loginUser 登录用户 + */ + void refreshUserSession(String sessionId, LoginUser loginUser); + + /** + * 删除在线用户 Session + * + * @param sessionId Session ç¼–å· + */ + void deleteUserSession(String sessionId); + + /** + * 获得 Session ç¼–å·å¯¹åº”的在线用户 + * + * @param sessionId Session ç¼–å· + * @return 在线用户 + */ + LoginUser getLoginUser(String sessionId); + + /** + * 获得 Session 超时时间,å•ä½ï¼šæ¯«ç§’ + * + * @return è¶…æ—¶æ—¶é—´ + */ + Long getSessionTimeoutMillis(); + } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImpl.java index 23d68cd6e3..cadc899d5d 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImpl.java @@ -1,17 +1,20 @@ package cn.iocoder.yudao.module.system.service.auth; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; +import cn.iocoder.yudao.framework.security.config.SecurityProperties; +import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.session.UserSessionPageReqVO; import cn.iocoder.yudao.module.system.dal.mysql.auth.SysUserSessionMapper; import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum; import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum; +import cn.iocoder.yudao.module.system.service.logger.LoginLogService; import cn.iocoder.yudao.module.system.service.user.UserService; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.redis.auth.SysLoginUserCoreRedisDAO; -import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLogCreateReqDTO; +import cn.iocoder.yudao.module.system.dal.dataobject.auth.SysUserSessionDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.system.dal.redis.auth.LoginUserRedisDAO; +import cn.iocoder.yudao.module.system.service.logger.dto.LoginLogCreateReqDTO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils; import com.google.common.collect.Lists; @@ -19,13 +22,12 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; +import java.time.Duration; +import java.util.*; import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.addTime; /** * 在线用户 Session Service 实现类 @@ -38,20 +40,24 @@ public class UserSessionServiceImpl implements UserSessionService { @Resource private SysUserSessionMapper userSessionMapper; + @Resource private UserService userService; @Resource - private SysLoginLogCoreService loginLogCoreService; + private LoginLogService loginLogService; @Resource - private SysLoginUserCoreRedisDAO loginUserCoreRedisDAO; + private LoginUserRedisDAO loginUserCoreRedisDAO; + + @Resource + private SecurityProperties securityProperties; @Override public PageResult getUserSessionPage(UserSessionPageReqVO reqVO) { // 处ç†åŸºäºŽç”¨æˆ·æ˜µç§°çš„æŸ¥è¯¢ Collection userIds = null; if (StrUtil.isNotEmpty(reqVO.getUsername())) { - userIds = convertSet(userService.getUsersByUsername(reqVO.getUsername()), SysUserDO::getId); + userIds = convertSet(userService.getUsersByUsername(reqVO.getUsername()), UserDO::getId); if (CollUtil.isEmpty(userIds)) { return PageResult.empty(); } @@ -80,7 +86,7 @@ public class UserSessionServiceImpl implements UserSessionService { private void createTimeoutLogoutLog(Collection timeoutSessionDOS) { for (SysUserSessionDO timeoutSessionDO : timeoutSessionDOS) { - SysLoginLogCreateReqDTO reqDTO = new SysLoginLogCreateReqDTO(); + LoginLogCreateReqDTO reqDTO = new LoginLogCreateReqDTO(); reqDTO.setLogType(LoginLogTypeEnum.LOGOUT_TIMEOUT.getType()); reqDTO.setTraceId(TracerUtils.getTraceId()); reqDTO.setUserId(timeoutSessionDO.getUserId()); @@ -89,8 +95,66 @@ public class UserSessionServiceImpl implements UserSessionService { reqDTO.setUserAgent(timeoutSessionDO.getUserAgent()); reqDTO.setUserIp(timeoutSessionDO.getUserIp()); reqDTO.setResult(LoginResultEnum.SUCCESS.getResult()); - loginLogCoreService.createLoginLog(reqDTO); + loginLogService.createLoginLog(reqDTO); } } + @Override + public String createUserSession(LoginUser loginUser, String userIp, String userAgent) { + // ç”Ÿæˆ Session ç¼–å· + String sessionId = generateSessionId(); + // 写入 Redis 缓存 + loginUser.setUpdateTime(new Date()); + loginUserCoreRedisDAO.set(sessionId, loginUser); + // 写入 DB 中 + SysUserSessionDO userSession = SysUserSessionDO.builder().id(sessionId) + .userId(loginUser.getId()).userType(loginUser.getUserType()) + .userIp(userIp).userAgent(userAgent).username(loginUser.getUsername()) + .sessionTimeout(addTime(Duration.ofMillis(getSessionTimeoutMillis()))) + .build(); + userSessionMapper.insert(userSession); + // 返回 Session ç¼–å· + return sessionId; + } + + @Override + public void refreshUserSession(String sessionId, LoginUser loginUser) { + // 写入 Redis 缓存 + loginUser.setUpdateTime(new Date()); + loginUserCoreRedisDAO.set(sessionId, loginUser); + // æ›´æ–° DB 中 + SysUserSessionDO updateObj = SysUserSessionDO.builder().id(sessionId).build(); + updateObj.setUsername(loginUser.getUsername()); + updateObj.setUpdateTime(new Date()); + updateObj.setSessionTimeout(addTime(Duration.ofMillis(getSessionTimeoutMillis()))); + userSessionMapper.updateById(updateObj); + } + + @Override + public void deleteUserSession(String sessionId) { + // 删除 Redis 缓存 + loginUserCoreRedisDAO.delete(sessionId); + // 删除 DB 记录 + userSessionMapper.deleteById(sessionId); + } + + @Override + public LoginUser getLoginUser(String sessionId) { + return loginUserCoreRedisDAO.get(sessionId); + } + + @Override + public Long getSessionTimeoutMillis() { + return securityProperties.getSessionTimeout().toMillis(); + } + + /** + * ç”Ÿæˆ Session ç¼–å·ï¼Œç›®å‰é‡‡ç”¨ UUID 算法 + * + * @return Session ç¼–å· + */ + private static String generateSessionId() { + return IdUtil.fastSimpleUUID(); + } + } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptService.java index e8397b542a..33ef52f8e5 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptService.java @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.system.service.dept; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptCreateReqVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptUpdateReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; import java.util.List; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java index 2f9c1a7139..bd269d9cc2 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java @@ -9,7 +9,7 @@ import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqV import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptUpdateReqVO; import cn.iocoder.yudao.module.system.convert.dept.DeptConvert; import cn.iocoder.yudao.module.system.dal.mysql.dept.SysDeptMapper; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.module.system.enums.dept.DeptIdEnum; import cn.iocoder.yudao.module.system.mq.producer.dept.DeptProducer; import com.google.common.collect.ImmutableMap; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostService.java index 73e9759b72..5e2dc33e7c 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostService.java @@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostCreateRe import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostUpdateReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; import org.springframework.lang.Nullable; import java.util.Collection; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostServiceImpl.java index 971743a29d..a498ce3dcb 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostServiceImpl.java @@ -8,7 +8,7 @@ import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostPageReqV import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostUpdateReqVO; import cn.iocoder.yudao.module.system.convert.dept.PostConvert; import cn.iocoder.yudao.module.system.dal.mysql.dept.SysPostMapper; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dept/SysDeptCoreService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysDeptCoreService.java similarity index 90% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dept/SysDeptCoreService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysDeptCoreService.java index e963e51e0d..92c0fdbc0c 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dept/SysDeptCoreService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysDeptCoreService.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.dept; +package cn.iocoder.yudao.module.system.service.dept; import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import java.util.Collection; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dept/SysPostCoreService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysPostCoreService.java similarity index 84% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dept/SysPostCoreService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysPostCoreService.java index 14a0653adb..5ce996ed50 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dept/SysPostCoreService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysPostCoreService.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.dept; +package cn.iocoder.yudao.module.system.service.dept; import java.util.Collection; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dept/impl/SysDeptCoreServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/impl/SysDeptCoreServiceImpl.java similarity index 74% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dept/impl/SysDeptCoreServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/impl/SysDeptCoreServiceImpl.java index 4cfa49ed22..032e5e3789 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dept/impl/SysDeptCoreServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/impl/SysDeptCoreServiceImpl.java @@ -1,22 +1,21 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.dept.impl; +package cn.iocoder.yudao.module.system.service.dept.impl; import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.dept.SysDeptCoreMapper; -import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.mysql.dept.SysDeptCoreMapper; +import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.util.Collection; import java.util.List; import java.util.Map; -import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.DEPT_NOT_ENABLE; -import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.DEPT_NOT_FOUND; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.DEPT_NOT_ENABLE; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.DEPT_NOT_FOUND; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dept/impl/SysPostCoreServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/impl/SysPostCoreServiceImpl.java similarity index 71% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dept/impl/SysPostCoreServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/impl/SysPostCoreServiceImpl.java index 0e2b2b928f..d0bc198743 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/dept/impl/SysPostCoreServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/impl/SysPostCoreServiceImpl.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.dept.impl; +package cn.iocoder.yudao.module.system.service.dept.impl; import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.dept.SysPostCoreMapper; -import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysPostCoreService; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.module.system.dal.mysql.dept.SysPostCoreMapper; +import cn.iocoder.yudao.module.system.service.dept.SysPostCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import org.springframework.stereotype.Service; @@ -13,8 +13,8 @@ import java.util.Collection; import java.util.List; import java.util.Map; -import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.POST_NOT_ENABLE; -import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.POST_NOT_FOUND; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.POST_NOT_ENABLE; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.POST_NOT_FOUND; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataService.java index c7b60e0ad0..8d20c5aab1 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataService.java @@ -1,12 +1,14 @@ package cn.iocoder.yudao.module.system.service.dict; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO; +import cn.iocoder.yudao.framework.dict.core.service.DictDataFrameworkService; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictDataDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataCreateReqVO; import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataUpdateReqVO; +import java.util.Collection; import java.util.List; /** @@ -14,7 +16,12 @@ import java.util.List; * * @author ruoyi */ -public interface DictDataService { +public interface DictDataService extends DictDataFrameworkService { + + /** + * åˆå§‹åŒ–字典数æ®çš„æœ¬åœ°ç¼“å­˜ + */ + void initLocalCache(); /** * åˆ›å»ºå­—å…¸æ•°æ® @@ -77,4 +84,14 @@ public interface DictDataService { */ int countByDictType(String dictType); + /** + * 校验字典数æ®ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: + * 1. 字典数æ®ä¸å­˜åœ¨ + * 2. 字典数æ®è¢«ç¦ç”¨ + * + * @param dictType 字典类型 + * @param values 字典数æ®å€¼çš„æ•°ç»„ + */ + void validDictDatas(String dictType, Collection values); + } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceImpl.java index 0d25f87ca5..b483f41675 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceImpl.java @@ -1,27 +1,36 @@ package cn.iocoder.yudao.module.system.service.dict; +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.dict.core.dto.DictDataRespDTO; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataCreateReqVO; import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataUpdateReqVO; import cn.iocoder.yudao.module.system.convert.dict.DictDataConvert; +import cn.iocoder.yudao.module.system.convert.dict.SysDictDataCoreConvert; import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictTypeDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictDataDO; import cn.iocoder.yudao.module.system.dal.mysql.dict.SysDictDataMapper; import cn.iocoder.yudao.module.system.mq.producer.dict.DictDataProducer; -import cn.iocoder.yudao.module.system.service.dict.DictDataService; -import cn.iocoder.yudao.module.system.service.dict.DictTypeService; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableTable; import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; +import javax.annotation.PostConstruct; import javax.annotation.Resource; -import java.util.*; +import java.util.Collection; +import java.util.Comparator; +import java.util.Date; +import java.util.List; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; /** * å­—å…¸æ•°æ® Service 实现类 @@ -39,6 +48,12 @@ public class DictDataServiceImpl implements DictDataService { .comparing(SysDictDataDO::getDictType) .thenComparingInt(SysDictDataDO::getSort); + /** + * 定时执行 {@link #schedulePeriodicRefresh()} 的周期 + * 因为已ç»é€šè¿‡ Redis Pub/Sub 机制,所以频率ä¸éœ€è¦é«˜ + */ + private static final long SCHEDULER_PERIOD = 5 * 60 * 1000L; + @Resource private DictTypeService dictTypeService; @@ -48,6 +63,48 @@ public class DictDataServiceImpl implements DictDataService { @Resource private DictDataProducer dictDataProducer; + /** + * 字典数æ®ç¼“存,第二个 key 使用 label + * + * key1:字典类型 dictType + * key2:字典标签 label + */ + private ImmutableTable labelDictDataCache; + /** + * 字典数æ®ç¼“存,第二个 key 使用 value + * + * key1:字典类型 dictType + * key2:字典值 value + */ + private ImmutableTable valueDictDataCache; + /** + * 缓存字典数æ®çš„æœ€å¤§æ›´æ–°æ—¶é—´ï¼Œç”¨äºŽåŽç»­çš„增é‡è½®è¯¢ï¼Œåˆ¤æ–­æ˜¯å¦æœ‰æ›´æ–° + */ + private volatile Date maxUpdateTime; + + @Override + @PostConstruct + public synchronized void initLocalCache() { + // 获å–字典数æ®åˆ—表,如果有更新 + List dataList = loadDictDataIfUpdate(maxUpdateTime); + if (CollUtil.isEmpty(dataList)) { + return; + } + + // 构建缓存 + ImmutableTable.Builder labelDictDataBuilder = ImmutableTable.builder(); + ImmutableTable.Builder valueDictDataBuilder = ImmutableTable.builder(); + dataList.forEach(dictData -> { + labelDictDataBuilder.put(dictData.getDictType(), dictData.getLabel(), dictData); + valueDictDataBuilder.put(dictData.getDictType(), dictData.getValue(), dictData); + }); + labelDictDataCache = labelDictDataBuilder.build(); + valueDictDataCache = valueDictDataBuilder.build(); + assert dataList.size() > 0; // 断言,é¿å…告警 + maxUpdateTime = dataList.stream().max(Comparator.comparing(BaseDO::getUpdateTime)).get().getUpdateTime(); + log.info("[initLocalCache][缓存字典数æ®ï¼Œæ•°é‡ä¸º:{}]", dataList.size()); + } + /** * 如果字典数æ®å‘生å˜åŒ–,从数æ®åº“ä¸­èŽ·å–æœ€æ–°çš„å…¨é‡å­—典数æ®ã€‚ * 如果未å‘生å˜åŒ–,则返回空 @@ -69,6 +126,11 @@ public class DictDataServiceImpl implements DictDataService { return dictDataMapper.selectList(); } + @Scheduled(fixedDelay = SCHEDULER_PERIOD, initialDelay = SCHEDULER_PERIOD) + public void schedulePeriodicRefresh() { + initLocalCache(); + } + @Override public List getDictDatas() { List list = dictDataMapper.selectList(); @@ -93,13 +155,30 @@ public class DictDataServiceImpl implements DictDataService { return dictDataMapper.selectById(id); } + @Override + public DictDataRespDTO getDictDataFromCache(String type, String value) { + return SysDictDataCoreConvert.INSTANCE.convert02(valueDictDataCache.get(type, value)); + } + + @Override + public DictDataRespDTO parseDictDataFromCache(String type, String label) { + return SysDictDataCoreConvert.INSTANCE.convert02(labelDictDataCache.get(type, label)); + } + + @Override + public List listDictDatasFromCache(String type) { + return SysDictDataCoreConvert.INSTANCE.convertList03(labelDictDataCache.row(type).values()); + } + @Override public Long createDictData(DictDataCreateReqVO reqVO) { // 校验正确性 - this.checkCreateOrUpdate(null, reqVO.getValue(), reqVO.getDictType()); + checkCreateOrUpdate(null, reqVO.getValue(), reqVO.getDictType()); + // æ’入字典类型 SysDictDataDO dictData = DictDataConvert.INSTANCE.convert(reqVO); dictDataMapper.insert(dictData); + // å‘é€åˆ·æ–°æ¶ˆæ¯ dictDataProducer.sendDictDataRefreshMessage(); return dictData.getId(); @@ -108,10 +187,12 @@ public class DictDataServiceImpl implements DictDataService { @Override public void updateDictData(DictDataUpdateReqVO reqVO) { // 校验正确性 - this.checkCreateOrUpdate(reqVO.getId(), reqVO.getValue(), reqVO.getDictType()); + checkCreateOrUpdate(reqVO.getId(), reqVO.getValue(), reqVO.getDictType()); + // 更新字典类型 SysDictDataDO updateObj = DictDataConvert.INSTANCE.convert(reqVO); dictDataMapper.updateById(updateObj); + // å‘é€åˆ·æ–°æ¶ˆæ¯ dictDataProducer.sendDictDataRefreshMessage(); } @@ -119,9 +200,11 @@ public class DictDataServiceImpl implements DictDataService { @Override public void deleteDictData(Long id) { // 校验是å¦å­˜åœ¨ - this.checkDictDataExists(id); + checkDictDataExists(id); + // åˆ é™¤å­—å…¸æ•°æ® dictDataMapper.deleteById(id); + // å‘é€åˆ·æ–°æ¶ˆæ¯ dictDataProducer.sendDictDataRefreshMessage(); } @@ -178,4 +261,22 @@ public class DictDataServiceImpl implements DictDataService { } } + @Override + public void validDictDatas(String dictType, Collection values) { + if (CollUtil.isEmpty(values)) { + return; + } + ImmutableMap dictDataMap = valueDictDataCache.row(dictType); + // 校验 + values.forEach(value -> { + SysDictDataDO dictData = dictDataMap.get(value); + if (dictData == null) { + throw exception(DICT_DATA_NOT_EXISTS); + } + if (!CommonStatusEnum.ENABLE.getStatus().equals(dictData.getStatus())) { + throw exception(DICT_DATA_NOT_ENABLE, dictData.getLabel()); + } + }); + } + } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictTypeServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictTypeServiceImpl.java index 222269b511..b9bcaf61e8 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictTypeServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictTypeServiceImpl.java @@ -54,7 +54,7 @@ public class DictTypeServiceImpl implements DictTypeService { @Override public Long createDictType(DictTypeCreateReqVO reqVO) { // 校验正确性 - this.checkCreateOrUpdate(null, reqVO.getName(), reqVO.getType()); + checkCreateOrUpdate(null, reqVO.getName(), reqVO.getType()); // æ’入字典类型 DictTypeDO dictType = DictTypeConvert.INSTANCE.convert(reqVO); dictTypeMapper.insert(dictType); @@ -64,7 +64,7 @@ public class DictTypeServiceImpl implements DictTypeService { @Override public void updateDictType(DictTypeUpdateReqVO reqVO) { // 校验正确性 - this.checkCreateOrUpdate(reqVO.getId(), reqVO.getName(), null); + checkCreateOrUpdate(reqVO.getId(), reqVO.getName(), null); // 更新字典类型 DictTypeDO updateObj = DictTypeConvert.INSTANCE.convert(reqVO); dictTypeMapper.updateById(updateObj); @@ -73,7 +73,7 @@ public class DictTypeServiceImpl implements DictTypeService { @Override public void deleteDictType(Long id) { // 校验是å¦å­˜åœ¨ - DictTypeDO dictType = this.checkDictTypeExists(id); + DictTypeDO dictType = checkDictTypeExists(id); // æ ¡éªŒæ˜¯å¦æœ‰å­—å…¸æ•°æ® if (dictDataService.countByDictType(dictType.getType()) > 0) { throw exception(DICT_TYPE_HAS_CHILDREN); diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogService.java index 7643fe1151..f900f0baec 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogService.java @@ -2,8 +2,9 @@ package cn.iocoder.yudao.module.system.service.logger; import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO; +import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysLoginLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.system.service.logger.dto.LoginLogCreateReqDTO; import java.util.List; @@ -28,4 +29,11 @@ public interface LoginLogService { */ List getLoginLogList(LoginLogExportReqVO reqVO); + /** + * 创建登录日志 + * + * @param reqDTO æ—¥å¿—ä¿¡æ¯ + */ + void createLoginLog(LoginLogCreateReqDTO reqDTO); + } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImpl.java index d2f35aee8b..c352748724 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImpl.java @@ -2,9 +2,12 @@ package cn.iocoder.yudao.module.system.service.logger; import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO; +import cn.iocoder.yudao.module.system.convert.logger.SysLoginLogCoreConvert; import cn.iocoder.yudao.module.system.dal.mysql.logger.LoginLogMapper; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO; +import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysLoginLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.system.dal.mysql.logger.SysLoginLogCoreMapper; +import cn.iocoder.yudao.module.system.service.logger.dto.LoginLogCreateReqDTO; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -29,4 +32,11 @@ public class LoginLogServiceImpl implements LoginLogService { return loginLogMapper.selectList(reqVO); } + @Override + public void createLoginLog(LoginLogCreateReqDTO reqDTO) { + SysLoginLogDO loginLog = SysLoginLogCoreConvert.INSTANCE.convert(reqDTO); + // æ’å…¥ + loginLogMapper.insert(loginLog); + } + } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImpl.java index fab8ddfaa9..d32b0e505b 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImpl.java @@ -8,7 +8,7 @@ import cn.iocoder.yudao.module.system.convert.logger.OperateLogConvert; import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO; import cn.iocoder.yudao.module.system.dal.mysql.logger.OperateLogMapper; import cn.iocoder.yudao.module.system.service.user.UserService; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.string.StrUtils; import cn.iocoder.yudao.framework.operatelog.core.dto.OperateLogCreateReqDTO; @@ -58,7 +58,7 @@ public class OperateLogServiceImpl implements OperateLogService { // 处ç†åŸºäºŽç”¨æˆ·æ˜µç§°çš„æŸ¥è¯¢ Collection userIds = null; if (StrUtil.isNotEmpty(reqVO.getUserNickname())) { - userIds = convertSet(userService.getUsersByNickname(reqVO.getUserNickname()), SysUserDO::getId); + userIds = convertSet(userService.getUsersByNickname(reqVO.getUserNickname()), UserDO::getId); if (CollUtil.isEmpty(userIds)) { return PageResult.empty(); } @@ -72,7 +72,7 @@ public class OperateLogServiceImpl implements OperateLogService { // 处ç†åŸºäºŽç”¨æˆ·æ˜µç§°çš„æŸ¥è¯¢ Collection userIds = null; if (StrUtil.isNotEmpty(reqVO.getUserNickname())) { - userIds = convertSet(userService.getUsersByNickname(reqVO.getUserNickname()), SysUserDO::getId); + userIds = convertSet(userService.getUsersByNickname(reqVO.getUserNickname()), UserDO::getId); if (CollUtil.isEmpty(userIds)) { return Collections.emptyList(); } diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/logger/dto/SysLoginLogCreateReqDTO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/dto/LoginLogCreateReqDTO.java similarity index 91% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/logger/dto/SysLoginLogCreateReqDTO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/dto/LoginLogCreateReqDTO.java index 4dddf9df81..5072053c95 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/logger/dto/SysLoginLogCreateReqDTO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/dto/LoginLogCreateReqDTO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.logger.dto; +package cn.iocoder.yudao.module.system.service.logger.dto; import lombok.Data; @@ -13,7 +13,7 @@ import javax.validation.constraints.Size; * @author èŠ‹é“æºç  */ @Data -public class SysLoginLogCreateReqDTO { +public class LoginLogCreateReqDTO { /** * 日志类型 diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceImpl.java index b8da087304..d68e849930 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceImpl.java @@ -3,11 +3,11 @@ package cn.iocoder.yudao.module.system.service.permission; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ArrayUtil; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleMenuDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysUserRoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysUserRoleDO; import cn.iocoder.yudao.module.system.dal.mysql.permission.SysRoleMenuMapper; import cn.iocoder.yudao.module.system.dal.mysql.permission.SysUserRoleMapper; import cn.iocoder.yudao.module.system.mq.producer.permission.PermissionProducer; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleService.java index 0bf13785dd..def01146aa 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleService.java @@ -5,7 +5,7 @@ import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleCr import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleUpdateReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO; import org.springframework.lang.Nullable; import java.util.Collection; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceImpl.java index cd8cbe8197..095e87ddba 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceImpl.java @@ -11,7 +11,7 @@ import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePa import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleUpdateReqVO; import cn.iocoder.yudao.module.system.convert.permission.RoleConvert; import cn.iocoder.yudao.module.system.dal.mysql.permission.SysRoleMapper; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO; import cn.iocoder.yudao.module.system.enums.permission.RoleCodeEnum; import cn.iocoder.yudao.module.system.enums.permission.RoleTypeEnum; import cn.iocoder.yudao.module.system.mq.producer.permission.RoleProducer; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/permission/SysPermissionCoreService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysPermissionCoreService.java similarity index 86% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/permission/SysPermissionCoreService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysPermissionCoreService.java index 9f3032965e..5898038c49 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/permission/SysPermissionCoreService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysPermissionCoreService.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.permission; +package cn.iocoder.yudao.module.system.service.permission; import java.util.Collection; import java.util.Set; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/permission/SysRoleCoreService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysRoleCoreService.java similarity index 83% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/permission/SysRoleCoreService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysRoleCoreService.java index 1b43e42f71..17e8adb871 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/permission/SysRoleCoreService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysRoleCoreService.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.permission; +package cn.iocoder.yudao.module.system.service.permission; import java.util.Collection; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/permission/impl/SysPermissionCoreServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/impl/SysPermissionCoreServiceImpl.java similarity index 64% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/permission/impl/SysPermissionCoreServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/impl/SysPermissionCoreServiceImpl.java index b9618a93d2..100e076af6 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/permission/impl/SysPermissionCoreServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/impl/SysPermissionCoreServiceImpl.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.permission.impl; +package cn.iocoder.yudao.module.system.service.permission.impl; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysUserRoleDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.permission.SysUserRoleCoreMapper; -import cn.iocoder.yudao.coreservice.modules.system.service.permission.SysPermissionCoreService; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysUserRoleDO; +import cn.iocoder.yudao.module.system.dal.mysql.permission.SysUserRoleCoreMapper; +import cn.iocoder.yudao.module.system.service.permission.SysPermissionCoreService; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import org.springframework.stereotype.Service; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/permission/impl/SysRoleCoreServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/impl/SysRoleCoreServiceImpl.java similarity index 70% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/permission/impl/SysRoleCoreServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/impl/SysRoleCoreServiceImpl.java index ebeb7ea207..865eeb81ea 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/permission/impl/SysRoleCoreServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/impl/SysRoleCoreServiceImpl.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.permission.impl; +package cn.iocoder.yudao.module.system.service.permission.impl; import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.permission.SysRoleCoreMapper; -import cn.iocoder.yudao.coreservice.modules.system.service.permission.SysRoleCoreService; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.module.system.dal.mysql.permission.SysRoleCoreMapper; +import cn.iocoder.yudao.module.system.service.permission.SysRoleCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import org.springframework.stereotype.Service; @@ -13,8 +13,8 @@ import java.util.Collection; import java.util.List; import java.util.Map; -import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.ROLE_IS_DISABLE; -import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.ROLE_NOT_EXISTS; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.ROLE_IS_DISABLE; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.ROLE_NOT_EXISTS; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelService.java index d57a990c8e..f5950a23db 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelService.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.service.sms; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsChannelDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelCreateReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelPageReqVO; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceImpl.java index 6c26e82035..ef95af5f26 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceImpl.java @@ -7,7 +7,7 @@ import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannel import cn.iocoder.yudao.module.system.convert.sms.SmsChannelConvert; import cn.iocoder.yudao.module.system.dal.mysql.sms.SysSmsChannelMapper; import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsChannelDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.sms.core.client.SmsClientFactory; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogService.java index fcd66e7a1a..42c3457b64 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogService.java @@ -2,10 +2,13 @@ package cn.iocoder.yudao.module.system.service.sms; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogPageReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; +import java.util.Date; import java.util.List; +import java.util.Map; /** * 短信日志 Service æŽ¥å£ @@ -15,6 +18,46 @@ import java.util.List; */ public interface SmsLogService { + /** + * 创建短信日志 + * + * @param mobile æ‰‹æœºå· + * @param userId ç”¨æˆ·ç¼–å· + * @param userType 用户类型 + * @param isSend 是å¦å‘é€ + * @param template çŸ­ä¿¡æ¨¡æ¿ + * @param templateContent 短信内容 + * @param templateParams çŸ­ä¿¡å‚æ•° + * @return å‘逿—¥å¿—ç¼–å· + */ + Long createSmsLog(String mobile, Long userId, Integer userType, Boolean isSend, + SysSmsTemplateDO template, String templateContent, Map templateParams); + + /** + * 更新日志的å‘é€ç»“æžœ + * + * @param id æ—¥å¿—ç¼–å· + * @param sendCode å‘é€ç»“æžœçš„ç¼–ç  + * @param sendMsg å‘é€ç»“果的æç¤º + * @param apiSendCode 短信 API å‘é€ç»“æžœçš„ç¼–ç  + * @param apiSendMsg 短信 API å‘é€å¤±è´¥çš„æç¤º + * @param apiRequestId 短信 API å‘é€è¿”回的唯一请求 ID + * @param apiSerialNo 短信 API å‘é€è¿”回的åºå· + */ + void updateSmsSendResult(Long id, Integer sendCode, String sendMsg, + String apiSendCode, String apiSendMsg, String apiRequestId, String apiSerialNo); + + /** + * 更新日志的接收结果 + * + * @param id æ—¥å¿—ç¼–å· + * @param success æ˜¯å¦æŽ¥æ”¶æˆåŠŸ + * @param receiveTime 用户接收时间 + * @param apiReceiveCode API æŽ¥æ”¶ç»“æžœçš„ç¼–ç  + * @param apiReceiveMsg API 接收结果的说明 + */ + void updateSmsReceiveResult(Long id, Boolean success, Date receiveTime, String apiReceiveCode, String apiReceiveMsg); + /** * 获得短信日志分页 * diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceImpl.java index d09b77e1da..a90f69f09a 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceImpl.java @@ -1,21 +1,27 @@ package cn.iocoder.yudao.module.system.service.sms; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogPageReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; import cn.iocoder.yudao.module.system.dal.mysql.sms.SysSmsLogMapper; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.system.enums.sms.SysSmsReceiveStatusEnum; +import cn.iocoder.yudao.module.system.enums.sms.SysSmsSendStatusEnum; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.Date; import java.util.List; +import java.util.Map; +import java.util.Objects; /** * 短信日志 Service 实现类 * * @author zzf - * @date 2021/1/25 9:25 */ @Slf4j @Service @@ -24,6 +30,50 @@ public class SmsLogServiceImpl implements SmsLogService { @Resource private SysSmsLogMapper smsLogMapper; + @Override + public Long createSmsLog(String mobile, Long userId, Integer userType, Boolean isSend, + SysSmsTemplateDO template, String templateContent, Map templateParams) { + SysSmsLogDO.SysSmsLogDOBuilder logBuilder = SysSmsLogDO.builder(); + // æ ¹æ®æ˜¯å¦è¦å‘é€ï¼Œè®¾ç½®çŠ¶æ€ + logBuilder.sendStatus(Objects.equals(isSend, true) ? SysSmsSendStatusEnum.INIT.getStatus() + : SysSmsSendStatusEnum.IGNORE.getStatus()); + // 设置手机相关字段 + logBuilder.mobile(mobile).userId(userId).userType(userType); + // 设置模æ¿ç›¸å…³å­—段 + logBuilder.templateId(template.getId()).templateCode(template.getCode()).templateType(template.getType()); + logBuilder.templateContent(templateContent).templateParams(templateParams).apiTemplateId(template.getApiTemplateId()); + // 设置渠é“相关字段 + logBuilder.channelId(template.getChannelId()).channelCode(template.getChannelCode()); + // 设置接收相关字段 + logBuilder.receiveStatus(SysSmsReceiveStatusEnum.INIT.getStatus()); + + // æ’入数æ®åº“ + SysSmsLogDO logDO = logBuilder.build(); + smsLogMapper.insert(logDO); + return logDO.getId(); + } + + @Override + public void updateSmsSendResult(Long id, Integer sendCode, String sendMsg, + String apiSendCode, String apiSendMsg, + String apiRequestId, String apiSerialNo) { + SysSmsSendStatusEnum sendStatus = CommonResult.isSuccess(sendCode) ? + SysSmsSendStatusEnum.SUCCESS : SysSmsSendStatusEnum.FAILURE; + smsLogMapper.updateById(SysSmsLogDO.builder().id(id).sendStatus(sendStatus.getStatus()) + .sendTime(new Date()).sendCode(sendCode).sendMsg(sendMsg) + .apiSendCode(apiSendCode).apiSendMsg(apiSendMsg) + .apiRequestId(apiRequestId).apiSerialNo(apiSerialNo).build()); + } + + @Override + public void updateSmsReceiveResult(Long id, Boolean success, Date receiveTime, + String apiReceiveCode, String apiReceiveMsg) { + SysSmsReceiveStatusEnum receiveStatus = Objects.equals(success, true) ? + SysSmsReceiveStatusEnum.SUCCESS : SysSmsReceiveStatusEnum.FAILURE; + smsLogMapper.updateById(SysSmsLogDO.builder().id(id).receiveStatus(receiveStatus.getStatus()) + .receiveTime(receiveTime).apiReceiveCode(apiReceiveCode).apiReceiveMsg(apiReceiveMsg).build()); + } + @Override public PageResult getSmsLogPage(SmsLogPageReqVO pageReqVO) { return smsLogMapper.selectPage(pageReqVO); diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateService.java index 397ff9faa8..bf00dabffe 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateService.java @@ -4,12 +4,13 @@ import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTempla import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplatePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateUpdateReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import javax.validation.Valid; import java.util.Collection; import java.util.List; +import java.util.Map; /** * çŸ­ä¿¡æ¨¡æ¿ Service æŽ¥å£ @@ -19,6 +20,28 @@ import java.util.List; */ public interface SmsTemplateService { + /** + * åˆå§‹åŒ–短信模æ¿çš„æœ¬åœ°ç¼“å­˜ + */ + void initLocalCache(); + + /** + * 获得短信模æ¿ï¼Œä»Žç¼“存中 + * + * @param code 模æ¿ç¼–ç  + * @return çŸ­ä¿¡æ¨¡æ¿ + */ + SysSmsTemplateDO getSmsTemplateByCodeFromCache(String code); + + /** + * æ ¼å¼åŒ–短信内容 + * + * @param content 短信模æ¿çš„内容 + * @param params å†…å®¹çš„å‚æ•° + * @return æ ¼å¼åŒ–åŽçš„内容 + */ + String formatSmsTemplateContent(String content, Map params); + /** * èŽ·å¾—çŸ­ä¿¡æ¨¡æ¿ * diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceImpl.java index cc145d97e6..24589abe48 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceImpl.java @@ -1,6 +1,9 @@ package cn.iocoder.yudao.module.system.service.sms; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ReUtil; +import cn.hutool.core.util.StrUtil; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateCreateReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplatePageReqVO; @@ -8,8 +11,8 @@ import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTempla import cn.iocoder.yudao.module.system.convert.sms.SmsTemplateConvert; import cn.iocoder.yudao.module.system.dal.mysql.sms.SysSmsTemplateMapper; import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsChannelDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.sms.core.client.SmsClient; @@ -17,14 +20,15 @@ import cn.iocoder.yudao.framework.sms.core.client.SmsClientFactory; import cn.iocoder.yudao.framework.sms.core.client.SmsCommonResult; import cn.iocoder.yudao.framework.sms.core.client.dto.SmsTemplateRespDTO; import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.ImmutableMap; import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import org.springframework.util.Assert; +import javax.annotation.PostConstruct; import javax.annotation.Resource; -import java.util.Collection; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.regex.Pattern; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; @@ -40,6 +44,12 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU @Slf4j public class SmsTemplateServiceImpl implements SmsTemplateService { + /** + * 定时执行 {@link #schedulePeriodicRefresh()} 的周期 + * 因为已ç»é€šè¿‡ Redis Pub/Sub 机制,所以频率ä¸éœ€è¦é«˜ + */ + private static final long SCHEDULER_PERIOD = 5 * 60 * 1000L; + /** * 正则表达å¼ï¼ŒåŒ¹é… {} 中的å˜é‡ */ @@ -57,6 +67,72 @@ public class SmsTemplateServiceImpl implements SmsTemplateService { @Resource private SmsProducer smsProducer; + /** + * 短信模æ¿ç¼“å­˜ + * key:短信模æ¿ç¼–ç  {@link SysSmsTemplateDO#getCode()} + * + * 这里声明 volatile ä¿®é¥°çš„åŽŸå› æ˜¯ï¼Œæ¯æ¬¡åˆ·æ–°æ—¶ï¼Œç›´æŽ¥ä¿®æ”¹æŒ‡å‘ + */ + private volatile Map smsTemplateCache; + /** + * 缓存短信模æ¿çš„æœ€å¤§æ›´æ–°æ—¶é—´ï¼Œç”¨äºŽåŽç»­çš„增é‡è½®è¯¢ï¼Œåˆ¤æ–­æ˜¯å¦æœ‰æ›´æ–° + */ + private volatile Date maxUpdateTime; + + @Override + @PostConstruct + public void initLocalCache() { + // 获å–短信模æ¿åˆ—表,如果有更新 + List smsTemplateList = this.loadSmsTemplateIfUpdate(maxUpdateTime); + if (CollUtil.isEmpty(smsTemplateList)) { + return; + } + + // 写入缓存 + ImmutableMap.Builder builder = ImmutableMap.builder(); + smsTemplateList.forEach(sysSmsTemplateDO -> builder.put(sysSmsTemplateDO.getCode(), sysSmsTemplateDO)); + smsTemplateCache = builder.build(); + assert smsTemplateList.size() > 0; // 断言,é¿å…告警 + maxUpdateTime = smsTemplateList.stream().max(Comparator.comparing(BaseDO::getUpdateTime)).get().getUpdateTime(); + log.info("[initLocalCache][åˆå§‹åŒ– SmsTemplate æ•°é‡ä¸º {}]", smsTemplateList.size()); + } + + /** + * 如果短信模æ¿å‘生å˜åŒ–,从数æ®åº“ä¸­èŽ·å–æœ€æ–°çš„å…¨é‡çŸ­ä¿¡æ¨¡æ¿ã€‚ + * 如果未å‘生å˜åŒ–,则返回空 + * + * @param maxUpdateTime 当å‰çŸ­ä¿¡æ¨¡æ¿çš„æœ€å¤§æ›´æ–°æ—¶é—´ + * @return 短信模æ¿åˆ—表 + */ + private List loadSmsTemplateIfUpdate(Date maxUpdateTime) { + // 第一步,判断是å¦è¦æ›´æ–°ã€‚ + if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB ä¸€å®šæœ‰æ–°æ•°æ® + log.info("[loadSmsTemplateIfUpdate][首次加载全é‡çŸ­ä¿¡æ¨¡æ¿]"); + } else { // 判断数æ®åº“ä¸­æ˜¯å¦æœ‰æ›´æ–°çš„çŸ­ä¿¡æ¨¡æ¿ + if (smsTemplateMapper.selectExistsByUpdateTimeAfter(maxUpdateTime) == null) { + return null; + } + log.info("[loadSmsTemplateIfUpdate][增é‡åŠ è½½å…¨é‡çŸ­ä¿¡æ¨¡æ¿]"); + } + // 第二步,如果有更新,则从数æ®åº“åŠ è½½æ‰€æœ‰çŸ­ä¿¡æ¨¡æ¿ + return smsTemplateMapper.selectList(); + } + + @Scheduled(fixedDelay = SCHEDULER_PERIOD, initialDelay = SCHEDULER_PERIOD) + public void schedulePeriodicRefresh() { + initLocalCache(); + } + + @Override + public SysSmsTemplateDO getSmsTemplateByCodeFromCache(String code) { + return smsTemplateCache.get(code); + } + + @Override + public String formatSmsTemplateContent(String content, Map params) { + return StrUtil.format(content, params); + } + @Override public SysSmsTemplateDO getSmsTemplateByCode(String code) { return smsTemplateMapper.selectByCode(code); diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsCoreService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsSendService.java similarity index 79% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsCoreService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsSendService.java index 55f4d41e00..4c673935a6 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsCoreService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsSendService.java @@ -1,19 +1,16 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.sms; +package cn.iocoder.yudao.module.system.service.sms; -import cn.iocoder.yudao.coreservice.modules.system.mq.message.sms.SysSmsSendMessage; +import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage; import java.util.List; import java.util.Map; /** - * 短信 Service Core æŽ¥å£ - * - * 接入方,通过调用 send 开头的方法,创建å‘é€çŸ­ä¿¡çš„任务到 MQ 中 - * åŽç»­ï¼Œyudao-admin-server ç›‘å¬ MQ,执行真正的短信å‘é€é€»è¾‘ + * 短信 Service å‘é€æŽ¥å£ * * @author èŠ‹é“æºç  */ -public interface SysSmsCoreService { +public interface SysSmsSendService { /** * å‘é€å•æ¡çŸ­ä¿¡ç»™åŽå°ç”¨æˆ· @@ -49,7 +46,7 @@ public interface SysSmsCoreService { void sendBatchSms(List mobiles, List userIds, Integer userType, String templateCode, Map templateParams); - void doSendSms(SysSmsSendMessage message); + void doSendSms(SmsSendMessage message); /** * 接收短信的接收结果 diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/impl/SysSmsCoreServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsSendServiceImpl.java similarity index 76% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/impl/SysSmsCoreServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsSendServiceImpl.java index 787d2a1d92..b6737fbdff 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/impl/SysSmsCoreServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsSendServiceImpl.java @@ -1,15 +1,10 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.sms.impl; +package cn.iocoder.yudao.module.system.service.sms; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.coreservice.modules.system.mq.message.sms.SysSmsSendMessage; -import cn.iocoder.yudao.coreservice.modules.system.mq.producer.sms.SysSmsCoreProducer; -import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsLogCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsTemplateCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage; import cn.iocoder.yudao.framework.common.core.KeyValue; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; @@ -18,7 +13,10 @@ import cn.iocoder.yudao.framework.sms.core.client.SmsClientFactory; import cn.iocoder.yudao.framework.sms.core.client.SmsCommonResult; import cn.iocoder.yudao.framework.sms.core.client.dto.SmsReceiveRespDTO; import cn.iocoder.yudao.framework.sms.core.client.dto.SmsSendRespDTO; +import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer; +import cn.iocoder.yudao.module.system.service.user.UserService; import com.google.common.annotations.VisibleForTesting; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.Assert; @@ -27,35 +25,36 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** - * 短信 Service Core 实现 + * 短信 Service å‘é€çš„实现 * * @author èŠ‹é“æºç  */ @Service -public class SysSmsCoreServiceImpl implements SysSmsCoreService { +public class SysSmsSendServiceImpl implements SysSmsSendService { + @Autowired + @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") // UserService 存在é‡å + private UserService userService; @Resource - private SysUserCoreService sysUserCoreService; + private SmsTemplateService smsTemplateService; @Resource - private SysSmsTemplateCoreService smsTemplateCoreService; - @Resource - private SysSmsLogCoreService smsLogCoreService; + private SmsLogService smsLogService; @Resource private SmsClientFactory smsClientFactory; @Resource - private SysSmsCoreProducer smsCoreProducer; + private SmsProducer smsProducer; @Override public Long sendSingleSmsToAdmin(String mobile, Long userId, String templateCode, Map templateParams) { // 如果 mobile 为空,则加载用户编å·å¯¹åº”çš„æ‰‹æœºå· if (StrUtil.isEmpty(mobile)) { - SysUserDO user = sysUserCoreService.getUser(userId); + UserDO user = userService.getUser(userId); if (user != null) { mobile = user.getMobile(); } @@ -90,12 +89,12 @@ public class SysSmsCoreServiceImpl implements SysSmsCoreService { // 创建å‘逿—¥å¿— Boolean isSend = CommonStatusEnum.ENABLE.getStatus().equals(template.getStatus()); // 如果模æ¿è¢«ç¦ç”¨ï¼Œåˆ™ä¸å‘é€çŸ­ä¿¡ï¼Œåªè®°å½•日志 - String content = smsTemplateCoreService.formatSmsTemplateContent(template.getContent(), templateParams); - Long sendLogId = smsLogCoreService.createSmsLog(mobile, userId, userType, isSend, template, content, templateParams); + String content = smsTemplateService.formatSmsTemplateContent(template.getContent(), templateParams); + Long sendLogId = smsLogService.createSmsLog(mobile, userId, userType, isSend, template, content, templateParams); // å‘é€ MQ 消æ¯ï¼Œå¼‚步执行å‘é€çŸ­ä¿¡ if (isSend) { - smsCoreProducer.sendSmsSendMessage(sendLogId, mobile, template.getChannelId(), + smsProducer.sendSmsSendMessage(sendLogId, mobile, template.getChannelId(), template.getApiTemplateId(), newTemplateParams); } return sendLogId; @@ -110,7 +109,7 @@ public class SysSmsCoreServiceImpl implements SysSmsCoreService { @VisibleForTesting public SysSmsTemplateDO checkSmsTemplateValid(String templateCode) { // 获得短信模æ¿ã€‚è€ƒè™‘åˆ°æ•ˆçŽ‡ï¼Œä»Žç¼“å­˜ä¸­èŽ·å– - SysSmsTemplateDO template = smsTemplateCoreService.getSmsTemplateByCodeFromCache(templateCode); + SysSmsTemplateDO template = smsTemplateService.getSmsTemplateByCodeFromCache(templateCode); // 短信模æ¿ä¸å­˜åœ¨ if (template == null) { throw exception(SMS_SEND_TEMPLATE_NOT_EXISTS); @@ -146,16 +145,15 @@ public class SysSmsCoreServiceImpl implements SysSmsCoreService { return mobile; } - @Override - public void doSendSms(SysSmsSendMessage message) { + public void doSendSms(SmsSendMessage message) { // 获得渠é“对应的 SmsClient 客户端 SmsClient smsClient = smsClientFactory.getSmsClient(message.getChannelId()); Assert.notNull(smsClient, String.format("短信客户端(%d) ä¸å­˜åœ¨", message.getChannelId())); // å‘é€çŸ­ä¿¡ SmsCommonResult sendResult = smsClient.sendSms(message.getLogId(), message.getMobile(), message.getApiTemplateId(), message.getTemplateParams()); - smsLogCoreService.updateSmsSendResult(message.getLogId(), sendResult.getCode(), sendResult.getMsg(), + smsLogService.updateSmsSendResult(message.getLogId(), sendResult.getCode(), sendResult.getMsg(), sendResult.getApiCode(), sendResult.getApiMsg(), sendResult.getApiRequestId(), sendResult.getData() != null ? sendResult.getData().getSerialNo() : null); } @@ -171,7 +169,7 @@ public class SysSmsCoreServiceImpl implements SysSmsCoreService { return; } // 更新短信日志的接收结果. 因为é‡ä¸€èˆ¬ä¸å¤§ï¼Œæ‰€ä»¥å…ˆä½¿ç”¨ for 循环更新 - receiveResults.forEach(result -> smsLogCoreService.updateSmsReceiveResult(result.getLogId(), + receiveResults.forEach(result -> smsLogService.updateSmsReceiveResult(result.getLogId(), result.getSuccess(), result.getReceiveTime(), result.getErrorCode(), result.getErrorCode())); } diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/social/SysSocialCoreService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java similarity index 76% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/social/SysSocialCoreService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java index 17634b320a..a6010503c8 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/social/SysSocialCoreService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.social; +package cn.iocoder.yudao.module.system.service.social; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.social.SysSocialUserDO; -import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum; +import cn.iocoder.yudao.module.system.dal.dataobject.social.SysSocialUserDO; +import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.exception.ServiceException; import me.zhyd.oauth.model.AuthUser; @@ -11,16 +11,16 @@ import javax.validation.constraints.NotNull; import java.util.List; /** - * 社交 Service 接å£ï¼Œä¾‹å¦‚说社交平å°çš„æŽˆæƒç™»å½• + * 社交用户 Service 接å£ï¼Œä¾‹å¦‚说社交平å°çš„æŽˆæƒç™»å½• * * @author èŠ‹é“æºç  */ -public interface SysSocialCoreService { +public interface SocialUserService { /** * 获得社交平å°çš„æŽˆæƒ URL * - * @param type 社交平å°çš„类型 {@link SysSocialTypeEnum} + * @param type 社交平å°çš„类型 {@link SocialTypeEnum} * @param redirectUri é‡å®šå‘ URL * @return 社交平å°çš„æŽˆæƒ URL */ @@ -30,7 +30,7 @@ public interface SysSocialCoreService { * 获得授æƒçš„用户 * 如果授æƒå¤±è´¥ï¼Œåˆ™ä¼šæŠ›å‡º {@link ServiceException} 异常 * - * @param type 社交平å°çš„类型 {@link SysSocialTypeEnum} + * @param type 社交平å°çš„类型 {@link SocialTypeEnum} * @param code 授æƒç  * @param state state * @return 授æƒç”¨æˆ· @@ -46,7 +46,7 @@ public interface SysSocialCoreService { * 获得 unionId 对应的æŸä¸ªç¤¾äº¤å¹³å°çš„“所有â€ç¤¾äº¤ç”¨æˆ· * 注æ„,这里的“所有â€ï¼ŒæŒ‡çš„æ˜¯ç±»ä¼¼ã€å¾®ä¿¡ã€‘å¹³å°ï¼ŒåŒ…括了å°ç¨‹åºã€å…¬ä¼—å·ã€PC 网站,他们的 unionId 是一致的 * - * @param type 社交平å°çš„类型 {@link SysSocialTypeEnum} + * @param type 社交平å°çš„类型 {@link SocialTypeEnum} * @param unionId 社交平å°çš„ unionId * @return 社交用户列表 * @param userTypeEnum 全局用户类型 @@ -66,7 +66,7 @@ public interface SysSocialCoreService { * 绑定社交用户 * * @param userId ç”¨æˆ·ç¼–å· - * @param type 社交平å°çš„类型 {@link SysSocialTypeEnum} + * @param type 社交平å°çš„类型 {@link SocialTypeEnum} * @param authUser 授æƒç”¨æˆ· * @param userTypeEnum 全局用户类型 */ @@ -76,7 +76,7 @@ public interface SysSocialCoreService { * å–æ¶ˆç»‘定社交用户 * * @param userId ç”¨æˆ·ç¼–å· - * @param type 社交平å°çš„类型 {@link SysSocialTypeEnum} + * @param type 社交平å°çš„类型 {@link SocialTypeEnum} * @param unionId 社交平å°çš„ unionId * @param userTypeEnum 全局用户类型 */ diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/social/impl/SysSocialCoreServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java similarity index 84% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/social/impl/SysSocialCoreServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java index 2d0979912c..c5ccf20d01 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/social/impl/SysSocialCoreServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java @@ -1,11 +1,10 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.social.impl; +package cn.iocoder.yudao.module.system.service.social; import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.social.SysSocialUserDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.social.SysSocialUserCoreMapper; -import cn.iocoder.yudao.coreservice.modules.system.dal.redis.social.SysSocialAuthUserRedisDAO; -import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum; -import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialCoreService; +import cn.iocoder.yudao.module.system.dal.dataobject.social.SysSocialUserDO; +import cn.iocoder.yudao.module.system.dal.mysql.social.SysSocialUserMapper; +import cn.iocoder.yudao.module.system.dal.redis.social.SocialAuthUserRedisDAO; +import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.http.HttpUtils; @@ -25,34 +24,34 @@ import javax.annotation.Resource; import java.util.List; import java.util.Objects; -import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.SOCIAL_AUTH_FAILURE; -import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.SOCIAL_UNBIND_NOT_SELF; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.SOCIAL_AUTH_FAILURE; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.SOCIAL_UNBIND_NOT_SELF; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString; /** - * 社交 Service 实现类 + * 社交用户 Service 实现类 * * @author èŠ‹é“æºç  */ @Service @Validated @Slf4j -public class SysSocialCoreServiceImpl implements SysSocialCoreService { +public class SocialUserServiceImpl implements SocialUserService { @Resource private AuthRequestFactory authRequestFactory; @Resource - private SysSocialAuthUserRedisDAO authSocialUserRedisDAO; + private SocialAuthUserRedisDAO authSocialUserRedisDAO; @Resource - private SysSocialUserCoreMapper socialUserMapper; + private SysSocialUserMapper socialUserMapper; @Override public String getAuthorizeUrl(Integer type, String redirectUri) { // 获得对应的 AuthRequest 实现 - AuthRequest authRequest = authRequestFactory.get(SysSocialTypeEnum.valueOfType(type).getSource()); + AuthRequest authRequest = authRequestFactory.get(SocialTypeEnum.valueOfType(type).getSource()); // 生æˆè·³è½¬åœ°å€ String authorizeUri = authRequest.authorize(AuthStateUtils.createState()); return HttpUtils.replaceUrlQuery(authorizeUri, "redirect_uri", redirectUri); @@ -76,7 +75,7 @@ public class SysSocialCoreServiceImpl implements SysSocialCoreService { @Override public List getAllSocialUserList(Integer type, String unionId,UserTypeEnum userTypeEnum) { - List types = SysSocialTypeEnum.getRelationTypes(type); + List types = SocialTypeEnum.getRelationTypes(type); return socialUserMapper.selectListByTypeAndUnionId(userTypeEnum.getValue(), types, unionId); } @@ -141,7 +140,7 @@ public class SysSocialCoreServiceImpl implements SysSocialCoreService { @VisibleForTesting public void unbindOldSocialUser(Long userId, Integer type, String newUnionId, UserTypeEnum userTypeEnum) { - List types = SysSocialTypeEnum.getRelationTypes(type); + List types = SocialTypeEnum.getRelationTypes(type); List oldSocialUsers = socialUserMapper.selectListByTypeAndUserId( userTypeEnum.getValue(), types, userId); // 如果新è€çš„ unionId 是一致的,说明无需解绑 @@ -161,7 +160,7 @@ public class SysSocialCoreServiceImpl implements SysSocialCoreService { * @return 授æƒçš„用户 */ private AuthUser getAuthUser0(Integer type, AuthCallback authCallback) { - AuthRequest authRequest = authRequestFactory.get(SysSocialTypeEnum.valueOfType(type).getSource()); + AuthRequest authRequest = authRequestFactory.get(SocialTypeEnum.valueOfType(type).getSource()); AuthResponse authResponse = authRequest.login(authCallback); log.info("[getAuthUser0][è¯·æ±‚ç¤¾äº¤å¹³å° type({}) request({}) response({})]", type, toJsonString(authCallback), toJsonString(authResponse)); diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/tenant/SysTenantCoreService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/SysTenantCoreService.java similarity index 75% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/tenant/SysTenantCoreService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/SysTenantCoreService.java index f7bbab6ef8..030531d85f 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/tenant/SysTenantCoreService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/SysTenantCoreService.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.tenant; +package cn.iocoder.yudao.module.system.service.tenant; import cn.iocoder.yudao.framework.tenant.core.service.TenantFrameworkService; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantService.java index 63ebfd5f3b..8d2005ba64 100755 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantService.java @@ -4,7 +4,7 @@ import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantCreateReq import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantUpdateReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.tenant.SysTenantDO; +import cn.iocoder.yudao.module.system.dal.dataobject.tenant.SysTenantDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import javax.validation.Valid; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImpl.java index 297dbbbcc5..4b40236a11 100755 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImpl.java @@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantPageReqVO import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantUpdateReqVO; import cn.iocoder.yudao.module.system.convert.tenant.TenantConvert; import cn.iocoder.yudao.module.system.dal.mysql.tenant.SysTenantMapper; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.tenant.SysTenantDO; +import cn.iocoder.yudao.module.system.dal.dataobject.tenant.SysTenantDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/tenant/impl/SysTenantCoreServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/impl/SysTenantCoreServiceImpl.java similarity index 63% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/tenant/impl/SysTenantCoreServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/impl/SysTenantCoreServiceImpl.java index 046e4187cb..67b5acfe4e 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/tenant/impl/SysTenantCoreServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/impl/SysTenantCoreServiceImpl.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.tenant.impl; +package cn.iocoder.yudao.module.system.service.tenant.impl; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.tenant.SysTenantDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.tenant.SysTenantCoreMapper; -import cn.iocoder.yudao.coreservice.modules.system.service.tenant.SysTenantCoreService; +import cn.iocoder.yudao.module.system.dal.dataobject.tenant.SysTenantDO; +import cn.iocoder.yudao.module.system.dal.mysql.tenant.SysTenantCoreMapper; +import cn.iocoder.yudao.module.system.service.tenant.SysTenantCoreService; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import org.springframework.stereotype.Service; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/UserService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/UserService.java index 15d62caf28..f4e9c63dfd 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/UserService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/UserService.java @@ -1,10 +1,12 @@ package cn.iocoder.yudao.module.system.service.user; +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; import java.io.InputStream; import java.util.*; @@ -92,7 +94,7 @@ public interface UserService { * @param username 用户å * @return ç”¨æˆ·å¯¹è±¡ä¿¡æ¯ */ - SysUserDO getUserByUsername(String username); + UserDO getUserByUsername(String username); /** * 获得用户分页列表 @@ -100,15 +102,61 @@ public interface UserService { * @param reqVO 分页æ¡ä»¶ * @return 分页列表 */ - PageResult getUserPage(UserPageReqVO reqVO); + PageResult getUserPage(UserPageReqVO reqVO); /** - * 获得用户 + * 通过用户 ID 查询用户 * - * @param id ç”¨æˆ·ç¼–å· - * @return 用户 + * @param id 用户ID + * @return ç”¨æˆ·å¯¹è±¡ä¿¡æ¯ */ - SysUserDO getUser(Long id); + UserDO getUser(Long id); + + /** + * 获得指定部门的用户数组 + * + * @param deptIds 部门数组 + * @return 用户数组 + */ + List getUsersByDeptIds(Collection deptIds); + + /** + * 获得指定岗ä½çš„用户数组 + * + * @param postIds 岗使•°ç»„ + * @return 用户数组 + */ + List getUsersByPostIds(Collection postIds); + + /** + * 获得用户列表 + * + * @param ids ç”¨æˆ·ç¼–å·æ•°ç»„ + * @return 用户列表 + */ + List getUsers(Collection ids); + + /** + * æ ¡éªŒç”¨æˆ·ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: + * 1. 用户编å·ä¸å­˜åœ¨ + * 2. 用户被ç¦ç”¨ + * + * @param ids ç”¨æˆ·ç¼–å·æ•°ç»„ + */ + void validUsers(Set ids); + + /** + * 获得用户 Map + * + * @param ids ç”¨æˆ·ç¼–å·æ•°ç»„ + * @return 用户 Map + */ + default Map getUserMap(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return new HashMap<>(); + } + return CollectionUtils.convertMap(getUsers(ids), UserDO::getId); + } /** * 获得用户列表 @@ -116,9 +164,7 @@ public interface UserService { * @param reqVO 列表请求 * @return 用户列表 */ - List getUsers(UserExportReqVO reqVO); - - + List getUsers(UserExportReqVO reqVO); /** * èŽ·å¾—ç”¨æˆ·åˆ—è¡¨ï¼ŒåŸºäºŽæ˜µç§°æ¨¡ç³ŠåŒ¹é… @@ -126,7 +172,7 @@ public interface UserService { * @param nickname 昵称 * @return 用户列表 */ - List getUsersByNickname(String nickname); + List getUsersByNickname(String nickname); /** * èŽ·å¾—ç”¨æˆ·åˆ—è¡¨ï¼ŒåŸºäºŽç”¨æˆ·è´¦å·æ¨¡ç³ŠåŒ¹é… @@ -134,7 +180,7 @@ public interface UserService { * @param username ç”¨æˆ·è´¦å· * @return 用户列表 */ - List getUsersByUsername(String username); + List getUsersByUsername(String username); /** * 批é‡å¯¼å…¥ç”¨æˆ· @@ -151,6 +197,6 @@ public interface UserService { * @param status çŠ¶æ€ * @return 用户们 */ - List getUsersByStatus(Integer status); + List getUsersByStatus(Integer status); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/UserServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/UserServiceImpl.java index d5d7faefcc..1530d3bca4 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/UserServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/UserServiceImpl.java @@ -4,23 +4,23 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; -import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; -import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; -import cn.iocoder.yudao.module.system.convert.user.UserConvert; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; -import cn.iocoder.yudao.module.system.dal.mysql.user.SysUserMapper; -import cn.iocoder.yudao.module.system.service.dept.DeptService; -import cn.iocoder.yudao.module.system.service.dept.PostService; -import cn.iocoder.yudao.module.system.service.permission.PermissionService; import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; +import cn.iocoder.yudao.module.system.convert.user.UserConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.system.dal.mysql.user.UserMapper; +import cn.iocoder.yudao.module.system.service.dept.DeptService; +import cn.iocoder.yudao.module.system.service.dept.PostService; +import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; +import cn.iocoder.yudao.module.system.service.permission.PermissionService; import com.google.common.annotations.VisibleForTesting; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -32,8 +32,10 @@ import javax.annotation.Resource; import java.io.InputStream; import java.util.*; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.USER_IS_DISABLE; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.USER_NOT_EXISTS; /** * 管ç†å‘˜ç”¨æˆ· Service 实现类 @@ -48,7 +50,7 @@ public class UserServiceImpl implements UserService { private String userInitPassword; @Resource(name = "sysUserMapper") // userMapper 存在é‡å - private SysUserMapper userMapper; + private UserMapper userMapper; @Resource private DeptService deptService; @@ -70,7 +72,7 @@ public class UserServiceImpl implements UserService { this.checkCreateOrUpdate(null, reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail(), reqVO.getDeptId(), reqVO.getPostIds()); // æ’入用户 - SysUserDO user = UserConvert.INSTANCE.convert(reqVO); + UserDO user = UserConvert.INSTANCE.convert(reqVO); user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // é»˜è®¤å¼€å¯ user.setPassword(passwordEncoder.encode(reqVO.getPassword())); // åŠ å¯†å¯†ç  userMapper.insert(user); @@ -83,13 +85,13 @@ public class UserServiceImpl implements UserService { this.checkCreateOrUpdate(reqVO.getId(), reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail(), reqVO.getDeptId(), reqVO.getPostIds()); // 更新用户 - SysUserDO updateObj = UserConvert.INSTANCE.convert(reqVO); + UserDO updateObj = UserConvert.INSTANCE.convert(reqVO); userMapper.updateById(updateObj); } @Override public void updateUserLogin(Long id, String loginIp) { - userMapper.updateById(new SysUserDO().setId(id).setLoginIp(loginIp).setLoginDate(new Date())); + userMapper.updateById(new UserDO().setId(id).setLoginIp(loginIp).setLoginDate(new Date())); } @Override @@ -107,7 +109,7 @@ public class UserServiceImpl implements UserService { // 校验旧密ç å¯†ç  this.checkOldPassword(id, reqVO.getOldPassword()); // 执行更新 - SysUserDO updateObj = new SysUserDO().setId(id); + UserDO updateObj = new UserDO().setId(id); updateObj.setPassword(passwordEncoder.encode(reqVO.getNewPassword())); // åŠ å¯†å¯†ç  userMapper.updateById(updateObj); } @@ -118,7 +120,7 @@ public class UserServiceImpl implements UserService { // 存储文件 String avatar = fileService.createFile(IdUtil.fastUUID(), IoUtil.readBytes(avatarFile)); // 更新路径 - SysUserDO sysUserDO = new SysUserDO(); + UserDO sysUserDO = new UserDO(); sysUserDO.setId(id); sysUserDO.setAvatar(avatar); userMapper.updateById(sysUserDO); @@ -130,7 +132,7 @@ public class UserServiceImpl implements UserService { // 校验用户存在 this.checkUserExists(id); // æ›´æ–°å¯†ç  - SysUserDO updateObj = new SysUserDO(); + UserDO updateObj = new UserDO(); updateObj.setId(id); updateObj.setPassword(passwordEncoder.encode(password)); // åŠ å¯†å¯†ç  userMapper.updateById(updateObj); @@ -141,7 +143,7 @@ public class UserServiceImpl implements UserService { // 校验用户存在 this.checkUserExists(id); // æ›´æ–°çŠ¶æ€ - SysUserDO updateObj = new SysUserDO(); + UserDO updateObj = new UserDO(); updateObj.setId(id); updateObj.setStatus(status); userMapper.updateById(updateObj); @@ -158,33 +160,80 @@ public class UserServiceImpl implements UserService { } @Override - public SysUserDO getUserByUsername(String username) { + public UserDO getUserByUsername(String username) { return userMapper.selectByUsername(username); } @Override - public PageResult getUserPage(UserPageReqVO reqVO) { + public PageResult getUserPage(UserPageReqVO reqVO) { return userMapper.selectPage(reqVO, this.getDeptCondition(reqVO.getDeptId())); } @Override - public SysUserDO getUser(Long id) { + public UserDO getUser(Long id) { return userMapper.selectById(id); } @Override - public List getUsers(UserExportReqVO reqVO) { + public List getUsersByDeptIds(Collection deptIds) { + if (CollUtil.isEmpty(deptIds)) { + return Collections.emptyList(); + } + return userMapper.selectListByDeptIds(deptIds); + } + + @Override + public List getUsersByPostIds(Collection postIds) { + if (CollUtil.isEmpty(postIds)) { + return Collections.emptyList(); + } + // 过滤ä¸ç¬¦åˆæ¡ä»¶çš„ + // TODO 芋艿:暂时åªèƒ½å†…存过滤。解决方案:1ã€æ–°å»ºä¸€ä¸ªå…³è”表;2ã€åŸºäºŽ where + 函数;3ã€json å­—æ®µï¼Œé€‚åˆ mysql 8+ 版本 + List users = userMapper.selectList(); + users.removeIf(user -> !CollUtil.containsAny(user.getPostIds(), postIds)); + return users; + } + + @Override + public List getUsers(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return Collections.emptyList(); + } + return userMapper.selectBatchIds(ids); + } + + @Override + public void validUsers(Set ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // 获得岗ä½ä¿¡æ¯ + List users = userMapper.selectBatchIds(ids); + Map userMap = CollectionUtils.convertMap(users, UserDO::getId); + // 校验 + ids.forEach(id -> { + UserDO user = userMap.get(id); + if (user == null) { + throw exception(USER_NOT_EXISTS); + } + if (!CommonStatusEnum.ENABLE.getStatus().equals(user.getStatus())) { + throw exception(USER_IS_DISABLE, user.getNickname()); + } + }); + } + + @Override + public List getUsers(UserExportReqVO reqVO) { return userMapper.selectList(reqVO, this.getDeptCondition(reqVO.getDeptId())); } - @Override - public List getUsersByNickname(String nickname) { + public List getUsersByNickname(String nickname) { return userMapper.selectListByNickname(nickname); } @Override - public List getUsersByUsername(String username) { + public List getUsersByUsername(String username) { return userMapper.selectListByUsername(username); } @@ -225,7 +274,7 @@ public class UserServiceImpl implements UserService { if (id == null) { return; } - SysUserDO user = userMapper.selectById(id); + UserDO user = userMapper.selectById(id); if (user == null) { throw exception(USER_NOT_EXISTS); } @@ -236,7 +285,7 @@ public class UserServiceImpl implements UserService { if (StrUtil.isBlank(username)) { return; } - SysUserDO user = userMapper.selectByUsername(username); + UserDO user = userMapper.selectByUsername(username); if (user == null) { return; } @@ -254,7 +303,7 @@ public class UserServiceImpl implements UserService { if (StrUtil.isBlank(email)) { return; } - SysUserDO user = userMapper.selectByEmail(email); + UserDO user = userMapper.selectByEmail(email); if (user == null) { return; } @@ -272,7 +321,7 @@ public class UserServiceImpl implements UserService { if (StrUtil.isBlank(mobile)) { return; } - SysUserDO user = userMapper.selectByMobile(mobile); + UserDO user = userMapper.selectByMobile(mobile); if (user == null) { return; } @@ -328,7 +377,7 @@ public class UserServiceImpl implements UserService { */ @VisibleForTesting public void checkOldPassword(Long id, String oldPassword) { - SysUserDO user = userMapper.selectById(id); + UserDO user = userMapper.selectById(id); if (user == null) { throw exception(USER_NOT_EXISTS); } @@ -355,7 +404,7 @@ public class UserServiceImpl implements UserService { return; } // 判断如果ä¸å­˜åœ¨ï¼Œåœ¨è¿›è¡Œæ’å…¥ - SysUserDO existUser = userMapper.selectByUsername(importUser.getUsername()); + UserDO existUser = userMapper.selectByUsername(importUser.getUsername()); if (existUser == null) { userMapper.insert(UserConvert.INSTANCE.convert(importUser) .setPassword(passwordEncoder.encode(userInitPassword))); // è®¾ç½®é»˜è®¤å¯†ç  @@ -367,7 +416,7 @@ public class UserServiceImpl implements UserService { respVO.getFailureUsernames().put(importUser.getUsername(), USER_USERNAME_EXISTS.getMsg()); return; } - SysUserDO updateUser = UserConvert.INSTANCE.convert(importUser); + UserDO updateUser = UserConvert.INSTANCE.convert(importUser); updateUser.setId(existUser.getId()); userMapper.updateById(updateUser); respVO.getUpdateUsernames().add(importUser.getUsername()); @@ -376,7 +425,7 @@ public class UserServiceImpl implements UserService { } @Override - public List getUsersByStatus(Integer status) { + public List getUsersByStatus(Integer status) { return userMapper.selectListByStatus(status); } diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/AuthServiceImplTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/AuthServiceImplTest.java index a306eea49c..1ad03c06ef 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/AuthServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/AuthServiceImplTest.java @@ -5,13 +5,11 @@ import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum; import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum; import cn.iocoder.yudao.module.system.service.common.CaptchaService; import cn.iocoder.yudao.module.system.service.dept.PostService; +import cn.iocoder.yudao.module.system.service.logger.LoginLogService; import cn.iocoder.yudao.module.system.service.permission.PermissionService; import cn.iocoder.yudao.module.system.service.user.UserService; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; +import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.system.service.social.SocialUserService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.framework.test.core.util.AssertUtils; @@ -48,8 +46,6 @@ public class AuthServiceImplTest extends BaseDbUnitTest { @MockBean private UserService userService; @MockBean - private SysUserCoreService userCoreService; - @MockBean private PermissionService permissionService; @MockBean private AuthenticationManager authenticationManager; @@ -58,11 +54,11 @@ public class AuthServiceImplTest extends BaseDbUnitTest { @MockBean private CaptchaService captchaService; @MockBean - private SysLoginLogCoreService loginLogCoreService; + private LoginLogService loginLogService; @MockBean - private SysUserSessionCoreService userSessionCoreService; + private UserSessionService userSessionService; @MockBean - private SysSocialCoreService socialService; + private SocialUserService socialService; @MockBean private PostService postService; @@ -76,7 +72,7 @@ public class AuthServiceImplTest extends BaseDbUnitTest { // 准备傿•° String username = randomString(); // mock 方法 - SysUserDO user = randomPojo(SysUserDO.class, o -> o.setUsername(username)); + UserDO user = randomPojo(UserDO.class, o -> o.setUsername(username)); when(userService.getUserByUsername(eq(username))).thenReturn(user); // 调用 @@ -102,8 +98,8 @@ public class AuthServiceImplTest extends BaseDbUnitTest { // 准备傿•° Long userId = randomLongId(); // mock 方法 01 - SysUserDO user = randomPojo(SysUserDO.class, o -> o.setId(userId)); - when(userCoreService.getUser(eq(userId))).thenReturn(user); + UserDO user = randomPojo(UserDO.class, o -> o.setId(userId)); + when(userService.getUser(eq(userId))).thenReturn(user); // mock 方法 02 Set roleIds = randomSet(Long.class); when(permissionService.getUserRoleIds(eq(userId), eq(singleton(CommonStatusEnum.ENABLE.getStatus())))) @@ -137,7 +133,7 @@ public class AuthServiceImplTest extends BaseDbUnitTest { // 调用, 并断言异常 assertServiceException(() -> authService.login(reqVO, userIp, userAgent), AUTH_LOGIN_CAPTCHA_NOT_FOUND); // æ ¡éªŒè°ƒç”¨å‚æ•° - verify(loginLogCoreService, times(1)).createLoginLog( + verify(loginLogService, times(1)).createLoginLog( argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) && o.getResult().equals(LoginResultEnum.CAPTCHA_NOT_FOUND.getResult())) ); @@ -155,7 +151,7 @@ public class AuthServiceImplTest extends BaseDbUnitTest { // 调用, 并断言异常 assertServiceException(() -> authService.login(reqVO, userIp, userAgent), AUTH_LOGIN_CAPTCHA_CODE_ERROR); // æ ¡éªŒè°ƒç”¨å‚æ•° - verify(loginLogCoreService, times(1)).createLoginLog( + verify(loginLogService, times(1)).createLoginLog( argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) && o.getResult().equals(LoginResultEnum.CAPTCHA_CODE_ERROR.getResult())) ); @@ -176,7 +172,7 @@ public class AuthServiceImplTest extends BaseDbUnitTest { assertServiceException(() -> authService.login(reqVO, userIp, userAgent), AUTH_LOGIN_BAD_CREDENTIALS); // æ ¡éªŒè°ƒç”¨å‚æ•° verify(captchaService, times(1)).deleteCaptchaCode(reqVO.getUuid()); - verify(loginLogCoreService, times(1)).createLoginLog( + verify(loginLogService, times(1)).createLoginLog( argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) && o.getResult().equals(LoginResultEnum.BAD_CREDENTIALS.getResult())) ); @@ -197,7 +193,7 @@ public class AuthServiceImplTest extends BaseDbUnitTest { assertServiceException(() -> authService.login(reqVO, userIp, userAgent), AUTH_LOGIN_USER_DISABLED); // æ ¡éªŒè°ƒç”¨å‚æ•° verify(captchaService, times(1)).deleteCaptchaCode(reqVO.getUuid()); - verify(loginLogCoreService, times(1)).createLoginLog( + verify(loginLogService, times(1)).createLoginLog( argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) && o.getResult().equals(LoginResultEnum.USER_DISABLED.getResult())) ); @@ -218,7 +214,7 @@ public class AuthServiceImplTest extends BaseDbUnitTest { assertServiceException(() -> authService.login(reqVO, userIp, userAgent), AUTH_LOGIN_FAIL_UNKNOWN); // æ ¡éªŒè°ƒç”¨å‚æ•° verify(captchaService, times(1)).deleteCaptchaCode(reqVO.getUuid()); - verify(loginLogCoreService, times(1)).createLoginLog( + verify(loginLogService, times(1)).createLoginLog( argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) && o.getResult().equals(LoginResultEnum.UNKNOWN_ERROR.getResult())) ); @@ -246,13 +242,13 @@ public class AuthServiceImplTest extends BaseDbUnitTest { // mock 获得 User æ‹¥æœ‰çš„è§’è‰²ç¼–å·æ•°ç»„ when(permissionService.getUserRoleIds(userId, singleton(CommonStatusEnum.ENABLE.getStatus()))).thenReturn(userRoleIds); // mock 缓存登录用户到 Redis - when(userSessionCoreService.createUserSession(loginUser, userIp, userAgent)).thenReturn(sessionId); + when(userSessionService.createUserSession(loginUser, userIp, userAgent)).thenReturn(sessionId); // 调用, 并断言异常 String login = authService.login(reqVO, userIp, userAgent); assertEquals(sessionId, login); // æ ¡éªŒè°ƒç”¨å‚æ•° verify(captchaService, times(1)).deleteCaptchaCode(reqVO.getUuid()); - verify(loginLogCoreService, times(1)).createLoginLog( + verify(loginLogService, times(1)).createLoginLog( argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) && o.getResult().equals(LoginResultEnum.SUCCESS.getResult())) ); @@ -264,12 +260,12 @@ public class AuthServiceImplTest extends BaseDbUnitTest { String token = randomString(); LoginUser loginUser = randomPojo(LoginUser.class); // mock - when(userSessionCoreService.getLoginUser(token)).thenReturn(loginUser); + when(userSessionService.getLoginUser(token)).thenReturn(loginUser); // 调用 authService.logout(token); // æ ¡éªŒè°ƒç”¨å‚æ•° - verify(userSessionCoreService, times(1)).deleteUserSession(token); - verify(loginLogCoreService, times(1)).createLoginLog( + verify(userSessionService, times(1)).deleteUserSession(token); + verify(loginLogService, times(1)).createLoginLog( argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGOUT_SELF.getType()) && o.getResult().equals(LoginResultEnum.SUCCESS.getResult())) ); diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImplTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImplTest.java index eea61a408b..4ca9127212 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImplTest.java @@ -1,14 +1,16 @@ package cn.iocoder.yudao.module.system.service.auth; import cn.hutool.core.date.DateUtil; +import cn.iocoder.yudao.framework.security.config.SecurityProperties; +import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.session.UserSessionPageReqVO; import cn.iocoder.yudao.module.system.dal.mysql.auth.SysUserSessionMapper; +import cn.iocoder.yudao.module.system.service.logger.LoginLogService; import cn.iocoder.yudao.module.system.service.user.UserService; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.redis.auth.SysLoginUserCoreRedisDAO; -import cn.iocoder.yudao.coreservice.modules.system.enums.common.SysSexEnum; -import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService; +import cn.iocoder.yudao.module.system.dal.dataobject.auth.SysUserSessionDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.system.dal.redis.auth.LoginUserRedisDAO; +import cn.iocoder.yudao.module.system.enums.common.SysSexEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -19,17 +21,19 @@ import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Import; import javax.annotation.Resource; +import java.time.Duration; import java.util.Date; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; import static cn.hutool.core.util.RandomUtil.randomEle; +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.addTime; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomString; +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; import static java.util.Collections.singletonList; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertNull; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.when; @@ -38,7 +42,7 @@ import static org.mockito.Mockito.when; * * @author Lyon */ -@Import({UserSessionServiceImpl.class}) +@Import({UserSessionServiceImpl.class, LoginUserRedisDAO.class}) public class UserSessionServiceImplTest extends BaseDbAndRedisUnitTest { @Resource @@ -50,14 +54,17 @@ public class UserSessionServiceImplTest extends BaseDbAndRedisUnitTest { @MockBean private UserService userService; @MockBean - private SysLoginLogCoreService loginLogCoreService; + private LoginLogService loginLogService; @MockBean - private SysLoginUserCoreRedisDAO loginUserCoreRedisDAO; + private LoginUserRedisDAO loginUserRedisDAO; + + @MockBean + private SecurityProperties securityProperties; @Test public void testGetUserSessionPage_success() { // mock æ•°æ® - SysUserDO dbUser = randomPojo(SysUserDO.class, o -> { + UserDO dbUser = randomPojo(UserDO.class, o -> { o.setSex(randomEle(SysSexEnum.values()).getSex()); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); }); @@ -124,4 +131,89 @@ public class UserSessionServiceImplTest extends BaseDbAndRedisUnitTest { assertPojoEquals(sessionDO, userSessionDOS.get(0), "updateTime"); } + @Test + public void testCreateUserSession_success() { + // 准备傿•° + String userIp = randomString(); + String userAgent = randomString(); + LoginUser loginUser = randomPojo(LoginUser.class, o -> { + o.setUserType(randomEle(UserTypeEnum.values()).getValue()); + o.setTenantId(0L); // 租户设置为 0,因为暂未å¯ç”¨å¤šç§Ÿæˆ·ç»„ä»¶ + }); + // mock 方法 + when(securityProperties.getSessionTimeout()).thenReturn(Duration.ofDays(1)); + + // 调用 + String sessionId = userSessionService.createUserSession(loginUser, userIp, userAgent); + // 校验 SysUserSessionDO 记录 + SysUserSessionDO userSessionDO = userSessionMapper.selectById(sessionId); + assertPojoEquals(loginUser, userSessionDO, "id", "updateTime"); + assertEquals(sessionId, userSessionDO.getId()); + assertEquals(userIp, userSessionDO.getUserIp()); + assertEquals(userAgent, userSessionDO.getUserAgent()); + // 校验 LoginUser 缓存 + LoginUser redisLoginUser = loginUserRedisDAO.get(sessionId); + assertPojoEquals(loginUser, redisLoginUser, "username", "password"); + } + + @Test + public void testCreateRefreshUserSession_success() { + // 准备傿•° + String sessionId = randomString(); + String userIp = randomString(); + String userAgent = randomString(); + long timeLong = randomLongId(); + String userName = randomString(); + Date date = randomDate(); + LoginUser loginUser = randomPojo(LoginUser.class, o -> o.setUserType(randomEle(UserTypeEnum.values()).getValue())); + // mock 方法 + when(securityProperties.getSessionTimeout()).thenReturn(Duration.ofDays(1)); + // mock æ•°æ® + loginUser.setUpdateTime(date); + loginUserRedisDAO.set(sessionId, loginUser); + SysUserSessionDO userSession = SysUserSessionDO.builder().id(sessionId) + .userId(loginUser.getId()).userType(loginUser.getUserType()) + .userIp(userIp).userAgent(userAgent).username(userName) + .sessionTimeout(addTime(Duration.ofMillis(timeLong))) + .build(); + userSessionMapper.insert(userSession); + + // 调用 + userSessionService.refreshUserSession(sessionId, loginUser); + // 校验 LoginUser 缓存 + LoginUser redisLoginUser = loginUserRedisDAO.get(sessionId); + assertNotEquals(redisLoginUser.getUpdateTime(), date); + // 校验 SysUserSessionDO 记录 + SysUserSessionDO updateDO = userSessionMapper.selectById(sessionId); + assertEquals(updateDO.getUsername(), loginUser.getUsername()); + assertNotEquals(updateDO.getUpdateTime(), userSession.getUpdateTime()); + assertNotEquals(updateDO.getSessionTimeout(), addTime(Duration.ofMillis(timeLong))); + } + + @Test + public void testDeleteUserSession_success() { + // 准备傿•° + String sessionId = randomString(); + String userIp = randomString(); + String userAgent = randomString(); + Long timeLong = randomLongId(); + LoginUser loginUser = randomPojo(LoginUser.class, o -> o.setUserType(randomEle(UserTypeEnum.values()).getValue())); + // mock 存入 Redis + when(securityProperties.getSessionTimeout()).thenReturn(Duration.ofDays(1)); + // mock æ•°æ® + loginUserRedisDAO.set(sessionId, loginUser); + SysUserSessionDO userSession = SysUserSessionDO.builder().id(sessionId) + .userId(loginUser.getId()).userType(loginUser.getUserType()) + .userIp(userIp).userAgent(userAgent).username(loginUser.getUsername()) + .sessionTimeout(addTime(Duration.ofMillis(timeLong))) + .build(); + userSessionMapper.insert(userSession); + + // 调用 + userSessionService.deleteUserSession(sessionId); + // 校验数æ®ä¸å­˜åœ¨äº† + assertNull(loginUserRedisDAO.get(sessionId)); + assertNull(userSessionMapper.selectById(sessionId)); + } + } diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceTest.java index fe49ea2b3b..bfda1290e6 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceTest.java @@ -4,7 +4,7 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptCreateReqVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptUpdateReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.module.system.dal.mysql.dept.SysDeptMapper; import cn.iocoder.yudao.module.system.enums.dept.DeptIdEnum; import cn.iocoder.yudao.module.system.mq.producer.dept.DeptProducer; diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/PostServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/PostServiceTest.java index df64ed2b11..d6bbab6f7a 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/PostServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/PostServiceTest.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.service.dept; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceTest.java index 42217d3b75..e0f3d0e2b6 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceTest.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.service.dict; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictDataDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataCreateReqVO; @@ -13,14 +13,17 @@ import cn.iocoder.yudao.module.system.mq.producer.dict.DictDataProducer; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; +import com.google.common.collect.ImmutableTable; import org.junit.jupiter.api.Test; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Import; import javax.annotation.Resource; +import java.util.Date; import java.util.List; import java.util.function.Consumer; +import static cn.hutool.core.bean.BeanUtil.getFieldValue; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; @@ -42,6 +45,37 @@ public class DictDataServiceTest extends BaseDbUnitTest { @MockBean private DictDataProducer dictDataProducer; + /** + * 测试加载到新的字典数æ®çš„æƒ…况 + */ + @Test + @SuppressWarnings("unchecked") + public void testInitLocalCache() { + // mock æ•°æ® + SysDictDataDO dictData01 = randomDictDataDO(); + dictDataMapper.insert(dictData01); + SysDictDataDO dictData02 = randomDictDataDO(); + dictDataMapper.insert(dictData02); + + // 调用 + dictDataService.initLocalCache(); + // 断言 labelDictDataCache 缓存 + ImmutableTable labelDictDataCache = + (ImmutableTable) getFieldValue(dictDataService, "labelDictDataCache"); + assertEquals(2, labelDictDataCache.size()); + assertPojoEquals(dictData01, labelDictDataCache.get(dictData01.getDictType(), dictData01.getLabel())); + assertPojoEquals(dictData02, labelDictDataCache.get(dictData02.getDictType(), dictData02.getLabel())); + // 断言 valueDictDataCache 缓存 + ImmutableTable valueDictDataCache = + (ImmutableTable) getFieldValue(dictDataService, "valueDictDataCache"); + assertEquals(2, valueDictDataCache.size()); + assertPojoEquals(dictData01, valueDictDataCache.get(dictData01.getDictType(), dictData01.getValue())); + assertPojoEquals(dictData02, valueDictDataCache.get(dictData02.getDictType(), dictData02.getValue())); + // 断言 maxUpdateTime 缓存 + Date maxUpdateTime = (Date) getFieldValue(dictDataService, "maxUpdateTime"); + assertEquals(ObjectUtils.max(dictData01.getUpdateTime(), dictData02.getUpdateTime()), maxUpdateTime); + } + @Test public void testGetDictDataPage() { // mock æ•°æ® diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImplTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImplTest.java index 94778ef49d..fdaf676da2 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImplTest.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.service.logger; import cn.hutool.core.util.RandomUtil; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO; +import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysLoginLogDO; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils; @@ -12,6 +12,9 @@ import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum; import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum; import cn.iocoder.yudao.framework.test.core.util.RandomUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; +import cn.iocoder.yudao.module.system.enums.logger.SysLoginLogTypeEnum; +import cn.iocoder.yudao.module.system.enums.logger.SysLoginResultEnum; +import cn.iocoder.yudao.module.system.service.logger.dto.LoginLogCreateReqDTO; import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.Import; @@ -19,6 +22,7 @@ import org.springframework.context.annotation.Import; import javax.annotation.Resource; import java.util.List; +import static cn.hutool.core.util.RandomUtil.randomEle; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -27,7 +31,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; public class LoginLogServiceImplTest extends BaseDbUnitTest { @Resource - private LoginLogServiceImpl sysLoginLogService; + private LoginLogServiceImpl loginLogService; @Resource private LoginLogMapper loginLogMapper; @@ -68,7 +72,7 @@ public class LoginLogServiceImplTest extends BaseDbUnitTest { reqVO.setEndTime(buildTime(2021, 3, 7)); // 调用service方法 - PageResult pageResult = sysLoginLogService.getLoginLogPage(reqVO); + PageResult pageResult = loginLogService.getLoginLogPage(reqVO); // æ–­è¨€ï¼ŒåªæŸ¥åˆ°äº†ä¸€æ¡ç¬¦åˆæ¡ä»¶çš„ assertEquals(1, pageResult.getTotal()); @@ -114,10 +118,28 @@ public class LoginLogServiceImplTest extends BaseDbUnitTest { // 调用service方法 - List loginLogList = sysLoginLogService.getLoginLogList(reqVO); + List loginLogList = loginLogService.getLoginLogList(reqVO); // 断言 assertEquals(1, loginLogList.size()); assertPojoEquals(loginLogDO, loginLogList.get(0)); } + + @Test + public void testCreateLoginLog() { + LoginLogCreateReqDTO reqDTO = RandomUtils.randomPojo(LoginLogCreateReqDTO.class, vo -> { + // æŒ‡å®šéšæœºçš„范围,é¿å…超出范围入库失败 + vo.setUserType(randomEle(UserTypeEnum.values()).getValue()); + vo.setLogType(randomEle(SysLoginLogTypeEnum.values()).getType()); + vo.setResult(randomEle(SysLoginResultEnum.values()).getResult()); + vo.setTraceId(TracerUtils.getTraceId()); + }); + + // 调用 + loginLogService.createLoginLog(reqDTO); + // 断言,忽略基本字段 + SysLoginLogDO sysLoginLogDO = loginLogMapper.selectOne(null); + assertPojoEquals(reqDTO, sysLoginLogDO); + } + } diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImplTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImplTest.java index 6f6edf4cf0..2c9c2369ad 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImplTest.java @@ -6,8 +6,8 @@ import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.Oper import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO; import cn.iocoder.yudao.module.system.dal.mysql.logger.OperateLogMapper; import cn.iocoder.yudao.module.system.service.user.UserService; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.coreservice.modules.system.enums.common.SysSexEnum; +import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.system.enums.common.SysSexEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -66,7 +66,7 @@ public class OperateLogServiceImplTest extends BaseDbUnitTest { public void testGetOperateLogPage() { // æž„é€ æµ‹è¯•æ•°æ® // 先构造用户 - SysUserDO user = RandomUtils.randomPojo(SysUserDO.class, o -> { + UserDO user = RandomUtils.randomPojo(UserDO.class, o -> { o.setNickname("wangkai"); o.setSex(SysSexEnum.MALE.getSex()); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); @@ -117,7 +117,7 @@ public class OperateLogServiceImplTest extends BaseDbUnitTest { public void testGetOperateLogs() { // æž„é€ æµ‹è¯•æ•°æ® // 先构造用户 - SysUserDO user = RandomUtils.randomPojo(SysUserDO.class, o -> { + UserDO user = RandomUtils.randomPojo(UserDO.class, o -> { o.setNickname("wangkai"); o.setSex(SysSexEnum.MALE.getSex()); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceTest.java index 3652c2ba30..9ff7d5d4cd 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceTest.java @@ -1,10 +1,10 @@ package cn.iocoder.yudao.module.system.service.permission; import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleMenuDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysUserRoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysUserRoleDO; import cn.iocoder.yudao.module.system.dal.mysql.permission.SysRoleMenuMapper; import cn.iocoder.yudao.module.system.dal.mysql.permission.SysUserRoleMapper; import cn.iocoder.yudao.module.system.mq.producer.permission.PermissionProducer; diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceTest.java index 68e55926ad..5c8475dfd6 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceTest.java @@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.security.core.enums.DataScopeEnum; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleCreateReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleUpdateReqVO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO; import cn.iocoder.yudao.module.system.dal.mysql.permission.SysRoleMapper; import cn.iocoder.yudao.module.system.enums.permission.RoleTypeEnum; import cn.iocoder.yudao.module.system.mq.producer.permission.RoleProducer; diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceTest.java index 28d6b2703d..1233b2a76d 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceTest.java @@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannel import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelUpdateReqVO; import cn.iocoder.yudao.module.system.dal.mysql.sms.SysSmsChannelMapper; import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsChannelDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceTest.java index e743897310..e06b9b0f4f 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceTest.java @@ -1,13 +1,15 @@ package cn.iocoder.yudao.module.system.service.sms; import cn.hutool.core.map.MapUtil; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogPageReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; import cn.iocoder.yudao.module.system.dal.mysql.sms.SysSmsLogMapper; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO; -import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsReceiveStatusEnum; -import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsSendStatusEnum; -import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsTemplateTypeEnum; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsLogDO; +import cn.iocoder.yudao.module.system.enums.sms.SysSmsReceiveStatusEnum; +import cn.iocoder.yudao.module.system.enums.sms.SysSmsSendStatusEnum; +import cn.iocoder.yudao.module.system.enums.sms.SysSmsTemplateTypeEnum; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; @@ -17,16 +19,18 @@ import org.junit.jupiter.api.Test; import org.springframework.context.annotation.Import; import javax.annotation.Resource; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.function.Consumer; +import static cn.hutool.core.util.RandomUtil.randomBoolean; import static cn.hutool.core.util.RandomUtil.randomEle; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomString; +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; @Import(SmsLogServiceImpl.class) public class SmsLogServiceTest extends BaseDbUnitTest { @@ -130,6 +134,93 @@ public class SmsLogServiceTest extends BaseDbUnitTest { assertPojoEquals(dbSmsLog, list.get(0)); } + @Test + public void testCreateSmsLog() { + // 准备傿•° + String mobile = randomString(); + Long userId = randomLongId(); + Integer userType = randomEle(UserTypeEnum.values()).getValue(); + Boolean isSend = randomBoolean(); + SysSmsTemplateDO templateDO = randomPojo(SysSmsTemplateDO.class, + o -> o.setType(randomEle(SysSmsTemplateTypeEnum.values()).getType())); + String templateContent = randomString(); + Map templateParams = randomTemplateParams(); + // mock 方法 + + // 调用 + Long logId = smsLogService.createSmsLog(mobile, userId, userType, isSend, + templateDO, templateContent, templateParams); + // 断言 + SysSmsLogDO logDO = smsLogMapper.selectById(logId); + assertEquals(isSend ? SysSmsSendStatusEnum.INIT.getStatus() : SysSmsSendStatusEnum.IGNORE.getStatus(), + logDO.getSendStatus()); + assertEquals(mobile, logDO.getMobile()); + assertEquals(userType, logDO.getUserType()); + assertEquals(userId, logDO.getUserId()); + assertEquals(templateDO.getId(), logDO.getTemplateId()); + assertEquals(templateDO.getCode(), logDO.getTemplateCode()); + assertEquals(templateDO.getType(), logDO.getTemplateType()); + assertEquals(templateDO.getChannelId(), logDO.getChannelId()); + assertEquals(templateDO.getChannelCode(), logDO.getChannelCode()); + assertEquals(templateContent, logDO.getTemplateContent()); + assertEquals(templateParams, logDO.getTemplateParams()); + assertEquals(SysSmsReceiveStatusEnum.INIT.getStatus(), logDO.getReceiveStatus()); + } + + @Test + public void testUpdateSmsSendResult() { + // mock æ•°æ® + SysSmsLogDO dbSmsLog = randomSmsLogDO( + o -> o.setSendStatus(SysSmsSendStatusEnum.IGNORE.getStatus())); + smsLogMapper.insert(dbSmsLog); + // 准备傿•° + Long id = dbSmsLog.getId(); + Integer sendCode = randomInteger(); + String sendMsg = randomString(); + String apiSendCode = randomString(); + String apiSendMsg = randomString(); + String apiRequestId = randomString(); + String apiSerialNo = randomString(); + + // 调用 + smsLogService.updateSmsSendResult(id, sendCode, sendMsg, + apiSendCode, apiSendMsg, apiRequestId, apiSerialNo); + // 断言 + dbSmsLog = smsLogMapper.selectById(id); + assertEquals(CommonResult.isSuccess(sendCode) ? SysSmsSendStatusEnum.SUCCESS.getStatus() + : SysSmsSendStatusEnum.FAILURE.getStatus(), dbSmsLog.getSendStatus()); + assertNotNull(dbSmsLog.getSendTime()); + assertEquals(sendMsg, dbSmsLog.getSendMsg()); + assertEquals(apiSendCode, dbSmsLog.getApiSendCode()); + assertEquals(apiSendMsg, dbSmsLog.getApiSendMsg()); + assertEquals(apiRequestId, dbSmsLog.getApiRequestId()); + assertEquals(apiSerialNo, dbSmsLog.getApiSerialNo()); + } + + @Test + public void testUpdateSmsReceiveResult() { + // mock æ•°æ® + SysSmsLogDO dbSmsLog = randomSmsLogDO( + o -> o.setReceiveStatus(SysSmsReceiveStatusEnum.INIT.getStatus())); + smsLogMapper.insert(dbSmsLog); + // 准备傿•° + Long id = dbSmsLog.getId(); + Boolean success = randomBoolean(); + Date receiveTime = randomDate(); + String apiReceiveCode = randomString(); + String apiReceiveMsg = randomString(); + + // 调用 + smsLogService.updateSmsReceiveResult(id, success, receiveTime, apiReceiveCode, apiReceiveMsg); + // 断言 + dbSmsLog = smsLogMapper.selectById(id); + assertEquals(success ? SysSmsReceiveStatusEnum.SUCCESS.getStatus() + : SysSmsReceiveStatusEnum.FAILURE.getStatus(), dbSmsLog.getReceiveStatus()); + assertEquals(receiveTime, dbSmsLog.getReceiveTime()); + assertEquals(apiReceiveCode, dbSmsLog.getApiReceiveCode()); + assertEquals(apiReceiveMsg, dbSmsLog.getApiReceiveMsg()); + } + // ========== éšæœºå¯¹è±¡ ========== @SafeVarargs diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceTest.java index 540c9a3726..bd1ca2c58d 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceTest.java @@ -6,9 +6,9 @@ import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTempla import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateUpdateReqVO; import cn.iocoder.yudao.module.system.dal.mysql.sms.SysSmsTemplateMapper; import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; -import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsTemplateTypeEnum; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsChannelDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; +import cn.iocoder.yudao.module.system.enums.sms.SysSmsTemplateTypeEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -25,10 +25,14 @@ import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Import; import javax.annotation.Resource; +import java.util.Date; import java.util.List; +import java.util.Map; import java.util.function.Consumer; +import static cn.hutool.core.bean.BeanUtil.getFieldValue; import static cn.hutool.core.util.RandomUtil.randomEle; +import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.max; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; @@ -56,6 +60,27 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest { @MockBean private SmsProducer smsProducer; + @Test + @SuppressWarnings("unchecked") + void testInitLocalCache() { + // mock æ•°æ® + SysSmsTemplateDO smsTemplate01 = randomSmsTemplateDO(); + smsTemplateMapper.insert(smsTemplate01); + SysSmsTemplateDO smsTemplate02 = randomSmsTemplateDO(); + smsTemplateMapper.insert(smsTemplate02); + + // 调用 + smsTemplateService.initLocalCache(); + // 断言 deptCache 缓存 + Map smsTemplateCache = (Map) getFieldValue(smsTemplateService, "smsTemplateCache"); + assertEquals(2, smsTemplateCache.size()); + assertPojoEquals(smsTemplate01, smsTemplateCache.get(smsTemplate01.getCode())); + assertPojoEquals(smsTemplate02, smsTemplateCache.get(smsTemplate02.getCode())); + // 断言 maxUpdateTime 缓存 + Date maxUpdateTime = (Date) getFieldValue(smsTemplateService, "maxUpdateTime"); + assertEquals(max(smsTemplate01.getUpdateTime(), smsTemplate02.getUpdateTime()), maxUpdateTime); + } + @Test public void testParseTemplateContentParams() { // 准备傿•° diff --git a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsCoreServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsSendServiceTest.java similarity index 70% rename from yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsCoreServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsSendServiceTest.java index 97e1e37031..8cbe9b34ec 100644 --- a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsCoreServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsSendServiceTest.java @@ -1,10 +1,9 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.sms; +package cn.iocoder.yudao.module.system.service.sms; import cn.hutool.core.map.MapUtil; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; -import cn.iocoder.yudao.coreservice.modules.system.mq.message.sms.SysSmsSendMessage; -import cn.iocoder.yudao.coreservice.modules.system.mq.producer.sms.SysSmsCoreProducer; -import cn.iocoder.yudao.coreservice.modules.system.service.sms.impl.SysSmsCoreServiceImpl; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; +import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage; +import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer; import cn.iocoder.yudao.framework.common.core.KeyValue; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; @@ -24,29 +23,24 @@ import java.util.List; import java.util.Map; import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; -/** - * {@link SysSmsCoreService} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -public class SysSmsCoreServiceTest extends BaseMockitoUnitTest { +public class SysSmsSendServiceTest extends BaseMockitoUnitTest { @InjectMocks - private SysSmsCoreServiceImpl smsCoreService; + private SysSmsSendServiceImpl smsService; @Mock - private SysSmsTemplateCoreService smsTemplateCoreService; + private SmsTemplateService smsTemplateService; @Mock - private SysSmsLogCoreService smsLogCoreService; + private SmsLogService smsLogService; @Mock - private SysSmsCoreProducer smsCoreProducer; + private SmsProducer smsProducer; @Mock private SmsClientFactory smsClientFactory; @@ -68,21 +62,21 @@ public class SysSmsCoreServiceTest extends BaseMockitoUnitTest { o.setContent("验è¯ç ä¸º{code}, æ“作为{op}"); o.setParams(Lists.newArrayList("code", "op")); }); - when(smsTemplateCoreService.getSmsTemplateByCodeFromCache(eq(templateCode))).thenReturn(template); + when(smsTemplateService.getSmsTemplateByCodeFromCache(eq(templateCode))).thenReturn(template); String content = randomString(); - when(smsTemplateCoreService.formatSmsTemplateContent(eq(template.getContent()), eq(templateParams))) + when(smsTemplateService.formatSmsTemplateContent(eq(template.getContent()), eq(templateParams))) .thenReturn(content); // mock SmsLogService 的方法 Long smsLogId = randomLongId(); - when(smsLogCoreService.createSmsLog(eq(mobile), eq(userId), eq(userType), eq(Boolean.TRUE), eq(template), + when(smsLogService.createSmsLog(eq(mobile), eq(userId), eq(userType), eq(Boolean.TRUE), eq(template), eq(content), eq(templateParams))).thenReturn(smsLogId); // 调用 - Long resultSmsLogId = smsCoreService.sendSingleSms(mobile, userId, userType, templateCode, templateParams); + Long resultSmsLogId = smsService.sendSingleSms(mobile, userId, userType, templateCode, templateParams); // 断言 assertEquals(smsLogId, resultSmsLogId); // 断言调用 - verify(smsCoreProducer, times(1)).sendSmsSendMessage(eq(smsLogId), eq(mobile), + verify(smsProducer, times(1)).sendSmsSendMessage(eq(smsLogId), eq(mobile), eq(template.getChannelId()), eq(template.getApiTemplateId()), eq(Lists.newArrayList(new KeyValue<>("code", "1234"), new KeyValue<>("op", "login")))); } @@ -105,21 +99,21 @@ public class SysSmsCoreServiceTest extends BaseMockitoUnitTest { o.setContent("验è¯ç ä¸º{code}, æ“作为{op}"); o.setParams(Lists.newArrayList("code", "op")); }); - when(smsTemplateCoreService.getSmsTemplateByCodeFromCache(eq(templateCode))).thenReturn(template); + when(smsTemplateService.getSmsTemplateByCodeFromCache(eq(templateCode))).thenReturn(template); String content = randomString(); - when(smsTemplateCoreService.formatSmsTemplateContent(eq(template.getContent()), eq(templateParams))) + when(smsTemplateService.formatSmsTemplateContent(eq(template.getContent()), eq(templateParams))) .thenReturn(content); // mock SmsLogService 的方法 Long smsLogId = randomLongId(); - when(smsLogCoreService.createSmsLog(eq(mobile), eq(userId), eq(userType), eq(Boolean.FALSE), eq(template), + when(smsLogService.createSmsLog(eq(mobile), eq(userId), eq(userType), eq(Boolean.FALSE), eq(template), eq(content), eq(templateParams))).thenReturn(smsLogId); // 调用 - Long resultSmsLogId = smsCoreService.sendSingleSms(mobile, userId, userType, templateCode, templateParams); + Long resultSmsLogId = smsService.sendSingleSms(mobile, userId, userType, templateCode, templateParams); // 断言 assertEquals(smsLogId, resultSmsLogId); // 断言调用 - verify(smsCoreProducer, times(0)).sendSmsSendMessage(anyLong(), anyString(), + verify(smsProducer, times(0)).sendSmsSendMessage(anyLong(), anyString(), anyLong(), any(), anyList()); } @@ -130,7 +124,7 @@ public class SysSmsCoreServiceTest extends BaseMockitoUnitTest { // mock 方法 // 调用,并断言异常 - assertServiceException(() -> smsCoreService.checkSmsTemplateValid(templateCode), + assertServiceException(() -> smsService.checkSmsTemplateValid(templateCode), SMS_SEND_TEMPLATE_NOT_EXISTS); } @@ -143,7 +137,7 @@ public class SysSmsCoreServiceTest extends BaseMockitoUnitTest { // mock 方法 // 调用,并断言异常 - assertServiceException(() -> smsCoreService.buildTemplateParams(template, templateParams), + assertServiceException(() -> smsService.buildTemplateParams(template, templateParams), SMS_SEND_MOBILE_TEMPLATE_PARAM_MISS, "code"); } @@ -153,7 +147,7 @@ public class SysSmsCoreServiceTest extends BaseMockitoUnitTest { // mock 方法 // 调用,并断言异常 - assertServiceException(() -> smsCoreService.checkMobile(null), + assertServiceException(() -> smsService.checkMobile(null), SMS_SEND_MOBILE_NOT_EXISTS); } @@ -161,7 +155,7 @@ public class SysSmsCoreServiceTest extends BaseMockitoUnitTest { @SuppressWarnings("unchecked") public void testDoSendSms() { // 准备傿•° - SysSmsSendMessage message = randomPojo(SysSmsSendMessage.class); + SmsSendMessage message = randomPojo(SmsSendMessage.class); // mock SmsClientFactory 的方法 SmsClient smsClient = spy(SmsClient.class); when(smsClientFactory.getSmsClient(eq(message.getChannelId()))).thenReturn(smsClient); @@ -171,9 +165,9 @@ public class SysSmsCoreServiceTest extends BaseMockitoUnitTest { eq(message.getTemplateParams()))).thenReturn(sendResult); // 调用 - smsCoreService.doSendSms(message); + smsService.doSendSms(message); // 断言 - verify(smsLogCoreService, times(1)).updateSmsSendResult(eq(message.getLogId()), + verify(smsLogService, times(1)).updateSmsSendResult(eq(message.getLogId()), eq(sendResult.getCode()), eq(sendResult.getMsg()), eq(sendResult.getApiCode()), eq(sendResult.getApiMsg()), eq(sendResult.getApiRequestId()), eq(sendResult.getData().getSerialNo())); } @@ -190,9 +184,9 @@ public class SysSmsCoreServiceTest extends BaseMockitoUnitTest { List receiveResults = randomPojoList(SmsReceiveRespDTO.class); // 调用 - smsCoreService.receiveSmsStatus(channelCode, text); + smsService.receiveSmsStatus(channelCode, text); // 断言 - receiveResults.forEach(result -> smsLogCoreService.updateSmsReceiveResult(eq(result.getLogId()), eq(result.getSuccess()), + receiveResults.forEach(result -> smsLogService.updateSmsReceiveResult(eq(result.getLogId()), eq(result.getSuccess()), eq(result.getReceiveTime()), eq(result.getErrorCode()), eq(result.getErrorCode()))); } diff --git a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/social/SysSocialCoreServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialUsererviceTest.java similarity index 80% rename from yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/social/SysSocialCoreServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialUsererviceTest.java index 2a33dd869e..dc6d3a2d04 100644 --- a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/social/SysSocialCoreServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialUsererviceTest.java @@ -1,12 +1,11 @@ -package cn.iocoder.yudao.coreservice.modules.system.service.social; +package cn.iocoder.yudao.module.system.service.social; -import cn.iocoder.yudao.coreservice.BaseDbAndRedisUnitTest; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.social.SysSocialUserDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.social.SysSocialUserCoreMapper; -import cn.iocoder.yudao.coreservice.modules.system.dal.redis.social.SysSocialAuthUserRedisDAO; -import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum; -import cn.iocoder.yudao.coreservice.modules.system.service.social.impl.SysSocialCoreServiceImpl; +import cn.iocoder.yudao.module.system.dal.dataobject.social.SysSocialUserDO; +import cn.iocoder.yudao.module.system.dal.mysql.social.SysSocialUserMapper; +import cn.iocoder.yudao.module.system.dal.redis.social.SocialAuthUserRedisDAO; +import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; +import cn.iocoder.yudao.module.system.test.BaseDbAndRedisUnitTest; import com.xkcoding.justauth.AuthRequestFactory; import me.zhyd.oauth.model.AuthUser; import org.junit.jupiter.api.Test; @@ -23,19 +22,14 @@ import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; import static org.junit.jupiter.api.Assertions.assertEquals; -/** - * {@link SysSocialCoreServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import({SysSocialCoreServiceImpl.class, SysSocialAuthUserRedisDAO.class}) -public class SysSocialCoreServiceTest extends BaseDbAndRedisUnitTest { +@Import({SocialUserServiceImpl.class, SocialAuthUserRedisDAO.class}) +public class SocialUsererviceTest extends BaseDbAndRedisUnitTest { @Resource - private SysSocialCoreServiceImpl socialService; + private SocialUserServiceImpl socialService; @Resource - private SysSocialUserCoreMapper socialUserMapper; + private SysSocialUserMapper socialUserMapper; @MockBean private AuthRequestFactory authRequestFactory; @@ -48,7 +42,7 @@ public class SysSocialCoreServiceTest extends BaseDbAndRedisUnitTest { // mock æ•°æ® // 准备傿•° Long userId = randomLongId(); - Integer type = randomEle(SysSocialTypeEnum.values()).getType(); + Integer type = randomEle(SocialTypeEnum.values()).getType(); AuthUser authUser = randomPojo(AuthUser.class); // mock 方法 @@ -68,7 +62,7 @@ public class SysSocialCoreServiceTest extends BaseDbAndRedisUnitTest { // mock æ•°æ® SysSocialUserDO dbSocialUser = randomPojo(SysSocialUserDO.class, socialUserDO -> { socialUserDO.setUserType(UserTypeEnum.ADMIN.getValue()); - socialUserDO.setType(randomEle(SysSocialTypeEnum.values()).getType()); + socialUserDO.setType(randomEle(SocialTypeEnum.values()).getType()); }); socialUserMapper.insert(dbSocialUser); // 准备傿•° @@ -93,7 +87,7 @@ public class SysSocialCoreServiceTest extends BaseDbAndRedisUnitTest { // mock æ•°æ® SysSocialUserDO dbSocialUser = randomPojo(SysSocialUserDO.class, socialUserDO -> { socialUserDO.setUserType(UserTypeEnum.ADMIN.getValue()); - socialUserDO.setType(randomEle(SysSocialTypeEnum.values()).getType()); + socialUserDO.setType(randomEle(SocialTypeEnum.values()).getType()); }); socialUserMapper.insert(dbSocialUser); // 准备傿•° @@ -131,7 +125,7 @@ public class SysSocialCoreServiceTest extends BaseDbAndRedisUnitTest { // mock æ•°æ® SysSocialUserDO oldSocialUser = randomPojo(SysSocialUserDO.class, socialUserDO -> { socialUserDO.setUserType(UserTypeEnum.ADMIN.getValue()); - socialUserDO.setType(randomEle(SysSocialTypeEnum.values()).getType()); + socialUserDO.setType(randomEle(SocialTypeEnum.values()).getType()); }); socialUserMapper.insert(oldSocialUser); // 准备傿•° @@ -154,7 +148,7 @@ public class SysSocialCoreServiceTest extends BaseDbAndRedisUnitTest { // mock æ•°æ® SysSocialUserDO oldSocialUser = randomPojo(SysSocialUserDO.class, socialUserDO -> { socialUserDO.setUserType(UserTypeEnum.ADMIN.getValue()); - socialUserDO.setType(randomEle(SysSocialTypeEnum.values()).getType()); + socialUserDO.setType(randomEle(SocialTypeEnum.values()).getType()); }); socialUserMapper.insert(oldSocialUser); // 准备傿•° diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceTest.java index 93b31c0746..49c96cc5ae 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceTest.java @@ -5,7 +5,7 @@ import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantExportReq import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantUpdateReqVO; import cn.iocoder.yudao.module.system.dal.mysql.tenant.SysTenantMapper; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.tenant.SysTenantDO; +import cn.iocoder.yudao.module.system.dal.dataobject.tenant.SysTenantDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/user/UserServiceImplTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/user/UserServiceImplTest.java index 8256f1de5c..0667193f99 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/user/UserServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/user/UserServiceImplTest.java @@ -5,16 +5,16 @@ import cn.hutool.core.util.RandomUtil; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysPostDO; -import cn.iocoder.yudao.module.system.dal.mysql.user.SysUserMapper; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.module.system.dal.mysql.user.UserMapper; import cn.iocoder.yudao.module.system.service.dept.DeptService; import cn.iocoder.yudao.module.system.service.dept.PostService; import cn.iocoder.yudao.module.system.service.permission.PermissionService; import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.coreservice.modules.system.enums.common.SysSexEnum; -import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; +import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.system.enums.common.SysSexEnum; +import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; @@ -52,7 +52,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { private UserServiceImpl userService; @Resource - private SysUserMapper userMapper; + private UserMapper userMapper; @MockBean private DeptService deptService; @@ -94,7 +94,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { // 调用 Long userId = userService.createUser(reqVO); // 断言 - SysUserDO user = userMapper.selectById(userId); + UserDO user = userMapper.selectById(userId); assertPojoEquals(reqVO, user, "password"); assertEquals("yudaoyuanma", user.getPassword()); assertEquals(CommonStatusEnum.ENABLE.getStatus(), user.getStatus()); @@ -103,7 +103,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { @Test public void testUpdateUser_success() { // mock æ•°æ® - SysUserDO dbUser = randomSysUserDO(); + UserDO dbUser = randomSysUserDO(); userMapper.insert(dbUser); // 准备傿•° UserUpdateReqVO reqVO = randomPojo(UserUpdateReqVO.class, o -> { @@ -128,14 +128,14 @@ public class UserServiceImplTest extends BaseDbUnitTest { // 调用 userService.updateUser(reqVO); // 断言 - SysUserDO user = userMapper.selectById(reqVO.getId()); + UserDO user = userMapper.selectById(reqVO.getId()); assertPojoEquals(reqVO, user); } @Test public void testUpdateUserProfile_success() { // mock æ•°æ® - SysUserDO dbUser = randomSysUserDO(); + UserDO dbUser = randomSysUserDO(); userMapper.insert(dbUser); // 准备傿•° Long userId = dbUser.getId(); @@ -147,14 +147,14 @@ public class UserServiceImplTest extends BaseDbUnitTest { // 调用 userService.updateUserProfile(userId, reqVO); // 断言 - SysUserDO user = userMapper.selectById(userId); + UserDO user = userMapper.selectById(userId); assertPojoEquals(reqVO, user); } @Test public void testUpdateUserPassword_success() { // mock æ•°æ® - SysUserDO dbUser = randomSysUserDO(o -> o.setPassword("encode:yudao")); + UserDO dbUser = randomSysUserDO(o -> o.setPassword("encode:yudao")); userMapper.insert(dbUser); // 准备傿•° Long userId = dbUser.getId(); @@ -170,14 +170,14 @@ public class UserServiceImplTest extends BaseDbUnitTest { // 调用 userService.updateUserPassword(userId, reqVO); // 断言 - SysUserDO user = userMapper.selectById(userId); + UserDO user = userMapper.selectById(userId); assertEquals("encode:yuanma", user.getPassword()); } @Test public void testUpdateUserAvatar_success() { // mock æ•°æ® - SysUserDO dbUser = randomSysUserDO(); + UserDO dbUser = randomSysUserDO(); userMapper.insert(dbUser); // 准备傿•° Long userId = dbUser.getId(); @@ -190,14 +190,14 @@ public class UserServiceImplTest extends BaseDbUnitTest { // 调用 userService.updateUserAvatar(userId, avatarFile); // 断言 - SysUserDO user = userMapper.selectById(userId); + UserDO user = userMapper.selectById(userId); assertEquals(avatar, user.getAvatar()); } @Test public void testUpdateUserPassword02_success() { // mock æ•°æ® - SysUserDO dbUser = randomSysUserDO(); + UserDO dbUser = randomSysUserDO(); userMapper.insert(dbUser); // 准备傿•° Long userId = dbUser.getId(); @@ -209,14 +209,14 @@ public class UserServiceImplTest extends BaseDbUnitTest { // 调用 userService.updateUserPassword(userId, password); // 断言 - SysUserDO user = userMapper.selectById(userId); + UserDO user = userMapper.selectById(userId); assertEquals("encode:" + password, user.getPassword()); } @Test public void testUpdateUserStatus() { // mock æ•°æ® - SysUserDO dbUser = randomSysUserDO(); + UserDO dbUser = randomSysUserDO(); userMapper.insert(dbUser); // 准备傿•° Long userId = dbUser.getId(); @@ -225,14 +225,14 @@ public class UserServiceImplTest extends BaseDbUnitTest { // 调用 userService.updateUserStatus(userId, status); // 断言 - SysUserDO user = userMapper.selectById(userId); + UserDO user = userMapper.selectById(userId); assertEquals(status, user.getStatus()); } @Test public void testDeleteUser_success(){ // mock æ•°æ® - SysUserDO dbUser = randomSysUserDO(); + UserDO dbUser = randomSysUserDO(); userMapper.insert(dbUser); // 准备傿•° Long userId = dbUser.getId(); @@ -248,7 +248,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { @Test public void testGetUserPage() { // mock æ•°æ® - SysUserDO dbUser = initGetUserPageData(); + UserDO dbUser = initGetUserPageData(); // 准备傿•° UserPageReqVO reqVO = new UserPageReqVO(); reqVO.setUsername("yudao"); @@ -262,7 +262,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { when(deptService.getDeptsByParentIdFromCache(eq(reqVO.getDeptId()), eq(true))).thenReturn(deptList); // 调用 - PageResult pageResult = userService.getUserPage(reqVO); + PageResult pageResult = userService.getUserPage(reqVO); // 断言 assertEquals(1, pageResult.getTotal()); assertEquals(1, pageResult.getList().size()); @@ -272,7 +272,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { @Test public void testGetUsers() { // mock æ•°æ® - SysUserDO dbUser = initGetUserPageData(); + UserDO dbUser = initGetUserPageData(); // 准备傿•° UserExportReqVO reqVO = new UserExportReqVO(); reqVO.setUsername("yudao"); @@ -286,7 +286,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { when(deptService.getDeptsByParentIdFromCache(eq(reqVO.getDeptId()), eq(true))).thenReturn(deptList); // 调用 - List list = userService.getUsers(reqVO); + List list = userService.getUsers(reqVO); // 断言 assertEquals(1, list.size()); assertPojoEquals(dbUser, list.get(0)); @@ -295,9 +295,9 @@ public class UserServiceImplTest extends BaseDbUnitTest { /** * åˆå§‹åŒ– getUserPage æ–¹æ³•çš„æµ‹è¯•æ•°æ® */ - private SysUserDO initGetUserPageData() { + private UserDO initGetUserPageData() { // mock æ•°æ® - SysUserDO dbUser = randomSysUserDO(o -> { // 等会查询到 + UserDO dbUser = randomSysUserDO(o -> { // 等会查询到 o.setUsername("yudaoyuanma"); o.setMobile("15601691300"); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); @@ -359,7 +359,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { UserImportRespVO respVO = userService.importUsers(newArrayList(importUser), true); // 断言 assertEquals(1, respVO.getCreateUsernames().size()); - SysUserDO user = userMapper.selectByUsername(respVO.getCreateUsernames().get(0)); + UserDO user = userMapper.selectByUsername(respVO.getCreateUsernames().get(0)); assertPojoEquals(importUser, user); assertEquals("java", user.getPassword()); assertEquals(0, respVO.getUpdateUsernames().size()); @@ -372,7 +372,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { @Test public void testImportUsers_03() { // mock æ•°æ® - SysUserDO dbUser = randomSysUserDO(); + UserDO dbUser = randomSysUserDO(); userMapper.insert(dbUser); // 准备傿•° UserImportExcelVO importUser = randomPojo(UserImportExcelVO.class, o -> { @@ -402,7 +402,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { @Test public void testImportUsers_04() { // mock æ•°æ® - SysUserDO dbUser = randomSysUserDO(); + UserDO dbUser = randomSysUserDO(); userMapper.insert(dbUser); // 准备傿•° UserImportExcelVO importUser = randomPojo(UserImportExcelVO.class, o -> { @@ -422,7 +422,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { // 断言 assertEquals(0, respVO.getCreateUsernames().size()); assertEquals(1, respVO.getUpdateUsernames().size()); - SysUserDO user = userMapper.selectByUsername(respVO.getUpdateUsernames().get(0)); + UserDO user = userMapper.selectByUsername(respVO.getUpdateUsernames().get(0)); assertPojoEquals(importUser, user); assertEquals(0, respVO.getFailureUsernames().size()); } @@ -561,7 +561,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { @Test public void testCheckOldPassword_passwordFailed() { // mock æ•°æ® - SysUserDO user = randomSysUserDO(); + UserDO user = randomSysUserDO(); userMapper.insert(user); // 准备傿•° Long id = user.getId(); @@ -594,12 +594,12 @@ public class UserServiceImplTest extends BaseDbUnitTest { // ========== éšæœºå¯¹è±¡ ========== @SafeVarargs - private static SysUserDO randomSysUserDO(Consumer... consumers) { - Consumer consumer = (o) -> { + private static UserDO randomSysUserDO(Consumer... consumers) { + Consumer consumer = (o) -> { o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 o.setSex(randomEle(SysSexEnum.values()).getSex()); // ä¿è¯ sex 的范围 }; - return randomPojo(SysUserDO.class, ArrayUtils.append(consumer, consumers)); + return randomPojo(UserDO.class, ArrayUtils.append(consumer, consumers)); } } From add08b1ecd6e0e516318ff7265e3e6ab509e38fd Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 30 Jan 2022 21:23:45 +0800 Subject: [PATCH 14/47] =?UTF-8?q?=E5=A4=9A=E6=A8=A1=E5=9D=97=E9=87=8D?= =?UTF-8?q?=E6=9E=84=204=EF=BC=9Asystem=20=E6=A8=A1=E5=9D=97=E7=9A=84?= =?UTF-8?q?=E8=B0=83=E6=95=B4=EF=BC=8C=E5=AE=9E=E7=8E=B0=20social=20API~~?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../framework/common/enums/UserTypeEnum.java | 12 +- .../user/{UserApi.java => MemberUserApi.java} | 2 +- .../member/api/user/dto/UserRespDTO.java | 2 + .../member/enums/ErrorCodeConstants.java | 27 +++ ...serApiImpl.java => MemberUserApiImpl.java} | 10 +- .../app/auth/AppAuthController.java | 32 +--- .../app/auth/vo/AppAuthCheckCodeReqVO.java | 4 +- .../app/auth/vo/AppAuthSendSmsReqVO.java | 4 +- .../app/auth/vo/AppAuthSocialBindReqVO.java | 3 +- .../app/user/AppUserController.java | 10 +- .../member/convert/auth/AuthConvert.java | 17 +- .../member/convert/user/UserConvert.java | 6 +- .../dal/dataobject/address/package-info.java | 1 + .../user/{UserDO.java => MemberUserDO.java} | 2 +- .../dal/mysql/sms/SysSmsCodeMapper.java | 28 --- .../dal/mysql/user/MemberUserMapper.java | 19 ++ .../member/dal/mysql/user/UserMapper.java | 19 -- .../enums/MemberErrorCodeConstants.java | 18 -- .../member/enums/SysErrorCodeConstants.java | 32 ---- .../module/member/enums/package-info.java | 4 + .../member/enums/sms/SysSmsSceneEnum.java | 54 ------ .../sms/SysSmsTemplateCodeConstants.java | 25 --- ...uthService.java => MemberAuthService.java} | 27 ++- ...ceImpl.java => MemberAuthServiceImpl.java} | 165 +++++++++--------- .../service/sms/SysSmsCodeServiceImpl.java | 137 --------------- ...serService.java => MemberUserService.java} | 11 +- ...ceImpl.java => MemberUserServiceImpl.java} | 48 ++--- .../service/auth/SysAuthServiceTest.java | 26 +-- ...ImplTest.java => UserServiceImplTest.java} | 42 ++--- .../yudao-module-system-api/pom.xml | 14 ++ .../system/api/auth/UserSessionApi.java | 56 ++++++ .../module/system/api/logger/LoginLogApi.java | 21 +++ .../api}/logger/dto/LoginLogCreateReqDTO.java | 2 +- .../yudao/module/system/api/package-info.java | 4 + .../system/api/social/SocialUserApi.java | 64 +++++++ .../api/social/dto/SocialUserBindReqDTO.java | 48 +++++ .../social/dto/SocialUserUnbindReqDTO.java | 44 +++++ .../system/enums/ErrorCodeConstants.java | 29 ++- .../system/enums/SysErrorCodeConstants.java | 37 ---- .../enums/logger/LoginLogTypeEnum.java} | 2 +- .../system/enums/logger/LoginResultEnum.java} | 2 +- .../module/system/enums/sms/SmsSceneEnum.java | 49 ++++++ .../yudao-module-system-impl/pom.xml | 5 + .../system/api/auth/UserSessionApiImpl.java | 47 +++++ .../system/api/logger/LoginLogApiImpl.java | 27 +++ .../yudao/module/system/api/package-info.java | 1 + .../system/api/social/SocialUserApiImpl.java | 71 ++++++++ .../controller/admin/auth/AuthController.java | 39 ++--- .../admin/auth/UserSessionController.java | 20 +-- .../controller/admin/dept/DeptController.java | 6 +- .../admin/logger/OperateLogController.java | 14 +- .../admin/permission/RoleController.java | 12 +- .../admin/sms/SmsCallbackController.java | 4 +- .../admin/sms/SmsTemplateController.java | 6 +- .../controller/admin/user/UserController.java | 30 ++-- .../admin/user/UserProfileController.java | 24 ++- .../system/convert/auth/AuthConvert.java | 12 +- .../convert/logger/OperateLogConvert.java | 4 +- .../logger/SysLoginLogCoreConvert.java | 2 +- .../convert/permission/RoleConvert.java | 12 +- .../system/convert/user/UserConvert.java | 24 +-- .../system/dal/dataobject/dept/SysDeptDO.java | 4 +- .../dal/dataobject/logger/OperateLogDO.java | 4 +- .../dal/dataobject/logger/SysLoginLogDO.java | 8 +- .../{SysRoleDO.java => RoleDO.java} | 4 +- .../{SysUserRoleDO.java => UserRoleDO.java} | 4 +- .../system/dal/dataobject/sms/SmsCodeDO.java | 8 +- .../dataobject/social/SysSocialUserDO.java | 4 +- .../user/{UserDO.java => AdminUserDO.java} | 2 +- .../{SysMenuMapper.java => MenuMapper.java} | 2 +- .../{SysRoleMapper.java => RoleMapper.java} | 26 +-- ...oleMenuMapper.java => RoleMenuMapper.java} | 2 +- .../mysql/permission/SysRoleCoreMapper.java | 9 - .../permission/SysUserRoleCoreMapper.java | 17 -- ...serRoleMapper.java => UserRoleMapper.java} | 26 +-- ...annelMapper.java => SmsChannelMapper.java} | 2 +- .../system/dal/mysql/sms/SmsCodeMapper.java | 26 +++ ...SysSmsLogMapper.java => SmsLogMapper.java} | 2 +- ...lateMapper.java => SmsTemplateMapper.java} | 2 +- .../dal/mysql/user/AdminUserMapper.java | 65 +++++++ .../system/dal/mysql/user/UserMapper.java | 68 -------- .../config/DataPermissionConfiguration.java | 4 +- .../framework/sms/SmsCodeConfiguration.java | 2 +- .../framework/sms/SmsCodeProperties.java | 4 +- .../mq/consumer/sms/SmsSendConsumer.java | 4 +- ...AuthService.java => AdminAuthService.java} | 2 +- ...iceImpl.java => AdminAuthServiceImpl.java} | 32 ++-- .../service/auth/UserSessionServiceImpl.java | 10 +- .../system/service/dept/DeptService.java | 51 ++++++ .../system/service/dept/DeptServiceImpl.java | 40 ++++- .../system/service/dept/PostService.java | 9 + .../system/service/dept/PostServiceImpl.java | 27 ++- .../service/dept/SysDeptCoreService.java | 59 ------- .../service/dept/SysPostCoreService.java | 19 -- .../dept/impl/SysDeptCoreServiceImpl.java | 68 -------- .../dept/impl/SysPostCoreServiceImpl.java | 50 ------ .../service/logger/LoginLogService.java | 5 +- .../service/logger/LoginLogServiceImpl.java | 8 +- .../service/logger/OperateLogServiceImpl.java | 10 +- .../service/permission/MenuServiceImpl.java | 4 +- .../service/permission/PermissionService.java | 8 + .../permission/PermissionServiceImpl.java | 40 +++-- .../service/permission/RoleService.java | 25 ++- .../service/permission/RoleServiceImpl.java | 66 ++++--- .../permission/SysPermissionCoreService.java | 20 --- .../permission/SysRoleCoreService.java | 19 -- .../impl/SysPermissionCoreServiceImpl.java | 28 --- .../impl/SysRoleCoreServiceImpl.java | 50 ------ .../service/sms/SmsChannelServiceImpl.java | 4 +- .../system/service/sms/SmsCodeService.java | 23 +-- .../service/sms/SmsCodeServiceImpl.java | 112 ++++++++++++ .../system/service/sms/SmsLogServiceImpl.java | 7 +- ...msSendService.java => SmsSendService.java} | 30 +++- ...rviceImpl.java => SmsSendServiceImpl.java} | 45 +++-- .../service/sms/SmsTemplateServiceImpl.java | 4 +- .../service/social/SocialUserService.java | 28 +-- .../service/social/SocialUserServiceImpl.java | 40 ++--- ...UserService.java => AdminUserService.java} | 28 +-- ...iceImpl.java => AdminUserServiceImpl.java} | 114 ++++-------- .../service/auth/AuthServiceImplTest.java | 14 +- .../auth/UserSessionServiceImplTest.java | 8 +- .../logger/LoginLogServiceImplTest.java | 24 ++- .../logger/OperateLogServiceImplTest.java | 10 +- .../service/permission/MenuServiceTest.java | 4 +- .../permission/PermissionServiceTest.java | 34 ++-- .../service/permission/RoleServiceTest.java | 64 +++---- .../service/sms/SmsChannelServiceTest.java | 4 +- .../system/service/sms/SmsLogServiceTest.java | 4 +- .../service/sms/SmsTemplateServiceTest.java | 4 +- .../service/sms/SysSmsSendServiceTest.java | 4 +- ...ceTest.java => SocialUserServiceTest.java} | 12 +- .../service/user/UserServiceImplTest.java | 147 ++++++---------- 132 files changed, 1649 insertions(+), 1587 deletions(-) rename yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/{UserApi.java => MemberUserApi.java} (90%) create mode 100644 yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java rename yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/api/user/{UserApiImpl.java => MemberUserApiImpl.java} (64%) create mode 100644 yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/address/package-info.java rename yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/{UserDO.java => MemberUserDO.java} (96%) delete mode 100644 yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/sms/SysSmsCodeMapper.java create mode 100644 yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MemberUserMapper.java delete mode 100644 yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/UserMapper.java delete mode 100644 yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/MemberErrorCodeConstants.java delete mode 100644 yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/SysErrorCodeConstants.java create mode 100644 yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/package-info.java delete mode 100644 yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/sms/SysSmsSceneEnum.java delete mode 100644 yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/sms/SysSmsTemplateCodeConstants.java rename yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/{AuthService.java => MemberAuthService.java} (75%) rename yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/{AuthServiceImpl.java => MemberAuthServiceImpl.java} (61%) delete mode 100644 yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/sms/SysSmsCodeServiceImpl.java rename yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/{UserService.java => MemberUserService.java} (82%) rename yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/{UserServiceImpl.java => MemberUserServiceImpl.java} (70%) rename yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/{MbrUserServiceImplTest.java => UserServiceImplTest.java} (74%) create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/auth/UserSessionApi.java create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/LoginLogApi.java rename yudao-module-system/{yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service => yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api}/logger/dto/LoginLogCreateReqDTO.java (95%) create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/package-info.java create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApi.java create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserBindReqDTO.java create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserUnbindReqDTO.java delete mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/SysErrorCodeConstants.java rename yudao-module-system/{yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/SysLoginLogTypeEnum.java => yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/logger/LoginLogTypeEnum.java} (94%) rename yudao-module-system/{yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/SysLoginResultEnum.java => yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/logger/LoginResultEnum.java} (94%) create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SmsSceneEnum.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/auth/UserSessionApiImpl.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/logger/LoginLogApiImpl.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/package-info.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApiImpl.java rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/{SysRoleDO.java => RoleDO.java} (94%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/{SysUserRoleDO.java => UserRoleDO.java} (88%) rename yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/sms/SysSmsCodeDO.java => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SmsCodeDO.java (85%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/{UserDO.java => AdminUserDO.java} (97%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/{SysMenuMapper.java => MenuMapper.java} (95%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/{SysRoleMapper.java => RoleMapper.java} (60%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/{SysRoleMenuMapper.java => RoleMenuMapper.java} (96%) delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleCoreMapper.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysUserRoleCoreMapper.java rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/{SysUserRoleMapper.java => UserRoleMapper.java} (52%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/{SysSmsChannelMapper.java => SmsChannelMapper.java} (93%) create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsCodeMapper.java rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/{SysSmsLogMapper.java => SmsLogMapper.java} (96%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/{SysSmsTemplateMapper.java => SmsTemplateMapper.java} (97%) create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/UserMapper.java rename {yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system}/framework/sms/SmsCodeConfiguration.java (82%) rename {yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system}/framework/sms/SmsCodeProperties.java (88%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/{AuthService.java => AdminAuthService.java} (95%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/{AuthServiceImpl.java => AdminAuthServiceImpl.java} (92%) delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysDeptCoreService.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysPostCoreService.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/impl/SysDeptCoreServiceImpl.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/impl/SysPostCoreServiceImpl.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysPermissionCoreService.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysRoleCoreService.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/impl/SysPermissionCoreServiceImpl.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/impl/SysRoleCoreServiceImpl.java rename yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/sms/SysSmsCodeService.java => yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeService.java (62%) create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeServiceImpl.java rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/{SysSmsSendService.java => SmsSendService.java} (63%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/{SysSmsSendServiceImpl.java => SmsSendServiceImpl.java} (84%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/{UserService.java => AdminUserService.java} (83%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/{UserServiceImpl.java => AdminUserServiceImpl.java} (76%) rename yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/social/{SocialUsererviceTest.java => SocialUserServiceTest.java} (91%) diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/UserTypeEnum.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/UserTypeEnum.java index edaba1dd96..c950c529db 100644 --- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/UserTypeEnum.java +++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/UserTypeEnum.java @@ -1,20 +1,24 @@ package cn.iocoder.yudao.framework.common.enums; -import cn.hutool.core.lang.Matcher; import cn.hutool.core.util.ArrayUtil; +import cn.iocoder.yudao.framework.common.core.IntArrayValuable; import lombok.AllArgsConstructor; import lombok.Getter; +import java.util.Arrays; + /** * 全局用户类型枚举 */ @AllArgsConstructor @Getter -public enum UserTypeEnum { +public enum UserTypeEnum implements IntArrayValuable { MEMBER(1, "会员"), // é¢å‘ c 端,普通用户 ADMIN(2, "管ç†å‘˜"); // é¢å‘ b 端,管ç†åŽå° + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(UserTypeEnum::getValue).toArray(); + /** * 类型 */ @@ -28,4 +32,8 @@ public enum UserTypeEnum { return ArrayUtil.firstMatch(userType -> userType.getValue().equals(value), UserTypeEnum.values()); } + @Override + public int[] array() { + return ARRAYS; + } } diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/UserApi.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApi.java similarity index 90% rename from yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/UserApi.java rename to yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApi.java index ba742a2599..c6c37f9352 100644 --- a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/UserApi.java +++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApi.java @@ -7,7 +7,7 @@ import cn.iocoder.yudao.module.member.api.user.dto.UserRespDTO; * * @author èŠ‹é“æºç  */ -public interface UserApi { +public interface MemberUserApi { /** * èŽ·å¾—ä¼šå‘˜ç”¨æˆ·ä¿¡æ¯ diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/dto/UserRespDTO.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/dto/UserRespDTO.java index ef2ecde492..e7a5aba9a0 100644 --- a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/dto/UserRespDTO.java +++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/dto/UserRespDTO.java @@ -1,12 +1,14 @@ package cn.iocoder.yudao.module.member.api.user.dto; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import lombok.Data; /** * ç”¨æˆ·ä¿¡æ¯ Response DTO * * @author èŠ‹é“æºç  */ +@Data public class UserRespDTO { /** diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java new file mode 100644 index 0000000000..260a0d12f7 --- /dev/null +++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java @@ -0,0 +1,27 @@ +package cn.iocoder.yudao.module.member.enums; + +import cn.iocoder.yudao.framework.common.exception.ErrorCode; + +/** + * Member é”™è¯¯ç æžšä¸¾ç±» + * + * member 系统,使用 1-004-000-000 段 + */ +public interface ErrorCodeConstants { + + // ========== 用户相关 1004001000============ + ErrorCode USER_NOT_EXISTS = new ErrorCode(1004001000, "用户ä¸å­˜åœ¨"); + ErrorCode USER_PASSWORD_FAILED = new ErrorCode(1004001001, "å¯†ç æ ¡éªŒå¤±è´¥"); + + // ========== 文件相关 1004002000 =========== + // TODO 芋艿:å¯ä»¥åˆ é™¤ + ErrorCode FILE_IS_EMPTY = new ErrorCode(1004002000, "文件为空"); + + // ========== AUTH æ¨¡å— 1004003000 ========== + ErrorCode AUTH_LOGIN_BAD_CREDENTIALS = new ErrorCode(1004003000, "登录失败,账å·å¯†ç ä¸æ­£ç¡®"); + ErrorCode AUTH_LOGIN_USER_DISABLED = new ErrorCode(1004003001, "登录失败,账å·è¢«ç¦ç”¨"); + ErrorCode AUTH_LOGIN_FAIL_UNKNOWN = new ErrorCode(1004003002, "登录失败"); // 登录失败的兜底,未知原因 + ErrorCode AUTH_TOKEN_EXPIRED = new ErrorCode(1004003004, "Token å·²ç»è¿‡æœŸ"); + ErrorCode AUTH_THIRD_LOGIN_NOT_BIND = new ErrorCode(1004003005, "未绑定账å·ï¼Œéœ€è¦è¿›è¡Œç»‘定"); + +} diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/api/user/UserApiImpl.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApiImpl.java similarity index 64% rename from yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/api/user/UserApiImpl.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApiImpl.java index 656642e511..35e7b51cec 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/api/user/UserApiImpl.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApiImpl.java @@ -2,8 +2,8 @@ package cn.iocoder.yudao.module.member.api.user; import cn.iocoder.yudao.module.member.api.user.dto.UserRespDTO; import cn.iocoder.yudao.module.member.convert.user.UserConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO; -import cn.iocoder.yudao.module.member.service.user.UserService; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; +import cn.iocoder.yudao.module.member.service.user.MemberUserService; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -16,14 +16,14 @@ import javax.annotation.Resource; */ @Service @Validated -public class UserApiImpl implements UserApi { +public class MemberUserApiImpl implements MemberUserApi { @Resource - private UserService userService; + private MemberUserService userService; @Override public UserRespDTO getUser(Long id) { - UserDO user = userService.getUser(id); + MemberUserDO user = userService.getUser(id); return UserConvert.INSTANCE.convert2(user); } diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java index e2924b82a6..d55d44dd79 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java @@ -1,18 +1,15 @@ package cn.iocoder.yudao.module.member.controller.app.auth; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; import cn.iocoder.yudao.module.member.controller.app.auth.vo.*; -import cn.iocoder.yudao.module.member.service.auth.AuthService; -import cn.iocoder.yudao.module.member.service.sms.SysSmsCodeService; +import cn.iocoder.yudao.module.member.service.auth.MemberAuthService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -31,14 +28,8 @@ import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUti @Slf4j public class AppAuthController { - @Autowired - @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") // AuthService 存在é‡å - private AuthService authService; - @Resource - private SysSmsCodeService smsCodeService; - @Resource - private SysSocialCoreService socialService; + private MemberAuthService authService; @PostMapping("/login") @ApiOperation("使用手机 + 密ç ç™»å½•") @@ -62,14 +53,7 @@ public class AppAuthController { @ApiOperation(value = "å‘逿‰‹æœºéªŒè¯ç ") @OperateLog(enable = false) // é¿å… Post 请求被记录æ“作日志 public CommonResult sendSmsCode(@RequestBody @Valid AppAuthSendSmsReqVO reqVO) { - smsCodeService.sendSmsCode(reqVO.getMobile(), reqVO.getScene(), getClientIP()); - return success(true); - } - - @GetMapping("/send-sms-code-login") // TODO 芋艿:post 比较åˆç† - @ApiOperation(value = "å‘已登录用户å‘é€éªŒè¯ç ",notes = "修改手机时验è¯åŽŸæ‰‹æœºå·ä½¿ç”¨") - public CommonResult sendSmsCodeLogin() { - smsCodeService.sendSmsCodeLogin(getLoginUserId()); + authService.sendSmsCode(getLoginUserId(), reqVO); return success(true); } @@ -100,18 +84,18 @@ public class AppAuthController { }) public CommonResult socialAuthRedirect(@RequestParam("type") Integer type, @RequestParam("redirectUri") String redirectUri) { - return CommonResult.success(socialService.getAuthorizeUrl(type, redirectUri)); + return CommonResult.success(authService.getSocialAuthorizeUrl(type, redirectUri)); } @PostMapping("/social-login") - @ApiOperation("社交登录,使用 code 授æƒç ") + @ApiOperation(value = "社交登录,使用 code 授æƒç ", notes = "é€‚åˆæœªç™»å½•的用户,但是社交账å·å·²ç»‘定用户") public CommonResult socialLogin(@RequestBody @Valid AppAuthSocialLoginReqVO reqVO) { String token = authService.socialLogin(reqVO, getClientIP(), getUserAgent()); return success(AppAuthLoginRespVO.builder().token(token).build()); } @PostMapping("/social-login2") - @ApiOperation("社交登录,使用 æ‰‹æœºå· + 手机验è¯ç ") + @ApiOperation(value = "社交登录,使用 æ‰‹æœºå· + 手机验è¯ç ", notes = "é€‚åˆæœªç™»å½•的用户,进行登录 + 绑定") @OperateLog(enable = false) // é¿å… Post 请求被记录æ“作日志 public CommonResult socialLogin2(@RequestBody @Valid AppAuthSocialLogin2ReqVO reqVO) { String token = authService.socialLogin2(reqVO, getClientIP(), getUserAgent()); @@ -119,7 +103,7 @@ public class AppAuthController { } @PostMapping("/social-bind") - @ApiOperation("社交绑定,使用 code 授æƒç ") + @ApiOperation(value = "社交绑定,使用 code 授æƒç ", notes = "使用在用户已ç»ç™»å½•的情况下") @PreAuthenticated public CommonResult socialBind(@RequestBody @Valid AppAuthSocialBindReqVO reqVO) { authService.socialBind(getLoginUserId(), reqVO); @@ -130,7 +114,7 @@ public class AppAuthController { @ApiOperation("å–æ¶ˆç¤¾äº¤ç»‘定") @PreAuthenticated public CommonResult socialUnbind(@RequestBody AppAuthSocialUnbindReqVO reqVO) { - socialService.unbindSocialUser(getLoginUserId(), reqVO.getType(), reqVO.getUnionId(), UserTypeEnum.MEMBER); + authService.unbindSocialUser(getLoginUserId(), reqVO); return CommonResult.success(true); } diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthCheckCodeReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthCheckCodeReqVO.java index 95fca74afa..63b113e0af 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthCheckCodeReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthCheckCodeReqVO.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.member.controller.app.auth.vo; import cn.iocoder.yudao.framework.common.validation.InEnum; import cn.iocoder.yudao.framework.common.validation.Mobile; -import cn.iocoder.yudao.module.member.enums.sms.SysSmsSceneEnum; +import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; @@ -36,7 +36,7 @@ public class AppAuthCheckCodeReqVO { @ApiModelProperty(value = "å‘é€åœºæ™¯", example = "1", notes = "对应 MbrSmsSceneEnum 枚举") @NotNull(message = "å‘é€åœºæ™¯ä¸èƒ½ä¸ºç©º") - @InEnum(SysSmsSceneEnum.class) + @InEnum(SmsSceneEnum.class) private Integer scene; } diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSendSmsReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSendSmsReqVO.java index 41aa36936b..91656b1d49 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSendSmsReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSendSmsReqVO.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.member.controller.app.auth.vo; import cn.iocoder.yudao.framework.common.validation.InEnum; import cn.iocoder.yudao.framework.common.validation.Mobile; -import cn.iocoder.yudao.module.member.enums.sms.SysSmsSceneEnum; +import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -21,7 +21,7 @@ public class AppAuthSendSmsReqVO { @ApiModelProperty(value = "å‘é€åœºæ™¯", example = "1", notes = "对应 MbrSmsSceneEnum 枚举") @NotNull(message = "å‘é€åœºæ™¯ä¸èƒ½ä¸ºç©º") - @InEnum(SysSmsSceneEnum.class) + @InEnum(SmsSceneEnum.class) private Integer scene; } diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialBindReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialBindReqVO.java index 46ad9b6270..3ca4083185 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialBindReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialBindReqVO.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.member.controller.app.auth.vo; import cn.iocoder.yudao.framework.common.validation.InEnum; +import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; @@ -19,7 +20,7 @@ import javax.validation.constraints.NotNull; public class AppAuthSocialBindReqVO { @ApiModelProperty(value = "社交平å°çš„类型", required = true, example = "10", notes = "å‚è§ SysUserSocialTypeEnum 枚举值") - @InEnum(SysSocialTypeEnum.class) + @InEnum(SocialTypeEnum.class) @NotNull(message = "社交平å°çš„类型ä¸èƒ½ä¸ºç©º") private Integer type; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppUserController.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppUserController.java index 9f1d25d786..94d67d4cfc 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppUserController.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppUserController.java @@ -5,8 +5,8 @@ import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoRespVO; import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserUpdateMobileReqVO; import cn.iocoder.yudao.module.member.convert.user.UserConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO; -import cn.iocoder.yudao.module.member.service.user.UserService; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; +import cn.iocoder.yudao.module.member.service.user.MemberUserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -21,7 +21,7 @@ import java.io.IOException; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.*; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; -import static cn.iocoder.yudao.module.member.enums.MemberErrorCodeConstants.FILE_IS_EMPTY; +import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.FILE_IS_EMPTY; @Api(tags = "用户 APP - 用户个人中心") @RestController @@ -31,7 +31,7 @@ import static cn.iocoder.yudao.module.member.enums.MemberErrorCodeConstants.FILE public class AppUserController { @Resource - private UserService userService; + private MemberUserService userService; @PutMapping("/update-nickname") @ApiOperation("修改用户昵称") @@ -56,7 +56,7 @@ public class AppUserController { @ApiOperation("获得基本信æ¯") @PreAuthenticated public CommonResult getUserInfo() { - UserDO user = userService.getUser(getLoginUserId()); + MemberUserDO user = userService.getUser(getLoginUserId()); return success(UserConvert.INSTANCE.convert(user)); } diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/auth/AuthConvert.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/auth/AuthConvert.java index 419a70e0ba..ddb545aa5f 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/auth/AuthConvert.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/auth/AuthConvert.java @@ -2,7 +2,13 @@ package cn.iocoder.yudao.module.member.convert.auth; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.security.core.LoginUser; -import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.member.controller.app.auth.vo.AppAuthSocialBindReqVO; +import cn.iocoder.yudao.module.member.controller.app.auth.vo.AppAuthSocialLogin2ReqVO; +import cn.iocoder.yudao.module.member.controller.app.auth.vo.AppAuthSocialLoginReqVO; +import cn.iocoder.yudao.module.member.controller.app.auth.vo.AppAuthSocialUnbindReqVO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; +import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; +import cn.iocoder.yudao.module.system.api.social.dto.SocialUserUnbindReqDTO; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.factory.Mappers; @@ -13,11 +19,16 @@ public interface AuthConvert { AuthConvert INSTANCE = Mappers.getMapper(AuthConvert.class); @Mapping(source = "mobile", target = "username") - LoginUser convert0(UserDO bean); + LoginUser convert0(MemberUserDO bean); - default LoginUser convert(UserDO bean) { + default LoginUser convert(MemberUserDO bean) { // 目的,为了设置 UserTypeEnum.MEMBER.getValue() return convert0(bean).setUserType(UserTypeEnum.MEMBER.getValue()); } + SocialUserBindReqDTO convert(Long userId, Integer value, AppAuthSocialBindReqVO reqVO); + SocialUserBindReqDTO convert(Long userId, Integer value, AppAuthSocialLogin2ReqVO reqVO); + SocialUserBindReqDTO convert(Long userId, Integer value, AppAuthSocialLoginReqVO reqVO); + SocialUserUnbindReqDTO convert(Long userId, Integer value, AppAuthSocialUnbindReqVO reqVO); + } diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/user/UserConvert.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/user/UserConvert.java index a490edfafc..b72051d63a 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/user/UserConvert.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/user/UserConvert.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.member.convert.user; import cn.iocoder.yudao.module.member.api.user.dto.UserRespDTO; import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoRespVO; -import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -11,7 +11,7 @@ public interface UserConvert { UserConvert INSTANCE = Mappers.getMapper(UserConvert.class); - AppUserInfoRespVO convert(UserDO bean); + AppUserInfoRespVO convert(MemberUserDO bean); - UserRespDTO convert2(UserDO bean); + UserRespDTO convert2(MemberUserDO bean); } diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/address/package-info.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/address/package-info.java new file mode 100644 index 0000000000..c318d2c941 --- /dev/null +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/address/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.member.dal.dataobject.address; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/UserDO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java similarity index 96% rename from yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/UserDO.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java index adefe1429d..155505292d 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/UserDO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java @@ -22,7 +22,7 @@ import java.util.Date; @Builder @NoArgsConstructor @AllArgsConstructor -public class UserDO extends TenantBaseDO { +public class MemberUserDO extends TenantBaseDO { /** * 用户ID diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/sms/SysSmsCodeMapper.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/sms/SysSmsCodeMapper.java deleted file mode 100644 index ccdbcf6cec..0000000000 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/sms/SysSmsCodeMapper.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.yudao.module.member.dal.mysql.sms; - -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.yudao.module.member.dal.dataobject.sms.SysSmsCodeDO; -import org.apache.ibatis.annotations.Mapper; - -// TODO @芋艿:拿到 system 模å—下 -@Mapper -public interface SysSmsCodeMapper extends BaseMapperX { - - /** - * 获得手机å·çš„æœ€åŽä¸€ä¸ªæ‰‹æœºéªŒè¯ç  - * - * @param mobile æ‰‹æœºå· - * @param scene å‘é€åœºæ™¯ï¼Œé€‰å¡« - * @param code 验è¯ç  选填 - * @return 手机验è¯ç  - */ - default SysSmsCodeDO selectLastByMobile(String mobile,String code,Integer scene) { - return selectOne(new QueryWrapperX() - .eq("mobile", mobile) - .eqIfPresent("scene", scene) - .eqIfPresent("code", code) - .orderByDesc("id") - .last("LIMIT 1")); - } -} diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MemberUserMapper.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MemberUserMapper.java new file mode 100644 index 0000000000..9ba09a111c --- /dev/null +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MemberUserMapper.java @@ -0,0 +1,19 @@ +package cn.iocoder.yudao.module.member.dal.mysql.user; + +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 会员 User Mapper + * + * @author èŠ‹é“æºç  + */ +@Mapper +public interface MemberUserMapper extends BaseMapperX { + + default MemberUserDO selectByMobile(String mobile) { + return selectOne(MemberUserDO::getMobile, mobile); + } + +} diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/UserMapper.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/UserMapper.java deleted file mode 100644 index d962811e67..0000000000 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/UserMapper.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.iocoder.yudao.module.member.dal.mysql.user; - -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO; -import org.apache.ibatis.annotations.Mapper; - -/** - * 会员 User Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface UserMapper extends BaseMapperX { - - default UserDO selectByMobile(String mobile) { - return selectOne(UserDO::getMobile, mobile); - } - -} diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/MemberErrorCodeConstants.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/MemberErrorCodeConstants.java deleted file mode 100644 index 4ee545b1bf..0000000000 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/MemberErrorCodeConstants.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.iocoder.yudao.module.member.enums; - -import cn.iocoder.yudao.framework.common.exception.ErrorCode; - -/** - * Member é”™è¯¯ç æžšä¸¾ç±» - * - * member 系统,使用 1-004-000-000 段 - */ -public interface MemberErrorCodeConstants { - - // ==========用户相关 1004001000============ - ErrorCode USER_NOT_EXISTS = new ErrorCode(1004001000, "用户ä¸å­˜åœ¨"); - - // ==========文件相关 1004002000 =========== - ErrorCode FILE_IS_EMPTY = new ErrorCode(1004002000, "文件为空"); - -} diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/SysErrorCodeConstants.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/SysErrorCodeConstants.java deleted file mode 100644 index b1b23a3526..0000000000 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/SysErrorCodeConstants.java +++ /dev/null @@ -1,32 +0,0 @@ -package cn.iocoder.yudao.module.member.enums; - -import cn.iocoder.yudao.framework.common.exception.ErrorCode; - -/** - * System é”™è¯¯ç æžšä¸¾ç±» - * - * system 系统,使用 1-005-000-000 段 - */ -public interface SysErrorCodeConstants { - - // ========== AUTH æ¨¡å— 1005000000 ========== - ErrorCode AUTH_LOGIN_BAD_CREDENTIALS = new ErrorCode(1005000000, "登录失败,账å·å¯†ç ä¸æ­£ç¡®"); - ErrorCode AUTH_LOGIN_USER_DISABLED = new ErrorCode(1005000001, "登录失败,账å·è¢«ç¦ç”¨"); - ErrorCode AUTH_LOGIN_FAIL_UNKNOWN = new ErrorCode(1005000002, "登录失败"); // 登录失败的兜底,未知原因 - ErrorCode AUTH_TOKEN_EXPIRED = new ErrorCode(1005000003, "Token å·²ç»è¿‡æœŸ"); - ErrorCode AUTH_THIRD_LOGIN_NOT_BIND = new ErrorCode(1005000004, "未绑定账å·ï¼Œéœ€è¦è¿›è¡Œç»‘定"); - - // ========== SMS CODE æ¨¡å— 1005001000 ========== - ErrorCode USER_SMS_CODE_NOT_FOUND = new ErrorCode(1005001000, "验è¯ç ä¸å­˜åœ¨"); - ErrorCode USER_SMS_CODE_EXPIRED = new ErrorCode(1005001001, "验è¯ç å·²è¿‡æœŸ"); - ErrorCode USER_SMS_CODE_USED = new ErrorCode(1005001002, "验è¯ç å·²ä½¿ç”¨"); - ErrorCode USER_SMS_CODE_NOT_CORRECT = new ErrorCode(1005001003, "验è¯ç ä¸æ­£ç¡®"); - ErrorCode USER_SMS_CODE_EXCEED_SEND_MAXIMUM_QUANTITY_PER_DAY = new ErrorCode(1005001004, "è¶…è¿‡æ¯æ—¥çŸ­ä¿¡å‘逿•°é‡"); - ErrorCode USER_SMS_CODE_SEND_TOO_FAST = new ErrorCode(1005001005, "短信å‘é€è¿‡äºŽé¢‘率"); - ErrorCode USER_SMS_CODE_IS_EXISTS = new ErrorCode(1005001006, "手机å·å·²è¢«ä½¿ç”¨"); - ErrorCode USER_SMS_CODE_IS_UNUSED = new ErrorCode(1005001006, "验è¯ç æœªè¢«ä½¿ç”¨"); - - // ========== ç”¨æˆ·æ¨¡å— 1005002000 ========== - ErrorCode USER_NOT_EXISTS = new ErrorCode(1005002001, "用户ä¸å­˜åœ¨"); - ErrorCode USER_PASSWORD_FAILED = new ErrorCode(1005002003, "å¯†ç æ ¡éªŒå¤±è´¥"); -} diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/package-info.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/package-info.java new file mode 100644 index 0000000000..9e136937a0 --- /dev/null +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/package-info.java @@ -0,0 +1,4 @@ +/** + * å ä½ + */ +package cn.iocoder.yudao.module.member.enums; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/sms/SysSmsSceneEnum.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/sms/SysSmsSceneEnum.java deleted file mode 100644 index a471901176..0000000000 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/sms/SysSmsSceneEnum.java +++ /dev/null @@ -1,54 +0,0 @@ -package cn.iocoder.yudao.module.member.enums.sms; - -import cn.iocoder.yudao.framework.common.core.IntArrayValuable; -import lombok.AllArgsConstructor; -import lombok.Getter; - -import java.util.Arrays; - -/** - * 用户短信验è¯ç å‘é€åœºæ™¯çš„æžšä¸¾ - * - * @author èŠ‹é“æºç  - */ -@Getter -@AllArgsConstructor -public enum SysSmsSceneEnum implements IntArrayValuable { - - LOGIN_BY_SMS(1,SysSmsTemplateCodeConstants.USER_SMS_LOGIN, "手机å·ç™»é™†"), - CHANGE_MOBILE_BY_SMS(2,SysSmsTemplateCodeConstants.USER_SMS_UPDATE_MOBILE, "æ›´æ¢æ‰‹æœºå·"), - FORGET_MOBILE_BY_SMS(3,SysSmsTemplateCodeConstants.USER_SMS_RESET_PASSWORD, "忘记密ç "), - ; - - public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(SysSmsSceneEnum::getScene).toArray(); - - /** - * 验è¯é‚£åœºæ™¯ç¼–å· - */ - private final Integer scene; - - /** - * æ¨¡ç‰ˆç¼–ç  - */ - private final String code; - - /** - * æè¿° - */ - private final String name; - - @Override - public int[] array() { - return ARRAYS; - } - - public static String getCodeByScene(Integer scene){ - for (SysSmsSceneEnum value : values()) { - if (value.getScene().equals(scene)){ - return value.getCode(); - } - } - return null; - } - -} diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/sms/SysSmsTemplateCodeConstants.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/sms/SysSmsTemplateCodeConstants.java deleted file mode 100644 index 3ad8439cd6..0000000000 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/sms/SysSmsTemplateCodeConstants.java +++ /dev/null @@ -1,25 +0,0 @@ -package cn.iocoder.yudao.module.member.enums.sms; - -/** - * yudao-user-server 使用到的短信模æ¿çš„ Code ç¼–ç çš„æžšä¸¾ - * - * @author èŠ‹é“æºç  - */ -public interface SysSmsTemplateCodeConstants { - - /** - * å‰å°ç”¨æˆ·çŸ­ä¿¡ç™»å½• - */ - String USER_SMS_LOGIN = "user-sms-login"; - - /** - * ç”¨æˆ·å¿˜è®°å¯†ç  - */ - String USER_SMS_RESET_PASSWORD = "user-sms-reset-password"; - - /** - * ç”¨æˆ·æ›´æ–°æ‰‹æœºå· - */ - String USER_SMS_UPDATE_MOBILE = "user-sms-update-mobile"; - -} diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/AuthService.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthService.java similarity index 75% rename from yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/AuthService.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthService.java index 98b87c505d..b72ac5ee77 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/AuthService.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthService.java @@ -12,7 +12,7 @@ import javax.validation.Valid; * * @author èŠ‹é“æºç  */ -public interface AuthService extends SecurityAuthFrameworkService { +public interface MemberAuthService extends SecurityAuthFrameworkService { /** * 手机 + 密ç ç™»å½• @@ -63,6 +63,23 @@ public interface AuthService extends SecurityAuthFrameworkService { */ void socialBind(Long userId, @Valid AppAuthSocialBindReqVO reqVO); + /** + * å–æ¶ˆç¤¾äº¤ç»‘定 + * + * @param userId ç”¨æˆ·ç¼–å· + * @param reqVO è§£ç»‘ä¿¡æ¯ + */ + void unbindSocialUser(Long userId, @Valid AppAuthSocialUnbindReqVO reqVO); + + /** + * èŽ·å¾—ç¤¾äº¤è®¤è¯ URL + * + * @param type 社交平å°ç±»åž‹ + * @param redirectUri è·³è½¬åœ°å€ + * @return è®¤è¯ URL + */ + String getSocialAuthorizeUrl(Integer type, String redirectUri); + /** * ä¿®æ”¹ç”¨æˆ·å¯†ç  * @param userId 用户id @@ -76,4 +93,12 @@ public interface AuthService extends SecurityAuthFrameworkService { */ void resetPassword(AppAuthResetPasswordReqVO userReqVO); + /** + * 给用户å‘é€çŸ­ä¿¡éªŒè¯ç  + * + * @param userId ç”¨æˆ·ç¼–å· + * @param reqVO å‘é€ä¿¡æ¯ + */ + void sendSmsCode(Long userId, AppAuthSendSmsReqVO reqVO); + } diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/AuthServiceImpl.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java similarity index 61% rename from yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/AuthServiceImpl.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java index 0cf21d1a9f..6158326c5b 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/AuthServiceImpl.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java @@ -1,14 +1,6 @@ package cn.iocoder.yudao.module.member.service.auth; -import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; -import cn.iocoder.yudao.module.system.dal.dataobject.social.SysSocialUserDO; -import cn.iocoder.yudao.module.system.enums.logger.SysLoginLogTypeEnum; -import cn.iocoder.yudao.module.system.enums.logger.SysLoginResultEnum; -import cn.iocoder.yudao.module.system.service.auth.SysUserSessionCoreService; -import cn.iocoder.yudao.module.system.service.logger.SysLoginLogCoreService; -import cn.iocoder.yudao.module.system.service.logger.dto.SysLoginLogCreateReqDTO; -import cn.iocoder.yudao.module.system.service.social.SysSocialCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils; @@ -17,14 +9,18 @@ import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.framework.security.core.authentication.MultiUsernamePasswordAuthenticationToken; import cn.iocoder.yudao.module.member.controller.app.auth.vo.*; import cn.iocoder.yudao.module.member.convert.auth.AuthConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO; -import cn.iocoder.yudao.module.member.dal.mysql.user.UserMapper; -import cn.iocoder.yudao.module.member.enums.sms.SysSmsSceneEnum; -import cn.iocoder.yudao.module.member.service.sms.SysSmsCodeService; -import cn.iocoder.yudao.module.member.service.user.UserService; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; +import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; +import cn.iocoder.yudao.module.member.service.user.MemberUserService; +import cn.iocoder.yudao.module.system.api.auth.UserSessionApi; +import cn.iocoder.yudao.module.system.api.logger.LoginLogApi; +import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO; +import cn.iocoder.yudao.module.system.api.social.SocialUserApi; +import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum; +import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum; +import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; import com.google.common.annotations.VisibleForTesting; import lombok.extern.slf4j.Slf4j; -import me.zhyd.oauth.model.AuthUser; import org.springframework.context.annotation.Lazy; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.BadCredentialsException; @@ -38,46 +34,45 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.util.List; import java.util.Objects; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; -import static cn.iocoder.yudao.module.member.enums.SysErrorCodeConstants.*; +import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*; /** * ä¼šå‘˜çš„è®¤è¯ Service æŽ¥å£ * * @author èŠ‹é“æºç  */ -@Service("memberAuthService") +@Service @Slf4j -public class AuthServiceImpl implements AuthService { +public class MemberAuthServiceImpl implements MemberAuthService { @Resource @Lazy // 延迟加载,因为存在相互ä¾èµ–的问题 private AuthenticationManager authenticationManager; @Resource - private UserService userService; + private MemberUserService userService; @Resource private SysSmsCodeService smsCodeService; @Resource - private SysLoginLogCoreService loginLogCoreService; + private LoginLogApi loginLogApi; @Resource - private SysUserSessionCoreService userSessionCoreService; + private UserSessionApi userSessionApi; @Resource - private SysSocialCoreService socialService; + private SocialUserApi socialUserApi; @Resource private PasswordEncoder passwordEncoder; @Resource - private UserMapper userMapper; + private MemberUserMapper userMapper; @Override public UserDetails loadUserByUsername(String mobile) throws UsernameNotFoundException { // èŽ·å– username 对应的 SysUserDO - UserDO user = userService.getUserByMobile(mobile); + MemberUserDO user = userService.getUserByMobile(mobile); if (user == null) { throw new UsernameNotFoundException(mobile); } @@ -91,86 +86,87 @@ public class AuthServiceImpl implements AuthService { LoginUser loginUser = this.login0(reqVO.getMobile(), reqVO.getPassword()); // 缓存登录用户到 Redis 中,返回 sessionId ç¼–å· - return userSessionCoreService.createUserSession(loginUser, userIp, userAgent); + return userSessionApi.createUserSession(loginUser, userIp, userAgent); } @Override @Transactional public String smsLogin(AppAuthSmsLoginReqVO reqVO, String userIp, String userAgent) { // 校验验è¯ç  - smsCodeService.useSmsCode(reqVO.getMobile(), SysSmsSceneEnum.LOGIN_BY_SMS.getScene(), + smsCodeService.useSmsCode(reqVO.getMobile(), SmsSceneEnum.MEMBER_LOGIN.getScene(), reqVO.getCode(), userIp); // 获得获得注册用户 - UserDO user = userService.createUserIfAbsent(reqVO.getMobile(), userIp); + MemberUserDO user = userService.createUserIfAbsent(reqVO.getMobile(), userIp); Assert.notNull(user, "获å–用户失败,结果为空"); // 执行登陆 - this.createLoginLog(user.getMobile(), SysLoginLogTypeEnum.LOGIN_SMS, SysLoginResultEnum.SUCCESS); + this.createLoginLog(user.getMobile(), LoginLogTypeEnum.LOGIN_SMS, LoginResultEnum.SUCCESS); LoginUser loginUser = AuthConvert.INSTANCE.convert(user); // 缓存登录用户到 Redis 中,返回 sessionId ç¼–å· - return userSessionCoreService.createUserSession(loginUser, userIp, userAgent); + return userSessionApi.createUserSession(loginUser, userIp, userAgent); } @Override public String socialLogin(AppAuthSocialLoginReqVO reqVO, String userIp, String userAgent) { - // 使用 code 授æƒç ï¼Œè¿›è¡Œç™»å½• - AuthUser authUser = socialService.getAuthUser(reqVO.getType(), reqVO.getCode(), reqVO.getState()); - org.springframework.util.Assert.notNull(authUser, "授æƒç”¨æˆ·ä¸ä¸ºç©º"); - - // 如果未绑定 SysSocialUserDO 用户,则无法自动登录,进行报错 - String unionId = socialService.getAuthUserUnionId(authUser); - List socialUsers = socialService.getAllSocialUserList(reqVO.getType(), unionId, getUserType()); - if (CollUtil.isEmpty(socialUsers)) { + // 使用 code 授æƒç ï¼Œè¿›è¡Œç™»å½•。然åŽï¼ŒèŽ·å¾—åˆ°ç»‘å®šçš„ç”¨æˆ·ç¼–å· + Long userId = socialUserApi.getBindUserId(UserTypeEnum.MEMBER.getValue(), reqVO.getType(), + reqVO.getCode(), reqVO.getState()); + if (userId == null) { throw exception(AUTH_THIRD_LOGIN_NOT_BIND); } // 自动登录 - UserDO user = userService.getUser(socialUsers.get(0).getUserId()); + MemberUserDO user = userService.getUser(userId); if (user == null) { throw exception(USER_NOT_EXISTS); } - this.createLoginLog(user.getMobile(), SysLoginLogTypeEnum.LOGIN_SOCIAL, SysLoginResultEnum.SUCCESS); + this.createLoginLog(user.getMobile(), LoginLogTypeEnum.LOGIN_SOCIAL, LoginResultEnum.SUCCESS); // 创建 LoginUser 对象 LoginUser loginUser = AuthConvert.INSTANCE.convert(user); // 绑定社交用户(更新) - socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, getUserType()); + socialUserApi.bindSocialUser(AuthConvert.INSTANCE.convert(loginUser.getId(), getUserType().getValue(), reqVO)); // 缓存登录用户到 Redis 中,返回 sessionId ç¼–å· - return userSessionCoreService.createUserSession(loginUser, userIp, userAgent); + return userSessionApi.createUserSession(loginUser, userIp, userAgent); } @Override public String socialLogin2(AppAuthSocialLogin2ReqVO reqVO, String userIp, String userAgent) { - AuthUser authUser = socialService.getAuthUser(reqVO.getType(), reqVO.getCode(), reqVO.getState()); - org.springframework.util.Assert.notNull(authUser, "授æƒç”¨æˆ·ä¸ä¸ºç©º"); + // 校验社交平å°çš„认è¯ä¿¡æ¯æ˜¯å¦æ­£ç¡® + socialUserApi.checkSocialUser(reqVO.getType(), reqVO.getCode(), reqVO.getState()); // 使用手机å·ã€æ‰‹æœºéªŒè¯ç ç™»å½• AppAuthSmsLoginReqVO loginReqVO = AppAuthSmsLoginReqVO.builder() .mobile(reqVO.getMobile()).code(reqVO.getSmsCode()).build(); String sessionId = this.smsLogin(loginReqVO, userIp, userAgent); - LoginUser loginUser = userSessionCoreService.getLoginUser(sessionId); + LoginUser loginUser = userSessionApi.getLoginUser(sessionId); // 绑定社交用户(新增) - socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, getUserType()); + socialUserApi.bindSocialUser(AuthConvert.INSTANCE.convert(loginUser.getId(), getUserType().getValue(), reqVO)); return sessionId; } @Override public void socialBind(Long userId, AppAuthSocialBindReqVO reqVO) { - // 使用 code 授æƒç ï¼Œè¿›è¡Œç™»å½• - AuthUser authUser = socialService.getAuthUser(reqVO.getType(), reqVO.getCode(), reqVO.getState()); - org.springframework.util.Assert.notNull(authUser, "授æƒç”¨æˆ·ä¸ä¸ºç©º"); + socialUserApi.bindSocialUser(AuthConvert.INSTANCE.convert(userId, getUserType().getValue(), reqVO)); + } - // 绑定社交用户(新增) - socialService.bindSocialUser(userId, reqVO.getType(), authUser, getUserType()); + @Override + public void unbindSocialUser(Long userId, AppAuthSocialUnbindReqVO reqVO) { + socialUserApi.unbindSocialUser(AuthConvert.INSTANCE.convert(userId, getUserType().getValue(), reqVO)); + } + + @Override + public String getSocialAuthorizeUrl(Integer type, String redirectUri) { + return socialUserApi.getAuthorizeUrl(type, redirectUri); } private LoginUser login0(String username, String password) { - final SysLoginLogTypeEnum logTypeEnum = SysLoginLogTypeEnum.LOGIN_USERNAME; + final LoginLogTypeEnum logType = LoginLogTypeEnum.LOGIN_USERNAME; // ç”¨æˆ·éªŒè¯ Authentication authentication; try { @@ -179,28 +175,28 @@ public class AuthServiceImpl implements AuthService { authentication = authenticationManager.authenticate(new MultiUsernamePasswordAuthenticationToken( username, password, getUserType())); } catch (BadCredentialsException badCredentialsException) { - this.createLoginLog(username, logTypeEnum, SysLoginResultEnum.BAD_CREDENTIALS); + this.createLoginLog(username, logType, LoginResultEnum.BAD_CREDENTIALS); throw exception(AUTH_LOGIN_BAD_CREDENTIALS); } catch (DisabledException disabledException) { - this.createLoginLog(username, logTypeEnum, SysLoginResultEnum.USER_DISABLED); + this.createLoginLog(username, logType, LoginResultEnum.USER_DISABLED); throw exception(AUTH_LOGIN_USER_DISABLED); } catch (AuthenticationException authenticationException) { log.error("[login0][username({}) å‘生未知异常]", username, authenticationException); - this.createLoginLog(username, logTypeEnum, SysLoginResultEnum.UNKNOWN_ERROR); + this.createLoginLog(username, logType, LoginResultEnum.UNKNOWN_ERROR); throw exception(AUTH_LOGIN_FAIL_UNKNOWN); } // 登录æˆåŠŸçš„æ—¥å¿— Assert.notNull(authentication.getPrincipal(), "Principal ä¸ä¼šä¸ºç©º"); - this.createLoginLog(username, logTypeEnum, SysLoginResultEnum.SUCCESS); + this.createLoginLog(username, logType, LoginResultEnum.SUCCESS); return (LoginUser) authentication.getPrincipal(); } - private void createLoginLog(String mobile, SysLoginLogTypeEnum logTypeEnum, SysLoginResultEnum loginResult) { + private void createLoginLog(String mobile, LoginLogTypeEnum logType, LoginResultEnum loginResult) { // 获得用户 - UserDO user = userService.getUserByMobile(mobile); + MemberUserDO user = userService.getUserByMobile(mobile); // æ’入登录日志 - SysLoginLogCreateReqDTO reqDTO = new SysLoginLogCreateReqDTO(); - reqDTO.setLogType(logTypeEnum.getType()); + LoginLogCreateReqDTO reqDTO = new LoginLogCreateReqDTO(); + reqDTO.setLogType(logType.getType()); reqDTO.setTraceId(TracerUtils.getTraceId()); if (user != null) { reqDTO.setUserId(user.getId()); @@ -209,9 +205,9 @@ public class AuthServiceImpl implements AuthService { reqDTO.setUserAgent(ServletUtils.getUserAgent()); reqDTO.setUserIp(getClientIP()); reqDTO.setResult(loginResult.getResult()); - loginLogCoreService.createLoginLog(reqDTO); + loginLogApi.createLoginLog(reqDTO); // 更新最åŽç™»å½•æ—¶é—´ - if (user != null && Objects.equals(SysLoginResultEnum.SUCCESS.getResult(), loginResult.getResult())) { + if (user != null && Objects.equals(LoginResultEnum.SUCCESS.getResult(), loginResult.getResult())) { userService.updateUserLogin(user.getId(), getClientIP()); } } @@ -219,7 +215,7 @@ public class AuthServiceImpl implements AuthService { @Override public LoginUser verifyTokenAndRefresh(String token) { // 获得 LoginUser - LoginUser loginUser = userSessionCoreService.getLoginUser(token); + LoginUser loginUser = userSessionApi.getLoginUser(token); if (loginUser == null) { return null; } @@ -231,31 +227,31 @@ public class AuthServiceImpl implements AuthService { private void refreshLoginUserCache(String token, LoginUser loginUser) { // æ¯ 1/3 çš„ Session 超时时间,刷新 LoginUser 缓存 if (System.currentTimeMillis() - loginUser.getUpdateTime().getTime() < - userSessionCoreService.getSessionTimeoutMillis() / 3) { + userSessionApi.getSessionTimeoutMillis() / 3) { return; } // 釿–°åŠ è½½ UserDO ä¿¡æ¯ - UserDO user = userService.getUser(loginUser.getId()); + MemberUserDO user = userService.getUser(loginUser.getId()); if (user == null || CommonStatusEnum.DISABLE.getStatus().equals(user.getStatus())) { // 校验 token 时,用户被ç¦ç”¨çš„æƒ…况下,也认为 token 过期,方便å‰ç«¯è·³è½¬åˆ°ç™»å½•ç•Œé¢ throw exception(AUTH_TOKEN_EXPIRED); } // 刷新 LoginUser 缓存 - userSessionCoreService.refreshUserSession(token, loginUser); + userSessionApi.refreshUserSession(token, loginUser); } @Override public LoginUser mockLogin(Long userId) { // 获å–用户编å·å¯¹åº”çš„ UserDO - UserDO user = userService.getUser(userId); + MemberUserDO user = userService.getUser(userId); if (user == null) { throw new UsernameNotFoundException(String.valueOf(userId)); } // 执行登陆 - this.createLoginLog(user.getMobile(), SysLoginLogTypeEnum.LOGIN_MOCK, SysLoginResultEnum.SUCCESS); + this.createLoginLog(user.getMobile(), LoginLogTypeEnum.LOGIN_MOCK, LoginResultEnum.SUCCESS); // 创建 LoginUser 对象 return AuthConvert.INSTANCE.convert(user); @@ -264,12 +260,12 @@ public class AuthServiceImpl implements AuthService { @Override public void logout(String token) { // æŸ¥è¯¢ç”¨æˆ·ä¿¡æ¯ - LoginUser loginUser = userSessionCoreService.getLoginUser(token); + LoginUser loginUser = userSessionApi.getLoginUser(token); if (loginUser == null) { return; } // 删除 session - userSessionCoreService.deleteUserSession(token); + userSessionApi.deleteUserSession(token); // 记录登出日志 this.createLogoutLog(loginUser.getId(), loginUser.getUsername()); } @@ -282,10 +278,10 @@ public class AuthServiceImpl implements AuthService { @Override public void updatePassword(Long userId, AppAuthUpdatePasswordReqVO reqVO) { // æ£€éªŒæ—§å¯†ç  - UserDO userDO = checkOldPassword(userId, reqVO.getOldPassword()); + MemberUserDO userDO = checkOldPassword(userId, reqVO.getOldPassword()); // æ›´æ–°ç”¨æˆ·å¯†ç  - UserDO mbrUserDO = UserDO.builder().id(userDO.getId()) + MemberUserDO mbrUserDO = MemberUserDO.builder().id(userDO.getId()) .password(passwordEncoder.encode(reqVO.getPassword())).build(); userMapper.updateById(mbrUserDO); } @@ -293,19 +289,24 @@ public class AuthServiceImpl implements AuthService { @Override public void resetPassword(AppAuthResetPasswordReqVO reqVO) { // 检验用户是å¦å­˜åœ¨ - UserDO userDO = checkUserIfExists(reqVO.getMobile()); + MemberUserDO userDO = checkUserIfExists(reqVO.getMobile()); // 使用验è¯ç  - smsCodeService.useSmsCode(reqVO.getMobile(),SysSmsSceneEnum.FORGET_MOBILE_BY_SMS.getScene(), reqVO.getCode(), + smsCodeService.useSmsCode(reqVO.getMobile(), SmsSceneEnum.MEMBER_FORGET_PASSWORD.getScene(), reqVO.getCode(), getClientIP()); // æ›´æ–°å¯†ç  - UserDO mbrUserDO = UserDO.builder().build(); + MemberUserDO mbrUserDO = MemberUserDO.builder().build(); mbrUserDO.setId(userDO.getId()); mbrUserDO.setPassword(passwordEncoder.encode(reqVO.getPassword())); userMapper.updateById(mbrUserDO); } + @Override + public void sendSmsCode(Long userId, AppAuthSendSmsReqVO reqVO) { + // TODO 芋艿:修改 + } + /** * æ ¡éªŒæ—§å¯†ç  * @@ -314,8 +315,8 @@ public class AuthServiceImpl implements AuthService { * @return MemberUserDO 用户实体 */ @VisibleForTesting - public UserDO checkOldPassword(Long id, String oldPassword) { - UserDO user = userMapper.selectById(id); + public MemberUserDO checkOldPassword(Long id, String oldPassword) { + MemberUserDO user = userMapper.selectById(id); if (user == null) { throw exception(USER_NOT_EXISTS); } @@ -326,8 +327,8 @@ public class AuthServiceImpl implements AuthService { return user; } - public UserDO checkUserIfExists(String mobile) { - UserDO user = userMapper.selectByMobile(mobile); + public MemberUserDO checkUserIfExists(String mobile) { + MemberUserDO user = userMapper.selectByMobile(mobile); if (user == null) { throw exception(USER_NOT_EXISTS); } @@ -335,16 +336,16 @@ public class AuthServiceImpl implements AuthService { } private void createLogoutLog(Long userId, String username) { - SysLoginLogCreateReqDTO reqDTO = new SysLoginLogCreateReqDTO(); - reqDTO.setLogType(SysLoginLogTypeEnum.LOGOUT_SELF.getType()); + LoginLogCreateReqDTO reqDTO = new LoginLogCreateReqDTO(); + reqDTO.setLogType(LoginLogTypeEnum.LOGOUT_SELF.getType()); reqDTO.setTraceId(TracerUtils.getTraceId()); reqDTO.setUserId(userId); reqDTO.setUserType(getUserType().getValue()); reqDTO.setUsername(username); reqDTO.setUserAgent(ServletUtils.getUserAgent()); reqDTO.setUserIp(getClientIP()); - reqDTO.setResult(SysLoginResultEnum.SUCCESS.getResult()); - loginLogCoreService.createLoginLog(reqDTO); + reqDTO.setResult(LoginResultEnum.SUCCESS.getResult()); + loginLogApi.createLoginLog(reqDTO); } } diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/sms/SysSmsCodeServiceImpl.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/sms/SysSmsCodeServiceImpl.java deleted file mode 100644 index b15f485686..0000000000 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/sms/SysSmsCodeServiceImpl.java +++ /dev/null @@ -1,137 +0,0 @@ -package cn.iocoder.yudao.module.member.service.sms; - -import cn.hutool.core.map.MapUtil; -import cn.iocoder.yudao.module.system.service.sms.SysSmsCoreService; -import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; -import cn.iocoder.yudao.module.member.dal.dataobject.sms.SysSmsCodeDO; -import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO; -import cn.iocoder.yudao.module.member.dal.mysql.sms.SysSmsCodeMapper; -import cn.iocoder.yudao.module.member.enums.sms.SysSmsSceneEnum; -import cn.iocoder.yudao.module.member.framework.sms.SmsCodeProperties; -import cn.iocoder.yudao.module.member.service.user.UserService; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import javax.annotation.Resource; -import java.util.Date; - -import static cn.hutool.core.util.RandomUtil.randomInt; -import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; -import static cn.iocoder.yudao.module.member.enums.SysErrorCodeConstants.*; - -/** - * 短信验è¯ç  Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Validated -public class SysSmsCodeServiceImpl implements SysSmsCodeService { - - @Resource - private SmsCodeProperties smsCodeProperties; - - @Resource - private SysSmsCodeMapper smsCodeMapper; - - @Resource - private UserService userService; - - @Resource - private SysSmsCoreService smsCoreService; - - @Override - public void sendSmsCode(String mobile, Integer scene, String createIp) { - // 创建验è¯ç  - String code = this.createSmsCode(mobile, scene, createIp); - - // 获å–å‘逿¨¡æ¿ - String codeTemplate = SysSmsSceneEnum.getCodeByScene(scene); - - // å¦‚æžœæ˜¯æ›´æ¢æ‰‹æœºå·å‘é€éªŒè¯ç ï¼Œåˆ™éœ€è¦æ£€æµ‹æ‰‹æœºå·æ˜¯å¦è¢«æ³¨å†Œ - if (SysSmsSceneEnum.CHANGE_MOBILE_BY_SMS.getScene().equals(scene)){ - this.checkMobileIsRegister(mobile,scene); - } - - // å‘é€éªŒè¯ç  - smsCoreService.sendSingleSmsToMember(mobile, null, codeTemplate, - MapUtil.of("code", code)); - } - - public void checkMobileIsRegister(String mobile, Integer scene) { - // æ£€æµ‹æ‰‹æœºå·æ˜¯å¦å·²è¢«ä½¿ç”¨ - UserDO user = userService.getUserByMobile(mobile); - if (user != null) { - throw ServiceExceptionUtil.exception(USER_SMS_CODE_IS_EXISTS); - } - - // å‘é€çŸ­ä¿¡ - this.sendSmsCode(mobile,scene,getClientIP()); - } - - private String createSmsCode(String mobile, Integer scene, String ip) { - // 校验是å¦å¯ä»¥å‘é€éªŒè¯ç ï¼Œä¸ç”¨ç­›é€‰åœºæ™¯ - SysSmsCodeDO lastSmsCode = smsCodeMapper.selectLastByMobile(mobile, null,null); - if (lastSmsCode != null) { - if (lastSmsCode.getTodayIndex() >= smsCodeProperties.getSendMaximumQuantityPerDay()) { // 超过当天å‘é€çš„上é™ã€‚ - throw ServiceExceptionUtil.exception(USER_SMS_CODE_EXCEED_SEND_MAXIMUM_QUANTITY_PER_DAY); - } - if (System.currentTimeMillis() - lastSmsCode.getCreateTime().getTime() - < smsCodeProperties.getSendFrequency().toMillis()) { // å‘é€è¿‡äºŽé¢‘ç¹ - throw ServiceExceptionUtil.exception(USER_SMS_CODE_SEND_TOO_FAST); - } - // TODO 芋艿:æå‡ï¼Œæ¯ä¸ª IP æ¯å¤©å¯å‘逿•°é‡ - // TODO 芋艿:æå‡ï¼Œæ¯ä¸ª IP æ¯å°æ—¶å¯å‘逿•°é‡ - } - - // 创建验è¯ç è®°å½• - String code = String.valueOf(randomInt(smsCodeProperties.getBeginCode(), smsCodeProperties.getEndCode() + 1)); - SysSmsCodeDO newSmsCode = SysSmsCodeDO.builder().mobile(mobile).code(code) - .scene(scene).todayIndex(lastSmsCode != null ? lastSmsCode.getTodayIndex() + 1 : 1) - .createIp(ip).used(false).build(); - smsCodeMapper.insert(newSmsCode); - return code; - } - - @Override - public void useSmsCode(String mobile, Integer scene, String code, String usedIp) { - // 检测验è¯ç æ˜¯å¦æœ‰æ•ˆ - SysSmsCodeDO lastSmsCode = this.checkCodeIsExpired(mobile, code, scene); - - // 判断验è¯ç æ˜¯å¦å·²è¢«ä½¿ç”¨ - if (Boolean.TRUE.equals(lastSmsCode.getUsed())) { - throw ServiceExceptionUtil.exception(USER_SMS_CODE_USED); - } - - // 使用验è¯ç  - smsCodeMapper.updateById(SysSmsCodeDO.builder().id(lastSmsCode.getId()) - .used(true).usedTime(new Date()).usedIp(usedIp).build()); - } - - @Override - public void sendSmsCodeLogin(Long userId) { - UserDO user = userService.getUser(userId); - if (user == null){ - throw ServiceExceptionUtil.exception(USER_NOT_EXISTS); - } - // å‘é€éªŒè¯ç  - this.sendSmsCode(user.getMobile(),SysSmsSceneEnum.CHANGE_MOBILE_BY_SMS.getScene(), getClientIP()); - } - - @Override - public SysSmsCodeDO checkCodeIsExpired(String mobile, String code, Integer scene) { - // 校验验è¯ç  - SysSmsCodeDO lastSmsCode = smsCodeMapper.selectLastByMobile(mobile,code,scene); - - // 若验è¯ç ä¸å­˜åœ¨ï¼ŒæŠ›å‡ºå¼‚常 - if (lastSmsCode == null) { - throw ServiceExceptionUtil.exception(USER_SMS_CODE_NOT_FOUND); - } - if (System.currentTimeMillis() - lastSmsCode.getCreateTime().getTime() - >= smsCodeProperties.getExpireTimes().toMillis()) { // 验è¯ç å·²è¿‡æœŸ - throw ServiceExceptionUtil.exception(USER_SMS_CODE_EXPIRED); - } - return lastSmsCode; - } - -} diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/UserService.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java similarity index 82% rename from yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/UserService.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java index 454e19dc63..1a38e61af1 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/UserService.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java @@ -1,9 +1,8 @@ package cn.iocoder.yudao.module.member.service.user; import cn.iocoder.yudao.framework.common.validation.Mobile; -import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoRespVO; import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserUpdateMobileReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import java.io.InputStream; @@ -12,7 +11,7 @@ import java.io.InputStream; * * @author èŠ‹é“æºç  */ -public interface UserService { +public interface MemberUserService { /** * 通过手机查询用户 @@ -20,7 +19,7 @@ public interface UserService { * @param mobile 手机 * @return 用户对象 */ - UserDO getUserByMobile(String mobile); + MemberUserDO getUserByMobile(String mobile); /** * 基于手机å·åˆ›å»ºç”¨æˆ·ã€‚ @@ -30,7 +29,7 @@ public interface UserService { * @param registerIp 注册 IP * @return 用户对象 */ - UserDO createUserIfAbsent(@Mobile String mobile, String registerIp); + MemberUserDO createUserIfAbsent(@Mobile String mobile, String registerIp); /** * 更新用户的最åŽç™»é™†ä¿¡æ¯ @@ -46,7 +45,7 @@ public interface UserService { * @param id 用户ID * @return ç”¨æˆ·å¯¹è±¡ä¿¡æ¯ */ - UserDO getUser(Long id); + MemberUserDO getUser(Long id); /** * 修改用户昵称 diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/UserServiceImpl.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java similarity index 70% rename from yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/UserServiceImpl.java rename to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java index fd0dd05827..f3348e2347 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/UserServiceImpl.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java @@ -6,11 +6,11 @@ import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreServic import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserUpdateMobileReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.sms.SysSmsCodeDO; -import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO; -import cn.iocoder.yudao.module.member.dal.mysql.user.UserMapper; +import cn.iocoder.yudao.module.member.dal.dataobject.sms.SmsCodeDO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; +import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; import cn.iocoder.yudao.module.member.enums.SysErrorCodeConstants; -import cn.iocoder.yudao.module.member.enums.sms.SysSmsSceneEnum; +import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; import cn.iocoder.yudao.module.member.service.sms.SysSmsCodeService; import com.google.common.annotations.VisibleForTesting; import lombok.extern.slf4j.Slf4j; @@ -25,20 +25,20 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; -import static cn.iocoder.yudao.module.member.enums.MemberErrorCodeConstants.USER_NOT_EXISTS; +import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.USER_NOT_EXISTS; /** * 会员 User Service 实现类 * * @author èŠ‹é“æºç  */ -@Service("memberUserService") +@Service @Valid @Slf4j -public class UserServiceImpl implements UserService { +public class MemberUserServiceImpl implements MemberUserService { @Resource - private UserMapper memberUserMapper; + private MemberUserMapper memberUserMapper; @Resource private InfFileCoreService fileCoreService; @@ -49,14 +49,14 @@ public class UserServiceImpl implements UserService { private PasswordEncoder passwordEncoder; @Override - public UserDO getUserByMobile(String mobile) { + public MemberUserDO getUserByMobile(String mobile) { return memberUserMapper.selectByMobile(mobile); } @Override - public UserDO createUserIfAbsent(String mobile, String registerIp) { + public MemberUserDO createUserIfAbsent(String mobile, String registerIp) { // 用户已ç»å­˜åœ¨ - UserDO user = memberUserMapper.selectByMobile(mobile); + MemberUserDO user = memberUserMapper.selectByMobile(mobile); if (user != null) { return user; } @@ -64,11 +64,11 @@ public class UserServiceImpl implements UserService { return this.createUser(mobile, registerIp); } - private UserDO createUser(String mobile, String registerIp) { + private MemberUserDO createUser(String mobile, String registerIp) { // 生æˆå¯†ç  String password = IdUtil.fastSimpleUUID(); // æ’入用户 - UserDO user = new UserDO(); + MemberUserDO user = new MemberUserDO(); user.setMobile(mobile); user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // é»˜è®¤å¼€å¯ user.setPassword(passwordEncoder.encode(password)); // åŠ å¯†å¯†ç  @@ -79,23 +79,23 @@ public class UserServiceImpl implements UserService { @Override public void updateUserLogin(Long id, String loginIp) { - memberUserMapper.updateById(new UserDO().setId(id) + memberUserMapper.updateById(new MemberUserDO().setId(id) .setLoginIp(loginIp).setLoginDate(new Date())); } @Override - public UserDO getUser(Long id) { + public MemberUserDO getUser(Long id) { return memberUserMapper.selectById(id); } @Override public void updateUserNickname(Long userId, String nickname) { - UserDO user = this.checkUserExists(userId); + MemberUserDO user = this.checkUserExists(userId); // 仅当新昵称ä¸ç­‰äºŽæ—§æ˜µç§°æ—¶è¿›è¡Œä¿®æ”¹ if (nickname.equals(user.getNickname())){ return; } - UserDO userDO = new UserDO(); + MemberUserDO userDO = new MemberUserDO(); userDO.setId(user.getId()); userDO.setNickname(nickname); memberUserMapper.updateById(userDO); @@ -107,7 +107,7 @@ public class UserServiceImpl implements UserService { // 创建文件 String avatar = fileCoreService.createFile(IdUtil.fastUUID(), IoUtil.readBytes(avatarFile)); // 更新头åƒè·¯å¾„ - memberUserMapper.updateById(UserDO.builder().id(userId).avatar(avatar).build()); + memberUserMapper.updateById(MemberUserDO.builder().id(userId).avatar(avatar).build()); return avatar; } @@ -117,27 +117,27 @@ public class UserServiceImpl implements UserService { checkUserExists(userId); // 校验旧手机和旧验è¯ç  - SysSmsCodeDO sysSmsCodeDO = smsCodeService.checkCodeIsExpired(reqVO.getOldMobile(), reqVO.getOldCode(), - SysSmsSceneEnum.CHANGE_MOBILE_BY_SMS.getScene()); + SmsCodeDO sysSmsCodeDO = smsCodeService.checkCodeIsExpired(reqVO.getOldMobile(), reqVO.getOldCode(), + SmsSceneEnum.MEMBER_UPDATE_MOBILE.getScene()); // 判断旧 code æ˜¯å¦æœªè¢«ä½¿ç”¨ï¼Œå¦‚果是,抛出异常 if (Boolean.FALSE.equals(sysSmsCodeDO.getUsed())){ throw ServiceExceptionUtil.exception(SysErrorCodeConstants.USER_SMS_CODE_IS_UNUSED); } // 使用新验è¯ç  - smsCodeService.useSmsCode(reqVO.getMobile(), SysSmsSceneEnum.CHANGE_MOBILE_BY_SMS.getScene(), + smsCodeService.useSmsCode(reqVO.getMobile(), SmsSceneEnum.MEMBER_UPDATE_MOBILE.getScene(), reqVO.getCode(),getClientIP()); // 更新用户手机 - memberUserMapper.updateById(UserDO.builder().id(userId).mobile(reqVO.getMobile()).build()); + memberUserMapper.updateById(MemberUserDO.builder().id(userId).mobile(reqVO.getMobile()).build()); } @VisibleForTesting - public UserDO checkUserExists(Long id) { + public MemberUserDO checkUserExists(Long id) { if (id == null) { return null; } - UserDO user = memberUserMapper.selectById(id); + MemberUserDO user = memberUserMapper.selectById(id); if (user == null) { throw exception(USER_NOT_EXISTS); } diff --git a/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/auth/SysAuthServiceTest.java b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/auth/SysAuthServiceTest.java index 93eb2878ea..06f782ffbe 100644 --- a/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/auth/SysAuthServiceTest.java +++ b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/auth/SysAuthServiceTest.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.member.service.auth; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.system.service.auth.SysUserSessionCoreService; import cn.iocoder.yudao.module.system.service.logger.SysLoginLogCoreService; import cn.iocoder.yudao.module.system.service.social.SysSocialCoreService; @@ -8,10 +9,9 @@ import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; import cn.iocoder.yudao.module.member.controller.app.auth.vo.AppAuthResetPasswordReqVO; import cn.iocoder.yudao.module.member.controller.app.auth.vo.AppAuthUpdatePasswordReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO; -import cn.iocoder.yudao.module.member.dal.mysql.user.UserMapper; +import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; import cn.iocoder.yudao.module.member.service.sms.SysSmsCodeService; -import cn.iocoder.yudao.module.member.service.user.UserService; +import cn.iocoder.yudao.module.member.service.user.MemberUserService; import cn.iocoder.yudao.module.member.test.BaseDbAndRedisUnitTest; import org.junit.jupiter.api.Test; import org.springframework.boot.test.mock.mockito.MockBean; @@ -32,17 +32,17 @@ import static org.mockito.Mockito.when; // TODO @èŠ‹è‰¿ï¼šå•æµ‹çš„ review,等逻辑都达æˆä¸€è‡´åŽ /** - * {@link AuthService} çš„å•元测试类 + * {@link MemberAuthService} çš„å•元测试类 * * @author 宋天 */ -@Import({AuthServiceImpl.class, YudaoRedisAutoConfiguration.class}) +@Import({MemberAuthServiceImpl.class, YudaoRedisAutoConfiguration.class}) public class SysAuthServiceTest extends BaseDbAndRedisUnitTest { @MockBean private AuthenticationManager authenticationManager; @MockBean - private UserService userService; + private MemberUserService userService; @MockBean private SysSmsCodeService smsCodeService; @MockBean @@ -56,14 +56,14 @@ public class SysAuthServiceTest extends BaseDbAndRedisUnitTest { @MockBean private PasswordEncoder passwordEncoder; @Resource - private UserMapper mbrUserMapper; + private MemberUserMapper mbrUserMapper; @Resource - private AuthServiceImpl authService; + private MemberAuthServiceImpl authService; @Test public void testUpdatePassword_success(){ // 准备傿•° - UserDO userDO = randomUserDO(); + MemberUserDO userDO = randomUserDO(); mbrUserMapper.insert(userDO); // æ–°å¯†ç  @@ -88,7 +88,7 @@ public class SysAuthServiceTest extends BaseDbAndRedisUnitTest { @Test public void testResetPassword_success(){ // 准备傿•° - UserDO userDO = randomUserDO(); + MemberUserDO userDO = randomUserDO(); mbrUserMapper.insert(userDO); // éšæœºå¯†ç  @@ -113,12 +113,12 @@ public class SysAuthServiceTest extends BaseDbAndRedisUnitTest { // ========== éšæœºå¯¹è±¡ ========== @SafeVarargs - private static UserDO randomUserDO(Consumer... consumers) { - Consumer consumer = (o) -> { + private static MemberUserDO randomUserDO(Consumer... consumers) { + Consumer consumer = (o) -> { o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 o.setPassword(randomString()); }; - return randomPojo(UserDO.class, ArrayUtils.append(consumer, consumers)); + return randomPojo(MemberUserDO.class, ArrayUtils.append(consumer, consumers)); } diff --git a/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/MbrUserServiceImplTest.java b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/UserServiceImplTest.java similarity index 74% rename from yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/MbrUserServiceImplTest.java rename to yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/UserServiceImplTest.java index 96c562fa93..e68fd03103 100644 --- a/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/MbrUserServiceImplTest.java +++ b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/UserServiceImplTest.java @@ -6,11 +6,11 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserUpdateMobileReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.sms.SysSmsCodeDO; -import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO; -import cn.iocoder.yudao.module.member.dal.mysql.user.UserMapper; -import cn.iocoder.yudao.module.member.enums.sms.SysSmsSceneEnum; -import cn.iocoder.yudao.module.member.service.auth.AuthServiceImpl; +import cn.iocoder.yudao.module.member.dal.dataobject.sms.SmsCodeDO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; +import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; +import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; +import cn.iocoder.yudao.module.member.service.auth.MemberAuthServiceImpl; import cn.iocoder.yudao.module.member.service.sms.SysSmsCodeService; import cn.iocoder.yudao.module.member.test.BaseDbAndRedisUnitTest; import org.junit.jupiter.api.Test; @@ -31,24 +31,24 @@ import static org.mockito.Mockito.*; // TODO @èŠ‹è‰¿ï¼šå•æµ‹çš„ review,等逻辑都达æˆä¸€è‡´åŽ /** - * {@link UserServiceImpl} çš„å•元测试类 + * {@link MemberUserServiceImpl} çš„å•元测试类 * * @author 宋天 */ -@Import({UserServiceImpl.class, YudaoRedisAutoConfiguration.class}) -public class MbrUserServiceImplTest extends BaseDbAndRedisUnitTest { +@Import({MemberUserServiceImpl.class, YudaoRedisAutoConfiguration.class}) +public class UserServiceImplTest extends BaseDbAndRedisUnitTest { @Resource - private UserServiceImpl mbrUserService; + private MemberUserServiceImpl mbrUserService; @Resource private StringRedisTemplate stringRedisTemplate; @Resource - private UserMapper userMapper; + private MemberUserMapper userMapper; @MockBean - private AuthServiceImpl authService; + private MemberAuthServiceImpl authService; @MockBean private InfFileCoreService fileCoreService; @@ -57,12 +57,12 @@ public class MbrUserServiceImplTest extends BaseDbAndRedisUnitTest { private PasswordEncoder passwordEncoder; @MockBean - private SysSmsCodeService sysSmsCodeService; + private SmsCodeService smsCodeService; @Test public void testUpdateNickName_success(){ // mock æ•°æ® - UserDO userDO = randomUserDO(); + MemberUserDO userDO = randomUserDO(); userMapper.insert(userDO); // éšæœºæ˜µç§° @@ -79,7 +79,7 @@ public class MbrUserServiceImplTest extends BaseDbAndRedisUnitTest { @Test public void testUpdateAvatar_success(){ // mock æ•°æ® - UserDO dbUser = randomUserDO(); + MemberUserDO dbUser = randomUserDO(); userMapper.insert(dbUser); // 准备傿•° @@ -99,18 +99,18 @@ public class MbrUserServiceImplTest extends BaseDbAndRedisUnitTest { public void updateMobile_success(){ // mockæ•°æ® String oldMobile = randomNumbers(11); - UserDO userDO = randomUserDO(); + MemberUserDO userDO = randomUserDO(); userDO.setMobile(oldMobile); userMapper.insert(userDO); // 旧手机和旧验è¯ç  - SysSmsCodeDO codeDO = new SysSmsCodeDO(); + SmsCodeDO codeDO = new SmsCodeDO(); String oldCode = RandomUtil.randomString(4); codeDO.setMobile(userDO.getMobile()); codeDO.setCode(oldCode); - codeDO.setScene(SysSmsSceneEnum.CHANGE_MOBILE_BY_SMS.getScene()); + codeDO.setScene(SmsSceneEnum.MEMBER_UPDATE_MOBILE.getScene()); codeDO.setUsed(Boolean.FALSE); - when(sysSmsCodeService.checkCodeIsExpired(codeDO.getMobile(),codeDO.getCode(),codeDO.getScene())).thenReturn(codeDO); + when(smsCodeService.checkCodeIsExpired(codeDO.getMobile(),codeDO.getCode(),codeDO.getScene())).thenReturn(codeDO); // æ›´æ–°æ‰‹æœºå· String newMobile = randomNumbers(11); @@ -128,11 +128,11 @@ public class MbrUserServiceImplTest extends BaseDbAndRedisUnitTest { // ========== éšæœºå¯¹è±¡ ========== @SafeVarargs - private static UserDO randomUserDO(Consumer... consumers) { - Consumer consumer = (o) -> { + private static MemberUserDO randomUserDO(Consumer... consumers) { + Consumer consumer = (o) -> { o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 }; - return randomPojo(UserDO.class, ArrayUtils.append(consumer, consumers)); + return randomPojo(MemberUserDO.class, ArrayUtils.append(consumer, consumers)); } } diff --git a/yudao-module-system/yudao-module-system-api/pom.xml b/yudao-module-system/yudao-module-system-api/pom.xml index 39a402efc6..807eee44f3 100644 --- a/yudao-module-system/yudao-module-system-api/pom.xml +++ b/yudao-module-system/yudao-module-system-api/pom.xml @@ -21,6 +21,20 @@ cn.iocoder.boot yudao-common + + + + org.springframework.boot + spring-boot-starter-validation + true + + + + cn.iocoder.boot + yudao-spring-boot-starter-security + true + + diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/auth/UserSessionApi.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/auth/UserSessionApi.java new file mode 100644 index 0000000000..a35dfae382 --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/auth/UserSessionApi.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.system.api.auth; + +import cn.iocoder.yudao.framework.security.core.LoginUser; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +/** + * 在线用户 Session API æŽ¥å£ + * + * @author èŠ‹é“æºç  + */ +public interface UserSessionApi { + + /** + * 创建在线用户 Session + * + * @param loginUser 登录用户 + * @param userIp 用户 IP + * @param userAgent 用户 UA + * @return Session ç¼–å· + */ + String createUserSession(@NotNull(message = "登录用户ä¸èƒ½ä¸ºç©º") LoginUser loginUser, String userIp, String userAgent); + + /** + * 刷新在线用户 Session 的更新时间 + * + * @param sessionId Session ç¼–å· + * @param loginUser 登录用户 + */ + void refreshUserSession(@NotEmpty(message = "Sessionç¼–å·ä¸èƒ½ä¸ºç©º") String sessionId, + @NotNull(message = "登录用户ä¸èƒ½ä¸ºç©º") LoginUser loginUser); + + /** + * 删除在线用户 Session + * + * @param sessionId Session ç¼–å· + */ + void deleteUserSession(String sessionId); + + /** + * 获得 Session ç¼–å·å¯¹åº”的在线用户 + * + * @param sessionId Session ç¼–å· + * @return 在线用户 + */ + LoginUser getLoginUser(String sessionId); + + /** + * 获得 Session 超时时间,å•ä½ï¼šæ¯«ç§’ + * + * @return è¶…æ—¶æ—¶é—´ + */ + Long getSessionTimeoutMillis(); + +} diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/LoginLogApi.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/LoginLogApi.java new file mode 100644 index 0000000000..4ff596c68a --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/LoginLogApi.java @@ -0,0 +1,21 @@ +package cn.iocoder.yudao.module.system.api.logger; + +import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO; + +import javax.validation.Valid; + +/** + * 登录日志的 API æŽ¥å£ + * + * @author èŠ‹é“æºç  + */ +public interface LoginLogApi { + + /** + * 创建登录日志 + * + * @param reqDTO æ—¥å¿—ä¿¡æ¯ + */ + void createLoginLog(@Valid LoginLogCreateReqDTO reqDTO); + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/dto/LoginLogCreateReqDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/dto/LoginLogCreateReqDTO.java similarity index 95% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/dto/LoginLogCreateReqDTO.java rename to yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/dto/LoginLogCreateReqDTO.java index 5072053c95..514ac2d98c 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/dto/LoginLogCreateReqDTO.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/dto/LoginLogCreateReqDTO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.service.logger.dto; +package cn.iocoder.yudao.module.system.api.logger.dto; import lombok.Data; diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/package-info.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/package-info.java new file mode 100644 index 0000000000..25bfc44416 --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/package-info.java @@ -0,0 +1,4 @@ +/** + * System API 包,定义暴露给其它模å—çš„ API + */ +package cn.iocoder.yudao.module.system.api; diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApi.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApi.java new file mode 100644 index 0000000000..720712108c --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApi.java @@ -0,0 +1,64 @@ +package cn.iocoder.yudao.module.system.api.social; + +import cn.iocoder.yudao.framework.common.exception.ServiceException; +import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; +import cn.iocoder.yudao.module.system.api.social.dto.SocialUserUnbindReqDTO; +import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; + +import javax.validation.Valid; + +/** + * 社交用户的 API æŽ¥å£ + * + * @author èŠ‹é“æºç  + */ +public interface SocialUserApi { + + /** + * 获得社交平å°çš„æŽˆæƒ URL + * + * @param type 社交平å°çš„类型 {@link SocialTypeEnum} + * @param redirectUri é‡å®šå‘ URL + * @return 社交平å°çš„æŽˆæƒ URL + */ + String getAuthorizeUrl(Integer type, String redirectUri); + + /** + * 绑定社交用户 + * + * @param reqDTO ç»‘å®šä¿¡æ¯ + */ + void bindSocialUser(@Valid SocialUserBindReqDTO reqDTO); + + /** + * å–æ¶ˆç»‘定社交用户 + * + * @param reqDTO 解绑 + */ + void unbindSocialUser(@Valid SocialUserUnbindReqDTO reqDTO); + + /** + * 校验社交用户的认è¯ä¿¡æ¯æ˜¯å¦æ­£ç¡® + * 如果校验ä¸é€šè¿‡ï¼Œåˆ™æŠ›å‡º {@link ServiceException} 业务异常 + * + * @param type 社交平å°çš„类型 + * @param code 授æƒç  + * @param state state + */ + void checkSocialUser(Integer type, String code, String state); + + /** + * èŽ·å¾—ç¤¾äº¤ç”¨æˆ·çš„ç»‘å®šç”¨æˆ·ç¼–å· + * 注æ„,返回的是 MemberUser 或者 AdminUser çš„ id ç¼–å·ï¼ + * 该方法会执行和 {@link #checkSocialUser(Integer, String, String)} 一样的逻辑。 + * 所以在认è¯ä¿¡æ¯ä¸æ­£ç¡®çš„æƒ…况下,也会抛出 {@link ServiceException} 业务异常 + * + * @param userType 用户类型 + * @param type 社交平å°çš„类型 + * @param code 授æƒç  + * @param state state + * @return ç»‘å®šç”¨æˆ·ç¼–å· + */ + Long getBindUserId(Integer userType, Integer type, String code, String state); + +} diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserBindReqDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserBindReqDTO.java new file mode 100644 index 0000000000..ccc1c62ae5 --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserBindReqDTO.java @@ -0,0 +1,48 @@ +package cn.iocoder.yudao.module.system.api.social.dto; + +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; +import cn.iocoder.yudao.framework.common.validation.InEnum; +import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +/** + * å–æ¶ˆç»‘定社交用户 Request DTO + * + * @author èŠ‹é“æºç  + */ +@Data +public class SocialUserBindReqDTO { + + /** + * ç”¨æˆ·ç¼–å· + */ + @NotNull(message = "用户编å·ä¸èƒ½ä¸ºç©º") + private Long userId; + /** + * 用户类型 + */ + @InEnum(UserTypeEnum.class) + @NotNull(message = "用户类型ä¸èƒ½ä¸ºç©º") + private Integer userType; + + /** + * 社交平å°çš„类型 + */ + @InEnum(SocialTypeEnum.class) + @NotNull(message = "社交平å°çš„类型ä¸èƒ½ä¸ºç©º") + private Integer type; + /** + * 授æƒç  + */ + @NotEmpty(message = "授æƒç ä¸èƒ½ä¸ºç©º") + private String code; + /** + * state + */ + @NotEmpty(message = "state ä¸èƒ½ä¸ºç©º") + private String state; + +} diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserUnbindReqDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserUnbindReqDTO.java new file mode 100644 index 0000000000..56398a8aef --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserUnbindReqDTO.java @@ -0,0 +1,44 @@ +package cn.iocoder.yudao.module.system.api.social.dto; + +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; +import cn.iocoder.yudao.framework.common.validation.InEnum; +import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +/** + * 社交绑定 Request DTO,使用 code 授æƒç  + * + * @author èŠ‹é“æºç  + */ +@Data +public class SocialUserUnbindReqDTO { + + /** + * ç”¨æˆ·ç¼–å· + */ + @NotNull(message = "用户编å·ä¸èƒ½ä¸ºç©º") + private Long userId; + /** + * 用户类型 + */ + @InEnum(UserTypeEnum.class) + @NotNull(message = "用户类型ä¸èƒ½ä¸ºç©º") + private Integer userType; + + /** + * 社交平å°çš„类型 + */ + @InEnum(SocialTypeEnum.class) + @NotNull(message = "社交平å°çš„类型ä¸èƒ½ä¸ºç©º") + private Integer type; + + /** + * 社交平å°çš„ unionId + */ + @NotEmpty(message = "社交平å°çš„ unionId ä¸èƒ½ä¸ºç©º") + private String unionId; + +} diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java index 15b6803a21..4529c5145a 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java @@ -87,12 +87,31 @@ public interface ErrorCodeConstants { ErrorCode SMS_TEMPLATE_NOT_EXISTS = new ErrorCode(1002011000, "短信模æ¿ä¸å­˜åœ¨"); ErrorCode SMS_TEMPLATE_CODE_DUPLICATE = new ErrorCode(1002011001, "å·²ç»å­˜åœ¨ç¼–ç ä¸ºã€{}】的短信模æ¿"); - // ========== ç§Ÿæˆ·æ¨¡å— 1002012000 ========== - ErrorCode TENANT_NOT_EXISTS = new ErrorCode(1002012000, "租户ä¸å­˜åœ¨"); + // ========== 短信å‘é€ 1002012000 ========== + ErrorCode SMS_SEND_MOBILE_NOT_EXISTS = new ErrorCode(1002012000, "手机å·ä¸å­˜åœ¨"); + ErrorCode SMS_SEND_MOBILE_TEMPLATE_PARAM_MISS = new ErrorCode(1002012001, "模æ¿å‚æ•°({})缺失"); + ErrorCode SMS_SEND_TEMPLATE_NOT_EXISTS = new ErrorCode(1002012002, "短信模æ¿ä¸å­˜åœ¨"); - // ========== é”™è¯¯ç æ¨¡å— 1002013000 ========== - ErrorCode ERROR_CODE_NOT_EXISTS = new ErrorCode(1002013000, "错误ç ä¸å­˜åœ¨"); - ErrorCode ERROR_CODE_DUPLICATE = new ErrorCode(1002013001, "å·²ç»å­˜åœ¨ç¼–ç ä¸ºã€{}】的错误ç "); + // ========== 短信验è¯ç  1002013000 ========== + ErrorCode SMS_CODE_NOT_FOUND = new ErrorCode(1002013000, "验è¯ç ä¸å­˜åœ¨"); + ErrorCode SMS_CODE_EXPIRED = new ErrorCode(1002013001, "验è¯ç å·²è¿‡æœŸ"); + ErrorCode SMS_CODE_USED = new ErrorCode(1002013002, "验è¯ç å·²ä½¿ç”¨"); + ErrorCode SMS_CODE_NOT_CORRECT = new ErrorCode(1002013004, "验è¯ç ä¸æ­£ç¡®"); + ErrorCode SMS_CODE_EXCEED_SEND_MAXIMUM_QUANTITY_PER_DAY = new ErrorCode(1002013005, "è¶…è¿‡æ¯æ—¥çŸ­ä¿¡å‘逿•°é‡"); + ErrorCode SMS_CODE_SEND_TOO_FAST = new ErrorCode(1002013006, "短信å‘é€è¿‡äºŽé¢‘率"); + ErrorCode SMS_CODE_IS_EXISTS = new ErrorCode(1002013007, "手机å·å·²è¢«ä½¿ç”¨"); + ErrorCode SMS_CODE_IS_UNUSED = new ErrorCode(1002013008, "验è¯ç æœªè¢«ä½¿ç”¨"); + // ========== ç§Ÿæˆ·æ¨¡å— 1002014000 ========== + ErrorCode TENANT_NOT_EXISTS = new ErrorCode(1002014000, "租户ä¸å­˜åœ¨"); + + // ========== é”™è¯¯ç æ¨¡å— 1002015000 ========== + ErrorCode ERROR_CODE_NOT_EXISTS = new ErrorCode(1002015000, "错误ç ä¸å­˜åœ¨"); + ErrorCode ERROR_CODE_DUPLICATE = new ErrorCode(1002015001, "å·²ç»å­˜åœ¨ç¼–ç ä¸ºã€{}】的错误ç "); + + // ========== 社交用户 1002015000 ========== + ErrorCode SOCIAL_USER_AUTH_FAILURE = new ErrorCode(1002015000, "社交授æƒå¤±è´¥ï¼ŒåŽŸå› æ˜¯ï¼š{}"); + ErrorCode SOCIAL_USER_UNBIND_NOT_SELF = new ErrorCode(1002015001, "社交解绑失败,éžå½“å‰ç”¨æˆ·ç»‘定"); + ErrorCode SOCIAL_USER_NOT_FOUND = new ErrorCode(1002015001, "社交授æƒå¤±è´¥ï¼Œæ‰¾ä¸åˆ°å¯¹åº”的用户"); } diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/SysErrorCodeConstants.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/SysErrorCodeConstants.java deleted file mode 100644 index 218ef6d312..0000000000 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/SysErrorCodeConstants.java +++ /dev/null @@ -1,37 +0,0 @@ -package cn.iocoder.yudao.module.system.enums; - -import cn.iocoder.yudao.framework.common.exception.ErrorCode; - -/** - * System é”™è¯¯ç æžšä¸¾ç±» - * - * system 系统,使用 1-006-000-000 段 - */ -public interface SysErrorCodeConstants { - - // ========== 短信å‘é€ 1006000000 ========== - ErrorCode SMS_SEND_MOBILE_NOT_EXISTS = new ErrorCode(1006000000, "手机å·ä¸å­˜åœ¨"); - ErrorCode SMS_SEND_MOBILE_TEMPLATE_PARAM_MISS = new ErrorCode(1006000001, "模æ¿å‚æ•°({})缺失"); - ErrorCode SMS_SEND_TEMPLATE_NOT_EXISTS = new ErrorCode(1006000000, "短信模æ¿ä¸å­˜åœ¨"); - - // ========== ç¤¾äº¤æ¨¡å— 1006002000 ========== - ErrorCode SOCIAL_AUTH_FAILURE = new ErrorCode(1006002000, "社交授æƒå¤±è´¥ï¼ŒåŽŸå› æ˜¯ï¼š{}"); - ErrorCode SOCIAL_UNBIND_NOT_SELF = new ErrorCode(1006002001, "社交解绑失败,éžå½“å‰ç”¨æˆ·ç»‘定"); - - // ========== ç”¨æˆ·æ¨¡å— 1006003000 ========== - ErrorCode USER_NOT_EXISTS = new ErrorCode(1006003000, "用户ä¸å­˜åœ¨"); - ErrorCode USER_IS_DISABLE = new ErrorCode(1006003001, "å字为ã€{}】的用户已被ç¦ç”¨"); - - // ========== éƒ¨é—¨æ¨¡å— 1006004000 ========== - ErrorCode DEPT_NOT_FOUND = new ErrorCode(1006004000, "当å‰éƒ¨é—¨ä¸å­˜åœ¨"); - ErrorCode DEPT_NOT_ENABLE = new ErrorCode(1006004001, "部门ä¸å¤„于开å¯çжæ€ï¼Œä¸å…许选择"); - - // ========== è§’è‰²æ¨¡å— 1006005000 ========== - ErrorCode ROLE_NOT_EXISTS = new ErrorCode(1006005000, "角色ä¸å­˜åœ¨"); - ErrorCode ROLE_IS_DISABLE = new ErrorCode(1006005001, "å字为ã€{}】的角色已被ç¦ç”¨"); - - // ========== 岗使¨¡å— 1006007000 ========== - ErrorCode POST_NOT_FOUND = new ErrorCode(1006007000, "当å‰å²—ä½ä¸å­˜åœ¨"); - ErrorCode POST_NOT_ENABLE = new ErrorCode(1006007001, "å²—ä½({}) ä¸å¤„于开å¯çжæ€ï¼Œä¸å…许选择"); - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/SysLoginLogTypeEnum.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/logger/LoginLogTypeEnum.java similarity index 94% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/SysLoginLogTypeEnum.java rename to yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/logger/LoginLogTypeEnum.java index ff29ab558f..2f845fd105 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/SysLoginLogTypeEnum.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/logger/LoginLogTypeEnum.java @@ -8,7 +8,7 @@ import lombok.Getter; */ @Getter @AllArgsConstructor -public enum SysLoginLogTypeEnum { +public enum LoginLogTypeEnum { LOGIN_USERNAME(100), // 使用账å·ç™»å½• LOGIN_SOCIAL(101), // 使用社交登录 diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/SysLoginResultEnum.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/logger/LoginResultEnum.java similarity index 94% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/SysLoginResultEnum.java rename to yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/logger/LoginResultEnum.java index f1c8356ff4..7084e13da1 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/SysLoginResultEnum.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/logger/LoginResultEnum.java @@ -8,7 +8,7 @@ import lombok.Getter; */ @Getter @AllArgsConstructor -public enum SysLoginResultEnum { +public enum LoginResultEnum { SUCCESS(0), // æˆåŠŸ BAD_CREDENTIALS(10), // è´¦å·æˆ–密ç ä¸æ­£ç¡® diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SmsSceneEnum.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SmsSceneEnum.java new file mode 100644 index 0000000000..2edcf0a2d1 --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SmsSceneEnum.java @@ -0,0 +1,49 @@ +package cn.iocoder.yudao.module.system.enums.sms; + +import cn.hutool.core.util.ArrayUtil; +import cn.iocoder.yudao.framework.common.core.IntArrayValuable; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 用户短信验è¯ç å‘é€åœºæ™¯çš„æžšä¸¾ + * + * @author èŠ‹é“æºç  + */ +@Getter +@AllArgsConstructor +public enum SmsSceneEnum implements IntArrayValuable { + + MEMBER_LOGIN(1, "user-sms-login", "会员用户 - 手机å·ç™»é™†"), + MEMBER_UPDATE_MOBILE(2, "user-sms-reset-password", "会员用户 - 修改手机"), + MEMBER_FORGET_PASSWORD(3, "user-sms-update-mobile", "会员用户 - 忘记密ç "); + + // 如果未æ¥å¸Œæœ›ç®¡ç†åŽå°æ”¯æŒæ‰‹æœºéªŒè¯ç ç™»é™†ï¼Œå¯ä»¥é€šè¿‡æ·»åŠ  ADMIN_MEMBER_LOGIN 枚举 + + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(SmsSceneEnum::getScene).toArray(); + + /** + * 验è¯åœºæ™¯çš„ç¼–å· + */ + private final Integer scene; + /** + * æ¨¡ç‰ˆç¼–ç  + */ + private final String templateCode; + /** + * æè¿° + */ + private final String description; + + @Override + public int[] array() { + return ARRAYS; + } + + public static SmsSceneEnum getCodeByScene(Integer scene) { + return ArrayUtil.firstMatch(sceneEnum -> sceneEnum.getScene().equals(scene)); + } + +} diff --git a/yudao-module-system/yudao-module-system-impl/pom.xml b/yudao-module-system/yudao-module-system-impl/pom.xml index 6fc4fcf96b..40f9d8aaa5 100644 --- a/yudao-module-system/yudao-module-system-impl/pom.xml +++ b/yudao-module-system/yudao-module-system-impl/pom.xml @@ -23,6 +23,11 @@ yudao-module-system-api ${revision} + + cn.iocoder.boot + yudao-module-member-api + ${revision} + diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/auth/UserSessionApiImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/auth/UserSessionApiImpl.java new file mode 100644 index 0000000000..f8ab2a1695 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/auth/UserSessionApiImpl.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.system.api.auth; + +import cn.iocoder.yudao.framework.security.core.LoginUser; +import cn.iocoder.yudao.module.system.service.auth.UserSessionService; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; + +/** + * 在线用户 Session API 实现类 + * + * @author èŠ‹é“æºç  + */ +@Service +@Validated +public class UserSessionApiImpl implements UserSessionApi { + + @Resource + private UserSessionService userSessionService; + + @Override + public String createUserSession(LoginUser loginUser, String userIp, String userAgent) { + return userSessionService.createUserSession(loginUser, userIp, userAgent); + } + + @Override + public void refreshUserSession(String sessionId, LoginUser loginUser) { + userSessionService.refreshUserSession(sessionId, loginUser); + } + + @Override + public void deleteUserSession(String sessionId) { + userSessionService.deleteUserSession(sessionId); + } + + @Override + public LoginUser getLoginUser(String sessionId) { + return userSessionService.getLoginUser(sessionId); + } + + @Override + public Long getSessionTimeoutMillis() { + return userSessionService.getSessionTimeoutMillis(); + } + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/logger/LoginLogApiImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/logger/LoginLogApiImpl.java new file mode 100644 index 0000000000..b5f40e01a9 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/logger/LoginLogApiImpl.java @@ -0,0 +1,27 @@ +package cn.iocoder.yudao.module.system.api.logger; + +import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO; +import cn.iocoder.yudao.module.system.service.logger.LoginLogService; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; + +/** + * 登录日志的 API 实现类 + * + * @author èŠ‹é“æºç  + */ +@Service +@Validated +public class LoginLogApiImpl implements LoginLogApi { + + @Resource + private LoginLogService loginLogService; + + @Override + public void createLoginLog(LoginLogCreateReqDTO reqDTO) { + loginLogService.createLoginLog(reqDTO); + } + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/package-info.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/package-info.java new file mode 100644 index 0000000000..0354f00bce --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.system.api; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApiImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApiImpl.java new file mode 100644 index 0000000000..94e4cfabab --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApiImpl.java @@ -0,0 +1,71 @@ +package cn.iocoder.yudao.module.system.api.social; + +import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; +import cn.iocoder.yudao.module.system.api.social.dto.SocialUserUnbindReqDTO; +import cn.iocoder.yudao.module.system.service.social.SocialUserService; +import me.zhyd.oauth.model.AuthUser; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.SOCIAL_USER_NOT_FOUND; + +/** + * 社交用户的 API 实现类 + * + * @author èŠ‹é“æºç  + */ +@Service +@Validated +public class SocialUserApiImpl implements SocialUserApi { + + @Resource + private SocialUserService socialUserService; + + @Override + public String getAuthorizeUrl(Integer type, String redirectUri) { + return socialUserService.getAuthorizeUrl(type, redirectUri); + } + + @Override + public void bindSocialUser(SocialUserBindReqDTO reqDTO) { + // 使用 code æŽˆæƒ + AuthUser authUser = socialUserService.getAuthUser(reqDTO.getType(), reqDTO.getCode(), + reqDTO.getState()); + if (authUser == null) { + throw exception(SOCIAL_USER_NOT_FOUND); + } + + // 绑定社交用户(新增) + socialUserService.bindSocialUser(reqDTO.getUserId(), reqDTO.getUserType(), + reqDTO.getType(), authUser); + } + + @Override + public void unbindSocialUser(SocialUserUnbindReqDTO reqDTO) { + socialUserService.unbindSocialUser(reqDTO.getUserId(), reqDTO.getUserType(), + reqDTO.getType(), reqDTO.getUnionId()); + } + + @Override + public void checkSocialUser(Integer type, String code, String state) { + AuthUser authUser = socialUserService.getAuthUser(type, code, state); + if (authUser == null) { + throw exception(SOCIAL_USER_NOT_FOUND); + } + } + + @Override + public Long getBindUserId(Integer userType, Integer type, String code, String state) { + AuthUser authUser = socialUserService.getAuthUser(type, code, state); + if (authUser == null) { + throw exception(SOCIAL_USER_NOT_FOUND); + } + + // + return null; + } + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java index 6f72c3eb63..2acc39fcc1 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java @@ -1,27 +1,26 @@ package cn.iocoder.yudao.module.system.controller.admin.auth; -import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.*; -import cn.iocoder.yudao.module.system.convert.auth.AuthConvert; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO; -import cn.iocoder.yudao.module.system.enums.permission.MenuTypeEnum; -import cn.iocoder.yudao.module.system.service.auth.AuthService; -import cn.iocoder.yudao.module.system.service.permission.PermissionService; -import cn.iocoder.yudao.module.system.service.permission.RoleService; -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; -import cn.iocoder.yudao.module.system.service.social.SocialUserService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.collection.SetUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import cn.iocoder.yudao.module.system.service.user.UserService; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.*; +import cn.iocoder.yudao.module.system.convert.auth.AuthConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; +import cn.iocoder.yudao.module.system.enums.permission.MenuTypeEnum; +import cn.iocoder.yudao.module.system.service.auth.AdminAuthService; +import cn.iocoder.yudao.module.system.service.permission.PermissionService; +import cn.iocoder.yudao.module.system.service.permission.RoleService; +import cn.iocoder.yudao.module.system.service.social.SocialUserService; +import cn.iocoder.yudao.module.system.service.user.AdminUserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -42,12 +41,10 @@ import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUti @Slf4j public class AuthController { - @Autowired - @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") // AuthService 存在é‡å - private AuthService authService; - @Autowired - @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") // UserService 存在é‡å - private UserService userService; + @Resource + private AdminAuthService authService; + @Resource + private AdminUserService userService; @Resource private RoleService roleService; @Resource @@ -68,12 +65,12 @@ public class AuthController { @ApiOperation("获å–登录用户的æƒé™ä¿¡æ¯") public CommonResult getPermissionInfo() { // èŽ·å¾—ç”¨æˆ·ä¿¡æ¯ - UserDO user = userService.getUser(getLoginUserId()); + AdminUserDO user = userService.getUser(getLoginUserId()); if (user == null) { return null; } // 获得角色列表 - List roleList = roleService.getRolesFromCache(getLoginUserRoleIds()); + List roleList = roleService.getRolesFromCache(getLoginUserRoleIds()); // 获得èœå•列表 List menuList = permissionService.getRoleMenusFromCache( getLoginUserRoleIds(), // 注æ„,基于登录的角色,因为åŽç»­çš„æƒé™åˆ¤æ–­ä¹Ÿæ˜¯åŸºäºŽå®ƒ @@ -136,7 +133,7 @@ public class AuthController { @DeleteMapping("/social-unbind") @ApiOperation("å–æ¶ˆç¤¾äº¤ç»‘定") public CommonResult socialUnbind(@RequestBody AuthSocialUnbindReqVO reqVO) { - socialCoreService.unbindSocialUser(getLoginUserId(), reqVO.getType(), reqVO.getUnionId(), UserTypeEnum.ADMIN); + socialCoreService.unbindSocialUser(getLoginUserId(), UserTypeEnum.ADMIN.getValue(), reqVO.getType(), reqVO.getUnionId()); return CommonResult.success(true); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/UserSessionController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/UserSessionController.java index eeca9ac8e7..0b0f5096e9 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/UserSessionController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/UserSessionController.java @@ -6,16 +6,15 @@ import cn.iocoder.yudao.module.system.convert.auth.UserSessionConvert; import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.module.system.service.auth.UserSessionService; import cn.iocoder.yudao.module.system.dal.dataobject.auth.SysUserSessionDO; -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; -import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.MapUtils; -import cn.iocoder.yudao.module.system.service.user.UserService; +import cn.iocoder.yudao.module.system.service.dept.DeptService; +import cn.iocoder.yudao.module.system.service.user.AdminUserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -35,12 +34,11 @@ public class UserSessionController { @Resource private UserSessionService userSessionService; - @Autowired - @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") // UserService 存在é‡å - private UserService userService; + @Resource + private AdminUserService userService; @Resource - private SysDeptCoreService deptCoreService; + private DeptService deptService; @GetMapping("/page") @ApiOperation("获得 Session 分页列表") @@ -50,10 +48,10 @@ public class UserSessionController { PageResult pageResult = userSessionService.getUserSessionPage(reqVO); // 获得拼接需è¦çš„æ•°æ® - Map userMap = userService.getUserMap( + Map userMap = userService.getUserMap( convertList(pageResult.getList(), SysUserSessionDO::getUserId)); - Map deptMap = deptCoreService.getDeptMap( - convertList(userMap.values(), UserDO::getDeptId)); + Map deptMap = deptService.getDeptMap( + convertList(userMap.values(), AdminUserDO::getDeptId)); // 拼接结果返回 List sessionList = new ArrayList<>(pageResult.getList().size()); pageResult.getList().forEach(session -> { diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/DeptController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/DeptController.java index 837a825ee2..1a4da72be8 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/DeptController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/DeptController.java @@ -1,6 +1,5 @@ package cn.iocoder.yudao.module.system.controller.admin.dept; -import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.*; @@ -30,9 +29,6 @@ public class DeptController { @Resource private DeptService deptService; - @Resource - private SysDeptCoreService deptCoreService; - @PostMapping("create") @ApiOperation("创建部门") @PreAuthorize("@ss.hasPermission('system:dept:create')") @@ -84,7 +80,7 @@ public class DeptController { @ApiImplicitParam(name = "id", value = "ç¼–å·", required = true, example = "1024", dataTypeClass = Long.class) @PreAuthorize("@ss.hasPermission('system:dept:query')") public CommonResult getDept(@RequestParam("id") Long id) { - return success(DeptConvert.INSTANCE.convert(deptCoreService.getDept(id))); + return success(DeptConvert.INSTANCE.convert(deptService.getDept(id))); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/OperateLogController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/OperateLogController.java index 935b48bafa..d23477eb82 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/OperateLogController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/OperateLogController.java @@ -6,18 +6,17 @@ import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.Oper import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogRespVO; import cn.iocoder.yudao.module.system.convert.logger.OperateLogConvert; import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.service.logger.OperateLogService; -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.collection.MapUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import cn.iocoder.yudao.module.system.service.user.UserService; +import cn.iocoder.yudao.module.system.service.user.AdminUserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; @@ -44,9 +43,8 @@ public class OperateLogController { @Resource private OperateLogService operateLogService; - @Autowired - @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") // UserService 存在é‡å - private UserService userService; + @Resource + private AdminUserService userService; @GetMapping("/page") @ApiOperation("查看æ“作日志分页列表") @@ -56,7 +54,7 @@ public class OperateLogController { // 获得拼接需è¦çš„æ•°æ® Collection userIds = CollectionUtils.convertList(pageResult.getList(), OperateLogDO::getUserId); - Map userMap = userService.getUserMap(userIds); + Map userMap = userService.getUserMap(userIds); // æ‹¼æŽ¥æ•°æ® List list = new ArrayList<>(pageResult.getList().size()); pageResult.getList().forEach(operateLog -> { @@ -77,7 +75,7 @@ public class OperateLogController { // 获得拼接需è¦çš„æ•°æ® Collection userIds = CollectionUtils.convertList(list, OperateLogDO::getUserId); - Map userMap = userService.getUserMap(userIds); + Map userMap = userService.getUserMap(userIds); // æ‹¼æŽ¥æ•°æ® List excelDataList = OperateLogConvert.INSTANCE.convertList(list, userMap); // 输出 diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/RoleController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/RoleController.java index 54cdb6b536..b200aba866 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/RoleController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/RoleController.java @@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.*; import cn.iocoder.yudao.module.system.convert.permission.RoleConvert; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; import cn.iocoder.yudao.module.system.service.permission.RoleService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -72,14 +72,14 @@ public class RoleController { @ApiOperation("获得角色信æ¯") @PreAuthorize("@ss.hasPermission('system:role:query')") public CommonResult getRole(@RequestParam("id") Long id) { - SysRoleDO role = roleService.getRole(id); + RoleDO role = roleService.getRole(id); return success(RoleConvert.INSTANCE.convert(role)); } @GetMapping("/page") @ApiOperation("获得角色分页") @PreAuthorize("@ss.hasPermission('system:role:query')") - public CommonResult> getRolePage(RolePageReqVO reqVO) { + public CommonResult> getRolePage(RolePageReqVO reqVO) { return success(roleService.getRolePage(reqVO)); } @@ -87,9 +87,9 @@ public class RoleController { @ApiOperation(value = "获å–角色精简信æ¯åˆ—表", notes = "åªåŒ…å«è¢«å¼€å¯çš„角色,主è¦ç”¨äºŽå‰ç«¯çš„下拉选项") public CommonResult> getSimpleRoles() { // 获得角色列表,åªè¦å¼€å¯çжæ€çš„ - List list = roleService.getRoles(Collections.singleton(CommonStatusEnum.ENABLE.getStatus())); + List list = roleService.getRoles(Collections.singleton(CommonStatusEnum.ENABLE.getStatus())); // 排åºåŽï¼Œè¿”回个诶å‰ç«¯ - list.sort(Comparator.comparing(SysRoleDO::getSort)); + list.sort(Comparator.comparing(RoleDO::getSort)); return success(RoleConvert.INSTANCE.convertList02(list)); } @@ -97,7 +97,7 @@ public class RoleController { @OperateLog(type = EXPORT) @PreAuthorize("@ss.hasPermission('system:role:export')") public void export(HttpServletResponse response, @Validated RoleExportReqVO reqVO) throws IOException { - List list = roleService.getRoleList(reqVO); + List list = roleService.getRoleList(reqVO); List data = RoleConvert.INSTANCE.convertList03(list); // 输出 ExcelUtils.write(response, "角色数æ®.xls", "角色列表", RoleExcelVO.class, data); diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsCallbackController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsCallbackController.java index 6e2602cf0c..8125f0728a 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsCallbackController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsCallbackController.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.controller.admin.sms; import cn.hutool.core.util.URLUtil; import cn.hutool.extra.servlet.ServletUtil; -import cn.iocoder.yudao.module.system.service.sms.SysSmsSendService; +import cn.iocoder.yudao.module.system.service.sms.SmsSendService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; import cn.iocoder.yudao.framework.sms.core.enums.SmsChannelEnum; @@ -25,7 +25,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; public class SmsCallbackController { @Resource - private SysSmsSendService smsCoreService; + private SmsSendService smsCoreService; @PostMapping("/sms/yunpian") @ApiOperation(value = "云片短信的回调", notes = "å‚è§ https://www.yunpian.com/official/document/sms/zh_cn/domestic_push_report 文档") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsTemplateController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsTemplateController.java index f16bfb2c97..d565143142 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsTemplateController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsTemplateController.java @@ -4,7 +4,7 @@ import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.*; import cn.iocoder.yudao.module.system.convert.sms.SmsTemplateConvert; import cn.iocoder.yudao.module.system.service.sms.SmsTemplateService; import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; -import cn.iocoder.yudao.module.system.service.sms.SysSmsSendService; +import cn.iocoder.yudao.module.system.service.sms.SmsSendService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; @@ -32,7 +32,7 @@ public class SmsTemplateController { @Resource private SmsTemplateService smsTemplateService; @Resource - private SysSmsSendService smsCoreService; + private SmsSendService smsCoreService; @PostMapping("/create") @ApiOperation("创建短信模æ¿") @@ -91,7 +91,7 @@ public class SmsTemplateController { @ApiOperation("å‘é€çŸ­ä¿¡") @PreAuthorize("@ss.hasPermission('system:sms-template:send-sms')") public CommonResult sendSms(@Valid @RequestBody SmsTemplateSendReqVO sendReqVO) { - return success(smsCoreService.sendSingleSms(sendReqVO.getMobile(), null, null, + return success(smsCoreService.sendSingleSmsToAdmin(sendReqVO.getMobile(), null, sendReqVO.getTemplateCode(), sendReqVO.getTemplateParams())); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java index 61c54e2932..7afe691a28 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java @@ -4,10 +4,10 @@ import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; import cn.iocoder.yudao.module.system.convert.user.UserConvert; import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.module.system.service.user.UserService; -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; +import cn.iocoder.yudao.module.system.service.dept.DeptService; +import cn.iocoder.yudao.module.system.service.user.AdminUserService; import cn.iocoder.yudao.module.system.enums.common.SysSexEnum; -import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -18,7 +18,6 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -41,11 +40,10 @@ import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.E @Validated public class UserController { - @Autowired - @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") // UserService 存在é‡å - private UserService userService; @Resource - private SysDeptCoreService deptCoreService; + private AdminUserService userService; + @Resource + private DeptService deptService; @PostMapping("/create") @ApiOperation("新增用户") @@ -93,14 +91,14 @@ public class UserController { @PreAuthorize("@ss.hasPermission('system:user:list')") public CommonResult> getUserPage(@Valid UserPageReqVO reqVO) { // 获得用户分页列表 - PageResult pageResult = userService.getUserPage(reqVO); + PageResult pageResult = userService.getUserPage(reqVO); if (CollUtil.isEmpty(pageResult.getList())) { return success(new PageResult<>(pageResult.getTotal())); // 返回空 } // 获得拼接需è¦çš„æ•°æ® - Collection deptIds = convertList(pageResult.getList(), UserDO::getDeptId); - Map deptMap = deptCoreService.getDeptMap(deptIds); + Collection deptIds = convertList(pageResult.getList(), AdminUserDO::getDeptId); + Map deptMap = deptService.getDeptMap(deptIds); // 拼接结果返回 List userList = new ArrayList<>(pageResult.getList().size()); pageResult.getList().forEach(user -> { @@ -115,7 +113,7 @@ public class UserController { @ApiOperation(value = "获å–用户精简信æ¯åˆ—表", notes = "åªåŒ…å«è¢«å¼€å¯çš„用户,主è¦ç”¨äºŽå‰ç«¯çš„下拉选项") public CommonResult> getSimpleUsers() { // 获用户门列表,åªè¦å¼€å¯çжæ€çš„ - List list = userService.getUsersByStatus(CommonStatusEnum.ENABLE.getStatus()); + List list = userService.getUsersByStatus(CommonStatusEnum.ENABLE.getStatus()); // 排åºåŽï¼Œè¿”回给å‰ç«¯ return success(UserConvert.INSTANCE.convertList04(list)); } @@ -135,12 +133,12 @@ public class UserController { public void exportUsers(@Validated UserExportReqVO reqVO, HttpServletResponse response) throws IOException { // 获得用户列表 - List users = userService.getUsers(reqVO); + List users = userService.getUsers(reqVO); // 获得拼接需è¦çš„æ•°æ® - Collection deptIds = convertList(users, UserDO::getDeptId); - Map deptMap = deptCoreService.getDeptMap(deptIds); - Map deptLeaderUserMap = userService.getUserMap( + Collection deptIds = convertList(users, AdminUserDO::getDeptId); + Map deptMap = deptService.getDeptMap(deptIds); + Map deptLeaderUserMap = userService.getUserMap( convertSet(deptMap.values(), SysDeptDO::getLeaderUserId)); // æ‹¼æŽ¥æ•°æ® List excelUsers = new ArrayList<>(users.size()); diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.java index ffb6b0d1c2..11d419feaf 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.java @@ -5,16 +5,16 @@ import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfi import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; import cn.iocoder.yudao.module.system.convert.user.UserConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; +import cn.iocoder.yudao.module.system.service.dept.DeptService; import cn.iocoder.yudao.module.system.service.dept.PostService; import cn.iocoder.yudao.module.system.service.permission.PermissionService; import cn.iocoder.yudao.module.system.service.permission.RoleService; -import cn.iocoder.yudao.module.system.service.user.UserService; +import cn.iocoder.yudao.module.system.service.user.AdminUserService; import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; import cn.iocoder.yudao.module.system.dal.dataobject.social.SysSocialUserDO; -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; -import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; import cn.iocoder.yudao.module.system.service.social.SocialUserService; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; @@ -22,7 +22,6 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -43,11 +42,10 @@ import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUti @Slf4j public class UserProfileController { - @Autowired - @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") // UserService 存在é‡å - private UserService userService; @Resource - private SysDeptCoreService deptCoreService; + private AdminUserService userService; + @Resource + private DeptService deptService; @Resource private PostService postService; @@ -62,14 +60,14 @@ public class UserProfileController { @ApiOperation("获得登录用户信æ¯") public CommonResult profile() { // èŽ·å¾—ç”¨æˆ·åŸºæœ¬ä¿¡æ¯ - UserDO user = userService.getUser(getLoginUserId()); + AdminUserDO user = userService.getUser(getLoginUserId()); UserProfileRespVO resp = UserConvert.INSTANCE.convert03(user); // 获得用户角色 - List userRoles = roleService.getRolesFromCache(permissionService.getUserRoleIdListByUserId(user.getId())); + List userRoles = roleService.getRolesFromCache(permissionService.getUserRoleIdListByUserId(user.getId())); resp.setRoles(UserConvert.INSTANCE.convertList(userRoles)); // èŽ·å¾—éƒ¨é—¨ä¿¡æ¯ if (user.getDeptId() != null) { - SysDeptDO dept = deptCoreService.getDept(user.getDeptId()); + SysDeptDO dept = deptService.getDept(user.getDeptId()); resp.setDept(UserConvert.INSTANCE.convert02(dept)); } // 获得岗ä½ä¿¡æ¯ @@ -78,7 +76,7 @@ public class UserProfileController { resp.setPosts(UserConvert.INSTANCE.convertList02(posts)); } // èŽ·å¾—ç¤¾äº¤ç”¨æˆ·ä¿¡æ¯ - List socialUsers = socialService.getSocialUserList(user.getId(), UserTypeEnum.ADMIN); + List socialUsers = socialService.getSocialUserList(user.getId(), UserTypeEnum.ADMIN.getValue()); resp.setSocialUsers(UserConvert.INSTANCE.convertList03(socialUsers)); return success(resp); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java index 14310514d9..e4cce51003 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java @@ -3,9 +3,9 @@ package cn.iocoder.yudao.module.system.convert.auth; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthMenuRespVO; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthPermissionInfoRespVO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.enums.permission.MenuIdEnum; -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.security.core.LoginUser; @@ -22,17 +22,17 @@ public interface AuthConvert { AuthConvert INSTANCE = Mappers.getMapper(AuthConvert.class); @Mapping(source = "updateTime", target = "updateTime", ignore = true) // 字段相åŒï¼Œä½†æ˜¯å«ä¹‰ä¸åŒï¼Œå¿½ç•¥ - LoginUser convert0(UserDO bean); + LoginUser convert0(AdminUserDO bean); - default LoginUser convert(UserDO bean) { + default LoginUser convert(AdminUserDO bean) { // 目的,为了设置 UserTypeEnum.ADMIN.getValue() return convert0(bean).setUserType(UserTypeEnum.ADMIN.getValue()); } - default AuthPermissionInfoRespVO convert(UserDO user, List roleList, List menuList) { + default AuthPermissionInfoRespVO convert(AdminUserDO user, List roleList, List menuList) { return AuthPermissionInfoRespVO.builder() .user(AuthPermissionInfoRespVO.UserVO.builder().id(user.getId()).nickname(user.getNickname()).avatar(user.getAvatar()).build()) - .roles(CollectionUtils.convertSet(roleList, SysRoleDO::getCode)) + .roles(CollectionUtils.convertSet(roleList, RoleDO::getCode)) .permissions(CollectionUtils.convertSet(menuList, MenuDO::getPermission)) .build(); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/OperateLogConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/OperateLogConvert.java index 1c2261afd3..21584c9fcf 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/OperateLogConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/OperateLogConvert.java @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.system.convert.logger; import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogExcelVO; import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogRespVO; import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO; -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.MapUtils; import cn.iocoder.yudao.framework.operatelog.core.dto.OperateLogCreateReqDTO; @@ -27,7 +27,7 @@ public interface OperateLogConvert { OperateLogRespVO convert(OperateLogDO bean); - default List convertList(List list, Map userMap) { + default List convertList(List list, Map userMap) { return list.stream().map(operateLog -> { OperateLogExcelVO excelVO = convert02(operateLog); MapUtils.findAndThen(userMap, operateLog.getId(), user -> excelVO.setUserNickname(user.getNickname())); diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/SysLoginLogCoreConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/SysLoginLogCoreConvert.java index bfdeea7e8c..70b5dfff02 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/SysLoginLogCoreConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/SysLoginLogCoreConvert.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.convert.logger; import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysLoginLogDO; -import cn.iocoder.yudao.module.system.service.logger.dto.LoginLogCreateReqDTO; +import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/RoleConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/RoleConvert.java index 5dcbf12fc6..646d7061de 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/RoleConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/RoleConvert.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.convert.permission; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.*; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -12,14 +12,14 @@ public interface RoleConvert { RoleConvert INSTANCE = Mappers.getMapper(RoleConvert.class); - SysRoleDO convert(RoleUpdateReqVO bean); + RoleDO convert(RoleUpdateReqVO bean); - RoleRespVO convert(SysRoleDO bean); + RoleRespVO convert(RoleDO bean); - SysRoleDO convert(RoleCreateReqVO bean); + RoleDO convert(RoleCreateReqVO bean); - List convertList02(List list); + List convertList02(List list); - List convertList03(List list); + List convertList03(List list); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/user/UserConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/user/UserConvert.java index 10d4b16d68..9e4aaddbfd 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/user/UserConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/user/UserConvert.java @@ -6,9 +6,9 @@ import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfi import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; import cn.iocoder.yudao.module.system.dal.dataobject.social.SysSocialUserDO; -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -19,31 +19,31 @@ public interface UserConvert { UserConvert INSTANCE = Mappers.getMapper(UserConvert.class); - UserPageItemRespVO convert(UserDO bean); + UserPageItemRespVO convert(AdminUserDO bean); UserPageItemRespVO.Dept convert(SysDeptDO bean); - UserDO convert(UserCreateReqVO bean); + AdminUserDO convert(UserCreateReqVO bean); - UserDO convert(UserUpdateReqVO bean); + AdminUserDO convert(UserUpdateReqVO bean); - UserExcelVO convert02(UserDO bean); + UserExcelVO convert02(AdminUserDO bean); - UserDO convert(UserImportExcelVO bean); + AdminUserDO convert(UserImportExcelVO bean); - UserProfileRespVO convert03(UserDO bean); + UserProfileRespVO convert03(AdminUserDO bean); - List convertList(List list); + List convertList(List list); UserProfileRespVO.Dept convert02(SysDeptDO bean); - UserDO convert(UserProfileUpdateReqVO bean); + AdminUserDO convert(UserProfileUpdateReqVO bean); - UserDO convert(UserProfileUpdatePasswordReqVO bean); + AdminUserDO convert(UserProfileUpdatePasswordReqVO bean); List convertList02(List list); List convertList03(List list); - List convertList04(List list); + List convertList04(List list); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/SysDeptDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/SysDeptDO.java index 797dfa2062..9840a2c30e 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/SysDeptDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/SysDeptDO.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.dal.dataobject.dept; -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; import com.baomidou.mybatisplus.annotation.TableId; @@ -41,7 +41,7 @@ public class SysDeptDO extends TenantBaseDO { /** * 负责人 * - * å…³è” {@link UserDO#getId()} + * å…³è” {@link AdminUserDO#getId()} */ private Long leaderUserId; /** diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/OperateLogDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/OperateLogDO.java index 5c12f825c6..c365a33471 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/OperateLogDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/OperateLogDO.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.dal.dataobject.logger; -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum; import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; @@ -48,7 +48,7 @@ public class OperateLogDO extends TenantBaseDO { /** * ç”¨æˆ·ç¼–å· * - * {@link UserDO#getId()} + * {@link AdminUserDO#getId()} */ private Long userId; /** diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/SysLoginLogDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/SysLoginLogDO.java index 0a15186469..3037d094bd 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/SysLoginLogDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/SysLoginLogDO.java @@ -2,8 +2,8 @@ package cn.iocoder.yudao.module.system.dal.dataobject.logger; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.module.system.enums.logger.SysLoginLogTypeEnum; -import cn.iocoder.yudao.module.system.enums.logger.SysLoginResultEnum; +import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum; +import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; @@ -29,7 +29,7 @@ public class SysLoginLogDO extends BaseDO { /** * 日志类型 * - * 枚举 {@link SysLoginLogTypeEnum} + * 枚举 {@link LoginLogTypeEnum} */ private Integer logType; /** @@ -55,7 +55,7 @@ public class SysLoginLogDO extends BaseDO { /** * 登录结果 * - * 枚举 {@link SysLoginResultEnum} + * 枚举 {@link LoginResultEnum} */ private Integer result; /** diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/SysRoleDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/RoleDO.java similarity index 94% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/SysRoleDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/RoleDO.java index 6b2d3eb9a3..cd3151f457 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/SysRoleDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/RoleDO.java @@ -17,10 +17,10 @@ import java.util.Set; * * @author ruoyi */ -@TableName(value = "sys_role", autoResultMap = true) +@TableName(value = "system_role", autoResultMap = true) @Data @EqualsAndHashCode(callSuper = true) -public class SysRoleDO extends BaseDO { +public class RoleDO extends BaseDO { /** * 角色ID diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/SysUserRoleDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/UserRoleDO.java similarity index 88% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/SysUserRoleDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/UserRoleDO.java index 9c298ad9d7..d54b0f8250 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/SysUserRoleDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/UserRoleDO.java @@ -11,10 +11,10 @@ import lombok.EqualsAndHashCode; * * @author ruoyi */ -@TableName("sys_user_role") +@TableName("system_user_role") @Data @EqualsAndHashCode(callSuper = true) -public class SysUserRoleDO extends BaseDO { +public class UserRoleDO extends BaseDO { /** * 自增主键 diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/sms/SysSmsCodeDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SmsCodeDO.java similarity index 85% rename from yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/sms/SysSmsCodeDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SmsCodeDO.java index eb51770ea8..b67a7326f4 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/sms/SysSmsCodeDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SmsCodeDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.member.dal.dataobject.sms; +package cn.iocoder.yudao.module.system.dal.dataobject.sms; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import com.baomidou.mybatisplus.annotation.TableName; @@ -13,13 +13,13 @@ import java.util.Date; * * @author èŠ‹é“æºç  */ -@TableName("sys_sms_code") +@TableName("system_sms_code") @Data @EqualsAndHashCode(callSuper = true) @Builder @NoArgsConstructor @AllArgsConstructor -public class SysSmsCodeDO extends BaseDO { +public class SmsCodeDO extends BaseDO { /** * ç¼–å· @@ -36,7 +36,7 @@ public class SysSmsCodeDO extends BaseDO { /** * å‘é€åœºæ™¯ * - * 枚举 {@link SysSmsCodeDO} + * 枚举 {@link SmsCodeDO} */ private Integer scene; /** diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/social/SysSocialUserDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/social/SysSocialUserDO.java index 336211ed1b..bca1964fe3 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/social/SysSocialUserDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/social/SysSocialUserDO.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.dal.dataobject.social; -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import com.baomidou.mybatisplus.annotation.TableId; @@ -9,7 +9,7 @@ import lombok.*; /** * 社交用户 - * 通过 {@link SysSocialUserDO#getUserId()} å…³è”到对应的 {@link UserDO} + * 通过 {@link SysSocialUserDO#getUserId()} å…³è”到对应的 {@link AdminUserDO} * * @author weir */ diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/UserDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java similarity index 97% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/UserDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java index 0f9d6e3f3f..85e2dfb905 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/UserDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java @@ -24,7 +24,7 @@ import java.util.Set; @Builder @NoArgsConstructor @AllArgsConstructor -public class UserDO extends TenantBaseDO { +public class AdminUserDO extends TenantBaseDO { /** * 用户ID diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysMenuMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/MenuMapper.java similarity index 95% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysMenuMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/MenuMapper.java index 1cce445b26..1eaa072993 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysMenuMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/MenuMapper.java @@ -12,7 +12,7 @@ import java.util.Date; import java.util.List; @Mapper -public interface SysMenuMapper extends BaseMapperX { +public interface MenuMapper extends BaseMapperX { default MenuDO selectByParentIdAndName(Long parentId, String name) { return selectOne(new LambdaQueryWrapper().eq(MenuDO::getParentId, parentId) diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/RoleMapper.java similarity index 60% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/RoleMapper.java index 659f115884..0bf94990a4 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/RoleMapper.java @@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; import org.springframework.lang.Nullable; @@ -15,36 +15,36 @@ import java.util.Date; import java.util.List; @Mapper -public interface SysRoleMapper extends BaseMapperX { +public interface RoleMapper extends BaseMapperX { - default PageResult selectPage(RolePageReqVO reqVO) { - return selectPage(reqVO, new QueryWrapperX().likeIfPresent("name", reqVO.getName()) + default PageResult selectPage(RolePageReqVO reqVO) { + return selectPage(reqVO, new QueryWrapperX().likeIfPresent("name", reqVO.getName()) .likeIfPresent("code", reqVO.getCode()) .eqIfPresent("status", reqVO.getStatus()) .betweenIfPresent("create_time", reqVO.getBeginTime(), reqVO.getEndTime())); } - default List listRoles(RoleExportReqVO reqVO) { - return selectList(new QueryWrapperX().likeIfPresent("name", reqVO.getName()) + default List listRoles(RoleExportReqVO reqVO) { + return selectList(new QueryWrapperX().likeIfPresent("name", reqVO.getName()) .likeIfPresent("code", reqVO.getCode()) .eqIfPresent("status", reqVO.getStatus()) .betweenIfPresent("create_time", reqVO.getBeginTime(), reqVO.getEndTime())); } - default SysRoleDO selectByName(String name) { - return selectOne(new QueryWrapperX().eq("name", name)); + default RoleDO selectByName(String name) { + return selectOne(new QueryWrapperX().eq("name", name)); } - default SysRoleDO selectByCode(String code) { - return selectOne(new QueryWrapperX().eq("code", code)); + default RoleDO selectByCode(String code) { + return selectOne(new QueryWrapperX().eq("code", code)); } - default List selectListByStatus(@Nullable Collection statuses) { - return selectList(new QueryWrapperX().in("status", statuses)); + default List selectListByStatus(@Nullable Collection statuses) { + return selectList(new QueryWrapperX().in("status", statuses)); } default boolean selectExistsByUpdateTimeAfter(Date maxUpdateTime) { - return selectOne(new QueryWrapper().select("id") + return selectOne(new QueryWrapper().select("id") .gt("update_time", maxUpdateTime).last("LIMIT 1")) != null; } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleMenuMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/RoleMenuMapper.java similarity index 96% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleMenuMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/RoleMenuMapper.java index 478729438b..f77294f35f 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleMenuMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/RoleMenuMapper.java @@ -12,7 +12,7 @@ import java.util.List; import java.util.stream.Collectors; @Mapper -public interface SysRoleMenuMapper extends BaseMapperX { +public interface RoleMenuMapper extends BaseMapperX { default List selectListByRoleId(Long roleId) { return selectList(new QueryWrapper().eq("role_id", roleId)); diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleCoreMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleCoreMapper.java deleted file mode 100644 index 51c3cb2eeb..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleCoreMapper.java +++ /dev/null @@ -1,9 +0,0 @@ -package cn.iocoder.yudao.module.system.dal.mysql.permission; - -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public interface SysRoleCoreMapper extends BaseMapperX { -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysUserRoleCoreMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysUserRoleCoreMapper.java deleted file mode 100644 index 6139498e62..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysUserRoleCoreMapper.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.iocoder.yudao.module.system.dal.mysql.permission; - -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysUserRoleDO; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import org.apache.ibatis.annotations.Mapper; - -import java.util.Collection; -import java.util.List; - -@Mapper -public interface SysUserRoleCoreMapper extends BaseMapperX { - - default List selectListByRoleIds(Collection roleIds) { - return selectList(SysUserRoleDO::getRoleId, roleIds); - } - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysUserRoleMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/UserRoleMapper.java similarity index 52% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysUserRoleMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/UserRoleMapper.java index 6578515bdf..bc1d36cf2c 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysUserRoleMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/UserRoleMapper.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.dal.mysql.permission; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysUserRoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.UserRoleDO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; @@ -10,20 +10,20 @@ import java.util.List; import java.util.stream.Collectors; @Mapper -public interface SysUserRoleMapper extends BaseMapperX { +public interface UserRoleMapper extends BaseMapperX { - default List selectListByUserId(Long userId) { - return selectList(new QueryWrapper().eq("user_id", userId)); + default List selectListByUserId(Long userId) { + return selectList(new QueryWrapper().eq("user_id", userId)); } - default List selectListByRoleId(Long roleId) { - return selectList(new QueryWrapper().eq("role_id", roleId)); + default List selectListByRoleId(Long roleId) { + return selectList(new QueryWrapper().eq("role_id", roleId)); } default void insertList(Long userId, Collection roleIds) { - List list = roleIds.stream().map(roleId -> { - SysUserRoleDO entity = new SysUserRoleDO(); + List list = roleIds.stream().map(roleId -> { + UserRoleDO entity = new UserRoleDO(); entity.setUserId(userId); entity.setRoleId(roleId); return entity; @@ -32,16 +32,20 @@ public interface SysUserRoleMapper extends BaseMapperX { } default void deleteListByUserIdAndRoleIdIds(Long userId, Collection roleIds) { - delete(new QueryWrapper().eq("user_id", userId) + delete(new QueryWrapper().eq("user_id", userId) .in("role_id", roleIds)); } default void deleteListByUserId(Long userId) { - delete(new QueryWrapper().eq("user_id", userId)); + delete(new QueryWrapper().eq("user_id", userId)); } default void deleteListByRoleId(Long roleId) { - delete(new QueryWrapper().eq("role_id", roleId)); + delete(new QueryWrapper().eq("role_id", roleId)); } + + default List selectListByRoleIds(Collection roleIds) { + return selectList(UserRoleDO::getRoleId, roleIds); + } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsChannelMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsChannelMapper.java similarity index 93% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsChannelMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsChannelMapper.java index 49a7d9f40c..9f2f023565 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsChannelMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsChannelMapper.java @@ -11,7 +11,7 @@ import org.apache.ibatis.annotations.Select; import java.util.Date; @Mapper -public interface SysSmsChannelMapper extends BaseMapperX { +public interface SmsChannelMapper extends BaseMapperX { default PageResult selectPage(SmsChannelPageReqVO reqVO) { return selectPage(reqVO, new QueryWrapperX() diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsCodeMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsCodeMapper.java new file mode 100644 index 0000000000..06d7431ce5 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsCodeMapper.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.system.dal.mysql.sms; + +import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsCodeDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SmsCodeMapper extends BaseMapperX { + + /** + * 获得手机å·çš„æœ€åŽä¸€ä¸ªæ‰‹æœºéªŒè¯ç  + * + * @param mobile æ‰‹æœºå· + * @param scene å‘é€åœºæ™¯ï¼Œé€‰å¡« + * @param code 验è¯ç  选填 + * @return 手机验è¯ç  + */ + default SmsCodeDO selectLastByMobile(String mobile, String code, Integer scene) { + return selectOne(new QueryWrapperX() + .eq("mobile", mobile).eqIfPresent("scene", scene).eqIfPresent("code", code) + .orderByDesc("id").last(SqlConstants.LIMIT1)); + } + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsLogMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsLogMapper.java similarity index 96% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsLogMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsLogMapper.java index 86f54dc244..f941a0f855 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsLogMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsLogMapper.java @@ -11,7 +11,7 @@ import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper -public interface SysSmsLogMapper extends BaseMapperX { +public interface SmsLogMapper extends BaseMapperX { default PageResult selectPage(SmsLogPageReqVO reqVO) { return selectPage(reqVO, new QueryWrapperX() diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsTemplateMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsTemplateMapper.java similarity index 97% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsTemplateMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsTemplateMapper.java index c4ba4071a9..d98e6fc5f8 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsTemplateMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsTemplateMapper.java @@ -13,7 +13,7 @@ import java.util.Date; import java.util.List; @Mapper -public interface SysSmsTemplateMapper extends BaseMapperX { +public interface SmsTemplateMapper extends BaseMapperX { @Select("SELECT id FROM sys_sms_template WHERE update_time > #{maxUpdateTime} LIMIT 1") Long selectExistsByUpdateTimeAfter(Date maxUpdateTime); diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java new file mode 100644 index 0000000000..be4b5ea218 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java @@ -0,0 +1,65 @@ +package cn.iocoder.yudao.module.system.dal.mysql.user; + +import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Collection; +import java.util.List; + +@Mapper +public interface AdminUserMapper extends BaseMapperX { + + default AdminUserDO selectByUsername(String username) { + return selectOne(new LambdaQueryWrapper().eq(AdminUserDO::getUsername, username)); + } + + default AdminUserDO selectByEmail(String email) { + return selectOne(new LambdaQueryWrapper().eq(AdminUserDO::getEmail, email)); + } + + default AdminUserDO selectByMobile(String mobile) { + return selectOne(new LambdaQueryWrapper().eq(AdminUserDO::getMobile, mobile)); + } + + default PageResult selectPage(UserPageReqVO reqVO, Collection deptIds) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(AdminUserDO::getUsername, reqVO.getUsername()) + .likeIfPresent(AdminUserDO::getMobile, reqVO.getMobile()) + .eqIfPresent(AdminUserDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(AdminUserDO::getCreateTime, reqVO.getBeginTime(), reqVO.getEndTime()) + .inIfPresent(AdminUserDO::getDeptId, deptIds)); + } + + default List selectList(UserExportReqVO reqVO, Collection deptIds) { + return selectList(new LambdaQueryWrapperX() + .likeIfPresent(AdminUserDO::getUsername, reqVO.getUsername()) + .likeIfPresent(AdminUserDO::getMobile, reqVO.getMobile()) + .eqIfPresent(AdminUserDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(AdminUserDO::getCreateTime, reqVO.getBeginTime(), reqVO.getEndTime()) + .inIfPresent(AdminUserDO::getDeptId, deptIds)); + } + + default List selectListByNickname(String nickname) { + return selectList(new LambdaQueryWrapperX().like(AdminUserDO::getNickname, nickname)); + } + + default List selectListByUsername(String username) { + return selectList(new LambdaQueryWrapperX().like(AdminUserDO::getUsername, username)); + } + + default List selectListByStatus(Integer status) { + return selectList(AdminUserDO::getStatus, status); + } + + default List selectListByDeptIds(Collection deptIds) { + return selectList(AdminUserDO::getDeptId, deptIds); + } + +} + diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/UserMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/UserMapper.java deleted file mode 100644 index 7cd0fe426a..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/UserMapper.java +++ /dev/null @@ -1,68 +0,0 @@ -package cn.iocoder.yudao.module.system.dal.mysql.user; - -import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserExportReqVO; -import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import jodd.util.StringPool; -import org.apache.ibatis.annotations.Mapper; - -import java.util.Collection; -import java.util.List; -import java.util.Optional; - -@Mapper -public interface UserMapper extends BaseMapperX { - - default UserDO selectByUsername(String username) { - return selectOne(new LambdaQueryWrapper().eq(UserDO::getUsername, username)); - } - - default UserDO selectByEmail(String email) { - return selectOne(new LambdaQueryWrapper().eq(UserDO::getEmail, email)); - } - - default UserDO selectByMobile(String mobile) { - return selectOne(new LambdaQueryWrapper().eq(UserDO::getMobile, mobile)); - } - - default PageResult selectPage(UserPageReqVO reqVO, Collection deptIds) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .likeIfPresent(UserDO::getUsername, reqVO.getUsername()) - .likeIfPresent(UserDO::getMobile, reqVO.getMobile()) - .eqIfPresent(UserDO::getStatus, reqVO.getStatus()) - .betweenIfPresent(UserDO::getCreateTime, reqVO.getBeginTime(), reqVO.getEndTime()) - .inIfPresent(UserDO::getDeptId, deptIds)); - } - - default List selectList(UserExportReqVO reqVO, Collection deptIds) { - return selectList(new LambdaQueryWrapperX() - .likeIfPresent(UserDO::getUsername, reqVO.getUsername()) - .likeIfPresent(UserDO::getMobile, reqVO.getMobile()) - .eqIfPresent(UserDO::getStatus, reqVO.getStatus()) - .betweenIfPresent(UserDO::getCreateTime, reqVO.getBeginTime(), reqVO.getEndTime()) - .inIfPresent(UserDO::getDeptId, deptIds)); - } - - default List selectListByNickname(String nickname) { - return selectList(new LambdaQueryWrapperX().like(UserDO::getNickname, nickname)); - } - - default List selectListByUsername(String username) { - return selectList(new LambdaQueryWrapperX().like(UserDO::getUsername, username)); - } - - default List selectListByStatus(Integer status) { - return selectList(UserDO::getStatus, status); - } - - default List selectListByDeptIds(Collection deptIds) { - return selectList(UserDO::getDeptId, deptIds); - } - -} - diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/config/DataPermissionConfiguration.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/config/DataPermissionConfiguration.java index 81bd82068b..c65c866b51 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/config/DataPermissionConfiguration.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/config/DataPermissionConfiguration.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.framework.datapermission.config; import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.framework.datapermission.core.dept.rule.DeptDataPermissionRuleCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -17,7 +17,7 @@ public class DataPermissionConfiguration { @Bean public DeptDataPermissionRuleCustomizer sysDeptDataPermissionRuleCustomizer() { return rule -> { - rule.addDeptColumn(UserDO.class); + rule.addDeptColumn(AdminUserDO.class); rule.addDeptColumn(SysDeptDO.class, "id"); }; } diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/framework/sms/SmsCodeConfiguration.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/sms/SmsCodeConfiguration.java similarity index 82% rename from yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/framework/sms/SmsCodeConfiguration.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/sms/SmsCodeConfiguration.java index fa741880b3..eb8620c61f 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/framework/sms/SmsCodeConfiguration.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/sms/SmsCodeConfiguration.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.member.framework.sms; +package cn.iocoder.yudao.module.system.framework.sms; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Configuration; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/framework/sms/SmsCodeProperties.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/sms/SmsCodeProperties.java similarity index 88% rename from yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/framework/sms/SmsCodeProperties.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/sms/SmsCodeProperties.java index 542fe2d9e7..5d246bad7f 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/framework/sms/SmsCodeProperties.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/sms/SmsCodeProperties.java @@ -1,13 +1,11 @@ -package cn.iocoder.yudao.module.member.framework.sms; +package cn.iocoder.yudao.module.system.framework.sms; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.validation.annotation.Validated; -import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.time.Duration; -import java.util.Collection; @ConfigurationProperties(prefix = "yudao.sms-code") @Validated diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsSendConsumer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsSendConsumer.java index 6779549dbd..6fe1db5a55 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsSendConsumer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsSendConsumer.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.mq.consumer.sms; import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage; -import cn.iocoder.yudao.module.system.service.sms.SysSmsSendService; +import cn.iocoder.yudao.module.system.service.sms.SmsSendService; import cn.iocoder.yudao.framework.mq.core.stream.AbstractStreamMessageListener; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -19,7 +19,7 @@ import javax.annotation.Resource; public class SmsSendConsumer extends AbstractStreamMessageListener { @Resource - private SysSmsSendService smsCoreService; + private SmsSendService smsCoreService; @Override public void onMessage(SmsSendMessage message) { diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AuthService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java similarity index 95% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AuthService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java index 1a2a8240cf..36ef97972d 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AuthService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java @@ -12,7 +12,7 @@ import javax.validation.Valid; * * @author èŠ‹é“æºç  */ -public interface AuthService extends SecurityAuthFrameworkService { +public interface AdminAuthService extends SecurityAuthFrameworkService { /** * è´¦å·ç™»å½• diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AuthServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java similarity index 92% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AuthServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java index 1d1df61392..fe4e502f0a 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AuthServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java @@ -13,15 +13,15 @@ import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthSocialLo import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthSocialLoginReqVO; import cn.iocoder.yudao.module.system.convert.auth.AuthConvert; import cn.iocoder.yudao.module.system.dal.dataobject.social.SysSocialUserDO; -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum; import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum; import cn.iocoder.yudao.module.system.service.common.CaptchaService; import cn.iocoder.yudao.module.system.service.logger.LoginLogService; -import cn.iocoder.yudao.module.system.service.logger.dto.LoginLogCreateReqDTO; +import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO; import cn.iocoder.yudao.module.system.service.permission.PermissionService; import cn.iocoder.yudao.module.system.service.social.SocialUserService; -import cn.iocoder.yudao.module.system.service.user.UserService; +import cn.iocoder.yudao.module.system.service.user.AdminUserService; import lombok.extern.slf4j.Slf4j; import me.zhyd.oauth.model.AuthUser; import org.springframework.beans.factory.annotation.Autowired; @@ -50,9 +50,9 @@ import static java.util.Collections.singleton; * * @author èŠ‹é“æºç  */ -@Service("adminAuthService") +@Service @Slf4j -public class AuthServiceImpl implements AuthService { +public class AdminAuthServiceImpl implements AdminAuthService { @Resource @Lazy // 延迟加载,因为存在相互ä¾èµ–的问题 @@ -60,7 +60,7 @@ public class AuthServiceImpl implements AuthService { @Autowired @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") // UserService 存在é‡å - private UserService userService; + private AdminUserService userService; @Resource private PermissionService permissionService; @Resource @@ -75,7 +75,7 @@ public class AuthServiceImpl implements AuthService { @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // èŽ·å– username 对应的 SysUserDO - UserDO user = userService.getUserByUsername(username); + AdminUserDO user = userService.getUserByUsername(username); if (user == null) { throw new UsernameNotFoundException(username); } @@ -86,7 +86,7 @@ public class AuthServiceImpl implements AuthService { @Override public LoginUser mockLogin(Long userId) { // 获å–用户编å·å¯¹åº”çš„ SysUserDO - UserDO user = userService.getUser(userId); + AdminUserDO user = userService.getUser(userId); if (user == null) { throw new UsernameNotFoundException(String.valueOf(userId)); } @@ -160,7 +160,7 @@ public class AuthServiceImpl implements AuthService { private void createLoginLog(String username, LoginLogTypeEnum logTypeEnum, LoginResultEnum loginResult) { // 获得用户 - UserDO user = userService.getUserByUsername(username); + AdminUserDO user = userService.getUserByUsername(username); // æ’入登录日志 LoginLogCreateReqDTO reqDTO = new LoginLogCreateReqDTO(); reqDTO.setLogType(logTypeEnum.getType()); @@ -198,13 +198,13 @@ public class AuthServiceImpl implements AuthService { // 如果未绑定 SysSocialUserDO 用户,则无法自动登录,进行报错 String unionId = socialService.getAuthUserUnionId(authUser); - List socialUsers = socialService.getAllSocialUserList(reqVO.getType(), unionId, getUserType()); + List socialUsers = socialService.getAllSocialUserList(reqVO.getType(), unionId, getUserType().getValue()); if (CollUtil.isEmpty(socialUsers)) { throw exception(AUTH_THIRD_LOGIN_NOT_BIND); } // 自动登录 - UserDO user = userService.getUser(socialUsers.get(0).getUserId()); + AdminUserDO user = userService.getUser(socialUsers.get(0).getUserId()); if (user == null) { throw exception(USER_NOT_EXISTS); } @@ -214,7 +214,7 @@ public class AuthServiceImpl implements AuthService { LoginUser loginUser = this.buildLoginUser(user); // 绑定社交用户(更新) - socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, getUserType()); + socialService.bindSocialUser(loginUser.getId(), getUserType().getValue(), reqVO.getType(), authUser); // 缓存登录用户到 Redis 中,返回 sessionId ç¼–å· return userSessionService.createUserSession(loginUser, userIp, userAgent); @@ -230,7 +230,7 @@ public class AuthServiceImpl implements AuthService { LoginUser loginUser = this.login0(reqVO.getUsername(), reqVO.getPassword()); // 绑定社交用户(新增) - socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, getUserType()); + socialService.bindSocialUser(loginUser.getId(), getUserType().getValue(), reqVO.getType(), authUser); // 缓存登录用户到 Redis 中,返回 sessionId ç¼–å· return userSessionService.createUserSession(loginUser, userIp, userAgent); @@ -243,7 +243,7 @@ public class AuthServiceImpl implements AuthService { Assert.notNull(authUser, "授æƒç”¨æˆ·ä¸ä¸ºç©º"); // 绑定社交用户(新增) - socialService.bindSocialUser(userId, reqVO.getType(), authUser, getUserType()); + socialService.bindSocialUser(userId, getUserType().getValue(), reqVO.getType(), authUser); } @Override @@ -296,7 +296,7 @@ public class AuthServiceImpl implements AuthService { } // 釿–°åŠ è½½ SysUserDO ä¿¡æ¯ - UserDO user = userService.getUser(loginUser.getId()); + AdminUserDO user = userService.getUser(loginUser.getId()); if (user == null || CommonStatusEnum.DISABLE.getStatus().equals(user.getStatus())) { throw exception(AUTH_TOKEN_EXPIRED); // 校验 token 时,用户被ç¦ç”¨çš„æƒ…况下,也认为 token 过期,方便å‰ç«¯è·³è½¬åˆ°ç™»å½•ç•Œé¢ } @@ -307,7 +307,7 @@ public class AuthServiceImpl implements AuthService { return newLoginUser; } - private LoginUser buildLoginUser(UserDO user) { + private LoginUser buildLoginUser(AdminUserDO user) { LoginUser loginUser = AuthConvert.INSTANCE.convert(user); // 补全字段 loginUser.setDeptId(user.getDeptId()); diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImpl.java index cadc899d5d..beced6bd13 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImpl.java @@ -6,15 +6,15 @@ import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.security.config.SecurityProperties; import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.session.UserSessionPageReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.dal.mysql.auth.SysUserSessionMapper; import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum; import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum; import cn.iocoder.yudao.module.system.service.logger.LoginLogService; -import cn.iocoder.yudao.module.system.service.user.UserService; +import cn.iocoder.yudao.module.system.service.user.AdminUserService; import cn.iocoder.yudao.module.system.dal.dataobject.auth.SysUserSessionDO; -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; import cn.iocoder.yudao.module.system.dal.redis.auth.LoginUserRedisDAO; -import cn.iocoder.yudao.module.system.service.logger.dto.LoginLogCreateReqDTO; +import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils; import com.google.common.collect.Lists; @@ -42,7 +42,7 @@ public class UserSessionServiceImpl implements UserSessionService { private SysUserSessionMapper userSessionMapper; @Resource - private UserService userService; + private AdminUserService userService; @Resource private LoginLogService loginLogService; @@ -57,7 +57,7 @@ public class UserSessionServiceImpl implements UserSessionService { // 处ç†åŸºäºŽç”¨æˆ·æ˜µç§°çš„æŸ¥è¯¢ Collection userIds = null; if (StrUtil.isNotEmpty(reqVO.getUsername())) { - userIds = convertSet(userService.getUsersByUsername(reqVO.getUsername()), UserDO::getId); + userIds = convertSet(userService.getUsersByUsername(reqVO.getUsername()), AdminUserDO::getId); if (CollUtil.isEmpty(userIds)) { return PageResult.empty(); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptService.java index 33ef52f8e5..c9aa07c567 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptService.java @@ -1,11 +1,16 @@ package cn.iocoder.yudao.module.system.service.dept; +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptCreateReqVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptUpdateReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; +import java.util.Collection; +import java.util.Collections; import java.util.List; +import java.util.Map; /** * 部门 Service æŽ¥å£ @@ -59,4 +64,50 @@ public interface DeptService { */ List getDeptsByParentIdFromCache(Long parentId, boolean recursive); + /** + * èŽ·å¾—éƒ¨é—¨ä¿¡æ¯æ•°ç»„ + * + * @param ids éƒ¨é—¨ç¼–å·æ•°ç»„ + * @return éƒ¨é—¨ä¿¡æ¯æ•°ç»„ + */ + List getDepts(Collection ids); + + /** + * èŽ·å¾—éƒ¨é—¨ä¿¡æ¯ + * + * @param id éƒ¨é—¨ç¼–å· + * @return éƒ¨é—¨ä¿¡æ¯ + */ + SysDeptDO getDept(Long id); + + /** + * æ ¡éªŒéƒ¨é—¨ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: + * 1. 部门编å·ä¸å­˜åœ¨ + * 2. 部门被ç¦ç”¨ + * + * @param ids è§’è‰²ç¼–å·æ•°ç»„ + */ + void validDepts(Collection ids); + + /** + * 获得指定编å·çš„部门列表 + * + * @param ids éƒ¨é—¨ç¼–å·æ•°ç»„ + * @return 部门列表 + */ + List getSimpleDepts(Collection ids); + + /** + * 获得指定编å·çš„部门 Map + * + * @param ids éƒ¨é—¨ç¼–å·æ•°ç»„ + * @return 部门 Map + */ + default Map getDeptMap(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return Collections.emptyMap(); + } + List list = getSimpleDepts(ids); + return CollectionUtils.convertMap(list, SysDeptDO::getId); + } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java index bd269d9cc2..a21ccfb7bf 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java @@ -3,13 +3,14 @@ package cn.iocoder.yudao.module.system.service.dept; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptCreateReqVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptUpdateReqVO; import cn.iocoder.yudao.module.system.convert.dept.DeptConvert; -import cn.iocoder.yudao.module.system.dal.mysql.dept.SysDeptMapper; import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.mysql.dept.SysDeptMapper; import cn.iocoder.yudao.module.system.enums.dept.DeptIdEnum; import cn.iocoder.yudao.module.system.mq.producer.dept.DeptProducer; import com.google.common.collect.ImmutableMap; @@ -24,8 +25,8 @@ import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.util.*; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; /** * 部门 Service 实现类 @@ -257,4 +258,39 @@ public class DeptServiceImpl implements DeptService { } } + @Override + public List getDepts(Collection ids) { + return deptMapper.selectBatchIds(ids); + } + + @Override + public SysDeptDO getDept(Long id) { + return deptMapper.selectById(id); + } + + @Override + public void validDepts(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // èŽ·å¾—ç§‘å®¤ä¿¡æ¯ + List depts = deptMapper.selectBatchIds(ids); + Map deptMap = CollectionUtils.convertMap(depts, SysDeptDO::getId); + // 校验 + ids.forEach(id -> { + SysDeptDO dept = deptMap.get(id); + if (dept == null) { + throw exception(DEPT_NOT_FOUND); + } + if (!CommonStatusEnum.ENABLE.getStatus().equals(dept.getStatus())) { + throw exception(DEPT_NOT_ENABLE, dept.getName()); + } + }); + } + + @Override + public List getSimpleDepts(Collection ids) { + return deptMapper.selectBatchIds(ids); + } + } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostService.java index 5e2dc33e7c..30b8fcc9ad 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostService.java @@ -86,4 +86,13 @@ public interface PostService { */ SysPostDO getPost(Long id); + /** + * 校验岗ä½ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: + * 1. å²—ä½ç¼–å·ä¸å­˜åœ¨ + * 2. å²—ä½è¢«ç¦ç”¨ + * + * @param ids å²—ä½ç¼–å·æ•°ç»„ + */ + void validPosts(Collection ids); + } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostServiceImpl.java index a498ce3dcb..f6bb471f61 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostServiceImpl.java @@ -1,5 +1,7 @@ package cn.iocoder.yudao.module.system.service.dept; +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostCreateReqVO; @@ -7,17 +9,19 @@ import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostExportRe import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostUpdateReqVO; import cn.iocoder.yudao.module.system.convert.dept.PostConvert; -import cn.iocoder.yudao.module.system.dal.mysql.dept.SysPostMapper; import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.module.system.dal.mysql.dept.SysPostMapper; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.util.Collection; import java.util.List; +import java.util.Map; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; /** * å²—ä½ Service 实现类 @@ -125,4 +129,23 @@ public class PostServiceImpl implements PostService { } } + @Override + public void validPosts(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // 获得岗ä½ä¿¡æ¯ + List posts = postMapper.selectBatchIds(ids); + Map postMap = convertMap(posts, SysPostDO::getId); + // 校验 + ids.forEach(id -> { + SysPostDO post = postMap.get(id); + if (post == null) { + throw exception(POST_NOT_FOUND); + } + if (!CommonStatusEnum.ENABLE.getStatus().equals(post.getStatus())) { + throw exception(POST_NOT_ENABLE, post.getName()); + } + }); + } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysDeptCoreService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysDeptCoreService.java deleted file mode 100644 index 92c0fdbc0c..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysDeptCoreService.java +++ /dev/null @@ -1,59 +0,0 @@ -package cn.iocoder.yudao.module.system.service.dept; - -import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; - -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -public interface SysDeptCoreService { - /** - * èŽ·å¾—éƒ¨é—¨ä¿¡æ¯æ•°ç»„ - * - * @param ids éƒ¨é—¨ç¼–å·æ•°ç»„ - * @return éƒ¨é—¨ä¿¡æ¯æ•°ç»„ - */ - List getDepts(Collection ids); - - /** - * èŽ·å¾—éƒ¨é—¨ä¿¡æ¯ - * - * @param id éƒ¨é—¨ç¼–å· - * @return éƒ¨é—¨ä¿¡æ¯ - */ - SysDeptDO getDept(Long id); - - /** - * æ ¡éªŒéƒ¨é—¨ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: - * 1. 部门编å·ä¸å­˜åœ¨ - * 2. 部门被ç¦ç”¨ - * - * @param ids è§’è‰²ç¼–å·æ•°ç»„ - */ - void validDepts(Collection ids); - - /** - * 获得指定编å·çš„部门列表 - * - * @param ids éƒ¨é—¨ç¼–å·æ•°ç»„ - * @return 部门列表 - */ - List getSimpleDepts(Collection ids); - - /** - * 获得指定编å·çš„部门 Map - * - * @param ids éƒ¨é—¨ç¼–å·æ•°ç»„ - * @return 部门 Map - */ - default Map getDeptMap(Collection ids) { - if (CollUtil.isEmpty(ids)) { - return Collections.emptyMap(); - } - List list = getSimpleDepts(ids); - return CollectionUtils.convertMap(list, SysDeptDO::getId); - } -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysPostCoreService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysPostCoreService.java deleted file mode 100644 index 5ce996ed50..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysPostCoreService.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.iocoder.yudao.module.system.service.dept; - -import java.util.Collection; - -/** - * å²—ä½ Core Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface SysPostCoreService { - /** - * 校验岗ä½ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: - * 1. å²—ä½ç¼–å·ä¸å­˜åœ¨ - * 2. å²—ä½è¢«ç¦ç”¨ - * - * @param ids å²—ä½ç¼–å·æ•°ç»„ - */ - void validPosts(Collection ids); -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/impl/SysDeptCoreServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/impl/SysDeptCoreServiceImpl.java deleted file mode 100644 index 032e5e3789..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/impl/SysDeptCoreServiceImpl.java +++ /dev/null @@ -1,68 +0,0 @@ -package cn.iocoder.yudao.module.system.service.dept.impl; - -import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.module.system.dal.mysql.dept.SysDeptCoreMapper; -import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.DEPT_NOT_ENABLE; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.DEPT_NOT_FOUND; -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; - -/** - * 部门 Core Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Slf4j -public class SysDeptCoreServiceImpl implements SysDeptCoreService { - - @Resource - private SysDeptCoreMapper deptCoreMapper; - - @Override - public List getDepts(Collection ids) { - return deptCoreMapper.selectBatchIds(ids); - } - - @Override - public SysDeptDO getDept(Long id) { - return deptCoreMapper.selectById(id); - } - - @Override - public void validDepts(Collection ids) { - if (CollUtil.isEmpty(ids)) { - return; - } - // èŽ·å¾—ç§‘å®¤ä¿¡æ¯ - List depts = deptCoreMapper.selectBatchIds(ids); - Map deptMap = CollectionUtils.convertMap(depts, SysDeptDO::getId); - // 校验 - ids.forEach(id -> { - SysDeptDO dept = deptMap.get(id); - if (dept == null) { - throw exception(DEPT_NOT_FOUND); - } - if (!CommonStatusEnum.ENABLE.getStatus().equals(dept.getStatus())) { - throw exception(DEPT_NOT_ENABLE, dept.getName()); - } - }); - } - - @Override - public List getSimpleDepts(Collection ids) { - return deptCoreMapper.selectBatchIds(ids); - } - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/impl/SysPostCoreServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/impl/SysPostCoreServiceImpl.java deleted file mode 100644 index d0bc198743..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/impl/SysPostCoreServiceImpl.java +++ /dev/null @@ -1,50 +0,0 @@ -package cn.iocoder.yudao.module.system.service.dept.impl; - -import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; -import cn.iocoder.yudao.module.system.dal.mysql.dept.SysPostCoreMapper; -import cn.iocoder.yudao.module.system.service.dept.SysPostCoreService; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.POST_NOT_ENABLE; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.POST_NOT_FOUND; -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; - -/** - * å²—ä½ Core Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -public class SysPostCoreServiceImpl implements SysPostCoreService { - - @Resource - private SysPostCoreMapper sysPostCoreMapper; - - @Override - public void validPosts(Collection ids) { - if (CollUtil.isEmpty(ids)) { - return; - } - // 获得岗ä½ä¿¡æ¯ - List posts = sysPostCoreMapper.selectBatchIds(ids); - Map postMap = CollectionUtils.convertMap(posts, SysPostDO::getId); - // 校验 - ids.forEach(id -> { - SysPostDO post = postMap.get(id); - if (post == null) { - throw exception(POST_NOT_FOUND); - } - if (!CommonStatusEnum.ENABLE.getStatus().equals(post.getStatus())) { - throw exception(POST_NOT_ENABLE, post.getName()); - } - }); - } -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogService.java index f900f0baec..152236adfb 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogService.java @@ -4,8 +4,9 @@ import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginL import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysLoginLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.system.service.logger.dto.LoginLogCreateReqDTO; +import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO; +import javax.validation.Valid; import java.util.List; /** @@ -34,6 +35,6 @@ public interface LoginLogService { * * @param reqDTO æ—¥å¿—ä¿¡æ¯ */ - void createLoginLog(LoginLogCreateReqDTO reqDTO); + void createLoginLog(@Valid LoginLogCreateReqDTO reqDTO); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImpl.java index c352748724..0233b7c103 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImpl.java @@ -1,13 +1,12 @@ package cn.iocoder.yudao.module.system.service.logger; +import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO; import cn.iocoder.yudao.module.system.convert.logger.SysLoginLogCoreConvert; -import cn.iocoder.yudao.module.system.dal.mysql.logger.LoginLogMapper; import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysLoginLogDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.system.dal.mysql.logger.SysLoginLogCoreMapper; -import cn.iocoder.yudao.module.system.service.logger.dto.LoginLogCreateReqDTO; +import cn.iocoder.yudao.module.system.dal.mysql.logger.LoginLogMapper; +import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -35,7 +34,6 @@ public class LoginLogServiceImpl implements LoginLogService { @Override public void createLoginLog(LoginLogCreateReqDTO reqDTO) { SysLoginLogDO loginLog = SysLoginLogCoreConvert.INSTANCE.convert(reqDTO); - // æ’å…¥ loginLogMapper.insert(loginLog); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImpl.java index d32b0e505b..dc1175f602 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImpl.java @@ -6,9 +6,9 @@ import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.Oper import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO; import cn.iocoder.yudao.module.system.convert.logger.OperateLogConvert; import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.dal.mysql.logger.OperateLogMapper; -import cn.iocoder.yudao.module.system.service.user.UserService; -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.system.service.user.AdminUserService; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.string.StrUtils; import cn.iocoder.yudao.framework.operatelog.core.dto.OperateLogCreateReqDTO; @@ -35,7 +35,7 @@ public class OperateLogServiceImpl implements OperateLogService { private OperateLogMapper operateLogMapper; @Resource - private UserService userService; + private AdminUserService userService; @Override @Async @@ -58,7 +58,7 @@ public class OperateLogServiceImpl implements OperateLogService { // 处ç†åŸºäºŽç”¨æˆ·æ˜µç§°çš„æŸ¥è¯¢ Collection userIds = null; if (StrUtil.isNotEmpty(reqVO.getUserNickname())) { - userIds = convertSet(userService.getUsersByNickname(reqVO.getUserNickname()), UserDO::getId); + userIds = convertSet(userService.getUsersByNickname(reqVO.getUserNickname()), AdminUserDO::getId); if (CollUtil.isEmpty(userIds)) { return PageResult.empty(); } @@ -72,7 +72,7 @@ public class OperateLogServiceImpl implements OperateLogService { // 处ç†åŸºäºŽç”¨æˆ·æ˜µç§°çš„æŸ¥è¯¢ Collection userIds = null; if (StrUtil.isNotEmpty(reqVO.getUserNickname())) { - userIds = convertSet(userService.getUsersByNickname(reqVO.getUserNickname()), UserDO::getId); + userIds = convertSet(userService.getUsersByNickname(reqVO.getUserNickname()), AdminUserDO::getId); if (CollUtil.isEmpty(userIds)) { return Collections.emptyList(); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceImpl.java index 0bae64b787..fe2b573c07 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceImpl.java @@ -8,7 +8,7 @@ import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuLi import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuUpdateReqVO; import cn.iocoder.yudao.module.system.convert.permission.MenuConvert; import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; -import cn.iocoder.yudao.module.system.dal.mysql.permission.SysMenuMapper; +import cn.iocoder.yudao.module.system.dal.mysql.permission.MenuMapper; import cn.iocoder.yudao.module.system.enums.permission.MenuIdEnum; import cn.iocoder.yudao.module.system.enums.permission.MenuTypeEnum; import cn.iocoder.yudao.module.system.mq.producer.permission.MenuProducer; @@ -67,7 +67,7 @@ public class MenuServiceImpl implements MenuService { private volatile Date maxUpdateTime; @Resource - private SysMenuMapper menuMapper; + private MenuMapper menuMapper; @Resource private PermissionService permissionService; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionService.java index 9983bcbb91..153eb71ac7 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionService.java @@ -115,4 +115,12 @@ public interface PermissionService extends SecurityPermissionFrameworkService, D */ void processUserDeleted(Long userId); + /** + * 获得拥有多个角色的用户编å·é›†åˆ + * + * @param roleIds 角色编å·é›†åˆ + * @return 用户编å·é›†åˆ + */ + Set getUserRoleIdListByRoleIds(Collection roleIds); + } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceImpl.java index d68e849930..05f15ec9ef 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceImpl.java @@ -5,11 +5,11 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ArrayUtil; import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleMenuDO; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysUserRoleDO; -import cn.iocoder.yudao.module.system.dal.mysql.permission.SysRoleMenuMapper; -import cn.iocoder.yudao.module.system.dal.mysql.permission.SysUserRoleMapper; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.UserRoleDO; +import cn.iocoder.yudao.module.system.dal.mysql.permission.RoleMenuMapper; +import cn.iocoder.yudao.module.system.dal.mysql.permission.UserRoleMapper; import cn.iocoder.yudao.module.system.mq.producer.permission.PermissionProducer; import cn.iocoder.yudao.module.system.service.dept.DeptService; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; @@ -75,9 +75,9 @@ public class PermissionServiceImpl implements PermissionService { private volatile Date maxUpdateTime; @Resource - private SysRoleMenuMapper roleMenuMapper; + private RoleMenuMapper roleMenuMapper; @Resource - private SysUserRoleMapper userRoleMapper; + private UserRoleMapper userRoleMapper; @Resource private RoleService roleService; @@ -150,7 +150,7 @@ public class PermissionServiceImpl implements PermissionService { return Collections.emptyList(); } // 判断角色是å¦åŒ…å«ç®¡ç†å‘˜ - List roleList = roleService.getRolesFromCache(roleIds); + List roleList = roleService.getRolesFromCache(roleIds); boolean hasAdmin = roleService.hasAnyAdmin(roleList); // 获得角色拥有的èœå•å…³è” if (hasAdmin) { // 管ç†å‘˜ï¼ŒèŽ·å–到全部 @@ -162,21 +162,21 @@ public class PermissionServiceImpl implements PermissionService { @Override public Set getUserRoleIds(Long userId, Collection roleStatuses) { - List userRoleList = userRoleMapper.selectListByUserId(userId); + List userRoleList = userRoleMapper.selectListByUserId(userId); // è¿‡æ»¤è§’è‰²çŠ¶æ€ if (CollectionUtil.isNotEmpty(roleStatuses)) { userRoleList.removeIf(userRoleDO -> { - SysRoleDO role = roleService.getRoleFromCache(userRoleDO.getRoleId()); + RoleDO role = roleService.getRoleFromCache(userRoleDO.getRoleId()); return role == null || !roleStatuses.contains(role.getStatus()); }); } - return CollectionUtils.convertSet(userRoleList, SysUserRoleDO::getRoleId); + return CollectionUtils.convertSet(userRoleList, UserRoleDO::getRoleId); } @Override public Set listRoleMenuIds(Long roleId) { // 如果是管ç†å‘˜çš„æƒ…况下,获å–全部èœå•ç¼–å· - SysRoleDO role = roleService.getRole(roleId); + RoleDO role = roleService.getRole(roleId); if (roleService.hasAnyAdmin(Collections.singletonList(role))) { return CollectionUtils.convertSet(menuService.getMenus(), MenuDO::getId); } @@ -215,13 +215,13 @@ public class PermissionServiceImpl implements PermissionService { @Override public Set getUserRoleIdListByUserId(Long userId) { return CollectionUtils.convertSet(userRoleMapper.selectListByUserId(userId), - SysUserRoleDO::getRoleId); + UserRoleDO::getRoleId); } @Override public Set getUserRoleIdListByRoleId(Long roleId) { return CollectionUtils.convertSet(userRoleMapper.selectListByRoleId(roleId), - SysUserRoleDO::getRoleId); + UserRoleDO::getRoleId); } @@ -230,7 +230,7 @@ public class PermissionServiceImpl implements PermissionService { public void assignUserRole(Long userId, Set roleIds) { // èŽ·å¾—è§’è‰²æ‹¥æœ‰è§’è‰²ç¼–å· Set dbRoleIds = CollectionUtils.convertSet(userRoleMapper.selectListByUserId(userId), - SysUserRoleDO::getRoleId); + UserRoleDO::getRoleId); // è®¡ç®—æ–°å¢žå’Œåˆ é™¤çš„è§’è‰²ç¼–å· Collection createRoleIds = CollUtil.subtract(roleIds, dbRoleIds); Collection deleteMenuIds = CollUtil.subtract(dbRoleIds, roleIds); @@ -343,7 +343,7 @@ public class PermissionServiceImpl implements PermissionService { return true; } Set userRoles = CollectionUtils.convertSet(roleService.getRolesFromCache(roleIds), - SysRoleDO::getCode); + RoleDO::getCode); return CollUtil.containsAny(userRoles, Sets.newHashSet(roles)); } @@ -357,8 +357,8 @@ public class PermissionServiceImpl implements PermissionService { // 创建 DeptDataPermissionRespDTO 对象 result = new DeptDataPermissionRespDTO(); - List roles = roleService.getRolesFromCache(loginUser.getRoleIds()); - for (SysRoleDO role : roles) { + List roles = roleService.getRolesFromCache(loginUser.getRoleIds()); + for (RoleDO role : roles) { // 为空时,跳过 if (role.getDataScope() == null) { continue; @@ -401,4 +401,10 @@ public class PermissionServiceImpl implements PermissionService { return result; } + @Override + public Set getUserRoleIdListByRoleIds(Collection roleIds) { + return CollectionUtils.convertSet(userRoleMapper.selectListByRoleIds(roleIds), + UserRoleDO::getRoleId); + } + } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleService.java index def01146aa..003ea62cc9 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleService.java @@ -5,7 +5,7 @@ import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleCr import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; import org.springframework.lang.Nullable; import java.util.Collection; @@ -69,7 +69,7 @@ public interface RoleService { * @param id è§’è‰²ç¼–å· * @return 角色 */ - SysRoleDO getRoleFromCache(Long id); + RoleDO getRoleFromCache(Long id); /** * 获得角色列表 @@ -77,7 +77,7 @@ public interface RoleService { * @param statuses 筛选的状æ€ã€‚å…许空,空时ä¸ç­›é€‰ * @return 角色列表 */ - List getRoles(@Nullable Collection statuses); + List getRoles(@Nullable Collection statuses); /** * 获得角色数组,从缓存中 @@ -85,7 +85,7 @@ public interface RoleService { * @param ids è§’è‰²ç¼–å·æ•°ç»„ * @return 角色数组 */ - List getRolesFromCache(Collection ids); + List getRolesFromCache(Collection ids); /** * åˆ¤æ–­è§’è‰²æ•°ç»„ä¸­ï¼Œæ˜¯å¦æœ‰ç®¡ç†å‘˜ @@ -93,7 +93,7 @@ public interface RoleService { * @param roleList 角色数组 * @return æ˜¯å¦æœ‰ç®¡ç†å‘˜ */ - boolean hasAnyAdmin(Collection roleList); + boolean hasAnyAdmin(Collection roleList); /** * åˆ¤æ–­è§’è‰²ç¼–å·æ•°ç»„ä¸­ï¼Œæ˜¯å¦æœ‰ç®¡ç†å‘˜ @@ -111,7 +111,7 @@ public interface RoleService { * @param id è§’è‰²ç¼–å· * @return 角色 */ - SysRoleDO getRole(Long id); + RoleDO getRole(Long id); /** * 获得角色分页 @@ -119,7 +119,7 @@ public interface RoleService { * @param reqVO 角色分页查询 * @return 角色分页结果 */ - PageResult getRolePage(RolePageReqVO reqVO); + PageResult getRolePage(RolePageReqVO reqVO); /** * 获得角色列表 @@ -127,8 +127,15 @@ public interface RoleService { * @param reqVO 列表查询 * @return 角色列表 */ - List getRoleList(RoleExportReqVO reqVO); - + List getRoleList(RoleExportReqVO reqVO); + /** + * æ ¡éªŒè§’è‰²ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: + * 1. 角色编å·ä¸å­˜åœ¨ + * 2. 角色被ç¦ç”¨ + * + * @param ids è§’è‰²ç¼–å·æ•°ç»„ + */ + void validRoles(Collection ids); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceImpl.java index 095e87ddba..48182a3f68 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceImpl.java @@ -4,18 +4,19 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import cn.iocoder.yudao.framework.security.core.enums.DataScopeEnum; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleCreateReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleUpdateReqVO; import cn.iocoder.yudao.module.system.convert.permission.RoleConvert; -import cn.iocoder.yudao.module.system.dal.mysql.permission.SysRoleMapper; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; +import cn.iocoder.yudao.module.system.dal.mysql.permission.RoleMapper; import cn.iocoder.yudao.module.system.enums.permission.RoleCodeEnum; import cn.iocoder.yudao.module.system.enums.permission.RoleTypeEnum; import cn.iocoder.yudao.module.system.mq.producer.permission.RoleProducer; -import cn.iocoder.yudao.framework.security.core.enums.DataScopeEnum; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableMap; import lombok.extern.slf4j.Slf4j; @@ -32,8 +33,8 @@ import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; /** * 角色 Service 实现类 @@ -52,11 +53,11 @@ public class RoleServiceImpl implements RoleService { /** * 角色缓存 - * keyï¼šè§’è‰²ç¼–å· {@link SysRoleDO#getId()} + * keyï¼šè§’è‰²ç¼–å· {@link RoleDO#getId()} * * 这里声明 volatile ä¿®é¥°çš„åŽŸå› æ˜¯ï¼Œæ¯æ¬¡åˆ·æ–°æ—¶ï¼Œç›´æŽ¥ä¿®æ”¹æŒ‡å‘ */ - private volatile Map roleCache; + private volatile Map roleCache; /** * 缓存角色的最大更新时间,用于åŽç»­çš„增é‡è½®è¯¢ï¼Œåˆ¤æ–­æ˜¯å¦æœ‰æ›´æ–° */ @@ -66,7 +67,7 @@ public class RoleServiceImpl implements RoleService { private PermissionService permissionService; @Resource - private SysRoleMapper roleMapper; + private RoleMapper roleMapper; @Resource private RoleProducer roleProducer; @@ -78,13 +79,13 @@ public class RoleServiceImpl implements RoleService { @PostConstruct public void initLocalCache() { // 获å–角色列表,如果有更新 - List roleList = this.loadRoleIfUpdate(maxUpdateTime); + List roleList = this.loadRoleIfUpdate(maxUpdateTime); if (CollUtil.isEmpty(roleList)) { return; } // 写入缓存 - ImmutableMap.Builder builder = ImmutableMap.builder(); + ImmutableMap.Builder builder = ImmutableMap.builder(); roleList.forEach(sysRoleDO -> builder.put(sysRoleDO.getId(), sysRoleDO)); roleCache = builder.build(); assert roleList.size() > 0; // 断言,é¿å…告警 @@ -104,7 +105,7 @@ public class RoleServiceImpl implements RoleService { * @param maxUpdateTime 当å‰è§’色的最大更新时间 * @return 角色列表 */ - private List loadRoleIfUpdate(Date maxUpdateTime) { + private List loadRoleIfUpdate(Date maxUpdateTime) { // 第一步,判断是å¦è¦æ›´æ–°ã€‚ if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB ä¸€å®šæœ‰æ–°æ•°æ® log.info("[loadRoleIfUpdate][首次加载全é‡è§’色]"); @@ -123,7 +124,7 @@ public class RoleServiceImpl implements RoleService { // 校验角色 checkDuplicateRole(reqVO.getName(), reqVO.getCode(), null); // æ’入到数æ®åº“ - SysRoleDO role = RoleConvert.INSTANCE.convert(reqVO); + RoleDO role = RoleConvert.INSTANCE.convert(reqVO); role.setType(RoleTypeEnum.CUSTOM.getType()); role.setStatus(CommonStatusEnum.ENABLE.getStatus()); role.setDataScope(DataScopeEnum.ALL.getScope()); // é»˜è®¤å¯æŸ¥çœ‹æ‰€æœ‰æ•°æ®ã€‚原因是,å¯èƒ½ä¸€äº›é¡¹ç›®ä¸éœ€è¦é¡¹ç›®æƒé™ @@ -141,7 +142,7 @@ public class RoleServiceImpl implements RoleService { // 校验角色的唯一字段是å¦é‡å¤ checkDuplicateRole(reqVO.getName(), reqVO.getCode(), reqVO.getId()); // 更新到数æ®åº“ - SysRoleDO updateObject = RoleConvert.INSTANCE.convert(reqVO); + RoleDO updateObject = RoleConvert.INSTANCE.convert(reqVO); roleMapper.updateById(updateObject); // å‘é€åˆ·æ–°æ¶ˆæ¯ roleProducer.sendRoleRefreshMessage(); @@ -152,7 +153,7 @@ public class RoleServiceImpl implements RoleService { // 校验是å¦å¯ä»¥æ›´æ–° this.checkUpdateRole(id); // æ›´æ–°çŠ¶æ€ - SysRoleDO updateObject = new SysRoleDO(); + RoleDO updateObject = new RoleDO(); updateObject.setId(id); updateObject.setStatus(status); roleMapper.updateById(updateObject); @@ -165,7 +166,7 @@ public class RoleServiceImpl implements RoleService { // 校验是å¦å¯ä»¥æ›´æ–° checkUpdateRole(id); // æ›´æ–°æ•°æ®èŒƒå›´ - SysRoleDO updateObject = new SysRoleDO(); + RoleDO updateObject = new RoleDO(); updateObject.setId(id); updateObject.setDataScope(dataScope); updateObject.setDataScopeDeptIds(dataScopeDeptIds); @@ -195,17 +196,17 @@ public class RoleServiceImpl implements RoleService { } @Override - public SysRoleDO getRoleFromCache(Long id) { + public RoleDO getRoleFromCache(Long id) { return roleCache.get(id); } @Override - public List getRoles(@Nullable Collection statuses) { + public List getRoles(@Nullable Collection statuses) { return roleMapper.selectListByStatus(statuses); } @Override - public List getRolesFromCache(Collection ids) { + public List getRolesFromCache(Collection ids) { if (CollectionUtil.isEmpty(ids)) { return Collections.emptyList(); } @@ -214,7 +215,7 @@ public class RoleServiceImpl implements RoleService { } @Override - public boolean hasAnyAdmin(Collection roleList) { + public boolean hasAnyAdmin(Collection roleList) { if (CollectionUtil.isEmpty(roleList)) { return false; } @@ -222,17 +223,17 @@ public class RoleServiceImpl implements RoleService { } @Override - public SysRoleDO getRole(Long id) { + public RoleDO getRole(Long id) { return roleMapper.selectById(id); } @Override - public PageResult getRolePage(RolePageReqVO reqVO) { + public PageResult getRolePage(RolePageReqVO reqVO) { return roleMapper.selectPage(reqVO); } @Override - public List getRoleList(RoleExportReqVO reqVO) { + public List getRoleList(RoleExportReqVO reqVO) { return roleMapper.listRoles(reqVO); } @@ -249,7 +250,7 @@ public class RoleServiceImpl implements RoleService { @VisibleForTesting public void checkDuplicateRole(String name, String code, Long id) { // 1. 该 name å字被其它角色所使用 - SysRoleDO role = roleMapper.selectByName(name); + RoleDO role = roleMapper.selectByName(name); if (role != null && !role.getId().equals(id)) { throw exception(ROLE_NAME_DUPLICATE, name); } @@ -271,7 +272,7 @@ public class RoleServiceImpl implements RoleService { */ @VisibleForTesting public void checkUpdateRole(Long id) { - SysRoleDO roleDO = roleMapper.selectById(id); + RoleDO roleDO = roleMapper.selectById(id); if (roleDO == null) { throw exception(ROLE_NOT_EXISTS); } @@ -281,4 +282,23 @@ public class RoleServiceImpl implements RoleService { } } + @Override + public void validRoles(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // èŽ·å¾—è§’è‰²ä¿¡æ¯ + List roles = roleMapper.selectBatchIds(ids); + Map roleMap = CollectionUtils.convertMap(roles, RoleDO::getId); + // 校验 + ids.forEach(id -> { + RoleDO role = roleMap.get(id); + if (role == null) { + throw exception(ROLE_NOT_EXISTS); + } + if (!CommonStatusEnum.ENABLE.getStatus().equals(role.getStatus())) { + throw exception(ROLE_IS_DISABLE, role.getName()); + } + }); + } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysPermissionCoreService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysPermissionCoreService.java deleted file mode 100644 index 5898038c49..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysPermissionCoreService.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.iocoder.yudao.module.system.service.permission; - -import java.util.Collection; -import java.util.Set; -/** - * æƒé™ Core Service æŽ¥å£ - * - * æä¾›ç”¨æˆ·-角色ã€è§’色-èœå•ã€è§’色-éƒ¨é—¨çš„å…³è”æƒé™å¤„ç† - * - * @author èŠ‹é“æºç  - */ -public interface SysPermissionCoreService { - /** - * 获得拥有多个角色的用户编å·é›†åˆ - * - * @param roleIds 角色编å·é›†åˆ - * @return 用户编å·é›†åˆ - */ - Set getUserRoleIdListByRoleIds(Collection roleIds); -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysRoleCoreService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysRoleCoreService.java deleted file mode 100644 index 17e8adb871..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysRoleCoreService.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.iocoder.yudao.module.system.service.permission; - -import java.util.Collection; - -/** - * 角色 Core Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface SysRoleCoreService { - /** - * æ ¡éªŒè§’è‰²ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: - * 1. 角色编å·ä¸å­˜åœ¨ - * 2. 角色被ç¦ç”¨ - * - * @param ids è§’è‰²ç¼–å·æ•°ç»„ - */ - void validRoles(Collection ids); -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/impl/SysPermissionCoreServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/impl/SysPermissionCoreServiceImpl.java deleted file mode 100644 index 100e076af6..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/impl/SysPermissionCoreServiceImpl.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.yudao.module.system.service.permission.impl; - -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysUserRoleDO; -import cn.iocoder.yudao.module.system.dal.mysql.permission.SysUserRoleCoreMapper; -import cn.iocoder.yudao.module.system.service.permission.SysPermissionCoreService; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import java.util.Collection; -import java.util.Set; -/** - * æƒé™ Core Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -public class SysPermissionCoreServiceImpl implements SysPermissionCoreService { - - @Resource - private SysUserRoleCoreMapper userRoleCoreMapper; - - @Override - public Set getUserRoleIdListByRoleIds(Collection roleIds) { - return CollectionUtils.convertSet(userRoleCoreMapper.selectListByRoleIds(roleIds), - SysUserRoleDO::getRoleId); - } -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/impl/SysRoleCoreServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/impl/SysRoleCoreServiceImpl.java deleted file mode 100644 index 865eeb81ea..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/impl/SysRoleCoreServiceImpl.java +++ /dev/null @@ -1,50 +0,0 @@ -package cn.iocoder.yudao.module.system.service.permission.impl; - -import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO; -import cn.iocoder.yudao.module.system.dal.mysql.permission.SysRoleCoreMapper; -import cn.iocoder.yudao.module.system.service.permission.SysRoleCoreService; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.ROLE_IS_DISABLE; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.ROLE_NOT_EXISTS; -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; - -/** - * 角色 Core Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -public class SysRoleCoreServiceImpl implements SysRoleCoreService { - - @Resource - private SysRoleCoreMapper sysRoleCoreMapper; - - @Override - public void validRoles(Collection ids) { - if (CollUtil.isEmpty(ids)) { - return; - } - // èŽ·å¾—è§’è‰²ä¿¡æ¯ - List roles = sysRoleCoreMapper.selectBatchIds(ids); - Map roleMap = CollectionUtils.convertMap(roles, SysRoleDO::getId); - // 校验 - ids.forEach(id -> { - SysRoleDO role = roleMap.get(id); - if (role == null) { - throw exception(ROLE_NOT_EXISTS); - } - if (!CommonStatusEnum.ENABLE.getStatus().equals(role.getStatus())) { - throw exception(ROLE_IS_DISABLE, role.getName()); - } - }); - } -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceImpl.java index ef95af5f26..0a58798802 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceImpl.java @@ -5,7 +5,7 @@ import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannel import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelUpdateReqVO; import cn.iocoder.yudao.module.system.convert.sms.SmsChannelConvert; -import cn.iocoder.yudao.module.system.dal.mysql.sms.SysSmsChannelMapper; +import cn.iocoder.yudao.module.system.dal.mysql.sms.SmsChannelMapper; import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer; import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsChannelDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -52,7 +52,7 @@ public class SmsChannelServiceImpl implements SmsChannelService { private SmsClientFactory smsClientFactory; @Resource - private SysSmsChannelMapper smsChannelMapper; + private SmsChannelMapper smsChannelMapper; @Resource private SmsTemplateService smsTemplateService; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/sms/SysSmsCodeService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeService.java similarity index 62% rename from yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/sms/SysSmsCodeService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeService.java index e06e9a246f..f62b7576da 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/sms/SysSmsCodeService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeService.java @@ -1,22 +1,21 @@ -package cn.iocoder.yudao.module.member.service.sms; +package cn.iocoder.yudao.module.system.service.sms; import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.common.validation.Mobile; -import cn.iocoder.yudao.module.member.dal.dataobject.sms.SysSmsCodeDO; -import cn.iocoder.yudao.module.member.enums.sms.SysSmsSceneEnum; +import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; /** * 短信验è¯ç  Service æŽ¥å£ * * @author èŠ‹é“æºç  */ -public interface SysSmsCodeService { +public interface SmsCodeService { /** * 创建短信验è¯ç ï¼Œå¹¶è¿›è¡Œå‘é€ * * @param mobile æ‰‹æœºå· - * @param scene å‘é€åœºæ™¯ {@link SysSmsSceneEnum} + * @param scene å‘é€åœºæ™¯ {@link SmsSceneEnum} * @param createIp å‘é€ IP */ void sendSmsCode(@Mobile String mobile, Integer scene, String createIp); @@ -27,25 +26,19 @@ public interface SysSmsCodeService { * 如果错误,则抛出 {@link ServiceException} 异常 * * @param mobile æ‰‹æœºå· - * @param scene å‘é€åœºæ™¯ + * @param scene å‘é€åœºæ™¯ {@link SmsSceneEnum} * @param code 验è¯ç  * @param usedIp 使用 IP */ void useSmsCode(@Mobile String mobile, Integer scene, String code, String usedIp); - /** - * æ ¹æ®ç”¨æˆ·idå‘é€éªŒè¯ç  - * - * @param userId 用户id - */ - void sendSmsCodeLogin(Long userId); - /** * 检查验è¯ç æ˜¯å¦æœ‰æ•ˆ + * * @param mobile 手机 * @param code 验è¯ç  * @param scene 使用场景 - * @return 验è¯ç è®°å½• */ - SysSmsCodeDO checkCodeIsExpired(String mobile, String code, Integer scene); + void checkSmsCode(String mobile, String code, Integer scene); + } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeServiceImpl.java new file mode 100644 index 0000000000..db4bfa8fae --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeServiceImpl.java @@ -0,0 +1,112 @@ +package cn.iocoder.yudao.module.system.service.sms; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.map.MapUtil; +import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; +import cn.iocoder.yudao.module.member.api.user.MemberUserApi; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsCodeDO; +import cn.iocoder.yudao.module.system.dal.mysql.sms.SmsCodeMapper; +import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; +import cn.iocoder.yudao.module.system.framework.sms.SmsCodeProperties; +import cn.iocoder.yudao.module.system.service.user.AdminUserService; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.Date; + +import static cn.hutool.core.util.RandomUtil.randomInt; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; + +/** + * 短信验è¯ç  Service 实现类 + * + * @author èŠ‹é“æºç  + */ +@Service +@Validated +public class SmsCodeServiceImpl implements SmsCodeService { + + @Resource + private SmsCodeProperties smsCodeProperties; + + @Resource + private SmsCodeMapper smsCodeMapper; + + @Resource + private AdminUserService adminUserService; + @Resource + private MemberUserApi memberUserApi; + + @Resource + private SmsSendService smsSendService; + + @Override + public void sendSmsCode(String mobile, Integer scene, String createIp) { + SmsSceneEnum sceneEnum = SmsSceneEnum.getCodeByScene(scene); + Assert.notNull(sceneEnum, "验è¯ç åœºæ™¯({}) 查找ä¸åˆ°é…ç½®", scene); + // 创建验è¯ç  + String code = createSmsCode(mobile, scene, createIp); + // å‘é€éªŒè¯ç  + smsSendService.sendSingleSms(mobile, null, null, + sceneEnum.getTemplateCode(), MapUtil.of("code", code)); + } + + private String createSmsCode(String mobile, Integer scene, String ip) { + // 校验是å¦å¯ä»¥å‘é€éªŒè¯ç ï¼Œä¸ç”¨ç­›é€‰åœºæ™¯ + SmsCodeDO lastSmsCode = smsCodeMapper.selectLastByMobile(mobile, null,null); + if (lastSmsCode != null) { + if (lastSmsCode.getTodayIndex() >= smsCodeProperties.getSendMaximumQuantityPerDay()) { // 超过当天å‘é€çš„上é™ã€‚ + throw ServiceExceptionUtil.exception(SMS_CODE_EXCEED_SEND_MAXIMUM_QUANTITY_PER_DAY); + } + if (System.currentTimeMillis() - lastSmsCode.getCreateTime().getTime() + < smsCodeProperties.getSendFrequency().toMillis()) { // å‘é€è¿‡äºŽé¢‘ç¹ + throw ServiceExceptionUtil.exception(SMS_CODE_SEND_TOO_FAST); + } + // TODO 芋艿:æå‡ï¼Œæ¯ä¸ª IP æ¯å¤©å¯å‘逿•°é‡ + // TODO 芋艿:æå‡ï¼Œæ¯ä¸ª IP æ¯å°æ—¶å¯å‘逿•°é‡ + } + + // 创建验è¯ç è®°å½• + String code = String.valueOf(randomInt(smsCodeProperties.getBeginCode(), smsCodeProperties.getEndCode() + 1)); + SmsCodeDO newSmsCode = SmsCodeDO.builder().mobile(mobile).code(code) + .scene(scene).todayIndex(lastSmsCode != null ? lastSmsCode.getTodayIndex() + 1 : 1) + .createIp(ip).used(false).build(); + smsCodeMapper.insert(newSmsCode); + return code; + } + + @Override + public void useSmsCode(String mobile, Integer scene, String code, String usedIp) { + // 检测验è¯ç æ˜¯å¦æœ‰æ•ˆ + SmsCodeDO lastSmsCode = this.checkSmsCode0(mobile, code, scene); + // 使用验è¯ç  + smsCodeMapper.updateById(SmsCodeDO.builder().id(lastSmsCode.getId()) + .used(true).usedTime(new Date()).usedIp(usedIp).build()); + } + + @Override + public void checkSmsCode(String mobile, String code, Integer scene) { + checkSmsCode0(mobile, code, scene); + } + + public SmsCodeDO checkSmsCode0(String mobile, String code, Integer scene) { + // 校验验è¯ç  + SmsCodeDO lastSmsCode = smsCodeMapper.selectLastByMobile(mobile,code,scene); + // 若验è¯ç ä¸å­˜åœ¨ï¼ŒæŠ›å‡ºå¼‚常 + if (lastSmsCode == null) { + throw ServiceExceptionUtil.exception(SMS_CODE_NOT_FOUND); + } + // 超过时间 + if (System.currentTimeMillis() - lastSmsCode.getCreateTime().getTime() + >= smsCodeProperties.getExpireTimes().toMillis()) { // 验è¯ç å·²è¿‡æœŸ + throw ServiceExceptionUtil.exception(SMS_CODE_EXPIRED); + } + // 判断验è¯ç æ˜¯å¦å·²è¢«ä½¿ç”¨ + if (Boolean.TRUE.equals(lastSmsCode.getUsed())) { + throw ServiceExceptionUtil.exception(SMS_CODE_USED); + } + return lastSmsCode; + } + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceImpl.java index a90f69f09a..75fa8848c1 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceImpl.java @@ -4,7 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogPageReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; -import cn.iocoder.yudao.module.system.dal.mysql.sms.SysSmsLogMapper; +import cn.iocoder.yudao.module.system.dal.mysql.sms.SmsLogMapper; import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.system.enums.sms.SysSmsReceiveStatusEnum; @@ -28,7 +28,7 @@ import java.util.Objects; public class SmsLogServiceImpl implements SmsLogService { @Resource - private SysSmsLogMapper smsLogMapper; + private SmsLogMapper smsLogMapper; @Override public Long createSmsLog(String mobile, Long userId, Integer userType, Boolean isSend, @@ -41,7 +41,8 @@ public class SmsLogServiceImpl implements SmsLogService { logBuilder.mobile(mobile).userId(userId).userType(userType); // 设置模æ¿ç›¸å…³å­—段 logBuilder.templateId(template.getId()).templateCode(template.getCode()).templateType(template.getType()); - logBuilder.templateContent(templateContent).templateParams(templateParams).apiTemplateId(template.getApiTemplateId()); + logBuilder.templateContent(templateContent).templateParams(templateParams) + .apiTemplateId(template.getApiTemplateId()); // 设置渠é“相关字段 logBuilder.channelId(template.getChannelId()).channelCode(template.getChannelCode()); // 设置接收相关字段 diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsSendService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsSendService.java similarity index 63% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsSendService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsSendService.java index 4c673935a6..3c42cf58ea 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsSendService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsSendService.java @@ -6,14 +6,14 @@ import java.util.List; import java.util.Map; /** - * 短信 Service å‘é€æŽ¥å£ + * 短信å‘é€ Service æŽ¥å£ * * @author èŠ‹é“æºç  */ -public interface SysSmsSendService { +public interface SmsSendService { /** - * å‘é€å•æ¡çŸ­ä¿¡ç»™åŽå°ç”¨æˆ· + * å‘é€å•æ¡çŸ­ä¿¡ç»™ç®¡ç†åŽå°çš„用户 * * 在 mobile 为空时,使用 userId 加载对应管ç†å‘˜çš„æ‰‹æœºå· * @@ -27,7 +27,7 @@ public interface SysSmsSendService { String templateCode, Map templateParams); /** - * å‘é€å•æ¡çŸ­ä¿¡ç»™å‰å°ç”¨æˆ· + * å‘é€å•æ¡çŸ­ä¿¡ç»™ç”¨æˆ· APP 的用户 * * 在 mobile 为空时,使用 userId åŠ è½½å¯¹åº”ä¼šå‘˜çš„æ‰‹æœºå· * @@ -40,12 +40,30 @@ public interface SysSmsSendService { Long sendSingleSmsToMember(String mobile, Long userId, String templateCode, Map templateParams); + /** + * å‘é€å•æ¡çŸ­ä¿¡ç»™ç”¨æˆ· + * + * @param mobile æ‰‹æœºå· + * @param userId ç”¨æˆ·ç¼–å· + * @param userType 用户类型 + * @param templateCode 短信模æ¿ç¼–å· + * @param templateParams 短信模æ¿å‚æ•° + * @return å‘逿—¥å¿—ç¼–å· + */ Long sendSingleSms(String mobile, Long userId, Integer userType, String templateCode, Map templateParams); - void sendBatchSms(List mobiles, List userIds, Integer userType, - String templateCode, Map templateParams); + default void sendBatchSms(List mobiles, List userIds, Integer userType, + String templateCode, Map templateParams) { + throw new UnsupportedOperationException("æš‚æ—¶ä¸æ”¯æŒè¯¥æ“作,感兴趣å¯ä»¥å®žçŽ°è¯¥åŠŸèƒ½å“Ÿï¼"); + } + /** + * 执行真正的短信å‘é€ + * 注æ„,该方法仅仅æä¾›ç»™ MQ Consumer 使用 + * + * @param message 短信 + */ void doSendSms(SmsSendMessage message); /** diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsSendServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceImpl.java similarity index 84% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsSendServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceImpl.java index b6737fbdff..8819a27107 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SysSmsSendServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceImpl.java @@ -2,9 +2,6 @@ package cn.iocoder.yudao.module.system.service.sms; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; -import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage; import cn.iocoder.yudao.framework.common.core.KeyValue; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; @@ -13,10 +10,14 @@ import cn.iocoder.yudao.framework.sms.core.client.SmsClientFactory; import cn.iocoder.yudao.framework.sms.core.client.SmsCommonResult; import cn.iocoder.yudao.framework.sms.core.client.dto.SmsReceiveRespDTO; import cn.iocoder.yudao.framework.sms.core.client.dto.SmsSendRespDTO; +import cn.iocoder.yudao.module.member.api.user.MemberUserApi; +import cn.iocoder.yudao.module.member.api.user.dto.UserRespDTO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; +import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage; import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer; -import cn.iocoder.yudao.module.system.service.user.UserService; +import cn.iocoder.yudao.module.system.service.user.AdminUserService; import com.google.common.annotations.VisibleForTesting; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.Assert; @@ -25,20 +26,22 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; /** - * 短信 Service å‘é€çš„实现 + * 短信å‘é€ Service å‘é€çš„实现 * * @author èŠ‹é“æºç  */ @Service -public class SysSmsSendServiceImpl implements SysSmsSendService { +public class SmsSendServiceImpl implements SmsSendService { + + @Resource + private AdminUserService adminUserService; + @Resource + private MemberUserApi memberUserApi; - @Autowired - @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") // UserService 存在é‡å - private UserService userService; @Resource private SmsTemplateService smsTemplateService; @Resource @@ -54,7 +57,7 @@ public class SysSmsSendServiceImpl implements SysSmsSendService { public Long sendSingleSmsToAdmin(String mobile, Long userId, String templateCode, Map templateParams) { // 如果 mobile 为空,则加载用户编å·å¯¹åº”çš„æ‰‹æœºå· if (StrUtil.isEmpty(mobile)) { - UserDO user = userService.getUser(userId); + AdminUserDO user = adminUserService.getUser(userId); if (user != null) { mobile = user.getMobile(); } @@ -67,11 +70,10 @@ public class SysSmsSendServiceImpl implements SysSmsSendService { public Long sendSingleSmsToMember(String mobile, Long userId, String templateCode, Map templateParams) { // 如果 mobile 为空,则加载用户编å·å¯¹åº”çš„æ‰‹æœºå· if (StrUtil.isEmpty(mobile)) { -// MbrUserDO user = mbrUserCoreService.getUser(userId); -// if (user != null) { -// mobile = user.getMobile(); -// } - // TODO èŠ‹è‰¿ï¼šé‡æž„ + UserRespDTO user = memberUserApi.getUser(userId); + if (user != null) { + mobile = user.getMobile(); + } } // 执行å‘é€ return this.sendSingleSms(mobile, userId, UserTypeEnum.MEMBER.getValue(), templateCode, templateParams); @@ -87,8 +89,8 @@ public class SysSmsSendServiceImpl implements SysSmsSendService { // 构建有åºçš„æ¨¡æ¿å‚数。为什么放在这个ä½ç½®ï¼Œæ˜¯æå‰ä¿è¯æ¨¡æ¿å‚æ•°çš„æ­£ç¡®æ€§ï¼Œè€Œä¸æ˜¯åˆ°äº†æ’å…¥å‘逿—¥å¿— List> newTemplateParams = this.buildTemplateParams(template, templateParams); - // 创建å‘逿—¥å¿— - Boolean isSend = CommonStatusEnum.ENABLE.getStatus().equals(template.getStatus()); // 如果模æ¿è¢«ç¦ç”¨ï¼Œåˆ™ä¸å‘é€çŸ­ä¿¡ï¼Œåªè®°å½•日志 + // 创建å‘逿—¥å¿—。如果模æ¿è¢«ç¦ç”¨ï¼Œåˆ™ä¸å‘é€çŸ­ä¿¡ï¼Œåªè®°å½•日志 + Boolean isSend = CommonStatusEnum.ENABLE.getStatus().equals(template.getStatus()); String content = smsTemplateService.formatSmsTemplateContent(template.getContent(), templateParams); Long sendLogId = smsLogService.createSmsLog(mobile, userId, userType, isSend, template, content, templateParams); @@ -100,11 +102,6 @@ public class SysSmsSendServiceImpl implements SysSmsSendService { return sendLogId; } - @Override - public void sendBatchSms(List mobiles, List userIds, Integer userType, - String templateCode, Map templateParams) { - throw new UnsupportedOperationException("æš‚æ—¶ä¸æ”¯æŒè¯¥æ“作,感兴趣å¯ä»¥å®žçŽ°è¯¥åŠŸèƒ½å“Ÿï¼"); - } @VisibleForTesting public SysSmsTemplateDO checkSmsTemplateValid(String templateCode) { diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceImpl.java index 24589abe48..5199dd2220 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceImpl.java @@ -9,7 +9,7 @@ import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTempla import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplatePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateUpdateReqVO; import cn.iocoder.yudao.module.system.convert.sms.SmsTemplateConvert; -import cn.iocoder.yudao.module.system.dal.mysql.sms.SysSmsTemplateMapper; +import cn.iocoder.yudao.module.system.dal.mysql.sms.SmsTemplateMapper; import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer; import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsChannelDO; import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; @@ -56,7 +56,7 @@ public class SmsTemplateServiceImpl implements SmsTemplateService { private static final Pattern PATTERN_PARAMS = Pattern.compile("\\{(.*?)}"); @Resource - private SysSmsTemplateMapper smsTemplateMapper; + private SmsTemplateMapper smsTemplateMapper; @Resource private SmsChannelService smsChannelService; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java index a6010503c8..e5ca68040e 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java @@ -1,10 +1,9 @@ package cn.iocoder.yudao.module.system.service.social; import cn.hutool.core.util.StrUtil; +import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.module.system.dal.dataobject.social.SysSocialUserDO; import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.common.exception.ServiceException; import me.zhyd.oauth.model.AuthUser; import javax.validation.constraints.NotNull; @@ -38,6 +37,12 @@ public interface SocialUserService { @NotNull AuthUser getAuthUser(Integer type, String code, String state); + /** + * 获得社交用户的 unionId ç¼–å· + * + * @param authUser 社交用户 + * @return unionId ç¼–å· + */ default String getAuthUserUnionId(AuthUser authUser) { return StrUtil.blankToDefault(authUser.getToken().getUnionId(), authUser.getUuid()); } @@ -48,38 +53,37 @@ public interface SocialUserService { * * @param type 社交平å°çš„类型 {@link SocialTypeEnum} * @param unionId 社交平å°çš„ unionId + * @param userType 全局用户类型 * @return 社交用户列表 - * @param userTypeEnum 全局用户类型 */ - List getAllSocialUserList(Integer type, String unionId, UserTypeEnum userTypeEnum); + List getAllSocialUserList(Integer type, String unionId, Integer userType); /** * 获得指定用户的社交用户列表 * * @param userId ç”¨æˆ·ç¼–å· + * @param userType 用户类型 * @return 社交用户列表 - * @param userTypeEnum 全局用户类型 */ - List getSocialUserList(Long userId, UserTypeEnum userTypeEnum); + List getSocialUserList(Long userId, Integer userType); /** * 绑定社交用户 - * - * @param userId ç”¨æˆ·ç¼–å· + * @param userId ç”¨æˆ·ç¼–å· + * @param userType 用户类型 * @param type 社交平å°çš„类型 {@link SocialTypeEnum} * @param authUser 授æƒç”¨æˆ· - * @param userTypeEnum 全局用户类型 */ - void bindSocialUser(Long userId, Integer type, AuthUser authUser, UserTypeEnum userTypeEnum); + void bindSocialUser(Long userId, Integer userType, Integer type, AuthUser authUser); /** * å–æ¶ˆç»‘定社交用户 * * @param userId ç”¨æˆ·ç¼–å· + * @param userType 全局用户类型 * @param type 社交平å°çš„类型 {@link SocialTypeEnum} * @param unionId 社交平å°çš„ unionId - * @param userTypeEnum 全局用户类型 */ - void unbindSocialUser(Long userId, Integer type, String unionId, UserTypeEnum userTypeEnum); + void unbindSocialUser(Long userId, Integer userType, Integer type, String unionId); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java index c5ccf20d01..ecb81d96a9 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java @@ -1,13 +1,12 @@ package cn.iocoder.yudao.module.system.service.social; import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import cn.iocoder.yudao.framework.common.util.http.HttpUtils; import cn.iocoder.yudao.module.system.dal.dataobject.social.SysSocialUserDO; import cn.iocoder.yudao.module.system.dal.mysql.social.SysSocialUserMapper; import cn.iocoder.yudao.module.system.dal.redis.social.SocialAuthUserRedisDAO; import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; -import cn.iocoder.yudao.framework.common.util.http.HttpUtils; import com.google.common.annotations.VisibleForTesting; import com.xkcoding.justauth.AuthRequestFactory; import lombok.extern.slf4j.Slf4j; @@ -24,10 +23,10 @@ import javax.annotation.Resource; import java.util.List; import java.util.Objects; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.SOCIAL_AUTH_FAILURE; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.SOCIAL_UNBIND_NOT_SELF; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.SOCIAL_USER_AUTH_FAILURE; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.SOCIAL_USER_UNBIND_NOT_SELF; /** * 社交用户 Service 实现类 @@ -74,25 +73,25 @@ public class SocialUserServiceImpl implements SocialUserService { } @Override - public List getAllSocialUserList(Integer type, String unionId,UserTypeEnum userTypeEnum) { + public List getAllSocialUserList(Integer type, String unionId, Integer userType) { List types = SocialTypeEnum.getRelationTypes(type); - return socialUserMapper.selectListByTypeAndUnionId(userTypeEnum.getValue(), types, unionId); + return socialUserMapper.selectListByTypeAndUnionId(userType, types, unionId); } @Override - public List getSocialUserList(Long userId,UserTypeEnum userTypeEnum) { - return socialUserMapper.selectListByUserId(userTypeEnum.getValue(), userId); + public List getSocialUserList(Long userId, Integer userType) { + return socialUserMapper.selectListByUserId(userType, userId); } @Override - @Transactional - public void bindSocialUser(Long userId, Integer type, AuthUser authUser, UserTypeEnum userTypeEnum) { + @Transactional(rollbackFor = Exception.class) + public void bindSocialUser(Long userId, Integer userType, Integer type, AuthUser authUser) { // 获得 unionId 对应的 SysSocialUserDO 列表 String unionId = getAuthUserUnionId(authUser); - List socialUsers = this.getAllSocialUserList(type, unionId, userTypeEnum); + List socialUsers = this.getAllSocialUserList(type, unionId, userType); // 逻辑一:如果 userId 之å‰ç»‘定过该 type 的其它账å·ï¼Œéœ€è¦è¿›è¡Œè§£ç»‘ - this.unbindOldSocialUser(userId, type, unionId, userTypeEnum); + this.unbindOldSocialUser(userId, userType, type, unionId); // 逻辑二:如果 socialUsers 指定的 userId 改å˜ï¼Œéœ€è¦è¿›è¡Œæ›´æ–° // 例如说,一个微信 unionId 对应了多个社交账å·ï¼Œç»“果其中有个关è”了新的 userId,则其它也è¦è·Ÿç€ä¿®æ”¹ @@ -111,7 +110,7 @@ public class SocialUserServiceImpl implements SocialUserService { .nickname(authUser.getNickname()).avatar(authUser.getAvatar()).rawUserInfo(toJsonString(authUser.getRawUserInfo())) .build(); if (socialUser == null) { - saveSocialUser.setUserId(userId).setUserType(userTypeEnum.getValue()) + saveSocialUser.setUserId(userId).setUserType(userType) .setType(type).setOpenid(authUser.getUuid()).setUnionId(unionId); socialUserMapper.insert(saveSocialUser); } else { @@ -121,16 +120,16 @@ public class SocialUserServiceImpl implements SocialUserService { } @Override - public void unbindSocialUser(Long userId, Integer type, String unionId, UserTypeEnum userTypeEnum) { + public void unbindSocialUser(Long userId, Integer userType, Integer type, String unionId) { // 获得 unionId 对应的所有 SysSocialUserDO 社交用户 - List socialUsers = this.getAllSocialUserList(type, unionId, userTypeEnum); + List socialUsers = this.getAllSocialUserList(type, unionId, userType); if (CollUtil.isEmpty(socialUsers)) { return; } // 校验,是å¦è§£ç»‘的是éžè‡ªå·±çš„ socialUsers.forEach(socialUser -> { if (!Objects.equals(socialUser.getUserId(), userId)) { - throw exception(SOCIAL_UNBIND_NOT_SELF); + throw exception(SOCIAL_USER_UNBIND_NOT_SELF); } }); @@ -139,10 +138,9 @@ public class SocialUserServiceImpl implements SocialUserService { } @VisibleForTesting - public void unbindOldSocialUser(Long userId, Integer type, String newUnionId, UserTypeEnum userTypeEnum) { + public void unbindOldSocialUser(Long userId, Integer userType, Integer type, String newUnionId) { List types = SocialTypeEnum.getRelationTypes(type); - List oldSocialUsers = socialUserMapper.selectListByTypeAndUserId( - userTypeEnum.getValue(), types, userId); + List oldSocialUsers = socialUserMapper.selectListByTypeAndUserId(userType, types, userId); // 如果新è€çš„ unionId 是一致的,说明无需解绑 if (CollUtil.isEmpty(oldSocialUsers) || Objects.equals(newUnionId, oldSocialUsers.get(0).getUnionId())) { return; @@ -165,7 +163,7 @@ public class SocialUserServiceImpl implements SocialUserService { log.info("[getAuthUser0][è¯·æ±‚ç¤¾äº¤å¹³å° type({}) request({}) response({})]", type, toJsonString(authCallback), toJsonString(authResponse)); if (!authResponse.ok()) { - throw exception(SOCIAL_AUTH_FAILURE, authResponse.getMsg()); + throw exception(SOCIAL_USER_AUTH_FAILURE, authResponse.getMsg()); } return (AuthUser) authResponse.getData(); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/UserService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java similarity index 83% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/UserService.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java index f4e9c63dfd..68dd3bb572 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/UserService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java @@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfi import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import java.io.InputStream; import java.util.*; @@ -16,7 +16,7 @@ import java.util.*; * * @author èŠ‹é“æºç  */ -public interface UserService { +public interface AdminUserService { /** * 创建用户 @@ -94,7 +94,7 @@ public interface UserService { * @param username 用户å * @return ç”¨æˆ·å¯¹è±¡ä¿¡æ¯ */ - UserDO getUserByUsername(String username); + AdminUserDO getUserByUsername(String username); /** * 获得用户分页列表 @@ -102,7 +102,7 @@ public interface UserService { * @param reqVO 分页æ¡ä»¶ * @return 分页列表 */ - PageResult getUserPage(UserPageReqVO reqVO); + PageResult getUserPage(UserPageReqVO reqVO); /** * 通过用户 ID 查询用户 @@ -110,7 +110,7 @@ public interface UserService { * @param id 用户ID * @return ç”¨æˆ·å¯¹è±¡ä¿¡æ¯ */ - UserDO getUser(Long id); + AdminUserDO getUser(Long id); /** * 获得指定部门的用户数组 @@ -118,7 +118,7 @@ public interface UserService { * @param deptIds 部门数组 * @return 用户数组 */ - List getUsersByDeptIds(Collection deptIds); + List getUsersByDeptIds(Collection deptIds); /** * 获得指定岗ä½çš„用户数组 @@ -126,7 +126,7 @@ public interface UserService { * @param postIds 岗使•°ç»„ * @return 用户数组 */ - List getUsersByPostIds(Collection postIds); + List getUsersByPostIds(Collection postIds); /** * 获得用户列表 @@ -134,7 +134,7 @@ public interface UserService { * @param ids ç”¨æˆ·ç¼–å·æ•°ç»„ * @return 用户列表 */ - List getUsers(Collection ids); + List getUsers(Collection ids); /** * æ ¡éªŒç”¨æˆ·ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: @@ -151,11 +151,11 @@ public interface UserService { * @param ids ç”¨æˆ·ç¼–å·æ•°ç»„ * @return 用户 Map */ - default Map getUserMap(Collection ids) { + default Map getUserMap(Collection ids) { if (CollUtil.isEmpty(ids)) { return new HashMap<>(); } - return CollectionUtils.convertMap(getUsers(ids), UserDO::getId); + return CollectionUtils.convertMap(getUsers(ids), AdminUserDO::getId); } /** @@ -164,7 +164,7 @@ public interface UserService { * @param reqVO 列表请求 * @return 用户列表 */ - List getUsers(UserExportReqVO reqVO); + List getUsers(UserExportReqVO reqVO); /** * èŽ·å¾—ç”¨æˆ·åˆ—è¡¨ï¼ŒåŸºäºŽæ˜µç§°æ¨¡ç³ŠåŒ¹é… @@ -172,7 +172,7 @@ public interface UserService { * @param nickname 昵称 * @return 用户列表 */ - List getUsersByNickname(String nickname); + List getUsersByNickname(String nickname); /** * èŽ·å¾—ç”¨æˆ·åˆ—è¡¨ï¼ŒåŸºäºŽç”¨æˆ·è´¦å·æ¨¡ç³ŠåŒ¹é… @@ -180,7 +180,7 @@ public interface UserService { * @param username ç”¨æˆ·è´¦å· * @return 用户列表 */ - List getUsersByUsername(String username); + List getUsersByUsername(String username); /** * 批é‡å¯¼å…¥ç”¨æˆ· @@ -197,6 +197,6 @@ public interface UserService { * @param status çŠ¶æ€ * @return 用户们 */ - List getUsersByStatus(Integer status); + List getUsersByStatus(Integer status); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/UserServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java similarity index 76% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/UserServiceImpl.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java index 1530d3bca4..25c413e126 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/UserServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java @@ -14,12 +14,10 @@ import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfi import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; import cn.iocoder.yudao.module.system.convert.user.UserConvert; import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; -import cn.iocoder.yudao.module.system.dal.mysql.user.UserMapper; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; +import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper; import cn.iocoder.yudao.module.system.service.dept.DeptService; import cn.iocoder.yudao.module.system.service.dept.PostService; -import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; import cn.iocoder.yudao.module.system.service.permission.PermissionService; import com.google.common.annotations.VisibleForTesting; import lombok.extern.slf4j.Slf4j; @@ -34,29 +32,24 @@ import java.util.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.USER_IS_DISABLE; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.USER_NOT_EXISTS; /** - * 管ç†å‘˜ç”¨æˆ· Service 实现类 + * åŽå°ç”¨æˆ· Service 实现类 * * @author èŠ‹é“æºç  */ @Service("adminUserService") @Slf4j -public class UserServiceImpl implements UserService { +public class AdminUserServiceImpl implements AdminUserService { @Value("${sys.user.init-password:yudaoyuanma}") private String userInitPassword; - @Resource(name = "sysUserMapper") // userMapper 存在é‡å - private UserMapper userMapper; + @Resource + private AdminUserMapper userMapper; @Resource private DeptService deptService; - - @Resource - private SysDeptCoreService deptCoreService; @Resource private PostService postService; @Resource @@ -72,7 +65,7 @@ public class UserServiceImpl implements UserService { this.checkCreateOrUpdate(null, reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail(), reqVO.getDeptId(), reqVO.getPostIds()); // æ’入用户 - UserDO user = UserConvert.INSTANCE.convert(reqVO); + AdminUserDO user = UserConvert.INSTANCE.convert(reqVO); user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // é»˜è®¤å¼€å¯ user.setPassword(passwordEncoder.encode(reqVO.getPassword())); // åŠ å¯†å¯†ç  userMapper.insert(user); @@ -85,13 +78,13 @@ public class UserServiceImpl implements UserService { this.checkCreateOrUpdate(reqVO.getId(), reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail(), reqVO.getDeptId(), reqVO.getPostIds()); // 更新用户 - UserDO updateObj = UserConvert.INSTANCE.convert(reqVO); + AdminUserDO updateObj = UserConvert.INSTANCE.convert(reqVO); userMapper.updateById(updateObj); } @Override public void updateUserLogin(Long id, String loginIp) { - userMapper.updateById(new UserDO().setId(id).setLoginIp(loginIp).setLoginDate(new Date())); + userMapper.updateById(new AdminUserDO().setId(id).setLoginIp(loginIp).setLoginDate(new Date())); } @Override @@ -109,7 +102,7 @@ public class UserServiceImpl implements UserService { // 校验旧密ç å¯†ç  this.checkOldPassword(id, reqVO.getOldPassword()); // 执行更新 - UserDO updateObj = new UserDO().setId(id); + AdminUserDO updateObj = new AdminUserDO().setId(id); updateObj.setPassword(passwordEncoder.encode(reqVO.getNewPassword())); // åŠ å¯†å¯†ç  userMapper.updateById(updateObj); } @@ -120,7 +113,7 @@ public class UserServiceImpl implements UserService { // 存储文件 String avatar = fileService.createFile(IdUtil.fastUUID(), IoUtil.readBytes(avatarFile)); // 更新路径 - UserDO sysUserDO = new UserDO(); + AdminUserDO sysUserDO = new AdminUserDO(); sysUserDO.setId(id); sysUserDO.setAvatar(avatar); userMapper.updateById(sysUserDO); @@ -132,7 +125,7 @@ public class UserServiceImpl implements UserService { // 校验用户存在 this.checkUserExists(id); // æ›´æ–°å¯†ç  - UserDO updateObj = new UserDO(); + AdminUserDO updateObj = new AdminUserDO(); updateObj.setId(id); updateObj.setPassword(passwordEncoder.encode(password)); // åŠ å¯†å¯†ç  userMapper.updateById(updateObj); @@ -143,7 +136,7 @@ public class UserServiceImpl implements UserService { // 校验用户存在 this.checkUserExists(id); // æ›´æ–°çŠ¶æ€ - UserDO updateObj = new UserDO(); + AdminUserDO updateObj = new AdminUserDO(); updateObj.setId(id); updateObj.setStatus(status); userMapper.updateById(updateObj); @@ -160,22 +153,22 @@ public class UserServiceImpl implements UserService { } @Override - public UserDO getUserByUsername(String username) { + public AdminUserDO getUserByUsername(String username) { return userMapper.selectByUsername(username); } @Override - public PageResult getUserPage(UserPageReqVO reqVO) { + public PageResult getUserPage(UserPageReqVO reqVO) { return userMapper.selectPage(reqVO, this.getDeptCondition(reqVO.getDeptId())); } @Override - public UserDO getUser(Long id) { + public AdminUserDO getUser(Long id) { return userMapper.selectById(id); } @Override - public List getUsersByDeptIds(Collection deptIds) { + public List getUsersByDeptIds(Collection deptIds) { if (CollUtil.isEmpty(deptIds)) { return Collections.emptyList(); } @@ -183,19 +176,19 @@ public class UserServiceImpl implements UserService { } @Override - public List getUsersByPostIds(Collection postIds) { + public List getUsersByPostIds(Collection postIds) { if (CollUtil.isEmpty(postIds)) { return Collections.emptyList(); } // 过滤ä¸ç¬¦åˆæ¡ä»¶çš„ // TODO 芋艿:暂时åªèƒ½å†…存过滤。解决方案:1ã€æ–°å»ºä¸€ä¸ªå…³è”表;2ã€åŸºäºŽ where + 函数;3ã€json å­—æ®µï¼Œé€‚åˆ mysql 8+ 版本 - List users = userMapper.selectList(); + List users = userMapper.selectList(); users.removeIf(user -> !CollUtil.containsAny(user.getPostIds(), postIds)); return users; } @Override - public List getUsers(Collection ids) { + public List getUsers(Collection ids) { if (CollUtil.isEmpty(ids)) { return Collections.emptyList(); } @@ -208,11 +201,11 @@ public class UserServiceImpl implements UserService { return; } // 获得岗ä½ä¿¡æ¯ - List users = userMapper.selectBatchIds(ids); - Map userMap = CollectionUtils.convertMap(users, UserDO::getId); + List users = userMapper.selectBatchIds(ids); + Map userMap = CollectionUtils.convertMap(users, AdminUserDO::getId); // 校验 ids.forEach(id -> { - UserDO user = userMap.get(id); + AdminUserDO user = userMap.get(id); if (user == null) { throw exception(USER_NOT_EXISTS); } @@ -223,17 +216,17 @@ public class UserServiceImpl implements UserService { } @Override - public List getUsers(UserExportReqVO reqVO) { + public List getUsers(UserExportReqVO reqVO) { return userMapper.selectList(reqVO, this.getDeptCondition(reqVO.getDeptId())); } @Override - public List getUsersByNickname(String nickname) { + public List getUsersByNickname(String nickname) { return userMapper.selectListByNickname(nickname); } @Override - public List getUsersByUsername(String username) { + public List getUsersByUsername(String username) { return userMapper.selectListByUsername(username); } @@ -264,9 +257,9 @@ public class UserServiceImpl implements UserService { // 校验邮箱唯一 this.checkEmailUnique(id, email); // 校验部门处于开å¯çŠ¶æ€ - this.checkDeptEnable(deptId); + deptService.validDepts(Collections.singleton(deptId)); // 校验岗ä½å¤„于开å¯çŠ¶æ€ - this.checkPostEnable(postIds); + postService.validPosts(postIds); } @VisibleForTesting @@ -274,7 +267,7 @@ public class UserServiceImpl implements UserService { if (id == null) { return; } - UserDO user = userMapper.selectById(id); + AdminUserDO user = userMapper.selectById(id); if (user == null) { throw exception(USER_NOT_EXISTS); } @@ -285,7 +278,7 @@ public class UserServiceImpl implements UserService { if (StrUtil.isBlank(username)) { return; } - UserDO user = userMapper.selectByUsername(username); + AdminUserDO user = userMapper.selectByUsername(username); if (user == null) { return; } @@ -303,7 +296,7 @@ public class UserServiceImpl implements UserService { if (StrUtil.isBlank(email)) { return; } - UserDO user = userMapper.selectByEmail(email); + AdminUserDO user = userMapper.selectByEmail(email); if (user == null) { return; } @@ -321,7 +314,7 @@ public class UserServiceImpl implements UserService { if (StrUtil.isBlank(mobile)) { return; } - UserDO user = userMapper.selectByMobile(mobile); + AdminUserDO user = userMapper.selectByMobile(mobile); if (user == null) { return; } @@ -334,41 +327,6 @@ public class UserServiceImpl implements UserService { } } - @VisibleForTesting - public void checkDeptEnable(Long deptId) { - if (deptId == null) { // å…许ä¸é€‰æ‹© - return; - } - SysDeptDO dept = deptCoreService.getDept(deptId); - if (dept == null) { - throw exception(DEPT_NOT_FOUND); - } - if (!CommonStatusEnum.ENABLE.getStatus().equals(dept.getStatus())) { - throw exception(DEPT_NOT_ENABLE); - } - } - - @VisibleForTesting - public void checkPostEnable(Set postIds) { - if (CollUtil.isEmpty(postIds)) { // å…许ä¸é€‰æ‹© - return; - } - List posts = postService.getPosts(postIds, null); - if (CollUtil.isEmpty(posts)) { - throw exception(POST_NOT_FOUND); - } - Map postMap = CollectionUtils.convertMap(posts, SysPostDO::getId); - postIds.forEach(postId -> { - SysPostDO post = postMap.get(postId); - if (post == null) { - throw exception(POST_NOT_FOUND); - } - if (!CommonStatusEnum.ENABLE.getStatus().equals(post.getStatus())) { - throw exception(POST_NOT_ENABLE, post.getName()); - } - }); - } - /** * æ ¡éªŒæ—§å¯†ç  * @@ -377,7 +335,7 @@ public class UserServiceImpl implements UserService { */ @VisibleForTesting public void checkOldPassword(Long id, String oldPassword) { - UserDO user = userMapper.selectById(id); + AdminUserDO user = userMapper.selectById(id); if (user == null) { throw exception(USER_NOT_EXISTS); } @@ -404,7 +362,7 @@ public class UserServiceImpl implements UserService { return; } // 判断如果ä¸å­˜åœ¨ï¼Œåœ¨è¿›è¡Œæ’å…¥ - UserDO existUser = userMapper.selectByUsername(importUser.getUsername()); + AdminUserDO existUser = userMapper.selectByUsername(importUser.getUsername()); if (existUser == null) { userMapper.insert(UserConvert.INSTANCE.convert(importUser) .setPassword(passwordEncoder.encode(userInitPassword))); // è®¾ç½®é»˜è®¤å¯†ç  @@ -416,7 +374,7 @@ public class UserServiceImpl implements UserService { respVO.getFailureUsernames().put(importUser.getUsername(), USER_USERNAME_EXISTS.getMsg()); return; } - UserDO updateUser = UserConvert.INSTANCE.convert(importUser); + AdminUserDO updateUser = UserConvert.INSTANCE.convert(importUser); updateUser.setId(existUser.getId()); userMapper.updateById(updateUser); respVO.getUpdateUsernames().add(importUser.getUsername()); @@ -425,7 +383,7 @@ public class UserServiceImpl implements UserService { } @Override - public List getUsersByStatus(Integer status) { + public List getUsersByStatus(Integer status) { return userMapper.selectListByStatus(status); } diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/AuthServiceImplTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/AuthServiceImplTest.java index 1ad03c06ef..9869cee2c6 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/AuthServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/AuthServiceImplTest.java @@ -1,14 +1,14 @@ package cn.iocoder.yudao.module.system.service.auth; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthLoginReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum; import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum; import cn.iocoder.yudao.module.system.service.common.CaptchaService; import cn.iocoder.yudao.module.system.service.dept.PostService; import cn.iocoder.yudao.module.system.service.logger.LoginLogService; import cn.iocoder.yudao.module.system.service.permission.PermissionService; -import cn.iocoder.yudao.module.system.service.user.UserService; -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.system.service.user.AdminUserService; import cn.iocoder.yudao.module.system.service.social.SocialUserService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.security.core.LoginUser; @@ -37,14 +37,14 @@ import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; -@Import(AuthServiceImpl.class) +@Import(AdminAuthServiceImpl.class) public class AuthServiceImplTest extends BaseDbUnitTest { @Resource - private AuthServiceImpl authService; + private AdminAuthServiceImpl authService; @MockBean - private UserService userService; + private AdminUserService userService; @MockBean private PermissionService permissionService; @MockBean @@ -72,7 +72,7 @@ public class AuthServiceImplTest extends BaseDbUnitTest { // 准备傿•° String username = randomString(); // mock 方法 - UserDO user = randomPojo(UserDO.class, o -> o.setUsername(username)); + AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setUsername(username)); when(userService.getUserByUsername(eq(username))).thenReturn(user); // 调用 @@ -98,7 +98,7 @@ public class AuthServiceImplTest extends BaseDbUnitTest { // 准备傿•° Long userId = randomLongId(); // mock 方法 01 - UserDO user = randomPojo(UserDO.class, o -> o.setId(userId)); + AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setId(userId)); when(userService.getUser(eq(userId))).thenReturn(user); // mock 方法 02 Set roleIds = randomSet(Long.class); diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImplTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImplTest.java index 4ca9127212..33b2a3b788 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImplTest.java @@ -4,11 +4,11 @@ import cn.hutool.core.date.DateUtil; import cn.iocoder.yudao.framework.security.config.SecurityProperties; import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.session.UserSessionPageReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.dal.mysql.auth.SysUserSessionMapper; import cn.iocoder.yudao.module.system.service.logger.LoginLogService; -import cn.iocoder.yudao.module.system.service.user.UserService; +import cn.iocoder.yudao.module.system.service.user.AdminUserService; import cn.iocoder.yudao.module.system.dal.dataobject.auth.SysUserSessionDO; -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; import cn.iocoder.yudao.module.system.dal.redis.auth.LoginUserRedisDAO; import cn.iocoder.yudao.module.system.enums.common.SysSexEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; @@ -52,7 +52,7 @@ public class UserSessionServiceImplTest extends BaseDbAndRedisUnitTest { private SysUserSessionMapper userSessionMapper; @MockBean - private UserService userService; + private AdminUserService userService; @MockBean private LoginLogService loginLogService; @MockBean @@ -64,7 +64,7 @@ public class UserSessionServiceImplTest extends BaseDbAndRedisUnitTest { @Test public void testGetUserSessionPage_success() { // mock æ•°æ® - UserDO dbUser = randomPojo(UserDO.class, o -> { + AdminUserDO dbUser = randomPojo(AdminUserDO.class, o -> { o.setSex(randomEle(SysSexEnum.values()).getSex()); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); }); diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImplTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImplTest.java index fdaf676da2..b17ad14047 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImplTest.java @@ -8,13 +8,11 @@ import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils; import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO; import cn.iocoder.yudao.module.system.dal.mysql.logger.LoginLogMapper; -import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum; -import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum; import cn.iocoder.yudao.framework.test.core.util.RandomUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; -import cn.iocoder.yudao.module.system.enums.logger.SysLoginLogTypeEnum; -import cn.iocoder.yudao.module.system.enums.logger.SysLoginResultEnum; -import cn.iocoder.yudao.module.system.service.logger.dto.LoginLogCreateReqDTO; +import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum; +import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum; +import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO; import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.Import; @@ -41,20 +39,20 @@ public class LoginLogServiceImplTest extends BaseDbUnitTest { // æž„é€ æµ‹è¯•æ•°æ® // 登录æˆåŠŸçš„ SysLoginLogDO loginLogDO = RandomUtils.randomPojo(SysLoginLogDO.class, logDO -> { - logDO.setLogType(RandomUtil.randomEle(LoginLogTypeEnum.values()).getType()); + logDO.setLogType(RandomUtil.randomEle(cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum.values()).getType()); logDO.setTraceId(TracerUtils.getTraceId()); logDO.setUserType(RandomUtil.randomEle(UserTypeEnum.values()).getValue()); logDO.setUserIp("192.168.199.16"); logDO.setUsername("wangkai"); logDO.setCreateTime(buildTime(2021, 3, 6)); - logDO.setResult(LoginResultEnum.SUCCESS.getResult()); + logDO.setResult(cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum.SUCCESS.getResult()); }); loginLogMapper.insert(loginLogDO); // 下é¢å‡ ä¸ªéƒ½æ˜¯ä¸åŒ¹é…çš„æ•°æ® // 登录失败的 - loginLogMapper.insert(ObjectUtils.cloneIgnoreId(loginLogDO, logDO -> logDO.setResult(LoginResultEnum.CAPTCHA_CODE_ERROR.getResult()))); + loginLogMapper.insert(ObjectUtils.cloneIgnoreId(loginLogDO, logDO -> logDO.setResult(cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum.CAPTCHA_CODE_ERROR.getResult()))); // ä¸åŒip段的 loginLogMapper.insert(ObjectUtils.cloneIgnoreId(loginLogDO, logDO -> logDO.setUserIp("192.168.128.18"))); // ä¸åŒusername @@ -86,20 +84,20 @@ public class LoginLogServiceImplTest extends BaseDbUnitTest { // 登录æˆåŠŸçš„ SysLoginLogDO loginLogDO = RandomUtils.randomPojo(SysLoginLogDO.class, logDO -> { - logDO.setLogType(RandomUtil.randomEle(LoginLogTypeEnum.values()).getType()); + logDO.setLogType(RandomUtil.randomEle(cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum.values()).getType()); logDO.setTraceId(TracerUtils.getTraceId()); logDO.setUserType(RandomUtil.randomEle(UserTypeEnum.values()).getValue()); logDO.setUserIp("192.168.111.16"); logDO.setUsername("wangxiaokai"); logDO.setCreateTime(buildTime(2021, 3, 6)); - logDO.setResult(LoginResultEnum.SUCCESS.getResult()); + logDO.setResult(cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum.SUCCESS.getResult()); }); loginLogMapper.insert(loginLogDO); // 下é¢å‡ ä¸ªéƒ½æ˜¯ä¸åŒ¹é…çš„æ•°æ® // 登录失败的 - loginLogMapper.insert(ObjectUtils.cloneIgnoreId(loginLogDO, logDO -> logDO.setResult(LoginResultEnum.CAPTCHA_CODE_ERROR.getResult()))); + loginLogMapper.insert(ObjectUtils.cloneIgnoreId(loginLogDO, logDO -> logDO.setResult(cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum.CAPTCHA_CODE_ERROR.getResult()))); // ä¸åŒip段的 loginLogMapper.insert(ObjectUtils.cloneIgnoreId(loginLogDO, logDO -> logDO.setUserIp("192.168.128.18"))); // ä¸åŒusername @@ -130,8 +128,8 @@ public class LoginLogServiceImplTest extends BaseDbUnitTest { LoginLogCreateReqDTO reqDTO = RandomUtils.randomPojo(LoginLogCreateReqDTO.class, vo -> { // æŒ‡å®šéšæœºçš„范围,é¿å…超出范围入库失败 vo.setUserType(randomEle(UserTypeEnum.values()).getValue()); - vo.setLogType(randomEle(SysLoginLogTypeEnum.values()).getType()); - vo.setResult(randomEle(SysLoginResultEnum.values()).getResult()); + vo.setLogType(randomEle(LoginLogTypeEnum.values()).getType()); + vo.setResult(randomEle(LoginResultEnum.values()).getResult()); vo.setTraceId(TracerUtils.getTraceId()); }); diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImplTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImplTest.java index 2c9c2369ad..feebc7145b 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImplTest.java @@ -4,9 +4,9 @@ import cn.hutool.core.map.MapUtil; import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.dal.mysql.logger.OperateLogMapper; -import cn.iocoder.yudao.module.system.service.user.UserService; -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; +import cn.iocoder.yudao.module.system.service.user.AdminUserService; import cn.iocoder.yudao.module.system.enums.common.SysSexEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants; @@ -43,7 +43,7 @@ public class OperateLogServiceImplTest extends BaseDbUnitTest { private OperateLogMapper operateLogMapper; @MockBean - private UserService userService; + private AdminUserService userService; @Test public void testCreateOperateLogAsync() throws InterruptedException, ExecutionException { @@ -66,7 +66,7 @@ public class OperateLogServiceImplTest extends BaseDbUnitTest { public void testGetOperateLogPage() { // æž„é€ æµ‹è¯•æ•°æ® // 先构造用户 - UserDO user = RandomUtils.randomPojo(UserDO.class, o -> { + AdminUserDO user = RandomUtils.randomPojo(AdminUserDO.class, o -> { o.setNickname("wangkai"); o.setSex(SysSexEnum.MALE.getSex()); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); @@ -117,7 +117,7 @@ public class OperateLogServiceImplTest extends BaseDbUnitTest { public void testGetOperateLogs() { // æž„é€ æµ‹è¯•æ•°æ® // 先构造用户 - UserDO user = RandomUtils.randomPojo(UserDO.class, o -> { + AdminUserDO user = RandomUtils.randomPojo(AdminUserDO.class, o -> { o.setNickname("wangkai"); o.setSex(SysSexEnum.MALE.getSex()); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceTest.java index 5b2b343830..5c777eda7d 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceTest.java @@ -7,7 +7,7 @@ import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuCr import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuListReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuUpdateReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; -import cn.iocoder.yudao.module.system.dal.mysql.permission.SysMenuMapper; +import cn.iocoder.yudao.module.system.dal.mysql.permission.MenuMapper; import cn.iocoder.yudao.module.system.enums.permission.MenuTypeEnum; import cn.iocoder.yudao.module.system.mq.producer.permission.MenuProducer; import cn.iocoder.yudao.framework.common.util.spring.SpringAopUtils; @@ -41,7 +41,7 @@ public class MenuServiceTest extends BaseDbUnitTest { private MenuProducer sysMenuProducer; @Resource - private SysMenuMapper menuMapper; + private MenuMapper menuMapper; @Test public void testInitLocalCache_success() throws Exception { diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceTest.java index 9ff7d5d4cd..dc915e3079 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceTest.java @@ -2,11 +2,11 @@ package cn.iocoder.yudao.module.system.service.permission; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleMenuDO; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysUserRoleDO; -import cn.iocoder.yudao.module.system.dal.mysql.permission.SysRoleMenuMapper; -import cn.iocoder.yudao.module.system.dal.mysql.permission.SysUserRoleMapper; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.UserRoleDO; +import cn.iocoder.yudao.module.system.dal.mysql.permission.RoleMenuMapper; +import cn.iocoder.yudao.module.system.dal.mysql.permission.UserRoleMapper; import cn.iocoder.yudao.module.system.mq.producer.permission.PermissionProducer; import cn.iocoder.yudao.module.system.service.dept.DeptService; import cn.iocoder.yudao.framework.datapermission.core.dept.service.dto.DeptDataPermissionRespDTO; @@ -37,9 +37,9 @@ public class PermissionServiceTest extends BaseDbUnitTest { private PermissionServiceImpl permissionService; @Resource - private SysRoleMenuMapper roleMenuMapper; + private RoleMenuMapper roleMenuMapper; @Resource - private SysUserRoleMapper userRoleMapper; + private UserRoleMapper userRoleMapper; @MockBean private RoleService roleService; @@ -56,9 +56,9 @@ public class PermissionServiceTest extends BaseDbUnitTest { // 准备傿•° Long roleId = randomLongId(); // mock æ•°æ® UserRole - SysUserRoleDO userRoleDO01 = randomPojo(SysUserRoleDO.class, o -> o.setRoleId(roleId)); // 被删除 + UserRoleDO userRoleDO01 = randomPojo(UserRoleDO.class, o -> o.setRoleId(roleId)); // 被删除 userRoleMapper.insert(userRoleDO01); - SysUserRoleDO userRoleDO02 = randomPojo(SysUserRoleDO.class); // ä¸è¢«åˆ é™¤ + UserRoleDO userRoleDO02 = randomPojo(UserRoleDO.class); // ä¸è¢«åˆ é™¤ userRoleMapper.insert(userRoleDO02); // mock æ•°æ® RoleMenu RoleMenuDO roleMenuDO01 = randomPojo(RoleMenuDO.class, o -> o.setRoleId(roleId)); // 被删除 @@ -73,7 +73,7 @@ public class PermissionServiceTest extends BaseDbUnitTest { assertEquals(1, dbRoleMenus.size()); assertPojoEquals(dbRoleMenus.get(0), roleMenuDO02); // æ–­è¨€æ•°æ® UserRoleDO - List dbUserRoles = userRoleMapper.selectList(); + List dbUserRoles = userRoleMapper.selectList(); assertEquals(1, dbUserRoles.size()); assertPojoEquals(dbUserRoles.get(0), userRoleDO02); // 断言调用 @@ -105,15 +105,15 @@ public class PermissionServiceTest extends BaseDbUnitTest { // 准备傿•° Long userId = randomLongId(); // mock æ•°æ® - SysUserRoleDO userRoleDO01 = randomPojo(SysUserRoleDO.class, o -> o.setUserId(userId)); // 被删除 + UserRoleDO userRoleDO01 = randomPojo(UserRoleDO.class, o -> o.setUserId(userId)); // 被删除 userRoleMapper.insert(userRoleDO01); - SysUserRoleDO userRoleDO02 = randomPojo(SysUserRoleDO.class); // ä¸è¢«åˆ é™¤ + UserRoleDO userRoleDO02 = randomPojo(UserRoleDO.class); // ä¸è¢«åˆ é™¤ userRoleMapper.insert(userRoleDO02); // 调用 permissionService.processUserDeleted(userId); // æ–­è¨€æ•°æ® - List dbUserRoles = userRoleMapper.selectList(); + List dbUserRoles = userRoleMapper.selectList(); assertEquals(1, dbUserRoles.size()); assertPojoEquals(dbUserRoles.get(0), userRoleDO02); } @@ -137,7 +137,7 @@ public class PermissionServiceTest extends BaseDbUnitTest { // 准备傿•° LoginUser loginUser = randomPojo(LoginUser.class); // mock 方法 - SysRoleDO roleDO = randomPojo(SysRoleDO.class, o -> o.setDataScope(DataScopeEnum.ALL.getScope())); + RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setDataScope(DataScopeEnum.ALL.getScope())); when(roleService.getRolesFromCache(same(loginUser.getRoleIds()))).thenReturn(singletonList(roleDO)); // 调用 @@ -154,7 +154,7 @@ public class PermissionServiceTest extends BaseDbUnitTest { // 准备傿•° LoginUser loginUser = randomPojo(LoginUser.class); // mock 方法 - SysRoleDO roleDO = randomPojo(SysRoleDO.class, o -> o.setDataScope(DataScopeEnum.DEPT_CUSTOM.getScope())); + RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setDataScope(DataScopeEnum.DEPT_CUSTOM.getScope())); when(roleService.getRolesFromCache(same(loginUser.getRoleIds()))).thenReturn(singletonList(roleDO)); // 调用 @@ -173,7 +173,7 @@ public class PermissionServiceTest extends BaseDbUnitTest { // 准备傿•° LoginUser loginUser = randomPojo(LoginUser.class); // mock 方法 - SysRoleDO roleDO = randomPojo(SysRoleDO.class, o -> o.setDataScope(DataScopeEnum.DEPT_ONLY.getScope())); + RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setDataScope(DataScopeEnum.DEPT_ONLY.getScope())); when(roleService.getRolesFromCache(same(loginUser.getRoleIds()))).thenReturn(singletonList(roleDO)); // 调用 @@ -191,7 +191,7 @@ public class PermissionServiceTest extends BaseDbUnitTest { // 准备傿•° LoginUser loginUser = randomPojo(LoginUser.class); // mock 方法(角色) - SysRoleDO roleDO = randomPojo(SysRoleDO.class, o -> o.setDataScope(DataScopeEnum.DEPT_AND_CHILD.getScope())); + RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setDataScope(DataScopeEnum.DEPT_AND_CHILD.getScope())); when(roleService.getRolesFromCache(same(loginUser.getRoleIds()))).thenReturn(singletonList(roleDO)); // mock 方法(部门) SysDeptDO deptDO = randomPojo(SysDeptDO.class); @@ -213,7 +213,7 @@ public class PermissionServiceTest extends BaseDbUnitTest { // 准备傿•° LoginUser loginUser = randomPojo(LoginUser.class); // mock 方法 - SysRoleDO roleDO = randomPojo(SysRoleDO.class, o -> o.setDataScope(DataScopeEnum.SELF.getScope())); + RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setDataScope(DataScopeEnum.SELF.getScope())); when(roleService.getRolesFromCache(same(loginUser.getRoleIds()))).thenReturn(singletonList(roleDO)); // 调用 diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceTest.java index 5c8475dfd6..e607cd7251 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceTest.java @@ -7,8 +7,8 @@ import cn.iocoder.yudao.framework.security.core.enums.DataScopeEnum; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleCreateReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO; -import cn.iocoder.yudao.module.system.dal.mysql.permission.SysRoleMapper; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; +import cn.iocoder.yudao.module.system.dal.mysql.permission.RoleMapper; import cn.iocoder.yudao.module.system.enums.permission.RoleTypeEnum; import cn.iocoder.yudao.module.system.mq.producer.permission.RoleProducer; import cn.iocoder.yudao.framework.common.util.spring.SpringAopUtils; @@ -36,7 +36,7 @@ public class RoleServiceTest extends BaseDbUnitTest { private RoleServiceImpl sysRoleService; @Resource - private SysRoleMapper roleMapper; + private RoleMapper roleMapper; @MockBean private PermissionService sysPermissionService; @@ -46,9 +46,9 @@ public class RoleServiceTest extends BaseDbUnitTest { @Test public void testInitLocalCache_success() throws Exception { - SysRoleDO roleDO1 = createRoleDO("role1", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL); + RoleDO roleDO1 = createRoleDO("role1", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL); roleMapper.insert(roleDO1); - SysRoleDO roleDO2 = createRoleDO("role2", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL); + RoleDO roleDO2 = createRoleDO("role2", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL); roleMapper.insert(roleDO2); //调用 @@ -58,7 +58,7 @@ public class RoleServiceTest extends BaseDbUnitTest { //获å–代ç†å¯¹è±¡ RoleServiceImpl target = (RoleServiceImpl) SpringAopUtils.getTarget(sysRoleService); - Map roleCache = (Map) BeanUtil.getFieldValue(target, "roleCache"); + Map roleCache = (Map) BeanUtil.getFieldValue(target, "roleCache"); assertPojoEquals(roleDO1, roleCache.get(roleDO1.getId())); assertPojoEquals(roleDO2, roleCache.get(roleDO2.getId())); @@ -79,7 +79,7 @@ public class RoleServiceTest extends BaseDbUnitTest { //断言 assertNotNull(roleId); - SysRoleDO roleDO = roleMapper.selectById(roleId); + RoleDO roleDO = roleMapper.selectById(roleId); assertPojoEquals(reqVO, roleDO); verify(sysRoleProducer).sendRoleRefreshMessage(); @@ -87,7 +87,7 @@ public class RoleServiceTest extends BaseDbUnitTest { @Test public void testUpdateRole_success() { - SysRoleDO roleDO = createRoleDO("role_name", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL); + RoleDO roleDO = createRoleDO("role_name", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL); roleMapper.insert(roleDO); Long roleId = roleDO.getId(); @@ -102,7 +102,7 @@ public class RoleServiceTest extends BaseDbUnitTest { sysRoleService.updateRole(reqVO); //断言 - SysRoleDO newRoleDO = roleMapper.selectById(roleId); + RoleDO newRoleDO = roleMapper.selectById(roleId); assertPojoEquals(reqVO, newRoleDO); verify(sysRoleProducer).sendRoleRefreshMessage(); @@ -110,7 +110,7 @@ public class RoleServiceTest extends BaseDbUnitTest { @Test public void testUpdateRoleStatus_success() { - SysRoleDO roleDO = createRoleDO("role_name", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL, CommonStatusEnum.ENABLE.getStatus()); + RoleDO roleDO = createRoleDO("role_name", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL, CommonStatusEnum.ENABLE.getStatus()); roleMapper.insert(roleDO); Long roleId = roleDO.getId(); @@ -118,7 +118,7 @@ public class RoleServiceTest extends BaseDbUnitTest { sysRoleService.updateRoleStatus(roleId, CommonStatusEnum.DISABLE.getStatus()); //断言 - SysRoleDO newRoleDO = roleMapper.selectById(roleId); + RoleDO newRoleDO = roleMapper.selectById(roleId); assertEquals(CommonStatusEnum.DISABLE.getStatus(), newRoleDO.getStatus()); verify(sysRoleProducer).sendRoleRefreshMessage(); @@ -126,7 +126,7 @@ public class RoleServiceTest extends BaseDbUnitTest { @Test public void testUpdateRoleDataScope_success() { - SysRoleDO roleDO = createRoleDO("role_name", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL); + RoleDO roleDO = createRoleDO("role_name", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL); roleMapper.insert(roleDO); Long roleId = roleDO.getId(); @@ -135,7 +135,7 @@ public class RoleServiceTest extends BaseDbUnitTest { sysRoleService.updateRoleDataScope(roleId, DataScopeEnum.DEPT_CUSTOM.getScope(), deptIdSet); //断言 - SysRoleDO newRoleDO = roleMapper.selectById(roleId); + RoleDO newRoleDO = roleMapper.selectById(roleId); assertEquals(DataScopeEnum.DEPT_CUSTOM.getScope(), newRoleDO.getDataScope()); Set newDeptIdSet = newRoleDO.getDataScopeDeptIds(); @@ -147,7 +147,7 @@ public class RoleServiceTest extends BaseDbUnitTest { @Test public void testDeleteRole_success() { - SysRoleDO roleDO = createRoleDO("role_name", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL); + RoleDO roleDO = createRoleDO("role_name", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL); roleMapper.insert(roleDO); Long roleId = roleDO.getId(); @@ -155,7 +155,7 @@ public class RoleServiceTest extends BaseDbUnitTest { sysRoleService.deleteRole(roleId); //断言 - SysRoleDO newRoleDO = roleMapper.selectById(roleId); + RoleDO newRoleDO = roleMapper.selectById(roleId); assertNull(newRoleDO); verify(sysRoleProducer).sendRoleRefreshMessage(); @@ -163,22 +163,22 @@ public class RoleServiceTest extends BaseDbUnitTest { @Test public void testGetRoles_success() { - Map idRoleMap = new HashMap<>(); + Map idRoleMap = new HashMap<>(); // éªŒè¯æŸ¥è¯¢çжæ€ä¸º1的角色 - SysRoleDO roleDO1 = createRoleDO("role1", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 1); + RoleDO roleDO1 = createRoleDO("role1", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 1); roleMapper.insert(roleDO1); idRoleMap.put(roleDO1.getId(), roleDO1); - SysRoleDO roleDO2 = createRoleDO("role2", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 1); + RoleDO roleDO2 = createRoleDO("role2", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 1); roleMapper.insert(roleDO2); idRoleMap.put(roleDO2.getId(), roleDO2); // 以下是排除的角色 - SysRoleDO roleDO3 = createRoleDO("role3", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 2); + RoleDO roleDO3 = createRoleDO("role3", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 2); roleMapper.insert(roleDO3); //调用 - List roles = sysRoleService.getRoles(Arrays.asList(1)); + List roles = sysRoleService.getRoles(Arrays.asList(1)); //断言 assertEquals(2, roles.size()); @@ -188,10 +188,10 @@ public class RoleServiceTest extends BaseDbUnitTest { @Test public void testGetRolePage_success() { - Map idRoleMap = new HashMap<>(); + Map idRoleMap = new HashMap<>(); // 验è¯å称包å«"role", 状æ€ä¸º1,code为"code"的角色 // 第一页 - SysRoleDO roleDO = createRoleDO("role1", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 1, "code"); + RoleDO roleDO = createRoleDO("role1", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 1, "code"); roleMapper.insert(roleDO); idRoleMap.put(roleDO.getId(), roleDO); // 第二页 @@ -214,7 +214,7 @@ public class RoleServiceTest extends BaseDbUnitTest { o.setBeginTime(null); o.setEndTime(null); }); - PageResult result = sysRoleService.getRolePage(reqVO); + PageResult result = sysRoleService.getRolePage(reqVO); assertEquals(2, result.getTotal()); result.getList().stream().forEach(r -> assertPojoEquals(idRoleMap.get(r.getId()), r)); } @@ -226,7 +226,7 @@ public class RoleServiceTest extends BaseDbUnitTest { @Test public void testCheckDuplicateRole_nameDuplicate() { - SysRoleDO roleDO = createRoleDO("role_name", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL); + RoleDO roleDO = createRoleDO("role_name", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL); roleMapper.insert(roleDO); String duplicateName = "role_name"; @@ -236,7 +236,7 @@ public class RoleServiceTest extends BaseDbUnitTest { @Test public void testCheckDuplicateRole_codeDuplicate() { - SysRoleDO roleDO = randomPojo(SysRoleDO.class, o -> { + RoleDO roleDO = randomPojo(RoleDO.class, o -> { o.setName("role_999"); o.setCode("code"); o.setType(RoleTypeEnum.CUSTOM.getType()); @@ -253,7 +253,7 @@ public class RoleServiceTest extends BaseDbUnitTest { @Test public void testCheckUpdateRole_success() { - SysRoleDO roleDO = createRoleDO("role_name", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL); + RoleDO roleDO = createRoleDO("role_name", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL); roleMapper.insert(roleDO); Long roleId = roleDO.getId(); @@ -267,27 +267,27 @@ public class RoleServiceTest extends BaseDbUnitTest { @Test public void testCheckUpdateRole_systemRoleCanNotBeUpdate() { - SysRoleDO roleDO = createRoleDO("role_name", RoleTypeEnum.SYSTEM, DataScopeEnum.ALL); + RoleDO roleDO = createRoleDO("role_name", RoleTypeEnum.SYSTEM, DataScopeEnum.ALL); roleMapper.insert(roleDO); Long roleId = roleDO.getId(); assertServiceException(() -> sysRoleService.checkUpdateRole(roleId), ROLE_CAN_NOT_UPDATE_SYSTEM_TYPE_ROLE); } - private SysRoleDO createRoleDO(String name, RoleTypeEnum typeEnum, DataScopeEnum scopeEnum, Integer status) { + private RoleDO createRoleDO(String name, RoleTypeEnum typeEnum, DataScopeEnum scopeEnum, Integer status) { return createRoleDO( name, typeEnum, scopeEnum, status, randomString()); } - private SysRoleDO createRoleDO(String name, RoleTypeEnum typeEnum, DataScopeEnum scopeEnum, Integer status, String code) { + private RoleDO createRoleDO(String name, RoleTypeEnum typeEnum, DataScopeEnum scopeEnum, Integer status, String code) { return createRoleDO(null, name, typeEnum, scopeEnum, status, code); } - private SysRoleDO createRoleDO(String name, RoleTypeEnum typeEnum, DataScopeEnum scopeEnum) { + private RoleDO createRoleDO(String name, RoleTypeEnum typeEnum, DataScopeEnum scopeEnum) { return createRoleDO(null, name, typeEnum, scopeEnum, randomCommonStatus(), randomString()); } - private SysRoleDO createRoleDO(Long id, String name, RoleTypeEnum typeEnum, DataScopeEnum scopeEnum, Integer status, String code) { - SysRoleDO roleDO = randomPojo(SysRoleDO.class, o -> { + private RoleDO createRoleDO(Long id, String name, RoleTypeEnum typeEnum, DataScopeEnum scopeEnum, Integer status, String code) { + RoleDO roleDO = randomPojo(RoleDO.class, o -> { o.setId(id); o.setName(name); o.setType(typeEnum.getType()); diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceTest.java index 1233b2a76d..d255cbf742 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceTest.java @@ -4,7 +4,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelCreateReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.mysql.sms.SysSmsChannelMapper; +import cn.iocoder.yudao.module.system.dal.mysql.sms.SmsChannelMapper; import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer; import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsChannelDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; @@ -39,7 +39,7 @@ public class SmsChannelServiceTest extends BaseDbUnitTest { private SmsChannelServiceImpl smsChannelService; @Resource - private SysSmsChannelMapper smsChannelMapper; + private SmsChannelMapper smsChannelMapper; @MockBean private SmsClientFactory smsClientFactory; diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceTest.java index e06b9b0f4f..7b0b0918f5 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceTest.java @@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogPageReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; -import cn.iocoder.yudao.module.system.dal.mysql.sms.SysSmsLogMapper; +import cn.iocoder.yudao.module.system.dal.mysql.sms.SmsLogMapper; import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsLogDO; import cn.iocoder.yudao.module.system.enums.sms.SysSmsReceiveStatusEnum; import cn.iocoder.yudao.module.system.enums.sms.SysSmsSendStatusEnum; @@ -39,7 +39,7 @@ public class SmsLogServiceTest extends BaseDbUnitTest { private SmsLogServiceImpl smsLogService; @Resource - private SysSmsLogMapper smsLogMapper; + private SmsLogMapper smsLogMapper; @Test public void testGetSmsLogPage() { diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceTest.java index bd1ca2c58d..3025b8d642 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceTest.java @@ -4,7 +4,7 @@ import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTempla import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplatePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.mysql.sms.SysSmsTemplateMapper; +import cn.iocoder.yudao.module.system.dal.mysql.sms.SmsTemplateMapper; import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer; import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsChannelDO; import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; @@ -49,7 +49,7 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest { private SmsTemplateServiceImpl smsTemplateService; @Resource - private SysSmsTemplateMapper smsTemplateMapper; + private SmsTemplateMapper smsTemplateMapper; @MockBean private SmsChannelService smsChannelService; diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsSendServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsSendServiceTest.java index 8cbe9b34ec..0bd82475ff 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsSendServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsSendServiceTest.java @@ -23,9 +23,9 @@ import java.util.List; import java.util.Map; import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.*; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; @@ -33,7 +33,7 @@ import static org.mockito.Mockito.*; public class SysSmsSendServiceTest extends BaseMockitoUnitTest { @InjectMocks - private SysSmsSendServiceImpl smsService; + private SmsSendServiceImpl smsService; @Mock private SmsTemplateService smsTemplateService; diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialUsererviceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceTest.java similarity index 91% rename from yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialUsererviceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceTest.java index dc6d3a2d04..a67da17f2f 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialUsererviceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceTest.java @@ -23,7 +23,7 @@ import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; import static org.junit.jupiter.api.Assertions.assertEquals; @Import({SocialUserServiceImpl.class, SocialAuthUserRedisDAO.class}) -public class SocialUsererviceTest extends BaseDbAndRedisUnitTest { +public class SocialUserServiceTest extends BaseDbAndRedisUnitTest { @Resource private SocialUserServiceImpl socialService; @@ -47,7 +47,7 @@ public class SocialUsererviceTest extends BaseDbAndRedisUnitTest { // mock 方法 // 调用 - socialService.bindSocialUser(userId, type, authUser, UserTypeEnum.ADMIN); + socialService.bindSocialUser(userId, UserTypeEnum.ADMIN.getValue(), type, authUser); // 断言 List socialUsers = socialUserMapper.selectList("user_id", userId); assertEquals(1, socialUsers.size()); @@ -72,7 +72,7 @@ public class SocialUsererviceTest extends BaseDbAndRedisUnitTest { // mock 方法 // 调用 - socialService.bindSocialUser(userId, type, authUser, UserTypeEnum.ADMIN); + socialService.bindSocialUser(userId, UserTypeEnum.ADMIN.getValue(), type, authUser); // 断言 List socialUsers = socialUserMapper.selectList("user_id", userId); assertEquals(1, socialUsers.size()); @@ -97,7 +97,7 @@ public class SocialUsererviceTest extends BaseDbAndRedisUnitTest { // mock 方法 // 调用 - socialService.bindSocialUser(userId, type, authUser, UserTypeEnum.ADMIN); + socialService.bindSocialUser(userId, UserTypeEnum.ADMIN.getValue(), type, authUser); // 断言 List socialUsers = socialUserMapper.selectList("user_id", userId); assertEquals(1, socialUsers.size()); @@ -134,7 +134,7 @@ public class SocialUsererviceTest extends BaseDbAndRedisUnitTest { String newUnionId = oldSocialUser.getUnionId(); // 调用 - socialService.unbindOldSocialUser(userId, type, newUnionId, UserTypeEnum.ADMIN); + socialService.unbindOldSocialUser(userId, UserTypeEnum.ADMIN.getValue(), type, newUnionId); // 断言 assertEquals(1L, socialUserMapper.selectCount(null).longValue()); } @@ -157,7 +157,7 @@ public class SocialUsererviceTest extends BaseDbAndRedisUnitTest { String newUnionId = randomString(10); // 调用 - socialService.unbindOldSocialUser(userId, type, newUnionId, UserTypeEnum.ADMIN); + socialService.unbindOldSocialUser(userId, UserTypeEnum.ADMIN.getValue(), type, newUnionId); // 断言 assertEquals(0L, socialUserMapper.selectCount(null).longValue()); } diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/user/UserServiceImplTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/user/UserServiceImplTest.java index 0667193f99..c96f9c44c8 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/user/UserServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/user/UserServiceImplTest.java @@ -1,25 +1,23 @@ package cn.iocoder.yudao.module.system.service.user; -import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.RandomUtil; -import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; -import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; -import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; -import cn.iocoder.yudao.module.system.dal.mysql.user.UserMapper; -import cn.iocoder.yudao.module.system.service.dept.DeptService; -import cn.iocoder.yudao.module.system.service.dept.PostService; -import cn.iocoder.yudao.module.system.service.permission.PermissionService; import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO; -import cn.iocoder.yudao.module.system.enums.common.SysSexEnum; -import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; +import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper; +import cn.iocoder.yudao.module.system.enums.common.SysSexEnum; +import cn.iocoder.yudao.module.system.service.dept.DeptService; +import cn.iocoder.yudao.module.system.service.dept.PostService; +import cn.iocoder.yudao.module.system.service.permission.PermissionService; import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; import org.junit.jupiter.api.Test; import org.mockito.stubbing.Answer; @@ -29,36 +27,34 @@ import org.springframework.security.crypto.password.PasswordEncoder; import javax.annotation.Resource; import java.io.ByteArrayInputStream; -import java.util.*; +import java.util.List; import java.util.function.Consumer; import static cn.hutool.core.util.RandomUtil.randomBytes; import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static org.assertj.core.util.Lists.newArrayList; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; -@Import(UserServiceImpl.class) +@Import(AdminUserServiceImpl.class) public class UserServiceImplTest extends BaseDbUnitTest { @Resource - private UserServiceImpl userService; + private AdminUserServiceImpl userService; @Resource - private UserMapper userMapper; + private AdminUserMapper userMapper; @MockBean private DeptService deptService; - @MockBean - private SysDeptCoreService deptCoreService; @MockBean private PostService postService; @MockBean @@ -80,7 +76,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { o.setId(reqVO.getDeptId()); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); }); - when(deptCoreService.getDept(eq(dept.getId()))).thenReturn(dept); + when(deptService.getDept(eq(dept.getId()))).thenReturn(dept); // mock postService 的方法 List posts = CollectionUtils.convertList(reqVO.getPostIds(), postId -> randomPojo(SysPostDO.class, o -> { @@ -94,7 +90,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { // 调用 Long userId = userService.createUser(reqVO); // 断言 - UserDO user = userMapper.selectById(userId); + AdminUserDO user = userMapper.selectById(userId); assertPojoEquals(reqVO, user, "password"); assertEquals("yudaoyuanma", user.getPassword()); assertEquals(CommonStatusEnum.ENABLE.getStatus(), user.getStatus()); @@ -103,7 +99,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { @Test public void testUpdateUser_success() { // mock æ•°æ® - UserDO dbUser = randomSysUserDO(); + AdminUserDO dbUser = randomSysUserDO(); userMapper.insert(dbUser); // 准备傿•° UserUpdateReqVO reqVO = randomPojo(UserUpdateReqVO.class, o -> { @@ -116,7 +112,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { o.setId(reqVO.getDeptId()); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); }); - when(deptCoreService.getDept(eq(dept.getId()))).thenReturn(dept); + when(deptService.getDept(eq(dept.getId()))).thenReturn(dept); // mock postService 的方法 List posts = CollectionUtils.convertList(reqVO.getPostIds(), postId -> randomPojo(SysPostDO.class, o -> { @@ -128,14 +124,14 @@ public class UserServiceImplTest extends BaseDbUnitTest { // 调用 userService.updateUser(reqVO); // 断言 - UserDO user = userMapper.selectById(reqVO.getId()); + AdminUserDO user = userMapper.selectById(reqVO.getId()); assertPojoEquals(reqVO, user); } @Test public void testUpdateUserProfile_success() { // mock æ•°æ® - UserDO dbUser = randomSysUserDO(); + AdminUserDO dbUser = randomSysUserDO(); userMapper.insert(dbUser); // 准备傿•° Long userId = dbUser.getId(); @@ -147,14 +143,14 @@ public class UserServiceImplTest extends BaseDbUnitTest { // 调用 userService.updateUserProfile(userId, reqVO); // 断言 - UserDO user = userMapper.selectById(userId); + AdminUserDO user = userMapper.selectById(userId); assertPojoEquals(reqVO, user); } @Test public void testUpdateUserPassword_success() { // mock æ•°æ® - UserDO dbUser = randomSysUserDO(o -> o.setPassword("encode:yudao")); + AdminUserDO dbUser = randomSysUserDO(o -> o.setPassword("encode:yudao")); userMapper.insert(dbUser); // 准备傿•° Long userId = dbUser.getId(); @@ -170,14 +166,14 @@ public class UserServiceImplTest extends BaseDbUnitTest { // 调用 userService.updateUserPassword(userId, reqVO); // 断言 - UserDO user = userMapper.selectById(userId); + AdminUserDO user = userMapper.selectById(userId); assertEquals("encode:yuanma", user.getPassword()); } @Test public void testUpdateUserAvatar_success() { // mock æ•°æ® - UserDO dbUser = randomSysUserDO(); + AdminUserDO dbUser = randomSysUserDO(); userMapper.insert(dbUser); // 准备傿•° Long userId = dbUser.getId(); @@ -190,14 +186,14 @@ public class UserServiceImplTest extends BaseDbUnitTest { // 调用 userService.updateUserAvatar(userId, avatarFile); // 断言 - UserDO user = userMapper.selectById(userId); + AdminUserDO user = userMapper.selectById(userId); assertEquals(avatar, user.getAvatar()); } @Test public void testUpdateUserPassword02_success() { // mock æ•°æ® - UserDO dbUser = randomSysUserDO(); + AdminUserDO dbUser = randomSysUserDO(); userMapper.insert(dbUser); // 准备傿•° Long userId = dbUser.getId(); @@ -209,14 +205,14 @@ public class UserServiceImplTest extends BaseDbUnitTest { // 调用 userService.updateUserPassword(userId, password); // 断言 - UserDO user = userMapper.selectById(userId); + AdminUserDO user = userMapper.selectById(userId); assertEquals("encode:" + password, user.getPassword()); } @Test public void testUpdateUserStatus() { // mock æ•°æ® - UserDO dbUser = randomSysUserDO(); + AdminUserDO dbUser = randomSysUserDO(); userMapper.insert(dbUser); // 准备傿•° Long userId = dbUser.getId(); @@ -225,14 +221,14 @@ public class UserServiceImplTest extends BaseDbUnitTest { // 调用 userService.updateUserStatus(userId, status); // 断言 - UserDO user = userMapper.selectById(userId); + AdminUserDO user = userMapper.selectById(userId); assertEquals(status, user.getStatus()); } @Test public void testDeleteUser_success(){ // mock æ•°æ® - UserDO dbUser = randomSysUserDO(); + AdminUserDO dbUser = randomSysUserDO(); userMapper.insert(dbUser); // 准备傿•° Long userId = dbUser.getId(); @@ -248,7 +244,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { @Test public void testGetUserPage() { // mock æ•°æ® - UserDO dbUser = initGetUserPageData(); + AdminUserDO dbUser = initGetUserPageData(); // 准备傿•° UserPageReqVO reqVO = new UserPageReqVO(); reqVO.setUsername("yudao"); @@ -262,7 +258,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { when(deptService.getDeptsByParentIdFromCache(eq(reqVO.getDeptId()), eq(true))).thenReturn(deptList); // 调用 - PageResult pageResult = userService.getUserPage(reqVO); + PageResult pageResult = userService.getUserPage(reqVO); // 断言 assertEquals(1, pageResult.getTotal()); assertEquals(1, pageResult.getList().size()); @@ -272,7 +268,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { @Test public void testGetUsers() { // mock æ•°æ® - UserDO dbUser = initGetUserPageData(); + AdminUserDO dbUser = initGetUserPageData(); // 准备傿•° UserExportReqVO reqVO = new UserExportReqVO(); reqVO.setUsername("yudao"); @@ -286,7 +282,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { when(deptService.getDeptsByParentIdFromCache(eq(reqVO.getDeptId()), eq(true))).thenReturn(deptList); // 调用 - List list = userService.getUsers(reqVO); + List list = userService.getUsers(reqVO); // 断言 assertEquals(1, list.size()); assertPojoEquals(dbUser, list.get(0)); @@ -295,9 +291,9 @@ public class UserServiceImplTest extends BaseDbUnitTest { /** * åˆå§‹åŒ– getUserPage æ–¹æ³•çš„æµ‹è¯•æ•°æ® */ - private UserDO initGetUserPageData() { + private AdminUserDO initGetUserPageData() { // mock æ•°æ® - UserDO dbUser = randomSysUserDO(o -> { // 等会查询到 + AdminUserDO dbUser = randomSysUserDO(o -> { // 等会查询到 o.setUsername("yudaoyuanma"); o.setMobile("15601691300"); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); @@ -351,7 +347,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { o.setId(importUser.getDeptId()); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); }); - when(deptCoreService.getDept(eq(dept.getId()))).thenReturn(dept); + when(deptService.getDept(eq(dept.getId()))).thenReturn(dept); // mock passwordEncoder 的方法 when(passwordEncoder.encode(eq("yudaoyuanma"))).thenReturn("java"); @@ -359,7 +355,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { UserImportRespVO respVO = userService.importUsers(newArrayList(importUser), true); // 断言 assertEquals(1, respVO.getCreateUsernames().size()); - UserDO user = userMapper.selectByUsername(respVO.getCreateUsernames().get(0)); + AdminUserDO user = userMapper.selectByUsername(respVO.getCreateUsernames().get(0)); assertPojoEquals(importUser, user); assertEquals("java", user.getPassword()); assertEquals(0, respVO.getUpdateUsernames().size()); @@ -372,7 +368,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { @Test public void testImportUsers_03() { // mock æ•°æ® - UserDO dbUser = randomSysUserDO(); + AdminUserDO dbUser = randomSysUserDO(); userMapper.insert(dbUser); // 准备傿•° UserImportExcelVO importUser = randomPojo(UserImportExcelVO.class, o -> { @@ -385,7 +381,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { o.setId(importUser.getDeptId()); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); }); - when(deptCoreService.getDept(eq(dept.getId()))).thenReturn(dept); + when(deptService.getDept(eq(dept.getId()))).thenReturn(dept); // 调用 UserImportRespVO respVO = userService.importUsers(newArrayList(importUser), false); @@ -402,7 +398,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { @Test public void testImportUsers_04() { // mock æ•°æ® - UserDO dbUser = randomSysUserDO(); + AdminUserDO dbUser = randomSysUserDO(); userMapper.insert(dbUser); // 准备傿•° UserImportExcelVO importUser = randomPojo(UserImportExcelVO.class, o -> { @@ -415,14 +411,14 @@ public class UserServiceImplTest extends BaseDbUnitTest { o.setId(importUser.getDeptId()); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); }); - when(deptCoreService.getDept(eq(dept.getId()))).thenReturn(dept); + when(deptService.getDept(eq(dept.getId()))).thenReturn(dept); // 调用 UserImportRespVO respVO = userService.importUsers(newArrayList(importUser), true); // 断言 assertEquals(0, respVO.getCreateUsernames().size()); assertEquals(1, respVO.getUpdateUsernames().size()); - UserDO user = userMapper.selectByUsername(respVO.getUpdateUsernames().get(0)); + AdminUserDO user = userMapper.selectByUsername(respVO.getUpdateUsernames().get(0)); assertPojoEquals(importUser, user); assertEquals(0, respVO.getFailureUsernames().size()); } @@ -507,51 +503,6 @@ public class UserServiceImplTest extends BaseDbUnitTest { USER_MOBILE_EXISTS); } - @Test - public void testCheckDeptEnable_notFound() { - assertServiceException(() -> userService.checkDeptEnable(randomLongId()), - DEPT_NOT_FOUND); - } - - @Test - public void testCheckDeptEnable_notEnable() { - // 准备傿•° - Long deptId = randomLongId(); - // mock deptService 的方法 - SysDeptDO dept = randomPojo(SysDeptDO.class, o -> { - o.setId(deptId); - o.setStatus(CommonStatusEnum.DISABLE.getStatus()); - }); - when(deptCoreService.getDept(eq(dept.getId()))).thenReturn(dept); - - // 调用,校验异常 - assertServiceException(() -> userService.checkDeptEnable(deptId), - DEPT_NOT_ENABLE); - } - - @Test - public void testCheckPostEnable_notFound() { - assertServiceException(() -> userService.checkPostEnable(randomSet(Long.class)), - POST_NOT_FOUND); - } - - @Test - public void testCheckPostEnable_notEnable() { - // 准备傿•° - Set postIds = randomSet(Long.class); - // mock postService 的方法 - List posts = CollectionUtils.convertList(postIds, postId -> - randomPojo(SysPostDO.class, o -> { - o.setId(postId); - o.setStatus(CommonStatusEnum.DISABLE.getStatus()); - })); - when(postService.getPosts(eq(postIds), isNull())).thenReturn(posts); - - // 调用,校验异常 - assertServiceException(() -> userService.checkPostEnable(postIds), - POST_NOT_ENABLE, CollUtil.getFirst(posts).getName()); - } - @Test public void testCheckOldPassword_notExists() { assertServiceException(() -> userService.checkOldPassword(randomLongId(), randomString()), @@ -561,7 +512,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { @Test public void testCheckOldPassword_passwordFailed() { // mock æ•°æ® - UserDO user = randomSysUserDO(); + AdminUserDO user = randomSysUserDO(); userMapper.insert(user); // 准备傿•° Long id = user.getId(); @@ -594,12 +545,12 @@ public class UserServiceImplTest extends BaseDbUnitTest { // ========== éšæœºå¯¹è±¡ ========== @SafeVarargs - private static UserDO randomSysUserDO(Consumer... consumers) { - Consumer consumer = (o) -> { + private static AdminUserDO randomSysUserDO(Consumer... consumers) { + Consumer consumer = (o) -> { o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 o.setSex(randomEle(SysSexEnum.values()).getSex()); // ä¿è¯ sex 的范围 }; - return randomPojo(UserDO.class, ArrayUtils.append(consumer, consumers)); + return randomPojo(AdminUserDO.class, ArrayUtils.append(consumer, consumers)); } } From 16c2590483b07ee3c102716d285cef020da2ab1c Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 30 Jan 2022 22:27:54 +0800 Subject: [PATCH 15/47] =?UTF-8?q?=E5=A4=9A=E6=A8=A1=E5=9D=97=E9=87=8D?= =?UTF-8?q?=E6=9E=84=204=EF=BC=9Asystem=20=E6=A8=A1=E5=9D=97=E7=9A=84?= =?UTF-8?q?=E8=B0=83=E6=95=B4=EF=BC=8C=E5=AE=9E=E7=8E=B0=20sms=20API~~?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 3 +- yudao-admin-server/pom.xml | 17 ++++---- .../member/convert/auth/AuthConvert.java | 12 ++++-- .../service/auth/MemberAuthServiceImpl.java | 13 +++--- .../service/user/MemberUserServiceImpl.java | 23 ++++------- ...ceTest.java => MemberAuthServiceTest.java} | 23 +++++------ ...st.java => MemberUserServiceImplTest.java} | 21 +++++----- .../module/system/api/sms/SmsCodeApi.java | 40 ++++++++++++++++++ .../api/sms/dto/SmsCodeCheckReqDTO.java | 36 ++++++++++++++++ .../system/api/sms/dto/SmsCodeSendReqDTO.java | 36 ++++++++++++++++ .../system/api/sms/dto/SmsCodeUseReqDTO.java | 41 +++++++++++++++++++ .../module/system/api/sms/SmsCodeApiImpl.java | 39 ++++++++++++++++++ .../system/service/sms/SmsCodeService.java | 26 +++++------- .../service/sms/SmsCodeServiceImpl.java | 23 ++++++----- 14 files changed, 270 insertions(+), 83 deletions(-) rename yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/auth/{SysAuthServiceTest.java => MemberAuthServiceTest.java} (85%) rename yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/{UserServiceImplTest.java => MemberUserServiceImplTest.java} (87%) create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/SmsCodeApi.java create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/SmsCodeCheckReqDTO.java create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/SmsCodeSendReqDTO.java create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/SmsCodeUseReqDTO.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/sms/SmsCodeApiImpl.java diff --git a/pom.xml b/pom.xml index 2512fcdc28..565028205a 100644 --- a/pom.xml +++ b/pom.xml @@ -14,9 +14,8 @@ yudao-user-server yudao-core-service yudao-module-member - yudao-module-bpm + yudao-module-system - yudao-module-system-api ${artifactId} diff --git a/yudao-admin-server/pom.xml b/yudao-admin-server/pom.xml index 09a39f280e..5fe645e877 100644 --- a/yudao-admin-server/pom.xml +++ b/yudao-admin-server/pom.xml @@ -57,14 +57,15 @@ - - cn.iocoder.boot - yudao-module-bpm-activiti - - - cn.iocoder.boot - yudao-module-bpm-core-service-impl - + + + + + + + + + cn.iocoder.boot diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/auth/AuthConvert.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/auth/AuthConvert.java index ddb545aa5f..bca6b170b5 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/auth/AuthConvert.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/auth/AuthConvert.java @@ -2,13 +2,13 @@ package cn.iocoder.yudao.module.member.convert.auth; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.security.core.LoginUser; -import cn.iocoder.yudao.module.member.controller.app.auth.vo.AppAuthSocialBindReqVO; -import cn.iocoder.yudao.module.member.controller.app.auth.vo.AppAuthSocialLogin2ReqVO; -import cn.iocoder.yudao.module.member.controller.app.auth.vo.AppAuthSocialLoginReqVO; -import cn.iocoder.yudao.module.member.controller.app.auth.vo.AppAuthSocialUnbindReqVO; +import cn.iocoder.yudao.module.member.controller.app.auth.vo.*; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; +import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeSendReqDTO; +import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeUseReqDTO; import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; import cn.iocoder.yudao.module.system.api.social.dto.SocialUserUnbindReqDTO; +import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.factory.Mappers; @@ -31,4 +31,8 @@ public interface AuthConvert { SocialUserBindReqDTO convert(Long userId, Integer value, AppAuthSocialLoginReqVO reqVO); SocialUserUnbindReqDTO convert(Long userId, Integer value, AppAuthSocialUnbindReqVO reqVO); + SmsCodeSendReqDTO convert(AppAuthSendSmsReqVO reqVO); + SmsCodeUseReqDTO convert(AppAuthResetPasswordReqVO reqVO, SmsSceneEnum scene, String usedIp); + SmsCodeUseReqDTO convert(AppAuthSmsLoginReqVO reqVO, Integer scene, String userIp); + } diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java index 6158326c5b..89a24de60f 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java @@ -15,6 +15,7 @@ import cn.iocoder.yudao.module.member.service.user.MemberUserService; import cn.iocoder.yudao.module.system.api.auth.UserSessionApi; import cn.iocoder.yudao.module.system.api.logger.LoginLogApi; import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO; +import cn.iocoder.yudao.module.system.api.sms.SmsCodeApi; import cn.iocoder.yudao.module.system.api.social.SocialUserApi; import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum; import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum; @@ -56,7 +57,7 @@ public class MemberAuthServiceImpl implements MemberAuthService { @Resource private MemberUserService userService; @Resource - private SysSmsCodeService smsCodeService; + private SmsCodeApi smsCodeApi; @Resource private LoginLogApi loginLogApi; @Resource @@ -93,8 +94,7 @@ public class MemberAuthServiceImpl implements MemberAuthService { @Transactional public String smsLogin(AppAuthSmsLoginReqVO reqVO, String userIp, String userAgent) { // 校验验è¯ç  - smsCodeService.useSmsCode(reqVO.getMobile(), SmsSceneEnum.MEMBER_LOGIN.getScene(), - reqVO.getCode(), userIp); + smsCodeApi.useSmsCode(AuthConvert.INSTANCE.convert(reqVO, SmsSceneEnum.MEMBER_LOGIN.getScene(), userIp)); // 获得获得注册用户 MemberUserDO user = userService.createUserIfAbsent(reqVO.getMobile(), userIp); @@ -292,8 +292,8 @@ public class MemberAuthServiceImpl implements MemberAuthService { MemberUserDO userDO = checkUserIfExists(reqVO.getMobile()); // 使用验è¯ç  - smsCodeService.useSmsCode(reqVO.getMobile(), SmsSceneEnum.MEMBER_FORGET_PASSWORD.getScene(), reqVO.getCode(), - getClientIP()); + smsCodeApi.useSmsCode(AuthConvert.INSTANCE.convert(reqVO, SmsSceneEnum.MEMBER_FORGET_PASSWORD, + getClientIP())); // æ›´æ–°å¯†ç  MemberUserDO mbrUserDO = MemberUserDO.builder().build(); @@ -304,7 +304,8 @@ public class MemberAuthServiceImpl implements MemberAuthService { @Override public void sendSmsCode(Long userId, AppAuthSendSmsReqVO reqVO) { - // TODO 芋艿:修改 + // TODO è¦æ ¹æ®ä¸åŒçš„åœºæ™¯ï¼Œæ ¡éªŒæ˜¯å¦æœ‰ç”¨æˆ· + smsCodeApi.sendSmsCode(AuthConvert.INSTANCE.convert(reqVO)); } /** diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java index f3348e2347..625daf8786 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java @@ -4,14 +4,12 @@ import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.IdUtil; import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserUpdateMobileReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.sms.SmsCodeDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; -import cn.iocoder.yudao.module.member.enums.SysErrorCodeConstants; +import cn.iocoder.yudao.module.system.api.sms.SmsCodeApi; +import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeUseReqDTO; import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; -import cn.iocoder.yudao.module.member.service.sms.SysSmsCodeService; import com.google.common.annotations.VisibleForTesting; import lombok.extern.slf4j.Slf4j; import org.springframework.security.crypto.password.PasswordEncoder; @@ -43,7 +41,7 @@ public class MemberUserServiceImpl implements MemberUserService { @Resource private InfFileCoreService fileCoreService; @Resource - private SysSmsCodeService smsCodeService; + private SmsCodeApi smsCodeApi; @Resource private PasswordEncoder passwordEncoder; @@ -111,22 +109,19 @@ public class MemberUserServiceImpl implements MemberUserService { return avatar; } + @Override @Transactional(rollbackFor = Exception.class) public void updateUserMobile(Long userId, AppUserUpdateMobileReqVO reqVO) { // 检测用户是å¦å­˜åœ¨ checkUserExists(userId); + // TODO 芋艿:oldMobile 应该ä¸ç”¨ä¼ é€’ // 校验旧手机和旧验è¯ç  - SmsCodeDO sysSmsCodeDO = smsCodeService.checkCodeIsExpired(reqVO.getOldMobile(), reqVO.getOldCode(), - SmsSceneEnum.MEMBER_UPDATE_MOBILE.getScene()); - // 判断旧 code æ˜¯å¦æœªè¢«ä½¿ç”¨ï¼Œå¦‚果是,抛出异常 - if (Boolean.FALSE.equals(sysSmsCodeDO.getUsed())){ - throw ServiceExceptionUtil.exception(SysErrorCodeConstants.USER_SMS_CODE_IS_UNUSED); - } - + smsCodeApi.useSmsCode(new SmsCodeUseReqDTO().setMobile(reqVO.getOldMobile()).setCode(reqVO.getOldCode()) + .setScene(SmsSceneEnum.MEMBER_UPDATE_MOBILE.getScene()).setUsedIp(getClientIP())); // 使用新验è¯ç  - smsCodeService.useSmsCode(reqVO.getMobile(), SmsSceneEnum.MEMBER_UPDATE_MOBILE.getScene(), - reqVO.getCode(),getClientIP()); + smsCodeApi.useSmsCode(new SmsCodeUseReqDTO().setMobile(reqVO.getMobile()).setCode(reqVO.getCode()) + .setScene(SmsSceneEnum.MEMBER_UPDATE_MOBILE.getScene()).setUsedIp(getClientIP())); // 更新用户手机 memberUserMapper.updateById(MemberUserDO.builder().id(userId).mobile(reqVO.getMobile()).build()); diff --git a/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/auth/SysAuthServiceTest.java b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceTest.java similarity index 85% rename from yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/auth/SysAuthServiceTest.java rename to yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceTest.java index 06f782ffbe..7e9b4648f1 100644 --- a/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/auth/SysAuthServiceTest.java +++ b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceTest.java @@ -1,22 +1,21 @@ package cn.iocoder.yudao.module.member.service.auth; -import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; -import cn.iocoder.yudao.module.system.service.auth.SysUserSessionCoreService; -import cn.iocoder.yudao.module.system.service.logger.SysLoginLogCoreService; -import cn.iocoder.yudao.module.system.service.social.SysSocialCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; import cn.iocoder.yudao.module.member.controller.app.auth.vo.AppAuthResetPasswordReqVO; import cn.iocoder.yudao.module.member.controller.app.auth.vo.AppAuthUpdatePasswordReqVO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; -import cn.iocoder.yudao.module.member.service.sms.SysSmsCodeService; import cn.iocoder.yudao.module.member.service.user.MemberUserService; import cn.iocoder.yudao.module.member.test.BaseDbAndRedisUnitTest; +import cn.iocoder.yudao.module.system.api.auth.UserSessionApi; +import cn.iocoder.yudao.module.system.api.logger.LoginLogApi; +import cn.iocoder.yudao.module.system.api.sms.SmsCodeApi; +import cn.iocoder.yudao.module.system.api.social.SocialUserApi; import org.junit.jupiter.api.Test; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Import; -import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.crypto.password.PasswordEncoder; @@ -37,22 +36,20 @@ import static org.mockito.Mockito.when; * @author 宋天 */ @Import({MemberAuthServiceImpl.class, YudaoRedisAutoConfiguration.class}) -public class SysAuthServiceTest extends BaseDbAndRedisUnitTest { +public class MemberAuthServiceTest extends BaseDbAndRedisUnitTest { @MockBean private AuthenticationManager authenticationManager; @MockBean private MemberUserService userService; @MockBean - private SysSmsCodeService smsCodeService; + private SmsCodeApi smsCodeApi; @MockBean - private SysLoginLogCoreService loginLogCoreService; + private LoginLogApi loginLogApi; @MockBean - private SysUserSessionCoreService userSessionCoreService; + private UserSessionApi userSessionApi; @MockBean - private SysSocialCoreService socialService; - @Resource - private StringRedisTemplate stringRedisTemplate; + private SocialUserApi socialUserApi; @MockBean private PasswordEncoder passwordEncoder; @Resource diff --git a/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/UserServiceImplTest.java b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImplTest.java similarity index 87% rename from yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/UserServiceImplTest.java rename to yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImplTest.java index e68fd03103..59a771047c 100644 --- a/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/UserServiceImplTest.java +++ b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImplTest.java @@ -6,13 +6,11 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserUpdateMobileReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.sms.SmsCodeDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; -import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; import cn.iocoder.yudao.module.member.service.auth.MemberAuthServiceImpl; -import cn.iocoder.yudao.module.member.service.sms.SysSmsCodeService; import cn.iocoder.yudao.module.member.test.BaseDbAndRedisUnitTest; +import cn.iocoder.yudao.module.system.api.sms.SmsCodeApi; import org.junit.jupiter.api.Test; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Import; @@ -36,7 +34,7 @@ import static org.mockito.Mockito.*; * @author 宋天 */ @Import({MemberUserServiceImpl.class, YudaoRedisAutoConfiguration.class}) -public class UserServiceImplTest extends BaseDbAndRedisUnitTest { +public class MemberUserServiceImplTest extends BaseDbAndRedisUnitTest { @Resource private MemberUserServiceImpl mbrUserService; @@ -57,7 +55,7 @@ public class UserServiceImplTest extends BaseDbAndRedisUnitTest { private PasswordEncoder passwordEncoder; @MockBean - private SmsCodeService smsCodeService; + private SmsCodeApi smsCodeApi; @Test public void testUpdateNickName_success(){ @@ -103,14 +101,15 @@ public class UserServiceImplTest extends BaseDbAndRedisUnitTest { userDO.setMobile(oldMobile); userMapper.insert(userDO); + // TODO 芋艿:需è¦ä¿®å¤è¯¥å•å…ƒæµ‹è¯•ï¼Œé‡æž„多模å—带æ¥çš„ // 旧手机和旧验è¯ç  - SmsCodeDO codeDO = new SmsCodeDO(); +// SmsCodeDO codeDO = new SmsCodeDO(); String oldCode = RandomUtil.randomString(4); - codeDO.setMobile(userDO.getMobile()); - codeDO.setCode(oldCode); - codeDO.setScene(SmsSceneEnum.MEMBER_UPDATE_MOBILE.getScene()); - codeDO.setUsed(Boolean.FALSE); - when(smsCodeService.checkCodeIsExpired(codeDO.getMobile(),codeDO.getCode(),codeDO.getScene())).thenReturn(codeDO); +// codeDO.setMobile(userDO.getMobile()); +// codeDO.setCode(oldCode); +// codeDO.setScene(SmsSceneEnum.MEMBER_UPDATE_MOBILE.getScene()); +// codeDO.setUsed(Boolean.FALSE); +// when(smsCodeService.checkCodeIsExpired(codeDO.getMobile(),codeDO.getCode(),codeDO.getScene())).thenReturn(codeDO); // æ›´æ–°æ‰‹æœºå· String newMobile = randomNumbers(11); diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/SmsCodeApi.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/SmsCodeApi.java new file mode 100644 index 0000000000..1a3aea7eee --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/SmsCodeApi.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.system.api.sms; + +import cn.iocoder.yudao.framework.common.exception.ServiceException; +import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeCheckReqDTO; +import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeSendReqDTO; +import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeUseReqDTO; + +import javax.validation.Valid; + +/** + * 短信验è¯ç  API æŽ¥å£ + * + * @author èŠ‹é“æºç  + */ +public interface SmsCodeApi { + + /** + * 创建短信验è¯ç ï¼Œå¹¶è¿›è¡Œå‘é€ + * + * @param reqDTO å‘é€è¯·æ±‚ + */ + void sendSmsCode(@Valid SmsCodeSendReqDTO reqDTO); + + /** + * 验è¯çŸ­ä¿¡éªŒè¯ç ï¼Œå¹¶è¿›è¡Œä½¿ç”¨ + * 如果正确,则将验è¯ç æ ‡è®°æˆå·²ä½¿ç”¨ + * 如果错误,则抛出 {@link ServiceException} 异常 + * + * @param reqDTO 使用请求 + */ + void useSmsCode(@Valid SmsCodeUseReqDTO reqDTO); + + /** + * 检查验è¯ç æ˜¯å¦æœ‰æ•ˆ + * + * @param reqDTO 校验请求 + */ + void checkSmsCode(@Valid SmsCodeCheckReqDTO reqDTO); + +} diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/SmsCodeCheckReqDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/SmsCodeCheckReqDTO.java new file mode 100644 index 0000000000..2fd1ed6687 --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/SmsCodeCheckReqDTO.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.system.api.sms.dto; + +import cn.iocoder.yudao.framework.common.validation.InEnum; +import cn.iocoder.yudao.framework.common.validation.Mobile; +import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; + +/** + * 短信验è¯ç çš„æ ¡éªŒ Request DTO + * + * @author èŠ‹é“æºç  + */ +@Data +public class SmsCodeCheckReqDTO { + + /** + * æ‰‹æœºå· + */ + @Mobile + @NotEmpty(message = "手机å·ä¸èƒ½ä¸ºç©º") + private String mobile; + /** + * å‘é€åœºæ™¯ + */ + @NotEmpty(message = "å‘é€åœºæ™¯ä¸èƒ½ä¸ºç©º") + @InEnum(SmsSceneEnum.class) + private Integer scene; + /** + * 验è¯ç  + */ + @NotEmpty(message = "验è¯ç ") + private String code; + +} diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/SmsCodeSendReqDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/SmsCodeSendReqDTO.java new file mode 100644 index 0000000000..088899aac4 --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/SmsCodeSendReqDTO.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.system.api.sms.dto; + +import cn.iocoder.yudao.framework.common.validation.InEnum; +import cn.iocoder.yudao.framework.common.validation.Mobile; +import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; + +/** + * 短信验è¯ç çš„å‘é€ Request DTO + * + * @author èŠ‹é“æºç  + */ +@Data +public class SmsCodeSendReqDTO { + + /** + * æ‰‹æœºå· + */ + @Mobile + @NotEmpty(message = "手机å·ä¸èƒ½ä¸ºç©º") + private String mobile; + /** + * å‘é€åœºæ™¯ + */ + @NotEmpty(message = "å‘é€åœºæ™¯ä¸èƒ½ä¸ºç©º") + @InEnum(SmsSceneEnum.class) + private Integer scene; + /** + * å‘é€ IP + */ + @NotEmpty(message = "å‘é€ IP ä¸èƒ½ä¸ºç©º") + private String createIp; + +} diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/SmsCodeUseReqDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/SmsCodeUseReqDTO.java new file mode 100644 index 0000000000..eedc2a90a2 --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/SmsCodeUseReqDTO.java @@ -0,0 +1,41 @@ +package cn.iocoder.yudao.module.system.api.sms.dto; + +import cn.iocoder.yudao.framework.common.validation.InEnum; +import cn.iocoder.yudao.framework.common.validation.Mobile; +import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; + +/** + * 短信验è¯ç çš„使用 Request DTO + * + * @author èŠ‹é“æºç  + */ +@Data +public class SmsCodeUseReqDTO { + + /** + * æ‰‹æœºå· + */ + @Mobile + @NotEmpty(message = "手机å·ä¸èƒ½ä¸ºç©º") + private String mobile; + /** + * å‘é€åœºæ™¯ + */ + @NotEmpty(message = "å‘é€åœºæ™¯ä¸èƒ½ä¸ºç©º") + @InEnum(SmsSceneEnum.class) + private Integer scene; + /** + * 验è¯ç  + */ + @NotEmpty(message = "验è¯ç ") + private String code; + /** + * 使用 IP + */ + @NotEmpty(message = "使用 IP ä¸èƒ½ä¸ºç©º") + private String usedIp; + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/sms/SmsCodeApiImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/sms/SmsCodeApiImpl.java new file mode 100644 index 0000000000..73d73b42f2 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/sms/SmsCodeApiImpl.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.module.system.api.sms; + +import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeCheckReqDTO; +import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeSendReqDTO; +import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeUseReqDTO; +import cn.iocoder.yudao.module.system.service.sms.SmsCodeService; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; + +/** + * 短信验è¯ç  API 实现类 + * + * @author èŠ‹é“æºç  + */ +@Service +@Validated +public class SmsCodeApiImpl implements SmsCodeApi { + + @Resource + private SmsCodeService smsCodeService; + + @Override + public void sendSmsCode(SmsCodeSendReqDTO reqDTO) { + smsCodeService.sendSmsCode(reqDTO); + } + + @Override + public void useSmsCode(SmsCodeUseReqDTO reqDTO) { + smsCodeService.useSmsCode(reqDTO); + } + + @Override + public void checkSmsCode(SmsCodeCheckReqDTO reqDTO) { + smsCodeService.checkSmsCode(reqDTO); + } + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeService.java index f62b7576da..f427b6a2f5 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeService.java @@ -1,8 +1,11 @@ package cn.iocoder.yudao.module.system.service.sms; import cn.iocoder.yudao.framework.common.exception.ServiceException; -import cn.iocoder.yudao.framework.common.validation.Mobile; -import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; +import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeCheckReqDTO; +import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeSendReqDTO; +import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeUseReqDTO; + +import javax.validation.Valid; /** * 短信验è¯ç  Service æŽ¥å£ @@ -14,31 +17,24 @@ public interface SmsCodeService { /** * 创建短信验è¯ç ï¼Œå¹¶è¿›è¡Œå‘é€ * - * @param mobile æ‰‹æœºå· - * @param scene å‘é€åœºæ™¯ {@link SmsSceneEnum} - * @param createIp å‘é€ IP + * @param reqDTO å‘é€è¯·æ±‚ */ - void sendSmsCode(@Mobile String mobile, Integer scene, String createIp); + void sendSmsCode(@Valid SmsCodeSendReqDTO reqDTO); /** * 验è¯çŸ­ä¿¡éªŒè¯ç ï¼Œå¹¶è¿›è¡Œä½¿ç”¨ * 如果正确,则将验è¯ç æ ‡è®°æˆå·²ä½¿ç”¨ * 如果错误,则抛出 {@link ServiceException} 异常 * - * @param mobile æ‰‹æœºå· - * @param scene å‘é€åœºæ™¯ {@link SmsSceneEnum} - * @param code 验è¯ç  - * @param usedIp 使用 IP + * @param reqDTO 使用请求 */ - void useSmsCode(@Mobile String mobile, Integer scene, String code, String usedIp); + void useSmsCode(@Valid SmsCodeUseReqDTO reqDTO); /** * 检查验è¯ç æ˜¯å¦æœ‰æ•ˆ * - * @param mobile 手机 - * @param code 验è¯ç  - * @param scene 使用场景 + * @param reqDTO 校验请求 */ - void checkSmsCode(String mobile, String code, Integer scene); + void checkSmsCode(@Valid SmsCodeCheckReqDTO reqDTO); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeServiceImpl.java index db4bfa8fae..b30f31dd07 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeServiceImpl.java @@ -4,6 +4,9 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.map.MapUtil; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.module.member.api.user.MemberUserApi; +import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeCheckReqDTO; +import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeSendReqDTO; +import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeUseReqDTO; import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsCodeDO; import cn.iocoder.yudao.module.system.dal.mysql.sms.SmsCodeMapper; import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; @@ -42,13 +45,13 @@ public class SmsCodeServiceImpl implements SmsCodeService { private SmsSendService smsSendService; @Override - public void sendSmsCode(String mobile, Integer scene, String createIp) { - SmsSceneEnum sceneEnum = SmsSceneEnum.getCodeByScene(scene); - Assert.notNull(sceneEnum, "验è¯ç åœºæ™¯({}) 查找ä¸åˆ°é…ç½®", scene); + public void sendSmsCode(SmsCodeSendReqDTO reqDTO) { + SmsSceneEnum sceneEnum = SmsSceneEnum.getCodeByScene(reqDTO.getScene()); + Assert.notNull(sceneEnum, "验è¯ç åœºæ™¯({}) 查找ä¸åˆ°é…ç½®", reqDTO.getScene()); // 创建验è¯ç  - String code = createSmsCode(mobile, scene, createIp); + String code = createSmsCode(reqDTO.getMobile(), reqDTO.getScene(), reqDTO.getCreateIp()); // å‘é€éªŒè¯ç  - smsSendService.sendSingleSms(mobile, null, null, + smsSendService.sendSingleSms(reqDTO.getMobile(), null, null, sceneEnum.getTemplateCode(), MapUtil.of("code", code)); } @@ -77,17 +80,17 @@ public class SmsCodeServiceImpl implements SmsCodeService { } @Override - public void useSmsCode(String mobile, Integer scene, String code, String usedIp) { + public void useSmsCode(SmsCodeUseReqDTO reqDTO) { // 检测验è¯ç æ˜¯å¦æœ‰æ•ˆ - SmsCodeDO lastSmsCode = this.checkSmsCode0(mobile, code, scene); + SmsCodeDO lastSmsCode = this.checkSmsCode0(reqDTO.getMobile(), reqDTO.getCode(), reqDTO.getScene()); // 使用验è¯ç  smsCodeMapper.updateById(SmsCodeDO.builder().id(lastSmsCode.getId()) - .used(true).usedTime(new Date()).usedIp(usedIp).build()); + .used(true).usedTime(new Date()).usedIp(reqDTO.getUsedIp()).build()); } @Override - public void checkSmsCode(String mobile, String code, Integer scene) { - checkSmsCode0(mobile, code, scene); + public void checkSmsCode(SmsCodeCheckReqDTO reqDTO) { + checkSmsCode0(reqDTO.getMobile(), reqDTO.getCode(), reqDTO.getScene()); } public SmsCodeDO checkSmsCode0(String mobile, String code, Integer scene) { From fd53bf329642a4322400ad48f07ccc3651545532 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 31 Jan 2022 00:33:55 +0800 Subject: [PATCH 16/47] =?UTF-8?q?=E5=A4=9A=E6=A8=A1=E5=9D=97=E9=87=8D?= =?UTF-8?q?=E6=9E=84=204=EF=BC=9Asystem=20=E6=A8=A1=E5=9D=97=E7=9A=84?= =?UTF-8?q?=E8=B0=83=E6=95=B4=EF=BC=8C=E8=A7=A3=E5=86=B3=E5=8D=95=E5=85=83?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E6=8A=A5=E9=94=99=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.yaml | 2 +- .../src/test/resources/sql/clean.sql | 20 - .../src/test/resources/sql/create_tables.sql | 407 ------------------ .../app/auth/vo/AppAuthCheckCodeReqVO.java | 2 +- .../app/auth/vo/AppAuthSendSmsReqVO.java | 2 +- .../service/auth/MemberAuthServiceImpl.java | 11 +- .../service/auth/MemberAuthServiceTest.java | 10 +- .../user/MemberUserServiceImplTest.java | 12 +- .../test/resources/application-unit-test.yaml | 2 + .../src/test/resources/sql/clean.sql | 1 - .../src/test/resources/sql/create_tables.sql | 1 - .../controller/admin/auth/AuthController.java | 6 +- .../admin/auth/UserSessionController.java | 10 +- .../auth/vo/auth/AuthSocialBindReqVO.java | 2 +- .../auth/vo/auth/AuthSocialLogin2ReqVO.java | 2 +- .../auth/vo/auth/AuthSocialLoginReqVO.java | 2 +- .../auth/vo/auth/AuthSocialUnbindReqVO.java | 2 +- .../controller/admin/dept/DeptController.java | 10 +- .../controller/admin/dept/PostController.java | 8 +- .../admin/dept/vo/dept/DeptBaseVO.java | 2 +- .../admin/dept/vo/dept/DeptListReqVO.java | 2 +- .../admin/dept/vo/dept/DeptRespVO.java | 2 +- .../admin/dept/vo/post/PostBaseVO.java | 2 +- .../admin/dept/vo/post/PostExportReqVO.java | 4 +- .../admin/dept/vo/post/PostListReqVO.java | 2 +- .../admin/dept/vo/post/PostPageReqVO.java | 2 +- .../admin/dict/DictDataController.java | 6 +- .../admin/dict/vo/data/DictDataBaseVO.java | 4 +- .../dict/vo/data/DictDataExportReqVO.java | 2 +- .../admin/dict/vo/data/DictDataPageReqVO.java | 2 +- .../dict/vo/type/DictTypeExportReqVO.java | 2 +- .../admin/dict/vo/type/DictTypePageReqVO.java | 2 +- .../errorcode/vo/ErrorCodePageReqVO.java | 2 +- .../admin/errorcode/vo/ErrorCodeRespVO.java | 2 +- .../admin/logger/LoginLogController.java | 6 +- .../logger/vo/loginlog/LoginLogBaseVO.java | 4 +- .../vo/operatelog/OperateLogBaseVO.java | 2 +- .../vo/operatelog/OperateLogExportReqVO.java | 2 +- .../vo/operatelog/OperateLogPageReqVO.java | 2 +- .../admin/notice/vo/NoticeBaseVO.java | 2 +- .../admin/notice/vo/NoticePageReqVO.java | 2 +- .../admin/permission/vo/menu/MenuBaseVO.java | 4 +- .../permission/vo/menu/MenuListReqVO.java | 2 +- .../admin/permission/vo/menu/MenuRespVO.java | 2 +- .../PermissionAssignRoleDataScopeReqVO.java | 2 +- .../admin/permission/vo/role/RoleBaseVO.java | 2 +- .../permission/vo/role/RoleExportReqVO.java | 2 +- .../permission/vo/role/RolePageReqVO.java | 2 +- .../admin/permission/vo/role/RoleRespVO.java | 4 +- .../vo/role/RoleUpdateStatusReqVO.java | 4 +- .../admin/sms/SmsCallbackController.java | 6 +- .../admin/sms/SmsChannelController.java | 10 +- .../admin/sms/SmsLogController.java | 10 +- .../admin/sms/SmsTemplateController.java | 12 +- .../admin/sms/vo/log/SmsLogExportReqVO.java | 2 +- .../admin/sms/vo/log/SmsLogPageReqVO.java | 4 +- ...SysSmsLogRespVO.java => SmsLogRespVO.java} | 2 +- .../sms/vo/template/SmsTemplateBaseVO.java | 2 +- .../vo/template/SmsTemplateExportReqVO.java | 2 +- .../admin/tenant/TenantController.java | 12 +- .../admin/tenant/vo/TenantExportReqVO.java | 2 +- .../controller/admin/user/UserController.java | 14 +- .../admin/user/UserProfileController.java | 12 +- .../user/vo/profile/UserProfileRespVO.java | 4 +- .../vo/profile/UserProfileUpdateReqVO.java | 2 +- .../admin/user/vo/user/UserBaseVO.java | 4 +- .../admin/user/vo/user/UserExportReqVO.java | 4 +- .../admin/user/vo/user/UserPageReqVO.java | 2 +- .../admin/user/vo/user/UserRespVO.java | 2 +- .../user/vo/user/UserUpdateStatusReqVO.java | 4 +- .../convert/auth/UserSessionConvert.java | 4 +- .../system/convert/dept/DeptConvert.java | 12 +- .../system/convert/dept/PostConvert.java | 14 +- .../system/convert/dict/DictDataConvert.java | 18 +- .../convert/dict/SysDictDataCoreConvert.java | 20 - .../convert/logger/LoginLogConvert.java | 11 +- .../logger/SysLoginLogCoreConvert.java | 15 - .../system/convert/sms/SmsChannelConvert.java | 16 +- .../system/convert/sms/SmsLogConvert.java | 12 +- .../convert/sms/SmsTemplateConvert.java | 14 +- .../system/convert/tenant/TenantConvert.java | 14 +- .../system/convert/user/UserConvert.java | 14 +- ...sUserSessionDO.java => UserSessionDO.java} | 8 +- .../dept/{SysDeptDO.java => DeptDO.java} | 4 +- .../dept/{SysPostDO.java => PostDO.java} | 4 +- .../{SysDictDataDO.java => DictDataDO.java} | 6 +- .../{SysLoginLogDO.java => LoginLogDO.java} | 4 +- .../dal/dataobject/permission/MenuDO.java | 2 +- ...SysSmsChannelDO.java => SmsChannelDO.java} | 4 +- .../sms/{SysSmsLogDO.java => SmsLogDO.java} | 28 +- ...sSmsTemplateDO.java => SmsTemplateDO.java} | 12 +- ...SysSocialUserDO.java => SocialUserDO.java} | 6 +- .../{SysTenantDO.java => TenantDO.java} | 4 +- .../dal/dataobject/user/AdminUserDO.java | 6 +- .../mysql/auth/SysUserSessionCoreMapper.java | 10 - ...sionMapper.java => UserSessionMapper.java} | 12 +- .../{SysDeptMapper.java => DeptMapper.java} | 22 +- .../{SysPostMapper.java => PostMapper.java} | 24 +- .../dal/mysql/dept/SysDeptCoreMapper.java | 9 - .../dal/mysql/dept/SysPostCoreMapper.java | 9 - .../system/dal/mysql/dict/DictDataMapper.java | 54 +++ ...ictTypeMapper.java => DictTypeMapper.java} | 2 +- .../dal/mysql/dict/SysDictDataMapper.java | 55 --- ...orCodeMapper.java => ErrorCodeMapper.java} | 2 +- .../dal/mysql/logger/LoginLogMapper.java | 12 +- .../mysql/logger/SysLoginLogCoreMapper.java | 10 - ...SysNoticeMapper.java => NoticeMapper.java} | 2 +- .../dal/mysql/permission/RoleMenuMapper.java | 2 +- .../dal/mysql/sms/SmsChannelMapper.java | 10 +- .../system/dal/mysql/sms/SmsLogMapper.java | 12 +- .../dal/mysql/sms/SmsTemplateMapper.java | 52 +-- .../dal/mysql/social/SocialUserMapper.java | 28 ++ .../dal/mysql/social/SysSocialUserMapper.java | 28 -- .../dal/mysql/tenant/SysTenantCoreMapper.java | 9 - .../dal/mysql/tenant/SysTenantMapper.java | 44 -- .../system/dal/mysql/tenant/TenantMapper.java | 44 ++ ...yConstants.java => RedisKeyConstants.java} | 4 +- .../dal/redis/SysRedisKeyCoreConstants.java | 18 - .../dal/redis/auth/LoginUserRedisDAO.java | 2 +- .../dal/redis/common/CaptchaRedisDAO.java | 2 +- .../redis/social/SocialAuthUserRedisDAO.java | 2 +- .../common/{SysSexEnum.java => SexEnum.java} | 2 +- ...tusEnum.java => SmsReceiveStatusEnum.java} | 2 +- ...StatusEnum.java => SmsSendStatusEnum.java} | 2 +- ...TypeEnum.java => SmsTemplateTypeEnum.java} | 2 +- .../config/DataPermissionConfiguration.java | 4 +- .../mq/consumer/sms/SmsSendConsumer.java | 4 +- .../service/auth/AdminAuthServiceImpl.java | 12 +- .../service/auth/UserSessionService.java | 4 +- .../service/auth/UserSessionServiceImpl.java | 34 +- .../system/service/dept/DeptService.java | 18 +- .../system/service/dept/DeptServiceImpl.java | 58 +-- .../system/service/dept/PostService.java | 12 +- .../system/service/dept/PostServiceImpl.java | 30 +- .../system/service/dict/DictDataService.java | 10 +- .../service/dict/DictDataServiceImpl.java | 55 ++- .../service/dict/DictTypeServiceImpl.java | 4 +- .../errorcode/ErrorCodeServiceImpl.java | 4 +- .../service/logger/LoginLogService.java | 6 +- .../service/logger/LoginLogServiceImpl.java | 12 +- .../service/notice/NoticeServiceImpl.java | 4 +- .../service/permission/MenuServiceImpl.java | 2 +- .../permission/PermissionServiceImpl.java | 6 +- .../system/service/sms/SmsChannelService.java | 10 +- .../service/sms/SmsChannelServiceImpl.java | 18 +- .../system/service/sms/SmsLogService.java | 10 +- .../system/service/sms/SmsLogServiceImpl.java | 36 +- .../service/sms/SmsSendServiceImpl.java | 10 +- .../service/sms/SmsTemplateService.java | 14 +- .../service/sms/SmsTemplateServiceImpl.java | 40 +- .../service/social/SocialUserService.java | 6 +- .../service/social/SocialUserServiceImpl.java | 30 +- .../service/tenant/SysTenantCoreService.java | 11 - .../system/service/tenant/TenantService.java | 17 +- .../service/tenant/TenantServiceImpl.java | 31 +- .../tenant/impl/SysTenantCoreServiceImpl.java | 29 -- .../service/user/AdminUserServiceImpl.java | 4 +- .../auth/UserSessionServiceImplTest.java | 36 +- .../system/service/dept/DeptServiceTest.java | 48 +-- .../system/service/dept/PostServiceTest.java | 38 +- .../service/dict/DictDataServiceTest.java | 44 +- .../service/dict/DictTypeServiceTest.java | 4 +- .../errorcode/ErrorCodeServiceTest.java | 6 +- .../logger/LoginLogServiceImplTest.java | 12 +- .../logger/OperateLogServiceImplTest.java | 6 +- .../service/notice/NoticeServiceImplTest.java | 22 +- .../permission/PermissionServiceTest.java | 4 +- .../service/sms/SmsChannelServiceTest.java | 26 +- .../system/service/sms/SmsLogServiceTest.java | 80 ++-- ...rviceTest.java => SmsSendServiceTest.java} | 10 +- .../service/sms/SmsTemplateServiceTest.java | 62 +-- .../service/social/SocialUserServiceTest.java | 28 +- .../service/tenant/TenantServiceTest.java | 22 +- .../service/user/UserServiceImplTest.java | 91 ++-- .../test/resources/application-unit-test.yaml | 55 +++ .../src/test/resources/logback-spring.xml | 4 + .../src/test/resources/sql/clean.sql | 18 + .../src/test/resources/sql/create_tables.sql | 405 +++++++++++++++++ 178 files changed, 1467 insertions(+), 1545 deletions(-) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/{SysSmsLogRespVO.java => SmsLogRespVO.java} (99%) delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/SysDictDataCoreConvert.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/SysLoginLogCoreConvert.java rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/auth/{SysUserSessionDO.java => UserSessionDO.java} (82%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/{SysDeptDO.java => DeptDO.java} (94%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/{SysPostDO.java => PostDO.java} (92%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dict/{SysDictDataDO.java => DictDataDO.java} (88%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/{SysLoginLogDO.java => LoginLogDO.java} (95%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/{SysSmsChannelDO.java => SmsChannelDO.java} (91%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/{SysSmsLogDO.java => SmsLogDO.java} (81%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/{SysSmsTemplateDO.java => SmsTemplateDO.java} (83%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/social/{SysSocialUserDO.java => SocialUserDO.java} (89%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/tenant/{SysTenantDO.java => TenantDO.java} (89%) delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/auth/SysUserSessionCoreMapper.java rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/auth/{SysUserSessionMapper.java => UserSessionMapper.java} (54%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/{SysDeptMapper.java => DeptMapper.java} (51%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/{SysPostMapper.java => PostMapper.java} (55%) delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysDeptCoreMapper.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysPostCoreMapper.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/DictDataMapper.java rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/{SysDictTypeMapper.java => DictTypeMapper.java} (96%) delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/SysDictDataMapper.java rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/errorcode/{SysErrorCodeMapper.java => ErrorCodeMapper.java} (97%) delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/SysLoginLogCoreMapper.java rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/notice/{SysNoticeMapper.java => NoticeMapper.java} (91%) create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/social/SocialUserMapper.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/social/SysSocialUserMapper.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tenant/SysTenantCoreMapper.java delete mode 100755 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tenant/SysTenantMapper.java create mode 100755 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tenant/TenantMapper.java rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/{SysRedisKeyConstants.java => RedisKeyConstants.java} (96%) delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/SysRedisKeyCoreConstants.java rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/common/{SysSexEnum.java => SexEnum.java} (93%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/{SysSmsReceiveStatusEnum.java => SmsReceiveStatusEnum.java} (90%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/{SysSmsSendStatusEnum.java => SmsSendStatusEnum.java} (91%) rename yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/{SysSmsTemplateTypeEnum.java => SmsTemplateTypeEnum.java} (90%) delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/SysTenantCoreService.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/impl/SysTenantCoreServiceImpl.java rename yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/{SysSmsSendServiceTest.java => SmsSendServiceTest.java} (95%) create mode 100644 yudao-module-system/yudao-module-system-impl/src/test/resources/application-unit-test.yaml create mode 100644 yudao-module-system/yudao-module-system-impl/src/test/resources/logback-spring.xml create mode 100644 yudao-module-system/yudao-module-system-impl/src/test/resources/sql/clean.sql create mode 100644 yudao-module-system/yudao-module-system-impl/src/test/resources/sql/create_tables.sql diff --git a/yudao-admin-server/src/main/resources/application.yaml b/yudao-admin-server/src/main/resources/application.yaml index 97eb6ac492..81ec74b2cf 100644 --- a/yudao-admin-server/src/main/resources/application.yaml +++ b/yudao-admin-server/src/main/resources/application.yaml @@ -75,7 +75,7 @@ yudao: error-code: # 错误ç ç›¸å…³é…置项 constants-class-list: - cn.iocoder.yudao.adminserver.modules.infra.enums.InfErrorCodeConstants - - cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants + - cn.iocoder.yudao.module.system.enums.ErrorCodeConstants - cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants tenant: # 多租户相关é…置项 tables: # é…置需è¦å¼€å¯å¤šç§Ÿæˆ·çš„表;如果实体已ç»ç»§æ‰¿ TenantBaseDO 类,则无需é‡å¤é…ç½® diff --git a/yudao-admin-server/src/test/resources/sql/clean.sql b/yudao-admin-server/src/test/resources/sql/clean.sql index b565553f24..c0149d424c 100644 --- a/yudao-admin-server/src/test/resources/sql/clean.sql +++ b/yudao-admin-server/src/test/resources/sql/clean.sql @@ -6,26 +6,6 @@ DELETE FROM "inf_job_log"; DELETE FROM "inf_api_access_log"; DELETE FROM "inf_api_error_log"; --- sys 开头的 DB -DELETE FROM "sys_dept"; -DELETE FROM "sys_dict_data"; -DELETE FROM "sys_role"; -DELETE FROM "sys_role_menu"; -DELETE FROM "sys_menu"; -DELETE FROM "sys_user_role"; -DELETE FROM "sys_dict_type"; -DELETE FROM "sys_user_session"; -DELETE FROM "sys_post"; -DELETE FROM "sys_login_log"; -DELETE FROM "sys_operate_log"; -DELETE FROM "sys_user"; -DELETE FROM "sys_sms_channel"; -DELETE FROM "sys_sms_template"; -DELETE FROM "sys_sms_log"; -DELETE FROM "sys_error_code"; -DELETE FROM "sys_social_user"; -DELETE FROM "sys_tenant"; - -- pay 开头的 DB DELETE FROM pay_merchant; DELETE FROM pay_app; diff --git a/yudao-admin-server/src/test/resources/sql/create_tables.sql b/yudao-admin-server/src/test/resources/sql/create_tables.sql index 9b2f0d69f1..b8b92e3b1f 100644 --- a/yudao-admin-server/src/test/resources/sql/create_tables.sql +++ b/yudao-admin-server/src/test/resources/sql/create_tables.sql @@ -67,413 +67,6 @@ CREATE TABLE IF NOT EXISTS "inf_job_log" ( PRIMARY KEY ("id") )COMMENT='定时任务日志表'; --- sys 开头的 DB - -CREATE TABLE IF NOT EXISTS "sys_dept" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar(30) NOT NULL DEFAULT '', - "parent_id" bigint NOT NULL DEFAULT '0', - "sort" int NOT NULL DEFAULT '0', - "leader_user_id" bigint DEFAULT NULL, - "phone" varchar(11) DEFAULT NULL, - "email" varchar(50) DEFAULT NULL, - "status" tinyint NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint not null default '0', - PRIMARY KEY ("id") -) COMMENT '部门表'; - -CREATE TABLE IF NOT EXISTS "sys_dict_data" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "sort" int NOT NULL DEFAULT '0', - "label" varchar(100) NOT NULL DEFAULT '', - "value" varchar(100) NOT NULL DEFAULT '', - "dict_type" varchar(100) NOT NULL DEFAULT '', - "status" tinyint NOT NULL DEFAULT '0', - "remark" varchar(500) DEFAULT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '字典数æ®è¡¨'; - -CREATE TABLE IF NOT EXISTS "sys_role" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar(30) NOT NULL, - "code" varchar(100) NOT NULL, - "sort" int NOT NULL, - "data_scope" tinyint NOT NULL DEFAULT '1', - "data_scope_dept_ids" varchar(500) NOT NULL DEFAULT '', - "status" tinyint NOT NULL, - "type" tinyint NOT NULL, - "remark" varchar(500) DEFAULT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '角色信æ¯è¡¨'; - -CREATE TABLE IF NOT EXISTS "sys_role_menu" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "role_id" bigint NOT NULL, - "menu_id" bigint NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '角色和èœå•å…³è”表'; - -CREATE TABLE IF NOT EXISTS "sys_menu" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar(50) NOT NULL, - "permission" varchar(100) NOT NULL DEFAULT '', - "menu_type" tinyint NOT NULL, - "sort" int NOT NULL DEFAULT '0', - "parent_id" bigint NOT NULL DEFAULT '0', - "path" varchar(200) DEFAULT '', - "icon" varchar(100) DEFAULT '#', - "component" varchar(255) DEFAULT NULL, - "status" tinyint NOT NULL DEFAULT '0', - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT 'èœå•æƒé™è¡¨'; - -CREATE TABLE IF NOT EXISTS "sys_user_role" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "user_id" bigint NOT NULL, - "role_id" bigint NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp DEFAULT NULL, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp DEFAULT NULL, - "deleted" bit DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '用户和角色关è”表'; - -CREATE TABLE IF NOT EXISTS "sys_dict_type" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar(100) NOT NULL DEFAULT '', - "type" varchar(100) NOT NULL DEFAULT '', - "status" tinyint NOT NULL DEFAULT '0', - "remark" varchar(500) DEFAULT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '字典类型表'; - -CREATE TABLE IF NOT EXISTS `sys_user_session` ( - `id` varchar(32) NOT NULL, - `user_id` bigint DEFAULT NULL, - "user_type" tinyint NOT NULL, - `username` varchar(50) NOT NULL DEFAULT '', - `user_ip` varchar(50) DEFAULT NULL, - `user_agent` varchar(512) DEFAULT NULL, - `session_timeout` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updater` varchar(64) DEFAULT '' , - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint not null default '0', - PRIMARY KEY (`id`) -) COMMENT '用户在线 Session'; - -CREATE TABLE IF NOT EXISTS "sys_post" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "code" varchar(64) NOT NULL, - "name" varchar(50) NOT NULL, - "sort" integer NOT NULL, - "status" tinyint NOT NULL, - "remark" varchar(500) DEFAULT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint not null default '0', - PRIMARY KEY ("id") -) COMMENT 'å²—ä½ä¿¡æ¯è¡¨'; - -CREATE TABLE IF NOT EXISTS "sys_notice" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "title" varchar(50) NOT NULL COMMENT '公告标题', - "content" text NOT NULL COMMENT '公告内容', - "notice_type" tinyint NOT NULL COMMENT '公告类型(1通知 2公告)', - "status" tinyint NOT NULL DEFAULT '0' COMMENT '公告状æ€ï¼ˆ0正常 1关闭)', - "creator" varchar(64) DEFAULT '' COMMENT '创建者', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - "updater" varchar(64) DEFAULT '' COMMENT '更新者', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', - "deleted" bit NOT NULL DEFAULT 0 COMMENT '是å¦åˆ é™¤', - "tenant_id" bigint not null default '0', - PRIMARY KEY("id") -) COMMENT '通知公告表'; - -CREATE TABLE IF NOT EXISTS `sys_login_log` ( - `id` bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY, - `log_type` bigint(4) NOT NULL, - "user_id" bigint not null default '0', - "user_type" tinyint NOT NULL, - `trace_id` varchar(64) NOT NULL DEFAULT '', - `username` varchar(50) NOT NULL DEFAULT '', - `result` tinyint(4) NOT NULL, - `user_ip` varchar(50) NOT NULL, - `user_agent` varchar(512) NOT NULL, - `creator` varchar(64) DEFAULT '', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updater` varchar(64) DEFAULT '', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `deleted` bit(1) NOT NULL DEFAULT '0', - PRIMARY KEY (`id`) -) COMMENT ='系统访问记录'; - -CREATE TABLE IF NOT EXISTS `sys_operate_log` ( - `id` bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY, - `trace_id` varchar(64) NOT NULL DEFAULT '', - `user_id` bigint(20) NOT NULL, - `module` varchar(50) NOT NULL, - `name` varchar(50) NOT NULL, - `operate_type` bigint(4) NOT NULL DEFAULT '0', - `content` varchar(2000) NOT NULL DEFAULT '', - `exts` varchar(512) NOT NULL DEFAULT '', - `request_method` varchar(16) DEFAULT '', - `request_url` varchar(255) DEFAULT '', - `user_ip` varchar(50) DEFAULT NULL, - `user_agent` varchar(200) DEFAULT NULL, - `java_method` varchar(512) NOT NULL DEFAULT '', - `java_method_args` varchar(8000) DEFAULT '', - `start_time` datetime NOT NULL, - `duration` int(11) NOT NULL, - `result_code` int(11) NOT NULL DEFAULT '0', - `result_msg` varchar(512) DEFAULT '', - `result_data` varchar(4000) DEFAULT '', - `creator` varchar(64) DEFAULT '', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updater` varchar(64) DEFAULT '', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `deleted` bit(1) NOT NULL DEFAULT '0', - "tenant_id" bigint not null default '0', - PRIMARY KEY (`id`) -) COMMENT ='æ“作日志记录'; - -CREATE TABLE IF NOT EXISTS "sys_user" ( - "id" bigint not null GENERATED BY DEFAULT AS IDENTITY, - "username" varchar(30) not null, - "password" varchar(100) not null default '', - "nickname" varchar(30) not null, - "remark" varchar(500) default null, - "dept_id" bigint default null, - "post_ids" varchar(255) default null, - "email" varchar(50) default '', - "mobile" varchar(11) default '', - "sex" tinyint default '0', - "avatar" varchar(100) default '', - "status" tinyint not null default '0', - "login_ip" varchar(50) default '', - "login_date" timestamp default null, - "creator" varchar(64) default '', - "create_time" timestamp not null default current_timestamp, - "updater" varchar(64) default '', - "update_time" timestamp not null default current_timestamp, - "deleted" bit not null default false, - "tenant_id" bigint not null default '0', - primary key ("id") -) comment '用户信æ¯è¡¨'; - -CREATE TABLE IF NOT EXISTS "inf_api_access_log" ( - "id" bigint not null GENERATED BY DEFAULT AS IDENTITY, - "trace_id" varchar(64) not null default '', - "user_id" bigint not null default '0', - "user_type" tinyint not null default '0', - "application_name" varchar(50) not null, - "request_method" varchar(16) not null default '', - "request_url" varchar(255) not null default '', - "request_params" varchar(8000) not null default '', - "user_ip" varchar(50) not null, - "user_agent" varchar(512) not null, - "begin_time" timestamp not null, - "end_time" timestamp not null, - "duration" integer not null, - "result_code" integer not null default '0', - "result_msg" varchar(512) default '', - "creator" varchar(64) default '', - "create_time" timestamp not null default current_timestamp, - "updater" varchar(64) default '', - "update_time" timestamp not null default current_timestamp, - "deleted" bit not null default false, - "tenant_id" bigint not null default '0', - primary key ("id") -) COMMENT 'API 访问日志表'; - -CREATE TABLE IF NOT EXISTS "inf_api_error_log" ( - "id" bigint not null GENERATED BY DEFAULT AS IDENTITY, - "trace_id" varchar(64) not null, - "user_id" bigint not null default '0', - "user_type" tinyint not null default '0', - "application_name" varchar(50) not null, - "request_method" varchar(16) not null, - "request_url" varchar(255) not null, - "request_params" varchar(8000) not null, - "user_ip" varchar(50) not null, - "user_agent" varchar(512) not null, - "exception_time" timestamp not null, - "exception_name" varchar(128) not null default '', - "exception_message" clob not null, - "exception_root_cause_message" clob not null, - "exception_stack_trace" clob not null, - "exception_class_name" varchar(512) not null, - "exception_file_name" varchar(512) not null, - "exception_method_name" varchar(512) not null, - "exception_line_number" integer not null, - "process_status" tinyint not null, - "process_time" timestamp default null, - "process_user_id" bigint default '0', - "creator" varchar(64) default '', - "create_time" timestamp not null default current_timestamp, - "updater" varchar(64) default '', - "update_time" timestamp not null default current_timestamp, - "deleted" bit not null default false, - "tenant_id" bigint not null default '0', - primary key ("id") -) COMMENT '系统异常日志'; - -CREATE TABLE IF NOT EXISTS "sys_sms_channel" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "signature" varchar(10) NOT NULL, - "code" varchar(63) NOT NULL, - "status" tinyint NOT NULL, - "remark" varchar(255) DEFAULT NULL, - "api_key" varchar(63) NOT NULL, - "api_secret" varchar(63) DEFAULT NULL, - "callback_url" varchar(255) DEFAULT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '短信渠é“'; - -CREATE TABLE IF NOT EXISTS "sys_sms_template" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "type" tinyint NOT NULL, - "status" tinyint NOT NULL, - "code" varchar(63) NOT NULL, - "name" varchar(63) NOT NULL, - "content" varchar(255) NOT NULL, - "params" varchar(255) NOT NULL, - "remark" varchar(255) DEFAULT NULL, - "api_template_id" varchar(63) NOT NULL, - "channel_id" bigint NOT NULL, - "channel_code" varchar(63) NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '短信模æ¿'; - -CREATE TABLE IF NOT EXISTS "sys_sms_log" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "channel_id" bigint NOT NULL, - "channel_code" varchar(63) NOT NULL, - "template_id" bigint NOT NULL, - "template_code" varchar(63) NOT NULL, - "template_type" tinyint NOT NULL, - "template_content" varchar(255) NOT NULL, - "template_params" varchar(255) NOT NULL, - "api_template_id" varchar(63) NOT NULL, - "mobile" varchar(11) NOT NULL, - "user_id" bigint DEFAULT '0', - "user_type" tinyint DEFAULT '0', - "send_status" tinyint NOT NULL DEFAULT '0', - "send_time" timestamp DEFAULT NULL, - "send_code" int DEFAULT NULL, - "send_msg" varchar(255) DEFAULT NULL, - "api_send_code" varchar(63) DEFAULT NULL, - "api_send_msg" varchar(255) DEFAULT NULL, - "api_request_id" varchar(255) DEFAULT NULL, - "api_serial_no" varchar(255) DEFAULT NULL, - "receive_status" tinyint NOT NULL DEFAULT '0', - "receive_time" timestamp DEFAULT NULL, - "api_receive_code" varchar(63) DEFAULT NULL, - "api_receive_msg" varchar(255) DEFAULT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '短信日志'; - -CREATE TABLE IF NOT EXISTS "sys_error_code" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "type" tinyint NOT NULL DEFAULT '0', - "application_name" varchar(50) NOT NULL, - "code" int NOT NULL DEFAULT '0', - "message" varchar(512) NOT NULL DEFAULT '', - "memo" varchar(512) DEFAULT '', - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '错误ç è¡¨'; - -CREATE TABLE IF NOT EXISTS "sys_social_user" ( - "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "user_id" bigint NOT NULL, - "user_type" tinyint NOT NULL DEFAULT '0', - "type" tinyint NOT NULL, - "openid" varchar(32) NOT NULL, - "token" varchar(256) DEFAULT NULL, - "union_id" varchar(32) NOT NULL, - "raw_token_info" varchar(1024) NOT NULL, - "nickname" varchar(32) NOT NULL, - "avatar" varchar(255) DEFAULT NULL, - "raw_user_info" varchar(1024) NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '社交用户'; - -CREATE TABLE IF NOT EXISTS "sys_tenant" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar(63) NOT NULL, - "contact_name" varchar(255) NOT NULL, - "contact_mobile" varchar(255), - "status" tinyint NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '租户'; - - CREATE TABLE IF NOT EXISTS "pay_merchant" ( "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthCheckCodeReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthCheckCodeReqVO.java index 63b113e0af..dd050147e4 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthCheckCodeReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthCheckCodeReqVO.java @@ -34,7 +34,7 @@ public class AppAuthCheckCodeReqVO { @Pattern(regexp = "^[0-9]+$", message = "手机验è¯ç å¿…须都是数字") private String code; - @ApiModelProperty(value = "å‘é€åœºæ™¯", example = "1", notes = "对应 MbrSmsSceneEnum 枚举") + @ApiModelProperty(value = "å‘é€åœºæ™¯", example = "1", notes = "对应 SmsSceneEnum 枚举") @NotNull(message = "å‘é€åœºæ™¯ä¸èƒ½ä¸ºç©º") @InEnum(SmsSceneEnum.class) private Integer scene; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSendSmsReqVO.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSendSmsReqVO.java index 91656b1d49..b8c4824d19 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSendSmsReqVO.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSendSmsReqVO.java @@ -19,7 +19,7 @@ public class AppAuthSendSmsReqVO { @Mobile private String mobile; - @ApiModelProperty(value = "å‘é€åœºæ™¯", example = "1", notes = "对应 MbrSmsSceneEnum 枚举") + @ApiModelProperty(value = "å‘é€åœºæ™¯", example = "1", notes = "对应 SmsSceneEnum 枚举") @NotNull(message = "å‘é€åœºæ™¯ä¸èƒ½ä¸ºç©º") @InEnum(SmsSceneEnum.class) private Integer scene; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java index 89a24de60f..5fd8db9b9a 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java @@ -281,9 +281,8 @@ public class MemberAuthServiceImpl implements MemberAuthService { MemberUserDO userDO = checkOldPassword(userId, reqVO.getOldPassword()); // æ›´æ–°ç”¨æˆ·å¯†ç  - MemberUserDO mbrUserDO = MemberUserDO.builder().id(userDO.getId()) - .password(passwordEncoder.encode(reqVO.getPassword())).build(); - userMapper.updateById(mbrUserDO); + userMapper.updateById(MemberUserDO.builder().id(userDO.getId()) + .password(passwordEncoder.encode(reqVO.getPassword())).build()); } @Override @@ -296,10 +295,8 @@ public class MemberAuthServiceImpl implements MemberAuthService { getClientIP())); // æ›´æ–°å¯†ç  - MemberUserDO mbrUserDO = MemberUserDO.builder().build(); - mbrUserDO.setId(userDO.getId()); - mbrUserDO.setPassword(passwordEncoder.encode(reqVO.getPassword())); - userMapper.updateById(mbrUserDO); + userMapper.updateById(MemberUserDO.builder().id(userDO.getId()) + .password(passwordEncoder.encode(reqVO.getPassword())).build()); } @Override diff --git a/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceTest.java b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceTest.java index 7e9b4648f1..3b17af712b 100644 --- a/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceTest.java +++ b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceTest.java @@ -53,7 +53,7 @@ public class MemberAuthServiceTest extends BaseDbAndRedisUnitTest { @MockBean private PasswordEncoder passwordEncoder; @Resource - private MemberUserMapper mbrUserMapper; + private MemberUserMapper memberUserMapper; @Resource private MemberAuthServiceImpl authService; @@ -61,7 +61,7 @@ public class MemberAuthServiceTest extends BaseDbAndRedisUnitTest { public void testUpdatePassword_success(){ // 准备傿•° MemberUserDO userDO = randomUserDO(); - mbrUserMapper.insert(userDO); + memberUserMapper.insert(userDO); // æ–°å¯†ç  String newPassword = randomString(); @@ -79,14 +79,14 @@ public class MemberAuthServiceTest extends BaseDbAndRedisUnitTest { // æ›´æ–°ç”¨æˆ·å¯†ç  authService.updatePassword(userDO.getId(), reqVO); - assertEquals(mbrUserMapper.selectById(userDO.getId()).getPassword(),newPassword); + assertEquals(memberUserMapper.selectById(userDO.getId()).getPassword(),newPassword); } @Test public void testResetPassword_success(){ // 准备傿•° MemberUserDO userDO = randomUserDO(); - mbrUserMapper.insert(userDO); + memberUserMapper.insert(userDO); // éšæœºå¯†ç  String password = randomNumbers(11); @@ -103,7 +103,7 @@ public class MemberAuthServiceTest extends BaseDbAndRedisUnitTest { reqVO.setCode(code); authService.resetPassword(reqVO); - assertEquals(mbrUserMapper.selectById(userDO.getId()).getPassword(),password); + assertEquals(memberUserMapper.selectById(userDO.getId()).getPassword(),password); } diff --git a/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImplTest.java b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImplTest.java index 59a771047c..f470e95ae8 100644 --- a/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImplTest.java +++ b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImplTest.java @@ -37,7 +37,7 @@ import static org.mockito.Mockito.*; public class MemberUserServiceImplTest extends BaseDbAndRedisUnitTest { @Resource - private MemberUserServiceImpl mbrUserService; + private MemberUserServiceImpl memberUserService; @Resource private StringRedisTemplate stringRedisTemplate; @@ -67,9 +67,9 @@ public class MemberUserServiceImplTest extends BaseDbAndRedisUnitTest { String newNickName = randomString(); // 调用接å£ä¿®æ”¹æ˜µç§° - mbrUserService.updateUserNickname(userDO.getId(),newNickName); + memberUserService.updateUserNickname(userDO.getId(),newNickName); // 查询新修改åŽçš„æ˜µç§° - String nickname = mbrUserService.getUser(userDO.getId()).getNickname(); + String nickname = memberUserService.getUser(userDO.getId()).getNickname(); // 断言 assertEquals(newNickName,nickname); } @@ -88,7 +88,7 @@ public class MemberUserServiceImplTest extends BaseDbAndRedisUnitTest { String avatar = randomString(); when(fileCoreService.createFile(anyString(), eq(avatarFileBytes))).thenReturn(avatar); // 调用 - String str = mbrUserService.updateUserAvatar(userId, avatarFile); + String str = memberUserService.updateUserAvatar(userId, avatarFile); // 断言 assertEquals(avatar, str); } @@ -119,9 +119,9 @@ public class MemberUserServiceImplTest extends BaseDbAndRedisUnitTest { reqVO.setCode(newCode); reqVO.setOldMobile(oldMobile); reqVO.setOldCode(oldCode); - mbrUserService.updateUserMobile(userDO.getId(),reqVO); + memberUserService.updateUserMobile(userDO.getId(),reqVO); - assertEquals(mbrUserService.getUser(userDO.getId()).getMobile(),newMobile); + assertEquals(memberUserService.getUser(userDO.getId()).getMobile(),newMobile); } // ========== éšæœºå¯¹è±¡ ========== diff --git a/yudao-module-member/yudao-module-member-impl/src/test/resources/application-unit-test.yaml b/yudao-module-member/yudao-module-member-impl/src/test/resources/application-unit-test.yaml index 237068e6e5..212a9312be 100644 --- a/yudao-module-member/yudao-module-member-impl/src/test/resources/application-unit-test.yaml +++ b/yudao-module-member/yudao-module-member-impl/src/test/resources/application-unit-test.yaml @@ -45,5 +45,7 @@ mybatis: yudao: info: base-package: cn.iocoder.yudao.module.member.dal.mysql + member-package: cn.iocoder.yudao.module.member # TODO èŠ‹è‰¿ï¼šè¦æ¸…ç†æŽ‰ + system-package: cn.iocoder.yudao.module.system # TODO èŠ‹è‰¿ï¼šè¦æ¸…ç†æŽ‰ core-service: base-package: cn.iocoder.yudao.module.member.dal.mysql # TODO èŠ‹è‰¿ï¼šè¦æ¸…ç†æŽ‰ diff --git a/yudao-module-member/yudao-module-member-impl/src/test/resources/sql/clean.sql b/yudao-module-member/yudao-module-member-impl/src/test/resources/sql/clean.sql index 9775e24542..92f559dc1d 100644 --- a/yudao-module-member/yudao-module-member-impl/src/test/resources/sql/clean.sql +++ b/yudao-module-member/yudao-module-member-impl/src/test/resources/sql/clean.sql @@ -1,2 +1 @@ --- mbr 开头的 DB DELETE FROM "member_user"; diff --git a/yudao-module-member/yudao-module-member-impl/src/test/resources/sql/create_tables.sql b/yudao-module-member/yudao-module-member-impl/src/test/resources/sql/create_tables.sql index 98d3d2bc18..85925f30b2 100644 --- a/yudao-module-member/yudao-module-member-impl/src/test/resources/sql/create_tables.sql +++ b/yudao-module-member/yudao-module-member-impl/src/test/resources/sql/create_tables.sql @@ -1,4 +1,3 @@ --- mbr 开头的 DB CREATE TABLE IF NOT EXISTS "member_user" ( "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY COMMENT 'ç¼–å·', "nickname" varchar(30) NOT NULL DEFAULT '' COMMENT '用户昵称', diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java index 2acc39fcc1..8c45215a4e 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java @@ -50,7 +50,7 @@ public class AuthController { @Resource private PermissionService permissionService; @Resource - private SocialUserService socialCoreService; + private SocialUserService socialUserService; @PostMapping("/login") @ApiOperation("使用账å·å¯†ç ç™»å½•") @@ -102,7 +102,7 @@ public class AuthController { }) public CommonResult socialAuthRedirect(@RequestParam("type") Integer type, @RequestParam("redirectUri") String redirectUri) { - return CommonResult.success(socialCoreService.getAuthorizeUrl(type, redirectUri)); + return CommonResult.success(socialUserService.getAuthorizeUrl(type, redirectUri)); } @PostMapping("/social-login") @@ -133,7 +133,7 @@ public class AuthController { @DeleteMapping("/social-unbind") @ApiOperation("å–æ¶ˆç¤¾äº¤ç»‘定") public CommonResult socialUnbind(@RequestBody AuthSocialUnbindReqVO reqVO) { - socialCoreService.unbindSocialUser(getLoginUserId(), UserTypeEnum.ADMIN.getValue(), reqVO.getType(), reqVO.getUnionId()); + socialUserService.unbindSocialUser(getLoginUserId(), UserTypeEnum.ADMIN.getValue(), reqVO.getType(), reqVO.getUnionId()); return CommonResult.success(true); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/UserSessionController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/UserSessionController.java index 0b0f5096e9..00150fd8b5 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/UserSessionController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/UserSessionController.java @@ -3,9 +3,9 @@ package cn.iocoder.yudao.module.system.controller.admin.auth; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.session.UserSessionPageItemRespVO; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.session.UserSessionPageReqVO; import cn.iocoder.yudao.module.system.convert.auth.UserSessionConvert; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.auth.UserSessionDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; import cn.iocoder.yudao.module.system.service.auth.UserSessionService; -import cn.iocoder.yudao.module.system.dal.dataobject.auth.SysUserSessionDO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -45,12 +45,12 @@ public class UserSessionController { @PreAuthorize("@ss.hasPermission('system:user-session:page')") public CommonResult> getUserSessionPage(@Validated UserSessionPageReqVO reqVO) { // 获得 Session 分页 - PageResult pageResult = userSessionService.getUserSessionPage(reqVO); + PageResult pageResult = userSessionService.getUserSessionPage(reqVO); // 获得拼接需è¦çš„æ•°æ® Map userMap = userService.getUserMap( - convertList(pageResult.getList(), SysUserSessionDO::getUserId)); - Map deptMap = deptService.getDeptMap( + convertList(pageResult.getList(), UserSessionDO::getUserId)); + Map deptMap = deptService.getDeptMap( convertList(userMap.values(), AdminUserDO::getDeptId)); // 拼接结果返回 List sessionList = new ArrayList<>(pageResult.getList().size()); diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialBindReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialBindReqVO.java index 5debf6b205..2a83329d81 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialBindReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialBindReqVO.java @@ -19,7 +19,7 @@ import javax.validation.constraints.NotNull; @Builder public class AuthSocialBindReqVO { - @ApiModelProperty(value = "社交平å°çš„类型", required = true, example = "10", notes = "å‚è§ SysUserSocialTypeEnum 枚举值") + @ApiModelProperty(value = "社交平å°çš„类型", required = true, example = "10", notes = "å‚è§ UserSocialTypeEnum 枚举值") @InEnum(SocialTypeEnum.class) @NotNull(message = "社交平å°çš„类型ä¸èƒ½ä¸ºç©º") private Integer type; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialLogin2ReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialLogin2ReqVO.java index 90ce2cf88a..725a52d8cb 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialLogin2ReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialLogin2ReqVO.java @@ -21,7 +21,7 @@ import javax.validation.constraints.Pattern; @Builder public class AuthSocialLogin2ReqVO { - @ApiModelProperty(value = "社交平å°çš„类型", required = true, example = "10", notes = "å‚è§ SysUserSocialTypeEnum 枚举值") + @ApiModelProperty(value = "社交平å°çš„类型", required = true, example = "10", notes = "å‚è§ UserSocialTypeEnum 枚举值") @InEnum(SocialTypeEnum.class) @NotNull(message = "社交平å°çš„类型ä¸èƒ½ä¸ºç©º") private Integer type; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialLoginReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialLoginReqVO.java index bc1247d678..4f51bcb989 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialLoginReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialLoginReqVO.java @@ -19,7 +19,7 @@ import javax.validation.constraints.NotNull; @Builder public class AuthSocialLoginReqVO { - @ApiModelProperty(value = "社交平å°çš„类型", required = true, example = "10", notes = "å‚è§ SysUserSocialTypeEnum 枚举值") + @ApiModelProperty(value = "社交平å°çš„类型", required = true, example = "10", notes = "å‚è§ UserSocialTypeEnum 枚举值") @InEnum(SocialTypeEnum.class) @NotNull(message = "社交平å°çš„类型ä¸èƒ½ä¸ºç©º") private Integer type; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialUnbindReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialUnbindReqVO.java index eb43a2d27d..774602681b 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialUnbindReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSocialUnbindReqVO.java @@ -19,7 +19,7 @@ import javax.validation.constraints.NotNull; @Builder public class AuthSocialUnbindReqVO { - @ApiModelProperty(value = "社交平å°çš„类型", required = true, example = "10", notes = "å‚è§ SysUserSocialTypeEnum 枚举值") + @ApiModelProperty(value = "社交平å°çš„类型", required = true, example = "10", notes = "å‚è§ UserSocialTypeEnum 枚举值") @InEnum(SocialTypeEnum.class) @NotNull(message = "社交平å°çš„类型ä¸èƒ½ä¸ºç©º") private Integer type; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/DeptController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/DeptController.java index 1a4da72be8..0a292e243c 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/DeptController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/DeptController.java @@ -4,7 +4,7 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.*; import cn.iocoder.yudao.module.system.convert.dept.DeptConvert; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; import cn.iocoder.yudao.module.system.service.dept.DeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -58,8 +58,8 @@ public class DeptController { @ApiOperation("获å–部门列表") @PreAuthorize("@ss.hasPermission('system:dept:query')") public CommonResult> listDepts(DeptListReqVO reqVO) { - List list = deptService.getSimpleDepts(reqVO); - list.sort(Comparator.comparing(SysDeptDO::getSort)); + List list = deptService.getSimpleDepts(reqVO); + list.sort(Comparator.comparing(DeptDO::getSort)); return success(DeptConvert.INSTANCE.convertList(list)); } @@ -69,9 +69,9 @@ public class DeptController { // 获得部门列表,åªè¦å¼€å¯çжæ€çš„ DeptListReqVO reqVO = new DeptListReqVO(); reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); - List list = deptService.getSimpleDepts(reqVO); + List list = deptService.getSimpleDepts(reqVO); // 排åºåŽï¼Œè¿”回给å‰ç«¯ - list.sort(Comparator.comparing(SysDeptDO::getSort)); + list.sort(Comparator.comparing(DeptDO::getSort)); return success(DeptConvert.INSTANCE.convertList02(list)); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/PostController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/PostController.java index e5b179e323..5275dc0c43 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/PostController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/PostController.java @@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.*; import cn.iocoder.yudao.module.system.convert.dept.PostConvert; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO; import cn.iocoder.yudao.module.system.service.dept.PostService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -72,9 +72,9 @@ public class PostController { @ApiOperation(value = "获å–å²—ä½ç²¾ç®€ä¿¡æ¯åˆ—表", notes = "åªåŒ…å«è¢«å¼€å¯çš„å²—ä½ï¼Œä¸»è¦ç”¨äºŽå‰ç«¯çš„下拉选项") public CommonResult> getSimplePosts() { // 获得岗ä½åˆ—表,åªè¦å¼€å¯çжæ€çš„ - List list = postService.getPosts(null, Collections.singleton(CommonStatusEnum.ENABLE.getStatus())); + List list = postService.getPosts(null, Collections.singleton(CommonStatusEnum.ENABLE.getStatus())); // 排åºåŽï¼Œè¿”回给å‰ç«¯ - list.sort(Comparator.comparing(SysPostDO::getSort)); + list.sort(Comparator.comparing(PostDO::getSort)); return success(PostConvert.INSTANCE.convertList02(list)); } @@ -90,7 +90,7 @@ public class PostController { @PreAuthorize("@ss.hasPermission('system:post:export')") @OperateLog(type = EXPORT) public void export(HttpServletResponse response, @Validated PostExportReqVO reqVO) throws IOException { - List posts = postService.getPosts(reqVO); + List posts = postService.getPosts(reqVO); List data = PostConvert.INSTANCE.convertList03(posts); // 输出 ExcelUtils.write(response, "岗使•°æ®.xls", "å²—ä½åˆ—表", PostExcelVO.class, data); diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptBaseVO.java index 0661a54f91..2609f90678 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptBaseVO.java @@ -40,7 +40,7 @@ public class DeptBaseVO { @Size(max = 50, message = "邮箱长度ä¸èƒ½è¶…过50个字符") private String email; - @ApiModelProperty(value = "状æ€", required = true, example = "1", notes = "è§ SysCommonStatusEnum 枚举") + @ApiModelProperty(value = "状æ€", required = true, example = "1", notes = "è§ CommonStatusEnum 枚举") @NotNull(message = "状æ€ä¸èƒ½ä¸ºç©º") // @InEnum(value = CommonStatusEnum.class, message = "修改状æ€å¿…须是 {value}") private Integer status; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptListReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptListReqVO.java index 171788b59e..c4ff552438 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptListReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptListReqVO.java @@ -11,7 +11,7 @@ public class DeptListReqVO { @ApiModelProperty(value = "部门åç§°", example = "芋é“", notes = "模糊匹é…") private String name; - @ApiModelProperty(value = "展示状æ€", example = "1", notes = "å‚è§ SysCommonStatusEnum 枚举类") + @ApiModelProperty(value = "展示状æ€", example = "1", notes = "å‚è§ CommonStatusEnum 枚举类") private Integer status; } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptRespVO.java index db60a3107c..072df230a7 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptRespVO.java @@ -15,7 +15,7 @@ public class DeptRespVO extends DeptBaseVO { @ApiModelProperty(value = "部门编å·", required = true, example = "1024") private Long id; - @ApiModelProperty(value = "状æ€", required = true, example = "1", notes = "å‚è§ SysCommonStatusEnum 枚举类") + @ApiModelProperty(value = "状æ€", required = true, example = "1", notes = "å‚è§ CommonStatusEnum 枚举类") private Integer status; @ApiModelProperty(value = "创建时间", required = true, example = "时间戳格å¼") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostBaseVO.java index 7000396466..98c1bf212e 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostBaseVO.java @@ -28,7 +28,7 @@ public class PostBaseVO { @NotNull(message = "显示顺åºä¸èƒ½ä¸ºç©º") private Integer sort; - @ApiModelProperty(value = "状æ€", required = true, example = "1", notes = "å‚è§ SysCommonStatusEnum 枚举类") + @ApiModelProperty(value = "状æ€", required = true, example = "1", notes = "å‚è§ CommonStatusEnum 枚举类") private Integer status; @ApiModelProperty(value = "备注", example = "å¿«ä¹çš„备注") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostExportReqVO.java index 182449d952..735bfcce19 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostExportReqVO.java @@ -4,7 +4,7 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -@ApiModel(value = "管ç†åŽå° - å²—ä½å¯¼å‡º Request VO", description = "傿•°å’Œ SysPostExcelVO 是一致的") +@ApiModel(value = "管ç†åŽå° - å²—ä½å¯¼å‡º Request VO", description = "傿•°å’Œ PostExcelVO 是一致的") @Data public class PostExportReqVO { @@ -14,7 +14,7 @@ public class PostExportReqVO { @ApiModelProperty(value = "å²—ä½åç§°", example = "芋é“", notes = "模糊匹é…") private String name; - @ApiModelProperty(value = "展示状æ€", example = "1", notes = "å‚è§ SysCommonStatusEnum 枚举类") + @ApiModelProperty(value = "展示状æ€", example = "1", notes = "å‚è§ CommonStatusEnum 枚举类") private Integer status; } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostListReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostListReqVO.java index a1369f20f7..58ba469e12 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostListReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostListReqVO.java @@ -13,7 +13,7 @@ public class PostListReqVO extends PostBaseVO { @ApiModelProperty(value = "å²—ä½åç§°", example = "芋é“", notes = "模糊匹é…") private String name; - @ApiModelProperty(value = "展示状æ€", example = "1", notes = "å‚è§ SysCommonStatusEnum 枚举类") + @ApiModelProperty(value = "展示状æ€", example = "1", notes = "å‚è§ CommonStatusEnum 枚举类") private Integer status; } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostPageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostPageReqVO.java index 94c6b9eaab..be9ebeab49 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostPageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/post/PostPageReqVO.java @@ -17,7 +17,7 @@ public class PostPageReqVO extends PageParam { @ApiModelProperty(value = "å²—ä½åç§°", example = "芋é“", notes = "模糊匹é…") private String name; - @ApiModelProperty(value = "展示状æ€", example = "1", notes = "å‚è§ SysCommonStatusEnum 枚举类") + @ApiModelProperty(value = "展示状æ€", example = "1", notes = "å‚è§ CommonStatusEnum 枚举类") private Integer status; } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictDataController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictDataController.java index 08fca2c476..124e5fd054 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictDataController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictDataController.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.controller.admin.dict; -import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictDataDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; @@ -62,7 +62,7 @@ public class DictDataController { @ApiOperation(value = "获得全部字典数æ®åˆ—表", notes = "一般用于管ç†åŽå°ç¼“存字典数æ®åœ¨æœ¬åœ°") // 无需添加æƒé™è®¤è¯ï¼Œå› ä¸ºå‰ç«¯å…¨å±€éƒ½éœ€è¦ public CommonResult> getSimpleDictDatas() { - List list = dictDataService.getDictDatas(); + List list = dictDataService.getDictDatas(); return success(DictDataConvert.INSTANCE.convertList(list)); } @@ -86,7 +86,7 @@ public class DictDataController { @PreAuthorize("@ss.hasPermission('system:dict:export')") @OperateLog(type = EXPORT) public void export(HttpServletResponse response, @Valid DictDataExportReqVO reqVO) throws IOException { - List list = dictDataService.getDictDatas(reqVO); + List list = dictDataService.getDictDatas(reqVO); List data = DictDataConvert.INSTANCE.convertList02(list); // 输出 ExcelUtils.write(response, "字典数æ®.xls", "æ•°æ®åˆ—表", DictDataExcelVO.class, data); diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataBaseVO.java index 0292f84372..2cefd83cb8 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataBaseVO.java @@ -33,9 +33,9 @@ public class DictDataBaseVO { @Size(max = 100, message = "字典类型长度ä¸èƒ½è¶…过100个字符") private String dictType; - @ApiModelProperty(value = "状æ€", required = true, example = "1", notes = "è§ SysCommonStatusEnum 枚举") + @ApiModelProperty(value = "状æ€", required = true, example = "1", notes = "è§ CommonStatusEnum 枚举") @NotNull(message = "状æ€ä¸èƒ½ä¸ºç©º") -// @InEnum(value = SysCommonStatusEnum.class, message = "修改状æ€å¿…须是 {value}") +// @InEnum(value = CommonStatusEnum.class, message = "修改状æ€å¿…须是 {value}") private Integer status; @ApiModelProperty(value = "备注", example = "我是一个角色") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataExportReqVO.java index 142d45017a..90290cbdbc 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataExportReqVO.java @@ -18,7 +18,7 @@ public class DictDataExportReqVO { @Size(max = 100, message = "字典类型类型长度ä¸èƒ½è¶…过100个字符") private String dictType; - @ApiModelProperty(value = "展示状æ€", example = "1", notes = "å‚è§ SysCommonStatusEnum 枚举类") + @ApiModelProperty(value = "展示状æ€", example = "1", notes = "å‚è§ CommonStatusEnum 枚举类") private Integer status; } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataPageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataPageReqVO.java index a095aac087..9df4605df6 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataPageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataPageReqVO.java @@ -21,7 +21,7 @@ public class DictDataPageReqVO extends PageParam { @Size(max = 100, message = "字典类型类型长度ä¸èƒ½è¶…过100个字符") private String dictType; - @ApiModelProperty(value = "展示状æ€", example = "1", notes = "å‚è§ SysCommonStatusEnum 枚举类") + @ApiModelProperty(value = "展示状æ€", example = "1", notes = "å‚è§ CommonStatusEnum 枚举类") private Integer status; } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeExportReqVO.java index b2f3331b8d..1043a1e72a 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypeExportReqVO.java @@ -19,7 +19,7 @@ public class DictTypeExportReqVO { @ApiModelProperty(value = "字典类型", example = "sys_common_sex", notes = "模糊匹é…") private String type; - @ApiModelProperty(value = "展示状æ€", example = "1", notes = "å‚è§ SysCommonStatusEnum 枚举类") + @ApiModelProperty(value = "展示状æ€", example = "1", notes = "å‚è§ CommonStatusEnum 枚举类") private Integer status; @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypePageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypePageReqVO.java index 1c231b0d24..84635621c4 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypePageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/type/DictTypePageReqVO.java @@ -24,7 +24,7 @@ public class DictTypePageReqVO extends PageParam { @Size(max = 100, message = "字典类型类型长度ä¸èƒ½è¶…过100个字符") private String type; - @ApiModelProperty(value = "展示状æ€", example = "1", notes = "å‚è§ SysCommonStatusEnum 枚举类") + @ApiModelProperty(value = "展示状æ€", example = "1", notes = "å‚è§ CommonStatusEnum 枚举类") private Integer status; @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodePageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodePageReqVO.java index 70eeda41ac..ff3d09833c 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodePageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodePageReqVO.java @@ -18,7 +18,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ @ToString(callSuper = true) public class ErrorCodePageReqVO extends PageParam { - @ApiModelProperty(value = "错误ç ç±»åž‹", example = "1", notes = "å‚è§ SysErrorCodeTypeEnum 枚举类") + @ApiModelProperty(value = "错误ç ç±»åž‹", example = "1", notes = "å‚è§ ErrorCodeTypeEnum 枚举类") private Integer type; @ApiModelProperty(value = "应用å", example = "dashboard") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodeRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodeRespVO.java index c79b6bf8c2..8b5cd3e725 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodeRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodeRespVO.java @@ -17,7 +17,7 @@ public class ErrorCodeRespVO extends ErrorCodeBaseVO { @ApiModelProperty(value = "错误ç ç¼–å·", required = true, example = "1024") private Long id; - @ApiModelProperty(value = "错误ç ç±»åž‹", required = true, example = "1", notes = "å‚è§ SysErrorCodeTypeEnum 枚举类") + @ApiModelProperty(value = "错误ç ç±»åž‹", required = true, example = "1", notes = "å‚è§ ErrorCodeTypeEnum 枚举类") private Integer type; @ApiModelProperty(value = "创建时间", required = true) diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/LoginLogController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/LoginLogController.java index 9890247c8b..7cb3ac4b7a 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/LoginLogController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/LoginLogController.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.controller.admin.logger; -import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysLoginLogDO; +import cn.iocoder.yudao.module.system.dal.dataobject.logger.LoginLogDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; @@ -40,7 +40,7 @@ public class LoginLogController { @ApiOperation("获得登录日志分页列表") @PreAuthorize("@ss.hasPermission('system:login-log:query')") public CommonResult> getLoginLogPage(@Valid LoginLogPageReqVO reqVO) { - PageResult page = loginLogService.getLoginLogPage(reqVO); + PageResult page = loginLogService.getLoginLogPage(reqVO); return CommonResult.success(LoginLogConvert.INSTANCE.convertPage(page)); } @@ -49,7 +49,7 @@ public class LoginLogController { @PreAuthorize("@ss.hasPermission('system:login-log:export')") @OperateLog(type = EXPORT) public void exportLoginLog(HttpServletResponse response, @Valid LoginLogExportReqVO reqVO) throws IOException { - List list = loginLogService.getLoginLogList(reqVO); + List list = loginLogService.getLoginLogList(reqVO); // æ‹¼æŽ¥æ•°æ® List data = LoginLogConvert.INSTANCE.convertList(list); // 输出 diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogBaseVO.java index e996570845..e8101f6e97 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogBaseVO.java @@ -15,7 +15,7 @@ import javax.validation.constraints.Size; @Data public class LoginLogBaseVO { - @ApiModelProperty(value = "日志类型", required = true, example = "1", notes = "å‚è§ SysLoginLogTypeEnum 枚举类") + @ApiModelProperty(value = "日志类型", required = true, example = "1", notes = "å‚è§ LoginLogTypeEnum 枚举类") @NotNull(message = "日志类型ä¸èƒ½ä¸ºç©º") private Integer logType; @@ -28,7 +28,7 @@ public class LoginLogBaseVO { @Size(max = 30, message = "用户账å·é•¿åº¦ä¸èƒ½è¶…过30个字符") private String username; - @ApiModelProperty(value = "登录结果", required = true, example = "1", notes = "å‚è§ SysLoginResultEnum 枚举类") + @ApiModelProperty(value = "登录结果", required = true, example = "1", notes = "å‚è§ LoginResultEnum 枚举类") @NotNull(message = "登录结果ä¸èƒ½ä¸ºç©º") private Integer result; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogBaseVO.java index e66a20e3f2..33b3670392 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogBaseVO.java @@ -31,7 +31,7 @@ public class OperateLogBaseVO { @NotEmpty(message = "æ“作å") private String name; - @ApiModelProperty(value = "æ“作分类", required = true, example = "1", notes = "å‚è§ SysOperateLogTypeEnum 枚举类") + @ApiModelProperty(value = "æ“作分类", required = true, example = "1", notes = "å‚è§ OperateLogTypeEnum 枚举类") @NotNull(message = "æ“作分类ä¸èƒ½ä¸ºç©º") private Integer type; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogExportReqVO.java index 52dc5d99b5..90adb822e5 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogExportReqVO.java @@ -19,7 +19,7 @@ public class OperateLogExportReqVO { @ApiModelProperty(value = "用户昵称", example = "芋é“", notes = "模拟匹é…") private String userNickname; - @ApiModelProperty(value = "æ“作分类", example = "1", notes = "å‚è§ SysOperateLogTypeEnum 枚举类") + @ApiModelProperty(value = "æ“作分类", example = "1", notes = "å‚è§ OperateLogTypeEnum 枚举类") private Integer type; @ApiModelProperty(value = "æ“作状æ€", example = "true") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogPageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogPageReqVO.java index f94d979f4a..0741abd881 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogPageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogPageReqVO.java @@ -20,7 +20,7 @@ public class OperateLogPageReqVO extends PageParam { @ApiModelProperty(value = "用户昵称", example = "芋é“", notes = "模拟匹é…") private String userNickname; - @ApiModelProperty(value = "æ“作分类", example = "1", notes = "å‚è§ SysOperateLogTypeEnum 枚举类") + @ApiModelProperty(value = "æ“作分类", example = "1", notes = "å‚è§ OperateLogTypeEnum 枚举类") private Integer type; @ApiModelProperty(value = "æ“作状æ€", example = "true") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/vo/NoticeBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/vo/NoticeBaseVO.java index 48d74dd2bd..a8ecb7758b 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/vo/NoticeBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/vo/NoticeBaseVO.java @@ -26,7 +26,7 @@ public class NoticeBaseVO { @ApiModelProperty(value = "公告内容", required = true, example = "åŠç”Ÿç¼–ç ") private String content; - @ApiModelProperty(value = "状æ€", required = true, example = "1", notes = "å‚è§ SysCommonStatusEnum 枚举类") + @ApiModelProperty(value = "状æ€", required = true, example = "1", notes = "å‚è§ CommonStatusEnum 枚举类") private Integer status; } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/vo/NoticePageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/vo/NoticePageReqVO.java index 570d530053..ba1287c47d 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/vo/NoticePageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/vo/NoticePageReqVO.java @@ -14,7 +14,7 @@ public class NoticePageReqVO extends PageParam { @ApiModelProperty(value = "通知公告åç§°", example = "芋é“", notes = "模糊匹é…") private String title; - @ApiModelProperty(value = "展示状æ€", example = "1", notes = "å‚è§ SysCommonStatusEnum 枚举类") + @ApiModelProperty(value = "展示状æ€", example = "1", notes = "å‚è§ CommonStatusEnum 枚举类") private Integer status; } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuBaseVO.java index 8769f3a1ba..bbed03caa6 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuBaseVO.java @@ -23,7 +23,7 @@ public class MenuBaseVO { @Size(max = 100) private String permission; - @ApiModelProperty(value = "类型", required = true, example = "1", notes = "å‚è§ SysMenuTypeEnum 枚举类") + @ApiModelProperty(value = "类型", required = true, example = "1", notes = "å‚è§ MenuTypeEnum 枚举类") @NotNull(message = "èœå•类型ä¸èƒ½ä¸ºç©º") private Integer type; @@ -46,7 +46,7 @@ public class MenuBaseVO { @Size(max = 200, message = "组件路径ä¸èƒ½è¶…过255个字符") private String component; - @ApiModelProperty(value = "状æ€", required = true, example = "1", notes = "è§ SysCommonStatusEnum 枚举") + @ApiModelProperty(value = "状æ€", required = true, example = "1", notes = "è§ CommonStatusEnum 枚举") @NotNull(message = "状æ€ä¸èƒ½ä¸ºç©º") private Integer status; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuListReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuListReqVO.java index 53b0b46a92..2600fb92b9 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuListReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuListReqVO.java @@ -11,7 +11,7 @@ public class MenuListReqVO { @ApiModelProperty(value = "èœå•åç§°", example = "芋é“", notes = "模糊匹é…") private String name; - @ApiModelProperty(value = "展示状æ€", example = "1", notes = "å‚è§ SysCommonStatusEnum 枚举类") + @ApiModelProperty(value = "展示状æ€", example = "1", notes = "å‚è§ CommonStatusEnum 枚举类") private Integer status; } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuRespVO.java index 9fe9e12f5c..34d70f4f53 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuRespVO.java @@ -19,7 +19,7 @@ public class MenuRespVO extends MenuBaseVO { @ApiModelProperty(value = "èœå•ç¼–å·", required = true, example = "1024") private Long id; - @ApiModelProperty(value = "状æ€", required = true, example = "1", notes = "å‚è§ SysCommonStatusEnum 枚举类") + @ApiModelProperty(value = "状æ€", required = true, example = "1", notes = "å‚è§ CommonStatusEnum 枚举类") private Integer status; @ApiModelProperty(value = "创建时间", required = true, example = "时间戳格å¼") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleDataScopeReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleDataScopeReqVO.java index 0683ba9b81..6adb8c8548 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleDataScopeReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleDataScopeReqVO.java @@ -16,7 +16,7 @@ public class PermissionAssignRoleDataScopeReqVO { @NotNull(message = "角色编å·ä¸èƒ½ä¸ºç©º") private Long roleId; - @ApiModelProperty(value = "æ•°æ®èŒƒå›´", required = true, example = "1", notes = "å‚è§ SysDataScopeEnum 枚举类") + @ApiModelProperty(value = "æ•°æ®èŒƒå›´", required = true, example = "1", notes = "å‚è§ DataScopeEnum 枚举类") @NotNull(message = "æ•°æ®èŒƒå›´ä¸èƒ½ä¸ºç©º") // TODO 这里è¦å¤šä¸€ä¸ªæžšä¸¾æ ¡éªŒ private Integer dataScope; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleBaseVO.java index 3f027f8dc0..66b4d2053f 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleBaseVO.java @@ -28,7 +28,7 @@ public class RoleBaseVO { @NotNull(message = "显示顺åºä¸èƒ½ä¸ºç©º") private Integer sort; - @ApiModelProperty(value = "角色类型", required = true, example = "1", notes = "è§ SysRoleTypeEnum 枚举") + @ApiModelProperty(value = "角色类型", required = true, example = "1", notes = "è§ RoleTypeEnum 枚举") private Integer type; @ApiModelProperty(value = "备注", example = "我是一个角色") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleExportReqVO.java index 339a22ba82..02e47ac6f5 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleExportReqVO.java @@ -19,7 +19,7 @@ public class RoleExportReqVO { @ApiModelProperty(value = "角色标识", example = "yudao", notes = "模糊匹é…") private String code; - @ApiModelProperty(value = "展示状æ€", example = "1", notes = "å‚è§ SysCommonStatusEnum 枚举类") + @ApiModelProperty(value = "展示状æ€", example = "1", notes = "å‚è§ CommonStatusEnum 枚举类") private Integer status; @ApiModelProperty(value = "开始时间", example = "2020-10-24") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RolePageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RolePageReqVO.java index d2fed80e5e..2f4cc18586 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RolePageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RolePageReqVO.java @@ -22,7 +22,7 @@ public class RolePageReqVO extends PageParam { @ApiModelProperty(value = "角色标识", example = "yudao", notes = "模糊匹é…") private String code; - @ApiModelProperty(value = "展示状æ€", example = "1", notes = "å‚è§ SysCommonStatusEnum 枚举类") + @ApiModelProperty(value = "展示状æ€", example = "1", notes = "å‚è§ CommonStatusEnum 枚举类") private Integer status; @ApiModelProperty(value = "开始时间", example = "2020-10-24") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleRespVO.java index e7c0e2c3c7..31acbedcdc 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleRespVO.java @@ -26,10 +26,10 @@ public class RoleRespVO extends RoleBaseVO { @ApiModelProperty(value = "æ•°æ®èŒƒå›´(指定部门数组)", example = "1") private Set dataScopeDeptIds; - @ApiModelProperty(value = "状æ€", required = true, example = "1", notes = "å‚è§ SysCommonStatusEnum 枚举类") + @ApiModelProperty(value = "状æ€", required = true, example = "1", notes = "å‚è§ CommonStatusEnum 枚举类") private Integer status; - @ApiModelProperty(value = "角色类型", required = true, example = "1", notes = "å‚è§ SysRoleTypeEnum 枚举类") + @ApiModelProperty(value = "角色类型", required = true, example = "1", notes = "å‚è§ RoleTypeEnum 枚举类") private Integer type; @ApiModelProperty(value = "创建时间", required = true, example = "时间戳格å¼") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleUpdateStatusReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleUpdateStatusReqVO.java index 75a658c7ab..708586b823 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleUpdateStatusReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/role/RoleUpdateStatusReqVO.java @@ -1,7 +1,5 @@ package cn.iocoder.yudao.module.system.controller.admin.permission.vo.role; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.validation.InEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -16,7 +14,7 @@ public class RoleUpdateStatusReqVO { @NotNull(message = "角色编å·ä¸èƒ½ä¸ºç©º") private Long id; - @ApiModelProperty(value = "状æ€", required = true, example = "1", notes = "è§ SysCommonStatusEnum 枚举") + @ApiModelProperty(value = "状æ€", required = true, example = "1", notes = "è§ CommonStatusEnum 枚举") @NotNull(message = "状æ€ä¸èƒ½ä¸ºç©º") // @InEnum(value = CommonStatusEnum.class, message = "修改状æ€å¿…须是 {value}") private Integer status; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsCallbackController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsCallbackController.java index 8125f0728a..a8b4ee8d14 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsCallbackController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsCallbackController.java @@ -25,7 +25,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; public class SmsCallbackController { @Resource - private SmsSendService smsCoreService; + private SmsSendService smsSendService; @PostMapping("/sms/yunpian") @ApiOperation(value = "云片短信的回调", notes = "å‚è§ https://www.yunpian.com/official/document/sms/zh_cn/domestic_push_report 文档") @@ -33,7 +33,7 @@ public class SmsCallbackController { @OperateLog(enable = false) public String receiveYunpianSmsStatus(@RequestParam("sms_status") String smsStatus) throws Throwable { String text = URLUtil.decode(smsStatus); // decode è§£ç å‚数,因为它被 encode - smsCoreService.receiveSmsStatus(SmsChannelEnum.YUN_PIAN.getCode(), text); + smsSendService.receiveSmsStatus(SmsChannelEnum.YUN_PIAN.getCode(), text); return "SUCCESS"; // 约定返回 SUCCESS 为æˆåŠŸ } @@ -42,7 +42,7 @@ public class SmsCallbackController { @OperateLog(enable = false) public CommonResult receiveAliyunSmsStatus(HttpServletRequest request) throws Throwable { String text = ServletUtil.getBody(request); - smsCoreService.receiveSmsStatus(SmsChannelEnum.ALIYUN.getCode(), text); + smsSendService.receiveSmsStatus(SmsChannelEnum.ALIYUN.getCode(), text); return success(true); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsChannelController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsChannelController.java index 4774fcf59b..638140d210 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsChannelController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsChannelController.java @@ -2,8 +2,8 @@ package cn.iocoder.yudao.module.system.controller.admin.sms; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.*; import cn.iocoder.yudao.module.system.convert.sms.SmsChannelConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsChannelDO; import cn.iocoder.yudao.module.system.service.sms.SmsChannelService; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsChannelDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import io.swagger.annotations.Api; @@ -56,7 +56,7 @@ public class SmsChannelController { @ApiImplicitParam(name = "id", value = "ç¼–å·", required = true, example = "1024", dataTypeClass = Long.class) @PreAuthorize("@ss.hasPermission('system:sms-channel:query')") public CommonResult getSmsChannel(@RequestParam("id") Long id) { - SysSmsChannelDO smsChannel = smsChannelService.getSmsChannel(id); + SmsChannelDO smsChannel = smsChannelService.getSmsChannel(id); return success(SmsChannelConvert.INSTANCE.convert(smsChannel)); } @@ -64,16 +64,16 @@ public class SmsChannelController { @ApiOperation("获得短信渠é“分页") @PreAuthorize("@ss.hasPermission('system:sms-channel:query')") public CommonResult> getSmsChannelPage(@Valid SmsChannelPageReqVO pageVO) { - PageResult pageResult = smsChannelService.getSmsChannelPage(pageVO); + PageResult pageResult = smsChannelService.getSmsChannelPage(pageVO); return success(SmsChannelConvert.INSTANCE.convertPage(pageResult)); } @GetMapping("/list-all-simple") @ApiOperation(value = "获得短信渠é“精简列表", notes = "包å«è¢«ç¦ç”¨çš„短信渠é“") public CommonResult> getSimpleSmsChannels() { - List list = smsChannelService.getSmsChannelList(); + List list = smsChannelService.getSmsChannelList(); // 排åºåŽï¼Œè¿”回给å‰ç«¯ - list.sort(Comparator.comparing(SysSmsChannelDO::getId)); + list.sort(Comparator.comparing(SmsChannelDO::getId)); return success(SmsChannelConvert.INSTANCE.convertList03(list)); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsLogController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsLogController.java index ef93cfc3de..5fbf10e741 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsLogController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsLogController.java @@ -3,10 +3,10 @@ package cn.iocoder.yudao.module.system.controller.admin.sms; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogExcelVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogPageReqVO; -import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SysSmsLogRespVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogRespVO; import cn.iocoder.yudao.module.system.convert.sms.SmsLogConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsLogDO; import cn.iocoder.yudao.module.system.service.sms.SmsLogService; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsLogDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; @@ -40,8 +40,8 @@ public class SmsLogController { @GetMapping("/page") @ApiOperation("获得短信日志分页") @PreAuthorize("@ss.hasPermission('system:sms-log:query')") - public CommonResult> getSmsLogPage(@Valid SmsLogPageReqVO pageVO) { - PageResult pageResult = smsLogService.getSmsLogPage(pageVO); + public CommonResult> getSmsLogPage(@Valid SmsLogPageReqVO pageVO) { + PageResult pageResult = smsLogService.getSmsLogPage(pageVO); return success(SmsLogConvert.INSTANCE.convertPage(pageResult)); } @@ -51,7 +51,7 @@ public class SmsLogController { @OperateLog(type = EXPORT) public void exportSmsLogExcel(@Valid SmsLogExportReqVO exportReqVO, HttpServletResponse response) throws IOException { - List list = smsLogService.getSmsLogList(exportReqVO); + List list = smsLogService.getSmsLogList(exportReqVO); // 导出 Excel List datas = SmsLogConvert.INSTANCE.convertList02(list); ExcelUtils.write(response, "短信日志.xls", "æ•°æ®", SmsLogExcelVO.class, datas); diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsTemplateController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsTemplateController.java index d565143142..3eef58652f 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsTemplateController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsTemplateController.java @@ -2,8 +2,8 @@ package cn.iocoder.yudao.module.system.controller.admin.sms; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.*; import cn.iocoder.yudao.module.system.convert.sms.SmsTemplateConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO; import cn.iocoder.yudao.module.system.service.sms.SmsTemplateService; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; import cn.iocoder.yudao.module.system.service.sms.SmsSendService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -32,7 +32,7 @@ public class SmsTemplateController { @Resource private SmsTemplateService smsTemplateService; @Resource - private SmsSendService smsCoreService; + private SmsSendService smsSendService; @PostMapping("/create") @ApiOperation("创建短信模æ¿") @@ -63,7 +63,7 @@ public class SmsTemplateController { @ApiImplicitParam(name = "id", value = "ç¼–å·", required = true, example = "1024", dataTypeClass = Long.class) @PreAuthorize("@ss.hasPermission('system:sms-template:query')") public CommonResult getSmsTemplate(@RequestParam("id") Long id) { - SysSmsTemplateDO smsTemplate = smsTemplateService.getSmsTemplate(id); + SmsTemplateDO smsTemplate = smsTemplateService.getSmsTemplate(id); return success(SmsTemplateConvert.INSTANCE.convert(smsTemplate)); } @@ -71,7 +71,7 @@ public class SmsTemplateController { @ApiOperation("获得短信模æ¿åˆ†é¡µ") @PreAuthorize("@ss.hasPermission('system:sms-template:query')") public CommonResult> getSmsTemplatePage(@Valid SmsTemplatePageReqVO pageVO) { - PageResult pageResult = smsTemplateService.getSmsTemplatePage(pageVO); + PageResult pageResult = smsTemplateService.getSmsTemplatePage(pageVO); return success(SmsTemplateConvert.INSTANCE.convertPage(pageResult)); } @@ -81,7 +81,7 @@ public class SmsTemplateController { @OperateLog(type = EXPORT) public void exportSmsTemplateExcel(@Valid SmsTemplateExportReqVO exportReqVO, HttpServletResponse response) throws IOException { - List list = smsTemplateService.getSmsTemplateList(exportReqVO); + List list = smsTemplateService.getSmsTemplateList(exportReqVO); // 导出 Excel List datas = SmsTemplateConvert.INSTANCE.convertList02(list); ExcelUtils.write(response, "短信模æ¿.xls", "æ•°æ®", SmsTemplateExcelVO.class, datas); @@ -91,7 +91,7 @@ public class SmsTemplateController { @ApiOperation("å‘é€çŸ­ä¿¡") @PreAuthorize("@ss.hasPermission('system:sms-template:send-sms')") public CommonResult sendSms(@Valid @RequestBody SmsTemplateSendReqVO sendReqVO) { - return success(smsCoreService.sendSingleSmsToAdmin(sendReqVO.getMobile(), null, + return success(smsSendService.sendSingleSmsToAdmin(sendReqVO.getMobile(), null, sendReqVO.getTemplateCode(), sendReqVO.getTemplateParams())); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SmsLogExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SmsLogExportReqVO.java index 7a57aa2ed8..6754b43b2a 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SmsLogExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SmsLogExportReqVO.java @@ -9,7 +9,7 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel(value = "管ç†åŽå° - 短信日志 Excel 导出 Request VO", description = "傿•°å’Œ SysSmsLogPageReqVO 是一致的") +@ApiModel(value = "管ç†åŽå° - 短信日志 Excel 导出 Request VO", description = "傿•°å’Œ SmsLogPageReqVO 是一致的") @Data public class SmsLogExportReqVO { diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SmsLogPageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SmsLogPageReqVO.java index 358427e82d..767201f81c 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SmsLogPageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SmsLogPageReqVO.java @@ -27,7 +27,7 @@ public class SmsLogPageReqVO extends PageParam { @ApiModelProperty(value = "手机å·", example = "15601691300") private String mobile; - @ApiModelProperty(value = "å‘é€çжæ€", example = "1", notes = "å‚è§ SysSmsSendStatusEnum 枚举类") + @ApiModelProperty(value = "å‘é€çжæ€", example = "1", notes = "å‚è§ SmsSendStatusEnum 枚举类") private Integer sendStatus; @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @@ -38,7 +38,7 @@ public class SmsLogPageReqVO extends PageParam { @ApiModelProperty(value = "结æŸå‘逿—¶é—´") private Date endSendTime; - @ApiModelProperty(value = "接收状æ€", example = "0", notes = "å‚è§ SysSmsReceiveStatusEnum 枚举类") + @ApiModelProperty(value = "接收状æ€", example = "0", notes = "å‚è§ SmsReceiveStatusEnum 枚举类") private Integer receiveStatus; @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SysSmsLogRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SmsLogRespVO.java similarity index 99% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SysSmsLogRespVO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SmsLogRespVO.java index 7377fc1e50..e179f4a5e6 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SysSmsLogRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/log/SmsLogRespVO.java @@ -9,7 +9,7 @@ import java.util.Map; @ApiModel("管ç†åŽå° - 短信日志 Response VO") @Data -public class SysSmsLogRespVO { +public class SmsLogRespVO { @ApiModelProperty(value = "ç¼–å·", required = true, example = "1024") private Long id; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateBaseVO.java index 9b16fa851e..ca9220f8a0 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateBaseVO.java @@ -12,7 +12,7 @@ import javax.validation.constraints.NotNull; @Data public class SmsTemplateBaseVO { - @ApiModelProperty(value = "短信类型", required = true, example = "1", notes = "å‚è§ SysSmsTemplateTypeEnum 枚举类") + @ApiModelProperty(value = "短信类型", required = true, example = "1", notes = "å‚è§ SmsTemplateTypeEnum 枚举类") @NotNull(message = "短信类型ä¸èƒ½ä¸ºç©º") private Integer type; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateExportReqVO.java index 099be029f4..e775e4c70a 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/vo/template/SmsTemplateExportReqVO.java @@ -9,7 +9,7 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel(value = "管ç†åŽå° - çŸ­ä¿¡æ¨¡æ¿ Excel 导出 Request VO", description = "傿•°å’Œ SysSmsTemplatePageReqVO 是一致的") +@ApiModel(value = "管ç†åŽå° - çŸ­ä¿¡æ¨¡æ¿ Excel 导出 Request VO", description = "傿•°å’Œ SmsTemplatePageReqVO 是一致的") @Data public class SmsTemplateExportReqVO { diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/TenantController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/TenantController.java index bd2fcb430b..50d893f6bd 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/TenantController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/TenantController.java @@ -2,8 +2,8 @@ package cn.iocoder.yudao.module.system.controller.admin.tenant; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.*; import cn.iocoder.yudao.module.system.convert.tenant.TenantConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO; import cn.iocoder.yudao.module.system.service.tenant.TenantService; -import cn.iocoder.yudao.module.system.dal.dataobject.tenant.SysTenantDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; @@ -36,7 +36,7 @@ public class TenantController { @ApiOperation(value = "使用租户å,获得租户编å·", notes = "登录界é¢ï¼Œæ ¹æ®ç”¨æˆ·çš„租户å,获得租户编å·") @ApiImplicitParam(name = "name", value = "租户å", required = true, example = "èŠ‹é“æºç ", dataTypeClass = Long.class) public CommonResult getTenantIdByName(@RequestParam("name") String name) { - SysTenantDO tenantDO = tenantService.getTenantByName(name); + TenantDO tenantDO = tenantService.getTenantByName(name); return success(tenantDO != null ? tenantDO.getId() : null); } @@ -69,7 +69,7 @@ public class TenantController { @ApiImplicitParam(name = "id", value = "ç¼–å·", required = true, example = "1024", dataTypeClass = Long.class) @PreAuthorize("@ss.hasPermission('system:tenant:query')") public CommonResult getTenant(@RequestParam("id") Long id) { - SysTenantDO tenant = tenantService.getTenant(id); + TenantDO tenant = tenantService.getTenant(id); return success(TenantConvert.INSTANCE.convert(tenant)); } @@ -78,7 +78,7 @@ public class TenantController { @ApiImplicitParam(name = "ids", value = "ç¼–å·åˆ—表", required = true, example = "1024,2048", dataTypeClass = List.class) @PreAuthorize("@ss.hasPermission('system:tenant:query')") public CommonResult> getTenantList(@RequestParam("ids") Collection ids) { - List list = tenantService.getTenantList(ids); + List list = tenantService.getTenantList(ids); return success(TenantConvert.INSTANCE.convertList(list)); } @@ -86,7 +86,7 @@ public class TenantController { @ApiOperation("获得租户分页") @PreAuthorize("@ss.hasPermission('system:tenant:query')") public CommonResult> getTenantPage(@Valid TenantPageReqVO pageVO) { - PageResult pageResult = tenantService.getTenantPage(pageVO); + PageResult pageResult = tenantService.getTenantPage(pageVO); return success(TenantConvert.INSTANCE.convertPage(pageResult)); } @@ -96,7 +96,7 @@ public class TenantController { @OperateLog(type = EXPORT) public void exportTenantExcel(@Valid TenantExportReqVO exportReqVO, HttpServletResponse response) throws IOException { - List list = tenantService.getTenantList(exportReqVO); + List list = tenantService.getTenantList(exportReqVO); // 导出 Excel List datas = TenantConvert.INSTANCE.convertList02(list); ExcelUtils.write(response, "租户.xls", "æ•°æ®", TenantExcelVO.class, datas); diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/TenantExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/TenantExportReqVO.java index afe5e67000..839239406b 100755 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/TenantExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/TenantExportReqVO.java @@ -9,7 +9,7 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel(value = "管ç†åŽå° - 租户 Excel 导出 Request VO", description = "傿•°å’Œ SysTenantPageReqVO 是一致的") +@ApiModel(value = "管ç†åŽå° - 租户 Excel 导出 Request VO", description = "傿•°å’Œ TenantPageReqVO 是一致的") @Data public class TenantExportReqVO { diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java index 7afe691a28..fbba577306 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java @@ -3,11 +3,11 @@ package cn.iocoder.yudao.module.system.controller.admin.user; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; import cn.iocoder.yudao.module.system.convert.user.UserConvert; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.service.dept.DeptService; import cn.iocoder.yudao.module.system.service.user.AdminUserService; -import cn.iocoder.yudao.module.system.enums.common.SysSexEnum; +import cn.iocoder.yudao.module.system.enums.common.SexEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -98,7 +98,7 @@ public class UserController { // 获得拼接需è¦çš„æ•°æ® Collection deptIds = convertList(pageResult.getList(), AdminUserDO::getDeptId); - Map deptMap = deptService.getDeptMap(deptIds); + Map deptMap = deptService.getDeptMap(deptIds); // 拼接结果返回 List userList = new ArrayList<>(pageResult.getList().size()); pageResult.getList().forEach(user -> { @@ -137,9 +137,9 @@ public class UserController { // 获得拼接需è¦çš„æ•°æ® Collection deptIds = convertList(users, AdminUserDO::getDeptId); - Map deptMap = deptService.getDeptMap(deptIds); + Map deptMap = deptService.getDeptMap(deptIds); Map deptLeaderUserMap = userService.getUserMap( - convertSet(deptMap.values(), SysDeptDO::getLeaderUserId)); + convertSet(deptMap.values(), DeptDO::getLeaderUserId)); // æ‹¼æŽ¥æ•°æ® List excelUsers = new ArrayList<>(users.size()); users.forEach(user -> { @@ -164,9 +164,9 @@ public class UserController { // 手动创建导出 demo List list = Arrays.asList( UserImportExcelVO.builder().username("yudao").deptId(1L).email("yudao@iocoder.cn").mobile("15601691300") - .nickname("芋é“").status(CommonStatusEnum.ENABLE.getStatus()).sex(SysSexEnum.MALE.getSex()).build(), + .nickname("芋é“").status(CommonStatusEnum.ENABLE.getStatus()).sex(SexEnum.MALE.getSex()).build(), UserImportExcelVO.builder().username("yuanma").deptId(2L).email("yuanma@iocoder.cn").mobile("15601701300") - .nickname("æºç ").status(CommonStatusEnum.DISABLE.getStatus()).sex(SysSexEnum.FEMALE.getSex()).build() + .nickname("æºç ").status(CommonStatusEnum.DISABLE.getStatus()).sex(SexEnum.FEMALE.getSex()).build() ); // 输出 diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.java index 11d419feaf..b46254713c 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.java @@ -5,16 +5,16 @@ import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfi import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; import cn.iocoder.yudao.module.system.convert.user.UserConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.service.dept.DeptService; import cn.iocoder.yudao.module.system.service.dept.PostService; import cn.iocoder.yudao.module.system.service.permission.PermissionService; import cn.iocoder.yudao.module.system.service.permission.RoleService; import cn.iocoder.yudao.module.system.service.user.AdminUserService; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; -import cn.iocoder.yudao.module.system.dal.dataobject.social.SysSocialUserDO; import cn.iocoder.yudao.module.system.service.social.SocialUserService; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; @@ -67,16 +67,16 @@ public class UserProfileController { resp.setRoles(UserConvert.INSTANCE.convertList(userRoles)); // èŽ·å¾—éƒ¨é—¨ä¿¡æ¯ if (user.getDeptId() != null) { - SysDeptDO dept = deptService.getDept(user.getDeptId()); + DeptDO dept = deptService.getDept(user.getDeptId()); resp.setDept(UserConvert.INSTANCE.convert02(dept)); } // 获得岗ä½ä¿¡æ¯ if (CollUtil.isNotEmpty(user.getPostIds())) { - List posts = postService.getPosts(user.getPostIds()); + List posts = postService.getPosts(user.getPostIds()); resp.setPosts(UserConvert.INSTANCE.convertList02(posts)); } // èŽ·å¾—ç¤¾äº¤ç”¨æˆ·ä¿¡æ¯ - List socialUsers = socialService.getSocialUserList(user.getId(), UserTypeEnum.ADMIN.getValue()); + List socialUsers = socialService.getSocialUserList(user.getId(), UserTypeEnum.ADMIN.getValue()); resp.setSocialUsers(UserConvert.INSTANCE.convertList03(socialUsers)); return success(resp); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileRespVO.java index 788c91feb2..c0b77f0f2d 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileRespVO.java @@ -22,7 +22,7 @@ public class UserProfileRespVO extends UserBaseVO { @ApiModelProperty(value = "用户编å·", required = true, example = "1") private Long id; - @ApiModelProperty(value = "状æ€", required = true, example = "1", notes = "å‚è§ SysCommonStatusEnum 枚举类") + @ApiModelProperty(value = "状æ€", required = true, example = "1", notes = "å‚è§ CommonStatusEnum 枚举类") private Integer status; @ApiModelProperty(value = "最åŽç™»å½• IP", required = true, example = "192.168.1.1") @@ -93,7 +93,7 @@ public class UserProfileRespVO extends UserBaseVO { @Data public static class SocialUser { - @ApiModelProperty(value = "社交平å°çš„类型", required = true, example = "10", notes = "å‚è§ SysSocialTypeEnum 枚举类") + @ApiModelProperty(value = "社交平å°çš„类型", required = true, example = "10", notes = "å‚è§ SocialTypeEnum 枚举类") private Integer type; @ApiModelProperty(value = "社交的全局编å·", required = true, example = "IPRmJ0wvBptiPIlGEZiPewGwiEiE") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java index 4f0f8f9531..3716f4727a 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java @@ -25,7 +25,7 @@ public class UserProfileUpdateReqVO { @Length(min = 11, max = 11, message = "手机å·é•¿åº¦å¿…é¡» 11 ä½") private String mobile; - @ApiModelProperty(value = "用户性别", example = "1", notes = "å‚è§ SysSexEnum 枚举类") + @ApiModelProperty(value = "用户性别", example = "1", notes = "å‚è§ SexEnum 枚举类") private Integer sex; } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserBaseVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserBaseVO.java index a4be1fd8dd..985783f0b9 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserBaseVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserBaseVO.java @@ -43,10 +43,10 @@ public class UserBaseVO { @Length(min = 11, max = 11, message = "手机å·é•¿åº¦å¿…é¡» 11 ä½") private String mobile; - @ApiModelProperty(value = "用户性别", example = "1", notes = "å‚è§ SysSexEnum 枚举类") + @ApiModelProperty(value = "用户性别", example = "1", notes = "å‚è§ SexEnum 枚举类") private Integer sex; - @ApiModelProperty(value = "用户头åƒ", example = "http://www.iocoder.cn/xxx.png") + @ApiModelProperty(value = "用户头åƒ", example = "https://www.iocoder.cn/xxx.png") private String avatar; } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserExportReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserExportReqVO.java index 1c1044a5cd..a25ba0b0f4 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserExportReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserExportReqVO.java @@ -11,7 +11,7 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel(value = "管ç†åŽå° - 用户导出 Request VO", description = "傿•°å’Œ SysUserPageReqVO 是一致的") +@ApiModel(value = "管ç†åŽå° - 用户导出 Request VO", description = "傿•°å’Œ UserPageReqVO 是一致的") @Data @NoArgsConstructor @AllArgsConstructor @@ -23,7 +23,7 @@ public class UserExportReqVO { @ApiModelProperty(value = "手机å·ç ", example = "yudao", notes = "模糊匹é…") private String mobile; - @ApiModelProperty(value = "展示状æ€", example = "1", notes = "å‚è§ SysCommonStatusEnum 枚举类") + @ApiModelProperty(value = "展示状æ€", example = "1", notes = "å‚è§ CommonStatusEnum 枚举类") private Integer status; @ApiModelProperty(value = "开始时间", example = "2020-10-24") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserPageReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserPageReqVO.java index 1c6073d168..00f20eb4d8 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserPageReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserPageReqVO.java @@ -26,7 +26,7 @@ public class UserPageReqVO extends PageParam { @ApiModelProperty(value = "手机å·ç ", example = "yudao", notes = "模糊匹é…") private String mobile; - @ApiModelProperty(value = "展示状æ€", example = "1", notes = "å‚è§ SysCommonStatusEnum 枚举类") + @ApiModelProperty(value = "展示状æ€", example = "1", notes = "å‚è§ CommonStatusEnum 枚举类") private Integer status; @ApiModelProperty(value = "开始时间", example = "2020-10-24") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserRespVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserRespVO.java index fb50609b02..b4525a5553 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserRespVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserRespVO.java @@ -16,7 +16,7 @@ public class UserRespVO extends UserBaseVO { @ApiModelProperty(value = "用户编å·", required = true, example = "1") private Long id; - @ApiModelProperty(value = "状æ€", required = true, example = "1", notes = "å‚è§ SysCommonStatusEnum 枚举类") + @ApiModelProperty(value = "状æ€", required = true, example = "1", notes = "å‚è§ CommonStatusEnum 枚举类") private Integer status; @ApiModelProperty(value = "最åŽç™»å½• IP", required = true, example = "192.168.1.1") diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserUpdateStatusReqVO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserUpdateStatusReqVO.java index f72897527e..2c7a83f22d 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserUpdateStatusReqVO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserUpdateStatusReqVO.java @@ -14,9 +14,9 @@ public class UserUpdateStatusReqVO { @NotNull(message = "角色编å·ä¸èƒ½ä¸ºç©º") private Long id; - @ApiModelProperty(value = "状æ€", required = true, example = "1", notes = "è§ SysCommonStatusEnum 枚举") + @ApiModelProperty(value = "状æ€", required = true, example = "1", notes = "è§ CommonStatusEnum 枚举") @NotNull(message = "状æ€ä¸èƒ½ä¸ºç©º") -// @InEnum(value = SysCommonStatusEnum.class, message = "修改状æ€å¿…须是 {value}") +// @InEnum(value = CommonStatusEnum.class, message = "修改状æ€å¿…须是 {value}") private Integer status; } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/UserSessionConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/UserSessionConvert.java index b287d8adc4..d30dfdcbb4 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/UserSessionConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/UserSessionConvert.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.convert.auth; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.session.UserSessionPageItemRespVO; -import cn.iocoder.yudao.module.system.dal.dataobject.auth.SysUserSessionDO; +import cn.iocoder.yudao.module.system.dal.dataobject.auth.UserSessionDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -10,6 +10,6 @@ public interface UserSessionConvert { UserSessionConvert INSTANCE = Mappers.getMapper(UserSessionConvert.class); - UserSessionPageItemRespVO convert(SysUserSessionDO session); + UserSessionPageItemRespVO convert(UserSessionDO session); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/DeptConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/DeptConvert.java index cd66acd9fa..8d921131c7 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/DeptConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/DeptConvert.java @@ -4,7 +4,7 @@ import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptCreateRe import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptRespVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptSimpleRespVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -15,14 +15,14 @@ public interface DeptConvert { DeptConvert INSTANCE = Mappers.getMapper(DeptConvert.class); - List convertList(List list); + List convertList(List list); - List convertList02(List list); + List convertList02(List list); - DeptRespVO convert(SysDeptDO bean); + DeptRespVO convert(DeptDO bean); - SysDeptDO convert(DeptCreateReqVO bean); + DeptDO convert(DeptCreateReqVO bean); - SysDeptDO convert(DeptUpdateReqVO bean); + DeptDO convert(DeptUpdateReqVO bean); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/PostConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/PostConvert.java index d3680dae51..86a548edbe 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/PostConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/PostConvert.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.convert.dept; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.*; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -13,16 +13,16 @@ public interface PostConvert { PostConvert INSTANCE = Mappers.getMapper(PostConvert.class); - List convertList02(List list); + List convertList02(List list); - PageResult convertPage(PageResult page); + PageResult convertPage(PageResult page); - PostRespVO convert(SysPostDO id); + PostRespVO convert(PostDO id); - SysPostDO convert(PostCreateReqVO bean); + PostDO convert(PostCreateReqVO bean); - SysPostDO convert(PostUpdateReqVO reqVO); + PostDO convert(PostUpdateReqVO reqVO); - List convertList03(List list); + List convertList03(List list); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/DictDataConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/DictDataConvert.java index 94f67657fe..215f252e79 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/DictDataConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/DictDataConvert.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.convert.dict; import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.*; -import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictDataDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.dict.core.dto.DictDataRespDTO; import org.mapstruct.Mapper; @@ -15,20 +15,20 @@ public interface DictDataConvert { DictDataConvert INSTANCE = Mappers.getMapper(DictDataConvert.class); - List convertList(List list); + List convertList(List list); - DictDataRespVO convert(SysDictDataDO bean); + DictDataRespVO convert(DictDataDO bean); - PageResult convertPage(PageResult page); + PageResult convertPage(PageResult page); - SysDictDataDO convert(DictDataUpdateReqVO bean); + DictDataDO convert(DictDataUpdateReqVO bean); - SysDictDataDO convert(DictDataCreateReqVO bean); + DictDataDO convert(DictDataCreateReqVO bean); - List convertList02(List bean); + List convertList02(List bean); - DictDataRespDTO convert02(SysDictDataDO bean); + DictDataRespDTO convert02(DictDataDO bean); - List convertList03(Collection list); + List convertList03(Collection list); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/SysDictDataCoreConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/SysDictDataCoreConvert.java deleted file mode 100644 index c61d654cff..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dict/SysDictDataCoreConvert.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.iocoder.yudao.module.system.convert.dict; - -import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictDataDO; -import cn.iocoder.yudao.framework.dict.core.dto.DictDataRespDTO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.Collection; -import java.util.List; - -@Mapper -public interface SysDictDataCoreConvert { - - SysDictDataCoreConvert INSTANCE = Mappers.getMapper(SysDictDataCoreConvert.class); - - DictDataRespDTO convert02(SysDictDataDO bean); - - List convertList03(Collection list); - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/LoginLogConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/LoginLogConvert.java index 3208276ccb..ea50d4b095 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/LoginLogConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/LoginLogConvert.java @@ -1,9 +1,10 @@ package cn.iocoder.yudao.module.system.convert.logger; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO; import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogExcelVO; import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogRespVO; -import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysLoginLogDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.system.dal.dataobject.logger.LoginLogDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -14,8 +15,10 @@ public interface LoginLogConvert { LoginLogConvert INSTANCE = Mappers.getMapper(LoginLogConvert.class); - PageResult convertPage(PageResult page); + PageResult convertPage(PageResult page); - List convertList(List list); + List convertList(List list); + + LoginLogDO convert(LoginLogCreateReqDTO bean); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/SysLoginLogCoreConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/SysLoginLogCoreConvert.java deleted file mode 100644 index 70b5dfff02..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/SysLoginLogCoreConvert.java +++ /dev/null @@ -1,15 +0,0 @@ -package cn.iocoder.yudao.module.system.convert.logger; - -import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysLoginLogDO; -import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -@Mapper -public interface SysLoginLogCoreConvert { - - SysLoginLogCoreConvert INSTANCE = Mappers.getMapper(SysLoginLogCoreConvert.class); - - SysLoginLogDO convert(LoginLogCreateReqDTO bean); - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsChannelConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsChannelConvert.java index 6979ed0027..0776c58f60 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsChannelConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsChannelConvert.java @@ -4,7 +4,7 @@ import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannel import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelRespVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelSimpleRespVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsChannelDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsChannelDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.sms.core.property.SmsChannelProperties; import org.mapstruct.Mapper; @@ -22,18 +22,18 @@ public interface SmsChannelConvert { SmsChannelConvert INSTANCE = Mappers.getMapper(SmsChannelConvert.class); - SysSmsChannelDO convert(SmsChannelCreateReqVO bean); + SmsChannelDO convert(SmsChannelCreateReqVO bean); - SysSmsChannelDO convert(SmsChannelUpdateReqVO bean); + SmsChannelDO convert(SmsChannelUpdateReqVO bean); - SmsChannelRespVO convert(SysSmsChannelDO bean); + SmsChannelRespVO convert(SmsChannelDO bean); - List convertList(List list); + List convertList(List list); - PageResult convertPage(PageResult page); + PageResult convertPage(PageResult page); - List convertList02(List list); + List convertList02(List list); - List convertList03(List list); + List convertList03(List list); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsLogConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsLogConvert.java index 425ac31977..40efe60a1e 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsLogConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsLogConvert.java @@ -1,8 +1,8 @@ package cn.iocoder.yudao.module.system.convert.sms; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogExcelVO; -import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SysSmsLogRespVO; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsLogDO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogRespVO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -19,12 +19,12 @@ public interface SmsLogConvert { SmsLogConvert INSTANCE = Mappers.getMapper(SmsLogConvert.class); - SysSmsLogRespVO convert(SysSmsLogDO bean); + SmsLogRespVO convert(SmsLogDO bean); - List convertList(List list); + List convertList(List list); - PageResult convertPage(PageResult page); + PageResult convertPage(PageResult page); - List convertList02(List list); + List convertList02(List list); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsTemplateConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsTemplateConvert.java index 8cca0f01fa..b0fb02b8f9 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsTemplateConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/sms/SmsTemplateConvert.java @@ -4,7 +4,7 @@ import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTempla import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateExcelVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateRespVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -16,16 +16,16 @@ public interface SmsTemplateConvert { SmsTemplateConvert INSTANCE = Mappers.getMapper(SmsTemplateConvert.class); - SysSmsTemplateDO convert(SmsTemplateCreateReqVO bean); + SmsTemplateDO convert(SmsTemplateCreateReqVO bean); - SysSmsTemplateDO convert(SmsTemplateUpdateReqVO bean); + SmsTemplateDO convert(SmsTemplateUpdateReqVO bean); - SmsTemplateRespVO convert(SysSmsTemplateDO bean); + SmsTemplateRespVO convert(SmsTemplateDO bean); - List convertList(List list); + List convertList(List list); - PageResult convertPage(PageResult page); + PageResult convertPage(PageResult page); - List convertList02(List list); + List convertList02(List list); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/tenant/TenantConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/tenant/TenantConvert.java index 53de4517ad..afc05a92f8 100755 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/tenant/TenantConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/tenant/TenantConvert.java @@ -4,7 +4,7 @@ import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantCreateReq import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantExcelVO; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantRespVO; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.tenant.SysTenantDO; +import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -21,16 +21,16 @@ public interface TenantConvert { TenantConvert INSTANCE = Mappers.getMapper(TenantConvert.class); - SysTenantDO convert(TenantCreateReqVO bean); + TenantDO convert(TenantCreateReqVO bean); - SysTenantDO convert(TenantUpdateReqVO bean); + TenantDO convert(TenantUpdateReqVO bean); - TenantRespVO convert(SysTenantDO bean); + TenantRespVO convert(TenantDO bean); - List convertList(List list); + List convertList(List list); - PageResult convertPage(PageResult page); + PageResult convertPage(PageResult page); - List convertList02(List list); + List convertList02(List list); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/user/UserConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/user/UserConvert.java index 9e4aaddbfd..cf2b1692b7 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/user/UserConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/user/UserConvert.java @@ -4,10 +4,10 @@ import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfi import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; -import cn.iocoder.yudao.module.system.dal.dataobject.social.SysSocialUserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -21,7 +21,7 @@ public interface UserConvert { UserPageItemRespVO convert(AdminUserDO bean); - UserPageItemRespVO.Dept convert(SysDeptDO bean); + UserPageItemRespVO.Dept convert(DeptDO bean); AdminUserDO convert(UserCreateReqVO bean); @@ -35,15 +35,15 @@ public interface UserConvert { List convertList(List list); - UserProfileRespVO.Dept convert02(SysDeptDO bean); + UserProfileRespVO.Dept convert02(DeptDO bean); AdminUserDO convert(UserProfileUpdateReqVO bean); AdminUserDO convert(UserProfileUpdatePasswordReqVO bean); - List convertList02(List list); + List convertList02(List list); - List convertList03(List list); + List convertList03(List list); List convertList04(List list); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/auth/SysUserSessionDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/auth/UserSessionDO.java similarity index 82% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/auth/SysUserSessionDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/auth/UserSessionDO.java index 9de10295ba..01885004ee 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/auth/SysUserSessionDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/auth/UserSessionDO.java @@ -17,15 +17,15 @@ import java.util.Date; * * 我们已ç»å°† {@link LoginUser} 缓存在 Redis 当中。 * 这里é¢å¤–存储在线用户到 MySQL 中,目的是为了方便管ç†ç•Œé¢å¯ä»¥çµæ´»æŸ¥è¯¢ã€‚ - * åŒæ—¶ï¼Œé€šè¿‡å®šæ—¶è½®è¯¢ SysUserSessionDO 表,å¯ä»¥ä¸»åŠ¨åˆ é™¤ Redis 的缓存,因为 Redis 的过期删除是延迟的。 + * åŒæ—¶ï¼Œé€šè¿‡å®šæ—¶è½®è¯¢ UserSessionDO 表,å¯ä»¥ä¸»åŠ¨åˆ é™¤ Redis 的缓存,因为 Redis 的过期删除是延迟的。 * * @author èŠ‹é“æºç  */ -@TableName(value = "sys_user_session", autoResultMap = true) +@TableName(value = "system_user_session", autoResultMap = true) @Data @Builder @EqualsAndHashCode(callSuper = true) -public class SysUserSessionDO extends TenantBaseDO { +public class UserSessionDO extends TenantBaseDO { /** * 会è¯ç¼–å·, å³ sessionId @@ -35,7 +35,7 @@ public class SysUserSessionDO extends TenantBaseDO { /** * ç”¨æˆ·ç¼–å· * - * å…³è” SysUserDO.id 或者 MbrUserDO.id + * å…³è” AdminUserDO.id 或者 MemberUserDO.id */ private Long userId; /** diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/SysDeptDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/DeptDO.java similarity index 94% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/SysDeptDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/DeptDO.java index 9840a2c30e..557a1f36f8 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/SysDeptDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/DeptDO.java @@ -14,10 +14,10 @@ import lombok.EqualsAndHashCode; * @author ruoyi * @author èŠ‹é“æºç  */ -@TableName("sys_dept") +@TableName("system_dept") @Data @EqualsAndHashCode(callSuper = true) -public class SysDeptDO extends TenantBaseDO { +public class DeptDO extends TenantBaseDO { /** * 部门ID diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/SysPostDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/PostDO.java similarity index 92% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/SysPostDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/PostDO.java index 233ba361be..ba9074d034 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/SysPostDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/PostDO.java @@ -12,10 +12,10 @@ import lombok.EqualsAndHashCode; * * @author ruoyi */ -@TableName("sys_post") +@TableName("system_post") @Data @EqualsAndHashCode(callSuper = true) -public class SysPostDO extends TenantBaseDO { +public class PostDO extends TenantBaseDO { /** * å²—ä½åºå· diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dict/SysDictDataDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dict/DictDataDO.java similarity index 88% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dict/SysDictDataDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dict/DictDataDO.java index fe12ce472b..1b5cee4e4e 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dict/SysDictDataDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dict/DictDataDO.java @@ -12,10 +12,10 @@ import lombok.EqualsAndHashCode; * * @author ruoyi */ -@TableName("sys_dict_data") +@TableName("system_dict_data") @Data @EqualsAndHashCode(callSuper = true) -public class SysDictDataDO extends BaseDO { +public class DictDataDO extends BaseDO { /** * 字典数æ®ç¼–å· @@ -37,7 +37,7 @@ public class SysDictDataDO extends BaseDO { /** * 字典类型 * - * 冗余 {@link SysDictDataDO#getDictType()} + * 冗余 {@link DictDataDO#getDictType()} */ private String dictType; /** diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/SysLoginLogDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/LoginLogDO.java similarity index 95% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/SysLoginLogDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/LoginLogDO.java index 3037d094bd..66a81443bf 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/SysLoginLogDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/LoginLogDO.java @@ -16,11 +16,11 @@ import lombok.ToString; * * @author èŠ‹é“æºç  */ -@TableName("sys_login_log") +@TableName("system_login_log") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class SysLoginLogDO extends BaseDO { +public class LoginLogDO extends BaseDO { /** * 日志主键 diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/MenuDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/MenuDO.java index 1920a68e24..2915efa4cb 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/MenuDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/MenuDO.java @@ -34,7 +34,7 @@ public class MenuDO extends BaseDO { * 一般格å¼ä¸ºï¼š${系统}:${模å—}:${æ“作} * 例如说:system:admin:addï¼Œå³ system æœåŠ¡çš„æ·»åŠ ç®¡ç†å‘˜ã€‚ * - * 当我们把该 SysMenuDO 赋予给角色åŽï¼Œæ„味ç€è¯¥è§’色有该资æºï¼š + * 当我们把该 MenuDO 赋予给角色åŽï¼Œæ„味ç€è¯¥è§’色有该资æºï¼š * - 对于åŽç«¯ï¼Œé…åˆ @PreAuthorize 注解,é…ç½® API 接å£éœ€è¦è¯¥æƒé™ï¼Œä»Žè€Œå¯¹ API 接å£è¿›è¡Œæƒé™æŽ§åˆ¶ã€‚ * - 对于å‰ç«¯ï¼Œé…åˆå‰ç«¯æ ‡ç­¾ï¼Œé…置按钮是å¦å±•示,é¿å…用户没有该æƒé™æ—¶ï¼Œç»“æžœå¯ä»¥çœ‹åˆ°è¯¥æ“作。 */ diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SysSmsChannelDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SmsChannelDO.java similarity index 91% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SysSmsChannelDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SmsChannelDO.java index 57fe9789e2..5e6b8c4191 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SysSmsChannelDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SmsChannelDO.java @@ -14,11 +14,11 @@ import lombok.ToString; * @author zzf * @since 2021-01-25 */ -@TableName(value = "sys_sms_channel", autoResultMap = true) +@TableName(value = "system_sms_channel", autoResultMap = true) @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class SysSmsChannelDO extends BaseDO { +public class SmsChannelDO extends BaseDO { /** * 渠é“ç¼–å· diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SysSmsLogDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SmsLogDO.java similarity index 81% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SysSmsLogDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SmsLogDO.java index a6daa0c742..441f6ad178 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SysSmsLogDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SmsLogDO.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.dal.dataobject.sms; -import cn.iocoder.yudao.module.system.enums.sms.SysSmsReceiveStatusEnum; -import cn.iocoder.yudao.module.system.enums.sms.SysSmsSendStatusEnum; +import cn.iocoder.yudao.module.system.enums.sms.SmsReceiveStatusEnum; +import cn.iocoder.yudao.module.system.enums.sms.SmsSendStatusEnum; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.sms.core.enums.SmsFrameworkErrorCodeConstants; @@ -19,14 +19,14 @@ import java.util.Map; * @author zzf * @since 2021-01-25 */ -@TableName(value = "sys_sms_log", autoResultMap = true) +@TableName(value = "system_sms_log", autoResultMap = true) @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) @Builder @AllArgsConstructor @NoArgsConstructor -public class SysSmsLogDO extends BaseDO { +public class SmsLogDO extends BaseDO { /** * è‡ªå¢žç¼–å· @@ -38,13 +38,13 @@ public class SysSmsLogDO extends BaseDO { /** * 短信渠é“ç¼–å· * - * å…³è” {@link SysSmsChannelDO#getId()} + * å…³è” {@link SmsChannelDO#getId()} */ private Long channelId; /** * 短信渠é“ç¼–ç  * - * 冗余 {@link SysSmsChannelDO#getCode()} + * 冗余 {@link SmsChannelDO#getCode()} */ private String channelCode; @@ -53,34 +53,34 @@ public class SysSmsLogDO extends BaseDO { /** * 模æ¿ç¼–å· * - * å…³è” {@link SysSmsTemplateDO#getId()} + * å…³è” {@link SmsTemplateDO#getId()} */ private Long templateId; /** * 模æ¿ç¼–ç  * - * 冗余 {@link SysSmsTemplateDO#getCode()} + * 冗余 {@link SmsTemplateDO#getCode()} */ private String templateCode; /** * 短信类型 * - * 冗余 {@link SysSmsTemplateDO#getType()} + * 冗余 {@link SmsTemplateDO#getType()} */ private Integer templateType; /** - * 基于 {@link SysSmsTemplateDO#getContent()} æ ¼å¼åŒ–åŽçš„内容 + * 基于 {@link SmsTemplateDO#getContent()} æ ¼å¼åŒ–åŽçš„内容 */ private String templateContent; /** - * 基于 {@link SysSmsTemplateDO#getParams()} 输入åŽçš„傿•° + * 基于 {@link SmsTemplateDO#getParams()} 输入åŽçš„傿•° */ @TableField(typeHandler = JacksonTypeHandler.class) private Map templateParams; /** * 短信 API 的模æ¿ç¼–å· * - * 冗余 {@link SysSmsTemplateDO#getApiTemplateId()} + * 冗余 {@link SmsTemplateDO#getApiTemplateId()} */ private String apiTemplateId; @@ -106,7 +106,7 @@ public class SysSmsLogDO extends BaseDO { /** * å‘é€çŠ¶æ€ * - * 枚举 {@link SysSmsSendStatusEnum} + * 枚举 {@link SmsSendStatusEnum} */ private Integer sendStatus; /** @@ -154,7 +154,7 @@ public class SysSmsLogDO extends BaseDO { /** * æŽ¥æ”¶çŠ¶æ€ * - * 枚举 {@link SysSmsReceiveStatusEnum} + * 枚举 {@link SmsReceiveStatusEnum} */ private Integer receiveStatus; /** diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SysSmsTemplateDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SmsTemplateDO.java similarity index 83% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SysSmsTemplateDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SmsTemplateDO.java index 72fcafcd97..54c2098681 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SysSmsTemplateDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SmsTemplateDO.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.dal.dataobject.sms; -import cn.iocoder.yudao.module.system.enums.sms.SysSmsTemplateTypeEnum; +import cn.iocoder.yudao.module.system.enums.sms.SmsTemplateTypeEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import com.baomidou.mybatisplus.annotation.TableField; @@ -18,11 +18,11 @@ import java.util.List; * @author zzf * @since 2021-01-25 */ -@TableName(value = "sys_sms_template", autoResultMap = true) +@TableName(value = "system_sms_template", autoResultMap = true) @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class SysSmsTemplateDO extends BaseDO { +public class SmsTemplateDO extends BaseDO { /** * è‡ªå¢žç¼–å· @@ -34,7 +34,7 @@ public class SysSmsTemplateDO extends BaseDO { /** * 短信类型 * - * 枚举 {@link SysSmsTemplateTypeEnum} + * 枚举 {@link SmsTemplateTypeEnum} */ private Integer type; /** @@ -76,13 +76,13 @@ public class SysSmsTemplateDO extends BaseDO { /** * 短信渠é“ç¼–å· * - * å…³è” {@link SysSmsChannelDO#getId()} + * å…³è” {@link SmsChannelDO#getId()} */ private Long channelId; /** * 短信渠é“ç¼–ç  * - * 冗余 {@link SysSmsChannelDO#getCode()} + * 冗余 {@link SmsChannelDO#getCode()} */ private String channelCode; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/social/SysSocialUserDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/social/SocialUserDO.java similarity index 89% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/social/SysSocialUserDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/social/SocialUserDO.java index bca1964fe3..9572f1e939 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/social/SysSocialUserDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/social/SocialUserDO.java @@ -9,17 +9,17 @@ import lombok.*; /** * 社交用户 - * 通过 {@link SysSocialUserDO#getUserId()} å…³è”到对应的 {@link AdminUserDO} + * 通过 {@link SocialUserDO#getUserId()} å…³è”到对应的 {@link AdminUserDO} * * @author weir */ -@TableName(value = "sys_social_user", autoResultMap = true) +@TableName(value = "system_social_user", autoResultMap = true) @Data @EqualsAndHashCode(callSuper = true) @Builder @NoArgsConstructor @AllArgsConstructor -public class SysSocialUserDO extends BaseDO { +public class SocialUserDO extends BaseDO { /** * 自增主键 diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/tenant/SysTenantDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/tenant/TenantDO.java similarity index 89% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/tenant/SysTenantDO.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/tenant/TenantDO.java index ebff2004ce..99a658e094 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/tenant/SysTenantDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/tenant/TenantDO.java @@ -10,14 +10,14 @@ import lombok.*; * * @author èŠ‹é“æºç  */ -@TableName(value = "sys_tenant", autoResultMap = true) +@TableName(value = "system_tenant", autoResultMap = true) @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) @Builder @AllArgsConstructor @NoArgsConstructor -public class SysTenantDO extends BaseDO { +public class TenantDO extends BaseDO { /** * 租户编å·ï¼Œè‡ªå¢ž diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java index 85e2dfb905..870ad30fce 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.dal.dataobject.user; -import cn.iocoder.yudao.module.system.enums.common.SysSexEnum; +import cn.iocoder.yudao.module.system.enums.common.SexEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.mybatis.core.type.JsonLongSetTypeHandler; import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; @@ -18,7 +18,7 @@ import java.util.Set; * * @author èŠ‹é“æºç  */ -@TableName(value = "sys_user", autoResultMap = true) +@TableName(value = "system_user", autoResultMap = true) @Data @EqualsAndHashCode(callSuper = true) @Builder @@ -69,7 +69,7 @@ public class AdminUserDO extends TenantBaseDO { /** * 用户性别 * - * 枚举类 {@link SysSexEnum} + * 枚举类 {@link SexEnum} */ private Integer sex; /** diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/auth/SysUserSessionCoreMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/auth/SysUserSessionCoreMapper.java deleted file mode 100644 index a589d1e9e2..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/auth/SysUserSessionCoreMapper.java +++ /dev/null @@ -1,10 +0,0 @@ -package cn.iocoder.yudao.module.system.dal.mysql.auth; - -import cn.iocoder.yudao.module.system.dal.dataobject.auth.SysUserSessionDO; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public interface SysUserSessionCoreMapper extends BaseMapperX { - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/auth/SysUserSessionMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/auth/UserSessionMapper.java similarity index 54% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/auth/SysUserSessionMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/auth/UserSessionMapper.java index 23e0ba1e5d..1b7f31be33 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/auth/SysUserSessionMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/auth/UserSessionMapper.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.dal.mysql.auth; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.session.UserSessionPageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.auth.SysUserSessionDO; +import cn.iocoder.yudao.module.system.dal.dataobject.auth.UserSessionDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; @@ -12,16 +12,16 @@ import java.util.Date; import java.util.List; @Mapper -public interface SysUserSessionMapper extends BaseMapperX { +public interface UserSessionMapper extends BaseMapperX { - default PageResult selectPage(UserSessionPageReqVO reqVO, Collection userIds) { - return selectPage(reqVO, new QueryWrapperX() + default PageResult selectPage(UserSessionPageReqVO reqVO, Collection userIds) { + return selectPage(reqVO, new QueryWrapperX() .inIfPresent("user_id", userIds) .likeIfPresent("user_ip", reqVO.getUserIp())); } - default List selectListBySessionTimoutLt() { - return selectList(new QueryWrapperX().lt("session_timeout",new Date())); + default List selectListBySessionTimoutLt() { + return selectList(new QueryWrapperX().lt("session_timeout",new Date())); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysDeptMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/DeptMapper.java similarity index 51% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysDeptMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/DeptMapper.java index e2d0678e7d..3f76709c82 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysDeptMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/DeptMapper.java @@ -4,7 +4,7 @@ import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.apache.ibatis.annotations.Mapper; @@ -13,26 +13,26 @@ import java.util.Date; import java.util.List; @Mapper -public interface SysDeptMapper extends BaseMapperX { +public interface DeptMapper extends BaseMapperX { - default List selectList(DeptListReqVO reqVO) { - return selectList(new LambdaQueryWrapperX().likeIfPresent(SysDeptDO::getName, reqVO.getName()) - .eqIfPresent(SysDeptDO::getStatus, reqVO.getStatus())); + default List selectList(DeptListReqVO reqVO) { + return selectList(new LambdaQueryWrapperX().likeIfPresent(DeptDO::getName, reqVO.getName()) + .eqIfPresent(DeptDO::getStatus, reqVO.getStatus())); } - default SysDeptDO selectByParentIdAndName(Long parentId, String name) { - return selectOne(new LambdaQueryWrapper().eq(SysDeptDO::getParentId, parentId) - .eq(SysDeptDO::getName, name)); + default DeptDO selectByParentIdAndName(Long parentId, String name) { + return selectOne(new LambdaQueryWrapper().eq(DeptDO::getParentId, parentId) + .eq(DeptDO::getName, name)); } default Integer selectCountByParentId(Long parentId) { - return selectCount(SysDeptDO::getParentId, parentId); + return selectCount(DeptDO::getParentId, parentId); } @InterceptorIgnore(tenantLine = "on") // 该方法忽略多租户。原因:该方法被异步 task 调用,此时获å–ä¸åˆ°ç§Ÿæˆ·ç¼–å· default boolean selectExistsByUpdateTimeAfter(Date maxUpdateTime) { - return selectOne(new LambdaQueryWrapper().select(SysDeptDO::getId) - .gt(SysDeptDO::getUpdateTime, maxUpdateTime).last(SqlConstants.LIMIT1)) != null; + return selectOne(new LambdaQueryWrapper().select(DeptDO::getId) + .gt(DeptDO::getUpdateTime, maxUpdateTime).last(SqlConstants.LIMIT1)) != null; } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysPostMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/PostMapper.java similarity index 55% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysPostMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/PostMapper.java index 1a5665863e..ecbd75949b 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysPostMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/PostMapper.java @@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostPageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; @@ -13,33 +13,33 @@ import java.util.Collection; import java.util.List; @Mapper -public interface SysPostMapper extends BaseMapperX { +public interface PostMapper extends BaseMapperX { - default List selectList(Collection ids, Collection statuses) { - return selectList(new QueryWrapperX().inIfPresent("id", ids) + default List selectList(Collection ids, Collection statuses) { + return selectList(new QueryWrapperX().inIfPresent("id", ids) .inIfPresent("status", statuses)); } - default PageResult selectPage(PostPageReqVO reqVO) { - return selectPage(reqVO, new QueryWrapperX() + default PageResult selectPage(PostPageReqVO reqVO) { + return selectPage(reqVO, new QueryWrapperX() .likeIfPresent("code", reqVO.getCode()) .likeIfPresent("name", reqVO.getName()) .eqIfPresent("status", reqVO.getStatus())); } - default List selectList(PostExportReqVO reqVO) { - return selectList(new QueryWrapperX() + default List selectList(PostExportReqVO reqVO) { + return selectList(new QueryWrapperX() .likeIfPresent("code", reqVO.getCode()) .likeIfPresent("name", reqVO.getName()) .eqIfPresent("status", reqVO.getStatus())); } - default SysPostDO selectByName(String name) { - return selectOne(new QueryWrapper().eq("name", name)); + default PostDO selectByName(String name) { + return selectOne(new QueryWrapper().eq("name", name)); } - default SysPostDO selectByCode(String code) { - return selectOne(new QueryWrapper().eq("code", code)); + default PostDO selectByCode(String code) { + return selectOne(new QueryWrapper().eq("code", code)); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysDeptCoreMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysDeptCoreMapper.java deleted file mode 100644 index 489733bbf5..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysDeptCoreMapper.java +++ /dev/null @@ -1,9 +0,0 @@ -package cn.iocoder.yudao.module.system.dal.mysql.dept; - -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public interface SysDeptCoreMapper extends BaseMapperX { -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysPostCoreMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysPostCoreMapper.java deleted file mode 100644 index 5ce2d21523..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/SysPostCoreMapper.java +++ /dev/null @@ -1,9 +0,0 @@ -package cn.iocoder.yudao.module.system.dal.mysql.dept; - -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public interface SysPostCoreMapper extends BaseMapperX { -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/DictDataMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/DictDataMapper.java new file mode 100644 index 0000000000..07462fc44a --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/DictDataMapper.java @@ -0,0 +1,54 @@ +package cn.iocoder.yudao.module.system.dal.mysql.dict; + +import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataPageReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Arrays; +import java.util.Collection; +import java.util.Date; +import java.util.List; + +@Mapper +public interface DictDataMapper extends BaseMapperX { + + default DictDataDO selectByDictTypeAndValue(String dictType, String value) { + return selectOne(new LambdaQueryWrapper().eq(DictDataDO::getDictType, dictType) + .eq(DictDataDO::getValue, value)); + } + + default List selectByDictTypeAndValues(String dictType, Collection values) { + return selectList(new LambdaQueryWrapper().eq(DictDataDO::getDictType, dictType) + .in(DictDataDO::getValue, values)); + } + + default int selectCountByDictType(String dictType) { + return selectCount(DictDataDO::getDictType, dictType); + } + + default PageResult selectPage(DictDataPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(DictDataDO::getLabel, reqVO.getLabel()) + .likeIfPresent(DictDataDO::getDictType, reqVO.getDictType()) + .eqIfPresent(DictDataDO::getStatus, reqVO.getStatus()) + .orderByAsc(Arrays.asList(DictDataDO::getDictType, DictDataDO::getSort))); + } + + default List selectList(DictDataExportReqVO reqVO) { + return selectList(new LambdaQueryWrapperX().likeIfPresent(DictDataDO::getLabel, reqVO.getLabel()) + .likeIfPresent(DictDataDO::getDictType, reqVO.getDictType()) + .eqIfPresent(DictDataDO::getStatus, reqVO.getStatus())); + } + + default boolean selectExistsByUpdateTimeAfter(Date maxUpdateTime) { + return selectOne(new LambdaQueryWrapper().select(DictDataDO::getId) + .gt(DictDataDO::getUpdateTime, maxUpdateTime).last(SqlConstants.LIMIT1)) != null; + } + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/SysDictTypeMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/DictTypeMapper.java similarity index 96% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/SysDictTypeMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/DictTypeMapper.java index de3d700af8..11b9d5f3e9 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/SysDictTypeMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/DictTypeMapper.java @@ -11,7 +11,7 @@ import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper -public interface SysDictTypeMapper extends BaseMapperX { +public interface DictTypeMapper extends BaseMapperX { default PageResult selectPage(DictTypePageReqVO reqVO) { return selectPage(reqVO, new QueryWrapperX() diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/SysDictDataMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/SysDictDataMapper.java deleted file mode 100644 index 602a77342a..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/SysDictDataMapper.java +++ /dev/null @@ -1,55 +0,0 @@ -package cn.iocoder.yudao.module.system.dal.mysql.dict; - -import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants; -import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataExportReqVO; -import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataPageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictDataDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import org.apache.ibatis.annotations.Mapper; - -import java.util.Arrays; -import java.util.Collection; -import java.util.Date; -import java.util.List; - -@Mapper -public interface SysDictDataMapper extends BaseMapperX { - - default SysDictDataDO selectByDictTypeAndValue(String dictType, String value) { - return selectOne(new LambdaQueryWrapper().eq(SysDictDataDO::getDictType, dictType) - .eq(SysDictDataDO::getValue, value)); - } - - default List selectByDictTypeAndValues(String dictType, Collection values) { - return selectList(new LambdaQueryWrapper().eq(SysDictDataDO::getDictType, dictType) - .in(SysDictDataDO::getValue, values)); - } - - default int selectCountByDictType(String dictType) { - return selectCount(SysDictDataDO::getDictType, dictType); - } - - default PageResult selectPage(DictDataPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .likeIfPresent(SysDictDataDO::getLabel, reqVO.getLabel()) - .likeIfPresent(SysDictDataDO::getDictType, reqVO.getDictType()) - .eqIfPresent(SysDictDataDO::getStatus, reqVO.getStatus()) - .orderByAsc(Arrays.asList(SysDictDataDO::getDictType, SysDictDataDO::getSort))); - } - - default List selectList(DictDataExportReqVO reqVO) { - return selectList(new LambdaQueryWrapperX().likeIfPresent(SysDictDataDO::getLabel, reqVO.getLabel()) - .likeIfPresent(SysDictDataDO::getDictType, reqVO.getDictType()) - .eqIfPresent(SysDictDataDO::getStatus, reqVO.getStatus())); - } - - default boolean selectExistsByUpdateTimeAfter(Date maxUpdateTime) { - return selectOne(new LambdaQueryWrapper().select(SysDictDataDO::getId) - .gt(SysDictDataDO::getUpdateTime, maxUpdateTime).last(SqlConstants.LIMIT1)) != null; - } - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/errorcode/SysErrorCodeMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/errorcode/ErrorCodeMapper.java similarity index 97% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/errorcode/SysErrorCodeMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/errorcode/ErrorCodeMapper.java index 4924c6e872..ab514bd225 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/errorcode/SysErrorCodeMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/errorcode/ErrorCodeMapper.java @@ -14,7 +14,7 @@ import java.util.Date; import java.util.List; @Mapper -public interface SysErrorCodeMapper extends BaseMapperX { +public interface ErrorCodeMapper extends BaseMapperX { default PageResult selectPage(ErrorCodePageReqVO reqVO) { return selectPage(reqVO, new QueryWrapperX() diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/LoginLogMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/LoginLogMapper.java index 8473caccf9..a2731a5f6f 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/LoginLogMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/LoginLogMapper.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.dal.mysql.logger; -import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysLoginLogDO; +import cn.iocoder.yudao.module.system.dal.dataobject.logger.LoginLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; @@ -12,10 +12,10 @@ import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper -public interface LoginLogMapper extends BaseMapperX { +public interface LoginLogMapper extends BaseMapperX { - default PageResult selectPage(LoginLogPageReqVO reqVO) { - QueryWrapperX query = new QueryWrapperX() + default PageResult selectPage(LoginLogPageReqVO reqVO) { + QueryWrapperX query = new QueryWrapperX() .likeIfPresent("user_ip", reqVO.getUserIp()) .likeIfPresent("username", reqVO.getUsername()) .betweenIfPresent("create_time", reqVO.getBeginTime(), reqVO.getEndTime()); @@ -28,8 +28,8 @@ public interface LoginLogMapper extends BaseMapperX { return selectPage(reqVO, query); } - default List selectList(LoginLogExportReqVO reqVO) { - QueryWrapperX query = new QueryWrapperX() + default List selectList(LoginLogExportReqVO reqVO) { + QueryWrapperX query = new QueryWrapperX() .likeIfPresent("user_ip", reqVO.getUserIp()) .likeIfPresent("username", reqVO.getUsername()) .betweenIfPresent("create_time", reqVO.getBeginTime(), reqVO.getEndTime()); diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/SysLoginLogCoreMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/SysLoginLogCoreMapper.java deleted file mode 100644 index 6ef40e8346..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/SysLoginLogCoreMapper.java +++ /dev/null @@ -1,10 +0,0 @@ -package cn.iocoder.yudao.module.system.dal.mysql.logger; - -import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysLoginLogDO; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public interface SysLoginLogCoreMapper extends BaseMapperX { - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/notice/SysNoticeMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/notice/NoticeMapper.java similarity index 91% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/notice/SysNoticeMapper.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/notice/NoticeMapper.java index 6c6a305189..9f077918b2 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/notice/SysNoticeMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/notice/NoticeMapper.java @@ -8,7 +8,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO; import org.apache.ibatis.annotations.Mapper; @Mapper -public interface SysNoticeMapper extends BaseMapperX { +public interface NoticeMapper extends BaseMapperX { default PageResult selectPage(NoticePageReqVO reqVO) { return selectPage(reqVO, new QueryWrapperX() diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/RoleMenuMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/RoleMenuMapper.java index f77294f35f..02008bce82 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/RoleMenuMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/RoleMenuMapper.java @@ -42,7 +42,7 @@ public interface RoleMenuMapper extends BaseMapperX { delete(new QueryWrapper().eq("role_id", roleId)); } - @Select("SELECT id FROM sys_role_menu WHERE update_time > #{maxUpdateTime} LIMIT 1") + @Select("SELECT id FROM system_role_menu WHERE update_time > #{maxUpdateTime} LIMIT 1") Long selectExistsByUpdateTimeAfter(Date maxUpdateTime); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsChannelMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsChannelMapper.java index 9f2f023565..7b0c9f6f9b 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsChannelMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsChannelMapper.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.dal.mysql.sms; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelPageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsChannelDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsChannelDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; @@ -11,17 +11,17 @@ import org.apache.ibatis.annotations.Select; import java.util.Date; @Mapper -public interface SmsChannelMapper extends BaseMapperX { +public interface SmsChannelMapper extends BaseMapperX { - default PageResult selectPage(SmsChannelPageReqVO reqVO) { - return selectPage(reqVO, new QueryWrapperX() + default PageResult selectPage(SmsChannelPageReqVO reqVO) { + return selectPage(reqVO, new QueryWrapperX() .likeIfPresent("signature", reqVO.getSignature()) .eqIfPresent("status", reqVO.getStatus()) .betweenIfPresent("create_time", reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) .orderByDesc("id")); } - @Select("SELECT id FROM sys_sms_channel WHERE update_time > #{maxUpdateTime} LIMIT 1") + @Select("SELECT id FROM system_sms_channel WHERE update_time > #{maxUpdateTime} LIMIT 1") Long selectExistsByUpdateTimeAfter(Date maxUpdateTime); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsLogMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsLogMapper.java index f941a0f855..01ea77a46b 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsLogMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsLogMapper.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.dal.mysql.sms; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogPageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsLogDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; @@ -11,10 +11,10 @@ import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper -public interface SmsLogMapper extends BaseMapperX { +public interface SmsLogMapper extends BaseMapperX { - default PageResult selectPage(SmsLogPageReqVO reqVO) { - return selectPage(reqVO, new QueryWrapperX() + default PageResult selectPage(SmsLogPageReqVO reqVO) { + return selectPage(reqVO, new QueryWrapperX() .eqIfPresent("channel_id", reqVO.getChannelId()) .eqIfPresent("template_id", reqVO.getTemplateId()) .likeIfPresent("mobile", reqVO.getMobile()) @@ -25,8 +25,8 @@ public interface SmsLogMapper extends BaseMapperX { .orderByDesc("id")); } - default List selectList(SmsLogExportReqVO reqVO) { - return selectList(new QueryWrapperX() + default List selectList(SmsLogExportReqVO reqVO) { + return selectList(new QueryWrapperX() .eqIfPresent("channel_id", reqVO.getChannelId()) .eqIfPresent("template_id", reqVO.getTemplateId()) .likeIfPresent("mobile", reqVO.getMobile()) diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsTemplateMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsTemplateMapper.java index d98e6fc5f8..daf9882f0e 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsTemplateMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsTemplateMapper.java @@ -4,7 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplatePageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; @@ -13,41 +13,41 @@ import java.util.Date; import java.util.List; @Mapper -public interface SmsTemplateMapper extends BaseMapperX { +public interface SmsTemplateMapper extends BaseMapperX { - @Select("SELECT id FROM sys_sms_template WHERE update_time > #{maxUpdateTime} LIMIT 1") + @Select("SELECT id FROM system_sms_template WHERE update_time > #{maxUpdateTime} LIMIT 1") Long selectExistsByUpdateTimeAfter(Date maxUpdateTime); - default SysSmsTemplateDO selectByCode(String code) { - return selectOne(SysSmsTemplateDO::getCode, code); + default SmsTemplateDO selectByCode(String code) { + return selectOne(SmsTemplateDO::getCode, code); } - default PageResult selectPage(SmsTemplatePageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .eqIfPresent(SysSmsTemplateDO::getType, reqVO.getType()) - .eqIfPresent(SysSmsTemplateDO::getStatus, reqVO.getStatus()) - .likeIfPresent(SysSmsTemplateDO::getCode, reqVO.getCode()) - .likeIfPresent(SysSmsTemplateDO::getContent, reqVO.getContent()) - .likeIfPresent(SysSmsTemplateDO::getApiTemplateId, reqVO.getApiTemplateId()) - .eqIfPresent(SysSmsTemplateDO::getChannelId, reqVO.getChannelId()) - .betweenIfPresent(SysSmsTemplateDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) - .orderByDesc(SysSmsTemplateDO::getId)); + default PageResult selectPage(SmsTemplatePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(SmsTemplateDO::getType, reqVO.getType()) + .eqIfPresent(SmsTemplateDO::getStatus, reqVO.getStatus()) + .likeIfPresent(SmsTemplateDO::getCode, reqVO.getCode()) + .likeIfPresent(SmsTemplateDO::getContent, reqVO.getContent()) + .likeIfPresent(SmsTemplateDO::getApiTemplateId, reqVO.getApiTemplateId()) + .eqIfPresent(SmsTemplateDO::getChannelId, reqVO.getChannelId()) + .betweenIfPresent(SmsTemplateDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) + .orderByDesc(SmsTemplateDO::getId)); } - default List selectList(SmsTemplateExportReqVO reqVO) { - return selectList(new LambdaQueryWrapperX() - .eqIfPresent(SysSmsTemplateDO::getType, reqVO.getType()) - .eqIfPresent(SysSmsTemplateDO::getStatus, reqVO.getStatus()) - .likeIfPresent(SysSmsTemplateDO::getCode, reqVO.getCode()) - .likeIfPresent(SysSmsTemplateDO::getContent, reqVO.getContent()) - .likeIfPresent(SysSmsTemplateDO::getApiTemplateId, reqVO.getApiTemplateId()) - .eqIfPresent(SysSmsTemplateDO::getChannelId, reqVO.getChannelId()) - .betweenIfPresent(SysSmsTemplateDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) - .orderByDesc(SysSmsTemplateDO::getId)); + default List selectList(SmsTemplateExportReqVO reqVO) { + return selectList(new LambdaQueryWrapperX() + .eqIfPresent(SmsTemplateDO::getType, reqVO.getType()) + .eqIfPresent(SmsTemplateDO::getStatus, reqVO.getStatus()) + .likeIfPresent(SmsTemplateDO::getCode, reqVO.getCode()) + .likeIfPresent(SmsTemplateDO::getContent, reqVO.getContent()) + .likeIfPresent(SmsTemplateDO::getApiTemplateId, reqVO.getApiTemplateId()) + .eqIfPresent(SmsTemplateDO::getChannelId, reqVO.getChannelId()) + .betweenIfPresent(SmsTemplateDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) + .orderByDesc(SmsTemplateDO::getId)); } default Integer selectCountByChannelId(Long channelId) { - return selectCount(SysSmsTemplateDO::getChannelId, channelId); + return selectCount(SmsTemplateDO::getChannelId, channelId); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/social/SocialUserMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/social/SocialUserMapper.java new file mode 100644 index 0000000000..3322ab8403 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/social/SocialUserMapper.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.module.system.dal.mysql.social; + +import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Collection; +import java.util.List; + +@Mapper +public interface SocialUserMapper extends BaseMapperX { + + default List selectListByTypeAndUnionId(Integer userType, Collection types, String unionId) { + return selectList(new QueryWrapper().eq("user_type", userType) + .in("type", types).eq("union_id", unionId)); + } + + default List selectListByTypeAndUserId(Integer userType, Collection types, Long userId) { + return selectList(new QueryWrapper().eq("user_type", userType) + .in("type", types).eq("user_id", userId)); + } + + default List selectListByUserId(Integer userType, Long userId) { + return selectList(new QueryWrapper().eq("user_type", userType).eq("user_id", userId)); + } + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/social/SysSocialUserMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/social/SysSocialUserMapper.java deleted file mode 100644 index dc92ddb304..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/social/SysSocialUserMapper.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.yudao.module.system.dal.mysql.social; - -import cn.iocoder.yudao.module.system.dal.dataobject.social.SysSocialUserDO; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import org.apache.ibatis.annotations.Mapper; - -import java.util.Collection; -import java.util.List; - -@Mapper -public interface SysSocialUserMapper extends BaseMapperX { - - default List selectListByTypeAndUnionId(Integer userType, Collection types, String unionId) { - return selectList(new QueryWrapper().eq("user_type", userType) - .in("type", types).eq("union_id", unionId)); - } - - default List selectListByTypeAndUserId(Integer userType, Collection types, Long userId) { - return selectList(new QueryWrapper().eq("user_type", userType) - .in("type", types).eq("user_id", userId)); - } - - default List selectListByUserId(Integer userType, Long userId) { - return selectList(new QueryWrapper().eq("user_type", userType).eq("user_id", userId)); - } - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tenant/SysTenantCoreMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tenant/SysTenantCoreMapper.java deleted file mode 100644 index de7656f400..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tenant/SysTenantCoreMapper.java +++ /dev/null @@ -1,9 +0,0 @@ -package cn.iocoder.yudao.module.system.dal.mysql.tenant; - -import cn.iocoder.yudao.module.system.dal.dataobject.tenant.SysTenantDO; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public interface SysTenantCoreMapper extends BaseMapperX { -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tenant/SysTenantMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tenant/SysTenantMapper.java deleted file mode 100755 index f913d625df..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tenant/SysTenantMapper.java +++ /dev/null @@ -1,44 +0,0 @@ -package cn.iocoder.yudao.module.system.dal.mysql.tenant; - -import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantExportReqVO; -import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantPageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.tenant.SysTenantDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import org.apache.ibatis.annotations.Mapper; - -import java.util.List; - -/** - * 租户 Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface SysTenantMapper extends BaseMapperX { - - default PageResult selectPage(TenantPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .likeIfPresent(SysTenantDO::getName, reqVO.getName()) - .likeIfPresent(SysTenantDO::getContactName, reqVO.getContactName()) - .likeIfPresent(SysTenantDO::getContactMobile, reqVO.getContactMobile()) - .eqIfPresent(SysTenantDO::getStatus, reqVO.getStatus()) - .betweenIfPresent(SysTenantDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) - .orderByDesc(SysTenantDO::getId)); - } - - default List selectList(TenantExportReqVO reqVO) { - return selectList(new LambdaQueryWrapperX() - .likeIfPresent(SysTenantDO::getName, reqVO.getName()) - .likeIfPresent(SysTenantDO::getContactName, reqVO.getContactName()) - .likeIfPresent(SysTenantDO::getContactMobile, reqVO.getContactMobile()) - .eqIfPresent(SysTenantDO::getStatus, reqVO.getStatus()) - .betweenIfPresent(SysTenantDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) - .orderByDesc(SysTenantDO::getId)); - } - - default SysTenantDO selectByName(String name) { - return selectOne(SysTenantDO::getName, name); - } -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tenant/TenantMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tenant/TenantMapper.java new file mode 100755 index 0000000000..9fe0dbec8b --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tenant/TenantMapper.java @@ -0,0 +1,44 @@ +package cn.iocoder.yudao.module.system.dal.mysql.tenant; + +import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantExportReqVO; +import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantPageReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 租户 Mapper + * + * @author èŠ‹é“æºç  + */ +@Mapper +public interface TenantMapper extends BaseMapperX { + + default PageResult selectPage(TenantPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(TenantDO::getName, reqVO.getName()) + .likeIfPresent(TenantDO::getContactName, reqVO.getContactName()) + .likeIfPresent(TenantDO::getContactMobile, reqVO.getContactMobile()) + .eqIfPresent(TenantDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(TenantDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) + .orderByDesc(TenantDO::getId)); + } + + default List selectList(TenantExportReqVO reqVO) { + return selectList(new LambdaQueryWrapperX() + .likeIfPresent(TenantDO::getName, reqVO.getName()) + .likeIfPresent(TenantDO::getContactName, reqVO.getContactName()) + .likeIfPresent(TenantDO::getContactMobile, reqVO.getContactMobile()) + .eqIfPresent(TenantDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(TenantDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) + .orderByDesc(TenantDO::getId)); + } + + default TenantDO selectByName(String name) { + return selectOne(TenantDO::getName, name); + } +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/SysRedisKeyConstants.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/RedisKeyConstants.java similarity index 96% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/SysRedisKeyConstants.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/RedisKeyConstants.java index 78b1ca24f8..d2d28219bb 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/SysRedisKeyConstants.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/RedisKeyConstants.java @@ -13,7 +13,7 @@ import static cn.iocoder.yudao.framework.redis.core.RedisKeyDefine.KeyTypeEnum.S * * @author èŠ‹é“æºç  */ -public interface SysRedisKeyConstants { +public interface RedisKeyConstants { RedisKeyDefine CAPTCHA_CODE = new RedisKeyDefine("验è¯ç çš„缓存", "captcha_code:%s", // 傿•°ä¸º uuid @@ -30,5 +30,5 @@ public interface SysRedisKeyConstants { RedisKeyDefine SOCIAL_AUTH_STATE = new RedisKeyDefine("社交登陆的 state", "social_auth_state:%s", // 傿•°ä¸º state STRING, String.class, Duration.ofHours(24)); // 值为 state - + } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/SysRedisKeyCoreConstants.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/SysRedisKeyCoreConstants.java deleted file mode 100644 index 735adcc917..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/SysRedisKeyCoreConstants.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.iocoder.yudao.module.system.dal.redis; - -import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine; -import cn.iocoder.yudao.framework.security.core.LoginUser; -import me.zhyd.oauth.model.AuthUser; - -import java.time.Duration; - -import static cn.iocoder.yudao.framework.redis.core.RedisKeyDefine.KeyTypeEnum.STRING; - -/** - * System Redis Key 枚举类 - * - * @author èŠ‹é“æºç  - */ -public interface SysRedisKeyCoreConstants { - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/auth/LoginUserRedisDAO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/auth/LoginUserRedisDAO.java index ead1d0287e..8132a882ef 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/auth/LoginUserRedisDAO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/auth/LoginUserRedisDAO.java @@ -8,7 +8,7 @@ import org.springframework.stereotype.Repository; import javax.annotation.Resource; -import static cn.iocoder.yudao.module.system.dal.redis.SysRedisKeyConstants.LOGIN_USER; +import static cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants.LOGIN_USER; /** * {@link LoginUser} çš„ RedisDAO diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/common/CaptchaRedisDAO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/common/CaptchaRedisDAO.java index 1c83a7c5c5..bfcb7878b1 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/common/CaptchaRedisDAO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/common/CaptchaRedisDAO.java @@ -6,7 +6,7 @@ import org.springframework.stereotype.Repository; import javax.annotation.Resource; import java.time.Duration; -import static cn.iocoder.yudao.module.system.dal.redis.SysRedisKeyConstants.CAPTCHA_CODE; +import static cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants.CAPTCHA_CODE; /** * 验è¯ç çš„ Redis DAO diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/social/SocialAuthUserRedisDAO.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/social/SocialAuthUserRedisDAO.java index 12cdc94869..ac71f1b5d7 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/social/SocialAuthUserRedisDAO.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/redis/social/SocialAuthUserRedisDAO.java @@ -8,7 +8,7 @@ import org.springframework.stereotype.Repository; import javax.annotation.Resource; -import static cn.iocoder.yudao.module.system.dal.redis.SysRedisKeyConstants.SOCIAL_AUTH_USER; +import static cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants.SOCIAL_AUTH_USER; /** diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/common/SysSexEnum.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/common/SexEnum.java similarity index 93% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/common/SysSexEnum.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/common/SexEnum.java index 7fd76247a4..f6120c4187 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/common/SysSexEnum.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/common/SexEnum.java @@ -10,7 +10,7 @@ import lombok.Getter; */ @Getter @AllArgsConstructor -public enum SysSexEnum { +public enum SexEnum { /** ç”· */ MALE(1), diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SysSmsReceiveStatusEnum.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SmsReceiveStatusEnum.java similarity index 90% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SysSmsReceiveStatusEnum.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SmsReceiveStatusEnum.java index 2b75a45e76..581ee6f9a4 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SysSmsReceiveStatusEnum.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SmsReceiveStatusEnum.java @@ -11,7 +11,7 @@ import lombok.Getter; */ @Getter @AllArgsConstructor -public enum SysSmsReceiveStatusEnum { +public enum SmsReceiveStatusEnum { INIT(0), // åˆå§‹åŒ– SUCCESS(10), // 接收æˆåŠŸ diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SysSmsSendStatusEnum.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SmsSendStatusEnum.java similarity index 91% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SysSmsSendStatusEnum.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SmsSendStatusEnum.java index ea57fa8cc3..307c9f6b75 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SysSmsSendStatusEnum.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SmsSendStatusEnum.java @@ -11,7 +11,7 @@ import lombok.Getter; */ @Getter @AllArgsConstructor -public enum SysSmsSendStatusEnum { +public enum SmsSendStatusEnum { INIT(0), // åˆå§‹åŒ– SUCCESS(10), // å‘逿ˆåŠŸ diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SysSmsTemplateTypeEnum.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SmsTemplateTypeEnum.java similarity index 90% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SysSmsTemplateTypeEnum.java rename to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SmsTemplateTypeEnum.java index 5f853e2d75..d24b07a9ed 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SysSmsTemplateTypeEnum.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SmsTemplateTypeEnum.java @@ -10,7 +10,7 @@ import lombok.Getter; */ @Getter @AllArgsConstructor -public enum SysSmsTemplateTypeEnum { +public enum SmsTemplateTypeEnum { VERIFICATION_CODE(1), // 验è¯ç  NOTICE(2), // 通知 diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/config/DataPermissionConfiguration.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/config/DataPermissionConfiguration.java index c65c866b51..0be6684c89 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/config/DataPermissionConfiguration.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/config/DataPermissionConfiguration.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.framework.datapermission.config; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.framework.datapermission.core.dept.rule.DeptDataPermissionRuleCustomizer; import org.springframework.context.annotation.Bean; @@ -18,7 +18,7 @@ public class DataPermissionConfiguration { public DeptDataPermissionRuleCustomizer sysDeptDataPermissionRuleCustomizer() { return rule -> { rule.addDeptColumn(AdminUserDO.class); - rule.addDeptColumn(SysDeptDO.class, "id"); + rule.addDeptColumn(DeptDO.class, "id"); }; } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsSendConsumer.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsSendConsumer.java index 6fe1db5a55..495c06a9be 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsSendConsumer.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsSendConsumer.java @@ -19,12 +19,12 @@ import javax.annotation.Resource; public class SmsSendConsumer extends AbstractStreamMessageListener { @Resource - private SmsSendService smsCoreService; + private SmsSendService smsSendService; @Override public void onMessage(SmsSendMessage message) { log.info("[onMessage][消æ¯å†…容({})]", message); - smsCoreService.doSendSms(message); + smsSendService.doSendSms(message); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java index fe4e502f0a..d2fe1ba1ab 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java @@ -12,7 +12,7 @@ import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthSocialBi import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthSocialLogin2ReqVO; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthSocialLoginReqVO; import cn.iocoder.yudao.module.system.convert.auth.AuthConvert; -import cn.iocoder.yudao.module.system.dal.dataobject.social.SysSocialUserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum; import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum; @@ -74,7 +74,7 @@ public class AdminAuthServiceImpl implements AdminAuthService { @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { - // èŽ·å– username 对应的 SysUserDO + // èŽ·å– username 对应的 AdminUserDO AdminUserDO user = userService.getUserByUsername(username); if (user == null) { throw new UsernameNotFoundException(username); @@ -85,7 +85,7 @@ public class AdminAuthServiceImpl implements AdminAuthService { @Override public LoginUser mockLogin(Long userId) { - // 获å–用户编å·å¯¹åº”çš„ SysUserDO + // 获å–用户编å·å¯¹åº”çš„ AdminUserDO AdminUserDO user = userService.getUser(userId); if (user == null) { throw new UsernameNotFoundException(String.valueOf(userId)); @@ -196,9 +196,9 @@ public class AdminAuthServiceImpl implements AdminAuthService { AuthUser authUser = socialService.getAuthUser(reqVO.getType(), reqVO.getCode(), reqVO.getState()); Assert.notNull(authUser, "授æƒç”¨æˆ·ä¸ä¸ºç©º"); - // 如果未绑定 SysSocialUserDO 用户,则无法自动登录,进行报错 + // 如果未绑定 SocialUserDO 用户,则无法自动登录,进行报错 String unionId = socialService.getAuthUserUnionId(authUser); - List socialUsers = socialService.getAllSocialUserList(reqVO.getType(), unionId, getUserType().getValue()); + List socialUsers = socialService.getAllSocialUserList(reqVO.getType(), unionId, getUserType().getValue()); if (CollUtil.isEmpty(socialUsers)) { throw exception(AUTH_THIRD_LOGIN_NOT_BIND); } @@ -295,7 +295,7 @@ public class AdminAuthServiceImpl implements AdminAuthService { return loginUser; } - // 釿–°åŠ è½½ SysUserDO ä¿¡æ¯ + // 釿–°åŠ è½½ AdminUserDO ä¿¡æ¯ AdminUserDO user = userService.getUser(loginUser.getId()); if (user == null || CommonStatusEnum.DISABLE.getStatus().equals(user.getStatus())) { throw exception(AUTH_TOKEN_EXPIRED); // 校验 token 时,用户被ç¦ç”¨çš„æƒ…况下,也认为 token 过期,方便å‰ç«¯è·³è½¬åˆ°ç™»å½•ç•Œé¢ diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionService.java index ef9e92caab..779f33a476 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionService.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.service.auth; import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.session.UserSessionPageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.auth.SysUserSessionDO; +import cn.iocoder.yudao.module.system.dal.dataobject.auth.UserSessionDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; /** @@ -18,7 +18,7 @@ public interface UserSessionService { * @param reqVO 分页æ¡ä»¶ * @return 份é¢ä¸Žåˆ—表 */ - PageResult getUserSessionPage(UserSessionPageReqVO reqVO); + PageResult getUserSessionPage(UserSessionPageReqVO reqVO); /** * 移除超时的在线用户 diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImpl.java index beced6bd13..a1118958ac 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImpl.java @@ -6,13 +6,13 @@ import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.security.config.SecurityProperties; import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.session.UserSessionPageReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.auth.UserSessionDO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; -import cn.iocoder.yudao.module.system.dal.mysql.auth.SysUserSessionMapper; +import cn.iocoder.yudao.module.system.dal.mysql.auth.UserSessionMapper; import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum; import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum; import cn.iocoder.yudao.module.system.service.logger.LoginLogService; import cn.iocoder.yudao.module.system.service.user.AdminUserService; -import cn.iocoder.yudao.module.system.dal.dataobject.auth.SysUserSessionDO; import cn.iocoder.yudao.module.system.dal.redis.auth.LoginUserRedisDAO; import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -39,7 +39,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.addTime; public class UserSessionServiceImpl implements UserSessionService { @Resource - private SysUserSessionMapper userSessionMapper; + private UserSessionMapper userSessionMapper; @Resource private AdminUserService userService; @@ -47,13 +47,13 @@ public class UserSessionServiceImpl implements UserSessionService { private LoginLogService loginLogService; @Resource - private LoginUserRedisDAO loginUserCoreRedisDAO; + private LoginUserRedisDAO loginUserRedisDAO; @Resource private SecurityProperties securityProperties; @Override - public PageResult getUserSessionPage(UserSessionPageReqVO reqVO) { + public PageResult getUserSessionPage(UserSessionPageReqVO reqVO) { // 处ç†åŸºäºŽç”¨æˆ·æ˜µç§°çš„æŸ¥è¯¢ Collection userIds = null; if (StrUtil.isNotEmpty(reqVO.getUsername())) { @@ -69,11 +69,11 @@ public class UserSessionServiceImpl implements UserSessionService { @Override public long clearSessionTimeout() { // 获å–db里已ç»è¶…时的用户列表 - List sessionTimeoutDOS = userSessionMapper.selectListBySessionTimoutLt(); - Map timeoutSessionDOMap = sessionTimeoutDOS + List sessionTimeoutDOS = userSessionMapper.selectListBySessionTimoutLt(); + Map timeoutSessionDOMap = sessionTimeoutDOS .stream() - .filter(sessionDO -> loginUserCoreRedisDAO.get(sessionDO.getId()) == null) - .collect(Collectors.toMap(SysUserSessionDO::getId, o -> o)); + .filter(sessionDO -> loginUserRedisDAO.get(sessionDO.getId()) == null) + .collect(Collectors.toMap(UserSessionDO::getId, o -> o)); // 确认已ç»è¶…æ—¶,按批次移出在线用户列表 if (CollUtil.isNotEmpty(timeoutSessionDOMap)) { Lists.partition(new ArrayList<>(timeoutSessionDOMap.keySet()), 100) @@ -84,8 +84,8 @@ public class UserSessionServiceImpl implements UserSessionService { return timeoutSessionDOMap.size(); } - private void createTimeoutLogoutLog(Collection timeoutSessionDOS) { - for (SysUserSessionDO timeoutSessionDO : timeoutSessionDOS) { + private void createTimeoutLogoutLog(Collection timeoutSessionDOS) { + for (UserSessionDO timeoutSessionDO : timeoutSessionDOS) { LoginLogCreateReqDTO reqDTO = new LoginLogCreateReqDTO(); reqDTO.setLogType(LoginLogTypeEnum.LOGOUT_TIMEOUT.getType()); reqDTO.setTraceId(TracerUtils.getTraceId()); @@ -105,9 +105,9 @@ public class UserSessionServiceImpl implements UserSessionService { String sessionId = generateSessionId(); // 写入 Redis 缓存 loginUser.setUpdateTime(new Date()); - loginUserCoreRedisDAO.set(sessionId, loginUser); + loginUserRedisDAO.set(sessionId, loginUser); // 写入 DB 中 - SysUserSessionDO userSession = SysUserSessionDO.builder().id(sessionId) + UserSessionDO userSession = UserSessionDO.builder().id(sessionId) .userId(loginUser.getId()).userType(loginUser.getUserType()) .userIp(userIp).userAgent(userAgent).username(loginUser.getUsername()) .sessionTimeout(addTime(Duration.ofMillis(getSessionTimeoutMillis()))) @@ -121,9 +121,9 @@ public class UserSessionServiceImpl implements UserSessionService { public void refreshUserSession(String sessionId, LoginUser loginUser) { // 写入 Redis 缓存 loginUser.setUpdateTime(new Date()); - loginUserCoreRedisDAO.set(sessionId, loginUser); + loginUserRedisDAO.set(sessionId, loginUser); // æ›´æ–° DB 中 - SysUserSessionDO updateObj = SysUserSessionDO.builder().id(sessionId).build(); + UserSessionDO updateObj = UserSessionDO.builder().id(sessionId).build(); updateObj.setUsername(loginUser.getUsername()); updateObj.setUpdateTime(new Date()); updateObj.setSessionTimeout(addTime(Duration.ofMillis(getSessionTimeoutMillis()))); @@ -133,14 +133,14 @@ public class UserSessionServiceImpl implements UserSessionService { @Override public void deleteUserSession(String sessionId) { // 删除 Redis 缓存 - loginUserCoreRedisDAO.delete(sessionId); + loginUserRedisDAO.delete(sessionId); // 删除 DB 记录 userSessionMapper.deleteById(sessionId); } @Override public LoginUser getLoginUser(String sessionId) { - return loginUserCoreRedisDAO.get(sessionId); + return loginUserRedisDAO.get(sessionId); } @Override diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptService.java index c9aa07c567..3716c906f2 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptService.java @@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptCreateReqVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; import java.util.Collection; import java.util.Collections; @@ -53,7 +53,7 @@ public interface DeptService { * @param reqVO 筛选æ¡ä»¶è¯·æ±‚ VO * @return 部门列表 */ - List getSimpleDepts(DeptListReqVO reqVO); + List getSimpleDepts(DeptListReqVO reqVO); /** * 获得所有å­éƒ¨é—¨ï¼Œä»Žç¼“存中 @@ -62,7 +62,7 @@ public interface DeptService { * @param recursive 是å¦é€’å½’èŽ·å–æ‰€æœ‰ * @return å­éƒ¨é—¨åˆ—表 */ - List getDeptsByParentIdFromCache(Long parentId, boolean recursive); + List getDeptsByParentIdFromCache(Long parentId, boolean recursive); /** * èŽ·å¾—éƒ¨é—¨ä¿¡æ¯æ•°ç»„ @@ -70,7 +70,7 @@ public interface DeptService { * @param ids éƒ¨é—¨ç¼–å·æ•°ç»„ * @return éƒ¨é—¨ä¿¡æ¯æ•°ç»„ */ - List getDepts(Collection ids); + List getDepts(Collection ids); /** * èŽ·å¾—éƒ¨é—¨ä¿¡æ¯ @@ -78,7 +78,7 @@ public interface DeptService { * @param id éƒ¨é—¨ç¼–å· * @return éƒ¨é—¨ä¿¡æ¯ */ - SysDeptDO getDept(Long id); + DeptDO getDept(Long id); /** * æ ¡éªŒéƒ¨é—¨ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: @@ -95,7 +95,7 @@ public interface DeptService { * @param ids éƒ¨é—¨ç¼–å·æ•°ç»„ * @return 部门列表 */ - List getSimpleDepts(Collection ids); + List getSimpleDepts(Collection ids); /** * 获得指定编å·çš„部门 Map @@ -103,11 +103,11 @@ public interface DeptService { * @param ids éƒ¨é—¨ç¼–å·æ•°ç»„ * @return 部门 Map */ - default Map getDeptMap(Collection ids) { + default Map getDeptMap(Collection ids) { if (CollUtil.isEmpty(ids)) { return Collections.emptyMap(); } - List list = getSimpleDepts(ids); - return CollectionUtils.convertMap(list, SysDeptDO::getId); + List list = getSimpleDepts(ids); + return CollectionUtils.convertMap(list, DeptDO::getId); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java index a21ccfb7bf..955ce890ac 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java @@ -9,8 +9,8 @@ import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptCreateRe import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptUpdateReqVO; import cn.iocoder.yudao.module.system.convert.dept.DeptConvert; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.module.system.dal.mysql.dept.SysDeptMapper; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; +import cn.iocoder.yudao.module.system.dal.mysql.dept.DeptMapper; import cn.iocoder.yudao.module.system.enums.dept.DeptIdEnum; import cn.iocoder.yudao.module.system.mq.producer.dept.DeptProducer; import com.google.common.collect.ImmutableMap; @@ -46,27 +46,27 @@ public class DeptServiceImpl implements DeptService { /** * 部门缓存 - * keyï¼šéƒ¨é—¨ç¼–å· {@link SysDeptDO#getId()} + * keyï¼šéƒ¨é—¨ç¼–å· {@link DeptDO#getId()} * * 这里声明 volatile ä¿®é¥°çš„åŽŸå› æ˜¯ï¼Œæ¯æ¬¡åˆ·æ–°æ—¶ï¼Œç›´æŽ¥ä¿®æ”¹æŒ‡å‘ */ @SuppressWarnings("FieldCanBeLocal") - private volatile Map deptCache; + private volatile Map deptCache; /** * 父部门缓存 - * keyï¼šéƒ¨é—¨ç¼–å· {@link SysDeptDO#getParentId()} + * keyï¼šéƒ¨é—¨ç¼–å· {@link DeptDO#getParentId()} * value: 直接å­éƒ¨é—¨åˆ—表 * * 这里声明 volatile ä¿®é¥°çš„åŽŸå› æ˜¯ï¼Œæ¯æ¬¡åˆ·æ–°æ—¶ï¼Œç›´æŽ¥ä¿®æ”¹æŒ‡å‘ */ - private volatile Multimap parentDeptCache; + private volatile Multimap parentDeptCache; /** * 缓存部门的最大更新时间,用于åŽç»­çš„增é‡è½®è¯¢ï¼Œåˆ¤æ–­æ˜¯å¦æœ‰æ›´æ–° */ private volatile Date maxUpdateTime; @Resource - private SysDeptMapper deptMapper; + private DeptMapper deptMapper; @Resource private DeptProducer deptProducer; @@ -75,14 +75,14 @@ public class DeptServiceImpl implements DeptService { @PostConstruct public synchronized void initLocalCache() { // 获å–部门列表,如果有更新 - List deptList = this.loadDeptIfUpdate(maxUpdateTime); + List deptList = this.loadDeptIfUpdate(maxUpdateTime); if (CollUtil.isEmpty(deptList)) { return; } // 构建缓存 - ImmutableMap.Builder builder = ImmutableMap.builder(); - ImmutableMultimap.Builder parentBuilder = ImmutableMultimap.builder(); + ImmutableMap.Builder builder = ImmutableMap.builder(); + ImmutableMultimap.Builder parentBuilder = ImmutableMultimap.builder(); deptList.forEach(sysRoleDO -> { builder.put(sysRoleDO.getId(), sysRoleDO); parentBuilder.put(sysRoleDO.getParentId(), sysRoleDO); @@ -107,7 +107,7 @@ public class DeptServiceImpl implements DeptService { * @param maxUpdateTime 当å‰éƒ¨é—¨çš„æœ€å¤§æ›´æ–°æ—¶é—´ * @return 部门列表 */ - private List loadDeptIfUpdate(Date maxUpdateTime) { + private List loadDeptIfUpdate(Date maxUpdateTime) { // 第一步,判断是å¦è¦æ›´æ–°ã€‚ if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB ä¸€å®šæœ‰æ–°æ•°æ® log.info("[loadMenuIfUpdate][首次加载全é‡éƒ¨é—¨]"); @@ -126,7 +126,7 @@ public class DeptServiceImpl implements DeptService { // 校验正确性 checkCreateOrUpdate(null, reqVO.getParentId(), reqVO.getName()); // æ’入部门 - SysDeptDO dept = DeptConvert.INSTANCE.convert(reqVO); + DeptDO dept = DeptConvert.INSTANCE.convert(reqVO); deptMapper.insert(dept); // å‘é€åˆ·æ–°æ¶ˆæ¯ deptProducer.sendDeptRefreshMessage(); @@ -138,7 +138,7 @@ public class DeptServiceImpl implements DeptService { // 校验正确性 checkCreateOrUpdate(reqVO.getId(), reqVO.getParentId(), reqVO.getName()); // 更新部门 - SysDeptDO updateObj = DeptConvert.INSTANCE.convert(reqVO); + DeptDO updateObj = DeptConvert.INSTANCE.convert(reqVO); deptMapper.updateById(updateObj); // å‘é€åˆ·æ–°æ¶ˆæ¯ deptProducer.sendDeptRefreshMessage(); @@ -159,16 +159,16 @@ public class DeptServiceImpl implements DeptService { } @Override - public List getSimpleDepts(DeptListReqVO reqVO) { + public List getSimpleDepts(DeptListReqVO reqVO) { return deptMapper.selectList(reqVO); } @Override - public List getDeptsByParentIdFromCache(Long parentId, boolean recursive) { + public List getDeptsByParentIdFromCache(Long parentId, boolean recursive) { if (parentId == null) { return Collections.emptyList(); } - List result = new ArrayList<>(); // TODO 芋艿:待优化,新增缓存,é¿å…æ¯æ¬¡é历的计算 + List result = new ArrayList<>(); // TODO 芋艿:待优化,新增缓存,é¿å…æ¯æ¬¡é历的计算 // 递归,简å•ç²—æš´ this.getDeptsByParentIdFromCache(result, parentId, recursive ? Integer.MAX_VALUE : 1, // 如果递归获å–,则无é™ï¼›å¦åˆ™ï¼Œåªé€’å½’ 1 次 @@ -184,14 +184,14 @@ public class DeptServiceImpl implements DeptService { * @param recursiveCount 递归次数 * @param parentDeptMap 父部门 Map,使用缓存,é¿å…å˜åŒ– */ - private void getDeptsByParentIdFromCache(List result, Long parentId, int recursiveCount, - Multimap parentDeptMap) { + private void getDeptsByParentIdFromCache(List result, Long parentId, int recursiveCount, + Multimap parentDeptMap) { // 递归次数为 0,结æŸï¼ if (recursiveCount == 0) { return; } // 获得å­éƒ¨é—¨ - Collection depts = parentDeptMap.get(parentId); + Collection depts = parentDeptMap.get(parentId); if (CollUtil.isEmpty(depts)) { return; } @@ -219,7 +219,7 @@ public class DeptServiceImpl implements DeptService { throw ServiceExceptionUtil.exception(DEPT_PARENT_ERROR); } // 父岗ä½ä¸å­˜åœ¨ - SysDeptDO dept = deptMapper.selectById(parentId); + DeptDO dept = deptMapper.selectById(parentId); if (dept == null) { throw ServiceExceptionUtil.exception(DEPT_PARENT_NOT_EXITS); } @@ -228,7 +228,7 @@ public class DeptServiceImpl implements DeptService { throw ServiceExceptionUtil.exception(DEPT_NOT_ENABLE); } // 父部门ä¸èƒ½æ˜¯åŽŸæ¥çš„å­éƒ¨é—¨ - List children = this.getDeptsByParentIdFromCache(id, true); + List children = this.getDeptsByParentIdFromCache(id, true); if (children.stream().anyMatch(dept1 -> dept1.getId().equals(parentId))) { throw ServiceExceptionUtil.exception(DEPT_PARENT_IS_CHILD); } @@ -238,14 +238,14 @@ public class DeptServiceImpl implements DeptService { if (id == null) { return; } - SysDeptDO dept = deptMapper.selectById(id); + DeptDO dept = deptMapper.selectById(id); if (dept == null) { throw ServiceExceptionUtil.exception(DEPT_NOT_FOUND); } } private void checkDeptNameUnique(Long id, Long parentId, String name) { - SysDeptDO menu = deptMapper.selectByParentIdAndName(parentId, name); + DeptDO menu = deptMapper.selectByParentIdAndName(parentId, name); if (menu == null) { return; } @@ -259,12 +259,12 @@ public class DeptServiceImpl implements DeptService { } @Override - public List getDepts(Collection ids) { + public List getDepts(Collection ids) { return deptMapper.selectBatchIds(ids); } @Override - public SysDeptDO getDept(Long id) { + public DeptDO getDept(Long id) { return deptMapper.selectById(id); } @@ -274,11 +274,11 @@ public class DeptServiceImpl implements DeptService { return; } // èŽ·å¾—ç§‘å®¤ä¿¡æ¯ - List depts = deptMapper.selectBatchIds(ids); - Map deptMap = CollectionUtils.convertMap(depts, SysDeptDO::getId); + List depts = deptMapper.selectBatchIds(ids); + Map deptMap = CollectionUtils.convertMap(depts, DeptDO::getId); // 校验 ids.forEach(id -> { - SysDeptDO dept = deptMap.get(id); + DeptDO dept = deptMap.get(id); if (dept == null) { throw exception(DEPT_NOT_FOUND); } @@ -289,7 +289,7 @@ public class DeptServiceImpl implements DeptService { } @Override - public List getSimpleDepts(Collection ids) { + public List getSimpleDepts(Collection ids) { return deptMapper.selectBatchIds(ids); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostService.java index 30b8fcc9ad..fc74c944a7 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostService.java @@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostCreateRe import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO; import org.springframework.lang.Nullable; import java.util.Collection; @@ -49,7 +49,7 @@ public interface PostService { * @param ids å²—ä½ç¼–å·æ•°ç»„。如果为空,ä¸è¿›è¡Œç­›é€‰ * @return 部门列表 */ - default List getPosts(@Nullable Collection ids) { + default List getPosts(@Nullable Collection ids) { return getPosts(ids, asSet(CommonStatusEnum.ENABLE.getStatus(), CommonStatusEnum.DISABLE.getStatus())); } @@ -60,7 +60,7 @@ public interface PostService { * @param statuses çŠ¶æ€æ•°ç»„。如果为空,ä¸è¿›è¡Œç­›é€‰ * @return 部门列表 */ - List getPosts(@Nullable Collection ids, @Nullable Collection statuses); + List getPosts(@Nullable Collection ids, @Nullable Collection statuses); /** * 获得岗ä½åˆ†é¡µåˆ—表 @@ -68,7 +68,7 @@ public interface PostService { * @param reqVO 分页æ¡ä»¶ * @return 部门分页列表 */ - PageResult getPostPage(PostPageReqVO reqVO); + PageResult getPostPage(PostPageReqVO reqVO); /** * 获得岗ä½åˆ—表 @@ -76,7 +76,7 @@ public interface PostService { * @param reqVO 查询æ¡ä»¶ * @return 部门列表 */ - List getPosts(PostExportReqVO reqVO); + List getPosts(PostExportReqVO reqVO); /** * 获得岗ä½ä¿¡æ¯ @@ -84,7 +84,7 @@ public interface PostService { * @param id å²—ä½ç¼–å· * @return å²—ä½ä¿¡æ¯ */ - SysPostDO getPost(Long id); + PostDO getPost(Long id); /** * 校验岗ä½ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostServiceImpl.java index f6bb471f61..81e003152e 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostServiceImpl.java @@ -9,8 +9,8 @@ import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostExportRe import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostUpdateReqVO; import cn.iocoder.yudao.module.system.convert.dept.PostConvert; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; -import cn.iocoder.yudao.module.system.dal.mysql.dept.SysPostMapper; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO; +import cn.iocoder.yudao.module.system.dal.mysql.dept.PostMapper; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -33,14 +33,14 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; public class PostServiceImpl implements PostService { @Resource - private SysPostMapper postMapper; + private PostMapper postMapper; @Override public Long createPost(PostCreateReqVO reqVO) { // 校验正确性 this.checkCreateOrUpdate(null, reqVO.getName(), reqVO.getCode()); // æ’å…¥å²—ä½ - SysPostDO post = PostConvert.INSTANCE.convert(reqVO); + PostDO post = PostConvert.INSTANCE.convert(reqVO); postMapper.insert(post); return post.getId(); } @@ -50,7 +50,7 @@ public class PostServiceImpl implements PostService { // 校验正确性 this.checkCreateOrUpdate(reqVO.getId(), reqVO.getName(), reqVO.getCode()); // æ›´æ–°å²—ä½ - SysPostDO updateObj = PostConvert.INSTANCE.convert(reqVO); + PostDO updateObj = PostConvert.INSTANCE.convert(reqVO); postMapper.updateById(updateObj); } @@ -63,22 +63,22 @@ public class PostServiceImpl implements PostService { } @Override - public List getPosts(Collection ids, Collection statuses) { + public List getPosts(Collection ids, Collection statuses) { return postMapper.selectList(ids, statuses); } @Override - public PageResult getPostPage(PostPageReqVO reqVO) { + public PageResult getPostPage(PostPageReqVO reqVO) { return postMapper.selectPage(reqVO); } @Override - public List getPosts(PostExportReqVO reqVO) { + public List getPosts(PostExportReqVO reqVO) { return postMapper.selectList(reqVO); } @Override - public SysPostDO getPost(Long id) { + public PostDO getPost(Long id) { return postMapper.selectById(id); } @@ -92,7 +92,7 @@ public class PostServiceImpl implements PostService { } private void checkPostNameUnique(Long id, String name) { - SysPostDO post = postMapper.selectByName(name); + PostDO post = postMapper.selectByName(name); if (post == null) { return; } @@ -106,7 +106,7 @@ public class PostServiceImpl implements PostService { } private void checkPostCodeUnique(Long id, String code) { - SysPostDO post = postMapper.selectByCode(code); + PostDO post = postMapper.selectByCode(code); if (post == null) { return; } @@ -123,7 +123,7 @@ public class PostServiceImpl implements PostService { if (id == null) { return; } - SysPostDO post = postMapper.selectById(id); + PostDO post = postMapper.selectById(id); if (post == null) { throw ServiceExceptionUtil.exception(POST_NOT_FOUND); } @@ -135,11 +135,11 @@ public class PostServiceImpl implements PostService { return; } // 获得岗ä½ä¿¡æ¯ - List posts = postMapper.selectBatchIds(ids); - Map postMap = convertMap(posts, SysPostDO::getId); + List posts = postMapper.selectBatchIds(ids); + Map postMap = convertMap(posts, PostDO::getId); // 校验 ids.forEach(id -> { - SysPostDO post = postMap.get(id); + PostDO post = postMap.get(id); if (post == null) { throw exception(POST_NOT_FOUND); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataService.java index 8d20c5aab1..0742f82931 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataService.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.service.dict; import cn.iocoder.yudao.framework.dict.core.service.DictDataFrameworkService; -import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictDataDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataCreateReqVO; import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataExportReqVO; @@ -50,7 +50,7 @@ public interface DictDataService extends DictDataFrameworkService { * * @return 字典数æ®å…¨åˆ—表 */ - List getDictDatas(); + List getDictDatas(); /** * 获得字典数æ®åˆ†é¡µåˆ—表 @@ -58,7 +58,7 @@ public interface DictDataService extends DictDataFrameworkService { * @param reqVO 分页请求 * @return 字典数æ®åˆ†é¡µåˆ—表 */ - PageResult getDictDataPage(DictDataPageReqVO reqVO); + PageResult getDictDataPage(DictDataPageReqVO reqVO); /** * 获得字典数æ®åˆ—表 @@ -66,7 +66,7 @@ public interface DictDataService extends DictDataFrameworkService { * @param reqVO 列表请求 * @return 字典数æ®åˆ—表 */ - List getDictDatas(DictDataExportReqVO reqVO); + List getDictDatas(DictDataExportReqVO reqVO); /** * 获得字典数æ®è¯¦æƒ… @@ -74,7 +74,7 @@ public interface DictDataService extends DictDataFrameworkService { * @param id 字典数æ®ç¼–å· * @return å­—å…¸æ•°æ® */ - SysDictDataDO getDictData(Long id); + DictDataDO getDictData(Long id); /** * èŽ·å¾—æŒ‡å®šå­—å…¸ç±»åž‹çš„æ•°æ®æ•°é‡ diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceImpl.java index b483f41675..1ecbdd41cd 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceImpl.java @@ -10,10 +10,9 @@ import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataExpo import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataUpdateReqVO; import cn.iocoder.yudao.module.system.convert.dict.DictDataConvert; -import cn.iocoder.yudao.module.system.convert.dict.SysDictDataCoreConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO; import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictTypeDO; -import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictDataDO; -import cn.iocoder.yudao.module.system.dal.mysql.dict.SysDictDataMapper; +import cn.iocoder.yudao.module.system.dal.mysql.dict.DictDataMapper; import cn.iocoder.yudao.module.system.mq.producer.dict.DictDataProducer; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableMap; @@ -44,9 +43,9 @@ public class DictDataServiceImpl implements DictDataService { /** * æŽ’åº dictType > sort */ - private static final Comparator COMPARATOR_TYPE_AND_SORT = Comparator - .comparing(SysDictDataDO::getDictType) - .thenComparingInt(SysDictDataDO::getSort); + private static final Comparator COMPARATOR_TYPE_AND_SORT = Comparator + .comparing(DictDataDO::getDictType) + .thenComparingInt(DictDataDO::getSort); /** * 定时执行 {@link #schedulePeriodicRefresh()} 的周期 @@ -58,7 +57,7 @@ public class DictDataServiceImpl implements DictDataService { private DictTypeService dictTypeService; @Resource - private SysDictDataMapper dictDataMapper; + private DictDataMapper dictDataMapper; @Resource private DictDataProducer dictDataProducer; @@ -69,14 +68,14 @@ public class DictDataServiceImpl implements DictDataService { * key1:字典类型 dictType * key2:字典标签 label */ - private ImmutableTable labelDictDataCache; + private ImmutableTable labelDictDataCache; /** * 字典数æ®ç¼“存,第二个 key 使用 value * * key1:字典类型 dictType * key2:字典值 value */ - private ImmutableTable valueDictDataCache; + private ImmutableTable valueDictDataCache; /** * 缓存字典数æ®çš„æœ€å¤§æ›´æ–°æ—¶é—´ï¼Œç”¨äºŽåŽç»­çš„增é‡è½®è¯¢ï¼Œåˆ¤æ–­æ˜¯å¦æœ‰æ›´æ–° */ @@ -86,14 +85,14 @@ public class DictDataServiceImpl implements DictDataService { @PostConstruct public synchronized void initLocalCache() { // 获å–字典数æ®åˆ—表,如果有更新 - List dataList = loadDictDataIfUpdate(maxUpdateTime); + List dataList = loadDictDataIfUpdate(maxUpdateTime); if (CollUtil.isEmpty(dataList)) { return; } // 构建缓存 - ImmutableTable.Builder labelDictDataBuilder = ImmutableTable.builder(); - ImmutableTable.Builder valueDictDataBuilder = ImmutableTable.builder(); + ImmutableTable.Builder labelDictDataBuilder = ImmutableTable.builder(); + ImmutableTable.Builder valueDictDataBuilder = ImmutableTable.builder(); dataList.forEach(dictData -> { labelDictDataBuilder.put(dictData.getDictType(), dictData.getLabel(), dictData); valueDictDataBuilder.put(dictData.getDictType(), dictData.getValue(), dictData); @@ -112,7 +111,7 @@ public class DictDataServiceImpl implements DictDataService { * @param maxUpdateTime 当å‰å­—典数æ®çš„æœ€å¤§æ›´æ–°æ—¶é—´ * @return 字典数æ®åˆ—表 */ - private List loadDictDataIfUpdate(Date maxUpdateTime) { + private List loadDictDataIfUpdate(Date maxUpdateTime) { // 第一步,判断是å¦è¦æ›´æ–°ã€‚ if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB ä¸€å®šæœ‰æ–°æ•°æ® log.info("[loadDictDataIfUpdate][首次加载全é‡å­—典数æ®]"); @@ -132,42 +131,42 @@ public class DictDataServiceImpl implements DictDataService { } @Override - public List getDictDatas() { - List list = dictDataMapper.selectList(); + public List getDictDatas() { + List list = dictDataMapper.selectList(); list.sort(COMPARATOR_TYPE_AND_SORT); return list; } @Override - public PageResult getDictDataPage(DictDataPageReqVO reqVO) { + public PageResult getDictDataPage(DictDataPageReqVO reqVO) { return dictDataMapper.selectPage(reqVO); } @Override - public List getDictDatas(DictDataExportReqVO reqVO) { - List list = dictDataMapper.selectList(reqVO); + public List getDictDatas(DictDataExportReqVO reqVO) { + List list = dictDataMapper.selectList(reqVO); list.sort(COMPARATOR_TYPE_AND_SORT); return list; } @Override - public SysDictDataDO getDictData(Long id) { + public DictDataDO getDictData(Long id) { return dictDataMapper.selectById(id); } @Override public DictDataRespDTO getDictDataFromCache(String type, String value) { - return SysDictDataCoreConvert.INSTANCE.convert02(valueDictDataCache.get(type, value)); + return DictDataConvert.INSTANCE.convert02(valueDictDataCache.get(type, value)); } @Override public DictDataRespDTO parseDictDataFromCache(String type, String label) { - return SysDictDataCoreConvert.INSTANCE.convert02(labelDictDataCache.get(type, label)); + return DictDataConvert.INSTANCE.convert02(labelDictDataCache.get(type, label)); } @Override public List listDictDatasFromCache(String type) { - return SysDictDataCoreConvert.INSTANCE.convertList03(labelDictDataCache.row(type).values()); + return DictDataConvert.INSTANCE.convertList03(labelDictDataCache.row(type).values()); } @Override @@ -176,7 +175,7 @@ public class DictDataServiceImpl implements DictDataService { checkCreateOrUpdate(null, reqVO.getValue(), reqVO.getDictType()); // æ’入字典类型 - SysDictDataDO dictData = DictDataConvert.INSTANCE.convert(reqVO); + DictDataDO dictData = DictDataConvert.INSTANCE.convert(reqVO); dictDataMapper.insert(dictData); // å‘é€åˆ·æ–°æ¶ˆæ¯ @@ -190,7 +189,7 @@ public class DictDataServiceImpl implements DictDataService { checkCreateOrUpdate(reqVO.getId(), reqVO.getValue(), reqVO.getDictType()); // 更新字典类型 - SysDictDataDO updateObj = DictDataConvert.INSTANCE.convert(reqVO); + DictDataDO updateObj = DictDataConvert.INSTANCE.convert(reqVO); dictDataMapper.updateById(updateObj); // å‘é€åˆ·æ–°æ¶ˆæ¯ @@ -226,7 +225,7 @@ public class DictDataServiceImpl implements DictDataService { @VisibleForTesting public void checkDictDataValueUnique(Long id, String dictType, String value) { - SysDictDataDO dictData = dictDataMapper.selectByDictTypeAndValue(dictType, value); + DictDataDO dictData = dictDataMapper.selectByDictTypeAndValue(dictType, value); if (dictData == null) { return; } @@ -244,7 +243,7 @@ public class DictDataServiceImpl implements DictDataService { if (id == null) { return; } - SysDictDataDO dictData = dictDataMapper.selectById(id); + DictDataDO dictData = dictDataMapper.selectById(id); if (dictData == null) { throw exception(DICT_DATA_NOT_EXISTS); } @@ -266,10 +265,10 @@ public class DictDataServiceImpl implements DictDataService { if (CollUtil.isEmpty(values)) { return; } - ImmutableMap dictDataMap = valueDictDataCache.row(dictType); + ImmutableMap dictDataMap = valueDictDataCache.row(dictType); // 校验 values.forEach(value -> { - SysDictDataDO dictData = dictDataMap.get(value); + DictDataDO dictData = dictDataMap.get(value); if (dictData == null) { throw exception(DICT_DATA_NOT_EXISTS); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictTypeServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictTypeServiceImpl.java index b9bcaf61e8..c0677aff16 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictTypeServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictTypeServiceImpl.java @@ -7,7 +7,7 @@ import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypePage import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypeUpdateReqVO; import cn.iocoder.yudao.module.system.convert.dict.DictTypeConvert; import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictTypeDO; -import cn.iocoder.yudao.module.system.dal.mysql.dict.SysDictTypeMapper; +import cn.iocoder.yudao.module.system.dal.mysql.dict.DictTypeMapper; import com.google.common.annotations.VisibleForTesting; import org.springframework.stereotype.Service; @@ -29,7 +29,7 @@ public class DictTypeServiceImpl implements DictTypeService { private DictDataService dictDataService; @Resource - private SysDictTypeMapper dictTypeMapper; + private DictTypeMapper dictTypeMapper; @Override public PageResult getDictTypePage(DictTypePageReqVO reqVO) { diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/errorcode/ErrorCodeServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/errorcode/ErrorCodeServiceImpl.java index d347d79810..a34f098cd5 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/errorcode/ErrorCodeServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/errorcode/ErrorCodeServiceImpl.java @@ -10,7 +10,7 @@ import cn.iocoder.yudao.module.system.framework.errorcode.core.dto.ErrorCodeResp import cn.iocoder.yudao.module.system.convert.errorcode.ErrorCodeConvert; import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.ErrorCodeExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.ErrorCodePageReqVO; -import cn.iocoder.yudao.module.system.dal.mysql.errorcode.SysErrorCodeMapper; +import cn.iocoder.yudao.module.system.dal.mysql.errorcode.ErrorCodeMapper; import cn.iocoder.yudao.module.system.enums.errorcode.ErrorCodeTypeEnum; import com.google.common.annotations.VisibleForTesting; import lombok.extern.slf4j.Slf4j; @@ -39,7 +39,7 @@ import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils. public class ErrorCodeServiceImpl implements ErrorCodeService { @Resource - private SysErrorCodeMapper errorCodeMapper; + private ErrorCodeMapper errorCodeMapper; @Override public Long createErrorCode(ErrorCodeCreateReqVO createReqVO) { diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogService.java index 152236adfb..38b4fe78ef 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogService.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.service.logger; import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysLoginLogDO; +import cn.iocoder.yudao.module.system.dal.dataobject.logger.LoginLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO; @@ -20,7 +20,7 @@ public interface LoginLogService { * @param reqVO 分页æ¡ä»¶ * @return 登录日志分页 */ - PageResult getLoginLogPage(LoginLogPageReqVO reqVO); + PageResult getLoginLogPage(LoginLogPageReqVO reqVO); /** * 获得登录日志列表 @@ -28,7 +28,7 @@ public interface LoginLogService { * @param reqVO 列表æ¡ä»¶ * @return 登录日志列表 */ - List getLoginLogList(LoginLogExportReqVO reqVO); + List getLoginLogList(LoginLogExportReqVO reqVO); /** * 创建登录日志 diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImpl.java index 0233b7c103..78ad540ba4 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImpl.java @@ -1,12 +1,12 @@ package cn.iocoder.yudao.module.system.service.logger; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO; import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO; -import cn.iocoder.yudao.module.system.convert.logger.SysLoginLogCoreConvert; -import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysLoginLogDO; +import cn.iocoder.yudao.module.system.convert.logger.LoginLogConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.logger.LoginLogDO; import cn.iocoder.yudao.module.system.dal.mysql.logger.LoginLogMapper; -import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -22,18 +22,18 @@ public class LoginLogServiceImpl implements LoginLogService { private LoginLogMapper loginLogMapper; @Override - public PageResult getLoginLogPage(LoginLogPageReqVO reqVO) { + public PageResult getLoginLogPage(LoginLogPageReqVO reqVO) { return loginLogMapper.selectPage(reqVO); } @Override - public List getLoginLogList(LoginLogExportReqVO reqVO) { + public List getLoginLogList(LoginLogExportReqVO reqVO) { return loginLogMapper.selectList(reqVO); } @Override public void createLoginLog(LoginLogCreateReqDTO reqDTO) { - SysLoginLogDO loginLog = SysLoginLogCoreConvert.INSTANCE.convert(reqDTO); + LoginLogDO loginLog = LoginLogConvert.INSTANCE.convert(reqDTO); loginLogMapper.insert(loginLog); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/notice/NoticeServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/notice/NoticeServiceImpl.java index 2ca561ac43..2b796e28c8 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/notice/NoticeServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/notice/NoticeServiceImpl.java @@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeCreateReq import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeUpdateReqVO; import cn.iocoder.yudao.module.system.convert.notice.NoticeConvert; -import cn.iocoder.yudao.module.system.dal.mysql.notice.SysNoticeMapper; +import cn.iocoder.yudao.module.system.dal.mysql.notice.NoticeMapper; import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO; import com.google.common.annotations.VisibleForTesting; import org.springframework.stereotype.Service; @@ -24,7 +24,7 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.NOTICE_NOT public class NoticeServiceImpl implements NoticeService { @Resource - private SysNoticeMapper noticeMapper; + private NoticeMapper noticeMapper; @Override public Long createNotice(NoticeCreateReqVO reqVO) { diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceImpl.java index fe2b573c07..40d8c13c58 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceImpl.java @@ -56,7 +56,7 @@ public class MenuServiceImpl implements MenuService { /** * æƒé™ä¸Žèœå•缓存 * key:æƒé™ {@link MenuDO#getPermission()} - * value:SysMenuDO 数组,因为一个æƒé™å¯èƒ½å¯¹åº”多个 SysMenuDO 对象 + * value:MenuDO 数组,因为一个æƒé™å¯èƒ½å¯¹åº”多个 MenuDO 对象 * * 这里声明 volatile ä¿®é¥°çš„åŽŸå› æ˜¯ï¼Œæ¯æ¬¡åˆ·æ–°æ—¶ï¼Œç›´æŽ¥ä¿®æ”¹æŒ‡å‘ */ diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceImpl.java index 05f15ec9ef..cb86bc7ada 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceImpl.java @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.system.service.permission; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ArrayUtil; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleMenuDO; @@ -383,8 +383,8 @@ public class PermissionServiceImpl implements PermissionService { } // 情况四,DEPT_DEPT_AND_CHILD if (Objects.equals(role.getDataScope(), DataScopeEnum.DEPT_AND_CHILD.getScope())) { - List depts = deptService.getDeptsByParentIdFromCache(loginUser.getDeptId(), true); - CollUtil.addAll(result.getDeptIds(), CollectionUtils.convertList(depts, SysDeptDO::getId)); + List depts = deptService.getDeptsByParentIdFromCache(loginUser.getDeptId(), true); + CollUtil.addAll(result.getDeptIds(), CollectionUtils.convertList(depts, DeptDO::getId)); continue; } // 情况五,SELF diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelService.java index f5950a23db..50e13a6025 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelService.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.service.sms; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsChannelDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsChannelDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelCreateReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelPageReqVO; @@ -51,7 +51,7 @@ public interface SmsChannelService { * @param id ç¼–å· * @return çŸ­ä¿¡æ¸ é“ */ - SysSmsChannelDO getSmsChannel(Long id); + SmsChannelDO getSmsChannel(Long id); /** * 获得短信渠é“列表 @@ -59,14 +59,14 @@ public interface SmsChannelService { * @param ids ç¼–å· * @return 短信渠é“列表 */ - List getSmsChannelList(Collection ids); + List getSmsChannelList(Collection ids); /** * 获得所有短信渠é“列表 * * @return 短信渠é“列表 */ - List getSmsChannelList(); + List getSmsChannelList(); /** * 获得短信渠é“分页 @@ -74,6 +74,6 @@ public interface SmsChannelService { * @param pageReqVO 分页查询 * @return 短信渠é“分页 */ - PageResult getSmsChannelPage(SmsChannelPageReqVO pageReqVO); + PageResult getSmsChannelPage(SmsChannelPageReqVO pageReqVO); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceImpl.java index 0a58798802..f1fd44a901 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceImpl.java @@ -5,9 +5,9 @@ import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannel import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelUpdateReqVO; import cn.iocoder.yudao.module.system.convert.sms.SmsChannelConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsChannelDO; import cn.iocoder.yudao.module.system.dal.mysql.sms.SmsChannelMapper; import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsChannelDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.sms.core.client.SmsClientFactory; @@ -64,7 +64,7 @@ public class SmsChannelServiceImpl implements SmsChannelService { @PostConstruct public void initSmsClients() { // 获å–短信渠é“,如果有更新 - List smsChannels = this.loadSmsChannelIfUpdate(maxUpdateTime); + List smsChannels = this.loadSmsChannelIfUpdate(maxUpdateTime); if (CollUtil.isEmpty(smsChannels)) { return; } @@ -91,7 +91,7 @@ public class SmsChannelServiceImpl implements SmsChannelService { * @param maxUpdateTime 当å‰çŸ­ä¿¡æ¸ é“的最大更新时间 * @return 短信渠é“列表 */ - private List loadSmsChannelIfUpdate(Date maxUpdateTime) { + private List loadSmsChannelIfUpdate(Date maxUpdateTime) { // 第一步,判断是å¦è¦æ›´æ–°ã€‚ if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB ä¸€å®šæœ‰æ–°æ•°æ® log.info("[loadSmsChannelIfUpdate][首次加载全é‡çŸ­ä¿¡æ¸ é“]"); @@ -108,7 +108,7 @@ public class SmsChannelServiceImpl implements SmsChannelService { @Override public Long createSmsChannel(SmsChannelCreateReqVO createReqVO) { // æ’å…¥ - SysSmsChannelDO smsChannel = SmsChannelConvert.INSTANCE.convert(createReqVO); + SmsChannelDO smsChannel = SmsChannelConvert.INSTANCE.convert(createReqVO); smsChannelMapper.insert(smsChannel); // å‘é€åˆ·æ–°æ¶ˆæ¯ smsProducer.sendSmsChannelRefreshMessage(); @@ -121,7 +121,7 @@ public class SmsChannelServiceImpl implements SmsChannelService { // 校验存在 this.validateSmsChannelExists(updateReqVO.getId()); // æ›´æ–° - SysSmsChannelDO updateObj = SmsChannelConvert.INSTANCE.convert(updateReqVO); + SmsChannelDO updateObj = SmsChannelConvert.INSTANCE.convert(updateReqVO); smsChannelMapper.updateById(updateObj); // å‘é€åˆ·æ–°æ¶ˆæ¯ smsProducer.sendSmsChannelRefreshMessage(); @@ -148,22 +148,22 @@ public class SmsChannelServiceImpl implements SmsChannelService { } @Override - public SysSmsChannelDO getSmsChannel(Long id) { + public SmsChannelDO getSmsChannel(Long id) { return smsChannelMapper.selectById(id); } @Override - public List getSmsChannelList(Collection ids) { + public List getSmsChannelList(Collection ids) { return smsChannelMapper.selectBatchIds(ids); } @Override - public List getSmsChannelList() { + public List getSmsChannelList() { return smsChannelMapper.selectList(); } @Override - public PageResult getSmsChannelPage(SmsChannelPageReqVO pageReqVO) { + public PageResult getSmsChannelPage(SmsChannelPageReqVO pageReqVO) { return smsChannelMapper.selectPage(pageReqVO); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogService.java index 42c3457b64..2932949ee8 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogService.java @@ -2,9 +2,9 @@ package cn.iocoder.yudao.module.system.service.sms; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogPageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsLogDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO; import java.util.Date; import java.util.List; @@ -31,7 +31,7 @@ public interface SmsLogService { * @return å‘逿—¥å¿—ç¼–å· */ Long createSmsLog(String mobile, Long userId, Integer userType, Boolean isSend, - SysSmsTemplateDO template, String templateContent, Map templateParams); + SmsTemplateDO template, String templateContent, Map templateParams); /** * 更新日志的å‘é€ç»“æžœ @@ -64,7 +64,7 @@ public interface SmsLogService { * @param pageReqVO 分页查询 * @return 短信日志分页 */ - PageResult getSmsLogPage(SmsLogPageReqVO pageReqVO); + PageResult getSmsLogPage(SmsLogPageReqVO pageReqVO); /** * 获得短信日志列表, 用于 Excel 导出 @@ -72,6 +72,6 @@ public interface SmsLogService { * @param exportReqVO 查询æ¡ä»¶ * @return 短信日志列表 */ - List getSmsLogList(SmsLogExportReqVO exportReqVO); + List getSmsLogList(SmsLogExportReqVO exportReqVO); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceImpl.java index 75fa8848c1..a5abf4003a 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceImpl.java @@ -3,12 +3,12 @@ package cn.iocoder.yudao.module.system.service.sms; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogPageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsLogDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO; import cn.iocoder.yudao.module.system.dal.mysql.sms.SmsLogMapper; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.system.enums.sms.SysSmsReceiveStatusEnum; -import cn.iocoder.yudao.module.system.enums.sms.SysSmsSendStatusEnum; +import cn.iocoder.yudao.module.system.enums.sms.SmsReceiveStatusEnum; +import cn.iocoder.yudao.module.system.enums.sms.SmsSendStatusEnum; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -32,11 +32,11 @@ public class SmsLogServiceImpl implements SmsLogService { @Override public Long createSmsLog(String mobile, Long userId, Integer userType, Boolean isSend, - SysSmsTemplateDO template, String templateContent, Map templateParams) { - SysSmsLogDO.SysSmsLogDOBuilder logBuilder = SysSmsLogDO.builder(); + SmsTemplateDO template, String templateContent, Map templateParams) { + SmsLogDO.SmsLogDOBuilder logBuilder = SmsLogDO.builder(); // æ ¹æ®æ˜¯å¦è¦å‘é€ï¼Œè®¾ç½®çŠ¶æ€ - logBuilder.sendStatus(Objects.equals(isSend, true) ? SysSmsSendStatusEnum.INIT.getStatus() - : SysSmsSendStatusEnum.IGNORE.getStatus()); + logBuilder.sendStatus(Objects.equals(isSend, true) ? SmsSendStatusEnum.INIT.getStatus() + : SmsSendStatusEnum.IGNORE.getStatus()); // 设置手机相关字段 logBuilder.mobile(mobile).userId(userId).userType(userType); // 设置模æ¿ç›¸å…³å­—段 @@ -46,10 +46,10 @@ public class SmsLogServiceImpl implements SmsLogService { // 设置渠é“相关字段 logBuilder.channelId(template.getChannelId()).channelCode(template.getChannelCode()); // 设置接收相关字段 - logBuilder.receiveStatus(SysSmsReceiveStatusEnum.INIT.getStatus()); + logBuilder.receiveStatus(SmsReceiveStatusEnum.INIT.getStatus()); // æ’入数æ®åº“ - SysSmsLogDO logDO = logBuilder.build(); + SmsLogDO logDO = logBuilder.build(); smsLogMapper.insert(logDO); return logDO.getId(); } @@ -58,9 +58,9 @@ public class SmsLogServiceImpl implements SmsLogService { public void updateSmsSendResult(Long id, Integer sendCode, String sendMsg, String apiSendCode, String apiSendMsg, String apiRequestId, String apiSerialNo) { - SysSmsSendStatusEnum sendStatus = CommonResult.isSuccess(sendCode) ? - SysSmsSendStatusEnum.SUCCESS : SysSmsSendStatusEnum.FAILURE; - smsLogMapper.updateById(SysSmsLogDO.builder().id(id).sendStatus(sendStatus.getStatus()) + SmsSendStatusEnum sendStatus = CommonResult.isSuccess(sendCode) ? + SmsSendStatusEnum.SUCCESS : SmsSendStatusEnum.FAILURE; + smsLogMapper.updateById(SmsLogDO.builder().id(id).sendStatus(sendStatus.getStatus()) .sendTime(new Date()).sendCode(sendCode).sendMsg(sendMsg) .apiSendCode(apiSendCode).apiSendMsg(apiSendMsg) .apiRequestId(apiRequestId).apiSerialNo(apiSerialNo).build()); @@ -69,19 +69,19 @@ public class SmsLogServiceImpl implements SmsLogService { @Override public void updateSmsReceiveResult(Long id, Boolean success, Date receiveTime, String apiReceiveCode, String apiReceiveMsg) { - SysSmsReceiveStatusEnum receiveStatus = Objects.equals(success, true) ? - SysSmsReceiveStatusEnum.SUCCESS : SysSmsReceiveStatusEnum.FAILURE; - smsLogMapper.updateById(SysSmsLogDO.builder().id(id).receiveStatus(receiveStatus.getStatus()) + SmsReceiveStatusEnum receiveStatus = Objects.equals(success, true) ? + SmsReceiveStatusEnum.SUCCESS : SmsReceiveStatusEnum.FAILURE; + smsLogMapper.updateById(SmsLogDO.builder().id(id).receiveStatus(receiveStatus.getStatus()) .receiveTime(receiveTime).apiReceiveCode(apiReceiveCode).apiReceiveMsg(apiReceiveMsg).build()); } @Override - public PageResult getSmsLogPage(SmsLogPageReqVO pageReqVO) { + public PageResult getSmsLogPage(SmsLogPageReqVO pageReqVO) { return smsLogMapper.selectPage(pageReqVO); } @Override - public List getSmsLogList(SmsLogExportReqVO exportReqVO) { + public List getSmsLogList(SmsLogExportReqVO exportReqVO) { return smsLogMapper.selectList(exportReqVO); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceImpl.java index 8819a27107..538e0f925f 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceImpl.java @@ -12,7 +12,7 @@ import cn.iocoder.yudao.framework.sms.core.client.dto.SmsReceiveRespDTO; import cn.iocoder.yudao.framework.sms.core.client.dto.SmsSendRespDTO; import cn.iocoder.yudao.module.member.api.user.MemberUserApi; import cn.iocoder.yudao.module.member.api.user.dto.UserRespDTO; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage; import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer; @@ -83,7 +83,7 @@ public class SmsSendServiceImpl implements SmsSendService { public Long sendSingleSms(String mobile, Long userId, Integer userType, String templateCode, Map templateParams) { // æ ¡éªŒçŸ­ä¿¡æ¨¡æ¿æ˜¯å¦åˆæ³• - SysSmsTemplateDO template = this.checkSmsTemplateValid(templateCode); + SmsTemplateDO template = this.checkSmsTemplateValid(templateCode); // 校验手机å·ç æ˜¯å¦å­˜åœ¨ mobile = this.checkMobile(mobile); // 构建有åºçš„æ¨¡æ¿å‚数。为什么放在这个ä½ç½®ï¼Œæ˜¯æå‰ä¿è¯æ¨¡æ¿å‚æ•°çš„æ­£ç¡®æ€§ï¼Œè€Œä¸æ˜¯åˆ°äº†æ’å…¥å‘逿—¥å¿— @@ -104,9 +104,9 @@ public class SmsSendServiceImpl implements SmsSendService { @VisibleForTesting - public SysSmsTemplateDO checkSmsTemplateValid(String templateCode) { + public SmsTemplateDO checkSmsTemplateValid(String templateCode) { // 获得短信模æ¿ã€‚è€ƒè™‘åˆ°æ•ˆçŽ‡ï¼Œä»Žç¼“å­˜ä¸­èŽ·å– - SysSmsTemplateDO template = smsTemplateService.getSmsTemplateByCodeFromCache(templateCode); + SmsTemplateDO template = smsTemplateService.getSmsTemplateByCodeFromCache(templateCode); // 短信模æ¿ä¸å­˜åœ¨ if (template == null) { throw exception(SMS_SEND_TEMPLATE_NOT_EXISTS); @@ -124,7 +124,7 @@ public class SmsSendServiceImpl implements SmsSendService { * @return 处ç†åŽçš„傿•° */ @VisibleForTesting - public List> buildTemplateParams(SysSmsTemplateDO template, Map templateParams) { + public List> buildTemplateParams(SmsTemplateDO template, Map templateParams) { return template.getParams().stream().map(key -> { Object value = templateParams.get(key); if (value == null) { diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateService.java index bf00dabffe..eaa6550665 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateService.java @@ -4,7 +4,7 @@ import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTempla import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplatePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import javax.validation.Valid; @@ -31,7 +31,7 @@ public interface SmsTemplateService { * @param code 模æ¿ç¼–ç  * @return çŸ­ä¿¡æ¨¡æ¿ */ - SysSmsTemplateDO getSmsTemplateByCodeFromCache(String code); + SmsTemplateDO getSmsTemplateByCodeFromCache(String code); /** * æ ¼å¼åŒ–短信内容 @@ -48,7 +48,7 @@ public interface SmsTemplateService { * @param code 模æ¿ç¼–ç  * @return çŸ­ä¿¡æ¨¡æ¿ */ - SysSmsTemplateDO getSmsTemplateByCode(String code); + SmsTemplateDO getSmsTemplateByCode(String code); /** * åˆ›å»ºçŸ­ä¿¡æ¨¡æ¿ @@ -78,7 +78,7 @@ public interface SmsTemplateService { * @param id ç¼–å· * @return çŸ­ä¿¡æ¨¡æ¿ */ - SysSmsTemplateDO getSmsTemplate(Long id); + SmsTemplateDO getSmsTemplate(Long id); /** * 获得短信模æ¿åˆ—表 @@ -86,7 +86,7 @@ public interface SmsTemplateService { * @param ids ç¼–å· * @return 短信模æ¿åˆ—表 */ - List getSmsTemplateList(Collection ids); + List getSmsTemplateList(Collection ids); /** * 获得短信模æ¿åˆ†é¡µ @@ -94,7 +94,7 @@ public interface SmsTemplateService { * @param pageReqVO 分页查询 * @return 短信模æ¿åˆ†é¡µ */ - PageResult getSmsTemplatePage(SmsTemplatePageReqVO pageReqVO); + PageResult getSmsTemplatePage(SmsTemplatePageReqVO pageReqVO); /** * 获得短信模æ¿åˆ—表, 用于 Excel 导出 @@ -102,7 +102,7 @@ public interface SmsTemplateService { * @param exportReqVO 查询æ¡ä»¶ * @return 短信模æ¿åˆ†é¡µ */ - List getSmsTemplateList(SmsTemplateExportReqVO exportReqVO); + List getSmsTemplateList(SmsTemplateExportReqVO exportReqVO); /** * 获得指定短信渠é“ä¸‹çš„çŸ­ä¿¡æ¨¡æ¿æ•°é‡ diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceImpl.java index 5199dd2220..ce8e71435d 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceImpl.java @@ -9,10 +9,10 @@ import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTempla import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplatePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateUpdateReqVO; import cn.iocoder.yudao.module.system.convert.sms.SmsTemplateConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO; import cn.iocoder.yudao.module.system.dal.mysql.sms.SmsTemplateMapper; import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsChannelDO; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsChannelDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.sms.core.client.SmsClient; @@ -69,11 +69,11 @@ public class SmsTemplateServiceImpl implements SmsTemplateService { /** * 短信模æ¿ç¼“å­˜ - * key:短信模æ¿ç¼–ç  {@link SysSmsTemplateDO#getCode()} + * key:短信模æ¿ç¼–ç  {@link SmsTemplateDO#getCode()} * * 这里声明 volatile ä¿®é¥°çš„åŽŸå› æ˜¯ï¼Œæ¯æ¬¡åˆ·æ–°æ—¶ï¼Œç›´æŽ¥ä¿®æ”¹æŒ‡å‘ */ - private volatile Map smsTemplateCache; + private volatile Map smsTemplateCache; /** * 缓存短信模æ¿çš„æœ€å¤§æ›´æ–°æ—¶é—´ï¼Œç”¨äºŽåŽç»­çš„增é‡è½®è¯¢ï¼Œåˆ¤æ–­æ˜¯å¦æœ‰æ›´æ–° */ @@ -83,13 +83,13 @@ public class SmsTemplateServiceImpl implements SmsTemplateService { @PostConstruct public void initLocalCache() { // 获å–短信模æ¿åˆ—表,如果有更新 - List smsTemplateList = this.loadSmsTemplateIfUpdate(maxUpdateTime); + List smsTemplateList = this.loadSmsTemplateIfUpdate(maxUpdateTime); if (CollUtil.isEmpty(smsTemplateList)) { return; } // 写入缓存 - ImmutableMap.Builder builder = ImmutableMap.builder(); + ImmutableMap.Builder builder = ImmutableMap.builder(); smsTemplateList.forEach(sysSmsTemplateDO -> builder.put(sysSmsTemplateDO.getCode(), sysSmsTemplateDO)); smsTemplateCache = builder.build(); assert smsTemplateList.size() > 0; // 断言,é¿å…告警 @@ -104,7 +104,7 @@ public class SmsTemplateServiceImpl implements SmsTemplateService { * @param maxUpdateTime 当å‰çŸ­ä¿¡æ¨¡æ¿çš„æœ€å¤§æ›´æ–°æ—¶é—´ * @return 短信模æ¿åˆ—表 */ - private List loadSmsTemplateIfUpdate(Date maxUpdateTime) { + private List loadSmsTemplateIfUpdate(Date maxUpdateTime) { // 第一步,判断是å¦è¦æ›´æ–°ã€‚ if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB ä¸€å®šæœ‰æ–°æ•°æ® log.info("[loadSmsTemplateIfUpdate][首次加载全é‡çŸ­ä¿¡æ¨¡æ¿]"); @@ -124,7 +124,7 @@ public class SmsTemplateServiceImpl implements SmsTemplateService { } @Override - public SysSmsTemplateDO getSmsTemplateByCodeFromCache(String code) { + public SmsTemplateDO getSmsTemplateByCodeFromCache(String code) { return smsTemplateCache.get(code); } @@ -134,7 +134,7 @@ public class SmsTemplateServiceImpl implements SmsTemplateService { } @Override - public SysSmsTemplateDO getSmsTemplateByCode(String code) { + public SmsTemplateDO getSmsTemplateByCode(String code) { return smsTemplateMapper.selectByCode(code); } @@ -146,14 +146,14 @@ public class SmsTemplateServiceImpl implements SmsTemplateService { @Override public Long createSmsTemplate(SmsTemplateCreateReqVO createReqVO) { // æ ¡éªŒçŸ­ä¿¡æ¸ é“ - SysSmsChannelDO channelDO = checkSmsChannel(createReqVO.getChannelId()); + SmsChannelDO channelDO = checkSmsChannel(createReqVO.getChannelId()); // æ ¡éªŒçŸ­ä¿¡ç¼–ç æ˜¯å¦é‡å¤ checkSmsTemplateCodeDuplicate(null, createReqVO.getCode()); // æ ¡éªŒçŸ­ä¿¡æ¨¡æ¿ checkApiTemplate(createReqVO.getChannelId(), createReqVO.getApiTemplateId()); // æ’å…¥ - SysSmsTemplateDO template = SmsTemplateConvert.INSTANCE.convert(createReqVO); + SmsTemplateDO template = SmsTemplateConvert.INSTANCE.convert(createReqVO); template.setParams(parseTemplateContentParams(template.getContent())); template.setChannelCode(channelDO.getCode()); smsTemplateMapper.insert(template); @@ -168,14 +168,14 @@ public class SmsTemplateServiceImpl implements SmsTemplateService { // 校验存在 this.validateSmsTemplateExists(updateReqVO.getId()); // æ ¡éªŒçŸ­ä¿¡æ¸ é“ - SysSmsChannelDO channelDO = checkSmsChannel(updateReqVO.getChannelId()); + SmsChannelDO channelDO = checkSmsChannel(updateReqVO.getChannelId()); // æ ¡éªŒçŸ­ä¿¡ç¼–ç æ˜¯å¦é‡å¤ checkSmsTemplateCodeDuplicate(updateReqVO.getId(), updateReqVO.getCode()); // æ ¡éªŒçŸ­ä¿¡æ¨¡æ¿ checkApiTemplate(updateReqVO.getChannelId(), updateReqVO.getApiTemplateId()); // æ›´æ–° - SysSmsTemplateDO updateObj = SmsTemplateConvert.INSTANCE.convert(updateReqVO); + SmsTemplateDO updateObj = SmsTemplateConvert.INSTANCE.convert(updateReqVO); updateObj.setParams(parseTemplateContentParams(updateObj.getContent())); updateObj.setChannelCode(channelDO.getCode()); smsTemplateMapper.updateById(updateObj); @@ -200,22 +200,22 @@ public class SmsTemplateServiceImpl implements SmsTemplateService { } @Override - public SysSmsTemplateDO getSmsTemplate(Long id) { + public SmsTemplateDO getSmsTemplate(Long id) { return smsTemplateMapper.selectById(id); } @Override - public List getSmsTemplateList(Collection ids) { + public List getSmsTemplateList(Collection ids) { return smsTemplateMapper.selectBatchIds(ids); } @Override - public PageResult getSmsTemplatePage(SmsTemplatePageReqVO pageReqVO) { + public PageResult getSmsTemplatePage(SmsTemplatePageReqVO pageReqVO) { return smsTemplateMapper.selectPage(pageReqVO); } @Override - public List getSmsTemplateList(SmsTemplateExportReqVO exportReqVO) { + public List getSmsTemplateList(SmsTemplateExportReqVO exportReqVO) { return smsTemplateMapper.selectList(exportReqVO); } @@ -225,8 +225,8 @@ public class SmsTemplateServiceImpl implements SmsTemplateService { } @VisibleForTesting - public SysSmsChannelDO checkSmsChannel(Long channelId) { - SysSmsChannelDO channelDO = smsChannelService.getSmsChannel(channelId); + public SmsChannelDO checkSmsChannel(Long channelId) { + SmsChannelDO channelDO = smsChannelService.getSmsChannel(channelId); if (channelDO == null) { throw exception(SMS_CHANNEL_NOT_EXISTS); } @@ -238,7 +238,7 @@ public class SmsTemplateServiceImpl implements SmsTemplateService { @VisibleForTesting public void checkSmsTemplateCodeDuplicate(Long id, String code) { - SysSmsTemplateDO template = smsTemplateMapper.selectByCode(code); + SmsTemplateDO template = smsTemplateMapper.selectByCode(code); if (template == null) { return; } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java index e5ca68040e..b7a7d00d7d 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.service.social; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.exception.ServiceException; -import cn.iocoder.yudao.module.system.dal.dataobject.social.SysSocialUserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO; import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; import me.zhyd.oauth.model.AuthUser; @@ -56,7 +56,7 @@ public interface SocialUserService { * @param userType 全局用户类型 * @return 社交用户列表 */ - List getAllSocialUserList(Integer type, String unionId, Integer userType); + List getAllSocialUserList(Integer type, String unionId, Integer userType); /** * 获得指定用户的社交用户列表 @@ -65,7 +65,7 @@ public interface SocialUserService { * @param userType 用户类型 * @return 社交用户列表 */ - List getSocialUserList(Long userId, Integer userType); + List getSocialUserList(Long userId, Integer userType); /** * 绑定社交用户 diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java index ecb81d96a9..533f7fdf9c 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java @@ -3,8 +3,8 @@ package cn.iocoder.yudao.module.system.service.social; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.http.HttpUtils; -import cn.iocoder.yudao.module.system.dal.dataobject.social.SysSocialUserDO; -import cn.iocoder.yudao.module.system.dal.mysql.social.SysSocialUserMapper; +import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO; +import cn.iocoder.yudao.module.system.dal.mysql.social.SocialUserMapper; import cn.iocoder.yudao.module.system.dal.redis.social.SocialAuthUserRedisDAO; import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; import com.google.common.annotations.VisibleForTesting; @@ -45,7 +45,7 @@ public class SocialUserServiceImpl implements SocialUserService { private SocialAuthUserRedisDAO authSocialUserRedisDAO; @Resource - private SysSocialUserMapper socialUserMapper; + private SocialUserMapper socialUserMapper; @Override public String getAuthorizeUrl(Integer type, String redirectUri) { @@ -73,22 +73,22 @@ public class SocialUserServiceImpl implements SocialUserService { } @Override - public List getAllSocialUserList(Integer type, String unionId, Integer userType) { + public List getAllSocialUserList(Integer type, String unionId, Integer userType) { List types = SocialTypeEnum.getRelationTypes(type); return socialUserMapper.selectListByTypeAndUnionId(userType, types, unionId); } @Override - public List getSocialUserList(Long userId, Integer userType) { + public List getSocialUserList(Long userId, Integer userType) { return socialUserMapper.selectListByUserId(userType, userId); } @Override @Transactional(rollbackFor = Exception.class) public void bindSocialUser(Long userId, Integer userType, Integer type, AuthUser authUser) { - // 获得 unionId 对应的 SysSocialUserDO 列表 + // 获得 unionId 对应的 SocialUserDO 列表 String unionId = getAuthUserUnionId(authUser); - List socialUsers = this.getAllSocialUserList(type, unionId, userType); + List socialUsers = this.getAllSocialUserList(type, unionId, userType); // 逻辑一:如果 userId 之å‰ç»‘定过该 type 的其它账å·ï¼Œéœ€è¦è¿›è¡Œè§£ç»‘ this.unbindOldSocialUser(userId, userType, type, unionId); @@ -100,12 +100,12 @@ public class SocialUserServiceImpl implements SocialUserService { if (Objects.equals(socialUser.getUserId(), userId)) { return; } - socialUserMapper.updateById(new SysSocialUserDO().setId(socialUser.getId()).setUserId(userId)); + socialUserMapper.updateById(new SocialUserDO().setId(socialUser.getId()).setUserId(userId)); }); // 逻辑三:如果 authUser ä¸å­˜åœ¨äºŽ socialUsers 中,则进行新增;å¦åˆ™ï¼Œè¿›è¡Œæ›´æ–° - SysSocialUserDO socialUser = CollUtil.findOneByField(socialUsers, "openid", authUser.getUuid()); - SysSocialUserDO saveSocialUser = SysSocialUserDO.builder() // 新增和更新的通用属性 + SocialUserDO socialUser = CollUtil.findOneByField(socialUsers, "openid", authUser.getUuid()); + SocialUserDO saveSocialUser = SocialUserDO.builder() // 新增和更新的通用属性 .token(authUser.getToken().getAccessToken()).rawTokenInfo(toJsonString(authUser.getToken())) .nickname(authUser.getNickname()).avatar(authUser.getAvatar()).rawUserInfo(toJsonString(authUser.getRawUserInfo())) .build(); @@ -121,8 +121,8 @@ public class SocialUserServiceImpl implements SocialUserService { @Override public void unbindSocialUser(Long userId, Integer userType, Integer type, String unionId) { - // 获得 unionId 对应的所有 SysSocialUserDO 社交用户 - List socialUsers = this.getAllSocialUserList(type, unionId, userType); + // 获得 unionId 对应的所有 SocialUserDO 社交用户 + List socialUsers = this.getAllSocialUserList(type, unionId, userType); if (CollUtil.isEmpty(socialUsers)) { return; } @@ -134,20 +134,20 @@ public class SocialUserServiceImpl implements SocialUserService { }); // 解绑 - socialUserMapper.deleteBatchIds(CollectionUtils.convertSet(socialUsers, SysSocialUserDO::getId)); + socialUserMapper.deleteBatchIds(CollectionUtils.convertSet(socialUsers, SocialUserDO::getId)); } @VisibleForTesting public void unbindOldSocialUser(Long userId, Integer userType, Integer type, String newUnionId) { List types = SocialTypeEnum.getRelationTypes(type); - List oldSocialUsers = socialUserMapper.selectListByTypeAndUserId(userType, types, userId); + List oldSocialUsers = socialUserMapper.selectListByTypeAndUserId(userType, types, userId); // 如果新è€çš„ unionId 是一致的,说明无需解绑 if (CollUtil.isEmpty(oldSocialUsers) || Objects.equals(newUnionId, oldSocialUsers.get(0).getUnionId())) { return; } // 解绑 - socialUserMapper.deleteBatchIds(CollectionUtils.convertSet(oldSocialUsers, SysSocialUserDO::getId)); + socialUserMapper.deleteBatchIds(CollectionUtils.convertSet(oldSocialUsers, SocialUserDO::getId)); } /** diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/SysTenantCoreService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/SysTenantCoreService.java deleted file mode 100644 index 030531d85f..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/SysTenantCoreService.java +++ /dev/null @@ -1,11 +0,0 @@ -package cn.iocoder.yudao.module.system.service.tenant; - -import cn.iocoder.yudao.framework.tenant.core.service.TenantFrameworkService; - -/** - * 租户 Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface SysTenantCoreService extends TenantFrameworkService { -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantService.java index 8d2005ba64..5742a7a102 100755 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantService.java @@ -1,11 +1,12 @@ package cn.iocoder.yudao.module.system.service.tenant; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.tenant.core.service.TenantFrameworkService; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantCreateReqVO; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.tenant.SysTenantDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO; import javax.validation.Valid; import java.util.Collection; @@ -16,7 +17,7 @@ import java.util.List; * * @author èŠ‹é“æºç  */ -public interface TenantService { +public interface TenantService extends TenantFrameworkService { /** * 创建租户 @@ -46,7 +47,7 @@ public interface TenantService { * @param id ç¼–å· * @return 租户 */ - SysTenantDO getTenant(Long id); + TenantDO getTenant(Long id); /** * 获得租户列表 @@ -54,7 +55,7 @@ public interface TenantService { * @param ids ç¼–å· * @return 租户列表 */ - List getTenantList(Collection ids); + List getTenantList(Collection ids); /** * 获得租户分页 @@ -62,7 +63,7 @@ public interface TenantService { * @param pageReqVO 分页查询 * @return 租户分页 */ - PageResult getTenantPage(TenantPageReqVO pageReqVO); + PageResult getTenantPage(TenantPageReqVO pageReqVO); /** * 获得租户列表, 用于 Excel 导出 @@ -70,7 +71,7 @@ public interface TenantService { * @param exportReqVO 查询æ¡ä»¶ * @return 租户列表 */ - List getTenantList(TenantExportReqVO exportReqVO); + List getTenantList(TenantExportReqVO exportReqVO); /** * 获得å字对应的租户 @@ -78,6 +79,6 @@ public interface TenantService { * @param name 组户å * @return 租户 */ - SysTenantDO getTenantByName(String name); + TenantDO getTenantByName(String name); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImpl.java index 4b40236a11..6a584d29dc 100755 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImpl.java @@ -1,13 +1,14 @@ package cn.iocoder.yudao.module.system.service.tenant; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantCreateReqVO; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantUpdateReqVO; import cn.iocoder.yudao.module.system.convert.tenant.TenantConvert; -import cn.iocoder.yudao.module.system.dal.mysql.tenant.SysTenantMapper; -import cn.iocoder.yudao.module.system.dal.dataobject.tenant.SysTenantDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO; +import cn.iocoder.yudao.module.system.dal.mysql.tenant.TenantMapper; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -15,8 +16,8 @@ import javax.annotation.Resource; import java.util.Collection; import java.util.List; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.TENANT_NOT_EXISTS; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.TENANT_NOT_EXISTS; /** * 租户 Service 实现类 @@ -28,12 +29,18 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU public class TenantServiceImpl implements TenantService { @Resource - private SysTenantMapper tenantMapper; + private TenantMapper tenantMapper; + + @Override + public List getTenantIds() { + List tenants = tenantMapper.selectList(); + return CollectionUtils.convertList(tenants, TenantDO::getId); + } @Override public Long createTenant(TenantCreateReqVO createReqVO) { // æ’å…¥ - SysTenantDO tenant = TenantConvert.INSTANCE.convert(createReqVO); + TenantDO tenant = TenantConvert.INSTANCE.convert(createReqVO); tenantMapper.insert(tenant); // 返回 return tenant.getId(); @@ -44,7 +51,7 @@ public class TenantServiceImpl implements TenantService { // 校验存在 this.validateTenantExists(updateReqVO.getId()); // æ›´æ–° - SysTenantDO updateObj = TenantConvert.INSTANCE.convert(updateReqVO); + TenantDO updateObj = TenantConvert.INSTANCE.convert(updateReqVO); tenantMapper.updateById(updateObj); } @@ -63,27 +70,27 @@ public class TenantServiceImpl implements TenantService { } @Override - public SysTenantDO getTenant(Long id) { + public TenantDO getTenant(Long id) { return tenantMapper.selectById(id); } @Override - public List getTenantList(Collection ids) { + public List getTenantList(Collection ids) { return tenantMapper.selectBatchIds(ids); } @Override - public PageResult getTenantPage(TenantPageReqVO pageReqVO) { + public PageResult getTenantPage(TenantPageReqVO pageReqVO) { return tenantMapper.selectPage(pageReqVO); } @Override - public List getTenantList(TenantExportReqVO exportReqVO) { + public List getTenantList(TenantExportReqVO exportReqVO) { return tenantMapper.selectList(exportReqVO); } @Override - public SysTenantDO getTenantByName(String name) { + public TenantDO getTenantByName(String name) { return tenantMapper.selectByName(name); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/impl/SysTenantCoreServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/impl/SysTenantCoreServiceImpl.java deleted file mode 100644 index 67b5acfe4e..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/tenant/impl/SysTenantCoreServiceImpl.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.yudao.module.system.service.tenant.impl; - -import cn.iocoder.yudao.module.system.dal.dataobject.tenant.SysTenantDO; -import cn.iocoder.yudao.module.system.dal.mysql.tenant.SysTenantCoreMapper; -import cn.iocoder.yudao.module.system.service.tenant.SysTenantCoreService; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import java.util.List; - -/** - * 租户 Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -public class SysTenantCoreServiceImpl implements SysTenantCoreService { - - @Resource - private SysTenantCoreMapper tenantCoreMapper; - - @Override - public List getTenantIds() { - List tenants = tenantCoreMapper.selectList(); - return CollectionUtils.convertList(tenants, SysTenantDO::getId); - } - -} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java index 25c413e126..e150d598d7 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java @@ -13,7 +13,7 @@ import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfi import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; import cn.iocoder.yudao.module.system.convert.user.UserConvert; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper; import cn.iocoder.yudao.module.system.service.dept.DeptService; @@ -241,7 +241,7 @@ public class AdminUserServiceImpl implements AdminUserService { return Collections.emptySet(); } Set deptIds = CollectionUtils.convertSet(deptService.getDeptsByParentIdFromCache( - deptId, true), SysDeptDO::getId); + deptId, true), DeptDO::getId); deptIds.add(deptId); // 包括自身 return deptIds; } diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImplTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImplTest.java index 33b2a3b788..1862c68c88 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImplTest.java @@ -5,12 +5,12 @@ import cn.iocoder.yudao.framework.security.config.SecurityProperties; import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.session.UserSessionPageReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; -import cn.iocoder.yudao.module.system.dal.mysql.auth.SysUserSessionMapper; +import cn.iocoder.yudao.module.system.dal.mysql.auth.UserSessionMapper; import cn.iocoder.yudao.module.system.service.logger.LoginLogService; import cn.iocoder.yudao.module.system.service.user.AdminUserService; -import cn.iocoder.yudao.module.system.dal.dataobject.auth.SysUserSessionDO; +import cn.iocoder.yudao.module.system.dal.dataobject.auth.UserSessionDO; import cn.iocoder.yudao.module.system.dal.redis.auth.LoginUserRedisDAO; -import cn.iocoder.yudao.module.system.enums.common.SysSexEnum; +import cn.iocoder.yudao.module.system.enums.common.SexEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -49,13 +49,13 @@ public class UserSessionServiceImplTest extends BaseDbAndRedisUnitTest { private UserSessionServiceImpl userSessionService; @Resource - private SysUserSessionMapper userSessionMapper; + private UserSessionMapper userSessionMapper; @MockBean private AdminUserService userService; @MockBean private LoginLogService loginLogService; - @MockBean + @Resource private LoginUserRedisDAO loginUserRedisDAO; @MockBean @@ -65,13 +65,13 @@ public class UserSessionServiceImplTest extends BaseDbAndRedisUnitTest { public void testGetUserSessionPage_success() { // mock æ•°æ® AdminUserDO dbUser = randomPojo(AdminUserDO.class, o -> { - o.setSex(randomEle(SysSexEnum.values()).getSex()); + o.setSex(randomEle(SexEnum.values()).getSex()); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); }); when(userService.getUsersByUsername(eq(dbUser.getUsername()))).thenReturn(singletonList(dbUser)); // æ’å…¥å¯è¢«æŸ¥è¯¢åˆ°çš„æ•°æ® String userIp = randomString(); - SysUserSessionDO dbSession = randomPojo(SysUserSessionDO.class, o -> { + UserSessionDO dbSession = randomPojo(UserSessionDO.class, o -> { o.setUserId(dbUser.getId()); o.setUserType(randomEle(UserTypeEnum.values()).getValue()); o.setUserIp(userIp); @@ -93,7 +93,7 @@ public class UserSessionServiceImplTest extends BaseDbAndRedisUnitTest { reqVO.setUserIp(userIp); // 调用 - PageResult pageResult = userSessionService.getUserSessionPage(reqVO); + PageResult pageResult = userSessionService.getUserSessionPage(reqVO); // 断言 assertEquals(1, pageResult.getTotal()); assertEquals(1, pageResult.getList().size()); @@ -107,15 +107,15 @@ public class UserSessionServiceImplTest extends BaseDbAndRedisUnitTest { int expectedTimeoutCount = 120, expectedTotal = 1; // å‡†å¤‡æ•°æ® - List prepareData = Stream + List prepareData = Stream .iterate(0, i -> i) .limit(expectedTimeoutCount) - .map(i -> randomPojo(SysUserSessionDO.class, o -> { + .map(i -> randomPojo(UserSessionDO.class, o -> { o.setUserType(randomEle(UserTypeEnum.values()).getValue()); o.setSessionTimeout(DateUtil.offsetSecond(new Date(), -1)); })) .collect(Collectors.toList()); - SysUserSessionDO sessionDO = randomPojo(SysUserSessionDO.class, o -> { + UserSessionDO sessionDO = randomPojo(UserSessionDO.class, o -> { o.setUserType(randomEle(UserTypeEnum.values()).getValue()); o.setSessionTimeout(DateUtil.offsetMinute(new Date(), 30)); }); @@ -126,7 +126,7 @@ public class UserSessionServiceImplTest extends BaseDbAndRedisUnitTest { long actualTimeoutCount = userSessionService.clearSessionTimeout(); // 校验 assertEquals(expectedTimeoutCount, actualTimeoutCount); - List userSessionDOS = userSessionMapper.selectList(); + List userSessionDOS = userSessionMapper.selectList(); assertEquals(expectedTotal, userSessionDOS.size()); assertPojoEquals(sessionDO, userSessionDOS.get(0), "updateTime"); } @@ -145,8 +145,8 @@ public class UserSessionServiceImplTest extends BaseDbAndRedisUnitTest { // 调用 String sessionId = userSessionService.createUserSession(loginUser, userIp, userAgent); - // 校验 SysUserSessionDO 记录 - SysUserSessionDO userSessionDO = userSessionMapper.selectById(sessionId); + // 校验 UserSessionDO 记录 + UserSessionDO userSessionDO = userSessionMapper.selectById(sessionId); assertPojoEquals(loginUser, userSessionDO, "id", "updateTime"); assertEquals(sessionId, userSessionDO.getId()); assertEquals(userIp, userSessionDO.getUserIp()); @@ -171,7 +171,7 @@ public class UserSessionServiceImplTest extends BaseDbAndRedisUnitTest { // mock æ•°æ® loginUser.setUpdateTime(date); loginUserRedisDAO.set(sessionId, loginUser); - SysUserSessionDO userSession = SysUserSessionDO.builder().id(sessionId) + UserSessionDO userSession = UserSessionDO.builder().id(sessionId) .userId(loginUser.getId()).userType(loginUser.getUserType()) .userIp(userIp).userAgent(userAgent).username(userName) .sessionTimeout(addTime(Duration.ofMillis(timeLong))) @@ -183,8 +183,8 @@ public class UserSessionServiceImplTest extends BaseDbAndRedisUnitTest { // 校验 LoginUser 缓存 LoginUser redisLoginUser = loginUserRedisDAO.get(sessionId); assertNotEquals(redisLoginUser.getUpdateTime(), date); - // 校验 SysUserSessionDO 记录 - SysUserSessionDO updateDO = userSessionMapper.selectById(sessionId); + // 校验 UserSessionDO 记录 + UserSessionDO updateDO = userSessionMapper.selectById(sessionId); assertEquals(updateDO.getUsername(), loginUser.getUsername()); assertNotEquals(updateDO.getUpdateTime(), userSession.getUpdateTime()); assertNotEquals(updateDO.getSessionTimeout(), addTime(Duration.ofMillis(timeLong))); @@ -202,7 +202,7 @@ public class UserSessionServiceImplTest extends BaseDbAndRedisUnitTest { when(securityProperties.getSessionTimeout()).thenReturn(Duration.ofDays(1)); // mock æ•°æ® loginUserRedisDAO.set(sessionId, loginUser); - SysUserSessionDO userSession = SysUserSessionDO.builder().id(sessionId) + UserSessionDO userSession = UserSessionDO.builder().id(sessionId) .userId(loginUser.getId()).userType(loginUser.getUserType()) .userIp(userIp).userAgent(userAgent).username(loginUser.getUsername()) .sessionTimeout(addTime(Duration.ofMillis(timeLong))) diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceTest.java index bfda1290e6..3f78cec2f3 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceTest.java @@ -4,8 +4,8 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptCreateReqVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.module.system.dal.mysql.dept.SysDeptMapper; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; +import cn.iocoder.yudao.module.system.dal.mysql.dept.DeptMapper; import cn.iocoder.yudao.module.system.enums.dept.DeptIdEnum; import cn.iocoder.yudao.module.system.mq.producer.dept.DeptProducer; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; @@ -43,7 +43,7 @@ public class DeptServiceTest extends BaseDbUnitTest { @Resource private DeptServiceImpl deptService; @Resource - private SysDeptMapper deptMapper; + private DeptMapper deptMapper; @MockBean private DeptProducer deptProducer; @@ -51,20 +51,20 @@ public class DeptServiceTest extends BaseDbUnitTest { @SuppressWarnings("unchecked") void testInitLocalCache() { // mock æ•°æ® - SysDeptDO deptDO1 = randomDeptDO(); + DeptDO deptDO1 = randomDeptDO(); deptMapper.insert(deptDO1); - SysDeptDO deptDO2 = randomDeptDO(); + DeptDO deptDO2 = randomDeptDO(); deptMapper.insert(deptDO2); // 调用 deptService.initLocalCache(); // 断言 deptCache 缓存 - Map deptCache = (Map) getFieldValue(deptService, "deptCache"); + Map deptCache = (Map) getFieldValue(deptService, "deptCache"); assertEquals(2, deptCache.size()); assertPojoEquals(deptDO1, deptCache.get(deptDO1.getId())); assertPojoEquals(deptDO2, deptCache.get(deptDO2.getId())); // 断言 parentDeptCache 缓存 - Multimap parentDeptCache = (Multimap) getFieldValue(deptService, "parentDeptCache"); + Multimap parentDeptCache = (Multimap) getFieldValue(deptService, "parentDeptCache"); assertEquals(2, parentDeptCache.size()); assertPojoEquals(deptDO1, parentDeptCache.get(deptDO1.getParentId())); assertPojoEquals(deptDO2, parentDeptCache.get(deptDO2.getParentId())); @@ -76,7 +76,7 @@ public class DeptServiceTest extends BaseDbUnitTest { @Test void testListDepts() { // mock æ•°æ® - SysDeptDO dept = randomPojo(SysDeptDO.class, o -> { // 等会查询到 + DeptDO dept = randomPojo(DeptDO.class, o -> { // 等会查询到 o.setName("å¼€å‘部"); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); }); @@ -90,7 +90,7 @@ public class DeptServiceTest extends BaseDbUnitTest { reqVO.setName("å¼€"); reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 调用 - List sysDeptDOS = deptService.getSimpleDepts(reqVO); + List sysDeptDOS = deptService.getSimpleDepts(reqVO); // 断言 assertEquals(1, sysDeptDOS.size()); assertPojoEquals(dept, sysDeptDOS.get(0)); @@ -109,7 +109,7 @@ public class DeptServiceTest extends BaseDbUnitTest { // 断言 assertNotNull(deptId); // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - SysDeptDO deptDO = deptMapper.selectById(deptId); + DeptDO deptDO = deptMapper.selectById(deptId); assertPojoEquals(reqVO, deptDO); // 校验调用 verify(deptProducer, times(1)).sendDeptRefreshMessage(); @@ -118,7 +118,7 @@ public class DeptServiceTest extends BaseDbUnitTest { @Test void testUpdateDept_success() { // mock æ•°æ® - SysDeptDO dbDeptDO = randomPojo(SysDeptDO.class, o -> o.setStatus(randomCommonStatus())); + DeptDO dbDeptDO = randomPojo(DeptDO.class, o -> o.setStatus(randomCommonStatus())); deptMapper.insert(dbDeptDO);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° DeptUpdateReqVO reqVO = randomPojo(DeptUpdateReqVO.class, o -> { @@ -130,14 +130,14 @@ public class DeptServiceTest extends BaseDbUnitTest { // 调用 deptService.updateDept(reqVO); // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - SysDeptDO deptDO = deptMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ + DeptDO deptDO = deptMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ assertPojoEquals(reqVO, deptDO); } @Test void testDeleteDept_success() { // mock æ•°æ® - SysDeptDO dbDeptDO = randomPojo(SysDeptDO.class, o -> o.setStatus(randomCommonStatus())); + DeptDO dbDeptDO = randomPojo(DeptDO.class, o -> o.setStatus(randomCommonStatus())); deptMapper.insert(dbDeptDO);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° Long id = dbDeptDO.getId(); @@ -150,12 +150,12 @@ public class DeptServiceTest extends BaseDbUnitTest { @Test void testCheckDept_nameDuplicateForUpdate() { // mock æ•°æ® - SysDeptDO deptDO = randomDeptDO(); + DeptDO deptDO = randomDeptDO(); // 设置根节点部门 deptDO.setParentId(DeptIdEnum.ROOT.getId()); deptMapper.insert(deptDO); // mock æ•°æ® ç¨åŽæ¨¡æ‹Ÿé‡å¤å®ƒçš„ name - SysDeptDO nameDeptDO = randomDeptDO(); + DeptDO nameDeptDO = randomDeptDO(); // 设置根节点部门 nameDeptDO.setParentId(DeptIdEnum.ROOT.getId()); deptMapper.insert(nameDeptDO); @@ -192,10 +192,10 @@ public class DeptServiceTest extends BaseDbUnitTest { @Test void testCheckDept_exitsChildrenForDelete() { // mock æ•°æ® - SysDeptDO parentDept = randomPojo(SysDeptDO.class, o -> o.setStatus(randomCommonStatus())); + DeptDO parentDept = randomPojo(DeptDO.class, o -> o.setStatus(randomCommonStatus())); deptMapper.insert(parentDept);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° - SysDeptDO childrenDeptDO = randomPojo(SysDeptDO.class, o -> { + DeptDO childrenDeptDO = randomPojo(DeptDO.class, o -> { o.setParentId(parentDept.getId()); o.setStatus(randomCommonStatus()); }); @@ -208,7 +208,7 @@ public class DeptServiceTest extends BaseDbUnitTest { @Test void testCheckDept_parentErrorForUpdate() { // mock æ•°æ® - SysDeptDO dbDeptDO = randomPojo(SysDeptDO.class, o -> o.setStatus(randomCommonStatus())); + DeptDO dbDeptDO = randomPojo(DeptDO.class, o -> o.setStatus(randomCommonStatus())); deptMapper.insert(dbDeptDO); // 准备傿•° DeptUpdateReqVO reqVO = randomPojo(DeptUpdateReqVO.class, @@ -225,7 +225,7 @@ public class DeptServiceTest extends BaseDbUnitTest { @Test void testCheckDept_notEnableForCreate() { // mock æ•°æ® - SysDeptDO deptDO = randomPojo(SysDeptDO.class, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())); + DeptDO deptDO = randomPojo(DeptDO.class, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())); deptMapper.insert(deptDO); // 准备傿•° DeptCreateReqVO reqVO = randomPojo(DeptCreateReqVO.class, @@ -240,9 +240,9 @@ public class DeptServiceTest extends BaseDbUnitTest { @Test void testCheckDept_parentIsChildForUpdate() { // mock æ•°æ® - SysDeptDO parentDept = randomPojo(SysDeptDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())); + DeptDO parentDept = randomPojo(DeptDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())); deptMapper.insert(parentDept); - SysDeptDO childDept = randomPojo(SysDeptDO.class, o -> { + DeptDO childDept = randomPojo(DeptDO.class, o -> { o.setStatus(CommonStatusEnum.ENABLE.getStatus()); o.setParentId(parentDept.getId()); }); @@ -262,11 +262,11 @@ public class DeptServiceTest extends BaseDbUnitTest { } @SafeVarargs - private static SysDeptDO randomDeptDO(Consumer... consumers) { - Consumer consumer = (o) -> { + private static DeptDO randomDeptDO(Consumer... consumers) { + Consumer consumer = (o) -> { o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 }; - return randomPojo(SysDeptDO.class, ArrayUtils.append(consumer, consumers)); + return randomPojo(DeptDO.class, ArrayUtils.append(consumer, consumers)); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/PostServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/PostServiceTest.java index d6bbab6f7a..19850d0c79 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/PostServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dept/PostServiceTest.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.service.dept; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; @@ -9,7 +9,7 @@ import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostCreateRe import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.mysql.dept.SysPostMapper; +import cn.iocoder.yudao.module.system.dal.mysql.dept.PostMapper; import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.Import; @@ -32,12 +32,12 @@ public class PostServiceTest extends BaseDbUnitTest { @Resource private PostServiceImpl postService; @Resource - private SysPostMapper postMapper; + private PostMapper postMapper; @Test void testPagePosts() { // mock æ•°æ® - SysPostDO postDO = randomPojo(SysPostDO.class, o -> { + PostDO postDO = randomPojo(PostDO.class, o -> { o.setName("ç ä»”"); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); }); @@ -53,7 +53,7 @@ public class PostServiceTest extends BaseDbUnitTest { reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 调用 - PageResult pageResult = postService.getPostPage(reqVO); + PageResult pageResult = postService.getPostPage(reqVO); // 断言 assertEquals(1, pageResult.getTotal()); @@ -64,7 +64,7 @@ public class PostServiceTest extends BaseDbUnitTest { @Test void testListPosts() { // mock æ•°æ® - SysPostDO postDO = randomPojo(SysPostDO.class, o -> { + PostDO postDO = randomPojo(PostDO.class, o -> { o.setName("ç ä»”"); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); }); @@ -79,7 +79,7 @@ public class PostServiceTest extends BaseDbUnitTest { reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 调用 - List list = postService.getPosts(reqVO); + List list = postService.getPosts(reqVO); // 断言 assertEquals(1, list.size()); assertPojoEquals(postDO, list.get(0)); @@ -88,12 +88,12 @@ public class PostServiceTest extends BaseDbUnitTest { @Test void testGetPost() { // mock æ•°æ® - SysPostDO dbPostDO = randomPostDO(); + PostDO dbPostDO = randomPostDO(); postMapper.insert(dbPostDO); // 准备傿•° Long id = dbPostDO.getId(); // 调用 - SysPostDO post = postService.getPost(id); + PostDO post = postService.getPost(id); // 断言 assertNotNull(post); assertPojoEquals(dbPostDO, post); @@ -109,14 +109,14 @@ public class PostServiceTest extends BaseDbUnitTest { // 断言 assertNotNull(postId); // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - SysPostDO post = postMapper.selectById(postId); + PostDO post = postMapper.selectById(postId); assertPojoEquals(reqVO, post); } @Test void testUpdatePost_success() { // mock æ•°æ® - SysPostDO postDO = randomPostDO(); + PostDO postDO = randomPostDO(); postMapper.insert(postDO);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° PostUpdateReqVO reqVO = randomPojo(PostUpdateReqVO.class, @@ -128,14 +128,14 @@ public class PostServiceTest extends BaseDbUnitTest { // 调用 postService.updatePost(reqVO); // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - SysPostDO post = postMapper.selectById(reqVO.getId());// èŽ·å–æœ€æ–°çš„ + PostDO post = postMapper.selectById(reqVO.getId());// èŽ·å–æœ€æ–°çš„ assertPojoEquals(reqVO, post); } @Test void testDeletePost_success() { // mock æ•°æ® - SysPostDO postDO = randomPostDO(); + PostDO postDO = randomPostDO(); postMapper.insert(postDO); // 准备傿•° Long id = postDO.getId(); @@ -155,7 +155,7 @@ public class PostServiceTest extends BaseDbUnitTest { @Test void testCheckPost_nameDuplicateForCreate() { // mock æ•°æ® - SysPostDO postDO = randomPostDO(); + PostDO postDO = randomPostDO(); postMapper.insert(postDO);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° PostCreateReqVO reqVO = randomPojo(PostCreateReqVO.class, @@ -167,10 +167,10 @@ public class PostServiceTest extends BaseDbUnitTest { @Test void testCheckPost_codeDuplicateForUpdate() { // mock æ•°æ® - SysPostDO postDO = randomPostDO(); + PostDO postDO = randomPostDO(); postMapper.insert(postDO); // mock æ•°æ® ç¨åŽæ¨¡æ‹Ÿé‡å¤å®ƒçš„ code - SysPostDO codePostDO = randomPostDO(); + PostDO codePostDO = randomPostDO(); postMapper.insert(codePostDO); // 准备傿•° PostUpdateReqVO reqVO = randomPojo(PostUpdateReqVO.class, @@ -185,10 +185,10 @@ public class PostServiceTest extends BaseDbUnitTest { } @SafeVarargs - private static SysPostDO randomPostDO(Consumer... consumers) { - Consumer consumer = (o) -> { + private static PostDO randomPostDO(Consumer... consumers) { + Consumer consumer = (o) -> { o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 }; - return randomPojo(SysPostDO.class, ArrayUtils.append(consumer, consumers)); + return randomPojo(PostDO.class, ArrayUtils.append(consumer, consumers)); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceTest.java index e0f3d0e2b6..94691d4840 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceTest.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.system.service.dict; -import cn.iocoder.yudao.module.system.dal.dataobject.dict.SysDictDataDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataCreateReqVO; @@ -8,7 +8,7 @@ import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataExpo import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataUpdateReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictTypeDO; -import cn.iocoder.yudao.module.system.dal.mysql.dict.SysDictDataMapper; +import cn.iocoder.yudao.module.system.dal.mysql.dict.DictDataMapper; import cn.iocoder.yudao.module.system.mq.producer.dict.DictDataProducer; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; @@ -39,7 +39,7 @@ public class DictDataServiceTest extends BaseDbUnitTest { private DictDataServiceImpl dictDataService; @Resource - private SysDictDataMapper dictDataMapper; + private DictDataMapper dictDataMapper; @MockBean private DictTypeService dictTypeService; @MockBean @@ -52,22 +52,22 @@ public class DictDataServiceTest extends BaseDbUnitTest { @SuppressWarnings("unchecked") public void testInitLocalCache() { // mock æ•°æ® - SysDictDataDO dictData01 = randomDictDataDO(); + DictDataDO dictData01 = randomDictDataDO(); dictDataMapper.insert(dictData01); - SysDictDataDO dictData02 = randomDictDataDO(); + DictDataDO dictData02 = randomDictDataDO(); dictDataMapper.insert(dictData02); // 调用 dictDataService.initLocalCache(); // 断言 labelDictDataCache 缓存 - ImmutableTable labelDictDataCache = - (ImmutableTable) getFieldValue(dictDataService, "labelDictDataCache"); + ImmutableTable labelDictDataCache = + (ImmutableTable) getFieldValue(dictDataService, "labelDictDataCache"); assertEquals(2, labelDictDataCache.size()); assertPojoEquals(dictData01, labelDictDataCache.get(dictData01.getDictType(), dictData01.getLabel())); assertPojoEquals(dictData02, labelDictDataCache.get(dictData02.getDictType(), dictData02.getLabel())); // 断言 valueDictDataCache 缓存 - ImmutableTable valueDictDataCache = - (ImmutableTable) getFieldValue(dictDataService, "valueDictDataCache"); + ImmutableTable valueDictDataCache = + (ImmutableTable) getFieldValue(dictDataService, "valueDictDataCache"); assertEquals(2, valueDictDataCache.size()); assertPojoEquals(dictData01, valueDictDataCache.get(dictData01.getDictType(), dictData01.getValue())); assertPojoEquals(dictData02, valueDictDataCache.get(dictData02.getDictType(), dictData02.getValue())); @@ -79,7 +79,7 @@ public class DictDataServiceTest extends BaseDbUnitTest { @Test public void testGetDictDataPage() { // mock æ•°æ® - SysDictDataDO dbDictData = randomPojo(SysDictDataDO.class, o -> { // 等会查询到 + DictDataDO dbDictData = randomPojo(DictDataDO.class, o -> { // 等会查询到 o.setLabel("芋艿"); o.setDictType("yunai"); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); @@ -98,7 +98,7 @@ public class DictDataServiceTest extends BaseDbUnitTest { reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 调用 - PageResult pageResult = dictDataService.getDictDataPage(reqVO); + PageResult pageResult = dictDataService.getDictDataPage(reqVO); // 断言 assertEquals(1, pageResult.getTotal()); assertEquals(1, pageResult.getList().size()); @@ -108,7 +108,7 @@ public class DictDataServiceTest extends BaseDbUnitTest { @Test public void testGetDictDataList() { // mock æ•°æ® - SysDictDataDO dbDictData = randomPojo(SysDictDataDO.class, o -> { // 等会查询到 + DictDataDO dbDictData = randomPojo(DictDataDO.class, o -> { // 等会查询到 o.setLabel("芋艿"); o.setDictType("yunai"); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); @@ -127,7 +127,7 @@ public class DictDataServiceTest extends BaseDbUnitTest { reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 调用 - List list = dictDataService.getDictDatas(reqVO); + List list = dictDataService.getDictDatas(reqVO); // 断言 assertEquals(1, list.size()); assertPojoEquals(dbDictData, list.get(0)); @@ -146,7 +146,7 @@ public class DictDataServiceTest extends BaseDbUnitTest { // 断言 assertNotNull(dictDataId); // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - SysDictDataDO dictData = dictDataMapper.selectById(dictDataId); + DictDataDO dictData = dictDataMapper.selectById(dictDataId); assertPojoEquals(reqVO, dictData); // 校验调用 verify(dictDataProducer, times(1)).sendDictDataRefreshMessage(); @@ -155,7 +155,7 @@ public class DictDataServiceTest extends BaseDbUnitTest { @Test public void testUpdateDictData_success() { // mock æ•°æ® - SysDictDataDO dbDictData = randomDictDataDO(); + DictDataDO dbDictData = randomDictDataDO(); dictDataMapper.insert(dbDictData);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° DictDataUpdateReqVO reqVO = randomPojo(DictDataUpdateReqVO.class, o -> { @@ -168,7 +168,7 @@ public class DictDataServiceTest extends BaseDbUnitTest { // 调用 dictDataService.updateDictData(reqVO); // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - SysDictDataDO dictData = dictDataMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ + DictDataDO dictData = dictDataMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ assertPojoEquals(reqVO, dictData); // 校验调用 verify(dictDataProducer, times(1)).sendDictDataRefreshMessage(); @@ -177,7 +177,7 @@ public class DictDataServiceTest extends BaseDbUnitTest { @Test public void testDeleteDictData_success() { // mock æ•°æ® - SysDictDataDO dbDictData = randomDictDataDO(); + DictDataDO dbDictData = randomDictDataDO(); dictDataMapper.insert(dbDictData);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° Long id = dbDictData.getId(); @@ -193,7 +193,7 @@ public class DictDataServiceTest extends BaseDbUnitTest { @Test public void testCheckDictDataExists_success() { // mock æ•°æ® - SysDictDataDO dbDictData = randomDictDataDO(); + DictDataDO dbDictData = randomDictDataDO(); dictDataMapper.insert(dbDictData);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 调用æˆåŠŸ @@ -273,18 +273,18 @@ public class DictDataServiceTest extends BaseDbUnitTest { // ========== éšæœºå¯¹è±¡ ========== @SafeVarargs - private static SysDictDataDO randomDictDataDO(Consumer... consumers) { - Consumer consumer = (o) -> { + private static DictDataDO randomDictDataDO(Consumer... consumers) { + Consumer consumer = (o) -> { o.setStatus(randomCommonStatus()); // ä¿è¯ status 的范围 }; - return randomPojo(SysDictDataDO.class, ArrayUtils.append(consumer, consumers)); + return randomPojo(DictDataDO.class, ArrayUtils.append(consumer, consumers)); } /** * 生æˆä¸€ä¸ªæœ‰æ•ˆçš„字典类型 * * @param type 字典类型 - * @return SysDictTypeDO 对象 + * @return DictTypeDO 对象 */ private static DictTypeDO randomDictTypeDO(String type) { return randomPojo(DictTypeDO.class, o -> { diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/DictTypeServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/DictTypeServiceTest.java index 3b2d763be4..406f1e8a44 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/DictTypeServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/dict/DictTypeServiceTest.java @@ -7,7 +7,7 @@ import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypeUpda import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypeExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypePageReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictTypeDO; -import cn.iocoder.yudao.module.system.dal.mysql.dict.SysDictTypeMapper; +import cn.iocoder.yudao.module.system.dal.mysql.dict.DictTypeMapper; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; @@ -36,7 +36,7 @@ public class DictTypeServiceTest extends BaseDbUnitTest { private DictTypeServiceImpl dictTypeService; @Resource - private SysDictTypeMapper dictTypeMapper; + private DictTypeMapper dictTypeMapper; @MockBean private DictDataService dictDataService; diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/errorcode/ErrorCodeServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/errorcode/ErrorCodeServiceTest.java index 045b10f39e..e16cbf1f29 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/errorcode/ErrorCodeServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/errorcode/ErrorCodeServiceTest.java @@ -7,7 +7,7 @@ import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.ErrorCodeCre import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.ErrorCodeExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.ErrorCodePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.ErrorCodeUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.mysql.errorcode.SysErrorCodeMapper; +import cn.iocoder.yudao.module.system.dal.mysql.errorcode.ErrorCodeMapper; import cn.iocoder.yudao.module.system.enums.errorcode.ErrorCodeTypeEnum; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; @@ -36,7 +36,7 @@ public class ErrorCodeServiceTest extends BaseDbUnitTest { private ErrorCodeServiceImpl errorCodeService; @Resource - private SysErrorCodeMapper errorCodeMapper; + private ErrorCodeMapper errorCodeMapper; @Test public void testCreateErrorCode_success() { @@ -200,7 +200,7 @@ public class ErrorCodeServiceTest extends BaseDbUnitTest { } /** - * 情况 2.1,错误ç å­˜åœ¨ï¼Œä½†æ˜¯æ˜¯ SysErrorCodeTypeEnum.MANUAL_OPERATION 类型 + * 情况 2.1,错误ç å­˜åœ¨ï¼Œä½†æ˜¯æ˜¯ ErrorCodeTypeEnum.MANUAL_OPERATION 类型 */ @Test public void testAutoGenerateErrorCodes_021() { diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImplTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImplTest.java index b17ad14047..1d59a64d07 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImplTest.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.service.logger; import cn.hutool.core.util.RandomUtil; -import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysLoginLogDO; +import cn.iocoder.yudao.module.system.dal.dataobject.logger.LoginLogDO; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils; @@ -38,7 +38,7 @@ public class LoginLogServiceImplTest extends BaseDbUnitTest { public void testGetLoginLogPage() { // æž„é€ æµ‹è¯•æ•°æ® // 登录æˆåŠŸçš„ - SysLoginLogDO loginLogDO = RandomUtils.randomPojo(SysLoginLogDO.class, logDO -> { + LoginLogDO loginLogDO = RandomUtils.randomPojo(LoginLogDO.class, logDO -> { logDO.setLogType(RandomUtil.randomEle(cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum.values()).getType()); logDO.setTraceId(TracerUtils.getTraceId()); logDO.setUserType(RandomUtil.randomEle(UserTypeEnum.values()).getValue()); @@ -70,7 +70,7 @@ public class LoginLogServiceImplTest extends BaseDbUnitTest { reqVO.setEndTime(buildTime(2021, 3, 7)); // 调用service方法 - PageResult pageResult = loginLogService.getLoginLogPage(reqVO); + PageResult pageResult = loginLogService.getLoginLogPage(reqVO); // æ–­è¨€ï¼ŒåªæŸ¥åˆ°äº†ä¸€æ¡ç¬¦åˆæ¡ä»¶çš„ assertEquals(1, pageResult.getTotal()); @@ -83,7 +83,7 @@ public class LoginLogServiceImplTest extends BaseDbUnitTest { // æž„é€ æµ‹è¯•æ•°æ® // 登录æˆåŠŸçš„ - SysLoginLogDO loginLogDO = RandomUtils.randomPojo(SysLoginLogDO.class, logDO -> { + LoginLogDO loginLogDO = RandomUtils.randomPojo(LoginLogDO.class, logDO -> { logDO.setLogType(RandomUtil.randomEle(cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum.values()).getType()); logDO.setTraceId(TracerUtils.getTraceId()); logDO.setUserType(RandomUtil.randomEle(UserTypeEnum.values()).getValue()); @@ -116,7 +116,7 @@ public class LoginLogServiceImplTest extends BaseDbUnitTest { // 调用service方法 - List loginLogList = loginLogService.getLoginLogList(reqVO); + List loginLogList = loginLogService.getLoginLogList(reqVO); // 断言 assertEquals(1, loginLogList.size()); @@ -136,7 +136,7 @@ public class LoginLogServiceImplTest extends BaseDbUnitTest { // 调用 loginLogService.createLoginLog(reqDTO); // 断言,忽略基本字段 - SysLoginLogDO sysLoginLogDO = loginLogMapper.selectOne(null); + LoginLogDO sysLoginLogDO = loginLogMapper.selectOne(null); assertPojoEquals(reqDTO, sysLoginLogDO); } diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImplTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImplTest.java index feebc7145b..b7bbcbed10 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImplTest.java @@ -7,7 +7,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.dal.mysql.logger.OperateLogMapper; import cn.iocoder.yudao.module.system.service.user.AdminUserService; -import cn.iocoder.yudao.module.system.enums.common.SysSexEnum; +import cn.iocoder.yudao.module.system.enums.common.SexEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -68,7 +68,7 @@ public class OperateLogServiceImplTest extends BaseDbUnitTest { // 先构造用户 AdminUserDO user = RandomUtils.randomPojo(AdminUserDO.class, o -> { o.setNickname("wangkai"); - o.setSex(SysSexEnum.MALE.getSex()); + o.setSex(SexEnum.MALE.getSex()); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); }); when(userService.getUsersByNickname("wangkai")).thenReturn(Collections.singletonList(user)); @@ -119,7 +119,7 @@ public class OperateLogServiceImplTest extends BaseDbUnitTest { // 先构造用户 AdminUserDO user = RandomUtils.randomPojo(AdminUserDO.class, o -> { o.setNickname("wangkai"); - o.setSex(SysSexEnum.MALE.getSex()); + o.setSex(SexEnum.MALE.getSex()); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); }); when(userService.getUsersByNickname("wangkai")).thenReturn(Collections.singletonList(user)); diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/notice/NoticeServiceImplTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/notice/NoticeServiceImplTest.java index 0d5babc505..ed0a707b5a 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/notice/NoticeServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/notice/NoticeServiceImplTest.java @@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeCreateReq import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeUpdateReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO; -import cn.iocoder.yudao.module.system.dal.mysql.notice.SysNoticeMapper; +import cn.iocoder.yudao.module.system.dal.mysql.notice.NoticeMapper; import cn.iocoder.yudao.module.system.enums.notice.NoticeTypeEnum; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; @@ -32,7 +32,7 @@ class NoticeServiceImplTest extends BaseDbUnitTest { private NoticeServiceImpl sysNoticeService; @Resource - private SysNoticeMapper sysNoticeMapper; + private NoticeMapper sysNoticeMapper; @Test public void testPageNotices_success() { @@ -66,7 +66,7 @@ class NoticeServiceImplTest extends BaseDbUnitTest { @Test public void testGetNotice_success() { // æ’å…¥å‰ç½®æ•°æ® - NoticeDO dbNotice = randomSysNoticeDO(); + NoticeDO dbNotice = randomNoticeDO(); sysNoticeMapper.insert(dbNotice); // 查询 @@ -80,7 +80,7 @@ class NoticeServiceImplTest extends BaseDbUnitTest { @Test public void testCreateNotice_success() { // 准备傿•° - NoticeCreateReqVO reqVO = randomSysNoticeCreateReqVO(); + NoticeCreateReqVO reqVO = randomNoticeCreateReqVO(); // 校验æ’å…¥æ˜¯å¦æˆåŠŸ Long noticeId = sysNoticeService.createNotice(reqVO); @@ -94,11 +94,11 @@ class NoticeServiceImplTest extends BaseDbUnitTest { @Test public void testUpdateNotice_success() { // æ’å…¥å‰ç½®æ•°æ® - NoticeDO dbNoticeDO = randomSysNoticeDO(); + NoticeDO dbNoticeDO = randomNoticeDO(); sysNoticeMapper.insert(dbNoticeDO); // å‡†å¤‡æ›´æ–°å‚æ•° - NoticeUpdateReqVO reqVO = randomSysNoticeUpdateReqVO(o -> o.setId(dbNoticeDO.getId())); + NoticeUpdateReqVO reqVO = randomNoticeUpdateReqVO(o -> o.setId(dbNoticeDO.getId())); // æ›´æ–° sysNoticeService.updateNotice(reqVO); @@ -111,7 +111,7 @@ class NoticeServiceImplTest extends BaseDbUnitTest { @Test public void testDeleteNotice_success() { // æ’å…¥å‰ç½®æ•°æ® - NoticeDO dbNotice = randomSysNoticeDO(); + NoticeDO dbNotice = randomNoticeDO(); sysNoticeMapper.insert(dbNotice); // 删除 @@ -124,7 +124,7 @@ class NoticeServiceImplTest extends BaseDbUnitTest { @Test public void checkNoticeExists_success() { // æ’å…¥å‰ç½®æ•°æ® - NoticeDO dbNotice = randomSysNoticeDO(); + NoticeDO dbNotice = randomNoticeDO(); sysNoticeMapper.insert(dbNotice); // æˆåŠŸè°ƒç”¨ @@ -137,7 +137,7 @@ class NoticeServiceImplTest extends BaseDbUnitTest { } @SafeVarargs - private static NoticeDO randomSysNoticeDO(Consumer... consumers) { + private static NoticeDO randomNoticeDO(Consumer... consumers) { NoticeDO notice = randomPojo(NoticeDO.class, consumers); notice.setType(randomEle(NoticeTypeEnum.values()).getType()); notice.setStatus(CommonStatusEnum.ENABLE.getStatus()); @@ -145,14 +145,14 @@ class NoticeServiceImplTest extends BaseDbUnitTest { } @SafeVarargs - private static NoticeUpdateReqVO randomSysNoticeUpdateReqVO(Consumer... consumers) { + private static NoticeUpdateReqVO randomNoticeUpdateReqVO(Consumer... consumers) { NoticeUpdateReqVO reqVO = randomPojo(NoticeUpdateReqVO.class, consumers); reqVO.setType(randomEle(NoticeTypeEnum.values()).getType()); reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); return reqVO; } - private static NoticeCreateReqVO randomSysNoticeCreateReqVO() { + private static NoticeCreateReqVO randomNoticeCreateReqVO() { NoticeCreateReqVO reqVO = randomPojo(NoticeCreateReqVO.class); reqVO.setType(randomEle(NoticeTypeEnum.values()).getType()); reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceTest.java index dc915e3079..dc6a99ed97 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceTest.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.service.permission; import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleMenuDO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.UserRoleDO; @@ -194,7 +194,7 @@ public class PermissionServiceTest extends BaseDbUnitTest { RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setDataScope(DataScopeEnum.DEPT_AND_CHILD.getScope())); when(roleService.getRolesFromCache(same(loginUser.getRoleIds()))).thenReturn(singletonList(roleDO)); // mock 方法(部门) - SysDeptDO deptDO = randomPojo(SysDeptDO.class); + DeptDO deptDO = randomPojo(DeptDO.class); when(deptService.getDeptsByParentIdFromCache(eq(loginUser.getDeptId()), eq(true))) .thenReturn(singletonList(deptDO)); diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceTest.java index d255cbf742..7e8b8445ed 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceTest.java @@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannel import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelUpdateReqVO; import cn.iocoder.yudao.module.system.dal.mysql.sms.SmsChannelMapper; import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsChannelDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsChannelDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; @@ -51,9 +51,9 @@ public class SmsChannelServiceTest extends BaseDbUnitTest { @Test public void testInitLocalCache_success() { // mock æ•°æ® - SysSmsChannelDO smsChannelDO01 = randomSmsChannelDO(); + SmsChannelDO smsChannelDO01 = randomSmsChannelDO(); smsChannelMapper.insert(smsChannelDO01); - SysSmsChannelDO smsChannelDO02 = randomSmsChannelDO(); + SmsChannelDO smsChannelDO02 = randomSmsChannelDO(); smsChannelMapper.insert(smsChannelDO02); // 调用 @@ -78,7 +78,7 @@ public class SmsChannelServiceTest extends BaseDbUnitTest { // 断言 assertNotNull(smsChannelId); // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - SysSmsChannelDO smsChannel = smsChannelMapper.selectById(smsChannelId); + SmsChannelDO smsChannel = smsChannelMapper.selectById(smsChannelId); assertPojoEquals(reqVO, smsChannel); // 校验调用 verify(smsProducer, times(1)).sendSmsChannelRefreshMessage(); @@ -87,7 +87,7 @@ public class SmsChannelServiceTest extends BaseDbUnitTest { @Test public void testUpdateSmsChannel_success() { // mock æ•°æ® - SysSmsChannelDO dbSmsChannel = randomSmsChannelDO(); + SmsChannelDO dbSmsChannel = randomSmsChannelDO(); smsChannelMapper.insert(dbSmsChannel);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° SmsChannelUpdateReqVO reqVO = randomPojo(SmsChannelUpdateReqVO.class, o -> { @@ -99,7 +99,7 @@ public class SmsChannelServiceTest extends BaseDbUnitTest { // 调用 smsChannelService.updateSmsChannel(reqVO); // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - SysSmsChannelDO smsChannel = smsChannelMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ + SmsChannelDO smsChannel = smsChannelMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ assertPojoEquals(reqVO, smsChannel); // 校验调用 verify(smsProducer, times(1)).sendSmsChannelRefreshMessage(); @@ -117,7 +117,7 @@ public class SmsChannelServiceTest extends BaseDbUnitTest { @Test public void testDeleteSmsChannel_success() { // mock æ•°æ® - SysSmsChannelDO dbSmsChannel = randomSmsChannelDO(); + SmsChannelDO dbSmsChannel = randomSmsChannelDO(); smsChannelMapper.insert(dbSmsChannel);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° Long id = dbSmsChannel.getId(); @@ -142,7 +142,7 @@ public class SmsChannelServiceTest extends BaseDbUnitTest { @Test public void testDeleteSmsChannel_hasChildren() { // mock æ•°æ® - SysSmsChannelDO dbSmsChannel = randomSmsChannelDO(); + SmsChannelDO dbSmsChannel = randomSmsChannelDO(); smsChannelMapper.insert(dbSmsChannel);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° Long id = dbSmsChannel.getId(); @@ -156,7 +156,7 @@ public class SmsChannelServiceTest extends BaseDbUnitTest { @Test public void testGetSmsChannelPage() { // mock æ•°æ® - SysSmsChannelDO dbSmsChannel = randomPojo(SysSmsChannelDO.class, o -> { // 等会查询到 + SmsChannelDO dbSmsChannel = randomPojo(SmsChannelDO.class, o -> { // 等会查询到 o.setSignature("èŠ‹é“æºç "); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); o.setCreateTime(buildTime(2020, 12, 12)); @@ -176,7 +176,7 @@ public class SmsChannelServiceTest extends BaseDbUnitTest { reqVO.setEndCreateTime(buildTime(2020, 12, 24)); // 调用 - PageResult pageResult = smsChannelService.getSmsChannelPage(reqVO); + PageResult pageResult = smsChannelService.getSmsChannelPage(reqVO); // 断言 assertEquals(1, pageResult.getTotal()); assertEquals(1, pageResult.getList().size()); @@ -186,11 +186,11 @@ public class SmsChannelServiceTest extends BaseDbUnitTest { // ========== éšæœºå¯¹è±¡ ========== @SafeVarargs - private static SysSmsChannelDO randomSmsChannelDO(Consumer... consumers) { - Consumer consumer = (o) -> { + private static SmsChannelDO randomSmsChannelDO(Consumer... consumers) { + Consumer consumer = (o) -> { o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 }; - return randomPojo(SysSmsChannelDO.class, ArrayUtils.append(consumer, consumers)); + return randomPojo(SmsChannelDO.class, ArrayUtils.append(consumer, consumers)); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceTest.java index 7b0b0918f5..de6a6bd0ca 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceTest.java @@ -4,12 +4,12 @@ import cn.hutool.core.map.MapUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogPageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsLogDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO; import cn.iocoder.yudao.module.system.dal.mysql.sms.SmsLogMapper; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsLogDO; -import cn.iocoder.yudao.module.system.enums.sms.SysSmsReceiveStatusEnum; -import cn.iocoder.yudao.module.system.enums.sms.SysSmsSendStatusEnum; -import cn.iocoder.yudao.module.system.enums.sms.SysSmsTemplateTypeEnum; +import cn.iocoder.yudao.module.system.enums.sms.SmsReceiveStatusEnum; +import cn.iocoder.yudao.module.system.enums.sms.SmsSendStatusEnum; +import cn.iocoder.yudao.module.system.enums.sms.SmsTemplateTypeEnum; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; @@ -44,13 +44,13 @@ public class SmsLogServiceTest extends BaseDbUnitTest { @Test public void testGetSmsLogPage() { // mock æ•°æ® - SysSmsLogDO dbSmsLog = randomSmsLogDO(o -> { // 等会查询到 + SmsLogDO dbSmsLog = randomSmsLogDO(o -> { // 等会查询到 o.setChannelId(1L); o.setTemplateId(10L); o.setMobile("15601691300"); - o.setSendStatus(SysSmsSendStatusEnum.INIT.getStatus()); + o.setSendStatus(SmsSendStatusEnum.INIT.getStatus()); o.setSendTime(buildTime(2020, 11, 11)); - o.setReceiveStatus(SysSmsReceiveStatusEnum.INIT.getStatus()); + o.setReceiveStatus(SmsReceiveStatusEnum.INIT.getStatus()); o.setReceiveTime(buildTime(2021, 11, 11)); }); smsLogMapper.insert(dbSmsLog); @@ -61,11 +61,11 @@ public class SmsLogServiceTest extends BaseDbUnitTest { // 测试 mobile ä¸åŒ¹é… smsLogMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsLog, o -> o.setMobile("18818260999"))); // 测试 sendStatus ä¸åŒ¹é… - smsLogMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsLog, o -> o.setSendStatus(SysSmsSendStatusEnum.IGNORE.getStatus()))); + smsLogMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsLog, o -> o.setSendStatus(SmsSendStatusEnum.IGNORE.getStatus()))); // 测试 sendTime ä¸åŒ¹é… smsLogMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsLog, o -> o.setSendTime(buildTime(2020, 12, 12)))); // 测试 receiveStatus ä¸åŒ¹é… - smsLogMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsLog, o -> o.setReceiveStatus(SysSmsReceiveStatusEnum.SUCCESS.getStatus()))); + smsLogMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsLog, o -> o.setReceiveStatus(SmsReceiveStatusEnum.SUCCESS.getStatus()))); // 测试 receiveTime ä¸åŒ¹é… smsLogMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsLog, o -> o.setReceiveTime(buildTime(2021, 12, 12)))); // 准备傿•° @@ -73,15 +73,15 @@ public class SmsLogServiceTest extends BaseDbUnitTest { reqVO.setChannelId(1L); reqVO.setTemplateId(10L); reqVO.setMobile("156"); - reqVO.setSendStatus(SysSmsSendStatusEnum.INIT.getStatus()); + reqVO.setSendStatus(SmsSendStatusEnum.INIT.getStatus()); reqVO.setBeginSendTime(buildTime(2020, 11, 1)); reqVO.setEndSendTime(buildTime(2020, 11, 30)); - reqVO.setReceiveStatus(SysSmsReceiveStatusEnum.INIT.getStatus()); + reqVO.setReceiveStatus(SmsReceiveStatusEnum.INIT.getStatus()); reqVO.setBeginReceiveTime(buildTime(2021, 11, 1)); reqVO.setEndReceiveTime(buildTime(2021, 11, 30)); // 调用 - PageResult pageResult = smsLogService.getSmsLogPage(reqVO); + PageResult pageResult = smsLogService.getSmsLogPage(reqVO); // 断言 assertEquals(1, pageResult.getTotal()); assertEquals(1, pageResult.getList().size()); @@ -91,13 +91,13 @@ public class SmsLogServiceTest extends BaseDbUnitTest { @Test public void testGetSmsLogList() { // mock æ•°æ® - SysSmsLogDO dbSmsLog = randomSmsLogDO(o -> { // 等会查询到 + SmsLogDO dbSmsLog = randomSmsLogDO(o -> { // 等会查询到 o.setChannelId(1L); o.setTemplateId(10L); o.setMobile("15601691300"); - o.setSendStatus(SysSmsSendStatusEnum.INIT.getStatus()); + o.setSendStatus(SmsSendStatusEnum.INIT.getStatus()); o.setSendTime(buildTime(2020, 11, 11)); - o.setReceiveStatus(SysSmsReceiveStatusEnum.INIT.getStatus()); + o.setReceiveStatus(SmsReceiveStatusEnum.INIT.getStatus()); o.setReceiveTime(buildTime(2021, 11, 11)); }); smsLogMapper.insert(dbSmsLog); @@ -108,11 +108,11 @@ public class SmsLogServiceTest extends BaseDbUnitTest { // 测试 mobile ä¸åŒ¹é… smsLogMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsLog, o -> o.setMobile("18818260999"))); // 测试 sendStatus ä¸åŒ¹é… - smsLogMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsLog, o -> o.setSendStatus(SysSmsSendStatusEnum.IGNORE.getStatus()))); + smsLogMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsLog, o -> o.setSendStatus(SmsSendStatusEnum.IGNORE.getStatus()))); // 测试 sendTime ä¸åŒ¹é… smsLogMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsLog, o -> o.setSendTime(buildTime(2020, 12, 12)))); // 测试 receiveStatus ä¸åŒ¹é… - smsLogMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsLog, o -> o.setReceiveStatus(SysSmsReceiveStatusEnum.SUCCESS.getStatus()))); + smsLogMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsLog, o -> o.setReceiveStatus(SmsReceiveStatusEnum.SUCCESS.getStatus()))); // 测试 receiveTime ä¸åŒ¹é… smsLogMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsLog, o -> o.setReceiveTime(buildTime(2021, 12, 12)))); // 准备傿•° @@ -120,15 +120,15 @@ public class SmsLogServiceTest extends BaseDbUnitTest { reqVO.setChannelId(1L); reqVO.setTemplateId(10L); reqVO.setMobile("156"); - reqVO.setSendStatus(SysSmsSendStatusEnum.INIT.getStatus()); + reqVO.setSendStatus(SmsSendStatusEnum.INIT.getStatus()); reqVO.setBeginSendTime(buildTime(2020, 11, 1)); reqVO.setEndSendTime(buildTime(2020, 11, 30)); - reqVO.setReceiveStatus(SysSmsReceiveStatusEnum.INIT.getStatus()); + reqVO.setReceiveStatus(SmsReceiveStatusEnum.INIT.getStatus()); reqVO.setBeginReceiveTime(buildTime(2021, 11, 1)); reqVO.setEndReceiveTime(buildTime(2021, 11, 30)); // 调用 - List list = smsLogService.getSmsLogList(reqVO); + List list = smsLogService.getSmsLogList(reqVO); // 断言 assertEquals(1, list.size()); assertPojoEquals(dbSmsLog, list.get(0)); @@ -141,8 +141,8 @@ public class SmsLogServiceTest extends BaseDbUnitTest { Long userId = randomLongId(); Integer userType = randomEle(UserTypeEnum.values()).getValue(); Boolean isSend = randomBoolean(); - SysSmsTemplateDO templateDO = randomPojo(SysSmsTemplateDO.class, - o -> o.setType(randomEle(SysSmsTemplateTypeEnum.values()).getType())); + SmsTemplateDO templateDO = randomPojo(SmsTemplateDO.class, + o -> o.setType(randomEle(SmsTemplateTypeEnum.values()).getType())); String templateContent = randomString(); Map templateParams = randomTemplateParams(); // mock 方法 @@ -151,8 +151,8 @@ public class SmsLogServiceTest extends BaseDbUnitTest { Long logId = smsLogService.createSmsLog(mobile, userId, userType, isSend, templateDO, templateContent, templateParams); // 断言 - SysSmsLogDO logDO = smsLogMapper.selectById(logId); - assertEquals(isSend ? SysSmsSendStatusEnum.INIT.getStatus() : SysSmsSendStatusEnum.IGNORE.getStatus(), + SmsLogDO logDO = smsLogMapper.selectById(logId); + assertEquals(isSend ? SmsSendStatusEnum.INIT.getStatus() : SmsSendStatusEnum.IGNORE.getStatus(), logDO.getSendStatus()); assertEquals(mobile, logDO.getMobile()); assertEquals(userType, logDO.getUserType()); @@ -164,14 +164,14 @@ public class SmsLogServiceTest extends BaseDbUnitTest { assertEquals(templateDO.getChannelCode(), logDO.getChannelCode()); assertEquals(templateContent, logDO.getTemplateContent()); assertEquals(templateParams, logDO.getTemplateParams()); - assertEquals(SysSmsReceiveStatusEnum.INIT.getStatus(), logDO.getReceiveStatus()); + assertEquals(SmsReceiveStatusEnum.INIT.getStatus(), logDO.getReceiveStatus()); } @Test public void testUpdateSmsSendResult() { // mock æ•°æ® - SysSmsLogDO dbSmsLog = randomSmsLogDO( - o -> o.setSendStatus(SysSmsSendStatusEnum.IGNORE.getStatus())); + SmsLogDO dbSmsLog = randomSmsLogDO( + o -> o.setSendStatus(SmsSendStatusEnum.IGNORE.getStatus())); smsLogMapper.insert(dbSmsLog); // 准备傿•° Long id = dbSmsLog.getId(); @@ -187,8 +187,8 @@ public class SmsLogServiceTest extends BaseDbUnitTest { apiSendCode, apiSendMsg, apiRequestId, apiSerialNo); // 断言 dbSmsLog = smsLogMapper.selectById(id); - assertEquals(CommonResult.isSuccess(sendCode) ? SysSmsSendStatusEnum.SUCCESS.getStatus() - : SysSmsSendStatusEnum.FAILURE.getStatus(), dbSmsLog.getSendStatus()); + assertEquals(CommonResult.isSuccess(sendCode) ? SmsSendStatusEnum.SUCCESS.getStatus() + : SmsSendStatusEnum.FAILURE.getStatus(), dbSmsLog.getSendStatus()); assertNotNull(dbSmsLog.getSendTime()); assertEquals(sendMsg, dbSmsLog.getSendMsg()); assertEquals(apiSendCode, dbSmsLog.getApiSendCode()); @@ -200,8 +200,8 @@ public class SmsLogServiceTest extends BaseDbUnitTest { @Test public void testUpdateSmsReceiveResult() { // mock æ•°æ® - SysSmsLogDO dbSmsLog = randomSmsLogDO( - o -> o.setReceiveStatus(SysSmsReceiveStatusEnum.INIT.getStatus())); + SmsLogDO dbSmsLog = randomSmsLogDO( + o -> o.setReceiveStatus(SmsReceiveStatusEnum.INIT.getStatus())); smsLogMapper.insert(dbSmsLog); // 准备傿•° Long id = dbSmsLog.getId(); @@ -214,8 +214,8 @@ public class SmsLogServiceTest extends BaseDbUnitTest { smsLogService.updateSmsReceiveResult(id, success, receiveTime, apiReceiveCode, apiReceiveMsg); // 断言 dbSmsLog = smsLogMapper.selectById(id); - assertEquals(success ? SysSmsReceiveStatusEnum.SUCCESS.getStatus() - : SysSmsReceiveStatusEnum.FAILURE.getStatus(), dbSmsLog.getReceiveStatus()); + assertEquals(success ? SmsReceiveStatusEnum.SUCCESS.getStatus() + : SmsReceiveStatusEnum.FAILURE.getStatus(), dbSmsLog.getReceiveStatus()); assertEquals(receiveTime, dbSmsLog.getReceiveTime()); assertEquals(apiReceiveCode, dbSmsLog.getApiReceiveCode()); assertEquals(apiReceiveMsg, dbSmsLog.getApiReceiveMsg()); @@ -224,15 +224,15 @@ public class SmsLogServiceTest extends BaseDbUnitTest { // ========== éšæœºå¯¹è±¡ ========== @SafeVarargs - private static SysSmsLogDO randomSmsLogDO(Consumer... consumers) { - Consumer consumer = (o) -> { + private static SmsLogDO randomSmsLogDO(Consumer... consumers) { + Consumer consumer = (o) -> { o.setTemplateParams(randomTemplateParams()); - o.setTemplateType(randomEle(SysSmsTemplateTypeEnum.values()).getType()); // ä¿è¯ templateType 的范围 + o.setTemplateType(randomEle(SmsTemplateTypeEnum.values()).getType()); // ä¿è¯ templateType 的范围 o.setUserType(randomEle(UserTypeEnum.values()).getValue()); // ä¿è¯ userType 的范围 - o.setSendStatus(randomEle(SysSmsSendStatusEnum.values()).getStatus()); // ä¿è¯ sendStatus 的范围 - o.setReceiveStatus(randomEle(SysSmsReceiveStatusEnum.values()).getStatus()); // ä¿è¯ receiveStatus 的范围 + o.setSendStatus(randomEle(SmsSendStatusEnum.values()).getStatus()); // ä¿è¯ sendStatus 的范围 + o.setReceiveStatus(randomEle(SmsReceiveStatusEnum.values()).getStatus()); // ä¿è¯ receiveStatus 的范围 }; - return randomPojo(SysSmsLogDO.class, ArrayUtils.append(consumer, consumers)); + return randomPojo(SmsLogDO.class, ArrayUtils.append(consumer, consumers)); } diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsSendServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceTest.java similarity index 95% rename from yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsSendServiceTest.java rename to yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceTest.java index 0bd82475ff..7f9309499c 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SysSmsSendServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceTest.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.service.sms; import cn.hutool.core.map.MapUtil; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO; import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage; import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer; import cn.iocoder.yudao.framework.common.core.KeyValue; @@ -30,7 +30,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; -public class SysSmsSendServiceTest extends BaseMockitoUnitTest { +public class SmsSendServiceTest extends BaseMockitoUnitTest { @InjectMocks private SmsSendServiceImpl smsService; @@ -57,7 +57,7 @@ public class SysSmsSendServiceTest extends BaseMockitoUnitTest { Map templateParams = MapUtil.builder().put("code", "1234") .put("op", "login").build(); // mock SmsTemplateService 的方法 - SysSmsTemplateDO template = randomPojo(SysSmsTemplateDO.class, o -> { + SmsTemplateDO template = randomPojo(SmsTemplateDO.class, o -> { o.setStatus(CommonStatusEnum.ENABLE.getStatus()); o.setContent("验è¯ç ä¸º{code}, æ“作为{op}"); o.setParams(Lists.newArrayList("code", "op")); @@ -94,7 +94,7 @@ public class SysSmsSendServiceTest extends BaseMockitoUnitTest { Map templateParams = MapUtil.builder().put("code", "1234") .put("op", "login").build(); // mock SmsTemplateService 的方法 - SysSmsTemplateDO template = randomPojo(SysSmsTemplateDO.class, o -> { + SmsTemplateDO template = randomPojo(SmsTemplateDO.class, o -> { o.setStatus(CommonStatusEnum.DISABLE.getStatus()); o.setContent("验è¯ç ä¸º{code}, æ“作为{op}"); o.setParams(Lists.newArrayList("code", "op")); @@ -131,7 +131,7 @@ public class SysSmsSendServiceTest extends BaseMockitoUnitTest { @Test public void testBuildTemplateParams_paramMiss() { // 准备傿•° - SysSmsTemplateDO template = randomPojo(SysSmsTemplateDO.class, + SmsTemplateDO template = randomPojo(SmsTemplateDO.class, o -> o.setParams(Lists.newArrayList("code"))); Map templateParams = new HashMap<>(); // mock 方法 diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceTest.java index 3025b8d642..034310fa26 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceTest.java @@ -4,11 +4,11 @@ import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTempla import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplatePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateUpdateReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsChannelDO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO; import cn.iocoder.yudao.module.system.dal.mysql.sms.SmsTemplateMapper; import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsChannelDO; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; -import cn.iocoder.yudao.module.system.enums.sms.SysSmsTemplateTypeEnum; +import cn.iocoder.yudao.module.system.enums.sms.SmsTemplateTypeEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -64,15 +64,15 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest { @SuppressWarnings("unchecked") void testInitLocalCache() { // mock æ•°æ® - SysSmsTemplateDO smsTemplate01 = randomSmsTemplateDO(); + SmsTemplateDO smsTemplate01 = randomSmsTemplateDO(); smsTemplateMapper.insert(smsTemplate01); - SysSmsTemplateDO smsTemplate02 = randomSmsTemplateDO(); + SmsTemplateDO smsTemplate02 = randomSmsTemplateDO(); smsTemplateMapper.insert(smsTemplate02); // 调用 smsTemplateService.initLocalCache(); // 断言 deptCache 缓存 - Map smsTemplateCache = (Map) getFieldValue(smsTemplateService, "smsTemplateCache"); + Map smsTemplateCache = (Map) getFieldValue(smsTemplateService, "smsTemplateCache"); assertEquals(2, smsTemplateCache.size()); assertPojoEquals(smsTemplate01, smsTemplateCache.get(smsTemplate01.getCode())); assertPojoEquals(smsTemplate02, smsTemplateCache.get(smsTemplate02.getCode())); @@ -100,10 +100,10 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest { SmsTemplateCreateReqVO reqVO = randomPojo(SmsTemplateCreateReqVO.class, o -> { o.setContent("正在进行登录æ“作{operation},您的验è¯ç æ˜¯{code}"); o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 - o.setType(randomEle(SysSmsTemplateTypeEnum.values()).getType()); // ä¿è¯ type çš„ 范围 + o.setType(randomEle(SmsTemplateTypeEnum.values()).getType()); // ä¿è¯ type çš„ 范围 }); // mock Channel 的方法 - SysSmsChannelDO channelDO = randomPojo(SysSmsChannelDO.class, o -> { + SmsChannelDO channelDO = randomPojo(SmsChannelDO.class, o -> { o.setId(reqVO.getChannelId()); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); // ä¿è¯ status å¼€å¯ï¼Œåˆ›å»ºå¿…é¡»å¤„äºŽè¿™ä¸ªçŠ¶æ€ }); @@ -118,7 +118,7 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest { // 断言 assertNotNull(smsTemplateId); // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - SysSmsTemplateDO smsTemplate = smsTemplateMapper.selectById(smsTemplateId); + SmsTemplateDO smsTemplate = smsTemplateMapper.selectById(smsTemplateId); assertPojoEquals(reqVO, smsTemplate); assertEquals(Lists.newArrayList("operation", "code"), smsTemplate.getParams()); assertEquals(channelDO.getCode(), smsTemplate.getChannelCode()); @@ -130,17 +130,17 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest { @SuppressWarnings("unchecked") public void testUpdateSmsTemplate_success() { // mock æ•°æ® - SysSmsTemplateDO dbSmsTemplate = randomSmsTemplateDO(); + SmsTemplateDO dbSmsTemplate = randomSmsTemplateDO(); smsTemplateMapper.insert(dbSmsTemplate);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° SmsTemplateUpdateReqVO reqVO = randomPojo(SmsTemplateUpdateReqVO.class, o -> { o.setId(dbSmsTemplate.getId()); // 设置更新的 ID o.setContent("正在进行登录æ“作{operation},您的验è¯ç æ˜¯{code}"); o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 - o.setType(randomEle(SysSmsTemplateTypeEnum.values()).getType()); // ä¿è¯ type çš„ 范围 + o.setType(randomEle(SmsTemplateTypeEnum.values()).getType()); // ä¿è¯ type çš„ 范围 }); // mock 方法 - SysSmsChannelDO channelDO = randomPojo(SysSmsChannelDO.class, o -> { + SmsChannelDO channelDO = randomPojo(SmsChannelDO.class, o -> { o.setId(reqVO.getChannelId()); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); // ä¿è¯ status å¼€å¯ï¼Œåˆ›å»ºå¿…é¡»å¤„äºŽè¿™ä¸ªçŠ¶æ€ }); @@ -153,7 +153,7 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest { // 调用 smsTemplateService.updateSmsTemplate(reqVO); // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - SysSmsTemplateDO smsTemplate = smsTemplateMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ + SmsTemplateDO smsTemplate = smsTemplateMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ assertPojoEquals(reqVO, smsTemplate); assertEquals(Lists.newArrayList("operation", "code"), smsTemplate.getParams()); assertEquals(channelDO.getCode(), smsTemplate.getChannelCode()); @@ -173,7 +173,7 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest { @Test public void testDeleteSmsTemplate_success() { // mock æ•°æ® - SysSmsTemplateDO dbSmsTemplate = randomSmsTemplateDO(); + SmsTemplateDO dbSmsTemplate = randomSmsTemplateDO(); smsTemplateMapper.insert(dbSmsTemplate);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° Long id = dbSmsTemplate.getId(); @@ -198,8 +198,8 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest { @Test public void testGetSmsTemplatePage() { // mock æ•°æ® - SysSmsTemplateDO dbSmsTemplate = randomPojo(SysSmsTemplateDO.class, o -> { // 等会查询到 - o.setType(SysSmsTemplateTypeEnum.PROMOTION.getType()); + SmsTemplateDO dbSmsTemplate = randomPojo(SmsTemplateDO.class, o -> { // 等会查询到 + o.setType(SmsTemplateTypeEnum.PROMOTION.getType()); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); o.setCode("yudaoyuanma"); o.setContent("èŠ‹é“æºç "); @@ -209,7 +209,7 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest { }); smsTemplateMapper.insert(dbSmsTemplate); // 测试 type ä¸åŒ¹é… - smsTemplateMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsTemplate, o -> o.setType(SysSmsTemplateTypeEnum.VERIFICATION_CODE.getType()))); + smsTemplateMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsTemplate, o -> o.setType(SmsTemplateTypeEnum.VERIFICATION_CODE.getType()))); // 测试 status ä¸åŒ¹é… smsTemplateMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsTemplate, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); // 测试 code ä¸åŒ¹é… @@ -224,7 +224,7 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest { smsTemplateMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsTemplate, o -> o.setCreateTime(buildTime(2021, 12, 12)))); // 准备傿•° SmsTemplatePageReqVO reqVO = new SmsTemplatePageReqVO(); - reqVO.setType(SysSmsTemplateTypeEnum.PROMOTION.getType()); + reqVO.setType(SmsTemplateTypeEnum.PROMOTION.getType()); reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); reqVO.setCode("yudao"); reqVO.setContent("芋é“"); @@ -234,7 +234,7 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest { reqVO.setEndCreateTime(buildTime(2021, 12, 1)); // 调用 - PageResult pageResult = smsTemplateService.getSmsTemplatePage(reqVO); + PageResult pageResult = smsTemplateService.getSmsTemplatePage(reqVO); // 断言 assertEquals(1, pageResult.getTotal()); assertEquals(1, pageResult.getList().size()); @@ -244,8 +244,8 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest { @Test public void testGetSmsTemplateList() { // mock æ•°æ® - SysSmsTemplateDO dbSmsTemplate = randomPojo(SysSmsTemplateDO.class, o -> { // 等会查询到 - o.setType(SysSmsTemplateTypeEnum.PROMOTION.getType()); + SmsTemplateDO dbSmsTemplate = randomPojo(SmsTemplateDO.class, o -> { // 等会查询到 + o.setType(SmsTemplateTypeEnum.PROMOTION.getType()); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); o.setCode("yudaoyuanma"); o.setContent("èŠ‹é“æºç "); @@ -255,7 +255,7 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest { }); smsTemplateMapper.insert(dbSmsTemplate); // 测试 type ä¸åŒ¹é… - smsTemplateMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsTemplate, o -> o.setType(SysSmsTemplateTypeEnum.VERIFICATION_CODE.getType()))); + smsTemplateMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsTemplate, o -> o.setType(SmsTemplateTypeEnum.VERIFICATION_CODE.getType()))); // 测试 status ä¸åŒ¹é… smsTemplateMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsTemplate, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); // 测试 code ä¸åŒ¹é… @@ -270,7 +270,7 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest { smsTemplateMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsTemplate, o -> o.setCreateTime(buildTime(2021, 12, 12)))); // 准备傿•° SmsTemplateExportReqVO reqVO = new SmsTemplateExportReqVO(); - reqVO.setType(SysSmsTemplateTypeEnum.PROMOTION.getType()); + reqVO.setType(SmsTemplateTypeEnum.PROMOTION.getType()); reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); reqVO.setCode("yudao"); reqVO.setContent("芋é“"); @@ -280,7 +280,7 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest { reqVO.setEndCreateTime(buildTime(2021, 12, 1)); // 调用 - List list = smsTemplateService.getSmsTemplateList(reqVO); + List list = smsTemplateService.getSmsTemplateList(reqVO); // 断言 assertEquals(1, list.size()); assertPojoEquals(dbSmsTemplate, list.get(0)); @@ -291,14 +291,14 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest { // 准备傿•° Long channelId = randomLongId(); // mock 方法 - SysSmsChannelDO channelDO = randomPojo(SysSmsChannelDO.class, o -> { + SmsChannelDO channelDO = randomPojo(SmsChannelDO.class, o -> { o.setId(channelId); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); // ä¿è¯ status å¼€å¯ï¼Œåˆ›å»ºå¿…é¡»å¤„äºŽè¿™ä¸ªçŠ¶æ€ }); when(smsChannelService.getSmsChannel(eq(channelId))).thenReturn(channelDO); // 调用 - SysSmsChannelDO returnChannelDO = smsTemplateService.checkSmsChannel(channelId); + SmsChannelDO returnChannelDO = smsTemplateService.checkSmsChannel(channelId); // 断言 assertPojoEquals(returnChannelDO, channelDO); } @@ -318,7 +318,7 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest { // 准备傿•° Long channelId = randomLongId(); // mock 方法 - SysSmsChannelDO channelDO = randomPojo(SysSmsChannelDO.class, o -> { + SmsChannelDO channelDO = randomPojo(SmsChannelDO.class, o -> { o.setId(channelId); o.setStatus(CommonStatusEnum.DISABLE.getStatus()); // ä¿è¯ status ç¦ç”¨ï¼Œè§¦å‘失败 }); @@ -363,12 +363,12 @@ public class SmsTemplateServiceTest extends BaseDbUnitTest { // ========== éšæœºå¯¹è±¡ ========== @SafeVarargs - private static SysSmsTemplateDO randomSmsTemplateDO(Consumer... consumers) { - Consumer consumer = (o) -> { + private static SmsTemplateDO randomSmsTemplateDO(Consumer... consumers) { + Consumer consumer = (o) -> { o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 - o.setType(randomEle(SysSmsTemplateTypeEnum.values()).getType()); // ä¿è¯ type çš„ 范围 + o.setType(randomEle(SmsTemplateTypeEnum.values()).getType()); // ä¿è¯ type çš„ 范围 }; - return randomPojo(SysSmsTemplateDO.class, ArrayUtils.append(consumer, consumers)); + return randomPojo(SmsTemplateDO.class, ArrayUtils.append(consumer, consumers)); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceTest.java index a67da17f2f..8fb527baa8 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceTest.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.service.social; -import cn.iocoder.yudao.module.system.dal.dataobject.social.SysSocialUserDO; -import cn.iocoder.yudao.module.system.dal.mysql.social.SysSocialUserMapper; +import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO; +import cn.iocoder.yudao.module.system.dal.mysql.social.SocialUserMapper; import cn.iocoder.yudao.module.system.dal.redis.social.SocialAuthUserRedisDAO; import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; @@ -29,13 +29,13 @@ public class SocialUserServiceTest extends BaseDbAndRedisUnitTest { private SocialUserServiceImpl socialService; @Resource - private SysSocialUserMapper socialUserMapper; + private SocialUserMapper socialUserMapper; @MockBean private AuthRequestFactory authRequestFactory; /** - * 情况一,创建 SysSocialUserDO 的情况 + * 情况一,创建 SocialUserDO 的情况 */ @Test public void testBindSocialUser_create() { @@ -49,18 +49,18 @@ public class SocialUserServiceTest extends BaseDbAndRedisUnitTest { // 调用 socialService.bindSocialUser(userId, UserTypeEnum.ADMIN.getValue(), type, authUser); // 断言 - List socialUsers = socialUserMapper.selectList("user_id", userId); + List socialUsers = socialUserMapper.selectList("user_id", userId); assertEquals(1, socialUsers.size()); assertBindSocialUser(socialUsers.get(0), authUser, userId, type); } /** - * 情况二,更新 SysSocialUserDO 的情况 + * 情况二,更新 SocialUserDO 的情况 */ @Test public void testBindSocialUser_update() { // mock æ•°æ® - SysSocialUserDO dbSocialUser = randomPojo(SysSocialUserDO.class, socialUserDO -> { + SocialUserDO dbSocialUser = randomPojo(SocialUserDO.class, socialUserDO -> { socialUserDO.setUserType(UserTypeEnum.ADMIN.getValue()); socialUserDO.setType(randomEle(SocialTypeEnum.values()).getType()); }); @@ -74,7 +74,7 @@ public class SocialUserServiceTest extends BaseDbAndRedisUnitTest { // 调用 socialService.bindSocialUser(userId, UserTypeEnum.ADMIN.getValue(), type, authUser); // 断言 - List socialUsers = socialUserMapper.selectList("user_id", userId); + List socialUsers = socialUserMapper.selectList("user_id", userId); assertEquals(1, socialUsers.size()); assertBindSocialUser(socialUsers.get(0), authUser, userId, type); } @@ -85,7 +85,7 @@ public class SocialUserServiceTest extends BaseDbAndRedisUnitTest { @Test public void testBindSocialUser_userId() { // mock æ•°æ® - SysSocialUserDO dbSocialUser = randomPojo(SysSocialUserDO.class, socialUserDO -> { + SocialUserDO dbSocialUser = randomPojo(SocialUserDO.class, socialUserDO -> { socialUserDO.setUserType(UserTypeEnum.ADMIN.getValue()); socialUserDO.setType(randomEle(SocialTypeEnum.values()).getType()); }); @@ -99,12 +99,12 @@ public class SocialUserServiceTest extends BaseDbAndRedisUnitTest { // 调用 socialService.bindSocialUser(userId, UserTypeEnum.ADMIN.getValue(), type, authUser); // 断言 - List socialUsers = socialUserMapper.selectList("user_id", userId); + List socialUsers = socialUserMapper.selectList("user_id", userId); assertEquals(1, socialUsers.size()); } - private void assertBindSocialUser(SysSocialUserDO socialUser, AuthUser authUser, Long userId, - Integer type) { + private void assertBindSocialUser(SocialUserDO socialUser, AuthUser authUser, Long userId, + Integer type) { assertEquals(authUser.getToken().getAccessToken(), socialUser.getToken()); assertEquals(toJsonString(authUser.getToken()), socialUser.getRawTokenInfo()); assertEquals(authUser.getNickname(), socialUser.getNickname()); @@ -123,7 +123,7 @@ public class SocialUserServiceTest extends BaseDbAndRedisUnitTest { @Test public void testUnbindOldSocialUser_no() { // mock æ•°æ® - SysSocialUserDO oldSocialUser = randomPojo(SysSocialUserDO.class, socialUserDO -> { + SocialUserDO oldSocialUser = randomPojo(SocialUserDO.class, socialUserDO -> { socialUserDO.setUserType(UserTypeEnum.ADMIN.getValue()); socialUserDO.setType(randomEle(SocialTypeEnum.values()).getType()); }); @@ -146,7 +146,7 @@ public class SocialUserServiceTest extends BaseDbAndRedisUnitTest { @Test public void testUnbindOldSocialUser_yes() { // mock æ•°æ® - SysSocialUserDO oldSocialUser = randomPojo(SysSocialUserDO.class, socialUserDO -> { + SocialUserDO oldSocialUser = randomPojo(SocialUserDO.class, socialUserDO -> { socialUserDO.setUserType(UserTypeEnum.ADMIN.getValue()); socialUserDO.setType(randomEle(SocialTypeEnum.values()).getType()); }); diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceTest.java index 49c96cc5ae..ade6613a0d 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceTest.java @@ -4,8 +4,8 @@ import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantCreateReq import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.TenantUpdateReqVO; -import cn.iocoder.yudao.module.system.dal.mysql.tenant.SysTenantMapper; -import cn.iocoder.yudao.module.system.dal.dataobject.tenant.SysTenantDO; +import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO; +import cn.iocoder.yudao.module.system.dal.mysql.tenant.TenantMapper; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; @@ -30,7 +30,7 @@ public class TenantServiceTest extends BaseDbUnitTest { private TenantServiceImpl tenantService; @Resource - private SysTenantMapper tenantMapper; + private TenantMapper tenantMapper; @Test public void testCreateTenant_success() { @@ -42,14 +42,14 @@ public class TenantServiceTest extends BaseDbUnitTest { // 断言 assertNotNull(tenantId); // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - SysTenantDO tenant = tenantMapper.selectById(tenantId); + TenantDO tenant = tenantMapper.selectById(tenantId); assertPojoEquals(reqVO, tenant); } @Test public void testUpdateTenant_success() { // mock æ•°æ® - SysTenantDO dbTenant = randomPojo(SysTenantDO.class, o -> o.setStatus(randomCommonStatus())); + TenantDO dbTenant = randomPojo(TenantDO.class, o -> o.setStatus(randomCommonStatus())); tenantMapper.insert(dbTenant);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° TenantUpdateReqVO reqVO = randomPojo(TenantUpdateReqVO.class, o -> { @@ -60,7 +60,7 @@ public class TenantServiceTest extends BaseDbUnitTest { // 调用 tenantService.updateTenant(reqVO); // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - SysTenantDO tenant = tenantMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ + TenantDO tenant = tenantMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ assertPojoEquals(reqVO, tenant); } @@ -76,7 +76,7 @@ public class TenantServiceTest extends BaseDbUnitTest { @Test public void testDeleteTenant_success() { // mock æ•°æ® - SysTenantDO dbTenant = randomPojo(SysTenantDO.class, + TenantDO dbTenant = randomPojo(TenantDO.class, o -> o.setStatus(randomCommonStatus())); tenantMapper.insert(dbTenant);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° @@ -100,7 +100,7 @@ public class TenantServiceTest extends BaseDbUnitTest { @Test public void testGetTenantPage() { // mock æ•°æ® - SysTenantDO dbTenant = randomPojo(SysTenantDO.class, o -> { // 等会查询到 + TenantDO dbTenant = randomPojo(TenantDO.class, o -> { // 等会查询到 o.setName("èŠ‹é“æºç "); o.setContactName("芋艿"); o.setContactMobile("15601691300"); @@ -128,7 +128,7 @@ public class TenantServiceTest extends BaseDbUnitTest { reqVO.setEndCreateTime(buildTime(2020, 12, 24)); // 调用 - PageResult pageResult = tenantService.getTenantPage(reqVO); + PageResult pageResult = tenantService.getTenantPage(reqVO); // 断言 assertEquals(1, pageResult.getTotal()); assertEquals(1, pageResult.getList().size()); @@ -138,7 +138,7 @@ public class TenantServiceTest extends BaseDbUnitTest { @Test public void testGetTenantList() { // mock æ•°æ® - SysTenantDO dbTenant = randomPojo(SysTenantDO.class, o -> { // 等会查询到 + TenantDO dbTenant = randomPojo(TenantDO.class, o -> { // 等会查询到 o.setName("èŠ‹é“æºç "); o.setContactName("芋艿"); o.setContactMobile("15601691300"); @@ -166,7 +166,7 @@ public class TenantServiceTest extends BaseDbUnitTest { reqVO.setEndCreateTime(buildTime(2020, 12, 24)); // 调用 - List list = tenantService.getTenantList(reqVO); + List list = tenantService.getTenantList(reqVO); // 断言 assertEquals(1, list.size()); assertPojoEquals(dbTenant, list.get(0)); diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/user/UserServiceImplTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/user/UserServiceImplTest.java index c96f9c44c8..ffff7e2bdd 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/user/UserServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/user/UserServiceImplTest.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.service.user; import cn.hutool.core.util.RandomUtil; import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; @@ -10,11 +11,11 @@ import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper; -import cn.iocoder.yudao.module.system.enums.common.SysSexEnum; +import cn.iocoder.yudao.module.system.enums.common.SexEnum; import cn.iocoder.yudao.module.system.service.dept.DeptService; import cn.iocoder.yudao.module.system.service.dept.PostService; import cn.iocoder.yudao.module.system.service.permission.PermissionService; @@ -68,18 +69,18 @@ public class UserServiceImplTest extends BaseDbUnitTest { public void testCreatUser_success() { // 准备傿•° UserCreateReqVO reqVO = randomPojo(UserCreateReqVO.class, o -> { - o.setSex(RandomUtil.randomEle(SysSexEnum.values()).getSex()); + o.setSex(RandomUtil.randomEle(SexEnum.values()).getSex()); o.setMobile(randomString()); }); // mock deptService 的方法 - SysDeptDO dept = randomPojo(SysDeptDO.class, o -> { + DeptDO dept = randomPojo(DeptDO.class, o -> { o.setId(reqVO.getDeptId()); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); }); when(deptService.getDept(eq(dept.getId()))).thenReturn(dept); // mock postService 的方法 - List posts = CollectionUtils.convertList(reqVO.getPostIds(), postId -> - randomPojo(SysPostDO.class, o -> { + List posts = CollectionUtils.convertList(reqVO.getPostIds(), postId -> + randomPojo(PostDO.class, o -> { o.setId(postId); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); })); @@ -99,23 +100,23 @@ public class UserServiceImplTest extends BaseDbUnitTest { @Test public void testUpdateUser_success() { // mock æ•°æ® - AdminUserDO dbUser = randomSysUserDO(); + AdminUserDO dbUser = randomAdminUserDO(); userMapper.insert(dbUser); // 准备傿•° UserUpdateReqVO reqVO = randomPojo(UserUpdateReqVO.class, o -> { o.setId(dbUser.getId()); - o.setSex(RandomUtil.randomEle(SysSexEnum.values()).getSex()); + o.setSex(RandomUtil.randomEle(SexEnum.values()).getSex()); o.setMobile(randomString()); }); // mock deptService 的方法 - SysDeptDO dept = randomPojo(SysDeptDO.class, o -> { + DeptDO dept = randomPojo(DeptDO.class, o -> { o.setId(reqVO.getDeptId()); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); }); when(deptService.getDept(eq(dept.getId()))).thenReturn(dept); // mock postService 的方法 - List posts = CollectionUtils.convertList(reqVO.getPostIds(), postId -> - randomPojo(SysPostDO.class, o -> { + List posts = CollectionUtils.convertList(reqVO.getPostIds(), postId -> + randomPojo(PostDO.class, o -> { o.setId(postId); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); })); @@ -131,13 +132,13 @@ public class UserServiceImplTest extends BaseDbUnitTest { @Test public void testUpdateUserProfile_success() { // mock æ•°æ® - AdminUserDO dbUser = randomSysUserDO(); + AdminUserDO dbUser = randomAdminUserDO(); userMapper.insert(dbUser); // 准备傿•° Long userId = dbUser.getId(); UserProfileUpdateReqVO reqVO = randomPojo(UserProfileUpdateReqVO.class, o -> { o.setMobile(randomString()); - o.setSex(RandomUtil.randomEle(SysSexEnum.values()).getSex()); + o.setSex(RandomUtil.randomEle(SexEnum.values()).getSex()); }); // 调用 @@ -150,7 +151,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { @Test public void testUpdateUserPassword_success() { // mock æ•°æ® - AdminUserDO dbUser = randomSysUserDO(o -> o.setPassword("encode:yudao")); + AdminUserDO dbUser = randomAdminUserDO(o -> o.setPassword("encode:yudao")); userMapper.insert(dbUser); // 准备傿•° Long userId = dbUser.getId(); @@ -173,7 +174,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { @Test public void testUpdateUserAvatar_success() { // mock æ•°æ® - AdminUserDO dbUser = randomSysUserDO(); + AdminUserDO dbUser = randomAdminUserDO(); userMapper.insert(dbUser); // 准备傿•° Long userId = dbUser.getId(); @@ -193,7 +194,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { @Test public void testUpdateUserPassword02_success() { // mock æ•°æ® - AdminUserDO dbUser = randomSysUserDO(); + AdminUserDO dbUser = randomAdminUserDO(); userMapper.insert(dbUser); // 准备傿•° Long userId = dbUser.getId(); @@ -212,7 +213,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { @Test public void testUpdateUserStatus() { // mock æ•°æ® - AdminUserDO dbUser = randomSysUserDO(); + AdminUserDO dbUser = randomAdminUserDO(); userMapper.insert(dbUser); // 准备傿•° Long userId = dbUser.getId(); @@ -228,7 +229,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { @Test public void testDeleteUser_success(){ // mock æ•°æ® - AdminUserDO dbUser = randomSysUserDO(); + AdminUserDO dbUser = randomAdminUserDO(); userMapper.insert(dbUser); // 准备傿•° Long userId = dbUser.getId(); @@ -254,7 +255,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { reqVO.setEndTime(buildTime(2020, 12, 24)); reqVO.setDeptId(1L); // 其中,1L 是 2L 的父部门 // mock 方法 - List deptList = newArrayList(randomPojo(SysDeptDO.class, o -> o.setId(2L))); + List deptList = newArrayList(randomPojo(DeptDO.class, o -> o.setId(2L))); when(deptService.getDeptsByParentIdFromCache(eq(reqVO.getDeptId()), eq(true))).thenReturn(deptList); // 调用 @@ -278,7 +279,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { reqVO.setEndTime(buildTime(2020, 12, 24)); reqVO.setDeptId(1L); // 其中,1L 是 2L 的父部门 // mock 方法 - List deptList = newArrayList(randomPojo(SysDeptDO.class, o -> o.setId(2L))); + List deptList = newArrayList(randomPojo(DeptDO.class, o -> o.setId(2L))); when(deptService.getDeptsByParentIdFromCache(eq(reqVO.getDeptId()), eq(true))).thenReturn(deptList); // 调用 @@ -293,7 +294,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { */ private AdminUserDO initGetUserPageData() { // mock æ•°æ® - AdminUserDO dbUser = randomSysUserDO(o -> { // 等会查询到 + AdminUserDO dbUser = randomAdminUserDO(o -> { // 等会查询到 o.setUsername("yudaoyuanma"); o.setMobile("15601691300"); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); @@ -320,8 +321,10 @@ public class UserServiceImplTest extends BaseDbUnitTest { @Test public void testImportUsers_01() { // 准备傿•° - UserImportExcelVO importUser = randomPojo(UserImportExcelVO.class); - // mock 方法 + UserImportExcelVO importUser = randomPojo(UserImportExcelVO.class, o -> { + }); + // mock 方法,模拟失败 + doThrow(new ServiceException(DEPT_NOT_FOUND)).when(deptService).validDepts(any()); // 调用 UserImportRespVO respVO = userService.importUsers(newArrayList(importUser), true); @@ -340,10 +343,10 @@ public class UserServiceImplTest extends BaseDbUnitTest { // 准备傿•° UserImportExcelVO importUser = randomPojo(UserImportExcelVO.class, o -> { o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 - o.setSex(randomEle(SysSexEnum.values()).getSex()); // ä¿è¯ sex 的范围 + o.setSex(randomEle(SexEnum.values()).getSex()); // ä¿è¯ sex 的范围 }); // mock deptService 的方法 - SysDeptDO dept = randomPojo(SysDeptDO.class, o -> { + DeptDO dept = randomPojo(DeptDO.class, o -> { o.setId(importUser.getDeptId()); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); }); @@ -368,16 +371,16 @@ public class UserServiceImplTest extends BaseDbUnitTest { @Test public void testImportUsers_03() { // mock æ•°æ® - AdminUserDO dbUser = randomSysUserDO(); + AdminUserDO dbUser = randomAdminUserDO(); userMapper.insert(dbUser); // 准备傿•° UserImportExcelVO importUser = randomPojo(UserImportExcelVO.class, o -> { o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 - o.setSex(randomEle(SysSexEnum.values()).getSex()); // ä¿è¯ sex 的范围 + o.setSex(randomEle(SexEnum.values()).getSex()); // ä¿è¯ sex 的范围 o.setUsername(dbUser.getUsername()); }); // mock deptService 的方法 - SysDeptDO dept = randomPojo(SysDeptDO.class, o -> { + DeptDO dept = randomPojo(DeptDO.class, o -> { o.setId(importUser.getDeptId()); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); }); @@ -398,16 +401,16 @@ public class UserServiceImplTest extends BaseDbUnitTest { @Test public void testImportUsers_04() { // mock æ•°æ® - AdminUserDO dbUser = randomSysUserDO(); + AdminUserDO dbUser = randomAdminUserDO(); userMapper.insert(dbUser); // 准备傿•° UserImportExcelVO importUser = randomPojo(UserImportExcelVO.class, o -> { o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 - o.setSex(randomEle(SysSexEnum.values()).getSex()); // ä¿è¯ sex 的范围 + o.setSex(randomEle(SexEnum.values()).getSex()); // ä¿è¯ sex 的范围 o.setUsername(dbUser.getUsername()); }); // mock deptService 的方法 - SysDeptDO dept = randomPojo(SysDeptDO.class, o -> { + DeptDO dept = randomPojo(DeptDO.class, o -> { o.setId(importUser.getDeptId()); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); }); @@ -433,7 +436,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { // 准备傿•° String username = randomString(); // mock æ•°æ® - userMapper.insert(randomSysUserDO(o -> o.setUsername(username))); + userMapper.insert(randomAdminUserDO(o -> o.setUsername(username))); // 调用,校验异常 assertServiceException(() -> userService.checkUsernameUnique(null, username), @@ -446,7 +449,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { Long id = randomLongId(); String username = randomString(); // mock æ•°æ® - userMapper.insert(randomSysUserDO(o -> o.setUsername(username))); + userMapper.insert(randomAdminUserDO(o -> o.setUsername(username))); // 调用,校验异常 assertServiceException(() -> userService.checkUsernameUnique(id, username), @@ -458,7 +461,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { // 准备傿•° String email = randomString(); // mock æ•°æ® - userMapper.insert(randomSysUserDO(o -> o.setEmail(email))); + userMapper.insert(randomAdminUserDO(o -> o.setEmail(email))); // 调用,校验异常 assertServiceException(() -> userService.checkEmailUnique(null, email), @@ -471,7 +474,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { Long id = randomLongId(); String email = randomString(); // mock æ•°æ® - userMapper.insert(randomSysUserDO(o -> o.setEmail(email))); + userMapper.insert(randomAdminUserDO(o -> o.setEmail(email))); // 调用,校验异常 assertServiceException(() -> userService.checkEmailUnique(id, email), @@ -483,7 +486,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { // 准备傿•° String mobile = randomString(); // mock æ•°æ® - userMapper.insert(randomSysUserDO(o -> o.setMobile(mobile))); + userMapper.insert(randomAdminUserDO(o -> o.setMobile(mobile))); // 调用,校验异常 assertServiceException(() -> userService.checkMobileUnique(null, mobile), @@ -496,7 +499,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { Long id = randomLongId(); String mobile = randomString(); // mock æ•°æ® - userMapper.insert(randomSysUserDO(o -> o.setMobile(mobile))); + userMapper.insert(randomAdminUserDO(o -> o.setMobile(mobile))); // 调用,校验异常 assertServiceException(() -> userService.checkMobileUnique(id, mobile), @@ -512,7 +515,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { @Test public void testCheckOldPassword_passwordFailed() { // mock æ•°æ® - AdminUserDO user = randomSysUserDO(); + AdminUserDO user = randomAdminUserDO(); userMapper.insert(user); // 准备傿•° Long id = user.getId(); @@ -530,13 +533,13 @@ public class UserServiceImplTest extends BaseDbUnitTest { // // 准备傿•° // Collection postIds = asSet(10L, 20L); // // mock 方法 -// SysUserDO user1 = randomSysUserDO(o -> o.setPostIds(asSet(10L, 30L))); +// AdminUserDO user1 = randomAdminUserDO(o -> o.setPostIds(asSet(10L, 30L))); // userMapper.insert(user1); -// SysUserDO user2 = randomSysUserDO(o -> o.setPostIds(singleton(100L))); +// AdminUserDO user2 = randomAdminUserDO(o -> o.setPostIds(singleton(100L))); // userMapper.insert(user2); // // // 调用 -// List result = userService.getUsersByPostIds(postIds); +// List result = userService.getUsersByPostIds(postIds); // // 断言 // assertEquals(1, result.size()); // assertEquals(user1, result.get(0)); @@ -545,10 +548,10 @@ public class UserServiceImplTest extends BaseDbUnitTest { // ========== éšæœºå¯¹è±¡ ========== @SafeVarargs - private static AdminUserDO randomSysUserDO(Consumer... consumers) { + private static AdminUserDO randomAdminUserDO(Consumer... consumers) { Consumer consumer = (o) -> { o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 - o.setSex(randomEle(SysSexEnum.values()).getSex()); // ä¿è¯ sex 的范围 + o.setSex(randomEle(SexEnum.values()).getSex()); // ä¿è¯ sex 的范围 }; return randomPojo(AdminUserDO.class, ArrayUtils.append(consumer, consumers)); } diff --git a/yudao-module-system/yudao-module-system-impl/src/test/resources/application-unit-test.yaml b/yudao-module-system/yudao-module-system-impl/src/test/resources/application-unit-test.yaml new file mode 100644 index 0000000000..9164b07e60 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/test/resources/application-unit-test.yaml @@ -0,0 +1,55 @@ +spring: + main: + lazy-initialization: true # 开坿‡’加载,加快速度 + banner-mode: off # å•元测试,ç¦ç”¨ Banner + +--- #################### æ•°æ®åº“相关é…ç½® #################### + +spring: + # æ•°æ®æºé…置项 + datasource: + name: ruoyi-vue-pro + url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false; # MODE 使用 MySQL 模å¼ï¼›DATABASE_TO_UPPER é…置表和字段使用å°å†™ + driver-class-name: org.h2.Driver + username: sa + password: + schema: classpath:sql/create_tables.sql # MySQL 转 H2 的语å¥ï¼Œä½¿ç”¨ https://www.jooq.org/translate/ 工具 + druid: + async-init: true # å•元测试,异步åˆå§‹åŒ– Druid 连接池,æå‡å¯åŠ¨é€Ÿåº¦ + initial-size: 1 # å•元测试,é…置为 1,æå‡å¯åŠ¨é€Ÿåº¦ + + # Redis é…置。Redisson 默认的é…置足够使用,一般ä¸éœ€è¦è¿›è¡Œè°ƒä¼˜ + redis: + host: 127.0.0.1 # åœ°å€ + port: 16379 # 端å£ï¼ˆå•元测试,使用 16379 端å£ï¼‰ + database: 0 # æ•°æ®åº“索引 + +mybatis: + lazy-initialization: true # å•元测试,设置 MyBatis Mapper 延迟加载,加速æ¯ä¸ªå•元测试 + +--- #################### 定时任务相关é…ç½® #################### + +--- #################### é…置中心相关é…ç½® #################### + +--- #################### æœåŠ¡ä¿éšœç›¸å…³é…ç½® #################### + +# Lock4j é…置项(å•元测试,ç¦ç”¨ Lock4j) + +# Resilience4j é…置项 + +--- #################### 监控相关é…ç½® #################### + +--- #################### 芋é“相关é…ç½® #################### + +# 芋é“é…置项,设置当å‰é¡¹ç›®æ‰€æœ‰è‡ªå®šä¹‰çš„é…ç½® +yudao: + info: + base-package: cn.iocoder.yudao.module.member.dal.mysql + member-package: cn.iocoder.yudao.module.member # TODO èŠ‹è‰¿ï¼šè¦æ¸…ç†æŽ‰ + system-package: cn.iocoder.yudao.module.system # TODO èŠ‹è‰¿ï¼šè¦æ¸…ç†æŽ‰ + core-service: + base-package: cn.iocoder.yudao.module.member.dal.mysql # TODO èŠ‹è‰¿ï¼šè¦æ¸…ç†æŽ‰ + captcha: + timeout: 5m + width: 160 + height: 60 diff --git a/yudao-module-system/yudao-module-system-impl/src/test/resources/logback-spring.xml b/yudao-module-system/yudao-module-system-impl/src/test/resources/logback-spring.xml new file mode 100644 index 0000000000..daf756bff0 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/test/resources/logback-spring.xml @@ -0,0 +1,4 @@ + + + + diff --git a/yudao-module-system/yudao-module-system-impl/src/test/resources/sql/clean.sql b/yudao-module-system/yudao-module-system-impl/src/test/resources/sql/clean.sql new file mode 100644 index 0000000000..88c7c845bd --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/test/resources/sql/clean.sql @@ -0,0 +1,18 @@ +DELETE FROM "system_dept"; +DELETE FROM "system_dict_data"; +DELETE FROM "system_role"; +DELETE FROM "system_role_menu"; +DELETE FROM "system_menu"; +DELETE FROM "system_user_role"; +DELETE FROM "system_dict_type"; +DELETE FROM "system_user_session"; +DELETE FROM "system_post"; +DELETE FROM "system_login_log"; +DELETE FROM "system_operate_log"; +DELETE FROM "system_user"; +DELETE FROM "system_sms_channel"; +DELETE FROM "system_sms_template"; +DELETE FROM "system_sms_log"; +DELETE FROM "system_error_code"; +DELETE FROM "system_social_user"; +DELETE FROM "system_tenant"; diff --git a/yudao-module-system/yudao-module-system-impl/src/test/resources/sql/create_tables.sql b/yudao-module-system/yudao-module-system-impl/src/test/resources/sql/create_tables.sql new file mode 100644 index 0000000000..914352e8f1 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/test/resources/sql/create_tables.sql @@ -0,0 +1,405 @@ +-- sys 开头的 DB + +CREATE TABLE IF NOT EXISTS "system_dept" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "name" varchar(30) NOT NULL DEFAULT '', + "parent_id" bigint NOT NULL DEFAULT '0', + "sort" int NOT NULL DEFAULT '0', + "leader_user_id" bigint DEFAULT NULL, + "phone" varchar(11) DEFAULT NULL, + "email" varchar(50) DEFAULT NULL, + "status" tinyint NOT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + "tenant_id" bigint not null default '0', + PRIMARY KEY ("id") +) COMMENT '部门表'; + +CREATE TABLE IF NOT EXISTS "system_dict_data" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "sort" int NOT NULL DEFAULT '0', + "label" varchar(100) NOT NULL DEFAULT '', + "value" varchar(100) NOT NULL DEFAULT '', + "dict_type" varchar(100) NOT NULL DEFAULT '', + "status" tinyint NOT NULL DEFAULT '0', + "remark" varchar(500) DEFAULT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '字典数æ®è¡¨'; + +CREATE TABLE IF NOT EXISTS "system_role" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "name" varchar(30) NOT NULL, + "code" varchar(100) NOT NULL, + "sort" int NOT NULL, + "data_scope" tinyint NOT NULL DEFAULT '1', + "data_scope_dept_ids" varchar(500) NOT NULL DEFAULT '', + "status" tinyint NOT NULL, + "type" tinyint NOT NULL, + "remark" varchar(500) DEFAULT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '角色信æ¯è¡¨'; + +CREATE TABLE IF NOT EXISTS "system_role_menu" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "role_id" bigint NOT NULL, + "menu_id" bigint NOT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '角色和èœå•å…³è”表'; + +CREATE TABLE IF NOT EXISTS "system_menu" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "name" varchar(50) NOT NULL, + "permission" varchar(100) NOT NULL DEFAULT '', + "menu_type" tinyint NOT NULL, + "sort" int NOT NULL DEFAULT '0', + "parent_id" bigint NOT NULL DEFAULT '0', + "path" varchar(200) DEFAULT '', + "icon" varchar(100) DEFAULT '#', + "component" varchar(255) DEFAULT NULL, + "status" tinyint NOT NULL DEFAULT '0', + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT 'èœå•æƒé™è¡¨'; + +CREATE TABLE IF NOT EXISTS "system_user_role" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "user_id" bigint NOT NULL, + "role_id" bigint NOT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp DEFAULT NULL, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp DEFAULT NULL, + "deleted" bit DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '用户和角色关è”表'; + +CREATE TABLE IF NOT EXISTS "system_dict_type" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "name" varchar(100) NOT NULL DEFAULT '', + "type" varchar(100) NOT NULL DEFAULT '', + "status" tinyint NOT NULL DEFAULT '0', + "remark" varchar(500) DEFAULT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '字典类型表'; + +CREATE TABLE IF NOT EXISTS `system_user_session` ( + `id` varchar(32) NOT NULL, + `user_id` bigint DEFAULT NULL, + "user_type" tinyint NOT NULL, + `username` varchar(50) NOT NULL DEFAULT '', + `user_ip` varchar(50) DEFAULT NULL, + `user_agent` varchar(512) DEFAULT NULL, + `session_timeout` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updater` varchar(64) DEFAULT '' , + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + "tenant_id" bigint not null default '0', + PRIMARY KEY (`id`) +) COMMENT '用户在线 Session'; + +CREATE TABLE IF NOT EXISTS "system_post" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "code" varchar(64) NOT NULL, + "name" varchar(50) NOT NULL, + "sort" integer NOT NULL, + "status" tinyint NOT NULL, + "remark" varchar(500) DEFAULT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + "tenant_id" bigint not null default '0', + PRIMARY KEY ("id") +) COMMENT 'å²—ä½ä¿¡æ¯è¡¨'; + +CREATE TABLE IF NOT EXISTS "system_notice" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "title" varchar(50) NOT NULL COMMENT '公告标题', + "content" text NOT NULL COMMENT '公告内容', + "notice_type" tinyint NOT NULL COMMENT '公告类型(1通知 2公告)', + "status" tinyint NOT NULL DEFAULT '0' COMMENT '公告状æ€ï¼ˆ0正常 1关闭)', + "creator" varchar(64) DEFAULT '' COMMENT '创建者', + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + "updater" varchar(64) DEFAULT '' COMMENT '更新者', + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', + "deleted" bit NOT NULL DEFAULT 0 COMMENT '是å¦åˆ é™¤', + "tenant_id" bigint not null default '0', + PRIMARY KEY("id") +) COMMENT '通知公告表'; + +CREATE TABLE IF NOT EXISTS `system_login_log` ( + `id` bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY, + `log_type` bigint(4) NOT NULL, + "user_id" bigint not null default '0', + "user_type" tinyint NOT NULL, + `trace_id` varchar(64) NOT NULL DEFAULT '', + `username` varchar(50) NOT NULL DEFAULT '', + `result` tinyint(4) NOT NULL, + `user_ip` varchar(50) NOT NULL, + `user_agent` varchar(512) NOT NULL, + `creator` varchar(64) DEFAULT '', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updater` varchar(64) DEFAULT '', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `deleted` bit(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) COMMENT ='系统访问记录'; + +CREATE TABLE IF NOT EXISTS `system_operate_log` ( + `id` bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY, + `trace_id` varchar(64) NOT NULL DEFAULT '', + `user_id` bigint(20) NOT NULL, + `module` varchar(50) NOT NULL, + `name` varchar(50) NOT NULL, + `operate_type` bigint(4) NOT NULL DEFAULT '0', + `content` varchar(2000) NOT NULL DEFAULT '', + `exts` varchar(512) NOT NULL DEFAULT '', + `request_method` varchar(16) DEFAULT '', + `request_url` varchar(255) DEFAULT '', + `user_ip` varchar(50) DEFAULT NULL, + `user_agent` varchar(200) DEFAULT NULL, + `java_method` varchar(512) NOT NULL DEFAULT '', + `java_method_args` varchar(8000) DEFAULT '', + `start_time` datetime NOT NULL, + `duration` int(11) NOT NULL, + `result_code` int(11) NOT NULL DEFAULT '0', + `result_msg` varchar(512) DEFAULT '', + `result_data` varchar(4000) DEFAULT '', + `creator` varchar(64) DEFAULT '', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updater` varchar(64) DEFAULT '', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `deleted` bit(1) NOT NULL DEFAULT '0', + "tenant_id" bigint not null default '0', + PRIMARY KEY (`id`) +) COMMENT ='æ“作日志记录'; + +CREATE TABLE IF NOT EXISTS "system_user" ( + "id" bigint not null GENERATED BY DEFAULT AS IDENTITY, + "username" varchar(30) not null, + "password" varchar(100) not null default '', + "nickname" varchar(30) not null, + "remark" varchar(500) default null, + "dept_id" bigint default null, + "post_ids" varchar(255) default null, + "email" varchar(50) default '', + "mobile" varchar(11) default '', + "sex" tinyint default '0', + "avatar" varchar(100) default '', + "status" tinyint not null default '0', + "login_ip" varchar(50) default '', + "login_date" timestamp default null, + "creator" varchar(64) default '', + "create_time" timestamp not null default current_timestamp, + "updater" varchar(64) default '', + "update_time" timestamp not null default current_timestamp, + "deleted" bit not null default false, + "tenant_id" bigint not null default '0', + primary key ("id") +) comment '用户信æ¯è¡¨'; + +CREATE TABLE IF NOT EXISTS "inf_api_access_log" ( + "id" bigint not null GENERATED BY DEFAULT AS IDENTITY, + "trace_id" varchar(64) not null default '', + "user_id" bigint not null default '0', + "user_type" tinyint not null default '0', + "application_name" varchar(50) not null, + "request_method" varchar(16) not null default '', + "request_url" varchar(255) not null default '', + "request_params" varchar(8000) not null default '', + "user_ip" varchar(50) not null, + "user_agent" varchar(512) not null, + "begin_time" timestamp not null, + "end_time" timestamp not null, + "duration" integer not null, + "result_code" integer not null default '0', + "result_msg" varchar(512) default '', + "creator" varchar(64) default '', + "create_time" timestamp not null default current_timestamp, + "updater" varchar(64) default '', + "update_time" timestamp not null default current_timestamp, + "deleted" bit not null default false, + "tenant_id" bigint not null default '0', + primary key ("id") +) COMMENT 'API 访问日志表'; + +CREATE TABLE IF NOT EXISTS "inf_api_error_log" ( + "id" bigint not null GENERATED BY DEFAULT AS IDENTITY, + "trace_id" varchar(64) not null, + "user_id" bigint not null default '0', + "user_type" tinyint not null default '0', + "application_name" varchar(50) not null, + "request_method" varchar(16) not null, + "request_url" varchar(255) not null, + "request_params" varchar(8000) not null, + "user_ip" varchar(50) not null, + "user_agent" varchar(512) not null, + "exception_time" timestamp not null, + "exception_name" varchar(128) not null default '', + "exception_message" clob not null, + "exception_root_cause_message" clob not null, + "exception_stack_trace" clob not null, + "exception_class_name" varchar(512) not null, + "exception_file_name" varchar(512) not null, + "exception_method_name" varchar(512) not null, + "exception_line_number" integer not null, + "process_status" tinyint not null, + "process_time" timestamp default null, + "process_user_id" bigint default '0', + "creator" varchar(64) default '', + "create_time" timestamp not null default current_timestamp, + "updater" varchar(64) default '', + "update_time" timestamp not null default current_timestamp, + "deleted" bit not null default false, + "tenant_id" bigint not null default '0', + primary key ("id") +) COMMENT '系统异常日志'; + +CREATE TABLE IF NOT EXISTS "system_sms_channel" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "signature" varchar(10) NOT NULL, + "code" varchar(63) NOT NULL, + "status" tinyint NOT NULL, + "remark" varchar(255) DEFAULT NULL, + "api_key" varchar(63) NOT NULL, + "api_secret" varchar(63) DEFAULT NULL, + "callback_url" varchar(255) DEFAULT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '短信渠é“'; + +CREATE TABLE IF NOT EXISTS "system_sms_template" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "type" tinyint NOT NULL, + "status" tinyint NOT NULL, + "code" varchar(63) NOT NULL, + "name" varchar(63) NOT NULL, + "content" varchar(255) NOT NULL, + "params" varchar(255) NOT NULL, + "remark" varchar(255) DEFAULT NULL, + "api_template_id" varchar(63) NOT NULL, + "channel_id" bigint NOT NULL, + "channel_code" varchar(63) NOT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '短信模æ¿'; + +CREATE TABLE IF NOT EXISTS "system_sms_log" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "channel_id" bigint NOT NULL, + "channel_code" varchar(63) NOT NULL, + "template_id" bigint NOT NULL, + "template_code" varchar(63) NOT NULL, + "template_type" tinyint NOT NULL, + "template_content" varchar(255) NOT NULL, + "template_params" varchar(255) NOT NULL, + "api_template_id" varchar(63) NOT NULL, + "mobile" varchar(11) NOT NULL, + "user_id" bigint DEFAULT '0', + "user_type" tinyint DEFAULT '0', + "send_status" tinyint NOT NULL DEFAULT '0', + "send_time" timestamp DEFAULT NULL, + "send_code" int DEFAULT NULL, + "send_msg" varchar(255) DEFAULT NULL, + "api_send_code" varchar(63) DEFAULT NULL, + "api_send_msg" varchar(255) DEFAULT NULL, + "api_request_id" varchar(255) DEFAULT NULL, + "api_serial_no" varchar(255) DEFAULT NULL, + "receive_status" tinyint NOT NULL DEFAULT '0', + "receive_time" timestamp DEFAULT NULL, + "api_receive_code" varchar(63) DEFAULT NULL, + "api_receive_msg" varchar(255) DEFAULT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '短信日志'; + +CREATE TABLE IF NOT EXISTS "system_error_code" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "type" tinyint NOT NULL DEFAULT '0', + "application_name" varchar(50) NOT NULL, + "code" int NOT NULL DEFAULT '0', + "message" varchar(512) NOT NULL DEFAULT '', + "memo" varchar(512) DEFAULT '', + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '错误ç è¡¨'; + +CREATE TABLE IF NOT EXISTS "system_social_user" ( + "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "user_id" bigint NOT NULL, + "user_type" tinyint NOT NULL DEFAULT '0', + "type" tinyint NOT NULL, + "openid" varchar(32) NOT NULL, + "token" varchar(256) DEFAULT NULL, + "union_id" varchar(32) NOT NULL, + "raw_token_info" varchar(1024) NOT NULL, + "nickname" varchar(32) NOT NULL, + "avatar" varchar(255) DEFAULT NULL, + "raw_user_info" varchar(1024) NOT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '社交用户'; + +CREATE TABLE IF NOT EXISTS "system_tenant" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "name" varchar(63) NOT NULL, + "contact_name" varchar(255) NOT NULL, + "contact_mobile" varchar(255), + "status" tinyint NOT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '租户'; From 638b8b1dd4691ad20cfe1fa7f57baaad718ab8e4 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 31 Jan 2022 10:07:27 +0800 Subject: [PATCH 17/47] =?UTF-8?q?=E5=A4=9A=E6=A8=A1=E5=9D=97=E9=87=8D?= =?UTF-8?q?=E6=9E=84=204=EF=BC=9Asystem=20=E6=A8=A1=E5=9D=97=E7=9A=84?= =?UTF-8?q?=E8=B0=83=E6=95=B4=EF=BC=8C=E5=AE=8C=E6=88=90=20social=20?= =?UTF-8?q?=E7=9A=84=E5=A4=8D=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/convert/auth/AuthConvert.java | 8 +-- .../service/auth/MemberAuthServiceImpl.java | 1 + .../system/api/social/SocialUserApiImpl.java | 28 +-------- .../system/convert/auth/AuthConvert.java | 16 +++-- .../service/auth/AdminAuthServiceImpl.java | 31 +++------- .../service/social/SocialUserService.java | 44 ++++++++----- .../service/social/SocialUserServiceImpl.java | 62 +++++++++++++++++-- 7 files changed, 114 insertions(+), 76 deletions(-) diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/auth/AuthConvert.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/auth/AuthConvert.java index bca6b170b5..323827d4f1 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/auth/AuthConvert.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/auth/AuthConvert.java @@ -26,10 +26,10 @@ public interface AuthConvert { return convert0(bean).setUserType(UserTypeEnum.MEMBER.getValue()); } - SocialUserBindReqDTO convert(Long userId, Integer value, AppAuthSocialBindReqVO reqVO); - SocialUserBindReqDTO convert(Long userId, Integer value, AppAuthSocialLogin2ReqVO reqVO); - SocialUserBindReqDTO convert(Long userId, Integer value, AppAuthSocialLoginReqVO reqVO); - SocialUserUnbindReqDTO convert(Long userId, Integer value, AppAuthSocialUnbindReqVO reqVO); + SocialUserBindReqDTO convert(Long userId, Integer userType, AppAuthSocialBindReqVO reqVO); + SocialUserBindReqDTO convert(Long userId, Integer userType, AppAuthSocialLogin2ReqVO reqVO); + SocialUserBindReqDTO convert(Long userId, Integer userType, AppAuthSocialLoginReqVO reqVO); + SocialUserUnbindReqDTO convert(Long userId, Integer userType, AppAuthSocialUnbindReqVO reqVO); SmsCodeSendReqDTO convert(AppAuthSendSmsReqVO reqVO); SmsCodeUseReqDTO convert(AppAuthResetPasswordReqVO reqVO, SmsSceneEnum scene, String usedIp); diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java index 5fd8db9b9a..fcb68b2715 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java @@ -152,6 +152,7 @@ public class MemberAuthServiceImpl implements MemberAuthService { @Override public void socialBind(Long userId, AppAuthSocialBindReqVO reqVO) { + // 绑定社交用户(新增) socialUserApi.bindSocialUser(AuthConvert.INSTANCE.convert(userId, getUserType().getValue(), reqVO)); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApiImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApiImpl.java index 94e4cfabab..02a7942bbc 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApiImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApiImpl.java @@ -3,15 +3,11 @@ package cn.iocoder.yudao.module.system.api.social; import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; import cn.iocoder.yudao.module.system.api.social.dto.SocialUserUnbindReqDTO; import cn.iocoder.yudao.module.system.service.social.SocialUserService; -import me.zhyd.oauth.model.AuthUser; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.SOCIAL_USER_NOT_FOUND; - /** * 社交用户的 API 实现类 * @@ -31,16 +27,7 @@ public class SocialUserApiImpl implements SocialUserApi { @Override public void bindSocialUser(SocialUserBindReqDTO reqDTO) { - // 使用 code æŽˆæƒ - AuthUser authUser = socialUserService.getAuthUser(reqDTO.getType(), reqDTO.getCode(), - reqDTO.getState()); - if (authUser == null) { - throw exception(SOCIAL_USER_NOT_FOUND); - } - - // 绑定社交用户(新增) - socialUserService.bindSocialUser(reqDTO.getUserId(), reqDTO.getUserType(), - reqDTO.getType(), authUser); + socialUserService.bindSocialUser(reqDTO); } @Override @@ -51,21 +38,12 @@ public class SocialUserApiImpl implements SocialUserApi { @Override public void checkSocialUser(Integer type, String code, String state) { - AuthUser authUser = socialUserService.getAuthUser(type, code, state); - if (authUser == null) { - throw exception(SOCIAL_USER_NOT_FOUND); - } + socialUserService.checkSocialUser(type, code, state); } @Override public Long getBindUserId(Integer userType, Integer type, String code, String state) { - AuthUser authUser = socialUserService.getAuthUser(type, code, state); - if (authUser == null) { - throw exception(SOCIAL_USER_NOT_FOUND); - } - - // - return null; + return socialUserService.getBindUserId(userType, type, code, state); } } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java index e4cce51003..c52328cc0d 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java @@ -1,14 +1,15 @@ package cn.iocoder.yudao.module.system.convert.auth; -import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthMenuRespVO; -import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthPermissionInfoRespVO; +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import cn.iocoder.yudao.framework.security.core.LoginUser; +import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; +import cn.iocoder.yudao.module.system.api.social.dto.SocialUserUnbindReqDTO; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.*; import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.enums.permission.MenuIdEnum; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; -import cn.iocoder.yudao.framework.security.core.LoginUser; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.factory.Mappers; @@ -71,4 +72,9 @@ public interface AuthConvert { return CollectionUtils.filterList(treeNodeMap.values(), node -> MenuIdEnum.ROOT.getId().equals(node.getParentId())); } + SocialUserBindReqDTO convert(Long userId, Integer userType, AuthSocialBindReqVO reqVO); + SocialUserBindReqDTO convert(Long userId, Integer userType, AuthSocialLogin2ReqVO reqVO); + SocialUserBindReqDTO convert(Long userId, Integer userType, AuthSocialLoginReqVO reqVO); + SocialUserUnbindReqDTO convert(Long userId, Integer userType, AuthSocialUnbindReqVO reqVO); + } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java index d2fe1ba1ab..f237049bdd 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java @@ -1,6 +1,5 @@ package cn.iocoder.yudao.module.system.service.auth; -import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils; @@ -12,7 +11,6 @@ import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthSocialBi import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthSocialLogin2ReqVO; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthSocialLoginReqVO; import cn.iocoder.yudao.module.system.convert.auth.AuthConvert; -import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum; import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum; @@ -37,7 +35,6 @@ import org.springframework.stereotype.Service; import org.springframework.util.Assert; import javax.annotation.Resource; -import java.util.List; import java.util.Objects; import java.util.Set; @@ -70,7 +67,7 @@ public class AdminAuthServiceImpl implements AdminAuthService { @Resource private UserSessionService userSessionService; @Resource - private SocialUserService socialService; + private SocialUserService socialUserService; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { @@ -192,19 +189,15 @@ public class AdminAuthServiceImpl implements AdminAuthService { @Override public String socialLogin(AuthSocialLoginReqVO reqVO, String userIp, String userAgent) { - // 使用 code 授æƒç ï¼Œè¿›è¡Œç™»å½• - AuthUser authUser = socialService.getAuthUser(reqVO.getType(), reqVO.getCode(), reqVO.getState()); - Assert.notNull(authUser, "授æƒç”¨æˆ·ä¸ä¸ºç©º"); - - // 如果未绑定 SocialUserDO 用户,则无法自动登录,进行报错 - String unionId = socialService.getAuthUserUnionId(authUser); - List socialUsers = socialService.getAllSocialUserList(reqVO.getType(), unionId, getUserType().getValue()); - if (CollUtil.isEmpty(socialUsers)) { + // 使用 code 授æƒç ï¼Œè¿›è¡Œç™»å½•。然åŽï¼ŒèŽ·å¾—åˆ°ç»‘å®šçš„ç”¨æˆ·ç¼–å· + Long userId = socialUserService.getBindUserId(UserTypeEnum.MEMBER.getValue(), reqVO.getType(), + reqVO.getCode(), reqVO.getState()); + if (userId == null) { throw exception(AUTH_THIRD_LOGIN_NOT_BIND); } // 自动登录 - AdminUserDO user = userService.getUser(socialUsers.get(0).getUserId()); + AdminUserDO user = userService.getUser(userId); if (user == null) { throw exception(USER_NOT_EXISTS); } @@ -214,7 +207,7 @@ public class AdminAuthServiceImpl implements AdminAuthService { LoginUser loginUser = this.buildLoginUser(user); // 绑定社交用户(更新) - socialService.bindSocialUser(loginUser.getId(), getUserType().getValue(), reqVO.getType(), authUser); + socialUserService.bindSocialUser(AuthConvert.INSTANCE.convert(loginUser.getId(), getUserType().getValue(), reqVO)); // 缓存登录用户到 Redis 中,返回 sessionId ç¼–å· return userSessionService.createUserSession(loginUser, userIp, userAgent); @@ -223,14 +216,14 @@ public class AdminAuthServiceImpl implements AdminAuthService { @Override public String socialLogin2(AuthSocialLogin2ReqVO reqVO, String userIp, String userAgent) { // 使用 code 授æƒç ï¼Œè¿›è¡Œç™»å½• - AuthUser authUser = socialService.getAuthUser(reqVO.getType(), reqVO.getCode(), reqVO.getState()); + AuthUser authUser = socialUserService.getAuthUser(reqVO.getType(), reqVO.getCode(), reqVO.getState()); Assert.notNull(authUser, "授æƒç”¨æˆ·ä¸ä¸ºç©º"); // 使用账å·å¯†ç ï¼Œè¿›è¡Œç™»å½•。 LoginUser loginUser = this.login0(reqVO.getUsername(), reqVO.getPassword()); // 绑定社交用户(新增) - socialService.bindSocialUser(loginUser.getId(), getUserType().getValue(), reqVO.getType(), authUser); + socialUserService.bindSocialUser(AuthConvert.INSTANCE.convert(loginUser.getId(), getUserType().getValue(), reqVO)); // 缓存登录用户到 Redis 中,返回 sessionId ç¼–å· return userSessionService.createUserSession(loginUser, userIp, userAgent); @@ -238,12 +231,8 @@ public class AdminAuthServiceImpl implements AdminAuthService { @Override public void socialBind(Long userId, AuthSocialBindReqVO reqVO) { - // 使用 code 授æƒç ï¼Œè¿›è¡Œç™»å½• - AuthUser authUser = socialService.getAuthUser(reqVO.getType(), reqVO.getCode(), reqVO.getState()); - Assert.notNull(authUser, "授æƒç”¨æˆ·ä¸ä¸ºç©º"); - // 绑定社交用户(新增) - socialService.bindSocialUser(userId, getUserType().getValue(), reqVO.getType(), authUser); + socialUserService.bindSocialUser(AuthConvert.INSTANCE.convert(userId, getUserType().getValue(), reqVO)); } @Override diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java index b7a7d00d7d..f57baff0d3 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java @@ -2,10 +2,12 @@ package cn.iocoder.yudao.module.system.service.social; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.exception.ServiceException; +import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO; import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; import me.zhyd.oauth.model.AuthUser; +import javax.validation.Valid; import javax.validation.constraints.NotNull; import java.util.List; @@ -47,17 +49,6 @@ public interface SocialUserService { return StrUtil.blankToDefault(authUser.getToken().getUnionId(), authUser.getUuid()); } - /** - * 获得 unionId 对应的æŸä¸ªç¤¾äº¤å¹³å°çš„“所有â€ç¤¾äº¤ç”¨æˆ· - * 注æ„,这里的“所有â€ï¼ŒæŒ‡çš„æ˜¯ç±»ä¼¼ã€å¾®ä¿¡ã€‘å¹³å°ï¼ŒåŒ…括了å°ç¨‹åºã€å…¬ä¼—å·ã€PC 网站,他们的 unionId 是一致的 - * - * @param type 社交平å°çš„类型 {@link SocialTypeEnum} - * @param unionId 社交平å°çš„ unionId - * @param userType 全局用户类型 - * @return 社交用户列表 - */ - List getAllSocialUserList(Integer type, String unionId, Integer userType); - /** * 获得指定用户的社交用户列表 * @@ -69,12 +60,10 @@ public interface SocialUserService { /** * 绑定社交用户 - * @param userId ç”¨æˆ·ç¼–å· - * @param userType 用户类型 - * @param type 社交平å°çš„类型 {@link SocialTypeEnum} - * @param authUser 授æƒç”¨æˆ· + * + * @param reqDTO ç»‘å®šä¿¡æ¯ */ - void bindSocialUser(Long userId, Integer userType, Integer type, AuthUser authUser); + void bindSocialUser(@Valid SocialUserBindReqDTO reqDTO); /** * å–æ¶ˆç»‘定社交用户 @@ -86,4 +75,27 @@ public interface SocialUserService { */ void unbindSocialUser(Long userId, Integer userType, Integer type, String unionId); + /** + * 校验社交用户的认è¯ä¿¡æ¯æ˜¯å¦æ­£ç¡® + * 如果校验ä¸é€šè¿‡ï¼Œåˆ™æŠ›å‡º {@link ServiceException} 业务异常 + * + * @param type 社交平å°çš„类型 + * @param code 授æƒç  + * @param state state + */ + void checkSocialUser(Integer type, String code, String state); + + /** + * èŽ·å¾—ç¤¾äº¤ç”¨æˆ·çš„ç»‘å®šç”¨æˆ·ç¼–å· + * 注æ„,返回的是 MemberUser 或者 AdminUser çš„ id ç¼–å·ï¼ + * 该方法会执行和 {@link #checkSocialUser(Integer, String, String)} 一样的逻辑。 + * 所以在认è¯ä¿¡æ¯ä¸æ­£ç¡®çš„æƒ…况下,也会抛出 {@link ServiceException} 业务异常 + * + * @param userType 用户类型 + * @param type 社交平å°çš„类型 + * @param code 授æƒç  + * @param state state + * @return ç»‘å®šç”¨æˆ·ç¼–å· + */ + Long getBindUserId(Integer userType, Integer type, String code, String state); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java index 533f7fdf9c..b408a1fd49 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.service.social; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.http.HttpUtils; +import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO; import cn.iocoder.yudao.module.system.dal.mysql.social.SocialUserMapper; import cn.iocoder.yudao.module.system.dal.redis.social.SocialAuthUserRedisDAO; @@ -25,8 +26,7 @@ import java.util.Objects; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.SOCIAL_USER_AUTH_FAILURE; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.SOCIAL_USER_UNBIND_NOT_SELF; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; /** * 社交用户 Service 实现类 @@ -72,8 +72,16 @@ public class SocialUserServiceImpl implements SocialUserService { return authUser; } - @Override - public List getAllSocialUserList(Integer type, String unionId, Integer userType) { + /** + * 获得 unionId 对应的æŸä¸ªç¤¾äº¤å¹³å°çš„“所有â€ç¤¾äº¤ç”¨æˆ· + * 注æ„,这里的“所有â€ï¼ŒæŒ‡çš„æ˜¯ç±»ä¼¼ã€å¾®ä¿¡ã€‘å¹³å°ï¼ŒåŒ…括了å°ç¨‹åºã€å…¬ä¼—å·ã€PC 网站,他们的 unionId 是一致的 + * + * @param type 社交平å°çš„类型 {@link SocialTypeEnum} + * @param unionId 社交平å°çš„ unionId + * @param userType 全局用户类型 + * @return 社交用户列表 + */ + private List getAllSocialUserList(Integer type, String unionId, Integer userType) { List types = SocialTypeEnum.getRelationTypes(type); return socialUserMapper.selectListByTypeAndUnionId(userType, types, unionId); } @@ -84,8 +92,28 @@ public class SocialUserServiceImpl implements SocialUserService { } @Override + public void bindSocialUser(SocialUserBindReqDTO reqDTO) { + // 使用 code æŽˆæƒ + AuthUser authUser = getAuthUser(reqDTO.getType(), reqDTO.getCode(), + reqDTO.getState()); + if (authUser == null) { + throw exception(SOCIAL_USER_NOT_FOUND); + } + + // 绑定社交用户(新增) + bindSocialUser(reqDTO.getUserId(), reqDTO.getUserType(), + reqDTO.getType(), authUser); + } + + /** + * 绑定社交用户 + * @param userId ç”¨æˆ·ç¼–å· + * @param userType 用户类型 + * @param type 社交平å°çš„类型 {@link SocialTypeEnum} + * @param authUser 授æƒç”¨æˆ· + */ @Transactional(rollbackFor = Exception.class) - public void bindSocialUser(Long userId, Integer userType, Integer type, AuthUser authUser) { + protected void bindSocialUser(Long userId, Integer userType, Integer type, AuthUser authUser) { // 获得 unionId 对应的 SocialUserDO 列表 String unionId = getAuthUserUnionId(authUser); List socialUsers = this.getAllSocialUserList(type, unionId, userType); @@ -137,6 +165,30 @@ public class SocialUserServiceImpl implements SocialUserService { socialUserMapper.deleteBatchIds(CollectionUtils.convertSet(socialUsers, SocialUserDO::getId)); } + @Override + public void checkSocialUser(Integer type, String code, String state) { + AuthUser authUser = getAuthUser(type, code, state); + if (authUser == null) { + throw exception(SOCIAL_USER_NOT_FOUND); + } + } + + @Override + public Long getBindUserId(Integer userType, Integer type, String code, String state) { + AuthUser authUser = getAuthUser(type, code, state); + if (authUser == null) { + throw exception(SOCIAL_USER_NOT_FOUND); + } + + // 如果未绑定 SocialUserDO 用户,则无法自动登录,进行报错 + String unionId = getAuthUserUnionId(authUser); + List socialUsers = getAllSocialUserList(type, unionId, userType); + if (CollUtil.isEmpty(socialUsers)) { + throw exception(AUTH_THIRD_LOGIN_NOT_BIND); + } + return socialUsers.get(0).getUserId(); + } + @VisibleForTesting public void unbindOldSocialUser(Long userId, Integer userType, Integer type, String newUnionId) { List types = SocialTypeEnum.getRelationTypes(type); From 4bc8dc65b4f23ff0380f4ecd33de53d32f247cb8 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 31 Jan 2022 10:27:35 +0800 Subject: [PATCH 18/47] =?UTF-8?q?=E5=A4=9A=E6=A8=A1=E5=9D=97=E9=87=8D?= =?UTF-8?q?=E6=9E=84=204=EF=BC=9Ainfra=20=E6=A8=A1=E5=9D=97=E7=9A=84?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 1 + yudao-admin-server/pom.xml | 5 + yudao-module-infra/pom.xml | 26 +++++ .../yudao-module-infra-api/pom.xml | 26 +++++ .../yudao-module-infra-impl/pom.xml | 95 +++++++++++++++++++ 5 files changed, 153 insertions(+) create mode 100644 yudao-module-infra/pom.xml create mode 100644 yudao-module-infra/yudao-module-infra-api/pom.xml create mode 100644 yudao-module-infra/yudao-module-infra-impl/pom.xml diff --git a/pom.xml b/pom.xml index 565028205a..1b4e139ee1 100644 --- a/pom.xml +++ b/pom.xml @@ -16,6 +16,7 @@ yudao-module-member yudao-module-system + yudao-module-infra ${artifactId} diff --git a/yudao-admin-server/pom.xml b/yudao-admin-server/pom.xml index 5fe645e877..00e1edeb0b 100644 --- a/yudao-admin-server/pom.xml +++ b/yudao-admin-server/pom.xml @@ -32,6 +32,11 @@ yudao-module-system-impl ${revision} + + cn.iocoder.boot + yudao-module-infra-impl + ${revision} + diff --git a/yudao-module-infra/pom.xml b/yudao-module-infra/pom.xml new file mode 100644 index 0000000000..4b524edcc4 --- /dev/null +++ b/yudao-module-infra/pom.xml @@ -0,0 +1,26 @@ + + + + cn.iocoder.boot + yudao + ${revision} + + 4.0.0 + + yudao-module-infra + pom + + ${artifactId} + + infra 包下,我们放基础设施的è¿ç»´ä¸Žç®¡ç†ï¼Œæ”¯æ’‘上层的通用与核心业务。 + 例如说:定时任务的管ç†ã€æœåŠ¡å™¨çš„ä¿¡æ¯ç­‰ç­‰ + + + yudao-module-infra-api + yudao-module-infra-impl + + + + diff --git a/yudao-module-infra/yudao-module-infra-api/pom.xml b/yudao-module-infra/yudao-module-infra-api/pom.xml new file mode 100644 index 0000000000..b1c79c2d24 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-api/pom.xml @@ -0,0 +1,26 @@ + + + + cn.iocoder.boot + yudao-module-infra + ${revision} + + 4.0.0 + yudao-module-infra-api + jar + + ${artifactId} + + infra æ¨¡å— API,暴露给其它模å—调用 + + + + + cn.iocoder.boot + yudao-common + + + + diff --git a/yudao-module-infra/yudao-module-infra-impl/pom.xml b/yudao-module-infra/yudao-module-infra-impl/pom.xml new file mode 100644 index 0000000000..3b56c67cca --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/pom.xml @@ -0,0 +1,95 @@ + + + + cn.iocoder.boot + yudao-module-infra + ${revision} + + 4.0.0 + yudao-module-infra-impl + jar + + ${artifactId} + + infra 包下,我们放基础设施的è¿ç»´ä¸Žç®¡ç†ï¼Œæ”¯æ’‘上层的通用与核心业务。 + 例如说:定时任务的管ç†ã€æœåŠ¡å™¨çš„ä¿¡æ¯ç­‰ç­‰ + + + + + cn.iocoder.boot + yudao-module-member-api + ${revision} + + + + cn.iocoder.boot + yudao-module-system-api + ${revision} + + + + + + cn.iocoder.boot + yudao-spring-boot-starter-biz-operatelog + + + + + cn.iocoder.boot + yudao-spring-boot-starter-security + + + + + cn.iocoder.boot + yudao-spring-boot-starter-mybatis + + + + cn.iocoder.boot + yudao-spring-boot-starter-redis + + + + + cn.iocoder.boot + yudao-spring-boot-starter-mq + + + + + cn.iocoder.boot + yudao-spring-boot-starter-test + test + + + + + + + + ${artifactId} + + + + org.springframework.boot + spring-boot-maven-plugin + + true + + + + + repackage + + + + + + + + From dc11dfc21502a67bf60f661e8b97995e3f044d71 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 31 Jan 2022 13:51:40 +0800 Subject: [PATCH 19/47] =?UTF-8?q?=E5=A4=9A=E6=A8=A1=E5=9D=97=E9=87=8D?= =?UTF-8?q?=E6=9E=84=205=EF=BC=9Ainfra=20=E6=A8=A1=E5=9D=97=E7=9A=84?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../convert/config/InfConfigConvert.java | 29 ------------ .../infra/mq/consumer/package-info.java | 1 - .../infra/mq/message/package-info.java | 1 - .../infra/mq/producer/package-info.java | 1 - .../modules/infra/package-info.java | 7 --- .../test/vo/ToolTestDemoExcelVO.java | 9 ++-- .../modules/infra/convert/package-info.java | 6 --- ...‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md | 1 - .../InfApiErrorLogProcessStatusEnum.java | 28 ----------- .../modules/infra/package-info.java | 7 --- .../yudao-module-infra-impl/pom.xml | 5 ++ .../admin/config/ConfigController.java | 29 +++++++----- .../admin/config/vo/ConfigBaseVO.java | 4 +- .../admin/config/vo/ConfigCreateReqVO.java | 6 +-- .../admin/config/vo/ConfigExcelVO.java | 6 +-- .../admin/config/vo/ConfigExportReqVO.java | 4 +- .../admin/config/vo/ConfigPageReqVO.java | 4 +- .../admin/config/vo/ConfigRespVO.java | 4 +- .../admin/config/vo/ConfigUpdateReqVO.java | 4 +- .../admin}/doc/InfDbDocController.java | 2 +- .../admin}/file/InfFileController.java | 8 ++-- .../admin}/file/vo/InfFilePageReqVO.java | 2 +- .../admin}/job/InfJobController.java | 10 ++-- .../admin}/job/InfJobLogController.java | 16 +++---- .../admin}/job/vo/job/InfJobBaseVO.java | 2 +- .../admin}/job/vo/job/InfJobCreateReqVO.java | 2 +- .../admin}/job/vo/job/InfJobExcelVO.java | 6 +-- .../admin}/job/vo/job/InfJobExportReqVO.java | 2 +- .../admin}/job/vo/job/InfJobPageReqVO.java | 2 +- .../admin}/job/vo/job/InfJobRespVO.java | 2 +- .../admin}/job/vo/job/InfJobUpdateReqVO.java | 2 +- .../admin}/job/vo/log/InfJobLogBaseVO.java | 2 +- .../admin}/job/vo/log/InfJobLogExcelVO.java | 6 +-- .../job/vo/log/InfJobLogExportReqVO.java | 2 +- .../admin}/job/vo/log/InfJobLogPageReqVO.java | 2 +- .../admin}/job/vo/log/InfJobLogRespVO.java | 2 +- .../logger/InfApiAccessLogController.java | 14 +++--- .../logger/InfApiErrorLogController.java | 14 +++--- .../apiaccesslog/InfApiAccessLogBaseVO.java | 2 +- .../apiaccesslog/InfApiAccessLogExcelVO.java | 2 +- .../InfApiAccessLogExportReqVO.java | 2 +- .../InfApiAccessLogPageReqVO.java | 2 +- .../apiaccesslog/InfApiAccessLogRespVO.java | 2 +- .../vo/apierrorlog/InfApiErrorLogBaseVO.java | 2 +- .../vo/apierrorlog/InfApiErrorLogExcelVO.java | 6 +-- .../InfApiErrorLogExportReqVO.java | 2 +- .../apierrorlog/InfApiErrorLogPageReqVO.java | 2 +- .../vo/apierrorlog/InfApiErrorLogRespVO.java | 2 +- .../admin}/redis/RedisController.http | 0 .../admin}/redis/RedisController.java | 8 ++-- .../admin}/redis/vo/InfRedisKeyRespVO.java | 2 +- .../redis/vo/InfRedisMonitorRespVO.java | 2 +- .../infra/controller/app/package-info.java | 4 ++ .../module/infra/controller/package-info.java | 6 +++ .../convert/config/InfConfigConvert.java | 29 ++++++++++++ .../infra/convert/file/InfFileConvert.java | 2 +- .../infra/convert/job/InfJobConvert.java | 12 ++--- .../infra/convert/job/InfJobLogConvert.java | 8 ++-- .../logger/InfApiAccessLogConvert.java | 6 +-- .../logger/InfApiAccessLogCoreConvert.java | 2 +- .../convert/logger/InfApiErrorLogConvert.java | 6 +-- .../logger/InfApiErrorLogCoreConvert.java | 2 +- .../module}/infra/convert/package-info.java | 2 +- .../infra/convert/redis/RedisConvert.java | 6 +-- ...‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md | 0 .../dal/dataobject/config/InfConfigDO.java | 2 +- .../infra/dal/dataobject/file/InfFileDO.java | 2 +- .../infra/dal/dataobject/job/InfJobDO.java | 4 +- .../infra/dal/dataobject/job/InfJobLogDO.java | 4 +- .../dataobject/logger/InfApiAccessLogDO.java | 2 +- .../dataobject/logger/InfApiErrorLogDO.java | 2 +- .../mysql/config/InfConfigCoreDAOImpl.java | 2 +- .../dal/mysql/config/InfConfigMapper.java | 10 ++-- .../dal/mysql/file/InfFileCoreMapper.java | 2 +- .../infra/dal/mysql/file/InfFileMapper.java | 4 +- .../infra/dal/mysql/job/InfJobLogMapper.java | 8 ++-- .../infra/dal/mysql/job/InfJobMapper.java | 8 ++-- .../logger/InfApiAccessLogCoreMapper.java | 2 +- .../mysql/logger/InfApiAccessLogMapper.java | 6 +-- .../logger/InfApiErrorLogCoreMapper.java | 2 +- .../mysql/logger/InfApiErrorLogMapper.java | 6 +-- .../module/infra/enums/DictTypeConstants.java | 7 ++- .../infra/enums/InfErrorCodeConstants.java | 2 +- .../infra/enums/SysErrorCodeConstants.java | 2 +- .../infra/enums/config/InfConfigTypeEnum.java | 2 +- .../infra/enums/job/InfJobLogStatusEnum.java | 2 +- .../infra/enums/job/InfJobStatusEnum.java | 6 +-- .../InfApiErrorLogProcessStatusEnum.java | 2 +- .../infra}/file/config/FileConfiguration.java | 2 +- .../infra}/file/config/FileProperties.java | 2 +- .../module/infra}/file/package-info.java | 0 .../module}/infra/framework/package-info.java | 2 +- .../config/InfConfigRefreshConsumer.java | 4 +- .../infra/mq/consumer/package-info.java | 1 + .../config/InfConfigRefreshMessage.java | 2 +- .../module/infra/mq/message/package-info.java | 1 + .../mq/producer/config/InfConfigProducer.java | 4 +- .../infra/mq/producer/package-info.java | 1 + .../yudao/module/infra/package-info.java | 8 ++++ .../service/config/InfConfigService.java | 18 +++---- .../config/impl/InfConfigServiceImpl.java | 39 ++++++++------- .../service/file/InfFileCoreService.java | 2 +- .../infra/service/file/InfFileService.java | 4 +- .../file/impl/InfFileCoreServiceImpl.java | 2 +- .../service/file/impl/InfFileServiceImpl.java | 8 ++-- .../infra/service/job/InfJobLogService.java | 8 ++-- .../infra/service/job/InfJobService.java | 12 ++--- .../job/impl/InfJobLogServiceImpl.java | 14 +++--- .../service/job/impl/InfJobServiceImpl.java | 22 ++++----- .../logger/InfApiAccessLogCoreService.java | 2 +- .../logger/InfApiAccessLogService.java | 6 +-- .../logger/InfApiErrorLogCoreService.java | 2 +- .../service/logger/InfApiErrorLogService.java | 6 +-- .../impl/InfApiAccessLogCoreServiceImpl.java | 2 +- .../impl/InfApiAccessLogServiceImpl.java | 10 ++-- .../impl/InfApiErrorLogCoreServiceImpl.java | 2 +- .../impl/InfApiErrorLogServiceImpl.java | 20 ++++---- .../yudao/module/infra}/vo/InfFileRespVO.java | 2 +- .../yudao/module/infra/package-info.java | 1 + .../service/config/InfConfigServiceTest.java | 34 +++++++------- .../service/file/InfFileServiceTest.java | 10 ++-- .../service/job/InfJobLogServiceTest.java | 14 +++--- .../infra/service/job/InfJobServiceTest.java | 32 ++++++------- .../InfApiAccessLogServiceImplTest.java | 10 ++-- .../logger/InfApiErrorLogServiceImplTest.java | 21 +++++---- .../infra/test/BaseDbAndRedisUnitTest.java | 47 +++++++++++++++++++ .../module/infra/test/BaseDbUnitTest.java | 39 +++++++++++++++ .../infra/test}/QuartzTestConfiguration.java | 2 +- .../infra/test/RedisTestConfiguration.java | 30 ++++++++++++ .../system/enums/DictTypeConstants.java | 3 +- 130 files changed, 507 insertions(+), 408 deletions(-) delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/config/InfConfigConvert.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/mq/consumer/package-info.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/mq/message/package-info.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/mq/producer/package-info.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/package-info.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/convert/package-info.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/enums/logger/InfApiErrorLogProcessStatusEnum.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/package-info.java rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/InfConfigController.java => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/ConfigController.java (77%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigBaseVO.java => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigBaseVO.java (93%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigCreateReqVO.java => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigCreateReqVO.java (74%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigExcelVO.java => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigExcelVO.java (85%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigExportReqVO.java => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigExportReqVO.java (90%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigPageReqVO.java => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigPageReqVO.java (90%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigRespVO.java => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigRespVO.java (88%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigUpdateReqVO.java => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigUpdateReqVO.java (78%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/doc/InfDbDocController.java (99%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/file/InfFileController.java (91%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/file/vo/InfFilePageReqVO.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/job/InfJobController.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/job/InfJobLogController.java (83%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/job/vo/job/InfJobBaseVO.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/job/vo/job/InfJobCreateReqVO.java (88%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/job/vo/job/InfJobExcelVO.java (86%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/job/vo/job/InfJobExportReqVO.java (90%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/job/vo/job/InfJobPageReqVO.java (91%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/job/vo/job/InfJobRespVO.java (92%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/job/vo/job/InfJobUpdateReqVO.java (87%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/job/vo/log/InfJobLogBaseVO.java (96%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/job/vo/log/InfJobLogExcelVO.java (84%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/job/vo/log/InfJobLogExportReqVO.java (93%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/job/vo/log/InfJobLogPageReqVO.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/job/vo/log/InfJobLogRespVO.java (88%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/logger/InfApiAccessLogController.java (77%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/logger/InfApiErrorLogController.java (82%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/logger/vo/apiaccesslog/InfApiAccessLogBaseVO.java (97%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/logger/vo/apiaccesslog/InfApiAccessLogExcelVO.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/logger/vo/apiaccesslog/InfApiAccessLogExportReqVO.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/logger/vo/apiaccesslog/InfApiAccessLogPageReqVO.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/logger/vo/apiaccesslog/InfApiAccessLogRespVO.java (86%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/logger/vo/apierrorlog/InfApiErrorLogBaseVO.java (97%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/logger/vo/apierrorlog/InfApiErrorLogExcelVO.java (90%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/logger/vo/apierrorlog/InfApiErrorLogExportReqVO.java (93%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/logger/vo/apierrorlog/InfApiErrorLogPageReqVO.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/logger/vo/apierrorlog/InfApiErrorLogRespVO.java (89%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/redis/RedisController.http (100%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/redis/RedisController.java (86%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/redis/vo/InfRedisKeyRespVO.java (93%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin}/redis/vo/InfRedisMonitorRespVO.java (94%) create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/app/package-info.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/package-info.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/config/InfConfigConvert.java rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/convert/file/InfFileConvert.java (88%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/convert/job/InfJobConvert.java (56%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/convert/job/InfJobLogConvert.java (64%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/convert/logger/InfApiAccessLogConvert.java (72%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/convert/logger/InfApiAccessLogCoreConvert.java (87%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/convert/logger/InfApiErrorLogConvert.java (70%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/convert/logger/InfApiErrorLogCoreConvert.java (87%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/convert/package-info.java (56%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/convert/redis/RedisConvert.java (82%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md (100%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/dal/dataobject/config/InfConfigDO.java (94%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/dal/dataobject/file/InfFileDO.java (93%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/dal/dataobject/job/InfJobDO.java (90%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/dal/dataobject/job/InfJobLogDO.java (91%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/dal/dataobject/logger/InfApiAccessLogDO.java (96%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/dal/dataobject/logger/InfApiErrorLogDO.java (97%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/dal/mysql/config/InfConfigCoreDAOImpl.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/dal/mysql/config/InfConfigMapper.java (76%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/dal/mysql/file/InfFileCoreMapper.java (92%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/dal/mysql/file/InfFileMapper.java (84%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/dal/mysql/job/InfJobLogMapper.java (81%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/dal/mysql/job/InfJobMapper.java (79%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/dal/mysql/logger/InfApiAccessLogCoreMapper.java (83%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/dal/mysql/logger/InfApiAccessLogMapper.java (86%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/dal/mysql/logger/InfApiErrorLogCoreMapper.java (81%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/dal/mysql/logger/InfApiErrorLogMapper.java (86%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/enums/InfDictTypeConstants.java => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/DictTypeConstants.java (69%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/enums/InfErrorCodeConstants.java (96%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/enums/SysErrorCodeConstants.java (87%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/enums/config/InfConfigTypeEnum.java (80%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/enums/job/InfJobLogStatusEnum.java (84%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/enums/job/InfJobStatusEnum.java (72%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/enums/logger/InfApiErrorLogProcessStatusEnum.java (86%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/framework => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra}/file/config/FileConfiguration.java (78%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/framework => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra}/file/config/FileProperties.java (86%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/framework => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra}/file/package-info.java (100%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/framework/package-info.java (55%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/mq/consumer/config/InfConfigRefreshConsumer.java (79%) create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/consumer/package-info.java rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/mq/message/config/InfConfigRefreshMessage.java (81%) create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/message/package-info.java rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/mq/producer/config/InfConfigProducer.java (76%) create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/producer/package-info.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/package-info.java rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/service/config/InfConfigService.java (62%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/service/config/impl/InfConfigServiceImpl.java (67%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/service/file/InfFileCoreService.java (90%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/service/file/InfFileService.java (73%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/service/file/impl/InfFileCoreServiceImpl.java (96%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/service/file/impl/InfFileServiceImpl.java (66%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/service/job/InfJobLogService.java (76%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/service/job/InfJobService.java (78%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/service/job/impl/InfJobLogServiceImpl.java (79%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/service/job/impl/InfJobServiceImpl.java (86%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/service/logger/InfApiAccessLogCoreService.java (78%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/service/logger/InfApiAccessLogService.java (72%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/service/logger/InfApiErrorLogCoreService.java (78%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/service/logger/InfApiErrorLogService.java (78%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/service/logger/impl/InfApiAccessLogCoreServiceImpl.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/service/logger/impl/InfApiAccessLogServiceImpl.java (65%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/service/logger/impl/InfApiErrorLogCoreServiceImpl.java (95%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module}/infra/service/logger/impl/InfApiErrorLogServiceImpl.java (63%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/controller/file => yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra}/vo/InfFileRespVO.java (88%) create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/package-info.java rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module}/infra/service/config/InfConfigServiceTest.java (86%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module}/infra/service/file/InfFileServiceTest.java (85%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module}/infra/service/job/InfJobLogServiceTest.java (92%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module}/infra/service/job/InfJobServiceTest.java (89%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module}/infra/service/logger/InfApiAccessLogServiceImplTest.java (93%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules => yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module}/infra/service/logger/InfApiErrorLogServiceImplTest.java (89%) create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/test/BaseDbAndRedisUnitTest.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/test/BaseDbUnitTest.java rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/config => yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/test}/QuartzTestConfiguration.java (87%) create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/test/RedisTestConfiguration.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/config/InfConfigConvert.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/config/InfConfigConvert.java deleted file mode 100644 index 4a5eaf2f73..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/config/InfConfigConvert.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.infra.convert.config; - -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.config.InfConfigDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo.InfConfigCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo.InfConfigExcelVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo.InfConfigRespVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo.InfConfigUpdateReqVO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -@Mapper -public interface InfConfigConvert { - - InfConfigConvert INSTANCE = Mappers.getMapper(InfConfigConvert.class); - - PageResult convertPage(PageResult page); - - InfConfigRespVO convert(InfConfigDO bean); - - InfConfigDO convert(InfConfigCreateReqVO bean); - - InfConfigDO convert(InfConfigUpdateReqVO bean); - - List convertList(List list); - -} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/mq/consumer/package-info.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/mq/consumer/package-info.java deleted file mode 100644 index f73455a304..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/mq/consumer/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.infra.mq.consumer; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/mq/message/package-info.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/mq/message/package-info.java deleted file mode 100644 index 9db3856431..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/mq/message/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.infra.mq.message; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/mq/producer/package-info.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/mq/producer/package-info.java deleted file mode 100644 index 0112c34857..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/mq/producer/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.infra.mq.producer; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/package-info.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/package-info.java deleted file mode 100644 index b97607f354..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -/** - * infra 包下,我们放基础设施的è¿ç»´ä¸Žç®¡ç†ï¼Œæ”¯æ’‘上层的通用与核心业务。 - * 例如说:定时任务的管ç†ã€æœåŠ¡å™¨çš„ä¿¡æ¯ç­‰ç­‰ - * - * 缩写:inf - */ -package cn.iocoder.yudao.adminserver.modules.infra; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoExcelVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoExcelVO.java index e7a98b6f19..384c08bc52 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoExcelVO.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoExcelVO.java @@ -2,8 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.tool.controller.test.vo; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.adminserver.modules.infra.enums.InfDictTypeConstants; -import cn.iocoder.yudao.module.system.enums.DictTypeConstants; +import cn.iocoder.yudao.module.infra.enums.DictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @@ -24,15 +23,15 @@ public class ToolTestDemoExcelVO { private String name; @ExcelProperty(value = "状æ€", converter = DictConvert.class) - @DictFormat(DictTypeConstants.COMMON_STATUS) + @DictFormat(cn.iocoder.yudao.module.system.enums.DictTypeConstants.COMMON_STATUS) private Integer status; @ExcelProperty(value = "类型", converter = DictConvert.class) - @DictFormat(DictTypeConstants.OPERATE_TYPE) + @DictFormat(cn.iocoder.yudao.module.system.enums.DictTypeConstants.OPERATE_TYPE) private Integer type; @ExcelProperty(value = "分类", converter = DictConvert.class) - @DictFormat(InfDictTypeConstants.REDIS_TIMEOUT_TYPE) + @DictFormat(DictTypeConstants.REDIS_TIMEOUT_TYPE) private Integer category; @ExcelProperty("备注") diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/convert/package-info.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/convert/package-info.java deleted file mode 100644 index bdb8ce7a3a..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/convert/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -/** - * æä¾› POJO ç±»çš„å®žä½“è½¬æ¢ - * - * ç›®å‰ä½¿ç”¨ MapStruct 框架 - */ -package cn.iocoder.yudao.coreservice.modules.infra.convert; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md deleted file mode 100644 index 8153487b72..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/enums/logger/InfApiErrorLogProcessStatusEnum.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/enums/logger/InfApiErrorLogProcessStatusEnum.java deleted file mode 100644 index cba1d02dd8..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/enums/logger/InfApiErrorLogProcessStatusEnum.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.infra.enums.logger; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -/** - * API 异常数æ®çš„处ç†çŠ¶æ€ - * - * @author èŠ‹é“æºç  - */ -@AllArgsConstructor -@Getter -public enum InfApiErrorLogProcessStatusEnum { - - INIT(0, "未处ç†"), - DONE(1, "已处ç†"), - IGNORE(2, "已忽略"); - - /** - * çŠ¶æ€ - */ - private final Integer status; - /** - * 资æºç±»åž‹å - */ - private final String name; - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/package-info.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/package-info.java deleted file mode 100644 index 1f011d6a1e..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -/** - * infra 包下,我们放基础设施的è¿ç»´ä¸Žç®¡ç†ï¼Œæ”¯æ’‘上层的通用与核心业务。 - * 例如说:定时任务的管ç†ã€æœåŠ¡å™¨çš„ä¿¡æ¯ç­‰ç­‰ - * - * 缩写:inf - */ -package cn.iocoder.yudao.coreservice.modules.infra; diff --git a/yudao-module-infra/yudao-module-infra-impl/pom.xml b/yudao-module-infra/yudao-module-infra-impl/pom.xml index 3b56c67cca..9c98f6d622 100644 --- a/yudao-module-infra/yudao-module-infra-impl/pom.xml +++ b/yudao-module-infra/yudao-module-infra-impl/pom.xml @@ -66,7 +66,12 @@ yudao-spring-boot-starter-test test + + + cn.iocoder.boot + yudao-spring-boot-starter-excel + diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/InfConfigController.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/ConfigController.java similarity index 77% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/InfConfigController.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/ConfigController.java index 3167a09d17..5bad8d83c9 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/InfConfigController.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/ConfigController.java @@ -1,13 +1,17 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.config; +package cn.iocoder.yudao.module.infra.controller.admin.config; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.config.InfConfigDO; +import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; import cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo.*; -import cn.iocoder.yudao.adminserver.modules.infra.convert.config.InfConfigConvert; -import cn.iocoder.yudao.adminserver.modules.infra.service.config.InfConfigService; +import cn.iocoder.yudao.module.infra.controller.admin.config.vo.*; +import cn.iocoder.yudao.module.infra.convert.config.InfConfigConvert; +import cn.iocoder.yudao.module.infra.service.config.InfConfigService; +import cn.iocoder.yudao.module.infra.controller.config.vo.*; +import cn.iocoder.yudao.module.infra.enums.InfErrorCodeConstants; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; @@ -24,13 +28,12 @@ import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; -import static cn.iocoder.yudao.adminserver.modules.infra.enums.InfErrorCodeConstants.CONFIG_GET_VALUE_ERROR_IF_SENSITIVE; @Api(tags = "傿•°é…ç½®") @RestController @RequestMapping("/infra/config") @Validated -public class InfConfigController { +public class ConfigController { @Resource private InfConfigService configService; @@ -38,14 +41,14 @@ public class InfConfigController { @PostMapping("/create") @ApiOperation("åˆ›å»ºå‚æ•°é…ç½®") @PreAuthorize("@ss.hasPermission('infra:config:create')") - public CommonResult createConfig(@Valid @RequestBody InfConfigCreateReqVO reqVO) { + public CommonResult createConfig(@Valid @RequestBody ConfigCreateReqVO reqVO) { return success(configService.createConfig(reqVO)); } @PutMapping("/update") @ApiOperation("ä¿®æ”¹å‚æ•°é…ç½®") @PreAuthorize("@ss.hasPermission('infra:config:update')") - public CommonResult updateConfig(@Valid @RequestBody InfConfigUpdateReqVO reqVO) { + public CommonResult updateConfig(@Valid @RequestBody ConfigUpdateReqVO reqVO) { configService.updateConfig(reqVO); return success(true); } @@ -63,7 +66,7 @@ public class InfConfigController { @ApiOperation("èŽ·å¾—å‚æ•°é…ç½®") @ApiImplicitParam(name = "id", value = "ç¼–å·", required = true, example = "1024", dataTypeClass = Long.class) @PreAuthorize("@ss.hasPermission('infra:config:query')") - public CommonResult getConfig(@RequestParam("id") Long id) { + public CommonResult getConfig(@RequestParam("id") Long id) { return success(InfConfigConvert.INSTANCE.convert(configService.getConfig(id))); } @@ -76,7 +79,7 @@ public class InfConfigController { return null; } if (config.getSensitive()) { - throw exception(CONFIG_GET_VALUE_ERROR_IF_SENSITIVE); + throw ServiceExceptionUtil.exception(InfErrorCodeConstants.CONFIG_GET_VALUE_ERROR_IF_SENSITIVE); } return success(config.getValue()); } @@ -84,7 +87,7 @@ public class InfConfigController { @GetMapping("/page") @ApiOperation("获å–傿•°é…置分页") @PreAuthorize("@ss.hasPermission('infra:config:query')") - public CommonResult> getConfigPage(@Valid InfConfigPageReqVO reqVO) { + public CommonResult> getConfigPage(@Valid ConfigPageReqVO reqVO) { PageResult page = configService.getConfigPage(reqVO); return success(InfConfigConvert.INSTANCE.convertPage(page)); } @@ -93,13 +96,13 @@ public class InfConfigController { @ApiOperation("å¯¼å‡ºå‚æ•°é…ç½®") @PreAuthorize("@ss.hasPermission('infra:config:export')") @OperateLog(type = EXPORT) - public void exportSysConfig(@Valid InfConfigExportReqVO reqVO, + public void exportSysConfig(@Valid ConfigExportReqVO reqVO, HttpServletResponse response) throws IOException { List list = configService.getConfigList(reqVO); // æ‹¼æŽ¥æ•°æ® - List datas = InfConfigConvert.INSTANCE.convertList(list); + List datas = InfConfigConvert.INSTANCE.convertList(list); // 输出 - ExcelUtils.write(response, "傿•°é…ç½®.xls", "æ•°æ®", InfConfigExcelVO.class, datas); + ExcelUtils.write(response, "傿•°é…ç½®.xls", "æ•°æ®", ConfigExcelVO.class, datas); } } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigBaseVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigBaseVO.java similarity index 93% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigBaseVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigBaseVO.java index 82b0f48edb..bf1c26d73d 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigBaseVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo; +package cn.iocoder.yudao.module.infra.controller.admin.config.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -13,7 +13,7 @@ import javax.validation.constraints.Size; * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ */ @Data -public class InfConfigBaseVO { +public class ConfigBaseVO { @ApiModelProperty(value = "傿•°åˆ†ç»„", required = true, example = "biz") @NotEmpty(message = "傿•°åˆ†ç»„ä¸èƒ½ä¸ºç©º") diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigCreateReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigCreateReqVO.java similarity index 74% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigCreateReqVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigCreateReqVO.java index ee2b90abc6..7a2118ae1c 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigCreateReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo; +package cn.iocoder.yudao.module.infra.controller.admin.config.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -8,10 +8,10 @@ import lombok.EqualsAndHashCode; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Size; -@ApiModel("傿•°é…置创建 Request VO") +@ApiModel("管ç†åŽå° - 傿•°é…置创建 Request VO") @Data @EqualsAndHashCode(callSuper = true) -public class InfConfigCreateReqVO extends InfConfigBaseVO { +public class ConfigCreateReqVO extends ConfigBaseVO { @ApiModelProperty(value = "傿•°é”®å", required = true, example = "yunai.db.username") @NotBlank(message = "傿•°é”®å长度ä¸èƒ½ä¸ºç©º") diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigExcelVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigExcelVO.java similarity index 85% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigExcelVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigExcelVO.java index 63b8087446..908981e0ae 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigExcelVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigExcelVO.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo; +package cn.iocoder.yudao.module.infra.controller.admin.config.vo; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.module.system.enums.DictTypeConstants; +import cn.iocoder.yudao.module.infra.enums.DictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @@ -12,7 +12,7 @@ import java.util.Date; * 傿•°é…ç½® Excel 导出å“应 VO */ @Data -public class InfConfigExcelVO { +public class ConfigExcelVO { @ExcelProperty("傿•°é…ç½®åºå·") private Long id; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigExportReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigExportReqVO.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigExportReqVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigExportReqVO.java index 550a5dfc4c..73ee016cdc 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigExportReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo; +package cn.iocoder.yudao.module.infra.controller.admin.config.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -11,7 +11,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ @ApiModel("傿•°é…置导出 Request VO") @Data -public class InfConfigExportReqVO { +public class ConfigExportReqVO { @ApiModelProperty(value = "傿•°åç§°", example = "模糊匹é…") private String name; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigPageReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigPageReqVO.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigPageReqVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigPageReqVO.java index 3f031fa2cb..e97585f746 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigPageReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo; +package cn.iocoder.yudao.module.infra.controller.admin.config.vo; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; @@ -16,7 +16,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class InfConfigPageReqVO extends PageParam { +public class ConfigPageReqVO extends PageParam { @ApiModelProperty(value = "傿•°åç§°", example = "模糊匹é…") private String name; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigRespVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigRespVO.java similarity index 88% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigRespVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigRespVO.java index 84689b70b7..464eb030db 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigRespVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo; +package cn.iocoder.yudao.module.infra.controller.admin.config.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -12,7 +12,7 @@ import java.util.Date; @ApiModel("傿•°é…ç½®ä¿¡æ¯ Response VO") @Data @EqualsAndHashCode(callSuper = true) -public class InfConfigRespVO extends InfConfigBaseVO { +public class ConfigRespVO extends ConfigBaseVO { @ApiModelProperty(value = "傿•°é…ç½®åºå·", required = true, example = "1024") private Long id; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigUpdateReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigUpdateReqVO.java similarity index 78% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigUpdateReqVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigUpdateReqVO.java index 7e9d49ca79..5de7ea3b73 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/config/vo/InfConfigUpdateReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo; +package cn.iocoder.yudao.module.infra.controller.admin.config.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -12,7 +12,7 @@ import javax.validation.constraints.NotNull; @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class InfConfigUpdateReqVO extends InfConfigBaseVO { +public class ConfigUpdateReqVO extends ConfigBaseVO { @ApiModelProperty(value = "傿•°é…ç½®åºå·", required = true, example = "1024") @NotNull(message = "傿•°é…置编å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/doc/InfDbDocController.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/doc/InfDbDocController.java similarity index 99% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/doc/InfDbDocController.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/doc/InfDbDocController.java index 48b52f88ab..e8533e5cc2 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/doc/InfDbDocController.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/doc/InfDbDocController.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.doc; +package cn.iocoder.yudao.module.infra.controller.admin.doc; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.IdUtil; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/file/InfFileController.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/InfFileController.java similarity index 91% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/file/InfFileController.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/InfFileController.java index f0c85ddce3..7d7d46b83c 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/file/InfFileController.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/InfFileController.java @@ -1,14 +1,14 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.file; +package cn.iocoder.yudao.module.infra.controller.admin.file; import cn.hutool.core.io.IoUtil; -import cn.iocoder.yudao.adminserver.modules.infra.service.file.InfFileService; -import cn.iocoder.yudao.adminserver.modules.infra.controller.file.vo.InfFilePageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.InfFilePageReqVO; +import cn.iocoder.yudao.module.infra.service.file.InfFileService; import cn.iocoder.yudao.coreservice.modules.infra.controller.file.vo.InfFileRespVO; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO; import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.infra.convert.file.InfFileConvert; +import cn.iocoder.yudao.module.infra.convert.file.InfFileConvert; import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; import io.swagger.annotations.Api; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/file/vo/InfFilePageReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/InfFilePageReqVO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/file/vo/InfFilePageReqVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/InfFilePageReqVO.java index 152466a19c..5b639cc391 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/file/vo/InfFilePageReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/InfFilePageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.file.vo; +package cn.iocoder.yudao.module.infra.controller.admin.file.vo; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/InfJobController.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/InfJobController.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/InfJobController.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/InfJobController.java index 1cd3c8dc7c..f153f3f6ee 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/InfJobController.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/InfJobController.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.job; +package cn.iocoder.yudao.module.infra.controller.admin.job; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -6,9 +6,11 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; import cn.iocoder.yudao.framework.quartz.core.util.CronUtils; import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.job.*; -import cn.iocoder.yudao.adminserver.modules.infra.convert.job.InfJobConvert; -import cn.iocoder.yudao.adminserver.modules.infra.dal.dataobject.job.InfJobDO; -import cn.iocoder.yudao.adminserver.modules.infra.service.job.InfJobService; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.*; +import cn.iocoder.yudao.module.infra.convert.job.InfJobConvert; +import cn.iocoder.yudao.module.infra.dal.dataobject.job.InfJobDO; +import cn.iocoder.yudao.module.infra.service.job.InfJobService; +import cn.iocoder.yudao.module.infra.controller.job.vo.job.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/InfJobLogController.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/InfJobLogController.java similarity index 83% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/InfJobLogController.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/InfJobLogController.java index d6e263980c..eb1211f324 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/InfJobLogController.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/InfJobLogController.java @@ -1,16 +1,16 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.job; +package cn.iocoder.yudao.module.infra.controller.admin.job; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.log.InfJobLogExcelVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.log.InfJobLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.log.InfJobLogPageReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.log.InfJobLogRespVO; -import cn.iocoder.yudao.adminserver.modules.infra.convert.job.InfJobLogConvert; -import cn.iocoder.yudao.adminserver.modules.infra.dal.dataobject.job.InfJobLogDO; -import cn.iocoder.yudao.adminserver.modules.infra.service.job.InfJobLogService; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.InfJobLogExcelVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.InfJobLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.InfJobLogPageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.InfJobLogRespVO; +import cn.iocoder.yudao.module.infra.convert.job.InfJobLogConvert; +import cn.iocoder.yudao.module.infra.dal.dataobject.job.InfJobLogDO; +import cn.iocoder.yudao.module.infra.service.job.InfJobLogService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/job/InfJobBaseVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobBaseVO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/job/InfJobBaseVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobBaseVO.java index 2d7b51f24c..b0e0ead2bd 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/job/InfJobBaseVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.job; +package cn.iocoder.yudao.module.infra.controller.admin.job.vo.job; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/job/InfJobCreateReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobCreateReqVO.java similarity index 88% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/job/InfJobCreateReqVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobCreateReqVO.java index b2325d7414..5548c257c9 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/job/InfJobCreateReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.job; +package cn.iocoder.yudao.module.infra.controller.admin.job.vo.job; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/job/InfJobExcelVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobExcelVO.java similarity index 86% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/job/InfJobExcelVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobExcelVO.java index 0d9daf8ebe..bffaaba232 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/job/InfJobExcelVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobExcelVO.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.job; +package cn.iocoder.yudao.module.infra.controller.admin.job.vo.job; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.adminserver.modules.infra.enums.InfDictTypeConstants; +import cn.iocoder.yudao.module.infra.enums.DictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @@ -23,7 +23,7 @@ public class InfJobExcelVO { private String name; @ExcelProperty(value = "任务状æ€", converter = DictConvert.class) - @DictFormat(InfDictTypeConstants.JOB_STATUS) + @DictFormat(DictTypeConstants.JOB_STATUS) private Integer status; @ExcelProperty("处ç†å™¨çš„åå­—") diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/job/InfJobExportReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobExportReqVO.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/job/InfJobExportReqVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobExportReqVO.java index 9c578e96c6..f30839f856 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/job/InfJobExportReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.job; +package cn.iocoder.yudao.module.infra.controller.admin.job.vo.job; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/job/InfJobPageReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobPageReqVO.java similarity index 91% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/job/InfJobPageReqVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobPageReqVO.java index eec31e9b3b..edfc425a51 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/job/InfJobPageReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.job; +package cn.iocoder.yudao.module.infra.controller.admin.job.vo.job; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/job/InfJobRespVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobRespVO.java similarity index 92% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/job/InfJobRespVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobRespVO.java index ffe3a69145..0b59518f3c 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/job/InfJobRespVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.job; +package cn.iocoder.yudao.module.infra.controller.admin.job.vo.job; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/job/InfJobUpdateReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobUpdateReqVO.java similarity index 87% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/job/InfJobUpdateReqVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobUpdateReqVO.java index d741a98e4e..1722bbf316 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/job/InfJobUpdateReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.job; +package cn.iocoder.yudao.module.infra.controller.admin.job.vo.job; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/log/InfJobLogBaseVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogBaseVO.java similarity index 96% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/log/InfJobLogBaseVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogBaseVO.java index 0dbd67e9c0..78a33107ee 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/log/InfJobLogBaseVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.log; +package cn.iocoder.yudao.module.infra.controller.admin.job.vo.log; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/log/InfJobLogExcelVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogExcelVO.java similarity index 84% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/log/InfJobLogExcelVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogExcelVO.java index fd7078b70e..7c10bdc98c 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/log/InfJobLogExcelVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogExcelVO.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.log; +package cn.iocoder.yudao.module.infra.controller.admin.job.vo.log; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.adminserver.modules.infra.enums.InfDictTypeConstants; +import cn.iocoder.yudao.module.infra.enums.DictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @@ -41,7 +41,7 @@ public class InfJobLogExcelVO { private Integer duration; @ExcelProperty(value = "任务状æ€", converter = DictConvert.class) - @DictFormat(InfDictTypeConstants.JOB_STATUS) + @DictFormat(DictTypeConstants.JOB_STATUS) private Integer status; @ExcelProperty("结果数æ®") diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/log/InfJobLogExportReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogExportReqVO.java similarity index 93% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/log/InfJobLogExportReqVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogExportReqVO.java index 3e3e85b58d..432b2d6da3 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/log/InfJobLogExportReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.log; +package cn.iocoder.yudao.module.infra.controller.admin.job.vo.log; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/log/InfJobLogPageReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogPageReqVO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/log/InfJobLogPageReqVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogPageReqVO.java index 0c5b558671..da3d5e3a61 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/log/InfJobLogPageReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.log; +package cn.iocoder.yudao.module.infra.controller.admin.job.vo.log; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/log/InfJobLogRespVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogRespVO.java similarity index 88% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/log/InfJobLogRespVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogRespVO.java index 497e6913d9..fa0e959d8b 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/job/vo/log/InfJobLogRespVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.log; +package cn.iocoder.yudao.module.infra.controller.admin.job.vo.log; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/InfApiAccessLogController.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/InfApiAccessLogController.java similarity index 77% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/InfApiAccessLogController.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/InfApiAccessLogController.java index 3aec60d4fe..1c3ef1a069 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/InfApiAccessLogController.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/InfApiAccessLogController.java @@ -1,16 +1,16 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.logger; +package cn.iocoder.yudao.module.infra.controller.admin.logger; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiAccessLogDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogExcelVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogPageReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogRespVO; -import cn.iocoder.yudao.adminserver.modules.infra.convert.logger.InfApiAccessLogConvert; -import cn.iocoder.yudao.adminserver.modules.infra.service.logger.InfApiAccessLogService; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.InfApiAccessLogExcelVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.InfApiAccessLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.InfApiAccessLogPageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.InfApiAccessLogRespVO; +import cn.iocoder.yudao.module.infra.convert.logger.InfApiAccessLogConvert; +import cn.iocoder.yudao.module.infra.service.logger.InfApiAccessLogService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/InfApiErrorLogController.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/InfApiErrorLogController.java similarity index 82% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/InfApiErrorLogController.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/InfApiErrorLogController.java index 7b83022ca1..db46bb2538 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/InfApiErrorLogController.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/InfApiErrorLogController.java @@ -1,16 +1,16 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.logger; +package cn.iocoder.yudao.module.infra.controller.admin.logger; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiErrorLogDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apierrorlog.InfApiErrorLogExcelVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apierrorlog.InfApiErrorLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apierrorlog.InfApiErrorLogPageReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apierrorlog.InfApiErrorLogRespVO; -import cn.iocoder.yudao.adminserver.modules.infra.convert.logger.InfApiErrorLogConvert; -import cn.iocoder.yudao.adminserver.modules.infra.service.logger.InfApiErrorLogService; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.InfApiErrorLogExcelVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.InfApiErrorLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.InfApiErrorLogPageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.InfApiErrorLogRespVO; +import cn.iocoder.yudao.module.infra.convert.logger.InfApiErrorLogConvert; +import cn.iocoder.yudao.module.infra.service.logger.InfApiErrorLogService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogBaseVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogBaseVO.java similarity index 97% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogBaseVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogBaseVO.java index d5e300f629..6e44f4eb09 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogBaseVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apiaccesslog; +package cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogExcelVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogExcelVO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogExcelVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogExcelVO.java index c69969b4b0..1d4e8b5306 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogExcelVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogExcelVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apiaccesslog; +package cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogExportReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogExportReqVO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogExportReqVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogExportReqVO.java index 8e9dc409de..37ddddc010 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogExportReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apiaccesslog; +package cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogPageReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogPageReqVO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogPageReqVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogPageReqVO.java index c04520528b..385dab1f0a 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogPageReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apiaccesslog; +package cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogRespVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogRespVO.java similarity index 86% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogRespVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogRespVO.java index 15dbed3e14..c6b74d48d9 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogRespVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apiaccesslog; +package cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apierrorlog/InfApiErrorLogBaseVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogBaseVO.java similarity index 97% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apierrorlog/InfApiErrorLogBaseVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogBaseVO.java index 87eb2ddd66..d5d6d3ce1d 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apierrorlog/InfApiErrorLogBaseVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apierrorlog; +package cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apierrorlog/InfApiErrorLogExcelVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogExcelVO.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apierrorlog/InfApiErrorLogExcelVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogExcelVO.java index dfae3311ac..06b1da33b4 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apierrorlog/InfApiErrorLogExcelVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogExcelVO.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apierrorlog; +package cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.adminserver.modules.infra.enums.InfDictTypeConstants; +import cn.iocoder.yudao.module.infra.enums.DictTypeConstants; import cn.iocoder.yudao.module.system.enums.DictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @@ -79,7 +79,7 @@ public class InfApiErrorLogExcelVO { private Date createTime; @ExcelProperty(value = "处ç†çжæ€", converter = DictConvert.class) - @DictFormat(InfDictTypeConstants.API_ERROR_LOG_PROCESS_STATUS) + @DictFormat(DictTypeConstants.API_ERROR_LOG_PROCESS_STATUS) private Integer processStatus; @ExcelProperty("å¤„ç†æ—¶é—´") diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apierrorlog/InfApiErrorLogExportReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogExportReqVO.java similarity index 93% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apierrorlog/InfApiErrorLogExportReqVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogExportReqVO.java index a86288e1cd..dcb00a69f6 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apierrorlog/InfApiErrorLogExportReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apierrorlog; +package cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apierrorlog/InfApiErrorLogPageReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogPageReqVO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apierrorlog/InfApiErrorLogPageReqVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogPageReqVO.java index cc47dd8d3a..964fee2c81 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apierrorlog/InfApiErrorLogPageReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apierrorlog; +package cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apierrorlog/InfApiErrorLogRespVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogRespVO.java similarity index 89% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apierrorlog/InfApiErrorLogRespVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogRespVO.java index 9e4521c119..ad70bb7726 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/logger/vo/apierrorlog/InfApiErrorLogRespVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apierrorlog; +package cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/redis/RedisController.http b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/RedisController.http similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/redis/RedisController.http rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/RedisController.http diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/redis/RedisController.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/RedisController.java similarity index 86% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/redis/RedisController.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/RedisController.java index f39a38b2e1..b7e499bd60 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/redis/RedisController.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/RedisController.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.redis; +package cn.iocoder.yudao.module.infra.controller.admin.redis; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine; import cn.iocoder.yudao.framework.redis.core.RedisKeyRegistry; -import cn.iocoder.yudao.adminserver.modules.infra.controller.redis.vo.InfRedisKeyRespVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.redis.vo.InfRedisMonitorRespVO; -import cn.iocoder.yudao.adminserver.modules.infra.convert.redis.RedisConvert; +import cn.iocoder.yudao.module.infra.controller.admin.redis.vo.InfRedisKeyRespVO; +import cn.iocoder.yudao.module.infra.controller.admin.redis.vo.InfRedisMonitorRespVO; +import cn.iocoder.yudao.module.infra.convert.redis.RedisConvert; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.data.redis.connection.RedisServerCommands; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/redis/vo/InfRedisKeyRespVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/vo/InfRedisKeyRespVO.java similarity index 93% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/redis/vo/InfRedisKeyRespVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/vo/InfRedisKeyRespVO.java index 60a14cf409..4f35768a43 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/redis/vo/InfRedisKeyRespVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/vo/InfRedisKeyRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.redis.vo; +package cn.iocoder.yudao.module.infra.controller.admin.redis.vo; import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine; import io.swagger.annotations.ApiModel; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/redis/vo/InfRedisMonitorRespVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/vo/InfRedisMonitorRespVO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/redis/vo/InfRedisMonitorRespVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/vo/InfRedisMonitorRespVO.java index 16a7c6c9d4..bee54013c2 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/redis/vo/InfRedisMonitorRespVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/vo/InfRedisMonitorRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.controller.redis.vo; +package cn.iocoder.yudao.module.infra.controller.admin.redis.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/app/package-info.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/app/package-info.java new file mode 100644 index 0000000000..d0f921f5c0 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/app/package-info.java @@ -0,0 +1,4 @@ +/** + * å ä½ + */ +package cn.iocoder.yudao.module.infra.controller.app; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/package-info.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/package-info.java new file mode 100644 index 0000000000..04fde2f433 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/package-info.java @@ -0,0 +1,6 @@ +/** + * æä¾› RESTful API ç»™å‰ç«¯ï¼š + * 1. admin 包:æä¾›ç»™ç®¡ç†åŽå° yudao-ui-admin å‰ç«¯é¡¹ç›® + * 2. app 包:æä¾›ç»™ç”¨æˆ· APP yudao-ui-app å‰ç«¯é¡¹ç›®ï¼Œå®ƒçš„ Controller å’Œ VO éƒ½è¦æ·»åŠ  App å‰ç¼€ï¼Œç”¨äºŽå’Œç®¡ç†åŽå°è¿›è¡ŒåŒºåˆ† + */ +package cn.iocoder.yudao.module.infra.controller; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/config/InfConfigConvert.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/config/InfConfigConvert.java new file mode 100644 index 0000000000..4dbd0dc534 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/config/InfConfigConvert.java @@ -0,0 +1,29 @@ +package cn.iocoder.yudao.module.infra.convert.config; + +import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.config.InfConfigDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigCreateReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigExcelVO; +import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigRespVO; +import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigUpdateReqVO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +@Mapper +public interface InfConfigConvert { + + InfConfigConvert INSTANCE = Mappers.getMapper(InfConfigConvert.class); + + PageResult convertPage(PageResult page); + + ConfigRespVO convert(InfConfigDO bean); + + InfConfigDO convert(ConfigCreateReqVO bean); + + InfConfigDO convert(ConfigUpdateReqVO bean); + + List convertList(List list); + +} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/file/InfFileConvert.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/file/InfFileConvert.java similarity index 88% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/file/InfFileConvert.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/file/InfFileConvert.java index aedad94d92..cbc2298b36 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/file/InfFileConvert.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/file/InfFileConvert.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.convert.file; +package cn.iocoder.yudao.module.infra.convert.file; import cn.iocoder.yudao.coreservice.modules.infra.controller.file.vo.InfFileRespVO; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/job/InfJobConvert.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/job/InfJobConvert.java similarity index 56% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/job/InfJobConvert.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/job/InfJobConvert.java index 2b6fbc1d95..5ad7680c2a 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/job/InfJobConvert.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/job/InfJobConvert.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.adminserver.modules.infra.convert.job; +package cn.iocoder.yudao.module.infra.convert.job; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.job.InfJobCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.job.InfJobExcelVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.job.InfJobRespVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.job.InfJobUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.dal.dataobject.job.InfJobDO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobCreateReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobExcelVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobRespVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobUpdateReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.job.InfJobDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/job/InfJobLogConvert.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/job/InfJobLogConvert.java similarity index 64% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/job/InfJobLogConvert.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/job/InfJobLogConvert.java index 146c7fb34a..5134e6cd48 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/job/InfJobLogConvert.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/job/InfJobLogConvert.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.infra.convert.job; +package cn.iocoder.yudao.module.infra.convert.job; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.log.InfJobLogExcelVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.log.InfJobLogRespVO; -import cn.iocoder.yudao.adminserver.modules.infra.dal.dataobject.job.InfJobLogDO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.InfJobLogExcelVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.InfJobLogRespVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.job.InfJobLogDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/logger/InfApiAccessLogConvert.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/InfApiAccessLogConvert.java similarity index 72% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/logger/InfApiAccessLogConvert.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/InfApiAccessLogConvert.java index 1b4faa0be3..a1ca188ae2 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/logger/InfApiAccessLogConvert.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/InfApiAccessLogConvert.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.infra.convert.logger; +package cn.iocoder.yudao.module.infra.convert.logger; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiAccessLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogExcelVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogRespVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.InfApiAccessLogExcelVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.InfApiAccessLogRespVO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/convert/logger/InfApiAccessLogCoreConvert.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/InfApiAccessLogCoreConvert.java similarity index 87% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/convert/logger/InfApiAccessLogCoreConvert.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/InfApiAccessLogCoreConvert.java index f5152f7109..f8a331a335 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/convert/logger/InfApiAccessLogCoreConvert.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/InfApiAccessLogCoreConvert.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.infra.convert.logger; +package cn.iocoder.yudao.module.infra.convert.logger; import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiAccessLogCreateReqDTO; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiAccessLogDO; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/logger/InfApiErrorLogConvert.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/InfApiErrorLogConvert.java similarity index 70% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/logger/InfApiErrorLogConvert.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/InfApiErrorLogConvert.java index de10d48fc8..1b8d33b6db 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/logger/InfApiErrorLogConvert.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/InfApiErrorLogConvert.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.infra.convert.logger; +package cn.iocoder.yudao.module.infra.convert.logger; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiErrorLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apierrorlog.InfApiErrorLogExcelVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apierrorlog.InfApiErrorLogRespVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.InfApiErrorLogExcelVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.InfApiErrorLogRespVO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/convert/logger/InfApiErrorLogCoreConvert.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/InfApiErrorLogCoreConvert.java similarity index 87% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/convert/logger/InfApiErrorLogCoreConvert.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/InfApiErrorLogCoreConvert.java index 0c130a28b9..cf8225f0a3 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/convert/logger/InfApiErrorLogCoreConvert.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/InfApiErrorLogCoreConvert.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.infra.convert.logger; +package cn.iocoder.yudao.module.infra.convert.logger; import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiErrorLogCreateReqDTO; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiErrorLogDO; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/package-info.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/package-info.java similarity index 56% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/package-info.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/package-info.java index 3c74fe7ad2..8e27593088 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/package-info.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/package-info.java @@ -3,4 +3,4 @@ * * ç›®å‰ä½¿ç”¨ MapStruct 框架 */ -package cn.iocoder.yudao.adminserver.modules.infra.convert; +package cn.iocoder.yudao.module.infra.convert; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/redis/RedisConvert.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/redis/RedisConvert.java similarity index 82% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/redis/RedisConvert.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/redis/RedisConvert.java index df76fce242..f5030a0596 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/redis/RedisConvert.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/redis/RedisConvert.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.infra.convert.redis; +package cn.iocoder.yudao.module.infra.convert.redis; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine; -import cn.iocoder.yudao.adminserver.modules.infra.controller.redis.vo.InfRedisKeyRespVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.redis.vo.InfRedisMonitorRespVO; +import cn.iocoder.yudao.module.infra.controller.admin.redis.vo.InfRedisKeyRespVO; +import cn.iocoder.yudao.module.infra.controller.admin.redis.vo.InfRedisMonitorRespVO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/dataobject/config/InfConfigDO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/config/InfConfigDO.java similarity index 94% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/dataobject/config/InfConfigDO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/config/InfConfigDO.java index c8d58196ee..4f5107e61e 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/dataobject/config/InfConfigDO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/config/InfConfigDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.config; +package cn.iocoder.yudao.module.infra.dal.dataobject.config; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import com.baomidou.mybatisplus.annotation.TableField; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/dataobject/file/InfFileDO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/file/InfFileDO.java similarity index 93% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/dataobject/file/InfFileDO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/file/InfFileDO.java index 83a03b3caa..98aab4252a 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/dataobject/file/InfFileDO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/file/InfFileDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file; +package cn.iocoder.yudao.module.infra.dal.dataobject.file; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/dal/dataobject/job/InfJobDO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/job/InfJobDO.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/dal/dataobject/job/InfJobDO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/job/InfJobDO.java index 4eb95ca201..43bc2a0b7b 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/dal/dataobject/job/InfJobDO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/job/InfJobDO.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.infra.dal.dataobject.job; +package cn.iocoder.yudao.module.infra.dal.dataobject.job; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.adminserver.modules.infra.enums.job.InfJobStatusEnum; +import cn.iocoder.yudao.module.infra.enums.job.InfJobStatusEnum; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.*; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/dal/dataobject/job/InfJobLogDO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/job/InfJobLogDO.java similarity index 91% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/dal/dataobject/job/InfJobLogDO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/job/InfJobLogDO.java index 49916802c6..ecbe209dd0 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/dal/dataobject/job/InfJobLogDO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/job/InfJobLogDO.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.infra.dal.dataobject.job; +package cn.iocoder.yudao.module.infra.dal.dataobject.job; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler; -import cn.iocoder.yudao.adminserver.modules.infra.enums.job.InfJobLogStatusEnum; +import cn.iocoder.yudao.module.infra.enums.job.InfJobLogStatusEnum; import com.baomidou.mybatisplus.annotation.TableName; import lombok.*; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/dataobject/logger/InfApiAccessLogDO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/InfApiAccessLogDO.java similarity index 96% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/dataobject/logger/InfApiAccessLogDO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/InfApiAccessLogDO.java index 32e28c4727..eea09b6bd8 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/dataobject/logger/InfApiAccessLogDO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/InfApiAccessLogDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger; +package cn.iocoder.yudao.module.infra.dal.dataobject.logger; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/dataobject/logger/InfApiErrorLogDO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/InfApiErrorLogDO.java similarity index 97% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/dataobject/logger/InfApiErrorLogDO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/InfApiErrorLogDO.java index 7f8094caf6..bcf394cd64 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/dataobject/logger/InfApiErrorLogDO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/InfApiErrorLogDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger; +package cn.iocoder.yudao.module.infra.dal.dataobject.logger; import cn.iocoder.yudao.coreservice.modules.infra.enums.logger.InfApiErrorLogProcessStatusEnum; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/mysql/config/InfConfigCoreDAOImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/InfConfigCoreDAOImpl.java similarity index 94% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/mysql/config/InfConfigCoreDAOImpl.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/InfConfigCoreDAOImpl.java index f3d32513be..a4c0377e43 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/mysql/config/InfConfigCoreDAOImpl.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/InfConfigCoreDAOImpl.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.infra.dal.mysql.config; +package cn.iocoder.yudao.module.infra.dal.mysql.config; import cn.iocoder.yudao.framework.apollo.internals.ConfigFrameworkDAO; import cn.iocoder.yudao.framework.apollo.internals.dto.ConfigRespDTO; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/dal/mysql/config/InfConfigMapper.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/InfConfigMapper.java similarity index 76% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/dal/mysql/config/InfConfigMapper.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/InfConfigMapper.java index e7960eaefd..f3d2e29703 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/dal/mysql/config/InfConfigMapper.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/InfConfigMapper.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.adminserver.modules.infra.dal.mysql.config; +package cn.iocoder.yudao.module.infra.dal.mysql.config; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.config.InfConfigDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo.InfConfigExportReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo.InfConfigPageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigPageReqVO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; @@ -18,7 +18,7 @@ public interface InfConfigMapper extends BaseMapperX { return selectOne(new QueryWrapper().eq("`key`", key)); } - default PageResult selectPage(InfConfigPageReqVO reqVO) { + default PageResult selectPage(ConfigPageReqVO reqVO) { return selectPage(reqVO, new QueryWrapperX() .likeIfPresent("name", reqVO.getName()) .likeIfPresent("`key`", reqVO.getKey()) @@ -26,7 +26,7 @@ public interface InfConfigMapper extends BaseMapperX { .betweenIfPresent("create_time", reqVO.getBeginTime(), reqVO.getEndTime())); } - default List selectList(InfConfigExportReqVO reqVO) { + default List selectList(ConfigExportReqVO reqVO) { return selectList(new QueryWrapperX() .likeIfPresent("name", reqVO.getName()) .likeIfPresent("`key`", reqVO.getKey()) diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/mysql/file/InfFileCoreMapper.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/InfFileCoreMapper.java similarity index 92% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/mysql/file/InfFileCoreMapper.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/InfFileCoreMapper.java index 8075608af0..065ec0d4f1 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/mysql/file/InfFileCoreMapper.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/InfFileCoreMapper.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.infra.dal.mysql.file; +package cn.iocoder.yudao.module.infra.dal.mysql.file; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/dal/mysql/file/InfFileMapper.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/InfFileMapper.java similarity index 84% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/dal/mysql/file/InfFileMapper.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/InfFileMapper.java index d3dfcccbbe..c987a8e309 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/dal/mysql/file/InfFileMapper.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/InfFileMapper.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.infra.dal.mysql.file; +package cn.iocoder.yudao.module.infra.dal.mysql.file; -import cn.iocoder.yudao.adminserver.modules.infra.controller.file.vo.InfFilePageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.InfFilePageReqVO; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/dal/mysql/job/InfJobLogMapper.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/job/InfJobLogMapper.java similarity index 81% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/dal/mysql/job/InfJobLogMapper.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/job/InfJobLogMapper.java index 4b1b920bea..8d607c79f0 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/dal/mysql/job/InfJobLogMapper.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/job/InfJobLogMapper.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.adminserver.modules.infra.dal.mysql.job; +package cn.iocoder.yudao.module.infra.dal.mysql.job; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.log.InfJobLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.log.InfJobLogPageReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.dal.dataobject.job.InfJobLogDO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.InfJobLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.InfJobLogPageReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.job.InfJobLogDO; import org.apache.ibatis.annotations.Mapper; import java.util.List; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/dal/mysql/job/InfJobMapper.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/job/InfJobMapper.java similarity index 79% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/dal/mysql/job/InfJobMapper.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/job/InfJobMapper.java index 1f4a83792d..2f2ac91c11 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/dal/mysql/job/InfJobMapper.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/job/InfJobMapper.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.infra.dal.mysql.job; +package cn.iocoder.yudao.module.infra.dal.mysql.job; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.job.InfJobExportReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.job.InfJobPageReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.dal.dataobject.job.InfJobDO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobPageReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.job.InfJobDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/mysql/logger/InfApiAccessLogCoreMapper.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/InfApiAccessLogCoreMapper.java similarity index 83% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/mysql/logger/InfApiAccessLogCoreMapper.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/InfApiAccessLogCoreMapper.java index a189254899..52945f26b1 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/mysql/logger/InfApiAccessLogCoreMapper.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/InfApiAccessLogCoreMapper.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.infra.dal.mysql.logger; +package cn.iocoder.yudao.module.infra.dal.mysql.logger; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiAccessLogDO; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/dal/mysql/logger/InfApiAccessLogMapper.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/InfApiAccessLogMapper.java similarity index 86% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/dal/mysql/logger/InfApiAccessLogMapper.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/InfApiAccessLogMapper.java index 4552762fc0..60e080bea2 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/dal/mysql/logger/InfApiAccessLogMapper.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/InfApiAccessLogMapper.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.infra.dal.mysql.logger; +package cn.iocoder.yudao.module.infra.dal.mysql.logger; -import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogPageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.InfApiAccessLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.InfApiAccessLogPageReqVO; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiAccessLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/mysql/logger/InfApiErrorLogCoreMapper.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/InfApiErrorLogCoreMapper.java similarity index 81% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/mysql/logger/InfApiErrorLogCoreMapper.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/InfApiErrorLogCoreMapper.java index 1776c78873..f7124e9b80 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/mysql/logger/InfApiErrorLogCoreMapper.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/InfApiErrorLogCoreMapper.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.infra.dal.mysql.logger; +package cn.iocoder.yudao.module.infra.dal.mysql.logger; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiErrorLogDO; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/dal/mysql/logger/InfApiErrorLogMapper.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/InfApiErrorLogMapper.java similarity index 86% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/dal/mysql/logger/InfApiErrorLogMapper.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/InfApiErrorLogMapper.java index d96e5fc3b6..a9f80b1294 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/dal/mysql/logger/InfApiErrorLogMapper.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/InfApiErrorLogMapper.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.adminserver.modules.infra.dal.mysql.logger; +package cn.iocoder.yudao.module.infra.dal.mysql.logger; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiErrorLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apierrorlog.InfApiErrorLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apierrorlog.InfApiErrorLogPageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.InfApiErrorLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.InfApiErrorLogPageReqVO; import org.apache.ibatis.annotations.Mapper; import java.util.List; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/enums/InfDictTypeConstants.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/DictTypeConstants.java similarity index 69% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/enums/InfDictTypeConstants.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/DictTypeConstants.java index aabbae4f12..6990bf5a9b 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/enums/InfDictTypeConstants.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/DictTypeConstants.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.adminserver.modules.infra.enums; +package cn.iocoder.yudao.module.infra.enums; /** * Infra 字典类型的枚举类 * * @author èŠ‹é“æºç  */ -public interface InfDictTypeConstants { +public interface DictTypeConstants { String REDIS_TIMEOUT_TYPE = "inf_redis_timeout_type"; // Redis 超时类型 @@ -16,4 +16,7 @@ public interface InfDictTypeConstants { String ERROR_CODE_TYPE = "inf_error_code_type"; // 错误ç çš„类型枚举 + String CONFIG_TYPE = "sys_config_type"; // 傿•°é…置类型 + String BOOLEAN_STRING = "sys_boolean_string"; // Boolean 是å¦ç±»åž‹ + } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/enums/InfErrorCodeConstants.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/InfErrorCodeConstants.java similarity index 96% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/enums/InfErrorCodeConstants.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/InfErrorCodeConstants.java index 98155e7236..0eeaa74088 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/enums/InfErrorCodeConstants.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/InfErrorCodeConstants.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.enums; +package cn.iocoder.yudao.module.infra.enums; import cn.iocoder.yudao.framework.common.exception.ErrorCode; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/enums/SysErrorCodeConstants.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/SysErrorCodeConstants.java similarity index 87% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/enums/SysErrorCodeConstants.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/SysErrorCodeConstants.java index 4cafc58e40..d9a41b38f5 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/enums/SysErrorCodeConstants.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/SysErrorCodeConstants.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.infra.enums; +package cn.iocoder.yudao.module.infra.enums; import cn.iocoder.yudao.framework.common.exception.ErrorCode; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/enums/config/InfConfigTypeEnum.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/config/InfConfigTypeEnum.java similarity index 80% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/enums/config/InfConfigTypeEnum.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/config/InfConfigTypeEnum.java index 6e9fd4d35d..242fd7b1c3 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/enums/config/InfConfigTypeEnum.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/config/InfConfigTypeEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.enums.config; +package cn.iocoder.yudao.module.infra.enums.config; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/enums/job/InfJobLogStatusEnum.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/job/InfJobLogStatusEnum.java similarity index 84% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/enums/job/InfJobLogStatusEnum.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/job/InfJobLogStatusEnum.java index e904e674fb..8dee1d3558 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/enums/job/InfJobLogStatusEnum.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/job/InfJobLogStatusEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.enums.job; +package cn.iocoder.yudao.module.infra.enums.job; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/enums/job/InfJobStatusEnum.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/job/InfJobStatusEnum.java similarity index 72% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/enums/job/InfJobStatusEnum.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/job/InfJobStatusEnum.java index 1a7c984bbb..870bde22a6 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/enums/job/InfJobStatusEnum.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/job/InfJobStatusEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.enums.job; +package cn.iocoder.yudao.module.infra.enums.job; import com.google.common.collect.Sets; import lombok.AllArgsConstructor; @@ -25,11 +25,11 @@ public enum InfJobStatusEnum { /** * å¼€å¯ */ - NORMAL(1, Sets.newHashSet(STATE_WAITING, STATE_ACQUIRED, STATE_BLOCKED)), + NORMAL(1, Sets.newHashSet(Constants.STATE_WAITING, Constants.STATE_ACQUIRED, Constants.STATE_BLOCKED)), /** * æš‚åœ */ - STOP(2, Sets.newHashSet(STATE_PAUSED, STATE_PAUSED_BLOCKED)); + STOP(2, Sets.newHashSet(Constants.STATE_PAUSED, Constants.STATE_PAUSED_BLOCKED)); /** * çŠ¶æ€ diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/enums/logger/InfApiErrorLogProcessStatusEnum.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/logger/InfApiErrorLogProcessStatusEnum.java similarity index 86% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/enums/logger/InfApiErrorLogProcessStatusEnum.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/logger/InfApiErrorLogProcessStatusEnum.java index 106e16218b..b047ae1055 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/enums/logger/InfApiErrorLogProcessStatusEnum.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/logger/InfApiErrorLogProcessStatusEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.enums.logger; +package cn.iocoder.yudao.module.infra.enums.logger; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/framework/file/config/FileConfiguration.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/file/config/FileConfiguration.java similarity index 78% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/framework/file/config/FileConfiguration.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/file/config/FileConfiguration.java index a10c7a7aff..f2bc7c2ebc 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/framework/file/config/FileConfiguration.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/file/config/FileConfiguration.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.infra.framework.file.config; +package cn.iocoder.yudao.module.infra.file.config; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Configuration; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/framework/file/config/FileProperties.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/file/config/FileProperties.java similarity index 86% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/framework/file/config/FileProperties.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/file/config/FileProperties.java index 0d8ed7cda5..10640751a7 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/framework/file/config/FileProperties.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/file/config/FileProperties.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.infra.framework.file.config; +package cn.iocoder.yudao.module.infra.file.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/framework/file/package-info.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/file/package-info.java similarity index 100% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/framework/file/package-info.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/file/package-info.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/framework/package-info.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/package-info.java similarity index 55% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/framework/package-info.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/package-info.java index c04bc96df0..77a646af83 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/framework/package-info.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/package-info.java @@ -3,4 +3,4 @@ * * @author èŠ‹é“æºç  */ -package cn.iocoder.yudao.adminserver.modules.infra.framework; +package cn.iocoder.yudao.module.infra.framework; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/mq/consumer/config/InfConfigRefreshConsumer.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/consumer/config/InfConfigRefreshConsumer.java similarity index 79% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/mq/consumer/config/InfConfigRefreshConsumer.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/consumer/config/InfConfigRefreshConsumer.java index 35d3f791b8..f68cdb4d70 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/mq/consumer/config/InfConfigRefreshConsumer.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/consumer/config/InfConfigRefreshConsumer.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.infra.mq.consumer.config; +package cn.iocoder.yudao.module.infra.mq.consumer.config; import cn.iocoder.yudao.framework.apollo.internals.DBConfigRepository; import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener; -import cn.iocoder.yudao.adminserver.modules.infra.mq.message.config.InfConfigRefreshMessage; +import cn.iocoder.yudao.module.infra.mq.message.config.InfConfigRefreshMessage; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/consumer/package-info.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/consumer/package-info.java new file mode 100644 index 0000000000..aa5028bec1 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/consumer/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.infra.mq.consumer; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/mq/message/config/InfConfigRefreshMessage.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/message/config/InfConfigRefreshMessage.java similarity index 81% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/mq/message/config/InfConfigRefreshMessage.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/message/config/InfConfigRefreshMessage.java index 4846d9b900..36b51db1aa 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/mq/message/config/InfConfigRefreshMessage.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/message/config/InfConfigRefreshMessage.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.mq.message.config; +package cn.iocoder.yudao.module.infra.mq.message.config; import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessage; import lombok.Data; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/message/package-info.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/message/package-info.java new file mode 100644 index 0000000000..997752c34b --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/message/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.infra.mq.message; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/mq/producer/config/InfConfigProducer.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/producer/config/InfConfigProducer.java similarity index 76% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/mq/producer/config/InfConfigProducer.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/producer/config/InfConfigProducer.java index 2a0dc66fde..e77557111c 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/mq/producer/config/InfConfigProducer.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/producer/config/InfConfigProducer.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.infra.mq.producer.config; +package cn.iocoder.yudao.module.infra.mq.producer.config; -import cn.iocoder.yudao.adminserver.modules.infra.mq.message.config.InfConfigRefreshMessage; +import cn.iocoder.yudao.module.infra.mq.message.config.InfConfigRefreshMessage; import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate; import org.springframework.stereotype.Component; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/producer/package-info.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/producer/package-info.java new file mode 100644 index 0000000000..5bd8d7cc53 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/producer/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.infra.mq.producer; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/package-info.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/package-info.java new file mode 100644 index 0000000000..da6d4aae8a --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/package-info.java @@ -0,0 +1,8 @@ +/** + * infra 包下,我们放基础设施的è¿ç»´ä¸Žç®¡ç†ï¼Œæ”¯æ’‘上层的通用与核心业务。 + * 例如说:定时任务的管ç†ã€æœåŠ¡å™¨çš„ä¿¡æ¯ç­‰ç­‰ + * + * 1. Controller URL:以 /infra/ 开头,é¿å…和其它 Module å†²çª + * 2. DataObject 表å:以 infra_ 开头,方便在数æ®åº“中区分 + */ +package cn.iocoder.yudao.module.infra; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/config/InfConfigService.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/config/InfConfigService.java similarity index 62% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/config/InfConfigService.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/config/InfConfigService.java index 166ebdbd14..8d3995e1c5 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/config/InfConfigService.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/config/InfConfigService.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.adminserver.modules.infra.service.config; +package cn.iocoder.yudao.module.infra.service.config; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.config.InfConfigDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo.InfConfigCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo.InfConfigExportReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo.InfConfigPageReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo.InfConfigUpdateReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigCreateReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigPageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigUpdateReqVO; import javax.validation.Valid; import java.util.List; @@ -23,14 +23,14 @@ public interface InfConfigService { * @param reqVO åˆ›å»ºä¿¡æ¯ * @return é…ç½®ç¼–å· */ - Long createConfig(@Valid InfConfigCreateReqVO reqVO); + Long createConfig(@Valid ConfigCreateReqVO reqVO); /** * æ›´æ–°å‚æ•°é…ç½® * * @param reqVO æ›´æ–°ä¿¡æ¯ */ - void updateConfig(@Valid InfConfigUpdateReqVO reqVO); + void updateConfig(@Valid ConfigUpdateReqVO reqVO); /** * åˆ é™¤å‚æ•°é…ç½® @@ -61,7 +61,7 @@ public interface InfConfigService { * @param reqVO 分页æ¡ä»¶ * @return 分页列表 */ - PageResult getConfigPage(@Valid InfConfigPageReqVO reqVO); + PageResult getConfigPage(@Valid ConfigPageReqVO reqVO); /** * èŽ·å¾—å‚æ•°é…置列表 @@ -69,7 +69,7 @@ public interface InfConfigService { * @param reqVO 列表 * @return 列表 */ - List getConfigList(@Valid InfConfigExportReqVO reqVO); + List getConfigList(@Valid ConfigExportReqVO reqVO); } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/config/impl/InfConfigServiceImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/config/impl/InfConfigServiceImpl.java similarity index 67% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/config/impl/InfConfigServiceImpl.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/config/impl/InfConfigServiceImpl.java index 65839e20e9..1911357604 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/config/impl/InfConfigServiceImpl.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/config/impl/InfConfigServiceImpl.java @@ -1,17 +1,18 @@ -package cn.iocoder.yudao.adminserver.modules.infra.service.config.impl; +package cn.iocoder.yudao.module.infra.service.config.impl; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.config.InfConfigDO; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo.InfConfigCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo.InfConfigExportReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo.InfConfigPageReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo.InfConfigUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.convert.config.InfConfigConvert; -import cn.iocoder.yudao.adminserver.modules.infra.dal.mysql.config.InfConfigMapper; -import cn.iocoder.yudao.adminserver.modules.infra.enums.config.InfConfigTypeEnum; -import cn.iocoder.yudao.adminserver.modules.infra.mq.producer.config.InfConfigProducer; -import cn.iocoder.yudao.adminserver.modules.infra.service.config.InfConfigService; +import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigCreateReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigPageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigUpdateReqVO; +import cn.iocoder.yudao.module.infra.convert.config.InfConfigConvert; +import cn.iocoder.yudao.module.infra.dal.mysql.config.InfConfigMapper; +import cn.iocoder.yudao.module.infra.enums.config.InfConfigTypeEnum; +import cn.iocoder.yudao.module.infra.mq.producer.config.InfConfigProducer; +import cn.iocoder.yudao.module.infra.service.config.InfConfigService; +import cn.iocoder.yudao.module.infra.enums.InfErrorCodeConstants; import com.google.common.annotations.VisibleForTesting; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -21,8 +22,6 @@ import javax.annotation.Resource; import java.util.List; -import static cn.iocoder.yudao.adminserver.modules.infra.enums.InfErrorCodeConstants.*; - /** * 傿•°é…ç½® Service 实现类 */ @@ -38,7 +37,7 @@ public class InfConfigServiceImpl implements InfConfigService { private InfConfigProducer configProducer; @Override - public Long createConfig(InfConfigCreateReqVO reqVO) { + public Long createConfig(ConfigCreateReqVO reqVO) { // 校验正确性 checkCreateOrUpdate(null, reqVO.getKey()); // æ’入傿•°é…ç½® @@ -51,7 +50,7 @@ public class InfConfigServiceImpl implements InfConfigService { } @Override - public void updateConfig(InfConfigUpdateReqVO reqVO) { + public void updateConfig(ConfigUpdateReqVO reqVO) { // 校验正确性 checkCreateOrUpdate(reqVO.getId(), null); // ä¸å…许更新 key // æ›´æ–°å‚æ•°é…ç½® @@ -67,7 +66,7 @@ public class InfConfigServiceImpl implements InfConfigService { InfConfigDO config = checkConfigExists(id); // 内置é…置,ä¸å…许删除 if (InfConfigTypeEnum.SYSTEM.getType().equals(config.getType())) { - throw ServiceExceptionUtil.exception(CONFIG_CAN_NOT_DELETE_SYSTEM_TYPE); + throw ServiceExceptionUtil.exception(InfErrorCodeConstants.CONFIG_CAN_NOT_DELETE_SYSTEM_TYPE); } // 删除 configMapper.deleteById(id); @@ -86,12 +85,12 @@ public class InfConfigServiceImpl implements InfConfigService { } @Override - public PageResult getConfigPage(InfConfigPageReqVO reqVO) { + public PageResult getConfigPage(ConfigPageReqVO reqVO) { return configMapper.selectPage(reqVO); } @Override - public List getConfigList(InfConfigExportReqVO reqVO) { + public List getConfigList(ConfigExportReqVO reqVO) { return configMapper.selectList(reqVO); } @@ -109,7 +108,7 @@ public class InfConfigServiceImpl implements InfConfigService { } InfConfigDO config = configMapper.selectById(id); if (config == null) { - throw ServiceExceptionUtil.exception(CONFIG_NOT_EXISTS); + throw ServiceExceptionUtil.exception(InfErrorCodeConstants.CONFIG_NOT_EXISTS); } return config; } @@ -122,10 +121,10 @@ public class InfConfigServiceImpl implements InfConfigService { } // 如果 id 为空,说明ä¸ç”¨æ¯”较是å¦ä¸ºç›¸åŒ id çš„å‚æ•°é…ç½® if (id == null) { - throw ServiceExceptionUtil.exception(CONFIG_KEY_DUPLICATE); + throw ServiceExceptionUtil.exception(InfErrorCodeConstants.CONFIG_KEY_DUPLICATE); } if (!config.getId().equals(id)) { - throw ServiceExceptionUtil.exception(CONFIG_KEY_DUPLICATE); + throw ServiceExceptionUtil.exception(InfErrorCodeConstants.CONFIG_KEY_DUPLICATE); } } diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/InfFileCoreService.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/InfFileCoreService.java similarity index 90% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/InfFileCoreService.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/InfFileCoreService.java index 8ba8b57fe7..95f2998c19 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/InfFileCoreService.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/InfFileCoreService.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.infra.service.file; +package cn.iocoder.yudao.module.infra.service.file; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/file/InfFileService.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/InfFileService.java similarity index 73% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/file/InfFileService.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/InfFileService.java index 1c8311b29c..f37a422ce7 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/file/InfFileService.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/InfFileService.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.infra.service.file; +package cn.iocoder.yudao.module.infra.service.file; -import cn.iocoder.yudao.adminserver.modules.infra.controller.file.vo.InfFilePageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.InfFilePageReqVO; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/impl/InfFileCoreServiceImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/impl/InfFileCoreServiceImpl.java similarity index 96% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/impl/InfFileCoreServiceImpl.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/impl/InfFileCoreServiceImpl.java index f586853463..251563fd4e 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/impl/InfFileCoreServiceImpl.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/impl/InfFileCoreServiceImpl.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.infra.service.file.impl; +package cn.iocoder.yudao.module.infra.service.file.impl; import cn.hutool.core.io.FileTypeUtil; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/file/impl/InfFileServiceImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/impl/InfFileServiceImpl.java similarity index 66% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/file/impl/InfFileServiceImpl.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/impl/InfFileServiceImpl.java index b8967c638e..acd6dfb88a 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/file/impl/InfFileServiceImpl.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/impl/InfFileServiceImpl.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.infra.service.file.impl; +package cn.iocoder.yudao.module.infra.service.file.impl; -import cn.iocoder.yudao.adminserver.modules.infra.dal.mysql.file.InfFileMapper; -import cn.iocoder.yudao.adminserver.modules.infra.service.file.InfFileService; -import cn.iocoder.yudao.adminserver.modules.infra.controller.file.vo.InfFilePageReqVO; +import cn.iocoder.yudao.module.infra.dal.mysql.file.InfFileMapper; +import cn.iocoder.yudao.module.infra.service.file.InfFileService; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.InfFilePageReqVO; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO; import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; import cn.iocoder.yudao.framework.common.pojo.PageResult; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/job/InfJobLogService.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/InfJobLogService.java similarity index 76% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/job/InfJobLogService.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/InfJobLogService.java index e4b93d2610..b75897d108 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/job/InfJobLogService.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/InfJobLogService.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.infra.service.job; +package cn.iocoder.yudao.module.infra.service.job; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.quartz.core.service.JobLogFrameworkService; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.log.InfJobLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.log.InfJobLogPageReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.dal.dataobject.job.InfJobLogDO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.InfJobLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.InfJobLogPageReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.job.InfJobLogDO; import java.util.Collection; import java.util.List; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/job/InfJobService.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/InfJobService.java similarity index 78% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/job/InfJobService.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/InfJobService.java index ba90a3b6a9..bfacab3be6 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/job/InfJobService.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/InfJobService.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.adminserver.modules.infra.service.job; +package cn.iocoder.yudao.module.infra.service.job; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.job.InfJobCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.job.InfJobExportReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.job.InfJobPageReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.job.InfJobUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.dal.dataobject.job.InfJobDO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobCreateReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobPageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobUpdateReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.job.InfJobDO; import org.quartz.SchedulerException; import javax.validation.Valid; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/job/impl/InfJobLogServiceImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/impl/InfJobLogServiceImpl.java similarity index 79% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/job/impl/InfJobLogServiceImpl.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/impl/InfJobLogServiceImpl.java index e055c61589..cbc6a38a31 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/job/impl/InfJobLogServiceImpl.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/impl/InfJobLogServiceImpl.java @@ -1,12 +1,12 @@ -package cn.iocoder.yudao.adminserver.modules.infra.service.job.impl; +package cn.iocoder.yudao.module.infra.service.job.impl; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.log.InfJobLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.log.InfJobLogPageReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.dal.dataobject.job.InfJobLogDO; -import cn.iocoder.yudao.adminserver.modules.infra.dal.mysql.job.InfJobLogMapper; -import cn.iocoder.yudao.adminserver.modules.infra.enums.job.InfJobLogStatusEnum; -import cn.iocoder.yudao.adminserver.modules.infra.service.job.InfJobLogService; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.InfJobLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.InfJobLogPageReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.job.InfJobLogDO; +import cn.iocoder.yudao.module.infra.dal.mysql.job.InfJobLogMapper; +import cn.iocoder.yudao.module.infra.enums.job.InfJobLogStatusEnum; +import cn.iocoder.yudao.module.infra.service.job.InfJobLogService; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/job/impl/InfJobServiceImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/impl/InfJobServiceImpl.java similarity index 86% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/job/impl/InfJobServiceImpl.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/impl/InfJobServiceImpl.java index 3597727579..39e77f1ea0 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/job/impl/InfJobServiceImpl.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/impl/InfJobServiceImpl.java @@ -1,17 +1,17 @@ -package cn.iocoder.yudao.adminserver.modules.infra.service.job.impl; +package cn.iocoder.yudao.module.infra.service.job.impl; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.quartz.core.scheduler.SchedulerManager; import cn.iocoder.yudao.framework.quartz.core.util.CronUtils; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.job.InfJobCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.job.InfJobExportReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.job.InfJobPageReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.job.InfJobUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.convert.job.InfJobConvert; -import cn.iocoder.yudao.adminserver.modules.infra.dal.dataobject.job.InfJobDO; -import cn.iocoder.yudao.adminserver.modules.infra.dal.mysql.job.InfJobMapper; -import cn.iocoder.yudao.adminserver.modules.infra.enums.job.InfJobStatusEnum; -import cn.iocoder.yudao.adminserver.modules.infra.service.job.InfJobService; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobCreateReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobPageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobUpdateReqVO; +import cn.iocoder.yudao.module.infra.convert.job.InfJobConvert; +import cn.iocoder.yudao.module.infra.dal.dataobject.job.InfJobDO; +import cn.iocoder.yudao.module.infra.dal.mysql.job.InfJobMapper; +import cn.iocoder.yudao.module.infra.enums.job.InfJobStatusEnum; +import cn.iocoder.yudao.module.infra.service.job.InfJobService; import org.quartz.SchedulerException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,7 +22,7 @@ import java.util.Collection; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.adminserver.modules.infra.enums.InfErrorCodeConstants.*; +import static cn.iocoder.yudao.module.infra.enums.InfErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.containsAny; /** diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/InfApiAccessLogCoreService.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/InfApiAccessLogCoreService.java similarity index 78% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/InfApiAccessLogCoreService.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/InfApiAccessLogCoreService.java index f5480572d5..c38963e4e8 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/InfApiAccessLogCoreService.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/InfApiAccessLogCoreService.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.infra.service.logger; +package cn.iocoder.yudao.module.infra.service.logger; import cn.iocoder.yudao.framework.apilog.core.service.ApiAccessLogFrameworkService; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/logger/InfApiAccessLogService.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/InfApiAccessLogService.java similarity index 72% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/logger/InfApiAccessLogService.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/InfApiAccessLogService.java index 347372bb4b..91229efea9 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/logger/InfApiAccessLogService.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/InfApiAccessLogService.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.infra.service.logger; +package cn.iocoder.yudao.module.infra.service.logger; -import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogPageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.InfApiAccessLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.InfApiAccessLogPageReqVO; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiAccessLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/InfApiErrorLogCoreService.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/InfApiErrorLogCoreService.java similarity index 78% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/InfApiErrorLogCoreService.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/InfApiErrorLogCoreService.java index 6c8d692018..3ba698e7de 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/InfApiErrorLogCoreService.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/InfApiErrorLogCoreService.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.infra.service.logger; +package cn.iocoder.yudao.module.infra.service.logger; import cn.iocoder.yudao.framework.apilog.core.service.ApiErrorLogFrameworkService; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/logger/InfApiErrorLogService.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/InfApiErrorLogService.java similarity index 78% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/logger/InfApiErrorLogService.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/InfApiErrorLogService.java index c778eee310..2920f3fc74 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/logger/InfApiErrorLogService.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/InfApiErrorLogService.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.infra.service.logger; +package cn.iocoder.yudao.module.infra.service.logger; -import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apierrorlog.InfApiErrorLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apierrorlog.InfApiErrorLogPageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.InfApiErrorLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.InfApiErrorLogPageReqVO; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiErrorLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/impl/InfApiAccessLogCoreServiceImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/impl/InfApiAccessLogCoreServiceImpl.java similarity index 94% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/impl/InfApiAccessLogCoreServiceImpl.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/impl/InfApiAccessLogCoreServiceImpl.java index 6327b8b967..6779de2e34 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/impl/InfApiAccessLogCoreServiceImpl.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/impl/InfApiAccessLogCoreServiceImpl.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.infra.service.logger.impl; +package cn.iocoder.yudao.module.infra.service.logger.impl; import cn.iocoder.yudao.coreservice.modules.infra.convert.logger.InfApiAccessLogCoreConvert; import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiAccessLogCreateReqDTO; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/logger/impl/InfApiAccessLogServiceImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/impl/InfApiAccessLogServiceImpl.java similarity index 65% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/logger/impl/InfApiAccessLogServiceImpl.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/impl/InfApiAccessLogServiceImpl.java index 207b3d1527..87856f35b6 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/logger/impl/InfApiAccessLogServiceImpl.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/impl/InfApiAccessLogServiceImpl.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.infra.service.logger.impl; +package cn.iocoder.yudao.module.infra.service.logger.impl; -import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogPageReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.dal.mysql.logger.InfApiAccessLogMapper; -import cn.iocoder.yudao.adminserver.modules.infra.service.logger.InfApiAccessLogService; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.InfApiAccessLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.InfApiAccessLogPageReqVO; +import cn.iocoder.yudao.module.infra.dal.mysql.logger.InfApiAccessLogMapper; +import cn.iocoder.yudao.module.infra.service.logger.InfApiAccessLogService; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiAccessLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.springframework.stereotype.Service; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/impl/InfApiErrorLogCoreServiceImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/impl/InfApiErrorLogCoreServiceImpl.java similarity index 95% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/impl/InfApiErrorLogCoreServiceImpl.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/impl/InfApiErrorLogCoreServiceImpl.java index 4004ea7f66..ddb8b0cf1b 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/impl/InfApiErrorLogCoreServiceImpl.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/impl/InfApiErrorLogCoreServiceImpl.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.infra.service.logger.impl; +package cn.iocoder.yudao.module.infra.service.logger.impl; import cn.iocoder.yudao.coreservice.modules.infra.convert.logger.InfApiErrorLogCoreConvert; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiErrorLogDO; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/logger/impl/InfApiErrorLogServiceImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/impl/InfApiErrorLogServiceImpl.java similarity index 63% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/logger/impl/InfApiErrorLogServiceImpl.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/impl/InfApiErrorLogServiceImpl.java index 6918aec067..85e21cc99c 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/logger/impl/InfApiErrorLogServiceImpl.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/impl/InfApiErrorLogServiceImpl.java @@ -1,12 +1,14 @@ -package cn.iocoder.yudao.adminserver.modules.infra.service.logger.impl; +package cn.iocoder.yudao.module.infra.service.logger.impl; -import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apierrorlog.InfApiErrorLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apierrorlog.InfApiErrorLogPageReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.dal.mysql.logger.InfApiErrorLogMapper; -import cn.iocoder.yudao.adminserver.modules.infra.enums.logger.InfApiErrorLogProcessStatusEnum; -import cn.iocoder.yudao.adminserver.modules.infra.service.logger.InfApiErrorLogService; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.InfApiErrorLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.InfApiErrorLogPageReqVO; +import cn.iocoder.yudao.module.infra.dal.mysql.logger.InfApiErrorLogMapper; +import cn.iocoder.yudao.module.infra.enums.logger.InfApiErrorLogProcessStatusEnum; +import cn.iocoder.yudao.module.infra.service.logger.InfApiErrorLogService; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiErrorLogDO; +import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.infra.enums.InfErrorCodeConstants; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -14,8 +16,6 @@ import javax.annotation.Resource; import java.util.Date; import java.util.List; -import static cn.iocoder.yudao.adminserver.modules.infra.enums.InfErrorCodeConstants.API_ERROR_LOG_NOT_FOUND; -import static cn.iocoder.yudao.adminserver.modules.infra.enums.InfErrorCodeConstants.API_ERROR_LOG_PROCESSED; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** @@ -44,10 +44,10 @@ public class InfApiErrorLogServiceImpl implements InfApiErrorLogService { public void updateApiErrorLogProcess(Long id, Integer processStatus, Long processUserId) { InfApiErrorLogDO errorLog = apiErrorLogMapper.selectById(id); if (errorLog == null) { - throw exception(API_ERROR_LOG_NOT_FOUND); + throw ServiceExceptionUtil.exception(InfErrorCodeConstants.API_ERROR_LOG_NOT_FOUND); } if (!InfApiErrorLogProcessStatusEnum.INIT.getStatus().equals(errorLog.getProcessStatus())) { - throw exception(API_ERROR_LOG_PROCESSED); + throw ServiceExceptionUtil.exception(InfErrorCodeConstants.API_ERROR_LOG_PROCESSED); } // æ ‡è®°å¤„ç† apiErrorLogMapper.updateById(InfApiErrorLogDO.builder().id(id).processStatus(processStatus) diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/controller/file/vo/InfFileRespVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/vo/InfFileRespVO.java similarity index 88% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/controller/file/vo/InfFileRespVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/vo/InfFileRespVO.java index e264a3fd27..dfd914791a 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/controller/file/vo/InfFileRespVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/vo/InfFileRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.infra.controller.file.vo; +package cn.iocoder.yudao.module.infra.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/package-info.java b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/package-info.java new file mode 100644 index 0000000000..9ce8230c43 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.infra; diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/config/InfConfigServiceTest.java b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/config/InfConfigServiceTest.java similarity index 86% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/config/InfConfigServiceTest.java rename to yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/config/InfConfigServiceTest.java index ac37cf20cc..d50f5b15af 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/config/InfConfigServiceTest.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/config/InfConfigServiceTest.java @@ -1,18 +1,20 @@ -package cn.iocoder.yudao.adminserver.modules.infra.service.config; +package cn.iocoder.yudao.module.infra.service.config; import cn.iocoder.yudao.adminserver.BaseDbUnitTest; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.config.InfConfigDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo.InfConfigCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo.InfConfigExportReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo.InfConfigPageReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo.InfConfigUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.dal.mysql.config.InfConfigMapper; -import cn.iocoder.yudao.adminserver.modules.infra.enums.config.InfConfigTypeEnum; -import cn.iocoder.yudao.adminserver.modules.infra.mq.producer.config.InfConfigProducer; -import cn.iocoder.yudao.adminserver.modules.infra.service.config.impl.InfConfigServiceImpl; +import cn.iocoder.yudao.framework.test.core.util.RandomUtils; +import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigCreateReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigPageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigUpdateReqVO; +import cn.iocoder.yudao.module.infra.dal.mysql.config.InfConfigMapper; +import cn.iocoder.yudao.module.infra.enums.config.InfConfigTypeEnum; +import cn.iocoder.yudao.module.infra.mq.producer.config.InfConfigProducer; +import cn.iocoder.yudao.module.infra.service.config.impl.InfConfigServiceImpl; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Import; @@ -22,7 +24,7 @@ import java.util.List; import java.util.function.Consumer; import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.adminserver.modules.infra.enums.InfErrorCodeConstants.*; +import static cn.iocoder.yudao.module.infra.enums.InfErrorCodeConstants.*; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; @@ -50,7 +52,7 @@ public class InfConfigServiceTest extends BaseDbUnitTest { @Test public void testCreateConfig_success() { // 准备傿•° - InfConfigCreateReqVO reqVO = randomPojo(InfConfigCreateReqVO.class); + ConfigCreateReqVO reqVO = randomPojo(ConfigCreateReqVO.class); // 调用 Long configId = configService.createConfig(reqVO); @@ -59,7 +61,7 @@ public class InfConfigServiceTest extends BaseDbUnitTest { // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® InfConfigDO config = configMapper.selectById(configId); assertPojoEquals(reqVO, config); - assertEquals(InfConfigTypeEnum.CUSTOM.getType(), config.getType()); + Assertions.assertEquals(InfConfigTypeEnum.CUSTOM.getType(), config.getType()); // 校验调用 verify(configProducer, times(1)).sendConfigRefreshMessage(); } @@ -70,7 +72,7 @@ public class InfConfigServiceTest extends BaseDbUnitTest { InfConfigDO dbConfig = randomInfConfigDO(); configMapper.insert(dbConfig);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° - InfConfigUpdateReqVO reqVO = randomPojo(InfConfigUpdateReqVO.class, o -> { + ConfigUpdateReqVO reqVO = randomPojo(ConfigUpdateReqVO.class, o -> { o.setId(dbConfig.getId()); // 设置更新的 ID }); @@ -180,7 +182,7 @@ public class InfConfigServiceTest extends BaseDbUnitTest { // 测试 createTime ä¸åŒ¹é… configMapper.insert(ObjectUtils.cloneIgnoreId(dbConfig, o -> o.setCreateTime(buildTime(2021, 1, 1)))); // 准备傿•° - InfConfigPageReqVO reqVO = new InfConfigPageReqVO(); + ConfigPageReqVO reqVO = new ConfigPageReqVO(); reqVO.setName("艿"); reqVO.setKey("nai"); reqVO.setType(InfConfigTypeEnum.SYSTEM.getType()); @@ -214,7 +216,7 @@ public class InfConfigServiceTest extends BaseDbUnitTest { // 测试 createTime ä¸åŒ¹é… configMapper.insert(ObjectUtils.cloneIgnoreId(dbConfig, o -> o.setCreateTime(buildTime(2021, 1, 1)))); // 准备傿•° - InfConfigExportReqVO reqVO = new InfConfigExportReqVO(); + ConfigExportReqVO reqVO = new ConfigExportReqVO(); reqVO.setName("艿"); reqVO.setKey("nai"); reqVO.setType(InfConfigTypeEnum.SYSTEM.getType()); @@ -250,7 +252,7 @@ public class InfConfigServiceTest extends BaseDbUnitTest { Consumer consumer = (o) -> { o.setType(randomEle(InfConfigTypeEnum.values()).getType()); // ä¿è¯ key 的范围 }; - return randomPojo(InfConfigDO.class, ArrayUtils.append(consumer, consumers)); + return RandomUtils.randomPojo(InfConfigDO.class, ArrayUtils.append(consumer, consumers)); } } diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/file/InfFileServiceTest.java b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/file/InfFileServiceTest.java similarity index 85% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/file/InfFileServiceTest.java rename to yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/file/InfFileServiceTest.java index a5d4d8e955..314193f668 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/file/InfFileServiceTest.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/file/InfFileServiceTest.java @@ -1,8 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.infra.service.file; +package cn.iocoder.yudao.module.infra.service.file; import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.adminserver.modules.infra.controller.file.vo.InfFilePageReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.service.file.impl.InfFileServiceImpl; +import cn.iocoder.yudao.framework.test.core.util.AssertUtils; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.InfFilePageReqVO; +import cn.iocoder.yudao.module.infra.service.file.impl.InfFileServiceImpl; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO; import cn.iocoder.yudao.coreservice.modules.infra.dal.mysql.file.InfFileCoreMapper; import cn.iocoder.yudao.coreservice.modules.infra.framework.file.config.FileProperties; @@ -15,7 +16,6 @@ import org.springframework.context.annotation.Import; import javax.annotation.Resource; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -64,7 +64,7 @@ public class InfFileServiceTest extends BaseDbUnitTest { // 断言 assertEquals(1, pageResult.getTotal()); assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbFile, pageResult.getList().get(0), "content"); + AssertUtils.assertPojoEquals(dbFile, pageResult.getList().get(0), "content"); } } diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/job/InfJobLogServiceTest.java b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/job/InfJobLogServiceTest.java similarity index 92% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/job/InfJobLogServiceTest.java rename to yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/job/InfJobLogServiceTest.java index 3946953fa5..60edcef090 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/job/InfJobLogServiceTest.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/job/InfJobLogServiceTest.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.infra.service.job; +package cn.iocoder.yudao.module.infra.service.job; import static cn.hutool.core.util.RandomUtil.randomEle; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; @@ -19,12 +19,12 @@ import org.springframework.context.annotation.Import; import cn.iocoder.yudao.adminserver.BaseDbUnitTest; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.log.InfJobLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.log.InfJobLogPageReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.dal.dataobject.job.InfJobLogDO; -import cn.iocoder.yudao.adminserver.modules.infra.dal.mysql.job.InfJobLogMapper; -import cn.iocoder.yudao.adminserver.modules.infra.enums.job.InfJobLogStatusEnum; -import cn.iocoder.yudao.adminserver.modules.infra.service.job.impl.InfJobLogServiceImpl; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.InfJobLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.InfJobLogPageReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.job.InfJobLogDO; +import cn.iocoder.yudao.module.infra.dal.mysql.job.InfJobLogMapper; +import cn.iocoder.yudao.module.infra.enums.job.InfJobLogStatusEnum; +import cn.iocoder.yudao.module.infra.service.job.impl.InfJobLogServiceImpl; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; /** diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/job/InfJobServiceTest.java b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/job/InfJobServiceTest.java similarity index 89% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/job/InfJobServiceTest.java rename to yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/job/InfJobServiceTest.java index 538d4340cc..6fd5acaea2 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/job/InfJobServiceTest.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/job/InfJobServiceTest.java @@ -1,12 +1,12 @@ -package cn.iocoder.yudao.adminserver.modules.infra.service.job; +package cn.iocoder.yudao.module.infra.service.job; import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.adminserver.modules.infra.enums.InfErrorCodeConstants.JOB_CHANGE_STATUS_EQUALS; -import static cn.iocoder.yudao.adminserver.modules.infra.enums.InfErrorCodeConstants.JOB_CHANGE_STATUS_INVALID; -import static cn.iocoder.yudao.adminserver.modules.infra.enums.InfErrorCodeConstants.JOB_CRON_EXPRESSION_VALID; -import static cn.iocoder.yudao.adminserver.modules.infra.enums.InfErrorCodeConstants.JOB_HANDLER_EXISTS; -import static cn.iocoder.yudao.adminserver.modules.infra.enums.InfErrorCodeConstants.JOB_NOT_EXISTS; -import static cn.iocoder.yudao.adminserver.modules.infra.enums.InfErrorCodeConstants.JOB_UPDATE_ONLY_NORMAL_STATUS; +import static cn.iocoder.yudao.module.infra.enums.InfErrorCodeConstants.JOB_CHANGE_STATUS_EQUALS; +import static cn.iocoder.yudao.module.infra.enums.InfErrorCodeConstants.JOB_CHANGE_STATUS_INVALID; +import static cn.iocoder.yudao.module.infra.enums.InfErrorCodeConstants.JOB_CRON_EXPRESSION_VALID; +import static cn.iocoder.yudao.module.infra.enums.InfErrorCodeConstants.JOB_HANDLER_EXISTS; +import static cn.iocoder.yudao.module.infra.enums.InfErrorCodeConstants.JOB_NOT_EXISTS; +import static cn.iocoder.yudao.module.infra.enums.InfErrorCodeConstants.JOB_UPDATE_ONLY_NORMAL_STATUS; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; @@ -31,15 +31,15 @@ import org.springframework.context.annotation.Import; import cn.iocoder.yudao.adminserver.BaseDbUnitTest; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.quartz.core.scheduler.SchedulerManager; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.job.InfJobCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.job.InfJobExportReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.job.InfJobPageReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.job.InfJobUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.convert.job.InfJobConvert; -import cn.iocoder.yudao.adminserver.modules.infra.dal.dataobject.job.InfJobDO; -import cn.iocoder.yudao.adminserver.modules.infra.dal.mysql.job.InfJobMapper; -import cn.iocoder.yudao.adminserver.modules.infra.enums.job.InfJobStatusEnum; -import cn.iocoder.yudao.adminserver.modules.infra.service.job.impl.InfJobServiceImpl; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobCreateReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobPageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobUpdateReqVO; +import cn.iocoder.yudao.module.infra.convert.job.InfJobConvert; +import cn.iocoder.yudao.module.infra.dal.dataobject.job.InfJobDO; +import cn.iocoder.yudao.module.infra.dal.mysql.job.InfJobMapper; +import cn.iocoder.yudao.module.infra.enums.job.InfJobStatusEnum; +import cn.iocoder.yudao.module.infra.service.job.impl.InfJobServiceImpl; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; /** diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/logger/InfApiAccessLogServiceImplTest.java b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/logger/InfApiAccessLogServiceImplTest.java similarity index 93% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/logger/InfApiAccessLogServiceImplTest.java rename to yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/logger/InfApiAccessLogServiceImplTest.java index 0c401dd2f0..86e2fa9ddf 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/logger/InfApiAccessLogServiceImplTest.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/logger/InfApiAccessLogServiceImplTest.java @@ -1,14 +1,14 @@ -package cn.iocoder.yudao.adminserver.modules.infra.service.logger; +package cn.iocoder.yudao.module.infra.service.logger; import cn.iocoder.yudao.adminserver.BaseDbUnitTest; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiAccessLogDO; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogPageReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.dal.mysql.logger.InfApiAccessLogMapper; -import cn.iocoder.yudao.adminserver.modules.infra.service.logger.impl.InfApiAccessLogServiceImpl; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.InfApiAccessLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.InfApiAccessLogPageReqVO; +import cn.iocoder.yudao.module.infra.dal.mysql.logger.InfApiAccessLogMapper; +import cn.iocoder.yudao.module.infra.service.logger.impl.InfApiAccessLogServiceImpl; import cn.iocoder.yudao.framework.test.core.util.RandomUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; import org.junit.jupiter.api.Test; diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/logger/InfApiErrorLogServiceImplTest.java b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/logger/InfApiErrorLogServiceImplTest.java similarity index 89% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/logger/InfApiErrorLogServiceImplTest.java rename to yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/logger/InfApiErrorLogServiceImplTest.java index f7c9eb3367..89081277ad 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/logger/InfApiErrorLogServiceImplTest.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/logger/InfApiErrorLogServiceImplTest.java @@ -1,16 +1,17 @@ -package cn.iocoder.yudao.adminserver.modules.infra.service.logger; +package cn.iocoder.yudao.module.infra.service.logger; import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apierrorlog.InfApiErrorLogExportReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apierrorlog.InfApiErrorLogPageReqVO; -import cn.iocoder.yudao.adminserver.modules.infra.dal.mysql.logger.InfApiErrorLogMapper; -import cn.iocoder.yudao.adminserver.modules.infra.enums.logger.InfApiErrorLogProcessStatusEnum; -import cn.iocoder.yudao.adminserver.modules.infra.service.logger.impl.InfApiErrorLogServiceImpl; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.InfApiErrorLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.InfApiErrorLogPageReqVO; +import cn.iocoder.yudao.module.infra.dal.mysql.logger.InfApiErrorLogMapper; +import cn.iocoder.yudao.module.infra.enums.logger.InfApiErrorLogProcessStatusEnum; +import cn.iocoder.yudao.module.infra.service.logger.impl.InfApiErrorLogServiceImpl; import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiErrorLogDO; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; import cn.iocoder.yudao.framework.test.core.util.RandomUtils; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.Import; @@ -18,8 +19,8 @@ import javax.annotation.Resource; import java.util.Date; import java.util.List; -import static cn.iocoder.yudao.adminserver.modules.infra.enums.InfErrorCodeConstants.API_ERROR_LOG_NOT_FOUND; -import static cn.iocoder.yudao.adminserver.modules.infra.enums.InfErrorCodeConstants.API_ERROR_LOG_PROCESSED; +import static cn.iocoder.yudao.module.infra.enums.InfErrorCodeConstants.API_ERROR_LOG_NOT_FOUND; +import static cn.iocoder.yudao.module.infra.enums.InfErrorCodeConstants.API_ERROR_LOG_PROCESSED; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; @@ -174,9 +175,9 @@ public class InfApiErrorLogServiceImplTest extends BaseDbUnitTest { // id 为 first çš„ progressStatus 为 DONE ,应该抛出 API_ERROR_LOG_PROCESSED assertServiceException(() -> infApiErrorLogServiceImpl.updateApiErrorLogProcess(firstId, InfApiErrorLogProcessStatusEnum.DONE.getStatus(), processUserId), API_ERROR_LOG_PROCESSED); // éªŒè¯ progressStatus 是å¦ä¿®æ”¹æˆåŠŸ - assertEquals(InfApiErrorLogProcessStatusEnum.DONE.getStatus(), secondSelect.getProcessStatus()); + Assertions.assertEquals(InfApiErrorLogProcessStatusEnum.DONE.getStatus(), secondSelect.getProcessStatus()); // éªŒè¯ progressUserId 是å¦ä¿®æ”¹æˆåŠŸ - assertEquals(processUserId, secondSelect.getProcessUserId()); + Assertions.assertEquals(processUserId, secondSelect.getProcessUserId()); } } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/test/BaseDbAndRedisUnitTest.java b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/test/BaseDbAndRedisUnitTest.java new file mode 100644 index 0000000000..64c2964e86 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/test/BaseDbAndRedisUnitTest.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.infra.test; + +import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration; +import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration; +import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; +import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; +import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; +import org.redisson.spring.starter.RedissonAutoConfiguration; +import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.jdbc.Sql; + +/** + * ä¾èµ–内存 DB + Redis çš„å•元测试 + * + * 相比 {@link BaseDbUnitTest} æ¥è¯´ï¼Œé¢å¤–增加了内存 Redis + * + * @author èŠ‹é“æºç  + */ +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseDbAndRedisUnitTest.Application.class) +@ActiveProfiles("unit-test") // 设置使用 application-unit-test é…置文件 +@Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) // æ¯ä¸ªå•元测试结æŸåŽï¼Œæ¸…ç† DB +public class BaseDbAndRedisUnitTest { + + @Import({ + // DB é…置类 + YudaoDataSourceAutoConfiguration.class, // 自己的 DB é…置类 + DataSourceAutoConfiguration.class, // Spring DB 自动é…置类 + DataSourceTransactionManagerAutoConfiguration.class, // Spring 事务自动é…置类 + DruidDataSourceAutoConfigure.class, // Druid 自动é…置类 + // MyBatis é…置类 + YudaoMybatisAutoConfiguration.class, // 自己的 MyBatis é…置类 + MybatisPlusAutoConfiguration.class, // MyBatis 的自动é…置类 + // Redis é…置类 + RedisTestConfiguration.class, // Redis 测试é…置类,用于å¯åЍ RedisServer + RedisAutoConfiguration.class, // Spring Redis 自动é…置类 + YudaoRedisAutoConfiguration.class, // 自己的 Redis é…置类 + RedissonAutoConfiguration.class, // Redisson 自动高é…置类 + }) + public static class Application { + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/test/BaseDbUnitTest.java b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/test/BaseDbUnitTest.java new file mode 100644 index 0000000000..ba7eb10cd4 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/test/BaseDbUnitTest.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.module.infra.test; + +import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration; +import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration; +import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; +import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.jdbc.Sql; + +/** + * ä¾èµ–内存 DB çš„å•元测试 + * + * 注æ„,Service å±‚åŒæ ·é€‚用。对于 Service 层的å•元测试,我们针对自己模å—çš„ Mapper 走的是 H2 内存数æ®åº“,针对别的模å—çš„ Service 走的是 Mock 方法 + * + * @author èŠ‹é“æºç  + */ +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseDbUnitTest.Application.class) +@ActiveProfiles("unit-test") // 设置使用 application-unit-test é…置文件 +@Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) // æ¯ä¸ªå•元测试结æŸåŽï¼Œæ¸…ç† DB +public class BaseDbUnitTest { + + @Import({ + // DB é…置类 + YudaoDataSourceAutoConfiguration.class, // 自己的 DB é…置类 + DataSourceAutoConfiguration.class, // Spring DB 自动é…置类 + DataSourceTransactionManagerAutoConfiguration.class, // Spring 事务自动é…置类 + DruidDataSourceAutoConfigure.class, // Druid 自动é…置类 + // MyBatis é…置类 + YudaoMybatisAutoConfiguration.class, // 自己的 MyBatis é…置类 + MybatisPlusAutoConfiguration.class, // MyBatis 的自动é…置类 + }) + public static class Application { + } + +} diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/config/QuartzTestConfiguration.java b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/test/QuartzTestConfiguration.java similarity index 87% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/config/QuartzTestConfiguration.java rename to yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/test/QuartzTestConfiguration.java index 0bbce19085..2dd12f1a60 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/config/QuartzTestConfiguration.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/test/QuartzTestConfiguration.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.config; +package cn.iocoder.yudao.module.infra.test; import org.mockito.Mockito; import org.quartz.Scheduler; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/test/RedisTestConfiguration.java b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/test/RedisTestConfiguration.java new file mode 100644 index 0000000000..aa2ea6f101 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/test/RedisTestConfiguration.java @@ -0,0 +1,30 @@ +package cn.iocoder.yudao.module.infra.test; + +import com.github.fppt.jedismock.RedisServer; +import org.springframework.boot.autoconfigure.data.redis.RedisProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Lazy; + +import java.io.IOException; + +@Configuration(proxyBeanMethods = false) +@Lazy(false) // ç¦æ­¢å»¶è¿ŸåŠ è½½ +@EnableConfigurationProperties(RedisProperties.class) +public class RedisTestConfiguration { + + /** + * 创建模拟的 Redis Server æœåС噍 + */ + @Bean + public RedisServer redisServer(RedisProperties properties) throws IOException { + RedisServer redisServer = new RedisServer(properties.getPort()); + // TODO 芋艿:一次执行多个å•元测试时,貌似创建多个 spring 容器,导致ä¸è¿›è¡Œ stop。这样,就导致端å£è¢«å ç”¨ï¼Œæ— æ³•å¯åŠ¨ã€‚ã€‚ã€‚ + try { + redisServer.start(); + } catch (Exception ignore) {} + return redisServer; + } + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/DictTypeConstants.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/DictTypeConstants.java index fc9cb3385c..7ae00aa2a1 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/DictTypeConstants.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/DictTypeConstants.java @@ -14,8 +14,7 @@ public interface DictTypeConstants { String OPERATE_TYPE = "sys_operate_type"; // æ“作类型 String LOGIN_TYPE = "sys_login_type"; // 登录日志的类型 String LOGIN_RESULT = "sys_login_result"; // 登录结果 - String CONFIG_TYPE = "sys_config_type"; // 傿•°é…置类型 - String BOOLEAN_STRING = "sys_boolean_string"; // Boolean 是å¦ç±»åž‹ + String SMS_CHANNEL_CODE = "sys_sms_channel_code"; // 短信渠é“ç¼–ç  String SMS_TEMPLATE_TYPE = "sys_sms_template_type"; // 短信模æ¿ç±»åž‹ From 9bc9b2ac6bb717a4205bdf8ae0917cd48e5bab5b Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 31 Jan 2022 17:57:45 +0800 Subject: [PATCH 20/47] =?UTF-8?q?=E5=A4=9A=E6=A8=A1=E5=9D=97=E9=87=8D?= =?UTF-8?q?=E6=9E=84=205=EF=BC=9Ainfra=20=E6=A8=A1=E5=9D=97=E7=9A=84?= =?UTF-8?q?=E4=BF=AE=E6=94=B9~~~?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yudao-admin-server/pom.xml | 11 -- .../adminserver/AdminServerApplication.java | 2 +- .../src/main/resources/application-dev.yaml | 2 +- .../src/main/resources/application-local.yaml | 2 +- .../src/main/resources/application.yaml | 7 +- .../src/test/resources/sql/clean.sql | 7 +- .../src/test/resources/sql/create_tables.sql | 66 -------- yudao-core-service/pom.xml | 4 - .../coreservice/BaseDbAndRedisUnitTest.java | 48 ------ .../yudao/coreservice/BaseDbUnitTest.java | 39 ----- .../yudao/coreservice/BaseRedisUnitTest.java | 32 ---- .../config/RedisTestConfiguration.java | 30 ---- .../service/file/InfFileCoreServiceTest.java | 86 ---------- .../InfApiAccessLogCoreServiceTest.java | 45 ------ .../logger/InfApiErrorLogCoreServiceTest.java | 45 ------ .../modules/infra/service/package-info.java | 1 - .../apollo/internals/DBConfigRepository.java | 3 +- .../config/YudaoMybatisAutoConfiguration.java | 2 +- .../framework/web/config/WebProperties.java | 4 +- .../web/config/YudaoWebAutoConfiguration.java | 4 +- .../yudao/module/infra/api/file/FileApi.java | 31 ++++ .../yudao/module/infra/api/package-info.java | 4 + .../module/infra/enums/DictTypeConstants.java | 0 .../infra/enums/ErrorCodeConstants.java} | 6 +- .../yudao-module-infra-impl/pom.xml | 21 ++- .../module/infra/api/file/FileApiImpl.java | 27 ++++ .../yudao/module/infra/api/package-info.java | 1 + .../admin/config/ConfigController.java | 29 ++-- .../admin/config/vo/ConfigExportReqVO.java | 2 +- .../admin/config/vo/ConfigPageReqVO.java | 2 +- .../admin/config/vo/ConfigRespVO.java | 2 +- .../admin/config/vo/ConfigUpdateReqVO.java | 2 +- ...ocController.java => DbDocController.java} | 5 +- ...ileController.java => FileController.java} | 31 ++-- ...fFilePageReqVO.java => FilePageReqVO.java} | 4 +- .../admin/file/vo/FileRespVO.java} | 6 +- ...fJobController.java => JobController.java} | 46 +++--- ...gController.java => JobLogController.java} | 46 +++--- .../job/{InfJobBaseVO.java => JobBaseVO.java} | 2 +- ...obCreateReqVO.java => JobCreateReqVO.java} | 4 +- .../{InfJobExcelVO.java => JobExcelVO.java} | 2 +- ...obExportReqVO.java => JobExportReqVO.java} | 8 +- ...InfJobPageReqVO.java => JobPageReqVO.java} | 4 +- .../job/{InfJobRespVO.java => JobRespVO.java} | 4 +- ...obUpdateReqVO.java => JobUpdateReqVO.java} | 4 +- ...InfJobLogBaseVO.java => JobLogBaseVO.java} | 2 +- ...fJobLogExcelVO.java => JobLogExcelVO.java} | 2 +- ...xportReqVO.java => JobLogExportReqVO.java} | 4 +- ...LogPageReqVO.java => JobLogPageReqVO.java} | 4 +- ...InfJobLogRespVO.java => JobLogRespVO.java} | 4 +- ...oller.java => ApiAccessLogController.java} | 34 ++-- ...roller.java => ApiErrorLogController.java} | 34 ++-- ...LogBaseVO.java => ApiAccessLogBaseVO.java} | 2 +- ...gExcelVO.java => ApiAccessLogExcelVO.java} | 2 +- ...eqVO.java => ApiAccessLogExportReqVO.java} | 4 +- ...eReqVO.java => ApiAccessLogPageReqVO.java} | 4 +- ...LogRespVO.java => ApiAccessLogRespVO.java} | 4 +- ...rLogBaseVO.java => ApiErrorLogBaseVO.java} | 2 +- ...ogExcelVO.java => ApiErrorLogExcelVO.java} | 5 +- ...ReqVO.java => ApiErrorLogExportReqVO.java} | 4 +- ...geReqVO.java => ApiErrorLogPageReqVO.java} | 4 +- ...rLogRespVO.java => ApiErrorLogRespVO.java} | 4 +- .../admin/redis/RedisController.http | 2 + .../admin/redis/RedisController.java | 10 +- ...edisKeyRespVO.java => RedisKeyRespVO.java} | 6 +- ...torRespVO.java => RedisMonitorRespVO.java} | 4 +- ...fConfigConvert.java => ConfigConvert.java} | 16 +- .../infra/convert/file/FileConvert.java | 18 +++ .../infra/convert/file/InfFileConvert.java | 18 --- .../infra/convert/job/InfJobConvert.java | 36 ----- .../infra/convert/job/InfJobLogConvert.java | 30 ---- .../module/infra/convert/job/JobConvert.java | 36 +++++ .../infra/convert/job/JobLogConvert.java | 30 ++++ .../convert/logger/ApiAccessLogConvert.java | 33 ++++ .../convert/logger/ApiErrorLogConvert.java | 31 ++++ .../logger/InfApiAccessLogConvert.java | 30 ---- .../logger/InfApiAccessLogCoreConvert.java | 15 -- .../convert/logger/InfApiErrorLogConvert.java | 28 ---- .../logger/InfApiErrorLogCoreConvert.java | 15 -- .../infra/convert/redis/RedisConvert.java | 12 +- .../{InfConfigDO.java => ConfigDO.java} | 4 +- .../file/{InfFileDO.java => FileDO.java} | 5 +- .../job/{InfJobDO.java => JobDO.java} | 8 +- .../job/{InfJobLogDO.java => JobLogDO.java} | 14 +- ...piAccessLogDO.java => ApiAccessLogDO.java} | 4 +- ...fApiErrorLogDO.java => ApiErrorLogDO.java} | 5 +- ...oreDAOImpl.java => ConfigCoreDAOImpl.java} | 4 +- ...InfConfigMapper.java => ConfigMapper.java} | 16 +- .../infra/dal/mysql/file/FileMapper.java | 44 ++++++ .../dal/mysql/file/InfFileCoreMapper.java | 28 ---- .../infra/dal/mysql/file/InfFileMapper.java | 24 --- .../infra/dal/mysql/job/InfJobMapper.java | 41 ----- ...InfJobLogMapper.java => JobLogMapper.java} | 16 +- .../module/infra/dal/mysql/job/JobMapper.java | 41 +++++ ...LogMapper.java => ApiAccessLogMapper.java} | 16 +- ...rLogMapper.java => ApiErrorLogMapper.java} | 16 +- .../logger/InfApiAccessLogCoreMapper.java | 14 -- .../logger/InfApiErrorLogCoreMapper.java | 9 -- .../infra/enums/SysErrorCodeConstants.java | 16 -- ...onfigTypeEnum.java => ConfigTypeEnum.java} | 2 +- ...gStatusEnum.java => JobLogStatusEnum.java} | 2 +- ...fJobStatusEnum.java => JobStatusEnum.java} | 5 +- ...java => ApiErrorLogProcessStatusEnum.java} | 2 +- .../file/config/FileConfiguration.java | 2 +- .../file/config/FileProperties.java | 2 +- .../{ => framework}/file/package-info.java | 2 +- ...nsumer.java => ConfigRefreshConsumer.java} | 8 +- ...Message.java => ConfigRefreshMessage.java} | 2 +- ...onfigProducer.java => ConfigProducer.java} | 8 +- ...fConfigService.java => ConfigService.java} | 12 +- ...erviceImpl.java => ConfigServiceImpl.java} | 54 +++---- .../infra/service/file/FileService.java | 46 ++++++ ...eServiceImpl.java => FileServiceImpl.java} | 30 ++-- .../service/file/InfFileCoreService.java | 35 ---- .../infra/service/file/InfFileService.java | 22 --- .../service/file/impl/InfFileServiceImpl.java | 29 ---- ...fJobLogService.java => JobLogService.java} | 16 +- ...erviceImpl.java => JobLogServiceImpl.java} | 33 ++-- .../{InfJobService.java => JobService.java} | 24 +-- ...obServiceImpl.java => JobServiceImpl.java} | 67 ++++---- ...gService.java => ApiAccessLogService.java} | 13 +- .../logger/ApiAccessLogServiceImpl.java | 46 ++++++ ...ogService.java => ApiErrorLogService.java} | 13 +- .../logger/ApiErrorLogServiceImpl.java | 65 ++++++++ .../logger/InfApiAccessLogCoreService.java | 12 -- .../logger/InfApiErrorLogCoreService.java | 12 -- .../impl/InfApiAccessLogCoreServiceImpl.java | 35 ---- .../impl/InfApiAccessLogServiceImpl.java | 37 ----- .../impl/InfApiErrorLogCoreServiceImpl.java | 37 ----- .../impl/InfApiErrorLogServiceImpl.java | 57 ------- .../yudao/module/infra/package-info.java | 1 - ...erviceTest.java => ConfigServiceTest.java} | 88 +++++------ .../infra/service/file/FileServiceTest.java | 126 +++++++++++++++ .../service/file/InfFileServiceTest.java | 70 -------- ...erviceTest.java => JobLogServiceTest.java} | 78 +++++---- ...obServiceTest.java => JobServiceTest.java} | 149 ++++++++---------- ....java => ApiAccessLogServiceImplTest.java} | 87 +++++----- ...t.java => ApiErrorLogServiceImplTest.java} | 84 ++++++---- .../test/resources/application-unit-test.yaml | 54 +++++++ .../src/test/resources/logback-spring.xml | 4 + .../src/test/resources/sql/clean.sql | 6 + .../src/test/resources/sql/create_tables.sql | 67 ++++++++ .../yudao-module-member-impl/pom.xml | 16 +- .../service/user/MemberUserServiceImpl.java | 6 +- .../user/MemberUserServiceImplTest.java | 9 +- .../test/resources/application-unit-test.yaml | 3 +- .../system/enums/DictTypeConstants.java | 1 - .../yudao-module-system-impl/pom.xml | 18 ++- .../admin/common/CaptchaController.http | 1 + .../service/user/AdminUserServiceImpl.java | 7 +- .../service/user/UserServiceImplTest.java | 6 +- .../test/resources/application-unit-test.yaml | 3 +- 更新日志.md | 1 + 153 files changed, 1420 insertions(+), 1742 deletions(-) delete mode 100644 yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/BaseDbAndRedisUnitTest.java delete mode 100644 yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/BaseDbUnitTest.java delete mode 100644 yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/BaseRedisUnitTest.java delete mode 100644 yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/config/RedisTestConfiguration.java delete mode 100644 yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/InfFileCoreServiceTest.java delete mode 100644 yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/InfApiAccessLogCoreServiceTest.java delete mode 100644 yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/InfApiErrorLogCoreServiceTest.java delete mode 100644 yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/package-info.java create mode 100644 yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/file/FileApi.java create mode 100644 yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/package-info.java rename yudao-module-infra/{yudao-module-infra-impl => yudao-module-infra-api}/src/main/java/cn/iocoder/yudao/module/infra/enums/DictTypeConstants.java (100%) rename yudao-module-infra/{yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/InfErrorCodeConstants.java => yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/ErrorCodeConstants.java} (86%) create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/api/file/FileApiImpl.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/api/package-info.java rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/doc/{InfDbDocController.java => DbDocController.java} (98%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/{InfFileController.java => FileController.java} (72%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/{InfFilePageReqVO.java => FilePageReqVO.java} (91%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/{vo/InfFileRespVO.java => controller/admin/file/vo/FileRespVO.java} (69%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/{InfJobController.java => JobController.java} (76%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/{InfJobLogController.java => JobLogController.java} (64%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/{InfJobBaseVO.java => JobBaseVO.java} (97%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/{InfJobCreateReqVO.java => JobCreateReqVO.java} (83%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/{InfJobExcelVO.java => JobExcelVO.java} (97%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/{InfJobExportReqVO.java => JobExportReqVO.java} (58%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/{InfJobPageReqVO.java => JobPageReqVO.java} (88%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/{InfJobRespVO.java => JobRespVO.java} (90%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/{InfJobUpdateReqVO.java => JobUpdateReqVO.java} (82%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/{InfJobLogBaseVO.java => JobLogBaseVO.java} (98%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/{InfJobLogExcelVO.java => JobLogExcelVO.java} (97%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/{InfJobLogExportReqVO.java => JobLogExportReqVO.java} (85%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/{InfJobLogPageReqVO.java => JobLogPageReqVO.java} (91%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/{InfJobLogRespVO.java => JobLogRespVO.java} (83%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/{InfApiAccessLogController.java => ApiAccessLogController.java} (62%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/{InfApiErrorLogController.java => ApiErrorLogController.java} (70%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/{InfApiAccessLogBaseVO.java => ApiAccessLogBaseVO.java} (98%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/{InfApiAccessLogExcelVO.java => ApiAccessLogExcelVO.java} (97%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/{InfApiAccessLogExportReqVO.java => ApiAccessLogExportReqVO.java} (88%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/{InfApiAccessLogPageReqVO.java => ApiAccessLogPageReqVO.java} (92%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/{InfApiAccessLogRespVO.java => ApiAccessLogRespVO.java} (82%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/{InfApiErrorLogBaseVO.java => ApiErrorLogBaseVO.java} (99%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/{InfApiErrorLogExcelVO.java => ApiErrorLogExcelVO.java} (94%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/{InfApiErrorLogExportReqVO.java => ApiErrorLogExportReqVO.java} (87%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/{InfApiErrorLogPageReqVO.java => ApiErrorLogPageReqVO.java} (92%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/{InfApiErrorLogRespVO.java => ApiErrorLogRespVO.java} (86%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/vo/{InfRedisKeyRespVO.java => RedisKeyRespVO.java} (90%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/vo/{InfRedisMonitorRespVO.java => RedisMonitorRespVO.java} (92%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/config/{InfConfigConvert.java => ConfigConvert.java} (53%) create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/file/FileConvert.java delete mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/file/InfFileConvert.java delete mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/job/InfJobConvert.java delete mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/job/InfJobLogConvert.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/job/JobConvert.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/job/JobLogConvert.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/ApiAccessLogConvert.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/ApiErrorLogConvert.java delete mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/InfApiAccessLogConvert.java delete mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/InfApiAccessLogCoreConvert.java delete mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/InfApiErrorLogConvert.java delete mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/InfApiErrorLogCoreConvert.java rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/config/{InfConfigDO.java => ConfigDO.java} (94%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/file/{InfFileDO.java => FileDO.java} (86%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/job/{InfJobDO.java => JobDO.java} (89%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/job/{InfJobLogDO.java => JobLogDO.java} (81%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/{InfApiAccessLogDO.java => ApiAccessLogDO.java} (96%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/{InfApiErrorLogDO.java => ApiErrorLogDO.java} (94%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/{InfConfigCoreDAOImpl.java => ConfigCoreDAOImpl.java} (88%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/{InfConfigMapper.java => ConfigMapper.java} (67%) create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/FileMapper.java delete mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/InfFileCoreMapper.java delete mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/InfFileMapper.java delete mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/job/InfJobMapper.java rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/job/{InfJobLogMapper.java => JobLogMapper.java} (73%) create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/job/JobMapper.java rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/{InfApiAccessLogMapper.java => ApiAccessLogMapper.java} (74%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/{InfApiErrorLogMapper.java => ApiErrorLogMapper.java} (73%) delete mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/InfApiAccessLogCoreMapper.java delete mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/InfApiErrorLogCoreMapper.java delete mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/SysErrorCodeConstants.java rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/config/{InfConfigTypeEnum.java => ConfigTypeEnum.java} (89%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/job/{InfJobLogStatusEnum.java => JobLogStatusEnum.java} (91%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/job/{InfJobStatusEnum.java => JobStatusEnum.java} (90%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/logger/{InfApiErrorLogProcessStatusEnum.java => ApiErrorLogProcessStatusEnum.java} (90%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/{ => framework}/file/config/FileConfiguration.java (81%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/{ => framework}/file/config/FileProperties.java (88%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/{ => framework}/file/package-info.java (92%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/consumer/config/{InfConfigRefreshConsumer.java => ConfigRefreshConsumer.java} (61%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/message/config/{InfConfigRefreshMessage.java => ConfigRefreshMessage.java} (80%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/producer/config/{InfConfigProducer.java => ConfigProducer.java} (64%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/config/{InfConfigService.java => ConfigService.java} (80%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/config/{impl/InfConfigServiceImpl.java => ConfigServiceImpl.java} (59%) create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileService.java rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/{impl/InfFileCoreServiceImpl.java => FileServiceImpl.java} (59%) delete mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/InfFileCoreService.java delete mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/InfFileService.java delete mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/impl/InfFileServiceImpl.java rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/{InfJobLogService.java => JobLogService.java} (68%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/{impl/InfJobLogServiceImpl.java => JobLogServiceImpl.java} (55%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/{InfJobService.java => JobService.java} (75%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/{impl/InfJobServiceImpl.java => JobServiceImpl.java} (68%) rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/{InfApiAccessLogService.java => ApiAccessLogService.java} (57%) create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/ApiAccessLogServiceImpl.java rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/{InfApiErrorLogService.java => ApiErrorLogService.java} (65%) create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/ApiErrorLogServiceImpl.java delete mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/InfApiAccessLogCoreService.java delete mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/InfApiErrorLogCoreService.java delete mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/impl/InfApiAccessLogCoreServiceImpl.java delete mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/impl/InfApiAccessLogServiceImpl.java delete mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/impl/InfApiErrorLogCoreServiceImpl.java delete mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/impl/InfApiErrorLogServiceImpl.java delete mode 100644 yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/package-info.java rename yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/config/{InfConfigServiceTest.java => ConfigServiceTest.java} (73%) create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/file/FileServiceTest.java delete mode 100644 yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/file/InfFileServiceTest.java rename yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/job/{InfJobLogServiceTest.java => JobLogServiceTest.java} (67%) rename yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/job/{InfJobServiceTest.java => JobServiceTest.java} (62%) rename yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/logger/{InfApiAccessLogServiceImplTest.java => ApiAccessLogServiceImplTest.java} (54%) rename yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/logger/{InfApiErrorLogServiceImplTest.java => ApiErrorLogServiceImplTest.java} (65%) create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/test/resources/application-unit-test.yaml create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/test/resources/logback-spring.xml create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/test/resources/sql/clean.sql create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/test/resources/sql/create_tables.sql rename yudao-module-system/{yudao-module-system-impl => yudao-module-system-api}/src/main/java/cn/iocoder/yudao/module/system/enums/DictTypeConstants.java (99%) diff --git a/yudao-admin-server/pom.xml b/yudao-admin-server/pom.xml index 00e1edeb0b..dd73b51788 100644 --- a/yudao-admin-server/pom.xml +++ b/yudao-admin-server/pom.xml @@ -99,12 +99,6 @@ yudao-spring-boot-starter-redis - - - cn.iocoder.boot - yudao-spring-boot-starter-config - - cn.iocoder.boot @@ -152,11 +146,6 @@ velocity-engine-core - - cn.smallbun.screw - screw-core - - diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/AdminServerApplication.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/AdminServerApplication.java index a37d220b4c..2adf77b803 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/AdminServerApplication.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/AdminServerApplication.java @@ -5,7 +5,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @SuppressWarnings("SpringComponentScan") // 忽略 IDEA 无法识别 ${yudao.info.base-package} å’Œ ${yudao.core-service.base-package} @SpringBootApplication(scanBasePackages = {"${yudao.info.base-package}", "${yudao.core-service.base-package}", - "${yudao.info.member-package}", "${yudao.info.system-package}"}) // TODO èŠ‹è‰¿ï¼šé‡æž„ + "${yudao.info.base-package2}"}) // TODO èŠ‹è‰¿ï¼šé‡æž„ public class AdminServerApplication { public static void main(String[] args) { diff --git a/yudao-admin-server/src/main/resources/application-dev.yaml b/yudao-admin-server/src/main/resources/application-dev.yaml index a498079041..246d5e8830 100644 --- a/yudao-admin-server/src/main/resources/application-dev.yaml +++ b/yudao-admin-server/src/main/resources/application-dev.yaml @@ -100,7 +100,7 @@ apollo: eagerLoad: enabled: true # 设置 Apollo 在日志åˆå§‹åŒ–å‰ç”Ÿæ•ˆï¼Œå¯ä»¥å®žçŽ°æ—¥å¿—çš„åŠ¨æ€çº§åˆ«é…ç½® jdbc: # 自定义的 JDBC é…置项,用于数æ®åº“çš„åœ°å€ - dao: cn.iocoder.yudao.coreservice.modules.infra.dal.mysql.config.InfConfigCoreDAOImpl + dao: cn.iocoder.yudao.module.infra.dal.mysql.config.ConfigCoreDAOImpl url: ${spring.datasource.dynamic.datasource.master.url} username: ${spring.datasource.dynamic.datasource.master.username} password: ${spring.datasource.dynamic.datasource.master.password} diff --git a/yudao-admin-server/src/main/resources/application-local.yaml b/yudao-admin-server/src/main/resources/application-local.yaml index 411f2a6a33..9bdeb775bb 100644 --- a/yudao-admin-server/src/main/resources/application-local.yaml +++ b/yudao-admin-server/src/main/resources/application-local.yaml @@ -113,7 +113,7 @@ apollo: eagerLoad: enabled: true # 设置 Apollo 在日志åˆå§‹åŒ–å‰ç”Ÿæ•ˆï¼Œå¯ä»¥å®žçŽ°æ—¥å¿—çš„åŠ¨æ€çº§åˆ«é…ç½® jdbc: # 自定义的 JDBC é…置项,用于数æ®åº“çš„åœ°å€ - dao: cn.iocoder.yudao.coreservice.modules.infra.dal.mysql.config.InfConfigCoreDAOImpl + dao: cn.iocoder.yudao.module.infra.dal.mysql.config.ConfigCoreDAOImpl url: ${spring.datasource.dynamic.datasource.master.url} username: ${spring.datasource.dynamic.datasource.master.username} password: ${spring.datasource.dynamic.datasource.master.password} diff --git a/yudao-admin-server/src/main/resources/application.yaml b/yudao-admin-server/src/main/resources/application.yaml index 81ec74b2cf..b352943a88 100644 --- a/yudao-admin-server/src/main/resources/application.yaml +++ b/yudao-admin-server/src/main/resources/application.yaml @@ -48,17 +48,16 @@ yudao: info: version: 1.0.0 base-package: cn.iocoder.yudao.adminserver - member-package: cn.iocoder.yudao.module.member - system-package: cn.iocoder.yudao.module.system + base-package2: cn.iocoder.yudao.module core-service: base-package: cn.iocoder.yudao.coreservice web: admin-api: prefix: /admin-api - controller: cn.iocoder.yudao.module.system.controller.admin # TODO èŠ‹è‰¿ï¼šéœ€è¦æ”¹é€  + controller: '**.controller.admin.**' app-api: prefix: /app-api - controller: cn.iocoder.yudao.module.member.controller.app # TODO èŠ‹è‰¿ï¼šéœ€è¦æ”¹é€  + controller: '**.controller.app.**' swagger: title: 管ç†åŽå° diff --git a/yudao-admin-server/src/test/resources/sql/clean.sql b/yudao-admin-server/src/test/resources/sql/clean.sql index c0149d424c..9e0718a866 100644 --- a/yudao-admin-server/src/test/resources/sql/clean.sql +++ b/yudao-admin-server/src/test/resources/sql/clean.sql @@ -1,10 +1,5 @@ -- inf 开头的 DB -DELETE FROM "inf_config"; -DELETE FROM "inf_file"; -DELETE FROM "inf_job"; -DELETE FROM "inf_job_log"; -DELETE FROM "inf_api_access_log"; -DELETE FROM "inf_api_error_log"; + -- pay 开头的 DB DELETE FROM pay_merchant; diff --git a/yudao-admin-server/src/test/resources/sql/create_tables.sql b/yudao-admin-server/src/test/resources/sql/create_tables.sql index b8b92e3b1f..850146fecc 100644 --- a/yudao-admin-server/src/test/resources/sql/create_tables.sql +++ b/yudao-admin-server/src/test/resources/sql/create_tables.sql @@ -1,71 +1,5 @@ -- inf 开头的 DB -CREATE TABLE IF NOT EXISTS "inf_config" ( - "id" bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "group" varchar(50) NOT NULL, - "type" tinyint NOT NULL, - "name" varchar(100) NOT NULL DEFAULT '', - "key" varchar(100) NOT NULL DEFAULT '', - "value" varchar(500) NOT NULL DEFAULT '', - "sensitive" bit NOT NULL, - "remark" varchar(500) DEFAULT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '傿•°é…置表'; - -CREATE TABLE IF NOT EXISTS "inf_file" ( - "id" varchar(188) NOT NULL, - "type" varchar(63) DEFAULT NULL, - "content" blob NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint not null default '0', - PRIMARY KEY ("id") -) COMMENT '文件表'; - -CREATE TABLE IF NOT EXISTS "inf_job" ( - "id" bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY COMMENT '任务编å·', - "name" varchar(32) NOT NULL COMMENT '任务åç§°', - "status" tinyint(4) NOT NULL COMMENT '任务状æ€', - "handler_name" varchar(64) NOT NULL COMMENT '处ç†å™¨çš„åå­—', - "handler_param" varchar(255) DEFAULT NULL COMMENT '处ç†å™¨çš„傿•°', - "cron_expression" varchar(32) NOT NULL COMMENT 'CRON 表达å¼', - "retry_count" int(11) NOT NULL DEFAULT '0' COMMENT 'é‡è¯•次数', - "retry_interval" int(11) NOT NULL DEFAULT '0' COMMENT 'é‡è¯•é—´éš”', - "monitor_timeout" int(11) NOT NULL DEFAULT '0' COMMENT '监控超时时间', - "creator" varchar(64) DEFAULT '' COMMENT '创建者', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - "updater" varchar(64) DEFAULT '' COMMENT '更新者', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', - "deleted" bit NOT NULL DEFAULT FALSE COMMENT '是å¦åˆ é™¤', - PRIMARY KEY ("id") -) COMMENT='定时任务表'; - -CREATE TABLE IF NOT EXISTS "inf_job_log" ( - "id" bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY COMMENT '日志编å·', - "job_id" bigint(20) NOT NULL COMMENT '任务编å·', - "handler_name" varchar(64) NOT NULL COMMENT '处ç†å™¨çš„åå­—', - "handler_param" varchar(255) DEFAULT NULL COMMENT '处ç†å™¨çš„傿•°', - "execute_index" tinyint(4) NOT NULL DEFAULT '1' COMMENT '第几次执行', - "begin_time" datetime NOT NULL COMMENT '开始执行时间', - "end_time" datetime DEFAULT NULL COMMENT 'ç»“æŸæ‰§è¡Œæ—¶é—´', - "duration" int(11) DEFAULT NULL COMMENT '执行时长', - "status" tinyint(4) NOT NULL COMMENT '任务状æ€', - "result" varchar(4000) DEFAULT '' COMMENT '结果数æ®', - "creator" varchar(64) DEFAULT '' COMMENT '创建者', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - "updater" varchar(64) DEFAULT '' COMMENT '更新者', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', - "deleted" bit(1) NOT NULL DEFAULT FALSE COMMENT '是å¦åˆ é™¤', - PRIMARY KEY ("id") -)COMMENT='定时任务日志表'; CREATE TABLE IF NOT EXISTS "pay_merchant" ( diff --git a/yudao-core-service/pom.xml b/yudao-core-service/pom.xml index aaec8d2a65..ccb1e1600b 100644 --- a/yudao-core-service/pom.xml +++ b/yudao-core-service/pom.xml @@ -40,10 +40,6 @@ cn.iocoder.boot yudao-spring-boot-starter-biz-tenant - - cn.iocoder.boot - yudao-spring-boot-starter-biz-social - diff --git a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/BaseDbAndRedisUnitTest.java b/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/BaseDbAndRedisUnitTest.java deleted file mode 100644 index 8b9177cf51..0000000000 --- a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/BaseDbAndRedisUnitTest.java +++ /dev/null @@ -1,48 +0,0 @@ -package cn.iocoder.yudao.coreservice; - -import cn.iocoder.yudao.coreservice.config.RedisTestConfiguration; -import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration; -import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration; -import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; -import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; -import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; -import org.redisson.spring.starter.RedissonAutoConfiguration; -import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; -import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.context.annotation.Import; -import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.context.jdbc.Sql; - -/** - * ä¾èµ–内存 DB + Redis çš„å•元测试 - * - * 相比 {@link BaseDbUnitTest} æ¥è¯´ï¼Œé¢å¤–增加了内存 Redis - * - * @author èŠ‹é“æºç  - */ -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseDbAndRedisUnitTest.Application.class) -@ActiveProfiles("unit-test") // 设置使用 application-unit-test é…置文件 -@Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) // æ¯ä¸ªå•元测试结æŸåŽï¼Œæ¸…ç† DB -public class BaseDbAndRedisUnitTest { - - @Import({ - // DB é…置类 - YudaoDataSourceAutoConfiguration.class, // 自己的 DB é…置类 - DataSourceAutoConfiguration.class, // Spring DB 自动é…置类 - DataSourceTransactionManagerAutoConfiguration.class, // Spring 事务自动é…置类 - DruidDataSourceAutoConfigure.class, // Druid 自动é…置类 - // MyBatis é…置类 - YudaoMybatisAutoConfiguration.class, // 自己的 MyBatis é…置类 - MybatisPlusAutoConfiguration.class, // MyBatis 的自动é…置类 - // Redis é…置类 - RedisTestConfiguration.class, // Redis 测试é…置类,用于å¯åЍ RedisServer - RedisAutoConfiguration.class, // Spring Redis 自动é…置类 - YudaoRedisAutoConfiguration.class, // 自己的 Redis é…置类 - RedissonAutoConfiguration.class, // Redisson 自动高é…置类 - }) - public static class Application { - } - -} diff --git a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/BaseDbUnitTest.java b/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/BaseDbUnitTest.java deleted file mode 100644 index 94d6d3107c..0000000000 --- a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/BaseDbUnitTest.java +++ /dev/null @@ -1,39 +0,0 @@ -package cn.iocoder.yudao.coreservice; - -import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration; -import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration; -import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; -import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; -import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.context.annotation.Import; -import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.context.jdbc.Sql; - -/** - * ä¾èµ–内存 DB çš„å•元测试 - * - * 注æ„,Service å±‚åŒæ ·é€‚用。对于 Service 层的å•元测试,我们针对自己模å—çš„ Mapper 走的是 H2 内存数æ®åº“,针对别的模å—çš„ Service 走的是 Mock 方法 - * - * @author èŠ‹é“æºç  - */ -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseDbUnitTest.Application.class) -@ActiveProfiles("unit-test") // 设置使用 application-unit-test é…置文件 -@Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) // æ¯ä¸ªå•元测试结æŸåŽï¼Œæ¸…ç† DB -public class BaseDbUnitTest { - - @Import({ - // DB é…置类 - YudaoDataSourceAutoConfiguration.class, // 自己的 DB é…置类 - DataSourceAutoConfiguration.class, // Spring DB 自动é…置类 - DataSourceTransactionManagerAutoConfiguration.class, // Spring 事务自动é…置类 - DruidDataSourceAutoConfigure.class, // Druid 自动é…置类 - // MyBatis é…置类 - YudaoMybatisAutoConfiguration.class, // 自己的 MyBatis é…置类 - MybatisPlusAutoConfiguration.class, // MyBatis 的自动é…置类 - }) - public static class Application { - } - -} diff --git a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/BaseRedisUnitTest.java b/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/BaseRedisUnitTest.java deleted file mode 100644 index e95e6d787d..0000000000 --- a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/BaseRedisUnitTest.java +++ /dev/null @@ -1,32 +0,0 @@ -package cn.iocoder.yudao.coreservice; - -import cn.iocoder.yudao.coreservice.config.RedisTestConfiguration; -import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; -import org.redisson.spring.starter.RedissonAutoConfiguration; -import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.context.annotation.Import; -import org.springframework.test.context.ActiveProfiles; - -/** - * ä¾èµ–内存 Redis çš„å•元测试 - * - * 相比 {@link BaseDbUnitTest} æ¥è¯´ï¼Œä»Žå†…å­˜ DB 改æˆäº†å†…å­˜ Redis - * - * @author èŠ‹é“æºç  - */ -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseRedisUnitTest.Application.class) -@ActiveProfiles("unit-test") // 设置使用 application-unit-test é…置文件 -public class BaseRedisUnitTest { - - @Import({ - // Redis é…置类 - RedisTestConfiguration.class, // Redis 测试é…置类,用于å¯åЍ RedisServer - RedisAutoConfiguration.class, // Spring Redis 自动é…置类 - YudaoRedisAutoConfiguration.class, // 自己的 Redis é…置类 - RedissonAutoConfiguration.class, // Redisson 自动高é…置类 - }) - public static class Application { - } - -} diff --git a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/config/RedisTestConfiguration.java b/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/config/RedisTestConfiguration.java deleted file mode 100644 index eb0791974c..0000000000 --- a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/config/RedisTestConfiguration.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.yudao.coreservice.config; - -import com.github.fppt.jedismock.RedisServer; -import org.springframework.boot.autoconfigure.data.redis.RedisProperties; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Lazy; - -import java.io.IOException; - -@Configuration(proxyBeanMethods = false) -@Lazy(false) // ç¦æ­¢å»¶è¿ŸåŠ è½½ -@EnableConfigurationProperties(RedisProperties.class) -public class RedisTestConfiguration { - - /** - * 创建模拟的 Redis Server æœåС噍 - */ - @Bean - public RedisServer redisServer(RedisProperties properties) throws IOException { - RedisServer redisServer = new RedisServer(properties.getPort()); - // TODO 芋艿:一次执行多个å•元测试时,貌似创建多个 spring 容器,导致ä¸è¿›è¡Œ stop。这样,就导致端å£è¢«å ç”¨ï¼Œæ— æ³•å¯åŠ¨ã€‚ã€‚ã€‚ - try { - redisServer.start(); - } catch (Exception ignore) {} - return redisServer; - } - -} diff --git a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/InfFileCoreServiceTest.java b/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/InfFileCoreServiceTest.java deleted file mode 100644 index 232ccf5f44..0000000000 --- a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/InfFileCoreServiceTest.java +++ /dev/null @@ -1,86 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.infra.service.file; - -import cn.hutool.core.io.resource.ResourceUtil; -import cn.iocoder.yudao.coreservice.BaseDbUnitTest; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO; -import cn.iocoder.yudao.coreservice.modules.infra.dal.mysql.file.InfFileCoreMapper; -import cn.iocoder.yudao.coreservice.modules.infra.framework.file.config.FileProperties; -import cn.iocoder.yudao.coreservice.modules.infra.service.file.impl.InfFileCoreServiceImpl; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; - -import static cn.iocoder.yudao.coreservice.modules.infra.enums.SysErrorCodeConstants.*; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomString; -import static org.junit.jupiter.api.Assertions.*; - -@Import({InfFileCoreServiceImpl.class, FileProperties.class}) -public class InfFileCoreServiceTest extends BaseDbUnitTest { - - @Resource - private InfFileCoreService fileCoreService; - - @MockBean - private FileProperties fileProperties; - - @Resource - private InfFileCoreMapper fileMapper; - - @Test - public void testCreateFile_success() { - // 准备傿•° - String path = randomString(); - byte[] content = ResourceUtil.readBytes("file/erweima.jpg"); - - // 调用 - String url = fileCoreService.createFile(path, content); - // 断言 - assertEquals(fileProperties.getBasePath() + path, url); - // æ ¡éªŒæ•°æ® - InfFileDO file = fileMapper.selectById(path); - assertEquals(path, file.getId()); - assertEquals("jpg", file.getType()); - assertArrayEquals(content, file.getContent()); - } - - @Test - public void testCreateFile_exists() { - // mock æ•°æ® - InfFileDO dbFile = randomPojo(InfFileDO.class); - fileMapper.insert(dbFile); - // 准备傿•° - String path = dbFile.getId(); // 模拟已存在 - byte[] content = ResourceUtil.readBytes("file/erweima.jpg"); - - // 调用,并断言异常 - assertServiceException(() -> fileCoreService.createFile(path, content), FILE_PATH_EXISTS); - } - - @Test - public void testDeleteFile_success() { - // mock æ•°æ® - InfFileDO dbFile = randomPojo(InfFileDO.class); - fileMapper.insert(dbFile);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - String id = dbFile.getId(); - - // 调用 - fileCoreService.deleteFile(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(fileMapper.selectById(id)); - } - - @Test - public void testDeleteFile_notExists() { - // 准备傿•° - String id = randomString(); - - // 调用, 并断言异常 - assertServiceException(() -> fileCoreService.deleteFile(id), FILE_NOT_EXISTS); - } - -} diff --git a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/InfApiAccessLogCoreServiceTest.java b/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/InfApiAccessLogCoreServiceTest.java deleted file mode 100644 index c7b2620eb0..0000000000 --- a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/InfApiAccessLogCoreServiceTest.java +++ /dev/null @@ -1,45 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.infra.service.logger; - -import cn.hutool.core.util.RandomUtil; -import cn.iocoder.yudao.coreservice.BaseDbUnitTest; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiAccessLogDO; -import cn.iocoder.yudao.coreservice.modules.infra.dal.mysql.logger.InfApiAccessLogCoreMapper; -import cn.iocoder.yudao.coreservice.modules.infra.service.logger.impl.InfApiAccessLogCoreServiceImpl; -import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiAccessLogCreateReqDTO; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.test.core.util.RandomUtils; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; - -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -/** - * {@link InfApiAccessLogCoreServiceImpl} å•元测试 - */ -@Import(InfApiAccessLogCoreServiceImpl.class) -public class InfApiAccessLogCoreServiceTest extends BaseDbUnitTest { - - @Resource - private InfApiAccessLogCoreService apiAccessLogCoreService; - - @Resource - private InfApiAccessLogCoreMapper apiAccessLogCoreMapper; - - @Test - public void testCreateApiAccessLogAsync() { - // 准备傿•° - ApiAccessLogCreateReqDTO createDTO = RandomUtils.randomPojo(ApiAccessLogCreateReqDTO.class, - dto -> dto.setUserType(RandomUtil.randomEle(UserTypeEnum.values()).getValue())); - - // 调用 - apiAccessLogCoreService.createApiAccessLogAsync(createDTO); - // 断言 - InfApiAccessLogDO infApiAccessLogDO = apiAccessLogCoreMapper.selectOne(null); - assertNotNull(infApiAccessLogDO); - assertPojoEquals(createDTO, infApiAccessLogDO); - } - -} diff --git a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/InfApiErrorLogCoreServiceTest.java b/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/InfApiErrorLogCoreServiceTest.java deleted file mode 100644 index 6379ab32a1..0000000000 --- a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/InfApiErrorLogCoreServiceTest.java +++ /dev/null @@ -1,45 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.infra.service.logger; - -import cn.hutool.core.util.RandomUtil; -import cn.iocoder.yudao.coreservice.BaseDbUnitTest; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiErrorLogDO; -import cn.iocoder.yudao.coreservice.modules.infra.dal.mysql.logger.InfApiErrorLogCoreMapper; -import cn.iocoder.yudao.coreservice.modules.infra.service.logger.impl.InfApiErrorLogCoreServiceImpl; -import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiErrorLogCreateReqDTO; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.test.core.util.RandomUtils; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; - -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -/** - * {@link InfApiErrorLogCoreServiceImpl} å•元测试 - */ -@Import(InfApiErrorLogCoreServiceImpl.class) -public class InfApiErrorLogCoreServiceTest extends BaseDbUnitTest { - - @Resource - private InfApiErrorLogCoreService apiErrorLogCoreService; - - @Resource - private InfApiErrorLogCoreMapper infApiErrorLogCoreMapper; - - @Test - public void testCreateApiErrorLogAsync() { - // 准备傿•° - ApiErrorLogCreateReqDTO createDTO = RandomUtils.randomPojo(ApiErrorLogCreateReqDTO.class, - dto -> dto.setUserType(RandomUtil.randomEle(UserTypeEnum.values()).getValue())); - - // 调用 - apiErrorLogCoreService.createApiErrorLogAsync(createDTO); - // 断言 - InfApiErrorLogDO infApiErrorLogDO = infApiErrorLogCoreMapper.selectOne(null); - assertNotNull(infApiErrorLogDO); - assertPojoEquals(createDTO, infApiErrorLogDO); - } - -} diff --git a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/package-info.java b/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/package-info.java deleted file mode 100644 index c3da3526cf..0000000000 --- a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.infra.service; diff --git a/yudao-framework/yudao-spring-boot-starter-config/src/main/java/cn/iocoder/yudao/framework/apollo/internals/DBConfigRepository.java b/yudao-framework/yudao-spring-boot-starter-config/src/main/java/cn/iocoder/yudao/framework/apollo/internals/DBConfigRepository.java index c88038da97..08573d33d6 100644 --- a/yudao-framework/yudao-spring-boot-starter-config/src/main/java/cn/iocoder/yudao/framework/apollo/internals/DBConfigRepository.java +++ b/yudao-framework/yudao-spring-boot-starter-config/src/main/java/cn/iocoder/yudao/framework/apollo/internals/DBConfigRepository.java @@ -24,6 +24,7 @@ import java.util.List; import java.util.Properties; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; +import java.util.function.Predicate; @Slf4j public class DBConfigRepository extends AbstractConfigRepository { @@ -135,7 +136,7 @@ public class DBConfigRepository extends AbstractConfigRepository { private Properties buildProperties(List configs) { Properties properties = propertiesFactory.getPropertiesInstance(); - configs.stream().filter(ConfigRespDTO::getDeleted) // 过滤掉被删除的é…ç½® + configs.stream().filter(config -> !config.getDeleted()) // 过滤掉被删除的é…ç½® .forEach(config -> properties.put(config.getKey(), config.getValue())); return properties; } diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/YudaoMybatisAutoConfiguration.java b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/YudaoMybatisAutoConfiguration.java index 9bd5202e48..7e25761376 100644 --- a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/YudaoMybatisAutoConfiguration.java +++ b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/YudaoMybatisAutoConfiguration.java @@ -16,7 +16,7 @@ import org.springframework.context.annotation.Configuration; */ @Configuration @MapperScan(value = {"${yudao.info.base-package}", "${yudao.core-service.base-package}", - "${yudao.info.member-package}", "${yudao.info.system-package}"}, + "${yudao.info.base-package2}"}, annotationClass = Mapper.class, lazyInitialization = "${mybatis.lazy-initialization:false}") // Mapper 懒加载,目å‰ä»…用于å•元测试 public class YudaoMybatisAutoConfiguration { diff --git a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/config/WebProperties.java b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/config/WebProperties.java index 23a4aff4a5..a7058871e8 100644 --- a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/config/WebProperties.java +++ b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/config/WebProperties.java @@ -36,11 +36,9 @@ public class WebProperties { private String prefix; /** - * Controller 所在包 + * Controller 所在包的 Ant 路径规则 * * 主è¦ç›®çš„æ˜¯ï¼Œç»™è¯¥ Controller 设置指定的 {@link #prefix} - * - * 因为我们有多个 modules åŒ…é‡Œä¼šåŒ…å« Controller,所以åªéœ€è¦å†™åˆ° cn.iocoder.yudao 这样的层级 */ @NotEmpty(message = "Controller 所在包ä¸èƒ½ä¸ºç©º") private String controller; diff --git a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/config/YudaoWebAutoConfiguration.java b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/config/YudaoWebAutoConfiguration.java index c3bcb2009c..a6f932dd07 100644 --- a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/config/YudaoWebAutoConfiguration.java +++ b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/config/YudaoWebAutoConfiguration.java @@ -13,6 +13,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.util.AntPathMatcher; import org.springframework.util.PathMatcher; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.cors.CorsConfiguration; @@ -49,8 +50,9 @@ public class YudaoWebAutoConfiguration implements WebMvcConfigurer { * @param api API é…ç½® */ private void configurePathMatch(PathMatchConfigurer configurer, WebProperties.Api api) { + AntPathMatcher antPathMatcher = new AntPathMatcher("."); configurer.addPathPrefix(api.getPrefix(), clazz -> clazz.isAnnotationPresent(RestController.class) - && clazz.getPackage().getName().startsWith(api.getController())); // ä»…ä»…åŒ¹é… controller 包 + && antPathMatcher.match(api.getController(), clazz.getPackage().getName())); // ä»…ä»…åŒ¹é… controller 包 } @Bean diff --git a/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/file/FileApi.java b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/file/FileApi.java new file mode 100644 index 0000000000..5d55c57316 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/file/FileApi.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.infra.api.file; + +import cn.hutool.core.util.IdUtil; + +/** + * 文件 API æŽ¥å£ + * + * @author èŠ‹é“æºç  + */ +public interface FileApi { + + /** + * ä¿å­˜æ–‡ä»¶ï¼Œå¹¶è¿”回文件的访问路径 + * + * @param content 文件内容 + * @return 文件路径 + */ + default String createFile(byte[] content) { + return createFile(IdUtil.fastUUID(), content); + } + + /** + * ä¿å­˜æ–‡ä»¶ï¼Œå¹¶è¿”回文件的访问路径 + * + * @param path 文件路径 + * @param content 文件内容 + * @return 文件路径 + */ + String createFile(String path, byte[] content); + +} diff --git a/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/package-info.java b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/package-info.java new file mode 100644 index 0000000000..9ed9a778e9 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/package-info.java @@ -0,0 +1,4 @@ +/** + * infra API 包,定义暴露给其它模å—çš„ API + */ +package cn.iocoder.yudao.module.infra.api; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/DictTypeConstants.java b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/DictTypeConstants.java similarity index 100% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/DictTypeConstants.java rename to yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/DictTypeConstants.java diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/InfErrorCodeConstants.java b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/ErrorCodeConstants.java similarity index 86% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/InfErrorCodeConstants.java rename to yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/ErrorCodeConstants.java index 0eeaa74088..03eefe17f1 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/InfErrorCodeConstants.java +++ b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/ErrorCodeConstants.java @@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode; * * infra 系统,使用 1-001-000-000 段 */ -public interface InfErrorCodeConstants { +public interface ErrorCodeConstants { // ========== 傿•°é…ç½® 1001000000 ========== ErrorCode CONFIG_NOT_EXISTS = new ErrorCode(1001000001, "傿•°é…ç½®ä¸å­˜åœ¨"); @@ -27,4 +27,8 @@ public interface InfErrorCodeConstants { ErrorCode API_ERROR_LOG_NOT_FOUND = new ErrorCode(1001002000, "API 错误日志ä¸å­˜åœ¨"); ErrorCode API_ERROR_LOG_PROCESSED = new ErrorCode(1001002001, "API 错误日志已处ç†"); + // ========= 文件相关 1001003000================= + ErrorCode FILE_PATH_EXISTS = new ErrorCode(1001003000, "文件路径已存在"); + ErrorCode FILE_NOT_EXISTS = new ErrorCode(1001003001, "文件ä¸å­˜åœ¨"); + } diff --git a/yudao-module-infra/yudao-module-infra-impl/pom.xml b/yudao-module-infra/yudao-module-infra-impl/pom.xml index 9c98f6d622..69dbc4ec4b 100644 --- a/yudao-module-infra/yudao-module-infra-impl/pom.xml +++ b/yudao-module-infra/yudao-module-infra-impl/pom.xml @@ -23,19 +23,26 @@ yudao-module-member-api ${revision} - cn.iocoder.boot yudao-module-system-api ${revision} + + cn.iocoder.boot + yudao-module-infra-api + ${revision} + - cn.iocoder.boot yudao-spring-boot-starter-biz-operatelog + + cn.iocoder.boot + yudao-spring-boot-starter-biz-tenant + @@ -54,6 +61,12 @@ yudao-spring-boot-starter-redis + + + cn.iocoder.boot + yudao-spring-boot-starter-config + + cn.iocoder.boot @@ -73,6 +86,10 @@ yudao-spring-boot-starter-excel + + cn.smallbun.screw + screw-core + diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/api/file/FileApiImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/api/file/FileApiImpl.java new file mode 100644 index 0000000000..c5ce8db198 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/api/file/FileApiImpl.java @@ -0,0 +1,27 @@ +package cn.iocoder.yudao.module.infra.api.file; + +import cn.iocoder.yudao.module.infra.api.file.FileApi; +import cn.iocoder.yudao.module.infra.service.file.FileService; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; + +/** + * 文件 API 实现类 + * + * @author èŠ‹é“æºç  + */ +@Service +@Validated +public class FileApiImpl implements FileApi { + + @Resource + private FileService fileService; + + @Override + public String createFile(String path, byte[] content) { + return fileService.createFile(path, content); + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/api/package-info.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/api/package-info.java new file mode 100644 index 0000000000..af01680f6a --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/api/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.infra.api; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/ConfigController.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/ConfigController.java index 5bad8d83c9..73c3a2e528 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/ConfigController.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/ConfigController.java @@ -1,17 +1,15 @@ package cn.iocoder.yudao.module.infra.controller.admin.config; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.config.InfConfigDO; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import cn.iocoder.yudao.adminserver.modules.infra.controller.config.vo.*; import cn.iocoder.yudao.module.infra.controller.admin.config.vo.*; -import cn.iocoder.yudao.module.infra.convert.config.InfConfigConvert; -import cn.iocoder.yudao.module.infra.service.config.InfConfigService; -import cn.iocoder.yudao.module.infra.controller.config.vo.*; -import cn.iocoder.yudao.module.infra.enums.InfErrorCodeConstants; +import cn.iocoder.yudao.module.infra.convert.config.ConfigConvert; +import cn.iocoder.yudao.module.infra.dal.dataobject.config.ConfigDO; +import cn.iocoder.yudao.module.infra.service.config.ConfigService; +import cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; @@ -25,18 +23,17 @@ import javax.validation.Valid; import java.io.IOException; import java.util.List; -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; -@Api(tags = "傿•°é…ç½®") +@Api(tags = "管ç†åŽå° - 傿•°é…ç½®") @RestController @RequestMapping("/infra/config") @Validated public class ConfigController { @Resource - private InfConfigService configService; + private ConfigService configService; @PostMapping("/create") @ApiOperation("åˆ›å»ºå‚æ•°é…ç½®") @@ -67,19 +64,19 @@ public class ConfigController { @ApiImplicitParam(name = "id", value = "ç¼–å·", required = true, example = "1024", dataTypeClass = Long.class) @PreAuthorize("@ss.hasPermission('infra:config:query')") public CommonResult getConfig(@RequestParam("id") Long id) { - return success(InfConfigConvert.INSTANCE.convert(configService.getConfig(id))); + return success(ConfigConvert.INSTANCE.convert(configService.getConfig(id))); } @GetMapping(value = "/get-value-by-key") @ApiOperation(value = "æ ¹æ®å‚æ•°é”®åæŸ¥è¯¢å‚数值", notes = "æ•æ„Ÿé…置,ä¸å…许返回给å‰ç«¯") @ApiImplicitParam(name = "key", value = "傿•°é”®", required = true, example = "yunai.biz.username", dataTypeClass = String.class) public CommonResult getConfigKey(@RequestParam("key") String key) { - InfConfigDO config = configService.getConfigByKey(key); + ConfigDO config = configService.getConfigByKey(key); if (config == null) { return null; } if (config.getSensitive()) { - throw ServiceExceptionUtil.exception(InfErrorCodeConstants.CONFIG_GET_VALUE_ERROR_IF_SENSITIVE); + throw ServiceExceptionUtil.exception(ErrorCodeConstants.CONFIG_GET_VALUE_ERROR_IF_SENSITIVE); } return success(config.getValue()); } @@ -88,8 +85,8 @@ public class ConfigController { @ApiOperation("获å–傿•°é…置分页") @PreAuthorize("@ss.hasPermission('infra:config:query')") public CommonResult> getConfigPage(@Valid ConfigPageReqVO reqVO) { - PageResult page = configService.getConfigPage(reqVO); - return success(InfConfigConvert.INSTANCE.convertPage(page)); + PageResult page = configService.getConfigPage(reqVO); + return success(ConfigConvert.INSTANCE.convertPage(page)); } @GetMapping("/export") @@ -98,9 +95,9 @@ public class ConfigController { @OperateLog(type = EXPORT) public void exportSysConfig(@Valid ConfigExportReqVO reqVO, HttpServletResponse response) throws IOException { - List list = configService.getConfigList(reqVO); + List list = configService.getConfigList(reqVO); // æ‹¼æŽ¥æ•°æ® - List datas = InfConfigConvert.INSTANCE.convertList(list); + List datas = ConfigConvert.INSTANCE.convertList(list); // 输出 ExcelUtils.write(response, "傿•°é…ç½®.xls", "æ•°æ®", ConfigExcelVO.class, datas); } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigExportReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigExportReqVO.java index 73ee016cdc..2e328e6d97 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigExportReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigExportReqVO.java @@ -9,7 +9,7 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel("傿•°é…置导出 Request VO") +@ApiModel("管ç†åŽå° - 傿•°é…置导出 Request VO") @Data public class ConfigExportReqVO { diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigPageReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigPageReqVO.java index e97585f746..87d4ce9282 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigPageReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigPageReqVO.java @@ -12,7 +12,7 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel("傿•°é…置分页 Request VO") +@ApiModel("管ç†åŽå° - 傿•°é…置分页 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigRespVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigRespVO.java index 464eb030db..03196e0609 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigRespVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigRespVO.java @@ -9,7 +9,7 @@ import javax.validation.constraints.NotBlank; import javax.validation.constraints.Size; import java.util.Date; -@ApiModel("傿•°é…ç½®ä¿¡æ¯ Response VO") +@ApiModel("管ç†åŽå° - 傿•°é…ç½®ä¿¡æ¯ Response VO") @Data @EqualsAndHashCode(callSuper = true) public class ConfigRespVO extends ConfigBaseVO { diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigUpdateReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigUpdateReqVO.java index 5de7ea3b73..2335d61699 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigUpdateReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigUpdateReqVO.java @@ -8,7 +8,7 @@ import lombok.ToString; import javax.validation.constraints.NotNull; -@ApiModel("傿•°é…置创建 Request VO") +@ApiModel("管ç†åŽå° - 傿•°é…置创建 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/doc/InfDbDocController.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/doc/DbDocController.java similarity index 98% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/doc/InfDbDocController.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/doc/DbDocController.java index e8533e5cc2..57cad489f1 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/doc/InfDbDocController.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/doc/DbDocController.java @@ -16,7 +16,6 @@ import com.zaxxer.hikari.HikariDataSource; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; -import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -28,10 +27,10 @@ import java.io.File; import java.io.IOException; import java.util.Collections; -@Api(tags = "æ•°æ®åº“文档") +@Api(tags = "管ç†åŽå° - æ•°æ®åº“文档") @RestController @RequestMapping("/infra/db-doc") -public class InfDbDocController { +public class DbDocController { @Resource private DynamicDataSourceProperties dynamicDataSourceProperties; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/InfFileController.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/FileController.java similarity index 72% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/InfFileController.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/FileController.java index 7d7d46b83c..32789f1aff 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/InfFileController.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/FileController.java @@ -1,16 +1,15 @@ package cn.iocoder.yudao.module.infra.controller.admin.file; import cn.hutool.core.io.IoUtil; -import cn.iocoder.yudao.module.infra.controller.admin.file.vo.InfFilePageReqVO; -import cn.iocoder.yudao.module.infra.service.file.InfFileService; -import cn.iocoder.yudao.coreservice.modules.infra.controller.file.vo.InfFileRespVO; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO; -import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.infra.convert.file.InfFileConvert; import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.FilePageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.FileRespVO; +import cn.iocoder.yudao.module.infra.convert.file.FileConvert; +import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO; +import cn.iocoder.yudao.module.infra.service.file.FileService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -29,17 +28,15 @@ import java.io.IOException; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -@Api(tags = "文件存储") +@Api(tags = "管ç†åŽå° - 文件存储") @RestController @RequestMapping("/infra/file") @Validated @Slf4j -public class InfFileController { +public class FileController { @Resource - private InfFileService fileService; - @Resource - private InfFileCoreService fileCoreService; + private FileService fileService; @PostMapping("/upload") @ApiOperation("上传文件") @@ -49,7 +46,7 @@ public class InfFileController { }) public CommonResult uploadFile(@RequestParam("file") MultipartFile file, @RequestParam("path") String path) throws IOException { - return success(fileCoreService.createFile(path, IoUtil.readBytes(file.getInputStream()))); + return success(fileService.createFile(path, IoUtil.readBytes(file.getInputStream()))); } @DeleteMapping("/delete") @@ -57,7 +54,7 @@ public class InfFileController { @ApiImplicitParam(name = "id", value = "ç¼–å·", required = true, dataTypeClass = String.class) @PreAuthorize("@ss.hasPermission('infra:file:delete')") public CommonResult deleteFile(@RequestParam("id") String id) { - fileCoreService.deleteFile(id); + fileService.deleteFile(id); return success(true); } @@ -66,7 +63,7 @@ public class InfFileController { @ApiImplicitParam(name = "path", value = "文件附件", required = true, dataTypeClass = MultipartFile.class) public void getFile(HttpServletResponse response, @PathVariable("path") String path) throws IOException { TenantContextHolder.setNullTenantId(); - InfFileDO file = fileCoreService.getFile(path); + FileDO file = fileService.getFile(path); if (file == null) { log.warn("[getFile][path({}) 文件ä¸å­˜åœ¨]", path); response.setStatus(HttpStatus.NOT_FOUND.value()); @@ -78,9 +75,9 @@ public class InfFileController { @GetMapping("/page") @ApiOperation("获得文件分页") @PreAuthorize("@ss.hasPermission('infra:file:query')") - public CommonResult> getFilePage(@Valid InfFilePageReqVO pageVO) { - PageResult pageResult = fileService.getFilePage(pageVO); - return success(InfFileConvert.INSTANCE.convertPage(pageResult)); + public CommonResult> getFilePage(@Valid FilePageReqVO pageVO) { + PageResult pageResult = fileService.getFilePage(pageVO); + return success(FileConvert.INSTANCE.convertPage(pageResult)); } } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/InfFilePageReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/FilePageReqVO.java similarity index 91% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/InfFilePageReqVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/FilePageReqVO.java index 5b639cc391..bf67300ab2 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/InfFilePageReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/FilePageReqVO.java @@ -12,11 +12,11 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel("文件分页 Request VO") +@ApiModel("管ç†åŽå° - 文件分页 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class InfFilePageReqVO extends PageParam { +public class FilePageReqVO extends PageParam { @ApiModelProperty(value = "文件路径", example = "yudao", notes = "模糊匹é…") private String id; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/vo/InfFileRespVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/FileRespVO.java similarity index 69% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/vo/InfFileRespVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/FileRespVO.java index dfd914791a..838f3272b3 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/vo/InfFileRespVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/FileRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.infra.vo; +package cn.iocoder.yudao.module.infra.controller.admin.file.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -6,9 +6,9 @@ import lombok.Data; import java.util.Date; -@ApiModel(value = "文件 Response VO", description = "ä¸è¿”回 content 字段,太大") +@ApiModel(value = "管ç†åŽå° - 文件 Response VO", description = "ä¸è¿”回 content 字段,太大") @Data -public class InfFileRespVO { +public class FileRespVO { @ApiModelProperty(value = "文件路径", required = true, example = "yudao.jpg") private String id; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/InfJobController.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/JobController.java similarity index 76% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/InfJobController.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/JobController.java index f153f3f6ee..47ef687dde 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/InfJobController.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/JobController.java @@ -5,12 +5,10 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; import cn.iocoder.yudao.framework.quartz.core.util.CronUtils; -import cn.iocoder.yudao.adminserver.modules.infra.controller.job.vo.job.*; import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.*; -import cn.iocoder.yudao.module.infra.convert.job.InfJobConvert; -import cn.iocoder.yudao.module.infra.dal.dataobject.job.InfJobDO; -import cn.iocoder.yudao.module.infra.service.job.InfJobService; -import cn.iocoder.yudao.module.infra.controller.job.vo.job.*; +import cn.iocoder.yudao.module.infra.convert.job.JobConvert; +import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobDO; +import cn.iocoder.yudao.module.infra.service.job.JobService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -32,19 +30,19 @@ import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; -@Api(tags = "定时任务") +@Api(tags = "管ç†åŽå° - 定时任务") @RestController @RequestMapping("/infra/job") @Validated -public class InfJobController { +public class JobController { @Resource - private InfJobService jobService; + private JobService jobService; @PostMapping("/create") @ApiOperation("创建定时任务") @PreAuthorize("@ss.hasPermission('infra:job:create')") - public CommonResult createJob(@Valid @RequestBody InfJobCreateReqVO createReqVO) + public CommonResult createJob(@Valid @RequestBody JobCreateReqVO createReqVO) throws SchedulerException { return success(jobService.createJob(createReqVO)); } @@ -52,7 +50,7 @@ public class InfJobController { @PutMapping("/update") @ApiOperation("更新定时任务") @PreAuthorize("@ss.hasPermission('infra:job:update')") - public CommonResult updateJob(@Valid @RequestBody InfJobUpdateReqVO updateReqVO) + public CommonResult updateJob(@Valid @RequestBody JobUpdateReqVO updateReqVO) throws SchedulerException { jobService.updateJob(updateReqVO); return success(true); @@ -94,38 +92,38 @@ public class InfJobController { @ApiOperation("获得定时任务") @ApiImplicitParam(name = "id", value = "ç¼–å·", required = true, example = "1024", dataTypeClass = Long.class) @PreAuthorize("@ss.hasPermission('infra:job:query')") - public CommonResult getJob(@RequestParam("id") Long id) { - InfJobDO job = jobService.getJob(id); - return success(InfJobConvert.INSTANCE.convert(job)); + public CommonResult getJob(@RequestParam("id") Long id) { + JobDO job = jobService.getJob(id); + return success(JobConvert.INSTANCE.convert(job)); } @GetMapping("/list") @ApiOperation("获得定时任务列表") @ApiImplicitParam(name = "ids", value = "ç¼–å·åˆ—表", required = true, dataTypeClass = List.class) @PreAuthorize("@ss.hasPermission('infra:job:query')") - public CommonResult> getJobList(@RequestParam("ids") Collection ids) { - List list = jobService.getJobList(ids); - return success(InfJobConvert.INSTANCE.convertList(list)); + public CommonResult> getJobList(@RequestParam("ids") Collection ids) { + List list = jobService.getJobList(ids); + return success(JobConvert.INSTANCE.convertList(list)); } @GetMapping("/page") @ApiOperation("获得定时任务分页") @PreAuthorize("@ss.hasPermission('infra:job:query')") - public CommonResult> getJobPage(@Valid InfJobPageReqVO pageVO) { - PageResult pageResult = jobService.getJobPage(pageVO); - return success(InfJobConvert.INSTANCE.convertPage(pageResult)); + public CommonResult> getJobPage(@Valid JobPageReqVO pageVO) { + PageResult pageResult = jobService.getJobPage(pageVO); + return success(JobConvert.INSTANCE.convertPage(pageResult)); } @GetMapping("/export-excel") @ApiOperation("导出定时任务 Excel") @PreAuthorize("@ss.hasPermission('infra:job:export')") @OperateLog(type = EXPORT) - public void exportJobExcel(@Valid InfJobExportReqVO exportReqVO, + public void exportJobExcel(@Valid JobExportReqVO exportReqVO, HttpServletResponse response) throws IOException { - List list = jobService.getJobList(exportReqVO); + List list = jobService.getJobList(exportReqVO); // 导出 Excel - List datas = InfJobConvert.INSTANCE.convertList02(list); - ExcelUtils.write(response, "定时任务.xls", "æ•°æ®", InfJobExcelVO.class, datas); + List datas = JobConvert.INSTANCE.convertList02(list); + ExcelUtils.write(response, "定时任务.xls", "æ•°æ®", JobExcelVO.class, datas); } @GetMapping("/get_next_times") @@ -137,7 +135,7 @@ public class InfJobController { @PreAuthorize("@ss.hasPermission('infra:job:query')") public CommonResult> getJobNextTimes(@RequestParam("id") Long id, @RequestParam(value = "count", required = false, defaultValue = "5") Integer count) { - InfJobDO job = jobService.getJob(id); + JobDO job = jobService.getJob(id); if (job == null) { return success(Collections.emptyList()); } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/InfJobLogController.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/JobLogController.java similarity index 64% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/InfJobLogController.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/JobLogController.java index eb1211f324..40de986cf9 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/InfJobLogController.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/JobLogController.java @@ -4,13 +4,13 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.InfJobLogExcelVO; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.InfJobLogExportReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.InfJobLogPageReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.InfJobLogRespVO; -import cn.iocoder.yudao.module.infra.convert.job.InfJobLogConvert; -import cn.iocoder.yudao.module.infra.dal.dataobject.job.InfJobLogDO; -import cn.iocoder.yudao.module.infra.service.job.InfJobLogService; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogExcelVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogPageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogRespVO; +import cn.iocoder.yudao.module.infra.convert.job.JobLogConvert; +import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobLogDO; +import cn.iocoder.yudao.module.infra.service.job.JobLogService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; @@ -31,51 +31,51 @@ import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; -@Api(tags = "定时任务日志") +@Api(tags = "管ç†åŽå° - 定时任务日志") @RestController @RequestMapping("/infra/job-log") @Validated -public class InfJobLogController { +public class JobLogController { @Resource - private InfJobLogService jobLogService; + private JobLogService jobLogService; @GetMapping("/get") @ApiOperation("获得定时任务日志") @ApiImplicitParam(name = "id", value = "ç¼–å·", required = true, example = "1024", dataTypeClass = Long.class) @PreAuthorize("@ss.hasPermission('infra:job:query')") - public CommonResult getJobLog(@RequestParam("id") Long id) { - InfJobLogDO jobLog = jobLogService.getJobLog(id); - return success(InfJobLogConvert.INSTANCE.convert(jobLog)); + public CommonResult getJobLog(@RequestParam("id") Long id) { + JobLogDO jobLog = jobLogService.getJobLog(id); + return success(JobLogConvert.INSTANCE.convert(jobLog)); } @GetMapping("/list") @ApiOperation("获得定时任务日志列表") @ApiImplicitParam(name = "ids", value = "ç¼–å·åˆ—表", required = true, example = "1024,2048", dataTypeClass = List.class) @PreAuthorize("@ss.hasPermission('infra:job:query')") - public CommonResult> getJobLogList(@RequestParam("ids") Collection ids) { - List list = jobLogService.getJobLogList(ids); - return success(InfJobLogConvert.INSTANCE.convertList(list)); + public CommonResult> getJobLogList(@RequestParam("ids") Collection ids) { + List list = jobLogService.getJobLogList(ids); + return success(JobLogConvert.INSTANCE.convertList(list)); } @GetMapping("/page") @ApiOperation("获得定时任务日志分页") @PreAuthorize("@ss.hasPermission('infra:job:query')") - public CommonResult> getJobLogPage(@Valid InfJobLogPageReqVO pageVO) { - PageResult pageResult = jobLogService.getJobLogPage(pageVO); - return success(InfJobLogConvert.INSTANCE.convertPage(pageResult)); + public CommonResult> getJobLogPage(@Valid JobLogPageReqVO pageVO) { + PageResult pageResult = jobLogService.getJobLogPage(pageVO); + return success(JobLogConvert.INSTANCE.convertPage(pageResult)); } @GetMapping("/export-excel") @ApiOperation("导出定时任务日志 Excel") @PreAuthorize("@ss.hasPermission('infra:job:export')") @OperateLog(type = EXPORT) - public void exportJobLogExcel(@Valid InfJobLogExportReqVO exportReqVO, + public void exportJobLogExcel(@Valid JobLogExportReqVO exportReqVO, HttpServletResponse response) throws IOException { - List list = jobLogService.getJobLogList(exportReqVO); + List list = jobLogService.getJobLogList(exportReqVO); // 导出 Excel - List datas = InfJobLogConvert.INSTANCE.convertList02(list); - ExcelUtils.write(response, "任务日志.xls", "æ•°æ®", InfJobLogExcelVO.class, datas); + List datas = JobLogConvert.INSTANCE.convertList02(list); + ExcelUtils.write(response, "任务日志.xls", "æ•°æ®", JobLogExcelVO.class, datas); } } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobBaseVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobBaseVO.java similarity index 97% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobBaseVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobBaseVO.java index b0e0ead2bd..db3fcac1d9 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobBaseVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobBaseVO.java @@ -10,7 +10,7 @@ import javax.validation.constraints.NotNull; * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ */ @Data -public class InfJobBaseVO { +public class JobBaseVO { @ApiModelProperty(value = "任务åç§°", required = true, example = "测试任务") @NotNull(message = "任务åç§°ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobCreateReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobCreateReqVO.java similarity index 83% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobCreateReqVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobCreateReqVO.java index 5548c257c9..0e9f457410 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobCreateReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobCreateReqVO.java @@ -8,11 +8,11 @@ import lombok.ToString; import javax.validation.constraints.NotNull; -@ApiModel("定时任务创建 Request VO") +@ApiModel("管ç†åŽå° - 定时任务创建 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class InfJobCreateReqVO extends InfJobBaseVO { +public class JobCreateReqVO extends JobBaseVO { @ApiModelProperty(value = "处ç†å™¨çš„åå­—", required = true, example = "sysUserSessionTimeoutJob") @NotNull(message = "处ç†å™¨çš„åå­—ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobExcelVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobExcelVO.java similarity index 97% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobExcelVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobExcelVO.java index bffaaba232..6b5a6a0b17 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobExcelVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobExcelVO.java @@ -14,7 +14,7 @@ import java.util.Date; * @author èŠ‹é“æºç  */ @Data -public class InfJobExcelVO { +public class JobExcelVO { @ExcelProperty("任务编å·") private Long id; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobExportReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobExportReqVO.java similarity index 58% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobExportReqVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobExportReqVO.java index f30839f856..1155311d13 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobExportReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobExportReqVO.java @@ -4,17 +4,17 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -@ApiModel(value = "定时任务 Excel 导出 Request VO", description = "傿•°å’Œ InfJobPageReqVO 是一致的") +@ApiModel(value = "管ç†åŽå° - 定时任务 Excel 导出 Request VO", description = "傿•°å’Œ InfJobPageReqVO 是一致的") @Data -public class InfJobExportReqVO { +public class JobExportReqVO { @ApiModelProperty(value = "任务åç§°", example = "测试任务", notes = "模糊匹é…") private String name; - @ApiModelProperty(value = "任务状æ€", example = "1", notes = "å‚è§ InfJobStatusEnum 枚举") + @ApiModelProperty(value = "任务状æ€", example = "1", notes = "å‚è§ JobStatusEnum 枚举") private Integer status; - @ApiModelProperty(value = "处ç†å™¨çš„åå­—", example = "sysUserSessionTimeoutJob", notes = "模糊匹é…") + @ApiModelProperty(value = "处ç†å™¨çš„åå­—", example = "UserSessionTimeoutJob", notes = "模糊匹é…") private String handlerName; } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobPageReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobPageReqVO.java similarity index 88% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobPageReqVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobPageReqVO.java index edfc425a51..0d8dd53e3e 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobPageReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobPageReqVO.java @@ -7,11 +7,11 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; -@ApiModel("定时任务分页 Request VO") +@ApiModel("管ç†åŽå° - 定时任务分页 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class InfJobPageReqVO extends PageParam { +public class JobPageReqVO extends PageParam { @ApiModelProperty(value = "任务åç§°", example = "测试任务", notes = "模糊匹é…") private String name; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobRespVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobRespVO.java similarity index 90% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobRespVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobRespVO.java index 0b59518f3c..5861342783 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobRespVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobRespVO.java @@ -9,11 +9,11 @@ import lombok.ToString; import javax.validation.constraints.NotNull; import java.util.Date; -@ApiModel("定时任务 Response VO") +@ApiModel("管ç†åŽå° - 定时任务 Response VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class InfJobRespVO extends InfJobBaseVO { +public class JobRespVO extends JobBaseVO { @ApiModelProperty(value = "任务编å·", required = true, example = "1024") private Long id; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobUpdateReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobUpdateReqVO.java similarity index 82% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobUpdateReqVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobUpdateReqVO.java index 1722bbf316..f26cd226ca 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/InfJobUpdateReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobUpdateReqVO.java @@ -8,11 +8,11 @@ import lombok.ToString; import javax.validation.constraints.NotNull; -@ApiModel("定时任务更新 Request VO") +@ApiModel("管ç†åŽå° - 定时任务更新 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class InfJobUpdateReqVO extends InfJobBaseVO { +public class JobUpdateReqVO extends JobBaseVO { @ApiModelProperty(value = "任务编å·", required = true, example = "1024") @NotNull(message = "任务编å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogBaseVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogBaseVO.java similarity index 98% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogBaseVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogBaseVO.java index 78a33107ee..496969d73e 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogBaseVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogBaseVO.java @@ -14,7 +14,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ */ @Data -public class InfJobLogBaseVO { +public class JobLogBaseVO { @ApiModelProperty(value = "任务编å·", required = true, example = "1024") @NotNull(message = "任务编å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogExcelVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogExcelVO.java similarity index 97% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogExcelVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogExcelVO.java index 7c10bdc98c..25eed2a3f2 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogExcelVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogExcelVO.java @@ -14,7 +14,7 @@ import java.util.Date; * @author 芋艿 */ @Data -public class InfJobLogExcelVO { +public class JobLogExcelVO { @ExcelProperty("日志编å·") private Long id; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogExportReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogExportReqVO.java similarity index 85% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogExportReqVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogExportReqVO.java index 432b2d6da3..32aa9619bc 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogExportReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogExportReqVO.java @@ -9,9 +9,9 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel(value = "定时任务 Excel 导出 Request VO", description = "傿•°å’Œ InfJobLogPageReqVO 是一致的") +@ApiModel(value = "管ç†åŽå° - 定时任务 Excel 导出 Request VO", description = "傿•°å’Œ InfJobLogPageReqVO 是一致的") @Data -public class InfJobLogExportReqVO { +public class JobLogExportReqVO { @ApiModelProperty(value = "任务编å·", example = "10") private Long jobId; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogPageReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogPageReqVO.java similarity index 91% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogPageReqVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogPageReqVO.java index da3d5e3a61..f17f358868 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogPageReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogPageReqVO.java @@ -12,11 +12,11 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel("定时任务日志分页 Request VO") +@ApiModel("管ç†åŽå° - 定时任务日志分页 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class InfJobLogPageReqVO extends PageParam { +public class JobLogPageReqVO extends PageParam { @ApiModelProperty(value = "任务编å·", example = "10") private Long jobId; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogRespVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogRespVO.java similarity index 83% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogRespVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogRespVO.java index fa0e959d8b..c806a209af 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/InfJobLogRespVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogRespVO.java @@ -8,11 +8,11 @@ import lombok.ToString; import java.util.Date; -@ApiModel("定时任务日志 Response VO") +@ApiModel("管ç†åŽå° - 定时任务日志 Response VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class InfJobLogRespVO extends InfJobLogBaseVO { +public class JobLogRespVO extends JobLogBaseVO { @ApiModelProperty(value = "日志编å·", required = true, example = "1024") private Long id; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/InfApiAccessLogController.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/ApiAccessLogController.java similarity index 62% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/InfApiAccessLogController.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/ApiAccessLogController.java index 1c3ef1a069..5046ea5af6 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/InfApiAccessLogController.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/ApiAccessLogController.java @@ -1,16 +1,16 @@ package cn.iocoder.yudao.module.infra.controller.admin.logger; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiAccessLogDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.InfApiAccessLogExcelVO; -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.InfApiAccessLogExportReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.InfApiAccessLogPageReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.InfApiAccessLogRespVO; -import cn.iocoder.yudao.module.infra.convert.logger.InfApiAccessLogConvert; -import cn.iocoder.yudao.module.infra.service.logger.InfApiAccessLogService; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogExcelVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogPageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogRespVO; +import cn.iocoder.yudao.module.infra.convert.logger.ApiAccessLogConvert; +import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiAccessLogDO; +import cn.iocoder.yudao.module.infra.service.logger.ApiAccessLogService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; @@ -28,33 +28,33 @@ import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; -@Api(tags = "API 访问日志") +@Api(tags = "管ç†åŽå° - API 访问日志") @RestController @RequestMapping("/infra/api-access-log") @Validated -public class InfApiAccessLogController { +public class ApiAccessLogController { @Resource - private InfApiAccessLogService apiAccessLogService; + private ApiAccessLogService apiAccessLogService; @GetMapping("/page") @ApiOperation("获得API 访问日志分页") @PreAuthorize("@ss.hasPermission('infra:api-access-log:query')") - public CommonResult> getApiAccessLogPage(@Valid InfApiAccessLogPageReqVO pageVO) { - PageResult pageResult = apiAccessLogService.getApiAccessLogPage(pageVO); - return success(InfApiAccessLogConvert.INSTANCE.convertPage(pageResult)); + public CommonResult> getApiAccessLogPage(@Valid ApiAccessLogPageReqVO pageVO) { + PageResult pageResult = apiAccessLogService.getApiAccessLogPage(pageVO); + return success(ApiAccessLogConvert.INSTANCE.convertPage(pageResult)); } @GetMapping("/export-excel") @ApiOperation("导出API 访问日志 Excel") @PreAuthorize("@ss.hasPermission('infra:api-access-log:export')") @OperateLog(type = EXPORT) - public void exportApiAccessLogExcel(@Valid InfApiAccessLogExportReqVO exportReqVO, + public void exportApiAccessLogExcel(@Valid ApiAccessLogExportReqVO exportReqVO, HttpServletResponse response) throws IOException { - List list = apiAccessLogService.getApiAccessLogList(exportReqVO); + List list = apiAccessLogService.getApiAccessLogList(exportReqVO); // 导出 Excel - List datas = InfApiAccessLogConvert.INSTANCE.convertList02(list); - ExcelUtils.write(response, "API 访问日志.xls", "æ•°æ®", InfApiAccessLogExcelVO.class, datas); + List datas = ApiAccessLogConvert.INSTANCE.convertList02(list); + ExcelUtils.write(response, "API 访问日志.xls", "æ•°æ®", ApiAccessLogExcelVO.class, datas); } } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/InfApiErrorLogController.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/ApiErrorLogController.java similarity index 70% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/InfApiErrorLogController.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/ApiErrorLogController.java index db46bb2538..d592836b2e 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/InfApiErrorLogController.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/ApiErrorLogController.java @@ -1,16 +1,16 @@ package cn.iocoder.yudao.module.infra.controller.admin.logger; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiErrorLogDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.InfApiErrorLogExcelVO; -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.InfApiErrorLogExportReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.InfApiErrorLogPageReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.InfApiErrorLogRespVO; -import cn.iocoder.yudao.module.infra.convert.logger.InfApiErrorLogConvert; -import cn.iocoder.yudao.module.infra.service.logger.InfApiErrorLogService; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogExcelVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogPageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogRespVO; +import cn.iocoder.yudao.module.infra.convert.logger.ApiErrorLogConvert; +import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiErrorLogDO; +import cn.iocoder.yudao.module.infra.service.logger.ApiErrorLogService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -29,14 +29,14 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; -@Api(tags = "API 错误日志") +@Api(tags = "管ç†åŽå° - API 错误日志") @RestController @RequestMapping("/infra/api-error-log") @Validated -public class InfApiErrorLogController { +public class ApiErrorLogController { @Resource - private InfApiErrorLogService apiErrorLogService; + private ApiErrorLogService apiErrorLogService; @PutMapping("/update-status") @ApiOperation("æ›´æ–° API 错误日志的状æ€") @@ -54,21 +54,21 @@ public class InfApiErrorLogController { @GetMapping("/page") @ApiOperation("获得 API 错误日志分页") @PreAuthorize("@ss.hasPermission('infra:api-error-log:query')") - public CommonResult> getApiErrorLogPage(@Valid InfApiErrorLogPageReqVO pageVO) { - PageResult pageResult = apiErrorLogService.getApiErrorLogPage(pageVO); - return success(InfApiErrorLogConvert.INSTANCE.convertPage(pageResult)); + public CommonResult> getApiErrorLogPage(@Valid ApiErrorLogPageReqVO pageVO) { + PageResult pageResult = apiErrorLogService.getApiErrorLogPage(pageVO); + return success(ApiErrorLogConvert.INSTANCE.convertPage(pageResult)); } @GetMapping("/export-excel") @ApiOperation("导出 API 错误日志 Excel") @PreAuthorize("@ss.hasPermission('infra:api-error-log:export')") @OperateLog(type = EXPORT) - public void exportApiErrorLogExcel(@Valid InfApiErrorLogExportReqVO exportReqVO, + public void exportApiErrorLogExcel(@Valid ApiErrorLogExportReqVO exportReqVO, HttpServletResponse response) throws IOException { - List list = apiErrorLogService.getApiErrorLogList(exportReqVO); + List list = apiErrorLogService.getApiErrorLogList(exportReqVO); // 导出 Excel - List datas = InfApiErrorLogConvert.INSTANCE.convertList02(list); - ExcelUtils.write(response, "API 错误日志.xls", "æ•°æ®", InfApiErrorLogExcelVO.class, datas); + List datas = ApiErrorLogConvert.INSTANCE.convertList02(list); + ExcelUtils.write(response, "API 错误日志.xls", "æ•°æ®", ApiErrorLogExcelVO.class, datas); } } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogBaseVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogBaseVO.java similarity index 98% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogBaseVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogBaseVO.java index 6e44f4eb09..619dea65a5 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogBaseVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogBaseVO.java @@ -14,7 +14,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ */ @Data -public class InfApiAccessLogBaseVO { +public class ApiAccessLogBaseVO { @ApiModelProperty(value = "链路追踪编å·", required = true, example = "66600cb6-7852-11eb-9439-0242ac130002") @NotNull(message = "链路追踪编å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogExcelVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogExcelVO.java similarity index 97% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogExcelVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogExcelVO.java index 1d4e8b5306..5c1995c6a1 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogExcelVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogExcelVO.java @@ -14,7 +14,7 @@ import java.util.Date; * @author èŠ‹é“æºç  */ @Data -public class InfApiAccessLogExcelVO { +public class ApiAccessLogExcelVO { @ExcelProperty("日志主键") private Long id; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogExportReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogExportReqVO.java similarity index 88% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogExportReqVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogExportReqVO.java index 37ddddc010..8c6ac4879c 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogExportReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogExportReqVO.java @@ -9,9 +9,9 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel(value = "API 访问日志 Excel 导出 Request VO", description = "傿•°å’Œ InfApiAccessLogPageReqVO 是一致的") +@ApiModel(value = "管ç†åŽå° - API 访问日志 Excel 导出 Request VO", description = "傿•°å’Œ InfApiAccessLogPageReqVO 是一致的") @Data -public class InfApiAccessLogExportReqVO { +public class ApiAccessLogExportReqVO { @ApiModelProperty(value = "用户编å·", example = "666") private Long userId; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogPageReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogPageReqVO.java similarity index 92% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogPageReqVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogPageReqVO.java index 385dab1f0a..d318bfa920 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogPageReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogPageReqVO.java @@ -12,11 +12,11 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel("API 访问日志分页 Request VO") +@ApiModel("管ç†åŽå° - API 访问日志分页 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class InfApiAccessLogPageReqVO extends PageParam { +public class ApiAccessLogPageReqVO extends PageParam { @ApiModelProperty(value = "用户编å·", example = "666") private Long userId; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogRespVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogRespVO.java similarity index 82% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogRespVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogRespVO.java index c6b74d48d9..0458affb03 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/InfApiAccessLogRespVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogRespVO.java @@ -8,11 +8,11 @@ import lombok.ToString; import java.util.Date; -@ApiModel("API 访问日志 Response VO") +@ApiModel("管ç†åŽå° - API 访问日志 Response VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class InfApiAccessLogRespVO extends InfApiAccessLogBaseVO { +public class ApiAccessLogRespVO extends ApiAccessLogBaseVO { @ApiModelProperty(value = "日志主键", required = true, example = "1024") private Long id; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogBaseVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogBaseVO.java similarity index 99% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogBaseVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogBaseVO.java index d5d6d3ce1d..08fbdace87 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogBaseVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogBaseVO.java @@ -14,7 +14,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ */ @Data -public class InfApiErrorLogBaseVO { +public class ApiErrorLogBaseVO { @ApiModelProperty(value = "链路追踪编å·", required = true, example = "66600cb6-7852-11eb-9439-0242ac130002") @NotNull(message = "链路追踪编å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogExcelVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogExcelVO.java similarity index 94% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogExcelVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogExcelVO.java index 06b1da33b4..7e1e2ef0c4 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogExcelVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogExcelVO.java @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; import cn.iocoder.yudao.module.infra.enums.DictTypeConstants; -import cn.iocoder.yudao.module.system.enums.DictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @@ -15,7 +14,7 @@ import java.util.Date; * @author èŠ‹é“æºç  */ @Data -public class InfApiErrorLogExcelVO { +public class ApiErrorLogExcelVO { @ExcelProperty("ç¼–å·") private Integer id; @@ -27,7 +26,7 @@ public class InfApiErrorLogExcelVO { private Integer userId; @ExcelProperty(value = "用户类型", converter = DictConvert.class) - @DictFormat(DictTypeConstants.USER_TYPE) + @DictFormat(cn.iocoder.yudao.module.system.enums.DictTypeConstants.USER_TYPE) private Integer userType; @ExcelProperty("应用å") diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogExportReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogExportReqVO.java similarity index 87% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogExportReqVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogExportReqVO.java index dcb00a69f6..dd66ff6f31 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogExportReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogExportReqVO.java @@ -9,9 +9,9 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel(value = "API 错误日志 Excel 导出 Request VO", description = "傿•°å’Œ InfApiErrorLogPageReqVO 是一致的") +@ApiModel(value = "管ç†åŽå° - API 错误日志 Excel 导出 Request VO", description = "傿•°å’Œ InfApiErrorLogPageReqVO 是一致的") @Data -public class InfApiErrorLogExportReqVO { +public class ApiErrorLogExportReqVO { @ApiModelProperty(value = "用户编å·", example = "666") private Long userId; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogPageReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogPageReqVO.java similarity index 92% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogPageReqVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogPageReqVO.java index 964fee2c81..e9a36af965 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogPageReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogPageReqVO.java @@ -12,11 +12,11 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel("API 错误日志分页 Request VO") +@ApiModel("管ç†åŽå° - API 错误日志分页 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class InfApiErrorLogPageReqVO extends PageParam { +public class ApiErrorLogPageReqVO extends PageParam { @ApiModelProperty(value = "用户编å·", example = "666") private Long userId; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogRespVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogRespVO.java similarity index 86% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogRespVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogRespVO.java index ad70bb7726..0f0c2724dd 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/InfApiErrorLogRespVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogRespVO.java @@ -8,11 +8,11 @@ import lombok.ToString; import java.util.Date; -@ApiModel("API 错误日志 Response VO") +@ApiModel("管ç†åŽå° - API 错误日志 Response VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class InfApiErrorLogRespVO extends InfApiErrorLogBaseVO { +public class ApiErrorLogRespVO extends ApiErrorLogBaseVO { @ApiModelProperty(value = "ç¼–å·", required = true, example = "1024") private Integer id; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/RedisController.http b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/RedisController.http index 1c474e93f3..0310dea58f 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/RedisController.http +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/RedisController.http @@ -1,7 +1,9 @@ ### 请求 /infra/redis/get-monitor-info æŽ¥å£ => æˆåŠŸ GET {{baseUrl}}/infra/redis/get-monitor-info Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} ### 请求 /infra/redis/get-key-list æŽ¥å£ => æˆåŠŸ GET {{baseUrl}}/infra/redis/get-key-list Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/RedisController.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/RedisController.java index b7e499bd60..303e671848 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/RedisController.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/RedisController.java @@ -3,8 +3,8 @@ package cn.iocoder.yudao.module.infra.controller.admin.redis; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine; import cn.iocoder.yudao.framework.redis.core.RedisKeyRegistry; -import cn.iocoder.yudao.module.infra.controller.admin.redis.vo.InfRedisKeyRespVO; -import cn.iocoder.yudao.module.infra.controller.admin.redis.vo.InfRedisMonitorRespVO; +import cn.iocoder.yudao.module.infra.controller.admin.redis.vo.RedisKeyRespVO; +import cn.iocoder.yudao.module.infra.controller.admin.redis.vo.RedisMonitorRespVO; import cn.iocoder.yudao.module.infra.convert.redis.RedisConvert; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -22,7 +22,7 @@ import java.util.Properties; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -@Api(tags = "Redis 监控") +@Api(tags = "管ç†åŽå° - Redis 监控") @RestController @RequestMapping("/infra/redis") public class RedisController { @@ -33,7 +33,7 @@ public class RedisController { @GetMapping("/get-monitor-info") @ApiOperation("获得 Redis 监控信æ¯") @PreAuthorize("@ss.hasPermission('infra:redis:get-monitor-info')") - public CommonResult getRedisMonitorInfo() { + public CommonResult getRedisMonitorInfo() { // 获得 Redis ç»Ÿè®¡ä¿¡æ¯ Properties info = stringRedisTemplate.execute((RedisCallback) RedisServerCommands::info); Long dbSize = stringRedisTemplate.execute(RedisServerCommands::dbSize); @@ -47,7 +47,7 @@ public class RedisController { @GetMapping("/get-key-list") @ApiOperation("获得 Redis Key 列表") @PreAuthorize("@ss.hasPermission('infra:redis:get-key-list')") - public CommonResult> getKeyList() { + public CommonResult> getKeyList() { List keyDefines = RedisKeyRegistry.list(); return success(RedisConvert.INSTANCE.convertList(keyDefines)); } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/vo/InfRedisKeyRespVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/vo/RedisKeyRespVO.java similarity index 90% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/vo/InfRedisKeyRespVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/vo/RedisKeyRespVO.java index 4f35768a43..6fb71fe9a4 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/vo/InfRedisKeyRespVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/vo/RedisKeyRespVO.java @@ -9,11 +9,11 @@ import lombok.Data; import java.time.Duration; -@ApiModel("Redis Key ä¿¡æ¯ Response VO") +@ApiModel("管ç†åŽå° - Redis Key ä¿¡æ¯ Response VO") @Data @Builder @AllArgsConstructor -public class InfRedisKeyRespVO { +public class RedisKeyRespVO { @ApiModelProperty(value = "login_user:%s", required = true, example = "String") private String keyTemplate; @@ -22,7 +22,7 @@ public class InfRedisKeyRespVO { private RedisKeyDefine.KeyTypeEnum keyType; @ApiModelProperty(value = "Value 类型", required = true, example = "java.lang.String") - private Class valueType; + private Class valueType; @ApiModelProperty(value = "超时类型", required = true, example = "1") private RedisKeyDefine.TimeoutTypeEnum timeoutType; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/vo/InfRedisMonitorRespVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/vo/RedisMonitorRespVO.java similarity index 92% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/vo/InfRedisMonitorRespVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/vo/RedisMonitorRespVO.java index bee54013c2..703a697dc3 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/vo/InfRedisMonitorRespVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/vo/RedisMonitorRespVO.java @@ -9,11 +9,11 @@ import lombok.Data; import java.util.List; import java.util.Properties; -@ApiModel("Redis ç›‘æŽ§ä¿¡æ¯ Response VO") +@ApiModel("管ç†åŽå° - Redis ç›‘æŽ§ä¿¡æ¯ Response VO") @Data @Builder @AllArgsConstructor -public class InfRedisMonitorRespVO { +public class RedisMonitorRespVO { @ApiModelProperty(value = "Redis info 指令结果", required = true, notes = "具体字段,查看 Redis 文档") private Properties info; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/config/InfConfigConvert.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/config/ConfigConvert.java similarity index 53% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/config/InfConfigConvert.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/config/ConfigConvert.java index 4dbd0dc534..8e16af1a34 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/config/InfConfigConvert.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/config/ConfigConvert.java @@ -1,29 +1,29 @@ package cn.iocoder.yudao.module.infra.convert.config; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.config.InfConfigDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigCreateReqVO; import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigExcelVO; import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigRespVO; import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigUpdateReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.config.ConfigDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; import java.util.List; @Mapper -public interface InfConfigConvert { +public interface ConfigConvert { - InfConfigConvert INSTANCE = Mappers.getMapper(InfConfigConvert.class); + ConfigConvert INSTANCE = Mappers.getMapper(ConfigConvert.class); - PageResult convertPage(PageResult page); + PageResult convertPage(PageResult page); - ConfigRespVO convert(InfConfigDO bean); + ConfigRespVO convert(ConfigDO bean); - InfConfigDO convert(ConfigCreateReqVO bean); + ConfigDO convert(ConfigCreateReqVO bean); - InfConfigDO convert(ConfigUpdateReqVO bean); + ConfigDO convert(ConfigUpdateReqVO bean); - List convertList(List list); + List convertList(List list); } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/file/FileConvert.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/file/FileConvert.java new file mode 100644 index 0000000000..affeddba4b --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/file/FileConvert.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.module.infra.convert.file; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.FileRespVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +@Mapper +public interface FileConvert { + + FileConvert INSTANCE = Mappers.getMapper(FileConvert.class); + + FileRespVO convert(FileDO bean); + + PageResult convertPage(PageResult page); + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/file/InfFileConvert.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/file/InfFileConvert.java deleted file mode 100644 index cbc2298b36..0000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/file/InfFileConvert.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.iocoder.yudao.module.infra.convert.file; - -import cn.iocoder.yudao.coreservice.modules.infra.controller.file.vo.InfFileRespVO; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -@Mapper -public interface InfFileConvert { - - InfFileConvert INSTANCE = Mappers.getMapper(InfFileConvert.class); - - InfFileRespVO convert(InfFileDO bean); - - PageResult convertPage(PageResult page); - -} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/job/InfJobConvert.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/job/InfJobConvert.java deleted file mode 100644 index 5ad7680c2a..0000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/job/InfJobConvert.java +++ /dev/null @@ -1,36 +0,0 @@ -package cn.iocoder.yudao.module.infra.convert.job; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobCreateReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobExcelVO; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobRespVO; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobUpdateReqVO; -import cn.iocoder.yudao.module.infra.dal.dataobject.job.InfJobDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -/** - * 定时任务 Convert - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface InfJobConvert { - - InfJobConvert INSTANCE = Mappers.getMapper(InfJobConvert.class); - - InfJobDO convert(InfJobCreateReqVO bean); - - InfJobDO convert(InfJobUpdateReqVO bean); - - InfJobRespVO convert(InfJobDO bean); - - List convertList(List list); - - PageResult convertPage(PageResult page); - - List convertList02(List list); - -} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/job/InfJobLogConvert.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/job/InfJobLogConvert.java deleted file mode 100644 index 5134e6cd48..0000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/job/InfJobLogConvert.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.yudao.module.infra.convert.job; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.InfJobLogExcelVO; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.InfJobLogRespVO; -import cn.iocoder.yudao.module.infra.dal.dataobject.job.InfJobLogDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -/** - * 定时任务日志 Convert - * - * @author 芋艿 - */ -@Mapper -public interface InfJobLogConvert { - - InfJobLogConvert INSTANCE = Mappers.getMapper(InfJobLogConvert.class); - - InfJobLogRespVO convert(InfJobLogDO bean); - - List convertList(List list); - - PageResult convertPage(PageResult page); - - List convertList02(List list); - -} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/job/JobConvert.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/job/JobConvert.java new file mode 100644 index 0000000000..2c7aa02973 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/job/JobConvert.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.infra.convert.job; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobCreateReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobExcelVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobRespVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobUpdateReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * 定时任务 Convert + * + * @author èŠ‹é“æºç  + */ +@Mapper +public interface JobConvert { + + JobConvert INSTANCE = Mappers.getMapper(JobConvert.class); + + JobDO convert(JobCreateReqVO bean); + + JobDO convert(JobUpdateReqVO bean); + + JobRespVO convert(JobDO bean); + + List convertList(List list); + + PageResult convertPage(PageResult page); + + List convertList02(List list); + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/job/JobLogConvert.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/job/JobLogConvert.java new file mode 100644 index 0000000000..3f32c526d6 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/job/JobLogConvert.java @@ -0,0 +1,30 @@ +package cn.iocoder.yudao.module.infra.convert.job; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogExcelVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogRespVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobLogDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * 定时任务日志 Convert + * + * @author 芋艿 + */ +@Mapper +public interface JobLogConvert { + + JobLogConvert INSTANCE = Mappers.getMapper(JobLogConvert.class); + + JobLogRespVO convert(JobLogDO bean); + + List convertList(List list); + + PageResult convertPage(PageResult page); + + List convertList02(List list); + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/ApiAccessLogConvert.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/ApiAccessLogConvert.java new file mode 100644 index 0000000000..7162d4d9ac --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/ApiAccessLogConvert.java @@ -0,0 +1,33 @@ +package cn.iocoder.yudao.module.infra.convert.logger; + +import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiAccessLogCreateReqDTO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogExcelVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogRespVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiAccessLogDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * API 访问日志 Convert + * + * @author èŠ‹é“æºç  + */ +@Mapper +public interface ApiAccessLogConvert { + + ApiAccessLogConvert INSTANCE = Mappers.getMapper(ApiAccessLogConvert.class); + + ApiAccessLogRespVO convert(ApiAccessLogDO bean); + + List convertList(List list); + + PageResult convertPage(PageResult page); + + List convertList02(List list); + + ApiAccessLogDO convert(ApiAccessLogCreateReqDTO bean); + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/ApiErrorLogConvert.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/ApiErrorLogConvert.java new file mode 100644 index 0000000000..8eef7463ab --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/ApiErrorLogConvert.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.infra.convert.logger; + +import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiErrorLogCreateReqDTO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogExcelVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogRespVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiErrorLogDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * API 错误日志 Convert + * + * @author èŠ‹é“æºç  + */ +@Mapper +public interface ApiErrorLogConvert { + + ApiErrorLogConvert INSTANCE = Mappers.getMapper(ApiErrorLogConvert.class); + + ApiErrorLogRespVO convert(ApiErrorLogDO bean); + + PageResult convertPage(PageResult page); + + List convertList02(List list); + + ApiErrorLogDO convert(ApiErrorLogCreateReqDTO bean); + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/InfApiAccessLogConvert.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/InfApiAccessLogConvert.java deleted file mode 100644 index a1ca188ae2..0000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/InfApiAccessLogConvert.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.yudao.module.infra.convert.logger; - -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiAccessLogDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.InfApiAccessLogExcelVO; -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.InfApiAccessLogRespVO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -/** - * API 访问日志 Convert - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface InfApiAccessLogConvert { - - InfApiAccessLogConvert INSTANCE = Mappers.getMapper(InfApiAccessLogConvert.class); - - InfApiAccessLogRespVO convert(InfApiAccessLogDO bean); - - List convertList(List list); - - PageResult convertPage(PageResult page); - - List convertList02(List list); - -} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/InfApiAccessLogCoreConvert.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/InfApiAccessLogCoreConvert.java deleted file mode 100644 index f8a331a335..0000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/InfApiAccessLogCoreConvert.java +++ /dev/null @@ -1,15 +0,0 @@ -package cn.iocoder.yudao.module.infra.convert.logger; - -import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiAccessLogCreateReqDTO; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiAccessLogDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -@Mapper -public interface InfApiAccessLogCoreConvert { - - InfApiAccessLogCoreConvert INSTANCE = Mappers.getMapper(InfApiAccessLogCoreConvert.class); - - InfApiAccessLogDO convert(ApiAccessLogCreateReqDTO bean); - -} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/InfApiErrorLogConvert.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/InfApiErrorLogConvert.java deleted file mode 100644 index 1b8d33b6db..0000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/InfApiErrorLogConvert.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.yudao.module.infra.convert.logger; - -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiErrorLogDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.InfApiErrorLogExcelVO; -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.InfApiErrorLogRespVO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -/** - * API 错误日志 Convert - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface InfApiErrorLogConvert { - - InfApiErrorLogConvert INSTANCE = Mappers.getMapper(InfApiErrorLogConvert.class); - - InfApiErrorLogRespVO convert(InfApiErrorLogDO bean); - - PageResult convertPage(PageResult page); - - List convertList02(List list); - -} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/InfApiErrorLogCoreConvert.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/InfApiErrorLogCoreConvert.java deleted file mode 100644 index cf8225f0a3..0000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/logger/InfApiErrorLogCoreConvert.java +++ /dev/null @@ -1,15 +0,0 @@ -package cn.iocoder.yudao.module.infra.convert.logger; - -import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiErrorLogCreateReqDTO; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiErrorLogDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -@Mapper -public interface InfApiErrorLogCoreConvert { - - InfApiErrorLogCoreConvert INSTANCE = Mappers.getMapper(InfApiErrorLogCoreConvert.class); - - InfApiErrorLogDO convert(ApiErrorLogCreateReqDTO bean); - -} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/redis/RedisConvert.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/redis/RedisConvert.java index f5030a0596..e1c9311849 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/redis/RedisConvert.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/redis/RedisConvert.java @@ -2,8 +2,8 @@ package cn.iocoder.yudao.module.infra.convert.redis; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine; -import cn.iocoder.yudao.module.infra.controller.admin.redis.vo.InfRedisKeyRespVO; -import cn.iocoder.yudao.module.infra.controller.admin.redis.vo.InfRedisMonitorRespVO; +import cn.iocoder.yudao.module.infra.controller.admin.redis.vo.RedisKeyRespVO; +import cn.iocoder.yudao.module.infra.controller.admin.redis.vo.RedisMonitorRespVO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -16,11 +16,11 @@ public interface RedisConvert { RedisConvert INSTANCE = Mappers.getMapper(RedisConvert.class); - default InfRedisMonitorRespVO build(Properties info, Long dbSize, Properties commandStats) { - InfRedisMonitorRespVO respVO = InfRedisMonitorRespVO.builder().info(info).dbSize(dbSize) + default RedisMonitorRespVO build(Properties info, Long dbSize, Properties commandStats) { + RedisMonitorRespVO respVO = RedisMonitorRespVO.builder().info(info).dbSize(dbSize) .commandStats(new ArrayList<>(commandStats.size())).build(); commandStats.forEach((key, value) -> { - respVO.getCommandStats().add(InfRedisMonitorRespVO.CommandStat.builder() + respVO.getCommandStats().add(RedisMonitorRespVO.CommandStat.builder() .command(StrUtil.subAfter((String) key, "cmdstat_", false)) .calls(Integer.valueOf(StrUtil.subBetween((String) value, "calls=", ","))) .usec(Long.valueOf(StrUtil.subBetween((String) value, "usec=", ","))) @@ -29,6 +29,6 @@ public interface RedisConvert { return respVO; } - List convertList(List list); + List convertList(List list); } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/config/InfConfigDO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/config/ConfigDO.java similarity index 94% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/config/InfConfigDO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/config/ConfigDO.java index 4f5107e61e..dbcdfed56d 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/config/InfConfigDO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/config/ConfigDO.java @@ -13,11 +13,11 @@ import lombok.ToString; * * @author èŠ‹é“æºç  */ -@TableName("inf_config") +@TableName("infra_config") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class InfConfigDO extends BaseDO { +public class ConfigDO extends BaseDO { /** * 傿•°ä¸»é”® diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/file/InfFileDO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/file/FileDO.java similarity index 86% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/file/InfFileDO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/file/FileDO.java index 98aab4252a..47eb2403e6 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/file/InfFileDO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/file/FileDO.java @@ -1,6 +1,5 @@ package cn.iocoder.yudao.module.infra.dal.dataobject.file; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; @@ -16,13 +15,13 @@ import java.io.InputStream; * @author èŠ‹é“æºç  */ @Data -@TableName("inf_file") +@TableName("infra_file") @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) @Builder @NoArgsConstructor @AllArgsConstructor -public class InfFileDO extends TenantBaseDO { +public class FileDO extends TenantBaseDO { /** * 文件路径 diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/job/InfJobDO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/job/JobDO.java similarity index 89% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/job/InfJobDO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/job/JobDO.java index 43bc2a0b7b..c419b1fdbb 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/job/InfJobDO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/job/JobDO.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.infra.dal.dataobject.job; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.module.infra.enums.job.InfJobStatusEnum; +import cn.iocoder.yudao.module.infra.enums.job.JobStatusEnum; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.*; @@ -11,14 +11,14 @@ import lombok.*; * * @author èŠ‹é“æºç  */ -@TableName("inf_job") +@TableName("infra_job") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) @Builder @NoArgsConstructor @AllArgsConstructor -public class InfJobDO extends BaseDO { +public class JobDO extends BaseDO { /** * ä»»åŠ¡ç¼–å· @@ -32,7 +32,7 @@ public class InfJobDO extends BaseDO { /** * ä»»åŠ¡çŠ¶æ€ * - * 枚举 {@link InfJobStatusEnum} + * 枚举 {@link JobStatusEnum} */ private Integer status; /** diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/job/InfJobLogDO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/job/JobLogDO.java similarity index 81% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/job/InfJobLogDO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/job/JobLogDO.java index ecbe209dd0..fa79b9b64d 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/job/InfJobLogDO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/job/JobLogDO.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.infra.dal.dataobject.job; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler; -import cn.iocoder.yudao.module.infra.enums.job.InfJobLogStatusEnum; +import cn.iocoder.yudao.module.infra.enums.job.JobLogStatusEnum; import com.baomidou.mybatisplus.annotation.TableName; import lombok.*; @@ -13,14 +13,14 @@ import java.util.Date; * * @author èŠ‹é“æºç  */ -@TableName("inf_job_log") +@TableName("infra_job_log") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) @Builder @NoArgsConstructor @AllArgsConstructor -public class InfJobLogDO extends BaseDO { +public class JobLogDO extends BaseDO { /** * æ—¥å¿—ç¼–å· @@ -29,19 +29,19 @@ public class InfJobLogDO extends BaseDO { /** * ä»»åŠ¡ç¼–å· * - * å…³è” {@link InfJobDO#getId()} + * å…³è” {@link JobDO#getId()} */ private Long jobId; /** * 处ç†å™¨çš„åå­— * - * 冗余字段 {@link InfJobDO#getHandlerName()} + * 冗余字段 {@link JobDO#getHandlerName()} */ private String handlerName; /** * 处ç†å™¨çš„傿•° * - * 冗余字段 {@link InfJobDO#getHandlerParam()} + * 冗余字段 {@link JobDO#getHandlerParam()} */ private String handlerParam; /** @@ -66,7 +66,7 @@ public class InfJobLogDO extends BaseDO { /** * çŠ¶æ€ * - * 枚举 {@link InfJobLogStatusEnum} + * 枚举 {@link JobLogStatusEnum} */ private Integer status; /** diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/InfApiAccessLogDO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/ApiAccessLogDO.java similarity index 96% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/InfApiAccessLogDO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/ApiAccessLogDO.java index eea09b6bd8..2ad8a326da 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/InfApiAccessLogDO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/ApiAccessLogDO.java @@ -14,14 +14,14 @@ import java.util.Date; * * @author èŠ‹é“æºç  */ -@TableName("inf_api_access_log") +@TableName("infra_api_access_log") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) @Builder @NoArgsConstructor @AllArgsConstructor -public class InfApiAccessLogDO extends TenantBaseDO { +public class ApiAccessLogDO extends TenantBaseDO { /** * ç¼–å· diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/InfApiErrorLogDO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/ApiErrorLogDO.java similarity index 94% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/InfApiErrorLogDO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/ApiErrorLogDO.java index bcf394cd64..fa5b162a59 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/InfApiErrorLogDO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/ApiErrorLogDO.java @@ -1,6 +1,5 @@ package cn.iocoder.yudao.module.infra.dal.dataobject.logger; -import cn.iocoder.yudao.coreservice.modules.infra.enums.logger.InfApiErrorLogProcessStatusEnum; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; import com.baomidou.mybatisplus.annotation.TableId; @@ -14,14 +13,14 @@ import java.util.Date; * * @author èŠ‹é“æºç  */ -@TableName("inf_api_error_log") +@TableName("infra_api_error_log") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) @Builder @NoArgsConstructor @AllArgsConstructor -public class InfApiErrorLogDO extends TenantBaseDO { +public class ApiErrorLogDO extends TenantBaseDO { /** * ç¼–å· diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/InfConfigCoreDAOImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/ConfigCoreDAOImpl.java similarity index 88% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/InfConfigCoreDAOImpl.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/ConfigCoreDAOImpl.java index a4c0377e43..fe531b4023 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/InfConfigCoreDAOImpl.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/ConfigCoreDAOImpl.java @@ -16,11 +16,11 @@ import java.util.List; * * @author èŠ‹é“æºç  */ -public class InfConfigCoreDAOImpl implements ConfigFrameworkDAO { +public class ConfigCoreDAOImpl implements ConfigFrameworkDAO { private final JdbcTemplate jdbcTemplate; - public InfConfigCoreDAOImpl(String jdbcUrl, String username, String password) { + public ConfigCoreDAOImpl(String jdbcUrl, String username, String password) { DataSource dataSource = new DriverManagerDataSource(jdbcUrl, username, password); this.jdbcTemplate = new JdbcTemplate(dataSource); } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/InfConfigMapper.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/ConfigMapper.java similarity index 67% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/InfConfigMapper.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/ConfigMapper.java index f3d2e29703..aad99ccba6 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/InfConfigMapper.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/ConfigMapper.java @@ -1,33 +1,33 @@ package cn.iocoder.yudao.module.infra.dal.mysql.config; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.config.InfConfigDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigExportReqVO; import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigPageReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.config.ConfigDO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper -public interface InfConfigMapper extends BaseMapperX { +public interface ConfigMapper extends BaseMapperX { - default InfConfigDO selectByKey(String key) { - return selectOne(new QueryWrapper().eq("`key`", key)); + default ConfigDO selectByKey(String key) { + return selectOne(new QueryWrapper().eq("`key`", key)); } - default PageResult selectPage(ConfigPageReqVO reqVO) { - return selectPage(reqVO, new QueryWrapperX() + default PageResult selectPage(ConfigPageReqVO reqVO) { + return selectPage(reqVO, new QueryWrapperX() .likeIfPresent("name", reqVO.getName()) .likeIfPresent("`key`", reqVO.getKey()) .eqIfPresent("`type`", reqVO.getType()) .betweenIfPresent("create_time", reqVO.getBeginTime(), reqVO.getEndTime())); } - default List selectList(ConfigExportReqVO reqVO) { - return selectList(new QueryWrapperX() + default List selectList(ConfigExportReqVO reqVO) { + return selectList(new QueryWrapperX() .likeIfPresent("name", reqVO.getName()) .likeIfPresent("`key`", reqVO.getKey()) .eqIfPresent("`type`", reqVO.getType()) diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/FileMapper.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/FileMapper.java new file mode 100644 index 0000000000..06e887dde5 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/FileMapper.java @@ -0,0 +1,44 @@ +package cn.iocoder.yudao.module.infra.dal.mysql.file; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.FilePageReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO; +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import org.apache.ibatis.annotations.Mapper; + +/** + * 文件æ“作 Mapper + * + * @author èŠ‹é“æºç  + */ +@Mapper +public interface FileMapper extends BaseMapperX { + + default PageResult selectPage(FilePageReqVO reqVO) { + return selectPage(reqVO, new QueryWrapperX() + .likeIfPresent("id", reqVO.getId()) + .likeIfPresent("type", reqVO.getType()) + .betweenIfPresent("create_time", reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) + .orderByDesc("create_time")); + } + + default Integer selectCountById(String id) { + return selectCount(FileDO::getId, id); + } + + /** + * 基于 Path èŽ·å–æ–‡ä»¶ + * 实际上,是基于 ID 查询 + * 由于å‰ç«¯ä½¿ç”¨ 的方å¼èŽ·å–图片,所以需è¦å¿½ç•¥ç§Ÿæˆ·çš„æŸ¥è¯¢ + * + * @param path 路径 + * @return 文件 + */ + @InterceptorIgnore(tenantLine = "true") + default FileDO selectByPath(String path) { + return selectById(path); + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/InfFileCoreMapper.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/InfFileCoreMapper.java deleted file mode 100644 index 065ec0d4f1..0000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/InfFileCoreMapper.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.mysql.file; - -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO; -import com.baomidou.mybatisplus.annotation.InterceptorIgnore; -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public interface InfFileCoreMapper extends BaseMapperX { - - default Integer selectCountById(String id) { - return selectCount(InfFileDO::getId, id); - } - - /** - * 基于 Path èŽ·å–æ–‡ä»¶ - * 实际上,是基于 ID 查询 - * 由于å‰ç«¯ä½¿ç”¨ 的方å¼èŽ·å–图片,所以需è¦å¿½ç•¥ç§Ÿæˆ·çš„æŸ¥è¯¢ - * - * @param path 路径 - * @return 文件 - */ - @InterceptorIgnore(tenantLine = "true") - default InfFileDO selectByPath(String path) { - return selectById(path); - } - -} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/InfFileMapper.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/InfFileMapper.java deleted file mode 100644 index c987a8e309..0000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/InfFileMapper.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.mysql.file; - -import cn.iocoder.yudao.module.infra.controller.admin.file.vo.InfFilePageReqVO; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; -import org.apache.ibatis.annotations.Mapper; - -/** - * admin 文件æ“作 Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface InfFileMapper extends BaseMapperX { - default PageResult selectPage(InfFilePageReqVO reqVO) { - return selectPage(reqVO, new QueryWrapperX() - .likeIfPresent("id", reqVO.getId()) - .likeIfPresent("type", reqVO.getType()) - .betweenIfPresent("create_time", reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) - .orderByDesc("create_time")); - } -} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/job/InfJobMapper.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/job/InfJobMapper.java deleted file mode 100644 index 2f2ac91c11..0000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/job/InfJobMapper.java +++ /dev/null @@ -1,41 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.mysql.job; - -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobExportReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobPageReqVO; -import cn.iocoder.yudao.module.infra.dal.dataobject.job.InfJobDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import org.apache.ibatis.annotations.Mapper; - -import java.util.List; - -/** - * 定时任务 Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface InfJobMapper extends BaseMapperX { - - default InfJobDO selectByHandlerName(String handlerName) { - return selectOne(InfJobDO::getHandlerName, handlerName); - } - - default PageResult selectPage(InfJobPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .likeIfPresent(InfJobDO::getName, reqVO.getName()) - .eqIfPresent(InfJobDO::getStatus, reqVO.getStatus()) - .likeIfPresent(InfJobDO::getHandlerName, reqVO.getHandlerName()) - ); - } - - default List selectList(InfJobExportReqVO reqVO) { - return selectList(new LambdaQueryWrapperX() - .likeIfPresent(InfJobDO::getName, reqVO.getName()) - .eqIfPresent(InfJobDO::getStatus, reqVO.getStatus()) - .likeIfPresent(InfJobDO::getHandlerName, reqVO.getHandlerName()) - ); - } - -} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/job/InfJobLogMapper.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/job/JobLogMapper.java similarity index 73% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/job/InfJobLogMapper.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/job/JobLogMapper.java index 8d607c79f0..fe196df359 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/job/InfJobLogMapper.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/job/JobLogMapper.java @@ -3,9 +3,9 @@ package cn.iocoder.yudao.module.infra.dal.mysql.job; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.InfJobLogExportReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.InfJobLogPageReqVO; -import cn.iocoder.yudao.module.infra.dal.dataobject.job.InfJobLogDO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogPageReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobLogDO; import org.apache.ibatis.annotations.Mapper; import java.util.List; @@ -16,10 +16,10 @@ import java.util.List; * @author èŠ‹é“æºç  */ @Mapper -public interface InfJobLogMapper extends BaseMapperX { +public interface JobLogMapper extends BaseMapperX { - default PageResult selectPage(InfJobLogPageReqVO reqVO) { - return selectPage(reqVO, new QueryWrapperX() + default PageResult selectPage(JobLogPageReqVO reqVO) { + return selectPage(reqVO, new QueryWrapperX() .eqIfPresent("job_id", reqVO.getJobId()) .likeIfPresent("handler_name", reqVO.getHandlerName()) .geIfPresent("begin_time", reqVO.getBeginTime()) @@ -29,8 +29,8 @@ public interface InfJobLogMapper extends BaseMapperX { ); } - default List selectList(InfJobLogExportReqVO reqVO) { - return selectList(new QueryWrapperX() + default List selectList(JobLogExportReqVO reqVO) { + return selectList(new QueryWrapperX() .eqIfPresent("job_id", reqVO.getJobId()) .likeIfPresent("handler_name", reqVO.getHandlerName()) .geIfPresent("begin_time", reqVO.getBeginTime()) diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/job/JobMapper.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/job/JobMapper.java new file mode 100644 index 0000000000..883906a013 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/job/JobMapper.java @@ -0,0 +1,41 @@ +package cn.iocoder.yudao.module.infra.dal.mysql.job; + +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobPageReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 定时任务 Mapper + * + * @author èŠ‹é“æºç  + */ +@Mapper +public interface JobMapper extends BaseMapperX { + + default JobDO selectByHandlerName(String handlerName) { + return selectOne(JobDO::getHandlerName, handlerName); + } + + default PageResult selectPage(JobPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(JobDO::getName, reqVO.getName()) + .eqIfPresent(JobDO::getStatus, reqVO.getStatus()) + .likeIfPresent(JobDO::getHandlerName, reqVO.getHandlerName()) + ); + } + + default List selectList(JobExportReqVO reqVO) { + return selectList(new LambdaQueryWrapperX() + .likeIfPresent(JobDO::getName, reqVO.getName()) + .eqIfPresent(JobDO::getStatus, reqVO.getStatus()) + .likeIfPresent(JobDO::getHandlerName, reqVO.getHandlerName()) + ); + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/InfApiAccessLogMapper.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/ApiAccessLogMapper.java similarity index 74% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/InfApiAccessLogMapper.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/ApiAccessLogMapper.java index 60e080bea2..8f00fbebc9 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/InfApiAccessLogMapper.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/ApiAccessLogMapper.java @@ -1,11 +1,11 @@ package cn.iocoder.yudao.module.infra.dal.mysql.logger; -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.InfApiAccessLogExportReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.InfApiAccessLogPageReqVO; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiAccessLogDO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogPageReqVO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; +import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiAccessLogDO; import org.apache.ibatis.annotations.Mapper; import java.util.List; @@ -16,10 +16,10 @@ import java.util.List; * @author èŠ‹é“æºç  */ @Mapper -public interface InfApiAccessLogMapper extends BaseMapperX { +public interface ApiAccessLogMapper extends BaseMapperX { - default PageResult selectPage(InfApiAccessLogPageReqVO reqVO) { - return selectPage(reqVO, new QueryWrapperX() + default PageResult selectPage(ApiAccessLogPageReqVO reqVO) { + return selectPage(reqVO, new QueryWrapperX() .eqIfPresent("user_id", reqVO.getUserId()) .eqIfPresent("user_type", reqVO.getUserType()) .eqIfPresent("application_name", reqVO.getApplicationName()) @@ -31,8 +31,8 @@ public interface InfApiAccessLogMapper extends BaseMapperX { ); } - default List selectList(InfApiAccessLogExportReqVO reqVO) { - return selectList(new QueryWrapperX() + default List selectList(ApiAccessLogExportReqVO reqVO) { + return selectList(new QueryWrapperX() .eqIfPresent("user_id", reqVO.getUserId()) .eqIfPresent("user_type", reqVO.getUserType()) .eqIfPresent("application_name", reqVO.getApplicationName()) diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/InfApiErrorLogMapper.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/ApiErrorLogMapper.java similarity index 73% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/InfApiErrorLogMapper.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/ApiErrorLogMapper.java index a9f80b1294..7e4ab62c39 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/InfApiErrorLogMapper.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/ApiErrorLogMapper.java @@ -1,11 +1,11 @@ package cn.iocoder.yudao.module.infra.dal.mysql.logger; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiErrorLogDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.InfApiErrorLogExportReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.InfApiErrorLogPageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogPageReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiErrorLogDO; import org.apache.ibatis.annotations.Mapper; import java.util.List; @@ -16,10 +16,10 @@ import java.util.List; * @author èŠ‹é“æºç  */ @Mapper -public interface InfApiErrorLogMapper extends BaseMapperX { +public interface ApiErrorLogMapper extends BaseMapperX { - default PageResult selectPage(InfApiErrorLogPageReqVO reqVO) { - return selectPage(reqVO, new QueryWrapperX() + default PageResult selectPage(ApiErrorLogPageReqVO reqVO) { + return selectPage(reqVO, new QueryWrapperX() .eqIfPresent("user_id", reqVO.getUserId()) .eqIfPresent("user_type", reqVO.getUserType()) .eqIfPresent("application_name", reqVO.getApplicationName()) @@ -30,8 +30,8 @@ public interface InfApiErrorLogMapper extends BaseMapperX { ); } - default List selectList(InfApiErrorLogExportReqVO reqVO) { - return selectList(new QueryWrapperX() + default List selectList(ApiErrorLogExportReqVO reqVO) { + return selectList(new QueryWrapperX() .eqIfPresent("user_id", reqVO.getUserId()) .eqIfPresent("user_type", reqVO.getUserType()) .eqIfPresent("application_name", reqVO.getApplicationName()) diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/InfApiAccessLogCoreMapper.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/InfApiAccessLogCoreMapper.java deleted file mode 100644 index 52945f26b1..0000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/InfApiAccessLogCoreMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.mysql.logger; - -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiAccessLogDO; -import org.apache.ibatis.annotations.Mapper; - -/** - * API 访问日志 Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface InfApiAccessLogCoreMapper extends BaseMapperX { -} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/InfApiErrorLogCoreMapper.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/InfApiErrorLogCoreMapper.java deleted file mode 100644 index f7124e9b80..0000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/InfApiErrorLogCoreMapper.java +++ /dev/null @@ -1,9 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.mysql.logger; - -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiErrorLogDO; -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public interface InfApiErrorLogCoreMapper extends BaseMapperX { -} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/SysErrorCodeConstants.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/SysErrorCodeConstants.java deleted file mode 100644 index d9a41b38f5..0000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/SysErrorCodeConstants.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.iocoder.yudao.module.infra.enums; - -import cn.iocoder.yudao.framework.common.exception.ErrorCode; - -/** - * System é”™è¯¯ç æžšä¸¾ç±» - * - * system 系统,使用 1-006-000-000 段 - */ -public interface SysErrorCodeConstants { - - // ========= 文件相关 1006001000================= - ErrorCode FILE_PATH_EXISTS = new ErrorCode(1006001000, "文件路径已存在"); - ErrorCode FILE_NOT_EXISTS = new ErrorCode(1006001002, "文件ä¸å­˜åœ¨"); - -} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/config/InfConfigTypeEnum.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/config/ConfigTypeEnum.java similarity index 89% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/config/InfConfigTypeEnum.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/config/ConfigTypeEnum.java index 242fd7b1c3..15c20152f0 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/config/InfConfigTypeEnum.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/config/ConfigTypeEnum.java @@ -5,7 +5,7 @@ import lombok.Getter; @Getter @AllArgsConstructor -public enum InfConfigTypeEnum { +public enum ConfigTypeEnum { /** * 系统é…ç½® diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/job/InfJobLogStatusEnum.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/job/JobLogStatusEnum.java similarity index 91% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/job/InfJobLogStatusEnum.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/job/JobLogStatusEnum.java index 8dee1d3558..95670539e9 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/job/InfJobLogStatusEnum.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/job/JobLogStatusEnum.java @@ -10,7 +10,7 @@ import lombok.Getter; */ @Getter @AllArgsConstructor -public enum InfJobLogStatusEnum { +public enum JobLogStatusEnum { RUNNING(0), // è¿è¡Œä¸­ SUCCESS(1), // æˆåŠŸ diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/job/InfJobStatusEnum.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/job/JobStatusEnum.java similarity index 90% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/job/InfJobStatusEnum.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/job/JobStatusEnum.java index 870bde22a6..3d9ec3f755 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/job/InfJobStatusEnum.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/job/JobStatusEnum.java @@ -3,12 +3,11 @@ package cn.iocoder.yudao.module.infra.enums.job; import com.google.common.collect.Sets; import lombok.AllArgsConstructor; import lombok.Getter; +import org.quartz.impl.jdbcjobstore.Constants; import java.util.Collections; import java.util.Set; -import static org.quartz.impl.jdbcjobstore.Constants.*; - /** * 任务状æ€çš„æžšä¸¾ * @@ -16,7 +15,7 @@ import static org.quartz.impl.jdbcjobstore.Constants.*; */ @Getter @AllArgsConstructor -public enum InfJobStatusEnum { +public enum JobStatusEnum { /** * åˆå§‹åŒ–中 diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/logger/InfApiErrorLogProcessStatusEnum.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/logger/ApiErrorLogProcessStatusEnum.java similarity index 90% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/logger/InfApiErrorLogProcessStatusEnum.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/logger/ApiErrorLogProcessStatusEnum.java index b047ae1055..b3097534ce 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/logger/InfApiErrorLogProcessStatusEnum.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/logger/ApiErrorLogProcessStatusEnum.java @@ -10,7 +10,7 @@ import lombok.Getter; */ @AllArgsConstructor @Getter -public enum InfApiErrorLogProcessStatusEnum { +public enum ApiErrorLogProcessStatusEnum { INIT(0, "未处ç†"), DONE(1, "已处ç†"), diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/file/config/FileConfiguration.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/file/config/FileConfiguration.java similarity index 81% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/file/config/FileConfiguration.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/file/config/FileConfiguration.java index f2bc7c2ebc..f944daa231 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/file/config/FileConfiguration.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/file/config/FileConfiguration.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.infra.file.config; +package cn.iocoder.yudao.module.infra.framework.file.config; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Configuration; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/file/config/FileProperties.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/file/config/FileProperties.java similarity index 88% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/file/config/FileProperties.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/file/config/FileProperties.java index 10640751a7..7d76a3baf4 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/file/config/FileProperties.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/file/config/FileProperties.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.infra.file.config; +package cn.iocoder.yudao.module.infra.framework.file.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/file/package-info.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/file/package-info.java similarity index 92% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/file/package-info.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/file/package-info.java index 2c2798ee62..ee21b922eb 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/file/package-info.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/file/package-info.java @@ -13,4 +13,4 @@ * 综åˆè€ƒè™‘,暂时使用方案 3 的方å¼ï¼Œæ¯”较适åˆè¿™æ ·ä¸€ä¸ª all in one 的项目。 * éšç€æ–‡ä»¶çš„é‡çº§å¤§äº†ä¹‹åŽï¼Œè¿˜æ˜¯æŽ¨è采用云æœåŠ¡ã€‚ */ -package cn.iocoder.yudao.coreservice.modules.infra.framework.file; +package cn.iocoder.yudao.module.infra.framework.file; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/consumer/config/InfConfigRefreshConsumer.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/consumer/config/ConfigRefreshConsumer.java similarity index 61% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/consumer/config/InfConfigRefreshConsumer.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/consumer/config/ConfigRefreshConsumer.java index f68cdb4d70..d13003afbb 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/consumer/config/InfConfigRefreshConsumer.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/consumer/config/ConfigRefreshConsumer.java @@ -2,21 +2,21 @@ package cn.iocoder.yudao.module.infra.mq.consumer.config; import cn.iocoder.yudao.framework.apollo.internals.DBConfigRepository; import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener; -import cn.iocoder.yudao.module.infra.mq.message.config.InfConfigRefreshMessage; +import cn.iocoder.yudao.module.infra.mq.message.config.ConfigRefreshMessage; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; /** - * 针对 {@link InfConfigRefreshMessage} 的消费者 + * 针对 {@link ConfigRefreshMessage} 的消费者 * * @author èŠ‹é“æºç  */ @Component @Slf4j -public class InfConfigRefreshConsumer extends AbstractChannelMessageListener { +public class ConfigRefreshConsumer extends AbstractChannelMessageListener { @Override - public void onMessage(InfConfigRefreshMessage message) { + public void onMessage(ConfigRefreshMessage message) { log.info("[onMessage][收到 Config 刷新消æ¯]"); DBConfigRepository.noticeSync(); } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/message/config/InfConfigRefreshMessage.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/message/config/ConfigRefreshMessage.java similarity index 80% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/message/config/InfConfigRefreshMessage.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/message/config/ConfigRefreshMessage.java index 36b51db1aa..380a1736b9 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/message/config/InfConfigRefreshMessage.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/message/config/ConfigRefreshMessage.java @@ -7,7 +7,7 @@ import lombok.Data; * é…置数æ®åˆ·æ–° Message */ @Data -public class InfConfigRefreshMessage extends AbstractChannelMessage { +public class ConfigRefreshMessage extends AbstractChannelMessage { @Override public String getChannel() { diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/producer/config/InfConfigProducer.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/producer/config/ConfigProducer.java similarity index 64% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/producer/config/InfConfigProducer.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/producer/config/ConfigProducer.java index e77557111c..92d0e34b6e 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/producer/config/InfConfigProducer.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/producer/config/ConfigProducer.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.infra.mq.producer.config; -import cn.iocoder.yudao.module.infra.mq.message.config.InfConfigRefreshMessage; +import cn.iocoder.yudao.module.infra.mq.message.config.ConfigRefreshMessage; import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate; import org.springframework.stereotype.Component; @@ -10,16 +10,16 @@ import javax.annotation.Resource; * Config é…置相关消æ¯çš„ Producer */ @Component -public class InfConfigProducer { +public class ConfigProducer { @Resource private RedisMQTemplate redisMQTemplate; /** - * å‘é€ {@link InfConfigRefreshMessage} æ¶ˆæ¯ + * å‘é€ {@link ConfigRefreshMessage} æ¶ˆæ¯ */ public void sendConfigRefreshMessage() { - InfConfigRefreshMessage message = new InfConfigRefreshMessage(); + ConfigRefreshMessage message = new ConfigRefreshMessage(); redisMQTemplate.send(message); } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/config/InfConfigService.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/config/ConfigService.java similarity index 80% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/config/InfConfigService.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/config/ConfigService.java index 8d3995e1c5..abd82e54ac 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/config/InfConfigService.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/config/ConfigService.java @@ -1,11 +1,11 @@ package cn.iocoder.yudao.module.infra.service.config; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.config.InfConfigDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigCreateReqVO; import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigExportReqVO; import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigPageReqVO; import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigUpdateReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.config.ConfigDO; import javax.validation.Valid; import java.util.List; @@ -15,7 +15,7 @@ import java.util.List; * * @author èŠ‹é“æºç  */ -public interface InfConfigService { +public interface ConfigService { /** * åˆ›å»ºå‚æ•°é…ç½® @@ -45,7 +45,7 @@ public interface InfConfigService { * @param id é…ç½®ç¼–å· * @return 傿•°é…ç½® */ - InfConfigDO getConfig(Long id); + ConfigDO getConfig(Long id); /** * æ ¹æ®å‚æ•°é”®ï¼ŒèŽ·å¾—å‚æ•°é…ç½® @@ -53,7 +53,7 @@ public interface InfConfigService { * @param key é…置键 * @return 傿•°é…ç½® */ - InfConfigDO getConfigByKey(String key); + ConfigDO getConfigByKey(String key); /** * èŽ·å¾—å‚æ•°é…置分页列表 @@ -61,7 +61,7 @@ public interface InfConfigService { * @param reqVO 分页æ¡ä»¶ * @return 分页列表 */ - PageResult getConfigPage(@Valid ConfigPageReqVO reqVO); + PageResult getConfigPage(@Valid ConfigPageReqVO reqVO); /** * èŽ·å¾—å‚æ•°é…置列表 @@ -69,7 +69,7 @@ public interface InfConfigService { * @param reqVO 列表 * @return 列表 */ - List getConfigList(@Valid ConfigExportReqVO reqVO); + List getConfigList(@Valid ConfigExportReqVO reqVO); } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/config/impl/InfConfigServiceImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/config/ConfigServiceImpl.java similarity index 59% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/config/impl/InfConfigServiceImpl.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/config/ConfigServiceImpl.java index 1911357604..f6eb43cd5a 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/config/impl/InfConfigServiceImpl.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/config/ConfigServiceImpl.java @@ -1,25 +1,23 @@ -package cn.iocoder.yudao.module.infra.service.config.impl; +package cn.iocoder.yudao.module.infra.service.config; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.config.InfConfigDO; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigCreateReqVO; import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigExportReqVO; import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigPageReqVO; import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigUpdateReqVO; -import cn.iocoder.yudao.module.infra.convert.config.InfConfigConvert; -import cn.iocoder.yudao.module.infra.dal.mysql.config.InfConfigMapper; -import cn.iocoder.yudao.module.infra.enums.config.InfConfigTypeEnum; -import cn.iocoder.yudao.module.infra.mq.producer.config.InfConfigProducer; -import cn.iocoder.yudao.module.infra.service.config.InfConfigService; -import cn.iocoder.yudao.module.infra.enums.InfErrorCodeConstants; +import cn.iocoder.yudao.module.infra.convert.config.ConfigConvert; +import cn.iocoder.yudao.module.infra.dal.dataobject.config.ConfigDO; +import cn.iocoder.yudao.module.infra.dal.mysql.config.ConfigMapper; +import cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants; +import cn.iocoder.yudao.module.infra.enums.config.ConfigTypeEnum; +import cn.iocoder.yudao.module.infra.mq.producer.config.ConfigProducer; import com.google.common.annotations.VisibleForTesting; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; - import java.util.List; /** @@ -28,21 +26,21 @@ import java.util.List; @Service @Slf4j @Validated -public class InfConfigServiceImpl implements InfConfigService { +public class ConfigServiceImpl implements ConfigService { @Resource - private InfConfigMapper configMapper; + private ConfigMapper configMapper; @Resource - private InfConfigProducer configProducer; + private ConfigProducer configProducer; @Override public Long createConfig(ConfigCreateReqVO reqVO) { // 校验正确性 checkCreateOrUpdate(null, reqVO.getKey()); // æ’入傿•°é…ç½® - InfConfigDO config = InfConfigConvert.INSTANCE.convert(reqVO); - config.setType(InfConfigTypeEnum.CUSTOM.getType()); + ConfigDO config = ConfigConvert.INSTANCE.convert(reqVO); + config.setType(ConfigTypeEnum.CUSTOM.getType()); configMapper.insert(config); // å‘é€åˆ·æ–°æ¶ˆæ¯ configProducer.sendConfigRefreshMessage(); @@ -54,7 +52,7 @@ public class InfConfigServiceImpl implements InfConfigService { // 校验正确性 checkCreateOrUpdate(reqVO.getId(), null); // ä¸å…许更新 key // æ›´æ–°å‚æ•°é…ç½® - InfConfigDO updateObj = InfConfigConvert.INSTANCE.convert(reqVO); + ConfigDO updateObj = ConfigConvert.INSTANCE.convert(reqVO); configMapper.updateById(updateObj); // å‘é€åˆ·æ–°æ¶ˆæ¯ configProducer.sendConfigRefreshMessage(); @@ -63,10 +61,10 @@ public class InfConfigServiceImpl implements InfConfigService { @Override public void deleteConfig(Long id) { // 校验é…置存在 - InfConfigDO config = checkConfigExists(id); + ConfigDO config = checkConfigExists(id); // 内置é…置,ä¸å…许删除 - if (InfConfigTypeEnum.SYSTEM.getType().equals(config.getType())) { - throw ServiceExceptionUtil.exception(InfErrorCodeConstants.CONFIG_CAN_NOT_DELETE_SYSTEM_TYPE); + if (ConfigTypeEnum.SYSTEM.getType().equals(config.getType())) { + throw ServiceExceptionUtil.exception(ErrorCodeConstants.CONFIG_CAN_NOT_DELETE_SYSTEM_TYPE); } // 删除 configMapper.deleteById(id); @@ -75,22 +73,22 @@ public class InfConfigServiceImpl implements InfConfigService { } @Override - public InfConfigDO getConfig(Long id) { + public ConfigDO getConfig(Long id) { return configMapper.selectById(id); } @Override - public InfConfigDO getConfigByKey(String key) { + public ConfigDO getConfigByKey(String key) { return configMapper.selectByKey(key); } @Override - public PageResult getConfigPage(ConfigPageReqVO reqVO) { + public PageResult getConfigPage(ConfigPageReqVO reqVO) { return configMapper.selectPage(reqVO); } @Override - public List getConfigList(ConfigExportReqVO reqVO) { + public List getConfigList(ConfigExportReqVO reqVO) { return configMapper.selectList(reqVO); } @@ -102,29 +100,29 @@ public class InfConfigServiceImpl implements InfConfigService { } @VisibleForTesting - public InfConfigDO checkConfigExists(Long id) { + public ConfigDO checkConfigExists(Long id) { if (id == null) { return null; } - InfConfigDO config = configMapper.selectById(id); + ConfigDO config = configMapper.selectById(id); if (config == null) { - throw ServiceExceptionUtil.exception(InfErrorCodeConstants.CONFIG_NOT_EXISTS); + throw ServiceExceptionUtil.exception(ErrorCodeConstants.CONFIG_NOT_EXISTS); } return config; } @VisibleForTesting public void checkConfigKeyUnique(Long id, String key) { - InfConfigDO config = configMapper.selectByKey(key); + ConfigDO config = configMapper.selectByKey(key); if (config == null) { return; } // 如果 id 为空,说明ä¸ç”¨æ¯”较是å¦ä¸ºç›¸åŒ id çš„å‚æ•°é…ç½® if (id == null) { - throw ServiceExceptionUtil.exception(InfErrorCodeConstants.CONFIG_KEY_DUPLICATE); + throw ServiceExceptionUtil.exception(ErrorCodeConstants.CONFIG_KEY_DUPLICATE); } if (!config.getId().equals(id)) { - throw ServiceExceptionUtil.exception(InfErrorCodeConstants.CONFIG_KEY_DUPLICATE); + throw ServiceExceptionUtil.exception(ErrorCodeConstants.CONFIG_KEY_DUPLICATE); } } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileService.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileService.java new file mode 100644 index 0000000000..4fb658aa5a --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileService.java @@ -0,0 +1,46 @@ +package cn.iocoder.yudao.module.infra.service.file; + +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.FilePageReqVO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO; + +/** + * 文件 Service æŽ¥å£ + * + * @author èŠ‹é“æºç  + */ +public interface FileService { + + /** + * 获得文件分页 + * + * @param pageReqVO 分页查询 + * @return 文件分页 + */ + PageResult getFilePage(FilePageReqVO pageReqVO); + + /** + * ä¿å­˜æ–‡ä»¶ï¼Œå¹¶è¿”回文件的访问路径 + * + * @param path 文件路径 + * @param content 文件内容 + * @return 文件路径 + */ + String createFile(String path, byte[] content); + + /** + * 删除文件 + * + * @param id ç¼–å· + */ + void deleteFile(String id); + + /** + * 获得文件 + * + * @param path 文件路径 + * @return 文件 + */ + FileDO getFile(String path); + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/impl/InfFileCoreServiceImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImpl.java similarity index 59% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/impl/InfFileCoreServiceImpl.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImpl.java index 251563fd4e..1f1724ecd1 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/impl/InfFileCoreServiceImpl.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImpl.java @@ -1,39 +1,45 @@ -package cn.iocoder.yudao.module.infra.service.file.impl; +package cn.iocoder.yudao.module.infra.service.file; import cn.hutool.core.io.FileTypeUtil; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO; -import cn.iocoder.yudao.coreservice.modules.infra.dal.mysql.file.InfFileCoreMapper; -import cn.iocoder.yudao.coreservice.modules.infra.framework.file.config.FileProperties; -import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.FilePageReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO; +import cn.iocoder.yudao.module.infra.dal.mysql.file.FileMapper; +import cn.iocoder.yudao.module.infra.framework.file.config.FileProperties; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.io.ByteArrayInputStream; -import static cn.iocoder.yudao.coreservice.modules.infra.enums.SysErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; /** - * core service 文件实现类 + * 文件 Service 实现类 * - * @author 宋天 + * @author èŠ‹é“æºç  */ @Service -public class InfFileCoreServiceImpl implements InfFileCoreService { +public class FileServiceImpl implements FileService { @Resource - private InfFileCoreMapper fileMapper; + private FileMapper fileMapper; @Resource private FileProperties fileProperties; + @Override + public PageResult getFilePage(FilePageReqVO pageReqVO) { + return fileMapper.selectPage(pageReqVO); + } + @Override public String createFile(String path, byte[] content) { if (fileMapper.selectCountById(path) > 0) { throw exception(FILE_PATH_EXISTS); } // ä¿å­˜åˆ°æ•°æ®åº“ - InfFileDO file = new InfFileDO(); + FileDO file = new FileDO(); file.setId(path); file.setType(FileTypeUtil.getType(new ByteArrayInputStream(content))); file.setContent(content); @@ -57,7 +63,7 @@ public class InfFileCoreServiceImpl implements InfFileCoreService { } @Override - public InfFileDO getFile(String path) { + public FileDO getFile(String path) { return fileMapper.selectByPath(path); } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/InfFileCoreService.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/InfFileCoreService.java deleted file mode 100644 index 95f2998c19..0000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/InfFileCoreService.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.file; - -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO; - -/** - * core service æ–‡ä»¶æŽ¥å£ - * - * @author 宋天 - */ -public interface InfFileCoreService { - - /** - * ä¿å­˜æ–‡ä»¶ï¼Œå¹¶è¿”回文件的访问路径 - * - * @param path 文件路径 - * @param content 文件内容 - * @return 文件路径 - */ - String createFile(String path, byte[] content); - - /** - * 删除文件 - * - * @param id ç¼–å· - */ - void deleteFile(String id); - - /** - * 获得文件 - * - * @param path 文件路径 - * @return 文件 - */ - InfFileDO getFile(String path); -} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/InfFileService.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/InfFileService.java deleted file mode 100644 index f37a422ce7..0000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/InfFileService.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.file; - -import cn.iocoder.yudao.module.infra.controller.admin.file.vo.InfFilePageReqVO; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; - -/** - * 文件 Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface InfFileService { - - /** - * 获得文件分页 - * - * @param pageReqVO 分页查询 - * @return 文件分页 - */ - PageResult getFilePage(InfFilePageReqVO pageReqVO); - -} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/impl/InfFileServiceImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/impl/InfFileServiceImpl.java deleted file mode 100644 index acd6dfb88a..0000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/impl/InfFileServiceImpl.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.file.impl; - -import cn.iocoder.yudao.module.infra.dal.mysql.file.InfFileMapper; -import cn.iocoder.yudao.module.infra.service.file.InfFileService; -import cn.iocoder.yudao.module.infra.controller.admin.file.vo.InfFilePageReqVO; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO; -import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; - -/** - * 文件 Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -public class InfFileServiceImpl implements InfFileService { - - @Resource - private InfFileMapper fileMapper; - - @Override - public PageResult getFilePage(InfFilePageReqVO pageReqVO) { - return fileMapper.selectPage(pageReqVO); - } - -} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/InfJobLogService.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobLogService.java similarity index 68% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/InfJobLogService.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobLogService.java index b75897d108..e2e9e73e4e 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/InfJobLogService.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobLogService.java @@ -2,9 +2,9 @@ package cn.iocoder.yudao.module.infra.service.job; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.quartz.core.service.JobLogFrameworkService; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.InfJobLogExportReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.InfJobLogPageReqVO; -import cn.iocoder.yudao.module.infra.dal.dataobject.job.InfJobLogDO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogPageReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobLogDO; import java.util.Collection; import java.util.List; @@ -14,7 +14,7 @@ import java.util.List; * * @author èŠ‹é“æºç  */ -public interface InfJobLogService extends JobLogFrameworkService { +public interface JobLogService extends JobLogFrameworkService { /** * 获得定时任务 @@ -22,7 +22,7 @@ public interface InfJobLogService extends JobLogFrameworkService { * @param id ç¼–å· * @return 定时任务 */ - InfJobLogDO getJobLog(Long id); + JobLogDO getJobLog(Long id); /** * 获得定时任务列表 @@ -30,7 +30,7 @@ public interface InfJobLogService extends JobLogFrameworkService { * @param ids ç¼–å· * @return 定时任务列表 */ - List getJobLogList(Collection ids); + List getJobLogList(Collection ids); /** * 获得定时任务分页 @@ -38,7 +38,7 @@ public interface InfJobLogService extends JobLogFrameworkService { * @param pageReqVO 分页查询 * @return 定时任务分页 */ - PageResult getJobLogPage(InfJobLogPageReqVO pageReqVO); + PageResult getJobLogPage(JobLogPageReqVO pageReqVO); /** * 获得定时任务列表, 用于 Excel 导出 @@ -46,6 +46,6 @@ public interface InfJobLogService extends JobLogFrameworkService { * @param exportReqVO 查询æ¡ä»¶ * @return 定时任务分页 */ - List getJobLogList(InfJobLogExportReqVO exportReqVO); + List getJobLogList(JobLogExportReqVO exportReqVO); } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/impl/InfJobLogServiceImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobLogServiceImpl.java similarity index 55% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/impl/InfJobLogServiceImpl.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobLogServiceImpl.java index cbc6a38a31..8b3c2ef884 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/impl/InfJobLogServiceImpl.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobLogServiceImpl.java @@ -1,12 +1,11 @@ -package cn.iocoder.yudao.module.infra.service.job.impl; +package cn.iocoder.yudao.module.infra.service.job; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.InfJobLogExportReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.InfJobLogPageReqVO; -import cn.iocoder.yudao.module.infra.dal.dataobject.job.InfJobLogDO; -import cn.iocoder.yudao.module.infra.dal.mysql.job.InfJobLogMapper; -import cn.iocoder.yudao.module.infra.enums.job.InfJobLogStatusEnum; -import cn.iocoder.yudao.module.infra.service.job.InfJobLogService; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogPageReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobLogDO; +import cn.iocoder.yudao.module.infra.dal.mysql.job.JobLogMapper; +import cn.iocoder.yudao.module.infra.enums.job.JobLogStatusEnum; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; @@ -25,15 +24,15 @@ import java.util.List; @Service @Validated @Slf4j -public class InfJobLogServiceImpl implements InfJobLogService { +public class JobLogServiceImpl implements JobLogService { @Resource - private InfJobLogMapper jobLogMapper; + private JobLogMapper jobLogMapper; @Override public Long createJobLog(Long jobId, Date beginTime, String jobHandlerName, String jobHandlerParam, Integer executeIndex) { - InfJobLogDO log = InfJobLogDO.builder().jobId(jobId).handlerName(jobHandlerName).handlerParam(jobHandlerParam).executeIndex(executeIndex) - .beginTime(beginTime).status(InfJobLogStatusEnum.RUNNING.getStatus()).build(); + JobLogDO log = JobLogDO.builder().jobId(jobId).handlerName(jobHandlerName).handlerParam(jobHandlerParam).executeIndex(executeIndex) + .beginTime(beginTime).status(JobLogStatusEnum.RUNNING.getStatus()).build(); jobLogMapper.insert(log); return log.getId(); } @@ -42,8 +41,8 @@ public class InfJobLogServiceImpl implements InfJobLogService { @Async public void updateJobLogResultAsync(Long logId, Date endTime, Integer duration, boolean success, String result) { try { - InfJobLogDO updateObj = InfJobLogDO.builder().id(logId).endTime(endTime).duration(duration) - .status(success ? InfJobLogStatusEnum.SUCCESS.getStatus() : InfJobLogStatusEnum.FAILURE.getStatus()).result(result).build(); + JobLogDO updateObj = JobLogDO.builder().id(logId).endTime(endTime).duration(duration) + .status(success ? JobLogStatusEnum.SUCCESS.getStatus() : JobLogStatusEnum.FAILURE.getStatus()).result(result).build(); jobLogMapper.updateById(updateObj); } catch (Exception ex) { log.error("[updateJobLogResultAsync][logId({}) endTime({}) duration({}) success({}) result({})]", @@ -52,22 +51,22 @@ public class InfJobLogServiceImpl implements InfJobLogService { } @Override - public InfJobLogDO getJobLog(Long id) { + public JobLogDO getJobLog(Long id) { return jobLogMapper.selectById(id); } @Override - public List getJobLogList(Collection ids) { + public List getJobLogList(Collection ids) { return jobLogMapper.selectBatchIds(ids); } @Override - public PageResult getJobLogPage(InfJobLogPageReqVO pageReqVO) { + public PageResult getJobLogPage(JobLogPageReqVO pageReqVO) { return jobLogMapper.selectPage(pageReqVO); } @Override - public List getJobLogList(InfJobLogExportReqVO exportReqVO) { + public List getJobLogList(JobLogExportReqVO exportReqVO) { return jobLogMapper.selectList(exportReqVO); } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/InfJobService.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobService.java similarity index 75% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/InfJobService.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobService.java index bfacab3be6..bd5dd646d6 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/InfJobService.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobService.java @@ -1,11 +1,11 @@ package cn.iocoder.yudao.module.infra.service.job; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobCreateReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobExportReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobPageReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobUpdateReqVO; -import cn.iocoder.yudao.module.infra.dal.dataobject.job.InfJobDO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobCreateReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobPageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobUpdateReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobDO; import org.quartz.SchedulerException; import javax.validation.Valid; @@ -17,7 +17,7 @@ import java.util.List; * * @author èŠ‹é“æºç  */ -public interface InfJobService { +public interface JobService { /** * 创建定时任务 @@ -25,14 +25,14 @@ public interface InfJobService { * @param createReqVO åˆ›å»ºä¿¡æ¯ * @return ç¼–å· */ - Long createJob(@Valid InfJobCreateReqVO createReqVO) throws SchedulerException; + Long createJob(@Valid JobCreateReqVO createReqVO) throws SchedulerException; /** * 更新定时任务 * * @param updateReqVO æ›´æ–°ä¿¡æ¯ */ - void updateJob(@Valid InfJobUpdateReqVO updateReqVO) throws SchedulerException; + void updateJob(@Valid JobUpdateReqVO updateReqVO) throws SchedulerException; /** * æ›´æ–°å®šæ—¶ä»»åŠ¡çš„çŠ¶æ€ @@ -62,7 +62,7 @@ public interface InfJobService { * @param id ç¼–å· * @return 定时任务 */ - InfJobDO getJob(Long id); + JobDO getJob(Long id); /** * 获得定时任务列表 @@ -70,7 +70,7 @@ public interface InfJobService { * @param ids ç¼–å· * @return 定时任务列表 */ - List getJobList(Collection ids); + List getJobList(Collection ids); /** * 获得定时任务分页 @@ -78,7 +78,7 @@ public interface InfJobService { * @param pageReqVO 分页查询 * @return 定时任务分页 */ - PageResult getJobPage(InfJobPageReqVO pageReqVO); + PageResult getJobPage(JobPageReqVO pageReqVO); /** * 获得定时任务列表, 用于 Excel 导出 @@ -86,6 +86,6 @@ public interface InfJobService { * @param exportReqVO 查询æ¡ä»¶ * @return 定时任务分页 */ - List getJobList(InfJobExportReqVO exportReqVO); + List getJobList(JobExportReqVO exportReqVO); } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/impl/InfJobServiceImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobServiceImpl.java similarity index 68% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/impl/InfJobServiceImpl.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobServiceImpl.java index 39e77f1ea0..e0a245750c 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/impl/InfJobServiceImpl.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobServiceImpl.java @@ -1,17 +1,16 @@ -package cn.iocoder.yudao.module.infra.service.job.impl; +package cn.iocoder.yudao.module.infra.service.job; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.quartz.core.scheduler.SchedulerManager; import cn.iocoder.yudao.framework.quartz.core.util.CronUtils; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobCreateReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobExportReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobPageReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobUpdateReqVO; -import cn.iocoder.yudao.module.infra.convert.job.InfJobConvert; -import cn.iocoder.yudao.module.infra.dal.dataobject.job.InfJobDO; -import cn.iocoder.yudao.module.infra.dal.mysql.job.InfJobMapper; -import cn.iocoder.yudao.module.infra.enums.job.InfJobStatusEnum; -import cn.iocoder.yudao.module.infra.service.job.InfJobService; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobCreateReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobPageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobUpdateReqVO; +import cn.iocoder.yudao.module.infra.convert.job.JobConvert; +import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobDO; +import cn.iocoder.yudao.module.infra.dal.mysql.job.JobMapper; +import cn.iocoder.yudao.module.infra.enums.job.JobStatusEnum; import org.quartz.SchedulerException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,7 +21,7 @@ import java.util.Collection; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.infra.enums.InfErrorCodeConstants.*; +import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.containsAny; /** @@ -32,25 +31,25 @@ import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils. */ @Service @Validated -public class InfJobServiceImpl implements InfJobService { +public class JobServiceImpl implements JobService { @Resource - private InfJobMapper jobMapper; + private JobMapper jobMapper; @Resource private SchedulerManager schedulerManager; @Override @Transactional(rollbackFor = Exception.class) - public Long createJob(InfJobCreateReqVO createReqVO) throws SchedulerException { + public Long createJob(JobCreateReqVO createReqVO) throws SchedulerException { validateCronExpression(createReqVO.getCronExpression()); // 校验唯一性 if (jobMapper.selectByHandlerName(createReqVO.getHandlerName()) != null) { throw exception(JOB_HANDLER_EXISTS); } // æ’å…¥ - InfJobDO job = InfJobConvert.INSTANCE.convert(createReqVO); - job.setStatus(InfJobStatusEnum.INIT.getStatus()); + JobDO job = JobConvert.INSTANCE.convert(createReqVO); + job.setStatus(JobStatusEnum.INIT.getStatus()); fillJobMonitorTimeoutEmpty(job); jobMapper.insert(job); @@ -58,7 +57,7 @@ public class InfJobServiceImpl implements InfJobService { schedulerManager.addJob(job.getId(), job.getHandlerName(), job.getHandlerParam(), job.getCronExpression(), createReqVO.getRetryCount(), createReqVO.getRetryInterval()); // æ›´æ–° - InfJobDO updateObj = InfJobDO.builder().id(job.getId()).status(InfJobStatusEnum.NORMAL.getStatus()).build(); + JobDO updateObj = JobDO.builder().id(job.getId()).status(JobStatusEnum.NORMAL.getStatus()).build(); jobMapper.updateById(updateObj); // 返回 @@ -67,16 +66,16 @@ public class InfJobServiceImpl implements InfJobService { @Override @Transactional(rollbackFor = Exception.class) - public void updateJob(InfJobUpdateReqVO updateReqVO) throws SchedulerException { + public void updateJob(JobUpdateReqVO updateReqVO) throws SchedulerException { validateCronExpression(updateReqVO.getCronExpression()); // 校验存在 - InfJobDO job = this.validateJobExists(updateReqVO.getId()); + JobDO job = this.validateJobExists(updateReqVO.getId()); // åªæœ‰å¼€å¯çжæ€ï¼Œæ‰å¯ä»¥ä¿®æ”¹.原因是,如果出暂åœçжæ€ï¼Œä¿®æ”¹ Quartz Job 时,会导致任务åˆå¼€å§‹æ‰§è¡Œ - if (!job.getStatus().equals(InfJobStatusEnum.NORMAL.getStatus())) { + if (!job.getStatus().equals(JobStatusEnum.NORMAL.getStatus())) { throw exception(JOB_UPDATE_ONLY_NORMAL_STATUS); } // æ›´æ–° - InfJobDO updateObj = InfJobConvert.INSTANCE.convert(updateReqVO); + JobDO updateObj = JobConvert.INSTANCE.convert(updateReqVO); fillJobMonitorTimeoutEmpty(updateObj); jobMapper.updateById(updateObj); @@ -89,21 +88,21 @@ public class InfJobServiceImpl implements InfJobService { @Transactional(rollbackFor = Exception.class) public void updateJobStatus(Long id, Integer status) throws SchedulerException { // 校验 status - if (!containsAny(status, InfJobStatusEnum.NORMAL.getStatus(), InfJobStatusEnum.STOP.getStatus())) { + if (!containsAny(status, JobStatusEnum.NORMAL.getStatus(), JobStatusEnum.STOP.getStatus())) { throw exception(JOB_CHANGE_STATUS_INVALID); } // 校验存在 - InfJobDO job = this.validateJobExists(id); + JobDO job = this.validateJobExists(id); // 校验是å¦å·²ç»ä¸ºå½“å‰çŠ¶æ€ if (job.getStatus().equals(status)) { throw exception(JOB_CHANGE_STATUS_EQUALS); } // æ›´æ–° Job çŠ¶æ€ - InfJobDO updateObj = InfJobDO.builder().id(id).status(status).build(); + JobDO updateObj = JobDO.builder().id(id).status(status).build(); jobMapper.updateById(updateObj); // æ›´æ–°çŠ¶æ€ Job 到 Quartz 中 - if (InfJobStatusEnum.NORMAL.getStatus().equals(status)) { // å¼€å¯ + if (JobStatusEnum.NORMAL.getStatus().equals(status)) { // å¼€å¯ schedulerManager.resumeJob(job.getHandlerName()); } else { // æš‚åœ schedulerManager.pauseJob(job.getHandlerName()); @@ -113,7 +112,7 @@ public class InfJobServiceImpl implements InfJobService { @Override public void triggerJob(Long id) throws SchedulerException { // 校验存在 - InfJobDO job = this.validateJobExists(id); + JobDO job = this.validateJobExists(id); // è§¦å‘ Quartz 中的 Job schedulerManager.triggerJob(job.getId(), job.getHandlerName(), job.getHandlerParam()); @@ -123,7 +122,7 @@ public class InfJobServiceImpl implements InfJobService { @Transactional(rollbackFor = Exception.class) public void deleteJob(Long id) throws SchedulerException { // 校验存在 - InfJobDO job = this.validateJobExists(id); + JobDO job = this.validateJobExists(id); // æ›´æ–° jobMapper.deleteById(id); @@ -131,8 +130,8 @@ public class InfJobServiceImpl implements InfJobService { schedulerManager.deleteJob(job.getHandlerName()); } - private InfJobDO validateJobExists(Long id) { - InfJobDO job = jobMapper.selectById(id); + private JobDO validateJobExists(Long id) { + JobDO job = jobMapper.selectById(id); if (job == null) { throw exception(JOB_NOT_EXISTS); } @@ -146,26 +145,26 @@ public class InfJobServiceImpl implements InfJobService { } @Override - public InfJobDO getJob(Long id) { + public JobDO getJob(Long id) { return jobMapper.selectById(id); } @Override - public List getJobList(Collection ids) { + public List getJobList(Collection ids) { return jobMapper.selectBatchIds(ids); } @Override - public PageResult getJobPage(InfJobPageReqVO pageReqVO) { + public PageResult getJobPage(JobPageReqVO pageReqVO) { return jobMapper.selectPage(pageReqVO); } @Override - public List getJobList(InfJobExportReqVO exportReqVO) { + public List getJobList(JobExportReqVO exportReqVO) { return jobMapper.selectList(exportReqVO); } - private static void fillJobMonitorTimeoutEmpty(InfJobDO job) { + private static void fillJobMonitorTimeoutEmpty(JobDO job) { if (job.getMonitorTimeout() == null) { job.setMonitorTimeout(0); } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/InfApiAccessLogService.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/ApiAccessLogService.java similarity index 57% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/InfApiAccessLogService.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/ApiAccessLogService.java index 91229efea9..22aea79b41 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/InfApiAccessLogService.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/ApiAccessLogService.java @@ -1,9 +1,10 @@ package cn.iocoder.yudao.module.infra.service.logger; -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.InfApiAccessLogExportReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.InfApiAccessLogPageReqVO; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiAccessLogDO; +import cn.iocoder.yudao.framework.apilog.core.service.ApiAccessLogFrameworkService; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogPageReqVO; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiAccessLogDO; import java.util.List; @@ -12,7 +13,7 @@ import java.util.List; * * @author èŠ‹é“æºç  */ -public interface InfApiAccessLogService { +public interface ApiAccessLogService extends ApiAccessLogFrameworkService { /** * 获得 API 访问日志分页 @@ -20,7 +21,7 @@ public interface InfApiAccessLogService { * @param pageReqVO 分页查询 * @return API 访问日志分页 */ - PageResult getApiAccessLogPage(InfApiAccessLogPageReqVO pageReqVO); + PageResult getApiAccessLogPage(ApiAccessLogPageReqVO pageReqVO); /** * 获得 API 访问日志列表, 用于 Excel 导出 @@ -28,6 +29,6 @@ public interface InfApiAccessLogService { * @param exportReqVO 查询æ¡ä»¶ * @return API 访问日志分页 */ - List getApiAccessLogList(InfApiAccessLogExportReqVO exportReqVO); + List getApiAccessLogList(ApiAccessLogExportReqVO exportReqVO); } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/ApiAccessLogServiceImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/ApiAccessLogServiceImpl.java new file mode 100644 index 0000000000..64df85ac04 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/ApiAccessLogServiceImpl.java @@ -0,0 +1,46 @@ +package cn.iocoder.yudao.module.infra.service.logger; + +import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiAccessLogCreateReqDTO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogPageReqVO; +import cn.iocoder.yudao.module.infra.convert.logger.ApiAccessLogConvert; +import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiAccessLogDO; +import cn.iocoder.yudao.module.infra.dal.mysql.logger.ApiAccessLogMapper; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; + +/** + * API 访问日志 Service 实现类 + * + * @author èŠ‹é“æºç  + */ +@Service +@Validated +public class ApiAccessLogServiceImpl implements ApiAccessLogService { + + @Resource + private ApiAccessLogMapper apiAccessLogMapper; + + @Override + public PageResult getApiAccessLogPage(ApiAccessLogPageReqVO pageReqVO) { + return apiAccessLogMapper.selectPage(pageReqVO); + } + + @Override + public List getApiAccessLogList(ApiAccessLogExportReqVO exportReqVO) { + return apiAccessLogMapper.selectList(exportReqVO); + } + + @Override + @Async + public void createApiAccessLogAsync(ApiAccessLogCreateReqDTO createDTO) { + ApiAccessLogDO apiAccessLog = ApiAccessLogConvert.INSTANCE.convert(createDTO); + apiAccessLogMapper.insert(apiAccessLog); + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/InfApiErrorLogService.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/ApiErrorLogService.java similarity index 65% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/InfApiErrorLogService.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/ApiErrorLogService.java index 2920f3fc74..2ad0479fe4 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/InfApiErrorLogService.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/ApiErrorLogService.java @@ -1,9 +1,10 @@ package cn.iocoder.yudao.module.infra.service.logger; -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.InfApiErrorLogExportReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.InfApiErrorLogPageReqVO; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiErrorLogDO; +import cn.iocoder.yudao.framework.apilog.core.service.ApiErrorLogFrameworkService; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogPageReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiErrorLogDO; import java.util.List; @@ -12,7 +13,7 @@ import java.util.List; * * @author èŠ‹é“æºç  */ -public interface InfApiErrorLogService { +public interface ApiErrorLogService extends ApiErrorLogFrameworkService { /** * 获得 API 错误日志分页 @@ -20,7 +21,7 @@ public interface InfApiErrorLogService { * @param pageReqVO 分页查询 * @return API 错误日志分页 */ - PageResult getApiErrorLogPage(InfApiErrorLogPageReqVO pageReqVO); + PageResult getApiErrorLogPage(ApiErrorLogPageReqVO pageReqVO); /** * 获得 API 错误日志列表, 用于 Excel 导出 @@ -28,7 +29,7 @@ public interface InfApiErrorLogService { * @param exportReqVO 查询æ¡ä»¶ * @return API 错误日志分页 */ - List getApiErrorLogList(InfApiErrorLogExportReqVO exportReqVO); + List getApiErrorLogList(ApiErrorLogExportReqVO exportReqVO); /** * æ›´æ–° API é”™è¯¯æ—¥å¿—å·²å¤„ç† diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/ApiErrorLogServiceImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/ApiErrorLogServiceImpl.java new file mode 100644 index 0000000000..038f47a381 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/ApiErrorLogServiceImpl.java @@ -0,0 +1,65 @@ +package cn.iocoder.yudao.module.infra.service.logger; + +import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiErrorLogCreateReqDTO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogPageReqVO; +import cn.iocoder.yudao.module.infra.convert.logger.ApiErrorLogConvert; +import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiErrorLogDO; +import cn.iocoder.yudao.module.infra.dal.mysql.logger.ApiErrorLogMapper; +import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants; +import cn.iocoder.yudao.module.infra.enums.logger.ApiErrorLogProcessStatusEnum; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; + +/** + * API 错误日志 Service 实现类 + * + * @author èŠ‹é“æºç  + */ +@Service +@Validated +public class ApiErrorLogServiceImpl implements ApiErrorLogService { + + @Resource + private ApiErrorLogMapper apiErrorLogMapper; + + @Override + public PageResult getApiErrorLogPage(ApiErrorLogPageReqVO pageReqVO) { + return apiErrorLogMapper.selectPage(pageReqVO); + } + + @Override + public List getApiErrorLogList(ApiErrorLogExportReqVO exportReqVO) { + return apiErrorLogMapper.selectList(exportReqVO); + } + + @Override + public void updateApiErrorLogProcess(Long id, Integer processStatus, Long processUserId) { + ApiErrorLogDO errorLog = apiErrorLogMapper.selectById(id); + if (errorLog == null) { + throw ServiceExceptionUtil.exception(ErrorCodeConstants.API_ERROR_LOG_NOT_FOUND); + } + if (!ApiErrorLogProcessStatusEnum.INIT.getStatus().equals(errorLog.getProcessStatus())) { + throw ServiceExceptionUtil.exception(ErrorCodeConstants.API_ERROR_LOG_PROCESSED); + } + // æ ‡è®°å¤„ç† + apiErrorLogMapper.updateById(ApiErrorLogDO.builder().id(id).processStatus(processStatus) + .processUserId(processUserId).processTime(new Date()).build()); + } + + @Override + @Async + public void createApiErrorLogAsync(ApiErrorLogCreateReqDTO createDTO) { + ApiErrorLogDO apiErrorLog = ApiErrorLogConvert.INSTANCE.convert(createDTO); + apiErrorLog.setProcessStatus(ApiErrorLogProcessStatusEnum.INIT.getStatus()); + apiErrorLogMapper.insert(apiErrorLog); + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/InfApiAccessLogCoreService.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/InfApiAccessLogCoreService.java deleted file mode 100644 index c38963e4e8..0000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/InfApiAccessLogCoreService.java +++ /dev/null @@ -1,12 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.logger; - -import cn.iocoder.yudao.framework.apilog.core.service.ApiAccessLogFrameworkService; - -/** - * API 访问日志 Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface InfApiAccessLogCoreService extends ApiAccessLogFrameworkService { - -} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/InfApiErrorLogCoreService.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/InfApiErrorLogCoreService.java deleted file mode 100644 index 3ba698e7de..0000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/InfApiErrorLogCoreService.java +++ /dev/null @@ -1,12 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.logger; - -import cn.iocoder.yudao.framework.apilog.core.service.ApiErrorLogFrameworkService; - -/** - * API 错误日志 Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface InfApiErrorLogCoreService extends ApiErrorLogFrameworkService { - -} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/impl/InfApiAccessLogCoreServiceImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/impl/InfApiAccessLogCoreServiceImpl.java deleted file mode 100644 index 6779de2e34..0000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/impl/InfApiAccessLogCoreServiceImpl.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.logger.impl; - -import cn.iocoder.yudao.coreservice.modules.infra.convert.logger.InfApiAccessLogCoreConvert; -import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiAccessLogCreateReqDTO; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiAccessLogDO; -import cn.iocoder.yudao.coreservice.modules.infra.dal.mysql.logger.InfApiAccessLogCoreMapper; -import cn.iocoder.yudao.coreservice.modules.infra.service.logger.InfApiAccessLogCoreService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import javax.annotation.Resource; - -/** - * API 访问日志 Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Validated -@Slf4j -public class InfApiAccessLogCoreServiceImpl implements InfApiAccessLogCoreService { - - @Resource - private InfApiAccessLogCoreMapper apiAccessLogMapper; - - @Override - @Async - public void createApiAccessLogAsync(ApiAccessLogCreateReqDTO createDTO) { - InfApiAccessLogDO apiAccessLog = InfApiAccessLogCoreConvert.INSTANCE.convert(createDTO); - apiAccessLogMapper.insert(apiAccessLog); - } - -} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/impl/InfApiAccessLogServiceImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/impl/InfApiAccessLogServiceImpl.java deleted file mode 100644 index 87856f35b6..0000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/impl/InfApiAccessLogServiceImpl.java +++ /dev/null @@ -1,37 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.logger.impl; - -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.InfApiAccessLogExportReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.InfApiAccessLogPageReqVO; -import cn.iocoder.yudao.module.infra.dal.mysql.logger.InfApiAccessLogMapper; -import cn.iocoder.yudao.module.infra.service.logger.InfApiAccessLogService; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiAccessLogDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import javax.annotation.Resource; -import java.util.List; - -/** - * API 访问日志 Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Validated -public class InfApiAccessLogServiceImpl implements InfApiAccessLogService { - - @Resource - private InfApiAccessLogMapper apiAccessLogMapper; - - @Override - public PageResult getApiAccessLogPage(InfApiAccessLogPageReqVO pageReqVO) { - return apiAccessLogMapper.selectPage(pageReqVO); - } - - @Override - public List getApiAccessLogList(InfApiAccessLogExportReqVO exportReqVO) { - return apiAccessLogMapper.selectList(exportReqVO); - } - -} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/impl/InfApiErrorLogCoreServiceImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/impl/InfApiErrorLogCoreServiceImpl.java deleted file mode 100644 index ddb8b0cf1b..0000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/impl/InfApiErrorLogCoreServiceImpl.java +++ /dev/null @@ -1,37 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.logger.impl; - -import cn.iocoder.yudao.coreservice.modules.infra.convert.logger.InfApiErrorLogCoreConvert; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiErrorLogDO; -import cn.iocoder.yudao.coreservice.modules.infra.dal.mysql.logger.InfApiErrorLogCoreMapper; -import cn.iocoder.yudao.coreservice.modules.infra.enums.logger.InfApiErrorLogProcessStatusEnum; -import cn.iocoder.yudao.coreservice.modules.infra.service.logger.InfApiErrorLogCoreService; -import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiErrorLogCreateReqDTO; -import lombok.extern.slf4j.Slf4j; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import javax.annotation.Resource; - -/** - * API 错误日志 Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Validated -@Slf4j -public class InfApiErrorLogCoreServiceImpl implements InfApiErrorLogCoreService { - - @Resource - private InfApiErrorLogCoreMapper apiErrorLogMapper; - - @Override - @Async - public void createApiErrorLogAsync(ApiErrorLogCreateReqDTO createDTO) { - InfApiErrorLogDO apiErrorLog = InfApiErrorLogCoreConvert.INSTANCE.convert(createDTO); - apiErrorLog.setProcessStatus(InfApiErrorLogProcessStatusEnum.INIT.getStatus()); - apiErrorLogMapper.insert(apiErrorLog); - } - -} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/impl/InfApiErrorLogServiceImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/impl/InfApiErrorLogServiceImpl.java deleted file mode 100644 index 85e21cc99c..0000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/logger/impl/InfApiErrorLogServiceImpl.java +++ /dev/null @@ -1,57 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.logger.impl; - -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.InfApiErrorLogExportReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.InfApiErrorLogPageReqVO; -import cn.iocoder.yudao.module.infra.dal.mysql.logger.InfApiErrorLogMapper; -import cn.iocoder.yudao.module.infra.enums.logger.InfApiErrorLogProcessStatusEnum; -import cn.iocoder.yudao.module.infra.service.logger.InfApiErrorLogService; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiErrorLogDO; -import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.infra.enums.InfErrorCodeConstants; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import javax.annotation.Resource; -import java.util.Date; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; - -/** - * API 错误日志 Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Validated -public class InfApiErrorLogServiceImpl implements InfApiErrorLogService { - - @Resource - private InfApiErrorLogMapper apiErrorLogMapper; - - @Override - public PageResult getApiErrorLogPage(InfApiErrorLogPageReqVO pageReqVO) { - return apiErrorLogMapper.selectPage(pageReqVO); - } - - @Override - public List getApiErrorLogList(InfApiErrorLogExportReqVO exportReqVO) { - return apiErrorLogMapper.selectList(exportReqVO); - } - - @Override - public void updateApiErrorLogProcess(Long id, Integer processStatus, Long processUserId) { - InfApiErrorLogDO errorLog = apiErrorLogMapper.selectById(id); - if (errorLog == null) { - throw ServiceExceptionUtil.exception(InfErrorCodeConstants.API_ERROR_LOG_NOT_FOUND); - } - if (!InfApiErrorLogProcessStatusEnum.INIT.getStatus().equals(errorLog.getProcessStatus())) { - throw ServiceExceptionUtil.exception(InfErrorCodeConstants.API_ERROR_LOG_PROCESSED); - } - // æ ‡è®°å¤„ç† - apiErrorLogMapper.updateById(InfApiErrorLogDO.builder().id(id).processStatus(processStatus) - .processUserId(processUserId).processTime(new Date()).build()); - } - -} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/package-info.java b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/package-info.java deleted file mode 100644 index 9ce8230c43..0000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.module.infra; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/config/InfConfigServiceTest.java b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/config/ConfigServiceTest.java similarity index 73% rename from yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/config/InfConfigServiceTest.java rename to yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/config/ConfigServiceTest.java index d50f5b15af..1eeae4199a 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/config/InfConfigServiceTest.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/config/ConfigServiceTest.java @@ -1,19 +1,18 @@ package cn.iocoder.yudao.module.infra.service.config; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.config.InfConfigDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; +import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; import cn.iocoder.yudao.framework.test.core.util.RandomUtils; import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigCreateReqVO; import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigExportReqVO; import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigPageReqVO; import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigUpdateReqVO; -import cn.iocoder.yudao.module.infra.dal.mysql.config.InfConfigMapper; -import cn.iocoder.yudao.module.infra.enums.config.InfConfigTypeEnum; -import cn.iocoder.yudao.module.infra.mq.producer.config.InfConfigProducer; -import cn.iocoder.yudao.module.infra.service.config.impl.InfConfigServiceImpl; -import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; -import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; +import cn.iocoder.yudao.module.infra.dal.dataobject.config.ConfigDO; +import cn.iocoder.yudao.module.infra.dal.mysql.config.ConfigMapper; +import cn.iocoder.yudao.module.infra.enums.config.ConfigTypeEnum; +import cn.iocoder.yudao.module.infra.mq.producer.config.ConfigProducer; +import cn.iocoder.yudao.module.infra.test.BaseDbUnitTest; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.boot.test.mock.mockito.MockBean; @@ -24,30 +23,25 @@ import java.util.List; import java.util.function.Consumer; import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.module.infra.enums.InfErrorCodeConstants.*; +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; +import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -/** - * {@link InfConfigServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import(InfConfigServiceImpl.class) -public class InfConfigServiceTest extends BaseDbUnitTest { +@Import(ConfigServiceImpl.class) +public class ConfigServiceTest extends BaseDbUnitTest { @Resource - private InfConfigServiceImpl configService; + private ConfigServiceImpl configService; @Resource - private InfConfigMapper configMapper; + private ConfigMapper configMapper; @MockBean - private InfConfigProducer configProducer; + private ConfigProducer configProducer; @Test public void testCreateConfig_success() { @@ -59,9 +53,9 @@ public class InfConfigServiceTest extends BaseDbUnitTest { // 断言 assertNotNull(configId); // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - InfConfigDO config = configMapper.selectById(configId); + ConfigDO config = configMapper.selectById(configId); assertPojoEquals(reqVO, config); - Assertions.assertEquals(InfConfigTypeEnum.CUSTOM.getType(), config.getType()); + Assertions.assertEquals(ConfigTypeEnum.CUSTOM.getType(), config.getType()); // 校验调用 verify(configProducer, times(1)).sendConfigRefreshMessage(); } @@ -69,7 +63,7 @@ public class InfConfigServiceTest extends BaseDbUnitTest { @Test public void testUpdateConfig_success() { // mock æ•°æ® - InfConfigDO dbConfig = randomInfConfigDO(); + ConfigDO dbConfig = randomConfigDO(); configMapper.insert(dbConfig);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° ConfigUpdateReqVO reqVO = randomPojo(ConfigUpdateReqVO.class, o -> { @@ -79,7 +73,7 @@ public class InfConfigServiceTest extends BaseDbUnitTest { // 调用 configService.updateConfig(reqVO); // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - InfConfigDO config = configMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ + ConfigDO config = configMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ assertPojoEquals(reqVO, config); // 校验调用 verify(configProducer, times(1)).sendConfigRefreshMessage(); @@ -88,8 +82,8 @@ public class InfConfigServiceTest extends BaseDbUnitTest { @Test public void testDeleteConfig_success() { // mock æ•°æ® - InfConfigDO dbConfig = randomInfConfigDO(o -> { - o.setType(InfConfigTypeEnum.CUSTOM.getType()); // åªèƒ½åˆ é™¤ CUSTOM 类型 + ConfigDO dbConfig = randomConfigDO(o -> { + o.setType(ConfigTypeEnum.CUSTOM.getType()); // åªèƒ½åˆ é™¤ CUSTOM 类型 }); configMapper.insert(dbConfig);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° @@ -106,8 +100,8 @@ public class InfConfigServiceTest extends BaseDbUnitTest { @Test public void testDeleteConfig_canNotDeleteSystemType() { // mock æ•°æ® - InfConfigDO dbConfig = randomInfConfigDO(o -> { - o.setType(InfConfigTypeEnum.SYSTEM.getType()); // SYSTEM ä¸å…许删除 + ConfigDO dbConfig = randomConfigDO(o -> { + o.setType(ConfigTypeEnum.SYSTEM.getType()); // SYSTEM ä¸å…许删除 }); configMapper.insert(dbConfig);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° @@ -120,7 +114,7 @@ public class InfConfigServiceTest extends BaseDbUnitTest { @Test public void testCheckConfigExists_success() { // mock æ•°æ® - InfConfigDO dbConfigDO = randomInfConfigDO(); + ConfigDO dbConfigDO = randomConfigDO(); configMapper.insert(dbConfigDO);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 调用æˆåŠŸ @@ -143,7 +137,7 @@ public class InfConfigServiceTest extends BaseDbUnitTest { // 准备傿•° String key = randomString(); // mock æ•°æ® - configMapper.insert(randomInfConfigDO(o -> o.setKey(key))); + configMapper.insert(randomConfigDO(o -> o.setKey(key))); // 调用,校验异常 assertServiceException(() -> configService.checkConfigKeyUnique(null, key), @@ -156,7 +150,7 @@ public class InfConfigServiceTest extends BaseDbUnitTest { Long id = randomLongId(); String key = randomString(); // mock æ•°æ® - configMapper.insert(randomInfConfigDO(o -> o.setKey(key))); + configMapper.insert(randomConfigDO(o -> o.setKey(key))); // 调用,校验异常 assertServiceException(() -> configService.checkConfigKeyUnique(id, key), @@ -166,10 +160,10 @@ public class InfConfigServiceTest extends BaseDbUnitTest { @Test public void testGetConfigPage() { // mock æ•°æ® - InfConfigDO dbConfig = randomInfConfigDO(o -> { // 等会查询到 + ConfigDO dbConfig = randomConfigDO(o -> { // 等会查询到 o.setName("芋艿"); o.setKey("yunai"); - o.setType(InfConfigTypeEnum.SYSTEM.getType()); + o.setType(ConfigTypeEnum.SYSTEM.getType()); o.setCreateTime(buildTime(2021, 2, 1)); }); configMapper.insert(dbConfig); @@ -178,19 +172,19 @@ public class InfConfigServiceTest extends BaseDbUnitTest { // 测试 key ä¸åŒ¹é… configMapper.insert(ObjectUtils.cloneIgnoreId(dbConfig, o -> o.setKey("tudou"))); // 测试 type ä¸åŒ¹é… - configMapper.insert(ObjectUtils.cloneIgnoreId(dbConfig, o -> o.setType(InfConfigTypeEnum.CUSTOM.getType()))); + configMapper.insert(ObjectUtils.cloneIgnoreId(dbConfig, o -> o.setType(ConfigTypeEnum.CUSTOM.getType()))); // 测试 createTime ä¸åŒ¹é… configMapper.insert(ObjectUtils.cloneIgnoreId(dbConfig, o -> o.setCreateTime(buildTime(2021, 1, 1)))); // 准备傿•° ConfigPageReqVO reqVO = new ConfigPageReqVO(); reqVO.setName("艿"); reqVO.setKey("nai"); - reqVO.setType(InfConfigTypeEnum.SYSTEM.getType()); + reqVO.setType(ConfigTypeEnum.SYSTEM.getType()); reqVO.setBeginTime(buildTime(2021, 1, 15)); reqVO.setEndTime(buildTime(2021, 2, 15)); // 调用 - PageResult pageResult = configService.getConfigPage(reqVO); + PageResult pageResult = configService.getConfigPage(reqVO); // 断言 assertEquals(1, pageResult.getTotal()); assertEquals(1, pageResult.getList().size()); @@ -200,10 +194,10 @@ public class InfConfigServiceTest extends BaseDbUnitTest { @Test public void testGetConfigList() { // mock æ•°æ® - InfConfigDO dbConfig = randomInfConfigDO(o -> { // 等会查询到 + ConfigDO dbConfig = randomConfigDO(o -> { // 等会查询到 o.setName("芋艿"); o.setKey("yunai"); - o.setType(InfConfigTypeEnum.SYSTEM.getType()); + o.setType(ConfigTypeEnum.SYSTEM.getType()); o.setCreateTime(buildTime(2021, 2, 1)); }); configMapper.insert(dbConfig); @@ -212,19 +206,19 @@ public class InfConfigServiceTest extends BaseDbUnitTest { // 测试 key ä¸åŒ¹é… configMapper.insert(ObjectUtils.cloneIgnoreId(dbConfig, o -> o.setKey("tudou"))); // 测试 type ä¸åŒ¹é… - configMapper.insert(ObjectUtils.cloneIgnoreId(dbConfig, o -> o.setType(InfConfigTypeEnum.CUSTOM.getType()))); + configMapper.insert(ObjectUtils.cloneIgnoreId(dbConfig, o -> o.setType(ConfigTypeEnum.CUSTOM.getType()))); // 测试 createTime ä¸åŒ¹é… configMapper.insert(ObjectUtils.cloneIgnoreId(dbConfig, o -> o.setCreateTime(buildTime(2021, 1, 1)))); // 准备傿•° ConfigExportReqVO reqVO = new ConfigExportReqVO(); reqVO.setName("艿"); reqVO.setKey("nai"); - reqVO.setType(InfConfigTypeEnum.SYSTEM.getType()); + reqVO.setType(ConfigTypeEnum.SYSTEM.getType()); reqVO.setBeginTime(buildTime(2021, 1, 15)); reqVO.setEndTime(buildTime(2021, 2, 15)); // 调用 - List list = configService.getConfigList(reqVO); + List list = configService.getConfigList(reqVO); // 断言 assertEquals(1, list.size()); assertPojoEquals(dbConfig, list.get(0)); @@ -233,13 +227,13 @@ public class InfConfigServiceTest extends BaseDbUnitTest { @Test public void testGetConfigByKey() { // mock æ•°æ® - InfConfigDO dbConfig = randomInfConfigDO(); + ConfigDO dbConfig = randomConfigDO(); configMapper.insert(dbConfig);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® // 准备傿•° String key = dbConfig.getKey(); // 调用 - InfConfigDO config = configService.getConfigByKey(key); + ConfigDO config = configService.getConfigByKey(key); // 断言 assertNotNull(config); assertPojoEquals(dbConfig, config); @@ -248,11 +242,11 @@ public class InfConfigServiceTest extends BaseDbUnitTest { // ========== éšæœºå¯¹è±¡ ========== @SafeVarargs - private static InfConfigDO randomInfConfigDO(Consumer... consumers) { - Consumer consumer = (o) -> { - o.setType(randomEle(InfConfigTypeEnum.values()).getType()); // ä¿è¯ key 的范围 + private static ConfigDO randomConfigDO(Consumer... consumers) { + Consumer consumer = (o) -> { + o.setType(randomEle(ConfigTypeEnum.values()).getType()); // ä¿è¯ key 的范围 }; - return RandomUtils.randomPojo(InfConfigDO.class, ArrayUtils.append(consumer, consumers)); + return RandomUtils.randomPojo(ConfigDO.class, ArrayUtils.append(consumer, consumers)); } } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/file/FileServiceTest.java b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/file/FileServiceTest.java new file mode 100644 index 0000000000..8356957e46 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/file/FileServiceTest.java @@ -0,0 +1,126 @@ +package cn.iocoder.yudao.module.infra.service.file; + +import cn.hutool.core.io.resource.ResourceUtil; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; +import cn.iocoder.yudao.framework.test.core.util.AssertUtils; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.FilePageReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO; +import cn.iocoder.yudao.module.infra.dal.mysql.file.FileMapper; +import cn.iocoder.yudao.module.infra.framework.file.config.FileProperties; +import cn.iocoder.yudao.module.infra.test.BaseDbUnitTest; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Import; + +import javax.annotation.Resource; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomString; +import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; +import static org.junit.jupiter.api.Assertions.*; + +@Import({FileServiceImpl.class, FileProperties.class}) +public class FileServiceTest extends BaseDbUnitTest { + + @Resource + private FileService fileService; + + @MockBean + private FileProperties fileProperties; + + @Resource + private FileMapper fileMapper; + + @Test + public void testGetFilePage() { + // mock æ•°æ® + FileDO dbFile = randomPojo(FileDO.class, o -> { // 等会查询到 + o.setId("yudao"); + o.setType("jpg"); + o.setCreateTime(buildTime(2021, 1, 15)); + }); + fileMapper.insert(dbFile); + // 测试 id ä¸åŒ¹é… + fileMapper.insert(ObjectUtils.cloneIgnoreId(dbFile, o -> o.setId("tudou"))); + // 测试 type ä¸åŒ¹é… + fileMapper.insert(ObjectUtils.cloneIgnoreId(dbFile, o -> { + o.setId("yudao02"); + o.setType("png"); + })); + // 测试 createTime ä¸åŒ¹é… + fileMapper.insert(ObjectUtils.cloneIgnoreId(dbFile, o -> { + o.setId("yudao03"); + o.setCreateTime(buildTime(2020, 1, 15)); + })); + // 准备傿•° + FilePageReqVO reqVO = new FilePageReqVO(); + reqVO.setId("yudao"); + reqVO.setType("jp"); + reqVO.setBeginCreateTime(buildTime(2021, 1, 10)); + reqVO.setEndCreateTime(buildTime(2021, 1, 20)); + + // 调用 + PageResult pageResult = fileService.getFilePage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + AssertUtils.assertPojoEquals(dbFile, pageResult.getList().get(0), "content"); + } + + @Test + public void testCreateFile_success() { + // 准备傿•° + String path = randomString(); + byte[] content = ResourceUtil.readBytes("file/erweima.jpg"); + + // 调用 + String url = fileService.createFile(path, content); + // 断言 + assertEquals(fileProperties.getBasePath() + path, url); + // æ ¡éªŒæ•°æ® + FileDO file = fileMapper.selectById(path); + assertEquals(path, file.getId()); + assertEquals("jpg", file.getType()); + assertArrayEquals(content, file.getContent()); + } + + @Test + public void testCreateFile_exists() { + // mock æ•°æ® + FileDO dbFile = randomPojo(FileDO.class); + fileMapper.insert(dbFile); + // 准备傿•° + String path = dbFile.getId(); // 模拟已存在 + byte[] content = ResourceUtil.readBytes("file/erweima.jpg"); + + // 调用,并断言异常 + assertServiceException(() -> fileService.createFile(path, content), FILE_PATH_EXISTS); + } + + @Test + public void testDeleteFile_success() { + // mock æ•°æ® + FileDO dbFile = randomPojo(FileDO.class); + fileMapper.insert(dbFile);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® + // 准备傿•° + String id = dbFile.getId(); + + // 调用 + fileService.deleteFile(id); + // 校验数æ®ä¸å­˜åœ¨äº† + assertNull(fileMapper.selectById(id)); + } + + @Test + public void testDeleteFile_notExists() { + // 准备傿•° + String id = randomString(); + + // 调用, 并断言异常 + assertServiceException(() -> fileService.deleteFile(id), FILE_NOT_EXISTS); + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/file/InfFileServiceTest.java b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/file/InfFileServiceTest.java deleted file mode 100644 index 314193f668..0000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/file/InfFileServiceTest.java +++ /dev/null @@ -1,70 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.file; - -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.framework.test.core.util.AssertUtils; -import cn.iocoder.yudao.module.infra.controller.admin.file.vo.InfFilePageReqVO; -import cn.iocoder.yudao.module.infra.service.file.impl.InfFileServiceImpl; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO; -import cn.iocoder.yudao.coreservice.modules.infra.dal.mysql.file.InfFileCoreMapper; -import cn.iocoder.yudao.coreservice.modules.infra.framework.file.config.FileProperties; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; - -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static org.junit.jupiter.api.Assertions.assertEquals; - -@Import({InfFileServiceImpl.class, FileProperties.class}) -public class InfFileServiceTest extends BaseDbUnitTest { - - @Resource - private InfFileService fileService; - - @MockBean - private FileProperties fileProperties; - - @Resource - private InfFileCoreMapper fileMapper; - - @Test - public void testGetFilePage() { - // mock æ•°æ® - InfFileDO dbFile = randomPojo(InfFileDO.class, o -> { // 等会查询到 - o.setId("yudao"); - o.setType("jpg"); - o.setCreateTime(buildTime(2021, 1, 15)); - }); - fileMapper.insert(dbFile); - // 测试 id ä¸åŒ¹é… - fileMapper.insert(ObjectUtils.cloneIgnoreId(dbFile, o -> o.setId("tudou"))); - // 测试 type ä¸åŒ¹é… - fileMapper.insert(ObjectUtils.cloneIgnoreId(dbFile, o -> { - o.setId("yudao02"); - o.setType("png"); - })); - // 测试 createTime ä¸åŒ¹é… - fileMapper.insert(ObjectUtils.cloneIgnoreId(dbFile, o -> { - o.setId("yudao03"); - o.setCreateTime(buildTime(2020, 1, 15)); - })); - // 准备傿•° - InfFilePageReqVO reqVO = new InfFilePageReqVO(); - reqVO.setId("yudao"); - reqVO.setType("jp"); - reqVO.setBeginCreateTime(buildTime(2021, 1, 10)); - reqVO.setEndCreateTime(buildTime(2021, 1, 20)); - - // 调用 - PageResult pageResult = fileService.getFilePage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - AssertUtils.assertPojoEquals(dbFile, pageResult.getList().get(0), "content"); - } - -} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/job/InfJobLogServiceTest.java b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/job/JobLogServiceTest.java similarity index 67% rename from yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/job/InfJobLogServiceTest.java rename to yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/job/JobLogServiceTest.java index 60edcef090..27bda4965d 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/job/InfJobLogServiceTest.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/job/JobLogServiceTest.java @@ -14,36 +14,30 @@ import java.util.List; import javax.annotation.Resource; +import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobLogDO; +import cn.iocoder.yudao.module.infra.test.BaseDbUnitTest; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.Import; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.InfJobLogExportReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.InfJobLogPageReqVO; -import cn.iocoder.yudao.module.infra.dal.dataobject.job.InfJobLogDO; -import cn.iocoder.yudao.module.infra.dal.mysql.job.InfJobLogMapper; -import cn.iocoder.yudao.module.infra.enums.job.InfJobLogStatusEnum; -import cn.iocoder.yudao.module.infra.service.job.impl.InfJobLogServiceImpl; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogPageReqVO; +import cn.iocoder.yudao.module.infra.dal.mysql.job.JobLogMapper; +import cn.iocoder.yudao.module.infra.enums.job.JobLogStatusEnum; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; -/** - * {@link InfJobLogServiceImpl} çš„å•元测试 - * - * @author neilz - */ -@Import(InfJobLogServiceImpl.class) -public class InfJobLogServiceTest extends BaseDbUnitTest { +@Import(JobLogServiceImpl.class) +public class JobLogServiceTest extends BaseDbUnitTest { @Resource - private InfJobLogServiceImpl jobLogService; + private JobLogServiceImpl jobLogService; @Resource - private InfJobLogMapper jobLogMapper; + private JobLogMapper jobLogMapper; @Test public void testCreateJobLog_success() { // 准备傿•° - InfJobLogDO reqVO = randomPojo(InfJobLogDO.class, o -> { + JobLogDO reqVO = randomPojo(JobLogDO.class, o -> { o.setExecuteIndex(1); }); // 调用 @@ -51,40 +45,40 @@ public class InfJobLogServiceTest extends BaseDbUnitTest { // 断言 assertNotNull(jobLogId); // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - InfJobLogDO job = jobLogMapper.selectById(jobLogId); - assertEquals(InfJobLogStatusEnum.RUNNING.getStatus(), job.getStatus()); + JobLogDO job = jobLogMapper.selectById(jobLogId); + assertEquals(JobLogStatusEnum.RUNNING.getStatus(), job.getStatus()); } @Test public void testUpdateJobLogResultAsync_success() { // 准备傿•° - InfJobLogDO reqVO = randomPojo(InfJobLogDO.class, o -> { + JobLogDO reqVO = randomPojo(JobLogDO.class, o -> { o.setExecuteIndex(1); }); - InfJobLogDO log = InfJobLogDO.builder().jobId(reqVO.getJobId()).handlerName(reqVO.getHandlerName()).handlerParam(reqVO.getHandlerParam()).executeIndex(reqVO.getExecuteIndex()) - .beginTime(reqVO.getBeginTime()).status(InfJobLogStatusEnum.RUNNING.getStatus()).build(); + JobLogDO log = JobLogDO.builder().jobId(reqVO.getJobId()).handlerName(reqVO.getHandlerName()).handlerParam(reqVO.getHandlerParam()).executeIndex(reqVO.getExecuteIndex()) + .beginTime(reqVO.getBeginTime()).status(JobLogStatusEnum.RUNNING.getStatus()).build(); jobLogMapper.insert(log); // 调用 jobLogService.updateJobLogResultAsync(log.getId(), reqVO.getBeginTime(), reqVO.getDuration(), true,reqVO.getResult()); // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - InfJobLogDO job = jobLogMapper.selectById(log.getId()); - assertEquals(InfJobLogStatusEnum.SUCCESS.getStatus(), job.getStatus()); + JobLogDO job = jobLogMapper.selectById(log.getId()); + assertEquals(JobLogStatusEnum.SUCCESS.getStatus(), job.getStatus()); // 调用 jobLogService.updateJobLogResultAsync(log.getId(), reqVO.getBeginTime(), reqVO.getDuration(), false,reqVO.getResult()); // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - InfJobLogDO job2 = jobLogMapper.selectById(log.getId()); - assertEquals(InfJobLogStatusEnum.FAILURE.getStatus(), job2.getStatus()); + JobLogDO job2 = jobLogMapper.selectById(log.getId()); + assertEquals(JobLogStatusEnum.FAILURE.getStatus(), job2.getStatus()); } @Test public void testGetJobLogListByIds_success() { // mock æ•°æ® - InfJobLogDO dbJobLog = randomPojo(InfJobLogDO.class, o -> { + JobLogDO dbJobLog = randomPojo(JobLogDO.class, o -> { o.setExecuteIndex(1); - o.setStatus(randomEle(InfJobLogStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 + o.setStatus(randomEle(JobLogStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 }); - InfJobLogDO cloneJobLog = ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setHandlerName(randomString())); + JobLogDO cloneJobLog = ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setHandlerName(randomString())); jobLogMapper.insert(dbJobLog); // 测试 handlerName ä¸åŒ¹é… jobLogMapper.insert(cloneJobLog); @@ -93,7 +87,7 @@ public class InfJobLogServiceTest extends BaseDbUnitTest { ids.add(dbJobLog.getId()); ids.add(cloneJobLog.getId()); // 调用 - List list = jobLogService.getJobLogList(ids); + List list = jobLogService.getJobLogList(ids); // 断言 assertEquals(2, list.size()); assertPojoEquals(dbJobLog, list.get(0)); @@ -102,10 +96,10 @@ public class InfJobLogServiceTest extends BaseDbUnitTest { @Test public void testGetJobPage_success() { // mock æ•°æ® - InfJobLogDO dbJobLog = randomPojo(InfJobLogDO.class, o -> { + JobLogDO dbJobLog = randomPojo(JobLogDO.class, o -> { o.setExecuteIndex(1); o.setHandlerName("handlerName å•元测试"); - o.setStatus(InfJobLogStatusEnum.SUCCESS.getStatus()); + o.setStatus(JobLogStatusEnum.SUCCESS.getStatus()); o.setBeginTime(buildTime(2021, 1, 8)); o.setEndTime(buildTime(2021, 1, 8)); }); @@ -119,16 +113,16 @@ public class InfJobLogServiceTest extends BaseDbUnitTest { // 测试 endTime ä¸åŒ¹é… jobLogMapper.insert(ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setEndTime(buildTime(2021, 1, 9)))); // 测试 status ä¸åŒ¹é… - jobLogMapper.insert(ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setStatus(InfJobLogStatusEnum.FAILURE.getStatus()))); + jobLogMapper.insert(ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setStatus(JobLogStatusEnum.FAILURE.getStatus()))); // 准备傿•° - InfJobLogPageReqVO reqVo = new InfJobLogPageReqVO(); + JobLogPageReqVO reqVo = new JobLogPageReqVO(); reqVo.setJobId(dbJobLog.getJobId()); reqVo.setHandlerName("å•å…ƒ"); reqVo.setBeginTime(dbJobLog.getBeginTime()); reqVo.setEndTime(dbJobLog.getEndTime()); - reqVo.setStatus(InfJobLogStatusEnum.SUCCESS.getStatus()); + reqVo.setStatus(JobLogStatusEnum.SUCCESS.getStatus()); // 调用 - PageResult pageResult = jobLogService.getJobLogPage(reqVo); + PageResult pageResult = jobLogService.getJobLogPage(reqVo); // 断言 assertEquals(1, pageResult.getTotal()); assertEquals(1, pageResult.getList().size()); @@ -138,10 +132,10 @@ public class InfJobLogServiceTest extends BaseDbUnitTest { @Test public void testGetJobListForExport_success() { // mock æ•°æ® - InfJobLogDO dbJobLog = randomPojo(InfJobLogDO.class, o -> { + JobLogDO dbJobLog = randomPojo(JobLogDO.class, o -> { o.setExecuteIndex(1); o.setHandlerName("handlerName å•元测试"); - o.setStatus(InfJobLogStatusEnum.SUCCESS.getStatus()); + o.setStatus(JobLogStatusEnum.SUCCESS.getStatus()); o.setBeginTime(buildTime(2021, 1, 8)); o.setEndTime(buildTime(2021, 1, 8)); }); @@ -155,16 +149,16 @@ public class InfJobLogServiceTest extends BaseDbUnitTest { // 测试 endTime ä¸åŒ¹é… jobLogMapper.insert(ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setEndTime(buildTime(2021, 1, 9)))); // 测试 status ä¸åŒ¹é… - jobLogMapper.insert(ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setStatus(InfJobLogStatusEnum.FAILURE.getStatus()))); + jobLogMapper.insert(ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setStatus(JobLogStatusEnum.FAILURE.getStatus()))); // 准备傿•° - InfJobLogExportReqVO reqVo = new InfJobLogExportReqVO(); + JobLogExportReqVO reqVo = new JobLogExportReqVO(); reqVo.setJobId(dbJobLog.getJobId()); reqVo.setHandlerName("å•å…ƒ"); reqVo.setBeginTime(dbJobLog.getBeginTime()); reqVo.setEndTime(dbJobLog.getEndTime()); - reqVo.setStatus(InfJobLogStatusEnum.SUCCESS.getStatus()); + reqVo.setStatus(JobLogStatusEnum.SUCCESS.getStatus()); // 调用 - List list = jobLogService.getJobLogList(reqVo); + List list = jobLogService.getJobLogList(reqVo); // 断言 assertEquals(1, list.size()); assertPojoEquals(dbJobLog, list.get(0)); diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/job/InfJobServiceTest.java b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/job/JobServiceTest.java similarity index 62% rename from yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/job/InfJobServiceTest.java rename to yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/job/JobServiceTest.java index 6fd5acaea2..cfbeb307bf 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/job/InfJobServiceTest.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/job/JobServiceTest.java @@ -1,12 +1,7 @@ package cn.iocoder.yudao.module.infra.service.job; import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.module.infra.enums.InfErrorCodeConstants.JOB_CHANGE_STATUS_EQUALS; -import static cn.iocoder.yudao.module.infra.enums.InfErrorCodeConstants.JOB_CHANGE_STATUS_INVALID; -import static cn.iocoder.yudao.module.infra.enums.InfErrorCodeConstants.JOB_CRON_EXPRESSION_VALID; -import static cn.iocoder.yudao.module.infra.enums.InfErrorCodeConstants.JOB_HANDLER_EXISTS; -import static cn.iocoder.yudao.module.infra.enums.InfErrorCodeConstants.JOB_NOT_EXISTS; -import static cn.iocoder.yudao.module.infra.enums.InfErrorCodeConstants.JOB_UPDATE_ONLY_NORMAL_STATUS; +import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; @@ -23,44 +18,38 @@ import java.util.List; import javax.annotation.Resource; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobCreateReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobUpdateReqVO; +import cn.iocoder.yudao.module.infra.convert.job.JobConvert; +import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobDO; +import cn.iocoder.yudao.module.infra.test.BaseDbUnitTest; import org.junit.jupiter.api.Test; import org.quartz.SchedulerException; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Import; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.quartz.core.scheduler.SchedulerManager; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobCreateReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobExportReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobPageReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.InfJobUpdateReqVO; -import cn.iocoder.yudao.module.infra.convert.job.InfJobConvert; -import cn.iocoder.yudao.module.infra.dal.dataobject.job.InfJobDO; -import cn.iocoder.yudao.module.infra.dal.mysql.job.InfJobMapper; -import cn.iocoder.yudao.module.infra.enums.job.InfJobStatusEnum; -import cn.iocoder.yudao.module.infra.service.job.impl.InfJobServiceImpl; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobPageReqVO; +import cn.iocoder.yudao.module.infra.dal.mysql.job.JobMapper; +import cn.iocoder.yudao.module.infra.enums.job.JobStatusEnum; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; -/** - * {@link InfJobServiceImpl} çš„å•元测试 - * - * @author neilz - */ -@Import(InfJobServiceImpl.class) -public class InfJobServiceTest extends BaseDbUnitTest { +@Import(JobServiceImpl.class) +public class JobServiceTest extends BaseDbUnitTest { @Resource - private InfJobServiceImpl jobService; + private JobServiceImpl jobService; @Resource - private InfJobMapper jobMapper; + private JobMapper jobMapper; @MockBean private SchedulerManager schedulerManager; @Test public void testCreateJob_cronExpressionValid() { // 准备傿•°ã€‚Cron 表达å¼ä¸º String ç±»åž‹ï¼Œé»˜è®¤éšæœºå­—符串。 - InfJobCreateReqVO reqVO = randomPojo(InfJobCreateReqVO.class); + JobCreateReqVO reqVO = randomPojo(JobCreateReqVO.class); // 调用,并断言异常 assertServiceException(() -> jobService.createJob(reqVO), JOB_CRON_EXPRESSION_VALID); } @@ -68,7 +57,7 @@ public class InfJobServiceTest extends BaseDbUnitTest { @Test public void testCreateJob_jobHandlerExists() throws SchedulerException { // 准备傿•° 指定 Cron è¡¨è¾¾å¼ - InfJobCreateReqVO reqVO = randomPojo(InfJobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *")); + JobCreateReqVO reqVO = randomPojo(JobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *")); // 调用 jobService.createJob(reqVO); // 调用,并断言异常 @@ -78,15 +67,15 @@ public class InfJobServiceTest extends BaseDbUnitTest { @Test public void testCreateJob_success() throws SchedulerException { // 准备傿•° 指定 Cron è¡¨è¾¾å¼ - InfJobCreateReqVO reqVO = randomPojo(InfJobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *")); + JobCreateReqVO reqVO = randomPojo(JobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *")); // 调用 Long jobId = jobService.createJob(reqVO); // 断言 assertNotNull(jobId); // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - InfJobDO job = jobMapper.selectById(jobId); + JobDO job = jobMapper.selectById(jobId); assertPojoEquals(reqVO, job); - assertEquals(InfJobStatusEnum.NORMAL.getStatus(), job.getStatus()); + assertEquals(JobStatusEnum.NORMAL.getStatus(), job.getStatus()); // 校验调用 verify(schedulerManager, times(1)).addJob(eq(job.getId()), eq(job.getHandlerName()), eq(job.getHandlerParam()), eq(job.getCronExpression()), eq(reqVO.getRetryCount()), eq(reqVO.getRetryInterval())); @@ -95,7 +84,7 @@ public class InfJobServiceTest extends BaseDbUnitTest { @Test public void testUpdateJob_jobNotExists(){ // 准备傿•° - InfJobUpdateReqVO reqVO = randomPojo(InfJobUpdateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *")); + JobUpdateReqVO reqVO = randomPojo(JobUpdateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *")); // 调用,并断言异常 assertServiceException(() -> jobService.updateJob(reqVO), JOB_NOT_EXISTS); } @@ -103,13 +92,13 @@ public class InfJobServiceTest extends BaseDbUnitTest { @Test public void testUpdateJob_onlyNormalStatus(){ // mock æ•°æ® - InfJobCreateReqVO createReqVO = randomPojo(InfJobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *")); - InfJobDO job = InfJobConvert.INSTANCE.convert(createReqVO); - job.setStatus(InfJobStatusEnum.INIT.getStatus()); + JobCreateReqVO createReqVO = randomPojo(JobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *")); + JobDO job = JobConvert.INSTANCE.convert(createReqVO); + job.setStatus(JobStatusEnum.INIT.getStatus()); fillJobMonitorTimeoutEmpty(job); jobMapper.insert(job); // 准备傿•° - InfJobUpdateReqVO updateReqVO = randomPojo(InfJobUpdateReqVO.class, o -> { + JobUpdateReqVO updateReqVO = randomPojo(JobUpdateReqVO.class, o -> { o.setId(job.getId()); o.setName(createReqVO.getName()); o.setCronExpression(createReqVO.getCronExpression()); @@ -121,13 +110,13 @@ public class InfJobServiceTest extends BaseDbUnitTest { @Test public void testUpdateJob_success() throws SchedulerException { // mock æ•°æ® - InfJobCreateReqVO createReqVO = randomPojo(InfJobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *")); - InfJobDO job = InfJobConvert.INSTANCE.convert(createReqVO); - job.setStatus(InfJobStatusEnum.NORMAL.getStatus()); + JobCreateReqVO createReqVO = randomPojo(JobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *")); + JobDO job = JobConvert.INSTANCE.convert(createReqVO); + job.setStatus(JobStatusEnum.NORMAL.getStatus()); fillJobMonitorTimeoutEmpty(job); jobMapper.insert(job); // 准备傿•° - InfJobUpdateReqVO updateReqVO = randomPojo(InfJobUpdateReqVO.class, o -> { + JobUpdateReqVO updateReqVO = randomPojo(JobUpdateReqVO.class, o -> { o.setId(job.getId()); o.setName(createReqVO.getName()); o.setCronExpression(createReqVO.getCronExpression()); @@ -135,7 +124,7 @@ public class InfJobServiceTest extends BaseDbUnitTest { // 调用 jobService.updateJob(updateReqVO); // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - InfJobDO updateJob = jobMapper.selectById(updateReqVO.getId()); + JobDO updateJob = jobMapper.selectById(updateReqVO.getId()); assertPojoEquals(updateReqVO, updateJob); // 校验调用 verify(schedulerManager, times(1)).updateJob(eq(job.getHandlerName()), eq(updateReqVO.getHandlerParam()), eq(updateReqVO.getCronExpression()), @@ -145,15 +134,15 @@ public class InfJobServiceTest extends BaseDbUnitTest { @Test public void testUpdateJobStatus_changeStatusInvalid() { // 调用,并断言异常 - assertServiceException(() -> jobService.updateJobStatus(1l, InfJobStatusEnum.INIT.getStatus()), JOB_CHANGE_STATUS_INVALID); + assertServiceException(() -> jobService.updateJobStatus(1L, JobStatusEnum.INIT.getStatus()), JOB_CHANGE_STATUS_INVALID); } @Test public void testUpdateJobStatus_changeStatusEquals() { // mock æ•°æ® - InfJobCreateReqVO createReqVO = randomPojo(InfJobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *")); - InfJobDO job = InfJobConvert.INSTANCE.convert(createReqVO); - job.setStatus(InfJobStatusEnum.NORMAL.getStatus()); + JobCreateReqVO createReqVO = randomPojo(JobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *")); + JobDO job = JobConvert.INSTANCE.convert(createReqVO); + job.setStatus(JobStatusEnum.NORMAL.getStatus()); fillJobMonitorTimeoutEmpty(job); jobMapper.insert(job); // 调用,并断言异常 @@ -163,16 +152,16 @@ public class InfJobServiceTest extends BaseDbUnitTest { @Test public void testUpdateJobStatus_NormalToStop_success() throws SchedulerException { // mock æ•°æ® - InfJobCreateReqVO createReqVO = randomPojo(InfJobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *")); - InfJobDO job = InfJobConvert.INSTANCE.convert(createReqVO); - job.setStatus(InfJobStatusEnum.NORMAL.getStatus()); + JobCreateReqVO createReqVO = randomPojo(JobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *")); + JobDO job = JobConvert.INSTANCE.convert(createReqVO); + job.setStatus(JobStatusEnum.NORMAL.getStatus()); fillJobMonitorTimeoutEmpty(job); jobMapper.insert(job); // 调用 - jobService.updateJobStatus(job.getId(), InfJobStatusEnum.STOP.getStatus()); + jobService.updateJobStatus(job.getId(), JobStatusEnum.STOP.getStatus()); // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - InfJobDO updateJob = jobMapper.selectById(job.getId()); - assertEquals(InfJobStatusEnum.STOP.getStatus(), updateJob.getStatus()); + JobDO updateJob = jobMapper.selectById(job.getId()); + assertEquals(JobStatusEnum.STOP.getStatus(), updateJob.getStatus()); // 校验调用 verify(schedulerManager, times(1)).pauseJob(eq(job.getHandlerName())); } @@ -180,16 +169,16 @@ public class InfJobServiceTest extends BaseDbUnitTest { @Test public void testUpdateJobStatus_StopToNormal_success() throws SchedulerException { // mock æ•°æ® - InfJobCreateReqVO createReqVO = randomPojo(InfJobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *")); - InfJobDO job = InfJobConvert.INSTANCE.convert(createReqVO); - job.setStatus(InfJobStatusEnum.STOP.getStatus()); + JobCreateReqVO createReqVO = randomPojo(JobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *")); + JobDO job = JobConvert.INSTANCE.convert(createReqVO); + job.setStatus(JobStatusEnum.STOP.getStatus()); fillJobMonitorTimeoutEmpty(job); jobMapper.insert(job); // 调用 - jobService.updateJobStatus(job.getId(), InfJobStatusEnum.NORMAL.getStatus()); + jobService.updateJobStatus(job.getId(), JobStatusEnum.NORMAL.getStatus()); // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - InfJobDO updateJob = jobMapper.selectById(job.getId()); - assertEquals(InfJobStatusEnum.NORMAL.getStatus(), updateJob.getStatus()); + JobDO updateJob = jobMapper.selectById(job.getId()); + assertEquals(JobStatusEnum.NORMAL.getStatus(), updateJob.getStatus()); // 校验调用 verify(schedulerManager, times(1)).resumeJob(eq(job.getHandlerName())); } @@ -197,9 +186,9 @@ public class InfJobServiceTest extends BaseDbUnitTest { @Test public void testTriggerJob_success() throws SchedulerException { // mock æ•°æ® - InfJobCreateReqVO createReqVO = randomPojo(InfJobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *")); - InfJobDO job = InfJobConvert.INSTANCE.convert(createReqVO); - job.setStatus(InfJobStatusEnum.NORMAL.getStatus()); + JobCreateReqVO createReqVO = randomPojo(JobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *")); + JobDO job = JobConvert.INSTANCE.convert(createReqVO); + job.setStatus(JobStatusEnum.NORMAL.getStatus()); fillJobMonitorTimeoutEmpty(job); jobMapper.insert(job); // 调用 @@ -211,9 +200,9 @@ public class InfJobServiceTest extends BaseDbUnitTest { @Test public void testDeleteJob_success() throws SchedulerException { // mock æ•°æ® - InfJobCreateReqVO createReqVO = randomPojo(InfJobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *")); - InfJobDO job = InfJobConvert.INSTANCE.convert(createReqVO); - job.setStatus(InfJobStatusEnum.NORMAL.getStatus()); + JobCreateReqVO createReqVO = randomPojo(JobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *")); + JobDO job = JobConvert.INSTANCE.convert(createReqVO); + job.setStatus(JobStatusEnum.NORMAL.getStatus()); fillJobMonitorTimeoutEmpty(job); jobMapper.insert(job); // 调用 UPDATE inf_job SET deleted=1 WHERE id=? AND deleted=0 @@ -227,19 +216,19 @@ public class InfJobServiceTest extends BaseDbUnitTest { @Test public void testGetJobListByIds_success() { // mock æ•°æ® - InfJobDO dbJob = randomPojo(InfJobDO.class, o -> { - o.setStatus(randomEle(InfJobStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 + JobDO dbJob = randomPojo(JobDO.class, o -> { + o.setStatus(randomEle(JobStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 }); - InfJobDO cloneJob = ObjectUtils.cloneIgnoreId(dbJob, o -> o.setHandlerName(randomString())); + JobDO cloneJob = ObjectUtils.cloneIgnoreId(dbJob, o -> o.setHandlerName(randomString())); jobMapper.insert(dbJob); // 测试 handlerName ä¸åŒ¹é… jobMapper.insert(cloneJob); // 准备傿•° - ArrayList ids = new ArrayList<>(); + ArrayList ids = new ArrayList<>(); ids.add(dbJob.getId()); ids.add(cloneJob.getId()); // 调用 - List list = jobService.getJobList(ids); + List list = jobService.getJobList(ids); // 断言 assertEquals(2, list.size()); assertPojoEquals(dbJob, list.get(0)); @@ -248,25 +237,25 @@ public class InfJobServiceTest extends BaseDbUnitTest { @Test public void testGetJobPage_success() { // mock æ•°æ® - InfJobDO dbJob = randomPojo(InfJobDO.class, o -> { + JobDO dbJob = randomPojo(JobDO.class, o -> { o.setName("定时任务测试"); o.setHandlerName("handlerName å•元测试"); - o.setStatus(InfJobStatusEnum.INIT.getStatus()); + o.setStatus(JobStatusEnum.INIT.getStatus()); }); jobMapper.insert(dbJob); // 测试 name ä¸åŒ¹é… jobMapper.insert(ObjectUtils.cloneIgnoreId(dbJob, o -> o.setName("土豆"))); // 测试 status ä¸åŒ¹é… - jobMapper.insert(ObjectUtils.cloneIgnoreId(dbJob, o -> o.setStatus(InfJobStatusEnum.NORMAL.getStatus()))); + jobMapper.insert(ObjectUtils.cloneIgnoreId(dbJob, o -> o.setStatus(JobStatusEnum.NORMAL.getStatus()))); // 测试 handlerName ä¸åŒ¹é… jobMapper.insert(ObjectUtils.cloneIgnoreId(dbJob, o -> o.setHandlerName(randomString()))); // 准备傿•° - InfJobPageReqVO reqVo = new InfJobPageReqVO(); + JobPageReqVO reqVo = new JobPageReqVO(); reqVo.setName("定时"); - reqVo.setStatus(InfJobStatusEnum.INIT.getStatus()); + reqVo.setStatus(JobStatusEnum.INIT.getStatus()); reqVo.setHandlerName("å•å…ƒ"); // 调用 - PageResult pageResult = jobService.getJobPage(reqVo); + PageResult pageResult = jobService.getJobPage(reqVo); // 断言 assertEquals(1, pageResult.getTotal()); assertEquals(1, pageResult.getList().size()); @@ -276,31 +265,31 @@ public class InfJobServiceTest extends BaseDbUnitTest { @Test public void testGetJobListForExport_success() { // mock æ•°æ® - InfJobDO dbJob = randomPojo(InfJobDO.class, o -> { + JobDO dbJob = randomPojo(JobDO.class, o -> { o.setName("定时任务测试"); o.setHandlerName("handlerName å•元测试"); - o.setStatus(InfJobStatusEnum.INIT.getStatus()); + o.setStatus(JobStatusEnum.INIT.getStatus()); }); jobMapper.insert(dbJob); // 测试 name ä¸åŒ¹é… jobMapper.insert(ObjectUtils.cloneIgnoreId(dbJob, o -> o.setName("土豆"))); // 测试 status ä¸åŒ¹é… - jobMapper.insert(ObjectUtils.cloneIgnoreId(dbJob, o -> o.setStatus(InfJobStatusEnum.NORMAL.getStatus()))); + jobMapper.insert(ObjectUtils.cloneIgnoreId(dbJob, o -> o.setStatus(JobStatusEnum.NORMAL.getStatus()))); // 测试 handlerName ä¸åŒ¹é… jobMapper.insert(ObjectUtils.cloneIgnoreId(dbJob, o -> o.setHandlerName(randomString()))); // 准备傿•° - InfJobExportReqVO reqVo = new InfJobExportReqVO(); + JobExportReqVO reqVo = new JobExportReqVO(); reqVo.setName("定时"); - reqVo.setStatus(InfJobStatusEnum.INIT.getStatus()); + reqVo.setStatus(JobStatusEnum.INIT.getStatus()); reqVo.setHandlerName("å•å…ƒ"); // 调用 - List list = jobService.getJobList(reqVo); + List list = jobService.getJobList(reqVo); // 断言 assertEquals(1, list.size()); assertPojoEquals(dbJob, list.get(0)); } - private static void fillJobMonitorTimeoutEmpty(InfJobDO job) { + private static void fillJobMonitorTimeoutEmpty(JobDO job) { if (job.getMonitorTimeout() == null) { job.setMonitorTimeout(0); } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/logger/InfApiAccessLogServiceImplTest.java b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/logger/ApiAccessLogServiceImplTest.java similarity index 54% rename from yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/logger/InfApiAccessLogServiceImplTest.java rename to yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/logger/ApiAccessLogServiceImplTest.java index 86e2fa9ddf..0b1b3d9327 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/logger/InfApiAccessLogServiceImplTest.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/logger/ApiAccessLogServiceImplTest.java @@ -1,16 +1,17 @@ package cn.iocoder.yudao.module.infra.service.logger; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiAccessLogDO; +import cn.hutool.core.util.RandomUtil; +import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiAccessLogCreateReqDTO; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.InfApiAccessLogExportReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.InfApiAccessLogPageReqVO; -import cn.iocoder.yudao.module.infra.dal.mysql.logger.InfApiAccessLogMapper; -import cn.iocoder.yudao.module.infra.service.logger.impl.InfApiAccessLogServiceImpl; -import cn.iocoder.yudao.framework.test.core.util.RandomUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; +import cn.iocoder.yudao.framework.test.core.util.RandomUtils; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogPageReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiAccessLogDO; +import cn.iocoder.yudao.module.infra.dal.mysql.logger.ApiAccessLogMapper; +import cn.iocoder.yudao.module.infra.test.BaseDbUnitTest; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.Import; @@ -18,22 +19,19 @@ import javax.annotation.Resource; import java.util.Date; import java.util.List; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; -/** - * {@link InfApiAccessLogServiceImpl} å•元测试 - */ -@Import(InfApiAccessLogServiceImpl.class) -public class InfApiAccessLogServiceImplTest extends BaseDbUnitTest { +@Import(ApiAccessLogServiceImpl.class) +public class ApiAccessLogServiceImplTest extends BaseDbUnitTest { @Resource - private InfApiAccessLogService infApiAccessLogServiceImpl; + private ApiAccessLogService apiAccessLogService; @Resource - private InfApiAccessLogMapper infApiAccessLogMapper; + private ApiAccessLogMapper apiAccessLogMapper; @Test public void testGetApiAccessLogPage() { @@ -46,7 +44,7 @@ public class InfApiAccessLogServiceImplTest extends BaseDbUnitTest { int duration = 1000; int resultCode = GlobalErrorCodeConstants.SUCCESS.getCode(); - InfApiAccessLogDO infApiAccessLogDO = RandomUtils.randomPojo(InfApiAccessLogDO.class, dto -> { + ApiAccessLogDO infApiAccessLogDO = RandomUtils.randomPojo(ApiAccessLogDO.class, dto -> { dto.setUserId(userId); dto.setUserType(userType); dto.setApplicationName(applicationName); @@ -55,26 +53,26 @@ public class InfApiAccessLogServiceImplTest extends BaseDbUnitTest { dto.setDuration(duration); dto.setResultCode(resultCode); }); - infApiAccessLogMapper.insert(infApiAccessLogDO); + apiAccessLogMapper.insert(infApiAccessLogDO); // 下é¢å‡ ä¸ªéƒ½æ˜¯ä¸åŒ¹é…çš„æ•°æ® // userId ä¸åŒçš„ - infApiAccessLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiAccessLogDO, logDO -> logDO.setUserId(3344L))); + apiAccessLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiAccessLogDO, logDO -> logDO.setUserId(3344L))); // userType - infApiAccessLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiAccessLogDO, logDO -> logDO.setUserType(UserTypeEnum.MEMBER.getValue()))); + apiAccessLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiAccessLogDO, logDO -> logDO.setUserType(UserTypeEnum.MEMBER.getValue()))); // applicationName ä¸åŒçš„ - infApiAccessLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiAccessLogDO, logDO -> logDO.setApplicationName("test"))); + apiAccessLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiAccessLogDO, logDO -> logDO.setApplicationName("test"))); // requestUrl ä¸åŒçš„ - infApiAccessLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiAccessLogDO, logDO -> logDO.setRequestUrl("bar"))); + apiAccessLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiAccessLogDO, logDO -> logDO.setRequestUrl("bar"))); // 构造一个早期时间 2021-02-06 00:00:00 - infApiAccessLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiAccessLogDO, logDO -> logDO.setBeginTime(buildTime(2021, 2, 6)))); + apiAccessLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiAccessLogDO, logDO -> logDO.setBeginTime(buildTime(2021, 2, 6)))); // duration ä¸åŒçš„ - infApiAccessLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiAccessLogDO, logDO -> logDO.setDuration(100))); + apiAccessLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiAccessLogDO, logDO -> logDO.setDuration(100))); // resultCode ä¸åŒçš„ - infApiAccessLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiAccessLogDO, logDO -> logDO.setResultCode(2))); + apiAccessLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiAccessLogDO, logDO -> logDO.setResultCode(2))); // æž„é€ è°ƒç”¨å‚æ•° - InfApiAccessLogPageReqVO reqVO = new InfApiAccessLogPageReqVO(); + ApiAccessLogPageReqVO reqVO = new ApiAccessLogPageReqVO(); reqVO.setUserId(userId); reqVO.setUserType(userType); reqVO.setApplicationName(applicationName); @@ -85,7 +83,7 @@ public class InfApiAccessLogServiceImplTest extends BaseDbUnitTest { reqVO.setResultCode(resultCode); // 调用service方法 - PageResult pageResult = infApiAccessLogServiceImpl.getApiAccessLogPage(reqVO); + PageResult pageResult = apiAccessLogService.getApiAccessLogPage(reqVO); // æ–­è¨€ï¼ŒåªæŸ¥åˆ°äº†ä¸€æ¡ç¬¦åˆæ¡ä»¶çš„ assertEquals(1, pageResult.getTotal()); @@ -104,7 +102,7 @@ public class InfApiAccessLogServiceImplTest extends BaseDbUnitTest { int duration = 1000; int resultCode = GlobalErrorCodeConstants.SUCCESS.getCode(); - InfApiAccessLogDO infApiAccessLogDO = RandomUtils.randomPojo(InfApiAccessLogDO.class, dto -> { + ApiAccessLogDO infApiAccessLogDO = RandomUtils.randomPojo(ApiAccessLogDO.class, dto -> { dto.setUserId(userId); dto.setUserType(userType); dto.setApplicationName(applicationName); @@ -113,26 +111,26 @@ public class InfApiAccessLogServiceImplTest extends BaseDbUnitTest { dto.setDuration(duration); dto.setResultCode(resultCode); }); - infApiAccessLogMapper.insert(infApiAccessLogDO); + apiAccessLogMapper.insert(infApiAccessLogDO); // 下é¢å‡ ä¸ªéƒ½æ˜¯ä¸åŒ¹é…çš„æ•°æ® // userId ä¸åŒçš„ - infApiAccessLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiAccessLogDO, logDO -> logDO.setUserId(3344L))); + apiAccessLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiAccessLogDO, logDO -> logDO.setUserId(3344L))); // userType - infApiAccessLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiAccessLogDO, logDO -> logDO.setUserType(UserTypeEnum.MEMBER.getValue()))); + apiAccessLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiAccessLogDO, logDO -> logDO.setUserType(UserTypeEnum.MEMBER.getValue()))); // applicationName ä¸åŒçš„ - infApiAccessLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiAccessLogDO, logDO -> logDO.setApplicationName("test"))); + apiAccessLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiAccessLogDO, logDO -> logDO.setApplicationName("test"))); // requestUrl ä¸åŒçš„ - infApiAccessLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiAccessLogDO, logDO -> logDO.setRequestUrl("bar"))); + apiAccessLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiAccessLogDO, logDO -> logDO.setRequestUrl("bar"))); // 构造一个早期时间 2021-02-06 00:00:00 - infApiAccessLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiAccessLogDO, logDO -> logDO.setBeginTime(buildTime(2021, 2, 6)))); + apiAccessLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiAccessLogDO, logDO -> logDO.setBeginTime(buildTime(2021, 2, 6)))); // duration ä¸åŒçš„ - infApiAccessLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiAccessLogDO, logDO -> logDO.setDuration(100))); + apiAccessLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiAccessLogDO, logDO -> logDO.setDuration(100))); // resultCode ä¸åŒçš„ - infApiAccessLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiAccessLogDO, logDO -> logDO.setResultCode(2))); + apiAccessLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiAccessLogDO, logDO -> logDO.setResultCode(2))); // æž„é€ è°ƒç”¨å‚æ•° - InfApiAccessLogExportReqVO reqVO = new InfApiAccessLogExportReqVO(); + ApiAccessLogExportReqVO reqVO = new ApiAccessLogExportReqVO(); reqVO.setUserId(userId); reqVO.setUserType(userType); reqVO.setApplicationName(applicationName); @@ -143,11 +141,26 @@ public class InfApiAccessLogServiceImplTest extends BaseDbUnitTest { reqVO.setResultCode(resultCode); // 调用service方法 - List list = infApiAccessLogServiceImpl.getApiAccessLogList(reqVO); + List list = apiAccessLogService.getApiAccessLogList(reqVO); // æ–­è¨€ï¼ŒåªæŸ¥åˆ°äº†ä¸€æ¡ç¬¦åˆæ¡ä»¶çš„ assertEquals(1, list.size()); assertPojoEquals(infApiAccessLogDO, list.get(0)); } + @Test + public void testCreateApiAccessLogAsync() { + // 准备傿•° + ApiAccessLogCreateReqDTO createDTO = RandomUtils.randomPojo(ApiAccessLogCreateReqDTO.class, + dto -> dto.setUserType(RandomUtil.randomEle(UserTypeEnum.values()).getValue())); + + // 调用 + apiAccessLogService.createApiAccessLogAsync(createDTO); + // 断言 + ApiAccessLogDO infApiAccessLogDO = apiAccessLogMapper.selectOne(null); + assertNotNull(infApiAccessLogDO); + assertPojoEquals(createDTO, infApiAccessLogDO); + } + + } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/logger/InfApiErrorLogServiceImplTest.java b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/logger/ApiErrorLogServiceImplTest.java similarity index 65% rename from yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/logger/InfApiErrorLogServiceImplTest.java rename to yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/logger/ApiErrorLogServiceImplTest.java index 89081277ad..9b24d59875 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/logger/InfApiErrorLogServiceImplTest.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/logger/ApiErrorLogServiceImplTest.java @@ -1,16 +1,17 @@ package cn.iocoder.yudao.module.infra.service.logger; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.InfApiErrorLogExportReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.InfApiErrorLogPageReqVO; -import cn.iocoder.yudao.module.infra.dal.mysql.logger.InfApiErrorLogMapper; -import cn.iocoder.yudao.module.infra.enums.logger.InfApiErrorLogProcessStatusEnum; -import cn.iocoder.yudao.module.infra.service.logger.impl.InfApiErrorLogServiceImpl; -import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiErrorLogDO; +import cn.hutool.core.util.RandomUtil; +import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiErrorLogCreateReqDTO; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; import cn.iocoder.yudao.framework.test.core.util.RandomUtils; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogPageReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiErrorLogDO; +import cn.iocoder.yudao.module.infra.dal.mysql.logger.ApiErrorLogMapper; +import cn.iocoder.yudao.module.infra.enums.logger.ApiErrorLogProcessStatusEnum; +import cn.iocoder.yudao.module.infra.test.BaseDbUnitTest; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.Import; @@ -19,24 +20,22 @@ import javax.annotation.Resource; import java.util.Date; import java.util.List; -import static cn.iocoder.yudao.module.infra.enums.InfErrorCodeConstants.API_ERROR_LOG_NOT_FOUND; -import static cn.iocoder.yudao.module.infra.enums.InfErrorCodeConstants.API_ERROR_LOG_PROCESSED; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; +import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.API_ERROR_LOG_NOT_FOUND; +import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.API_ERROR_LOG_PROCESSED; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; -/** - * {@link InfApiErrorLogServiceImpl} å•元测试 - */ -@Import(InfApiErrorLogServiceImpl.class) -public class InfApiErrorLogServiceImplTest extends BaseDbUnitTest { +@Import(ApiErrorLogServiceImpl.class) +public class ApiErrorLogServiceImplTest extends BaseDbUnitTest { @Resource - private InfApiErrorLogService infApiErrorLogServiceImpl; + private ApiErrorLogServiceImpl apiErrorLogService; @Resource - private InfApiErrorLogMapper infApiErrorLogMapper; + private ApiErrorLogMapper infApiErrorLogMapper; @Test public void testGetApiErrorLogPage() { @@ -46,9 +45,9 @@ public class InfApiErrorLogServiceImplTest extends BaseDbUnitTest { String applicationName = "yudao-test"; String requestUrl = "foo"; Date beginTime = buildTime(2021, 3, 13); - int progressStatus = InfApiErrorLogProcessStatusEnum.INIT.getStatus(); + int progressStatus = ApiErrorLogProcessStatusEnum.INIT.getStatus(); - InfApiErrorLogDO infApiErrorLogDO = RandomUtils.randomPojo(InfApiErrorLogDO.class, logDO -> { + ApiErrorLogDO infApiErrorLogDO = RandomUtils.randomPojo(ApiErrorLogDO.class, logDO -> { logDO.setUserId(userId); logDO.setUserType(userType); logDO.setApplicationName(applicationName); @@ -70,10 +69,10 @@ public class InfApiErrorLogServiceImplTest extends BaseDbUnitTest { // 构造一个早期时间 2021-02-06 00:00:00 infApiErrorLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiErrorLogDO, logDO -> logDO.setExceptionTime(buildTime(2021, 2, 6)))); // progressStatus ä¸åŒçš„ - infApiErrorLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiErrorLogDO, logDO -> logDO.setProcessStatus(InfApiErrorLogProcessStatusEnum.DONE.getStatus()))); + infApiErrorLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiErrorLogDO, logDO -> logDO.setProcessStatus(ApiErrorLogProcessStatusEnum.DONE.getStatus()))); // æž„é€ è°ƒç”¨å‚æ•° - InfApiErrorLogPageReqVO reqVO = new InfApiErrorLogPageReqVO(); + ApiErrorLogPageReqVO reqVO = new ApiErrorLogPageReqVO(); reqVO.setUserId(userId); reqVO.setUserType(userType); reqVO.setApplicationName(applicationName); @@ -83,7 +82,7 @@ public class InfApiErrorLogServiceImplTest extends BaseDbUnitTest { reqVO.setProcessStatus(progressStatus); // 调用service方法 - PageResult pageResult = infApiErrorLogServiceImpl.getApiErrorLogPage(reqVO); + PageResult pageResult = apiErrorLogService.getApiErrorLogPage(reqVO); // æ–­è¨€ï¼ŒåªæŸ¥åˆ°äº†ä¸€æ¡ç¬¦åˆæ¡ä»¶çš„ assertEquals(1, pageResult.getTotal()); @@ -99,9 +98,9 @@ public class InfApiErrorLogServiceImplTest extends BaseDbUnitTest { String applicationName = "yudao-test"; String requestUrl = "foo"; Date beginTime = buildTime(2021, 3, 13); - int progressStatus = InfApiErrorLogProcessStatusEnum.INIT.getStatus(); + int progressStatus = ApiErrorLogProcessStatusEnum.INIT.getStatus(); - InfApiErrorLogDO infApiErrorLogDO = RandomUtils.randomPojo(InfApiErrorLogDO.class, logDO -> { + ApiErrorLogDO infApiErrorLogDO = RandomUtils.randomPojo(ApiErrorLogDO.class, logDO -> { logDO.setUserId(userId); logDO.setUserType(userType); logDO.setApplicationName(applicationName); @@ -123,10 +122,10 @@ public class InfApiErrorLogServiceImplTest extends BaseDbUnitTest { // 构造一个早期时间 2021-02-06 00:00:00 infApiErrorLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiErrorLogDO, logDO -> logDO.setExceptionTime(buildTime(2021, 2, 6)))); // progressStatus ä¸åŒçš„ - infApiErrorLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiErrorLogDO, logDO -> logDO.setProcessStatus(InfApiErrorLogProcessStatusEnum.DONE.getStatus()))); + infApiErrorLogMapper.insert(ObjectUtils.cloneIgnoreId(infApiErrorLogDO, logDO -> logDO.setProcessStatus(ApiErrorLogProcessStatusEnum.DONE.getStatus()))); // æž„é€ è°ƒç”¨å‚æ•° - InfApiErrorLogExportReqVO reqVO = new InfApiErrorLogExportReqVO(); + ApiErrorLogExportReqVO reqVO = new ApiErrorLogExportReqVO(); reqVO.setUserId(userId); reqVO.setUserType(userType); reqVO.setApplicationName(applicationName); @@ -136,7 +135,7 @@ public class InfApiErrorLogServiceImplTest extends BaseDbUnitTest { reqVO.setProcessStatus(progressStatus); // 调用service方法 - List list = infApiErrorLogServiceImpl.getApiErrorLogList(reqVO); + List list = apiErrorLogService.getApiErrorLogList(reqVO); // æ–­è¨€ï¼ŒåªæŸ¥åˆ°äº†ä¸€æ¡ç¬¦åˆæ¡ä»¶çš„ assertEquals(1, list.size()); @@ -144,22 +143,23 @@ public class InfApiErrorLogServiceImplTest extends BaseDbUnitTest { } + // TODO 芋艿:å•元测试,å¯ä»¥æ‹†å°ä¸€ç‚¹ @Test public void testUpdateApiErrorLogProcess() { // å…ˆæž„é€ ä¸¤æ¡æ•°æ®ï¼Œç¬¬ä¸€æ¡ç”¨äºŽæŠ›å‡ºå¼‚常,第二æ¡ç”¨äºŽæ­£å¸¸çš„æ‰§è¡Œupdateæ“作 Long processUserId = 2233L; - InfApiErrorLogDO first = RandomUtils.randomPojo(InfApiErrorLogDO.class, logDO -> { + ApiErrorLogDO first = RandomUtils.randomPojo(ApiErrorLogDO.class, logDO -> { logDO.setProcessUserId(processUserId); logDO.setUserType(UserTypeEnum.ADMIN.getValue()); - logDO.setProcessStatus(InfApiErrorLogProcessStatusEnum.DONE.getStatus()); + logDO.setProcessStatus(ApiErrorLogProcessStatusEnum.DONE.getStatus()); }); infApiErrorLogMapper.insert(first); - InfApiErrorLogDO second = RandomUtils.randomPojo(InfApiErrorLogDO.class, logDO -> { + ApiErrorLogDO second = RandomUtils.randomPojo(ApiErrorLogDO.class, logDO -> { logDO.setProcessUserId(1122L); logDO.setUserType(UserTypeEnum.ADMIN.getValue()); - logDO.setProcessStatus(InfApiErrorLogProcessStatusEnum.INIT.getStatus()); + logDO.setProcessStatus(ApiErrorLogProcessStatusEnum.INIT.getStatus()); }); infApiErrorLogMapper.insert(second); @@ -167,17 +167,31 @@ public class InfApiErrorLogServiceImplTest extends BaseDbUnitTest { Long secondId = second.getId(); // 执行正常的 update æ“作 - infApiErrorLogServiceImpl.updateApiErrorLogProcess(secondId, InfApiErrorLogProcessStatusEnum.DONE.getStatus(), processUserId); - InfApiErrorLogDO secondSelect = infApiErrorLogMapper.selectOne("id", secondId); + apiErrorLogService.updateApiErrorLogProcess(secondId, ApiErrorLogProcessStatusEnum.DONE.getStatus(), processUserId); + ApiErrorLogDO secondSelect = infApiErrorLogMapper.selectOne("id", secondId); // id 为 0 查询ä¸åˆ°ï¼Œåº”该抛出异常 API_ERROR_LOG_NOT_FOUND - assertServiceException(() -> infApiErrorLogServiceImpl.updateApiErrorLogProcess(0L, InfApiErrorLogProcessStatusEnum.DONE.getStatus(), processUserId), API_ERROR_LOG_NOT_FOUND); + assertServiceException(() -> apiErrorLogService.updateApiErrorLogProcess(0L, ApiErrorLogProcessStatusEnum.DONE.getStatus(), processUserId), API_ERROR_LOG_NOT_FOUND); // id 为 first çš„ progressStatus 为 DONE ,应该抛出 API_ERROR_LOG_PROCESSED - assertServiceException(() -> infApiErrorLogServiceImpl.updateApiErrorLogProcess(firstId, InfApiErrorLogProcessStatusEnum.DONE.getStatus(), processUserId), API_ERROR_LOG_PROCESSED); + assertServiceException(() -> apiErrorLogService.updateApiErrorLogProcess(firstId, ApiErrorLogProcessStatusEnum.DONE.getStatus(), processUserId), API_ERROR_LOG_PROCESSED); // éªŒè¯ progressStatus 是å¦ä¿®æ”¹æˆåŠŸ - Assertions.assertEquals(InfApiErrorLogProcessStatusEnum.DONE.getStatus(), secondSelect.getProcessStatus()); + Assertions.assertEquals(ApiErrorLogProcessStatusEnum.DONE.getStatus(), secondSelect.getProcessStatus()); // éªŒè¯ progressUserId 是å¦ä¿®æ”¹æˆåŠŸ Assertions.assertEquals(processUserId, secondSelect.getProcessUserId()); } + @Test + public void testCreateApiErrorLogAsync() { + // 准备傿•° + ApiErrorLogCreateReqDTO createDTO = RandomUtils.randomPojo(ApiErrorLogCreateReqDTO.class, + dto -> dto.setUserType(RandomUtil.randomEle(UserTypeEnum.values()).getValue())); + + // 调用 + apiErrorLogService.createApiErrorLogAsync(createDTO); + // 断言 + ApiErrorLogDO infApiErrorLogDO = infApiErrorLogMapper.selectOne(null); + assertNotNull(infApiErrorLogDO); + assertPojoEquals(createDTO, infApiErrorLogDO); + } + } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test/resources/application-unit-test.yaml b/yudao-module-infra/yudao-module-infra-impl/src/test/resources/application-unit-test.yaml new file mode 100644 index 0000000000..6f83b473aa --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/resources/application-unit-test.yaml @@ -0,0 +1,54 @@ +spring: + main: + lazy-initialization: true # 开坿‡’加载,加快速度 + banner-mode: off # å•元测试,ç¦ç”¨ Banner + +--- #################### æ•°æ®åº“相关é…ç½® #################### + +spring: + # æ•°æ®æºé…置项 + datasource: + name: ruoyi-vue-pro + url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false; # MODE 使用 MySQL 模å¼ï¼›DATABASE_TO_UPPER é…置表和字段使用å°å†™ + driver-class-name: org.h2.Driver + username: sa + password: + schema: classpath:sql/create_tables.sql # MySQL 转 H2 的语å¥ï¼Œä½¿ç”¨ https://www.jooq.org/translate/ 工具 + druid: + async-init: true # å•元测试,异步åˆå§‹åŒ– Druid 连接池,æå‡å¯åŠ¨é€Ÿåº¦ + initial-size: 1 # å•元测试,é…置为 1,æå‡å¯åŠ¨é€Ÿåº¦ + + # Redis é…置。Redisson 默认的é…置足够使用,一般ä¸éœ€è¦è¿›è¡Œè°ƒä¼˜ + redis: + host: 127.0.0.1 # åœ°å€ + port: 16379 # 端å£ï¼ˆå•元测试,使用 16379 端å£ï¼‰ + database: 0 # æ•°æ®åº“索引 + +mybatis: + lazy-initialization: true # å•元测试,设置 MyBatis Mapper 延迟加载,加速æ¯ä¸ªå•元测试 + +--- #################### 定时任务相关é…ç½® #################### + +--- #################### é…置中心相关é…ç½® #################### + +--- #################### æœåŠ¡ä¿éšœç›¸å…³é…ç½® #################### + +# Lock4j é…置项(å•元测试,ç¦ç”¨ Lock4j) + +# Resilience4j é…置项 + +--- #################### 监控相关é…ç½® #################### + +--- #################### 芋é“相关é…ç½® #################### + +# 芋é“é…置项,设置当å‰é¡¹ç›®æ‰€æœ‰è‡ªå®šä¹‰çš„é…ç½® +yudao: + info: + base-package: cn.iocoder.yudao.module.member.dal.mysql + base-package2: cn.iocoder.yudao.module + core-service: + base-package: cn.iocoder.yudao.module.member.dal.mysql # TODO èŠ‹è‰¿ï¼šè¦æ¸…ç†æŽ‰ + captcha: + timeout: 5m + width: 160 + height: 60 diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test/resources/logback-spring.xml b/yudao-module-infra/yudao-module-infra-impl/src/test/resources/logback-spring.xml new file mode 100644 index 0000000000..daf756bff0 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/resources/logback-spring.xml @@ -0,0 +1,4 @@ + + + + diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test/resources/sql/clean.sql b/yudao-module-infra/yudao-module-infra-impl/src/test/resources/sql/clean.sql new file mode 100644 index 0000000000..edf0e8ddf8 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/resources/sql/clean.sql @@ -0,0 +1,6 @@ +DELETE FROM "infra_config"; +DELETE FROM "infra_file"; +DELETE FROM "infra_job"; +DELETE FROM "infra_job_log"; +DELETE FROM "infra_api_access_log"; +DELETE FROM "infra_api_error_log"; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test/resources/sql/create_tables.sql b/yudao-module-infra/yudao-module-infra-impl/src/test/resources/sql/create_tables.sql new file mode 100644 index 0000000000..2ec26d220e --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/resources/sql/create_tables.sql @@ -0,0 +1,67 @@ + +CREATE TABLE IF NOT EXISTS "infra_config" ( + "id" bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "group" varchar(50) NOT NULL, + "type" tinyint NOT NULL, + "name" varchar(100) NOT NULL DEFAULT '', + "key" varchar(100) NOT NULL DEFAULT '', + "value" varchar(500) NOT NULL DEFAULT '', + "sensitive" bit NOT NULL, + "remark" varchar(500) DEFAULT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") + ) COMMENT '傿•°é…置表'; + +CREATE TABLE IF NOT EXISTS "infra_file" ( + "id" varchar(188) NOT NULL, + "type" varchar(63) DEFAULT NULL, + "content" blob NOT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + "tenant_id" bigint not null default '0', + PRIMARY KEY ("id") + ) COMMENT '文件表'; + +CREATE TABLE IF NOT EXISTS "infra_job" ( + "id" bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY COMMENT '任务编å·', + "name" varchar(32) NOT NULL COMMENT '任务åç§°', + "status" tinyint(4) NOT NULL COMMENT '任务状æ€', + "handler_name" varchar(64) NOT NULL COMMENT '处ç†å™¨çš„åå­—', + "handler_param" varchar(255) DEFAULT NULL COMMENT '处ç†å™¨çš„傿•°', + "cron_expression" varchar(32) NOT NULL COMMENT 'CRON 表达å¼', + "retry_count" int(11) NOT NULL DEFAULT '0' COMMENT 'é‡è¯•次数', + "retry_interval" int(11) NOT NULL DEFAULT '0' COMMENT 'é‡è¯•é—´éš”', + "monitor_timeout" int(11) NOT NULL DEFAULT '0' COMMENT '监控超时时间', + "creator" varchar(64) DEFAULT '' COMMENT '创建者', + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + "updater" varchar(64) DEFAULT '' COMMENT '更新者', + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', + "deleted" bit NOT NULL DEFAULT FALSE COMMENT '是å¦åˆ é™¤', + PRIMARY KEY ("id") + ) COMMENT='定时任务表'; + +CREATE TABLE IF NOT EXISTS "infra_job_log" ( + "id" bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY COMMENT '日志编å·', + "job_id" bigint(20) NOT NULL COMMENT '任务编å·', + "handler_name" varchar(64) NOT NULL COMMENT '处ç†å™¨çš„åå­—', + "handler_param" varchar(255) DEFAULT NULL COMMENT '处ç†å™¨çš„傿•°', + "execute_index" tinyint(4) NOT NULL DEFAULT '1' COMMENT '第几次执行', + "begin_time" datetime NOT NULL COMMENT '开始执行时间', + "end_time" datetime DEFAULT NULL COMMENT 'ç»“æŸæ‰§è¡Œæ—¶é—´', + "duration" int(11) DEFAULT NULL COMMENT '执行时长', + "status" tinyint(4) NOT NULL COMMENT '任务状æ€', + "result" varchar(4000) DEFAULT '' COMMENT '结果数æ®', + "creator" varchar(64) DEFAULT '' COMMENT '创建者', + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + "updater" varchar(64) DEFAULT '' COMMENT '更新者', + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', + "deleted" bit(1) NOT NULL DEFAULT FALSE COMMENT '是å¦åˆ é™¤', + PRIMARY KEY ("id") + )COMMENT='定时任务日志表'; diff --git a/yudao-module-member/yudao-module-member-impl/pom.xml b/yudao-module-member/yudao-module-member-impl/pom.xml index d3b6bd7eed..9307d30d47 100644 --- a/yudao-module-member/yudao-module-member-impl/pom.xml +++ b/yudao-module-member/yudao-module-member-impl/pom.xml @@ -23,28 +23,30 @@ yudao-module-member-api ${revision} - cn.iocoder.boot yudao-module-system-api ${revision} + + cn.iocoder.boot + yudao-module-infra-api + ${revision} + - - cn.iocoder.boot - yudao-core-service - - cn.iocoder.boot yudao-spring-boot-starter-biz-operatelog - cn.iocoder.boot yudao-spring-boot-starter-biz-weixin + + cn.iocoder.boot + yudao-spring-boot-starter-biz-tenant + diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java index 625daf8786..ad12b40a69 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java @@ -2,8 +2,8 @@ package cn.iocoder.yudao.module.member.service.user; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.IdUtil; -import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.module.infra.api.file.FileApi; import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserUpdateMobileReqVO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; @@ -39,7 +39,7 @@ public class MemberUserServiceImpl implements MemberUserService { private MemberUserMapper memberUserMapper; @Resource - private InfFileCoreService fileCoreService; + private FileApi fileApi; @Resource private SmsCodeApi smsCodeApi; @@ -103,7 +103,7 @@ public class MemberUserServiceImpl implements MemberUserService { public String updateUserAvatar(Long userId, InputStream avatarFile) { this.checkUserExists(userId); // 创建文件 - String avatar = fileCoreService.createFile(IdUtil.fastUUID(), IoUtil.readBytes(avatarFile)); + String avatar = fileApi.createFile(IoUtil.readBytes(avatarFile)); // 更新头åƒè·¯å¾„ memberUserMapper.updateById(MemberUserDO.builder().id(userId).avatar(avatar).build()); return avatar; diff --git a/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImplTest.java b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImplTest.java index f470e95ae8..46d72091ce 100644 --- a/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImplTest.java +++ b/yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImplTest.java @@ -1,10 +1,10 @@ package cn.iocoder.yudao.module.member.service.user; import cn.hutool.core.util.RandomUtil; -import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; +import cn.iocoder.yudao.module.infra.api.file.FileApi; import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserUpdateMobileReqVO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; @@ -48,14 +48,13 @@ public class MemberUserServiceImplTest extends BaseDbAndRedisUnitTest { @MockBean private MemberAuthServiceImpl authService; - @MockBean - private InfFileCoreService fileCoreService; - @MockBean private PasswordEncoder passwordEncoder; @MockBean private SmsCodeApi smsCodeApi; + @MockBean + private FileApi fileApi; @Test public void testUpdateNickName_success(){ @@ -86,7 +85,7 @@ public class MemberUserServiceImplTest extends BaseDbAndRedisUnitTest { ByteArrayInputStream avatarFile = new ByteArrayInputStream(avatarFileBytes); // mock 方法 String avatar = randomString(); - when(fileCoreService.createFile(anyString(), eq(avatarFileBytes))).thenReturn(avatar); + when(fileApi.createFile(eq(avatarFileBytes))).thenReturn(avatar); // 调用 String str = memberUserService.updateUserAvatar(userId, avatarFile); // 断言 diff --git a/yudao-module-member/yudao-module-member-impl/src/test/resources/application-unit-test.yaml b/yudao-module-member/yudao-module-member-impl/src/test/resources/application-unit-test.yaml index 212a9312be..42e5e356dd 100644 --- a/yudao-module-member/yudao-module-member-impl/src/test/resources/application-unit-test.yaml +++ b/yudao-module-member/yudao-module-member-impl/src/test/resources/application-unit-test.yaml @@ -45,7 +45,6 @@ mybatis: yudao: info: base-package: cn.iocoder.yudao.module.member.dal.mysql - member-package: cn.iocoder.yudao.module.member # TODO èŠ‹è‰¿ï¼šè¦æ¸…ç†æŽ‰ - system-package: cn.iocoder.yudao.module.system # TODO èŠ‹è‰¿ï¼šè¦æ¸…ç†æŽ‰ + base-package2: cn.iocoder.yudao.module core-service: base-package: cn.iocoder.yudao.module.member.dal.mysql # TODO èŠ‹è‰¿ï¼šè¦æ¸…ç†æŽ‰ diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/DictTypeConstants.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/DictTypeConstants.java similarity index 99% rename from yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/DictTypeConstants.java rename to yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/DictTypeConstants.java index 7ae00aa2a1..9b73264e14 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/DictTypeConstants.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/DictTypeConstants.java @@ -15,7 +15,6 @@ public interface DictTypeConstants { String LOGIN_TYPE = "sys_login_type"; // 登录日志的类型 String LOGIN_RESULT = "sys_login_result"; // 登录结果 - String SMS_CHANNEL_CODE = "sys_sms_channel_code"; // 短信渠é“ç¼–ç  String SMS_TEMPLATE_TYPE = "sys_sms_template_type"; // 短信模æ¿ç±»åž‹ String SMS_SEND_STATUS = "sys_sms_send_status"; // 短信å‘é€çŠ¶æ€ diff --git a/yudao-module-system/yudao-module-system-impl/pom.xml b/yudao-module-system/yudao-module-system-impl/pom.xml index 40f9d8aaa5..ecf9d967f8 100644 --- a/yudao-module-system/yudao-module-system-impl/pom.xml +++ b/yudao-module-system/yudao-module-system-impl/pom.xml @@ -28,13 +28,13 @@ yudao-module-member-api ${revision} - - cn.iocoder.boot - yudao-core-service + yudao-module-infra-api + ${revision} + cn.iocoder.boot yudao-spring-boot-starter-biz-operatelog @@ -43,10 +43,22 @@ cn.iocoder.boot yudao-spring-boot-starter-biz-sms + + cn.iocoder.boot + yudao-spring-boot-starter-biz-dict + cn.iocoder.boot yudao-spring-boot-starter-biz-data-permission + + cn.iocoder.boot + yudao-spring-boot-starter-biz-tenant + + + cn.iocoder.boot + yudao-spring-boot-starter-biz-social + diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/common/CaptchaController.http b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/common/CaptchaController.http index 0b1cf854bf..2033fac315 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/common/CaptchaController.http +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/common/CaptchaController.http @@ -1,2 +1,3 @@ ### 请求 /captcha/get-image æŽ¥å£ => æˆåŠŸ GET {{baseUrl}}/system/captcha/get-image +tenant-id: {{adminTenentId}} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java index e150d598d7..8f308a0c76 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java @@ -4,11 +4,11 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import cn.iocoder.yudao.module.infra.api.file.FileApi; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; @@ -56,8 +56,9 @@ public class AdminUserServiceImpl implements AdminUserService { private PermissionService permissionService; @Resource private PasswordEncoder passwordEncoder; + @Resource - private InfFileCoreService fileService; + private FileApi fileApi; @Override public Long createUser(UserCreateReqVO reqVO) { @@ -111,7 +112,7 @@ public class AdminUserServiceImpl implements AdminUserService { public String updateUserAvatar(Long id, InputStream avatarFile) { this.checkUserExists(id); // 存储文件 - String avatar = fileService.createFile(IdUtil.fastUUID(), IoUtil.readBytes(avatarFile)); + String avatar = fileApi.createFile(IoUtil.readBytes(avatarFile)); // 更新路径 AdminUserDO sysUserDO = new AdminUserDO(); sysUserDO.setId(id); diff --git a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/user/UserServiceImplTest.java b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/user/UserServiceImplTest.java index ffff7e2bdd..0beb281c52 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/user/UserServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-impl/src/test/java/cn/iocoder/yudao/module/system/service/user/UserServiceImplTest.java @@ -1,13 +1,13 @@ package cn.iocoder.yudao.module.system.service.user; import cn.hutool.core.util.RandomUtil; -import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; +import cn.iocoder.yudao.module.infra.api.file.FileApi; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; @@ -63,7 +63,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { @MockBean private PasswordEncoder passwordEncoder; @MockBean - private InfFileCoreService fileService; + private FileApi fileApi; @Test public void testCreatUser_success() { @@ -182,7 +182,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { ByteArrayInputStream avatarFile = new ByteArrayInputStream(avatarFileBytes); // mock 方法 String avatar = randomString(); - when(fileService.createFile(anyString(), eq(avatarFileBytes))).thenReturn(avatar); + when(fileApi.createFile(eq(avatarFileBytes))).thenReturn(avatar); // 调用 userService.updateUserAvatar(userId, avatarFile); diff --git a/yudao-module-system/yudao-module-system-impl/src/test/resources/application-unit-test.yaml b/yudao-module-system/yudao-module-system-impl/src/test/resources/application-unit-test.yaml index 9164b07e60..6f83b473aa 100644 --- a/yudao-module-system/yudao-module-system-impl/src/test/resources/application-unit-test.yaml +++ b/yudao-module-system/yudao-module-system-impl/src/test/resources/application-unit-test.yaml @@ -45,8 +45,7 @@ mybatis: yudao: info: base-package: cn.iocoder.yudao.module.member.dal.mysql - member-package: cn.iocoder.yudao.module.member # TODO èŠ‹è‰¿ï¼šè¦æ¸…ç†æŽ‰ - system-package: cn.iocoder.yudao.module.system # TODO èŠ‹è‰¿ï¼šè¦æ¸…ç†æŽ‰ + base-package2: cn.iocoder.yudao.module core-service: base-package: cn.iocoder.yudao.module.member.dal.mysql # TODO èŠ‹è‰¿ï¼šè¦æ¸…ç†æŽ‰ captcha: diff --git a/更新日志.md b/更新日志.md index 13fc8320bf..cf15885154 100644 --- a/更新日志.md +++ b/更新日志.md @@ -27,6 +27,7 @@ *ã€ä¿®å¤ã€‘用户无æƒé™è®¿é—® 指定 API 时,未返回 FORBIDDEN ç»“æžœç  *ã€ä¿®å¤ã€‘定时任务刷新本地缓存时,无租户上线文,导致查询报错 +*ã€ä¿®å¤ã€‘é…置中心åªåŠ è½½äº†åˆ é™¤çš„é…ç½® ### 🔨 Dependency Upgrades From fffd023d31cffecade150c78aa1932ca245ae34a Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 31 Jan 2022 18:05:19 +0800 Subject: [PATCH 21/47] =?UTF-8?q?=E5=A4=9A=E6=A8=A1=E5=9D=97=E9=87=8D?= =?UTF-8?q?=E6=9E=84=205=EF=BC=9Ainfra=20=E6=A8=A1=E5=9D=97=E7=9A=84?= =?UTF-8?q?=E8=BF=81=E7=A7=BB=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../test/resources/application-unit-test.yaml | 53 ----- .../src/test/resources/application.yaml | 35 --- .../src/test/resources/file/erweima.jpg | Bin 18385 -> 0 bytes .../src/test/resources/logback-spring.xml | 4 - .../src/test/resources/sql/clean.sql | 11 - .../src/test/resources/sql/create_tables.sql | 199 ------------------ .../admin/job/vo/job/JobExportReqVO.java | 2 +- .../admin/job/vo/job/JobPageReqVO.java | 2 +- .../admin/job/vo/log/JobLogBaseVO.java | 2 +- .../admin/job/vo/log/JobLogExportReqVO.java | 4 +- .../admin/job/vo/log/JobLogPageReqVO.java | 2 +- .../apiaccesslog/ApiAccessLogExportReqVO.java | 2 +- .../apierrorlog/ApiErrorLogExportReqVO.java | 2 +- .../infra/dal/dataobject/config/ConfigDO.java | 3 +- .../dal/dataobject/logger/ApiErrorLogDO.java | 3 +- ...figCoreDAOImpl.java => ConfigDAOImpl.java} | 6 +- .../framework/file/config/FileProperties.java | 2 +- .../test/resources/application-unit-test.yaml | 4 - .../src/test/resources/sql/clean.sql | 3 + .../src/test/resources/sql/create_tables.sql | 78 ++++++- 20 files changed, 93 insertions(+), 324 deletions(-) delete mode 100644 yudao-core-service/src/test/resources/application-unit-test.yaml delete mode 100644 yudao-core-service/src/test/resources/application.yaml delete mode 100644 yudao-core-service/src/test/resources/file/erweima.jpg delete mode 100644 yudao-core-service/src/test/resources/logback-spring.xml delete mode 100644 yudao-core-service/src/test/resources/sql/clean.sql delete mode 100644 yudao-core-service/src/test/resources/sql/create_tables.sql rename yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/{ConfigCoreDAOImpl.java => ConfigDAOImpl.java} (86%) diff --git a/yudao-core-service/src/test/resources/application-unit-test.yaml b/yudao-core-service/src/test/resources/application-unit-test.yaml deleted file mode 100644 index d360045b9c..0000000000 --- a/yudao-core-service/src/test/resources/application-unit-test.yaml +++ /dev/null @@ -1,53 +0,0 @@ -spring: - main: - lazy-initialization: true # 开坿‡’加载,加快速度 - banner-mode: off # å•元测试,ç¦ç”¨ Banner - ---- #################### æ•°æ®åº“相关é…ç½® #################### - -spring: -# sql: -# init: -# schema-locations: classpath:sql/create_tables.sql -# username: sa -# password: -# enabled: true - # æ•°æ®æºé…置项 - datasource: - name: ruoyi-vue-pro - url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false; # MODE 使用 MySQL 模å¼ï¼›DATABASE_TO_UPPER é…置表和字段使用å°å†™ - driver-class-name: org.h2.Driver - username: sa - password: - schema: classpath:sql/create_tables.sql # MySQL 转 H2 的语å¥ï¼Œä½¿ç”¨ https://www.jooq.org/translate/ 工具 - druid: - async-init: true # å•元测试,异步åˆå§‹åŒ– Druid 连接池,æå‡å¯åŠ¨é€Ÿåº¦ - initial-size: 1 # å•元测试,é…置为 1,æå‡å¯åŠ¨é€Ÿåº¦ - - # Redis é…置。Redisson 默认的é…置足够使用,一般ä¸éœ€è¦è¿›è¡Œè°ƒä¼˜ - redis: - host: 127.0.0.1 # åœ°å€ - port: 16379 # 端å£ï¼ˆå•元测试,使用 16379 端å£ï¼‰ - database: 0 # æ•°æ®åº“索引 - integration: - jdbc: - initialize-schema: - -mybatis: - lazy-initialization: true # å•元测试,设置 MyBatis Mapper 延迟加载,加速æ¯ä¸ªå•元测试 - ---- #################### 定时任务相关é…ç½® #################### - ---- #################### é…置中心相关é…ç½® #################### - ---- #################### æœåŠ¡ä¿éšœç›¸å…³é…ç½® #################### - -# Lock4j é…置项(å•元测试,ç¦ç”¨ Lock4j) - -# Resilience4j é…置项 - ---- #################### 监控相关é…ç½® #################### - ---- #################### 芋é“相关é…ç½® #################### - -# 芋é“é…置项,设置当å‰é¡¹ç›®æ‰€æœ‰è‡ªå®šä¹‰çš„é…ç½® diff --git a/yudao-core-service/src/test/resources/application.yaml b/yudao-core-service/src/test/resources/application.yaml deleted file mode 100644 index 4db8b273cd..0000000000 --- a/yudao-core-service/src/test/resources/application.yaml +++ /dev/null @@ -1,35 +0,0 @@ -spring: - application: - name: yudao-core-service - - # Jackson é…置项 - jackson: - serialization: - write-dates-as-timestamps: true # 设置 Date 的格å¼ï¼Œä½¿ç”¨æ—¶é—´æˆ³ - write-date-timestamps-as-nanoseconds: false # 设置ä¸ä½¿ç”¨ nanoseconds 的格å¼ã€‚例如说 1611460870.401,而是直接 1611460870401 - write-durations-as-timestamps: true # 设置 Duration 的格å¼ï¼Œä½¿ç”¨æ—¶é—´æˆ³ - fail-on-empty-beans: false # å…许åºåˆ—化无属性的 Bean - -# MyBatis Plus çš„é…置项 -mybatis-plus: - configuration: - map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # æ‰“å°æ—¥å¿— - global-config: - db-config: - id-type: AUTO # 自增 ID - logic-delete-value: 1 # 逻辑已删除值(默认为 1) - logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) - mapper-locations: classpath*:mapper/*.xml - type-aliases-package: ${yudao.core-service.base-package}.modules.*.dal.dataobject - ---- #################### 芋é“相关é…ç½® #################### - -yudao: - info: - version: 1.0.0 - base-package: cn.iocoder.yudao.coreservice - core-service: - base-package: cn.iocoder.yudao.coreservice - -debug: false diff --git a/yudao-core-service/src/test/resources/file/erweima.jpg b/yudao-core-service/src/test/resources/file/erweima.jpg deleted file mode 100644 index 1447283cdf1b49b51c1204a160e01cb789e957a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18385 zcmb7s2Rzm9+yCL%A+xNq$sv0yBYV$7${yL72_=by>^(#Fv7$0Ev!kp?5wb^FWrg_P zpQHMH%lG#@|3|%E9nLwQao^YbdXMYm@crQ@7>SC4vH}bP0|vtYe_)5BFj*KJ6BGIi zzOcYwY&>jiEG%pSTwEMHLIOg<69gwt5D}A+5D}9SpEyBsiiDJ$f|8Pw@Z@Q#QxsHW z6qFRuK``LpJy_WI*x2|KL??(S{?A{B%`j3t3``76I0h*UlN19^igDNqI}3xsF@Ao* zj=u2laWQZRFtM=V;CVW5C*U2>{rvjEz{bSF!G+@;j=%`v;8_wl33v)+_Urjy|Kg$_ zEYOL&EWqgCnJzFG_?HFa?p@d+?8NuGcTew3GT`ns5n#fwFfbc17@A-w_F=eqSjKR; zC??8VnnQ-OJ&kBTmB9>~jf6qSOyt`gO6|87%2A|djZH9@yYjjWB&Ro!>ROqY1@<|Y zc|P4G(mthFSx+S#-!Mn8dyS3^ETUjdRAj&UIql~S&E5+R@66)&C29)F?Sy-m-fmrFjj`}75A z#U0`pyj^w}Jn#_4-||4(p0Hr(zTObg<@h{(A+|jGdrzzt^sksBg=A19CU2m;|q@V?(-Q-TUlUHCcE>k7!N!Q88=Kd@gvmHAV_*V?R zN)s3OQ!d<})?>Y&3!RfW5R+#OM#n&EN(jqjk3PEK0z7ZcUYu)B7S=2Vo-*QoNoCHn zw@GBdFntXheD%!tA`GJ$<5XH#(337KtVKju9-?hsD(4U;Fr8o=__^`&>jU+xHuPUx z)gHq2tu1#E?ICdG819;K7EXX(_bCpU`;0zj6^>9*kVL8@Z05s-n{0 z5%j%t)VuM_a-GwVRAceS^+OoF%pr_@=(cg-7kl#MVz(AuXj4h}TM+zD7v*5YWUw1@ zcugl%%y3{*?J(R2vfk|@2Y%eU_?uy-#btxv!)J9j8cAhuA=GGOPN}P*tT5q=3#n{* zS|l)0X{JLMwak(dp}5=#{o}@TlJ)l74~H__P1{z|61w{qU&{J% z?lfX7g*|Cfh8cW~y9<{3s{WQ)XGGX-5ek{~>uZz2sO?l>3nSq-^WKlL{%$~b=IpI+b3}vH?rA4U|84`l&A1d141Arr=m8v&nim7z^G_L#>Re*LqX;SlZY5E-z6<=Gjq!T(CYC3 z1z?bY*4?>XxivmIddt~qxxT9M5EgL=3knw(+^-$owB0!^5zRp&v3 zOMEV?+A*vsQ4cBh@!e8rzC_BHw%)w^RTLs^#lc*oKy8*iMJ$Z1y5Lz2j>(DE4c2(C z1sY;HZCRHO)CSxIDEFF@Axe##LN6W{_RQ@Y+*`khZ*3xu6YzjS>!Yv&@|8FBl$$ks zgo5-=I+Y?}bewNN$A);cz*AH4G+8(m0(6x}deZ z44=nrlCxEMavdMr+i2e>r%uztdFmgLCf*~yNE~k>P7S}infXyg0lA6GFx{7c{A3>0 zdQzUK#U?L9lTzVw-V(PZe#yx2S($hOV*!2F1vb%FO>aIK;j`Ll=Uys!$eJdPAJXii z?nRBMd`0gxL13K?+w1<CvsnKCQ)ZGB}`NLRl94D ztUvT$l%qFotTR|7%YHf-nc+8dHO2NjC|5E6a z6*#SyNur8-rPIKohUc4@C1U~YkOgYd9^N;PjBw^q<;BP$e2bi~jofm>l&1g)8U0|mE{Q4mqt~RertE&QOi!2o9(B~{F!a02`znU zM%Fhv-El$K6zpC`4-~CE;!Bdm``@Id1dtX&9(qL@UcYI$Ko-wcMMZ&+Z+3_5|!PQ8QI%Oh7#>n;oaizjrJ(G_ET9ua(s8Z2v-oc z{pewsq1IpP?n|vrTK9_7!eZ|E^>?|x>TX#LYFz2l4(+q)I~L(z)ZVOz`)7>z;=O;o zwUMIF+8E>oejL7iPS46{={XApISL{t%+GSzV#Zxh7) ztoBDKKfm5!gGKeZ2)Zf|%X(Fms&@90$8ub7l;#{++ zGl5-augrriUaXKX1!*5%H`?YDUuK;TX*mwwZq(HUb@*GVsNf0(7A@N}(bjj~Q8X#2 zmueeSKIAZ^q*g23Y+S}Vj{E^JZtAW}Rf&wLK@VSMSW1_Ylf$c%M6C(4@g~93TVUnuX#LAFYJR~59Ig~d7oXzcM6{x~h^X#KbW;?Gz#rnRFGqAO3g^ie6_UIzJ zDV!}p^*V9@RHO~eDK2@ z`>Qy08dCeZzgc<+?7tr)Y!nue<#`hpq&3WTx@z@m`)rK0%zZ_Eo6My4H?(fgITx!R z-=a8zMiqcYb4D_ApPJ>h@R}bMQr^b`~M6~TKSj}8@@ zs_BUqyR*rMJWMNv&YJI^KR$ui6+jSS)hojno+3PJfAuXA2eJPu+QMRu9sm&WfRh4^$3@mkm*J=oraIo z=Kt2&;nF39X`ht9ex4}CWisN(XYJ0<8;bAFUmu&lXnY-_j$&KNtk^Vs&>*vJ+?`Rq zFE~4}%(vD5!Z=Uz!#>`S+_k)saib8>eldNc%pb9f#dy(K@rJyUa}`^xde@xHa|)p; z=uRa75eZ>k=-NyEq7H_>+x%g4K}ua>pu25|HAVBfbh;W6%T?=Y$k}HL#NKe`mV3AC z5FmMsZ9ZE(DF~bS5dYnct;zwZy!Br&82TbhAoiNUY-h??36gyj;z{T3M$d3@k3(4Y zv5u;yko#6h>D|{EaFJf*Uu-FxEzE90_Zx>MgxMidzHPqXA*IWOG~iB45j>c_VViUE zvG9T=-o4}*tS{|Sovp2PXX6yuplTWD;KQ@~To(f|I zoR^kL>G8sbgR87N>P?$GO0&XPPde>Zr5eA^=yr2=0yk3)CI;$=1_yDq6T@MIcgZ_cvl=!*%6# z>7qWOEmQ7u4ZC3zRIgmZ=ae>xP74)zJ{MXtRil#PyQYd@?nXmU+i7I5EN=r8`oxCm zep@nEK_s_TB*2w?l>>i6QewHmoEmtqnDKS}JYP-E$N@C)pcfngkCJq@+wK$_UqKb+ zDTBA-vv~Q^h!{# zjb)X~Z@;tg`o(n?)%{R&HEX4%fQrh{;BA|BGD_iLQZwl89Z^lJD=`3av^M3bM=F@mdIJbt*}Jv?UJBIl_rUjQhAM22Gr zyKHppGf)baiCda)%1!EeFPY&J;ldRu%w|L$B4+Bs*2VZ^JD3@6Yk*5v>XMw)C?FjA zEp3T#d=*kZFh5eL)cC@ z`W$8Sps7z#mZgb|jgMOX++-)<$8CstucDcEhcv{aM+aF~P54pI1Z$6VNY0R%?3|zm zorS}NP9k-r*^}E`6h-^$AKqTa^1SaTJOVn2@g^bDw%qk8uE9E?w#X@Jj&|+$W;hhy zJ5EO z)FssO1~au>nB$aq0$!$@R?Mj=GCW*ta~Q2Pg7ac>mdMXw>!tiVz_dd!e;m z*mg7?5d3ZhjZs?C_~=W6@NSl_;IE)vky8y`^#Qse9dr=>8PGvKnASVfCftbGqS${$ zYMzbmAj5eGCXr+&E;XZfB};(z4`KZezMZnFVm4OxD;OQ+Ue#PLi}n0L<6&oc5r@=9 zbcv0R${(1hL;}0b<7hN$9JTM7?cG`0cvQwuD9}33uL%zeA{Fn9V81B5`)^QDn`KQA zi})`tkcG+sl25oeVT|!nGe8=2hO6erI6y*^7`k&f%V@cx_t%S^NJW6^pN-L&K`KS+`uiaTN|OhWd-%y!Gx_jp6_Jc(OG;( z`a#NfSp?~b?)SGujdK+xzWT3huf*F+NRFt39PGl&POFX4MH*lcnXh(73$@9A(yTlZ z=C6){VHmQfm7L)uuX?b8!eq)-n%r31;(eEbllGFjQ#Ex|ITNL3RJna#9HYL=9KHnK zBz`Qu%v20sV6k&#P@s64T|54EWAOuaAT7CGhqs^4U8!($(g*XW=kqNOXy)YQ9&tH6 z$`R0EpbKtvV)Sp$p{4hwl=f`8SjS_1^1XyZZTO_6Xq{*SQ3`P+?Q~Rl!h@t#!nn)l zu+}j>L+cwI>e|!hKUPYYZ{WQlw#Spz96Bd4p11t4Ygr~gYoO=>Gh|(9LzKE2D*s_h z!qI;9Nj~VAj=)i&du9L+79C`gJos@jJ_C~!R`l6itw5FH0~9z^Ip~4FLBY#x4mlki zCCLsXT#hyU9V8^SA;AoZ?emKn`m(Btu_q?B)TiBEi2yW6{X|19Xb((4N&jjOjj4v* zq;-|i=8xx|yJ}ynR|em`I_nREh-7{&Stf3o27^WpamZSZvicH{C3m;3HwBn1*)+QWUg;QnFR(^aWhTodzth2yBp6z6AGVw zwm}Xw6L`atAL5vkMdQa2Ik0Y#%HPN>E4*x9DB0%o?IJ!J6Li`E5GG=dB{lcOvjpN2 zfc66^!oUo*7Y{iISEe&tXSmbcld{}udQzmVYghYRTdj)9BDOurAD2C=DMGwC&FZ zJ!V2(O8pSFk8x6D3?p2zKZj%0ysV^hcyQ47L?~l66trQamw5|94wo_Y;$dicnvtY=Z7!!XT**3G)920ZUw%&)#9;0thF<^ z&SeLG$)mLF$Y$=OVB1>FW6Hg3IcIDpMmDJ~#%+92_)96sek011m%gzMzA)sPIw$Cw zW}e#ANv4jp1j-fi>eOo&kfc_r1vO!;RSrhpILA7HOpupZGV+saR5Lrs4cPN040yJg zD{9;ixz%3D?!thh0)k}^{&i8D>Bi=ex zjx0F|ufBNkVnpcKlKq#>8>tjhzBr~~KyyZ3GBogqG$(}!5zw3y*&D0JbA~eD{CmWM z0{mM-J0n0_bi06Lw1CzM^a!w4M@{mjSG0|a))}}=OK4vND>GuYCdzG{>6KL`4o;XN zg*KhAk6rg{+vy4I)M;uSi?Y|r3pCvPFFuy2`y2%`tY7p2v|8kQ42(Ps%XC!(ok5qe z1^W7VVVUl(SGr$REkav9yR}rc4S5Y!2j}!Bv{yAsU-lZ< z6)*2rr`qI7LESJZ4(f(aITs6WQQooYmF{x)0z--sur?Y3KB<909r#%6Gr`i|rEpo~=7ti-wA#DA9*+b1G@ ztutaR+qh35R30Wxra~41O|gyzI*V3eN?CmE8aR&M7=$=g!p|b2dUOPhpb*XELcp;A zOdZO!ggeD>Nx}ZX34<7X!2Vqn+^r*V1ridYuagcJNXQEQvc@7+hK*ASXO!iL1*q;h zU@C!7ZAxFO9kWfc1skK5{zZ2=-H^`7P?RxOtO>B^_WoB;nw3;hxTj~tuR2wZp4r{q zWE&)ueJ;4#x0-#+;&C2fPIvt732oLY@WP`wxp{iR&}L?o@`fBpamxT}*Mg@ijDecz zVG2;BZl|sz^k*5;7y2U}>>xMt0P!I80`Ehy4sE{R)|0>>RO@OM{T=PCP%H)Z=on@v zO##oP8U^w=O;G<4P#y>BALMc0MOOOrH8M7iVc?eqB5c_5()7=?g#?M31%IeE5F`|D zmuCA1V}PFfeySVjx#M2{eKG5_n6h<{QP6e7c^%(lVmtL8*=V~SBDlh^RVyit9c$P> ziX}c*Mr(L$q`oHXK)i0o_B=YTIGz>ecK>+g2=%#Wu9~H9G}talNoQI?8?>fUBm!-a z1}E4m2~)0}`CKlY82Eu?G%C1UN2ngV6UvxverC+p$Mf{uuC(RU<9?};5FPdl%t65x z%dePjJgI;WnD~d}r>TL7&-GO%;?_`I_4@#{Hq)59AAZ$^bY-c0PIm4x&9A0;gi=XQ zS%JSm$Iu0poAw58MXLIbTywh~mG0N~@*yDpt6r#RND4}1XWef2g#0Noeo5|}`ukGn z^D}J${30F-EGEtR#(r~5d{O|efe2772omb~KuX;S;<~x#&ftpBI>XrsN~vQUfx`jw zig+AOx_{((pKP|PntukkuUr6^ZxErmTxc;J;&NtRpm4g;dcS13QDOOfC{IJSNc-*X zmtKzoE6ULQ@7#4-X2eVY!P?8$MNOaj1Np%qp;x`eqBOCaVicrX)aZ0erc)GhZB$mk z@B-Jim_KwWQI*9)9zTNLMZhK*qwtEJ9g&~g)zPHhnXCK?_r|#2(mQ^@1vI{h{A6a^ z>UxE!H9s${+yG?cj$QlJwIn+`f*>JM~z1rnx$ zQ1_ZJFi)|18l2e=<|)o_24yf$LCX~jA?{Ngl~sutsh-c9GL8~%fyr#m#oYyqdhbVp zO=L90I1%Swb~>LzcB3aN!Qilr(d1WUGlxrEpiZX@G#YBxU;Nx3epo62T!^2M<`kD zIgQt~9m39xy9u%#6Az0X`4ZRO>*h|2315q_#BmxK;+8o+{_>`ra!+QDkjdP!wo)XI zj&ob|%$Kk|W;hi5AA=AlnlHGE0}63;HFNAAbLoXU%b@R>daI3g!Z3B3>R1{=dH>So zLarxhCxp`6-$9RM{+T<2P`!Y+;2$bg1U;v#0;*m_q@a74&#`g6w8k%RwA6W$P4&H= z+j}1zG(Ml2r2bqT^r*;}+KsW){Yy!UgXG8~t7?U>Bl1DO2DHhiY;xB$g14Ja3V%-B zQU14Rq2KDm)?lo~!`0%R^{_uu@|>WkVK$Mf)!)b+=PQ@nItM0VvbGLsd!t?>J(W4B zfHNn44wt}8A>>uuBWR}JVNS;nW(p{#G%$&Q>I@Vl7(5*fHYD+HXj2!7ZV<*kph{We zhJ-FRV$rKyy~Y&GMWEz;=l^$>Wc;7OE&4P^rgvbO-?Kk4+JuS?=`}-hG6)EE03VhY z1z|&JJ~+xPVd`F|p;D&^Q_T(i+q9!o`V#ci6%1C@+#{x-!D6O2O8P;~S{F|~aK$k7?tj~-yGhM`tvrA zMzH@F^@AY?n2a--O-4-tLUYMWL(c^z#RU&CN`pATljt1Bb_z@qK#mhSEe8_C$p8{Z zoujDQ=P^gm9RD#XCwPn}0fD4HI})>hPp4)SS)1EL^ub16e^*WZrS5bHa9Qhpf^?$5 zWmWK({*0i{a(Gne=oz&`Y43#q(5-pZQ0Q(Ark*kU5l1j3xN*sb<3j&ybC3+>cJd#y z-IPF1vf*m=2aBGBh8z`T)kP?BF=6XFM))ONLpr|bl{tj1_<;|QNRq%XFtIUk;J9!s z7#8%wK1?_{3 zxfJ;DNVH%I_Nbdbwr08>-cEA6f5i_$TUwsC3cnve5R=W1O z7DM4Tls`SWs5$GXTRm1}v^GO}Q;(4XFNdAst@Az2GPjE${;B;^FXF4{j|M6gaJAObxyr^<2Gs=yH#l0p;^=?mp zrjsUk)!;_|TwL__dXW~xv zQfpor6aOP2dsDV#LM<&*{1v@BLC}vDld}2AxYR>6eMVfj{V&TG^qsySH z4l_e)%}fum>Q%L)lvyryW)^-+bJ*hq=uT^u%_&;b2~!Hf{4>(o0;nNH1P~Q74%8B`iqt#nsee1vbuJB%;yb z_Oi`QpZv3i29ufA{BICSH{I@S+yCGTiR%_p<{6ndF;+5OFyP`^{(iS>bye!DjR6e~ zXRi+G!Oe5aHqLLS|I6zp(fctQ*Ff)g)>^YLW;z2ETUXNq z!Cf*dXBtlkGWi3h`PO$sVI@0 zwiEYXi$@)kSVa0oR!=_g{n6<*Lt3I6$L8dtydGOw7nChUq~OW5>t@gZ_GR+I<#=wsZEAq zM%hj5<7?I?iyIryitDC*H!p45X{5F+a*u`(Wc5UoXnZo4#FkKm)~-F;r1m-+!2@xn zqo1C&QzkF_eHImuae8IXk4i{lk6?6daEyR^=0%_$*_gE01T{+p}GF9B*-aFaMH1*HMv?N~1w6DXBPY;OD*5$De#H zo<*WY=GOB&N#DdT@BRG~r6Eu)UnTF=?)A2t939ey$Fu5%HO+x8*APpi0|k#~$q>CC z%|Flg$8$85#KMw_ebCvuyR1|6qE=S0SKe)_WxrmuT%DFa`q3=*%FwPQIY)whjOp`+ z)3y3basRmBpV!~`or(gWIC#RB`FXmiISbwOhAf5|B{^0zSRzIc8NgPb(sxQS0P5LR zOU#7$#EOq!SWef#eGZYrH-@5e~QBwe3XW z(&~Zj57y8Z1lw;A?q~0lG`y8xxYm@5@=l~(&GCGi|CW#?Abfa`g)Rgyuoy=6Ns@X~ zued&8-dwAG1kV?F)P8lC(_i=8RuK%vqI1%Mpsk_L3!wc!9p>o1hSB%cCv2J*&gPFx zn`sPM6ow=YslTe;H_`Cz0SUvm(4{)xQUZO199uS>1&`f@Hv@C+kJ|KQ9d%^{r)5Gn zw|q1v{>MtESH`6+lhK{m3uHBeXOID)Eo@B4+e~@$S7sgnT`PF z8Ggmz^JAtl1Q|&-SAV45xATCVmThEFea!`;W0?5#Opih52Q3%fUwzN(zMidpueWS- z>F=)j7xq9|{o4wCQP^9$ztaCV7H^Fks!}DZJyk*dC|Ro?snW~dx+tN!muS>`2vZfJ z_6E@eC^WoKMr!Grl)&ZfAtU zITGx2WNYJ2*BUH_)fqfOfwN4md>C6vZZAoXjq2!Eb-xh|p|?=)Cwhm!0w^Q*E@$0( ze!XDmiR=3NT>{YKY4i&pg#5sL-S9AVr_^)SX-|Re2)MT);DS~Fz=>`JU%O1{xzJ=o z1@)Z)NqITYcf?$&M}&^WyPr_{hcPpokf@my)&UN7b{R|P&jV|(NCi)vPg+Up4W4DlRAiIn@2 ztP%>b(x9DjgTlL;0Y6E^1{DgZP$VWO6u?D@UBHmt?oSF#ma+bRt7806$9sinpcbG5 z7LfML*+{YyveaHT$OPSyg}j=&JGdP!g=*1KNXTb{&WRW5^Oy8t_%8JHM}+&Ypm2vk z@gV5G$(C^l9(B{kpy%7}I#W?1-+!P~8Dd^9)IpNJ;LN%Gfby27f1K3Ek;^>;hcLLP zihtl@MEU_)dHTw}u44x|j$N!Q%CmkXoQ_!$uOK(Y{@kWYQO`8T75$XTdrGq$s{1|t z87cwJ7D6`hC&sb?r~#wp+DGpU79v8%C2qVb1B+Z}yRU zH=mgy4J@sYoO+S%xypJP3#HLt>Fk6SM8|vxz(V19VC>ileXgAKS%MhJgG#~oyr-}{ z;#t8y4H9{IrD746L2=p3+tKp&XKv@IveEh~#*IX$*85uXO2OzhlwQBemHWF^M|xI0 zdW0OmgoQ+P3p!pco{H-5f4NiE;b zZ$OJYS&5YcKVPCZY=zyf_x?O*m;QZrbBwq$u^#sW)^o+meIC4j4w6-*guf#?9p{GZvQ=yMF28O5M%(C z4IzGV=RdA{Y$?8szI<`S@8gTPo4bYu1JBhiXf8-v&lpX#xmOBLRMi&^XHMJQlj)3^ zB6|W;y$kB>?{e>0Nlps0y#4LXignrO^Xv*wNtiD&YJagofWTv*ihaFPw|;)NJFrCJ%UH$ZG6vQUaOJ5m*0cJ^0lEk7~JG5Th`P? zKY%no{qxD$#@Mf1VvV5>+_pZ3-8XP*QwP)%JnycR-wKhDX&yui6R*CXqMK-wt+{nw z;Sz8GdBAVTxz`lvPU%+F=NOcZhTH>E4~x8-O4DDKpma2j67m;7A_i6yLW=quphEzG z#X6ux|3!4$((1ld5HAoN$vaX+c{)@4XkB;&h)3pVKvd31#w=Gyq39M#(e$QUbVJy_jF32h^zgECx7T?77EvL$0 zOo6)CM}<|2P@T9Oed->>9UEINl$8RCQXn zLH8zK29N_{*F7mE4Eq3u0-XTr1?ehwxupdYRXFDcG!L*v|Dzt9EHZ;|KnW2Ir(R3z zLBO1e{F{9P3Cq9e0TNyo7Im9CMO#(9o;{-|SKtr?QDsL?qEI0=ATly~b7*4x&V`D^ zCaKUIf=A`_2LYild{P#>d|_oFtk#wU-EtN8xScMS>bqQevDA5SEy;ou_1iP}gt?5| z4)H7L7HXLSOk+w3BtGU&A6}oSqK;I<@*9IJhow_!MAgj5+yIoh2 zAhZu;B=XL?b0*7IQIgF<`#|r3Z#hN);`ktkhTOY43CX%2ks5CgW`_kD2i_>eqs*uL zWWMn*%^h&2*Id0b4jC;8dKu#%^V1`Z&7r3IvWR%vLl}PiIi>jnky%=Wm@FZkL)cX{ z92ye@sjlnAX%gBIzgHw()K@tAbj$X^a zv+0OwYooG?PF(IEj0!ou0n|?yI5`^^oe8=HqTr@m#5>O)d^z)0R(yXWsdh+oOZS`Q zPX#bO^tsRV*-J=H;$McbHd%HpO-q9CCG{qx?r@PmaaL4bfr!by`e_J(V)ro66KnpD zChfanA{Yw1x-OJB0NEq9&U5m~pDJ~z2rT#p)JYi@1b{*XoVz(dESCT{ml-qV{=N?q z1w_=VyaGcjGHzV*vO<)1nnG>Ync~Hcz{I1=ITF}ZO~CYjLF?;2 zAbkImzDfOU^dbdwA{*B_0ATcfYdq=^DTkJBOWOHlcR$KIW6L%FqB|!uK=*kczC8pe z^KTcnwzmWHLK7C?&^cT$M(KVu(AuIu-U^WJXGD9~zs`|JXxK+n>i=01W}iVG zr6@<>wy{meMso6qPWXalkxYfsBWxs)NIFQ>+x9sza$KPV8Dj1APcNz+*Q)f9@dLL; z{+F1cABq{a%GR=xL%i!!rQfesmDQWcjCv^S@GNyl4tqusw&{caR5|5LkTjh^z zX+R%Ht(Dm`;4>VSUznlvA{TsnEWHS4$EBxd{#?{px9@GucSuuBjIMY2M^rLXeQaKYy$kR|hq3IuZRO7x-jYE?3+5MwjMUAz| z+UsAFkxr-xha_((Mcfo3xUJ&3){Dxuo*Vmu0C~%hS5q#?26B(esp!l*V^B_iCCP$B ziHq5is0Zw4!LS+xuZ2vffCIpak${NF z2qZd@oJEmOA_a>c49K*9?gPDt5%jP5*6eMy*NR{7$Zu`)N3C4hTaN(I6BHf?gXk%) zIxO4t!<{^VMbJG!iVkE0=^r7t>>^0g7ZA6XqCmO?ZnW%6qwdL^+UqQc2jX%v68<2& zTBcem9SsFdCMvpT&YT-AA-8}iH1uxYTf|=J-x$A88pAhaTt$fm90iD>nvHNgL;C)c zK>q-ri_8VaOBgadP#1>k8OWiddS2ZZEa4I0*`-hRzP8Puwj2iq6+h+CAS&xf9(BA| zOdi^?6Z=3-=<87>ayd-xh^)S^d>Fl<0m&~2et>}fa)L%*(vF-UDZtyWoSEqJ^Xr8Q z@d4q#RU}Bd69kK)*A@fUND30my>SEOzy15K(E~b1-7(YYo0%RcLi<|Qd)*)frL!4A zLOpvEY}>wI3KrdU{~I7K!`h)zJeCdoF_!56L&;M+Q=JE)k8p!lp0#AlI2aLRd940xO8)2c;q%_wa_-fq4KiT0YSH z;4?Y@h~dHwAgk0kn+&Xy{$5Pwk7?zX9UYzMNy;Ch2pW+5E(Y|2Xb@+iprjwas~tlU zo8E85?$4g4)vQ`MrSLnT0;4d;UUd*IgE5xMK=zs)5*lN%(D|Q4fm}@QD9Sb?|D^q^ zT>1W1=HzAnOaumOPdjyCLE{kSDVwtf22gBWH=2GQ1Xbc?Cs98o2Qc8kx%|)b9Q#d> z2wwviTJy`-K-u)o-`Vu{3^3C~kisy)e}~7$!i4|)Pxa7mI>Evw#bG2P=abeZpBmvzi;Fz^^9|;={p08WvC3Y?8h*Mmb)Au)n#!f~?Z7 zm^h8Nwu#)$eeMx4t02Rv=Km$2x?*~9XIs%GUoWBOQuaOZk;mUfItJ>m6ii5*owGdg zUWZ1T9tJ1)p#K@!zXnertNBD2*YO}?A*|@jJy^$%qAs$3n53oR(HiID*A<@%g>Lsn zNQ<4-tFkqrW%lFY{3ux-7U-9&cH%OVl<_;4Q~5R<#EvS*7~D|DNuH%==|zgTdiZ2veKD@y07V|$L+%OoSyy2p^|K;kOJ?HXLNf&l|! zXF9be{VTevm)=RB+Fi#^MzooQH-G1%=X~%b(95*qLnG|Pov}k0SWs55pjgnKU+W2e z{|#7BQZONw<|kp2xl3`$9KDv{*U3o1_B`L^i{NL8Rj+(SNq;wC+0n6^h`M1pMLiUxm6zVxu^+(Dx0;X-q zTq>8_S*A7W8(3U)c~eXqzGG$a`R-OiC#P=WSEfxkG&=-_PhOeqmGvKK*CVHjxOBZ@ pEwzL`>i*8R__Kv1*C}gmHZq>QI%40h(qzO - - - diff --git a/yudao-core-service/src/test/resources/sql/clean.sql b/yudao-core-service/src/test/resources/sql/clean.sql deleted file mode 100644 index b11f374ef9..0000000000 --- a/yudao-core-service/src/test/resources/sql/clean.sql +++ /dev/null @@ -1,11 +0,0 @@ --- inf 开头的 DB -DELETE FROM "inf_api_access_log"; -DELETE FROM "inf_file"; -DELETE FROM "inf_api_error_log"; - --- sys 开头的 DB -DELETE FROM "sys_user_session"; -DELETE FROM "sys_dict_data"; -DELETE FROM "sys_sms_template"; -DELETE FROM "sys_sms_log"; -DELETE FROM "sys_social_user"; diff --git a/yudao-core-service/src/test/resources/sql/create_tables.sql b/yudao-core-service/src/test/resources/sql/create_tables.sql deleted file mode 100644 index 633c0d9368..0000000000 --- a/yudao-core-service/src/test/resources/sql/create_tables.sql +++ /dev/null @@ -1,199 +0,0 @@ --- inf 开头的 DB - -CREATE TABLE IF NOT EXISTS "inf_file" ( - "id" varchar(188) NOT NULL, - "type" varchar(63) DEFAULT NULL, - "content" blob NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint not null default '0', - PRIMARY KEY ("id") -) COMMENT '文件表'; - --- sys 开头的 DB - -CREATE TABLE IF NOT EXISTS `sys_user_session` ( - `id` varchar(32) NOT NULL, - `user_id` bigint DEFAULT NULL, - "user_type" tinyint NOT NULL, - `username` varchar(50) NOT NULL DEFAULT '', - `user_ip` varchar(50) DEFAULT NULL, - `user_agent` varchar(512) DEFAULT NULL, - `session_timeout` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updater` varchar(64) DEFAULT '' , - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint not null default '0', - PRIMARY KEY (`id`) -) COMMENT '用户在线 Session'; - -CREATE TABLE IF NOT EXISTS "sys_dict_data" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "sort" int NOT NULL DEFAULT '0', - "label" varchar(100) NOT NULL DEFAULT '', - "value" varchar(100) NOT NULL DEFAULT '', - "dict_type" varchar(100) NOT NULL DEFAULT '', - "status" tinyint NOT NULL DEFAULT '0', - "remark" varchar(500) DEFAULT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '字典数æ®è¡¨'; - -CREATE TABLE IF NOT EXISTS "inf_api_access_log" ( - "id" bigint not null GENERATED BY DEFAULT AS IDENTITY, - "trace_id" varchar(64) not null default '', - "user_id" bigint not null default '0', - "user_type" tinyint not null default '0', - "application_name" varchar(50) not null, - "request_method" varchar(16) not null default '', - "request_url" varchar(255) not null default '', - "request_params" varchar(8000) not null default '', - "user_ip" varchar(50) not null, - "user_agent" varchar(512) not null, - "begin_time" timestamp not null, - "end_time" timestamp not null, - "duration" integer not null, - "result_code" integer not null default '0', - "result_msg" varchar(512) default '', - "creator" varchar(64) default '', - "create_time" timestamp not null default current_timestamp, - "updater" varchar(64) default '', - "update_time" timestamp not null default current_timestamp, - "deleted" bit not null default false, - "tenant_id" bigint not null default '0', - primary key ("id") -) COMMENT 'API 访问日志表'; - -CREATE TABLE IF NOT EXISTS "inf_api_error_log" ( - "id" integer not null GENERATED BY DEFAULT AS IDENTITY, - "trace_id" varchar(64) not null, - "user_id" bigint not null default '0', - "user_type" tinyint not null default '0', - "application_name" varchar(50) not null, - "request_method" varchar(16) not null, - "request_url" varchar(255) not null, - "request_params" varchar(8000) not null, - "user_ip" varchar(50) not null, - "user_agent" varchar(512) not null, - "exception_time" timestamp not null, - "exception_name" varchar(128) not null default '', - "exception_message" clob not null, - "exception_root_cause_message" clob not null, - "exception_stack_trace" clob not null, - "exception_class_name" varchar(512) not null, - "exception_file_name" varchar(512) not null, - "exception_method_name" varchar(512) not null, - "exception_line_number" integer not null, - "process_status" tinyint not null, - "process_time" timestamp default null, - "process_user_id" bigint default '0', - "creator" varchar(64) default '', - "create_time" timestamp not null default current_timestamp, - "updater" varchar(64) default '', - "update_time" timestamp not null default current_timestamp, - "deleted" bit not null default false, - "tenant_id" bigint not null default '0', - primary key ("id") -) COMMENT '系统异常日志'; - -CREATE TABLE IF NOT EXISTS "sys_sms_template" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "type" tinyint NOT NULL, - "status" tinyint NOT NULL, - "code" varchar(63) NOT NULL, - "name" varchar(63) NOT NULL, - "content" varchar(255) NOT NULL, - "params" varchar(255) NOT NULL, - "remark" varchar(255) DEFAULT NULL, - "api_template_id" varchar(63) NOT NULL, - "channel_id" bigint NOT NULL, - "channel_code" varchar(63) NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '短信模æ¿'; - -CREATE TABLE IF NOT EXISTS "sys_sms_log" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "channel_id" bigint NOT NULL, - "channel_code" varchar(63) NOT NULL, - "template_id" bigint NOT NULL, - "template_code" varchar(63) NOT NULL, - "template_type" tinyint NOT NULL, - "template_content" varchar(255) NOT NULL, - "template_params" varchar(255) NOT NULL, - "api_template_id" varchar(63) NOT NULL, - "mobile" varchar(11) NOT NULL, - "user_id" bigint DEFAULT '0', - "user_type" tinyint DEFAULT '0', - "send_status" tinyint NOT NULL DEFAULT '0', - "send_time" timestamp DEFAULT NULL, - "send_code" int DEFAULT NULL, - "send_msg" varchar(255) DEFAULT NULL, - "api_send_code" varchar(63) DEFAULT NULL, - "api_send_msg" varchar(255) DEFAULT NULL, - "api_request_id" varchar(255) DEFAULT NULL, - "api_serial_no" varchar(255) DEFAULT NULL, - "receive_status" tinyint NOT NULL DEFAULT '0', - "receive_time" timestamp DEFAULT NULL, - "api_receive_code" varchar(63) DEFAULT NULL, - "api_receive_msg" varchar(255) DEFAULT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint not null default '0', - PRIMARY KEY ("id") -) COMMENT '短信日志'; - -CREATE TABLE IF NOT EXISTS `sys_login_log` ( - `id` bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY, - `log_type` bigint(4) NOT NULL, - "user_id" bigint not null default '0', - "user_type" tinyint NOT NULL, - `trace_id` varchar(64) NOT NULL DEFAULT '', - `username` varchar(50) NOT NULL DEFAULT '', - `result` tinyint(4) NOT NULL, - `user_ip` varchar(50) NOT NULL, - `user_agent` varchar(512) NOT NULL, - `creator` varchar(64) DEFAULT '', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updater` varchar(64) DEFAULT '', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `deleted` bit(1) NOT NULL DEFAULT '0', - "tenant_id" bigint not null default '0', - PRIMARY KEY (`id`) -) COMMENT ='系统访问记录'; - -CREATE TABLE IF NOT EXISTS "sys_social_user" ( - "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "user_id" bigint NOT NULL, - "user_type" tinyint NOT NULL DEFAULT '0', - "type" tinyint NOT NULL, - "openid" varchar(32) NOT NULL, - "token" varchar(256) DEFAULT NULL, - "union_id" varchar(32) NOT NULL, - "raw_token_info" varchar(1024) NOT NULL, - "nickname" varchar(32) NOT NULL, - "avatar" varchar(255) DEFAULT NULL, - "raw_user_info" varchar(1024) NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '社交用户'; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobExportReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobExportReqVO.java index 1155311d13..ec393a6045 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobExportReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobExportReqVO.java @@ -4,7 +4,7 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -@ApiModel(value = "管ç†åŽå° - 定时任务 Excel 导出 Request VO", description = "傿•°å’Œ InfJobPageReqVO 是一致的") +@ApiModel(value = "管ç†åŽå° - 定时任务 Excel 导出 Request VO", description = "傿•°å’Œ JobPageReqVO 是一致的") @Data public class JobExportReqVO { diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobPageReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobPageReqVO.java index 0d8dd53e3e..02d3a7e2bb 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobPageReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobPageReqVO.java @@ -16,7 +16,7 @@ public class JobPageReqVO extends PageParam { @ApiModelProperty(value = "任务åç§°", example = "测试任务", notes = "模糊匹é…") private String name; - @ApiModelProperty(value = "任务状æ€", example = "1", notes = "å‚è§ InfJobStatusEnum 枚举") + @ApiModelProperty(value = "任务状æ€", example = "1", notes = "å‚è§ JobStatusEnum 枚举") private Integer status; @ApiModelProperty(value = "处ç†å™¨çš„åå­—", example = "sysUserSessionTimeoutJob", notes = "模糊匹é…") diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogBaseVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogBaseVO.java index 496969d73e..761921349f 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogBaseVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogBaseVO.java @@ -43,7 +43,7 @@ public class JobLogBaseVO { @ApiModelProperty(value = "执行时长", example = "123") private Integer duration; - @ApiModelProperty(value = "任务状æ€", required = true, example = "1", notes = "å‚è§ InfJobLogStatusEnum 枚举") + @ApiModelProperty(value = "任务状æ€", required = true, example = "1", notes = "å‚è§ JobLogStatusEnum 枚举") @NotNull(message = "任务状æ€ä¸èƒ½ä¸ºç©º") private Integer status; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogExportReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogExportReqVO.java index 32aa9619bc..df482c9d22 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogExportReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogExportReqVO.java @@ -9,7 +9,7 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel(value = "管ç†åŽå° - 定时任务 Excel 导出 Request VO", description = "傿•°å’Œ InfJobLogPageReqVO 是一致的") +@ApiModel(value = "管ç†åŽå° - 定时任务 Excel 导出 Request VO", description = "傿•°å’Œ JobLogPageReqVO 是一致的") @Data public class JobLogExportReqVO { @@ -27,7 +27,7 @@ public class JobLogExportReqVO { @ApiModelProperty(value = "ç»“æŸæ‰§è¡Œæ—¶é—´") private Date endTime; - @ApiModelProperty(value = "任务状æ€", notes = "å‚è§ InfJobLogStatusEnum 枚举") + @ApiModelProperty(value = "任务状æ€", notes = "å‚è§ JobLogStatusEnum 枚举") private Integer status; } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogPageReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogPageReqVO.java index f17f358868..055cfc56c1 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogPageReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogPageReqVO.java @@ -32,7 +32,7 @@ public class JobLogPageReqVO extends PageParam { @ApiModelProperty(value = "ç»“æŸæ‰§è¡Œæ—¶é—´") private Date endTime; - @ApiModelProperty(value = "任务状æ€", notes = "å‚è§ InfJobLogStatusEnum 枚举") + @ApiModelProperty(value = "任务状æ€", notes = "å‚è§ JobLogStatusEnum 枚举") private Integer status; } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogExportReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogExportReqVO.java index 8c6ac4879c..83eefabd60 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogExportReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogExportReqVO.java @@ -9,7 +9,7 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel(value = "管ç†åŽå° - API 访问日志 Excel 导出 Request VO", description = "傿•°å’Œ InfApiAccessLogPageReqVO 是一致的") +@ApiModel(value = "管ç†åŽå° - API 访问日志 Excel 导出 Request VO", description = "傿•°å’Œ ApiAccessLogPageReqVO 是一致的") @Data public class ApiAccessLogExportReqVO { diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogExportReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogExportReqVO.java index dd66ff6f31..b799a3238a 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogExportReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogExportReqVO.java @@ -9,7 +9,7 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel(value = "管ç†åŽå° - API 错误日志 Excel 导出 Request VO", description = "傿•°å’Œ InfApiErrorLogPageReqVO 是一致的") +@ApiModel(value = "管ç†åŽå° - API 错误日志 Excel 导出 Request VO", description = "傿•°å’Œ ApiErrorLogPageReqVO 是一致的") @Data public class ApiErrorLogExportReqVO { diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/config/ConfigDO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/config/ConfigDO.java index dbcdfed56d..4542c2a3ac 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/config/ConfigDO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/config/ConfigDO.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.infra.dal.dataobject.config; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import cn.iocoder.yudao.module.infra.enums.config.ConfigTypeEnum; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -45,7 +46,7 @@ public class ConfigDO extends BaseDO { /** * 傿•°ç±»åž‹ * - * 枚举 {@link InfConfigTypeEnum} + * 枚举 {@link ConfigTypeEnum} */ @TableField("`type`") private Integer type; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/ApiErrorLogDO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/ApiErrorLogDO.java index fa5b162a59..1ed7df4120 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/ApiErrorLogDO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/ApiErrorLogDO.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.infra.dal.dataobject.logger; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; +import cn.iocoder.yudao.module.infra.enums.logger.ApiErrorLogProcessStatusEnum; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.*; @@ -136,7 +137,7 @@ public class ApiErrorLogDO extends TenantBaseDO { /** * 处ç†çŠ¶æ€ * - * 枚举 {@link InfApiErrorLogProcessStatusEnum} + * 枚举 {@link ApiErrorLogProcessStatusEnum} */ private Integer processStatus; /** diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/ConfigCoreDAOImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/ConfigDAOImpl.java similarity index 86% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/ConfigCoreDAOImpl.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/ConfigDAOImpl.java index fe531b4023..e16b59e955 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/ConfigCoreDAOImpl.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/ConfigDAOImpl.java @@ -12,15 +12,15 @@ import java.util.Date; import java.util.List; /** - * ConfigFrameworkDAO Core 实现类 + * ConfigDAOImpl 实现类 * * @author èŠ‹é“æºç  */ -public class ConfigCoreDAOImpl implements ConfigFrameworkDAO { +public class ConfigDAOImpl implements ConfigFrameworkDAO { private final JdbcTemplate jdbcTemplate; - public ConfigCoreDAOImpl(String jdbcUrl, String username, String password) { + public ConfigDAOImpl(String jdbcUrl, String username, String password) { DataSource dataSource = new DriverManagerDataSource(jdbcUrl, username, password); this.jdbcTemplate = new JdbcTemplate(dataSource); } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/file/config/FileProperties.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/file/config/FileProperties.java index 7d76a3baf4..c112802b07 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/file/config/FileProperties.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/file/config/FileProperties.java @@ -12,7 +12,7 @@ import javax.validation.constraints.NotNull; public class FileProperties { /** - * 对应 InfFileController çš„ getFile 方法 + * 对应 FileController çš„ getFile 方法 */ @NotNull(message = "基础文件路径ä¸èƒ½ä¸ºç©º") private String basePath; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test/resources/application-unit-test.yaml b/yudao-module-infra/yudao-module-infra-impl/src/test/resources/application-unit-test.yaml index 6f83b473aa..42e5e356dd 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/test/resources/application-unit-test.yaml +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/resources/application-unit-test.yaml @@ -48,7 +48,3 @@ yudao: base-package2: cn.iocoder.yudao.module core-service: base-package: cn.iocoder.yudao.module.member.dal.mysql # TODO èŠ‹è‰¿ï¼šè¦æ¸…ç†æŽ‰ - captcha: - timeout: 5m - width: 160 - height: 60 diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test/resources/sql/clean.sql b/yudao-module-infra/yudao-module-infra-impl/src/test/resources/sql/clean.sql index edf0e8ddf8..b416d4d81a 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/test/resources/sql/clean.sql +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/resources/sql/clean.sql @@ -4,3 +4,6 @@ DELETE FROM "infra_job"; DELETE FROM "infra_job_log"; DELETE FROM "infra_api_access_log"; DELETE FROM "infra_api_error_log"; +DELETE FROM "infra_api_access_log"; +DELETE FROM "infra_file"; +DELETE FROM "infra_api_error_log"; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test/resources/sql/create_tables.sql b/yudao-module-infra/yudao-module-infra-impl/src/test/resources/sql/create_tables.sql index 2ec26d220e..a47cc30b3f 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/test/resources/sql/create_tables.sql +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/resources/sql/create_tables.sql @@ -14,7 +14,7 @@ CREATE TABLE IF NOT EXISTS "infra_config" ( "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, "deleted" bit NOT NULL DEFAULT FALSE, PRIMARY KEY ("id") - ) COMMENT '傿•°é…置表'; +) COMMENT '傿•°é…置表'; CREATE TABLE IF NOT EXISTS "infra_file" ( "id" varchar(188) NOT NULL, @@ -27,7 +27,7 @@ CREATE TABLE IF NOT EXISTS "infra_file" ( "deleted" bit NOT NULL DEFAULT FALSE, "tenant_id" bigint not null default '0', PRIMARY KEY ("id") - ) COMMENT '文件表'; +) COMMENT '文件表'; CREATE TABLE IF NOT EXISTS "infra_job" ( "id" bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY COMMENT '任务编å·', @@ -45,7 +45,7 @@ CREATE TABLE IF NOT EXISTS "infra_job" ( "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', "deleted" bit NOT NULL DEFAULT FALSE COMMENT '是å¦åˆ é™¤', PRIMARY KEY ("id") - ) COMMENT='定时任务表'; +) COMMENT='定时任务表'; CREATE TABLE IF NOT EXISTS "infra_job_log" ( "id" bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY COMMENT '日志编å·', @@ -64,4 +64,74 @@ CREATE TABLE IF NOT EXISTS "infra_job_log" ( "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', "deleted" bit(1) NOT NULL DEFAULT FALSE COMMENT '是å¦åˆ é™¤', PRIMARY KEY ("id") - )COMMENT='定时任务日志表'; +)COMMENT='定时任务日志表'; + +CREATE TABLE IF NOT EXISTS "inf_file" ( + "id" varchar(188) NOT NULL, + "type" varchar(63) DEFAULT NULL, + "content" blob NOT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + "tenant_id" bigint not null default '0', + PRIMARY KEY ("id") + ) COMMENT '文件表'; + +CREATE TABLE IF NOT EXISTS "infra_api_access_log" ( + "id" bigint not null GENERATED BY DEFAULT AS IDENTITY, + "trace_id" varchar(64) not null default '', + "user_id" bigint not null default '0', + "user_type" tinyint not null default '0', + "application_name" varchar(50) not null, + "request_method" varchar(16) not null default '', + "request_url" varchar(255) not null default '', + "request_params" varchar(8000) not null default '', + "user_ip" varchar(50) not null, + "user_agent" varchar(512) not null, + "begin_time" timestamp not null, + "end_time" timestamp not null, + "duration" integer not null, + "result_code" integer not null default '0', + "result_msg" varchar(512) default '', + "creator" varchar(64) default '', + "create_time" timestamp not null default current_timestamp, + "updater" varchar(64) default '', + "update_time" timestamp not null default current_timestamp, + "deleted" bit not null default false, + "tenant_id" bigint not null default '0', + primary key ("id") + ) COMMENT 'API 访问日志表'; + +CREATE TABLE IF NOT EXISTS "infra_api_error_log" ( + "id" integer not null GENERATED BY DEFAULT AS IDENTITY, + "trace_id" varchar(64) not null, + "user_id" bigint not null default '0', + "user_type" tinyint not null default '0', + "application_name" varchar(50) not null, + "request_method" varchar(16) not null, + "request_url" varchar(255) not null, + "request_params" varchar(8000) not null, + "user_ip" varchar(50) not null, + "user_agent" varchar(512) not null, + "exception_time" timestamp not null, + "exception_name" varchar(128) not null default '', + "exception_message" clob not null, + "exception_root_cause_message" clob not null, + "exception_stack_trace" clob not null, + "exception_class_name" varchar(512) not null, + "exception_file_name" varchar(512) not null, + "exception_method_name" varchar(512) not null, + "exception_line_number" integer not null, + "process_status" tinyint not null, + "process_time" timestamp default null, + "process_user_id" bigint default '0', + "creator" varchar(64) default '', + "create_time" timestamp not null default current_timestamp, + "updater" varchar(64) default '', + "update_time" timestamp not null default current_timestamp, + "deleted" bit not null default false, + "tenant_id" bigint not null default '0', + primary key ("id") +) COMMENT '系统异常日志'; From e7e3b187040d6b75703e2cda89fdc2c50b103c67 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 31 Jan 2022 19:26:39 +0800 Subject: [PATCH 22/47] =?UTF-8?q?=E5=A4=9A=E6=A8=A1=E5=9D=97=E9=87=8D?= =?UTF-8?q?=E6=9E=84=206=EF=BC=9Atool=20=E6=A8=A1=E5=9D=97=E7=9A=84?= =?UTF-8?q?=E8=BF=81=E7=A7=BB=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 1 + .../codegen/vo/ToolCodegenDetailRespVO.java | 21 --- .../convert/codegen/ToolCodegenConvert.java | 70 ---------- .../convert/test/ToolTestDemoConvert.java | 34 ----- .../codegen/ToolCodegenColumnMapper.java | 22 ---- .../mysql/codegen/ToolCodegenTableMapper.java | 25 ---- .../mysql/codegen/ToolSchemaColumnMapper.java | 19 --- .../mysql/codegen/ToolSchemaTableMapper.java | 26 ---- .../tool/framework/codegen/package-info.java | 4 - .../modules/tool/package-info.java | 7 - .../test/impl/ToolTestDemoServiceImpl.java | 83 ------------ .../src/main/resources/application-dev.yaml | 2 +- .../src/main/resources/application-local.yaml | 2 +- ...ToolInformationSchemaColumnMapperTest.java | 4 +- .../ToolInformationSchemaTableMapperTest.java | 2 +- .../codegen/ToolCodegenEngineTest.java | 12 +- .../codegen/ToolCodegenSQLParserTest.java | 4 +- .../codegen/ToolCodegenServiceImplTest.java | 4 +- .../yudao/module/system/api/package-info.java | 1 - .../service/auth/AdminAuthServiceImpl.java | 1 - yudao-module-tool/pom.xml | 24 ++++ .../yudao-module-tool-api/pom.xml | 26 ++++ .../yudao/module/tool/api/package-info.java | 4 + .../module/tool/enums/DictTypeConstants.java | 4 +- .../module/tool/enums/ErrorCodeConstants.java | 4 +- .../yudao/module/tool/package-info.java | 1 + .../yudao-module-tool-impl/pom.xml | 85 +++++++++++++ .../admin/codegen/CodegenController.java | 58 ++++----- .../admin/codegen/vo/CodegenDetailRespVO.java | 21 +++ .../codegen/vo/CodegenPreviewRespVO.java | 6 +- .../admin/codegen/vo/CodegenUpdateReqVO.java | 14 +- .../vo/column/CodegenColumnBaseVO.java | 6 +- .../vo/column/CodegenColumnRespVO.java | 6 +- .../codegen/vo/table/CodegenTableBaseVO.java | 10 +- .../vo/table/CodegenTablePageReqVO.java | 6 +- .../codegen/vo/table/CodegenTableRespVO.java | 6 +- .../codegen/vo/table/SchemaTableRespVO.java | 6 +- .../admin/test/TestDemoController.http | 2 + .../admin/test/TestDemoController.java | 53 ++++---- .../admin/test/vo/TestDemoBaseVO.java | 4 +- .../admin/test/vo/TestDemoCreateReqVO.java | 6 +- .../admin/test/vo/TestDemoExcelVO.java | 11 +- .../admin/test/vo/TestDemoExportReqVO.java | 6 +- .../admin/test/vo/TestDemoPageReqVO.java | 6 +- .../admin/test/vo/TestDemoRespVO.java | 6 +- .../admin/test/vo/TestDemoUpdateReqVO.java | 6 +- .../tool/controller/app/package-info.java | 4 + .../module/tool/controller/package-info.java | 6 + .../tool/convert/codegen/CodegenConvert.java | 70 ++++++++++ .../tool/convert/test/TestDemoConvert.java | 32 +++++ .../dataobject/codegen/CodegenColumnDO.java | 14 +- .../dataobject/codegen/CodegenTableDO.java | 10 +- .../dataobject/codegen/SchemaColumnDO.java | 4 +- .../dal/dataobject/codegen/SchemaTableDO.java | 4 +- .../tool/dal/dataobject/test/TestDemoDO.java | 7 +- .../mysql/codegen/CodegenColumnMapper.java | 22 ++++ .../dal/mysql/codegen/CodegenTableMapper.java | 25 ++++ .../dal/mysql/codegen/SchemaColumnMapper.java | 19 +++ .../dal/mysql/codegen/SchemaTableMapper.java | 26 ++++ .../tool/dal/mysql/test/TestDemoMapper.java | 22 ++-- .../codegen/CodegenColumnHtmlTypeEnum.java | 4 +- .../CodegenColumnListConditionEnum.java | 4 +- .../enums/codegen/CodegenImportTypeEnum.java | 4 +- .../codegen/CodegenTemplateTypeEnum.java | 4 +- .../yudao/module/tool/enums/package-info.java | 4 + .../codegen/config/CodegenConfiguration.java | 2 +- .../codegen/config/CodegenProperties.java | 2 +- .../tool/framework/codegen/package-info.java | 4 + .../module}/tool/framework/package-info.java | 2 +- .../yudao/module/tool/package-info.java | 8 ++ .../tool/service/codegen/CodegenService.java | 26 ++-- .../service/codegen/CodegenServiceImpl.java | 120 +++++++++--------- .../service/codegen/inner/CodegenBuilder.java | 84 ++++++------ .../service/codegen/inner/CodegenEngine.java | 22 ++-- .../codegen/inner/CodegenSQLParser.java | 34 ++--- .../tool/service/test/TestDemoService.java | 26 ++-- .../service/test/TestDemoServiceImpl.java | 86 +++++++++++++ 77 files changed, 791 insertions(+), 641 deletions(-) delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/ToolCodegenDetailRespVO.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/convert/codegen/ToolCodegenConvert.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/convert/test/ToolTestDemoConvert.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolCodegenColumnMapper.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolCodegenTableMapper.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolSchemaColumnMapper.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolSchemaTableMapper.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/codegen/package-info.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/package-info.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/test/impl/ToolTestDemoServiceImpl.java delete mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/package-info.java create mode 100644 yudao-module-tool/pom.xml create mode 100644 yudao-module-tool/yudao-module-tool-api/pom.xml create mode 100644 yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/api/package-info.java rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/enums/ToolDictTypeConstants.java => yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/enums/DictTypeConstants.java (55%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/enums/ToolErrorCodeConstants.java => yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/enums/ErrorCodeConstants.java (91%) create mode 100644 yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/package-info.java create mode 100644 yudao-module-tool/yudao-module-tool-impl/pom.xml rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/ToolCodegenController.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/CodegenController.java (73%) create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/CodegenDetailRespVO.java rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/ToolCodegenPreviewRespVO.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/CodegenPreviewRespVO.java (65%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/ToolCodegenUpdateReqVO.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/CodegenUpdateReqVO.java (65%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/column/ToolCodegenColumnBaseVO.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/column/CodegenColumnBaseVO.java (94%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/column/ToolCodegenColumnRespVO.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/column/CodegenColumnRespVO.java (69%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/table/ToolCodegenTableBaseVO.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTableBaseVO.java (87%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/table/ToolCodegenTablePageReqVO.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTablePageReqVO.java (85%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/table/ToolCodegenTableRespVO.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTableRespVO.java (73%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/table/ToolSchemaTableRespVO.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/SchemaTableRespVO.java (77%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/ToolTestDemoController.http => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/TestDemoController.http (80%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/ToolTestDemoController.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/TestDemoController.java (60%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoBaseVO.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoBaseVO.java (90%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoCreateReqVO.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoCreateReqVO.java (51%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoExcelVO.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoExcelVO.java (67%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoExportReqVO.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoExportReqVO.java (82%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoPageReqVO.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoPageReqVO.java (87%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoRespVO.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoRespVO.java (72%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoUpdateReqVO.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoUpdateReqVO.java (70%) create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/app/package-info.java create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/package-info.java create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/convert/codegen/CodegenConvert.java create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/convert/test/TestDemoConvert.java rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/dataobject/codegen/ToolCodegenColumnDO.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/CodegenColumnDO.java (83%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/dataobject/codegen/ToolCodegenTableDO.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/CodegenTableDO.java (84%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/dataobject/codegen/ToolSchemaColumnDO.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/SchemaColumnDO.java (90%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/dataobject/codegen/ToolSchemaTableDO.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/SchemaTableDO.java (83%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/dataobject/test/ToolTestDemoDO.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/test/TestDemoDO.java (81%) create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/CodegenColumnMapper.java create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/CodegenTableMapper.java create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/SchemaColumnMapper.java create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/SchemaTableMapper.java rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/test/ToolTestDemoMapper.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/test/TestDemoMapper.java (64%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/enums/codegen/ToolCodegenColumnHtmlTypeEnum.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenColumnHtmlTypeEnum.java (83%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/enums/codegen/ToolCodegenColumnListConditionEnum.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenColumnListConditionEnum.java (74%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/enums/codegen/ToolCodegenImportTypeEnum.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenImportTypeEnum.java (76%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/enums/codegen/ToolCodegenTemplateTypeEnum.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenTemplateTypeEnum.java (73%) create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/package-info.java rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module}/tool/framework/codegen/config/CodegenConfiguration.java (76%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module}/tool/framework/codegen/config/CodegenProperties.java (89%) create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/codegen/package-info.java rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module}/tool/framework/package-info.java (55%) create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/package-info.java rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenService.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenService.java (69%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/impl/ToolCodegenServiceImpl.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenServiceImpl.java (60%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/impl/ToolCodegenBuilder.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenBuilder.java (70%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/impl/ToolCodegenEngine.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenEngine.java (92%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/impl/ToolCodegenSQLParser.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenSQLParser.java (72%) rename yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/test/ToolTestDemoService.java => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/test/TestDemoService.java (51%) create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/test/TestDemoServiceImpl.java diff --git a/pom.xml b/pom.xml index 1b4e139ee1..f56f07ddb7 100644 --- a/pom.xml +++ b/pom.xml @@ -17,6 +17,7 @@ yudao-module-system yudao-module-infra + yudao-module-tool ${artifactId} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/ToolCodegenDetailRespVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/ToolCodegenDetailRespVO.java deleted file mode 100644 index 4a1b10c517..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/ToolCodegenDetailRespVO.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo; - -import cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.column.ToolCodegenColumnRespVO; -import cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.table.ToolCodegenTableRespVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -@ApiModel("代ç ç”Ÿæˆè¡¨å’Œå­—段的明细 Response VO") -@Data -public class ToolCodegenDetailRespVO { - - @ApiModelProperty("表定义") - private ToolCodegenTableRespVO table; - - @ApiModelProperty("字段定义") - private List columns; - -} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/convert/codegen/ToolCodegenConvert.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/convert/codegen/ToolCodegenConvert.java deleted file mode 100644 index 65bf461000..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/convert/codegen/ToolCodegenConvert.java +++ /dev/null @@ -1,70 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.tool.convert.codegen; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.ToolCodegenDetailRespVO; -import cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.ToolCodegenPreviewRespVO; -import cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.ToolCodegenUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.column.ToolCodegenColumnRespVO; -import cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.table.ToolCodegenTableRespVO; -import cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.table.ToolSchemaTableRespVO; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolCodegenColumnDO; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolCodegenTableDO; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolSchemaColumnDO; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolSchemaTableDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -@Mapper -public interface ToolCodegenConvert { - - ToolCodegenConvert INSTANCE = Mappers.getMapper(ToolCodegenConvert.class); - - // ========== ToolInformationSchemaTableDO å’Œ ToolInformationSchemaColumnDO 相关 ========== - - ToolCodegenTableDO convert(ToolSchemaTableDO bean); - - List convertList(List list); - - ToolCodegenTableRespVO convert(ToolSchemaColumnDO bean); - - // ========== ToolCodegenTableDO 相关 ========== - -// List convertList02(List list); - - ToolCodegenTableRespVO convert(ToolCodegenTableDO bean); - - PageResult convertPage(PageResult page); - - // ========== ToolCodegenTableDO 相关 ========== - - List convertList02(List list); - - ToolCodegenTableDO convert(ToolCodegenUpdateReqVO.Table bean); - - List convertList03(List columns); - - List convertList04(List list); - - // ========== 其它 ========== - - default ToolCodegenDetailRespVO convert(ToolCodegenTableDO table, List columns) { - ToolCodegenDetailRespVO respVO = new ToolCodegenDetailRespVO(); - respVO.setTable(convert(table)); - respVO.setColumns(convertList02(columns)); - return respVO; - } - - default List convert(Map codes) { - return codes.entrySet().stream().map(entry -> { - ToolCodegenPreviewRespVO respVO = new ToolCodegenPreviewRespVO(); - respVO.setFilePath(entry.getKey()); - respVO.setCode(entry.getValue()); - return respVO; - }).collect(Collectors.toList()); - } - -} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/convert/test/ToolTestDemoConvert.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/convert/test/ToolTestDemoConvert.java deleted file mode 100644 index 8e88c59f4f..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/convert/test/ToolTestDemoConvert.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.tool.convert.test; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; - -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; -import cn.iocoder.yudao.adminserver.modules.tool.controller.test.vo.*; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.test.ToolTestDemoDO; - -/** - * 字典类型 Convert - * - * @author 芋艿 - */ -@Mapper -public interface ToolTestDemoConvert { - - ToolTestDemoConvert INSTANCE = Mappers.getMapper(ToolTestDemoConvert.class); - - ToolTestDemoDO convert(ToolTestDemoCreateReqVO bean); - - ToolTestDemoDO convert(ToolTestDemoUpdateReqVO bean); - - ToolTestDemoRespVO convert(ToolTestDemoDO bean); - - List convertList(List list); - - PageResult convertPage(PageResult page); - - List convertList02(List list); - -} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolCodegenColumnMapper.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolCodegenColumnMapper.java deleted file mode 100644 index 2fae426917..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolCodegenColumnMapper.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.tool.dal.mysql.codegen; - -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolCodegenColumnDO; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import org.apache.ibatis.annotations.Mapper; - -import java.util.List; - -@Mapper -public interface ToolCodegenColumnMapper extends BaseMapperX { - - default List selectListByTableId(Long tableId) { - return selectList(new QueryWrapper().eq("table_id", tableId) - .orderByAsc("ordinal_position")); - } - - default void deleteListByTableId(Long tableId) { - delete(new QueryWrapper().eq("table_id", tableId)); - } - -} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolCodegenTableMapper.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolCodegenTableMapper.java deleted file mode 100644 index 31ce16f7b0..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolCodegenTableMapper.java +++ /dev/null @@ -1,25 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.tool.dal.mysql.codegen; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.table.ToolCodegenTablePageReqVO; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolCodegenTableDO; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public interface ToolCodegenTableMapper extends BaseMapperX { - - default ToolCodegenTableDO selectByTableName(String tableName) { - return selectOne(new QueryWrapper().eq("table_name", tableName)); - } - - default PageResult selectPage(ToolCodegenTablePageReqVO pageReqVO) { - return selectPage(pageReqVO, new QueryWrapperX() - .likeIfPresent("table_name", pageReqVO.getTableName()) - .likeIfPresent("table_comment", pageReqVO.getTableComment()) - .betweenIfPresent("create_time", pageReqVO.getBeginCreateTime(), pageReqVO.getEndCreateTime())); - } - -} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolSchemaColumnMapper.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolSchemaColumnMapper.java deleted file mode 100644 index 4778da065f..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolSchemaColumnMapper.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.tool.dal.mysql.codegen; - -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolSchemaColumnDO; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import org.apache.ibatis.annotations.Mapper; - -import java.util.List; - -@Mapper -public interface ToolSchemaColumnMapper extends BaseMapperX { - - default List selectListByTableName(String tableSchema, String tableName) { - return selectList(new QueryWrapper().eq("table_name", tableName) - .eq("table_schema", tableSchema) - .orderByAsc("ordinal_position")); - } - -} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolSchemaTableMapper.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolSchemaTableMapper.java deleted file mode 100644 index 7430ef69e3..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolSchemaTableMapper.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.tool.dal.mysql.codegen; - -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolSchemaTableDO; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import org.apache.ibatis.annotations.Mapper; - -import java.util.Collection; -import java.util.List; - -@Mapper -public interface ToolSchemaTableMapper extends BaseMapperX { - - default List selectList(Collection tableSchemas, String tableName, String tableComment) { - return selectList(new QueryWrapperX().in("table_schema", tableSchemas) - .likeIfPresent("table_name", tableName) - .likeIfPresent("table_comment", tableComment)); - } - - default ToolSchemaTableDO selectByTableSchemaAndTableName(String tableSchema, String tableName) { - return selectOne(new QueryWrapper().eq("table_schema",tableSchema) - .eq("table_name", tableName)); - } - -} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/codegen/package-info.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/codegen/package-info.java deleted file mode 100644 index bb13d52514..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/codegen/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * 代ç ç”Ÿæˆå™¨ - */ -package cn.iocoder.yudao.adminserver.modules.tool.framework.codegen; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/package-info.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/package-info.java deleted file mode 100644 index f1e361d134..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -/** - * tool 包下,我们放研å‘工具,æå‡ç ”呿•ˆçŽ‡ä¸Žè´¨é‡ã€‚ - * 例如说:代ç ç”Ÿæˆå™¨ã€æŽ¥å£æ–‡æ¡£ç­‰ç­‰ - * - * 缩写:tool - */ -package cn.iocoder.yudao.adminserver.modules.tool; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/test/impl/ToolTestDemoServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/test/impl/ToolTestDemoServiceImpl.java deleted file mode 100644 index ad8fd1e81e..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/test/impl/ToolTestDemoServiceImpl.java +++ /dev/null @@ -1,83 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.tool.service.test.impl; - -import org.springframework.stereotype.Service; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; - -import java.util.*; -import cn.iocoder.yudao.adminserver.modules.tool.controller.test.vo.*; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.test.ToolTestDemoDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; - -import cn.iocoder.yudao.adminserver.modules.tool.convert.test.ToolTestDemoConvert; -import cn.iocoder.yudao.adminserver.modules.tool.dal.mysql.test.ToolTestDemoMapper; -import cn.iocoder.yudao.adminserver.modules.tool.service.test.ToolTestDemoService; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.adminserver.modules.tool.enums.ToolErrorCodeConstants.*; - -/** - * 字典类型 Service 实现类 - * - * @author 芋艿 - */ -@Service -@Validated -public class ToolTestDemoServiceImpl implements ToolTestDemoService { - - @Resource - private ToolTestDemoMapper testDemoMapper; - - @Override - public Long createTestDemo(ToolTestDemoCreateReqVO createReqVO) { - // æ’å…¥ - ToolTestDemoDO testDemo = ToolTestDemoConvert.INSTANCE.convert(createReqVO); - testDemoMapper.insert(testDemo); - // 返回 - return testDemo.getId(); - } - - @Override - public void updateTestDemo(ToolTestDemoUpdateReqVO updateReqVO) { - // 校验存在 - this.validateTestDemoExists(updateReqVO.getId()); - // æ›´æ–° - ToolTestDemoDO updateObj = ToolTestDemoConvert.INSTANCE.convert(updateReqVO); - testDemoMapper.updateById(updateObj); - } - - @Override - public void deleteTestDemo(Long id) { - // 校验存在 - this.validateTestDemoExists(id); - // 删除 - testDemoMapper.deleteById(id); - } - - private void validateTestDemoExists(Long id) { - if (testDemoMapper.selectById(id) == null) { - throw exception(TEST_DEMO_NOT_EXISTS); - } - } - - @Override - public ToolTestDemoDO getTestDemo(Long id) { - return testDemoMapper.selectById(id); - } - - @Override - public List getTestDemoList(Collection ids) { - return testDemoMapper.selectBatchIds(ids); - } - - @Override - public PageResult getTestDemoPage(ToolTestDemoPageReqVO pageReqVO) { - return testDemoMapper.selectPage(pageReqVO); - } - - @Override - public List getTestDemoList(ToolTestDemoExportReqVO exportReqVO) { - return testDemoMapper.selectList(exportReqVO); - } - -} diff --git a/yudao-admin-server/src/main/resources/application-dev.yaml b/yudao-admin-server/src/main/resources/application-dev.yaml index 246d5e8830..d240bf0c65 100644 --- a/yudao-admin-server/src/main/resources/application-dev.yaml +++ b/yudao-admin-server/src/main/resources/application-dev.yaml @@ -100,7 +100,7 @@ apollo: eagerLoad: enabled: true # 设置 Apollo 在日志åˆå§‹åŒ–å‰ç”Ÿæ•ˆï¼Œå¯ä»¥å®žçŽ°æ—¥å¿—çš„åŠ¨æ€çº§åˆ«é…ç½® jdbc: # 自定义的 JDBC é…置项,用于数æ®åº“çš„åœ°å€ - dao: cn.iocoder.yudao.module.infra.dal.mysql.config.ConfigCoreDAOImpl + dao: cn.iocoder.yudao.module.infra.dal.mysql.config.ConfigDAOImpl url: ${spring.datasource.dynamic.datasource.master.url} username: ${spring.datasource.dynamic.datasource.master.username} password: ${spring.datasource.dynamic.datasource.master.password} diff --git a/yudao-admin-server/src/main/resources/application-local.yaml b/yudao-admin-server/src/main/resources/application-local.yaml index 9bdeb775bb..addd7fbfa0 100644 --- a/yudao-admin-server/src/main/resources/application-local.yaml +++ b/yudao-admin-server/src/main/resources/application-local.yaml @@ -113,7 +113,7 @@ apollo: eagerLoad: enabled: true # 设置 Apollo 在日志åˆå§‹åŒ–å‰ç”Ÿæ•ˆï¼Œå¯ä»¥å®žçŽ°æ—¥å¿—çš„åŠ¨æ€çº§åˆ«é…ç½® jdbc: # 自定义的 JDBC é…置项,用于数æ®åº“çš„åœ°å€ - dao: cn.iocoder.yudao.module.infra.dal.mysql.config.ConfigCoreDAOImpl + dao: cn.iocoder.yudao.module.infra.dal.mysql.config.ConfigDAOImpl url: ${spring.datasource.dynamic.datasource.master.url} username: ${spring.datasource.dynamic.datasource.master.username} password: ${spring.datasource.dynamic.datasource.master.password} diff --git a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolInformationSchemaColumnMapperTest.java b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolInformationSchemaColumnMapperTest.java index 1e86eb5d82..f945ddbe2d 100644 --- a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolInformationSchemaColumnMapperTest.java +++ b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolInformationSchemaColumnMapperTest.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.tool.dal.mysql.codegen; +package cn.iocoder.yudao.module.tool.dal.mysql.codegen; import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolSchemaColumnDO; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.ToolSchemaColumnDO; import org.junit.jupiter.api.Test; import javax.annotation.Resource; diff --git a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolInformationSchemaTableMapperTest.java b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolInformationSchemaTableMapperTest.java index 35d91b8c45..88b4c58b2c 100644 --- a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolInformationSchemaTableMapperTest.java +++ b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolInformationSchemaTableMapperTest.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.tool.dal.mysql.codegen; +package cn.iocoder.yudao.module.tool.dal.mysql.codegen; import cn.iocoder.yudao.adminserver.BaseDbUnitTest; diff --git a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenEngineTest.java b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenEngineTest.java index a8a7857e97..6a461f0c06 100644 --- a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenEngineTest.java +++ b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenEngineTest.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.adminserver.modules.tool.service.codegen; +package cn.iocoder.yudao.module.tool.service.codegen; import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolCodegenColumnDO; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolCodegenTableDO; -import cn.iocoder.yudao.adminserver.modules.tool.dal.mysql.codegen.ToolCodegenColumnMapper; -import cn.iocoder.yudao.adminserver.modules.tool.dal.mysql.codegen.ToolCodegenTableMapper; -import cn.iocoder.yudao.adminserver.modules.tool.service.codegen.impl.ToolCodegenEngine; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.ToolCodegenColumnDO; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.ToolCodegenTableDO; +import cn.iocoder.yudao.module.tool.dal.mysql.codegen.ToolCodegenColumnMapper; +import cn.iocoder.yudao.module.tool.dal.mysql.codegen.ToolCodegenTableMapper; +import cn.iocoder.yudao.module.tool.service.codegen.impl.ToolCodegenEngine; import org.junit.jupiter.api.Test; import javax.annotation.Resource; diff --git a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenSQLParserTest.java b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenSQLParserTest.java index 44c909118a..e498dc02ee 100644 --- a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenSQLParserTest.java +++ b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenSQLParserTest.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.tool.service.codegen; +package cn.iocoder.yudao.module.tool.service.codegen; import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.adminserver.modules.tool.service.codegen.impl.ToolCodegenSQLParser; +import cn.iocoder.yudao.module.tool.service.codegen.impl.ToolCodegenSQLParser; import org.junit.jupiter.api.Test; public class ToolCodegenSQLParserTest extends BaseDbUnitTest { diff --git a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenServiceImplTest.java b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenServiceImplTest.java index 87661a3cd8..cedd3870aa 100644 --- a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenServiceImplTest.java +++ b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenServiceImplTest.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.tool.service.codegen; +package cn.iocoder.yudao.module.tool.service.codegen; import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.adminserver.modules.tool.service.codegen.impl.ToolCodegenServiceImpl; +import cn.iocoder.yudao.module.tool.service.codegen.impl.ToolCodegenServiceImpl; import org.junit.jupiter.api.Test; import javax.annotation.Resource; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/package-info.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/package-info.java deleted file mode 100644 index 0354f00bce..0000000000 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.module.system.api; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java index f237049bdd..afc66ebd2a 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java @@ -137,7 +137,6 @@ public class AdminAuthServiceImpl implements AdminAuthService { // 在其内部,会调用到 loadUserByUsername æ–¹æ³•ï¼ŒèŽ·å– User ä¿¡æ¯ authentication = authenticationManager.authenticate(new MultiUsernamePasswordAuthenticationToken( username, password, getUserType())); - // org.activiti.engine.impl.identity.Authentication.setAuthenticatedUserId(username); } catch (BadCredentialsException badCredentialsException) { this.createLoginLog(username, logTypeEnum, LoginResultEnum.BAD_CREDENTIALS); throw exception(AUTH_LOGIN_BAD_CREDENTIALS); diff --git a/yudao-module-tool/pom.xml b/yudao-module-tool/pom.xml new file mode 100644 index 0000000000..094286fa6e --- /dev/null +++ b/yudao-module-tool/pom.xml @@ -0,0 +1,24 @@ + + + + cn.iocoder.boot + yudao + ${revision} + + 4.0.0 + + yudao-module-tool-api + yudao-module-tool-impl + + yudao-module-tool + pom + + ${artifactId} + + tool 模å—,我们放研å‘工具,æå‡ç ”呿•ˆçŽ‡ä¸Žè´¨é‡ã€‚ + 例如说:代ç ç”Ÿæˆå™¨ã€æŽ¥å£æ–‡æ¡£ç­‰ç­‰ + + + diff --git a/yudao-module-tool/yudao-module-tool-api/pom.xml b/yudao-module-tool/yudao-module-tool-api/pom.xml new file mode 100644 index 0000000000..ea237be1fc --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-api/pom.xml @@ -0,0 +1,26 @@ + + + + cn.iocoder.boot + yudao-module-tool + ${revision} + + 4.0.0 + yudao-module-tool-api + jar + + ${artifactId} + + tool æ¨¡å— API,暴露给其它模å—调用 + + + + + cn.iocoder.boot + yudao-common + + + + diff --git a/yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/api/package-info.java b/yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/api/package-info.java new file mode 100644 index 0000000000..77a92cf560 --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/api/package-info.java @@ -0,0 +1,4 @@ +/** + * Tool API 包,定义暴露给其它模å—çš„ API + */ +package cn.iocoder.yudao.module.tool.api; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/enums/ToolDictTypeConstants.java b/yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/enums/DictTypeConstants.java similarity index 55% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/enums/ToolDictTypeConstants.java rename to yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/enums/DictTypeConstants.java index 1bf2b7a1d0..f22e39f1ed 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/enums/ToolDictTypeConstants.java +++ b/yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/enums/DictTypeConstants.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.adminserver.modules.tool.enums; +package cn.iocoder.yudao.module.tool.enums; /** * Tool 字典类型的枚举类 * * @author èŠ‹é“æºç  */ -public interface ToolDictTypeConstants { +public interface DictTypeConstants { String TEST_DEMO_TYPE = "tool_test_demo_type"; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/enums/ToolErrorCodeConstants.java b/yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/enums/ErrorCodeConstants.java similarity index 91% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/enums/ToolErrorCodeConstants.java rename to yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/enums/ErrorCodeConstants.java index cdf341d749..2d62edc1be 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/enums/ToolErrorCodeConstants.java +++ b/yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/enums/ErrorCodeConstants.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.tool.enums; +package cn.iocoder.yudao.module.tool.enums; import cn.iocoder.yudao.framework.common.exception.ErrorCode; @@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode; * * tool 系统,使用 1-003-000-000 段 */ -public interface ToolErrorCodeConstants { +public interface ErrorCodeConstants { // ========== 字典类型(测试) 1003000000 ========== ErrorCode TEST_DEMO_NOT_EXISTS = new ErrorCode(1003000000, "测试示例ä¸å­˜åœ¨"); diff --git a/yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/package-info.java b/yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/package-info.java new file mode 100644 index 0000000000..1b5a668009 --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.tool; diff --git a/yudao-module-tool/yudao-module-tool-impl/pom.xml b/yudao-module-tool/yudao-module-tool-impl/pom.xml new file mode 100644 index 0000000000..8c8737a4f3 --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/pom.xml @@ -0,0 +1,85 @@ + + + + yudao-module-tool + cn.iocoder.boot + ${revision} + + 4.0.0 + yudao-module-tool-impl + jar + + ${artifactId} + + tool 模å—,我们放研å‘工具,æå‡ç ”呿•ˆçŽ‡ä¸Žè´¨é‡ã€‚ + 例如说:代ç ç”Ÿæˆå™¨ã€æŽ¥å£æ–‡æ¡£ç­‰ç­‰ + + + + + cn.iocoder.boot + yudao-module-tool-api + ${revision} + + + + + cn.iocoder.boot + yudao-spring-boot-starter-biz-operatelog + + + cn.iocoder.boot + yudao-spring-boot-starter-biz-dict + + + + + cn.iocoder.boot + yudao-spring-boot-starter-security + + + + + cn.iocoder.boot + yudao-spring-boot-starter-mybatis + + + + + cn.iocoder.boot + yudao-spring-boot-starter-test + test + + + + + cn.iocoder.boot + yudao-spring-boot-starter-excel + + + + + + ${artifactId} + + + + org.springframework.boot + spring-boot-maven-plugin + + true + + + + + repackage + + + + + + + + diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/ToolCodegenController.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/CodegenController.java similarity index 73% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/ToolCodegenController.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/CodegenController.java index a6bd6a64b9..4523b1ab40 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/ToolCodegenController.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/CodegenController.java @@ -1,20 +1,20 @@ -package cn.iocoder.yudao.adminserver.modules.tool.controller.codegen; +package cn.iocoder.yudao.module.tool.controller.admin.codegen; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.ZipUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.ToolCodegenDetailRespVO; -import cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.ToolCodegenPreviewRespVO; -import cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.ToolCodegenUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.table.ToolCodegenTablePageReqVO; -import cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.table.ToolCodegenTableRespVO; -import cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.table.ToolSchemaTableRespVO; -import cn.iocoder.yudao.adminserver.modules.tool.convert.codegen.ToolCodegenConvert; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolCodegenColumnDO; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolCodegenTableDO; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolSchemaTableDO; -import cn.iocoder.yudao.adminserver.modules.tool.service.codegen.ToolCodegenService; +import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.CodegenDetailRespVO; +import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.CodegenPreviewRespVO; +import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.CodegenUpdateReqVO; +import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table.CodegenTablePageReqVO; +import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table.CodegenTableRespVO; +import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table.SchemaTableRespVO; +import cn.iocoder.yudao.module.tool.convert.codegen.CodegenConvert; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenColumnDO; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenTableDO; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaTableDO; +import cn.iocoder.yudao.module.tool.service.codegen.CodegenService; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; import io.swagger.annotations.Api; @@ -37,14 +37,14 @@ import java.util.Set; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -@Api(tags = "代ç ç”Ÿæˆå™¨") +@Api(tags = "管ç†åŽå° - 代ç ç”Ÿæˆå™¨") @RestController @RequestMapping("/tool/codegen") @Validated -public class ToolCodegenController { +public class CodegenController { @Resource - private ToolCodegenService codegenService; + private CodegenService codegenService; @GetMapping("/db/table/list") @ApiOperation(value = "获得数æ®åº“自带的表定义列表", notes = "会过滤掉已ç»å¯¼å…¥ Codegen 的表") @@ -53,34 +53,34 @@ public class ToolCodegenController { @ApiImplicitParam(name = "tableComment", value = "æè¿°ï¼Œæ¨¡ç³ŠåŒ¹é…", required = true, example = "芋é“", dataTypeClass = String.class) }) @PreAuthorize("@ss.hasPermission('tool:codegen:query')") - public CommonResult> getSchemaTableList( + public CommonResult> getSchemaTableList( @RequestParam(value = "tableName", required = false) String tableName, @RequestParam(value = "tableComment", required = false) String tableComment) { // 获得数æ®åº“自带的表定义列表 - List schemaTables = codegenService.getSchemaTableList(tableName, tableComment); + List schemaTables = codegenService.getSchemaTableList(tableName, tableComment); // 移除在 Codegen 中,已ç»å­˜åœ¨çš„ - Set existsTables = CollectionUtils.convertSet(codegenService.getCodeGenTableList(), ToolCodegenTableDO::getTableName); + Set existsTables = CollectionUtils.convertSet(codegenService.getCodeGenTableList(), CodegenTableDO::getTableName); schemaTables.removeIf(table -> existsTables.contains(table.getTableName())); - return success(ToolCodegenConvert.INSTANCE.convertList04(schemaTables)); + return success(CodegenConvert.INSTANCE.convertList04(schemaTables)); } @GetMapping("/table/page") @ApiOperation("获得表定义分页") @PreAuthorize("@ss.hasPermission('tool:codegen:query')") - public CommonResult> getCodeGenTablePage(@Valid ToolCodegenTablePageReqVO pageReqVO) { - PageResult pageResult = codegenService.getCodegenTablePage(pageReqVO); - return success(ToolCodegenConvert.INSTANCE.convertPage(pageResult)); + public CommonResult> getCodeGenTablePage(@Valid CodegenTablePageReqVO pageReqVO) { + PageResult pageResult = codegenService.getCodegenTablePage(pageReqVO); + return success(CodegenConvert.INSTANCE.convertPage(pageResult)); } @GetMapping("/detail") @ApiOperation("获得表和字段的明细") @ApiImplicitParam(name = "tableId", value = "表编å·", required = true, example = "1024", dataTypeClass = Long.class) @PreAuthorize("@ss.hasPermission('tool:codegen:query')") - public CommonResult getCodegenDetail(@RequestParam("tableId") Long tableId) { - ToolCodegenTableDO table = codegenService.getCodegenTablePage(tableId); - List columns = codegenService.getCodegenColumnListByTableId(tableId); + public CommonResult getCodegenDetail(@RequestParam("tableId") Long tableId) { + CodegenTableDO table = codegenService.getCodegenTablePage(tableId); + List columns = codegenService.getCodegenColumnListByTableId(tableId); // 拼装返回 - return success(ToolCodegenConvert.INSTANCE.convert(table, columns)); + return success(CodegenConvert.INSTANCE.convert(table, columns)); } @ApiOperation("基于数æ®åº“的表结构,创建代ç ç”Ÿæˆå™¨çš„表和字段定义") @@ -102,7 +102,7 @@ public class ToolCodegenController { @ApiOperation("æ›´æ–°æ•°æ®åº“的表和字段定义") @PutMapping("/update") @PreAuthorize("@ss.hasPermission('tool:codegen:update')") - public CommonResult updateCodegen(@Valid @RequestBody ToolCodegenUpdateReqVO updateReqVO) { + public CommonResult updateCodegen(@Valid @RequestBody CodegenUpdateReqVO updateReqVO) { codegenService.updateCodegen(updateReqVO); return success(true); } @@ -142,9 +142,9 @@ public class ToolCodegenController { @GetMapping("/preview") @ApiImplicitParam(name = "tableId", value = "表编å·", required = true, example = "1024", dataTypeClass = Long.class) @PreAuthorize("@ss.hasPermission('tool:codegen:preview')") - public CommonResult> previewCodegen(@RequestParam("tableId") Long tableId) { + public CommonResult> previewCodegen(@RequestParam("tableId") Long tableId) { Map codes = codegenService.generationCodes(tableId); - return success(ToolCodegenConvert.INSTANCE.convert(codes)); + return success(CodegenConvert.INSTANCE.convert(codes)); } @ApiOperation("下载生æˆä»£ç ") diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/CodegenDetailRespVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/CodegenDetailRespVO.java new file mode 100644 index 0000000000..c4e6ce068d --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/CodegenDetailRespVO.java @@ -0,0 +1,21 @@ +package cn.iocoder.yudao.module.tool.controller.admin.codegen.vo; + +import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.column.CodegenColumnRespVO; +import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table.CodegenTableRespVO; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@ApiModel("管ç†åŽå° - 代ç ç”Ÿæˆè¡¨å’Œå­—段的明细 Response VO") +@Data +public class CodegenDetailRespVO { + + @ApiModelProperty("表定义") + private CodegenTableRespVO table; + + @ApiModelProperty("字段定义") + private List columns; + +} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/ToolCodegenPreviewRespVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/CodegenPreviewRespVO.java similarity index 65% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/ToolCodegenPreviewRespVO.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/CodegenPreviewRespVO.java index 3a532708ad..5c2ec6858f 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/ToolCodegenPreviewRespVO.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/CodegenPreviewRespVO.java @@ -1,12 +1,12 @@ -package cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo; +package cn.iocoder.yudao.module.tool.controller.admin.codegen.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -@ApiModel(value = "代ç ç”Ÿæˆé¢„览 Response VO", description ="注æ„,æ¯ä¸ªæ–‡ä»¶éƒ½æ˜¯ä¸€ä¸ªè¯¥å¯¹è±¡") +@ApiModel(value = "管ç†åŽå° - 代ç ç”Ÿæˆé¢„览 Response VO", description ="注æ„,æ¯ä¸ªæ–‡ä»¶éƒ½æ˜¯ä¸€ä¸ªè¯¥å¯¹è±¡") @Data -public class ToolCodegenPreviewRespVO { +public class CodegenPreviewRespVO { @ApiModelProperty(value = "文件路径", required = true, example = "java/cn/iocoder/yudao/adminserver/modules/system/controller/test/SysTestDemoController.java") private String filePath; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/ToolCodegenUpdateReqVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/CodegenUpdateReqVO.java similarity index 65% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/ToolCodegenUpdateReqVO.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/CodegenUpdateReqVO.java index b82064ecc9..eb20c60218 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/ToolCodegenUpdateReqVO.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/CodegenUpdateReqVO.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo; +package cn.iocoder.yudao.module.tool.controller.admin.codegen.vo; -import cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.column.ToolCodegenColumnBaseVO; -import cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.table.ToolCodegenTableBaseVO; +import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table.CodegenTableBaseVO; +import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.column.CodegenColumnBaseVO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -12,9 +12,9 @@ import javax.validation.Valid; import javax.validation.constraints.NotNull; import java.util.List; -@ApiModel("代ç ç”Ÿæˆè¡¨å’Œå­—段的修改 Request VO") +@ApiModel("管ç†åŽå° - 代ç ç”Ÿæˆè¡¨å’Œå­—段的修改 Request VO") @Data -public class ToolCodegenUpdateReqVO { +public class CodegenUpdateReqVO { @Valid // 校验内嵌的字段 @NotNull(message = "表定义ä¸èƒ½ä¸ºç©º") @@ -28,7 +28,7 @@ public class ToolCodegenUpdateReqVO { @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) - public static class Table extends ToolCodegenTableBaseVO { + public static class Table extends CodegenTableBaseVO { @ApiModelProperty(value = "ç¼–å·", required = true, example = "1") private Long id; @@ -39,7 +39,7 @@ public class ToolCodegenUpdateReqVO { @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) - public static class Column extends ToolCodegenColumnBaseVO { + public static class Column extends CodegenColumnBaseVO { @ApiModelProperty(value = "ç¼–å·", required = true, example = "1") private Long id; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/column/ToolCodegenColumnBaseVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/column/CodegenColumnBaseVO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/column/ToolCodegenColumnBaseVO.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/column/CodegenColumnBaseVO.java index bd899712f0..5a9b693370 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/column/ToolCodegenColumnBaseVO.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/column/CodegenColumnBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.column; +package cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.column; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -10,7 +10,7 @@ import javax.validation.constraints.NotNull; * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ */ @Data -public class ToolCodegenColumnBaseVO { +public class CodegenColumnBaseVO { @ApiModelProperty(value = "表编å·", required = true, example = "1") @NotNull(message = "表编å·ä¸èƒ½ä¸ºç©º") @@ -70,7 +70,7 @@ public class ToolCodegenColumnBaseVO { @NotNull(message = "是å¦ä¸º List 查询æ“作的字段ä¸èƒ½ä¸ºç©º") private Boolean listOperation; - @ApiModelProperty(value = "List 查询æ“作的æ¡ä»¶ç±»åž‹", required = true, example = "LIKE", notes = "å‚è§ ToolCodegenColumnListConditionEnum 枚举") + @ApiModelProperty(value = "List 查询æ“作的æ¡ä»¶ç±»åž‹", required = true, example = "LIKE", notes = "å‚è§ CodegenColumnListConditionEnum 枚举") @NotNull(message = "List 查询æ“作的æ¡ä»¶ç±»åž‹ä¸èƒ½ä¸ºç©º") private String listOperationCondition; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/column/ToolCodegenColumnRespVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/column/CodegenColumnRespVO.java similarity index 69% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/column/ToolCodegenColumnRespVO.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/column/CodegenColumnRespVO.java index c7d556427d..358f1f506f 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/column/ToolCodegenColumnRespVO.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/column/CodegenColumnRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.column; +package cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.column; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -8,11 +8,11 @@ import lombok.ToString; import java.util.Date; -@ApiModel("代ç ç”Ÿæˆå­—段定义 Response VO") +@ApiModel("管ç†åŽå° - 代ç ç”Ÿæˆå­—段定义 Response VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class ToolCodegenColumnRespVO extends ToolCodegenColumnBaseVO { +public class CodegenColumnRespVO extends CodegenColumnBaseVO { @ApiModelProperty(value = "ç¼–å·", required = true, example = "1") private Long id; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/table/ToolCodegenTableBaseVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTableBaseVO.java similarity index 87% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/table/ToolCodegenTableBaseVO.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTableBaseVO.java index e4fa2ab749..1b57219fa4 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/table/ToolCodegenTableBaseVO.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTableBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.table; +package cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -10,9 +10,9 @@ import javax.validation.constraints.NotNull; * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ */ @Data -public class ToolCodegenTableBaseVO { +public class CodegenTableBaseVO { - @ApiModelProperty(value = "导入类型", required = true, example = "1", notes = "å‚è§ ToolCodegenImportTypeEnum 枚举") + @ApiModelProperty(value = "导入类型", required = true, example = "1", notes = "å‚è§ CodegenImportTypeEnum 枚举") @NotNull(message = "导入类型ä¸èƒ½ä¸ºç©º") private Integer importType; @@ -35,7 +35,7 @@ public class ToolCodegenTableBaseVO { @NotNull(message = "业务åä¸èƒ½ä¸ºç©º") private String businessName; - @ApiModelProperty(value = "ç±»åç§°", required = true, example = "ToolCodegenTable") + @ApiModelProperty(value = "ç±»åç§°", required = true, example = "CodegenTable") @NotNull(message = "ç±»åç§°ä¸èƒ½ä¸ºç©º") private String className; @@ -47,7 +47,7 @@ public class ToolCodegenTableBaseVO { @NotNull(message = "作者ä¸èƒ½ä¸ºç©º") private String author; - @ApiModelProperty(value = "模æ¿ç±»åž‹", required = true, example = "1", notes = "å‚è§ ToolCodegenTemplateTypeEnum 枚举") + @ApiModelProperty(value = "模æ¿ç±»åž‹", required = true, example = "1", notes = "å‚è§ CodegenTemplateTypeEnum 枚举") @NotNull(message = "模æ¿ç±»åž‹ä¸èƒ½ä¸ºç©º") private Integer templateType; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/table/ToolCodegenTablePageReqVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTablePageReqVO.java similarity index 85% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/table/ToolCodegenTablePageReqVO.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTablePageReqVO.java index b09238b062..69095e277b 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/table/ToolCodegenTablePageReqVO.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTablePageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.table; +package cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; @@ -12,11 +12,11 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel("表定义分页 Request VO") +@ApiModel("管ç†åŽå° - 表定义分页 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class ToolCodegenTablePageReqVO extends PageParam { +public class CodegenTablePageReqVO extends PageParam { @ApiModelProperty(value = "表åç§°", example = "yudao", notes = "模糊匹é…") private String tableName; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/table/ToolCodegenTableRespVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTableRespVO.java similarity index 73% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/table/ToolCodegenTableRespVO.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTableRespVO.java index 73ec3f880b..06d7c0d459 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/table/ToolCodegenTableRespVO.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTableRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.table; +package cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -8,11 +8,11 @@ import lombok.ToString; import java.util.Date; -@ApiModel("代ç ç”Ÿæˆè¡¨å®šä¹‰ Response VO") +@ApiModel("管ç†åŽå° - 代ç ç”Ÿæˆè¡¨å®šä¹‰ Response VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class ToolCodegenTableRespVO extends ToolCodegenTableBaseVO { +public class CodegenTableRespVO extends CodegenTableBaseVO { @ApiModelProperty(value = "ç¼–å·", required = true, example = "1") private Long id; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/table/ToolSchemaTableRespVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/SchemaTableRespVO.java similarity index 77% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/table/ToolSchemaTableRespVO.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/SchemaTableRespVO.java index 284856f291..8b54b64f27 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/codegen/vo/table/ToolSchemaTableRespVO.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/SchemaTableRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.table; +package cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -6,9 +6,9 @@ import lombok.Data; import java.util.Date; -@ApiModel("æ•°æ®å­—典的表定义 Response VO") +@ApiModel("管ç†åŽå° - æ•°æ®å­—典的表定义 Response VO") @Data -public class ToolSchemaTableRespVO { +public class SchemaTableRespVO { @ApiModelProperty(value = "æ•°æ®åº“", required = true, example = "yudao") private String tableSchema; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/ToolTestDemoController.http b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/TestDemoController.http similarity index 80% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/ToolTestDemoController.http rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/TestDemoController.http index b10a3d293b..25b1682dbf 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/ToolTestDemoController.http +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/TestDemoController.http @@ -1,7 +1,9 @@ ### 请求 /tool/test-demo/get æŽ¥å£ => æˆåŠŸ GET {{baseUrl}}/tool/test-demo/get?id=1 Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} ### 请求 /tool/test-demo/list æŽ¥å£ => æˆåŠŸ GET {{baseUrl}}/tool/test-demo/list?ids=1 Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/ToolTestDemoController.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/TestDemoController.java similarity index 60% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/ToolTestDemoController.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/TestDemoController.java index 2249af538c..dcf2602078 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/ToolTestDemoController.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/TestDemoController.java @@ -1,15 +1,13 @@ -package cn.iocoder.yudao.adminserver.modules.tool.controller.test; +package cn.iocoder.yudao.module.tool.controller.admin.test; -import cn.hutool.core.thread.ThreadUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import cn.iocoder.yudao.framework.tracer.core.annotation.BizTrace; -import cn.iocoder.yudao.adminserver.modules.tool.controller.test.vo.*; -import cn.iocoder.yudao.adminserver.modules.tool.convert.test.ToolTestDemoConvert; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.test.ToolTestDemoDO; -import cn.iocoder.yudao.adminserver.modules.tool.service.test.ToolTestDemoService; +import cn.iocoder.yudao.module.tool.controller.admin.test.vo.*; +import cn.iocoder.yudao.module.tool.convert.test.TestDemoConvert; +import cn.iocoder.yudao.module.tool.dal.dataobject.test.TestDemoDO; +import cn.iocoder.yudao.module.tool.service.test.TestDemoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; @@ -23,31 +21,30 @@ import javax.validation.Valid; import java.io.IOException; import java.util.Collection; import java.util.List; -import java.util.concurrent.TimeUnit; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; -@Api(tags = "测试示例") +@Api(tags = "管ç†åŽå° - 测试示例") @RestController @RequestMapping("/tool/test-demo") @Validated -public class ToolTestDemoController { +public class TestDemoController { @Resource - private ToolTestDemoService testDemoService; + private TestDemoService testDemoService; @PostMapping("/create") @ApiOperation("创建测试示例") @PreAuthorize("@ss.hasPermission('tool:test-demo:create')") - public CommonResult createTestDemo(@Valid @RequestBody ToolTestDemoCreateReqVO createReqVO) { + public CommonResult createTestDemo(@Valid @RequestBody TestDemoCreateReqVO createReqVO) { return success(testDemoService.createTestDemo(createReqVO)); } @PutMapping("/update") @ApiOperation("更新测试示例") @PreAuthorize("@ss.hasPermission('tool:test-demo:update')") - public CommonResult updateTestDemo(@Valid @RequestBody ToolTestDemoUpdateReqVO updateReqVO) { + public CommonResult updateTestDemo(@Valid @RequestBody TestDemoUpdateReqVO updateReqVO) { testDemoService.updateTestDemo(updateReqVO); return success(true); } @@ -66,12 +63,9 @@ public class ToolTestDemoController { @ApiImplicitParam(name = "id", value = "ç¼–å·", required = true, dataTypeClass = Long.class) @PreAuthorize("@ss.hasPermission('tool:test-demo:query')") // @Lock4j // 分布å¼é” - public CommonResult getTestDemo(@RequestParam("id") Long id) { - if (true) { // 测试分布å¼é” - ThreadUtil.sleep(5, TimeUnit.SECONDS); - } - ToolTestDemoDO testDemo = testDemoService.getTestDemo(id); - return success(ToolTestDemoConvert.INSTANCE.convert(testDemo)); + public CommonResult getTestDemo(@RequestParam("id") Long id) { + TestDemoDO testDemo = testDemoService.getTestDemo(id); + return success(TestDemoConvert.INSTANCE.convert(testDemo)); } @GetMapping("/list") @@ -79,30 +73,29 @@ public class ToolTestDemoController { @ApiImplicitParam(name = "ids", value = "ç¼–å·åˆ—表", required = true, dataTypeClass = List.class) @PreAuthorize("@ss.hasPermission('tool:test-demo:query')") // @RateLimiter(name = "backendA") - @BizTrace(id = "#ids", type = "'user'") - public CommonResult> getTestDemoList(@RequestParam("ids") Collection ids) { - List list = testDemoService.getTestDemoList(ids); - return success(ToolTestDemoConvert.INSTANCE.convertList(list)); + public CommonResult> getTestDemoList(@RequestParam("ids") Collection ids) { + List list = testDemoService.getTestDemoList(ids); + return success(TestDemoConvert.INSTANCE.convertList(list)); } @GetMapping("/page") @ApiOperation("获得测试示例分页") @PreAuthorize("@ss.hasPermission('tool:test-demo:query')") - public CommonResult> getTestDemoPage(@Valid ToolTestDemoPageReqVO pageVO) { - PageResult pageResult = testDemoService.getTestDemoPage(pageVO); - return success(ToolTestDemoConvert.INSTANCE.convertPage(pageResult)); + public CommonResult> getTestDemoPage(@Valid TestDemoPageReqVO pageVO) { + PageResult pageResult = testDemoService.getTestDemoPage(pageVO); + return success(TestDemoConvert.INSTANCE.convertPage(pageResult)); } @GetMapping("/export-excel") @ApiOperation("导出测试示例 Excel") @PreAuthorize("@ss.hasPermission('tool:test-demo:export')") @OperateLog(type = EXPORT) - public void exportTestDemoExcel(@Valid ToolTestDemoExportReqVO exportReqVO, + public void exportTestDemoExcel(@Valid TestDemoExportReqVO exportReqVO, HttpServletResponse response) throws IOException { - List list = testDemoService.getTestDemoList(exportReqVO); + List list = testDemoService.getTestDemoList(exportReqVO); // 导出 Excel - List datas = ToolTestDemoConvert.INSTANCE.convertList02(list); - ExcelUtils.write(response, "测试示例.xls", "æ•°æ®", ToolTestDemoExcelVO.class, datas); + List datas = TestDemoConvert.INSTANCE.convertList02(list); + ExcelUtils.write(response, "测试示例.xls", "æ•°æ®", TestDemoExcelVO.class, datas); } } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoBaseVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoBaseVO.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoBaseVO.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoBaseVO.java index 0e1af3c281..4defee52db 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoBaseVO.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.tool.controller.test.vo; +package cn.iocoder.yudao.module.tool.controller.admin.test.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -10,7 +10,7 @@ import javax.validation.constraints.NotNull; * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ */ @Data -public class ToolTestDemoBaseVO { +public class TestDemoBaseVO { @ApiModelProperty(value = "åå­—", required = true, example = "芋é“") @NotNull(message = "åå­—ä¸èƒ½ä¸ºç©º") diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoCreateReqVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoCreateReqVO.java similarity index 51% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoCreateReqVO.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoCreateReqVO.java index b1866f780e..7c6f6d19f3 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoCreateReqVO.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoCreateReqVO.java @@ -1,14 +1,14 @@ -package cn.iocoder.yudao.adminserver.modules.tool.controller.test.vo; +package cn.iocoder.yudao.module.tool.controller.admin.test.vo; import io.swagger.annotations.ApiModel; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; -@ApiModel("字典类型创建 Request VO") +@ApiModel("管ç†åŽå° - 字典类型创建 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class ToolTestDemoCreateReqVO extends ToolTestDemoBaseVO { +public class TestDemoCreateReqVO extends TestDemoBaseVO { } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoExcelVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoExcelVO.java similarity index 67% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoExcelVO.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoExcelVO.java index 384c08bc52..c947d30326 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoExcelVO.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoExcelVO.java @@ -1,8 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.tool.controller.test.vo; +package cn.iocoder.yudao.module.tool.controller.admin.test.vo; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.module.infra.enums.DictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @@ -14,7 +13,7 @@ import java.util.Date; * @author 芋艿 */ @Data -public class ToolTestDemoExcelVO { +public class TestDemoExcelVO { @ExcelProperty("ç¼–å·") private Long id; @@ -23,15 +22,15 @@ public class ToolTestDemoExcelVO { private String name; @ExcelProperty(value = "状æ€", converter = DictConvert.class) - @DictFormat(cn.iocoder.yudao.module.system.enums.DictTypeConstants.COMMON_STATUS) + @DictFormat("") private Integer status; @ExcelProperty(value = "类型", converter = DictConvert.class) - @DictFormat(cn.iocoder.yudao.module.system.enums.DictTypeConstants.OPERATE_TYPE) + @DictFormat("sys_common_status") private Integer type; @ExcelProperty(value = "分类", converter = DictConvert.class) - @DictFormat(DictTypeConstants.REDIS_TIMEOUT_TYPE) + @DictFormat("inf_redis_timeout_type") private Integer category; @ExcelProperty("备注") diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoExportReqVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoExportReqVO.java similarity index 82% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoExportReqVO.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoExportReqVO.java index 84bce9e946..78924ec770 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoExportReqVO.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.tool.controller.test.vo; +package cn.iocoder.yudao.module.tool.controller.admin.test.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -9,9 +9,9 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel(value = "字典类型 Excel 导出 Request VO", description = "傿•°å’Œ ToolTestDemoPageReqVO 是一致的") +@ApiModel(value = "管ç†åŽå° - 字典类型 Excel 导出 Request VO", description = "傿•°å’Œ TestDemoPageReqVO 是一致的") @Data -public class ToolTestDemoExportReqVO { +public class TestDemoExportReqVO { @ApiModelProperty(value = "åå­—", example = "芋é“") private String name; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoPageReqVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoPageReqVO.java similarity index 87% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoPageReqVO.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoPageReqVO.java index 05fa1573e4..39180a784f 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoPageReqVO.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.tool.controller.test.vo; +package cn.iocoder.yudao.module.tool.controller.admin.test.vo; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; @@ -12,11 +12,11 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel("字典类型分页 Request VO") +@ApiModel("管ç†åŽå° - 字典类型分页 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class ToolTestDemoPageReqVO extends PageParam { +public class TestDemoPageReqVO extends PageParam { @ApiModelProperty(value = "åå­—", example = "芋é“") private String name; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoRespVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoRespVO.java similarity index 72% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoRespVO.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoRespVO.java index e679fd4b0f..61d2b60389 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoRespVO.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.tool.controller.test.vo; +package cn.iocoder.yudao.module.tool.controller.admin.test.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -8,11 +8,11 @@ import lombok.ToString; import java.util.Date; -@ApiModel("字典类型 Response VO") +@ApiModel("管ç†åŽå° - 字典类型 Response VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class ToolTestDemoRespVO extends ToolTestDemoBaseVO { +public class TestDemoRespVO extends TestDemoBaseVO { @ApiModelProperty(value = "ç¼–å·", required = true, example = "1") private Long id; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoUpdateReqVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoUpdateReqVO.java similarity index 70% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoUpdateReqVO.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoUpdateReqVO.java index ef05d44c65..eceb3a0d3c 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/controller/test/vo/ToolTestDemoUpdateReqVO.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.tool.controller.test.vo; +package cn.iocoder.yudao.module.tool.controller.admin.test.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -8,11 +8,11 @@ import lombok.ToString; import javax.validation.constraints.NotNull; -@ApiModel("字典类型更新 Request VO") +@ApiModel("管ç†åŽå° - 字典类型更新 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class ToolTestDemoUpdateReqVO extends ToolTestDemoBaseVO { +public class TestDemoUpdateReqVO extends TestDemoBaseVO { @ApiModelProperty(value = "ç¼–å·", required = true, example = "1") @NotNull(message = "ç¼–å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/app/package-info.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/app/package-info.java new file mode 100644 index 0000000000..3489a716e7 --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/app/package-info.java @@ -0,0 +1,4 @@ +/** + * å ä½ï¼Œé¿å… package 无法æäº¤åˆ° Git 仓库 + */ +package cn.iocoder.yudao.module.tool.controller.app; diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/package-info.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/package-info.java new file mode 100644 index 0000000000..f06bab1671 --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/package-info.java @@ -0,0 +1,6 @@ +/** + * æä¾› RESTful API ç»™å‰ç«¯ï¼š + * 1. admin 包:æä¾›ç»™ç®¡ç†åŽå° yudao-ui-admin å‰ç«¯é¡¹ç›® + * 2. app 包:æä¾›ç»™ç”¨æˆ· APP yudao-ui-app å‰ç«¯é¡¹ç›®ï¼Œå®ƒçš„ Controller å’Œ VO éƒ½è¦æ·»åŠ  App å‰ç¼€ï¼Œç”¨äºŽå’Œç®¡ç†åŽå°è¿›è¡ŒåŒºåˆ† + */ +package cn.iocoder.yudao.module.tool.controller; diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/convert/codegen/CodegenConvert.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/convert/codegen/CodegenConvert.java new file mode 100644 index 0000000000..08ab991bfb --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/convert/codegen/CodegenConvert.java @@ -0,0 +1,70 @@ +package cn.iocoder.yudao.module.tool.convert.codegen; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.CodegenDetailRespVO; +import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.CodegenPreviewRespVO; +import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.CodegenUpdateReqVO; +import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.column.CodegenColumnRespVO; +import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table.CodegenTableRespVO; +import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table.SchemaTableRespVO; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenColumnDO; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenTableDO; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaColumnDO; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaTableDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Mapper +public interface CodegenConvert { + + CodegenConvert INSTANCE = Mappers.getMapper(CodegenConvert.class); + + // ========== InformationSchemaTableDO å’Œ InformationSchemaColumnDO 相关 ========== + + CodegenTableDO convert(SchemaTableDO bean); + + List convertList(List list); + + CodegenTableRespVO convert(SchemaColumnDO bean); + + // ========== CodegenTableDO 相关 ========== + +// List convertList02(List list); + + CodegenTableRespVO convert(CodegenTableDO bean); + + PageResult convertPage(PageResult page); + + // ========== CodegenTableDO 相关 ========== + + List convertList02(List list); + + CodegenTableDO convert(CodegenUpdateReqVO.Table bean); + + List convertList03(List columns); + + List convertList04(List list); + + // ========== 其它 ========== + + default CodegenDetailRespVO convert(CodegenTableDO table, List columns) { + CodegenDetailRespVO respVO = new CodegenDetailRespVO(); + respVO.setTable(convert(table)); + respVO.setColumns(convertList02(columns)); + return respVO; + } + + default List convert(Map codes) { + return codes.entrySet().stream().map(entry -> { + CodegenPreviewRespVO respVO = new CodegenPreviewRespVO(); + respVO.setFilePath(entry.getKey()); + respVO.setCode(entry.getValue()); + return respVO; + }).collect(Collectors.toList()); + } + +} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/convert/test/TestDemoConvert.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/convert/test/TestDemoConvert.java new file mode 100644 index 0000000000..5f2a9e5250 --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/convert/test/TestDemoConvert.java @@ -0,0 +1,32 @@ +package cn.iocoder.yudao.module.tool.convert.test; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; + +import cn.iocoder.yudao.module.tool.controller.admin.test.vo.TestDemoCreateReqVO; +import cn.iocoder.yudao.module.tool.controller.admin.test.vo.TestDemoExcelVO; +import cn.iocoder.yudao.module.tool.controller.admin.test.vo.TestDemoRespVO; +import cn.iocoder.yudao.module.tool.controller.admin.test.vo.TestDemoUpdateReqVO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import cn.iocoder.yudao.module.tool.dal.dataobject.test.TestDemoDO; + +@Mapper +public interface TestDemoConvert { + + TestDemoConvert INSTANCE = Mappers.getMapper(TestDemoConvert.class); + + TestDemoDO convert(TestDemoCreateReqVO bean); + + TestDemoDO convert(TestDemoUpdateReqVO bean); + + TestDemoRespVO convert(TestDemoDO bean); + + List convertList(List list); + + PageResult convertPage(PageResult page); + + List convertList02(List list); + +} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/dataobject/codegen/ToolCodegenColumnDO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/CodegenColumnDO.java similarity index 83% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/dataobject/codegen/ToolCodegenColumnDO.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/CodegenColumnDO.java index 73f9d5dd20..65f1206400 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/dataobject/codegen/ToolCodegenColumnDO.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/CodegenColumnDO.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen; +package cn.iocoder.yudao.module.tool.dal.dataobject.codegen; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.adminserver.modules.tool.enums.codegen.ToolCodegenColumnHtmlTypeEnum; -import cn.iocoder.yudao.adminserver.modules.tool.enums.codegen.ToolCodegenColumnListConditionEnum; +import cn.iocoder.yudao.module.tool.enums.codegen.CodegenColumnHtmlTypeEnum; +import cn.iocoder.yudao.module.tool.enums.codegen.CodegenColumnListConditionEnum; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -18,7 +18,7 @@ import lombok.experimental.Accessors; @Data @Accessors(chain = true) @EqualsAndHashCode(callSuper = true) -public class ToolCodegenColumnDO extends BaseDO { +public class CodegenColumnDO extends BaseDO { /** * ID ç¼–å· @@ -28,7 +28,7 @@ public class ToolCodegenColumnDO extends BaseDO { /** * è¡¨ç¼–å· * - * å…³è” {@link ToolCodegenTableDO#getId()} + * å…³è” {@link CodegenTableDO#getId()} */ private Long tableId; @@ -104,7 +104,7 @@ public class ToolCodegenColumnDO extends BaseDO { /** * List 查询æ“作的æ¡ä»¶ç±»åž‹ * - * 枚举 {@link ToolCodegenColumnListConditionEnum} + * 枚举 {@link CodegenColumnListConditionEnum} */ private String listOperationCondition; /** @@ -117,7 +117,7 @@ public class ToolCodegenColumnDO extends BaseDO { /** * 显示类型 * - * 枚举 {@link ToolCodegenColumnHtmlTypeEnum} + * 枚举 {@link CodegenColumnHtmlTypeEnum} */ private String htmlType; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/dataobject/codegen/ToolCodegenTableDO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/CodegenTableDO.java similarity index 84% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/dataobject/codegen/ToolCodegenTableDO.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/CodegenTableDO.java index 33546b6637..c299e013bb 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/dataobject/codegen/ToolCodegenTableDO.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/CodegenTableDO.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen; +package cn.iocoder.yudao.module.tool.dal.dataobject.codegen; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.adminserver.modules.tool.enums.codegen.ToolCodegenTemplateTypeEnum; +import cn.iocoder.yudao.module.tool.enums.codegen.CodegenTemplateTypeEnum; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; @@ -16,7 +16,7 @@ import lombok.experimental.Accessors; @Data @Accessors(chain = true) @EqualsAndHashCode(callSuper = true) -public class ToolCodegenTableDO extends BaseDO { +public class CodegenTableDO extends BaseDO { /** * ID ç¼–å· @@ -26,7 +26,7 @@ public class ToolCodegenTableDO extends BaseDO { /** * 导入类型 * - * 枚举 {@link ToolCodegenTemplateTypeEnum} + * 枚举 {@link CodegenTemplateTypeEnum} */ private Integer importType; @@ -79,7 +79,7 @@ public class ToolCodegenTableDO extends BaseDO { /** * 模æ¿ç±»åž‹ * - * 枚举 {@link ToolCodegenTemplateTypeEnum} + * 枚举 {@link CodegenTemplateTypeEnum} */ private Integer templateType; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/dataobject/codegen/ToolSchemaColumnDO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/SchemaColumnDO.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/dataobject/codegen/ToolSchemaColumnDO.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/SchemaColumnDO.java index e78e16f533..d7c2b0d22d 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/dataobject/codegen/ToolSchemaColumnDO.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/SchemaColumnDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen; +package cn.iocoder.yudao.module.tool.dal.dataobject.codegen; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; @@ -13,7 +13,7 @@ import lombok.Data; @TableName(value = "information_schema.columns", autoResultMap = true) @Data @Builder -public class ToolSchemaColumnDO { +public class SchemaColumnDO { /** * 表åç§° diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/dataobject/codegen/ToolSchemaTableDO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/SchemaTableDO.java similarity index 83% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/dataobject/codegen/ToolSchemaTableDO.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/SchemaTableDO.java index e3e70352d8..eaec25fae7 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/dataobject/codegen/ToolSchemaTableDO.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/SchemaTableDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen; +package cn.iocoder.yudao.module.tool.dal.dataobject.codegen; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Builder; @@ -14,7 +14,7 @@ import java.util.Date; @TableName(value = "information_schema.tables", autoResultMap = true) @Data @Builder -public class ToolSchemaTableDO { +public class SchemaTableDO { /** * æ•°æ®åº“ diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/dataobject/test/ToolTestDemoDO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/test/TestDemoDO.java similarity index 81% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/dataobject/test/ToolTestDemoDO.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/test/TestDemoDO.java index 0af46d798d..fcb197307e 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/dataobject/test/ToolTestDemoDO.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/test/TestDemoDO.java @@ -1,12 +1,11 @@ -package cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.test; +package cn.iocoder.yudao.module.tool.dal.dataobject.test; import lombok.*; -import java.util.*; import com.baomidou.mybatisplus.annotation.*; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; /** - * 字典类型 DO + * 测试示例 DO * * @author 芋艿 */ @@ -17,7 +16,7 @@ import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; @Builder @NoArgsConstructor @AllArgsConstructor -public class ToolTestDemoDO extends BaseDO { +public class TestDemoDO extends BaseDO { /** * ç¼–å· diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/CodegenColumnMapper.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/CodegenColumnMapper.java new file mode 100644 index 0000000000..8c1e47ea9a --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/CodegenColumnMapper.java @@ -0,0 +1,22 @@ +package cn.iocoder.yudao.module.tool.dal.mysql.codegen; + +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenColumnDO; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface CodegenColumnMapper extends BaseMapperX { + + default List selectListByTableId(Long tableId) { + return selectList(new QueryWrapper().eq("table_id", tableId) + .orderByAsc("ordinal_position")); + } + + default void deleteListByTableId(Long tableId) { + delete(new QueryWrapper().eq("table_id", tableId)); + } + +} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/CodegenTableMapper.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/CodegenTableMapper.java new file mode 100644 index 0000000000..292941b1d8 --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/CodegenTableMapper.java @@ -0,0 +1,25 @@ +package cn.iocoder.yudao.module.tool.dal.mysql.codegen; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; +import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table.CodegenTablePageReqVO; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenTableDO; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface CodegenTableMapper extends BaseMapperX { + + default CodegenTableDO selectByTableName(String tableName) { + return selectOne(new QueryWrapper().eq("table_name", tableName)); + } + + default PageResult selectPage(CodegenTablePageReqVO pageReqVO) { + return selectPage(pageReqVO, new QueryWrapperX() + .likeIfPresent("table_name", pageReqVO.getTableName()) + .likeIfPresent("table_comment", pageReqVO.getTableComment()) + .betweenIfPresent("create_time", pageReqVO.getBeginCreateTime(), pageReqVO.getEndCreateTime())); + } + +} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/SchemaColumnMapper.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/SchemaColumnMapper.java new file mode 100644 index 0000000000..52bb6ba2c7 --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/SchemaColumnMapper.java @@ -0,0 +1,19 @@ +package cn.iocoder.yudao.module.tool.dal.mysql.codegen; + +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaColumnDO; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface SchemaColumnMapper extends BaseMapperX { + + default List selectListByTableName(String tableSchema, String tableName) { + return selectList(new QueryWrapper().eq("table_name", tableName) + .eq("table_schema", tableSchema) + .orderByAsc("ordinal_position")); + } + +} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/SchemaTableMapper.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/SchemaTableMapper.java new file mode 100644 index 0000000000..51d00c2240 --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/SchemaTableMapper.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.tool.dal.mysql.codegen; + +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaTableDO; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Collection; +import java.util.List; + +@Mapper +public interface SchemaTableMapper extends BaseMapperX { + + default List selectList(Collection tableSchemas, String tableName, String tableComment) { + return selectList(new QueryWrapperX().in("table_schema", tableSchemas) + .likeIfPresent("table_name", tableName) + .likeIfPresent("table_comment", tableComment)); + } + + default SchemaTableDO selectByTableSchemaAndTableName(String tableSchema, String tableName) { + return selectOne(new QueryWrapper().eq("table_schema",tableSchema) + .eq("table_name", tableName)); + } + +} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/test/ToolTestDemoMapper.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/test/TestDemoMapper.java similarity index 64% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/test/ToolTestDemoMapper.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/test/TestDemoMapper.java index 4bee17eb19..59c249b025 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/test/ToolTestDemoMapper.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/test/TestDemoMapper.java @@ -1,24 +1,20 @@ -package cn.iocoder.yudao.adminserver.modules.tool.dal.mysql.test; +package cn.iocoder.yudao.module.tool.dal.mysql.test; import java.util.*; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.test.ToolTestDemoDO; +import cn.iocoder.yudao.module.tool.controller.admin.test.vo.TestDemoExportReqVO; +import cn.iocoder.yudao.module.tool.controller.admin.test.vo.TestDemoPageReqVO; +import cn.iocoder.yudao.module.tool.dal.dataobject.test.TestDemoDO; import org.apache.ibatis.annotations.Mapper; -import cn.iocoder.yudao.adminserver.modules.tool.controller.test.vo.*; -/** - * 字典类型 Mapper - * - * @author 芋艿 - */ @Mapper -public interface ToolTestDemoMapper extends BaseMapperX { +public interface TestDemoMapper extends BaseMapperX { - default PageResult selectPage(ToolTestDemoPageReqVO reqVO) { - return selectPage(reqVO, new QueryWrapperX() + default PageResult selectPage(TestDemoPageReqVO reqVO) { + return selectPage(reqVO, new QueryWrapperX() .likeIfPresent("name", reqVO.getName()) .eqIfPresent("status", reqVO.getStatus()) .eqIfPresent("type", reqVO.getType()) @@ -28,8 +24,8 @@ public interface ToolTestDemoMapper extends BaseMapperX { .orderByDesc("id")); } - default List selectList(ToolTestDemoExportReqVO reqVO) { - return selectList(new QueryWrapperX() + default List selectList(TestDemoExportReqVO reqVO) { + return selectList(new QueryWrapperX() .likeIfPresent("name", reqVO.getName()) .eqIfPresent("status", reqVO.getStatus()) .eqIfPresent("type", reqVO.getType()) diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/enums/codegen/ToolCodegenColumnHtmlTypeEnum.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenColumnHtmlTypeEnum.java similarity index 83% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/enums/codegen/ToolCodegenColumnHtmlTypeEnum.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenColumnHtmlTypeEnum.java index 22dbdd2b76..c7d968410e 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/enums/codegen/ToolCodegenColumnHtmlTypeEnum.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenColumnHtmlTypeEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.tool.enums.codegen; +package cn.iocoder.yudao.module.tool.enums.codegen; import lombok.AllArgsConstructor; import lombok.Getter; @@ -8,7 +8,7 @@ import lombok.Getter; */ @AllArgsConstructor @Getter -public enum ToolCodegenColumnHtmlTypeEnum { +public enum CodegenColumnHtmlTypeEnum { INPUT("input"), // 文本框 TEXTAREA("textarea"), // 文本域 diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/enums/codegen/ToolCodegenColumnListConditionEnum.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenColumnListConditionEnum.java similarity index 74% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/enums/codegen/ToolCodegenColumnListConditionEnum.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenColumnListConditionEnum.java index 0783c9869f..4264b9aa59 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/enums/codegen/ToolCodegenColumnListConditionEnum.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenColumnListConditionEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.tool.enums.codegen; +package cn.iocoder.yudao.module.tool.enums.codegen; import lombok.AllArgsConstructor; import lombok.Getter; @@ -8,7 +8,7 @@ import lombok.Getter; */ @AllArgsConstructor @Getter -public enum ToolCodegenColumnListConditionEnum { +public enum CodegenColumnListConditionEnum { EQ("="), NE("!="), diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/enums/codegen/ToolCodegenImportTypeEnum.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenImportTypeEnum.java similarity index 76% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/enums/codegen/ToolCodegenImportTypeEnum.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenImportTypeEnum.java index 746cb7181d..62c7e99526 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/enums/codegen/ToolCodegenImportTypeEnum.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenImportTypeEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.tool.enums.codegen; +package cn.iocoder.yudao.module.tool.enums.codegen; import lombok.AllArgsConstructor; import lombok.Getter; @@ -10,7 +10,7 @@ import lombok.Getter; */ @AllArgsConstructor @Getter -public enum ToolCodegenImportTypeEnum { +public enum CodegenImportTypeEnum { DB(1), // 从 information_schema çš„ table å’Œ columns 表导入 SQL(2); // 基于建表 SQL 语å¥å¯¼å…¥ diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/enums/codegen/ToolCodegenTemplateTypeEnum.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenTemplateTypeEnum.java similarity index 73% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/enums/codegen/ToolCodegenTemplateTypeEnum.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenTemplateTypeEnum.java index b192c31734..9f96aaf971 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/enums/codegen/ToolCodegenTemplateTypeEnum.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenTemplateTypeEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.tool.enums.codegen; +package cn.iocoder.yudao.module.tool.enums.codegen; import lombok.AllArgsConstructor; import lombok.Getter; @@ -10,7 +10,7 @@ import lombok.Getter; */ @AllArgsConstructor @Getter -public enum ToolCodegenTemplateTypeEnum { +public enum CodegenTemplateTypeEnum { CRUD(1), // å•表(增删改查) TREE(2), // 树表(增删改查) diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/package-info.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/package-info.java new file mode 100644 index 0000000000..c2b493d907 --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/package-info.java @@ -0,0 +1,4 @@ +/** + * å ä½ + */ +package cn.iocoder.yudao.module.tool.enums; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/codegen/config/CodegenConfiguration.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/codegen/config/CodegenConfiguration.java similarity index 76% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/codegen/config/CodegenConfiguration.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/codegen/config/CodegenConfiguration.java index 943638c1ba..b19add66cd 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/codegen/config/CodegenConfiguration.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/codegen/config/CodegenConfiguration.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.tool.framework.codegen.config; +package cn.iocoder.yudao.module.tool.framework.codegen.config; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Configuration; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/codegen/config/CodegenProperties.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/codegen/config/CodegenProperties.java similarity index 89% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/codegen/config/CodegenProperties.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/codegen/config/CodegenProperties.java index c383fc55d4..ba113cf5b6 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/codegen/config/CodegenProperties.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/codegen/config/CodegenProperties.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.tool.framework.codegen.config; +package cn.iocoder.yudao.module.tool.framework.codegen.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/codegen/package-info.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/codegen/package-info.java new file mode 100644 index 0000000000..3348d54d51 --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/codegen/package-info.java @@ -0,0 +1,4 @@ +/** + * 代ç ç”Ÿæˆå™¨ + */ +package cn.iocoder.yudao.module.tool.framework.codegen; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/package-info.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/package-info.java similarity index 55% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/package-info.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/package-info.java index f9a66d3640..76dbd50012 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/framework/package-info.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/package-info.java @@ -3,4 +3,4 @@ * * @author èŠ‹é“æºç  */ -package cn.iocoder.yudao.adminserver.modules.tool.framework; +package cn.iocoder.yudao.module.tool.framework; diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/package-info.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/package-info.java new file mode 100644 index 0000000000..4568d4c3d6 --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/package-info.java @@ -0,0 +1,8 @@ +/** + * tool 模å—下,我们放研å‘工具,æå‡ç ”呿•ˆçŽ‡ä¸Žè´¨é‡ã€‚ + * 例如说:代ç ç”Ÿæˆå™¨ã€æŽ¥å£æ–‡æ¡£ç­‰ç­‰ + * + * 1. Controller URL:以 /tool/ 开头,é¿å…和其它 Module å†²çª + * 2. DataObject 表å:以 tool_ 开头,方便在数æ®åº“中区分 + */ +package cn.iocoder.yudao.module.tool; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenService.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenService.java similarity index 69% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenService.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenService.java index fbe61c4b16..7b8f84b2c8 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenService.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenService.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.adminserver.modules.tool.service.codegen; +package cn.iocoder.yudao.module.tool.service.codegen; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.ToolCodegenUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.table.ToolCodegenTablePageReqVO; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolCodegenColumnDO; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolCodegenTableDO; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolSchemaTableDO; +import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.CodegenUpdateReqVO; +import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table.CodegenTablePageReqVO; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenColumnDO; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenTableDO; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaTableDO; import java.util.List; import java.util.Map; @@ -15,7 +15,7 @@ import java.util.Map; * * @author èŠ‹é“æºç  */ -public interface ToolCodegenService { +public interface CodegenService { /** * 基于 SQL 建表语å¥ï¼Œåˆ›å»ºä»£ç ç”Ÿæˆå™¨çš„表定义 @@ -46,7 +46,7 @@ public interface ToolCodegenService { * * @param updateReqVO æ›´æ–°ä¿¡æ¯ */ - void updateCodegen(ToolCodegenUpdateReqVO updateReqVO); + void updateCodegen(CodegenUpdateReqVO updateReqVO); /** * 基于数æ®åº“çš„è¡¨ç»“æž„ï¼ŒåŒæ­¥æ•°æ®åº“的表和字段定义 @@ -76,7 +76,7 @@ public interface ToolCodegenService { * @param pageReqVO 分页æ¡ä»¶ * @return 表定义分页 */ - PageResult getCodegenTablePage(ToolCodegenTablePageReqVO pageReqVO); + PageResult getCodegenTablePage(CodegenTablePageReqVO pageReqVO); /** * 获得表定义 @@ -84,14 +84,14 @@ public interface ToolCodegenService { * @param id è¡¨ç¼–å· * @return 表定义 */ - ToolCodegenTableDO getCodegenTablePage(Long id); + CodegenTableDO getCodegenTablePage(Long id); /** * 获得全部表定义 * * @return 表定义数组 */ - List getCodeGenTableList(); + List getCodeGenTableList(); /** * 获得指定表的字段定义数组 @@ -99,7 +99,7 @@ public interface ToolCodegenService { * @param tableId è¡¨ç¼–å· * @return 字段定义数组 */ - List getCodegenColumnListByTableId(Long tableId); + List getCodegenColumnListByTableId(Long tableId); /** * 执行指定表的代ç ç”Ÿæˆ @@ -116,6 +116,6 @@ public interface ToolCodegenService { * @param tableComment 表æè¿° * @return 表定义列表 */ - List getSchemaTableList(String tableName, String tableComment); + List getSchemaTableList(String tableName, String tableComment); } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/impl/ToolCodegenServiceImpl.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenServiceImpl.java similarity index 60% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/impl/ToolCodegenServiceImpl.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenServiceImpl.java index f3b69fba25..f478244d00 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/impl/ToolCodegenServiceImpl.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenServiceImpl.java @@ -1,22 +1,24 @@ -package cn.iocoder.yudao.adminserver.modules.tool.service.codegen.impl; +package cn.iocoder.yudao.module.tool.service.codegen; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.tool.framework.codegen.config.CodegenProperties; -import cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.ToolCodegenUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.table.ToolCodegenTablePageReqVO; -import cn.iocoder.yudao.adminserver.modules.tool.convert.codegen.ToolCodegenConvert; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolCodegenColumnDO; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolCodegenTableDO; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolSchemaColumnDO; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolSchemaTableDO; -import cn.iocoder.yudao.adminserver.modules.tool.dal.mysql.codegen.ToolCodegenColumnMapper; -import cn.iocoder.yudao.adminserver.modules.tool.dal.mysql.codegen.ToolCodegenTableMapper; -import cn.iocoder.yudao.adminserver.modules.tool.dal.mysql.codegen.ToolSchemaColumnMapper; -import cn.iocoder.yudao.adminserver.modules.tool.dal.mysql.codegen.ToolSchemaTableMapper; -import cn.iocoder.yudao.adminserver.modules.tool.enums.codegen.ToolCodegenImportTypeEnum; -import cn.iocoder.yudao.adminserver.modules.tool.service.codegen.ToolCodegenService; +import cn.iocoder.yudao.module.tool.framework.codegen.config.CodegenProperties; +import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.CodegenUpdateReqVO; +import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table.CodegenTablePageReqVO; +import cn.iocoder.yudao.module.tool.convert.codegen.CodegenConvert; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenColumnDO; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenTableDO; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaColumnDO; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaTableDO; +import cn.iocoder.yudao.module.tool.dal.mysql.codegen.CodegenColumnMapper; +import cn.iocoder.yudao.module.tool.dal.mysql.codegen.CodegenTableMapper; +import cn.iocoder.yudao.module.tool.dal.mysql.codegen.SchemaColumnMapper; +import cn.iocoder.yudao.module.tool.dal.mysql.codegen.SchemaTableMapper; +import cn.iocoder.yudao.module.tool.enums.codegen.CodegenImportTypeEnum; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import cn.iocoder.yudao.module.tool.service.codegen.inner.CodegenBuilder; +import cn.iocoder.yudao.module.tool.service.codegen.inner.CodegenEngine; +import cn.iocoder.yudao.module.tool.service.codegen.inner.CodegenSQLParser; import org.apache.commons.collections4.KeyValue; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -29,7 +31,7 @@ import java.util.Set; import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.adminserver.modules.tool.enums.ToolErrorCodeConstants.*; +import static cn.iocoder.yudao.module.tool.enums.ErrorCodeConstants.*; /** * 代ç ç”Ÿæˆ Service 实现类 @@ -37,27 +39,27 @@ import static cn.iocoder.yudao.adminserver.modules.tool.enums.ToolErrorCodeConst * @author èŠ‹é“æºç  */ @Service -public class ToolCodegenServiceImpl implements ToolCodegenService { +public class CodegenServiceImpl implements CodegenService { @Resource - private ToolSchemaTableMapper schemaTableMapper; + private SchemaTableMapper schemaTableMapper; @Resource - private ToolSchemaColumnMapper schemaColumnMapper; + private SchemaColumnMapper schemaColumnMapper; @Resource - private ToolCodegenTableMapper codegenTableMapper; + private CodegenTableMapper codegenTableMapper; @Resource - private ToolCodegenColumnMapper codegenColumnMapper; + private CodegenColumnMapper codegenColumnMapper; @Resource - private ToolCodegenBuilder codegenBuilder; + private CodegenBuilder codegenBuilder; @Resource - private ToolCodegenEngine codegenEngine; + private CodegenEngine codegenEngine; @Resource private CodegenProperties codegenProperties; - private Long createCodegen0(ToolCodegenImportTypeEnum importType, - ToolSchemaTableDO schemaTable, List schemaColumns) { + private Long createCodegen0(CodegenImportTypeEnum importType, + SchemaTableDO schemaTable, List schemaColumns) { // 校验导入的表和字段éžç©º if (schemaTable == null) { throw exception(CODEGEN_IMPORT_TABLE_NULL); @@ -70,12 +72,12 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { throw exception(CODEGEN_TABLE_EXISTS); } - // 构建 ToolCodegenTableDO 对象,æ’入到 DB 中 - ToolCodegenTableDO table = codegenBuilder.buildTable(schemaTable); + // 构建 CodegenTableDO 对象,æ’入到 DB 中 + CodegenTableDO table = codegenBuilder.buildTable(schemaTable); table.setImportType(importType.getType()); codegenTableMapper.insert(table); - // 构建 ToolCodegenColumnDO 数组,æ’入到 DB 中 - List columns = codegenBuilder.buildColumns(schemaColumns); + // 构建 CodegenColumnDO 数组,æ’入到 DB 中 + List columns = codegenBuilder.buildColumns(schemaColumns); columns.forEach(column -> { column.setTableId(table.getId()); codegenColumnMapper.insert(column); // TODO æ‰¹é‡æ’å…¥ @@ -86,17 +88,17 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { @Override public Long createCodegenListFromSQL(String sql) { // 从 SQL 中,获得数æ®åº“表结构 - ToolSchemaTableDO schemaTable; - List schemaColumns; + SchemaTableDO schemaTable; + List schemaColumns; try { - KeyValue> result = ToolCodegenSQLParser.parse(sql); + KeyValue> result = CodegenSQLParser.parse(sql); schemaTable = result.getKey(); schemaColumns = result.getValue(); } catch (Exception ex) { throw exception(CODEGEN_PARSE_SQL_ERROR); } // 导入 - return this.createCodegen0(ToolCodegenImportTypeEnum.SQL, schemaTable, schemaColumns); + return this.createCodegen0(CodegenImportTypeEnum.SQL, schemaTable, schemaColumns); } @Override @@ -104,10 +106,10 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { // 获å–当å‰schema String tableSchema = codegenProperties.getDbSchemas().iterator().next(); // 从数æ®åº“中,获得数æ®åº“表结构 - ToolSchemaTableDO schemaTable = schemaTableMapper.selectByTableSchemaAndTableName(tableSchema, tableName); - List schemaColumns = schemaColumnMapper.selectListByTableName(tableSchema, tableName); + SchemaTableDO schemaTable = schemaTableMapper.selectByTableSchemaAndTableName(tableSchema, tableName); + List schemaColumns = schemaColumnMapper.selectListByTableName(tableSchema, tableName); // 导入 - return this.createCodegen0(ToolCodegenImportTypeEnum.DB, schemaTable, schemaColumns); + return this.createCodegen0(CodegenImportTypeEnum.DB, schemaTable, schemaColumns); } @Override @@ -121,17 +123,17 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { @Override @Transactional(rollbackFor = Exception.class) - public void updateCodegen(ToolCodegenUpdateReqVO updateReqVO) { + public void updateCodegen(CodegenUpdateReqVO updateReqVO) { // 校验是å¦å·²ç»å­˜åœ¨ if (codegenTableMapper.selectById(updateReqVO.getTable().getId()) == null) { throw exception(CODEGEN_TABLE_NOT_EXISTS); } // æ›´æ–° table 表定义 - ToolCodegenTableDO updateTableObj = ToolCodegenConvert.INSTANCE.convert(updateReqVO.getTable()); + CodegenTableDO updateTableObj = CodegenConvert.INSTANCE.convert(updateReqVO.getTable()); codegenTableMapper.updateById(updateTableObj); // æ›´æ–° column 字段定义 - List updateColumnObjs = ToolCodegenConvert.INSTANCE.convertList03(updateReqVO.getColumns()); + List updateColumnObjs = CodegenConvert.INSTANCE.convertList03(updateReqVO.getColumns()); updateColumnObjs.forEach(updateColumnObj -> codegenColumnMapper.updateById(updateColumnObj)); } @@ -139,13 +141,13 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { @Transactional(rollbackFor = Exception.class) public void syncCodegenFromDB(Long tableId) { // 校验是å¦å·²ç»å­˜åœ¨ - ToolCodegenTableDO table = codegenTableMapper.selectById(tableId); + CodegenTableDO table = codegenTableMapper.selectById(tableId); if (table == null) { throw exception(CODEGEN_TABLE_NOT_EXISTS); } String tableSchema = codegenProperties.getDbSchemas().iterator().next(); // 从数æ®åº“中,获得数æ®åº“表结构 - List schemaColumns = schemaColumnMapper.selectListByTableName(tableSchema, table.getTableName()); + List schemaColumns = schemaColumnMapper.selectListByTableName(tableSchema, table.getTableName()); // æ‰§è¡ŒåŒæ­¥ this.syncCodegen0(tableId, schemaColumns); @@ -155,14 +157,14 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { @Transactional(rollbackFor = Exception.class) public void syncCodegenFromSQL(Long tableId, String sql) { // 校验是å¦å·²ç»å­˜åœ¨ - ToolCodegenTableDO table = codegenTableMapper.selectById(tableId); + CodegenTableDO table = codegenTableMapper.selectById(tableId); if (table == null) { throw exception(CODEGEN_TABLE_NOT_EXISTS); } // 从 SQL 中,获得数æ®åº“表结构 - List schemaColumns; + List schemaColumns; try { - KeyValue> result = ToolCodegenSQLParser.parse(sql); + KeyValue> result = CodegenSQLParser.parse(sql); schemaColumns = result.getValue(); } catch (Exception ex) { throw exception(CODEGEN_PARSE_SQL_ERROR); @@ -172,27 +174,27 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { this.syncCodegen0(tableId, schemaColumns); } - private void syncCodegen0(Long tableId, List schemaColumns) { + private void syncCodegen0(Long tableId, List schemaColumns) { // 校验导入的字段ä¸ä¸ºç©º if (CollUtil.isEmpty(schemaColumns)) { throw exception(CODEGEN_SYNC_COLUMNS_NULL); } - Set schemaColumnNames = CollectionUtils.convertSet(schemaColumns, ToolSchemaColumnDO::getColumnName); + Set schemaColumnNames = CollectionUtils.convertSet(schemaColumns, SchemaColumnDO::getColumnName); - // 构建 ToolCodegenColumnDO 数组,åªåŒæ­¥æ–°å¢žçš„字段 - List codegenColumns = codegenColumnMapper.selectListByTableId(tableId); - Set codegenColumnNames = CollectionUtils.convertSet(codegenColumns, ToolCodegenColumnDO::getColumnName); + // 构建 CodegenColumnDO 数组,åªåŒæ­¥æ–°å¢žçš„字段 + List codegenColumns = codegenColumnMapper.selectListByTableId(tableId); + Set codegenColumnNames = CollectionUtils.convertSet(codegenColumns, CodegenColumnDO::getColumnName); // 移除已ç»å­˜åœ¨çš„字段 schemaColumns.removeIf(column -> codegenColumnNames.contains(column.getColumnName())); // 计算需è¦åˆ é™¤çš„字段 Set deleteColumnIds = codegenColumns.stream().filter(column -> !schemaColumnNames.contains(column.getColumnName())) - .map(ToolCodegenColumnDO::getId).collect(Collectors.toSet()); + .map(CodegenColumnDO::getId).collect(Collectors.toSet()); if (CollUtil.isEmpty(schemaColumns) && CollUtil.isEmpty(deleteColumnIds)) { throw exception(CODEGEN_SYNC_NONE_CHANGE); } // æ’入新增的字段 - List columns = codegenBuilder.buildColumns(schemaColumns); + List columns = codegenBuilder.buildColumns(schemaColumns); columns.forEach(column -> { column.setTableId(tableId); codegenColumnMapper.insert(column); // TODO æ‰¹é‡æ’å…¥ @@ -218,33 +220,33 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { } @Override - public PageResult getCodegenTablePage(ToolCodegenTablePageReqVO pageReqVO) { + public PageResult getCodegenTablePage(CodegenTablePageReqVO pageReqVO) { return codegenTableMapper.selectPage(pageReqVO); } @Override - public ToolCodegenTableDO getCodegenTablePage(Long id) { + public CodegenTableDO getCodegenTablePage(Long id) { return codegenTableMapper.selectById(id); } @Override - public List getCodeGenTableList() { + public List getCodeGenTableList() { return codegenTableMapper.selectList(); } @Override - public List getCodegenColumnListByTableId(Long tableId) { + public List getCodegenColumnListByTableId(Long tableId) { return codegenColumnMapper.selectListByTableId(tableId); } @Override public Map generationCodes(Long tableId) { // 校验是å¦å·²ç»å­˜åœ¨ - ToolCodegenTableDO table = codegenTableMapper.selectById(tableId); + CodegenTableDO table = codegenTableMapper.selectById(tableId); if (codegenTableMapper.selectById(tableId) == null) { throw exception(CODEGEN_TABLE_NOT_EXISTS); } - List columns = codegenColumnMapper.selectListByTableId(tableId); + List columns = codegenColumnMapper.selectListByTableId(tableId); if (CollUtil.isEmpty(columns)) { throw exception(CODEGEN_COLUMN_NOT_EXISTS); } @@ -254,8 +256,8 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { } @Override - public List getSchemaTableList(String tableName, String tableComment) { - List tables = schemaTableMapper.selectList(codegenProperties.getDbSchemas(), tableName, tableComment); + public List getSchemaTableList(String tableName, String tableComment) { + List tables = schemaTableMapper.selectList(codegenProperties.getDbSchemas(), tableName, tableComment); // TODO 强制移除 Quartz 的表,未æ¥åšæˆå¯é…ç½® tables.removeIf(table -> table.getTableName().startsWith("QRTZ_")); tables.removeIf(table -> table.getTableName().startsWith("ACT_")); diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/impl/ToolCodegenBuilder.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenBuilder.java similarity index 70% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/impl/ToolCodegenBuilder.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenBuilder.java index 87e6ab6bd0..cf9b6c35d1 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/impl/ToolCodegenBuilder.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenBuilder.java @@ -1,16 +1,16 @@ -package cn.iocoder.yudao.adminserver.modules.tool.service.codegen.impl; +package cn.iocoder.yudao.module.tool.service.codegen.inner; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.adminserver.modules.tool.convert.codegen.ToolCodegenConvert; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolCodegenColumnDO; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolCodegenTableDO; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolSchemaColumnDO; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolSchemaTableDO; -import cn.iocoder.yudao.adminserver.modules.tool.enums.codegen.ToolCodegenColumnHtmlTypeEnum; -import cn.iocoder.yudao.adminserver.modules.tool.enums.codegen.ToolCodegenColumnListConditionEnum; -import cn.iocoder.yudao.adminserver.modules.tool.enums.codegen.ToolCodegenTemplateTypeEnum; +import cn.iocoder.yudao.module.tool.convert.codegen.CodegenConvert; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenColumnDO; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenTableDO; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaColumnDO; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaTableDO; +import cn.iocoder.yudao.module.tool.enums.codegen.CodegenColumnHtmlTypeEnum; +import cn.iocoder.yudao.module.tool.enums.codegen.CodegenColumnListConditionEnum; +import cn.iocoder.yudao.module.tool.enums.codegen.CodegenTemplateTypeEnum; import com.google.common.collect.Sets; import org.springframework.stereotype.Component; @@ -21,11 +21,11 @@ import static cn.hutool.core.text.CharSequenceUtil.*; /** * 代ç ç”Ÿæˆå™¨çš„ Builder,负责: - * 1. 将数æ®åº“的表 {@link ToolSchemaTableDO} å®šä¹‰ï¼Œæž„å»ºæˆ {@link ToolCodegenTableDO} - * 2. 将数æ®åº“的列 {@link ToolSchemaColumnDO} æž„å®šä¹‰ï¼Œå»ºæˆ {@link ToolCodegenColumnDO} + * 1. 将数æ®åº“的表 {@link SchemaTableDO} å®šä¹‰ï¼Œæž„å»ºæˆ {@link CodegenTableDO} + * 2. 将数æ®åº“的列 {@link SchemaColumnDO} æž„å®šä¹‰ï¼Œå»ºæˆ {@link CodegenColumnDO} */ @Component -public class ToolCodegenBuilder { +public class CodegenBuilder { /** * Module å字的映射 TODO åŽç»­æ¢³ç†åˆ°é…置类 @@ -40,30 +40,30 @@ public class ToolCodegenBuilder { .build(); /** - * 字段å与 {@link ToolCodegenColumnListConditionEnum} 的默认映射 + * 字段å与 {@link CodegenColumnListConditionEnum} 的默认映射 * 注æ„,字段的匹é…以åŽç¼€çš„æ–¹å¼ */ - private static final Map columnListOperationConditionMappings = - MapUtil.builder() - .put("name", ToolCodegenColumnListConditionEnum.LIKE) - .put("time", ToolCodegenColumnListConditionEnum.BETWEEN) - .put("date", ToolCodegenColumnListConditionEnum.BETWEEN) + private static final Map columnListOperationConditionMappings = + MapUtil.builder() + .put("name", CodegenColumnListConditionEnum.LIKE) + .put("time", CodegenColumnListConditionEnum.BETWEEN) + .put("date", CodegenColumnListConditionEnum.BETWEEN) .build(); /** - * 字段å与 {@link ToolCodegenColumnHtmlTypeEnum} 的默认映射 + * 字段å与 {@link CodegenColumnHtmlTypeEnum} 的默认映射 * 注æ„,字段的匹é…以åŽç¼€çš„æ–¹å¼ */ - private static final Map columnHtmlTypeMappings = - MapUtil.builder() - .put("status", ToolCodegenColumnHtmlTypeEnum.RADIO) - .put("sex", ToolCodegenColumnHtmlTypeEnum.RADIO) - .put("type", ToolCodegenColumnHtmlTypeEnum.SELECT) - .put("image", ToolCodegenColumnHtmlTypeEnum.UPLOAD_IMAGE) - .put("file", ToolCodegenColumnHtmlTypeEnum.UPLOAD_FILE) - .put("content", ToolCodegenColumnHtmlTypeEnum.EDITOR) - .put("time", ToolCodegenColumnHtmlTypeEnum.DATETIME) - .put("date", ToolCodegenColumnHtmlTypeEnum.DATETIME) + private static final Map columnHtmlTypeMappings = + MapUtil.builder() + .put("status", CodegenColumnHtmlTypeEnum.RADIO) + .put("sex", CodegenColumnHtmlTypeEnum.RADIO) + .put("type", CodegenColumnHtmlTypeEnum.SELECT) + .put("image", CodegenColumnHtmlTypeEnum.UPLOAD_IMAGE) + .put("file", CodegenColumnHtmlTypeEnum.UPLOAD_FILE) + .put("content", CodegenColumnHtmlTypeEnum.EDITOR) + .put("time", CodegenColumnHtmlTypeEnum.DATETIME) + .put("date", CodegenColumnHtmlTypeEnum.DATETIME) .build(); /** @@ -113,8 +113,8 @@ public class ToolCodegenBuilder { LIST_OPERATION_RESULT_EXCLUDE_COLUMN.remove("createTime"); // 创建时间,还是需è¦è¿”回的 } - public ToolCodegenTableDO buildTable(ToolSchemaTableDO schemaTable) { - ToolCodegenTableDO table = ToolCodegenConvert.INSTANCE.convert(schemaTable); + public CodegenTableDO buildTable(SchemaTableDO schemaTable) { + CodegenTableDO table = CodegenConvert.INSTANCE.convert(schemaTable); initTableDefault(table); return table; } @@ -124,7 +124,7 @@ public class ToolCodegenBuilder { * * @param table 表定义 */ - private void initTableDefault(ToolCodegenTableDO table) { + private void initTableDefault(CodegenTableDO table) { table.setModuleName(getFullModuleName(StrUtil.subBefore(table.getTableName(), '_', false))); // 第一个 _ å‰ç¼€çš„å‰é¢ï¼Œä½œä¸º module åå­— table.setBusinessName(toCamelCase(subAfter(table.getTableName(), @@ -133,11 +133,11 @@ public class ToolCodegenBuilder { table.setClassComment(subBefore(table.getTableComment(), // 去除结尾的表,作为类æè¿° '表', true)); table.setAuthor("芋艿"); // TODO ç¨åŽæ”¹æˆåˆ›å»ºäºº - table.setTemplateType(ToolCodegenTemplateTypeEnum.CRUD.getType()); + table.setTemplateType(CodegenTemplateTypeEnum.CRUD.getType()); } - public List buildColumns(List schemaColumns) { - List columns = ToolCodegenConvert.INSTANCE.convertList(schemaColumns); + public List buildColumns(List schemaColumns) { + List columns = CodegenConvert.INSTANCE.convertList(schemaColumns); columns.forEach(this::initColumnDefault); return columns; } @@ -147,7 +147,7 @@ public class ToolCodegenBuilder { * * @param column 列定义 */ - private void initColumnDefault(ToolCodegenColumnDO column) { + private void initColumnDefault(CodegenColumnDO column) { // å¤„ç† Java 相关的字段的默认值 processColumnJava(column); // å¤„ç† CRUD 相关的字段的默认值 @@ -156,7 +156,7 @@ public class ToolCodegenBuilder { processColumnUI(column); } - private void processColumnJava(ToolCodegenColumnDO column) { + private void processColumnJava(CodegenColumnDO column) { // å¤„ç† javaField 字段 column.setJavaField(toCamelCase(column.getColumnName())); // å¤„ç† dictType 字段,暂无 @@ -171,7 +171,7 @@ public class ToolCodegenBuilder { } } - private void processColumnOperation(ToolCodegenColumnDO column) { + private void processColumnOperation(CodegenColumnDO column) { // å¤„ç† createOperation 字段 column.setCreateOperation(!CREATE_OPERATION_EXCLUDE_COLUMN.contains(column.getJavaField()) && !column.getPrimaryKey()); // 对于主键,创建时无需传递 @@ -186,13 +186,13 @@ public class ToolCodegenBuilder { .filter(entry -> StrUtil.endWithIgnoreCase(column.getJavaField(), entry.getKey())) .findFirst().ifPresent(entry -> column.setListOperationCondition(entry.getValue().getCondition())); if (column.getListOperationCondition() == null) { - column.setListOperationCondition(ToolCodegenColumnListConditionEnum.EQ.getCondition()); + column.setListOperationCondition(CodegenColumnListConditionEnum.EQ.getCondition()); } // å¤„ç† listOperationResult 字段 column.setListOperationResult(!LIST_OPERATION_RESULT_EXCLUDE_COLUMN.contains(column.getJavaField())); } - private void processColumnUI(ToolCodegenColumnDO column) { + private void processColumnUI(CodegenColumnDO column) { // 基于åŽç¼€è¿›è¡ŒåŒ¹é… columnHtmlTypeMappings.entrySet().stream() .filter(entry -> StrUtil.endWithIgnoreCase(column.getJavaField(), entry.getKey())) @@ -200,11 +200,11 @@ public class ToolCodegenBuilder { // 如果是 Boolean 类型时,设置为 radio 类型. // 其它类型,因为字段åå¯ä»¥ç›¸å¯¹ä¿éšœï¼Œæ‰€ä»¥ä¸è¿›è¡Œå¤„ç†ã€‚例如说 date 对应 datetime 类型. if (Boolean.class.getSimpleName().equals(column.getJavaType())) { - column.setHtmlType(ToolCodegenColumnHtmlTypeEnum.RADIO.getType()); + column.setHtmlType(CodegenColumnHtmlTypeEnum.RADIO.getType()); } // 兜底,设置默认为 input 类型 if (column.getHtmlType() == null) { - column.setHtmlType(ToolCodegenColumnHtmlTypeEnum.INPUT.getType()); + column.setHtmlType(CodegenColumnHtmlTypeEnum.INPUT.getType()); } } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/impl/ToolCodegenEngine.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenEngine.java similarity index 92% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/impl/ToolCodegenEngine.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenEngine.java index ce8f3ac116..89a3af161b 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/impl/ToolCodegenEngine.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenEngine.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.tool.service.codegen.impl; +package cn.iocoder.yudao.module.tool.service.codegen.inner; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.StrUtil; @@ -9,7 +9,7 @@ import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.adminserver.modules.tool.framework.codegen.config.CodegenProperties; +import cn.iocoder.yudao.module.tool.framework.codegen.config.CodegenProperties; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; @@ -19,8 +19,8 @@ import cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolCodegenColumnDO; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolCodegenTableDO; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenColumnDO; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenTableDO; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.date.DateUtils; import com.google.common.collect.Maps; @@ -45,7 +45,7 @@ import static cn.hutool.core.text.CharSequenceUtil.*; * @author èŠ‹é“æºç  */ @Component -public class ToolCodegenEngine { +public class CodegenEngine { /** * 模æ¿é…ç½® @@ -95,7 +95,7 @@ public class ToolCodegenEngine { .build(); @Resource - private ToolCodegenBuilder codegenBuilder; + private CodegenBuilder codegenBuilder; @Resource private CodegenProperties codegenProperties; @@ -109,7 +109,7 @@ public class ToolCodegenEngine { */ private final Map globalBindingMap = new HashMap<>(); - public ToolCodegenEngine() { + public CodegenEngine() { // åˆå§‹åŒ– TemplateEngine 属性 TemplateConfig config = new TemplateConfig(); config.setResourceMode(TemplateConfig.ResourceMode.CLASSPATH); @@ -129,7 +129,7 @@ public class ToolCodegenEngine { globalBindingMap.put("PageParamClassName", PageParam.class.getName()); globalBindingMap.put("DictFormatClassName", DictFormat.class.getName()); // DO 类,独有字段 - globalBindingMap.put("baseDOFields", ToolCodegenBuilder.BASE_DO_FIELDS); + globalBindingMap.put("baseDOFields", CodegenBuilder.BASE_DO_FIELDS); globalBindingMap.put("BaseDOClassName", BaseDO.class.getName()); globalBindingMap.put("QueryWrapperClassName", QueryWrapperX.class.getName()); globalBindingMap.put("BaseMapperClassName", BaseMapperX.class.getName()); @@ -143,12 +143,12 @@ public class ToolCodegenEngine { globalBindingMap.put("OperateTypeEnumClassName", OperateTypeEnum.class.getName()); } - public Map execute(ToolCodegenTableDO table, List columns) { + public Map execute(CodegenTableDO table, List columns) { // 创建 bindingMap Map bindingMap = new HashMap<>(globalBindingMap); bindingMap.put("table", table); bindingMap.put("columns", columns); - bindingMap.put("primaryColumn", CollectionUtils.findFirst(columns, ToolCodegenColumnDO::getPrimaryKey)); // 主键字段 + bindingMap.put("primaryColumn", CollectionUtils.findFirst(columns, CodegenColumnDO::getPrimaryKey)); // 主键字段 // moduleName 相关 String simpleModuleName = codegenBuilder.getSimpleModuleName(table.getModuleName()); bindingMap.put("simpleModuleName", simpleModuleName); // å°† system è½¬æˆ sys @@ -183,7 +183,7 @@ public class ToolCodegenEngine { getStr(bindingMap, "classNameVar")); // table 包å«çš„字段 - ToolCodegenTableDO table = (ToolCodegenTableDO) bindingMap.get("table"); + CodegenTableDO table = (CodegenTableDO) bindingMap.get("table"); filePath = StrUtil.replace(filePath, "${table.moduleName}", table.getModuleName()); filePath = StrUtil.replace(filePath, "${table.businessName}", table.getBusinessName()); filePath = StrUtil.replace(filePath, "${table.className}", table.getClassName()); diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/impl/ToolCodegenSQLParser.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenSQLParser.java similarity index 72% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/impl/ToolCodegenSQLParser.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenSQLParser.java index d9f2538812..d58ac04c47 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/impl/ToolCodegenSQLParser.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenSQLParser.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.tool.service.codegen.impl; +package cn.iocoder.yudao.module.tool.service.codegen.inner; import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolSchemaColumnDO; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolSchemaTableDO; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaColumnDO; +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaTableDO; import com.alibaba.druid.DbType; import com.alibaba.druid.sql.ast.expr.SQLCharExpr; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; @@ -21,26 +21,26 @@ import java.util.Objects; import static com.alibaba.druid.sql.SQLUtils.normalize; /** - * SQL è§£æžå™¨ï¼Œå°†åˆ›å»ºè¡¨çš„ SQLï¼Œè§£æžæˆ {@link ToolSchemaTableDO} å’Œ {@link ToolSchemaColumnDO} 对象, + * SQL è§£æžå™¨ï¼Œå°†åˆ›å»ºè¡¨çš„ SQLï¼Œè§£æžæˆ {@link SchemaTableDO} å’Œ {@link SchemaColumnDO} 对象, * åŽç»­å¯ä»¥åŸºäºŽå®ƒä»¬ï¼Œç”Ÿæˆä»£ç ~ * * @author èŠ‹é“æºç  */ -public class ToolCodegenSQLParser { +public class CodegenSQLParser { /** - * è§£æžå»ºè¡¨ SQL 语å¥ï¼Œè¿”回 {@link ToolSchemaTableDO} å’Œ {@link ToolSchemaColumnDO} 对象 + * è§£æžå»ºè¡¨ SQL 语å¥ï¼Œè¿”回 {@link SchemaTableDO} å’Œ {@link SchemaColumnDO} 对象 * * @param sql 建表 SQL è¯­å¥ * @return è§£æžç»“æžœ */ - public static KeyValue> parse(String sql) { + public static KeyValue> parse(String sql) { // è§£æž SQL æˆ Statement SQLCreateTableStatement statement = parseCreateSQL(sql); // è§£æž Table 表 - ToolSchemaTableDO table = parseTable(statement); + SchemaTableDO table = parseTable(statement); // è§£æž Column 字段 - List columns = parseColumns(statement); + List columns = parseColumns(statement); columns.forEach(column -> column.setTableName(table.getTableName())); // 返回 return new DefaultKeyValue<>(table, columns); @@ -61,8 +61,8 @@ public class ToolCodegenSQLParser { return (MySqlCreateTableStatement) repository.findTable(tableName).getStatement(); } - private static ToolSchemaTableDO parseTable(SQLCreateTableStatement statement) { - return ToolSchemaTableDO.builder() + private static SchemaTableDO parseTable(SQLCreateTableStatement statement) { + return SchemaTableDO.builder() .tableName(statement.getTableSource().getTableName(true)) .tableComment(getCommentText(statement)) .build(); @@ -75,13 +75,13 @@ public class ToolCodegenSQLParser { return ((SQLCharExpr) statement.getComment()).getText(); } - private static List parseColumns(SQLCreateTableStatement statement) { - List columns = new ArrayList<>(); + private static List parseColumns(SQLCreateTableStatement statement) { + List columns = new ArrayList<>(); statement.getTableElementList().forEach(element -> parseColumn(columns, element)); return columns; } - private static void parseColumn(List columns, SQLTableElement element) { + private static void parseColumn(List columns, SQLTableElement element) { // 处ç†ä¸»é”® if (element instanceof SQLPrimaryKey) { parsePrimaryKey(columns, (SQLPrimaryKey) element); @@ -93,16 +93,16 @@ public class ToolCodegenSQLParser { } } - private static void parsePrimaryKey(List columns, SQLPrimaryKey primaryKey) { + private static void parsePrimaryKey(List columns, SQLPrimaryKey primaryKey) { String columnName = normalize(primaryKey.getColumns().get(0).toString()); // 暂时ä¸è€ƒè™‘è”åˆä¸»é”® // åŒ¹é… columns 主键字段,设置为 primary columns.stream().filter(column -> column.getColumnName().equals(columnName)) .forEach(column -> column.setPrimaryKey(true)); } - private static void parseColumnDefinition(List columns, SQLColumnDefinition definition) { + private static void parseColumnDefinition(List columns, SQLColumnDefinition definition) { String text = definition.toString().toUpperCase(); - columns.add(ToolSchemaColumnDO.builder() + columns.add(SchemaColumnDO.builder() .columnName(normalize(definition.getColumnName())) .columnType(definition.getDataType().toString()) .columnComment(Objects.isNull(definition.getComment()) ? "" diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/test/ToolTestDemoService.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/test/TestDemoService.java similarity index 51% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/test/ToolTestDemoService.java rename to yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/test/TestDemoService.java index 7fff9185d4..5695961d75 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/tool/service/test/ToolTestDemoService.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/test/TestDemoService.java @@ -1,17 +1,21 @@ -package cn.iocoder.yudao.adminserver.modules.tool.service.test; +package cn.iocoder.yudao.module.tool.service.test; import java.util.*; import javax.validation.*; -import cn.iocoder.yudao.adminserver.modules.tool.controller.test.vo.*; -import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.test.ToolTestDemoDO; + +import cn.iocoder.yudao.module.tool.controller.admin.test.vo.TestDemoCreateReqVO; +import cn.iocoder.yudao.module.tool.controller.admin.test.vo.TestDemoExportReqVO; +import cn.iocoder.yudao.module.tool.controller.admin.test.vo.TestDemoPageReqVO; +import cn.iocoder.yudao.module.tool.controller.admin.test.vo.TestDemoUpdateReqVO; +import cn.iocoder.yudao.module.tool.dal.dataobject.test.TestDemoDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; /** - * 字典类型 Service æŽ¥å£ + * 测试示例 Service æŽ¥å£ * * @author 芋艿 */ -public interface ToolTestDemoService { +public interface TestDemoService { /** * 创建字典类型 @@ -19,14 +23,14 @@ public interface ToolTestDemoService { * @param createReqVO åˆ›å»ºä¿¡æ¯ * @return ç¼–å· */ - Long createTestDemo(@Valid ToolTestDemoCreateReqVO createReqVO); + Long createTestDemo(@Valid TestDemoCreateReqVO createReqVO); /** * 更新字典类型 * * @param updateReqVO æ›´æ–°ä¿¡æ¯ */ - void updateTestDemo(@Valid ToolTestDemoUpdateReqVO updateReqVO); + void updateTestDemo(@Valid TestDemoUpdateReqVO updateReqVO); /** * 删除字典类型 @@ -41,7 +45,7 @@ public interface ToolTestDemoService { * @param id ç¼–å· * @return 字典类型 */ - ToolTestDemoDO getTestDemo(Long id); + TestDemoDO getTestDemo(Long id); /** * 获得字典类型列表 @@ -49,7 +53,7 @@ public interface ToolTestDemoService { * @param ids ç¼–å· * @return 字典类型列表 */ - List getTestDemoList(Collection ids); + List getTestDemoList(Collection ids); /** * 获得字典类型分页 @@ -57,7 +61,7 @@ public interface ToolTestDemoService { * @param pageReqVO 分页查询 * @return 字典类型分页 */ - PageResult getTestDemoPage(ToolTestDemoPageReqVO pageReqVO); + PageResult getTestDemoPage(TestDemoPageReqVO pageReqVO); /** * 获得字典类型列表, 用于 Excel 导出 @@ -65,6 +69,6 @@ public interface ToolTestDemoService { * @param exportReqVO 查询æ¡ä»¶ * @return 字典类型列表 */ - List getTestDemoList(ToolTestDemoExportReqVO exportReqVO); + List getTestDemoList(TestDemoExportReqVO exportReqVO); } diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/test/TestDemoServiceImpl.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/test/TestDemoServiceImpl.java new file mode 100644 index 0000000000..3181db91c6 --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/test/TestDemoServiceImpl.java @@ -0,0 +1,86 @@ +package cn.iocoder.yudao.module.tool.service.test; + +import cn.iocoder.yudao.module.tool.controller.admin.test.vo.TestDemoCreateReqVO; +import cn.iocoder.yudao.module.tool.controller.admin.test.vo.TestDemoExportReqVO; +import cn.iocoder.yudao.module.tool.controller.admin.test.vo.TestDemoPageReqVO; +import cn.iocoder.yudao.module.tool.controller.admin.test.vo.TestDemoUpdateReqVO; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; + +import java.util.*; + +import cn.iocoder.yudao.module.tool.dal.dataobject.test.TestDemoDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; + +import cn.iocoder.yudao.module.tool.convert.test.TestDemoConvert; +import cn.iocoder.yudao.module.tool.dal.mysql.test.TestDemoMapper; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.tool.enums.ErrorCodeConstants.*; + +/** + * 测试示例 Service 实现类 + * + * @author 芋艿 + */ +@Service +@Validated +public class TestDemoServiceImpl implements TestDemoService { + + @Resource + private TestDemoMapper testDemoMapper; + + @Override + public Long createTestDemo(TestDemoCreateReqVO createReqVO) { + // æ’å…¥ + TestDemoDO testDemo = TestDemoConvert.INSTANCE.convert(createReqVO); + testDemoMapper.insert(testDemo); + // 返回 + return testDemo.getId(); + } + + @Override + public void updateTestDemo(TestDemoUpdateReqVO updateReqVO) { + // 校验存在 + this.validateTestDemoExists(updateReqVO.getId()); + // æ›´æ–° + TestDemoDO updateObj = TestDemoConvert.INSTANCE.convert(updateReqVO); + testDemoMapper.updateById(updateObj); + } + + @Override + public void deleteTestDemo(Long id) { + // 校验存在 + this.validateTestDemoExists(id); + // 删除 + testDemoMapper.deleteById(id); + } + + private void validateTestDemoExists(Long id) { + if (testDemoMapper.selectById(id) == null) { + throw exception(TEST_DEMO_NOT_EXISTS); + } + } + + @Override + public TestDemoDO getTestDemo(Long id) { + return testDemoMapper.selectById(id); + } + + @Override + public List getTestDemoList(Collection ids) { + return testDemoMapper.selectBatchIds(ids); + } + + @Override + public PageResult getTestDemoPage(TestDemoPageReqVO pageReqVO) { + return testDemoMapper.selectPage(pageReqVO); + } + + @Override + public List getTestDemoList(TestDemoExportReqVO exportReqVO) { + return testDemoMapper.selectList(exportReqVO); + } + +} From b757e1fccb31add36ca4718c8f9f332e6cd0a822 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 31 Jan 2022 21:51:23 +0800 Subject: [PATCH 23/47] =?UTF-8?q?=E5=A4=9A=E6=A8=A1=E5=9D=97=E9=87=8D?= =?UTF-8?q?=E6=9E=84=207=EF=BC=9Apay=20=E6=A8=A1=E5=9D=97=E7=9A=84?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 1 + yudao-admin-server/pom.xml | 57 +--- .../modules/pay/convert/package-info.java | 6 - .../mysql/order/PayOrderExtensionMapper.java | 16 -- .../pay/enums/PayErrorCodeConstants.java | 1 - .../modules/pay/job/package-info.java | 1 - .../adminserver/modules/pay/package-info.java | 7 - .../channel/impl/PayChannelServiceImpl.java | 161 ----------- .../pay/service/order/PayRefundService.java | 41 --- .../order/impl/PayOrderServiceImpl.java | 54 ---- .../order/impl/PayRefundServiceImpl.java | 42 --- .../pay/service/channel/PayChannelConfig.java | 20 -- .../convert/order/PayOrderCoreConvert.java | 22 -- .../convert/order/PayRefundCoreConvert.java | 23 -- .../modules/pay/convert/package-info.java | 6 - ...‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md | 1 - .../dal/mysql/merchant/PayAppCoreMapper.java | 9 - .../mysql/merchant/PayChannelCoreMapper.java | 20 -- .../dal/mysql/order/PayOrderCoreMapper.java | 22 -- .../dal/mysql/order/PayRefundCoreMapper.java | 23 -- .../coreservice/modules/pay/package-info.java | 7 - .../service/merchant/PayAppCoreService.java | 23 -- .../merchant/PayChannelCoreService.java | 39 --- .../merchant/impl/PayAppCoreServiceImpl.java | 43 --- .../impl/PayChannelCoreServiceImpl.java | 121 --------- .../pay/service/notify/vo/package-info.java | 6 - .../service/order/PayOrderCoreService.java | 50 ---- .../service/order/PayRefundCoreService.java | 31 --- .../modules/pay/service/package-info.java | 1 - .../pay/core/enums/PayChannelEnum.java | 13 +- yudao-module-pay/pom.xml | 25 ++ yudao-module-pay/yudao-module-pay-api/pom.xml | 26 ++ .../module/pay/enums/DictTypeConstants.java | 35 +++ .../module/pay/enums/ErrorCodeConstants.java | 4 +- .../yudao/module/pay/package-info.java | 1 + .../yudao-module-pay-impl/pom.xml | 103 ++++++++ .../admin/merchant}/PayAppController.java | 24 +- .../admin/merchant}/PayChannelController.java | 19 +- .../merchant/PayMerchantController.java | 10 +- .../admin/merchant/vo/app}/PayAppBaseVO.java | 2 +- .../merchant/vo/app}/PayAppCreateReqVO.java | 6 +- .../admin/merchant/vo/app}/PayAppExcelVO.java | 9 +- .../merchant/vo/app}/PayAppExportReqVO.java | 4 +- .../vo/app}/PayAppPageItemRespVO.java | 9 +- .../merchant/vo/app}/PayAppPageReqVO.java | 4 +- .../admin/merchant/vo/app}/PayAppRespVO.java | 4 +- .../merchant/vo/app}/PayAppUpdateReqVO.java | 5 +- .../vo/app}/PayAppUpdateStatusReqVO.java | 4 +- .../vo/channel}/PayChannelBaseVO.java | 6 +- .../vo/channel}/PayChannelCreateReqVO.java | 8 +- .../vo/channel}/PayChannelExcelVO.java | 5 +- .../vo/channel}/PayChannelExportReqVO.java | 4 +- .../vo/channel}/PayChannelPageReqVO.java | 4 +- .../vo/channel}/PayChannelRespVO.java | 4 +- .../vo/channel}/PayChannelUpdateReqVO.java | 9 +- .../vo/merchant}/PayMerchantBaseVO.java | 2 +- .../vo/merchant}/PayMerchantCreateReqVO.java | 6 +- .../vo/merchant}/PayMerchantExcelVO.java | 2 +- .../vo/merchant}/PayMerchantExportReqVO.java | 4 +- .../vo/merchant}/PayMerchantPageReqVO.java | 4 +- .../vo/merchant}/PayMerchantRespVO.java | 10 +- .../vo/merchant}/PayMerchantUpdateReqVO.java | 5 +- .../PayMerchantUpdateStatusReqVO.java | 4 +- .../admin}/order/PayOrderController.java | 45 +--- .../admin/order/vo}/PayOrderBaseVO.java | 5 +- .../order/vo}/PayOrderDetailsRespVO.java | 9 +- .../admin/order/vo}/PayOrderExcelVO.java | 4 +- .../admin/order/vo}/PayOrderExportReqVO.java | 8 +- .../order/vo}/PayOrderPageItemRespVO.java | 9 +- .../admin/order/vo}/PayOrderPageReqVO.java | 9 +- .../admin/order/vo}/PayOrderRespVO.java | 9 +- .../admin/refund}/PayRefundController.java | 42 +-- .../admin}/refund/vo/PayRefundBaseVO.java | 2 +- .../refund/vo/PayRefundCreateReqVO.java | 4 +- .../refund/vo/PayRefundDetailsRespVO.java | 9 +- .../admin}/refund/vo/PayRefundExcelVO.java | 4 +- .../refund/vo/PayRefundExportReqVO.java | 4 +- .../refund/vo/PayRefundPageItemRespVO.java | 8 +- .../admin}/refund/vo/PayRefundPageReqVO.java | 4 +- .../admin}/refund/vo/PayRefundRespVO.java | 4 +- .../refund/vo/PayRefundUpdateReqVO.java | 4 +- .../app/order/AppPayOrderController.java | 42 +-- .../app/order/vo/AppPayOrderSubmitReqVO.java | 6 +- .../app/order/vo/AppPayOrderSubmitRespVO.java | 6 +- .../pay/controller/app/package-info.java | 1 + .../app/refund/AppPayRefundController.java | 29 +- .../app/refund/vo/AppPayRefundReqVO.java | 6 +- .../app/refund/vo/AppPayRefundRespVO.java | 12 +- .../module/pay/controller/package-info.java | 6 + .../pay/convert/app/PayAppConvert.java | 8 +- .../convert/channel/PayChannelConvert.java | 16 +- .../convert/merchant/PayMerchantConvert.java | 14 +- .../pay/convert/order/PayOrderConvert.java | 45 ++-- .../module}/pay/convert/package-info.java | 2 +- .../pay/convert/refund/PayRefundConvert.java | 25 +- ...‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md | 0 .../pay/dal/dataobject/merchant/PayAppDO.java | 2 +- .../dal/dataobject/merchant/PayChannelDO.java | 2 +- .../dataobject/merchant/PayMerchantDO.java | 2 +- .../dal/dataobject/notify/PayNotifyLogDO.java | 4 +- .../dataobject/notify/PayNotifyTaskDO.java | 14 +- .../pay/dal/dataobject/order/PayOrderDO.java | 14 +- .../dataobject/order/PayOrderExtensionDO.java | 6 +- .../dal/dataobject/refund}/PayRefundDO.java | 13 +- .../pay/dal/mysql/merchant}/PayAppMapper.java | 40 +-- .../dal/mysql/merchant}/PayChannelMapper.java | 37 +-- .../dal/mysql/merchant/PayMerchantMapper.java | 13 +- .../mysql/notify/PayNotifyLogCoreMapper.java | 4 +- .../mysql/notify/PayNotifyTaskCoreMapper.java | 6 +- .../mysql/order/PayOrderExtensionMapper.java | 6 +- .../pay/dal/mysql/order/PayOrderMapper.java | 31 ++- .../dal/mysql/refund}/PayRefundMapper.java | 28 +- .../dal/redis/PayRedisKeyCoreConstants.java | 6 +- .../redis/notify/PayNotifyLockRedisDAO.java | 6 +- .../pay/enums/notify/PayNotifyStatusEnum.java | 2 +- .../pay/enums/notify/PayNotifyTypeEnum.java | 2 +- .../enums/order/PayOrderNotifyStatusEnum.java | 2 +- .../pay/enums/order/PayOrderStatusEnum.java | 2 +- .../enums/refund}/PayRefundStatusEnum.java | 2 +- .../pay/enums/refund}/PayRefundTypeEnum.java | 2 +- .../module}/pay/job/notify/PayNotifyJob.java | 6 +- .../yudao/module/pay/job/package-info.java | 1 + .../yudao/module/pay/package-info.java | 10 + .../pay/service/merchant}/PayAppService.java | 25 +- .../service/merchant}/PayAppServiceImpl.java | 64 ++--- .../service/merchant}/PayChannelService.java | 50 +++- .../merchant/PayChannelServiceImpl.java | 250 ++++++++++++++++++ .../service/merchant/PayMerchantService.java | 12 +- .../merchant}/PayMerchantServiceImpl.java | 22 +- .../pay/service/notify/PayNotifyService.java | 8 +- .../service/notify/PayNotifyServiceImpl.java | 65 +++-- .../notify/dto/PayNotifyTaskCreateReqDTO.java | 2 +- .../notify/vo/PayNotifyOrderReqVO.java | 2 +- .../notify/vo/PayRefundOrderReqVO.java | 2 +- .../pay/service/notify/vo/package-info.java | 6 + .../order/PayOrderExtensionService.java | 8 +- .../order}/PayOrderExtensionServiceImpl.java | 7 +- .../pay/service/order/PayOrderService.java | 38 ++- .../service/order/PayOrderServiceImpl.java | 144 +++++----- .../order/dto/PayOrderCreateReqDTO.java | 2 +- .../order/dto/PayOrderSubmitReqDTO.java | 2 +- .../order/dto/PayOrderSubmitRespDTO.java | 2 +- .../service/order/dto/PayRefundReqDTO.java | 2 +- .../service/order/dto/PayRefundRespDTO.java | 2 +- .../module/pay/service/package-info.java | 1 + .../pay/service/refund/PayRefundService.java | 61 +++++ .../service/refund/PayRefundServiceImpl.java | 152 ++++++----- .../yudao/module}/pay/util/PaySeqUtils.java | 4 +- .../service/merchant}/PayAppServiceTest.java | 23 +- .../merchant}/PayChannelServiceTest.java | 32 +-- .../merchant/PayMerchantServiceTest.java | 19 +- .../service/order/PayOrderServiceTest.java | 19 +- .../module/pay/service/package-info.java | 1 + .../service/refund/PayRefundServiceTest.java | 19 +- .../pay/test}/BaseDbAndRedisUnitTest.java | 5 +- .../module/pay/test}/BaseDbUnitTest.java | 2 +- .../module/pay/test}/BaseRedisUnitTest.java | 4 +- .../pay/test}/RedisTestConfiguration.java | 2 +- .../system/enums/DictTypeConstants.java | 25 -- .../pay/convert/order/PayRefundConvert.java | 23 -- ...‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md | 1 - .../userserver/modules/pay/package-info.java | 7 - 162 files changed, 1303 insertions(+), 1714 deletions(-) delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/package-info.java delete mode 100755 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/order/PayOrderExtensionMapper.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/enums/PayErrorCodeConstants.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/job/package-info.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/package-info.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/channel/impl/PayChannelServiceImpl.java delete mode 100755 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/PayRefundService.java delete mode 100755 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/impl/PayOrderServiceImpl.java delete mode 100755 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/impl/PayRefundServiceImpl.java delete mode 100644 yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/channel/PayChannelConfig.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/order/PayOrderCoreConvert.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/order/PayRefundCoreConvert.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/package-info.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/merchant/PayAppCoreMapper.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/merchant/PayChannelCoreMapper.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/order/PayOrderCoreMapper.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/order/PayRefundCoreMapper.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/package-info.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/PayAppCoreService.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/PayChannelCoreService.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/impl/PayAppCoreServiceImpl.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/impl/PayChannelCoreServiceImpl.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/vo/package-info.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/PayOrderCoreService.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/PayRefundCoreService.java delete mode 100644 yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/package-info.java create mode 100644 yudao-module-pay/pom.xml create mode 100644 yudao-module-pay/yudao-module-pay-api/pom.xml create mode 100644 yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/DictTypeConstants.java rename yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/PayErrorCodeCoreConstants.java => yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/ErrorCodeConstants.java (97%) create mode 100644 yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/package-info.java create mode 100644 yudao-module-pay/yudao-module-pay-impl/pom.xml rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant}/PayAppController.java (88%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant}/PayChannelController.java (91%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin}/merchant/PayMerchantController.java (92%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app}/PayAppBaseVO.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app}/PayAppCreateReqVO.java (50%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app}/PayAppExcelVO.java (83%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app}/PayAppExportReqVO.java (84%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app}/PayAppPageItemRespVO.java (78%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app}/PayAppPageReqVO.java (90%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app}/PayAppRespVO.java (74%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app}/PayAppUpdateReqVO.java (72%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app}/PayAppUpdateStatusReqVO.java (81%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel}/PayChannelBaseVO.java (86%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel}/PayChannelCreateReqVO.java (60%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel}/PayChannelExcelVO.java (91%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel}/PayChannelExportReqVO.java (85%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel}/PayChannelPageReqVO.java (90%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel}/PayChannelRespVO.java (78%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel}/PayChannelUpdateReqVO.java (60%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant}/PayMerchantBaseVO.java (91%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant}/PayMerchantCreateReqVO.java (51%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant}/PayMerchantExcelVO.java (91%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant}/PayMerchantExportReqVO.java (82%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant}/PayMerchantPageReqVO.java (88%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant}/PayMerchantRespVO.java (69%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant}/PayMerchantUpdateReqVO.java (71%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant}/PayMerchantUpdateStatusReqVO.java (80%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin}/order/PayOrderController.java (85%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo}/PayOrderBaseVO.java (95%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo}/PayOrderDetailsRespVO.java (82%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo}/PayOrderExcelVO.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo}/PayOrderExportReqVO.java (92%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo}/PayOrderPageItemRespVO.java (82%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo}/PayOrderPageReqVO.java (95%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo}/PayOrderRespVO.java (74%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund}/PayRefundController.java (86%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin}/refund/vo/PayRefundBaseVO.java (98%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin}/refund/vo/PayRefundCreateReqVO.java (60%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin}/refund/vo/PayRefundDetailsRespVO.java (83%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin}/refund/vo/PayRefundExcelVO.java (93%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin}/refund/vo/PayRefundExportReqVO.java (94%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin}/refund/vo/PayRefundPageItemRespVO.java (79%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin}/refund/vo/PayRefundPageReqVO.java (96%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin}/refund/vo/PayRefundRespVO.java (81%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin}/refund/vo/PayRefundUpdateReqVO.java (75%) rename yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/PayOrderController.java => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/order/AppPayOrderController.java (69%) rename yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/vo/PayOrderSubmitReqVO.java => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/order/vo/AppPayOrderSubmitReqVO.java (83%) rename yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/vo/PayOrderSubmitRespVO.java => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/order/vo/AppPayOrderSubmitRespVO.java (69%) create mode 100644 yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/package-info.java rename yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/PayRefundController.java => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/refund/AppPayRefundController.java (51%) rename yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/vo/PayRefundReqVO.java => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/refund/vo/AppPayRefundReqVO.java (87%) rename yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/vo/PayRefundRespVO.java => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/refund/vo/AppPayRefundRespVO.java (51%) create mode 100644 yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/package-info.java rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/convert/app/PayAppConvert.java (71%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/convert/channel/PayChannelConvert.java (64%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/convert/merchant/PayMerchantConvert.java (56%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/convert/order/PayOrderConvert.java (72%) rename {yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/convert/package-info.java (57%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/convert/refund/PayRefundConvert.java (73%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md (100%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/dal/dataobject/merchant/PayAppDO.java (94%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/dal/dataobject/merchant/PayChannelDO.java (95%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/dal/dataobject/merchant/PayMerchantDO.java (94%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/dal/dataobject/notify/PayNotifyLogDO.java (86%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/dal/dataobject/notify/PayNotifyTaskDO.java (78%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/dal/dataobject/order/PayOrderDO.java (84%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/dal/dataobject/order/PayOrderExtensionDO.java (89%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/order => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/refund}/PayRefundDO.java (90%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/app => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/merchant}/PayAppMapper.java (68%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/channel => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/merchant}/PayChannelMapper.java (76%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/dal/mysql/merchant/PayMerchantMapper.java (82%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/dal/mysql/notify/PayNotifyLogCoreMapper.java (56%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/dal/mysql/notify/PayNotifyTaskCoreMapper.java (79%) rename yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/order/PayOrderExtensionCoreMapper.java => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/order/PayOrderExtensionMapper.java (70%) mode change 100644 => 100755 rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/dal/mysql/order/PayOrderMapper.java (78%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/order => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/refund}/PayRefundMapper.java (78%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/dal/redis/PayRedisKeyCoreConstants.java (65%) rename yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/redis/notify/PayNotifyLockCoreRedisDAO.java => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/notify/PayNotifyLockRedisDAO.java (79%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/enums/notify/PayNotifyStatusEnum.java (89%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/enums/notify/PayNotifyTypeEnum.java (85%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/enums/order/PayOrderNotifyStatusEnum.java (89%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/enums/order/PayOrderStatusEnum.java (90%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/order => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/enums/refund}/PayRefundStatusEnum.java (83%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/order => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/enums/refund}/PayRefundTypeEnum.java (89%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/job/notify/PayNotifyJob.java (75%) create mode 100644 yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/job/package-info.java create mode 100644 yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/package-info.java rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/app => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant}/PayAppService.java (75%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/app/impl => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant}/PayAppServiceImpl.java (72%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/channel => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant}/PayChannelService.java (59%) create mode 100644 yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant/PayChannelServiceImpl.java rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/service/merchant/PayMerchantService.java (81%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/merchant/impl => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant}/PayMerchantServiceImpl.java (77%) rename yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/PayNotifyCoreService.java => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/notify/PayNotifyService.java (66%) rename yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/impl/PayNotifyCoreServiceImpl.java => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/notify/PayNotifyServiceImpl.java (77%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/service/notify/dto/PayNotifyTaskCreateReqDTO.java (88%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/service/notify/vo/PayNotifyOrderReqVO.java (92%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/service/notify/vo/PayRefundOrderReqVO.java (93%) create mode 100644 yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/notify/vo/package-info.java rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/service/order/PayOrderExtensionService.java (80%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/impl => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order}/PayOrderExtensionServiceImpl.java (68%) rename {yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/service/order/PayOrderService.java (55%) rename yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/impl/PayOrderCoreServiceImpl.java => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceImpl.java (63%) mode change 100644 => 100755 rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/service/order/dto/PayOrderCreateReqDTO.java (95%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/service/order/dto/PayOrderSubmitReqDTO.java (92%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/service/order/dto/PayOrderSubmitRespDTO.java (83%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/service/order/dto/PayRefundReqDTO.java (93%) rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/service/order/dto/PayRefundRespDTO.java (85%) create mode 100644 yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/package-info.java create mode 100755 yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/refund/PayRefundService.java rename yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/impl/PayRefundCoreServiceImpl.java => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/refund/PayRefundServiceImpl.java (62%) mode change 100644 => 100755 rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules => yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module}/pay/util/PaySeqUtils.java (94%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/app => yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/merchant}/PayAppServiceTest.java (90%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/channel => yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/merchant}/PayChannelServiceTest.java (93%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules => yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module}/pay/service/merchant/PayMerchantServiceTest.java (89%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules => yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module}/pay/service/order/PayOrderServiceTest.java (91%) create mode 100644 yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/package-info.java rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules => yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module}/pay/service/refund/PayRefundServiceTest.java (90%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver => yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/test}/BaseDbAndRedisUnitTest.java (95%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver => yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/test}/BaseDbUnitTest.java (97%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver => yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/test}/BaseRedisUnitTest.java (86%) rename {yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/config => yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/test}/RedisTestConfiguration.java (96%) delete mode 100644 yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/convert/order/PayRefundConvert.java delete mode 100644 yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md delete mode 100644 yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/package-info.java diff --git a/pom.xml b/pom.xml index f56f07ddb7..e5294f7d8e 100644 --- a/pom.xml +++ b/pom.xml @@ -18,6 +18,7 @@ yudao-module-system yudao-module-infra yudao-module-tool + yudao-module-pay ${artifactId} diff --git a/yudao-admin-server/pom.xml b/yudao-admin-server/pom.xml index dd73b51788..4eaef38c2a 100644 --- a/yudao-admin-server/pom.xml +++ b/yudao-admin-server/pom.xml @@ -37,6 +37,11 @@ yudao-module-infra-impl ${revision} + + cn.iocoder.boot + yudao-module-pay-impl + ${revision} + @@ -71,11 +76,7 @@ - - - cn.iocoder.boot - yudao-spring-boot-starter-web - + org.springframework.boot @@ -83,34 +84,6 @@ true - - cn.iocoder.boot - yudao-spring-boot-starter-security - - - - - cn.iocoder.boot - yudao-spring-boot-starter-mybatis - - - - cn.iocoder.boot - yudao-spring-boot-starter-redis - - - - - cn.iocoder.boot - yudao-spring-boot-starter-job - - - - - cn.iocoder.boot - yudao-spring-boot-starter-mq - - cn.iocoder.boot @@ -128,24 +101,6 @@ spring-boot-admin-starter-server - - - cn.iocoder.boot - yudao-spring-boot-starter-test - test - - - - - cn.iocoder.boot - yudao-spring-boot-starter-excel - - - - org.apache.velocity - velocity-engine-core - - diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/package-info.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/package-info.java deleted file mode 100644 index da39733908..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -/** - * æä¾› POJO ç±»çš„å®žä½“è½¬æ¢ - * - * ç›®å‰ä½¿ç”¨ MapStruct 框架 - */ -package cn.iocoder.yudao.adminserver.modules.pay.convert; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/order/PayOrderExtensionMapper.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/order/PayOrderExtensionMapper.java deleted file mode 100755 index 47baabb317..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/order/PayOrderExtensionMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order; - -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import org.apache.ibatis.annotations.Mapper; - -/** - * æ”¯ä»˜è®¢å• Mapper - * - * @author aquan - */ -@Mapper -public interface PayOrderExtensionMapper extends BaseMapperX { - - -} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/enums/PayErrorCodeConstants.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/enums/PayErrorCodeConstants.java deleted file mode 100644 index df39d9efc2..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/enums/PayErrorCodeConstants.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.pay.enums; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/job/package-info.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/job/package-info.java deleted file mode 100644 index 3db5697897..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/job/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.pay.job; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/package-info.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/package-info.java deleted file mode 100644 index a113b9beb6..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -/** - * pay 包下,我们放支付业务,æä¾›ä¸šåŠ¡çš„æ”¯ä»˜èƒ½åŠ›ã€‚ - * 例如说:商户ã€åº”ç”¨ã€æ”¯ä»˜ã€é€€æ¬¾ç­‰ç­‰ - * - * 缩写:pay - */ -package cn.iocoder.yudao.adminserver.modules.pay; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/channel/impl/PayChannelServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/channel/impl/PayChannelServiceImpl.java deleted file mode 100644 index 6ba21f8c3c..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/channel/impl/PayChannelServiceImpl.java +++ /dev/null @@ -1,161 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.pay.service.channel.impl; - -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.json.JSONUtil; -import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.PayChannelCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.PayChannelExportReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.PayChannelPageReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.PayChannelUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.convert.channel.PayChannelConvert; -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.channel.PayChannelMapper; -import cn.iocoder.yudao.adminserver.modules.pay.service.channel.PayChannelService; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.pay.core.client.PayClientConfig; -import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import javax.annotation.Resource; -import javax.validation.Validator; -import java.util.Collection; -import java.util.List; - -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.CHANNEL_EXIST_SAME_CHANNEL_ERROR; -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.CHANNEL_NOT_EXISTS; -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; - -/** - * æ”¯ä»˜æ¸ é“ Service 实现类 - * - * @author aquan - */ -@Service -@Slf4j -@Validated -public class PayChannelServiceImpl implements PayChannelService { - - @Resource - private PayChannelMapper channelMapper; - - @Resource - private Validator validator; - - @Override - public Long createChannel(PayChannelCreateReqVO reqVO) { - // æ–­è¨€æ˜¯å¦æœ‰é‡å¤çš„ - PayChannelDO channelDO = this.getChannelByConditions(reqVO.getMerchantId(), reqVO.getAppId(), reqVO.getCode()); - if (ObjectUtil.isNotNull(channelDO)) { - throw exception(CHANNEL_EXIST_SAME_CHANNEL_ERROR); - } - - // æ–°å¢žæ¸ é“ - PayChannelDO channel = PayChannelConvert.INSTANCE.convert(reqVO); - settingConfigAndCheckParam(channel, reqVO.getConfig()); - channelMapper.insert(channel); - return channel.getId(); - } - - @Override - public void updateChannel(PayChannelUpdateReqVO updateReqVO) { - // 校验存在 - this.validateChannelExists(updateReqVO.getId()); - // æ›´æ–° - PayChannelDO channel = PayChannelConvert.INSTANCE.convert(updateReqVO); - settingConfigAndCheckParam(channel, updateReqVO.getConfig()); - channelMapper.updateById(channel); - } - - @Override - public void deleteChannel(Long id) { - // 校验存在 - this.validateChannelExists(id); - // 删除 - channelMapper.deleteById(id); - } - - private void validateChannelExists(Long id) { - if (channelMapper.selectById(id) == null) { - throw exception(CHANNEL_NOT_EXISTS); - } - } - - @Override - public PayChannelDO getChannel(Long id) { - return channelMapper.selectById(id); - } - - @Override - public List getChannelList(Collection ids) { - return channelMapper.selectBatchIds(ids); - } - - @Override - public PageResult getChannelPage(PayChannelPageReqVO pageReqVO) { - return channelMapper.selectPage(pageReqVO); - } - - @Override - public List getChannelList(PayChannelExportReqVO exportReqVO) { - return channelMapper.selectList(exportReqVO); - } - - /** - * æ ¹æ®æ”¯ä»˜åº”用ID集åˆèŽ·å¾—æ”¯ä»˜æ¸ é“列表 - * - * @param appIds 应用编å·é›†åˆ - * @return 支付渠é“列表 - */ - @Override - public List getChannelListByAppIds(Collection appIds) { - return channelMapper.getChannelListByAppIds(appIds); - } - - - /** - * æ ¹æ®æ¡ä»¶èŽ·å–é€šé“æ•°é‡ - * - * @param merchantId å•†æˆ·ç¼–å· - * @param appid åº”ç”¨ç¼–å· - * @param code 通é“ç¼–ç  - * @return æ•°é‡ - */ - @Override - public Integer getChannelCountByConditions(Long merchantId, Long appid, String code) { - return this.channelMapper.selectCount(merchantId, appid, code); - } - - /** - * æ ¹æ®æ¡ä»¶èŽ·å–é€šé“ - * - * @param merchantId å•†æˆ·ç¼–å· - * @param appid åº”ç”¨ç¼–å· - * @param code 通é“ç¼–ç  - * @return æ•°é‡ - */ - @Override - public PayChannelDO getChannelByConditions(Long merchantId, Long appid, String code) { - return this.channelMapper.selectOne(merchantId, appid, code); - } - - /** - * 设置渠é“é…置以åŠå‚数校验 - * - * @param channel æ¸ é“ - * @param configStr é…ç½® - */ - private void settingConfigAndCheckParam(PayChannelDO channel, String configStr) { - // å¾—åˆ°è¿™ä¸ªæ¸ é“æ˜¯å¾®ä¿¡çš„还是支付å®çš„ - Class payClass = PayChannelEnum.getByCode(channel.getCode()).getConfigClass(); - if (ObjectUtil.isNull(payClass)) { - throw exception(CHANNEL_NOT_EXISTS); - } - PayClientConfig config = JSONUtil.toBean(configStr, payClass); - - // 验è¯å‚æ•° - config.validate(validator); - channel.setConfig(config); - } - -} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/PayRefundService.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/PayRefundService.java deleted file mode 100755 index 1412bdefea..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/PayRefundService.java +++ /dev/null @@ -1,41 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.pay.service.order; - -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundExportReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundPageReqVO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; - -import java.util.List; - -/** - * é€€æ¬¾è®¢å• Service æŽ¥å£ - * - * @author aquan - */ -public interface PayRefundService { - - /** - * èŽ·å¾—é€€æ¬¾è®¢å• - * - * @param id ç¼–å· - * @return é€€æ¬¾è®¢å• - */ - PayRefundDO getRefund(Long id); - - /** - * 获得退款订å•分页 - * - * @param pageReqVO 分页查询 - * @return 退款订å•分页 - */ - PageResult getRefundPage(PayRefundPageReqVO pageReqVO); - - /** - * 获得退款订å•列表, 用于 Excel 导出 - * - * @param exportReqVO 查询æ¡ä»¶ - * @return 退款订å•列表 - */ - List getRefundList(PayRefundExportReqVO exportReqVO); - -} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/impl/PayOrderServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/impl/PayOrderServiceImpl.java deleted file mode 100755 index dd6d0a8bd2..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/impl/PayOrderServiceImpl.java +++ /dev/null @@ -1,54 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.pay.service.order.impl; - -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderExportReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderPageReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order.PayOrderMapper; -import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayOrderService; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import javax.annotation.Resource; -import java.util.Collection; -import java.util.List; - -/** - * æ”¯ä»˜è®¢å• Service 实现类 - * - * @author aquan - */ -@Service -@Validated -public class PayOrderServiceImpl implements PayOrderService { - - @Resource - private PayOrderMapper orderMapper; - - @Override - public PayOrderDO getOrder(Long id) { - return orderMapper.selectById(id); - } - - @Override - public PageResult getOrderPage(PayOrderPageReqVO pageReqVO) { - return orderMapper.selectPage(pageReqVO); - } - - @Override - public List getOrderList(PayOrderExportReqVO exportReqVO) { - return orderMapper.selectList(exportReqVO); - } - - /** - * æ ¹æ® ID 集åˆèŽ·å–åªåŒ…å«å•†å“å称的订å•é›†åˆ - * - * @param idList è®¢å• ID é›†åˆ - * @return åªåŒ…å«å•†å“å称的订å•é›†åˆ - */ - @Override - public List getOrderSubjectList(Collection idList) { - return orderMapper.findByIdListQueryOrderSubject(idList); - } - -} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/impl/PayRefundServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/impl/PayRefundServiceImpl.java deleted file mode 100755 index 00f42ebcde..0000000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/impl/PayRefundServiceImpl.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.pay.service.order.impl; - -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundExportReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundPageReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order.PayRefundMapper; -import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayRefundService; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import javax.annotation.Resource; -import java.util.List; - -/** - * é€€æ¬¾è®¢å• Service 实现类 - * - * @author aquan - */ -@Service -@Validated -public class PayRefundServiceImpl implements PayRefundService { - - @Resource - private PayRefundMapper refundMapper; - - @Override - public PayRefundDO getRefund(Long id) { - return refundMapper.selectById(id); - } - - @Override - public PageResult getRefundPage(PayRefundPageReqVO pageReqVO) { - return refundMapper.selectPage(pageReqVO); - } - - @Override - public List getRefundList(PayRefundExportReqVO exportReqVO) { - return refundMapper.selectList(exportReqVO); - } - -} diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/channel/PayChannelConfig.java b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/channel/PayChannelConfig.java deleted file mode 100644 index bff90e6e08..0000000000 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/channel/PayChannelConfig.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.pay.service.channel; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import javax.validation.Validation; -import javax.validation.Validator; - -/** - * 用于åˆå§‹åŒ– validator Bean 对象 - * @author aquan - */ -@Configuration -public class PayChannelConfig { - - @Bean - public Validator validator(){ - return Validation.buildDefaultValidatorFactory().getValidator(); - } -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/order/PayOrderCoreConvert.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/order/PayOrderCoreConvert.java deleted file mode 100644 index 3e5215cd87..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/order/PayOrderCoreConvert.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.pay.convert.order; - -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO; -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderCreateReqDTO; -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderSubmitReqDTO; -import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderUnifiedReqDTO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -@Mapper -public interface PayOrderCoreConvert { - - PayOrderCoreConvert INSTANCE = Mappers.getMapper(PayOrderCoreConvert.class); - - PayOrderDO convert(PayOrderCreateReqDTO bean); - - PayOrderExtensionDO convert(PayOrderSubmitReqDTO bean); - - PayOrderUnifiedReqDTO convert2(PayOrderSubmitReqDTO bean); - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/order/PayRefundCoreConvert.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/order/PayRefundCoreConvert.java deleted file mode 100644 index 4a4ada555f..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/order/PayRefundCoreConvert.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.pay.convert.order; - -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Mappings; -import org.mapstruct.factory.Mappers; - -@Mapper -public interface PayRefundCoreConvert { - - PayRefundCoreConvert INSTANCE = Mappers.getMapper(PayRefundCoreConvert.class); - - //TODO 太多需è¦å¤„ç†äº†ï¼Œ 暂时ä¸ç”¨ - @Mappings(value = { - @Mapping(source = "amount", target = "payAmount"), - @Mapping(source = "id", target = "orderId"), - @Mapping(target = "status",ignore = true) - }) - PayRefundDO convert(PayOrderDO orderDO); - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/package-info.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/package-info.java deleted file mode 100644 index b10c090290..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -/** - * æä¾› POJO ç±»çš„å®žä½“è½¬æ¢ - * - * ç›®å‰ä½¿ç”¨ MapStruct 框架 - */ -package cn.iocoder.yudao.coreservice.modules.pay.convert; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md deleted file mode 100644 index 8153487b72..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/merchant/PayAppCoreMapper.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/merchant/PayAppCoreMapper.java deleted file mode 100644 index 603ff4609c..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/merchant/PayAppCoreMapper.java +++ /dev/null @@ -1,9 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.merchant; - -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public interface PayAppCoreMapper extends BaseMapperX { -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/merchant/PayChannelCoreMapper.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/merchant/PayChannelCoreMapper.java deleted file mode 100644 index 767a16b24e..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/merchant/PayChannelCoreMapper.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.merchant; - -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Select; - -import java.util.Date; - -@Mapper -public interface PayChannelCoreMapper extends BaseMapperX { - - default PayChannelDO selectByAppIdAndCode(Long appId, String code) { - return selectOne(PayChannelDO::getAppId, appId, PayChannelDO::getCode, code); - } - - @Select("SELECT id FROM pay_channel WHERE update_time > #{maxUpdateTime} LIMIT 1") - Long selectExistsByUpdateTimeAfter(Date maxUpdateTime); - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/order/PayOrderCoreMapper.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/order/PayOrderCoreMapper.java deleted file mode 100644 index 1ed34d549b..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/order/PayOrderCoreMapper.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order; - -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public interface PayOrderCoreMapper extends BaseMapperX { - - default PayOrderDO selectByAppIdAndMerchantOrderId(Long appId, String merchantOrderId) { - return selectOne(new QueryWrapper().eq("app_id", appId) - .eq("merchant_order_id", merchantOrderId)); - } - - default int updateByIdAndStatus(Long id, Integer status, PayOrderDO update) { - return update(update, new QueryWrapper() - .eq("id", id).eq("status", status)); - } - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/order/PayRefundCoreMapper.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/order/PayRefundCoreMapper.java deleted file mode 100644 index 8de1396dde..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/order/PayRefundCoreMapper.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order; - -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import org.apache.ibatis.annotations.Mapper; - - -/** - * é€€æ¬¾è®¢å• Mapper - * - */ -@Mapper -public interface PayRefundCoreMapper extends BaseMapperX { - - default PayRefundDO selectByReqNo(String reqNo) { - return selectOne("req_no", reqNo); - } - - default PayRefundDO selectByTradeNoAndMerchantRefundNo(String tradeNo, String merchantRefundNo){ - return selectOne("trade_no", tradeNo, "merchant_refund_no", merchantRefundNo); - } - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/package-info.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/package-info.java deleted file mode 100644 index 8f5ba6ac30..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -/** - * pay 包下,我们放支付业务,æä¾›ä¸šåŠ¡çš„æ”¯ä»˜èƒ½åŠ›ã€‚ - * 例如说:商户ã€åº”ç”¨ã€æ”¯ä»˜ã€é€€æ¬¾ç­‰ç­‰ - * - * 缩写:pay - */ -package cn.iocoder.yudao.coreservice.modules.pay; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/PayAppCoreService.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/PayAppCoreService.java deleted file mode 100644 index ab6f3f27f0..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/PayAppCoreService.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.pay.service.merchant; - -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO; -import cn.iocoder.yudao.framework.common.exception.ServiceException; - -/** - * 支付应用 Core Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface PayAppCoreService { - - /** - * æ”¯ä»˜åº”ç”¨çš„åˆæ³•性 - * - * 如果ä¸åˆæ³•,抛出 {@link ServiceException} 业务异常 - * - * @param id åº”ç”¨ç¼–å· - * @return åº”ç”¨ä¿¡æ¯ - */ - PayAppDO validPayApp(Long id); - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/PayChannelCoreService.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/PayChannelCoreService.java deleted file mode 100644 index 76d4678759..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/PayChannelCoreService.java +++ /dev/null @@ -1,39 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.pay.service.merchant; - -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO; -import cn.iocoder.yudao.framework.common.exception.ServiceException; - -/** - * æ”¯ä»˜æ¸ é“ Core Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface PayChannelCoreService { - - /** - * åˆå§‹åŒ–支付客户端 - */ - void initPayClients(); - - /** - * 支付渠é“çš„åˆæ³•性 - * - * 如果ä¸åˆæ³•,抛出 {@link ServiceException} 业务异常 - * - * @param id 渠é“ç¼–å· - * @return 渠é“ä¿¡æ¯ - */ - PayChannelDO validPayChannel(Long id); - - /** - * 支付渠é“çš„åˆæ³•性 - * - * 如果ä¸åˆæ³•,抛出 {@link ServiceException} 业务异常 - * - * @param appId åº”ç”¨ç¼–å· - * @param code æ”¯ä»˜æ¸ é“ - * @return 渠é“ä¿¡æ¯ - */ - PayChannelDO validPayChannel(Long appId, String code); - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/impl/PayAppCoreServiceImpl.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/impl/PayAppCoreServiceImpl.java deleted file mode 100644 index 916b501377..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/impl/PayAppCoreServiceImpl.java +++ /dev/null @@ -1,43 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.pay.service.merchant.impl; - -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.merchant.PayAppCoreMapper; -import cn.iocoder.yudao.coreservice.modules.pay.service.merchant.PayAppCoreService; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import javax.validation.Valid; - -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.*; -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; - -/** - * 支付应用 Core Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Valid -@Slf4j -public class PayAppCoreServiceImpl implements PayAppCoreService { - - @Resource - private PayAppCoreMapper payAppCoreMapper; - - @Override - public PayAppDO validPayApp(Long id) { - PayAppDO app = payAppCoreMapper.selectById(id); - // 校验是å¦å­˜åœ¨ - if (app == null) { - throw exception(PAY_APP_NOT_FOUND); - } - // 校验是å¦ç¦ç”¨ - if (CommonStatusEnum.DISABLE.getStatus().equals(app.getStatus())) { - throw exception(PAY_APP_IS_DISABLE); - } - return app; - } - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/impl/PayChannelCoreServiceImpl.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/impl/PayChannelCoreServiceImpl.java deleted file mode 100644 index 5029b6ebd7..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/impl/PayChannelCoreServiceImpl.java +++ /dev/null @@ -1,121 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.pay.service.merchant.impl; - -import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.merchant.PayChannelCoreMapper; -import cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants; -import cn.iocoder.yudao.coreservice.modules.pay.service.merchant.PayChannelCoreService; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.framework.pay.core.client.PayClientFactory; -import lombok.extern.slf4j.Slf4j; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Service; - -import javax.annotation.PostConstruct; -import javax.annotation.Resource; -import javax.validation.Valid; - -import java.util.Comparator; -import java.util.Date; -import java.util.List; - -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.*; -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; - -/** - * æ”¯ä»˜æ¸ é“ Core Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Valid -@Slf4j -public class PayChannelCoreServiceImpl implements PayChannelCoreService { - - /** - * 定时执行 {@link #schedulePeriodicRefresh()} 的周期 - * 因为已ç»é€šè¿‡ Redis Pub/Sub 机制,所以频率ä¸éœ€è¦é«˜ - */ - private static final long SCHEDULER_PERIOD = 5 * 60 * 1000L; - - /** - * 缓存èœå•的最大更新时间,用于åŽç»­çš„增é‡è½®è¯¢ï¼Œåˆ¤æ–­æ˜¯å¦æœ‰æ›´æ–° - */ - private volatile Date maxUpdateTime; - - @Resource - private PayChannelCoreMapper payChannelCoreMapper; - - @Resource - private PayClientFactory payClientFactory; - - @Override - @PostConstruct - public void initPayClients() { - // èŽ·å–æ”¯ä»˜æ¸ é“,如果有更新 - List payChannels = this.loadPayChannelIfUpdate(maxUpdateTime); - if (CollUtil.isEmpty(payChannels)) { - return; - } - - // 创建或更新支付 Client - payChannels.forEach(payChannel -> payClientFactory.createOrUpdatePayClient(payChannel.getId(), - payChannel.getCode(), payChannel.getConfig())); - - // 写入缓存 - assert payChannels.size() > 0; // 断言,é¿å…告警 - maxUpdateTime = payChannels.stream().max(Comparator.comparing(BaseDO::getUpdateTime)).get().getUpdateTime(); - log.info("[initPayClients][åˆå§‹åŒ– PayChannel æ•°é‡ä¸º {}]", payChannels.size()); - } - - @Scheduled(fixedDelay = SCHEDULER_PERIOD, initialDelay = SCHEDULER_PERIOD) - public void schedulePeriodicRefresh() { - initPayClients(); - } - - /** - * 如果支付渠é“å‘生å˜åŒ–,从数æ®åº“ä¸­èŽ·å–æœ€æ–°çš„免釿”¯ä»˜æ¸ é“。 - * 如果未å‘生å˜åŒ–,则返回空 - * - * @param maxUpdateTime 当剿”¯ä»˜æ¸ é“的最大更新时间 - * @return 支付渠é“列表 - */ - private List loadPayChannelIfUpdate(Date maxUpdateTime) { - // 第一步,判断是å¦è¦æ›´æ–°ã€‚ - if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB ä¸€å®šæœ‰æ–°æ•°æ® - log.info("[loadPayChannelIfUpdate][é¦–æ¬¡åŠ è½½å…¨é‡æ”¯ä»˜æ¸ é“]"); - } else { // 判断数æ®åº“ä¸­æ˜¯å¦æœ‰æ›´æ–°çš„æ”¯ä»˜æ¸ é“ - if (payChannelCoreMapper.selectExistsByUpdateTimeAfter(maxUpdateTime) == null) { - return null; - } - log.info("[loadPayChannelIfUpdate][增é‡åŠ è½½å…¨é‡æ”¯ä»˜æ¸ é“]"); - } - // 第二步,如果有更新,则从数æ®åº“åŠ è½½æ‰€æœ‰æ”¯ä»˜æ¸ é“ - return payChannelCoreMapper.selectList(); - } - - @Override - public PayChannelDO validPayChannel(Long id) { - PayChannelDO channel = payChannelCoreMapper.selectById(id); - this.validPayChannel(channel); - return channel; - } - - @Override - public PayChannelDO validPayChannel(Long appId, String code) { - PayChannelDO channel = payChannelCoreMapper.selectByAppIdAndCode(appId, code); - this.validPayChannel(channel); - return channel; - } - - private void validPayChannel(PayChannelDO channel) { - if (channel == null) { - throw exception(PAY_CHANNEL_NOT_FOUND); - } - if (CommonStatusEnum.DISABLE.getStatus().equals(channel.getStatus())) { - throw exception(PayErrorCodeCoreConstants.PAY_CHANNEL_IS_DISABLE); - } - } - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/vo/package-info.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/vo/package-info.java deleted file mode 100644 index 78667d3ce9..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/vo/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -/** - * 这里的 VO 包有点特殊,是æä¾›ç»™æŽ¥å…¥æ”¯ä»˜æ¨¡å—的业务,æä¾›å›žè°ƒæŽ¥å£æ—¶ï¼Œå¯ä»¥ç›´æŽ¥ä½¿ç”¨ VO - * - * 例如说,支付å•的回调,使用 - */ -package cn.iocoder.yudao.coreservice.modules.pay.service.notify.vo; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/PayOrderCoreService.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/PayOrderCoreService.java deleted file mode 100644 index 07e659229b..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/PayOrderCoreService.java +++ /dev/null @@ -1,50 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.pay.service.order; - -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; - -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.*; -import cn.iocoder.yudao.framework.pay.core.client.dto.PayNotifyDataDTO; - -import javax.validation.Valid; - -/** - * æ”¯ä»˜è®¢å• Core Service - * - * @author èŠ‹é“æºç  - */ -public interface PayOrderCoreService { - - /** - * èŽ·å¾—æ”¯ä»˜å• - * - * @param id 支付å•ç¼–å· - * @return æ”¯ä»˜å• - */ - PayOrderDO getPayOrder(Long id); - - /** - * åˆ›å»ºæ”¯ä»˜å• - * - * @param reqDTO 创建请求 - * @return 支付å•ç¼–å· - */ - Long createPayOrder(@Valid PayOrderCreateReqDTO reqDTO); - - /** - * æäº¤æ”¯ä»˜ - * 此时,会å‘起支付渠é“的调用 - * - * @param reqDTO æäº¤è¯·æ±‚ - * @return æäº¤ç»“æžœ - */ - PayOrderSubmitRespDTO submitPayOrder(@Valid PayOrderSubmitReqDTO reqDTO); - - /** - * é€šçŸ¥æ”¯ä»˜å•æˆåŠŸ - * - * @param channelId 渠é“ç¼–å· - * @param notifyData é€šçŸ¥æ•°æ® - */ - void notifyPayOrder(Long channelId, PayNotifyDataDTO notifyData) throws Exception; - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/PayRefundCoreService.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/PayRefundCoreService.java deleted file mode 100644 index b56384ed67..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/PayRefundCoreService.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.pay.service.order; - -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayRefundReqDTO; -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayRefundRespDTO; -import cn.iocoder.yudao.framework.pay.core.client.dto.PayNotifyDataDTO; - -/** - * é€€æ¬¾å• Core Service - * - * @author jason - */ -public interface PayRefundCoreService { - - /** - * æäº¤é€€æ¬¾ç”³è¯· - * - * @param reqDTO é€€æ¬¾ç”³è¯·ä¿¡æ¯ - * @return é€€æ¬¾ç”³è¯·è¿”å›žä¿¡æ¯ - */ - PayRefundRespDTO submitRefundOrder(PayRefundReqDTO reqDTO); - - /** - * 渠é“的退款通知 - * - * @param channelId 渠é“ç¼–å· - * @param notifyData é€šçŸ¥æ•°æ® - * @throws Exception 退款通知异常 - */ - void notifyPayRefund(Long channelId, PayNotifyDataDTO notifyData) throws Exception; - -} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/package-info.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/package-info.java deleted file mode 100644 index 13b4863a5b..0000000000 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.pay.service; diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/enums/PayChannelEnum.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/enums/PayChannelEnum.java index 418676fca2..f8a4971a14 100644 --- a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/enums/PayChannelEnum.java +++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/enums/PayChannelEnum.java @@ -17,10 +17,7 @@ import lombok.Getter; @AllArgsConstructor public enum PayChannelEnum { - /** - * 公众å·ç½‘页 - */ - WX_PUB("wx_pub", "微信 JSAPI 支付", WXPayClientConfig.class), + WX_PUB("wx_pub", "微信 JSAPI 支付", WXPayClientConfig.class), // 公众å·ç½‘页 WX_LITE("wx_lite", "微信å°ç¨‹åºæ”¯ä»˜", WXPayClientConfig.class), WX_APP("wx_app", "微信 App 支付", WXPayClientConfig.class), @@ -34,16 +31,16 @@ public enum PayChannelEnum { *

* å‚考 https://www.pingxx.com/api/支付渠é“属性值.html */ - private String code; + private final String code; /** * åå­— */ - private String name; + private final String name; /** * é…置类 */ - private Class configClass; + private final Class configClass; /** * 微信支付 @@ -58,6 +55,6 @@ public enum PayChannelEnum { public static PayChannelEnum getByCode(String code) { return ArrayUtil.firstMatch(o -> o.getCode().equals(code), values()); } - + } diff --git a/yudao-module-pay/pom.xml b/yudao-module-pay/pom.xml new file mode 100644 index 0000000000..36fd9edb30 --- /dev/null +++ b/yudao-module-pay/pom.xml @@ -0,0 +1,25 @@ + + + + cn.iocoder.boot + yudao + ${revision} + + 4.0.0 + yudao-module-pay + pom + + yudao-module-pay-api + yudao-module-pay-impl + + + ${artifactId} + + pay 模å—,我们放支付业务,æä¾›ä¸šåŠ¡çš„æ”¯ä»˜èƒ½åŠ›ã€‚ + 例如说:商户ã€åº”ç”¨ã€æ”¯ä»˜ã€é€€æ¬¾ç­‰ç­‰ + + + + diff --git a/yudao-module-pay/yudao-module-pay-api/pom.xml b/yudao-module-pay/yudao-module-pay-api/pom.xml new file mode 100644 index 0000000000..d5ec95176c --- /dev/null +++ b/yudao-module-pay/yudao-module-pay-api/pom.xml @@ -0,0 +1,26 @@ + + + + yudao-module-pay + cn.iocoder.boot + 1.4.0-snapshot + + 4.0.0 + yudao-module-pay-api + jar + + ${artifactId} + + pay æ¨¡å— API,暴露给其它模å—调用 + + + + + cn.iocoder.boot + yudao-common + + + + diff --git a/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/DictTypeConstants.java b/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/DictTypeConstants.java new file mode 100644 index 0000000000..2f40f2df47 --- /dev/null +++ b/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/DictTypeConstants.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.pay.enums; + +/** + * Pay 字典类型的枚举类 + * + * @author èŠ‹é“æºç  + */ +public interface DictTypeConstants { + + /** + * 支付-订å•-订å•çŠ¶æ€ + */ + String PAY_ORDER_STATUS = "pay_order_status"; + + /** + * 支付-订å•-订å•å›žè°ƒå•†æˆ·çŠ¶æ€ + */ + String PAY_ORDER_NOTIFY_STATUS = "pay_order_notify_status"; + + /** + * 支付-订å•-订å•é€€æ¬¾çŠ¶æ€ + */ + String PAY_ORDER_REFUND_STATUS = "pay_order_refund_status"; + + /** + * 支付-退款订å•-é€€æ¬¾çŠ¶æ€ + */ + String PAY_REFUND_ORDER_STATUS = "pay_refund_order_status"; + + /** + * 支付-退款订å•-退款类别 + */ + String PAY_REFUND_ORDER_TYPE = "pay_refund_order_type"; + +} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/PayErrorCodeCoreConstants.java b/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/ErrorCodeConstants.java similarity index 97% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/PayErrorCodeCoreConstants.java rename to yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/ErrorCodeConstants.java index f5133ad05c..203cb07038 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/PayErrorCodeCoreConstants.java +++ b/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/ErrorCodeConstants.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.pay.enums; +package cn.iocoder.yudao.module.pay.enums; import cn.iocoder.yudao.framework.common.exception.ErrorCode; @@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode; * * pay 系统,使用 1-007-000-000 段 */ -public interface PayErrorCodeCoreConstants { +public interface ErrorCodeConstants { /** * ========== APP æ¨¡å— 1-007-000-000 ========== diff --git a/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/package-info.java b/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/package-info.java new file mode 100644 index 0000000000..756410aa84 --- /dev/null +++ b/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.pay; diff --git a/yudao-module-pay/yudao-module-pay-impl/pom.xml b/yudao-module-pay/yudao-module-pay-impl/pom.xml new file mode 100644 index 0000000000..f8e6da5dc7 --- /dev/null +++ b/yudao-module-pay/yudao-module-pay-impl/pom.xml @@ -0,0 +1,103 @@ + + + + yudao-module-pay + cn.iocoder.boot + 1.4.0-snapshot + + 4.0.0 + yudao-module-pay-impl + jar + + ${artifactId} + + pay 模å—,我们放支付业务,æä¾›ä¸šåŠ¡çš„æ”¯ä»˜èƒ½åŠ›ã€‚ + 例如说:商户ã€åº”ç”¨ã€æ”¯ä»˜ã€é€€æ¬¾ç­‰ç­‰ + + + + + cn.iocoder.boot + yudao-module-pay-api + ${revision} + + + + + cn.iocoder.boot + yudao-spring-boot-starter-biz-operatelog + + + cn.iocoder.boot + yudao-spring-boot-starter-biz-pay + + + + + cn.iocoder.boot + yudao-spring-boot-starter-security + + + + + cn.iocoder.boot + yudao-spring-boot-starter-mybatis + + + + cn.iocoder.boot + yudao-spring-boot-starter-redis + + + + + cn.iocoder.boot + yudao-spring-boot-starter-job + + + + + cn.iocoder.boot + yudao-spring-boot-starter-mq + + + + + cn.iocoder.boot + yudao-spring-boot-starter-test + test + + + + + cn.iocoder.boot + yudao-spring-boot-starter-excel + + + + + + + ${artifactId} + + + + org.springframework.boot + spring-boot-maven-plugin + + true + + + + + repackage + + + + + + + + diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/PayAppController.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/PayAppController.java similarity index 88% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/PayAppController.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/PayAppController.java index 3446243929..0d06c9e253 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/PayAppController.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/PayAppController.java @@ -1,20 +1,20 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.app; +package cn.iocoder.yudao.module.pay.controller.admin.merchant; import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.*; -import cn.iocoder.yudao.adminserver.modules.pay.convert.app.PayAppConvert; -import cn.iocoder.yudao.adminserver.modules.pay.service.app.PayAppService; -import cn.iocoder.yudao.adminserver.modules.pay.service.channel.PayChannelService; -import cn.iocoder.yudao.adminserver.modules.pay.service.merchant.PayMerchantService; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.*; +import cn.iocoder.yudao.module.pay.convert.app.PayAppConvert; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO; +import cn.iocoder.yudao.module.pay.service.merchant.PayAppService; +import cn.iocoder.yudao.module.pay.service.merchant.PayChannelService; +import cn.iocoder.yudao.module.pay.service.merchant.PayMerchantService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; @@ -33,7 +33,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; @Slf4j -@Api(tags = "支付应用信æ¯") +@Api(tags = "管ç†åŽå° - 支付应用信æ¯") @RestController @RequestMapping("/pay/app") @Validated @@ -106,7 +106,7 @@ public class PayAppController { return success(new PageResult<>(pageResult.getTotal())); } - // 得到所有的应用编å·ï¼ŒæŸ¥å‡ºæ‰€æœ‰çš„é€šé“ + // 得到所有的应用编å·ï¼ŒæŸ¥å‡ºæ‰€æœ‰çš„æ¸ é“ Collection payAppIds = CollectionUtils.convertList(pageResult.getList(), PayAppDO::getId); List channels = channelService.getChannelListByAppIds(payAppIds); // TODO @aquan:å¯ä»¥åŸºäºŽ appId 简历一个 multiMap。这样下é¢ï¼Œç›´æŽ¥ get 到之åŽï¼ŒCollUtil buildSet å³å¯ @@ -116,7 +116,7 @@ public class PayAppController { Collection merchantIds = CollectionUtils.convertList(pageResult.getList(), PayAppDO::getMerchantId); Map deptMap = merchantService.getMerchantMap(merchantIds); - // 利用åå°„å°†é€šé“æ•°æ®å¤åˆ¶åˆ°è¿”回的数æ®ç»“构中去 + // 利用åå°„å°†æ¸ é“æ•°æ®å¤åˆ¶åˆ°è¿”回的数æ®ç»“构中去 List appList = new ArrayList<>(pageResult.getList().size()); pageResult.getList().forEach(app -> { // 写入应用信æ¯çš„æ•°æ® diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/PayChannelController.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/PayChannelController.java similarity index 91% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/PayChannelController.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/PayChannelController.java index ae83ef9cc2..82d3a354e3 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/PayChannelController.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/PayChannelController.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.channel; +package cn.iocoder.yudao.module.pay.controller.admin.merchant; -import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.*; -import cn.iocoder.yudao.adminserver.modules.pay.convert.channel.PayChannelConvert; -import cn.iocoder.yudao.adminserver.modules.pay.service.channel.PayChannelService; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.*; +import cn.iocoder.yudao.module.pay.convert.channel.PayChannelConvert; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO; +import cn.iocoder.yudao.module.pay.service.merchant.PayChannelService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; @@ -26,11 +26,7 @@ import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; -/** - * æ”¯ä»˜æ¸ é“ controller 组件 - * @author aquan - */ -@Api(tags = "支付渠é“") +@Api(tags = "管ç†åŽå° - 支付渠é“") @RestController @RequestMapping("/pay/channel") @Validated @@ -39,7 +35,6 @@ public class PayChannelController { @Resource private PayChannelService channelService; - @PostMapping("/create") @ApiOperation("åˆ›å»ºæ”¯ä»˜æ¸ é“ ") @PreAuthorize("@ss.hasPermission('pay:channel:create')") @@ -116,7 +111,6 @@ public class PayChannelController { @PreAuthorize("@ss.hasPermission('pay:channel:query')") public CommonResult getChannel( @RequestParam Long merchantId, @RequestParam Long appId, @RequestParam String code) { - // ç²å–æ¸ é“ PayChannelDO channel = channelService.getChannelByConditions(merchantId, appId, code); if (channel == null) { @@ -126,4 +120,5 @@ public class PayChannelController { PayChannelRespVO respVo = PayChannelConvert.INSTANCE.convert(channel); return success(respVo); } + } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/PayMerchantController.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/PayMerchantController.java similarity index 92% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/PayMerchantController.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/PayMerchantController.java index ae0235efc1..0882502aac 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/PayMerchantController.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/PayMerchantController.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant; +package cn.iocoder.yudao.module.pay.controller.admin.merchant; -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.*; -import cn.iocoder.yudao.adminserver.modules.pay.convert.merchant.PayMerchantConvert; -import cn.iocoder.yudao.adminserver.modules.pay.service.merchant.PayMerchantService; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.*; +import cn.iocoder.yudao.module.pay.convert.merchant.PayMerchantConvert; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO; +import cn.iocoder.yudao.module.pay.service.merchant.PayMerchantService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppBaseVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppBaseVO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppBaseVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppBaseVO.java index 6ffe565ec4..795b3c6438 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppBaseVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo; +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app; import lombok.*; import io.swagger.annotations.*; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppCreateReqVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppCreateReqVO.java similarity index 50% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppCreateReqVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppCreateReqVO.java index 3b0e69b99c..a66a719632 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppCreateReqVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppCreateReqVO.java @@ -1,11 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo; +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app; import lombok.*; -import java.util.*; import io.swagger.annotations.*; -import javax.validation.constraints.*; -@ApiModel("支付应用信æ¯åˆ›å»º Request VO") +@ApiModel("管ç†åŽå° - 支付应用信æ¯åˆ›å»º Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppExcelVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppExcelVO.java similarity index 83% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppExcelVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppExcelVO.java index f81b53bd08..3fc274a03a 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppExcelVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppExcelVO.java @@ -1,10 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app; import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.util.Date; /** * æ”¯ä»˜åº”ç”¨ä¿¡æ¯ Excel VO diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppExportReqVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppExportReqVO.java similarity index 84% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppExportReqVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppExportReqVO.java index b5d284447f..d8b4642503 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppExportReqVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo; +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app; import lombok.*; import java.util.*; @@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel(value = "æ”¯ä»˜åº”ç”¨ä¿¡æ¯ Excel 导出 Request VO", description = "傿•°å’Œ PayAppPageReqVO 是一致的") +@ApiModel(value = "管ç†åŽå° - æ”¯ä»˜åº”ç”¨ä¿¡æ¯ Excel 导出 Request VO", description = "傿•°å’Œ PayAppPageReqVO 是一致的") @Data public class PayAppExportReqVO { diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppPageItemRespVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppPageItemRespVO.java similarity index 78% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppPageItemRespVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppPageItemRespVO.java index 6d8144afe2..e5ad0825f3 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppPageItemRespVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppPageItemRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo; +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -9,12 +9,7 @@ import lombok.ToString; import java.util.Date; import java.util.Set; -/** - * 支付应用信æ¯åˆ†é¡µæŸ¥è¯¢ Response VO - * - * @author aquan - */ -@ApiModel(value = "支付应用信æ¯åˆ†é¡µæŸ¥è¯¢ Response VO", description = "相比于支付信æ¯ï¼Œè¿˜ä¼šå¤šå‡ºåº”用渠é“的开关信æ¯") +@ApiModel(value = "管ç†åŽå° - 支付应用信æ¯åˆ†é¡µæŸ¥è¯¢ Response VO", description = "相比于支付信æ¯ï¼Œè¿˜ä¼šå¤šå‡ºåº”用渠é“的开关信æ¯") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppPageReqVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppPageReqVO.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppPageReqVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppPageReqVO.java index 62156e9934..62af7e19f5 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppPageReqVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo; +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app; import lombok.*; import java.util.*; @@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel("支付应用信æ¯åˆ†é¡µ Request VO") +@ApiModel("管ç†åŽå° - 支付应用信æ¯åˆ†é¡µ Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppRespVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppRespVO.java similarity index 74% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppRespVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppRespVO.java index 565491f926..e0ac450a2d 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppRespVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppRespVO.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo; +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app; import lombok.*; import java.util.*; import io.swagger.annotations.*; -@ApiModel("æ”¯ä»˜åº”ç”¨ä¿¡æ¯ Response VO") +@ApiModel("管ç†åŽå° - æ”¯ä»˜åº”ç”¨ä¿¡æ¯ Response VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppUpdateReqVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppUpdateReqVO.java similarity index 72% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppUpdateReqVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppUpdateReqVO.java index 426366fc15..9bdd042543 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppUpdateReqVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppUpdateReqVO.java @@ -1,11 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo; +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app; import lombok.*; -import java.util.*; import io.swagger.annotations.*; import javax.validation.constraints.*; -@ApiModel("æ”¯ä»˜åº”ç”¨ä¿¡æ¯æ›´æ–° Request VO") +@ApiModel("管ç†åŽå° - æ”¯ä»˜åº”ç”¨ä¿¡æ¯æ›´æ–° Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppUpdateStatusReqVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppUpdateStatusReqVO.java similarity index 81% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppUpdateStatusReqVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppUpdateStatusReqVO.java index 28a3218ae4..2ccce684cb 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppUpdateStatusReqVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppUpdateStatusReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo; +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -6,7 +6,7 @@ import lombok.Data; import javax.validation.constraints.NotNull; -@ApiModel("åº”ç”¨æ›´æ–°çŠ¶æ€ Request VO") +@ApiModel("管ç†åŽå° - åº”ç”¨æ›´æ–°çŠ¶æ€ Request VO") @Data public class PayAppUpdateStatusReqVO { diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo/PayChannelBaseVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel/PayChannelBaseVO.java similarity index 86% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo/PayChannelBaseVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel/PayChannelBaseVO.java index 42a98b972f..8b9f534904 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo/PayChannelBaseVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel/PayChannelBaseVO.java @@ -1,13 +1,11 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo; +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel; import lombok.*; -import java.util.*; import io.swagger.annotations.*; import javax.validation.constraints.*; /** -* æ”¯ä»˜æ¸ é“ - Base VO,æä¾›ç»™æ·»åŠ ã€ä¿®æ”¹ã€è¯¦ç»†çš„å­ VO 使用 +* æ”¯ä»˜æ¸ é“ Base VO,æä¾›ç»™æ·»åŠ ã€ä¿®æ”¹ã€è¯¦ç»†çš„å­ VO 使用 * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ */ @Data diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo/PayChannelCreateReqVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel/PayChannelCreateReqVO.java similarity index 60% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo/PayChannelCreateReqVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel/PayChannelCreateReqVO.java index a814b7b863..5852f9bb17 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo/PayChannelCreateReqVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel/PayChannelCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo; +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -8,14 +8,14 @@ import lombok.ToString; import javax.validation.constraints.NotBlank; -@ApiModel("æ”¯ä»˜æ¸ é“ åˆ›å»º Request VO") +@ApiModel("管ç†åŽå° - æ”¯ä»˜æ¸ é“ åˆ›å»º Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) public class PayChannelCreateReqVO extends PayChannelBaseVO { - @ApiModelProperty(value = "通é“é…置的 json 字符串") - @NotBlank(message = "通é“é…ç½®ä¸èƒ½ä¸ºç©º") + @ApiModelProperty(value = "渠é“é…置的 json 字符串") + @NotBlank(message = "渠é“é…ç½®ä¸èƒ½ä¸ºç©º") private String config; } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo/PayChannelExcelVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel/PayChannelExcelVO.java similarity index 91% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo/PayChannelExcelVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel/PayChannelExcelVO.java index a4618780ab..780abb18f0 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo/PayChannelExcelVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel/PayChannelExcelVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo; +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel; import lombok.*; import java.util.*; @@ -7,8 +7,7 @@ import io.swagger.annotations.*; import com.alibaba.excel.annotation.ExcelProperty; /** - * æ”¯ä»˜æ¸ é“ - Excel VO + * æ”¯ä»˜æ¸ é“ Excel VO * * @author 芋艿 */ diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo/PayChannelExportReqVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel/PayChannelExportReqVO.java similarity index 85% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo/PayChannelExportReqVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel/PayChannelExportReqVO.java index 29e3acdaf4..d4d6e66532 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo/PayChannelExportReqVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel/PayChannelExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo; +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel; import lombok.*; import java.util.*; @@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel(value = "æ”¯ä»˜æ¸ é“ Excel 导出 Request VO", description = "傿•°å’Œ PayChannelPageReqVO 是一致的") +@ApiModel(value = "管ç†åŽå° - æ”¯ä»˜æ¸ é“ Excel 导出 Request VO", description = "傿•°å’Œ PayChannelPageReqVO 是一致的") @Data public class PayChannelExportReqVO { diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo/PayChannelPageReqVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel/PayChannelPageReqVO.java similarity index 90% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo/PayChannelPageReqVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel/PayChannelPageReqVO.java index 83851f944c..29995d07ab 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo/PayChannelPageReqVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel/PayChannelPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo; +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel; import lombok.*; import java.util.*; @@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel("æ”¯ä»˜æ¸ é“ åˆ†é¡µ Request VO") +@ApiModel("管ç†åŽå° - æ”¯ä»˜æ¸ é“ åˆ†é¡µ Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo/PayChannelRespVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel/PayChannelRespVO.java similarity index 78% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo/PayChannelRespVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel/PayChannelRespVO.java index 02873b9f52..b2644f4d0e 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo/PayChannelRespVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel/PayChannelRespVO.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo; +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel; import lombok.*; import java.util.*; import io.swagger.annotations.*; -@ApiModel("æ”¯ä»˜æ¸ é“ Response VO") +@ApiModel("管ç†åŽå° - æ”¯ä»˜æ¸ é“ Response VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo/PayChannelUpdateReqVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel/PayChannelUpdateReqVO.java similarity index 60% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo/PayChannelUpdateReqVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel/PayChannelUpdateReqVO.java index fdefc7badc..c216de9aea 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo/PayChannelUpdateReqVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel/PayChannelUpdateReqVO.java @@ -1,11 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo; +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel; import lombok.*; -import java.util.*; import io.swagger.annotations.*; import javax.validation.constraints.*; -@ApiModel("æ”¯ä»˜æ¸ é“ æ›´æ–° Request VO") +@ApiModel("管ç†åŽå° - æ”¯ä»˜æ¸ é“ æ›´æ–° Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) @@ -15,7 +14,7 @@ public class PayChannelUpdateReqVO extends PayChannelBaseVO { @NotNull(message = "商户编å·ä¸èƒ½ä¸ºç©º") private Long id; - @ApiModelProperty(value = "通é“é…置的json字符串") - @NotBlank(message = "通é“é…ç½®ä¸èƒ½ä¸ºç©º") + @ApiModelProperty(value = "渠é“é…置的json字符串") + @NotBlank(message = "渠é“é…ç½®ä¸èƒ½ä¸ºç©º") private String config; } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantBaseVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantBaseVO.java similarity index 91% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantBaseVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantBaseVO.java index ed7b69a3f8..1052fdd03e 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantBaseVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo; +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantCreateReqVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantCreateReqVO.java similarity index 51% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantCreateReqVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantCreateReqVO.java index 2128de88bf..018db180be 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantCreateReqVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantCreateReqVO.java @@ -1,11 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo; +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant; import lombok.*; -import java.util.*; import io.swagger.annotations.*; -import javax.validation.constraints.*; -@ApiModel("支付商户信æ¯åˆ›å»º Request VO") +@ApiModel("管ç†åŽå° - 支付商户信æ¯åˆ›å»º Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantExcelVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantExcelVO.java similarity index 91% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantExcelVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantExcelVO.java index cb229fb115..b399a111d7 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantExcelVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantExcelVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo; +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantExportReqVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantExportReqVO.java similarity index 82% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantExportReqVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantExportReqVO.java index c6c3222828..680b04b353 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantExportReqVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo; +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant; import lombok.*; import java.util.*; @@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel(value = "æ”¯ä»˜å•†æˆ·ä¿¡æ¯ Excel 导出 Request VO", description = "傿•°å’Œ PayMerchantPageReqVO 是一致的") +@ApiModel(value = "管ç†åŽå° - æ”¯ä»˜å•†æˆ·ä¿¡æ¯ Excel 导出 Request VO", description = "傿•°å’Œ PayMerchantPageReqVO 是一致的") @Data public class PayMerchantExportReqVO { diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantPageReqVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantPageReqVO.java similarity index 88% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantPageReqVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantPageReqVO.java index 8a66ac9531..241287c986 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantPageReqVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo; +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant; import lombok.*; import java.util.*; @@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel("支付商户信æ¯åˆ†é¡µ Request VO") +@ApiModel("管ç†åŽå° - 支付商户信æ¯åˆ†é¡µ Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantRespVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantRespVO.java similarity index 69% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantRespVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantRespVO.java index d5b194359c..a27c591a14 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantRespVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo; +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -8,7 +8,7 @@ import lombok.ToString; import java.util.Date; -@ApiModel("æ”¯ä»˜å•†æˆ·ä¿¡æ¯ Response VO") +@ApiModel("管ç†åŽå° - æ”¯ä»˜å•†æˆ·ä¿¡æ¯ Response VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) @@ -20,11 +20,7 @@ public class PayMerchantRespVO extends PayMerchantBaseVO { @ApiModelProperty(value = "创建时间", required = true) private Date createTime; - /** - * å•†æˆ·å· - * 例如说,M233666999 - * åªæœ‰æ–°å¢žæ—¶æ’入,ä¸å…许修改 - */ + @ApiModelProperty(value = "商户å·", required = true, example = "M233666999") private String no; } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantUpdateReqVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantUpdateReqVO.java similarity index 71% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantUpdateReqVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantUpdateReqVO.java index 031d34fd5d..d270a3d845 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantUpdateReqVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantUpdateReqVO.java @@ -1,11 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo; +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant; import lombok.*; -import java.util.*; import io.swagger.annotations.*; import javax.validation.constraints.*; -@ApiModel("æ”¯ä»˜å•†æˆ·ä¿¡æ¯æ›´æ–° Request VO") +@ApiModel("管ç†åŽå° - æ”¯ä»˜å•†æˆ·ä¿¡æ¯æ›´æ–° Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantUpdateStatusReqVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantUpdateStatusReqVO.java similarity index 80% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantUpdateStatusReqVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantUpdateStatusReqVO.java index 635876954e..39e26b8b74 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantUpdateStatusReqVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantUpdateStatusReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo; +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -6,7 +6,7 @@ import lombok.Data; import javax.validation.constraints.NotNull; -@ApiModel("å•†æˆ·æ›´æ–°çŠ¶æ€ Request VO") +@ApiModel("管ç†åŽå° - å•†æˆ·æ›´æ–°çŠ¶æ€ Request VO") @Data public class PayMerchantUpdateStatusReqVO { diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/PayOrderController.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/PayOrderController.java similarity index 85% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/PayOrderController.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/PayOrderController.java index 2ac44c66e1..2219204c43 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/PayOrderController.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/PayOrderController.java @@ -1,17 +1,17 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.order; +package cn.iocoder.yudao.module.pay.controller.admin.order; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.*; -import cn.iocoder.yudao.adminserver.modules.pay.convert.order.PayOrderConvert; -import cn.iocoder.yudao.adminserver.modules.pay.service.app.PayAppService; -import cn.iocoder.yudao.adminserver.modules.pay.service.merchant.PayMerchantService; -import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayOrderExtensionService; -import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayOrderService; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO; +import cn.iocoder.yudao.module.pay.controller.admin.order.vo.*; +import cn.iocoder.yudao.module.pay.convert.order.PayOrderConvert; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderExtensionDO; +import cn.iocoder.yudao.module.pay.service.merchant.PayAppService; +import cn.iocoder.yudao.module.pay.service.merchant.PayMerchantService; +import cn.iocoder.yudao.module.pay.service.order.PayOrderExtensionService; +import cn.iocoder.yudao.module.pay.service.order.PayOrderService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; @@ -39,38 +39,18 @@ import java.util.Map; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; -/** - * æ”¯ä»˜è®¢å• controller 组件 - * - * @author aquan - */ -@Api(tags = "支付订å•") +@Api(tags = "管ç†åŽå° - 支付订å•") @RestController @RequestMapping("/pay/order") @Validated public class PayOrderController { - /** - * è®¢å• service 组件 - */ @Resource private PayOrderService orderService; - - /** - * è®¢å•æ‰©å±• service 组件 - */ @Resource private PayOrderExtensionService orderExtensionService; - - /** - * 商户 service 组件 - */ @Resource private PayMerchantService merchantService; - - /** - * 应用 service 组件 - */ @Resource private PayAppService appService; @@ -88,6 +68,7 @@ public class PayOrderController { PayAppDO appDO = appService.getApp(order.getAppId()); PayChannelEnum channelEnum = PayChannelEnum.getByCode(order.getChannelCode()); + // TODO @aquan:文案,都是å‰ç«¯ formatï¼› PayOrderDetailsRespVO respVO = PayOrderConvert.INSTANCE.orderDetailConvert(order); respVO.setMerchantName(ObjectUtil.isNotNull(merchantDO) ? merchantDO.getName() : "未知商户"); respVO.setAppName(ObjectUtil.isNotNull(appDO) ? appDO.getName() : "未知应用"); diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderBaseVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderBaseVO.java similarity index 95% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderBaseVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderBaseVO.java index 320125a403..1064720fba 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderBaseVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order; +package cn.iocoder.yudao.module.pay.controller.admin.order.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -10,8 +10,7 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; /** - * æ”¯ä»˜è®¢å• - * Base VO,æä¾›ç»™æ·»åŠ ã€ä¿®æ”¹ã€è¯¦ç»†çš„å­ VO 使用 + * æ”¯ä»˜è®¢å• Base VO,æä¾›ç»™æ·»åŠ ã€ä¿®æ”¹ã€è¯¦ç»†çš„å­ VO 使用 * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ * * @author aquan diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderDetailsRespVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderDetailsRespVO.java similarity index 82% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderDetailsRespVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderDetailsRespVO.java index d85a9bcb1c..6bf7152b54 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderDetailsRespVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderDetailsRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order; +package cn.iocoder.yudao.module.pay.controller.admin.order.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -8,12 +8,7 @@ import lombok.ToString; import java.util.Date; -/** - * 支付订å•详细信æ¯ï¼Œç”±æ”¯ä»˜è®¢å•å’Œæ”¯ä»˜è®¢å•æ‰©å±•ä¿¡æ¯ç»„æˆ - * - * @author aquan - */ -@ApiModel("支付订å•è¯¦ç»†ä¿¡æ¯ Response VO") +@ApiModel("管ç†åŽå° - 支付订å•è¯¦ç»†ä¿¡æ¯ Response VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderExcelVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderExcelVO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderExcelVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderExcelVO.java index f6836bc8c1..c620e2d1b2 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderExcelVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderExcelVO.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order; +package cn.iocoder.yudao.module.pay.controller.admin.order.vo; -import cn.iocoder.yudao.module.system.enums.DictTypeConstants; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; +import cn.iocoder.yudao.module.pay.enums.DictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderExportReqVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderExportReqVO.java similarity index 92% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderExportReqVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderExportReqVO.java index 3445c86b99..c079ea144a 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderExportReqVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order; +package cn.iocoder.yudao.module.pay.controller.admin.order.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -9,11 +9,7 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -/** - * æ”¯ä»˜è®¢å• Excel 导出 Request VO - * @author aquan - */ -@ApiModel(value = "æ”¯ä»˜è®¢å• Excel 导出 Request VO", description = "傿•°å’Œ PayOrderPageReqVO 是一致的") +@ApiModel(value = "管ç†åŽå° - æ”¯ä»˜è®¢å• Excel 导出 Request VO", description = "傿•°å’Œ PayOrderPageReqVO 是一致的") @Data public class PayOrderExportReqVO { diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderPageItemRespVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderPageItemRespVO.java similarity index 82% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderPageItemRespVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderPageItemRespVO.java index b24b27a470..3c0b4e6351 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderPageItemRespVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderPageItemRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order; +package cn.iocoder.yudao.module.pay.controller.admin.order.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -8,12 +8,7 @@ import lombok.ToString; import java.util.Date; -/** - * 支付订å•分页 Request VO - * - * @author aquan - */ -@ApiModel("支付订å•分页 Request VO") +@ApiModel("管ç†åŽå° - 支付订å•分页 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderPageReqVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderPageReqVO.java similarity index 95% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderPageReqVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderPageReqVO.java index 07fa6a8204..5787ba285a 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderPageReqVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order; +package cn.iocoder.yudao.module.pay.controller.admin.order.vo; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; @@ -12,12 +12,7 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -/** - * 支付订å•分页 Request VO - * - * @author aquan - */ -@ApiModel("支付订å•分页 Request VO") +@ApiModel("管ç†åŽå° - 支付订å•分页 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderRespVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderRespVO.java similarity index 74% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderRespVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderRespVO.java index c466936350..29d0cb611d 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderRespVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order; +package cn.iocoder.yudao.module.pay.controller.admin.order.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -8,12 +8,7 @@ import lombok.ToString; import java.util.Date; -/** - * æ”¯ä»˜è®¢å• Response VO - * - * @author aquan - */ -@ApiModel("æ”¯ä»˜è®¢å• Response VO") +@ApiModel("管ç†åŽå° - æ”¯ä»˜è®¢å• Response VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/PayRefundController.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/PayRefundController.java similarity index 86% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/PayRefundController.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/PayRefundController.java index 912d352543..58cb24fa3a 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/PayRefundController.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/PayRefundController.java @@ -1,17 +1,17 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.order; +package cn.iocoder.yudao.module.pay.controller.admin.refund; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.*; -import cn.iocoder.yudao.adminserver.modules.pay.convert.refund.PayRefundConvert; -import cn.iocoder.yudao.adminserver.modules.pay.service.app.PayAppService; -import cn.iocoder.yudao.adminserver.modules.pay.service.merchant.PayMerchantService; -import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayOrderService; -import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayRefundService; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO; +import cn.iocoder.yudao.module.pay.controller.admin.refund.vo.*; +import cn.iocoder.yudao.module.pay.convert.refund.PayRefundConvert; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.refund.PayRefundDO; +import cn.iocoder.yudao.module.pay.service.merchant.PayAppService; +import cn.iocoder.yudao.module.pay.service.merchant.PayMerchantService; +import cn.iocoder.yudao.module.pay.service.order.PayOrderService; +import cn.iocoder.yudao.module.pay.service.refund.PayRefundService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; @@ -39,12 +39,7 @@ import java.util.Map; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; -/** - * é€€æ¬¾è®¢å• Controller 组件 - * - * @author aquan - */ -@Api(tags = "退款订å•") +@Api(tags = "管ç†åŽå° - 退款订å•") @RestController @RequestMapping("/pay/refund") @Validated @@ -52,26 +47,13 @@ public class PayRefundController { @Resource private PayRefundService refundService; - - /** - * 商户 service 组件 - */ @Resource private PayMerchantService merchantService; - - /** - * 应用 service 组件 - */ @Resource private PayAppService appService; - - /** - * è®¢å• service 组件 - */ @Resource private PayOrderService orderService; - @GetMapping("/get") @ApiOperation("获得退款订å•") @ApiImplicitParam(name = "id", value = "ç¼–å·", required = true, example = "1024", dataTypeClass = Long.class) diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundBaseVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundBaseVO.java similarity index 98% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundBaseVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundBaseVO.java index c8421b0359..594496c773 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundBaseVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; +package cn.iocoder.yudao.module.pay.controller.admin.refund.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundCreateReqVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundCreateReqVO.java similarity index 60% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundCreateReqVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundCreateReqVO.java index 79b05c6253..cc09111ef0 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundCreateReqVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundCreateReqVO.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; +package cn.iocoder.yudao.module.pay.controller.admin.refund.vo; import lombok.*; import io.swagger.annotations.*; -@ApiModel("退款订å•创建 Request VO") +@ApiModel("管ç†åŽå° - 退款订å•创建 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundDetailsRespVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundDetailsRespVO.java similarity index 83% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundDetailsRespVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundDetailsRespVO.java index d1d6739eea..e8a70ecd85 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundDetailsRespVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundDetailsRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; +package cn.iocoder.yudao.module.pay.controller.admin.refund.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -9,12 +9,7 @@ import lombok.ToString; import javax.validation.constraints.NotNull; import java.util.Date; -/** - * 退款订å•详情 Response VO - * - * @author aquan - */ -@ApiModel("退款订å•详情 Response VO") +@ApiModel("管ç†åŽå° - 退款订å•详情 Response VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundExcelVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundExcelVO.java similarity index 93% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundExcelVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundExcelVO.java index 793493eaa9..75e72c8be1 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundExcelVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundExcelVO.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; +package cn.iocoder.yudao.module.pay.controller.admin.refund.vo; -import cn.iocoder.yudao.module.system.enums.DictTypeConstants; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; +import cn.iocoder.yudao.module.pay.enums.DictTypeConstants; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundExportReqVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundExportReqVO.java similarity index 94% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundExportReqVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundExportReqVO.java index 5a0e9c4e01..c0498239ff 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundExportReqVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; +package cn.iocoder.yudao.module.pay.controller.admin.refund.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -9,7 +9,7 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel(value = "é€€æ¬¾è®¢å• Excel 导出 Request VO", description = "傿•°å’Œ PayRefundPageReqVO 是一致的") +@ApiModel(value = "管ç†åŽå° - é€€æ¬¾è®¢å• Excel 导出 Request VO", description = "傿•°å’Œ PayRefundPageReqVO 是一致的") @Data public class PayRefundExportReqVO { diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundPageItemRespVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundPageItemRespVO.java similarity index 79% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundPageItemRespVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundPageItemRespVO.java index 69e881bced..03fe650eed 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundPageItemRespVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundPageItemRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; +package cn.iocoder.yudao.module.pay.controller.admin.refund.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -8,11 +8,7 @@ import lombok.ToString; import java.util.Date; -/** - * 退款订å•分页查询 Response VO - * @author aquan - */ -@ApiModel("退款订å•分页查询 Response VO") +@ApiModel("管ç†åŽå° - 退款订å•分页查询 Response VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundPageReqVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundPageReqVO.java similarity index 96% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundPageReqVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundPageReqVO.java index 103a7a27c6..78272009f8 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundPageReqVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; +package cn.iocoder.yudao.module.pay.controller.admin.refund.vo; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; @@ -12,7 +12,7 @@ import java.util.Date; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@ApiModel("退款订å•分页 Request VO") +@ApiModel("管ç†åŽå° - 退款订å•分页 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundRespVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundRespVO.java similarity index 81% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundRespVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundRespVO.java index 901a0fe85e..97445d77fb 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundRespVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; +package cn.iocoder.yudao.module.pay.controller.admin.refund.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -8,7 +8,7 @@ import lombok.ToString; import java.util.Date; -@ApiModel("é€€æ¬¾è®¢å• Response VO") +@ApiModel("管ç†åŽå° - é€€æ¬¾è®¢å• Response VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundUpdateReqVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundUpdateReqVO.java similarity index 75% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundUpdateReqVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundUpdateReqVO.java index 8cb2dcf67e..b7d5555637 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundUpdateReqVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundUpdateReqVO.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; +package cn.iocoder.yudao.module.pay.controller.admin.refund.vo; import lombok.*; import io.swagger.annotations.*; import javax.validation.constraints.*; -@ApiModel("é€€æ¬¾è®¢å•æ›´æ–° Request VO") +@ApiModel("管ç†åŽå° - é€€æ¬¾è®¢å•æ›´æ–° Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/PayOrderController.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/order/AppPayOrderController.java similarity index 69% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/PayOrderController.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/order/AppPayOrderController.java index fb022b106a..e01f7f4f48 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/PayOrderController.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/order/AppPayOrderController.java @@ -1,17 +1,17 @@ -package cn.iocoder.yudao.userserver.modules.pay.controller.order; +package cn.iocoder.yudao.module.pay.controller.app.order; import cn.hutool.core.bean.BeanUtil; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; -import cn.iocoder.yudao.coreservice.modules.pay.service.order.PayOrderCoreService; -import cn.iocoder.yudao.coreservice.modules.pay.service.order.PayRefundCoreService; -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderSubmitReqDTO; -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderSubmitRespDTO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.pay.core.client.PayClient; import cn.iocoder.yudao.framework.pay.core.client.PayClientFactory; import cn.iocoder.yudao.framework.pay.core.client.dto.PayNotifyDataDTO; -import cn.iocoder.yudao.userserver.modules.pay.controller.order.vo.PayOrderSubmitReqVO; -import cn.iocoder.yudao.userserver.modules.pay.controller.order.vo.PayOrderSubmitRespVO; +import cn.iocoder.yudao.module.pay.controller.app.order.vo.AppPayOrderSubmitReqVO; +import cn.iocoder.yudao.module.pay.controller.app.order.vo.AppPayOrderSubmitRespVO; +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO; +import cn.iocoder.yudao.module.pay.service.order.PayOrderService; +import cn.iocoder.yudao.module.pay.service.order.dto.PayOrderSubmitReqDTO; +import cn.iocoder.yudao.module.pay.service.order.dto.PayOrderSubmitRespDTO; +import cn.iocoder.yudao.module.pay.service.refund.PayRefundService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -21,52 +21,52 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.Map; -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.PAY_CHANNEL_CLIENT_NOT_FOUND; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; +import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.*; -@Api(tags = "支付订å•") +@Api(tags = "用户 APP - 支付订å•") @RestController @RequestMapping("/pay/order") @Validated @Slf4j -public class PayOrderController { +public class AppPayOrderController { @Resource - private PayOrderCoreService payOrderCoreService; + private PayOrderService orderService; @Resource - private PayRefundCoreService payRefundCoreService; + private PayRefundService refundService; @Resource private PayClientFactory payClientFactory; - @PostMapping("/submit") @ApiOperation("æäº¤æ”¯ä»˜è®¢å•") // @PreAuthenticated // TODO 暂时ä¸åŠ ç™»é™†éªŒè¯ï¼Œå‰ç«¯æš‚时没åšå¥½ - public CommonResult submitPayOrder(@RequestBody PayOrderSubmitReqVO reqVO) { + public CommonResult submitPayOrder(@RequestBody AppPayOrderSubmitReqVO reqVO) { // èŽ·å¾—è®¢å• - PayOrderDO payOrder = payOrderCoreService.getPayOrder(reqVO.getId()); + PayOrderDO payOrder = orderService.getOrder(reqVO.getId()); // æäº¤æ”¯ä»˜ PayOrderSubmitReqDTO reqDTO = new PayOrderSubmitReqDTO(); BeanUtil.copyProperties(reqVO, reqDTO, false); reqDTO.setUserIp(getClientIP()); reqDTO.setAppId(payOrder.getAppId()); - PayOrderSubmitRespDTO respDTO = payOrderCoreService.submitPayOrder(reqDTO); + PayOrderSubmitRespDTO respDTO = orderService.submitPayOrder(reqDTO); // 拼接返回 - return success(PayOrderSubmitRespVO.builder().invokeResponse(respDTO.getInvokeResponse()).build()); + return success(AppPayOrderSubmitRespVO.builder().invokeResponse(respDTO.getInvokeResponse()).build()); } // ========== 支付渠é“的回调 ========== + // TODO @èŠ‹è‰¿ï¼šæ˜¯ä¸æ˜¯æ”¾åˆ° notify æ¨¡å—æ›´åˆé€‚ //TODO èŠ‹é“æºç  æ¢æˆäº†ç»Ÿä¸€çš„地å€äº† /notify/{channelId},测试通过å¯ä»¥åˆ é™¤ @PostMapping("/notify/wx-pub/{channelId}") @ApiOperation("é€šçŸ¥å¾®ä¿¡å…¬ä¼—å·æ”¯ä»˜çš„结果") public String notifyWxPayOrder(@PathVariable("channelId") Long channelId, @RequestBody String xmlData) throws Exception { - payOrderCoreService.notifyPayOrder(channelId, PayNotifyDataDTO.builder().body(xmlData).build()); + orderService.notifyPayOrder(channelId, PayNotifyDataDTO.builder().body(xmlData).build()); return "success"; } @@ -110,12 +110,12 @@ public class PayOrderController { // 如果是退款,则å‘起退款通知 if (payClient.isRefundNotify(notifyData)) { - payRefundCoreService.notifyPayRefund(channelId, PayNotifyDataDTO.builder().params(params).body(originData).build()); + refundService.notifyPayRefund(channelId, PayNotifyDataDTO.builder().params(params).body(originData).build()); return "success"; } // 如果éžé€€æ¬¾ï¼Œåˆ™å‘起支付通知 - payOrderCoreService.notifyPayOrder(channelId, PayNotifyDataDTO.builder().params(params).body(originData).build()); + orderService.notifyPayOrder(channelId, PayNotifyDataDTO.builder().params(params).body(originData).build()); return "success"; } diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/vo/PayOrderSubmitReqVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/order/vo/AppPayOrderSubmitReqVO.java similarity index 83% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/vo/PayOrderSubmitReqVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/order/vo/AppPayOrderSubmitReqVO.java index 407edb1717..6834c3838e 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/vo/PayOrderSubmitReqVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/order/vo/AppPayOrderSubmitReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.pay.controller.order.vo; +package cn.iocoder.yudao.module.pay.controller.app.order.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -9,10 +9,10 @@ import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.util.Map; -@ApiModel("æ”¯ä»˜è®¢å•æäº¤ Request VO") +@ApiModel("用户 APP - æ”¯ä»˜è®¢å•æäº¤ Request VO") @Data @Accessors(chain = true) -public class PayOrderSubmitReqVO { +public class AppPayOrderSubmitReqVO { @ApiModelProperty(value = "支付å•ç¼–å·", required = true, example = "1024") @NotNull(message = "支付å•ç¼–å·ä¸èƒ½ä¸ºç©º") diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/vo/PayOrderSubmitRespVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/order/vo/AppPayOrderSubmitRespVO.java similarity index 69% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/vo/PayOrderSubmitRespVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/order/vo/AppPayOrderSubmitRespVO.java index 907a979467..7fcffd0975 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/vo/PayOrderSubmitRespVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/order/vo/AppPayOrderSubmitRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.pay.controller.order.vo; +package cn.iocoder.yudao.module.pay.controller.app.order.vo; import io.swagger.annotations.ApiModel; import lombok.AllArgsConstructor; @@ -7,13 +7,13 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; -@ApiModel("æ”¯ä»˜è®¢å•æäº¤ Response VO") +@ApiModel("用户 APP - æ”¯ä»˜è®¢å•æäº¤ Response VO") @Data @Accessors(chain = true) @Builder @NoArgsConstructor @AllArgsConstructor -public class PayOrderSubmitRespVO { +public class AppPayOrderSubmitRespVO { /** * 调用支付渠é“çš„å“应结果 diff --git a/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/package-info.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/package-info.java new file mode 100644 index 0000000000..333cbe6594 --- /dev/null +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.pay.controller.app; diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/PayRefundController.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/refund/AppPayRefundController.java similarity index 51% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/PayRefundController.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/refund/AppPayRefundController.java index ba62bdd8ab..42fdc5dcb9 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/PayRefundController.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/refund/AppPayRefundController.java @@ -1,13 +1,13 @@ -package cn.iocoder.yudao.userserver.modules.pay.controller.order; +package cn.iocoder.yudao.module.pay.controller.app.refund; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.coreservice.modules.pay.service.order.PayRefundCoreService; -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayRefundReqDTO; -import cn.iocoder.yudao.coreservice.modules.pay.util.PaySeqUtils; import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.userserver.modules.pay.controller.order.vo.PayRefundReqVO; -import cn.iocoder.yudao.userserver.modules.pay.controller.order.vo.PayRefundRespVO; -import cn.iocoder.yudao.userserver.modules.pay.convert.order.PayRefundConvert; +import cn.iocoder.yudao.module.pay.controller.app.refund.vo.AppPayRefundReqVO; +import cn.iocoder.yudao.module.pay.controller.app.refund.vo.AppPayRefundRespVO; +import cn.iocoder.yudao.module.pay.convert.refund.PayRefundConvert; +import cn.iocoder.yudao.module.pay.service.order.dto.PayRefundReqDTO; +import cn.iocoder.yudao.module.pay.service.refund.PayRefundService; +import cn.iocoder.yudao.module.pay.util.PaySeqUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -19,28 +19,29 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; -@Api(tags = "退款订å•") +@Api(tags = "用户 APP - 退款订å•") @RestController -@RequestMapping("/pay/order") +@RequestMapping("/pay/refund") @Validated @Slf4j -public class PayRefundController { +public class AppPayRefundController { @Resource - private PayRefundCoreService payRefundCoreService; + private PayRefundService refundService; @PostMapping("/refund") @ApiOperation("æäº¤é€€æ¬¾è®¢å•") - public CommonResult submitRefundOrder(@RequestBody PayRefundReqVO reqVO){ + public CommonResult submitRefundOrder(@RequestBody AppPayRefundReqVO reqVO){ PayRefundReqDTO req = PayRefundConvert.INSTANCE.convert(reqVO); req.setUserIp(getClientIP()); - //TODO 测试暂时模拟生æˆå•†æˆ·é€€æ¬¾è®¢å• + // TODO 测试暂时模拟生æˆå•†æˆ·é€€æ¬¾è®¢å• if(StrUtil.isEmpty(reqVO.getMerchantRefundId())) { req.setMerchantRefundId(PaySeqUtils.genMerchantRefundNo()); } - return CommonResult.success( PayRefundConvert.INSTANCE.convert(payRefundCoreService.submitRefundOrder(req))); + return success(PayRefundConvert.INSTANCE.convert(refundService.submitRefundOrder(req))); } } diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/vo/PayRefundReqVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/refund/vo/AppPayRefundReqVO.java similarity index 87% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/vo/PayRefundReqVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/refund/vo/AppPayRefundReqVO.java index 8287ba0360..c810f3829c 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/vo/PayRefundReqVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/refund/vo/AppPayRefundReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.userserver.modules.pay.controller.order.vo; +package cn.iocoder.yudao.module.pay.controller.app.refund.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -8,11 +8,11 @@ import lombok.NoArgsConstructor; import javax.validation.constraints.NotEmpty; -@ApiModel("é€€æ¬¾è®¢å• Req VO") +@ApiModel("用户 APP - é€€æ¬¾è®¢å• Req VO") @Data @NoArgsConstructor @AllArgsConstructor -public class PayRefundReqVO { +public class AppPayRefundReqVO { @ApiModelProperty(value = "支付订å•ç¼–å·è‡ªå¢ž", required = true, example = "10") @NotEmpty(message = "支付订å•ç¼–å·è‡ªå¢ž") diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/vo/PayRefundRespVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/refund/vo/AppPayRefundRespVO.java similarity index 51% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/vo/PayRefundRespVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/refund/vo/AppPayRefundRespVO.java index 29059ab285..5342432812 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/vo/PayRefundRespVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/refund/vo/AppPayRefundRespVO.java @@ -1,22 +1,22 @@ -package cn.iocoder.yudao.userserver.modules.pay.controller.order.vo; +package cn.iocoder.yudao.module.pay.controller.app.refund.vo; import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; -@ApiModel("æäº¤é€€æ¬¾è®¢å• Response VO") +@ApiModel("用户 APP - æäº¤é€€æ¬¾è®¢å• Response VO") @Data @Accessors(chain = true) @Builder @NoArgsConstructor @AllArgsConstructor -public class PayRefundRespVO { +public class AppPayRefundRespVO { - /** - * 支付退款å•ç¼–å·ï¼Œ 自增 - */ + @ApiModelProperty(value = "退款订å•ç¼–å·", required = true, example = "10") private Long refundId; + } diff --git a/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/package-info.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/package-info.java new file mode 100644 index 0000000000..652122752d --- /dev/null +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/package-info.java @@ -0,0 +1,6 @@ +/** + * æä¾› RESTful API ç»™å‰ç«¯ï¼š + * 1. admin 包:æä¾›ç»™ç®¡ç†åŽå° yudao-ui-admin å‰ç«¯é¡¹ç›® + * 2. app 包:æä¾›ç»™ç”¨æˆ· APP yudao-ui-app å‰ç«¯é¡¹ç›®ï¼Œå®ƒçš„ Controller å’Œ VO éƒ½è¦æ·»åŠ  App å‰ç¼€ï¼Œç”¨äºŽå’Œç®¡ç†åŽå°è¿›è¡ŒåŒºåˆ† + */ +package cn.iocoder.yudao.module.pay.controller; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/app/PayAppConvert.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/convert/app/PayAppConvert.java similarity index 71% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/app/PayAppConvert.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/convert/app/PayAppConvert.java index c7e17467d8..432699bc2d 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/app/PayAppConvert.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/convert/app/PayAppConvert.java @@ -1,14 +1,14 @@ -package cn.iocoder.yudao.adminserver.modules.pay.convert.app; +package cn.iocoder.yudao.module.pay.convert.app; import java.util.*; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.*; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.*; /** * æ”¯ä»˜åº”ç”¨ä¿¡æ¯ Convert diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/channel/PayChannelConvert.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/convert/channel/PayChannelConvert.java similarity index 64% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/channel/PayChannelConvert.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/convert/channel/PayChannelConvert.java index ee0473c237..2535008ea8 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/channel/PayChannelConvert.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/convert/channel/PayChannelConvert.java @@ -1,22 +1,18 @@ -package cn.iocoder.yudao.adminserver.modules.pay.convert.channel; +package cn.iocoder.yudao.module.pay.convert.channel; import java.util.*; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.pay.core.client.impl.wx.WXPayClientConfig; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelCreateReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelExcelVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelRespVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelUpdateReqVO; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.factory.Mappers; -import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.*; -/** - * æ”¯ä»˜æ¸ é“ - Convert - * - * @author 芋艿 - */ @Mapper public interface PayChannelConvert { diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/merchant/PayMerchantConvert.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/convert/merchant/PayMerchantConvert.java similarity index 56% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/merchant/PayMerchantConvert.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/convert/merchant/PayMerchantConvert.java index 9483ff120d..1cb51a2bbf 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/merchant/PayMerchantConvert.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/convert/merchant/PayMerchantConvert.java @@ -1,19 +1,17 @@ -package cn.iocoder.yudao.adminserver.modules.pay.convert.merchant; +package cn.iocoder.yudao.module.pay.convert.merchant; import java.util.*; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantCreateReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantExcelVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantRespVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantUpdateReqVO; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.*; -/** - * æ”¯ä»˜å•†æˆ·ä¿¡æ¯ Convert - * - * @author 芋艿 - */ @Mapper public interface PayMerchantConvert { diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/order/PayOrderConvert.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/convert/order/PayOrderConvert.java similarity index 72% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/order/PayOrderConvert.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/convert/order/PayOrderConvert.java index 308298ac68..49df1ea644 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/order/PayOrderConvert.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/convert/order/PayOrderConvert.java @@ -1,12 +1,15 @@ -package cn.iocoder.yudao.adminserver.modules.pay.convert.order; +package cn.iocoder.yudao.module.pay.convert.order; -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderDetailsRespVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderExcelVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderPageItemRespVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderRespVO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO; +import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderUnifiedReqDTO; +import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderDetailsRespVO; +import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderExcelVO; +import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderPageItemRespVO; +import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderRespVO; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderExtensionDO; +import cn.iocoder.yudao.module.pay.service.order.dto.PayOrderCreateReqDTO; +import cn.iocoder.yudao.module.pay.service.order.dto.PayOrderSubmitReqDTO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -24,24 +27,10 @@ public interface PayOrderConvert { PayOrderConvert INSTANCE = Mappers.getMapper(PayOrderConvert.class); - - PayOrderRespVO convert(PayOrderDO bean); - /** - * 订å•DO 转æ¢ä¸º è¯¦ç»†è®¢å• RespVO - * - * @param bean 订å•DO - * @return è¯¦ç»†è®¢å• RespVO - */ PayOrderDetailsRespVO orderDetailConvert(PayOrderDO bean); - /** - * è®¢å•æ‰©å±•DO 转æ¢ä¸º è¯¦ç»†è®¢å•æ‰©å±• RespVO - * - * @param bean è®¢å•æ‰©å±•DO - * @return è¯¦ç»†è®¢å•æ‰©å±• RespVO - */ PayOrderDetailsRespVO.PayOrderExtension orderDetailExtensionConvert(PayOrderExtensionDO bean); List convertList(List list); @@ -58,12 +47,6 @@ public interface PayOrderConvert { */ PayOrderPageItemRespVO pageConvertItemPage(PayOrderDO bean); - /** - * 订å•DO 转 订å•导出excel VO - * - * @param bean è®¢å• DO - * @return 订å•导出excel VO - */ default PayOrderExcelVO excelConvert(PayOrderDO bean) { if (bean == null) { return null; @@ -101,4 +84,12 @@ public interface PayOrderConvert { return payOrderExcelVO; } + + + PayOrderDO convert(PayOrderCreateReqDTO bean); + + PayOrderExtensionDO convert(PayOrderSubmitReqDTO bean); + + PayOrderUnifiedReqDTO convert2(PayOrderSubmitReqDTO bean); + } diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/convert/package-info.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/convert/package-info.java similarity index 57% rename from yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/convert/package-info.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/convert/package-info.java index 3f27f0b4b9..df43d5ac3e 100644 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/convert/package-info.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/convert/package-info.java @@ -3,4 +3,4 @@ * * ç›®å‰ä½¿ç”¨ MapStruct 框架 */ -package cn.iocoder.yudao.userserver.modules.pay.convert; +package cn.iocoder.yudao.module.pay.convert; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/refund/PayRefundConvert.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/convert/refund/PayRefundConvert.java similarity index 73% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/refund/PayRefundConvert.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/convert/refund/PayRefundConvert.java index 8f5ee66d31..2e034c63e8 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/refund/PayRefundConvert.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/convert/refund/PayRefundConvert.java @@ -1,9 +1,16 @@ -package cn.iocoder.yudao.adminserver.modules.pay.convert.refund; +package cn.iocoder.yudao.module.pay.convert.refund; -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.*; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.pay.controller.admin.refund.vo.*; +import cn.iocoder.yudao.module.pay.controller.app.refund.vo.AppPayRefundReqVO; +import cn.iocoder.yudao.module.pay.controller.app.refund.vo.AppPayRefundRespVO; +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.refund.PayRefundDO; +import cn.iocoder.yudao.module.pay.service.order.dto.PayRefundReqDTO; +import cn.iocoder.yudao.module.pay.service.order.dto.PayRefundRespDTO; import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Mappings; import org.mapstruct.factory.Mappers; import java.math.BigDecimal; @@ -87,4 +94,16 @@ public interface PayRefundConvert { return payRefundExcelVO; } + //TODO 太多需è¦å¤„ç†äº†ï¼Œ 暂时ä¸ç”¨ + @Mappings(value = { + @Mapping(source = "amount", target = "payAmount"), + @Mapping(source = "id", target = "orderId"), + @Mapping(target = "status",ignore = true) + }) + PayRefundDO convert(PayOrderDO orderDO); + + PayRefundReqDTO convert(AppPayRefundReqVO bean); + + AppPayRefundRespVO convert(PayRefundRespDTO bean); + } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md similarity index 100% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/merchant/PayAppDO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/merchant/PayAppDO.java similarity index 94% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/merchant/PayAppDO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/merchant/PayAppDO.java index acc849cbc6..371a92b399 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/merchant/PayAppDO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/merchant/PayAppDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant; +package cn.iocoder.yudao.module.pay.dal.dataobject.merchant; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/merchant/PayChannelDO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/merchant/PayChannelDO.java similarity index 95% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/merchant/PayChannelDO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/merchant/PayChannelDO.java index 5275dd4288..a670db4634 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/merchant/PayChannelDO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/merchant/PayChannelDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant; +package cn.iocoder.yudao.module.pay.dal.dataobject.merchant; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/merchant/PayMerchantDO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/merchant/PayMerchantDO.java similarity index 94% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/merchant/PayMerchantDO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/merchant/PayMerchantDO.java index a0c72b9ec0..ebd735b039 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/merchant/PayMerchantDO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/merchant/PayMerchantDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant; +package cn.iocoder.yudao.module.pay.dal.dataobject.merchant; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/notify/PayNotifyLogDO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/notify/PayNotifyLogDO.java similarity index 86% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/notify/PayNotifyLogDO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/notify/PayNotifyLogDO.java index 85626006cf..92ecc39e63 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/notify/PayNotifyLogDO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/notify/PayNotifyLogDO.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.notify; +package cn.iocoder.yudao.module.pay.dal.dataobject.notify; -import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyStatusEnum; +import cn.iocoder.yudao.module.pay.enums.notify.PayNotifyStatusEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import com.baomidou.mybatisplus.annotation.TableName; import lombok.*; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/notify/PayNotifyTaskDO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/notify/PayNotifyTaskDO.java similarity index 78% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/notify/PayNotifyTaskDO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/notify/PayNotifyTaskDO.java index 3d10ac83a4..3884f152fc 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/notify/PayNotifyTaskDO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/notify/PayNotifyTaskDO.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.notify; +package cn.iocoder.yudao.module.pay.dal.dataobject.notify; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO; -import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyStatusEnum; -import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyTypeEnum; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.refund.PayRefundDO; +import cn.iocoder.yudao.module.pay.enums.notify.PayNotifyStatusEnum; +import cn.iocoder.yudao.module.pay.enums.notify.PayNotifyTypeEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/order/PayOrderDO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/order/PayOrderDO.java similarity index 84% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/order/PayOrderDO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/order/PayOrderDO.java index 65cf94bf24..931b856519 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/order/PayOrderDO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/order/PayOrderDO.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order; +package cn.iocoder.yudao.module.pay.dal.dataobject.order; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderNotifyStatusEnum; -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundTypeEnum; -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderStatusEnum; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO; +import cn.iocoder.yudao.module.pay.enums.order.PayOrderNotifyStatusEnum; +import cn.iocoder.yudao.module.pay.enums.refund.PayRefundTypeEnum; +import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum; import com.baomidou.mybatisplus.annotation.TableName; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/order/PayOrderExtensionDO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/order/PayOrderExtensionDO.java similarity index 89% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/order/PayOrderExtensionDO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/order/PayOrderExtensionDO.java index 5a6b8431a4..8606e082bb 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/order/PayOrderExtensionDO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/order/PayOrderExtensionDO.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order; +package cn.iocoder.yudao.module.pay.dal.dataobject.order; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO; -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderStatusEnum; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO; +import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/order/PayRefundDO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/refund/PayRefundDO.java similarity index 90% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/order/PayRefundDO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/refund/PayRefundDO.java index fc897a5e08..f5e3a1f7ca 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/order/PayRefundDO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/refund/PayRefundDO.java @@ -1,10 +1,11 @@ -package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order; +package cn.iocoder.yudao.module.pay.dal.dataobject.refund; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundStatusEnum; -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundTypeEnum; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO; +import cn.iocoder.yudao.module.pay.enums.refund.PayRefundStatusEnum; +import cn.iocoder.yudao.module.pay.enums.refund.PayRefundTypeEnum; import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import com.baomidou.mybatisplus.annotation.TableId; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/app/PayAppMapper.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/merchant/PayAppMapper.java similarity index 68% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/app/PayAppMapper.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/merchant/PayAppMapper.java index c6e3b38e93..03cb0439d1 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/app/PayAppMapper.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/merchant/PayAppMapper.java @@ -1,32 +1,20 @@ -package cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.app; +package cn.iocoder.yudao.module.pay.dal.mysql.merchant; -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppExportReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppPageReqVO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppExportReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppPageReqVO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.apache.ibatis.annotations.Mapper; import java.util.Collection; import java.util.List; -/** - * æ”¯ä»˜åº”ç”¨ä¿¡æ¯ Mapper - * - * @author aquan - */ @Mapper public interface PayAppMapper extends BaseMapperX { - /** - * 分页查询 - * - * @param reqVO 支付应用信æ¯åˆ†é¡µæŸ¥è¯¢æ¡ä»¶ - * @param merchantIds 商户 ID é›†åˆ - * @return æ”¯ä»˜åº”ç”¨ä¿¡æ¯ - */ default PageResult selectPage(PayAppPageReqVO reqVO, Collection merchantIds) { return selectPage(reqVO, new QueryWrapperX() .likeIfPresent("name", reqVO.getName()) @@ -39,13 +27,6 @@ public interface PayAppMapper extends BaseMapperX { .orderByDesc("id")); } - /** - * 列表查询 - * - * @param reqVO æ”¯ä»˜åº”ç”¨ä¿¡æ¯ Excel 导出查询æ¡ä»¶ - * @param merchantIds 商户 ID é›†åˆ - * @return æ”¯ä»˜åº”ç”¨ä¿¡æ¯ - */ default List selectList(PayAppExportReqVO reqVO, Collection merchantIds) { return selectList(new QueryWrapperX() .likeIfPresent("name", reqVO.getName()) @@ -58,24 +39,13 @@ public interface PayAppMapper extends BaseMapperX { .orderByDesc("id")); } - /** - * æ ¹æ® å•†æˆ· ID æŸ¥è¯¢æ”¯ä»˜åº”ç”¨ä¿¡æ¯ - * - * @param merchantId 商户 ID - * @return 支付应用信æ¯åˆ—表 - */ default List getListByMerchantId(String merchantId) { return selectList(new LambdaQueryWrapper() .select(PayAppDO::getId, PayAppDO::getName) .eq(PayAppDO::getMerchantId, merchantId)); } - /** - * æ ¹æ®å•†æˆ·å·ç»Ÿè®¡å­˜åœ¨çš„æ”¯ä»˜åº”ç”¨æ•°é‡ - * - * @param merchantId 商户 ID - * @return æ”¯ä»˜åº”ç”¨æ•°é‡ - */ + // TODO @aquan:方法å补充 ByMerchantId default Long selectCount(Long merchantId) { return selectCount(new LambdaQueryWrapper().eq(PayAppDO::getMerchantId, merchantId)); } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/channel/PayChannelMapper.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/merchant/PayChannelMapper.java similarity index 76% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/channel/PayChannelMapper.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/merchant/PayChannelMapper.java index 54a4829a99..c1871531e4 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/channel/PayChannelMapper.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/merchant/PayChannelMapper.java @@ -1,26 +1,29 @@ -package cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.channel; +package cn.iocoder.yudao.module.pay.dal.mysql.merchant; -import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.PayChannelExportReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.PayChannelPageReqVO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelExportReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelPageReqVO; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; import java.util.Collection; +import java.util.Date; import java.util.List; -/** - * æ”¯ä»˜æ¸ é“ - Mapper - * - * @author 芋艿 - */ @Mapper public interface PayChannelMapper extends BaseMapperX { + default PayChannelDO selectByAppIdAndCode(Long appId, String code) { + return selectOne(PayChannelDO::getAppId, appId, PayChannelDO::getCode, code); + } + + @Select("SELECT id FROM pay_channel WHERE update_time > #{maxUpdateTime} LIMIT 1") + Long selectExistsByUpdateTimeAfter(Date maxUpdateTime); + default PageResult selectPage(PayChannelPageReqVO reqVO) { return selectPage(reqVO, new QueryWrapperX() .eqIfPresent("code", reqVO.getCode()) @@ -48,11 +51,11 @@ public interface PayChannelMapper extends BaseMapperX { } /** - * æ ¹æ®æ¡ä»¶èŽ·å–é€šé“æ•°é‡ + * æ ¹æ®æ¡ä»¶èŽ·å–æ¸ é“æ•°é‡ * * @param merchantId å•†æˆ·ç¼–å· * @param appid åº”ç”¨ç¼–å· - * @param code 通é“ç¼–ç  + * @param code 渠é“ç¼–ç  * @return æ•°é‡ */ default Integer selectCount(Long merchantId, Long appid, String code) { @@ -63,11 +66,11 @@ public interface PayChannelMapper extends BaseMapperX { } /** - * æ ¹æ®æ¡ä»¶èŽ·å–é€šé“ + * æ ¹æ®æ¡ä»¶èŽ·å–æ¸ é“ * * @param merchantId å•†æˆ·ç¼–å· - * @param appid åº”ç”¨ç¼–å· - * @param code 通é“ç¼–ç  + * @param appid åº”ç”¨ç¼–å· // TODO @aquan:appid =》appId + * @param code 渠é“ç¼–ç  * @return æ•°é‡ */ default PayChannelDO selectOne(Long merchantId, Long appid, String code) { @@ -78,6 +81,7 @@ public interface PayChannelMapper extends BaseMapperX { )); } + // TODO @aquan:select 命å /** * æ ¹æ®æ”¯ä»˜åº”用ID集åˆèŽ·å¾—æ”¯ä»˜æ¸ é“列表 * @@ -88,4 +92,5 @@ public interface PayChannelMapper extends BaseMapperX { return this.selectList(new QueryWrapper().lambda() .in(PayChannelDO::getAppId, appIds)); } + } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/merchant/PayMerchantMapper.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/merchant/PayMerchantMapper.java similarity index 82% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/merchant/PayMerchantMapper.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/merchant/PayMerchantMapper.java index f143b18578..050302b4c4 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/merchant/PayMerchantMapper.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/merchant/PayMerchantMapper.java @@ -1,20 +1,15 @@ -package cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.merchant; +package cn.iocoder.yudao.module.pay.dal.mysql.merchant; -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantExportReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantPageReqVO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantExportReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantPageReqVO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO; import org.apache.ibatis.annotations.Mapper; import java.util.List; -/** - * æ”¯ä»˜å•†æˆ·ä¿¡æ¯ Mapper - * - * @author 芋艿 - */ @Mapper public interface PayMerchantMapper extends BaseMapperX { diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/notify/PayNotifyLogCoreMapper.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/notify/PayNotifyLogCoreMapper.java similarity index 56% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/notify/PayNotifyLogCoreMapper.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/notify/PayNotifyLogCoreMapper.java index e3f90d614f..c956219339 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/notify/PayNotifyLogCoreMapper.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/notify/PayNotifyLogCoreMapper.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.notify; +package cn.iocoder.yudao.module.pay.dal.mysql.notify; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.notify.PayNotifyLogDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.notify.PayNotifyLogDO; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import org.apache.ibatis.annotations.Mapper; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/notify/PayNotifyTaskCoreMapper.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/notify/PayNotifyTaskCoreMapper.java similarity index 79% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/notify/PayNotifyTaskCoreMapper.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/notify/PayNotifyTaskCoreMapper.java index 276c6710b6..1107a19f46 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/notify/PayNotifyTaskCoreMapper.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/notify/PayNotifyTaskCoreMapper.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.notify; +package cn.iocoder.yudao.module.pay.dal.mysql.notify; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.notify.PayNotifyTaskDO; -import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyStatusEnum; +import cn.iocoder.yudao.module.pay.dal.dataobject.notify.PayNotifyTaskDO; +import cn.iocoder.yudao.module.pay.enums.notify.PayNotifyStatusEnum; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/order/PayOrderExtensionCoreMapper.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/order/PayOrderExtensionMapper.java old mode 100644 new mode 100755 similarity index 70% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/order/PayOrderExtensionCoreMapper.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/order/PayOrderExtensionMapper.java index 08c95cea67..a8918f441c --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/order/PayOrderExtensionCoreMapper.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/order/PayOrderExtensionMapper.java @@ -1,12 +1,12 @@ -package cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order; +package cn.iocoder.yudao.module.pay.dal.mysql.order; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderExtensionDO; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.apache.ibatis.annotations.Mapper; @Mapper -public interface PayOrderExtensionCoreMapper extends BaseMapperX { +public interface PayOrderExtensionMapper extends BaseMapperX { default PayOrderExtensionDO selectByNo(String no) { return selectOne(PayOrderExtensionDO::getNo, no); diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/order/PayOrderMapper.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/order/PayOrderMapper.java similarity index 78% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/order/PayOrderMapper.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/order/PayOrderMapper.java index 1fb9e870af..4ff345dae5 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/order/PayOrderMapper.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/order/PayOrderMapper.java @@ -1,22 +1,18 @@ -package cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order; +package cn.iocoder.yudao.module.pay.dal.mysql.order; -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderExportReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderPageReqVO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; +import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderExportReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderPageReqVO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; import java.util.Collection; import java.util.List; -/** - * æ”¯ä»˜è®¢å• Mapper 组件 - * - * @author aquan - */ @Mapper public interface PayOrderMapper extends BaseMapperX { @@ -50,12 +46,6 @@ public interface PayOrderMapper extends BaseMapperX { .orderByDesc("id")); } - /** - * æ ¹æ®è®¢å• ID é›†åˆæŸ¥è¯¢è®¢å•商å“åç§° - * - * @param idList è®¢å• ID é›†åˆ - * @return åªåŒ…å«å•†å“å称和标题的订å•集åˆå¯¹è±¡ - */ default List findByIdListQueryOrderSubject(Collection idList) { return selectList(new LambdaQueryWrapper() .select(PayOrderDO::getId, PayOrderDO::getSubject) @@ -70,10 +60,19 @@ public interface PayOrderMapper extends BaseMapperX { * @return æ¡æ•° */ default Long selectCount(Long appId, Integer status) { - return selectCount(new LambdaQueryWrapper() .eq(PayOrderDO::getAppId, appId) .in(PayOrderDO::getStatus, status)); } + default PayOrderDO selectByAppIdAndMerchantOrderId(Long appId, String merchantOrderId) { + return selectOne(new QueryWrapper().eq("app_id", appId) + .eq("merchant_order_id", merchantOrderId)); + } + + default int updateByIdAndStatus(Long id, Integer status, PayOrderDO update) { + return update(update, new QueryWrapper() + .eq("id", id).eq("status", status)); + } + } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/order/PayRefundMapper.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/refund/PayRefundMapper.java similarity index 78% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/order/PayRefundMapper.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/refund/PayRefundMapper.java index 2fd3f22996..ba8f521e9d 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/order/PayRefundMapper.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/refund/PayRefundMapper.java @@ -1,21 +1,16 @@ -package cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order; +package cn.iocoder.yudao.module.pay.dal.mysql.refund; -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundExportReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundPageReqVO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO; +import cn.iocoder.yudao.module.pay.controller.admin.refund.vo.PayRefundExportReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.refund.vo.PayRefundPageReqVO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; +import cn.iocoder.yudao.module.pay.dal.dataobject.refund.PayRefundDO; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.apache.ibatis.annotations.Mapper; import java.util.List; -/** - * é€€æ¬¾è®¢å• Mapper - * - * @author aquan - */ @Mapper public interface PayRefundMapper extends BaseMapperX { @@ -45,17 +40,18 @@ public interface PayRefundMapper extends BaseMapperX { .orderByDesc("id")); } - /** - * 查询符åˆçš„è®¢å•æ•°é‡ - * - * @param appId åº”ç”¨ç¼–å· - * @param status 订å•çŠ¶æ€ - * @return æ¡æ•° - */ default Long selectCount(Long appId, Integer status) { return selectCount(new LambdaQueryWrapper() .eq(PayRefundDO::getAppId, appId) .eq(PayRefundDO::getStatus, status)); } + + default PayRefundDO selectByReqNo(String reqNo) { + return selectOne("req_no", reqNo); + } + + default PayRefundDO selectByTradeNoAndMerchantRefundNo(String tradeNo, String merchantRefundNo){ + return selectOne("trade_no", tradeNo, "merchant_refund_no", merchantRefundNo); + } } diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/redis/PayRedisKeyCoreConstants.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/PayRedisKeyCoreConstants.java similarity index 65% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/redis/PayRedisKeyCoreConstants.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/PayRedisKeyCoreConstants.java index 99384ec126..acba20be9b 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/redis/PayRedisKeyCoreConstants.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/PayRedisKeyCoreConstants.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.pay.dal.redis; +package cn.iocoder.yudao.module.pay.dal.redis; import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine; import org.redisson.api.RLock; @@ -6,7 +6,7 @@ import org.redisson.api.RLock; import static cn.iocoder.yudao.framework.redis.core.RedisKeyDefine.KeyTypeEnum.HASH; /** - * Lock4j Redis Key 枚举类 + * 支付 Redis Key 枚举类 * * @author èŠ‹é“æºç  */ @@ -14,6 +14,6 @@ public interface PayRedisKeyCoreConstants { RedisKeyDefine PAY_NOTIFY_LOCK = new RedisKeyDefine("通知任务的分布å¼é”", "pay_notify:lock:", // 傿•°æ¥è‡ª DefaultLockKeyBuilder ç±» - HASH, RLock.class, RedisKeyDefine.TimeoutTypeEnum.DYNAMIC); // Redisson çš„ Lock é”,使用 Hash æ•°æ®ç»“æž„ + RedisKeyDefine.KeyTypeEnum.HASH, RLock.class, RedisKeyDefine.TimeoutTypeEnum.DYNAMIC); // Redisson çš„ Lock é”,使用 Hash æ•°æ®ç»“æž„ } diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/redis/notify/PayNotifyLockCoreRedisDAO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/notify/PayNotifyLockRedisDAO.java similarity index 79% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/redis/notify/PayNotifyLockCoreRedisDAO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/notify/PayNotifyLockRedisDAO.java index 5ce6b44b32..227eda28ad 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/redis/notify/PayNotifyLockCoreRedisDAO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/notify/PayNotifyLockRedisDAO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.pay.dal.redis.notify; +package cn.iocoder.yudao.module.pay.dal.redis.notify; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; @@ -7,7 +7,7 @@ import org.springframework.stereotype.Repository; import javax.annotation.Resource; import java.util.concurrent.TimeUnit; -import static cn.iocoder.yudao.coreservice.modules.pay.dal.redis.PayRedisKeyCoreConstants.PAY_NOTIFY_LOCK; +import static cn.iocoder.yudao.module.pay.dal.redis.PayRedisKeyCoreConstants.PAY_NOTIFY_LOCK; /** * æ”¯ä»˜é€šçŸ¥çš„é” Redis DAO @@ -15,7 +15,7 @@ import static cn.iocoder.yudao.coreservice.modules.pay.dal.redis.PayRedisKeyCore * @author èŠ‹é“æºç  */ @Repository -public class PayNotifyLockCoreRedisDAO { +public class PayNotifyLockRedisDAO { @Resource private RedissonClient redissonClient; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/notify/PayNotifyStatusEnum.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/enums/notify/PayNotifyStatusEnum.java similarity index 89% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/notify/PayNotifyStatusEnum.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/enums/notify/PayNotifyStatusEnum.java index 2c3c6b5921..d1b7c1015b 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/notify/PayNotifyStatusEnum.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/enums/notify/PayNotifyStatusEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.pay.enums.notify; +package cn.iocoder.yudao.module.pay.enums.notify; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/notify/PayNotifyTypeEnum.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/enums/notify/PayNotifyTypeEnum.java similarity index 85% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/notify/PayNotifyTypeEnum.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/enums/notify/PayNotifyTypeEnum.java index a501bc55f9..8c259d93c1 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/notify/PayNotifyTypeEnum.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/enums/notify/PayNotifyTypeEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.pay.enums.notify; +package cn.iocoder.yudao.module.pay.enums.notify; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/order/PayOrderNotifyStatusEnum.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/enums/order/PayOrderNotifyStatusEnum.java similarity index 89% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/order/PayOrderNotifyStatusEnum.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/enums/order/PayOrderNotifyStatusEnum.java index 4bda485d2a..b7161a9f4e 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/order/PayOrderNotifyStatusEnum.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/enums/order/PayOrderNotifyStatusEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.pay.enums.order; +package cn.iocoder.yudao.module.pay.enums.order; import cn.iocoder.yudao.framework.common.core.IntArrayValuable; import lombok.AllArgsConstructor; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/order/PayOrderStatusEnum.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/enums/order/PayOrderStatusEnum.java similarity index 90% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/order/PayOrderStatusEnum.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/enums/order/PayOrderStatusEnum.java index b61c0400ce..ab542a97c3 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/order/PayOrderStatusEnum.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/enums/order/PayOrderStatusEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.pay.enums.order; +package cn.iocoder.yudao.module.pay.enums.order; import cn.iocoder.yudao.framework.common.core.IntArrayValuable; import lombok.AllArgsConstructor; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/order/PayRefundStatusEnum.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/enums/refund/PayRefundStatusEnum.java similarity index 83% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/order/PayRefundStatusEnum.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/enums/refund/PayRefundStatusEnum.java index 2a28ae9fc5..390804dd3a 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/order/PayRefundStatusEnum.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/enums/refund/PayRefundStatusEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.pay.enums.order; +package cn.iocoder.yudao.module.pay.enums.refund; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/order/PayRefundTypeEnum.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/enums/refund/PayRefundTypeEnum.java similarity index 89% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/order/PayRefundTypeEnum.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/enums/refund/PayRefundTypeEnum.java index ba7ee2fcc8..5fb10a399d 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/order/PayRefundTypeEnum.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/enums/refund/PayRefundTypeEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.pay.enums.order; +package cn.iocoder.yudao.module.pay.enums.refund; import cn.iocoder.yudao.framework.common.core.IntArrayValuable; import lombok.AllArgsConstructor; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/job/notify/PayNotifyJob.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/job/notify/PayNotifyJob.java similarity index 75% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/job/notify/PayNotifyJob.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/job/notify/PayNotifyJob.java index 58685f1b56..820bca4718 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/job/notify/PayNotifyJob.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/job/notify/PayNotifyJob.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.pay.job.notify; +package cn.iocoder.yudao.module.pay.job.notify; -import cn.iocoder.yudao.coreservice.modules.pay.service.notify.PayNotifyCoreService; import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler; +import cn.iocoder.yudao.module.pay.service.notify.PayNotifyService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -18,7 +18,7 @@ import javax.annotation.Resource; public class PayNotifyJob implements JobHandler { @Resource - private PayNotifyCoreService payNotifyCoreService; + private PayNotifyService payNotifyCoreService; @Override public String execute(String param) throws Exception { diff --git a/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/job/package-info.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/job/package-info.java new file mode 100644 index 0000000000..c45bf497fb --- /dev/null +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/job/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.pay.job; diff --git a/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/package-info.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/package-info.java new file mode 100644 index 0000000000..1421e4e654 --- /dev/null +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/package-info.java @@ -0,0 +1,10 @@ +/** + * pay 模å—,我们放支付业务,æä¾›ä¸šåŠ¡çš„æ”¯ä»˜èƒ½åŠ›ã€‚ + * 例如说:商户ã€åº”ç”¨ã€æ”¯ä»˜ã€é€€æ¬¾ç­‰ç­‰ + * + * 1. Controller URL:以 /member/ 开头,é¿å…和其它 Module å†²çª + * 2. DataObject 表å:以 member_ 开头,方便在数æ®åº“中区分 + * + * 注æ„,由于 Pay 模å—å’Œ Trade 模å—,容易é‡å,所以类å都加载 Pay çš„å‰ç¼€~ + */ +package cn.iocoder.yudao.module.pay; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/app/PayAppService.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant/PayAppService.java similarity index 75% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/app/PayAppService.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant/PayAppService.java index da83ca825f..62935e4dda 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/app/PayAppService.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant/PayAppService.java @@ -1,12 +1,13 @@ -package cn.iocoder.yudao.adminserver.modules.pay.service.app; +package cn.iocoder.yudao.module.pay.service.merchant; -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppExportReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppPageReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppUpdateReqVO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO; +import cn.iocoder.yudao.framework.common.exception.ServiceException; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppCreateReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppExportReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppPageReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppUpdateReqVO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO; import javax.validation.Valid; import java.util.Collection; @@ -100,4 +101,16 @@ public interface PayAppService { List list = this.getAppList(appIdList); return CollectionUtils.convertMap(list, PayAppDO::getId); } + + + /** + * æ”¯ä»˜åº”ç”¨çš„åˆæ³•性 + * + * 如果ä¸åˆæ³•,抛出 {@link ServiceException} 业务异常 + * + * @param id åº”ç”¨ç¼–å· + * @return åº”ç”¨ä¿¡æ¯ + */ + PayAppDO validPayApp(Long id); + } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/app/impl/PayAppServiceImpl.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant/PayAppServiceImpl.java similarity index 72% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/app/impl/PayAppServiceImpl.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant/PayAppServiceImpl.java index bb6e765b3b..f7d1a4e28a 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/app/impl/PayAppServiceImpl.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant/PayAppServiceImpl.java @@ -1,23 +1,24 @@ -package cn.iocoder.yudao.adminserver.modules.pay.service.app.impl; +package cn.iocoder.yudao.module.pay.service.merchant; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppExportReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppPageReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.convert.app.PayAppConvert; -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.app.PayAppMapper; -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.merchant.PayMerchantMapper; -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order.PayOrderMapper; -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order.PayRefundMapper; -import cn.iocoder.yudao.adminserver.modules.pay.service.app.PayAppService; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderStatusEnum; -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundStatusEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppCreateReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppExportReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppPageReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppUpdateReqVO; +import cn.iocoder.yudao.module.pay.convert.app.PayAppConvert; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO; +import cn.iocoder.yudao.module.pay.dal.mysql.merchant.PayAppMapper; +import cn.iocoder.yudao.module.pay.dal.mysql.merchant.PayMerchantMapper; +import cn.iocoder.yudao.module.pay.dal.mysql.order.PayOrderMapper; +import cn.iocoder.yudao.module.pay.dal.mysql.refund.PayRefundMapper; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants; +import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum; +import cn.iocoder.yudao.module.pay.enums.refund.PayRefundStatusEnum; import com.google.common.annotations.VisibleForTesting; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -25,9 +26,9 @@ import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.util.*; -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; +import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.*; /** * æ”¯ä»˜åº”ç”¨ä¿¡æ¯ Service 实现类 @@ -40,17 +41,14 @@ public class PayAppServiceImpl implements PayAppService { @Resource private PayAppMapper appMapper; - + // TODO @aquan:使用对方的 Service。模å—与模å—之间,é¿å…直接调用对方的 mapper @Resource private PayMerchantMapper merchantMapper; - @Resource private PayOrderMapper orderMapper; - @Resource private PayRefundMapper refundMapper; - @Override public Long createApp(PayAppCreateReqVO createReqVO) { // æ’å…¥ @@ -126,12 +124,6 @@ public class PayAppServiceImpl implements PayAppService { return convertSet(merchantMapper.getMerchantListByName(merchantName), PayMerchantDO::getId); } - /** - * 修改应用信æ¯çŠ¶æ€ - * - * @param id åº”ç”¨ç¼–å· - * @param status 状æ€{@link CommonStatusEnum} - */ @Override public void updateAppStatus(Long id, Integer status) { // 校验商户存在 @@ -143,12 +135,6 @@ public class PayAppServiceImpl implements PayAppService { appMapper.updateById(app); } - /** - * æ ¹æ®å•†æˆ· ID 获得支付应用信æ¯åˆ—表, - * - * @param merchantId 商户 ID - * @return 支付应用信æ¯åˆ—表 - */ @Override public List getListByMerchantId(String merchantId) { return appMapper.getListByMerchantId(merchantId); @@ -186,4 +172,18 @@ public class PayAppServiceImpl implements PayAppService { } } + @Override + public PayAppDO validPayApp(Long id) { + PayAppDO app = appMapper.selectById(id); + // 校验是å¦å­˜åœ¨ + if (app == null) { + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_APP_NOT_FOUND); + } + // 校验是å¦ç¦ç”¨ + if (CommonStatusEnum.DISABLE.getStatus().equals(app.getStatus())) { + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_APP_IS_DISABLE); + } + return app; + } + } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/channel/PayChannelService.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant/PayChannelService.java similarity index 59% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/channel/PayChannelService.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant/PayChannelService.java index 1eeb567dd4..3907b0eca6 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/channel/PayChannelService.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant/PayChannelService.java @@ -1,9 +1,12 @@ -package cn.iocoder.yudao.adminserver.modules.pay.service.channel; +package cn.iocoder.yudao.module.pay.service.merchant; -import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.*; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO; +import cn.iocoder.yudao.framework.common.exception.ServiceException; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelCreateReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelExportReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelPageReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelUpdateReqVO; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import org.springframework.web.multipart.MultipartFile; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO; import javax.validation.Valid; import java.util.Collection; @@ -16,6 +19,11 @@ import java.util.List; */ public interface PayChannelService { + /** + * åˆå§‹åŒ–支付客户端 + */ + void initPayClients(); + /** * åˆ›å»ºæ”¯ä»˜æ¸ é“ * @@ -47,8 +55,7 @@ public interface PayChannelService { PayChannelDO getChannel(Long id); /** - * èŽ·å¾—æ”¯ä»˜æ¸ é“ - * 列表 + * 获得支付渠é“列表 * * @param ids ç¼–å· * @return æ”¯ä»˜æ¸ é“ @@ -57,8 +64,7 @@ public interface PayChannelService { List getChannelList(Collection ids); /** - * èŽ·å¾—æ”¯ä»˜æ¸ é“ - * 分页 + * 获得支付渠é“分页 * * @param pageReqVO 分页查询 * @return æ”¯ä»˜æ¸ é“ @@ -84,24 +90,44 @@ public interface PayChannelService { List getChannelListByAppIds(Collection appIds); /** - * æ ¹æ®æ¡ä»¶èŽ·å–é€šé“æ•°é‡ + * æ ¹æ®æ¡ä»¶èŽ·å–æ¸ é“æ•°é‡ * * @param merchantId å•†æˆ·ç¼–å· * @param appid åº”ç”¨ç¼–å· - * @param code 通é“ç¼–ç  + * @param code 渠é“ç¼–ç  * @return æ•°é‡ */ Integer getChannelCountByConditions(Long merchantId, Long appid, String code); /** - * æ ¹æ®æ¡ä»¶èŽ·å–é€šé“ + * æ ¹æ®æ¡ä»¶èŽ·å–æ¸ é“ * * @param merchantId å•†æˆ·ç¼–å· * @param appid åº”ç”¨ç¼–å· - * @param code 通é“ç¼–ç  + * @param code 渠é“ç¼–ç  * @return æ•°é‡ */ PayChannelDO getChannelByConditions(Long merchantId, Long appid, String code); + /** + * 支付渠é“çš„åˆæ³•性 + * + * 如果ä¸åˆæ³•,抛出 {@link ServiceException} 业务异常 + * + * @param id 渠é“ç¼–å· + * @return 渠é“ä¿¡æ¯ + */ + PayChannelDO validPayChannel(Long id); + + /** + * 支付渠é“çš„åˆæ³•性 + * + * 如果ä¸åˆæ³•,抛出 {@link ServiceException} 业务异常 + * + * @param appId åº”ç”¨ç¼–å· + * @param code æ”¯ä»˜æ¸ é“ + * @return 渠é“ä¿¡æ¯ + */ + PayChannelDO validPayChannel(Long appId, String code); } diff --git a/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant/PayChannelServiceImpl.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant/PayChannelServiceImpl.java new file mode 100644 index 0000000000..68b6ff10db --- /dev/null +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant/PayChannelServiceImpl.java @@ -0,0 +1,250 @@ +package cn.iocoder.yudao.module.pay.service.merchant; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.json.JSONUtil; +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import cn.iocoder.yudao.framework.pay.core.client.PayClientFactory; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelCreateReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelExportReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelPageReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelUpdateReqVO; +import cn.iocoder.yudao.module.pay.convert.channel.PayChannelConvert; +import cn.iocoder.yudao.framework.pay.core.client.PayClientConfig; +import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO; +import cn.iocoder.yudao.module.pay.dal.mysql.merchant.PayChannelMapper; +import cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import javax.validation.Validator; +import java.util.Collection; +import java.util.Comparator; +import java.util.Date; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.*; + +/** + * æ”¯ä»˜æ¸ é“ Service 实现类 + * + * @author aquan + */ +@Service +@Slf4j +@Validated +public class PayChannelServiceImpl implements PayChannelService { + + /** + * 定时执行 {@link #schedulePeriodicRefresh()} 的周期 + * 因为已ç»é€šè¿‡ Redis Pub/Sub 机制,所以频率ä¸éœ€è¦é«˜ + */ + private static final long SCHEDULER_PERIOD = 5 * 60 * 1000L; + + /** + * 缓存èœå•的最大更新时间,用于åŽç»­çš„增é‡è½®è¯¢ï¼Œåˆ¤æ–­æ˜¯å¦æœ‰æ›´æ–° + */ + private volatile Date maxUpdateTime; + + @Resource + private PayClientFactory payClientFactory; + + @Resource + private PayChannelMapper channelMapper; + + @Resource + private Validator validator; + + @Override + @PostConstruct + public void initPayClients() { + // èŽ·å–æ”¯ä»˜æ¸ é“,如果有更新 + List payChannels = this.loadPayChannelIfUpdate(maxUpdateTime); + if (CollUtil.isEmpty(payChannels)) { + return; + } + + // 创建或更新支付 Client + payChannels.forEach(payChannel -> payClientFactory.createOrUpdatePayClient(payChannel.getId(), + payChannel.getCode(), payChannel.getConfig())); + + // 写入缓存 + assert payChannels.size() > 0; // 断言,é¿å…告警 + maxUpdateTime = payChannels.stream().max(Comparator.comparing(BaseDO::getUpdateTime)).get().getUpdateTime(); + log.info("[initPayClients][åˆå§‹åŒ– PayChannel æ•°é‡ä¸º {}]", payChannels.size()); + } + + @Scheduled(fixedDelay = SCHEDULER_PERIOD, initialDelay = SCHEDULER_PERIOD) + public void schedulePeriodicRefresh() { + initPayClients(); + } + + /** + * 如果支付渠é“å‘生å˜åŒ–,从数æ®åº“ä¸­èŽ·å–æœ€æ–°çš„免釿”¯ä»˜æ¸ é“。 + * 如果未å‘生å˜åŒ–,则返回空 + * + * @param maxUpdateTime 当剿”¯ä»˜æ¸ é“的最大更新时间 + * @return 支付渠é“列表 + */ + private List loadPayChannelIfUpdate(Date maxUpdateTime) { + // 第一步,判断是å¦è¦æ›´æ–°ã€‚ + if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB ä¸€å®šæœ‰æ–°æ•°æ® + log.info("[loadPayChannelIfUpdate][é¦–æ¬¡åŠ è½½å…¨é‡æ”¯ä»˜æ¸ é“]"); + } else { // 判断数æ®åº“ä¸­æ˜¯å¦æœ‰æ›´æ–°çš„æ”¯ä»˜æ¸ é“ + if (channelMapper.selectExistsByUpdateTimeAfter(maxUpdateTime) == null) { + return null; + } + log.info("[loadPayChannelIfUpdate][增é‡åŠ è½½å…¨é‡æ”¯ä»˜æ¸ é“]"); + } + // 第二步,如果有更新,则从数æ®åº“åŠ è½½æ‰€æœ‰æ”¯ä»˜æ¸ é“ + return channelMapper.selectList(); + } + + @Override + public Long createChannel(PayChannelCreateReqVO reqVO) { + // æ–­è¨€æ˜¯å¦æœ‰é‡å¤çš„ + PayChannelDO channelDO = this.getChannelByConditions(reqVO.getMerchantId(), reqVO.getAppId(), reqVO.getCode()); + if (ObjectUtil.isNotNull(channelDO)) { + throw exception(CHANNEL_EXIST_SAME_CHANNEL_ERROR); + } + + // æ–°å¢žæ¸ é“ + PayChannelDO channel = PayChannelConvert.INSTANCE.convert(reqVO); + settingConfigAndCheckParam(channel, reqVO.getConfig()); + channelMapper.insert(channel); + return channel.getId(); + } + + @Override + public void updateChannel(PayChannelUpdateReqVO updateReqVO) { + // 校验存在 + this.validateChannelExists(updateReqVO.getId()); + // æ›´æ–° + PayChannelDO channel = PayChannelConvert.INSTANCE.convert(updateReqVO); + settingConfigAndCheckParam(channel, updateReqVO.getConfig()); + channelMapper.updateById(channel); + } + + @Override + public void deleteChannel(Long id) { + // 校验存在 + this.validateChannelExists(id); + // 删除 + channelMapper.deleteById(id); + } + + private void validateChannelExists(Long id) { + if (channelMapper.selectById(id) == null) { + throw exception(CHANNEL_NOT_EXISTS); + } + } + + @Override + public PayChannelDO getChannel(Long id) { + return channelMapper.selectById(id); + } + + @Override + public List getChannelList(Collection ids) { + return channelMapper.selectBatchIds(ids); + } + + @Override + public PageResult getChannelPage(PayChannelPageReqVO pageReqVO) { + return channelMapper.selectPage(pageReqVO); + } + + @Override + public List getChannelList(PayChannelExportReqVO exportReqVO) { + return channelMapper.selectList(exportReqVO); + } + + /** + * æ ¹æ®æ”¯ä»˜åº”用ID集åˆèŽ·å¾—æ”¯ä»˜æ¸ é“列表 + * + * @param appIds 应用编å·é›†åˆ + * @return 支付渠é“列表 + */ + @Override + public List getChannelListByAppIds(Collection appIds) { + return channelMapper.getChannelListByAppIds(appIds); + } + + + /** + * æ ¹æ®æ¡ä»¶èŽ·å–æ¸ é“æ•°é‡ + * + * @param merchantId å•†æˆ·ç¼–å· + * @param appid åº”ç”¨ç¼–å· + * @param code 渠é“ç¼–ç  + * @return æ•°é‡ + */ + @Override + public Integer getChannelCountByConditions(Long merchantId, Long appid, String code) { + return this.channelMapper.selectCount(merchantId, appid, code); + } + + /** + * æ ¹æ®æ¡ä»¶èŽ·å–æ¸ é“ + * + * @param merchantId å•†æˆ·ç¼–å· + * @param appid åº”ç”¨ç¼–å· + * @param code 渠é“ç¼–ç  + * @return æ•°é‡ + */ + @Override + public PayChannelDO getChannelByConditions(Long merchantId, Long appid, String code) { + return this.channelMapper.selectOne(merchantId, appid, code); + } + + /** + * 设置渠é“é…置以åŠå‚数校验 + * + * @param channel æ¸ é“ + * @param configStr é…ç½® + */ + private void settingConfigAndCheckParam(PayChannelDO channel, String configStr) { + // å¾—åˆ°è¿™ä¸ªæ¸ é“æ˜¯å¾®ä¿¡çš„还是支付å®çš„ + Class payClass = PayChannelEnum.getByCode(channel.getCode()).getConfigClass(); + if (ObjectUtil.isNull(payClass)) { + throw exception(CHANNEL_NOT_EXISTS); + } + PayClientConfig config = JSONUtil.toBean(configStr, payClass); + + // 验è¯å‚æ•° + config.validate(validator); + channel.setConfig(config); + } + + @Override + public PayChannelDO validPayChannel(Long id) { + PayChannelDO channel = channelMapper.selectById(id); + this.validPayChannel(channel); + return channel; + } + + @Override + public PayChannelDO validPayChannel(Long appId, String code) { + PayChannelDO channel = channelMapper.selectByAppIdAndCode(appId, code); + this.validPayChannel(channel); + return channel; + } + + private void validPayChannel(PayChannelDO channel) { + if (channel == null) { + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_CHANNEL_NOT_FOUND); + } + if (CommonStatusEnum.DISABLE.getStatus().equals(channel.getStatus())) { + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_CHANNEL_IS_DISABLE); + } + } +} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/merchant/PayMerchantService.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant/PayMerchantService.java similarity index 81% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/merchant/PayMerchantService.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant/PayMerchantService.java index b8e74dd757..40f02b99cb 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/merchant/PayMerchantService.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant/PayMerchantService.java @@ -1,12 +1,12 @@ -package cn.iocoder.yudao.adminserver.modules.pay.service.merchant; +package cn.iocoder.yudao.module.pay.service.merchant; -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantExportReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantPageReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantUpdateReqVO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantCreateReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantExportReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantPageReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantUpdateReqVO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO; import javax.validation.Valid; import java.util.Collection; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/merchant/impl/PayMerchantServiceImpl.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant/PayMerchantServiceImpl.java similarity index 77% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/merchant/impl/PayMerchantServiceImpl.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant/PayMerchantServiceImpl.java index b80132a1f1..c14a87d7d7 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/merchant/impl/PayMerchantServiceImpl.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant/PayMerchantServiceImpl.java @@ -1,16 +1,15 @@ -package cn.iocoder.yudao.adminserver.modules.pay.service.merchant.impl; +package cn.iocoder.yudao.module.pay.service.merchant; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantExportReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantPageReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.convert.merchant.PayMerchantConvert; -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.app.PayAppMapper; -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.merchant.PayMerchantMapper; -import cn.iocoder.yudao.adminserver.modules.pay.service.merchant.PayMerchantService; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantCreateReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantExportReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantPageReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantUpdateReqVO; +import cn.iocoder.yudao.module.pay.convert.merchant.PayMerchantConvert; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO; +import cn.iocoder.yudao.module.pay.dal.mysql.merchant.PayAppMapper; +import cn.iocoder.yudao.module.pay.dal.mysql.merchant.PayMerchantMapper; import cn.iocoder.yudao.framework.common.pojo.PageResult; import com.google.common.annotations.VisibleForTesting; import org.springframework.stereotype.Service; @@ -21,9 +20,8 @@ import java.time.LocalDateTime; import java.util.Collection; import java.util.List; -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.PAY_MERCHANT_EXIST_APP_CANT_DELETE; -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.PAY_MERCHANT_NOT_EXISTS; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.*; /** * æ”¯ä»˜å•†æˆ·ä¿¡æ¯ Service 实现类 diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/PayNotifyCoreService.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/notify/PayNotifyService.java similarity index 66% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/PayNotifyCoreService.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/notify/PayNotifyService.java index 4683757099..92358e4713 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/PayNotifyCoreService.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/notify/PayNotifyService.java @@ -1,15 +1,15 @@ -package cn.iocoder.yudao.coreservice.modules.pay.service.notify; +package cn.iocoder.yudao.module.pay.service.notify; -import cn.iocoder.yudao.coreservice.modules.pay.service.notify.dto.PayNotifyTaskCreateReqDTO; +import cn.iocoder.yudao.module.pay.service.notify.dto.PayNotifyTaskCreateReqDTO; import javax.validation.Valid; /** - * 支付通知 Core Service æŽ¥å£ + * 支付通知 Service æŽ¥å£ * * @author èŠ‹é“æºç  */ -public interface PayNotifyCoreService { +public interface PayNotifyService { /** * 创建支付通知任务 diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/impl/PayNotifyCoreServiceImpl.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/notify/PayNotifyServiceImpl.java similarity index 77% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/impl/PayNotifyCoreServiceImpl.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/notify/PayNotifyServiceImpl.java index dff6de7fc6..1d5091a5bc 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/impl/PayNotifyCoreServiceImpl.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/notify/PayNotifyServiceImpl.java @@ -1,25 +1,25 @@ -package cn.iocoder.yudao.coreservice.modules.pay.service.notify.impl; +package cn.iocoder.yudao.module.pay.service.notify; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.exceptions.ExceptionUtil; import cn.hutool.http.HttpUtil; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.notify.PayNotifyLogDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.notify.PayNotifyTaskDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.notify.PayNotifyLogCoreMapper; -import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.notify.PayNotifyTaskCoreMapper; -import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayRefundCoreMapper; -import cn.iocoder.yudao.coreservice.modules.pay.dal.redis.notify.PayNotifyLockCoreRedisDAO; -import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyStatusEnum; -import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyTypeEnum; -import cn.iocoder.yudao.coreservice.modules.pay.service.notify.PayNotifyCoreService; -import cn.iocoder.yudao.coreservice.modules.pay.service.notify.dto.PayNotifyTaskCreateReqDTO; -import cn.iocoder.yudao.coreservice.modules.pay.service.notify.vo.PayNotifyOrderReqVO; -import cn.iocoder.yudao.coreservice.modules.pay.service.notify.vo.PayRefundOrderReqVO; -import cn.iocoder.yudao.coreservice.modules.pay.service.order.PayOrderCoreService; +import cn.iocoder.yudao.module.pay.dal.dataobject.notify.PayNotifyLogDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.notify.PayNotifyTaskDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.refund.PayRefundDO; +import cn.iocoder.yudao.module.pay.dal.mysql.notify.PayNotifyLogCoreMapper; +import cn.iocoder.yudao.module.pay.dal.mysql.notify.PayNotifyTaskCoreMapper; +import cn.iocoder.yudao.module.pay.dal.redis.notify.PayNotifyLockRedisDAO; +import cn.iocoder.yudao.module.pay.enums.notify.PayNotifyStatusEnum; +import cn.iocoder.yudao.module.pay.enums.notify.PayNotifyTypeEnum; +import cn.iocoder.yudao.module.pay.service.notify.dto.PayNotifyTaskCreateReqDTO; +import cn.iocoder.yudao.module.pay.service.notify.vo.PayNotifyOrderReqVO; +import cn.iocoder.yudao.module.pay.service.notify.vo.PayRefundOrderReqVO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.date.DateUtils; import cn.iocoder.yudao.framework.common.util.json.JsonUtils; +import cn.iocoder.yudao.module.pay.service.order.PayOrderService; +import cn.iocoder.yudao.module.pay.service.refund.PayRefundService; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Lazy; import org.springframework.scheduling.annotation.Async; @@ -36,10 +36,6 @@ import java.util.Objects; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import static cn.hutool.core.exceptions.ExceptionUtil.getRootCauseMessage; -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.SECOND_MILLIS; -import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString; - /** * 支付通知 Core Service 实现类 * @@ -48,7 +44,7 @@ import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString @Service @Valid @Slf4j -public class PayNotifyCoreServiceImpl implements PayNotifyCoreService { +public class PayNotifyServiceImpl implements PayNotifyService { /** * 通知超时时间,å•ä½ï¼šç§’ @@ -57,11 +53,14 @@ public class PayNotifyCoreServiceImpl implements PayNotifyCoreService { /** * {@link #NOTIFY_TIMEOUT} 的毫秒 */ - public static final long NOTIFY_TIMEOUT_MILLIS = 120 * SECOND_MILLIS; + public static final long NOTIFY_TIMEOUT_MILLIS = 120 * DateUtils.SECOND_MILLIS; @Resource @Lazy // 循环ä¾èµ–,é¿å…报错 - private PayOrderCoreService payOrderCoreService; + private PayOrderService orderService; + @Resource + @Lazy // 循环ä¾èµ–,é¿å…报错 + private PayRefundService refundService; @Resource private PayNotifyTaskCoreMapper payNotifyTaskCoreMapper; @@ -72,14 +71,11 @@ public class PayNotifyCoreServiceImpl implements PayNotifyCoreService { private ThreadPoolTaskExecutor threadPoolTaskExecutor; // TODO èŠ‹è‰¿ï¼šæœªæ¥æä¾›ç‹¬ç«‹çš„çº¿ç¨‹æ±  @Resource - private PayNotifyLockCoreRedisDAO payNotifyLockCoreRedisDAO; - - @Resource - private PayRefundCoreMapper payRefundCoreMapper; + private PayNotifyLockRedisDAO payNotifyLockCoreRedisDAO; @Resource @Lazy // 循环ä¾èµ–(自己ä¾èµ–自己),é¿å…报错 - private PayNotifyCoreServiceImpl self; + private PayNotifyServiceImpl self; @Override public void createPayNotifyTask(PayNotifyTaskCreateReqDTO reqDTO) { @@ -89,12 +85,11 @@ public class PayNotifyCoreServiceImpl implements PayNotifyCoreService { .setNotifyTimes(0).setMaxNotifyTimes(PayNotifyTaskDO.NOTIFY_FREQUENCY.length + 1); // 补充 merchantId + appId + notifyUrl 字段 if (Objects.equals(task.getType(), PayNotifyTypeEnum.ORDER.getType())) { - PayOrderDO order = payOrderCoreService.getPayOrder(task.getDataId()); // ä¸è¿›è¡Œéžç©ºåˆ¤æ–­ï¼Œæœ‰é—®é¢˜ç›´æŽ¥å¼‚常 + PayOrderDO order = orderService.getOrder(task.getDataId()); // ä¸è¿›è¡Œéžç©ºåˆ¤æ–­ï¼Œæœ‰é—®é¢˜ç›´æŽ¥å¼‚常 task.setMerchantId(order.getMerchantId()).setAppId(order.getAppId()). setMerchantOrderId(order.getMerchantOrderId()).setNotifyUrl(order.getNotifyUrl()); } else if (Objects.equals(task.getType(), PayNotifyTypeEnum.REFUND.getType())) { - // TODO 芋艿,需è¦å®žçŽ°ä¸‹å“ˆ - PayRefundDO refundDO = payRefundCoreMapper.selectById(task.getDataId()); + PayRefundDO refundDO = refundService.getRefund(task.getDataId()); task.setMerchantId(refundDO.getMerchantId()).setAppId(refundDO.getAppId()) .setMerchantOrderId(refundDO.getMerchantOrderId()).setNotifyUrl(refundDO.getNotifyUrl()); } @@ -169,7 +164,7 @@ public class PayNotifyCoreServiceImpl implements PayNotifyCoreService { // 虽然已ç»é€šè¿‡åˆ†å¸ƒå¼åŠ é”,但是å¯èƒ½åŒæ—¶æ»¡è¶³é€šçŸ¥çš„æ¡ä»¶ï¼Œç„¶åŽéƒ½åŽ»èŽ·å¾—é”。此时,第一个执行完åŽï¼Œç¬¬äºŒä¸ªè¿˜æ˜¯èƒ½æ‹¿åˆ°é”,然åŽä¼šå†æ‰§è¡Œä¸€æ¬¡ã€‚ PayNotifyTaskDO dbTask = payNotifyTaskCoreMapper.selectById(task.getId()); if (DateUtils.afterNow(dbTask.getNextNotifyTime())) { - log.info("[executeNotify][dbTask({}) 任务被忽略,原因是未到达下次通知时间,å¯èƒ½æ˜¯å› ä¸ºå¹¶å‘执行了]", toJsonString(dbTask)); + log.info("[executeNotify][dbTask({}) 任务被忽略,原因是未到达下次通知时间,å¯èƒ½æ˜¯å› ä¸ºå¹¶å‘执行了]", JsonUtils.toJsonString(dbTask)); return; } @@ -193,7 +188,7 @@ public class PayNotifyCoreServiceImpl implements PayNotifyCoreService { Integer newStatus = this.processNotifyResult(task, invokeResult, invokeException); // 记录 PayNotifyLog 日志 - String response = invokeException != null ? getRootCauseMessage(invokeException) : toJsonString(invokeResult); + String response = invokeException != null ? ExceptionUtil.getRootCauseMessage(invokeException) : JsonUtils.toJsonString(invokeResult); payNotifyLogCoreMapper.insert(PayNotifyLogDO.builder().taskId(task.getId()) .notifyTimes(task.getNotifyTimes() + 1).status(newStatus).response(response).build()); } @@ -214,10 +209,10 @@ public class PayNotifyCoreServiceImpl implements PayNotifyCoreService { request = PayRefundOrderReqVO.builder().merchantOrderId(task.getMerchantOrderId()) .payRefundId(task.getDataId()).build(); } else { - throw new RuntimeException("未知的通知任务类型:" + toJsonString(task)); + throw new RuntimeException("未知的通知任务类型:" + JsonUtils.toJsonString(task)); } // è¯·æ±‚åœ°å€ - String response = HttpUtil.post(task.getNotifyUrl(), toJsonString(request), + String response = HttpUtil.post(task.getNotifyUrl(), JsonUtils.toJsonString(request), (int) NOTIFY_TIMEOUT_MILLIS); // è§£æžç»“æžœ return JsonUtils.parseObject(response, CommonResult.class); diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/dto/PayNotifyTaskCreateReqDTO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/notify/dto/PayNotifyTaskCreateReqDTO.java similarity index 88% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/dto/PayNotifyTaskCreateReqDTO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/notify/dto/PayNotifyTaskCreateReqDTO.java index 8d40ffb91e..49d570d4e6 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/dto/PayNotifyTaskCreateReqDTO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/notify/dto/PayNotifyTaskCreateReqDTO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.pay.service.notify.dto; +package cn.iocoder.yudao.module.pay.service.notify.dto; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/vo/PayNotifyOrderReqVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/notify/vo/PayNotifyOrderReqVO.java similarity index 92% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/vo/PayNotifyOrderReqVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/notify/vo/PayNotifyOrderReqVO.java index 94b1fec563..d4f6c1eaec 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/vo/PayNotifyOrderReqVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/notify/vo/PayNotifyOrderReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.pay.service.notify.vo; +package cn.iocoder.yudao.module.pay.service.notify.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/vo/PayRefundOrderReqVO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/notify/vo/PayRefundOrderReqVO.java similarity index 93% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/vo/PayRefundOrderReqVO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/notify/vo/PayRefundOrderReqVO.java index d436d759b7..978283d1b4 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/vo/PayRefundOrderReqVO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/notify/vo/PayRefundOrderReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.pay.service.notify.vo; +package cn.iocoder.yudao.module.pay.service.notify.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/notify/vo/package-info.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/notify/vo/package-info.java new file mode 100644 index 0000000000..fb006dd689 --- /dev/null +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/notify/vo/package-info.java @@ -0,0 +1,6 @@ +/** + * 这里的 VO 包有点特殊,是æä¾›ç»™æŽ¥å…¥æ”¯ä»˜æ¨¡å—的业务,æä¾›å›žè°ƒæŽ¥å£æ—¶ï¼Œå¯ä»¥ç›´æŽ¥ä½¿ç”¨ VO + * + * 例如说,支付å•的回调,使用 TODO 芋艿:想下怎么优化下 + */ +package cn.iocoder.yudao.module.pay.service.notify.vo; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/PayOrderExtensionService.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderExtensionService.java similarity index 80% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/PayOrderExtensionService.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderExtensionService.java index a139956b4e..f707bc0dfc 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/PayOrderExtensionService.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderExtensionService.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.pay.service.order; +package cn.iocoder.yudao.module.pay.service.order; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderExtensionDO; import java.util.Collection; import java.util.List; @@ -32,7 +32,6 @@ public interface PayOrderExtensionService { */ List getOrderExtensionList(Collection ids); - /** * æ ¹æ®è®¢å•æˆåŠŸçš„ 扩展订å•ID 查询所有的扩展订å•转 æˆ map 返回 * @@ -40,9 +39,8 @@ public interface PayOrderExtensionService { * @return è®¢å•æ‰©å±• map é›†åˆ */ default Map getOrderExtensionMap(Collection successExtensionIdList) { - List list = this.getOrderExtensionList(successExtensionIdList); + List list = getOrderExtensionList(successExtensionIdList); return CollectionUtils.convertMap(list, PayOrderExtensionDO::getId); } - } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/impl/PayOrderExtensionServiceImpl.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderExtensionServiceImpl.java similarity index 68% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/impl/PayOrderExtensionServiceImpl.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderExtensionServiceImpl.java index 1972756571..a97e3beff9 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/impl/PayOrderExtensionServiceImpl.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderExtensionServiceImpl.java @@ -1,8 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.pay.service.order.impl; +package cn.iocoder.yudao.module.pay.service.order; -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order.PayOrderExtensionMapper; -import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayOrderExtensionService; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderExtensionDO; +import cn.iocoder.yudao.module.pay.dal.mysql.order.PayOrderExtensionMapper; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/PayOrderService.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderService.java similarity index 55% rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/PayOrderService.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderService.java index ebdf7e3401..40ed287fcc 100755 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/PayOrderService.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderService.java @@ -1,11 +1,16 @@ -package cn.iocoder.yudao.adminserver.modules.pay.service.order; +package cn.iocoder.yudao.module.pay.service.order; -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderExportReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderPageReqVO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; +import cn.iocoder.yudao.framework.pay.core.client.dto.PayNotifyDataDTO; +import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderExportReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderPageReqVO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO; +import cn.iocoder.yudao.module.pay.service.order.dto.PayOrderCreateReqDTO; +import cn.iocoder.yudao.module.pay.service.order.dto.PayOrderSubmitReqDTO; +import cn.iocoder.yudao.module.pay.service.order.dto.PayOrderSubmitRespDTO; +import javax.validation.Valid; import java.util.Collection; import java.util.List; import java.util.Map; @@ -64,4 +69,29 @@ public interface PayOrderService { return CollectionUtils.convertMap(list, PayOrderDO::getId); } + /** + * åˆ›å»ºæ”¯ä»˜å• + * + * @param reqDTO 创建请求 + * @return 支付å•ç¼–å· + */ + Long createPayOrder(@Valid PayOrderCreateReqDTO reqDTO); + + /** + * æäº¤æ”¯ä»˜ + * 此时,会å‘起支付渠é“的调用 + * + * @param reqDTO æäº¤è¯·æ±‚ + * @return æäº¤ç»“æžœ + */ + PayOrderSubmitRespDTO submitPayOrder(@Valid PayOrderSubmitReqDTO reqDTO); + + /** + * é€šçŸ¥æ”¯ä»˜å•æˆåŠŸ + * + * @param channelId 渠é“ç¼–å· + * @param notifyData é€šçŸ¥æ•°æ® + */ + void notifyPayOrder(Long channelId, PayNotifyDataDTO notifyData) throws Exception; + } diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/impl/PayOrderCoreServiceImpl.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceImpl.java old mode 100644 new mode 100755 similarity index 63% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/impl/PayOrderCoreServiceImpl.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceImpl.java index 50229b140d..72bfac0234 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/impl/PayOrderCoreServiceImpl.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceImpl.java @@ -1,25 +1,8 @@ -package cn.iocoder.yudao.coreservice.modules.pay.service.order.impl; +package cn.iocoder.yudao.module.pay.service.order; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.RandomUtil; -import cn.iocoder.yudao.coreservice.modules.pay.convert.order.PayOrderCoreConvert; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayOrderCoreMapper; -import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayOrderExtensionCoreMapper; -import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyTypeEnum; -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderNotifyStatusEnum; -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderStatusEnum; -import cn.iocoder.yudao.coreservice.modules.pay.service.merchant.PayAppCoreService; -import cn.iocoder.yudao.coreservice.modules.pay.service.merchant.PayChannelCoreService; -import cn.iocoder.yudao.coreservice.modules.pay.service.notify.PayNotifyCoreService; -import cn.iocoder.yudao.coreservice.modules.pay.service.notify.dto.PayNotifyTaskCreateReqDTO; -import cn.iocoder.yudao.coreservice.modules.pay.service.order.PayOrderCoreService; -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderCreateReqDTO; -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderSubmitReqDTO; -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderSubmitRespDTO; +import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.json.JsonUtils; import cn.iocoder.yudao.framework.pay.config.PayProperties; @@ -28,58 +11,94 @@ import cn.iocoder.yudao.framework.pay.core.client.PayClientFactory; import cn.iocoder.yudao.framework.pay.core.client.dto.PayNotifyDataDTO; import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderNotifyRespDTO; import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderUnifiedReqDTO; +import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderExportReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderPageReqVO; +import cn.iocoder.yudao.module.pay.convert.order.PayOrderConvert; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderExtensionDO; +import cn.iocoder.yudao.module.pay.dal.mysql.order.PayOrderExtensionMapper; +import cn.iocoder.yudao.module.pay.dal.mysql.order.PayOrderMapper; +import cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants; +import cn.iocoder.yudao.module.pay.enums.notify.PayNotifyTypeEnum; +import cn.iocoder.yudao.module.pay.enums.order.PayOrderNotifyStatusEnum; +import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum; +import cn.iocoder.yudao.module.pay.service.merchant.PayAppService; +import cn.iocoder.yudao.module.pay.service.merchant.PayChannelService; +import cn.iocoder.yudao.module.pay.service.notify.PayNotifyService; +import cn.iocoder.yudao.module.pay.service.notify.dto.PayNotifyTaskCreateReqDTO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.pay.service.order.dto.PayOrderCreateReqDTO; +import cn.iocoder.yudao.module.pay.service.order.dto.PayOrderSubmitReqDTO; +import cn.iocoder.yudao.module.pay.service.order.dto.PayOrderSubmitRespDTO; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.util.Collection; import java.util.Date; +import java.util.List; import java.util.Objects; -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.*; -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; - /** - * æ”¯ä»˜è®¢å• Core Service 实现类 + * æ”¯ä»˜è®¢å• Service 实现类 * - * @author èŠ‹é“æºç  + * @author aquan */ @Service @Validated @Slf4j -public class PayOrderCoreServiceImpl implements PayOrderCoreService { +public class PayOrderServiceImpl implements PayOrderService { @Resource private PayProperties payProperties; - @Resource - private PayAppCoreService payAppCoreService; - @Resource - private PayChannelCoreService payChannelCoreService; - @Resource - private PayNotifyCoreService payNotifyCoreService; - @Resource private PayClientFactory payClientFactory; @Resource - private PayOrderCoreMapper payOrderCoreMapper; + private PayOrderMapper orderMapper; @Resource - private PayOrderExtensionCoreMapper payOrderExtensionCoreMapper; + private PayOrderExtensionMapper orderExtensionMapper; + + @Resource + private PayAppService appService; + @Resource + private PayChannelService channelService; + @Resource + private PayNotifyService notifyService; @Override - public PayOrderDO getPayOrder(Long id) { - return payOrderCoreMapper.selectById(id); + public PayOrderDO getOrder(Long id) { + return orderMapper.selectById(id); + } + + @Override + public PageResult getOrderPage(PayOrderPageReqVO pageReqVO) { + return orderMapper.selectPage(pageReqVO); + } + + @Override + public List getOrderList(PayOrderExportReqVO exportReqVO) { + return orderMapper.selectList(exportReqVO); + } + + // TODO @艿艿:需è¦ä¼˜åŒ–。ä¸ç¡®å®šè¿™ä¸ªæ–¹æ³•的作用 + @Override + public List getOrderSubjectList(Collection idList) { + return orderMapper.findByIdListQueryOrderSubject(idList); } @Override public Long createPayOrder(PayOrderCreateReqDTO reqDTO) { // 校验 App - PayAppDO app = payAppCoreService.validPayApp(reqDTO.getAppId()); + PayAppDO app = appService.validPayApp(reqDTO.getAppId()); // æŸ¥è¯¢å¯¹åº”çš„æ”¯ä»˜äº¤æ˜“å•æ˜¯å¦å·²ç»å­˜åœ¨ã€‚如果是,则直接返回 - PayOrderDO order = payOrderCoreMapper.selectByAppIdAndMerchantOrderId( + PayOrderDO order = orderMapper.selectByAppIdAndMerchantOrderId( reqDTO.getAppId(), reqDTO.getMerchantOrderId()); if (order != null) { log.warn("[createPayOrder][appId({}) merchantOrderId({}) å·²ç»å­˜åœ¨å¯¹åº”的支付å•({})]", order.getAppId(), @@ -88,7 +107,7 @@ public class PayOrderCoreServiceImpl implements PayOrderCoreService { } // åˆ›å»ºæ”¯ä»˜äº¤æ˜“å• - order = PayOrderCoreConvert.INSTANCE.convert(reqDTO) + order = PayOrderConvert.INSTANCE.convert(reqDTO) .setMerchantId(app.getMerchantId()).setAppId(app.getId()); // 商户相关字段 order.setNotifyUrl(app.getPayNotifyUrl()) @@ -99,7 +118,7 @@ public class PayOrderCoreServiceImpl implements PayOrderCoreService { // todo @芋艿 创建支付的订å•çš„é€€æ¬¾çŠ¶æ€æžšä¸¾æ˜¯ä¸æ˜¯æœ‰é—®é¢˜ï¼Œåº”该是 PayRefundTypeEnum å§ æ‚¨è¿™å¡«å†™çš„æ˜¯ PayOrderNotifyStatusEnum å›žè°ƒçŠ¶æ€æžšä¸¾ order.setRefundStatus(PayOrderNotifyStatusEnum.NO.getStatus()) .setRefundTimes(0).setRefundAmount(0L); - payOrderCoreMapper.insert(order); + orderMapper.insert(order); // 最终返回 return order.getId(); } @@ -107,34 +126,34 @@ public class PayOrderCoreServiceImpl implements PayOrderCoreService { @Override public PayOrderSubmitRespDTO submitPayOrder(PayOrderSubmitReqDTO reqDTO) { // 校验 App - payAppCoreService.validPayApp(reqDTO.getAppId()); + appService.validPayApp(reqDTO.getAppId()); // æ ¡éªŒæ”¯ä»˜æ¸ é“æ˜¯å¦æœ‰æ•ˆ - PayChannelDO channel = payChannelCoreService.validPayChannel(reqDTO.getAppId(), reqDTO.getChannelCode()); + PayChannelDO channel = channelService.validPayChannel(reqDTO.getAppId(), reqDTO.getChannelCode()); // æ ¡éªŒæ”¯ä»˜å®¢æˆ·ç«¯æ˜¯å¦æ­£ç¡®åˆå§‹åŒ– PayClient client = payClientFactory.getPayClient(channel.getId()); if (client == null) { log.error("[submitPayOrder][渠é“ç¼–å·({}) 找ä¸åˆ°å¯¹åº”的支付客户端]", channel.getId()); - throw exception(PAY_CHANNEL_CLIENT_NOT_FOUND); + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_CHANNEL_CLIENT_NOT_FOUND); } // 获得 PayOrderDO ,并校验其是å¦å­˜åœ¨ - PayOrderDO order = payOrderCoreMapper.selectById(reqDTO.getId()); + PayOrderDO order = orderMapper.selectById(reqDTO.getId()); if (order == null || !Objects.equals(order.getAppId(), reqDTO.getAppId())) { // 是å¦å­˜åœ¨ - throw exception(PAY_ORDER_NOT_FOUND); + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_ORDER_NOT_FOUND); } if (!PayOrderStatusEnum.WAITING.getStatus().equals(order.getStatus())) { // 校验状æ€ï¼Œå¿…须是待支付 - throw exception(PAY_ORDER_STATUS_IS_NOT_WAITING); + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_ORDER_STATUS_IS_NOT_WAITING); } // æ’å…¥ PayOrderExtensionDO - PayOrderExtensionDO orderExtension = PayOrderCoreConvert.INSTANCE.convert(reqDTO) + PayOrderExtensionDO orderExtension = PayOrderConvert.INSTANCE.convert(reqDTO) .setOrderId(order.getId()).setNo(generateOrderExtensionNo()) .setChannelId(channel.getId()).setChannelCode(channel.getCode()) .setStatus(PayOrderStatusEnum.WAITING.getStatus()); - payOrderExtensionCoreMapper.insert(orderExtension); + orderExtensionMapper.insert(orderExtension); // è°ƒç”¨ä¸‰æ–¹æŽ¥å£ - PayOrderUnifiedReqDTO unifiedOrderReqDTO = PayOrderCoreConvert.INSTANCE.convert2(reqDTO); + PayOrderUnifiedReqDTO unifiedOrderReqDTO = PayOrderConvert.INSTANCE.convert2(reqDTO); // 商户相关字段 //TODO jason @芋艿 是å¦åŠ ä¸€ä¸ªå±žæ€§ 如tradeNo 支付订å•å·ï¼Œ 用这个merchantOrderId让人迷糊 unifiedOrderReqDTO.setMerchantOrderId(orderExtension.getNo()) // 注æ„,此处使用的是 PayOrderExtensionDO.no å±žæ€§ï¼ @@ -197,12 +216,12 @@ public class PayOrderCoreServiceImpl implements PayOrderCoreService { log.info("[notifyPayOrder][channelId({}) 回调数æ®({})]", channelId, notifyData.getBody()); // æ ¡éªŒæ”¯ä»˜æ¸ é“æ˜¯å¦æœ‰æ•ˆ - PayChannelDO channel = payChannelCoreService.validPayChannel(channelId); + PayChannelDO channel = channelService.validPayChannel(channelId); // æ ¡éªŒæ”¯ä»˜å®¢æˆ·ç«¯æ˜¯å¦æ­£ç¡®åˆå§‹åŒ– PayClient client = payClientFactory.getPayClient(channel.getId()); if (client == null) { log.error("[notifyPayOrder][渠é“ç¼–å·({}) 找ä¸åˆ°å¯¹åº”的支付客户端]", channel.getId()); - throw exception(PAY_CHANNEL_CLIENT_NOT_FOUND); + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_CHANNEL_CLIENT_NOT_FOUND); } // è§£æžæ”¯ä»˜ç»“æžœ @@ -210,45 +229,44 @@ public class PayOrderCoreServiceImpl implements PayOrderCoreService { // TODO 芋艿,先最严格的校验。å³ä½¿è°ƒç”¨æ–¹é‡å¤è°ƒç”¨ï¼Œå®žé™…哪个订å•å·²ç»è¢«é‡å¤å›žè°ƒçš„æ”¯ä»˜ï¼Œä¹Ÿè¿”回 false 。也没问题,因为实际已ç»å›žè°ƒæˆåŠŸäº†ã€‚ // 1.1 查询 PayOrderExtensionDO - PayOrderExtensionDO orderExtension = payOrderExtensionCoreMapper.selectByNo( - notifyRespDTO.getOrderExtensionNo()); + PayOrderExtensionDO orderExtension = orderExtensionMapper.selectByNo(notifyRespDTO.getOrderExtensionNo()); if (orderExtension == null) { - throw exception(PAY_ORDER_EXTENSION_NOT_FOUND); + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_ORDER_EXTENSION_NOT_FOUND); } if (!PayOrderStatusEnum.WAITING.getStatus().equals(orderExtension.getStatus())) { // 校验状æ€ï¼Œå¿…须是待支付 - throw exception(PAY_ORDER_EXTENSION_STATUS_IS_NOT_WAITING); + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_ORDER_EXTENSION_STATUS_IS_NOT_WAITING); } // 1.2 æ›´æ–° PayOrderExtensionDO //TODO 支付å®äº¤æ˜“è¶…æ—¶ TRADE_FINISHED éœ€è¦æ›´æ–°äº¤æ˜“关闭 - int updateCounts = payOrderExtensionCoreMapper.updateByIdAndStatus(orderExtension.getId(), + int updateCounts = orderExtensionMapper.updateByIdAndStatus(orderExtension.getId(), PayOrderStatusEnum.WAITING.getStatus(), PayOrderExtensionDO.builder().id(orderExtension.getId()) .status(PayOrderStatusEnum.SUCCESS.getStatus()).channelNotifyData(notifyData.getBody()).build()); if (updateCounts == 0) { // 校验状æ€ï¼Œå¿…须是待支付 - throw exception(PAY_ORDER_EXTENSION_STATUS_IS_NOT_WAITING); + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_ORDER_EXTENSION_STATUS_IS_NOT_WAITING); } log.info("[notifyPayOrder][支付拓展å•({}) 更新为已支付]", orderExtension.getId()); // 2.1 判断 PayOrderDO 是å¦å¤„于待支付 - PayOrderDO order = payOrderCoreMapper.selectById(orderExtension.getOrderId()); + PayOrderDO order = orderMapper.selectById(orderExtension.getOrderId()); if (order == null) { - throw exception(PAY_ORDER_NOT_FOUND); + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_ORDER_NOT_FOUND); } if (!PayOrderStatusEnum.WAITING.getStatus().equals(order.getStatus())) { // 校验状æ€ï¼Œå¿…须是待支付 - throw exception(PAY_ORDER_STATUS_IS_NOT_WAITING); + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_ORDER_STATUS_IS_NOT_WAITING); } // 2.2 æ›´æ–° PayOrderDO - updateCounts = payOrderCoreMapper.updateByIdAndStatus(order.getId(), PayOrderStatusEnum.WAITING.getStatus(), + updateCounts = orderMapper.updateByIdAndStatus(order.getId(), PayOrderStatusEnum.WAITING.getStatus(), PayOrderDO.builder().status(PayOrderStatusEnum.SUCCESS.getStatus()).channelId(channelId).channelCode(channel.getCode()) .successTime(notifyRespDTO.getSuccessTime()).successExtensionId(orderExtension.getId()) .channelOrderNo(notifyRespDTO.getChannelOrderNo()).channelUserId(notifyRespDTO.getChannelUserId()) .notifyTime(new Date()).build()); if (updateCounts == 0) { // 校验状æ€ï¼Œå¿…须是待支付 - throw exception(PAY_ORDER_STATUS_IS_NOT_WAITING); + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_ORDER_STATUS_IS_NOT_WAITING); } log.info("[notifyPayOrder][支付订å•({}) 更新为已支付]", order.getId()); // 3. æ’入支付通知记录 - payNotifyCoreService.createPayNotifyTask(PayNotifyTaskCreateReqDTO.builder() + notifyService.createPayNotifyTask(PayNotifyTaskCreateReqDTO.builder() .type(PayNotifyTypeEnum.ORDER.getType()).dataId(order.getId()).build()); } diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayOrderCreateReqDTO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/dto/PayOrderCreateReqDTO.java similarity index 95% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayOrderCreateReqDTO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/dto/PayOrderCreateReqDTO.java index a5d2b0f4e2..62bf511de4 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayOrderCreateReqDTO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/dto/PayOrderCreateReqDTO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.pay.service.order.dto; +package cn.iocoder.yudao.module.pay.service.order.dto; import lombok.Data; import org.hibernate.validator.constraints.Length; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayOrderSubmitReqDTO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/dto/PayOrderSubmitReqDTO.java similarity index 92% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayOrderSubmitReqDTO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/dto/PayOrderSubmitReqDTO.java index eb08fbb3e1..20f6ab2643 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayOrderSubmitReqDTO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/dto/PayOrderSubmitReqDTO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.pay.service.order.dto; +package cn.iocoder.yudao.module.pay.service.order.dto; import lombok.Data; import lombok.experimental.Accessors; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayOrderSubmitRespDTO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/dto/PayOrderSubmitRespDTO.java similarity index 83% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayOrderSubmitRespDTO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/dto/PayOrderSubmitRespDTO.java index 2bcb504e85..a594253f55 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayOrderSubmitRespDTO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/dto/PayOrderSubmitRespDTO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.pay.service.order.dto; +package cn.iocoder.yudao.module.pay.service.order.dto; import lombok.Data; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayRefundReqDTO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/dto/PayRefundReqDTO.java similarity index 93% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayRefundReqDTO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/dto/PayRefundReqDTO.java index 6ec3fb13d1..0eb24dbe25 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayRefundReqDTO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/dto/PayRefundReqDTO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.pay.service.order.dto; +package cn.iocoder.yudao.module.pay.service.order.dto; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayRefundRespDTO.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/dto/PayRefundRespDTO.java similarity index 85% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayRefundRespDTO.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/dto/PayRefundRespDTO.java index d065f3852f..2e1a6fcd46 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayRefundRespDTO.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/dto/PayRefundRespDTO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.pay.service.order.dto; +package cn.iocoder.yudao.module.pay.service.order.dto; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/package-info.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/package-info.java new file mode 100644 index 0000000000..2cad91ebaa --- /dev/null +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.pay.service; diff --git a/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/refund/PayRefundService.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/refund/PayRefundService.java new file mode 100755 index 0000000000..7ffd52b10f --- /dev/null +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/refund/PayRefundService.java @@ -0,0 +1,61 @@ +package cn.iocoder.yudao.module.pay.service.refund; + +import cn.iocoder.yudao.framework.pay.core.client.dto.PayNotifyDataDTO; +import cn.iocoder.yudao.module.pay.controller.admin.refund.vo.PayRefundExportReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.refund.vo.PayRefundPageReqVO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.pay.dal.dataobject.refund.PayRefundDO; +import cn.iocoder.yudao.module.pay.service.order.dto.PayRefundReqDTO; +import cn.iocoder.yudao.module.pay.service.order.dto.PayRefundRespDTO; + +import java.util.List; + +/** + * é€€æ¬¾è®¢å• Service æŽ¥å£ + * + * @author aquan + */ +public interface PayRefundService { + + /** + * èŽ·å¾—é€€æ¬¾è®¢å• + * + * @param id ç¼–å· + * @return é€€æ¬¾è®¢å• + */ + PayRefundDO getRefund(Long id); + + /** + * 获得退款订å•分页 + * + * @param pageReqVO 分页查询 + * @return 退款订å•分页 + */ + PageResult getRefundPage(PayRefundPageReqVO pageReqVO); + + /** + * 获得退款订å•列表, 用于 Excel 导出 + * + * @param exportReqVO 查询æ¡ä»¶ + * @return 退款订å•列表 + */ + List getRefundList(PayRefundExportReqVO exportReqVO); + + /** + * æäº¤é€€æ¬¾ç”³è¯· + * + * @param reqDTO é€€æ¬¾ç”³è¯·ä¿¡æ¯ + * @return é€€æ¬¾ç”³è¯·è¿”å›žä¿¡æ¯ + */ + PayRefundRespDTO submitRefundOrder(PayRefundReqDTO reqDTO); + + /** + * 渠é“的退款通知 + * + * @param channelId 渠é“ç¼–å· + * @param notifyData é€šçŸ¥æ•°æ® + * @throws Exception 退款通知异常 + */ + void notifyPayRefund(Long channelId, PayNotifyDataDTO notifyData) throws Exception; + +} diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/impl/PayRefundCoreServiceImpl.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/refund/PayRefundServiceImpl.java old mode 100644 new mode 100755 similarity index 62% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/impl/PayRefundCoreServiceImpl.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/refund/PayRefundServiceImpl.java index 944c62aa6e..4e3a151fbe --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/impl/PayRefundCoreServiceImpl.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/refund/PayRefundServiceImpl.java @@ -1,26 +1,7 @@ -package cn.iocoder.yudao.coreservice.modules.pay.service.order.impl; +package cn.iocoder.yudao.module.pay.service.refund; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayOrderCoreMapper; -import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayOrderExtensionCoreMapper; -import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayRefundCoreMapper; -import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyTypeEnum; -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderNotifyStatusEnum; -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderStatusEnum; -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundStatusEnum; -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundTypeEnum; -import cn.iocoder.yudao.coreservice.modules.pay.service.merchant.PayAppCoreService; -import cn.iocoder.yudao.coreservice.modules.pay.service.merchant.PayChannelCoreService; -import cn.iocoder.yudao.coreservice.modules.pay.service.notify.PayNotifyCoreService; -import cn.iocoder.yudao.coreservice.modules.pay.service.notify.dto.PayNotifyTaskCreateReqDTO; -import cn.iocoder.yudao.coreservice.modules.pay.service.order.PayRefundCoreService; -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayRefundReqDTO; -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayRefundRespDTO; +import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.framework.pay.core.client.PayClient; import cn.iocoder.yudao.framework.pay.core.client.PayClientFactory; import cn.iocoder.yudao.framework.pay.core.client.PayCommonResult; @@ -29,56 +10,102 @@ import cn.iocoder.yudao.framework.pay.core.client.dto.PayRefundNotifyDTO; import cn.iocoder.yudao.framework.pay.core.client.dto.PayRefundUnifiedReqDTO; import cn.iocoder.yudao.framework.pay.core.client.dto.PayRefundUnifiedRespDTO; import cn.iocoder.yudao.framework.pay.core.enums.PayNotifyRefundStatusEnum; +import cn.iocoder.yudao.module.pay.controller.admin.refund.vo.PayRefundExportReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.refund.vo.PayRefundPageReqVO; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderExtensionDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.refund.PayRefundDO; +import cn.iocoder.yudao.module.pay.dal.mysql.order.PayOrderMapper; +import cn.iocoder.yudao.module.pay.dal.mysql.refund.PayRefundMapper; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants; +import cn.iocoder.yudao.module.pay.enums.notify.PayNotifyTypeEnum; +import cn.iocoder.yudao.module.pay.enums.order.PayOrderNotifyStatusEnum; +import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum; +import cn.iocoder.yudao.module.pay.enums.refund.PayRefundStatusEnum; +import cn.iocoder.yudao.module.pay.enums.refund.PayRefundTypeEnum; +import cn.iocoder.yudao.module.pay.service.merchant.PayAppService; +import cn.iocoder.yudao.module.pay.service.merchant.PayChannelService; +import cn.iocoder.yudao.module.pay.service.notify.PayNotifyService; +import cn.iocoder.yudao.module.pay.service.notify.dto.PayNotifyTaskCreateReqDTO; +import cn.iocoder.yudao.module.pay.service.order.PayOrderExtensionService; +import cn.iocoder.yudao.module.pay.service.order.PayOrderService; +import cn.iocoder.yudao.module.pay.service.order.dto.PayRefundReqDTO; +import cn.iocoder.yudao.module.pay.service.order.dto.PayRefundRespDTO; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.util.Date; +import java.util.List; import java.util.Objects; -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.*; -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; - +/** + * é€€æ¬¾è®¢å• Service 实现类 + * + * @author aquan + */ @Service @Slf4j -public class PayRefundCoreServiceImpl implements PayRefundCoreService { - - @Resource - private PayOrderCoreMapper payOrderCoreMapper; - @Resource - private PayRefundCoreMapper payRefundCoreMapper; - @Resource - private PayOrderExtensionCoreMapper payOrderExtensionCoreMapper; - - @Resource - private PayAppCoreService payAppCoreService; - @Resource - private PayChannelCoreService payChannelCoreService; - @Resource - private PayNotifyCoreService payNotifyCoreService; +@Validated +public class PayRefundServiceImpl implements PayRefundService { @Resource private PayClientFactory payClientFactory; + @Resource + private PayRefundMapper refundMapper; + @Resource + private PayOrderMapper orderMapper; // TODO @jasonï¼šéœ€è¦æ”¹æˆä¸ç›´æŽ¥æ“作 dbï¼› + + @Resource + private PayOrderService orderService; + @Resource + private PayOrderExtensionService orderExtensionService; + @Resource + private PayAppService appService; + @Resource + private PayChannelService channelService; + @Resource + private PayNotifyService notifyService; + + @Override + public PayRefundDO getRefund(Long id) { + return refundMapper.selectById(id); + } + + @Override + public PageResult getRefundPage(PayRefundPageReqVO pageReqVO) { + return refundMapper.selectPage(pageReqVO); + } + + @Override + public List getRefundList(PayRefundExportReqVO exportReqVO) { + return refundMapper.selectList(exportReqVO); + } + @Override @Transactional(rollbackFor = Exception.class) public PayRefundRespDTO submitRefundOrder(PayRefundReqDTO req) { // 获得 PayOrderDO - PayOrderDO order = payOrderCoreMapper.selectById(req.getPayOrderId()); + PayOrderDO order = orderService.getOrder(req.getPayOrderId()); // æ ¡éªŒè®¢å•æ˜¯å¦å­˜åœ¨ if (Objects.isNull(order) ) { - throw exception(PAY_ORDER_NOT_FOUND); + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_ORDER_NOT_FOUND); } // 校验 App - PayAppDO app = payAppCoreService.validPayApp(order.getAppId()); + PayAppDO app = appService.validPayApp(order.getAppId()); // æ ¡éªŒæ”¯ä»˜æ¸ é“æ˜¯å¦æœ‰æ•ˆ - PayChannelDO channel = payChannelCoreService.validPayChannel(order.getChannelId()); + PayChannelDO channel = channelService.validPayChannel(order.getChannelId()); // æ ¡éªŒæ”¯ä»˜å®¢æˆ·ç«¯æ˜¯å¦æ­£ç¡®åˆå§‹åŒ– PayClient client = payClientFactory.getPayClient(channel.getId()); if (client == null) { log.error("[refund][渠é“ç¼–å·({}) 找ä¸åˆ°å¯¹åº”的支付客户端]", channel.getId()); - throw exception(PAY_CHANNEL_CLIENT_NOT_FOUND); + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_CHANNEL_CLIENT_NOT_FOUND); } // 校验退款的æ¡ä»¶ @@ -88,19 +115,19 @@ public class PayRefundCoreServiceImpl implements PayRefundCoreService { if (Objects.equals(req.getAmount(), order.getAmount())) { refundType = PayRefundTypeEnum.ALL; } - PayOrderExtensionDO orderExtensionDO = payOrderExtensionCoreMapper.selectById(order.getSuccessExtensionId()); - PayRefundDO payRefundDO = payRefundCoreMapper.selectByTradeNoAndMerchantRefundNo(orderExtensionDO.getNo(), req.getMerchantRefundId()); + PayOrderExtensionDO orderExtensionDO = orderExtensionService.getOrderExtension(order.getSuccessExtensionId()); + PayRefundDO payRefundDO = refundMapper.selectByTradeNoAndMerchantRefundNo(orderExtensionDO.getNo(), req.getMerchantRefundId()); if(Objects.nonNull(payRefundDO)){ // 退款订å•å·²ç»æäº¤è¿‡ã€‚ //TODO 校验相åŒé€€æ¬¾å•çš„é‡‘é¢ // TODO @jason:咱è¦ä¸å°è£…一个 ObjectUtils.equalsAny if (Objects.equals(PayRefundStatusEnum.SUCCESS.getStatus(), payRefundDO.getStatus()) - || Objects.equals(PayRefundStatusEnum.CLOSE.getStatus(), payRefundDO.getStatus())) { + || Objects.equals(PayRefundStatusEnum.CLOSE.getStatus(), payRefundDO.getStatus())) { //å·²æˆåŠŸé€€æ¬¾ - throw exception(PAY_REFUND_SUCCEED); + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_REFUND_SUCCEED); } //å¯ä»¥é‡å¤æäº¤ï¼Œä¿è¯ é€€æ¬¾è¯·æ±‚å· ä¸€è‡´ï¼Œç”±æ¸ é“ä¿è¯å¹‚ç­‰ - }else { + } else { // æˆåŠŸï¼Œæ’å…¥é€€æ¬¾å• çŠ¶æ€ä¸ºç”Ÿæˆ.没有和渠é“交互 // TODO @jason:æžåˆ° convert 里。一些é¢å¤–的自动,手动 set 下; payRefundDO = PayRefundDO.builder().channelOrderNo(order.getChannelOrderNo()) @@ -122,7 +149,7 @@ public class PayRefundCoreServiceImpl implements PayRefundCoreService { .notifyStatus(PayOrderNotifyStatusEnum.NO.getStatus()) .type(refundType.getStatus()) .build(); - payRefundCoreMapper.insert(payRefundDO); + refundMapper.insert(payRefundDO); } // TODO @jason:æžåˆ° convert 里。一些é¢å¤–的自动,手动 set 下; PayRefundUnifiedReqDTO unifiedReqDTO = new PayRefundUnifiedReqDTO(); @@ -142,18 +169,17 @@ public class PayRefundCoreServiceImpl implements PayRefundCoreService { return PayRefundRespDTO.builder().refundId(payRefundDO.getId()).build(); } - @Override @Transactional(rollbackFor = Exception.class) public void notifyPayRefund(Long channelId, PayNotifyDataDTO notifyData) { log.info("[notifyPayRefund][channelId({}) 回调数æ®({})]", channelId, notifyData.getBody()); // æ ¡éªŒæ”¯ä»˜æ¸ é“æ˜¯å¦æœ‰æ•ˆ - PayChannelDO channel = payChannelCoreService.validPayChannel(channelId); + PayChannelDO channel = channelService.validPayChannel(channelId); // æ ¡éªŒæ”¯ä»˜å®¢æˆ·ç«¯æ˜¯å¦æ­£ç¡®åˆå§‹åŒ– PayClient client = payClientFactory.getPayClient(channel.getId()); if (client == null) { log.error("[notifyPayOrder][渠é“ç¼–å·({}) 找ä¸åˆ°å¯¹åº”的支付客户端]", channel.getId()); - throw exception(PAY_CHANNEL_CLIENT_NOT_FOUND); + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_CHANNEL_CLIENT_NOT_FOUND); } // è§£æžæ¸ é“退款通知数æ®ï¼Œ ç»Ÿä¸€å¤„ç† PayRefundNotifyDTO refundNotify = client.parseRefundNotify(notifyData); @@ -167,14 +193,14 @@ public class PayRefundCoreServiceImpl implements PayRefundCoreService { private void payRefundSuccess(PayRefundNotifyDTO refundNotify) { // 校验退款å•存在 - PayRefundDO refundDO = payRefundCoreMapper.selectByTradeNoAndMerchantRefundNo(refundNotify.getTradeNo(), refundNotify.getReqNo()); + PayRefundDO refundDO = refundMapper.selectByTradeNoAndMerchantRefundNo(refundNotify.getTradeNo(), refundNotify.getReqNo()); if (refundDO == null) { log.error("[payRefundSuccess][ä¸å­˜åœ¨ seqNo 为{} 的支付退款å•]", refundNotify.getReqNo()); - throw exception(PAY_REFUND_NOT_FOUND); + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_REFUND_NOT_FOUND); } // å¾—åˆ°å·²é€€é‡‘é¢ - PayOrderDO payOrderDO = payOrderCoreMapper.selectById(refundDO.getOrderId()); + PayOrderDO payOrderDO = orderService.getOrder(refundDO.getOrderId()); Long refundedAmount = payOrderDO.getRefundAmount(); PayOrderStatusEnum orderStatus = PayOrderStatusEnum.SUCCESS; @@ -189,7 +215,7 @@ public class PayRefundCoreServiceImpl implements PayRefundCoreService { .setStatus(orderStatus.getStatus()) .setRefundTimes(payOrderDO.getRefundTimes() + 1) .setRefundStatus(refundDO.getType()); - payOrderCoreMapper.updateById(updateOrderDO); + orderMapper.updateById(updateOrderDO); // æ›´æ–°é€€æ¬¾è®¢å• PayRefundDO updateRefundDO = new PayRefundDO(); @@ -199,11 +225,11 @@ public class PayRefundCoreServiceImpl implements PayRefundCoreService { .setTradeNo(refundNotify.getTradeNo()) .setNotifyTime(new Date()) .setStatus(PayRefundStatusEnum.SUCCESS.getStatus()); - payRefundCoreMapper.updateById(updateRefundDO); + refundMapper.updateById(updateRefundDO); // æ’入退款通知记录 // TODO 通知商户æˆåŠŸæˆ–è€…å¤±è´¥. 现在通知似乎没有实现, åªæ˜¯å›žè°ƒ - payNotifyCoreService.createPayNotifyTask(PayNotifyTaskCreateReqDTO.builder() + notifyService.createPayNotifyTask(PayNotifyTaskCreateReqDTO.builder() .type(PayNotifyTypeEnum.REFUND.getType()).dataId(refundDO.getId()).build()); } @@ -215,19 +241,19 @@ public class PayRefundCoreServiceImpl implements PayRefundCoreService { private void validatePayRefund(PayRefundReqDTO req, PayOrderDO order) { // 校验状æ€ï¼Œå¿…é¡»æ˜¯æ”¯ä»˜çŠ¶æ€ if (!PayOrderStatusEnum.SUCCESS.getStatus().equals(order.getStatus())) { - throw exception(PAY_ORDER_STATUS_IS_NOT_SUCCESS); + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_ORDER_STATUS_IS_NOT_SUCCESS); } // 是å¦å·²ç»å…¨é¢é€€æ¬¾ if (PayRefundTypeEnum.ALL.getStatus().equals(order.getRefundStatus())) { - throw exception(PAY_REFUND_ALL_REFUNDED); + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_REFUND_ALL_REFUNDED); } // æ ¡éªŒé‡‘é¢ é€€æ¬¾é‡‘é¢ä¸èƒ½å¤§äºŽ åŽŸå®šçš„é‡‘é¢ if (req.getAmount() + order.getRefundAmount() > order.getAmount()){ - throw exception(PAY_REFUND_AMOUNT_EXCEED); + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_REFUND_AMOUNT_EXCEED); } // 校验渠é“订å•å· if (StrUtil.isEmpty(order.getChannelOrderNo())) { - throw exception(PAY_REFUND_CHN_ORDER_NO_IS_NULL); + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_REFUND_CHN_ORDER_NO_IS_NULL); } //TODO é€€æ¬¾çš„æœŸé™ é€€æ¬¾æ¬¡æ•°çš„æŽ§åˆ¶ } diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/util/PaySeqUtils.java b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/util/PaySeqUtils.java similarity index 94% rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/util/PaySeqUtils.java rename to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/util/PaySeqUtils.java index 959cef7460..e6409e9603 100644 --- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/util/PaySeqUtils.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/util/PaySeqUtils.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.pay.util; +package cn.iocoder.yudao.module.pay.util; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; @@ -10,6 +10,7 @@ import java.util.concurrent.atomic.AtomicLong; /** * 支付相关编å·çš„生产 */ +// TODO @jasonï¼šéœ€è¦æ”¹é€ ï¼ŒåŸºäºŽ dbï¼› public class PaySeqUtils { private static final AtomicLong REFUND_REQ_NO_SEQ = new AtomicLong(0L); @@ -47,4 +48,5 @@ public class PaySeqUtils { DateUtil.format(new Date(), DatePattern.PURE_DATETIME_MS_PATTERN), (int) MER_ORDER_NO_SEQ.getAndIncrement() % 10000); } + } diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/app/PayAppServiceTest.java b/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/merchant/PayAppServiceTest.java similarity index 90% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/app/PayAppServiceTest.java rename to yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/merchant/PayAppServiceTest.java index 7dee064027..0939ade8b1 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/app/PayAppServiceTest.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/merchant/PayAppServiceTest.java @@ -1,18 +1,17 @@ -package cn.iocoder.yudao.adminserver.modules.pay.service.app; +package cn.iocoder.yudao.module.pay.service.merchant; import cn.hutool.core.util.RandomUtil; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppExportReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppPageReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.app.PayAppMapper; -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.merchant.PayMerchantMapper; -import cn.iocoder.yudao.adminserver.modules.pay.service.app.impl.PayAppServiceImpl; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppCreateReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppExportReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppPageReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppUpdateReqVO; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO; +import cn.iocoder.yudao.module.pay.dal.mysql.merchant.PayAppMapper; +import cn.iocoder.yudao.module.pay.dal.mysql.merchant.PayMerchantMapper; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.pay.test.BaseDbUnitTest; import org.junit.jupiter.api.Test; import org.mockito.Mockito; import org.springframework.boot.test.mock.mockito.MockBean; @@ -22,13 +21,13 @@ import javax.annotation.Resource; import java.util.Collections; import java.util.List; -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.PAY_APP_NOT_FOUND; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; +import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.*; import static org.junit.jupiter.api.Assertions.*; /** diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/channel/PayChannelServiceTest.java b/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/merchant/PayChannelServiceTest.java similarity index 93% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/channel/PayChannelServiceTest.java rename to yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/merchant/PayChannelServiceTest.java index b8d2bc917f..6397bb4139 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/channel/PayChannelServiceTest.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/merchant/PayChannelServiceTest.java @@ -1,18 +1,17 @@ -package cn.iocoder.yudao.adminserver.modules.pay.service.channel; +package cn.iocoder.yudao.module.pay.service.merchant; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.PayChannelCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.PayChannelExportReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.PayChannelPageReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.PayChannelUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.channel.PayChannelMapper; -import cn.iocoder.yudao.adminserver.modules.pay.service.channel.impl.PayChannelServiceImpl; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.pay.core.client.impl.alipay.AlipayPayClientConfig; import cn.iocoder.yudao.framework.pay.core.client.impl.wx.WXPayClientConfig; import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelCreateReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelExportReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelPageReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelUpdateReqVO; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO; +import cn.iocoder.yudao.module.pay.dal.mysql.merchant.PayChannelMapper; +import cn.iocoder.yudao.module.pay.test.BaseDbUnitTest; import com.alibaba.fastjson.JSON; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.Import; @@ -20,24 +19,16 @@ import org.springframework.context.annotation.Import; import javax.annotation.Resource; import java.util.List; -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.CHANNEL_NOT_EXISTS; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; +import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.CHANNEL_NOT_EXISTS; import static org.junit.jupiter.api.Assertions.*; -/** - * {@link PayChannelServiceImpl} çš„å•元测试类 - * - * @author 芋艿 - */ -@Import({ - PayChannelServiceImpl.class, - PayChannelConfig.class -}) +@Import({PayChannelServiceImpl.class}) public class PayChannelServiceTest extends BaseDbUnitTest { @Resource @@ -66,7 +57,6 @@ public class PayChannelServiceTest extends BaseDbUnitTest { assertPojoEquals(reqVO, channel, "config"); // 关于config 对象应该拿出æ¥é‡æ–°å¯¹æ¯” assertPojoEquals(v2Config, channel.getConfig()); - } @Test @@ -350,7 +340,6 @@ public class PayChannelServiceTest extends BaseDbUnitTest { assertPojoEquals(payClientConfig, list.get(0).getConfig()); } - public WXPayClientConfig getV2Config() { return new WXPayClientConfig() .setAppId("APP00001") @@ -400,5 +389,4 @@ public class PayChannelServiceTest extends BaseDbUnitTest { .setRootCertContent("13321321321dsad"); } - } diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/merchant/PayMerchantServiceTest.java b/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/merchant/PayMerchantServiceTest.java similarity index 89% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/merchant/PayMerchantServiceTest.java rename to yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/merchant/PayMerchantServiceTest.java index 0e7cf135dc..08d097083c 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/merchant/PayMerchantServiceTest.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/merchant/PayMerchantServiceTest.java @@ -1,29 +1,28 @@ -package cn.iocoder.yudao.adminserver.modules.pay.service.merchant; +package cn.iocoder.yudao.module.pay.service.merchant; import cn.hutool.core.util.RandomUtil; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantExportReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantPageReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.merchant.PayMerchantMapper; -import cn.iocoder.yudao.adminserver.modules.pay.service.merchant.impl.PayMerchantServiceImpl; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantCreateReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantExportReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantPageReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantUpdateReqVO; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO; +import cn.iocoder.yudao.module.pay.dal.mysql.merchant.PayMerchantMapper; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.pay.test.BaseDbUnitTest; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.Import; import javax.annotation.Resource; import java.util.List; -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.PAY_MERCHANT_NOT_EXISTS; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; +import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.*; import static org.junit.jupiter.api.Assertions.*; /** diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/PayOrderServiceTest.java b/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceTest.java similarity index 91% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/PayOrderServiceTest.java rename to yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceTest.java index 85b00a2d0e..e3ac7394ce 100755 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/PayOrderServiceTest.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceTest.java @@ -1,19 +1,18 @@ -package cn.iocoder.yudao.adminserver.modules.pay.service.order; +package cn.iocoder.yudao.module.pay.service.order; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.RandomUtil; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderExportReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderPageReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order.PayOrderMapper; -import cn.iocoder.yudao.adminserver.modules.pay.service.order.impl.PayOrderServiceImpl; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderNotifyStatusEnum; -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderStatusEnum; -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundTypeEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.date.DateUtils; import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum; +import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderExportReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderPageReqVO; +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO; +import cn.iocoder.yudao.module.pay.dal.mysql.order.PayOrderMapper; +import cn.iocoder.yudao.module.pay.enums.order.PayOrderNotifyStatusEnum; +import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum; +import cn.iocoder.yudao.module.pay.enums.refund.PayRefundTypeEnum; +import cn.iocoder.yudao.module.pay.test.BaseDbUnitTest; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.Import; diff --git a/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/package-info.java b/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/package-info.java new file mode 100644 index 0000000000..2cad91ebaa --- /dev/null +++ b/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.pay.service; diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/refund/PayRefundServiceTest.java b/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/refund/PayRefundServiceTest.java similarity index 90% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/refund/PayRefundServiceTest.java rename to yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/refund/PayRefundServiceTest.java index ee19dba14e..1d91732177 100755 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/refund/PayRefundServiceTest.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/refund/PayRefundServiceTest.java @@ -1,17 +1,16 @@ -package cn.iocoder.yudao.adminserver.modules.pay.service.refund; +package cn.iocoder.yudao.module.pay.service.refund; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundExportReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundPageReqVO; -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order.PayRefundMapper; -import cn.iocoder.yudao.adminserver.modules.pay.service.order.impl.PayRefundServiceImpl; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO; -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderNotifyStatusEnum; -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundStatusEnum; -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundTypeEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.date.DateUtils; import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum; +import cn.iocoder.yudao.module.pay.controller.admin.refund.vo.PayRefundExportReqVO; +import cn.iocoder.yudao.module.pay.controller.admin.refund.vo.PayRefundPageReqVO; +import cn.iocoder.yudao.module.pay.dal.dataobject.refund.PayRefundDO; +import cn.iocoder.yudao.module.pay.dal.mysql.refund.PayRefundMapper; +import cn.iocoder.yudao.module.pay.enums.order.PayOrderNotifyStatusEnum; +import cn.iocoder.yudao.module.pay.enums.refund.PayRefundStatusEnum; +import cn.iocoder.yudao.module.pay.enums.refund.PayRefundTypeEnum; +import cn.iocoder.yudao.module.pay.test.BaseDbUnitTest; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.Import; diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/BaseDbAndRedisUnitTest.java b/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/test/BaseDbAndRedisUnitTest.java similarity index 95% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/BaseDbAndRedisUnitTest.java rename to yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/test/BaseDbAndRedisUnitTest.java index 2cc60cc30c..1c6d3278d7 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/BaseDbAndRedisUnitTest.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/test/BaseDbAndRedisUnitTest.java @@ -1,9 +1,8 @@ -package cn.iocoder.yudao.adminserver; +package cn.iocoder.yudao.module.pay.test; -import cn.iocoder.yudao.adminserver.config.RedisTestConfiguration; -import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration; import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration; +import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; import org.redisson.spring.starter.RedissonAutoConfiguration; diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java b/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/test/BaseDbUnitTest.java similarity index 97% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java rename to yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/test/BaseDbUnitTest.java index 5f7daeded1..27affbfc6b 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/test/BaseDbUnitTest.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver; +package cn.iocoder.yudao.module.pay.test; import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration; import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration; diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/BaseRedisUnitTest.java b/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/test/BaseRedisUnitTest.java similarity index 86% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/BaseRedisUnitTest.java rename to yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/test/BaseRedisUnitTest.java index 7e650bc3e2..11933c9fdd 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/BaseRedisUnitTest.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/test/BaseRedisUnitTest.java @@ -1,8 +1,6 @@ -package cn.iocoder.yudao.adminserver; +package cn.iocoder.yudao.module.pay.test; -import cn.iocoder.yudao.adminserver.config.RedisTestConfiguration; import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; -import cn.iocoder.yudao.framework.tracer.config.YudaoTracerAutoConfiguration; import org.redisson.spring.starter.RedissonAutoConfiguration; import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/config/RedisTestConfiguration.java b/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/test/RedisTestConfiguration.java similarity index 96% rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/config/RedisTestConfiguration.java rename to yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/test/RedisTestConfiguration.java index 15a39f7570..c8742129a0 100644 --- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/config/RedisTestConfiguration.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/test/RedisTestConfiguration.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.config; +package cn.iocoder.yudao.module.pay.test; import com.github.fppt.jedismock.RedisServer; import org.springframework.boot.autoconfigure.data.redis.RedisProperties; diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/DictTypeConstants.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/DictTypeConstants.java index 9b73264e14..ab6d1b3a21 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/DictTypeConstants.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/DictTypeConstants.java @@ -20,31 +20,6 @@ public interface DictTypeConstants { String SMS_SEND_STATUS = "sys_sms_send_status"; // 短信å‘é€çŠ¶æ€ String SMS_RECEIVE_STATUS = "sys_sms_receive_status"; // çŸ­ä¿¡æŽ¥æ”¶çŠ¶æ€ - /** - * 支付-订å•-订å•çŠ¶æ€ - */ - String PAY_ORDER_STATUS = "pay_order_status"; - - /** - * 支付-订å•-订å•å›žè°ƒå•†æˆ·çŠ¶æ€ - */ - String PAY_ORDER_NOTIFY_STATUS = "pay_order_notify_status"; - - /** - * 支付-订å•-订å•é€€æ¬¾çŠ¶æ€ - */ - String PAY_ORDER_REFUND_STATUS = "pay_order_refund_status"; - - /** - * 支付-退款订å•-é€€æ¬¾çŠ¶æ€ - */ - String PAY_REFUND_ORDER_STATUS = "pay_refund_order_status"; - - /** - * 支付-退款订å•-退款类别 - */ - String PAY_REFUND_ORDER_TYPE = "pay_refund_order_type"; - String BPM_TASK_ASSIGN_RULE_TYPE = "bpm_task_assign_rule_type"; // 任务分é…规则类型 String BPM_TASK_ASSIGN_SCRIPT = "bpm_task_assign_script"; // 任务分é…自定义脚本 diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/convert/order/PayRefundConvert.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/convert/order/PayRefundConvert.java deleted file mode 100644 index 999a3ba560..0000000000 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/convert/order/PayRefundConvert.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.iocoder.yudao.userserver.modules.pay.convert.order; - -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayRefundReqDTO; -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayRefundRespDTO; -import cn.iocoder.yudao.userserver.modules.pay.controller.order.vo.PayRefundReqVO; -import cn.iocoder.yudao.userserver.modules.pay.controller.order.vo.PayRefundRespVO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -/** - * 支付退款 Convert - * - * @author jason - */ -@Mapper -public interface PayRefundConvert { - - PayRefundConvert INSTANCE = Mappers.getMapper(PayRefundConvert.class); - - PayRefundReqDTO convert(PayRefundReqVO reqVO); - - PayRefundRespVO convert(PayRefundRespDTO req); -} diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md deleted file mode 100644 index 8153487b72..0000000000 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/package-info.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/package-info.java deleted file mode 100644 index 1aa11cdd26..0000000000 --- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -/** - * pay 包下,我们放支付业务,æä¾›ä¸šåŠ¡çš„æ”¯ä»˜èƒ½åŠ›ã€‚ - * 例如说:商户ã€åº”ç”¨ã€æ”¯ä»˜ã€é€€æ¬¾ç­‰ç­‰ - * - * 缩写:pay - */ -package cn.iocoder.yudao.userserver.modules.pay; From d45213fe2a4ba290be3c27c9d4bf55cc3e3d2740 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 31 Jan 2022 22:14:35 +0800 Subject: [PATCH 24/47] =?UTF-8?q?=E5=A4=9A=E6=A8=A1=E5=9D=97=E9=87=8D?= =?UTF-8?q?=E6=9E=84=207=EF=BC=9Apay=20=E6=A8=A1=E5=9D=97=E7=9A=84?= =?UTF-8?q?=E9=87=8D=E6=9E=84=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 3 +- yudao-core-service/pom.xml | 106 ---------------- .../modules/pay/service/package-info.java | 1 - .../src/test/resources/sql/create_tables.sql | 18 ++- .../test/resources/application-unit-test.yaml | 4 + .../dataobject/merchant/PayChannelDOTest.java | 2 +- .../PayChannelMapperIntegrationTest.java | 16 +-- .../order/PayOrderServiceIntegrationTest.java | 25 ++-- .../module/pay/service/package-info.java | 1 + .../test}/BaseDbAndRedisIntegrationTest.java | 2 +- .../pay/test}/BaseDbIntegrationTest.java | 2 +- .../pay/test}/BaseRedisIntegrationTest.java | 2 +- .../application-integration-test.yaml | 1 + .../service/merchant/PayAppServiceTest.java | 6 +- .../merchant/PayChannelServiceTest.java | 8 ++ .../service/order/PayOrderServiceTest.java | 19 ++- .../service/refund/PayRefundServiceTest.java | 25 +++- .../test/resources/application-unit-test.yaml | 54 ++++++++ .../src/test/resources/logback-spring.xml | 4 + .../src/test/resources/sql/clean.sql | 5 + .../src/test/resources/sql/create_tables.sql | 115 ++++++++++++++++++ 21 files changed, 271 insertions(+), 148 deletions(-) delete mode 100644 yudao-core-service/pom.xml delete mode 100644 yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/modules/pay/service/package-info.java rename {yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/modules => yudao-module-pay/yudao-module-pay-impl/src/test-integration/java/cn/iocoder/yudao/module}/pay/dal/dataobject/merchant/PayChannelDOTest.java (92%) rename yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/merchant/PayChannelCoreMapperTest.java => yudao-module-pay/yudao-module-pay-impl/src/test-integration/java/cn/iocoder/yudao/module/pay/dal/mysql/merchant/PayChannelMapperIntegrationTest.java (89%) rename yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/PayOrderCoreServiceTest.java => yudao-module-pay/yudao-module-pay-impl/src/test-integration/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceIntegrationTest.java (55%) create mode 100644 yudao-module-pay/yudao-module-pay-impl/src/test-integration/java/cn/iocoder/yudao/module/pay/service/package-info.java rename {yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice => yudao-module-pay/yudao-module-pay-impl/src/test-integration/java/cn/iocoder/yudao/module/pay/test}/BaseDbAndRedisIntegrationTest.java (98%) rename {yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice => yudao-module-pay/yudao-module-pay-impl/src/test-integration/java/cn/iocoder/yudao/module/pay/test}/BaseDbIntegrationTest.java (97%) rename {yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice => yudao-module-pay/yudao-module-pay-impl/src/test-integration/java/cn/iocoder/yudao/module/pay/test}/BaseRedisIntegrationTest.java (95%) rename {yudao-core-service => yudao-module-pay/yudao-module-pay-impl}/src/test-integration/resources/application-integration-test.yaml (98%) create mode 100644 yudao-module-pay/yudao-module-pay-impl/src/test/resources/application-unit-test.yaml create mode 100644 yudao-module-pay/yudao-module-pay-impl/src/test/resources/logback-spring.xml create mode 100644 yudao-module-pay/yudao-module-pay-impl/src/test/resources/sql/clean.sql create mode 100644 yudao-module-pay/yudao-module-pay-impl/src/test/resources/sql/create_tables.sql diff --git a/pom.xml b/pom.xml index e5294f7d8e..dac70439b1 100644 --- a/pom.xml +++ b/pom.xml @@ -10,9 +10,10 @@ yudao-dependencies yudao-framework + yudao-admin-server yudao-user-server - yudao-core-service + yudao-module-member yudao-module-system diff --git a/yudao-core-service/pom.xml b/yudao-core-service/pom.xml deleted file mode 100644 index ccb1e1600b..0000000000 --- a/yudao-core-service/pom.xml +++ /dev/null @@ -1,106 +0,0 @@ - - - - cn.iocoder.boot - yudao - ${revision} - - 4.0.0 - - yudao-core-service - jar - - yudao-core-service - - 公共æœåŠ¡ï¼Œé€šè¿‡ jar 包的方å¼ï¼Œè¢« yudao-admin-serverã€yudao-user-service 使用。例如说: - 1. 日志相关:访问日志ã€ç™»å½•日志ã€å¼‚常日志等等 - 2. 认è¯ç›¸å…³ï¼šåœ¨çº¿ Session - 3. 短信相关:短信模æ¿ã€çŸ­ä¿¡æ—¥å¿— - 等等 - - https://github.com/YunaiV/ruoyi-vue-pro - - - - - cn.iocoder.boot - yudao-spring-boot-starter-biz-dict - - - cn.iocoder.boot - yudao-spring-boot-starter-biz-sms - - - cn.iocoder.boot - yudao-spring-boot-starter-biz-pay - - - cn.iocoder.boot - yudao-spring-boot-starter-biz-tenant - - - - - cn.iocoder.boot - yudao-spring-boot-starter-web - - - - org.springframework.boot - spring-boot-configuration-processor - true - - - - cn.iocoder.boot - yudao-spring-boot-starter-security - - - - - cn.iocoder.boot - yudao-spring-boot-starter-mybatis - - - - cn.iocoder.boot - yudao-spring-boot-starter-redis - - - - - cn.iocoder.boot - yudao-spring-boot-starter-config - - - - - cn.iocoder.boot - yudao-spring-boot-starter-mq - - - - - cn.iocoder.boot - yudao-spring-boot-starter-protection - - - - - cn.iocoder.boot - yudao-spring-boot-starter-test - test - - - - - - com.google.guava - guava - - - - - diff --git a/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/modules/pay/service/package-info.java b/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/modules/pay/service/package-info.java deleted file mode 100644 index 13b4863a5b..0000000000 --- a/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/modules/pay/service/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.pay.service; diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/sql/create_tables.sql b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/sql/create_tables.sql index 8b6433e698..54e6ab622a 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/sql/create_tables.sql +++ b/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/sql/create_tables.sql @@ -1,5 +1,3 @@ --- bpm 开头的 DB - CREATE TABLE IF NOT EXISTS "bpm_form" ( "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, "name" varchar(63) NOT NULL, @@ -13,4 +11,18 @@ CREATE TABLE IF NOT EXISTS "bpm_form" ( "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, "deleted" bit NOT NULL DEFAULT FALSE, PRIMARY KEY ("id") -) COMMENT '动æ€è¡¨å•'; + ) COMMENT '动æ€è¡¨å•'; + +CREATE TABLE IF NOT EXISTS "bpm_user_group" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "name" varchar(63) NOT NULL, + "description" varchar(255) NOT NULL, + "status" tinyint NOT NULL, + "member_user_ids" varchar(255) NOT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") + ) COMMENT '用户组'; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test/resources/application-unit-test.yaml b/yudao-module-infra/yudao-module-infra-impl/src/test/resources/application-unit-test.yaml index 42e5e356dd..e8e47b4456 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/test/resources/application-unit-test.yaml +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/resources/application-unit-test.yaml @@ -48,3 +48,7 @@ yudao: base-package2: cn.iocoder.yudao.module core-service: base-package: cn.iocoder.yudao.module.member.dal.mysql # TODO èŠ‹è‰¿ï¼šè¦æ¸…ç†æŽ‰ + pay: + pay-notify-url: http://niubi.natapp1.cc/api/pay/order/notify + pay-return-url: http://niubi.natapp1.cc/api/pay/order/return + refund-notify-url: http://niubi.natapp1.cc/api/pay/refund/notify diff --git a/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/merchant/PayChannelDOTest.java b/yudao-module-pay/yudao-module-pay-impl/src/test-integration/java/cn/iocoder/yudao/module/pay/dal/dataobject/merchant/PayChannelDOTest.java similarity index 92% rename from yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/merchant/PayChannelDOTest.java rename to yudao-module-pay/yudao-module-pay-impl/src/test-integration/java/cn/iocoder/yudao/module/pay/dal/dataobject/merchant/PayChannelDOTest.java index c0fb7d5bd6..2818cb12d0 100644 --- a/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/merchant/PayChannelDOTest.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/test-integration/java/cn/iocoder/yudao/module/pay/dal/dataobject/merchant/PayChannelDOTest.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant; +package cn.iocoder.yudao.module.pay.dal.dataobject.merchant; import cn.iocoder.yudao.framework.common.util.json.JsonUtils; import cn.iocoder.yudao.framework.pay.core.client.impl.wx.WXPayClientConfig; diff --git a/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/merchant/PayChannelCoreMapperTest.java b/yudao-module-pay/yudao-module-pay-impl/src/test-integration/java/cn/iocoder/yudao/module/pay/dal/mysql/merchant/PayChannelMapperIntegrationTest.java similarity index 89% rename from yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/merchant/PayChannelCoreMapperTest.java rename to yudao-module-pay/yudao-module-pay-impl/src/test-integration/java/cn/iocoder/yudao/module/pay/dal/mysql/merchant/PayChannelMapperIntegrationTest.java index 18445a4ec9..b869163a2f 100644 --- a/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/merchant/PayChannelCoreMapperTest.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/test-integration/java/cn/iocoder/yudao/module/pay/dal/mysql/merchant/PayChannelMapperIntegrationTest.java @@ -1,12 +1,12 @@ -package cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.merchant; +package cn.iocoder.yudao.module.pay.dal.mysql.merchant; import cn.hutool.core.io.IoUtil; -import cn.iocoder.yudao.coreservice.BaseDbAndRedisIntegrationTest; -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.pay.core.client.impl.alipay.AlipayPayClientConfig; import cn.iocoder.yudao.framework.pay.core.client.impl.wx.WXPayClientConfig; import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum; +import cn.iocoder.yudao.module.pay.test.BaseDbIntegrationTest; import org.junit.jupiter.api.Test; import javax.annotation.Resource; @@ -15,10 +15,10 @@ import java.io.FileNotFoundException; import java.util.List; @Resource -public class PayChannelCoreMapperTest extends BaseDbAndRedisIntegrationTest { +public class PayChannelMapperIntegrationTest extends BaseDbIntegrationTest { @Resource - private PayChannelCoreMapper payChannelCoreMapper; + private PayChannelMapper payChannelMapper; /** * æ’å…¥ {@link PayChannelEnum#WX_PUB} åˆå§‹é…ç½® @@ -42,7 +42,7 @@ public class PayChannelCoreMapperTest extends BaseDbAndRedisIntegrationTest { config.setApiV3Key("joerVi8y5DJ3o4ttA0o1uH47Xz1u2Ase"); payChannelDO.setConfig(config); // 执行æ’å…¥ - payChannelCoreMapper.insert(payChannelDO); + payChannelMapper.insert(payChannelDO); } // TODO @ouyang:Zfb æ”¹æˆ AlipayQr @@ -67,7 +67,7 @@ public class PayChannelCoreMapperTest extends BaseDbAndRedisIntegrationTest { // 创建客户端 payChannelDO.setConfig(config); // 执行æ’å…¥ - payChannelCoreMapper.insert(payChannelDO); + payChannelMapper.insert(payChannelDO); } /** @@ -75,7 +75,7 @@ public class PayChannelCoreMapperTest extends BaseDbAndRedisIntegrationTest { */ @Test public void testSelectList() { - List payChannels = payChannelCoreMapper.selectList(); + List payChannels = payChannelMapper.selectList(); System.out.println(payChannels.size()); } diff --git a/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/PayOrderCoreServiceTest.java b/yudao-module-pay/yudao-module-pay-impl/src/test-integration/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceIntegrationTest.java similarity index 55% rename from yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/PayOrderCoreServiceTest.java rename to yudao-module-pay/yudao-module-pay-impl/src/test-integration/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceIntegrationTest.java index 2a5e137412..f6f953635a 100644 --- a/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/PayOrderCoreServiceTest.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/test-integration/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceIntegrationTest.java @@ -1,11 +1,10 @@ -package cn.iocoder.yudao.coreservice.modules.pay.service.order; +package cn.iocoder.yudao.module.pay.service.order; -import cn.iocoder.yudao.coreservice.BaseDbIntegrationTest; -import cn.iocoder.yudao.coreservice.modules.pay.service.merchant.impl.PayAppCoreServiceImpl; -import cn.iocoder.yudao.coreservice.modules.pay.service.merchant.impl.PayChannelCoreServiceImpl; -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderCreateReqDTO; -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderSubmitReqDTO; -import cn.iocoder.yudao.coreservice.modules.pay.service.order.impl.PayOrderCoreServiceImpl; +import cn.iocoder.yudao.module.pay.service.merchant.PayAppServiceImpl; +import cn.iocoder.yudao.module.pay.service.merchant.PayChannelServiceImpl; +import cn.iocoder.yudao.module.pay.service.order.dto.PayOrderCreateReqDTO; +import cn.iocoder.yudao.module.pay.service.order.dto.PayOrderSubmitReqDTO; +import cn.iocoder.yudao.module.pay.test.BaseDbIntegrationTest; import cn.iocoder.yudao.framework.common.util.date.DateUtils; import cn.iocoder.yudao.framework.pay.config.YudaoPayAutoConfiguration; import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum; @@ -15,12 +14,12 @@ import org.springframework.context.annotation.Import; import javax.annotation.Resource; import java.time.Duration; -@Import({PayOrderCoreServiceImpl.class, PayAppCoreServiceImpl.class, - PayChannelCoreServiceImpl.class, YudaoPayAutoConfiguration.class}) -public class PayOrderCoreServiceTest extends BaseDbIntegrationTest { +@Import({PayOrderServiceImpl.class, PayAppServiceImpl.class, + PayChannelServiceImpl.class, YudaoPayAutoConfiguration.class}) +public class PayOrderServiceIntegrationTest extends BaseDbIntegrationTest { @Resource - private PayOrderCoreService payOrderCoreService; + private PayOrderService payOrderService; @Test public void testCreatePayOrder() { @@ -34,7 +33,7 @@ public class PayOrderCoreServiceTest extends BaseDbIntegrationTest { reqDTO.setAmount(100); reqDTO.setExpireTime(DateUtils.addTime(Duration.ofDays(1))); // å‘起请求 - payOrderCoreService.createPayOrder(reqDTO); + payOrderService.createPayOrder(reqDTO); } @Test @@ -46,7 +45,7 @@ public class PayOrderCoreServiceTest extends BaseDbIntegrationTest { reqDTO.setChannelCode(PayChannelEnum.WX_PUB.getCode()); reqDTO.setUserIp("127.0.0.1"); // å‘起请求 - payOrderCoreService.submitPayOrder(reqDTO); + payOrderService.submitPayOrder(reqDTO); } } diff --git a/yudao-module-pay/yudao-module-pay-impl/src/test-integration/java/cn/iocoder/yudao/module/pay/service/package-info.java b/yudao-module-pay/yudao-module-pay-impl/src/test-integration/java/cn/iocoder/yudao/module/pay/service/package-info.java new file mode 100644 index 0000000000..2cad91ebaa --- /dev/null +++ b/yudao-module-pay/yudao-module-pay-impl/src/test-integration/java/cn/iocoder/yudao/module/pay/service/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.pay.service; diff --git a/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/BaseDbAndRedisIntegrationTest.java b/yudao-module-pay/yudao-module-pay-impl/src/test-integration/java/cn/iocoder/yudao/module/pay/test/BaseDbAndRedisIntegrationTest.java similarity index 98% rename from yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/BaseDbAndRedisIntegrationTest.java rename to yudao-module-pay/yudao-module-pay-impl/src/test-integration/java/cn/iocoder/yudao/module/pay/test/BaseDbAndRedisIntegrationTest.java index dc15808943..2ee19ebf91 100644 --- a/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/BaseDbAndRedisIntegrationTest.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/test-integration/java/cn/iocoder/yudao/module/pay/test/BaseDbAndRedisIntegrationTest.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice; +package cn.iocoder.yudao.module.pay.test; import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration; import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration; diff --git a/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/BaseDbIntegrationTest.java b/yudao-module-pay/yudao-module-pay-impl/src/test-integration/java/cn/iocoder/yudao/module/pay/test/BaseDbIntegrationTest.java similarity index 97% rename from yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/BaseDbIntegrationTest.java rename to yudao-module-pay/yudao-module-pay-impl/src/test-integration/java/cn/iocoder/yudao/module/pay/test/BaseDbIntegrationTest.java index c0ebe98738..380efa3f40 100644 --- a/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/BaseDbIntegrationTest.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/test-integration/java/cn/iocoder/yudao/module/pay/test/BaseDbIntegrationTest.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice; +package cn.iocoder.yudao.module.pay.test; import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration; import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration; diff --git a/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/BaseRedisIntegrationTest.java b/yudao-module-pay/yudao-module-pay-impl/src/test-integration/java/cn/iocoder/yudao/module/pay/test/BaseRedisIntegrationTest.java similarity index 95% rename from yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/BaseRedisIntegrationTest.java rename to yudao-module-pay/yudao-module-pay-impl/src/test-integration/java/cn/iocoder/yudao/module/pay/test/BaseRedisIntegrationTest.java index 16b5e98f14..d01353d725 100644 --- a/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/BaseRedisIntegrationTest.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/test-integration/java/cn/iocoder/yudao/module/pay/test/BaseRedisIntegrationTest.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.coreservice; +package cn.iocoder.yudao.module.pay.test; import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; import org.redisson.spring.starter.RedissonAutoConfiguration; diff --git a/yudao-core-service/src/test-integration/resources/application-integration-test.yaml b/yudao-module-pay/yudao-module-pay-impl/src/test-integration/resources/application-integration-test.yaml similarity index 98% rename from yudao-core-service/src/test-integration/resources/application-integration-test.yaml rename to yudao-module-pay/yudao-module-pay-impl/src/test-integration/resources/application-integration-test.yaml index 9f87b5ca7c..658ebd932f 100644 --- a/yudao-core-service/src/test-integration/resources/application-integration-test.yaml +++ b/yudao-module-pay/yudao-module-pay-impl/src/test-integration/resources/application-integration-test.yaml @@ -88,6 +88,7 @@ yudao: info: version: 1.0.0 base-package: cn.iocoder.yudao.adminserver + base-package2: cn.iocoder.yudao.module core-service: base-package: cn.iocoder.yudao.coreservice pay: diff --git a/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/merchant/PayAppServiceTest.java b/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/merchant/PayAppServiceTest.java index 0939ade8b1..a0da136bc1 100644 --- a/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/merchant/PayAppServiceTest.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/merchant/PayAppServiceTest.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.pay.service.merchant; import cn.hutool.core.util.RandomUtil; +import cn.iocoder.yudao.framework.pay.core.client.PayClientFactory; import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppCreateReqVO; import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppExportReqVO; import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppPageReqVO; @@ -30,11 +31,6 @@ import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.*; import static org.junit.jupiter.api.Assertions.*; -/** - * {@link PayAppServiceImpl} çš„å•元测试类 - * - * @author 芋艿 - */ @Import(PayAppServiceImpl.class) public class PayAppServiceTest extends BaseDbUnitTest { diff --git a/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/merchant/PayChannelServiceTest.java b/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/merchant/PayChannelServiceTest.java index 6397bb4139..f6335d0913 100644 --- a/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/merchant/PayChannelServiceTest.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/merchant/PayChannelServiceTest.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.pay.service.merchant; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.pay.core.client.PayClientFactory; import cn.iocoder.yudao.framework.pay.core.client.impl.alipay.AlipayPayClientConfig; import cn.iocoder.yudao.framework.pay.core.client.impl.wx.WXPayClientConfig; import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum; @@ -14,9 +15,11 @@ import cn.iocoder.yudao.module.pay.dal.mysql.merchant.PayChannelMapper; import cn.iocoder.yudao.module.pay.test.BaseDbUnitTest; import com.alibaba.fastjson.JSON; import org.junit.jupiter.api.Test; +import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Import; import javax.annotation.Resource; +import javax.validation.Validator; import java.util.List; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; @@ -37,6 +40,11 @@ public class PayChannelServiceTest extends BaseDbUnitTest { @Resource private PayChannelMapper channelMapper; + @MockBean + private PayClientFactory payClientFactory; + @MockBean + private Validator validator; + @Test public void testCreateWechatVersion2Channel_success() { // 准备傿•° diff --git a/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceTest.java b/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceTest.java index e3ac7394ce..cacee1681d 100755 --- a/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceTest.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceTest.java @@ -4,6 +4,8 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.RandomUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.date.DateUtils; +import cn.iocoder.yudao.framework.pay.config.PayProperties; +import cn.iocoder.yudao.framework.pay.core.client.PayClientFactory; import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum; import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderExportReqVO; import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderPageReqVO; @@ -12,8 +14,12 @@ import cn.iocoder.yudao.module.pay.dal.mysql.order.PayOrderMapper; import cn.iocoder.yudao.module.pay.enums.order.PayOrderNotifyStatusEnum; import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum; import cn.iocoder.yudao.module.pay.enums.refund.PayRefundTypeEnum; +import cn.iocoder.yudao.module.pay.service.merchant.PayAppService; +import cn.iocoder.yudao.module.pay.service.merchant.PayChannelService; +import cn.iocoder.yudao.module.pay.service.notify.PayNotifyService; import cn.iocoder.yudao.module.pay.test.BaseDbUnitTest; import org.junit.jupiter.api.Test; +import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Import; import javax.annotation.Resource; @@ -30,7 +36,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; * * @author 芋艿 */ -@Import(PayOrderServiceImpl.class) +@Import({PayOrderServiceImpl.class}) public class PayOrderServiceTest extends BaseDbUnitTest { @Resource @@ -39,6 +45,17 @@ public class PayOrderServiceTest extends BaseDbUnitTest { @Resource private PayOrderMapper orderMapper; + @MockBean + private PayClientFactory payClientFactory; + @MockBean + private PayProperties properties; + @MockBean + private PayAppService appService; + @MockBean + private PayChannelService channelService; + @MockBean + private PayNotifyService notifyService; + public String generateNo() { return DateUtil.format(new Date(), "yyyyMMddHHmmss") + RandomUtil.randomInt(100000, 999999); } diff --git a/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/refund/PayRefundServiceTest.java b/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/refund/PayRefundServiceTest.java index 1d91732177..844c0ca009 100755 --- a/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/refund/PayRefundServiceTest.java +++ b/yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/refund/PayRefundServiceTest.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.pay.service.refund; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.date.DateUtils; +import cn.iocoder.yudao.framework.pay.core.client.PayClientFactory; import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum; import cn.iocoder.yudao.module.pay.controller.admin.refund.vo.PayRefundExportReqVO; import cn.iocoder.yudao.module.pay.controller.admin.refund.vo.PayRefundPageReqVO; @@ -10,8 +11,14 @@ import cn.iocoder.yudao.module.pay.dal.mysql.refund.PayRefundMapper; import cn.iocoder.yudao.module.pay.enums.order.PayOrderNotifyStatusEnum; import cn.iocoder.yudao.module.pay.enums.refund.PayRefundStatusEnum; import cn.iocoder.yudao.module.pay.enums.refund.PayRefundTypeEnum; +import cn.iocoder.yudao.module.pay.service.merchant.PayAppService; +import cn.iocoder.yudao.module.pay.service.merchant.PayChannelService; +import cn.iocoder.yudao.module.pay.service.notify.PayNotifyService; +import cn.iocoder.yudao.module.pay.service.order.PayOrderExtensionService; +import cn.iocoder.yudao.module.pay.service.order.PayOrderService; import cn.iocoder.yudao.module.pay.test.BaseDbUnitTest; import org.junit.jupiter.api.Test; +import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Import; import javax.annotation.Resource; @@ -22,12 +29,6 @@ import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEq import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; import static org.junit.jupiter.api.Assertions.assertEquals; - -/** - * {@link PayRefundServiceImpl} çš„å•元测试类 - * - * @author aquan - */ @Import(PayRefundServiceImpl.class) public class PayRefundServiceTest extends BaseDbUnitTest { @@ -37,6 +38,18 @@ public class PayRefundServiceTest extends BaseDbUnitTest { @Resource private PayRefundMapper refundMapper; + @MockBean + private PayClientFactory payClientFactory; + @MockBean + private PayOrderService orderService; + @MockBean + private PayOrderExtensionService orderExtensionService; + @MockBean + private PayAppService appService; + @MockBean + private PayChannelService channelService; + @MockBean + private PayNotifyService notifyService; @Test public void testGetRefundPage() { diff --git a/yudao-module-pay/yudao-module-pay-impl/src/test/resources/application-unit-test.yaml b/yudao-module-pay/yudao-module-pay-impl/src/test/resources/application-unit-test.yaml new file mode 100644 index 0000000000..6f83b473aa --- /dev/null +++ b/yudao-module-pay/yudao-module-pay-impl/src/test/resources/application-unit-test.yaml @@ -0,0 +1,54 @@ +spring: + main: + lazy-initialization: true # 开坿‡’加载,加快速度 + banner-mode: off # å•元测试,ç¦ç”¨ Banner + +--- #################### æ•°æ®åº“相关é…ç½® #################### + +spring: + # æ•°æ®æºé…置项 + datasource: + name: ruoyi-vue-pro + url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false; # MODE 使用 MySQL 模å¼ï¼›DATABASE_TO_UPPER é…置表和字段使用å°å†™ + driver-class-name: org.h2.Driver + username: sa + password: + schema: classpath:sql/create_tables.sql # MySQL 转 H2 的语å¥ï¼Œä½¿ç”¨ https://www.jooq.org/translate/ 工具 + druid: + async-init: true # å•元测试,异步åˆå§‹åŒ– Druid 连接池,æå‡å¯åŠ¨é€Ÿåº¦ + initial-size: 1 # å•元测试,é…置为 1,æå‡å¯åŠ¨é€Ÿåº¦ + + # Redis é…置。Redisson 默认的é…置足够使用,一般ä¸éœ€è¦è¿›è¡Œè°ƒä¼˜ + redis: + host: 127.0.0.1 # åœ°å€ + port: 16379 # 端å£ï¼ˆå•元测试,使用 16379 端å£ï¼‰ + database: 0 # æ•°æ®åº“索引 + +mybatis: + lazy-initialization: true # å•元测试,设置 MyBatis Mapper 延迟加载,加速æ¯ä¸ªå•元测试 + +--- #################### 定时任务相关é…ç½® #################### + +--- #################### é…置中心相关é…ç½® #################### + +--- #################### æœåŠ¡ä¿éšœç›¸å…³é…ç½® #################### + +# Lock4j é…置项(å•元测试,ç¦ç”¨ Lock4j) + +# Resilience4j é…置项 + +--- #################### 监控相关é…ç½® #################### + +--- #################### 芋é“相关é…ç½® #################### + +# 芋é“é…置项,设置当å‰é¡¹ç›®æ‰€æœ‰è‡ªå®šä¹‰çš„é…ç½® +yudao: + info: + base-package: cn.iocoder.yudao.module.member.dal.mysql + base-package2: cn.iocoder.yudao.module + core-service: + base-package: cn.iocoder.yudao.module.member.dal.mysql # TODO èŠ‹è‰¿ï¼šè¦æ¸…ç†æŽ‰ + captcha: + timeout: 5m + width: 160 + height: 60 diff --git a/yudao-module-pay/yudao-module-pay-impl/src/test/resources/logback-spring.xml b/yudao-module-pay/yudao-module-pay-impl/src/test/resources/logback-spring.xml new file mode 100644 index 0000000000..daf756bff0 --- /dev/null +++ b/yudao-module-pay/yudao-module-pay-impl/src/test/resources/logback-spring.xml @@ -0,0 +1,4 @@ + + + + diff --git a/yudao-module-pay/yudao-module-pay-impl/src/test/resources/sql/clean.sql b/yudao-module-pay/yudao-module-pay-impl/src/test/resources/sql/clean.sql new file mode 100644 index 0000000000..7430b6bfe3 --- /dev/null +++ b/yudao-module-pay/yudao-module-pay-impl/src/test/resources/sql/clean.sql @@ -0,0 +1,5 @@ +DELETE FROM pay_merchant; +DELETE FROM pay_app; +DELETE FROM pay_channel; +DELETE FROM pay_order; +DELETE FROM pay_refund; diff --git a/yudao-module-pay/yudao-module-pay-impl/src/test/resources/sql/create_tables.sql b/yudao-module-pay/yudao-module-pay-impl/src/test/resources/sql/create_tables.sql new file mode 100644 index 0000000000..e4a141e9f6 --- /dev/null +++ b/yudao-module-pay/yudao-module-pay-impl/src/test/resources/sql/create_tables.sql @@ -0,0 +1,115 @@ +CREATE TABLE IF NOT EXISTS "pay_merchant" +( + "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "no" varchar(32) NOT NULL, + "name" varchar(64) NOT NULL, + "short_name" varchar(64) NOT NULL, + "status" tinyint NOT NULL, + "remark" varchar(255) DEFAULT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + "deleted" bit(1) NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '支付商户信æ¯'; + +CREATE TABLE IF NOT EXISTS "pay_app" ( + "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "name" varchar(64) NOT NULL, + "status" tinyint NOT NULL, + "remark" varchar(255) DEFAULT NULL, + `pay_notify_url` varchar(1024) NOT NULL, + `refund_notify_url` varchar(1024) NOT NULL, + `merchant_id` bigint(20) NOT NULL, + "creator" varchar(64) DEFAULT '', + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + "deleted" bit(1) NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT = '支付应用信æ¯'; + +CREATE TABLE IF NOT EXISTS "pay_channel" ( + "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "code" varchar(32) NOT NULL, + "status" tinyint(4) NOT NULL, + "remark" varchar(255) DEFAULT NULL, + "fee_rate" double NOT NULL DEFAULT 0, + "merchant_id" bigint(20) NOT NULL, + "app_id" bigint(20) NOT NULL, + "config" varchar(10240) NOT NULL, + "creator" varchar(64) NULL DEFAULT '', + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) NULL DEFAULT '', + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + "deleted" bit(1) NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT = '支付渠é“'; + +CREATE TABLE IF NOT EXISTS `pay_order` ( + "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, + `merchant_id` bigint(20) NOT NULL, + `app_id` bigint(20) NOT NULL, + `channel_id` bigint(20) DEFAULT NULL, + `channel_code` varchar(32) DEFAULT NULL, + `merchant_order_id` varchar(64) NOT NULL, + `subject` varchar(32) NOT NULL, + `body` varchar(128) NOT NULL, + `notify_url` varchar(1024) NOT NULL, + `notify_status` tinyint(4) NOT NULL, + `amount` bigint(20) NOT NULL, + `channel_fee_rate` double DEFAULT 0, + `channel_fee_amount` bigint(20) DEFAULT 0, + `status` tinyint(4) NOT NULL, + `user_ip` varchar(50) NOT NULL, + `expire_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP, + `success_time` datetime(0) DEFAULT CURRENT_TIMESTAMP, + `notify_time` datetime(0) DEFAULT CURRENT_TIMESTAMP, + `success_extension_id` bigint(20) DEFAULT NULL COMMENT '支付æˆåŠŸçš„è®¢å•æ‹“展å•ç¼–å·', + `refund_status` tinyint(4) NOT NULL, + `refund_times` tinyint(4) NOT NULL, + `refund_amount` bigint(20) NOT NULL, + `channel_user_id` varchar(255) DEFAULT NULL, + `channel_order_no` varchar(64) DEFAULT NULL, + `creator` varchar(64) DEFAULT '', + `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updater` varchar(64) DEFAULT '', + `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `deleted` bit(1) NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT = '支付订å•'; + +CREATE TABLE IF NOT EXISTS `pay_refund` ( + "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, + `merchant_id` bigint(20) NOT NULL, + `app_id` bigint(20) NOT NULL, + `channel_id` bigint(20) NOT NULL, + `channel_code` varchar(32) NOT NULL, + `order_id` bigint(20) NOT NULL, + `trade_no` varchar(64) NOT NULL, + `merchant_order_id` varchar(64) NOT NULL, + `merchant_refund_no` varchar(64) NOT NULL, + `notify_url` varchar(1024) NOT NULL, + `notify_status` tinyint(4) NOT NULL, + `status` tinyint(4) NOT NULL, + `type` tinyint(4) NOT NULL, + `pay_amount` bigint(20) NOT NULL, + `refund_amount` bigint(20) NOT NULL, + `reason` varchar(256) NOT NULL, + `user_ip` varchar(50) NULL DEFAULT NULL, + `channel_order_no` varchar(64) NOT NULL, + `channel_refund_no` varchar(64) NULL DEFAULT NULL, + `channel_error_code` varchar(128) NULL DEFAULT NULL, + `channel_error_msg` varchar(256) NULL DEFAULT NULL, + `channel_extras` varchar(1024) NULL DEFAULT NULL, + `expire_time` datetime(0) NULL DEFAULT NULL, + `success_time` datetime(0) NULL DEFAULT NULL, + `notify_time` datetime(0) NULL DEFAULT NULL, + `creator` varchar(64) NULL DEFAULT '', + `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updater` varchar(64) NULL DEFAULT '', + `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `deleted` bit(1) NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT = '退款订å•'; From 510917c5ed0b2fad885802a468730d637140737a Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 31 Jan 2022 22:55:48 +0800 Subject: [PATCH 25/47] =?UTF-8?q?=E5=A4=9A=E6=A8=A1=E5=9D=97=E9=87=8D?= =?UTF-8?q?=E6=9E=84=208=EF=BC=9Abom=20=E6=A8=A1=E5=9D=97=E7=9A=84?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 4 +-- yudao-admin-server/pom.xml | 27 +++++------------- yudao-dependencies/pom.xml | 20 ------------- yudao-module-bpm/pom.xml | 28 ++++++++++++++----- .../pom.xml | 16 ++++++----- .../bpm/api/form/BpmFormServiceApi.java | 0 .../modules/bpm/api/form/dto/BpmFormDTO.java | 0 .../bpm/api/group/BpmUserGroupServiceApi.java | 0 .../bpm/api/group/dto/BpmUserGroupDTO.java | 0 .../pom.xml | 27 +++++++++++++----- .../bpm/api/BpmFormServiceApiImpl.java | 0 .../bpm/api/BpmUserGroupServiceApiImpl.java | 0 .../definition/BpmFormController.java | 0 .../definition/BpmUserGroupController.java | 0 .../definition/vo/form/BpmFormBaseVO.java | 1 + .../vo/form/BpmFormCreateReqVO.java | 0 .../definition/vo/form/BpmFormPageReqVO.java | 0 .../definition/vo/form/BpmFormRespVO.java | 0 .../vo/form/BpmFormSimpleRespVO.java | 0 .../vo/form/BpmFormUpdateReqVO.java | 0 .../vo/group/BpmUserGroupBaseVO.java | 0 .../vo/group/BpmUserGroupCreateReqVO.java | 0 .../vo/group/BpmUserGroupPageReqVO.java | 0 .../vo/group/BpmUserGroupRespVO.java | 0 .../vo/group/BpmUserGroupSimpleRespVO.java | 0 .../vo/group/BpmUserGroupUpdateReqVO.java | 0 .../convert/definition/BpmFormConvert.java | 0 .../definition/BpmUserGroupConvert.java | 0 .../dal/dataobject/definition/BpmFormDO.java | 0 .../dataobject/definition/BpmUserGroupDO.java | 0 .../dal/mysql/definition/BpmFormMapper.java | 0 .../mysql/definition/BpmUserGroupMapper.java | 0 .../bpm/enums/BpmErrorCodeConstants.java | 0 .../service/definition/BpmFormService.java | 0 .../definition/BpmUserGroupService.java | 0 .../definition/dto/BpmFormFieldRespDTO.java | 0 .../definition/impl/BpmFormServiceImpl.java | 0 .../impl/BpmUserGroupServiceImpl.java | 0 .../yudao/adminserver/BaseDbUnitTest.java | 0 .../definition/BpmFormServiceTest.java | 0 .../definition/BpmUserGroupServiceTest.java | 0 .../test/resources/application-unit-test.yaml | 0 .../src/test/resources/application.yaml | 0 .../src/test/resources/logback-spring.xml | 0 .../src/test/resources/sql/clean.sql | 0 .../src/test/resources/sql/create_tables.sql | 0 .../yudao-module-bpm-core-service/pom.xml | 19 ------------- .../pom.xml | 27 ++++++++++-------- .../definition/BpmModelController.java | 0 .../BpmProcessDefinitionController.http | 0 .../BpmProcessDefinitionController.java | 0 .../BpmTaskAssignRuleController.http | 0 .../BpmTaskAssignRuleController.java | 0 .../vo/model/BpmModeImportReqVO.java | 0 .../definition/vo/model/BpmModelBaseVO.java | 0 .../vo/model/BpmModelCreateReqVO.java | 0 .../vo/model/BpmModelPageItemRespVO.java | 0 .../definition/vo/model/BpmModelRespVO.java | 0 .../vo/model/BpmModelUpdateReqVO.java | 0 .../vo/model/BpmModelUpdateStateReqVO.java | 0 .../definition/vo/model/ModelPageReqVO.java | 0 .../BpmProcessDefinitionListReqVO.java | 0 .../BpmProcessDefinitionPageItemRespVO.java | 0 .../BpmProcessDefinitionPageReqVO.java | 0 .../process/BpmProcessDefinitionRespVO.java | 0 .../vo/rule/BpmTaskAssignRuleBaseVO.java | 0 .../vo/rule/BpmTaskAssignRuleCreateReqVO.java | 0 .../vo/rule/BpmTaskAssignRuleRespVO.java | 0 .../vo/rule/BpmTaskAssignRuleUpdateReqVO.java | 0 .../controller/oa/BpmOALeaveController.http | 0 .../controller/oa/BpmOALeaveController.java | 0 .../controller/oa/vo/BpmOALeaveBaseVO.java | 0 .../oa/vo/BpmOALeaveCreateReqVO.java | 0 .../controller/oa/vo/BpmOALeavePageReqVO.java | 0 .../controller/oa/vo/BpmOALeaveRespVO.java | 0 .../task/BpmActivityController.java | 0 .../task/BpmProcessInstanceController.http | 0 .../task/BpmProcessInstanceController.java | 0 .../controller/task/BpmTaskController.http | 0 .../controller/task/BpmTaskController.java | 0 .../task/vo/activity/BpmActivityRespVO.java | 0 .../BpmProcessInstanceCancelReqVO.java | 0 .../BpmProcessInstanceCreateReqVO.java | 0 .../BpmProcessInstanceMyPageReqVO.java | 0 .../BpmProcessInstancePageItemRespVO.java | 0 .../vo/instance/BpmProcessInstanceRespVO.java | 0 .../task/vo/task/BpmTaskApproveReqVO.java | 0 .../vo/task/BpmTaskDonePageItemRespVO.java | 0 .../task/vo/task/BpmTaskDonePageReqVO.java | 0 .../task/vo/task/BpmTaskRejectReqVO.java | 0 .../task/vo/task/BpmTaskRespVO.java | 0 .../vo/task/BpmTaskTodoPageItemRespVO.java | 0 .../task/vo/task/BpmTaskTodoPageReqVO.java | 0 .../vo/task/BpmTaskUpdateAssigneeReqVO.java | 0 .../convert/definition/BpmModelConvert.java | 0 .../BpmProcessDefinitionConvert.java | 0 .../definition/BpmTaskAssignRuleConvert.java | 0 .../convert/message/BpmMessageConvert.java | 0 .../bpm/convert/oa/BpmOALeaveConvert.java | 0 .../modules/bpm/convert/package-info.java | 0 .../bpm/convert/task/BpmActivityConvert.java | 0 .../task/BpmProcessInstanceConvert.java | 0 .../bpm/convert/task/BpmTaskConvert.java | 0 ...‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md | 0 .../definition/BpmProcessDefinitionExtDO.java | 0 .../definition/BpmTaskAssignRuleDO.java | 0 .../definition/BpmTaskMessageRuleDO.java | 0 .../dal/dataobject/leave/BpmOALeaveDO.java | 0 .../task/BpmProcessInstanceExtDO.java | 0 .../bpm/dal/dataobject/task/BpmTaskExtDO.java | 0 .../BpmProcessDefinitionExtMapper.java | 0 .../definition/BpmTaskAssignRuleMapper.java | 0 .../bpm/dal/mysql/oa/BpmOALeaveMapper.java | 0 .../task/BpmProcessInstanceExtMapper.java | 0 .../bpm/dal/mysql/task/BpmTaskExtMapper.java | 0 .../bpm/enums/BpmErrorCodeConstants.java | 0 .../definition/BpmModelFormTypeEnum.java | 0 .../definition/BpmTaskAssignRuleTypeEnum.java | 0 .../definition/BpmTaskRuleScriptEnum.java | 0 .../bpm/enums/message/BpmMessageEnum.java | 0 .../BpmProcessInstanceDeleteReasonEnum.java | 0 .../task/BpmProcessInstanceResultEnum.java | 0 .../task/BpmProcessInstanceStatusEnum.java | 0 .../config/BpmActivitiConfiguration.java | 0 .../behavior/BpmActivityBehaviorFactory.java | 0 .../behavior/BpmUserTaskActivitiBehavior.java | 0 .../activiti/core/behavior/package-info.java | 0 .../behavior/script/BpmTaskAssignScript.java | 0 .../BpmTaskAssignLeaderAbstractScript.java | 0 .../impl/BpmTaskAssignLeaderX1Script.java | 0 .../impl/BpmTaskAssignLeaderX2Script.java | 0 .../impl/BpmTaskAssignStartUserScript.java | 0 .../event/BpmProcessInstanceResultEvent.java | 0 ...BpmProcessInstanceResultEventListener.java | 0 ...pmProcessInstanceResultEventPublisher.java | 0 .../activiti/core/event/package-info.java | 0 .../core/identity/EmptyUserGroupManager.java | 0 .../BpmProcessInstanceEventListener.java | 0 .../BpmTackActivitiEventListener.java | 0 .../core/listener/BpmTaskEventListener.java | 0 .../activiti/core/listener/package-info.java | 0 .../modules/bpm/framework/package-info.java | 0 .../adminserver/modules/bpm/package-info.java | 0 .../service/definition/BpmModelService.java | 0 .../BpmProcessDefinitionService.java | 0 .../definition/BpmTaskAssignRuleService.java | 0 .../dto/BpmModelMetaInfoRespDTO.java | 0 .../dto/BpmProcessDefinitionCreateReqDTO.java | 0 .../definition/impl/BpmModelServiceImpl.java | 0 .../impl/BpmProcessDefinitionServiceImpl.java | 0 .../impl/BpmTaskAssignRuleServiceImpl.java | 0 .../service/message/BpmMessageService.java | 0 ...eSendWhenProcessInstanceApproveReqDTO.java | 0 ...geSendWhenProcessInstanceRejectReqDTO.java | 0 .../BpmMessageSendWhenTaskCreatedReqDTO.java | 0 .../message/impl/BpmMessageServiceImpl.java | 0 .../bpm/service/oa/BpmOALeaveService.java | 0 .../oa/impl/BpmOALeaveServiceImpl.java | 0 .../oa/listener/BpmOALeaveResultListener.java | 0 .../bpm/service/task/BpmActivityService.java | 0 .../task/BpmProcessInstanceService.java | 0 .../bpm/service/task/BpmTaskService.java | 0 .../dto/BpmProcessInstanceCreateReqDTO.java | 0 .../task/impl/BpmActivityServiceImpl.java | 0 .../impl/BpmProcessInstanceServiceImpl.java | 0 .../service/task/impl/BpmTaskServiceImpl.java | 0 .../bpm/service/task/package-info.java | 0 .../yudao/adminserver/BaseDbUnitTest.java | 0 .../BpmUserTaskActivitiBehaviorTest.java | 0 .../impl/BpmTaskAssignLeaderX2ScriptTest.java | 0 .../modules/bpm/service/package-info.java | 0 .../test/resources/application-unit-test.yaml | 0 .../src/test/resources/application.yaml | 0 .../src/test/resources/logback-spring.xml | 0 .../src/test/resources/sql/clean.sql | 0 .../src/test/resources/sql/create_tables.sql | 0 .../pom.xml | 13 +++++++-- yudao-module-infra/pom.xml | 10 +++---- .../yudao-module-infra-impl/pom.xml | 2 +- 179 files changed, 91 insertions(+), 103 deletions(-) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-api => yudao-module-bpm-api}/pom.xml (68%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-api => yudao-module-bpm-api}/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/form/BpmFormServiceApi.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-api => yudao-module-bpm-api}/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/form/dto/BpmFormDTO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-api => yudao-module-bpm-api}/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/BpmUserGroupServiceApi.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-api => yudao-module-bpm-api}/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/dto/BpmUserGroupDTO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/pom.xml (70%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmFormServiceApiImpl.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmUserGroupServiceApiImpl.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmFormController.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmUserGroupController.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormBaseVO.java (95%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormCreateReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormPageReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormRespVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormSimpleRespVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormUpdateReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupBaseVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupCreateReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupPageReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupRespVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupSimpleRespVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupUpdateReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmFormConvert.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmUserGroupConvert.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmFormDO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmUserGroupDO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmFormMapper.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmUserGroupMapper.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormService.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupService.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmFormFieldRespDTO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmFormServiceImpl.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmUserGroupServiceImpl.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-base}/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormServiceTest.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupServiceTest.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-base}/src/test/resources/application-unit-test.yaml (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-base}/src/test/resources/application.yaml (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-base}/src/test/resources/logback-spring.xml (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/test/resources/sql/clean.sql (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-base}/src/test/resources/sql/create_tables.sql (100%) delete mode 100644 yudao-module-bpm/yudao-module-bpm-core-service/pom.xml rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/pom.xml (74%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmModelController.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.http (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.http (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModeImportReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelBaseVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelCreateReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelPageItemRespVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelRespVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelUpdateReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelUpdateStateReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/ModelPageReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionListReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionPageItemRespVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionPageReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionRespVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleBaseVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleCreateReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleRespVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleUpdateReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.http (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveBaseVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveCreateReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeavePageReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveRespVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmActivityController.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.http (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.http (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/activity/BpmActivityRespVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceCancelReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceCreateReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceMyPageReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstancePageItemRespVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceRespVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskApproveReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskDonePageItemRespVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskDonePageReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskRejectReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskRespVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskTodoPageItemRespVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskTodoPageReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskUpdateAssigneeReqVO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmModelConvert.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmProcessDefinitionConvert.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmTaskAssignRuleConvert.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/message/BpmMessageConvert.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/oa/BpmOALeaveConvert.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/package-info.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmActivityConvert.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmTaskConvert.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmProcessDefinitionExtDO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskAssignRuleDO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskMessageRuleDO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/leave/BpmOALeaveDO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmProcessInstanceExtDO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmTaskExtDO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmProcessDefinitionExtMapper.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmTaskAssignRuleMapper.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/oa/BpmOALeaveMapper.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmTaskExtMapper.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmModelFormTypeEnum.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmTaskAssignRuleTypeEnum.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmTaskRuleScriptEnum.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/message/BpmMessageEnum.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceDeleteReasonEnum.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceResultEnum.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceStatusEnum.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/package-info.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/BpmTaskAssignScript.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderAbstractScript.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX1Script.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2Script.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignStartUserScript.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEvent.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEventListener.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEventPublisher.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/package-info.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/identity/EmptyUserGroupManager.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTackActivitiEventListener.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTaskEventListener.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/package-info.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/package-info.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/package-info.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmModelService.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmProcessDefinitionService.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmTaskAssignRuleService.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmModelMetaInfoRespDTO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmProcessDefinitionCreateReqDTO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmModelServiceImpl.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmProcessDefinitionServiceImpl.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/BpmMessageService.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceApproveReqDTO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceRejectReqDTO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenTaskCreatedReqDTO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/impl/BpmMessageServiceImpl.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveService.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/impl/BpmOALeaveServiceImpl.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/listener/BpmOALeaveResultListener.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmActivityService.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskService.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/dto/BpmProcessInstanceCreateReqDTO.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmActivityServiceImpl.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/package-info.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-impl-activiti}/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2ScriptTest.java (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/package-info.java (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-impl-activiti}/src/test/resources/application-unit-test.yaml (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-impl-activiti}/src/test/resources/application.yaml (100%) rename yudao-module-bpm/{yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl => yudao-module-bpm-impl-activiti}/src/test/resources/logback-spring.xml (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/test/resources/sql/clean.sql (100%) rename yudao-module-bpm/{yudao-module-bpm-activiti => yudao-module-bpm-impl-activiti}/src/test/resources/sql/create_tables.sql (100%) rename yudao-module-bpm/{yudao-module-bpm-flowable => yudao-module-bpm-impl-flowable}/pom.xml (77%) diff --git a/pom.xml b/pom.xml index dac70439b1..7d3924183c 100644 --- a/pom.xml +++ b/pom.xml @@ -12,10 +12,10 @@ yudao-framework yudao-admin-server - yudao-user-server + yudao-module-member - + yudao-module-bpm yudao-module-system yudao-module-infra yudao-module-tool diff --git a/yudao-admin-server/pom.xml b/yudao-admin-server/pom.xml index 4eaef38c2a..eb52218684 100644 --- a/yudao-admin-server/pom.xml +++ b/yudao-admin-server/pom.xml @@ -43,39 +43,26 @@ ${revision} - + cn.iocoder.boot - yudao-core-service + yudao-module-bpm-activiti + ${revision} - - cn.iocoder.boot - yudao-spring-boot-starter-biz-operatelog - + + cn.iocoder.boot yudao-spring-boot-starter-biz-dict - - cn.iocoder.boot - yudao-spring-boot-starter-biz-sms - + cn.iocoder.boot yudao-spring-boot-starter-biz-tenant - - - - - - - - - - + diff --git a/yudao-dependencies/pom.xml b/yudao-dependencies/pom.xml index e241cb87a7..6d5348553a 100644 --- a/yudao-dependencies/pom.xml +++ b/yudao-dependencies/pom.xml @@ -408,26 +408,6 @@ flowable-spring-boot-starter-actuator ${flowable.version} - - cn.iocoder.boot - yudao-module-bpm-core-service-impl - ${revision} - - - cn.iocoder.boot - yudao-module-bpm-core-service-api - ${revision} - - - cn.iocoder.boot - yudao-module-bpm-activiti - ${revision} - - - cn.iocoder.boot - yudao-module-bpm-flowable - ${revision} - diff --git a/yudao-module-bpm/pom.xml b/yudao-module-bpm/pom.xml index 4924978759..4dee14b6f7 100644 --- a/yudao-module-bpm/pom.xml +++ b/yudao-module-bpm/pom.xml @@ -7,12 +7,26 @@ cn.iocoder.boot ${revision} - pom - - yudao-module-bpm-flowable - yudao-module-bpm-activiti - yudao-module-bpm-core-service - 4.0.0 + + yudao-module-bpm-api + yudao-module-bpm-base + yudao-module-bpm-impl-flowable + yudao-module-bpm-impl-activiti + yudao-module-bpm - \ No newline at end of file + pom + + ${artifactId} + + bpm 包下,业务æµç¨‹ç®¡ç†ï¼ˆBusiness Process Management),我们放工作æµçš„功能。 + 例如说:æµç¨‹å®šä¹‰ã€è¡¨å•é…ç½®ã€å®¡æ ¸ä¸­å¿ƒï¼ˆæˆ‘çš„ç”³è¯·ã€æˆ‘çš„å¾…åŠžã€æˆ‘的已办)等等 + bpm 解释:https://baike.baidu.com/item/BPM/1933 + + ç›®å‰æä¾›ä¸¤å¥—å®žçŽ°æ–¹æ¡ˆï¼š + 1. 基于 Activiti 7 实现的 yudao-module-bpm-impl-activiti + 2. 基于 Flowable 6 实现的 yudao-module-bpm-impl-flowable + 两套实现会存在共享的逻辑,所以会继承 yudao-module-impl-base + + + diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/pom.xml b/yudao-module-bpm/yudao-module-bpm-api/pom.xml similarity index 68% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/pom.xml rename to yudao-module-bpm/yudao-module-bpm-api/pom.xml index c488c22966..60ebd556c3 100644 --- a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/pom.xml +++ b/yudao-module-bpm/yudao-module-bpm-api/pom.xml @@ -3,22 +3,24 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - yudao-module-bpm-core-service cn.iocoder.boot + yudao-module-bpm ${revision} 4.0.0 + yudao-module-bpm-api + jar - yudao-module-bpm-core-service-api + ${artifactId} + + bpm æ¨¡å— API,暴露给其它模å—调用 + - - org.projectlombok - lombok - cn.iocoder.boot yudao-common - \ No newline at end of file + + diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/form/BpmFormServiceApi.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/form/BpmFormServiceApi.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/form/BpmFormServiceApi.java rename to yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/form/BpmFormServiceApi.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/form/dto/BpmFormDTO.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/form/dto/BpmFormDTO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/form/dto/BpmFormDTO.java rename to yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/form/dto/BpmFormDTO.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/BpmUserGroupServiceApi.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/BpmUserGroupServiceApi.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/BpmUserGroupServiceApi.java rename to yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/BpmUserGroupServiceApi.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/dto/BpmUserGroupDTO.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/dto/BpmUserGroupDTO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/dto/BpmUserGroupDTO.java rename to yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/dto/BpmUserGroupDTO.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/pom.xml b/yudao-module-bpm/yudao-module-bpm-base/pom.xml similarity index 70% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/pom.xml rename to yudao-module-bpm/yudao-module-bpm-base/pom.xml index 1712458f63..5b839de9e0 100644 --- a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/pom.xml +++ b/yudao-module-bpm/yudao-module-bpm-base/pom.xml @@ -3,33 +3,46 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - yudao-module-bpm-core-service cn.iocoder.boot + yudao-module-bpm ${revision} 4.0.0 + yudao-module-bpm-base + + ${artifactId} + + bpm-base 模å—,实现公用的工作æµçš„逻辑,æä¾›ç»™ bpm-activiti å’Œ bpm-flowable å¤ç”¨ + - yudao-module-bpm-core-service-impl + + cn.iocoder.boot + yudao-module-bpm-api + ${revision} + + + cn.iocoder.boot yudao-spring-boot-starter-web + cn.iocoder.boot yudao-spring-boot-starter-security + + cn.iocoder.boot yudao-spring-boot-starter-mybatis - - cn.iocoder.boot - yudao-module-bpm-core-service-api - + + cn.iocoder.boot yudao-spring-boot-starter-test - \ No newline at end of file + diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmFormServiceApiImpl.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmFormServiceApiImpl.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmFormServiceApiImpl.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmFormServiceApiImpl.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmUserGroupServiceApiImpl.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmUserGroupServiceApiImpl.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmUserGroupServiceApiImpl.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmUserGroupServiceApiImpl.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmFormController.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmFormController.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmFormController.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmFormController.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmUserGroupController.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmUserGroupController.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmUserGroupController.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmUserGroupController.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormBaseVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormBaseVO.java similarity index 95% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormBaseVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormBaseVO.java index f57c80c94e..799817ad8c 100644 --- a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormBaseVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormBaseVO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form; +import com.sun.istack.internal.NotNull; import lombok.*; import io.swagger.annotations.*; import javax.validation.constraints.*; diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormCreateReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormCreateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormCreateReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormPageReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormPageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormPageReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormRespVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormRespVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormSimpleRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormSimpleRespVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormSimpleRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormSimpleRespVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormUpdateReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormUpdateReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormUpdateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormUpdateReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupBaseVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupBaseVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupBaseVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupBaseVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupCreateReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupCreateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupCreateReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupPageReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupPageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupPageReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupRespVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupRespVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupSimpleRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupSimpleRespVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupSimpleRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupSimpleRespVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupUpdateReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupUpdateReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupUpdateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupUpdateReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmFormConvert.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmFormConvert.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmFormConvert.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmFormConvert.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmUserGroupConvert.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmUserGroupConvert.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmUserGroupConvert.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmUserGroupConvert.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmFormDO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmFormDO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmFormDO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmFormDO.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmUserGroupDO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmUserGroupDO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmUserGroupDO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmUserGroupDO.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmFormMapper.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmFormMapper.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmFormMapper.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmFormMapper.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmUserGroupMapper.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmUserGroupMapper.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmUserGroupMapper.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmUserGroupMapper.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormService.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormService.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormService.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormService.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupService.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupService.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupService.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupService.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmFormFieldRespDTO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmFormFieldRespDTO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmFormFieldRespDTO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmFormFieldRespDTO.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmFormServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmFormServiceImpl.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmFormServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmFormServiceImpl.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmUserGroupServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmUserGroupServiceImpl.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmUserGroupServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmUserGroupServiceImpl.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java b/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java rename to yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormServiceTest.java b/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormServiceTest.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormServiceTest.java rename to yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormServiceTest.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupServiceTest.java b/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupServiceTest.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupServiceTest.java rename to yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupServiceTest.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/application-unit-test.yaml b/yudao-module-bpm/yudao-module-bpm-base/src/test/resources/application-unit-test.yaml similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/application-unit-test.yaml rename to yudao-module-bpm/yudao-module-bpm-base/src/test/resources/application-unit-test.yaml diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/application.yaml b/yudao-module-bpm/yudao-module-bpm-base/src/test/resources/application.yaml similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/application.yaml rename to yudao-module-bpm/yudao-module-bpm-base/src/test/resources/application.yaml diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/logback-spring.xml b/yudao-module-bpm/yudao-module-bpm-base/src/test/resources/logback-spring.xml similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/logback-spring.xml rename to yudao-module-bpm/yudao-module-bpm-base/src/test/resources/logback-spring.xml diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/sql/clean.sql b/yudao-module-bpm/yudao-module-bpm-base/src/test/resources/sql/clean.sql similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/sql/clean.sql rename to yudao-module-bpm/yudao-module-bpm-base/src/test/resources/sql/clean.sql diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/sql/create_tables.sql b/yudao-module-bpm/yudao-module-bpm-base/src/test/resources/sql/create_tables.sql similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/sql/create_tables.sql rename to yudao-module-bpm/yudao-module-bpm-base/src/test/resources/sql/create_tables.sql diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/pom.xml b/yudao-module-bpm/yudao-module-bpm-core-service/pom.xml deleted file mode 100644 index aa81886dbc..0000000000 --- a/yudao-module-bpm/yudao-module-bpm-core-service/pom.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - yudao-module-bpm - cn.iocoder.boot - ${revision} - - 4.0.0 - pom - - yudao-module-bpm-core-service-api - yudao-module-bpm-core-service-impl - - yudao-module-bpm-core-service - - - \ No newline at end of file diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/pom.xml b/yudao-module-bpm/yudao-module-bpm-impl-activiti/pom.xml similarity index 74% rename from yudao-module-bpm/yudao-module-bpm-activiti/pom.xml rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/pom.xml index a131ab0890..d130d12f7e 100644 --- a/yudao-module-bpm/yudao-module-bpm-activiti/pom.xml +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/pom.xml @@ -3,26 +3,31 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - yudao-module-bpm cn.iocoder.boot + yudao-module-bpm ${revision} 4.0.0 + yudao-module-bpm-impl-activiti + + ${artifactId} + + bpm-activiti 模å—,基于 Activiti 7 å®žçŽ°å·¥ä½œæµ + - yudao-module-bpm-activiti + + cn.iocoder.boot + yudao-module-bpm-base + ${revision} + + + cn.iocoder.boot yudao-spring-boot-starter-activiti - - cn.iocoder.boot - yudao-core-service - - - cn.iocoder.boot - yudao-module-bpm-core-service-api - + cn.iocoder.boot @@ -30,4 +35,4 @@ test - \ No newline at end of file + diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmModelController.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmModelController.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmModelController.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmModelController.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.http b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.http similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.http rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.http diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.http b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.http similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.http rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.http diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModeImportReqVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModeImportReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModeImportReqVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModeImportReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelBaseVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelBaseVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelBaseVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelBaseVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelCreateReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelCreateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelCreateReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelPageItemRespVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelPageItemRespVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelPageItemRespVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelPageItemRespVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelRespVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelRespVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelRespVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelRespVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelUpdateReqVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelUpdateReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelUpdateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelUpdateReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelUpdateStateReqVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelUpdateStateReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelUpdateStateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelUpdateStateReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/ModelPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/ModelPageReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/ModelPageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/ModelPageReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionListReqVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionListReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionListReqVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionListReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionPageItemRespVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionPageItemRespVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionPageItemRespVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionPageItemRespVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionPageReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionPageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionPageReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionRespVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionRespVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionRespVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionRespVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleBaseVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleBaseVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleBaseVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleBaseVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleCreateReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleCreateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleCreateReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleRespVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleRespVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleRespVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleRespVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleUpdateReqVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleUpdateReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleUpdateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleUpdateReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.http b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.http similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.http rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.http diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveBaseVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveBaseVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveBaseVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveBaseVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveCreateReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveCreateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveCreateReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeavePageReqVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeavePageReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeavePageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeavePageReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveRespVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveRespVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveRespVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveRespVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmActivityController.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmActivityController.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmActivityController.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmActivityController.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.http b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.http similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.http rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.http diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.http b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.http similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.http rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.http diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/activity/BpmActivityRespVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/activity/BpmActivityRespVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/activity/BpmActivityRespVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/activity/BpmActivityRespVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceCancelReqVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceCancelReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceCancelReqVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceCancelReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceCreateReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceCreateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceCreateReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceMyPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceMyPageReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceMyPageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceMyPageReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstancePageItemRespVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstancePageItemRespVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstancePageItemRespVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstancePageItemRespVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceRespVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceRespVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceRespVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceRespVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskApproveReqVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskApproveReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskApproveReqVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskApproveReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskDonePageItemRespVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskDonePageItemRespVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskDonePageItemRespVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskDonePageItemRespVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskDonePageReqVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskDonePageReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskDonePageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskDonePageReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskRejectReqVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskRejectReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskRejectReqVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskRejectReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskRespVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskRespVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskRespVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskRespVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskTodoPageItemRespVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskTodoPageItemRespVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskTodoPageItemRespVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskTodoPageItemRespVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskTodoPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskTodoPageReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskTodoPageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskTodoPageReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskUpdateAssigneeReqVO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskUpdateAssigneeReqVO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskUpdateAssigneeReqVO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskUpdateAssigneeReqVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmModelConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmModelConvert.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmModelConvert.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmModelConvert.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmProcessDefinitionConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmProcessDefinitionConvert.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmProcessDefinitionConvert.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmProcessDefinitionConvert.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmTaskAssignRuleConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmTaskAssignRuleConvert.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmTaskAssignRuleConvert.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmTaskAssignRuleConvert.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/message/BpmMessageConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/message/BpmMessageConvert.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/message/BpmMessageConvert.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/message/BpmMessageConvert.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/oa/BpmOALeaveConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/oa/BpmOALeaveConvert.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/oa/BpmOALeaveConvert.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/oa/BpmOALeaveConvert.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/package-info.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/package-info.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/package-info.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/package-info.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmActivityConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmActivityConvert.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmActivityConvert.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmActivityConvert.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmTaskConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmTaskConvert.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmTaskConvert.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmTaskConvert.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmProcessDefinitionExtDO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmProcessDefinitionExtDO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmProcessDefinitionExtDO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmProcessDefinitionExtDO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskAssignRuleDO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskAssignRuleDO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskAssignRuleDO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskAssignRuleDO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskMessageRuleDO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskMessageRuleDO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskMessageRuleDO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskMessageRuleDO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/leave/BpmOALeaveDO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/leave/BpmOALeaveDO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/leave/BpmOALeaveDO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/leave/BpmOALeaveDO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmProcessInstanceExtDO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmProcessInstanceExtDO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmProcessInstanceExtDO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmProcessInstanceExtDO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmTaskExtDO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmTaskExtDO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmTaskExtDO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmTaskExtDO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmProcessDefinitionExtMapper.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmProcessDefinitionExtMapper.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmProcessDefinitionExtMapper.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmProcessDefinitionExtMapper.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmTaskAssignRuleMapper.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmTaskAssignRuleMapper.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmTaskAssignRuleMapper.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmTaskAssignRuleMapper.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/oa/BpmOALeaveMapper.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/oa/BpmOALeaveMapper.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/oa/BpmOALeaveMapper.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/oa/BpmOALeaveMapper.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmTaskExtMapper.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmTaskExtMapper.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmTaskExtMapper.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmTaskExtMapper.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmModelFormTypeEnum.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmModelFormTypeEnum.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmModelFormTypeEnum.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmModelFormTypeEnum.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmTaskAssignRuleTypeEnum.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmTaskAssignRuleTypeEnum.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmTaskAssignRuleTypeEnum.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmTaskAssignRuleTypeEnum.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmTaskRuleScriptEnum.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmTaskRuleScriptEnum.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmTaskRuleScriptEnum.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmTaskRuleScriptEnum.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/message/BpmMessageEnum.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/message/BpmMessageEnum.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/message/BpmMessageEnum.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/message/BpmMessageEnum.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceDeleteReasonEnum.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceDeleteReasonEnum.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceDeleteReasonEnum.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceDeleteReasonEnum.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceResultEnum.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceResultEnum.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceResultEnum.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceResultEnum.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceStatusEnum.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceStatusEnum.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceStatusEnum.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceStatusEnum.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/package-info.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/package-info.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/package-info.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/package-info.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/BpmTaskAssignScript.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/BpmTaskAssignScript.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/BpmTaskAssignScript.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/BpmTaskAssignScript.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderAbstractScript.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderAbstractScript.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderAbstractScript.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderAbstractScript.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX1Script.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX1Script.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX1Script.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX1Script.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2Script.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2Script.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2Script.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2Script.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignStartUserScript.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignStartUserScript.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignStartUserScript.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignStartUserScript.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEvent.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEvent.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEvent.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEvent.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEventListener.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEventListener.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEventListener.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEventListener.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEventPublisher.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEventPublisher.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEventPublisher.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEventPublisher.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/package-info.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/package-info.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/package-info.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/package-info.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/identity/EmptyUserGroupManager.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/identity/EmptyUserGroupManager.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/identity/EmptyUserGroupManager.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/identity/EmptyUserGroupManager.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTackActivitiEventListener.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTackActivitiEventListener.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTackActivitiEventListener.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTackActivitiEventListener.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTaskEventListener.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTaskEventListener.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTaskEventListener.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTaskEventListener.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/package-info.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/package-info.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/package-info.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/package-info.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/package-info.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/package-info.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/package-info.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/package-info.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/package-info.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/package-info.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/package-info.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/package-info.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmModelService.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmModelService.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmModelService.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmModelService.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmProcessDefinitionService.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmProcessDefinitionService.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmProcessDefinitionService.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmProcessDefinitionService.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmTaskAssignRuleService.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmTaskAssignRuleService.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmTaskAssignRuleService.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmTaskAssignRuleService.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmModelMetaInfoRespDTO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmModelMetaInfoRespDTO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmModelMetaInfoRespDTO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmModelMetaInfoRespDTO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmProcessDefinitionCreateReqDTO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmProcessDefinitionCreateReqDTO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmProcessDefinitionCreateReqDTO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmProcessDefinitionCreateReqDTO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmModelServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmModelServiceImpl.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmModelServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmModelServiceImpl.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmProcessDefinitionServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmProcessDefinitionServiceImpl.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmProcessDefinitionServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmProcessDefinitionServiceImpl.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/BpmMessageService.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/BpmMessageService.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/BpmMessageService.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/BpmMessageService.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceApproveReqDTO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceApproveReqDTO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceApproveReqDTO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceApproveReqDTO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceRejectReqDTO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceRejectReqDTO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceRejectReqDTO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceRejectReqDTO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenTaskCreatedReqDTO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenTaskCreatedReqDTO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenTaskCreatedReqDTO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenTaskCreatedReqDTO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/impl/BpmMessageServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/impl/BpmMessageServiceImpl.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/impl/BpmMessageServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/impl/BpmMessageServiceImpl.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveService.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveService.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveService.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveService.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/impl/BpmOALeaveServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/impl/BpmOALeaveServiceImpl.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/impl/BpmOALeaveServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/impl/BpmOALeaveServiceImpl.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/listener/BpmOALeaveResultListener.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/listener/BpmOALeaveResultListener.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/listener/BpmOALeaveResultListener.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/listener/BpmOALeaveResultListener.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmActivityService.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmActivityService.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmActivityService.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmActivityService.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskService.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskService.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskService.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskService.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/dto/BpmProcessInstanceCreateReqDTO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/dto/BpmProcessInstanceCreateReqDTO.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/dto/BpmProcessInstanceCreateReqDTO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/dto/BpmProcessInstanceCreateReqDTO.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmActivityServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmActivityServiceImpl.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmActivityServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmActivityServiceImpl.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/package-info.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/package-info.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/package-info.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/package-info.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2ScriptTest.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2ScriptTest.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2ScriptTest.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2ScriptTest.java diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/package-info.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/package-info.java similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/package-info.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/package-info.java diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/application-unit-test.yaml b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/resources/application-unit-test.yaml similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/application-unit-test.yaml rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/resources/application-unit-test.yaml diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/application.yaml b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/resources/application.yaml similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/application.yaml rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/resources/application.yaml diff --git a/yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/logback-spring.xml b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/resources/logback-spring.xml similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-core-service/yudao-module-bpm-core-service-impl/src/test/resources/logback-spring.xml rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/resources/logback-spring.xml diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/sql/clean.sql b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/resources/sql/clean.sql similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/sql/clean.sql rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/resources/sql/clean.sql diff --git a/yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/sql/create_tables.sql b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/resources/sql/create_tables.sql similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-activiti/src/test/resources/sql/create_tables.sql rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/resources/sql/create_tables.sql diff --git a/yudao-module-bpm/yudao-module-bpm-flowable/pom.xml b/yudao-module-bpm/yudao-module-bpm-impl-flowable/pom.xml similarity index 77% rename from yudao-module-bpm/yudao-module-bpm-flowable/pom.xml rename to yudao-module-bpm/yudao-module-bpm-impl-flowable/pom.xml index e56fc0ffe5..6c83994edc 100644 --- a/yudao-module-bpm/yudao-module-bpm-flowable/pom.xml +++ b/yudao-module-bpm/yudao-module-bpm-impl-flowable/pom.xml @@ -3,13 +3,20 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - yudao-module-bpm cn.iocoder.boot + yudao-module-bpm ${revision} 4.0.0 - yudao-module-bpm-flowable + yudao-module-bpm-impl-flowable + + ${artifactId} + + bpm-flowable 模å—,基于 Flowable 6 å®žçŽ°å·¥ä½œæµ + + + org.flowable flowable-spring-boot-starter-basic @@ -20,4 +27,4 @@ - \ No newline at end of file + diff --git a/yudao-module-infra/pom.xml b/yudao-module-infra/pom.xml index 4b524edcc4..49376974e2 100644 --- a/yudao-module-infra/pom.xml +++ b/yudao-module-infra/pom.xml @@ -8,7 +8,10 @@ ${revision} 4.0.0 - + + yudao-module-infra-api + yudao-module-infra-impl + yudao-module-infra pom @@ -17,10 +20,5 @@ infra 包下,我们放基础设施的è¿ç»´ä¸Žç®¡ç†ï¼Œæ”¯æ’‘上层的通用与核心业务。 例如说:定时任务的管ç†ã€æœåŠ¡å™¨çš„ä¿¡æ¯ç­‰ç­‰ - - yudao-module-infra-api - yudao-module-infra-impl - - diff --git a/yudao-module-infra/yudao-module-infra-impl/pom.xml b/yudao-module-infra/yudao-module-infra-impl/pom.xml index 69dbc4ec4b..a26b274f3c 100644 --- a/yudao-module-infra/yudao-module-infra-impl/pom.xml +++ b/yudao-module-infra/yudao-module-infra-impl/pom.xml @@ -13,7 +13,7 @@ ${artifactId} - infra 包下,我们放基础设施的è¿ç»´ä¸Žç®¡ç†ï¼Œæ”¯æ’‘上层的通用与核心业务。 + infra 模å—,我们放基础设施的è¿ç»´ä¸Žç®¡ç†ï¼Œæ”¯æ’‘上层的通用与核心业务。 例如说:定时任务的管ç†ã€æœåŠ¡å™¨çš„ä¿¡æ¯ç­‰ç­‰ From fe1271a6f7eaeb37fb36c6153af33add81e092e0 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 31 Jan 2022 23:29:25 +0800 Subject: [PATCH 26/47] =?UTF-8?q?=E5=A4=9A=E6=A8=A1=E5=9D=97=E9=87=8D?= =?UTF-8?q?=E6=9E=84=208=EF=BC=9Abom=20=E6=A8=A1=E5=9D=97=EF=BC=8C?= =?UTF-8?q?=E5=B0=9D=E8=AF=95=E5=85=AC=E7=94=A8=E9=83=A8=E5=88=86=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bpm/api/form/BpmFormServiceApi.java | 46 -------------- .../modules/bpm/api/form/dto/BpmFormDTO.java | 39 ------------ .../bpm/api/group/BpmUserGroupServiceApi.java | 33 ---------- .../bpm/api/group/dto/BpmUserGroupDTO.java | 17 ----- .../yudao/module/bpm/api/package-info.java | 4 ++ .../module/bpm/enums/ErrorCodeConstants.java} | 5 +- .../bpm/api/BpmFormServiceApiImpl.java | 33 ---------- .../bpm/api/BpmUserGroupServiceApiImpl.java | 62 ------------------- .../bpm/enums/BpmErrorCodeConstants.java | 13 ---- .../definition/BpmUserGroupController.java | 16 ++--- .../definition/FormController.java} | 12 ++-- .../definition/vo/form/BpmFormBaseVO.java | 2 +- .../vo/form/BpmFormCreateReqVO.java | 2 +- .../definition/vo/form/BpmFormPageReqVO.java | 2 +- .../definition/vo/form/BpmFormRespVO.java | 2 +- .../vo/form/BpmFormSimpleRespVO.java | 2 +- .../vo/form/BpmFormUpdateReqVO.java | 2 +- .../vo/group/BpmUserGroupBaseVO.java | 2 +- .../vo/group/BpmUserGroupCreateReqVO.java | 4 +- .../vo/group/BpmUserGroupPageReqVO.java | 2 +- .../vo/group/BpmUserGroupRespVO.java | 2 +- .../vo/group/BpmUserGroupSimpleRespVO.java | 2 +- .../vo/group/BpmUserGroupUpdateReqVO.java | 3 +- .../vo/model/BpmModeImportReqVO.java | 2 +- .../definition/vo/model/BpmModelBaseVO.java | 2 +- .../vo/model/BpmModelCreateReqVO.java | 2 +- .../vo/model/BpmModelPageItemRespVO.java | 2 +- .../definition/vo/model/BpmModelRespVO.java | 2 +- .../vo/model/BpmModelUpdateReqVO.java | 2 +- .../vo/model/BpmModelUpdateStateReqVO.java | 2 +- .../definition/vo/model/ModelPageReqVO.java | 2 +- .../BpmProcessDefinitionListReqVO.java | 2 +- .../BpmProcessDefinitionPageItemRespVO.java | 2 +- .../BpmProcessDefinitionPageReqVO.java | 2 +- .../process/BpmProcessDefinitionRespVO.java | 2 +- .../vo/rule/BpmTaskAssignRuleBaseVO.java | 2 +- .../vo/rule/BpmTaskAssignRuleCreateReqVO.java | 2 +- .../vo/rule/BpmTaskAssignRuleRespVO.java | 2 +- .../vo/rule/BpmTaskAssignRuleUpdateReqVO.java | 3 +- .../bpm/controller/oa/package-info.java | 1 + .../bpm/controller/task/package-info.java | 1 + .../convert/definition/BpmFormConvert.java | 14 ++--- .../definition/BpmUserGroupConvert.java | 12 ++-- .../dal/dataobject/definition/BpmFormDO.java | 2 +- .../definition/BpmProcessDefinitionExtDO.java | 3 +- .../definition/BpmTaskAssignRuleDO.java | 2 +- .../definition/BpmTaskMessageRuleDO.java | 2 +- .../dataobject/definition/BpmUserGroupDO.java | 2 +- .../bpm/dal/dataobject/oa}/BpmOALeaveDO.java | 2 +- .../task/BpmProcessInstanceExtDO.java | 2 +- .../bpm/dal/dataobject/task/BpmTaskExtDO.java | 2 +- .../dal/mysql/definition/BpmFormMapper.java | 6 +- .../mysql/definition/BpmUserGroupMapper.java | 6 +- .../definition/BpmModelFormTypeEnum.java | 2 +- .../definition/BpmTaskAssignRuleTypeEnum.java | 2 +- .../definition/BpmTaskRuleScriptEnum.java | 2 +- .../bpm/enums/message/BpmMessageEnum.java | 2 +- .../BpmProcessInstanceDeleteReasonEnum.java | 2 +- .../task/BpmProcessInstanceResultEnum.java | 2 +- .../task/BpmProcessInstanceStatusEnum.java | 2 +- .../yudao/module/bpm/package-info.java | 1 + .../service/definition/BpmFormService.java | 10 +-- .../definition}/BpmFormServiceImpl.java | 23 ++++--- .../definition/BpmUserGroupService.java | 19 ++++-- .../definition}/BpmUserGroupServiceImpl.java | 39 ++++++++---- .../definition/dto/BpmFormFieldRespDTO.java | 2 +- .../service/message/BpmMessageService.java | 8 +-- .../message}/BpmMessageServiceImpl.java | 10 +-- ...eSendWhenProcessInstanceApproveReqDTO.java | 2 +- ...geSendWhenProcessInstanceRejectReqDTO.java | 2 +- .../BpmMessageSendWhenTaskCreatedReqDTO.java | 2 +- .../definition/BpmFormServiceTest.java | 16 ++--- .../definition/BpmUserGroupServiceTest.java | 14 ++--- .../definition/BpmModelController.java | 1 + .../BpmProcessDefinitionController.java | 8 +-- .../BpmTaskAssignRuleController.java | 6 +- .../controller/oa/BpmOALeaveController.java | 2 +- .../convert/definition/BpmModelConvert.java | 3 +- .../BpmProcessDefinitionConvert.java | 8 +-- .../definition/BpmTaskAssignRuleConvert.java | 10 ++- .../convert/message/BpmMessageConvert.java | 6 +- .../bpm/convert/oa/BpmOALeaveConvert.java | 2 +- .../bpm/convert/task/BpmActivityConvert.java | 3 - .../task/BpmProcessInstanceConvert.java | 4 +- .../bpm/convert/task/BpmTaskConvert.java | 2 +- .../BpmProcessDefinitionExtMapper.java | 4 +- .../definition/BpmTaskAssignRuleMapper.java | 2 +- .../bpm/dal/mysql/oa/BpmOALeaveMapper.java | 2 +- .../task/BpmProcessInstanceExtMapper.java | 2 +- .../bpm/dal/mysql/task/BpmTaskExtMapper.java | 2 +- .../config/BpmActivitiConfiguration.java | 2 +- .../behavior/BpmActivityBehaviorFactory.java | 2 +- .../behavior/BpmUserTaskActivitiBehavior.java | 12 ++-- .../activiti/core/behavior/package-info.java | 2 +- .../behavior/script/BpmTaskAssignScript.java | 3 +- .../impl/BpmTaskAssignLeaderX1Script.java | 2 +- .../impl/BpmTaskAssignLeaderX2Script.java | 2 +- .../impl/BpmTaskAssignStartUserScript.java | 2 +- .../event/BpmProcessInstanceResultEvent.java | 2 +- .../BpmProcessInstanceEventListener.java | 4 +- .../core/listener/BpmTaskEventListener.java | 5 +- .../activiti/core/listener/package-info.java | 2 +- .../service/definition/BpmModelService.java | 2 +- .../BpmProcessDefinitionService.java | 10 +-- .../definition/BpmTaskAssignRuleService.java | 9 ++- .../dto/BpmModelMetaInfoRespDTO.java | 2 +- .../dto/BpmProcessDefinitionCreateReqDTO.java | 2 +- .../definition/impl/BpmModelServiceImpl.java | 11 ++-- .../impl/BpmProcessDefinitionServiceImpl.java | 18 +++--- .../impl/BpmTaskAssignRuleServiceImpl.java | 13 ++-- .../bpm/service/oa/BpmOALeaveService.java | 2 +- .../oa/impl/BpmOALeaveServiceImpl.java | 5 +- .../task/BpmProcessInstanceService.java | 3 +- .../bpm/service/task/BpmTaskService.java | 2 +- .../task/impl/BpmActivityServiceImpl.java | 6 -- .../impl/BpmProcessInstanceServiceImpl.java | 13 ++-- .../service/task/impl/BpmTaskServiceImpl.java | 7 +-- .../BpmUserTaskActivitiBehaviorTest.java | 10 +-- 118 files changed, 273 insertions(+), 508 deletions(-) delete mode 100644 yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/form/BpmFormServiceApi.java delete mode 100644 yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/form/dto/BpmFormDTO.java delete mode 100644 yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/BpmUserGroupServiceApi.java delete mode 100644 yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/dto/BpmUserGroupDTO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/package-info.java rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java => yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java} (97%) delete mode 100644 yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmFormServiceApiImpl.java delete mode 100644 yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmUserGroupServiceApiImpl.java delete mode 100644 yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/controller/definition/BpmUserGroupController.java (81%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/{adminserver/modules/bpm/controller/definition/BpmFormController.java => module/bpm/controller/definition/FormController.java} (86%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/controller/definition/vo/form/BpmFormBaseVO.java (90%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/controller/definition/vo/form/BpmFormCreateReqVO.java (89%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/controller/definition/vo/form/BpmFormPageReqVO.java (85%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/controller/definition/vo/form/BpmFormRespVO.java (92%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/controller/definition/vo/form/BpmFormSimpleRespVO.java (83%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/controller/definition/vo/form/BpmFormUpdateReqVO.java (90%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/controller/definition/vo/group/BpmUserGroupBaseVO.java (92%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/controller/definition/vo/group/BpmUserGroupCreateReqVO.java (62%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/controller/definition/vo/group/BpmUserGroupPageReqVO.java (92%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/controller/definition/vo/group/BpmUserGroupRespVO.java (84%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/controller/definition/vo/group/BpmUserGroupSimpleRespVO.java (86%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/controller/definition/vo/group/BpmUserGroupUpdateReqVO.java (80%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/definition/vo/model/BpmModeImportReqVO.java (89%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/definition/vo/model/BpmModelBaseVO.java (95%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/definition/vo/model/BpmModelCreateReqVO.java (90%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/definition/vo/model/BpmModelPageItemRespVO.java (94%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/definition/vo/model/BpmModelRespVO.java (88%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/definition/vo/model/BpmModelUpdateReqVO.java (95%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/definition/vo/model/BpmModelUpdateStateReqVO.java (87%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/definition/vo/model/ModelPageReqVO.java (90%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/definition/vo/process/BpmProcessDefinitionListReqVO.java (86%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/definition/vo/process/BpmProcessDefinitionPageItemRespVO.java (87%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/definition/vo/process/BpmProcessDefinitionPageReqVO.java (86%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/definition/vo/process/BpmProcessDefinitionRespVO.java (96%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/definition/vo/rule/BpmTaskAssignRuleBaseVO.java (90%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/definition/vo/rule/BpmTaskAssignRuleCreateReqVO.java (90%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/definition/vo/rule/BpmTaskAssignRuleRespVO.java (92%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/definition/vo/rule/BpmTaskAssignRuleUpdateReqVO.java (85%) create mode 100644 yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/package-info.java create mode 100644 yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/package-info.java rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/convert/definition/BpmFormConvert.java (53%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/convert/definition/BpmUserGroupConvert.java (61%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/dal/dataobject/definition/BpmFormDO.java (94%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/dal/dataobject/definition/BpmProcessDefinitionExtDO.java (94%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/dal/dataobject/definition/BpmTaskAssignRuleDO.java (97%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/dal/dataobject/definition/BpmTaskMessageRuleDO.java (62%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/dal/dataobject/definition/BpmUserGroupDO.java (93%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/leave => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa}/BpmOALeaveDO.java (95%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/dal/dataobject/task/BpmProcessInstanceExtDO.java (97%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/dal/dataobject/task/BpmTaskExtDO.java (96%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/dal/mysql/definition/BpmFormMapper.java (70%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/dal/mysql/definition/BpmUserGroupMapper.java (79%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/enums/definition/BpmModelFormTypeEnum.java (85%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/enums/definition/BpmTaskAssignRuleTypeEnum.java (90%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/enums/definition/BpmTaskRuleScriptEnum.java (89%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/enums/message/BpmMessageEnum.java (91%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/enums/task/BpmProcessInstanceDeleteReasonEnum.java (92%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/enums/task/BpmProcessInstanceResultEnum.java (87%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/enums/task/BpmProcessInstanceStatusEnum.java (86%) create mode 100644 yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/package-info.java rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/service/definition/BpmFormService.java (80%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/{adminserver/modules/bpm/service/definition/impl => module/bpm/service/definition}/BpmFormServiceImpl.java (71%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/service/definition/BpmUserGroupService.java (64%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/{adminserver/modules/bpm/service/definition/impl => module/bpm/service/definition}/BpmUserGroupServiceImpl.java (61%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/service/definition/dto/BpmFormFieldRespDTO.java (86%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/service/message/BpmMessageService.java (69%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/impl => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/message}/BpmMessageServiceImpl.java (84%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceApproveReqDTO.java (89%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceRejectReqDTO.java (91%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/service/message/dto/BpmMessageSendWhenTaskCreatedReqDTO.java (93%) diff --git a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/form/BpmFormServiceApi.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/form/BpmFormServiceApi.java deleted file mode 100644 index f8f66a7d92..0000000000 --- a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/form/BpmFormServiceApi.java +++ /dev/null @@ -1,46 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.bpm.api.form; - -import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.coreservice.modules.bpm.api.form.dto.BpmFormDTO; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; - -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -/** - * Bpm 动æ€è¡¨å• Service API æŽ¥å£ - * - * @author @风里雾里 - */ -public interface BpmFormServiceApi { - /** - * 获得动æ€è¡¨å• - * - * @param id ç¼–å· - * @return 动æ€è¡¨å• - */ - BpmFormDTO getForm(Long id); - - /** - * 获得动æ€è¡¨å•列表 - * - * @param ids ç¼–å· - * @return 动æ€è¡¨å•列表 - */ - List getFormList(Collection ids); - - /** - * 获得动æ€è¡¨å• Map - * - * @param ids ç¼–å· - * @return 动æ€è¡¨å• Map - */ - default Map getFormMap(Collection ids) { - if (CollUtil.isEmpty(ids)) { - return Collections.emptyMap(); - } - return CollectionUtils.convertMap(this.getFormList(ids), BpmFormDTO::getId); - } -} diff --git a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/form/dto/BpmFormDTO.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/form/dto/BpmFormDTO.java deleted file mode 100644 index 0a5c0f94a5..0000000000 --- a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/form/dto/BpmFormDTO.java +++ /dev/null @@ -1,39 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.bpm.api.form.dto; - -import lombok.Data; - -import java.util.List; - -/** - * 工作æµçš„表å•定义 DTO - * 用于工作æµçš„申请表å•,需è¦åЍæ€é…置的场景 - * TODO æš‚æ—¶æ‹·è´ BpmFormDO 字段, ä¸çŸ¥é“那些字段是必须的, åŽç»­åˆ æŽ‰ä¸éœ€è¦çš„字段 - * @author jason - */ -@Data -public class BpmFormDTO { - - /** - * ç¼–å· - */ - private Long id; - /** - * 表å•å - */ - private String name; - /** - * 表å•çš„é…ç½® - */ - private String conf; - /** - * 表å•项的数组 - * - * ç›®å‰ç›´æŽ¥å°† https://github.com/JakHuang/form-generator 生æˆçš„ JSON 串,直接ä¿å­˜ - * 定义:https://github.com/JakHuang/form-generator/issues/46 - */ - private List fields; - /** - * 备注 - */ - private String remark; -} diff --git a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/BpmUserGroupServiceApi.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/BpmUserGroupServiceApi.java deleted file mode 100644 index 796dbd4dfd..0000000000 --- a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/BpmUserGroupServiceApi.java +++ /dev/null @@ -1,33 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.bpm.api.group; - -import cn.iocoder.yudao.coreservice.modules.bpm.api.group.dto.BpmUserGroupDTO; - -import java.util.Collection; -import java.util.List; -import java.util.Set; - -/** - * Bpm 用户组 API æŽ¥å£ - * - * @author èŠ‹é“æºç  - * @author jason - */ -public interface BpmUserGroupServiceApi { - - /** - * 获得用户组列表 - * - * @param ids ç¼–å· - * @return 用户组列表 - */ - List getUserGroupList(Collection ids); - - /** - * æ ¡éªŒç”¨æˆ·ç»„ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: - * 1. 用户组编å·ä¸å­˜åœ¨ - * 2. 用户组被ç¦ç”¨ - * - * @param ids ç”¨æˆ·ç»„ç¼–å·æ•°ç»„ - */ - void validUserGroups(Set ids); -} diff --git a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/dto/BpmUserGroupDTO.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/dto/BpmUserGroupDTO.java deleted file mode 100644 index b85042527a..0000000000 --- a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/coreservice/modules/bpm/api/group/dto/BpmUserGroupDTO.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.iocoder.yudao.coreservice.modules.bpm.api.group.dto; - -import lombok.Data; - -import java.util.Set; -/** - * Bpm 用户组 DTO - * - * @author jason - */ -@Data -public class BpmUserGroupDTO { - /** - * æˆå‘˜ç”¨æˆ·ç¼–å·æ•°ç»„ - */ - private Set memberUserIds; -} diff --git a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/package-info.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/package-info.java new file mode 100644 index 0000000000..37a92219f9 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/package-info.java @@ -0,0 +1,4 @@ +/** + * bpm API 包,定义暴露给其它模å—çš„ API + */ +package cn.iocoder.yudao.module.bpm.api; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java similarity index 97% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java rename to yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java index 66fc20b8f9..74281aaac2 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java +++ b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.enums; +package cn.iocoder.yudao.module.bpm.enums; import cn.iocoder.yudao.framework.common.exception.ErrorCode; @@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode; * * 工作æµç³»ç»Ÿï¼Œä½¿ç”¨ 1-009-000-000 段 */ -public interface BpmErrorCodeConstants { +public interface ErrorCodeConstants { // ========== 通用æµç¨‹å¤„ç† æ¨¡å— 1-009-000-000 ========== ErrorCode HIGHLIGHT_IMG_ERROR = new ErrorCode(1009000002, "获å–高亮æµç¨‹å›¾å¼‚常"); @@ -55,4 +55,5 @@ public interface BpmErrorCodeConstants { // ========== 动æ€è¡¨å•æ¨¡å— 1-009-010-000 ========== ErrorCode FORM_NOT_EXISTS = new ErrorCode(1009010000, "动æ€è¡¨å•ä¸å­˜åœ¨"); + } diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmFormServiceApiImpl.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmFormServiceApiImpl.java deleted file mode 100644 index 104445275d..0000000000 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmFormServiceApiImpl.java +++ /dev/null @@ -1,33 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.api; - -import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmFormConvert; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmFormMapper; -import cn.iocoder.yudao.coreservice.modules.bpm.api.form.BpmFormServiceApi; -import cn.iocoder.yudao.coreservice.modules.bpm.api.form.dto.BpmFormDTO; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import java.util.Collection; -import java.util.List; -/** - * 动æ€è¡¨å• Api Service 实现类 - * - * @author 风里雾里 - * @author jason - */ -@Service -public class BpmFormServiceApiImpl implements BpmFormServiceApi { - - @Resource - private BpmFormMapper formMapper; - - @Override - public BpmFormDTO getForm(Long id) { - return BpmFormConvert.INSTANCE.convert1(formMapper.selectById(id)); - } - - @Override - public List getFormList(Collection ids) { - return BpmFormConvert.INSTANCE.convertList(formMapper.selectBatchIds(ids)); - } -} diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmUserGroupServiceApiImpl.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmUserGroupServiceApiImpl.java deleted file mode 100644 index 2b9ad5a6da..0000000000 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/api/BpmUserGroupServiceApiImpl.java +++ /dev/null @@ -1,62 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.api; - -import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmUserGroupConvert; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmUserGroupDO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmUserGroupMapper; -import cn.iocoder.yudao.coreservice.modules.bpm.api.group.BpmUserGroupServiceApi; -import cn.iocoder.yudao.coreservice.modules.bpm.api.group.dto.BpmUserGroupDTO; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.USER_GROUP_IS_DISABLE; -import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.USER_GROUP_NOT_EXISTS; -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; - -/** - * Bpm 用户组 API æŽ¥å£ å®žçŽ°ç±» - * - * @author èŠ‹é“æºç  - * @author jason - */ -@Service -public class BpmUserGroupServiceApiImpl implements BpmUserGroupServiceApi { - - @Resource - private BpmUserGroupMapper userGroupMapper; - - @Override - public List getUserGroupList(Collection ids) { - return BpmUserGroupConvert.INSTANCE.convertList3(userGroupMapper.selectBatchIds(ids)); - } - - - @Override - public void validUserGroups(Set ids) { - - if (CollUtil.isEmpty(ids)) { - return; - } - // èŽ·å¾—ç”¨æˆ·ç»„ä¿¡æ¯ - List userGroups = userGroupMapper.selectBatchIds(ids); - Map userGroupMap = CollectionUtils.convertMap(userGroups, BpmUserGroupDO::getId); - // 校验 - ids.forEach(id -> { - BpmUserGroupDO userGroup = userGroupMap.get(id); - if (userGroup == null) { - throw ServiceExceptionUtil.exception(USER_GROUP_NOT_EXISTS); - } - if (!CommonStatusEnum.ENABLE.getStatus().equals(userGroup.getStatus())) { - throw exception(USER_GROUP_IS_DISABLE, userGroup.getName()); - } - }); - } -} diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java deleted file mode 100644 index 531f7fac4c..0000000000 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java +++ /dev/null @@ -1,13 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.enums; - -import cn.iocoder.yudao.framework.common.exception.ErrorCode; - -public interface BpmErrorCodeConstants { - // ========== ç”¨æˆ·ç»„æ¨¡å— 1-009-011-000 ========== - ErrorCode USER_GROUP_NOT_EXISTS = new ErrorCode(1009011000, "用户组ä¸å­˜åœ¨"); - ErrorCode USER_GROUP_IS_DISABLE = new ErrorCode(1009011001, "å字为ã€{}】的用户组已被ç¦ç”¨"); - - // ========== 动æ€è¡¨å•æ¨¡å— 1-009-010-000 ========== - ErrorCode FORM_NOT_EXISTS = new ErrorCode(1009010000, "动æ€è¡¨å•ä¸å­˜åœ¨"); - ErrorCode FORM_FIELD_REPEAT = new ErrorCode(1009010000, "表å•项({}) å’Œ ({}) 使用了相åŒçš„字段å({})"); -} diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmUserGroupController.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/BpmUserGroupController.java similarity index 81% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmUserGroupController.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/BpmUserGroupController.java index ea5fafd8e0..1051a78f54 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmUserGroupController.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/BpmUserGroupController.java @@ -1,12 +1,12 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition; +package cn.iocoder.yudao.module.bpm.controller.definition; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupPageReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmUserGroupConvert; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmUserGroupDO; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmUserGroupService; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupRespVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupUpdateReqVO; +import cn.iocoder.yudao.module.bpm.convert.definition.BpmUserGroupConvert; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmUserGroupDO; +import cn.iocoder.yudao.module.bpm.service.definition.BpmUserGroupService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmFormController.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/FormController.java similarity index 86% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmFormController.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/FormController.java index cb22db3427..34b712ff25 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmFormController.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/FormController.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition; +package cn.iocoder.yudao.module.bpm.controller.definition; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.*; -import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmFormConvert; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmFormDO; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmFormService; +import cn.iocoder.yudao.module.bpm.convert.definition.BpmFormConvert; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; +import cn.iocoder.yudao.module.bpm.service.definition.BpmFormService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; @@ -23,7 +23,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @RestController @RequestMapping("/bpm/form") @Validated -public class BpmFormController { +public class FormController { @Resource private BpmFormService formService; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormBaseVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormBaseVO.java similarity index 90% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormBaseVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormBaseVO.java index 799817ad8c..6a518b86ac 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormBaseVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form; +package cn.iocoder.yudao.module.bpm.controller.definition.vo.form; import com.sun.istack.internal.NotNull; import lombok.*; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormCreateReqVO.java similarity index 89% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormCreateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormCreateReqVO.java index 70da000627..7068015830 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormCreateReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form; +package cn.iocoder.yudao.module.bpm.controller.definition.vo.form; import lombok.*; import io.swagger.annotations.*; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormPageReqVO.java similarity index 85% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormPageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormPageReqVO.java index 6001b59ff1..5576f80d6e 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormPageReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form; +package cn.iocoder.yudao.module.bpm.controller.definition.vo.form; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormRespVO.java similarity index 92% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormRespVO.java index 89c2eb9303..6aef371f5e 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form; +package cn.iocoder.yudao.module.bpm.controller.definition.vo.form; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormSimpleRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormSimpleRespVO.java similarity index 83% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormSimpleRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormSimpleRespVO.java index 4459bf6abb..8c622d68f2 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormSimpleRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormSimpleRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form; +package cn.iocoder.yudao.module.bpm.controller.definition.vo.form; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormUpdateReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormUpdateReqVO.java similarity index 90% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormUpdateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormUpdateReqVO.java index 1ca527ac10..c81df497e2 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/form/BpmFormUpdateReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form; +package cn.iocoder.yudao.module.bpm.controller.definition.vo.form; import lombok.*; import io.swagger.annotations.*; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupBaseVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupBaseVO.java similarity index 92% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupBaseVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupBaseVO.java index 9914260d37..f18b8520d1 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupBaseVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group; +package cn.iocoder.yudao.module.bpm.controller.definition.vo.group; import lombok.*; import java.util.*; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupCreateReqVO.java similarity index 62% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupCreateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupCreateReqVO.java index 44114ac144..deb647da6a 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupCreateReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupCreateReqVO.java @@ -1,9 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group; +package cn.iocoder.yudao.module.bpm.controller.definition.vo.group; import lombok.*; -import java.util.*; import io.swagger.annotations.*; -import javax.validation.constraints.*; @ApiModel("用户组创建 Request VO") @Data diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupPageReqVO.java similarity index 92% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupPageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupPageReqVO.java index 303a3491ea..e8f0766699 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupPageReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group; +package cn.iocoder.yudao.module.bpm.controller.definition.vo.group; import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.util.date.DateUtils; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupRespVO.java similarity index 84% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupRespVO.java index 523bb60a3b..72f83b97cc 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group; +package cn.iocoder.yudao.module.bpm.controller.definition.vo.group; import lombok.*; import java.util.*; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupSimpleRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupSimpleRespVO.java similarity index 86% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupSimpleRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupSimpleRespVO.java index fb427d0f68..09d760addf 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupSimpleRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupSimpleRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group; +package cn.iocoder.yudao.module.bpm.controller.definition.vo.group; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupUpdateReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupUpdateReqVO.java similarity index 80% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupUpdateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupUpdateReqVO.java index 00a32bdac6..f9760d550c 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/group/BpmUserGroupUpdateReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupUpdateReqVO.java @@ -1,7 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group; +package cn.iocoder.yudao.module.bpm.controller.definition.vo.group; import lombok.*; -import java.util.*; import io.swagger.annotations.*; import javax.validation.constraints.*; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModeImportReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModeImportReqVO.java similarity index 89% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModeImportReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModeImportReqVO.java index 18b9b5b6fb..bd04d71272 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModeImportReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModeImportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.model; +package cn.iocoder.yudao.module.bpm.controller.definition.vo.model; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelBaseVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelBaseVO.java similarity index 95% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelBaseVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelBaseVO.java index 7246a272d1..04bf6c7101 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelBaseVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.model; +package cn.iocoder.yudao.module.bpm.controller.definition.vo.model; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelCreateReqVO.java similarity index 90% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelCreateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelCreateReqVO.java index 4a3c19e4fe..62923dca7c 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelCreateReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.model; +package cn.iocoder.yudao.module.bpm.controller.definition.vo.model; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelPageItemRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelPageItemRespVO.java similarity index 94% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelPageItemRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelPageItemRespVO.java index af498d8270..4ad529eadb 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelPageItemRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelPageItemRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.model; +package cn.iocoder.yudao.module.bpm.controller.definition.vo.model; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelRespVO.java similarity index 88% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelRespVO.java index a448e620be..438ae3af11 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.model; +package cn.iocoder.yudao.module.bpm.controller.definition.vo.model; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelUpdateReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelUpdateReqVO.java similarity index 95% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelUpdateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelUpdateReqVO.java index 8cac65ae95..2159d66c0f 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelUpdateReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.model; +package cn.iocoder.yudao.module.bpm.controller.definition.vo.model; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelUpdateStateReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelUpdateStateReqVO.java similarity index 87% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelUpdateStateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelUpdateStateReqVO.java index 1536e9042b..7604c98ab7 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/BpmModelUpdateStateReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelUpdateStateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.model; +package cn.iocoder.yudao.module.bpm.controller.definition.vo.model; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/ModelPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/ModelPageReqVO.java similarity index 90% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/ModelPageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/ModelPageReqVO.java index 70b2b2ff33..5511b3726d 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/model/ModelPageReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/ModelPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.model; +package cn.iocoder.yudao.module.bpm.controller.definition.vo.model; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionListReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/process/BpmProcessDefinitionListReqVO.java similarity index 86% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionListReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/process/BpmProcessDefinitionListReqVO.java index dae4a9b503..f19d75c474 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionListReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/process/BpmProcessDefinitionListReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.process; +package cn.iocoder.yudao.module.bpm.controller.definition.vo.process; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionPageItemRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/process/BpmProcessDefinitionPageItemRespVO.java similarity index 87% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionPageItemRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/process/BpmProcessDefinitionPageItemRespVO.java index 967aac8d40..414377af54 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionPageItemRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/process/BpmProcessDefinitionPageItemRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.process; +package cn.iocoder.yudao.module.bpm.controller.definition.vo.process; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/process/BpmProcessDefinitionPageReqVO.java similarity index 86% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionPageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/process/BpmProcessDefinitionPageReqVO.java index 70fa41d8f0..93bf0b738e 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionPageReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/process/BpmProcessDefinitionPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.process; +package cn.iocoder.yudao.module.bpm.controller.definition.vo.process; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/process/BpmProcessDefinitionRespVO.java similarity index 96% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/process/BpmProcessDefinitionRespVO.java index 4e0f518645..450c67d751 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/process/BpmProcessDefinitionRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/process/BpmProcessDefinitionRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.process; +package cn.iocoder.yudao.module.bpm.controller.definition.vo.process; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleBaseVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/rule/BpmTaskAssignRuleBaseVO.java similarity index 90% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleBaseVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/rule/BpmTaskAssignRuleBaseVO.java index 935c9b4108..9db2c9bca7 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleBaseVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/rule/BpmTaskAssignRuleBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule; +package cn.iocoder.yudao.module.bpm.controller.definition.vo.rule; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/rule/BpmTaskAssignRuleCreateReqVO.java similarity index 90% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleCreateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/rule/BpmTaskAssignRuleCreateReqVO.java index b29bc0b2f8..6d4937f9c8 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleCreateReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/rule/BpmTaskAssignRuleCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule; +package cn.iocoder.yudao.module.bpm.controller.definition.vo.rule; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/rule/BpmTaskAssignRuleRespVO.java similarity index 92% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/rule/BpmTaskAssignRuleRespVO.java index d9c36aad96..d718cb6f50 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/rule/BpmTaskAssignRuleRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule; +package cn.iocoder.yudao.module.bpm.controller.definition.vo.rule; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleUpdateReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/rule/BpmTaskAssignRuleUpdateReqVO.java similarity index 85% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleUpdateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/rule/BpmTaskAssignRuleUpdateReqVO.java index 48388a9447..cedceb2a36 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleUpdateReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/rule/BpmTaskAssignRuleUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule; +package cn.iocoder.yudao.module.bpm.controller.definition.vo.rule; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -7,7 +7,6 @@ import lombok.EqualsAndHashCode; import lombok.ToString; import javax.validation.constraints.NotNull; -import java.util.Set; @ApiModel("æµç¨‹ä»»åŠ¡åˆ†é…规则的更新 Request VO") @Data diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/package-info.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/package-info.java new file mode 100644 index 0000000000..2fe59f5721 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.bpm.controller.oa; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/package-info.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/package-info.java new file mode 100644 index 0000000000..8be8f21c57 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.bpm.controller.task; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmFormConvert.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmFormConvert.java similarity index 53% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmFormConvert.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmFormConvert.java index 7dc2dfabf7..9281cc4ab1 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmFormConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmFormConvert.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.convert.definition; +package cn.iocoder.yudao.module.bpm.convert.definition; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.BpmFormCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.BpmFormRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.BpmFormSimpleRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.BpmFormUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmFormDO; -import cn.iocoder.yudao.coreservice.modules.bpm.api.form.dto.BpmFormDTO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormRespVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormSimpleRespVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormUpdateReqVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; +import cn.iocoder.yudao.module.bpm.api.form.dto.BpmFormDTO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmUserGroupConvert.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmUserGroupConvert.java similarity index 61% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmUserGroupConvert.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmUserGroupConvert.java index 7f7e9afc8d..d30860ef19 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmUserGroupConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmUserGroupConvert.java @@ -1,12 +1,12 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.convert.definition; +package cn.iocoder.yudao.module.bpm.convert.definition; import java.util.*; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmUserGroupDO; -import cn.iocoder.yudao.coreservice.modules.bpm.api.group.dto.BpmUserGroupDTO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupRespVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupUpdateReqVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmUserGroupDO; +import cn.iocoder.yudao.module.bpm.api.group.dto.BpmUserGroupDTO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.mapstruct.Mapper; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmFormDO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmFormDO.java similarity index 94% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmFormDO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmFormDO.java index 2c23b8dcc8..76bf777e5d 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmFormDO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmFormDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition; +package cn.iocoder.yudao.module.bpm.dal.dataobject.definition; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import com.baomidou.mybatisplus.annotation.TableField; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmProcessDefinitionExtDO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmProcessDefinitionExtDO.java similarity index 94% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmProcessDefinitionExtDO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmProcessDefinitionExtDO.java index 007ad43f34..e9f8997f87 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmProcessDefinitionExtDO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmProcessDefinitionExtDO.java @@ -1,7 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition; +package cn.iocoder.yudao.module.bpm.dal.dataobject.definition; import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmModelFormTypeEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskAssignRuleDO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmTaskAssignRuleDO.java similarity index 97% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskAssignRuleDO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmTaskAssignRuleDO.java index 08b80c4a94..44950c8175 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskAssignRuleDO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmTaskAssignRuleDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition; +package cn.iocoder.yudao.module.bpm.dal.dataobject.definition; import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmTaskRuleScriptEnum; import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmTaskAssignRuleTypeEnum; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskMessageRuleDO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmTaskMessageRuleDO.java similarity index 62% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskMessageRuleDO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmTaskMessageRuleDO.java index 04f357931f..db204c0273 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskMessageRuleDO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmTaskMessageRuleDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition; +package cn.iocoder.yudao.module.bpm.dal.dataobject.definition; // TODO 芋艿:先埋个å‘。任务消æ¯çš„é…置规则。说白了,就是ä¸åŒçš„ public class BpmTaskMessageRuleDO { diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmUserGroupDO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmUserGroupDO.java similarity index 93% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmUserGroupDO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmUserGroupDO.java index d433c65f6d..ec11681805 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmUserGroupDO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmUserGroupDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition; +package cn.iocoder.yudao.module.bpm.dal.dataobject.definition; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/leave/BpmOALeaveDO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOALeaveDO.java similarity index 95% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/leave/BpmOALeaveDO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOALeaveDO.java index f5ce1a91e7..6cad3fcae2 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/leave/BpmOALeaveDO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOALeaveDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.leave; +package cn.iocoder.yudao.module.bpm.dal.dataobject.oa; import cn.iocoder.yudao.module.system.dal.dataobject.user.SysUserDO; import lombok.*; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmProcessInstanceExtDO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/task/BpmProcessInstanceExtDO.java similarity index 97% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmProcessInstanceExtDO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/task/BpmProcessInstanceExtDO.java index 8618387497..ddeed4e970 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmProcessInstanceExtDO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/task/BpmProcessInstanceExtDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task; +package cn.iocoder.yudao.module.bpm.dal.dataobject.task; import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum; import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceStatusEnum; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmTaskExtDO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/task/BpmTaskExtDO.java similarity index 96% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmTaskExtDO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/task/BpmTaskExtDO.java index e3b31ec33a..3fb4f5aa8d 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmTaskExtDO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/task/BpmTaskExtDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task; +package cn.iocoder.yudao.module.bpm.dal.dataobject.task; import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmFormMapper.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/definition/BpmFormMapper.java similarity index 70% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmFormMapper.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/definition/BpmFormMapper.java index f4b052877c..34c554d414 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmFormMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/definition/BpmFormMapper.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition; +package cn.iocoder.yudao.module.bpm.dal.mysql.definition; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.BpmFormPageReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmFormDO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormPageReqVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmUserGroupMapper.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/definition/BpmUserGroupMapper.java similarity index 79% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmUserGroupMapper.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/definition/BpmUserGroupMapper.java index f524fef69c..681e7b92e9 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmUserGroupMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/definition/BpmUserGroupMapper.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition; +package cn.iocoder.yudao.module.bpm.dal.mysql.definition; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupPageReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmUserGroupDO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupPageReqVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmUserGroupDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmModelFormTypeEnum.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmModelFormTypeEnum.java similarity index 85% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmModelFormTypeEnum.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmModelFormTypeEnum.java index 917ec0f29c..c21d6f9991 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmModelFormTypeEnum.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmModelFormTypeEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.enums.definition; +package cn.iocoder.yudao.module.bpm.enums.definition; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmTaskAssignRuleTypeEnum.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmTaskAssignRuleTypeEnum.java similarity index 90% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmTaskAssignRuleTypeEnum.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmTaskAssignRuleTypeEnum.java index 8b3d8e48fa..de3c351620 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmTaskAssignRuleTypeEnum.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmTaskAssignRuleTypeEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.enums.definition; +package cn.iocoder.yudao.module.bpm.enums.definition; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmTaskRuleScriptEnum.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmTaskRuleScriptEnum.java similarity index 89% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmTaskRuleScriptEnum.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmTaskRuleScriptEnum.java index 571d37f871..7fc0e3b8bc 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmTaskRuleScriptEnum.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmTaskRuleScriptEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.enums.definition; +package cn.iocoder.yudao.module.bpm.enums.definition; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/message/BpmMessageEnum.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/enums/message/BpmMessageEnum.java similarity index 91% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/message/BpmMessageEnum.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/enums/message/BpmMessageEnum.java index e95764a795..7462570c21 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/message/BpmMessageEnum.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/enums/message/BpmMessageEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.enums.message; +package cn.iocoder.yudao.module.bpm.enums.message; import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; import lombok.AllArgsConstructor; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceDeleteReasonEnum.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmProcessInstanceDeleteReasonEnum.java similarity index 92% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceDeleteReasonEnum.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmProcessInstanceDeleteReasonEnum.java index 65b2e953bb..e41930bb8f 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceDeleteReasonEnum.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmProcessInstanceDeleteReasonEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.enums.task; +package cn.iocoder.yudao.module.bpm.enums.task; import cn.hutool.core.util.StrUtil; import lombok.AllArgsConstructor; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceResultEnum.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmProcessInstanceResultEnum.java similarity index 87% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceResultEnum.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmProcessInstanceResultEnum.java index 01916f51a9..39bf22ada7 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceResultEnum.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmProcessInstanceResultEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.enums.task; +package cn.iocoder.yudao.module.bpm.enums.task; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceStatusEnum.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmProcessInstanceStatusEnum.java similarity index 86% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceStatusEnum.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmProcessInstanceStatusEnum.java index f7a1b110b4..70a31dd342 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceStatusEnum.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmProcessInstanceStatusEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.enums.task; +package cn.iocoder.yudao.module.bpm.enums.task; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/package-info.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/package-info.java new file mode 100644 index 0000000000..6dab1bf15d --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.bpm; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormService.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmFormService.java similarity index 80% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormService.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmFormService.java index 6b872d4d75..9fb2e80728 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormService.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmFormService.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; +package cn.iocoder.yudao.module.bpm.service.definition; import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.BpmFormCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.BpmFormPageReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.BpmFormUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmFormDO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormUpdateReqVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmFormServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmFormServiceImpl.java similarity index 71% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmFormServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmFormServiceImpl.java index 8bebc39ca9..f2bb6ad7eb 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmFormServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmFormServiceImpl.java @@ -1,15 +1,14 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.definition.impl; +package cn.iocoder.yudao.module.bpm.service.definition; import cn.hutool.core.lang.Assert; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.BpmFormCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.BpmFormPageReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.BpmFormUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmFormConvert; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmFormDO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmFormMapper; -import cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmFormService; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmFormFieldRespDTO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormUpdateReqVO; +import cn.iocoder.yudao.module.bpm.convert.definition.BpmFormConvert; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; +import cn.iocoder.yudao.module.bpm.dal.mysql.definition.BpmFormMapper; +import cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants; +import cn.iocoder.yudao.module.bpm.service.definition.dto.BpmFormFieldRespDTO; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.json.JsonUtils; @@ -64,7 +63,7 @@ public class BpmFormServiceImpl implements BpmFormService { private void validateFormExists(Long id) { if (formMapper.selectById(id) == null) { - throw ServiceExceptionUtil.exception(BpmErrorCodeConstants.FORM_NOT_EXISTS); + throw ServiceExceptionUtil.exception(ErrorCodeConstants.FORM_NOT_EXISTS); } } @@ -104,7 +103,7 @@ public class BpmFormServiceImpl implements BpmFormService { continue; } // 如果存在,则报错 - throw ServiceExceptionUtil.exception(BpmErrorCodeConstants.FORM_FIELD_REPEAT, oldLabel, fieldDTO.getLabel(), fieldDTO.getVModel()); + throw ServiceExceptionUtil.exception(ErrorCodeConstants.FORM_FIELD_REPEAT, oldLabel, fieldDTO.getLabel(), fieldDTO.getVModel()); } } diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupService.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupService.java similarity index 64% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupService.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupService.java index 5d848656b5..2280d4a468 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupService.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupService.java @@ -1,12 +1,12 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; +package cn.iocoder.yudao.module.bpm.service.definition; import java.util.*; import javax.validation.*; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupPageReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmUserGroupDO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupUpdateReqVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmUserGroupDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; /** @@ -61,4 +61,13 @@ public interface BpmUserGroupService { * @return 用户组分页 */ PageResult getUserGroupPage(BpmUserGroupPageReqVO pageReqVO); + + /** + * æ ¡éªŒç”¨æˆ·ç»„ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: + * 1. 用户组编å·ä¸å­˜åœ¨ + * 2. 用户组被ç¦ç”¨ + * + * @param ids ç”¨æˆ·ç»„ç¼–å·æ•°ç»„ + */ + void validUserGroups(Set ids); } diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmUserGroupServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupServiceImpl.java similarity index 61% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmUserGroupServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupServiceImpl.java index 7de593cdfe..79c5aeab26 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmUserGroupServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupServiceImpl.java @@ -1,13 +1,12 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.definition.impl; +package cn.iocoder.yudao.module.bpm.service.definition; import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupPageReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmUserGroupConvert; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmUserGroupDO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmUserGroupMapper; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmUserGroupService; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupUpdateReqVO; +import cn.iocoder.yudao.module.bpm.convert.definition.BpmUserGroupConvert; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmUserGroupDO; +import cn.iocoder.yudao.module.bpm.dal.mysql.definition.BpmUserGroupMapper; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -16,13 +15,11 @@ import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; -import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; -import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.USER_GROUP_IS_DISABLE; -import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.USER_GROUP_NOT_EXISTS; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.USER_GROUP_NOT_EXISTS; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** @@ -85,4 +82,24 @@ public class BpmUserGroupServiceImpl implements BpmUserGroupService { return userGroupMapper.selectPage(pageReqVO); } + @Override + public void validUserGroups(Set ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // èŽ·å¾—ç”¨æˆ·ç»„ä¿¡æ¯ + List userGroups = userGroupMapper.selectBatchIds(ids); + Map userGroupMap = CollectionUtils.convertMap(userGroups, BpmUserGroupDO::getId); + // 校验 + ids.forEach(id -> { + BpmUserGroupDO userGroup = userGroupMap.get(id); + if (userGroup == null) { + throw ServiceExceptionUtil.exception(USER_GROUP_NOT_EXISTS); + } + if (!CommonStatusEnum.ENABLE.getStatus().equals(userGroup.getStatus())) { + throw exception(USER_GROUP_IS_DISABLE, userGroup.getName()); + } + }); + } + } diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmFormFieldRespDTO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/dto/BpmFormFieldRespDTO.java similarity index 86% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmFormFieldRespDTO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/dto/BpmFormFieldRespDTO.java index 2001974a5d..1606192ce7 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmFormFieldRespDTO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/dto/BpmFormFieldRespDTO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto; +package cn.iocoder.yudao.module.bpm.service.definition.dto; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/BpmMessageService.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/message/BpmMessageService.java similarity index 69% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/BpmMessageService.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/message/BpmMessageService.java index 20a25abe0d..8905893b47 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/BpmMessageService.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/message/BpmMessageService.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.message; +package cn.iocoder.yudao.module.bpm.service.message; -import cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO; -import cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceRejectReqDTO; -import cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO; +import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO; +import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceRejectReqDTO; +import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO; import javax.validation.Valid; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/impl/BpmMessageServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/message/BpmMessageServiceImpl.java similarity index 84% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/impl/BpmMessageServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/message/BpmMessageServiceImpl.java index 1c8829876c..c308620f8c 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/impl/BpmMessageServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/message/BpmMessageServiceImpl.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.message.impl; +package cn.iocoder.yudao.module.bpm.service.message; import cn.iocoder.yudao.adminserver.modules.bpm.enums.message.BpmMessageEnum; -import cn.iocoder.yudao.adminserver.modules.bpm.service.message.BpmMessageService; -import cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO; -import cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceRejectReqDTO; -import cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO; +import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService; +import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO; +import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceRejectReqDTO; +import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO; import cn.iocoder.yudao.module.system.service.sms.SysSmsCoreService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceApproveReqDTO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceApproveReqDTO.java similarity index 89% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceApproveReqDTO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceApproveReqDTO.java index ca46631f83..7c37734f97 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceApproveReqDTO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceApproveReqDTO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto; +package cn.iocoder.yudao.module.bpm.service.message.dto; import lombok.Data; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceRejectReqDTO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceRejectReqDTO.java similarity index 91% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceRejectReqDTO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceRejectReqDTO.java index ae444ad34e..0194d03a5d 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceRejectReqDTO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceRejectReqDTO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto; +package cn.iocoder.yudao.module.bpm.service.message.dto; import lombok.Data; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenTaskCreatedReqDTO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/message/dto/BpmMessageSendWhenTaskCreatedReqDTO.java similarity index 93% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenTaskCreatedReqDTO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/message/dto/BpmMessageSendWhenTaskCreatedReqDTO.java index 51d3dc8307..7f696d1d3b 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenTaskCreatedReqDTO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/message/dto/BpmMessageSendWhenTaskCreatedReqDTO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto; +package cn.iocoder.yudao.module.bpm.service.message.dto; import lombok.Data; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormServiceTest.java b/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormServiceTest.java index 91a88c2b5c..86eac7c4ab 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormServiceTest.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormServiceTest.java @@ -2,13 +2,13 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; import cn.hutool.core.util.RandomUtil; import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.BpmFormCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.BpmFormPageReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.BpmFormUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmFormDO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmFormMapper; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmFormFieldRespDTO; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.impl.BpmFormServiceImpl; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormUpdateReqVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; +import cn.iocoder.yudao.module.bpm.dal.mysql.definition.BpmFormMapper; +import cn.iocoder.yudao.module.bpm.service.definition.BpmFormServiceImpl; +import cn.iocoder.yudao.module.bpm.service.definition.dto.BpmFormFieldRespDTO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.json.JsonUtils; import org.junit.jupiter.api.Test; @@ -19,7 +19,7 @@ import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; -import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.FORM_NOT_EXISTS; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.FORM_NOT_EXISTS; import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupServiceTest.java b/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupServiceTest.java index ff16838167..efd671c065 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupServiceTest.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupServiceTest.java @@ -1,24 +1,24 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupPageReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmUserGroupDO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmUserGroupMapper; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.impl.BpmUserGroupServiceImpl; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupUpdateReqVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmUserGroupDO; +import cn.iocoder.yudao.module.bpm.dal.mysql.definition.BpmUserGroupMapper; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.date.DateUtils; import cn.iocoder.yudao.framework.test.core.util.AssertUtils; import cn.iocoder.yudao.framework.test.core.util.RandomUtils; +import cn.iocoder.yudao.module.bpm.service.definition.BpmUserGroupServiceImpl; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.Import; import javax.annotation.Resource; -import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.USER_GROUP_NOT_EXISTS; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.USER_GROUP_NOT_EXISTS; import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; /** diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmModelController.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmModelController.java index c432f6804b..973c9bdd87 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmModelController.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmModelController.java @@ -6,6 +6,7 @@ import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmModelServi import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.io.IoUtils; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.model.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.java index 4e38294c39..cb74221b21 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.java @@ -1,9 +1,9 @@ package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.process.BpmProcessDefinitionListReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.process.BpmProcessDefinitionPageItemRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.process.BpmProcessDefinitionPageReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.process.BpmProcessDefinitionRespVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionListReqVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionPageItemRespVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionRespVO; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.java index b1f3186fd1..1fbaf3b771 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.java @@ -1,8 +1,8 @@ package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleUpdateReqVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleRespVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleUpdateReqVO; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import io.swagger.annotations.Api; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.java index 4f8a394c81..ebf252c1d9 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.java @@ -4,7 +4,7 @@ import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.BpmOALeaveCreat import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.BpmOALeavePageReqVO; import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.BpmOALeaveRespVO; import cn.iocoder.yudao.adminserver.modules.bpm.convert.oa.BpmOALeaveConvert; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.leave.BpmOALeaveDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO; import cn.iocoder.yudao.adminserver.modules.bpm.service.oa.BpmOALeaveService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmModelConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmModelConvert.java index c2b2877207..b6327057e8 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmModelConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmModelConvert.java @@ -4,9 +4,10 @@ import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.model.*; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmModelMetaInfoRespDTO; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; -import cn.iocoder.yudao.coreservice.modules.bpm.api.form.dto.BpmFormDTO; +import cn.iocoder.yudao.module.bpm.api.form.dto.BpmFormDTO; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.json.JsonUtils; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.model.*; import org.activiti.engine.impl.persistence.entity.SuspensionState; import org.activiti.engine.repository.Deployment; import org.activiti.engine.repository.Model; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmProcessDefinitionConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmProcessDefinitionConvert.java index ed85492f29..eba3273f18 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmProcessDefinitionConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmProcessDefinitionConvert.java @@ -1,10 +1,10 @@ package cn.iocoder.yudao.adminserver.modules.bpm.convert.definition; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.process.BpmProcessDefinitionPageItemRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.process.BpmProcessDefinitionRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionPageItemRespVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionRespVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; -import cn.iocoder.yudao.coreservice.modules.bpm.api.form.dto.BpmFormDTO; +import cn.iocoder.yudao.module.bpm.api.form.dto.BpmFormDTO; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import org.activiti.engine.impl.persistence.entity.SuspensionState; import org.activiti.engine.repository.Deployment; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmTaskAssignRuleConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmTaskAssignRuleConvert.java index a0f9528932..2701a1f197 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmTaskAssignRuleConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmTaskAssignRuleConvert.java @@ -1,10 +1,9 @@ package cn.iocoder.yudao.adminserver.modules.bpm.convert.definition; -import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleRespVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleUpdateReqVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import org.activiti.bpmn.model.UserTask; import org.mapstruct.Mapper; @@ -12,7 +11,6 @@ import org.mapstruct.factory.Mappers; import java.util.List; import java.util.Map; -import java.util.function.Function; @Mapper public interface BpmTaskAssignRuleConvert { diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/message/BpmMessageConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/message/BpmMessageConvert.java index 469424e67e..ca84b72a9e 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/message/BpmMessageConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/message/BpmMessageConvert.java @@ -1,8 +1,8 @@ package cn.iocoder.yudao.adminserver.modules.bpm.convert.message; -import cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO; -import cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceRejectReqDTO; -import cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO; +import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO; +import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceRejectReqDTO; +import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO; import cn.iocoder.yudao.module.system.dal.dataobject.user.SysUserDO; import org.activiti.api.task.model.Task; import org.activiti.engine.runtime.ProcessInstance; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/oa/BpmOALeaveConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/oa/BpmOALeaveConvert.java index 8c7c1d8bfc..49c5d8bd12 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/oa/BpmOALeaveConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/oa/BpmOALeaveConvert.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.convert.oa; import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.BpmOALeaveCreateReqVO; import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.BpmOALeaveRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.leave.BpmOALeaveDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmActivityConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmActivityConvert.java index b72e28ac64..a9882f9606 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmActivityConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmActivityConvert.java @@ -1,8 +1,6 @@ package cn.iocoder.yudao.adminserver.modules.bpm.convert.task; import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.activity.BpmActivityRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmTaskExtDO; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import org.activiti.engine.history.HistoricActivityInstance; import org.mapstruct.Mapper; import org.mapstruct.Mapping; @@ -10,7 +8,6 @@ import org.mapstruct.Mappings; import org.mapstruct.factory.Mappers; import java.util.List; -import java.util.Map; /** * BPM 活动 Convert diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java index cd0839fe00..304894e599 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java @@ -2,8 +2,8 @@ package cn.iocoder.yudao.adminserver.modules.bpm.convert.task; import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstancePageItemRespVO; import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event.BpmProcessInstanceResultEvent; import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.module.system.dal.dataobject.user.SysUserDO; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmTaskConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmTaskConvert.java index 117d2c1cf8..4e092f8502 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmTaskConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmTaskConvert.java @@ -3,7 +3,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.convert.task; import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.BpmTaskDonePageItemRespVO; import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.BpmTaskRespVO; import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.BpmTaskTodoPageItemRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmTaskExtDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO; import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.module.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmProcessDefinitionExtMapper.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmProcessDefinitionExtMapper.java index 2a347eee43..eeed00bb60 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmProcessDefinitionExtMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmProcessDefinitionExtMapper.java @@ -1,9 +1,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import java.util.Collection; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmTaskAssignRuleMapper.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmTaskAssignRuleMapper.java index 14459c80cf..3879a0f071 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmTaskAssignRuleMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmTaskAssignRuleMapper.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; import org.apache.ibatis.annotations.Mapper; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/oa/BpmOALeaveMapper.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/oa/BpmOALeaveMapper.java index 1941744e60..4c47ea8bc9 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/oa/BpmOALeaveMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/oa/BpmOALeaveMapper.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.oa; import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.BpmOALeavePageReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.leave.BpmOALeaveDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java index 0fbb455a64..8fdc031dd4 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.task; import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceMyPageReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmTaskExtMapper.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmTaskExtMapper.java index 2ac2995dfb..b89f1a2450 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmTaskExtMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmTaskExtMapper.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.task; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmTaskExtDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.apache.ibatis.annotations.Mapper; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java index 307dd300e2..2802211533 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java @@ -6,7 +6,7 @@ import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event.Bp import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.identity.EmptyUserGroupManager; import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.listener.BpmTackActivitiEventListener; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; -import cn.iocoder.yudao.coreservice.modules.bpm.api.group.BpmUserGroupServiceApi; +import cn.iocoder.yudao.module.bpm.api.group.BpmUserGroupServiceApi; import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; import cn.iocoder.yudao.module.system.service.permission.SysPermissionCoreService; import cn.iocoder.yudao.module.system.service.user.SysUserCoreService; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java index bc3d956912..d401cfacc7 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavio import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; -import cn.iocoder.yudao.coreservice.modules.bpm.api.group.BpmUserGroupServiceApi; +import cn.iocoder.yudao.module.bpm.api.group.BpmUserGroupServiceApi; import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; import cn.iocoder.yudao.module.system.service.permission.SysPermissionCoreService; import cn.iocoder.yudao.module.system.service.user.SysUserCoreService; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java index aa6cb1f131..70d1305029 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java @@ -3,12 +3,12 @@ package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavio import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; -import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmTaskAssignRuleTypeEnum; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; +import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskAssignRuleTypeEnum; import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; -import cn.iocoder.yudao.coreservice.modules.bpm.api.group.BpmUserGroupServiceApi; -import cn.iocoder.yudao.coreservice.modules.bpm.api.group.dto.BpmUserGroupDTO; +import cn.iocoder.yudao.module.bpm.api.group.BpmUserGroupServiceApi; +import cn.iocoder.yudao.module.bpm.api.group.dto.BpmUserGroupDTO; import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.module.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; @@ -28,8 +28,8 @@ import org.activiti.engine.impl.persistence.entity.TaskEntityManager; import java.util.*; -import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.TASK_ASSIGN_SCRIPT_NOT_EXISTS; -import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.TASK_CREATE_FAIL_NO_CANDIDATE_USER; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.TASK_ASSIGN_SCRIPT_NOT_EXISTS; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.TASK_CREATE_FAIL_NO_CANDIDATE_USER; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/package-info.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/package-info.java index eaf54d5ddb..a67b29bf09 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/package-info.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/package-info.java @@ -1,5 +1,5 @@ /** - * 拓展 {@link org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior} 实现,基于 {@link cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO} 实现自定义的任务分é…规则。 + * 拓展 {@link org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior} 实现,基于 {@link cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO} 实现自定义的任务分é…规则。 * 原因:BPMN 默认的 assignã€candidateUsersã€candidateGroups æ‹“å±•èµ·æ¥æœ‰ä¸€å®šçš„难度,所以选择放弃它们,使用自己定义的规则。 * * @author èŠ‹é“æºç  diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/BpmTaskAssignScript.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/BpmTaskAssignScript.java index b70b1ce722..5e6f43a9a1 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/BpmTaskAssignScript.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/BpmTaskAssignScript.java @@ -1,9 +1,8 @@ package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script; -import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmTaskRuleScriptEnum; +import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskRuleScriptEnum; import org.activiti.engine.impl.persistence.entity.TaskEntity; -import java.util.List; import java.util.Set; /** diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX1Script.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX1Script.java index d29029bb3d..39451903a3 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX1Script.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX1Script.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.impl; -import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmTaskRuleScriptEnum; +import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskRuleScriptEnum; import org.activiti.engine.impl.persistence.entity.TaskEntity; import org.springframework.stereotype.Component; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2Script.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2Script.java index 35d7f73568..9fc9c806b7 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2Script.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2Script.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.impl; -import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmTaskRuleScriptEnum; +import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskRuleScriptEnum; import org.activiti.engine.impl.persistence.entity.TaskEntity; import org.springframework.stereotype.Component; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignStartUserScript.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignStartUserScript.java index 3f7617fdb2..3cf33be59f 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignStartUserScript.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignStartUserScript.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.impl; -import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmTaskRuleScriptEnum; +import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskRuleScriptEnum; import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; import cn.iocoder.yudao.framework.common.util.collection.SetUtils; import org.activiti.engine.impl.persistence.entity.TaskEntity; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEvent.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEvent.java index d9f9524a3a..08c43413e0 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEvent.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEvent.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; import lombok.Data; import org.springframework.context.ApplicationEvent; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java index 90c1f3ef1a..14ba6cf6e7 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java @@ -1,14 +1,12 @@ package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.listener; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; import org.activiti.api.model.shared.event.RuntimeEvent; import org.activiti.api.process.model.ProcessInstance; import org.activiti.api.process.model.events.ProcessRuntimeEvent; import org.activiti.api.process.runtime.events.ProcessCancelledEvent; -import org.activiti.api.process.runtime.events.listener.ProcessEventListener; import org.activiti.api.process.runtime.events.listener.ProcessRuntimeEventListener; -import org.activiti.api.task.model.events.TaskRuntimeEvent; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTaskEventListener.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTaskEventListener.java index b03f6b8021..15809c5aea 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTaskEventListener.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTaskEventListener.java @@ -1,13 +1,10 @@ package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.listener; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmTaskExtDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO; import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; import org.activiti.api.model.shared.event.RuntimeEvent; -import org.activiti.api.process.model.ProcessInstance; -import org.activiti.api.process.model.events.ProcessRuntimeEvent; import org.activiti.api.task.model.Task; import org.activiti.api.task.model.events.TaskRuntimeEvent; -import org.activiti.api.task.runtime.events.listener.TaskEventListener; import org.activiti.api.task.runtime.events.listener.TaskRuntimeEventListener; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/package-info.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/package-info.java index 1b704ce3f7..1badfe46c3 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/package-info.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/package-info.java @@ -1,6 +1,6 @@ /** * 自定义å„ç§ Activiti 的监å¬å™¨ï¼Œå®žçްæµç¨‹ç¤ºä¾‹ã€æµç¨‹ä»»åŠ¡çš„æ‹“å±•è¡¨ä¿¡æ¯çš„åŒæ­¥ - * 例如说,{@link org.activiti.api.task.model.Task} æ–°å»ºæ—¶ï¼Œæˆ‘ä»¬ä¹Ÿè¦æ–°å»ºå¯¹åº”çš„ {@link cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmTaskExtDO} 记录 + * 例如说,{@link org.activiti.api.task.model.Task} æ–°å»ºæ—¶ï¼Œæˆ‘ä»¬ä¹Ÿè¦æ–°å»ºå¯¹åº”çš„ {@link cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO} 记录 * * @author èŠ‹é“æºç  */ diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmModelService.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmModelService.java index 496f9a45f9..be7cdadb68 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmModelService.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmModelService.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.model.*; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.model.*; import org.activiti.bpmn.model.BpmnModel; import javax.validation.Valid; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmProcessDefinitionService.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmProcessDefinitionService.java index b4a04a101d..688098b017 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmProcessDefinitionService.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmProcessDefinitionService.java @@ -1,10 +1,10 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.process.BpmProcessDefinitionListReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.process.BpmProcessDefinitionPageItemRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.process.BpmProcessDefinitionPageReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.process.BpmProcessDefinitionRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionListReqVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionPageItemRespVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionRespVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmTaskAssignRuleService.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmTaskAssignRuleService.java index 1105ddaa7e..40594c44a4 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmTaskAssignRuleService.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmTaskAssignRuleService.java @@ -1,10 +1,9 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; -import org.activiti.engine.repository.ProcessDefinition; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleRespVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleUpdateReqVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; import org.springframework.lang.Nullable; import javax.validation.Valid; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmModelMetaInfoRespDTO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmModelMetaInfoRespDTO.java index 5ff8f18151..ab141a69af 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmModelMetaInfoRespDTO.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmModelMetaInfoRespDTO.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto; -import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmModelFormTypeEnum; +import cn.iocoder.yudao.module.bpm.enums.definition.BpmModelFormTypeEnum; import lombok.Data; /** diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmProcessDefinitionCreateReqDTO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmProcessDefinitionCreateReqDTO.java index 11a8245d5a..0f275eb6d5 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmProcessDefinitionCreateReqDTO.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmProcessDefinitionCreateReqDTO.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmModelFormTypeEnum; +import cn.iocoder.yudao.module.bpm.enums.definition.BpmModelFormTypeEnum; import lombok.Data; import javax.validation.constraints.AssertTrue; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmModelServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmModelServiceImpl.java index 1f5882a4bb..e70fae67c3 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmModelServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmModelServiceImpl.java @@ -4,16 +4,17 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.model.*; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleRespVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.model.*; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleRespVO; import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmModelConvert; -import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmModelFormTypeEnum; +import cn.iocoder.yudao.module.bpm.enums.definition.BpmModelFormTypeEnum; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmModelService; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmModelMetaInfoRespDTO; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; -import cn.iocoder.yudao.coreservice.modules.bpm.api.form.BpmFormServiceApi; -import cn.iocoder.yudao.coreservice.modules.bpm.api.form.dto.BpmFormDTO; +import cn.iocoder.yudao.module.bpm.api.form.BpmFormServiceApi; +import cn.iocoder.yudao.module.bpm.api.form.dto.BpmFormDTO; import cn.iocoder.yudao.framework.activiti.core.util.ActivitiUtils; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; @@ -37,7 +38,7 @@ import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.util.*; -import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.*; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmProcessDefinitionServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmProcessDefinitionServiceImpl.java index 9d906d5eb6..67dc6e1683 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmProcessDefinitionServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmProcessDefinitionServiceImpl.java @@ -3,17 +3,17 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.definition.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.process.BpmProcessDefinitionListReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.process.BpmProcessDefinitionPageItemRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.process.BpmProcessDefinitionPageReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.process.BpmProcessDefinitionRespVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionListReqVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionPageItemRespVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionRespVO; import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmProcessDefinitionConvert; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmProcessDefinitionExtMapper; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; -import cn.iocoder.yudao.coreservice.modules.bpm.api.form.BpmFormServiceApi; -import cn.iocoder.yudao.coreservice.modules.bpm.api.form.dto.BpmFormDTO; +import cn.iocoder.yudao.module.bpm.api.form.BpmFormServiceApi; +import cn.iocoder.yudao.module.bpm.api.form.dto.BpmFormDTO; import cn.iocoder.yudao.framework.activiti.core.util.ActivitiUtils; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.PageUtils; @@ -31,8 +31,8 @@ import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.util.*; -import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.PROCESS_DEFINITION_KEY_NOT_MATCH; -import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.PROCESS_DEFINITION_NAME_NOT_MATCH; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.PROCESS_DEFINITION_KEY_NOT_MATCH; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.PROCESS_DEFINITION_NAME_NOT_MATCH; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; import static java.util.Collections.emptyList; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java index 2364339ed0..b58ab0cb94 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java @@ -3,17 +3,17 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.definition.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleUpdateReqVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleRespVO; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleUpdateReqVO; import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmTaskAssignRuleConvert; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmTaskAssignRuleMapper; -import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmTaskAssignRuleTypeEnum; +import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskAssignRuleTypeEnum; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmModelService; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; -import cn.iocoder.yudao.coreservice.modules.bpm.api.group.BpmUserGroupServiceApi; +import cn.iocoder.yudao.module.bpm.api.group.BpmUserGroupServiceApi; import cn.iocoder.yudao.module.system.enums.SysDictTypeConstants; import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; import cn.iocoder.yudao.module.system.service.dept.SysPostCoreService; @@ -33,7 +33,6 @@ import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.util.*; -import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveService.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveService.java index 62d991d84f..bb4e0de8b6 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveService.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveService.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.oa; import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.*; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.leave.BpmOALeaveDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import javax.validation.Valid; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/impl/BpmOALeaveServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/impl/BpmOALeaveServiceImpl.java index f55836d6e3..31e881242d 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/impl/BpmOALeaveServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/impl/BpmOALeaveServiceImpl.java @@ -3,9 +3,9 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.oa.impl; import cn.hutool.core.date.DateUtil; import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.*; import cn.iocoder.yudao.adminserver.modules.bpm.convert.oa.BpmOALeaveConvert; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.leave.BpmOALeaveDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO; import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.oa.BpmOALeaveMapper; -import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum; +import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; import cn.iocoder.yudao.adminserver.modules.bpm.service.oa.BpmOALeaveService; import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; import cn.iocoder.yudao.adminserver.modules.bpm.service.task.dto.BpmProcessInstanceCreateReqDTO; @@ -17,7 +17,6 @@ import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.util.*; -import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java index 8defdd23de..1fc2bffc15 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java @@ -1,8 +1,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.task; import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.*; -import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceDeleteReasonEnum; -import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum; +import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceDeleteReasonEnum; import cn.iocoder.yudao.adminserver.modules.bpm.service.task.dto.BpmProcessInstanceCreateReqDTO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskService.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskService.java index cad468a2e3..b6162dbd8e 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskService.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskService.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.task; import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.*; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmTaskExtDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import org.activiti.engine.task.Task; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmActivityServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmActivityServiceImpl.java index 7c4253ec6e..34f7604c08 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmActivityServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmActivityServiceImpl.java @@ -3,8 +3,6 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.task.impl; import cn.hutool.core.io.IoUtil; import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.activity.BpmActivityRespVO; import cn.iocoder.yudao.adminserver.modules.bpm.convert.task.BpmActivityConvert; -import cn.iocoder.yudao.adminserver.modules.bpm.convert.task.BpmTaskConvert; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmTaskExtDO; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmActivityService; import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; @@ -13,8 +11,6 @@ import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import lombok.extern.slf4j.Slf4j; import org.activiti.bpmn.model.BpmnModel; import org.activiti.engine.HistoryService; -import org.activiti.engine.RepositoryService; -import org.activiti.engine.RuntimeService; import org.activiti.engine.history.HistoricActivityInstance; import org.activiti.engine.history.HistoricProcessInstance; import org.activiti.engine.task.Task; @@ -26,9 +22,7 @@ import javax.annotation.Resource; import java.io.InputStream; import java.util.Collections; import java.util.List; -import java.util.Map; -import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java index df44537833..8aa06f3504 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java @@ -6,15 +6,15 @@ import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.*; import cn.iocoder.yudao.adminserver.modules.bpm.convert.message.BpmMessageConvert; import cn.iocoder.yudao.adminserver.modules.bpm.convert.task.BpmProcessInstanceConvert; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.task.BpmProcessInstanceExtMapper; -import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceDeleteReasonEnum; -import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum; -import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceStatusEnum; +import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceDeleteReasonEnum; +import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; +import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceStatusEnum; import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event.BpmProcessInstanceResultEventPublisher; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; -import cn.iocoder.yudao.adminserver.modules.bpm.service.message.BpmMessageService; +import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService; import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; import cn.iocoder.yudao.adminserver.modules.bpm.service.task.dto.BpmProcessInstanceCreateReqDTO; @@ -39,7 +39,6 @@ import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.util.*; -import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java index 5f97a2561a..b694b25aa8 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java @@ -5,10 +5,10 @@ import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.*; import cn.iocoder.yudao.adminserver.modules.bpm.convert.message.BpmMessageConvert; import cn.iocoder.yudao.adminserver.modules.bpm.convert.task.BpmTaskConvert; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmTaskExtDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO; import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.task.BpmTaskExtMapper; -import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum; -import cn.iocoder.yudao.adminserver.modules.bpm.service.message.BpmMessageService; +import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; +import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService; import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; @@ -39,7 +39,6 @@ import javax.annotation.Resource; import javax.validation.Valid; import java.util.*; -import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java index 082d9c9486..c10a614ae4 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java @@ -1,13 +1,13 @@ package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior; import cn.hutool.core.map.MapUtil; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; -import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmTaskAssignRuleTypeEnum; -import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmTaskRuleScriptEnum; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; +import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskAssignRuleTypeEnum; +import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskRuleScriptEnum; import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; -import cn.iocoder.yudao.coreservice.modules.bpm.api.group.BpmUserGroupServiceApi; -import cn.iocoder.yudao.coreservice.modules.bpm.api.group.dto.BpmUserGroupDTO; +import cn.iocoder.yudao.module.bpm.api.group.BpmUserGroupServiceApi; +import cn.iocoder.yudao.module.bpm.api.group.dto.BpmUserGroupDTO; import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; import cn.iocoder.yudao.module.system.dal.dataobject.user.SysUserDO; import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; From f39bfdab896f1ce0803c8ddc9e6782a9e843c183 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Tue, 1 Feb 2022 20:33:03 +0800 Subject: [PATCH 27/47] =?UTF-8?q?=E5=A4=9A=E6=A8=A1=E5=9D=97=E9=87=8D?= =?UTF-8?q?=E6=9E=84=208=EF=BC=9Abom=20=E6=A8=A1=E5=9D=97=EF=BC=8C?= =?UTF-8?q?=E5=B0=9D=E8=AF=95=E5=85=AC=E7=94=A8=E9=83=A8=E5=88=86=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yudao-admin-server/pom.xml | 25 +------ .../src/main/resources/application.yaml | 5 +- .../framework/web/config/WebProperties.java | 14 ++++ yudao-module-bpm/TODO.md | 5 +- .../module/bpm/enums/ErrorCodeConstants.java | 5 ++ .../yudao-module-bpm-base/pom.xml | 11 +++ .../definition/vo/form/BpmFormBaseVO.java | 1 - .../controller/oa/vo/BpmOALeaveBaseVO.java | 2 +- .../oa/vo/BpmOALeaveCreateReqVO.java | 2 +- .../controller/oa/vo/BpmOALeavePageReqVO.java | 2 +- .../controller/oa/vo/BpmOALeaveRespVO.java | 2 +- .../task/vo/activity/BpmActivityRespVO.java | 2 +- .../BpmProcessInstanceCancelReqVO.java | 2 +- .../BpmProcessInstanceCreateReqVO.java | 2 +- .../BpmProcessInstanceMyPageReqVO.java | 2 +- .../BpmProcessInstancePageItemRespVO.java | 2 +- .../vo/instance/BpmProcessInstanceRespVO.java | 2 +- .../task/vo/task/BpmTaskApproveReqVO.java | 2 +- .../vo/task/BpmTaskDonePageItemRespVO.java | 2 +- .../task/vo/task/BpmTaskDonePageReqVO.java | 2 +- .../task/vo/task/BpmTaskRejectReqVO.java | 2 +- .../task/vo/task/BpmTaskRespVO.java | 4 +- .../vo/task/BpmTaskTodoPageItemRespVO.java | 2 +- .../task/vo/task/BpmTaskTodoPageReqVO.java | 2 +- .../vo/task/BpmTaskUpdateAssigneeReqVO.java | 2 +- .../convert/definition/BpmFormConvert.java | 5 -- .../definition/BpmUserGroupConvert.java | 2 - .../convert/message/BpmMessageConvert.java | 16 +++++ .../module/bpm/convert/oa/package-info.java | 1 + .../module/bpm/convert/task/package-info.java | 1 + .../definition/BpmProcessDefinitionExtDO.java | 9 +-- .../definition/BpmTaskAssignRuleDO.java | 13 ++-- .../bpm/dal/dataobject/oa/BpmOALeaveDO.java | 9 ++- .../task/BpmProcessInstanceExtDO.java | 24 +++---- .../bpm/dal/dataobject/task/BpmTaskExtDO.java | 23 +++---- .../BpmProcessDefinitionExtMapper.java | 2 +- .../definition/BpmTaskAssignRuleMapper.java | 2 +- .../bpm/dal/mysql/oa/BpmOALeaveMapper.java | 4 +- .../task/BpmProcessInstanceExtMapper.java | 4 +- .../bpm/dal/mysql/task/BpmTaskExtMapper.java | 2 +- .../bpm/enums/message/BpmMessageEnum.java | 6 +- .../definition/BpmUserGroupService.java | 9 +++ .../definition/BpmUserGroupServiceImpl.java | 8 ++- .../message/BpmMessageServiceImpl.java | 28 ++++---- .../BpmMessageSendWhenTaskCreatedReqDTO.java | 2 +- .../module/bpm/service/task/package-info.java | 1 + .../definition/BpmModelController.java | 1 - .../controller/oa/BpmOALeaveController.java | 6 +- .../task/BpmActivityController.java | 2 +- .../task/BpmProcessInstanceController.java | 4 +- .../controller/task/BpmTaskController.java | 5 +- .../convert/definition/BpmModelConvert.java | 11 ++- .../BpmProcessDefinitionConvert.java | 8 +-- .../convert/message/BpmMessageConvert.java | 6 +- .../bpm/convert/oa/BpmOALeaveConvert.java | 4 +- .../bpm/convert/task/BpmActivityConvert.java | 2 +- .../task/BpmProcessInstanceConvert.java | 12 ++-- .../bpm/convert/task/BpmTaskConvert.java | 34 ++++----- .../config/BpmActivitiConfiguration.java | 27 ++++---- .../behavior/BpmActivityBehaviorFactory.java | 26 +++---- .../behavior/BpmUserTaskActivitiBehavior.java | 55 ++++++++------- .../BpmTaskAssignLeaderAbstractScript.java | 23 ++++--- .../{impl => }/BpmModelServiceImpl.java | 28 ++++---- .../BpmProcessDefinitionServiceImpl.java | 27 ++++---- .../BpmTaskAssignRuleServiceImpl.java | 46 ++++++------- .../bpm/service/oa/BpmOALeaveService.java | 3 +- .../oa/{impl => }/BpmOALeaveServiceImpl.java | 9 +-- .../oa/listener/BpmOALeaveResultListener.java | 2 +- .../bpm/service/task/BpmActivityService.java | 2 +- .../{impl => }/BpmActivityServiceImpl.java | 9 +-- .../task/BpmProcessInstanceService.java | 2 +- .../BpmProcessInstanceServiceImpl.java | 27 ++++---- .../bpm/service/task/BpmTaskService.java | 2 +- .../task/{impl => }/BpmTaskServiceImpl.java | 31 ++++----- .../BpmUserTaskActivitiBehaviorTest.java | 69 ++++++++++--------- .../impl/BpmTaskAssignLeaderX2ScriptTest.java | 42 +++++------ .../member/convert/auth/AuthConvert.java | 4 +- .../service/user/MemberUserServiceImpl.java | 2 +- .../yudao/module/system/api/dept/DeptApi.java | 50 ++++++++++++++ .../yudao/module/system/api/dept/PostApi.java | 21 ++++++ .../system/api/dept/dto/DeptRespDTO.java | 37 ++++++++++ .../module/system/api/dict/DictDataApi.java | 22 ++++++ .../system/api/permission/PermissionApi.java | 21 ++++++ .../module/system/api/permission/RoleApi.java | 21 ++++++ .../module/system/api/sms/SmsCodeApi.java | 6 +- .../module/system/api/sms/SmsSendApi.java | 34 +++++++++ .../dto/{ => code}/SmsCodeCheckReqDTO.java | 2 +- .../sms/dto/{ => code}/SmsCodeSendReqDTO.java | 2 +- .../sms/dto/{ => code}/SmsCodeUseReqDTO.java | 2 +- .../dto/send/SmsSendSingleToUserReqDTO.java | 38 ++++++++++ .../module/system/api/user/AdminUserApi.java | 58 ++++++++++++++++ .../system/api/user/dto/AdminUserRespDTO.java | 44 ++++++++++++ .../module/system/api/dept/DeptApiImpl.java | 49 +++++++++++++ .../api/permission/PermissionApiImpl.java | 26 +++++++ .../module/system/api/sms/SmsCodeApiImpl.java | 6 +- .../module/system/api/sms/SmsSendApiImpl.java | 34 +++++++++ .../system/api/user/AdminUserApiImpl.java | 55 +++++++++++++++ .../system/convert/dept/DeptConvert.java | 8 +++ .../system/convert/user/UserConvert.java | 9 +++ .../system/service/dept/DeptService.java | 1 - .../system/service/sms/SmsCodeService.java | 6 +- .../service/sms/SmsCodeServiceImpl.java | 11 +-- 102 files changed, 945 insertions(+), 424 deletions(-) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/oa/vo/BpmOALeaveBaseVO.java (94%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/oa/vo/BpmOALeaveCreateReqVO.java (88%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/oa/vo/BpmOALeavePageReqVO.java (94%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/oa/vo/BpmOALeaveRespVO.java (93%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/task/vo/activity/BpmActivityRespVO.java (91%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/task/vo/instance/BpmProcessInstanceCancelReqVO.java (89%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/task/vo/instance/BpmProcessInstanceCreateReqVO.java (87%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/task/vo/instance/BpmProcessInstanceMyPageReqVO.java (95%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/task/vo/instance/BpmProcessInstancePageItemRespVO.java (95%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/task/vo/instance/BpmProcessInstanceRespVO.java (97%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/task/vo/task/BpmTaskApproveReqVO.java (90%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/task/vo/task/BpmTaskDonePageItemRespVO.java (92%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/task/vo/task/BpmTaskDonePageReqVO.java (93%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/task/vo/task/BpmTaskRejectReqVO.java (88%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/task/vo/task/BpmTaskRespVO.java (91%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/task/vo/task/BpmTaskTodoPageItemRespVO.java (95%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/task/vo/task/BpmTaskTodoPageReqVO.java (93%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/controller/task/vo/task/BpmTaskUpdateAssigneeReqVO.java (91%) create mode 100644 yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/message/BpmMessageConvert.java create mode 100644 yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/package-info.java create mode 100644 yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/package-info.java rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/dal/mysql/definition/BpmProcessDefinitionExtMapper.java (91%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/dal/mysql/definition/BpmTaskAssignRuleMapper.java (95%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/dal/mysql/oa/BpmOALeaveMapper.java (87%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java (90%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/dal/mysql/task/BpmTaskExtMapper.java (93%) create mode 100644 yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/task/package-info.java rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/{impl => }/BpmModelServiceImpl.java (93%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/{impl => }/BpmProcessDefinitionServiceImpl.java (96%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/{impl => }/BpmTaskAssignRuleServiceImpl.java (83%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/{impl => }/BpmOALeaveServiceImpl.java (89%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/{impl => }/BpmActivityServiceImpl.java (86%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/{impl => }/BpmProcessInstanceServiceImpl.java (93%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/{impl => }/BpmTaskServiceImpl.java (91%) create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dept/DeptApi.java create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dept/PostApi.java create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dept/dto/DeptRespDTO.java create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dict/DictDataApi.java create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/permission/PermissionApi.java create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/permission/RoleApi.java create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/SmsSendApi.java rename yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/{ => code}/SmsCodeCheckReqDTO.java (92%) rename yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/{ => code}/SmsCodeSendReqDTO.java (92%) rename yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/{ => code}/SmsCodeUseReqDTO.java (93%) create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/send/SmsSendSingleToUserReqDTO.java create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/user/AdminUserApi.java create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/user/dto/AdminUserRespDTO.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/dept/DeptApiImpl.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/permission/PermissionApiImpl.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/sms/SmsSendApiImpl.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/user/AdminUserApiImpl.java diff --git a/yudao-admin-server/pom.xml b/yudao-admin-server/pom.xml index eb52218684..e27f025d70 100644 --- a/yudao-admin-server/pom.xml +++ b/yudao-admin-server/pom.xml @@ -42,28 +42,13 @@ yudao-module-pay-impl ${revision} - - + cn.iocoder.boot - yudao-module-bpm-activiti + yudao-module-bpm-impl-activiti ${revision} - - - - cn.iocoder.boot - yudao-spring-boot-starter-biz-dict - - - - cn.iocoder.boot - yudao-spring-boot-starter-biz-tenant - - - - org.springframework.boot @@ -88,12 +73,6 @@ spring-boot-admin-starter-server - - - - com.xkcoding.justauth - justauth-spring-boot-starter - diff --git a/yudao-admin-server/src/main/resources/application.yaml b/yudao-admin-server/src/main/resources/application.yaml index b352943a88..e5761d5d09 100644 --- a/yudao-admin-server/src/main/resources/application.yaml +++ b/yudao-admin-server/src/main/resources/application.yaml @@ -58,7 +58,8 @@ yudao: app-api: prefix: /app-api controller: '**.controller.app.**' - + admin-ui: + url: http://dashboard.yudao.iocoder.cn # Admin 管ç†åŽå° UI çš„åœ°å€ swagger: title: 管ç†åŽå° description: æä¾›ç®¡ç†å‘˜ç®¡ç†çš„æ‰€æœ‰åŠŸèƒ½ @@ -78,8 +79,6 @@ yudao: - cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants tenant: # 多租户相关é…置项 tables: # é…置需è¦å¼€å¯å¤šç§Ÿæˆ·çš„表;如果实体已ç»ç»§æ‰¿ TenantBaseDO 类,则无需é‡å¤é…ç½® - url: ## TODO 芋艿:è¿ç§»åˆ° web é…置项下, - admin-ui: http://dashboard.yudao.iocoder.cn # Admin 管ç†åŽå° UI çš„åœ°å€ sms-code: # 短信验è¯ç ç›¸å…³çš„é…置项 expire-times: 10m send-frequency: 1m diff --git a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/config/WebProperties.java b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/config/WebProperties.java index a7058871e8..173a67042e 100644 --- a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/config/WebProperties.java +++ b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/config/WebProperties.java @@ -19,6 +19,9 @@ public class WebProperties { @NotNull(message = "Admin API ä¸èƒ½ä¸ºç©º") private Api adminApi; + @NotNull(message = "Admin UI ä¸èƒ½ä¸ºç©º") + private Ui adminUi; + @Data @Valid public static class Api { @@ -45,4 +48,15 @@ public class WebProperties { } + @Data + @Valid + public static class Ui { + + /** + * è®¿é—®åœ°å€ + */ + private String url; + + } + } diff --git a/yudao-module-bpm/TODO.md b/yudao-module-bpm/TODO.md index 35a2e25b1f..d155eaa5f9 100644 --- a/yudao-module-bpm/TODO.md +++ b/yudao-module-bpm/TODO.md @@ -1,6 +1,7 @@ 1. ç±»åå¯ä»¥åŽ»æŽ‰ Bpm å‰ç¼€å“ˆ + 2. åŽç»­æŽ¥å£æˆ‘ä»¬åˆ†æˆ admin 管ç†åŽå¤©ï¼Œapp 用户å‰ç«¯ï¼›æ‰€ä»¥ controller åŒ…ä¸‹ï¼Œéœ€è¦æœ‰ admin å’Œ app 两个å­åŒ…。å¯è§ https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/feature/multi-module/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller -3. yudao-module-xxx-api 是暴露接å£ç»™å¤–部模å—,所以å¯ä»¥æŠŠ yudao-module-bpm-core-service-api æ”¹æˆ yudao-module-bpm-api。大概率用ä¸äº†æš´éœ² BpmUserGroupServiceApi 哈。 -4. yudao-module-bpm-core-service-impl 模å—,è¦ä¸æ”¹æˆ yudao-module-bpm-base,本质上是æä¾›ç»™ yudao-module-bpm-flowable-impl å’Œ yudao-module-bpm-activiti-impl 继承的。这样的è¯ï¼Œæˆ‘们在 yudao-module-bpm-base: + +3. yudao-module-bpm-core-service-impl 模å—,è¦ä¸æ”¹æˆ yudao-module-bpm-base,本质上是æä¾›ç»™ yudao-module-bpm-flowable-impl å’Œ yudao-module-bpm-activiti-impl 继承的。这样的è¯ï¼Œæˆ‘们在 yudao-module-bpm-base: * 定义一些å¯è¢«ç»§æ‰¿çš„类,例如说 ModelAbstractServiceï¼› * 定义一些无需被继承的类,例如说 UserGroupServiceã€UserGroupController 等等; diff --git a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java index 74281aaac2..45fa3fa877 100644 --- a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java +++ b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java @@ -55,5 +55,10 @@ public interface ErrorCodeConstants { // ========== 动æ€è¡¨å•æ¨¡å— 1-009-010-000 ========== ErrorCode FORM_NOT_EXISTS = new ErrorCode(1009010000, "动æ€è¡¨å•ä¸å­˜åœ¨"); + ErrorCode FORM_FIELD_REPEAT = new ErrorCode(1009010000, "表å•项({}) å’Œ ({}) 使用了相åŒçš„字段å({})"); + + // ========== ç”¨æˆ·ç»„æ¨¡å— 1-009-011-000 ========== + ErrorCode USER_GROUP_NOT_EXISTS = new ErrorCode(1009011000, "用户组ä¸å­˜åœ¨"); + ErrorCode USER_GROUP_IS_DISABLE = new ErrorCode(1009011001, "å字为ã€{}】的用户组已被ç¦ç”¨"); } diff --git a/yudao-module-bpm/yudao-module-bpm-base/pom.xml b/yudao-module-bpm/yudao-module-bpm-base/pom.xml index 5b839de9e0..8889428445 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/pom.xml +++ b/yudao-module-bpm/yudao-module-bpm-base/pom.xml @@ -21,6 +21,17 @@ yudao-module-bpm-api ${revision} + + cn.iocoder.boot + yudao-module-system-api + ${revision} + + + + + cn.iocoder.boot + yudao-spring-boot-starter-biz-operatelog + diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormBaseVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormBaseVO.java index 6a518b86ac..1eb2ccd822 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormBaseVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormBaseVO.java @@ -1,6 +1,5 @@ package cn.iocoder.yudao.module.bpm.controller.definition.vo.form; -import com.sun.istack.internal.NotNull; import lombok.*; import io.swagger.annotations.*; import javax.validation.constraints.*; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveBaseVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/vo/BpmOALeaveBaseVO.java similarity index 94% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveBaseVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/vo/BpmOALeaveBaseVO.java index e7128b50d3..6790cf28f1 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveBaseVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/vo/BpmOALeaveBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo; +package cn.iocoder.yudao.module.bpm.controller.oa.vo; import lombok.*; import java.util.*; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/vo/BpmOALeaveCreateReqVO.java similarity index 88% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveCreateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/vo/BpmOALeaveCreateReqVO.java index f36e924b17..2e4ec99d07 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveCreateReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/vo/BpmOALeaveCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo; +package cn.iocoder.yudao.module.bpm.controller.oa.vo; import io.swagger.annotations.ApiModel; import lombok.Data; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeavePageReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/vo/BpmOALeavePageReqVO.java similarity index 94% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeavePageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/vo/BpmOALeavePageReqVO.java index 7b81455a25..2c7cbb8f04 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeavePageReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/vo/BpmOALeavePageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo; +package cn.iocoder.yudao.module.bpm.controller.oa.vo; import lombok.*; import java.util.*; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/vo/BpmOALeaveRespVO.java similarity index 93% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/vo/BpmOALeaveRespVO.java index 2b386d8ced..6627c74739 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/vo/BpmOALeaveRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo; +package cn.iocoder.yudao.module.bpm.controller.oa.vo; import lombok.*; import io.swagger.annotations.*; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/activity/BpmActivityRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/activity/BpmActivityRespVO.java similarity index 91% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/activity/BpmActivityRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/activity/BpmActivityRespVO.java index 447c590006..3e6ca5423d 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/activity/BpmActivityRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/activity/BpmActivityRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.activity; +package cn.iocoder.yudao.module.bpm.controller.task.vo.activity; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceCancelReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstanceCancelReqVO.java similarity index 89% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceCancelReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstanceCancelReqVO.java index 74f0a86b4a..a9e7d0680c 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceCancelReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstanceCancelReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance; +package cn.iocoder.yudao.module.bpm.controller.task.vo.instance; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstanceCreateReqVO.java similarity index 87% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceCreateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstanceCreateReqVO.java index e4fbc95bba..301c7f176e 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceCreateReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstanceCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance; +package cn.iocoder.yudao.module.bpm.controller.task.vo.instance; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceMyPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstanceMyPageReqVO.java similarity index 95% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceMyPageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstanceMyPageReqVO.java index 38965dd88e..61ad3a8a2a 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceMyPageReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstanceMyPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance; +package cn.iocoder.yudao.module.bpm.controller.task.vo.instance; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstancePageItemRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstancePageItemRespVO.java similarity index 95% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstancePageItemRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstancePageItemRespVO.java index 14a2625701..3ca93ecbd5 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstancePageItemRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstancePageItemRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance; +package cn.iocoder.yudao.module.bpm.controller.task.vo.instance; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstanceRespVO.java similarity index 97% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstanceRespVO.java index de6999c65a..75d05e2a71 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstanceRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance; +package cn.iocoder.yudao.module.bpm.controller.task.vo.instance; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskApproveReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskApproveReqVO.java similarity index 90% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskApproveReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskApproveReqVO.java index 356581a96d..a4af326de1 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskApproveReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskApproveReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task; +package cn.iocoder.yudao.module.bpm.controller.task.vo.task; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskDonePageItemRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskDonePageItemRespVO.java similarity index 92% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskDonePageItemRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskDonePageItemRespVO.java index b932c4e073..1ba195ab0c 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskDonePageItemRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskDonePageItemRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task; +package cn.iocoder.yudao.module.bpm.controller.task.vo.task; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskDonePageReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskDonePageReqVO.java similarity index 93% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskDonePageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskDonePageReqVO.java index c3d3c6ead5..681e5c6e53 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskDonePageReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskDonePageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task; +package cn.iocoder.yudao.module.bpm.controller.task.vo.task; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskRejectReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskRejectReqVO.java similarity index 88% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskRejectReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskRejectReqVO.java index 4ad4983577..19e40b317a 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskRejectReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskRejectReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task; +package cn.iocoder.yudao.module.bpm.controller.task.vo.task; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskRespVO.java similarity index 91% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskRespVO.java index a66c9f2afc..97dbc826ef 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task; +package cn.iocoder.yudao.module.bpm.controller.task.vo.task; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -6,8 +6,6 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; -import java.util.List; - @ApiModel("æµç¨‹ä»»åŠ¡çš„ Response VO") @Data @EqualsAndHashCode(callSuper = true) diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskTodoPageItemRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskTodoPageItemRespVO.java similarity index 95% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskTodoPageItemRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskTodoPageItemRespVO.java index 2703b96902..5d1dc6296f 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskTodoPageItemRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskTodoPageItemRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task; +package cn.iocoder.yudao.module.bpm.controller.task.vo.task; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskTodoPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskTodoPageReqVO.java similarity index 93% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskTodoPageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskTodoPageReqVO.java index d89e582f1a..64153b7360 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskTodoPageReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskTodoPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task; +package cn.iocoder.yudao.module.bpm.controller.task.vo.task; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskUpdateAssigneeReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskUpdateAssigneeReqVO.java similarity index 91% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskUpdateAssigneeReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskUpdateAssigneeReqVO.java index 0ad6fbedcf..400a24577d 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/BpmTaskUpdateAssigneeReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskUpdateAssigneeReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task; +package cn.iocoder.yudao.module.bpm.controller.task.vo.task; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmFormConvert.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmFormConvert.java index 9281cc4ab1..3baca0916b 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmFormConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmFormConvert.java @@ -5,7 +5,6 @@ import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormRespVO; import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormSimpleRespVO; import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormUpdateReqVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; -import cn.iocoder.yudao.module.bpm.api.form.dto.BpmFormDTO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -28,10 +27,6 @@ public interface BpmFormConvert { BpmFormRespVO convert(BpmFormDO bean); - BpmFormDTO convert1(BpmFormDO bean); - - List convertList(List list); - List convertList2(List list); PageResult convertPage(PageResult page); diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmUserGroupConvert.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmUserGroupConvert.java index d30860ef19..02a7845517 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmUserGroupConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmUserGroupConvert.java @@ -6,7 +6,6 @@ import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupCr import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupRespVO; import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupUpdateReqVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmUserGroupDO; -import cn.iocoder.yudao.module.bpm.api.group.dto.BpmUserGroupDTO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.mapstruct.Mapper; @@ -36,5 +35,4 @@ public interface BpmUserGroupConvert { @Named("convertList2") List convertList2(List list); - List convertList3(List list); } diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/message/BpmMessageConvert.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/message/BpmMessageConvert.java new file mode 100644 index 0000000000..92683f4c94 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/message/BpmMessageConvert.java @@ -0,0 +1,16 @@ +package cn.iocoder.yudao.module.bpm.convert.message; + +import cn.iocoder.yudao.module.system.api.sms.dto.send.SmsSendSingleToUserReqDTO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.Map; + +@Mapper +public interface BpmMessageConvert { + + BpmMessageConvert INSTANCE = Mappers.getMapper(BpmMessageConvert.class); + + SmsSendSingleToUserReqDTO convert(Long userId, String templateCode, Map templateParams); + +} diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/package-info.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/package-info.java new file mode 100644 index 0000000000..be8623fb1a --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.bpm.convert.oa; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/package-info.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/package-info.java new file mode 100644 index 0000000000..6a53114a8c --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.bpm.convert.task; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmProcessDefinitionExtDO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmProcessDefinitionExtDO.java index e9f8997f87..57abc0b99b 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmProcessDefinitionExtDO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmProcessDefinitionExtDO.java @@ -1,15 +1,12 @@ package cn.iocoder.yudao.module.bpm.dal.dataobject.definition; -import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmModelFormTypeEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; +import cn.iocoder.yudao.module.bpm.enums.definition.BpmModelFormTypeEnum; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; import lombok.*; -import org.activiti.engine.repository.Model; -import org.activiti.engine.repository.ProcessDefinition; import java.util.List; @@ -36,13 +33,13 @@ public class BpmProcessDefinitionExtDO extends BaseDO { /** * æµç¨‹å®šä¹‰çš„ç¼–å· * - * å…³è” {@link ProcessDefinition#getId()} + * å…³è” ProcessDefinition çš„ id 属性 */ private String processDefinitionId; /** * æµç¨‹æ¨¡åž‹çš„ç¼–å· * - * å…³è” {@link Model#getId()} + * å…³è” Model çš„ id 属性 */ private String modelId; /** diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmTaskAssignRuleDO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmTaskAssignRuleDO.java index 44950c8175..e65764f1a8 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmTaskAssignRuleDO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmTaskAssignRuleDO.java @@ -1,16 +1,13 @@ package cn.iocoder.yudao.module.bpm.dal.dataobject.definition; -import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmTaskRuleScriptEnum; -import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmTaskAssignRuleTypeEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.mybatis.core.type.JsonLongSetTypeHandler; +import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskAssignRuleTypeEnum; +import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskRuleScriptEnum; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.*; -import org.activiti.engine.repository.Model; -import org.activiti.engine.repository.ProcessDefinition; -import org.activiti.engine.task.Task; import java.util.Set; @@ -46,19 +43,19 @@ public class BpmTaskAssignRuleDO extends BaseDO { /** * æµç¨‹æ¨¡åž‹ç¼–å· * - * å…³è” {@link Model#getId()} + * å…³è” Model çš„ id 属性 */ private String modelId; /** * æµç¨‹å®šä¹‰ç¼–å· * - * å…³è” {@link ProcessDefinition#getId()} + * å…³è” ProcessDefinition çš„ id 属性 */ private String processDefinitionId; /** * æµç¨‹ä»»åŠ¡çš„å®šä¹‰ Key * - * å…³è” {@link Task#getTaskDefinitionKey()} + * å…³è” Task çš„ taskDefinitionKey 属性 */ private String taskDefinitionKey; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOALeaveDO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOALeaveDO.java index 6cad3fcae2..31381a5568 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOALeaveDO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOALeaveDO.java @@ -1,11 +1,10 @@ package cn.iocoder.yudao.module.bpm.dal.dataobject.oa; -import cn.iocoder.yudao.module.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; import lombok.*; import java.util.*; import com.baomidou.mybatisplus.annotation.*; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import org.activiti.engine.runtime.ProcessInstance; /** * OA 请å‡ç”³è¯· DO @@ -32,7 +31,7 @@ public class BpmOALeaveDO extends BaseDO { /** * ç”³è¯·äººçš„ç”¨æˆ·ç¼–å· * - * å…³è” {@link SysUserDO#getId()} + * å…³è” AdminUserDO çš„ id 属性 */ private Long userId; /** @@ -59,7 +58,7 @@ public class BpmOALeaveDO extends BaseDO { /** * 请å‡çš„结果 * - * 枚举 {@link cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum} + * 枚举 {@link BpmProcessInstanceResultEnum} * 考虑到简å•,所以直接å¤ç”¨äº† BpmProcessInstanceResultEnum 枚举,也å¯ä»¥è‡ªå·±å®šä¹‰ä¸€ä¸ªæžšä¸¾å“ˆ */ private Integer result; @@ -67,7 +66,7 @@ public class BpmOALeaveDO extends BaseDO { /** * 对应的æµç¨‹ç¼–å· * - * å…³è” {@link ProcessInstance#getId()} + * å…³è” ProcessInstance çš„ id 属性 */ private String processInstanceId; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/task/BpmProcessInstanceExtDO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/task/BpmProcessInstanceExtDO.java index ddeed4e970..b37709962d 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/task/BpmProcessInstanceExtDO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/task/BpmProcessInstanceExtDO.java @@ -1,8 +1,8 @@ package cn.iocoder.yudao.module.bpm.dal.dataobject.task; -import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum; -import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceStatusEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; +import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceStatusEnum; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -10,16 +10,13 @@ import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; -import org.activiti.engine.history.HistoricProcessInstance; -import org.activiti.engine.repository.ProcessDefinition; -import org.activiti.engine.runtime.ProcessInstance; import java.util.Date; import java.util.Map; /** * Bpm æµç¨‹å®žä¾‹çš„æ‹“展表 - * 主è¦è§£å†³ Activiti {@link ProcessInstance} å’Œ {@link HistoricProcessInstance} 䏿”¯æŒæ‹“展字段,所以新建拓展表 + * 主è¦è§£å†³ Activiti ProcessInstance å’Œ HistoricProcessInstance 䏿”¯æŒæ‹“展字段,所以新建拓展表 * * @author èŠ‹é“æºç  */ @@ -27,9 +24,6 @@ import java.util.Map; @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -//@Builder -//@NoArgsConstructor -//@AllArgsConstructor public class BpmProcessInstanceExtDO extends BaseDO { /** @@ -40,31 +34,31 @@ public class BpmProcessInstanceExtDO extends BaseDO { /** * å‘èµ·æµç¨‹çš„ç”¨æˆ·ç¼–å· * - * 冗余 {@link HistoricProcessInstance#getStartUserId()} + * 冗余 HistoricProcessInstance çš„ startUserId 属性 */ private Long startUserId; /** * æµç¨‹å®žä¾‹çš„åå­— * - * 冗余 {@link ProcessInstance#getName()} 为了筛选 + * 冗余 ProcessInstance çš„ name 属性,用于筛选 */ private String name; /** * æµç¨‹å®žä¾‹çš„ç¼–å· * - * å…³è” {@link ProcessInstance#getId()} + * å…³è” ProcessInstance çš„ id 属性 */ private String processInstanceId; /** * æµç¨‹å®šä¹‰çš„ç¼–å· * - * å…³è” {@link ProcessDefinition#getId()} + * å…³è” ProcessDefinition çš„ id 属性 */ private String processDefinitionId; /** * æµç¨‹åˆ†ç±» * - * 冗余 {@link ProcessDefinition#getCategory()} + * 冗余 ProcessDefinition çš„ category 属性 * æ•°æ®å­—å…¸ bpm_model_category */ private String category; @@ -83,7 +77,7 @@ public class BpmProcessInstanceExtDO extends BaseDO { /** * ç»“æŸæ—¶é—´ * - * 冗余 {@link HistoricProcessInstance#getEndTime()} + * 冗余 HistoricProcessInstance çš„ endTime 属性 */ private Date endTime; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/task/BpmTaskExtDO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/task/BpmTaskExtDO.java index 3fb4f5aa8d..9cd12ee3c7 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/task/BpmTaskExtDO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/task/BpmTaskExtDO.java @@ -1,21 +1,17 @@ package cn.iocoder.yudao.module.bpm.dal.dataobject.task; -import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; -import org.activiti.engine.history.HistoricTaskInstance; -import org.activiti.engine.repository.ProcessDefinition; -import org.activiti.engine.runtime.ProcessInstance; -import org.activiti.engine.task.Task; import java.util.Date; /** * Bpm æµç¨‹ä»»åŠ¡çš„æ‹“å±•è¡¨ - * 主è¦è§£å†³ Activiti {@link Task} å’Œ {@link HistoricTaskInstance} 䏿”¯æŒæ‹“展字段,所以新建拓展表 + * 主è¦è§£å†³ Activiti Task å’Œ HistoricTaskInstance 䏿”¯æŒæ‹“展字段,所以新建拓展表 * * @author èŠ‹é“æºç  */ @@ -23,27 +19,24 @@ import java.util.Date; @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -//@Builder -//@NoArgsConstructor -//@AllArgsConstructor public class BpmTaskExtDO extends BaseDO { /** * 任务的审批人 * - * 冗余 {@link Task#getAssignee()} + * 冗余 Task çš„ assignee 属性 */ private Long assigneeUserId; /** * 任务的åå­— * - * 冗余 {@link Task#getName()} 为了筛选 + * 冗余 Task çš„ name 属性,为了筛选 */ private String name; /** * ä»»åŠ¡çš„ç¼–å· * - * å…³è” {@link Task#getId()} + * å…³è” Task çš„ id 属性 */ private String taskId; // /** @@ -65,20 +58,20 @@ public class BpmTaskExtDO extends BaseDO { /** * ä»»åŠ¡çš„ç»“æŸæ—¶é—´ * - * 冗余 {@link HistoricTaskInstance#getEndTime()} + * 冗余 HistoricTaskInstance çš„ endTime 属性 */ private Date endTime; /** * æµç¨‹å®žä¾‹çš„ç¼–å· * - * å…³è” {@link ProcessInstance#getId()} + * å…³è” ProcessInstance çš„ id 属性 */ private String processInstanceId; /** * æµç¨‹å®šä¹‰çš„ç¼–å· * - * å…³è” {@link ProcessDefinition#getId()} + * å…³è” ProcessDefinition çš„ id 属性 */ private String processDefinitionId; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmProcessDefinitionExtMapper.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/definition/BpmProcessDefinitionExtMapper.java similarity index 91% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmProcessDefinitionExtMapper.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/definition/BpmProcessDefinitionExtMapper.java index eeed00bb60..d857e145c3 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmProcessDefinitionExtMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/definition/BpmProcessDefinitionExtMapper.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition; +package cn.iocoder.yudao.module.bpm.dal.mysql.definition; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmTaskAssignRuleMapper.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/definition/BpmTaskAssignRuleMapper.java similarity index 95% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmTaskAssignRuleMapper.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/definition/BpmTaskAssignRuleMapper.java index 3879a0f071..1205d30e1f 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmTaskAssignRuleMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/definition/BpmTaskAssignRuleMapper.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition; +package cn.iocoder.yudao.module.bpm.dal.mysql.definition; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/oa/BpmOALeaveMapper.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOALeaveMapper.java similarity index 87% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/oa/BpmOALeaveMapper.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOALeaveMapper.java index 4c47ea8bc9..a5ae1dec7e 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/oa/BpmOALeaveMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOALeaveMapper.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.oa; +package cn.iocoder.yudao.module.bpm.dal.mysql.oa; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.BpmOALeavePageReqVO; +import cn.iocoder.yudao.module.bpm.controller.oa.vo.BpmOALeavePageReqVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java similarity index 90% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java index 8fdc031dd4..075cbae9e2 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.task; +package cn.iocoder.yudao.module.bpm.dal.mysql.task; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceMyPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.task.vo.instance.BpmProcessInstanceMyPageReqVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmTaskExtMapper.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmTaskExtMapper.java similarity index 93% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmTaskExtMapper.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmTaskExtMapper.java index b89f1a2450..b2927a65e0 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmTaskExtMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmTaskExtMapper.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.task; +package cn.iocoder.yudao.module.bpm.dal.mysql.task; import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/enums/message/BpmMessageEnum.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/enums/message/BpmMessageEnum.java index 7462570c21..79001fccd3 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/enums/message/BpmMessageEnum.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/enums/message/BpmMessageEnum.java @@ -1,6 +1,5 @@ package cn.iocoder.yudao.module.bpm.enums.message; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO; import lombok.AllArgsConstructor; import lombok.Getter; @@ -20,9 +19,8 @@ public enum BpmMessageEnum { /** * 短信模æ¿çš„æ ‡è¯† * - * å…³è” {@link SysSmsTemplateDO#getCode()} + * å…³è” SmsTemplateDO çš„ code 属性 */ - private final String smsCode; - + private final String smsTemplateCode; } diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupService.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupService.java index 2280d4a468..f61e8f9d5b 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupService.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupService.java @@ -46,6 +46,14 @@ public interface BpmUserGroupService { */ BpmUserGroupDO getUserGroup(Long id); + /** + * 获得用户组列表 + * + * @param ids ç¼–å· + * @return 用户组列表 + */ + List getUserGroupList(Collection ids); + /** * 获得指定状æ€çš„用户组列表 * @@ -70,4 +78,5 @@ public interface BpmUserGroupService { * @param ids ç”¨æˆ·ç»„ç¼–å·æ•°ç»„ */ void validUserGroups(Set ids); + } diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupServiceImpl.java index 79c5aeab26..6116e8ccea 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupServiceImpl.java @@ -15,12 +15,13 @@ import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; -import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.USER_GROUP_NOT_EXISTS; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*; /** * 用户组 Service 实现类 @@ -71,6 +72,11 @@ public class BpmUserGroupServiceImpl implements BpmUserGroupService { return userGroupMapper.selectById(id); } + @Override + public List getUserGroupList(Collection ids) { + return userGroupMapper.selectBatchIds(ids); + } + @Override public List getUserGroupListByStatus(Integer status) { diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/message/BpmMessageServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/message/BpmMessageServiceImpl.java index c308620f8c..61b3c57d42 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/message/BpmMessageServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/message/BpmMessageServiceImpl.java @@ -1,13 +1,13 @@ package cn.iocoder.yudao.module.bpm.service.message; -import cn.iocoder.yudao.adminserver.modules.bpm.enums.message.BpmMessageEnum; -import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService; +import cn.iocoder.yudao.framework.web.config.WebProperties; +import cn.iocoder.yudao.module.bpm.convert.message.BpmMessageConvert; +import cn.iocoder.yudao.module.bpm.enums.message.BpmMessageEnum; import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO; import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceRejectReqDTO; import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO; -import cn.iocoder.yudao.module.system.service.sms.SysSmsCoreService; +import cn.iocoder.yudao.module.system.api.sms.SmsSendApi; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -26,18 +26,18 @@ import java.util.Map; public class BpmMessageServiceImpl implements BpmMessageService { @Resource - private SysSmsCoreService smsCoreService; + private SmsSendApi smsSendApi; - @Value("${yudao.url.admin-ui}") - private String adminUiUrl; + @Resource + private WebProperties webProperties; @Override public void sendMessageWhenProcessInstanceApprove(BpmMessageSendWhenProcessInstanceApproveReqDTO reqDTO) { Map templateParams = new HashMap<>(); templateParams.put("processInstanceName", reqDTO.getProcessInstanceName()); templateParams.put("detailUrl", getProcessInstanceDetailUrl(reqDTO.getProcessInstanceId())); - smsCoreService.sendSingleSmsToAdmin(null, reqDTO.getStartUserId(), - BpmMessageEnum.PROCESS_INSTANCE_APPROVE.getSmsCode(), templateParams); + smsSendApi.sendSingleSmsToAdmin(BpmMessageConvert.INSTANCE.convert(reqDTO.getStartUserId(), + BpmMessageEnum.PROCESS_INSTANCE_APPROVE.getSmsTemplateCode(), templateParams)); } @Override @@ -46,8 +46,8 @@ public class BpmMessageServiceImpl implements BpmMessageService { templateParams.put("processInstanceName", reqDTO.getProcessInstanceName()); templateParams.put("comment", reqDTO.getComment()); templateParams.put("detailUrl", getProcessInstanceDetailUrl(reqDTO.getProcessInstanceId())); - smsCoreService.sendSingleSmsToAdmin(null, reqDTO.getStartUserId(), - BpmMessageEnum.PROCESS_INSTANCE_REJECT.getSmsCode(), templateParams); + smsSendApi.sendSingleSmsToAdmin(BpmMessageConvert.INSTANCE.convert(reqDTO.getStartUserId(), + BpmMessageEnum.PROCESS_INSTANCE_REJECT.getSmsTemplateCode(), templateParams)); } @Override @@ -57,12 +57,12 @@ public class BpmMessageServiceImpl implements BpmMessageService { templateParams.put("taskName", reqDTO.getTaskName()); templateParams.put("startUserNickname", reqDTO.getStartUserNickname()); templateParams.put("detailUrl", getProcessInstanceDetailUrl(reqDTO.getProcessInstanceId())); - smsCoreService.sendSingleSmsToAdmin(null, reqDTO.getAssigneeUserId(), - BpmMessageEnum.TASK_ASSIGNED.getSmsCode(), templateParams); + smsSendApi.sendSingleSmsToAdmin(BpmMessageConvert.INSTANCE.convert(reqDTO.getStartUserId(), + BpmMessageEnum.TASK_ASSIGNED.getSmsTemplateCode(), templateParams)); } private String getProcessInstanceDetailUrl(String taskId) { - return adminUiUrl + "bpm/process-instance/detail?id=" + taskId; + return webProperties.getAdminUi().getUrl() + "/bpm/process-instance/detail?id=" + taskId; } } diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/message/dto/BpmMessageSendWhenTaskCreatedReqDTO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/message/dto/BpmMessageSendWhenTaskCreatedReqDTO.java index 7f696d1d3b..bf9528f664 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/message/dto/BpmMessageSendWhenTaskCreatedReqDTO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/message/dto/BpmMessageSendWhenTaskCreatedReqDTO.java @@ -22,7 +22,7 @@ public class BpmMessageSendWhenTaskCreatedReqDTO { @NotEmpty(message = "æµç¨‹å®žä¾‹çš„åå­—ä¸èƒ½ä¸ºç©º") private String processInstanceName; @NotEmpty(message = "å‘起人的用户编å·") - private String startUserId; + private Long startUserId; @NotEmpty(message = "å‘起人的昵称") private String startUserNickname; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/task/package-info.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/task/package-info.java new file mode 100644 index 0000000000..eaa615302a --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/task/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.bpm.service.task; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmModelController.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmModelController.java index 973c9bdd87..449363d897 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmModelController.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmModelController.java @@ -1,6 +1,5 @@ package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.model.*; import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmModelConvert; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmModelService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.java index ebf252c1d9..47ac08735f 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.java @@ -1,8 +1,8 @@ package cn.iocoder.yudao.adminserver.modules.bpm.controller.oa; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.BpmOALeaveCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.BpmOALeavePageReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.BpmOALeaveRespVO; +import cn.iocoder.yudao.module.bpm.controller.oa.vo.BpmOALeaveCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.oa.vo.BpmOALeavePageReqVO; +import cn.iocoder.yudao.module.bpm.controller.oa.vo.BpmOALeaveRespVO; import cn.iocoder.yudao.adminserver.modules.bpm.convert.oa.BpmOALeaveConvert; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO; import cn.iocoder.yudao.adminserver.modules.bpm.service.oa.BpmOALeaveService; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmActivityController.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmActivityController.java index b5b7f59d98..be4bc75c3e 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmActivityController.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmActivityController.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.controller.task; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.activity.BpmActivityRespVO; +import cn.iocoder.yudao.module.bpm.controller.task.vo.activity.BpmActivityRespVO; import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmActivityService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.java index 4240e39af2..f32e3242fa 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.java @@ -1,9 +1,9 @@ package cn.iocoder.yudao.adminserver.modules.bpm.controller.task; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.*; import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.bpm.controller.task.vo.instance.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; @@ -25,7 +25,7 @@ public class BpmProcessInstanceController { @Resource private BpmProcessInstanceService processInstanceService; - + @PostMapping("/create") @ApiOperation("新建æµç¨‹å®žä¾‹") @PreAuthorize("@ss.hasPermission('bpm:process-instance:query')") diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.java index 3ad59a7aa1..665b735aea 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.java @@ -1,10 +1,9 @@ package cn.iocoder.yudao.adminserver.modules.bpm.controller.task; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.*; import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; +import cn.iocoder.yudao.module.bpm.controller.task.vo.task.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; @@ -13,9 +12,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; -import java.io.IOException; import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmModelConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmModelConvert.java index b6327057e8..64c57c00ba 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmModelConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmModelConvert.java @@ -1,13 +1,12 @@ package cn.iocoder.yudao.adminserver.modules.bpm.convert.definition; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.model.*; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmModelMetaInfoRespDTO; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; -import cn.iocoder.yudao.module.bpm.api.form.dto.BpmFormDTO; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.json.JsonUtils; import cn.iocoder.yudao.module.bpm.controller.definition.vo.model.*; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; import org.activiti.engine.impl.persistence.entity.SuspensionState; import org.activiti.engine.repository.Deployment; import org.activiti.engine.repository.Model; @@ -31,19 +30,19 @@ public interface BpmModelConvert { BpmModelConvert INSTANCE = Mappers.getMapper(BpmModelConvert.class); - default List convertList(List list, Map formMap, + default List convertList(List list, Map formMap, Map deploymentMap, Map processDefinitionMap) { return CollectionUtils.convertList(list, model -> { BpmModelMetaInfoRespDTO metaInfo = JsonUtils.parseObject(model.getMetaInfo(), BpmModelMetaInfoRespDTO.class); - BpmFormDTO form = metaInfo != null ? formMap.get(metaInfo.getFormId()) : null; + BpmFormDO form = metaInfo != null ? formMap.get(metaInfo.getFormId()) : null; Deployment deployment = model.getDeploymentId() != null ? deploymentMap.get(model.getDeploymentId()) : null; ProcessDefinition processDefinition = model.getDeploymentId() != null ? processDefinitionMap.get(model.getDeploymentId()) : null; return convert(model, form, deployment, processDefinition); }); } - default BpmModelPageItemRespVO convert(Model model, BpmFormDTO form, Deployment deployment, ProcessDefinition processDefinition) { + default BpmModelPageItemRespVO convert(Model model, BpmFormDO form, Deployment deployment, ProcessDefinition processDefinition) { BpmModelPageItemRespVO modelRespVO = new BpmModelPageItemRespVO(); modelRespVO.setId(model.getId()); modelRespVO.setCreateTime(model.getCreateTime()); @@ -84,7 +83,7 @@ public interface BpmModelConvert { void copyTo(BpmModelMetaInfoRespDTO from, @MappingTarget BpmModelBaseVO to); - default BpmProcessDefinitionCreateReqDTO convert2(Model model, BpmFormDTO form) { + default BpmProcessDefinitionCreateReqDTO convert2(Model model, BpmFormDO form) { BpmProcessDefinitionCreateReqDTO createReqDTO = new BpmProcessDefinitionCreateReqDTO(); createReqDTO.setModelId(model.getId()); createReqDTO.setName(model.getName()); diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmProcessDefinitionConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmProcessDefinitionConvert.java index eba3273f18..97354a951b 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmProcessDefinitionConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmProcessDefinitionConvert.java @@ -2,9 +2,9 @@ package cn.iocoder.yudao.adminserver.modules.bpm.convert.definition; import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionPageItemRespVO; import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionRespVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; -import cn.iocoder.yudao.module.bpm.api.form.dto.BpmFormDTO; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import org.activiti.engine.impl.persistence.entity.SuspensionState; import org.activiti.engine.repository.Deployment; @@ -29,17 +29,17 @@ public interface BpmProcessDefinitionConvert { BpmProcessDefinitionConvert INSTANCE = Mappers.getMapper(BpmProcessDefinitionConvert.class); default List convertList(List list, Map deploymentMap, - Map processDefinitionDOMap, Map formMap) { + Map processDefinitionDOMap, Map formMap) { return CollectionUtils.convertList(list, definition -> { Deployment deployment = definition.getDeploymentId() != null ? deploymentMap.get(definition.getDeploymentId()) : null; BpmProcessDefinitionExtDO definitionDO = processDefinitionDOMap.get(definition.getId()); - BpmFormDTO form = definitionDO != null ? formMap.get(definitionDO.getFormId()) : null; + BpmFormDO form = definitionDO != null ? formMap.get(definitionDO.getFormId()) : null; return convert(definition, deployment, definitionDO, form); }); } default BpmProcessDefinitionPageItemRespVO convert(ProcessDefinition bean, Deployment deployment, - BpmProcessDefinitionExtDO processDefinitionExtDO, BpmFormDTO form) { + BpmProcessDefinitionExtDO processDefinitionExtDO, BpmFormDO form) { BpmProcessDefinitionPageItemRespVO respVO = convert(bean); respVO.setSuspensionState(bean.isSuspended() ? SuspensionState.SUSPENDED.getStateCode() : SuspensionState.ACTIVE.getStateCode()); if (deployment != null) { diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/message/BpmMessageConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/message/BpmMessageConvert.java index ca84b72a9e..4ea82abe30 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/message/BpmMessageConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/message/BpmMessageConvert.java @@ -3,7 +3,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.convert.message; import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO; import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceRejectReqDTO; import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO; -import cn.iocoder.yudao.module.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import org.activiti.api.task.model.Task; import org.activiti.engine.runtime.ProcessInstance; import org.mapstruct.Mapper; @@ -17,7 +17,7 @@ public interface BpmMessageConvert { BpmMessageConvert INSTANCE = Mappers.getMapper(BpmMessageConvert.class); - default BpmMessageSendWhenTaskCreatedReqDTO convert(ProcessInstance processInstance, SysUserDO startUser, Task task) { + default BpmMessageSendWhenTaskCreatedReqDTO convert(ProcessInstance processInstance, AdminUserRespDTO startUser, Task task) { BpmMessageSendWhenTaskCreatedReqDTO reqDTO = new BpmMessageSendWhenTaskCreatedReqDTO(); copyTo(processInstance, reqDTO); copyTo(startUser, reqDTO); @@ -30,7 +30,7 @@ public interface BpmMessageConvert { @Mapping(source = "id", target = "startUserId"), @Mapping(source = "nickname", target = "startUserNickname") }) - void copyTo(SysUserDO from, @MappingTarget BpmMessageSendWhenTaskCreatedReqDTO to); + void copyTo(AdminUserRespDTO from, @MappingTarget BpmMessageSendWhenTaskCreatedReqDTO to); @Mappings({ @Mapping(source = "id", target = "taskId"), @Mapping(source = "name", target = "taskName"), diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/oa/BpmOALeaveConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/oa/BpmOALeaveConvert.java index 49c5d8bd12..c8af88fc16 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/oa/BpmOALeaveConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/oa/BpmOALeaveConvert.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.convert.oa; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.BpmOALeaveCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.BpmOALeaveRespVO; +import cn.iocoder.yudao.module.bpm.controller.oa.vo.BpmOALeaveCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.oa.vo.BpmOALeaveRespVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.mapstruct.Mapper; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmActivityConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmActivityConvert.java index a9882f9606..8635b330a7 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmActivityConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmActivityConvert.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.adminserver.modules.bpm.convert.task; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.activity.BpmActivityRespVO; +import cn.iocoder.yudao.module.bpm.controller.task.vo.activity.BpmActivityRespVO; import org.activiti.engine.history.HistoricActivityInstance; import org.mapstruct.Mapper; import org.mapstruct.Mapping; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java index 304894e599..459362ce77 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java @@ -1,12 +1,12 @@ package cn.iocoder.yudao.adminserver.modules.bpm.convert.task; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstancePageItemRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceRespVO; +import cn.iocoder.yudao.module.bpm.controller.task.vo.instance.BpmProcessInstancePageItemRespVO; +import cn.iocoder.yudao.module.bpm.controller.task.vo.instance.BpmProcessInstanceRespVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event.BpmProcessInstanceResultEvent; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.module.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.activiti.engine.history.HistoricProcessInstance; import org.activiti.engine.repository.ProcessDefinition; @@ -71,7 +71,7 @@ public interface BpmProcessInstanceConvert { default BpmProcessInstanceRespVO convert2(HistoricProcessInstance processInstance, BpmProcessInstanceExtDO processInstanceExt, ProcessDefinition processDefinition, BpmProcessDefinitionExtDO processDefinitionExt, - String bpmnXml, SysUserDO startUser, SysDeptDO dept) { + String bpmnXml, AdminUserRespDTO startUser, DeptRespDTO dept) { BpmProcessInstanceRespVO respVO = convert2(processInstance); copyTo(processInstanceExt, respVO); // definition @@ -94,7 +94,7 @@ public interface BpmProcessInstanceConvert { BpmProcessInstanceRespVO.ProcessDefinition convert2(ProcessDefinition bean); @Mapping(source = "from.id", target = "to.id", ignore = true) void copyTo(BpmProcessDefinitionExtDO from, @MappingTarget BpmProcessInstanceRespVO.ProcessDefinition to); - BpmProcessInstanceRespVO.User convert2(SysUserDO bean); + BpmProcessInstanceRespVO.User convert2(AdminUserRespDTO bean); default BpmProcessInstanceResultEvent convert(Object source, ProcessInstance instance, Integer result) { BpmProcessInstanceResultEvent event = new BpmProcessInstanceResultEvent(source); diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmTaskConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmTaskConvert.java index 4e092f8502..e9689d6fd5 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmTaskConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmTaskConvert.java @@ -1,11 +1,11 @@ package cn.iocoder.yudao.adminserver.modules.bpm.convert.task; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.BpmTaskDonePageItemRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.BpmTaskRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.BpmTaskTodoPageItemRespVO; +import cn.iocoder.yudao.module.bpm.controller.task.vo.task.BpmTaskDonePageItemRespVO; +import cn.iocoder.yudao.module.bpm.controller.task.vo.task.BpmTaskRespVO; +import cn.iocoder.yudao.module.bpm.controller.task.vo.task.BpmTaskTodoPageItemRespVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.module.system.dal.dataobject.user.SysUserDO; +import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.number.NumberUtils; import org.activiti.engine.history.HistoricProcessInstance; @@ -30,12 +30,12 @@ public interface BpmTaskConvert { BpmTaskConvert INSTANCE = Mappers.getMapper(BpmTaskConvert.class); default List convertList1(List tasks, Map processInstanceMap, - Map userMap) { + Map userMap) { return CollectionUtils.convertList(tasks, task -> { BpmTaskTodoPageItemRespVO respVO = convert1(task); ProcessInstance processInstance = processInstanceMap.get(task.getProcessInstanceId()); if (processInstance != null) { - SysUserDO startUser = userMap.get(NumberUtils.parseLong(processInstance.getStartUserId())); + AdminUserRespDTO startUser = userMap.get(NumberUtils.parseLong(processInstance.getStartUserId())); respVO.setProcessInstance(convert(processInstance, startUser)); } return respVO; @@ -53,14 +53,14 @@ public interface BpmTaskConvert { default List convertList2(List tasks, Map bpmTaskExtDOMap, Map historicProcessInstanceMap, - Map userMap) { + Map userMap) { return CollectionUtils.convertList(tasks, task -> { BpmTaskDonePageItemRespVO respVO = convert2(task); BpmTaskExtDO taskExtDO = bpmTaskExtDOMap.get(task.getId()); copyTo(taskExtDO, respVO); HistoricProcessInstance processInstance = historicProcessInstanceMap.get(task.getProcessInstanceId()); if (processInstance != null) { - SysUserDO startUser = userMap.get(NumberUtils.parseLong(processInstance.getStartUserId())); + AdminUserRespDTO startUser = userMap.get(NumberUtils.parseLong(processInstance.getStartUserId())); respVO.setProcessInstance(convert(processInstance, startUser)); } return respVO; @@ -77,20 +77,20 @@ public interface BpmTaskConvert { BpmTaskExtDO convert(org.activiti.api.task.model.Task bean); default List convertList3(List tasks, Map bpmTaskExtDOMap, - HistoricProcessInstance processInstance, Map userMap, - Map deptMap) { + HistoricProcessInstance processInstance, Map userMap, + Map deptMap) { return CollectionUtils.convertList(tasks, task -> { BpmTaskRespVO respVO = convert3(task); BpmTaskExtDO taskExtDO = bpmTaskExtDOMap.get(task.getId()); copyTo(taskExtDO, respVO); if (processInstance != null) { - SysUserDO startUser = userMap.get(NumberUtils.parseLong(processInstance.getStartUserId())); + AdminUserRespDTO startUser = userMap.get(NumberUtils.parseLong(processInstance.getStartUserId())); respVO.setProcessInstance(convert(processInstance, startUser)); } - SysUserDO assignUser = userMap.get(NumberUtils.parseLong(task.getAssignee())); + AdminUserRespDTO assignUser = userMap.get(NumberUtils.parseLong(task.getAssignee())); if (assignUser != null) { respVO.setAssigneeUser(convert3(assignUser)); - SysDeptDO dept = deptMap.get(assignUser.getDeptId()); + DeptRespDTO dept = deptMap.get(assignUser.getDeptId()); if (dept != null) { respVO.getAssigneeUser().setDeptName(dept.getName()); } @@ -101,7 +101,7 @@ public interface BpmTaskConvert { @Mapping(source = "taskDefinitionKey", target = "definitionKey") BpmTaskRespVO convert3(HistoricTaskInstance bean); - BpmTaskRespVO.User convert3(SysUserDO bean); + BpmTaskRespVO.User convert3(AdminUserRespDTO bean); void copyTo(BpmTaskExtDO from, @MappingTarget BpmTaskDonePageItemRespVO to); @@ -112,7 +112,7 @@ public interface BpmTaskConvert { @Mapping(source = "processInstance.processDefinitionId", target = "processDefinitionId"), @Mapping(source = "startUser.nickname", target = "startUserNickname") }) - BpmTaskTodoPageItemRespVO.ProcessInstance convert(ProcessInstance processInstance, SysUserDO startUser); + BpmTaskTodoPageItemRespVO.ProcessInstance convert(ProcessInstance processInstance, AdminUserRespDTO startUser); @Mappings({ @Mapping(source = "processInstance.id", target = "id"), @@ -121,6 +121,6 @@ public interface BpmTaskConvert { @Mapping(source = "processInstance.processDefinitionId", target = "processDefinitionId"), @Mapping(source = "startUser.nickname", target = "startUserNickname") }) - BpmTaskTodoPageItemRespVO.ProcessInstance convert(HistoricProcessInstance processInstance, SysUserDO startUser); + BpmTaskTodoPageItemRespVO.ProcessInstance convert(HistoricProcessInstance processInstance, AdminUserRespDTO startUser); } diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java index 2802211533..18f867ffae 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java @@ -6,13 +6,10 @@ import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event.Bp import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.identity.EmptyUserGroupManager; import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.listener.BpmTackActivitiEventListener; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; -import cn.iocoder.yudao.module.bpm.api.group.BpmUserGroupServiceApi; -import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; -import cn.iocoder.yudao.module.system.service.permission.SysPermissionCoreService; -import cn.iocoder.yudao.module.system.service.user.SysUserCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.permission.SysPermissionCoreService; -import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService; +import cn.iocoder.yudao.module.bpm.service.definition.BpmUserGroupService; +import cn.iocoder.yudao.module.system.api.dept.DeptApi; +import cn.iocoder.yudao.module.system.api.permission.PermissionApi; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import org.activiti.api.runtime.shared.identity.UserGroupManager; import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer; import org.springframework.context.ApplicationEventPublisher; @@ -67,17 +64,17 @@ public class BpmActivitiConfiguration { @Bean public BpmActivityBehaviorFactory bpmActivityBehaviorFactory(BpmTaskAssignRuleService taskRuleService, - SysPermissionCoreService permissionCoreService, - SysDeptCoreService deptCoreService, - BpmUserGroupServiceApi userGroupServiceApi, - SysUserCoreService userCoreService, + BpmUserGroupService userGroupService, + PermissionApi permissionApi, + DeptApi deptApi, + AdminUserApi adminUserApi, List scripts) { BpmActivityBehaviorFactory bpmActivityBehaviorFactory = new BpmActivityBehaviorFactory(); bpmActivityBehaviorFactory.setBpmTaskRuleService(taskRuleService); - bpmActivityBehaviorFactory.setPermissionCoreService(permissionCoreService); - bpmActivityBehaviorFactory.setDeptCoreService(deptCoreService); - bpmActivityBehaviorFactory.setUserGroupServiceApi(userGroupServiceApi); - bpmActivityBehaviorFactory.setUserCoreService(userCoreService); + bpmActivityBehaviorFactory.setUserGroupService(userGroupService); + bpmActivityBehaviorFactory.setAdminUserApi(adminUserApi); + bpmActivityBehaviorFactory.setPermissionApi(permissionApi); + bpmActivityBehaviorFactory.setDeptApi(deptApi); bpmActivityBehaviorFactory.setScripts(scripts); return bpmActivityBehaviorFactory; } diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java index d401cfacc7..aa38a24c0f 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java @@ -2,10 +2,10 @@ package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavio import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; -import cn.iocoder.yudao.module.bpm.api.group.BpmUserGroupServiceApi; -import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; -import cn.iocoder.yudao.module.system.service.permission.SysPermissionCoreService; -import cn.iocoder.yudao.module.system.service.user.SysUserCoreService; +import cn.iocoder.yudao.module.bpm.service.definition.BpmUserGroupService; +import cn.iocoder.yudao.module.system.api.dept.DeptApi; +import cn.iocoder.yudao.module.system.api.permission.PermissionApi; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.Setter; @@ -30,13 +30,15 @@ public class BpmActivityBehaviorFactory extends DefaultActivityBehaviorFactory { @Setter private BpmTaskAssignRuleService bpmTaskRuleService; @Setter - private SysPermissionCoreService permissionCoreService; + private BpmUserGroupService userGroupService; + @Setter - private SysDeptCoreService deptCoreService; + private PermissionApi permissionApi; @Setter - private BpmUserGroupServiceApi userGroupServiceApi; + private DeptApi deptApi; @Setter - private SysUserCoreService userCoreService; + private AdminUserApi adminUserApi; + @Setter private List scripts; @@ -44,10 +46,10 @@ public class BpmActivityBehaviorFactory extends DefaultActivityBehaviorFactory { public UserTaskActivityBehavior createUserTaskActivityBehavior(UserTask userTask) { BpmUserTaskActivitiBehavior userTaskActivityBehavior = new BpmUserTaskActivitiBehavior(userTask); userTaskActivityBehavior.setBpmTaskRuleService(bpmTaskRuleService); - userTaskActivityBehavior.setPermissionCoreService(permissionCoreService); - userTaskActivityBehavior.setDeptCoreService(deptCoreService); - userTaskActivityBehavior.setUserGroupServiceApi(userGroupServiceApi); - userTaskActivityBehavior.setSysUserCoreService(userCoreService); + userTaskActivityBehavior.setPermissionApi(permissionApi); + userTaskActivityBehavior.setDeptApi(deptApi); + userTaskActivityBehavior.setUserGroupService(userGroupService); + userTaskActivityBehavior.setAdminUserApi(adminUserApi); userTaskActivityBehavior.setScripts(scripts); return userTaskActivityBehavior; } diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java index 70d1305029..a540d1ffa5 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java @@ -3,18 +3,18 @@ package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavio import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; -import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskAssignRuleTypeEnum; import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; -import cn.iocoder.yudao.module.bpm.api.group.BpmUserGroupServiceApi; -import cn.iocoder.yudao.module.bpm.api.group.dto.BpmUserGroupDTO; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.module.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; -import cn.iocoder.yudao.module.system.service.permission.SysPermissionCoreService; -import cn.iocoder.yudao.module.system.service.user.SysUserCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmUserGroupDO; +import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskAssignRuleTypeEnum; +import cn.iocoder.yudao.module.bpm.service.definition.BpmUserGroupService; +import cn.iocoder.yudao.module.system.api.dept.DeptApi; +import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; +import cn.iocoder.yudao.module.system.api.permission.PermissionApi; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import com.google.common.annotations.VisibleForTesting; import lombok.Setter; import lombok.extern.slf4j.Slf4j; @@ -28,12 +28,12 @@ import org.activiti.engine.impl.persistence.entity.TaskEntityManager; import java.util.*; -import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.TASK_ASSIGN_SCRIPT_NOT_EXISTS; -import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.TASK_CREATE_FAIL_NO_CANDIDATE_USER; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.TASK_ASSIGN_SCRIPT_NOT_EXISTS; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.TASK_CREATE_FAIL_NO_CANDIDATE_USER; /** * 自定义的æµç¨‹ä»»åŠ¡çš„ assignee è´Ÿè´£äººçš„åˆ†é… @@ -48,14 +48,17 @@ public class BpmUserTaskActivitiBehavior extends UserTaskActivityBehavior { @Setter private BpmTaskAssignRuleService bpmTaskRuleService; + @Setter - private SysPermissionCoreService permissionCoreService; + private BpmUserGroupService userGroupService; + @Setter - private SysDeptCoreService deptCoreService; + private DeptApi deptApi; @Setter - private BpmUserGroupServiceApi userGroupServiceApi; + private AdminUserApi adminUserApi; @Setter - private SysUserCoreService sysUserCoreService; + private PermissionApi permissionApi; + /** * 任务分é…脚本 */ @@ -133,22 +136,22 @@ public class BpmUserTaskActivitiBehavior extends UserTaskActivityBehavior { } private Set calculateTaskCandidateUsersByRole(TaskEntity task, BpmTaskAssignRuleDO rule) { - return permissionCoreService.getUserRoleIdListByRoleIds(rule.getOptions()); + return permissionApi.getUserRoleIdListByRoleIds(rule.getOptions()); } private Set calculateTaskCandidateUsersByDeptMember(TaskEntity task, BpmTaskAssignRuleDO rule) { - List users = sysUserCoreService.getUsersByDeptIds(rule.getOptions()); - return convertSet(users, SysUserDO::getId); + List users = adminUserApi.getUsersByDeptIds(rule.getOptions()); + return convertSet(users, AdminUserRespDTO::getId); } private Set calculateTaskCandidateUsersByDeptLeader(TaskEntity task, BpmTaskAssignRuleDO rule) { - List depts = deptCoreService.getDepts(rule.getOptions()); - return convertSet(depts, SysDeptDO::getLeaderUserId); + List depts = deptApi.getDepts(rule.getOptions()); + return convertSet(depts, DeptRespDTO::getLeaderUserId); } private Set calculateTaskCandidateUsersByPost(TaskEntity task, BpmTaskAssignRuleDO rule) { - List users = sysUserCoreService.getUsersByPostIds(rule.getOptions()); - return convertSet(users, SysUserDO::getId); + List users = adminUserApi.getUsersByPostIds(rule.getOptions()); + return convertSet(users, AdminUserRespDTO::getId); } private Set calculateTaskCandidateUsersByUser(TaskEntity task, BpmTaskAssignRuleDO rule) { @@ -156,9 +159,9 @@ public class BpmUserTaskActivitiBehavior extends UserTaskActivityBehavior { } private Set calculateTaskCandidateUsersByUserGroup(TaskEntity task, BpmTaskAssignRuleDO rule) { - List userGroups = userGroupServiceApi.getUserGroupList(rule.getOptions()); + List userGroups = userGroupService.getUserGroupList(rule.getOptions()); Set userIds = new HashSet<>(); - userGroups.forEach(bpmUserGroupDO -> userIds.addAll(bpmUserGroupDO.getMemberUserIds())); + userGroups.forEach(group -> userIds.addAll(group.getMemberUserIds())); return userIds; } @@ -183,9 +186,9 @@ public class BpmUserTaskActivitiBehavior extends UserTaskActivityBehavior { if (CollUtil.isEmpty(assigneeUserIds)) { return; } - Map userMap = sysUserCoreService.getUserMap(assigneeUserIds); + Map userMap = adminUserApi.getUserMap(assigneeUserIds); assigneeUserIds.removeIf(id -> { - SysUserDO user = userMap.get(id); + AdminUserRespDTO user = userMap.get(id); return user == null || !CommonStatusEnum.ENABLE.getStatus().equals(user.getStatus()); }); } diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderAbstractScript.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderAbstractScript.java index 465be3b4a6..e84c5df17b 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderAbstractScript.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderAbstractScript.java @@ -2,16 +2,17 @@ package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavio import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.module.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; -import cn.iocoder.yudao.module.system.service.user.SysUserCoreService; +import cn.iocoder.yudao.module.system.api.dept.DeptApi; +import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import org.activiti.engine.impl.persistence.entity.TaskEntity; import org.springframework.util.Assert; import javax.annotation.Resource; import java.util.Set; +import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet; import static java.util.Collections.emptySet; /** @@ -23,16 +24,16 @@ import static java.util.Collections.emptySet; public abstract class BpmTaskAssignLeaderAbstractScript implements BpmTaskAssignScript { @Resource - private SysUserCoreService userCoreService; + private AdminUserApi adminUserApi; @Resource - private SysDeptCoreService deptCoreService; + private DeptApi deptApi; protected Set calculateTaskCandidateUsers(TaskEntity task, int level) { Assert.isTrue(level > 0, "level 必须大于 0"); // 获得å‘起人 Long startUserId = Long.parseLong(task.getProcessInstance().getStartUserId()); // 获得对应 leve 的部门 - SysDeptDO dept = null; + DeptRespDTO dept = null; for (int i = 0; i < level; i++) { // 获得 level 对应的部门 if (dept == null) { @@ -41,7 +42,7 @@ public abstract class BpmTaskAssignLeaderAbstractScript implements BpmTaskAssign return emptySet(); } } else { - SysDeptDO parentDept = deptCoreService.getDept(dept.getParentId()); + DeptRespDTO parentDept = deptApi.getDept(dept.getParentId()); if (parentDept == null) { // 找ä¸åˆ°çˆ¶çº§éƒ¨é—¨ï¼Œæ‰€ä»¥åªå¥½ç»“æŸå¯»æ‰¾ã€‚原因是:例如说,级别比较高的人,所在部门层级比较少 break; } @@ -51,12 +52,12 @@ public abstract class BpmTaskAssignLeaderAbstractScript implements BpmTaskAssign return dept.getLeaderUserId() != null ? asSet(dept.getLeaderUserId()) : emptySet(); } - private SysDeptDO getStartUserDept(Long startUserId) { - SysUserDO startUser = userCoreService.getUser(startUserId); + private DeptRespDTO getStartUserDept(Long startUserId) { + AdminUserRespDTO startUser = adminUserApi.getUser(startUserId); if (startUser.getDeptId() == null) { // 找ä¸åˆ°éƒ¨é—¨ï¼Œæ‰€ä»¥æ— æ³•使用该规则 return null; } - return deptCoreService.getDept(startUser.getDeptId()); + return deptApi.getDept(startUser.getDeptId()); } } diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmModelServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmModelServiceImpl.java similarity index 93% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmModelServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmModelServiceImpl.java index e70fae67c3..0f37fb5826 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmModelServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmModelServiceImpl.java @@ -1,26 +1,22 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.definition.impl; +package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.model.*; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.model.*; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleRespVO; import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmModelConvert; -import cn.iocoder.yudao.module.bpm.enums.definition.BpmModelFormTypeEnum; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmModelService; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmModelMetaInfoRespDTO; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; -import cn.iocoder.yudao.module.bpm.api.form.BpmFormServiceApi; -import cn.iocoder.yudao.module.bpm.api.form.dto.BpmFormDTO; import cn.iocoder.yudao.framework.activiti.core.util.ActivitiUtils; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.json.JsonUtils; import cn.iocoder.yudao.framework.common.util.object.PageUtils; import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.model.*; +import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleRespVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; +import cn.iocoder.yudao.module.bpm.enums.definition.BpmModelFormTypeEnum; +import cn.iocoder.yudao.module.bpm.service.definition.BpmFormService; import lombok.extern.slf4j.Slf4j; import org.activiti.bpmn.model.BpmnModel; import org.activiti.engine.RepositoryService; @@ -38,9 +34,9 @@ import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.util.*; -import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*; /** * æµç¨‹å®šä¹‰å®žçް @@ -57,7 +53,7 @@ public class BpmModelServiceImpl implements BpmModelService { @Resource private RepositoryService repositoryService; @Resource - private BpmFormServiceApi formServiceApi; + private BpmFormService bpmFormService; @Resource private BpmProcessDefinitionService processDefinitionService; @Resource @@ -85,7 +81,7 @@ public class BpmModelServiceImpl implements BpmModelService { BpmModelMetaInfoRespDTO metaInfo = JsonUtils.parseObject(model.getMetaInfo(), BpmModelMetaInfoRespDTO.class); return metaInfo != null ? metaInfo.getFormId() : null; }); - Map formMap = formServiceApi.getFormMap(formIds); + Map formMap = bpmFormService.getFormMap(formIds); // 获得 Deployment Map Set deploymentIds = new HashSet<>(); @@ -172,7 +168,7 @@ public class BpmModelServiceImpl implements BpmModelService { } // TODO 芋艿:校验æµç¨‹å›¾çš„æœ‰æ•ˆæ€§ï¼›ä¾‹å¦‚è¯´ï¼Œæ˜¯å¦æœ‰å¼€å§‹çš„å…ƒç´ ï¼Œæ˜¯å¦æœ‰ç»“æŸçš„元素; // 校验表å•å·²é… - BpmFormDTO form = checkFormConfig(model); + BpmFormDO form = checkFormConfig(model); // 校验任务分é…规则已é…ç½® checkTaskAssignRuleAllConfig(id); @@ -225,14 +221,14 @@ public class BpmModelServiceImpl implements BpmModelService { * @param model æµç¨‹æ¨¡åž‹ * @return æµç¨‹è¡¨å• */ - private BpmFormDTO checkFormConfig(Model model) { + private BpmFormDO checkFormConfig(Model model) { BpmModelMetaInfoRespDTO metaInfo = JsonUtils.parseObject(model.getMetaInfo(), BpmModelMetaInfoRespDTO.class); if (metaInfo == null || metaInfo.getFormType() == null) { throw exception(MODEL_DEPLOY_FAIL_FORM_NOT_CONFIG); } // 校验表å•存在 if (Objects.equals(metaInfo.getFormType(), BpmModelFormTypeEnum.NORMAL.getType())) { - BpmFormDTO form = formServiceApi.getForm(metaInfo.getFormId()); + BpmFormDO form = bpmFormService.getForm(metaInfo.getFormId()); if (form == null) { throw exception(FORM_NOT_EXISTS); } diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmProcessDefinitionServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmProcessDefinitionServiceImpl.java similarity index 96% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmProcessDefinitionServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmProcessDefinitionServiceImpl.java index 67dc6e1683..16a9689782 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmProcessDefinitionServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmProcessDefinitionServiceImpl.java @@ -1,22 +1,21 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.definition.impl; +package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmProcessDefinitionConvert; +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; +import cn.iocoder.yudao.framework.activiti.core.util.ActivitiUtils; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.PageUtils; import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionListReqVO; import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionPageItemRespVO; import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionPageReqVO; import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmProcessDefinitionConvert; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmProcessDefinitionExtMapper; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; -import cn.iocoder.yudao.module.bpm.api.form.BpmFormServiceApi; -import cn.iocoder.yudao.module.bpm.api.form.dto.BpmFormDTO; -import cn.iocoder.yudao.framework.activiti.core.util.ActivitiUtils; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.object.PageUtils; +import cn.iocoder.yudao.module.bpm.dal.mysql.definition.BpmProcessDefinitionExtMapper; +import cn.iocoder.yudao.module.bpm.service.definition.BpmFormService; import lombok.extern.slf4j.Slf4j; import org.activiti.bpmn.model.BpmnModel; import org.activiti.engine.RepositoryService; @@ -31,10 +30,10 @@ import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.util.*; -import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.PROCESS_DEFINITION_KEY_NOT_MATCH; -import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.PROCESS_DEFINITION_NAME_NOT_MATCH; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.PROCESS_DEFINITION_KEY_NOT_MATCH; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.PROCESS_DEFINITION_NAME_NOT_MATCH; import static java.util.Collections.emptyList; /** @@ -55,7 +54,7 @@ public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionServ @Resource private RepositoryService repositoryService; @Resource - private BpmFormServiceApi bpmFormServiceApi; + private BpmFormService formService; @Resource private BpmProcessDefinitionExtMapper processDefinitionMapper; @@ -86,7 +85,7 @@ public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionServ // 获得 Form Map Set formIds = convertSet(processDefinitionDOs, BpmProcessDefinitionExtDO::getFormId); - Map formMap = bpmFormServiceApi.getFormMap(formIds); + Map formMap = formService.getFormMap(formIds); // 拼接结果 long definitionCount = definitionQuery.count(); diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmTaskAssignRuleServiceImpl.java similarity index 83% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmTaskAssignRuleServiceImpl.java index b58ab0cb94..1e80f854ed 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmTaskAssignRuleServiceImpl.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.definition.impl; +package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; @@ -8,21 +8,18 @@ import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRu import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleUpdateReqVO; import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmTaskAssignRuleConvert; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmTaskAssignRuleMapper; +import cn.iocoder.yudao.module.bpm.dal.mysql.definition.BpmTaskAssignRuleMapper; import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskAssignRuleTypeEnum; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmModelService; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; -import cn.iocoder.yudao.module.bpm.api.group.BpmUserGroupServiceApi; -import cn.iocoder.yudao.module.system.enums.SysDictTypeConstants; -import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; -import cn.iocoder.yudao.module.system.service.dept.SysPostCoreService; -import cn.iocoder.yudao.module.system.service.dict.DictDataCoreService; -import cn.iocoder.yudao.module.system.service.permission.SysRoleCoreService; -import cn.iocoder.yudao.module.system.service.user.SysUserCoreService; import cn.iocoder.yudao.framework.activiti.core.util.ActivitiUtils; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; +import cn.iocoder.yudao.module.bpm.service.definition.BpmUserGroupService; +import cn.iocoder.yudao.module.system.api.dept.DeptApi; +import cn.iocoder.yudao.module.system.api.dept.PostApi; +import cn.iocoder.yudao.module.system.api.dict.DictDataApi; +import cn.iocoder.yudao.module.system.api.permission.RoleApi; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; +import cn.iocoder.yudao.module.system.enums.DictTypeConstants; import lombok.extern.slf4j.Slf4j; import org.activiti.bpmn.model.BpmnModel; import org.activiti.bpmn.model.UserTask; @@ -34,6 +31,7 @@ import javax.annotation.Resource; import java.util.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*; /** * BPM 任务分é…规则 Service 实现类 @@ -53,17 +51,17 @@ public class BpmTaskAssignRuleServiceImpl implements BpmTaskAssignRuleService { @Lazy // 解决循环ä¾èµ– private BpmProcessDefinitionService processDefinitionService; @Resource - private SysRoleCoreService roleCoreService; + private BpmUserGroupService userGroupService; @Resource - private SysDeptCoreService deptCoreService; + private RoleApi roleApi; @Resource - private SysPostCoreService postService; + private DeptApi deptApi; @Resource - private SysUserCoreService userCoreService; + private PostApi postApi; @Resource - private BpmUserGroupServiceApi userGroupServiceApi; + private AdminUserApi adminUserApi; @Resource - private DictDataCoreService dictDataCoreService; + private DictDataApi dictDataApi; @Override public List getTaskAssignRuleListByProcessDefinitionId(String processDefinitionId, @@ -178,18 +176,18 @@ public class BpmTaskAssignRuleServiceImpl implements BpmTaskAssignRuleService { private void validTaskAssignRuleOptions(Integer type, Set options) { if (Objects.equals(type, BpmTaskAssignRuleTypeEnum.ROLE.getType())) { - roleCoreService.validRoles(options); + roleApi.validRoles(options); } else if (ObjectUtils.equalsAny(type, BpmTaskAssignRuleTypeEnum.DEPT_MEMBER.getType(), BpmTaskAssignRuleTypeEnum.DEPT_LEADER.getType())) { - deptCoreService.validDepts(options); + deptApi.validDepts(options); } else if (Objects.equals(type, BpmTaskAssignRuleTypeEnum.POST.getType())) { - postService.validPosts(options); + postApi.validPosts(options); } else if (Objects.equals(type, BpmTaskAssignRuleTypeEnum.USER.getType())) { - userCoreService.validUsers(options); + adminUserApi.validUsers(options); } else if (Objects.equals(type, BpmTaskAssignRuleTypeEnum.USER_GROUP.getType())) { - userGroupServiceApi.validUserGroups(options); + userGroupService.validUserGroups(options); } else if (Objects.equals(type, BpmTaskAssignRuleTypeEnum.SCRIPT.getType())) { - dictDataCoreService.validDictDatas(SysDictTypeConstants.BPM_TASK_ASSIGN_SCRIPT, + dictDataApi.validDictDatas(DictTypeConstants.BPM_TASK_ASSIGN_SCRIPT, CollectionUtils.convertSet(options, String::valueOf)); } else { throw new IllegalArgumentException(StrUtil.format("未知的规则类型({})", type)); diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveService.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveService.java index bb4e0de8b6..c612b8193f 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveService.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveService.java @@ -1,7 +1,8 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.oa; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.*; +import cn.iocoder.yudao.module.bpm.controller.oa.vo.BpmOALeaveCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.oa.vo.BpmOALeavePageReqVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/impl/BpmOALeaveServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveServiceImpl.java similarity index 89% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/impl/BpmOALeaveServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveServiceImpl.java index 31e881242d..ab9dcec42b 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/impl/BpmOALeaveServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveServiceImpl.java @@ -1,12 +1,12 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.oa.impl; +package cn.iocoder.yudao.adminserver.modules.bpm.service.oa; import cn.hutool.core.date.DateUtil; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.*; import cn.iocoder.yudao.adminserver.modules.bpm.convert.oa.BpmOALeaveConvert; +import cn.iocoder.yudao.module.bpm.controller.oa.vo.BpmOALeaveCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.oa.vo.BpmOALeavePageReqVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.oa.BpmOALeaveMapper; +import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOALeaveMapper; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; -import cn.iocoder.yudao.adminserver.modules.bpm.service.oa.BpmOALeaveService; import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; import cn.iocoder.yudao.adminserver.modules.bpm.service.task.dto.BpmProcessInstanceCreateReqDTO; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -18,6 +18,7 @@ import javax.annotation.Resource; import java.util.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*; /** * OA 请å‡ç”³è¯· Service 实现类 diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/listener/BpmOALeaveResultListener.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/listener/BpmOALeaveResultListener.java index fcc716db94..bd80d51dd3 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/listener/BpmOALeaveResultListener.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/listener/BpmOALeaveResultListener.java @@ -3,7 +3,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.oa.listener; import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event.BpmProcessInstanceResultEvent; import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event.BpmProcessInstanceResultEventListener; import cn.iocoder.yudao.adminserver.modules.bpm.service.oa.BpmOALeaveService; -import cn.iocoder.yudao.adminserver.modules.bpm.service.oa.impl.BpmOALeaveServiceImpl; +import cn.iocoder.yudao.adminserver.modules.bpm.service.oa.BpmOALeaveServiceImpl; import org.springframework.stereotype.Component; import javax.annotation.Resource; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmActivityService.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmActivityService.java index 8fb15f5ba2..badba2b9c7 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmActivityService.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmActivityService.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.task; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.activity.BpmActivityRespVO; +import cn.iocoder.yudao.module.bpm.controller.task.vo.activity.BpmActivityRespVO; import java.util.List; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmActivityServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmActivityServiceImpl.java similarity index 86% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmActivityServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmActivityServiceImpl.java index 34f7604c08..f60351bd2b 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmActivityServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmActivityServiceImpl.java @@ -1,13 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.task.impl; +package cn.iocoder.yudao.adminserver.modules.bpm.service.task; import cn.hutool.core.io.IoUtil; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.activity.BpmActivityRespVO; import cn.iocoder.yudao.adminserver.modules.bpm.convert.task.BpmActivityConvert; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; -import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmActivityService; -import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; -import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import cn.iocoder.yudao.module.bpm.controller.task.vo.activity.BpmActivityRespVO; import lombok.extern.slf4j.Slf4j; import org.activiti.bpmn.model.BpmnModel; import org.activiti.engine.HistoryService; @@ -24,7 +21,7 @@ import java.util.Collections; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*; /** * BPM 活动实例 Service 实现类 diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java index 1fc2bffc15..1942b13a07 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.task; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.*; +import cn.iocoder.yudao.module.bpm.controller.task.vo.instance.*; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceDeleteReasonEnum; import cn.iocoder.yudao.adminserver.modules.bpm.service.task.dto.BpmProcessInstanceCreateReqDTO; import cn.iocoder.yudao.framework.common.pojo.PageResult; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceServiceImpl.java similarity index 93% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceServiceImpl.java index 8aa06f3504..caf7fe14e1 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceServiceImpl.java @@ -1,29 +1,27 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.task.impl; +package cn.iocoder.yudao.adminserver.modules.bpm.service.task; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.*; import cn.iocoder.yudao.adminserver.modules.bpm.convert.message.BpmMessageConvert; import cn.iocoder.yudao.adminserver.modules.bpm.convert.task.BpmProcessInstanceConvert; +import cn.iocoder.yudao.module.bpm.controller.task.vo.instance.*; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.task.BpmProcessInstanceExtMapper; +import cn.iocoder.yudao.module.bpm.dal.mysql.task.BpmProcessInstanceExtMapper; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceDeleteReasonEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceStatusEnum; import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event.BpmProcessInstanceResultEventPublisher; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService; -import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; -import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; import cn.iocoder.yudao.adminserver.modules.bpm.service.task.dto.BpmProcessInstanceCreateReqDTO; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.module.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; -import cn.iocoder.yudao.module.system.service.user.SysUserCoreService; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.number.NumberUtils; +import cn.iocoder.yudao.module.system.api.dept.DeptApi; +import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import lombok.extern.slf4j.Slf4j; import org.activiti.engine.HistoryService; import org.activiti.engine.RuntimeService; @@ -41,6 +39,7 @@ import java.util.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*; /** * æµç¨‹å®žä¾‹ Service 实现类 @@ -65,9 +64,9 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService private HistoryService historyService; @Resource - private SysUserCoreService userCoreService; + private AdminUserApi adminUserApi; @Resource - private SysDeptCoreService deptCoreService; + private DeptApi deptApi; @Resource @Lazy // 解决循环ä¾èµ– private BpmTaskService taskService; @@ -189,10 +188,10 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService String bpmnXml = processDefinitionService.getProcessDefinitionBpmnXML(processInstance.getProcessDefinitionId()); // 获得 User - SysUserDO startUser = userCoreService.getUser(NumberUtils.parseLong(processInstance.getStartUserId())); - SysDeptDO dept = null; + AdminUserRespDTO startUser = adminUserApi.getUser(NumberUtils.parseLong(processInstance.getStartUserId())); + DeptRespDTO dept = null; if (startUser != null) { - dept = deptCoreService.getDept(startUser.getDeptId()); + dept = deptApi.getDept(startUser.getDeptId()); } // 拼接结果 diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskService.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskService.java index b6162dbd8e..796106a581 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskService.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskService.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.task; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.*; +import cn.iocoder.yudao.module.bpm.controller.task.vo.task.*; import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskServiceImpl.java similarity index 91% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskServiceImpl.java index b694b25aa8..0fc5385a0f 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskServiceImpl.java @@ -1,25 +1,23 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.task.impl; +package cn.iocoder.yudao.adminserver.modules.bpm.service.task; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.*; import cn.iocoder.yudao.adminserver.modules.bpm.convert.message.BpmMessageConvert; import cn.iocoder.yudao.adminserver.modules.bpm.convert.task.BpmTaskConvert; +import cn.iocoder.yudao.module.bpm.controller.task.vo.task.*; import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.task.BpmTaskExtMapper; +import cn.iocoder.yudao.module.bpm.dal.mysql.task.BpmTaskExtMapper; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService; -import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; -import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.module.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; -import cn.iocoder.yudao.module.system.service.user.SysUserCoreService; import cn.iocoder.yudao.framework.activiti.core.util.ActivitiUtils; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.number.NumberUtils; import cn.iocoder.yudao.framework.common.util.object.PageUtils; +import cn.iocoder.yudao.module.system.api.dept.DeptApi; +import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import lombok.extern.slf4j.Slf4j; import org.activiti.engine.HistoryService; import org.activiti.engine.TaskService; @@ -42,6 +40,7 @@ import java.util.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*; /** * æµç¨‹ä»»åŠ¡å®žä¾‹ Service 实现类 @@ -59,9 +58,9 @@ public class BpmTaskServiceImpl implements BpmTaskService { private HistoryService historyService; @Resource - private SysUserCoreService userCoreService; + private AdminUserApi adminUserApi; @Resource - private SysDeptCoreService deptCoreService; + private DeptApi deptApi; @Resource @Lazy // 解决循环ä¾èµ– private BpmProcessInstanceService processInstanceService; @@ -95,9 +94,9 @@ public class BpmTaskServiceImpl implements BpmTaskService { // 获得 User Map Set userIds = convertSet(tasks, task -> NumberUtils.parseLong(task.getAssignee())); userIds.add(NumberUtils.parseLong(processInstance.getStartUserId())); - Map userMap = userCoreService.getUserMap(userIds); + Map userMap = adminUserApi.getUserMap(userIds); // 获得 Dept Map - Map deptMap = deptCoreService.getDeptMap(convertSet(userMap.values(), SysUserDO::getDeptId)); + Map deptMap = deptApi.getDeptMap(convertSet(userMap.values(), AdminUserRespDTO::getDeptId)); // æ‹¼æŽ¥æ•°æ® return BpmTaskConvert.INSTANCE.convertList3(tasks, bpmTaskExtDOMap, processInstance, userMap, deptMap); @@ -144,7 +143,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { Map processInstanceMap = processInstanceService.getProcessInstanceMap( convertSet(tasks, Task::getProcessInstanceId)); // 获得 User Map - Map userMap = userCoreService.getUserMap( + Map userMap = adminUserApi.getUserMap( convertSet(processInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId()))); // 拼接结果 return new PageResult<>(BpmTaskConvert.INSTANCE.convertList1(tasks, processInstanceMap, userMap), @@ -180,7 +179,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { Map historicProcessInstanceMap = processInstanceService.getHistoricProcessInstanceMap( convertSet(tasks, HistoricTaskInstance::getProcessInstanceId)); // 获得 User Map - Map userMap = userCoreService.getUserMap( + Map userMap = adminUserApi.getUserMap( convertSet(historicProcessInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId()))); // 拼接结果 return new PageResult<>(BpmTaskConvert.INSTANCE.convertList2(tasks, bpmTaskExtDOMap, historicProcessInstanceMap, userMap), @@ -291,7 +290,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { @Override public void afterCommit() { ProcessInstance processInstance = processInstanceService.getProcessInstance(task.getProcessInstanceId()); - SysUserDO startUser = userCoreService.getUser(Long.valueOf(processInstance.getStartUserId())); + AdminUserRespDTO startUser = adminUserApi.getUser(Long.valueOf(processInstance.getStartUserId())); messageService.sendMessageWhenTaskAssigned(BpmMessageConvert.INSTANCE.convert(processInstance, startUser, task)); } }); diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java index c10a614ae4..8d2e1b6723 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java @@ -1,21 +1,21 @@ package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior; import cn.hutool.core.map.MapUtil; -import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; -import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskAssignRuleTypeEnum; -import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskRuleScriptEnum; import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; -import cn.iocoder.yudao.module.bpm.api.group.BpmUserGroupServiceApi; -import cn.iocoder.yudao.module.bpm.api.group.dto.BpmUserGroupDTO; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.module.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; -import cn.iocoder.yudao.module.system.service.permission.SysPermissionCoreService; -import cn.iocoder.yudao.module.system.service.user.SysUserCoreService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmUserGroupDO; +import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskAssignRuleTypeEnum; +import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskRuleScriptEnum; +import cn.iocoder.yudao.module.bpm.service.definition.BpmUserGroupService; +import cn.iocoder.yudao.module.system.api.dept.DeptApi; +import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; +import cn.iocoder.yudao.module.system.api.permission.PermissionApi; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import org.activiti.engine.impl.persistence.entity.TaskEntity; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; @@ -40,13 +40,14 @@ public class BpmUserTaskActivitiBehaviorTest extends BaseMockitoUnitTest { @Mock private BpmTaskAssignRuleService bpmTaskRuleService; @Mock - private SysPermissionCoreService permissionCoreService; + private BpmUserGroupService userGroupService; + @Mock - private SysDeptCoreService deptCoreService; + private DeptApi deptApi; @Mock - private BpmUserGroupServiceApi userGroupServiceApi; + private AdminUserApi adminUserApi; @Mock - private SysUserCoreService userCoreService; + private PermissionApi permissionApi; @Test public void testCalculateTaskCandidateUsers_Role() { @@ -54,7 +55,7 @@ public class BpmUserTaskActivitiBehaviorTest extends BaseMockitoUnitTest { BpmTaskAssignRuleDO rule = new BpmTaskAssignRuleDO().setOptions(asSet(1L, 2L)) .setType(BpmTaskAssignRuleTypeEnum.ROLE.getType()); // mock 方法 - when(permissionCoreService.getUserRoleIdListByRoleIds(eq(rule.getOptions()))) + when(permissionApi.getUserRoleIdListByRoleIds(eq(rule.getOptions()))) .thenReturn(asSet(11L, 22L)); mockGetUserMap(asSet(11L, 22L)); @@ -70,9 +71,9 @@ public class BpmUserTaskActivitiBehaviorTest extends BaseMockitoUnitTest { BpmTaskAssignRuleDO rule = new BpmTaskAssignRuleDO().setOptions(asSet(1L, 2L)) .setType(BpmTaskAssignRuleTypeEnum.DEPT_MEMBER.getType()); // mock 方法 - List users = CollectionUtils.convertList(asSet(11L, 22L), - id -> new SysUserDO().setId(id)); - when(userCoreService.getUsersByDeptIds(eq(rule.getOptions()))).thenReturn(users); + List users = CollectionUtils.convertList(asSet(11L, 22L), + id -> new AdminUserRespDTO().setId(id)); + when(adminUserApi.getUsersByDeptIds(eq(rule.getOptions()))).thenReturn(users); mockGetUserMap(asSet(11L, 22L)); // 调用 @@ -87,9 +88,9 @@ public class BpmUserTaskActivitiBehaviorTest extends BaseMockitoUnitTest { BpmTaskAssignRuleDO rule = new BpmTaskAssignRuleDO().setOptions(asSet(1L, 2L)) .setType(BpmTaskAssignRuleTypeEnum.DEPT_LEADER.getType()); // mock 方法 - SysDeptDO dept1 = randomPojo(SysDeptDO.class, o -> o.setLeaderUserId(11L)); - SysDeptDO dept2 = randomPojo(SysDeptDO.class, o -> o.setLeaderUserId(22L)); - when(deptCoreService.getDepts(eq(rule.getOptions()))).thenReturn(Arrays.asList(dept1, dept2)); + DeptRespDTO dept1 = randomPojo(DeptRespDTO.class, o -> o.setLeaderUserId(11L)); + DeptRespDTO dept2 = randomPojo(DeptRespDTO.class, o -> o.setLeaderUserId(22L)); + when(deptApi.getDepts(eq(rule.getOptions()))).thenReturn(Arrays.asList(dept1, dept2)); mockGetUserMap(asSet(11L, 22L)); // 调用 @@ -104,9 +105,9 @@ public class BpmUserTaskActivitiBehaviorTest extends BaseMockitoUnitTest { BpmTaskAssignRuleDO rule = new BpmTaskAssignRuleDO().setOptions(asSet(1L, 2L)) .setType(BpmTaskAssignRuleTypeEnum.POST.getType()); // mock 方法 - List users = CollectionUtils.convertList(asSet(11L, 22L), - id -> new SysUserDO().setId(id)); - when(userCoreService.getUsersByPostIds(eq(rule.getOptions()))).thenReturn(users); + List users = CollectionUtils.convertList(asSet(11L, 22L), + id -> new AdminUserRespDTO().setId(id)); + when(adminUserApi.getUsersByPostIds(eq(rule.getOptions()))).thenReturn(users); mockGetUserMap(asSet(11L, 22L)); // 调用 @@ -135,9 +136,9 @@ public class BpmUserTaskActivitiBehaviorTest extends BaseMockitoUnitTest { BpmTaskAssignRuleDO rule = new BpmTaskAssignRuleDO().setOptions(asSet(1L, 2L)) .setType(BpmTaskAssignRuleTypeEnum.USER_GROUP.getType()); // mock 方法 - BpmUserGroupDTO userGroup1 = randomPojo(BpmUserGroupDTO.class, o -> o.setMemberUserIds(asSet(11L, 12L))); - BpmUserGroupDTO userGroup2 = randomPojo(BpmUserGroupDTO.class, o -> o.setMemberUserIds(asSet(21L, 22L))); - when(userGroupServiceApi.getUserGroupList(eq(rule.getOptions()))).thenReturn(Arrays.asList(userGroup1, userGroup2)); + BpmUserGroupDO userGroup1 = randomPojo(BpmUserGroupDO.class, o -> o.setMemberUserIds(asSet(11L, 12L))); + BpmUserGroupDO userGroup2 = randomPojo(BpmUserGroupDO.class, o -> o.setMemberUserIds(asSet(21L, 22L))); + when(userGroupService.getUserGroupList(eq(rule.getOptions()))).thenReturn(Arrays.asList(userGroup1, userGroup2)); mockGetUserMap(asSet(11L, 12L, 21L, 22L)); // 调用 @@ -190,13 +191,13 @@ public class BpmUserTaskActivitiBehaviorTest extends BaseMockitoUnitTest { // 准备傿•°. 1L å¯ä»¥æ‰¾åˆ°ï¼›2L 是ç¦ç”¨çš„ï¼›3L 找ä¸åˆ° Set assigneeUserIds = asSet(1L, 2L, 3L); // mock 方法 - SysUserDO user1 = randomPojo(SysUserDO.class, o -> o.setId(1L) + AdminUserRespDTO user1 = randomPojo(AdminUserRespDTO.class, o -> o.setId(1L) .setStatus(CommonStatusEnum.ENABLE.getStatus())); - SysUserDO user2 = randomPojo(SysUserDO.class, o -> o.setId(2L) + AdminUserRespDTO user2 = randomPojo(AdminUserRespDTO.class, o -> o.setId(2L) .setStatus(CommonStatusEnum.DISABLE.getStatus())); - Map userMap = MapUtil.builder(user1.getId(), user1) + Map userMap = MapUtil.builder(user1.getId(), user1) .put(user2.getId(), user2).build(); - when(userCoreService.getUserMap(eq(assigneeUserIds))).thenReturn(userMap); + when(adminUserApi.getUserMap(eq(assigneeUserIds))).thenReturn(userMap); // 调用 behavior.removeDisableUsers(assigneeUserIds); @@ -205,9 +206,9 @@ public class BpmUserTaskActivitiBehaviorTest extends BaseMockitoUnitTest { } private void mockGetUserMap(Set assigneeUserIds) { - Map userMap = CollectionUtils.convertMap(assigneeUserIds, id -> id, - id -> new SysUserDO().setId(id).setStatus(CommonStatusEnum.ENABLE.getStatus())); - when(userCoreService.getUserMap(eq(assigneeUserIds))).thenReturn(userMap); + Map userMap = CollectionUtils.convertMap(assigneeUserIds, id -> id, + id -> new AdminUserRespDTO().setId(id).setStatus(CommonStatusEnum.ENABLE.getStatus())); + when(adminUserApi.getUserMap(eq(assigneeUserIds))).thenReturn(userMap); } } diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2ScriptTest.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2ScriptTest.java index bc0ab21e6d..8be8fc4d17 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2ScriptTest.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2ScriptTest.java @@ -1,16 +1,16 @@ package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.impl; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO; -import cn.iocoder.yudao.module.system.dal.dataobject.user.SysUserDO; -import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService; -import cn.iocoder.yudao.module.system.service.user.SysUserCoreService; import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; +import cn.iocoder.yudao.module.system.api.dept.DeptApi; +import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import org.activiti.engine.impl.persistence.entity.ExecutionEntityImpl; import org.activiti.engine.impl.persistence.entity.TaskEntity; import org.activiti.engine.impl.persistence.entity.TaskEntityImpl; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; -import org.mockito.Mock; +import org.springframework.boot.test.mock.mockito.MockBean; import java.util.Set; @@ -25,18 +25,18 @@ class BpmTaskAssignLeaderX2ScriptTest extends BaseMockitoUnitTest { @InjectMocks private BpmTaskAssignLeaderX2Script script; - @Mock - private SysUserCoreService userCoreService; - @Mock - private SysDeptCoreService deptCoreService; + @MockBean + private AdminUserApi adminUserApi; + @MockBean + private DeptApi deptApi; @Test public void testCalculateTaskCandidateUsers_noDept() { // 准备傿•° TaskEntity task = buildTaskEntity(1L); // mock 方法(startUser) - SysUserDO startUser = randomPojo(SysUserDO.class, o -> o.setDeptId(10L)); - when(userCoreService.getUser(eq(1L))).thenReturn(startUser); + AdminUserRespDTO startUser = randomPojo(AdminUserRespDTO.class, o -> o.setDeptId(10L)); + when(adminUserApi.getUser(eq(1L))).thenReturn(startUser); // 调用 Set result = script.calculateTaskCandidateUsers(task); @@ -49,11 +49,11 @@ class BpmTaskAssignLeaderX2ScriptTest extends BaseMockitoUnitTest { // 准备傿•° TaskEntity task = buildTaskEntity(1L); // mock 方法(startUser) - SysUserDO startUser = randomPojo(SysUserDO.class, o -> o.setDeptId(10L)); - when(userCoreService.getUser(eq(1L))).thenReturn(startUser); - SysDeptDO startUserDept = randomPojo(SysDeptDO.class, o -> o.setId(10L).setParentId(100L) + AdminUserRespDTO startUser = randomPojo(AdminUserRespDTO.class, o -> o.setDeptId(10L)); + when(adminUserApi.getUser(eq(1L))).thenReturn(startUser); + DeptRespDTO startUserDept = randomPojo(DeptRespDTO.class, o -> o.setId(10L).setParentId(100L) .setLeaderUserId(20L)); - when(deptCoreService.getDept(eq(10L))).thenReturn(startUserDept); + when(deptApi.getDept(eq(10L))).thenReturn(startUserDept); // 调用 Set result = script.calculateTaskCandidateUsers(task); @@ -66,15 +66,15 @@ class BpmTaskAssignLeaderX2ScriptTest extends BaseMockitoUnitTest { // 准备傿•° TaskEntity task = buildTaskEntity(1L); // mock 方法(startUser) - SysUserDO startUser = randomPojo(SysUserDO.class, o -> o.setDeptId(10L)); - when(userCoreService.getUser(eq(1L))).thenReturn(startUser); - SysDeptDO startUserDept = randomPojo(SysDeptDO.class, o -> o.setId(10L).setParentId(100L) + AdminUserRespDTO startUser = randomPojo(AdminUserRespDTO.class, o -> o.setDeptId(10L)); + when(adminUserApi.getUser(eq(1L))).thenReturn(startUser); + DeptRespDTO startUserDept = randomPojo(DeptRespDTO.class, o -> o.setId(10L).setParentId(100L) .setLeaderUserId(20L)); - when(deptCoreService.getDept(eq(10L))).thenReturn(startUserDept); + when(deptApi.getDept(eq(10L))).thenReturn(startUserDept); // mock 方法(父 dept) - SysDeptDO parentDept = randomPojo(SysDeptDO.class, o -> o.setId(100L).setParentId(1000L) + DeptRespDTO parentDept = randomPojo(DeptRespDTO.class, o -> o.setId(100L).setParentId(1000L) .setLeaderUserId(200L)); - when(deptCoreService.getDept(eq(100L))).thenReturn(parentDept); + when(deptApi.getDept(eq(100L))).thenReturn(parentDept); // 调用 Set result = script.calculateTaskCandidateUsers(task); diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/auth/AuthConvert.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/auth/AuthConvert.java index 323827d4f1..f443765cd5 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/auth/AuthConvert.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/auth/AuthConvert.java @@ -4,8 +4,8 @@ import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.module.member.controller.app.auth.vo.*; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; -import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeSendReqDTO; -import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeUseReqDTO; +import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeSendReqDTO; +import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO; import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; import cn.iocoder.yudao.module.system.api.social.dto.SocialUserUnbindReqDTO; import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java index ad12b40a69..fcfe3ae511 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java @@ -8,7 +8,7 @@ import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserUpdateMobile import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; import cn.iocoder.yudao.module.system.api.sms.SmsCodeApi; -import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeUseReqDTO; +import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO; import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; import com.google.common.annotations.VisibleForTesting; import lombok.extern.slf4j.Slf4j; diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dept/DeptApi.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dept/DeptApi.java new file mode 100644 index 0000000000..d228fc3b71 --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dept/DeptApi.java @@ -0,0 +1,50 @@ +package cn.iocoder.yudao.module.system.api.dept; + +import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * 部门 API æŽ¥å£ + * + * @author èŠ‹é“æºç  + */ +public interface DeptApi { + + /** + * èŽ·å¾—éƒ¨é—¨ä¿¡æ¯ + * + * @param id éƒ¨é—¨ç¼–å· + * @return éƒ¨é—¨ä¿¡æ¯ + */ + DeptRespDTO getDept(Long id); + + /** + * èŽ·å¾—éƒ¨é—¨ä¿¡æ¯æ•°ç»„ + * + * @param ids éƒ¨é—¨ç¼–å·æ•°ç»„ + * @return éƒ¨é—¨ä¿¡æ¯æ•°ç»„ + */ + List getDepts(Collection ids); + + /** + * æ ¡éªŒéƒ¨é—¨ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: + * 1. 部门编å·ä¸å­˜åœ¨ + * 2. 部门被ç¦ç”¨ + * + * @param ids è§’è‰²ç¼–å·æ•°ç»„ + */ + void validDepts(Collection ids); + + /** + * 获得指定编å·çš„部门 Map + * + * @param ids éƒ¨é—¨ç¼–å·æ•°ç»„ + * @return 部门 Map + */ + Map getDeptMap(Set ids); + +} diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dept/PostApi.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dept/PostApi.java new file mode 100644 index 0000000000..d1e3d47a1d --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dept/PostApi.java @@ -0,0 +1,21 @@ +package cn.iocoder.yudao.module.system.api.dept; + +import java.util.Collection; + +/** + * å²—ä½ API æŽ¥å£ + * + * @author èŠ‹é“æºç  + */ +public interface PostApi { + + /** + * 校验岗ä½ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: + * 1. å²—ä½ç¼–å·ä¸å­˜åœ¨ + * 2. å²—ä½è¢«ç¦ç”¨ + * + * @param ids å²—ä½ç¼–å·æ•°ç»„ + */ + void validPosts(Collection ids); + +} diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dept/dto/DeptRespDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dept/dto/DeptRespDTO.java new file mode 100644 index 0000000000..d3e66fdd83 --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dept/dto/DeptRespDTO.java @@ -0,0 +1,37 @@ +package cn.iocoder.yudao.module.system.api.dept.dto; + +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import lombok.Data; + +/** + * 部门 Response DTO + * + * @author èŠ‹é“æºç  + */ +@Data +public class DeptRespDTO { + + /** + * éƒ¨é—¨ç¼–å· + */ + private Long id; + /** + * 部门åç§° + */ + private String name; + /** + * çˆ¶éƒ¨é—¨ç¼–å· + */ + private Long parentId; + /** + * è´Ÿè´£äººçš„ç”¨æˆ·ç¼–å· + */ + private Long leaderUserId; + /** + * éƒ¨é—¨çŠ¶æ€ + * + * 枚举 {@link CommonStatusEnum} + */ + private Integer status; + +} diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dict/DictDataApi.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dict/DictDataApi.java new file mode 100644 index 0000000000..35393a04a2 --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dict/DictDataApi.java @@ -0,0 +1,22 @@ +package cn.iocoder.yudao.module.system.api.dict; + +import java.util.Collection; + +/** + * å­—å…¸æ•°æ® API æŽ¥å£ + * + * @author èŠ‹é“æºç  + */ +public interface DictDataApi { + + /** + * 校验字典数æ®ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: + * 1. 字典数æ®ä¸å­˜åœ¨ + * 2. 字典数æ®è¢«ç¦ç”¨ + * + * @param dictType 字典类型 + * @param values 字典数æ®å€¼çš„æ•°ç»„ + */ + void validDictDatas(String dictType, Collection values); + +} diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/permission/PermissionApi.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/permission/PermissionApi.java new file mode 100644 index 0000000000..04e9638696 --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/permission/PermissionApi.java @@ -0,0 +1,21 @@ +package cn.iocoder.yudao.module.system.api.permission; + +import java.util.Collection; +import java.util.Set; + +/** + * æƒé™ API æŽ¥å£ + * + * @author èŠ‹é“æºç  + */ +public interface PermissionApi { + + /** + * 获得拥有多个角色的用户编å·é›†åˆ + * + * @param roleIds 角色编å·é›†åˆ + * @return 用户编å·é›†åˆ + */ + Set getUserRoleIdListByRoleIds(Collection roleIds); + +} diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/permission/RoleApi.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/permission/RoleApi.java new file mode 100644 index 0000000000..14133e9d90 --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/permission/RoleApi.java @@ -0,0 +1,21 @@ +package cn.iocoder.yudao.module.system.api.permission; + +import java.util.Collection; + +/** + * 角色 API æŽ¥å£ + * + * @author èŠ‹é“æºç  + */ +public interface RoleApi { + + /** + * æ ¡éªŒè§’è‰²ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: + * 1. 角色编å·ä¸å­˜åœ¨ + * 2. 角色被ç¦ç”¨ + * + * @param ids è§’è‰²ç¼–å·æ•°ç»„ + */ + void validRoles(Collection ids); + +} diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/SmsCodeApi.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/SmsCodeApi.java index 1a3aea7eee..ffcf46dc08 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/SmsCodeApi.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/SmsCodeApi.java @@ -1,9 +1,9 @@ package cn.iocoder.yudao.module.system.api.sms; import cn.iocoder.yudao.framework.common.exception.ServiceException; -import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeCheckReqDTO; -import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeSendReqDTO; -import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeUseReqDTO; +import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeCheckReqDTO; +import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeSendReqDTO; +import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO; import javax.validation.Valid; diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/SmsSendApi.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/SmsSendApi.java new file mode 100644 index 0000000000..c86bbf503f --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/SmsSendApi.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.system.api.sms; + +import cn.iocoder.yudao.module.system.api.sms.dto.send.SmsSendSingleToUserReqDTO; + +import javax.validation.Valid; + +/** + * 短信å‘é€ API æŽ¥å£ + * + * @author èŠ‹é“æºç  + */ +public interface SmsSendApi { + + /** + * å‘é€å•æ¡çŸ­ä¿¡ç»™ Admin 用户 + * + * 在 mobile 为空时,使用 userId 加载对应 Admin çš„æ‰‹æœºå· + * + * @param reqDTO å‘é€è¯·æ±‚ + * @return å‘逿—¥å¿—ç¼–å· + */ + Long sendSingleSmsToAdmin(@Valid SmsSendSingleToUserReqDTO reqDTO); + + /** + * å‘é€å•æ¡çŸ­ä¿¡ç»™ Member 用户 + * + * 在 mobile 为空时,使用 userId 加载对应 Member çš„æ‰‹æœºå· + * + * @param reqDTO å‘é€è¯·æ±‚ + * @return å‘逿—¥å¿—ç¼–å· + */ + Long sendSingleSmsToMember(@Valid SmsSendSingleToUserReqDTO reqDTO); + +} diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/SmsCodeCheckReqDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/code/SmsCodeCheckReqDTO.java similarity index 92% rename from yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/SmsCodeCheckReqDTO.java rename to yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/code/SmsCodeCheckReqDTO.java index 2fd1ed6687..d6ca3c6983 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/SmsCodeCheckReqDTO.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/code/SmsCodeCheckReqDTO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.api.sms.dto; +package cn.iocoder.yudao.module.system.api.sms.dto.code; import cn.iocoder.yudao.framework.common.validation.InEnum; import cn.iocoder.yudao.framework.common.validation.Mobile; diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/SmsCodeSendReqDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/code/SmsCodeSendReqDTO.java similarity index 92% rename from yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/SmsCodeSendReqDTO.java rename to yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/code/SmsCodeSendReqDTO.java index 088899aac4..2d2a4c7e39 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/SmsCodeSendReqDTO.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/code/SmsCodeSendReqDTO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.api.sms.dto; +package cn.iocoder.yudao.module.system.api.sms.dto.code; import cn.iocoder.yudao.framework.common.validation.InEnum; import cn.iocoder.yudao.framework.common.validation.Mobile; diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/SmsCodeUseReqDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/code/SmsCodeUseReqDTO.java similarity index 93% rename from yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/SmsCodeUseReqDTO.java rename to yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/code/SmsCodeUseReqDTO.java index eedc2a90a2..3a639f46e1 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/SmsCodeUseReqDTO.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/code/SmsCodeUseReqDTO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.system.api.sms.dto; +package cn.iocoder.yudao.module.system.api.sms.dto.code; import cn.iocoder.yudao.framework.common.validation.InEnum; import cn.iocoder.yudao.framework.common.validation.Mobile; diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/send/SmsSendSingleToUserReqDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/send/SmsSendSingleToUserReqDTO.java new file mode 100644 index 0000000000..7701f714e3 --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/dto/send/SmsSendSingleToUserReqDTO.java @@ -0,0 +1,38 @@ +package cn.iocoder.yudao.module.system.api.sms.dto.send; + +import cn.iocoder.yudao.framework.common.validation.Mobile; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.Map; + +/** + * 短信å‘é€ç»™ Admin 或者 Member 用户 + * + * @author èŠ‹é“æºç  + */ +@Data +public class SmsSendSingleToUserReqDTO { + + /** + * ç”¨æˆ·ç¼–å· + */ + @NotNull(message = "用户编å·ä¸èƒ½ä¸ºç©º") + private Long userId; + /** + * æ‰‹æœºå· + */ + @Mobile + private String mobile; + /** + * 短信模æ¿ç¼–å· + */ + @NotEmpty(message = "短信模æ¿ç¼–å·ä¸èƒ½ä¸ºç©º") + private String templateCode; + /** + * 短信模æ¿å‚æ•° + */ + private Map templateParams; + +} diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/user/AdminUserApi.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/user/AdminUserApi.java new file mode 100644 index 0000000000..d994b0cb33 --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/user/AdminUserApi.java @@ -0,0 +1,58 @@ +package cn.iocoder.yudao.module.system.api.user; + +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * Admin 用户 API æŽ¥å£ + * + * @author èŠ‹é“æºç  + */ +public interface AdminUserApi { + + /** + * 通过用户 ID 查询用户 + * + * @param id 用户ID + * @return ç”¨æˆ·å¯¹è±¡ä¿¡æ¯ + */ + AdminUserRespDTO getUser(Long id); + + /** + * 获得指定部门的用户数组 + * + * @param deptIds 部门数组 + * @return 用户数组 + */ + List getUsersByDeptIds(Collection deptIds); + + /** + * 获得指定岗ä½çš„用户数组 + * + * @param postIds 岗使•°ç»„ + * @return 用户数组 + */ + List getUsersByPostIds(Collection postIds); + + /** + * 获得用户 Map + * + * @param ids ç”¨æˆ·ç¼–å·æ•°ç»„ + * @return 用户 Map + */ + Map getUserMap(Collection ids); + + /** + * æ ¡éªŒç”¨æˆ·ä»¬æ˜¯å¦æœ‰æ•ˆã€‚如下情况,视为无效: + * 1. 用户编å·ä¸å­˜åœ¨ + * 2. 用户被ç¦ç”¨ + * + * @param ids ç”¨æˆ·ç¼–å·æ•°ç»„ + */ + void validUsers(Set ids); + +} diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/user/dto/AdminUserRespDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/user/dto/AdminUserRespDTO.java new file mode 100644 index 0000000000..ac13c3a8b0 --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/user/dto/AdminUserRespDTO.java @@ -0,0 +1,44 @@ +package cn.iocoder.yudao.module.system.api.user.dto; + +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import lombok.Data; + +import java.util.Set; + +/** + * Admin 用户 Response DTO + * + * @author èŠ‹é“æºç  + */ +@Data +public class AdminUserRespDTO { + + /** + * 用户ID + */ + private Long id; + /** + * 用户昵称 + */ + private String nickname; + /** + * å¸å·çŠ¶æ€ + * + * 枚举 {@link CommonStatusEnum} + */ + private Integer status; + + /** + * 部门ID + */ + private Long deptId; + /** + * å²—ä½ç¼–å·æ•°ç»„ + */ + private Set postIds; + /** + * 手机å·ç  + */ + private String mobile; + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/dept/DeptApiImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/dept/DeptApiImpl.java new file mode 100644 index 0000000000..27fbc2f13c --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/dept/DeptApiImpl.java @@ -0,0 +1,49 @@ +package cn.iocoder.yudao.module.system.api.dept; + +import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; +import cn.iocoder.yudao.module.system.convert.dept.DeptConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; +import cn.iocoder.yudao.module.system.service.dept.DeptService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * 部门 API 实现类 + * + * @author èŠ‹é“æºç  + */ +@Service +public class DeptApiImpl implements DeptApi { + + @Resource + private DeptService deptService; + + @Override + public DeptRespDTO getDept(Long id) { + DeptDO dept = deptService.getDept(id); + return DeptConvert.INSTANCE.convert03(dept); + } + + @Override + public List getDepts(Collection ids) { + List depts = deptService.getDepts(ids); + return DeptConvert.INSTANCE.convertList03(depts); + } + + @Override + public void validDepts(Collection ids) { + deptService.validDepts(ids); + } + + @Override + public Map getDeptMap(Set ids) { + Map depts = deptService.getDeptMap(ids); + return DeptConvert.INSTANCE.convertMap(depts); + } + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/permission/PermissionApiImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/permission/PermissionApiImpl.java new file mode 100644 index 0000000000..5d2b550781 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/permission/PermissionApiImpl.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.system.api.permission; + +import cn.iocoder.yudao.module.system.service.permission.PermissionService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Collection; +import java.util.Set; + +/** + * æƒé™ API 实现类 + * + * @author èŠ‹é“æºç  + */ +@Service +public class PermissionApiImpl implements PermissionApi { + + @Resource + private PermissionService permissionService; + + @Override + public Set getUserRoleIdListByRoleIds(Collection roleIds) { + return permissionService.getUserRoleIdListByRoleIds(roleIds); + } + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/sms/SmsCodeApiImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/sms/SmsCodeApiImpl.java index 73d73b42f2..81957e0828 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/sms/SmsCodeApiImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/sms/SmsCodeApiImpl.java @@ -1,8 +1,8 @@ package cn.iocoder.yudao.module.system.api.sms; -import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeCheckReqDTO; -import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeSendReqDTO; -import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeUseReqDTO; +import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeCheckReqDTO; +import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeSendReqDTO; +import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO; import cn.iocoder.yudao.module.system.service.sms.SmsCodeService; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/sms/SmsSendApiImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/sms/SmsSendApiImpl.java new file mode 100644 index 0000000000..ee5812d3c3 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/sms/SmsSendApiImpl.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.system.api.sms; + +import cn.iocoder.yudao.module.system.api.sms.dto.send.SmsSendSingleToUserReqDTO; +import cn.iocoder.yudao.module.system.service.sms.SmsSendService; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; + +/** + * 短信å‘é€ API æŽ¥å£ + * + * @author èŠ‹é“æºç  + */ +@Service +@Validated +public class SmsSendApiImpl implements SmsSendApi { + + @Resource + private SmsSendService smsSendService; + + @Override + public Long sendSingleSmsToAdmin(SmsSendSingleToUserReqDTO reqDTO) { + return smsSendService.sendSingleSmsToAdmin(reqDTO.getMobile(), reqDTO.getUserId(), + reqDTO.getTemplateCode(), reqDTO.getTemplateParams()); + } + + @Override + public Long sendSingleSmsToMember(SmsSendSingleToUserReqDTO reqDTO) { + return smsSendService.sendSingleSmsToMember(reqDTO.getMobile(), reqDTO.getUserId(), + reqDTO.getTemplateCode(), reqDTO.getTemplateParams()); + } + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/user/AdminUserApiImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/user/AdminUserApiImpl.java new file mode 100644 index 0000000000..372e6f5e6e --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/user/AdminUserApiImpl.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.system.api.user; + +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; +import cn.iocoder.yudao.module.system.convert.user.UserConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; +import cn.iocoder.yudao.module.system.service.user.AdminUserService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * Admin 用户 API 实现类 + * + * @author èŠ‹é“æºç  + */ +@Service +public class AdminUserApiImpl implements AdminUserApi { + + @Resource + private AdminUserService userService; + + @Override + public AdminUserRespDTO getUser(Long id) { + AdminUserDO user = userService.getUser(id); + return UserConvert.INSTANCE.convert4(user); + } + + @Override + public List getUsersByDeptIds(Collection deptIds) { + List users = userService.getUsersByDeptIds(deptIds); + return UserConvert.INSTANCE.convertList4(users); + } + + @Override + public List getUsersByPostIds(Collection postIds) { + List users = userService.getUsersByPostIds(postIds); + return UserConvert.INSTANCE.convertList4(users); + } + + @Override + public Map getUserMap(Collection ids) { + Map userMap = userService.getUserMap(ids); + return UserConvert.INSTANCE.convertMap4(userMap); + } + + @Override + public void validUsers(Set ids) { + userService.validUsers(ids); + } + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/DeptConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/DeptConvert.java index 8d921131c7..2a514743b8 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/DeptConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/dept/DeptConvert.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.system.convert.dept; +import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptCreateReqVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptRespVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptSimpleRespVO; @@ -9,6 +10,7 @@ import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; import java.util.List; +import java.util.Map; @Mapper public interface DeptConvert { @@ -25,4 +27,10 @@ public interface DeptConvert { DeptDO convert(DeptUpdateReqVO bean); + List convertList03(List list); + + DeptRespDTO convert03(DeptDO bean); + + Map convertMap(Map map); + } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/user/UserConvert.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/user/UserConvert.java index cf2b1692b7..2e8a473366 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/user/UserConvert.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/user/UserConvert.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.system.convert.user; +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileRespVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; @@ -13,6 +14,7 @@ import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; import java.util.List; +import java.util.Map; @Mapper public interface UserConvert { @@ -46,4 +48,11 @@ public interface UserConvert { List convertList03(List list); List convertList04(List list); + + AdminUserRespDTO convert4(AdminUserDO bean); + + List convertList4(List users); + + Map convertMap4(Map map); + } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptService.java index 3716c906f2..a6c30bc10d 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptService.java @@ -46,7 +46,6 @@ public interface DeptService { */ void deleteDept(Long id); - /** * 筛选部门列表 * diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeService.java index f427b6a2f5..f71b8a6bdf 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeService.java @@ -1,9 +1,9 @@ package cn.iocoder.yudao.module.system.service.sms; import cn.iocoder.yudao.framework.common.exception.ServiceException; -import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeCheckReqDTO; -import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeSendReqDTO; -import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeUseReqDTO; +import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeCheckReqDTO; +import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeSendReqDTO; +import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO; import javax.validation.Valid; diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeServiceImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeServiceImpl.java index b30f31dd07..c1d366584d 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeServiceImpl.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeServiceImpl.java @@ -4,9 +4,9 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.map.MapUtil; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; import cn.iocoder.yudao.module.member.api.user.MemberUserApi; -import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeCheckReqDTO; -import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeSendReqDTO; -import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeUseReqDTO; +import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeCheckReqDTO; +import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeSendReqDTO; +import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO; import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsCodeDO; import cn.iocoder.yudao.module.system.dal.mysql.sms.SmsCodeMapper; import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; @@ -36,11 +36,6 @@ public class SmsCodeServiceImpl implements SmsCodeService { @Resource private SmsCodeMapper smsCodeMapper; - @Resource - private AdminUserService adminUserService; - @Resource - private MemberUserApi memberUserApi; - @Resource private SmsSendService smsSendService; From bdcf00d8a0dbcb4e30473166fa5f4db938e59fb5 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Tue, 1 Feb 2022 21:58:36 +0800 Subject: [PATCH 28/47] =?UTF-8?q?=E5=A4=9A=E6=A8=A1=E5=9D=97=E9=87=8D?= =?UTF-8?q?=E6=9E=84=208=EF=BC=9Abom=20=E6=A8=A1=E5=9D=97=EF=BC=8C?= =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E5=AE=8C=E6=88=90=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yudao-module-bpm/TODO.md | 7 --- yudao-module-bpm/yudao-module-bpm-api/pom.xml | 7 +++ .../bpm/api/task/BpmProcessInstanceApi.java | 23 ++++++++ .../dto/BpmProcessInstanceCreateReqDTO.java | 2 +- .../definition/BpmFormController.java} | 6 +- .../definition/BpmUserGroupController.java | 10 ++-- .../definition/vo/form/BpmFormBaseVO.java | 2 +- .../vo/form/BpmFormCreateReqVO.java | 2 +- .../definition/vo/form/BpmFormPageReqVO.java | 2 +- .../definition/vo/form/BpmFormRespVO.java | 2 +- .../vo/form/BpmFormSimpleRespVO.java | 2 +- .../vo/form/BpmFormUpdateReqVO.java | 2 +- .../vo/group/BpmUserGroupBaseVO.java | 2 +- .../vo/group/BpmUserGroupCreateReqVO.java | 2 +- .../vo/group/BpmUserGroupPageReqVO.java | 2 +- .../vo/group/BpmUserGroupRespVO.java | 2 +- .../vo/group/BpmUserGroupSimpleRespVO.java | 2 +- .../vo/group/BpmUserGroupUpdateReqVO.java | 2 +- .../vo/model/BpmModeImportReqVO.java | 2 +- .../definition/vo/model/BpmModelBaseVO.java | 2 +- .../vo/model/BpmModelCreateReqVO.java | 2 +- .../vo/model/BpmModelPageItemRespVO.java | 2 +- .../definition/vo/model/BpmModelRespVO.java | 2 +- .../vo/model/BpmModelUpdateReqVO.java | 2 +- .../vo/model/BpmModelUpdateStateReqVO.java | 2 +- .../definition/vo/model/ModelPageReqVO.java | 2 +- .../BpmProcessDefinitionListReqVO.java | 2 +- .../BpmProcessDefinitionPageItemRespVO.java | 2 +- .../BpmProcessDefinitionPageReqVO.java | 2 +- .../process/BpmProcessDefinitionRespVO.java | 2 +- .../vo/rule/BpmTaskAssignRuleBaseVO.java | 2 +- .../vo/rule/BpmTaskAssignRuleCreateReqVO.java | 2 +- .../vo/rule/BpmTaskAssignRuleRespVO.java | 2 +- .../vo/rule/BpmTaskAssignRuleUpdateReqVO.java | 2 +- .../admin}/oa/BpmOALeaveController.http | 0 .../admin}/oa/BpmOALeaveController.java | 12 ++-- .../bpm/controller/admin/oa/package-info.java | 5 ++ .../{ => admin}/oa/vo/BpmOALeaveBaseVO.java | 2 +- .../oa/vo/BpmOALeaveCreateReqVO.java | 2 +- .../oa/vo/BpmOALeavePageReqVO.java | 2 +- .../{ => admin}/oa/vo/BpmOALeaveRespVO.java | 2 +- .../controller/admin/task/package-info.java | 1 + .../task/vo/activity/BpmActivityRespVO.java | 2 +- .../BpmProcessInstanceCancelReqVO.java | 2 +- .../BpmProcessInstanceCreateReqVO.java | 2 +- .../BpmProcessInstanceMyPageReqVO.java | 2 +- .../BpmProcessInstancePageItemRespVO.java | 2 +- .../vo/instance/BpmProcessInstanceRespVO.java | 2 +- .../task/vo/task/BpmTaskApproveReqVO.java | 2 +- .../vo/task/BpmTaskDonePageItemRespVO.java | 2 +- .../task/vo/task/BpmTaskDonePageReqVO.java | 2 +- .../task/vo/task/BpmTaskRejectReqVO.java | 2 +- .../task/vo/task/BpmTaskRespVO.java | 2 +- .../vo/task/BpmTaskTodoPageItemRespVO.java | 2 +- .../task/vo/task/BpmTaskTodoPageReqVO.java | 2 +- .../vo/task/BpmTaskUpdateAssigneeReqVO.java | 2 +- .../bpm/controller/app/package-info.java | 4 ++ .../bpm/controller/oa/package-info.java | 1 - .../module/bpm/controller/package-info.java | 6 ++ .../bpm/controller/task/package-info.java | 1 - .../convert/definition/BpmFormConvert.java | 8 +-- .../definition/BpmUserGroupConvert.java | 6 +- .../bpm/convert/oa/BpmOALeaveConvert.java | 6 +- .../module/bpm/convert/oa/package-info.java | 1 - .../dal/mysql/definition/BpmFormMapper.java | 2 +- .../mysql/definition/BpmUserGroupMapper.java | 2 +- .../bpm/dal/mysql/oa/BpmOALeaveMapper.java | 2 +- .../task/BpmProcessInstanceExtMapper.java | 2 +- .../bpm/config/BpmCommonConfiguration.java | 19 +++++++ .../event/BpmProcessInstanceResultEvent.java | 2 +- ...BpmProcessInstanceResultEventListener.java | 2 +- ...pmProcessInstanceResultEventPublisher.java | 2 +- .../bpm}/core/event/package-info.java | 2 +- .../bpm/framework/bpm/core/package-info.java | 4 ++ .../bpm/framework/bpm/package-info.java | 6 ++ .../module}/bpm/framework/package-info.java | 2 +- .../yudao/module/bpm/package-info.java | 9 +++ .../service/definition/BpmFormService.java | 6 +- .../definition/BpmFormServiceImpl.java | 6 +- .../definition/BpmUserGroupService.java | 6 +- .../definition/BpmUserGroupServiceImpl.java | 6 +- .../bpm/service/oa/BpmOALeaveService.java | 8 +-- .../bpm/service/oa/BpmOALeaveServiceImpl.java | 24 ++++---- .../oa/listener/BpmOALeaveResultListener.java | 10 ++-- .../definition/BpmFormServiceTest.java | 9 ++- .../definition/BpmUserGroupServiceTest.java | 9 ++- .../convert/message/BpmMessageConvert.java | 57 ------------------- .../yudao/module/bpm/api/package-info.java | 4 ++ .../api/task/BpmProcessInstanceApiImpl.java | 27 +++++++++ .../admin}/definition/BpmModelController.java | 8 +-- .../BpmProcessDefinitionController.http | 0 .../BpmProcessDefinitionController.java | 12 ++-- .../BpmTaskAssignRuleController.http | 0 .../BpmTaskAssignRuleController.java | 10 ++-- .../admin}/task/BpmActivityController.java | 6 +- .../task/BpmProcessInstanceController.http | 0 .../task/BpmProcessInstanceController.java | 6 +- .../admin}/task/BpmTaskController.http | 0 .../admin}/task/BpmTaskController.java | 6 +- .../bpm/controller/app/package-info.java | 4 ++ .../module/bpm/controller/package-info.java | 6 ++ .../convert/definition/BpmModelConvert.java | 8 +-- .../BpmProcessDefinitionConvert.java | 8 +-- .../definition/BpmTaskAssignRuleConvert.java | 8 +-- .../bpm/convert/package-info.java | 2 +- .../bpm/convert/task/BpmActivityConvert.java | 4 +- .../task/BpmProcessInstanceConvert.java | 26 +++++++-- .../bpm/convert/task/BpmTaskConvert.java | 29 ++++++++-- ...‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md | 0 .../config/BpmActivitiConfiguration.java | 19 ++----- .../behavior/BpmActivityBehaviorFactory.java | 6 +- .../behavior/BpmUserTaskActivitiBehavior.java | 6 +- .../activiti/core/behavior/package-info.java | 2 +- .../behavior/script/BpmTaskAssignScript.java | 2 +- .../BpmTaskAssignLeaderAbstractScript.java | 4 +- .../impl/BpmTaskAssignLeaderX1Script.java | 2 +- .../impl/BpmTaskAssignLeaderX2Script.java | 2 +- .../impl/BpmTaskAssignStartUserScript.java | 4 +- .../core/identity/EmptyUserGroupManager.java | 2 +- .../BpmProcessInstanceEventListener.java | 4 +- .../BpmTackActivitiEventListener.java | 5 +- .../core/listener/BpmTaskEventListener.java | 4 +- .../activiti/core/listener/package-info.java | 2 +- .../module/bpm/framework/package-info.java | 6 ++ .../modules => module}/bpm/package-info.java | 7 ++- .../service/definition/BpmModelService.java | 4 +- .../definition/BpmModelServiceImpl.java | 13 ++--- .../BpmProcessDefinitionService.java | 12 ++-- .../BpmProcessDefinitionServiceImpl.java | 15 +++-- .../definition/BpmTaskAssignRuleService.java | 8 +-- .../BpmTaskAssignRuleServiceImpl.java | 11 ++-- .../dto/BpmModelMetaInfoRespDTO.java | 2 +- .../dto/BpmProcessDefinitionCreateReqDTO.java | 2 +- .../bpm/service/task/BpmActivityService.java | 4 +- .../service/task/BpmActivityServiceImpl.java | 8 +-- .../task/BpmProcessInstanceService.java | 6 +- .../task/BpmProcessInstanceServiceImpl.java | 17 +++--- .../bpm/service/task/BpmTaskService.java | 4 +- .../bpm/service/task/BpmTaskServiceImpl.java | 9 ++- .../bpm/service/task/package-info.java | 2 +- .../modules/bpm/service/package-info.java | 1 - .../BpmUserTaskActivitiBehaviorTest.java | 6 +- .../impl/BpmTaskAssignLeaderX2ScriptTest.java | 7 ++- .../module/bpm/service/package-info.java | 1 + .../bpm/test}/BaseDbUnitTest.java | 2 +- .../test/resources/application-unit-test.yaml | 12 ++++ .../src/test/resources/application.yaml | 35 ------------ .../{logback-spring.xml => logback.xml} | 0 .../yudao-module-system-api/pom.xml | 1 + .../module/system/api/dept/PostApiImpl.java | 24 ++++++++ .../system/api/dict/DictDataApiImpl.java | 25 ++++++++ .../system/api/permission/RoleApiImpl.java | 24 ++++++++ 152 files changed, 523 insertions(+), 378 deletions(-) delete mode 100644 yudao-module-bpm/TODO.md create mode 100644 yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/BpmProcessInstanceApi.java rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service => yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api}/task/dto/BpmProcessInstanceCreateReqDTO.java (90%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{definition/FormController.java => admin/definition/BpmFormController.java} (94%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/BpmUserGroupController.java (88%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/vo/form/BpmFormBaseVO.java (91%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/vo/form/BpmFormCreateReqVO.java (90%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/vo/form/BpmFormPageReqVO.java (86%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/vo/form/BpmFormRespVO.java (93%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/vo/form/BpmFormSimpleRespVO.java (84%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/vo/form/BpmFormUpdateReqVO.java (91%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/vo/group/BpmUserGroupBaseVO.java (92%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/vo/group/BpmUserGroupCreateReqVO.java (75%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/vo/group/BpmUserGroupPageReqVO.java (93%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/vo/group/BpmUserGroupRespVO.java (85%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/vo/group/BpmUserGroupSimpleRespVO.java (87%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/vo/group/BpmUserGroupUpdateReqVO.java (84%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/vo/model/BpmModeImportReqVO.java (90%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/vo/model/BpmModelBaseVO.java (96%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/vo/model/BpmModelCreateReqVO.java (90%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/vo/model/BpmModelPageItemRespVO.java (94%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/vo/model/BpmModelRespVO.java (89%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/vo/model/BpmModelUpdateReqVO.java (95%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/vo/model/BpmModelUpdateStateReqVO.java (88%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/vo/model/ModelPageReqVO.java (91%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/vo/process/BpmProcessDefinitionListReqVO.java (87%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/vo/process/BpmProcessDefinitionPageItemRespVO.java (88%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/vo/process/BpmProcessDefinitionPageReqVO.java (87%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/vo/process/BpmProcessDefinitionRespVO.java (96%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/vo/rule/BpmTaskAssignRuleBaseVO.java (91%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/vo/rule/BpmTaskAssignRuleCreateReqVO.java (91%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/vo/rule/BpmTaskAssignRuleRespVO.java (93%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/definition/vo/rule/BpmTaskAssignRuleUpdateReqVO.java (89%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin}/oa/BpmOALeaveController.http (100%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin}/oa/BpmOALeaveController.java (83%) create mode 100644 yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/package-info.java rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/oa/vo/BpmOALeaveBaseVO.java (95%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/oa/vo/BpmOALeaveCreateReqVO.java (89%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/oa/vo/BpmOALeavePageReqVO.java (95%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/oa/vo/BpmOALeaveRespVO.java (94%) create mode 100644 yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/package-info.java rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/task/vo/activity/BpmActivityRespVO.java (92%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/task/vo/instance/BpmProcessInstanceCancelReqVO.java (90%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/task/vo/instance/BpmProcessInstanceCreateReqVO.java (88%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/task/vo/instance/BpmProcessInstanceMyPageReqVO.java (95%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/task/vo/instance/BpmProcessInstancePageItemRespVO.java (95%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/task/vo/instance/BpmProcessInstanceRespVO.java (98%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/task/vo/task/BpmTaskApproveReqVO.java (91%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/task/vo/task/BpmTaskDonePageItemRespVO.java (92%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/task/vo/task/BpmTaskDonePageReqVO.java (93%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/task/vo/task/BpmTaskRejectReqVO.java (89%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/task/vo/task/BpmTaskRespVO.java (94%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/task/vo/task/BpmTaskTodoPageItemRespVO.java (96%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/task/vo/task/BpmTaskTodoPageReqVO.java (93%) rename yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/{ => admin}/task/vo/task/BpmTaskUpdateAssigneeReqVO.java (92%) create mode 100644 yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/app/package-info.java delete mode 100644 yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/package-info.java create mode 100644 yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/package-info.java delete mode 100644 yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/package-info.java rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/convert/oa/BpmOALeaveConvert.java (75%) delete mode 100644 yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/package-info.java create mode 100644 yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm/config/BpmCommonConfiguration.java rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm}/core/event/BpmProcessInstanceResultEvent.java (93%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm}/core/event/BpmProcessInstanceResultEventListener.java (91%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm}/core/event/BpmProcessInstanceResultEventPublisher.java (87%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm}/core/event/package-info.java (56%) create mode 100644 yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm/core/package-info.java create mode 100644 yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm/package-info.java rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/framework/package-info.java (55%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/service/oa/BpmOALeaveService.java (83%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/service/oa/BpmOALeaveServiceImpl.java (80%) rename yudao-module-bpm/{yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules => yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module}/bpm/service/oa/listener/BpmOALeaveResultListener.java (58%) rename yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/service/definition/BpmFormServiceTest.java (92%) rename yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/service/definition/BpmUserGroupServiceTest.java (92%) delete mode 100644 yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/message/BpmMessageConvert.java create mode 100644 yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/api/package-info.java create mode 100644 yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/api/task/BpmProcessInstanceApiImpl.java rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules/bpm/controller => module/bpm/controller/admin}/definition/BpmModelController.java (92%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules/bpm/controller => module/bpm/controller/admin}/definition/BpmProcessDefinitionController.http (100%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules/bpm/controller => module/bpm/controller/admin}/definition/BpmProcessDefinitionController.java (79%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules/bpm/controller => module/bpm/controller/admin}/definition/BpmTaskAssignRuleController.http (100%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules/bpm/controller => module/bpm/controller/admin}/definition/BpmTaskAssignRuleController.java (83%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules/bpm/controller => module/bpm/controller/admin}/task/BpmActivityController.java (91%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules/bpm/controller => module/bpm/controller/admin}/task/BpmProcessInstanceController.http (100%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules/bpm/controller => module/bpm/controller/admin}/task/BpmProcessInstanceController.java (92%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules/bpm/controller => module/bpm/controller/admin}/task/BpmTaskController.http (100%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules/bpm/controller => module/bpm/controller/admin}/task/BpmTaskController.java (93%) create mode 100644 yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/app/package-info.java create mode 100644 yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/package-info.java rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/convert/definition/BpmModelConvert.java (94%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/convert/definition/BpmProcessDefinitionConvert.java (90%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/convert/definition/BpmTaskAssignRuleConvert.java (80%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/convert/package-info.java (57%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/convert/task/BpmActivityConvert.java (82%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/convert/task/BpmProcessInstanceConvert.java (78%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/convert/task/BpmTaskConvert.java (79%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md (100%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/framework/activiti/config/BpmActivitiConfiguration.java (76%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java (87%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java (97%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/framework/activiti/core/behavior/package-info.java (83%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/framework/activiti/core/behavior/script/BpmTaskAssignScript.java (89%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderAbstractScript.java (91%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX1Script.java (87%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2Script.java (87%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignStartUserScript.java (79%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/framework/activiti/core/identity/EmptyUserGroupManager.java (91%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java (93%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/framework/activiti/core/listener/BpmTackActivitiEventListener.java (87%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/framework/activiti/core/listener/BpmTaskEventListener.java (93%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/framework/activiti/core/listener/package-info.java (78%) create mode 100644 yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/package-info.java rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/package-info.java (52%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/service/definition/BpmModelService.java (92%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/service/definition/BpmModelServiceImpl.java (95%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/service/definition/BpmProcessDefinitionService.java (88%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/service/definition/BpmProcessDefinitionServiceImpl.java (94%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/service/definition/BpmTaskAssignRuleService.java (87%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/service/definition/BpmTaskAssignRuleServiceImpl.java (94%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/service/definition/dto/BpmModelMetaInfoRespDTO.java (92%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/service/definition/dto/BpmProcessDefinitionCreateReqDTO.java (97%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/service/task/BpmActivityService.java (90%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/service/task/BpmActivityServiceImpl.java (90%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/service/task/BpmProcessInstanceService.java (95%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/service/task/BpmProcessInstanceServiceImpl.java (95%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/service/task/BpmTaskService.java (97%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/service/task/BpmTaskServiceImpl.java (97%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/service/task/package-info.java (89%) delete mode 100644 yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/package-info.java rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java (96%) rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/{adminserver/modules => module}/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2ScriptTest.java (96%) create mode 100644 yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/module/bpm/service/package-info.java rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/{adminserver => module/bpm/test}/BaseDbUnitTest.java (97%) delete mode 100644 yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/resources/application.yaml rename yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/resources/{logback-spring.xml => logback.xml} (100%) create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/dept/PostApiImpl.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/dict/DictDataApiImpl.java create mode 100644 yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/permission/RoleApiImpl.java diff --git a/yudao-module-bpm/TODO.md b/yudao-module-bpm/TODO.md deleted file mode 100644 index d155eaa5f9..0000000000 --- a/yudao-module-bpm/TODO.md +++ /dev/null @@ -1,7 +0,0 @@ -1. ç±»åå¯ä»¥åŽ»æŽ‰ Bpm å‰ç¼€å“ˆ - -2. åŽç»­æŽ¥å£æˆ‘ä»¬åˆ†æˆ admin 管ç†åŽå¤©ï¼Œapp 用户å‰ç«¯ï¼›æ‰€ä»¥ controller åŒ…ä¸‹ï¼Œéœ€è¦æœ‰ admin å’Œ app 两个å­åŒ…。å¯è§ https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/feature/multi-module/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller - -3. yudao-module-bpm-core-service-impl 模å—,è¦ä¸æ”¹æˆ yudao-module-bpm-base,本质上是æä¾›ç»™ yudao-module-bpm-flowable-impl å’Œ yudao-module-bpm-activiti-impl 继承的。这样的è¯ï¼Œæˆ‘们在 yudao-module-bpm-base: - * 定义一些å¯è¢«ç»§æ‰¿çš„类,例如说 ModelAbstractServiceï¼› - * 定义一些无需被继承的类,例如说 UserGroupServiceã€UserGroupController 等等; diff --git a/yudao-module-bpm/yudao-module-bpm-api/pom.xml b/yudao-module-bpm/yudao-module-bpm-api/pom.xml index 60ebd556c3..91cd35be85 100644 --- a/yudao-module-bpm/yudao-module-bpm-api/pom.xml +++ b/yudao-module-bpm/yudao-module-bpm-api/pom.xml @@ -21,6 +21,13 @@ cn.iocoder.boot yudao-common + + + + org.springframework.boot + spring-boot-starter-validation + true + diff --git a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/BpmProcessInstanceApi.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/BpmProcessInstanceApi.java new file mode 100644 index 0000000000..e94a2c84fe --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/BpmProcessInstanceApi.java @@ -0,0 +1,23 @@ +package cn.iocoder.yudao.module.bpm.api.task; + +import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; + +import javax.validation.Valid; + +/** + * æµç¨‹å®žä¾‹ Api æŽ¥å£ + * + * @author èŠ‹é“æºç  + */ +public interface BpmProcessInstanceApi { + + /** + * 创建æµç¨‹å®žä¾‹ï¼ˆæä¾›ç»™å†…部) + * + * @param userId ç”¨æˆ·ç¼–å· + * @param reqDTO åˆ›å»ºä¿¡æ¯ + * @return å®žä¾‹çš„ç¼–å· + */ + String createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqDTO reqDTO); + +} diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/dto/BpmProcessInstanceCreateReqDTO.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/dto/BpmProcessInstanceCreateReqDTO.java similarity index 90% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/dto/BpmProcessInstanceCreateReqDTO.java rename to yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/dto/BpmProcessInstanceCreateReqDTO.java index 9729721078..5d7edbe804 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/dto/BpmProcessInstanceCreateReqDTO.java +++ b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/dto/BpmProcessInstanceCreateReqDTO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.task.dto; +package cn.iocoder.yudao.module.bpm.api.task.dto; import lombok.Data; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/FormController.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmFormController.java similarity index 94% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/FormController.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmFormController.java index 34b712ff25..f6b4e2a696 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/FormController.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmFormController.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.module.bpm.controller.definition; +package cn.iocoder.yudao.module.bpm.controller.admin.definition; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form.*; import cn.iocoder.yudao.module.bpm.convert.definition.BpmFormConvert; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; import cn.iocoder.yudao.module.bpm.service.definition.BpmFormService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; @@ -23,7 +23,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @RestController @RequestMapping("/bpm/form") @Validated -public class FormController { +public class BpmFormController { @Resource private BpmFormService formService; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/BpmUserGroupController.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmUserGroupController.java similarity index 88% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/BpmUserGroupController.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmUserGroupController.java index 1051a78f54..09cccc4d6a 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/BpmUserGroupController.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmUserGroupController.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.module.bpm.controller.definition; +package cn.iocoder.yudao.module.bpm.controller.admin.definition; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupCreateReqVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupPageReqVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupRespVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupUpdateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group.BpmUserGroupCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group.BpmUserGroupPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group.BpmUserGroupRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group.BpmUserGroupUpdateReqVO; import cn.iocoder.yudao.module.bpm.convert.definition.BpmUserGroupConvert; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmUserGroupDO; import cn.iocoder.yudao.module.bpm.service.definition.BpmUserGroupService; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormBaseVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/form/BpmFormBaseVO.java similarity index 91% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormBaseVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/form/BpmFormBaseVO.java index 1eb2ccd822..11fee5c00f 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormBaseVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/form/BpmFormBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.definition.vo.form; +package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form; import lombok.*; import io.swagger.annotations.*; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/form/BpmFormCreateReqVO.java similarity index 90% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormCreateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/form/BpmFormCreateReqVO.java index 7068015830..b43ca78741 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormCreateReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/form/BpmFormCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.definition.vo.form; +package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form; import lombok.*; import io.swagger.annotations.*; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/form/BpmFormPageReqVO.java similarity index 86% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormPageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/form/BpmFormPageReqVO.java index 5576f80d6e..3b2d8645cb 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormPageReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/form/BpmFormPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.definition.vo.form; +package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/form/BpmFormRespVO.java similarity index 93% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/form/BpmFormRespVO.java index 6aef371f5e..c34a77d52c 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/form/BpmFormRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.definition.vo.form; +package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormSimpleRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/form/BpmFormSimpleRespVO.java similarity index 84% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormSimpleRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/form/BpmFormSimpleRespVO.java index 8c622d68f2..f07314ffe5 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormSimpleRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/form/BpmFormSimpleRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.definition.vo.form; +package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormUpdateReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/form/BpmFormUpdateReqVO.java similarity index 91% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormUpdateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/form/BpmFormUpdateReqVO.java index c81df497e2..b9886cc65c 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/form/BpmFormUpdateReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/form/BpmFormUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.definition.vo.form; +package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form; import lombok.*; import io.swagger.annotations.*; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupBaseVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/group/BpmUserGroupBaseVO.java similarity index 92% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupBaseVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/group/BpmUserGroupBaseVO.java index f18b8520d1..e0dfe568e4 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupBaseVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/group/BpmUserGroupBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.definition.vo.group; +package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group; import lombok.*; import java.util.*; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/group/BpmUserGroupCreateReqVO.java similarity index 75% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupCreateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/group/BpmUserGroupCreateReqVO.java index deb647da6a..657a104787 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupCreateReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/group/BpmUserGroupCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.definition.vo.group; +package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group; import lombok.*; import io.swagger.annotations.*; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/group/BpmUserGroupPageReqVO.java similarity index 93% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupPageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/group/BpmUserGroupPageReqVO.java index e8f0766699..3ec250413b 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupPageReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/group/BpmUserGroupPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.definition.vo.group; +package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group; import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.util.date.DateUtils; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/group/BpmUserGroupRespVO.java similarity index 85% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/group/BpmUserGroupRespVO.java index 72f83b97cc..dc18aee583 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/group/BpmUserGroupRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.definition.vo.group; +package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group; import lombok.*; import java.util.*; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupSimpleRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/group/BpmUserGroupSimpleRespVO.java similarity index 87% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupSimpleRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/group/BpmUserGroupSimpleRespVO.java index 09d760addf..422213ded8 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupSimpleRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/group/BpmUserGroupSimpleRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.definition.vo.group; +package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupUpdateReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/group/BpmUserGroupUpdateReqVO.java similarity index 84% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupUpdateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/group/BpmUserGroupUpdateReqVO.java index f9760d550c..72a1496a38 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/group/BpmUserGroupUpdateReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/group/BpmUserGroupUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.definition.vo.group; +package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group; import lombok.*; import io.swagger.annotations.*; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModeImportReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModeImportReqVO.java similarity index 90% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModeImportReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModeImportReqVO.java index bd04d71272..8218271faf 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModeImportReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModeImportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.definition.vo.model; +package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelBaseVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelBaseVO.java similarity index 96% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelBaseVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelBaseVO.java index 04bf6c7101..542a177e48 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelBaseVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.definition.vo.model; +package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelCreateReqVO.java similarity index 90% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelCreateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelCreateReqVO.java index 62923dca7c..7583d8a035 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelCreateReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.definition.vo.model; +package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelPageItemRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelPageItemRespVO.java similarity index 94% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelPageItemRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelPageItemRespVO.java index 4ad529eadb..d0f1e5634f 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelPageItemRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelPageItemRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.definition.vo.model; +package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelRespVO.java similarity index 89% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelRespVO.java index 438ae3af11..e039829a32 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.definition.vo.model; +package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelUpdateReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelUpdateReqVO.java similarity index 95% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelUpdateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelUpdateReqVO.java index 2159d66c0f..60eb975087 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelUpdateReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.definition.vo.model; +package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelUpdateStateReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelUpdateStateReqVO.java similarity index 88% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelUpdateStateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelUpdateStateReqVO.java index 7604c98ab7..34d97a8c70 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/BpmModelUpdateStateReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelUpdateStateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.definition.vo.model; +package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/ModelPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/ModelPageReqVO.java similarity index 91% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/ModelPageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/ModelPageReqVO.java index 5511b3726d..6b36e39b4d 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/model/ModelPageReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/ModelPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.definition.vo.model; +package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/process/BpmProcessDefinitionListReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/process/BpmProcessDefinitionListReqVO.java similarity index 87% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/process/BpmProcessDefinitionListReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/process/BpmProcessDefinitionListReqVO.java index f19d75c474..a14bb15f49 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/process/BpmProcessDefinitionListReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/process/BpmProcessDefinitionListReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.definition.vo.process; +package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/process/BpmProcessDefinitionPageItemRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/process/BpmProcessDefinitionPageItemRespVO.java similarity index 88% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/process/BpmProcessDefinitionPageItemRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/process/BpmProcessDefinitionPageItemRespVO.java index 414377af54..1f3c1faa4f 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/process/BpmProcessDefinitionPageItemRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/process/BpmProcessDefinitionPageItemRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.definition.vo.process; +package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/process/BpmProcessDefinitionPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/process/BpmProcessDefinitionPageReqVO.java similarity index 87% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/process/BpmProcessDefinitionPageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/process/BpmProcessDefinitionPageReqVO.java index 93bf0b738e..c9ad096bf5 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/process/BpmProcessDefinitionPageReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/process/BpmProcessDefinitionPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.definition.vo.process; +package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/process/BpmProcessDefinitionRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/process/BpmProcessDefinitionRespVO.java similarity index 96% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/process/BpmProcessDefinitionRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/process/BpmProcessDefinitionRespVO.java index 450c67d751..228a5afa18 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/process/BpmProcessDefinitionRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/process/BpmProcessDefinitionRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.definition.vo.process; +package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/rule/BpmTaskAssignRuleBaseVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/rule/BpmTaskAssignRuleBaseVO.java similarity index 91% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/rule/BpmTaskAssignRuleBaseVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/rule/BpmTaskAssignRuleBaseVO.java index 9db2c9bca7..bcb9fc0f03 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/rule/BpmTaskAssignRuleBaseVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/rule/BpmTaskAssignRuleBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.definition.vo.rule; +package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.rule; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/rule/BpmTaskAssignRuleCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/rule/BpmTaskAssignRuleCreateReqVO.java similarity index 91% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/rule/BpmTaskAssignRuleCreateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/rule/BpmTaskAssignRuleCreateReqVO.java index 6d4937f9c8..2296a5cc27 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/rule/BpmTaskAssignRuleCreateReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/rule/BpmTaskAssignRuleCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.definition.vo.rule; +package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.rule; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/rule/BpmTaskAssignRuleRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/rule/BpmTaskAssignRuleRespVO.java similarity index 93% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/rule/BpmTaskAssignRuleRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/rule/BpmTaskAssignRuleRespVO.java index d718cb6f50..d1f6a06966 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/rule/BpmTaskAssignRuleRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/rule/BpmTaskAssignRuleRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.definition.vo.rule; +package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.rule; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/rule/BpmTaskAssignRuleUpdateReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/rule/BpmTaskAssignRuleUpdateReqVO.java similarity index 89% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/rule/BpmTaskAssignRuleUpdateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/rule/BpmTaskAssignRuleUpdateReqVO.java index cedceb2a36..8555610ee8 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/definition/vo/rule/BpmTaskAssignRuleUpdateReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/rule/BpmTaskAssignRuleUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.definition.vo.rule; +package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.rule; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.http b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOALeaveController.http similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.http rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOALeaveController.http diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOALeaveController.java similarity index 83% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOALeaveController.java index 47ac08735f..17549e1cfd 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/BpmOALeaveController.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOALeaveController.java @@ -1,13 +1,13 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.oa; +package cn.iocoder.yudao.module.bpm.controller.admin.oa; -import cn.iocoder.yudao.module.bpm.controller.oa.vo.BpmOALeaveCreateReqVO; -import cn.iocoder.yudao.module.bpm.controller.oa.vo.BpmOALeavePageReqVO; -import cn.iocoder.yudao.module.bpm.controller.oa.vo.BpmOALeaveRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.convert.oa.BpmOALeaveConvert; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOALeaveCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOALeavePageReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOALeaveRespVO; +import cn.iocoder.yudao.module.bpm.convert.oa.BpmOALeaveConvert; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO; -import cn.iocoder.yudao.adminserver.modules.bpm.service.oa.BpmOALeaveService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.bpm.service.oa.BpmOALeaveService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/package-info.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/package-info.java new file mode 100644 index 0000000000..7028708b1e --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/package-info.java @@ -0,0 +1,5 @@ +/** + * OA 示例,用于演示外部业务接入 BPM 工作æµçš„示例 + * 一般的接入方å¼ï¼Œåªéœ€è¦è°ƒç”¨ 接å£ï¼ŒåŽç»­ Admin 用户在管ç†åŽå°çš„ã€å¾…办事务】进行审批 + */ +package cn.iocoder.yudao.module.bpm.controller.admin.oa; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/vo/BpmOALeaveBaseVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/BpmOALeaveBaseVO.java similarity index 95% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/vo/BpmOALeaveBaseVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/BpmOALeaveBaseVO.java index 6790cf28f1..cbc568a11c 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/vo/BpmOALeaveBaseVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/BpmOALeaveBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.oa.vo; +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo; import lombok.*; import java.util.*; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/vo/BpmOALeaveCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/BpmOALeaveCreateReqVO.java similarity index 89% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/vo/BpmOALeaveCreateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/BpmOALeaveCreateReqVO.java index 2e4ec99d07..17326a914a 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/vo/BpmOALeaveCreateReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/BpmOALeaveCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.oa.vo; +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo; import io.swagger.annotations.ApiModel; import lombok.Data; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/vo/BpmOALeavePageReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/BpmOALeavePageReqVO.java similarity index 95% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/vo/BpmOALeavePageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/BpmOALeavePageReqVO.java index 2c7cbb8f04..e19c058897 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/vo/BpmOALeavePageReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/BpmOALeavePageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.oa.vo; +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo; import lombok.*; import java.util.*; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/vo/BpmOALeaveRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/BpmOALeaveRespVO.java similarity index 94% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/vo/BpmOALeaveRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/BpmOALeaveRespVO.java index 6627c74739..b8ac072fc4 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/vo/BpmOALeaveRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/BpmOALeaveRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.oa.vo; +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo; import lombok.*; import io.swagger.annotations.*; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/package-info.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/package-info.java new file mode 100644 index 0000000000..6cf7f955b5 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.task; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/activity/BpmActivityRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/activity/BpmActivityRespVO.java similarity index 92% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/activity/BpmActivityRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/activity/BpmActivityRespVO.java index 3e6ca5423d..e7d8eb4914 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/activity/BpmActivityRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/activity/BpmActivityRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.task.vo.activity; +package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.activity; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstanceCancelReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceCancelReqVO.java similarity index 90% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstanceCancelReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceCancelReqVO.java index a9e7d0680c..2bedab8d30 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstanceCancelReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceCancelReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.task.vo.instance; +package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstanceCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceCreateReqVO.java similarity index 88% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstanceCreateReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceCreateReqVO.java index 301c7f176e..72600abd76 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstanceCreateReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.task.vo.instance; +package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstanceMyPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceMyPageReqVO.java similarity index 95% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstanceMyPageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceMyPageReqVO.java index 61ad3a8a2a..2f5e0ae513 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstanceMyPageReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceMyPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.task.vo.instance; +package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstancePageItemRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstancePageItemRespVO.java similarity index 95% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstancePageItemRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstancePageItemRespVO.java index 3ca93ecbd5..74b9bcad24 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstancePageItemRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstancePageItemRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.task.vo.instance; +package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstanceRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceRespVO.java similarity index 98% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstanceRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceRespVO.java index 75d05e2a71..cb04393f99 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/instance/BpmProcessInstanceRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.task.vo.instance; +package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskApproveReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskApproveReqVO.java similarity index 91% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskApproveReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskApproveReqVO.java index a4af326de1..a4e10aeefa 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskApproveReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskApproveReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.task.vo.task; +package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskDonePageItemRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskDonePageItemRespVO.java similarity index 92% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskDonePageItemRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskDonePageItemRespVO.java index 1ba195ab0c..c9ab5f92c0 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskDonePageItemRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskDonePageItemRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.task.vo.task; +package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskDonePageReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskDonePageReqVO.java similarity index 93% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskDonePageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskDonePageReqVO.java index 681e5c6e53..2a39a4af47 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskDonePageReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskDonePageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.task.vo.task; +package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskRejectReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskRejectReqVO.java similarity index 89% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskRejectReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskRejectReqVO.java index 19e40b317a..d431bb2406 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskRejectReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskRejectReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.task.vo.task; +package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskRespVO.java similarity index 94% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskRespVO.java index 97dbc826ef..ad01ed2f3d 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.task.vo.task; +package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskTodoPageItemRespVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskTodoPageItemRespVO.java similarity index 96% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskTodoPageItemRespVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskTodoPageItemRespVO.java index 5d1dc6296f..90a3b110a2 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskTodoPageItemRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskTodoPageItemRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.task.vo.task; +package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskTodoPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskTodoPageReqVO.java similarity index 93% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskTodoPageReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskTodoPageReqVO.java index 64153b7360..5d6a2b1962 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskTodoPageReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskTodoPageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.task.vo.task; +package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskUpdateAssigneeReqVO.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskUpdateAssigneeReqVO.java similarity index 92% rename from yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskUpdateAssigneeReqVO.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskUpdateAssigneeReqVO.java index 400a24577d..a7f96b1373 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/vo/task/BpmTaskUpdateAssigneeReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskUpdateAssigneeReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.task.vo.task; +package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/app/package-info.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/app/package-info.java new file mode 100644 index 0000000000..e8d285e359 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/app/package-info.java @@ -0,0 +1,4 @@ +/** + * å ä½ + */ +package cn.iocoder.yudao.module.bpm.controller.app; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/package-info.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/package-info.java deleted file mode 100644 index 2fe59f5721..0000000000 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/oa/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.module.bpm.controller.oa; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/package-info.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/package-info.java new file mode 100644 index 0000000000..d1930bd6ac --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/package-info.java @@ -0,0 +1,6 @@ +/** + * æä¾› RESTful API ç»™å‰ç«¯ï¼š + * 1. admin 包:æä¾›ç»™ç®¡ç†åŽå° yudao-ui-admin å‰ç«¯é¡¹ç›® + * 2. app 包:æä¾›ç»™ç”¨æˆ· APP yudao-ui-app å‰ç«¯é¡¹ç›®ï¼Œå®ƒçš„ Controller å’Œ VO éƒ½è¦æ·»åŠ  App å‰ç¼€ï¼Œç”¨äºŽå’Œç®¡ç†åŽå°è¿›è¡ŒåŒºåˆ† + */ +package cn.iocoder.yudao.module.bpm.controller; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/package-info.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/package-info.java deleted file mode 100644 index 8be8f21c57..0000000000 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/controller/task/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.module.bpm.controller.task; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmFormConvert.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmFormConvert.java index 3baca0916b..6ba7574170 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmFormConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmFormConvert.java @@ -1,9 +1,9 @@ package cn.iocoder.yudao.module.bpm.convert.definition; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormCreateReqVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormRespVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormSimpleRespVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormUpdateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form.BpmFormCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form.BpmFormRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form.BpmFormSimpleRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form.BpmFormUpdateReqVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.mapstruct.Mapper; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmUserGroupConvert.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmUserGroupConvert.java index 02a7845517..bbf00ba524 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmUserGroupConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmUserGroupConvert.java @@ -2,9 +2,9 @@ package cn.iocoder.yudao.module.bpm.convert.definition; import java.util.*; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupCreateReqVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupRespVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupUpdateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group.BpmUserGroupCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group.BpmUserGroupRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group.BpmUserGroupUpdateReqVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmUserGroupDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/oa/BpmOALeaveConvert.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/BpmOALeaveConvert.java similarity index 75% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/oa/BpmOALeaveConvert.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/BpmOALeaveConvert.java index c8af88fc16..f87531bfc5 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/oa/BpmOALeaveConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/BpmOALeaveConvert.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.convert.oa; +package cn.iocoder.yudao.module.bpm.convert.oa; -import cn.iocoder.yudao.module.bpm.controller.oa.vo.BpmOALeaveCreateReqVO; -import cn.iocoder.yudao.module.bpm.controller.oa.vo.BpmOALeaveRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOALeaveCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOALeaveRespVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.mapstruct.Mapper; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/package-info.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/package-info.java deleted file mode 100644 index be8623fb1a..0000000000 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.module.bpm.convert.oa; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/definition/BpmFormMapper.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/definition/BpmFormMapper.java index 34c554d414..53c01d92e5 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/definition/BpmFormMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/definition/BpmFormMapper.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.bpm.dal.mysql.definition; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form.BpmFormPageReqVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/definition/BpmUserGroupMapper.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/definition/BpmUserGroupMapper.java index 681e7b92e9..982e678bfe 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/definition/BpmUserGroupMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/definition/BpmUserGroupMapper.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.bpm.dal.mysql.definition; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group.BpmUserGroupPageReqVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmUserGroupDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOALeaveMapper.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOALeaveMapper.java index a5ae1dec7e..ba781e3501 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOALeaveMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOALeaveMapper.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.bpm.dal.mysql.oa; -import cn.iocoder.yudao.module.bpm.controller.oa.vo.BpmOALeavePageReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOALeavePageReqVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java index 075cbae9e2..ee31b08ca3 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.bpm.dal.mysql.task; -import cn.iocoder.yudao.module.bpm.controller.task.vo.instance.BpmProcessInstanceMyPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceMyPageReqVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm/config/BpmCommonConfiguration.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm/config/BpmCommonConfiguration.java new file mode 100644 index 0000000000..8915fc6b5a --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm/config/BpmCommonConfiguration.java @@ -0,0 +1,19 @@ +package cn.iocoder.yudao.module.bpm.framework.bpm.config; + +import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEventPublisher; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * BPM 通用的 Configuration é…置类,æä¾›ç»™ Activiti å’Œ Flowable + */ +@Configuration +public class BpmCommonConfiguration { + + @Bean + public BpmProcessInstanceResultEventPublisher processInstanceResultEventPublisher(ApplicationEventPublisher publisher) { + return new BpmProcessInstanceResultEventPublisher(publisher); + } + +} diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEvent.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm/core/event/BpmProcessInstanceResultEvent.java similarity index 93% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEvent.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm/core/event/BpmProcessInstanceResultEvent.java index 08c43413e0..9fccbab8e6 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEvent.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm/core/event/BpmProcessInstanceResultEvent.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event; +package cn.iocoder.yudao.module.bpm.framework.bpm.core.event; import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; import lombok.Data; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEventListener.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm/core/event/BpmProcessInstanceResultEventListener.java similarity index 91% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEventListener.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm/core/event/BpmProcessInstanceResultEventListener.java index 6134a14cbc..c2b2153942 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEventListener.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm/core/event/BpmProcessInstanceResultEventListener.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event; +package cn.iocoder.yudao.module.bpm.framework.bpm.core.event; import cn.hutool.core.util.StrUtil; import org.springframework.context.ApplicationListener; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEventPublisher.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm/core/event/BpmProcessInstanceResultEventPublisher.java similarity index 87% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEventPublisher.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm/core/event/BpmProcessInstanceResultEventPublisher.java index dba448a9c4..dc5c21b755 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEventPublisher.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm/core/event/BpmProcessInstanceResultEventPublisher.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event; +package cn.iocoder.yudao.module.bpm.framework.bpm.core.event; import lombok.AllArgsConstructor; import org.springframework.context.ApplicationEventPublisher; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/package-info.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm/core/event/package-info.java similarity index 56% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/package-info.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm/core/event/package-info.java index 5a05170f95..c4a1311289 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/package-info.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm/core/event/package-info.java @@ -3,4 +3,4 @@ * * @author èŠ‹é“æºç  */ -package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event; +package cn.iocoder.yudao.module.bpm.framework.bpm.core.event; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm/core/package-info.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm/core/package-info.java new file mode 100644 index 0000000000..b97cb4c8ae --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm/core/package-info.java @@ -0,0 +1,4 @@ +/** + * å ä½ + */ +package cn.iocoder.yudao.module.bpm.framework.bpm.core; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm/package-info.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm/package-info.java new file mode 100644 index 0000000000..9a5e3ea962 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/bpm/package-info.java @@ -0,0 +1,6 @@ +/** + * æä¾›ç»™ Activiti å’Œ Flowable 的通用å°è£… + * + * @author èŠ‹é“æºç  + */ +package cn.iocoder.yudao.module.bpm.framework.bpm; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/package-info.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/package-info.java similarity index 55% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/package-info.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/package-info.java index cec0edd207..52fdb7f935 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/package-info.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/framework/package-info.java @@ -3,4 +3,4 @@ * * @author èŠ‹é“æºç  */ -package cn.iocoder.yudao.adminserver.modules.bpm.framework; +package cn.iocoder.yudao.module.bpm.framework; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/package-info.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/package-info.java index 6dab1bf15d..6d399cf2a9 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/package-info.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/package-info.java @@ -1 +1,10 @@ +/** + * bpm 包下,业务æµç¨‹ç®¡ç†ï¼ˆBusiness Process Management),我们放工作æµçš„功能。 + * 例如说:æµç¨‹å®šä¹‰ã€è¡¨å•é…ç½®ã€å®¡æ ¸ä¸­å¿ƒï¼ˆæˆ‘çš„ç”³è¯·ã€æˆ‘çš„å¾…åŠžã€æˆ‘的已办)等等 + * + * bpm 解释:https://baike.baidu.com/item/BPM/1933 + * + * 1. Controller URL:以 /bpm/ 开头,é¿å…和其它 Module å†²çª + * 2. DataObject 表å:以 bpm_ 开头,方便在数æ®åº“中区分 + */ package cn.iocoder.yudao.module.bpm; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmFormService.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmFormService.java index 9fb2e80728..a90fc9760b 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmFormService.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmFormService.java @@ -1,9 +1,9 @@ package cn.iocoder.yudao.module.bpm.service.definition; import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormCreateReqVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormPageReqVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormUpdateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form.BpmFormCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form.BpmFormPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form.BpmFormUpdateReqVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmFormServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmFormServiceImpl.java index f2bb6ad7eb..42f1b145c3 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmFormServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmFormServiceImpl.java @@ -1,9 +1,9 @@ package cn.iocoder.yudao.module.bpm.service.definition; import cn.hutool.core.lang.Assert; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormCreateReqVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormPageReqVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormUpdateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form.BpmFormCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form.BpmFormPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form.BpmFormUpdateReqVO; import cn.iocoder.yudao.module.bpm.convert.definition.BpmFormConvert; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; import cn.iocoder.yudao.module.bpm.dal.mysql.definition.BpmFormMapper; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupService.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupService.java index f61e8f9d5b..da185105e2 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupService.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupService.java @@ -3,9 +3,9 @@ package cn.iocoder.yudao.module.bpm.service.definition; import java.util.*; import javax.validation.*; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupCreateReqVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupPageReqVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupUpdateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group.BpmUserGroupCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group.BpmUserGroupPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group.BpmUserGroupUpdateReqVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmUserGroupDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupServiceImpl.java index 6116e8ccea..e6a93b45d6 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupServiceImpl.java @@ -1,9 +1,9 @@ package cn.iocoder.yudao.module.bpm.service.definition; import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupCreateReqVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupPageReqVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupUpdateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group.BpmUserGroupCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group.BpmUserGroupPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group.BpmUserGroupUpdateReqVO; import cn.iocoder.yudao.module.bpm.convert.definition.BpmUserGroupConvert; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmUserGroupDO; import cn.iocoder.yudao.module.bpm.dal.mysql.definition.BpmUserGroupMapper; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveService.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOALeaveService.java similarity index 83% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveService.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOALeaveService.java index c612b8193f..a851f403cb 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveService.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOALeaveService.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.oa; +package cn.iocoder.yudao.module.bpm.service.oa; -import cn.iocoder.yudao.module.bpm.controller.oa.vo.BpmOALeaveCreateReqVO; -import cn.iocoder.yudao.module.bpm.controller.oa.vo.BpmOALeavePageReqVO; -import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOALeaveCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOALeavePageReqVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO; import javax.validation.Valid; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOALeaveServiceImpl.java similarity index 80% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOALeaveServiceImpl.java index ab9dcec42b..d0aadd95e6 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOALeaveServiceImpl.java @@ -1,24 +1,25 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.oa; +package cn.iocoder.yudao.module.bpm.service.oa; import cn.hutool.core.date.DateUtil; -import cn.iocoder.yudao.adminserver.modules.bpm.convert.oa.BpmOALeaveConvert; -import cn.iocoder.yudao.module.bpm.controller.oa.vo.BpmOALeaveCreateReqVO; -import cn.iocoder.yudao.module.bpm.controller.oa.vo.BpmOALeavePageReqVO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi; +import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOALeaveCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOALeavePageReqVO; +import cn.iocoder.yudao.module.bpm.convert.oa.BpmOALeaveConvert; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO; import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOALeaveMapper; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; -import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; -import cn.iocoder.yudao.adminserver.modules.bpm.service.task.dto.BpmProcessInstanceCreateReqDTO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; -import java.util.*; +import java.util.HashMap; +import java.util.Map; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_LEAVE_NOT_EXISTS; /** * OA 请å‡ç”³è¯· Service 实现类 @@ -39,7 +40,7 @@ public class BpmOALeaveServiceImpl implements BpmOALeaveService { private BpmOALeaveMapper leaveMapper; @Resource - private BpmProcessInstanceService processInstanceService; + private BpmProcessInstanceApi processInstanceApi; @Override @Transactional(rollbackFor = Exception.class) @@ -53,7 +54,7 @@ public class BpmOALeaveServiceImpl implements BpmOALeaveService { // å‘èµ· BPM æµç¨‹ Map processInstanceVariables = new HashMap<>(); processInstanceVariables.put("day", day); - String processInstanceId = processInstanceService.createProcessInstance(userId, + String processInstanceId = processInstanceApi.createProcessInstance(userId, new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY) .setVariables(processInstanceVariables).setBusinessKey(String.valueOf(leave.getId()))); @@ -64,6 +65,7 @@ public class BpmOALeaveServiceImpl implements BpmOALeaveService { @Override public void updateLeaveResult(Long id, Integer result) { + validateLeaveExists(id); leaveMapper.updateById(new BpmOALeaveDO().setId(id).setResult(result)); } diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/listener/BpmOALeaveResultListener.java b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOALeaveResultListener.java similarity index 58% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/listener/BpmOALeaveResultListener.java rename to yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOALeaveResultListener.java index bd80d51dd3..2354070f09 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/listener/BpmOALeaveResultListener.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOALeaveResultListener.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.oa.listener; +package cn.iocoder.yudao.module.bpm.service.oa.listener; -import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event.BpmProcessInstanceResultEvent; -import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event.BpmProcessInstanceResultEventListener; -import cn.iocoder.yudao.adminserver.modules.bpm.service.oa.BpmOALeaveService; -import cn.iocoder.yudao.adminserver.modules.bpm.service.oa.BpmOALeaveServiceImpl; +import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEvent; +import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEventListener; +import cn.iocoder.yudao.module.bpm.service.oa.BpmOALeaveService; +import cn.iocoder.yudao.module.bpm.service.oa.BpmOALeaveServiceImpl; import org.springframework.stereotype.Component; import javax.annotation.Resource; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormServiceTest.java b/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/module/bpm/service/definition/BpmFormServiceTest.java similarity index 92% rename from yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormServiceTest.java rename to yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/module/bpm/service/definition/BpmFormServiceTest.java index 86eac7c4ab..ca9d675fee 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormServiceTest.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/module/bpm/service/definition/BpmFormServiceTest.java @@ -1,13 +1,12 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; +package cn.iocoder.yudao.module.bpm.service.definition; import cn.hutool.core.util.RandomUtil; import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormCreateReqVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormPageReqVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.form.BpmFormUpdateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form.BpmFormCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form.BpmFormPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form.BpmFormUpdateReqVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; import cn.iocoder.yudao.module.bpm.dal.mysql.definition.BpmFormMapper; -import cn.iocoder.yudao.module.bpm.service.definition.BpmFormServiceImpl; import cn.iocoder.yudao.module.bpm.service.definition.dto.BpmFormFieldRespDTO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.json.JsonUtils; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupServiceTest.java b/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupServiceTest.java similarity index 92% rename from yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupServiceTest.java rename to yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupServiceTest.java index efd671c065..9c04d644de 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupServiceTest.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupServiceTest.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; +package cn.iocoder.yudao.module.bpm.service.definition; import cn.iocoder.yudao.adminserver.BaseDbUnitTest; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupCreateReqVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupPageReqVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.group.BpmUserGroupUpdateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group.BpmUserGroupCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group.BpmUserGroupPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group.BpmUserGroupUpdateReqVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmUserGroupDO; import cn.iocoder.yudao.module.bpm.dal.mysql.definition.BpmUserGroupMapper; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; @@ -11,7 +11,6 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.date.DateUtils; import cn.iocoder.yudao.framework.test.core.util.AssertUtils; import cn.iocoder.yudao.framework.test.core.util.RandomUtils; -import cn.iocoder.yudao.module.bpm.service.definition.BpmUserGroupServiceImpl; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.Import; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/message/BpmMessageConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/message/BpmMessageConvert.java deleted file mode 100644 index 4ea82abe30..0000000000 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/message/BpmMessageConvert.java +++ /dev/null @@ -1,57 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.convert.message; - -import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO; -import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceRejectReqDTO; -import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO; -import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; -import org.activiti.api.task.model.Task; -import org.activiti.engine.runtime.ProcessInstance; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.MappingTarget; -import org.mapstruct.Mappings; -import org.mapstruct.factory.Mappers; - -@Mapper -public interface BpmMessageConvert { - - BpmMessageConvert INSTANCE = Mappers.getMapper(BpmMessageConvert.class); - - default BpmMessageSendWhenTaskCreatedReqDTO convert(ProcessInstance processInstance, AdminUserRespDTO startUser, Task task) { - BpmMessageSendWhenTaskCreatedReqDTO reqDTO = new BpmMessageSendWhenTaskCreatedReqDTO(); - copyTo(processInstance, reqDTO); - copyTo(startUser, reqDTO); - copyTo(task, reqDTO); - return reqDTO; - } - @Mapping(source = "name", target = "processInstanceName") - void copyTo(ProcessInstance from, @MappingTarget BpmMessageSendWhenTaskCreatedReqDTO to); - @Mappings({ - @Mapping(source = "id", target = "startUserId"), - @Mapping(source = "nickname", target = "startUserNickname") - }) - void copyTo(AdminUserRespDTO from, @MappingTarget BpmMessageSendWhenTaskCreatedReqDTO to); - @Mappings({ - @Mapping(source = "id", target = "taskId"), - @Mapping(source = "name", target = "taskName"), - @Mapping(source = "assignee", target = "assigneeUserId") - }) - void copyTo(Task task, @MappingTarget BpmMessageSendWhenTaskCreatedReqDTO to); - - default BpmMessageSendWhenProcessInstanceRejectReqDTO convert(ProcessInstance processInstance, String comment) { - BpmMessageSendWhenProcessInstanceRejectReqDTO reqDTO = new BpmMessageSendWhenProcessInstanceRejectReqDTO(); - copyTo(processInstance, reqDTO); - reqDTO.setComment(comment); - return reqDTO; - } - @Mapping(source = "name", target = "processInstanceName") - void copyTo(ProcessInstance from, @MappingTarget BpmMessageSendWhenProcessInstanceRejectReqDTO to); - - @Mappings({ - @Mapping(source = "id", target = "processInstanceId"), - @Mapping(source = "name", target = "processInstanceName"), - @Mapping(source = "initiator", target = "startUserId") - }) - BpmMessageSendWhenProcessInstanceApproveReqDTO convert(org.activiti.api.process.model.ProcessInstance processInstance); - -} diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/api/package-info.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/api/package-info.java new file mode 100644 index 0000000000..2137e22031 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/api/package-info.java @@ -0,0 +1,4 @@ +/** + * bpm API 实现类,定义暴露给其它模å—çš„ API + */ +package cn.iocoder.yudao.module.bpm.api; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/api/task/BpmProcessInstanceApiImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/api/task/BpmProcessInstanceApiImpl.java new file mode 100644 index 0000000000..a1d05e4fc2 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/api/task/BpmProcessInstanceApiImpl.java @@ -0,0 +1,27 @@ +package cn.iocoder.yudao.module.bpm.api.task; + +import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; +import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; + +/** + * æµç¨‹å®žä¾‹ Api 实现类 + * + * @author èŠ‹é“æºç  + */ +@Service +@Validated +public class BpmProcessInstanceApiImpl implements BpmProcessInstanceApi { + + @Resource + private BpmProcessInstanceService processInstanceService; + + @Override + public String createProcessInstance(Long userId, BpmProcessInstanceCreateReqDTO reqDTO) { + return processInstanceService.createProcessInstance(userId, reqDTO); + } + +} diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmModelController.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmModelController.java similarity index 92% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmModelController.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmModelController.java index 449363d897..cbdbdaef82 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmModelController.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmModelController.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition; +package cn.iocoder.yudao.module.bpm.controller.admin.definition; -import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmModelConvert; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmModelService; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.*; +import cn.iocoder.yudao.module.bpm.convert.definition.BpmModelConvert; +import cn.iocoder.yudao.module.bpm.service.definition.BpmModelService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.io.IoUtils; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.model.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.http b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmProcessDefinitionController.http similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.http rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmProcessDefinitionController.http diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmProcessDefinitionController.java similarity index 79% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmProcessDefinitionController.java index cb74221b21..22e5c81b4f 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmProcessDefinitionController.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition; +package cn.iocoder.yudao.module.bpm.controller.admin.definition; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionListReqVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionPageItemRespVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionPageReqVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionListReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionPageItemRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO; +import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import io.swagger.annotations.Api; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.http b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmTaskAssignRuleController.http similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.http rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmTaskAssignRuleController.http diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmTaskAssignRuleController.java similarity index 83% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmTaskAssignRuleController.java index 1fbaf3b771..45ab2d4f4c 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmTaskAssignRuleController.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition; +package cn.iocoder.yudao.module.bpm.controller.admin.definition; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleCreateReqVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleRespVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.rule.BpmTaskAssignRuleCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.rule.BpmTaskAssignRuleRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.rule.BpmTaskAssignRuleUpdateReqVO; +import cn.iocoder.yudao.module.bpm.service.definition.BpmTaskAssignRuleService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmActivityController.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmActivityController.java similarity index 91% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmActivityController.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmActivityController.java index be4bc75c3e..fa2cf35464 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmActivityController.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmActivityController.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.task; +package cn.iocoder.yudao.module.bpm.controller.admin.task; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.module.bpm.controller.task.vo.activity.BpmActivityRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmActivityService; +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.activity.BpmActivityRespVO; +import cn.iocoder.yudao.module.bpm.service.task.BpmActivityService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; import io.swagger.annotations.Api; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.http b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.http similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.http rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.http diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.java similarity index 92% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.java index f32e3242fa..ed4bdf07da 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.task; +package cn.iocoder.yudao.module.bpm.controller.admin.task; -import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.*; +import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.bpm.controller.task.vo.instance.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.http b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmTaskController.http similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.http rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmTaskController.http diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmTaskController.java similarity index 93% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmTaskController.java index 665b735aea..35c80f7cf6 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmTaskController.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmTaskController.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.task; +package cn.iocoder.yudao.module.bpm.controller.admin.task; -import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.*; +import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.bpm.controller.task.vo.task.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/app/package-info.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/app/package-info.java new file mode 100644 index 0000000000..e8d285e359 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/app/package-info.java @@ -0,0 +1,4 @@ +/** + * å ä½ + */ +package cn.iocoder.yudao.module.bpm.controller.app; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/package-info.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/package-info.java new file mode 100644 index 0000000000..d1930bd6ac --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/controller/package-info.java @@ -0,0 +1,6 @@ +/** + * æä¾› RESTful API ç»™å‰ç«¯ï¼š + * 1. admin 包:æä¾›ç»™ç®¡ç†åŽå° yudao-ui-admin å‰ç«¯é¡¹ç›® + * 2. app 包:æä¾›ç»™ç”¨æˆ· APP yudao-ui-app å‰ç«¯é¡¹ç›®ï¼Œå®ƒçš„ Controller å’Œ VO éƒ½è¦æ·»åŠ  App å‰ç¼€ï¼Œç”¨äºŽå’Œç®¡ç†åŽå°è¿›è¡ŒåŒºåˆ† + */ +package cn.iocoder.yudao.module.bpm.controller; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmModelConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmModelConvert.java similarity index 94% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmModelConvert.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmModelConvert.java index 64c57c00ba..445911c8ca 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmModelConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmModelConvert.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.convert.definition; +package cn.iocoder.yudao.module.bpm.convert.definition; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmModelMetaInfoRespDTO; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.*; +import cn.iocoder.yudao.module.bpm.service.definition.dto.BpmModelMetaInfoRespDTO; +import cn.iocoder.yudao.module.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.json.JsonUtils; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.model.*; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; import org.activiti.engine.impl.persistence.entity.SuspensionState; import org.activiti.engine.repository.Deployment; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmProcessDefinitionConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmProcessDefinitionConvert.java similarity index 90% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmProcessDefinitionConvert.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmProcessDefinitionConvert.java index 97354a951b..17a4fb1446 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmProcessDefinitionConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmProcessDefinitionConvert.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.convert.definition; +package cn.iocoder.yudao.module.bpm.convert.definition; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionPageItemRespVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionPageItemRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; +import cn.iocoder.yudao.module.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import org.activiti.engine.impl.persistence.entity.SuspensionState; import org.activiti.engine.repository.Deployment; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmTaskAssignRuleConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmTaskAssignRuleConvert.java similarity index 80% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmTaskAssignRuleConvert.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmTaskAssignRuleConvert.java index 2701a1f197..4be54fe7ac 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmTaskAssignRuleConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/convert/definition/BpmTaskAssignRuleConvert.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.convert.definition; +package cn.iocoder.yudao.module.bpm.convert.definition; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleCreateReqVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleRespVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleUpdateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.rule.BpmTaskAssignRuleCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.rule.BpmTaskAssignRuleRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.rule.BpmTaskAssignRuleUpdateReqVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import org.activiti.bpmn.model.UserTask; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/package-info.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/convert/package-info.java similarity index 57% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/package-info.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/convert/package-info.java index 497d7afa00..6db6ebc461 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/package-info.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/convert/package-info.java @@ -3,4 +3,4 @@ * * ç›®å‰ä½¿ç”¨ MapStruct 框架 */ -package cn.iocoder.yudao.adminserver.modules.bpm.convert; +package cn.iocoder.yudao.module.bpm.convert; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmActivityConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmActivityConvert.java similarity index 82% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmActivityConvert.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmActivityConvert.java index 8635b330a7..02bfaa24e8 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmActivityConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmActivityConvert.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.convert.task; +package cn.iocoder.yudao.module.bpm.convert.task; -import cn.iocoder.yudao.module.bpm.controller.task.vo.activity.BpmActivityRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.activity.BpmActivityRespVO; import org.activiti.engine.history.HistoricActivityInstance; import org.mapstruct.Mapper; import org.mapstruct.Mapping; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmProcessInstanceConvert.java similarity index 78% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmProcessInstanceConvert.java index 459362ce77..abc94d89a0 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmProcessInstanceConvert.java @@ -1,10 +1,12 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.convert.task; +package cn.iocoder.yudao.module.bpm.convert.task; -import cn.iocoder.yudao.module.bpm.controller.task.vo.instance.BpmProcessInstancePageItemRespVO; -import cn.iocoder.yudao.module.bpm.controller.task.vo.instance.BpmProcessInstanceRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstancePageItemRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceRespVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; -import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event.BpmProcessInstanceResultEvent; +import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEvent; +import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO; +import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceRejectReqDTO; import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -114,4 +116,20 @@ public interface BpmProcessInstanceConvert { return event; } + default BpmMessageSendWhenProcessInstanceRejectReqDTO convert(ProcessInstance processInstance, String comment) { + BpmMessageSendWhenProcessInstanceRejectReqDTO reqDTO = new BpmMessageSendWhenProcessInstanceRejectReqDTO(); + copyTo(processInstance, reqDTO); + reqDTO.setComment(comment); + return reqDTO; + } + @Mapping(source = "name", target = "processInstanceName") + void copyTo(ProcessInstance from, @MappingTarget BpmMessageSendWhenProcessInstanceRejectReqDTO to); + + @Mappings({ + @Mapping(source = "id", target = "processInstanceId"), + @Mapping(source = "name", target = "processInstanceName"), + @Mapping(source = "initiator", target = "startUserId") + }) + BpmMessageSendWhenProcessInstanceApproveReqDTO convert2(org.activiti.api.process.model.ProcessInstance processInstance); + } diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmTaskConvert.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmTaskConvert.java similarity index 79% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmTaskConvert.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmTaskConvert.java index e9689d6fd5..a8f499e1be 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmTaskConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmTaskConvert.java @@ -1,9 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.convert.task; +package cn.iocoder.yudao.module.bpm.convert.task; -import cn.iocoder.yudao.module.bpm.controller.task.vo.task.BpmTaskDonePageItemRespVO; -import cn.iocoder.yudao.module.bpm.controller.task.vo.task.BpmTaskRespVO; -import cn.iocoder.yudao.module.bpm.controller.task.vo.task.BpmTaskTodoPageItemRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskDonePageItemRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskTodoPageItemRespVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO; +import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO; import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; @@ -123,4 +124,24 @@ public interface BpmTaskConvert { }) BpmTaskTodoPageItemRespVO.ProcessInstance convert(HistoricProcessInstance processInstance, AdminUserRespDTO startUser); + default BpmMessageSendWhenTaskCreatedReqDTO convert(ProcessInstance processInstance, AdminUserRespDTO startUser, org.activiti.api.task.model.Task task) { + BpmMessageSendWhenTaskCreatedReqDTO reqDTO = new BpmMessageSendWhenTaskCreatedReqDTO(); + copyTo(processInstance, reqDTO); + copyTo(startUser, reqDTO); + copyTo(task, reqDTO); + return reqDTO; + } + @Mapping(source = "name", target = "processInstanceName") + void copyTo(ProcessInstance from, @MappingTarget BpmMessageSendWhenTaskCreatedReqDTO to); + @Mappings({ + @Mapping(source = "id", target = "startUserId"), + @Mapping(source = "nickname", target = "startUserNickname") + }) + void copyTo(AdminUserRespDTO from, @MappingTarget BpmMessageSendWhenTaskCreatedReqDTO to); + @Mappings({ + @Mapping(source = "id", target = "taskId"), + @Mapping(source = "name", target = "taskName"), + @Mapping(source = "assignee", target = "assigneeUserId") + }) + void copyTo(org.activiti.api.task.model.Task task, @MappingTarget BpmMessageSendWhenTaskCreatedReqDTO to); } diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/config/BpmActivitiConfiguration.java similarity index 76% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/config/BpmActivitiConfiguration.java index 18f867ffae..181cc2d573 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/config/BpmActivitiConfiguration.java @@ -1,18 +1,16 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.config; +package cn.iocoder.yudao.module.bpm.framework.activiti.config; -import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.BpmActivityBehaviorFactory; -import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; -import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event.BpmProcessInstanceResultEventPublisher; -import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.identity.EmptyUserGroupManager; -import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.listener.BpmTackActivitiEventListener; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; +import cn.iocoder.yudao.module.bpm.framework.activiti.core.behavior.BpmActivityBehaviorFactory; +import cn.iocoder.yudao.module.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; +import cn.iocoder.yudao.module.bpm.framework.activiti.core.identity.EmptyUserGroupManager; +import cn.iocoder.yudao.module.bpm.framework.activiti.core.listener.BpmTackActivitiEventListener; +import cn.iocoder.yudao.module.bpm.service.definition.BpmTaskAssignRuleService; import cn.iocoder.yudao.module.bpm.service.definition.BpmUserGroupService; import cn.iocoder.yudao.module.system.api.dept.DeptApi; import cn.iocoder.yudao.module.system.api.permission.PermissionApi; import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import org.activiti.api.runtime.shared.identity.UserGroupManager; import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer; -import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -79,9 +77,4 @@ public class BpmActivitiConfiguration { return bpmActivityBehaviorFactory; } - @Bean - public BpmProcessInstanceResultEventPublisher processInstanceResultEventPublisher(ApplicationEventPublisher publisher) { - return new BpmProcessInstanceResultEventPublisher(publisher); - } - } diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java similarity index 87% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java index aa38a24c0f..d394f8631e 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior; +package cn.iocoder.yudao.module.bpm.framework.activiti.core.behavior; -import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; +import cn.iocoder.yudao.module.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; +import cn.iocoder.yudao.module.bpm.service.definition.BpmTaskAssignRuleService; import cn.iocoder.yudao.module.bpm.service.definition.BpmUserGroupService; import cn.iocoder.yudao.module.system.api.dept.DeptApi; import cn.iocoder.yudao.module.system.api.permission.PermissionApi; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java similarity index 97% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java index a540d1ffa5..9fb1f5abb4 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior; +package cn.iocoder.yudao.module.bpm.framework.activiti.core.behavior; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; +import cn.iocoder.yudao.module.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; +import cn.iocoder.yudao.module.bpm.service.definition.BpmTaskAssignRuleService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmUserGroupDO; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/package-info.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/package-info.java similarity index 83% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/package-info.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/package-info.java index a67b29bf09..e627479a5b 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/package-info.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/package-info.java @@ -4,4 +4,4 @@ * * @author èŠ‹é“æºç  */ -package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior; +package cn.iocoder.yudao.module.bpm.framework.activiti.core.behavior; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/BpmTaskAssignScript.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/script/BpmTaskAssignScript.java similarity index 89% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/BpmTaskAssignScript.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/script/BpmTaskAssignScript.java index 5e6f43a9a1..eee0d3f408 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/BpmTaskAssignScript.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/script/BpmTaskAssignScript.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script; +package cn.iocoder.yudao.module.bpm.framework.activiti.core.behavior.script; import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskRuleScriptEnum; import org.activiti.engine.impl.persistence.entity.TaskEntity; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderAbstractScript.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderAbstractScript.java similarity index 91% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderAbstractScript.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderAbstractScript.java index e84c5df17b..c27567018a 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderAbstractScript.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderAbstractScript.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.impl; +package cn.iocoder.yudao.module.bpm.framework.activiti.core.behavior.script.impl; -import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; +import cn.iocoder.yudao.module.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; import cn.iocoder.yudao.module.system.api.dept.DeptApi; import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX1Script.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX1Script.java similarity index 87% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX1Script.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX1Script.java index 39451903a3..e0714731a5 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX1Script.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX1Script.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.impl; +package cn.iocoder.yudao.module.bpm.framework.activiti.core.behavior.script.impl; import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskRuleScriptEnum; import org.activiti.engine.impl.persistence.entity.TaskEntity; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2Script.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2Script.java similarity index 87% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2Script.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2Script.java index 9fc9c806b7..7ad928c8d3 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2Script.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2Script.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.impl; +package cn.iocoder.yudao.module.bpm.framework.activiti.core.behavior.script.impl; import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskRuleScriptEnum; import org.activiti.engine.impl.persistence.entity.TaskEntity; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignStartUserScript.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignStartUserScript.java similarity index 79% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignStartUserScript.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignStartUserScript.java index 3cf33be59f..af8846cbe6 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignStartUserScript.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignStartUserScript.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.impl; +package cn.iocoder.yudao.module.bpm.framework.activiti.core.behavior.script.impl; import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskRuleScriptEnum; -import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; +import cn.iocoder.yudao.module.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; import cn.iocoder.yudao.framework.common.util.collection.SetUtils; import org.activiti.engine.impl.persistence.entity.TaskEntity; import org.springframework.stereotype.Component; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/identity/EmptyUserGroupManager.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/identity/EmptyUserGroupManager.java similarity index 91% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/identity/EmptyUserGroupManager.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/identity/EmptyUserGroupManager.java index b4b86b228a..22786da10c 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/identity/EmptyUserGroupManager.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/identity/EmptyUserGroupManager.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.identity; +package cn.iocoder.yudao.module.bpm.framework.activiti.core.identity; import org.activiti.api.runtime.shared.identity.UserGroupManager; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java similarity index 93% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java index 14ba6cf6e7..6ed7297d72 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.listener; +package cn.iocoder.yudao.module.bpm.framework.activiti.core.listener; import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; -import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; +import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; import org.activiti.api.model.shared.event.RuntimeEvent; import org.activiti.api.process.model.ProcessInstance; import org.activiti.api.process.model.events.ProcessRuntimeEvent; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTackActivitiEventListener.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/listener/BpmTackActivitiEventListener.java similarity index 87% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTackActivitiEventListener.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/listener/BpmTackActivitiEventListener.java index 307263e0c5..4b6c21cfde 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTackActivitiEventListener.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/listener/BpmTackActivitiEventListener.java @@ -1,8 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.listener; +package cn.iocoder.yudao.module.bpm.framework.activiti.core.listener; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; -import org.activiti.api.process.runtime.events.listener.ProcessRuntimeEventListener; +import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; import org.activiti.api.task.runtime.events.listener.TaskEventListener; import org.activiti.engine.delegate.event.ActivitiEvent; import org.activiti.engine.delegate.event.ActivitiEventListener; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTaskEventListener.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/listener/BpmTaskEventListener.java similarity index 93% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTaskEventListener.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/listener/BpmTaskEventListener.java index 15809c5aea..da8c6238df 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTaskEventListener.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/listener/BpmTaskEventListener.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.listener; +package cn.iocoder.yudao.module.bpm.framework.activiti.core.listener; import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO; -import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; +import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService; import org.activiti.api.model.shared.event.RuntimeEvent; import org.activiti.api.task.model.Task; import org.activiti.api.task.model.events.TaskRuntimeEvent; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/package-info.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/listener/package-info.java similarity index 78% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/package-info.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/listener/package-info.java index 1badfe46c3..eca41904cc 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/package-info.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/listener/package-info.java @@ -4,4 +4,4 @@ * * @author èŠ‹é“æºç  */ -package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.listener; +package cn.iocoder.yudao.module.bpm.framework.activiti.core.listener; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/package-info.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/package-info.java new file mode 100644 index 0000000000..52fdb7f935 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/framework/package-info.java @@ -0,0 +1,6 @@ +/** + * 属于 bpm 模å—çš„ framework å°è£… + * + * @author èŠ‹é“æºç  + */ +package cn.iocoder.yudao.module.bpm.framework; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/package-info.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/package-info.java similarity index 52% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/package-info.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/package-info.java index 2757e578b7..5713e495c7 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/package-info.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/package-info.java @@ -4,6 +4,9 @@ * * bpm 解释:https://baike.baidu.com/item/BPM/1933 * - * 缩写:bpm + * 1. Controller URL:以 /bpm/ 开头,é¿å…和其它 Module å†²çª + * 2. DataObject 表å:以 bpm_ 开头,方便在数æ®åº“中区分 + * + * 注æ„,由于 Bpm 模å—下,容易和其它模å—é‡å,所以类å都加载 Pay çš„å‰ç¼€~ */ -package cn.iocoder.yudao.adminserver.modules.bpm; +package cn.iocoder.yudao.module.bpm; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmModelService.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmModelService.java similarity index 92% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmModelService.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmModelService.java index be7cdadb68..23ad07011c 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmModelService.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmModelService.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; +package cn.iocoder.yudao.module.bpm.service.definition; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.model.*; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.*; import org.activiti.bpmn.model.BpmnModel; import javax.validation.Valid; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmModelServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmModelServiceImpl.java similarity index 95% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmModelServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmModelServiceImpl.java index 0f37fb5826..a4b6bf3012 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmModelServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmModelServiceImpl.java @@ -1,22 +1,21 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; +package cn.iocoder.yudao.module.bpm.service.definition; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmModelConvert; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmModelMetaInfoRespDTO; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.*; +import cn.iocoder.yudao.module.bpm.convert.definition.BpmModelConvert; +import cn.iocoder.yudao.module.bpm.service.definition.dto.BpmModelMetaInfoRespDTO; +import cn.iocoder.yudao.module.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; import cn.iocoder.yudao.framework.activiti.core.util.ActivitiUtils; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.json.JsonUtils; import cn.iocoder.yudao.framework.common.util.object.PageUtils; import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.model.*; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.rule.BpmTaskAssignRuleRespVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; import cn.iocoder.yudao.module.bpm.enums.definition.BpmModelFormTypeEnum; -import cn.iocoder.yudao.module.bpm.service.definition.BpmFormService; import lombok.extern.slf4j.Slf4j; import org.activiti.bpmn.model.BpmnModel; import org.activiti.engine.RepositoryService; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmProcessDefinitionService.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmProcessDefinitionService.java similarity index 88% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmProcessDefinitionService.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmProcessDefinitionService.java index 688098b017..7fe2a28de5 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmProcessDefinitionService.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmProcessDefinitionService.java @@ -1,11 +1,11 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; +package cn.iocoder.yudao.module.bpm.service.definition; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionListReqVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionPageItemRespVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionPageReqVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionListReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionPageItemRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; +import cn.iocoder.yudao.module.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import org.activiti.bpmn.model.BpmnModel; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmProcessDefinitionServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmProcessDefinitionServiceImpl.java similarity index 94% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmProcessDefinitionServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmProcessDefinitionServiceImpl.java index 16a9689782..538e2a05cf 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmProcessDefinitionServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmProcessDefinitionServiceImpl.java @@ -1,21 +1,20 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; +package cn.iocoder.yudao.module.bpm.service.definition; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmProcessDefinitionConvert; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; +import cn.iocoder.yudao.module.bpm.convert.definition.BpmProcessDefinitionConvert; +import cn.iocoder.yudao.module.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; import cn.iocoder.yudao.framework.activiti.core.util.ActivitiUtils; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.PageUtils; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionListReqVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionPageItemRespVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionPageReqVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.process.BpmProcessDefinitionRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionListReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionPageItemRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; import cn.iocoder.yudao.module.bpm.dal.mysql.definition.BpmProcessDefinitionExtMapper; -import cn.iocoder.yudao.module.bpm.service.definition.BpmFormService; import lombok.extern.slf4j.Slf4j; import org.activiti.bpmn.model.BpmnModel; import org.activiti.engine.RepositoryService; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmTaskAssignRuleService.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmTaskAssignRuleService.java similarity index 87% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmTaskAssignRuleService.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmTaskAssignRuleService.java index 40594c44a4..19e7f9684a 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmTaskAssignRuleService.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmTaskAssignRuleService.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; +package cn.iocoder.yudao.module.bpm.service.definition; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleCreateReqVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleRespVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleUpdateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.rule.BpmTaskAssignRuleCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.rule.BpmTaskAssignRuleRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.rule.BpmTaskAssignRuleUpdateReqVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; import org.springframework.lang.Nullable; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmTaskAssignRuleServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmTaskAssignRuleServiceImpl.java similarity index 94% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmTaskAssignRuleServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmTaskAssignRuleServiceImpl.java index 1e80f854ed..87ec0a57a3 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmTaskAssignRuleServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmTaskAssignRuleServiceImpl.java @@ -1,19 +1,18 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; +package cn.iocoder.yudao.module.bpm.service.definition; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleCreateReqVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleRespVO; -import cn.iocoder.yudao.module.bpm.controller.definition.vo.rule.BpmTaskAssignRuleUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmTaskAssignRuleConvert; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.rule.BpmTaskAssignRuleCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.rule.BpmTaskAssignRuleRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.rule.BpmTaskAssignRuleUpdateReqVO; +import cn.iocoder.yudao.module.bpm.convert.definition.BpmTaskAssignRuleConvert; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; import cn.iocoder.yudao.module.bpm.dal.mysql.definition.BpmTaskAssignRuleMapper; import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskAssignRuleTypeEnum; import cn.iocoder.yudao.framework.activiti.core.util.ActivitiUtils; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; -import cn.iocoder.yudao.module.bpm.service.definition.BpmUserGroupService; import cn.iocoder.yudao.module.system.api.dept.DeptApi; import cn.iocoder.yudao.module.system.api.dept.PostApi; import cn.iocoder.yudao.module.system.api.dict.DictDataApi; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmModelMetaInfoRespDTO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/dto/BpmModelMetaInfoRespDTO.java similarity index 92% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmModelMetaInfoRespDTO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/dto/BpmModelMetaInfoRespDTO.java index ab141a69af..e50dae3c36 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmModelMetaInfoRespDTO.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/dto/BpmModelMetaInfoRespDTO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto; +package cn.iocoder.yudao.module.bpm.service.definition.dto; import cn.iocoder.yudao.module.bpm.enums.definition.BpmModelFormTypeEnum; import lombok.Data; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmProcessDefinitionCreateReqDTO.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/dto/BpmProcessDefinitionCreateReqDTO.java similarity index 97% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmProcessDefinitionCreateReqDTO.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/dto/BpmProcessDefinitionCreateReqDTO.java index 0f275eb6d5..8b2d22ad58 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmProcessDefinitionCreateReqDTO.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/dto/BpmProcessDefinitionCreateReqDTO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto; +package cn.iocoder.yudao.module.bpm.service.definition.dto; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmActivityService.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmActivityService.java similarity index 90% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmActivityService.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmActivityService.java index badba2b9c7..e7c28648a4 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmActivityService.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmActivityService.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.task; +package cn.iocoder.yudao.module.bpm.service.task; -import cn.iocoder.yudao.module.bpm.controller.task.vo.activity.BpmActivityRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.activity.BpmActivityRespVO; import java.util.List; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmActivityServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmActivityServiceImpl.java similarity index 90% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmActivityServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmActivityServiceImpl.java index f60351bd2b..2db1dc3e5c 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmActivityServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmActivityServiceImpl.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.task; +package cn.iocoder.yudao.module.bpm.service.task; import cn.hutool.core.io.IoUtil; -import cn.iocoder.yudao.adminserver.modules.bpm.convert.task.BpmActivityConvert; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; +import cn.iocoder.yudao.module.bpm.convert.task.BpmActivityConvert; +import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; -import cn.iocoder.yudao.module.bpm.controller.task.vo.activity.BpmActivityRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.activity.BpmActivityRespVO; import lombok.extern.slf4j.Slf4j; import org.activiti.bpmn.model.BpmnModel; import org.activiti.engine.HistoryService; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceService.java similarity index 95% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceService.java index 1942b13a07..6dcacac1f8 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceService.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.task; +package cn.iocoder.yudao.module.bpm.service.task; -import cn.iocoder.yudao.module.bpm.controller.task.vo.instance.*; +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.*; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceDeleteReasonEnum; -import cn.iocoder.yudao.adminserver.modules.bpm.service.task.dto.BpmProcessInstanceCreateReqDTO; +import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import org.activiti.engine.history.HistoricProcessInstance; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java similarity index 95% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java index caf7fe14e1..190170b387 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java @@ -1,21 +1,20 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.task; +package cn.iocoder.yudao.module.bpm.service.task; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.adminserver.modules.bpm.convert.message.BpmMessageConvert; -import cn.iocoder.yudao.adminserver.modules.bpm.convert.task.BpmProcessInstanceConvert; -import cn.iocoder.yudao.module.bpm.controller.task.vo.instance.*; +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.*; +import cn.iocoder.yudao.module.bpm.convert.task.BpmProcessInstanceConvert; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; import cn.iocoder.yudao.module.bpm.dal.mysql.task.BpmProcessInstanceExtMapper; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceDeleteReasonEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceStatusEnum; -import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event.BpmProcessInstanceResultEventPublisher; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; +import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEventPublisher; +import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService; -import cn.iocoder.yudao.adminserver.modules.bpm.service.task.dto.BpmProcessInstanceCreateReqDTO; +import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.number.NumberUtils; import cn.iocoder.yudao.module.system.api.dept.DeptApi; @@ -278,7 +277,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService processInstanceExtMapper.updateByProcessInstanceId(instanceExtDO); // å‘逿µç¨‹è¢«é€šè¿‡çš„æ¶ˆæ¯ - messageService.sendMessageWhenProcessInstanceApprove(BpmMessageConvert.INSTANCE.convert(instance)); + messageService.sendMessageWhenProcessInstanceApprove(BpmProcessInstanceConvert.INSTANCE.convert2(instance)); // å‘逿µç¨‹å®žä¾‹çš„状æ€äº‹ä»¶ processInstanceResultEventPublisher.sendProcessInstanceResultEvent( @@ -301,7 +300,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService processInstanceExtMapper.updateByProcessInstanceId(instanceExtDO); // å‘逿µç¨‹è¢«ä¸é€šè¿‡çš„æ¶ˆæ¯ - messageService.sendMessageWhenProcessInstanceReject(BpmMessageConvert.INSTANCE.convert(processInstance, comment)); + messageService.sendMessageWhenProcessInstanceReject(BpmProcessInstanceConvert.INSTANCE.convert(processInstance, comment)); // å‘逿µç¨‹å®žä¾‹çš„状æ€äº‹ä»¶ processInstanceResultEventPublisher.sendProcessInstanceResultEvent( diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskService.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskService.java similarity index 97% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskService.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskService.java index 796106a581..025ee461fc 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskService.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskService.java @@ -1,6 +1,6 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.task; +package cn.iocoder.yudao.module.bpm.service.task; -import cn.iocoder.yudao.module.bpm.controller.task.vo.task.*; +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.*; import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java similarity index 97% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskServiceImpl.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java index 0fc5385a0f..b4cb99fb1a 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java @@ -1,10 +1,9 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.task; +package cn.iocoder.yudao.module.bpm.service.task; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.adminserver.modules.bpm.convert.message.BpmMessageConvert; -import cn.iocoder.yudao.adminserver.modules.bpm.convert.task.BpmTaskConvert; -import cn.iocoder.yudao.module.bpm.controller.task.vo.task.*; +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.*; +import cn.iocoder.yudao.module.bpm.convert.task.BpmTaskConvert; import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO; import cn.iocoder.yudao.module.bpm.dal.mysql.task.BpmTaskExtMapper; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; @@ -291,7 +290,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { public void afterCommit() { ProcessInstance processInstance = processInstanceService.getProcessInstance(task.getProcessInstanceId()); AdminUserRespDTO startUser = adminUserApi.getUser(Long.valueOf(processInstance.getStartUserId())); - messageService.sendMessageWhenTaskAssigned(BpmMessageConvert.INSTANCE.convert(processInstance, startUser, task)); + messageService.sendMessageWhenTaskAssigned(BpmTaskConvert.INSTANCE.convert(processInstance, startUser, task)); } }); } diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/package-info.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/task/package-info.java similarity index 89% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/package-info.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/task/package-info.java index 01ecbf3a26..0ffb3a8949 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/package-info.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/main/java/cn/iocoder/yudao/module/bpm/service/task/package-info.java @@ -9,4 +9,4 @@ * * @author èŠ‹é“æºç  */ -package cn.iocoder.yudao.adminserver.modules.bpm.service.task; +package cn.iocoder.yudao.module.bpm.service.task; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/package-info.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/package-info.java deleted file mode 100644 index cdde7ccc4a..0000000000 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java similarity index 96% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java index 8d2e1b6723..b05b712a30 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java @@ -1,8 +1,8 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior; +package cn.iocoder.yudao.module.bpm.framework.activiti.core.behavior; import cn.hutool.core.map.MapUtil; -import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; +import cn.iocoder.yudao.module.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; +import cn.iocoder.yudao.module.bpm.service.definition.BpmTaskAssignRuleService; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2ScriptTest.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2ScriptTest.java similarity index 96% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2ScriptTest.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2ScriptTest.java index 8be8fc4d17..d44c5c8067 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2ScriptTest.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/module/bpm/framework/activiti/core/behavior/script/impl/BpmTaskAssignLeaderX2ScriptTest.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.impl; +package cn.iocoder.yudao.module.bpm.framework.activiti.core.behavior.script.impl; import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; import cn.iocoder.yudao.module.system.api.dept.DeptApi; @@ -10,6 +10,7 @@ import org.activiti.engine.impl.persistence.entity.TaskEntity; import org.activiti.engine.impl.persistence.entity.TaskEntityImpl; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; +import org.mockito.Mock; import org.springframework.boot.test.mock.mockito.MockBean; import java.util.Set; @@ -25,9 +26,9 @@ class BpmTaskAssignLeaderX2ScriptTest extends BaseMockitoUnitTest { @InjectMocks private BpmTaskAssignLeaderX2Script script; - @MockBean + @Mock private AdminUserApi adminUserApi; - @MockBean + @Mock private DeptApi deptApi; @Test diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/module/bpm/service/package-info.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/module/bpm/service/package-info.java new file mode 100644 index 0000000000..bda0cb8cae --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/module/bpm/service/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.yudao.module.bpm.service; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/module/bpm/test/BaseDbUnitTest.java similarity index 97% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/module/bpm/test/BaseDbUnitTest.java index 5f7daeded1..a25958bfd9 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/java/cn/iocoder/yudao/module/bpm/test/BaseDbUnitTest.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver; +package cn.iocoder.yudao.module.bpm.test; import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration; import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration; diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/resources/application-unit-test.yaml b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/resources/application-unit-test.yaml index ddad7ace21..42e5e356dd 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/resources/application-unit-test.yaml +++ b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/resources/application-unit-test.yaml @@ -18,6 +18,12 @@ spring: async-init: true # å•元测试,异步åˆå§‹åŒ– Druid 连接池,æå‡å¯åŠ¨é€Ÿåº¦ initial-size: 1 # å•元测试,é…置为 1,æå‡å¯åŠ¨é€Ÿåº¦ + # Redis é…置。Redisson 默认的é…置足够使用,一般ä¸éœ€è¦è¿›è¡Œè°ƒä¼˜ + redis: + host: 127.0.0.1 # åœ°å€ + port: 16379 # 端å£ï¼ˆå•元测试,使用 16379 端å£ï¼‰ + database: 0 # æ•°æ®åº“索引 + mybatis: lazy-initialization: true # å•元测试,设置 MyBatis Mapper 延迟加载,加速æ¯ä¸ªå•元测试 @@ -36,3 +42,9 @@ mybatis: --- #################### 芋é“相关é…ç½® #################### # 芋é“é…置项,设置当å‰é¡¹ç›®æ‰€æœ‰è‡ªå®šä¹‰çš„é…ç½® +yudao: + info: + base-package: cn.iocoder.yudao.module.member.dal.mysql + base-package2: cn.iocoder.yudao.module + core-service: + base-package: cn.iocoder.yudao.module.member.dal.mysql # TODO èŠ‹è‰¿ï¼šè¦æ¸…ç†æŽ‰ diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/resources/application.yaml b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/resources/application.yaml deleted file mode 100644 index 2cfbb1abe4..0000000000 --- a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/resources/application.yaml +++ /dev/null @@ -1,35 +0,0 @@ -spring: - application: - name: yudao-module-bpm-service - - # Jackson é…置项 - jackson: - serialization: - write-dates-as-timestamps: true # 设置 Date 的格å¼ï¼Œä½¿ç”¨æ—¶é—´æˆ³ - write-date-timestamps-as-nanoseconds: false # 设置ä¸ä½¿ç”¨ nanoseconds 的格å¼ã€‚例如说 1611460870.401,而是直接 1611460870401 - write-durations-as-timestamps: true # 设置 Duration 的格å¼ï¼Œä½¿ç”¨æ—¶é—´æˆ³ - fail-on-empty-beans: false # å…许åºåˆ—化无属性的 Bean - -# MyBatis Plus çš„é…置项 -mybatis-plus: - configuration: - map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # æ‰“å°æ—¥å¿— - global-config: - db-config: - id-type: AUTO # 自增 ID - logic-delete-value: 1 # 逻辑已删除值(默认为 1) - logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) - mapper-locations: classpath*:mapper/*.xml - type-aliases-package: ${yudao.core-service.base-package}.modules.*.dal.dataobject - ---- #################### 芋é“相关é…ç½® #################### - -yudao: - info: - version: 1.0.0 - base-package: cn.iocoder.yudao.adminserver - core-service: - base-package: cn.iocoder.yudao.coreservice - -debug: false diff --git a/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/resources/logback-spring.xml b/yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/resources/logback.xml similarity index 100% rename from yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/resources/logback-spring.xml rename to yudao-module-bpm/yudao-module-bpm-impl-activiti/src/test/resources/logback.xml diff --git a/yudao-module-system/yudao-module-system-api/pom.xml b/yudao-module-system/yudao-module-system-api/pom.xml index 807eee44f3..40e97dc4bf 100644 --- a/yudao-module-system/yudao-module-system-api/pom.xml +++ b/yudao-module-system/yudao-module-system-api/pom.xml @@ -28,6 +28,7 @@ spring-boot-starter-validation true + cn.iocoder.boot diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/dept/PostApiImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/dept/PostApiImpl.java new file mode 100644 index 0000000000..9454193e70 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/dept/PostApiImpl.java @@ -0,0 +1,24 @@ +package cn.iocoder.yudao.module.system.api.dept; + +import cn.iocoder.yudao.module.system.service.dept.PostService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Collection; + +/** + * å²—ä½ API 实现类 + * + * @author èŠ‹é“æºç  + */ +@Service +public class PostApiImpl implements PostApi { + + @Resource + private PostService postService; + + @Override + public void validPosts(Collection ids) { + postService.validPosts(ids); + } +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/dict/DictDataApiImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/dict/DictDataApiImpl.java new file mode 100644 index 0000000000..6db4fb8e04 --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/dict/DictDataApiImpl.java @@ -0,0 +1,25 @@ +package cn.iocoder.yudao.module.system.api.dict; + +import cn.iocoder.yudao.module.system.service.dict.DictDataService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Collection; + +/** + * å­—å…¸æ•°æ® API 实现类 + * + * @author èŠ‹é“æºç  + */ +@Service +public class DictDataApiImpl implements DictDataApi { + + @Resource + private DictDataService dictDataService; + + @Override + public void validDictDatas(String dictType, Collection values) { + dictDataService.validDictDatas(dictType, values); + } + +} diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/permission/RoleApiImpl.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/permission/RoleApiImpl.java new file mode 100644 index 0000000000..2c4f94737d --- /dev/null +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/permission/RoleApiImpl.java @@ -0,0 +1,24 @@ +package cn.iocoder.yudao.module.system.api.permission; + +import cn.iocoder.yudao.module.system.service.permission.RoleService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Collection; + +/** + * 角色 API 实现类 + * + * @author èŠ‹é“æºç  + */ +@Service +public class RoleApiImpl implements RoleApi { + + @Resource + private RoleService roleService; + + @Override + public void validRoles(Collection ids) { + roleService.validRoles(ids); + } +} From 2b630ef3f2e3e0c2e42ced07847e070f32b24d12 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Tue, 1 Feb 2022 22:59:43 +0800 Subject: [PATCH 29/47] =?UTF-8?q?=E5=A4=9A=E6=A8=A1=E5=9D=97=E9=87=8D?= =?UTF-8?q?=E6=9E=84=209=EF=BC=9A=E8=B0=83=E6=95=B4=E7=9A=84=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=20URL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yudao-admin-ui/src/api/login.js | 16 ++++++++-------- yudao-admin-ui/src/api/menu.js | 2 +- yudao-admin-ui/src/store/modules/dict.js | 4 ++++ yudao-admin-ui/src/utils/request.js | 2 +- 更新日志.md | 2 +- 5 files changed, 15 insertions(+), 11 deletions(-) diff --git a/yudao-admin-ui/src/api/login.js b/yudao-admin-ui/src/api/login.js index 348aef0639..24a9df4758 100644 --- a/yudao-admin-ui/src/api/login.js +++ b/yudao-admin-ui/src/api/login.js @@ -9,7 +9,7 @@ export function login(username, password, code, uuid) { uuid } return request({ - url: '/login', + url: '/system/login', method: 'post', data: data }) @@ -18,7 +18,7 @@ export function login(username, password, code, uuid) { // 获å–ç”¨æˆ·è¯¦ç»†ä¿¡æ¯ export function getInfo() { return request({ - url: '/get-permission-info', + url: '/system/get-permission-info', method: 'get' }) } @@ -26,7 +26,7 @@ export function getInfo() { // 退出方法 export function logout() { return request({ - url: '/logout', + url: '/system/logout', method: 'post' }) } @@ -42,7 +42,7 @@ export function getCodeImg() { // 社交授æƒçš„跳转 export function socialAuthRedirect(type, redirectUri) { return request({ - url: '/social-auth-redirect?type=' + type + '&redirectUri=' + redirectUri, + url: '/system/social-auth-redirect?type=' + type + '&redirectUri=' + redirectUri, method: 'get' }) } @@ -50,7 +50,7 @@ export function socialAuthRedirect(type, redirectUri) { // 社交登录,使用 code 授æƒç  export function socialLogin(type, code, state) { return request({ - url: '/social-login', + url: '/system/social-login', method: 'post', data: { type, @@ -63,7 +63,7 @@ export function socialLogin(type, code, state) { // 社交登录,使用 code 授æƒç  + + è´¦å·å¯†ç  export function socialLogin2(type, code, state, username, password) { return request({ - url: '/social-login2', + url: '/system/social-login2', method: 'post', data: { type, @@ -78,7 +78,7 @@ export function socialLogin2(type, code, state, username, password) { // 社交绑定,使用 code 授æƒç  export function socialBind(type, code, state) { return request({ - url: '/social-bind', + url: '/system/social-bind', method: 'post', data: { type, @@ -91,7 +91,7 @@ export function socialBind(type, code, state) { // å–æ¶ˆç¤¾äº¤ç»‘定 export function socialUnbind(type, unionId) { return request({ - url: '/social-unbind', + url: '/system/social-unbind', method: 'delete', data: { type, diff --git a/yudao-admin-ui/src/api/menu.js b/yudao-admin-ui/src/api/menu.js index 01fbbc9f41..48df3dd554 100644 --- a/yudao-admin-ui/src/api/menu.js +++ b/yudao-admin-ui/src/api/menu.js @@ -3,7 +3,7 @@ import request from '@/utils/request' // 获å–路由 export const getRouters = () => { return request({ - url: '/list-menus', + url: '/system/list-menus', method: 'get' }) } diff --git a/yudao-admin-ui/src/store/modules/dict.js b/yudao-admin-ui/src/store/modules/dict.js index 64c05a1941..6d3984d677 100644 --- a/yudao-admin-ui/src/store/modules/dict.js +++ b/yudao-admin-ui/src/store/modules/dict.js @@ -18,6 +18,10 @@ const mutations = { const actions = { loadDictDatas({ commit }) { listSimpleDictDatas().then(response => { + // 如果未加载到数æ®ï¼Œåˆ™ç›´æŽ¥è¿”回 + if (!response.data) { + return; + } // è®¾ç½®æ•°æ® const dictDataMap = {} response.data.forEach(dictData => { diff --git a/yudao-admin-ui/src/utils/request.js b/yudao-admin-ui/src/utils/request.js index 7b8c2901f6..ee2fee18a0 100644 --- a/yudao-admin-ui/src/utils/request.js +++ b/yudao-admin-ui/src/utils/request.js @@ -9,7 +9,7 @@ axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' // 创建axios实例 const service = axios.create({ // axios中请求é…置有baseURL选项,表示请求URL公共部分 - baseURL: process.env.VUE_APP_BASE_API + '/api/', // 此处的 /api/ 地å€ï¼ŒåŽŸå› æ˜¯åŽç«¯çš„基础路径为 /api/ + baseURL: process.env.VUE_APP_BASE_API + '/admin-api/', // 此处的 /admin-api/ 地å€ï¼ŒåŽŸå› æ˜¯åŽç«¯çš„基础路径为 /admin-api/ // è¶…æ—¶ timeout: 10000 }) diff --git a/更新日志.md b/更新日志.md index cf15885154..1810a2bd61 100644 --- a/更新日志.md +++ b/更新日志.md @@ -22,12 +22,12 @@ *ã€é‡æž„ã€‘å¤§æ¨¡å—æŒ‰ç…§å¤š Maven Module çš„æ–¹å¼æ‹†åˆ†ï¼Œæå‡å¯ç»´æŠ¤æ€§ï¼Œä¸ºåŽç»­é‡æž„ onemall æä¾›åŸºç¡€ *ã€é‡æž„】Spring Security 支æŒè¯»å–多ç§ç”¨æˆ·ç±»åž‹ï¼Œä»Žä¸åŒçš„æ•°æ®åº“表,从而实现å•项目æä¾›ç®¡ç†åŽå°ã€ç”¨æˆ· APP çš„ä¸åŒ RESTful API æŽ¥å£ - ### 🞠Bug Fixes *ã€ä¿®å¤ã€‘用户无æƒé™è®¿é—® 指定 API 时,未返回 FORBIDDEN ç»“æžœç  *ã€ä¿®å¤ã€‘定时任务刷新本地缓存时,无租户上线文,导致查询报错 *ã€ä¿®å¤ã€‘é…置中心åªåŠ è½½äº†åˆ é™¤çš„é…ç½® +*ã€ä¿®å¤ã€‘管ç†åŽå° UI 超时登录åŽï¼Œè¿”å›žç™»é™†ç•Œé¢æ—¶ï¼Œç”±äºŽæœªç™»é™†åŠ è½½ä¸åˆ°å­—典数æ®ï¼Œå¯¼è‡´æŠ¥é”™çš„问题 ### 🔨 Dependency Upgrades From 8d593849048caf6bbb2b602667f36f6ec684e466 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Wed, 2 Feb 2022 01:27:04 +0800 Subject: [PATCH 30/47] =?UTF-8?q?=E5=A4=9A=E6=A8=A1=E5=9D=97=E9=87=8D?= =?UTF-8?q?=E6=9E=84=2010=EF=BC=9A=E5=8E=BB=E9=99=A4=20Freemarker=20?= =?UTF-8?q?=E4=BE=9D=E8=B5=96=EF=BC=8C=E4=BF=AE=E6=94=B9=E5=AD=97=E5=85=B8?= =?UTF-8?q?=E7=9A=84=E5=89=8D=E7=BC=80=EF=BC=8C=E4=BB=8E=20sys=3D=E3=80=8B?= =?UTF-8?q?system=E3=80=81inf=3D=E3=80=8Binfra=20=E8=A7=81=E5=90=8D?= =?UTF-8?q?=E7=9F=A5=E6=84=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/ruoyi-vue-pro.sql | 2971 ++++++++++------- yudao-admin-server/pom.xml | 5 + .../src/main/resources/application.yaml | 7 +- .../src/api/{infra => tool}/dbDoc.js | 6 +- yudao-admin-ui/src/store/modules/dict.js | 2 +- yudao-admin-ui/src/utils/constants.js | 22 +- yudao-admin-ui/src/utils/dict.js | 78 +- .../src/views/bpm/form/formEditor.vue | 6 +- yudao-admin-ui/src/views/bpm/form/index.vue | 2 +- yudao-admin-ui/src/views/bpm/group/index.vue | 10 +- .../src/views/infra/apiErrorLog/index.vue | 12 +- .../src/views/infra/config/index.vue | 4 +- yudao-admin-ui/src/views/infra/job/index.vue | 12 +- yudao-admin-ui/src/views/infra/job/log.vue | 6 +- .../src/views/infra/redis/index.vue | 2 +- yudao-admin-ui/src/views/login.vue | 4 +- .../pay/app/components/aliPayChannelForm.vue | 2 +- .../pay/app/components/wechatChannelForm.vue | 2 +- yudao-admin-ui/src/views/pay/app/index.vue | 12 +- .../src/views/pay/merchant/index.vue | 10 +- yudao-admin-ui/src/views/pay/order/index.vue | 20 +- yudao-admin-ui/src/views/pay/refund/index.vue | 26 +- .../src/views/system/dept/index.vue | 10 +- yudao-admin-ui/src/views/system/dict/data.vue | 10 +- .../src/views/system/dict/index.vue | 10 +- .../src/views/system/errorCode/index.vue | 4 +- .../src/views/system/loginlog/index.vue | 4 +- .../src/views/system/menu/index.vue | 22 +- .../src/views/system/notice/index.vue | 14 +- .../src/views/system/operatelog/index.vue | 6 +- .../src/views/system/post/index.vue | 10 +- .../src/views/system/role/index.vue | 22 +- .../src/views/system/sms/smsChannel.vue | 18 +- .../src/views/system/sms/smsLog.vue | 25 +- .../src/views/system/sms/smsTemplate.vue | 18 +- .../src/views/system/tenant/index.vue | 10 +- .../src/views/system/user/index.vue | 14 +- .../views/system/user/profile/userSocial.vue | 6 +- yudao-admin-ui/src/views/tool/dbDoc/index.vue | 2 +- .../src/views/tool/testDemo/index.vue | 18 +- yudao-dependencies/pom.xml | 6 + .../module/bpm/enums/DictTypeConstants.java | 13 + .../BpmTaskAssignRuleServiceImpl.java | 4 +- .../module/infra/enums/DictTypeConstants.java | 14 +- .../module/pay/enums/DictTypeConstants.java | 28 +- .../admin/order/vo/PayOrderExcelVO.java | 6 +- .../admin/refund/vo/PayRefundExcelVO.java | 6 +- .../system/enums/DictTypeConstants.java | 13 +- .../yudao-module-tool-impl/pom.xml | 10 + .../controller/admin/doc/DbDocController.java | 18 +- 更新日志.md | 2 + 51 files changed, 2080 insertions(+), 1484 deletions(-) rename yudao-admin-ui/src/api/{infra => tool}/dbDoc.js (75%) create mode 100644 yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/DictTypeConstants.java rename {yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra => yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool}/controller/admin/doc/DbDocController.java (91%) diff --git a/sql/ruoyi-vue-pro.sql b/sql/ruoyi-vue-pro.sql index c74a93c009..d3d5d2a078 100644 --- a/sql/ruoyi-vue-pro.sql +++ b/sql/ruoyi-vue-pro.sql @@ -11,7 +11,7 @@ Target Server Version : 80026 File Encoding : 65001 - Date: 23/01/2022 01:39:15 + Date: 02/02/2022 01:23:59 */ SET NAMES utf8mb4; @@ -61,9 +61,9 @@ CREATE TABLE `bpm_oa_leave` ( `day` tinyint NOT NULL COMMENT '请å‡å¤©æ•°', `result` tinyint NOT NULL COMMENT '请å‡ç»“æžœ', `process_instance_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'æµç¨‹å®žä¾‹çš„ç¼–å·', - `creator` varchar(64) DEFAULT '' COMMENT '创建者', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) DEFAULT '' COMMENT '更新者', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', PRIMARY KEY (`id`) @@ -222,14 +222,14 @@ CREATE TABLE `bpm_process_instance_ext` ( `status` tinyint NOT NULL COMMENT 'æµç¨‹å®žä¾‹çš„状æ€', `result` tinyint NOT NULL COMMENT 'æµç¨‹å®žä¾‹çš„结果', `end_time` datetime DEFAULT NULL COMMENT 'ç»“æŸæ—¶é—´', - `form_variables` varchar(5000) DEFAULT NULL COMMENT '表å•值', + `form_variables` varchar(5000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '表å•值', `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=194 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作æµçš„æµç¨‹å®žä¾‹çš„æ‹“å±•'; +) ENGINE=InnoDB AUTO_INCREMENT=198 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作æµçš„æµç¨‹å®žä¾‹çš„æ‹“å±•'; -- ---------------------------- -- Records of bpm_process_instance_ext @@ -348,6 +348,9 @@ INSERT INTO `bpm_process_instance_ext` VALUES (190, 1, 'OA 请å‡', '2152467e-7b INSERT INTO `bpm_process_instance_ext` VALUES (191, 1, 'OA 请å‡', '7317cec6-7b9b-11ec-b5b7-acde48001122', 'oa_leave:5:004b710b-7b8a-11ec-8ef0-acde48001122', '2', 1, 1, NULL, '{\"day\":23}', '1', '2022-01-22 23:53:32', '1', '2022-01-22 23:53:33', b'0'); INSERT INTO `bpm_process_instance_ext` VALUES (192, 1, 'OA 请å‡', '7470a810-7b9b-11ec-b5b7-acde48001122', 'oa_leave:5:004b710b-7b8a-11ec-8ef0-acde48001122', '2', 2, 4, '2022-01-23 00:08:41', '{\"day\":23}', '1', '2022-01-22 23:53:35', '1', '2022-01-23 00:08:41', b'0'); INSERT INTO `bpm_process_instance_ext` VALUES (193, 1, 'OA 请å‡', '3ad174fb-7b9d-11ec-8404-acde48001122', 'oa_leave:5:004b710b-7b8a-11ec-8ef0-acde48001122', '2', 2, 4, '2022-01-23 00:07:03', '{\"day\":23}', '1', '2022-01-23 00:06:17', '1', '2022-01-23 00:07:03', b'0'); +INSERT INTO `bpm_process_instance_ext` VALUES (194, 1, 'eeee', 'b243fa82-7c06-11ec-9110-acde48001122', 'eee:17:f3aad03b-7ae5-11ec-a69c-a2380e71991a', '1', 1, 1, NULL, '{\"field121\":\"AAA\",\"field122\":[1]}', '1', '2022-01-23 12:41:14', '1', '2022-01-23 12:41:19', b'0'); +INSERT INTO `bpm_process_instance_ext` VALUES (195, 1, '测试多审批人', 'ecddb286-7c07-11ec-a41d-acde48001122', 'test_001:4:3dbe6714-76b1-11ec-9c66-a2380e71991a', '1', 2, 4, '2022-01-23 12:59:40', '{\"field121\":\"AAA\",\"field122\":[1]}', '1', '2022-01-23 12:50:02', '1', '2022-01-23 12:59:40', b'0'); +INSERT INTO `bpm_process_instance_ext` VALUES (197, 1, 'æ»”åš', '4f676a08-7c09-11ec-b8a1-acde48001122', 'test:21:c2cd44b0-79b0-11ec-b2b8-a2380e71991a', '1', 1, 1, NULL, '{\"field121\":\"aaa\",\"field122\":[1]}', '1', '2022-01-23 12:59:57', '1', '2022-01-23 12:59:57', b'0'); COMMIT; -- ---------------------------- @@ -526,9 +529,9 @@ CREATE TABLE `bpm_task_ext` ( `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '任务的åå­—', `task_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '任务的编å·', `result` tinyint NOT NULL COMMENT '任务的结果', - `comment` varchar(255) DEFAULT NULL COMMENT '审批建议', + `comment` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审批建议', `end_time` datetime DEFAULT NULL COMMENT 'ä»»åŠ¡çš„ç»“æŸæ—¶é—´', - `process_instance_id` varchar(64) NOT NULL COMMENT 'æµç¨‹å®žä¾‹çš„ç¼–å·', + `process_instance_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'æµç¨‹å®žä¾‹çš„ç¼–å·', `process_definition_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'æµç¨‹å®šä¹‰çš„ç¼–å·', `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', @@ -536,7 +539,7 @@ CREATE TABLE `bpm_task_ext` ( `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=205 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作æµçš„æµç¨‹ä»»åŠ¡çš„æ‹“å±•è¡¨'; +) ENGINE=InnoDB AUTO_INCREMENT=210 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作æµçš„æµç¨‹ä»»åŠ¡çš„æ‹“å±•è¡¨'; -- ---------------------------- -- Records of bpm_task_ext @@ -667,6 +670,10 @@ INSERT INTO `bpm_task_ext` VALUES (201, 1, '一级审批', '215cf4e5-7b9b-11ec-9 INSERT INTO `bpm_task_ext` VALUES (202, 1, '一级审批', '73211d9d-7b9b-11ec-b5b7-acde48001122', 1, NULL, NULL, '7317cec6-7b9b-11ec-b5b7-acde48001122', 'oa_leave:5:004b710b-7b8a-11ec-8ef0-acde48001122', '1', '2022-01-22 23:53:32', '1', '2022-01-22 23:53:32', b'0'); INSERT INTO `bpm_task_ext` VALUES (203, 1, '一级审批', '74736737-7b9b-11ec-b5b7-acde48001122', 4, NULL, '2022-01-23 00:08:41', '7470a810-7b9b-11ec-b5b7-acde48001122', 'oa_leave:5:004b710b-7b8a-11ec-8ef0-acde48001122', '1', '2022-01-22 23:53:35', '1', '2022-01-23 00:08:41', b'0'); INSERT INTO `bpm_task_ext` VALUES (204, 1, '一级审批', '3adac3d2-7b9d-11ec-8404-acde48001122', 4, NULL, '2022-01-23 00:07:03', '3ad174fb-7b9d-11ec-8404-acde48001122', 'oa_leave:5:004b710b-7b8a-11ec-8ef0-acde48001122', '1', '2022-01-23 00:06:17', '1', '2022-01-23 00:07:03', b'0'); +INSERT INTO `bpm_task_ext` VALUES (205, 1, '申请', 'b25363db-7c06-11ec-9110-acde48001122', 1, NULL, NULL, 'b243fa82-7c06-11ec-9110-acde48001122', 'eee:17:f3aad03b-7ae5-11ec-a69c-a2380e71991a', '1', '2022-01-23 12:41:14', '1', '2022-01-23 12:41:19', b'0'); +INSERT INTO `bpm_task_ext` VALUES (206, 1, '1.2', 'ee7cbc97-7c07-11ec-a41d-acde48001122', 4, NULL, '2022-01-23 12:59:40', 'ecddb286-7c07-11ec-a41d-acde48001122', 'test_001:4:3dbe6714-76b1-11ec-9c66-a2380e71991a', '1', '2022-01-23 12:50:05', '1', '2022-01-23 12:59:40', b'0'); +INSERT INTO `bpm_task_ext` VALUES (207, 1, '1.1', 'ee67adf1-7c07-11ec-a41d-acde48001122', 4, NULL, '2022-01-23 12:59:40', 'ecddb286-7c07-11ec-a41d-acde48001122', 'test_001:4:3dbe6714-76b1-11ec-9c66-a2380e71991a', '1', '2022-01-23 12:50:05', '1', '2022-01-23 12:59:40', b'0'); +INSERT INTO `bpm_task_ext` VALUES (209, 1, '任务一', '4f6fce81-7c09-11ec-b8a1-acde48001122', 1, NULL, NULL, '4f676a08-7c09-11ec-b8a1-acde48001122', 'test:21:c2cd44b0-79b0-11ec-b2b8-a2380e71991a', '1', '2022-01-23 12:59:57', '1', '2022-01-23 12:59:57', b'0'); COMMIT; -- ---------------------------- @@ -696,125 +703,541 @@ INSERT INTO `bpm_user_group` VALUES (110, '测试组', '哈哈哈哈', '[1]', 0, COMMIT; -- ---------------------------- --- Table structure for inf_api_access_log +-- Table structure for infra_api_access_log -- ---------------------------- -DROP TABLE IF EXISTS `inf_api_access_log`; -CREATE TABLE `inf_api_access_log` ( +DROP TABLE IF EXISTS `infra_api_access_log`; +CREATE TABLE `infra_api_access_log` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '日志主键', - `trace_id` varchar(64) NOT NULL DEFAULT '' COMMENT '链路追踪编å·', + `trace_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '链路追踪编å·', `user_id` bigint NOT NULL DEFAULT '0' COMMENT '用户编å·', `user_type` tinyint NOT NULL DEFAULT '0' COMMENT '用户类型', - `application_name` varchar(50) NOT NULL COMMENT '应用å', - `request_method` varchar(16) NOT NULL DEFAULT '' COMMENT '请求方法å', - `request_url` varchar(255) NOT NULL DEFAULT '' COMMENT '请求地å€', - `request_params` varchar(8000) NOT NULL DEFAULT '' COMMENT 'è¯·æ±‚å‚æ•°', - `user_ip` varchar(50) NOT NULL COMMENT '用户 IP', - `user_agent` varchar(512) NOT NULL COMMENT 'æµè§ˆå™¨ UA', + `application_name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '应用å', + `request_method` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '请求方法å', + `request_url` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '请求地å€', + `request_params` varchar(8000) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'è¯·æ±‚å‚æ•°', + `user_ip` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户 IP', + `user_agent` varchar(512) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'æµè§ˆå™¨ UA', `begin_time` datetime NOT NULL COMMENT '开始请求时间', `end_time` datetime NOT NULL COMMENT '结æŸè¯·æ±‚æ—¶é—´', `duration` int NOT NULL COMMENT '执行时长', `result_code` int NOT NULL DEFAULT '0' COMMENT '结果ç ', - `result_msg` varchar(512) DEFAULT '' COMMENT '结果æç¤º', - `creator` varchar(64) DEFAULT '' COMMENT '创建者', + `result_msg` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '结果æç¤º', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) DEFAULT '' COMMENT '更新者', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编å·', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=22788 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='API 访问日志表'; +) ENGINE=InnoDB AUTO_INCREMENT=23199 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='API 访问日志表'; -- ---------------------------- --- Records of inf_api_access_log +-- Records of infra_api_access_log -- ---------------------------- BEGIN; +INSERT INTO `infra_api_access_log` VALUES (22788, '', 0, 0, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 01:42:34', '2022-01-23 01:42:35', 47, 0, '', NULL, '2022-01-23 01:42:35', NULL, '2022-01-23 01:42:35', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22789, '', 0, 0, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 01:42:34', '2022-01-23 01:42:35', 47, 0, '', NULL, '2022-01-23 01:42:35', NULL, '2022-01-23 01:42:35', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22790, '', 0, 0, 'yudao-admin-server', 'POST', '/api/logout', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 01:42:35', '2022-01-23 01:42:35', 9, 0, '', NULL, '2022-01-23 01:42:35', NULL, '2022-01-23 01:42:35', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22791, '', 0, 0, 'yudao-admin-server', 'POST', '/api/logout', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 01:42:36', '2022-01-23 01:42:36', 2, 0, '', NULL, '2022-01-23 01:42:36', NULL, '2022-01-23 01:42:36', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22792, '', 0, 0, 'yudao-admin-server', 'GET', '/api/system/captcha/get-image', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 01:42:35', '2022-01-23 01:42:37', 2051, 0, '', NULL, '2022-01-23 01:42:37', NULL, '2022-01-23 01:42:37', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22793, '', 0, 0, 'yudao-admin-server', 'GET', '/api/system/captcha/get-image', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 01:42:36', '2022-01-23 01:42:37', 718, 0, '', NULL, '2022-01-23 01:42:37', NULL, '2022-01-23 01:42:37', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22794, '', 0, 0, 'yudao-admin-server', 'GET', '/api/system/tenant/get-id-by-name', '{\"query\":{\"name\":\"èŠ‹é“æºç \"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 01:42:39', '2022-01-23 01:42:39', 45, 0, '', NULL, '2022-01-23 01:42:39', NULL, '2022-01-23 01:42:39', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22795, '', 0, 0, 'yudao-admin-server', 'POST', '/api/login', '{\"query\":{},\"body\":\"{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"admin123\\\",\\\"code\\\":\\\"dc6xv\\\",\\\"uuid\\\":\\\"4078d0241f0343faaea0d8393dbe639d\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 01:42:39', '2022-01-23 01:42:39', 399, 0, '', NULL, '2022-01-23 01:42:39', NULL, '2022-01-23 01:42:39', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22796, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 01:42:39', '2022-01-23 01:42:39', 47, 0, '', NULL, '2022-01-23 01:42:39', NULL, '2022-01-23 01:42:39', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22797, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 01:42:39', '2022-01-23 01:42:39', 50, 0, '', NULL, '2022-01-23 01:42:39', NULL, '2022-01-23 01:42:39', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22798, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 01:42:39', '2022-01-23 01:42:39', 12, 0, '', NULL, '2022-01-23 01:42:39', NULL, '2022-01-23 01:42:39', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22799, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 01:42:40', '2022-01-23 01:42:40', 28, 0, '', NULL, '2022-01-23 01:42:40', NULL, '2022-01-23 01:42:40', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (22800, '', 1, 2, 'yudao-admin-server', 'GET', '/api/tool/codegen/table/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 01:42:42', '2022-01-23 01:42:42', 89, 0, '', NULL, '2022-01-23 01:42:42', NULL, '2022-01-23 01:42:42', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22801, '', 1, 2, 'yudao-admin-server', 'GET', '/api/tool/test-demo/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 01:42:43', '2022-01-23 01:42:43', 59, 0, '', NULL, '2022-01-23 01:42:43', NULL, '2022-01-23 01:42:43', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22802, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/form/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 01:42:46', '2022-01-23 01:42:46', 49, 0, '', NULL, '2022-01-23 01:42:46', NULL, '2022-01-23 01:42:46', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22803, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/oa/leave/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 01:42:47', '2022-01-23 01:42:47', 54, 0, '', NULL, '2022-01-23 01:42:47', NULL, '2022-01-23 01:42:47', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22804, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/user/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 01:42:48', '2022-01-23 01:42:48', 50, 0, '', NULL, '2022-01-23 01:42:48', NULL, '2022-01-23 01:42:48', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22805, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/user-group/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 01:42:48', '2022-01-23 01:42:48', 59, 0, '', NULL, '2022-01-23 01:42:48', NULL, '2022-01-23 01:42:48', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22806, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/form/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 01:42:48', '2022-01-23 01:42:48', 23, 0, '', NULL, '2022-01-23 01:42:48', NULL, '2022-01-23 01:42:48', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22807, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/oa/leave/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 01:42:49', '2022-01-23 01:42:49', 31, 0, '', NULL, '2022-01-23 01:42:49', NULL, '2022-01-23 01:42:49', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22808, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/user/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 01:42:51', '2022-01-23 01:42:51', 57, 0, '', NULL, '2022-01-23 01:42:51', NULL, '2022-01-23 01:42:51', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22809, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/task/list-by-process-instance-id', '{\"query\":{\"processInstanceId\":\"3ad174fb-7b9d-11ec-8404-acde48001122\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 01:42:51', '2022-01-23 01:42:51', 188, 0, '', NULL, '2022-01-23 01:42:51', NULL, '2022-01-23 01:42:51', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22810, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/process-instance/get', '{\"query\":{\"id\":\"3ad174fb-7b9d-11ec-8404-acde48001122\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 01:42:51', '2022-01-23 01:42:51', 215, 0, '', NULL, '2022-01-23 01:42:51', NULL, '2022-01-23 01:42:51', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22811, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/process-definition/get-bpmn-xml', '{\"query\":{\"id\":\"oa_leave:5:004b710b-7b8a-11ec-8ef0-acde48001122\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 01:42:51', '2022-01-23 01:42:51', 20, 0, '', NULL, '2022-01-23 01:42:51', NULL, '2022-01-23 01:42:51', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22812, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/activity/list', '{\"query\":{\"processInstanceId\":\"3ad174fb-7b9d-11ec-8404-acde48001122\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 01:42:51', '2022-01-23 01:42:51', 40, 0, '', NULL, '2022-01-23 01:42:51', NULL, '2022-01-23 01:42:51', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22813, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/user-group/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 01:42:57', '2022-01-23 01:42:57', 26, 0, '', NULL, '2022-01-23 01:42:57', NULL, '2022-01-23 01:42:57', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22814, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/user/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 01:42:57', '2022-01-23 01:42:57', 32, 0, '', NULL, '2022-01-23 01:42:57', NULL, '2022-01-23 01:42:57', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22815, '', 0, 0, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:21:27', '2022-01-23 03:21:27', 135, 0, '', NULL, '2022-01-23 03:21:27', NULL, '2022-01-23 03:21:27', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22816, '', 0, 0, 'yudao-admin-server', 'POST', '/api/logout', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:21:27', '2022-01-23 03:21:27', 12, 0, '', NULL, '2022-01-23 03:21:27', NULL, '2022-01-23 03:21:27', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22817, '', 0, 0, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:21:27', '2022-01-23 03:21:27', 135, 0, '', NULL, '2022-01-23 03:21:27', NULL, '2022-01-23 03:21:27', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22818, '', 0, 0, 'yudao-admin-server', 'POST', '/api/logout', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:21:28', '2022-01-23 03:21:28', 3, 0, '', NULL, '2022-01-23 03:21:28', NULL, '2022-01-23 03:21:28', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22819, '', 0, 0, 'yudao-admin-server', 'GET', '/api/system/tenant/get-id-by-name', '{\"query\":{\"name\":\"èŠ‹é“æºç \"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:21:30', '2022-01-23 03:21:30', 177, 0, '', NULL, '2022-01-23 03:21:30', NULL, '2022-01-23 03:21:30', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22820, '', 0, 0, 'yudao-admin-server', 'GET', '/api/system/captcha/get-image', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:21:28', '2022-01-23 03:21:30', 1565, 0, '', NULL, '2022-01-23 03:21:30', NULL, '2022-01-23 03:21:30', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22821, '', 0, 0, 'yudao-admin-server', 'GET', '/api/system/captcha/get-image', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:21:27', '2022-01-23 03:21:30', 2946, 0, '', NULL, '2022-01-23 03:21:30', NULL, '2022-01-23 03:21:30', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22822, '', 0, 0, 'yudao-admin-server', 'GET', '/api/system/tenant/get-id-by-name', '{\"query\":{\"name\":\"èŠ‹é“æºç \"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:21:32', '2022-01-23 03:21:32', 24, 0, '', NULL, '2022-01-23 03:21:32', NULL, '2022-01-23 03:21:32', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22823, '', 0, 0, 'yudao-admin-server', 'POST', '/api/login', '{\"query\":{},\"body\":\"{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"admin123\\\",\\\"code\\\":\\\"1\\\",\\\"uuid\\\":\\\"29afe343dd6e4c45bad958997ccb8027\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:21:32', '2022-01-23 03:21:32', 412, 0, '', NULL, '2022-01-23 03:21:32', NULL, '2022-01-23 03:21:32', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22824, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:21:32', '2022-01-23 03:21:32', 52, 0, '', NULL, '2022-01-23 03:21:32', NULL, '2022-01-23 03:21:32', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22825, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:21:32', '2022-01-23 03:21:32', 60, 0, '', NULL, '2022-01-23 03:21:32', NULL, '2022-01-23 03:21:32', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22826, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:21:32', '2022-01-23 03:21:32', 12, 0, '', NULL, '2022-01-23 03:21:32', NULL, '2022-01-23 03:21:32', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22827, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:21:33', '2022-01-23 03:21:33', 30, 0, '', NULL, '2022-01-23 03:21:33', NULL, '2022-01-23 03:21:33', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (22828, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/form/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:21:43', '2022-01-23 03:21:43', 89, 0, '', NULL, '2022-01-23 03:21:43', NULL, '2022-01-23 03:21:43', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22829, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/form/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:21:44', '2022-01-23 03:21:44', 27, 0, '', NULL, '2022-01-23 03:21:44', NULL, '2022-01-23 03:21:44', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22830, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/model/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:21:44', '2022-01-23 03:21:44', 148, 0, '', NULL, '2022-01-23 03:21:44', NULL, '2022-01-23 03:21:44', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22831, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/model/get', '{\"query\":{\"id\":\"02b756a8-79af-11ec-abb0-a2380e71991a\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:21:46', '2022-01-23 03:21:46', 45, 0, '', NULL, '2022-01-23 03:21:46', NULL, '2022-01-23 03:21:46', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22832, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:23:49', '2022-01-23 03:23:49', 30, 0, '', NULL, '2022-01-23 03:23:49', NULL, '2022-01-23 03:23:49', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22833, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:23:49', '2022-01-23 03:23:49', 55, 0, '', NULL, '2022-01-23 03:23:49', NULL, '2022-01-23 03:23:49', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22834, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:23:49', '2022-01-23 03:23:49', 9, 0, '', NULL, '2022-01-23 03:23:49', NULL, '2022-01-23 03:23:49', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22835, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:23:49', '2022-01-23 03:23:49', 19, 0, '', NULL, '2022-01-23 03:23:49', NULL, '2022-01-23 03:23:49', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (22836, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/model/get', '{\"query\":{\"id\":\"02b756a8-79af-11ec-abb0-a2380e71991a\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:23:49', '2022-01-23 03:23:49', 61, 0, '', NULL, '2022-01-23 03:23:49', NULL, '2022-01-23 03:23:49', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22837, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:24:07', '2022-01-23 03:24:07', 44, 0, '', NULL, '2022-01-23 03:24:07', NULL, '2022-01-23 03:24:07', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22838, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:24:07', '2022-01-23 03:24:07', 59, 0, '', NULL, '2022-01-23 03:24:07', NULL, '2022-01-23 03:24:07', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22839, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:24:07', '2022-01-23 03:24:07', 9, 0, '', NULL, '2022-01-23 03:24:07', NULL, '2022-01-23 03:24:07', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22840, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:24:07', '2022-01-23 03:24:07', 16, 0, '', NULL, '2022-01-23 03:24:07', NULL, '2022-01-23 03:24:07', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (22841, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/model/get', '{\"query\":{\"id\":\"02b756a8-79af-11ec-abb0-a2380e71991a\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:24:07', '2022-01-23 03:24:07', 88, 0, '', NULL, '2022-01-23 03:24:07', NULL, '2022-01-23 03:24:07', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22842, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:26:24', '2022-01-23 03:26:24', 38, 0, '', NULL, '2022-01-23 03:26:24', NULL, '2022-01-23 03:26:24', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22843, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:26:24', '2022-01-23 03:26:24', 65, 0, '', NULL, '2022-01-23 03:26:24', NULL, '2022-01-23 03:26:24', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22844, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:26:24', '2022-01-23 03:26:24', 11, 0, '', NULL, '2022-01-23 03:26:24', NULL, '2022-01-23 03:26:24', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22845, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:26:26', '2022-01-23 03:26:26', 18, 0, '', NULL, '2022-01-23 03:26:26', NULL, '2022-01-23 03:26:26', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (22846, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/form/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:26:26', '2022-01-23 03:26:26', 43, 0, '', NULL, '2022-01-23 03:26:26', NULL, '2022-01-23 03:26:26', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22847, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:26:53', '2022-01-23 03:26:53', 27, 0, '', NULL, '2022-01-23 03:26:53', NULL, '2022-01-23 03:26:53', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22848, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:26:53', '2022-01-23 03:26:53', 44, 0, '', NULL, '2022-01-23 03:26:53', NULL, '2022-01-23 03:26:53', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22849, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:26:53', '2022-01-23 03:26:53', 8, 0, '', NULL, '2022-01-23 03:26:53', NULL, '2022-01-23 03:26:53', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22850, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:26:53', '2022-01-23 03:26:53', 15, 0, '', NULL, '2022-01-23 03:26:53', NULL, '2022-01-23 03:26:53', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (22851, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/model/get', '{\"query\":{\"id\":\"02b756a8-79af-11ec-abb0-a2380e71991a\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:26:53', '2022-01-23 03:26:53', 62, 0, '', NULL, '2022-01-23 03:26:53', NULL, '2022-01-23 03:26:53', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22852, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:26:59', '2022-01-23 03:26:59', 18, 0, '', NULL, '2022-01-23 03:26:59', NULL, '2022-01-23 03:26:59', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22853, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:26:59', '2022-01-23 03:26:59', 28, 0, '', NULL, '2022-01-23 03:26:59', NULL, '2022-01-23 03:26:59', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22854, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:26:59', '2022-01-23 03:26:59', 5, 0, '', NULL, '2022-01-23 03:26:59', NULL, '2022-01-23 03:26:59', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22855, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:27:00', '2022-01-23 03:27:00', 17, 0, '', NULL, '2022-01-23 03:27:00', NULL, '2022-01-23 03:27:00', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (22856, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/form/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:27:00', '2022-01-23 03:27:00', 27, 0, '', NULL, '2022-01-23 03:27:00', NULL, '2022-01-23 03:27:00', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22857, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:27:03', '2022-01-23 03:27:03', 30, 0, '', NULL, '2022-01-23 03:27:03', NULL, '2022-01-23 03:27:03', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22858, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:27:03', '2022-01-23 03:27:03', 44, 0, '', NULL, '2022-01-23 03:27:03', NULL, '2022-01-23 03:27:03', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22859, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:27:03', '2022-01-23 03:27:03', 8, 0, '', NULL, '2022-01-23 03:27:03', NULL, '2022-01-23 03:27:03', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22860, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:27:03', '2022-01-23 03:27:03', 16, 0, '', NULL, '2022-01-23 03:27:03', NULL, '2022-01-23 03:27:03', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (22861, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/model/get', '{\"query\":{\"id\":\"02b756a8-79af-11ec-abb0-a2380e71991a\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:27:03', '2022-01-23 03:27:04', 58, 0, '', NULL, '2022-01-23 03:27:04', NULL, '2022-01-23 03:27:04', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22862, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:27:42', '2022-01-23 03:27:42', 28, 0, '', NULL, '2022-01-23 03:27:42', NULL, '2022-01-23 03:27:42', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22863, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:27:42', '2022-01-23 03:27:42', 44, 0, '', NULL, '2022-01-23 03:27:42', NULL, '2022-01-23 03:27:42', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22864, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:27:42', '2022-01-23 03:27:42', 6, 0, '', NULL, '2022-01-23 03:27:42', NULL, '2022-01-23 03:27:42', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22865, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:27:43', '2022-01-23 03:27:43', 12, 0, '', NULL, '2022-01-23 03:27:43', NULL, '2022-01-23 03:27:43', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (22866, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/model/get', '{\"query\":{\"id\":\"02b756a8-79af-11ec-abb0-a2380e71991a\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:27:43', '2022-01-23 03:27:43', 30, 0, '', NULL, '2022-01-23 03:27:43', NULL, '2022-01-23 03:27:43', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22867, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:27:49', '2022-01-23 03:27:49', 16, 0, '', NULL, '2022-01-23 03:27:49', NULL, '2022-01-23 03:27:49', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22868, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:27:49', '2022-01-23 03:27:49', 25, 0, '', NULL, '2022-01-23 03:27:49', NULL, '2022-01-23 03:27:49', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22869, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:27:49', '2022-01-23 03:27:49', 5, 0, '', NULL, '2022-01-23 03:27:49', NULL, '2022-01-23 03:27:49', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22870, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:27:50', '2022-01-23 03:27:50', 15, 0, '', NULL, '2022-01-23 03:27:50', NULL, '2022-01-23 03:27:50', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (22871, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/form/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:27:50', '2022-01-23 03:27:50', 29, 0, '', NULL, '2022-01-23 03:27:50', NULL, '2022-01-23 03:27:50', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22872, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:29:58', '2022-01-23 03:29:58', 28, 0, '', NULL, '2022-01-23 03:29:58', NULL, '2022-01-23 03:29:58', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22873, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:29:58', '2022-01-23 03:29:58', 43, 0, '', NULL, '2022-01-23 03:29:58', NULL, '2022-01-23 03:29:58', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22874, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:29:58', '2022-01-23 03:29:58', 6, 0, '', NULL, '2022-01-23 03:29:58', NULL, '2022-01-23 03:29:58', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22875, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:29:58', '2022-01-23 03:29:58', 15, 0, '', NULL, '2022-01-23 03:29:58', NULL, '2022-01-23 03:29:58', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (22876, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/model/get', '{\"query\":{\"id\":\"02b756a8-79af-11ec-abb0-a2380e71991a\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:29:58', '2022-01-23 03:29:58', 45, 0, '', NULL, '2022-01-23 03:29:58', NULL, '2022-01-23 03:29:58', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22877, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:30:02', '2022-01-23 03:30:02', 21, 0, '', NULL, '2022-01-23 03:30:02', NULL, '2022-01-23 03:30:02', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22878, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:30:02', '2022-01-23 03:30:02', 32, 0, '', NULL, '2022-01-23 03:30:02', NULL, '2022-01-23 03:30:02', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22879, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:30:02', '2022-01-23 03:30:02', 5, 0, '', NULL, '2022-01-23 03:30:02', NULL, '2022-01-23 03:30:02', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22880, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:30:02', '2022-01-23 03:30:02', 14, 0, '', NULL, '2022-01-23 03:30:02', NULL, '2022-01-23 03:30:02', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (22881, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/form/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:30:02', '2022-01-23 03:30:03', 31, 0, '', NULL, '2022-01-23 03:30:03', NULL, '2022-01-23 03:30:03', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22882, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:30:25', '2022-01-23 03:30:25', 32, 0, '', NULL, '2022-01-23 03:30:25', NULL, '2022-01-23 03:30:25', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22883, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:30:25', '2022-01-23 03:30:25', 46, 0, '', NULL, '2022-01-23 03:30:25', NULL, '2022-01-23 03:30:25', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22884, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:30:25', '2022-01-23 03:30:25', 10, 0, '', NULL, '2022-01-23 03:30:25', NULL, '2022-01-23 03:30:25', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22885, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:30:25', '2022-01-23 03:30:25', 19, 0, '', NULL, '2022-01-23 03:30:25', NULL, '2022-01-23 03:30:25', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (22886, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/model/get', '{\"query\":{\"id\":\"02b756a8-79af-11ec-abb0-a2380e71991a\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:30:25', '2022-01-23 03:30:25', 62, 0, '', NULL, '2022-01-23 03:30:25', NULL, '2022-01-23 03:30:25', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22887, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/form/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:32:18', '2022-01-23 03:32:18', 64, 0, '', NULL, '2022-01-23 03:32:18', NULL, '2022-01-23 03:32:18', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22888, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/model/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:32:18', '2022-01-23 03:32:19', 155, 0, '', NULL, '2022-01-23 03:32:19', NULL, '2022-01-23 03:32:19', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22889, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/process-definition/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\",\"key\":\"eee\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:32:49', '2022-01-23 03:32:49', 148, 0, '', NULL, '2022-01-23 03:32:49', NULL, '2022-01-23 03:32:49', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22890, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/role/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:32:50', '2022-01-23 03:32:51', 36, 0, '', NULL, '2022-01-23 03:32:51', NULL, '2022-01-23 03:32:51', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22891, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/task-assign-rule/list', '{\"query\":{\"processDefinitionId\":\"eee:17:f3aad03b-7ae5-11ec-a69c-a2380e71991a\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:32:50', '2022-01-23 03:32:51', 63, 0, '', NULL, '2022-01-23 03:32:51', NULL, '2022-01-23 03:32:51', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22892, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dept/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:32:50', '2022-01-23 03:32:51', 58, 0, '', NULL, '2022-01-23 03:32:51', NULL, '2022-01-23 03:32:51', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22893, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/post/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:32:50', '2022-01-23 03:32:51', 60, 0, '', NULL, '2022-01-23 03:32:51', NULL, '2022-01-23 03:32:51', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22894, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/user-group/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:32:51', '2022-01-23 03:32:51', 65, 0, '', NULL, '2022-01-23 03:32:51', NULL, '2022-01-23 03:32:51', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22895, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/user/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:32:50', '2022-01-23 03:32:51', 82, 0, '', NULL, '2022-01-23 03:32:51', NULL, '2022-01-23 03:32:51', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22896, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/form/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:32:54', '2022-01-23 03:32:54', 13, 0, '', NULL, '2022-01-23 03:32:54', NULL, '2022-01-23 03:32:54', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22897, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/model/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:32:54', '2022-01-23 03:32:54', 98, 0, '', NULL, '2022-01-23 03:32:54', NULL, '2022-01-23 03:32:54', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22898, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/role/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:32:56', '2022-01-23 03:32:56', 27, 0, '', NULL, '2022-01-23 03:32:56', NULL, '2022-01-23 03:32:56', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22899, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/post/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:32:56', '2022-01-23 03:32:56', 28, 0, '', NULL, '2022-01-23 03:32:56', NULL, '2022-01-23 03:32:56', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22900, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dept/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:32:56', '2022-01-23 03:32:56', 47, 0, '', NULL, '2022-01-23 03:32:56', NULL, '2022-01-23 03:32:56', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22901, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/user-group/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:32:56', '2022-01-23 03:32:56', 23, 0, '', NULL, '2022-01-23 03:32:56', NULL, '2022-01-23 03:32:56', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22902, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/user/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:32:56', '2022-01-23 03:32:56', 48, 0, '', NULL, '2022-01-23 03:32:56', NULL, '2022-01-23 03:32:56', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22903, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/task-assign-rule/list', '{\"query\":{\"modelId\":\"02b756a8-79af-11ec-abb0-a2380e71991a\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:32:56', '2022-01-23 03:32:56', 217, 0, '', NULL, '2022-01-23 03:32:56', NULL, '2022-01-23 03:32:56', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22904, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:33:55', '2022-01-23 03:33:55', 21, 0, '', NULL, '2022-01-23 03:33:55', NULL, '2022-01-23 03:33:55', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22905, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:33:55', '2022-01-23 03:33:55', 40, 0, '', NULL, '2022-01-23 03:33:55', NULL, '2022-01-23 03:33:55', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22906, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:33:55', '2022-01-23 03:33:55', 5, 0, '', NULL, '2022-01-23 03:33:55', NULL, '2022-01-23 03:33:55', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22907, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:33:55', '2022-01-23 03:33:55', 14, 0, '', NULL, '2022-01-23 03:33:55', NULL, '2022-01-23 03:33:55', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (22908, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/model/get', '{\"query\":{\"id\":\"02b756a8-79af-11ec-abb0-a2380e71991a\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:33:56', '2022-01-23 03:33:56', 43, 0, '', NULL, '2022-01-23 03:33:56', NULL, '2022-01-23 03:33:56', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22909, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:34:23', '2022-01-23 03:34:23', 19, 0, '', NULL, '2022-01-23 03:34:23', NULL, '2022-01-23 03:34:23', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22910, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:34:23', '2022-01-23 03:34:23', 30, 0, '', NULL, '2022-01-23 03:34:23', NULL, '2022-01-23 03:34:23', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22911, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:34:23', '2022-01-23 03:34:23', 7, 0, '', NULL, '2022-01-23 03:34:23', NULL, '2022-01-23 03:34:23', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22912, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:34:23', '2022-01-23 03:34:23', 18, 0, '', NULL, '2022-01-23 03:34:23', NULL, '2022-01-23 03:34:23', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (22913, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/form/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:34:23', '2022-01-23 03:34:23', 18, 0, '', NULL, '2022-01-23 03:34:23', NULL, '2022-01-23 03:34:23', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22914, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/model/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:34:23', '2022-01-23 03:34:23', 101, 0, '', NULL, '2022-01-23 03:34:23', NULL, '2022-01-23 03:34:23', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22915, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:34:38', '2022-01-23 03:34:38', 24, 0, '', NULL, '2022-01-23 03:34:38', NULL, '2022-01-23 03:34:38', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22916, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:34:38', '2022-01-23 03:34:38', 39, 0, '', NULL, '2022-01-23 03:34:38', NULL, '2022-01-23 03:34:38', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22917, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:34:38', '2022-01-23 03:34:38', 6, 0, '', NULL, '2022-01-23 03:34:38', NULL, '2022-01-23 03:34:38', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22918, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:34:39', '2022-01-23 03:34:39', 19, 0, '', NULL, '2022-01-23 03:34:39', NULL, '2022-01-23 03:34:39', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (22919, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/model/get', '{\"query\":{\"id\":\"02b756a8-79af-11ec-abb0-a2380e71991a\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:34:39', '2022-01-23 03:34:39', 48, 0, '', NULL, '2022-01-23 03:34:39', NULL, '2022-01-23 03:34:39', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22920, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:44', '2022-01-23 03:37:44', 28, 0, '', NULL, '2022-01-23 03:37:44', NULL, '2022-01-23 03:37:44', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22921, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:44', '2022-01-23 03:37:44', 46, 0, '', NULL, '2022-01-23 03:37:44', NULL, '2022-01-23 03:37:44', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22922, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:44', '2022-01-23 03:37:44', 22, 0, '', NULL, '2022-01-23 03:37:44', NULL, '2022-01-23 03:37:44', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22923, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:44', '2022-01-23 03:37:44', 5, 0, '', NULL, '2022-01-23 03:37:44', NULL, '2022-01-23 03:37:44', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22924, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:44', '2022-01-23 03:37:44', 31, 0, '', NULL, '2022-01-23 03:37:44', NULL, '2022-01-23 03:37:44', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22925, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:44', '2022-01-23 03:37:44', 6, 0, '', NULL, '2022-01-23 03:37:44', NULL, '2022-01-23 03:37:44', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22926, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:44', '2022-01-23 03:37:44', 26, 0, '', NULL, '2022-01-23 03:37:44', NULL, '2022-01-23 03:37:44', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22927, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:44', '2022-01-23 03:37:44', 36, 0, '', NULL, '2022-01-23 03:37:44', NULL, '2022-01-23 03:37:44', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22928, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:45', '2022-01-23 03:37:45', 17, 0, '', NULL, '2022-01-23 03:37:45', NULL, '2022-01-23 03:37:45', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (22929, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/form/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:45', '2022-01-23 03:37:45', 16, 0, '', NULL, '2022-01-23 03:37:45', NULL, '2022-01-23 03:37:45', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22930, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:45', '2022-01-23 03:37:45', 14, 0, '', NULL, '2022-01-23 03:37:45', NULL, '2022-01-23 03:37:45', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (22931, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/model/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:45', '2022-01-23 03:37:45', 125, 0, '', NULL, '2022-01-23 03:37:45', NULL, '2022-01-23 03:37:45', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22932, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/form/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:45', '2022-01-23 03:37:45', 20, 0, '', NULL, '2022-01-23 03:37:45', NULL, '2022-01-23 03:37:45', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22933, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/model/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:45', '2022-01-23 03:37:45', 141, 0, '', NULL, '2022-01-23 03:37:45', NULL, '2022-01-23 03:37:45', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22934, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:46', '2022-01-23 03:37:46', 18, 0, '', NULL, '2022-01-23 03:37:46', NULL, '2022-01-23 03:37:46', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22935, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:46', '2022-01-23 03:37:46', 35, 0, '', NULL, '2022-01-23 03:37:46', NULL, '2022-01-23 03:37:46', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22936, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:46', '2022-01-23 03:37:46', 5, 0, '', NULL, '2022-01-23 03:37:46', NULL, '2022-01-23 03:37:46', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22937, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:46', '2022-01-23 03:37:46', 4, 0, '', NULL, '2022-01-23 03:37:46', NULL, '2022-01-23 03:37:46', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22938, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:47', '2022-01-23 03:37:47', 11, 0, '', NULL, '2022-01-23 03:37:47', NULL, '2022-01-23 03:37:47', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (22939, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/task/todo-page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:47', '2022-01-23 03:37:47', 121, 0, '', NULL, '2022-01-23 03:37:47', NULL, '2022-01-23 03:37:47', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22940, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:47', '2022-01-23 03:37:47', 19, 0, '', NULL, '2022-01-23 03:37:47', NULL, '2022-01-23 03:37:47', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (22941, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/task/todo-page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:47', '2022-01-23 03:37:47', 64, 0, '', NULL, '2022-01-23 03:37:47', NULL, '2022-01-23 03:37:47', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22942, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:52', '2022-01-23 03:37:52', 23, 0, '', NULL, '2022-01-23 03:37:52', NULL, '2022-01-23 03:37:52', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22943, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:52', '2022-01-23 03:37:52', 34, 0, '', NULL, '2022-01-23 03:37:52', NULL, '2022-01-23 03:37:52', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22944, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:52', '2022-01-23 03:37:52', 5, 0, '', NULL, '2022-01-23 03:37:52', NULL, '2022-01-23 03:37:52', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22945, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:52', '2022-01-23 03:37:52', 26, 0, '', NULL, '2022-01-23 03:37:52', NULL, '2022-01-23 03:37:52', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22946, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:52', '2022-01-23 03:37:52', 39, 0, '', NULL, '2022-01-23 03:37:52', NULL, '2022-01-23 03:37:52', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22947, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:52', '2022-01-23 03:37:52', 30, 0, '', NULL, '2022-01-23 03:37:52', NULL, '2022-01-23 03:37:52', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22948, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:52', '2022-01-23 03:37:52', 74, 0, '', NULL, '2022-01-23 03:37:52', NULL, '2022-01-23 03:37:52', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22949, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:53', '2022-01-23 03:37:53', 5, 0, '', NULL, '2022-01-23 03:37:53', NULL, '2022-01-23 03:37:53', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22950, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:54', '2022-01-23 03:37:54', 25, 0, '', NULL, '2022-01-23 03:37:54', NULL, '2022-01-23 03:37:54', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22951, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:54', '2022-01-23 03:37:54', 41, 0, '', NULL, '2022-01-23 03:37:54', NULL, '2022-01-23 03:37:54', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22952, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:54', '2022-01-23 03:37:54', 6, 0, '', NULL, '2022-01-23 03:37:54', NULL, '2022-01-23 03:37:54', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22953, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:54', '2022-01-23 03:37:54', 5, 0, '', NULL, '2022-01-23 03:37:54', NULL, '2022-01-23 03:37:54', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22954, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:54', '2022-01-23 03:37:54', 22, 0, '', NULL, '2022-01-23 03:37:54', NULL, '2022-01-23 03:37:54', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (22955, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/form/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:54', '2022-01-23 03:37:54', 19, 0, '', NULL, '2022-01-23 03:37:54', NULL, '2022-01-23 03:37:54', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22956, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/model/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:54', '2022-01-23 03:37:55', 120, 0, '', NULL, '2022-01-23 03:37:55', NULL, '2022-01-23 03:37:55', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22957, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:55', '2022-01-23 03:37:55', 16, 0, '', NULL, '2022-01-23 03:37:55', NULL, '2022-01-23 03:37:55', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (22958, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/form/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:55', '2022-01-23 03:37:55', 17, 0, '', NULL, '2022-01-23 03:37:55', NULL, '2022-01-23 03:37:55', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22959, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/model/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:55', '2022-01-23 03:37:55', 144, 0, '', NULL, '2022-01-23 03:37:55', NULL, '2022-01-23 03:37:55', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22960, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:56', '2022-01-23 03:37:56', 17, 0, '', NULL, '2022-01-23 03:37:56', NULL, '2022-01-23 03:37:56', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (22961, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/task/todo-page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:56', '2022-01-23 03:37:56', 68, 0, '', NULL, '2022-01-23 03:37:56', NULL, '2022-01-23 03:37:56', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22962, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:56', '2022-01-23 03:37:56', 18, 0, '', NULL, '2022-01-23 03:37:56', NULL, '2022-01-23 03:37:56', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (22963, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/task/todo-page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:37:56', '2022-01-23 03:37:56', 61, 0, '', NULL, '2022-01-23 03:37:56', NULL, '2022-01-23 03:37:56', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22964, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:44:45', '2022-01-23 03:44:45', 146, 0, '', NULL, '2022-01-23 03:44:45', NULL, '2022-01-23 03:44:45', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22965, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:44:45', '2022-01-23 03:44:45', 156, 0, '', NULL, '2022-01-23 03:44:45', NULL, '2022-01-23 03:44:45', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22966, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:44:45', '2022-01-23 03:44:45', 4, 0, '', NULL, '2022-01-23 03:44:45', NULL, '2022-01-23 03:44:45', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22967, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:44:45', '2022-01-23 03:44:45', 12, 0, '', NULL, '2022-01-23 03:44:45', NULL, '2022-01-23 03:44:45', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (22968, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/form/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:44:45', '2022-01-23 03:44:46', 16, 0, '', NULL, '2022-01-23 03:44:46', NULL, '2022-01-23 03:44:46', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22969, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/model/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 03:44:45', '2022-01-23 03:44:46', 120, 0, '', NULL, '2022-01-23 03:44:46', NULL, '2022-01-23 03:44:46', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22970, '', 0, 0, 'yudao-admin-server', 'POST', '/api/logout', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:10:38', '2022-01-23 04:10:38', 47, 0, '', NULL, '2022-01-23 04:10:38', NULL, '2022-01-23 04:10:38', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22971, '', 0, 0, 'yudao-admin-server', 'POST', '/api/logout', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:10:38', '2022-01-23 04:10:38', 50, 0, '', NULL, '2022-01-23 04:10:38', NULL, '2022-01-23 04:10:38', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22972, '', 0, 0, 'yudao-admin-server', 'POST', '/api/logout', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:10:39', '2022-01-23 04:10:39', 1, 0, '', NULL, '2022-01-23 04:10:39', NULL, '2022-01-23 04:10:39', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22973, '', 0, 0, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', 'undefined', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:10:39', '2022-01-23 04:10:39', 10, 0, '', NULL, '2022-01-23 04:10:39', NULL, '2022-01-23 04:10:39', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22974, '', 0, 0, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', 'undefined', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:10:39', '2022-01-23 04:10:39', 11, 0, '', NULL, '2022-01-23 04:10:39', NULL, '2022-01-23 04:10:39', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22975, '', 0, 0, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', 'undefined', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:10:39', '2022-01-23 04:10:39', 10, 0, '', NULL, '2022-01-23 04:10:39', NULL, '2022-01-23 04:10:39', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22976, '', 0, 0, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', 'undefined', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:10:39', '2022-01-23 04:10:39', 10, 0, '', NULL, '2022-01-23 04:10:39', NULL, '2022-01-23 04:10:39', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22977, '', 0, 0, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', 'undefined', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:10:39', '2022-01-23 04:10:39', 10, 0, '', NULL, '2022-01-23 04:10:39', NULL, '2022-01-23 04:10:39', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22978, '', 0, 0, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', 'undefined', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:10:39', '2022-01-23 04:10:39', 9, 0, '', NULL, '2022-01-23 04:10:39', NULL, '2022-01-23 04:10:39', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22979, '', 0, 0, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:19:46', '2022-01-23 04:19:46', 51, 0, '', NULL, '2022-01-23 04:19:47', NULL, '2022-01-23 04:19:47', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22980, '', 0, 0, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:19:46', '2022-01-23 04:19:46', 51, 0, '', NULL, '2022-01-23 04:19:47', NULL, '2022-01-23 04:19:47', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22981, '', 0, 0, 'yudao-admin-server', 'POST', '/api/logout', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:19:47', '2022-01-23 04:19:47', 12, 0, '', NULL, '2022-01-23 04:19:47', NULL, '2022-01-23 04:19:47', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22982, '', 0, 0, 'yudao-admin-server', 'POST', '/api/logout', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:19:48', '2022-01-23 04:19:48', 2, 0, '', NULL, '2022-01-23 04:19:48', NULL, '2022-01-23 04:19:48', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22983, '', 0, 0, 'yudao-admin-server', 'GET', '/api/system/captcha/get-image', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:19:48', '2022-01-23 04:19:49', 1172, 0, '', NULL, '2022-01-23 04:19:49', NULL, '2022-01-23 04:19:49', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22984, '', 0, 0, 'yudao-admin-server', 'GET', '/api/system/captcha/get-image', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:19:47', '2022-01-23 04:19:49', 2370, 0, '', NULL, '2022-01-23 04:19:49', NULL, '2022-01-23 04:19:49', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22985, '', 0, 0, 'yudao-admin-server', 'GET', '/api/system/tenant/get-id-by-name', '{\"query\":{\"name\":\"èŠ‹é“æºç \"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:19:52', '2022-01-23 04:19:52', 45, 0, '', NULL, '2022-01-23 04:19:52', NULL, '2022-01-23 04:19:52', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22986, '', 0, 0, 'yudao-admin-server', 'POST', '/api/login', '{\"query\":{},\"body\":\"{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"admin123\\\",\\\"code\\\":\\\"nzgnu\\\",\\\"uuid\\\":\\\"256030e97aa64c5a84e0614f5b065a66\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:19:52', '2022-01-23 04:19:53', 366, 0, '', NULL, '2022-01-23 04:19:53', NULL, '2022-01-23 04:19:53', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22987, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:19:53', '2022-01-23 04:19:53', 54, 0, '', NULL, '2022-01-23 04:19:53', NULL, '2022-01-23 04:19:53', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22988, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:19:53', '2022-01-23 04:19:53', 60, 0, '', NULL, '2022-01-23 04:19:53', NULL, '2022-01-23 04:19:53', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22989, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:19:53', '2022-01-23 04:19:53', 12, 0, '', NULL, '2022-01-23 04:19:53', NULL, '2022-01-23 04:19:53', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22990, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:19:53', '2022-01-23 04:19:53', 40, 0, '', NULL, '2022-01-23 04:19:53', NULL, '2022-01-23 04:19:53', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (22991, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/merchant/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:19:58', '2022-01-23 04:19:58', 106, 0, '', NULL, '2022-01-23 04:19:58', NULL, '2022-01-23 04:19:58', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22992, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/merchant/list-by-name', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:19:59', '2022-01-23 04:19:59', 29, 0, '', NULL, '2022-01-23 04:19:59', NULL, '2022-01-23 04:19:59', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22993, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/app/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:19:59', '2022-01-23 04:19:59', 117, 0, '', NULL, '2022-01-23 04:19:59', NULL, '2022-01-23 04:19:59', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22994, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/merchant/list-by-name', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:20:00', '2022-01-23 04:20:00', 19, 0, '', NULL, '2022-01-23 04:20:00', NULL, '2022-01-23 04:20:00', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22995, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/order/page', '{\"query\":{\"beginCreateTime\":\"2022-01-23 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2022-01-23 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:20:00', '2022-01-23 04:20:00', 138, 0, '', NULL, '2022-01-23 04:20:00', NULL, '2022-01-23 04:20:00', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22996, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/merchant/list-by-name', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:20:00', '2022-01-23 04:20:00', 16, 0, '', NULL, '2022-01-23 04:20:00', NULL, '2022-01-23 04:20:00', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22997, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/refund/page', '{\"query\":{\"beginCreateTime\":\"2022-01-23 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2022-01-23 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:20:00', '2022-01-23 04:20:00', 87, 0, '', NULL, '2022-01-23 04:20:00', NULL, '2022-01-23 04:20:00', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22998, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/merchant/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:20:01', '2022-01-23 04:20:01', 26, 0, '', NULL, '2022-01-23 04:20:01', NULL, '2022-01-23 04:20:01', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (22999, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/merchant/list-by-name', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:20:07', '2022-01-23 04:20:07', 17, 0, '', NULL, '2022-01-23 04:20:07', NULL, '2022-01-23 04:20:07', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23000, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/app/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:20:07', '2022-01-23 04:20:07', 67, 0, '', NULL, '2022-01-23 04:20:07', NULL, '2022-01-23 04:20:07', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23001, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/merchant/list-by-name', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:20:10', '2022-01-23 04:20:10', 20, 0, '', NULL, '2022-01-23 04:20:10', NULL, '2022-01-23 04:20:10', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23002, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/order/page', '{\"query\":{\"beginCreateTime\":\"2022-01-23 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2022-01-23 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:20:10', '2022-01-23 04:20:10', 53, 0, '', NULL, '2022-01-23 04:20:10', NULL, '2022-01-23 04:20:10', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23003, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/merchant/list-by-name', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:20:11', '2022-01-23 04:20:11', 22, 0, '', NULL, '2022-01-23 04:20:11', NULL, '2022-01-23 04:20:11', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23004, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/refund/page', '{\"query\":{\"beginCreateTime\":\"2022-01-23 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2022-01-23 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:20:11', '2022-01-23 04:20:11', 54, 0, '', NULL, '2022-01-23 04:20:11', NULL, '2022-01-23 04:20:11', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23005, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/merchant/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:20:13', '2022-01-23 04:20:13', 27, 0, '', NULL, '2022-01-23 04:20:13', NULL, '2022-01-23 04:20:13', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23006, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/merchant/list-by-name', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:20:14', '2022-01-23 04:20:15', 15, 0, '', NULL, '2022-01-23 04:20:15', NULL, '2022-01-23 04:20:15', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23007, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/refund/page', '{\"query\":{\"beginCreateTime\":\"2022-01-23 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2022-01-23 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:20:14', '2022-01-23 04:20:15', 41, 0, '', NULL, '2022-01-23 04:20:15', NULL, '2022-01-23 04:20:15', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23008, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/merchant/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:20:25', '2022-01-23 04:20:25', 24, 0, '', NULL, '2022-01-23 04:20:25', NULL, '2022-01-23 04:20:25', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23009, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/merchant/get', '{\"query\":{\"id\":\"1\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:20:27', '2022-01-23 04:20:27', 17, 0, '', NULL, '2022-01-23 04:20:27', NULL, '2022-01-23 04:20:27', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23010, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/merchant/list-by-name', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:20:30', '2022-01-23 04:20:30', 22, 0, '', NULL, '2022-01-23 04:20:30', NULL, '2022-01-23 04:20:30', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23011, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/app/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 04:20:30', '2022-01-23 04:20:30', 68, 0, '', NULL, '2022-01-23 04:20:30', NULL, '2022-01-23 04:20:30', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23012, '', 0, 0, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:40:11', '2022-01-23 12:40:11', 46, 0, '', NULL, '2022-01-23 12:40:12', NULL, '2022-01-23 12:40:12', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23013, '', 0, 0, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:40:11', '2022-01-23 12:40:11', 46, 0, '', NULL, '2022-01-23 12:40:12', NULL, '2022-01-23 12:40:12', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23014, '', 0, 0, 'yudao-admin-server', 'POST', '/api/logout', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:40:12', '2022-01-23 12:40:12', 22, 0, '', NULL, '2022-01-23 12:40:12', NULL, '2022-01-23 12:40:12', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23015, '', 0, 0, 'yudao-admin-server', 'GET', '/api/system/captcha/get-image', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:40:12', '2022-01-23 12:40:17', 4835, 0, '', NULL, '2022-01-23 12:40:17', NULL, '2022-01-23 12:40:17', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23016, '', 0, 0, 'yudao-admin-server', 'GET', '/api/system/captcha/get-image', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:40:12', '2022-01-23 12:40:17', 4887, 0, '', NULL, '2022-01-23 12:40:17', NULL, '2022-01-23 12:40:17', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23017, '', 0, 0, 'yudao-admin-server', 'GET', '/api/system/tenant/get-id-by-name', '{\"query\":{\"name\":\"èŠ‹é“æºç \"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:40:58', '2022-01-23 12:40:58', 164, 0, '', NULL, '2022-01-23 12:40:58', NULL, '2022-01-23 12:40:58', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23018, '', 0, 0, 'yudao-admin-server', 'POST', '/api/login', '{\"query\":{},\"body\":\"{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"admin123\\\",\\\"code\\\":\\\"493kz\\\",\\\"uuid\\\":\\\"7e3a66a57c4d491cba7ca3425029d780\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:40:58', '2022-01-23 12:40:59', 359, 0, '', NULL, '2022-01-23 12:40:59', NULL, '2022-01-23 12:40:59', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23019, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:40:59', '2022-01-23 12:40:59', 67, 0, '', NULL, '2022-01-23 12:40:59', NULL, '2022-01-23 12:40:59', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23020, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:40:59', '2022-01-23 12:40:59', 62, 0, '', NULL, '2022-01-23 12:40:59', NULL, '2022-01-23 12:40:59', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23021, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:40:59', '2022-01-23 12:40:59', 17, 0, '', NULL, '2022-01-23 12:40:59', NULL, '2022-01-23 12:40:59', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23022, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:41:00', '2022-01-23 12:41:00', 53, 0, '', NULL, '2022-01-23 12:41:00', NULL, '2022-01-23 12:41:00', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (23023, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/oa/leave/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:41:07', '2022-01-23 12:41:07', 119, 0, '', NULL, '2022-01-23 12:41:07', NULL, '2022-01-23 12:41:07', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23024, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/process-instance/my-page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:41:07', '2022-01-23 12:41:08', 104, 0, '', NULL, '2022-01-23 12:41:08', NULL, '2022-01-23 12:41:08', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23025, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/process-definition/list', '{\"query\":{\"suspensionState\":\"1\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:41:10', '2022-01-23 12:41:10', 71, 0, '', NULL, '2022-01-23 12:41:10', NULL, '2022-01-23 12:41:10', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23026, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/process-definition/get-bpmn-xml', '{\"query\":{\"id\":\"eee:17:f3aad03b-7ae5-11ec-a69c-a2380e71991a\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:41:12', '2022-01-23 12:41:12', 33, 0, '', NULL, '2022-01-23 12:41:12', NULL, '2022-01-23 12:41:12', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23027, '', 1, 2, 'yudao-admin-server', 'POST', '/api/bpm/process-instance/create', '{\"query\":{},\"body\":\"{\\\"processDefinitionId\\\":\\\"eee:17:f3aad03b-7ae5-11ec-a69c-a2380e71991a\\\",\\\"variables\\\":{\\\"field121\\\":\\\"AAA\\\",\\\"field122\\\":[1]}}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:41:14', '2022-01-23 12:41:19', 4971, 0, '', NULL, '2022-01-23 12:41:19', NULL, '2022-01-23 12:41:19', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23028, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/process-instance/my-page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:41:21', '2022-01-23 12:41:21', 71, 0, '', NULL, '2022-01-23 12:41:21', NULL, '2022-01-23 12:41:21', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23029, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:49:49', '2022-01-23 12:49:49', 251, 0, '', NULL, '2022-01-23 12:49:49', NULL, '2022-01-23 12:49:49', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23030, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:49:49', '2022-01-23 12:49:49', 251, 0, '', NULL, '2022-01-23 12:49:49', NULL, '2022-01-23 12:49:49', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23031, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:49:49', '2022-01-23 12:49:49', 24, 0, '', NULL, '2022-01-23 12:49:49', NULL, '2022-01-23 12:49:49', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23032, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:49:49', '2022-01-23 12:49:50', 70, 0, '', NULL, '2022-01-23 12:49:50', NULL, '2022-01-23 12:49:50', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (23033, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/process-definition/list', '{\"query\":{\"suspensionState\":\"1\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:49:49', '2022-01-23 12:49:50', 158, 0, '', NULL, '2022-01-23 12:49:50', NULL, '2022-01-23 12:49:50', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23034, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/oa/leave/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:49:53', '2022-01-23 12:49:53', 153, 0, '', NULL, '2022-01-23 12:49:53', NULL, '2022-01-23 12:49:53', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23035, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/process-instance/my-page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:49:55', '2022-01-23 12:49:55', 140, 0, '', NULL, '2022-01-23 12:49:55', NULL, '2022-01-23 12:49:55', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23036, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/process-definition/list', '{\"query\":{\"suspensionState\":\"1\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:49:57', '2022-01-23 12:49:57', 42, 0, '', NULL, '2022-01-23 12:49:57', NULL, '2022-01-23 12:49:57', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23037, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/process-definition/get-bpmn-xml', '{\"query\":{\"id\":\"test_001:4:3dbe6714-76b1-11ec-9c66-a2380e71991a\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:49:59', '2022-01-23 12:49:59', 34, 0, '', NULL, '2022-01-23 12:49:59', NULL, '2022-01-23 12:49:59', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23038, '', 1, 2, 'yudao-admin-server', 'POST', '/api/bpm/process-instance/create', '{\"query\":{},\"body\":\"{\\\"processDefinitionId\\\":\\\"test_001:4:3dbe6714-76b1-11ec-9c66-a2380e71991a\\\",\\\"variables\\\":{\\\"field121\\\":\\\"AAA\\\",\\\"field122\\\":[1]}}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:50:02', '2022-01-23 12:50:06', 4140, 0, '', NULL, '2022-01-23 12:50:06', NULL, '2022-01-23 12:50:06', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23039, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/process-instance/my-page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:50:07', '2022-01-23 12:50:07', 162, 0, '', NULL, '2022-01-23 12:50:07', NULL, '2022-01-23 12:50:07', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23040, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/process-definition/list', '{\"query\":{\"suspensionState\":\"1\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:50:38', '2022-01-23 12:50:38', 41, 0, '', NULL, '2022-01-23 12:50:38', NULL, '2022-01-23 12:50:38', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23041, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/process-definition/list', '{\"query\":{\"suspensionState\":\"1\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:50:42', '2022-01-23 12:50:42', 28, 0, '', NULL, '2022-01-23 12:50:42', NULL, '2022-01-23 12:50:42', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23042, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/process-definition/get-bpmn-xml', '{\"query\":{\"id\":\"self:2:3a5a065e-76b1-11ec-9c66-a2380e71991a\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:50:44', '2022-01-23 12:50:44', 16, 0, '', NULL, '2022-01-23 12:50:44', NULL, '2022-01-23 12:50:44', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23043, '', 1, 2, 'yudao-admin-server', 'POST', '/api/bpm/process-instance/create', '{\"query\":{},\"body\":\"{\\\"processDefinitionId\\\":\\\"self:2:3a5a065e-76b1-11ec-9c66-a2380e71991a\\\",\\\"variables\\\":{\\\"field121\\\":\\\"aaa\\\",\\\"field122\\\":[1]}}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:50:46', '2022-01-23 12:50:46', 217, 500, '系统异常', NULL, '2022-01-23 12:50:46', NULL, '2022-01-23 12:50:46', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23044, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/process-instance/my-page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:50:51', '2022-01-23 12:50:51', 53, 0, '', NULL, '2022-01-23 12:50:51', NULL, '2022-01-23 12:50:51', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23045, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/process-definition/list', '{\"query\":{\"suspensionState\":\"1\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:50:55', '2022-01-23 12:50:55', 29, 0, '', NULL, '2022-01-23 12:50:55', NULL, '2022-01-23 12:50:55', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23046, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/process-instance/my-page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:58:51', '2022-01-23 12:58:52', 585, 0, '', NULL, '2022-01-23 12:58:52', NULL, '2022-01-23 12:58:52', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23047, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:58:53', '2022-01-23 12:58:53', 48, 0, '', NULL, '2022-01-23 12:58:53', NULL, '2022-01-23 12:58:53', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23048, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:58:53', '2022-01-23 12:58:53', 57, 0, '', NULL, '2022-01-23 12:58:53', NULL, '2022-01-23 12:58:53', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23049, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:58:53', '2022-01-23 12:58:53', 16, 0, '', NULL, '2022-01-23 12:58:53', NULL, '2022-01-23 12:58:53', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23050, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:58:53', '2022-01-23 12:58:53', 41, 0, '', NULL, '2022-01-23 12:58:53', NULL, '2022-01-23 12:58:53', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (23051, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/process-instance/my-page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:58:53', '2022-01-23 12:58:53', 57, 0, '', NULL, '2022-01-23 12:58:53', NULL, '2022-01-23 12:58:53', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23052, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:59:07', '2022-01-23 12:59:07', 23, 0, '', NULL, '2022-01-23 12:59:07', NULL, '2022-01-23 12:59:07', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23053, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:59:07', '2022-01-23 12:59:07', 32, 0, '', NULL, '2022-01-23 12:59:07', NULL, '2022-01-23 12:59:07', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23054, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:59:07', '2022-01-23 12:59:07', 8, 0, '', NULL, '2022-01-23 12:59:07', NULL, '2022-01-23 12:59:07', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23055, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:59:07', '2022-01-23 12:59:07', 18, 0, '', NULL, '2022-01-23 12:59:07', NULL, '2022-01-23 12:59:07', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (23056, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/process-instance/my-page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:59:07', '2022-01-23 12:59:07', 46, 0, '', NULL, '2022-01-23 12:59:07', NULL, '2022-01-23 12:59:07', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23057, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/process-instance/my-page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:59:10', '2022-01-23 12:59:10', 40, 0, '', NULL, '2022-01-23 12:59:10', NULL, '2022-01-23 12:59:10', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23058, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:59:36', '2022-01-23 12:59:36', 25, 0, '', NULL, '2022-01-23 12:59:36', NULL, '2022-01-23 12:59:36', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23059, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:59:36', '2022-01-23 12:59:36', 40, 0, '', NULL, '2022-01-23 12:59:36', NULL, '2022-01-23 12:59:36', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23060, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:59:36', '2022-01-23 12:59:36', 6, 0, '', NULL, '2022-01-23 12:59:36', NULL, '2022-01-23 12:59:36', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23061, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:59:37', '2022-01-23 12:59:37', 15, 0, '', NULL, '2022-01-23 12:59:37', NULL, '2022-01-23 12:59:37', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (23062, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/process-instance/my-page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:59:37', '2022-01-23 12:59:37', 50, 0, '', NULL, '2022-01-23 12:59:37', NULL, '2022-01-23 12:59:37', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23063, '', 1, 2, 'yudao-admin-server', 'DELETE', '/api/bpm/process-instance/cancel', '{\"query\":{},\"body\":\"{\\\"id\\\":\\\"ecddb286-7c07-11ec-a41d-acde48001122\\\",\\\"reason\\\":\\\"aaa\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:59:40', '2022-01-23 12:59:41', 403, 0, '', NULL, '2022-01-23 12:59:41', NULL, '2022-01-23 12:59:41', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23064, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/process-instance/my-page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:59:41', '2022-01-23 12:59:41', 41, 0, '', NULL, '2022-01-23 12:59:41', NULL, '2022-01-23 12:59:41', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23065, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/task/todo-page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:59:43', '2022-01-23 12:59:43', 92, 0, '', NULL, '2022-01-23 12:59:43', NULL, '2022-01-23 12:59:43', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23066, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/form/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:59:44', '2022-01-23 12:59:44', 49, 0, '', NULL, '2022-01-23 12:59:44', NULL, '2022-01-23 12:59:44', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23067, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/user/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:59:48', '2022-01-23 12:59:48', 40, 0, '', NULL, '2022-01-23 12:59:48', NULL, '2022-01-23 12:59:48', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23068, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/user-group/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:59:48', '2022-01-23 12:59:48', 58, 0, '', NULL, '2022-01-23 12:59:48', NULL, '2022-01-23 12:59:48', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23069, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/process-instance/my-page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:59:51', '2022-01-23 12:59:51', 44, 0, '', NULL, '2022-01-23 12:59:51', NULL, '2022-01-23 12:59:51', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23070, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/process-definition/list', '{\"query\":{\"suspensionState\":\"1\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:59:52', '2022-01-23 12:59:53', 49, 0, '', NULL, '2022-01-23 12:59:53', NULL, '2022-01-23 12:59:53', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23071, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/process-definition/get-bpmn-xml', '{\"query\":{\"id\":\"test:21:c2cd44b0-79b0-11ec-b2b8-a2380e71991a\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:59:55', '2022-01-23 12:59:55', 25, 0, '', NULL, '2022-01-23 12:59:55', NULL, '2022-01-23 12:59:55', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23072, '', 1, 2, 'yudao-admin-server', 'POST', '/api/bpm/process-instance/create', '{\"query\":{},\"body\":\"{\\\"processDefinitionId\\\":\\\"test:21:c2cd44b0-79b0-11ec-b2b8-a2380e71991a\\\",\\\"variables\\\":{\\\"field121\\\":\\\"aaa\\\",\\\"field122\\\":[1]}}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:59:57', '2022-01-23 12:59:57', 392, 0, '', NULL, '2022-01-23 12:59:57', NULL, '2022-01-23 12:59:57', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23073, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/process-instance/my-page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:59:58', '2022-01-23 12:59:58', 35, 0, '', NULL, '2022-01-23 12:59:58', NULL, '2022-01-23 12:59:58', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23074, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:12:55', '2022-01-23 13:12:55', 182, 0, '', NULL, '2022-01-23 13:12:55', NULL, '2022-01-23 13:12:55', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23075, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:12:55', '2022-01-23 13:12:55', 171, 0, '', NULL, '2022-01-23 13:12:55', NULL, '2022-01-23 13:12:55', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23076, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:12:55', '2022-01-23 13:12:55', 15, 0, '', NULL, '2022-01-23 13:12:55', NULL, '2022-01-23 13:12:55', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23077, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:12:55', '2022-01-23 13:12:55', 34, 0, '', NULL, '2022-01-23 13:12:55', NULL, '2022-01-23 13:12:55', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (23078, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/merchant/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:13:00', '2022-01-23 13:13:00', 121, 0, '', NULL, '2022-01-23 13:13:00', NULL, '2022-01-23 13:13:00', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23079, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:18:59', '2022-01-23 13:18:59', 29, 0, '', NULL, '2022-01-23 13:18:59', NULL, '2022-01-23 13:18:59', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23080, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:18:59', '2022-01-23 13:18:59', 57, 0, '', NULL, '2022-01-23 13:18:59', NULL, '2022-01-23 13:18:59', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23081, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:18:59', '2022-01-23 13:18:59', 5, 0, '', NULL, '2022-01-23 13:18:59', NULL, '2022-01-23 13:18:59', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23082, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:18:59', '2022-01-23 13:18:59', 12, 0, '', NULL, '2022-01-23 13:18:59', NULL, '2022-01-23 13:18:59', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (23083, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/merchant/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:18:59', '2022-01-23 13:18:59', 25, 0, '', NULL, '2022-01-23 13:18:59', NULL, '2022-01-23 13:18:59', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23084, '', 0, 0, 'yudao-admin-server', 'POST', '/api/logout', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:24:39', '2022-01-23 13:24:39', 6, 0, '', NULL, '2022-01-23 13:24:39', NULL, '2022-01-23 13:24:39', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23085, '', 0, 0, 'yudao-admin-server', 'GET', '/api/system/captcha/get-image', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:24:40', '2022-01-23 13:24:42', 1905, 0, '', NULL, '2022-01-23 13:24:42', NULL, '2022-01-23 13:24:42', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23086, '', 0, 0, 'yudao-admin-server', 'GET', '/api/system/tenant/get-id-by-name', '{\"query\":{\"name\":\"èŠ‹é“æºç \"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:24:43', '2022-01-23 13:24:43', 25, 0, '', NULL, '2022-01-23 13:24:43', NULL, '2022-01-23 13:24:43', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23087, '', 0, 0, 'yudao-admin-server', 'POST', '/api/login', '{\"query\":{},\"body\":\"{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"admin123\\\",\\\"code\\\":\\\"111\\\",\\\"uuid\\\":\\\"7f690d86eaac44f18c0aeabfa8c4e365\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:24:43', '2022-01-23 13:24:43', 307, 0, '', NULL, '2022-01-23 13:24:43', NULL, '2022-01-23 13:24:43', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23088, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:24:43', '2022-01-23 13:24:43', 18, 0, '', NULL, '2022-01-23 13:24:43', NULL, '2022-01-23 13:24:43', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23089, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:24:43', '2022-01-23 13:24:43', 29, 0, '', NULL, '2022-01-23 13:24:43', NULL, '2022-01-23 13:24:43', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23090, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:24:43', '2022-01-23 13:24:43', 5, 0, '', NULL, '2022-01-23 13:24:43', NULL, '2022-01-23 13:24:43', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23091, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:24:44', '2022-01-23 13:24:44', 13, 0, '', NULL, '2022-01-23 13:24:44', NULL, '2022-01-23 13:24:44', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (23092, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/form/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:24:48', '2022-01-23 13:24:48', 47, 0, '', NULL, '2022-01-23 13:24:48', NULL, '2022-01-23 13:24:48', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23093, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/user/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:24:49', '2022-01-23 13:24:49', 38, 0, '', NULL, '2022-01-23 13:24:49', NULL, '2022-01-23 13:24:49', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23094, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/user-group/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:24:49', '2022-01-23 13:24:49', 50, 0, '', NULL, '2022-01-23 13:24:49', NULL, '2022-01-23 13:24:49', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23095, '', 1, 2, 'yudao-admin-server', 'GET', '/api/bpm/form/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:24:50', '2022-01-23 13:24:50', 24, 0, '', NULL, '2022-01-23 13:24:50', NULL, '2022-01-23 13:24:50', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23096, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/merchant/list-by-name', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:24:52', '2022-01-23 13:24:52', 24, 0, '', NULL, '2022-01-23 13:24:52', NULL, '2022-01-23 13:24:52', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23097, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/order/page', '{\"query\":{\"beginCreateTime\":\"2022-01-23 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2022-01-23 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:24:52', '2022-01-23 13:24:52', 134, 0, '', NULL, '2022-01-23 13:24:52', NULL, '2022-01-23 13:24:52', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23098, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/order/page', '{\"query\":{\"beginCreateTime\":\"2022-01-23 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2022-01-23 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:25:05', '2022-01-23 13:25:05', 31, 0, '', NULL, '2022-01-23 13:25:05', NULL, '2022-01-23 13:25:05', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23099, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/order/page', '{\"query\":{\"beginCreateTime\":\"2022-01-23 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2022-01-23 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:25:06', '2022-01-23 13:25:06', 30, 0, '', NULL, '2022-01-23 13:25:06', NULL, '2022-01-23 13:25:06', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23100, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/order/page', '{\"query\":{\"beginCreateTime\":\"2022-01-23 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2022-01-23 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:25:12', '2022-01-23 13:25:12', 29, 0, '', NULL, '2022-01-23 13:25:12', NULL, '2022-01-23 13:25:12', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23101, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/order/page', '{\"query\":{\"beginCreateTime\":\"2022-01-23 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2022-01-23 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:25:12', '2022-01-23 13:25:12', 31, 0, '', NULL, '2022-01-23 13:25:12', NULL, '2022-01-23 13:25:12', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23102, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/order/page', '{\"query\":{\"beginCreateTime\":\"2022-01-23 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2022-01-23 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:25:12', '2022-01-23 13:25:12', 29, 0, '', NULL, '2022-01-23 13:25:12', NULL, '2022-01-23 13:25:12', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23103, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/order/page', '{\"query\":{\"beginCreateTime\":\"2022-01-23 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2022-01-23 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:25:12', '2022-01-23 13:25:13', 30, 0, '', NULL, '2022-01-23 13:25:13', NULL, '2022-01-23 13:25:13', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23104, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/order/page', '{\"query\":{\"beginCreateTime\":\"2022-01-23 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2022-01-23 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:25:32', '2022-01-23 13:25:32', 33, 0, '', NULL, '2022-01-23 13:25:32', NULL, '2022-01-23 13:25:32', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23105, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/order/page', '{\"query\":{\"beginCreateTime\":\"2022-01-01 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2022-01-31 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:25:42', '2022-01-23 13:25:42', 30, 0, '', NULL, '2022-01-23 13:25:42', NULL, '2022-01-23 13:25:42', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23106, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/order/page', '{\"query\":{\"beginCreateTime\":\"2021-12-01 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2021-12-31 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:25:48', '2022-01-23 13:25:48', 31, 0, '', NULL, '2022-01-23 13:25:48', NULL, '2022-01-23 13:25:48', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23107, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/order/page', '{\"query\":{\"beginCreateTime\":\"2021-12-01 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2021-12-31 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:25:49', '2022-01-23 13:25:49', 32, 0, '', NULL, '2022-01-23 13:25:49', NULL, '2022-01-23 13:25:49', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23108, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/order/page', '{\"query\":{\"beginCreateTime\":\"2021-12-01 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2021-12-31 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:25:50', '2022-01-23 13:25:50', 31, 0, '', NULL, '2022-01-23 13:25:50', NULL, '2022-01-23 13:25:50', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23109, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/order/page', '{\"query\":{\"beginCreateTime\":\"2021-11-01 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2021-11-30 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:25:58', '2022-01-23 13:25:58', 31, 0, '', NULL, '2022-01-23 13:25:58', NULL, '2022-01-23 13:25:58', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23110, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/order/page', '{\"query\":{\"beginCreateTime\":\"2021-10-01 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2021-10-31 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:26:19', '2022-01-23 13:26:19', 83, 0, '', NULL, '2022-01-23 13:26:19', NULL, '2022-01-23 13:26:19', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23111, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/order/get', '{\"query\":{\"id\":\"121\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:26:57', '2022-01-23 13:26:58', 77, 0, '', NULL, '2022-01-23 13:26:58', NULL, '2022-01-23 13:26:58', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23112, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/order/get', '{\"query\":{\"id\":\"120\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:27:06', '2022-01-23 13:27:06', 41, 0, '', NULL, '2022-01-23 13:27:06', NULL, '2022-01-23 13:27:06', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23113, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/order/get', '{\"query\":{\"id\":\"119\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:27:13', '2022-01-23 13:27:14', 40, 0, '', NULL, '2022-01-23 13:27:14', NULL, '2022-01-23 13:27:14', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23114, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/merchant/list-by-name', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:28:09', '2022-01-23 13:28:09', 13, 0, '', NULL, '2022-01-23 13:28:09', NULL, '2022-01-23 13:28:09', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23115, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/refund/page', '{\"query\":{\"beginCreateTime\":\"2022-01-23 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2022-01-23 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:28:09', '2022-01-23 13:28:09', 63, 0, '', NULL, '2022-01-23 13:28:09', NULL, '2022-01-23 13:28:09', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23116, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/refund/page', '{\"query\":{\"beginCreateTime\":\"2021-11-01 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2021-11-30 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:28:15', '2022-01-23 13:28:15', 31, 0, '', NULL, '2022-01-23 13:28:15', NULL, '2022-01-23 13:28:15', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23117, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/merchant/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:30:06', '2022-01-23 13:30:06', 27, 0, '', NULL, '2022-01-23 13:30:06', NULL, '2022-01-23 13:30:06', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23118, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/merchant/list-by-name', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:30:40', '2022-01-23 13:30:40', 12, 0, '', NULL, '2022-01-23 13:30:40', NULL, '2022-01-23 13:30:40', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23119, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/app/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:30:40', '2022-01-23 13:30:40', 79, 0, '', NULL, '2022-01-23 13:30:40', NULL, '2022-01-23 13:30:40', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23120, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/channel/get-channel', '{\"query\":{\"code\":\"alipay_app\",\"merchantId\":\"1\",\"appId\":\"6\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:30:57', '2022-01-23 13:30:57', 25, 0, '', NULL, '2022-01-23 13:30:57', NULL, '2022-01-23 13:30:57', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23121, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/channel/get-channel', '{\"query\":{\"code\":\"alipay_app\",\"merchantId\":\"1\",\"appId\":\"6\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:30:59', '2022-01-23 13:30:59', 19, 0, '', NULL, '2022-01-23 13:30:59', NULL, '2022-01-23 13:30:59', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23122, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/channel/get-channel', '{\"query\":{\"code\":\"alipay_app\",\"merchantId\":\"1\",\"appId\":\"6\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:31:02', '2022-01-23 13:31:02', 14, 0, '', NULL, '2022-01-23 13:31:02', NULL, '2022-01-23 13:31:02', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23123, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:31:09', '2022-01-23 13:31:09', 32, 0, '', NULL, '2022-01-23 13:31:09', NULL, '2022-01-23 13:31:09', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23124, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:31:09', '2022-01-23 13:31:09', 45, 0, '', NULL, '2022-01-23 13:31:09', NULL, '2022-01-23 13:31:09', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23125, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:31:10', '2022-01-23 13:31:10', 7, 0, '', NULL, '2022-01-23 13:31:10', NULL, '2022-01-23 13:31:10', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23126, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:31:10', '2022-01-23 13:31:10', 13, 0, '', NULL, '2022-01-23 13:31:10', NULL, '2022-01-23 13:31:10', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (23127, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/merchant/list-by-name', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:31:11', '2022-01-23 13:31:11', 16, 0, '', NULL, '2022-01-23 13:31:11', NULL, '2022-01-23 13:31:11', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23128, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/app/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:31:11', '2022-01-23 13:31:11', 57, 0, '', NULL, '2022-01-23 13:31:11', NULL, '2022-01-23 13:31:11', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23129, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/channel/get-channel', '{\"query\":{\"code\":\"alipay_app\",\"merchantId\":\"1\",\"appId\":\"6\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:31:16', '2022-01-23 13:31:16', 16, 0, '', NULL, '2022-01-23 13:31:16', NULL, '2022-01-23 13:31:16', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23130, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/merchant/list-by-name', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:31:50', '2022-01-23 13:31:50', 14, 0, '', NULL, '2022-01-23 13:31:50', NULL, '2022-01-23 13:31:50', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23131, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/order/page', '{\"query\":{\"beginCreateTime\":\"2022-01-23 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2022-01-23 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:31:50', '2022-01-23 13:31:50', 39, 0, '', NULL, '2022-01-23 13:31:50', NULL, '2022-01-23 13:31:50', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23132, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/order/page', '{\"query\":{\"beginCreateTime\":\"2022-01-23 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2022-01-23 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:31:58', '2022-01-23 13:31:58', 32, 0, '', NULL, '2022-01-23 13:31:58', NULL, '2022-01-23 13:31:58', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23133, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/order/page', '{\"query\":{\"beginCreateTime\":\"2022-01-23 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2022-01-23 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:31:59', '2022-01-23 13:31:59', 31, 0, '', NULL, '2022-01-23 13:31:59', NULL, '2022-01-23 13:31:59', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23134, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/order/page', '{\"query\":{\"beginCreateTime\":\"2021-09-01 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2021-09-30 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:32:07', '2022-01-23 13:32:07', 30, 0, '', NULL, '2022-01-23 13:32:07', NULL, '2022-01-23 13:32:07', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23135, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/order/page', '{\"query\":{\"beginCreateTime\":\"2021-10-01 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2021-10-31 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:32:15', '2022-01-23 13:32:15', 60, 0, '', NULL, '2022-01-23 13:32:15', NULL, '2022-01-23 13:32:15', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23136, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:33:10', '2022-01-23 13:33:10', 24, 0, '', NULL, '2022-01-23 13:33:10', NULL, '2022-01-23 13:33:10', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23137, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:33:10', '2022-01-23 13:33:10', 42, 0, '', NULL, '2022-01-23 13:33:10', NULL, '2022-01-23 13:33:10', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23138, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:33:10', '2022-01-23 13:33:10', 5, 0, '', NULL, '2022-01-23 13:33:10', NULL, '2022-01-23 13:33:10', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23139, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:33:10', '2022-01-23 13:33:10', 15, 0, '', NULL, '2022-01-23 13:33:10', NULL, '2022-01-23 13:33:10', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (23140, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/merchant/list-by-name', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:33:10', '2022-01-23 13:33:10', 20, 0, '', NULL, '2022-01-23 13:33:10', NULL, '2022-01-23 13:33:10', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23141, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/order/page', '{\"query\":{\"beginCreateTime\":\"2022-01-23 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2022-01-23 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:33:10', '2022-01-23 13:33:11', 46, 0, '', NULL, '2022-01-23 13:33:11', NULL, '2022-01-23 13:33:11', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23142, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/order/page', '{\"query\":{\"beginCreateTime\":\"2021-11-01 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2021-11-30 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:33:18', '2022-01-23 13:33:18', 29, 0, '', NULL, '2022-01-23 13:33:18', NULL, '2022-01-23 13:33:18', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23143, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/order/page', '{\"query\":{\"beginCreateTime\":\"2021-10-01 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2021-10-31 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:33:26', '2022-01-23 13:33:26', 54, 0, '', NULL, '2022-01-23 13:33:26', NULL, '2022-01-23 13:33:26', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23144, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/merchant/list-by-name', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:34:08', '2022-01-23 13:34:08', 14, 0, '', NULL, '2022-01-23 13:34:08', NULL, '2022-01-23 13:34:08', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23145, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/refund/page', '{\"query\":{\"beginCreateTime\":\"2022-01-23 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2022-01-23 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:34:08', '2022-01-23 13:34:08', 38, 0, '', NULL, '2022-01-23 13:34:08', NULL, '2022-01-23 13:34:08', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23146, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/refund/page', '{\"query\":{\"beginCreateTime\":\"2022-01-23 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2022-01-23 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:34:18', '2022-01-23 13:34:18', 33, 0, '', NULL, '2022-01-23 13:34:18', NULL, '2022-01-23 13:34:18', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23147, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/refund/page', '{\"query\":{\"beginCreateTime\":\"2022-01-23 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2022-01-23 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:34:18', '2022-01-23 13:34:18', 35, 0, '', NULL, '2022-01-23 13:34:18', NULL, '2022-01-23 13:34:18', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23148, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/refund/page', '{\"query\":{\"beginCreateTime\":\"2022-01-23 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2022-01-23 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:34:18', '2022-01-23 13:34:18', 32, 0, '', NULL, '2022-01-23 13:34:18', NULL, '2022-01-23 13:34:18', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23149, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/refund/page', '{\"query\":{\"beginCreateTime\":\"2022-01-23 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2022-01-23 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:34:19', '2022-01-23 13:34:19', 33, 0, '', NULL, '2022-01-23 13:34:19', NULL, '2022-01-23 13:34:19', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23150, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:34:19', '2022-01-23 13:34:19', 24, 0, '', NULL, '2022-01-23 13:34:19', NULL, '2022-01-23 13:34:19', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23151, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:34:19', '2022-01-23 13:34:20', 47, 0, '', NULL, '2022-01-23 13:34:20', NULL, '2022-01-23 13:34:20', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23152, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:34:20', '2022-01-23 13:34:20', 6, 0, '', NULL, '2022-01-23 13:34:20', NULL, '2022-01-23 13:34:20', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23153, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:34:20', '2022-01-23 13:34:20', 14, 0, '', NULL, '2022-01-23 13:34:20', NULL, '2022-01-23 13:34:20', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (23154, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/merchant/list-by-name', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:34:20', '2022-01-23 13:34:20', 15, 0, '', NULL, '2022-01-23 13:34:20', NULL, '2022-01-23 13:34:20', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23155, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/refund/page', '{\"query\":{\"beginCreateTime\":\"2022-01-23 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2022-01-23 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 13:34:20', '2022-01-23 13:34:20', 42, 0, '', NULL, '2022-01-23 13:34:20', NULL, '2022-01-23 13:34:20', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23156, '', 0, 0, 'yudao-admin-server', 'POST', '/api/login', '{\"query\":{},\"body\":\"{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"admin123\\\",\\\"code\\\":\\\"1\\\",\\\"uuid\\\":\\\"44f9703e0c7049fbbc1cab18a32ea742\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-24 07:50:08', '2022-01-24 07:50:09', 359, 0, '', NULL, '2022-01-24 07:50:09', NULL, '2022-01-24 07:50:09', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23157, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-24 07:50:09', '2022-01-24 07:50:09', 41, 0, '', NULL, '2022-01-24 07:50:09', NULL, '2022-01-24 07:50:09', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23158, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-24 07:50:09', '2022-01-24 07:50:09', 50, 0, '', NULL, '2022-01-24 07:50:09', NULL, '2022-01-24 07:50:09', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23159, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-24 07:50:09', '2022-01-24 07:50:09', 11, 0, '', NULL, '2022-01-24 07:50:09', NULL, '2022-01-24 07:50:09', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23160, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-24 07:50:09', '2022-01-24 07:50:10', 39, 0, '', NULL, '2022-01-24 07:50:10', NULL, '2022-01-24 07:50:10', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (23161, '', 1, 2, 'yudao-admin-server', 'GET', '/api/infra/redis/get-key-list', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-24 07:50:13', '2022-01-24 07:50:13', 16, 0, '', NULL, '2022-01-24 07:50:13', NULL, '2022-01-24 07:50:13', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23162, '', 1, 2, 'yudao-admin-server', 'GET', '/api/infra/redis/get-monitor-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-24 07:50:13', '2022-01-24 07:50:13', 79, 0, '', NULL, '2022-01-24 07:50:13', NULL, '2022-01-24 07:50:13', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23163, '', 1, 2, 'yudao-admin-server', 'GET', '/api/infra/job/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-24 07:51:09', '2022-01-24 07:51:09', 139, 0, '', NULL, '2022-01-24 07:51:09', NULL, '2022-01-24 07:51:09', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23164, '', 1, 2, 'yudao-admin-server', 'GET', '/api/infra/redis/get-key-list', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-24 07:51:12', '2022-01-24 07:51:12', 9, 0, '', NULL, '2022-01-24 07:51:12', NULL, '2022-01-24 07:51:12', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23165, '', 1, 2, 'yudao-admin-server', 'GET', '/api/infra/redis/get-monitor-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-24 07:51:12', '2022-01-24 07:51:12', 39, 0, '', NULL, '2022-01-24 07:51:12', NULL, '2022-01-24 07:51:12', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23166, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-24 07:52:20', '2022-01-24 07:52:20', 127, 0, '', NULL, '2022-01-24 07:52:20', NULL, '2022-01-24 07:52:20', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23167, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-24 07:52:20', '2022-01-24 07:52:20', 161, 0, '', NULL, '2022-01-24 07:52:20', NULL, '2022-01-24 07:52:20', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23168, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-24 07:52:20', '2022-01-24 07:52:20', 11, 0, '', NULL, '2022-01-24 07:52:20', NULL, '2022-01-24 07:52:20', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23169, '', 1, 2, 'yudao-admin-server', 'GET', '/api/infra/redis/get-key-list', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-24 07:52:21', '2022-01-24 07:52:21', 23, 0, '', NULL, '2022-01-24 07:52:21', NULL, '2022-01-24 07:52:21', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23170, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-24 07:52:21', '2022-01-24 07:52:21', 51, 0, '', NULL, '2022-01-24 07:52:21', NULL, '2022-01-24 07:52:21', b'0', 0); +INSERT INTO `infra_api_access_log` VALUES (23171, '', 1, 2, 'yudao-admin-server', 'GET', '/api/infra/redis/get-monitor-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-24 07:52:21', '2022-01-24 07:52:21', 73, 0, '', NULL, '2022-01-24 07:52:21', NULL, '2022-01-24 07:52:21', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23172, '', 1, 2, 'yudao-admin-server', 'GET', '/api/infra/api-access-log/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-24 07:52:25', '2022-01-24 07:52:25', 145, 0, '', NULL, '2022-01-24 07:52:25', NULL, '2022-01-24 07:52:25', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23173, '', 1, 2, 'yudao-admin-server', 'GET', '/api/infra/api-error-log/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-24 07:52:26', '2022-01-24 07:52:26', 71, 0, '', NULL, '2022-01-24 07:52:26', NULL, '2022-01-24 07:52:26', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23174, '', 1, 2, 'yudao-admin-server', 'GET', '/api/infra/config/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-24 07:52:27', '2022-01-24 07:52:27', 49, 0, '', NULL, '2022-01-24 07:52:27', NULL, '2022-01-24 07:52:27', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23175, '', 1, 2, 'yudao-admin-server', 'GET', '/api/infra/file/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-24 07:52:28', '2022-01-24 07:52:28', 29, 0, '', NULL, '2022-01-24 07:52:28', NULL, '2022-01-24 07:52:28', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23176, '', 1, 2, 'yudao-admin-server', 'GET', '/api/infra/redis/get-key-list', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-24 07:52:30', '2022-01-24 07:52:30', 14, 0, '', NULL, '2022-01-24 07:52:30', NULL, '2022-01-24 07:52:30', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23177, '', 1, 2, 'yudao-admin-server', 'GET', '/api/infra/redis/get-monitor-info', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-24 07:52:30', '2022-01-24 07:52:30', 31, 0, '', NULL, '2022-01-24 07:52:30', NULL, '2022-01-24 07:52:30', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23178, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/merchant/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-24 07:52:31', '2022-01-24 07:52:32', 73, 0, '', NULL, '2022-01-24 07:52:32', NULL, '2022-01-24 07:52:32', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23179, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/merchant/list-by-name', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-24 07:52:32', '2022-01-24 07:52:32', 29, 0, '', NULL, '2022-01-24 07:52:32', NULL, '2022-01-24 07:52:32', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23180, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/app/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-24 07:52:32', '2022-01-24 07:52:32', 138, 0, '', NULL, '2022-01-24 07:52:32', NULL, '2022-01-24 07:52:32', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23181, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/merchant/list-by-name', '{\"query\":{}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-24 07:52:33', '2022-01-24 07:52:33', 20, 0, '', NULL, '2022-01-24 07:52:33', NULL, '2022-01-24 07:52:33', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23182, '', 1, 2, 'yudao-admin-server', 'GET', '/api/pay/refund/page', '{\"query\":{\"beginCreateTime\":\"2022-01-24 00:00:00\",\"pageNo\":\"1\",\"pageSize\":\"10\",\"endCreateTime\":\"2022-01-24 23:59:59\"}}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-24 07:52:33', '2022-01-24 07:52:33', 181, 0, '', NULL, '2022-01-24 07:52:33', NULL, '2022-01-24 07:52:33', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23183, '', 0, 0, 'yudao-admin-server', 'POST', '/app-api/login', '{\"query\":{},\"body\":\"{\\n \\\"mobile\\\": \\\"15601691300\\\",\\n \\\"password\\\": \\\"admin123\\\"\\n}\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', '2022-01-28 23:40:57', '2022-01-28 23:40:57', 20, 0, '', NULL, '2022-01-28 23:40:57', NULL, '2022-01-28 23:40:57', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23184, '', 0, 0, 'yudao-admin-server', 'POST', '/app-api/login', '{\"query\":{},\"body\":\"{\\n \\\"mobile\\\": \\\"15601691300\\\",\\n \\\"password\\\": \\\"admin123\\\"\\n}\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', '2022-01-28 23:46:37', '2022-01-28 23:46:38', 236, 500, '系统异常', NULL, '2022-01-28 23:46:38', NULL, '2022-01-28 23:46:38', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23185, '', 0, 0, 'yudao-admin-server', 'POST', '/app-api/login', '{\"query\":{},\"body\":\"{\\n \\\"mobile\\\": \\\"15601691300\\\",\\n \\\"password\\\": \\\"admin123\\\"\\n}\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', '2022-01-29 00:35:08', '2022-01-29 00:35:08', 241, 500, '系统异常', NULL, '2022-01-29 00:35:08', NULL, '2022-01-29 00:35:08', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23186, '', 0, 0, 'yudao-admin-server', 'POST', '/app-api/login', '{\"query\":{},\"body\":\"{\\n \\\"mobile\\\": \\\"15601691300\\\",\\n \\\"password\\\": \\\"admin123\\\"\\n}\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', '2022-01-29 00:37:24', '2022-01-29 00:37:24', 153, 1005000000, '登录失败,账å·å¯†ç ä¸æ­£ç¡®', NULL, '2022-01-29 00:37:24', NULL, '2022-01-29 00:37:24', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23187, '', 0, 0, 'yudao-admin-server', 'POST', '/app-api/login', '{\"query\":{},\"body\":\"{\\n \\\"mobile\\\": \\\"15601691300\\\",\\n \\\"password\\\": \\\"admin123\\\"\\n}\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', '2022-01-29 00:37:51', '2022-01-29 00:37:51', 171, 0, '', NULL, '2022-01-29 00:37:51', NULL, '2022-01-29 00:37:51', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23188, '', 0, 0, 'yudao-admin-server', 'POST', '/app-api/login', '{\"query\":{},\"body\":\"{\\n \\\"mobile\\\": \\\"15601691300\\\",\\n \\\"password\\\": \\\"admin1234\\\"\\n}\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', '2022-01-29 00:37:59', '2022-01-29 00:37:59', 177, 1005000000, '登录失败,账å·å¯†ç ä¸æ­£ç¡®', NULL, '2022-01-29 00:37:59', NULL, '2022-01-29 00:37:59', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23189, '', 0, 0, 'yudao-admin-server', 'POST', '/app-api/mbr/login', '{\"query\":{},\"body\":\"{\\n \\\"mobile\\\": \\\"15601691300\\\",\\n \\\"password\\\": \\\"admin123\\\"\\n}\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', '2022-01-29 11:50:08', '2022-01-29 11:50:08', 297, 0, '', NULL, '2022-01-29 11:50:08', NULL, '2022-01-29 11:50:08', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23190, '', 0, 0, 'yudao-admin-server', 'POST', '/app-api/mbr/send-sms-code', '{\"query\":{},\"body\":\"{\\n \\\"mobile\\\": \\\"15601691399\\\",\\n \\\"scene\\\": 1\\n}\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', '2022-01-29 11:50:26', '2022-01-29 11:50:26', 131, 0, '', NULL, '2022-01-29 11:50:26', NULL, '2022-01-29 11:50:26', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23191, '', 0, 0, 'yudao-admin-server', 'POST', '/app-api/mbr/logout', '{\"query\":{},\"body\":\"\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', '2022-01-29 11:50:45', '2022-01-29 11:50:45', 14, 0, '', NULL, '2022-01-29 11:50:45', NULL, '2022-01-29 11:50:45', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23192, '', 0, 0, 'yudao-admin-server', 'POST', '/app-api/logout', '{\"query\":{},\"body\":\"\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', '2022-01-29 11:53:20', '2022-01-29 11:53:20', 9, 0, '', NULL, '2022-01-29 11:53:20', NULL, '2022-01-29 11:53:20', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23193, '', 0, 0, 'yudao-admin-server', 'POST', '/app-api/mbr/logout', '{\"query\":{},\"body\":\"\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', '2022-01-29 13:06:11', '2022-01-29 13:06:11', 30, 0, '', NULL, '2022-01-29 13:06:11', NULL, '2022-01-29 13:06:11', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23194, '', 0, 0, 'yudao-admin-server', 'POST', '/app-api/mbr/logout', '{\"query\":{},\"body\":\"\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', '2022-01-29 13:06:19', '2022-01-29 13:06:20', 13, 0, '', NULL, '2022-01-29 13:06:20', NULL, '2022-01-29 13:06:20', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23195, '', 0, 0, 'yudao-admin-server', 'POST', '/app-api/mbr/logout', '{\"query\":{},\"body\":\"\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', '2022-01-29 13:10:27', '2022-01-29 13:10:27', 21, 0, '', NULL, '2022-01-29 13:10:27', NULL, '2022-01-29 13:10:27', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23196, '', 0, 0, 'yudao-admin-server', 'POST', '/app-api/member/login', '{\"query\":{},\"body\":\"{\\n \\\"mobile\\\": \\\"15601691300\\\",\\n \\\"password\\\": \\\"admin123\\\"\\n}\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', '2022-01-29 13:58:03', '2022-01-29 13:58:04', 443, 0, '', NULL, '2022-01-29 13:58:04', NULL, '2022-01-29 13:58:04', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23197, '', 0, 0, 'yudao-admin-server', 'POST', '/app-api/member/send-sms-code', '{\"query\":{},\"body\":\"{\\n \\\"mobile\\\": \\\"15601691399\\\",\\n \\\"scene\\\": 1\\n}\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', '2022-01-29 13:58:06', '2022-01-29 13:58:07', 105, 0, '', NULL, '2022-01-29 13:58:07', NULL, '2022-01-29 13:58:07', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23198, '', 0, 0, 'yudao-admin-server', 'POST', '/app-api/member/sms-login', '{\"query\":{},\"body\":\"{\\n \\\"mobile\\\": \\\"15601691301\\\",\\n \\\"code\\\": 9999\\n}\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', '2022-01-29 13:58:09', '2022-01-29 13:58:09', 38, 1005001001, '验è¯ç å·²è¿‡æœŸ', NULL, '2022-01-29 13:58:09', NULL, '2022-01-29 13:58:09', b'0', 1); COMMIT; -- ---------------------------- --- Table structure for inf_api_error_log +-- Table structure for infra_api_error_log -- ---------------------------- -DROP TABLE IF EXISTS `inf_api_error_log`; -CREATE TABLE `inf_api_error_log` ( +DROP TABLE IF EXISTS `infra_api_error_log`; +CREATE TABLE `infra_api_error_log` ( `id` int NOT NULL AUTO_INCREMENT COMMENT 'ç¼–å·', - `trace_id` varchar(64) NOT NULL COMMENT '链路追踪编å·\n *\n * 一般æ¥è¯´ï¼Œé€šè¿‡é“¾è·¯è¿½è¸ªç¼–å·ï¼Œå¯ä»¥å°†è®¿é—®æ—¥å¿—,错误日志,链路追踪日志,logger æ‰“å°æ—¥å¿—等,结åˆåœ¨ä¸€èµ·ï¼Œä»Žè€Œè¿›è¡ŒæŽ’错。', + `trace_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '链路追踪编å·\n *\n * 一般æ¥è¯´ï¼Œé€šè¿‡é“¾è·¯è¿½è¸ªç¼–å·ï¼Œå¯ä»¥å°†è®¿é—®æ—¥å¿—,错误日志,链路追踪日志,logger æ‰“å°æ—¥å¿—等,结åˆåœ¨ä¸€èµ·ï¼Œä»Žè€Œè¿›è¡ŒæŽ’错。', `user_id` int NOT NULL DEFAULT '0' COMMENT '用户编å·', `user_type` tinyint NOT NULL DEFAULT '0' COMMENT '用户类型', - `application_name` varchar(50) NOT NULL COMMENT '应用å\n *\n * ç›®å‰è¯»å– spring.application.name', - `request_method` varchar(16) NOT NULL COMMENT '请求方法å', - `request_url` varchar(255) NOT NULL COMMENT '请求地å€', - `request_params` varchar(8000) NOT NULL COMMENT 'è¯·æ±‚å‚æ•°', - `user_ip` varchar(50) NOT NULL COMMENT '用户 IP', - `user_agent` varchar(512) NOT NULL COMMENT 'æµè§ˆå™¨ UA', + `application_name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '应用å\n *\n * ç›®å‰è¯»å– spring.application.name', + `request_method` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求方法å', + `request_url` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求地å€', + `request_params` varchar(8000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'è¯·æ±‚å‚æ•°', + `user_ip` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户 IP', + `user_agent` varchar(512) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'æµè§ˆå™¨ UA', `exception_time` datetime NOT NULL COMMENT '异常å‘生时间', - `exception_name` varchar(128) NOT NULL DEFAULT '' COMMENT '异常å\n *\n * {@link Throwable#getClass()} 的类全å', - `exception_message` text NOT NULL COMMENT '异常导致的消æ¯\n *\n * {@link cn.iocoder.common.framework.util.ExceptionUtil#getMessage(Throwable)}', - `exception_root_cause_message` text NOT NULL COMMENT '异常导致的根消æ¯\n *\n * {@link cn.iocoder.common.framework.util.ExceptionUtil#getRootCauseMessage(Throwable)}', - `exception_stack_trace` text NOT NULL COMMENT '异常的栈轨迹\n *\n * {@link cn.iocoder.common.framework.util.ExceptionUtil#getServiceException(Exception)}', - `exception_class_name` varchar(512) NOT NULL COMMENT '异常å‘生的类全å\n *\n * {@link StackTraceElement#getClassName()}', - `exception_file_name` varchar(512) NOT NULL COMMENT '异常å‘生的类文件\n *\n * {@link StackTraceElement#getFileName()}', - `exception_method_name` varchar(512) NOT NULL COMMENT '异常å‘生的方法å\n *\n * {@link StackTraceElement#getMethodName()}', + `exception_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '异常å\n *\n * {@link Throwable#getClass()} 的类全å', + `exception_message` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常导致的消æ¯\n *\n * {@link cn.iocoder.common.framework.util.ExceptionUtil#getMessage(Throwable)}', + `exception_root_cause_message` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常导致的根消æ¯\n *\n * {@link cn.iocoder.common.framework.util.ExceptionUtil#getRootCauseMessage(Throwable)}', + `exception_stack_trace` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常的栈轨迹\n *\n * {@link cn.iocoder.common.framework.util.ExceptionUtil#getServiceException(Exception)}', + `exception_class_name` varchar(512) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常å‘生的类全å\n *\n * {@link StackTraceElement#getClassName()}', + `exception_file_name` varchar(512) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常å‘生的类文件\n *\n * {@link StackTraceElement#getFileName()}', + `exception_method_name` varchar(512) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常å‘生的方法å\n *\n * {@link StackTraceElement#getMethodName()}', `exception_line_number` int NOT NULL COMMENT '异常å‘生的方法所在行\n *\n * {@link StackTraceElement#getLineNumber()}', `process_status` tinyint NOT NULL COMMENT '处ç†çжæ€', `process_time` datetime DEFAULT NULL COMMENT 'å¤„ç†æ—¶é—´', `process_user_id` int DEFAULT '0' COMMENT '处ç†ç”¨æˆ·ç¼–å·', - `creator` varchar(64) DEFAULT '' COMMENT '创建者', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) DEFAULT '' COMMENT '更新者', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编å·', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=230 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统异常日志'; +) ENGINE=InnoDB AUTO_INCREMENT=235 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统异常日志'; -- ---------------------------- --- Records of inf_api_error_log +-- Records of infra_api_error_log -- ---------------------------- BEGIN; +INSERT INTO `infra_api_error_log` VALUES (230, '', 1, 2, 'yudao-admin-server', 'POST', '/api/bpm/process-instance/create', '{\"query\":{},\"body\":\"{\\\"processDefinitionId\\\":\\\"self:2:3a5a065e-76b1-11ec-9c66-a2380e71991a\\\",\\\"variables\\\":{\\\"field121\\\":\\\"aaa\\\",\\\"field122\\\":[1]}}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', '2022-01-23 12:50:46', 'java.lang.RuntimeException', 'RuntimeException: 123', 'RuntimeException: 123', 'java.lang.RuntimeException: 123\n at cn.iocoder.yudao.adminserver.modules.bpm.service.task.impl.BpmProcessInstanceServiceImpl.createProcessInstance0(BpmProcessInstanceServiceImpl.java:134)\n at cn.iocoder.yudao.adminserver.modules.bpm.service.task.impl.BpmProcessInstanceServiceImpl.createProcessInstance(BpmProcessInstanceServiceImpl.java:94)\n at cn.iocoder.yudao.adminserver.modules.bpm.service.task.impl.BpmProcessInstanceServiceImpl$$FastClassBySpringCGLIB$$1ea09b96.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123)\n at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)\n at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.adminserver.modules.bpm.service.task.impl.BpmProcessInstanceServiceImpl$$EnhancerBySpringCGLIB$$f97788b6.createProcessInstance()\n at cn.iocoder.yudao.adminserver.modules.bpm.controller.task.BpmProcessInstanceController.createProcessInstance(BpmProcessInstanceController.java:33)\n at cn.iocoder.yudao.adminserver.modules.bpm.controller.task.BpmProcessInstanceController$$FastClassBySpringCGLIB$$ad8c2f14.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around0(OperateLogAspect.java:88)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:75)\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634)\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624)\n at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:61)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.adminserver.modules.bpm.controller.task.BpmProcessInstanceController$$EnhancerBySpringCGLIB$$7a6fceef.createProcessInstance()\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at de.codecentric.boot.admin.server.ui.web.servlet.HomepageForwardingFilter.doFilter(HomepageForwardingFilter.java:73)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.activiti.core.web.ActivitiWebFilter.doFilterInternal(ActivitiWebFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tenant.core.security.TenantSecurityWebFilter.doFilterInternal(TenantSecurityWebFilter.java:43)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:62)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.apilog.core.filter.ApiAccessLogFilter.doFilterInternal(ApiAccessLogFilter.java:59)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tenant.core.web.TenantContextWebFilter.doFilterInternal(TenantContextWebFilter.java:32)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.web.core.filter.CacheRequestBodyFilter.doFilterInternal(CacheRequestBodyFilter.java:22)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:97)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\n', 'cn.iocoder.yudao.adminserver.modules.bpm.service.task.impl.BpmProcessInstanceServiceImpl', 'BpmProcessInstanceServiceImpl.java', 'createProcessInstance0', 134, 0, NULL, 0, NULL, '2022-01-23 12:50:46', NULL, '2022-01-23 12:50:46', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (231, '', 0, 0, 'yudao-admin-server', 'POST', '/api/login', '{\"query\":{},\"body\":\"{\\n \\\"username\\\": \\\"admin\\\",\\n \\\"password\\\": \\\"admin123\\\",\\n \\\"uuid\\\": \\\"3acd87a09a4f48fb9118333780e94883\\\",\\n \\\"code\\\": \\\"1024\\\"\\n}\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', '2022-01-28 21:03:26', 'java.lang.IllegalArgumentException', 'IllegalArgumentException: retrieveUser returned null - a violation of the interface contract', 'IllegalArgumentException: retrieveUser returned null - a violation of the interface contract', 'java.lang.IllegalArgumentException: retrieveUser returned null - a violation of the interface contract\n at org.springframework.util.Assert.notNull(Assert.java:201)\n at org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:143)\n at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:182)\n at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:201)\n at org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter$AuthenticationManagerDelegator.authenticate(WebSecurityConfigurerAdapter.java:518)\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)\n at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)\n at com.sun.proxy.$Proxy156.authenticate(Unknown Source)\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)\n at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)\n at com.sun.proxy.$Proxy156.authenticate(Unknown Source)\n at cn.iocoder.yudao.adminserver.modules.system.service.auth.impl.SysAuthServiceImpl.login0(SysAuthServiceImpl.java:157)\n at cn.iocoder.yudao.adminserver.modules.system.service.auth.impl.SysAuthServiceImpl.login(SysAuthServiceImpl.java:114)\n at cn.iocoder.yudao.adminserver.modules.system.controller.auth.SysAuthController.login(SysAuthController.java:59)\n at cn.iocoder.yudao.adminserver.modules.system.controller.auth.SysAuthController$$FastClassBySpringCGLIB$$9b8cbcb.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around0(OperateLogAspect.java:88)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:75)\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634)\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624)\n at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.adminserver.modules.system.controller.auth.SysAuthController$$EnhancerBySpringCGLIB$$ed8ab69e.login()\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at de.codecentric.boot.admin.server.ui.web.servlet.HomepageForwardingFilter.doFilter(HomepageForwardingFilter.java:73)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.activiti.core.web.ActivitiWebFilter.doFilterInternal(ActivitiWebFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:60)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tenant.core.web.TenantContextWebFilter.doFilterInternal(TenantContextWebFilter.java:32)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.web.core.filter.CacheRequestBodyFilter.doFilterInternal(CacheRequestBodyFilter.java:22)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:97)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\n', 'org.springframework.util.Assert', 'Assert.java', 'notNull', 201, 0, NULL, 0, NULL, '2022-01-28 21:03:26', NULL, '2022-01-28 21:03:26', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (232, '', 0, 0, 'yudao-admin-server', 'POST', '/api/login', '{\"query\":{},\"body\":\"{\\n \\\"username\\\": \\\"admin\\\",\\n \\\"password\\\": \\\"admin123\\\",\\n \\\"uuid\\\": \\\"3acd87a09a4f48fb9118333780e94883\\\",\\n \\\"code\\\": \\\"1024\\\"\\n}\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', '2022-01-28 21:11:21', 'java.lang.IllegalArgumentException', 'IllegalArgumentException: retrieveUser returned null - a violation of the interface contract', 'IllegalArgumentException: retrieveUser returned null - a violation of the interface contract', 'java.lang.IllegalArgumentException: retrieveUser returned null - a violation of the interface contract\n at org.springframework.util.Assert.notNull(Assert.java:201)\n at org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:143)\n at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:182)\n at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:201)\n at org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter$AuthenticationManagerDelegator.authenticate(WebSecurityConfigurerAdapter.java:518)\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)\n at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)\n at com.sun.proxy.$Proxy156.authenticate(Unknown Source)\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)\n at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)\n at com.sun.proxy.$Proxy156.authenticate(Unknown Source)\n at cn.iocoder.yudao.adminserver.modules.system.service.auth.impl.SysAuthServiceImpl.login0(SysAuthServiceImpl.java:158)\n at cn.iocoder.yudao.adminserver.modules.system.service.auth.impl.SysAuthServiceImpl.login(SysAuthServiceImpl.java:115)\n at cn.iocoder.yudao.adminserver.modules.system.controller.auth.SysAuthController.login(SysAuthController.java:59)\n at cn.iocoder.yudao.adminserver.modules.system.controller.auth.SysAuthController$$FastClassBySpringCGLIB$$9b8cbcb.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around0(OperateLogAspect.java:88)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:75)\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634)\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624)\n at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.adminserver.modules.system.controller.auth.SysAuthController$$EnhancerBySpringCGLIB$$11506edf.login()\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at de.codecentric.boot.admin.server.ui.web.servlet.HomepageForwardingFilter.doFilter(HomepageForwardingFilter.java:73)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.activiti.core.web.ActivitiWebFilter.doFilterInternal(ActivitiWebFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:60)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tenant.core.web.TenantContextWebFilter.doFilterInternal(TenantContextWebFilter.java:32)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.web.core.filter.CacheRequestBodyFilter.doFilterInternal(CacheRequestBodyFilter.java:22)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:97)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\n', 'org.springframework.util.Assert', 'Assert.java', 'notNull', 201, 0, NULL, 0, NULL, '2022-01-28 21:11:21', NULL, '2022-01-28 21:11:21', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (233, '', 0, 0, 'yudao-admin-server', 'POST', '/app-api/login', '{\"query\":{},\"body\":\"{\\n \\\"mobile\\\": \\\"15601691300\\\",\\n \\\"password\\\": \\\"admin123\\\"\\n}\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', '2022-01-28 23:46:38', 'java.lang.IllegalArgumentException', 'IllegalArgumentException: Object [UsernamePasswordAuthenticationToken [Principal=15601691300, Credentials=[PROTECTED], Authenticated=false, Details=null, Granted Authorities=[]]] is not instanceof [class cn.iocoder.yudao.framework.security.core.authentication.MultiUsernamePasswordAuthenticationToken]', 'IllegalArgumentException: Object [UsernamePasswordAuthenticationToken [Principal=15601691300, Credentials=[PROTECTED], Authenticated=false, Details=null, Granted Authorities=[]]] is not instanceof [class cn.iocoder.yudao.framework.security.core.authentication.MultiUsernamePasswordAuthenticationToken]', 'java.lang.IllegalArgumentException: Object [UsernamePasswordAuthenticationToken [Principal=15601691300, Credentials=[PROTECTED], Authenticated=false, Details=null, Granted Authorities=[]]] is not instanceof [class cn.iocoder.yudao.framework.security.core.authentication.MultiUsernamePasswordAuthenticationToken]\n at cn.hutool.core.lang.Assert.isInstanceOf(Assert.java:704)\n at cn.hutool.core.lang.Assert.isInstanceOf(Assert.java:682)\n at cn.iocoder.yudao.framework.security.core.authentication.MultiUserDetailsAuthenticationProvider.getUserType(MultiUserDetailsAuthenticationProvider.java:69)\n at cn.iocoder.yudao.framework.security.core.authentication.MultiUserDetailsAuthenticationProvider.selectService(MultiUserDetailsAuthenticationProvider.java:61)\n at cn.iocoder.yudao.framework.security.core.authentication.MultiUserDetailsAuthenticationProvider.retrieveUser(MultiUserDetailsAuthenticationProvider.java:56)\n at org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:133)\n at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:182)\n at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:201)\n at org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter$AuthenticationManagerDelegator.authenticate(WebSecurityConfigurerAdapter.java:518)\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)\n at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)\n at com.sun.proxy.$Proxy156.authenticate(Unknown Source)\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)\n at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)\n at com.sun.proxy.$Proxy156.authenticate(Unknown Source)\n at cn.iocoder.yudao.module.member.service.auth.AuthServiceImpl.login0(AuthServiceImpl.java:179)\n at cn.iocoder.yudao.module.member.service.auth.AuthServiceImpl.login(AuthServiceImpl.java:91)\n at cn.iocoder.yudao.module.member.service.auth.AuthServiceImpl$$FastClassBySpringCGLIB$$eedc869c.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)\n at cn.iocoder.yudao.module.member.service.auth.AuthServiceImpl$$EnhancerBySpringCGLIB$$c685808a.login()\n at cn.iocoder.yudao.module.member.controller.app.auth.AppAuthController.login(AppAuthController.java:44)\n at cn.iocoder.yudao.module.member.controller.app.auth.AppAuthController$$FastClassBySpringCGLIB$$107086c2.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around0(OperateLogAspect.java:88)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:75)\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634)\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624)\n at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.module.member.controller.app.auth.AppAuthController$$EnhancerBySpringCGLIB$$485c7e33.login()\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at de.codecentric.boot.admin.server.ui.web.servlet.HomepageForwardingFilter.doFilter(HomepageForwardingFilter.java:73)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.activiti.core.web.ActivitiWebFilter.doFilterInternal(ActivitiWebFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:60)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.apilog.core.filter.ApiAccessLogFilter.doFilterInternal(ApiAccessLogFilter.java:63)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tenant.core.web.TenantContextWebFilter.doFilterInternal(TenantContextWebFilter.java:32)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.web.core.filter.CacheRequestBodyFilter.doFilterInternal(CacheRequestBodyFilter.java:22)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:97)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\n', 'cn.hutool.core.lang.Assert', 'Assert.java', 'isInstanceOf', 704, 0, NULL, 0, NULL, '2022-01-28 23:46:38', NULL, '2022-01-28 23:46:38', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (234, '', 0, 0, 'yudao-admin-server', 'POST', '/app-api/login', '{\"query\":{},\"body\":\"{\\n \\\"mobile\\\": \\\"15601691300\\\",\\n \\\"password\\\": \\\"admin123\\\"\\n}\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', '2022-01-29 00:35:08', 'java.lang.IllegalArgumentException', 'IllegalArgumentException: Object [UsernamePasswordAuthenticationToken [Principal=15601691300, Credentials=[PROTECTED], Authenticated=false, Details=null, Granted Authorities=[]]] is not instanceof [class cn.iocoder.yudao.framework.security.core.authentication.MultiUsernamePasswordAuthenticationToken]', 'IllegalArgumentException: Object [UsernamePasswordAuthenticationToken [Principal=15601691300, Credentials=[PROTECTED], Authenticated=false, Details=null, Granted Authorities=[]]] is not instanceof [class cn.iocoder.yudao.framework.security.core.authentication.MultiUsernamePasswordAuthenticationToken]', 'java.lang.IllegalArgumentException: Object [UsernamePasswordAuthenticationToken [Principal=15601691300, Credentials=[PROTECTED], Authenticated=false, Details=null, Granted Authorities=[]]] is not instanceof [class cn.iocoder.yudao.framework.security.core.authentication.MultiUsernamePasswordAuthenticationToken]\n at cn.hutool.core.lang.Assert.isInstanceOf(Assert.java:704)\n at cn.hutool.core.lang.Assert.isInstanceOf(Assert.java:682)\n at cn.iocoder.yudao.framework.security.core.authentication.MultiUserDetailsAuthenticationProvider.getUserType(MultiUserDetailsAuthenticationProvider.java:69)\n at cn.iocoder.yudao.framework.security.core.authentication.MultiUserDetailsAuthenticationProvider.selectService(MultiUserDetailsAuthenticationProvider.java:61)\n at cn.iocoder.yudao.framework.security.core.authentication.MultiUserDetailsAuthenticationProvider.retrieveUser(MultiUserDetailsAuthenticationProvider.java:56)\n at org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:133)\n at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:182)\n at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:201)\n at org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter$AuthenticationManagerDelegator.authenticate(WebSecurityConfigurerAdapter.java:518)\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)\n at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)\n at com.sun.proxy.$Proxy156.authenticate(Unknown Source)\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)\n at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)\n at com.sun.proxy.$Proxy156.authenticate(Unknown Source)\n at cn.iocoder.yudao.module.member.service.auth.AuthServiceImpl.login0(AuthServiceImpl.java:179)\n at cn.iocoder.yudao.module.member.service.auth.AuthServiceImpl.login(AuthServiceImpl.java:91)\n at cn.iocoder.yudao.module.member.service.auth.AuthServiceImpl$$FastClassBySpringCGLIB$$eedc869c.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)\n at cn.iocoder.yudao.module.member.service.auth.AuthServiceImpl$$EnhancerBySpringCGLIB$$6ee399ec.login()\n at cn.iocoder.yudao.module.member.controller.app.auth.AppAuthController.login(AppAuthController.java:46)\n at cn.iocoder.yudao.module.member.controller.app.auth.AppAuthController$$FastClassBySpringCGLIB$$107086c2.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around0(OperateLogAspect.java:88)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:75)\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634)\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624)\n at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.module.member.controller.app.auth.AppAuthController$$EnhancerBySpringCGLIB$$bd77834f.login()\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at de.codecentric.boot.admin.server.ui.web.servlet.HomepageForwardingFilter.doFilter(HomepageForwardingFilter.java:73)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.activiti.core.web.ActivitiWebFilter.doFilterInternal(ActivitiWebFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:60)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.apilog.core.filter.ApiAccessLogFilter.doFilterInternal(ApiAccessLogFilter.java:63)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tenant.core.web.TenantContextWebFilter.doFilterInternal(TenantContextWebFilter.java:32)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.web.core.filter.CacheRequestBodyFilter.doFilterInternal(CacheRequestBodyFilter.java:22)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:97)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\n', 'cn.hutool.core.lang.Assert', 'Assert.java', 'isInstanceOf', 704, 0, NULL, 0, NULL, '2022-01-29 00:35:08', NULL, '2022-01-29 00:35:08', b'0', 1); COMMIT; -- ---------------------------- --- Table structure for inf_config +-- Table structure for infra_config -- ---------------------------- -DROP TABLE IF EXISTS `inf_config`; -CREATE TABLE `inf_config` ( +DROP TABLE IF EXISTS `infra_config`; +CREATE TABLE `infra_config` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '傿•°ä¸»é”®', - `group` varchar(50) NOT NULL COMMENT '傿•°åˆ†ç»„', + `group` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '傿•°åˆ†ç»„', `type` tinyint NOT NULL COMMENT '傿•°ç±»åž‹', - `name` varchar(100) NOT NULL DEFAULT '' COMMENT '傿•°åç§°', - `key` varchar(100) NOT NULL DEFAULT '' COMMENT '傿•°é”®å', - `value` varchar(500) NOT NULL DEFAULT '' COMMENT '傿•°é”®å€¼', + `name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '傿•°åç§°', + `key` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '傿•°é”®å', + `value` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '傿•°é”®å€¼', `sensitive` bit(1) NOT NULL COMMENT 'æ˜¯å¦æ•感', - `remark` varchar(500) DEFAULT NULL COMMENT '备注', - `creator` varchar(64) DEFAULT '' COMMENT '创建者', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) DEFAULT '' COMMENT '更新者', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='傿•°é…置表'; -- ---------------------------- --- Records of inf_config +-- Records of infra_config -- ---------------------------- BEGIN; -INSERT INTO `inf_config` VALUES (1, 'ui', 1, '主框架页-默认皮肤样å¼åç§°', 'sys.index.skinName', 'skin-blue', b'0', 'è“色 skin-blueã€ç»¿è‰² skin-greenã€ç´«è‰² skin-purpleã€çº¢è‰² skin-redã€é»„色 skin-yellow', 'admin', '2021-01-05 17:03:48', '1', '2021-12-16 07:42:36', b'0'); -INSERT INTO `inf_config` VALUES (2, 'biz', 1, '用户管ç†-è´¦å·åˆå§‹å¯†ç ', 'sys.user.init-password', '123456', b'0', 'åˆå§‹åŒ–å¯†ç  123456', 'admin', '2021-01-05 17:03:48', '', '2021-04-13 03:48:02', b'0'); -INSERT INTO `inf_config` VALUES (3, 'ui', 1, '主框架页-ä¾§è¾¹æ ä¸»é¢˜', 'sys.index.sideTheme', 'theme-dark', b'0', '深色主题theme-dark,浅色主题theme-light', 'admin', '2021-01-05 17:03:48', '', '2021-01-19 03:05:21', b'0'); -INSERT INTO `inf_config` VALUES (4, '1', 2, 'xxx', 'demo.test', '10', b'0', '5', '', '2021-01-19 03:10:26', '', '2021-01-20 09:25:55', b'0'); -INSERT INTO `inf_config` VALUES (5, 'xxx', 2, 'xxx', 'xxx', 'xxx', b'1', 'xxx', '', '2021-02-09 20:06:47', '', '2021-02-09 20:06:47', b'0'); +INSERT INTO `infra_config` VALUES (1, 'ui', 1, '主框架页-默认皮肤样å¼åç§°', 'sys.index.skinName', 'skin-blue', b'0', 'è“色 skin-blueã€ç»¿è‰² skin-greenã€ç´«è‰² skin-purpleã€çº¢è‰² skin-redã€é»„色 skin-yellow', 'admin', '2021-01-05 17:03:48', '1', '2021-12-16 07:42:36', b'0'); +INSERT INTO `infra_config` VALUES (2, 'biz', 1, '用户管ç†-è´¦å·åˆå§‹å¯†ç ', 'sys.user.init-password', '123456', b'0', 'åˆå§‹åŒ–å¯†ç  123456', 'admin', '2021-01-05 17:03:48', '', '2021-04-13 03:48:02', b'0'); +INSERT INTO `infra_config` VALUES (3, 'ui', 1, '主框架页-ä¾§è¾¹æ ä¸»é¢˜', 'sys.index.sideTheme', 'theme-dark', b'0', '深色主题theme-dark,浅色主题theme-light', 'admin', '2021-01-05 17:03:48', '', '2021-01-19 03:05:21', b'0'); +INSERT INTO `infra_config` VALUES (4, '1', 2, 'xxx', 'demo.test', '10', b'0', '5', '', '2021-01-19 03:10:26', '', '2021-01-20 09:25:55', b'0'); +INSERT INTO `infra_config` VALUES (5, 'xxx', 2, 'xxx', 'xxx', 'xxx', b'1', 'xxx', '', '2021-02-09 20:06:47', '', '2021-02-09 20:06:47', b'0'); COMMIT; -- ---------------------------- --- Table structure for inf_file +-- Table structure for infra_file -- ---------------------------- -DROP TABLE IF EXISTS `inf_file`; -CREATE TABLE `inf_file` ( - `id` varchar(188) NOT NULL COMMENT '文件路径', - `type` varchar(63) DEFAULT NULL COMMENT '文件类型', +DROP TABLE IF EXISTS `infra_file`; +CREATE TABLE `infra_file` ( + `id` varchar(188) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文件路径', + `type` varchar(63) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '文件类型', `content` mediumblob NOT NULL COMMENT '文件内容', - `creator` varchar(64) DEFAULT '' COMMENT '创建者', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) DEFAULT '' COMMENT '更新者', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编å·', @@ -822,57 +1245,57 @@ CREATE TABLE `inf_file` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文件表'; -- ---------------------------- --- Records of inf_file +-- Records of infra_file -- ---------------------------- BEGIN; -INSERT INTO `inf_file` VALUES ('1c164a1d-5f2d-460b-a0bf-dfc33deeaab1', 'jpg', 0xFFD8FFE000104A46494600010100000100010000FFE202284943435F50524F46494C450001010000021800000000021000006D6E74725247422058595A2000000000000000000000000061637370000000000000000000000000000000000000000000000000000000010000F6D6000100000000D32D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000964657363000000F0000000747258595A00000164000000146758595A00000178000000146258595A0000018C0000001472545243000001A00000002867545243000001A00000002862545243000001A00000002877747074000001C80000001463707274000001DC0000003C6D6C756300000000000000010000000C656E5553000000580000001C0073005200470042000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000058595A200000000000006FA2000038F50000039058595A2000000000000062990000B785000018DA58595A2000000000000024A000000F840000B6CF706172610000000000040000000266660000F2A700000D59000013D000000A5B000000000000000058595A20000000000000F6D6000100000000D32D6D6C756300000000000000010000000C656E5553000000200000001C0047006F006F0067006C006500200049006E0063002E00200032003000310036FFDB00430001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101FFDB00430101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101FFC00011080190019003011100021101031101FFC4001F0000010402030101000000000000000000000405060702030108090A0BFFC400511000010302040305040804040404040309010203110421000506311241510713226171088191A1091432B1C1D1E1F015234252162462F1335392D20A4372A2253482E218356317192655648393A3B2FFC4001E0100010403010101000000000000000000000304050601020708090AFFC4004A1100010204040306050303030302030607010211000321310405415112617106138191A1F00722B1C1D11432E10842F115235233629272A20924E21617344382C2D225354463B2F2FFDA000C03010002110311003F00FCFF00F041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C10418208FD87B813D3E67F3C7788F3FC6E69363C22D6FDDF0411BB815D3E63F3C104286410153D460823760820C10418208E4027618208E7815D3E63F3C1041C0AE9F31F9E0820E0574F98FCF04119A10A936E5D479608525EBE1F78DBC0AE9F31F9E08520E0574F98FCF0410702BA7CC7E78208DADA0999B6DE7F8E08236F77E7F2FD70410777E7F2FD70410777E7F2FD704118A93C317999C10CF13AFBFF008C638219C72013B608232E03D47CFF002C1046694F0CCF38FDFCF094D4158006875877214CC4D4FD59E32C6132985EBAD1DBC7E9189A1DBE576B559DD9FA7DE0C2D0D1724AAA4545ABF8AC18553348A7AD1FC695F7ADF44E1946C9F53F76F5BC6C473F76174E33BB4F03024EB57AF9368DA3830E51803308511C2536ABBB6EC6FE9D1A366135E0FBF1DE92CDF335347DDEE075873FAB3873DD005AC29CB7F4D6B780E5F4D5A851A8FB2D5C6FCFDE363F973C309B988C092848E23661A353F0E1FEF1B1CBBF5AEA52806AD7954F9B1B391E70DFF567A9D7C397282190654A510010227ED1F523D3E3A0CBA7F68FE44CB50E2F95D8D8BEBB6EFE908AB3AC2766471AE623E4A8721E9CB4B73D7AC467586B5D2BA4A851555F54D2B3108594242AE1691B7849036DA2498EB6BC763FE0E62FBF335285B02145D07567AB3373E839C707F8B3F13F099FCB1290B41E0052E143F8D47E2EF1E7E769BDBC67DABAADECBA8415508529008E12384980678418B58EC46F7DFD51D8BEC1E2B2C54A331040053420A6D4D5DB4616EB78F1AF6AB1E8C5266709A17DA8E49ADFDF98A15D4F1A96E288FAC39726D6264FDE7974E5B63D138341C3C89686F942403B1259FA01BF3146BF11C561D4AC41535D46ACE2E3416D980B78C33F7B56CB87BCF13677208B0B58013EFE77E5BE1D4FC4E164A0103E602A5EA0F46E9EB5B45932826536F4DD9C352D4F3D2FB3D52AD755FC9CB69D6AA85405AE080831637111067A72BE2B38BCC82D570DD5DBF34FB545E26B329A26A101DC0DBCB6D7DF296D2692FAB2135D9FD5200FB41B252088822E08322C6FCFA5F112BC5898E259248B9B01B6DC8F3B5AF09DD10CA04B0BDBDDFCB5768E2B75F6579237F56CBC0EEC82952B8ACBE1B022790F58E57DB0B48C089EB97C60A9BF6D051CF2BDFD0738CF0B7ED2DBEBF58A8B526BFF00AE05C41924CCDE6E6F620C5C7A82011CBA064F952259494A49B3DC57AFD1875DE32C5EF4D9B4FE7E914E669A892E9971405D51B73DE4FF00B8169E78BD48CAC2C070C031353E0C4FBBD214960D6BEFA7D2AFD5CC57B9BE76C282A48264F31F388F2C5830A8561C0094150029CEB5B3D2FEE90B02458C5659CE748414107884AB8960CF0743CC103623167CBE79596EE94016DFA3DBC474D602A56FABFBB539443ABB50B652A4B55A16A0090D94F09932624F43E9E98B127284E3903893DDCB7625C9A1A3B5F7FB466F57751D1B9EF688457E7D9A212B536D0A74916295A5C2F728099244741BF4387185ECAE5929655FAC4F10A974B355CDDB63E2E7687F845F7038881A74156ADBD80C46AD1966479EEB3AE4D1D165F58FBCEAB852A34AFA112AB495A91C113E7F3C67138DCAB26429B1929D22A0A92096E4FAB69CD8690FD58B29038998F420ED607C5F4D23B15A53D8935667C935FA8EB5191D227816D347B97D758857DB061C0A68A45A08BCD8CC6397E79F18303226AB0982FF00E6785D2B354849D2A4172F5A13B46E9C6CB482490966E120BB1B9B1EB77F28EC2699F669EC9F45774E57D00ACCC1AB9A90F3A8950DD5C21445FEE0440C72CCEFE2063F16B2A9092949774049513D0B75BF4143185E669593C441239EA1F73A0A103520EF16DB35D9169D60B392A825A5A424B72A3C2102D75493EF323D310723033BB529EF714852384BB11551275D400DA3B93D22B79BC93982870034D75F00FD4921BF2C198EB9692092B4DE67C43A5C6D6B5B162C2F651583471CA4958005003E16BD3F310F2B2598925C103426F5F2B5B5BED15FE6DDA286F83B92823C5C478922236DCFC45EF893C360F1085702B09316C59FE617A060C77E40F51599C365533880AB01424569E5D6C4E8763F43BDDF9FCBF5C7C6A8FB131B1B6F7BF4E5EBE78208D9DD93B19F77EB8208CC20A6666FD44608239C1041820830410A1948215239E082377027A7CCFE782083813D3E67F3C1041C00EC27E38208D884004CA62DE7E5CFF0C10A4BD7C3EF1B3813D3E67F3C10A41C09E9F33F9E0820E04F4F99FCF0411B5B481303A608236E0820C10418208D0FEC98DA4CFEFD7E6704369C2A7937D0084D82108DEC6EAF4C10429C1046B7397BFF007FBEB85E454A81B375D768D54A2080CEFEDBE91AF1B2C0248D296E821DCA415F086277E956F0E9061B2BE57D5B6F7E71209C10500785CF3A0F37F1A6FAC7307A1F81C3757CA1EE7503D2B6E7CA36FD3357840DEBA79FE233458906C4EC0D89DF61CF1B494158E32A219CF0B78EFF0096D371A99A9927846B43A93CB95EBEAD1B0DAE6C3CEDF7E135E3E725624CB4A94FF28A3EDCB9F3DA31330B24CA33662920B7155B7D4927E9CB584B599BD1E4CC2EAAB9C42184A655C6A090A001DA489F389DBD316AC87B198ACF6721465AFE6503504B545C0B373357E4D1CCFB55DBEC2767E4CD4A26A78D20FF00700C40237D3EA6E0D23AA9DA97B41D332DBD41A6DC42570A471A162EA883736EBCFDF8F507633E14272F952E66270E1870A99419EAFAD5DC0D2F78F2376E3E2FCCCC8CD932672812541252A3F2935B0BEFA0E978E906A3D759BE6D50BFE3B50F2FBF512C00A5917BAAE9240B0E6664917DF1E89C8F23C248C3818591292500098FC2CA61435D983B0A9BED1E7CC7F6971666A973E72D426124024D35B39BBBD3C621A3307585FF002524A567ED106D3E666F7B01F118B1AE461928799C0929B0000E7561E7A97DAB0C5199FEACB1750258B9F017E6684EBCA14AA96B1F5B45995B951FDBE2E020C0E289E1BF5237EA31058BCD254B79682DC2E2EEEDD2B5D4EFE0DAAF0495BA8861A335EA46F41A915AE8226D94E87AE6529ABCCD680C7DA2952900F08BFD9E2927CCFEB8AD4FC7AB1130CBF9893D75ADFDB1A690DB80E1EA0B373BD036B4035BD3C21C333D4F91E46D0672361B554905350E18F09488175023D23F2930B96E2312B515F114D38433B5DDB5E437F28CCBC419CE92F6605DDC543DAFEDDA29BD41AE1350B50CCAA949249E16D1C5C23A094102DCF7F28C5830B904E5280E025C8AB352FCDFC7CEA215E015F6C3DEBE91546799EADC2D990191C45B5055C8E7304116DAF8BBE53D9A595259160E5C10CFEBE9E2D521962CF5DC5BDFD3C04573996A24B4140AED3D63EF31D07E62D8E9596E401013F2ECC1897A56BE356BFA1D420EA5BDF5F7F4AEF3AD4C1DE0E05C70F14DEDBF95BE1E78B561B23E2203300D417AB7974ABD342F0A2106AD5F2F7B8BC5719A67CE9E2217293B4131CF97E38B0E1F26C34A40330A53C357207DCEDE20C6C4117D62249CE6BAAD6696929AA2B5D7D5C284B2D2DD0924C429494A8226D1C513CAD384B1D8DCAB2F149D2828034701D86B5F76BC64214A4A940512CE5F7B7BE9168692F674ED1B5938DD5D4E5AACBB2E708597D6EB654942B9941215B6FCE76C737CE7E25CBCB5E5E194E5CB70D8B01A5B52CDE71AB6BB74BF4BEFEDE3B33A5FD98B4069B525ED515BFC7AB7C0A61A525D61348A4C158F0A8A1C0B3D640E9D39DE3FE2666999CD2995355864A5DC825D6F4AD886FB36D19FF74A552D2EA0BB8D49EB4AEBA336BADF946F643A6A8D34993D150D22109E14A8D3B0A58E1020F196F8A6013BDF7E78A86638BC7E6734CD54E9F3261FEE0A98906C2C0B1D80A51AE6012E7B01F3569BB72BD76AF4110FCDF581A4595F12AA03F370EF7496639A532019E805ADD4E12C0E439962A60E34288243B80E4022E59EC7DDA35EE26B5016AB0DF7E5EEB158675AE6951C6B7B312DEE4B6A4A9503A711BDFF00327963A7E4DD90594A0CCC389967240A1D74AD58C024CCAB8507D2B5E75F75EA22A8CF3B4FA36520533E85405719EF00EBB898103974B7AF47CAFB21C20BCB4CB048E1000DE9B5D80B1F4895C0C86204CBBD5F9BB0A8A50783F952FA8BB5C5242F81EE217809503693D2763EF1B5B95D309D9BC0E1C0FD44C9680003F3149D8D8989944992194DC99AF5D79BDF9161B0A9332ED3B38CC1C4B7468AC599321961D7449DB88A52A03CA6FE7189299FFD9DCBC12B992262AFFDA1DBA56A75F5893952E4FEEE14B269A0BF2A75D8C7D9F702BA7CC7E78FCE947D488CD00899E7820856D7F4FBFF001C1046C7397BFF000C1046BC10472013B0C10473C0AE9F31F9E0820E0574F98FCF0410702BA7CC7E78208CD00899C1042D47DA1EFF00B8E082327397BFF0C10A4BD7C3EF1AF04291B1BE7EEFC70411B304118A93C51788C10463DDF9FCBF5C1041DDF9FCBF5C1041DDF9FCBF5C1046C4366F0472DEDD7D7046AA4F13559A33E03D47CFF2C11AF77CFD3F98E0A4A6262F820EEF9FA7F318E083BBE7E9FCC6494F14DE2309AE7095AD4DC0F4D21ACC404AB702C767F7AFD9E32EEFCFE5F1E78C27121542AB50F46E9E17AD59E25B0880407143F624F87500F231AD41485A63633263D63979F581BDF0A0636ABFE7F36F48972BEED2598003A7ADE9785E97611E000AA2C009933E847E5EA6CA0C3950709AF536F63DB457B1D980960B1B3EBBF386F5A1F2E7795280D2904965C2425206EB27607C89983B637460B12B9A897250541440A026B4B5FCCE962D103333EC1C94AE64F9A947007F995AEFE837E758ACFB40ED7B49691A171BCCEA9BA8AF4A141A085414AD22D3DD9BEC3A73DAF8ECBD90F86188CD97266AE5514439526D57B37516FE787F6DFE2F4ACB53364C99C0B710042BCA8EFE1D0DA3A0BAE3B6DD45ABAB3EACEBAE3792A4B818E05F0C2153CD30A3CAEA9F863D51D9AEC160B2097C62524CC64F1929D980615D49D2BE71E43ED576FB17DA099302672D94A2ECA25DDF9DEF67D0E800A32B5C72AAB0A299C5960A8A9C5A964913E2B9513CE79F2F71E852E6CA54B1282412DC219852C2D7A6F60E3568E61370B880B3396A528383577AF89E7C8E9631ADEAC697C34AC8EF9C62CB4F0F1294544110482607979F3C44E331ABCA5887F9AE1D83D7F353E71159809B882020171471F6E648FE1A90F794E98CD7365871491474A2EB2E04DD063FBA08B4D801E5D442CFCF7138C3F2950068384925CEED785B01297214935040AB8B9D6F5D2BCF689839FC0F48B45197AD0F5554A4FD6D44F180A6C0E1E10A2A09BCDD3E569384F0F87C4E26612B4A88A312E5FD0BF8FF009B14BC406093C9CB83D2BD7A00FE759EA5D6AEB895A50E2D2992084A8C46DB0F4E9EEE58B9E5D9271315203D2AD5FE437D5C447E2809BC4003A7B715A5EBE42F151D76A72E71F78A22E4824C13D46F3E71B62FF95648944B0A080E68430E6DCCFADDB946B8190CA20861A1AD7C3EFD4968AF739D40D10A2B50B4F43BDA79F5F527618B8607260E9FF6C1377200BF20DB7F889054A0EA6340CDEF5D76F48ACB3ACF95C214D3A4F0C9E0130A9DAFB88FBF6C5AF078144A07BC481D40A6CDE9FCD635EEF9F5F7D22AFCC750D45495A16CFD58DE17DE7113CAC89E76DA7D4C624E4E270F852429495736614E47CF7D768C940A72F50F5AF9FF0010DF94E5B9FEA5A85D0657435598D4A9494B290D3ADA254620BBC3C2396E4623F31EDC65D93389810A55C7CC01A07D3ABB3788A4615F29A51DDC69E1E71D89D1BEC9FA82B8B199EBDCF13A5E8950BFA806915E5D418F09534AE24CED3CA76C732CF7E2B4EC68523289267AD2E95242FBB67E65810078F2302502BC5F28350757A93E7B1FB476974DF673A0BB3EA7713A6B25A6E3AA091579A3C43EAAE5343C2A4B2F051A7E13C93C24C99C73AC463738CD27CC9B889D312EDC3872A5349767F9C11C4F7A337AC60D0326BC5767AB1D9E9515A316F25D5DA83EAC9296F81A481012D8091FF4881B4DA3D061C48C9674FF009A6ACAAF42E6B5D5C9B5691A457D9CEADA068076B1CE052788A1C924A6638A403723A6E3EE7533B2B389419128A8387603FCF9D0E97896CB90851F98F2B0D3EB5DAA75BC5459FF0069542942D34E7EBCB4880B528D3F099B58C4FCE0FCAF5D9EEC84C982599C8E12083548275F3A00C452912E2549092431B0E74DDDEC35B750D14966FDA5D6BAB5F7CA53886C92D36DAA4B53361C175CEC378F22631D7705D95C24940527BB42884F12C81F330E76620B9153EB194CA9003900DEBBD1CD6ED53B3B18AF2A738D47AB5E34795B55656E12800D33C94C9B7FC45242779B93077E589350CAB2F9759D282807532D0F4D83DED6DF9C60C99360D7200602E4120BD9A950D123C9FD9B35B66E876AF50E6E720A65F0AD912DD49A94AAEA94A17C4D948EA39FC6859BF6DE5CB5AA5E58B338CB2CBE1052CF600B17F0AE81AD08CFE0C30534BE252838214CDD40FC01436689851760DD9DE429073DCCD39B3C800AC28AD90A2093221640B08F39BDB1589B9B67999A80968C4278AAE0A983F26B7DBC223CE2A7AA8A24241B52A0D59FEBE1A38896D1661A0345B6B190645423BD003CE3AE36F13C164901E4A888E7004DE7961493D96CEF1E52A9B889E90AB92165B4AFF86E4E408C9C54D724120D2C6FE1FCEF4DFEA0B813D3E67F3C7C448FAE1182C01103AFE18208DAD7F4FBFF001C1046C7397BFF000C1046BC10428640215239E082377027A7CCFE782083813D3E67F3C1041C09E9F33F9E082315262201E73B9E98208DC8FB43DFF71C10464E72F7FE1821497AF87DE35E08523637CFDDF8E08236608236B6099813B7E38208DBC0AE9F31F9E0820E0574F98FCF0410702BA7CC7E78208D8DA0C99B5BC8FE3851129730128492DB03F88D4A929604B3C6EEEFCFE5FAE345A552DF8C14B5DC41C69DFC9CC25A84414C49B1E584BBD976E34BECF1B42683D0FC0E144FCEDC3F33D9A08554E82AE29062D68F774F31EBB74223333973D2C532D5CA86EDEBC879C68B0E40F60381E3F6850503991EFF00F7BF2E9D79623E4CD5A3F7862DF6D6EFAFD62530A81F2922ADA1DDCE87DDB48E52D852D28304AE403C86D79B6D7FCB161C02D33F85D8BB3695ABEBE239F284F30C64B9328954C4861A9D9E8CFA74DF94346A0AFA5D334CBADA8A86509402AE15BCDA4D8490125533F38B5B173C164F8AC424193214BD5922AE76A55EC06DE11C833FED56030CA5F162D0821E8A50B8EA59AECE63A7DDAA7B49A94CA32BCA4A53671B79D6D4991FDA640133E47CFCB1DFFE1A7C3A39924E231D87E0EED890A4DDFA8ADBC9AFA793FE2AFC5299972C4ACBA7F7DC45415DDAF98A509A57968DCBA35A8B3BABCEEB5CACABAB72A8B8A2AE052D5099E504991E57E533338EFF0085CBE4F673865CA94084B00C1B7B9FCB6E1A91C067E718CED0054CC44C5A42854124924EDB30ADC784343D5A5B6437629779003C3C3BDC093BFEF9CBC9C7FEB4F0A93C06C4BF938A0B50EA79561A0C18C19EF0AF8F5F5DB7F0B7431BB2E4399B1197E5ADBA9754614E702F8403170A2909023CFD30E4C993844F7EB9A193F31147DC51DCD7D0E85842C31699E44BE10D40FE62A49A0DEDE57B0E934E64BA5984D4E62B43998B838D282AE2248BC5A529B5A481327AE2BF982E6672BE1C3C95144B35531170C0B1E96D7A42F2B2EC3A4778B5A49502458B36F5EB7FA9AC3B52768350EB6AA44C5234994A3BB29320587D88378EBE7732712195F67A6383310470B1729DCFD69F5EB0C7152E4CBE208502DA8F1D411BFDC08A6B36D4F5544438FB8A750F71142F8A763264090396F13B73C745CB324C31212402B4B3B80F514A11B8DF588552D6E785CBEDD357BF4D6A6915F663AC12EF1092679C9F988B753691E918B2272A5CB712A5B8A51987D4FAC48E152B985969246BD01A7566AF9440338D4895C70AC08E2913173F03CCED2475C59F27C2290969D2CA53A72BBF27F06A5A251587080080D6E54B5BA69BB12358AD735CFD6A514A572A13B193F0DC9BEE2E4CF2C584CE918541AA52DA9A9D3D2FD5BC635280D40C7993E30DF9465DAC351542A9F22CA6A2A9C5A9295BEA429286428D882B4049045EC63E2315ECC33F91282809E974BEA97D4DABA680758D084E8AB339DC9D3A5347BF28ECD683F65862AFBACEFB42CDC30530E0A20DF15EC4A4A9A544C45C8B1BF2C72CCEFB6B880A29C0A3F505D414CAE1E1AD0824D79B7F319FF6FF00B884DD892F6D4B6FE3CA3B2D97A748E8DA6396699CA695A0A486DCAA5212A5BBC0212415A0A916BDBE3CB154387C7E7E1588C56257420A52C7E4D48A5FD9B184D402E882585E80BEDD05B6E7AC36D7E7294A56BA806F24153A4848BFF4931EE03D7AE24F07947E9871A0998A0C48E121D9AA6E796E1ACE29A2A5AD3423F1AD36DCD7EF15E57EA96E902FFCC15A144C24130D81E7263E3CB98179895350A5241C39045096626C0559A8DF4D69191C61C90EF67A5BD9D2FE71516A3ED0D0C970072499E704C728EBCADBC8907170CB24C89A9038784B8D59AAD5F3EA06D4318214A366F114F7E315557EA3CE73E525ACB32FAAADAA04F70C06DC4B6E1302EE9414245C1249B832671699589C065724F7A25ACAAA1D497A6C2F60458D61591395248649A967AEFB1A59FEF1BF2FEC875667EE7D735BAD3A532F242843ADD515A39C869414391B89BDFCD15F6F24C99331380C195CC450000A5EAD761CDFCE1CCCC54C0A294925243B87E47E94E74BC4E99D15D94E97434B08467EF23ED54ADD718EED49DFF96A242A6368F80C404EED57687325A532C4DC1A4B8E04A78DC1D8B53AD2E23518D50354F15033ED7F1DEB47109732ED674CE4CC9A4CADBA3A100708E1A7694A03942CA267DF208DE775A56498FCCD5DE4D9D384C2039254012756240E54E8F185636610DC2A67E9A860ECFEF9C53D9FF6C152D9E2A3CD9FFE7717136D32B7A609800241088BDA00DAD8B764DD98C065EF33319885BD7E7604355DC972FF0047E6CFB0AB188A4C3C2D4F9B5AF33EC88AFDACDF5CEB3ABFABE51936659938B5405A9A7E992A2A3FDCB404C5F798138B0CCCFF00B3D948225A641290593C4870DD1CE9A3DC0D61E1C3C915E201BC6E2EFA0E55040701E27B45ECDDDB3E7C84395D90AB2AA65805152ACCD9594A5512A2D1701300EC47E00D6F17F19329C29549C3E152560904014D6AECCDE7472212386921CF186D6D576BD5CEE2DA120C7D69E3E0F47D6C80807700FAE0820C10460B49511161CCFE9EE8C1046D423E1F7FEFF41E4410A020FF00E91E9F8608232EEFCFE5FAE08237349E124CCED8D16680737F2FF3030370F1BB0946186C3C840403B807D719722C488180B0020C62061B0F28C929E29BC4608CC65DDF9FCBF5C1041DDF9FCBF5C1041DDF9FCBF5C1042AA64F09573C1042AC104182304034306081850B5ADEFDB4189CCAB32C3E102C4E0090000E1FC8B7D9B9C6ABC14CC5074288E1B73D3EC7C6FCCC218F9F2F18E25D097B36B61B59F5E95B335C89987352FC2EE0DDAA0F27B6F4F28E201DC03EEC5715964FE22A0A535C162037E0FD358C271A38B8483521EAEFE0C2DF6D9A081D07C06257053460C8EF403C2A04BD2BA8AFDEFEB137879667B0142C2C3A8B5396DADB44EFBD50C42984CA3FF32C3DDC89B1BDBD0DB12788CD70F8C09969949530201A6F714F0BEBB46D8CC30C2A4AD6A6D6BAF83F3AFB7E02D971B554D43818424712CA884EDB8F1116B1BFAF2C2723B353735534A96A1C4400C1E87A0ABEBB522A599F6B30B964A513312E906EA03C6FE26FA333C541DA0F6D7A674BD306289E6DECC21C4852553C2A168316E9626FD48231D2FB31F09B3099325CD54B99C2483549EA2FE3F5611C1FB61F14E4290B44A9E051428B048F5F31E0F531E78F68FDAB679ACEB5E1555CEA69829412843A4002F000491E86DF3C7A7FB21D809597A658C4C80B147E2480777A820E94FE44791FB63DA2CCB369B37F4F8B98905DB8546E6A2C5BFC6E0353ED39F5BEF50E71252DC0EF56A51E2264CDC99F75F1D824A30B95202644B4CB7150960ED7B0D3CF9C735C160B1656A56653173C9248E304D39151D5C3728D0D507D62A52CD3B6BA92A500549E2013B740A1B99E7CFAE23F1D8F95381709D6A6A75A134AD1AF577D8C4BA42650F91013C3FDB667D1FF001A88B432BD0D49414EACC3397D219090B0C2889E662C67CCD8F96F8AE9C61133BB9293C4AA822C9BD7C5DE9D21B6214A52439A0D1C543F3F4FE6AC79CEB3628D2BA4D28869829052A584A7888F252D3C5C8DEF688C4AE1302AC510AC5A9534E8092914E42F4A795223A62969712FE471A6A75D68DECC55199EA1A9796A5D538B150A278C95920ABFD227840B1FB3BF9E2F794E12522584942526C01001A35CEB4A353684D336711C2165B9DA8F4A07D5EF468AFB36CE5B85294E78AFCCC73EA6D6DCF962DD84C12569E14A472200A5431D3CFC7946122613572FA93720DEFA3914E422B1CEF3F70777DDD484B7E20E34471F780EC02BFA63A889D8733896C3E4F3259E304EE4B353C1CEBCE8FA448C8420BF100C3EC06FF715D62B1CD756B6959629E9781D5482B0E05993009E1F9E2C3231185C394F7E525290DC2435854BDB6F06A8B44B495CB9690C90EEEFA6BC8F2F58D794E88D73AE1E0C64740FBA0901EA93FCB45325C363E20028104CC6F1104E18675DB3C0602504E1D32C5083F30736F122D63CB91DE74F49D406B6B4F2DFD3A34766344FB30E4FA74379BEBFCED35B54385C145DD9042B7E096D445AD7237B75C726CDFB7B89C428A70B2C94A9C779C4C13CC03CFA7943454C4B925437602FE1717BEADCC98BF69DEA1A1A3728B4BE594F454CD25282F169A2B7922C93C4B4858889306E0ED338A82B133F19342E74F54C5BBA6A5210ECEE01634D08A784325CC592529A03D2B7F2D7EDCD9BF88D6D1F7AE57B854923ECF140883CA63FF6FC394E60F2B13C0E22492000C08776D75A7F8864B953947F716B9DDD8B337ABC40F35D4F4AA538A6DA085A64874AF842226E12A0019F5F518B5E132B97804242A604A1603A08A9AD43E9734F2890CBD1C0FC4E4D402742F5DF76F74A8339D7CC07974AE55BB5EE9202596DB5C09361C4806D31CEF1BE2CB839397280485A11C41CBA85FA13E5B3BECF28426EA0EDCDBD61137936AFD4AA6DBCBDB5E5197BD77EADCE17613C8842E15617107CB6C2B8B19561105969993B4484D49D03D58D817D34A46532788B80C3572C3D6BEBA7521DA97B3AD1F912BBED539BA351D427C61B334812B17E1250A20DEC6D163EB8ADCEC563D5296AC3619724A8FF00B6A0EA7008AF0B6BEBBC6552D095014551EFF7F5D59E8766FCE3B60A3D2FFE4720A0A4CB29D00A1A6B818A85D504F475482B411D4193898ECEF67CE7EBEF33698A42E5D415CC32C3171FB78922C36D9EA63454C42414801376D58F53CCF872678A633BED3B51EAAA834D4B479834F38A29406987DD696546DE24365B4836332201F762D98BCAF26C9C30C44998A483AA43EE1DEBB35FA930DCCC4A9D400246BB8B73B7873BC3B651D8F76C1A8D21CA8C8D54744F416EB975CD71F02B752A9F8829300FD95004F316B56E776E72FC14E54A46150B5208621373D598BB7A8DA324CB090428125C10D6F4B45A593FB2665A809ACD59AB0D42800A732F148B49EA51DF2147E37E4646D86B33E2662F8BBBC2E583855699C403529429B83A75148C254805D469A5363416B1D06FE962651D96F64BA5160D268D6EB2AA53354ED738A0B52765774E7104ED31104F2DB15BCCB36ED0668A4CC9B982D085391282384240AB3A59F6DEDE08E2B1219A586291A7D37A6F5F48B21AD48E65F4FF0057CBF2ACBF2BA303847053D22D684C58F106F8C9F7C8F9E20D7964CC44DEF67CD9AB59673C6A00B07FDBC5F4E9710C3F578866EF0B1DEBF588F3B9BAEBD6E29AAF5BCB0417525469D289D8004A527A1816F7E2464E5F2C30984166009009EA4FE5F78D3F513BFE6AF323E847E23DECC7C878FB35060820C104668483337DA3DF82085A845801CB73CBF7C86082378481B608239C104184E669E3F6820C27041820830410A69D20F1126361820855C23FBC7CBF3C10473C00ECA9F77EB82083BBF3F97EB8208C8009993BFBBAF9E0823991D47C46082091D47C46082091D47C46082091D47C4621F3113411DD922EED57D4F93B1D59E257018A972814AD9C8A39A16E5E2FB738CA0F43F0C38CBB106510269AD1C973776A73FC6B1A62A4271615DD01E06FE3CBDE91C7BBDFD316B463642D2CC38D8598EDA7DBFCC404DCA57294555046B5372FBF5B0E8638E24FF70F88C4762B013B141465A4925D9ABE81B4E9CA91B0CE64659F2CC58043072469BDDEDF7860CF3525269EA735D52F30186D2A53895BADA490279150240E606DCE3161EC8762B1D986251C52E61054E070A886B9FED6E9BD6AF143EDAFC44C24890C99C80A092C428072CE351D2BA79C7457B62F68A73375BF95E9474B4471216A6CDBA13361E97F4C7ABFB11F0F4618CA3889628C4BA7EFE75B08F2176EBE22CD9C26093394CCA145EEED626FBEBAD1E3A69996779ED6BEAFAC3EED43EF9256788A8B7B9BDCC4836F98C7A432BCAB2EC248484CB40EEC072120396AE9A757D3568F32667DA6C762B107FDC591C45AA58392E0BEACDD3D21BDA7F2FA154E64EA9550B8E1404A892A2622124F5DA06E3918C298DC44B961E5A512D20162C34B52F5229C9DF789EC8B13DF9499EA249209E2BF874ADABA6C048B2DD2F9FEA073EB4D27EAB9332429D5B812DF78DAAE3842A167C3BC4C03E726978FCC53326A65713A96EC12EAAA7FE4D673BB06B4587384C94CB49941367A36DECF5058D584E4E69A774A52F7394B68AAAD4A48754A9B2E3C5754F3FED36E62C30D6565F89C428F1A1610A6F95DDC3BBD2941E9D62AEB584D8F12AA09EBE60536FBC5699F6B673325254E3CA6FBAE2E2A70484906C048201B7FB5F169C0F67E61E17430A3121CDDB930AEA5C4205D4E4D46BC87BFCC54B9BE785D5A8B07EAEA932A9DFCC93113D245A7173C0F67C84A68C056C1D8F205B91F1A3C375CB7341A50FD8F5FBF5884E699FD5AD0DA1C8847142D2A04AA44CF86E23CF9F5C4A4DCA972787802985E9D35FF00378564C906F53A8A55AA3969BEFAD4D659C678E1529216A2ABF824924DF95C99F4F332379DCBA6A70AC66D367274B97366AF9738597213AB31140DB7F25FF10D195E9FD4BABDF5D365740FBAB94A0BAA4A9086B8F9A4A841041E46DE5CA4719DA5C1E1E51056805B7AF956A29467A79EAC6C68123414E5B54DBC394762344FB346459625BCDF5D66A0D4D9C6E93BA2AF172492DA88DE05E773D231CA33DED5E23133169C04854E9609E29817C3C2E59D8D09D4FD890C999852FC4A22EC2A6DF96FA0D62F7A3CCDBD2ED2F2DC9B2F62832F74043354036B5D4A50224829E3470EC66F27E15F91819B9B28CEC4297C52AA904A83137700D40E6E28C1A1133D75483C40B798DBCFEAD0C55F56D289A9A86D554E93214A754900998F0CC45EDC8C46155640FF003214E454802C006BD3ED194951503A9B87DBA52C1E83A8311C5EA4038C38FF007684CF7680809088E448DFCC9E7F0C208CB664999549D1F7A727F7D21E4A4BA8248626C5BCDBD9FCD51A8F54E7755589A5CB10E3E952A09424A80E57201DBA74F2C59F018D561E850CCC03FAD4DDFAB3D2241186E3B5199EFF009630A5DD179B6694F49519C560A1A532A711092A701024182088DB6C6732C562B31E197870A2514570DAAC45474EB5368274AEE1228C2C74D9B5356731B54AECFF0046B25CA6A0A7CCAB523894F2AA01525606E1B5151372791B817DC8C60B2AC62B87BD9CB96C352479D5F416DF9C240BFA1FC7F9EB102CFBB58CD7345A32AD314350F553C4A1BA56A95C4366E213DFF77C207424C74C58F0F829186509B3B16898A4B9659156DAA4D033DFC2360A2011E5CAAFEB1865BD8BF6A5AD9095EA0617A5D959E21506A5BA92A49933C09585260728BF2DCE1EA7B6B96E01250252710B45199813B71330E77E718D9CD0D5EFE3EEBCA27D967601D9E64C108D639B1D4158C90695052ED3C2EC5CBA150676932003D23142ED776CF34CD8A1394E19783624284924B8A307481CCD183F388FC6CC52280EC47E3C770FE348B8B2BA8D3DA5E9114BA7A86872EA74240495D3B358E2D226DC6E214B13EB23AD862B3864E6D8F081994C9F420875AC1AB12E1D8EF0C0629490C1C13D48600D395EFE50D953AA1AA8716AA665D65D905D79BE3E07093E129680E04C5AC1201993CA2E385461658509D350B0C004A800400198A8B957992D7D635FD612096AEAE5FD1B5ADBC5F44C9ACCEF30584B4A79D4AA3C3DCA933B40E22981EFDFE58D978FCB70C4944B4A9B6200240F07AF2FA467F52B7DFADB56E5D474D6B0A7FC2B9FD514ACE524857DA75750968A3A10851133CEDEFDCE23E767F2E6B2508091A1150DE1D18EEDABC67BC330D284D087BDBD34BF2EAE6D7672E389E3ACCDD3978DD48E10F01CB70A8F94EF86ABCDE6A52552D0A98480750F566D9C0DBC63520BDED42297F7EF7D4F68BD23430735CF3F882893DDA50CAE9F808FB576D438F8AD726D1206114E79892549549286622AFE83C7762488D8D855C540B0FBBFE0347B95C0AE9F31F9E3E55C7D9E8DADA0999B7CFF007FA608236F77E7F2FD70411B5A401337DB718208DF8208304106082324A78A6F1184E669E3F68232EEFCFE5FAE138236B68179BFCBF7FBE98208DBC09E9F33F9E0820E04F4F99FCF04107027A7CCFE78208514E002A8168C1042AC10425A80094C8B4608213F027A7CCFE782083813D3E67F3C1041C09E9F33F9E082324D10A93C72AFE544004DE76B741F8E1DC8C3A2783C407537A3B01BF37F37B44E3953D2B4997C4CE6D6DF4FA6BAEF0E0DB8FA07748488800C807CBA44F337DCF28388DC6E0D6853490E09A84835666A8EB7F1312F97E3C480F38B505C80E3CED4FBED1A5F7174692BA9521B61CE2EF14A2910123DDB091B73C3DCA329C5E226A3E4590486A12CE45A9CC72DF410CB3EED66070D87983BC9614124FEE48D0D3AF2AEB1D79ED47B63D37A5E9DE672DA943B570A078566CAE7CC8933CB6F863D15D8EEC1CCC70477D289A24D52FB568C18EBE2D5AC794BB6FF00113B954D32A707054C12A1CE9473F8B3D5CF40F5FF006A59CEAD71A43952F21849761A4BAA48712ADA4248DB9C83E5CC63D43D90EC4607289056A909E32126A914A54543F3B9A3758F2DF6A3B7D8CC7CD5253354415100859347B383E914C54BB534C4AD973BA0ABAB888515493375C1BDFCFDF8B96225C8C24AE3949482DA5096D8E8CDF6778A32F173F1A499855F31AB9A52BEFABD617646D56E64EB8D6574CB0FACA454542C1291FDAA01620082660F493D2A58CCFE6A55C090404D1C3D2E6A35FCDE3072897FBEE4B3E9FE2BD356DA2C8634C69DC890330D50E22A6B40E36C724AA398448F2BF2DCE231798633174758E226B52C05F4DB4FA464BE098A0971564914277F53E8F0C59FEB9398A1BA7A750632FA4E24D321B86CA81B10AE182AE51C409BF217C5A3B3B94A5466CF5CA2A9931B88A9D56B33D07A56F183984DC480164B25E8F67ABEF563D68DB1AA735CE91255C769EBF39264FDE791B63A160F2C007EC0E7968CE0FD3A728DD0AA9737667F7FE62BACE738010568584AC025299BABCA79C5FF002B62D183C081F2292C926AA6019B5E74F585C70A5882F77BD7F0DCEF155E67AA9F5AD6DBAB0CA45B912AE5B8BCDF95F9C6D13D25183C3B1510784B5D859DDBFC7842C9009259C8BDDCD051FCA18E91CD439E3E32FC832EA875D78F0AEA8A565082A220C389200BC83378DF0962F1F824216A98B425206A5209A56848B51D88D2F028F7601259DC74D7D6DEDE2FCD11ECFAE53A919CEBCA80F03C2EA59B022D37EECFA4D8F4C730CDFB49266AD72F2F52A628062405009BDBADBD7A616B143B8717AFA534A55BCE2FC6ABB4F644C228B4FD3329425212B525B485022C2545215E867EEC50B158DC5CF980ACA96A7F94D58576B12DCAF7686EFCEFE2FEF7861CCF3543AA2E3CBB7424C08E8240B7E96B9C4E65B2573B87BC04715E8C0ED41BF87E74324AEA5C9DDAF6D010F119AACEA9DE6D4A4284B1C50A5287849E8933EB6D8E2C404BC0002628049BA451C6CF7FE29BC09C3D406A93434661CF42DE3D4DE0EFE7199660FA9965E5D409212DA5B2916FF58106C2E6479CD8617958EC19708940391FDCEFCFD61C264A87EEAFDEFAE9E75BF5C93A7731AE5A6A334CC5BCAE8A98F12E957C0A35C954784AF88291C3039DE71B4E5CB5292997244C2B70482DC1B1E6CEFCEE6B0FA4C804B936A8D3952BEE94DDBF34ED0720D3ABFE17A572952F3357F2CBCDA1CAB0B7088064B6B489DCF8A3AC61EE1BB3FDE052F198A4774AAA65964B001C7CC0825835361489044C9690C181F37E5B5ED6DEC68DAAD2DDB06B30CD4552065F973D252FA9DA76E1B277EE8A924100DEC3D37C6ABCE72AC8A62E4E19231539D94C951029AA8022AFCAC39435C62CA920B7D093BFA379D21FF2DEC4BB3EC9168ADD539DBD9A6683C4AA64A2A0202FA12DA94D913D3CC6D1883C7F693178D98512B07DCA1569BC605D8FED6069615F2AC4705A48E251A8FEDF6DBBFA74B0A92BF2CC98219C972E672E60C065D1469AB71F8B4951694B6A37B91336E711189C0AE7A92A56348A12471D89157655486FBF4D04D2096B1B0A7E35F4E70F02B7516663FCBA1755C768314DE83C5C200E5B5B0D8C99787078E626601A8AD87224B7BE507784D002454F3DFF003BF28C17A1AB73458733C6DBCAD283FC950A843EA7A7ED4F0A8F0F0C73DEFE987D82ED0C8C220A25484CD5D944A4023A15276FA0A6B0CB1838882B0C3A8377D06FEE90E4D68BD2796A439559877CA489293C66E04DA146DE5E76F2D3119C62B1CAE14E15287A382353CBEBA4302DA17FF34F4BC64ACCB4750A0F754A97DC16061420898DD379E968DEDB61AFFA4637145C2D487B3F3BD29D5C884F84EA3886E28DB0D2FA0B08677B5CE60CA94DE5342DA132027F968317371C49E912461D48ECC82927118863A82E3D5F71EED19083606BA52D4EA012DBFDE1BEB351EA0CC0215983A5A0890D25B084833733C040F59F779CBE0F24C14A1FEDAC4C7A17D1BA9B97BBC38972D44BD9B9FE3DB8863A8CCEBCC8352E0106D0AE9E768BCFBFCB121FE8D216DF28045ED47FF1FC428401AB9E43DFB6D21ADD715557AA754BE01E13711CCEC47C67AE355E4320B1041BD185BEF6B51E8CD180CC5CF41CE3E827813D3E67F3C7C7F8FB3F1B5B481303A608236E0820C104182083041060821553278B88CC6C36C27334F18215777E7F2FD709C119A1004CA80F5FF7FDDB0411B3847F78F97E782083847F78F97E782083847F78F97E78208CD20098333FBEBE78208CB04118A93C51788C64249720381730463DDF9FCBF5C6AE096D76F7D63608529983BDBFC5E0EEFCFE5FAE1512A61B24F913F40605A4CBAAC30DFF003B41DDF9FCBF5C2334F73599F28DCD3C77AFE37AA299A859E14972341527C89B7B78534C9525445E1504988100733FBB4DF082317316B12F0A0CD0A2C420D9DB40E75AE96A562630F2F2E97256BC7CF97228E9EF080E79390FE1C9B788CEB0D5F41A5A8DCA875E6429092A20BA806403C8999DB91E5B418E89D9DECF63332988E3C32CB91562589E4CD476BB53998E3BDB7ED465D97226FE93192D7C214DC2A1663B135DEC6F56AC744BB53F698A9CC94D65794ACA427BE6DD5A0C8BC817FBAF8F48F64FE1AF109532661D8FCAAA81D59CED4D0D5F58F1AF6D3E27634CD992E54E5A9CA83824867A7D7C868D1D42CEF3E5D73CED4D7D4ADE75C5710495120711FF00EA039FE938F42E47D9A9397CB4012C7CA120BA59B9D458372B470CCC3B498DCCE61E352C827576AEEEDEDF788655B952E3EC968294F2CFF9742415711D8F144C0DBED45FE387B9D66E9CA6584259D42A686DE9BDB9C37C265E9C5152E62C39AD7C4EA77BE8D13BC974066F99A5198EA17052D23403810A521329F301493CB68B4CC75AB4CCE958B484A428A967E54D58BDDEE282F5E5D1E9C2A247ED62CDE8DCFF0005DF61128CC7566579553232BD38C349718053595090388923C264893CEE955BEF7182C82762662A6E25C216C509290C96B8A0A9DDC437562D95C201A5E8E7E87E8DA3EF54671A8D0B5A8D73E5F52893E2511C27DE6F1D7A7CEE380ECC4B29042028581671CF47D0F23D2009FD439340AB3F8374A6BB5B940B31CD5A4C2997070AE7C01511E9E5EE1B7A62DB97E59FA67404301C3A0F32E1FC7A50886B3F08B92C5150A3A07F56B6CCFAC40335CD9C4F100BF326401E46F1E9EA316294844A0EA4B3022A2D6FB7D6D1ACB1301AA4802D47AEBA6AE7ECD15DE69995556D4D35252A1E7AB5F2A4B01A6DC713C52012B294A929DC594403060E1862F389387491DE253BD406141B8A8D39DA1E4B06A542B4BFE2C0DADE9170E89EC0F36CD4359BEB157D5E96CE21B252494EF10D906E2D713F7628D8EED580B992A44C2B58B241372E3F75A8EFE778792F800F98F08AB9D69EFDBC76068FF80E9160506459730E180976A6101482810140AD24C9BCC751B462A1986698EC54D96662662D21D9292A003E8598173BDBCE23F30C414B7764177AD2FBD34FAC26A9CF5B7C2D352F29D4A859B014902DD45AC23F1B4E2532F94BC40654AEEF89AF5D28E5A97FB8BBC45A264D591C454403CF9EFCFEED588CB953474A8A87DA4C950920927840BFA83B7BB6DE313B23279666A42D21DEAED762E5C359ADF4899C3A09038B6A6FB721AEDE01A206E664FE6D59F56678F854A8309200927E7D24DBC8624274AC3E15C24A681C00DD69B695F21BCACA93C4C4DB6D9BA69FE3687E7B45505232D57E6F9A8A765292B5309256B77994F0A145423CC7A6F3881C662138C981082FC27E773C2C0D475B579B43A4E1A5862A2036FA9F37A368DBEF0C6BCCF35AD7865BD9FE9E5BC80425CAF765B027FAC77E913CF63CBD063051230C92A54E48091F33548A5A85FF008B18D4A253965060ECCE4539BFD4D1D8C3E9ECB9FAE432FEB5D48595BD25596328E22B3B9471D3AFC3130277D84E1A2FB45DD14FE9C7788018AE8967A588721F97F0D2694A49F99B60E45AF725DABB7D227FA6B4BE41A711DCE95C9425FB7F99A86CD471AAFE206A10AE199EB691888C6F69A64D2518A52E6CA49F965A54A9652F70E92FCC68F4869FA9E0A8FDC054DC17BDDFD37D61FABB4AE7B5EB69DCFB8282957C45A79B7D0070FF0051EE5A5262DFD247BA766927B6B2706152E4600AC1038B89D45BFF005281347F5EB0DE6624CD62A2F7602D7E839B7918E5BCB343E46DC9CE0668F0FB4C2E9D6140F3016AE2927A8E7EB25A623B513F18B213853281B10FAEE3847913A7584DD2F715E7AD21BC6ADC9E914E0C972B69852A05429C21D0E47D8E10EA484D85F86DBF4C2F84918AC6AC199314800B8BD1FA5E9BB585E91B8243B6B786AACD4EF541934AA120CF7083EEFF00869171CE2F8BA60B2247085CC9E8593A294000D615569FE37813C27FBB6D3DF99D8B88630F66398929A3A6AC2763C61F0049B01C6047BA67D7066392E1528044D948D7852A492B6E8AD07F26129F2EC01E2B3062C0BDEC3C284F58DECE8AD61527BD6E914B46F0E3C94C4DAFC4479741F2C44CACC70B97100AB8DA8C0120FE29CC4371289B1DBDFE37E50E88ECD757558E34D332D773757154D39E29E775CD874E91B61E1ED8E1A538EE540A87CB425F42580A78D77D633DD172C41B569FC736BD4B73854741EA36C774A0CB6A00ECE30AEBD0C0F7DFDE30D2767A8C602CA992C1D4254E1EAD40F5DFA467B956FE405FCFDEF18D3F673AA9EE33C54EFF0040AA8A747044EC14ABCF2E9F2C311DA03972BE554C98146DC0A16EA0EA5DDAD6DE3432D40396E61C13CADE31ADEECC756C1229E98EE20D5D34DBCB8E3A6DD646D7792FB6CE2A8586A97496AEE18743E71A80F6FA81F5863ACECF33DA28557B494850F0065C43C6DBCF764C6DCC5F962630DDB01378B8525811C44B8EB7B5EDE87508502035DF51A728F7531F24E3ECFC6C6F9FBBF1C1046CC1046494F14DE2304119777E7F2FD70411B5B40BCDFE5FBFDF4C1046DE04F4F99FCF0410A69C01C51E5F39FCB04288D7C214E085235B9CBDFF008608C100DC03D635E08186C3C8472013B0C1030D87908E7815D3E63F3C1030D87908D8DA157B74E63CF040C058011B3815D3E63F3C10307076B78C668044C8FDFEFF0076C6C2614B2407E2A01D2BEEDB3C359FC5C40006A6F4D05DBC2F5BB346785D385A778A21EF7E9A13A7D99A24E44B44897DE2CF152C6F4366A90DE16AC1C2AE12A4C42374F320D847A794EC6D8D6667327040A182D5616D5DC59CE9EA219CD98BC61328A4A454055A9AF8FA3D1AE212BAB65B6D550B712D21B054A2B206DBEF122DB7218CA32FC57699918696A495020F00DDDADF8262B79AAF0DD9D44CC5CDC5051038F8491FDB56A9B5361E4E2284ED37B7CCA34C5322872F79B72B569752A29503E24881C88E7D7A5F1DAFE1A7C1CC561CF7F8C42A677842871A0B5CEF414F3178F297C56F8BB88CD8FE972F9C70DDC128265AC8E236FED22ED53D4F21E74EBFED6732D575AEA33079F4B4E2D413C2EAC24024C084900F291BEF8F567677B1785C0703E193403FB6D4D4355F937DE3CEF8CED26678B2A13B17326715C9528D198EBEF6D62A879229525C2BE2454DD3C4789422E7724CDFD79C6F8EA38746130E84A1084CB54B152183BDBEBAF9B522BB89526629D63BC7724AAAE75F07EB42F7B99664398E67529552214585195A9426C62FE2DA2F61CBCED8431D9BA2524A1243B338D7C00BD9CD8BF488C561D0E78500381E0C5E963EA4DA2DCA4CA74F69BA32FD429B5E6CE241610BBF8C0B813206FEE33EFE7B99CCC466B8860925292DC4347EBD3F11A80A940949290A34BD750EEDE8FB8AB18AFF0039D4F9AD71719CD5459A3121AE05048206D6410761F9626F26CB1485238D1C5C2DA37D07DD8B6D7D54B529DCBBFF0098AD6A3306D0A78D2BDC2DA2EA59333EB26E3DF7E5E7D37098796108050EEC0066AF27B0FBEF184A52028ECCE2BE15F637DC57F9967F975538B69F05D7A4C2C15244DEE427A799F5107162C2C9320278260969B94B03CDF88DB9D7F11BF100CC1D85DDBAE95DE20D9AE6C9A3E04345556F5448A6691C454D907621326E0F38F888C482F1B85920AA64C4A5491F35871B3B16D0D05BEF0EA414AA93038A54BB0A6C74F3076898689EC7F5BEB379198662E9CBF29242D69742012DF41C5C2A88E979337E543CEBB628904C994388A9C24A6AFB59FD5857A8859425004200E26673D76FA3116F18EC9E53A6744E8869C672A6587B30E148AE79C4F7AA2B47D828EF02B809BC94113EB8A5946619C4C98B98552D0B6E1AD3CC1F4FE59152411F2B12474AECE35E7EC21CCB54B8E9534D921A1221321201E8040F2DAFD2F187527B30A92F38CD2B53394B17D2BBBC47AA5CD24A9C9074B54F4A5BA6E6230E6614892A52DE879C32DB241FE6904C82B261113CFCF98C4B610253FECAA504B515314038E6C4574FE630241511C639EF7DEBE875E5766AACD2ABBC08711F524A8C02DA7EB5C5B6E5B0787DE47BB94903849201252B53514070D7C286B6E8FCCA889291FDAC5C31A13AF5F752F1B5BA3754D97EADF729694C71250C29F5D6CEC0A100AD920F2816E5D62F1799F00A2824070EFE55EB4AD4F8C3A4100304D5B7BFB7261D6974C67999B61DC932D4E9BCBC5D79DAD48A979C4F350A273F9A9BC8E1099FC2B589CD0AE67019C78D40F0B3905AB734AB0D6B7D62465CE64BB0005FC6CFA9DE9D00892E4FA1320749152E556A7CDC91DD553A8A8A1692B06F2D2C06A395C006E7D21A662679F9C4C082788F0F10268FA82F56AB55F90A35C5CD247CA4B52A2D714B7B689F2321ACC9A9C9CE730A6CA68801C148C32C3EE2D16F0778C8E3498804933798C3246266E20A97294B98A059414E90347A96363E50C8CC58001554BF51E2E6EDD3C6191FCC743658A2FAF2071E7D5766B5558F2FBE527ED1EE1455C107900266061412316B981427F0CBB997C03415F17A6BE75867366926A493B1A37D6BE5D06ADAE76859DD52CD2E474EE32C1F0A51F538001DA5C53408B79F9CE1C7E8A42D7C5318AE80FCC2E07FC41EB7DED0D56B58D68795AD478C469BD61A865EA97954284DCB86A12B94A8CCF76560A607288EBC861F4A380C229A64A0A245B878812D6259BEFB5A149014A075B6B56D287EBF57785AD681A3A24F7B996A843AB172C7D5D33E63882C9E5D27A635FD58529A5E5E9087A2DC55F56E17047DC690B306BD7663F58D4F37A3E9212FE567315A6036EA5F71A8237242779E876BF5BE674DC4BBC8986504B12909041A6ED46B0F3E990A2976D7F98DADEA6CA6800FE1F9421881E12A577845EFF6C198C20BC562D48E05AE62C30B122BEAD56661F88C0252EC5ADB69E11B5DED033152404229DB4806006184904ED278413EFDADCF19C26055885BB4D26E5E62C8A6C0F8EF734A46C662CB39B72F7688C663ABF50D5CF7550100FF006F0276EB045C0E87160C3652400E8A0DEA7CEFCADAD76844A1C92F53CBD2F11A39FE76C294AABA97561CFB1C2E28011B93C26FE73EEC4B48CA9142A969F14026FD2C7E96178C701B7153DB307AC267351D6F279E33BAB8D667DE5437F8FBB133232E9691492936B20680727209F08CF07FDC7FC5B5EBE7E6DD51A96BC1003EFA45FECBAE0DEF78541D8753E98CE232993359E4A054D4A053500B03BD396D0DE70502DC47A837B6A0BFAEDA426FF1357EDF58A983FF00EB391FFF00DE18AB2295A4A4D1EC903EC5E1100837BB6F7D353E821C6875A673421C55357A9A0A8E34BC03DC7D000E93C31B1E1DFDD76537B3C95824CBE1356091C3BECC096F5F187D2DC3B726A3FBFAD63DF2C7C938FB371B1B04CC09DBF1C1046D83D0FC0E08214D3A24AA645872C1042AEEFCFE5FAE08233420099501EBFEFF00BB608236708FEF1F2FCF04119A4013041DBF1F3C10A4BD7C3EF19608523058262013BFE18208D707A1F81C1046E6904CCDB6DC608236F77E7F2FD70411B9A6F7B13B6C0FE1FBBE0823670A7A7CCFE782063B462B4C0040317F4E5CF12783C3226254A590E03B1D99CF4FBEF1B15A1287203D6A5B7E77E5E20F2D720EC715ACD7309D2667732C1370C1EA3766353CADBECC82D7C454B244B7724D9AE69AB72F1A3430E7B9CB792532B3075F69BA7610A53C95BA8471003601441277DA7A461FF66BB298EED06253C4898CA5025D24DC87D85B67B58C577B53DB7CAB20C24C509F2FBCE134E201884F22EDCEEDE31D13ED87DA357982DFCA74D3DC05054DAD4DAE4133133B6F3CCF3DB6C7B47E1C7C2C465E9933A7CB0AA24974D281ECDD5B6F28F10F6FBE2F62F37C54CC34998A12F8949052A2C41A587837956E7A559EEA3ACAF792F56BCE3B56A52D49F1120124F99178DBEF818F5065B94C8C3CB0992896942000484A68E3C398AFD8C70DCD312A528CF99338D4BA91B390F7353CB7F186A6AAA9EA15C35C897366C4493681B0FD70AE33BBC2A7E42900BD38478DF9FBDA253882A62E41A3EADCDC8736DFF1129C934557672B5D5BEB0CE5F49C2A6C3D08E34AA09E1E382A8E71276C52F1D9BA04D1292BF9A61200487A8A55AC5FA5BA43D94492EC40D79FDA9A743D224798EA7CB74ED31A1CB5082F2014A9420C9D89BFCAF78E57C272F018AC5BAC9514962915A0EAEEC40D7587899695330E44F9F9D5F97845319CEA4556540AA75D5F7CC9596D209892798109DA3E4479DBF22ECED38E6A6FA9FE7CBAF9C32C64A0804B8A55F7045075DFAF3222199A6A4AECCC776FA825B48804285E0C72BFEFAE2DB2B289723F6A40DEC29EC57C623A2135D9A06F853DF453890F80A92676100C9B9E585D4A124306A74FBF88A6D56104194E99CE75555213A6A996BA752A1E75C050009BDD71B78B9D8FA623F179BCBC3A0AA6CC609D4338D2C1DFEF4BC0C5DB972F4F0EAFA6AFD83D3DD96699D28DA731CE386B33480B534A0A506D62E76E24804FEED8E6FDA1CEF1989983F4A261924B05071C41C034D81E84D2052CCAB1A9049E5F987FCE353D45731F51CBD69CBD840E1086C253316004705F6DFAF5DE4B26C14B992C623128E298402AE22FA9D0F3E8EC291A4B9CB5900A80E47ADDEFABBF5D6B1057DAAD4142DD54C932E158973E26F1D3D39E2E127F4E10AEE40240B04D88FCF94498410905B47B83F48E5450F2785082A7369402A9923A0373F0BFBF090C5094B69DF225E8E740357341BDBA438952C077B6A3917B03F7685997E83CCB3B2B742D6865882E305B23BD0AD8070C14111CB103DA1CDB0D2912CC85A4294E15C2DE16D0DFA878526619203A6E0BD7C373FCDA2C3C9B485365E90DA1B144BB0571A7EB7C645CDD5C404F381CF7B038A87FACAA624852DC0DEFE8DCF4A8686531205856E096F13A0B023A72894B191A288AAA29D4CE5F605ECC9D4B6E848022452AFC37E612075386989C699E82953AC2AC904A49634750723EF6A3420B5F097E26167BB72A36BB7ABBC20ADCF322A074394F5DFC57334EF56DB2A65A4A87FF00D327F967680784C917C212D6A5A12E8EED350A415711FF00C9891E6618AF1252A3F3120D8F3E81F5BBD8D7AB4BFA8B5B67A453E4C94D2251E1A851A569B35A954F004A948496F807349133279E159587C3021641F92A3E6248772410E7D6DE91B4AC42E6FCA4BBD09B7986B071E7CE1C29346D406CD5EA6CC4E5CB2389414B35416664C2428813BC45B688C2E7109207E8E477CB7A86EED88717342D537F285CA080E4814EACE396AE6A368E10CE8FA55ADC34E3367198EEEA0A96D06CC5CF74652A98DA396FB61E0C3E2A709678BF4C43F12182C2B6E41BD2EE690CA6AAB51C6FB16B015BFBD21054F6888649A4A26996DAFB01B14CDF108E5DE16C1B0E7EFC38465120A84C582B9A2A5414A0FCDB88016FCDC43798B2C00A0AD3F9F1FBDDC98FD7E7AEB890B4B8AA253A09E14ACB9F58E920186E04F4EBCED33232E4CCE10A008A5581296A8EA793F28CC87AB12051F9EE39535F2D621B54F55AD7DE2E8DC75333DF7D6942DC8844CFBA3711CF1228CAF0FC410141E8FF002B5090FE7CE1CC694661510A4D354164A7EDA548E38E6002ADBA6F187A32492082A4A549558BD4EFF7ABDC068C804D8437D4E635C8E22B7839E7C294CFC36FDF538712F21C22D8AC01BFCA0D43B506DEAD625A33C2ADBD47E79C34AEB1FA8214E2CB6048179E299F75FA1F5DF1212B27C361FF00E90E27B800A6A7ADEA6FE42321075207AC6835A968FF00F33B5A26D7F203F7BE1F232F4B8694F4FE6FAE8EF4D2F19EEF9FA7F31A9CCE5B48852FBCE9CF879EF73FB89C3B46014689484B3D680927AB7BDF4C141D0BF266FBC373B9E20589BF9188F4117F3C3A4E015A3807C7E8FF00568D82030715D6BF83086A73C64F0F2DF73F98E71F2F3C64E14CA7E21C43A1F03A73F386F3D0281BA1FA7DE879C26FE36D7EFF00DB1B230E85D801BD0D3D457942299628D53F4E7B7D7CE1155E6297D4DAC37C696E4ABC653131161138728C14BAA480E450B061A6E77DF485D2909622E35FE0BED1F4AFDDF9FCBF5C7C3D8FB350A69D20154C1B6E47CB0410AA0741F018208E426761EB10304119702BA7CC7E78208D2EA488991EFF00C8FAE0823540F3F89FCF0411B5A493C51276DCFAF53821497AF87DE37702BA7CC7E78214850C8202A45E7F7F760823760823058262394E08230E0574F98FCF0410AE99E2C25C4981C7B6C76F7E08238642DC778B913E7F18FDDB98112100D0C10E75CE328A64B40A42DC163D001279FE9F3185A54C9C169972D2A5719E12DA3F423476F6D198E988920CE5CC094A0124380030D5EFB6B5DAD14F6ADED0324D134350BCC6A9B2FF000ACA47109E20091201F302637F763A9F657E1A4ECFE6CB9864F105104BA4D053537AF90DA388F6EFE2F60F29C34DC348988E209525D2AA82DF5372C36778F37FB52EDA730D5D990CBDB7DD4654A5BA16A43CA40E124DCF0907D24DBEFF0052765BE1AE1F2244B5AA4A1C00E38439FABD5BF378F11F69FB779B67D8A9AD3A6196A52BFB8904134A3B3331D5ECEF1D73AD71BA7AC2CD02D4B43A654A528A8C912492A9BDF69F21D71D6B0988952909932E58433024306601BAD3EFB456D05253C53140CCE65C83A53EF5EAD182692AEA1F6E9D8A75ADF74F85E825283CC9E569E640B61DE2330FD22490BBD4D852BA02C75F7687C526629557297B6EE6FF005DE2CBC9B4AE5F92B69AFD46B4BEEA405A1361C24DC02127D224408E4315AC5E613F1A0A6529552012D41E7B8EBADE13485020B11EF5DBDEB0DFAC7560AF6A8E9A99D0D52520743286886C90409E32D9055B082A07CBCF6CB3294AA719AA492B9853DE12E6DCAAD7D186FBC3C97354E012C2BA7E3715F6D14B66B9A13C5078B7B9373E649FDF3C752CB72D421090120160E48B5B97D34D9A1F4BC400003403526AF567FB115F5881E659C2DB5A5B0986AA09E35822101331F7CF9F438B1A244A928E3550A050333E9CBDF3108E366A6600010790343671A9FB38A188DF05754D4A58CB1876B3BD304A38A1324749EBD45BCEF88FC663A5A41248480EE5DBF0FF009ABBD21845CBA5BB17A6AA6C66BA81EE1202568A55133782A100824F3BA76F953331CE809C9952419855C4E412C9E6EF5EAFF48D92970E4B6DEF6FE768B6E9DDA5C9694D164686E97812132128055C22665404FC639ED0045AF0E714A0BC4BAB54A41347E94DB9BC0542A1346A3EBA1FC73F1778A5566B98A56EA89E22A27BC2A215DE003FA649023CA36DCE25F0D82C2A929EF509734402053E971CC5793426651984FAF878F2FCC46DF759AA5296E2BB87A6787C44ABDC0817BC5AE2679E159981E075CA514A459AA29BD75236D2309C32829CDC10C351E2FCF67B33C6DCBB21D4BA96A053E5D42EAE92988151532521295DD2785513D6C77107081CEF0D97527A93C6A1F28A39005B97E4F9484B2A0068C0737A1B036BEDD18068BDF4FF0066F4D94B287AB2A43EF708516D4DFD9205E4FBBE1EFC513B41DAC18A131121010CE1252A724D6CD6D2947E7787489812CF524073B7DBF1CA251515D4B9636942DF699660CD3252826A026D0A5A6EDC4089B99E56C51309371B8A5CC54D52C8D0173AD3F716F768C4EC40018AC33073E0EEC1EA3F976888661ACBBC7052E4B953944FA8F087D3C5549715D7EC94A77F75F78C49CB90B47EF5D4E85874B9F2A93EB0C66E252A040A91A35B7FA56BE4EF0997A775167686DDCFF34148C0054C84F04BC93B8521B50298062E01331C8E1DC941E258BA92DC418B07B56C4977FE61929455521817A7B25D8C6E4651A5F20477C809ABAB45C28A8F89436B1240F4B6DEEC3B4380AE24B59CDC1F2BEAEFB97B3C335CB2493663CCDECCFB7DEB0CB5FDA03ABE063BB4502192A0D77684A8B808DC94266D1B9263961C61A5212A2AE1AAD892A2FC4CE6C6829D1FC61690952487B569E0FF007F3A4476AB3CCC3300422A1E7A6E3C0A2083E57B795A399E92885A1218048E6004BFA0F6E6B0E88704421629B397B8BB969E215B80D2A075984FC663A6D8593894A58A949049A02A0391D9EF5DA1A2C5880799F76A7BD96A348EA7ADF137401C0AFEF521A37BFF005011F1E9B6379998C8921D4B0280923E61E2078D89F48414973415EB7E5D7C9F4736507B35D66E82AFA8B4C81713594EAE29F22AF0FA19F99C309BDA495288EE54B26AEE950D6A2A069EE90ACA414F13EE05F6FC74DE13AFB32D6A1265A6B9C4D5306DCFFACFC3D631B48ED6A9FE67045CF09FB06DFF008061686DA9ECCB5E0134CC30491E33F58A69B6DBA89E5BCF5E789893DB293F2F7814787604B1A5E9F53CDE320136D39C42B37D05DA432543F8621F1D5350C73DAC93CFD7A62730BDADC3AFF6A08D6C4539B80EFAF93504655C563FE6F5880E69956B1C9C4E71953F4C854F741A9A82E017325A49E083D627979CF60FB4322791C4532CBDCA833317E47CB58524A544579B167EBB72FAF38ADB33D5154DB8A61541534E663BD5B6EA408E67893005A7A40C4F49CC654C03854950701C11A16D0DE90B777CFD3DFDE3450EA4ABA54BCAE36EB52EC120B886D54D133209255363FBB4ACA5A2714926DA3DFAF21A8F1A46021E8EC45FECDD6BE4CD0DF53AA5A2E052B304A164925908E28B1B4881899932524710A00185CBEFFCEAF19EEF9FA7BF6758E06A34BD1C46020595F678A7CA6DF87C2313F00A981D20A8867715F0D3A8FC468A92E0907E63EFDB8F0DF7379EB53056224733CEDCE2DB73C248CB6705070BA5C70B7DEDD5B4F04BBB0356D5ED5DFF00970DCE36399D34AE14858F71BF5BDFA75DFD2D87C9C14C4B7C849E63D2DFC7D6125A824B5CF2000F478FAA9EEFCFE5FAE3E0C89885332856DA7D63ECDF02B6F51F98C80099922FD6DB7BFCF1BC60822E232C6C124D40F51188DCD0078A481B6FBF3C1C0A360FE519009B08DBC03FB87EFDF80A14039040E719E056DEA3F3182DB248893EEFD7CB1AC60822E230EE8F9FFD27F3C1188CD08899313D446DEA7CF046E8203BEB1B3801D953EEFD704280836AC66941131267CB1A95A45D43CE36E151D0FD3EB19411B823DD8C7788FF00908D84B59B249E958CDB4154F84988D813F763066CB01CAC010195305D0A1D4465C09E9F7FE784FF005521DBBC0EEDEF9467B998CFC26CF63F86F568DCCD1FD60D85926E7D6379F38C2C852564041E27DBDFBB5DA135BA012A0C05CB8A7BA7B11CD77065ECA96A504800995111600EE4C7EA4FBE42565B8C9DFF004E4A95AD219AF1F8496FC7392967B91A7F98EB476B7DB153E92A0094D436AAA7D2E86381D4A8A0A78B7292637B131F9F67F873F0FE766EAEF71521480820FCC9A1AF303AEBBD75F377C6BF8943B392D387C24CE3EFB8904A14CD60F404DD8F851A3CD6D53DA1675ADEBEA55985538A602D5C03BCB419E40C72B4F9EF79F54F66F274E46512D12010800060D6D682BEF48F1AE6ABC4F6856AC54CC4948592B292490C4BB5FD05EF15AF7DC4AA8654B01282384A884CC9E52798F2F8F3EA32387152871A780B3049D5FE9A73BC56A64D97820650471173F37A3D8D76D1C561E726D3AFE78529A00A2A4AA54E14F840DCF88C8137BCED26D338AF669265E05E677A01A9617BD07F97F1686D2A5CC9F30289294B82CFA03BD2EFA8AD4B88B5159964FA6281140F34DBB5E5252B7400A2D91CC403FBB7962030866E6B88A4D644BB23877B5F7D5BCE2566995C094801C0152CFF004D856DB6F150EA1CF2BDE5AD4DBCA758519093E1E117D81DBE5CEC062E383C9815255C3517A7959BF3EB0C968490F46FAECDFC6915D3F52B6CAD6A7788AFFA788908F7DFCFA4F4C5AF0F9726500B4A78599C357D456BD4D4EB0C660208AD9EBE5B7BBC44731AE5A8A9216093602428C911D66E64587CF12273097857723E5624BB6B66D7EFD61A4C9F32A00B8A372BD6FE2F4872D2DA2B36D60BA8525B5B34148506A9C790503856411C05613C5707EC123699C43E65DA790E995DE00A502129152E342D41E3D442B875A9555BB356BEDF4E757768BD727674AE85A72CE5F4E8AEADE185A8A54A8541132A0A1FBE5B629F9862B158E70A52A54B770805F883BBD08EAD57B43C0A480183B863EEB42FEDA1AAB353FD72A3BFEF14C3927829E0A5279401013B6E7CF09CA4CC4942425C02439AFAD75FC35DF5AA8EE4FAFE3DF266CADAC76B104BCA2CA87D9E19326D13C302F6F8F4BE2C384402DC4013D767DE9716AF8B46C25AD4EC934FE3F30C14ECE735CFA29DB438E2CAA28CB692BE393E2E220787CB8FA88E785F1624A071F7C9414876240A6947AB723E0454BCC2CB493FEE029E166D8F503F3CF78BD7487640F5425ACCF57114ED8E15A10A2078409B8491D472F238A4E69DB43210BC3E0BFDD98974958B0D19CB8F5B3F8AF31284915001A33EBB7E75AD79DB5519CE41A529914997A986587070385084AD4F706D300A9245BF7BF3DC5CFC4E6B34CD993162612E0D404BF205B5FA88426AD09E24A0B00C431BB53C3A52FD1ABCAECF755672EA98D33951553384872AD4EA510956EA09700279EC76E6409C187CA4E1D499D3E695A49FDBD2DA9F01CAA223D731492CEFCA94FA78B8077D192A34C657918359AA33A554D4D6F89597776B2029024A038824279C9116E9B62C38752E6BCB918701219A7050A3EA451F66B5219E226A8872A2FF00F115FCEFF4D2353DABFEA08EE34BE5CD503401497DC08A852845C80EA54A13C883387C32844DFF00F1534CF208524A7E4E12EE47CACFB3F2A43718850601241D5C3BF990D406B4B7288EAEBAB6B5C52FBAA87AB1E3FCC7077894715F8785221099F281D79E1DAA4CA4242414A5800EE1CB6875A59FAD21DCB3C572DD747DFC79D39011CB1A3B51D72C3B54E7D5E9946656E249E1DF6E20498FF6DF0D57325214521D6694009F221F7143B3C394CA04124D34A375D625D43A6345E5A92739A94D7D42C0E0400A4F7253F6AE92649FF6C349C9C62D40CB965080CCA05DC11701891EEF48DD4254A624B93BFDAB6DDC79C66EE6DA53290A19765887B876F11B40B5940FC79EC71B0958C23F7AAB764F9DBEDAD79424A992C9141C989FC81A359B4DA1B9CED26B18F065CC3396255FF10961A7FBE036FB48053C3E5136C61596F7E52A9C998BE1FDACA2867DD8B79DA1B4C9C12A74A80045880D66D8F95A962D467A9D6F9B56821CAA0B077E06D2D5FA0E100EFD0751B0C4861F06245449240B12EAA6E5DDFC4FAD61B4C9BC4CE5B71CB414AB36F0C1539C562883F597999076716BE23D202A047291D6713123264E3D24AD212CDFD8C6B6FF0088F7717856428105B96B777A8F7F58685E6F5C3C23317C0BF35106E660150F2DBCB0F13D96929D52C030A0D7D9EB587108DDCE733490A4662FA60D812BF17FEE3F327F2772BB3126951FF88DA87E95A1DE08554FAB7356665E5BC446E77BDE64FEBBF2C3E4767F0C3FB80074E11E9E3AD057782143BDA066EC94F030CF0ABFE221D69977BC03A7789570C738009E588DCCB23932F80A10B9A03F094A9496A87B1A8F7BC3DC37100588ADC10EC2A3DB11AF8A0ABD47A5F3F6CB1A934D53BC14005B88525926F04CB4DC8F71F7E12C261B31944A70F3978643060A495DABA97676FA43A4A52E4A92EE46BC87DC37214A88AC353F62DD9DEAC4A5CD1B50AD3158D859AA696E3D509AD5ACF8002E2C25AE0DA475BF95832FCCF35CB26138E7C64B531130327BA019CF0A7F7120BB35348DF825ABFED3B56BF41AF5D39C75EB56F60BDA26960E5751D02B35A16E562A1A79B512912A2AE04952AE22DBFDE7A0655DA9CAB14B4484E27866D1D2B4292DCB89403973F50EC29A2A42C00A6A6A5C1E761AB5F4B5A28B7F5156B6EB94954C3F49514AAE1710F36B6C12491652C242A083B480778C752C85781C4820CE96554003A6A497FC579EB68C77547D2BA8F02D7B5E95B8B18D88D44A3E12E0E5042C48DAD63F95F9C62D072C94A0E809376602BE156EA2908AE592E521DAE68F6F03B721E50E14F9EB8BE2FE6131037FBE26E6F724EDE78417964A480C815059CBB74DFF00311D365AAEC4B3BEF5ADAA63EC831F9C095839AE5C94B333823C0398FB38AC4CB510CCF5F1F21D6343DBA6F11CEFCE7CFCBD7CF1212A470DDCEC1F53D2E3EFA4604CE21FB5C0BBF875DE3142547727DE6607E7FBEB87F2C0003D8D4B6DA0FE3AB460254A2A60FC8066E9F9FBDD634024102794F9FEFA7973BE10C4E255254E84710E9CABE95D3988DD0A4CB07BC152D5351E819AF5F02446DC3318C5AE851D5F6D49A563071491F2A405528C697DDCB78C641D71BFB09E2264F5836827FD8FA1C2A898482E1F4D00FA7A69082E7CCAB21C1079D79DB71B5F48DC871F7265C089882426D7F4F891F3C2A99214FC47A06D2EE7DFDA1A2B158B144C9596772029F968C0F58CDC436803EB2A352493C3C1E1088899E106645EE46C71198FC4CDC2377492B7BB75E9CFA74710BE19626907123B903FE619EFAD350DE3AC6D645393C2867879F89447DF1B7C4619CA9D8CC45449587E4EF7BBB7430F26627052407C42001B2853F9FCC294B9C0084A1A8E654E206DCE144193CEE3E7897C2E498FC5B34B5D6C58B87FAB577E750D0CE676932CC3FEEC44B2D562A039EFECD0D210D566F9753A66AEA2999817979B047FEEE53EEF38C5870DD89C74D01C2C9BBF09200AF27B74F5864AEDE64F2B8BFF009892C3750BD3737F43B558B4AB5C69ACB829F39E5236C27FE38E26D731F641F11208EA089838964FC32CC316C89689C566C02155BBD746DABAF48AF66BF15F2BC17FD39929628E42D34F00F7E5CB9C305476AFD9F38E2AA17A96910DA264909827CC71016B8B7E786B3FE10E6F2CA4AA5CE06A482953EFD6A3C7AC42FF00F7D39714F0F1A050D5C1D1FD3760ED788F7FF882D0D48E3C8A0AD6F306CD9C711C490D948812448215D2D389AC97E1C63A4CD48992D65881F32496B55989EBBF368AA673F19B0BC0AE05205C82140BE87974AF2DA3ADFDB07B4AB6F52BD4990BA12A712A49295410152362266F8F41F63FE1FC996B44CC4CAEF08E160A4B01CACCC3C79C70BED1FC68524CC12A6F0B3D44C2D63A3F414DABCBCFFCEF3FCD7397AA2B739AE71D6DC512DB4A595589364C28913E5BF28BE3D1990F67F098342448C3A50081600585EC037D9F78E19DA2ED8AFB5530AA6CCEF382D5048E757A121FA446DB63EAE3EB617DCB0B3E14195151260EE64413CA712F88561B08E1494B8B9A0B7E39379C57933A620325440E4FF9891E53A1EB33CA962B2B12B6B2C2AE25386521494FFD244907E26F8879D9F4A48299412E91400F09D79FF24E8F08A997FBAAFAFBF38B0F31CF69B49D28CB321E05B65252E2C70C8B4925464CFBE397AC28C2E23362672F8B8DFE506A05480D56B35852F405A3604A1D293F2D35F3A0714B6A08D6292CD754B85F7B825750EAAE5478BAF5902DD395C8E96DECEF6695862A993430353A3E9FE29C8B184A612E9726A4DC935BF9DEB110ADCEDD434B35EB0804184FAFA5CFBEDE5B1C5C026560EB4E11577DBEDE0D5D85352A2431F7AFB6886D353E77A82BBEAFA769DDA94A963BF6FC412B04D8F78A10809DCF5DB0D713DA0C3006A904023D8170DAE8046840343EFF00117C699ECC74FE4C84669AC1D0FD7405A3282A50E1501201750608363703F3A263B158BCCE7AA5E1507BA3FF00F7014CDD13AB9A5EAE0BDE0EE65A43962A06DBBEAED421B6D5EF589466BAAA99A63EA8CA114F428494D3D13294A14DA62FC4EA1216E4DC8E2923118325C661A72A6F0AE6AA690EAA96B58924797D291A9412C123A803D77373BF9C578BCD09A82AA263BB0A2495384A84F33E3F3F772EA7167CBF07C491DFB020390696DF61B579428896430218DCBFA0FE34FAF0FB88AE537F5B6D55552927B84B28E1851201E22D0215CB7B731E52AB460E4310B42529152549714AD1DEEE000C6E3943A97C23E635E16A351F4DFC9A2CCD23D946A4D45C35956A19665A98510E841251B11E320FC2F7C52B38ED4E1702BEEE5AF8D6E78528048A740CFCDC561F4B5A58D0067AD3DD7DEA62D166AB44F674DBC8A453559982C27EB0BE12EA82D03C3C09855CFF00A76E722D8A74FCD7139CCD69AB5CA969B24122EEE0B16AEBE70D3173C24012C877AB6E0D3968FCFE91F7B38ED0FB415919165AA4652930BA871C45284B60DC8438104C01CBE7CD354CCBB0491DE7F796763314EF42400E2FAEDD623BBC98B3FBAB7BB7ADF7B56B4B8829F24C8F272EA733AE39AE6C882BA5571A514CB1BA439250B0A33245875BC61696EB5132E5F04A1C244CA7CCFCB46D7534B426EE4B9BD4B9277AB79C32661AD2B985FD4A887F0A4A894A03480F95721240913205E636C3E3292A6E3F99BCBA37DC3460DCEBCF78D74BA7758E7A7BF790A7583E245538529E049BCF02BE7F773C615899520F095849D921CF90B426B524508735A5A9AD6D1236B22D3F91242F3CCCD1595200229D0D91067ECCB648DCC5F975C2B2E6E266B8949212A3498E4335D81A9A381BDE13EF24A48AFCF5F958DC73B56953C9A0A8D5F4F449EEF2ECB9B6985C84AC84ACAC0D89E24120C7291CF0F519799BF3622615ABFB5BE5D2AE030F5AE86D185620243A52CF76D2AE3D75E8394305767B51988216A5B73C924A449F48E47A5CFC04DE1B052E526890ECD50EFE27C06BE702B16433DCF36BFBEA74148634D3A5B2A529C528B907C4A2A889E64902797AF4BE1EA6420B02905BC00F0B7A13F66988C4296C1D9AD57EB7D3ABFD63538844C48EB78FD9F761512258B2436C403FE39D3486DDEAFF00E47D863E7FE1A113E1B000253CE0C739F3FF006E5CB0E65C941A8961B9900D76A59C6BD631DE2DCB93B54BBEFD3FC6D0DEB2DC1F10E8449FDFAE1C8C3A4DE5B1AE83F0DA535AB41C6ADFD0437D43EDB407881E2917E51B6FC8003CFD30F644874B24330D8B1A9D87D07D1A1F609D8EDA7ADF43BEF414840AAE6047119236836FC7CA77FC30E53875357C6A47A53D6EC224211BD5CD9E102204FEC4CFCFCF0B4B9452E2DB6BEF5D6086F5D6A0837F75BF7E779F4C29C0DFDCD6B0FE75B4109975295F0C19DC99B812622DD630EA54A4A920A98DC5439F571D4DE1594A29762D6FBC2571D4926C24F97972E60FAC5F0B1932DAA81AD424026BEA7CCC2BC6ADFD07E211FF0011629DE6E9DC42BFCC980B42949E0E1BC9281CC91F9E18CC934B50BB16707CE81AB4EA233C6AA9E2AF415F187D4EAED47A78368CBD62AB2E77FE221D0878047310EF11DA7CFF00185C56592F10A4AA623E641252504A087D8A4A49F41F58D84D98971C47C61AB54E97ECC7B4EA7A56338A5628338752E019836853629DD588054868210BE251FEA369EB87582999D65E5588C32A64D91218A6471F0950D7E62788F09FC757D84026FEE5313AFAB01D7F160F1D27ED53D9D759766CF2F36A243B9CE975A8B89CD18BF76DEE3F92D95AAD2522676338EB1D8EF8872B19325E127AB827A084AE52D4C52FCD4CEE7F1AC3A9984E1142E0DB571A9FB5E28C7739532D06E83892572971C7014294A4DA0A1705252AF8F3E98EF3844E17152FF51316821829297147B9A1ABF36AF230DD58628F95497357D497059BD2AC07578FB7CC7E6CC4E4005806DE9E2D43E61ED1F5CE5E196E2E583391BB3D89F01EB189415DC49E1DE01547AC6D84578800B685FC391A3FA6FA343D44934228055B7F13B356362131629B799223F3FC30DCE2175E10E2A3416F0AF41E70F654B48AA9403914E7A3FADF468DE4445EE7974FDDFE18DE562012CB6E840F1041FAFF00889191946171B59D8844A61476AED7352DE4238F3E5D712386C32710C10872A346035F27EBEA4D21A63301966041271B2CF0D7F7245B9397B338D8E91C8AC66990B5B8F32DA40995B8DA66378E2509F77CF6C58A47661738A7E457CC47ED4151F161E1E02D57A8637B5B93E59C5C58892AE1B82A4876D9EDE1BE9101CFFB54D1790717F13AFA747083C5C2F24ED7BF02AF37FC2716AC17C33C7E2D295CB9334BEBC2A1434F6C7CB4A9E33E3664181E249321D3AF120BB5F715B6AF14EE7FED67A03254A5392BADD638B2A0F82B578236FB522FD131B62F9D9DF8178CCC4A8E264A900311C697E2D2C5A9CEE5EBA472FED77C6FC1E62C9CB9694B38265A83DF97DFD228FD4FED9B50AE2FE18C84CCC70A84011623C3CB6BF3E78E9584FE9F644A62A4A69FF60150068FCBED531C8B31F8AF8E524A53316EA06CA3A740E39741B98A473AF6B2D7B9BAD28A2A97691B4157111C278E6C394DADB7588316B4E0BE0C61B0801EED0786E784333BB1D0F98BF8473ACD7E25E6CBE2E19B32AECCA50B31F37AEE29D22BECD3B5DD679E89ABD4552C71CCF0855A6DFD2A1E405B6F3C4E23E1FE1B0A18C943501748E5C9E8056FF68E73987C45CFB895C3327D4B8F995D75A0FA72885D6EA6D4C1B729D8CFAA6BDBACBBFC4B71B0D04191BAAFC57DA448B8C5D7B3BD9BCAF0C952E7C89448A25D209D41D1DBD3D1F4CABB519CE68A3DFCD9A18B3A8ABA01567FAB6950CD543459FEA47539551D6562005CBAE77CEF0113C46545511CB78E90621E67392647264AA74C44A4B876E104D4D0301ABD9BF02D12F178E58613D6FBB9A9A69E7ADFC1EE845651E87C9D1943657519854208AA70BAA708524784924A80927918B6E314BC176770D8C9CB9F2E4A65C804143A402A72C6E90430A9603D6AD71A718A4979AA73D69ADDD9BADBA45479857ADFAA5AEA1D212B55815710B93CE6DBFB8822778B8E03249320829480C050003425A8C683D691CFF34CB71B3CA8A96A2E6A2A5A9422F46DC68613AB2B26A29AAD4FA9E4492DB224F1156D10542248E5CB61CE4A7636560E5AA5B04101B4D68EE7F36342C28865597CEC1A9466125CB80797234F5BF568B0B29D2CAA85B59AEA43F56CA5B1C4DB3CCC0B4A130BFB4049239913BCD1F34C67EA94A9723894B07F68762F5FDD7B7E0C5859EB615E6DEC96F3DA156A2D76A4538C9F2C4258CB784A68DD109242478CDC0572DC993CAF7C43E1B27C54D9FC650A01452E6AC7566B060F517D235AB004BB453798E7EF309729D0B53AF2EE5464D899373236B833E57DF1D4320CB5324244C484877A803C6BEDBC6088356E6FFCD652DB6B5D4051EF42413727C26D3F7C7AED8B6AE7C8C2A56164310024380CC2BE06CF616A54C68BE11C240735706DEF5D45625394F66D9D6B071AAFA9596689052B50721129064C85149881EFF7E2979E66B2427BB0B20A8909094953D6CE079D830D2130926C29BFDA2EAA2CC720D194472AC9E95B4D6B8808ADCC4242CD3140012784A55C7C664784CFBC629333078A9F3828A95C176F9AA0D6F46D3D01B4093C229E66FAD7AD621398E64E54BAA71D756F8513FF00C4AF6E63F9009B0FB3616126D8B5E592C4800ADA8C48A0714F76829B7F17E7F7D21A1B0D3ABEF944BE1933DE10525EE2D806CC404999B79DF13B331B879728A54B44B49FECA2B81BAD5CD2DD3ABFC3A41A90E5C317E97A9BFE0BDA24F9668DD41ABDF6D748C8A4A0491DEAD4128F04DFED7018201BEE663151CE339C2489265CB98CA51674B9E2B5481CC55FAC6F31254556029B507A036BF48B9F2F6BB3AD0AC34CB884E639FAC40470B8B097936B1852609B4EC27CCC731C6CFCC674C5913D6845D2789F8C747A30E571E30CE62F841653BDE8CDE1EDF9B346BAEA9D79AB941B654727C98447086D00B676B0E056D1D7CC1DB0D30B2972D45531E6951ABFCD5D4B976B9A5295864BC5292E09DD80F0B73AFDE358C8B4D643DC3950D7F15CD5525352B795C34EB024A968E25257C53B1B401D7124A0B2B4909EE9201E2481FBDEDA79F2686C310A5062E0AAF514AFD4F23A8F04399EB6CF549FE1EAAB0BA758E0698A669B67844C0054CA4131379DE2F33824616521456996EA56AA3C43C8B815D79C1C44EA7E9F48479668CCFF0032EF6ADE7BEAB42F14A9DA975490A693CC84AD416E7A2648F961E2E722594CBBAD60F0A52924121CB5289A8D5AFD6000973E25CFE624ADD1E90D38D9552AD3A9F3148BA57C54FDDAC5F759E130768B58FBB32A5E618A0AE296707C27E5B2FBC1F6A3539E91BFCA9B1E23E829A6FB7DE19EBF5A675512CB6AFE174A652AA642438427902B48936E7CF7BC62530F952070CC5278A6007E725C3B5684B0D98FA5223F15356976376DBEC75D2911879D0BE2719A4358F2AEA79C78A003BF17028FA98FD99697842861C2C1EA001F8B1F1B56EF0C7BE531AD740DEFEDE3686D7F316E80CD5BA1D53A3C2CC4060A6C405010AF5F899DA4A4E116A50253A9AEFB528370D077C40A54EC5BEBAEDE7686D7B3C61CE20D909E704C586C2E39FC4FBB12F270A6CC6D5A1EBF5DB954C6BDF2D550695029D43F5E74FB43554E7BDDF04B89E1331E20408FDC733EB787F2B02A2E58B8B8009A7D453E958511C531C9E55347F01FE3A4352F5118BAC4F5E2E43CFE64488C394E5EA70E9BDEC006F1A783F9D6151289B1F4FE61B2B752287042C73BF103F8E1DCBC0106897A75DB73F43E1780CA22E6F6B7E7F10D4BD48A9238C473F1263F48C38460554F9091B55ABD1FEFBF28C777CFD3F9844E678AA823F98070CFF5723D0DBA4F2B03D061E49C1949FDA45C9A337AEEDF6A54BEC2A7868EEF5DB7FC5FC2C61BDCCD557858B03FD42DBDB7F4BFCF0E061AA686843DD9BC7DF287D1C3599A94092B163FDC3F138C9C2BD8795BA51ABEDE08D6BCC094AAE08DB7079DBF0E5F0C63F4AE1A85C8D09E7BF9B7DA08C98AC0BE2E2500444091B5FF00630A264A903840A5F60078D61497AF87DE335D40EA09E5E216C1DC294A26E1FA7ABF41F4DE148D6DD5B6D05171016372AB029DE62449DBF59C0708667CACCFA5EA2D572DEF9C118A3306AA41432E48120A4836B9B5E0FBC6D37B63656042032920061517661CE96621B4EB1935EA6FEFDECC183E28140AE345424C120F024A9256A1B10A0653C27CF63B6C70C3172A648E032C128550B6828366D75894C0021DC6FD36B8E7F5893E59ACEBF2D6159457329CE74FBE3BB5E5AF849EED06D679C0A54DF885E6D88DC6E5183987F592268C2E392CA44F413FB83DD23E52F6A8DDE25E5CC09F9549E24D68CD53CFFCC513DAFF00B39E47AAE81CD53D9D14525536DBAFE679536254CA9409406F8882E711927BB4AA22F02D8B0F67FB7799E0F112B2ECC662D9C264E28D133C0607880608614009ADEB1B89095974D7705CB0A6FF006E76158FAAB14EF3A0A90E82D93F6004F101D36FC7CEDBE3E20C8913A610385441A00EC29F4E56ADDE91F59F118E9125DD490DAE86FF006B73715684CA72BE9969450321B4B9FF00CC2D7C30A236238C5A04ED3B1C4F617259D3880124BB12361D5B5F3615E55BC6769B0F21C7789003B90459BF3D5A346659A64F9630AAACD6B594388054A05C48D874040B11FBDCD8B0FD92C4CF1F24B596607E53AD99C0A3B781F2AC623E206130E5415350E9E62AECDA86BEC6295D51ED01A1F23B1A969E750141084AD5E28DC120981B419117DEF8B7E49F08F1B9C1E24CB5A58D5924BBDB9BD29CDFC389FC45F8DF8BC9001815A960BBF02C96B33B37AD772CC23AC3ACFDB12B96B769321A314A83294540712E0F230527D63CCDB6C746CAFE0AE2706B42D6851622852696E83DF28E1F8CF8F19E63C1733920B82CB51E5EFF002F1D76D4BDB8EBCCE8A5751A89F7D2A2BE065A6FBBEE42B70A53647174BDF9F3BF55C93B11272F20CD9292433F12013460E1EDE94D22A38FEDD6719985033E7278BFEE56BF9E81CD2B68A8EB739CEF3A714AAE456D5F19932F3C99044EC09DE76F49BE3AA65D272EC2CB4A3B99492033F08A11C9BDD6F150C4A332C7289563660E225DD458EDFDD61D7C43426469E72A882C650FB6AFFCC52AA1C571CF4E2F2E60F98F27389ED0C8CB292C2268D025012C756615E60B786ADA42E764C5466CF334A8BBA95FC91AB6AD48548D25999108A4EEFF00F538099F45183CE07C0DF0F307DAB4628006530AD1CFE3ADC3BD0087E8CFE5CD0C58BD49241F520B06FAF36852D692CC385C76A0329EEF8424171A4C9263FB8191F1BFAE24BFD6F0CA21012A49554B851E66C3D39439978BC34EFDC94101E85BA7D768CB30D179DB9429AAA32CC0FB49EFD904806F04A81EB6DF7EB8653F38C1AD6649242CEA50A6259EE4352D4859385C0CD1C4532EA4172C585AAFADEBE2690F5A734057E64D30AA94A5AA51C4730702D2AB054A6E93E1E60F0D8F989C406639D7E854132144A9764F86DAD6CF5D21B626661301592122CECD4622F46AD6BF7A43FE7799651A5DB396641C2B70A7856EA0788280BF8A09DC9D8EF6B622E463E76366056252A59249E024B002C0D9CF514AF323546768482134E747A57933D7C1DB56A8EAF37CC8D438AA90A71970F8D2A32A50E5C24CA844990244018B1C89F44B27800601A8D6F036D6B67DE1519DCB200501E2CC5EB6228CDEE91B586691C5216F952D959114E38B8812481712AFB5F95B7C490CC0CB04710068C68767D41B6946B0BB46A71F254A07840511BBD2F5F0D398B345A5A7B4E52E5684E6D99AE19580ACB185927BB800B9379B9FEEDE3D6299DA2CC2662E60952145453FBF841ABDABAFF815863889A998414A425EB4F1DB9FDD9A10E7DA95556FA90B3FC9448480610001174A77B81FB3891C872F993129529152410E2A3CC5295637F366CE6A37BF845339AD7F7F52F9AE7434DB5FFCA5E37FB51C246F6FC76C74C9197C844B96A44B4A94C4AC1A11B5E97F2DDED9E1E1153C3B58BEA7F930C748F56E6358DD1D1503952952827BF01400E222E4C5F97CFD31179A6351824B23852402D50FF8B35AD188BCF23D03956414DFC5B3BA865C7DF095B2C2928968A4788113CED756C67C8E2818BCE711899BC082A213422B6D6D4A0D7784E669E3F68E730D45F5D49A4CB406DA48290A6BC00804DE131BC7E00E25F299299A7BC9E1C83FDD5D3636E7AF22E634249A3D36FA7979727AC4442D4C970BAE2540901C4900A957EBBF53FB8C59952E4147CA8482D7A5B96963B0D2EF1903E663CDFC9E1C28281FCCD696F2CA25F093E271415C3732480A1C36DFA1E98A8E6D8C1872A12D40B39A1ADB6A9A07BFE4C6B164657A4725CA50BCC73A790EBE8095374A91F6940494F0A099320EE3CB738A54DCD264D532D642483F315370D767AD74ADDC42D2A6A50E09620382F5A93E57EA2F0B135FAA3533E9A1D3944ACAF2E42B816F1010148062656944D81BCF48C5731B8E9C14AE07984E9FBADEFD758DD7890A003EE6ECFB83A6AD489454645A5F4C334F5598BC8CC739502A5124ABBA7073201503276DAF7C34C3E231B3A6F0AA42F84D2C751CC396D6CD7B4305A8A892FD36F2F65A19731D675B99B2BA64B6453A13C2DA5A1C32361050013E7E7D77C742C9F2CC3293C4B484294CE144DAE4B28D2BA72B690D264B54C2017A390296E6435BC341B430E41936699EBF56A710ED253D2A9257DE9528B895CDD25571B5E397BB0E33DC26070E990254D4AA64C7F9501C820589492CD5A529CC424652921418B26E5C83E1FC52FE32DFABE9BC97C41BEF2BC5C2D456A057B4C1246F7F5F8E2224E0A628B5810E4004D08A3D6E45BD2350417176BD4B8E5B7A1F4864CDF3FCCF38EE997DC2CD352F10A7436AEEC10AB10AEEF878B6047145E4811898C26532A592B4CBAADB894AF9AD66E276F2B3D636330292E406D0DB7D2E756F015A4459C71B6892577EA5444D8F9DF6E7D7DC276560410DC3660EDBB696D81D4D810635AEA7AFBAC37B99BB4CFDA583C5CCF4079DEFEEB6E67A49C9CB8948012FB966D0335FD6F0DE7A0A8063E1D2D5FB75AC30D6EA1607142C2605A1511F0FF7B79E2464654A2DC487AB501A574BB8EB4AC35EE14C75B785DEC69A5493C8443731D44D150E250E70499F7DB90F3307CB13527292C192D4AD3EA7C3F98C890A1FB8172FEC445EAF50B4A9870081D773BF336D8DFAFA5E425654A7608A167A6C18354BEE3703CF412964870D5DF476D1FDBE95860A8D42D7FCDD89FEAFBA76E7B6C6D896C3E50A2E782BD356E5CB95BA3079213C3C4E18500ABEEF4AFBEB0D2FEA36D323BDEB7E2549BED161D7E76B6245193F100F2F95A8FADC1FCF5870DCBDFB3EB0D2EEA141301C9FFEA3637E5C5F2E5EFC381939000EEC9ADDB4DED7FC6B04225E7EDC1FE61F39511CFC893F324F3C3A464FC207FB6FE14B73A7BA410DEFE7CD9E11DE1E67ED91F71FDF9F25464C546881E1414B682B530E246B4A7E34F7E9AA6FE3ADFF00CC57FF00E457E78DBFD157FF001FFDC7F30E23919E36777543FF00EE1FFB8631FE8CA76E1ADEE6DD5E08528CF51B1709B5A547EEE21F2F7E30AC98D886B356C2D4A182370CE9300A5C2379851EB6B138426654514E177F06F16F75F1511AF87BF585EC6728FF009849E9C5D49F3B587BAF384C601418701A9156B3D39EEEC7561A39521C539B2146EAB73BF96DBFDF8D7F46520B259AD6F6FC818215B15EDF1020A44F21CED3D7F51842661D4456D63F6D7D5F94652A29FBC2DFADA5704116BC0249F4F2B0E76F761BAF0E0A5495241705BAB52A5F958DDFC5E49C404A48258BD0687C7F8FABC6F6EA87507FBAF7B100585EC3CBDC714BC664D8CEFB8DD5DD951219E82FE03DD2A21F4BC4A0D8B6FB1B31AF8D8DADAC3FE539A54D02955B40E115D4E4162482D142A03A1683FCB5CA0C0E206390E78595270F3A48C34F40285065814571519943E60C58B067E7123271001704380C09E6075AFF0036BC7BF3AC7B66D1FA494E135ACADD6F8BF969741937E84CF29B1906048C7CAECA7B258D5A920E196F7FDAA0FE83C4F531EF1CEBB7580085706312431FEE1F9DABB1B4757B5DFB5DBF5C86A9F4FA02035DE25C5226564D9264A790E9D37B63B1767BB0AEA4AE7492C4070DFB480696FB0D2C63887693B7EC17DDCF0407019635E43AEC7C2D1D5FD45DAAEBDD64FA9A554D4B2D3AA2375253076E968F3DC6E37C763CA3B1D9722524CC4A12C3E674876E76B695BB33C70ACF3E206378C844D5A81268146A1C9F7F48853F9054370F6719829D2FC90AEFB8CB7175484ACDC83CC7E38B7E06760B23491839299A411C4C86236D3D436BCA2A0BED5CCC7A9B1897FF00885973A58973F52E29C92BB4FA36851C7519B87D699259EE9627AA78879DA6D6E9CA6E5E6F89C6D25E0B80287EF6700F88DCDFC2AF1B8CCF0F313F2E1D24E8CC2B6D35B68D76D21A1CD6BA4E81696D8CAD2667C6A755FCC0911212A16117813F09C292F2CC66255FEECDE02BA049400D5A07363E760FCD2999868892C75BEDD2BBBB6F4168459876AF96D1B455474CC36A1BC14AF6B8DC6F613313E71189C93D869F8801E729955A24B7938ABE9ECB338CC52D8CB4A9AE4077DB4AFB1CE2BDAEEDFABDB52D287596D2926490D2605A2640F88EA22F3890C37C2C389502A9856D5FDA4B750E6BE7D1E1D61B28C5672E161496620170FCEF5B6ADAF843731F685A900977326DA039A4208DB62523CBDDD799B5603E142920140528D4905045056CDE3604D77874AEC74E92FF00EE1009A51886EB42E7AB8A369100CDBB7EFACB8C0FAFAAA5B1C657C2E16529B5AE08076DC0B0F22709E61D959395A4A66A9285D8829009E8EF4E5CEF1A8ECE62921452A5280AB0734EBCFEE41BC4F3B2DD59A9FB4BCE11419526A0E56D2D3DE3A9714A6B845CCAC9E1DC1FEADE6D7C736CF0230A0A829013BB25CB1664B3B9B7DC434998799875042A694AB4049A1A316704EDFC476FABB3CFF0F50AB4FE584A2A8B694D7B9DE71C92014F0A892266C4249DEF7DAB581C1CBCCF10578850013FF4C287EDA005EEEE2DA588A40AC14C989056A25DEF527CF5A1ABECD1515467148DBCAA62A2ED72D478944AB72646E623DF318B6C8C830F2C02569E1BBF981AFD2DD2B0DCE5938170694AB1A8D2A2DA3741D23706DCAF7A8A9A991DED792AEEDB4DC2A6E66011617B8D88F3C63112F05212409C800025DC1B03ABBE9AD74E9AFE82671001449E8C697D7AD0B7A87B7F28D3993E4544732CDD4DAF36E12A452954C2AF7B4A4181B102F8A5E3F138898B230C82A92927E70E3A535EAFD378789C1AD20294B246DA8A01A5EEDE0CE22BACEB573CF1ACFADA9490084D1308F106D3B1FB13B8BDF7F8C4CF65F2D56625467A3F6915533EBA9BB336EDAB340A32A4D0CC0496A3B9BF3AFA1881566A25B74A43A92A75C308812A99816BFAC799C5C96309971212B438FED76F20CF72DCBC28A04952428541D7E9E75FADAB0F9A7BB38ADD4494E699C2D4CE5E921684AFC1C693720494A8F2E477F3931B89ED194132A5B296A042529A8B6A459F991EA2123365A4B15007626F7FC74E7168A6A72ED374668F4CD232FBA94F0B8EA8A0293D482EDCDE763E5CE0577103118F5257892A72E529721AA2EC454EA2BF58732D132601DD825F502876D0B5EFAF237AD734A8ADABA89A9AA5ADC7092E3409086AE6C9E1F09B1B91E5BE25B2AC9A432A6CD02805E8ECEE0EE079BC253A52D052160A5ECE3F9DC74BD617656DA8A85252216A71C84850429504DA660F53CFE42C9E2F1185C1F1095312549B80A17D0BBD6D6D3EA8CC065D5747ABEF6E9E9F58B032DECDFEA4A39AEA1A8029DD85B2D12018173C412411331045E0E2A38BED5AA52952788D1C392D7722E2A0FE63596D33F655B6D3C36D983562734F9837DC8A1D3F40142380BE940213CA78949BEFD794623518A4E378A6AE6710350E77E4E6DB39A6B1998B4A4F091C2545AAD5A3B6C2A3434A3DE36D1E9AA3CBCBB9B67B541E7D10B6698A8DCF310959102C208BFC31178BCB06371084E1A61E00FC6A14096A8D6AF57A7833B33C515A0029716A8D7E9F5B0A8611AEBB58E6D9B32AA1CAE91BCB291A051DF24B60A9239FD94933C3313BEF899C064986C214CC9FFEE2B73AEF434AFDED0D133575150CCE29E429D2B70FE706A4C9B32CD2B1D6689D5D63C149FAD2DC909493241415CA4DB7E13EB737B14CC56598792FDC21C0D05475000724599FD21CA160B82A1BDFEA7CAFD22CBA0A1A0D254E1DCE50876A0890810BBDCC4A245AC36E700E2AD9863664E495E102920B874B87D03A41715FC720E5065A4FCC43806C41D8F4D79BD9CDA23F9CEB87AA5484D2D3A68E9FC4105011FCD02D0A80088E5C5EE1318C64985C5E2262953C2D4090DC4E48E94A5F47F178618C9B2C2992B751A000B123A7B6F07887D5E7A5C3C6F360CDCA94B13BEF1CF6E5F8DAE585C192689D589FA0B1BD6B5F0061B9933420AB84807521FF0087F17FA447EB73E652905A792557949504F0CF2127C899B49C5870997AD4C384814D2A4935FE6EEFA330D5089C43B384D8B1A3BBD1ABA9B52B101CDF5496F8A1C0627FA80B6FC8FA6E7EEB58246553385F80B51BE5D29E36BD34A42467252A62B0145831F16E5BFB3104A9D56A755FF140E136F10BEF1B917E53EEDEC6C183CB0949796F673F6A73D1FCAF0F25CB2B62490E1DD9DC54F833D2CEFB445EBB51B92A3DF0B72E31CFD081F9E2625654A2CD2AA6D4361BBDACCCEDCAD0B19029F35AEFA74888665A91C2A402EDAE6CB11F7824F3E7EFC4BE1F2B98C0196CC2B4D99F7F4F38D44820B3B0F7CDC9F088BD5EA35AB77A081FDE09336D81FDF5BDA465656A0C44B735D1A966B72F7AE5586AF102CF62DC98DCB69AE85E23D53A85DE4E026E7ED475E84CFEEF7C4DE172DBBCAA1D83FF00FB7F9AEB511B09640147275D76D74A35294B986A7F50BC2DDE4DCCF8891CED73E6791E5D70FD3966BC1E9BEEC0F3E7B178CF028E9EC7A7B1B874275039C4AF1CEDCC7CEFCF0E519726A0A1DB71F753728381434FA7E634AF3E7099EF08DCEF73E5BF2DB0E13972187C9C8D016F27F483815B7A884AACF56A375931CC2B693CFDFD3DF8C2F02948FDBC2D761A0A0A836F621442141C949D3EF1C7F1B56DC67AEF68EB311843F4D2FF00E5EBFCC1C497670FB4033C5F270DED3C604FE3F2F96373824B71105AF51F9A42810A21C0710A919DAEC7BC2473F10178E7CB9FE58D5385973094A594D46BB574D746A0FAC618BB6BE10A5ACED6A27F983FEA120499BCFEE309CECBF87E6200480C5C33BEEE2CEFB3C6E3E43F3538980F53EFAC3AB19D2A44B824EDE2DFE7E7F7CC6E19AF06548744BE2A35001EEE1F91703585C4B5A83A524F4F7EDE1F28F3852F8897072E7F2DCCDFDDF2C436324F700712784A8D396F435F2DEB1AA814FEE0DD61F98CCD500F18F5E21E5E639EC797CB117FA79AB2549415234228FD2952F52CF0977892581726C07376D46DBC3E51E653214A06C902E0FDA1E5BC193C845BD1A9C2198A0B52486771B1D76F7CE349A569524B108A574E7EC08764D428414AC137240222E041B7974EB718D664A49490A48200356B68FBBFF9E70B49C428D2DA6EED52DFCF833B43AD354ADCE249516E9AC5F7044A4FF48091E2326D6DB9CEE2B98ACA2522677A164A892A096D056F6A1E8FD686564CC55DE8343B86B54FB6DEBDD07F2A7EB966BB51E68B78995AD25D5113B9B0599BCEDB472E7E6F464597E1788CAC3A54117FF6DADD534E7FC3C6ABCDF3458FF7315354FA712ABB0725F4EB5DA1A2B750E92CA94D37474C2B1E1C414AE35A4A08D8DECA2623A8B47338778693C7300972C4B492001C352D46259EFB986ABC5E22692264C511FF00A8D5C5E95A7AC46F39ED12A92C292D25AA66384880947104C750028DFCFD2716FC176566E2D940A9054DA16ADF61B16FBC32323BD72A0E75700FD4D77B52298CD7B44A36D6A51CE9548A24F1A1495381DF20552940126E3FDAC69EC4E270252BEED5890B63FB2CC694A8FCF3786D332B54F520CB1C201B8DBA1E6CD5D62AFD41DAD65B468529354DBAB0492B2E804F9F093607CF963A3767BB2A7112D972532980705007D40AD35A08B5E579384201980A8D3A790D9DFC2B14E673DB930E3ECADB5B95350CA5D4B0594AD5DD29C0526528078A7948E56C48E65D93C1226C84F7D2E59E2A80D70A17636A72AEE6A5DE27052D2582343A01663EB5ABFDA2AD7BB48D5CB52BEAABAEA976A164A58348F2001C5207196E0083126398E78E9995765B2E19795AA6C952932C70A8CC4248201AF0F103FE1ECD19C1CB44B5FCD2D240342C0F3367B3E9D4421AB63B57CF9756E8C8D4D53381B97175CCB5208B1E12A4949EA2079F5C46644BC164B8D9DFAB216852FE43C25693C2589F95D88BF9178BB607F4C8427BB090A57EE0CCDA8AB7956ECEFAB4BBA27B48AAA734EE5336D33B92ACC1827726092E037B8DFD31D025768FB349E29AA2A134821291216C4B14D592C295F3F04F345A5212124352CA0DB55893ED891689B766DECFDDA4F6919DD26554CD2A8A868D73985621E6DF4069638941442884CA0280BE3CC1F17338929C4F7B257C1296A2C0382A721B84382CFB0B448E5C70EAC24E2A092A09BD284397D6C6F67A8AC7A7DA732DC97B11D3597E8CD2450BA9792539954777C4E3AA0429D8717C4A4DCB9B28C0F28C732C0652ACDD2AC5E632CF73874954849510FC42A48043EF5D758E17DA5CC38735484CD1598CA00528A037E571EAD0B17574798B952FF7AA6DA2106882B88A90E11FE638D47C4A0573F6CDA60784E18E132F3FA99812582154140E03D035D9BC46A6F12D9866024E1B0E65A5C902DD2A7AF3A6A6F11F6B2319957A5145C55554A5C2D494A884A64026448FB26E7CB7C587198708C1A953A67720268A26F7602BBE839C62566A66CB09EE6AD550D49AEDEB6D748BBE82874FE81A46B32013559F54B6A4788A8FD50A93DDDC2894F882B9C4103D31CA55226E231AB95326A9520AC10AE2FDCC5EC0D3437ADAD48C2E7CDE207BB2923400D1FC3A78F898ACB39CD5D6C56875E50AE9E342F8E5203B2B03864A620C6DD77C752C065B2A64AC3B04AA5AD2C4F0B31096AEB53F4BEE86231844B50E0341CEFB6D5FAC4332646679EACD1D0D2386A9A59FACD4AC12921C24A080B1C161CD24FADF1B2BB9CA933921494853948000239DDC97F6CD151527158AC424A4AC242EBE63A73FC345B796690D3D90B09AFD50A45555C05B68BC0526F109907E1D3DFCFB1737118BC4998952D48E3372AA5580772FBBBF95A2F5875265E184B27E7296A80F47D34EA35F44B9F6B2A8AE0C50D2B41BA06F8D14CB6CF006D077E2E10999B7DAB75DB13D95CBC261B8A7CC03BC980099C5524A4101817029A8BE9568AD4FC1E2A6CFE21C5C014E1BC4D34F77A9784B8E3C1F0DB6B72A9D70C70B7C52924F3299D846F3D622E5FCEC5485281484B519A81AD7F3A5045EB275CAC34B4A2704B902EC7424FE3E9BC58F90E81AF75BFE259BBA9A3CB602DE715C2A7109DE128FF88B9D8C030664E21339ED0A30F2D586904F785268976700EA0303AFF22233B438B44C9F27B9E1090A62D5A53C6F5DAEF6898399DE9FCA194D1E94A0EFDE309566DC2A52F8A409FABAD2A32488B72BE39F65AB9B8C9F34CE9C4A492482AB55C7CC4D3D3C19A1C66186C24EC24A2A9C996AE0A92D570FBD74AB0E5A339655A673BCD07D6F52D7C65EF0E26B8949417920DC774950537C361B49911B1C37CEF0CBC54F1230C851EEC8E352412002037CC28AB5DCF50042DD9CCAB2CE19AB9B8D965C5124A5F5A371120F2EA7585359A8E9B4F28E55903086A980E15D42871957532E5F73C8EDE78B4E51D9996AC27793D4AE34A5D280EEE41D9B9162348AF768A4C9938B47E9A7A540289201150FB8366A5F95223158F1CD1C52A9C3B53528238D0952F856A5ED00022D3CB7F29C3695227E0674C13414A41F9490051B525B98D2369C50B912C149058B3D74E61AA36B73A3C8B25D159916C667AA6A92C65691C69A2942145226CA285070C98DC6C79E1BCFCC4AE67712945531F404A438FF0090A1A6C74DE23BBA0012452C2F5AB3D6DEED78DF5FA8F26A40963226C36CB414145208593112A52BC44C89B9C38C3C99EB09131454A2CEE1C1F3F00F71F56137E42A2091B1777636F7D6D4101CDF55B8B90B5156FF0068CFDFB79EC36C5AF2FCB52B002E502555228CE395BF35B4305AA6EB3157BF9B0BD2FE3E1100AED4C9511C64240E28D87C36F9F4E98B7E0F2B4253C294840236AE8C6C37D0FDA23D52B1137198758528252A0540BB2AA3C3ABC42B35D4CD99977C239050006FB41FC39EE312B96646A52D4E93C2F4241E7607E9B3523A6E3F1386958194C8485F08726EEC1EFA9F0E9726BACD751B6784A5D2278A7C647A7300EC63D2D7C5CB099294948E0F9410E0A76B7BDCEF11996CF958B97380482A4A5836E41F33D0D6E62BECC73D016497491267C66E26799803A7511EFB449C0012EA803421BD34BEAF6715B452733C24E46352A4F184859A6843F56DDFAD2B10CAFCFD2A20A5E3CC471458ED3CCEF6368E932313380CB93F334B00534A8F4B8BEB16F12C0C34B2470AB87CFF00C9D1FCCB3C72AB3C041FE7122F038CFE727F1BD8DCE2764E5E0542075007833D3A8D28CD68D00510351B5BDBE86AD11DADCE92A2901C2626E556B8DB97DF389291800E494826971D3D4E9A52D0B212096D05C75B577E4F0C2FE6E9B8EF0C8907C47EFB8BD80FC30F9182096F901A12C45697723A3FD68C21CA659507B253B877360DD3D986E566817B393BF3B01BDED249F2E7F3752F08003F280C6D46E9BD3FCEA61544B4921C13BDF6E51A1CCC904005C1CC8827F318553866D007E87DFA9BC2DDD207F68FC7B6D6B081DCC900CF1C5C8E511F1BFEFDCB0C3A3500F4FF00023532050D4036603DFD3531ABF89A3FE67DDFF763612258B068D7B81FF23E5182F366D304AF6E7E667CE22206FBE37FD089E93F2920820330E7B6FAFDC08732D80EEF878B8A8E0506CFB0D2E3D04708CDDB5184ACDFA9B0F53F95C93388F3D9E0999DEA945DDD9B47D6A7C2EECD08E2BB3C427BF132AAF9C241AB01D76E6232733147085779F3B9F77CA6FCB71872BCB4CE0100708662406BD09D0FD39B5619E1A64C4FFB2A964B1E106951636DC55F42F66781ACDD04C0548039288BC5BF1EB6EB8424640308B334AD4A51735A00FA5F6B7D7589BFF4542657EA0CC0EDC412CE6AE483D3F9856C57000A8BA46DB133D7D48F5B8C6715844E29065A2E2F4B3353404BFAEB48ABE3A64D9B31294A58254D66074D28FE62B5B557B79924812B320F3511F1826E2C6E6FEF386D86C0F7482820716A2AE0396D2A3F1168C9CA12825601F946BAEE5FED7E6D0F9439A24260ACC7FEA3D6D6F758CDFD6062A1DADC02D430E65820F128A881CF561D7EAC62333A50AF754D4B56AD43F4F6D0FECE6D0532E1B40B289036FC87CC72C39C0604A7088F943B397DF4B83E15D75884CB92A5CC2555622E79EA2E7F160CCD25A4CD53F694E9D8589DBCEC418DE399EBBE19CDC2B4D989090D4F3AFABF96D58B062A48084828D9F57736FA1A75DE25F9766A92412EC8B58C1F84FE5F9E22F158321D9246DE7BEFEC0AB06A895F351343CF93EEFEEA369652D7B6A0003CC4DF7B8F744131BC7CB1018AC3109502284353DD8EC2BA8A43F961980B0B8B6EDCBA6DEA7B219EEAB6E95A5FD62B0F0806C571EBCEDF87AC1C72BC364431A383B8097A12C1ABB9603936E213329C38A0BFF817E7B34509AABB4FC8B2921C6EB5282AE3E200970A88D801E254CF48FBB13384EC54B94A0B52425AA03020D5CFA7D1ED1852284804DADA55AAFBFBD5A98CCBB5ACFF00523A6834D52D5D53CB3C083DCBA841262095291C31026E408DF7BDA70E8C0E5AC26A524A06AC2DB780E605232A94A007C8DC562EED67A7F35D233A0EC93B5CD48976AF515635A7A8442D9529DA6796F21775F842C2D25201DFDD87A3B7B9660D6654AC08C42D343721F467497A11AD76891C3144A523BC20F17200FA8FB574A3337E61D99766590A8AF54EAA566D5693E3A5E07D94A9437485A16537DA45B99B4E2532FED1E6F9DA972B2FCACC94AE9DEA48F945DD8A6BB7D22E9829B2152E8D50DC3EEE3E9F46AFF13F649A51B7579369168D414CA2A9CAE5BC5C52365869DE28F3040BE37C4762F3DC462A54EC4E2662F88BB04B04837143CEEE6C4C31CC70A99C7FDB04390CCF770EE6FD0559F68ADB3CF683CC909AC5E5E28E99B69486E998FA95328A78CF008516E7722E76BF58C5F51D91CB30180188C7198E99654B3DFCC40E24A5C538DAFCBAB5838CAB26C4CF530043B3029A9028EF5EB6FE7BE5D867B04FB587B54F665936BFD1144AABCBF35EFD65D69DA461BE14BA529E1515A4288023C33067AC63C6FF0012FF00A98EC8FC38CDE7652BC5A0622528A4CB215319AB555454784770EC87C1FCC7B4B2FBC9485814F980671E8D51FC459751F429FB6CD45452B4F65D54D31DEA4BE456529051C60AB67B98B48EBEFC5070BFD73F64BB95A573D05C3026517773AF07BA458B35FE9CF374AD053C6F6142D701D9F5ABFADE3D1DECBFE8BAEDDBB30D1D4995E4795AC6639B3406A2AB5BCC2DC694CDDA8EF16A32A25425044F4338E2BDB5FEAC7B399EE6527101626092B265B9525290A6770C0286DB1DAD133967F4E59AA3018842B8D948621AA684DDDE8F60F6D68F49EBBF649ED5F48769DA6742E7D95139CEB535634C294E324BAAA26B8EAE405148DEDC660D809938B8647FD47E418ACB674EE20512509EF439B90426C059BABBC79E7B4FFD3AE689CE25A5D65E691FB08FEE6707E9A3D445AB4BF46CFB42D49425ECA96D0A920BA0394E4348DD3052ABCA6F6F43B628B3BFA9BC9938B5CC1352895C44035B24B7ED6E46F78E8723FA6ACCD78592172D7314100D53472295FA9BB7888B7B25FA3E7B5BD1D4119564FF005DCD5D480B2B5B03855104F8C916079100C5F0AE69FD4A767333C2A513310489696484F125C9A87600383BD2D4D636C2FF004F58FC3CE32D724872CDC20B8D03D7DF9C573AB7E8FAF68259733472856DD3298A9AACDA5C615DCA699B53AD0482A9B84C7839D8CF3A8E5DF1E32C9D984A0AC50095CC4A5142CE4802CF476BB5EBAB4BE3BE044FC2E11734C83F2A492E8B53EBAF2B39B4744F2EECD7501A8CCAAB523BDDD0D3551A7714A292AFF2EF29920A428AF7411CFD71EBBECEF6E138BC04AE01C4B9B2819600DD2FC4ED4F2D3908F3F768BB1C8C04F54B5B009514970D50762E7CC7D627398E63419027EA790D334964A10972A470852884813E283636DF9623B1B8FC5E2672153D478CACFCA280026D60F436BE94D6B53728918596B52784FCAEEC36BBDCEFE1B56203579AA5F59FAD2D55255B24491799802474D8751B5B173C065F2D7850B253C5C37200D9CBF56DCEFAC51B138952311C01C241621C806A1ABF7AB6BBC2FC9B4A6739FA9C396B4A6B2F4149AD5BA9EEC2127EC96FBD00AC58CF0131BF4C54B37C48C24E1282C3AC901296502C6AE4394D09201009D00B45C30064AE4B9090403767B0E5F48B532B4767BA3592D102BB3822E9521D514B906627893BF4076F53886188C66266097DEF75243712A84A86A286E6A09B51E915DCE731FD33940248240009607951BA73E6D1853516A1D615AA7D2E2B2FCBA9552DAD5C21086D7BFF002CF0F78142C2C626D18639B63158541938792672A6063303922E2AC091D7AEF15CC3663331934959258B81A07D68D600D0FA3B89AF0698D2D4E56C5334FE6FC278F3499471C183F5720A01E5B743BC1C4365D819C95F7D3B8932D45D726A14AD5B881A35ED53A6CEF33C262B3195DDE1E72D2A01833967ADC569ADEFB88ACF33CE2B3317D6E5456283DC47EA8A49E04BE09F100DA4A528E110088E5318B4CACFE46101C3CACBC84964925D4A0DAB94B91AD7C394060FB2F9CC8529671B3B84D59D41C07A5FC8D3D5A0A5C83526A501971AEE196E097C70994820CC88B408DE60C1F39FC267B83C220CE501C4A0590FA9B86D0BEE2FA343B3956324CD42E6CE5AD94092A2FAD6E59B975E5135A77B2BD254EDB3488455E6CD24F79C5B2957224AA5361F740E78AFE27319B9CCE99C492251344F0B1AE8EDCAE0DFAD2CE71495C9972825949001377207F1B7E62079FEADACCD5E2ED5552997D3B5189088B08E2042222E3A89C39C1654785294228F43725DCDEEE1FEB5308124B925CF3E7B69CE20799EA4A5612820043EA90FA7886FC8CDC13CB9F9EF8B7E03252A524A935A55BC0D5C3FF30D4827881AD68F773FCF8DEF15FE6DAB1A1C44293BC0F101B9F2B8FC63D062F797E48470B259AF4FAD74F65A1232DC07152FD1BAB50DFCAF48AD33DD521CEEC36EA418513E21279D8137B6F63E6631273302A9588C3A384B2D55A74BB35C1D3A8112D9765C898854D203A6ACDB68F6F0B6A62B2CD753B8B2A0974285C1215BC7483CBE5E7B63A461B2F9186972D53120384DC35C36ACF43CBAD0C46666B9B3C2D087570529CAD61BF3FBC40EB351BA54415CC722BDA3AF3FDFA9167C365F2972C2D0010402384392FD1F573F8A46BD9533533D52D692C540317B3DAB7BB50DF42C222798EA074951EF02A761C516DF91DF636E9B6109582519CB41140450587B6FF348B567995210A93338402AAD03EDA003DDD8C44DFCF5D244AF7079DA7EE9371FB8C5AB0780EE9344B95004783BBD0BEF7109AE4714B4252C03063C837D3D5A186B33C74AACA2520112153EE1D27D2F7E5B4ACBC1AADC229C8F4D05858EF51D124E1406E2A91AF95181E5E3CA19979BB8A90A5445C5FC8F9C74E62DD36C3C460CA4B101EF4FAB51A95DFAD4C3A97877341437A7F3EB0DF519BAA6CB85007FAB7B7AC7422FD075C3B4614901869F96D7DEFAC3A12000346BDF573BF88AFD2A959CD5C5154ACC0E40FE33E44EE4018752F0459CD01F60D6BE1D616461F4097D6B46E752F4FBD0462E664AFEE5DA62F1F8DFDDBE161826B26D46625C697FA53D046E70E59CA03757F1BD3C5A123B9829444A95F133CF19FD116A20F93FD49BFA368F5C770FFD8EDE2DEB1A85728FF52EDB9981F3FCF18FD1285D247FFA47DC08C19005E581D7FCC62AAA539CC9888337F7F23B7C2FCE709CCC44BC1944A586E270E457F1AB75A68D0BCB4265A492900914047A83A50EE2F7BC02ACA08014491B9076E77106F1D63EFC48A1099C90A0C41A8E6799A6E2FAE9681299D354000A52491462CDD756F61E35BB982D447888BC448BF49DB9F90DF0D1139026141961206B7048FA0D776F387F3B2E912A57794E221D98120F9BD6DB73856C3EA4A544ABC46F79F8F9EF617116E9853152D465ABBB62520B10D40472F7AC442FBC532524948705B67EB407939FB70ACD5482471F0DC820AA0D89E46E3DFF007401179361A64C9738CD4170A277B13E54FCB40BCB810998104F139701F913B52CE2D0EACE66B21104C9DA3981B91E97F3B79E1A6608561710084FEE34DCB03777D3C29A3C3544B5E1C28005B7D00DBC2961E20830EAD666E20825563E640B4F537F873BCE1BE232F4E3D09F95DAACCF5FAE9CFD68C710833ECE6C4DCBF81A79EDD19EA97355909E254CF98DE663CFD26DF18D3F41DC4B292914140DBD35D687CFC94C1604A5567259CF2AB1A8B575A8DDA2434D9A2B652FED6C26F6EB11163B5BE2710EBC110B52B86A76A86B0B1B736DC6B594C4C970070B90CD5FBB816160695A0897E599A2E5202FA589DFE307F1C4662B04A20921CB5473D77E85F9814868249492FF002BB102FEB6F7B3458393E64A58582AB2787FAC1FBFDF7E5CE3158C661BFEC2F5F99ADE15D7A575AC2A896439BD9852AC4BEB1AA95BED3BB4FABEEA8D87E8E8DC5417950070C6F0A026C3CEF3BE2898C9F86CAD049280946819C54B52EFF61E6A892AA0B3EDA791A7E62C7A0EC034D64094661DA0E6C9AD7C80E53305C20A08BAC10DAC83E844748B6206676B26E2499584415D6ABAA7836A1BBDAFD79EE24F0A5492C4534AD399AD1ADFE21C337D75A5B4C512E8B48B5474CA690529714CB6A5981B853A8E29F7CDC1C3CC364F8DCDC714E0B592494B3A58DAC3E9D7A46BC0EE52E0747B5ABA30D472B475AF51F6C59AA96F2330A9714B54FD58A1E5251CC2A1283C207AF96F8BFE43D84537793A4F11A28F121CD37D69D4EDD59CFC3CF5AD250E438AFA5B93781A36FD6DD55AFABAB5E73EB4D2DF4A8F857DE1B0246F17239C4F43EBDA7B23904AC2A4A512932CBFEE2069C8B52F5163CAD6DCA708B0904A8956A2BA695A3F5A54ED15C6639A3CD394D58BCD3B84A43850C4779F68006402608F39BF96D7D3819331425094028302A34E27346068D7A5A2DB86C38580172DC9E16511FB18EC68417F30D488857EA6CB154F507EB1F58AC514F842549248513204401CE7D7A62A7DBDECC77F92E289C40C30EE54CAE2BFCA6A5886F16F48EB9D92C9F0D3D72C280D2AC391A5F60DA72B47E80DF413E62DE61F47FF0064E92D04BED8CEBBD709971415992C2428993610624F4B5B1F9B9FEA872F9B967C4CCF659C519E81353C0B27E5A26C1C90EFE7A47B93E15E5F87C160125084A8D2C91CF46DB773473B47B3A0212121490BDE2C3CBCA4F203D27738F33489C661583352E08A3B372BFB6DE3A6E63DD95A099009E497722CF46DADBEF53AEB94534C5688111E1005EF1BF972B73C45E284C9988969188FEE70CDB8D8DFCAB611218432C4951320370A87084835E122AC3CDED48F25BDAB2B6BBFFC5E7B3204B24203FA9803C3B4D322796F020FC71DE3B31842BC927A913C02657CC2F50926B6E82D51CABC1FB50A9433843E0C319AE0B3595436D77FABC7AB54E7868284A129054C3455E1927C099E53F198F2DF1C2F379B8C958F98254C51489847083407888D7DDC476BC8F0D859D97CA54C9284932D2C0A43DB524736AEBBC2E14EC8325092B804D85CC5BC85B903EE8C4A499D3D5201571061B9A96F0D796BA188E9D81C01C67089681534606CE76DCFE221FAF1B791A6B3BA86929E16B26CD14E3600F19144F70DE0C41BC5C6263229AF8AC3A66A8F12B1128A0D411FEE0241B1F173F730DDB6C1E1B0F934F9D2A5241125668904512696DDFC0C7C74EAAD78F54E7BA8E85D2AA7E0CE730484892920573C36063D3A5B9463EB17C2DC189F9560F8940FFB32D9D8FF006063BFDC9A88F8FF00F15FB55FA4CE3112C0349CB000A37CDEEDE1486BA4CA737D595F4F4F44DB8780F0F72A96D3565C8BF784009E1113E2C745CE30586C1CA56257313FED8E23C243F9024B1D5A9CC473BC1E74BCD148929155B301FF00736BF6E717552765234BD3B75F9DE4B505D653C6DB050EAD92A5899FAD2525B3C8DCF5F7F3F5FC43C221472F958D4495717013C40A85588E17DAACC0EB68B3CFEC362E64838B3216470F1F10496B3D4FD47942456619FE7B52D653434DF51A7A7E24B25A42528602A64ADC484A5E9E8A51E1B6D189B09C0FE8E6637BD0B9B39214B593C5C647ED29492787C39C73A9D8D9F84C5FE94B8659480EC4176F176B7D3495E4DA0E93295A733CE72F7350D7892EA69D2E28B4A3211C4194AC1DC6F698B6397E6FDAC95809CA9499E996A0AB93A38DF96B70E6F17DC0F62B159EE1FBD44952F892FF00B5EFD0381C9FC18D63BAA6BB33A52F36285DCB929FF84C10A6D6DA0C9F1029413E188E2FBB1D0BB199A65F9C4BE35AE59596FDC52A0A7A30AD35A6B15ECCFB233F20528CF94521C9A829147D2FF626FAC41D9CE93528465C285FCC2BEB894B496CB8A51524F2080A1CC4DFE76C5833C9596E5E8562A6E224C99680E949524F16BFF2046F60748D3229189C4CDE091215398B3004DF981A0EB4A0DA27F94F6579952B4C669AB296A68D2EA92ACA2816CB8555414A1DE0052906DE1DC1EBB639D27B7B93E2272F092FB92CE933810784876241BBB72D758B566395E6D864248CBA77090C7E45077F0BD28D485FAF2B339D26C50D3D2D3D569CA5AA491DFB94AE3A1C4881214E204483D441331CF1BE1E6E0313350B463E54CE253F0256950AE84051DDAA2DA4404ECBB16A92B33B08B96C29C40D05DEA01B7F9ABC52BA87508CB5483F5AFAD3AF24A9CA82384AD452083C3B02276E73B6D8EB192659271B2E5F772D20331501C54F01CBDD445352489D312F54A99A8FE1AF3F08A773CD646566403C8CF999D8833CAFE7B62F597F66CF106451C3A9835F636DD85DE1624E9E5BFBF22D5D08ABB36D53F598E2708E19BF15CF3BDC7588C5F703D9E4CB0974D5AA1AB50CFD4302F4D61CA5254453AB69D3D748AF735D4083C52E1EB1C4479723BDBA7E0459F0B94A5000096AD9AAF46A9F51E5A0859325C907A3EAFC86BA7BBC12B73F68B88594778A01690F178A031C40832926153CB7239DB1B4CCA0CCC5E1D610084A9DAE28DB126BF8D5A27F0004AC1CF0402AE1B9069422C76A5BC225DD957613DAE76E4C6A66BB23D3CEEA9AFD32AA75D586AA50CF748AC2A578B8C904700306F611BE28DF1A7E20657D8691949C7CF460A6630284A429871776520B10D5F017D5A935F0FF00B213BB4D371E65CA54D12880CC4E86DE5A7A5E2A0ED234A6A9ECCF5256E92D6B96AB28D4D96142731A353E1D5214E242D01412400384F2DCC1BC63A07C21ED3E1BB5F942F15879A99C829470A8317770C0FA59C6ADAE734ECA2F20CC528992CCB06654314D9B5F3E5A456157992493E2DC5AFF0018F5F2F3DA71D6F0D94A44D9930A5C1219EB6B7AD6A5B5BBC63B440A9186421AC28FC853DD7EEC6EE6095ECA262473B4F5E5D45883C84626E5609291448716E54DDFCBFC4472243CA4921E8ED5E5D1DF52417D4B59ADEAC02615D64933F21F77A83E4E9184A82534B966FB9AF56E70A230E285827A56DBD6FB3F5867A8AB4920F175D89B8163791E9704FB8CE1E4BC182430706E763CAE6E21D4BC33800077D68D47AB1B7BAC372EAC6FC4608224EDD391803D7E18708C154B80E19DCFF3434E7A43A1863F2B33694F47AB1A7836CD1ADBAC4A64F11B98DF90F79E7875FA5E160DE94A575377D7F98728C2392784BB6DCEBAD2BA6958E175A08038E7717206FBC926FEE8C6C9C3D4FCBEFC2BF6854E149B20BEAFB741BB743091CCC1488EEC933B9E5E5CCFE07CB0A8C3B8A8D742DF5F41A78C6461535E2A7D69E3CCEB78D5FC51FEB1EE18CFE993AA5FA91F983F4A8AB971D2B4B5493E8D0E1495DC6CBAF39501A5330024A67BC0B3004F2F5F7629FDA0C1A5536532C4B636B95390481A3F87DA18E230C7BD972D128CC4CC77502C11C350E357BB3E94A9A6972ADB5FD692D3A9A3701680A92A0E719598F0B64C6C48D8F2E58C62E72725C21C4E226F04A4A38895960400F724742DB30D00E83D9CC8862F0DC265712D88059F90637B30229BEC0595A6FB32D55A9F2ECCAB729CAB32ACA3C99943D5D99268AA4310E24AD04ABBBE048B45947DF0239D4AF8A7D9AC6E3D3814E3F0DDFA97C28477A80B2A70FC20A9CB78DCC2799F6233390B33132D66597247012002F5D74E86915A8CD2B5C72A51564D1AE956A69B70A78CACA1452A1C02F3298163E831D6A41972B069C54C295485238CA8AC335DC9A7F2D6D4B5C1F644CCF9420AD6A241604104E9677E4DB44F74B767FA9F57E5B579B655A7B33CD90C20BB595C9A5AA699A64B61452A24B45A5029178200FBB94E7BF18BB39946612B2EC2E370C674D982594098877E262C389DDDFC9EC4C4F0EC2E324CA066CB522500AE005069A9A8A914D6D5862A2AA4512E9DDA9571B8D2AA1B5B1B290A6CA9041024CA488BEF1E78E8786E1CEF069C62450A02D2A1FB4821CB69C874A450F39C957852A48B28906837FE6A07D840D6726ACAE4F025B24A5237B93631723DD699DF1A6580778B92AFDC0B01D1DE86956BB5DCDA2BE32C095213FB9CEDB11D79B72F0872A7AE91E9E67EEDF6B74E73D5FE2B0CE8259F930EB4F643E90F4E0061C0570D5AA6E3C5EC6E7D22434398250492A2640B93B46FBDF975FC0E20CE1DC9252C4934059BDFE68290C8A4CC253A0D2953B8AFDF9F496D06669041E2BDA21476F8EDF7EFE586389C30AD03D6AD4BFB6A168D152002771A558F377FBFDDA6995E6A94A95E3224833C47CB6BFE43CF6C55F1984624A8380E053EB4D39E90D94185410A0F4AD7A731EEB48EEFEA4D77479252AF2ED2EC314A96D250A791DD83000BF88024983B6C7CED8F2FE5F2B159ACEE2C5256A5ACFF00738034B160586A767021D9E15324103503DF58EAE6AED6A97D6971FCC5EACAD1C64B3C4B09428EF1E2298B721237E738EBBD9EEC22310D366A42258296200A825BC5A8C45EB58D84924EB7DABEFEBA0A18EBB6A8D522BD4B4BEE2E98A49809528CF99E1D86D73C84D8C476BC9BB2F84C0CB4A932D130001D4A6480DB0259DF97A429FA550A31074E7BF4D5B72F78A8736CCEB9D5B4C37DE55074A934EB6817140CC1909E2373D7CF718B94B5E53859478E74894784BA0A904D05831D0D1EBCDA2CF91E5986C413FA852659A37151DF968F4D236E4FD96F6B9A9DE42729A15AA85D23C6F06D9E14AA2E7BE00C409EA7A6D8A3665DB8C264EB599684CE0825B816C684B38483ADA8CD56117C9794E0A4CB79650A0055A8F461F5A569D69169D1FB2556B259CC3576AA6B2A091C4E5325B6EABBC9890436E1E189FEDBC8E98A663FE3263D73E5093819894F1101B88155280FCB6E76035BC45CCC74B9426489412A3C4385419C005C80CE4BFAD75A0794763DD87E9FCC5A7334A819C901417097D89213127849893B1DAE7A5A37B5BDB0CEB3DC8B1457266E18092A62144B82935A00CCCED4E82B16DECE674AC22E58528A7898026868DFC0A53CA3EE03E86DA1D2543EC5FA019D1F972B2EA39CD4477AE3A14057AE08EF0DAFD2C2DCB1F017FA8F38D9FDB8CD25E2F11DE244CFF6A802925892E412A3CB88B801C56B1EF1F837987EA700389355004A8B905C13FE45FABC7ACA84A9284C99266474B8EB279CC4FCF1E5D9397CF13261134A413B9AED7FAF5A476AC5CF4861C1C4776B0E8DAB7DEF0933104A50A0762094A60D8103AFDC0F4E738DA4E0569C54B0B98684B924D6ECD5DF61A7587B839D2CA1654001C35A5A87F9DDAEF48F33BDA9ABF2F4FB577B32B6E368EFBBDD4BC20800ABFCB372424DCC0E9CB7E98EF9D90C2CC392E604ACB2658E100D4D0DAAE7ADE388F6AB17874E71292A97FF00E630346FDC2A36F623D30A31C6CD3AA3C219660721FCA4C5B9CDBF1C7259B2509C6E256A524A8CC3C2EDFF00222DBFDFC23AEE5B342F2D9440E11DDF9B871F9F17E71B908714F49802E77E97F81DFE6061CAD52C4A60CE41A02CE1BFC7973AD6E5C9C4AB1C5452A090B2C482C2A77FF3D4888E6B2E3774AEA26511DF2F26CD12D091E22285F88E5BFC46F8DF2B9DC18FC299859A721A97216920817F5AD3AC3FED6611589C871A07EF4E1D756FFB0E9E6E7E8098F90FA6ECDA9EA7516A6CD357A90C3633BCC56D78924280AEA8200283D2279DCF4C7D2EF869DA6C5CACB30DC1296DDD203D69F2800DAAC757BC7C4BF8C792255DA1C50E2048C42C5F751D743F4D9EB0E8EE76D51D7B74FA66943CCE5EE35C4C349F155265370E04F123840B998DE77C755FF534E272EC7E2312A2B9E994BEEF8C90124A486E13436614A748AD64395230D9865E388042A6238CDC5D37D1A95D478D7DD6EC934769FED6FD96E82B337C929575AEE5B5AB7A987766A5B5529594F13E91DE8928B49079729C7CDDED676B731CABB6D394A339027E300487504B05B0205850B9661E71F47724EC46599C762A64DC22A5CF9C8C239084A5441E07A90E0171CCF311E2EEA7CFC653599E69EC969052A72EAAA969D4148EF29D21D73861C52429C2A026C48000EB18F76763710ACC7B392B309DC6168C2F15492144CB35634A31E6795447CD3EDD65389CB7B5E70AA92A42558C290188FF00F319B9F869ADE3D58FA3C3B28CA33AECE6BF5BEA2A76733467A406175C84A52834CF2DA50497A5224DADCE37B63C55F157B6389C3E73324E1714501135695B176F9A9A1F1711F48FE057C3CC366191CAC462B0E95F14A41495258074814D76AFD691D5CFA403B28CDF24ED3720A9D3540D51E4DA8BEB7F5B094B6DB4D2699A4849E22129209322201F3C760F81F9FCFCC30AA973318A54C40485A8124BA8D280DC78D7CA391FF531D8D9191F02F0B2C251F31570A40A029ABF4AD746B8887FB20F66D91D476B9A4F2FCC6859CD65756AA84A825C4A0A5A2B4F1C71A45C5A472816C4EFC699F9865D951C4A7319A014FCA975077206A473A8D2F1CD3E036024E6B9870CBC1A715C0B4F79404258D5FE53A0AD7AB5045D1EDE1DA9E96ECEBB5CEC972CA3A0A5A5CA74EBB5EAD48865B42B81B710D2E9F8D9420A956981C2666D8E19D83C266F9B23133CE266290B4A9D64A884B850DCDDDEF4A9348F58F6C256478491264FFA6C94AD80092948515001EE01BFE2D48EB97B607B5EF62DDA7685CBB28D06C37519BD2D3210E3832E76894D38037C652A718471EC762769E77EF3F073E1B6759A6638B9AAC74C9B2913905BBC2B48471925FE62D4E8ED68F3F7C431809981693804619625AC06481C6480DFDA34634DDAB68F22739D68BAB6D0E0A97EADC1DE175A4D33884B026C0391C2B1020F0CC45F79C7BFFB3D84C9F2597FA5C462E4255292848599882A5961C4384AFE562750E4C78F8767F375E3311311859AB965648012A00004EA017E474F28AAF35D4B59561468E96AAA409934EC3AF8B1DBF94857A72DA0F41D07099B767247089B99E1D0542814A46875756FD7CE26B0FD94CFA785775974F98CD6428EF7F969E3E1159E61A8AA0294D3A87699E132DBE95B2B3E5C0E2524C499F4BD862F395E2328C6B1C262E4CE701B8549376D028DDA8FE71BCFC8733C00FF00E6F0B370E752A490EDC940575D85DACF09CDF3DA8209E3299B03313E9B4CF31E91899C5FE932F94666216994801F894C186A5DC7D5B5D042984CBF1189253265296AA330249F2D0D869E31147EB2B5E6BBC3956695C82470FD5A96ADC41837975A6CA52204DD5D205A04049ED7764D13C22666D8497312AE101531018920070577EB4899576673DEED43F433D12D49AABBA5916A5386DCFF0088FA24FF00C3F34FFC4F38F69DEF288501A4A6D32426A521C5A78A9DE3F65E128248E8279EC4E3E6C7F5FBDA5C0E3335EC649C163538D4C95E278D522604865AA5900842AADB97F3B7AD7FA5DECB9948CD5799A4A030215365F0E8AA7CC0077F2EAE23C90FA4F9F799F6D1ED756B1C2555196A65238504229624204045A2605EE4E3D39FD1162A7627213278569C3A254A290B51506A93F329F9EAD63AC56BE39E5584959AA7F4265CC5198A7086705E96BD741EA1A3CFB62A6AAA96B14ECBF544D9229D972A15249E4D25667CA3F1C7BB3199FE43810462730C348EEDF8B8E621268F4AA9361E6F1C1734C9F3198A93C7849C525B80842D4EE06C08D75DA123D499CD2F78E55E5799D2B523C5534354C220EC789D6D222F3BFBCCDE1307F11BB1588C51C3CBCF708B9A5410940992C9772187CFE6DE10F53D97CDD3290AFD0CF08E176521428C1B4766360073B4332EA9D75410D256B52E7850D852D4A22660264FC26224C62ED3331CBF0D253899B88968C3A805A6628865248705C9666E7E17847FD1F1B2D410AC3AD2A51FDBC25DDF52DE97F186EAA5D43062A1B758528F843C85B73D63BC026046D244EF8532ACF327CD57DDE5F8C953D4925C2169241ABBB13F4B36D0FD792E370C90A9D8698806A92524537A86DAAFBD748481C71E3C0CA5C79667C2DA14B51F720127A9306D7EB896C663307974B13719391211565AC8F17A8F74D61F61320CCF1C954CC361664D4A3F7292951677BB258D053ED78D2E9A964F0B8CBAD2B925D6D4857C160131CEC7E186D97E7D93666B28C163E4CF502C52852491D589FA427FE9D8996A32D72D499828A0526EE69B0F7CE13A5558F71772D3EEF0DD61A69C584FFEAE049299E40C4F2C3AC666795E585031B8A9520ACB242D690F6B3900D4EC5EB5348772F25C74D415A30D316848752824F08BD7F6BB53F98D68A9712EF74A4385E5FD96D2DAD4E123786E0A8FB87CB0D319DA3C87052933B139848932D41C294B400433EFEDE12939662F1333BA91216A5A4F094A52A517766A5AADD7CA1CCD2E6E96FBE5E519AA59DFBD396D586E3AF7859E1F3DF11586EDD76471733BAC3E75849B3096094CD412EEDA178959FD8FCFF0D2FBD9D97CF972D9F8952D6CCCEF61A08D2DD653394D52D5532424800B8A25B2D284C4A6CAB9226622DB8B61CE6B81C3E3A4A71D22705F7693351C350A08054E5A961476DB788FC160CAB12996B4578825448B0763D3A781E7ED87D1C5F46D7651ED01A2D1DAD76D5AE32BCAF4AD3B89A84D1D656314EA7514EF10524FD65A7374581078B90BC1F9A5FD527F5419DE4017D9AC9B289F8A9C53364A972F8C04708677082F67BBD3C63D37F0FBB2194A9289D331929165709625CB96297D6DD23E8A352763BECDDA0BD8D7B435762D94652FE4C9C86A1A7B3A453B6F2AA1746D3EDA16DBCF214A212E20DDB70C8E626FF363B07DBCED3E63F12726CC733C5E310538A9B351853366A59D5C452A4F1071703886CC184764CCBB37835E5AB972F08853240337841715AD459B5F5BC7CE37D1D3EC0BD9C7B4E506AAED5FB5CED2B2BC9F4A6439EE60E1A2AE14F4A5D6D19A54A3BB014FB4E2802D40213B444E3E907C52FEABFB4DD9AECAE5D91E4DD9EC4E3F159AE0E64B13E5A9694CBEE258E251504101C56A43E95B50324EC4E469C619B89C6C99650B1FEDAB841249B00F4AF237D9E3E9B321F67CF66FD2BEC9FAAEAFB23C9F24CE3237B4D66ED8CE986987455B941495282B4B8A42D40A5D41921773D6063E6164DF157B5DDA0F899819B9862317215FEA282252D7308495CE4F121A80B3B07A8F37E87DA3ECCE00E4CB99859289A132DF8D207CAD7AB5776DF5A47E7EB99553CAD5DA81FA670AD946A3CF5A4B53E14A5BCCAA5B09126200004011D06C31FA51F85AB389EC06553B17F2CC9D8294A73534969F534A3B11D23C5FDB3C261E54F9C94949505101340CC5BCB4D3ADDD61A9E179C360A20152428409120743783F3DF0D64CE50CDA62250E24998C4836A9B36F5F50D578E6D2240E30E011FDA4EB537A68DF4BC2EA5AD22C5422473E91B19FDF3DF17B9D870653B7F66CE6CFCABE5BBDE15CC30EA4C8701C0069D28F4FCDAD687715CA44428136BCC6DB72B72B73B46D18ABC896A993660092C341AFDC59ACC1BC62B3224BAD4EF7DBDFB2D787EA0CC9700C9E5CF6E5204D8F4F913CCC46195574B06EB7AB81AF8E9CC18DD72D9C1A8FA3F5BDEE225B419A2E6EBFEDD95B79DBDE3DFD6715AC7619469C06AE280F4FF01C5BAB329A9B38FF00D5CEB4B794762B54E6C071A83A41333E237F58DBA5EF7DE71C7A565D225E253C12921883448152281C6D51B4339649559857C6F7DAAD7D6281CFF365B6EB4FB0A9711DE44999E4678A6C7AF58C769ECFE110BC1842C3215C2EC360E2CDE21CED13786AF8375E9EBD1B5178A7EBB33ABCC332397B6477F5B534F4EA240801D712824721014762248DF125DA5E2C2E54461D4A4044B515106AC2B73CAA7D889895278A6254A4FC86C79B0E5A901AC3AD63BE792F641A23B2BCAB2CA9CD69855E76ED326AB89D4AD694ADD6D2E8B282907EDCF3DA48031E5F38ECCB35C73E1B1737F4FDEA90085AABF310AA39208E7F888CCD676264CE0B0B29516A804381414040EA79B934AC573AED1B387EA1C6A90B34797A014A034869A21116FB294AB94FAEF8EB196F667032A44B99350A9B3D41255C4B591C4C0BB17162697DAD161C063316BC1CC2A9A543828EEE457C6CEFCBA5285CF359E62BAEA86E81D76A5E724A94BA8500929499E14AD445FC85E3DD8B22B29CBD6A92956165A96183809716636ADA9EDA23275CD5E3546628A92A5901DCB876677E74F3A98AD6B350D7BB46E2EAEA453BEEBED0727857094BC018BF4990236DB1359E76764CCECFE365230E90A561A6540AA7E451156AD3DE9178C405CBC5E0FBB0CEA4B80F40E9A96F36F311F6FF00F44CFB487627A07D8CBB31C8339D5749499930D6646A43A8292A5AEB0AC0054A093626627CF1F9D6FEA4BB1B9D49F8859DCF5C92705371044859500ECE08FF0095F4E4C358F7CFC27CD64E5B92E1C14FFB9DD8E335776A58789FE5A3D3C67DAE7B07A893FE35A0513B789223FF00783D368C79E667657311C24E1C8059994039DE86DC8C75D91DAA91312B2A092C39967F06F7CDA305FB55F624AA86186B5AD125D7C90DA000E070CC09F19E1DC7BB6DB0CF19D97C6257294B42A5A9C355DF97F9BBDAB0CD1DAE90913425600D6F5607D456DBBBB831D07F690ED5FB27CD3DA6FB08D495F9AB0EFF0085179EAFBE43842426B29D00294942B8556BDC1B74138EDDD8FECCE3E6F67B1C6493DFF749E04B0D01E2BB5EB7B4705ED876C24FFAEE140AA0CE72412EFC405B9791FAF7968BDAE3B1147749FF001C51381D6DB4A29F8384B2A420050278A4C9EB1B5A0638D637B25982F1B3D2B796B4CC5380417254FEA5FA73AC77197DBBC2E0B2FC12952C282E527889A30090C0536D47DA256DFB4AF63B52D17D3AB290242642B626D22DC40CEFBFA7A88ECCE612CA122515B9B920077D9CF21B35ED12D84EDCE027CA331284B84972D504F36372E5C0A39BC42754FB4E7636E64F9B32CEADA572BD596662C52B009056E3D4AEA001E21CD437F8EC70FD190E2B0D9860538895DDF14D965831765A6ED43B78D4456B3BEDA8C46539A32C1692B09029FDAA05CD3DDA823E726BB4D6A1D439C662AAA74D2E46E667983E97C29278D976A9E701001076563E90760D587C2E43841DC85CC3212C1AAAF94063E8FE11F1E3E27E67FA8ED1E2C951FF00F10B377BA8F3DEE1F76D1D5A15A4F42B81592559CCF34752A43E56C2D2195A92522EE05257C526FC8EFE53B2E4E2B3454D95DCAA44A7AA41278C39B6C035999AB668AC23303225CA5057FB80122B66622BE9EAD1EA67D1C3DA356E6B4DAD74267D5014D965A4E5ECACA600A843AB73BB40B0B284C0DA77E5E47FEA07B392F2DCC32FC7C99211DDCCE359081F310A4DC9036AB9FCC7D02FE947B5666659986131F33BE4CD95C284CC53B5160F08579EBA691E6DFB57D02F43FB446ADD2F48CA826B336CAD9A6436D1850AE711DE59293301D2609B795E3D03F0CBB5D82C6F60569529089D2706B4A8135044B291B3500F0E748E49F1ABB1E319DB5C26270F2190BC5B92948ABAC56800F46D9DDE3D63D679EB5ECDDECA7A4B4FD3D70A0AFA85E55514DC09EE9C70565753543E0410612975415CA3717B785F3FC9A7769F3FCCE76154A9A11885BB025BE657E29A1AF87B5BB159B49EC8F6772F913C0940E1D00020020F025DF7B86F1140219FDB652DEBAF673CB7B42A1A84D65465397D0AA9DF6520281A92C21F3C683E466F3F3C74CF833982BB31DA219762014AA7CC9685A9668CED650DCEDA5ACFC77E3BC8576AB239936534E2A9534A384026B4D37B80C28D778A1FE8BBD38ACC751F6A7AE3362A552E434B4151953EE712D3E0A675555C04CC41410A8FBA23A6FF005398DF9BB3D83C3AF8D3981095049A2788CB0280B7F73D5E28DFD1B7674E447B478BCCE571197F34B334587FB960A0478383D2F1D00EDF3B4DCB3B5FF6D6CC1CAD6C57698AECE692810DF787BAFF002FC34CE0481B12B490A81EA2F8BA7647E1F4EECC760A7E2952D4A5E2704660590470BCB2A0C5BFEEA6BE04449FC40ED2C8CE7B5D2F0B8629E04E2420A50A0430500D4F3A6D631D85FA4C7B09ECFBB23ECBF446A9D0990B397BF5B42DBB59DDA882F71A29E49E202D0B5796E76C3CFE9073EC42737ED665B8C9866210660725C83FEF70B29CF0B10051ACC6AC218FC68C99183C26453652693929E2012CF496EECE68EEFD6DADC5EC3BEC93D82F6D9ECCF95EAED55A69877387A87303535EA75C49A782E214E10980B800AAE6D1CB1CA7E2E7C43ED4766FB6F3F0F85C6CF121589504A12B57FB80AE8007A338D2FB88E87D81EC064D9BE469C5CDC1CA0A449054B29490E52EE695766F13E1D77CB7B55FA307D95F5337D966A5ADA5CE7575066CE50E74A5D0E6150D2DDCCAACA695B0EF03AD00D77A124A55102F187F2FFF00BD4ED5E0F119A617178CC26151251370C4052C21900AEC6BC446BBC5C3B2C9EC56598D56031587C199A66776C5281A90033737E8417878FA4D3D843B14CDBB0EA1F692EC3F29672E6F2DA36F31AB5D138E38DE60D661DDF7278388251DCA16491C2798306062D1F007E3B76A724ED88ECFF6AB319B3947132E5494CD74F02428853D4D081AB0B1B8880F8E1F0DB28CC72F46332AC24A948EECA94A9612D514B0B3EDCE3C95FA3EFD8CAB7DAFFB5072873D529AD09A51F4AB3B7B825B525C0A52525692950F1B651E156F36C7B53FAA0F8D583ECA76572F5659344DC6E61872112E5CDF996B2945B87626B7B4713F853F0CF0F88C7CC33D2172E52D24852416626EEE28CCD7F331ED076B5DA3FD17FEC44ED37657AB32FCAEA3324B69A5D4714B53982DA70B63B9529C6DB78B654553E150BEE4C63E7164B86F8B7DBDC662B32C1CFCCF0F216A13249489AA4A03BB3BB105FF00168F54CEC1F63B2E912F0B3F0B8452929E151504024D8D1BF8AEF1DBDF602D2BECA39865BDA876B9ECBD5AC3B9676954F42FE7397B02A1B5529CB5A712C0522A085A78C95010948E5046DC7FE30663DAFCB73DC932DED38C44D9A89FDD89B394A257F3201531729091A3F3ABD1DE5792E513F038E393AA5C80B40F96530268A37074F1A7311F2D9EDD9A0F5876C5F48CEABECE34B65EED466DAC334A1A4A4A169216B534C53A1352E955FBBEEDA25C85471011D4E3EBE7F4EFDAEC8FE1E7C239B9DE3B1B2A4ABFD3CCCEF145293C5C059342093C54E57358F3EE33E1D4DCC3B4015899AA9A9EF8B25609A055C13AB55A3DB2D21EC57EC31F474F627956BBF6A534555A86AA958AB7EB6A8543AF5454B8A42C34DD134A70ABBA5B81B3C283B49006DE1EED3FC50F89FF001AFB4999E1BB0F331872FC36226A672F0F314A010A52C24802B5636F08EDEBEC6F65F26C1E1978F93875AD284901410E4802E48247E5CD843AE8CED37E8AFF006F2AD1D8C694A4CA58D699834E31434BF52AACB54C843656DAD0FA9A612F153402880A244C1BEFCFE7E59F15FE1E6608CFF1F3F349F2B053113664B519C12A2140A81724338E90DE68ECAE3C8C2E1B0987750605212785A9B397B5DED68F1D7DACBD88321F60BF6BAEC9B33D4CDFF17EC2359674ED3525229B506128796C539429E1DE3A65EA800159F43C3B7B8BB2DFD48E3BE26FC3CC660A5625597E719560D689A9E22B521610A0826DC5C5C1D45758A2E73F0FF0D2F32C34D4E113DCAE62492122A388122DABBB73AB3476CBE995F611EC7B40F609A23B68EC4B4CA74F30DE5B435D9C2A9DC79F4D50CC51485A512BB2203AA22DD7D71CE3FA55FEA0FB519476C336C176971F331C9FD6777253314DC23BC58701C9A863A8F38DBE28F65B2EC365584560F06842D329D44243BB26EC0BEB61F58EB77D0CBEC69A0BDA2B5EEAECF3B48C9115DA5F4A379686DFA9714DD3B8BAE6149578EC9052E8B4F31B49C7A03FAD0FEA531B90766B2CC264188386C66310A226CB554B942943875A1ABD5E25BFA7ECBB2BC6E0B35958DC14B9CAEEF853C4134A2C3D41AFD77148CFE9C5F64DD15ECCDAABB21CCFB27D389CB322D4633E5E7556C294EB01146DA0B01448291C4498BFCB101FD0C7C4BCC3B6D8BCE26E7799ACAB02252D6664C241E30A51A1506B6C45F68E55F113B372324CE3113A5C905136728CA4705140ACD1EA035F9DDACFD87FA2DFD917D9F35B7B1EEBFF00682ED6B49359BFD7B23CC6A324CC2A5E7996D353963756DA8A00849979B48E524629DFD62FF501DA7C27C41C9F24EC7E70B9185C04E50C6CB90D30CC1F229292C5C380776D8BD7A9FC3CC8F2AC66478B18FC1CB13264A696A5330252AAFEDAFBA433FD16FF0047C7633ED01946B2F6A3ED7329198689CB736CF1CD319170BC80D51E519856D354789985B83829D2BF1209E84E3867C56FEA47B5D9965594653879D88C2E2B13284A5CFEF540A0808054524A5F8AA7C1F9C2BD81F875976133AC563674B973A4A269584148660A510CEE282EECE03C76133EF6D8FA209F5EAEEC8F37CAB2FC8AA72466B32CA247F07CC5C73EBADB6FB2905F14C140FD612920A951B99E78A9F6313F19666639763324CDF31C62A6E2242A68016A4AE5AA624CCA9240F95EDCAACC23B1F6C71BD9E9992CCC20CAA42572E4A92662529BF0900B04D5A80D5CF947CB7F6DD98682A9ED2754D0690A448D286B5E772AAC69C7385FA7756E38D1088E26F852A40009E77BC63EF5FC2D19AE27B2182979895FEAE6609099895D4998A9490B725EA0B9602C0DE3E7D66984C361F1F8E992F86B3144240FD9F329AD43EEA5DA204E7699DA05168C4E8ACBB50E6F43A64D7D10EE28B31A9A50106B10B221879060991D0DE6C4638DF6FBE086071B85CDB35C76024CF294CC9A17325A4AAA16A35209A0E679984BB3798E2E5E6F874CBC64CE033405490EC9AB0ABB1E63611F719ECCB4196577D12940C55079D6DCD299BA9CAA7DC75C71C5F0BCA256E2CF1AFC7B1528C998C7C5CCCB0B87C17C7E46130C844AC2231E89699290004D92599AE6E1BD23E876569953FB10B98B960CE18572BA12FC14D3CBEF1F1263B45D6195D26A5D1596EA0CCB2FD38ACFB37416286B9FA34A93FC52A5442FEAEF2146E49BDCDED8FB5123E10651987C3D938FC560244E9BFE9C572CAA524A83C804949524A83BD5887E758F9EFDA2C6E6327B52A12F1B350062FF00E902B0923BC6625C69C888FB62FA37436DFD10F45C0FD454A91A67582955352FBD50EB8A5AEB4925D794B70DC9FEA81E58F87FDB0C1E1B24F8E786C34A9489586959AA1299694A5213FEEA1DE81DCEEE7C9A3DDDD9793FAAEC4A97894F78B5610152C977F91C13B6E1B6E71F0D41E4FF0019D517B1D4F9FDE7AE6F567CB97A48DB6C7E8E7B00A188F879911C3B07CBA58615A8949B3035F060DAD63E7B76F113067F8C96147804E5F0DD802A3FC39F106F07D6386A5E954FD98127A6D791711D3117D9EC22E566589993417E371C557D4DFD3FCC56E4E19425CB2454025F5AF2BEBBF4D442B65F4A549F1117D8133B9DBF111118E9C7826CA5310DC2CD7D0FBB51F70D0EE6CB070EB0A0F42DCEF4F5ADDEA21DCD581C104806C04932237EA6F6F33E51882C348EEE6CCF9581347D1AE08A8FA3F28AAA241EF4B503D5875A537EBE46EED495890078A368BED3D3E23F29BE179A8490C589624F869F6DFCDA313648276D542BF9E477DED125A1AE4C99267C30677DAFB99FC09DE4E21B13265F1D520835622C4EC74F388C9F29945C5363CF5A1AFA9F38BB35566EB3C70BEBFD43CE36900188FC0922390232E2A9C9530A9AB077DFEC7D98889490A55ACD5AD7EBAEDA738A4F33AB7EA52E21A5C3A2E825406D1363E5CB68BCE3AAE4321387929EF43A05F50E5DB4B124B7B1161C248B52A0723BB1DBE9BC55D5D555F97D6B398A163BFA5ACA575C3292785A7D0B31FF00D2920C5AF8CF69B0C313835CB961C290B4816A28105EDBB1B78C5A70187965491387FB6012F5A16A73D06DA7231EC2D0E6343DB5F64794EA9C890DD4667945070670DA16953A8521096592A6EEA121063C33F7E3C9887ECA769A7E0318A29C3626705604A87CAE3E69B7A0209D6F0CB37C009C25CC4A6A824289A382ED4DF7DDF58F3FF55D53A8A8ACA6756ED33ACB8A429B295A4D94531C8F974DCDB1DD70D99499F230FC052470804820B8206BEBAC38C2614A306BA31092CFBB6C3D19BEC6A1CE2A1B6E94D552D6298A961412A012A529C0E2A0DA64409E7127A0C5AF0384EFE64A524D8855BF8A03AF2E710793A267EB485A010A98782AC181A8A16F0FA51E155F574F58EBB978796F3ED86D6E28A54890A0144126DB74F77417FCC241959262E7CC4A512BF4B31C382C532C87BEB52CEFD63A16225A9388C0CD029C69AB87A902B7D3AFD63ED77E88CF630EC27B6BF627ECBB55EB6D3F559D57BA33712D66B5F441A28AF536ABB0E212E714011702DEA7F365FD5776CF189F8939D6065CC12F0786C47FB44049E2E2249AD598BFD2CE23DE1F0CB234E3B22913520F11949E2150CE06A59F5FA3B523D456BE8DBF65AA623FFE03AE03911A9336303CA1FF0021D463CC333B578E584BE2980141C29D7EC2C1FA474DC3F64C244D704F10B329CDDF97AD18C3831F47AFB34D0BED3B4FA1EB42D0AE20E2B50666AEECA60A6389D26FE5CF0C31DDAB9E152C4F9C95936F9406F001E9EE86AC91D9204CE025100DEF5A3FB60199F58E8D7B457B34F63B90FB4CF611A5D9D2D50FB1AC1CCF9A52179BD60211434C9FEA53849B120472B0C769EC576BE6A3B3F8FE09E1333BA1C33784167E270DD287626D568E0BDB0EC71FF5FC277608499C1856EE1CF8F883AD8C776E9BE8F0F65F3DCD4AB485635565B6DCA8FF00E399990494050801E001E4607AE3924FED5E28E37124CD1326198A2E400D521C001B6A0B58EF1DE25FC3DFD5E5B81EF16C44A4B062744EA0E8DEBA6B2647B107B36D3B229C698AC526200FE31997DFDECDED68F3C03B439AAD49299818170191C9B41AF3A1B81489BC2FC3993230EB48554A7FEEE7CFF817D4B4373EF61DF66CCBA92B734674A568CC6932FCC2AA8E737CCD490B6695C7495254EF0C4A07DA91CE3A3E959C63B178EC1AF10B0A289F252FF2820296806D5B00ECF50FD28D9D7638E132ACD5810F26656BA254CF50FB7947831A8B5585D456D065B50728A0A5CC6BE999640FAC1E062ADC6805289E2D900DE37DE44E3EA4760F2892AC83033D127BE52F0F2CB92DC24A126D50F577AB97A5488F8E5F14303364F6931891C494A3113372FF00316D0FD39EB157E6DA919CBE1798BCDD436A5781D84A0C922E40F14926D72676BC0C746CBB234CB13172FE4580EA05360493737A1D08F431465F7E664841258D0726605EFBEAFBC7643D8BFB54CD727F689D274B96075594666E3E8AF5281699504D390D7138B0126E6DE2BEC271E5CFEA1B24978ACBA74D080A5484AD5C406C1E80835A3787311EA5F835DA09FD9DC760E54B9851FA85A1376FDC4021AAF43AD9EF1E95FB45F61995EA4F69BEC673E6F2B15CAD6AF57D4E6CA292A43472CA765CA72B51494DC8944C49B0DF1E36EC176EE6E5F2339C12A62A5CA96932C20A8BFCC169FDBC8B75BED1EEFCDBB132B3A9D94E63DD85AA6844D2784528824DBAEBD23AD7F4A7F69CC52E7FA1B413084A19D334CF273069A7C6FDC32BA7EF1B4AA525251299026245B7EFBFD3C761D3DA34E6F98CC1DE89EA2B0E976F9A61D47D7978729FEA2BB4733B289C9B0B2D7DDB0082104876E00CC36DABD358BFFD99EAA97B78F624ADC89D712FD65265798F7895381C752A654FAD80A049298E04F082013CAE71CD7E2CE0E7761BB62AC5A5E54BEF9250C0200E020166BEDA50C59BE17E151DB7C97867FF00BA7BB4B05391F303BF5AF86911CF672AC47B3A7B09EB3ED133C0296BDD6F51D1D4B8F8EE5C5835F5D474A49500612952786D7E538D519DCDF89DDADECBE0A6CC52E5CB9A8E034570F01965B672CD5B6D175C5F66657C3DECE677899284CA54C92A24A592F45D68DCD9BA574F9C3EC1F5EBDA8BB72D195B5B52A5B95FAC2BDE2932B5BA87736E26EC24C00A107EF8C7D53ED664186CA3E162B8E5A50519594824004B61C8A3B17A73158F017C3FCD67F68FE214E4AC952518FA3925819A7EC03E9A0BC7BC7F4D6D6FF09EC47B2F57D6453B4F652CA9692910A866948B58DBD31E0EFE93F15C19F76C8B904E215F35DBE79C2D7343E5E2DED0F8E39209B97767D93FB25A6800BB4B7F13AF808B4FE8FACFD549F477D567542FADA751A6B51A9350941242D2DD604A936894A8026098DE7149F8A586979A7C5BC1E1A604AE5CEC74B40492000EB4824D9A8790A1E7171EC14B184EC6631228A4E14F096B325479F3D0347C5C675A8733D4FAAB3FCF33FCC3F8B664F6AECCB82B9D400E2CB19DBC96B88993FC9094000AB940B1C7D81EC77C2AC9B29F86BDEC9912710B9D960592109F915DC71000B106A48A3171CDA3E7F67FDA7CEA4F6F92893366F7631E9494B90083380E8D5E5E31F657D9FBAF6A0FA23A8EA350D51CC1674DE661E5B80AD4E16DC70530264901AE1481702009C7C62CEB02B97F1C71B8192938799FEA00219C703289A33338A8A6FA47D19CCF2FC6633B0183C54C4A9415820B59209249402E6E472DF68A37E836D3D97D07B32F6959EB85B39ED70D46E553EDC38E452556666907123888284252902463A27F51133192734EC5E1E74D5CE9689B2C1E25BA4A4992FF00292798DA39F7C1CCB958939C1E13C487090C410471F206ED4FF11F2EFED8FA8F52EA1EDDFB4CAAAD79DA976B73A79AAA1564B8A4A296A1D431C21E24B7084A638627CC63EC27F4CF90F64717D89C395E030857FA1905733BB944BAE587513C3423E66249203D5DDF907C4D999B617365204D9B2E5F7AA0CE4502B7A7B2F4B1F7A3FF000DE663AA9DA2F69CA1CCAB9FAACA72CA6D37FC1A89C052CB21D69F35019512507888957081B7A63E5D7FF101ECDE4B9676EF245E562428CCC4CCE3EEC207012A433B683CE3ABFC229B889D8498A9B89513C0010493C4E0DDCB79D7ABD5E7B03CBF24D4DF4D0F68D575CD30CE6D9355D21CA92FF03A0177285F7E5A6DC94A89008514A4C4C9223152ED6CCC661FE0B49948C44D38695879616842D690BEF1496A820D09B30F1022F08C2E1FFD53884F471F192D4DBAEDCB77B88EB6FF00E230D59AD55DAE764D903A9A87749D28CE52CD0F7C5AA5AC52D868F1AAE107B8761694A8192200B63D3DFF00C34F22CA670ED22F30548EFE7770654C9B2D2B291F395278540BB8A170FA93148F8AF3A6C992832A72827849E04A8D580377A7361D291E2CFB2666FA9325EDFBB38CE748E72F2F57E539ED1B74CDD3346996EB15B52C35508213C29792DD3A949921462488C7B6BFA81EC7F65476273EC4FE93088C423093945932DC321452A0C9B967A5059C5E3987C369D8AC6E745D4BEE4CC40092A2A0083F31725EA6AC6D1F57DF4EE657923FEC8BD9F6ABCD99646A8D3949A7333CA1F79612F37501FCB6A6B0A4AA0C9524C83F2D87C73FE96F23C5768FB5BDACCB30EB52B0F3A7CF429491F2CB4A0CEA10ED50001401A8C418F5EF6865E0B0781C14D9851C72D095558392013737ABF56630F196E6C7DB87E89E6AB2BEA1ACCF3F3A7DBA6532036A768FF84389658909B9E2453A6091F2C42E6B879DF0CBE2F4FC3941978638827BCB267900A8D2A070977B3DCDE2A99F60F0FDA4C995DD11314896470A43905801B16D872B3563A8FD8A6643D877E8BDCF7B415D40CAF58EA9CE5867EB253DD55775976A834D716591DCC0936817B6273E21CDCC3E3576830D8096959C3E4921656A014A48EFA53A4B86A120B579D59E203E19E5E7B32719DE3A3F50B02B4601441E573BC5A9EDED95A7DAFF00E8B1D29DB250BE8CE35150399652D3543284BEF819967749435012A471281EED478C4DEF24628FF0CFB77987C09CEF3BCBD6B992A5CF284AE695143F0850173BABCA85C45C7B4FD94C1F69049528A14A7252C94921C826CC4D40BD5C3888E7B42D72BD89BE877D2FD9464B982323D579CE541540853694D43C330AE69FAC480B214B05150A077001DA76E91F09F21C57C6FF008BB8BCF66838BC1A274A33E6295DE252148F97E524EA3D0C547B5394CFEC764A9186E2E12820000B903722B6FA5447523E874FA4FBB34EC3F4D669ECE3DBA54B590E5B58B71AD3D993A953CCD5273971D7F350E36D2421BEF3EB0471BAAB4C836C76AFEA6BFA64CCCFFA6669D98C3AE64DC2A0AE6C99287131410909AA4109621D9AA4EF7A87C34EDF19B3F1387C4A08257C20A9554804824BEF5F5D6DDE1F694FA20BD9A7DA6B2BCE7B5BF657D4395E4F9BE694B559BE6147401399AB3AA82D395094ADC53AA142A2E1544849515584838E71F07BFA83CE3E0866986ECE76F7B389981731121189C4F04B32471048290A96EB0C45886AC7A0D59060BB4592E3F112260E3EE4A82407E27492D7DFDEA7E40BB5DD09AABB12ED0354766FAE3277329CFB22AE55355D33AEF7CE04F78A0C3BC424C3CD04B800FB33048DF1F6F7E1276EB2CED864F97E6D8032C61B19290B9694149487487629A50D3ECD48F9F3DA8CAB1180CE71D875850509AB090411FB496A9B50F5E948AED154DADD6D0EBB14C2AE8545266E3BF6CC72E639EC3963A6F6F932A5764B3498B4A7FF00C24EAB80DFED2EB434A79F9BC7767B0CD98E1D64007BC0E7982057DD5AD78FBEAF662AFA773E880CB14869229BFC279D8EF645E3EB039827DDBF524DB1F9A1CDF855FD47AE7713FF00FCDD2424D984D1AB81A5E84599CC7BDF23C6A7FF00B26B95C54FD310472E02E763B7324B5A3E04330A827526A39794298EA1CDC8DFFF00E6753EFF008FC36C7E8DF26C560D5F09F08BE14850CA4A4D451E4000EB73CEF7B4789FB418642FB4AA25001562814ADFFF00F23F9D3EBB53EF17E8DD7C39F43DD125091C08D2FAB036A172AF1D6CF29989FD6C4FE6E3E364B549F8F1317254ED9BCA5708714EF52687A104FA55C1F727663853D8DE07001C29DADC157B0153CB7BC7C2A3EFAD39C6A42018FF0013EA08FF005019BD64C7327AFA5F991FA25F8098838CF87D9226657830328126A6B292DEFEA2DE09EDCE042F3EC41480C672DE9CCF5DD9CFD5A3172A549A9709901411C2677B5E27E605E3974BA63F049C14C9B36581525541AD7DB6BADA22315970932A5F086A3B806D4A0A69E1A6AECA115465266E0F23C87DE7D63718322C51C52E625CB75B1AF93D01F5D221D587E397303513A1F16EAFB6FABC38AEB4422157326D73E9633F3208F291890C534951090C4D9BCEBE1B79BC41230CCA5921874DC9BB37BB42DA5AB55A5506DFD5E963EF3F872C45AE6BD5FC5ADBDEEFE95DE119B2039A3020B86DB9EDF5F52FD4D5EA491E2E917E91EF13F0DB0CE6A8AFE660143C7EA3D988D9F86AA986CFEE9EF5D22ECD40F90557B78B993D4DA3E47FDB15AC1E5E95B16A534B3B78FF00377AC5670C82E3776B3DCFE4D8DDADB54D9ABE12410A20C988B4753337E5636FBF172C149125212C006A8BF4D34B9DAF16BC149E2670E77AFA86E5E0E4BC56D9CBF2570A3799BF39B5A4733D49336318DB1B244E42924536D2C34E7BF268B6E1B0E0814D7CEB563D43D69D2B1D8BF644EDD6AFB31D768C86AEA4A74EEA7710DE69DF2B89942584F80042E42788A88F0804DB7DB1E5BF8C3932D58BC3CC972495A78CCB524170A2285FCBFC5DF62300674A2AA0E023E56078838366269B36FE3DF7EDCFB25C8F5C255AF34025A348DD38A8ABA36133F5A2A6813C3CC4104F8419918A6F65B3DC7E5C24603385A84F0A3C0A51A293C4E1C82C960C189A9E704CC20460A6AD2070941AD058359F4A9FBE91E5F6ABA775AAE7D54B4EBA179B70A1CA2752429B521453243804F111C42C37168838F4C765F3CC24F5490262492120A5DC681F57BE9A6BA8A165ABE1C4995310584C265CC7BFCC49D34B171D62B87DFAD69FAA7AB82509013E201209B47282771698B5A717AEDC62049EC8662BC3034C2CC345137428F366735DB58BCCCFF73138201F88AD0C1C9145245AD6E576ADDBF421FA081E6DFF00A3B3B225A2C952B3DF173319ABA0C1F224F5122DCB1F971FEA4D53719F10B3D52C9E3562893BD14A16D396B4AD23E8D7C2099DCE47210A179483E40793687A78FB2AA6CAA07148163F2F3B7FBDA31E7E998351E021668C08F2AB7A4760958896A0B205007A5BD3C357B469ABE15367FD31045B9ED68B7EE310F9AE5B3166594CC371AB00DC3CE96F6E211978D9604C5300100BB867B8B5796ECFE5E4C7B5B1AA57B657B27D400AEEE95FD58091B0E3A56C5CEE0F4BFBE6D8EDDD83C0CC464D8B2B55049AD2DF2A99C6FA0361D2384F6BF3195FEB7840502B3C696F9921FA5391FB7AAC8610A436F95C7794F4E08BC59A02F11EFDB718E62AC0A978EC4CC0A202A6ACB7451A75D5F6F08EED2B3A95232FC17124377496AE9C290CE7F834E8601429510B0AD89277B0F5E717B7AC61E04AA5293C35B8A9DD85A96FBC3D939E499929443304D7A0B576EAC79C326AC729DAD3B9F07109FF00F25CD477840F07F917E4F513E58525E24C8CC72F05C257390493AF0AD275A1B0677FCD373ECCE5E2729CD014848EE576BD9557DEDEB678F8E1D4F9E32D6A0D474542DAAB1F5E7799A51C00F8146BDF1B00A8B9927CADB463EAC7C2DED370E418342905411225B56CC8079DC0D46978F8CBF15A44A9DDA3C629D81C4CCADDC7191BFBF48D794F66398E69568AFD5EF16329716DB8DB6B570C2525248F0A82809EBE40E3ABC9ED34C9B87C42654BE29841E1029BD5D9A9A3ECD72639BE27092654DC312404B83D76AF93459D996B0A7D019AE42EE8D2D3797D2D7D025EAA6C252B4A45432167BC23886CA04F15C18338E4BDAEC9F17DA2C973097390553CCB99F2B3E8AE10DC9C5FCA3A764989461734CAA6CB53211325970E416282F73AD58FDEBF499A435D685D45A334A6BCCCB39CA9FAACA32353D48A5D4D377CCBA28501EE195F182A5A609B4F3136C7CE35F62736CAB3DCC72F460E7AD789C4A124A652F8529332AC5883451B6EF1F4DFB3BDB3C12F22C04E9F8894572A424104A5252C90DCDA805BED1F2C5ED9BDAD37DA37B40F69BA9D7998550D53F4AC51C39DE3605334A60F7601294C9489E10279E3EA77F4CFD805E41924E070CA2664996A09292EEA492AA915624D0DFCDFC45FD50F6A65F68733CB8489A0895318F097A0296D756D6B1DD9FA1DFB66CA5BCE3B40ECF33FCE986F2FCCBEA21A159528A7692840716E06C3CE2130A04F170EFCE71E78FEADBE1E4FC595E3E4E1967B8528F0CB4173C6A6FED0F7FA0B08ED5FD3776B70F96E1B0F879F31290B4CB492A22C000E1D85377E7179FD33BDAF694D0DECA2F765BD9F5565CFBBAC5C4AA918CBABE9C70FD533043D530197140F1852CA85A7A1338E73FD28FC32CC734ED4A71188C34E4A72A9D2D40CC94B0E165E8480D6B579DEBD7FFA81ED86053D9A9D2B0F350158890A4D140BFC9B3DCE9B79B7CD77B2766A32EEDEFB3072AE9196D0BCCDB577CED5B61A6141C68B8A5052826E649E23F9E3EA97C69CAB118EEC0CDC26124949C3E5F302B80151534922C072FE77F017C0B92995DADC4E3262811FA90B750666593ADC6ADCA8ED5F79BE9D9D6196E73D877654CE4F99E5F9A5553E5A84BAC52D7532948E24520095069D2AB0041045A27CF1F3E7FA49EC8E367E73DB554CC34E92133C8495A1697F9A6B91C4002D705ED48F717C4EED06171F82CAA585A0996800B10744DAAC35D3CAAD78FB04EB9CA32BFA322972CA8CCB2BA4CC9BD33A992ED23B5D489794A79157C03856E05137B5A6F618E61F14FB219E9F8C32E5E1A4625CE3A41429329652405209F9827845AA01ABDCE88E51DAEC265DD9DC44954C9602A5147015024B8237AD4BFB68F8D0FE20A6B3ACCF2DFE18DFD61ED599B283E2A91C1C2E674FAD2AB9E002140CCDC791C7DC6F8739663F07F0B70CAC5952972F2A53CA5A492B6C3D2A41208DACFE31E4BCC065F3FB6386C72928E0FD5A56A371598087F324EEDBC7D8F76739E65591FD132CE50EEA5CAD19A2F4F578550AABA914EA438E2C941417B8A549510044DE7A63E2DE2B2AC6F683FA929A065D364CB9F992A5999C0A0901CA1DF85855F56D3578FA378CEDA64EBF87F230B24C92B4E0D2821D2E0F00167A35EA0757631E6A7D081EDA3A43B2BCFF005CF619DA03AC65B926ABCCAB98C86B2B2B521A612BA9AC5D61256A4821D2EDB8D4041F0F2C7A13FABDFE9E33ACAB2BECD67D96CC993E64A93FA832132C924F0CB5247102598D5ABAD63897C24EDBE5B95E6799CBC419694CF9A52975003F72858B543EC2978EC3FB64FD0D190FB42769B98F69FD9176C990698D3DAA5F6EBB34A76CE5D5296DB442D6A05CAB04132A5129005E3AE285F08BFAACED47C30C966F67F1992E3D589EEBF4EE654E676294B132882E1ADA758B476F7B2B96F6BD68C5E1E74A4852B89D251576367B0B55ED6611E837D1D3D8EFB387B29E95D73D9668FED4723D49AEF2AA2A56F5F66685D3D297DF71A71745655429B5F772A4FF002C9B092463CE1F18F37EDE7C4AED2E5F9EE3F27C7A30D331266A25944D99C492B4963F238D0E8E29710E7B1FD8D9393E1712138E4105150E915093AB862ECECFB6F1F33DDB8FB4F663ECD1F4C46A1ED372CCD5BCC34FE4B9C50375B554EB40A5758CC28934CB529C6CADB5F76971517544198C7BA7B13F07715F11BE14FE8B1597CEC3A4E0E92A6216145728129FDC12A1F307F3022A824A64E76427304BA67317208AAAA2AAA96A5C37D7E813DAF7D9B3B11FA59BB1ED21AA346F68F91649AB74ED122A28EA7EB14AE3E8A8AE4B2AA805A72A5B5288525408502236F2F337617B67DBEFE98BB4B9A6066E4B8E9D2319394995365CB9BC0844A2BE1AA65905D245F7EB16DED7F6270B9D60A4CD46310A5997549E162E03D4AA800FCC7527D943E861D25ECD1DAA50F6E7DB776CD926A3CB3479555E59973AD515021A0868A544ADAAA01E3E04AA540C102379C5CBB6BFD55F6E3E20E538BECEE0F2BC623179924CA0A2998C94AA8B042900170A34E434022A1D98EC9E0BB278A13D7390A757168EE1CE84F202BCC563CF9FA747E900D37ED2FAAF48F62BD926629A8D1FD9B0ABA2D52E53387B9CFF00BE6DAFA88412477628D6D7FE52941405C441C7A5FF00A01F80398E588ED467F9E15C939A2113128992AA85A9331F849A9752812D67AEB087C4DEDA77B2F0F2F0EA2C804712554228D4D080EF7FB9EDDFFE1ECEDF34C6A4D2FDA67B3F6BAA9A5FE1540D658D51A730AF45335C351DF3CE06D0F389063651493245C1C79FBFAD5F8659CF677B468CD7012A6CD97227CD5F14B9449214A0CFC214751BB5A8224BE14F6865E2E4CE958A57CAB486E2340C0BD0DCE8FCEB5BB37D3F5DA4E8BD03A1FB2AF67DECD1CA0A9CA73A733E5E6AD50660CB8CD3943E8AB68AD2D2D6992B24A4820CDE4E247FA39EC5E6FDB0C6E7B3730C24C4CBC6A30C897DE4AF993C09525552028B9706CD6899ED6E7185CB1483865A400A51E20407ABBB3DB414B02EC0D6F2FA0EFB42D17DB1FB2AEADF66DD739965CCE55A0AA327AA0335AF6025C5D4E647304708A97533C2B6D2004930400231CD7FADBF81D8BEC8E6B968C2C99C3FD51538CC99264CC3C265F090FC009ABD1FA0687BD91ED29C74A99356B0132785454542805682DA1F0AF28E96FF00E221F684C973ED77D94762FA3FEAB5D93F67F4999B59A2B2ECC1B5538EF6959728F8D34EB2DAFC4D88DE3CAE07A6FF00F875FC20FF004DC873AED2E3662C4C9F252B9726721495BC94AD2C38AAE586973C8423DB1EDE6599C4B565AF2D7DDA4A388917218BF3A6D7E51487B197D12992FB6E7B2EE8CED8727ED3F2DD13AFB33399A33AA652E99CAB4269AB174B47C295D534B47F25008E048277B9BE257E2DFF005739D7C30ED563B23C4F646766982953C4B933940A92A4053121E52DA9CEC361150EC9F6224625189C6E16600A53A884B50FCC6CFCAAF4F08F793E8ECF653CCBE8CDD13DA8D576BFDBE516B1D33995031534197E67534ECAA8450B4FB8B6DA53D5AEB87EB0A2010902D682231E11F8FF00DA8C5FF513DA8ECE4FC83239D95AE54EFF007C4A90B481DE197FB9425201E1FF00D4760D1D0BB35DA49BD97938B918C2552D614900AAECE0D34636B5C3968F907FA447B67D33ED09ED73DADF6A7A792C3391E695F46C65686214CFFF000F42A91E712520254165B2AB822FB99BFD73FE9B324CC3B0BD8AECD649889F3711330F2815CC585024CC29531724D1DB661E5E67F89599E1F33CD66E230C94A553564A929E1726ACC40F4E82F1D247948AD71B69A3C6EBB574490B1002385F6C12784DC01733F7463DB1DB544EC6F617310924A95825B0B9FF00A65869AB59F7BB98AAE538632E7C998CCC41219C82FCF4FE35B7DDBFB336A1D3793FD1114D91661A9B2B7EAA9F4B66FC544BAEA565F42DC2F2908E00F070CAA364C9DF1F9D5C776733199FD434B9630338056684F7E25CC2857CFC553C2C963401EEF736F5164F99A11D9F989EF83995C25259C3EC77607E952F1F0AF98B15CFD56A6AFF00A9341273DCDFBA685437E20732A80DA80998363E933338FBBF869388C2FC36C361895059CBD824920FFD216075B53D77F336793258CFD2B04F0F7C4F78C4DD428C2F6F1E8F1F709F468EA4A2C9BE879C99BCD33DCB28F323A7758A2AB2A76B690D4203AED6A590A429D0E7892411E1988B63E137C46C8B198EFEA09787999662168566329489E25CD32CB14A89E2E129A1A5CB178F5A6419AA47645C4D48E1C3906A1CFCAC19CB8EA3A5EFF1079D56A9DD479CD0B47EA85AD47A8D65EB2D2B0EE6956B491C8820C8B9B75B8C7DEAF8272BFD27B2F95E166829030D253C268DFEDA685EF6B0E81AB1E46CEA60C566F3E61629338B1707FBC8AD6951E62102EA1F436DB6FD4FD6384A8254121300A8EE2D3F0F48E7D23B4B365994549775A48A6C03DDA9B787268C6712929C2A1807E116704061E2E6A3EF1922AA23C441F5F9441DA3DF883EC8A0F14F51258177DAF4B57EDB45630D85EF44C0D41A5FC5B6BF4DA17B3540F3E7613EFB1B0FD8DED1218FC4254B2904120D791D1FAFF88613F0641248D5B6BBF4D7EEDBC39B15299BDCFADE00F3BF31FBBE23FBDA0A38EB4F0F188E9987242810054736D4B915F1F5AC3E51D5004CAA768E7CEF73B794DB96136F5FF10C26E16F4E7EFCFAEE445EF9FBCA495C99916BEDE5E63E7317C37CB7BB3C3F3247450F3F06F5B450309C248A8D4B1D694F37766F4200A9B337AF24C133CF7822DCE08F95F6C5816B961988B5C355B5F0B922EFCA2E99690C12EC59AB4FE2B7A45739CBA47149067CED07A12768E7E98CA172C9F988FBEA6DCF98B45CB0286006B4B80C1AF77AFA6F102A9AAA8688729DC534B6DC43BDEA55C2B49696958008330A88B13D3683880ED276670B9ECB4A804AF8056D4B6A3A6BE4F13D265204D42D49E24B1052752A70E79EB6E5AC7B09EC69DBAD16A3C859CB7357D0E56E4ED064513AE052AA82C14990A3C809BA4FE5E61F899D9E565A0FE9A590563E65A41E24F0331A5473AD87384330C0CD93869E94A14B0524A5816AA5C5F50E0121CFAC4E3DA13D9FA83B45A1ACED1744308A4CC5092EE7B97B0907838070B0520402560711EED26F20CEC28DD8CED5E272BCC70D81C629687584CA98A27FDC018977A066662C4EED1C7B0699E8C7AC4D744B42CB248019D4E59D89FC1A691E516A5C933664E654556DADA76994A4292E24B6B3C2483E15709361331B796FECA9D9AE5F99F64B152578A97DE4CC22AEA492FC0A162AABB8FF00069D070D353331B8128F9F8549B312038BDDBEB406B1F7FF00F40754328FA39FB1E678871B6ACFC2E08327F8A3BB7C7AC74DF1F9ABFEA9B013301F14BB412E5874FEA125019A85C92799BF851C47D21F84F8633F219135350258141B74A6F6B5CD047B573C37170AEBCA3D3CCFCA31E7054C50E1FF006EA6F5B3791DFD6E0C752958644A4AD2A50254F7D3933DDEB5A53484756DFF0029464057862FB99E40C72BFB879E22F1F899A0CA4A65120104B5AF6B3C30384470CD26684EB56B56BA3DB4DB9C7997ED4C8A65FB4C7B3BBAA092ED2BD9F84A8C594B6100F39F90C769EC5E38232AC64B5A7878E5A68D664976D79B6FAD9F85F6B7088999F61BBB980844D1516FDC0E84801C7F916F48A8549FA95229C215C4C35179FF00CB06C07E679FBF9ACE5CFF00D6E238657CA16A6A8DCE9E57E7BD3B9E1729958CC0615256DC32D249A97A07EB60FD042D4BD07812D9E13304DA39449E9E71CE2708CC54D0A41E0B9AD411F57DABA9A56F0F5394C8C3C99893307EDE4052BB8FA9FBC43B5AF0AB4EE774EA8E0A8C9F354B8B240E0FF24FED7E60F97BF0E25619789CCB2DF91E5A27202C805EAB481CBAF4E91CF73DFD3C8CAB3596710973297C2E039649E7F47FB47C9CFF0087F4FE94CDB52E62C96AB6A579C664B21C50250AFAF3E47DB2779DA01FBB1F53FE18646064797CBE220CD92876154FCA08A354D5A9F48F8F1F144E2FFF00B438D54B96B52062165C02D45162FA8F1D6BBC55DAEB5E546669750ED48629297C3DD214059560070C1E42605A2F6DFB5C8ECE1C0C852E5A4A8CC0E0849B8D7CEB7F38E479AE2B1AA5E1C194B0C468695076E5E3A87B50F9EEB658CB5CCB43D14CF1E24BA560A92A6D457224CCF1446DF0DE7FB23D98563D73D18A90485FCB504382FA16AF879B45D329CC2711216A7E29401B331706FEFED1006BB78ED1F2C6574547AF330A6CA2950B67EA816EA92A4BA14DF081DE6C27A72F7E2771DF05B2D44F9589978290A54D515294654B7D2E4A5DEA48E62D48E98BF88D98E1B06A9285CD010801202D4D404559BCB4D0475D352EA97DD5BA0E60E5754BCE975E754A502B2B595192499DC9373EA39F77EC7F6364E4B82EEE5C84A4290DFB40B03A369CF5AEA1B926699EE63DA1C5099890B3C0B3C04B9D5F4B5BEC08D23B4DDA8E75A5EB5CACD3B995569FCD69D1097A95E741A80B4C2B88B6B483C0098924FA1DE9FDA8F85F27B4B8BEE276192B97316428AA58500E402E0A483726FF0066BE7663B5B98E46B9264159092976590CC41D19C035F28856A2ED63567696ED2D0EB3D4B98666CE9F53C72FFACBEFAD3FE6BC6F405B847BC9DE23A62FDD8EF82992F6170FDF60B0B25733149056A42128293A12007353AD9A8D171EDEF6EF34CEF05874954C502901438891A0E7737D2FA562BCA9D40FE459A65998E4B5AEB2F30E38B62A10E2C2DA5248B8F103722C7A581B62E0AEC761F1384C56131081313884291C2A0084F102050D3534A0D2D669D809F332E13B1330702D4CA36492589E553FCD8D1F75576A9ABBB412A6B5A6ADCC337A4A06826969EA6A1F5A112DC0094A9C2081C291EEF2C503B27F0872FEC763B19330F879481984C75704A4A48724D4015FDCF5D9F58B2E69DB1C7E2E6A10A2B28413C2EA2CD57AB9E60DB4D2B0DBA7FB70ED3322D34AD3997EB0CCA8B4E5225F65BCBDA7DD0D38D3E56140A43804428D883BE2C78DF81D90E3B33C3E3A661244DC4718985664A38A9C2AAAAA46C6B5A42A736C5E2E5A13DF2D0966238942A7714A5ED7E45E29276B87091C6E77AEBEB74D4F12B88B8E3A5C2B3B1278953EFDE71DA26E5B2B2CCA1196CA940C8549324200040053C26C0EEF42F6B34426264CD97884CD1338940951AB12407605FEEDBF3B353DAF76A54BA75CD08D6B3CD1DD38FB62687EB6F25969B47F34A0254F0042CC8B00224918F3F49FE9D322476865F69132E4CB9C7102795F7238828A8170581A1B6BA691D4FB239EE2F31C0CEC2E227AD12D29290952CB0670CEFD0FA91AC55D97E635EE553D9A503D5394D530E05A2B29EA9D69D6561478969536B428971424C2A6E649C768EDDFC3FC0F6970795E5D8C28C4A70C9084A972D2414B2284104580F3DE29598CDC564B9909D869CB525530FC892415392FF303A383E1B34596D7B5EF6FDA7285DC928BB50CF5BA1E014ED527D62A57DE34B942C77A5E253C2826FCEFEEE57DA2FE9DFB213A660572B29C112E0AD430F29C905372106B4D4E84C751C176C33395839404C5AFE573F39245050172FD473888E53DBA7695A1AAB37CD74AEBECEB2CCE75496959C569ABAAAA55616E40E24ADF3C3C016A48BCEDE98B2627E09F63F0323087FD1B09356809242A44B64D059D3BF4AF844BE13B7D987E8F1038E602A490071177A8FAE9A6A6B117D41A9EAB52D43F9CEAB7DCCFAAAAF8559966AF3CA4D4D5A80F0124953814D936214622C462E384C8F2DC9300A9383C049932B807CA89684866A8094A40028C4806BEBCCC769B34399098274D333BDE2EEBE6660A7AA8D2D5AF41A448342FB40769FD9636F27B25D5B9DE421B5346980CC6B1E69238A5CFE53CFF00040BC023CAD8A64FF86BD95ED9A7128C7E45835CC50204C99265A8B977214A43F3A9BD6BAF4CC4FC40C68C3C896B9EB432085312402C1A81C1D9EDF7996BAF6BEF6A7ED1A84651AC7B64CDEA74F3C80D869B0B614C881C485165D4B8E0717E12A3B5ED6C73EC37F4A1D99C2667FAC9383C2B77817C2244B00317350351E075BC452BB7388C4A529257C697A959215B720DA0D49A5E3AE55D4AFB4A7731ABAB71DA9E24ADBAA71D53EE38A599597256B52CAF97193C3336838F487677B3780EC9E5DFA6CBB0C894020256109E00AE1D580F17A8AD1ED10B8ACCE6664E272B881A1048B68C6A030E5666ABC4B3477693AB3B3DAF567DA1752D6696CF5F6C8AF4D1ADD6FBEE0414B454A42DB49F092773B9F29A4769BE1764BF12153139A61249AB1EF65A5770C28A05F97D350FB25CEA764AA3DCAC94A8FCA453AFD5BD2D0CFA9BB4AD6DDA356B59AF68F9F57EA4CC925EFE1AE555438A2C820A5CE02A717C05405CDA6DE470C3B29F0B724F845881FE998594B18958E2084252031352C1A8ED4E82D0BE79DA4C56629497514268B3C4494BB0B7D5BC636E94ED33B4DECE686BDBECFF0055E63A4559CB8D2B325D13EE95560A75CB417DDB8829E00624F5B7385BE27FC25CA3E24A7073F192A415243A44C968594BB1A150A3F215F5898ECFF693FD3B018A40593DE2181763622CFBF9DA36679A9F3ED6F9A576A0D5B9C556A5CD4B6C8CC6A6B2A1C2B57F2C210525C7167ECD884CF520EF8DBB15F09B03D85C3AB09829E89689C9632E5CB084B005D82193635A728A5CA5E2F1B33118C33152C05A9481C4FC45CB6B46A3D35B6D38ECDBDA27B6CEC7D8699ECA35DE67A5B2A60AD4DD0B0FBAED3A5C512AB32A7782EE19FB20199E6629DDB7F813D98ED8AD788C5E59869D393C44CC5CA4151513772924D75BD2B6ADFBB11F11B1B904D9B82C4A55312BF941366B5D8BB8A7A5ECE7AE7DACBB7CED8A94E51DADF69B9D6A1FE2922A285A7EA32E4308A732DA4AE95E42561D4813D3AC99315D88FE99FB33839A56BCB70C9EE8828224202878B39F7766893ED0F6867E67C5364932CADC800D01FF0026E47211D79A9CCF2D06BA99346E51B34FC011C6F2EA14E71FDA59714789449F11BA8DE099938F42E1BE1865F95E1E5CC91C3DDCA1F227858D00A017A352C34B4727C7E0B187172A6AA615AE693C40D804B6B6FB0D8986AA253ED24D45112A6DC50214A3050526410150A9E7D248F73AC4ABBFCBB1197CC4912D52D52FA8208B1D34F037AC4FC932A470778A4A66242788022B6D8E9D5ECC77B799EDC7B60469F6F43653AE7356B260DAD2BCA9350F374FDD9F1B8982F25B3226C419F2DB1E6FC2FC0CC8979F9CE152B0FDF77E66059948E3078B8BF71F9BE96B35AED83CEA52705350270AA18004D4D59C3DBD8058456B4E8A377EB05552B156B5713882B594A9C995AA4909F12A547D63963B2E7787949C261B2B92014A502529A80064A45052C00D3A544727CCF118B56350B12C2A49987E7A1FEED989A9B5ACFCA2DCCA3B77ED9748E937F4A69BED0732CB34CB882CA7256DC7154E50E921C484F7A1290A2A26C800CFC38FE7FF000772AFF51C366430B865CF52F8CCDEE659980B823E729E22D472F5B728EB595670A95932E5A9652F29B85C80696634F1F48A997589A4A751CCFF00CC562D4E3CB741BADC7945C52894F52B24FBCC0DF1D672D9672AC36170E80C1090030D801BEDD1E968E42A44CC4663326C90425535CA49B7CC6C4DDDA837A5A120AF55434C9EE032DA4ABBB571F115C9BCF3116B9E7BF9CB6653D73A5A454FCA34DC375F3E9511379980BC3CB48A900B80795F402D460C4794642A215008B7E5BEC3DE01EBB8C3DECDA3B9918A333E5252E09D686C2C746B5ED588CC04B4852828555AD2BCACC5B9F95995B5504CC72E5B7E1F84F9EE3103DE4C5E2A6853F0F116F07E41FECFD0C6B98E1857853C54E54F2F7CAD0EAC54A85E6E39C8B18F78F4FD92E3D6212661D4011C377E5FC74D1DC5EB0EAC55A81B2A662DCA39FA4DF7F8E1C4454D90B0E18815F467BD7CBD63B31A83FF0030F9729F3FDF5C5772ACAB109E1FF714DD5EC0023C58BB56F1C87064FCBCF5237BD9FDF8454B9AEFFF00501BFE1FBF23B62EF2329594FEF248BF27D37D7F2748BBE560F9DFC3C0D9B56AD9A2B8CE261572771BF33B7A4795B9DA30DB13964C40A2D887A8D46947F7CF5BC6096A6000B063CECDA06EB5F1115F660B2961D00F8942537BC03B73FC7737387196CA54942C2D7C65ACE76B6B4BDEE1E2D3804898A4BA4900B7A87B3378FD1C44F3B1CD74E7669AB726CED2F2D2AAEA80D5537C6A094A0A92D789174FD9513F64091B49C72EEDC61246213338A5853F1338043814A1D4B57A88BAAA4495E0D49525259140D770E5F7B8B92F5762447BBBD9F6BC0E06B32CAEB52BCA6AE9D872A11C21E6EA389A056DC2B885D4549909244CEE31E5DCEF2C4712FE4E15851E152404941770411B30B50EF78F3E76CA58C3E216A909EED890C000FC8351CFE34AC535ED49D82A35A6529ED5740E4E9A7AB6997D59BE9DA75A54A76525A0F155B7014F42516DBA623B2ACF335C3ABFD3B178F9AA2974A165D299A935E16FDA3803246F7DE1976471844EFF0076BF3A0A5CD5241AF9FDEB5871F656FA6A3B60F628EC4B24EC374A766CF6754BA42A2B02AA5CCC9144A52AB6B5750B4F74EB6543854A5241BC81320638FF006E3FA61CB3E296738DCFCCBE2C6E2780A94093FB53C3B905C72A0F38F72F60BE2CCBECC65430D310172C20339B33B3537F6E4C770B49FF00E240F69CD7DA86974E649D911454BAF52A12DA73AA5592952925C20A99E4992795AFE7C5F34FE89A46094B64148960924836A126FE941B6F0DF3FF008FABC3A138B4A949134AC896096649203902869B56A23D6CCB7E946EDBB32C8727CCF30D00AA3AB553A5754C8CCD874B8A7109264049038493CAF18E793FFA5BCBA54E992C4E49282C42914046C7463A87A5F78E6B9B7F54D8891296944A293C24385549B6DADC0E61A299ED17DB175FEB9D65A375E55E96FF0039A3D756B651F5E689FF003894A1710009001BC19E587184FE9EB0F830A40C425282188018116FF9023E9CE38ECEFEA5313331C27AE5296EB772A22C6E28CC5B4DA2E36BE93BED716BA5A2CB745B8E14252DA17F5C6E13090904CB7113CE4EFE7784CDBE03E4B800A5290272E6D4B121D89ADEB4F623B1645FD5CCC95874CB9A42025200E2581A731FE0B062D13CFF00F78C76CB45979ACCD74D251E00A4B66B2941822C2C276B0B6D1B6C6051F02B01895BE1F0EA4826CEA557A380F5F3B3E8669FD59AA705844D0285C85E8D4B6BF93BD693CFFE94CED32B5EAACB2A749A99A3A9A6ABA45BBF5D6D40F7ECB8D6E102078B91F23D7177C87FA70913264B5AE5174A90B49E134620EAEF51B8D2D58E4B9E7F5278EC6098133490A0A0C0D3E67BD18B83B1AED1E5CE7FAD2B97FC56A2B1A5533B9AD53F54A417F8E3BC79C7AD06DF6EFF00083B63DA3D83EC09CAA4C994A5525A5090E9A06006A4BF3D8EB68E099DFC44958F9CB9B3308959592492D5737A03D6DBC5199DEB069D0950A8E2E2E20B4F111B5AE49826DCF9FC477AC16449290854B414A406FDB5B3863E477BC404ACD70D9B14BE1C21ACFA7FEDD2CF435F18A7B506A469C04A5C22247085189322C41E66D63E51B62D797E4D230DF34B9684ACB5001E069B0FA18939494380848036B742FA3015D5AF58A8F33CE0155DC8E22A27C5B983B8B4FA1E67CA716C912A67CA9324CCE166A3F326C69E874261F224226065241069BD01E777B58E910BCC3356C93E3937BF15ED6E93D39CFB8E27646267A180C228B5D81B55A8DE7CE159396C90414CA1D5A8DCE84EBD1BC221B9A66685442828F8A4CC98F599300733D05AF13382C50278A7617BB240624786C0914DE9A4484AC24B42920A1D542CCDCF46A90DCF4AD6227515C8415149009DC8B4EFE9CC7BFE18B1C8C52267082C4358DACFAB8B9DBC6257825CD480B47101448B81666A7A8E9BC30D4D625704A8929B013D77E7E5D2FF002C4B4AC1A26BA811F3352D517634FAB57C21F485A657CA80C9147FDA080395EA1BC690C4FD741549227A137378DBF641F5C3A392CA9DC2ABA81B9F114F7AEF1212D32D4C4A58D093AF23F7F5D6120A90A0AB9BC5A48B74236F3103F1C18D9A8CA25A4A93C6E0806AFA3E9AE8FB43D4CA3352D2DC70D9BAD4D7670046A55401D2D7F4F5B1B8F761B4BCF70D3C1E342411404B1AD742F4EBFCC2FF00A25CCA4C25540CC0D35AF263E35D4437D655B29E1529E5A0DEE0124817E578063CB68E85EA71689A03106DC2011EF53EB6687B8595330A0894B28B384D1DFF003E957B086F73336F84B6CD42D40FF470290099EB11BF3369EBB61BCCC4E2CA9908330A59A9E9507969B0787ABC389ACA9ACB2352C589A8343420DBEE61B8D0BB592EAA95252824951793C4679804D8EFCBD712381C4255FF00F50099007ED330815DEBF9D4522470D3E5C84B2C150B003A369CBFC5C9C0AE812420D32BBC1027894B00C5E3700C748BFAE36C766794CB0D3319294002C389346E60E85BF9B4384E3E5A50A12D290821D55677AEAD7A873A36E63356599AD78032ECA6AF306D32169650F2BBBE232094212ADFCC72DF618A466BDAACAA43B4F94B4A6FF324003667D8DBEACF11E3159782B5AD6896AD0B713F27D08A0D2ADE12BD3BD9B6BDCF9E4D3657A5F365B8B20049A1A94A2FB4AD6C817E4662FBF2C52E6FC4CC9302A509788912D44D077881BFFDCF47A8A6CCF0CE766523898AF89239368F5F3B5B5EB7F647EC4FED1BA9592EE5FD9E2EB1901254A7F33A7A5EEC2EE0F0BAA4933D22C79E29B9EFF51585C866265CB2311DE71550AE266009A876D9F5BF3868ACD70284ACCCC426514D5296B96347A7D757B18B5322FA373B79CD78467196B7908541505D6D255F08F4EF8EDE5EEC5626FF0054D85980032542EE0A54DE3F2F56B5E1827B4985492EA0A4BE8A29FCB03FE22CCA6FA2AF523A38F3DD7AD50A94077484D132E1FF00571290E72F3E57E830D07F536B72AC1E14CC209E26251C3CEA9AE85EC393B05876B30E1242425059A8429DB91D5EDA58D61DE9FE8AE0820ABB4B440DBFF86A26FBC78EDB9BC09C34C57F5238FC494AA6E5A66105C1E3A83E29E42B082FB53289FDE189DFF173AB46EAAFA2DA9C371FFED6114EA13C08394A55DE1F52E7863AF5E76C43E3BFA94CD019694E0A64B4D4169855C351A70F2AF4DCD7795DA9C3A1DD6140DC7133F5B575AFA6B5FE75F45E6BC4073FC3FAADACE42BEC90D314A1C8DA429C1E42F204DB78C2F23FA93C50E156225AC002EE49F06497F4F4787D23B5387B258053BFCD4F0F3B33EDCE9ED4BF4777B43E996C2E9B224D734EF19EF1BAEA425B0904C96D2B24F15E39C99F2C5CF25FEA37018C5894A05C517C4952589E7C3A837DA8EC224A467B85042C043F25025F5737DF5703778EAA6B6EC6FB44D0150B6F55E4398875054389AA479C4A00B9FE6B2DA926D17E288E918EA7967C70CB25A4292B94870EAF9C135B386241DEB534262770DDA3953662509295710600A9AA2B525BC45FC1E2AA5BE5B5C3CDAC380C354EEB65B24C90788AC03311B89DC62DD84F8AB96E6B294A18847180591C4002FA00E2B436E578773D5331E4F0A824A59CA485B3EC5DFC34D8E9A066C95BA9A761BE3A8BCD37D8481B9872C36BC49F5C472BB55FEA738CA968E1492DC4CDADDC063BDCBFAC269C9E7A921E62B84F11EF1C93CA8FAD9CF8467515AD28B694B85156DF107D909527B90A8E1874001CE213B1F0EC45AEE8E4F3023BE91892B2594521A85BD59FCA1C232AC4489615C4BE136507636A91D2F4D6D5847DF892413277B9927CCC74EBD7094B54E0A6C42485248F995AB6CFD3CF5A5779721082954C4F1105C3D811C9A8FE7E158E7EB12209558D81262DCFF2FC3125326A26A50090B2072F201B4FAF487188C41527810A5252CCC090C3D3CBF980BE15F68957A927EF18D5D2400500B6E7F888D12824B82C6B6045FC63732F4C80600B6FB03BC08B72DB029408AA016B57FC5BDB465482AA1538B5BAE9D7DD21636F264C44DA4733F2B72F5B7963744E280C9A0B30342D4AB01E3184CAE0FDA5B5760EF1BFBF09E1BEF78FD8936EB1F2B37514051213525F66A79746D21708E200AABB121DFC1E961F6852DD4A6D06D17DE4738FBBCE7973C63BCE41C73F6D4FAC379B2900314860FB33574BEB6878CBEA412B24DAD37F75B616E971CF960331F4F5FE222E749410484802A6C36FADEAD7F08EDB6A0040701045BF3C31CB7304BA7FDB2FA579BFA3F378F3BE0813C15616661576D74F22D78A97340544F0DE27693D3A6DF2C5AA5E6A5293C2082756FF001A37BAC5E72C07C68E3A83CC7DE2B8CE5278556379E477822FEFF909279989C7672B03F6B9666DFA9D41BEDE16B9E0DE83D1EE29AE971E7B08AC734596EA29D441E0495950E5E11B73DF973F7C028E5D98AA695F10201DFC81D18EF4A79C5D3286A92C188B8DEFCADA9E95B98655D7AD550FD7107BA2A40A640994A93092A02D1E200ED1067152ED203384CB9A1E571B51E2EC84F1C9E009A81F317A105F6E434B691EA87B17F6AD539AE96AED10F362B73FA1EE0D0075F08516D6B538EAC15595DD340280327C3000918E059E610A662D4B5129413C619DCA8B245011AD0ED1C7FB6F9605A953254BFF006A603C079A5B8DC1A8A83B69B47A5DA2B519C9DD65D72BCE6B475414D66C1D6781B6A41406FB95CA48BA91294C18E2DAE68F98658713254152FBB5A6B2A60357049D1B50E4127504B472CC0A97976238D880F50E5AFE43C3C63A43EDADECD20297DAAF674B41A0AF4AAA33BC9A9A9D24502909096C95004AC3CAE25C25238660ED8E87F0A73F4489F3F29CD4044F96129C34F5B0FD55092364F7618126A6E23AEE4D9C4A9D2901DDD8104FEDDDC1F3371E05A3ABFEC4344731EDD326555708144E540A9429B0A054195252786265244D872F5C4C7C40C6CA380C47E9CA44DA061C24873A91B8A3BF8C3BED14AC3FE88CE511C2A4121D80703CEB4B5483A08FA26A3AE6695960B550AA86D68285A12DA95C240E14400098D87B8EDB63CB39B058E352A50410494A9C55EA4FD7634AEB1E54CFB339471CB94140A7BC29E170D73B694F26DC9892643A5DDAAA866BAB6A0B742B2E29E6DC470020FD910A20F316F973C73CC51C4AD6A329454F4F94BB7BAD4EDA5A3599230DFA633BE57E1A3B6DAEDD75AECF120CCF55E95D2A834B42DB4ED50078DDE107855CB84949111CC1E9230861F23CC33450E2428F0961720FF8F2D4F3A34F993B153552E44D52425458A7C7A7954DF48A0F57F6A4CD5171BA8AD524F8821B4A484EFB5845AC49881BF91E89D9FEC7CD94A4999873421DC3BDA963BF8C38919762D5533D570EE4DA806B715A39AE9143E79ACEA56C3ECAEB514A1EF152AFBB42CAF80F12BA14C6D7371EB8EC99476792908030BC4A02AC198598EFA6BD280C4FE172013402B9D5531A834AB5A87DD0C75E750EBACD16FD7BF515EAA86698B68427842678FC2600D87BA062EB23245CA4251264103CD893ADA874E4EE3533527B2D216C14B0A70EE69B1621EBE3D62AACFB53BA1C4968948209510A241E200FBB7F2F7462DD90F673118824CE2A961E9C5B6B41AD830E6FC9599934BCBD8CA214FB537A0BE962DB83CABECC351BAE182BEA6EAF5226E2C0F95E2D8BE60FB3699443CCE2F02C7C2DBFF0D573250490C1B42CE6EFD6C4D76A5E910DADCDD6E470B920C830AE978DEC7E43C862DB84CBE54A041097A0A8BDB7BFE7C62730F24380C5A95B3EE3DF5D5E2235F98BE6DC6522F2662C3CB909F3E76224E26E461E426A780780E5B0D89AFD627E4CB40482000534059DABB6E74F1DC4465DCC9C3FD44949224107E22FBCED8713B2CC3E350C3853B148A55B40D6B757EB1208C009A54501ADA6CCD5FC4335557B841324037BEDF3888E9CE7E1ACAECDA10070CD34B86ADFABF95442A32E54B7E21A8615DAB6229B5872AD5B055ADC2B009514C4917DE46F7BDCF5C494ACBE6618057116A358380CE19E8D4E96A5A164604B3F091ADAA6BB5ADE81EB085FA9B9922FBCD88E563BC8B79FBB0E06231086F914AF3A6BB73FC3DE1C0C3B1143535F0A0E7A1A68C79B205D5A927C2241BDCC7E22F63373870AC2E1B31923F56B4208144AD41243BEAA21E9A535DDE24B0613294788B6940ECDAF20CDF6D0C6C69398559029E92A1F9B70B2D38EA8F580DA56A3E71F28C44623B3F93212B51C74892054ABBE4D80D7E70283916D5E1D4CC5C8428A52A4BB56C35A5F517FB1898E9FECEF59EA4714C659A77347AA8A929612ED154B485294760B71909BDAE2C23CED48CE3B4390E43C6A939B61A7AA557804D43BEA080B27CD9EACE2194ECCA4CB524AD6025479114205081F9D83DE3B1FA33D823DA6B5829AA8A8D24DE5F93B852A354E56D105A5B55C9EED4B42E40E5636E471C7B35FEA7728C8B10A9070DFA8992CB06248537309203B1673E7584F159E6065CB4893344C24328BB70B36F42FD37D03C76AB4B7D18342E37DE6AAED03F83D43010A7E8D1446A038A31C480B69C8B796F6EA46396F6CBFA9CC776904B9595E58A9281C41644E32D9EA09701EDC9BC62B38EED62A505044C03621890297BBEBF715A76234B7B0C7B3A69A6D0D66D4BFE2CAB4402B57D6A8F8C88BD94A001E7726FF001E653FE26F697304F0A27CDC0F15E6199DE316BB13FE69688299DAB985FBC99C6F70297E8D5D5A8DCDE2F1D37D897635A24B8E696ECC6932E53DC25C79DAD35A1E0DC701087D2BE1E1E805EF388239FF006967A97FA9CF66E212A6F9423848FF00C4DCE9CB486533B461638904855C7CDE7AE8DD7D4C58ADE6EBCB1B0C65596E5542DA4404A72AA25280116E3EE38BD6FD245F1018ACAE7E366F7B3313882B26FDF4C0097B9653005C0B5F5BB207B4734D02CD5C1D7E9D46A2352B35CCEA7C4FAD3FE90C3696072990D848239C11E58565E117824A93889A663B7EF256D5A312FB8B7E62BF9AE753D750B21C9700967028F5D2A77F368D2A7EA957E37D20C41EF17CB7E7EB6EBBE1C24E1D54E140F2FC52FE3E110A3339E47EF556ACE58BFB0EF189A779D952DE748039B8B813D25437F9ED6C3D96990406425B56001E868EF7E9A5A31FEA9882ED315E2F4F33F6869A969D6C9875C302DFCC549173D7D3E7E787C89120904048D9C0DABB7BF53FD4E79A7117143534E8FC9FD3AC3154BC040A975D41FE8BAC91783B137E5EB1698385D381C2CCAA9085686836E4FBFD615959A620280E3350C2A59F5D77E5A5EB0D8E54BE3FF97CC9F644DBFE27431CFEE9C67FD270CA344A48D030B9F3FE6FC83E4669884D96A0372496BF3FF3053E619E33C6E0CE9C5017871B2B00F48595020F39C2BFE888A04A824AA80A5203D2EE08E5F6112387CE31003898ADB5BDADEBD6DAC6AADD4A9CDA9D596EA2C872ECFE81D05B794ED1D2B2BE056F0BEE4AE483BA4838513D9854A2A5C9C64C96B50A1E252803D38A97B35EB1252F3EC48293DE2C503976A35598B8F27A523AFBDA07B24FB3376A34AE53D16408D199ED5059773D6DDA9A914AEAEE1429414B6A9262DB74DB1B6165F68F245CCC4A272F1C5052A912BBCEEC283BA83BD29A11BD8C5FFB2DDAD9786501899C4059657117E837EB56D63CC6EDAFD81FB44EC9456661A5595768FA71216EA33AA608A27A9DB00A84D224A9E547D93693C338EE1D90F89E8C5A256071F2460F14964AC2D4286CE16400697A86A08EC9957697018A530527829C21C11CDDBCDBA523CF9AA7336A5AEAACBF36A3768DDA359406DE694D380DC292AE24851E1B8F10EB78C77CC9BB43230C12B13C6202C0243BD1AD42DE3E517644FC3622524A4A4F10B023A585CF854D79469EFD179880379B7A13C8FF00B6F8B81C761339960238252D983303B3E84B9EB4BC4163B0E2BC15B503F5BB36BE1A93A6C53E821245C1D8F5B5C5BA1DE074DB9C4FE8E76114F31F8093C24B904540D0B7E5F788C1294160A9F57A31A386234D1A30EF93FB9FCB193300A91EBFC42BC0373E9F88DCD3DF6B87CB9FE630779CBD7F883806E7D3F10B1B789F23B1FC2D1F3FD70779CBD7F883BB1B98C9EA854A60FC083F1B5FF1E671A2E630AD01E62BD76FE6374C9777A0D1DDFEA3DEFA728A93C8DBEEF740DFAC1BE11131C5C3D039B5EC694D07DED09CD906AC016A74DF7776E7B0877A0AA502A8369111E51BDB73BF2F2C678EA694A372DF4AC45CD90E750350C0D3EA7C34BC77CF51E5EB71C5051932AF0404F3200046F7FDED8432B12183292C19EA090F570FD3D63CC9817E2041A0D2F4B963420877F2A4545A859772E085200A5EF42A54921F2E70FA4F0C6D1F9E2DF839586C43844C042400414B33DAE35B6DE517DCB9822C1880C7AF2F2ADEF152672FD528A8877BD1CFC011689E83CB7F5DB18C5E512149078D2C7567B9DDF5736FF371C194B25CF2DC8A91F7E6CF6B456F9A07090A75239806C67AEDB7A7A4DB7849B21182A022AEC436AF7B74FA1BC5C32F21201497E4C777E57AED5884D70001B08DE3901FEF73CA715FC7244E428F0D4824017A1B791F0A6D175C11331043162C1B660FE15F758977649AF33CECFF005EE459FE56FA99629EA52DD692B012A6DF5A5BF182608095288F7F4C735CE32B528F1000A49571029D85C93B35CF8436CD728958AC0E213351C5340FF60B1F95CFCD4A03AD76018C7BED91EAAA6CDB2ECB731A65A2A29336A661C438D11C3DE25B4174786D3DE133D31CEF1D8732C2A581F32497B549B7A5ECE2F1C073FCA15855AC80C1CB162373E9CDDDB58B9F24AFA4A9A07B25CDD947F0ACE98729EA9D7877A965250A42086D5C533C53E1162271CEB3ECDC6553A44E49289D20A8A568F96F7729BBF32D70221F2699311315FEE94A4104F83DABA1D1C6D1D4EEC5FD9A33FECFBDAC296AB4A65CEE69A1F3172B2A1CAD282C329EF2956BDD60D92E2C8104440DA6D50CE7E2262716854B2E02B84125454DC2AF3AFAED61161CFB389588CB061D5891DECA4A8218D55C40BDB6A7531EBE64793653A529EA5FACAA6DDAC078D146B4825854CC49242A77988B4EDB55B179C62335526570144920052AE5541E219ABAF8011E67CCB2B2BC72A709DC40ADEAE3FB9C6AE06A01BD05E23F9F6B5ACCE10F34BE1629590784A385B1C2245B8426F6F5117D8E25328CA6520FCB24952AA5C955FF00F559DFA56D589718713B0DDCF7CC4A48DB403536DF4E44B375A7546B1656FA99A373BC5D39525DF119BED249BF2F2B7588EB1D9EC9A58964AE5A52E450A406F120120FF8E6CB2CC84C99B316495125C5BA915A7BD6F1486A0D50A056A2A04DFA488E62DE9E98E8784C0E1E4814492350D635A90187E6AFBCCAF00A4B324834AB1F2E75714BB549D6A1CEF527D65B2B5BE5A53615C12779F2E5B01F0C5A72F12D3312132854B6E5AFD0EFBF898504AC4A0060AA52943F47AD87561147E6DAA1E53EB6CFF310A2249D94394DAF07998EBD063A265987C34D4874A5058559EBB917AE95A3738591331628EA013A69FE0DB6ADDA2279C67C9643243E58EF02B89253C7C7CA24ED1C84CE2CD84CB82D4B200570B70914636D285C1D4D1D856B12983953B140F1254403525C9E6C0D9F666D5E21D579AD1B92A7495F9DD03DC200F5F85A31312F2E5AC072CC5A877E96A6B5DF78969381525884B39A505EDCB4AF97278D556654C920D22E5641E23C53C3D01067AFDD322D8772B2F41238E604116255FCB8E571B077893958650E1E305AE094B38B0667FBD9C07BB1D43F5AB9716F828BCA2104C45C5AF7F41720F39C2BFA1C3BB1C5A470FF00DC001B33A8EDA8A57568934F0A40484B1FF95459C825E95BEA46E2195758B0A8A5A4A82B9873BB65D7E49D884A52A22FD3A6DCB0B7EBF23CA10AFD66632934FEF58727C4D39FF989EC0A4A05D04914248F3A9D43FF00910FB94697D5BAA1D45365390E6B5EEB842508FE1B54CA5449B7F30B010073927E57C41E3BE21766B02852A5E658770FF2F7A8A9E4EA716F52D0EE6E265CA6134A43E80A4DBA758BAF4EFB1DFB456A250FE13A25CA3A77F83BD79EAA6124A55B1097824A60192239DF96396E7DF1FB26CB57C266226F0F170942F8830AFF00692396B7B3C68730C1A038989516622CDCAA3AFE2B1DA1D19F45CEBECD908ADD65AA5BD3E084A9D6BB962A7867ED0FE5BA0DAE3913CA39F3BC6FF565270C95FE9307FA8526C97297BD1CA5B415BDBC5BCCCD7082C108AB12EEEF6A55B7B45FDA73E8DFEC8723528EA8D53FE27523861A148FD206787EDA7890BF1F19040998F8E395F68BFA9CCF7B41C49C3E5F3B0411FB4A2612EE4D7E516E6C0F48AC66FDA456087FF293434CBD02883E20FA5FC5A3B0DA47D9DFD9F340703990E8C65EAE6C828A879C79E0549FEA28792B499B7236C73B9BF127B639B288566B899725414152FE6143A3B83EC86357A64FED1CE9B314B5A895A8D482C36D282DB8BB98B869AA58A64A5A6724CB1B61B1C34E96F2EA442909800CA92C711311751B462117271D8854C9EAC7E20AA6D55C53A6904F205675A9A798863373EC4AC01C67CDEAE343EC55E1CD2FD4D4A78471B083601B529A17E894948827947DD66B338E516989EFC821CA839FFC8824FD81D4C47AF339EA720A8F16B51BB8DB9D3F98D468452294A538A25DDF8D5C5B7BEF37DBCF1A771FADA22477406A05075A026DEED0C311899F32E49376726DABD7C347784AA4324C828F23001E5D0CEFB637FF004DC423F602A6152E453CFED5D79B41326AA951E20BF58E50A4A66556E84CFC24DBF19F2C06662B0F4EE896E4F50C7C793EBD68ACA335C072491AEE082E599BC6B4DE352D6CDE4A63F7E53BFECE105E718B92DFFCBA88AB104F3DB978C39E09859A85AAC01E5A9D2DF88C5A75A4856C7C847E53E9FB8798654ECDD1C53126504EE2EE48B167F1F08CFE9153182FE63573D6B6EBBD9F68D6AA865332073E6246FE40DBE1F761FCBCA59BE634B6E7ECC7CE3539730D0B1D6FD286A7C18BBBDA105454B728BCEFB1E7EEBFC236E987B2F2D20B124333B936AF3D34D7CA31FE9ED7040D75F1753F46F65B9CA84110543C849FDC7CF0F51810CDC64B5F95DB5AF3DF58DBFD39C58685EDE05DFEA7470CF0D954A6D7C3E14922FF003E5B9005FF0008C3D9187E1242AA92E1C6C00BDEFF00687787CB9249A07D8536D7A8F2AD21B1E423FB42444FA5FA81B7E1BE1F22525CB38E8FE546F53F7872701C24961D0D7C3A569F567742B284F100A067748833CF9C7FBFCB798274B0148048AD0D08EB736D9B5E90230C906CCDEF7E9AF386CA85260CC08312204FC23CF7EB783862BCC71F2AA994A34B3134DEC76E9CEF0A09006AFC9BEEF7DA9E570DAF02D34F5624A5229C0E2480257C5B7BF6DA4C9F84BE5988C4E34844F4AA5F17ED7AD06F4A74FA968AEE7388C4E1969FD3F130AB87172294E67EB0647A9730CB4B9581487B2F78143CC54A50F36A6D52850E07828010790B1E9C94CDF03879C8017F22E59E274ABBB248A872962588F1B8BC4F7677B4F8EC3AD1C4B50346049DABD3C5AD1D6FEDE3D913B30EDD32BCC73ED0E8A7CA35EA9A5BCA2DB6509A87402A212DABBB641E104481E7CF09E4DDBACCB24C477338CC9B2414212A249090282DC44B6B5D23BF767BB5EA9C2524ACF0967756D70CCFA53C447833DA4765FAA3B34D4359A5B55D15465CED23EB4BAFB8857054A428A9252A808BA40FB24EE3D71EA2EC56732332972F153316996DC2A282B1F33B16151D08AD6B526BD6B059849C5042E5965AA9C1722D5AB3EF70D4E8212E555138D34C50345A6980A06655C449B9955CC993B9FBB1D4F1B9EC9C721126524112D207159DF9B68D6D77A51DE230E95A8AC91C440E2200A1B587859B972D1C6AEBF21F96233BD2400D416AFF0010DFB8FF00BFFF006FFF0054668708993F2FD318EF08B06F183B8FFBFF00F6FF00319F7C46CA23DDFA6326613704F53FC41DC7FDFF00FB7FFAA39EFF00A92A1F77EFD0E1099340D58ECEED7D1BCF997D614461C382EED7D1DDFAC6F6DEDA0CFA5BCFCC79C1C23DEDFE6F4E9CBD3C79C6B3648014F534F7D7C07850876A2A88E3BEF69FD8B6F06FD6D80CEAB1557A7BB36DAF945CF94CEC1A95F4377DEF4D758F7DB59FB27D26A443B5DA635EB4942C2968CBCD121244EC8EF56B493FDBFA63CBF947C4ECDA44D48C4E1A64A941899A492E05E806EDE7E11E55C0844BE22B0F41C20D385B67BF51D6F1D57D4FEC9BDAC65EA29A3C9139937E28A94D653A83813B28202D453D62FE9B01D3F2DF8BB8698024CD5255F2820829ABEE40BD6C7E916DCB6721012153122F471A8B73DB7A6978EB4EB7EC3FB48C982FEBDA7EAD8E1E204B2D29F802D6EE90A99E9F0E98B02FE26CA29ACE43B3B1983ABDC1FF000E368B860F1B87494954C0C0D9C397AFDC98EB8E75A4751D2A887B29CD94429524E5D569098EA7BA88EB3B615C2F6EB038E5813F152D1A00482DA9B97E9A79C5B7058CC3A923BB5252DFF70735A6AFA68CF4A59EB6CD686B698AC3F4952D116875871B20DADE2408DF9F9CED8B049CE32EC427E4C44B503A710D7C7D9F38BDE498A925B8949B860E0877EBEC79986BC1D70A9A69EEE8929936B292414C90445F698E5CC5A2B369D84282D310EC5CB86E46F4FA3F9C5ED69C2AF0EEA29720FCAC0D1B4A56D7E7AD48F5BBD897B40CC75664343D9C966A2B333D36427EB010B7439F5A73BC400A09527C298FEAEB2236E319EE3F012664D267A0281759E260C1D99CB5A9A39DEB1C4BB7B83C3C997DE808952E6F1F761C1248FDCE2E2A4DC748F63B4776415EFB8C661AB9C34F42D842A9A9140053F61C40F010A4418FB42083E58E19DA8CCB09984F54BC1ABBF525C4C20370F9D08D3D46B1C1262E5CA4620A2684A8711005C8D350DD69AD758EC054578CBE9A8B23D3342C656FD1021CAE86DF754DA882485A815094822CA3BDE6F8A0A32B5A97326CC26622614F025B878384D41A56B7E948E5D98E678C998832D2B581C443B96356B68D5D76DA2B5D4B5685E66A78B8BE3504F7AE952825E21104845922FD2D04C729B4E599710B4B49766B0766E751E773D69B4DC22D720CC2A3C5C2E473DE9A170DCBC22A8D619D56B4C2DAA5580D1042B848063A7AFAF39922F8E9F926024F1A4AE50E2A3063E2EDA534B73310984462BF50996A52B84A83925B5FA1BBD0C75A33DCE99CB96A595CBAF93DECA88BA45AE491E91D6F16C5B71B2C20CA12889628080DBDF7726CFEB58BDCC989CBA52149F9CA920921EB4D48DA8D14CEA4D5C885F0EFE216923A5F96FEBBEF7C5E7B3B9461315C2676252E786854075A936E9E109CACDD2B3F3CBF4AEC28D4D2D41E315257EA1A7AB2454B6F786780212E2A49B5C207BC75F863A748C83072C20CB5C8530A9336586B6EADBD626F0B889136E024D1DDB6AB747D08E7CE34BA2CD337738327CAEBDD5AA424A28EA0DE3707BB20FCC5B91061CCF46558297C5331D2249009ACD411E6547C6C37E526818472192E1BFE3ABF87F9AC3ED0F60DDB16A984E59A6AAEA9498E02F27EABC1C7B7FC54A42E6D244C75938A7665F1532AECC71204E938E4BFF6CD4929035F94A987D5EBA44B613F472C1F9D32FC8B33D81607D88B334FFB047B43EA2527F88E548CBA8D712A35348A294D8981C4156116B138A4637FA95CAB0AB5265C932C870C3896D70F6200E861FAA7E0D80EF25922A15C4915BD9F77BEF17264FF00462E6301CCFF005CA72050E12E205222AFBFE6A00A1CF0F0DC08DF79B629999FF519889EEBC061D734172BF9CA0827F6B710F5AD199E90D66E6928278664C42B87FE991C3F2B9E4EFCBFCC5E5A4FE8FEEC5721EED5A93509D44EA2EB47D5AA69C2C8DC781440980091B75077A2661F1E7B43382C4A91370EA2E1333BE2BE1E60354F2AF5111ABCD81042A7858D8003D6AFF6DC98BFF21F673F678D2602F24ECFD8AB7EDC750ED4BAB00A2784F76EA488277023998DF146CC3B5DDACED3F12B139DCF4A0542424A59E8CE0B9D2A5C44163F3C561DBB952ABA851F1B1DCFF116AE5E9A1C95A14FA7322CA72E69B84A5272EA275691C80716CF17BE7CE462BD88CBB34C414AB119A6216D60264C079D38ABA73110ABED16281A2967672487F115E9AC6E7EBF50BDE27D6CB68FE8EE5965B007A36123A7481B63323033258527F50B98E0385F128EBAA892DAB0FA0AB39DDA0C58F99D55BDDC78339161EEAD8A756E2CF7F993A49DDB8584CF9C1F2DC6D63118789CB4104AA5850ABD03DBF9F462F4664BED062839F9C93677FF003E7FE5400C34900B21C0B175973681209124F2F5E584E6A8E0182240505120808725B5766A79EE7409CAC7CEC7179814CD406BAEE696B59ACF4846E54D2B5E215694C4FF002FBA1FF4F144F51B448E5B61CCAC589A901182295D3E600D6B701836FF00430B842D475009342C6A3504D6B7BBD9C98E59D4540D85875B48200E05752378006C236F96D892460B133EA1250EF46DC3B37BD28CEEEA561C29B8AFE94A917DB97AC3755EA8609FE49092072DB6371CF7F31E98929393A830981FA8DFE81BD29A43D978246ACC4588E953A7A0F188F556A171EE1529E8093065439F493BEC2D6EBCF0B4EC327049F96495BDD8174B741FC36B4108E2B0E89600410A05C11F4A9FCED7A437AF3C8559D4C1DA143F1EB6F31CFCF59730AC809C32EC78810AF070C1EE7EED0CD329CF090E6E77615A57E9FC423775129023BC0799F15C419117F873DAD8949382135819079BA49BBF27F5E51212F0C9201E163D4DBCD872A747844BD50A124AD244990543CB789BF3E57EB87E32394B002A5027FF00450BECCDEA21FCBC1A76FE1F4ABEA39F852139D565327BC03D543AF9903CB95FE1855191CB402112B843D404F2E87AF4F386B8C906511C20D5F9F9381F8DE342F562C890E0F14FF5A7DFBFBA3CBDD8DCE5069C29A0E458DF952BCB4F38E75A07CE3EC6BCAA7F10997AA564FF00C498B18526DCFD0EF8426E533459246C5B6F277A73BD1E3624F0B849AD8ECDCAAEFCBCE12B9A95524F1DCFFA87C7F7F3C31565D8A07F693CB86F7A0A13B59DF94612166BA6B46F3A16FE232A5D46A5F79C6A1023723DDCFDD387584CBB12A727880D4116A9D1BCBADE1D61D6438343BB86D7D3EFE718D467920CA811BC7145E27E516E9D231248C04C961CA4977DF6F06B373A73858CD27FCFE07F88C292BD355DECAD29E1893C5BF900489F5BE362860077640DAA5EDB8FAC26A9AA49AA29CCFB6A59C470FAD2A0A097048DEE0907DC64DF7B5FCF18135083594E2CC53AF3A6BE1AC6AA9E4D58FD7A685CB5FA436BCF30DB0EAAA1D2536F009F1F4FB33B72B4F2C2F2A782A4944BE0BB909F2D3CDFC01895CB72C939A85F7C4258382A67A3B8140C69A42043F963ECCADC2DA018EEC0599336F2F7EC3CF096372D9D8E6505148AF11B167D6A36DBC75847199248C32D4652D2003466A51BC5EFBF8D23625C6A9174CFD2BA685F492BA2524921E832B4A84C7900B917F8B34E130F854AE5CC94261218A88B3B8A52FCE15CB7133B07352CA20021AA6D5D3F3E24D44417B70EC334B7B50690A9A5CC2829F2ED7795D3B8BA0AA6DB4F15529292AF1A9B084494A07DB260911E2DA3E4E3B1BD9F9885C89D31380E225402947B872080C0BA828DB6B5ADDAFB359F70A90A54C09581A970C4070C4800E869B697F9D5ED2F416A2ECD35766BA475150BD4B59963EA6C294DC36EA3895DDA9B5A5210B1C204F0931378B63D07D83EDACBCDC1913480A40002890EA70EF50E3CCF2ABC75BC1E324E2A54B988980F183C4970599C56A5AA79024F9D7DC6A98813D20CFC2671D6C294A4F184929677D199F6DA1FA51C5FB520F808C16E2936B03CC117F81FDFE0D978E9083C2A5805D807D75E7E958C29007EE4B7A75B461DF2FCBE18593392B0E9623707F88C25295164873B545FAC721E5733EFB7DD184E62CAC809E8C2BB6BF56E861712BBB0EB0C0DAA6EDD6BE0F0A5B7AE20F3369DFDE479EDCEDD708A8197520872F7A93CAB0DA601707D2FCFFCE90B98A92926F04C11703CFF000E9EFC69DE23FE43667E7B7AEFE71173504A8EDCDEB4E7E14F03611EEB687EDA28B56E4B4B5F415A52AE04F1D1A5E217C560411C4166E3A7DF38E6399F626461D6102527814FC2B0078B860C29A8ADE3CD998767A74BE2480525248A0B9AEA39EB56D5EB178E49AE334453F7F4CFA815892D38BEF0A78605FBCBDFC85CEE76C51332ECD2A51504A4109B70A5B5DC5C575761B55AAD3B0B8CC3AC8429418B0BD0EB7A1058D37DE1F59ED3F380A087E9289F44C12ED2D2B93E678DB50DAFCFD0F2A8E27239D5265CE26E005AF437007260CDD6C61C49C46310A1C530BD1BFC3FDC0BD4439AF5CE555D4CBA5CD34F64F5497C4718A2A26C343FAA5419FEA9EBBD84E18AF21C793DE495CE90031502A5176EA6940FF589019B62A5283CE551810ED723622BCFCF522B5CDFB3AF67DD66EAF2FCEFB396332AFAC2502A292A1C6C256BB02453A20415036FF66188CEB38C8D4923325CB9693F32141F880E64D2F423AD6AF7CC8BB5BDC00264D2486A9558EB63B8E756E515767DF44BE94D4D5943A8B24CC93A634DBEB53D9865EB4AAA14EB44828405B8E25C4102D298266F84317F16D6B0642E712A0024FCE471102DF9DDF5BC5D95F1144891FEDCE1C481FEDA8A8324EB427E606DCAFA477C7D9F7D9C7B1BF67AA34A342D0D3D5679C094D4D6B85456E38911C443E55B5C0124016C53B1B9B6233E0A016B9724BFCC16544BF315BF372F1C73B5BDB4C4666B9AB99882B5ADC10080070B8700161A3B00FD62F7ADA8AFCDEA1E79E7128503FF00080084A06C0003853B03748F9E236528E440AE72FBD44DB155C80DA924F5276E42397CACC66CC5CCF9C92EE43DEFABFF001D2C18EA1BA868C90EAD5B7F2DB52A40B72067D66230EE5769702A2C6580FF00F73B3F40C352CC35F14CAD255C4B40E2B82456A6FAB730C2B10ECEF2DCD336EE9BA1CADFAB7D1C501495D3DD5612A5800CF9EDEEC4CE03B5584C3AD5C012C59EAF41767E5CBC21533CB049FDA6800AFD056FFCC41ABFB1BED433849527206E8A9553FCE56614EB21276250A58579C73C5830FF001272BC3AC209698080592ABEB5667DB9962F184B03C4940079102D52C34F0D1A22CE7B251CFDC0E6A4D7BFE1F553994308CB855F7FC5F693C6D984949B1379C2B9976FF173C4B396E0063925F8D426897DDD9A8C1DF6687285A6682274DE103F682C767D3F1B58564D967B21F65D4252333CE7FC431F689A77A9B8E05F63691CBFDB11E9EDC768387E4C1AF0AA028A13DF84F47FA862CCCD192890141960B37F6B7D77A0F1B356279967B3CF6099382468C4BCEA88870D53EAE229333C278A2FE93E7B618E23B5FDAF517FF599D2907FB5DEFA163A57CB7AC6FDEA01749D2EE5B67FADFADDE27796697D21A7CA7FC35A6A8A9383ECF1B0D3A44411FF0015B331FBB620330ED06758E97C189CC31334310E16B49AEC42BAD346A88DD38B9A97216435AA4937FF0015E512919B57BC022B6928D086ACC062969D98B00412D213C5B5A648F2C43E0654C26628AE74C2B238B8E6AD5FFF00B288D74617BC4763731C59002669D59A877D4F3ABF23B4267EAAA9D1C2DA96849D82145239DBC307E189232491F384B06350090FFE79C468C6E3CFFF009AB67BBBFBAFF986E4D23EEF117DC70C1044B8A264CF99318CA70A14C18005F4034B53D4185C6231441798A7A52A75D9EAFE8D7D2368A669BFB4A048DA483B6F2663F59C6DFA142A9C219EE40E8297D2947A987099939BF7AAD73CC31D7E8083AE91B05752D28225002F918E533B9EBE62E37185E4E02683FED2481AD2DA6D62C0DF43768590954C204C2549A9AD3A5074D61A6AF39A61242D23EEF94FE53CBA494BCBF1258976D86DE36A5AFE26B0A77097A02C3D3C798A5B41D6182AF5353D3000BA0C93CFA6D173E5D6D6DF129272A5A8025245AADF7EBF4D69019090C421C7476D39EAE59BC223957ABA94FF00E6206F7B731F0E5BCF3DF9E2564E50B15009A6C69E8E29F7B464E1A5A88F9051E8CFF5B7DE9ADE3D57AD92D001B766667C5C899037807DF07D7793939089A1D480A6FF00B45DEA6CFF00CF9C2B2E44A03E54B3D28E35F23E1F5AC46EAF5D1332E024F981703EF9FDDF1292BB3A84B34B48662070F2E9F4F387224814E1B5BC798F1FF26AC4FEB8248F1C8BDA76EB3064CDA67DE30FD1912524809BEC9D69F9F43194A149B06ABDC7E61ADED6E20F8EFCFC5CFDDCC7C2C230F5191BB30B96B379BD6AFE1195778BABD0FDB772D7B6BE02AC559AD9C514F0AC889FEA22F3B7EE63ADF0FE4E412CF1712126C47187FAFBA1D2329413FBEBBD6FB6F0D8E6B47044B86C6F0A3CE23F73D7D0BD4E4328544B40D43247E2AFA53F30B2252410421B9D2BB52F5D77844EEB4709003863AF11D86DB9F8F9DFD554E4B2D364D79240FB31F77D1DA2593FDB4F23EE9AC37AF59AC190B3D278A40F7491BEDBFBF7C2C32996DFB6ECE784D5B4B034A6DD2B0E901496615AD684DB66F7531A15AB7BDB29DDB621506FEA47EF95F1B272C4A5DD001E97F21E479C273A5098C0A5C8D4E9C98B7D630FF13A3FE72BFEB1F9E37FF4E47FC47FE3FC421FA51FF11E9FFF0014649D581BFB2E154EF2A063E78D55964B3FD96D923EE3DFD33FA61B0B35403B6E746A465FE3157F7FCC634FF4A957EEEBBF0A7F119FD3E8C1B664FE63735AA43C4953844742448F71F9FBB1B0CAD228897E694DB5D3A437992BBB366E8CC3DF5610B11A89B3092E18F27279CF33F0F3C68BCB4D7FDB05A96B1E8072D0C26505AD4F03E90A46A244801C2044471013D363CBC81DEFBE1BAF2A0C78A58DEC34BB346BC25DDAF7706B4FA78690BD8D428FF9A4C46EA3B73B49F2F293E986D332A4176403425B8454F887376D3EF0265077E1A1E8FCEF57A5DE168CF1A72C482636DC1F98D8FE7E8DCE5A949FD95BD874B1A7807D79C6C999364D251297BB38A3FF0027FC085CC668C9220A2368205BCF632447ECEC9AB06A0EC2FB69B3D7ED5D1A144AE6ADF896FE0F777A9A9AEF7FA2A7ABA99D085B8A03BBFB306DE2E824903AED88CC5617852410EE0D5BE85B96AF6B6B0EE5CA4B8243AA846AED434D9ECF53E149365999E694291539324A82E0385253C410601B9BC44FAF5EB4DCC6429414921D2F620B7277D798B51A25254D9929B814436D4F67AC7567DB77B00A5ED4BB305EB6D394AD3BABF4BB2E5454B4C3294BCF0755FCC2E148057C2DA55048558408B636ECD664BCB3324238FBA4A96912D4E594010E341C83FE5BAB762731981610B52969510169528B125D88B90C6B71E0F1F3DEDF7C9CD169A9416EA90E3AD34D2814F0AA9CA90F02081B7091E21D0EF8F67E419B4BC5E5492A292A54A0D624D00249A55C53CAC63BCE1132C278480A5000AAA0B712411A36BCF4A4697EA454D5BF503C285C252208129B1811D762371BEC3140CD6562958CE296A57095D6A433B5AB6B0D00E909E290002430B0FBFBF5A911C71A7AFC8E2D7830B97853C6493C22BAD479577357A437C2F0AA635C3816DCD79D6B5D7AC1C49EBFBFDFC79616CAF1697982656B47D2FEB41B810F33340084100301BF2DBAD86BAEF0718DC18F49B7FB7AFC70E715884ADF84B372BD6CF67A723CE2118867DB6BF383BCB8857A933CB6DF104A2B33388289ADF66E4F50631C2083405AE453F98BEF4CEBFCDF43E794F9965D50E9485A78A88295DDF0D81BCF01B5F613E9389CCCA4CD4A54264B2DCDE9A333756AF955AB79A64B214E90122E5D87873771AB063A47A3FD9AF6B949AC680D577E18AC69B6BEB6C71EC4A61302449317E104C11D714FC523052810B2902A5891426A5C92FAB5FA54C72ACE32B420AFE502EC58E976D2A03FF88B92975032FF000B3DF1EF098060CA89DAD33F0B9C432E6E5C16489B24DE84A74A015D7F8AD6B41C609525441205D9B715BD06DADCD9EF6EE83ECAB5B768350EB793E5B50FE54D29BFE2754B96830DAC8285202C02E710E48E5638E73DBAED8651934B95204C947133828042784BF0817297E17D373D5A2BB8D5A964996E529BDEFCB566D0135AB011DD2D15D90E98ECEDB64D251AB34CE4F0F1B6F36E0097089238DD053B93B1B45BCBCFD9BE69333C33A825243F090A492A0C492CF4E76356880C4E65370CC10B50A907ABEA4034FCEB511720D1FA973CA74BB9850A68287861084D6B6070931F612B498883613BE3974EC1E18E294938898A585314894B22EFFBAD4E6CEDE4C27768319C247129B60AA6D6F13E8C740859ECF74CE5CE17559BFD55D0656D80B724F31C5C5CAF7DB7C59F058F9F94200448336591FB94B09B5CD7DF48623113712A75AD4E6ACE6BB8B6FCEBBC3A21DD1F9780DAB2B39D2C1FF8A2A1CA5EEE01B9008E3E2F88F4C6313FABED08025E23BA425DD213C44BE875A31E5E4D0E01EE482C41362E4F56A1F62140D434ACC8CAF276E8F7E12B58A883E7C6923E0394E3597D9D9B29242E6289D4915BB3D01F7A1BC67BF528D15E0DCF701FCA13BFA8733AEF0D656B14FC00865A6E89A05C9B1054840222DB98F538DD1912A5926592CAFDC5CB6F625FC9A3638936770391FB8A35A181F4E60F2A4D33CA6C99EF9352A02277EEC1F7F4F33857FD3141642940A8EBC21D853C8F5DA35EFD4C3E7A3D8D6DD6ADA7F9AEC66899701EF2A94542E5050A3C3D07113B5AE7975C4A6193370547252451AD4B9676A1D7913A43895378C92E5F4FA1DA9A7DAA615A72DA350BBC1405B927DD333F9728C3BFD54D5DB88B9A72A59890799858924B98E54DD2D00965C4A4B932080EC91B1B931FEF8D485CF0CA4A8105810E2EDA5AB5AF2B883894050B35BDDFD61AEA734A76E4ADD4C83C92904F98E1FBA2270A0C02D5429241D473B56CFADBC633C4ADFE90CEE6754A248524C03BAA260F9FA8DEDD2C2F2585CB5612921041D0B3D4F2A57F31812C4CA6A2D6D8D1CE90CF55AB69A9F9A401207881E66768998B7A5BAE256564EB99520925BFB4DFEBCBEB1B230FC26A1F6A8007853CEBBED11BABD74DABFE1B89404CCC280BF2267EFF00C0E2464E44416E124DC534D74BF91D21D4BC3D89A1602C5C9F7B6F4D622398F682B6C2A1D49DFF00AC1BF9F8BE44FC70F9390AD80EECBF215BF4AFD0E94687430C4A696D5F9D59BEA2B10DCC3B45714524BC00122EA03F1BEDD207BF161CB7B3A560BCB714041B8D057EBF6A8877230E5AC69A569EF96BB0BC56B3B4274CFF003C1B5C718B8E5CC1D8FBF13F2FB3290C020B3EC69C85EBE7BD9A1D7E9940174D2847A3B1BDFCF61AC6730D74EBDC20BC07093B2D27AD890445C72B5AC31212BB38D5087DC375D5B5BF846BFA6511FB5B4A9B79D2CFE0F117ABD66F4121E1EE5811B473EBF2F762491D9DA0FF006DCEB415BB3D3DED5739FD312E025FA9BBB8E9D3A8A9BC323FADD4D59C701076F18E80CEFE5BF2B7962570BD9F24370330B30F64756E75610A230AA0FF00280D7D19ED5F77861ABD7727C2E5AF238A47CFA7CBA8C49272229BA7A52956AF8B74610A8C3916FB7E7F9E70D0AD7624CAEFE6A03E127FDB9E1C232276250EDA37E038AD7EF19EE0A86A474B5C6FD6F081ED729BC3969DB8A62FCEE7F2DBD70F139250108236A7F07EB1A8C31146D5EAD7D45C53EBB504379D6E924852F6E7C5E7D247C7D30EA5E48E920A59D8BB6CDEBE5AB88DFB824BB12CECCDAF8EC368D0AD689932A9F5503F8FE1F0C384E4D5B59DD9F4BE83EBE70E65618809171B31153CCF975E621139AD1004057583C561F3F7EDD05A7191947201D9C37A5479D7C61CA70E77E800000DFEDAEB7842E6B34816548DCC1FD7CB01CA3E604A75676F1760FB9A9A51E9ABC9720A52294D69E22AEFCE91A0EAB2F9F02E387FD43F3B45EF323A8C64E535A203176A7D69AB56FB18D2761EE5B85EF47D2F7F1F516783FC48EFFCCFFF00DBFF00DF8C7FA47FD89F2FE21B771FF7FF00EDFF00EA8DECEAA2D1571B9BC478F8BE65780E51FF006A4780FBA4C67F4E7424F8375DF979F9EFFF001827FE60F889F778BEF23DF8C7FA3F21FF008A7D7E5FA03E107E9D85490741BFA46D6F54A9E0781C1E189850E768B98FDEF8C8CA7874A3DC8481E845FCFEC9AB0E4E8EDCF7E9E1710B1BD46E5817418F303EE36F79DB91C6ABCB05004B3BBB5AAFBDEE1CEA4D18C2470E496143AEDE2FBC2D6B50B8AB9581111E2927E6267DDCF0D26654521F87992C3EAC2DCDEF194E18B12407D28C79BB17FAC3A53E7EB1B391CCDC193D37F38B461A9CA8104B709DCA5F9D01AB6B5D89D2038751B06F33E9EFF0FD459E2D6482E4111CC5847AF4F8729B623F17960FEDB1D5ADBF43EADB420BC3312141C9361F663AEBD4C3EB19CAC443827D45EF1BCD8DFDF798C33565E59CA496A0A5FEBB3D7D4C604B22C9DB63B0F2B44932BCC52FAF8AA163BA6E244EF3B6D24C6E0EFB79E2171D97F08F950E482CCFE24BD36D3CEF0B252DB82E1CED5E741E9BD22CFC8335A8A358718521748A0016E526124729BEE79F3988C5231F8104A93C3BDC5413A1F1FADE1CB52F6DEE7A7DE2DCD26ACB975754BCC1097B2ACD695FA6AEA75A789BFE732B65B24104594B9102058CE39BF6851330CB42652CCA58585058151C2A04B6B5142CD422F16FECC6293879C1CB391AEBD1EBCFCAF48F9CEF6DCEC453D8FF006BB9B53E5AD1672ECD2A955793A82785B525D1F58A80826CAB2C8DE4131CA31E81F87DDA6188C261E5A965CA02189B94809FA82DA72B3FA03B3D8BEF25D54486A9357A5013A0157D7C0C74D2ABBB052EB3096DCE5FEA480164CDEEA9FC31DA6465C8C4A5331828DC1AD1EBE66C7A686B162C47CE9048A1BD7A75F01F50212F193CC7CBF76C2799A46164100B508352C4D19EEF6FB5A1BE192CB1460487B59EB7B35FC290059E4418F43E938AB60712A4AD556726AFF4EBE3614A43DC6A3890973A58E9CBCFEC39C1C6AEBF218915CD2A04855DA94FC6DA188CEE81BD4E94F6F1A9D5AAC449F203FDFE7F942492AE249507BDADB7F93A36CD1B265814BFA790DDF6FCC7A3BA43D897DA2F5C86BEA1D9DBACD2B9C3158FD630D2824C1E3EEDE0950B72DEF1CF109DACF8C391484CC42E6A105415C251F3B535E10DEEBABF38C7769704B92172B12998B1747ED3714E22DAD4D6B66B4771FB2EFA323B56CA2A9399EA1D78747210A6D6AA3144CD726A4020A9254DAE121039911D31E74CF7E22FEBE6CC565B8A54C492A74F094D9C8A96176F66B4ACEBB4B97CCC32E5CDC083359A54D137F6124B9617A373DCC7A1DA23D973B3BC89348F6A0CF3FC499951F0127EAEED2071698B424C47879881C81C732C7F6AB39985412A9A82EAA85135362C08D34F0D8C714CD7321C4A505F0D4B03B6D4D816F2B477032AD5941A7B2EA6CA74F640CE554F4E8E053A82859AA000092AF00360247112761E58A2E2E566799E2A6623173A64D248E10AE2F92F6AF47635110F85C72269520AC5ADBBD1BC3D2B4763086BF546655AA2A4B08926CA0DA02B9DE4241B75B5E7CC99BCBF0F2E401DF715AAEAB378FF0098658C099AA50490E2E68C3A6CCC7576A924C372179A66055F5879E42531C0038B00850B82124585BACFBC1C4DA27E0A50FF006D12B88B392949B5AAA07DEA62115825153BBD4B1A7A6C6DA7D6323953847896A51B9924998247351FD7717C41E6D2D58B1FED6D460D76DB5D6C2BD0C4AE1308997C2A533E808E76A6AFBC6D6B23EF02C13B478BD7900227F0C23914B9B9671778E78F7D2A4B6B776F3AE85C6324215C212CEC4B0E5CFF000DF58548C992D7DA337DCCCFEE3F199C58558EE2B067E8C3ABB3F85B48622411CB7D7EA60759669C02549E7731F2263AC1D87C30267297706BCD81FB7E203294081777DBF3FC6F081DCC1A6C11C4205809B5A7CE3A5BF495912B8FFB59DF57D7AFE2F18187481F352DA93D69E7E9CD9ADFCF295B1E25A0127910368F537BF3BE1E4AC04C9A3E54BA74E4EF57E5B887985C3BD402DA1AD6FCED5FA54C45331D494C0C77C241BC28DF9DB90FDDC9DA4E464AB5172953D1836BCF7A57E9A43A1865392E4826819BEE0EBB9FB443AB75AB742210F7171CCCAC9022D6931E640E9EB89CC3F678AC0FF6D8EED7DF4B8F2DAD1B0C22B899ED5B73D75B369BF2787E65DA1A47178C738B83CBF5E7CE713B85ECD129629A1E5BB9ABF41F5AD2344E14872493A746D9CF336A6C0C40733ED0B6876082AD97122D0441E5F3E66F89AC07674A685048E8F6DC6DD2876A43BC361CB9E77A5697F434A75BC436BBB41324F79BFF00ACDCFBC4C723FB8B0E1FB3A354576E1EA3969F4EACF93874BD4D4B39AE834AF95222959AE43F056F149127ED913B8037F5BFBF13123B3547EEE81B427E809B914B386B343A4618306147AD1CD6C6BE0DE43788CD5EB068C8EF8DFAAE6DCA6F6E7BDBE589797D9B4A98F7551CBD5ACFFE7A3A4E1EB56E5B9B6B5E7AC43B3AD58DAFBBEEDF20DEE167EE9E5E66D36C4FE5DD9FEE81FF006AA2AFC3F5035AEFD61E49C307B1D19C1D2EDEF4B86788B3BA9D2265E3046DC6ABCEE7AFC671369C981AF776D4A5CFBEBD44385E19EF47D83BD3607CBF8A36BBA8D0A36748893F6D573FF508FDDBAAE8C9D229DD9ADA9FC72D6BE71A7E9056A6AEC18DC7D5B7E669B35BFA844477AA02F3E3E7E4388EE3D371CF0E1395049AA6BA387E9B37DF5A46C30E052B7A50FF001573EA219AA73D42A25D3B1DD5CA36267F73877272C4A480C0A8DC331157DDBCCB42A891566BEB5A5DF586B5E78DFF00CC83CA144DBA993CFA6DF0C3D4E5A1D9491E403EBA9D3FC6F0B7E9B97BFF00CA10D4E7483C24382F3324C7DFF8CFBA30BA32D4D999ABA13E2CF18186219EA77615EB5D36B5F786B733947F79224CF888FCE3E1BFBB0E9397A00140DB307ADDB9529BBF8C67F4C1852BC8D3EB60DB8BF846AFE309360BDA6FC479FC3E736E470A0C1A122890185C00F7E46329C355A95DDBEA490FF583F8B0BFF337FF0054C0EB73BFEE6241D7F4C904B2789DDE81EBEFA7285D3866360DE05BA0AFDFC213D466893C1FCC169B4813F33EE3B0DA231A8C3006A900B9B81AF9FBD03C3A120B8AB0D680136D39EF6E468C98E66836E3DF9123EF07F0F86F8C0C280A761D7DFE2B0E8480C38BC472D371EF5B473FC5120D9C8DB65728F51CFC87BED07E94034008E601FC74A8FA97D6761C10E030D8D7EBEDDB678E7F8B27FE67CCFF00DF83F4C3FE29FF00C53F986DFA73B0F21F98066C9FF99F3FCD6707E987FC53FF008A7F30770761E43F31BD19BA37E31E627EFF0017DD1F2C1FA61FF14FFE29FCC67B826EDE207E617339B213C5E33B8D951F8FE76B4EF8467614355218DC507466277E909F72C482068C43535B3BD5F4E421623371FF003150623C64FAF3133F39E9BB7386410FC201EB50D62E4B1EA5CFD8EE52DABEFF00C3FE617359C246EE131FEA8F4B4C7EF6EAD2661527FF004BF5BF466F00DE91A1C3A740FCEC7CADEF943A339CA0442C836985DBCB63EBCC01E47082F0A91D342C7C6FCEFEB78CA64243D1BC4926FB1FE6D7879A6CE923FF0030F23F68F4E7F9FC45CE194EC185E8F76205B9B3F98B6D0DE6C904BA412750697A59FF00C33BC49A873A4C0FE64F985493F80F39F29C355E5CC91476D19B6BEECED61630D55254E5A9B8D9AFBDF661E1131CB73D6D2140B84484DC93FB267ACF3B5B10F8BCB8A83F0D3E6E6E7714A536D61352787C7935A2C1D399FA03E805C24150B719EA3913D6D7EBCE6714BCC72E67213BF42EEDA7F986C0BBF36B16A0FB7D1B678ECEE8ECC935D4EF3282081DD13D4410641991307EF3B938E37DB1CB140899C25C3F85BCFDED0E30D8BFD3E225B1A715DCDF57DC97AB52F7B8E9CFD269D90AB53F64592F68F48D71BBA51BA82FB884CAC8A9752D278D43C4AB279F981CA63FB199D4CC2E3BB92AE14A16800380F4D282C2FCE3BE763F302B44B4B965D0DB7F16F2FA57E759550EBA029C04252A5049DBEC98363CC4796DEB8F6BF65F3046272F96A7015C1524BE9F7FBDDE3AC292424275A1EA0D7EE235973CA790BFAFCBEEC466758B4CC5292142B46BEC7714F5EB1ACAA2D3617FA1FAC6C43A6FBF2E7B7EA7D047DF5D912560B83424F838D74A335372D0EE727BD606840A86F2F7EB1B0B806E23D4E2465A295DEB7F2F2B9FA86847B8AD154E8E7EDF7FC62AAF7996D4CB090A2F885180600E932458F2BE375A8A0505073DCFA6BBBC6532120D4B87A7E49AFD0D23EE58D7D7B87F90F334A23FF2295968091784A12916E623D31F37578BC5A49054B501AACA97471FF27AFBE51F3CA5769715303AA6101EA6B5FE43ED5118703AA5A7EBD9D2CA567C08EE54A9F78988DA670B48C74C2A0F6342C03823C295B785A3188CDE74D4105448152E6ADF515F10FBC0E648A52C3D4AEF7A94C12A29E19D8EDF3369DEF89FC362659FFA92DC8D697A7DF5262A7986266CC25B88062E01D5DAA4330DAEDD21C9344BAA4210D27854CD9CB44CF4DB6F89B5BAECAC44A94B981494B2998961D0DBD2D5A44223193A4AD8053137A83D2DABDFA750BDACB5F6CDC098B4904DAF17E9B11E82F88E9DC331F8080EEE069D1F43EBCA27F098A54D62A0DB56FE9B3824C6F51553C7188045A0031B7404EC3783BF4D9A270D338832B6607D75F21CAEF1348E129D1C742EFF009FA51E95D2BAB49025503DD3D3CA3979DEC77C4B49904252407FBF99DFAF3D8319F8954BF9520921D9A8E487A300D7606D5D286123F9C374401EF078A6F206D1D7A5AE7E785958454D0C0356E2BAE9A68CDFC467033666214789241AFEE24BDC5F41D7CED114CC358776094B891C878927A81E5FBEB87587C996B3AB86A36A58F3BFA44909243D0BA7C5DDF9EDCA21B5BAD14EFF00E6A470837E310679DCEE3E78B061FB3EB2CE14E74626F66BBF9BF278DFF4E5DF57DFF9BB546819B6880E6FAD9D6F8887B69D9423AF22479FE63160C376616A1FB554D83D6DB7B1CDE35EE00AB7A1F5AFD6F15B66BDA0BE88870DE40F1F48E73CB9C1FBB16FC9FB30025416973472CEDE5A7869A562470522A6C69A0DFAD36143CEA220D98F685502DC7133FD53B6F10636F8FCB16CC3F6725A588439E9F5A55F95F6DA48E1C1B25AF63FCBFD36882669DA3383878DCDE784957BBD2D7FDC625A4644840712BA8B0D0FDF5BED77C7E98EC697DB96BB11107CCBB458E2FE77C553F79B7EE71268C9D9889543AB6DE1AF2A6F48C7E90E80B68000DF5310FA9ED0A7ED390449BAAC7A9131BF947C313383C8D731C22512433B06F56DCFD2978DD187E0366A790F7B539C45EB7B40041873CECAE77F506F61B7289C4EC9C8668209924071A52F7A57C0727DCBA9529D541C46CF6F01EFEAD11B7F5BAEA15097002264F1011D0EFF000F76DCE7B0D9404FEE4682E3A7D747EB630F112663064B02D522FABDB956CF6863ACD5CFC121D83FFAB6E53CEFCBF6226246552001C400A6DE27D9A6D7A391216CE433D4BEB40CF6036A18607F54BEB8974D898BF2EB24EDF893E78929796C9154241702A18EFA7E5FEF0F24A1449F9438B7A787AF367AC34BDA99C5132B248B595BCF94C7AEF85060D2094A6583762DFC35B975DA1C194B37413D4084ECEA0717C72E447FAC5FE26E6DF75BA6A708D6433BB8E1767DEDE756615A083BA57FC3D04277B3F59305C1CEFC5BF3F21B0EBE9B6105618B91C0430D8ED4ADFC1BD088C2A5A9AA8F4FB8722DF686D733D75572E584DA473262D3E5BFCF69DD18750154B73E61AD6E553585A5485100A505F723C47DBDD92AF3C5DBF99E9D4EDCBF630B265115B9DA94F7D75858E1A610CC5FD3F9F2109159D3A77583D25447E9E97C2F2E492C40A92761ABBFA54F846061542A5FC74E77E637E509579CB9BF797F5FD679F2FD70E44903FB69B381F7FABC6DDCA989AB3EDE9CE386B365A8A871DF7BA8FE07CF9DFF001467A120064B72B8D3D3A529CA364E1946A01AEC0F81B10357B46EFE28BFEF3EE3F9ABF0C35602C1A1C2308B001677DEFD1C68E2135466AB1C32B3B923C407A49323E1F9E08769C32C81C496E9AF3B8F6E7AA6FE2CBDF8CDBFD53F120C0BF909D873C10BCBC3B100A4DF5177F1A3539E83683F8B2CECB3F1302DCCCF3371CE647492359D86528D05A9AD3F3E3D2907F165FF0078FF00ABFF00BB0423FA49BEC472335593F6C7FD5FA9FBB0460E1660D3D3F98528CDDCFEF1E6388FC7D2FE57C118386982A416E9FCBF942E673654125520C589DB698E636DFDD717C379E3F69F0FAF2FBF5168495865F11A1AB3163CFF0093C86CF0B119B2AF0BE9FD463CB788C335817173A6FF00CFD7EBA9C24CAD1C8B50FA7F10A7F8BB96F1CF520FE67F7EFC345A5DCB3034F2B5A82BECC6BFA69C2C83E00FE217319C2C412AF7C9F4E5E5CA7A473C362826E0EFAF4B535F1F078C9C2AEFFF00ED3CBCB43E476877A7CE5C9BAAC77BDFDD049B4F2B7ADB1B499449F9833EFA5F57D79C379D87527FB5DF6A03B59FEBA59E251439D2ADE3B48983C85AF33D798FBB0E4C8960114A5AB42EDD29F73630C66495281052433871D7AD76FB44958CED61248724881F6A08F74EFD7732047945E2F0C1493C29A54E9E3CFF008D618CD9132AE9248A06FA790D6B6A9AC4D34E6A073BF44B877B99116E9CA47979EFCE9998606612AE14B8360C49D795296E8F11CA9337662FB0FF00034E76A563B63D98EAE0CD7B54CB5857D64A123C52045BC5D2C7A8EB7C735ED464EB99865CC54B628428B9005FC2AD66FA35232795C99E8F9480541B4F57D999E96E663B0DDB9E9A4EB5F67FED074C5434568FE18D5435C49903810BA8F09DFF00A44C1B9F5C79C50A548CEE4F092026629C02CEC59E9F6DF68EE7D859A4F03BDD2D6A5B7A59B63A74F8FECF1B6E92B2AB2F4A4257499857B4A064484D4B891D62C2D6BDBD4FB1BB15989465C80B53012C30259E95E6DCFC6D1DE904AC7117AA535028C05E9E3F9864539E7246DF1EB1E5CF0F67CC99889C7841238B9B33F900DB42A94D416A7E1E3969DBA813111D7F7E677E589944B972E5A12B676ABFBE6478187A9040480CFAF37FBE9D2371713BF14FC6F6F3F2C39425240E1200D83726D7A46EA42920929206BEF58C1EAB4D35338F012B4A9BE131600A84DE236EBD461963D69952D550686A1AB606F570ED6E51893C33961093BFA036F7D23EEB90C0E9E222361023FDBDD8F9E53E52438291434F478F99099412E05069ABFAD2FF00C0A4284B29FEA48F7807ADBCA30C912439A3541D3C4BDC68E7CA3612D9FE6356A36CDF8F7AB830F25BB13007B848F3BF97BEC39E25654A25258508A5DD9EBE1CFD8D0E1D157653DCB6E051A91B1598B6CA499049E9E198DAFE9D77B5FA6C704A9C40A80EEF5BD49F0D3F986D3B0729D252800005C52BE766F76863ACD46D37BAC022CABF4DAF20CF2DB79C3B93922D740E75A7A786BD7A88D512C22890C34034AE9A9E9EC45ABF59B54E2CA0419B1503100DF63F77E789AC276754BB8552CE2D466F7AC3C94859B17D19B5A52B51E9CA2039A6BE80A01404743EBB7E6019BF2C5830BD962B22A5AAC081F6D7973BC39124283901BC86EC6C3F07AC40B32D78E389480E9313693FB8F58817C4EE1BB2490589D469CC9F1A7BA0791C1E193A21B7D34715A7DD8B96315F66DAE570A3C6AFFA8DA37DE48823F41CAC983EC8CB05249AB0D00DAEF4D7979C48270E4B101B4DEFE3AF28AEF36ED01C6403C6A13360A304027A411E738B7607B2B289B03C2DA313ED8FE09683F4F5B5CD00FA50FDA95A33C57D99768CE92A951833BA89DC1DEF37F3F741C5AF0BD974060C2806839834D5ABE02D19FD393702DB0D34707C07E2209996BF7564788C09B137E80EDCAFB6E6313F87ECECB940B84D59E8DBD0DEC5ABD76687125A43850BEE1FD3CAA4FDE2215BAF1EE4AEBBA8F4F5B49DFD791C49C9C964B03AD68431246F7A07BFD21E09C820820176D486D6ACE2B7BC43F30D542BF87896416E600279FBF9F4DBA4624E564D2D92C052E4B5791F1B56C3785D130711A38A11A38A6BEFD2B17AACE512789C37064F118206DFEDC879E24E564928814018D28FA07A73D6DE10E51310481C2C7CF73B1F3FE222F9866C1C4A421C208E52473BF3DE2779F4DF161CBB05270E829094EF6150FE22C346FC6B36499EB484D00B902F50DB1BEBE2F0C2FE647FE6CEDCFDDD6D73CFEEDA5D12E4B5427A33B7B1E1607487D85C190A0E9E56BEFEEEFE24A2566409252E12044413F70EBE9CA63094D9485060863FF2A02C1DB6E94360444F49C1800028046C5A8DCDB7A8B38A184CE660019E33111F68CFDFBF958FA02488E99809ABAA490C6A03DEDB6C5F5D6BBEF3A42024FCB5FF003AF2DFC7486D7F304DA1CE479F49E9FEF6E587B80C2CC90E26329CEAFBFF0022FE15B6F8292921C867715EA77AE9BFDE1B575C913E3B936379FBFA7C312BDDCBD852FF00CC487E9D1B0F2FE634FD787FCC3F13FF007633C12CD78475FE633DC27D83F984CE55CC8EF0DA48B9BFFEE1F2B7974C704BD93B697FCC63F4E8D8797F309555A0117F9917BD8DFCB0D67A521D9205054372F1B75BEC214972057852FD037D2B1A1CAE17857A7895CFEEF4C3585FF4B47E1A1D77BDFE6EB094D7264CAEFCFC4BC107E99A8CDCBDAA38FAF23FBFFF0072F1B71AB7F41F88C1C283700F5FFF00EA37355C91C442F988B9BC0EA48B0E64CEDCF094D2FC3B87F173EF4AD6B0F30F85490C523C869E6F4DE87CE395E62019E23FF58B7BFF000184A1D7E8D3B0F249FAFF008848BAE0621479F318236FD2816007BFFD5187D70FF71FFA8608CFE9B97BFF00CA33456024CA80FF00D4411849603D2F57F48C190137D793FDCC67F5B1FF00311F2C690774397FE23F307D707FCC46083BA4F2FF00C4473F5DFF00F553F1FD7041DD0E5FF88FCC29A7AE09E225C076D898F7C1C27334F18061D2AAB024720295F0BFF887046629DF8933B1BABEE9FBF09D3DEDAC67F4C9FF0088B6C9A7F3CC79C2D6B304413C493B4C927E026E45F6F8E352949B814BFF003FCC63F4A9FF008BF4F7F585A9AF4C8F1EF72388FE7FBE538C7026FBB6BEEFFE231FA245F847D835986C75BBF285CCE60949FB569E4ABDA76B8993EB68C359E0241005DABF51B7BDDA23F17252904049200AEA6FF6F7762FD4D99A2C02F94183FAF59F7FB8E1A4462F0E922CEF534F1EA6FD6DBD5F18CD5278471C7FF5449B4F3F9DA2E3D304021BD7686D330E0B70D80A8A1DF707CB9C4CF29CD5B8038C8E5B91173E73720F5C2664CB533A438D587E3E90D558740BA4575DFDEACCF174681D52AA1CD58097152A75B54955E10A06C6E248FBF9099ACF68B29973F053D6123E596B7617749FA3B57D68D5CCD70E04D96426AEEE1A80355AA2BE7C8DE3D7BCAEBDAD5BD87E78F00852AAF24AA055024F734CE8B98F2B836BDF1E16CD248C276AE4B025299EB013A1E25746714BD599A3A576397C0123F69F958B1D3C2FBF9EB4F8CFED532F465FAEF523688FFF0036AE040B01154EF2B44DAD138F4D64B30C9C2618874F1212487E40E8D4D5CD01DC18EFD964E3330F2C7EE00539B8721F7A1D686DA45798E83964C9665924076BD34A1BD47D5A2591281E9BECD6DB4BB6AC6353AA03867CFF000BFA61863713F3B0535695E6E050F869D61DA249E20402C2EE59C737D4F946BE31FDC46FD7F77C2B2316521B89F4676E4ECE3E97F087989522649EED0C54DBD453AF4673D19A1592D5552BB4AE186D650A52F6E1E054C5C03E2888F7DE711F99E238A54C7535CB3FE4F98E9CE2264489D267A2784964F13ED5BE8D4BBB7231F79E8692483607CFA4F33D3A7E78F0CCE0A2753F8D1879FB78F9A610E03D0D5F57DB5D2372DB40493C42C0F3F96E709A10789238581D5B6B7B3F78381B9F2B79D7488ED6D4A5A053C6011100902237E63F600C4D61E4BF0B8B81A5FC2DADBAF283839BBEBB7AD5ED10FCD3352DA13C2B07ED490409BF3BC413187C65AA531425478B46D34F3F37F209AE5DABBD5AD6E715467FA8D6DF170B8044ECA1CE3A1DA62C7AF95A7300A98E01944BB35DBD0780A8F18C26497B39A69E3D4DEDE622A9CDB58AD9FB6B242A62E6DC26F6E9B7BFC8E2FD96E144DE10A9646EA20FD00A5A9FE21DCB96524937D2C7D2B5EB4E45A2BBCDB5B92170B55CC889B83D36E5E5B46DCAEF80C9E5A824DA81DC74A0F1FF0030EC218543BDCE835EB53EE910E7F5B59414B226D04EFBCFC62F137C4D0C914E381015CECCC76A3DDEF7D054449E0D245746D859B969A575F288566DAD93713E97B7BED7F48E773890C364D3D0CE87E82BA519BCC5A8D41121107ABD522AAE49841E6779DA2667CBF238B0E172F9E900041F6E3F3AFD60F7D07B6888661A8132A957B819F5E401F77E589FC3E167243841A5A8CE5E9706E7D7AD4888D4E7685127909DCFDF079FC2313586C0CC9C3E6490ED52DF4BD7931AC67F4C673102A7F8E63C3F9788B57E70832479F1413F7C4DF78F98C4ACAC9144BF16C76B3685BC7A54C2C8CB961EE096621CED56356BD6DADE22F559B990524A4C192491F1DFCF68E9E92B2325208F999E868FCADCE9CF5687A9CBE651817D6FE0DE218FD1AF1FA8CE1641959581EA2F71CBD3E3CF0FE5E4CAE22126946FAFAECDD6B48772F004DD241E86B7DFECC7AEACCEE6AB51FB479D898B5FAF9C6FD23AE1C8C9E63808AEEC6A0BEB5FE3986896C260121412450B5C1B53FCFA8BC36BF992C09E226677F48E7CBF0BCEE4AA9CA2626A2B6DCEED4A9E9FE1A7A4E050006482C5C161AE97D35AF84256B3155F8D5BCC4F9CC70F5E5B5BA61C270252C5436FF17E56BEB1209C2B248E17DC8D2874171E2E7C2BC3B5CE411260FAF59DCF2FDC61CA30E84B3801AF41CAB47DBCFCE23E7E1493661BFB1B37896A351B2A6BD5E0B9B024816B1F78F2DA2FE77C36C5A65A47CA41248DBC79DB6FB554C0E1EAA090E297E67DB9D078C36AEBCDF7F2137F84DFDF862E6EE5F778933873FF0017BD5EDEDF9F8C70D57295C526C47F70DFD27F7EB8C3EAFCDFEF07707FE3EA7EFE5BEDBC60BAD11BF3B78B7F9CFEEF8CB9DCED7F483F4EAA7CBFFBAD6BD7E9CE13AAB48820F90B8F91F3F3239EFC9A4F533EAFA93AD3EFF8E8ACAC39049663E07D5FDD7C343958B04EE6666E39FE1FB3869C67610BF72ADFE9F9F7B084A6B960917F88FDCE0E33B080C957D36DBA8F7BDE31FAFA86E63DE3F3C1C6761EBF983B857B03F31926BD5E220DCDA26479EDE42D84D6B347ADFED6F661C4A94A4D086E647531A5CAF72E01168237F9FCFA634EF03B51EB47AEADF673D690B776378D62B9CBC903A6FF00AE0EF361EBF7F380CB1A13E35FC4726B564CF11F404C7BED8CF782BF2F42F6F483BBE7E919A6B14641519F7FE53F2C36985CDB73E7FE20EEF73F6FCC67F5A3FDC7E7FF006E138CF00DCFA7E20FAD1FEE3F3FFB7041C0373E9F883EB47FB8FCFF00EDC10700DCFA7E2334D6A93B1E7CC9F2E91F3B61399A78FBF7F783806E615A2B960DD56F53F7613804B7DCF41A7BD7D216315EABF885BCFAC7EF6C101975D41E63CF6D87942E6F31541F189D8127D39F5F33D7041DDDAF6F3E6397B78503317131E3F2DF9CD8F3BEC3973B9C359C6B4B1FB010D71320936B8EBCB507D1FC21DE8F335DBC44C45CC4CFC7A7C4F5B611861330EE9735D29D46DE0F73E7477FE28B0A49E3DBFD44EF1BC47CB6E7821A2F0B47776D36F51F7EBBCB329CD96384F1DBD76F9C8FC799C10D26615DDEC76BD1B57AFAED13FC9B54FF000DAC61D51528CDB8495472BC0B5CC826DD31AE324A6665B8B2A0ED2D4C06A58BFA3442E3B08A98A49093F2B9A3F96AE6EDBB7378F6CBD997355EA5F67BCFDE52A4D3E5758949245FBD4BE9304FDADF604FC71F3FFB649123B5982401FF005712B04805CF0A9EB4A6CDAD6D13591CDFD3A892A090180A736B6ADADCD5F78F93FF00685CA9CC9BB50D594EEA5499CCEA1490A052654FB8A98224CCFA73C77EC19E0C34804D3BA43518B848A7979DE958EFBD9C9C3138292C6CE14D5B9A3EDD628C2A80241133F2FDFBBA62D597E294994B00B16D4E95F5B5766DA2EF2E41090598F5D2FAB5FA5234B8B24A523ED5EC0C9B6FE1FD397C22A7628AE6AAAF5B57EB7B33B36BD61D4A944CA98487B51EDA6FAB4042CA0AC24C0DC81205E37023E3E784BF5CA42CD4802CC5DFC896D0B188C9638B1291A150B8B870198E97F1AC29CBE9DCCC5F6B2C485F1573CD348E0495ACACAC25094A520A89248989F3BE2371D987121614A77259CDB9FB6EAD169CD25CAC165CA9C0252B12CA9E95A55C9B3E9BF847DE977E9FD93F963CA8403711F2A7BBE7E9FCC24AA7C04D8C588DFEEDAFEA396E30BC997C4A7091422A7617F0A0D2FCE0EEC6F6B53F98AE73EA829E205467909D81F7DFAC98EB8B460240212785FA8B1D797234783BBE7E9FCC55B9BE6EAA44A932541C993C46D137079FC276B0DF16DC1E5B2E7FEE48A33D2FC853CDE977730A224F103A9341A6DD5BEBD04529A9B3509529C0FA9B324D8157EC7C3DC716ECBB219331490994058D5ADBD773E3CE90A8C314967EBC9BF3C9C7845379BEA072B141B455F129B24429B080667990072DF68E5D6F381C9B0F2582C25205CB8A7875F6EF0E932428DFDE9EFD451EBECD735CE5BE25165B0D5E1C0F34605EFC324C8FBBCAD8B5E12565C3E4EF0120541A35A84BDFD97870891A31A54923DEDA163B1A4429DCF5A794B4D4D690B444212D1B13BDD3BDCDB96F7DB0F26E6395E5F45CC9638AE4A817B73F7A521C0989902CFA0B7A38F74A52196AEA9E767EAD4F5954397754B50A99E9C2855FD2DEBB9CA3B5393CB0077F2ACF5501F53CA9A5B68C7EAC3BB73AD9F62D7D6C075786FA6D3DACF3F5AD19469CCCDDEE48EF09A5A96878BECC153402BA7C49EA17476E32094DC588C397D0CD40A8AEFCFEB4615C8C524B92083E9A569E74AFD62454FD8576D19B81F52D2554B04FF5B896E3D78C00236E5D779C253FE28F66B07FF56749177E15856BA70B92E2951E942ACB9A8501C4BD580614F7BD7D2AE87D927DA2F30095536892A09992AAFA54403B1852A779E56E7883C5FC77ECA61292E78249A32555AF20D6D5F95ED37815A12ECA490C18961A787516AB52EC81FF00637F692BCE8804117FFE25487E1E212379DB9ED84E57F507D98A033A9A517BBD68DE0C74E71312D72DCFED1677228C3E9E5118CD7D8FBDA329921751A114A4C1852330A7544033210553EF1F9626709FD40F67669E193312F40428A83FFE4297F57DA1E266C9B28A5EC198B1E4DE75FCC5539FF61BDAB69C4ABF8B68FAF63BB9E20DA16FC0E63F96850BF53BFDF6397F1B72650752E53901BFDE4F8EBFE3EAAA67C80400C40BB306DADA9315366990E774CB08AECA735A22991DEAF2EACE111BCCB2058F3DAD0716FECF7C51C97342522749413A77A9513CD9F7F4BD2CF244E0A53A025401F992E900DB52DC81AB1E42B11475550CB8505A1992447DB50A45373B82954131E9BF962D67B5997B3C89F2C837F9817D857573A69E313B875C9984F11EE82438480540F881EA28FE70D9993CC3686DC7AA0B0E89EEE9D282B0DFF702B13C53E77C2A7B41859A974AD249D5EFA52A29B5EC3C64A423BD05405750FA581BED5E9CE1BE9B397140A1CA9E200785250124F2898916EBB79E3538FEF090920BB1047A519E96FF00308CEC27CC4F0B39734A1E5B8A0A5DC51AAD182AAD6A2A2A6CB69DD04DF8BA9DAD7E57B72C379B356A2789C27A9248F3E7BBBC2B86C1A407721EE386CDCEEDB75BC2672A81BF17A99FC62DFAE10E24EFF587BFA54D9CBF43F47FBFF089DA9008E131D60FCEC09F960E34EFE8631FA54B7EE3D58FE6FEDA357D689DC93FBFFD3838D3BFA1FC41FA54FF00CBD0FF00FC51A9CAAB893BF5E71EEE56E5CF7C369EA1422ADE1AFB3E3A43997870E0B3F890CDBB937F6743AFEB3E7FBFFA70DBBCE5EBFC438EE07FC07A7E639EFC281926DCA3F41EFF008E0132A1D34D6BFC41DC03640F06FE613ADE4C89F76E07EA7DDF760332EC3A560EE07FC01F2E576A7BE75E5AA8826F3B474F41B981E9EFC379AAB134049F7EF58048E7C23A3D7C08FCC6FF00AD790F9E11E34EFE8633DC7FDFFF00B7FF00AA13545403C3CBD27FDFE5EFC1C69DFD0FE20EE3FEEF4FE6137D60753F13F960E34EFE87F10771FF007FFEDFFEA8DEC5481C5700F9C9B7BFF2F7E3459059B478C89203B906DFDBD79FDFF951F5AFF5A7E18D236EE872FF00C47E60FAD7FAD3F0C10774397FE23F307D6BFD69F86083BA1CBFF11F98D6BAA16950E7E5D3C8E119AAE16A3F8FBF6F183252756E80463F5BFF005FCFF4C23DE72F5FE231DC0FF91F211B1BABB9F1FADFF7E7CBDF83BCE5EBFC463B815F98DA94D6B7E56F58588AB103C5BC45FAFBC6FEA70779CBD7F88CF703FE45BDF9FA78C2E66AC492553EF9E9222D3EE048DF1A124DC93D6119B87245F8B9B337A9A7BD6AEB4F5A9170AB7979ED79313E7BFC318866B9203862DBFE43D3F8A43B335C991E2045AC4DFF003BCF58B804D8E0840CA150534BBE9EC6DE90FB4B9824404A88E978F3B79C580BFBB04365C8493C4CFBF3D37D4ED5F1AC4BB2ACF9346164C2839C299578A0191FD524738F90D8E179CA6CAF16583896B63B0E13A589AFE758426E042E5CC5D9858815EA6E0B79F808F71FD95EBCD0FB2ED5D6344949695DDC13FCC0E54282E4CC90248BCF4137C7843B48944EED9E012520A7BF9E56C43020B8DD81E4DE8229B3E7FE96690E032806D5BDB9E54A068F05FDBDF432A935AA356D3B60379C3CF297C090005320054C08B99DF73D648C7674C9270F87521354A45BA002F4B6BD3731DABE1D6681695CA597E3E16F326C7D1AA7D63A00E38971BA5B01F6828C7398FDF9DAFB626F0292A96AD29577EBEDCF5BC777932C2A47117AD46D5B57434ABD2FA3425A86DBA37DEAB026A14128A74DC821638551B83123E1CAD88F97294664D5317AF9543B7315A9778D258E14AC3BBD816771E7FF00768DD636D3A2B1861CCB1100D47F31E5282645BBC4DD5B589DA76B622F160C849AD43D0EA1F6205A86F5AF846CC42D13BBF2966502036C58BD346B335F778EF6FB03F600AED63B51A2D479CD314E97D1AE1AACC1F7507B8716A6CB8CFDAB28871B1B489B5C462A198E35499530A13DE2E89097624AFE5706F477A7E04557B71DAD4E1300AC31980152140A5C38614F3A07B1E51F58E1D3CB88FCFF001B63877007E5B7F37F778F9F9C01DF4DBF9BC25AB74847F548D8111F8DFEFF00961E48284B0A51B56BF96BBDDB918024026DC872F1BC5719F3AA2493369DCC1E87E3F23CA3169C04C92809798916B9D35F75FAC67853B7D62A5CF90A7DB5109714B483C21B6DC5933BC84824440DF165C366F83C1DE6254ECE1C353A6BD357DA364B4B2F50D7677D47DE2A6774EEAFCEEAFEAF96E455350951294A9C4A9A499302EB40817BEC79198387A7B6F83921A528248A30587A72A0AD7F9A43849E201D56E5E76B747BD8561E97ECAFDA4EA84B0E2E81BCA1944971D152C2D442AFC45016140813637B7B8C0E2BE2B4A94B3242D7C7503E55106B4AD4791EB487680901DC30B546BAB5CF2FF1132C8BD89F2547039A9B582D6E0238E9452BAA13CD2548570F94ED88BC5FC58CC65ADB0F8733127FBBBCE137D99EA74A1B5377085201254B02C01DFDEE6A7A98B4F2FF0065CEC474EA52ACCF4FFF00885C708EE5DFAC5453776A4EE4A41F1151E4623A9338ADE69DB3CEF3CE032E7AF03DDFEE1FBCCC7A5EC1B938BEB0C71B3004FC81FA503EDD39D3517BD8F92E82ECEB4F84FF0002D0F4AC70C7097541FDAE27BE428CEC7CEF88539AE70B491373198A7B8019E8D707D6FAC46778ABF057FF005505B4D1EC6BCEB411384559612114F95E5B95A2200465F48E97472921A0470F29BE21E6CC2B5154C9D3D4A15713A6001479057E5B771194CF9B60199EE7C4E8E437D2F48C175599387F969A65CC7D8A561991063ECB698FC3EE406214876338D35993162E373B7AECC20FD44FA1A5A96BB9E6F6F510980CD883DF2C5288F070A52AE3EB3C3B797320E14E29F8A002261436F523CEFB1B6F511A2B1D8894411C4C0E85B8ADB786AD4246D081F4D692AFF3EBB5FF00E198DBDDD6DCAE07A6F2F05892586206946035BD6D4DEF7B46C337C4B8002B954FD7D98E292AAAE9839C59824154471D325CE28F250300758BF2387A301895103BF2E3FE25AECF40CFA43C4E6F8A21DD7B357EFF0088455B995528101343524FFCCCBA9940DB9F1B4A3E9B1DEDB4C94BCAE69487C4CC06C7FDC56CDFF2F4737D459CA33AC5ECAA5CEA7616D2E77A3C42739A2CAB3E6CD1EA1D2F95E6748E712168451D1D31095483E36D90AB8B4CCFE2A4BCD330ECE2BBCC06227267AAD302D6BB16259448FB75D657079BE216405F130AB59EEDA8F0E7AC755FB47F61EF67CD76CBF579436746E78F0528290AAAA94F78648F0CA5BDCCEDCC88C5D725F897DA494A40C499B8E24D57C7DD700DDAC76E9EB76CAF3C521011DE84248658500A2DC8A99A9B75D23CF8ED5BE8FAED3B47D2AF36D26FA759654C079C77BB0C5338C34992986CA94EB9C491C8488913271DD3B2FF0014F033A748C2E3712A953E610132D615C20815759F97CCD7D0DD3058CC3CC40216971552C2C3AB88B8F968CDD181F38E8266B95D4E4F5CF65D9EE4F539457D3A96829A86DD6C1520AB8A0AD0849888B4CF58C7A4322CFF002AC44B96A5E3651700BF12542A0355D9F4DF7E73F28C9989052A0A49146A934AEE450727BC449DCDDFA975CA7247774D01B200D9513717DADF28C5AE74DC2E2403849A89CC3FB0BFD09ADF50FA6912299094212B02AA7A359BDFA084AE54AC78BC50373B7DE07E186852A4D155E6CD7AFBB429DDA9BF6D3C1BA6DCE113952A26C6C6F63EEE9EBFA6D848CD40B9EBEFDDE8F1A8049600B8A5ACFCFEBEB1A8D4AC0B98F327CFE1B5B18FD44A667AEEFF0068C9045FEA2353952AB024F316BF5F2F220F48F8B798B4ACBA4BFBD6A76DBF10B4A415548A6845FC287C7D79E935046F23D47FF6E112A22E9F5FE21C77279F98852C544855FE71F801F29F3C63BCE5EBFC41DC9E6DD45FAC62B7FA104EC2E3D4DA3D718EF92ED4715BFF001E9783B93EDBCA349A829224C1BC7C0F41FBF38C27326254086AE977BF4F7E31A2E480D4726FCB6AD1F583EB47FB8FCFFEDC2109F75FF6FAFF00307D649E7F13F98C10775FF6FAFF00307D60F51F11F96083BAFF00B7D7F984EFD491C3E2DFA1E9E83CF09CCD3C7ED1BA255E8478FE49F7D213FD68FF0071F9FF00DB84E14EE4F3F3107D68FF0071F9FF00DB820EE4F3F3107D68FF0071F9FF00DB820EE4F3F311B1156AB8E23F13F97EFE184E669E3F68D552942C09F23F4F7F6D9F5A57F71F9FFDB84E35EED7FF00131B9AA95C9FB5620DE7F21F0B7E4463815B7A8FCC2D455192788C7333B7CBF3C60902E5A0E056DEA3F31B455994C2ADD419DBADC45FF6318E34EFF5D6353254AD3AEAFA6F0B98AC54C71729E53EB1791F1913D2300524D8DFAC21370C412149F16EA199FAFD61C45728100199BEF7046FB0BF2F775B8C6D0C662129714BD7EC6F4A0FB43C51D63C2150AE198920DFF2837F7C8C10D7BBE3A243D68D424DB7A373D2241475CA75496388953EF30D260C905C702009E57311CE6DD433CCF172F0D96E2FBC584032D4CFA963E3AF4874890D2660586F94B02CF6EA3C74173B8FA1BEC932E1D9FF00B2B68FA5ABF0AEB692B56FA17214A2B778DA2524711FB408B1E51D71E199934E33B638F2E5430D3D3DD96268B25EA37B9DA38EF690044F4F0D52565C8B33EDCBCB7D0C7955ED5B912354691AE79C6F8DCCA3BF5B64265403EB2AB089DAD69F3C77CC34A98AC249F94FED0496A014F07D3CE3A3FC3AC54B44D9616B01D40124B061A07F7E11E28672E2A8A502789B75C1C306603846D048B7DD79DB137815CA08582B014CC4539D6F4D6F1EB0C1CD953B088E050AA400072035D35362D76DF3154DD453A2A160ADC6C0EE85E49912600331CFE06D8D1084A4AD4A2CEECADE9A7B6BD223CC89E678E142B81EEC5BC09D0EE2D7A54C4A74DE9FCEBB44D4791696D3ECBAEE699C54B6C90D24A9494A5C6C2AC0181C04CDFACE2A39E4E9638D226A52A6E27BB302F63B0B18DF3AC5E0F2EC0CCC4CDE1265CB2E95109F988212C4EC40FBD63E95FB2CECA72EEC1FB12CAF4165E86D8D5B995353BFA8AB1290871402D152DA54B1D1B5A9278546DBE2858291331F8F5620712B0F294D862D4512196E1AAC46A3CDA3C21F113B633715984F9689A5654B502534012F40002CC07896E91EA7B1926655447D58771C5B712527DFE2B981E43A1C70B9B89080E54C0D5C124FDDBCDB511C942944D0FD21D11A1B377071E6199B6C22070028412AEA0106C3DF73CAF88F566409694A5129FDD460281B91A335E90ED091424373BDF56D3C39F8F1FE09D3E811982D35A6E1512824F9413CB78FBB1AAF31C451A628307BDBA907C74BDE1596CE695F31BFE3E9B46EA5A0D0D917789A4C992AAAA93E15282DE128F25A4A52098B1B61AAB1D8CE204E295C25F8925DF956FA5FEF189AA008A577F0FE7AE919C67750E7F96A7A5A7A256C94D353A5413CBC41015EB27D26D8D44CF9F88F1926E4AD46ADA827E83F108F78BD090341B46EA8CBA128287DC2F19EFC254A0279020103D23DFC861F2677197500E2E4A413AB69F8680AE6A59C902BA8A37BFF0031C3542120711BDF71C511D49EBE67607AE1C8095A5C067A6BF4A46C0CD21C1247D2BAF46F5F2DCE5234EA47110422E2448E879DCDF6F28C289509746A35F66DFAF4A985E5A4AFF73923AB0DCF5F2BF38D7DCD3B444AD23681C201B7BC79636078DF8535DDCF5B102E3F30B7729DFD0FE61BAB6B29982D8E2499E21C8CFBC9FDFA61497825CD04A659D0D8F4ABECFBD3D20EE0173D1FEDA8FA4361CF295A925C47C0088F779FEC6153944C51A20DAC4747D2A280F5D20EE13EC1FCC6A7354D12225D47389208816B79FCF7E787523249E6BC0455E9B1DF6BFAD2B19EE65B5520EE5839F12E69A43255EAAA3330E3441F31F76DBC91B1F75C3F464588B842A94142399FB5CD39DA329932925F801F7EBEF48627756D1200971B93E693F8FE7E98728C93141B841D34660342F63EB7687689128BBA035281BF07C36844E6B1A1360E376EA40F59BFCBE6360F5392629A81637FF3F8A561D2654AB042481AF969D7900DCDE1239AAE85F04075B91E622FCE06C07E56E78752F239A0033251535DD2F72EF5E40BB3EBA34394CA40FED62350DB03E9CE8F57D9BDCA8A3AC061D4926F2089EBB83BFE3E58D66E5E24A4B4A0826B415A78529E7F58DC4AA6CA3F228A46843D3E82EDF9A533A677F8705BCCACA9C5005BA85ABBD698FEE0A6164A17C62D04731EF64B95396381C841FDCC9295F50B4B283105D8B6E43346F81CC7132D6089AA0C402EA2CC6FC8EEFE5A452BDAEFB3B7657ED079255B59D50D2E5BAA10D2FB8D40C301905D20904B0C25B42BEC84893326712B83CEB39CA1094E13113A6E178A924CC53CAADCA892A2EE0D7A6B1D4722CE56952146610B0DF31A82FA312D6D8163E9E0676FBECDFADFB00D4028EBE8AAB34C973175FF00E139BA1A3DD38D3249517036161B02401DE284F58DFD2BF0AFB726485271B89EF0A827E55A98A696625F5367B3C757CAF128CC51C4C94A92050597CF61E7D2ACDD7B66A2AABCA9879BEE129DDE490E4C4CCA40B481CEF3E631DFF0D9D61F30ACA5A40536AE6BD0D2BA6FD626BF4D2D29725A96B5ABF7F0AC37BEF369754C21125AB17B889EF49F2330009DADCAFC9FAF2B5CE485256EE2E3CF4EBAD3D61AAC4B42411FBAAF4A80F4B0AE82BF68C50A49DC7BB9FE136C4062B053B0EA3F329B986A7893F5864A4AAE09B583EEDEEFB721995A524F4311BCC01EF3BFDDF0CE04A8F1025DEEE76B6AD0E308EE41767FB8E9BDFF00883BE4F4FBFF002C3F2A01DC57FE3EDFEB121C09DBD4FE611D53B3C3C260DF6E9EFF003C319AB1500DB5A8D6AC6CDF88D880407167ABDFF10938D7FDC711EB98A7724977D4C60002C238E359DD44FC30AC82E76D59F67FE1E02906E1DAD071ABAFC87E587718E04EDEA7F3071AC6CA23E1820E04EDEA7F31CF78BFEE381AFF009F67CA0E04EDEA7F31C15ACEEA27D630D67000800333FDA3200161071ABAFC87E5846331B5B59BCDF6F238208DBDE797CFF4C10462A722397CE7E58D9258B9DBCF940C0DC3C63DEFFABE5FA6304B926D030B353683BDFF0057CBF4C20A5BD4D00F1FB46A5293A0FA7D20EF88D9447BBF4C325CD2C43D352C0F9341C09DBD4FE63626A426788CED1D6F31F71C21316695AB12696FB69A43BC3CA4283148DF9DCEB5E5D2B0AD15224907736BF436FBCDAFEB87324D5B6A75773E1EB08E250928500966B53EADB8E5D6E61522AA1485893C324DEDE5BFEEFE7187C491C2A0683CEBE86D6D0FA56E6C924AC17F9EB41E76BF36E557893D16A3294861D4A7822012120C5B9C1F2F4893CCE365E21294BB81F73C9C535D7C637C160F816EA0E97EADB6EE5C9F08B7BB19D22EF693DA4699D1D94053EFE6D9830FB81092A296E89D4542ED36F020F911CA71C5FE26F68060E5772998C262174E261C4052C59DECDE05E1BF69669C2483325A820A12C43548550F5A1AD3D5A3E84BB5B798A3CA72ED22CAD29A7C972BA569B0D98417051B45C848313C6920C0277C710EC5E07F5B3BFD426CB3DECF984CC2760A3C26DB0D686387E6D88EF2628514C5C171527AD407D457768F33BB46AAFAF52565129292AAB45434A4AA088485A504883262FF00AEDE9AC2E0D2AC0042501FBBA0A5DB571FC987FD9CC44E953A584ACA7E6B0E55A79D3C23C43ED37275E9BD63995238DC043EB294910077C4A840023FA8444EE4E39DE33098AC2E294A05411C44EAD7AD4B69F6A8B9F5F763B18676070CA5AF89540A725CD69D1B9B03B5A21AC9719535434A98AA52BF94BE1E3E10B32B49491078C2B844891BE169F998EE38388021245C39A6ADB3C74CC666585C160D454949570FEEA51C07A6AC0D7C1E3DB0FA3E3D9D329D17962BB79D754210F6608074750D4A095B0B48553D639C047178D452B1C690003E13071CB71EBC4E331F351256B51E2F9C970250351C94E1C3E9E71E4BF8BBDAD5CEC28C0E0A6148477826CD0AFF00ADC45D3F2BD022C1AE7531DE6D53AA2A6ADCA87AB1E0A6D4496140A6C89809B2A6C205EDF0117CECDE5AA011C49A06AB0A93ADAFD1C8E4F4F21284DC46314B9CA2B254EE5CD8FF0000B374D23D7253B5B5622980667688113F033EFF004C78E0CC67A927635FA822357ABF8C6AFE159A2FC558E29E1B23C6501039EC6FB5FF0063092945449DEA6DD2A5B9FAC3D41241E5AF2FE291B0656849016B29B192495F43D49C6841208767F7F785E5EBE1F785CC51A5B0A534845544151584A7BBF4E2DE77F59F5C22A965C104BEED41A59DABE118980167D5FED1CBD5F4AC8E17561A3B140492262F71D4F4E9B5C61CCA96B5800034F0A3EF6FC7842600028290DCBCC2848269CC9FEB93F0249DF9EDE677B893938659AA83026BCFA7DCFA40C0B3D48861ADCE12D9512B4003A293CBDFFAF2F5949382510004923EBE3A8AD1BC8C6CE588DEFE1115ACD56180425693C57FB43DFB19FBFADED898C2E5466B7125C8616B1BF8B75A38EB0E30E81A1BEF7BD6BAFBB3D6119AEBD534490B1239F17EA7FDEFD266B0D919268871FF00A7DF8EE75D9DF77CFD22019A7680E3BC27BD1E12A89501327E1E9CFEEC59F05D9B26AA96C0B386FB36D5FB6B0777CFD3F9881667DA2BEDF143FC37BC2A46D6B4FE9F218B1C8ECA099FB500D350DE1F814D2918E02FF7F7E1E7AB188357F69D52D903EB0428CCF8F7DFCE0CFE42062C380EC8238085201234E1B3DF9D7C0F331A9412086E5BF37A4466A3B53A8850EFCDC9895DC472DF7E973E589A95D9094A1FF4D9887A1623621ADA9B96A6B00429ACFAE9E2FEA4F588C661DAB55254909A832267C7681B400679C7EE43F4762D0A149628CEC923D5EBC853A42F2E5A941EAE7705E9AF4AF28655F6AF58524FD60DF9779B7AC91B9FDC9C3C47629240694073236E82BE5E5587694AC0DD46F6A372B7E00E708DCED76B1929E1A851E23FDD3B795EE4ED3CBDE70DB17D8D290C9941F9279DED51A96F4891C3C92B49D4B5697F77E4C5A1DA8BB6FAA640FE793B48E21C88DE7D7A479E20315D8A98A04F766D6E1B79529ADE94AD1996330A482403CC5CBEA473A5BAF3690B1ED06E32A4D3BAAEFDA7C8E2638A3BCE1823C60786373793B75C404EEC54D49E2EE94E2D43AF8066A306671A38786EE95296183925CEC5B5E6D5B7DE2CFD3DDB9E48E1698CCC269E956414D3059924EF2EA6151241B9B6D30311388EC8E2405AA5A4A2616E13C20B35689B568FD68627B058A992AAEE28E2BA1A31A1A369FE2E8CC72DD01DB3E93CC34BE7B47415B97D753F754B5AE1696FE50A5A49E26E65E59716A04C111104918A8636466BD9EC6C9C54954C4CC493DFC90E0625BF6D6825F00BB5DA3A9F65FB408929E098A6B1049763CF42093E25F9478ABDBDFD1F3DAAF65598667A83B3EA7735468AA95B8FA9D692842D968952C2528254F2A0950B09B6DB01D3BB1DF14254B9C893899865E210405495929035B9A59CF3A8A878BE8ED1616700998A09243F7AF5E4C91D408F36F3ACAB30C9730A8A7CC69AA696A92B297296A69DD616DA84820075292A122E403D27618F4A647F127013D2841C44B51200AA83027406AE39D6AD416890C2CF4E264A149140FF00EE38255D520BA4528F7E7A321AA29540B106F0608E7F1DBDC0F3838BBA332C2E6684F76B492B0E450DE86A37A781B8A3484AC22A790D507602E06CCC3CF581152553C46E37BCC721FBEA00368C4762E58C190A019CD2ACE3F8A7A9BC3A565EB9041524A5EDB10DD5AF5F0EADB03E39284F90B88E7FBF74618FEA945E8E0EC7CEAD5F6EF0770B735D9830A7AEB1A5D72786F3BDB6FC3F5C36993BFE5A5A967B79D2DCA306490E49B72FE79C69EF3CBE7FA6102B0BB69D75F01B465324AAC7D3F983BCF2F9FE98D90B2922AC3D9FAC68B41433977F7EFA41DE797CFF004C2BDEFF00DDE9FC4690779E5F3FD3077BFF0077A7F1041DE797CFF4C1DEFF00DDFF00B7F8820EF3CBE7FA61354EDFC2BF602364A789EACD0779E5F3FD31AF7C9F6FF88DBBBE7E9FCC6C439B88F9FEFEEFD4EF93B7D7F1EFE8777CFD3F98D9DE797CFF004C1DF27DBFE20EEF9FA7F31A1E74880047BFF7F77BF1BA5616682DD75DEDE1D3946C257158DB5D23477CAFDC7E584D6B147A0D2F58C19453737E5FCC1DF2BF71F961B4D582181A8F7D6DBFF9C777CFD3F983BE57EE3F2C342B0297DF97A467BA3CFF00F1FE63053E411336BDA3DDC87BF7F9DD25AC121D85FD9F7B987B87965AFA736E5ADECFA6C291BD1526264F283FAC18BDB96DD670EE5A81D6A40F41F6DA1ACF0CA524835A00DE1D7DD0DE1E32EAB090EA9C850013E76F416DB7999185E6CE4CB492685A8747E5E8C7C7A9232E1398F01351F5E54EA75B0DCB830EB398AFB9694942B69046E4C6FB72F4B1D84E2AB9866C25950E2B3EA69F5B830BCCC28C2A4A8A5D22E35D4BD3AB51A879C7AF1F46476448CBB506AAED873A60AE9F45B0C8A05BA8FE5BEACC987183DC2D4385CE051495168AB84DCF0918F2C7C5CCF138AC6617042710A9F32810496E1525DD999F623560E6392F6F730E14A422812E082DAB114D7D1AB1DC8ED0F3DA8CC01AA5A897C3D505D24C12DADD25B1E8106398F9E3A176170A0612495A43290928A6C056803BE963778E32B9C66CCBBD89AB35C6BA077F60C74B35CB08FAE665560F829928537D09524CDCF9CDA37F3C774CA25F1CB94959AA8B35ACD46B7BE7164C94913D079BF4ADAF5B1D9ED1E52FB4464FDFE7C3374B453F5D5A8A951013DCC004AA204EC27DD7225AF6B72A97230C6680012851240D838ADAD4D3C418F4B763330E094002FC3C20279F21CA9A56269EC6DECF755DB57692DE719BD3B8D688D34EB1519F5538DA836613DE52A5B240539C4E37C2AEECAB732236F36AF1789C4632749940A8A14A4F059DC900BEE967E64342DF123B649C932D01C0C4625244B5F13997C20713A6B705803F68F6FB5867B414D449A4D30DB6C65140CB3454397A385A6D80D212C38E0042412E1471EC08E66716DC932698A4A3BF509D36A56BE009245481A03C2081AF8C790B3BCED59A2D4A2A2788927E67A9F0346B68DBB88A7EBDFA948A6A075E2E97B8D5C615207F5904824089237D85F7C749CBB048C3CB0A609006C03F2E5E772358AB8C331E337B7315BF95A8FE74FA0166912C8492424889EA46DB7BBF1EB8F9E17600F100F4666EA7C5EF5F288500A8B0ADE8D7F1B53F8BC735110DF88CDE4498DCFF00BFC6C70BA1249568295677A7BD7A6B0F91FB46DAF99F7E3CE1BDCA869BB2943CC4EC3CF95F0E048E20DC26F7624BF4635E45AF4BC2D2F5F0FBC3555674C5288E3038A440316E460413F779E1EC8CB5534FED25ABE760CFA3F37B429107CDB52D3F8BF9824837B4CFC763F9E2730D92A8B320D69635E9A75EAF04416B75630DECE01320F8A36EB16F96DB6E062C586C8944370D9AC1BD9176822B7CEF5835E387881B59663DE27E079F4838B1617B3A5407FB64EBA8FC0D18736171522A9CE75F268882878A839C5278F6B7207CE2E2201F8DA32DECD93FD8C7667B6946D3C2EE758752120EC0EFE6FE240F467115A671DA72A15E3277FEAB917E9BDE79F2EA316AC1F66C3B775E36D6BA1FF3CA1D7766EF417A796BEFC62B2CDFB4B528A4059B49B28DE3AF98B1DBAFA0B7E03B3A97004B1B540E4581F7B883BBE7E9FCC40B31ED21609FE6AA6FCF96DB93B0F889B8E58B7617B372D828A45A800B026DF6A3F283BBD5EDCB7F1880E6BDA22D6A49E3322608519F7FC7D368B62C382ECECB485120076D07261EFCA1D4990662598902DB68EFD6D5B5DF588A54F682E03016444C9E237F74DEFE9CBAE25E5E4726AE0519E801D7EBF5BC3B4607899C585E94D2BCB93B1D285E2335FAFDC25242D5378854FE16F8F94C61F4ACA248E2F901B7BFB5A9CED0E118124B3160EC451FA5DDB5F1D5CC313DDA0BB1F6951E6B2239CF3E43EEE7B3E4E572831E00FD03F88F62BE6E9182A5BA51ECDA86EB4B6DAC256FB4170714AD5D6E6639DB7EBE97E507189995C851AA1236A8F1E5B5FF00C49613046A120B16D0D3C079DEBD6315F684B93C2A23A78B7882791F593D37C6BFE8586994084316D05CBF5FA91E10B4CCAD4BA10C3A16D8B57CC5DEED0A287B45524A8A89266DC47ADA0123E406D1CE70CB13D97C3AC1696914E87C75E5ABD9A239791A89A21C7420F236D1B6D46D49053F692E0825C36123C4444C6D1D3AF2F7C62BD8AECBC9493FED8A93A0B073BEFD234FF465A2E867DF939DBDF9C58DA1FB69CFF21CE69F30A3CC5C6F2F60CD7B4A76CE050F04052A41046C07AE39B76B3B12314852E54BA804D12FE4E29F810DE7E171185FFA61418559FC3E97F5DBD79F679EDE721ED4B4E2F2B5BB4EBAFA1427FCBD4703BDEF112A52781C0526C0C883B89F2F2C76BBB3188CA718BC4A50A12D45426F0F12598302E19DC81EA4BBC664637168042CA9C7ED279173E82A5FC6C6211ED05EC5FD8EF6F34B53A86A6869B27D62FB6E062B2999534961D424A01532C8432AE30126E39CDC9C55B29ED563F2E9B2A4714D0994AF91456A20825ECEF4A569B522F3907686761DD066B22614858531B17A136F4D2D1F3FBDBE7B16F69DD8B66B5B555197D4E6FA790E38B6736A740290D4920965A0B518102FE64ED8F55FC3EEDF2E709427CF73F2D0A80A0E4588B5DAFB4769C97B41829825FEC4B0058904F3E95DCEF7D7A8A288BEB7FBB2A6CD3102A4B80B6A76491C3C0B852784C8902FF7F72C56792B1F2E5F7530120025883B0D2FE4FD0459B1F8A938896832F84D3420B16E54BDB61CA836B596BEF254BA4506823ED490663A027D4C6E27E0C462D540FF00C5B9357CB66A444A4A6BC49E2F13F57A587AC25356DB84B1C10F3261D5DC8513B1DA3972DF0A8C4059E151A8F7A795F96B0290400480CAF6C418E7892398FBFEEC3842B436D3DF38D638E34FEFF7FBF8E09EAE1A055C69A8A751CAFBC2339C800549F4B17F4838D3D7E47F2C35756E7CCC36E156C63052A6209F3DC60E23B9F38D822EEE36A8FE63193D4FC4E073B9F331B700DCFA7E23893BCDFAE14429C313516AD5AFF98510002075BF898E64F53F138DE178D88544C920F52795B9E08233E3FF0057FEEFD70411A9C50312A077DCFA6364AB85E8EF046B91D47C4632A5B8666DF58C100D0C71C69EBF238653161CF0BB9B9FB0F7D231C097FB69F9F58389279FE1F7E1BA95C2D4778DA3153894F39BFEFD7EEF3C204804026A6D12B8295C52D4793F3D5AAFB6FE5025C4AA6F11D7A47FBF21E587D2940DCD2846BE1F6E4622B152DA6B58F139A795B7F1F1854CBCA553BECB07F9CE29A09DA7838877963D1336E97E8434CD279972CB280614DDF6D77F41B44FE57212521C3961CEFE96BF90DE2CAD11D9E56EB3D6BA7B4BE9569CAB733CA965B7D2D712BB94214D97CA8DF8470951B91B475C714ED3674B9054429E8B7AD281CF8916B78C42F69B132B05879B3967FE98A21DB89C5F9333B7F88FA71D1BA1F2EEC7BB2ED2DD9BE5DDD8464D445DAA7109E15D43B5A94542D2FA8789D2DB8A504F78A5445A0638263702ACFB30398CBE2577B31248539E012D4051D99DAA68EE5DE3CB9DA7CE5599E2169E30424B30346A016D19A95B13D280ED12B920BBC3037DADFB8E5F9E3D25D8BC29461A44B218A529141B51C7A73D0EB15A929E250043F3A8FE3AF5E74E9EEB4A9A9A961686CFF97593F58322641F04F337FDEF3DA3072132C21668CC40B6C4DBD0B3F8D22C980024A9045DEDD341A1DF5ADB9F5AB3EECC737ED773ACAF43E594AA76B5DA81F5D7D081C2DB0161C27880013FCA0660824CC620BB699949565D352A58480929248A82CD6A12E6836D869D3320ED18CBA6226B717082C97672CC5DDEDEB4A47A59A6F46699EC07B39A3D21A6BB953ED530FE24EB690971C7970E14B8BBA97C2A2A0029460898031C3723CA5588C54C9BDD90952DD2752E4FA1BB18E71F13B3D9D9BCD413314A751700BA458000025B4D2BE51535766C336A779E71C2D8E2528A42A2E144C5A01B827F738EAF80CAD322585283300EE0FDF6D869AC50B01835291C641552A1BC286A5CD6ADF688B5255E699857D0E539334E543F50E16D4B00A8A1054028F1198F099EBE9BE13CC7304619052080002545C0B57EFEC98DF1BFEC8370C0B1EA79EF1F44D599B06F8A1409B990403F01CBDC7A63C0F2704EDF2D3A1A7DF5BD3CED570160964B0B33B9D6EE6F5D0D623CFEA0201957853360A173EA7A749F81C49CACBF8BFB0BAA83A52A08FB3E95AC3A9648A58A7EEFEDE2119BEAA5B6550E0000330AF97BA44ED89595969424012DC9D83F37B86FA1BEA216439249E515C66DABDE723F9974F15F8C017FC081F941C59F28CA8A93C4B450B0A8634B796AC2FAB43897AD36FF001EFF00115D66BAA9CF12BBEB9FF501E5B4CE2E584CA40E1025D68CE9D5EDE15BB7A38522B7CE756BA8E187C5C13F6803378E7B9FBA05CED68CBF264A81E2410A1A33F859AD6E45B4822ABCF357BDE287A08B9F1CEFD2FF00BBF5BDBB059225212D2DC3683AD0FB7E71B702B6FA7BD62A9CE75629453C6ECFDAE63EE9B7BF7E569C5A72FC88DC4B6DA9CEA3EA2FB50438929A07A359E807F80DE25F578ACF39D5890170B060C9F1794DA0DA3AF2B62C786C9549209960100B16AF3EBF53AD1E1D3278801CDEB4B1D5F9457F5BAA42B7546FB99F5E73E5EE3CF13D83CA8A6BC35A0B0F7616D3D236128AB88814A01CBAD7CAB110CC352A49278FDD3B41161F1B462770F8166052DCF98661AD799D6D1B270D3174483D4317EB703EBADAD0FABD42924CAC9898FC7F193D3D6EF84B12EC9B5B407C7A537E91399760560FCE926C6FD5E8DF588ED4EA049264C0E809F95EC363E5EB8CFCC5E9C3E47EDB0F11B44E8C18FF00800598354B02FBB56F6EB0C5539EB64595224DCF53B6DFB163E8BCA510DCB51CEFF78729C0A890C9A0B8E5F4F426196A33C499124474371D2F3B1BF3FC70E78D2039142D473714FBDB9D2242565E6C12E59C6A1BD2DA1DBCA10AB3D42448541E927EFE7D7E1E9889CC3126590516AFBE836A6B68792302A4129281522A40617D06E7D884ABCFD06FC5D058FADBAFFB88383098E5310A074151D37D696894465E1403A59DF4E85DAAF4BF95291827512533E2DE2F226C67A72F8EFE5896FD5CB2E4ABC1DC96DFECFF00430F539525491F2D1F6E9A31F4DFC21C58D4C9060AC587F76FF1E436F7F9E186266CB268A07AD3DD8D1A8FCA345E512D4E38452C680FA5AAC34B9B80F0A1DD48B7CB6CB5545A2E1E2212AFB7C3732418100409DF60271B60B0586C64A9826F0BB7F7355DFE82953E1568565F6764E2524109046E2F76F5DDABB3B45E1D90F6D59AF65FAE74C674CD538DE5B515496AA9A4AC94A8712199589200054771CE4440C716EDF76330D8D973BBB48527866592E4163C24B6DBFE1A2BB99F65F825CE32D20AD0C50281F7A1342351A57768FA23D3FAEE8F50E52C67678174599D1D2B9421A70143CA0CA0BA12EA0C24A566E2649B6FB78D732ECC8C1CF5492C67485AFBF510C500A89438B971CA976D4728CD26E232F5A9402801448E86B5D1B5EB09F3BA4A0D4794D56599AD15366F4952853672D7D0D4A12A0413DFB8951E7C5BDEC0488C2580993707353370AB5226CB219692A2363F2DAC7D0F8B7C376DF1386F912B5914043B352CEEDA72D6D1E457B4D7B026579A22AB56F66B1455680FBF9A652CA09EE54428B612A5101CE2B93C22D231DCBB19DB1E2C47E9B315AA48584893314494CD61F35E8963E7E11DBFE1F76B55994B28C54E60867E321C397B93F6A18F1933ED3FA9346E775392EA262A68D54EE38D82E34B4F1C122764F9441FC31D7E4665865DA7A58B310417717BB01D2ED1D725E270B8948326625445569E214DB5AF3E66CD0C2BB2D4509841D9569579C1B89F3E989595325AFE64A817A82FD5CFDABADA14490A6E1ABBF266BDF6A3F3318952809260752001F18C48A1429C25C1201FF27AFE6374A16A0FC247DA39E251124C03B18DF69823A0336C693663060A7DC6EEFD5BA78D1A1B4F42812E0823F87FA3FBA16FEF3F03F9E1AF79CBD7F886D19A386F2E7C41FC4E0EF397AFF118248B07F168CFC1FDE3E1FAE0EF397AFF00118757FC7FF708E0C5A140CCFCB0ACB983E67F96D57EBF5F778712412412185697F17B681B9BED0614EF11FF00210EA30592220F5FC3005A4D8BC11871ABAFC87E58CF1A77F43F88235B8A55AFD790FCB194CC4837EB4351FC7DE0626C1E35F1ABAFC87E58D57352A71C4035BF1BE8C5E33C2AD8C1C6AEBF21F961B19A80402475766E55FBB46785550D7BD469071ABAFC87E586E66A058BF4FF00107028D924F484EFB91C337DE4C7E42DCE7D3E1ACBF98B8AB5CF33FE6F13B9620095338F67B59B938AB8F1BF5E1A58292A83C3C88048313E5FB8C3DC3AD0A04715B516D4D9FD4DB7DE131692A9C78773EA691CD3D6770F21C68F12B8836122EA5170F0080249B9B002FEEC577B418EC361A5AC4E9E94382CE41AED7A7589AC03C994A2B7400E5CD2EFE4C1EBF48F7A3E8E6F6776345699A8EDAF545377CBCD508569C66ADAE175954A997D496DC1C6012B064A40D88240BF99FB5D9B4BC662266130AB3314E4AD601646A2B6214C4339357BC719F8979E61D1226265CE495F0AC04822E6FAD68EDBDF471DECD635D54CCBEF39C6A7F89492140C22E52090792488BFA011675D8DC377C959989F9924740E59DB9D39EBBC799F2B9B37158A9EA98E47112092599F4DF537D183523A8DDA1E624878070126E52140F3F2248DE31D8F2859C36265A00F95C7CDA50694B8DF6F4B3484CB04592CFE049A5FED58EACE66E56E6598D3E5F4E14E3550B536F250389416AF0B648124788CC8F59C75D562F0E8C119A5680A12DDC903FB7AEFE3A43C54E4A40F983FAB83B0A57AD393476BBB3FD2947D96E987B31A869B5EB7CC9B0A69E570F1B6D90AE6652921856DCE23CB1C4738C5E2339C6224CB0A5E082D42600ED34834622A38540EB51084DCC57292784B91600DA8F7E7CEB7E462ACD4DABB8D150D3CF29FA97D64BFE22A83C44F224589D85A05B962FF009065089694AD6809A07040B01D03D1EBFE0454C4AF309892B06849AFF9F16D7A308AB4E64F543AD51D38528BEE04F0A012A32A8FB224989BDA7CF699EC7AB0F8794A485A41092087A58D05583EE49E82D137879587912C82B4A484EB4F4E7AFDEE3B71A0324CA7B39C85DD4D9C3487330A9642E8D2EC071B54113C06542E41F1016EA231C4BB478B998C98B9387515842889894870E5CA471015E6DCDF58A8E72A0E4CB75036367AD2951B1F0E71EA36659C3664717226EA36B409F3B728F80C79D70B8304FED776B8DB6AB0A3176A7A4457027D9B7BE6F107CCB3B4240FE6753BC7A73E53EEC58F099792DF2D000006A907EA6F190902C22B7CE73C412A973ACCA8C7BBAD86E39FA462CB85CBC10029034FEDBBF852E06BCF9662B7CD73B6FF00E6708BDF889B6FB6E4F945FE3369CBF2F649E14072DE7B6D7E5CBA64122D1566779F24154BA45CFF005284EFE7602FCA716FC1E0520A4140AB68C4B7416FE3785E2AACE73B4A88FE612255038CDA796FEF91E96DB170C065E9FF008245051ACDFE75FB42E00141158E739B83C443A7983E237F2EA4F5E5E9B62DF82C024B3A053560341EB6A783C390C34A569FE7D8D22B8CCB34E22005A8913FD47DFD63A927DD6C5A3078364FED1A5C0AEC341B523632F8806A1DF6AF8546B6B59E21398E668F102A207A93E47FDF9CDE263139230C90015005AE1AF571A3736B885A561D45882E353A9D0F97D1A2179866215C30AB09E7FBFBA0DC937C3F972E5D59228D6E4FF4899C3616CC1DFCC56C2F7BF880F678BD556A493E283CAE679F39E63D3A838708968AFCAECD7FC79FE22730F82040743125EBC98F2634B7DA2355B5A2D04F393227ADA39F2F59F5C131080C486BD757F7FCEB12F84C210E079816F5B753E42D1CAAAD4927C4444C5FCAC664721333CF081084A41201B87B52A3EECDAE9AC4A4BC3970C97DE82BF5D343AD7AB2B95A0920A8DB7827693EF883B911E778C375000B00DAEB57DE24E4E1C16743BEC2BF47DB7E621ADFAC499B9F333063CFE07CF7B73C36529CFD044949C20D45069F9FC56D48697AB120024DEFCC47BE08F3933C8F48C359C0177AB3372B7958F9F3112D86C1214DF2D587570D4E74E8FF00442E5724EE7AECAB7C41836F8C0DF0D432052A0BB301F514F7E4F0E0827467AFED3F47D377F268D06B5226E62FFD5D3ADBEE9FC7092A72C502BC341CBED00904101E96A066F0DF95631FAFA3FBA0F3F10FFB8619AA6AC9352DF5EBEF946E306B0EC0B1F3FA1F6F7731C8CC9C410A6CA890A489E29DCC6F262660C1F29BE1D499D3112661130A69A7FF00AB4E5BB7285E4C8293B2B6D4EAD7D6C29E178795E7EF32FD352125448E2124CA4C05483CAF04411E5388BC2AC4E4E204E50997FDC1C6BBB8BEBB6B18C6E0FBC94A253522A6DB8BEBAED6D35F7B3D853B48675CF616F69872A0AEBF43A9A04AD654F2BEBF54560152CF11802D72074DA3C87F16B048CBB3999899008566055DE84BB204A0424DDAA7616F5E19DB0CB9284CC1DD8643906D777D8EB4D43DC388EE73F53DD17521C238D2D917327853248827DF706200E58E7FD9A946609CA5FCC0115218D497FBB694B6B1C52661889A43317A0F1AE8CCCF7F5668462B5AA94BE92E250EBC9E14154149004282C2BC2AB75F4B5862CAA966594841E14A4BB815A9A310C7AB1357A6D3B976327E048EE96657135412051BD5998E9568E977B41FB33E8FED432FACA9551B0CEA1085A9AAC6DAEEC2DC8241212128E82E637DE3172CAB1B3414A16B570822BC44B5294EAD6148EA9D9BCEF1699A850C42810DC4E7881D0821EA2D7E54263C32ED47B1DD57D93E78E51E7D46F399754BAE8A2A94A49404B64CCF76088129E7BD84CE3A9E513E624242A605022F4A027ABF9B78D1FBC6579948C6C994A03BB9881F3077EF1D83F2D49FADE295A97EAC3C94A877F9783B240494FAC4AAC79CFE38B74B99C49705F7B78728B8E1A6CB5212A291C400047A3697BFB10B6A54A0D30524160825A47347F749DCC99DC635984D1CD4DC56BF6D3AFD90C7250B4860C79ED616F523D211779E5F3FD309C45F723979983BCF2F9FE9820EE472F330779E5F3FD3041DC8E5E660EF0F43F1FD3015F06F5E434EBD616932921DC0F5FADF783BCF2F9FE98C77C79F9085F813B7A9FCC6D6D60CCC8F98FF007C67BDE6DE03EC0C1C09DBD4FE636F1A7AFC8FE583BDFF00BBD3F883813B7A9FCC705606D7F97E18D173096657A7F1070276F5309DC5EF3D2E768F86FF00BDF6C20B5AC10CA6E97F1FB78C1C09DBD4FE6908DC73602FD3F7CBD39DCE1098B5503B3BBB787BFA343E4A10003C21EF563EF96B1A7BCF4DFAFCBD7F71867DE2FF00E461544B4D5C3F5F18C915612B4B0A00A5E07895BF08489B1DC7388F2EA313D96AD3DC4E2B2EC9BF817EBAF421A821C7767BA584001F9B6FCE8E5BCABCD653D638D52D496480C01146540492490F44DC93CA7D4621F058D299D89055F213F292435C92D7F5D7AC43BCA973E519A38A73FF00BA384B00FF002B814A0A3B51E3B8DEC2FECA99AFB41F699475F9952BAC68FC96A13575EFB895772BEEC77E80788A64171B22C48B99118E09F16331C415BCA9EA425D99277236BF4FF10876B73C9383CB664B90532D66529D8D5DAE37F5BB347D2566ACE459464747439486D8A2D3B4EDD232C3490DB4A84A5824348E149BA249E1266E2F3344ECDCB993CB4E05666A5C2D42CC28F7771D4D58E823C2FDA2CCF158DCCA6056215313DE2800E5AA4EE49F7B33F5DF54E6EB8AC696A5292903EA4493BA812E45CEC771CA04473EABD97C0F77317F2808243B01536FAD35DE25B0525326425412028A4540BBDDD869E1CEAF1D4BD4AA79CAD577854E3AEAF8384289B1302C081CC63A2CB97C3502BEA1ECDAD7946B3A62D36253F97DF5BDAD6BC4FF0046E87C974851D46AECDD095D654252BA143838B8080428F0F885ED123716DC6196267E2B153C60A54C5140FF00ACC4D033A40635714A7A43513660209516FEDBD77E5E3466F3AFB5BEBDABAAAB5B8AAA4F0BD2869A04029481C205B6111B798E47172C97279328213DD5989E20EFABD5CDFC9CC399438CBABE635777018FF9B7E628DA8CD5FA6A9A879F052144428F8F88AB6481B9E298117BCDB9DA31F3118390C964324D2CE4793EDE35AB449A0A254B53258B3123EA29A79DB578EC5F62FA169DA655DA1EA767B9A0482ACAA89E07894E5D1C7C2405D9CE1500A4911B5B1C6B3CCD2762710BC2C89C5D4A214A497084ED7209507E8F6D62B3996216569E0511C2EE428B2AA34D18D2C1C72BA5ED4B582AB2A4B752F0352DF185F01E068B51FC901B443638500030395E0EF25906070E129946582054F11E2249A92497275678DF2C96AC4CC1DEFCCEC2D7DA9A7BAB47A7398E70F193736EBBF9C733EA71C070F80424B82E36236A353EACF488A880E6F9CB8024827C455CEC4FEB6FC37B59705824A883D2B60343D6C7AF8411586759D3A4AE144EF107D79DBAFCB16591854A00702D717DB4E9FE5E8456B9A674F447113B9224FDFF00B988E718B3E57864872A0030F1F3DF716A1DA08ABF3CCED7E205666F249BC91B7975361E87168C2E141F9A805399B8F5FC5E1C0B0D22B4AFCDDC528CA8AB7BFCBA1E7BC7C3171CBF0A1D23CDC374EA36FB5E1C457B9CE6AE78BC44133CF9413E9713B47A8BE2E183C325213C4028D6835DFC052DA6F0E694F567AF2AFD6D5B30AC0AAF3270932A3B9B5F793E5B5C6DCBAEE6691204A161A786DF6AECDCE24B0B28299D2C28EE5F99DEFF00E221D99662ABC1379FDFEF97BB0BA789C7FC6AF67D1BE8DB8D1844E61F0A82E05D2CE5ACFB575B797488ABB5CB502788DBD4F9003CAFD473F52E258357B166F5FBBFA44E61B0813C2281CD9BD7F00F8F363AAAC549B9136206DF21E7D37E4230E25EBE1F789B918349BD5FDEFCBEBBD63B5B58A004DF7D89E73F8FBAFB6E71ACE7E17D1EBE9F8898C3E112970430A5BC1B9F2209D22355758A13722D37BF5F311BDFD6D866B24853F2AEFF008689195844BBD850F9FE34DACED76572B172649E7FED37EB1CAD6EB86EB511E3AD0337F1D22570F84492C19C5E9BF93D18E8DF46B7AAD706E4F99BFEEE778DE2791C332A7B519EAFEED5F331232B09562001FDC47E2A3D37F16A76B166209833FEFEF9E7C8FA0084F3ADDE9D29E147B5BAD624B0F87482DD34D6A7ECC2D4840BAC50E7E637FBF7FDDB0CD4585013BEDFC7AFD8B93246C0F8FE77FF00309CD5B9D499EBFBBE1B295C2D4778D3B87A801B4A0E9BC71F5959DC7C0C7E1FBDEF11868A5851F95C0AEA7A7DA36EE696F17FE5A394E6A9A675A6D6990E104C9FED20F4EBEFEB6B1CA56384D6A4100877F3B4389785E22549B25B89CEE5A9E76630B9FCF1B72AEAAA026F4C1A4A4F4E301260F381F08C3196BEED6B06EA2C696B8F56FE443D9B81FF00648201E204A74A01E8F53FC523D2BFA35BB42A9A3ED79DD089528D26B3656E38893C3396D2B8F24F0DFF00A86F1EFDB1E68F8D5FED6265B31EF2CCDA33B120DF61B3B35B91F6DB2CE3C0CB9894022571F78453767A024F87D80F65AA3345BC8A9784FF0025F2D4F203BC2D816E97001F2BE39B766E58972C922843B7A9DFABBD19E9531E75C5E1409CB61AB721EC6C776A421CD1EA7A65B2CD538A692B0141692641226D11249B7A62D2A962600B48D6A0D486A539D397DE22F184482962ED6E56A6B7BD296686CCCF35A814BF5653519790422B090547CF8638F7B46D3D4E24F0321226898872B49A2743B3E9D4B1D0522C790E3A624A4034357B7997B5AA0F8C50FDA2F679A635E64EF506A0A269E67BB7050D52920AC29625644026CA20448C5D7018B9D2672552C711769D29C86164D5E828FB73D23B6F67F305B25894B70B58B9E7F4FB3B478BDDB876059AF66B9B55D6E5090F644E38B500784008DC40512AE768131E713D0B0B39D20A4B12016726BB5437D368EA981C72D68055FB8332874D68E695AFDC47565F0E25454567854480DFF6116313D4CED874B2EC742EDE7FE2260CC33D22E08A13BFAF43FCC2793D4FC4E348D7BBE7E9FCC127A9F89C10777CFD3F9824F53F13820EEF9FA7F31CF12873FC7EFC11B253C2F577F7BC1C6AEBF21F9608DA3636A55EFD3A79E0823671ABAFC87E58208E0ACC1936E76FC8608212AD66E67D07EFCBF7CB092EE3A7BF6FFC9089D5ED373CC7B87945B084CD3C7ED0F93FB4468EF0F41FA7EF9FCB0CE1697AF87DE32EF9A292D287F39653DD1BEC3EDFA0E107F330061EC99A65C998016241A72A8FE3A9E6625B0D2C2A5AA81D85478B136D5A96FB5BBD8FF65B9C76D1AFF21D01A7C91F5EAA6C344708E26D252E544F14720A1731EF99A066B982B0489F3662F825A41516E4F76E61ACCE763152CDF1A8CB7BC9C5026CD5823859B85835D8D4695B8BD23EA3BB30ECA329F679D0995E89D354CD53E6E9A563F8F54A10038A52909704AA24C82B1E156C6D36C70ECDB1CBED04F5E317F3617888C356DC2785742C4B91AF3F0F35F6DFB5335026C9E3539E20456C5DBC0023C2ECC2346AFCD29DC5B6DE5CB3F554A54AABB93C4B899337FB5C5E5E800C5A3B35844210AF943900696736AD1ABE768E13865FEB71A56AD5679EFAFAEF4B168EBBEAFCECB74E16A324F1269CED24920CEFCF99EB8EAB91E1021D40073566F3FB8BDE3A409625E1D054588143BBB303D2E5AE2C6231A474F36E29FCFB3B4F1B490A71B045844C6DE839183169C486366AD2A1270DFF0055640E96777BB8B546B1173C025459C01FB7C3466A8FB08AC35EF69CA0FD665A904D123C14C018080278AC049B89369BF3C59727CA6505214AACD5B152CBD48D2BCE97AB54E911FF0032A610372E0B7E69C9C9D7668EB56679C3150B5666FD4AF89B51286A1504A8909E703CCC6F36C741C3E01329085B86E9771B796AF1278595354A1292975173C2E03B03F40C6CE79C5F9D88F6655FAFAA9DD5FA9804E89CA54D3956490429464538213FCC82F2520900FB86397FC46CF93972A4E0A59271789E21264DB88062B3C4681857573477A95F1330A2539D010B5731403F9E51716BCD5AE53D4AE9A8DB0CE5D4AD7759751A2020B696F84ACC40160177124C9DE71CEB08927854A24CC51F994CC5CD5BC2D7D3668A8E2141732D47A5F91B73B56DE71D1BD55AADEA9CC2B180F29D430A90E99F171924A6F061311E62F18BE64E966A1040AF31E5E0E6D5A6F7EECF6010532A610FC676B358D29F4B47CB3E3F3111F6BE0C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C1041820830411FFD9, '1', '2021-10-06 01:15:26', '1', '2021-10-06 01:15:26', b'0', 0); -INSERT INTO `inf_file` VALUES ('26193c15-afd3-469d-b55d-eb1aaa2a4b63', 'jpg', 0xFFD8FFE000104A46494600010100000100010000FFE202284943435F50524F46494C450001010000021800000000021000006D6E74725247422058595A2000000000000000000000000061637370000000000000000000000000000000000000000000000000000000010000F6D6000100000000D32D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000964657363000000F0000000747258595A00000164000000146758595A00000178000000146258595A0000018C0000001472545243000001A00000002867545243000001A00000002862545243000001A00000002877747074000001C80000001463707274000001DC0000003C6D6C756300000000000000010000000C656E5553000000580000001C0073005200470042000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000058595A200000000000006FA2000038F50000039058595A2000000000000062990000B785000018DA58595A2000000000000024A000000F840000B6CF706172610000000000040000000266660000F2A700000D59000013D000000A5B000000000000000058595A20000000000000F6D6000100000000D32D6D6C756300000000000000010000000C656E5553000000200000001C0047006F006F0067006C006500200049006E0063002E00200032003000310036FFDB00430001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101FFDB00430101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101FFC00011080190019003011100021101031101FFC4001F0000010305010101000000000000000000000304050206070809010A0BFFC400431000010302030603060406020104020203010203110004052131060712415161137181082291A1B1F01432C1D109152342E1F13352620A172472164325345392E2FFC4001E0100010403010101000000000000000000000304050601020708090AFFC4004311000102040306040602010303010803010102110003213104415105126171819106A1B1F0071322C1D1E132F114234252081562161833437292A2B2D224258234FFDA000C03010002110311003F00FBF8A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A208A0AC4C7CF97DFD89ACEE920903F71909243FB3CA2953A948260E5AE5FEFEFD29962312647F261DADAB54FBB46C10A2D60FA966E70826F595BA5941E25A7FE44A4825BE9C63513CA69A276A214A097A9E03D63265A85DBDF46841EC5AD187C5BBCE0696AFCA56A0904F2039FCAA524AC4D018D5BEDC3CFD886932709658834BD0F0E56F3CA1E22E10B820183A1EBF4CB9CD6B326196A29A1B6B623B74F38525AC2D20DB510B05054C4E5D684CC2A6602BAFF71BC7B4A07CD9F841149580633FBF5ACC11E832268823DA20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20840820C73A5029934B8D789F7DA140A64711AF13F87ED142BF29F4FA8A6D88C289E0920391507D9F66D0D558B097A0245BCA9D7FA363108D34DDAE2172E38BE137E13C0A0608F084104E5F43A193CEABD8AC18C3106D7A5E95AE76A59BCA1791395398105EC3ADBD39DB268B6B10C5F0D18A0C3577187A9E42B5B958372743EEF3D2069A4803AB0FFBC8C2AF777C066624B736FEDA9A44C4BD90B9D2BE7192B552C843AB3A97D1C7F717BDB3ADBC96D6D2925053970E900465CEA6F0B8A18B97F31DC9624FBCB4F60464E90642CA14929539704311C0F9FEA1FB7CFD3F5A9295FEDEBF784614A710422BFCC7D3E828821447E51EBF53441155104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104450C4D92F5D301B70BD6DC3C400FCFC63FF00D79E70067D09F4A6EB9E106B400E7C75F6348C33B8F21786AEE2AD254C254D3E90EA5D5AD6A4C2184B492A25E3FDA08120FE99D64ED09094B93500D33A3F0B521AAB05316680B121FBD3D8EC0C72B7DBCFF894EE97D96762F197705DA5C2369F6F9E6D6CDA6016578C5E5DE18F825B3F8AB54AC38CF1485A6332248D0D5476EED793F2D5BAB4835A3874E7EFFF00F422DDB1360CE99392152D6427759C12921BCDBD75AC7CA1ED6FF11EF696DBEDE6E03B7F6FB718AE0F64E634D1B8C0ECB11BB61B72DDEBB69086C5B85907FA440209233D2B8BEDADBCBF9A425550A167CCB3B50F6341D23B76C5D8084491BF2C01B85BE90D6ABBEB6BF4AC7DC57B266DF5CEF13721B0DB518825F17B89618D2DF55C4F88A5A5B6D2A528992789526739EDCBAF783710711B2E5AD4492522A79F1F7E51C6FC6385186DAF3D2121292430019837A46CFA7DD05474807EFE357795FEDEBF78A94548585A428640F5A710426BFCC7D3E828821447E51EBF5344115510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510478639C7AD10422B70699F61F0D47D34F5A208B57157D9B3B945F38EA6D8B48756950570B2E808952AE4999091F97A647ACC06D3C4090824E8FA3D2D7E1A1830A37E72505FEA2DCE9AF5F58F9FBFE279FC5A30ADC058E31BB6DCF5FDA6D46F5F1369CB0BDB5B3713796D84A5E4F85E2145BAC3CCAC5BB8A5C990148988CEB96EDCF150C2EF8DF096041AD9BFE35B1CFBB88EBDE16F09AB1CA4FCC969992BE9282DBCAADDFAB335358F90FC671FDA5DB2DACC7769F6E318BDDA5C5F137957CEDC5F3EBBB603AF953A5A42DC3C50C9596C24C70F0C72AE57B43C6431130A44C24926E4BF06A7E7817AC76FD9FE071225A54248140C426D9E94F3E2F0CF67F1042F1861576C16BC2C4B0F36E1A4F0A045D37A13D3224E7998D6A2D13978D58512540A852F73E5435F661C6230A9C0A199B752ABB0A80457F0D7B47E871FC3C2E9CBCF65BDD95C3AA2B5AB0F70499984A9B09D73FCB15E96F044BF97B265A48AEE8A9CDC9FD7947977C6F33E6ED89AA77049E548DF55FFC47FF00A8FD2AF72BFDBD7EF14C8A58FF00893F7D29C4102FF31F4FA0A208511F947AFD4D10455441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041A510435372388A40CBA99E5AFDFCEB2C7431B896A29DE0CD5A674E9F78592E020120FA7FBADB715C3BC25315F2802ACFD9ED0C9CBC487FC208717EE9515244A13099827404C7DC56E656EA0294E1DFAF271EFAC371880A56EA475D3FA7F53A3C4BB8AB49B755CA92E04A78CF01FCEA4B73C4B039848127A0A693268403C01BE747A7EE91252A42A6B338720727B3DEF46FC47CEE7F186FE29985EE1F652F3747BA1C4DAC4B79BB4E872D1D5DB3C975FC1036471F096161EB75B8CA95196640EE6B967893C4F2113D7841FC88604B642ADF97D6863A6787BE1A6D0C74B4ED10A1F2CEEA9206F6B906D0E5FA3F1FB79B578EED16358A6D56D05DBF7FB538A381FC4F16C61C5BB8A153C494A1A7D5EFF00080A28009FC99682B89788F0D89C7854C94A2CADE2E496725D8B06D341DCC77FF0A6CC97B1CCA4CF4A545346AE547660DCB3B0E1157CEBADB8943CF5C34C13C43F0AA8599CC95F2CC991D672D6B96AF63E3913C952D4C55A9B5333F961C834761978FC0CCC37D284856E8029C297E35CF389AB3C66D117B84E1B609E2BCBABDB4E07AFA080A6EE1B27888CE55FDBD7A9AE89E1DC0ACFCB4AC97053C474ED5766CE398F8A12662672A596A1208003D3FB7AE75A47E875FC353F1AAF643DD5BD7E86D1706C6E38C36084C071213139990273AF50785E42A5E025A5A8406F795ECDC9DE3C83E2C27FEE73526E925CDEF6F4CBAB1BF41B8C2D05398311DAADB2D2433E4F5AB574EF1578ADA494A003DE96820520924E5F63CA8822B488007DEB4411ED104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104332D00B2A264F41A67FE32FB9A0162595D1F4E1EB0AA57BA8AB801DD850D4F7EBCA14CB4F80A5C6A73F21A7BE4E5A23713382CEE876163D7D3BFE60B124DC36DB82DE42AE20054E69232D46920FCE75D50C4CFDC40054ECEC1C503D7FAE1CA16C061FE6A9DA97E4C4971CEBDC0A67CC3FE259EDBFB39EC5FB88C6714BEBFB556DCE2B66FDBECAE1FE2A3F1172E3A54C5CA92D1525D596D2EA55EE194EB19556F1B8D4A50BDE57D441662E406B1A38EBE917DD8FB24E2D7266CB42BE56F0F98141C100B0619E649D4F38F811DB3DE2E2FBE2DBEC477BBB68E5F5D6D0E23777772117854E5BB69714E78296C392B03C352444E59655E7BF124D3336B29408A28B9CD9B2CA9991C4C7AA7C307FC4D8E996DBA4245281FA50E5EE8F67DC630E3D69885E5DB1174EA901808465EE2B8444E7F9634FAE74D14BDE90D9B503BB8EB763566E8F1954F06728D2F5BFE9F2F530861F8C9BC69CFC69875AE1E20AD424E49CBEF43553C6319A684107D8D732EF607AC5870B3C26592AB1029ADC55B5C9BEEF10B6F77737FB71B3563624A9C7F6870461A08CCF0BB88DAB6E4013970A8CC0F955B3C3E80A2839EF0E771DB8F7CA29FE22DA0942561CD942EFADEE1BB3F08FD407D92F6311B15B82DDC60086FC216FB3D873E5311EF5D59DBBEA310352A24F53CEBD29E1D4B602506144E5EC97F2C8671E50F13CEF9DB5710B705D43EEFC3311B3496C01CC7C8F79CBE1FA54FC57615A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828821B3AB4A544150062403E5590905CD011E777E30DA62941C55893AD2A1BF5E50D9B7D2B497152809FEE5E49CF2CB49C87AD68A9852145C80900DE9C857B3422941597DDBDC900F9FEF9B461DDF76F3F04DD76C3E2FB658EE256B8761183E1F7777757172EA5A014CB2E38DA10A5909E35A90123AA8819CD56B68E37702885391966391F7CE2E7E1ED9E274EFA9255660D4AE4DD6DC5A3F385FE203EDABB55EDABED378B6338BE2574ADD8ECF623776FB0586B8EAFDF2CF131882AE995294C90B7590A64B5A82273AA06D0DACC6602B2581B9D41AD4F1AC776F0FEC69625A1210024350240BD4F0ADAD6F3D78731F17984B16E2C98B661B9485787C172424812AD358907A6715C7F6A6304DDA0B50373AB82E38687DB978E8F2D230F204A14614E1E61EE1B90E062C2C57690DBBA96D0C85DAA3881E24CAC98911CB23CE3E4269D024CABB535A6B6EB6CDEF586292A54F05A84E560F62C5BF3E916A0C4EEAED38A5DB07C312C809320E796401CBEE2273AE624154FB9626CFDEBE6F67D4889C4EF26428D430A87CEAFFDE71B1BEC8BB0979BC6F68FDD0ECC23C172E6FF001D6AE5697412829B2B862E3300124808300E522AF5E1B96EA41A0A8E6DEF8DAED1CA7C598B32BE692A20310CE6F4635E55E01F48FD46377F689C3B63F666C4A63F0B816156F0065C4CD85BB6AC8F29498AF456C30D8443061BA18767C838F7C4F9DF69ACCCC5CC59B93F97F26CFA45EE1415313975A9B88E8F68820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20886C47F0E9429D5BA50BE24C4A8246640239CD658B3B75E7EEB5F36704952C92029B32C481D7DB72A431C582DF612CDB381B6D0DA9C7DCE284A5284859248D321399023946551F8A5A82083762E03B3694CC8E76D042D2A484946F060E03666B4E6072CFA47C5B7FEA1FF00E2238D31B43B3FECA7BAAC7949FC4A710636E6F70FB950FC280843F68875C657EE789EF27FA91331D6681B6311F4AD5BEDB8F404125EED99E3766D0C749F0EE1C26624A430514F61A7A91CF4A7CB7EEEB0DBA432B6F197495DA3AA7B0DB85A8F1DCA9F70BB7478D43DFCCE64684E7CCD722DAFB40852F749CDC3DA829AE7C63D01B064A44A416B80030D296D5EC7D488C8D7D8C97EE5618052D70A5000D3DD10743A4899D0CCE46A80B9E6662F7AE5C0B335684D1BA718B1CF91BD4614A583D2A75FCF786A2D9BBA1FD4D79CFA4E7DC8D0E43B0CEAC7296AF9391A0D2BC3F6D5A7186987C2EF4C14203DEC0D4F98D3EF148B06ED78D981C374A4C003FE9F231E4395474C4EF4D14BDDB2B135AD0FEEB689B9D86DCC39A1B162C6BE753EBC6E3A93FC19B76771BC2F6F3D8252992EE1BB2CF5CB974A20A90D7E22C8A9AE230401C439F38F4E85E1B961E58FA6AC6B7E7C69F78E03E392A499C9245281AF7AF2CDCE7AC7E8C585B29B6B3B46131C2CB0DB690232086C240CBB0AEFFB1C3615219A9CB38E0B8B24CD24B3B914E0D7B5625DBE7E9FAD4BC358528820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A208A3C41C6524111FDC7435A15805AFAC11E2DD4A412015C65091268F98343FBF79F9410DD37D6E484A95C0B248285101498EA279F2A3E60D0C10BB8F36D23C45AA11CD59401D4924563E60D0DBCFF001C7CA08F5A79A7D01C656971B54C2D06526323047435B82E1E0852B3045256018CFEFD68823CE31D0FCBF7A208B571E6FC4F01A09754A5AB88140948E15030B1D3A538972BE64B52B78242323405C93D843DC24D4A5D0A6B356ACF50E39DB8D738E7DFF115F6C4D9AF637F67FDB4DE063772E1BBBAC1AE2DF03B2B2527F1CF5D38C396C9534DA882A0D3CB42DCE1CD284CF4AAAED9C64BC382F352E410CE32C9AEDCDB5689FD99B3558C50051541B9142E4EEB3D2DAF611F975EF2F7D5B63BEBDE46D36F3F6C7164E218DED5E3776FDD3AEBEB75C66D5178EA6C9BB752C952562DD4843892609C84015CA36EED295B8A295EF1ABB106D50E34CFBF38E95B2B644CC3142D6592902CF60CCFC18FF548CF1B05BB1DF0EDE26CC6C96C06D46D0D9A1294E197383E18FDD372EC078DC2DB0470C9CA0F2CCF4E1FB73C45829626A9588952D52DDC4C50750D031B9B679657E8381DB72B01BA161F75B7788AE763CFB0CA376B63BF8757B536D1DBDB963763B4ACADE1C454FE11789038BDE1242758C8E473CC93A57259BF123032316A48FA994438DD3D4135ABD357789C3E2BC2CD48514EEF16003B379B77D62736B7F8737B57EC6DA1BCB9DD86D2DEA1292A09B2C1EF1C591130014807FD55B303F11F67CF425090D40EE0573A375BD4BF087DB376F613133025050A0F5620B372377E753A18D3DDB3D91DABD8BC66C702DB3C0712D93C5ACD6E26F2D71CB65D93C82B82D8521C1C43887E59D4C413CED9B3F6B49DA0B4992B1BCA228E0BF519B699C5BA662A54DC2AB75988EA0B3963DEFCCDCC7D13FF00E9CDDDBDD5EEFA37D5B697765E1B7828D9DFC05FBE8E1688B861C4385A77A119647D729AEC7E1C401F2E8080CC59CF337A172D5AC79DFC7C903E6BBA9DC84A43A8B3D407AB67A0ABC7DB058A38D86D695A5423549904C09835DCF6497C3279379C701C511F394002189BD0D4E6D1209494CCC671FAD4AC368AA8820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A208A4AC0319FDFAD10479C63A1F97EF4410718E87E5FBD1041C63A1F97EF44115032268823DA20828820A20828820A20828820A20828820A20860F2149716EBAFF000319402A80206797CE9057F23CFDF7BC11666D2EDADBE06C1164D1BD7D2098653E249F4CF4CBEF2C41166E05BCBB7BCBA51C630B7EC9CB8570A1C71A0DA441E104151CA4C41EC2688232C5BC9654B5A85CDA3E029224AA124663A089F97C48224ECDB61A6108B7484340A884A4400493390CB5A591FC4756EF0439ADA08457F98FA7D051045344116D62CFDD61C9BABDF716D0485A52A24F021225D24682132673F4A8ADAFB59381C217207D24BE74239E55F3D61EE130FBF346B4E01F2AF0C88EA23E367F8C3EEF77F5FC42FDA8706DC2EEA2EEF2DB775B1572A6315BAB75DCA6C6E5388B4D3AE788B6789A5F84B43807101C24419AF2EF8CFE24CBC0CE9FBD3095249F96970519BEF54D9B22CF7B18E9BB025FC94277F777BFDEAFF713715CD99983F988D9AF63EFE047ECE7B90C1B0FBFDE660ADEF076990CB2F5E5A6256F6D8A61697D438C8436F36160024F1839C8AE05B57E2999C66113882778108564697269525F3F38BD7F9094C94EEAD237B2984351ACE5BB3D63B05B19ECE9B98DDC61CD33B2DBBBD93D9BB665294B16B85E176F68F909802108004981A6624F3135C43C4BE3138A54C57CC7DE2436F56A4F17A5CEBCE23B153C4C56E041537FF1121D2332C6C34F4148CB78761B6966E8559D93F6481012C7861B291119240301433F2D35AA12F18668F9EA2CF5AF0D78039641B3A4252E6808604115078F0A173C34D5A24317167736E59BE65C711C2414AC05020F9E5E5CF2E734BE0FC512B09352952EC46741AD29AF730EF67CE5CB9A3E42D285121EE120D09B7534C985E38F7FC473D89374BBF1DD4EDA6D3B3B38D61BB6384D91BB671CB7B4659B8B95B2953A0AAE024AD45296C2046931AD778F03F8BE4CF99282144311BCE456A2DABD6B9DF9741C16D4C42657C9C42E5B28109DD35B5779ED95ABF7B3FF00F4F9EEA319D90DD0EDC63D8922E16EED0DF8B5B75BE1456EA307BFB8B702559ABDC4011F488AF68782270C6C894A0E4A8249734B86BBFEBCE39478DF1BBF3378A80037C12E1C3D1F5173D6B58FA6FC25C53962CA94C9B739A7C2524A48E131307918915DFF00662372424337D3F88E233CBCD59077812483CEBC35FB448D4942505104144105104144105104144105104144105104144105104144105104144105104144105104144108AFF31F4FA0A208A68820A20828821647E51EBF53441155104144105104144105104144105104144109ADD4B7A83F7FEC51045958D5E3172EBD69E25CA1600109308CFA798FB148ABF91F77AC109605B396885975E6C5C2559C3E0288E7CF2E9DFA56B043EC6B6770BBCB77FC4B0687829E2654CB490E056B918EA069C851046161B6DB43B3B72E30AC3EE6EF0F61442129694B5F082604640E9CBFD10465CD8DDB6B2DA6C383E8B67AC9F6F272D1E4043A0CF240CF3D7BF6AD3E60058127562D5CBBEBEB045EA8B84ADA0E942900980958856B12474E7E559F9BC55EFAC11EA882B81993F2C86BD3E7419841673C6BD7FBB41082EE1A6D6B438A08298CD4400644E46B066D0D5563EEF19170FAC6B27B4DEF217BBFDDE6337B68BF1B14BE43769855B33EF3CE1BA5FE1DD52500F11084B9C448D0024E715C8FC7BB653230D3D1F308514AB76BFC6878E7DB57AC59F64618CD505252C10DF31EE4AACC1ABAD79651AAFB8ADD4586CBECB8C7EE6DED95B7D8FAD7758962A1224B6EBAA759487A3C42B6D973848568A112057CEFF89BB7277CE9FBB354594AA856A5D99F8E94B333C5FF00012CA081421830565A1F4A371E7B09636C6C4ADB45D5CBE98042DE5F12CAB55051FF00A857E5E511E47CF3376B6297356D316CFAB539D5B36F3AC4F7D6A4212B4CB3BAE086A0193529D33AC797AAC42ED4DA0A2CF810A9F1784F8E04823DECF3FBD29862264F9A1D44DEAD7BE7C6FE56B0D44909720A9943F893F4B8B3701A449B988ADBF75B425C504A4788E895929039F6323F5A55789F978420ACB806A491E76A0E19650C66CA284155537648A015CBC9F9B690DBF1A5FF0076EADD95248E4993DB5E9DC4F5E75CD7696D5988C428254582C3E6CE79B71FCC35953D52D745117A83DFEFEEF8A37C96F60FEEFB1F6EE2D9B364E5B969D4292381497429052444199C875AED1F0C36B4F9B8BC3A43B1525EFADF4EE474CAC92316A423E62D64A88A026D4AF916D3A45C3EC57B23826C66E3367ED365F09B5C3106EB1277FA4C21A5A94F5FB8E294BE0E64A8C1EE3AD7D51F84A93370787047D44249241E3566E57E4358E61E2A9E664C9CA2B5105BE924103CF37A664C6F95AF1F80DF88657C2388832248072F8D7A525A021200D07908E7A15BCFC0FBE5CA1C5291B414410510414410510414410510414410510414410510414410510414410510414410510414410510422BFCC7D3E944114FBBFF0064FCFF006A208A8249008220FDF4A208F780F51F3FDA88214488007DEB4411ED1041441051041441051041441051047848027E5D688222DF773E7EA72E5AE7F64FC48220578797AE4BFC392C8CCEA741E7AD22AFE4608B86C5AF0841CBAFC3B9ED5AC10929775F89B801014C80380998329CE3B7DE74410CADAD6C9DF1BF1366CA8CC9E3427424E79F59E9441186DD79EC1F780EB966DF87875C2D03C240842211072190939F39FAB259AB07073228FEFF0030466C2E2AE5F6024FF4D29E254130AE2483D391F856AE753DCC10A5C5C1B40FBEA9E11C013AF3CBEFEE300AB3513C6D04446216CEDFAEDDC4ACB49852DD5494C2520193D3219498AC2D442165CD12A373A18C8B86BB86E71CE5DE862973BC6DFEFF00212E7E236536023F1E12A2AB77DCBFB70A678A4F028A1D1CF307A9915E2DF8C1E334ECEDA33F0666B315021F813DC7987E71D4FC39840BC1A5652904E6CD6377A0F74BC66FB36DBB4C2587D88E06F8901034080AE14E404649033E990EDE20F16EDC4ED09B30EF05051373435B8C87DEF16642129510033588018937ADE95EDC22590A0E202D26028498D67CFF00DD51654B0BFA88CCDC31CFAD72D1ABA43C4AC001EA78DBAF0D0BFDD839289199E83D358E5D3AF5A6D8C9D2E425449A797E32CB9D32541053BB40C439D1CE5C7335147610D56E24B9075E632EFF007DF99CCD57B158EDF96B093420D34D2D5F778D9787DE946809AD49176F74E59BC535503825E2A7B004EF2AE7526A0B7E7ED158992CA66804B549616EADEF84620F68571D4EE9F1566D64DD5CDDE1AD3694FE6295DEB685E999C952794666BD1FF0AB602D38AC3929FF00720B805AE3D7EE7A494B5A84BC8848BF3D03E9D78D236AF725B3AD6CE6C060384840496ED10EA931C2429E4A5D5748F789CFE35F55BE1360BE460E43803E8431B56DC78646B58E6FE235154D9ADFC722F4F747AF2CA33D5BBA3C24F1647A65CB21CFA0AEF4A67A5987A7BE778A6243121C1E5D6FFDD216F151D7E63F7AD6378AC104023434411ED104144105104144105104144105104144105104144105104144105104505694983AFA7EF4411E78A8EBF31FBD1041E2A3AFCC7EF441078A8EBF31FBD1045054D289F7E09E522474D3CA882105DBA97F957944E4743CBEF9E74410E59429B6D295192264D1042B44105104144105104144105104144105104144109389242BDE0001CCE9FB4D1045B57B74865478B88C4CC73FF1209F5D288225B0E75B7ED1B7384E723319E47BFC7D6932824921BDFEE32013610B2D694C8022798EC7B47C72ED4990C723CA164CA0AAD85BAB642FDCF78667124A16EB5C6DFF004C0993EF264492AEDDB23DE88DFE466DD03EB9790C83968B3711DACB1C39C2D2EEED9F79F3C286587029D0498F7933AC91F5A23030E4BBB86E5EDF87E229C130379EC42EB13C490DA997FC35DA367FE46C47BC5615A7148E1035ED35ACDC12B70AF79AD406A59DDFECDC21BCC1F2D401B17E3EF236B18BEC2036DF0B412956504F200E9941D341A77E906711FEB7C904EFBB1739F063EB0A84A481561A8F67B656A44462D78D7862DDC9487149F7E3DD94107CF5C865AE50273B1E1B63CD9F2FE605BB07202AB5C855B8D78F08748C0AE60DE410DA532D6F56EFA462FDEFEF230DDDFEC5E278D5E5C22D12AB376DED7C4586C97DE41619E19227FAAA4E633CFCAA8FE2ADB523C3B266AA7AFF008CB5B82A1FF13C5A8C73CB38525ECE5CC514A6AA494BEE976E63D75EEFA05B91B0C75DD9DBCC5B1C478DB41B497770FE2D7484AD41DB745CB8BC3F816A1C4A86149078B2E432815F24FE39F8E93B43C518932261DDDF50001D2F47A5ADEC760F0F608CBC000A71F4FF00B8D0737A57FB8D87B5BFF0D3FCB1E65E408010B526100E5993CB3CE73E95E795ED799356E54482753AB96E678826260E11EA92E03B101FB51DCE629F68B92D0165A4B4B3C4A124A939A7324C4E50454B48DAA809DD20BB5E8C7F5EB09893AB5CDC90694AB7AFE21DA4CE71A9CBBE83EB95426D19D3315BC104806C051EF42C076D7ABE486247BF6D10B70EA19B8216415023DD1911F1D7FCF6A811F3503E52F7897E94AB74A7BBBF96B4AA5697BDEEF5E9D876878D02E20B8AFE93600256E7BA8CFBFA67DF49AB16C7C3854E4AA60012487F2B3D9ED71C6ED1058993BD314A4B3E82FA656E1D58C618DE4E3981DCE2182ECE5C62568E8BBBA415B61E49092CBA858E313919194E875CB4F587C3618695370E5D0900A6EC0BFDEF566A5A12FE32D60A4BEE9A0772CEC35A8B746168DD2D9CC5ACAD3F0564CBCD5D7896D6E96FF0EA0B0809653F9A208D07F800CFD0AF00ED5C14991210264BFE2960142EC2FD0DB5E158A26D2C24CC4C954E52552824A89F9819C12599E873CED1909CC52DDB70B706404E4223300F977F9D77594B913E58989C44A0E0382A0EEC38FE69DA2AD2F662948DE4A98126A74761D34E70A22FDA5E8950F3F5FDAB55AE52003F3659A904850CBDE709CCC1290F576CEDD6D6E6444A34F23813C326674923BCEB07C865A5335E325A4B0208D41E5D3386AA96A45F26E07D8CCC0AB9099046604F0C67E5AD23331E94644962C067FF00DB6F65A1B99890ADD37E7EF5B3C788BB4A92094A927A1107EFCF3ED5A2768EF16DD20D1DC0CF8D7D2174A0AC021AB50FFD7AC565FF00FA89F3CBE84D4A4A0A58DE2CC6DEC0F7D9F3F2D4ED4ADAB4E5CFFABC79E39FFA8F89A5770EA3CFF119F92BE1DE2B4BB2341E99451B8751E7F88D770F0F7D2140A07B1FBD3AD6A43163946A43163945548AD6524D0306E756E3188A0AC0EA7CBFDD227120121879FEE0838C743F2FDEB231209018579C1092AE1093041FBFF34F512D6B48506AF4848CC67666E37F231EFE21249804C7435932D42EC1F9FE23433C26EDCF2FFF002848DE278CA122549891CC489F877A426A8CB2D4347A024D9CE7FBBD28635389A80002F9BFE3D87EB09AF1065B5842D412546005644F909FD67E94C958F4255BAA0D56AD3ADF8C60E2802C401DFB33C7AE2D2525D198ED9CE5AEA7FC548C9DD9A84ADE8A7A8346F7C6F02A7ADDC27E9362DDF87115ADA1AFE2D80095389491FDA489F818A658BC6C9C3024AD34A9721DBDF0D03830E657CC9A5820BD1A9ADBFBB738B4368F78BB23B24C2EEB68F19B1C1ED500A8DCDFDC22DD8000CC95ACE83E755D9FE2BC2C956EA88E7A51DCFBCE26B0DB1717894BA10A3C0073D83FAE91A6BBD8FE257ECB5BA7656E621BC1C171E75BE20BB3C0713B3B9B90A4EA0A14AD7B76A64BF1C60104825D9EA18DBF7C62CF80F87DB631D284C4A02378D1330282868E32D7567D239FBB45FC797D98ED31FBD6AD30ADB7B9B7B72800DBB366B4AF2FED21C00F383A66075A8099F14B672715FE36ED49005BAE74EB6E313137E16ED3C3E1FE74E22953BBBCDAE9D39C7537D943DAB3653DA8F77184EF2F636C318B3C1B17F185B5BE2CDB68BB3E03A5959525B5149F7812209C88E8455EB656DC95B51095CAA6F65C3D7AE6C639FED4D953366A9495D4A0B1777ED973D637090EF124129209131D3E3156058280F43C8F2E1C620D13378B311A93D721CA2AE31D0FCBF7A13F53366FE4FF0088557F43BE515020891410D431AA54141C47B446D051041441051041441051041441142E214329313D4FEBA510441DD61FE31396B3A67F5FBE7144116EDC58E2ED38A45BBFE1B00FBA9E25089CCCC69D75FA524B51721E9EEFEF9DA1E61D28287500E4E6389F7588F5D9ED01822E675CF8D47D7335A43A094E4057AFAFB31430E5C38DDED93E034FA1290BBB57BA973881885E731FBF9D101166715CBFA3D85333990D706D8FC2BDDBEB809BABB0A2A4B8785680AE23A1226040D3A40E704614486622D576F6E7215B68F1925A49084050485240108D0002123E1197A695AE331625C929CCD88E4D41C751DA18CD413535009B8F3F261AF011497614467AFA76EBEB1FE6AA5225AE662F780533DCD337FA587BB57368AC48954CC137F74A9A30A5E18E236D6D76DF84B212E6AD9D0A888309D27400E7CE3A55F25E32660A56F95B0082F91A248CFC9F4E912180C7294A00541B8CDB3CCB665EA0718E597B6FBB8CEF0369B61B73F845CB96CFE2578B7AE54CAD4996EC1D6AEA1C89905082065067400D78CFE37F8C4A7FC994164B058A13620F117BBD0718E9BB0F65CA9F2862124013189529A841D73FBD3AE68C1997B05B7B2B266D90CDADAD95A5B97B87852A71A61B69C515692541473CABE5CF8C14ADA3B5E762007056A2146B43E77A791D22FF00224A30F2848241DD01F7454BD6A1D988E2ED17336DA5E22E3C443EB4E7C2D90A333066333D32CE67CAAB08D9EA2E40A92CCDCAD46EFC808C198949284A4A121C1DEE232F4EBAC4DDBCBCDA5650A6C1905247BC08CB31F4CCCF5A7A8C1AA8198B54E8F95B8356D0D17300A3D4E6FF007FEB38916DAFFAC18D32FD33F5FF0074E656CF35A10491522CFE8D5E5943698BDEFF00711A9B69FD311C231A6F0F0ADA2C5ECD769B397D84D95E70C071E756DDD024E454532476CF41CB28901B004C4098CE74B922D50DEEA79624CC095AC12B3BCC5CD5218656E02B7C8EB801BDC96F571869C631BDBCC5ED5974903F95624F200049309E21D08E5CA9038656115BCCDBACC2D6ADBCBED1BAD6925560750CF4008E397DE2DC77D8FF000A7AF6CEEEEF6EB789738C30B5AFC7388A576FC64CA4A5447140F9721573D81E2B56CD5A1456A1BA430701BCF26A1E1A1AC7CC595294459C5412E4B74D2FECE44C1F731BCDD97BD373856DF628B602006138B624F129012520980069198CF5EF5DCB60FC619D8308099EB1BBA28F0E34F40618CF4A672548504AD2F621C3F1D4E5700DE2FDC3B6977D9B1CD2157ED5BED132C294A5DD3097EE94F02660AC91309CBB1CB4ABCC8FFA81DA4852509C5CD01C0AACB3578E435111337092C277004A5811BA96043BD59BF558C93B37ED2EC17136DB4BB3D88583A212A58B50D3614041CD674CE672EF5D0B617C73C562952D33F124A54D5DE27CCAABA1CF38839FB28B1DC52C924B6F3B6B4D2FAE7D6335601BD0D8DC7941FB6C79AB37DC88B4B9B94204CE49080499EBD08EE4D773F0F7C42C163928F99392EA6FE4A0D5B9A97B674BE510D88C0CD4072016D3F96879F6ABF01191BC67EF5B4B8976DD76CE094BF6EA2551CD5C432939673E75D7765EDAD91884A54B992882D5DE490F9558F971A8688C560D2545D2CACF7A84B016CE8C5BD6CF5B6E069210DBA5D4670E2D4173D4714C64646556F9123093A5A66A11294156290922F46A3380CED9C2C896508B330ADC96FC5AD9C48B6E92331946503AFAC79D23895A70E92D714DD1DA83DDE82125ACB543317E3C21D0526341E801FAD468DA254A6097E3EC7BEF0D97308B5341FD7E5BEF5A4A4E994F2FF1A7C3D69F4A9E99A2B43D9E9E46F639776EA9CB0ECAAD3A67D7CEF0BA220693F3D4D616A4A5443B935157E37FECEB0A4B51525D5724FDA2BA44A4ADFF00AE83DF38DE102412634FDB2AD7FC71C3CBFF00D608F2B230E9F607EA086EE708566067CC810329FBEF4BFCEF94022CD4B1AB572311B389DF60F6C8FD87BBC15A1C600F9B5873BD1F58525CBF983EA4D746A5CEA0E82185F3B656ADA5E7DC5214A39F86614A8319CC4C1C8672396B934993D0B503BC1D4ED5CBA16032275A43D95B3D730EE84D732065760CF907A88B3B6AB6DF65765B0F5631B478BE1985E18D214A55C620FA185A40199E224267BEBEA29B4C9725492A2536A03F661EEB4687B2B62CC98BDD32D4496FA98EEE84BF06FEE3955BFDFE30BECABB8BBCC5B0D6B68713DB3C5EC12529B2D9BBAB3BF4F8A50A29496F8C2A01D408CB903542DB3E3093B2E62B0C998A0A4B8A1A6BA81AFA3DA3A36C5F00E37192913552A57C823EA0C77EA28D6F4E85A388DBECFE3CBBECDBBBEBAB7DD3ECF613B3D8195AD2D398EDB3F6D8B96E4F0AB89973878C8CE4643280245738DA9E3D54C27FD4357ABE5C6B9D2F46D6B16AC3FC3D129BFD206B761992DCACDDDDDA39D3B6FED7FED39BF5C5311B8DA3DE66276F86DD70F16096D8B5DA18680490B4B76EB51090A1DF3CA6A8B8CF15AE62C8DF24AAF527EFE4CDCDA2EDB23C1C990A4112D346B8C9EE28FE51AE78DE39676ADDDA71AFC6DFE22B0A3F88BA8778972493C4A20E67BF3CA342C7FEFAB50BDE97AD69E9E51D4B65EC544B4005291BA34A59CF6EFC811185B0E606278AF05B3AB37B8B62D85DA35689325297EF1A60C379900A57396A290C0C85E2F69267392EA15A117EFADC6B5884F154E461A42E582032482006B7E473CB468FD14FF8766E72DF72BECB3BB4C19C6CA2EEDB0D174F248851388F8770272CC8F167EF2F5578370DB9869273600EB517E793B5695BC7913C598BF9B8BC44B3FED53825994F577E047D9AE23A1A93C494ABA807E226AFF882529000A65C6CFE6DECC52B0F55BDCB9278302DE7CFD60041CC5664972068FE6F0E27D52DA8EB710B2343E7FA0AD95FC8F3F4A42328302346FBC57588560A20828820A20828820A2082882122851513208310348A208560741969DA8821A3D6C1C515152B38C81D0F68A457FC8FBFBE9CB942B2E66ED353E5EDF586CAB04ABFB9D1EA63F4CFBD6B0B7CEA30207FFEA9F6880C6F6751895A1B66DE76DD6A20975A5702D4279A867A081D46BD0119130D492492D9E598EDCF8C2D85E088C330F45936FBCE2923375C502B3273CF4D39FA5119F99CDBEF639B5BEF12008B5050AF154948F796BCC99EA7A74E7F5A467618CF0031700B3FE3DF2816A0A41248B331390B505B87DEB152805A4B8D9E21049CE4E43B4F4FBD4AB84C0224A82D4056B517A93C3AF663157C6EF952B75EFA114390A7363722ED68B7AFEE12DADBBEB8712D34C3370E34851E152FC36D456540C03F964768CC542F8A368CAC360E67D607D2A6FA99AE3CECF9D4D6253634A9C54860E094B8625DCB1CB4C9BCAFC45DB7F691D911ED23B53798B0BA7F15C11E6ADF675868A14AE37982D5C00951E3954641199244D7CE8F8C38D9D8A9F88521649758BD0D59A8C19B2B47A5BC298290AC1CB92B037581340E480F9687BE5568CBB84E39BDDDBE71972C1BB6C1B01BA585316F8925E63134B6A5492EA40291C5AA0E85275E55E47C46CE54D9A4A85779553EEAF52D121B5548978829960519D839A00D5152D4BF03C636D763765EFB02C350BC42E7F1576A4F12E1456DF144C0E283049F5035AC4BD937FA43BB00C41E449B0CBCEEF15F9B8A2A59417E2A0EDA70635ED98117AB16AFDC3697941A41512385220009240D27BCF7A7C8D904B7D15F27F2D7422838C3533C2014825441B90E7BBB43D459B89E69D3BCFDFCB4D29C276492A622DC1802296B1E6FCDE105621F3B59957E6FF88A6E703B2B8683A96909BC2656EC09510444919E42227A6B06A625E125CA921012A2B63BD620F07F7D2F088C5CC44C505281416DDB922D723956A5853587B6B87B4D33C0F296A580608323CB965AC79F28A86C5ECD4CEDE0DF5170187BFED9A8F189B899A4FD0CC4DCDDB872D3CE133873438D456E05E5C1044089D3991D79C54327C3938A8B254483F4BDABC72A5A03314A29DD2376CAD6DCB3E6C6D94242DDF7521170195849212482441EB3D80F86752786F0E63A852086B81A5FD321F78DBE9DD26CAE19F3A738F51645B5296979CE1207FF001B8A2D8408C91DF9FC69E0D97324ABFD451749FE24E79F115AB7A65A6EA492E91FFCC456B98BDBADE2DCC67671389A148FE578392ACBC47191C7E64C6BDC472EE2A57098F5E09492950013A65DAB95C1343586EAC3862417E7DA8C29EF40D8C712DCEE1D8CAD6CAEFD5835E364290E614E861614731275FDEAD381F8838BC090113961233DE37EED969DEB0CE6E0D2B2494D6AECDE85F864F9E822350FEF4F7560376589BB8FE12DCC26F9E7AE6E3806790100E444E9A4559F0DF1AF6AC8094A71539280400CB56B5CC0E43BC319BB39054E101CEA32BE84B7F6D431943607DA57673137D9C07692CAF301C552AE05DCDF368B6B0796A248F016A32ACC00ACBF3111DFD31E02FF00A81F9B80932313892576FAD7516E24F13DEAF1058BC1A82D4121806B51DF2F57A74A46D2DA6236D72C22E18790EB0B48521E4AB89B5057BC08568723967CF4CEBD0FB07C6B276F041F9A0EFB31DE70FA82E5F87488C9B2181A392E0822BCDAFCC5697687CBC4ADEDDA6D450B794A2470B602940CEA474CB289D0E95D43038144E4158DD60017C8BE64B1D73636BDE21E6A56926967C891CBD3BD9E1F255C680E04A803FDA47BC34D47DFC6955484CA528A4BB1CAC4559BBDA90C26129C8F4BBBD843A654481FF975D79C5472D6EB22AE0DC9B30CBB7087D20BCB079FDA14592001D67EFF004A7A9237732D702F5261588EB8BC0C29280CBAE951CFC34C84CF33F7D69CA64EF237F7D22B626A5DEDC9ABFAAE5AD6AF71CE2BB8B945BB5E32C1298931A8F3F2CE7A4674829494920A998B7AFE3DD1F1112DE356F72B73C169D5A1A897801C19CFF74F633D0014B8952E6A77C9497147A9A3BF2F4F386C70AA98A4B7FB89B7DF367E50C76876B304D9AC02F369318C42DAC308B0656F5D5E5C3A96D96508924ADC3EEA6025524FC63484C7997252A5EF064BB817BD1AAC28EE747B9896C1E109989941277CEB6D79E8DA18E0A7B647F1CEF672DCD59639836EF71DC376DF6B6C92F31F87B4B9B5C46D9BB8014801286DC0B052A1EF4E7293A72A26D3DBF2F0FBDBA40A666CC2E3D0E61FBDE3666C45AD43E67D24336E50915BE7406C3A068F93CF690FE27DED2DED3D8CE22FBDB71896CA6CB3AEB9E1E0985E217564A530A51848B7E2289E18303204F3CEA958CF1B1438334B00400154CF5E83BC5E70BB092129FA0BB8A33E62BC41D7D19E352F655AC731FC4978B5C620ABB2FAB897738B3CA73117540FBE5F5E739E692732233E75CAF6FED39FB4710A9A851AB9727D2B5E14A748EDFE1CC148938044B28E7415E56B1E3EB4CDE19526DA54DD895369F79C00F1E594827B0FBE74E9F2F12A7FA946A6AEFEC657CF8C4E2A4E140277464C186B5CFDD1A14C3F6999B26CA584DB32FE61C7D43856E6A004A844C4C08EDD2929180C44D58241041CDF3CE95EC38E51A7CF91203A4806BCCB52C33AE6D912F18537938DCADEC41CBCC482585202DA65CCD7C6A480509332003249D055830BB1672EAAE14A6BD73CB8D5E31FF7C932412E2C74A30CEB95697A56CD1D0DFE14FECC175ED3FBFCC3EE2DEDAE2F3677642F70FBCC5D7768E34BC55C0FB019500524A16DFBFC530418ED7CF0F6C55267CB74BD45817A5DB8654D699C722F1A6DE42BE6913004905892181A80E6CD501AEF5CA3F431D9BB0B7C1306C2B08B56C2AC6DAC2CAD136CD2415B26D5869A1EE400904A24EA20798AF49F8730624C8410186EB579598F1F5B078F2FEDCC519939656A054544BA5D98BEEB74A3BDB52232234A3E1254A82607E5F8019F3EB53D8B6000E7EA3F0623F0409054482C00A5AAEDE5F8E752223D73AD30EFBC092F42DFDFB6873882C87F7710E11A1F3FD052CAFE479FAD611945C13AB7DE2BAC42B0510414410510414410510414410510414410520A0CA3EF8FDE082B10422AFCC7EF9511973A9EF14D106F1D4F7860DF8CAB8BA4BE10AB684F8204951CA4F148826748F2E735A9C5A650751B02CEE7EF4E7A16778C09BBC580AE84063EEC6A6F9443629B4786601875DDF62453656B6E852CADD86D30013CFDDE5CCF6D74AE6D7F1548C14A51DE09DD06AFA5433177763D69430FB0FB3158B50F9680ADE672059B57CCD581E2F1CDFDE56FCB787BC1C6F12D9DDCD5ADB5CD98E3B5BDC5313438BB669B7125B51C35E6090161255C53202C0D6BCD7E36F89328A66CB137250A9B5C3DF507A3F38B860362FF008DB8A5218674B659B50DC509AE9168EEABD92F6236318BDDB2DA2B21B57B758E3CDBF7CFED0A1ABDFC1BC1D24FF2F2A4F88D8014A8933091E9E5CF106D795B5A6AD5BDBEE54595506E0E64D281B325A2ED85DA3FE1CB32FE61960060A0A62E1A879E7964CF1B9B63B1D86E1B6ACB8C3447B89290E2471A724FBA3A246881D001CEB9D62B664B52F7D018073614CAA3EEF4E108AB6B4DC54D50984153B1527302C78DB8005DC9891B64F128B440E10787CA63491A7AD272F67241FE2031B8041200E55E34EC0C6AB98A0EA2C5DCDC9E1C3BF9522585B86FDC48303CB9E7AE9F3A792F673D5A8C031D682DD1BF30C264E5283871AB0A9B0B547BEE785D95F0FF0014ED1B2C33EEB16CC1AF260DD4F7D10F9A599D479B7A8CA3D09E1CB3F5D6994EC0284C6018756BFBB423F3EBE66833D6BEF8C7B4A48D9C1C2D6064F47BD6AFAE5C7BC3844DDE00062D71E9D385E8D14139E5F993981C8CC4FCBECD4EC8D9F86491BC9191B015E7D87EACE12A041191BEB476EFCA1322091D3F6A974C9C24B05928A248A00F6CBEF0B82E1EC4E9CCC56940201CF3CBD7A695CBFC452A69C72CE1DFE5BB0DD2D95CF3F57845530A0EED2F753D7367D6A2CF9F5ABC2ECAF87F8A869783C44C0CA4AAA2D56E1771F9B88D7E6162412599EA73D397210C8E0F6C1F55F2DD5071504A240D073CA7A7E9DDEA36229406FA40725BE9E37CB3BB346BF31CB6EA8F162C6D639F56D213B976D5D4969DB64BE902389490A1D33F3D3F4CA96FFD3A08344922D720F4AD9C3F93C6C4004A98BF07E568B2368762764F69EC97677383376D7290A2DE24DB084396EB2642D0F1CD241CE6397A544213B4B66E387C952D3292A0480481A5851E95D7267845782DF3BE405050240CCE7A54B861E4D5318B707B4DE4EEAEF14EE0B8CBDB5FB3A544B96F7AFBB7CE5AB4924F0A12004208048E7A67CABD2BF0F7E224ED9864A67E216D2F75C1516AF33F8FC4362B6703FC5212EE2A08347B7EFD2367776BBE2D99DB05A70D52D16F8C3502E2D5CE04A90E1904044950CC73123E75ED1F097C58C163254A926783BC00502A1C19EAD6627D728ADE3302B1FC523743B8CEB9E56CE8391158CEC16A2DAA0057BA4A38648D32E5F0D632CABB16076A4ADA32C2A52810A17497EB47CFF262066E1EA686DA6432D0713C4F111E58ADCF0506E3DD72552279126358E47965D28988DD9B7725C9D052312D3BA902DC0C3C52D2A882329D48EDDE9FCB4921C0BFB17FB7DE3788F7D01FE34F8A5942735ADB3C2B3D33CF29D7D7AE44E9A99128953BB6593E5EEEEF187AFA9C873310B718B58D95A3A1E778AD5A0A2EDD5C94964093C456BD00027B0EF3548DA9B6C4B593BE46ED6FD43D6B5D736BB53748ABDF22E282A19B9F7BE4CDC7DF6F5FE2F5ECE3EC4D86E202E2FAEB6C36B196969B6D9ED9272D2FCA6E4A6129BEB6E30B0952C8200CE388C659D77FF5FE1E4A861953909995AA94C2E5DFCEE6D5368B56CED96AC44B44C4A014577C815625830B39B13C0B111F15FEDC3FC6A3DA8BDAF710BDC3F0AC7F1DDD06C3DE3AEB565846097379818BDB75A8A529C4184AD4DB9C42240CB356550FB43C609C4AD72E4CC1398FD664AB791517D0EA7AE6C22D5B3F634A97BBF4925FF92C7D4FABF0A7ADA395F84E078DDE622EE33893ABC531ABA597AF2EC294F5ABE552A0E070C2D4B20F12C9D5649E66A83B4F689C5297F2D4ADD36DEFE56620E82EDCFA8BF6CDD9E12120A4134AD08EA7FAD38C648C31FB5FC4A18BF47E19F1C291E100949E44C9CF21F03C8553B1180C5CF5B82ADD7767367D2FEA783C5BB0F864A775EC187D5567B90E07F4C4466CD96B816F72B6997896C04F01E29CF84731D3C8FD625709B2CA640F989753177048F57B171CF361163C2E21725210927746552D7FEE9F78C86E5F3C2D5E01D3F96667E1AC1EFA7956B330528120A6A08CA9D72E17ABD61EAB10B2C9049CCD781E6F4BDDCE6498C4B88E32BB40E3B7971E1B685136E4AA38D45449199CFDECB2F8D2B230B2CCC0C81CC0A3D05B3BD39C44E3A74C092A06CEC3837524FEA31DE39B4F717EB16CB42DFBABC7ED6CEC6D900A94FB974EA18494A355105C4E911CB4AB56170B2804B804532041AFDF2EFC22998EC64E439DE51BBD4B0FEAF957B1FBF2FE04FEC896DB81F662C136DB1FC33836D36C6D85D622A5B205D34D78CA72D64A93E20059746BC87202AFFB0B67A4AD13129B33306BD1B3399A76BC71DF166D19931464A95F4AB789075150D503DF48EEFD95BDBB3C4A67371E990A8CB52223489CF90E935D87038712B0E80C599C96BB0CDA81B839EB1C7F1B89F9B3D8549D7514AFB01CDA25D8694D3010A571112A999D4F144F3A6D8E98CB1734A0FBD876BB44A6046ECB2090E58D0713FAF6F0A224054093965EA6B6C2972391F407EF0A62BF80E7F88748D0F9FE829C29DCB97E36CA1293FC7B7A98AEB585A0A20828820A20828820A20828820A208283404E90426A58989223A18EDA73CF2D4532F9DF327096902B4734F7CCFEA36092438F7EEDFA8A38D3A052893DFA7953B54ADD04BDBDE43DE51A2F7902A070ABF93088C77114A2E0B1E138B331C604A64C6A67BC9903F5AAE62B6D4AC24C3294952C82CFCDDB3CF2BF384C6F28D378F04F36F7ECC2AE5DB698E24AF212A29CF834FCC7ECF6A98D9D306D097BE92CE1C0A7637F6F0BA70EB51DDDE21C3B17B67A03FDDE2DEC5B1FB3C3ADAE31572ED962C2C5B5B972FBEB096CA5292612AD388C10419CFA662A9DE2CC6AF65AD692ADD090A2429B9D5FCBABB185E56CC9BF3A51049269BA5DDBB5732281E39D9B7BBC0DADF687DA0B8D99D8470586C8D83AA6713C56E54B698B86C9215E0BED92DAA0A5691235307531E55F1E7C424C84CE97BE428053170C2F6FC9B9E317DD9721184402A439A1500DBC454D985B36343934664DDE6EC300D8AC0DAC330C75C200972FDA523F10F3AA3C4E9538912A4F19504C9FCA44F39F246DEF16CFDA78B5844C56E952AA0F13C69976062C93B169284FCA4A0518850147A061C5F57A5728C9E30D65B4B4D332EA1325C5BF9BB394709D067DE72CA29FEC3D978AC6292BDF25370E4BD6EFC2B50D4E358AFE2FE6CC7650E0C580CDECF7A1C83EB0ED4DDC7861A4B9C484880567DE8E84F6E5F0EF52F8AD97364CCDC25E81C1BBD6C19A86F0E30A7E5206F01BCEE5FF007EF46786ECD9B8DAB889124C920F3EBA09FF0011148A700C5C8F2ADED63966E4DEA61D2A7053B9150D70C29CF5FCF08921319EB4ED18548CB93DFD0FBE10D94B2682803DA84F33EC426A7529E44CF97EF4B09433096E03F50814A8DC8E4E5BD228E20A923E741C3CA374BF36FC424A9449AEF1E469D29482B53874D40602CD6B743E50B4A0524124B747A0A353D6E1F8414DE648985B74D9E9563A519BD5A1E226240AB5793F23584CA0924E59F9D47CEC1E35544CD2903FF2229470DC7CFAC2E89D2C2402AB727EB0BA084240CCFC2B28C3C84A00C44BDE99A90E686B535F2E1C6194F52A62DC1000E3F703EE62AE31D0FCBF7A5449C2972896906C1C0A33F0A75E9946A14A600914CC67A450596DC254B52E0C6423C8EBCFE548AB0C924EEFF10EDD790A6679E90A198A09A11BC727A0E2457850FEA02C3491FD3409FF00CB9F63CB23CFE1DD33849AFF004EF30E0587DE83EF78513369F536562D6A171DC8E6D10EFD95C5C38A0F381A6103DC4B248F132829781FCC397918D66965E0F0870FBB3100CD62E480E789CDAB6E22F487D2F1084A494BA89762AB26AC4A4D18B1B0CF85DAB9625F49B77382CAD888526C00429D11FF00ED1A2A7B81A9EB3542DA88C5E1967FC75196905C6E929B170E539DB33D2D0D66265B28A54A528D5D4D47B80EEC0BF105DAA5846BD6DF6EFF0013B1C5DCC6F76C9561F8F2B85C78DC4B56F745B0090C168712D5C20F10CFDE396822C7E11F1963F6762A4A66E21659401FA8B1008096CC9D72D6EF11388C2198414335406E3776D0D99B3E117EEE67DA770EBCC753BACDB65BB85EDCB29F089BC29658B85841582C970F88B052019E73CF9FD00F85FF001230F3244846217BCA5000B9A1714BD620315B266B19A94B807EA09FE4C7986A3871F88DCAB3BE57876C8BA520BCFF00190B41FE9848CD3AF2298CF31CE73AF4361F684ADA4533A5325243E42841E26BD74CAB159C4A55266143021E87D5DBD323A3C4938BE00550549001E2198331A7589135609612100EF2599C97146615BF6CEB1B4997F3684B1CF2D5A87F3EA230E6F3B7C5B2BBA7C32E718DA3BD69087504B5685C407AE1491010CA164712B888100EA467A550BC5BE26C26C991314B9A93BA0E632E9A8BC4A61F644D99BA405104DF235BF12CD4EACD6E6E6DB6F5F7E5ED28B7F01DDFE16BD87D81794B6EE318BF62E30EBEB8609502BB47DA25B59D609C80226BC87E34F8E7B3F674C9C962A3501B758F98EED46A71964786310A620B39760F605F95A3125A7F0C1F673C69C462FBC5C2DEDBFDA0716A7AEF10DA466D71271F7D47895C4E3A9E25210A242330427872E9C2B1DF154ED19AAC6C898B421C90016A0241602D6F4A5CC741D8FB31586C3225A92193725EBE55E74FCE16F685FE0B9ECADBE0D9C7ED304D9AB6D95C69B6949B17B0AB4B3B2610B2212A5292D9500204C09E94B6CBF8B0654C08F9AB05446F1DEB9763636A1AF4CA9328F9685329296A1147B54BD28F947C9E7B6CFF000F9DE87B186DE5CE0B7B762EF615E717FCA719B65BAE043613C4A4DD5C1425B1EF282120089D6BB3F87BC6183DA625283998AAAC16297C99ECF9F6033899C16365A5410C2AD6CA8D90FBDED1A02EB88B0B979448BC55B94153AB1C725794A5594C48E233D72E47AE6CE99849884A952D2491A034EA4F5A18B4E16626687B0CDC50F56C88CCD416ADA2ECC27690D9DDAD65695A161247826502139807491306329EB90AD316100ABE52581B5393861CE1D89E25CCE160722E2D5BD74EF172DCEF01BB7B7712B0F12A040800807389CF4FF0476859A852890189CAB53517BFBBE50E918E949014402CF7FC57BB4611DAADA6B9C6826C9A2E361A2B5B4B54849CF8B32390233D2233E54F307B3E6CC50AD1FB1F5AFDDF9C56D1DAD21285380287477ADC5AF9DA3AA7FC1DFD86B6EFDB13DA576371EC730A69EDD76C2DE1BADA2BDB961C55B5F29482E590B470A4B2E16DF6929702A20E99D5CB67F87F1535490154A67F4B1E5996A5F80731CDB6B788B0F21330A81234003F02DA0ED4BC7E93FB01B1D65B21B278760382DA37656F63676F66D5B9406DB422D9B43321090350991020FAD752D8BB25785968DE7269BD5156F2E39FDA38C6DDC71C74F5A83115DD29A5C017D403C8DE2EE4E1A5B750B4A885092449E193398112739CFD7CAEE89E94CB32C83BA02402C09D58EB9FF4E6291330330CD0B05AEF52280B0E41FCF8C4A21B73800594F144652447EFE597D2A33152CCC5BA012D6BF12D5FDB651338649948017FC99A99313CAF7AD7BC7A968A673067EFF7ACC80659FA816B5AB61A429387CC4B0A177ADBCBF10AA41020F5FDA9C13BC49D75ED09CB414062DD3A9FBC55588520A20828820A20828820A20828820A2082B06C73A1A6B04357092A910620C73F874D29B09252AF9C4589ED773A7E381261647F11D7D63DE11911023CB39FF13E5F0A5D33E5CC05233A000F31521EA74E7570F084EDEAB351AEF4B5BEF0D9684A5D04244281E3312721967F4CBD73A85C76C413D66600924D4D3215AD037BAB08DA4122C0F3AB7E351AF1CA20EEAE59B017F7D7AF34D61E96C952D6A00200499CC809198EDE672A8A3B5E46C1428CD584A520D5C0667E79BFA8689297294A28009330FF001EBAF0229F6BC6816DDE37B53BE6DA4BCD8DD8CBA5586C660EF70E23888716DA71343A78D6961D6E5B7BC35052083A695E6AF88BF12E562F1D3A5A673B3815A160455F419F48B860F0DBA8131613F31817D1A819EA1F3F3E394763B63B03D89C359C23006529B27004DF82948B953B3EF28F04020B854A93CB3CEBCAFE2BDA29DA6B9A42C2829F37B917B8E033B7030FC214CE48278753F8148C8ED5A316484DBDB28ADA4E609226559A81390C8935CC8ECCF95882A6DE0083BC03839973D79035B4094A941C8097CB870A690FDBE7E93F7F1E9F3CBA06C4C6A70410924815AD038617FB76D633B8751E7F8852A4F138BFF2166685120B541AE9C1ABEE820DC3A8F3FC414D44D39953F03FB8370EA3CFF108B8E70923E9AF2EF59F9BC55DFF0070141CABEF8C3271D83E5FE34CFE347CDFFE6E35FDF383715C3BDFDF1685DA3C4DA4F6F8E7AD1F37FF009BBFEE0DC5708528F9BC55DFF706E1D479FE20A3E6F1577FDC1B8751E7F8828F9BC55EFAC1B8751E7F88294FF10CE0666EBD9BD34A59E33F2D46CC7BFE20AD0E1021C6E8074A7DC463E5A8E9E7F88A82E0465975EF9F5A6EBFA32A644501F7CA32259259C41E2F74FC7FCD22AC484D013C2B4E8CFDED18F96751EB0D1D77357D807383DF5FA0CE9A2A7059D586AF5E27DFE5D252C18A401714D5DFA8B70866E3A0F383CE35D3CCFE9F3AACED762853598DF3A12FFA6D2B19DC4B73E6F4E74AF0885C55FB8B1B471F48438FDC148C3CAA55E004901DE23FD9C40F2CA35E754A933D3227A565552A1BB57DD635DE177E0F58D0A415802C9BB1707EE465FD574CB7FBB977B6B311B0DE56C95D2F0FDBBD970ABFBD5DAB85A4DE21094B81B940F11CFE8B452412012632D0FA3BE1EF88132848054CC520DAC14053A1F79EDBA4EF02DBA5D801A86AF2BFDF4CA7ECA3ED9580EF81DC4365B1B4230BDACC0128B4C42D710E06431F854A9B2E942945690E2195384919EBA1AF7DF8476DE1BFEC72F10A9B2C112E84A9896B76AD3D9A86D2D8E573153132D4402EC915AB87000635ADE9D1E28DF57B746CDE07B46E6ED776CEB7B59B5C54AB774618A45EB36CEA9328F13C1571A0093AE723C85517C63F1651B2513512E781BBBC1D2AF3BF00F916BDA37C16C73F4AD482294045B982F4EAD666B0C3381EEA76FB7938B33B59BE4BC7EED9B858B8B4D9F4ADD5DB59A490A48FC2BE084710E052A3533E55E57F15FC6156D33364AA7A95BCE03ADF5E3DC5338B461309B80580160010389CB8D73E31B8786E0D6186616C5934A4D859DAB6136D676E435200192DB040CE01CB339EB9D712DA32D1B794B9AB65397AD49AFF006FD2A1844DA48410000F99E7906F74D6B0AA5CF1471F006C49012040001C8C752209EB3355AC561938196A909002402E05B33E67DDE25E52B725303900C59DBF157CBA45550D253B93D243B3827A0E99FE61B2D2E4B8A5DFDE6FEDA39EFF00C4A7D97704F692F672DA8C1C5AB08DA0C3B0DB8BDB1BB0848B91F850BBA7385C82B1286B87DD1A6B3CFBD7823692652A424A9882C43B5A9A9B74C83DA16C0CB22728B9214CDA0028D90ADCF334D7F3D2DA1B16B66715BAC19E654F39657F8A58DDF12415715A3EEB08E2D39B79157975AF56F87B1699F2905C10522CF980DE6743ADDE2EB83514802AC59C727AF95A95B8D71F5962096C9466985AE12A1060A89032D321979CCD58A724A8D29C6CF4D58F935844899617F5172DDBDE66FDA14C4F1305B3067DD33DFD674CBFDCE68230CEA0A22B5BE872A0ABD33E30D27912D0541419BF8E46BA017E59579C3EC5ECD637BC4DB7C1361F044ADEC5F6A313B2B2C25A6B894A2872E1A6AE8F0A7DEF75B70A8C010019D60D8F676155BE9A549C85068F6E428FC294A36D9C7A50140920006FCBEFA77148FD383F8597B1BE13EC77ECE9B05B0C8B060ED462F8622FB687130DA7F101C7D28BC612E3BC216327783DFE4234AE95B2E514A529003D1DF2FD373BD9C57906D6DA2899355F52884BD07F153BBB9CC69CDA3AE167C66DDBF10242C0293C208100C0D7392209E5D2AE5202826B66D69937DF93C5594ADF2540B82491571D21D4099813D79D388D60A20828820A20828820A20828820A20828820A20828820263A9F2D68820A208681242C922049F9CFCFEF9D656DF254FA1EEE47DE164FF0011D7D4C567E3E550924B4D014480E737E3DDBBC22BFA9DB36F2688176E1F55EBD6ADA92D9F7787C6301C912A2D811300E7940F2CEAC7326E1E561D3316A0FB8A26A0E54DE7ECFAE90E64A52900A92E4359F8B3DE8DD41D234AFDA1B6F71CC5F6AF07DD46C4DD326E6E14E8DA4BAE35163096F843ADA6F548CD83728E24B1C63DF30398AF1E7C61F180C11C4A24CE228AA24B53BBFF0064F3B3ECBC3A66A1334A46F1D722096637D3B9CE2736476551B35875AE1F62B0CB366994BAD9097EF1E7614F9BB23FE44870A8B71A24E7CABE7EF883C6B88C4ED25FFAAA037D55735726E5FCE9468B44A9094824951DE1549341C86BC7F4D7BDBDA9171F8D7084BCAC94D23FE088E1E2819F16A74D49CA9CECFDA7FE531592A7D59BAFDC5BB88544B480C09E04D48FB7944BF0210785B2A299C8AE264EBA72074ED560DD9653BC012E1CE84578D630941DD01443825C8170F4F7E50F112013AF413D35CBE039D454FC52A52BE82522CC29AE9A91ED8C6CA4A697D037BE66292F2418827AE83FC7C2A57058B2A940A8DF2068393D89CF3F383743DBCB9D9F9E547F2F3C71FF0053F114F3FCA1A9FF00EA1F98CB0D07610D5E738946011A73CF4E51F7AD63FC9FFC8F71F9BF970818683B0868A4A892441E809F43C88158189FFCBCC77B8F7DE061A0EC21E30785B4854939CC79D60E24E4AF31FB818683B08578C743F2FDE8FF00255FF2FF00EE1F8818683B0838C743F2FDE8FF00255FF2FF00EE1F8818683B0838C743F2FDEB2312A71F5663307C9AB06E8D076838C743F2FDEADB809C9387493BA685F9F11ECB528C6022C0123967941C63A1F97EF49E216835052189766AF36CEF7FEF0520906CC5E99F384D464935018A9EC0A4101AC469F7AFE348374053F0B69C63CA839B88DDB9AE8F977AFBA5E009038F3860FBC12E2926728CB91CBCFB7DE74CD38B4998C0DC970FC082E01F3B5DCE65D210E12EC4077198734CA9C61929C2A39653AF2F84534C7A3E64B531269C686BAE66F67E758DCCA4BBE438777A57852FE69BC8B552136F745D26F012DAD59A590DE64B44FE52ACE48D4F3E55CE31E172E7024167B8B38201E1957D18423F2C6FB8FF0069B0A9BFFB9BA37DE2DABA4E1D86B57CFADD0E61CCB4BFC5BBC414E94290A1FD654C70415083309ABEF8576A2E4197F591BAC6F6CEE39726B17221432986E9DD0A361CAA47366CC671C32DB0DD66DAEF1FDADF15B9DC762EC6CAECD38FA5ADAAC4F0E7DCB26EF90E5B1427F00F5B8E071C6E5C4BBC792579098AF42E07E2A1C0ECC18233C83BAC06F3573ADF2D39BD225A4E065AA4EF280B5185DEEE286ECC0F6CE3A59B89F642DDFEE52EF15DA0B172EB6A76BF1816EEDE62DB49E15E3EC3C904BAAB67C00E264A9404C9223A5722F1778AB13B5D530A6728EF12CCA26F77AB7A733708CCC2A0252120005DC9A10D5191CEF9F1AD36DF8906D92C3656B0911E33F9BE0F31C407E549C9234E181A571BC527186715EFAF77789724EAE6E5A909A30CA4555BAE1FE94BB372233B9191B3188F71588A53E0B2CD93CD2A789DB9054F0067349D01CE0796719558F666D91839604C249CCE766677B758D172AA9980A86E9A007E93615705EBC7F6DD09FC3FF4497164192B3EF66ACE275806009E5E54DF17B4938CC4BA4BA4F4FB56BDE967021D4B5A94002430CB53FAAF46BBC2C0CCE4479D26A414B4C71676177A9AB5A1DCB4B800B91C74C872A7E22036A70D6B1EC1311C34AD4D97309C52D9C4A8C21C17166F37A664E4A8F3D62AD1E1CDB22462A5277C065005CD4641B9F57ED0FA56F61953269495209484253553D89577E62968FCE1FDBFF76D71B9BF68BDE16CFB1641AB45627717569E2B640578CA76E1D288024CAA7202799EBEC8F877B4062E549ABB800BB31CDD9F9FE22C52567752A0E1C02791AE5A3E59BC73C6C31238978778AE161370B7810A3C21AF09453EF8D13C6734C6B945762992525767A03C2DAD4D5B83C4E4B989F92096E2EC4F1035AFDE9085E622CBEF1B62F21840506D574EAB8584B8A84B4852F40A757086C7F728800666A470780F98A480379449167A0FE9FD3855F6B6304B0ADD20000876008F4AFBD5BE9CBF8057F0C3DA1DE9EF2309F68EDE9604E5A6C86CC3EDDDECDB57D6EA43B71E282DADD425D470293C694AD2A428120826ADF80D9AC5F70D19E99D074AFE9E3906DFDA43EA4EF92B3BDBA1D817E14F76A47DEC5B60F6966194DA39C2CFE1D86322250DDAB4969A4B519084A52083CB402AE184C304904023785CD05079380DDACC1F97E371049672497A641C9AD34FC708BAAD0CDBA0CF16A27AC18CFBF5A9C9619091A08D64282A586CBEE4C39ADAAE2CD9EBC1A1682B30414410510414410510414410510414410510414410510414410D1C5F0AC891AF3EFEA3FDCD65C2D1B82E72A645EB58DB786EEEE7FB78A3C5EE9F8FF9A8AC6CAF912CCDCC027B5ECD93FB35D635DB7FFBD7C3775BB3AAC75E702B1828718C1EC10525DBD7AE3FA1C48689973C25AD2A907DD1279E7C4FC69E3D3B2B0F365998A4965004A99E95B1BD7B7689AC1E1C4C60A70090F43AFA5188AE547B6ADEE7766718B5B0C5B793B5FC573B47B6AE21EC6D2E7129766D30E2861C1A0B1C6D9532A471956B1EE98AF0CFC42F162B6D4D9E04C2A0EA04825EAEDCB2C9BBC5E70125084A120252080523DF0BD5DEACD48D85B17416112A99923FFA926075C84039FCABCCB8DC2CC38B54C20D54E1F2AE629476353689854A19003570C7D2255B74189D0F2E533944FF008CEAC3B331064EE87634B919599A9D4D78D2032D346038D05BDF778ACDC42A24F91D7E67F71156D97B437D206F0B35EB600D34D73A5E0328640371BF90872DDCEB9EB1CF3FA8D7B99CBE0DA7054E2FBD7B1CEEFA311EF211A992ED60DA7F5142DEE2513273E93E5D7B67E7CE9FE154508DD2E1ACC7524BE46BFDB9AC6532D21C100B379BF28A7C5EEAF8FF009A75F378ABBFEE37F968FF00888A819CFAD1F378ABBFEE0F968FF88828F9BC55DFF707CB47FC447857C2624FA7FBA3E6F1577FDC1F2D1FF111E78BDD5F1FF347CDE2AEFF00B83E5A3FE220F17BABE3FE68F9BC55DFF707CB47FC441E2F757C7FCD1F378ABBFEE0F968FF00888F3C5EB3DF3FB9E7525276B7C997B80B76EAF6AE59346BF283D83720FE8D1EF8BDD5F1FF0035A4DDADBC18967766F7C6B7318F95C13DBF5078BDD5F7EB51B3717F308DD51CE8E1ABA0FB40658C92FA9200E4D9FB7178F3C533CFCE73FBF5A66B24A492493C4EA7EF1B09696A80FEFA53AC47BE789C51CFD7EFD2A00E20A71052E5277B2350DEEC05B5685E52185817EA5EAF97B109559D28F9D87A312D5269AF6A690AEE876DD0FA35619E2171EEDBD838827F16974B57490786CD2D82A70B8BD1B0A00E63588D73AA76D4C12B7882D7A70E5616393F1840A1017F31949DDBB00CA761AD5B96B1A75BD1DBABCDB0BC7773BBBA7DC7B115BC96B1FC6DB59534DB2A5074A7F10D9E20435C6885039E54B6CB92B97BA0687AB545B8BFBAC6FBA972B20BE5BD91AD9ED761FB78CD3BADDCE6C6EEBF0A69BC30B5797EA6C38FDF39E1B8F3B70E8E3789740055C2E1508E5E750FB57138B958F212A59008A034ED5039106B68728C5A952C2024A124B7D4E0E840AB7BA59865AB14F0979F5C80B981CB2072CF969E8672D2A6366CC1380F9C5DEEEDC0D457EFAF11BCD595EE84814A123B822BA8B9F2314820C919093F5A90C64AC39964A521C0B518BF072EDD2372779B80CEE48BB0FEB8E4C551F68485851129C81A3FDBAB7611A2A56F26A2952458B67D73F4A9A380C345A0E1002889E84C1E672FAFED4C367A9631010B777CF2B75A8E5AF2604AA5CDDD043037CD8543F1A1FDC435DDC30C922520C99394F6FBC855D6724270BBDA26ED4B015F6EE468F13D8594A98000EC4DF4FC9E432A45818FE36AB76EE5F6B34B4A6D2A03FB83A4214394829267B738154995B53E56D0090B23EB19DC38AFEBA0D0582448489441009ABEF0700E4D42DA6BE71F187FFA81B65B08C037E5B0D8F61CC36C0DA56F1255D38848485A99B46C09226482A233F809AF777C12C48C56137DCA8A44B097399A171CB5E22968D1531686046E9259920330B061CF2CA8098F9AFC6F16C3F01B753EA32CB6A507594C12A2EA88494A4E47878B889E5F2AF50A2415CE09A0700D4DFE9E5635A67D5A155E384B90EF522C1A94CC6A3871615AF4A7F8567F0FFDA8F6FADF5607B3C6CAE99DDB60988DADEED1634A6D69B7BB4A568BBB66937052A65C0975A2D2C2B39C84E756CD95842A29DDA1166B9BD68294F6F1CFF6E6D51BB30EF1000CCD0BB017273A796B1FA6EEE1B72783EE3776F816EE764F0DB2B0C2706B0B5B44AED594B4B70B0D3695AD65109254A44CF73ACD5E7098408028038161439FE4E669D0F25DA78AF9CB2B2A721D8136F6E3F119BDBBA6D572D59356EB86C1F15D08FE9A4C1391CF5333D0CFACAFC94A4DB26A5037403D88ADA91BE52A193820F1EFEDA272C8116E906322AD34D67D35D0D6C030034871292120A4351AD9DFDD6BAC3BACC2B051041441051041441051041441051041441092DC28272C873E9973CC51190926D5EB088BA9310358E79F97F98AD54ADDC8C2BF256CFF004F272FE622B55C25313AF6CC72FDFAF23956A99814486208B8BB7BE0EF0CA7CE124805DDF2EBA8E51EF8E989391E5D23E3FA8A5189200773661EC778DE42FE6B310E6DC39E5A373D18C44BD769F1C85B6B6D103FACA10D679895729981DE7589A692A72A5E2F70B14DB4B86D4FECF3A3954B09CC96B817E94108BF74DDBDB3B74A5071A6D0A7096C923810095A87284804AB3119926293F104E4CBD9F3959EE1672327CADC6FCA1597237949033A17CB9D9A85B4B738E66EF0312B5F684DF658E1F863C87704DDABEE1714EA81B2C4977AD85280E194BAA61C411C8A142BE76FC62DB13C4FC42113084EF29802697B6597A728B66CFD9EA202897766EE351CA9AC6CB216C5B617716EA6E5B52186B86253FD101032D2047BBA488E535E503B4953274C1314E5C80F9B12736CAEF61C62F385D9AADF9403020135BB90FA66F5F2E3E32E301094B4AE28049464548E70A1CBB4F2A8FC62A52D5BE12695B720D7BB77AB878DF120C89850BAA8163BBAB73CE9D4C4BD9A177297148040409F7A73D724F726047523D22D78B4CBA80435DAFECBD7D61B7CF4DC8507B53F2DC871E8ED4871C9250E36648287010A1048981391891FAE54AE1B6AA779AC468CF7E9D69C236131EA283DBF6AB5BB42C8511014A1EF0CF3CC40CC1CFE3C888AB361B1E998016A0E1AF31F717BD046DBE38FBCA02F804C127A9075FDFEFBC2F33692504B120E675D33FBB508D21C4B96575AFEFCFCBFBF3F11D95F1AD7FEE5FF00946FF238F9FEA1637ADB2C29D5C908CCA47E6CC9D073F39AD86D548A10934B92470EF1A192BDE0901DEC6ADD69FB8A9ABF6DEB537694381BCFDD508518E83E1FAC56DFF764FF00C5376B9F7CB58D7E590B0870E7476F4849171E3B62E129712DA89038801106338319F5A708C57CC1BC081D5BEFEF58D5437494921C33F0F7EF48F5B790EAC368701513192B2FAD6FF38FFC8773F98D49090E6D0E5C696DACA0AC122261479FCEB266A8162A1DCFE6308585A428380758F034E75CBFFB4FC2B1F38FFC8773F98D89604E91E96D43FBC7C48D7CA4FCA9BAD13261041735B1F5367A7BA460170E338F3C357FDFE07F723E9594CB980015F38CC78A42BFEC08F3FD33FA52884AF371A3BD3AFE3F3047810A9C881DE48FD294620124B8639935CBCE084D6CA8AA6419EF303F7EDF6602660662B1466B9625D2EE4039BEBA52B6BC2889BB818B56CF7F56F3D2F08A93C399223D7EFB0EB564918B461A5042EAC2EC3F67D3362F0B09C86722BD1FDF0AB6710B7D6B7AF337EC34E20377CD29AF1164F8B6E1485364B247E59073EB94F3A88C66364CC0A1BA93BCC5C8167A65D385EB684D6A96A5A16EA1BAEE9C94FA8A8A1BF522AD18CB77DBA7C0F60938B5D3015718B62AE788F622EF0AAEA38D4A203A3DE02145226721F0672368C9C3972C0E428001CB5F3E548D8A92A2086DDCD3404DC8D7AD3B168C9565656968CB6DCBAE25256A2550A24A8F119E5A939F6D2A1F1DB4708B9EA56EB92694A3F91D47E21352492E0539D7ABB76E668F14DFB8EAD4916BFD36D260A55209197E58CA72E7A914D65ED24053CB05366E87AB0C8DD898565CB5937625AEE3FBB5790A98A537896C04290E123290099394E67BD3A1B494AB971A1A5F32286D0FD1254F5151D5C6B407ED96B0A8BB6C988503DF2FBFDB3A5D18CC29ACC48720DC03916ADAF6D0E7A29F256C4D2D4D7B1F7EB0CAEF186DA429B1C5291C898CE35FF03E154AC66D49387DA7BC94B277B40C187B03288B9B839A6782092E680660D0FEF219877318EB17C5D6A51E02A19926662750797293FA54D4CF14E1A6618C929014450903833D726ED16AD9B86504A41760039CA8DC75CF964D1108E0C4ECAE0282B85BE05BEA50F7441E240933055103AAA0D57F01B326ED4DA09992CD0A9269A13C34EB4E6626CEE4B60A20153900B396E17A718F91BFFD484965388EE56F30F69C4DFDC1C7D29B72902E5496BC24A961033E10905733F973AFA0BF03B616270D22482BFA1613BCE7316C9FC9C6B1158A989492A72082F5BB68F6E6EDE91F3C7ECDDECBDB7DED69BD9C27775B05862F1ABBBBBEB165F79B69DB8B1B265C71B3726F94DA54507C2F10A0C47109D04D7B1F0BE1DC44D289A934212C43E8D96AC18778E7FB5BC4F270D315209D453859EC7EFCF2FD38FF00868FF0F9D8BF61EDC9ECD6C761163871DA4561ECBF8F6256ED37F8979F7909B8E15BA948510DA96B400A04A408EA6ADDB3F64CCC3EEEF176E39E7EE833CD850F69EDC978A0A42412FC3E927537272EB6A474F2D597C2C2CAA19CC04926739991E64558A58DD46E9150C05F2BF7FDF3AACE5198A26956FB7A0F4859D65F449B54B0952BF3150890489CC769FF0035B924E64F38412863514D29EFDD61DA13C0909D32CE349E7F3AC428000ED9C5744660A20828820A20828820A20828820A2082880D013A434715C4A52635D0733E63CBD27E49AC29DDCB7334F661295881F3B70B57A31032CDA95AF11C23D44A567581CB2D3E87CFCC4D2A847CCA6A1FC9FF00A76CE25D202D0CD5D6B9E99F4F285B252028721A4FD7EFCE68124A54EE1B4ABB6869E4FD62176949DD0140125EA720DAF13E7CCC789546474F8C44E9EB4B8486DE1BBD2F76F7C222F0D8A549582350F4A1F6E69AE90C71071E470A1D6C2ECDD3C2B28054B4E907A0F78FE99738A9C532E6198A6A55DECFCC9E6FF889F94BF9A37C66327ADEE3323DE51803DA237888DD8EEEB1272C9F6158ADF866CB04B15287E2AE1378E8B6BA286C4159690EC98D009CF3AE67E39F13CAC2E0E623E601BA82010781672FD68FCE24F0682A5070E5CEF3B90F6193D34CDAAD47C05B97DD6A760701FE6AA529DC471A3F8DB975C1C4E9372A2FF0A9591211E2409D220738F9C5F1476FA7178B9E12B25D4A72F7E5FACED9C5E36728CBDC2588D054BEB6FBBB068CD178DA3F97A51038D4412233FCD267ECE42473AE19860A9D341BD4B9A72E943C2B4CEB65C3633E5CDF9854E08615043D079794610DB6DF7EECB7758DE17B35B518BB785E278EAD4CB4E3AFB4CA029212139AC82278801AF4ED5633B344D96E949721CBB11E57E2E0EA75852626662262E6B2776E2953472E006E4E32A9D7256098D26CEF5AB36EE957B87620DA5DB3C410AF11A295B7E283E2881FDE008CA4D57B19B254146840BB8CF5CBD34AB648FC9332525425EE924FD2A152D43973B753175AEED0D82DB8E871D924A8281267302626239F41AE7510306A9531B74E795B9716A126CFC2BBCBC39502774803FDA6F4A50573D5F36A3C453CFAD6496C92274FD7B0CCFC226A670CAF96C19890720E0F6AF5E91B1C329C1602AE685ABC4D78BB13DE1CDBF1169257F98C935B4D2E413435FB43C929DD491CBEF0B5250B430712B2B7828C2145303EB94E7FECF6A208B6B6CF6C98D97C2D965281C4E880207500FEBF648ACBFD2DC5FDD29DF5D6114CA4998A9AA776FA41CB870E3F710AE17B533B396B88DDF0B4C5C8570717BA4C2883ACC796B3152F879BBA801A96EDEF586B3128528907EAB299A94A3FBCE25F0DBFB57D837364E05BABFCA2665427403F4A5FE71CC6990FD5FF00A68D4A524314823944ADADE5CADB0ABB1C2F999049100481127204474F5ACFCF3CF9FF007A7B178025200601B26B4493572404F1106796647CF39CFBF9C1AC89E331F6FB98C14036A1F2F7CA152F24924C4798FDFF005FF0E25CE4B5090323637E7194A400C403D3CA0F151D7E63F7A53E70FF0091EE3F31961A0EC20F151D7E63F7A3E70FF91EE3F3030D0761078A8EBF31FBD1F3926E49EA3F3030D07611429C041CC47CCFDFD9E75AAA62425DC87B1A558D58BF4841490EC6AC5F9FB7868E3A0CC68222749E7CFE1F731F889A14336ADEF6BE64B74EF0572BE5EC4365391C51FE32F5981CAA1672C31006B5A3716AD1F9B51AA21D224A99D4286E2F6B647DF286AE3C24E6679C0E5DBFCC1A8A98B735CAF7A353FBCAB0BCBC33D774F014739F3EEF9D042887DB0D80BE119F389CB2CE7E597EB4DD5212B75352EF7EB5BF1BF3192E641DE2C0B51D837273AE75FDC20E5CB1DA4E5060E5E597D99E54894A6596ED41E4DCE164619776A0AEF55FBB53DE70CDEBCB4420F1293C6359E1E7E6723DFF006A497884A33D5EB422C3D7A7AAF2E4CEDE66514D2A5C9A37936472AB6B6ADF630D209085091D3AF7CFBFCE9AAB1E0160CCF7AF2E3A694A3F19346154523E9BEB9B574BB7DDA2D6B8C67C452A55AE5DC7ACF61F66699CDC3CAC42CCD252E58BE619BB0FCEB69393B14CD4A66D068E0B93A00DC7A677788A7961F920C939907AAA32D675EDFB5446325FCA0C94801C55ACD666D6B5A6594487F8270C91705AA32FEA8E1C0AC050DD859397574F1651C2A36ECA54128BA201E22F24FE74B27DE911C31564F0862A6A3192C0DE62A02F4B8AF0A8B9D3AC41E3B152D0E4941520177FE497161A7106F78F928FE2DBB15B6DED89ED59BAADC4EE6AD2E76BB6DF0EBFC42DF197EC50E5F611815A5EA195B8A754C4B96EA5DA1599508E341E409AFA47F05C4E9D8594B52F744B0874070B99BC5BE815762CEFABF3A16D3DB484298AEEFF0053D05C39D1F27ED1F4C9FC2EFF008576E6BD89376782DD5861D698B6F62F2C5BB8C7B17BF69879D178E23C52869FE04BFF00D22E2DB857E588AF6E6C4DEFF111BEEFBBE807E7988E4BB6A789F8A5AC6B95ABEE83ED1D6FB662FEE9A530CBE2DEFEDD69FC482A29494F14A4240CE38040E511153310F17E3265A46609090091A1500028FA99A208528820A20828820A20828820A20828820A20828820A208288C1B1E4622C8517CE7209233E5D87C7EE056AA0E1A970EEFE5E5FDC4392BFF002D3A035367FB716BD5A1B5CA0859D60E606B3A0EBCB5D29EE1C2001FC5AAEF91033EFE9778B5C82F2D23302BD5CF7FEE1BDBDFA4DD2AC432F95A48E27787FA425322546234CCF5A6F3F109966AD9E57EAE1EDC84218C47CC96C0820E952E2DEF4E514DF620D589425495BAA5988687114E99ABA6BEB50988DB52643FD429FF001B80E72A07A57CD9A2125ECB9AB5021248268CEC2BCB437C8D0461ADE5EF9F03DDF2B8AE14BC556EA08770CB321EBC656530D7F48C14FBC413968272AA76DDF1548C3C8528CD48DE0AA0354B0A3D476761A45F3647867118A904A5135250DF510C95BDD8B55AC7DBE9F5AE0D8FEF976F6CF6D76C0BCC6CA60AB75DC0B07B8E24BA4BC8857E29872504A5CE152383311E83C75F123C72667CF9689C4825565790639D29DC45B65F870C94B6E80B2C58DE99915D7DE7B316172E26DDAB77D216DB01484A19023C31EEB6003CC2409EB90EF5E36DBD8CC4ED0C4CC53A8A4A8B3127339BDADC8BC492B64894031008CF98E356CB84463F77C57DC2E7134C9FC81DCA32F28F879F9A7B32419652542CC4D3AF535E43843799869B292087292E01E5A535CE9E51A4FED97ECB167BF1D8EB8C4301BA4DB6DEE1A855D6CE3ED2C2429D6541E752B5A4170921B4A404F3D6AFD864A1526803B51AE5FD2CD4D5B5899C24C0996D34EEB00EA55AA4B579D3AB523597D8B7DA8719B1B8B8F673DF42DBC33799B38EAAD6CEEF142A65ABC6C296E23F0EB7CF8AE2BF0E84010224E90669962B0B2D414126A75671A8F47BF1B43B5253499BCA56E7FB52685C67A8FC36B1BD7B41BDAB6D9FDA3C3B08C430EC542B14586D8B84B405B8881C4A5A8FE43C52939E5C849AAD62708122D517A7DBF1C758587CB6E62805DFF7CEA7331B1764D86D16CB788507DA43A8291301480B00FF00E50623AFCE2E62371553714DD2DC3CF843654D1310A084EE94962141B36714E1ED843E514A8952125291020E47A4C773A4524E4DDFAC0874B254C546A48B70D3F5CDE282A09899CE88521BBA871C2929809044CEA403FEFF00CD10459FB5FB228DA572C8FB810C281742F22A00A4FBA331263AD64D4B8EC32F79F18C25C0637D6FD7F4F16AEDC6CE62D88B186E0D8238CDB61F62521C0B5142D4094295C213910485418F3EB4E5134331240C9EDC73F6FA4202490EA212497B73B07CF5CEDC22F7C36CADF0EC36CD8B54B9F8A6529F156BFCAA3A9208CC89F803E55933D0003BCC4F4A060DC283AD235095BA814009664B03BC5EEED4D3DDAE125DBA5078C20A8004742911DE0F90D6B6F9C923F9163C47E632997BA18249BD48735E90B250E2755031A664FE9F7D7A644C49B1B71FC1F28CEE81FED6E8D0BA5C310449E79E9F5A5A54E00665F2714BB3706FD46DF2F827B7EA2AF13B7CFF00C52BF3C7FC4F7107CAE09EDFA83C4EDF3FF147CF1FF13DC41F2B827B7EA0F13B7CFF00C560CF190238D0C06550D13D2FE91515C266333C8EA343F7D41EF48AE79A249715619F1CF8BC3298965301CB534CF96AD488F75E0924198E5CA74D7E51E7CB5A653A7F501E86AFF7CEBA7185E4497FA8D746B821F877B886EA7651C5233981A4C1E7FA7975A899F39F9370AD0D33BFEF94A22582580D2B4E4C32CBCF4884BAC4D0D4950CA4C81D0643EF4D2A29588625DD8E4EDDDE9D00FDCA4AC1A942960010FE6FEBF9702206E31795A9495108E40C65027AFC32E7999D1EC99C9F95957BB8D3BDEFC1EF232B03BA03A4139DAE68CD4F588A7B1A09513C66675D63CBA4C72F2A61899A9A8D3A3D457B8ED0E65E042812D7E078FF005C8365160E2FB50F357CEA52B70A7DD1C20E60C673A7D2A071588704037666E1986249A9B0A521DCAC03390976BE560180ED7A8F588E671D174616A5372732E401EB398D2674FAD41CCC4A92E1F5A82DC3334AD8B748768C1512424BB8A351890D95799B3EB1E3F752E05347C74082E2992541A1C8ACF29F9812749A4A4ED598957CA724921D892D56A8A5F4CF2CA2C986972FE4849025A92974B800A8E6D77A74899B5B96C302E3882D8FEFB8041691060F88BD131D73CC559B09B3713B4C2404ACB8191B16E1EF566783DA98997265A9C804B8634373AB30F3F58D66DF56F5B69F69AEBFF66F73986AB1DDB3C4D4DDA5C62A965773678234F14F8AB2F307C4B7529852F84C66B4E7005764F027803153F1524FC951FA93FED26AF7B5BD968E3BB7F6AA10A98C4077FA8667D8143CB81DAAF63BF61FD85F67AB8BADACC630EB4DA2DEE6D1A1ABBC5F6BEF5A6EE6FECDDE12E169ABE290FA121B714C90A27DC0139E95F4D7E117810E0B092553A5B6EA5156FE2585B3CDB83306B4723DA9B495316A0EA00B80067CEA4657FD3746EDEC997DA4BF66861A751925C6212952A6145440CF31A7527A8AF470C327084C90929DC09A10D421C79373A1BC41151554925F587F6987F86E1BA7F87F14E7FCA5BC90A8109CF5303AFD2B68C449252103852207EF441155104144105104144105104144105104144105104144105101A823586FE1A788A89023B89F4039F9F3CE26886A24BAF7DABC5C79FDBF709388490547967E5CA474F9D2AE5292C0B80E73AB07D7D1A1EAB109901945A81C74ADAF6B4312EB09539E18487140F12801940804911A012263A8D045336E6D0F912D41D5BC012F663A70F31F7470F8A4CF98108FAAB6ED6E27D5852F1A87BFBF687D96DD558DC5A1BE6AE31A752A0D329710A712B33038642A012274F21AD714DBBE2A4E1CAC0987783B906CD7B33776AD23B4782BC173F6DAE4CD5CB2892E08431DE50E34ED9F131CB8C537B98C6D5638ADA27DD7957F78F151B774A8B484A15C2DC209E2128E139F5F879E3C63F10D7284F4FCF25E8DBDAB59EADABD69DFD2DB23E1EA30F2512C48012025BE8E21EE199DCF5BC5E789EF677876564CAAD2E5869B4A470B4DADD060680A4440813DF58AF2B7893C5B371F88581394CA51600D2B980FC5F56CE2CD27E1FE1A63138696A531BA4123967C7F30D6C3DA0F78B83B8CDF5F8F12D9C2014FF54C0490939129039AA7D7CD0D95819B8B48592A20D781E39FA7770F11B4FC07874214061900814012033E46C6BC34E11B87BB5DE7D9EDB58B5737A017E0150000209D75248E9DE222A57158718445824839DDF80D0802E2C738E59B6FC32BC30509481BA92E428304F26F5EB19B6D5D6195171284A9E792461C56250D650E8569C2160C403999ED4DB0BB5BE58352F61A5D8FE78D6958A062E5AA5CC4C956EEE827E62452D66A70E995A39E9ED2DEC6786EF431B5EF67636E0605BD2D9B52AFDCB8B250B66EFCA3DF4B7C6DA4BCE1F09B2889993C22662A465E2C4E0E2F9BBDCB585EBD7A460630A1411BA4A55449193382E7CB2D1B28BB372B7B8D6FA766F08C3B6C30C361B5FB2AB5DB5EA9D694D38A2C381A69C95CACF88DB3C5240041D291C420292A25CA8E99F40D419E798A88DFFCA4A52A2A2129E3463E8C7CBCE375DB43D6D8759B0E125DB5E16C99954248488D0E806A3E555AC5A4A4D18D7B9FE9EC7864C013D2EB3425405072F6DDCC4DB8506548238541111CC8038BE73F4A6B785641242492E6AFE6DE4D0D5CE5EBFA510E6112BE12467E9FEE8820F17BABE3FE683404E9041E0B4E1E356AACC8273F89EDFEF2A6CA5D6B53C3280AC8A04BB66DF7FD73AC38430D11904E7D333EB98FDAB099A967292E75CBBEBD21352C87A5B2B9F510938436A281200E9A67EBF1D73A4D53D8900103A8AF7F7CA14402B485503E45FF0071478BDD5F1FF358FF0020F1F3FF00F68DF70EA3CFF114071434FF003F28A7D2A712090790059BCCDFF0636DC1C7A7EDE3DF157D7E67F7A5BE69E3FF00D47F106E0D4F97E2144A8900C9F89AD0CE2FFC88E153DEF5F6D09A831223D93D4FC4D63E71FF0099F7D23115AD7C29224C88033F2E7DC7D2939B30DDDCD4D2BE432AE7C2B0C268DD981C8CEBD0444DC3D3232D79F4CBBE71D728F5A8E9F3CB5ECFAD4D9AAFDFA448E1D02990BB0E23CBF77888BABE0DA549900A41E7D758FA1FD8D45CE9E374B1249B575EE05ABC3289D9186DF214C58E57F7C8F908B1B11C4614A3C4009D391EE467A7F9F3889F3D89255C6940E791F79E462C984C216140DEEC7AF01C323665EE28E1716105412065073E7F2EB90EF49A71C65B0259DEFF006ADF477AC4BCBC206629760323EADDEA784405C62AF1260939F39FAF2E5F62939B8B13050826AE4F32F47A9BF43A98712F0AD641AD2DCB830F53EAD416543F1AF9E22B994920E9968ACCFF00AA8C98B7CEBC3EF5F57FC48A3083737774D83B8E7C2B57EB11CFE396A494B162E2D5D4340CE9A46BDBE798A68B93F309DDCF8350B0AB707D2164E082412EEE1BF0282A5871ADA18AB6A1385B4F5DA9567676F6A92BC47F19EE36DB7F9878F9C02A483E1CF3F3AB17873C2188DA78B96B420A92A21C106B66C98B65D6D68ABED6DA88C1A8CB538525D88B82D96601EF7A59F1AD86D2ED36FF00F1C5EC86E4038C5885F818EE3376169C11B4190A558DCB1202800E0055978804F3AF6AFC39F83537188905521CFD25F7356FFC7F0E5C8B98E5BB7FC48196EB7002B30E05988D5F2BB9063A21ECEFECBBB2BB93B3B8BBB5BC563DB6989250E5F6338B2D171705E00952597C2439C08952120E890065CBD75E15F84F2B650953178748524057F0FA49A1BD78FE35E3DB4F6BAF12A539210B25812EA0C6AE1DAB4ADBBC6D43185DC22D941453F8F70FF59CCE0A672E13993EE9220CC6990AF47F87A461F66E1D329490964D52D57028CCD9D49BBF68ACCC2A98492470CF9D7B0A51B2B35C7616EDDB5BA5B6C242049F774E227DE3EA7CBCAA466CE33E62E612E49D5D8643B40CD4666CA1E52704144105104144105104144105104144105104144105104144105104365082260013AF327A4E9D7BD6C775282A3C7A37BB5CF2B64A9094B921CBE76BB53F37D612582E2480600D3BE475FF005D73CAB28589A93BA6B9FBD3A5B37AC46E210BC492104824B66396BC6E7A4620DE56D55BEC16CC6D1ED0E23728658B7B7E161457C30E3885211993AF194819F481CEB8D7C45DA276561F13356580048F79FBB6564F0AF86E762B684A96141467281005427759DEECF46D7331C0FDBDFE6BB61B4571B5FB557173756B7F7370AC2D84A94B2D25B5A9214EA579252612531CB9578D36DF8D24637113A52544289500C4644834D19CF7BD63E807C2FF000A0C2C99026049A26A43DB9FBAD2916E365D0865C60B28790A21453207003088CCE7C3A939033D6BCD5E35DA3889D8D9B2D2B5339CF50F4CBEF933347A464EC69094A54100D01A0A71D1B3BDEB6CA6977F72EA5B2E5D3CA527229E33C1972CE72EFA6623957309784C41C4FCC9AB5105540496E2D417ADAACF5858E124C807FD2481FF002090E72BDBA0E377876FE266F2DD36AFC847090824C09F5EA73E73E55D4F61ED5C3E124A11312E406A3353AF6D38C5776861244D0B4A659753B9201EA7B5B367B88B9375BB7F77B31B516D8638EA4DB3CEA42425478632C8E91AE703CF3AC6D8C7A31AE24DCD0352967A1CFF0021A39BED8F089C5A26EE86742D42F5604D4FBF38EAD6CD6256F8B612D38F2212B6905975B03C46E5238B80F2E23AE432F855657839F25615BC4A545DAB48F29788B64AF0F8F9B292485A56A0A3504B1239D8370CE1CA2D14029B0E14A493FD50AFEBBA0FF6BC7FB872CB9181DA4B0F315258A9CE9A1AD73AB68E00F5833805FF00C88B905CD38D39661F942186E0F8260388DF63187D9376D8BE221B176586D286145B4F0A5498E124A84C93FDC4EBA177331E9615655883F6B97CCF1E9097FDB6729D2B585CA268332D5A86A5453BD22E86FC37ED1C2E03E33924F9C9397393CF9795454E5A66390E730C055DBAF5AD2038652549485303425ECDE5F8EB0D2DF883294AC10A05591CB9C0FA5317093BA1F2F3D3D817EAF50A12992A356229C33F2851492A888CA75F4AD9EAD5B3DBDB7585C2D2598DEDE9EB1157AE8B595AC920E813AC69D81CE39F6ED5B8965445C33E5771A671B0FA8B023BC376AE43A92A85B60735989F2CF3A57E41FF0090EC6141294A2C18F27FC4542EB3949246706411DCF3D72F2F5351B3F0E42CB114A3D72B7285912D2C413517D28FC0BF67B52D0ED17262012083A8FF007FBFD2992C949FA95FC72BBEB7E9E6F48D7E52544B3685E80B727B7317E31529B71490EC9E15732639C72D73F865DAB51302C920D7969A6B1A24A524CB7FA93957CB87BBC22E079082B0DB8E0027DC93D7F6F8674E65C852C12C726B7BFDD396E152DC852C06C9C0F7EF486A9B97145005BDC02B244149F7639ABA4EA3B53D97845EE0217D01B57F27F30A6F4B01DD2D5B90E5B9C3E7D06DD29538EA53C5CB8B31E734AFF84B607E65F2DEAF60FF00DB884D1350B24043366580E858BC2A56866DD0F29C4292AD384C91A6BF326B6FF0D4120EFA4DA999E37AF956ED0893F3262920335C9603A5AD6FC4541C6CB45E0B1C004EB9C67397C3E347F88B037B7837AEA066F76A4608216106E73CBBFBC8670D7F148B84788D9201919E625391883DB979646A3A782951483F57FB790BE9F6CC69094C904AC28D4532714A023AF9F5311CF0528CE507F4E5F7DBBD35549529998EA2FD6DC214978A97295F5659528ED5ED668B471552D0B7110490066273CB965E79F39075A8DC4615402B8580C9F2361D3F713985DAB2414A4025DADC756BFDC5DE8F60E245D528E444C9CE7E072E5AE7D3BC557B1095209DEA905B85E9663F8E0C22DB83C7CB580024DAE037126B5886280532A492ACF9778D39C7D00E5511377F78BD1AB47160EDC395AB13D2E727E5EF121FB3E43DD07578897DB46797CA39FF009E9AC79080C46DB1859C6493551604D47014AF58712714852824062726CBAEB51C4D189AC5B58ADD7816EFF085FF004009047BAA2AD3863948D39FAD58306BFF0026426730DDA9F36AE44D844E26592905354B5FDF9E9A4686EFE7DAAD5B9D71D63FF8D75888504DBE18CCB97F72A5100218641054ACC683CB3AE8BE0FF05E23C558B9385C390153160382C5C9039350B3B5A22B1FB6246CF4933121F74D28E5875FBD8F28BA7D987747BE4F6D8BF5ED96D7AF1ED80D85696CBBFCB1B2FE19758AB00E69BE65614DBED909F7338E05F306BDF3F0E3FE9D71B82C3E1E7E25285164A8920F3A022FAC79CBC5FE2F96BC6CCDD2456C0DC654A135D4BE71DDFDD46E8B77FBABD9DB7C236570DB2C20B084B770EDBB4D30F5DB89305CB852238D4544924E664F2AF6A7833C2383D858542264997F312901CA5390B03AD0371F3E5B8EDACBC4AAFF0042AB515001A5327E757B5632F33832DE74B8B5B6CB2D41B55DB1871523DF2E9D0C91A7C66AFB35723700932C390CB7008045B77C9F3ED58198B54C2EED983E808F76B44D38C5C298E149487B21C44E4403064E6648D6ABB8AC3E296A2652F72AF4240E541D188FCC6C929DD0142B9B01EB43F8878D24A1B4A5512358D279C4F539D4860E5CD44B1F34BAB5CCFB6F7531AA8824910A53C8C41441051041441051041441051041441051041441051041441051043777FBBD3F4A471333E5C93DEDD35B5B27BC20B964AB3ABB31A665AD7F7942493A8FFB65F234D3098848739004FAFE5F2D05EB99402660268F70C2946E9EAF4CE39FBED86FDFED726C375387BCB61FDA0B865DE3428A54A6EC5E6EE5D120660A010759935E74F8DBB4C7F8589054582486735E5D3CAA6F1D5FC133E5C89C99BBA3E63D145A84598B86278F9135D0ADFF006CCDF6CA33688C3ED54BC3F0FB661B5AD282471969B4B8A94C0CD609E526329CABE7AE236A23FEE93025542A56772E736D7879C7B1FC11E235270F23E61DD550148A067D29DC51DDE359AD31242EDD2A194F16B99993224E5967D3A41D4D3F6E2C4EC6296E0839641C3E76A35BFBF4F6C1C54AC761659DE0E52F767CB98EB9E90A9C5B8753F319F3E833E59546CB90952B402F6FC5A2C5FF006E4CD1FC778351DCDDB43F704520FE65F8B2D34DAB83C3E2E220C1CC488CF3D7FD53B4CA4A40001BD855EB4E3CFADE18E2763225A553141212C487A373BF067B1E622DEC39DC4EE36F70C66C1B71C487D216B40240D33919CEB9F78D32A732E554580A13AD3A5FAF58E7DB57132B0626B94064AEECF50410EF9F9DC651DB5DD95BBADECA61887C12EF809E30666613F219FF00AA7330BA500D4805EDC32E0DEB1E2CF19CF44CDB98B54A6092B70D620E7A3E5AD5AF1929B679F08E51F31D33F9D20A4B80D4BB69C62A0A98CEE49D74FC7E22972D87171AB28898CA3E3113FBD24A940BD95EAF6E367F6D194CEA6E834269EC1D79E4FC3CF1DB68788540348CD664447727E79FCEB41280C94C387EA1252014A812378BD694B6B4CB4F410A8BBB6BE1F88B45256C2B24A92414929C95047FE535B9C1EF10A09D34D33A1E77A9A9BC47A42925295AB7940A9CF3B4149AA46EB500E63F43DF287096DE0CEDC6F68C31BD5DE2DD6C5A2D0B1B378A63085A8A54BB3B42FA07BC9008339C4E67AD247E972F67A8AF63D7A670EA4286F900B917032A1BF7F6C627367B1356D7E15698A7E0313C33893C4AB475A2CAF3CA382627EE69B4CC490A0056D41571A3D05FABF287895251552F77424DEF7D5BA45CCE2508570A1B75A4803DC7870AE6332477EB4D274F0E58A8035367045E819BEF1AA5616905D2A2E7EA4D8D7DDFEF0E5BCA472CBF5A899D33E616666CF539C6628657893D70EB508166CE683EF051912648CB590279EBA56F86016424DC640DEF5A8D5A9F68D0EE20EF3328D1F32FA7BA6B568C07BD0DF0DEEC93AAB1C3EC2FAE569047130D1704FA1EA4CD5930F24EE86E3F8B53F19B98C942557482DAC5B9BA1DEC63DB518DDC318A61F8930DCA4A03AD29281209D09EFCA9862538B44C2995BFBAF42976156C99ECDC4DA1D8C2EFCA7615663A5855F95B2A38D365D65FBCB9F7D32DFBBC2179F207E3FB522DB43559EAAF3AE8F5A3660B884F7112D164B7035D7227CB2ED0FF00C1B77C26D9D5F0AD04F12504011CA06BA77C8D6A46D014066139DEB614A572CCB7A335A8804A7743E79D32A1B93DE97CA558B1B52D1638CE70224139EA3CF38FAEB9E5231E4FD456DAFD458E7A310465A90E619AF10B490FBA4F5719DFF1EB68E76D1162E2AD90494A0E5399F7B333F7A5650898EF33F95DD9DAE731A30CF8BC2E8C52264B0E589B870C18D4B1635E511EE72F5FBFBFDE9E2774074A6A28DF8CB9901F856135A50B2295D29D295E3083D60D3ADA9E54C919E9CBA48F872E71A532C5A0EE9A00F73E8DC287AE8D0F30B212952737D398B33726A7A8367E2187B526129F2CB967E5DC728806AA98D949FAB334AE479EB5ABF38B8604A52C1A8C38D455EBA3FEA2CBBCB54A5C5A529C8691A67A74D34CF3E9AD414F94A09533391424F034E15E00671654282A4834B57817CFA4415C5B44E51AF2F872D23E1D39572BDB00FF009C5245942A347AD5B964D951A35C2A93F3455CB8AB5BAD3BD62DFBB5B12BB77ED0108523FA8B6F27648260F381C8E42BA3EC89811B2901490E00AB0FF90BEAE34F58B6C80A520AD330B043143D03A481422D60733A473FBDAA775DB118DEF977418E5F60AA4A1DC45D379C56EDFE19D297184B61634502749D7313D3D3DF01673F8830AC187CC40614D1DC176B9F28E75E25DF1266098BDE9890BA82E03BDDF46F4A47D0FEEEB0AC3767B66F67B0AD9CC22CF0CB57B0CB30E8B660328E14DB3441844093339819F9D7D8AF0B2B7B66480C0112D16E43D3DF0F2A6DF2A38D98A52B79D4ACDC062437BBDC878C849C3B0B5BCB471053CDC2968041CE388C8F31F1CEACA43EBCB23CF588389CB55214CA4B69284094849C88831A72ACB0160D0438A20828820A20828820A20828820A20828820A20828820A20828820A20828820A2086EEFF0077A7E94D31DFFF00CE585AA4E7937BB46410A4E8439639FEE8CD0D3C4E151C8CA4F3C81F5FF15052A6142580513F5540EBC3C8BD21171BEE6CF9F2F7EB1CF0DE75F398E7B4961966C1877000F02173C31776A348CF4274D33E599F2A7C75C699782C48CB74B00399A9E1E5C4C5E3C3D3D52D52C8240075E3A75B679DE24B6F360ED76A2CDFC2AE116EE256DACB8A700519E12A1C24EB072F87A7CE39FB489DAA402C42D65CDB3F75B1E11DDF61EDD560C4B5952D40148FA4E64B59F5ABF2CE91CD4DBCDC56D2E09757D7B8532877094AD45843416A772278F2480089074D75D4452D3B1226282D4C6EEAA64295A67D5ED1E92F09F8DD1264CB96A9A02801F49559FAB80C476E91AF8F5AE2EDDD2AD5EC2AFDB5A55C256A6149464489072CBD339ED584CE483BC9E058795C9E7EDA3BB6C5F19E1674A1F3160D01AD43D5B3CF85F4192F6D84ED0BD76BB6B2C23115AD6501372185FE1CF10E4B1AC139F965953C97884A98960D7CB2F75AD6B9C6BB77C5B874E1D7B8B48FA496040A8CEEDC5B91D2374BD9FB73AFA1D4E25B43689376B5256D29683293075E2CC6A34FA654F113921F788B6445EACD5F5EF1E62F1978C49337E54CAD6E68CF5CF896FC88E8561086B09B166CD49953408940F7784FE5D633032397A9A693B1A90A670CF4663D4971F71A479EB6A62958DC52E7BB1597BE97A07A3FDE26D18A5BA6650AED034EBCB2F49AC231214097A86A1258BF3CB8FA188DDC59A3B8EBF8E10B3D78D299012485DCA541A3FDC9294E8BE62797A7ABB42D24124D4E941D7A3716A1B46802CAC245377B17A86A7ECD9A916CDEB372E6CCE296616945FBB6F70B616A24240690E2CC9D46432F2EA327294A72A9A367FD1B65DA30B44C0B0A25935DE7CEFC2CCFEC4637DC3ED1398B6C9B5875F2D6AC46C6EAF9370FA892D287E25DE0E151CF2488CEA570F286E0373A914AE5DB816E75289511308DD25DB2A8A1CF2B7171190F15DBAD92C11CF0B15C770EB120C13717286C083067888A6B899692E02439CDB917E3D7808708FE40B3F0E9CFEF0C13BC0D80C6DD6EC6CB68302C75E91C16B6F72D5CAC139C040CC2B39E711509884EEB860746AE5C6AEE3C99E1C4B4266391BF2DEE41670072A80D9DBBC4B3D8707407ECDDBBB22DA789BB76C86D939716481D7288D66634A819C95256480A15E34CC0B55AB778709292A017B8B4B67535D6835CEDA8362DC5CDD5BA6E2E140BE4A92A6C93E20083C2091DC099A69353354951357676BFE6D7785B79091F2D09DD4A6B664D5EDCC9FB3522A6EE21C2DA9A71074952606463F7C874A60A42F78D77781241B7DC8EBC60157D058EB6B7786D89DD3785A9973C4BA5AEE891E1B4A05ACA06635CFEF2A7D8374919BDCDF86553CFCA130779F7923E934A026AFD69C6DE9AA3ED21BDFC4F7718687F03DD5E25B5F893E825955AE0CABE4F1651C45242B98D34D672156FC2A920241602973AFDFF00340D19001208592C482E5C69F9AD7368E79621ED19ED878A20DDEC6EE5DBC0DE7CA821177805F5BBA8014784A92D92448CF29EDD2AE183C260A74A0A5896F9EF370CEBD34D22630FBA258DE3967E6F522E29C69711682F6EFF00891635748786CDB564D13252C5AE28DC2409C872CB97E94EBFC1D9E5D928366603ABF3E873BC258854A0E00481A1142EC3A9A1F748F1BDB9FE237638D3CD8D9D6DD6121BE071EB5C514E12539F11919493CB410234ADCE03670500D2F3776A534B3DBEE2B10D3C7D5F4D53C1FCF97F778BD6C36C7F88F39709B8FE478606A4152556D8A710C84889E5AE5131F04CE07679144A1C02723971A6A2A223662544BB727F5C8768EACEE131CDE3627BB6C05DDE961AE31B6AA1703154B0D3A8B710E90C94F8DFD4CDBCCCCE7A64455136AC8969C4912F76A5D85880F6B53FACA236619A85B07A16A3354D838BF2AD6335A995940594940E8A107C88CE0E597F9A6C25B07B3666FE9DADC2E61D4A9B368EE793BF07AFE1B9BC205D053E085A4AA0FBB3A6A6239CE910640E951F8C40DDCEDDAB9532EB9E8625F0F88989FAAA00C8DE872EE7A72882BFB27735171A42359528803EB1D7E3D22AA98B96778F603DDC8AFE6B12B276B0412198B86701F8B7F62869AC5917C508756994B9C310B6C820F69C87A89D2A2572F7D2A49B31AF2E4FD43EB174C0E24CE91BE48622A03925E9EB977362602E16933EE91A6BFB7F9CA7CAB93EDD93BBB4142C4285EEDD43D3A73AC2F869844C046ADC5AAC74FEA2031369BB96D0B295A45B927FA6002B9CC4CEBA4C8D055E36691FF6B4822A1AE38DB5CFDB45AF0CA280B62499A1C0A9DD2054707E6F68D62F6862D5FE19B378A5D34D24E1D8B5826D1C4262E1017885BA1C927498E434D729AF487C059BBBE21C2906826247BA35685B57CE285E28584A26805C90AE21C8F304BD357B523B89B076E977663671F42DC8FE51619AC82A8366CF3191EB98F9E55F657C1EADFD932142C65A07601F33AC79636F157F9B3028241049648A317AF5D22F46F0F6DA7D572CE6EAC0E32B882448AB5D5CD9B2D78BC41D5F867FAE3D624D09E148100750349E7598CC5544105104144105104265C4804C1CBCBF7A208A92A0A008FB34411556017D473BC105660828820A20828820A20828820A20828821B9CD6A9CC6500FAFEA3E95B2D01728A48B83D59E8F08AD7621C31FD3FEB8B4337340498FD74FF3F66ABE642C6FB07A1619B077B81DB410BE1E5A66104BAB3A75BDEB4CF5B4738769DD461DED4D7AEDD9E14624122DF8B20AF0ACE17C33E7CB96A6BC73F1FD1B983C5354EE2AA78D7AD79522F1B170EFB840A5AAFAFF006D4E45E325DF5CAD372EA8FF00D8883A94A89000D728C88D39659D7CC7C74E5276BCC00D02D4FA5CF76FD17CBAA6CE947712086A0F263C01E34CA978B6EFB0F6D68530E34CB96C4150428711CE54796799E7A0D69D4DC7A81DC2A2DA13437E5E5C1C459B0D8C9921695A54A4B3074D0D29F8A7ABC630C5360B66AF5D5ABF9532A70AA494B29CD47EC69AE62954ED0144B816D18FBAB3D5F9BC5D367F89F1D2032671090D42A3F917E7E861E615B2983E1A84348C1D91E19399613399EBF4CA220E5269ECADA29B10096AF1EDE5C1EC6338FDBD8FC5952CE32690A006E8592035D867F9B0353191F0B7F0FB3424218433000C921307A65E596A2333CC56CADA2EB3F532438A13C46BCCBF168A1ED44E2B144FD6A5139972FDB950EB43130ABE4B878D2A949D0C920C7791E5E9D6A2313B4089CDBC40A31A01D736D0657E310E9C1AE582142BFF0090FBF3A57411E7E2BBFCFA4FFE54BC8C7B8037C971AD2FE7A0E1CA364E15C394D4E8187663A738F1AC4494DD28A813645AE1139FF508E28813CBA7AF598C3E31D2FBD40CFC3CF2A071EB18548DD5210515980B280D3A6A6D719E70FF0013C45855962188A9C436D5AE1B76209E1054E5AB894CCC892AD273FA54CCBC5216410A601B3FB72F6F084DC229081288256B25414452EE413536A7E99F9A9BAADD46F776DDEC6319B7DAFC4300D97BFBEBCFC33585DF3F6D78DA1372F2547840E01C473491320D4EE1B10552DDCD05CE63CABEB11B88409738241B268466C1AFE7FB8D82C07D923661929C4368F6CB6E7682E78F89C6B18BF4DD5B13C52470A84F01E8796998CC5CF0B046E9AF6FCC6A824281A1E7EECCFE90DB6EBD9D6DB04B91B5FBB0BB7EDB14C3CB6EDD5936B0965696C26006DA01454A4A4954F5EB4C572828300F7A69E96BDDE838C3B94A00B29802FBBC75CAB57B7EA3316C0EF5AC31DC22D70FDA6BB6706C7ECC06556D72E25872E5685704210B3C4B242499FF00CBBE6CD783DF0429E868C2879963C837385A5CB085A949AA660FA83580058A5ED72FC6B6B65DB8BA61EB6FC438461F2907C673FA485240C9415CF88099E73CB96666CE64394B1ED91EBCF4AE51A00259500A33534A3EF10E73E3D22D6676A2D97722C6DF86F94494F8EDC3A91DCA81073CA0EB977A80C5E1771C94BB3D4873CB85BEF710E08702A43642DEFA45E2186EE59699B8653C4C7BC97169120A8F16455D34D3BD452677CB5005E97229FDE79757786DBDBAB528289DE23E97766A503DF9430C45AB5B80953A8B7B82CE6943802A39E999E5DB3D3AD4A49DA3BAC1EB70097176B3F47CEBC6164EE8496078D03D73D0B0ABE4211670966F909BD0D2592E65C0D27850383DDCA3213FAEB066B49DB7F13294532D4B6B80096F2F2F586FFE62649F9656481404B392F6AD1AFC9AC21E7E1DCB51EE072120444FC2639469DB3CB44BFF0052634577D63AAB97DE364E2933AE4115BDB4E3CCD0E9A3B806D968E271A74BE7252B8667391993CBBF291DEB7FFD478C5172B9A49A9A9E5EFBC2A12B2B2C65EE64FAB572BDADF984D572D5B49517929EF97DE9D67B01347FEA1C633954D1CC9D5BDE5C6154E1173582370ABBB926AF9BE94072AD22D1C6378585618E38CFE29849464438B01C075CC4C8F3D4CD4D60E79C523E62CEF28805CBB8E64FAF03689FC0783F138C489C6429454CEC974364CDABE678674B5BFF00763669C70A2EB16B76C4E85F48F3CA7598F2E5CEA4E54B4AD3F5915E7951B8D5BEF944B2FC118C949DE95852A2057E93E54248A8E59B52166B6B366B10B8371618DDB38B7238509B84418906409F2D7BD34C6E191BA4A5493CEE08BDBF711B33C338B961A661A605077210775F51A30ED487779883CFB7325F6CE60A254387288EC00E474CE7AD371A8DD51AEA2869A55E9534CAA5EF1098CD8F3A5AAC6EC41151A7DC1B8E516FAD0149242383FF00150F7A679888CFCE2A384A065920558DC3D2AEE6BF8CA2CBB35065604A4E8589C9AF7AF1B54D2B7888B86CE720F68F9F7E5A7948AE41E221FF00F60A615DE1956E1C76875865BCD038977A55F3D03D7CB586B7486936E841C94E8565CF2E994E93D7E02AD580504ECA4B962400E4B661AAFC34CDA2D38652F789BEE07A1B02C34CFBDAF58D58F680B05B981E156ED82A0317C39413131FFF0020C2A600EF3CC65F1F40FC079C3FF51E140723E627D79D85F93C50FC533184DD6B6072E55AF677CE91DBCDDC2148D8FD9D4AE4286156120EA3FF0088D083F7A57DA1F042F7B6361C1B89693E498F31EDE2FB426E5C0E51901BE7E9FAD5CA21A14A20828820A20828820A2086ABFCA7EF98A208A9B5A528009CE4F4FDE88214F151D7E63F7A208AC104023434411ED1041441051041441051041441051043424176648198C86B33AE7D4F2E9CEB72B0894544380FDAAF9D73F758D0C82A0082C9258BF0E9EFBB3779B511023EFAE63A547CB5267853101DED7CC00435BCA1DC8099742483C34E141C9F9DDA39BFED41835E607BE3DDA6D6B4EB6C61C1DC4538A3CA5148056DA1A652B50112A260126BC81FF509B3969C162D6038DD57A6597B7A068BF787A6A0A65A7526FCCB11D0F1F31190F12B9B775A17691EE2DA69606449F701927A1C88D2457CB9C760D5336C4C0DBBF5AAEF5B923F27CF5EB3B26515A5082012C4D4519B2AE9606B70D9C5A0AC45374B2E953C8493010080070E472D0091CA399EF50DB492A918829776A1BE8E34CB5B6978B0AB6792948CF403882E4DC71E368F5174EB47FA086951A07733E797AE82A3D33560BBBF7E99F2EDCDD05E12623F8A95517724654E068E3D6137311BC5288710C0573E10A803947783D065DE9D2316A0C5EF7735D5B2EA75ED04942D0485134E3CF2F7A9AD2103E2BDF9A00EA24651DB3F4FF30B7F9A3FE4D4362FDDCF4A3FA187E89D2401BC0122D6A7BB74891B674B6D21B3991327E7D4741F604B398264E9856282B9D6D6D5F5E995984F54A2B200FA4D8162EDF872C7D21E25D52A20FCCE5F3E54EB0F2660A9272A039D2E3803ADFA4372B969A048ADC365DFDE9155BB6A40BF796B4A9A5A99F1500CAF2309CBF42721CF3CE730C85B5DB9870C2CFAE9979D5099889614974D43B1614F3D784629DF6E3589E15B2D6B86E08D3EE3F8DDC30D071A0541B6C5C212E874A4C89415012623BCD4D4B0A29156398A86E9F9BEB099C54A24EF2052C5AD950B9CEFE958CE7B01B396FB31B3369875BA43695DB34E909007F51E425C72748256A56B9F51315352710508092EE00CD83E79F768AEE38A553B7921C39627B53F079D69177780855A29859515924833A664FCE69C22782C5CB96BE7CC72D1FA43505887EBEC7DB9437B4B336CD3ECA5280E5D0212A0202A27883A4EB0321D01D29F4B9C802D7B161C2EFEEF6CF72B0552D4C92106A186F558E5E75ED5235577DBB97631B617B4F845CBF8663F8105DEF0DAAFC2B4B82DFF0054A5600E257BA888E67999A5C4C964592E320C395AA29A3BC3B46252E096034F646BD838D2301EE877C9BC0DF862F7FB2B8AD85D61786600B4DA397A869D67F121AE26F890E1252AFF008B33949351D89DAF2252BE4A83D2854C683D7ED0FE561C4C47CC012806A4B004B9A51BA7946EBEC761385600828B6538F2930971DBE292BE29CCA5423E27B557315B4254E2C96009B5B56EEC6E358557825B10028D1DC697D3A68D9BBB5ED717816E908754A49009F0CFB9CB4CC75F2F4AAF4E214A56E9A1B75AFBBF0D2139781536F14B1D0B057BB71BE70DD6F2D078ADDB6564EBF884C83CA323CF3A4521492E083ABBD7CB9C657842A052EC750A63CEA29A5B5E061DB6FADC424BAE1B75FF007376CAE06939EA94F53CC9FF0034F913A40401365A49D583DF577CBAF48899FB216A5EF6FB816AB13AD73EF7CAD15A956FFDCFDD93CFDE1CF5E7CFEF9D6462304A1FFBA1FF00D21F857A5DFCE1B8C3AF0EC93522F99F3619F9DF449DBD62C9B539E2385B482417152729249CB972CB2E5DA4B0B2B0B394375294EB4039796A7CA27707865E2421294A4A945AD5B81CF51EB9BE9F6FB77D69C14AACB0CB974DC12A48F097212447E6820C67CB908CEA613B224CD62025AE73D2D567B768EC7E1AF8798DC7C895304B092A624B149BBD69516F2E31A5F7DB73B418B5CB97577885C7F5CCAB85D564341A9CA408333967CEA4A5600490C94848E54AEBE5FD8AFA07C3BE07183C32244E40DF005C71073BF967A88B2F16BAB9BB928C52F50A339F8D1107CB9E5D35A7024EE8259C0EA3A53DE516E1E0A9332A10914190CC64F5BBFB7885636AB1ED9CE1559629882DE6CC92B7945A235CA35CBEB03AD31C44BDFDEB56874193D1CD731ADCE510DB4FE1E7CC967712900E5EB460FE6EEF6BEC76E6BDA4715B9C598C131A7D0E71A90D85BAA247432547F49CF5EB5E9FB326CD5B83726EFA3035B37E291C9F6E7C369A9139611500ABE905FE90EC32A8B657B88DFD62F59C518372CB8D28702567C320A0F1267239E7F669AED7D98BD91B3D78C98A1BA12E4039364E19EB4EF58E358AC0CCC22BFC7285A194B1F58666398A366DC18EA623DE09530A7828702499139C831A1D73FA9E506B814EC4276CED4299043EF3026E58F0EB7616EB17295F2A682A0487BF7E0DDA2D8BB4BD78F5BB8CAC25A649E34A8905526047A83AE9E622AE188C1AF66ECE0998090006A386A3E6D5E80D1DA2DF859E9F944D015062F7E5D88B91768C67BD2C1BF98BFB3D874B7E2E25885AAEDF889294FE1AE995AF8F2241201881DF38AEEBFF004F928E2F6FE0D69240F9A1C500351C6AC337E51CF7C52779334BDC28E55615CBDE79C760F64C26DB01C2590326B0FB341F34DB360FCE4CF5EB5F68FC264E1B64C8704FFA48B0B505A8DA0D34A5BCD7B4D0A998A98A51FA8A8E766367ABFAC5D68706700998CF97EB5615ED1DCBA559D0073F6EF118A94CCC4679F2E1CE29FC5B61C2D190A1033D331220FDC73A25ED0130B00DA960D76BFEA115324B13DE9EEF15A9F4A53C460F9199F21F3D6A4E52D3303EF2453335B69EFB422B9BBB6AF1FEED9E45DA1A7F32689E11055CD23F30E922644F2A6B371699733E581BC750FEEB52D0D958E420EE962AD054F5B0EDF6857F1CCA44AD40189099851F2075CB3E54E64A8CDD136BD39E7942A9C4A5428CFA77E3EF431E26FDB5202E14892442C7BDF09EDCFF00DED35489555CC401997B35DFDF9D21ECA96B9A010186B966D0D5DBF69394923E9CF3D62753032F8D42E2F6E60B0C4838896FA6F0A7E7BF0E21DA706A2CF4A805ED5EDEB163E37BCFD8AD9E5BAC6278F61CC5F311E2D82AE5B4DD278B3482D28C891046B919D2ABDB53C73B3B6661158A993659003B05269A67CFCA1D4BD933A6A884A084E4A214C75620D5B3A44161BBE9D8DC52E536F6F72A1C4603AB52037F107F59F94D3B67FC65D918FC60C2A14872ADD774EADAF06FC52313364CE96E4D8396D00E95F7C5B2A5AE316370DDBAADDD43CD5C025B79B50534A2333EF75D0475AEAB86DAD2715864E225AD242802038CC75E76E05A23CE1D61DBFDB70D51CFDE9AC488B8495A91C2A1C312AFED33D0F3FBE944BDA895CC0862E6D415FD18D3E529897142C469ECD2D9650AA161C4852743313DAA550ADF4856BCFEF1AA925258DE2BADE35828820A20828820A2086123C4E1EE0FCCFD8F5ACCE1FF00F156AC8053F2F64FA43A425E50E6A3D89A428540850E9233E7F647D399AAF6CC9CF8B32ED555FA9E1A8E35D1A358D3FF006C4D89BADABDD4E309C212A38EDAAAD6F6C5C6C1F150DDADC26E2E380A4710E26DB2150340796BCDBE30F860ED6D8B895A51BE4CB2ED930A8B708B46C09AA1302033259DF4539FEFBC6B3EED36C5DDB5D82C3F145A8A6E380D9BCDA8C14AEC57F8658209247116C9CE67B57C89F887B2E6787B6B4F985051B8B5D5980ADCF3E9A976A76FD893D9090E1DA8721916CF83BEA06513CBBA0D2CA262232D27FC6A3E72753C6315B4FF00C99A5649356BD78B67A533F4BBCAFAD00D19AE6C47BA7AD6176EF4883C5A77E5A473D24F61CAB444D2A65025F424F2E1FDF9EAB97BB4BB54BDBB55BBBB370878973C44858D0E99F2FD29E4B9656C5C1D4E9FDFEDA192D3BC4901ABCADAB663FB7BC3E6F9FA73CF2F59E7AFCE9CA70FBC452D5200BBDB27D32F586CB96C5C9BE41C9F4A768593F986BDFF00CF6A7689252057A1EB70DDA13521245125CBB96AD3DD38087CD7F6FAFEB4FE4A294E14CEE7F64F610DD520B12417E0FE6E3216D6247F061865370A59E1BC30533A701811A46672CF974A9995294102A0939569D1BDF488D5813173129FE528FD593BE6D9BE79C4D3780E137D6ADA714690FF0081EFB256124833C530A079C69965E712B225050AB06A56B57CCE6D9BF9B888EC42E682844A40512FBC482586AF67A9D6D71130CDDA14D27C3F7509F71232FCA9012072C801FB73AC295B8B24F2D1E9E8F73FD420B94490141DAA684D4FA7AF2857F140F3E7CE72EFAFD3D2964CC0082F4C8034D6C4FAE67A468A934A22B4CAA7DFE8DE28BAB852916C5A265B52B8C89CB88C0075EB3AE7C8D3D44D06A08E5956C7B674849324EFA8A92C0E4CD6E6EF6B8A33C597BCCC758C0B6471DBF7D21C1E034D2F9FFCF2D899CB32AD3BF5A5FE6EEEF68D972D5FB3539C6C892920100DFA5FD9ABC61CDCDD8E0D856CDDBBF86E1CD337B89BB72E3CEA1A4A16B2A794A0544004C71644C6B3E74EDA7337B12480CFF6D3DDB47A58F092C19037CEE8171950E63A17E4632D3ED356CD169D584BAE0924182273E79F3CA7A79C45C3E94B2B53A58CB1404B105867F76B71315D9AD2865012E7880490BE2E23A9E7CFA72E9446CA439706BC7DFE624D2BE21A8FB3CB5F58F5A21BAD172C5F30D78F7C4299CE008D4F5F3CB2FBD6929A58022E3F223558019B378497759812353399CC7C40FACE79F3A6C92C41766F7E578869D27E6CE600D081ABBB0E6F7D2CCD420617DEFEDD1D98C02E4B6AE15B8DAC20E801823B733CBA4198CE7F674D4EF07BD1DB8364F6CC9EFC3A5F83B63267E224A948DEDD62011435A3DCFBAB54471EF6A77818A5EED0DC397CF2DE6DD795C3C4A24264E838A6047FBABC60A6A77413502835E75BB79B5338F69F823610F91246E00E91D18662B619674CAB139698A85DAB6A27358EBE5940048CBB4CE841069FAE68D69975D72FBD62F58BD9CB9135920D05486D1FD8D6DA9A1CC450264881CA673ED32232C865E7A4B45CF21C034550B5A8DC79EAF0909CB9640215A501A375F4FC442DF620C2D21B5000AC11CA67965D73924D3499358904BE6E3F2EDDB48C7CF5CCFA06F1D3CFDF73CB155F3B89E0D8EB18861EEADB8702814A8A465E519C1E7AF3EED953774850259E9A65C73CBCAB0CA6EC59D892B265A88502EE1F5B5EF9F28EA0FB3DEF06F719D9962DEF1F5BB7496F85C2A5126048124E790D0CF3ED3517E319FF0033C3F32593BC4A1541A3E94F6ED78F32F8F7C3E246D09BFE9EE904D8354BBB5FA9D2F58D8672FDE369E0824159EB1A9E59F9F502673AF37787E4997B5F79882262A9D7DDC8E2238FCDD9C5134FD2D66A3356F5D21F5836AE04A543DE57BDDF298F9199FAD74DDBDBD3F05BA1DC8038E55E3FAB343E4C8F9729E808157A0FEBD8BC634DAFBCF1F7A3BACC178A4DE5D5EC26419F08A17CB98CF96401F5EFDFF4E3B3CCADAF84514D3E62090464F5AB797A1A8E6FE279A1299AE4FF0015371A1717EF7FCF607086FC0C36C520C14DB30982607BAD2464272F8EBDEBECEF8551255B2E402104FCB450B3FF0011CB4FEAC3CCBB571E99589526BFC959B677D726B696313CDAF23319C4472E994F3A9C9B8390A2019690CF50900F2D0B7AE511A31C998FBA4022A75AE753AE55EB0CEE6CCB8A53ED28A5460C1ED965EBEBF1A6337032D03FD30D43EE9E63918CA4AE654B9734EBFBCCDF934276A9712541E54C64028F2CC69F0EFF00AD7F1188998759FA983EA476D457DE4BA2402FBC2FA5DC7EB514E358A14CDBB6FBCF209F117054A5C78420671CC77CF9F7353B85C6603FC713710B921412E4A88DF06AD77AD3FAB16EBD9614B2B4A4BB50354B9C83036AE7D59C595B51B6FB29B3D6EE3D8CE2D66CBCD4C34CBE80EE5FF8AB9E407EB54BF1178FB66EC996BDC9F2C14BD4292EE1F9578E6D9C49613642D44028209BBA73A3DBCEDE51AC5B43ED3570FDC5E615B01B3D8BDEDFA484B18B6296BE2604E28C66879B54A929D164686BCD9E2FF8ED2B0DBE9918A7237836FD2828CC781351168C2EC898AFA0B849008DD05E9AE8C6313E26D7B42EF0093B5FB59806CC60EE199D8EBDB9B3C4D0D13201E3F74382418D2418CABCD3E20F8F78F5CE9865E2E6B026D315BB7E05BD2968B061B6484A424A3798DC8ABDC3D9DDF99A42DB3BB9DD9AB4B858C471DDA3DA8B84C156258EDC22F2FAE179921D78895250470A33C911AD72FDB1FF005098AC4C95E0A662E66F12410566B51C74CADC749D93B31A57F1019E940DCBAE9190118260B875BBA9B6B271AF0D24216A692932260830232D620F3E951BE17F8AEB95B4E54E54F213BE2A554BB3DF4634CF9445E376728021208CCB8F5A1A643A4671DD163CCE2B84AF062E14DC614A511240510E2CA877D079F202BE85FC29F8928DBD230D86F9FBFBC121B7B80A55EDC8966B068A7E330E641528A497BD1DDADCFB53A1319B5DBB52ED0B4DF10B9040274300C1EF981F3F87ACB666CE44E948C4160E01AD19C6B6CF47E0D7AECD5942DD2D5720356D502CF7D2272C12B45AB6173C512675939E7FA768A94284CB2509B0B7BF7CE1B6FEF926BEEC07010F2B119828820A20828820A20861C12E13A1E674CA75EB39E5E75B4D27FC75268CC4D79B81C896A71870957FA613C4F2677EFF00685384F14E5DE3AF38F3EBE7EB5AC14A54AC5FCC66FA89D2845001DB2F2A425314C014914BD788BF9F3D0C59BB4B602E59BC66E528751736D716EC323DE243CCADA59E13A81C5273981D00AB26D1C148DA5B2E6C854BDE3B8ADF252E1CBB0E4F7B75B895D9F89DD5A595BA1D2E41B91A17AF2B7511CAFC2D86375FB7D8E6EFDF4A9168E5CAAE30B5A0016CE97D4ABAB84B44E4A502A85009FCD97535F26FFEA63C1ABC34FC6CE91288AA88094B50BE5C3981CB3EC1B0F1EF2A5A8029A0606ED9160FA96BB01D22FDBC68DDB8BBB62196571C2DBBEE39EEF320693A8D6441E95E024E166C8529131C292A21B2FE5C6B4BD348EB3B397F370E8A3EF5C9CB3BE74E34B81110C5D715C7E1C1293A059C9073F4CB4CF28A792533010E6CF42723CF89E7120A97424B74773CA95E462EC6141A425A52D2B52466A4990673CA796639D4D6186E9AB16CB5B96F3F2A888F54B5281205C921DDEFD7F30FD1708E60E71A67F4D73CBE93528898803439BB71F6DA57386E517240BB54549E14ADA1C25F4710C8C7A7FAF9F4F4DBE6A29F50739387F5F48DBE48527F890780D0F2CE1EB770811AE5DBAD3C9335096AD7C9BED7FD6A92A4960DC7A5EB4B509D4758A96F5DBE0A78D0184478024C833EF710E5273CA321E553322685331D5AD4BF13DAB5D3364BC3A0951090952BF9716B1A72B73AE9376AFDCFE1C21F7029432053311A419E80F3F9549CA98C28AA6A48ED66EB7AE70C57242545D00306A0727F35F28789B84B00340CC6A44C7BD04E874D35CF2A8F9F39A6286F501B8208B7F41AD0CA6E1C95380467D3806D5F8985C5C9390933D24FEB23E535AA278554AC86B0767BDC7F40469F208B247507F07D61CB2E10D5C051953BC3E11CC84C6B33A03EB4F25CF600DF4E1ABDFCBA36692A428A907E9003EF0CEA29C3C8C5A1B65B3EEED5ECAE2F81AD683717EE5A2995289F0D2961E0B7028E664A410235269E23140A4835245079675E3E5C630A9133E6CA28291283FCC16274A5AEFF007BC31C1F046367916366C2521BB26C2484819A9491C4469CC4CEBFA56B1CBDE9E55A9763C35F7E64C4C4840548521CB960F6039F9EBD225AE116F7772E3CFF0019414C2008907860C8D333D34F9533A126E3CFD4F9F942A842A5CA084B120E76A9AB7AD7AD629B3B12CB094215EEA492924E704CE7F1EDEB58850A80A1BE6D6F387801403C5CB90CE33A234242886A1ADFF4FA43776E005409D739D065A9E7C8F5CFCE91981CD5D8B5B87F5E70DA6A4EF312472D381E7D793C473B720716A75D20E639E5F12338D7B068A705B8B3FB7A9C9FD690A6170E14B0AFE4A7140F4FC5AFCA35ABDA06C9EC4765AE54D254B752D2CA12904A879C67CA7AC75A96C34D4A1282097CF362F9DDCE56E2C2D1D8FC0625A315BAA01814B3D32A803BEA79C7212E12E5BE2B72DE2E859525D5786003900A233E2D3CFE11955B30389010904D40E5CB91CF933691ED3F086270E8C3CB48DDDEDD00136AE65EAD66FDD66EDF1342521014AE119252341DA35D0C1ED9F39A915E212A1722B4C9FB9FBDBB474199814CE4FCC74AF785C5F2FBEBC3524BA5DFCA09D673C8E7AF5D3D3E3CA9A2E6E76BB1CB4BBD7A74AC4362364EF1748CCFE3B353AD4DA2DBC6F114B4D32E369754B24CF081C880200A69367B8209ADBE92FA5DFDE8E23383D8A4CC054906BD0374E56D7998B5B10C51779E1212E21B724407494F4D633D20F6CE9B99C4B24292C3F8BE45A963AE917BC26C992894EA4151DD3FC402598DCDAF993FBDEDF65D45DB2CAFF10B4389584F096C92233EA0E7A03976279D43EDB9DF3B04B94A2E7748615A1D070F4AC7923E2F61654AC76254801201A0CC6A1B91E0D1BBC9BB63C4432A42F8D24498CB91CFE73D74AE4B84C38918FDF0199449360DAD6ED5A37DA3CED89967F9298BB8059F9D4E608EE0C5CF66A0FDC80D25442000531AF126065CC08EF19F6ABC0969C604A12E4121F3BB120307F4BF3888C57D3208240556A6C1C66467A6BDA30A5DB2BC63DA7F74F84DBAD017833B8AB97E09C921DB74B8D822352065C519E5A44FAFFE026C6323178599BA2AA15E3439F3ADFCCC71DF15CEDD4CD17A299893ABB5A9AEBAD44764AC5D53EC5B0692B090DA119CFF0062129303331918EC62BE9C787538A4E1A4EE9DD0501ABF4D0545FDF91F2FEDB96B56354966FA8B1ED9BEBF6CE9131E21B74A54EA5652A895019274CC9390113FB55C7FCC44A40F9EADD201724D389EB7F4D21BC8C2CEA50D6E75F77E19EB0D6F7136ED185DD29E6D16A94951714A809004AA4E8204C98CAA0369F8BB65ECF96A5AE6A0EE8352A4B5B57F2BF78B260B08A528259D4726BDF5B0CDBF6DA81BCEF6B2DDFEC7DC3D63678BA31DC59BE248C2B067DBB8BF5AD23F2A590A0A2A9CA23E735C47C47F15F634854D1F3E51500AFF00724316A06CBDD2D16791B2B78A7E8AE6E2F67FBE5525AED18A99DF26F8F78D85A2F706C39AD98D9FBFE34B0C630D5C59ED1B484129529F4A4F08E28E264FFD08EB5E58F1A7C7FC461715324E1314532D2540042C806962C4D19A99F38B1613C3E850F98505D4CC08A060D4E3A33F286F83EEBD8BEBAFE67B578E6378A5D9505AEDDEB90FDA49CD4025C1307CB3115E72F14FC72DA38D331271733EA7702629EAF70F6D74E959895B11200013F50CC870391616D7F35C9EC5AE0B8484DBD85A069A68421A4B690D891AC72922550333F1AE3D8CF1EE2B684C56FCF242890C55EA0BE60B3F9089CC36C800074017CAFCAAEE39D3562F0E9788DB110AB5682644C204FCCC44763F2A7123112F1A9798A1BC41CC568F6F7DA2451B2806DDA13572EC73AE75D1E0172C3612E59B4842B4571244667B69ACCFC2B8D6DAD9D8A5F889A4AD46515644B014E9DDBA64B0C1A93BC998DF5301BB6A5C97F4F2CA29BB5BB7C10D9E042345F0E47399024F3E53AE5E553F324E2767CB4CC0A208DDB38146D19FF3A986B88D9E8520B3922FBCCEF6D2FF009B45AD866D07FF00816D93174DAD630EBC75B4DCA947DD4121284F88720389648483AC7781EB3FFA7AF1BCDC36D4C24B9D38A46FA036F367673A80C2BD328A16D9D9EA017F48200A86AD7FBAF08DE3B2B862F059E20CA7DC71A42DC1A95788D8292206866467E55F62BC27E24C3E3763C9226254F2D1621DE96ADFBD41BD0C72CC7CA5CA5949AB6F55249B96E1A75EC22EB654168E21224CC1D469AD5A02D333EA4D8D5A1ACA0426AF7CEF427DDCC2B598560A20828820A2082B06C791821B05242B965ACC41EDE79D42A3682A6633FC32490F548371715360F7E02F585424945297AF5CFA450B751060C1E922467FE321E952EB929952D5319886AE43573473AE7CDE184E594AB749607372DF80FF009EB6E5EDB3D77885BDDA4AB82C82D2100E4E0793C264660F083F426743A61B694B5A6648762BA298DC07760CF5F22F9C3BC1CDA906C0E5AF63C99FD446897B5AEEC2E7F96DB6F0F0041FC7ECC3BE290D025DB945CBA90E8570895042279E4267515E6BF8D3E0346DEC2E2A7225050285127774196AD47C9E8D78E8FB0F68D65214C145986603DC8A548B1A1D230CE01B5B6FB5383DA5EB2A0DBEB425B76DE785495B4036B0539C4A924C11A57C9CF1F7857FECFB6A761F7373756A04377CAED6CFBBC7A2FC3A913300958AD03837A8E0EC4B6B571138DD9A5E1C208438661472332799CFBF6F49AA22B06A975673477C8E6DF819923368975A0272040AD9DA81DD837F50FD9F12CC780EAF8968CF8A7AC75EDDA0E99CD3698B12AE403CFDBD5A90D16029F75B81ECFE90F9AB9194E7AE720F5CA333EB34DD5B458DDC73FBD9F4E8E2F0D148214D523337E8E58439173A67D39C65F1CBE1E95A0C7392A05EB4A870D539E661DA255052ED762C391AF3878DDD6B9FCFFCFEBFAD3E958E342540D01A9B599BB1B5A34561F41DBF43D44495BDC7BA9274CE7BFAFEB9F99A9AC3635C02145F47CC11F8A54654786536433D393367E9E96A65128DDD8C803E7A09CF31A7C797954AA31E4A4EEAAE2D4EAFCF817A3F0862B906A4D6CC19ED7EBD61D78B2AD411E93F2314DA6620A94589B9A3F3C837B7864B94E5ACDC7F47CE1CB6F0C88C8C41981F4394F6F2ACA67106E7AFE7BDE8D7D234F95BA2C0F9935E5587497A10003ACC91E7E83EBE95212A783572096EFE9A793BC226555C01D6E3CBCEFDA00F1D38943D4FE84D3A4CE049A654D7DFB6307CA1C3853DB432753C6E295EF13F1F8EB51B893BD3093776603261EF8BC399602502A2BD2C4DB9427E17657C3FC5378DDC6A3B887CC8E16D23CF5F3FDA8845441510F0939A2BCFF5A05481AC651FC875F4310376E70BAB13A46435FAF7AC4C04023DB3DF85A1E270E26241677AD785743DA2356E8D4188F3F8CFEC7D4D47CE21CD0E556A5B8F07F511ACB0252EC03721E963CFFBB5F1FC1DAC5AD5D6AE1295B6E2542089047DE9F104D29869E1EB514A71CAE0B71EE0D62DDB1B69AB0D325AE5962935D4E7DAFC1A39E7BEBDC83AD3AFE2B86DB10254A8424C19F200CF4CC7A4D5870D88DDF50E73E5CEF46E3468EFFE1BF1B7CB952C7CD3BC00DE0FDEFA79E6F411A717D8662B862541D6821482AE20B0A0A80729D397C2454989E4DCB9CF3FB8D3FBCBBE6C0F19C99D8742553379D981555B817F2E76A45BCDE3AF070B6E96C198304E506273396791F5CE915CF228E69535A7077E1F9E57EC26D2958A1BC374B805C31E9F887AAC6F0F527C2B9E052849311CC4E527EB4DD53C005CD4D8BFEFEEF6A343D9B889724198161219F260D42D4F7E96D59E10F6D26D35ADB5921D4B2A74090232C8F29190397C2A3CCF24FF002163AB654CE8787E220F15E38918013126686014012AD417A3F316EBAF55F727B14BD9BC36DDB525521B4A8920EA44EA40F3CE464072A87C5E20A94506A05186B9B823A37121A8D1E56F88FE2197B5B15366214FBC7573F80FD684E95D86B5B22FDCADC1C86B1D3F688F8E7CAAAF3E4EE2FE6002B91777EB98CAA3AC713C5E2D23FD304BD180234A9EB7CE2E54307C36DEB7716D2D869F72E14150901B42949923B2753F2AB3F8687F938B932C1FF700AA0A694EAE699935BC436227ACA666FB1410C9003A8DDE8F95BB691AE5EC70FA7783ED65BDCC72F9D7B10B6D947B086F0C57178ADA0BF6CB6DFF000E4103310A098D3CCD7D0AF835B351253859850E06E9A0B97D2C45B331C5FC64A56E4E29504BD89341C0F3B6763CA3B5789ED2E0DB3B64A7AFAF2CB0D65A4125574E2590001275204C011E9E75EE3C3789365ECED9D2D33A6CB42D08662520EA796AED1C706CA5E2A66FAA5AE639A2921D357CFF005ADA91A3FBD2F6EAD8FD97B97F66B63ADEEB6AB691D516996ED128BDB52E8C802942828827A6BAF9F16F1C7C5FD9F804CE12A7241485070A00F30694D6B9F289DC2786A615552425814900D35DEA368D4EED1AD8EE31ED33BE7BA2BDA67D7B15B2B78AE26ACB0455DE1F88A1854487DB54A01524F4820FC3C57E3BF8E789599F2B0F8A5D94C02C80C5F27CB3EE6B16BC16C192809594A41A312056ACC33A722DCE329ECBEE5B77FB20DA6E1786B78E63EA016BC571665BB8C483BA9525F8E3E29933E43BD79536FF00C4EDB98C9CB32F1338A544827E628EA00ECED7358B3E1F62860771CF10F40039A01F7E228D1976CAF2DAD2CDB65D0AE36C11FD503C4009F7475E102027B0C88AAEA36D6231C8F998A9855354FBC564953D75A677CBC8CC49C0001212C4021BEFD4371A5C0842E3681B40842608F42627A6BE7A6994655178BC22B100A92C49773D684D6A5C7A7187C8C0A52E48734A016167A5AC1D8171D61A0C40DC8F149E12A9CB498819C93AE5FE62A167603112BEA028330FDB27B96F505E1F4B90909DD0C40347B8A934CFD34D63C37103527B020F61F5E9972D2914ED5C66114005AE94352CCFA5FD87857E50C9B3FF006FBEB0ED9BA1C31391981D0CF4CF4927A6B9F4B56CC54A992C63A78057724EA1B335F3CAF1133E6A513B74F604E63306F6CA9A0AB8768BAE1E124E5A723D758F803CBE34DB6C6D2C2CF96654B6DEABB52C5B57FD8D03467E599A9DE48398A3BD19B91FE8E4F696DEE12BC6B66F116AD65376B4B772DBA9C96855A10F40234E22800E42454C78076FAB63ED492B0A665A58823506B466F7A9883DAB800B0A7191737AB68F97172348CEBECD9BC73B6BB0D87AAF9D42715C2D4FDAE2ACAD50B6C36EA99B62B495482A4360898CF3026057D6FF0081BE2F5EDBC1E0E4098A51DD4821DC0343C1C1ABBDF2668E3BB6B67FCB9AB601D4AFA435581ABF106D71A3398DADB6585B414233E9D394768FF55EC9C34B32E5A42AA77479811525A0CB5141B8F7EC8A438A711A414410510414410560D41E460862B695C648227F7FDA7FC72AADC9D958846D6FF309FF0049CD896A0CC7EF3E30E12AFF004F745EB539177B7A77E109780A05464124CF9F3E9973F972922CD8B989561D72C36F100303D5FDEBADE3A7C92B5022BCBF40DE1838CDE36FB6B6548F0D321C4A89CC1CB2F39EFD472269D230389978BF9A15F4B92439AD6BEE96EB1B4A1F2D41CD012E06B959DF96A6F169E3BB3CF63AFBB657A8B6770479A710F5BAC152965C6C89283EE9851907D6A5F68E0656D0C22E44C46F132D40821F22053ABFF6F162C26D64480192833014FD4431605DB514B59F5D390BBCED96C7370FBE1BBBEC45A5B3BB4C5EE9B187DEB69526CF0E52C00B4DEB86196FC57DC096C8D4E4649AF9B7F1B7E10E315B5F13B4E525A4EF2D4285B95B864D51DBD11E10F14C8998144B0C16000A4E85C5F893972BC64EC531469DBC63F95BA8711E1B4ECB64282D2EA12B49491120A4F5F3AF0FF89E51D8D889926602E85148E2DD069DFAC742C1E2062929B97772CEE0D998E86F5E10F7F18AB85788E4A565290A072208196BD62738EDA455490938D4EF21C82F703D1F2A67931D2243FEDFF4FD36353A0A03C0E674CC712E1A749C81CB399E594E79FCFA73AAD6D952F0153BCE34FB0EEFDE911F3B0C50A2925CD9CF0CC77AE5CCBC3A0F1CB3CE791CBACF3EB9EBFA536C0CF5626589801A9B171CCF2B5A9C328752253201567964039A5A1E36F19D4E99F7CB223EFAEB52B2D6A04006835B06AFB6AE42B4817298D183BFBB5FDF37CCDC840824C8CC4E9EBD4F6E644CD4AC9C49481EB6B65DFA529C58CE4D1C0BDE9F7F3EF126CDEB41241041904401033F97CA633315228C61490C6EC286CD6A397D79B5CDA3A6A1CD081C39B69516D224117CDAA08E20349CB5119CC79CE7EB4E3FCE4B80F56B92C6DC0E9CB943338770E01A92EF7AE7D3434E90E91760F2313D33D3B0FF0073DA9DC9C5A580A1275E15A55CB54EBA3011AAF0E4243379F637FC3F387ED3A1690648D753F7CA3BD49499C0B35CE6EC03396CF2E875A886A431208AE60C384852B457C499F9FEF520858A3B1247507367E7EDA34514A6E9F20DEFCE1276E034E14C4981A673D3EF29A426252A39823F5ECD23644BDF4024917E63837B2F0A25D2A12065E47F7A4FE582F7A5EDF88C19605DC3F11F8F75D0C2A1E200100C7A79567712C2A789F6FE4234F941DFB1B9FB7F51E195273D4E7F3AD0A085820D01D687DE543181F4AAB56D3945B778DA8DC2C83CF4E5EA0919F5A4A6CE480451C6B7B3BE6C226F0CA48949A3DEA00AF57AC462D0B920900721CC91D79FED51F35495367EF30E4728426618AD6A21EB5A1ABF7B71F286E0381D25C292DC0084A7946B97DE51AE7484B1B84B92CE2DC1D9E093226C92FBC79B906F4FBF631058DE1F638A214CBEC8532A10414827969397D3D0549C9C60401BC016A55ADCBD5BA67160C163A7482085356A145B36E35A07E3A55F5976EF719B338E3B746D5BB965C7408E04A12DA55C3CA0729EBF1A79FF00714121BE9A56C071E4F4E6747A742D89E319D83DD1366380DFC4D5C3F37F77A46B2621EC8370EDDADD62F8A5B5289095384119CE7EEC4F5E99D657B450522A2BDF3357AB7BE7D6763FC59C2E0D094CC51A001DEFA3D7BE94E30F2C7D929C438CF8D736EB4A0FBE56A25644F972D23E191A6AAC6855986957E1C39E5EA0C9E3BE32E0A7CA32E5BD410F41DAA4F3CEDC6362B633D9EB65F035DBDC780DAEE5B852961283EF01391039C6667B742115CF46E9622C5F869FBA1E51C9B6E78E66638CC32A6A92953B1DE6353570FCCFEA873E3569658682C30829E0425290008C9207FAE9D6A03138B44B9A4A8B819BD6B5AD0F3CDB368A64CC5E231690B98B2AE65D4C4E7534FEAC21EE1AFB6C073C549515FE58823312013991969FB53156225E2C89680429D83655B3D7D2AD4D0D7F152A615956F11C9C963A83C7DEB61EF676F86C86ECF6BB1568B366E61F62B4FE22E3DC2E9B86DC6D3E12841570A8C1D62BA3782F62AE5E225CF56E9485051B937D326D29E71133C94975294F50340E35F7DEFCFEF629F6ABC3F753B27B6F8A61FB3B88ED0EF1768EF880ED9DA8BAB7716DDE3C18F1085070A5285A44E6400790AF69F82BC6F81F0E61A5A6784BA11761906A3915E2FEB5E7BB7F64AF6829C12525DC3BA4E8E3576EA6368D9C2FDA37DA2F13FE77BC8C69DD8ED9FC45616CE0B82DC5D585E30C24884BF6EECA525C4F091C8C9390D281F103E37CE5E3662309885A6539000511FEDC803C433D468F0C703B1918597F2CA522F972D47EDEE1C18DB2D82DCA6C16EEACD0E1C370EC5B106D2957F37C4D969EC4BC4199587C0078A46473AF3178ABE256D2C7159FF226105DC95927851D9EF47EB5112F2F00898A094A149ADDBE9367761620EBD6ED78DCE34965F5B96B7B74A57BA1285B92CC0C824091EE819013CA04E83914FDBB3F1138AE74C5A8135DE24FBEA732F60D3B85D9492005212025DE9AE741DDF3ADA1156D23CE0F7D8B4E28C9C4A7FA82720788C67DA35F854CE071F805247CF92925AEC1C1BBF4D444A4BD88CA13113266ED7E97A11986AD2FC03666B0D5370BB9578AE2CA8AA4EB33197C8683975AAD6D19EA56349C2AB764B80C3EEC776D4CDE99461783F94ADD0000097767D437322FAD6249A6ED9413C62546072CC7D67CFE13562D95890129138953E46CD6E0FDE9E51A2E510E52D56BB9623F2FADC3C78B6C2544344840D04C7E9F0D2AC8B99859B2C83287D4340E3A3BEA1AB9C6C896581FA4645857DE77308159491999FD3EFF007E9558C7E064A945494A5817A8D33A574CEFC214DC2C6B5CB4E2F0A22E0275981D4F799E71150F88C79449560A4D1767B369667BF9718AFE27013264E2A06E5E9F6F60F3B05C5EA0260851D7BCF6F53DA3AD57D5B371F289C44C98A29772378DBAD8B11A3E4CF47F879265202564DAF535D3D8ED9C95A62B6FE33368E5B5C2D170875B52820147BC929053AE401CFA537C3ED9187C74948554298D58B83AD7AE5D03445ED259099891BAE59A976BF96675CA312EEFF1373751BFA7F67710BB6ADB6776E1D4ADB507382DAD956ACF8812B39252A71C54467C4A98CF3AFA77FF004BDE3593825E08E2541481BA0906E3277E2CE6BCAD1CCB6D23E6054C4CB1BE9A25C6B43D1AB5B1A56B1D4EC32E9A36CD80B4A894254983F99244A543A820820F39AFA7F83F1061F1F85978992C10509B35683DDFBC731C5A0FCE59C89A6B76F66CD5E53156186705104144105104144108A8428F9CFC73ADF786E367FB778502C2535CBDDF2D229A6B3524BF166E8DEB942714A913273CF9F2E43A5353F4D48A8EE3BFB31A2D05E82B98B1868E351390F3CE79761A79E9583894804B81467E85AAE6977FDC6A2528107773BB569E768E677F11CDB0C0F07DCC6D1E1D890B773107D36E709B25709BBBCBA43E92836ED932B0CBBC0A5F0E6919F979F3E2C4F9733033904228955DB31968FCBB476BF03E0819067EF2895EE9097A067BF03E7A472EFD94F7E3B59738633B17BD8B7B7C2F1A59745862AB4AD9F16D82CAD84F8CFF00BC4A58F0D10040564328AF953F13766CB99B467AC005D6A3AD09B5BD34B8CBBCEC492C25BEF53270C72A81AE95B51AF1BE7637A875A43ADBE5F6CF170BBC5C41624899C811A11CA32ED541D958444A400774024DEE2ED4BE5FA8BD26480809005402F571A64C694B0B989C6EEC04C0D7427940EB3946703D22AB9E2BD9E89A8580CED7E3477F4B6552222F17860AAB5791A65D2F51FDC546F805646349CC881CFB7FBF5AA7E100C3A0201AB97007134E4DE79BC252E584CBFA921C700FA0E95B707AC3B45F080273D73FD7B7EA741CA45130383E791CB2B7A084A64B241296B8A5B5D2997E9EB0F9ABB0A0924CEBCF9E9A6A7B7FBA7489A1C54B771F815FEE23A6C925C1A0E1EACDEEB687A8BA190904E59C9E646BAFEBA74A7B2D6E1F7806B3963D7D3F55868AC31277999B571CB85EF539DDA241BBA1C2923E1F0C867FBCFA5644C014E1C936A023A5B5E6611128824D9F5D2F461687EDDCE5F9BEFBE79794F5CA9EC99C090D716D43DC53D7F508CC94452A470E9DDBF312B6F78021327AE5273E5A7FBA9A913451E8783E76E3EF50D0D26C81739817BE7C06991E31248BD498D27439E60FA1E7CA2A5513ECCD4B3D1C77D3AC3432C66FD7FA8A16B4B8B9009273CFAC7A74EFD666B2A9E1CD09E34F7D237480031CACDF77E3A43969412224E713DBB4749CFF007AD7E790F4BDE9FB84964166637F7EB0E909073398E5FE7EFE5419CF93721FB86CB98C0B676D7DF1FBC2B5AFCCFF00E6F7D61A9984162F5D2DD33FBF3881BDFF00FB0BF4FA547CE72A249046447DFAFEEF13D842F253C00EAF58897397AFE948C3E979F4FBC377397AFE9442910F73CFEFFEB4411EB6CDB2DA05680A590413009E713F71442A852C00C12D567EBC5E115DB594FE448CB2C81F9E5F4A216DF570F388F73094B8E179A4008511000E913CE338144604C228E09E37AF5F7DA1445BF8060888E7C8F231D873EF44677CB3325B46A5DE195C3216EA960483107D35C872FBCAA1B1D24A86F11ADA84BBDDDBEFC1A24E44D1B9420062E2A03F4C859891D2156ED867967A8E7A89888CF5D341DAA1F08F2E7821AEFA675AB59FEEF0DE74CDE71955CE7C75ABD6343BDBEADF686FB61B67300C21D72D2CB17BFB7B7C49E6D4A6C2DB5DF32D80B52722085100284679F4AECFE1ADA2254B960AB404BD2EE3B72A9882C5A86EA998DB893CB8F95BAEDB6E13D983763BA3D91C1EE5BC399BFC5EE6C2D2F1C75D6997125F7196DE278B841FCEA3CFE3CEDF8DDB72E54B24CC724506F123A720F4D78D22B6B5CE9D34A10909961F7CAA8AAD8A69DCB3F3778CF78A63F6CC214E9B7658B8094A421A484A4250385B006A3DD007D00CCD71BDBF8E189C42A606AD28294B5F53CEB7D21CE1B00508A954D00BBA9CD497356B062FC39B4639BDC7B12C4D6A6DB754941910091F08F2E5DFCEA838E1BE556A963C789E2E6E35B5225A4E0C862D42CC0587BAE6F720521807EE6DE1A714A52D2249CC9839F3FDB23CF5150A6532AC75ABB6AE78FB689AC3E0F7402E920D9854FB2F9BDA3DFC6BA3593F2CBAF3D396835CEA4244BA501B1BE7719FA6A748999787DD4821346E8697B7AC5DB85BA576CD2944E7C53D400A3A0EA0F5EA6293561C99AE1D9C06722AD9E5ABFF00422BB8E4EECD239D0FB6D28E4C5C4C3A32391E93CBE7A8F4CA3BD58307240DDA0B5989D7954B573FB3121C343A99CFAE75341C000E50000504325EA3CBF534CF14CC5ECD5E5F4C6628FBFBF8D5357249C715815715FCF0EBA3EB1B265A58BA5B98D79E7F98F2419CC65AD48ED29DB982292C193471FA61CCBD60549770C082E2CC69D2E215C26FEE9DC41E64320B5625210B293EF78B32674C8FCFCC57199F8829DA454E28B198A07700D5FF004080F5881DA1856A549503571CFBB659D7478C5FED13B2371B41B2831CC19D533B47B3AFDADEA5E68F0BDE125F6DE7405247147828502274E55ED9F81FE269782183056032902A585C020F534FB6747C7E08AB788723EA7A38A70F77B3D6378B707B7B6BBC7DD86CDED8DA5C05B86DFF000772D85494BB645368B2A03FECA6D473CC99F2AFAF5F0EB6AA369787E42C4C0A2A407AD7A8E1D1F23AF24DAB855231AB94414073BA45055CE9D5867AC6CD57A062BD05104144105104141A0274821051924FD690DFFA9812E6AD90CD8FDBBD2352A0FBA7CEDAC794BA405B0362EFD1FF0010A01F533F51C9E1A2AFDA4AD6C702CA9B8E22008CF3C8CE7F7DE9962C7CB04873EE8F5E1E6D95551294B248200701EB9D3F1EE90DD58836A4DC1085245BA14E28AB294A50546328D07330488AAA62B13B8953920A4289198B97BF3D3CD8AE65A9050ECADE20063992DE5DF83C70DFDA0308C53DA3BDA57F97DEBAB6363B6096EA2C6D41294DF2EFADA1C55D20CB6B2CBC9E268A47BA60EBAF8E7E2DF8C932F1589C31994015F4EF3B1008B3DB5FB08EF5E0AC37C8D9F2F7C0DE6AD8BB97626E6A6A1F8F18C3FB47ECDD6D87ED134AB8C47107459B9386BAD3A14E24982A43AA2326C1848098F7644D7807C73B6133B1335654F551777ADC1BF0FD523AF6CC98997BB5A8636A6552CD9B9C890CFC364366F07BFC2708B4B2BB536A7D8441282A28293920E9255C31C5AE7AD72E46DE4CA252179977229DEBCB99D62E122724A4070C33353C1F5EB5E81A2E24F1A44127976FD07EDA74A8DDA1B6538896AFAD2487A3BBD5AC09CA8D946D37FD4FFC7461EFB3B738F0B2E2A1D0A002B91999F211AFD67388AAB9C4BA94AA33DFC9CB1A3C315000D81072FCFA884D771E0E4A24C69C267FC73D7B1E74A2279A90A26D6B31F75AC69B81BF8D356E3AE55890B6BE416D27333ACEBE7039FD9A7A8C4501053C43FB670D952BC631FE3A540BB31E845F36ABC48B77A88E6077313F3F874F853A4CE71424BDD89667FD7B1091C0D281C7176E7D1BCF263128CDD254849139839120C41F879473E94A267310C4BDEB979E6DC5E194CC2906D6E4FD2943AB5B330F9BB94C6B19794FFBE733DCD3C953C13A72B1CAFC1C5FCB268A95914039DBF421F35789809F78F48EBF796524E7533879EC0390DA3F3F400E6C0D2F0D26C87FA5A9C8BE5E63D6B9C48B5700C448EBE7E7F1F873135288C40342486BB1A7BFEA1B2B0DBA93F4853DB5F327F5CE1E22ED2980788EA2674E739E5AF3CEB2B9EC7F950330259ED5E37E1AD2F0CA64920B817C9A9D19FBE6F0EDABC40000E2275D75ED964639FAEB5A0C439FE56737166AE74B65DF46EB9248219AEC452CFA57F6CFA44BB174D142409CE7F365D7B76F8D6558A2C18B1A66D72F91FD00781762B94A62E03E5FAA7A4394BC8509063EFF005F856AA9F675543D01704F17CA9701AF0D8CA5120EEA8B543547A5CF768B7EFDF425F58E6408EF20E7A9D23EF3AD8AF7EC4E4EC4B70A74ADE2C1844BC9045F3ADFDF488972E10391CA7E197DC510F100877CDBDFBF3868BBA41204191FAC511BC34710A767872F3F4FDBD28821C356E80DA78BF3738CBE7F7E7440E0355B480E1E16A8C8039F2D75FBCE32F2A23054407A9CEFE7124C36DB2C2595092999F5D2328D3EC5109B2D4ADE0A2125E84FE2BEF8C475C59A9D27878403D49FF7A7C0E9D688583EBFB6B5BCB288E368A6D5C2AE1319C8F975EBD49CB91ADB13212AC31555DAEC694CDEC4DFCAAF0B0C46EA00722B716377E197DA164A1291A09E754F520CB9C9235AF0D1C3F2E0E2958426621C3024358D3F7C757C9A310FB40EEE0EDE6EDAE1092D0BBB2BAB1BAB22278D28B7BC6DF7818132A4A2044F43578D97354896921541DBEFA6BC223664DDF514545CEF1700F7C99835ABCA32EEC86D17F37D8DC1136CD949366DDB25C7C43893628432EF11131250784822728A4B6A6D39A842920B8B67AF46E8C2199900CC0B0A502FFC41649B0A8F4CBD623B107AD6E5C5E6E2F382A519929C95E920FCAA9B331866A89726E35CEF7E5167C0615E50243F1CEBC8699E67388A6908615C4D0CE79F4FBEB1E94DD52CCE340EF4A5D9CDE85BA5A25E5C80C10121BFF217F6D5ABC2CA40721C580547398CC41E607D018EDD7518204EF29245F8335B2A55DBD1CD17004BFA40492D9FAE7E86AFC63CF01BE9F4F2E9D2B7124203311C68077B6B9C29F315C29CFAE79E7133689E06D0907213CCF53F79C69CB2ADD321D4E41A376CC598D73115DDA65E6D1201AF2341DBDB9A44F5B93A8F21D0CF3F9FD6A670B26A29A92C3D3BDFCA23A24D1A791A7AA4800D1886FC7BEF7821AB90083A0EFF00BFAD4562177702C79585FCA99C108ACC0D0CF2EB974EFD2A0D52809A565BD2B933166CF9C3A4A5CBE432D6FF00DC362E01208206533239FC39F5F86B50BB63103E5290E5D8D7CA96BF1E42D0BA50A5073BA34D7EF15B37EE5AAD2B65290858578E63DF24084441CF339CF2E432AE458C49FF0024AD2186F397B9ADF46074D4E50CF15864A812A033624DB50347B5B2D6B14D9B571892B106AF54971AC4187985A3320A5C6D4DA723AC050991EB39575EF03F88666CD5E1C15EEFD686A961F50F4AB7E1E2AD8CC227EAFA458D8703A52AF90CF568B0FD9331EBCDDA6F276F373B8A5D04E0E8B9B67F669BF10F02BF13C77777E18510930A589E0CC1F39AFAFF00F00BC668C56C0C24B54D752928497232C8BE742F71DDE394EDDC0033D4B523EA0EC5BFAF2D63AEF5F41A394C144105104144105609604E81E086C5414A206467A743A799EDDCD343FF00BC6A0FB8673F878457FC8E56FCFEA3C518498FBCE9F4914E9EA4FE217921C025E9F9311EA6D2975C75510A02644CC40EBF1FD269AE3801289CAA48FC1D783BE74021F8A25290EE6F7677A76E2CE6DC2CFDB4BF1856018D5EB64A549B37CE52238585F4E7979EBD66B98EDC9E5089CC48FA1449E878E59F0A350BC8E090662E525601DD26B424B90731AB5F83691CCCDD4356588AB17DAC712955F5F5E5CA5D5C02A2597DD6D3EF6A0C0CB58E5957CD5F8CBB4272FC47899695AB777D4C0167A1CAE6AF4E7725E3B8787E684609296C870ABD331703A8222F5C470DB7C495F895B214E2566094CC4188EBF4CA72EBE57F11E1E74F4AD6497A972795EADA67D62E586C604B7D4CCD98AB57ED61ABEB0DDFC1028173878652204690398CBEFB5719DA089D2A6299C313AB54F1274C998F08B2E17690A00A532A8EED40D634FD45B17964193040100F4E5DFEBA76EED70F2E6CE35A825F8FB2F406DCA827E562C2C0726BC7866FEDAA62354BE06C27A75F4CC0EBE7DB3E55ACF0A92B292F562C03D40ECE33F485400B5125C0A7A33F4881BC7413CA679F4FBE7977CE45665CD63987B81E4783F1D0BDA1CCB96EA029BBA9B5AFF9FBC356AF3812124E63F7D4F5F334F11345DD8E9996F5E196A61DA70E0B101DF3D32CADDC3DE8F0FDBBD0AFCCA811A93F300E59C098CFB9D69DCB98406714B17FD8B37BCDC9C28091BA05726FB5B958359A82262DAF416D2388F38CF3991C81EB3F38EA326794B3392EC4EBC49776E3DE223172B72636E8A52835F4E36E3122DDF640A8E5A139E44C67CBEE29FC99CC41C8DA9CC6AD5E1E511D324850702A323FD39E50E917C018E2CB9EB23319EA6A630F3892C72ABE5CF5F6EEF0CD72B781A116C980CA262DEFB2199E5AF78FA8CA474A939739E9F503E6071AEACCF943654B20B338399B7A7DA1637C028C100E53999F4C8C4E7D7AD0B985C392F5B7DEBEFBC64E0C285535EBA51EEF91BBF1061D377C081EF721A93FA7D6739D2693336F550A8ABF2BD7A7286D3304E480917A86B7603D4D75CA45AC440481C5A6B9E539763F31FE76F9F5B06F3ECFF7867336706074ECDCFCBD987EDE240089F8931E79447DEBCB22702CD57FF8F0C8DFF3C4086EAC00161D48A7EBAD32CE185D3E1C714BE67498CBAF79CFE7CF9C8C82E9F7DB4CF81E79292E58969DD1D6235C744E7F7E67A9FBEEBC291EB69E3015966796BE9E7E74410ED0D1CB98FB39988CBEFB9042A4418A21BA955739F97EA1CA3F30F5FA1A235F9838D32F6605FE63E9F4144642C6448F2FD4534463E6F151F7CE105B3C6A2A024E4797974D7F7E666A41697C29A3B8A9D397E6ACCD0D5734905CB0CAAD4BB77F79C79F86FF00C7D23FC7DF5AA74D40F9E684D49715E9F807C9E35130A894B8C9ABCADA583FE690A8B14DEDBBF6AECA982CB8953660825685465A183F09CAAD1B3641296C886E4DEDCDEAF7AC6AE5F526952EF97703CE30CEC4E38DD95EED1EC6A8F05C6CF3ADF829D14A17CB53878473C959F6A63B5F0CB014F6BD3DE95A178D92927871EB945E7F855B1FD3590A503C52733EFF00BDDF406A80B5FCB9C47F17E87DFB348B66CEFA64241CA84B71A574D32E791E1764FC3FC54CE1415B31622A479BE61AB4CFD0C86F8073705A90A04802201F4A9712A868321F904B5FAC60CC466A0F7ADFCE00848E533D62994D9612FA1D453D83EC504682725CEF100017CBD7D9F29063F2A2639C41C8EBAFD08EB4EB0F237D20DDD89A56BF815B31ED1018C98664E5682DD7A0313D6DCBCB4E833E8627976D2A664C90801C574EE0D087AF38690F0B9C23873D351D67F6CBE149E24356CFE6037DCBC10C9C7323973FD797A49FF5355EC49604D33FB7BFC410DD4E8EA66633F8F7FDAA2A79694559B2892D9BD2DC5A0FF2025410E6F52E5FB701C74EAD5C7233275EF33AE79C7D39552368CE2A252EE1CF50ED7ABE46F0FE54F490C7DD6F7B71B7DA85105B047AF4D4663AFD63D2ABCAD9C66FD6CF9E55604E4281D9CB5E9CB49CB1BA4920BB3035035234D49BD32CA6F04FF953E71F08F9FF00AE5580A5E0D48209494A833508ABE5E5C1AD15DC496DE21D4E7E902E336D3AF9346A6FB495CE2BBB9DE26C0EF5F034ADBB7C26FC338F968101D45EBACDAB25DE18E2090B2654401A7427E82FFD3DF8C97270D8390A9845500D7FF21DFD98A2ED8C37CCDF3A822D62416D73D1F32F947786BEDF479FE0A20828820A2082B04382350D0423E17BD20FC7BFA521F24EFEFBEA18FAD3DEB09A90492411580B64822467E7FB5390BDDDE24528CDC183DF8F0B7185659DD0C47B73F6310F7E16A6DD436616D14024E878950207FAD79C0A678D5FCC945097048CE8CE5B2357FB71877267A10BDE5B9B51BD72A458DB75875C5DECB6376DC4853AE61D74A46A724DBB8A39C4FA0F2F3E79B5F63E23132E7310C50B26A43063D4D1A85A99449E1F1D2654C4AD2183B119124B0E0E0F91E71CC7DC03CDB78662D6B700B86CB10BB45C30982E33E2DE3A10A713FDA15C8F31074135F32FE366097B3FC49893313BC42D5E635AB3EBE6CE4759D838C97330882924067EBF8E71B14E58DAB0FA2DB80C3852A4AC0050A044FBB9004A4644472CC579A76A6D5C2CC2A925237AA0D85EDF7BDEC0DA2D322715A4A81293902F6B56D434A5BCC45388336E0A9B42488033CBA7F831975CBAD4713E1DFF00B8952E58649ABB55BDFE844CE0D730A52B529DC9601C677FCB77D31BE3764A3C4A052224C73044E9F5D7302321155BC4E1E4EC452BE724109D450BD0655AF0D38C5C301342C01F507FF769970D39B73118DEF1F0CAD6D282894C024091FEB9FE99CD53F1B8A463310664A1BA1CB3160CC464387BB0B4C895BE9DE01C3E59F3E16CF567310370AE324E639E7E83989E5FA69AA2896A772483AD7D93E50F25C95381666636B0AFBCF867185B738894A81132333EA0F7FA75269E4A965C1736CED5CF3BD80FD987F2A5D1B93D7304DB8BF68593C7FDC72E93CFB7CFF6A7299643D546B93FBF5F387E84B07D4797BE9A4485BDC708824FBA3B9D7D7EFAD2C990A507DF23AF5D38F11D1A22717277E61666B55F83D439F489469D2B88240E84FEDE5CF97C9E4A429000FE4033387CEB71AFBBC46AF0E6AC017D0575191BEB0F1B5AE75240EE7FCF4F49EC2A4A4952581CF9BB072D7F2CBD192F0C5D8BA6DAD7DD0F0C8E92F6EA591AFC7FC6911D27D2A5252C30A87A3D6FC03D6D4B521AAE42F7EC00193776B663B8BC39257248574CA4FCFCBCE7E94AB2D44AFD1DC9D7A37EF285D32C0480454660DEA2FE74ED0B0714343F7DF38AD0DAC08CC1F7F68D572C2ACC3EDCA86164DCAC0E73D79FD72F81D3CE912B50140E732F5EE7EDFDE9FE383763CCFE0085917BC3C8F2FBC8E83CBBF334899DBAC2C43BEB93035D350D784578601CD0835A0FD71E10F5ABB42D299E2988D3A73CF954DE17100A035F314278BD7D1A9D622E761F754D501DDCB8BE56BB5FA457E1970FBAA10399C819FD75FB9A72678D5BB76BFEF8C246436BE9DA9F8891B76F85213AA87EBD33FF005F183FC814FBB57CC7BBBC24A400D56E7D7417A5A251A64902018E53E7F4CFB0AC89FA8FD757D783C375CC4A417E36FB711083EDA90E28149F203B0CBA65F79E547CF72CCDCF2E758899D8D42565390D6F09FE2380C9428913901E87AF5A772D3BE01D74CB57F7EA23418C41661424F1FBFE383C02E02D51C0A493FF006FF5DBA7952FFE31DD7ABE999F2BB369F78748585B0B12F7B7DE1DA1A52E22339F9524A94437DF3E4C215DD6FE4F5B337DFDFD9EA1809480A20913A41E87FD7FB9DD58A4A257CB2EC5DC5B577EF91A68623E7255BCC0B0F798E87DD28586D133FA75EB3CB9F2390CAA1BE519B38A85002087676E2C3FA2337AEA90C039248776F2A97CF3F21482CA6CAE8DEDC00BB27213E1A3374920A678498804C933A0F302D3B3D69414A480C5C16C88033073CEFD291A4D5AD52CA65969818825DEEFE63B738D24DBEDB9C0377DED43B33835F3FC09DE2FE2835C0A486D2AC3ED429297E620CA804EB988E8697C66CF998B973264B49284B6F100D09B7986AF28565624EE21DC29EC431A5E9CF8756AC6D25DAD0D043AEBAD2D4E0E24A50A95709CD32239A4F7CF9F3AE678FD913118A2681CB90470CACCFDEDC4C5A701894996135B0EAEECD5A8EFC018669BA64F17BA470827DE033D7439CFE952182C27CB29DE5001AE4B00D6AE9A30E62D12C10660040234CAF47D1B5D3BC3138A32501C436EAE54470240E210634FBEF15253664B427743161C0F2AFBE1902A9C028D4A9406AEDD731D61C33749791C7E1B8D8E8E260EBDA6A0F138A4A7FDAEC6C050F0B5ADF624C36560940D161455672EC03D7AFBA449D9BA16522149CF22AD3C869DFCB4D69FE071682907779BF17FCF688D9F832164A957B36A19F5A56F9F289F69D6DB4F115A4F380738CE7EB91F954F4B99BC90ADD773A39F57F7C5A18AA510696199B7714FDEB0E53C2FB7E236EA013AB64FF504728F4FF3AD23889732623E942BE907CDAE2BA5883CA90D953128594281E7979B7BEACD16D393EF24A0680AF248D39E9F7D6ABB8AC36254584A5B1E05AE19F8D3B5612389402DBC003627D7FB0DE6611530A0A212B43875F70CE7AFCB9C7A659D456270D8A5A0A132261CA8836CEFC1AE7CE3230867B4C133753715A7076E5E9788FB9429912E10913A9C819E7E9CFA4D55A7EC4C74C98E30F38392EE93577B8A802DE54021CA6589742B0C9E3A59A9EF9C38B6426E5A406DD6C83202A72272E7E9EBF0A5E56C6C52505270D3778D2893DB8BFBAC213E724024AC07C89146D3A8725F95E2EDC1F09750B0A2EB5CA73EDF64FAC9CAA2B1DE1BC7E20B891343116496350CD42F5D7FA82C4E20027EA0A73FED6D5A96D4D3FB8B6F7C1BBFB4DB6D8AC5B087956A0AAD977AE2EE2238AC10AB96F8091AF13606712623335DEBE11A71FB1F13864CC9733712B41208E233CA95D32A8885C60F99254776956A57335B90CD901DE3A7F5FA248F3641441051041441051041441056ABFE27A7A882193EDA65797FC8524C8FFAC1EBD7A7AC9A6337FDCFC3D4379460F0152439FCDB2E3C9A22311B5172EA6DD79B2FB2FB6E03D16D9466398F7B3EB4CA700A95301762936E51906BC88E5F9F28E4818DCFFB4D6D5EC662292D605B7EF32BC1D6E7BACA1766C179DF0C9F7412E2B329933A8D4D7CFDF8EDE145E336962B13B942546D900C2BC29C9BB751F0F4E57F8682972D47009CDF96B4A5D9E3688DC5AA516CDA96953B61C456B541E20F105B20F4E129D7B467957CF4F15ECF3B3F1CBFA4277546ACCF5E6E5AEDA5EF5B8E1674C04925442B22FCA9CD8BB80DAC33B94A16F39CD27848F513F0A4F66ED02256EEF55B95B8BFA16D22CF849E7752924B55B2A1E2EFF63DA2C8DA048085102241FBFDFAD527C5A83890B533F27AF17B39E5578B161B1664EEDCE64E57D491E6F4D2310DF31C6FAD406A731969DF239CF49CFBD50F0F8764B171C7F5EFD04742D9988F99870ADE3567626E5B566A56E395A229CB52675075CF2F49EF3F5CA9F210ED635A119717A3F5E59C4BA660480A772FC185756FBF0A0864A678544427D7A67D2453C9729DB2CEF7A57D294E5AC3B97352D40C0B683576D7CA29F0BB27EFD29EA25B5198E65ADE97872165550A3DFDFE22B4359E83D34F5CA94F9645037BE548673D637D8DC69C75B57FACA262DDACB4F86BCF4D7F7D4F3A70843007B7ABFBF5864B5B3EA7ECD7AC390214B1D08D3D69CA406043977A8A80C7EEDEA1E192CBA8D5F4CF2896B6E5F7FF006A7D2D0C904DEEC3BD61AAD63789A97F76C9EF0F29E243243FBAC60170F0526BFE47DE519829B1A13CCC1053199FCD5CE0855B742541249044E7CB49FDBE039E54B4B9E515A002F5AF419817BEBD5BCD92958AD40A8D47937189961C491131FBCF5D233CFF004A9097377F3A6751A52BD3CE2371092806AED6E00E67ED6E222E9B0B42EB285C4CF4E601EBDE239FEF272249981296724D1F2A9AF3FC1C8C40E2715B856E5865ABB726157AF9C4FB162604A7A1CA472063D7EA7BD490C0934DD069907CB835B5D2B77020E763807482EEED50E2AEEE69C69AD844B23096D684AD60151C8F5CB9E79FC63BE7AC7CD93F2E69435F30DA3B7E3AB06110F366898B726996ACCFE8CE7AF086AE60CCE5EEF6E5D27D0CE5FEAA5B0E96003529EA6BF9E3485253D1C9AB9ABE9FA7885B8C3421F52909F76004C0EDDE7A7CE9FABE9431CDF7BD6E3366F3D22770F301483C18EB9559BBB79C3450F0647965988C867F4E9CA34A8A9F340A02ECE031AE4FCABF7BBC48865243D7F3CFEFA455E3712667D0647EFCBA9E548FC9F992CCC203F70C3BDC7A738653D20ABE9CB8BDDB9FB162EF0D9C741CB2806013A1FDF4A889D3C492524B35F76FF8E57A563544A2A06EFD5AFC32D7A5A1CB0B6EE91E0A9400642811944AA639E7C8C771CAAC9B1569C64C4246EDEB93B8E635E3530AAE40975DD2EB66A529D01CB8C7CC77F14CDF9E27BB9F69CD81BFC2EFD617B118B205CF86E194B589AEDD242A22006E467CA7B477DF0B786938FC0E2F086582B9E84AA5AC8000DC054412C58E90EA5ECDF981134A084E8433F3C9DED51C23BADBABDAAB6DE8EEBB65F783865DA2E19C470AB452836BE21E236C32873249227881273D7BEBC3FC73B226ECBDA139003142883A79778929527E54C1282482681EC5B4E2332D4E4F192090EE182E90402252AD44C1E13D3420FC338AE4D8EDB0AC3120120A6843BBE4FABBE5DA26A44D32D5BAA72E29720357F41B37B88696D6A9504BCB2A434A909520C75060F98EF9FC9BE0B6A2B1AB4A12B2497CC16E9E553D21CCDC6EE4B2CA049B05337170F4F2B4480B1B8B53F8AB4745C253EF78774A2B4FC04F5F98EE2BA1ECAF0CCEDA094CC082ACD88705CE74EFAE4E5A20B15B551BAA4EF096A3729A372CABDCD6E6E9BFB5FB376AD78B8E5F5AE10FA5243BC4EA18B64C12014851CA4013AC98EF13E9F066293382132949723F8A481E9C34E4F1569BB6D3281419AA5EE9242965D44939B73A35338B77FF0077B77CD2D4D5AE28DE3CE03019C1DE6AE5E39CC7083A9CC0D64D744D85F0FB153F70190A24B0FE3DB9F3E111D37C409208DF14ADF5D756FB5ACD01886F796BB95A3677775BC3BB7CF086DDFE55C76AB3191050734FCA39E75D5F66FC1D9D88097C37F201C14126B6A31A0EA5A910F88DBE92A7DF0791C8D296CFECD488C5ED17B4A6D09E1C03774FDB30ACD0717C2AE90424E93C32272CFAE7356D93FF004FD3310949FF0012EC7F8137E9D9C6778889DE25912D442E72535A396B86A9A5BD9AD5EA775DED7F8BDAA2FD8676570E75F9E2B47137CD38D41812D819150CC6798AB76CFF00FA6DC2CC94F370690B0CE4A0022D67193B75B8A3B997E324225309A9292285DC16E2F51D351530DEDBD987DAF76956538A6D36CCE1ED4C7B9777AD40503966201D34D7AD3FFF00D9AB03BC01C1CB482D532C7FFAD5C3F5F26589F1B2508514ACAC8FF6A4BBF4773C47DC45FF0084FB126FC5BB768DDEF0E2E332E0B3C56E3F0F9CC16E53232D7F5CAB63FF004CF8100B616496ABEE25B90FA6BA655D33819BE37132BBD3522B42C08D2E696B5ACF998BBED7D8EB7CCC883BC6BA911A628FE79C83F9479721DF5AC7FECD18225BFC29433ACB19016A1AE79E5C1E317E2E249AA8825EFF0082CFF9EA6D6C4BD8B77DF89626F0777A37EDD884F86EB2318B808536EA7856387860852499D35E82ACBB13FE9B64C85A66A30B2928490412802D95B80FC55A1F7FEAC4AB0E874CC515BD80B87BFEB9DDE3AFB5EEA8E530510414410510414410510415AAFF0089E9EA2086B7124122252329EFF3FBF8B19BFEEE9F682231C5388B76C28053CA2785799004F3233CC72E94CE6BEE299AC6FEF568C8B87D6388FF00C52F7ABB3BBBEDAADD6B96AC5D39B6CBBDBAFC2BD6012432D8758FC42AE543FA890599E18E8794D79B3E2CE1B0AAC3CFDF03E66EA892C1F5CF4E9D5ABD9FC15B2E6E2704A9CC0C93BBF281077854EF026D5398E7AC65CDDEEF16C36EB6630CC6F0AB8FC4A95676DFCCD09585B81C4B484E406842C2B881CC19915F2DBE2761D29C7CF12C06DF351C4D45299E95BE51D065EC6DD5268F7BDEADE7622DADAD95FF009EB0D5B25F752E7094E6A104242722147411967AEA7ACF32D9B2267D34AB9CAEFF006F47B189991B294E027701A3839F6E3EB5D22C8C476B306C41F559DBDD34B7F4E04AD255C51A44833F18D09A4F6CE0B7904A810C0966A1FC37BD625E46CC57FBC2695041E5ED985E2DFB9B55A417142352126263B8E91A76D73C8D2578620B252284D142A75B8E00F23163C12C4A40402C2C374D388ABF0AFB10E4B6E15240854C72CF3F972EDCAB797870186EF30453830E1C1F8C49A2752A5F997E3C85EDAD6193D6F0E2840032D4769FAF96BE74F65C9DE4D1249A01981CE8DC8F387889E08A966E37AB52A1FA7F690B73CF847A034E938726C03EA5DCF973B08748C4351C97CEA416D0B8E7A7185516AB1052011DB9FEB97C8D60CB656E903B38AFE5B85A109CB04EF6F73D5FA72F6D4906D250334EBD35C8E91918EDDB48AD9282E1D8F0BBFBA43652BE92A0687337E9E77E25E160C29C25620054403AE5391D3CA9FC990017501C9A834CAFD290C674DDD0C286CD9BF11A0D3D6D0F5A49447167D87AF5E84D3A4A2B5AE9FD4332B2471CCFA43D4A4A9214220FC72CAB785E5AC04805DF5EBDE91413026915FF0023D3D042D14F18EFF7EB4D8DF3772FDF2820E34F7A6333F9AB9C10DCAD5F886D0028F8AA30672000CF8BA65E9F11496EA8AC685CDE9419F514EF1B9004B51A029A134715F3D22E8B0B65BE0F014FBA7324E5EF699F3FBCF5A90C2A14A50487617239BF60F5EED15ADA53D32D248CC540671CE8733195306C25E6EC99E25227DE397427AC7FAEA60D5BF67CA2C97A91600D07EDC76D68DCFB1D8F24AAAD90E19BB7A718B81AB55208E2E123E711967AEBF4AB3C99296714D5A9A8F36AD44434CC4A8B3E6ECC752097FEA1E1B67D49050501267224E711F7CB954262E48FF20B00C097A0CC163E8FAD6B09A66282805D9D8101F5CEFA72CE18BCCBC38812920EB1DF58F2E7D0C75C95932E9A6BAE7EB125266924390C2D50F415E86D119728096CF101C40667D632CA7BF3F5ADB10B094901ECFE97E0C6BC0F0892933095259C02406B5BCF5E5C1A2CEC4042A412069976C81D33F3FD0D5771130826CCF400D6FAB53A69C226654C06854406E9C8F319D43C44A6FDA6DF6AC940F88E85A92A3F97DC049063AC65F5D6A730E12AC0B9DD7637A9E47953D3842CB93BDF58766CBA926AE7DB5EED98C41ABB75E690140B0A09254323248047C33D34AE6FB5E62C4F5A52400F91625EFDAA2D47AC3B9528001D2406CDB4A75CBD28C621F1EC64E03678BE24B2536F8759BCF5C70FE672195AD01BD24A4A7DE274F4136AF07625B132C2D4FF005076342E685FB6BC8343D421139280DF5289DD24000006B5C9DB99CB26F8AAF6EBDB4BCDF06FFF007838A9755F84FC420308B852BC40BB36D4942923300F1B6082328AF6EF808C8FF1E4AD4582836F5890C7798926E07763589D932E504EEB0A52845D801CEB7CEBD23B37FC15F7CB8CED86E6AFB777B417EAB9BBD902B656971D52816EEAE1D2C8682C9221B48072E523491CE7E29EC1C2E2B6962276113FE8A80202D8A8A825CBF026C29C4B52313E5032BE61037D2A0CC03873EFD873D8B6AE1413738580A0A6D633232214A2A11A99EC34AF17F8B3654CC3CE58DD206F1A686D53AFEAF0AAE58090B60481FEDCF5D1EE6BDE13C5EFF196703C51BC0ACDBFE6584301C4A31042BC2BB2B495816BC32A594C7BC32CC8D75A6DE12D98B998B96ECCE9705DEB40D6D056D4269159DA139482400A21408DE4B306C89FBC6BCEEB5BDFAEFD715C4B0D5DF60BB2F6D62F29B76CD2EDC59E24B4F12802DB79CE499131911CABDE5F0D7C2523132646F212B2424071C017ADB3E0383C5036BE38E1A5AE62C929059DEBF51005C9CF8E71B8BB27EC2FB3B89B76F8A6D9ED7ED1E297AE2C9B9B07AF90F5982930021A7133C2A2339D743AD7A67667C1D938D08C40908292C689B934E3C3DB18E6BB4F6EA913968485D0515FED2E1D835CD6B9BD2367765FD99F74DB1CEB16D866C761EBB929917AED833C4484CCA9C0264E7399931D44753D83F086448521F0EE035D2185726D397EABE76F621614B52D2056809DE1C6ED52FC79659CF0CD8AC0B0D65B0C61564D38DE9E1B290948E5A0CBD79FC2BAEEC9F0260F0A9015252E007DE48C8532E178869DB56729759C5292ECCAC83BB87B7AF089D18724A4B72584447F408491D00D3BFA73AB6C9D818294001290198064836CEDAE54D4B988C9BB4C12CA56F914FA9CF5D32C8D3BC7AC614CDBA83BE33CEA89FF00F6AA67CC67E5FEE2909B83968594CA410336D45AB972FC42C3173152C268126A00C859868E21FA909223810465A8F39E823427CA915E1C9AFCB7A55DB203ABD3DB984CAD4EE951A8ABFA694EBCE17693C08E1002626001909E9FA8EB5812D219D0464E406A6B7E9AF184D454413FEE3ECFBBF584D4DB866081D3F5FB3D7E3B7CB4A88FA7300903234A9E3DE19AA54D2E778EE8AB3B1A7BA65DA18BD64B716D289013EF78C53F98FF00D6391E433E5E662D1853265482C9A32775C060D77F366D7842D2F18A928092E487A1B8E219D896E55346789EA46310510414410510414410510415AAFF0089E9EA2086970471251FF79F8A472FBFDA98CDFF00774F3682239E50532FCC715BB657DC0009FF007F6299CD2D2D674493025DC3B5C5B9F1EC3F6C3807BCFDDF2F7D7EDB7B518DE3A97719D98D83532D7F2CB9FEBD9B6AC4AC4B40B6CAA5293E280A3FF909D419F137C6AF14A70B8AC4614AC823783386B1D1ECCDFBBFA3FC1189972363CB4B805AD402EE4906ADA64FA3455B57BA8DE46C0E23885C6EA4AD9B7B3522E1581A83C1A7D025C0D22D99038E402003919F8FCF2F1763063F1F34BEF6F2CD2F57A357F74ABB45E13B430CC085A083BC1DC528D4E2FC5FCDA9D99DA9F69EDF0D862F82DC6C4B7B1F6CD2516E9BD770FBBB274F00285B8870120F1147171644C8275AD363EC733A585897401E81AF9FE6BA662A61F68E0F07BA9993F794B2774CD507357A13CF2E91963769B92C6B6230C38A6D3631758AE36A70AD4871F53CDA55E21C805C2C08239CF789A8BF116004996BB16A65462D7C9BBDE8F58954ED992A2109A519E8C5C6473F224114CCE60BF4BAEDBF1BE84B6E70C14A072190813398D67227E7CC66A01986F760070A6638E5911AC3DC34E48427754A50A9BBD0F1B3D6E3F5169B6D7F54C8124E51209D7A99EC738AD928208FA41E14CE9FBA7AC3D97354A2EF50C5BF23B7A8872F5B4AC98D6232FD60FDCD3F9325C5807A923ADF2F7CE1E89EC5BEAB5C56B736FB0A425F85EDF2FF00FE4D3912C3B96E82ADCF28792E6D01766C9DAE3C8F0CA1C22D55C2397CBA763D64F4D05349D2885BD0699655E7DBAC60CC4851049232A8CEF7F64E96854DA280399F847E95B4B95BA5CDF2ABB72F7A9A420B9A6C1BA1F5D7CA1C36C10800EA3969FA7ED34F522828C746FB4315A8B924BF2FEFEF48AFC0EFF3FF0014E25A094824004703EACFFA221BAA687D1AD7CF979D042C84F0A427A4FCC93492BF91F7943D45520FBBC375FE53E9F514DD7FC8F4F410EA11A6CAB9E67D608298CCFE6AE704327314B4B7B945B38A48B8585A5906388983300E663B4763AC4961F0A66201670D76E26E5A8789A0E2F0DF133D32D0A1BC58EA6EDC3EF78BDB656DEE4DAB9E28595A9692041260AC11944E635CE0F6A929185DD50200BE966C8356C598B5E968E79B6B68B0500482C43F77E347A072285DE33BDAB45AB76904442465A119099F53CAA7E47D1BA416CB466B79DF2ED1CF66628AE6106A4A9989E3ECD4085C9813F2EB53327115634D06BC2F56A97F4891932B7C0DE0FA021FEFC3830B887CDE6CA08C8906077EBF1FD32A6F352262C9157B51F953BBE9084E64CD2906CC468EC096F271CF488EB911247F8CE073EA273D73ED584A08A873AB0A67F91ECD1590B3BD514E1AB54FBEB10576725CCC4465CC41FBF3F8534C67D20BE6E3D07A889A90BAA493FC5E838EBC05F5AC59D7C499E433CB94683D4E507FD554B1AA62483C4D6C497FC8112B2945D24D5CD46B58C15BD0DA74ECA2B09BF52F8038E96A6624BAE25B83A4FE61CF3CA7954A61B1891830924D4103880F56B0CF21CE2D9819489B2DF7492DD32F315B74317BE1CEA5B63F1474B86EDDD0A3FF009A52AD4CEB320E939F9543694933662940E74E3C0F4C83D21499282544E45DBD1D9BB5F5E30AE2CCE138D377982E22A5A19C4592CB8B948042D0A4E5C4623DE396B9EBD5DEC7C47F87392B3A82E2F43ADFBD7BC3254D9921237777792E6BCEC39DFDB8E72ED4FF000B7DD16D66D5E298E0B92A77135ADD5A7899D5695183EE480788EB333A4E55DF7C39E3C184972E509E400000EAA076167F4FC46A36B848DE2EE0B1029997A598D6B9000B0CF9AF87DCE0DFC3CBDA9B6B764307BA2F6178F5CE18866C50B4A8FBACA4A816925293EF3B23203E157FC76D71B63672B1213F313291F5CC4FD5FC9DB78F90CF3E1166D9D3938C9414A3F4AC58B034D327AEA03738EEA6C5ED939B7F81E17B476166BB4188B2DB854A6FC39F7539C82275D395797BC6EA94A9D34B3073609A5E8CDA9BF7687DF291293BA15605B78FD5516EC4339E7AC648462372D5E165F6C2DCB64A4359122EBC44C2C1FF00BF00C8467E99554BC398E9585C6CB4A887DFC9812E68EF5A7BA44162F0895A14B4A4B170C4684D40B7DAFCA2C3C69FC736336A6C76D764AD0B4FA9D4AB14B1610A090D88412A691D51C4A12635F4F6CFC39F1961F0A8C3A77C02371AAD987E15FD8E341DA9B344D1312B4A54820D161C1BB16ABB1AE7C23A61BACDBAC076FF006558C5F0FB86BF98786D0BAB60B4788DBC984AC29092482A5856A79F6AFA6BF0CB6B6CFDA1B0A4E20EE1514A5CD08AB371CB36B5737E09E20913B0D8F3200795F5329AA033B1C8B74A335A336D9BD70F34D2DC6D293C2A0490414F0E4338E63EB1CABADE1E7618A3E86049B00199FD05FA031569A908DE0E09241BD6EFF9F6D1236E14B68294482641CF9490397A7CBAD3933124FD3514B446E2012694F633E3F68F1693A491DFAFDF9D369AB510C0916B58DB8D5B8F7A088E54B2E6BDCD7D214524FBA00CE0FE9D7CE95972D3BA3786F1D4D49CBD479F3894C3CC9611BAA351976E514F0A872FD7E95BFCB47FC476873F32528DEBCC57B9F48F0156A01E9A4E9F1158F952BFE09EC232F2FF00E447323ECF154AFF00F2F851F265FF00C13DA31FE987216FA073F7A7A47A41E11A73264FAE7F1E7CFC8D44E30CF4129964849B0141C853AFA110D664A04BB528F4A060D4E3CF5EEF2A4A330510414410510414410525F346F6EB1F7F76AE9C608F098127956E7EA4D33D79C10CEE13EFB5713EE3721439FBD9081E7AD359B294C585FECDEFD3382216F3FA0CE30EA892916370E003586EDD6A503DF281DFA5466255BB2A627FDC50BF43D2364075241B150B73A5FA472A372F7D69B4DBC6DEB5F1B0368CDDDEDA072F52D06EEDD368B7529F19CCF8A0A21327F29AF9A7F1E70B8A9FB7F13B8B213BCA60E6943F7D28C23B278713393B39265A8540606BDC7B6EE23653F9433785CC58B858B8414A0149E12E04C2071E5272034823977F1C6D0C1CC93882B9877B7555AB9BF2D687ED5116057CD9450877DE04B582732696E022B76C2F1A2A53178F31C6078ADB4E292DA80038613CF5939913234322CFB276C48C3C912E83E96233F3CE9CEB1B842A784AD602CCB3F4BD59E9467FC660BC327180E366DEE5A696D907FADC32F4F33C46739D7CB2CE6AB5E23DA32F13F3371218D2D4E24B52A6BD75787A84E2490A0B395892C45079675CE8E231DE3584C3AEB76EB25B0014970FBFEA4469CB98CAB9FA702A9BF586152C34737E072EF170D9B8A526484CC724D88A695E009F6CF161BB62E5BB854E70100C426675331D065AF6D7232A0C0947D4A0EF974C9FA92FCB48B0C89A16414921C3DF81197BD0985525B500A854C4729ED9F91F2F9D2BF2CA064C3BFA0896952C901414F7BD7CC73FB410DF43F015B25612DF4B9AD6872A3FB685144A033960D416E0D685836952530400064244FAE46905CBDE53D1858396F4B7B31877ABBF1850201D483E46B2943172DC2355390C3AF28A0A903224C8D634F4A581000A026BCC0E3EED0D56EFBB964D9B7AFF0051E05A39854FA476EFE797A56E2790C1879F330D57FC8FBC8452563903EBF7F7D4F30A029D4FA7E3FBAC494921494A7302BD3DF0786EB39475FD08A67301770D5D780FEBCE1E478D34B796A6D00929FCC6321D3BE7A691396B48250A5D69535FBFB2D094D9A9942B736E9091212EA9B70F841295A94E2F242781254428F2240CBAD653B3A64D5E75209ECE40FBD435E9947CDDA6896EE199DDC76ABF38C0EC398C6DBEF430C6B016DD461D83DC2C5EBCE85062E02C40F00A642A083C53CF95593058612E504AB87F63234198B1BC57F1FB553312A4A6EC5B8532AD33BDB578DFCC330765BBA60A4250D969B0B6FF00B8A92D804C72958273C8EB5226407253FEE6F629EEA1A2878D54C9B2D4564935B59AADD80BD2FC22EB7D3C2E148C8240CBD3CFE3D6B7F94B0C1A9CC96D32310B2B045453343DF4D0DF23EF330CDC4A95319CC46B94452E994A4B39A6A1C1CF3FEA9133280400E0E6F4AE62D7E3D6251949F051A640CE7D634EFF00AD3A4495302492F9BD8E61EFDB5BC47CF46F4D2CE0EA3F35D1A22EE96912241CE08E7E9A1E5DBB8AC4C589798A3DAB6D2DF885A4A0A540105DDED4D0FEBF316FE26F22D98F19638D2B07DD466A11AFD75EFCB2150D8C9A54F50F561E879BD4F0CA25A44B24A83170DC882F6D695CAD163DE5EB0B4832532600244F2898F2922797C6A78B49528872378DEA1AA0E6FD386994BCA410AA82D421813A9FDE87AC692FB5D6309B6B5D8EC259722F716BF49B6208E1E162ED953BC4467F9721DFD6A5A5ECF9A8C1266BFD206F1BEB47A53339DAE22E1B2E7265A260291F500C4F3B3836AF1ED7D9CB6291B3D67C4485B56160544FE551F05A2634E608131CA44D57A74C0B5996DF55452F9BDEBD472AC667ACB9600825C11C6AD9674666A56977C87DBBA6987FC2B6E063842CAC0F155C442473839CFA18D4D4263F19FE1B38600936626BAB0F5883C4052D4A3BC72A3D052B5BE7179A509C3D1F8F425A9F08AF879A5294492A19408CFCA62622A5BC3A9C5EDA9D2E561D4A495AC0A920D1474A1E5F7262255226294523799E86AD7CB857EDC63E5EFDA3C6C46F5FF8945ED85EE2B6D8B2EC6E6DD6EE1D66FB6FF82A670F4AC05347F292519E998E5AD7AE767F85B6DECDF074C33004C9C4CB054B5056F9DC538DD2455B3AD8D23A6F86B66A9787960A8EF245413624D7F5C4E423B41BB6DB1699B3C2F67B09B54DAE1F66C8650852381D012809C827DDD4035E5CF14E07153F18BC3209DE2A50705EDD6BD1F37D22E6BD82B9725539442830B9A8F20039EF6AD4C677B5C4829696C32EDCDF5AC96148405FFC827FAA75809C81D469558C2F84B6A22709A12B2C527783B1AEB99B695B88A76D532F09BC4A9225A87D6972E96A3A45B8FA69101B49BD4D8FD8FB7B9736871EC159C5EE9050BC29DB96D372A1051C0D30A3C45C283A7581CB2EEBE0AF0F6DB9D3244B419C3EA43BEF80CE3B5BD961144C5E3B0B30A93BC9176B3D439E6DD48A868CE9EC4EB6F1BC4F69F15C2ADF11B7C06F956EBC351788E148238FC75003DCE1528CA4A41F7609D32FAB9F077C37B5A4786B0C95CC50225A6E540D783717E46D48F3C78BF1D286D198037F22CCCF6A9D0F2E1DFA34DBF72B7D564D16C2D9FF00954660A48900467200CC4448E46BBB60F6763E4801531AC6E69C81D5F818A42A74A24CC6249C95566D07EF3E7170DB0FE8A40293DF3826615D32E9F3AB14842D29014A7A5483FD9075FDC339877944DC7BA7BF48A94839E52272E7F2D69D5086207322BEFA43428AEF1079353957EE6F09A9B5932263A67972D07DE758750A034CAA47D8FDB8C26A94A2CA49DD15BD6F971B7B68F381CEA7E7FA8AC12B218100EA493E4C2309973011F50E4CCFE515065CFF00B01DA4FED5A7FAAEFBE1DB43F985BE5CDFF926DA9F4DD68AC36A004904FAFED434D37507A56B956DFBE7A0DC2161AA1C73FC74E3092DB5CE4091CA34F9FDF2E54B0DD23EB1BC75F67DD21CA160065024EA0DBBDFAC3BAD613828820A20828820A208299FFF0013DFFC608A57F94FA7D453A47F11D7D4C10DDF8F060F323E4AAD5740A26D422BA0AB0FEA088CBB48B8B7C4D09125766F3601E7C6C2D1CB3F4F4EF5078D6DC5EBB8AFFF0012CF96BFD46E8A282B20473D3EF1CA8DD0DE59E13BDBDEEEEFDC4A2DF11B7BCC3DCB79012A712FA9CB85708D4FBAAD3FC47CF8F8D5289DAF8A2C1DD437855A86E74B3DF9D5E3AF787676EE0E4AB7C2420170F7E0D9FE6F48D9FB860F8E70F6D6129414124640C00A39F3333023ACE75E2BF10A77710B0E5B7A9A71E8DC6EEF16613F7C024558DF3F3152CD5E54115DEAC2565214141294891D426398D41CA399A819001994766CC039676D21C61C28252E0877B86A0A0FB7BBC03EEE7CBD3C865D796BA79CD36C7C8242980AB3B7953B0D29D21F4B99B94670E3B67EBA18B5F1148515AB2931A73119F7190F5F9D454A4196189001B83F6D6BFD44EE08EF252470BE57B83CC748C7F89B79AA67231979E7D7282477CF9450A5B549059D865D3F35C9E2D582965C51EDA3369E62FD2AF10215C038721CF3D73F514D262C176CDBC9AFDA2C9291F487A0F3E0DD83BC7BE2F74FDFAFD29AAD443005B3FEFDFDA139D2CD58B92DEA3200E86154BC024684E73198D7CC7D4FA51F30015F2B7AC611299357A7DCFE72FDB2A1D498EFE5FBD67E624D8BF01EDBCE02821CD0B778A090492343FB50169363D7286A45C5473A18F2B1F3124EAD9D0B79BC325214E49CF32EFE9053C97FFBB3D3FF00C8C3E904248245DEDD7DF48A1424A472CE7E54CE665D7ED0F45B2E968AADB1145ADF3768B489BC0BE124681A4C9CE39FAE47B56924172055FD06776FC5DDA23B184298B91B8ECD6CBBDDF3AF9E2FDEAED03F68DE178261DC49C476A9C5B36A10616916EE252EC419CD249C8491153F8697BC037F2B8E44E7F76F3CAAF8D55C062C1CBD45BB0F75148D98DCF6C261BB2781DB317ECB6AC64341DB979491E2294FFF005132A2388C255913A659F3A9995242432DE80114CEF6BE74ADDB8C5231F8A593FE92D3BA4B1292F66703B7AF33911A65E17EE3A82434954889394738E63C84F5D2B64A4A560D48EE0303964F0899E160214A0C457B5DD87BA50DA57C5F18970EA7231D801FA67DE69625CBFA70A46A1625A025352E74A76FC7482B216406A7BEB07CF660C4BBD5BD6B0A17B81A827A83DBA4651A7C7CE905E328500B3676E2D99BF3CA3225A96A7E447137AFAF017881BBB9009EA0664F7FA93DB4A6D327EF87D6E33A65C07AE50FE46195BD7714ED5F77F4316A5D5DF8CEDC34B3EE3404011C24913D73FD35CB3A63392A99517ADCD00C8367E5CE26E4481402E68E34177A587B61164A8B2EADE79F70356ECC9E251E1481AE73CA44E83A8EB4C7FC3330871987CB3A1E397DF211232A45992546C031A353DD7D639EBBD67D7BD2F686D8ED99C39E4DC613B26F5D3976E36AE26D25E652EA388891F99394F7E75318A5093B30CB269BA7D9CA83A71BB58F0D861F29D41880D6A662E4E678F2D63720E265F09C1DA02586DA68919710690903DEE7F96464749AA061C0998A2D72A24127BD85F2ABD68F0BAB084A416372D471C0B1B0D7FB89862CDD5A5B6C2C84AC852C4C0FE99E2D07FF0058F5D4532DB98054D4D03DADCE9906EE486B58C309D8437200A97A53B37AF36A4618F6AFDFD617B8CDCC6D1EDA5E5E21ABA187BD6F66CADC016A71C42ED814A4C12429409E1E7DEBA97C27D80A5E330EADD72E0B0150C7D915A986C30DF5292A0404B17670496B393668F92CF61ADACC5778DEDABB61B778FDCE1AE5C5DDE5C3DF8ABA5137696DCB77FC3971449108238794089022BDA7E295FF0087E0ED9F8647CEDE5CB9817BDFC28437CBCCD039E56BC593646397855A92E404B3659676E22DE71DC63BEDD9BDDA63785DA5B3D8A6D1ED0E2AF3E8B4C3B0F28BB0B712AE14B686810A3F98447EE2BCD5B3FC21336C6D641F96565732859DDF8FDAA6BCE2D98AF10FCBC210A5D02490E4B0605DEB90AD5C0B3E51BB7B0DB01ED2DBEAC3ACDCB2B3B0DDC6177A125C7F1B6EEB0AC7576EB208532A48292B2D994F2823BD7A63C3FF0003A66270B295330CC5490A7523AE61F87615A479EFC5FE33960CE32A689894A98896A06A49F537E2D6A08DE0DD77B0D6EE36510DE23B6C85EDCED428216F5D6D986B11B7F189926C94E242F873FEEE5C23CBBBF817E0A4AC362251561D0374B90A486A31D3A6768E398AF16CD52D43E6292836282CB15A3B71D33D408DE9D8ED91D9ED8FC391618261587616BE1E1FC3D830965A427904A52343EB9D7AD761EC846C6C1A30B2C04A4240205A8CCD4B0FC52299B5315FE5E21530A8A80620A8FD5C4E557A1034AE917531861656E3A552E3BA9CC9D343CF29FF007532E3511191276AC96194B64C90499F333400C19DF89821C5660828820A20828820A20828820A20828820A20828820A208299FF00F13DFF00C608A57F94FA7D453A47F11D7D4C10D5F696E363848100CCF998F9C7F8AC2E893EFDEB0432B5656D25E0EA924B808CB311075E472311E95078C1F4A8FF00E25FB1B7711BA54032732A04770FE91C96DFFE0EFEE7FDA7B01DE7BEA4DB6CEED638F358938825202D8B616F6FE31C91FF0022870CC939011957883E2FEC75CFDA1889A949DD724122E19CB71CEEFD63A3F87E624E1D290A04A5810E433D2CF99D286E7439AF13DAE690966F6D1C172E3C8438A6D83C6E04BC9050A201C804AA5463313A45786FC5D81323133090D53C29506F9B7957845FB0528CD6A64F517BBB6B4391EB4312D698BB6BB76CBCE78AE11C4A5A0F124CE704F54E87A10455264A82166A58DDED4A6BA1A166BEA5AC12F04B290A20D03B35BA70E459F9452E3E8733492274931965E5E5DF9E959C4CD4A839209019870E1C58E56E158D178662000CC6BAE64FE053B3C46DE2D01044891A9FA77AAFCC50249A804D2F6E96D5B9DE25F674B526EE4351EA471D453D78463EC56E5B0B5403AAB2006599E874CF974CF4A66B5BB8D7434CBCE8C7D88BAE0124848CDBB706777E9D9E2D371E0A515007BCE5A08EFD3F51AD3598B2976C98E8F6BFE338B0A65D057CBDF4BC781C49CC4C7A7EF4D973BEA05A87F593FDFD6135A0BB38A7DF8F6CA2A0F84E59769D7EA2B099848CB3BDEE6F58DD082C069ABD5EB483F129E7A7689FA9AC85105F5B8C8C6AB946FAF6F4A43943E8E111244EBD0796BCF4D7E228DF21C814BB54F6E6619CC940925883981D1B23C7FA8582B8A72D22B50A20867AF0A7584552D2A0D6EE59B3F7D697A4BA90A2933232F3A7D256A32C9B31BB90CC7DF484012956E0C9EAF5D7AF68590952F4103A9D3E5349AFF91E9E82174CC648FA8F427DE70DAE2DD01E6545A5AAE42FFA0E04CA120C05C9D47126440D29E61653A8646C0581777A59C5002C6ADC218E296774800126FC1DDA9F739906315ED8DBB877BDBBDBF7F0DBCB8C2F0372EC2D2D34572BB96D2949483EE901C92A3D3A9AB6E0F0C9012C32CF3C83EB91E19D22A58D9AC561C824170FA8B59AD4195728DEC43F6649716871370A6580A00001292DA7802A73900E731CC015349C2950752686D72D6E05BFB0E050D0312A4A17BA8AA5C977A5DCD8000BBF1AD9A1D7E2AD30EB72B79F6DD53D9210D2829633FEE1946B947CB2A49586A12D5D1980CAED4F2E1942682564862199C91F4D43D0C37174CB5EE292B4EAA055119FBD999E9E5E54CD69081BBBB9D0D39E5E94CF8C3C4CA5101ADA9D3B01F98A17895B2464B4ACFF00D5264FD3FDD24A2C0D5A85A1CA70EADDFE2E722D7AD5E8FEEB11CE62D6EB511C7C2AFF00A28C1196597CF49E7CAA1A7A8FCC56E96395487FCD3311272708B094967A685EE323CAC6910189620A6415FE1DF753AF1368919F33DB4131972CF5D10951D4826A732D5B86E54C9F4893912536DE4EF13FC49FAB27719EBA3748B22E71A4B2E29E55B5CBA2EA652DA24B013A97C4FBA2093DC024C53996904A5F3C856D77F22F1332F0C58170929AFD428AE01AE72FEE347BDA7BDA2B05D99B17B617642E5DC576BB14429969AC2D697BF04EAB206EC3678D0005C9C8C70ABA5384A10087506704B102859DBA44BE1F0EA5201DD6A5998E41F969AE9AE2BF65CD92DAED986714C6B6E6E2DAFB6AF1A71A798BA654B7434D15A95C2E2DCF7D2B0CAC2607F703CB2A8EF10CE929C3CC4E1BE67CB0004EFDC16FA9DAD5B3338E158B361B0FFE8A42B74BFF002045D886CB2E7EB1BCED5A06169BD1FF0022932B3A12633F9F3CB21D32AA16CD56F62DDDDCB8CCF16CF874348D9694B948CA8D91D1AEDA8F289CB472E9C4ADD688525F292C273E24041FEA8580722A12131AC8D79DBA7E193325870093BAC746350EF5A3B74AC46E211BAA2EC0203A9EC7787D246AC4579B8B3C7CF67F197DA3DE4E2988609B2F82E078FB9B16DB776E62AF5BDBBC6D4786DA5D4A9653FD3E10E26655D2626BD15F06F64E156B54D24A674BDCF928240DE2AFE54B939BB539C35972945082B295124B949A370EF6C8F111C3BF62BDFBEC56E9F7DB8BE33B4ECBB74C5E38DB4E2D80DAD2C061A5B4E0794B50093A83DC1ED3E93F15EC3C462F64E0E59412890956E8DD3FEF634147AFAEA61E61B08F34AD2D5ABE82C1E9DB4D1E3B84E6F77723B578BEEEF7B1B15895A3AE6CE623E2E2B62875855C137172CA130DB64E498515711194D33F875E0E48DAF2BE74820A56090A48D5C30B39E19B35210DB52CFF0089312E2A8527E922C4350D0BD69561CE3EBAF70DB7DB3BBD5DD7ECB6D8E149B276DEF70E61B6CAF855C0AB765B655C1C2602814E647388E95EFED93B1B052364CA5AA523784B00D038602D6637BDDB998F21F8A70937098DC44942E7195BE548517624B921474766190193C671B1B1612F2D2F22E2E9700B6ABA85B2D889FE9481034F38E74EF038CC1E1E794206E92CCCC18E6DCF955ED1CFF7267CC2A25543406DD0519B5FB44FB16A8528DC84F0B8AC80E402728E67B0CFE5562F9A99B5497196B5BF9E94EF1BA8104BDFDF285822E94A2A2A401C86632CE86CF4FBC6B0ED1C7C23C4E1E2E7C3A7CE8822AA20828820A20828820A20828820A20828820A20828820A2082738CF499E5FEE993FFA963DB837EF95608A57F94FA7D453B47F11D7D4C1142085028E9FBCFD7F5A260FA6B627DF2BDFA406BFA888C52E45937E202233EC3213CBEF5F481C6D88176367AB81FB1F6AC640048700D45F9C73BBDB4ED2D76F361312B25A02AE70961DBBB479A00BCD3AC82FB6904E69E371091035903BD79EFE20EC438944E9A52080959A8B9A8BEBD2DE7D23C37210501690EA5338B545DB3B3BF5E11CF0F65CDF33BBC0D8E7303BFC4D08DE661576F5A5DE0B70E91722D98BB5B2C28B0545DCED11C7310419D32AF9FF00F10F667CA9F3CEED5D54B70007DB3716B4762D8D854B254BFA521AAAB559AFA9B10E46A1A37AEDF13FC234DDBA894A9284F10320F1912A93D02A63E51A57009D30C85900589BDC70E8ECC43C5EE56CA0A961696622FA3B56F63DAA4C3F6F1B03FBB9EB3FB18E93A475A88C663C00CFFCAF534EE78548C9D9E911989D9E12545B30F6737E163C352D0CEEB1A4F1292173DE40F3E47BC6BF4A8F4CEF9A1C1770F7C8FBCFCE34C3CADD56EF2D72B657D0708B6EEEE7C624E5FAEB98F4F4E9A655A2945D81A70378B460259041160CF6FB50535AB3E7588570FBC40D01E53D8E7D629ACD986EE082FAB9E7C88EC45A2793603DE7F77FEE2A49040D3CBA5335ACB105DDE872CBED90A40A43D6C72391841C71295904E7974E9E63CAB644D094D5C9A75A9D7BFA438972FE9059DF5E19D6AC7AC51E2A3AFD3F7A0CD0C18ADF3ADBFB8C2E580E2E74BF937BE50FD820B608D0FAF4FBED419D57AF26A767AFAC32584B97EE687BF38916F9FA7EB58F9B5BAB3AE96D3DD28346AB4328B1E795C70F385916FE2282A241E71D32D63B659E5CEA4E4A8FCB0F6604F1D399D34615AD2227ACA66001F7AA4E8FE5EED12ECDB42047088D35FD8C759EFDAB604296F91D796919F9A1850726A8F3E5CFA43830DADA538DFB88564B23212759D6331FA8EB378196EA4B338F322F9E9C75CCC30C42C1DE2145D8167E1D6E1FAEB688DDE46CCE358A6CE9C5B654B4AC52D9A2B67F371F191970F067A8E46AF78291BC90401950799CB872BC5431B38296524907EAAD82AF50D7CDFF004D1687B3EEF2AEB11BCBBD97DE45EAF0FDA4B05F8776EDD385AB65A5454A60254EFBE47860033A9F4A9A4E1C10067AB301C1F83EADC338A96310A415AE5A4AC82084A43EF7D81E2236BAFC60CA6DB6ED1DB7BF4C8297ED141D20CCCF109D3B1FA5359F204B191E4C417B64DA9EA2F785306954E482A96B96CEE169637A900FA7586D70E36C8287997D694A07BEA124822609CE6328F86794C362250756F05240B1B71A5B2BE8EEFA4C61E46F91F2D52DC64554E1974CF4A345A78862D60C13E030F29CCFFB5249F841CFBC729E42A2672909A872D42FABB06E1C866F13987D9D38B29625EE8018241721858E8796BD2CF771F75DB85F8B6E80CC8CDB49FC5360092A76623ACF20338A40E18AD214452E08AE6F7AE7601F311292F03BAEADE50B50FF001391CDC83634F26318E76BF7B3B2DB2695AEE76C30D5BADE6AC1CDF2157EA3FF00F8D2C1CCAB4CBB839D6ABC3942410A1C52FEC53F1CE1DE170D28CC2932085021E62922B4A6E9CDBC9818D42DB3DFFED66F2EFAF365761AC6EF66F0F30DDCE2D7AD2ED6F2E90B0655873CD9217971054820020999CDB297B82A1AC090EEC5BFBD72A0113F87C1209AB2C38A1A80C459F8DF5F4B4367B7236585DDA717BC69FC6B14795E2DC6217094DC62EDB84F1152DC202928049009FEC1234A6EAC60466E32B3DABA9A1E1CC5DA611874A52280301A07D1A9973EB9C6CDECCE002D50C3885A5E48193A832328F74AB4949C95AC28543ED99BBF835281350DF8772C7B985C2D2964B860EE721A71EED1950A816020EA040FA4F2F38EDDEA9FB266286281BB28DCD454737ADDF8EB0D96B01C8AB8C83935E2DC2BF731459BB76A6DCB603F0ECB6A4C5C0949826550AE51A65196B15799939909FA98060EE003D79387EBC6184E5209DF512A77649AB90294A694BF3CE354BDB797816CFEE17783B4589E1D85E35F87C21C16CF620D26E0A16B6968570A9511EF473E5E95E8CF83B881FE66180A82A4872F67F66BF686A89DBC80427E58ABA2C29C2F6A9CCBC7E7F8AC6AD1EC4F69B1A699B7C314FE2B7B9211E0B251F8C7920339E7EECC8313957BE676C74E236326629D6528428331624034CEF4B5380A43A91B4A54A3BA4849CEC32E0C18937FB18CA1B078EED65FB89D9DD85B8C7D6BB94A9C5358629654E2DB05D48692DC924A802246B9F4A6FE1190946D64A9406F6FA5FA503FA35F94436DDDAF2BFC7584B541B1A73AE7ADAE35A7DC9FF00ADBEDEEE33B8CB0D89DE760BB45636D80A9E4E1F79B40C3EDBEF876E5C59E35BB214042424A63223AD7A802D6BD98128A3A0333F2E9E4794798BC61B411326CD015F5025CBB8EBC03F4BF3FA3AE1B90095A9B4A523DCE1273026049D328F2E5CE6A387C1E326E306EEF1651AF992E0706E79E714594A41BA779F2D3AFEAD5E5258738B72D92A7014AA4E4441D48CFE15D0F052E64B94913410B6ABBEBC7AC37C5A5299CA092E29D283F70FA9EC35828820A20828820A20828820A20828820A20828820A20828820A2084CAC82440807BFDFCBE349264952DF4B9CAD953D9E461354D4A5A84FAF4E5D22A90A919FDFC694002433DB33190B72CCD0D5B205C3A24C2635EE272F3A4674E64B641CBF5EDCB90B429761FD9FCC5ABB605430B79F4E41B4924692049CBEFAF3D61F1002D254E33E341CB4F5BDE8A22592450BB8B57BD3EF1CEDDEE5EBB77846D23B6D2E855A3C5E6DDCC02D34B29E103FB721C4491974CEB8F78C76A61F766E14A7EA00A5D403BEBEEC63AF7857045587429EA5AEEFA51C69C8691F3C9B1382EF176237B1B5DED03B349B9B809C4102E70BB1F11568A61A7576CE16D94C7BC1BE252A4FE6D6BC61E3FF000C2B68AA72E4AF7492A2082CF5E0E0F91CB9F6ED838340094CC01480CE15504BD3414636CF8C759F76BBFDD97DE66048C5EDEF9BB5C4DB4368BCC22E1C422F9A7A78172C0515005614AE7EE8122457963C43E119D83F9AA54D1F4924806B716B67714E0D48BFCA969420237286C52030622EF67A65967966BB0BF37C62D945D4A512A5A33427DD98528686328EBDB3AE2BB64CEC32D49DD2589A81C59B2A8BB67E51198E9297A86166199B1CF26F748A54F38B5A97242742093323DDD3BC1D33D33A4B03895995549078821C1BBBFA8E1C618CAD9E662B7D2C00A97762723CDAF5F48A937FC1F99975644E89D667CA7BFD73152482A591603B5C53DFAD22670F8732CEE82EFF006DEB30E3A08F42FC585A5B5A02B92844465E9DBAF2CA96183F98C4A921C9600B538E7F8E01E24501207D44150CB5E747CF4A1A9BC29C4842415109EC624EBE53DA951B18ACB99A91A024E94D05C545E8748092737F4E828DDA239E5A54EAA0C8E4797E9CF2E79D466270870E482A496D0BF7E2C7979C6C9C4EE108524B3163AB0E7AE659EB68F024AB3047DFDFDE751AB9A11A77A77F5FBC6DF337FEA0925F874E3A44B5A7FC694F3060FC7E3F4AD133F7D411BADAE473B1ECDCE8D9339EAFE4A6140ECDCAFA9F7AC4FDBD9B8E890A4671A98F3D7E35272B0A66241DE009C9C3679F6D6F58899D8E4A09705C8B916C867CB56CDE24D9B752141A50E229FEE198D0739F8FC0F3A723FD3FA0924E82C5B4B3FBCDE22E6CF4CC5EFB64398A7DFDBC4DB164E2C26074EDF1D79E87A9F83B9127E62812EC0E4FE6D97A437998842695D5EC73B71A44EB5847E2994B6F04F87A029FCD139E664663EE6ADBB3F0CC52EED537771C05F3047A8887C462D0EADD249346366E0D973CF4CA5B0FC25FB058432F2CDBA89E26D6A24C7602AE5833F2C00C28D931A67C7AF18839F342CA8AB76954DA8E00F32D66A8886DABDCF6C9ED9B4FBEE34BC2311B8482EE278725B62F5C291014E3B1C4AE180019D32E74F95B424CB05252E450167EE4DF4E0CE620A64DDC5804037DE0CD7B1B79E8D7731AFD8BEEEB7A7BB8E0FF00F02DA36F1465B595706D25D3CF4A78A4001B006432F9654CA66325CC2490CF9022957CF8FBCE1F499B2D49092CE4977E3A96D1F3D2CF0C93BC3F6810FA8E3183E0570C242415E1EC5CAD0B84804A4930731E951B3D6A9B41D2ED4356E9A6B5D626B048C3211BA120977DE663772C7ADAB4D22C4DB4DE3EF70B0B182ECF30D5C807DE7ED5E08E239CFBB2489988CA39D464CC395134B9C9DB5D072A7E62CB2264B003173CF875A575A4609BDC3FDA2B6F1A8C5F17B4D9AB57894A9CC11EBAB4C40A78A21C2A904C6424E4093AEB90B4C90CAE9DAB9B1A534787416822961951EFA7BD625365BD9C7F0D709BCDA0BBB8DA0BB510A55E62AB17373275295AC4CE7F28E8698E227CBB0FB70360DA5AAFA98732E720067D19D9FB0F76D699FB08DDE6138516D2CD9B4A2D8050EB8DA7C46CE521063204E59C6550F8898E5F4D73ED5341EEB12B271728252D7CC585697B3FBD62F746CC593A80A4ADDB77844AD82105E11925C3FDC00CBA807A45442D678BE4F6F51FBA1D0C3B5E3DE8908296FA8915D2963A69DE1FB762CDB302DD2CB4C944C2191C2DC927DE8EA7F32BA9EF4DF14AFF00230EB9207D6CCD9307C81EBC223D58E44B5EE83BC2EE6A4B9B7E05B5E292587418253C33966491FEF2E5FBD5691255B3E6FCE58700BBD09E5DF40FCE1413153599DCF1605F9B59BFAB4561DB8B45A96521FB55A7FA8D89516C9109244C244E797298CE9F61F6B1DA1351874214E54002DC6E3D96CE80422B94A2E09AE47DD072D0D59E386DFC4F76F36B37A5896CEFB2DEEDF137862FB4EEBF6F8E3985BCE78762CF1377091745A254D9532A504050FCDDB2AF6E7C06F076D09F3F0B8C4A52A09295044D7293CC58B33F2E05CC5E217B8E0A9DBEDAD1DF2A519E30C7B3C7F02DDCDECCBB61B4BBCFDA6DA8C79C7FC1BC7F0655DDBDD61E5E570BAE2576EEB67DC5384C89CC124E75EF79C572B00304B4A65CE284A775144D0370AF5376D229F8EDA0B913944294D56AD752D4E36CEEE5A3B3BBA7F635F65CD91C53086F03DD2ECA5B5C58F036D5E0C12CD172E848482A79C48F79440CF2CE67AC34F0FEC49F2F1E99EACD4EE4EB9171CB4B1AC53F6CEDB2A92A00AAC4104FE38971A67668ED0EEBF63F65F66F00B5B0D99D9DC1F03B4286FC3FE5D6A8B67084C157104E473F5835E88D9C52AC2225101F75A9996CFD4EB4B51F8A6D913311326CC0A356706C2AE19F8B8CF8465F72D564A0F88B2129FCA1592A00FCD3A904476FACB6130B2652B7CA06F5C1233D1C7B073886C295214525CB6649D2CDEFCA246C82C329E3E1933F97439EB9E7D7A5389C5256775F893C87BFBE9B4F52553094E801ED0F2928460A20828820A20828820A20828820A20828820A20828820A20828821056A7CCFD694979F4FBC3399975FB4548D4F97EA2915FF13D3D442C8FE43AFA1847861D7951AC69AE5D7F4A633BFDD425DB27A37EA16171971D22D9DB04716097794C20E5E87E3E54CA60FA59A8CAB0D787B787B21492A507AFD239D5E9E75CAFA472EB7B6BBE385ED5B587AC2568C3AFFC4CD420AAD9EE09033C8C46933A19AE35E35D94162762022A012EC3425FA51A3B078627844896934219A9EFC99AB1CC8F676DA96362771B8E63BB5364C62BC18BDE5A5F5B38DF8CE94DEE2EFDB347857D0382267B682BC51F11B6EE23662E7A5256129DE176D6B43D7A5C10F1D8B63E24290900B12DC496E1AD3D6CF0E778DB8CC1300C291BC4D86DA156C762375E15CDC5AE27749B1C3AE9774525A43086C4AF3720A4CFBC40D4D795F69788317B4F12A940AD414A20DCDDED56D795ED176978BDD4B29C8206EB64DABB172386958C6569ED8988EE871CC3776BBC9C3F16B5771542B87692C9A28B171B6DB0E871376EAB3494119E9D349A9BD8FF000E311E2097F35525DEBBA524294EF402C7CFEF11B8BC4826F40ED63CCB0D5E835E51B3FB31ED35BA5C4F0AB6759DE560092EF11F0B10C559178933987532633C93CB21DEB5C7FC1FC7E16614CB90A005BE9200A3E94E361A18464ED34246EEF3330A1153F67AD5BA5232059EF9362EFC8559EDAE07700E858C41B50D01E44E4476CFE134EDA3E01DAB8376953A8F6490E43816FEBBC48C8DA2852AA439156F215FDB9D1AB78611B4985E2EB439678CBF76E3874B57D2B615063DC00C9D33E53CCD50B696CDDB382DE644EFA49228A661CAE683AB718939535332C5ECC4D0FE7F65B38BC6E6CDE5301C7AE2E186C8FCEEAB875EA488FAE5F1AA4E2B696DB90B2DF3C373671A0ADF5A01D2AF658429802951B109A90E730DF6B68F0CEDDE436DA52DBFF8842491E2F105CE706543A69A11232AC61F6963A78FF5FE6151615243EAE3CF3F485BFC32A62D4C81E37F2CC919DA245BBAEE4E9CE09F5EB0465D674A9EC2A04D00AE845F79A94CC1737E40E9AB84E10243333D8E5F625FD4F794B5B900A3B4FC01FB8FAE469DCC952A5A77814BD2BA7B6B0A528D688EC561D92A2D4670DFBAF0F4BC5E36174084EBDFD7EFAE91D05444EDA8B904849342C188D3F54AE7567AD3F1D288DE167E67F75356191AD691775921B79285989333A671CBEFA73CEA5B073D7894256A241CCD8F3AF4BF9443952852C479FBD738BB6C996C464339EFDB3FAEBD39558F06A4A4D4D465626B4ABBE9F9CA22B153164DCB0A96E56ADCD7D22E4610D04241E181F18D403E67D0FA656BC1CE09DDBDBB3FE69CB8C424D52C28FF003FAADC3BDAFAFAD651A4B320C8111AE8341A8D3F69E756191884EE9750B52CEF9BB1B574E10C56A5870778B7FB8DEAC6F415B5DBBC392B4B44919B640D73072198ED9FF98A8FC56206FBBD0DD9AB4D7AD75A50445CD2A54C04B5097E595EAF5AFB30C2EACAD710052BE132208CBB46BF0133CFA014DD3880A7751072AF4D791BEBC21CC85949FAADC457DF4AD9D9E229DC26D6DDA36E8F0804CE47501464E5DC9903ECE4CF2186F31ADC9EBE599EF4898C3E24029290ABE55CF4FBF18B2F11D9DB77D4726733DA3BEB1ACFF9CE813C1A953E95D1F537D183DD844D49C45C8DECB831D73D2B9768861B3987B29085B6D29C4CCC0067B826397A10353A963397BEAF7DBA655A5A1F2318C0024B97AFB6A37EA1B39845B2092DB423B247307EF99CB28A6335EA2A79E97CAD5CB4AB34394625D4050BEB56E373DA1839837192EA5B0907310348EA0FEC7E951F312E906A497A135D0E55E5487D2F12919E54073E601CBDBC47396FE04C1397FDA728F5CC69CBD3234CD5289C800E5AEF77CC77870310F7722C5BCF33DA235D471B8489F41F03FBF79A48A04A49530E3A9F21D6374C833485901813C9C9662C1EBEEA4C51E17FF6EF97DC5203069DA0B1299CA8814142E6D636CF31CDDA464832C0A800543D2ADED87DAF83B7FF00BD5C3774BBBAC7B1CB87026FD4CA6D70EB30522EAFEEAEC9B767F0ADC85381A75C429C23348CF235D93C05F0A4E3B112270C3B82524326CC41AFBF3610DB178C4A105EE1D99FFA1F637223497D93F702E5AE258A6F877ACDAB13DE06DCBFF8CB87AE41791B34C30B51C3D36EA7878B686EED56DA5609FEA1194F3FA23F0C7C2C3C3F8792A52370212059AC2971426FEE951C76D015FA99DFB54D39C74556D2BF0EC052022324A522070A7241CCC6691396B3975AE9B8D299D8B0B4DB53A5AEFAEAF9DF3A76D09E263A81241A35C9C9DAFE77AB9CEECD8E6BFF00E6ECE468E0D27A8CB2E79FCC9CEAD3B2100292482F4AD0E9735D08E3D4C50F6AAC90A25D8851F7D2F4A9B523A5FB12230CB11C837A8CF90CBE1F1F4AE95B3EC19C30CE85EBE9AC51316B652C3D1ADAF21958916BC64958800F248F5FBFBF2B0A1B74019522292A1BCFA1A8E632852D7FE14FAFD6933736E96E9082FF0091E9E821C56235828820A20828820A20828820A20828820A20828820A20828820A208415A9F33F5A525E7D3EF0CE665D7ED152353E5FA8A457FC4F4F510B23F90EBE863D52638CC0CE3CF2EB4CA6921EB666E0ED0B45B1B440DD61D7368810B75042547F28273127E1CE99CC202483983E4CF0E2424858551A94ABD639E5B7FB2EE5AE2D8E5AE22522CDF4F8772A689CD0F20A722A81A28820CF58D6A87E244A67E1E6CA672A0459FA51F3D2F5238F43D858AF96948DE619134CEDFB23CA3827ED7B816F1B703B67865DECC5AAF1ADCE63B89B3738A58D925DB8BA67C1B969D256DA21848F1D4A32AE93135E40F1F7C3CC46D9993B76593BE4D4268D5CF4EB7E21E3ABEC6C76E9402A3955CD6FC38BFEAD6D7B69FB55619B63B05B0581EEE302C7717C6DF5E181EC2F0BB64BE2D976CF5A150BA65A3C48E20954C89C89E55C9367FC12C4271816BC3D029C9DDAE76A5B2E758BCA71DF403BC59867C087F3F2A868DA1D97DC15EEFAB0CD99DE76F4367DA699B2B0B3186E0AF5A94AC45B32CBE9BD61E04428A791191322BD25E0DF87B87D9E895F3248FA4016AF1CB8B7F548DC563F75249512E0D9B8919BF71C5818C9B8B7B296E5F1B2BBB1B178260EFAD08416F09B0B761A4290908E3402990E28895AB9A89922BA54EF046C89E9DE992251240A1482C4B5DE9E561C43D7266D35A6690925B30D46B57DD39C623C6FD88B622ECACE1BB47B4F8324CC270DBB6984A7A00026321EBD339AA5ED7F865B271214061E4D41B203D7855DFDE913184DA0490E4D6FD18F43AF78C4989FB136F1709BB7AE7767BEADB5C3EED9016C338FED03AD614A58121280CA41827256999EE2B926DBF82DB3F129294E1651A963B81F3BD2A38D7C8BDB3058F620EF03931CDC67D2D50DD22DE6F799ED7FECF771C1BC7C393BC6D9DB7242AE7056AFB15716D27995BC420A881993D0F399E5FB4BFE9EF0F396B50C2A2D40101ADA6EBBD0B70B459B0D8A964B8201615058D879DFB50B5636DB735ED6FBBEDEB5BB0C3C95EC863A6517382E301BB1B86169240058E22A495C710CB30418AE29E27F8313365CD98518764A49A25059874ABBBF37E0D60C2CF46EA4156FB13FC8826B9BBBBFE9E3692C71766F57C2CF8859569723FE050D4292B920883D79FA8E11E22D9188D8AA9837149092C0976001ABD9F5AF9801DF2A64B525C0045C01573DBCB2A6B5996F14B761E0CF18700221C410A6D5397BA474D3B9D473AE74BDB334CEF92545AD7FB3DDF952D686388489B294424A5C588EBD2AFA54D327BE30ABD6DEE11C611A415981F1CB9EBCF2CF5A9FD9FB317B4589058FD5514399E2E48B53F351C7E15552524EACEE6F61C2FA3B6822F9B47168E101E41E8127AF31F2CC48F2E73E30A7027E530200C8D2B5D3F37D1A2AF3E490B2C9525EAC47BE1EC345D56778E048F789D34267F5D3B4C65E54F30F34EF3B86A3DA94E957074D2D11B3A4B92E90C5AEEDA65ADB43CDE25D1882A47BC124E441CA23D7591AF79ED53D87C504DCF177FDBF0639758879F214092C487C85B43C3F1E724DDEAD4212B132273F2CC73F3CA338A94958C02E68D9E8C0E9E54600C464C96A3BCC09CB80A6B4E1971B44AAF106CDAA5A85174482A0070FA199F3CF5E8669ACEC63AC8717CECDD48BEBC4F3860708B528A98805D8313D5C0F2FB4465BDCDC34E95A9529998075F4E5F2A47FCCD19C35496EDECB768593875020949A7FE26BCE9FD4387EF90E38A570E662720740074FAFCA8FF2CD5CD7A7A5CF06E7587D26514A47D2435836AEEF4E3C3B34352FB2AD5B9F41F3F8655918C04583E7FA76F46CA1D252B702A3913E4DE7C2211F682EE56BE121063DD034CB9448F43D474A513337C02146B93FB7F487282ACC1E7CB81FB6799BC2CDAAC513E234E11CE123303CC83F5D73E95BFD2D577CD9ADF9FEF846CA3382BE921F8BD2DCEED71F8641E530EF1065B2949D0A840F5EBAF98AD7E48517B067EA74BF11C98B6AF6419C024AC826B6726E496F2ED945A18A5A49E3F11B4E44813CCF58CC72E9D6B070C9AD3CF37D1B23AF0AE920998B7018876EBC98D47166BF216AB64ADE79A8E14B31C4F1C9A3C59A615CCFEB505B424CCAA520B0D38B66D9E9956D13D879A99720155D87D39E76F77EF1686DAEDBE05B01805EED1ED2DC270FC3ECDB538953EB4B46E826470DB9564B512008EA40A9FF0006EC79F8AC7C92A42F777C646B517FDF0E2219E231E84950DF7DD150F6719F6AE9A8CF99780BBB4BED81BF2B0DAF7AD9DB6DD2EC7DC3BFFE3F8462485A138AF8882DDCBB88319B0F165F6FC5B4524E47849AFA4DF09FC3587978590A99280FA126A90F4029E85B2F28AA63F6928957D74AD03FEC6BA1CDEF1D14B6C26D10B7B05C3385AC3184B097DFBD01372F78094942429320A1A52785B06084848CF5AEDFB4D48C048DD943758300037B033F5CA2AD89C5AA6A8BABB1E7D746E05E913CFB8D396AD3AC92B687B80EA4F8709398E597EC2B5D91BD8A4852C0E04DCD79B53F0E2A223D73094A9E8189B9F6FD9FAC5F3BBEC31FC4715B6798294A50B1C5C5209CC1E5AE433D4E626BA36CAC391BA7938E0F677E40DABC6299B594EA5358D40AD181E1EC115B08E92EC8D83ACE1966B52870844473919139FDF99ABDE0E584A4166E038801AEC6D4D2DC2287895A4A94337A12ECCF97AD59B8C5F0A525488FEE20CF4D7CFE952454539D2AE333A74D7D888D0A2093AE4D4F7EF575ADC10D007A9D3CEB20B807580972E7385AB318828820A20828820A20828820A20828820A20828820A20828820A208415A9F33F5A525E7D3EF0CE665D7ED152353E5FA8A457FC4F4F510B23F90EBE862971D482519CFC3F63EB4C66FF00BA9A7DABEF585D201501AD7A0BC473F6A5E049E9CF33F7F4F432CE6074B9205C578C3A42802C680B5B87BBEB1AEBBD3D8543E9BEBF21C7137A905411986BC311247298D67F4AAB63702B9B38923E9341D8DE97E97A50B189AC0E33717BA19810D4E5A3BD4D7F348D16DA5D90C1F16B6BBD9FDA2C16C31CC31055EEDDDBA6E5C4024A8F0858E1064444E446424547AB64E15559A849A33103D68C7EDD0C74DD8D8B2A4A54E7A1E77007DAE6312ECE6E8F74183624F5CE1BBBAC35772957126F2E30B6086D59E6870094F0E83908D795339FB3B65C9FA932D00B6807F4E7C9B48BC4AC613280DE34B826C3977CB5B464271F7025586E1E52A62021BB56B3619198090819240CB4D48911A88F5AA44B27E5002E404B060D60DCB534AD5DC4663316A7FE4C2AC41B5E9CF216111CAC39FB64969F480E0FCC120C0E2322273D0E63581E555BC66D0C50584A0AC26AF520355BBD7CC4478529642AA756CEDF7CEBC6E5A21FB6F7A232CFD3E47D3A7C61B2319895FF0032B2FCEE6F4E27A7189492B54B00B9CEF7716EB51E9AC4270076E96CDD24861A23C328D64E66493D73F29E722B6F98A5B15A49702E0DA9CE822670B8FDCFF71F3670CC2D473EAF156321BBCB33875CD9E1D7387A870A85CA389CE1E73CBAE67D295DC94B4D51C983BBE5D470E71352B6CEE007798F0E81A97CAC5F9C68B6FBBD92361B6FD6BC4F64F13BFD92DAA92EB177B36F3763FD64C293F8F5A015F04800091913A646A8FE23F0DE13684B984CB495149674826D6B711C6F13185DBF91517CB30CD5D0F1B75AB4604C037DFBE5F664BE636237A9855F6D8ECB29618636970365FBE5DB320E4E62376EC368805324468ACA6BC7BF113E144CC67CF5489143BCCC9E6E5EB4AC59F05B5B7C004BBD5C105DEBDDF5E79D3A49B9FDE0EC4EF4B08B6BDC03686C3104B88E316F6F72DB974DA880A5B6E25130B42A52A1C8823B5793F6CFC2BC5E027AA6192432892774E5C481C75AB919C4F8C4054A71A33F6D3F7CB5CC76EFDBB37AA6D97DEF1983932FAB2544689D4E4397999CA9AE0D32B633226B0DDA1DE6D08FC30343965092F0C569214012450E8E28D90A0BBEB58B818DA3BB5DC00FA030B100B69052948190201D02B224EBDE69AE37152F1538AD0CC49B72F6FAD2948ACE236780ADD04AC027EA2C7D916AF570232560D8C21C424A97079927FD03D23CA3A53742B749AB3E7EFDBC4462B6791FC53958D5F4F36BF578B9D2EB6F283895E47BC67E59F6C892234D69EA66669533DEB7F38879B8577494D4065532E596773969126C148CC39E8159E9D20C680FFAA709C492C0A83F7EAEEF9F4B8B4464CC1A41FE1C5EC2FC73E34AE50AAEF434A28E398CCE7073EF041A426E21492594FF00D0A7BF468DD18305208043EA1FEDA367D228FE663A9FFF00D87ED487F94BD4F61F98DBFC2F7BBFA8ABF19C598224EA0AA08F9FC7215B7F9254010A19BBB7979F58CFF86902A97D4D07D87BBC1F8A13AE7A73FACE959FF2A9BA5EA6E0866F2039D5B9C63FC66760903437F207D4748709B849410A201391279687F5FF00753585585CBE2337F64E55D73C86BFE3A82AD4C9AA3ADCBE7C21A3972D0D60CF5F58D481F5E5D2A4A4A42981E6065D69AFAE90AA30EA51277496CDAE03707CDA20EF318650A5B08202D319E5CC48CB3CFF005D69F252281B8659F67F2A5290FA561CA40510CF4622D5CADA58D62D5BCBC6A49B8B94A1339852C800753F0EB9D394480B60A0CDFEE6615B548ABF67A43F461CD4B127219EBA7A03C1EB18C76DF791B21B1F85DE6338AE316D6CCE0CD974599B8421EC51C5025B6DA41203C50B0124488E2EF3574D89E085ED7095097BC090FF004B923B7DBCA19E2B1424A424BBFD5AB27CF2BD29EB1CFF0052F6E3DB476A8DFE32DDE6CC6EB706B8219B05872D177ED255C33E1AA597015B61407454F6AEFDE0EF849364AE54F121AC689FA4336A38393E6CF153C5E3021240512493BCA37CDB78FE7AC6F66CCECDECB6C16CF58601B1986B768D59365B2E25A4216B5180A52CA009E23267299AF54F86F672F644A952CA5B7404D29976E1DDC18AE4DC495AEAA2CF99ABB73FD680677731656D7366B75C3E0BCA12E1C84EA79E672D663F5AB6CFD9EBDA83751BCA243E6F9643C867935A044A2B2491AB7B66B0605EFC8C37B5B668B0DDA30A2B6D2A30A104925524C9EB9919FD26A5766ECB3834A65AD0410F96BA599EC2FE6D0C718D2DD35000A92EFF0070FC5B5A0631B29BA6D9C21E65C08C8A92743D729F203F6ABCECD96C94D2A72CC8143CFDD6B145DAAB7DE2E5FA7A5FCAFC6379F0867F0F87B0D10470A743DE0F3E5570C3A5887B1D2F62FC2F147C5CC725AEECF7D0FA5B2CB9C9D2B3087352DC72F3E5EE911BF32AC547B96F7AE435876CFE41E66B32CDEB4A379C2E92E906FC7AC2B4A46D0510414410510414410510414410510414410510414410510414410929064C6739D6E9504BBBD5BEF0D972D459859F5E1C22A4248249F2A4D41C11EEF0A24177666D61B2D8714E958238491A93947DE7F72D664A529D9FFAB37BFD2C181048B438E0CB5CFE5FBD22AC312962F93D3AE61BCE3255F56F0E8FDA2D3C76DEE31143F60865A29527878DD4CFE607F29194C76CA0674CE7210414EE90A66A8B355DFF00BABE4D0F30E374098A5115B3DF2B75B3DF48D29DE7EE81EC25F7313B2BDBC05C5296FB2870F8644CC25206801391CF3CEAA3B4B0F88FAF71442AC0825DAE486D1DB3B6B7BEEC9DA0896849B80CE3CA9FAE51AF97187B56F76B45BBD7EC37925C4BEAE149207BD09034267A73354DC4E0F686FD56A524E44927370030E2ED7ED17295B5D0B48029C2DBDA1E35E0DC6AF093682CBC1AC398694167FAAFF0FF0057A92950E799D40A4D3266A48DFD5944F503476E35BC626CF135254D52CEF6B86D5FBD7842F7987AC2D50A5A814A4F13C6564902412390CE04E4075A96C3E0B0CB4BAD0144DAC7B07FBE79D214958A44A001EF7B5455F9BE82916EDCD9A9274D394FFACB9E91D795666E1306827FD31FFD23ECF9D3DD1C231C951228C0F56767F23DDD806868E58DB78056DA26E553C5C63DC1D2329D2751F2A8D9D2A42086450568056CC2EFDFC9E1EA26850749619B96ECC6BCFCAB4B3EFF000643CA2A76E6E1067F2B4A1C1E5A1F8CEA08A62B54AC9200B3066B655A7439584384A966DDEAFE54F2D22199C2D9B275D5B4DA145407BEB48F117023DF235E824F59E95193247CD984DD2694B75F36CB430FB0F2E71008530D41208FB65E94D6CFDB0D93C236B70CB8C2717C2AC1FB6B84942C964294A4AA66788473F3C8F794311B0B098992A1364824E7BA33E80B3EA79E462D380C61925017500D49B65573FA191168D19DB3F664DBFDD29736E7D9B719698C5D6A5DCDF6CCE22FB89C2D0106786D2CED42540B89E22A0755281CF2AE29E32F86F83C7CB9BB92424A829B71201CFB777148B8E1F6E484240500695736CC5DBB6515EEC3DB771CB1C5D8D94DFCEC662FB2DB40DAC30EED13160BB2C0F891092EAAEAE55C45110AE2CCF9675E33F1B7C0ADB7899D357835AD287247F3720540A03A6B1292FC418520B8B86000147A1CECCFA3BDF4E87ECB6F036476B9B6DFD9CDA2B1DA16D684B89BBC3EE9174DBB29E2284AD33C4A6F342C7250E935C3319E12DABB0712AC0E2513173525B7D94451FD68DCDB81504F933C6FA0009360CDC0F2AF5CF9647C331B5292A952AD4A084FFF0022513248919E607603CF952A36362C23795296903FE40D7859FA13F686CB4058CB872396777E2F1778C6EF2D582B0A53EDA38214DF110BE331EEE70424913032F95436254BC2A94952542D71A6648E1D6D9444CDC1A4A8FD22AE48D3BB68F9B70222455B4D756C9694B0E2D4E09094495088D472F21D472AD64CD334B82C4317D35AB9B4305ECF0A2E052EF60EE7DDFBC4BDBED236FB4DADD65EF19C305B09F78198CC6713FE69962B1E64CD2820AAA6B46F7A9D78C339929129450A42891983FB1A8A5EF12C9BE44A78DB75949FEE713C20749E629346D12A3541166B55FA1B76E302512D401092736724F6730E1FBE6ED9A0E825E4A808F07DE27CCCFF00A83953C9334AD8258BDA9DEC5DE3099466160821B23CEC18D73FCC26CE32DBA9E2216D000E4E0E1518EC7F61F0A9093835CC75070EE4795EB5E59F3853FC298EC03926A2EC28ED5157340417F2886BBDA74A2E0B6DA1F7018014D00A403CE6397FB3AD49499A70E7E5EE289CC81D3BF377A55E1F4AD90552C15EE8A5CDFABE61F9579C20F63C86C02E3E1B075E3504F0889CE63A7CBD44D6096B9AB4B2147A6668E7FAA1CA30766194EE46EB3029A3D5BCEB9FDE31DED7EF0B67F6612710C4710694CB82438DBA928102082547AC0D27D6AF9B23C3789C79425093BCA6BF16CAFC0FE03422BDC94EF5E7FD30CEBEC6986F43DA1DAC5AF11846C65CBD7F7B70781A4D9AFC585188E2E054E848FBCBA76CCF851B4F18942805004A49B8A38B822A1E1B2B69C9942A0588BB3B38BE64F4BDF45F6437138D6F1D386637BDABEBC6ED2CD65FB0C2AD5C5254F052B8E31261E1EF24C24B607F6933CABD3DE01F86E76761651C4A0129097701E9AB8AD341776CC45076C6DB96310A4805AAC435DAEF903C637170BC1B07C22D6DACF0CB0670CB5B3425B6AD6C5B4B2C3C94A42429E424C29440E23A1E23AC57A2B65E070182C3A50A949DE48000DD1F8C9F26EB157C4635539F7598DFBF3E4FAC5C4EB4979A42AC98436B392894F0A0C18CA3393CCE93DA92C64844D98552C6E8B06B3741DBEC6B08494294A05F788B3126EEC39D756BC0F5BA516E52B0B0A508514446B999CFB919139CE862AC7B0F1387C26EFCF402F4767A5466D6FC67589CC3A928B9761504D6DC789CB8D5CD54D9FB12ABB6DA652B5238F20449CC826791F9F7CAAD8AC08DA2A4CF900250A62C030B72F75393C5736B632589AABD99BA72A37168DE9DD6E0AB432C2D480880932444E5241FDF3ED52985D9AB92A00D599F5176D03DCF1245EF147DA0B4A8296429839005CBD3D7CB2358D9069B21090001023A72FF00433A99972F728A72DA9AFA51F93DF58A5E2120BA83821C56BAF2A7B1A429C0AEC3EFB4D0B46F5B30C7DD623D72F7AD9DEBC5E1CB7926398D7F4F80115B253B800E17D7DFEF38712C86DD1FED1EFC88852B68520A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828821A3EE34D92A2015467D48F989F81A6B324EF0248008CF5EDA5EB61942885FF00B4AA8198136BF6EBD22D6C5B0BB5C6D05B7DA42873E248394F2907A673FA9062713852A72433D2999B657F76A9895C262BE4021C90C0DECF90CDB80F28D76DE1EE5517CCDC5CE16D842CA491C020C81D00EBD0EB2222A0F13B394E0B2800EF43404D9F2B795227F09B5104805401C876A5EDCDB5AC6B35AECF5EECFDF2ED2F6DD6485405291F3CC8F3923E7509336792A50DD37BB54BE4697E7A44E236900032AFFED2E74ADAB9D9B5176892BFC33C5714B4A40040CA34C88F4F88CF5CE95460FE5A40666A3B1EA3856E087B16A557FF00304C6DD37CC963636AD9F969AC5AB79849930939EB9798CBAC4D369D215BA4B07197AB73EC61DC89C01363625EF4A9A9A38D74B59C413F61C1C49888EB9779EDDB3EF50F89C392E4675E56B7323C985E26E4CF70327B686EFF00AE15E56D5E589E239489CB43CF97AF3FD62A24C9625C647A6B968CCF7E31252A7848157D2A19C5387463E8D10AEE1DC4147864C667E323423EF2D49A66A5EE2C0341A350DA8783FDEB133879E0241DE07870B3533FC86CA21DFC3553A13E59FC2048CFFCE993B4AF7D208343D9F90F7A43D4625259E95701E8E3813A674842D2D9D6DF5B686020019BCB494A5723FEDA98CBAC75E9178DC399885101DC663EC6E3FA6178749C502A636C8022A5AAFEA22C5DB5DD5EC06D9A56CED7ECD5AE22873253CDD9B6EB99F3E258D4E93D7AE7547C76C654D52814BBB801A95A58FBEB50EC62B46073770C39E7C9B5D2358769BD8D5FC18DEED1EE5B6E719D92D176381BF889B2C2D970020A516D6E9C92E2C4AA224CE872AE7F8DF84382DAF89562A74894B98A2FF5A6A5854971D6834ADA2C982C7A53280DE6200706C5ED9F5357E04C60C637ABEDA5B98C69CC3F783B1B866D6EC55BF1A9CC6707B0BEBEBF36EDA54BF13C77086F88849CC889CF28AAEEDDF83982C3E194538745029BE9E1614AD39D2B7A449C9C626630B3B333E75FC3FDE919A775DFC477737B73776DB34E626E6038A61EA71AC52C318798B7B9B67944801D6B8A5292B04A246600033AF2A78F3E1A623040E213865224CC2AF953770842F74B16362D6247F6FE5044C53392736233B5FF0059E85B6C70DDFE6EE31265E36BB6DB3EAB87024DAA1EC41A0662600067211315C50F8731B266EE2028024D81D73A73CFCEB1228C0254086C9ACE03F215EF9D844B61BBD1C2AF8AD4D63D87B970DE65DB7B90A61433238153C80131A6A3A53F95E1433803350EB3A8E3FDD2EE6174F86D33C0594824D4E9E60FBB6717261BBCC43C1DF1F1266EDB6B3E169E0BC87627B453A1E0EA809964D724BB771EEB01F0DA10092814B960FED8449FFEE8E10E5AB6E1BB2C34A2A002969470C18248073CFBE94FA4783E72082892A615FE2FDAD715E26819A103B225A0BEE80012C5AEC73B8D323CA23717DEAECDD8E1EBB84E2C2E16904F84D3E9528F6893AE63B7ACD494BF0D62890912D49721C37767EF9706784FFC244B56FB208A31A6F646BE74AF58C4B79ED47B2B84D8285CA5EF1D5E22521213E285490264F32411D6262BA56C6F86EBC6E1D334C92544554525CB90F56EA78E60444E2F172A42C85123402A939D6AD4CF2B5B2C2D896FF76C31E7DC6B64306C43145BE48652F30B7904AA40808327CBE9575D9BF0B5689809901A87F8E8796A2B1098BDA89DD2029935B1F79BD9DF5156A309DC7EF7F7C0EA5FDE25F39B2981CF1A2DEDDC7ACDC08992149765209232EB273CCD764F0D7C3F32572CFC948008B2780D00C868DEB157C5ED10EE54C0BBD682E00CAF616A9E91B47BBADC2EEFF621808C3B0CFE6F7AC0138BDD32D3EB0B4C92B0FA6089339E672CC577ED87E14F952D2E9600682ACD4B5816FB457311B40289216F53C5891EDB96869995A64786385C0B0320419000C824764881A888F4AB72657F88D2AC2D4A12C3A31A55FF005159C54BF9EB52C3D3B8D6A59EDCA14F00F5F4E7F18229CA092A152473A5453843032FE5922BD7F1D7F1136D5E356B668429292A1324F39396BAEA0F202A4E4E154B1715A37AB5383119D3284FFCA1243B81773A5FCECFFDB1685CC4D7C2DB5C5240809D2644EBA9E43A72815252B66294A02C4B1A5AF5E43A8A645E3076ACBFF9E55AF36CAC3A3F08D8CDDB6EE55768B5BC799E10A2492A4F43DFF4CEBA1EC89224E1820DC5B4BD5C9D39E715CC6E3133662D64B019937BB8A3DCF1E91B8582E0B6D84DA2128400A4A7A69FAE675F96553491BA092CEDD3DDACFC0D62A98BC52A7ACA45100B30CF9F0F662E2617C6DF144493F414992E49D622E7A774A83BD8F7685AB10C141945BDD21540CBCCFDFEB446C8CFA7BF48AE88520A20828820A20828820A20828820A208FFD9, '1', '2021-10-06 01:13:39', '1', '2021-10-06 01:13:39', b'0', 0); -INSERT INTO `inf_file` VALUES ('427.jpg', 'jpg', 0xFFD8FFE000104A46494600010100000100010000FFDB00430006040506050406060506070706080A100A0A09090A140E0F0C1017141818171416161A1D251F1A1B231C1616202C20232627292A29191F2D302D283025282928FFDB0043010707070A080A130A0A13281A161A2828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828FFC0001108017F038403012200021101031101FFC4001C0001000203010101000000000000000000000607010405020308FFC40051100001030301040507060A08030803000000010203040511060712213113415161811422357191A1B115233242C1D1161752545572749394B2242536537392E1F0264362083334374482A2F163C2E2FFC4001C0101000203010101000000000000000000000102030405060807FFC4003811010002010204030507030402030000000001020304110512213113415114223371B13235617281A1D11552C1233454910642B2E1F1FFDA000C03010002110311003F00E5000D57E96000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001832600905ABD1F0F8FC4DA356D5E8F87C7E26D1EA307C3AFCA1F35F1DFBCB51F9EDF564006572800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000115001E49F5480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060C9802416AF47C3E3F136CD4B57A3E1F1F89B67A8C1F0EBF287CD7C77EF2D47E7B7D400195CA000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000454007927D5200000000000000000000000000000000000000000002407DA9692A6B24E8E8E9E6A893F26262B97DC84928B67BA9EB1A8E6DBD206F6D44AD67BB8A931599ECC3933E2C5F6ED11FAA2A09D26CC6E8C44F2AB9DAA05EC74AABF6184D9B55AFF00DDDF2CEE5EC4949E4960FEA1A6FEFF00AA0C09AD46CCF51C6D5740CA4AA6A7F753267DF823B73B05DED795B85B6AE06A7D758F2DF6A6508989865A6AB0E49DA968997301E517D5ED3D10CE000000000000000000000000000000000000000000001832600905ABD1F0F8FC4DB352D5E8F87C7E26D9EA307C3AFCA1F35F1DFBCB51F9EDF500065728000000000000000000000000000004BF41E9EB75E9B54DAD95ED9E3C2358D5C70EDC7ACE4EA7B14F62AF5865F3A27718DFF948638CB59B7279B6EDA2CB5C11A8DBDD96BE9FA165CEF549472395AD95F8554E7C957EC3ABAE6C94F63B945152B9EB1C91EF6EBBA9727334ED4BE86F14D58CA7927481DBCE6B13B950EAEBAB9BEEF7064E9473D3C71337732B719E3EE2B336F1636EDB3631D717B15B78F7F7E9F24681B16CA29EE3591D352B15F2BF97777AF7131D47A4286CFA7BCA24A87F96B5513B9EAABC5A89D98CF12D7CD5ADA2B3DDAF8347973D2D92B1EED7BCA060032350000000000000000000000000000000000000000000000000000000000000000115001E49F54800000000000000000000000000000000000063217FDFAC9D58F4A525B6DECBD6B391D4D46BC61A245F9C9D7AB29CD3D5ED2621873E7AE18DEDDFCA3CE51FD37A6AEBA8A454B6D32AC2D5F3A793CD8DBEB5EDEE4C9275B7E8FD2EDC5D677DFEE2C5E34F0E12362F7AF2F6AAAF71C8D49AD6B6EF079150B3E4DB4B3CD65343C329FF0052A7C1381172DBC4766BC62CFA8EB967963D23BFEB3FC2695BB47B9A46B4F63A5A3B452FD56C51239D8F5AF0F71DFB1E89D41A9EDD4F71BBEA3A88E2A96F48D8BCE55C2F2CF144F7155390FD41A178E8EB3FECB1FF002A16ACEEE7F1498D0E2ACE0888999EFDE50A8B63B6A545E9AE55B23D79AA6EA7D87D1763B65C79B5B5C8BDBBCDFB8B0EE956DB7DB6AEADCD57A4113A556A2E15D84CE08F684D6516AC6563A2A39297C995A8BBEE45DEDE4CF0C16DA1C5AEB75D6A4E48B748EFD9127EC966A3C3AD3A82AA07A72DE454C7F95508954EADD53A5EED516DA9B836ADD4EFDD7B676A488E4E6985E0B83F43751F9B369E99D7977FF11BFC8D22D1111BBA3C2F516D6649C79E22D1B7A43AC97FD29A85772FD69F936A9FC3CAE8F967BD138E3D68A685E341D5C34C95F60A98EF16D5E28F8573237D6DEBF0E3DC43B0746C97AB8D8EA92A2D754F81FD6DE6C77EB379298F789EEED7B2E4C5D705BF49EB1FCC39EA8A8E5454C2A73EE058A8FB1ED09158F6C369D4CD4E0A9FF7752BF7FBFD641EED6CABB457CB457185D0D446B8545E28A9D4A8BD68A44C32E1D4C649E4B46D78F2FE3D5A40021B00000000000000000000000000000000000001832600905ABD1F0F8FC4DB352D5E8F87C7E26D9EA307C3AFCA1F35F1DFBCB51F9EDF5000657280000000000000000000000003260EB586C35B7C9256D0B1AEE89115EAE76319CE3E0A45AD158DE593162BE5B72638DE5A343593D05547534B22B2662E5153E0BDC4F6D90566BAA886A6E6D6C5434996E234FF00BC770CF1F611ABC693B9DA6916A6AE362C48B85563B7950B0AE73A69ED0ACF2576EC9D135AC7638EF3B9AFC54D3CD7ACED34EB32EF70DD364C7CF5D4EF14AC6F35F5F462B750D8B4DA3A929A26BA46705644DE4BDEBDA6AD1EBAB3DCB14F5F4EB0A3D513E7111CDF12A9739CF7AB9EE5739572AABD664B7B1D7BCCF562B71FCFCDEE5622BE9B2D1BC58D6C73A5F34EB58A8C4557C38CB55ABD68402FF7CADBE552CD56F446A7D18DBF45A84F765D717D5DB6B282A155ED871BAABD4D5EAF72911FC19ACB85EEE14B6E63563A7915155CEC22679214C3314BCC64F2F367D752D9B0D2DA5E95BF7AC7AA38090DDF48DD6D544FAAA98D8B133E92B5E8B823C6E56F178DEB2E0E6C19304F2E5AED2006CD0D1D457D4360A385F34AEFAAD4F8F61699888DE58AB59B4C56B1BCB58FB535354554891D2C124CFF00C96372A593A7F67F0C2C6CB7A547BF19E898B86A7AD799D0AED5561B1B560A18D923DBC1594ED4C7B791AB6D56F3B638DDDBC5C1B92B1935778A47A79A1743A0EF550D47491C74ED5FEF1DC7D8874D9B36AD5CEFD7409EA62A9F1B9ED0EE3322B68A28E99BD4ABE73BDE71E5D5F7C91DBCB5CF4EE6A22215DB5168DFA42D36E138E79622D6FC5DE9366D588DCC75D0B97B158A872EBF42DE695AAE8E2654353FBB771F628B7EACD473CCC8296774F33B9377117259F6375CDB48F7DF1606BF1BC891FD54EBCA98F265CD87ED4C4B7749A3D06BFA62A5ABF8F928CA8A79E9A45654C3244F4E0A8F6E307C4BF116D77E8248D3A1AB8D8AAD72A71445EE5217A8B67B86BA6B2BF971E8645F82FDE64C7ACACCED78D9A9ABE01931D7C4C16E7AFEEADC1F4A8864A699F0CF1BA3958B8735C98543E66E38131313B4C00008000000000000000000000000000000000000454007927D5200000000000000000000000000000000180A4CB67F65A693CA7505ED11B68B779F85E3D2C89C51B8EB44E1C3B704C43167CD18693796FE9FB551695B3C7A9351C6AEAA7F9D6FA17261CE7753D53DFDDCF99C1D58DBE5C60A6BFDEDAE6C558E5640DEA6A226530DFAA8BED534B545F6AB51DD64AEABCB73E6C5167846CEA4FBFBCB6E66FE1BEC9DAE6377EBA18B7B7539F4B1F344F5A27BD0BC46FD1CBCB6BE9AD4CF9BACDA7699FED8F48FF2816CEB453756256495334B052C0A8C6BA2C2ABDCA99C71ECE1ED4265F8A0B5F5DE6A53FC86E56AA685D96A45F42E13B373873E95FCFF00CA9F028E491E9F5DFF00E6513111DD5C56D4EB6F7C98F272D62768E9BAE45D90DA7F4CD4FB23FB8B26C940CB659E8E8A29165653C4D89AF5E6E444C654FCA4B23FF2DFFE653F4FE85E3A3ACFFB2C7FCA85A9313D9CEE3183363C75F1727346FE9B205B50B3EA9AABBD4D65BA6959676D326FB12A3753088AAEF333D857DA3ED7A8EE6CAAFC189A46246AD499193F45955CE3DC7E93AFA58EB68A6A69F3D14CC58DD85C2E1530A7274B695B66996D425AA391893AB55FBEF57724C2732663AEEC5838B785A79C5CB1BF4DBA7D5D6B7325650D3B6A155666C6D47AAAE72B8E3EF3F3A6D3BFB7977FF11BFC8D3F49A1526AFD9A5D2F7A8EB6E1056D23239DC8E46C8D76530D44FB08B44CC6D0AF08D463C19ED7C93B46CA7CCB237CD345144D574923918D6A75AAAE110B1FF14179FD2141FE471E742E8DABA3DA2A535CE2456DB99E51D2373BAFCF0663C73FE531C527CDE92DC4F4FC96B52DBCC46EDCDA3E9AB4D9B4F58E28B14F7557B299B331708EE19739DEA5E39E79535A92AA3D4913B4B6B0CD35EA9FCDA5AC7A61CAEEA455EBCF0EE72779CFDB25DFE52D58EA58DD98685891FF00EF5E2EFB13C0DB9DD6CD59A1E965A8AEA6A4D4540DE8D1F2C88D59913922AAF6A630BD4B9267BB9F4ADE34F8EF977DE67BF9C6FDBF4F5416F16DAAB3DCA6A1AF8963A88970A9D4E4EA722F5A29A858D0B9BB42D32F8E4DD4D4F6B8F79ABD7511FDBCBDBEB2B84CA2AA2A6153A94ACC6CEB69B3CE589ADFA5A3BFF3F2964004364000000000000000000000000000000003064C0120B57A3E1F1F89B66A5ABD1F0F8FC4DB3D460F875F943E6BE3BF796A3F3DBEA000CAE5000000000000000000000000074ECB7CAEB2BA575BE548FA54447A2B51738CE39FAD4E6022622D1B4AF8F25F15A2F49DA5DCBAEAABADD697C9EB2663A1CA2AB5AC46E71CB9162DCA1FC21D0ACF244CC9D1B5CC6AF5AB7A8AA2DB433DC6AE3A6A462BE47AF57244ED52796D9EB3424D0D3DD5EC9E86A9729D1E556254E784F1434F3D2B1B453BC793BFC375192DCF6D56F34B46D33E8AEA46BA391CC91AAD7B570A8BCD0CA16FD65874FEA755ACA791A93393CE7C2EC2AFEB27DE7CE9744596DCADA8AB95D2A3173991E88DF12DED95F38EAC73FF008FE69B6F4B44D7D776AECBEDEFA4B5D4D7D43771B51F45179EE275FB7243DDA9AB28AF171A9B5CC8C65448AAA8AD4545C725C2F592FBDDF16F953F2069D5661ED54926CE1AD6A7344F7103D4164ACB1D524558C4563932D95BF45C570C45AD3393BCF933710BDB0E1A534BBF2D3BDA3D5F7BB6ABBB5D29169AAE76AC2E5CAA3588DCF71C3077748E9E96FD5E8C4CB69A35459644E58EC4EF3667930D77DB6871A3C7D6E58AEF36B4BC69BD395B7E9D1B4EDDCA6477CE4AF4E089DDDE5979B3689B5F9A89D22A72E7248BDFFEF81F2D437DA1D236E6D150318B528DF323EA6A7E5394A9AE15B3DC2ADF535723A495FCD57ABB93B8D488B6A3ADBA55DABE4C1C223931C45B2CF79F2876F51EADAFBC4AE62B960A6FEE5BD7EB5EB23CBC7060F46ED295A46D58707367C99EDCF927790D9B650D45CABA2A4A466FCB22E13B113B57B8F8451BE591B1C4D57C8E5C35A9CD57B0EBC4B73D29748A5960E8A656E51AFE2D722F34E1CC5E676DABDCC18E26D17BC4F246DBCC2C6B65B6D7A2AD4EABAC91AEA854C3A554E2E5FC96A7615FEA7D575B7A7AB379D051E5710B579FAD7ACD0BDDE6B2F556B3D6BD17098631A98462771CEC1AF8B4FB4F3E4EB2E8EB78A73C781A68E5C71FBFCD3AD93D6B9974A9A4CF9B2B37D3D69FFD9B57ED435DA6B55D4B51566A295525E89FD59E7BABD5C5148D6839961D5743BBF59CAD5F61DDDADC28DBAD2CC9CDF12B7D8BFEA63B52BE3ED31D261BB87519238673E39DAD4B24371B75AF5B5A1B5346E6B6A9A9E6BFEB357F25C9D855573A29EDB5B252D5B1592B170A8BD7DE9DC6D69DBD5458EE2CA9A755E8D78491F53D0B23525B29B56E9F657DBF756A9ADDE8D7AD7B5ABFEF9889B69EDB4CFBB2AE4AE3E2D86725236CB5EF1EAA8C1E958A8AA8BC15382A28C1BCF3BD9E40010000000000000000000000000000000008A800F24FAA400000000000000000000000000000004B62D9452DC6E14D474C999A77A46DF5AFFA71F0261B47B8436F8A874ADA9F8A3B73516754FF00992AA75FAB2ABEB5EE3DECBE28A821BC6A6AA6A2C76E85590F1E72393FFA4F138D43A5EF17EB5576A06A31D1A39EF915CEC3E454E2EC263AB897ED0E6E4C94B6A37C93B569FF00CA7F8847510B4F6157748EBEBACF22F99335278D157EB27077B787B0AB10DFD3F7296CD7AA4B8C0ABBF03F2ADFCA6AA61508A4ED2D8D6E9E35182D8FCFC933DB55F56BF51C76E89D9A7A06E17BE45E7EC4C215E9F4AB9E4AAA996A2672BA595EAF7B97AD5572A7CC5A7795B498234F86B8E3C83F49ECDAE34F5DA3ADBD048C57430B6291B9E2D72261514FCD87B8A5923CAC52491AAF5B1EAD5F7135B72B0710D0C6B6914DF6D9FAEB982B9D8EDCE066908A3ADAE8D6A5F50FC3669B2F5555E09C5724EEB2BE9691A8957510C0AECEEA48F46E7D5932EFD37789CD82D8B2CE2EFB361EF6B1AAE739A889D6AA7E7AD65AD6EB26A7B8FC9179AA650B64DC8D237E1BC111171E3922F74A999F70AE62554EE8D677E13A45DD54DE5E499C60D2C7798E6EF55A0E114C13CF79E6DE3D121A6D69A8E1A98A65BC55C9D1BD1DB8F765AE44EA54EC52F4A2D534357A424D4316EF46C815CF6AF36B9138B17C781F9A910DDA5B955D35A6B2DB14CA94954E6BA4677A2E787BB3EA222FEACFACE178B5115E4888989FFB8F36B54CEFA9ABA8A99955D2CEF591EABD6AAB93E58E27A05267774E2368D9BD60BB4F63BBD357D2AFCE44EE29F94D5E6D5F5A122DA65B608AB69AF96C6FF56DD5892B31C9B2638A77679FB4873932A84FB492FE10686BC58645DFABA2FE99479E689CD513BB394FFDC5A3B6CD2D57FA57AE78F94FCA7F894010C9843255BA000000000000000000000000000000001832600905ABD1F0F8FC4DB352D5E8F87C7E26D9EA307C3AFCA1F35F1DFBCB51F9EDF50006572800000000000000000000000000012DD0BA8686C3154F95C323E57AF9AE6222F0EC393A8EF93DF2E0EA89BCD8DBC2367E4A1C808638C558B73F9B6EFADCB7C31A799F761D4D394EFADBC52D2367921499DBAAE62F1443A7AF6D8EB3DC618A3AA9E68E466F7CEBB795173DA722C35CDB65E292B1EC57B617EF2B514E96B7BDC37EB94735344E6471B37115E985771E65662FE2C6DDB667C57C5EC56DE7DFDFA7C9C6A1AC9A82B22AAA57AB268D72D54F82932D47AC28EF1A696966A6779639132AA89BAD776A2906C054C96BE1ADED169EED7C1ADCB8296C749F76DDE188911CF4472EEA2AF15E782F4B23AD36AB5C105354D3B62DDCEF2C89972F69456015CF83C6888DF66D70DE25EC369B4577995BB5DA734DDCAA5F34956C59DEEDE7392A132B939170D9BE51CEB65723BB1923787B50AE5155392AA1D8B56A0B9DADED5A5AB9309CD8F5DE6AF82987C0C94EB4B36E78968B3DBFD7C3B6FE712F85DACB70B4CAACAEA67313A9E9C5AE4ED45439E5B162D61417C44A2BB431C72BF8223B8B245ECE3D671AF7A01EDBA40B6CF3A8A593CF6AF3893ED42F4D4ED3CB9636953370BADE9E2E8ADCF5F4F387D7669624CADDEADA88D66521DEE5DEE23FAF2F6DBCDDFE670B4F4F9631C9F5B9657D44D35EDCE2B269F8ADB46A8934CCE8DA89CDAC4E0ABF615314C11E25A72CFE8C9C4AF1A5C55D0E3F2EB6F9867ACC036DC077345AFF00C556CFF17EC251B5D5FE9741FAAEF891FD9DD3F4FAAE957FBBCBFDDFEA7536B336F5F29E2CF06439C7AD57EE352DFEE23E4EEE19E5E159267CEC84AA130D9C5FD2DB5CFA3AB911B493AF9AAE5E0C77FA90E43286CE5A464AF2CB95A5D45F4B9632D3C922D7B1D1B350CD2504AD91B2A23DFB9C511CBCF0BEFF00123A8B93BD45A5ABAB2C6FB9C4B1A46D457231578AA2673F038284629AEDCB13BECB6B2324E49CB7AF2F37587900191A8000000000000000000000000000000008A800F24FAA4000000000000000000000000000000C2B55EDC378AAAA22027A427B7DCDA365965A16A2B65B9CCEA9953FE945CE17FF00892DD9DAA7E28EE1C3AAA7E0A4476BAE4A7BA5A2DCCFA14544C6227AF87C1097ECEB09B23B8F0EAA9F829963ED6CF39A98DF495BCF7B5B7FFB95231AFCD33F550FA1DAD11A6AAF54D7B29699ED8A38D8D7CD33933B8DEEEF52D766C7ECDBA9BF595CAFC717239A99F7158A4CBABA9E25834B6E4BCF551E0BAABF63D6C5A7779157D5C7509F4164DD7373DE98429EBADBEA2D572A8A1AD66E5440EDD722725EC54EE5422D598EEBE975F8757BC629EB0D606327D994D52E6E5296A1517AD2272FD846CDB9B447796E69A6A2EA6B46533FD2E2FE742C4FFB40222D4D9F2D4779B273F02B7A1656D1D7535545493ABE091B2B5AE85D8556AE533C0ECEAED4577D54FA67D75BD635A747237A389FC5171CF29DC5B7E9B39B9B14DF578F2C6DCB113BA30864FA792D5FE6951FBA77DC3C96AFF34A8FDD3BEE29B3A5CF4F57C81F6F24ABFCD67FDD3BEE1E4957F9ACFF00BA77DC3639ABEAF883E8FA7A88DB9929E66A76B98E4F8A1F14767B3DA0DE27B4BD926D9AD7FC9DACEDEF72FCD4EE5A77A7739387BD108C9EE095D4F5104CC5547472B5E8A9DCB9FB0989DA58F3523263B527CE1D1D5543F25EA6B9D12261B14EE567EAB97793DCA72C9AED7E344D61D3B795452C7267B578A7D884285A369534979C982969EFB3000219C00000000000000000000000000003064C0120B57A3E1F1F89B66A5ABD1F0F8FC4DB3D460F875F943E6BE3BF796A3F3DBEA000CAE500000000000000000000000000000000000080005920000000AA1E8B1F456B58A2A54A3BD4D8731311CEE4CEF2762F7F795C031E5C55CB1B4B7345AECBA3BF3E39FD16F576AAD332488B53D1CEEE48E743BDEF53A13592C35F44CA9968E08E191A8E47AFCDF05F615269AB6FCAB7BA5A6C658AE473FB9A9CC9DED52E694F6FA7B6C0A89D2F9CE44FC94E4685F0456F14A4CEF2F4FA6E2339B4F9353A9A56623B74EF2F9DDB6750CAC74B68AB54EB48E5F39BEA472724F6901BA5AEB2D550B0D740E8DC9C979A2A76A293ED93C756E8EA279679168DA9B8C8D578679AAA7FBEB3BCDB8D9F533EAEDB2235EF89CADC3B9AE3EB34B57364C569ACF58861C9C3B4DADC35CB8E3C3B5BB47AA25B26A5E92E557549F4638D1A8BEBE3F61C3D7D56955AA2AD5AECB23546278271F7E4B3F4FD95BA6ED754C8DCB3B95CE7B7098554C7042A2AEB65C96592A2A68EA5AB2395EB98D79AAE54BE1BD6F966FBF46BF10D364D36871E9F6EBBEF2E6032A8E6B951ED56AA75298375E776D96BECB2A52A34FD452393290BD5BE0BC7EF2B4BA53AD25CEAE05FA92B913DA4CB6472B9B71AD853E8BA34763BD14E3ED0E9FC97534FFF00E54E93DAABF71A98BDDCF68F577B591E370DC593FB7A23200371E7C0000000000000000000000000000000115001E49F54800000000000000000000000000007DA878D7D237A9D33117FCC87C4FA533FA3A9824C7D0918EF63917EC08B7D994BF6C0F576BCAA6AF26431227B1549B6CE7FF292E3EAA9F8290BDB1468DD7123D39494D13BDCA9F6135D9C7FE525C7D553F0532D7EDCBCFEABFD8E2F9D51ED84DDA9686E1574352F464956C63A2739708AAD45F37D6A8B9F02F4CA769F91ADF4F3D64D4F4F4713E5A8911118C67355EE2C28748ED05226EED554B13A9AB5DC93DA296DA36D95E29A0C59337893922B33E52BD6491B1B1CF7B911AD4CAAAAF043F3F5EA2875B6D4960A273BC9267231D2C69CD8C6F9CE4FF7D67DAE5A3B5DCB472255BEA2AA1C79D0A566F6F78678FA8DAD8D5CE86DB7BA8B6D6D2AC771A95DC64F2734DDFF0094A8A9C3EDF61333CD310C5A6D357498B266C578BDB6DBA797E2B4AC1A46CD628D128A8A3E93AE591379EABFACA4811AD44C235113D4641936D9E7F265BE49DEF3BCB184EC4184EC432031B184EC4184EC43200C613B10613B10C803CAB1AEE0AD6AA77A114D4FA0ACB7E85CAFA665354F36CF0351AE45EF4E4BE24B4113113DD97166C98A79A93B4BF2DEAAD3D5BA66E7E495ED4563F8C5337E8C89F62F71C593E8397B1327E93DA5D823BF697A98D199A981AB3C0E4E68E6F578A653C4FCD8EE2D7276A60C36AED2F69C375BED78666DF6A3BA7BB57F3A4D3CFEB75B98AA40C9E6D7711DC6CD4D9E30DBD88BEDFF00420645FBB370EFF6D5FD7EA000AB7400000000000000000000000000003064C0120B57A3E1F1F89B66A5ABD1F0F8FC4DB3D460F875F943E6BE3BF796A3F3DBEA000CAE50000000000000000000000000000000000000002C00000000001F482274F3C7146997BDC8D44F5952B1369DA1636CA6D8E8E19EE52A265C9D1C6AA9D5D6A43B565C9D78BFCF33155EDDEE8E344EB44E09ED2C7D412B34D68A4A68977667B12262A73DE5E6BE0995207A06D6B71D4502B93E669FE75FE1CBDE68E3B44CDB34FE8F4DACC3315C3C3A9DE7ACFEA9DCCE4D27A11ADCA24E91E329D6F77595452D4CB4B591D540F564EC72391C9DA4DB6AF74496B21B6C6ECA429BEF44FCA5E5EECFB481A1934B49E49B5BCDA9C673FF00AF18B1CED18FA47CD65D2ED2A9FC9A34A8A2996A31E76EAA6157B8F69B4AA4FAF6F9BC1C8A56461C9927D9317A2238EEB3688E6FDA16FC17ED357F448AA5226C8BC9B3B3757C17B4E45FF67CC7C6E9AC92F7A42F5CB7C14AD53872243A7356D7D96446A3967A5EB85EBC113BBB0C7E05F1F5C53FA33D78A60D57B9ACA47E68EEEBECE20A8A1D552D354C4F8A5485779AE4C2F343E7B564FF008962E3CE99BFCCE2C5B3D4DB6F71C572A6463E66A6EE7939B9E6D52BADAB393F096344C2E29DBFCCE2986FCF9F798EBB3775DA5AE9B86F2D6DCD133BC4A16003A0F22000000000000000000000000000000008A800F24FAA4000000000000000000000000000030A64013CDA7E6B6834CDD5BC52A6912355FF00AD31F79AD69A9D676CB33ED9436FAB4A37EF6F316937B3BDCF8F89B14C897ED924D0A7FE2ACB51D22679F46BC797A957D86FD06D6AB696869E07DAE199F1C68C5916654572A26338C193A6FBCCB8B1E2462F0A948B72CCC6D3FF0071FB23D60A7D57A7EADD536DB3D5367737737E4A5DF544EEEC242BAAB68B95FE8753FC127DC7DD36C75A8A9FD4F022F674EBF719FC7257AF1F91E0FDF2FDC4ED5F553263D565B735F05667E6D776AADA2F0FE8753CFF00324FB88EDC29354D75E52EB35A2AD2B9AF6BFA48E9B772E6E30B84EBE084A976C75EAA9FD4D073FEF97EE0BB63AFE3FD4F073FEFD7EE1EEFA94C7AAC73BD30563F56AFE156D1BF33AAFE093EE33F853B465FFD1D57F049F71B3F8E2AC44E367833FE3AFDC6536C757FA1E0FDFAFDC3DDF563F66CFF00F1EBFB357F0A368DF9A557F0483F0A368DF9A557F0486D7E392AFF0043C1FBF5FB87E392AFF43C1FBF5FB87BBEA7B367FF008F5FD9ABF851B46FCD2ABF8241F851B46FCD2ABF82436BF1C957FA1E0FDFAFDC3F1C957FA1E0FDFAFDC3DDF53D9B3FFC7AFECD5FC28DA37E6955FC120FC28DA37E6955FC121B5F8E4ABFD0F07EFD7EE1F8E4ABFD0F07EFD7EE1EEFA9ECD9FF00E3D7F66AFE146D1BF34AAFE0907E146D1BF34AAFE090DAFC7255FE8783F7EBF718FC7256FE8883F7CBF70E9EA7B367FF008F5FD9A926A7DA33915AB4753854E3FD09086525A6AD75050D05652CF4F3544ECF32566EAE15DC571D9C3DC4F936C95B9F4441FBE5FB8F8E8FB83B54EBEA8D457089B0D3DBE9FA456A3B28C544546A7BDCBE0368F566C739B4F4BDAD8A2B1B7979CF9381B56AB4AAD735AD6AE590323853C1B95F7A9123EF70AB7DC2E3575B2AAEFD4CAE9573D48ABC0F818E6779DDD6D363F0F0D69E9000086500000000000000000000000000000C19300482D5E8F87C7E26D9A96AF47C3E3F136CF5183E1D7E50F9AF8EFDE5A8FCF6FA80032B94000000000000000000000000000000000000000B00000000012FD9A5B52BAFCB3BD33152B77D7F5BABED2225B9A3E99BA7F46BEB2A3849235677F7A7D5F763DA6AEAAFCB4DA3BCBABC1B4F1975117B7D9AF5945F6A1745AABCB68D8B98E99BE0AABCC92ECF28E3B5E9892E350DC3A66AC8ABD7BA9CBDDC4ADE9229EF97C6B132B2544B973B9E11578AF827C0B1768B5CCB669F8ADB4AA8C599123444E68C435F2D76AD30C7EAEA68F2F364CDC432768ECAC6EB58FAFB8D45548AAAE95EAEF51AC8A39837E3A4443CCDED37B4DA7BCBD000954306401D5D3D7EABB1D4BA5A554735C98746EE4BFEA6B5DEE53DD6B9F5554A8AF77244E4D4EC434C15E4AF3736DD59673649C718B9BDD8F27900191840000000000000000000000000000000115001E41F5480000000000000000000000000000000259B2FBAC741A93C8EB38D15C58B4D2B579657822AFB71E270F525AE5B1DF6B2DF322AF42FF31DF94C5E2D5F61CD5CA2A2A2AA2A7254EA2C5BF3135A68E86F50222DDED8DE8AB1889E7491FE5227BFDBD85BBC6CD1CBBE0CF197FF005B749F9F94FF008482AE9E24D87365E8A3E956919E7EE2678B9133929CC96E4772A6AED87D4454F222CB4B036195BD6D76F27B95389512136F263E17CDFEAF37F74B2002AEA8000000000000000058BB0F8A3935157B64635E9E4C8EC39329F490AE8B1361B2322D457292472358DA3455555E089BDC549A7768714998D2DF64675F2359AD2F0D6B5111B3E11113098C275120AACE97D99474DC1B72BF3B7E444E0E6C489CBD9C3FF729E6DB6EA6D59B40BADC5DE848245A89A57A61AAD444C357D7BAABEA381AD2FCED457D9AB1379B4ADF9BA762F0DD8D392E3A9578A9333B4CCB5EBBE6F0F079562267E7E51FE5C2001475C0004000000000000000000000000000000003BF6AF47C3E3F136CD4B57A3E1F1F89B67A8C1F0EBF287CD5C77EF2D47E7B7D400195C90000000000000000000000000000000000000196B55CB86A2AAF62264CB1AAF7B58D4CB9CB84253B4BC827743B38AE9988B55590C2BD8D6ABFEE3AF1ECEADB1373575D3B913B15AC4F81AD6D5E38F37571704D664EBCBB47E32AB816CB74BE94819F3B246FFD79F39F78F93F44B39F92F8C8EFBCAFB6567B44B63FA0E48FB592B1FAAB9D376E75D2F34D4C9F41CECBF8670DEB5279B53B8A52D053DB61546EFE1CE6B7A9A9C13FDF71D8B63F4ADBA7596DF352C52AA6EEF23B2B83DDCA9F4D5D67E9AB24A79A54444CACB8E1ED35AF9F9F245A6B3B43A98387F81A4BE1A64AF3DBCF7F245B6516BDEABA8B8CA986C69D1C7EBEB5F670381AF6E9F29EA19FA3766183E699D9C39A96B5B1B69A3A1F24A09E28E2E3F464455CAF5E72466A367543222F93574E8E55CAEFE1FF007134CF5F16725FF45753C3737B1534DA7989F39EAAB0137AED9D5CA1CAD2CD0D42272CF98ABF123770B15D2DEDDEAAA299ACEA722653DC6ED72D2D1D25E733683538637C9497300EE54C283234DE800480000F2002C0000000000000000000000000000000022A003C83EA8000000000000000000000000000000000ED692BFCFA76F11D5C397C2E4DC9E1EA919D7E29CCE2810AE4C75C959A5BB4A71AC6D4B6CA49AF1A72557E9DBBB375EC6F28D55728D54EAE3C97AB910545251A33543AC6E9E92B61F2CB355652A299533CF9B93BFB53AFD66C6ACD2294B49F2C69F93CBAC7226F2398997C3DCEEE4EDE69D65A7AB4B0E49D3DBC1CBE7DA7D7E7F8FD51107969E88744000480000000000007574CD35D2E35925AACF9DEAE674736170891A2E55557A93B7D878D3F64AFBF5C19496D855EE55F3E45E0C8D3B5CBD44C6ED78B7E8DA096C9A6A549AE9279B5B7044CAB57ADADEACFB93D64C7AB47559FAF838E37B4FEDF8CB5F5A5C68EC9676E93B0C88E631735F50DE0B2BFADBF7F821040AAAAAAAAAAAABC5557AC1599DD974F8630D36EF3E73EB2000360000000000000000000000000000000000001DFB57A3E1F1F89B66A5ABD1F0F8FC4DB3D460F875F943E6AE3BF796A3F3DBEA000CAE48000000000000000000000000000064C1D0B25AAA6F35CDA5A36E5EBC5CE5E4D6F5AA916B45637964C78AF96D14A46F32D4A6A79AAA66454F1BA491CB846B533927564D9E4D32364BACDD0B57FE5B78BBDA48E286CFA26D8D7CBE754BBEB632F91DDC9D49EE20B7FD6572BB6FC71C8EA5A65E4C8D70ABEB5E669F899337C3E91EAEF7B269387D62757EF5FFB63FCA6EEA9D33A61158CE85274E0A8D4DF7F8F6156DCEA23A8B954555347D147249BEC6A751A88864CF8B07873BCCEF2E76B388CEA62295AC56B1DB67726D5D7B9A1489F5AF4444C65A9BAABE27267AEABA8E3354CAFF5BD4F8221932463A57B4356FA8CD93ED5A65E40305B661DE59000D8DE59472A72554F529B305C6B29F1D0D54ECC7E4BD4D403963CD6ADEF5EB59949A835ADE6937512A3A5627D591339F1E649EDBB4785ED6B6E74CAC775BE3E29EC2B23260BE9B1DFC9D0C1C5F57827A5F7F9F55BCB43A6754C2AEA6585B3AA6731F98F4F5B48A5FF0041D75035F2D0392AE24E3BA9C1FEC21B13DD1C8D9237398F6F16B9AB8545269A6F5DD651B9B0DD57CAA9F96FE3CF6F8F598BC2CB8BE1CEF1E92DEAEB347AEF77534E4B7F747F984338A2AA39151C9C1517A816D5FEC16ED554495D6C7C5E538CA48DE4FEE7779555653CD4750F82A58AC958B87357A94CD8734648F4973F5FC3F268E627BD67B4C3E20C193339EF2002C0000000000000000000000000000000022A003C83EA8000000000000000000000000000000000000614EDE96D4B70D3952AFA2911F0BD7E769E4E31C89DE9D4BDE9EF38A60989D95C98EB92B34BC6F12B0DF66D3FAD58B3E9C9E2B4DE1C9E7D04FC237AF5EEE3B7BBD88436F565B8D96758AE7492C0BD4F54CB1DDE8E4E0A73D1551C8E6AAA3938A2A2E153BD17A949759F5F5DE8A04A4B824375A0C6162AB6EF3B1D9BDF7A293BC4F769C62D460E98A79ABE93DFF49FE51045C99276AED077B4CCACABB04EEE2AADCBA3DEF7A7B907E2F5954DDFB26A2B6D73179239DB8BEEC93C933D978D7E3AF4C9135F9C7F9EC82026B26CC75335331D3D34A9DADA84FB707C9366BAA57FF431277AD4331F1239656F6FD37F7C7FDA1E09D45B34BAB1BBF5F5F6DA38FAD5F36F63DD8F7994B0E8CB53B376BF4B719539C144D4C2AF670CFC49E59F356788619E94DED3F846E83451BE591B1C4C7C923D70D63132AABEA26B6BD06B0D3F97EADAC65A681A9BC8C5722CCFEEC757BD7B8FACBAF696D71BE1D2566A7A16AA63A79911F22FFBEF5521973B8D6DDAA9D5171A996A265EB7AF044EC44E4883DD5667519FA7D88FFB9FE23F74AEFBACA265B56D1A4E97E4DB5E30F97FE6CDDB95E69EDCFA8861E51307A2932D8C382986BB523F99600043280025600000000000000000000000000000000000077ED5E8F87C7E26D9A96AF47C3E3F136CF5183E1D7E50F9AB8EFDE5A8FCF6FA80032B92000000000000000000000000120D1FA7D6FF005CF8DD32450C288E7AE32E5CF5211F3668AB6A68645928E77C322A63798B829939A6BB57BB369ED8E9922D9637AC792D6752E95D36DCCEDA7E99A9C77FE724FB4FA52EB4D3CC7E237244ABD69163E053F23DD2395D2395CF5E6E5EB3C9AFEC713F6A665D98E3D7C73FE8E3AD63E4B8AFBA7EDBAA99E554D53F3FBBBAD918EDE6A772A15EDDB49DDADB22A3E95F347D52429BCDC7D8722DF5F556F9D26A399F149DAD5E7EB26F6DDA44B1B11971A44957ADF1BB0ABE0A56299B0FD8EB0BDF51A0E213BE78E4BFAC7641DB4B52E7A3129E6572AE1137172AA496C3A1EE3707A3AADAB494DF595DF497BB04A1DB43B5747BC94753BFF93BAD4FB4E05E75FD6D5C6B1D04494AD5E1BD9DE77FA133933DFA56BB295D2F0DD3CF3DF273FE1094250696D36C449920595BD722EFBD54F2BAA34B54B7724647BBFF00541C0A9E59649A474933DD23DDCDCE5CA9E10B7B26FD6D699944F1C9A74C38EB15F92D8ABD2DA7AFD0F4B6D7C513978EFC18C78B79107BC690BB5B65545A774F0F54B12653C53A8E35256D4D04C92D1CCE8654FACD526F69DA44F1C691DCA95B32E31BF1AE157C0AC53362EB5EB09F1B41ADF8D5F0EDEB1D9075A4A8E93A3E825DFE5BA8C5CE491D8744DCEE32B5D551BA929FADCFE0E5EE44257F8C4B5247BCB4751BFF0093BADFBCE15DF6895752C732DD036991786FAAEF3B1F613E267BF4AD76234BC3B04F3E4C9CFF008424EDB6697D371A36A920E9719574D87397BF1F71E3F0AF4BCB1A325466EFFD54FC3E054D34D2CF2BA49A4748F771573972AABEB3C389F64DFADED33289E3B349E5C38EB15F92DAAAD37A72FECDFB6BE38A444FA54EA889E2DE441EF3A3EED6D7F9B02D4C5D524499F6A751C2A3AAA8A2A86CD4933A291BD6D5C139B5ED1AA216232E14AD9D7ADEC5C2AF811C997175ACF341ED1A1D6FC68F0EDEB1D908F23A8E9773A1951DD8AC5424363D1772B948D5A889D4B065155F2271C762212C4DA1DA5D1E5D4751BFF92AC6FDE71AEBB45AAA8639B6DA76D3B57948E76F2FB303C4CF7E95AEC9AE9387609E7BE5E6FC2212DA082CBA3E95D1AD5246E7E15EAF7E55EA9D78EAF035AA35669AA97AB6A3122F2557C394F815255544B5333A5A891D24AEE2E73972AAA7C488D1C77B4F55B271FB563C3C38E22BE92B764D3DA6B5042AB6E74314C9C51D02A22A7ADA56FA92D12D92E4B4B339AFCB51ED73792A2AAA7D8685354CD4B2A4B4F23A395BC9CD5C2A18A99E5A999D2CEF74923B9B9CB95532E2C56C73F6B7868EB35B83538E27C3E5BFAC767CC00677300000000000000000000000000000000115001E49F5480000000000000000000000000000000000000C003200212185C271C267A97AD0C804ED3DDF48AB2AE36EEC75752C4EC6CCE44F89F575C2B9CDC2D755AA75A2CCE545F79AB83284EEAF875F41EAB22E65739EBDAE72AFC42222270320895A221E4C80000000001200090000000000000000000000000000000000001DFB57A3E1F1F89B66A5ABD1F0F8FC4DB3D460F875F943E6AE3BF796A3F3DBEA000CAE4800000000000000000000000064DDB6DAAB6E7D279053BE758F1BC8DEACE7EE3E75F41536FA8582B617432A26775DD8579E37E5DFAAF38B2453C49AFBBEBE4D5001650000197183AF1E9DBBCB4EDA88E825753B9BBED9131C5BCF2724AC5EB6ED2C97C3929B73D6637650C9843AD6DD3B77B8D3A4F4B412BA25FA2E5C3729DA99C649B5E2B1BCC98F0E4CB3CB8EB33F27254C60E85DACD70B56EADC69A4811CB86AAAA2A2F8A2A9CF4E02B3168DE117A5B1CF2DE36914C19530595650F4793AD53A76EF4D4CEA89A865642D4DE572E38276F322D78AF795A98AF9379A5667672000140C9800003AD169CBBCB4EDA88E825753B9BBED9131C5BDA56D78AF7964A62C9937E4ACCEDE8E51930096260004A40000000000000000000000000000000115001E49F54800000000000000000000000000000185036AD9433DCEE34D454AD474F3BD23622F6A9743F4DE8FD196D864BE3595133FCD49266AC8E7AF5EEB392271F81586CF2B22A0D676AA8A876EC4D955AAABD5BCD56A7BDC5A5B5CD2B72D40943536A6A4EB4E8E6BA2DF46AAEF2A2E533C3ABB7B0C958DA3770B8966B7B4530DEDCB49EF30F355A4B4AEAEB33EAB4F24704A996B65851588D7A753D9C3B53AB257BA0B4749A86FF53495AAE869E8B854A27D2DECAA6E278A2F1EE2D0D9369BAFD3F67AB6DD11239EA25DEE851E8EDC6A261155538657BB3C3079D13554B0EB3D59429B8C9DD5093353ADC98E3EF5F796DB78DDA11ADC9863363C569B4476969D737679A7EBD2D7574B4A950DC6FF004913A5DDCA7D6771C29C0DA5E85A2A2B5FCB5624DDA76E166898BBCD56AAE11EDF154CA72C2E7860D6D61B3DBF55EA8AC9E8216D4D3554CE95B2ACAD4DD472E551D95CF0CE3867860B1AF141F27ECD2AEDF23925753DB1D1B97A955B1F34F14276E9B4A273469FC2C98B24DA67BC6FBABED9A684A4B8DBD2F17CF3A9D573143BDBA8A89CDCE5ECCA7B892DB23D9FDFEB1D6CA2A3A474D85C6EC4E8D5E9D6AD77055FF7D477FE467D468186D146F48DF251C70EFBB8E115111CABE1922745B30B22E528AF957E5B1F37C5333CD5EBE08994F69131B76567575CF6BDF2E49ACEFD36ED1F8CABEDA069A4D337C5A68A47C94B2B7A485EEC671C9517BD17E2871EC3047537DB6C33377A392A63639BD4A8AE445453775969FACD397875256B925DE4DF8E744E12A2AF3F5E79A1A9A6FF00B4B68FDB22FE7429E6F498ED33A5DF9B9BA775A3B55D2D67B46974A9B7514704EB3359BCD55CE1517B54E26CEB67A97BA76DCAF0E923A157622898BBAE971C15557A933E2BDDD735DB5FF6359FB4C7F071D8D46AFD3FA02A9287E69D4F4BD146A9F55708D47782AE4B4C46EF398F5D9ABA6AD2B6F7AD698DFF000E8E43AD7B3FA49FE4E99B6D64EDF3375F2F9CD5EC572AF05F1227B44D9DC16BB7C973B12BFC9E2F3A5A772EF2B5BF94D5E784EBC9583955CAAAAB955E7DE48A4D6D7E75A62B6A572B69591742A88C4DE73718C2AAA67970226636DA61D5A6835382F5BE3CBBFAEEB0B65FA52CB78D27155DC68239A7591EDDE555CE11787594FD6B1ADAC99AD4C35AF7227AB25F9B18E3A162FF001A4F89425C13FA7D47F88EFE6522D1D224E1D92F7D5668B4EFB4FF002B37641A6ED37BB657CB73A38EA1F1CC8C6ABB3C1319211AE28E0A1D5972A4A48922822930C6A2F044C21676C13D0F74FDA13F950AE3693C35CDDFFC6FB106DEEC234B92F3AFC94999DA23F84700055DC00000000000000000000000000000000000077ED5E8F87C7E26D9A96AF47C3E3F136CF4F83E1D7E50F9AB8EFDE5A8FCF6FA80032B920000037AC75CB6DBCD1D52265237A2B93B5ABC17DCA5A5B47A08EAB4ABEA226377A07B256AB53AB92FB973E060C99BC3BC5663BBA7A4E1FED583265ADBAD7C94F82D1D95D0363B4D555CCD45E9A4DDCBB8E5AD4EFEF55399B58A0486BE8AAA34444918B1AE3A95AB94FE62B1A989C9E1B2DB845EBA38D56FFA2020BAAC71C162D150C93469F334FD33D1C9C55CA9BCA9ED5C113D9F69E8AF12D45DAE8DE998B22A318E4F35EEEB72A75A71E5CB9911AA8DAD331D2192DC12F16C78EB6DED68DFE5081A31EE6AB9AD556B7E92A2706A76A9E50B86E1AD2CF6AAF7D0F412BBA25DC7AC4C4DC62F5A734E5D7833A9B4ED05FED0EADA16312A959D2C534698E93AF75DDB9E5C7914F6B98DB9ABB44B2DB8145A2D1832C5AD5EF0A74F4D6B9D9DD6AAE1155709C910B4F64B1B24B0D52BDAD77F497734CFD461BD2DE2C3A6EB27A573F153348E9665646AE54572E7CE5EECFB09B6AE62D34AD779571F04ACE1A66C9962B13EBFFEB81B1F5F9EBAFEAC7F171C8DA8AFFC56FF00F099F6926D9DD67CA3A82FD54888D64AAC73513879B9763DC7CF50E9B9EFFAD5EEC2C7451C6C49264EDE786F7FC33EDC3178AE79B5FA746F5B4D6CDC3298B0F5F7BFCCAB005C7A8EF16DD2F6E6D252C50BAA91BF350639762BBAF9F8AFBC8169CB14DAB6AABA69AB12196356AB9563DEDEDECF7A631836A9A8E6AF3DA36872753C2FC2C95C18EDCD927CBD3F5464162FE2CA4FD28CFDC7FF00D1CDD43A1DF66B44F5EB5E93245BBE6245BAAB972273CF793ED38A6768952FC1F598EB37B53A475EF0B0ACBFD8AA3FD85BFC88413416A3B5DA2D33C37255E95D3ABD311EF70DD6A7D84EACABFF000551FEC2DFE4423BB298209AC555D2451BB76A5C89BCD45C26EB4E7D6622B6DFD5EA7356F6CD8231CC44F2CF7EBE8835DE782EDAA24922CAD3544CD44CA6155382722DED4B5EB62D3D355D2C2C73A246B58C5E0D4CAA2272EAEE21F4178A3B2EB5BBC53C123FCA266471F46D4546AF7E553B509CDFAE505A6D72D65546F9216632D6222AAE571C9553B49CF69B4D6BB7462E198AB4C79EFCF116999DFA76DB7531A8F50D55FE581F56D8DBD1355A8D622E32ABC578AAF77B0E4265CE46B532ABC93AD549356AC3ABB5840DA06BE2867C22AAA615A8D4E2BC17B13813DB957DA345D143143499924CEEB1A89BCFC632E72A9B7E3785B52B5EBE8E25787DB596BE7CB97DD8FF00DBD7F4538F4731CAD7B55AE4EA54C28452DFB2DFADBABE3968AAE85AD95ADDE58A4C3DAA9CB28BDBCBB17895CEB1B2FC897C969D8AAB03DA9244ABCF757ABC1514C98B51CF6E4B46D2C1ADE19E0628CF8AFCF49F3ECE3977EADFEC857FF81F6147A17FD7B29E5B3CADAE544A5E8F32E796EA2657260D6CED6A4BA3FF008F579F1E7AFAC7F2A011AE56B9C8D556B79AA27043C97258356D9EBAB9B6EA589F4EBF463DE62358EF5617811DDA85860A564572A385B12B9FB93358984555E28EC7B7DA5E9AA99BF25ABB353370788C13A8C3922D11DD5E9F4E8A4E8FA458DE8CFCADD5C7B7916168BABD376AB52544D5113AE1BBBF22BD8AAE6AE3E8B729F0EB3A769D72CB95C9B4B0DAA7742AE46F48C5DE56E579B91138278936D45A26796BD20C3C270DEB59C99A226DDA2237FF00B54C5EB65FEC551FEC2DFE44227B4DB0524148CB95344D8A457A32646261AE45CE171DB9E1E24AECD84D1547CFFF0002DFE4435B519632D2B6875B8568ADA2CF9715A77F75461E991BDF9E8D8E7639EEA6495E824B1433CD517B9A2599AA8D8A2918AAD4EBDE5CA633D9D9825157AFA8E3AEF24B6D03EAD8C76EAB99C33FAA888B936AD9AD13B56BBECE2E9F8762C98E32E5CB11BF977955460B9B54D9A9AF9627D5793AC356D87A68D55BB923571F45DF035B65D1B1DA71CAE6B557A777154CF5214F6C8E49B6DD9B3FD06D1A88C336E931BC4EDFE151E1CBC1A995EA4EB55EC430B945547261C9CD3B0B62A2FDA7B4DDDAA69DB03DF52F955F3CAC622AA2B955DCFB133D474F5A5AE96EFA72A6658DAB2471ACB148DE7844CE33D8B823DAE62637AF4947F43ADA979C79626D5EF0A50F4D6B9D9DD6AAE132B84E484E3675A660B8A495F708FA48A37EEC71AFD1739138AAF6E3284AEEFABACF64ABF2148A47BE3C239208D1519DDCD3DC5EFAADADC948DE58B4FC222D8633E7C91489ECA73031DE5B1A9A8EC17DB3A55A54D2D34F237A48A773918AE5EA4777110D05A763BD5CA5756377A929B0AE445FA6EEA4F5732D5D4C4D66D31B6CC59B84E4A67AE1C768B7376945DB1BDF948DAAF544CE113A8F05BB7BD5D6DD3B55F27D2D1748F89137DAC446B19D78E5CF1DC6C4715A35B595D3A41BAFE2C47AB51248DDEBECE463F6B98DA6D5E8DBFE874BDAD8F1E589BC796DFE54D983ED594EFA4AC9E9A54C490BD58EF5A29F1373BF5702D59ACED20002A000000008A800F24FAA400000000000000000000000000000001B36DA292E15F4F4703A36CB33D236AC8EDD6E5782657D782CBB97E1DE90B440E4AC4ABA654566236F4AB172C6555B9F6E53815631CE639AE6395AF6AA2A39382A2A75A16659F6B55D4B44C82E56F8EB646A63A56CBD12B93BFCD5E25AB31E72E6EBF166BCD671D22F11DE27FF00B4D765EDBABAD75B75D4324AB5154E4DCE993755236A705DDC26EA655DD5DFD656D414373D59ACEE971B055454F347374AD91F22B17755551B8C22AAF04E29DE7AD59B49B95F28DD474B0328291FC246B5EAF73DBF92AEE1C3C08AD86F35B60B9C75D6E911B33515AA8E4CB5ED5EA54ECE05F9A22366AE9B459AB1932CC445ADD223CA13CBE5E75F5BEBBE4674D34B2B9C8D64F153B7E7117B177797BD09AEAC992C1B319E9AAE6E92A56952955D9CABE47261CBED5555F122ADDB34BD1A23EC91BA4FCA4A9544F66EFDA41B576ACB8EA99D8EAE56B208D731C11F06B7BFBD7BFD98226D11DA5829C3F3E7BD2B931C5223ACEDB755D50CD35F3661BD6C72AD5CD43B8D46AF1DF46E1CDCF6E5150ABB66D65BCB359D13D292AA9A381EAB3BA462B111B85CA2E7B7960D2D19ADAE1A5F7E281AD9E8E476F3A07AAA222F5AB57A95496546D8AA16354A5B3C5148BC9CFA857A7B11A9F12DCF129F63D569A3262C548B56DE6DADB4C1F29DD74FDB69918EAF9164C22BB1C155A888BEBC2FB08737485DB4FDE6CB51728A3646FAE8636E1E8B95DECF57A8E5B351D63F53C37BAD72D454C72A49BB9DD4C27D54EC4243A9B6892DF56DAAEB7320F23AA654A625DEDFDDCF9BCB8732B368DF796CE3D3EAB4F4AE0A444D769DE7E69F6DB3868C8FF698FE0A75AD7241AC342358E7E3CAA99617AA7D493185E1DCA992A8D69B419753DA1281F6E653A248D937D25DEE5DD84385A5F54DD34DCCE75BA66F46F545921913798FF0FB899B44CB4E9C2B34E9A2BDAF13BC3E957A2F50D35C92896D55524AAB847C6C5746BDFBFCB1EB542C5BA682B1DAF447945DA356575341BD24D048A8AE7AF1DD4EA5E2B84CA761A71ED8E548D3A4B2C6E913ADB51BA9ECDD5217ABB595CF53AB1957D1C548C76F369E34F373DAB9E6A47BB0D9E4D7EA2D4AE48E488EF313DD676C42BA39B4C4F468E6F4D4F33955B9E3BAEE28BEDDE4F02BCD5BA26F3417CAB482DF53534B2C8E7C32411ABD15157288B8E4BD5C71C8E0586F55D62AF6D5DB65E8E544DD722A65AF6F62A7616353ED8E7489A953668A495138B9950AD45F056AFC47344C6D28B69F55A5D45B2E9E39A2C956C974FD5E9FD3F3FCA2C58AA2A65593A35545DC6A222222F7F055F1294D5F5CDB9EA7B9D646A8B14B3B958A8B9CB51708BE2888A493546D2AEB79A57D2D346CA0A67A61FD1BB79EE4EB4DE5E48BDC840C8B5A3688867E1DA4CB4CB7D467FB56F2640055D900000000000000000000000000000000000077ED5E8F87C7E26D9A96AF47C3E3F136CF4F83E1D7E50F9A78EFDE5A8FCF6FA80032B920000171E8DA88EF9A35B4B33B7B76375349DB8C613FF8AA14E128D0FA9A3D3B254A54C52CB0CDBB848F0AA8E4CF6E3ABE06B6AB1CDE9EEF7875F836AEBA6CFB649F76D1B4A6775CE9DD9C369D331D43A148F08B8547BD7CEC75F5B94D8BC52FE13699B6CC89973A486454C752AA35DEE55F610BD6FAAE2D410D2C54B14B1471B9CE7A4889C57184C617D7ED37B496B6A6B3D962A2AC82A247C6AEC3A344C61573D6A9DAA6AF8178A45F6EBBBB71C4F4D7CF6C336FF4B96223E70EDED52E294D638A89AEC3AA9F877EAB70BF1DD36B6613324D2D1C6C5CAC723DAEF5E73F0542B9D637D4BF5D52A236BD903188C635D8CA76F2FF007C8F3A5F5154E9FAB7490B52585FC2485CB8476392E7A94C9ECD6F07963BF76A7F57C71C4A734CFB9B72FE8F86A7A6969350DC239D8AD72CCF7A653E922B95517D8A5C3A4A1928B4B5147548B1BDB0EF391C98DDEBC2F6703851ED06CD335AFA8A6A86C8DE288B1A3B1EA5C91FD55AE9F74A27D15BA17D3C12262491EA9BCE45E6984E09ED52B6AE4CD1159AEDB33E0C9A3E1F6C99E9979B9BB424DB2D9124B3D7C8D4546BEADEE4CA617E8B4AD75348B36A2B9BDDCFCA246F823951090E8AD594BA7EDD3D35553CF23E49964CC7BB8445444C715EE22972A86D5DCAB2A58D735B34CF9511DCD115CAB8532E1C76AE6B4CB9FAFD5E3CBA2C54A4F58EF09E6C753FA4DCFF00563F8B898DDB51D05AAE1494750F5E96A1C89C3EA22F255EECE3FDA159688D474DA79F58EA98A593A746A37A3C70C6739CAF79A5ABEF10DEEF4EACA7648C62C6D6EEBD133C33D9EB31DF4F39334EFD9B9A6E2F4D270FA56931CF13DBF54D3699A716A62F95A8D999634F9F44E6E6FE57AD3E1EA2B6A5ACA9A4DEF25A89A1DEFA5D1C8ADCE396704FAC1B40829ED51535CA9EA67958DDC57B11151C9D59CAA71209767D24B5F2C96F6C8CA67AEF35922222B73D5C15781974F17AC78778ECD0E2D7C196D5D569EDD67BC79C4BEDF2BDCB8FF58D6FF10FFBCF94D70ADA889D1545655491BB196BE6739171DCAA6A21E9BD66CF2D63C9C9F1B24F49B4AF1B327FC1547FB0B7F910E36C8D3FA8AB3F6A77F2B0E5506BBA1A7B0C16F75354AC91D3242AE4DDC2AA371DA73F43EACA3B0DB27A6AA86A1F23E65951636A2A222B5A9D6A9D873270DF96D1B79BD95788E9BC7C36E78DA2B313FB34B50FF6F65FDB19F61606D23FB1F55FAD1FF3A1575D2E50D5EA675C636C9D03A76CB8544DEC263298CF3E04A3566B5A0BC58E6A1A7A7AA64AF562A2BDADC70722F538CD7C5799A74ECE7E9F5986B8F5516B6DCDBEDF8F77336673321D55123F199237B5BEBE7F61616AEBD45656C12D4DBBCAA27AAA6FF0C317861173DBF614B413494F5114D0B959246EDE6B939A2963DB76894D25224577A47ABF1873A344735DDF85F871275386D378C911BA384710C74D3DB4F7BF2DB7DE276DE1B169D62CADA87A5B2C2F9256B72EE895A9C3D7822DAFEE53DCAB699F536FA8A27C6D73712A7D2E29CB87124EFD7B65A389CDB75148AF54CEEB6346267BD7FD14AFEFD77A9BD5C1F5556E4E3C18C4E4C6F6211831CF3F372ED0713D5D674DE178BCF33E91110E7A17B6A2824A9D3159140D57C8EA75DD6A75F9BC8A250B366DA3D1B6955B4D4D3F4CD44DDDF44C78F12FABC76BCD66B1BECC3C0F53830D32D735B6DE3F942F47D2CF57A9681B4E8ECB256C8F544CE1AD5455CF67678962ED4E546699E8DDF4A499A89EB4CAFD86BC3B40B4246B23E9A78A77226F31AC4CAAFAF3F120FAC752CBA86A63548FA2A58F8C6C55F39557EB2E3BB063E5C9972D6D35DB66CF8BA6D0E8B262C7939E6E9EDB34F5A74F587CBABE9A3A89A38D1F2BDEDDFE3D8D45E073E8F5B54DCEB62A1B2DB1B1ABDC88AE72E775BD6E5444E18F5A9F2B06BFA46DB23A5BB4122CAD62315CD6A39AF4C63976F69F2B9EBCA58617C760A148A477395EC46A7B13ED31C62C9369E6AEF3FB36FDB34D4C549C1922958EF111D6521DA871D2927F8ACF89D0B3FF0062A8FF00616FF22108D55ACE82F763928E3A6A9648F56B91CE46EEF05CF6E78F2E47DEDFAEE820B053DBDF4954B2C74C90AB911B8CA371DA57C1BF8711B79B2CF12D2FB55EFCF1B4D76FD5EB679A628AAEDE973AF8D27DF72A471BF8B511170AAA9D6B9F81F6ACD75494150EA4B2DAD1DBAEE8F7B1BA8AA9D8D44CAFB8E368BD60DB2D3BE8EBA37C94EAE57B1ECC658ABCD30BCD3ACEDD5EBBB3C2F74D436F592ADC8B87BA36B3DABCCC96C7926F3CF5E68FD9AB8353A6A69A9E0E48A4C77E9BCA5B13EAE4D3CE7DC11ADAA7D3ABA46B5308D5545E18EEE470F653C74BAE787CF3FEC39147B42A75B6F4374A7A87543D1C8F744898C2E708995EC5434B486B0A3B0DA568EA29EA647F48E7658D4C71F131F81922968DBCDB7FD534939B1DF9FA444FF8EE8AEA37B9DA86E7BCB9C554889FE654FB0B9D7FB1ABFB17FF00A147DD2A1B5773ACA9635CD6CD33E44477344572AF1F693FFC3CA04B22512D3D4EF793F45BD86E33BB8CF3363518ED7AD368ECE570AD6E1C3933DAF6DB9BB7EEEDECC26649A5D91B172E8E57A3BD6AB9F82A15A6ABA59E975157B6A5AE6B9F339ED554FA4D5555454F053EFA5B51D4E9FAA73E26A4B4EFFA712AE33D985EA5276CDA159A68DAB5305431E8B9DD7468B8F795E5BE1C93688DF764F1B4DC43494C3932725A88851E86BBD5504554C4818D91BBC8C7B951E89DE9824FB257B194972A6739AE959322AAB573BC8A98E1DD96AFB4E76A6D7E957472525AA17C69222B1F2BD51151392E113E2442C178AAB257B6A69153B1EC5E4F6F62FDE5FC3CB931CC5A1869A8D1683554B6199988EF2B2752EA9A7B2DD24A6AAB42CAB8CB64554C3D31D59416DD592D450F4F6ED3B52B4EAABC6356F15F51F06EBFB2D5C2D4B951488FC6775CC491117BBFDA1AF72DA1D2C54AE82D14922BB186BA4446B1BD8B84CE78FA8D78C56988AF27EEEB5B5F8E26D97DA2397CA2223741B51543EAAF95751240FA7748EDEE8A44C39BC3AFE3E2734FB544AFA89E49A672BE591DBCF72F5A9F3C1D4AC6D110F179AFE25ED6F59790012C4000000008A800F24FAA4000000000000000000000000000000000005800054000580005800000005400120002150001200094800090000000000000000000000000000000077ED5E8F87C7E26D9A96AF47C3E3F136CF4F83E1D7E50F9A78EFDE5A8FCF6FA80032B920000F4614C9850960C9801564C80580C29930A40C000AA59064043C8009480000000000000003D00025E40010000B0000000000000000AA193201000003C80091E8005800007900048000000022A003C83EA900000000000000000000000000000000000160000000000016000000000004A0000400000000000090000000000000000000000000000000077ED5E8F87C7E26D9A96AF47C3E3F136CF4F83E1D7E50F9A78EFDE5A8FCF6FA80032B920000F400097900040002C00000002A0000000000000000000000003D000240001E4005800000000000000010000A800000000000B000000000000000008A800F20FAA400000000000000000000000000000000000580000000000058000000000012800000000000000000000000000000000000000000000000077ED5E8F87C7E26D9A96AF47C3E3F136CF4F83E1D7E50F9A78EFDE5A8FCF6FA80032B920000F40009000079001600000001540000000000000000000000003D000240001E40058000000000000000000055000000000000B000000000000000008A800F20FAA400000000000000000000000000000000000580000000000058000000000012800000000000000000000000000000000000000000000000077ED5E8F87C7E26D9A96AF47C3E3F136CF4F83E1D7E50F9A78EFDE5A8FCF6FA80032B920000F40009000079001600000001540000000000000000000000003D000240001E40058000000000000000000055000000000000B000000000000000008A800F20FAA400000000000000000000000000000000000580000000000058000000000012800000000000000000000000000000000000000000000000077ED5E8F87C7E26D9A96AF47C3E3F136CF4F83E1D7E50F9A78EFDE5A8FCF6FA80032B920000F40009000079001600000001540000000000000000000000003D000240001E40058000000000000000000055000000000000B000000000000000008A800F20FAA400000000000000000000000000000000000580000000000058000000000012800000000000000000000000000000000000000000000000077ED5E8F87C7E26D9A96AF47C3E3F136CF4F83E1D7E50F9A78EFDE5A8FCF6FA80032B920000F40009000079001600000001540000000000000000000000003D000240001E40058000000000000000000055000000000000B000000000000000008A800F20FAA400000000000000000000000000000000000580000000000058000000000012800000000000000000000000000000000000000000000000077ED5E8F87C7E26D9A96AF47C3E3F136CF4F83E1D7E50F9A78EFDE5A8FCF6FA80032B920000F40009000079001600000001540000000000000000000000003D000240001E40058000000000000000000055000000000000B000000000000000008A800F20FAA400000000000000000000000000000000000580000000000058000000000012800000000000000000000000000000000000000000000000077ED5E8F87C7E26D9A96AF47C3E3F136CF4F83E1D7E50F9A78EFDE5A8FCF6FA80032B920000F40009000079001600000001540000000000000000000000003D000240001E40058000000000000000000055000000000000B000000000000000008A800F20FAA400000000000000000000000000000000000580000000000058000000000012800000000000000000000000000000000000000000000000077ED5E8F87C7E26D9A96AF47C3E3F136CF4F83E1D7E50F9A78EFDE5A8FCF6FA80032B920000F40009000079001600000001540000000000000000000000003D000240001E40058000000000000000000055000000000000B00000000000000000FFFD9, '1', '2021-03-13 13:10:28', '1', '2021-03-13 13:10:28', b'0', 0); -INSERT INTO `inf_file` VALUES ('5e8609290e915c4fa8b08e67.jpg', 'jpg', 0xFFD8FFE10DFA4578696600004D4D002A000000080007011200030000000100010000011A00050000000100000062011B0005000000010000006A012800030000000100020000013100020000001F000000720132000200000014000000918769000400000001000000A8000000D4000AFC8000002710000AFC800000271041646F62652050686F746F73686F702032312E30202857696E646F77732900323032303A30343A30322031373A32343A3135000000000003A001000300000001FFFF0000A00200040000000100000320A003000400000001000001C20000000000000006010300030000000100060000011A00050000000100000122011B0005000000010000012A012800030000000100020000020100040000000100000132020200040000000100000CC00000000000000048000000010000004800000001FFD8FFED000C41646F62655F434D0002FFEE000E41646F626500648000000001FFDB0084000C08080809080C09090C110B0A0B11150F0C0C0F1518131315131318110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C010D0B0B0D0E0D100E0E10140E0E0E14140E0E0E0E14110C0C0C0C0C11110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFC0001108005A00A003012200021101031101FFDD0004000AFFC4013F0000010501010101010100000000000000030001020405060708090A0B0100010501010101010100000000000000010002030405060708090A0B1000010401030204020507060805030C33010002110304211231054151611322718132061491A1B14223241552C16233347282D14307259253F0E1F163733516A2B283264493546445C2A3743617D255E265F2B384C3D375E3F3462794A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F637475767778797A7B7C7D7E7F711000202010204040304050607070605350100021103213112044151617122130532819114A1B14223C152D1F0332462E1728292435315637334F1250616A2B283072635C2D2449354A317644555367465E2F2B384C3D375E3F34694A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F62737475767778797A7B7C7FFDA000C03010002110311003F00F544924925293A64E929F18FADE19FF3ABAA48DC4DEDE49FF454ACD369FB3380796ED036EA74F26A9FD78C97B3EB8F55606C8F581FFC0A958D6E43DC037807B28C86505BB87D62EE9F91F68AEC7BEE6B5CC6BDC6480F11A4A1FA7D77AB07DD8F8F93934564FAAF631CEADB03D477AD77F315ED67BFF48F540820C1D7CD751F55053FB1FAB6EA8E4BFD3DA69AF09B90F26CBB0598CCFB45EFF45EFBED67E830BD1B1FFA1B327DFE95753D002D0644079DB3A5755AB26AC4B316DAF26FD68ADE20D83FE05C7F4767F61FF4FF0047FCE223BA3758AADF4DF876B2D01C4B4B44B431AFB2DF536BBF44E6574DCEDB6FBFF4562EC7AD136756E977D8DFB3D565B6DA2CC3763D4E190FC7AB1ECC4C6C8B1EFA6DB30EDC5F4F333A8F52CFB55946162D5F6BA2947EAB4B68CAEA05D6E43AFC6C4B9B6E28A7631BA6536BEA18F5E55F6751CFC1DFD532EAF53D4F4E8C965D93956E374FFB2E3D6FA0B6DE4BA6617D6B654DCBE9D8B9FE9583755763D76ED70F169AFD962EC3A17D64EA76D96616774CCAB32714B5B9365143DEF66EFA1F6BC6637757B9BEF66CFA7FE8D65F45774BA0FD5DC3774F77AEEEA15E583F68792CF55D87898D9AF69C766E6E6BB1ECCAA719DFF69ABAECF53D3CA62E7F17071B3FA8E3518782E155F6D6D6E2073AF7866E69CAFD27A75D9FCDB6EB5FECFD13130C227AAF8CE4351B3E96329ADCE6B032C60225A2EA6DAC3B69F7B7F4F535AF757BBF495AF37EB34578DD5F3E8ADBE9D75E4581958101AD277358D6FEEED77B56C3BA8DF4F5CC91439ADAF1AFC8A716AAC06D2CA197595B71E8A2ADB4D753FD365967A6DF52EB3F4F6BEDB150FACEFF00B47557E735A5ACCA6B09932058C6B6BB5AD77F65088119505D3265004F47296AFD52FF00C55748FF00C34DFF00A97AC995ADF54BFF00155D23FF000D37FEA5EA4627DE13274C8AD524924929FFD0F544924925293A64E929F09FAEEC9FAE1D59DFF0CD1FF8152B01DCF9ADEFAF0E23EB87578ED734C7FD6A9584E1EE07B4C7CD3482B82C0CB869F246A6B0F3B5C246920F1F728B29703C401C9F056B1D90F1A73AFC934AE0750D9C3C5ADD680D6001C35811C15D0E374AC79935336EEDE06D1F4A3E971F4952E958FEF693C49D7E2B7EB969E254323AB6B18EAD46F49C7F730D4DDAFF0073840824FD29597D6FA5D54EE2D1B77341606E9A8F6ED11FC95D334FB493A203B1ABBF21B65A37067D169E1464906ED9B844855393D1FA1399563DD60DAF68690D8D23F74FEEFB5687D60E8746474DB2DA5B16D23D481DE072B535EDC4A85969D0763A1F81D101908365470C786A9F2EDC473F72D5FAA07FECAFA47FE1A67E47ACFCBA855977560406BDC00F20568FD516FF00D95F473FF7699FF52F5781D9CC23523B3EF6993A6450A49249253FFFD1F544924925293A64E929F05FAF263EBA756F036B47FE05542C62241EFBB50B63EBE83FF3C7AAB876B87FE7AA56383EE1E1FEBEE40AE4AE2E207808251702C7D9696BB9747E2546BA9CF7348D7C63556FA7623EBCA24F0D2224729922297C626DE9B0A88EC0761F2F6AD4656EDBA842C0A9A183C5690600DD79EEA06E44506ABC32B682F78682A01F48FA37327CCA3BA9A277D906741BB80AA64D9D348F4CBEA6DA4C0687B43893DB6EE4C902BC16C8C80E86348772496F1082FCEC4F53F4B686469E253E3E2399510C044F8F654EDCBE97D3AD1F6C7B2BBEC05CDDE1C4C03B67DAD7353575E9ABC8F5EA5B5758CAD9AD56BCDB518896BFDDFF00548FF545B1F5ABA47FE1A67FD4BD5BFADF6D195660E650439B657657BDA080763B737E906FD1F5551FAA766EFADDD1C0ED94CFC8E57212B01CDC91A9C878BEF8993A65231A92492494FF00FFD2F544924925293A64E929F07FAF4377D6EEADFF001EDFFCF54ACEE8F875E7754A31ED1348DCFB478B180D85BFDA5A5F5E04FD6DEAE3FE1C7FE7AA5677D5BCAAF1FAC62BEC23D379752F9FF84696367FB4992D8D2F85710BEEF656F4FC73B5B93815D41803BD7C56ECF4C1FA2DBC7E77F2DC8195D2D941DF4925BCEBE20AD5B711F71BADCCB36E331D3B0BA1A770F6EF8F759FB9B10290CB2921ED2DD7DAC773B7F35D0AB027BB7A518F64BD39C7609E56A31C0F3ACAC9A5BE9FB55EA9F1051486593D2B032B5C8C7AEE3DB7B7700818DF57FA7E3DA2DAF1A8AC8320B2B00C8F376E5A55BC10028DD76D6B9BE4A39DD32C00ECCBD4AC360113DD0ACC7ADC009DBBF50476542C3D4FD3230D958B5D1165B25AD13EF3B1BF49C9E9ABABB2E0E7BD9E8B87BE352E70FE49FA09A9156D6FAE5D2DD6FD5E7E4077AAFC1B1B7B4F70C77E86F1FE6B98FF00FADAE33EA79FFB2EE91FF8699F91CBD22EB59753762BC82CBEB7D4E1C887B4B3FEFCBCD7EA583FF3ABA313CFDA980FDCE56701B15D9A5CDC6A57FBCFD04A2A4A2AC351749249253FFFD3F544924925293A64E929F06FAF13FF003BFABFFC70FF00CF74AC0C5A9F6BEC63352C63AC81FF000637BB5FEAAE8BEB9D2FBFEB97576B4682E6973DDA35A3D3AB955FA1E1D15F556398F3634D193EA480266B737D8D4384D13D14271E211BF53B9D07EB6E364D2DC7EA4F155EC01A2D78FD1D9FBAE738FF00376AE86C6B1CCF546C1A4EF90411CFD29DABCE31F01ECC9BF19F040D58EEC44E85AB5717A65C5A186D2299135C983FC90D55E7117A3771E43C3A8D5E9F7B79699F056B1DEC70826216457B9839D111993E9EB29ACA24EDFA80409F821DF6082663B954075105B13D92AAD16BE5CE803523C5327AE8BC11BB62EEA36D5596D741B081A1710D6FDFAB952C6EABD6ACBC0BE8AABA5C61D1634B88EDB55CB286E437520055D9D3E8C571BDD74EC05D06001085689120CF2F26BC5C5BF2DE76BA8ADCE209FCE03D8CFF003F6AE2FEA5B09FAD5D1FCB25B27E4E5B3D55CECF2EA812DA9C7D4DAE05A5DFE8DFEF8DCCFCF46FAA5D2998FD7B02C277385E3F2394D8FD3E64B5739E33A6D10FB028A928AB2D35D2492494FF00FFD4F544924925293A64E929F1DFACEDFF00B24EB193635CDC4A725AD73F69D9EA3AAA6373FF003ACFE42CBC7E8D93D7F2ECCBC1B5B895E3868B6F735CC68304CB760DDF41BFA47ADEFF0018DFF8A0C4FA3FCE5DFCC7F52BFE77FEEF7FEEB7A6B56AFF00C478FE6FFA3B3E87D1FA2CFE95FCBFFB91FC8F553A5C7C236A598FDBE296F77ABCF3306FFB0FA79370BEBACFACCC86506BB1A5C1BFA11BEE6EF764B5F47E83D1DFBEEA7F3DEA66814BFD116B4E4080EC7782CB8388935FB3D6ABD467F5DEB62EFE9479FE7EFF00E6B8E723FE4EFF00CD97FA1FF805CBFE60FA1F487F3BFCDFD21FCEFF0027FD2AAD2E2BE8DE87B75BCFFABC207ED7571DCEC88143D8E71240638ED7123E9358EFE6EC43C86E5D409B68786FEF012DFF0039B2B773BF9ABBFE4BFE6AAFE6BF9CE7FC07F23FEE27F2D407F363E9FD11F4BE97F6FF00EFC992ABD131E2AD5E6DB90D2ED343DC23D7925BA83007753EABF4FF00C17CBE925D17FE50C4FA1FCF33F9CFA3CFFAEC4CD1935AD1D0651955E39C9CEB3EC58AD05CE7B9A5D66D1F9C31D9EFDBBBD9FA445E82FC6EA37BC574DB752DDAD7E45CE643647AAE2719BBBE9D6DD8CFD25B6FFA5F4D56FADDFD1B2BF9FF00E98DFA7C7D13FCFF00FC0FFDC7FF0087F595CFA93FF22BB8FA777D1E7E8D7FCE7FDF7FE0D3870AD971D6BB3A9D4F0CE660D95B768B1CC2F617090D73C86D6E688FE73D3DFE9FFC26C5CEF4CCAA717EBBD5D2DAC706D394C635D21DA966F732CDA7F95F4D7517FF003C3FA5FD3ABF98FE6F86FD2FE4FF00DFD55BBFF141D2BFA1FF0049FF000BFD33E8DBF4BFF44A78DC5B19D8D767B851524CAC3554924924A7FFD9FFED160050686F746F73686F7020332E30003842494D0425000000000010000000000000000000000000000000003842494D043A0000000000D7000000100000000100000000000B7072696E744F7574707574000000050000000050737453626F6F6C0100000000496E7465656E756D00000000496E746500000000496D67200000000F7072696E745369787465656E426974626F6F6C000000000B7072696E7465724E616D65544558540000000100000000000F7072696E7450726F6F6653657475704F626A6300000005682168378BBE7F6E00000000000A70726F6F6653657475700000000100000000426C746E656E756D0000000C6275696C74696E50726F6F660000000970726F6F66434D594B003842494D043B00000000022D00000010000000010000000000127072696E744F75747075744F7074696F6E7300000017000000004370746E626F6F6C0000000000436C6272626F6F6C00000000005267734D626F6F6C000000000043726E43626F6F6C0000000000436E7443626F6F6C00000000004C626C73626F6F6C00000000004E677476626F6F6C0000000000456D6C44626F6F6C0000000000496E7472626F6F6C000000000042636B674F626A630000000100000000000052474243000000030000000052642020646F7562406FE000000000000000000047726E20646F7562406FE0000000000000000000426C2020646F7562406FE000000000000000000042726454556E744623526C74000000000000000000000000426C6420556E744623526C7400000000000000000000000052736C74556E74462350786C40520000000000000000000A766563746F7244617461626F6F6C010000000050675073656E756D00000000506750730000000050675043000000004C656674556E744623526C74000000000000000000000000546F7020556E744623526C7400000000000000000000000053636C20556E74462350726340590000000000000000001063726F705768656E5072696E74696E67626F6F6C000000000E63726F7052656374426F74746F6D6C6F6E67000000000000000C63726F70526563744C6566746C6F6E67000000000000000D63726F705265637452696768746C6F6E67000000000000000B63726F7052656374546F706C6F6E6700000000003842494D03ED000000000010004800000001000200480000000100023842494D042600000000000E000000000000000000003F8000003842494D040D0000000000040000005A3842494D04190000000000040000001E3842494D03F3000000000009000000000000000001003842494D271000000000000A000100000000000000023842494D03F5000000000048002F66660001006C66660006000000000001002F6666000100A1999A0006000000000001003200000001005A00000006000000000001003500000001002D000000060000000000013842494D03F80000000000700000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800003842494D040000000000000200093842494D040200000000001400000000000000000000000000000000000000003842494D043000000000000A010101010101010101013842494D042D00000000000600010000000A3842494D0408000000000010000000010000024000000240000000003842494D041E000000000004000000003842494D041A00000000033F000000060000000000000000000001C20000032000000005672A68079898002D0034000000010000000000000000000000000000000000000001000000000000000000000320000001C200000000000000000000000000000000010000000000000000000000000000000000000010000000010000000000006E756C6C0000000200000006626F756E64734F626A6300000001000000000000526374310000000400000000546F70206C6F6E6700000000000000004C6566746C6F6E67000000000000000042746F6D6C6F6E67000001C200000000526768746C6F6E670000032000000006736C69636573566C4C73000000014F626A6300000001000000000005736C6963650000001200000007736C69636549446C6F6E67000000000000000767726F757049446C6F6E6700000000000000066F726967696E656E756D0000000C45536C6963654F726967696E0000000D6175746F47656E6572617465640000000054797065656E756D0000000A45536C6963655479706500000000496D672000000006626F756E64734F626A6300000001000000000000526374310000000400000000546F70206C6F6E6700000000000000004C6566746C6F6E67000000000000000042746F6D6C6F6E67000001C200000000526768746C6F6E67000003200000000375726C54455854000000010000000000006E756C6C54455854000000010000000000004D7367655445585400000001000000000006616C74546167544558540000000100000000000E63656C6C54657874497348544D4C626F6F6C010000000863656C6C546578745445585400000001000000000009686F727A416C69676E656E756D0000000F45536C696365486F727A416C69676E0000000764656661756C740000000976657274416C69676E656E756D0000000F45536C69636556657274416C69676E0000000764656661756C740000000B6267436F6C6F7254797065656E756D0000001145536C6963654247436F6C6F7254797065000000004E6F6E6500000009746F704F75747365746C6F6E67000000000000000A6C6566744F75747365746C6F6E67000000000000000C626F74746F6D4F75747365746C6F6E67000000000000000B72696768744F75747365746C6F6E6700000000003842494D042800000000000C000000023FF00000000000003842494D041100000000000101003842494D04140000000000040000000A3842494D040C000000000CDC00000001000000A00000005A000001E00000A8C000000CC000180001FFD8FFED000C41646F62655F434D0002FFEE000E41646F626500648000000001FFDB0084000C08080809080C09090C110B0A0B11150F0C0C0F1518131315131318110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C010D0B0B0D0E0D100E0E10140E0E0E14140E0E0E0E14110C0C0C0C0C11110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFC0001108005A00A003012200021101031101FFDD0004000AFFC4013F0000010501010101010100000000000000030001020405060708090A0B0100010501010101010100000000000000010002030405060708090A0B1000010401030204020507060805030C33010002110304211231054151611322718132061491A1B14223241552C16233347282D14307259253F0E1F163733516A2B283264493546445C2A3743617D255E265F2B384C3D375E3F3462794A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F637475767778797A7B7C7D7E7F711000202010204040304050607070605350100021103213112044151617122130532819114A1B14223C152D1F0332462E1728292435315637334F1250616A2B283072635C2D2449354A317644555367465E2F2B384C3D375E3F34694A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F62737475767778797A7B7C7FFDA000C03010002110311003F00F544924925293A64E929F18FADE19FF3ABAA48DC4DEDE49FF454ACD369FB3380796ED036EA74F26A9FD78C97B3EB8F55606C8F581FFC0A958D6E43DC037807B28C86505BB87D62EE9F91F68AEC7BEE6B5CC6BDC6480F11A4A1FA7D77AB07DD8F8F93934564FAAF631CEADB03D477AD77F315ED67BFF48F540820C1D7CD751F55053FB1FAB6EA8E4BFD3DA69AF09B90F26CBB0598CCFB45EFF45EFBED67E830BD1B1FFA1B327DFE95753D002D0644079DB3A5755AB26AC4B316DAF26FD68ADE20D83FE05C7F4767F61FF4FF0047FCE223BA3758AADF4DF876B2D01C4B4B44B431AFB2DF536BBF44E6574DCEDB6FBFF4562EC7AD136756E977D8DFB3D565B6DA2CC3763D4E190FC7AB1ECC4C6C8B1EFA6DB30EDC5F4F333A8F52CFB55946162D5F6BA2947EAB4B68CAEA05D6E43AFC6C4B9B6E28A7631BA6536BEA18F5E55F6751CFC1DFD532EAF53D4F4E8C965D93956E374FFB2E3D6FA0B6DE4BA6617D6B654DCBE9D8B9FE9583755763D76ED70F169AFD962EC3A17D64EA76D96616774CCAB32714B5B9365143DEF66EFA1F6BC6637757B9BEF66CFA7FE8D65F45774BA0FD5DC3774F77AEEEA15E583F68792CF55D87898D9AF69C766E6E6BB1ECCAA719DFF69ABAECF53D3CA62E7F17071B3FA8E3518782E155F6D6D6E2073AF7866E69CAFD27A75D9FCDB6EB5FECFD13130C227AAF8CE4351B3E96329ADCE6B032C60225A2EA6DAC3B69F7B7F4F535AF757BBF495AF37EB34578DD5F3E8ADBE9D75E4581958101AD277358D6FEEED77B56C3BA8DF4F5CC91439ADAF1AFC8A716AAC06D2CA197595B71E8A2ADB4D753FD365967A6DF52EB3F4F6BEDB150FACEFF00B47557E735A5ACCA6B09932058C6B6BB5AD77F65088119505D3265004F47296AFD52FF00C55748FF00C34DFF00A97AC995ADF54BFF00155D23FF000D37FEA5EA4627DE13274C8AD524924929FFD0F544924925293A64E929F09FAEEC9FAE1D59DFF0CD1FF8152B01DCF9ADEFAF0E23EB87578ED734C7FD6A9584E1EE07B4C7CD3482B82C0CB869F246A6B0F3B5C246920F1F728B29703C401C9F056B1D90F1A73AFC934AE0750D9C3C5ADD680D6001C35811C15D0E374AC79935336EEDE06D1F4A3E971F4952E958FEF693C49D7E2B7EB969E254323AB6B18EAD46F49C7F730D4DDAFF0073840824FD29597D6FA5D54EE2D1B77341606E9A8F6ED11FC95D334FB493A203B1ABBF21B65A37067D169E1464906ED9B844855393D1FA1399563DD60DAF68690D8D23F74FEEFB5687D60E8746474DB2DA5B16D23D481DE072B535EDC4A85969D0763A1F81D101908365470C786A9F2EDC473F72D5FAA07FECAFA47FE1A67E47ACFCBA855977560406BDC00F20568FD516FF00D95F473FF7699FF52F5781D9CC23523B3EF6993A6450A49249253FFFD1F544924925293A64E929F05FAF263EBA756F036B47FE05542C62241EFBB50B63EBE83FF3C7AAB876B87FE7AA56383EE1E1FEBEE40AE4AE2E207808251702C7D9696BB9747E2546BA9CF7348D7C63556FA7623EBCA24F0D2224729922297C626DE9B0A88EC0761F2F6AD4656EDBA842C0A9A183C5690600DD79EEA06E44506ABC32B682F78682A01F48FA37327CCA3BA9A277D906741BB80AA64D9D348F4CBEA6DA4C0687B43893DB6EE4C902BC16C8C80E86348772496F1082FCEC4F53F4B686469E253E3E2399510C044F8F654EDCBE97D3AD1F6C7B2BBEC05CDDE1C4C03B67DAD7353575E9ABC8F5EA5B5758CAD9AD56BCDB518896BFDDFF00548FF545B1F5ABA47FE1A67FD4BD5BFADF6D195660E650439B657657BDA080763B737E906FD1F5551FAA766EFADDD1C0ED94CFC8E57212B01CDC91A9C878BEF8993A65231A92492494FF00FFD2F544924925293A64E929F07FAF4377D6EEADFF001EDFFCF54ACEE8F875E7754A31ED1348DCFB478B180D85BFDA5A5F5E04FD6DEAE3FE1C7FE7AA5677D5BCAAF1FAC62BEC23D379752F9FF84696367FB4992D8D2F85710BEEF656F4FC73B5B93815D41803BD7C56ECF4C1FA2DBC7E77F2DC8195D2D941DF4925BCEBE20AD5B711F71BADCCB36E331D3B0BA1A770F6EF8F759FB9B10290CB2921ED2DD7DAC773B7F35D0AB027BB7A518F64BD39C7609E56A31C0F3ACAC9A5BE9FB55EA9F1051486593D2B032B5C8C7AEE3DB7B7700818DF57FA7E3DA2DAF1A8AC8320B2B00C8F376E5A55BC10028DD76D6B9BE4A39DD32C00ECCBD4AC360113DD0ACC7ADC009DBBF50476542C3D4FD3230D958B5D1165B25AD13EF3B1BF49C9E9ABABB2E0E7BD9E8B87BE352E70FE49FA09A9156D6FAE5D2DD6FD5E7E4077AAFC1B1B7B4F70C77E86F1FE6B98FF00FADAE33EA79FFB2EE91FF8699F91CBD22EB59753762BC82CBEB7D4E1C887B4B3FEFCBCD7EA583FF3ABA313CFDA980FDCE56701B15D9A5CDC6A57FBCFD04A2A4A2AC351749249253FFFD3F544924925293A64E929F06FAF13FF003BFABFFC70FF00CF74AC0C5A9F6BEC63352C63AC81FF000637BB5FEAAE8BEB9D2FBFEB97576B4682E6973DDA35A3D3AB955FA1E1D15F556398F3634D193EA480266B737D8D4384D13D14271E211BF53B9D07EB6E364D2DC7EA4F155EC01A2D78FD1D9FBAE738FF00376AE86C6B1CCF546C1A4EF90411CFD29DABCE31F01ECC9BF19F040D58EEC44E85AB5717A65C5A186D2299135C983FC90D55E7117A3771E43C3A8D5E9F7B79699F056B1DEC70826216457B9839D111993E9EB29ACA24EDFA80409F821DF6082663B954075105B13D92AAD16BE5CE803523C5327AE8BC11BB62EEA36D5596D741B081A1710D6FDFAB952C6EABD6ACBC0BE8AABA5C61D1634B88EDB55CB286E437520055D9D3E8C571BDD74EC05D06001085689120CF2F26BC5C5BF2DE76BA8ADCE209FCE03D8CFF003F6AE2FEA5B09FAD5D1FCB25B27E4E5B3D55CECF2EA812DA9C7D4DAE05A5DFE8DFEF8DCCFCF46FAA5D2998FD7B02C277385E3F2394D8FD3E64B5739E33A6D10FB028A928AB2D35D2492494FF00FFD4F544924925293A64E929F1DFACEDFF00B24EB193635CDC4A725AD73F69D9EA3AAA6373FF003ACFE42CBC7E8D93D7F2ECCBC1B5B895E3868B6F735CC68304CB760DDF41BFA47ADEFF0018DFF8A0C4FA3FCE5DFCC7F52BFE77FEEF7FEEB7A6B56AFF00C478FE6FFA3B3E87D1FA2CFE95FCBFFB91FC8F553A5C7C236A598FDBE296F77ABCF3306FFB0FA79370BEBACFACCC86506BB1A5C1BFA11BEE6EF764B5F47E83D1DFBEEA7F3DEA66814BFD116B4E4080EC7782CB8388935FB3D6ABD467F5DEB62EFE9479FE7EFF00E6B8E723FE4EFF00CD97FA1FF805CBFE60FA1F487F3BFCDFD21FCEFF0027FD2AAD2E2BE8DE87B75BCFFABC207ED7571DCEC88143D8E71240638ED7123E9358EFE6EC43C86E5D409B68786FEF012DFF0039B2B773BF9ABBFE4BFE6AAFE6BF9CE7FC07F23FEE27F2D407F363E9FD11F4BE97F6FF00EFC992ABD131E2AD5E6DB90D2ED343DC23D7925BA83007753EABF4FF00C17CBE925D17FE50C4FA1FCF33F9CFA3CFFAEC4CD1935AD1D0651955E39C9CEB3EC58AD05CE7B9A5D66D1F9C31D9EFDBBBD9FA445E82FC6EA37BC574DB752DDAD7E45CE643647AAE2719BBBE9D6DD8CFD25B6FFA5F4D56FADDFD1B2BF9FF00E98DFA7C7D13FCFF00FC0FFDC7FF0087F595CFA93FF22BB8FA777D1E7E8D7FCE7FDF7FE0D3870AD971D6BB3A9D4F0CE660D95B768B1CC2F617090D73C86D6E688FE73D3DFE9FFC26C5CEF4CCAA717EBBD5D2DAC706D394C635D21DA966F732CDA7F95F4D7517FF003C3FA5FD3ABF98FE6F86FD2FE4FF00DFD55BBFF141D2BFA1FF0049FF000BFD33E8DBF4BFF44A78DC5B19D8D767B851524CAC3554924924A7FFD93842494D042100000000005700000001010000000F00410064006F00620065002000500068006F0074006F00730068006F00700000001400410064006F00620065002000500068006F0074006F00730068006F00700020003200300032003000000001003842494D04060000000000070006000000010100FFE10DD2687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F003C3F787061636B657420626567696E3D22EFBBBF222069643D2257354D304D7043656869487A7265537A4E54637A6B633964223F3E203C783A786D706D65746120786D6C6E733A783D2261646F62653A6E733A6D6574612F2220783A786D70746B3D2241646F626520584D5020436F726520352E362D633134382037392E3136343033362C20323031392F30382F31332D30313A30363A35372020202020202020223E203C7264663A52444620786D6C6E733A7264663D22687474703A2F2F7777772E77332E6F72672F313939392F30322F32322D7264662D73796E7461782D6E7323223E203C7264663A4465736372697074696F6E207264663A61626F75743D222220786D6C6E733A786D703D22687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F2220786D6C6E733A786D704D4D3D22687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F6D6D2F2220786D6C6E733A73744576743D22687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F73547970652F5265736F757263654576656E74232220786D6C6E733A64633D22687474703A2F2F7075726C2E6F72672F64632F656C656D656E74732F312E312F2220786D6C6E733A70686F746F73686F703D22687474703A2F2F6E732E61646F62652E636F6D2F70686F746F73686F702F312E302F2220786D703A43726561746F72546F6F6C3D2241646F62652050686F746F73686F702032312E30202857696E646F7773292220786D703A437265617465446174653D22323032302D30342D30325431373A32343A31352B30383A30302220786D703A4D65746164617461446174653D22323032302D30342D30325431373A32343A31352B30383A30302220786D703A4D6F64696679446174653D22323032302D30342D30325431373A32343A31352B30383A30302220786D704D4D3A496E7374616E636549443D22786D702E6969643A34656266653730652D643236652D623834312D613962612D3232623834663439646366312220786D704D4D3A446F63756D656E7449443D2261646F62653A646F6369643A70686F746F73686F703A64633333616566382D343164372D343134372D626566652D3133623366363839326632642220786D704D4D3A4F726967696E616C446F63756D656E7449443D22786D702E6469643A39633734393932312D633861652D393634382D613065372D613762366131393131336266222064633A666F726D61743D22696D6167652F6A706567222070686F746F73686F703A436F6C6F724D6F64653D2233223E203C786D704D4D3A486973746F72793E203C7264663A5365713E203C7264663A6C692073744576743A616374696F6E3D2263726561746564222073744576743A696E7374616E636549443D22786D702E6969643A39633734393932312D633861652D393634382D613065372D613762366131393131336266222073744576743A7768656E3D22323032302D30342D30325431373A32343A31352B30383A3030222073744576743A736F6674776172654167656E743D2241646F62652050686F746F73686F702032312E30202857696E646F777329222F3E203C7264663A6C692073744576743A616374696F6E3D227361766564222073744576743A696E7374616E636549443D22786D702E6969643A34656266653730652D643236652D623834312D613962612D323262383466343964636631222073744576743A7768656E3D22323032302D30342D30325431373A32343A31352B30383A3030222073744576743A736F6674776172654167656E743D2241646F62652050686F746F73686F702032312E30202857696E646F777329222073744576743A6368616E6765643D222F222F3E203C2F7264663A5365713E203C2F786D704D4D3A486973746F72793E203C2F7264663A4465736372697074696F6E3E203C2F7264663A5244463E203C2F783A786D706D6574613E2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203C3F787061636B657420656E643D2277223F3EFFEE000E41646F626500644000000001FFDB0084000202020202020202020203020202030403020203040504040404040506050505050505060607070807070609090A0A09090C0C0C0C0C0C0C0C0C0C0C0C0C0C0C01030303050405090606090D0A090A0D0F0E0E0E0E0F0F0C0C0C0C0C0F0F0C0C0C0C0C0C0F0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFC000110801C2032003011100021101031101FFDD00040064FFC401A20000000701010101010000000000000000040503020601000708090A0B0100020203010101010100000000000000010002030405060708090A0B1000020103030204020607030402060273010203110400052112314151061361227181143291A10715B14223C152D1E1331662F0247282F12543345392A2B26373C235442793A3B33617546474C3D2E2082683090A181984944546A4B456D355281AF2E3F3C4D4E4F465758595A5B5C5D5E5F566768696A6B6C6D6E6F637475767778797A7B7C7D7E7F738485868788898A8B8C8D8E8F82939495969798999A9B9C9D9E9F92A3A4A5A6A7A8A9AAABACADAEAFA110002020102030505040506040803036D0100021103042112314105511361220671819132A1B1F014C1D1E1234215526272F1332434438216925325A263B2C20773D235E2448317549308090A18192636451A2764745537F2A3B3C32829D3E3F38494A4B4C4D4E4F465758595A5B5C5D5E5F5465666768696A6B6C6D6E6F6475767778797A7B7C7D7E7F738485868788898A8B8C8D8E8F839495969798999A9B9C9D9E9F92A3A4A5A6A7A8A9AAABACADAEAFAFFDA000C03010002110311003F00FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8E35D5BCC737C2D3C9BFBFF666A389DAABAAEB92D09964A9F7C78D5CFA56B736CD2C94EF538F1AA82F96F534916762EE10D78F8E112B54DEDED35BD3EEA09B45B992D25620CA14D3265239BD8EDBCD5E6BB286DA2B8BE79A375FDFA924D4D3205B0232DB5BD4EF199998E5459C58F6A9ABEA16F71CB9114EF9125B120B8F3A5CDA026573418AA583F34D616346AB5298A09A424FF98F2DD0F80D2BE18691C4925DEBD7DAB05B61522434CAF2C51C6FBA7FE7122F60D17CBBA84175B333D4D7E6329E172714DF5E6AFE7ED22CE1043865814FAAB5F118F0B9A26F8C7F30BF306DEE7549AE2C8889391A95FA71E1499BC4758F3D5037A77ACDEA0AB47CBAE4E30713366E12F35D43F302DA14901531CE7ECCA7C72C11718E7796EAFE6ED57516663AA12A0515431E99608B8F2D430D9A677E524F3FAA4F5A9AE5822D0750978B98B8D140D8E4C63B63F9843BDC13F64532431B1F1AD0C5DB916EE72D8E362656ACB7457BE4BC3606368A13F2553F7E5321BB5F0EEDD0B6F916C0141ADD0558F5385BE2690CC5536E98B682985A4527312ABF1A6F5C9F44527A6F5255114979C48EC4E424136EE70A2D2593E54CA2516432D265A76A6F6B5FAACACBE041E995F0B319DE9DE5BFCCBF37E8C54E9FE619A075E8A1C8FE18699F88FA4FC9FF00F395FE6ED08C0BACAB6A71A302D2BFC5B0F98C890D8323EA6F247FCE5769BE63B8449ECD62F50F5D875AE564360C8FA2EC3CC5A46B32DADF898514F2F4EBD72B21BF14F74FF4D7626F1F53F8A192BF5207B785320439FC4115A4693711DBDF5F5F12CE8C0D913D857B640865CD910BAFAE46A41FEE46F95909115A6CE4BB46B98FAC20D7214C643662170CF7323C858AFA27E2FA314452DD56DE2D4F4C9F94A6B1827AF862DF163FA65C8FD1C2C11EADCA80D716F09EC33DE42A6D1472A2824F861069AB502C331D3BCB3E55F3C412795FCE9A746D05DC6CB0CEEBBD4A9A6FF3399784BA4D445F8C9FF3931F9253FE507E61EA96B145E9F97B57919B426A6C402C4D3AF866C605D3E41BBE5BAFA5230FC32DB583B90724F865D8B930CC5BCB5A16375C55AC5578E98AB78AA8BFDA38AAA2F7C55A3D7156B155EADD315560D8ABFADEFF009C6EFF00D677FC84FF00CD73E56FFBA45AE5A39349E6F68C28762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD0FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF917B754FE45FBB34FC2ED532A855A803C71E1551370C0E3C2AADF5A26361ED863155D0DC52840DFC72C2A39A6893B3D0124F8D7205B423E172F227A6C401D86D9516714AB5F0D52FD80A139193607916A21A49641526A722125825DE9F335C1F4C75ED96C434929D699A6C96C434DD0F639708B519B2F86D62F8446DC7EB1F0971B52990CB0D9871BE87FCB0F341D3236D0D5B8C6E3E2981A1FBF28E17231CD35F3479E9A06B8D356666080FC7CAA4D6BDF0F0B9919BE7FD5BCC7246F2B3BB10C4EC4E3C2994DE7979AD87666AFDAE9921171331B2C0F56D4F996EFF003CB045C5931D8EF2A483F765822E3C93012875EBB1C988B4108794A034D865910C68BA38D5CFDACB0048895EF171AE4C36479A0A470A7A6580362A4738A2F877CC49C775A4724E0D32149016B354935AD71A4A1DD6BD77C7853689173C4000D282981B835EBA75A0AF8D30316FEB00F53CBE780C5810510B7617A1A7CB21C2C68DA6FA7EA011872EBE39021BC16463520EBC791A11BF8640867128FB5D46EECDD26B2B9642A6A021A6408660BEA2FCB2FCFDD73CBED676DA8D64D3C301752BEE42FCCE56437639517E927903F33746F37E9D6F35B5CC6CC69C5188FE272B21CE195EF305FA4D63FBD6531AAF4047864086E8E4B486CAF94DD3C40F0427627A64086D8CD96A5DDCDA59B81C5A07EAC065720CA52B09035922C373792515250683B641116276C6D6D61BBE6F53302029E9BE2DF179F4113DAEA124A8F54249515DB16F0CA34926E2FE49AEE5291C6018F7A54F860465161EA22FDB4CB9B1BE11ABC42946201CC9C45D46A60F8AFF00E73E6C935ED07CAFE6151B69FEA733E1CB966C6127479A3BBF21B5802DEF21BB07F772A9A2F6CB896A8B7129F492423FBC15197E12C7338F7CBDA14FB8C555475C55CDD7156B156A98AB78AA8B1353BE2AB6A7C7155E3156EA7C7157F5CBFF0038D9FF00ACEBF907FF009AE3CABFF748B5CB472693CDED5850EC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFFD1FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF91688D3E8CD770BB55732D29BED5C3C2AA125C2826831E155317408208D8E02155E1B85AF4C8951CD358A7AEC0640B684DB436F56492BD16B9596615B5884496D2F7DF6CAE41B2245BC82F22E370C08A6F82213221279612262C82A46E7E599100E3CCAE5B8127C2F41C732621C6949524D42354F4A234917A1AE47306A2535D3BCDEBA4425797FA536DCC1FEDCC76FC4509A9F9B4384B899EB24952C6B5FE38D39824C1F50F30477E480698D24CAD8EDC5C8D85474E95C9C766360A4574C1CF635E9EF930D6404B3D13EA5541F0229BD72C01A26023D4B200A41E5D969BFDD9688B498A9C8A643CC30A7422BD32241B4C601C9CD0D0D4622D78559E6DA85BE9CB031A4148391EBD7EFC95A3758ABD0572A31B6611B1823A838384A95415A9D8EDDA98F09415600537EFDB070962DFD589EDEE477CA8B782D7D5877207CCE16629B36E3C4570F267C214BD23C80EE4F4C2427802690DB9461BF5CA484009D470F214276A6FE232B21980A5CBD19290CC580EB4DE83DF2B660332D27535212DEE8FFA3C9B487DB20591D9EA7E53F3E7983CB371CF47BA75B588D42722361ED5CACD22322FADFF002DBFE729E486FECA3F324A5B4F43C6EB7AD6B403F6B2B2DF0917D9AFF997E53F30E976D75A2CF1C72CA0114615DFE9C8172A322F48F2E1BBD5F477844BCCF02EA6BE032B937028CD596783CBD6EAE486690291DF2A6C890F3BF35C434FB6B478C9AC8A0B530D37C4879A9BFB99670B1D41AED5EFF2C0DE0B228A4BA8602D3935603D3A78FD1912CE554CFF004DBBBDD461B5B6949F4D3BB6DFAF32313ABD48BE4F08FF009CBD8E0D47F29B5582DF79B4BF4C311B9F889E99B081D9D0E789B7E39EB9664FE87818D4B86E5F7E5A1C5029425A239806C20F8732B0726190DA1CF7CC86A531D462AAABD7157375C55AC55D8ABB15506FB47156B155E3A0C55BC55FD72FFCE367FEB3AFE417FE6B8F2AFF00DD22D72D1C9A4F37B56143B15762AEC55A6E98AACC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5572F7C55762AFF00FFD2FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF91745DBAE6B5DAA0270038DFBF4C557A007DF1B569937DBBE025217C042073DC654C931B4B9E50CA83AF638153ED2A660AE69F7614A367BA58ED6466DC57BE210497946B3748D33508EB930030322C65AED519B7A6D930C0A4B25EA976A1A6581AD2C9AE872FB4704D38D012DCEFD72B6D40CD37A94DCD07BE2CACA024DF7F0C56CA8140C8FF00BB32CBD8569F0F7CAB27369C922D18005B7B89916CE2B561340E5BAB2F4EB92C64B5D943DB5FDB89F5295B5385DAF559A094950D1CE7B04AEF99B8C2D95595FCC31E95FA5A2F2DEAB79369A4C971E6692CA54B64886DBBF1E1B7BE654698F1747A07953F25FF00357CD5E47B8FCC3F2CF921F5AF26DAC924BAB6B8AEDF686F20A01B713919D1482F2ED2EE9AFF0053F4EEAE9567B5774B4D35A8AB291B1591BF678F6AF5C85320537786D4C727D62D7D2746ACB0024AAB57E1A37BE16C1BA0A592333C1F5AB6956F6452D6B040A646283AFC2B8B2D91111FAC46DF5AD0357B7907FBCF3A594ADC97BBF4ED8D30F103505E5DC61A19341D524914F1B6B916725593FDF9C698D3094C2BC17577C9A69749D5DD17E004584A7930F1DB6C698198519259239ED629ECE48EE637F5EE6CEF94DAB7A0DF64D1E87010C6D165EFA492CFF437FCEC1AD7982636B06996E39B2843F0A8095272AE0B6424C9F59F2D79A3CADA9E9BA7F9E7C8D3686FAFA7FA33DD1786BC056A3985C85331262333C3A54F76F7BC648AB4B360D5AF80195D16C12513E60D2CD80917D45D661916331703F0A31DDBE818981642749BC3AE6906375955CC900F87512A429FE19594FE60222D35781D3EB68CAD1034926660015F9572B3129FCC840C7E65D1D24BEB4B581E196ED089EE402E021EE32070CAAD7F3211EFE61B4168AB6D299934E50F75301F184E8085EF90F02523417F34193E95ABBEB4AB7361A9FA4427EFD88A72403A53C6980E92498EA8047DBF9C7CB567070FAFC915C4CE561708580643F1127B54E0FCA49C886AA2CCF4DFCE48343113DBF98273C2842D0D36FA71FCA172A3AB8BE9FF00CBBFF9CDB4D1FD0B6D435C905A2AD18F0A9FF896425A434CA7AC14FAC348FF009CD2FC9CD42C53F4D798CACC46EA631D7FE0B043465C6FCE29EAFF00F393FF00939ABD91B3B0F33299266A44F22AA8527BD4B659F932D90D6EEC1B4AFF009C92FC948F548E1D6BCDBEB7D5488E20B10E0B20DAA581E9954B4843B0C5AC0FA4F4CF3168FABC116ADA4C424D0EE943D9DEF51231DCD3B653E018736EC9A8E21B326B4D5ED26FDD28E20EDB6D8D535DDBC63FE7231043F97F76F6EA5FD68D8B83BD681BAE646271B34453F1A350B93EBFD65BAC723023C3E239B1C54E8B53B294BF1309FB5C0E4332C38504337F1C2CD662AAABFC3155F8ABB15587AE2AD62AEE15DEB8ABB80F1C55DD36F0C55D8ABFAE5FF9C6CFFD675FC82FFCD71E55FF00BA45AE5A39349E6F6AC28762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFD3FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF90949CD3DF35AED52FB89CF2AF7C55B86E091D7E78AA21AE147461F7E02A39A924D50F534F0CA99A334E620B96D86F4AE054F2D6EFD2473D3C3154A750D59DAD254AF1F88648734179BDEDD33C8C49D8E4C302C72E27356DE9930C6492F362E77DB26D6A44FC66A69B7538CD38D42523B1FA72B6E435483D7156B155F63A7CDACEBBE57F2EC774BA6C5E65D66CF4A9755A8E708BA9021600F600D6B93C70123BB466354FD9DB4FF9F49FE51E9B35B5DF9C7FE725E596D2C19259EC276B48A07400311EA48EBB7C865808ADA838F7BBEA8D27FE704FFE70B7F2CBC93ADFE62EB5E4ED2FCFDA1F97AD1F53B8D68CE66458A1AB332885B893F4E5D007DEA4EFDC5F217E7E7FCFC07FE716353FC95F327E49FE4E7952E35AD3FCD1A73D92DB5DE9DF548AD1A421898DE956229B1CBE2A0D9B7BB7FCFBAED6DAEFFE7DEDABC11C097125CEA9E608E58A641C5CAD0F02C474D8EF91931E27CE5FF386BF901FF38ADFF3939F947F9A5E46D4AC20D13F3DE4D4AFA3D5B502693D8AA5C31B692CB911EA29FDBA74FA3229E2A7E6C7E75FE48FE62FE43F9FB55FCAFF003FD93DAC31B9934FF32509B7B8B752CD0949A9C492805403D7037465694FE5779EB49FCAEFCC9F267E62EBFA147E6CF2EE9F1490DDE9774291BF26A6F8B2E2EAFDABFC97FF009CC4FCA9FCF4F37697E48F21FF00CE3B5ADDCD7052DF51BD5B3AD9D9DB103D4066084034DC570B1E305EEDFF00393BF9B5F917FF0038B736896771F9223CD9E6AD663E3A258D869FF588BEAA48520BA275A9D862C38DF24AFF00CFC07F285102BFFCE28EA5A6B472F2BE54D1A4243F7A829818193E5CF2EEB1F945FF0039A1FF0039BFA5493F92469FE42D5B4CB5D2E7D04C660314D0D43332281435070B0326BF337F28BCA9F919FF003F16F267E5FF00E5ED82683A169F269B7D6F08FDE822E95988A3D41D80C89E4CE25EFF00FF003F7E5B6B6D7BF216FAED56EE1B8866F5D446B172F848FD803B9CAEB9B3069F945A4FF8720F3D7902F7CCBA4407CA305FC0757B66735684CAA5B90FF572BE8DAFDCAB4F397FCFACEEF5A9560F2669B26AD218AD25536AE12579540001F528C7B5460970F716278AB9BE8CF3FF00E497FCE0E7E5E7E5C69FE7AF387E5468DA6F90EF8441677470419BEC02858124FCF23C239D7E3E4E29B7CC49E6EFF9F50CE925A2F93B4A8B4E1113C84120527C38FAB5AFD3938C224F543E93FC95FC95FF009C13FCF1F2BEA3E60FCB0FCA9D1F52D0EC646D3EEEE9E378D870A93D5DBC32D18815DDE0B79E65FF009F5A683AA6B3A4DE792B4AB0D6B4B9A7D36FE25B7763CE0AAB0E5EA53AFB75C9C71041BA7E10595CE9716ADE686D3E258B449B5DD4A4D123AD185A191BD15A7871A65BC23AB5926F67DC5FF3827AD7FCE27E9FA779F3FE865346B2D425D52E61FF000CC570865F4A341FBDA85652A49A1EB8384364645FA0ADE64FF9F54F0E2FE56D1154776B7907FCCEC7843689C97DBEBFFF003EAD240B6F2B684EC4D14185C024F6AFAD80C026539232EB55FF009F5B229F5BCA9A1AB20ABA7A7202A3DFF7DB618E30D5C459F7E5FF0090FF00E7DF7F9C370BA2790BF2B6D35DE5F66FADEDE6FAB236FD67595941DBBE1300CE32931BFF009CC4FF009C6AFF009C4DFC9FFF009C73FCD3D534FF0021E85E59F375CE85247E5495A765BA92F792F130866DD857B0CA66221CAC5399237D9E1DFF0038E06E1FF24BC8D6FA85CDC48EB67037D52742BC18C62AC09DCD7357A900BB9C123D5F4B695A658ED26C48DC819824539F1281FCC5F2E5A79A3C9FAA5A7107EAF03F15EE7E16E99386CD59793F083CE5A73699AFEB5A5BC6D088677081C52B466E999F8CBA3D4C5283B5B59A9054AA1A5733226C38110866FE39364B315545FE18AAFC55BC554CF5C55D8AB5CE9B53157733E18AB7B9DE9D715750F862AFEB97FE71B3FF0059D7F20FFF0035C7957FEE916B968E4D279BDAB0A1D8ABB15762AD374C55662AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AB97BE2ABB157FFFD4FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8EE4B96A57F0CD6BB54BEE6E4F2FD78AAE86E01502BB62AB1E41CC1F7C05211724A0FA7E1953247B5D0458CD771D302AC9756E0B4AE2AC5EFF0053332B28F1E9921CD058C5DDC9A1C98605209A72C684F7DB2618C96890713936B5093F7854786F8CD38DBF476F6CADB96AC542DF462ABFD318AAA691E55F3379E7CD9A1793FC99650DD799AF254BAD31DD8AC8AF1B7C3C69EF976201C4CE5F60F993FE70D3FE739BCCF6ED6FE636BAD4D0A7A0BA64974C55430141414FC72EA01A2CBF643F2F3F273CFDA2FF00CE0F79D3F27751D3560F3D6A7E56BAD3AD2D236678CCF22154058926A49DF7C9C764136FC52D1FFE701FFE72CB48B23A6C3E43D327E0C6E11A590B4CA587B532C0520D3F6A7FE70B3F25FF00307F2DBFE70CB52FCA9F37592691E78BBBFD6E6B3B02DD56EF8984D76EA01C892C0C9F94DF94FF00F389FF00F3995F93FF0099EDF98DE46F2ADA43ACF97B58B9B9BFF5A5741716D34DCA84568C0AD6981417AE7FCE7FAFFCE51FE6E79534AF35F9F3F2AB43D1FF002EBCAD1B32EA1612BCB7E1CA1F51AE118D5072AD074C590953F38FFE71DF41F23F993F327C9F61F9CBA9DDE9DF96FAE3B23DCB201688E1C22891CF40316CE27EE04FFF003953FF0038D3FF0038DF77A57E43FF00CE2AF97F45D77F31FCC37D67656F7518A6957724DF097B9BD427E3626800C58195B18FF9CAAFF9CCDFCF4FC80D7BCAFA67E687FCE3DF94F59BED56CC3691AFD83497715B5C16A2A4323861EA03B85271636FABFF002FFF0038507E40CFF9F1F9F7E46D13C8B05BDA9B9D3F4E4445935042AC10CEACBB48C69B0C5812FC5DFF009C15D5A2D67FE7381F58D3AD6DADAD7CCBAE5CEAD690D688B677723CB1C6941D830DB16264F56FF9CB6980FF009FA17962F26790A01A3C56CD08AFC512BA95FA2BBE25B81671FF003F8D92E6E35DFC86B458964B3FAB48F6A53790B537046408641F93B24769776F1C5A8D8BDC5E5005AA9AD32A21B8153B8D1ACADF59F24FD5E27B49CEB5640015A8FDE83B570034CB9BF793FE7E412ABFFCE01F962299A79644D5F458DA471425D6A77F6DF2C8C6A9818EE5F822DA1697A868B63A7E97A1869E3B413DF5D92F5F5075EF84367007EF97FCFA0C347FF38C9E7F8608E44B9FF10DDC61C0FDA11353EECB049AB806DF17E12F9AB47B1BAFCC0FCCEB8BA8DA7BDFF156A70A3396A02262C6BBF8938253D9B3806EB5E3B64FAAB416104933FC0DC4D7EC8CC7F14B1F0829A683A75C3FD616C230D727F7CA091B8F91C7C52918C27967E5AF2D4C04779A2A4DE22AFF00D71F14A784226DB4BF2FEA7AAD9F93BCA1F97771E62F34DF4C9FA3B4FB38E4964E75A091954D4283D4E4A323252007E937E427FCFA63CE7E6BD624F38FFCE42EA16DE50D126845CC1A268937AB24A08A94B9E6D5414EA2B970B69343DEFAFBF303FE72AFFE716BFE708FCA571F975F92DA2D9EB9E72107A561A1E8CA67B496FC01F15E4C0B1526A6B4C8CA7B338C093BF27E59F9CF5FFCCAFF009C81D6EDBF31FF003BB537D6EE21B8F5743FCBD8E42FA6D9467EC96E276A53BE60E6CF5C9D8E0C3B6E1F657E5BFE6369D731586871B246D63122D22A1B745A50468C07ECE61711939F5C2FA534DBE8E15925460EAE054D72328B7C24CC22D5AC61D12EA696CBEB7CA290B102BC7E13918AE4E4FC43FCFDBED3F5AF3EEAA2CE0F41D256DA94A6ED997093A7CE1E1FEA48CAB1C8FCFD01C57D8667623B3AF229D96A1D8ABB155CBDF15546ED8AAC1D3156F15770077AE2AEE03C7156B9D36A74DB157733E18ABFAE6FF9C6CDFF00E71D7F208F8FE5C7957FEE916B968E4D279BDAB0A1D8ABB15762AD374C55662AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AB97BE2ABB157FFFD5FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8D34BC51D4D0F8E6BA9DAA5D757887900C2A71A55B6D7229BB0AE34A897909F881D877C041506914D7085128E2A32AA2CB88285DDE7100A372E23B634578825125F3B6DE3DB0526D0734E0296AD08C9008291DD5D541EF920C0A4C65777FB27E7930C485FCC81BFD3930585174720E677DA9824530148B0F5141BE41B2D48B91D8FCF15B6BD4C56D917917CEFE6DFCBCF3E68FE74F25D8DA4FADE8686E21BDBD1FBA4E07970AF89F0CC8C3C9C5CFCDF7349FF3F5EFF9CA09EC6E2F7F40F96EDEE2C9C5CDC4A63A3948C50D169EDE39750B71DFAE1E46FF009C8DF3C7997FE70D7CC7F9F77D6D65079CF43D126F318B287FDE7668D4B05229D0853DB26021F945E58FF9FADFFCE5A79B35516DE55F22681E62D56E938AD859DA9967DABFB0057B78614BF5BFFE7113F3E7F303F3EFFE71A6FF00F34BCD7656107E6269DAB6B5A78B38978242DA7FD8475A7C2DB1A8C04354DF9BBF941FF3F0CFF9CA9FCDFF00CFA87F28345D1BCB916A1ABEA975A7BCB321458A3B4765E4CD4EDC70522934FF009CF1FCF6FF009CA8FCBB54FC9DF3CC3E4CD4B45FCDAB77FABC1A0167BE8560F85BD6561F0D6B51F2C5987E547903C85E7FFCE1F31E95F90DA75CE97A4DCC5234B6925EBFA51B3F2E410B7892705864FD16F257FCFA23F3F26D7B44BFF33F987CB7E4EB2D2CACD0DEF97A57FAFA5C210D14B5634E4AC01AD70A0BF577CE1E75FC81FCA3FCB5D0BCB7F9F7E7DD07F32353F23411CEF26B7325C6AD737D0F499537AB531624BF32FF00E7323CE1F9DBFF00392DF975379D3CA7E4D9FCB9FF0038CFE50893559ED75188C37B3C51FDA96341406234F84E1A60FCCAFC9CF2BF9BFCFDF9CDE47F2C7E5B79864F2479AFCE0F1D9F917558E43088E40A5C7AAC3703883D31E140897EB27E5E7FCFB5BFE727B4DFCF1F24FE6C7E63FE61689E709343BC49F53B89E691E765414DAB4AD6B5C69B86CC2FFE7EF9AD68DFE37FC9DF2EE8BA9A4BE67F2DDBDCBEAF6D237C36EB22928CDE0180DB2259805F3C7FCE28FF00CE04F9B3FE7277C8B379FED3CEF2E942398C3C1E42073EA05011EF913BF26775CDF5A68BFF003E80F35DB6ADA36B1ABFE62B5E3E957F6F77F57E65AA20903D055BA9A5300891D14CC17E927FCE507FCE31CDFF003909F913A5FE4E5B6A8FA49B39ECEFCDFF00EC97B4D954EFDF2C0C0CC9DDF9B23FE7CF5E6CB5D3445A7FE68CD0DDBB5651EA3052BDD766A644829F10BF463FE710FF00E717AF3FE717FF002A75DF235E6BF36A771A95F4DA9497719F84348A568373BEF954C90A245F9F1E67FF009F44F98B5AF37F9975FB0FCC06B6B3D7B50B8D4C42F211F1DCC86460C037515C4094BA289D17C03FF393DFF38B1AC7FCE29F9FBC85A4EA5AE9D56D3CC32395915890415F72727E1D06CF11E5115ADBC0BC0ACCAD3B3189E9B75DE990E109E22AF02A25CA98A4775EE7B60A0C6CBEB5FF009F6E24C3FE73B742F456393FE752D5CC824EC9C7E265F714DB2E8061225F657FCFCFFF003C3F35FC97E6DFCBAFC96F2179A27F2BE93E74D264D47CC3E6289FD3B9611CDE998B9D3BA8E9965048912FC9FF002E796B4CF2F6A1746D8A5FCB75704DF6B7A99ADCBC86A4C8A6BD77CAB200DF025ECD06A30454B7B39648D29FBFB81D251E0C7C335D962E7E29109E69570F65730DF69E56CA20DF15B45B4751D5BE6731E31A72B8ADF587E5979ECDFABDB5F5C28E2005E47AFE18261BE05F56793754B6B9B7BDD2DD11E3BD8D979B741B532B00B39BF217FE726FCA5FE19FCC1D4EE238EAB732332D3A1A96E999100EAF5043E588DA30F351BE22DF1A9EA0E67E2D83AD9157A1F0CB98BB7F0C3452D12075C08B5CA46FBE2AA8C46DBE2AB01DB156EA3C715773A6D4C16134EE67C31B5A6F883BD7AE3687701E3855FD72FF00CE367FEB3AFE417FE6B8F2AFFDD22D72D1C9A4F37B56143B15762AEC55A6E98AACC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5572F7C55762AFFFD6FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF87A96FEF941ACBF8E623B3B0963DF5F16DA5AE34B611515DDF541F571A5D9318B53BD42A1E4AA7ED2E0931927706A3CC0E9BE52D61166E7638B38A5E6EBE33D4E2D8103717049C52833FBC23155616C42F21DF15434B1D3B62A868D7E36F0F0C5894746A3DBE8C582BB461BE43155168462AC93F2FBF2CFCE1F9BDE7FD1FF2EBC9776965A8EAF19905C4E6900A1A7C7976271B31DDFA2BA47FCF9FFF003D7597F43CC9F997E58B4B688049A0B3123CA57AD18AEDF7E640F268B7EC4F907F217CA1F937FF0038F179F955E75D6E26F23C1A335AF9A359B87280447FBCAB9AD12872616DF1CEABFF003963FF00381FFF0038BD6BA743F96BE5BD23CF9A8D847C5755F29411C972838D2B3CEC2B5DC8241C905B5BFF003EB4FCC58FCF1F979F9AFA45BDB470DBEA3E63D675CB68140E5026A2EC544B4EFF00150E4BA2F0DB17FF009F7DFF00CE324FF963E63FCDAFCFEFCCDB44B09FF4B6ACDE5AB8B8F84DBC31CECCF23927F6C74DB010CB81F96DF9DDF9D7FF002BE3FE7253CE9F98D6F74D045A7CCD65A2E9970D50A9033C3CA01414E4054E56436C616CDFFE712FF28FF257F327CF9E6FF31FE72FE7149F963AB796353B69BCBCB6F75F56B8942307356F0AE459786FD51F38F93BFE71CFCE8D7B3AFF00CE71F98B48B4344BB5D3B5DE01005028483E032A32A3CDA4E2277A79DF977FE7DABFF388BF9C724FA9681F9DFE67FCC6BB8EA6F35A1A8ADDB0A750CEC07864F8C745E0A7D95F97BE4CFC8BFC81F25FFD0B3F99FF0036D7CCFA7F9B4496BA47977CC577EBDF4905C8A0B58A951C00FB2B931913C07B9F1A79AFFE7DDDFF003895F947E615F32F9A7F3CF59FCB2D465BD7B8F29DF0D405ACB64ECC4AADAB863C4A5683DB26269AA1C932B9FC9FFF009C6DD4E4B4D31BFE73E3CEE249C520787CC4435C9EA55985795326770C385F15FF00CE607FCE3DFF00CE35793FC93A9FE677927FE722AEFF0035BF320CB15BDBE9DABEA02FAEAE854A30AD6A780ED95C837C075A7C55E4DF31FE71792B429EDFCA5F991ADF923465E12CD616174D00776151B2E634B6673887D0DFF38F9E6FFF009C92F3EFE7CFE58F92FF00E576F99F50875F9E3D66F2CA5BF77A5BD9C80C9148A76A3807614C8F38DD72712517E82FFCFD9BF3BBCF5E43D53F2BFC95E46F376ABE50D47CC9A7CBA8CF75A64ED0168E297830629BF6F1CB9B7146F67E4949F9B1FF0039096D688A9F9E7E6F8AD66FDFCB72DA8CA013ECD5AFE382DCA9C283F6FBFE7D73E78F3479EFFE71CBCEFAC79EBCD5AC79AEFB4CF30DDC2BA85EDC34F27A0B192A159EA695A9EB8251704737E2FF009DFF003E7FE720AFBF30FF003022B5FCE7F34697A7DAEBF7D69A7410DF3A2450C729F4D68294016836C31A05CD8E332890C035DD5BCF3E67D574EF30FE64F9EEFF00CECFA07C7647509CCECBCF614AE4E73586911714D00BE54BA9663752A97D3E2AFEEC022A6A3E5989293951D3D2B5AB7A48ED5FDAFE3862584B1BEBEFF9F69C9EA7FCE75684C3FEA4ED647FC933991170F2C69EDFFF003F6FDFF3EFF26475FF0070139A7FD1C60916A897C11A8C06541DF8C9CA998F22E5C0A7769767EA8B08FD9ED9448B971679A34DCA08E393ECD77C85B75DB34B4D4A5D2EE2196CBA0209A64245CAC6FA93F2F7F32121B8B35B9702BC565AFBD3DB220B64F93C6BFE7316D6CB516B1D6AC183B3AD5A9F4E64C0BAAD445F9DD35A43EA99631F13EF2FCF2FE275A614A6E782D075CBE05690E243D3DF2EE882BC0E79596B937C78ED819479378B2762AEC55ACC79736D1C9BC4312578CB43592EEB920C097F5CDFF38D9FFACE9F905FF9AE3CABFF00748B5CB87260F6AC2AEC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFFD7FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF864BB048AACD51DB311CEB4BC2B147612EE01C56D17621DC0AC98ADA65E8307525EA2BB8C124129D5B45D38F4CA501306040229D716C8A58E28E49D862D88571C9F6DC629548E36A8DB154D235AAD08E9DB1541DC42687E1FA7154A1D5D0F43BE282A91C8E0F4C58F0A3519A9BEC3B62BC2B8891BA2938AF0B21F2279EFCFF00F94DE7DD13F323F2F2682DBCC7A3AFA3682ED3D5818B1AFC51F7CBB1CA9C4D40DDEF1F99FF00F39CFF00F3963F99305EDCF983CE163A19D22DDC48BE5D88D8BAB28AD1F89353F4E5DC40971E9FAFDF975AC7983CE1FF003EDFFCC2D67CC3ADCBADEAFAC793AF6692F6F5CCACAEC87A96F0C9476B5A7F387A7BE85A5F97E686F0C4B71A859A08A7863264776DF812A09AEFDF240AD3F707FE7D29F951F9A9E58D67F327CEFAF794AFFCB3F979E6FD06D2D74586F289F5A962209786B4A13D6A72D06C289D3D0FFE7EADF9D7E75FCBCFCB8F2D7E4FF95F4E9747D37F3126922D63CDB6EA5623146D510C6CA2AAC4FDADF7C494F1EEF91AF7FE70E3C83AA7FCE05F92BF3AEF2F5BC95F997E5B8A7B89B5A998AC37BEA48591645EA49A0A13EF9592D8323E2BFF009C7CFC90FCC1FF009C9CF3F6A1E5DF285F695A3F99A0478754D4EFA15781907C3CD50EF5A6F91B6632ECFD44F20FFCFAB7F26BF2AB40D53CD9FF003943F98B1EAF1E9122DD31D16E0D85B451A7C6C6757AB301DE83A60113F0419DBEF0F30F9D3F2CFF00297FE7157CDDF985FF0038E51E8F77A2E99A34D3E87AB584002CA507C25DB882FDF7A647C2A533B3BBF9ABD5FCC1E62BDBFD3BF38B52F3E1D5FF00332009E6CB79656692289588A59C486BC597C06110A62723F717F317CA1E4DFF009F8A7FCE1B683E61F29DEAA79DFC9B6E93C371250BAEACB12ADCC53746E24D763921162676F3AFF9C76FF9C4AFCACFF9C2AF256A3F9DDFF392BAF68DAC6BB25AC8348D2EEE1F56DE1050845489C37C66B4AE4B8D1C4FC98F3C683E4FF3F7E6A7987CE9A0F95AFF00CB7F97BAD5E493E91A34D227AD21690B17B72BF654D4103C32B3367E3523BCC3368DE5ED38437CCF631C29EAC4D72DCC48631544A0AD49A532A3BA7C6B7EAA7FCFAF3F21AF74CB6F31FF00CE577E62D9AE9F1EAD6D2BF93BD61C560D302B7AF32F2A5140527135F00C38ADF0C7FCE507E6BC1F9E5FF3923E60F3559336B1E4BF277ADA2792A590F34B9B5726B3475EC1AB91F136761A7C24EEF13D4A2B98216F556DEFED9374B08928CA3C0D76C7C47272E2D9FB2FFF003E9130C7FF0038CDF98534B0936D279BAFFD6B75D8AA08A9C7E8CB89DBE4EAB83D4FC42B8373FF002B0FF346E6C618E5B6B7F36EA8E7D75E4157D634041F0C864950761A68F34C66823B9FAC35E7A572978ABF0C0BC42537E99852CCEC052AAA97948E11B154E30923E3000EC721E2309CC24B3CE90432F3902146A3D4F427A65F09383972D3EC4FF9F65C7327FCE717971E44204FE4DD65E13D792F03BED9990E41D74F2713DD7FE7ED2449F9FF00F92E10F22FE5F9CA7B833E5732B10F862E5828B84A5655AD5331E45CBC6126D3AF59262937EEF7D81CC79172E2F55D2984B0523352AB5DB204B918E36C8F4C9E559024919604D2A72B949CA80A679663EAD494CBE9348414FA32024DB241F9EDEF35FB18ED9C35C431A101FA819938E4E0E585BE39D634AB9D26FEEA39A268D2662D096EE3DB2EE370E5898E354B6FF7E6463938D38D34D18D88FA73281D9C5915363C7A76C8940709053734381B03B9A78E2AB81077071575478E2ADD3C329237656EA1F0C900C495DD865803592DE4A9812FEB9BFE71B3FF0059D7F20BFF0035C7957FEE916B96057B562AEC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFFD0FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF86BB8802C67311CBE240DB460B32F63B1C57899159D94483A7CB15E25595139003AE465C97891F6DF00CA9215659878E2D914A669013D6A7B62D81411BE21E18A519137BE2A8C57A6F8AB52BD57DF154A6615A629014E35DFF008629A469140B8AD2262C5682DBA92EE182EA4897D5B636D227A6366F588F8581F6C944B46585BF40FF00E70A3FE70BFF0024FF00E723FF0029B5BF3279AFCCB2E85E6CD3F54FD1B7D1CF7CB1F2A8279716604E5FC449B718C2BA3F4B7F3B2EFF00283FE71B3FE7103CF7F9456BE72B18EF350F2ECFA4796A059D267BDB87144850231219B975392053E1DEEF8D7FE707F47FF9C0DF27FE58699F9D5E7A920D17CE3645F4EF33E9FE629BEBB0472C5F6A58ED983503B74A0C9DA38084AFFE7217FE7E75E7BF365C5E7907FE719F438FCB7A1D9BB245E63302FA77D68A6A9F554D84551B9A76C78E9A678492FBA3F267F36BF20BFE73B3F246D3F2E3CE2F6ADE69D3EDE14F3568B7AC8B7B693DB95E53432C86A3D4707ECFBE0333C988C469F327FCFCB3F353CABE53FCBAF26FFCE267E5CDFDA3C1E60317E9B4B77594D8C5624344ACC8763215A1191E3A663097E57797752F3AFE5FF9C6C7CCDF943A9C9A0F9CF47B37B69ADC3304BA5917E290814069EF94F8AD834F27D89FF38B3F927AAFFCE6FDA7E64798BF3E7F37350B297C93A92E973E8C3516B68AE39C65D8B46CE015A8A5732465003038E4FD4FB9B5FF009C5EFCACFC8DB6FC88F3D7E61E976FF96F73A61B09B4D8665F5F8B1DCB4D11635DFAD301CF148C322F85A05FF9F51FE534B65AAF9524BCF3E5F69779EB5A587D6E6BA592E54502399556AA41E94A644E701B069645F0D7E4CFE707E71FE4DFE6779E7F353F27ACA7B7F2BDEEB5777FAA7901F91B67D325959D04716C81E8C454657F9A8B68D148F47EAA587FCE5D7FCE207FCE64F97A0F277E7DD8CFE44D68148A2F29EA333219A56D898E455E2373B03F7E40E51F51E5E4C65A390DBABF3FBFE735BFE7193F2E7FE71D6EBCA4BF931E6B9F599BF306493F44F97BEB7F5C7B6892AE2854B05A8A0C81CA48B3C9A8E9A47A24BFF3851F919E41FCF8FCE08BCB7F9D5E708F47BEF273A5EE8BF97374C527BFF4784AEC676A2B2AF75EE36C1C6472EBD57F2E62FB7BFE738BFE730D64B5BBFF009C5CFF009C7DB8B4B9D4AE02D96BFAD6931886D349B68C7096D02A1E279A93BAED8F89E9B972FBDC8C7A49134FCD7F2F791E1F2BD8A68176E65963AD2F474AB6E687E67304EA2CBD060D36C9D5FF00962CDEC2E4C7290D6F197694577A7CB271CD6DB9F4FB3F537FE7D471DBC1FF0038CDF9836D79756F682FFCD9A8A47EB4F1C6DC425391566046FE39B033B1B793CF4F170CC03DE7EF7E383E88DABF9ABF332F6D2329158F9BF538A57471C64549295DBED5731F3CEA2ECB1E2B0B64B2FAB6DC295ED9A83959F8450935A7AA80863180EB571D695CB2191AE78497A47FCE3F7E527E5A7E66FF00CE4DE8BF97BF9B2B736BE4AF3858DC5D45789762D544B6F1928399200E4453E9CDB69C931BBE4EB73E120D53F757F207FE70C7FE718BFE71AFCE927E65F912FE4935C165716D61ACDEEB114F0C16970A04CA23671527C4666125C2188F73F2B3FE7E3BF9A5E4EFCDFF00F9C87FCBEB2FCB3F30C1E6A87C89E5FB8B0F31FD554D22B812972BEA74AD08CA67CADBF1E3DDF31DAC4D05A3A188C69337A8439E4E1BFD6CC69173A18924F4C0BA048EF98E4B950C4F51D01855631D5C01954E4E4C31D3D46DF46944493053B8AE63CA4DA229835ADEBC6A5222C22EBB64449245AB5B5C4A54C33C541EF9938E4C4C2DE59F9A3E5C4BCB14D4ADE3DED50AB53DF2D949A32627CC778E915B014A4B5A1CC8C527559E348462CA23AF565AE6C22EB25CDCA390DFB64CB3839A315C836114B7D35C50EA53618ABB155C1C014F0C8916825AF572403025BF532603025DEAE5822D64BFAEAFF9C6B35FF9C74FC823E3F971E55FFBA45AE0661ED78A5D8ABB15762AD374C55662AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AB97BE2ABB157FFD1FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF881BC880420F5CC3E20E424B0A857A1EA4ED8F12B24B50B4218D31E20AA8F08670CBB9ED809B0A39AA03C41076395F0B604BE5662C6870F0B30504E1C9AD31E165C6D29E277FA7070B21205171354FC382928CF8A83E78D2B8D698D2A12406B8A625A8D0D7A6D8B2B45B23300145698AD85F1EDB1EB8ADAA4A225884FC4CD3AB045B6AD0153D5BE8C429A2868F47BB86133689E66D47465BDBA56BFD32CEE6585789FB529E0402465832531E005338FCBB6FA84CE751D4B53D461B17E766D79772CEAF20E8C15C9030F8BDE98E11D11F0795F499EFEDAF6F2C266B595F85D69026222007FBB997ECB57C30F8C19F83BDB33B782934292BC7E8C4ECB672C2823F4231B2D78815DB6CA67985B64710EA91EA7E5A437115F68D25EF97EEA32FFA4F52D3EE5EDCDE06FB3511914E390F1E9B3C081768DE5FD3ED8FD72E26BBD7F5E0DB6AB793BCAF427B1724ED909E7B671C1001E86B6EF2DC590922A49044CAFABA1E2483FB240DF7CA8E50DBE0C52883F2E6D4EB125EC771AA59E917959750B0B1BE96DBEB128E858C64549F7CAFF3738F271A7A404BD4B4AFCA0F20CF6D75A85CD86A90996129159DE6A12DD0527BD5C9CA726AF24F9B762D180ED0FC95E5FD05E19F4BD0603769271769155C18BC68475F7CC796693B0C7A50F52D3ED674B48A28163B4912E1A66754142ADFB0C0751EC72BF1A4E6474B163FABFE5BF943CCB3DC5D6B1A12EA3716A39D98B522DA49246EB491402299911D4D7544B4B1287F227E4F59E81AD5C7992EAE2F3EB112D346B2D46E1EF7EAA0FDA0A64AD36F0C9CB59C5CCB8FF901D143CF1F94BA579AAE96F74992E3CADE648DAA3CDF6933C721435E6948E8DF1034EB9286B047CC2FF2782ED17F2EB4DF2AD9BD969566F737F74419BCC533F3993F9B9330E4C5B213D582092E54745188D833187CB62EAD134DB88792A75D40F53FC73046716D98F152B4FE598AD6DD2D6CC85957EC5CB0A807C48EF96C753109CB8F886CF269BFE71FC4B7D793E99E62D5B4A17B5B899AC6F26B783EB2E7E26F4A3206F99B1ED1A157B3A89682E5C54CA34AFCA7D23CB5A63D9C76B2DDDC475996F4C86AD3B7DA771FB44FBE5597571946ADCAC7A7203CF75FD0E64998087A1F8B35E32370D384AE0D338C0E49F4DD47C2C45687B6646292CB00609E67F2EBEAF0D8DC5DC93DB6B36CFC6DEFEDA5689E28C9F8802BBEE336DA7CDC2E0E7D2C65CD8A6A3A0EA36B2B45A7F9B35FBC8C7C715BFE91B85141D57ED77CCD3A814EBB369611E5F794CB42B39B42944DA3DD8824D64F3D75661EACAA4ECCBEA1DCE512CE1A2189EBB1D84090ACF0C6C2D8AF0F58B16E4DF2CA279A2E6431A0534EF527AA2D77CA2598391114CF346D3E7867B762945E42B944B286FC71E3E4FA7F44D352F2C21089CCF115DBDB293305B0E0932587CBA3D27458E8CC3714FECC00B0F0A439B17D4FCA324619C2D3AF41FD99930986420C0753D0A76B1BCB59D39C12EE58F63965F1726196161F1E79A3CB8D63A8CFCA32B6FC8956CCBC669D26AB1960ECBCB91614543C53E599F09874D381054A46F4E95D81E872EE265034A4F2F1343D698096C26DAF52B8A1557703155C411D462A8377F888AE203592B79FBE48062EE7EF93B6041772F7C9713120BFAF7FF9C68FFD671FF9C7FF00FCD6FE54FF00BA45AE066393DB714BB15762AEC55A6E98AACC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5572F7C55762AFF00FFD2FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8779E6690D0E6BDC86E0B62C55A9D0D6B8AA7B1454C555F8814C473508693A9CB59A5E480C49E98AB4CE9E18AA1A465236C05945742699536F1047092A078E2B61716DBF8E15B08391B7AD701482A9130DB026D16ADB1FD78ADADE4395715B5CC6A062A9859FD93912D914FACBEC37FAD95C9BA09CC1906F8A6B0A0645AF8E565124EE5B5E56640EE320531482C21F4EE0AFF29DF2B9330CEACE0F56829B9C8368E4CDAC6C8B24629D3205B22F49B3B43FA35969534C81722095DBD8BF3A50F5CA8B97065B6766FC7EC91909392190E9DA51E60F1A6F539510D822C94E9842EE2B4182922294BE9CBBFC3DF1A6D10413E9C95E9808D9918A3AD6C100A53AE505ABC3569B4C47A10BB8C57C3455AE9E00E9D714786EB9D2B9A3F14DE9B62830A0F10F35689708F3388C77C945800C0A1B0924B69D5D00DF7CCCC658CA2C43CC9A64B085600D3332127032879C5F44D1D651B3014CBB8DD6E68EC9569E93493D373BE4096BC707D0DE5ED224BCD3238D81217E2194CE4EC2186C27B0F95E4120223E9ED98F22CCE9CB2BB2D12485E12E869514DB2B3272F498082FA3BC976F1FA31C6CBD80C00B9B2C4F5CB6D22065A85FB5D72C12689E35F75E5C826423D304E4C16838DE5DE70F28FA16FCA18FE12A4B003FB332B0C9A270A0F913CE5E598A54B82F0FC42BDB33232B755A885BE51D7EC24D3EE1A3E344EA332A05D2E68531CB9903428D5E99931710841897950E5A98F25656C595ABAC805315B5479401F3C56D2F91FE33BE4C354B9ACE7EF8B1773F7C55DCFDF157F5FF00FF0038CFFF00ACE1FF0038FDFF009ADBCA9FF747B5C9ABDBB15762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFD3FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88316FCCD45335EE42630C7C17891F11D862AAE55A3FB5F862AA7CC9751DB08E6A164BD4E58CD00D192493F67C71552654F1E98AA832AF6EB91290B797134C832564620D6BDB1557E551B1EBDB1542C8AC687016512BE3246C4E0656881228DBC715B5E11CEE294C56C2AD0D003D7B629B4CACC1A53B9C896D8B20B34655607B9A8CAE4DD04EA089F20DF14C63AA7153E3BE56512656AC0D9EFE1902CA2C7A01FE94CD4D89DB2B9320F44D1A22C54D36A641B43D174E882B0E4366E9902D917A259DB936C4506FD32B2E44175B598E7F677AEF95972E0CB2D2D502EE3225C90C86CA10A46DB6574E481B270E8A474ED8D360012CFAA73AF15EA71A6C0109258B03BAD3011B3202D523B609F6B314B2E04D22B3590034AD714702362B38D4D08A62BC08D92CE26864A0DC8D8E2C670D9E75E64D0627B39A4352789ED928B8A214F04F4608659A2058B96A71236EB97424C65040F9A34E89EC95C28AF1CC98CDC1CB17806B5108838E3DE800CB3C475D9216A7E5FD3A7B8B80238C31276180CD9E1C4FACFC9BA25D0B4F4DA1019539357C331E591DBE1C2F4FD1740FAEC9C12352E3AD76CC796473469D93DC796E24291B4604886A6991E2B6EC7800667E5DD3440E9F0D0786112672C6F5FB14B68E3024AD587C3B65824D13C69CA476CD41BFB6D9609B41C4A77FA1C17F6B22320208EF97E39B899A0F913F337CA4B6E2E0DBC436AD4D3E59970C8EB33E2B0F827CFDA605F55B851D76FD599B8E56E935189E113865050F8E66C0BAAC91A520A4003B66406B05554D3AFD38A6D706A1AF6C56C36D20A7738ADA14B124EF930D6D54E28754E2AEA9C55FD837FCE337FEB37FFCE3EFFE6B5F2A7FDD1ED726AF6EC55D8ABB15762AD374C55662AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AB97BE2ABB157FFD4FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88EB5527A8EF9AF72138584000F862AB580622B8AAAAC0BC4B6D5188E6A1033851F3CB59A058A952062A876E3FD715506A74EF912BC90EDF6B2B5E254AD00A615E25367618AF129FAA5B6F0C0520ABC75207BE0648911B1236E98A11A88C314DB60126A7E8C59C135B35DC644B745925BAED95C9BE09EC0BF08C837C559C5181CACA24CA6DC7A9694F6C814C52DB7B73EBF4EF95C9987A5E876C788DBB641B4727A3E9B685DA314E832B2CE2F46B2B6263094C8172609D5AE983903E395972E0C8E1B001694C8C9C909A5A5A8AF4E9869B849363682831A6626BA2B44A7D9C69B04D42E2D12A76C8C86CCC4B74B4DA1AF4FA3304B7DA6F69684F1D8605B4CC590AD298ADA30598F4DB6ED8944B7093EA9610CB613A9515E27F5620B488BE60D5F4C486FA62ABD1F7FBF260B19063FE62F4CDA08EA2BC72624E0E58BC2354B0E572DC96A9434F9E4FC470B82CB37FCB4D05AEB534E70FC3CBA91F3C066E5E2C54FB7B4ED02D6DED144680394A1CA2537678A349BE91A6AD9CA5F852BDF2894DC8B013A36A269D98AEDDB0464D9020B26D2ECD232A4AF4CB049259A5BAC2FC435053A659C4D134E3D3B7420F2C989341451B988008879061BE4E33A71F246D83F9B7CB36BA8E997521505CA93FAB32F1C9C2CB8DF97BF9BDA0BD95D5CC623A0DC8FC336584BA6D563A7C937D66DEA91D2873658CBCEEA0520658FD26E077D81CC98F27094F0AB44818ADA8B362B6B7AE4C2BB15762AEC55FD837FCE337FEB377FCE3EFFE6B5F2A7FDD1ED726AF6FC55D8ABB15762AD374C55662AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AB97BE2ABB157FFD5FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8A0B7896BB6D9AEB72116C388EA3DF1B553E05BEC918DAAA51C2F1E43082A94DDF21DF25C4CAD2AA495D8E3C4B68696564D88C78D6D62B926A41380C946EAA2367351B0F7C8DB2F0D50055346618DAF86B1E30C2AA7AE36BE1A82A146F886C7A6048852696F172DE98A784A64B1AAF5EA7A62BC255982D0D06F8AF0950E209D87CF10120F0A696686A36C0436C66192DBA1DBA6552722124FEDE2240E9ED951939312AB340C29B8391E69E1B647A78ADBF1EF4C8908BA46DB5848CE1C5284E57209137A2E836CCC428A5477CACB744BD434BB378594BD083E1954A5BB7443D074EB477A11403DF21C4E5420591431716F8874DB225CA8C29378D4505075C8916DDC48BB65A374DB0ADA6C232C36A615E3A44288D054A934C5B233B509551C6C0D7232E4DC0A10C04B0D866010DE3284DED6DD956B4191B65E222429077180C93C48F8684712363913365CD21D4D084954746072226BC34F9E7CCF02C124EED4249DA9F3C98935C9E37AF34B2B829F647519306DC3C91B49ECB467D52EE2855284EE49C375CDA31E2B2FA6BC83E4C86CA38E568D79F723227239F0C74F6EB4B13EA0DA8A17A1CA897240A4E96C569F0819598B2E1255C5B46801A6E3AE08C59C2242716691BF414A78E4D914D2283E3156D97240B4C85A36508CB452464F8DA4C54EDA89255892064E32B6990A446A33A3DABC22B475A0CC9C73A699C6C3E1FFCF3F2C7A51C978C8ACA63AFC3D7B66D304DD46AB1ECFCEAF30DB98DE4923015549DBBE6DB16EF2FAB86EC2259FD56E46B502999575B3AEE02A7CC7BE4830229631A9F6C242A91563DF224D32112570141BF6C226B54B4B81E3878969776AD7256B4B4B01D8E2B4FEC23FE71977FF9C6EFF9C7C3E3F96BE53FFBA3DAE4D0F6FC55D8ABB15762AD374C55662AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AB97BE2ABB157FFFD6FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8A889788DF6CD7539086B99B8D6871A5538666618D2A20C8C0548E98D2A0E6FDE0A8FBB1A54BC2D1E871A540DC805F7F1C6954F9704AD37E98D3387344464BAEC298D37F120A6B794B7C24E34BC48A855900E5DBC71A5E257DA62140DD37271A5E24C625E031A5E256049231A5E2452AF2071A5E25F1435AEDF4E4834CF74CAD63A1F6C816706456895207BE51272E0CAADE1A2034E994C9CA8F25EE9C8D298C4ECD80A75A5C7521299125AA4CB9221146AB4F880DF2A2562CC7CAEB59D790DAB9025CB845EC16F10E4B45DBC731E5CDC880671A58A28DB22E6E309C2A0E75A77C5CB099451A918B021116F1FC74F1C5253A48A806D8B54954A2D3F8E2D9050E0B5A78E097272A28848158F4E9984425191A0414CAC8641A6A02476CAC86C0BD245515F0C810CC1A63DADCE1629187864405E37CFDE636699A6205687A64C313BB03B7D224BFB9E012A2B97458F876F5CF2D792A38E786478A8DC7C32333B2638A8BDE749D320B481005008194B7009FC50C75D862D8023046A0785316C010F20500E29A57B324134C2A426292B066C0D642A3CAD4A62D6421C5C145624EF5DB2C816B942D0525F173C589A65F02C0E379AFE66E996FAAE8570B40CE10D3F0CD9603BBACD5637E4D7E6158C9A7DFDCC0148018FF000CDE603B3CA6B31EEF25039027DF326F7757214D85F965D171A4E2BF2C99601BE3D3A65127231A9323576E9910C64A0C8D920C56A96AD0E58155D0035AE495FD83FF00CE337FEB37FF00CE3EFF00E6B6F2A7FDD1ED72618BDBB15762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFD7FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8A8F54702DC7305BD2695FD57E9424E2A898542F520E2A887914A15F11D71542A9AD452A7C7154BA7942494A6F8AA5D31323020D2B8AA22180135770569B8C5944EE8E411D28B8B6A1979198A114DBAE2AAF28F4D775E55F0C556DA71E4E7895A8C551EEEA829D7C062ABA08DA46240A0C55341198D6A472F962ADC13A92CBE99153D7161229DC101A06AFD19596704DECFED57C0F4CA24E5C198DB30740A053DF2993971E4ABE8947A7DAF7195B34F74A819650FD457A64496B3CD99C712CF2569C41A6C72B25B718671A0D9849148A139025CD84767AD58C01D5052847539496E8C7765768521A2952D4F0C0E66308812564340684EC3172404CE1734AF86282138B70052A7AEF4C5849368D948F0F6C5AA4B1C507DADB16D8286E7BF4380B9314744D4ED98A42551989208046F9590C8284C5BEEC810D810AEEDC0F6C8109972633AD4B5B765A9269D7234E3C4BCC24D39EE5DAA6B53D31AA72602D3FF2DE80AB74ACEA0EF5A530F139508BD86DECA389A3E294A0C04B394682747E08C7C3906B015ADA60E7885208DEB8B301184D462CC0404A18EDCA9E18B346D8802B5607160423FD440C7DB162434F32018B59096CD729E1B6374988492EAED549A0CB2326528B1CD465FADA3C4DF65D78D0E6CB049D5EAA2FCECFCE9D1E2B4D6AE233462E49047BD3377824F2BAB86EF96678C452C89D402733E06DD0E6145439004ED991170A4B8508AD29932C03741E19449C8C6DF25029C77C8863258789FD9C218A1D901AD053BE5A154591BB1A6495FD84FF00CE32FF00EB377FCE3E57AFFCAB5F29FF00DD1ED72618BDBF15762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD0FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF89F0E3D33BE6370B90957306400773B63C2A893C9057A531A5414B39AF107738D2A6360038353D31E154BB508584E08FB23BE34A81F41BAF8634ADD1B74AFBE3C2A0A32D41F9E0E14F1353B32CAA4277A63C2BC49B7C0D082CBBE3C2BC484A537514C785789A1148F22D477C78578995C16E91C4848DC8EB8F0AF122B8464531E15E2524B74120A0EB919041DD3B55548C6525BA2BAD1AAF41E3BE5127320CD6CD78C60D329939514DA35E681B8D77CA645927FA70008DBE79592C3AB2FB280C8E1E9B1E99025CAC4377A3E8500E6A4FD39592EC71C5EA7A75B5694E990655453A11716DB172F105648A86A7BE2E5008C8F614C58108849CD7AF4C5A64994539D8E2D5269AE0B122BF2C5B20A911248AF42712E5453D8A9435CA2412BCD011E195C83243CCCBE34AE564360404C418A403C36C8D32E618B5E219BE06DFC31A6B1043DBE9C88EAC57E795C9BE019569D6D142438503DF2A2E4C4D0653115722831059C8D84C245063E98B00142301771D7BE2CC05766DB16C010ACA64AD0D08C595226D548A8AE2C486D890C77C5AC8519588077C2C084B26734EB954CA46C92DC826BBED8C249914B48F8C0FA7365824EAB54762F867F3DA0FF738E69DBFA66EF049E5B56777C797AA05CCBB53739B5C6E833F34BD97AE65479B8325C3651932C02ECA24E441AA0C88632688184315608BC47CB2D0AA4C8BE1D724AFEBEFFE719F6FF9C70FF9C7E1E1F96DE54FFBA3DAE4C317B6E2AEC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFD1FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88C69196127AED9570B9096DAC8649D09D80618F0AB26963050B571E15484A8697C287070AA610308CD41AF88C3C2ADCF2ACBFB1F11C78556B47C63E5C7B74C78552891B91200E27C7052A6FA64609DCD70213292D95E4A70A537AE0295CF6C586DB64789544DBB12AA13EC9DCF8E08CAD53386D49A129C6992B545CC68AA03538F6F1C6D54EDCB4A695C6D5368AD893CB9F4ED913BA2DB9A42B48C0DBC72A945BA324C34BB33248007EA6A4D328945CB8167013EAEA13EDD7BE5243951927DA622C90056D8D4E52609326436500120402BEF95CA34DB0C76F41D3AD38471ED94C8539B8F15335D2217F500029EF95172E269EA9A7A88E38EA2A69BE066237BA6E6207E2AEDE18B91134E238D3BF862DE26AF1C7CE9BF1C549B5AABF11F638B4C8A3D361F2C585371C7CBE2AD37C52364CED5796DE180B7C7226491D3F6EBF4640B3E25B27C3DEB4CAC864248095B96F5A65526D0508CFB78E479320503E887979D694ED9599B6844B5B86150DC699519338A6F6E802019592D802776D1D5280EFE3823CD289766E3403A65BC2B6A28581A15A0F1C7859892282961B1DCE3C2DA0A998985487EBD4E3C2C81B5D1A322B1E75A63C2B24BE49DCB9DBA63C2D6A4CEEFDE871E16B2859A1928183D699465145318DA477AF242A0D0B1390894CA0878F9B3A9A54115AE6C7049D4EAE3B3E30FCFBB7923D45AE78F2AEDC7EECDCE1C941E53571DDF1B6A16ACB3C8EC69CB7E3F3CDBE09ECE8B34774918D0D3C333625C1986E95EF97736B6CAD3BE5320DD02B9412064445245AF1193DF080BC2B0AB02464C15E1586363DF1B5E17F5F3FF38D029FF38E3FF38FE3C3F2DBCA9FF747B5CB03597B6E143B15762AEC55A6E98AACC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5572F7C55762AFFFD2FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88D98A8B7639072125B39544C3E78AB27797F75F462A948156A62A88A30C554E163F584E5F67154E27E0D0D075A62AC7648CA82701546E95381285F7C8143339230D1864153DF2252A0A08201195211D0C695078D7C718F34A39A48047C76072C548AEC8E69C0D41EB8AA63A7C144E647CF154CE175AB8F7C082B1A1F524141D4E466CE2CA34AB6F488246F98F37331B2066569157282E4C59269F6CC5D4A8F848D865726639B34D32D97EB09C865322E6620F41855508551B28DB289976100C974992928A8DF2825917A04120E2A7C70B743927B6EDEA003B62D88958F93118B64516917100E2CC287A7F113E2716B3156040F9628E144C4B45DF7C578530B55EB812228A1CA83205B5425E546C8499452E7E54CA4B70429EA3C32259072FDA39410CC146A005699021B01B4CD015400E4086C0532B7978AD46301452792351CB76CBD00A2163E54DB61BE2CC145A41B74A571660AC922A0DB6C5B6254516BC875C5050BF54E4EE695C581287961E1DBA62D64A02694468478E63E50CE058FEA24BAA9032B8865296CA5C9A28E33C7AED99D846EEAB57C9F257FCE4246D0C493B2ECDDE9F2CDCE11B3CAEAB9BE25D56759642C050140299B6C01D0E61BB139012C69F4667E37026BD010287AE5E1A951BF865726C8AE465005722DA15D5D7EEC2AA9453BD3AE2AEE2BE18ABFAEAFF009C6BFF00D674FC82FF00CD71E55FFBA45AE5A39349E6F6BC28762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD3FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF87EBA9D962318514F1CA2DBD2086568E74237E4DBE36ACCE37F5223DB1B543A8E2F5EB4C6D51AC57D3E58DAA5F50581AD0D76C6D5305E4C8057E9C6D5053A108C08DBC71B5405BAFA73F20DBD712ACF6C6E8AA54A06DA943912944170E6BC403E195A15D2E022BD5474DB0412C76F2F19A4214D07B658AA96FCD8835E7E3ED8AB258A65861DE9B8E98AA5E977C653C68C09A9C5053DB39C33A92A0E426CE2CC6DD8351BA517A663CDCCC689854B5CA6F9417262F56D06C8488A37F63944CB7445A791C0F0DE2A28A8AF5CA497371067F6567249C7634A7DACC79173E316496561E8C80F224E524B221964638A281BED930D914DECE765A7C35C2CD3B81F93569D4E2D91473B6DD3166146353254D29BE285850F2229B62AAE8EE9B7018AA6768F4EA3AE2551ECCA83C72B2C908F286AED909328A11C8A74CA4B7041484006942476C052A51824824532B21368F8EB5DF61E390219829824818053B656436028F80A82141AD71884996C9BC4AAA011BE588053355AA29A52A77C5B01560CAA37C5982879248DC30AF4C59C4A0165547206F5C524A3519284FF375C5AC940DDAA052791C5812C62F1BE02C054A9E994E4512A414BC1EDD5C8A1F0C8C53C4E6712A20540420AE66E1165D76A4ECF9B3FE724B4F79FCBB1DD2C615947D91ED4CDCE10F35AA7E736A49E9BD1CD0F1155CDA61E4E833F349C0A0E43E23E199D8DD7CDD52DF115A13DB2F0D4D9A93D32B93645408F888AD37C8B6856403BB6154482B403962AA8154FED9C55FD75FFCE35FFEB3A7E417FE6B8F2AFF00DD22D72D1C9A4F37B5E143B15762AEC55A6E98AACC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5572F7C55762AFF00FFD4FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF876BBE87315C8485CF160DE06B8AB2DD364F561FA31555941018E2A88452D01F962A955584943E3B0C5538B771C77FBB156AE1D1D4A8EA70C552A02928F9E48A197589AAD3DB22528D63C72A4202EA7288287AE304B1A7959E5A7BE58A9D5BCAD12123BD3156E5D4491C4B6F8AA8C37039160D5A9C50591E9B745A5515EF909B38BD1ED5FECFB8CC79B998D3AB14E57287DF282E4C5ED7E598D43A46DE198D939B918D92DD411A5DA35075DB289173F10675A5BC7E94629BD331E45CF804DE8CCD551B786524B221388549550763DF2D8F2484DA24E00649926D6DDB16C8A3DFA62CC23ADE35E35F6C59D34235E67DF15A44FD5C374C569AF4590EDB602B4BDB91C8162A251B7ED909328A83A353AE525B8210A357A6053C9B58DC6FC71402AA0B1143B7BE408660AF5661DF2B219828BB695BD51BF6C88E6C89D936FAE84E35392620B23B5BB8E48802462D81AB89929B362D80A5227ABB0E58B3057AA826BE38A928D8CA804571604A1AEDD781DF16B258E3CF17C5191CB91A8CAE41ACC964482E3946A9B0ED8C42789A82CE732B2AA1E20666E1145C4D472795FE7CE96F2792E591A3FB009CDC610F39A97E4E6BCE5EF64A6C17E1A7CB3658DD06A39A5F08063DF3371BAF9B7407A65E393535C4572B9364541E262C48E9916D0B789185555436D8AABAAB53157F5DFF00F38D5FFACE7F903FF9AE3CABFF00748B5CB472693CDED7850EC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFD5FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF87BBB5531935DF31E9C863A543921B61ED8D2A6FA4DD324A200070AD2A7AE1A54E75173071F4C0656FB44E0A54C34F904B0716006DB61A54B2E222B72A00AA93D7052A342468952C41231A543955506452491B50F4C2020A1A83D415385871325D3E4F8B8F6E38299DA6373444E4BD7DF0708674C7EE1E4956941B1C1C20208A4BE38BF780B57E8C076502D386904501E00134E87236C8458C4B2C92CA6A00DFB640C99885A3AC80F4E466635076C788B194190E94DFBE06BDF2066CE117A759CCC4AF4D865129B9708B35F2E446F2ED44BB007F67283272A317B669F69F5495668EA76037E998F236E4420C87D2378E1CECC3F972B21CA86CCC749B3A471835AF7CA65172A136530C25187C35CAF80368926D1C2397235A9ED92029B446D328E20C37AFB6165C29A4302A01427E9C590D915C1586F5C520A362015401DF167C4E650096A9AE2BC48A85CED418AF1225959874FA3015E25AB6EFD5853293265C2E3180694EBB642526622AA2C95C7C24D72A25B4042B69D3A49CB882A0EF91E25217B5A3FECA60E363C28792D66542C62F8475A6478923642B46C3A46D8136B6349C3AF08CF23DCF4C40DD0648EB9B19446B21A863D874C953113455A7AB1A0E47638D33135D7771E9AFDADFDF1A6CE341C127AA58D7A0C04536C668E499D76FC7032E26A5BBE20107AE2C52A9EFA490F1DA98A0C6DD691722CF4E4D5D864A301269C9B328D32131373F4D4D7AD4648630A192470DBC70BCC8A0DC336E87A53333144071353C982FE6C68306B9E45BF515F552363C53C7369843CDEAA443F147CC3A4CB6DAC5F5B5C03188A4603E55CD96301D2651658DB22C5550DF2CCB8389382C415515CB9A0C5771CA6452154283414C900D814E445180AA9C6C4B71A6C3224A53058C507BE438D5FD727FCE36EDFF0038EBF9063C3F2E7CADFF00748B5CCA8F20D079BDA70A1D8ABB15762AD374C55662AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AB97BE2ABB157FFD6FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8749E4AC447B652DE9347F131A77DB1557B6AC3386E9BE2AC8AE5C5C427F9A9B62AABA7B98D4027154C4C625607BF6C550579CA31C7BE2ABA08CC916E31415268087C5AD34B4E51B03F462D8134B97E51FD18B68415AA076901F0C05126A5B602A5464648097CC484653D32B6C4A963A927C7BE565B62B91FD30E3C4E218493CD1A4E532FCF2126507A969FBBA8F1198E5CB83D5FC9B6D5BAE9DF292E541ED92A18ADD683282E54026BA2C2EC39B0D8644B7443D0F4C8D782E5527222190C71AF31B641BC04C52104834EBD316F8A67142076F9E2C9305B72698AAB0B638AA323B7341B62C9CF6C7154C2DAD136DF154E560840F703014851692255F88019410DA95CF7766A08E601F1C810C9049AA5BC469EA8DBDF2B21B0228EAD1488C88E3938F872045325B15C4951591720C11C2E55455DD597B8C55DF5AB56EC98AAEF5ED88FD95F7184319206EAF2071C3D41926210735CC7140A43D77ED8B20C62FB52E4E141F6C5B137D2C92189E8C36C05B2298CAC1109C8B3B486F2EC28DCECB8ADB1A7D7218A5E25FA75C56D33B7F355A5BD393800E5B02C08B4DD3CFDA7A2D0381F4E49908D2D5F3FDB199B8C808E1B0AF7CBB1C9C6CF0B4A0F9D67BAB6BFB49B7826560A0FBE6CB14DD0EA30597E74FE7368325B6B97B7B04748A51C811E273638A7B3A2D462E12F9DA60F1BA07EE73371C9D76514887015A83C065D6E21E6B7204A40554FE1841D99A9C9D701296E28F7AF8E564AA37A0CAED5FD707FCE36FFEB3AFE41FFE6B9F2B7FDD22D733A1F48683CDED39243B15762AEC55A6E98AACC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5572F7C55762AFFFD7FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8739D15050D6994B7A56838C8A53A72DEB8AAACCDFBCF87C7154E2DE86024FDA036C551B6EBB6E37C551F1CA237523B763EF8AADBF40F1FA83ED1DF156ACE5E30D0D3962828D58E3937A5716B5748B7A1FB23A62D817CA6A287718B68528488CB15EF80A24AE5CB0C8C9012BBB4F877CADB12C8C1DC0CACB6C50EC84B1E58B0927DA3C6038206F5C849941EA7A38F526507AD36CC72E5C1EDFE4F83D39B95329939507AE9ACD1A2D3E119417371F2659A55BFA70F151DB225BE219469B190429D88CAA4E44427D6EAED3053F6720DE032686D01A6C698B604D52D1788A038A5328ED8F15DB6C5518966081B7CF1555312203418B2433E2ABE3623BD3155579F82925BA024E2AC5AFF5A8F81A380720437304BEBDB89598A49F09CAC8641266B8946E646FBF2B21B436BAB4F1FC21CFCF2B904AE3ADDCAF499BEF394B05875FBCA504E7E938AAD5F30DE29DE7A62A887F32DC471971354F4A610C648287CCB712CB4692B9260190C1AB4D31285AB45A818B30EB6E7753FC7B8AF6C5B1E81A7C451197A055DB0499DD35773908DB8DB22BC4F3ED56EE5A482BB0AE2BC4F2DBFBB732B166A11E18AF124536A2EE4297240E94CB20CE25080DECB25217600F8EF8934D9619058E9FA9F2462599BB1DE9928CF76899B67B67A56AB7118528294EC3336191C2C98ADE51F9ABE4D9A5D3EF649E127D0879A353BD333F164D9D06B70D17E7FDFAC4CD70B30FDF40E4474D86C7BE67E2C8F3DA914972492301EA50B77CCC8C9D613BABAEF4AE025B61BAB2004D3240ECCCB6F12D2A7224AAC0FC7E8CAC9558F3B76A7CB236AFEBAFFE71A8D7FE71CFF2049EA7F2E3CAA4FF00DC22D73610FA47B9A0F37B5E490EC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFD0FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF87FBA8BD4048194B7B1D95BD16A1EB8AAAC3FBC353F3C553112FA6A476C553AB12255A8EF8AAF9E321AA3B74C5549AE015F4D8EF8AAC4AD76E871414E6D7B138B5A6C801E9E18B6042DC6DF3C5B52DF50A927C701449176CFEA353B646480985DD972841A74195B63152BC1C8EC0E565B62A4D4635F0C430927FA42FEF07EBC849941EA7A0445AE51BB0EB98F272E0F7DF2E22D40194C9CA83D12CB99611F5DF6CA0B9F886CCEB4D0C38AD3E8C89E4E44597E9F0FF00A415237DB2A939116530DA8F5850641BC06490460103C31649B2C6B4C551491B6D41B62A8D446A0F871569EDCD09A6E7164817B73BED8AA1243C176ED8AA4379764065AD6A08C55874D652DCEC95381B9520D0AE08355241C890C9171F961E43464A8F97F66565B0233FC191B293C7E2ED954F932E88197C9A00E998CC12CB8F2B8B78DA5E05F8761DF156297F6621AD206DBBD31563176EC6328B0B29AF5C218C90964D289B743D724C0335D3999E52A548F8716619DE89680B863D716C6573968D2918DFF6A980A4A4924C4F20FB7BE4516C475754653C37AD6B8ADBCDEE74C92791A83A9C56D42CFCB5732CDC1622E09EB4CB22764893D3347F216E924D1F1EFB8FECC848A99BD2EC7CA9630AA82AAC7AE40163C4CA6DF4AB5800E2829F2CCA84940619F99FE5A1A8F937549EDE1065F4986C3C01CCFC52D9D36BA1BBF1A35FD2CD96A5A84338E327ACDC54FF00AC7363864F27AD0C6648CC52943D466C205D213BAF4C9B978BBD156E393D0E36CA489BB4E2A3B57204A1219A52B5C892A8749F91A57A6564A1FD7F7FCE346FFF0038E3FF0038FE7C7F2DBCA9FF00747B5CD9E3FA47B9A4F37B6E4D0EC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFD1FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88FE09E89206F986265C86217D18790FE1928CAD5640FE91DF2684C42ACA093B8C2A9DE95F01A1FB3E18AA6578547D8D81EB91B4A41229E7CB2064847C0EA29CB718612B2829FC7E888EAA37F1CBA835A26DDD016277DB225B0284E19CD17A65664DA103242114B30EBD30192D5AAE9FFDE644C9908B241CE489D4EE00E982D980C4F50B52AC59453DF06CD8024EBC91B89EF9125B238C1E6C93493FBD51DB2B914F000F5FD094ACC9C45052A731E45B601EE3E5621A401B7AE504B9B08BD5ECA14AAB22D189EB98B3951765860299FE9502D15996AD90E22DE22199E9F6D1FA9EA71F8CD2A7236DB10C9E1894B82474EF8B626B144ACE7E793114A611464B713D3C325C2153A8E3000DBA0D8E0E10AAAC0A8DBEFC7842AAB0F86BED8F085B40BF5C7842DA577708E2DC0531E15B62F3E9EF2B13C490712026D1765A5246DFDDED9512BC4C892DE355A7015A656496C125C88A29F08CAC96F8C95C01D29D72B2CEDC638DBED2D722634B4A0F676EC0D23049ED9548522987EABA7C6C5FF74BF2A0CA49626DE75A8E99C8B462314AF4A61848DEE903BD278F4708F511EF5CBEC32E109FDA69C435553E223AE3B278598E9903C34EC3BE1B09A4E652163241F88F5C8C9B211058B5DFED6FD6B9149800C6258DA4675AD47718B510A967A6C4CFF147518B512CE74AD3ECADD59961018904138AC4B2B49232B420500F9603BA69689A388D176AEFD71A452256FA9FB59206992716CF16A9A65E69B3012452C6FCA33DFE1399FA736EA759B97E31FE70E94BA6FE656B564578DAA3B3431781A939B9D3879AD6403C655A49EB34E794A5882DD36068336511B3A1C9000AA00074DB2B9158121176E55483DFBE52665CB8C6C29DF5C301B361E22A62C6E6766AF235C9B02104B38434069878583FB10FF9C653CBFE71BBFE71F1BC7F2D7CA67FEE4F6B9B087D23DCD079BDBF248762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFD2FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88D8DAB09F719801BD8DDC8A4849EC77CB2294B5C736AA9CB1531B69285636FDADB0A19143FBB5AD7A60554F53D45627B602942BA77F0CA8A143D4DC01E38C0D154FE02C621E19719288A362069F3CACC9B045308E2046FF007E5664D822A7731064000E991253C2A7A7DB7EF3A64789908B2BB5B6AF30456B8F1331143EA7A627A65A831E26C1160A6CF94D41DB6C04B6C62CA746D3099936AF8E5722A43DA746D302F134DC65132CE01E9BE5C88ADC5076398F22E7630F63D1A20F22A1F1CC69F376388507A3D9C3C19401F4641B87366D610D29B6F8B6C53A4401C7862CD31B789CB123A65A392A610C3273C2AC8228C71507AD3155EF18A53BE2AD32EDFC715413AEF8AA19A307AFD38AB696D19EC36C0555BD140360065549010B22D180F7C810C8158401F3CAC86624B3991B9391E16C8C9DEB0C4C5B4168DC8405ABD3299452C72F6F1199878E6398A6AD875ECAA5C90054E400A4F0D2053E371B77C3C48643656C6B5A6D4DB1E254E12260BB63C4AB5A195C30F0C902DB89239AD253CBF56499C9237B57491B6A16C5A24995AC0C083DF16892730C8D1EC72405A225182E881D70F0B2B51376A49E477C7856D512ED36DFDB1E15B649A15D1127C3FEEC0CB4FA0E6660D9D6EAB72FCAFF00F9C90B196DBF342F66238A4AC493F7E6E74E5E73561F394A156460BF66B9B2076745946EA7FC72A996B886BD42A72AE6E643925D7331634C980892493DCFDA51DB6C980C4A56CE49D8E4C06A7F645FF38C1FFACD3FF38F1FF9ACFCA5FF00746B4CCD8F20D079BDCF248762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFD3FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88D880E040E87B66006F492FA2F88803AE5914A1C5B7186BC7E2F1CB108781585C46CDBAA9C2ACB15E3684803738154955A35663F6476C05285594BC9C6B55AF4CA8A157D052E2837C8F567109CDB3AA808D8993688A6B0C44B0A7D93DB2064D8229EFA01635A2D09CACC9B0456081581F86A720649E15D6F6AC1C7A6BC71E26422C9AC6D242D535A63C4CC4532BFD3CBC068B534C789988B036D34C731F82849C789B04597E8765C654257204B121EB9648B18400509198F32CE019C688A82652A286BB9CA497371F27B068CA81D582D0F8E5122E7E3E4CF6CCF29D2BD3C322DA39B36B4AF3F84D17B62DB14D56A5B03364368E811011BD284E5D1E4A9B200402A389F1C2A8F49102AEDBD3738AAE3221EA31543927715DBB62A82949036C550F473FB471556457A801A82BB9F6C555E458A31549BD4F639021925B35DB80CA2DD189E8DE190216D45EFA38AD889621EA53EDF7C810C4C92A4BB8DA29A46958B28F8129D72206EB19A0D2EA607D53C9D3F9299618B68CADB5ECB7069E87A71D3E2343944E0DB1C9691DD7EF83F01C58577198F28B609B1B78A560C492483F6B299C68365DA2ACEDDCC82BBE55C28675676A0AA80BF1531E154D52C588E98F0AAE5B1707A75D8E4A21B71A12EF4F2A84AAD0F8E58CE4C4E6B26939A96E2F5F84E2D1256787D2B16319E52C42AD20F018B449E6F79F9A5E52B099ACF51BD4B6B984F16151BE5916B2692D93F387C822A1B5B2BF223254BC4BED3F363F2FAE24A0D6D9B7DEB4C697899345E73F28DE11F53D5D2A7A02C31A5E2665E5DD574C9264F4F555256A428208DF2FC45C2D46EF833FE7278423F31E36DA482653507A13439B7D39741AB8BE3F6565BCB84635556345EC01CD903B3A2CA374422214625457B65536B8849677605E86832500E4C521B8B97527E3CB00625262EEECC791DCD7260312B94E4C06A7F64DFF0038C1FF00ACD3FF0038F1FF009ACFCA5FF746B4CCA8F2683CDEE7850EC55D8ABB155AE683E9C554F97B62AEE5ED8ABB97B62AEE5ED8ABB97B62AEE5ED8ABB97B62ABB15762AEC55D8ABB15762AB97BE2ABB157FFFD4FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88BB53C866006F5971082E0D3BE5914A16E00488FCB2C42550D19E83AD76C2A98DBC844BC3DFA6054E2E29F56603BD3014A4515564CA8F3423C5C0420F7A65726DC7CD745704B8232B25C9AB6490DEA22A6E2B5CAC96C8C593433ACB1AEF9025B04535B4B70E188A1DB20649E14FAC6C55985464789970B281A7848C328C3C4D9108EB6D3DA78DAA2BB63C4CC063B71A3137205325129AA4EACB4A68DD6829824C4866305B32B2023B663C8B38B35D1A03EAA6D9492E6630F56B106109951E6E6C59D69DF100D81B073673A6FC4AA69D7BE2DB14E917E3C59A7D6B6C48461D0EF96C792A751A711BE155C57DF157703E38AB5F4E2A849BA62A82798462BBD71541B6A616B5AE2AC7F51F31D9C1192CC63A77C910D8C02F7F30F4BB763CB520A57AA93FD99590C0B179FF003C3CB167270BABC593DABFD99590D04A47A97FCE48793ED2A91852C47C27DFEEC111BB59953CAB56FF009CAA82DEE78DAC21A3AD1401FD99710C2390DA5F27FCE4A6BFA821FA8D89E0C09E407F665120DF1C858D45FF00391BAEDAFAED776C556BDC7F6663C839519BE91FC9EF3EBFE61426231805D4B961ED954837C256FA2AC7437AA9E3F4655C0DCC9EDB4C78CD48C3C0A9DC160481515C1C2AACFA79A834EF8914DD8D0379A79E1F7E06526177962A03963C585787BE2D1248D61963B1D453ABCB1B08FE74DB16893F32BF313F293CFDA8F9AB50BE8209A5B79A4668F8F402A7DF32314801C9A64C462FCACF385B6D73A4CF2D3BF13FD725B215D7F2EBCDF34CB1D9E893C751BB713D7EFC7657A0F977F243F30A7991E4967B343BD09A7F1C695F5FFE597E526B1A5DBC6DA96A0F34CAF5662D5D89E9D7251E6D1946CF1DFF009CCDF253680DA3EB11356474EBDFA1CDAE9CBA0D587E7F593C9373965D9DBAD73640ECE8B28DD16A7E07F1ED954DAE218BDCDC0124895E8694CBB1F26F88D9239EAE4E5A031921F8D065803595226876EB9301ADFD94FF00CE2FFF00EB347FCE3BFF00E6B2F297FDD1AD32F1C9A0F37BA6143B15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD5FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88D8294F845330037B52D4B29AF7CB2294AAF6BB8CB152D8D5830A547CB0B13C930854870DBD7C72122C2253953585ABBE54496C4A1BFBC6F9E441552641238567283AD7F86322299E306D98F967CADABF98AEE2B5B3B62C8C69EA01DB31CC9D8E385BEDAF227FCE2EC17515B5D6B32155900A293FB5BFBE5129B9F8F102F43D57FE716EDA2B988E9CF5403EC76FF89663CA65BBC10F25F35FE476B9E5FB932C687D193E1555ED4FA72066C7C10F3E5D0750B0B8F4E5571C4D0D7009A462A6616D632491014AF11BE59C4CFC20BCD9DC4428B551ED931309F0D012DB49CD59C50F8E094BB94C02636B1134F1C8711699C53368A452A791E9B60B6BA65DA0C94750C706CE442DEA763229E15DF289F3765879334D35C55476F0C8B7B3EB023E103618AA7D18AB0DB02DB27B16F8554F6197479330980DDC006A3C30A551862AAB18046E31545718986C82B4C585A57716ACD5E228322B691CDA75D716F8493BD32B2516F3FD674BD4DCBA4523A73040A1E99124A5E3BAE7E4DF9C35F467835BBB8977AAABD3F8E4F88A402F1CD4BFE71BFCE6F3D06AD732B576ABF5F9EF82D9D16357DFF38C5E757A97919DFF0098FF00B78B218D8A5C7FCE3179D43F22BCCAF4AFFB78F2639310E1427FD0B379CC48ACF6EBB1EE3FB720723891C459FF00973F203CD715C436F39F4A0604391B536F9E4253722185E97A27FCE37581BC59757B812AF2ABC2C6A0EFE15CA8CDCA8627D4BE51F22F97BCA10C49A3D9C5048ABC4B462808EFDF2A9CB67271E3A2F52B68AA828287C72102DE629D5BD9B4AA07877CB835909BC569E9815CAE4C0AAB428C0D08F837CA81B402424B733060D18415E95C2DC0B0ED474F6A973B835A0F0C5B0C424F1C216A196B4C5A6710105736314EDCC205E1B103BE0B21C59C2F9249756B69103CE352464F88B5F865298A6B78A5A450278D699602BE19661653F35154070DAF8659369F7D0DA144745FF4821547BE46CDACA1B6EC37FE7263C99179DFF2D64586D926BCB088C826A55C0E2C7AD7365A693A4D5C03F119A136BA9CF6922F131C8D191EEA48FE19B8C727439318B5194888DD21D890787B6DDB26402B080616EB44AB6EE6BC98F5C9844A21047ED1CB034C821DBBFD3930D12438DC9AE58D25FD957FCE2FFF00EB347FCE3BFF00E6B2F297FDD1AD32F1C9A4F37B9E143B15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD6FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF889B535CC00DEAF28EF9645528BA1C8E58AA10C60B8AE2A5181789C045B590982FF7669E191314829431FDE36532D9BE22D52D2C9F52BE82D233467351F466365C941CCC18ACBF49BF21FC950E9D6105EDCDB2BD003C88F9E611CAEDB1617D71FE2ED0B4B8E21385E286813C0E512C8EC71E057B7FCCAD0EF6EE386270A76037CA2591BCE165F7369A4EAD6CF2CC527122FC209AD32BF111E03C475DFCB0B2D424966B78946E69B63E22F80F329BF2DEE609654856A17ED532D195071525571E49BB86BCD0ED93191071A437BE567442CEB4206DB6113B6AC90628BA7345395F7E98789C5945329ADB8462BD69D71B6BE156D224E33818F137462F48B49887515EC32B917618850679A4C84B2FBE06D7A3E9CDBAD76C5594DB8E4C3154E6D5C89197C32D1C9984DE13571852886FE38AAAC7D3154C228BBF638A6959A21DC74C82D21999882380CAD692C9ECFD53BA0A9DABE1919288EEE8ADE6B65F4924EA29838DC8F0D092DACA8793C8013D1BC31E36631A5773F003CAF01FA4E3C4D831B1E96F2047DEE86DEE72139ECCBC2B496EF568492A9722A7E798A7228D3282B5C489EAC373561D1413959C8DD1D3A274EB7964B80D2C859ABB2E40E46E1829E8D6914CC1226B6E117FBF48C8F1DB2963A65B6D6E11176AED96C0B5109D4238A82075CBAD810ACFCB8E5732D6425CED22568763D72B896043A38A39012454F8E49B6297DC5AF21257A0FB38B7249FA3958B6DF4E2D3916C1A423ACBCBB1DB22538B1F131ED53CBE8FCA87AE20B6F82C364D0258A60231C93A93938C97C047C505C5BAF43B6596BE026B6B0C976D645BED452127E583AB899B1D3D3AD2DC6ABA76B1A6CC39ACF6C63507DD48FE399D84D3A3D5C2DF87DF9F7E50FF0003F9EB50B20BC6970CF4A7F3B31CDB6296CE872E3A2F1CD4855D641FB4BBE650DDC7E4C4AE362C3C32C6322969FB67241A64876EFF004E581C7921C753963497F655FF0038BFFF00ACD1FF0038EFFF009ACBCA5FF746B4CBC72692F73C28762AEC55D8AAC7E9F4E2AA58ABB15762AEC55D8ABB15762AA98ABB15762AEC55D8ABB155CBDF155D8ABFFFD7FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF889B360BD730037A3E4A1E9DB2C8A529BB42C76CB10A50AF165A8A625211B55C622D8494E52786C77A8C998ECD60EE83BCF8AE9388A506F4CC2CFB39F845BD1FF2CB493A96BD68047CB8CAA6B4ED5CD5E59DBB7D3E3DDFA93A3D8B69DA6DABA0F4D1211555D8663176D8A2F2BD72D751D7353962B3321084B1504D32893B1C71D952DBCBBABE9EA26657046F5EF98F26FE009EE8DE78D5B41BD1CCC9344D45911892001DE99595107B868DE79D1B5B31AC92FA5310014069BE36930658D6A8E1DD40E128F81BC72C69945299F4A421AAA0D7C46581A0B0DD574359012117A1ED9312A6A9C5E51A9E83C2524201BF618789C69C58F5D69DC410476C789AB85274B5E126DF0D0F518F137C22CBB4752028356DFA9C376E5C0507A4E974053B7F98C2C9E83A6CA15803DA98AB288E7008A62A9AC2E480C3BF5CB63C998E49A42E69D4E14A395BA62AACADEFB62A9BDA5D536206D8B35F7373CA945A5720B4840ACDD09CACAD221232BD6BF3C84CA62375D2AF53D0E637139A12B9622FF0D49E5B6F8789B404A2EB492CA69DB071338B1A9BCBCCEE47106BED919CB66D88DD47FC2E3FDF43EECC4B6F115787CB8D1C8A40200ED902590A661A6E841543155A8F6CA8A788271E97A478D6A3C3082899B08E801D854E5F02E3109AA82A0153990C4869A471EF954CB590A2D2B32B0200C840DB54C25A4B89050903C32D6714C963F5A3DCD0A8DB16E4B64B295492010B5C5A72289825D8455A7ED655334DDA734BBEA32CA28687E782DC9E2583494460B201C9B71F2CB014F10448D060906EA3EEC9028E25F1796914F258FE9196C5C4CC2D36B6B45B53B2B03DC8EF97E39EEE9F518DF9A7FF0039C1E5223518FCCD15B8F4EE295217F9797539B2C32743A8C6FCE1BE9B8832EE55968066CF13AB9ECC50124B549CB4B594249D4E48354940F4CB038F2511D4E58D25FD957FCE2FFF00EB347FCE3BFF00E6B2F297FDD1AD32F1C9A4BDCF0A1D8ABB15762AB1FA7D38AA962AEC55D8ABB15762AEC55D8AAA62AEC55D8ABB15762AEC5572F7C55762AFFFD0FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88089A86B9801BD338CD40F1CB22969E30C32C420D8713B6291CD6D4E4A00B1C8B58D46E69979AA681CD40FC7331F019ABD4BB4D353E9EFF009C74D21751D692A952B535A78669C9DDDDE101FA397F6CB6DA3D360563A01DF2120ECB0B7F96FE5B8F503777862ABD08AB0EDBF88CA661D96309BF99F4A3043246918E9D8663C8373C0752D0F50796436F096321A37C35DBEECAE99458DCB65AAF96E48EF4A4B50C0D02B78FCB101127D05E48F375D6BB6612E418CDA850BCB626B4F1CB0071E6CFEE66658C7BE594E34C149A525D1AA3AE46450030AD4EC83B31A6F91DDAA51613A958D0F4A6DD71DDA845864B6A56423EFC6CB7C629EE92854283D6B9747937067DA79A32E4959BE9FBB8FA31564A83718153C85A8A9F2DB2D076660A6B136DBE1B4A354EC3F1C2AAEA4D3154742E148AF862DC119556C8324C6DE256A74DB2B28559630B95CF92421D979661B900A87A7BF4C0CE25B30F2ED8B60696C4160481B74C05B224DAAFD487F2D7E8CACC5B812EFA90F0032042D9575FDD0E23E9CAC861C454DE124FA9D7DB214CA3225673F4CF4CB62C885C353111AB6E3A65CD65506A91C9DB2120C0B6F771D36DABD7238F9B44D0E675AD69972628BB797D571C7609D716F64B58A587871DE98B4CC162B7F21D31F8769872194E45C7612F87519A46A274F6C886EE229B44E646066D9874F96482F116416C22E23A64D788A756F2AAC4151030AF5CC989D98917BAA344D37488610E0E78BE6AFF009C9CFCBF4F347E5EEA73BC5FBCD3E2661B54FD963E199D824E83541F83FAA5A1856F216D9ADA5650A7AECC7B66EB09D9D0E6D8B0FEA58E5E5AC1D9072F7DF2516B9287ECF5ED96071E4A2A773963490FECABFE717FFF0059A3FE71DFFF00359794BFEE8D69978E4D279BDCF0A1D8ABB15762AB1FA7D38AA962AEC55D8ABB15762AEC55D8AAA62AEC55D8ABB15762AEC5572F7C55762AFF00FFD1FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF87EB35F7CC572138A74DB2415A634196054B67900E44E487355B1CE38D2B96EC8282B9AB74F1CA665880A912F22CBDE99ABCE5CCC5B3EEAFF9C4EB113DD988815E25AB4DF6CD69767A626DF647999435D5A5BAB1D880403FC32B93BDD3F37B97962CD6D34832280ACD0EF414CA245DC621B30AD5A77B849A302A6A77CA2459494B4AD209812478C115DC951FD32316A1CD3AD5F49D15B4D91DCC3EAAA134655EB4F964993E64BFF300D235631DB30085C8F82806C7DB1453D5F45D7E4D52D54D6A683F56147084DE0BB3C9C4B4DB619645A728A49EE7799DFB1E992A68A627A944199EBD4EF8D2D30A9AD944BF3C6928AB440B28A61566BA79A30C559A58BFC43E8AE2A9F46FF10C55388EE00551E191BDD04A3A3BAA8EB8414A363B91B6FF003CB1B02312E47CE993661328DEB43E3DB16E099C4E38FF000C82A2606A656528D2A5C0A75C84D5BF4CE6310DA1A2877C890DB169537E99590E405754DC572239B656C98C511A74AE4E419C10D7111A1F7CA64E4001085780DFE9CC793090097CD7263A953F17860873681CD26B8D4E58EB5A6F97AC92A7BD9A405877E9938B4C9AB7BC9D09CB29A095433DDC8E4AD7010D68F82EEE0515D6BEF819C5368272159E9C69DF16F82223F307A4425457A62DD1016DF39D5F871FB4A28299092C804A6386EB4B928C84A9EE722C53D86EA3640CFF0068E2A98DBCF0D462A9EC13D221C3ECD76CCBC5C94A6B67744115CB1C2CE16F9AB4B1E63F2E6A1A4900FD7A090014FF00248CC9C45D06AE0FE76FF3A3CA4FE54FCC6D7347652AA9348C05283AB1F6CD96293CFE68EEF03BA6FDE483A10732E25A2B648E7152773BE5C1C69F35315000AE6445A96E5A036C407F661FF38BBFFACCFF00F38EDFF9AC7CA3FF00746B4CB43833FA8FBDEEB8B1762AEC55D8AAC7E9F4E2AA58ABB15762AEC55D8ABB15762AA98ABB15762AEC55D8ABB155CBDF155D8ABFFFD2FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF884B31D2B98AE426E47C3920A8694EDB6F9605482ED982BD01AF864952E86670D435F961B414D50730396D909A0370370B8907B7539AECCE5637DD7FF388F76A359642E05617A0AF7CD74C53B4D3737DAD359B5DEB30730410C280E63C9DEE9F9BD5EE3513A558B2745F4F8E5327718B9304B6D4629D679188EA69BE63C99496DDF9DEDB46B231B952D355547707C72316A1CDE15E63F38EA77F2C896933047A8A2939364C22DF48D42E6669E7E72173553D7157A56853DCE9A1622080682A715672D70DE9A3AB862FB900D72D838F991729E56E186EC7A81D726D2905FC25CA9FF277C558B5CDA9049A6D8AA95AA71931565567B32EF8AB2BB37A11BEDDCE2A9E46FF0010A9C55358CD40DF21D58946C792641191E58D811B1D6993661368998003C316F4D6273415E990423918D4532B294EED8065DF6F0C849513C465242789A2828720437464B553C7AE4087263255A002B4E9910376CB454520E3D69ED864DD0536219C0EA3C7289736F082BB1C50D3AF8E63C98C986DE4AC3950EE0E087368EAC3758BA99281493F2CBD125897130B346FDA66A11938B4C9111C92B15A6FEC32C0E396596B6D298D0AA924F51896B45C92C36A959402E3AAF7C8B6458E5FF99A0A18E21E9F0AF3AED8B7C5875C7984090BF30057662716F8A79A379A8C328726A95EBDB2052433C9FCC16DA94694515EE46458F0B514913505413E0315E14EED0C408E5F0FCF6C53C29D2CD1A2715229D46F97E33B302AD6F78A1BA81F4E4F89AA70B09B5AEA9CAE91030658C153FECB327149D36AF13F22FF00E7387C9B168FE686F3446800BE6259C0DAA6BDF3618E4F37A8C745F9A7786B7136D4F8B3638DD7C85256E09ED9787167CD408A66445A9665A1BA2FECC3FE7177FF00599FFE71DBFF00358F947FEE8D6996B813FA8FBDEEB8B1762AEC55D8AAC7E9F4E2AA58ABB15762AEC55D8ABB15762AA98ABB15762AEC55D8ABB155CBDF155D8ABFFFD3FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF884B33D37AE62B909B337C24788C2150E57E1396854A665FDE0C4AA4F29A4D5F7C802828E0F545DFC36C24A02E97EDB53C33132072B13EABFF009C5AD5E3B7F345BC6ED40411BF8D735F986CED34BCDFA88F12B6A36578375E20D730A4EF74FCD11E719DCE8F2CD16E6BC49CA64EE317278326AB710C14E5BF2E998F26526317AF79AA5F3210480A29918F36A1CD97683E45BBB86599E33C4D0D48C9B27A641E5FB0D360637340C47C18AB1BBFB6B494B7A43A74C550FA4A869DA222841A0CB60E3E6667058D09A8EBBE4DA503358061257F9B154A27D257D36FE98AA4034E546229DFAE2A9D5B5B22815C5536854290A3A0A62A9E47D302A2524A151E191EAC4A670CC7EFC90649847374CB1B022D26AE4D984E6396A06FB5316F098C6D5A64109A44C2A32B294D216A50D76AE4648298FAAA76C890805BE55CAC86D896F9656439112E26A322DD12A65C0EFF003C8C9C9C6D7D657A65126F086BA9818CF8E63C98C983EA32F10EC3C7A6087368EAC1AF2F19A4A7865E8936B7C562A1DF261A648ED37518849CA4DA996071E48ED7BF31F4AF2D69F25D4AEA0A834AFB62583E6AD6FF00E7226C2732CF030660C40A1FECC8B38A3BCB7E7A8FCCF6F73717527A224A7A5BD2B8B7C53237D1CC5E2AF348F7AE2DF1627A87E63C76529B0869198F6A0EF902D8032DF2B79D6FEEDC0E478B7BE4534F6FD0F5096499096DCE2B4F4225E5E1F175C5691261936A4DC76E95C9034D13E6EF425FF968FC71E26C10B08CB698D9D02B739240791AE64E29381AAC3B3E3CFF009CDAD163D5FF002CA3BF02B25A30634EBB54E6C71CDE57578F77E2BCF2195DE43FB44FE1B66DB0F27479051428EA3E79921C39A1E41B9F9E6445A90A577CB83745FD98FF00CE2EFF00EB337FCE3B7FE6B1F28FFDD1AD32C7027F51F7BDD7162EC55D8ABB1558FD3E9C554B15762AEC55D8ABB15762AEC555315762AEC55D8ABB15762AB97BE2ABB157FFD4FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF87DB371502A2B98B4DF69C13D01C90554E3B7D19312094A275F8FF005609482B1EB8DA6F964225055E3625900049F0C9A014D110167327C238EC4FCB31F240B938E41EA3F935A8FE8AF31DB4AB2846332802BD413D7303340D3B3D2C85BF5FF4FBEFAC6876376AC1C7A43E319AF90A77DA722D34B906FF00CB573DDC3120663C8BB9C4367CFB35ACCF70B0202CDCF751D466392999A7A8E81E5AB7F53D69286408A48F0C62D319025EA16D3456B0085221D280E499DA4B7BA7C9A99268691EF418DA5E5DE60BA83439191E550D5FB24EF82D52DD0754FAE6A30B28E20FE396C0868CA1EC8564540C632011B31193B684ADC1624914DF738ADA94F1A985A8C09A614816C6CDB92C4D3BE282295046CBD01C55150EC77FC7154F22208EB8AAB2005AB9162533840A75C21923E351B64DB0146C69B64EC3208A89CF2A5698DB784EA17D86F90B54D616AD28722529AC6F414272242AA2CC01153898B0E0368F4DC546FF002C818B6C415F46F7CACC4B9116B953A9A7CF20634D91284B89000486195483978C84A4DC7C62AD4F7CA241C805B966AA1DFB65120C64C33569F843235413D86463CDA3917973DEF2BA615AEFD32FB6264159AF9A12ECC85815D864E2D5229249E6048924DC230AD01EB9686821F337E6C6A3ADEBF6F1D8D8A4A07A8DCD97B838086145E59E5AFCABD62E21ADDBBAF26E546FA0F8E459C43E91F2CF96E2D234B68AE18C92C207A2ABB9F7C69BA3B2AEA725EDB594AF65138918100537C5B8178FE9DE5BD66FF547BABE57ABBD547B64241B4483E92F2CE8A6CE18A886A06E70527883D934189F9AB73E86871A5E20F4069278F8904D3C7052F105C6ED89AB392DED80DB44B9B5F5BFF29B23BB91090554BE113C4C5AAA55AB5EDF3CC9C4D3A88D8D9E47F9E9A41F30FE5579801AC92C51B32C23AD02935A66C71BCAEB31905F8377711867B8848A18A46047FB239BAC3F4BCCE7152418076DBBE65C5C19858EBB9DB2F8B4A1580CB04806E8BFB2CFF9C5EFFD667FF9C76FFCD63E51FF00BA35A65A393813FA8FBDEE9858BB15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD5FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF874B265328CA593246507853C72259C513C07139596D0935D28562721D5279311BC929375CBA1C9A24BE0B90268E872F8F26013B9650F1EE72126FC68DD12FDAC351B5B98DB8B472015F6CC2CE36761A73BBF5CBF267CCA9AFF966D6D24903148C0A66AB287A1D2C9EF3A5AA3C9FA30AF10FBD735D91E8714B6615AEF96C695E6084C43E0998548F7CA29A739B7B3E89E598CC6B3247EA19D0034DE996403878B9B2EFF095959C5F5ABB70AA054A9C910E482F39F3AF9B340D26C192C028B85560E57B900D32B21982F8EB53D425F345F4CD2A91463C09F9E565B014C740B2D46CEEC39AF18D870F964E0C66FA4B4DB8379651ACB27C400D8E5B17166956A21E262886AA456B9634F54B2332383B6581C8835E9301B8DF0144D690475C0C694FF6CE2B48F85C01F2C569188D520D698AD2650B50628A4D633D314D23636DBE58A8B6D1C73A62E60E49A44FD37EF8A53BB6906D8AA64241B6298F36CB0241CB9C9149B5ACC1471AD2BB656BB2600823AE40ADA1A7038B37865534DA493C828731CB740A4B3C94AD3AE51272E054DAE1BD322BDB2892C8B17BEFDE73E7D32B71E658826968D7264A7535C21A2D327D2BD40401D475CC88AA42FE528A69099146F99015747E43B157E7243EA03D0787E38C92194DAF9574C8900FAA8DBDB20C9CFE5AD3CCA812D40F1DB154F57C91A75C45536C3953C3FB714A4375F9736C2559628F804EBFE75C8948445AF97520223A74C0A9FDBE962CF7036AD4E2A9DA32BC746C550727A49B03912CFA2025B845DAA3DB20D40EE827B9574702868466463E4E55EC93F9C6E3D6F27F986253F11B4947FC21CD962745AE2377E0879810C7ADEAA87AACEFFF001239B6C3C9E3B55F594A17F8E67637026B24077FD796171D02EBBE5526E0FECABFE717BFF599FF00E71DBFF358F947FEE8D6999D0FA47B9D7E4FA8FBDEE99260EC55D8ABB1558FD3E9C554B15762AEC55D8ABB15762AEC555315762AEC55D8ABB15762AB97BE2ABB157FFFD6FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF861D3DE432034DBC72964CB565278537DF2259C51C6600152C2BE19516D093DDB13CBDF23D5279308D403ACA3623C32E8726892193D65742548F039911E4C03258F9B415E276CAE4DF8D49039755A94A1AD7E5989945873B0BEE7FF9C71F39AD95CC3652DE0EC3893F3CD7658BBAD34E8BF49F4D9C4C12F512944AAC9E39AEC90779872A6B75045AA442EA420CF17D95EFB653C2CF24AD9FF94B596B3B6953D1FAC49C6853BA8F1C9014D111458679F7CD173E94886630F20691FDF890DC0BE62BB6B9D42E984E8E6366F858F7A9C810CC1645A779360216644E04EF9510CC1640DA298978C49CDA9BD30C42C98F1D46F6C2F56DDB946A4F4CB22E3CDE84B492C83BB0666DF2D69EA81876276DB261C88372321620900D3A602C8A0E414DFB604521F73B8FBF15A5652C3A0C5691F1F2A2FEBC56933849A5295C569348C9D85715A46AB506FF004E290162960DD3E9C5BC724C627A002B4F1C529DDB38DA8698AA6AA4F615C5239ABA1EE72E6DB541280CA396F5DB2056D324B903E127E2CAD6D7CF23189FC29D72A9A82C7AE255E81B7F0CC72DF0293DC39505A9D3289B95028069DE9D0D3C7289A494AAE999D08A6F5DF2B699157B5B55600D37C21A93AB6B3ABD38D76DF3222AAB3D8AEC547CF3202A360B3429B10580F881C64C8223EAE9F6792FCB20C913069A240EC08057ECE2AEE735BBF02E062A8EE64C4C18862DD32254242E8166AB0A6F812A978C161AFE38AA412DD98E062AD52062AC4DB54B862C0D46E72126CE88492FE43B16A6443472288B5B8E714A7957A664636F32F4A035894C9A16BEA4D57EAD257FE04E6CB13A0D74DF86DE6D503CCFAE85DC0B96A7DE736D8793C9EA0DC98F053E199D8DC19B9CAD3AEF96171D06E2A76CAA4DC1FD92FF00CE2FFF00EB347FCE3BFF00E6B2F297FDD1AD333A1F48F73AFC9F51F7BDCF24C1D8ABB15762AB1FA7D38AA962AEC55D8ABB15762AEC55D8AAA62AEC55D8ABB15762AEC5572F7C55762AFF00FFD7FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF85DD35C96DF2964CB6023E1F9E44B20BA47FDE1DFBE5526E081BC7A2935E8323D527930FD45CB4887BE5D0E4D1253673CE1073223C9806516854C237CAE4DF8D12618E343336FDB31E4E66366BE45D767D175482E623455606BF7E61E58BB1C137EB17E5579EA1D734AB485E60D23280457E7EF9ADC917738723DF2D678ECAE638E75062946C7B6F94F0B9B1DD1535D496978CF6BF0C53281B63C283B21750D223D6007B800D7C7224282803E4ED387A4428AAE4086C05192E8F15BC5C621B814C810CC1632F697AB3858A22EA7A90322366576C7353F2BDE5CDCA4E632287241A26C820B0921B658DF7232D691CD4A5B431C6C476C9872209210DC8961BE02D94A72313B605E15200814C5695D6BBE2B48D4278A8F6C578531B76E9B62BC29B420938AD261E9B1FA714D2F119FA462D815D63DE98A53680D0818AA6F149414EB8AAE6980D89CB99F12D5605948EC6B5CACAF12A7D6292EE77C815E245CD755888F11954D416352CE7D43ED98E5BA086B89B92F1F1CA66E5C4A5D24C146E731E4A4A57713165F8776AE56D5229B69DCDA95C218B2AB5421AA4F514CC88AA37EAE5F71D33202A8C917A2373C6BB63264103FBB06A64A78E4192610DD451A37192BE3BE2A96DC319E4E4B21A0C551714AF1B202D514C894847CBE93A87D8918158F6AB72681074A74C55894D73C636538AB16B9999559972326D1F4A4C2EE477A1AD322E393BA716F70638580EAC4664636523B286BB2341E5FD79D8F10D6B21DFFD439B1C4F39AF93F11BCC8E24F30EB0E0D435C3107E939B5C3C9E6729B293667637126A2CB5AE5A5C7502BBE5526E0FEC8BFE7183FF0059A7FE71E3FF00359794BFEE8D6999D0FA47B9D7E4FA8FBDEE79260EC55D8ABB1558FD3E9C554B15762AEC55D8ABB15762AEC555315762AEC55D8ABB15762AB97BE2ABB157FFD0FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF85EB109D5771E394B24EE19497451D3950E44B208D724C840F1CAA4DC1037B50A4378647AA4F263B7B18AC6C72E872689206EC51A2653D32F8F26B08F82E48A440FEF295E39093918D3FB23F595759AA225EA7FCAED94172E299412FD5A2223FB75F8328C9172B1CA9F48FE507E663685756D0DE5D985C90B1A13B577F7CD7648D3B4C3983F4F342F325A6BDA35B5C3DC235D7006300824FE398C767698B202C860D46692358E54A18B704E0B05BA62D35B6BD77DBA0C890C63128A79D8107964086D102AC932B00246DBB9C898ADD2296EE2B643E8C425E5BB31ED95914CE3BA167D4A2991B946108F6C431940B13BCBC049111AD32624D3E19B4ABEB13382AC2993130DD114974E3892186F8DDB6092041DCD46D8AF12E6EA4D36F1C57897091456A715E2565993615C578C2656CEA69EF8AF104EEDA4407738A6C27B132151BE295540189A62CD1023351B7D38AA24232D0914C55148DD29D31559373AEC32DB544DB9A0F8BE9C812869C7C7C874F1CAC94B6F229000395CCDA84AA68DB996A6DDCE63B7C36414CE95A577CA66E540A45792D09DEA331E6C88B41C2FCE4006E7C32B6B9448DD9259C81283A64C45AF8939FAD3715E0475DF2E0BC4135B7BD2A9566CBC49788295C6A1137DA3CA9D4612CE26D8F5F6A9044A5AAAB4DF761FD723C2CE982EA5E7AB3B105566524D796E36FC71E15A63C9F9AB6B1D47A8A5BE63FAE34B4A4DF9AE92238128592BFBB507AFE39190544695F99324B308EE25A027615FEDC8D26DE956DA8C1A8C0662D56E831A5B63BA93FC7C23A927B531A543456723C3FBD4A313F86464D8262A90ADA70462426F91693024ECB5ADCAA0929448D8733E19763906194F0879FFE736BA343F26EA571EA7A69776AE96EDFCCC54803EFCD86298797D76404BF1AE617524D2CB74BC6791D9A415AFED1CDBE290AD9D1CE24EEA7C18F419990C81C498A5AE8C06E2872EE305C7A52E058ECB5CACEEDC1FD8DFF00CE308A7FCE35FF00CE3C8F0FCB3F290FFB935AE67C3E91EE75D93EA3EF7B964983B15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFD1FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF85BD3BEC652C938B6FEF53FD6C89641399500ABE5526E090DF3B32B11D40C8F549E4C7AFDE4E31FE397439344905217668C78E644793584C2C406BA27F9475CAE4E4637A6796B49FAFD95DBA0E455AB94D5B951E4C7EF266B5BC6B775A50D304A2CC4D7C26EBD7496194C7E97C48D5EF985931B918B23EA0FCA5FCDFD5B48BEB6B6D4EF19AD9481F131A537F139833C4EDB06601FA51E59F3FF9775DB2B764950C8CA3910457F5E53C1C2EC6192DE8D0C7672422789AA08AED91B72E050F34C84A88C74FB59025BC6ED2C8DF3F0C899354A289496A8CBD2BDB21236CF0C50922D011E390A6E314BA4B22416A634D44255246633BF638D3021033905B7F0E996C5ACA0682B5C92AC734247E18AA8337BFCF1572B74FD78B594CEDA6A0A62D914EADE652462CC325B6605462D89B4282A3BD71668EE031558ED8AB68DD3C3155772A77C9AD2989950100E56534A46707A9C84969A1254D474CA8A40DD648F5539516D8A4B350354E5126F821258048390DC0CA26DF14B638945C71E5C4D3AE463CD728B8A6358E05E4641B75DF2C70F850ADAC5B16E0660BC4D6B5C9C53C0D4FE71D2ACA2224B95A8F7FEDCB578581EB3F9B1A3DAC4FC640C4D42D3C7EFC945B2029F38F9ABF379DE597D19DD63A9E95FEB926C7906A1F99CD71EA52E9AABD4127FAE2AC557F301DE46ADD356BE3FDB8AA656BE75BD915E4B79CB2A1A36FDFEFC8C9059D7947CED24B7F18BB6661C803D7FAE455F61F973CE960B68891EE0EED5F1C559347E6182E6752B106A9C55939B95940658F8823A64486A3CD0CEF5AFC19590E4C64A2FE9B2FA4C2866EDF2C9C22E0EAA5B3E40FF9CA7F308B7D046911BFC71A9F86BF3CCEC71793D61DDF9A864E681D8FC4D527375861E975929521B91AEDE399020E26492E33A13C5B7236CB40A68B4D2CE28A4EAB9600DA0BFB03FF009C6A017FE71CBF2000E83F2DFCAA07FDC22D73363C83AFC9F51F7BDB324C1D8ABB15762AB1FA7D38AA962AEC55D8ABB15762AEC55D8AAA62AEC55D8ABB15762AEC5572F7C55762AFFFD2FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF85CD3C715A1EB94B24E228DC303B75A8C896514F44323C058D3EFCA8B70499EDCB24B5A647AA4F2492F638CAAFF91F6B2E87268925A5E07F8D2B48F63F4E6447935854B3E4B73327ED15247DD95C9C8C6FA0BF26AC66D5D2F6D22512486A287A6541C8E8C6FCFDA1A586A5710950B75093EA0ED936B32A79F192E1220A4D2A39291954A1698CD562D4A485158BB2C8A762329389CFC59DEF9E40FCD2BDD0960334F2B46E42F52694FA7313538A83B3D36A1F767917F3C6C350B782092EC06A00431A78660183B5C595F44693E60D3F558D7D39939103BF8E53214E7C260B295B66E21832303D286B94CB666775DE8488EA781A1F6C31DD944D35246EC6A23603B922992A64648A11A98B8820B569418D06B24062FABC2D683D4996887A531A6B25884B751B92C84D0F8E16050F57FB5514C285BEA57BEF8AA9B9F7F962AEE42837C5ACA2612716C8A3A17756152298B30CB2CE71C455B16C64115C28A55A9418B3470B943D0E2AE3206E877C55B57A0F7C5548CFC07C677C9B6D20649CB37C26801CACAAAC659B71D32125562DC76AEE72A2AB7983515DF2A2CA2955F3D15941F88D29944B937C1A8A4021F8CEF4CA26DF1631A9DD7A3C9D1A86B4C8C39B29724A9EEE49E3203354E58D54C4758B3D4562F5226DCB5363BE4E2B4C2A5D0754BE722494F1EF56396AD05A7C8B6654FD61CBB1EC7A64A2B4935E7E5C79767564907C4C3C324AC0F51FC93D2262CF6E7883526BB62A935B7E45D8FA9B9A927AE2ACCB4AFC83B510CCFEA705E42A323241677A0FE53E83A5C81A62A597C722AF51B0F2BE90CEA96BB1514A2F4C55153583E99708A895DF638AB2386FDFD3459051FC3034CB9A2D6E19876C8F0AF1D34D342CF1CA4F1FAA2B35D7CBAED9918A3BB81AAC9B3F327FE7257CD967AF79AEF2D74D9DA48E0E4AEAFB6E2BD33638F1BCDEA4D97C82C5D763D3B66E30C7D2EA66511000C4572DE4E24CA356D6126BFB44EF86D880C92C2CE20061E26F8C5FD757FCE3780BFF0038EFF90AA3A2FE5D79580FA349B5CCE87D21D764FA8FBDED19260EC55D8ABB1558FD3E9C554B15762AEC55D8ABB15762AEC555315762AEC55D8ABB15762AB97BE2ABB157FFD3FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF85BB6F848AE52C9904352B5F0C896514D3D7E36C77CA8B704AE3943AC9BEF91EA93C921BBFB2FF004E5D0E4D124854D2198FF94BFAF2F8F2601358471B966F18FF0086424DF8DF5BFF00CE24D8A6A7E63B9B6715564634F7198F234E544585BF9F9E5A934FD775396342055B7FBB1136B9C1F3100C614E4370B96036D06C20E54F8078D72756DB09334D247FA1C629B9EF9467C761CCC597853D827BFD3254B8B6BE642A6A141CC09E27698350F58F2A7E73EBFA4DC470CF3B988951CABE14CC49E276F872BECDF23FE7858DD476EB3DD8694815527E5ED9893839A26FA16D3F306DEFE28A55911380A28AF5FC32318A99D2723CCC6F10233A229FDAC970A0E54AEEB5C834C9030BD578C8E4C6BDF1E16A395E4DE74FCD485A64B586753DB63FD98F0B039103A66BAD7D124BCEBCBC30726C89B4F45EB1A2F2DCE2CD1092357AE2A88F888EB8AA834850D3C31605562B923BE2CE2895B86AD6BD716613AB4BB7000AF5C5B03238AF8FC3BEF4C59A651DD934DFAE2A9925C57BE2A89593E1FA314C79A065763BD726DF4A22BD7E9CACAF0AAACC13BE424BC2E6B8AFC43B6545045209AFB8BF5CA8AC50571741DAA4F5CA64DF04BE7D43802AA731E6DF148E59BD77A3FD9AD4E461CD390D04F6CCD998C291BD32C71B8D4EE6D2240640BCD5B6E3FC72617898FB58A732E4045EF962F1A51A8CB688AA88FF001D77C9C59C656C3A7748E4E6D27C35AE49938EB9A728547DC8C55522D734F520C7154FCB154C63F30B49F0C44411FED29DAB91920A5375AAF2B9553217A9ED9157A77945B99568C1E05A8D5F1C559B798AC80B713AA0E406F8ABCDE3D44F221CD181A53080E3CCA6D1EA238F5C20346495060DF999E7087CAFE5C17AB2859EED1C15AEFD08CCCC31757A89D87E54F99EE6EB5CF30EA3A93312B2B311F4939B5C50D9D266365881B52546D999195075F38DABDB5A9EC3194DA2504F60B08D8AF8F7CACE4651C4CBAC3490C071E9E190395CA8627F58BFF38EE9E9FF00CE3F7E45C7FEFBFCBDF2C2FDDA55B0CDCE23708FB83A3CC2B24BDE5EC59635BB15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD4FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF85884F361C76CAF8536C96DC111904D6A301816424D4A58C5C075A65462CC6441C41E1560CA5C9E80654765394525D76A423B31095ECD96E336D12CA18F05E69242AC0B484107B6C733230348134E0FC0EA6849910814F964278C86F84DF60FF00CE1AFA8BE6C997890CB5427B6F98594539D8657B3DBBFE720B44F56E352AA8320526BF40CC7E2A679214FCFAD422F413895A713C4E591CAE14F6485D8351286B5CCA84C14464F40D0A20D0C709A127BE3964006F88E264377A544A16AC797E19892C81CEC008418B78D5951D6BE04662642EDF164A099E9E2EED2E565B29CA1435A1398920E58D500F50B0FCCBD6A0F4E192770F0ECBC4ED4F7DB2996CCBF3024CDED7F37358E01259E4E245363FD991B41CAA7A97E61EA7771FA705CCD461B963FD98DB0F1187DA6A375A8DFA09E4919F97DAED8DB1337D27E58965B5B3854B971D70F0DB958A7419A457ACD2AB576F0C781B78D90C37CB51F153E79122990926B15CABAECE3E9C090B6491493DCF8E282143D555F1F962C86C8859EB4A57DB1640A696D24840DF167C4C82094556B5C53E204EA09169DF14F1A3A19949FB58A414DE27523ED8F962C816DD4788A0C9B68CA165630A41EB4D8E40848CA12C9E4E3FB5F3C810CB8D086E9551AB5395485053249E694B3F2076F0CA0C911507B8526B5E998F2986E8EC954D3879295CA8FA999CA229B69D6F1CF22ABF422A708853564D4090A6616FA65804AFC5CA985C7F1107776E2353E99A8EC3240AF88C3AFC4EA181A508E8327C6BE2306BCB3672F20635EA41CB319B6DC79186DFC7292CA49A65DC2DBE284858411732558B1E95C7857C5097FE9178643C5453DF1E14F8A11BF5DFAF71E6CD13A0A2F1E87E795CC5309660CAF42B41EAA34BFBDDF6AE52649196DEDBA3AC91C6A21554A374C1E2065C69DEB17D722C9A3908269D7263763E2878E3CB28B89030DEB52C3A53261C7C99022CDF47042D34AFC238FED13964604B87972BE3AFCEAF345C799357B8D2F4F98FD4ECA80723B1AD6B4CD861C6EAB3650F99E6B7BA8AF3882BE99D9877CD9E3141D5E49A0EE2DC076006C3265C594952DA2A76CAE450236CA34DB28E591405353D7316526F8637AF68BA242630596BB6527239718BFA78FC884117E47FE4D443611F91BCBAA07B0D32DC674FA7FEEE3EE1F73CBEA3FBD97BCFDEF56CB9A5D8ABB15762AB1FA7D38AA962AEC55D8ABB15762AEC55D8AAA62AEC55D8ABB15762AEC5572F7C55762AFF00FFD5FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF858B4FB432AE36EF0D94C1F6457A77C789061488210F4C89DD81539220637E0C15E9F0B7865660C244524D756F13A52693D47F019761C6E31905B67E5ABED43F756D68EAAFB89E9B0A66C61065198B425DE8B7BA7DD4114CFD036D95640E66220BEC4FF9C378DD7CE37019830E62A335D99D8E10017D63F9B7A7A6A3AB6A7005E47D36DBE8198526DCA6DF997E77B23A6EAD25AB0E2A0D7200D38138B07922A10C33271C9AC459B79526E573E9B7602992CC6C3958B67A75E5A7308CA3A8CC493B0C692359B89375DF28C8E6C792BD9C6E26238E63C925131C00CEC5C5083B644C6D946549998D5694C1C0CB8D1B1395E31815AEF8F02F1BD5FCABE5F49D16764F8BAE3C0BC4F5AD3A16810474D94ED86A9CAC4764E919B983F7E25B814DE201A8CCD4272A93644A690F1029C8E41B0146FAD40003B0C5928B4FEF8A559273F0D4F862A9A5B5DD286B8109DC57CA08DF0B105358F50403ED7CF16C051297B08228F8B3051E9A8A01B3F4E98B3B6CEAC4FED64896622B7F4913DF205988A067BD249F8B204B608A0FEB47725B6CAA6526282B8BC201A1CC599445269AF5FB5731E4DBD17DAFA93480F63928868996716303222B74DB2E1071AF74EA3770295230F84B6A53B32AF23BD71F097898EDED5C1F871F096D8D4F0121885EBD72CC71A6C81B63B77A6990310BB9AE5CDAC12FF4AB80CDC50D0F4C558EC9A3DE3BEC877F6C551B65A2DE8956B1B52BB653910636F54D134C962319910E6290D9183D46C42C7C05295DE980067253D7A655B76DFB665422E34CBC8AE2ED959C0FB3FCD968838939879279F7CD7E8594D630B9591C1008F7AE5F8E0E1E49BE6986D2E66B998CE4C8EC49673EF99D8F675D96492EA9A6709AA13BE65C4B8336373E9D234AD45EF84968E04759E8D2B015427299C9B61167BA2E84EAF1931F5CC6939110F67D1F4BE318F87B65326F8BFA35FC955E1F937F94A9FCBE4CD047DDA7419D5E9BFBA87B87DCF29A9FEF67EF3F7BD372E69762AEC55D8AAC7E9F4E2AA58ABB15762AEC55D8ABB15762AA98ABB15762AEC55D8ABB155CBDF155D8ABFFD6FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF855B670AC2A330CB984B2785D5A23C4EE46C300938D3C8037146EC0D640A57B1EA73271C6DC59E7013FD17CBB7FAEB98A106353D588EB9991D3B85A8D50112F59D1BF2CACE1557BF01993724E5F8F03A39768B3EB2B0D26C08B45317A454D401F16C3C732BC3D971F68BE7EFCC1D3E117D1DCDBB5631C8041D7BE60E78D3B9D2EB789F437FCE1B5928F37DC48C4A6FCAADEDDB35595DFE973F117D6DE76B8853CCBA848F19742AC38FDD98530EC4EEFCF4FCE7D0AE26D50DF5BC263889E5D3AF4DB292D5283C3230655657431B275AF7CB612A6A31A651E578C9BE1C5A94A65933619E30F7148792460EFB653273F1AF4B1ABB029C89E87C3289B9B16EDB4CFF004A3F0F5F6CC7924A3C6845A6E741D7A530C5814DA3F2DB4D4A2D3DE99246E9B59F955DAE230141A7B62BBBD7748D35ACA255DABE00615B2C9238C83C9969ED95973709D912B1FC4081F31912E48298C7C788D8E552660A2D08A743EF90660AA7A95D80E9D31656EE05BF6A98A6D772A7C35E9B62B6898A4E3D4D7145A244DDF9D315B442DD11D1B1640A3E1B84A8AB6F8B65A6D1DC42109A9E98B3077524BA534DFE5809724144FAE0A9A1A6DB6449660A02595BFDF832A25B0150FAD71DB9572B994CCEC8692E958D28731A4D112BE38BD42083D7B656D97B325D36D5415240F965D8E2D332CC15408C00287C732E107189B2B7E207ED5465BC010A95E638B0AE3C0150B2DB07E8B8F00543A699CF9D453C32328D3762431D138B54D18785320DE8693CBF0CE45502D3C7156E2F295B83560A47CB154CE0F2E598707D351C4F865536704CA6D16085032D001945365A47724C33A90A7805EA3C7271834E4C94C63CC5A8C0B6EDC9E840DF3371E375B9333C3755D61A4574B67F1ABE640C4E064CFBBC875ED367D4A61297F881DC9C988538F3C96A56DA488630CD1737237232D8871A52B492FF00449A798BAC3B78658254D2425FFE1E666DE2A1F9644CD90C6C86C3CBDC40AC5DBC321C4D831B38D3F468D387EEF7A6F9592D822CEAD2C5234038819596603F7D7F27871FCA4FCAD5F0F286883FE9C21CEAB4FF00DD47DC3EE792D4FF007B3F79FBDE8D9734BB15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD7FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF84F5A9238F5CAA50699EA135805C2D19413C7A0F1CA841D7E5D4BD77C9FE4C9F5955BAB9531A36FB8A7F0CDAE9B15BABCBABA7B25BC363E568B8428AD2D3E13B75CDC474FE975F9B54642929D43CD1733551578D7C3251C4EA660B1C79EEA4E530908600D30CE1B231715A437D65F5A82269F76DFAE6A75317A5D04097D2BFF38A5603FC513C69B50F519A5C8F59A4818BDF3F32C8B6D7EE550D4EF503E8CC4C8EDA06DE35E6CD274ED634C8E1745F5C2F2DC6FDB31645BC45F0F79C3499F4CD4E482088842DD40C6326A9C55BCB703DBDDC25B66722B97036C22FA334EB45963889EE06093998D91DB69F1FA87E1AE5191CD8F245DB5845F5ADD46512E6929EC1A746D253877F0C8DD2631B66365A3C2101283071B2E0641A7E9B6AB2F22A0536C7897813496D944AA517E11D71E35E0463C28C415E94186DB63B2E580602DA0AA88B88F6F0CAA4DA0B74A641902A65A84D3164D09A9D7155F50686BD77C55DCC0DB90C554DA6A54F2C516A26EE9D1B16C06D552F883F6B0330518BA937F37E3859834AE97F4FDACAC96C1345AEA15523976C812CC4D4DAF474E5BE544B671A88B82CD4E5D72124CA7B2AAB0E42A7BE504B18B23B331FC3B8C039B6B27B39A35A6F9978A2D190A73F5D8F8D2BBF6CCBAA71495CB728DB636BC4ACB301B8F9636BC498DB3ABF518DAF126255154103AE4265C8C25AA467ED0CADC97048491B0C5556910EE31550692256A823DF2B9ADD216EEF23E34AE5643194D846AFA82420B33058E952C72EC637703365781F99FCDF662678397A8A4D0919B2C7074D9B3BCEE7D5EC0C9584D10EFF004E6588389E2DAFB7F4AF4811906B80C11C68897479C39A3D01E8BE19514A9FE8B71F69B204A695974DA007803EF4CA8C9CA84764C6DED78EDC0636CF85905B45180BF08069BE368213650028A0FA3157EEEFE50FFE4A6FCAFF00FC04B44FFA80873A8D3FF771F70FB9E4753FDECFFAC7EF7A265CD0EC55D8ABB1558FD3E9C554B15762AEC55D8ABB15762AEC555315762AEC55D8ABB15762AB97BE2ABB157FFFD0FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF85F8ECA6827585979C84FD919084FC474B9674F6CF29F906F35036D773218A18D833A95FB437DB719B1C3A1E274FA8D43DA2E0C763686D6D2216DC06CE3BE6D30E8F81D5CF2F11610F34D76CEB212EC8767CCC3300535006ED2AB986E56455F4CB03FB54CC7F1699CB7539675B32AB335030DEBB532B9E76EC1877633ABEBD05BC4817E3095DEBE39AFCDEA7A8D0E301F49FFCE3379B34BD275C3753CAABF58466DC81C4F875CD5E6C342DE931914F72F3ADEC17BACC9A94171F5A4B9DFD21FB35CD7CE36E44254F2DD5E40F74AC253188D3E28FDB31A78CB951C8F3BD4BCA69E67B826C23334CBD471FEC395F0D322049E6DA8F93752D03518E4BC89E28D5BEC95207DF4C2254C6389EA9A33F3B58E48979851B8C4CDC884699569EEACE6BD5FF000CA652722324EBD158255940E61BB6545927D6AB1D43EDBEE47865728DB644D32A8A7884600F0C1C0CC4ADAFAC952283BE3C0DD18DB27B39964B73CA3DE9F6B1E06C186DD1A90A6A77A9C9C62D528515707AED84848D950380A2A37CAA41902A4CC7B0FA3214CC490EC549353438190921A42AB53CB14F1297390814AD3B62B6A2C66F7EB8ADA8BCAE2B5E98AD201E46AFDBA62C97FAE07FBB2A7BE2CB89DF5C03ABD0F8E02CB8DB5BFE34F8ABF4E506569051B1DF7203E2C896C89561755FDBC8D3305556E7810FCAB4ED8382D24A252ECBB57A7D39138523252716B7C626525B901DB11869978CC9ACEFD64A7C5C72F87A5AE53B4DE394935E5B53AE5BC77B35108B8EE82903957DF229114CEDEE62E5566E43C3DF1663127705DC0A2B8B3181305D460208A74F7C05B618F854A4BF87C46001B2D06DA8C6BBF2FA3088ADA1A4D622029CFF001C9702DA17F4AC4C681BE23D05729CB1A5AB405CDD731BBF0F01918C2DC7C9B3C4BF35FCCF268FA60B6B78DEE2F27158E34AF434DEA332F1E3751A8C8AFF00959F947A8F9D3433AAEA90B5BFAA2A3983B75F119B1C717499A565BD67FE71E6F9B549EC74CD4B9F04E6005EE7B74CCC842C38E254C2A7FCA7F39795E57730C9731C7D5829FE991941B23240C3785A76B4BD06DEE22DA507B6634E0E4455269E35902A2FAA9DE40731CC5B8056F5410027D9FD939518B9319505E8CE36AE222C84938B13CC8A8E9D708091BA7885760570A781FBABF947FF0092A3F2C7FF00013D17FEA061CE9F4FFDDC7DC3EE78DD57F7D3FEB1FBDE8797343B15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD1FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8D2F23F91A57BA4BFD6D6BC0D68D99B874D4F199B556F6FBFF00315959471D8E9F1AA0A7024019B9C18F85D466CD6C59E49EF25615E4332A52A0D50DCB2DF2D6856B70C52551CE43DF31324DCEC38B88D3D353C81A7CB0F32AB551E03FA663193B0FCA3E7DFCCDF2B2E9FEABC7B2C7E1F4E53293938B4F4F9C6F56297D485DF7198E64EDB4F0E146E83AFDC797196E2DE46AA9A00091D7E9CC6CDB876719D3DDBCB3F9BD24F2C31DE0DA94AB1FEA7308C1B0667B4D94D69ACB0BD12208D97E3151D3289636F8657A07911B4F7D723B3D2E146909A39DB7CC738DBE395EB1F997F96F6BAE687305B355D42DA332D55454D47B0C8F03938A76F86AD6E6EFCB17173A65F42C9F1955E429DF0183920B2BB7BC4616F2C5B16DDC65660CC165F14EB3463B9032071B30532B566E2C3B83B65538D1499526D019BBD6990E16719A6917C5DBA63C2DF19A6D6F7CB1008C7E8C785BE395344BA420107AE061396E881329C892A0DAD663C8D0ED9592CC054571DF2BB6C017F2B7FDA1BF7C2A8599ADE876DBBE2A82372A361D3A0C5541AE7155295D4AD477C52934EC6BB6D8AA0C87F138AA8307DB7380A43AAD502BB7865062DA0A3E1269D7A60A6C0510A5BF98E34D80ABA3316515F98C69369846687AE16B4C2075322A96D8F7C55328A7F498156AD31564767AA23108EDDB08544B5EC55DA4FC724C81444378A5A9EA7BF5C2CC14C92F401F6F6F9E06C1277E9458EB593AEC37C84CB6715A849AC27412F4F7C8829421D6A25AF292BE1BE580AA026D6226DC3FE39602A841AA52B2C64B329A0032AC82DC5CF9B81E8FA0797EFF00CC36DF582AC8AA3AD30C62E064D45B23D2FF002E746D666FABEB1682EAEE27FDDB915A27874CCCC61C0CB2B7BEC5E5C8B43F2FBD969AA96E889B050053F01997034E0CE16C3BC93A446D35E6A37975CAECB32853E03A665C25B38C63BA6F3C3CEDB526BEB5496201B83151EFED82526710F942FF00F2B62F34EABAAEA1631FA2F393450294A57DB31E45C8807897983488FC97713E9FA8CA1A624844277CA0B7C52BB760F0C4E05030A819590C81A45AF5C14CC14D74F6F888F0C7859829D237C58D3305FBB9F945FF0092A3F2C3FF00012D17FEA021CE9F4FFDDC7DC3EE78DD57F7D3FEB1FBDE8796B43B15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD2FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF911B5D4CA4450905BBAE74F1C603E6D3B48AE67FACCEA900FDE16A6D9682038A626D9EF97B49957795D99CFEC9195CE6E660C6F47B1B58EC87AAF540BB961D4661CE4EE74B87D4191C5AFAAC65616692836E5B65066EFC600F1FF3E4D71AB45708F1045607E21F4E5329B64703E3BD62C6EECB539792FEE8B1F88FCF31CCDB04292D9AE9C158E18C484915AE57C56C8DA31A49596358E416F21EA54E44840059C68FE69D574B44824D51BD24151F16E7D8E63C837C6DEEDF96BF9A30697AC437F733A5B98C8A9E5D7E798F272216FBDBC9DF9E9E4FD7AF7EAF7B7111F56309212474C003978362F14FCFAD33C9F3EA31DFE8572B34929E46314A54D7C301736DE23636377C39471820F5F6C8101B0499559B2DBA8F59E847619590CC14FAC751B37996105CB374DB6CA671B613932D59618940988453D0F7C8F0A04D136CD6F2352390BA9FDA1BEFE18385B064A593E9D74D30689498C9DD8E3C2CC66461E76A80354A81BB65538EE9F15B87528DDB846416F0272B316C8E54DE3BC454025A06EF4CACC5C98E45296FE05DD4B37B5321C0DE24BA2BC570095007BF5C8B0326E59EDE9BB004E28B4B5E48F7A1A8C56D41A44DF7C56D45A4DB167C482797AEC315E24135C76A62BC4A06E0D7A75C4A89287AB43D72921B414545734A53E9C785B01B45ADC8F1C785982AE2E42D0D7A74C14C89D95D2EEA2B5DF035DAAADD92C17953DF15B4CE0BB006EDCBDF15B44BCE78F247A3FB6109050E2EEE01FB44FD392664A69697B329A93DB147123FF4A3014240FA71533A434FA846D148EF394310AA81DF018DB28654A6E3518B9DBAC324B2198D1CD3A60106CF142A299A4BC92D622F2040086237DF2622BE28651A77947CC5A9C4F35BD83945E8C4102996082F881EB3E4EFCA9BD9D44FA8388EA7918FE5898BAAD7E4DDF4559E9967A26872A40024C828A0EC09C9083AFE3280F24DBDEACF7535F5BA2C8EC5A075DFE1DE997C4522ED966AD33DA5A4934D2963312A213D299785E152D23CBF696D62D3ABB191FF007A2BDCB76CB449A670DD4BCD4C2CF402DC4249715529F3DAB80C944698D7953405B5B06BB9A61140D1C923CDFB5D2BD32B25980FCBFF003D4B379FFF003D6EF4486FCC7A769D39ACAA7ED509EB9021982FA1F54FC9D96DF4DB7BFD27525BB9258C39B52C28BB0D85322907778AEA52AE8F70D677C443780D046761F7E2C814CEC599516534A30AEDD30365A6515E425FE26A7B61676FDE9FCA021BF297F2B997756F28E8841F63610E74783FBB8FB87DCF21A9FEF67FD63F7BD172D68762AEC55D8AAC7E9F4E2AA58ABB15762AEC55D8ABB15762AA98ABB15762AEC55D8ABB155CBDF155D8ABFFD3FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8EF578F9B5C06FDDBF4CE9B8DE267A6651E54D1967BAFADC9BA72AAE552C8E29C1BBD62DE25826E4AB45AE56656E6E0C28FB8B9068427241F697C72B9F276F871F0EE94C97B4256184257314C9D96395B10D522BB9CC8D23058687965129399116F07F30E857BACDF35B58446572D4F8728949651A4E34BFC8DF335FC6918B3912693756A76FBF2B126118D966FA67FCE2079E3569D2425E28DBA7F9F2C4C9C918596BFF00CE13F9AA29D1E5BD255853896E9FF0D944A4DD0C4CC2CBFE706B5A9E359DB5858C2EECBCFF00E6ECA2526F8E265563FF0038CDA7E8171691DF7994594A8F4F50494E4476EB91126D11E17A95A7E487956EAE62177E6E597881D6407F8E032660A7179F957E4CD35D2DE1F32C444A28C798DA995993602A69F929E539E932F9A6293BF0120C812D82491F987F2C348D2EDBEB1A7EAA048836F886E7EFC46ED3964C33FE55FF009A2FECCDDDAAFD7517A01BFF001C970B57131F6D13CF3A6481DB4B6B5B68FED02A454F8E3C28F11136DE77BCB598417D6E4229A31A634BE2338B4D6B48D6A25442179EC6BE380C2D81CD45BBAF28385F5EC65A93B8A1C81C6DF0CC92CBA4EB91A13E9B3D3BE40E37331E54BCCDA9DAB7EF6D0923DB2BF0DCA8CD53F48A85E722346C7ED2F8661CC516CBB516D4ED5BED311F3C82AFFAEC741C5B63D3E58AA8B5E27F362AA2FA82F4AEC3BE2D96817BF5AF5DBBE29B59F5A88FED62B6DFAF19EF8A82A2648EBF6BAE45B42BC6CB4FB5BE1640AB2B8DB7C0D815B92D3AD70164AD1B0A75CA9AD7F2DC50EF8551D0135A5715477A8513956BBD310CA3CD6FD61BAD324CCA9BDF49F663EB8B548A3ED2C750BFA705635F0C5ACC99E795BF2D359D7F538AD591845506507C0FD396E38DB0964A7D476DF933A0D959033C4867812AEC7B6DF3CBBC363E2A47A4F937C9BA5DEDDEABA95DC29145BF027AF1FF006B2C18D7C5629E7CFF009C98F23796F4ABBD13CB56714B76A0A0950577029E1ED93F0D7C57937E5BFE746B779ACC375AC4AD0E9CC4B70EDC6BF2C84E14E3E63C6FAAB53FCD9F25F9AEDA0D1F43981BDA8590AF5AF7ED80069E07B5E83A3AD8E9B6019FD4927456E47B03DB260278588F9D0BDE6AB67A65BF660580C902ACD043E8C3A7C1D2A02B8F96264C4861FF00987FE997DA7E996FD178F35191E2470A335A8DA0F265F5869B66D3EA4B6CCA0815DD908C921F9C3F96FE439FCB3E7ED77CC1E77D224852EE6768DCA6F424FB9C3487D831793349D5EC21D5BCBBADB441E3E6D64ED4E1ED4C348B7E587FCE45F9ADF47F3B0D3667A346FC5A64F6A60E1660A1FCA5F98F1DD086D6693F771A84563DC78E34D80D3DA2CEEF4FBD50F1CC391F7C69982FE81FF26E83F287F2A829A81E4FD0E87DBF47C19D061FEEE3EE0F25A9FEF67EF3F7BD232C69762AEC55D8AAC7E9F4E2AA58ABB15762AEC55D8ABB15762AA98ABB15762AEC55D8ABB155CBDF155D8ABFFFD4FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8BED12FA6D457F46FA12ADBC7F626A7C47E6736E72BCD5193DAFCA1772C114D67796EF4894FD51E31D5BB72F6C899A63A6B6609AB5DA32C37B6E2DD587C2E452BF2C78DCDC5A4012093CFBA5D95C5C4123AA9B7157693A7EAC13C9B39630D30CD5FF003318397B28A39E2ECD18AFF0CC4326D863A62B73E79D575085C4517A61F6F886DFAB29949CC807D51FF38D7F96B36BF24BE60D7A33C62F8E30BF64F43BEF98F29378C40BEE7D22C74E69E9269D0C76D07C10CB1AD18BF45AFB655C4CBC1E1DD9E8BFB58ED1ED0C421BF857933462881478E266DF8E16F93FCD9F9B3A89F3543E5DD06E92E5E7904370EC6BC2BD48DB2894DCD86114C9FCEFA4EB5E4DF2D0D6EE7CD33CD77749CA3B3864DAA7B5331A536C38E9E45E5CFCBEF30F9C746D43CE7E64D66E20B0B2532DB425E858FB0C89C94C463B64BF967F973179E359223BABDB6D26DEBEBDD31A6CBE06A32072527C17977E75585B796FCC53E81E54B9BBD4A68BE15773C8F2DC640E56DC7A7B286FCAFF002B79ECCC351D62C6F9A0421B801F0F1EB959CAEC31767F13E9997F303F2DADECC68BE67D3A6B4BB20707028DB6C4E1198863A8ECDA28BB3F307935EDBD0F2EEBB25AA1FB2B2BD313A92D3FC9A82D7B509BF41DC2C9AADB5F475256456ABFCB251CE4B4E4ECFE17805ADC68374F7306A7693F224F0940D8E644276EB3361314A5FCB71DB96BED36F0C31F22521734232F0C2386C59661A17994D9010DE5D212BB75C90882931A7AE681AF68FAB442DD6E22172B5E418ED919419C7210C953CBDA4EA2A566A7ADFB253ECE63CB6726398B18D47F2CE695A4789223131AA377A7DF98192365CC86434C1755FCB7B8B552CB1866F0EDFAF2A316CE379BDEE87A8DB170B6D29E269D36FA3234C81481A3BD462258245A7B645210F34BE98F8C1030B7525C6F2035058838B3115212F03591CFB53148802A6DA8C6845198E2C8E20022A1BB59A95241F6C5AC48A3967229C6B4F138B30510B73D37E98B74510B703ECD7AE03BA65B045070AB50D91E171BC42AA92EC64AEEB9131489A36DAEC3380DB0F118084892266BD759111006889DEBD71886C81DD1F0992E18C50C4657A7C210572CE16D243D3BC97F957AF798E482792310C524A1645E8426FBF5EB8F0B8D393EB1D1FF002374CD2AD24B8FACC8B2409CBF7A76247D38F0B8D29A0B4DF33689E5E3793CF730C571A7D79F134A8197618B10789E11F993FF003955A5E97697F6FA0A9BABC98323B49BA8EA36F87325AE669F188F3B7E6079FAF9ADAD2F561B59FD46B94534201A9006C3C70DB8E7290C5B4AD3E1D275392DB592F717334A03C8FBF53DB27C69194BEACF2AF93E2D6E1161A2A492974A3B36FC411DB2B99B6C8CDED5F941F9172796BCC4FA84AD2CE8CFCA6F537E277E9BE56CF8EDF74C691C2A8109E1025501F6C3652082F3BB1AEA1E6A7BCA739223C78FECED8DA683D06F1115A198578A312DEC72F8C0485A90180C006AFE6C9243F14708DA982500189A66B1C4F1488518AA4B5E5F25CAA52A6069E4DE67B48BCC7E67B6D2DADD25B585C7AEC07C54077CABC621AF64279ABF2B6EF4DD2B5AD5741BE6B484216823534A0A0EBBE4865B6C1005F879F9B02E6E7CD9A80D61E3BA9E1958073B9DB26269E00F3089B568627BAD3D12358E4A1E636E3ED960368D83D2B43F3C4F63259C11C9CE5968272DF641EF4DB274178807F551F9093B5D7E45FE4BDD350B5CF913CB92B11D2AFA65BB7F1CDEE1FA23EE0F2DA8DF2CBDE7EF7ACE58D2EC55D8ABB1558FD3E9C554B15762AEC55D8ABB15762AEC555315762AEC55D8ABB15762AB97BE2ABB157FFFD5FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF90FF00CB7F20CFABEB70F9784FE9BBB0569CD76FA727E3B8A3474FD1DD03F23BF2F3C93A589BCC5E60B79AEDE3E4119F707EFF007C7C76C8E969F1C7FCE4679DBCA97925BE9BE5331C6DA651649E3E8DC698F8EDF1C34F985743D435AB73A95C5AB244568B514F57DBDF01CEC8E34D74AFCB3F36EB344B1B65B6B63FB4C074FBF29395022CB74FFC91D5CEA169646F0CB792B82B02D6868457299657271C5FAB7F90DF96FA8695E588AC2E2331968C027E81941CAE6460F7693CA361A1E8F705C896E5DC145EFCBB1CA8E46E10BD9F397E76FE60587923CA7269D6404DE66D67F72186EC81E9BE0395C8861A60BF911F93BA0E956D75E74F38EA0B3DC5CC06ED8B36E8C6BB75CC79657371E36216F637DF9B9F9A52D868F792CBE5AD35E9287354A2FDDE198F2CACE589ED7E70F2C5C6B0963E42F2E5C1B68B4F939DEBC6688E0F63959CAD4715259E7AF3EE89F933F97B37956C5565F325C2141243F6F930237A57227236E3C5C4F19FC99FC9EF3579E357B2F3B7982E85BDACF299409BAB2F20DEDE390395DBE97476FA57F323F30348FCBD8C68F62F6D3B88F837115DC0A7BF8656723D0E9B40F813CDFACB79A75A6BE9E0145242328E80E0F11CC9F65F131F9AC2248F925F4B6EDE08D4C81CAC4F6481D1434AB8BFB2BB8A73AACD71A746F59A177AD4F7C9C32BAFD4F66D07D412F9D7C87AC79623B2D3ECA38F5644A34B415E599B8F23CE6A7414F0F3A6EAF7777248B3B95AD16253B53E599D8E6E8F2E1E03499E9BE5C56BD53AB192DE2247276DB2F127127165D7FA0E8F0317F2EEA85EF1002C8ADB93E18CA4D6229B7953F33A6D26F5346D6AD65424F1FACB0FA3AD330E72722117D2D63AAD9DEDB42F6B79CD5D4155AE634B9B971E48AF5AD89E372BCD7C72B219A1DACF4FB9E4A6C57813B371EA3C72B21B2293DE792B49BB25BD08D49F6FEDC810CC3CE75CFCAFB296390C4A2B534A7FB78B787916A1F965240EFC54D05698B6061D7DE50D42353FBB240E9F462CC31B974CB8B7E4B25B9AF8D31672E4848D2584EE87171AB74D61B9A8E25295D89C5B150951DF1640B4B28A80A773DB14CCEC9AC658A0DF22E2A3ED62326C7A1AE34B68D58A15824653F18E831E15B645E43F296A9E67D5E1B75899A194D2B966385948C9C2FB83CAFF0092FA779295353D5A2170654E410EF4AFD3991E1A0E77A4E82DA4699F5ED6AE255B3D3ADE3630C55A55C7418F86D32CCF3DD5BF33AE7CE574749D20496F6ECDE9B4E36047CE98F84E34B23CEBCF1A3792FCA7A1EA926BBAA97BEBD80FA4BCF7E743D725185328647E5DEBFA8C32EA57C2CE212DA991B8B91534AE4A98E4928F9735ABDD1EF0DD69B251CAB7A918F9634E29927A350BBF32B5ACB1DBB3DFB5C207A0DFED634CA2FD64FC8CF29C1E5EF2B0D66F63A5CC9081F17662A3010D8F77F23D85DCB6FA9DE5CC815667261AF8646922D3CD6EEC69D62189A168F8D7DF1A6C8DA43E4EB4FAB9B9D4661B4D5E24FBE34CF74E755BCFABE8B3C8C68ECEDC7E9E9878E934520F29DB1B2824D4E71BDC92149F7CAE5918905956A139B4B19A73B7D514927FD615CA253B6B312C23C8F6AD35FDFEB972B54B824424FBE5129313128BFCC0FD23079435716F2B969636A460F4DB2D8DD391189E17E06F9FFCB7AE0F34EA9A85FD94CD01998F220D2996C4B0902C7749D26F7CCD7834686136494AA9229C865824E348909B47E4F86CB506D288E57711A09325C6E399C83FAA2FF9C7E80DB7E437E495B375B7F20F96E33F34D2ED87F0CE9307F771F70FB9D2E5DE67DE5EBB96B0762AEC55D8AAC7DC7D38AA9D0E2AEA1C55D438ABA8715750E2AEA1C55D438AAFC55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD6FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF233CB9FF0038C3E4DF2ADCBEB13B133D0B1911C0CC3B2E7ECFCE5FF9C95D5A6B1F346A1A7E95AB4E6C625612C5CC96E229B03DB1B29A0F89DEDDEF00926B97974FF5394909AFAA47BB63653C2FA87CC9AF797F56F2279774DD25D34B4D3A86707FBD6A0A751BE365061B337FC8DF2C5E79C752B7D26D6F2E0CAEEA11B937122A32B258460FD2CD3FF27FCBDE569F47B4B9B432EAF28065BC6DF8F427299172618DF40456B6BA6D9C16FA4C4102A51E4661D69EE72891A732106272C4F737978F79C94DADBC970B272AA1F4C578D077395D972B1E3DDF9E76B6317E6E7E6FDCDAEA08F69636B318F8CA7ED509FB35F96425272B829F42FE69F927CBDF977E4FBCB5B1FAE896F63315A4924C4A7A8694A0F0DF28916D8079F7E5DDB5EF907C986636E96B7BAC9ACD7DC6878B03D0E512939118A6307E6459E97A6DCD968086FF00CD3316F4EE07C67936DBD2A72B2594B0DBCCBCB9F94BE65F327999FCDDE78B1B8BA4327A932C95E0141AEC08DB2264E4E9F4FBBD4FCFBF9ABE57F2AE8F0E81E52E7677F0A18E242F550D420EC32B26DE8F498007C75AEDF5D6B378B7DADDCB4D7B292CBBEDD7C32B327A0C31012DFADC21FEAF343EABAED118C5283DF07139825174B3C0842B583B13D2B91254CE285BAB580C5EAADAB41714FB1FB253C699289759AA31AD93BF21FE5BF997CF5AA25B7942D9E390B52E6465257DE9B6676393CB6AA9FA0BF97DFF0038C4BE5FB186E7CD3299AF1497996BFC33618E5B3CA6B620CB646F9AFF0025F45F3497D3AC6330A8F843A6C7C3AE64893AE9C5E7FE59FF009C4B6F2E6BEFA88BA9E78B90608EE5878F4C12935883D1FCE5F91FA16B366919822B5BC450A27550A6B4CC49CB7722317CD97FE5DF30FE5DDECA90C72EAB696CD44F4EA683000D8F40F2E79AEC35E884733AD9DD746B7907C55FA7010CD983EA0F1AFA3C1404F85180EB9590D812B7FADCADCBD6F84F4036C810C834F248AB406BDB7CADBD21BA53293CD41C5B42552E936F221AA038B20C2B54F2BC3217A44BB83DB16C3BBCCF54F2A4B17F751803E58B5F0B13B9D1E5B706AB4FA314243346F1FDA53BF4C50A5146DC838041076C0589927F096E03236C0A6F6C582FC3D7FCEB931BB548A3A0D2A6BABC820B40CC2660251D7AE5A22D7C4FD0BFC98F24E95A1E9D6B7A2D985F08F90673515A7865F8A3BB4CF23D4FCD9E6780AC36D247CE78E3ACC3F6683AED99341C7F11F21DDF9E17CF3E61BCF275ADF243A7D94865BB8D0856A0EA2B5F6C691E25BD5935BFCBEF2569062B7A34F0A7266EADCBFD6C683025F9C1F9BBF987A879ABCC37C25AAE903E1B5727627C0602144A9E07E85AB1755670AC4D77C1C2C2791D64B67A6DC898BB2CBB8849355DFAD463C2D5C56FA7FF00203CAB16AFAF433BBC73C664570817DC1C785BE127EA25D4634ED0934E0BC04DC5828DBA0ED9121CDC401E6CF7CB6D0268F089CBAB2814A1A7DF829BC4425FE6C65BF8AD6D636E3561C877E38D331009F689666F74B92DE195614B215766F6C69B0462C1FCF9AFE876D2C3A341AA4308545370ECC0EE7AF7CC79C776C1008D7F39FE5FDA687656D77E64B5630D0944700D7DF7CACC14C22C4BCD5F9C5E4792D27B1D3F5980FD6C2ADC55813F08A0A6FB640E32D6718653E49F37F93EEB4286C1756817D221A3F8C035EBBEF90F08B0F0C273AE79A34C3A7CF099619CCBB2B5410C3DB7CC8863A0E44202980CDF92FE44F3BE963EBBA72FD6AF3ED3A902B5C3C0C258C3E78F3E7FCE23685A523EB9E5EBAFAB6A963FBB823076A2F4040EB83869C69E10F9423FC92F3C4BE66FAC49A6CB33C8D46B8553C4FE18971CE9EDFD0E7E5058CFA67E52FE5769B72A52E74EF28E896D7087A8786C21461F78CE9F4FFDD47DC3EE797D40AC921E67EF7A2E5CD4EC55D8ABB1568FBE2AD547862AEA8F0C55D51E18ABAA3C3157547862AEA8F0C55D51E18AADC55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD7FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF30EE7FE3932FFBDDF60FF7998EE4BF25BF357FE537D53FE39BFB5FEF6F5EDD716D0F1497FDDBFF001C5EA7FB9E98B745253FDFDAFF00BC7FDE0FEFBFB9EBDF23264793F4DFFE7143FE3BBA67FC707A2FFBC7FDE74194B18BF42B56FF0094853EC7D8FF0077F5E9FB194CDCA83C8BCEFF0061BFE521FB5FF1E7F63A9E9ED98F272E09DF927FDE49BEDFFBCB27FBDFFDEFFB2FE3953938DF1A59FF00E4EBB4FB1FEF50FF00783FBAEA7EDE464DF27D01FF00395FFF001CEF2EFDAFEF63FF008C1DBAFBE53258F3625F985FF92AB47EBFDCAFFBCDF6BA663C9CDC6F00FF009C69FF0094FA7FEE7ED0FF008EAFCFB65679B9717EA37997FE51BD43FDE3FF00799BFDE4E9F64F4C94F936E93EB7E3179D7FE531BAEBFEF43FF7DFEB9E998E5E9B4FC921BDFF008EDDB74E9FEEEFB1959E4EC23C936D3BFE3A375FEF1FDB1D3E5DB029F8ABEB3FDF27D8FF009E790973627E2AB17FBD717F75FDC8FF007A7EC7D39383AFD47C5FA1DFF389BD2EBFE385D0FF00BC3FDF77EB99F89E675DC8F37D49AFFF007D71FDF743F6FECE6645D066E6C5344FF7A24FEE3AFECFDBEB99117124CCAD3FBE7FB5FECFA60C9C9AC3CD3CF1F69BEDF5FF0075FD398736F8BCA74FFF00A587FBC7DFFE3A19747E9497CB7AEFFCA552FF00BCDF6FFE95B80A43D7A1FF00792DFF00BCFEEC7F7DD722DB1504FB67EDFD1959641565E9DF2A2DE12997ED606D0843F4E2C825571D5BED7D38B6B12BFF00DAFB3FECB14179F6ADF6BFDD78B51611A8F5FF00757D18B192017FBB3F67A603C9804543FDD8C805926D69DF2E8B44F9BD2FC89FF1D6B7FEEBED8FEF7E797C5A25CDFA15E5BFF8E6DA75EA9FDD7D1F865F071F27262BE69FF8EB6A5F6BFDE47EBFC32E71DF97FE4FFF00C995E66FF7BFFDEC93FBBFB7F4FF00938ABEC7BDFF00943F52FF008E77F70DFEF47F7FF47BE2AFCCCD7FFDEDBBFF007A3FBF7FB7F63FD8E1632E4C6A3FB4DF6FE8C0D3245C3FDD5C74EDFDEF5FF638583EDFFF009C50FF008E9C5FDCFDA5FB5D7A8C0E4C1FA41E6DFEFB48FB3FDCF7FB3909399064D63FF1CF8BFBBE9FB3D320DC3E2C67CC5FF1D0B0FB7F647F77FC71671F8A62DFF28CEB5FEF67F74DFEF07F7BF4E167F37E67FE65FF00C746F7FE526E9FEEDFB5903CDBA3F178737D97FF008EDFFCF6EB8127E2952FF7FF00F4B5EBDFAE2D72F8BD3FCA9F6D7FE526E9FF001EFF006708607E2FA3EDBFDE1D1FFE523E8BFDFF004FF65930DD1E5D5F5BF977FDE0D27FDEFF00B2BFDD7DAFA72054A7FE6EFF007960FF007B3A8EBF47DAC816324FB4DFF8E7D97FC733A0FB5FDEF4EF902C1F62796FFE51ED07ECFF00C73AD7ECFD9FEE57A7B674DA7FEEE3EE1F73C7EABFBD9FF58FDE9D65AD0EC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFD9, '1', '2021-03-13 12:45:48', '1', '2021-03-13 12:45:48', b'0', 0); -INSERT INTO `inf_file` VALUES ('6edb3893-8ec8-4bf9-aa64-c04f1c7ad98e', 'jpg', 0xFFD8FFE000104A46494600010100000100010000FFE202284943435F50524F46494C450001010000021800000000021000006D6E74725247422058595A2000000000000000000000000061637370000000000000000000000000000000000000000000000000000000010000F6D6000100000000D32D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000964657363000000F0000000747258595A00000164000000146758595A00000178000000146258595A0000018C0000001472545243000001A00000002867545243000001A00000002862545243000001A00000002877747074000001C80000001463707274000001DC0000003C6D6C756300000000000000010000000C656E5553000000580000001C0073005200470042000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000058595A200000000000006FA2000038F50000039058595A2000000000000062990000B785000018DA58595A2000000000000024A000000F840000B6CF706172610000000000040000000266660000F2A700000D59000013D000000A5B000000000000000058595A20000000000000F6D6000100000000D32D6D6C756300000000000000010000000C656E5553000000200000001C0047006F006F0067006C006500200049006E0063002E00200032003000310036FFDB00430001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101FFDB00430101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101FFC00011080190019003011100021101031101FFC4001F0000010305010101000000000000000000000304050206070809010A0BFFC400431000010302030603060406020104020203010203110004052131060712415161137181082291A1B1F01432C1D109152342E1F13352620A172472164325345392E2FFC4001E0100010403010101000000000000000000000304050601020708090AFFC4004311000102040306040602010303010803010102110003213104415105126171819106A1B1F0071322C1D1E132F114234252081562161833437292A2B2D224258234FFDA000C03010002110311003F00FBF8A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A208A0AC4C7CF97DFD89ACEE920903F71909243FB3CA2953A948260E5AE5FEFEFD29962312647F261DADAB54FBB46C10A2D60FA966E70826F595BA5941E25A7FE44A4825BE9C63513CA69A276A214A097A9E03D63265A85DBDF46841EC5AD187C5BBCE0696AFCA56A0904F2039FCAA524AC4D018D5BEDC3CFD886932709658834BD0F0E56F3CA1E22E10B820183A1EBF4CB9CD6B326196A29A1B6B623B74F38525AC2D20DB510B05054C4E5D684CC2A6602BAFF71BC7B4A07CD9F841149580633FBF5ACC11E832268823DA20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20840820C73A5029934B8D789F7DA140A64711AF13F87ED142BF29F4FA8A6D88C289E0920391507D9F66D0D558B097A0245BCA9D7FA363108D34DDAE2172E38BE137E13C0A0608F084104E5F43A193CEABD8AC18C3106D7A5E95AE76A59BCA1791395398105EC3ADBD39DB268B6B10C5F0D18A0C3577187A9E42B5B958372743EEF3D2069A4803AB0FFBC8C2AF777C066624B736FEDA9A44C4BD90B9D2BE7192B552C843AB3A97D1C7F717BDB3ADBC96D6D2925053970E900465CEA6F0B8A18B97F31DC9624FBCB4F60464E90642CA14929539704311C0F9FEA1FB7CFD3F5A9295FEDEBF784614A710422BFCC7D3E828821447E51EBF53441155104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104450C4D92F5D301B70BD6DC3C400FCFC63FF00D79E70067D09F4A6EB9E106B400E7C75F6348C33B8F21786AEE2AD254C254D3E90EA5D5AD6A4C2184B492A25E3FDA08120FE99D64ED09094B93500D33A3F0B521AAB05316680B121FBD3D8EC0C72B7DBCFF894EE97D96762F197705DA5C2369F6F9E6D6CDA6016578C5E5DE18F825B3F8AB54AC38CF1485A6332248D0D5476EED793F2D5BAB4835A3874E7EFFF00F422DDB1360CE99392152D6427759C12921BCDBD75AC7CA1ED6FF11EF696DBEDE6E03B7F6FB718AE0F64E634D1B8C0ECB11BB61B72DDEBB69086C5B85907FA440209233D2B8BEDADBCBF9A425550A167CCB3B50F6341D23B76C5D8084491BF2C01B85BE90D6ABBEB6BF4AC7DC57B266DF5CEF13721B0DB518825F17B89618D2DF55C4F88A5A5B6D2A528992789526739EDCBAF783710711B2E5AD4492522A79F1F7E51C6FC6385186DAF3D2121292430019837A46CFA7DD05474807EFE357795FEDEBF78A94548585A428640F5A710426BFCC7D3E828821447E51EBF5344115510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510478639C7AD10422B70699F61F0D47D34F5A208B57157D9B3B945F38EA6D8B48756950570B2E808952AE4999091F97A647ACC06D3C4090824E8FA3D2D7E1A1830A37E72505FEA2DCE9AF5F58F9FBFE279FC5A30ADC058E31BB6DCF5FDA6D46F5F1369CB0BDB5B3713796D84A5E4F85E2145BAC3CCAC5BB8A5C990148988CEB96EDCF150C2EF8DF096041AD9BFE35B1CFBB88EBDE16F09AB1CA4FCC969992BE9282DBCAADDFAB335358F90FC671FDA5DB2DACC7769F6E318BDDA5C5F137957CEDC5F3EBBB603AF953A5A42DC3C50C9596C24C70F0C72AE57B43C6431130A44C24926E4BF06A7E7817AC76FD9FE071225A54248140C426D9E94F3E2F0CF67F1042F1861576C16BC2C4B0F36E1A4F0A045D37A13D3224E7998D6A2D13978D58512540A852F73E5435F661C6230A9C0A199B752ABB0A80457F0D7B47E871FC3C2E9CBCF65BDD95C3AA2B5AB0F70499984A9B09D73FCB15E96F044BF97B265A48AEE8A9CDC9FD7947977C6F33E6ED89AA77049E548DF55FFC47FF00A8FD2AF72BFDBD7EF14C8A58FF00893F7D29C4102FF31F4FA0A208511F947AFD4D10455441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041A510435372388A40CBA99E5AFDFCEB2C7431B896A29DE0CD5A674E9F78592E020120FA7FBADB715C3BC25315F2802ACFD9ED0C9CBC487FC208717EE9515244A13099827404C7DC56E656EA0294E1DFAF271EFAC371880A56EA475D3FA7F53A3C4BB8AB49B755CA92E04A78CF01FCEA4B73C4B039848127A0A693268403C01BE747A7EE91252A42A6B338720727B3DEF46FC47CEE7F186FE29985EE1F652F3747BA1C4DAC4B79BB4E872D1D5DB3C975FC1036471F096161EB75B8CA95196640EE6B967893C4F2113D7841FC88604B642ADF97D6863A6787BE1A6D0C74B4ED10A1F2CEEA9206F6B906D0E5FA3F1FB79B578EED16358A6D56D05DBF7FB538A381FC4F16C61C5BB8A153C494A1A7D5EFF00080A28009FC99682B89788F0D89C7854C94A2CADE2E496725D8B06D341DCC77FF0A6CC97B1CCA4CF4A545346AE547660DCB3B0E1157CEBADB8943CF5C34C13C43F0AA8599CC95F2CC991D672D6B96AF63E3913C952D4C55A9B5333F961C834761978FC0CCC37D284856E8029C297E35CF389AB3C66D117B84E1B609E2BCBABDB4E07AFA080A6EE1B27888CE55FDBD7A9AE89E1DC0ACFCB4AC97053C474ED5766CE398F8A12662672A596A1208003D3FB7AE75A47E875FC353F1AAF643DD5BD7E86D1706C6E38C36084C071213139990273AF50785E42A5E025A5A8406F795ECDC9DE3C83E2C27FEE73526E925CDEF6F4CBAB1BF41B8C2D05398311DAADB2D2433E4F5AB574EF1578ADA494A003DE96820520924E5F63CA8822B488007DEB4411ED104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104332D00B2A264F41A67FE32FB9A0162595D1F4E1EB0AA57BA8AB801DD850D4F7EBCA14CB4F80A5C6A73F21A7BE4E5A23713382CEE876163D7D3BFE60B124DC36DB82DE42AE20054E69232D46920FCE75D50C4CFDC40054ECEC1C503D7FAE1CA16C061FE6A9DA97E4C4971CEBDC0A67CC3FE259EDBFB39EC5FB88C6714BEBFB556DCE2B66FDBECAE1FE2A3F1172E3A54C5CA92D1525D596D2EA55EE194EB19556F1B8D4A50BDE57D441662E406B1A38EBE917DD8FB24E2D7266CB42BE56F0F98141C100B0619E649D4F38F811DB3DE2E2FBE2DBEC477BBB68E5F5D6D0E23777772117854E5BB69714E78296C392B03C352444E59655E7BF124D3336B29408A28B9CD9B2CA9991C4C7AA7C307FC4D8E996DBA4245281FA50E5EE8F67DC630E3D69885E5DB1174EA901808465EE2B8444E7F9634FAE74D14BDE90D9B503BB8EB763566E8F1954F06728D2F5BFE9F2F530861F8C9BC69CFC69875AE1E20AD424E49CBEF43553C6319A684107D8D732EF607AC5870B3C26592AB1029ADC55B5C9BEEF10B6F77737FB71B3563624A9C7F6870461A08CCF0BB88DAB6E4013970A8CC0F955B3C3E80A2839EF0E771DB8F7CA29FE22DA0942561CD942EFADEE1BB3F08FD407D92F6311B15B82DDC60086FC216FB3D873E5311EF5D59DBBEA310352A24F53CEBD29E1D4B602506144E5EC97F2C8671E50F13CEF9DB5710B705D43EEFC3311B3496C01CC7C8F79CBE1FA54FC57615A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828821B3AB4A544150062403E5590905CD011E777E30DA62941C55893AD2A1BF5E50D9B7D2B497152809FEE5E49CF2CB49C87AD68A9852145C80900DE9C857B3422941597DDBDC900F9FEF9B461DDF76F3F04DD76C3E2FB658EE256B8761183E1F7777757172EA5A014CB2E38DA10A5909E35A90123AA8819CD56B68E37702885391966391F7CE2E7E1ED9E274EFA9255660D4AE4DD6DC5A3F385FE203EDABB55EDABED378B6338BE2574ADD8ECF623776FB0586B8EAFDF2CF131882AE995294C90B7590A64B5A82273AA06D0DACC6602B2581B9D41AD4F1AC776F0FEC69625A1210024350240BD4F0ADAD6F3D78731F17984B16E2C98B661B9485787C172424812AD358907A6715C7F6A6304DDA0B50373AB82E38687DB978E8F2D230F204A14614E1E61EE1B90E062C2C57690DBBA96D0C85DAA3881E24CAC98911CB23CE3E4269D024CABB535A6B6EB6CDEF586292A54F05A84E560F62C5BF3E916A0C4EEAED38A5DB07C312C809320E796401CBEE2273AE624154FB9626CFDEBE6F67D4889C4EF26428D430A87CEAFFDE71B1BEC8BB0979BC6F68FDD0ECC23C172E6FF001D6AE5697412829B2B862E3300124808300E522AF5E1B96EA41A0A8E6DEF8DAED1CA7C598B32BE692A20310CE6F4635E55E01F48FD46377F689C3B63F666C4A63F0B816156F0065C4CD85BB6AC8F29498AF456C30D8443061BA18767C838F7C4F9DF69ACCCC5CC59B93F97F26CFA45EE1415313975A9B88E8F68820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20886C47F0E9429D5BA50BE24C4A8246640239CD658B3B75E7EEB5F36704952C92029B32C481D7DB72A431C582DF612CDB381B6D0DA9C7DCE284A5284859248D321399023946551F8A5A82083762E03B3694CC8E76D042D2A484946F060E03666B4E6072CFA47C5B7FEA1FF00E2238D31B43B3FECA7BAAC7949FC4A710636E6F70FB950FC280843F68875C657EE789EF27FA91331D6681B6311F4AD5BEDB8F404125EED99E3766D0C749F0EE1C26624A430514F61A7A91CF4A7CB7EEEB0DBA432B6F197495DA3AA7B0DB85A8F1DCA9F70BB7478D43DFCCE64684E7CCD722DAFB40852F749CDC3DA829AE7C63D01B064A44A416B80030D296D5EC7D488C8D7D8C97EE5618052D70A5000D3DD10743A4899D0CCE46A80B9E6662F7AE5C0B335684D1BA718B1CF91BD4614A583D2A75FCF786A2D9BBA1FD4D79CFA4E7DC8D0E43B0CEAC7296AF9391A0D2BC3F6D5A7186987C2EF4C14203DEC0D4F98D3EF148B06ED78D981C374A4C003FE9F231E4395474C4EF4D14BDDB2B135AD0FEEB689B9D86DCC39A1B162C6BE753EBC6E3A93FC19B76771BC2F6F3D8252992EE1BB2CF5CB974A20A90D7E22C8A9AE230401C439F38F4E85E1B961E58FA6AC6B7E7C69F78E03E392A499C9245281AF7AF2CDCE7AC7E8C585B29B6B3B46131C2CB0DB690232086C240CBB0AEFFB1C3615219A9CB38E0B8B24CD24B3B914E0D7B5625DBE7E9FAD4BC358528820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A208A3C41C6524111FDC7435A15805AFAC11E2DD4A412015C65091268F98343FBF79F9410DD37D6E484A95C0B248285101498EA279F2A3E60D0C10BB8F36D23C45AA11CD59401D4924563E60D0DBCFF001C7CA08F5A79A7D01C656971B54C2D06526323047435B82E1E0852B3045256018CFEFD68823CE31D0FCBF7A208B571E6FC4F01A09754A5AB88140948E15030B1D3A538972BE64B52B78242323405C93D843DC24D4A5D0A6B356ACF50E39DB8D738E7DFF115F6C4D9AF637F67FDB4DE063772E1BBBAC1AE2DF03B2B2527F1CF5D38C396C9534DA882A0D3CB42DCE1CD284CF4AAAED9C64BC382F352E410CE32C9AEDCDB5689FD99B3558C50051541B9142E4EEB3D2DAF611F975EF2F7D5B63BEBDE46D36F3F6C7164E218DED5E3776FDD3AEBEB75C66D5178EA6C9BB752C952562DD4843892609C84015CA36EED295B8A295EF1ABB106D50E34CFBF38E95B2B644CC3142D6592902CF60CCFC18FF548CF1B05BB1DF0EDE26CC6C96C06D46D0D9A1294E197383E18FDD372EC078DC2DB0470C9CA0F2CCF4E1FB73C45829626A9588952D52DDC4C50750D031B9B679657E8381DB72B01BA161F75B7788AE763CFB0CA376B63BF8757B536D1DBDB963763B4ACADE1C454FE11789038BDE1242758C8E473CC93A57259BF123032316A48FA994438DD3D4135ABD357789C3E2BC2CD48514EEF16003B379B77D62736B7F8737B57EC6DA1BCB9DD86D2DEA1292A09B2C1EF1C591130014807FD55B303F11F67CF425090D40EE0573A375BD4BF087DB376F613133025050A0F5620B372377E753A18D3DDB3D91DABD8BC66C702DB3C0712D93C5ACD6E26F2D71CB65D93C82B82D8521C1C43887E59D4C413CED9B3F6B49DA0B4992B1BCA228E0BF519B699C5BA662A54DC2AB75988EA0B3963DEFCCDCC7D13FF00E9CDDDBDD5EEFA37D5B697765E1B7828D9DFC05FBE8E1688B861C4385A77A119647D729AEC7E1C401F2E8080CC59CF337A172D5AC79DFC7C903E6BBA9DC84A43A8B3D407AB67A0ABC7DB058A38D86D695A5423549904C09835DCF6497C3279379C701C511F394002189BD0D4E6D1209494CCC671FAD4AC368AA8820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A208A4AC0319FDFAD10479C63A1F97EF4410718E87E5FBD1041C63A1F97EF44115032268823DA20828820A20828820A20828820A20828820A20860F2149716EBAFF000319402A80206797CE9057F23CFDF7BC11666D2EDADBE06C1164D1BD7D2098653E249F4CF4CBEF2C41166E05BCBB7BCBA51C630B7EC9CB8570A1C71A0DA441E104151CA4C41EC2688232C5BC9654B5A85CDA3E029224AA124663A089F97C48224ECDB61A6108B7484340A884A4400493390CB5A591FC4756EF0439ADA08457F98FA7D051045344116D62CFDD61C9BABDF716D0485A52A24F021225D24682132673F4A8ADAFB59381C217207D24BE74239E55F3D61EE130FBF346B4E01F2AF0C88EA23E367F8C3EEF77F5FC42FDA8706DC2EEA2EEF2DB775B1572A6315BAB75DCA6C6E5388B4D3AE788B6789A5F84B43807101C24419AF2EF8CFE24CBC0CE9FBD3095249F96970519BEF54D9B22CF7B18E9BB025FC94277F777BFDEAFF713715CD99983F988D9AF63EFE047ECE7B90C1B0FBFDE660ADEF076990CB2F5E5A6256F6D8A61697D438C8436F36160024F1839C8AE05B57E2999C66113882778108564697269525F3F38BD7F9094C94EEAD237B2984351ACE5BB3D63B05B19ECE9B98DDC61CD33B2DBBBD93D9BB665294B16B85E176F68F909802108004981A6624F3135C43C4BE3138A54C57CC7DE2436F56A4F17A5CEBCE23B153C4C56E041537FF1121D2332C6C34F4148CB78761B6966E8559D93F6481012C7861B291119240301433F2D35AA12F18668F9EA2CF5AF0D78039641B3A4252E6808604115078F0A173C34D5A24317167736E59BE65C711C2414AC05020F9E5E5CF2E734BE0FC512B09352952EC46741AD29AF730EF67CE5CB9A3E42D285121EE120D09B7534C985E38F7FC473D89374BBF1DD4EDA6D3B3B38D61BB6384D91BB671CB7B4659B8B95B2953A0AAE024AD45296C2046931AD778F03F8BE4CF99282144311BCE456A2DABD6B9DF9741C16D4C42657C9C42E5B28109DD35B5779ED95ABF7B3FF00F4F9EEA319D90DD0EDC63D8922E16EED0DF8B5B75BE1456EA307BFB8B702559ABDC4011F488AF68782270C6C894A0E4A8249734B86BBFEBCE39478DF1BBF3378A80037C12E1C3D1F5173D6B58FA6FC25C53962CA94C9B739A7C2524A48E131307918915DFF00662372424337D3F88E233CBCD59077812483CEBC35FB448D4942505104144105104144105104144105104144105104144105104144105104144105104144105104144108AFF31F4FA0A208A68820A20828821647E51EBF53441155104144105104144105104144105104144109ADD4B7A83F7FEC51045958D5E3172EBD69E25CA1600109308CFA798FB148ABF91F77AC109605B396885975E6C5C2559C3E0288E7CF2E9DFA56B043EC6B6770BBCB77FC4B0687829E2654CB490E056B918EA069C851046161B6DB43B3B72E30AC3EE6EF0F61442129694B5F082604640E9CBFD10465CD8DDB6B2DA6C383E8B67AC9F6F272D1E4043A0CF240CF3D7BF6AD3E60058127562D5CBBEBEB045EA8B84ADA0E942900980958856B12474E7E559F9BC55EFAC11EA882B81993F2C86BD3E7419841673C6BD7FBB41082EE1A6D6B438A08298CD4400644E46B066D0D5563EEF19170FAC6B27B4DEF217BBFDDE6337B68BF1B14BE43769855B33EF3CE1BA5FE1DD52500F11084B9C448D0024E715C8FC7BB653230D3D1F308514AB76BFC6878E7DB57AC59F64618CD505252C10DF31EE4AACC1ABAD79651AAFB8ADD4586CBECB8C7EE6DED95B7D8FAD7758962A1224B6EBAA759487A3C42B6D973848568A112057CEFF89BB7277CE9FBB354594AA856A5D99F8E94B333C5FF00012CA081421830565A1F4A371E7B09636C6C4ADB45D5CBE98042DE5F12CAB55051FF00A857E5E511E47CF3376B6297356D316CFAB539D5B36F3AC4F7D6A4212B4CB3BAE086A0193529D33AC797AAC42ED4DA0A2CF810A9F1784F8E04823DECF3FBD29862264F9A1D44DEAD7BE7C6FE56B0D44909720A9943F893F4B8B3701A449B988ADBF75B425C504A4788E895929039F6323F5A55789F978420ACB806A491E76A0E19650C66CA284155537648A015CBC9F9B690DBF1A5FF0076EADD95248E4993DB5E9DC4F5E75CD7696D5988C428254582C3E6CE79B71FCC35953D52D745117A83DFEFEEF8A37C96F60FEEFB1F6EE2D9B364E5B969D4292381497429052444199C875AED1F0C36B4F9B8BC3A43B1525EFADF4EE474CAC92316A423E62D64A88A026D4AF916D3A45C3EC57B23826C66E3367ED365F09B5C3106EB1277FA4C21A5A94F5FB8E294BE0E64A8C1EE3AD7D51F84A93370787047D44249241E3566E57E4358E61E2A9E664C9CA2B5105BE924103CF37A664C6F95AF1F80DF88657C2388832248072F8D7A525A021200D07908E7A15BCFC0FBE5CA1C5291B414410510414410510414410510414410510414410510414410510414410510414410510414410510422BFCC7D3E944114FBBFF0064FCFF006A208A8249008220FDF4A208F780F51F3FDA88214488007DEB4411ED1041441051041441051041441051047848027E5D688222DF773E7EA72E5AE7F64FC48220578797AE4BFC392C8CCEA741E7AD22AFE4608B86C5AF0841CBAFC3B9ED5AC10929775F89B801014C80380998329CE3B7DE74410CADAD6C9DF1BF1366CA8CC9E3427424E79F59E9441186DD79EC1F780EB966DF87875C2D03C240842211072190939F39FAB259AB07073228FEFF0030466C2E2AE5F6024FF4D29E254130AE2483D391F856AE753DCC10A5C5C1B40FBEA9E11C013AF3CBEFEE300AB3513C6D04446216CEDFAEDDC4ACB49852DD5494C2520193D3219498AC2D442165CD12A373A18C8B86BB86E71CE5DE862973BC6DFEFF00212E7E236536023F1E12A2AB77DCBFB70A678A4F028A1D1CF307A9915E2DF8C1E334ECEDA33F0666B315021F813DC7987E71D4FC39840BC1A5652904E6CD6377A0F74BC66FB36DBB4C2587D88E06F8901034080AE14E404649033E990EDE20F16EDC4ED09B30EF05051373435B8C87DEF16642129510033588018937ADE95EDC22590A0E202D26028498D67CFF00DD51654B0BFA88CCDC31CFAD72D1ABA43C4AC001EA78DBAF0D0BFDD839289199E83D358E5D3AF5A6D8C9D2E425449A797E32CB9D32541053BB40C439D1CE5C7335147610D56E24B9075E632EFF007DF99CCD57B158EDF96B093420D34D2D5F778D9787DE946809AD49176F74E59BC535503825E2A7B004EF2AE7526A0B7E7ED158992CA66804B549616EADEF84620F68571D4EE9F1566D64DD5CDDE1AD3694FE6295DEB685E999C952794666BD1FF0AB602D38AC3929FF00720B805AE3D7EE7A494B5A84BC8848BF3D03E9D78D236AF725B3AD6CE6C060384840496ED10EA931C2429E4A5D5748F789CFE35F55BE1360BE460E43803E8431B56DC78646B58E6FE235154D9ADFC722F4F747AF2CA33D5BBA3C24F1647A65CB21CFA0AEF4A67A5987A7BE778A6243121C1E5D6FFDD216F151D7E63F7AD6378AC104023434411ED104144105104144105104144105104144105104144105104144105104505694983AFA7EF4411E78A8EBF31FBD1041E2A3AFCC7EF441078A8EBF31FBD1045054D289F7E09E522474D3CA882105DBA97F957944E4743CBEF9E74410E59429B6D295192264D1042B44105104144105104144105104144105104144109389242BDE0001CCE9FB4D1045B57B74865478B88C4CC73FF1209F5D288225B0E75B7ED1B7384E723319E47BFC7D6932824921BDFEE32013610B2D694C8022798EC7B47C72ED4990C723CA164CA0AAD85BAB642FDCF78667124A16EB5C6DFF004C0993EF264492AEDDB23DE88DFE466DD03EB9790C83968B3711DACB1C39C2D2EEED9F79F3C286587029D0498F7933AC91F5A23030E4BBB86E5EDF87E229C130379EC42EB13C490DA997FC35DA367FE46C47BC5615A7148E1035ED35ACDC12B70AF79AD406A59DDFECDC21BCC1F2D401B17E3EF236B18BEC2036DF0B412956504F200E9941D341A77E906711FEB7C904EFBB1739F063EB0A84A481561A8F67B656A44462D78D7862DDC9487149F7E3DD94107CF5C865AE50273B1E1B63CD9F2FE605BB07202AB5C855B8D78F08748C0AE60DE410DA532D6F56EFA462FDEFEF230DDDFEC5E278D5E5C22D12AB376DED7C4586C97DE41619E19227FAAA4E633CFCAA8FE2ADB523C3B266AA7AFF008CB5B82A1FF13C5A8C73CB38525ECE5CC514A6AA494BEE976E63D75EEFA05B91B0C75DD9DBCC5B1C478DB41B497770FE2D7484AD41DB745CB8BC3F816A1C4A86149078B2E432815F24FE39F8E93B43C518932261DDDF50001D2F47A5ADEC760F0F608CBC000A71F4FF00B8D0737A57FB8D87B5BFF0D3FCB1E65E408010B526100E5993CB3CE73E95E795ED799356E54482753AB96E678826260E11EA92E03B101FB51DCE629F68B92D0165A4B4B3C4A124A939A7324C4E50454B48DAA809DD20BB5E8C7F5EB09893AB5CDC90694AB7AFE21DA4CE71A9CBBE83EB95426D19D3315BC104806C051EF42C076D7ABE486247BF6D10B70EA19B8216415023DD1911F1D7FCF6A811F3503E52F7897E94AB74A7BBBF96B4AA5697BDEEF5E9D876878D02E20B8AFE93600256E7BA8CFBFA67DF49AB16C7C3854E4AA60012487F2B3D9ED71C6ED1058993BD314A4B3E82FA656E1D58C618DE4E3981DCE2182ECE5C62568E8BBBA415B61E49092CBA858E313919194E875CB4F587C3618695370E5D0900A6EC0BFDEF566A5A12FE32D60A4BEE9A0772CEC35A8B746168DD2D9CC5ACAD3F0564CBCD5D7896D6E96FF0EA0B0809653F9A208D07F800CFD0AF00ED5C14991210264BFE2960142EC2FD0DB5E158A26D2C24CC4C954E52552824A89F9819C12599E873CED1909CC52DDB70B706404E4223300F977F9D77594B913E58989C44A0E0382A0EEC38FE69DA2AD2F662948DE4A98126A74761D34E70A22FDA5E8950F3F5FDAB55AE52003F3659A904850CBDE709CCC1290F576CEDD6D6E6444A34F23813C326674923BCEB07C865A5335E325A4B0208D41E5D3386AA96A45F26E07D8CCC0AB9099046604F0C67E5AD23331E94644962C067FF00DB6F65A1B99890ADD37E7EF5B3C788BB4A92094A927A1107EFCF3ED5A2768EF16DD20D1DC0CF8D7D2174A0AC021AB50FFD7AC565FF00FA89F3CBE84D4A4A0A58DE2CC6DEC0F7D9F3F2D4ED4ADAB4E5CFFABC79E39FFA8F89A5770EA3CFF119F92BE1DE2B4BB2341E99451B8751E7F88D770F0F7D2140A07B1FBD3AD6A43163946A43163945548AD6524D0306E756E3188A0AC0EA7CBFDD227120121879FEE0838C743F2FDEB231209018579C1092AE1093041FBFF34F512D6B48506AF4848CC67666E37F231EFE21249804C7435932D42EC1F9FE23433C26EDCF2FFF002848DE278CA122549891CC489F877A426A8CB2D4347A024D9CE7FBBD28635389A80002F9BFE3D87EB09AF1065B5842D412546005644F909FD67E94C958F4255BAA0D56AD3ADF8C60E2802C401DFB33C7AE2D2525D198ED9CE5AEA7FC548C9DD9A84ADE8A7A8346F7C6F02A7ADDC27E9362DDF87115ADA1AFE2D80095389491FDA489F818A658BC6C9C3024AD34A9721DBDF0D03830E657CC9A5820BD1A9ADBFBB738B4368F78BB23B24C2EEB68F19B1C1ED500A8DCDFDC22DD8000CC95ACE83E755D9FE2BC2C956EA88E7A51DCFBCE26B0DB1717894BA10A3C0073D83FAE91A6BBD8FE257ECB5BA7656E621BC1C171E75BE20BB3C0713B3B9B90A4EA0A14AD7B76A64BF1C60104825D9EA18DBF7C62CF80F87DB631D284C4A02378D1330282868E32D7567D239FBB45FC797D98ED31FBD6AD30ADB7B9B7B72800DBB366B4AF2FED21C00F383A66075A8099F14B672715FE36ED49005BAE74EB6E313137E16ED3C3E1FE74E22953BBBCDAE9D39C7537D943DAB3653DA8F77184EF2F636C318B3C1B17F185B5BE2CDB68BB3E03A5959525B5149F7812209C88E8455EB656DC95B51095CAA6F65C3D7AE6C639FED4D953366A9495D4A0B1777ED973D637090EF124129209131D3E3156058280F43C8F2E1C620D13378B311A93D721CA2AE31D0FCBF7A13F53366FE4FF0088557F43BE515020891410D431AA54141C47B446D051041441051041441051041441142E214329313D4FEBA510441DD61FE31396B3A67F5FBE7144116EDC58E2ED38A45BBFE1B00FBA9E25089CCCC69D75FA524B51721E9EEFEF9DA1E61D28287500E4E6389F7588F5D9ED01822E675CF8D47D7335A43A094E4057AFAFB31430E5C38DDED93E034FA1290BBB57BA973881885E731FBF9D101166715CBFA3D85333990D706D8FC2BDDBEB809BABB0A2A4B8785680AE23A1226040D3A40E704614486622D576F6E7215B68F1925A49084050485240108D0002123E1197A695AE331625C929CCD88E4D41C751DA18CD413535009B8F3F261AF011497614467AFA76EBEB1FE6AA5225AE662F780533DCD337FA587BB57368AC48954CC137F74A9A30A5E18E236D6D76DF84B212E6AD9D0A888309D27400E7CE3A55F25E32660A56F95B0082F91A248CFC9F4E912180C7294A00541B8CDB3CCB665EA0718E597B6FBB8CEF0369B61B73F845CB96CFE2578B7AE54CAD4996EC1D6AEA1C89905082065067400D78CFE37F8C4A7FC994164B058A13620F117BBD0718E9BB0F65CA9F2862124013189529A841D73FBD3AE68C1997B05B7B2B266D90CDADAD95A5B97B87852A71A61B69C515692541473CABE5CF8C14ADA3B5E762007056A2146B43E77A791D22FF00224A30F2848241DD01F7454BD6A1D988E2ED17336DA5E22E3C443EB4E7C2D90A333066333D32CE67CAAB08D9EA2E40A92CCDCAD46EFC808C198949284A4A121C1DEE232F4EBAC4DDBCBCDA5650A6C1905247BC08CB31F4CCCF5A7A8C1AA8198B54E8F95B8356D0D17300A3D4E6FF007FEB38916DAFFAC18D32FD33F5FF0074E656CF35A10491522CFE8D5E5943698BDEFF00711A9B69FD311C231A6F0F0ADA2C5ECD769B397D84D95E70C071E756DDD024E454532476CF41CB28901B004C4098CE74B922D50DEEA79624CC095AC12B3BCC5CD5218656E02B7C8EB801BDC96F571869C631BDBCC5ED5974903F95624F200049309E21D08E5CA9038656115BCCDBACC2D6ADBCBED1BAD6925560750CF4008E397DE2DC77D8FF000A7AF6CEEEEF6EB789738C30B5AFC7388A576FC64CA4A5447140F9721573D81E2B56CD5A1456A1BA430701BCF26A1E1A1AC7CC595294459C5412E4B74D2FECE44C1F731BCDD97BD373856DF628B602006138B624F129012520980069198CF5EF5DCB60FC619D8308099EB1BBA28F0E34F40618CF4A672548504AD2F621C3F1D4E5700DE2FDC3B6977D9B1CD2157ED5BED132C294A5DD3097EE94F02660AC91309CBB1CB4ABCC8FFA81DA4852509C5CD01C0AACB3578E435111337092C277004A5811BA96043BD59BF558C93B37ED2EC17136DB4BB3D88583A212A58B50D3614041CD674CE672EF5D0B617C73C562952D33F124A54D5DE27CCAABA1CF38839FB28B1DC52C924B6F3B6B4D2FAE7D6335601BD0D8DC7941FB6C79AB37DC88B4B9B94204CE49080499EBD08EE4D773F0F7C42C163928F99392EA6FE4A0D5B9A97B674BE510D88C0CD4072016D3F96879F6ABF01191BC67EF5B4B8976DD76CE094BF6EA2551CD5C432939673E75D7765EDAD91884A54B992882D5DE490F9558F971A8688C560D2545D2CACF7A84B016CE8C5BD6CF5B6E069210DBA5D4670E2D4173D4714C64646556F9123093A5A66A11294156290922F46A3380CED9C2C896508B330ADC96FC5AD9C48B6E92331946503AFAC79D23895A70E92D714DD1DA83DDE82125ACB543317E3C21D0526341E801FAD468DA254A6097E3EC7BEF0D97308B5341FD7E5BEF5A4A4E994F2FF1A7C3D69F4A9E99A2B43D9E9E46F639776EA9CB0ECAAD3A67D7CEF0BA220693F3D4D616A4A5443B935157E37FECEB0A4B51525D5724FDA2BA44A4ADFF00AE83DF38DE102412634FDB2AD7FC71C3CBFF00D608F2B230E9F607EA086EE708566067CC810329FBEF4BFCEF94022CD4B1AB572311B389DF60F6C8FD87BBC15A1C600F9B5873BD1F58525CBF983EA4D746A5CEA0E82185F3B656ADA5E7DC5214A39F86614A8319CC4C1C8672396B934993D0B503BC1D4ED5CBA16032275A43D95B3D730EE84D732065760CF907A88B3B6AB6DF65765B0F5631B478BE1985E18D214A55C620FA185A40199E224267BEBEA29B4C9725492A2536A03F661EEB4687B2B62CC98BDD32D4496FA98EEE84BF06FEE3955BFDFE30BECABB8BBCC5B0D6B68713DB3C5EC12529B2D9BBAB3BF4F8A50A29496F8C2A01D408CB903542DB3E3093B2E62B0C998A0A4B8A1A6BA81AFA3DA3A36C5F00E37192913552A57C823EA0C77EA28D6F4E85A388DBECFE3CBBECDBBBEBAB7DD3ECF613B3D8195AD2D398EDB3F6D8B96E4F0AB89973878C8CE4643280245738DA9E3D54C27FD4357ABE5C6B9D2F46D6B16AC3FC3D129BFD206B761992DCACDDDDDA39D3B6FED7FED39BF5C5311B8DA3DE66276F86DD70F16096D8B5DA18680490B4B76EB51090A1DF3CA6A8B8CF15AE62C8DF24AAF527EFE4CDCDA2EDB23C1C990A4112D346B8C9EE28FE51AE78DE39676ADDDA71AFC6DFE22B0A3F88BA8778972493C4A20E67BF3CA342C7FEFAB50BDE97AD69E9E51D4B65EC544B4005291BA34A59CF6EFC811185B0E606278AF05B3AB37B8B62D85DA35689325297EF1A60C379900A57396A290C0C85E2F69267392EA15A117EFADC6B5884F154E461A42E582032482006B7E473CB468FD14FF8766E72DF72BECB3BB4C19C6CA2EEDB0D174F248851388F8770272CC8F167EF2F5578370DB9869273600EB517E793B5695BC7913C598BF9B8BC44B3FED53825994F577E047D9AE23A1A93C494ABA807E226AFF882529000A65C6CFE6DECC52B0F55BDCB9278302DE7CFD60041CC5664972068FE6F0E27D52DA8EB710B2343E7FA0AD95FC8F3F4A42328302346FBC57588560A20828820A20828820A2082882122851513208310348A208560741969DA8821A3D6C1C515152B38C81D0F68A457FC8FBFBE9CB942B2E66ED353E5EDF586CAB04ABFB9D1EA63F4CFBD6B0B7CEA30207FFEA9F6880C6F6751895A1B66DE76DD6A20975A5702D4279A867A081D46BD0119130D492492D9E598EDCF8C2D85E088C330F45936FBCE2923375C502B3273CF4D39FA5119F99CDBEF639B5BEF12008B5050AF154948F796BCC99EA7A74E7F5A467618CF0031700B3FE3DF2816A0A41248B331390B505B87DEB152805A4B8D9E21049CE4E43B4F4FBD4AB84C0224A82D4056B517A93C3AF663157C6EF952B75EFA114390A7363722ED68B7AFEE12DADBBEB8712D34C3370E34851E152FC36D456540C03F964768CC542F8A368CAC360E67D607D2A6FA99AE3CECF9D4D6253634A9C54860E094B8625DCB1CB4C9BCAFC45DB7F691D911ED23B53798B0BA7F15C11E6ADF675868A14AE37982D5C00951E3954641199244D7CE8F8C38D9D8A9F88521649758BD0D59A8C19B2B47A5BC298290AC1CB92B037581340E480F9687BE5568CBB84E39BDDDBE71972C1BB6C1B01BA585316F8925E63134B6A5492EA40291C5AA0E85275E55E47C46CE54D9A4A85779553EEAF52D121B5548978829960519D839A00D5152D4BF03C636D763765EFB02C350BC42E7F1576A4F12E1456DF144C0E283049F5035AC4BD937FA43BB00C41E449B0CBCEEF15F9B8A2A59417E2A0EDA70635ED98117AB16AFDC3697941A41512385220009240D27BCF7A7C8D904B7D15F27F2D7422838C3533C2014825441B90E7BBB43D459B89E69D3BCFDFCB4D29C276492A622DC1802296B1E6FCDE105621F3B59957E6FF88A6E703B2B8683A96909BC2656EC09510444919E42227A6B06A625E125CA921012A2B63BD620F07F7D2F088C5CC44C505281416DDB922D723956A5853587B6B87B4D33C0F296A580608323CB965AC79F28A86C5ECD4CEDE0DF5170187BFED9A8F189B899A4FD0CC4DCDDB872D3CE133873438D456E05E5C1044089D3991D79C54327C3938A8B254483F4BDABC72A5A03314A29DD2376CAD6DCB3E6C6D94242DDF7521170195849212482441EB3D80F86752786F0E63A852086B81A5FD321F78DBE9DD26CAE19F3A738F51645B5296979CE1207FF001B8A2D8408C91DF9FC69E0D97324ABFD451749FE24E79F115AB7A65A6EA492E91FFCC456B98BDBADE2DCC67671389A148FE578392ACBC47191C7E64C6BDC472EE2A57098F5E09492950013A65DAB95C1343586EAC3862417E7DA8C29EF40D8C712DCEE1D8CAD6CAEFD5835E364290E614E861614731275FDEAD381F8838BC090113961233DE37EED969DEB0CE6E0D2B2494D6AECDE85F864F9E822350FEF4F7560376589BB8FE12DCC26F9E7AE6E3806790100E444E9A4559F0DF1AF6AC8094A71539280400CB56B5CC0E43BC319BB39054E101CEA32BE84B7F6D431943607DA57673137D9C07692CAF301C552AE05DCDF368B6B0796A248F016A32ACC00ACBF3111DFD31E02FF00A81F9B80932313892576FAD7516E24F13DEAF1058BC1A82D4121806B51DF2F57A74A46D2DA6236D72C22E18790EB0B48521E4AB89B5057BC08568723967CF4CEBD0FB07C6B276F041F9A0EFB31DE70FA82E5F87488C9B2181A392E0822BCDAFCC5697687CBC4ADEDDA6D450B794A2470B602940CEA474CB289D0E95D43038144E4158DD60017C8BE64B1D73636BDE21E6A56926967C891CBD3BD9E1F255C680E04A803FDA47BC34D47DFC6955484CA528A4BB1CAC4559BBDA90C26129C8F4BBBD843A654481FF975D79C5472D6EB22AE0DC9B30CBB7087D20BCB079FDA14592001D67EFF004A7A9237732D702F5261588EB8BC0C29280CBAE951CFC34C84CF33F7D69CA64EF237F7D22B626A5DEDC9ABFAAE5AD6AF71CE2BB8B945BB5E32C1298931A8F3F2CE7A4674829494920A998B7AFE3DD1F1112DE356F72B73C169D5A1A897801C19CFF74F633D0014B8952E6A77C9497147A9A3BF2F4F386C70AA98A4B7FB89B7DF367E50C76876B304D9AC02F369318C42DAC308B0656F5D5E5C3A96D96508924ADC3EEA6025524FC63484C7997252A5EF064BB817BD1AAC28EE747B9896C1E109989941277CEB6D79E8DA18E0A7B647F1CEF672DCD59639836EF71DC376DF6B6C92F31F87B4B9B5C46D9BB8014801286DC0B052A1EF4E7293A72A26D3DBF2F0FBDBA40A666CC2E3D0E61FBDE3666C45AD43E67D24336E50915BE7406C3A068F93CF690FE27DED2DED3D8CE22FBDB71896CA6CB3AEB9E1E0985E217564A530A51848B7E2289E18303204F3CEA958CF1B1438334B00400154CF5E83BC5E70BB092129FA0BB8A33E62BC41D7D19E352F655AC731FC4978B5C620ABB2FAB897738B3CA73117540FBE5F5E739E692732233E75CAF6FED39FB4710A9A851AB9727D2B5E14A748EDFE1CC148938044B28E7415E56B1E3EB4CDE19526DA54DD895369F79C00F1E594827B0FBE74E9F2F12A7FA946A6AEFEC657CF8C4E2A4E140277464C186B5CFDD1A14C3F6999B26CA584DB32FE61C7D43856E6A004A844C4C08EDD2929180C44D58241041CDF3CE95EC38E51A7CF91203A4806BCCB52C33AE6D912F18537938DCADEC41CBCC482585202DA65CCD7C6A480509332003249D055830BB1672EAAE14A6BD73CB8D5E31FF7C932412E2C74A30CEB95697A56CD1D0DFE14FECC175ED3FBFCC3EE2DEDAE2F3677642F70FBCC5D7768E34BC55C0FB019500524A16DFBFC530418ED7CF0F6C55267CB74BD45817A5DB8654D699C722F1A6DE42BE6913004905892181A80E6CD501AEF5CA3F431D9BB0B7C1306C2B08B56C2AC6DAC2CAD136CD2415B26D5869A1EE400904A24EA20798AF49F8730624C8410186EB579598F1F5B078F2FEDCC519939656A054544BA5D98BEEB74A3BDB52232234A3E1254A82607E5F8019F3EB53D8B6000E7EA3F0623F0409054482C00A5AAEDE5F8E752223D73AD30EFBC092F42DFDFB6873882C87F7710E11A1F3FD052CAFE479FAD611945C13AB7DE2BAC42B0510414410510414410510414410510414410520A0CA3EF8FDE082B10422AFCC7EF9511973A9EF14D106F1D4F7860DF8CAB8BA4BE10AB684F8204951CA4F148826748F2E735A9C5A650751B02CEE7EF4E7A16778C09BBC580AE84063EEC6A6F9443629B4786601875DDF62453656B6E852CADD86D30013CFDDE5CCF6D74AE6D7F1548C14A51DE09DD06AFA5433177763D69430FB0FB3158B50F9680ADE672059B57CCD581E2F1CDFDE56FCB787BC1C6F12D9DDCD5ADB5CD98E3B5BDC5313438BB669B7125B51C35E6090161255C53202C0D6BCD7E36F89328A66CB137250A9B5C3DF507A3F38B860362FF008DB8A5218674B659B50DC509AE9168EEABD92F6236318BDDB2DA2B21B57B758E3CDBF7CFED0A1ABDFC1BC1D24FF2F2A4F88D8014A8933091E9E5CF106D795B5A6AD5BDBEE54595506E0E64D281B325A2ED85DA3FE1CB32FE61960060A0A62E1A879E7964CF1B9B63B1D86E1B6ACB8C3447B89290E2471A724FBA3A246881D001CEB9D62B664B52F7D018073614CAA3EEF4E108AB6B4DC54D50984153B1527302C78DB8005DC9891B64F128B440E10787CA63491A7AD272F67241FE2031B8041200E55E34EC0C6AB98A0EA2C5DCDC9E1C3BF9522585B86FDC48303CB9E7AE9F3A792F673D5A8C031D682DD1BF30C264E5283871AB0A9B0B547BEE785D95F0FF0014ED1B2C33EEB16CC1AF260DD4F7D10F9A599D479B7A8CA3D09E1CB3F5D6994EC0284C6018756BFBB423F3EBE66833D6BEF8C7B4A48D9C1C2D6064F47BD6AFAE5C7BC3844DDE00062D71E9D385E8D14139E5F993981C8CC4FCBECD4EC8D9F86491BC9191B015E7D87EACE12A041191BEB476EFCA1322091D3F6A974C9C24B05928A248A00F6CBEF0B82E1EC4E9CCC56940201CF3CBD7A695CBFC452A69C72CE1DFE5BB0DD2D95CF3F57845530A0EED2F753D7367D6A2CF9F5ABC2ECAF87F8A869783C44C0CA4AAA2D56E1771F9B88D7E6162412599EA73D397210C8E0F6C1F55F2DD5071504A240D073CA7A7E9DDEA36229406FA40725BE9E37CB3BB346BF31CB6EA8F162C6D639F56D213B976D5D4969DB64BE902389490A1D33F3D3F4CA96FFD3A08344922D720F4AD9C3F93C6C4004A98BF07E568B2368762764F69EC97677383376D7290A2DE24DB084396EB2642D0F1CD241CE6397A544213B4B66E387C952D3292A0480481A5851E95D7267845782DF3BE405050240CCE7A54B861E4D5318B707B4DE4EEAEF14EE0B8CBDB5FB3A544B96F7AFBB7CE5AB4924F0A12004208048E7A67CABD2BF0F7E224ED9864A67E216D2F75C1516AF33F8FC4362B6703FC5212EE2A08347B7EFD2367776BBE2D99DB05A70D52D16F8C3502E2D5CE04A90E1904044950CC73123E75ED1F097C58C163254A926783BC00502A1C19EAD6627D728ADE3302B1FC523743B8CEB9E56CE8391158CEC16A2DAA0057BA4A38648D32E5F0D632CABB16076A4ADA32C2A52810A17497EB47CFF262066E1EA686DA6432D0713C4F111E58ADCF0506E3DD72552279126358E47965D28988DD9B7725C9D052312D3BA902DC0C3C52D2A882329D48EDDE9FCB4921C0BFB17FB7DE3788F7D01FE34F8A5942735ADB3C2B3D33CF29D7D7AE44E9A99128953BB6593E5EEEEF187AFA9C873310B718B58D95A3A1E778AD5A0A2EDD5C94964093C456BD00027B0EF3548DA9B6C4B593BE46ED6FD43D6B5D736BB53748ABDF22E282A19B9F7BE4CDC7DF6F5FE2F5ECE3EC4D86E202E2FAEB6C36B196969B6D9ED9272D2FCA6E4A6129BEB6E30B0952C8200CE388C659D77FF5FE1E4A861953909995AA94C2E5DFCEE6D5368B56CED96AC44B44C4A014577C815625830B39B13C0B111F15FEDC3FC6A3DA8BDAF710BDC3F0AC7F1DDD06C3DE3AEB565846097379818BDB75A8A529C4184AD4DB9C42240CB356550FB43C609C4AD72E4CC1398FD664AB791517D0EA7AE6C22D5B3F634A97BBF4925FF92C7D4FABF0A7ADA395F84E078DDE622EE33893ABC531ABA597AF2EC294F5ABE552A0E070C2D4B20F12C9D5649E66A83B4F689C5297F2D4ADD36DEFE56620E82EDCFA8BF6CDD9E12120A4134AD08EA7FAD38C648C31FB5FC4A18BF47E19F1C291E100949E44C9CF21F03C8553B1180C5CF5B82ADD7767367D2FEA783C5BB0F864A775EC187D5567B90E07F4C4466CD96B816F72B6997896C04F01E29CF84731D3C8FD625709B2CA640F989753177048F57B171CF361163C2E21725210927746552D7FEE9F78C86E5F3C2D5E01D3F96667E1AC1EFA7956B330528120A6A08CA9D72E17ABD61EAB10B2C9049CCD781E6F4BDDCE6498C4B88E32BB40E3B7971E1B685136E4AA38D45449199CFDECB2F8D2B230B2CCC0C81CC0A3D05B3BD39C44E3A74C092A06CEC3837524FEA31DE39B4F717EB16CB42DFBABC7ED6CEC6D900A94FB974EA18494A355105C4E911CB4AB56170B2804B804532041AFDF2EFC22998EC64E439DE51BBD4B0FEAF957B1FBF2FE04FEC896DB81F662C136DB1FC33836D36C6D85D622A5B205D34D78CA72D64A93E20059746BC87202AFFB0B67A4AD13129B33306BD1B3399A76BC71DF166D19931464A95F4AB789075150D503DF48EEFD95BDBB3C4A67371E990A8CB52223489CF90E935D87038712B0E80C599C96BB0CDA81B839EB1C7F1B89F9B3D8549D7514AFB01CDA25D8694D3010A571112A999D4F144F3A6D8E98CB1734A0FBD876BB44A6046ECB2090E58D0713FAF6F0A224054093965EA6B6C2972391F407EF0A62BF80E7F88748D0F9FE829C29DCB97E36CA1293FC7B7A98AEB585A0A20828820A20828820A20828820A208283404E90426A58989223A18EDA73CF2D4532F9DF327096902B4734F7CCFEA36092438F7EEDFA8A38D3A052893DFA7953B54ADD04BDBDE43DE51A2F7902A070ABF93088C77114A2E0B1E138B331C604A64C6A67BC9903F5AAE62B6D4AC24C3294952C82CFCDDB3CF2BF384C6F28D378F04F36F7ECC2AE5DB698E24AF212A29CF834FCC7ECF6A98D9D306D097BE92CE1C0A7637F6F0BA70EB51DDDE21C3B17B67A03FDDE2DEC5B1FB3C3ADAE31572ED962C2C5B5B972FBEB096CA5292612AD388C10419CFA662A9DE2CC6AF65AD692ADD090A2429B9D5FCBABB185E56CC9BF3A51049269BA5DDBB5732281E39D9B7BBC0DADF687DA0B8D99D8470586C8D83AA6713C56E54B698B86C9215E0BED92DAA0A5691235307531E55F1E7C424C84CE97BE428053170C2F6FC9B9E317DD9721184402A439A1500DBC454D985B36343934664DDE6EC300D8AC0DAC330C75C200972FDA523F10F3AA3C4E9538912A4F19504C9FCA44F39F246DEF16CFDA78B5844C56E952AA0F13C69976062C93B169284FCA4A0518850147A061C5F57A5728C9E30D65B4B4D332EA1325C5BF9BB394709D067DE72CA29FEC3D978AC6292BDF25370E4BD6EFC2B50D4E358AFE2FE6CC7650E0C580CDECF7A1C83EB0ED4DDC7861A4B9C484880567DE8E84F6E5F0EF52F8AD97364CCDC25E81C1BBD6C19A86F0E30A7E5206F01BCEE5FF007EF46786ECD9B8DAB889124C920F3EBA09FF0011148A700C5C8F2ADED63966E4DEA61D2A7053B9150D70C29CF5FCF08921319EB4ED18548CB93DFD0FBE10D94B2682803DA84F33EC426A7529E44CF97EF4B09433096E03F50814A8DC8E4E5BD228E20A923E741C3CA374BF36FC424A9449AEF1E469D29482B53874D40602CD6B743E50B4A0524124B747A0A353D6E1F8414DE648985B74D9E9563A519BD5A1E226240AB5793F23584CA0924E59F9D47CEC1E35544CD2903FF2229470DC7CFAC2E89D2C2402AB727EB0BA084240CCFC2B28C3C84A00C44BDE99A90E686B535F2E1C6194F52A62DC1000E3F703EE62AE31D0FCBF7A5449C2972896906C1C0A33F0A75E9946A14A600914CC67A450596DC254B52E0C6423C8EBCFE548AB0C924EEFF10EDD790A6679E90A198A09A11BC727A0E2457850FEA02C3491FD3409FF00CB9F63CB23CFE1DD33849AFF004EF30E0587DE83EF78513369F536562D6A171DC8E6D10EFD95C5C38A0F381A6103DC4B248F132829781FCC397918D66965E0F0870FBB3100CD62E480E789CDAB6E22F487D2F1084A494BA89762AB26AC4A4D18B1B0CF85DAB9625F49B77382CAD888526C00429D11FF00ED1A2A7B81A9EB3542DA88C5E1967FC75196905C6E929B170E539DB33D2D0D66265B28A54A528D5D4D47B80EEC0BF105DAA5846BD6DF6EFF0013B1C5DCC6F76C9561F8F2B85C78DC4B56F745B0090C168712D5C20F10CFDE396822C7E11F1963F6762A4A66E21659401FA8B1008096CC9D72D6EF11388C2198414335406E3776D0D99B3E117EEE67DA770EBCC753BACDB65BB85EDCB29F089BC29658B85841582C970F88B052019E73CF9FD00F85FF001230F3244846217BCA5000B9A1714BD620315B266B19A94B807EA09FE4C7986A3871F88DCAB3BE57876C8BA520BCFF00190B41FE9848CD3AF2298CF31CE73AF4361F684ADA4533A5325243E42841E26BD74CAB159C4A55266143021E87D5DBD323A3C4938BE00550549001E2198331A7589135609612100EF2599C97146615BF6CEB1B4997F3684B1CF2D5A87F3EA230E6F3B7C5B2BBA7C32E718DA3BD69087504B5685C407AE1491010CA164712B888100EA467A550BC5BE26C26C991314B9A93BA0E632E9A8BC4A61F644D99BA405104DF235BF12CD4EACD6E6E6DB6F5F7E5ED28B7F01DDFE16BD87D81794B6EE318BF62E30EBEB8609502BB47DA25B59D609C80226BC87E34F8E7B3F674C9C962A3501B758F98EED46A71964786310A620B39760F605F95A3125A7F0C1F673C69C462FBC5C2DEDBFDA0716A7AEF10DA466D71271F7D47895C4E3A9E25210A242330427872E9C2B1DF154ED19AAC6C898B421C90016A0241602D6F4A5CC741D8FB31586C3225A92193725EBE55E74FCE16F685FE0B9ECADBE0D9C7ED304D9AB6D95C69B6949B17B0AB4B3B2610B2212A5292D9500204C09E94B6CBF8B0654C08F9AB05446F1DEB9763636A1AF4CA9328F9685329296A1147B54BD28F947C9E7B6CFF000F9DE87B186DE5CE0B7B762EF615E717FCA719B65BAE043613C4A4DD5C1425B1EF282120089D6BB3F87BC6183DA625283998AAAC16297C99ECF9F6033899C16365A5410C2AD6CA8D90FBDED1A02EB88B0B979448BC55B94153AB1C725794A5594C48E233D72E47AE6CE99849884A952D2491A034EA4F5A18B4E16626687B0CDC50F56C88CCD416ADA2ECC27690D9DDAD65695A161247826502139807491306329EB90AD316100ABE52581B5393861CE1D89E25CCE160722E2D5BD74EF172DCEF01BB7B7712B0F12A040800807389CF4FF0476859A852890189CAB53517BFBBE50E918E949014402CF7FC57BB4611DAADA6B9C6826C9A2E361A2B5B4B54849CF8B32390233D2233E54F307B3E6CC50AD1FB1F5AFDDF9C56D1DAD21285380287477ADC5AF9DA3AA7FC1DFD86B6EFDB13DA576371EC730A69EDD76C2DE1BADA2BDB961C55B5F29482E590B470A4B2E16DF6929702A20E99D5CB67F87F1535490154A67F4B1E5996A5F80731CDB6B788B0F21330A81234003F02DA0ED4BC7E93FB01B1D65B21B278760382DA37656F63676F66D5B9406DB422D9B43321090350991020FAD752D8BB25785968DE7269BD5156F2E39FDA38C6DDC71C74F5A83115DD29A5C017D403C8DE2EE4E1A5B750B4A885092449E193398112739CFD7CAEE89E94CB32C83BA02402C09D58EB9FF4E6291330330CD0B05AEF52280B0E41FCF8C4A21B73800594F144652447EFE597D2A33152CCC5BA012D6BF12D5FDB651338649948017FC99A99313CAF7AD7BC7A968A673067EFF7ACC80659FA816B5AB61A429387CC4B0A177ADBCBF10AA41020F5FDA9C13BC49D75ED09CB414062DD3A9FBC55588520A20828820A20828820A20828820A2082B06C73A1A6B04357092A910620C73F874D29B09252AF9C4589ED773A7E381261647F11D7D63DE11911023CB39FF13E5F0A5D33E5CC05233A000F31521EA74E7570F084EDEAB351AEF4B5BEF0D9684A5D04244281E3312721967F4CBD73A85C76C413D66600924D4D3215AD037BAB08DA4122C0F3AB7E351AF1CA20EEAE59B017F7D7AF34D61E96C952D6A00200499CC809198EDE672A8A3B5E46C1428CD584A520D5C0667E79BFA8689297294A28009330FF001EBAF0229F6BC6816DDE37B53BE6DA4BCD8DD8CBA5586C660EF70E23888716DA71343A78D6961D6E5B7BC35052083A695E6AF88BF12E562F1D3A5A673B3815A160455F419F48B860F0DBA8131613F31817D1A819EA1F3F3E394763B63B03D89C359C23006529B27004DF82948B953B3EF28F04020B854A93CB3CEBCAFE2BDA29DA6B9A42C2829F37B917B8E033B7030FC214CE48278753F8148C8ED5A316484DBDB28ADA4E609226559A81390C8935CC8ECCF95882A6DE0083BC03839973D79035B4094A941C8097CB870A690FDBE7E93F7F1E9F3CBA06C4C6A70410924815AD038617FB76D633B8751E7F8852A4F138BFF2166685120B541AE9C1ABEE820DC3A8F3FC414D44D39953F03FB8370EA3CFF108B8E70923E9AF2EF59F9BC55DFF0070141CABEF8C3271D83E5FE34CFE347CDFFE6E35FDF383715C3BDFDF1685DA3C4DA4F6F8E7AD1F37FF009BBFEE0DC5708528F9BC55DFF706E1D479FE20A3E6F1577FDC1B8751E7F8828F9BC55EFAC1B8751E7F88294FF10CE0666EBD9BD34A59E33F2D46CC7BFE20AD0E1021C6E8074A7DC463E5A8E9E7F88A82E0465975EF9F5A6EBFA32A644501F7CA32259259C41E2F74FC7FCD22AC484D013C2B4E8CFDED18F96751EB0D1D77357D807383DF5FA0CE9A2A7059D586AF5E27DFE5D252C18A401714D5DFA8B70866E3A0F383CE35D3CCFE9F3AACED762853598DF3A12FFA6D2B19DC4B73E6F4E74AF0885C55FB8B1B471F48438FDC148C3CAA55E004901DE23FD9C40F2CA35E754A933D3227A565552A1BB57DD635DE177E0F58D0A415802C9BB1707EE465FD574CB7FBB977B6B311B0DE56C95D2F0FDBBD970ABFBD5DAB85A4DE21094B81B940F11CFE8B452412012632D0FA3BE1EF88132848054CC520DAC14053A1F79EDBA4EF02DBA5D801A86AF2BFDF4CA7ECA3ED9580EF81DC4365B1B4230BDACC0128B4C42D710E06431F854A9B2E942945690E2195384919EBA1AF7DF8476DE1BFEC72F10A9B2C112E84A9896B76AD3D9A86D2D8E573153132D4402EC915AB87000635ADE9D1E28DF57B746CDE07B46E6ED776CEB7B59B5C54AB774618A45EB36CEA9328F13C1571A0093AE723C85517C63F1651B2513512E781BBBC1D2AF3BF00F916BDA37C16C73F4AD482294045B982F4EAD666B0C3381EEA76FB7938B33B59BE4BC7EED9B858B8B4D9F4ADD5DB59A490A48FC2BE084710E052A3533E55E57F15FC6156D33364AA7A95BCE03ADF5E3DC5338B461309B80580160010389CB8D73E31B8786E0D6186616C5934A4D859DAB6136D676E435200192DB040CE01CB339EB9D712DA32D1B794B9AB65397AD49AFF006FD2A1844DA48410000F99E7906F74D6B0AA5CF1471F006C49012040001C8C752209EB3355AC561938196A909002402E05B33E67DDE25E52B725303900C59DBF157CBA45550D253B93D243B3827A0E99FE61B2D2E4B8A5DFDE6FEDA39EFF00C4A7D97704F692F672DA8C1C5AB08DA0C3B0DB8BDB1BB0848B91F850BBA7385C82B1286B87DD1A6B3CFBD7823692652A424A9882C43B5A9A9B74C83DA16C0CB22728B9214CDA0028D90ADCF334D7F3D2DA1B16B66715BAC19E654F39657F8A58DDF12415715A3EEB08E2D39B79157975AF56F87B1699F2905C10522CF980DE6743ADDE2EB83514802AC59C727AF95A95B8D71F5962096C9466985AE12A1060A89032D321979CCD58A724A8D29C6CF4D58F935844899617F5172DDBDE66FDA14C4F1305B3067DD33DFD674CBFDCE68230CEA0A22B5BE872A0ABD33E30D27912D0541419BF8E46BA017E59579C3EC5ECD637BC4DB7C1361F044ADEC5F6A313B2B2C25A6B894A2872E1A6AE8F0A7DEF75B70A8C010019D60D8F676155BE9A549C85068F6E428FC294A36D9C7A50140920006FCBEFA77148FD383F8597B1BE13EC77ECE9B05B0C8B060ED462F8622FB687130DA7F101C7D28BC612E3BC216327783DFE4234AE95B2E514A529003D1DF2FD373BD9C57906D6DA2899355F52884BD07F153BBB9CC69CDA3AE167C66DDBF10242C0293C208100C0D7392209E5D2AE5202826B66D69937DF93C5594ADF2540B82491571D21D4099813D79D388D60A20828820A20828820A20828820A20828820A20828820263A9F2D68820A208681242C922049F9CFCFEF9D656DF254FA1EEE47DE164FF0011D7D4C567E3E550924B4D014480E737E3DDBBC22BFA9DB36F2688176E1F55EBD6ADA92D9F7787C6301C912A2D811300E7940F2CEAC7326E1E561D3316A0FB8A26A0E54DE7ECFAE90E64A52900A92E4359F8B3DE8DD41D234AFDA1B6F71CC5F6AF07DD46C4DD326E6E14E8DA4BAE35163096F843ADA6F548CD83728E24B1C63DF30398AF1E7C61F180C11C4A24CE228AA24B53BBFF0064F3B3ECBC3A66A1334A46F1D722096637D3B9CE2736476551B35875AE1F62B0CB366994BAD9097EF1E7614F9BB23FE44870A8B71A24E7CABE7EF883C6B88C4ED25FFAAA037D55735726E5FCE9468B44A9094824951DE1549341C86BC7F4D7BDBDA9171F8D7084BCAC94D23FE088E1E2819F16A74D49CA9CECFDA7FE531592A7D59BAFDC5BB88544B480C09E04D48FB7944BF0210785B2A299C8AE264EBA72074ED560DD9653BC012E1CE84578D630941DD01443825C8170F4F7E50F112013AF413D35CBE039D454FC52A52BE82522CC29AE9A91ED8C6CA4A697D037BE66292F2418827AE83FC7C2A57058B2A940A8DF2068393D89CF3F383743DBCB9D9F9E547F2F3C71FF0053F114F3FCA1A9FF00EA1F98CB0D07610D5E738946011A73CF4E51F7AD63FC9FFC8F71F9BF970818683B0868A4A892441E809F43C88158189FFCBCC77B8F7DE061A0EC21E30785B4854939CC79D60E24E4AF31FB818683B08578C743F2FDE8FF00255FF2FF00EE1F8818683B0838C743F2FDE8FF00255FF2FF00EE1F8818683B0838C743F2FDEB2312A71F5663307C9AB06E8D076838C743F2FDEADB809C9387493BA685F9F11ECB528C6022C0123967941C63A1F97EF49E216835052189766AF36CEF7FEF0520906CC5E99F384D464935018A9EC0A4101AC469F7AFE348374053F0B69C63CA839B88DDB9AE8F977AFBA5E009038F3860FBC12E2926728CB91CBCFB7DE74CD38B4998C0DC970FC082E01F3B5DCE65D210E12EC4077198734CA9C61929C2A39653AF2F84534C7A3E64B531269C686BAE66F67E758DCCA4BBE438777A57852FE69BC8B552136F745D26F012DAD59A590DE64B44FE52ACE48D4F3E55CE31E172E7024167B8B38201E1957D18423F2C6FB8FF0069B0A9BFFB9BA37DE2DABA4E1D86B57CFADD0E61CCB4BFC5BBC414E94290A1FD654C70415083309ABEF8576A2E4197F591BAC6F6CEE39726B17221432986E9DD0A361CAA47366CC671C32DB0DD66DAEF1FDADF15B9DC762EC6CAECD38FA5ADAAC4F0E7DCB26EF90E5B1427F00F5B8E071C6E5C4BBC792579098AF42E07E2A1C0ECC18233C83BAC06F3573ADF2D39BD225A4E065AA4EF280B5185DEEE286ECC0F6CE3A59B89F642DDFEE52EF15DA0B172EB6A76BF1816EEDE62DB49E15E3EC3C904BAAB67C00E264A9404C9223A5722F1778AB13B5D530A6728EF12CCA26F77AB7A733708CCC2A0252120005DC9A10D5191CEF9F1AD36DF8906D92C3656B0911E33F9BE0F31C407E549C9234E181A571BC527186715EFAF77789724EAE6E5A909A30CA4555BAE1FE94BB372233B9191B3188F71588A53E0B2CD93CD2A789DB9054F0067349D01CE0796719558F666D91839604C249CCE766677B758D172AA9980A86E9A007E93615705EBC7F6DD09FC3FF4497164192B3EF66ACE275806009E5E54DF17B4938CC4BA4BA4F4FB56BDE967021D4B5A94002430CB53FAAF46BBC2C0CCE4479D26A414B4C71676177A9AB5A1DCB4B800B91C74C872A7E22036A70D6B1EC1311C34AD4D97309C52D9C4A8C21C17166F37A664E4A8F3D62AD1E1CDB22462A5277C065005CD4641B9F57ED0FA56F61953269495209484253553D89577E62968FCE1FDBFF76D71B9BF68BDE16CFB1641AB45627717569E2B640578CA76E1D288024CAA7202799EBEC8F877B4062E549ABB800BB31CDD9F9FE22C52567752A0E1C02791AE5A3E59BC73C6C31238978778AE161370B7810A3C21AF09453EF8D13C6734C6B945762992525767A03C2DAD4D5B83C4E4B989F92096E2EC4F1035AFDE9085E622CBEF1B62F21840506D574EAB8584B8A84B4852F40A757086C7F728800666A470780F98A480379449167A0FE9FD3855F6B6304B0ADD20000876008F4AFBD5BE9CBF8057F0C3DA1DE9EF2309F68EDE9604E5A6C86CC3EDDDECDB57D6EA43B71E282DADD425D470293C694AD2A428120826ADF80D9AC5F70D19E99D074AFE9E3906DFDA43EA4EF92B3BDBA1D817E14F76A47DEC5B60F6966194DA39C2CFE1D86322250DDAB4969A4B519084A52083CB402AE184C304904023785CD05079380DDACC1F97E371049672497A641C9AD34FC708BAAD0CDBA0CF16A27AC18CFBF5A9C9619091A08D64282A586CBEE4C39ADAAE2CD9EBC1A1682B30414410510414410510414410510414410510414410510414410D1C5F0AC891AF3EFEA3FDCD65C2D1B82E72A645EB58DB786EEEE7FB78A3C5EE9F8FF9A8AC6CAF912CCDCC027B5ECD93FB35D635DB7FFBD7C3775BB3AAC75E702B1828718C1EC10525DBD7AE3FA1C48689973C25AD2A907DD1279E7C4FC69E3D3B2B0F365998A4965004A99E95B1BD7B7689AC1E1C4C60A70090F43AFA5188AE547B6ADEE7766718B5B0C5B793B5FC573B47B6AE21EC6D2E7129766D30E2861C1A0B1C6D9532A471956B1EE98AF0CFC42F162B6D4D9E04C2A0EA04825EAEDCB2C9BBC5E70125084A120252080523DF0BD5DEACD48D85B17416112A99923FFA926075C84039FCABCCB8DC2CC38B54C20D54E1F2AE629476353689854A19003570C7D2255B74189D0F2E533944FF008CEAC3B331064EE87634B919599A9D4D78D2032D346038D05BDF778ACDC42A24F91D7E67F71156D97B437D206F0B35EB600D34D73A5E0328640371BF90872DDCEB9EB1CF3FA8D7B99CBE0DA7054E2FBD7B1CEEFA311EF211A992ED60DA7F5142DEE2513273E93E5D7B67E7CE9FE154508DD2E1ACC7524BE46BFDB9AC6532D21C100B379BF28A7C5EEAF8FF009A75F378ABBFEE37F968FF00888A819CFAD1F378ABBFEE0F968FF88828F9BC55DFF707CB47FC447857C2624FA7FBA3E6F1577FDC1F2D1FF111E78BDD5F1FF347CDE2AEFF00B83E5A3FE220F17BABE3FE68F9BC55DFF707CB47FC441E2F757C7FCD1F378ABBFEE0F968FF00888F3C5EB3DF3FB9E7525276B7C997B80B76EAF6AE59346BF283D83720FE8D1EF8BDD5F1FF0035A4DDADBC18967766F7C6B7318F95C13DBF5078BDD5F7EB51B3717F308DD51CE8E1ABA0FB40658C92FA9200E4D9FB7178F3C533CFCE73FBF5A66B24A492493C4EA7EF1B09696A80FEFA53AC47BE789C51CFD7EFD2A00E20A71052E5277B2350DEEC05B5685E52185817EA5EAF97B109559D28F9D87A312D5269AF6A690AEE876DD0FA35619E2171EEDBD838827F16974B57490786CD2D82A70B8BD1B0A00E63588D73AA76D4C12B7882D7A70E5616393F1840A1017F31949DDBB00CA761AD5B96B1A75BD1DBABCDB0BC7773BBBA7DC7B115BC96B1FC6DB59534DB2A5074A7F10D9E20435C6885039E54B6CB92B97BA0687AB545B8BFBAC6FBA972B20BE5BD91AD9ED761FB78CD3BADDCE6C6EEBF0A69BC30B5797EA6C38FDF39E1B8F3B70E8E3789740055C2E1508E5E750FB57138B958F212A59008A034ED5039106B68728C5A952C2024A124B7D4E0E840AB7BA59865AB14F0979F5C80B981CB2072CF969E8672D2A6366CC1380F9C5DEEEDC0D457EFAF11BCD595EE84814A123B822BA8B9F2314820C919093F5A90C64AC39964A521C0B518BF072EDD2372779B80CEE48BB0FEB8E4C551F68485851129C81A3FDBAB7611A2A56F26A2952458B67D73F4A9A380C345A0E1002889E84C1E672FAFED4C367A9631010B777CF2B75A8E5AF2604AA5CDDD043037CD8543F1A1FDC435DDC30C922520C99394F6FBC855D6724270BBDA26ED4B015F6EE468F13D8594A98000EC4DF4FC9E432A45818FE36AB76EE5F6B34B4A6D2A03FB83A4214394829267B738154995B53E56D0090B23EB19DC38AFEBA0D0582448489441009ABEF0700E4D42DA6BE71F187FFA81B65B08C037E5B0D8F61CC36C0DA56F1255D38848485A99B46C09226482A233F809AF777C12C48C56137DCA8A44B097399A171CB5E22968D1531686046E9259920330B061CF2CA8098F9AFC6F16C3F01B753EA32CB6A507594C12A2EA88494A4E47878B889E5F2AF50A2415CE09A0700D4DFE9E5635A67D5A155E384B90EF522C1A94CC6A3871615AF4A7F8567F0FFDA8F6FADF5607B3C6CAE99DDB60988DADEED1634A6D69B7BB4A568BBB66937052A65C0975A2D2C2B39C84E756CD95842A29DDA1166B9BD68294F6F1CFF6E6D51BB30EF1000CCD0BB017273A796B1FA6EEE1B72783EE3776F816EE764F0DB2B0C2706B0B5B44AED594B4B70B0D3695AD65109254A44CF73ACD5E7098408028038161439FE4E669D0F25DA78AF9CB2B2A721D8136F6E3F119BDBBA6D572D59356EB86C1F15D08FE9A4C1391CF5333D0CFACAFC94A4DB26A5037403D88ADA91BE52A193820F1EFEDA272C8116E906322AD34D67D35D0D6C030034871292120A4351AD9DFDD6BAC3BACC2B051041441051041441051041441051041441092DC28272C873E9973CC51190926D5EB088BA9310358E79F97F98AD54ADDC8C2BF256CFF004F272FE622B55C25313AF6CC72FDFAF23956A99814486208B8BB7BE0EF0CA7CE124805DDF2EBA8E51EF8E989391E5D23E3FA8A5189200773661EC778DE42FE6B310E6DC39E5A373D18C44BD769F1C85B6B6D103FACA10D679895729981DE7589A692A72A5E2F70B14DB4B86D4FECF3A3954B09CC96B817E94108BF74DDBDB3B74A5071A6D0A7096C923810095A87284804AB3119926293F104E4CBD9F3959EE1672327CADC6FCA1597237949033A17CB9D9A85B4B738E66EF0312B5F684DF658E1F863C87704DDABEE1714EA81B2C4977AD85280E194BAA61C411C8A142BE76FC62DB13C4FC42113084EF29802697B6597A728B66CFD9EA202897766EE351CA9AC6CB216C5B617716EA6E5B52186B86253FD101032D2047BBA488E535E503B4953274C1314E5C80F9B12736CAEF61C62F385D9AADF9403020135BB90FA66F5F2E3E32E301094B4AE28049464548E70A1CBB4F2A8FC62A52D5BE12695B720D7BB77AB878DF120C89850BAA8163BBAB73CE9D4C4BD9A177297148040409F7A73D724F726047523D22D78B4CBA80435DAFECBD7D61B7CF4DC8507B53F2DC871E8ED4871C9250E36648287010A1048981391891FAE54AE1B6AA779AC468CF7E9D69C236131EA283DBF6AB5BB42C8511014A1EF0CF3CC40CC1CFE3C888AB361B1E998016A0E1AF31F717BD046DBE38FBCA02F804C127A9075FDFEFBC2F33692504B120E675D33FBB508D21C4B96575AFEFCFCBFBF3F11D95F1AD7FEE5FF00946FF238F9FEA1637ADB2C29D5C908CCA47E6CC9D073F39AD86D548A10934B92470EF1A192BDE0901DEC6ADD69FB8A9ABF6DEB537694381BCFDD508518E83E1FAC56DFF764FF00C5376B9F7CB58D7E590B0870E7476F4849171E3B62E129712DA89038801106338319F5A708C57CC1BC081D5BEFEF58D5437494921C33F0F7EF48F5B790EAC368701513192B2FAD6FF38FFC8773F98D49090E6D0E5C696DACA0AC122261479FCEB266A8162A1DCFE6308585A428380758F034E75CBFFB4FC2B1F38FFC8773F98D89604E91E96D43FBC7C48D7CA4FCA9BAD13261041735B1F5367A7BA460170E338F3C357FDFE07F723E9594CB980015F38CC78A42BFEC08F3FD33FA52884AF371A3BD3AFE3F3047810A9C881DE48FD294620124B8639935CBCE084D6CA8AA6419EF303F7EDF6602660662B1466B9625D2EE4039BEBA52B6BC2889BB818B56CF7F56F3D2F08A93C399223D7EFB0EB564918B461A5042EAC2EC3F67D3362F0B09C86722BD1FDF0AB6710B7D6B7AF337EC34E20377CD29AF1164F8B6E1485364B247E59073EB94F3A88C66364CC0A1BA93BCC5C8167A65D385EB684D6A96A5A16EA1BAEE9C94FA8A8A1BF522AD18CB77DBA7C0F60938B5D3015718B62AE788F622EF0AAEA38D4A203A3DE02145226721F0672368C9C3972C0E428001CB5F3E548D8A92A2086DDCD3404DC8D7AD3B168C9565656968CB6DCBAE25256A2550A24A8F119E5A939F6D2A1F1DB4708B9EA56EB92694A3F91D47E21352492E0539D7ABB76E668F14DFB8EAD4916BFD36D260A55209197E58CA72E7A914D65ED24053CB05366E87AB0C8DD898565CB5937625AEE3FBB5790A98A537896C04290E123290099394E67BD3A1B494AB971A1A5F32286D0FD1254F5151D5C6B407ED96B0A8BB6C988503DF2FBFDB3A5D18CC29ACC48720DC03916ADAF6D0E7A29F256C4D2D4D7B1F7EB0CAEF186DA429B1C5291C898CE35FF03E154AC66D49387DA7BC94B277B40C187B03288B9B839A6782092E680660D0FEF219877318EB17C5D6A51E02A19926662750797293FA54D4CF14E1A6618C929014450903833D726ED16AD9B86504A41760039CA8DC75CF964D1108E0C4ECAE0282B85BE05BEA50F7441E240933055103AAA0D57F01B326ED4DA09992CD0A9269A13C34EB4E6626CEE4B60A20153900B396E17A718F91BFFD484965388EE56F30F69C4DFDC1C7D29B72902E5496BC24A961033E10905733F973AFA0BF03B616270D22482BFA1613BCE7316C9FC9C6B1158A989492A72082F5BB68F6E6EDE91F3C7ECDDECBDB7DED69BD9C27775B05862F1ABBBBBEB165F79B69DB8B1B265C71B3726F94DA54507C2F10A0C47109D04D7B1F0BE1DC44D289A934212C43E8D96AC18778E7FB5BC4F270D315209D453859EC7EFCF2FD38FF00868FF0F9D8BF61EDC9ECD6C761163871DA4561ECBF8F6256ED37F8979F7909B8E15BA948510DA96B400A04A408EA6ADDB3F64CCC3EEEF176E39E7EE833CD850F69EDC978A0A42412FC3E927537272EB6A474F2D597C2C2CAA19CC04926739991E64558A58DD46E9150C05F2BF7FDF3AACE5198A26956FB7A0F4859D65F449B54B0952BF3150890489CC769FF0035B924E64F38412863514D29EFDD61DA13C0909D32CE349E7F3AC428000ED9C5744660A20828820A20828820A20828820A2082880D013A434715C4A52635D0733E63CBD27E49AC29DDCB7334F661295881F3B70B57A31032CDA95AF11C23D44A567581CB2D3E87CFCC4D2A847CCA6A1FC9FF00A76CE25D202D0CD5D6B9E99F4F285B252028721A4FD7EFCE68124A54EE1B4ABB6869E4FD62176949DD0140125EA720DAF13E7CCC789546474F8C44E9EB4B8486DE1BBD2F76F7C222F0D8A549582350F4A1F6E69AE90C71071E470A1D6C2ECDD3C2B28054B4E907A0F78FE99738A9C532E6198A6A55DECFCC9E6FF889F94BF9A37C66327ADEE3323DE51803DA237888DD8EEEB1272C9F6158ADF866CB04B15287E2AE1378E8B6BA286C4159690EC98D009CF3AE67E39F13CAC2E0E623E601BA82010781672FD68FCE24F0682A5070E5CEF3B90F6193D34CDAAD47C05B97DD6A760701FE6AA529DC471A3F8DB975C1C4E9372A2FF0A9591211E2409D220738F9C5F1476FA7178B9E12B25D4A72F7E5FACED9C5E36728CBDC2588D054BEB6FBBB068CD178DA3F97A51038D4412233FCD267ECE42473AE19860A9D341BD4B9A72E943C2B4CEB65C3633E5CDF9854E08615043D079794610DB6DF7EECB7758DE17B35B518BB785E278EAD4CB4E3AFB4CA029212139AC82278801AF4ED5633B344D96E949721CBB11E57E2E0EA75852626662262E6B2776E2953472E006E4E32A9D7256098D26CEF5AB36EE957B87620DA5DB3C410AF11A295B7E283E2881FDE008CA4D57B19B254146840BB8CF5CBD34AB648FC9332525425EE924FD2A152D43973B753175AEED0D82DB8E871D924A8281267302626239F41AE7510306A9531B74E795B9716A126CFC2BBCBC39502774803FDA6F4A50573D5F36A3C453CFAD6496C92274FD7B0CCFC226A670CAF96C19890720E0F6AF5E91B1C329C1602AE685ABC4D78BB13DE1CDBF1169257F98C935B4D2E413435FB43C929DD491CBEF0B5250B430712B2B7828C2145303EB94E7FECF6A208B6B6CF6C98D97C2D965281C4E880207500FEBF648ACBFD2DC5FDD29DF5D6114CA4998A9AA776FA41CB870E3F710AE17B533B396B88DDF0B4C5C8570717BA4C2883ACC796B3152F879BBA801A96EDEF586B3128528907EAB299A94A3FBCE25F0DBFB57D837364E05BABFCA2665427403F4A5FE71CC6990FD5FF00A68D4A524314823944ADADE5CADB0ABB1C2F999049100481127204474F5ACFCF3CF9FF007A7B178025200601B26B4493572404F1106796647CF39CFBF9C1AC89E331F6FB98C14036A1F2F7CA152F24924C4798FDFF005FF0E25CE4B5090323637E7194A400C403D3CA0F151D7E63F7A53E70FF0091EE3F31961A0EC20F151D7E63F7A3E70FF91EE3F3030D0761078A8EBF31FBD1F3926E49EA3F3030D07611429C041CC47CCFDFD9E75AAA62425DC87B1A558D58BF4841490EC6AC5F9FB7868E3A0CC68222749E7CFE1F731F889A14336ADEF6BE64B74EF0572BE5EC4365391C51FE32F5981CAA1672C31006B5A3716AD1F9B51AA21D224A99D4286E2F6B647DF286AE3C24E6679C0E5DBFCC1A8A98B735CAF7A353FBCAB0BCBC33D774F014739F3EEF9D042887DB0D80BE119F389CB2CE7E597EB4DD5212B75352EF7EB5BF1BF3192E641DE2C0B51D837273AE75FDC20E5CB1DA4E5060E5E597D99E54894A6596ED41E4DCE164619776A0AEF55FBB53DE70CDEBCB4420F1293C6359E1E7E6723DFF006A497884A33D5EB422C3D7A7AAF2E4CEDE66514D2A5C9A37936472AB6B6ADF630D209085091D3AF7CFBFCE9AAB1E0160CCF7AF2E3A694A3F19346154523E9BEB9B574BB7DDA2D6B8C67C452A55AE5DC7ACF61F66699CDC3CAC42CCD252E58BE619BB0FCEB69393B14CD4A66D068E0B93A00DC7A677788A7961F920C939907AAA32D675EDFB5446325FCA0C94801C55ACD666D6B5A6594487F8270C91705AA32FEA8E1C0AC050DD859397574F1651C2A36ECA54128BA201E22F24FE74B27DE911C31564F0862A6A3192C0DE62A02F4B8AF0A8B9D3AC41E3B152D0E4941520177FE497161A7106F78F928FE2DBB15B6DED89ED59BAADC4EE6AD2E76BB6DF0EBFC42DF197EC50E5F611815A5EA195B8A754C4B96EA5DA1599508E341E409AFA47F05C4E9D8594B52F744B0874070B99BC5BE815762CEFABF3A16D3DB484298AEEFF0053D05C39D1F27ED1F4C9FC2EFF008576E6BD89376782DD5861D698B6F62F2C5BB8C7B17BF69879D178E23C52869FE04BFF00D22E2DB857E588AF6E6C4DEFF111BEEFBBE807E7988E4BB6A789F8A5AC6B95ABEE83ED1D6FB662FEE9A530CBE2DEFEDD69FC482A29494F14A4240CE38040E511153310F17E3265A46609090091A1500028FA99A208528820A20828820A20828820A20828820A20828820A208288C1B1E4622C8517CE7209233E5D87C7EE056AA0E1A970EEFE5E5FDC4392BFF002D3A035367FB716BD5A1B5CA0859D60E606B3A0EBCB5D29EE1C2001FC5AAEF91033EFE9778B5C82F2D23302BD5CF7FEE1BDBDFA4DD2AC432F95A48E27787FA425322546234CCF5A6F3F109966AD9E57EAE1EDC84218C47CC96C0820E952E2DEF4E514DF620D589425495BAA5988687114E99ABA6BEB50988DB52643FD429FF001B80E72A07A57CD9A2125ECB9AB5021248268CEC2BCB437C8D0461ADE5EF9F03DDF2B8AE14BC556EA08770CB321EBC656530D7F48C14FBC413968272AA76DDF1548C3C8528CD48DE0AA0354B0A3D476761A45F3647867118A904A5135250DF510C95BDD8B55AC7DBE9F5AE0D8FEF976F6CF6D76C0BCC6CA60AB75DC0B07B8E24BA4BC8857E29872504A5CE152383311E83C75F123C72667CF9689C4825565790639D29DC45B65F870C94B6E80B2C58DE99915D7DE7B316172E26DDAB77D216DB01484A19023C31EEB6003CC2409EB90EF5E36DBD8CC4ED0C4CC53A8A4A8B3127339BDADC8BC492B64894031008CF98E356CB84463F77C57DC2E7134C9FC81DCA32F28F879F9A7B32419652542CC4D3AF535E43843799869B292087292E01E5A535CE9E51A4FED97ECB167BF1D8EB8C4301BA4DB6DEE1A855D6CE3ED2C2429D6541E752B5A4170921B4A404F3D6AFD864A1526803B51AE5FD2CD4D5B5899C24C0996D34EEB00EA55AA4B579D3AB523597D8B7DA8719B1B8B8F673DF42DBC33799B38EAAD6CEEF142A65ABC6C296E23F0EB7CF8AE2BF0E84010224E90669962B0B2D414126A75671A8F47BF1B43B5253499BCA56E7FB52685C67A8FC36B1BD7B41BDAB6D9FDA3C3B08C430EC542B14586D8B84B405B8881C4A5A8FE43C52939E5C849AAD62708122D517A7DBF1C758587CB6E62805DFF7CEA7331B1764D86D16CB788507DA43A8291301480B00FF00E50623AFCE2E62371553714DD2DC3CF843654D1310A084EE94962141B36714E1ED843E514A8952125291020E47A4C773A4524E4DDFAC0874B254C546A48B70D3F5CDE282A09899CE88521BBA871C2929809044CEA403FEFF00CD10459FB5FB228DA572C8FB810C281742F22A00A4FBA331263AD64D4B8EC32F79F18C25C0637D6FD7F4F16AEDC6CE62D88B186E0D8238CDB61F62521C0B5142D4094295C213910485418F3EB4E5134331240C9EDC73F6FA4202490EA212497B73B07CF5CEDC22F7C36CADF0EC36CD8B54B9F8A6529F156BFCAA3A9208CC89F803E55933D0003BCC4F4A060DC283AD235095BA814009664B03BC5EEED4D3DDAE125DBA5078C20A8004742911DE0F90D6B6F9C923F9163C47E632997BA18249BD48735E90B250E2755031A664FE9F7D7A644C49B1B71FC1F28CEE81FED6E8D0BA5C310449E79E9F5A5A54E00665F2714BB3706FD46DF2F827B7EA2AF13B7CFF00C52BF3C7FC4F7107CAE09EDFA83C4EDF3FF147CF1FF13DC41F2B827B7EA0F13B7CFF00C560CF190238D0C06550D13D2FE91515C266333C8EA343F7D41EF48AE79A249715619F1CF8BC3298965301CB534CF96AD488F75E0924198E5CA74D7E51E7CB5A653A7F501E86AFF7CEBA7185E4497FA8D746B821F877B886EA7651C5233981A4C1E7FA7975A899F39F9370AD0D33BFEF94A22582580D2B4E4C32CBCF4884BAC4D0D4950CA4C81D0643EF4D2A29588625DD8E4EDDDE9D00FDCA4AC1A942960010FE6FEBF9702206E31795A9495108E40C65027AFC32E7999D1EC99C9F95957BB8D3BDEFC1EF232B03BA03A4139DAE68CD4F588A7B1A09513C66675D63CBA4C72F2A61899A9A8D3A3D457B8ED0E65E042812D7E078FF005C8365160E2FB50F357CEA52B70A7DD1C20E60C673A7D2A071588704037666E1986249A9B0A521DCAC03390976BE560180ED7A8F588E671D174616A5372732E401EB398D2674FAD41CCC4A92E1F5A82DC3334AD8B748768C1512424BB8A351890D95799B3EB1E3F752E05347C74082E2992541A1C8ACF29F9812749A4A4ED598957CA724921D892D56A8A5F4CF2CA2C986972FE4849025A92974B800A8E6D77A74899B5B96C302E3882D8FEFB8041691060F88BD131D73CC559B09B3713B4C2404ACB8191B16E1EF566783DA98997265A9C804B8634373AB30F3F58D66DF56F5B69F69AEBFF66F73986AB1DDB3C4D4DDA5C62A965773678234F14F8AB2F307C4B7529852F84C66B4E7005764F027803153F1524FC951FA93FED26AF7B5BD968E3BB7F6AA10A98C4077FA8667D8143CB81DAAF63BF61FD85F67AB8BADACC630EB4DA2DEE6D1A1ABBC5F6BEF5A6EE6FECDDE12E169ABE290FA121B714C90A27DC0139E95F4D7E117810E0B092553A5B6EA5156FE2585B3CDB83306B4723DA9B495316A0EA00B80067CEA4657FD3746EDEC997DA4BF66861A751925C6212952A6145440CF31A7527A8AF470C327084C90929DC09A10D421C79373A1BC41151554925F587F6987F86E1BA7F87F14E7FCA5BC90A8109CF5303AFD2B68C449252103852207EF441155104144105104144105104144105104144105104144105101A823586FE1A788A89023B89F4039F9F3CE26886A24BAF7DABC5C79FDBF709388490547967E5CA474F9D2AE5292C0B80E73AB07D7D1A1EAB109901945A81C74ADAF6B4312EB09539E18487140F12801940804911A012263A8D045336E6D0F912D41D5BC012F663A70F31F7470F8A4CF98108FAAB6ED6E27D5852F1A87BFBF687D96DD558DC5A1BE6AE31A752A0D329710A712B33038642A012274F21AD714DBBE2A4E1CAC0987783B906CD7B33776AD23B4782BC173F6DAE4CD5CB2892E08431DE50E34ED9F131CB8C537B98C6D5638ADA27DD7957F78F151B774A8B484A15C2DC209E2128E139F5F879E3C63F10D7284F4FCF25E8DBDAB59EADABD69DFD2DB23E1EA30F2512C48012025BE8E21EE199DCF5BC5E789EF677876564CAAD2E5869B4A470B4DADD060680A4440813DF58AF2B7893C5B371F88581394CA51600D2B980FC5F56CE2CD27E1FE1A63138696A531BA4123967C7F30D6C3DA0F78B83B8CDF5F8F12D9C2014FF54C0490939129039AA7D7CD0D95819B8B48592A20D781E39FA7770F11B4FC07874214061900814012033E46C6BC34E11B87BB5DE7D9EDB58B5737A017E0150000209D75248E9DE222A57158718445824839DDF80D0802E2C738E59B6FC32BC30509481BA92E428304F26F5EB19B6D5D6195171284A9E792461C56250D650E8569C2160C403999ED4DB0BB5BE58352F61A5D8FE78D6958A062E5AA5CC4C956EEE827E62452D66A70E995A39E9ED2DEC6786EF431B5EF67636E0605BD2D9B52AFDCB8B250B66EFCA3DF4B7C6DA4BCE1F09B2889993C22662A465E2C4E0E2F9BBDCB585EBD7A460630A1411BA4A55449193382E7CB2D1B28BB372B7B8D6FA766F08C3B6C30C361B5FB2AB5DB5EA9D694D38A2C381A69C95CACF88DB3C5240041D291C420292A25CA8E99F40D419E798A88DFFCA4A52A2A2129E3463E8C7CBCE375DB43D6D8759B0E125DB5E16C99954248488D0E806A3E555AC5A4A4D18D7B9FE9EC7864C013D2EB3425405072F6DDCC4DB8506548238541111CC8038BE73F4A6B785641242492E6AFE6DE4D0D5CE5EBFA510E6112BE12467E9FEE8820F17BABE3FE683404E9041E0B4E1E356AACC8273F89EDFEF2A6CA5D6B53C3280AC8A04BB66DF7FD73AC38430D11904E7D333EB98FDAB099A967292E75CBBEBD21352C87A5B2B9F510938436A281200E9A67EBF1D73A4D53D8900103A8AF7F7CA14402B485503E45FF0071478BDD5F1FF358FF0020F1F3FF00F68DF70EA3CFF114071434FF003F28A7D2A712090790059BCCDFF0636DC1C7A7EDE3DF157D7E67F7A5BE69E3FF00D47F106E0D4F97E2144A8900C9F89AD0CE2FFC88E153DEF5F6D09A831223D93D4FC4D63E71FF0099F7D23115AD7C29224C88033F2E7DC7D2939B30DDDCD4D2BE432AE7C2B0C268DD981C8CEBD0444DC3D3232D79F4CBBE71D728F5A8E9F3CB5ECFAD4D9AAFDFA448E1D02990BB0E23CBF77888BABE0DA549900A41E7D758FA1FD8D45CE9E374B1249B575EE05ABC3289D9186DF214C58E57F7C8F908B1B11C4614A3C4009D391EE467A7F9F3889F3D89255C6940E791F79E462C984C216140DEEC7AF01C323665EE28E1716105412065073E7F2EB90EF49A71C65B0259DEFF006ADF477AC4BCBC206629760323EADDEA784405C62AF1260939F39FAF2E5F62939B8B13050826AE4F32F47A9BF43A98712F0AD641AD2DCB830F53EAD416543F1AF9E22B994920E9968ACCFF00AA8C98B7CEBC3EF5F57FC48A3083737774D83B8E7C2B57EB11CFE396A494B162E2D5D4340CE9A46BDBE798A68B93F309DDCF8350B0AB707D2164E082412EEE1BF0282A5871ADA18AB6A1385B4F5DA9567676F6A92BC47F19EE36DB7F9878F9C02A483E1CF3F3AB17873C2188DA78B96B420A92A21C106B66C98B65D6D68ABED6DA88C1A8CB538525D88B82D96601EF7A59F1AD86D2ED36FF00F1C5EC86E4038C5885F818EE3376169C11B4190A558DCB1202800E0055978804F3AF6AFC39F83537188905521CFD25F7356FFC7F0E5C8B98E5BB7FC48196EB7002B30E05988D5F2BB9063A21ECEFECBBB2BB93B3B8BBB5BC563DB6989250E5F6338B2D171705E00952597C2439C08952120E890065CBD75E15F84F2B650953178748524057F0FA49A1BD78FE35E3DB4F6BAF12A539210B25812EA0C6AE1DAB4ADBBC6D43185DC22D941453F8F70FF59CCE0A672E13993EE9220CC6990AF47F87A461F66E1D329490964D52D57028CCD9D49BBF68ACCC2A98492470CF9D7B0A51B2B35C7616EDDB5BA5B6C242049F774E227DE3EA7CBCAA466CE33E62E612E49D5D8643B40CD4666CA1E52704144105104144105104144105104144105104144105104144105104365082260013AF327A4E9D7BD6C775282A3C7A37BB5CF2B64A9094B921CBE76BB53F37D612582E2480600D3BE475FF005D73CAB28589A93BA6B9FBD3A5B37AC46E210BC492104824B66396BC6E7A4620DE56D55BEC16CC6D1ED0E23728658B7B7E161457C30E3885211993AF194819F481CEB8D7C45DA276561F13356580048F79FBB6564F0AF86E762B684A96141467281005427759DEECF46D7331C0FDBDFE6BB61B4571B5FB557173756B7F7370AC2D84A94B2D25B5A9214EA579252612531CB9578D36DF8D24637113A52544289500C4644834D19CF7BD63E807C2FF000A0C2C99026049A26A43DB9FBAD2916E365D0865C60B28790A21453207003088CCE7C3A939033D6BCD5E35DA3889D8D9B2D2B5339CF50F4CBEF933347A464EC69094A54100D01A0A71D1B3BDEB6CA6977F72EA5B2E5D3CA527229E33C1972CE72EFA6623957309784C41C4FCC9AB5105540496E2D417ADAACF5858E124C807FD2481FF002090E72BDBA0E377876FE266F2DD36AFC847090824C09F5EA73E73E55D4F61ED5C3E124A11312E406A3353AF6D38C5776861244D0B4A659753B9201EA7B5B367B88B9375BB7F77B31B516D8638EA4DB3CEA42425478632C8E91AE703CF3AC6D8C7A31AE24DCD0352967A1CFF0021A39BED8F089C5A26EE86742D42F5604D4FBF38EAD6CD6256F8B612D38F2212B6905975B03C46E5238B80F2E23AE432F855657839F25615BC4A545DAB48F29788B64AF0F8F9B292485A56A0A3504B1239D8370CE1CA2D14029B0E14A493FD50AFEBBA0FF6BC7FB872CB9181DA4B0F315258A9CE9A1AD73AB68E00F5833805FF00C88B905CD38D39661F942186E0F8260388DF63187D9376D8BE221B176586D286145B4F0A5498E124A84C93FDC4EBA177331E9615655883F6B97CCF1E9097FDB6729D2B585CA268332D5A86A5453BD22E86FC37ED1C2E03E33924F9C9397393CF9795454E5A66390E730C055DBAF5AD2038652549485303425ECDE5F8EB0D2DF883294AC10A05591CB9C0FA5317093BA1F2F3D3D817EAF50A12992A356229C33F2851492A888CA75F4AD9EAD5B3DBDB7585C2D2598DEDE9EB1157AE8B595AC920E813AC69D81CE39F6ED5B8965445C33E5771A671B0FA8B023BC376AE43A92A85B60735989F2CF3A57E41FF0090EC6141294A2C18F27FC4542EB3949246706411DCF3D72F2F5351B3F0E42CB114A3D72B7285912D2C413517D28FC0BF67B52D0ED17262012083A8FF007FBFD2992C949FA95FC72BBEB7E9E6F48D7E52544B3685E80B727B7317E31529B71490EC9E15732639C72D73F865DAB51302C920D7969A6B1A24A524CB7FA93957CB87BBC22E079082B0DB8E0027DC93D7F6F8674E65C852C12C726B7BFDD396E152DC852C06C9C0F7EF486A9B97145005BDC02B244149F7639ABA4EA3B53D97845EE0217D01B57F27F30A6F4B01DD2D5B90E5B9C3E7D06DD29538EA53C5CB8B31E734AFF84B607E65F2DEAF60FF00DB884D1350B24043366580E858BC2A56866DD0F29C4292AD384C91A6BF326B6FF0D4120EFA4DA999E37AF956ED0893F3262920335C9603A5AD6FC4541C6CB45E0B1C004EB9C67397C3E347F88B037B7837AEA066F76A4608216106E73CBBFBC8670D7F148B84788D9201919E625391883DB979646A3A782951483F57FB790BE9F6CC69094C904AC28D4532714A023AF9F5311CF0528CE507F4E5F7DBBD35549529998EA2FD6DC214978A97295F5659528ED5ED668B471552D0B7110490066273CB965E79F39075A8DC4615402B8580C9F2361D3F713985DAB2414A4025DADC756BFDC5DE8F60E245D528E444C9CE7E072E5AE7D3BC557B1095209DEA905B85E9663F8E0C22DB83C7CB580024DAE037126B5886280532A492ACF9778D39C7D00E5511377F78BD1AB47160EDC395AB13D2E727E5EF121FB3E43DD07578897DB46797CA39FF009E9AC79080C46DB1859C6493551604D47014AF58712714852824062726CBAEB51C4D189AC5B58ADD7816EFF085FF004009047BAA2AD3863948D39FAD58306BFF0026426730DDA9F36AE44D844E26592905354B5FDF9E9A4686EFE7DAAD5B9D71D63FF8D75888504DBE18CCB97F72A5100218641054ACC683CB3AE8BE0FF05E23C558B9385C390153160382C5C9039350B3B5A22B1FB6246CF4933121F74D28E5875FBD8F28BA7D987747BE4F6D8BF5ED96D7AF1ED80D85696CBBFCB1B2FE19758AB00E69BE65614DBED909F7338E05F306BDF3F0E3FE9D71B82C3E1E7E25285164A8920F3A022FAC79CBC5FE2F96BC6CCDD2456C0DC654A135D4BE71DDFDD46E8B77FBABD9DB7C236570DB2C20B084B770EDBB4D30F5DB89305CB852238D4544924E664F2AF6A7833C2383D858542264997F312901CA5390B03AD0371F3E5B8EDACBC4AAFF0042AB515001A5327E757B5632F33832DE74B8B5B6CB2D41B55DB1871523DF2E9D0C91A7C66AFB35723700932C390CB7008045B77C9F3ED58198B54C2EED983E808F76B44D38C5C298E149487B21C44E4403064E6648D6ABB8AC3E296A2652F72AF4240E541D188FCC6C929DD0142B9B01EB43F8878D24A1B4A5512358D279C4F539D4860E5CD44B1F34BAB5CCFB6F7531AA8824910A53C8C41441051041441051041441051041441051041441051041441051043777FBBD3F4A471333E5C93DEDD35B5B27BC20B964AB3ABB31A665AD7F7942493A8FFB65F234D3098848739004FAFE5F2D05EB99402660268F70C2946E9EAF4CE39FBED86FDFED726C375387BCB61FDA0B865DE3428A54A6EC5E6EE5D120660A010759935E74F8DBB4C7F8589054582486735E5D3CAA6F1D5FC133E5C89C99BBA3E63D145A84598B86278F9135D0ADFF006CCDF6CA33688C3ED54BC3F0FB661B5AD282471969B4B8A94C0CD609E526329CABE7AE236A23FEE93025542A56772E736D7879C7B1FC11E235270F23E61DD550148A067D29DC51DDE359AD31242EDD2A194F16B99993224E5967D3A41D4D3F6E2C4EC6296E0839641C3E76A35BFBF4F6C1C54AC761659DE0E52F767CB98EB9E90A9C5B8753F319F3E833E59546CB90952B402F6FC5A2C5FF006E4CD1FC778351DCDDB43F704520FE65F8B2D34DAB83C3E2E220C1CC488CF3D7FD53B4CA4A40001BD855EB4E3CFADE18E2763225A553141212C487A373BF067B1E622DEC39DC4EE36F70C66C1B71C487D216B40240D33919CEB9F78D32A732E554580A13AD3A5FAF58E7DB57132B0626B94064AEECF50410EF9F9DC651DB5DD95BBADECA61887C12EF809E30666613F219FF00AA7330BA500D4805EDC32E0DEB1E2CF19CF44CDB98B54A6092B70D620E7A3E5AD5AF1929B679F08E51F31D33F9D20A4B80D4BB69C62A0A98CEE49D74FC7E22972D87171AB28898CA3E3113FBD24A940BD95EAF6E367F6D194CEA6E834269EC1D79E4FC3CF1DB68788540348CD664447727E79FCEB41280C94C387EA1252014A812378BD694B6B4CB4F410A8BBB6BE1F88B45256C2B24A92414929C95047FE535B9C1EF10A09D34D33A1E77A9A9BC47A42925295AB7940A9CF3B4149AA46EB500E63F43DF287096DE0CEDC6F68C31BD5DE2DD6C5A2D0B1B378A63085A8A54BB3B42FA07BC9008339C4E67AD247E972F67A8AF63D7A670EA4286F900B917032A1BF7F6C627367B1356D7E15698A7E0313C33893C4AB475A2CAF3CA382627EE69B4CC490A0056D41571A3D05FABF287895251552F77424DEF7D5BA45CCE2508570A1B75A4803DC7870AE6332477EB4D274F0E58A8035367045E819BEF1AA5616905D2A2E7EA4D8D7DDFEF0E5BCA472CBF5A899D33E616666CF539C6628657893D70EB508166CE683EF051912648CB590279EBA56F86016424DC640DEF5A8D5A9F68D0EE20EF3328D1F32FA7BA6B568C07BD0DF0DEEC93AAB1C3EC2FAE569047130D1704FA1EA4CD5930F24EE86E3F8B53F19B98C942557482DAC5B9BA1DEC63DB518DDC318A61F8930DCA4A03AD29281209D09EFCA9862538B44C2995BFBAF42976156C99ECDC4DA1D8C2EFCA7615663A5855F95B2A38D365D65FBCB9F7D32DFBBC2179F207E3FB522DB43559EAAF3AE8F5A3660B884F7112D164B7035D7227CB2ED0FF00C1B77C26D9D5F0AD04F12504011CA06BA77C8D6A46D014066139DEB614A572CCB7A335A8804A7743E79D32A1B93DE97CA558B1B52D1638CE70224139EA3CF38FAEB9E5231E4FD456DAFD458E7A310465A90E619AF10B490FBA4F5719DFF1EB68E76D1162E2AD90494A0E5399F7B333F7A5650898EF33F95DD9DAE731A30CF8BC2E8C52264B0E589B870C18D4B1635E511EE72F5FBFBFDE9E2774074A6A28DF8CB9901F856135A50B2295D29D295E3083D60D3ADA9E54C919E9CBA48F872E71A532C5A0EE9A00F73E8DC287AE8D0F30B212952737D398B33726A7A8367E2187B526129F2CB967E5DC728806AA98D949FAB334AE479EB5ABF38B8604A52C1A8C38D455EBA3FEA2CBBCB54A5C5A529C8691A67A74D34CF3E9AD414F94A09533391424F034E15E00671654282A4834B57817CFA4415C5B44E51AF2F872D23E1D39572BDB00FF009C5245942A347AD5B964D951A35C2A93F3455CB8AB5BAD3BD62DFBB5B12BB77ED0108523FA8B6F27648260F381C8E42BA3EC89811B2901490E00AB0FF90BEAE34F58B6C80A520AD330B043143D03A481422D60733A473FBDAA775DB118DEF977418E5F60AA4A1DC45D379C56EDFE19D297184B61634502749D7313D3D3DF01673F8830AC187CC40614D1DC176B9F28E75E25DF1266098BDE9890BA82E03BDDF46F4A47D0FEEEB0AC3767B66F67B0AD9CC22CF0CB57B0CB30E8B660328E14DB3441844093339819F9D7D8AF0B2B7B66480C0112D16E43D3DF0F2A6DF2A38D98A52B79D4ACDC062437BBDC878C849C3B0B5BCB471053CDC2968041CE388C8F31F1CEACA43EBCB23CF588389CB55214CA4B69284094849C88831A72ACB0160D0438A20828820A20828820A20828820A20828820A20828820A20828820A20828820A2086EEFF0077A7E94D31DFFF00CE585AA4E7937BB46410A4E8439639FEE8CD0D3C4E151C8CA4F3C81F5FF15052A6142580513F5540EBC3C8BD21171BEE6CF9F2F7EB1CF0DE75F398E7B4961966C1877000F02173C31776A348CF4274D33E599F2A7C75C699782C48CB74B00399A9E1E5C4C5E3C3D3D52D52C8240075E3A75B679DE24B6F360ED76A2CDFC2AE116EE256DACB8A700519E12A1C24EB072F87A7CE39FB489DAA402C42D65CDB3F75B1E11DDF61EDD560C4B5952D40148FA4E64B59F5ABF2CE91CD4DBCDC56D2E09757D7B8532877094AD45843416A772278F2480089074D75D4452D3B1226282D4C6EEAA64295A67D5ED1E92F09F8DD1264CB96A9A02801F49559FAB80C476E91AF8F5AE2EDDD2AD5EC2AFDB5A55C256A6149464489072CBD339ED584CE483BC9E058795C9E7EDA3BB6C5F19E1674A1F3160D01AD43D5B3CF85F4192F6D84ED0BD76BB6B2C23115AD6501372185FE1CF10E4B1AC139F965953C97884A98960D7CB2F75AD6B9C6BB77C5B874E1D7B8B48FA496040A8CEEDC5B91D2374BD9FB73AFA1D4E25B43689376B5256D29683293075E2CC6A34FA654F113921F788B6445EACD5F5EF1E62F1978C49337E54CAD6E68CF5CF896FC88E8561086B09B166CD49953408940F7784FE5D633032397A9A693B1A90A670CF4663D4971F71A479EB6A62958DC52E7BB1597BE97A07A3FDE26D18A5BA6650AED034EBCB2F49AC231214097A86A1258BF3CB8FA188DDC59A3B8EBF8E10B3D78D299012485DCA541A3FDC9294E8BE62797A7ABB42D24124D4E941D7A3716A1B46802CAC245377B17A86A7ECD9A916CDEB372E6CCE296616945FBB6F70B616A24240690E2CC9D46432F2EA327294A72A9A367FD1B65DA30B44C0B0A25935DE7CEFC2CCFEC4637DC3ED1398B6C9B5875F2D6AC46C6EAF9370FA892D287E25DE0E151CF2488CEA570F286E0373A914AE5DB816E75289511308DD25DB2A8A1CF2B7171190F15DBAD92C11CF0B15C770EB120C13717286C083067888A6B899692E02439CDB917E3D7808708FE40B3F0E9CFEF0C13BC0D80C6DD6EC6CB68302C75E91C16B6F72D5CAC139C040CC2B39E711509884EEB860746AE5C6AEE3C99E1C4B4266391BF2DEE41670072A80D9DBBC4B3D8707407ECDDBBB22DA789BB76C86D939716481D7288D66634A819C95256480A15E34CC0B55AB778709292A017B8B4B67535D6835CEDA8362DC5CDD5BA6E2E140BE4A92A6C93E20083C2091DC099A69353354951357676BFE6D7785B79091F2D09DD4A6B664D5EDCC9FB3522A6EE21C2DA9A71074952606463F7C874A60A42F78D77781241B7DC8EBC60157D058EB6B7786D89DD3785A9973C4BA5AEE891E1B4A05ACA06635CFEF2A7D8374919BDCDF86553CFCA130779F7923E934A026AFD69C6DE9AA3ED21BDFC4F7718687F03DD5E25B5F893E825955AE0CABE4F1651C45242B98D34D672156FC2A920241602973AFDFF00340D19001208592C482E5C69F9AD7368E79621ED19ED878A20DDEC6EE5DBC0DE7CA821177805F5BBA8014784A92D92448CF29EDD2AE183C260A74A0A5896F9EF370CEBD34D22630FBA258DE3967E6F522E29C69711682F6EFF00891635748786CDB564D13252C5AE28DC2409C872CB97E94EBFC1D9E5D928366603ABF3E873BC258854A0E00481A1142EC3A9A1F748F1BDB9FE237638D3CD8D9D6DD6121BE071EB5C514E12539F11919493CB410234ADCE03670500D2F3776A534B3DBEE2B10D3C7D5F4D53C1FCF97F778BD6C36C7F88F39709B8FE478606A4152556D8A710C84889E5AE5131F04CE07679144A1C02723971A6A2A223662544BB727F5C8768EACEE131CDE3627BB6C05DDE961AE31B6AA1703154B0D3A8B710E90C94F8DFD4CDBCCCCE7A64455136AC8969C4912F76A5D85880F6B53FACA236619A85B07A16A3354D838BF2AD6335A995940594940E8A107C88CE0E597F9A6C25B07B3666FE9DADC2E61D4A9B368EE793BF07AFE1B9BC205D053E085A4AA0FBB3A6A6239CE910640E951F8C40DDCEDDAB9532EB9E8625F0F88989FAAA00C8DE872EE7A72882BFB27735171A42359528803EB1D7E3D22AA98B96778F603DDC8AFE6B12B276B0412198B86701F8B7F62869AC5917C508756994B9C310B6C820F69C87A89D2A2572F7D2A49B31AF2E4FD43EB174C0E24CE91BE48622A03925E9EB977362602E16933EE91A6BFB7F9CA7CAB93EDD93BBB4142C4285EEDD43D3A73AC2F869844C046ADC5AAC74FEA2031369BB96D0B295A45B927FA6002B9CC4CEBA4C8D055E36691FF6B4822A1AE38DB5CFDB45AF0CA280B62499A1C0A9DD2054707E6F68D62F6862D5FE19B378A5D34D24E1D8B5826D1C4262E1017885BA1C927498E434D729AF487C059BBBE21C2906826247BA35685B57CE285E28584A26805C90AE21C8F304BD357B523B89B076E977663671F42DC8FE51619AC82A8366CF3191EB98F9E55F657C1EADFD932142C65A07601F33AC79636F157F9B3028241049648A317AF5D22F46F0F6DA7D572CE6EAC0E32B882448AB5D5CD9B2D78BC41D5F867FAE3D624D09E148100750349E7598CC5544105104144105104265C4804C1CBCBF7A208A92A0A008FB34411556017D473BC105660828820A20828820A20828820A20828821B9CD6A9CC6500FAFEA3E95B2D01728A48B83D59E8F08AD7621C31FD3FEB8B4337340498FD74FF3F66ABE642C6FB07A1619B077B81DB410BE1E5A66104BAB3A75BDEB4CF5B4738769DD461DED4D7AEDD9E14624122DF8B20AF0ACE17C33E7CB96A6BC73F1FD1B983C5354EE2AA78D7AD79522F1B170EFB840A5AAFAFF006D4E45E325DF5CAD372EA8FF00D8883A94A89000D728C88D39659D7CC7C74E5276BCC00D02D4FA5CF76FD17CBAA6CE947712086A0F263C01E34CA978B6EFB0F6D68530E34CB96C4150428711CE54796799E7A0D69D4DC7A81DC2A2DA13437E5E5C1C459B0D8C9921695A54A4B3074D0D29F8A7ABC630C5360B66AF5D5ABF9532A70AA494B29CD47EC69AE62954ED0144B816D18FBAB3D5F9BC5D367F89F1D2032671090D42A3F917E7E861E615B2983E1A84348C1D91E19399613399EBF4CA220E5269ECADA29B10096AF1EDE5C1EC6338FDBD8FC5952CE32690A006E8592035D867F9B0353191F0B7F0FB3424218433000C921307A65E596A2333CC56CADA2EB3F532438A13C46BCCBF168A1ED44E2B144FD6A5139972FDB950EB43130ABE4B878D2A949D0C920C7791E5E9D6A2313B4089CDBC40A31A01D736D0657E310E9C1AE582142BFF0090FBF3A57411E7E2BBFCFA4FFE54BC8C7B8037C971AD2FE7A0E1CA364E15C394D4E8187663A738F1AC4494DD28A813645AE1139FF508E28813CBA7AF598C3E31D2FBD40CFC3CF2A071EB18548DD5210515980B280D3A6A6D719E70FF0013C45855962188A9C436D5AE1B76209E1054E5AB894CCC892AD273FA54CCBC5216410A601B3FB72F6F084DC229081288256B25414452EE413536A7E99F9A9BAADD46F776DDEC6319B7DAFC4300D97BFBEBCFC33585DF3F6D78DA1372F2547840E01C473491320D4EE1B10552DDCD05CE63CABEB11B88409738241B268466C1AFE7FB8D82C07D923661929C4368F6CB6E7682E78F89C6B18BF4DD5B13C52470A84F01E8796998CC5CF0B046E9AF6FCC6A824281A1E7EECCFE90DB6EBD9D6DB04B91B5FBB0BB7EDB14C3CB6EDD5936B0965696C26006DA01454A4A4954F5EB4C572828300F7A69E96BDDE838C3B94A00B29802FBBC75CAB57B7EA3316C0EF5AC31DC22D70FDA6BB6706C7ECC06556D72E25872E5685704210B3C4B242499FF00CBBE6CD783DF0429E868C2879963C837385A5CB085A949AA660FA83580058A5ED72FC6B6B65DB8BA61EB6FC438461F2907C673FA485240C9415CF88099E73CB96666CE64394B1ED91EBCF4AE51A00259500A33534A3EF10E73E3D22D6676A2D97722C6DF86F94494F8EDC3A91DCA81073CA0EB977A80C5E1771C94BB3D4873CB85BEF710E08702A43642DEFA45E2186EE59699B8653C4C7BC97169120A8F16455D34D3BD452677CB5005E97229FDE79757786DBDBAB528289DE23E97766A503DF9430C45AB5B80953A8B7B82CE6943802A39E999E5DB3D3AD4A49DA3BAC1EB70097176B3F47CEBC6164EE8496078D03D73D0B0ABE4211670966F909BD0D2592E65C0D27850383DDCA3213FAEB066B49DB7F13294532D4B6B80096F2F2F586FFE62649F9656481404B392F6AD1AFC9AC21E7E1DCB51EE072120444FC2639469DB3CB44BFF0052634577D63AAB97DE364E2933AE4115BDB4E3CCD0E9A3B806D968E271A74BE7252B8667391993CBBF291DEB7FFD478C5172B9A49A9A9E5EFBC2A12B2B2C65EE64FAB572BDADF984D572D5B49517929EF97DE9D67B01347FEA1C633954D1CC9D5BDE5C6154E1173582370ABBB926AF9BE94072AD22D1C6378585618E38CFE29849464438B01C075CC4C8F3D4CD4D60E79C523E62CEF28805CBB8E64FAF03689FC0783F138C489C6429454CEC974364CDABE678674B5BFF00763669C70A2EB16B76C4E85F48F3CA7598F2E5CEA4E54B4AD3F5915E7951B8D5BEF944B2FC118C949DE95852A2057E93E54248A8E59B52166B6B366B10B8371618DDB38B7238509B84418906409F2D7BD34C6E191BA4A5493CEE08BDBF711B33C338B961A661A605077210775F51A30ED487779883CFB7325F6CE60A254387288EC00E474CE7AD371A8DD51AEA2869A55E9534CAA5EF1098CD8F3A5AAC6EC41151A7DC1B8E516FAD0149242383FF00150F7A679888CFCE2A384A065920558DC3D2AEE6BF8CA2CBB35065604A4E8589C9AF7AF1B54D2B7888B86CE720F68F9F7E5A7948AE41E221FF00F60A615DE1956E1C76875865BCD038977A55F3D03D7CB586B7486936E841C94E8565CF2E994E93D7E02AD580504ECA4B962400E4B661AAFC34CDA2D38652F789BEE07A1B02C34CFBDAF58D58F680B05B981E156ED82A0317C39413131FFF0020C2A600EF3CC65F1F40FC079C3FF51E140723E627D79D85F93C50FC533184DD6B6072E55AF677CE91DBCDDC2148D8FD9D4AE4286156120EA3FF0088D083F7A57DA1F042F7B6361C1B89693E498F31EDE2FB426E5C0E51901BE7E9FAD5CA21A14A20828820A20828820A2086ABFCA7EF98A208A9B5A528009CE4F4FDE88214F151D7E63F7A208AC104023434411ED1041441051041441051041441051043424176648198C86B33AE7D4F2E9CEB72B0894544380FDAAF9D73F758D0C82A0082C9258BF0E9EFBB3779B511023EFAE63A547CB5267853101DED7CC00435BCA1DC8099742483C34E141C9F9DDA39BFED41835E607BE3DDA6D6B4EB6C61C1DC4538A3CA5148056DA1A652B50112A260126BC81FF509B3969C162D6038DD57A6597B7A068BF787A6A0A65A7526FCCB11D0F1F31190F12B9B775A17691EE2DA69606449F701927A1C88D2457CB9C760D5336C4C0DBBF5AAEF5B923F27CF5EB3B26515A5082012C4D4519B2AE9606B70D9C5A0AC45374B2E953C8493010080070E472D0091CA399EF50DB492A918829776A1BE8E34CB5B6978B0AB6792948CF403882E4DC71E368F5174EB47FA086951A07733E797AE82A3D33560BBBF7E99F2EDCDD05E12623F8A95517724654E068E3D6137311BC5288710C0573E10A803947783D065DE9D2316A0C5EF7735D5B2EA75ED04942D0485134E3CF2F7A9AD2103E2BDF9A00EA24651DB3F4FF30B7F9A3FE4D4362FDDCF4A3FA187E89D2401BC0122D6A7BB74891B674B6D21B3991327E7D4741F604B398264E9856282B9D6D6D5F5E995984F54A2B200FA4D8162EDF872C7D21E25D52A20FCCE5F3E54EB0F2660A9272A039D2E3803ADFA4372B969A048ADC365DFDE9155BB6A40BF796B4A9A5A99F1500CAF2309CBF42721CF3CE730C85B5DB9870C2CFAE9979D5099889614974D43B1614F3D784629DF6E3589E15B2D6B86E08D3EE3F8DDC30D071A0541B6C5C212E874A4C89415012623BCD4D4B0A29156398A86E9F9BEB099C54A24EF2052C5AD950B9CEFE958CE7B01B396FB31B3369875BA43695DB34E909007F51E425C72748256A56B9F51315352710508092EE00CD83E79F768AEE38A553B7921C39627B53F079D69177780855A29859515924833A664FCE69C22782C5CB96BE7CC72D1FA43505887EBEC7DB9437B4B336CD3ECA5280E5D0212A0202A27883A4EB0321D01D29F4B9C802D7B161C2EFEEF6CF72B0552D4C92106A186F558E5E75ED5235577DBB97631B617B4F845CBF8663F8105DEF0DAAFC2B4B82DFF0054A5600E257BA888E67999A5C4C964592E320C395AA29A3BC3B46252E096034F646BD838D2301EE877C9BC0DF862F7FB2B8AD85D61786600B4DA397A869D67F121AE26F890E1252AFF008B33949351D89DAF2252BE4A83D2854C683D7ED0FE561C4C47CC012806A4B004B9A51BA7946EBEC761385600828B6538F2930971DBE292BE29CCA5423E27B557315B4254E2C96009B5B56EEC6E358557825B10028D1DC697D3A68D9BBB5ED717816E908754A49009F0CFB9CB4CC75F2F4AAF4E214A56E9A1B75AFBBF0D2139781536F14B1D0B057BB71BE70DD6F2D078ADDB6564EBF884C83CA323CF3A4521492E083ABBD7CB9C657842A052EC750A63CEA29A5B5E061DB6FADC424BAE1B75FF007376CAE06939EA94F53CC9FF0034F913A40401365A49D583DF577CBAF48899FB216A5EF6FB816AB13AD73EF7CAD15A956FFDCFDD93CFDE1CF5E7CFEF9D6462304A1FFBA1FF00D21F857A5DFCE1B8C3AF0EC93522F99F3619F9DF449DBD62C9B539E2385B482417152729249CB972CB2E5DA4B0B2B0B394375294EB4039796A7CA27707865E2421294A4A945AD5B81CF51EB9BE9F6FB77D69C14AACB0CB974DC12A48F097212447E6820C67CB908CEA613B224CD62025AE73D2D567B768EC7E1AF8798DC7C895304B092A624B149BBD69516F2E31A5F7DB73B418B5CB97577885C7F5CCAB85D564341A9CA408333967CEA4A5600490C94848E54AEBE5FD8AFA07C3BE07183C32244E40DF005C71073BF967A88B2F16BAB9BB928C52F50A339F8D1107CB9E5D35A7024EE8259C0EA3A53DE516E1E0A9332A10914190CC64F5BBFB7885636AB1ED9CE1559629882DE6CC92B7945A235CA35CBEB03AD31C44BDFDEB56874193D1CD731ADCE510DB4FE1E7CC967712900E5EB460FE6EEF6BEC76E6BDA4715B9C598C131A7D0E71A90D85BAA247432547F49CF5EB5E9FB326CD5B83726EFA3035B37E291C9F6E7C369A9139611500ABE905FE90EC32A8B657B88DFD62F59C518372CB8D28702567C320A0F1267239E7F669AED7D98BD91B3D78C98A1BA12E4039364E19EB4EF58E358AC0CCC22BFC7285A194B1F58666398A366DC18EA623DE09530A7828702499139C831A1D73FA9E506B814EC4276CED4299043EF3026E58F0EB7616EB17295F2A682A0487BF7E0DDA2D8BB4BD78F5BB8CAC25A649E34A8905526047A83AE9E622AE188C1AF66ECE0998090006A386A3E6D5E80D1DA2DF859E9F944D015062F7E5D88B91768C67BD2C1BF98BFB3D874B7E2E25885AAEDF889294FE1AE995AF8F2241201881DF38AEEBFF004F928E2F6FE0D69240F9A1C500351C6AC337E51CF7C52779334BDC28E55615CBDE79C760F64C26DB01C2590326B0FB341F34DB360FCE4CF5EB5F68FC264E1B64C8704FFA48B0B505A8DA0D34A5BCD7B4D0A998A98A51FA8A8E766367ABFAC5D68706700998CF97EB5615ED1DCBA559D0073F6EF118A94CCC4679F2E1CE29FC5B61C2D190A1033D331220FDC73A25ED0130B00DA960D76BFEA115324B13DE9EEF15A9F4A53C460F9199F21F3D6A4E52D3303EF2453335B69EFB422B9BBB6AF1FEED9E45DA1A7F32689E11055CD23F30E922644F2A6B371699733E581BC750FEEB52D0D958E420EE962AD054F5B0EDF6857F1CCA44AD40189099851F2075CB3E54E64A8CDD136BD39E7942A9C4A5428CFA77E3EF431E26FDB5202E14892442C7BDF09EDCFF00DED35489555CC401997B35DFDF9D21ECA96B9A010186B966D0D5DBF69394923E9CF3D62753032F8D42E2F6E60B0C4838896FA6F0A7E7BF0E21DA706A2CF4A805ED5EDEB163E37BCFD8AD9E5BAC6278F61CC5F311E2D82AE5B4DD278B3482D28C891046B919D2ABDB53C73B3B6661158A993659003B05269A67CFCA1D4BD933A6A884A084E4A214C75620D5B3A44161BBE9D8DC52E536F6F72A1C4603AB52037F107F59F94D3B67FC65D918FC60C2A14872ADD774EADAF06FC52313364CE96E4D8396D00E95F7C5B2A5AE316370DDBAADDD43CD5C025B79B50534A2333EF75D0475AEAB86DAD2715864E225AD242802038CC75E76E05A23CE1D61DBFDB70D51CFDE9AC488B8495A91C2A1C312AFED33D0F3FBE944BDA895CC0862E6D415FD18D3E529897142C469ECD2D9650AA161C4852743313DAA550ADF4856BCFEF1AA925258DE2BADE35828820A20828820A2086123C4E1EE0FCCFD8F5ACCE1FF00F156AC8053F2F64FA43A425E50E6A3D89A428540850E9233E7F647D399AAF6CC9CF8B32ED555FA9E1A8E35D1A358D3FF006C4D89BADABDD4E309C212A38EDAAAD6F6C5C6C1F150DDADC26E2E380A4710E26DB2150340796BCDBE30F860ED6D8B895A51BE4CB2ED930A8B708B46C09AA1302033259DF4539FEFBC6B3EED36C5DDB5D82C3F145A8A6E380D9BCDA8C14AEC57F8658209247116C9CE67B57C89F887B2E6787B6B4F985051B8B5D5980ADCF3E9A976A76FD893D9090E1DA8721916CF83BEA06513CBBA0D2CA262232D27FC6A3E72753C6315B4FF00C99A5649356BD78B67A533F4BBCAFAD00D19AE6C47BA7AD6176EF4883C5A77E5A473D24F61CAB444D2A65025F424F2E1FDF9EAB97BB4BB54BDBB55BBBB370878973C44858D0E99F2FD29E4B9656C5C1D4E9FDFEDA192D3BC4901ABCADAB663FB7BC3E6F9FA73CF2F59E7AFCE9CA70FBC452D5200BBDB27D32F586CB96C5C9BE41C9F4A768593F986BDFF00CF6A7689252057A1EB70DDA13521245125CBB96AD3DD38087CD7F6FAFEB4FE4A294E14CEE7F64F610DD520B12417E0FE6E3216D6247F061865370A59E1BC30533A701811A46672CF974A9995294102A0939569D1BDF488D5813173129FE528FD593BE6D9BE79C4D3780E137D6ADA714690FF0081EFB256124833C530A079C69965E712B225050AB06A56B57CCE6D9BF9B888EC42E682844A40512FBC482586AF67A9D6D71130CDDA14D27C3F7509F71232FCA9012072C801FB73AC295B8B24F2D1E9E8F73FD420B94490141DAA684D4FA7AF2857F140F3E7CE72EFAFD3D2964CC0082F4C8034D6C4FAE67A468A934A22B4CAA7DFE8DE28BAB852916C5A265B52B8C89CB88C0075EB3AE7C8D3D44D06A08E5956C7B674849324EFA8A92C0E4CD6E6EF6B8A33C597BCCC758C0B6471DBF7D21C1E034D2F9FFCF2D899CB32AD3BF5A5FE6EEEF68D972D5FB3539C6C892920100DFA5FD9ABC61CDCDD8E0D856CDDBBF86E1CD337B89BB72E3CEA1A4A16B2A794A0544004C71644C6B3E74EDA7337B12480CFF6D3DDB47A58F092C19037CEE8171950E63A17E4632D3ED356CD169D584BAE0924182273E79F3CA7A79C45C3E94B2B53A58CB1404B105867F76B71315D9AD2865012E7880490BE2E23A9E7CFA72E9446CA439706BC7DFE624D2BE21A8FB3CB5F58F5A21BAD172C5F30D78F7C4299CE008D4F5F3CB2FBD6929A58022E3F223558019B378497759812353399CC7C40FACE79F3A6C92C41766F7E578869D27E6CE600D081ABBB0E6F7D2CCD420617DEFEDD1D98C02E4B6AE15B8DAC20E801823B733CBA4198CE7F674D4EF07BD1DB8364F6CC9EFC3A5F83B63267E224A948DEDD62011435A3DCFBAB54471EF6A77818A5EED0DC397CF2DE6DD795C3C4A24264E838A6047FBABC60A6A77413502835E75BB79B5338F69F823610F91246E00E91D18662B619674CAB139698A85DAB6A27358EBE5940048CBB4CE841069FAE68D69975D72FBD62F58BD9CB9135920D05486D1FD8D6DA9A1CC450264881CA673ED32232C865E7A4B45CF21C034550B5A8DC79EAF0909CB9640215A501A375F4FC442DF620C2D21B5000AC11CA67965D73924D3499358904BE6E3F2EDDB48C7CF5CCFA06F1D3CFDF73CB155F3B89E0D8EB18861EEADB8702814A8A465E519C1E7AF3EED953774850259E9A65C73CBCAB0CA6EC59D892B265A88502EE1F5B5EF9F28EA0FB3DEF06F719D9962DEF1F5BB7496F85C2A5126048124E790D0CF3ED3517E319FF0033C3F32593BC4A1541A3E94F6ED78F32F8F7C3E246D09BFE9EE904D8354BBB5FA9D2F58D8672FDE369E0824159EB1A9E59F9F502673AF37787E4997B5F79882262A9D7DDC8E2238FCDD9C5134FD2D66A3356F5D21F5836AE04A543DE57BDDF298F9199FAD74DDBDBD3F05BA1DC8038E55E3FAB343E4C8F9729E808157A0FEBD8BC634DAFBCF1F7A3BACC178A4DE5D5EC26419F08A17CB98CF96401F5EFDFF4E3B3CCADAF84514D3E62090464F5AB797A1A8E6FE279A1299AE4FF0015371A1717EF7FCF607086FC0C36C520C14DB30982607BAD2464272F8EBDEBECEF8551255B2E402104FCB450B3FF0011CB4FEAC3CCBB571E99589526BFC959B677D726B696313CDAF23319C4472E994F3A9C9B8390A2019690CF50900F2D0B7AE511A31C998FBA4022A75AE753AE55EB0CEE6CCB8A53ED28A5460C1ED965EBEBF1A6337032D03FD30D43EE9E63918CA4AE654B9734EBFBCCDF934276A9712541E54C64028F2CC69F0EFF00AD7F1188998759FA983EA476D457DE4BA2402FBC2FA5DC7EB514E358A14CDBB6FBCF209F117054A5C78420671CC77CF9F7353B85C6603FC713710B921412E4A88DF06AD77AD3FAB16EBD9614B2B4A4BB50354B9C83036AE7D59C595B51B6FB29B3D6EE3D8CE2D66CBCD4C34CBE80EE5FF8AB9E407EB54BF1178FB66EC996BDC9F2C14BD4292EE1F9578E6D9C49613642D44028209BBA73A3DBCEDE51AC5B43ED3570FDC5E615B01B3D8BDEDFA484B18B6296BE2604E28C66879B54A929D164686BCD9E2FF8ED2B0DBE9918A7237836FD2828CC781351168C2EC898AFA0B849008DD05E9AE8C6313E26D7B42EF0093B5FB59806CC60EE199D8EBDB9B3C4D0D13201E3F74382418D2418CABCD3E20F8F78F5CE9865E2E6B026D315BB7E05BD2968B061B6484A424A3798DC8ABDC3D9DDF99A42DB3BB9DD9AB4B858C471DDA3DA8B84C156258EDC22F2FAE179921D78895250470A33C911AD72FDB1FF005098AC4C95E0A662E66F12410566B51C74CADC749D93B31A57F1019E940DCBAE9190118260B875BBA9B6B271AF0D24216A692932260830232D620F3E951BE17F8AEB95B4E54E54F213BE2A554BB3DF4634CF9445E376728021208CCB8F5A1A643A4671DD163CCE2B84AF062E14DC614A511240510E2CA877D079F202BE85FC29F8928DBD230D86F9FBFBC121B7B80A55EDC8966B068A7E330E641528A497BD1DDADCFB53A1319B5DBB52ED0B4DF10B9040274300C1EF981F3F87ACB666CE44E948C4160E01AD19C6B6CF47E0D7AECD5942DD2D5720356D502CF7D2272C12B45AB6173C512675939E7FA768A94284CB2509B0B7BF7CE1B6FEF926BEEC07010F2B119828820A20828820A20861C12E13A1E674CA75EB39E5E75B4D27FC75268CC4D79B81C896A71870957FA613C4F2677EFF00685384F14E5DE3AF38F3EBE7EB5AC14A54AC5FCC66FA89D2845001DB2F2A425314C014914BD788BF9F3D0C59BB4B602E59BC66E528751736D716EC323DE243CCADA59E13A81C5273981D00AB26D1C148DA5B2E6C854BDE3B8ADF252E1CBB0E4F7B75B895D9F89DD5A595BA1D2E41B91A17AF2B7511CAFC2D86375FB7D8E6EFDF4A9168E5CAAE30B5A0016CE97D4ABAB84B44E4A502A85009FCD97535F26FFEA63C1ABC34FC6CE91288AA88094B50BE5C3981CB3EC1B0F1EF2A5A8029A0606ED9160FA96BB01D22FDBC68DDB8BBB62196571C2DBBEE39EEF320693A8D6441E95E024E166C8529131C292A21B2FE5C6B4BD348EB3B397F370E8A3EF5C9CB3BE74E34B81110C5D715C7E1C1293A059C9073F4CB4CF28A792533010E6CF42723CF89E7120A97424B74773CA95E462EC6141A425A52D2B52466A4990673CA796639D4D6186E9AB16CB5B96F3F2A888F54B5281205C921DDEFD7F30FD1708E60E71A67F4D73CBE93528898803439BB71F6DA57386E517240BB54549E14ADA1C25F4710C8C7A7FAF9F4F4DBE6A29F50739387F5F48DBE48527F890780D0F2CE1EB770811AE5DBAD3C9335096AD7C9BED7FD6A92A4960DC7A5EB4B509D4758A96F5DBE0A78D0184478024C833EF710E5273CA321E553322685331D5AD4BF13DAB5D3364BC3A0951090952BF9716B1A72B73AE9376AFDCFE1C21F7029432053311A419E80F3F9549CA98C28AA6A48ED66EB7AE70C57242545D00306A0727F35F28789B84B00340CC6A44C7BD04E874D35CF2A8F9F39A6286F501B8208B7F41AD0CA6E1C95380467D3806D5F8985C5C9390933D24FEB23E535AA278554AC86B0767BDC7F40469F208B247507F07D61CB2E10D5C051953BC3E11CC84C6B33A03EB4F25CF600DF4E1ABDFCBA36692A428A907E9003EF0CEA29C3C8C5A1B65B3EEED5ECAE2F81AD683717EE5A2995289F0D2961E0B7028E664A410235269E23140A4835245079675E3E5C630A9133E6CA28291283FCC16274A5AEFF007BC31C1F046367916366C2521BB26C2484819A9491C4469CC4CEBFA56B1CBDE9E55A9763C35F7E64C4C4840548521CB960F6039F9EBD225AE116F7772E3CFF0019414C2008907860C8D333D34F9533A126E3CFD4F9F942A842A5CA084B120E76A9AB7AD7AD629B3B12CB094215EEA492924E704CE7F1EDEB58850A80A1BE6D6F387801403C5CB90CE33A234242886A1ADFF4FA43776E005409D739D065A9E7C8F5CFCE91981CD5D8B5B87F5E70DA6A4EF312472D381E7D793C473B720716A75D20E639E5F12338D7B068A705B8B3FB7A9C9FD690A6170E14B0AFE4A7140F4FC5AFCA35ABDA06C9EC4765AE54D254B752D2CA12904A879C67CA7AC75A96C34D4A1282097CF362F9DDCE56E2C2D1D8FC0625A315BAA01814B3D32A803BEA79C7212E12E5BE2B72DE2E859525D5786003900A233E2D3CFE11955B30389010904D40E5CB91CF933691ED3F086270E8C3CB48DDDEDD00136AE65EAD66FDD66EDF1342521014AE119252341DA35D0C1ED9F39A915E212A1722B4C9FB9FBDBB474199814CE4FCC74AF785C5F2FBEBC3524BA5DFCA09D673C8E7AF5D3D3E3CA9A2E6E76BB1CB4BBD7A74AC4362364EF1748CCFE3B353AD4DA2DBC6F114B4D32E369754B24CF081C880200A69367B8209ADBE92FA5DFDE8E23383D8A4CC054906BD0374E56D7998B5B10C51779E1212E21B724407494F4D633D20F6CE9B99C4B24292C3F8BE45A963AE917BC26C992894EA4151DD3FC402598DCDAF993FBDEDF65D45DB2CAFF10B4389584F096C92233EA0E7A03976279D43EDB9DF3B04B94A2E7748615A1D070F4AC7923E2F61654AC76254801201A0CC6A1B91E0D1BBC9BB63C4432A42F8D24498CB91CFE73D74AE4B84C38918FDF0199449360DAD6ED5A37DA3CED89967F9298BB8059F9D4E608EE0C5CF66A0FDC80D25442000531AF126065CC08EF19F6ABC0969C604A12E4121F3BB120307F4BF3888C57D3208240556A6C1C66467A6BDA30A5DB2BC63DA7F74F84DBAD017833B8AB97E09C921DB74B8D822352065C519E5A44FAFFE026C6323178599BA2AA15E3439F3ADFCCC71DF15CEDD4CD17A299893ABB5A9AEBAD44764AC5D53EC5B0692B090DA119CFF0062129303331918EC62BE9C787538A4E1A4EE9DD0501ABF4D0545FDF91F2FEDB96B56354966FA8B1ED9BEBF6CE9131E21B74A54EA5652A895019274CC9390113FB55C7FCC44A40F9EADD201724D389EB7F4D21BC8C2CEA50D6E75F77E19EB0D6F7136ED185DD29E6D16A94951714A809004AA4E8204C98CAA0369F8BB65ECF96A5AE6A0EE8352A4B5B57F2BF78B260B08A528259D4726BDF5B0CDBF6DA81BCEF6B2DDFEC7DC3D63678BA31DC59BE248C2B067DBB8BF5AD23F2A590A0A2A9CA23E735C47C47F15F634854D1F3E51500AFF00724316A06CBDD2D16791B2B78A7E8AE6E2F67FBE5525AED18A99DF26F8F78D85A2F706C39AD98D9FBFE34B0C630D5C59ED1B484129529F4A4F08E28E264FFD08EB5E58F1A7C7FC461715324E1314532D2540042C806962C4D19A99F38B1613C3E850F98505D4CC08A060D4E3A33F286F83EEBD8BEBAFE67B578E6378A5D9505AEDDEB90FDA49CD4025C1307CB3115E72F14FC72DA38D331271733EA7702629EAF70F6D74E959895B11200013F50CC870391616D7F35C9EC5AE0B8484DBD85A069A68421A4B690D891AC72922550333F1AE3D8CF1EE2B684C56FCF242890C55EA0BE60B3F9089CC36C800074017CAFCAAEE39D3562F0E9788DB110AB5682644C204FCCC44763F2A7123112F1A9798A1BC41CC568F6F7DA2451B2806DDA13572EC73AE75D1E0172C3612E59B4842B4571244667B69ACCFC2B8D6DAD9D8A5F889A4AD46515644B014E9DDBA64B0C1A93BC998DF5301BB6A5C97F4F2CA29BB5BB7C10D9E042345F0E47399024F3E53AE5E553F324E2767CB4CC0A208DDB38146D19FF3A986B88D9E8520B3922FBCCEF6D2FF009B45AD866D07FF00816D93174DAD630EBC75B4DCA947DD4121284F88720389648483AC7781EB3FFA7AF1BCDC36D4C24B9D38A46FA036F367673A80C2BD328A16D9D9EA017F48200A86AD7FBAF08DE3B2B862F059E20CA7DC71A42DC1A95788D8292206866467E55F62BC27E24C3E3763C9226254F2D1621DE96ADFBD41BD0C72CC7CA5CA5949AB6F55249B96E1A75EC22EB654168E21224CC1D469AD5A02D333EA4D8D5A1ACA0426AF7CEF427DDCC2B598560A20828820A2082B06C791821B05242B965ACC41EDE79D42A3682A6633FC32490F548371715360F7E02F585424945297AF5CFA450B751060C1E922467FE321E952EB929952D5319886AE43573473AE7CDE184E594AB749607372DF80FF009EB6E5EDB3D77885BDDA4AB82C82D2100E4E0793C264660F083F426743A61B694B5A6648762BA298DC07760CF5F22F9C3BC1CDA906C0E5AF63C99FD446897B5AEEC2E7F96DB6F0F0041FC7ECC3BE290D025DB945CBA90E8570895042279E4267515E6BF8D3E0346DEC2E2A7225050285127774196AD47C9E8D78E8FB0F68D65214C145986603DC8A548B1A1D230CE01B5B6FB5383DA5EB2A0DBEB425B76DE785495B4036B0539C4A924C11A57C9CF1F7857FECFB6A761F7373756A04377CAED6CFBBC7A2FC3A913300958AD03837A8E0EC4B6B571138DD9A5E1C208438661472332799CFBF6F49AA22B06A975673477C8E6DF819923368975A0272040AD9DA81DD837F50FD9F12CC780EAF8968CF8A7AC75EDDA0E99CD3698B12AE403CFDBD5A90D16029F75B81ECFE90F9AB9194E7AE720F5CA333EB34DD5B458DDC73FBD9F4E8E2F0D148214D523337E8E58439173A67D39C65F1CBE1E95A0C7392A05EB4A870D539E661DA255052ED762C391AF3878DDD6B9FCFFCFEBFAD3E958E342540D01A9B599BB1B5A34561F41DBF43D44495BDC7BA9274CE7BFAFEB9F99A9AC3635C02145F47CC11F8A54654786536433D393367E9E96A65128DDD8C803E7A09CF31A7C797954AA31E4A4EEAAE2D4EAFCF817A3F0862B906A4D6CC19ED7EBD61D78B2AD411E93F2314DA6620A94589B9A3F3C837B7864B94E5ACDC7F47CE1CB6F0C88C8C41981F4394F6F2ACA67106E7AFE7BDE8D7D234F95BA2C0F9935E5587497A10003ACC91E7E83EBE95212A783572096EFE9A793BC226555C01D6E3CBCEFDA00F1D38943D4FE84D3A4CE049A654D7DFB6307CA1C3853DB432753C6E295EF13F1F8EB51B893BD3093776603261EF8BC399602502A2BD2C4DB9427E17657C3FC5378DDC6A3B887CC8E16D23CF5F3FDA8845441510F0939A2BCFF5A05481AC651FC875F4310376E70BAB13A46435FAF7AC4C04023DB3DF85A1E270E26241677AD785743DA2356E8D4188F3F8CFEC7D4D47CE21CD0E556A5B8F07F511ACB0252EC03721E963CFFBB5F1FC1DAC5AD5D6AE1295B6E2542089047DE9F104D29869E1EB514A71CAE0B71EE0D62DDB1B69AB0D325AE5962935D4E7DAFC1A39E7BEBDC83AD3AFE2B86DB10254A8424C19F200CF4CC7A4D5870D88DDF50E73E5CEF46E3468EFFE1BF1B7CB952C7CD3BC00DE0FDEFA79E6F411A717D8662B862541D6821482AE20B0A0A80729D397C2454989E4DCB9CF3FB8D3FBCBBE6C0F19C99D8742553379D981555B817F2E76A45BCDE3AF070B6E96C198304E506273396791F5CE915CF228E69535A7077E1F9E57EC26D2958A1BC374B805C31E9F887AAC6F0F527C2B9E052849311CC4E527EB4DD53C005CD4D8BFEFEEF6A343D9B889724198161219F260D42D4F7E96D59E10F6D26D35ADB5921D4B2A74090232C8F29190397C2A3CCF24FF002163AB654CE8787E220F15E38918013126686014012AD417A3F316EBAF55F727B14BD9BC36DDB525521B4A8920EA44EA40F3CE464072A87C5E20A94506A05186B9B823A37121A8D1E56F88FE2197B5B15366214FBC7573F80FD684E95D86B5B22FDCADC1C86B1D3F688F8E7CAAAF3E4EE2FE6002B91777EB98CAA3AC713C5E2D23FD304BD180234A9EB7CE2E54307C36DEB7716D2D869F72E14150901B42949923B2753F2AB3F8687F938B932C1FF700AA0A694EAE699935BC436227ACA666FB1410C9003A8DDE8F95BB691AE5EC70FA7783ED65BDCC72F9D7B10B6D947B086F0C57178ADA0BF6CB6DFF000E4103310A098D3CCD7D0AF835B351253859850E06E9A0B97D2C45B331C5FC64A56E4E29504BD89341C0F3B6763CA3B5789ED2E0DB3B64A7AFAF2CB0D65A4125574E2590001275204C011E9E75EE3C3789365ECED9D2D33A6CB42D08662520EA796AED1C706CA5E2A66FAA5AE639A2921D357CFF005ADA91A3FBD2F6EAD8FD97B97F66B63ADEEB6AB691D516996ED128BDB52E8C802942828827A6BAF9F16F1C7C5FD9F804CE12A7241485070A00F30694D6B9F289DC2786A615552425814900D35DEA368D4EED1AD8EE31ED33BE7BA2BDA67D7B15B2B78AE26ACB0455DE1F88A1854487DB54A01524F4820FC3C57E3BF8E789599F2B0F8A5D94C02C80C5F27CB3EE6B16BC16C192809594A41A312056ACC33A722DCE329ECBEE5B77FB20DA6E1786B78E63EA016BC571665BB8C483BA9525F8E3E29933E43BD79536FF00C4EDB98C9CB32F1338A544827E628EA00ECED7358B3E1F62860771CF10F40039A01F7E228D1976CAF2DAD2CDB65D0AE36C11FD503C4009F7475E102027B0C88AAEA36D6231C8F998A9855354FBC564953D75A677CBC8CC49C0001212C4021BEFD4371A5C0842E3681B40842608F42627A6BE7A6994655178BC22B100A92C49773D684D6A5C7A7187C8C0A52E48734A016167A5AC1D8171D61A0C40DC8F149E12A9CB498819C93AE5FE62A167603112BEA028330FDB27B96F505E1F4B90909DD0C40347B8A934CFD34D63C37103527B020F61F5E9972D2914ED5C66114005AE94352CCFA5FD87857E50C9B3FF006FBEB0ED9BA1C31391981D0CF4CF4927A6B9F4B56CC54A992C63A78057724EA1B335F3CAF1133E6A513B74F604E63306F6CA9A0AB8768BAE1E124E5A723D758F803CBE34DB6C6D2C2CF96654B6DEABB52C5B57FD8D03467E599A9DE48398A3BD19B91FE8E4F696DEE12BC6B66F116AD65376B4B772DBA9C96855A10F40234E22800E42454C78076FAB63ED492B0A665A58823506B466F7A9883DAB800B0A7191737AB68F97172348CEBECD9BC73B6BB0D87AAF9D42715C2D4FDAE2ACAD50B6C36EA99B62B495482A4360898CF3026057D6FF0081BE2F5EDBC1E0E4098A51DD4821DC0343C1C1ABBDF2668E3BB6B67FCB9AB601D4AFA435581ABF106D71A3398DADB6585B414233E9D394768FF55EC9C34B32E5A42AA77479811525A0CB5141B8F7EC8A438A711A414410510414410560D41E460862B695C648227F7FDA7FC72AADC9D958846D6FF309FF0049CD896A0CC7EF3E30E12AFF004F745EB539177B7A77E109780A05464124CF9F3E9973F972922CD8B989561D72C36F100303D5FDEBADE3A7C92B5022BCBF40DE1838CDE36FB6B6548F0D321C4A89CC1CB2F39EFD472269D230389978BF9A15F4B92439AD6BEE96EB1B4A1F2D41CD012E06B959DF96A6F169E3BB3CF63AFBB657A8B6770479A710F5BAC152965C6C89283EE9851907D6A5F68E0656D0C22E44C46F132D40821F22053ABFF6F162C26D64480192833014FD4431605DB514B59F5D390BBCED96C7370FBE1BBBEC45A5B3BB4C5EE9B187DEB69526CF0E52C00B4DEB86196FC57DC096C8D4E4649AF9B7F1B7E10E315B5F13B4E525A4EF2D4285B95B864D51DBD11E10F14C8998144B0C16000A4E85C5F893972BC64EC531469DBC63F95BA8711E1B4ECB64282D2EA12B49491120A4F5F3AF0FF89E51D8D889926602E85148E2DD069DFAC742C1E2062929B97772CEE0D998E86F5E10F7F18AB85788E4A565290A072208196BD62738EDA455490938D4EF21C82F703D1F2A67931D2243FEDFF4FD36353A0A03C0E674CC712E1A749C81CB399E594E79FCFA73AAD6D952F0153BCE34FB0EEFDE911F3B0C50A2925CD9CF0CC77AE5CCBC3A0F1CB3CE791CBACF3EB9EBFA536C0CF5626589801A9B171CCF2B5A9C328752253201567964039A5A1E36F19D4E99F7CB223EFAEB52B2D6A04006835B06AFB6AE42B4817298D183BFBB5FDF37CCDC840824C8CC4E9EBD4F6E644CD4AC9C49481EB6B65DFA529C58CE4D1C0BDE9F7F3EF126CDEB41241041904401033F97CA633315228C61490C6EC286CD6A397D79B5CDA3A6A1CD081C39B69516D224117CDAA08E20349CB5119CC79CE7EB4E3FCE4B80F56B92C6DC0E9CB943338770E01A92EF7AE7D3434E90E91760F2313D33D3B0FF0073DA9DC9C5A580A1275E15A55CB54EBA3011AAF0E4243379F637FC3F387ED3A1690648D753F7CA3BD49499C0B35CE6EC03396CF2E875A886A431208AE60C384852B457C499F9FEF520858A3B1247507367E7EDA34514A6E9F20DEFCE1276E034E14C4981A673D3EF29A426252A39823F5ECD23644BDF4024917E63837B2F0A25D2A12065E47F7A4FE582F7A5EDF88C19605DC3F11F8F75D0C2A1E200100C7A79567712C2A789F6FE4234F941DFB1B9FB7F51E195273D4E7F3AD0A085820D01D687DE543181F4AAB56D3945B778DA8DC2C83CF4E5EA0919F5A4A6CE480451C6B7B3BE6C226F0CA48949A3DEA00AF57AC462D0B920900721CC91D79FED51F35495367EF30E4728426618AD6A21EB5A1ABF7B71F286E0381D25C292DC0084A7946B97DE51AE7484B1B84B92CE2DC1D9E093226C92FBC79B906F4FBF631058DE1F638A214CBEC8532A10414827969397D3D0549C9C60401BC016A55ADCBD5BA67160C163A7482085356A145B36E35A07E3A55F5976EF719B338E3B746D5BB965C7408E04A12DA55C3CA0729EBF1A79FF00714121BE9A56C071E4F4E6747A742D89E319D83DD1366380DFC4D5C3F37F77A46B2621EC8370EDDADD62F8A5B5289095384119CE7EEC4F5E99D657B450522A2BDF3357AB7BE7D6763FC59C2E0D094CC51A001DEFA3D7BE94E30F2C7D929C438CF8D736EB4A0FBE56A25644F972D23E191A6AAC6855986957E1C39E5EA0C9E3BE32E0A7CA32E5BD410F41DAA4F3CEDC6362B633D9EB65F035DBDC780DAEE5B852961283EF01391039C6667B742115CF46E9622C5F869FBA1E51C9B6E78E66638CC32A6A92953B1DE6353570FCCFEA873E3569658682C30829E0425290008C9207FAE9D6A03138B44B9A4A8B819BD6B5AD0F3CDB368A64CC5E231690B98B2AE65D4C4E7534FEAC21EE1AFB6C073C549515FE58823312013991969FB53156225E2C89680429D83655B3D7D2AD4D0D7F152A615956F11C9C963A83C7DEB61EF676F86C86ECF6BB1568B366E61F62B4FE22E3DC2E9B86DC6D3E12841570A8C1D62BA3782F62AE5E225CF56E9485051B937D326D29E71133C94975294F50340E35F7DEFCFEF629F6ABC3F753B27B6F8A61FB3B88ED0EF1768EF880ED9DA8BAB7716DDE3C18F1085070A5285A44E6400790AF69F82BC6F81F0E61A5A6784BA11761906A3915E2FEB5E7BB7F64AF6829C12525DC3BA4E8E3576EA6368D9C2FDA37DA2F13FE77BC8C69DD8ED9FC45616CE0B82DC5D585E30C24884BF6EECA525C4F091C8C9390D281F103E37CE5E3662309885A6539000511FEDC803C433D468F0C703B1918597F2CA522F972D47EDEE1C18DB2D82DCA6C16EEACD0E1C370EC5B106D2957F37C4D969EC4BC4199587C0078A46473AF3178ABE256D2C7159FF226105DC95927851D9EF47EB5112F2F00898A094A149ADDBE9367761620EBD6ED78DCE34965F5B96B7B74A57BA1285B92CC0C824091EE819013CA04E83914FDBB3F1138AE74C5A8135DE24FBEA732F60D3B85D9492005212025DE9AE741DDF3ADA1156D23CE0F7D8B4E28C9C4A7FA82720788C67DA35F854CE071F805247CF92925AEC1C1BBF4D444A4BD88CA13113266ED7E97A11986AD2FC03666B0D5370BB9578AE2CA8AA4EB33197C8683975AAD6D19EA56349C2AB764B80C3EEC776D4CDE99461783F94ADD0000097767D437322FAD6249A6ED9413C62546072CC7D67CFE13562D95890129138953E46CD6E0FDE9E51A2E510E52D56BB9623F2FADC3C78B6C2544344840D04C7E9F0D2AC8B99859B2C83287D4340E3A3BEA1AB9C6C896581FA4645857DE77308159491999FD3EFF007E9558C7E064A945494A5817A8D33A574CEFC214DC2C6B5CB4E2F0A22E0275981D4F799E71150F88C79449560A4D1767B369667BF9718AFE27013264E2A06E5E9F6F60F3B05C5EA0260851D7BCF6F53DA3AD57D5B371F289C44C98A29772378DBAD8B11A3E4CF47F879265202564DAF535D3D8ED9C95A62B6FE33368E5B5C2D170875B52820147BC929053AE401CFA537C3ED9187C74948554298D58B83AD7AE5D03445ED259099891BAE59A976BF96675CA312EEFF1373751BFA7F67710BB6ADB6776E1D4ADB507382DAD956ACF8812B39252A71C54467C4A98CF3AFA77FF004BDE3593825E08E2541481BA0906E3277E2CE6BCAD1CCB6D23E6054C4CB1BE9A25C6B43D1AB5B1A56B1D4EC32E9A36CD80B4A894254983F99244A543A820820F39AFA7F83F1061F1F85978992C10509B35683DDFBC731C5A0FCE59C89A6B76F66CD5E53156186705104144105104144108A8428F9CFC73ADF786E367FB778502C2535CBDDF2D229A6B3524BF166E8DEB942714A913273CF9F2E43A5353F4D48A8EE3BFB31A2D05E82B98B1868E351390F3CE79761A79E9583894804B81467E85AAE6977FDC6A2528107773BB569E768E677F11CDB0C0F07DCC6D1E1D890B773107D36E709B25709BBBCBA43E92836ED932B0CBBC0A5F0E6919F979F3E2C4F9733033904228955DB31968FCBB476BF03E0819067EF2895EE9097A067BF03E7A472EFD94F7E3B59738633B17BD8B7B7C2F1A59745862AB4AD9F16D82CAD84F8CFF00BC4A58F0D10040564328AF953F13766CB99B467AC005D6A3AD09B5BD34B8CBBCEC492C25BEF53270C72A81AE95B51AF1BE7637A875A43ADBE5F6CF170BBC5C41624899C811A11CA32ED541D958444A400774024DEE2ED4BE5FA8BD26480809005402F571A64C694B0B989C6EEC04C0D7427940EB3946703D22AB9E2BD9E89A8580CED7E3477F4B6552222F17860AAB5791A65D2F51FDC546F805646349CC881CFB7FBF5AA7E100C3A0201AB97007134E4DE79BC252E584CBFA921C700FA0E95B707AC3B45F080273D73FD7B7EA741CA45130383E791CB2B7A084A64B241296B8A5B5D2997E9EB0F9ABB0A0924CEBCF9E9A6A7B7FBA7489A1C54B771F815FEE23A6C925C1A0E1EACDEEB687A8BA190904E59C9E646BAFEBA74A7B2D6E1F7806B3963D7D3F55868AC31277999B571CB85EF539DDA241BBA1C2923E1F0C867FBCFA5644C014E1C936A023A5B5E6611128824D9F5D2F461687EDDCE5F9BEFBE79794F5CA9EC99C090D716D43DC53D7F508CC94452A470E9DDBF312B6F78021327AE5273E5A7FBA9A913451E8783E76E3EF50D0D26C81739817BE7C06991E31248BD498D27439E60FA1E7CA2A5513ECCD4B3D1C77D3AC3432C66FD7FA8A16B4B8B9009273CFAC7A74EFD666B2A9E1CD09E34F7D237480031CACDF77E3A43969412224E713DBB4749CFF007AD7E790F4BDE9FB84964166637F7EB0E909073398E5FE7EFE5419CF93721FB86CB98C0B676D7DF1FBC2B5AFCCFF00E6F7D61A9984162F5D2DD33FBF3881BDFF00FB0BF4FA547CE72A249046447DFAFEEF13D842F253C00EAF58897397AFE948C3E979F4FBC377397AFE9442910F73CFEFFEB4411EB6CDB2DA05680A590413009E713F71442A852C00C12D567EBC5E115DB594FE448CB2C81F9E5F4A216DF570F388F73094B8E179A4008511000E913CE338144604C228E09E37AF5F7DA1445BF8060888E7C8F231D873EF44677CB3325B46A5DE195C3216EA960483107D35C872FBCAA1B1D24A86F11ADA84BBDDDBEFC1A24E44D1B9420062E2A03F4C859891D2156ED867967A8E7A89888CF5D341DAA1F08F2E7821AEFA675AB59FEEF0DE74CDE71955CE7C75ABD6343BDBEADF686FB61B67300C21D72D2CB17BFB7B7C49E6D4A6C2DB5DF32D80B52722085100284679F4AECFE1ADA2254B960AB404BD2EE3B72A9882C5A86EA998DB893CB8F95BAEDB6E13D983763BA3D91C1EE5BC399BFC5EE6C2D2F1C75D6997125F7196DE278B841FCEA3CFE3CEDF8DDB72E54B24CC724506F123A720F4D78D22B6B5CE9D34A10909961F7CAA8AAD8A69DCB3F3778CF78A63F6CC214E9B7658B8094A421A484A4250385B006A3DD007D00CCD71BDBF8E189C42A606AD28294B5F53CEB7D21CE1B00508A954D00BBA9CD497356B062FC39B4639BDC7B12C4D6A6DB754941910091F08F2E5DFCEA838E1BE556A963C789E2E6E35B5225A4E0C862D42CC0587BAE6F720521807EE6DE1A714A52D2249CC9839F3FDB23CF5150A6532AC75ABB6AE78FB689AC3E0F7402E920D9854FB2F9BDA3DFC6BA3593F2CBAF3D396835CEA4244BA501B1BE7719FA6A748999787DD4821346E8697B7AC5DB85BA576CD2944E7C53D400A3A0EA0F5EA6293561C99AE1D9C06722AD9E5ABFF00422BB8E4EECD239D0FB6D28E4C5C4C3A32391E93CBE7A8F4CA3BD58307240DDA0B5989D7954B573FB3121C343A99CFAE75341C000E50000504325EA3CBF534CF14CC5ECD5E5F4C6628FBFBF8D5357249C715815715FCF0EBA3EB1B265A58BA5B98D79E7F98F2419CC65AD48ED29DB982292C193471FA61CCBD60549770C082E2CC69D2E215C26FEE9DC41E64320B5625210B293EF78B32674C8FCFCC57199F8829DA454E28B198A07700D5FF004080F5881DA1856A549503571CFBB659D7478C5FED13B2371B41B2831CC19D533B47B3AFDADEA5E68F0BDE125F6DE7405247147828502274E55ED9F81FE269782183056032902A585C020F534FB6747C7E08AB788723EA7A38A70F77B3D6378B707B7B6BBC7DD86CDED8DA5C05B86DFF000772D85494BB645368B2A03FECA6D473CC99F2AFAF5F0EB6AA369787E42C4C0A2A407AD7A8E1D1F23AF24DAB855231AB94414073BA45055CE9D5867AC6CD57A062BD05104144105104141A0274821051924FD690DFFA9812E6AD90CD8FDBBD2352A0FBA7CEDAC794BA405B0362EFD1FF0010A01F533F51C9E1A2AFDA4AD6C702CA9B8E22008CF3C8CE7F7DE9962C7CB04873EE8F5E1E6D95551294B248200701EB9D3F1EE90DD58836A4DC1085245BA14E28AB294A50546328D07330488AAA62B13B8953920A4289198B97BF3D3CD8AE65A9050ECADE20063992DE5DF83C70DFDA0308C53DA3BDA57F97DEBAB6363B6096EA2C6D41294DF2EFADA1C55D20CB6B2CBC9E268A47BA60EBAF8E7E2DF8C932F1589C31994015F4EF3B1008B3DB5FB08EF5E0AC37C8D9F2F7C0DE6AD8BB97626E6A6A1F8F18C3FB47ECDD6D87ED134AB8C47107459B9386BAD3A14E24982A43AA2326C1848098F7644D7807C73B6133B1335654F551777ADC1BF0FD523AF6CC98997BB5A8636A6552CD9B9C890CFC364366F07BFC2708B4B2BB536A7D8441282A28293920E9255C31C5AE7AD72E46DE4CA252179977229DEBCB99D62E122724A4070C33353C1F5EB5E81A2E24F1A44127976FD07EDA74A8DDA1B6538896AFAD2487A3BBD5AC09CA8D946D37FD4FFC7461EFB3B738F0B2E2A1D0A002B91999F211AFD67388AAB9C4BA94AA33DFC9CB1A3C315000D81072FCFA884D771E0E4A24C69C267FC73D7B1E74A2279A90A26D6B31F75AC69B81BF8D356E3AE55890B6BE416D27333ACEBE7039FD9A7A8C4501053C43FB670D952BC631FE3A540BB31E845F36ABC48B77A88E6077313F3F874F853A4CE71424BDD89667FD7B1091C0D281C7176E7D1BCF263128CDD254849139839120C41F879473E94A267310C4BDEB979E6DC5E194CC2906D6E4FD2943AB5B330F9BB94C6B19794FFBE733DCD3C953C13A72B1CAFC1C5FCB268A95914039DBF421F35789809F78F48EBF796524E7533879EC0390DA3F3F400E6C0D2F0D26C87FA5A9C8BE5E63D6B9C48B5700C448EBE7E7F1F873135288C40342486BB1A7BFEA1B2B0DBA93F4853DB5F327F5CE1E22ED2980788EA2674E739E5AF3CEB2B9EC7F950330259ED5E37E1AD2F0CA64920B817C9A9D19FBE6F0EDABC40000E2275D75ED964639FAEB5A0C439FE56737166AE74B65DF46EB9248219AEC452CFA57F6CFA44BB174D142409CE7F365D7B76F8D6558A2C18B1A66D72F91FD00781762B94A62E03E5FAA7A4394BC8509063EFF005F856AA9F675543D01704F17CA9701AF0D8CA5120EEA8B543547A5CF768B7EFDF425F58E6408EF20E7A9D23EF3AD8AF7EC4E4EC4B70A74ADE2C1844BC9045F3ADFDF488972E10391CA7E197DC510F100877CDBDFBF3868BBA41204191FAC511BC34710A767872F3F4FDBD28821C356E80DA78BF3738CBE7F7E7440E0355B480E1E16A8C8039F2D75FBCE32F2A23054407A9CEFE7124C36DB2C2595092999F5D2328D3EC5109B2D4ADE0A2125E84FE2BEF8C475C59A9D27878403D49FF7A7C0E9D688583EBFB6B5BCB288E368A6D5C2AE1319C8F975EBD49CB91ADB13212AC31555DAEC694CDEC4DFCAAF0B0C46EA00722B716377E197DA164A1291A09E754F520CB9C9235AF0D1C3F2E0E2958426621C3024358D3F7C757C9A310FB40EEE0EDE6EDAE1092D0BBB2BAB1BAB22278D28B7BC6DF7818132A4A2044F43578D97354896921541DBEFA6BC223664DDF514545CEF1700F7C99835ABCA32EEC86D17F37D8DC1136CD949366DDB25C7C43893628432EF11131250784822728A4B6A6D39A842920B8B67AF46E8C2199900CC0B0A502FFC41649B0A8F4CBD623B107AD6E5C5E6E2F382A519929C95E920FCAA9B331866A89726E35CEF7E5167C0615E50243F1CEBC8699E67388A6908615C4D0CE79F4FBEB1E94DD52CCE340EF4A5D9CDE85BA5A25E5C80C10121BFF217F6D5ABC2CA40721C580547398CC41E607D018EDD7518204EF29245F8335B2A55DBD1CD17004BFA40492D9FAE7E86AFC63CF01BE9F4F2E9D2B7124203311C68077B6B9C29F315C29CFAE79E7133689E06D0907213CCF53F79C69CB2ADD321D4E41A376CC598D73115DDA65E6D1201AF2341DBDB9A44F5B93A8F21D0CF3F9FD6A670B26A29A92C3D3BDFCA23A24D1A791A7AA4800D1886FC7BEF7821AB90083A0EFF00BFAD4562177702C79585FCA99C108ACC0D0CF2EB974EFD2A0D52809A565BD2B933166CF9C3A4A5CBE432D6FF00DC362E01208206533239FC39F5F86B50BB63103E5290E5D8D7CA96BF1E42D0BA50A5073BA34D7EF15B37EE5AAD2B65290858578E63DF24084441CF339CF2E432AE458C49FF0024AD2186F397B9ADF46074D4E50CF15864A812A033624DB50347B5B2D6B14D9B571892B106AF54971AC4187985A3320A5C6D4DA723AC050991EB39575EF03F88666CD5E1C15EEFD686A961F50F4AB7E1E2AD8CC227EAFA458D8703A52AF90CF568B0FD9331EBCDDA6F276F373B8A5D04E0E8B9B67F669BF10F02BF13C77777E18510930A589E0CC1F39AFAFF00F00BC668C56C0C24B54D752928497232C8BE742F71DDE394EDDC0033D4B523EA0EC5BFAF2D63AEF5F41A394C144105104144105609604E81E086C5414A206467A743A799EDDCD343FF00BC6A0FB8673F878457FC8E56FCFEA3C518498FBCE9F4914E9EA4FE217921C025E9F9311EA6D2975C75510A02644CC40EBF1FD269AE3801289CAA48FC1D783BE74021F8A25290EE6F7677A76E2CE6DC2CFDB4BF1856018D5EB64A549B37CE52238585F4E7979EBD66B98EDC9E5089CC48FA1449E878E59F0A350BC8E090662E525601DD26B424B90731AB5F83691CCCDD4356588AB17DAC712955F5F5E5CA5D5C02A2597DD6D3EF6A0C0CB58E5957CD5F8CBB4272FC47899695AB777D4C0167A1CAE6AF4E7725E3B8787E684609296C870ABD331703A8222F5C470DB7C495F895B214E2566094CC4188EBF4CA72EBE57F11E1E74F4AD6497A972795EADA67D62E586C604B7D4CCD98AB57ED61ABEB0DDFC1028173878652204690398CBEFB5719DA089D2A6299C313AB54F1274C998F08B2E17690A00A532A8EED40D634FD45B17964193040100F4E5DFEBA76EED70F2E6CE35A825F8FB2F406DCA827E562C2C0726BC7866FEDAA62354BE06C27A75F4CC0EBE7DB3E55ACF0A92B292F562C03D40ECE33F485400B5125C0A7A33F4881BC7413CA679F4FBE7977CE45665CD63987B81E4783F1D0BDA1CCB96EA029BBA9B5AFF9FBC356AF3812124E63F7D4F5F334F11345DD8E9996F5E196A61DA70E0B101DF3D32CADDC3DE8F0FDBBD0AFCCA811A93F300E59C098CFB9D69DCB98406714B17FD8B37BCDC9C28091BA05726FB5B958359A82262DAF416D2388F38CF3991C81EB3F38EA326794B3392EC4EBC49776E3DE223172B72636E8A52835F4E36E3122DDF640A8E5A139E44C67CBEE29FC99CC41C8DA9CC6AD5E1E511D324850702A323FD39E50E917C018E2CB9EB23319EA6A630F3892C72ABE5CF5F6EEF0CD72B781A116C980CA262DEFB2199E5AF78FA8CA474A939739E9F503E6071AEACCF943654B20B338399B7A7DA1637C028C100E53999F4C8C4E7D7AD0B985C392F5B7DEBEFBC64E0C285535EBA51EEF91BBF1061D377C081EF721A93FA7D6739D2693336F550A8ABF2BD7A7286D3304E480917A86B7603D4D75CA45AC440481C5A6B9E539763F31FE76F9F5B06F3ECFF7867336706074ECDCFCBD987EDE240089F8931E79447DEBCB22702CD57FF8F0C8DFF3C4086EAC00161D48A7EBAD32CE185D3E1C714BE67498CBAF79CFE7CF9C8C82E9F7DB4CF81E79292E58969DD1D6235C744E7F7E67A9FBEEBC291EB69E3015966796BE9E7E74410ED0D1CB98FB39988CBEFB9042A4418A21BA955739F97EA1CA3F30F5FA1A235F9838D32F6605FE63E9F4144642C6448F2FD4534463E6F151F7CE105B3C6A2A024E4797974D7F7E666A41697C29A3B8A9D397E6ACCD0D5734905CB0CAAD4BB77F79C79F86FF00C7D23FC7DF5AA74D40F9E684D49715E9F807C9E35130A894B8C9ABCADA583FE690A8B14DEDBBF6AECA982CB8953660825685465A183F09CAAD1B3641296C886E4DEDCDEAF7AC6AE5F526952EF97703CE30CEC4E38DD95EED1EC6A8F05C6CF3ADF829D14A17CB53878473C959F6A63B5F0CB014F6BD3DE95A178D92927871EB945E7F855B1FD3590A503C52733EFF00BDDF406A80B5FCB9C47F17E87DFB348B66CEFA64241CA84B71A574D32E791E1764FC3FC54CE1415B31622A479BE61AB4CFD0C86F8073705A90A04802201F4A9712A868321F904B5FAC60CC466A0F7ADFCE00848E533D62994D9612FA1D453D83EC504682725CEF100017CBD7D9F29063F2A2639C41C8EBAFD08EB4EB0F237D20DDD89A56BF815B31ED1018C98664E5682DD7A0313D6DCBCB4E833E8627976D2A664C90801C574EE0D087AF38690F0B9C23873D351D67F6CBE149E24356CFE6037DCBC10C9C7323973FD797A49FF5355EC49604D33FB7BFC410DD4E8EA66633F8F7FDAA2A79694559B2892D9BD2DC5A0FF2025410E6F52E5FB701C74EAD5C7233275EF33AE79C7D39552368CE2A252EE1CF50ED7ABE46F0FE54F490C7DD6F7B71B7DA85105B047AF4D4663AFD63D2ABCAD9C66FD6CF9E55604E4281D9CB5E9CB49CB1BA4920BB3035035234D49BD32CA6F04FF953E71F08F9FF00AE5580A5E0D48209494A833508ABE5E5C1AD15DC496DE21D4E7E902E336D3AF9346A6FB495CE2BBB9DE26C0EF5F034ADBB7C26FC338F968101D45EBACDAB25DE18E2090B2654401A7427E82FFD3DF8C97270D8390A9845500D7FF21DFD98A2ED8C37CCDF3A822D62416D73D1F32F947786BEDF479FE0A20828820A2082B04382350D0423E17BD20FC7BFA521F24EFEFBEA18FAD3DEB09A90492411580B64822467E7FB5390BDDDE24528CDC183DF8F0B7185659DD0C47B73F6310F7E16A6DD436616D14024E878950207FAD79C0A678D5FCC945097048CE8CE5B2357FB71877267A10BDE5B9B51BD72A458DB75875C5DECB6376DC4853AE61D74A46A724DBB8A39C4FA0F2F3E79B5F63E23132E7310C50B26A43063D4D1A85A99449E1F1D2654C4AD2183B119124B0E0E0F91E71CC7DC03CDB78662D6B700B86CB10BB45C30982E33E2DE3A10A713FDA15C8F31074135F32FE366097B3FC49893313BC42D5E635AB3EBE6CE4759D838C97330882924067EBF8E71B14E58DAB0FA2DB80C3852A4AC0050A044FBB9004A4644472CC579A76A6D5C2CC2A925237AA0D85EDF7BDEC0DA2D322715A4A81293902F6B56D434A5BCC45388336E0A9B42488033CBA7F831975CBAD4713E1DFF00B8952E58649ABB55BDFE844CE0D730A52B529DC9601C677FCB77D31BE3764A3C4A052224C73044E9F5D7302321155BC4E1E4EC452BE724109D450BD0655AF0D38C5C301342C01F507FF769970D39B73118DEF1F0CAD6D282894C024091FEB9FE99CD53F1B8A463310664A1BA1CB3160CC464387BB0B4C895BE9DE01C3E59F3E16CF567310370AE324E639E7E83989E5FA69AA2896A772483AD7D93E50F25C95381666636B0AFBCF867185B738894A81132333EA0F7FA75269E4A965C1736CED5CF3BD80FD987F2A5D1B93D7304DB8BF68593C7FDC72E93CFB7CFF6A7299643D546B93FBF5F387E84B07D4797BE9A4485BDC708824FBA3B9D7D7EFAD2C990A507DF23AF5D38F11D1A22717277E61666B55F83D439F489469D2B88240E84FEDE5CF97C9E4A429000FE4033387CEB71AFBBC46AF0E6AC017D0575191BEB0F1B5AE75240EE7FCF4F49EC2A4A4952581CF9BB072D7F2CBD192F0C5D8BA6DAD7DD0F0C8E92F6EA591AFC7FC6911D27D2A5252C30A87A3D6FC03D6D4B521AAE42F7EC00193776B663B8BC39257248574CA4FCFCBCE7E94AB2D44AFD1DC9D7A37EF285D32C0480454660DEA2FE74ED0B0714343F7DF38AD0DAC08CC1F7F68D572C2ACC3EDCA86164DCAC0E73D79FD72F81D3CE912B50140E732F5EE7EDFDE9FE383763CCFE0085917BC3C8F2FBC8E83CBBF334899DBAC2C43BEB93035D350D784578601CD0835A0FD71E10F5ABB42D299E2988D3A73CF954DE17100A035F314278BD7D1A9D622E761F754D501DDCB8BE56BB5FA457E1970FBAA10399C819FD75FB9A72678D5BB76BFEF8C246436BE9DA9F8891B76F85213AA87EBD33FF005F183FC814FBB57CC7BBBC24A400D56E7D7417A5A251A64902018E53E7F4CFB0AC89FA8FD757D783C375CC4A417E36FB711083EDA90E28149F203B0CBA65F79E547CF72CCDCF2E758899D8D42565390D6F09FE2380C9428913901E87AF5A772D3BE01D74CB57F7EA23418C41661424F1FBFE383C02E02D51C0A493FF006FF5DBA7952FFE31DD7ABE999F2BB369F78748585B0B12F7B7DE1DA1A52E22339F9524A94437DF3E4C215DD6FE4F5B337DFDFD9EA1809480A20913A41E87FD7FB9DD58A4A257CB2EC5DC5B577EF91A68623E7255BCC0B0F798E87DD28586D133FA75EB3CB9F2390CAA1BE519B38A85002087676E2C3FA2337AEA90C039248776F2A97CF3F21482CA6CAE8DEDC00BB27213E1A3374920A678498804C933A0F302D3B3D69414A480C5C16C88033073CEFD291A4D5AD52CA65969818825DEEFE63B738D24DBEDB9C0377DED43B33835F3FC09DE2FE2835C0A486D2AC3ED429297E620CA804EB988E8697C66CF998B973264B49284B6F100D09B7986AF28565624EE21DC29EC431A5E9CF8756AC6D25DAD0D043AEBAD2D4E0E24A50A95709CD32239A4F7CF9F3AE678FD913118A2681CB90470CACCFDEDC4C5A701894996135B0EAEECD5A8EFC018669BA64F17BA470827DE033D7439CFE952182C27CB29DE5001AE4B00D6AE9A30E62D12C10660040234CAF47D1B5D3BC3138A32501C436EAE54470240E210634FBEF15253664B427743161C0F2AFBE1902A9C028D4A9406AEDD731D61C33749791C7E1B8D8E8E260EBDA6A0F138A4A7FDAEC6C050F0B5ADF624C36560940D161455672EC03D7AFBA449D9BA16522149CF22AD3C869DFCB4D69FE071682907779BF17FCF688D9F832164A957B36A19F5A56F9F289F69D6DB4F115A4F380738CE7EB91F954F4B99BC90ADD773A39F57F7C5A18AA510696199B7714FDEB0E53C2FB7E236EA013AB64FF504728F4FF3AD23889732623E942BE907CDAE2BA5883CA90D953128594281E7979B7BEACD16D393EF24A0680AF248D39E9F7D6ABB8AC36254584A5B1E05AE19F8D3B5612389402DBC003627D7FB0DE6611530A0A212B43875F70CE7AFCB9C7A659D456270D8A5A0A132261CA8836CEFC1AE7CE3230867B4C133753715A7076E5E9788FB9429912E10913A9C819E7E9CFA4D55A7EC4C74C98E30F38392EE93577B8A802DE54021CA6589742B0C9E3A59A9EF9C38B6426E5A406DD6C83202A72272E7E9EBF0A5E56C6C52505270D3778D2893DB8BFBAC213E724024AC07C89146D3A8725F95E2EDC1F09750B0A2EB5CA73EDF64FAC9CAA2B1DE1BC7E20B891343116496350CD42F5D7FA82C4E20027EA0A73FED6D5A96D4D3FB8B6F7C1BBFB4DB6D8AC5B087956A0AAD977AE2EE2238AC10AB96F8091AF13606712623335DEBE11A71FB1F13864CC9733712B41208E233CA95D32A8885C60F99254776956A57335B90CD901DE3A7F5FA248F3641441051041441051041441056ABFE27A7A882193EDA65797FC8524C8FFAC1EBD7A7AC9A6337FDCFC3D4379460F0152439FCDB2E3C9A22311B5172EA6DD79B2FB2FB6E03D16D9466398F7B3EB4CA700A95301762936E51906BC88E5F9F28E4818DCFFB4D6D5EC662292D605B7EF32BC1D6E7BACA1766C179DF0C9F7412E2B329933A8D4D7CFDF8EDE145E336962B13B942546D900C2BC29C9BB751F0F4E57F8682972D47009CDF96B4A5D9E3688DC5AA516CDA96953B61C456B541E20F105B20F4E129D7B467957CF4F15ECF3B3F1CBFA4277546ACCF5E6E5AEDA5EF5B8E1674C04925442B22FCA9CD8BB80DAC33B94A16F39CD27848F513F0A4F66ED02256EEF55B95B8BFA16D22CF849E7752924B55B2A1E2EFF63DA2C8DA048085102241FBFDFAD527C5A83890B533F27AF17B39E5578B161B1664EEDCE64E57D491E6F4D2310DF31C6FAD406A731969DF239CF49CFBD50F0F8764B171C7F5EFD04742D9988F99870ADE3567626E5B566A56E395A229CB52675075CF2F49EF3F5CA9F210ED635A119717A3F5E59C4BA660480A772FC185756FBF0A0864A678544427D7A67D2453C9729DB2CEF7A57D294E5AC3B97352D40C0B683576D7CA29F0BB27EFD29EA25B5198E65ADE97872165550A3DFDFE22B4359E83D34F5CA94F9645037BE548673D637D8DC69C75B57FACA262DDACB4F86BCF4D7F7D4F3A70843007B7ABFBF5864B5B3EA7ECD7AC390214B1D08D3D69CA406043977A8A80C7EEDEA1E192CBA8D5F4CF2896B6E5F7FF006A7D2D0C904DEEC3BD61AAD63789A97F76C9EF0F29E243243FBAC60170F0526BFE47DE519829B1A13CCC1053199FCD5CE0855B742541249044E7CB49FDBE039E54B4B9E515A002F5AF419817BEBD5BCD92958AD40A8D47937189961C491131FBCF5D233CFF004A9097377F3A6751A52BD3CE2371092806AED6E00E67ED6E222E9B0B42EB285C4CF4E601EBDE239FEF272249981296724D1F2A9AF3FC1C8C40E2715B856E5865ABB726157AF9C4FB162604A7A1CA472063D7EA7BD490C0934DD069907CB835B5D2B77020E763807482EEED50E2AEEE69C69AD844B23096D684AD60151C8F5CB9E79FC63BE7AC7CD93F2E69435F30DA3B7E3AB06110F366898B726996ACCFE8CE7AF086AE60CCE5EEF6E5D27D0CE5FEAA5B0E96003529EA6BF9E3485253D1C9AB9ABE9FA7885B8C3421F52909F76004C0EDDE7A7CE9FABE9431CDF7BD6E3366F3D22770F301483C18EB9559BBB79C3450F0647965988C867F4E9CA34A8A9F340A02ECE031AE4FCABF7BBC48865243D7F3CFEFA455E3712667D0647EFCBA9E548FC9F992CCC203F70C3BDC7A738653D20ABE9CB8BDDB9FB162EF0D9C741CB2806013A1FDF4A889D3C492524B35F76FF8E57A563544A2A06EFD5AFC32D7A5A1CB0B6EE91E0A9400642811944AA639E7C8C771CAAC9B1569C64C4246EDEB93B8E635E3530AAE40975DD2EB66A529D01CB8C7CC77F14CDF9E27BB9F69CD81BFC2EFD617B118B205CF86E194B589AEDD242A22006E467CA7B477DF0B786938FC0E2F086582B9E84AA5AC8000DC054412C58E90EA5ECDF981134A084E8433F3C9DED51C23BADBABDAAB6DE8EEBB65F783865DA2E19C470AB452836BE21E236C32873249227881273D7BEBC3FC73B226ECBDA139003142883A79778929527E54C1282482681EC5B4E2332D4E4F192090EE182E90402252AD44C1E13D3420FC338AE4D8EDB0AC3120120A6843BBE4FABBE5DA26A44D32D5BAA72E29720357F41B37B88696D6A9504BCB2A434A909520C75060F98EF9FC9BE0B6A2B1AB4A12B2497CC16E9E553D21CCDC6EE4B2CA049B05337170F4F2B4480B1B8B53F8AB4745C253EF78774A2B4FC04F5F98EE2BA1ECAF0CCEDA094CC082ACD88705CE74EFAE4E5A20B15B551BAA4EF096A3729A372CABDCD6E6E9BFB5FB376AD78B8E5F5AE10FA5243BC4EA18B64C12014851CA4013AC98EF13E9F066293382132949723F8A481E9C34E4F1569BB6D3281419AA5EE9242965D44939B73A35338B77FF0077B77CD2D4D5AE28DE3CE03019C1DE6AE5E39CC7083A9CC0D64D744D85F0FB153F70190A24B0FE3DB9F3E111D37C409208DF14ADF5D756FB5ACD01886F796BB95A3677775BC3BB7CF086DDFE55C76AB3191050734FCA39E75D5F66FC1D9D88097C37F201C14126B6A31A0EA5A910F88DBE92A7DF0791C8D296CFECD488C5ED17B4A6D09E1C03774FDB30ACD0717C2AE90424E93C32272CFAE7356D93FF004FD3310949FF0012EC7F8137E9D9C6778889DE25912D442E72535A396B86A9A5BD9AD5EA775DED7F8BDAA2FD8676570E75F9E2B47137CD38D41812D819150CC6798AB76CFF00FA6DC2CC94F370690B0CE4A0022D67193B75B8A3B997E324225309A9292285DC16E2F51D351530DEDBD987DAF76956538A6D36CCE1ED4C7B9777AD40503966201D34D7AD3FFF00D9AB03BC01C1CB482D532C7FFAD5C3F5F26589F1B2508514ACAC8FF6A4BBF4773C47DC45FF0084FB126FC5BB768DDEF0E2E332E0B3C56E3F0F9CC16E53232D7F5CAB63FF004CF8100B616496ABEE25B90FA6BA655D33819BE37132BBD3522B42C08D2E696B5ACF998BBED7D8EB7CCC883BC6BA911A628FE79C83F9479721DF5AC7FECD18225BFC29433ACB19016A1AE79E5C1E317E2E249AA8825EFF0082CFF9EA6D6C4BD8B77DF89626F0777A37EDD884F86EB2318B808536EA7856387860852499D35E82ACBB13FE9B64C85A66A30B2928490412802D95B80FC55A1F7FEAC4AB0E874CC515BD80B87BFEB9DDE3AFB5EEA8E530510414410510414410510415AAFF0089E9EA2086B7124122252329EFF3FBF8B19BFEEE9F682231C5388B76C28053CA2785799004F3233CC72E94CE6BEE299AC6FEF568C8B87D6388FF00C52F7ABB3BBBEDAADD6B96AC5D39B6CBBDBAFC2BD6012432D8758FC42AE543FA890599E18E8794D79B3E2CE1B0AAC3CFDF03E66EA892C1F5CF4E9D5ABD9FC15B2E6E2704A9CC0C93BBF281077854EF026D5398E7AC65CDDEEF16C36EB6630CC6F0AB8FC4A95676DFCCD09585B81C4B484E406842C2B881CC19915F2DBE2761D29C7CF12C06DF351C4D45299E95BE51D065EC6DD5268F7BDEADE7622DADAD95FF009EB0D5B25F752E7094E6A104242722147411967AEA7ACF32D9B2267D34AB9CAEFF006F47B189991B294E027701A3839F6E3EB5D22C8C476B306C41F559DBDD34B7F4E04AD255C51A44833F18D09A4F6CE0B7904A810C0966A1FC37BD625E46CC57FBC2695041E5ED985E2DFB9B55A417142352126263B8E91A76D73C8D2578620B252284D142A75B8E00F23163C12C4A40402C2C374D388ABF0AFB10E4B6E15240854C72CF3F972EDCAB797870186EF30453830E1C1F8C49A2752A5F997E3C85EDAD6193D6F0E2840032D4769FAF96BE74F65C9DE4D1249A01981CE8DC8F387889E08A966E37AB52A1FA7F690B73CF847A034E938726C03EA5DCF973B08748C4351C97CEA416D0B8E7A7185516AB1052011DB9FEB97C8D60CB656E903B38AFE5B85A109CB04EF6F73D5FA72F6D4906D250334EBD35C8E91918EDDB48AD9282E1D8F0BBFBA43652BE92A0687337E9E77E25E160C29C25620054403AE5391D3CA9FC990017501C9A834CAFD290C674DDD0C286CD9BF11A0D3D6D0F5A49447167D87AF5E84D3A4A2B5AE9FD4332B2471CCFA43D4A4A9214220FC72CAB785E5AC04805DF5EBDE91413026915FF0023D3D042D14F18EFF7EB4D8DF3772FDF2820E34F7A6333F9AB9C10DCAD5F886D0028F8AA30672000CF8BA65E9F11496EA8AC685CDE9419F514EF1B9004B51A029A134715F3D22E8B0B65BE0F014FBA7324E5EF699F3FBCF5A90C2A14A50487617239BF60F5EED15ADA53D32D248CC540671CE8733195306C25E6EC99E25227DE397427AC7FAEA60D5BF67CA2C97A91600D07EDC76D68DCFB1D8F24AAAD90E19BB7A718B81AB55208E2E123E711967AEBF4AB3C99296714D5A9A8F36AD44434CC4A8B3E6ECC752097FEA1E1B67D49050501267224E711F7CB954262E48FF20B00C097A0CC163E8FAD6B09A66282805D9D8101F5CEFA72CE18BCCBC38812920EB1DF58F2E7D0C75C95932E9A6BAE7EB125266924390C2D50F415E86D119728096CF101C40667D632CA7BF3F5ADB10B094901ECFE97E0C6BC0F0892933095259C02406B5BCF5E5C1A2CEC4042A412069976C81D33F3FD0D5771130826CCF400D6FAB53A69C226654C06854406E9C8F319D43C44A6FDA6DF6AC940F88E85A92A3F97DC049063AC65F5D6A730E12AC0B9DD7637A9E47953D3842CB93BDF58766CBA926AE7DB5EED98C41ABB75E690140B0A09254323248047C33D34AE6FB5E62C4F5A52400F91625EFDAA2D47AC3B9528001D2406CDB4A75CBD28C621F1EC64E03678BE24B2536F8759BCF5C70FE672195AD01BD24A4A7DE274F4136AF07625B132C2D4FF005076342E685FB6BC8343D421139280DF5289DD24000006B5C9DB99CB26F8AAF6EBDB4BCDF06FFF007838A9755F84FC420308B852BC40BB36D4942923300F1B6082328AF6EF808C8FF1E4AD4582836F5890C7798926E07763589D932E504EEB0A52845D801CEB7CEBD23B37FC15F7CB8CED86E6AFB777B417EAB9BBD902B656971D52816EEAE1D2C8682C9221B48072E523491CE7E29EC1C2E2B6962276113FE8A80202D8A8A825CBF026C29C4B52313E5032BE61037D2A0CC03873EFD873D8B6AE1413738580A0A6D633232214A2A11A99EC34AF17F8B3654CC3CE58DD206F1A686D53AFEAF0AAE58090B60481FEDCF5D1EE6BDE13C5EFF196703C51BC0ACDBFE6584301C4A31042BC2BB2B495816BC32A594C7BC32CC8D75A6DE12D98B998B96ECCE9705DEB40D6D056D4269159DA139482400A21408DE4B306C89FBC6BCEEB5BDFAEFD715C4B0D5DF60BB2F6D62F29B76CD2EDC59E24B4F12802DB79CE499131911CABDE5F0D7C2523132646F212B2424071C017ADB3E0383C5036BE38E1A5AE62C929059DEBF51005C9CF8E71B8BB27EC2FB3B89B76F8A6D9ED7ED1E297AE2C9B9B07AF90F5982930021A7133C2A2339D743AD7A67667C1D938D08C40908292C689B934E3C3DB18E6BB4F6EA913968485D0515FED2E1D835CD6B9BD2367765FD99F74DB1CEB16D866C761EBB929917AED833C4484CCA9C0264E7399931D44753D83F086448521F0EE035D2185726D397EABE76F621614B52D2056809DE1C6ED52FC79659CF0CD8AC0B0D65B0C61564D38DE9E1B290948E5A0CBD79FC2BAEEC9F0260F0A9015252E007DE48C8532E178869DB56729759C5292ECCAC83BB87B7AF089D18724A4B72584447F408491D00D3BFA73AB6C9D818294001290198064836CEDAE54D4B988C9BB4C12CA56F914FA9CF5D32C8D3BC7AC614CDBA83BE33CEA89FF00F6AA67CC67E5FEE2909B83968594CA410336D45AB972FC42C3173152C268126A00C859868E21FA909223810465A8F39E823427CA915E1C9AFCB7A55DB203ABD3DB984CAD4EE951A8ABFA694EBCE17693C08E1002626001909E9FA8EB5812D219D0464E406A6B7E9AF184D454413FEE3ECFBBF584D4DB866081D3F5FB3D7E3B7CB4A88FA7300903234A9E3DE19AA54D2E778EE8AB3B1A7BA65DA18BD64B716D289013EF78C53F98FF00D6391E433E5E662D1853265482C9A32775C060D77F366D7842D2F18A928092E487A1B8E219D896E55346789EA46310510414410510414410510415AAFF0089E9EA2086970471251FF79F8A472FBFDA98CDFF00774F3682239E50532FCC715BB657DC0009FF007F6299CD2D2D674493025DC3B5C5B9F1EC3F6C3807BCFDDF2F7D7EDB7B518DE3A97719D98D83532D7F2CB9FEBD9B6AC4AC4B40B6CAA5293E280A3FF909D419F137C6AF14A70B8AC4614AC823783386B1D1ECCDFBBFA3FC1189972363CB4B805AD402EE4906ADA64FA3455B57BA8DE46C0E23885C6EA4AD9B7B3522E1581A83C1A7D025C0D22D99038E402003919F8FCF2F1763063F1F34BEF6F2CD2F57A357F74ABB45E13B430CC085A083BC1DC528D4E2FC5FCDA9D99DA9F69EDF0D862F82DC6C4B7B1F6CD2516E9BD770FBBB274F00285B8870120F1147171644C8275AD363EC733A585897401E81AF9FE6BA662A61F68E0F07BA9993F794B2774CD507357A13CF2E91963769B92C6B6230C38A6D3631758AE36A70AD4871F53CDA55E21C805C2C08239CF789A8BF116004996BB16A65462D7C9BBDE8F58954ED992A2109A519E8C5C6473F224114CCE60BF4BAEDBF1BE84B6E70C14A072190813398D67227E7CC66A01986F760070A6638E5911AC3DC34E48427754A50A9BBD0F1B3D6E3F5169B6D7F54C8124E51209D7A99EC738AD928208FA41E14CE9FBA7AC3D97354A2EF50C5BF23B7A8872F5B4AC98D6232FD60FDCD3F9325C5807A923ADF2F7CE1E89EC5BEAB5C56B736FB0A425F85EDF2FF00FE4D3912C3B96E82ADCF28792E6D01766C9DAE3C8F0CA1C22D55C2397CBA763D64F4D05349D2885BD0699655E7DBAC60CC4851049232A8CEF7F64E96854DA280399F847E95B4B95BA5CDF2ABB72F7A9A420B9A6C1BA1F5D7CA1C36C10800EA3969FA7ED34F522828C746FB4315A8B924BF2FEFEF48AFC0EFF3FF0014E25A094824004703EACFFA221BAA687D1AD7CF979D042C84F0A427A4FCC93492BF91F7943D45520FBBC375FE53E9F514DD7FC8F4F410EA11A6CAB9E67D608298CCFE6AE704327314B4B7B945B38A48B8585A5906388983300E663B4763AC4961F0A66201670D76E26E5A8789A0E2F0DF133D32D0A1BC58EA6EDC3EF78BDB656DEE4DAB9E28595A9692041260AC11944E635CE0F6A929185DD50200BE966C8356C598B5E968E79B6B68B0500482C43F77E347A072285DE33BDAB45AB76904442465A119099F53CAA7E47D1BA416CB466B79DF2ED1CF66628AE6106A4A9989E3ECD4085C9813F2EB53327115634D06BC2F56A97F4891932B7C0DE0FA021FEFC3830B887CDE6CA08C8906077EBF1FD32A6F352262C9157B51F953BBE9084E64CD2906CC468EC096F271CF488EB911247F8CE073EA273D73ED584A08A873AB0A67F91ECD1590B3BD514E1AB54FBEB10576725CCC4465CC41FBF3F8534C67D20BE6E3D07A889A90BAA493FC5E838EBC05F5AC59D7C499E433CB94683D4E507FD554B1AA62483C4D6C497FC8112B2945D24D5CD46B58C15BD0DA74ECA2B09BF52F8038E96A6624BAE25B83A4FE61CF3CA7954A61B1891830924D4103880F56B0CF21CE2D9819489B2DF7492DD32F315B74317BE1CEA5B63F1474B86EDDD0A3FF009A52AD4CEB320E939F9543694933662940E74E3C0F4C83D21499282544E45DBD1D9BB5F5E30AE2CCE138D377982E22A5A19C4592CB8B948042D0A4E5C4623DE396B9EBD5DEC7C47F87392B3A82E2F43ADFBD7BC3254D9921237777792E6BCEC39DFDB8E72ED4FF000B7DD16D66D5E298E0B92A77135ADD5A7899D5695183EE480788EB333A4E55DF7C39E3C184972E509E400000EAA076167F4FC46A36B848DE2EE0B1029997A598D6B9000B0CF9AF87DCE0DFC3CBDA9B6B764307BA2F6178F5CE18866C50B4A8FBACA4A816925293EF3B23203E157FC76D71B63672B1213F313291F5CC4FD5FC9DB78F90CF3E1166D9D3938C9414A3F4AC58B034D327AEA03738EEA6C5ED939B7F81E17B476166BB4188B2DB854A6FC39F7539C82275D395797BC6EA94A9D34B3073609A5E8CDA9BF7687DF291293BA15605B78FD5516EC4339E7AC648462372D5E165F6C2DCB64A4359122EBC44C2C1FF00BF00C8467E99554BC398E9585C6CB4A887DFC9812E68EF5A7BA44162F0895A14B4A4B170C4684D40B7DAFCA2C3C69FC736336A6C76D764AD0B4FA9D4AB14B1610A090D88412A691D51C4A12635F4F6CFC39F1961F0A8C3A77C02371AAD987E15FD8E341DA9B344D1312B4A54820D161C1BB16ABB1AE7C23A61BACDBAC076FF006558C5F0FB86BF98786D0BAB60B4788DBC984AC29092482A5856A79F6AFA6BF0CB6B6CFDA1B0A4E20EE1514A5CD08AB371CB36B5737E09E20913B0D8F3200795F5329AA033B1C8B74A335A336D9BD70F34D2DC6D293C2A0490414F0E4338E63EB1CABADE1E7618A3E86049B00199FD05FA031569A908DE0E09241BD6EFF9F6D1236E14B68294482641CF9490397A7CBAD3933124FD3514B446E2012694F633E3F68F1693A491DFAFDF9D369AB510C0916B58DB8D5B8F7A088E54B2E6BDCD7D214524FBA00CE0FE9D7CE95972D3BA3786F1D4D49CBD479F3894C3CC9611BAA351976E514F0A872FD7E95BFCB47FC476873F32528DEBCC57B9F48F0156A01E9A4E9F1158F952BFE09EC232F2FF00E447323ECF154AFF00F2F851F265FF00C13DA31FE987216FA073F7A7A47A41E11A73264FAE7F1E7CFC8D44E30CF4129964849B0141C853AFA110D664A04BB528F4A060D4E3CF5EEF2A4A330510414410510414410525F346F6EB1F7F76AE9C608F098127956E7EA4D33D79C10CEE13EFB5713EE3721439FBD9081E7AD359B294C585FECDEFD3382216F3FA0CE30EA892916370E003586EDD6A503DF281DFA5466255BB2A627FDC50BF43D2364075241B150B73A5FA472A372F7D69B4DBC6DEB5F1B0368CDDDEDA072F52D06EEDD368B7529F19CCF8A0A21327F29AF9A7F1E70B8A9FB7F13B8B213BCA60E6943F7D28C23B278713393B39265A8540606BDC7B6EE23653F9433785CC58B858B8414A0149E12E04C2071E5272034823977F1C6D0C1CC93882B9877B7555AB9BF2D687ED5116057CD9450877DE04B582732696E022B76C2F1A2A53178F31C6078ADB4E292DA80038613CF5939913234322CFB276C48C3C912E83E96233F3CE9CEB1B842A784AD602CCB3F4BD59E9467FC660BC327180E366DEE5A696D907FADC32F4F33C46739D7CB2CE6AB5E23DA32F13F3371218D2D4E24B52A6BD75787A84E2490A0B395892C45079675CE8E231DE3584C3AEB76EB25B0014970FBFEA4469CB98CAB9FA702A9BF586152C34737E072EF170D9B8A526484CC724D88A695E009F6CF161BB62E5BB854E70100C426675331D065AF6D7232A0C0947D4A0EF974C9FA92FCB48B0C89A16414921C3DF81197BD0985525B500A854C4729ED9F91F2F9D2BF2CA064C3BFA0896952C901414F7BD7CC73FB410DF43F015B25612DF4B9AD6872A3FB685144A033960D416E0D685836952530400064244FAE46905CBDE53D1858396F4B7B31877ABBF1850201D483E46B2943172DC2355390C3AF28A0A903224C8D634F4A581000A026BCC0E3EED0D56EFBB964D9B7AFF0051E05A39854FA476EFE797A56E2790C1879F330D57FC8FBC8452563903EBF7F7D4F30A029D4FA7E3FBAC494921494A7302BD3DF0786EB39475FD08A67301770D5D780FEBCE1E478D34B796A6D00929FCC6321D3BE7A691396B48250A5D69535FBFB2D094D9A9942B736E9091212EA9B70F841295A94E2F242781254428F2240CBAD653B3A64D5E75209ECE40FBD435E9947CDDA6896EE199DDC76ABF38C0EC398C6DBEF430C6B016DD461D83DC2C5EBCE85062E02C40F00A642A083C53CF95593058612E504AB87F63234198B1BC57F1FB553312A4A6EC5B8532AD33BDB578DFCC330765BBA60A4250D969B0B6FF00B8A92D804C72958273C8EB5226407253FEE6F629EEA1A2878D54C9B2D4564935B59AADD80BD2FC22EB7D3C2E148C8240CBD3CFE3D6B7F94B0C1A9CC96D32310B2B045453343DF4D0DF23EF330CDC4A95319CC46B94452E994A4B39A6A1C1CF3FEA9133280400E0E6F4AE62D7E3D6251949F051A640CE7D634EFF00AD3A4495302492F9BD8E61EFDB5BC47CF46F4D2CE0EA3F35D1A22EE96912241CE08E7E9A1E5DBB8AC4C589798A3DAB6D2DF885A4A0A540105DDED4D0FEBF316FE26F22D98F19638D2B07DD466A11AFD75EFCB2150D8C9A54F50F561E879BD4F0CA25A44B24A83170DC882F6D695CAD163DE5EB0B4832532600244F2898F2922797C6A78B49528872378DEA1AA0E6FD386994BCA410AA82D421813A9FDE87AC692FB5D6309B6B5D8EC259722F716BF49B6208E1E162ED953BC4467F9721DFD6A5A5ECF9A8C1266BFD206F1BEB47A53339DAE22E1B2E7265A260291F500C4F3B3836AF1ED7D9CB6291B3D67C4485B56160544FE551F05A2634E608131CA44D57A74C0B5996DF55452F9BDEBD472AC667ACB9600825C11C6AD9674666A56977C87DBBA6987FC2B6E063842CAC0F155C442473839CFA18D4D4263F19FE1B38600936626BAB0F5883C4052D4A3BC72A3D052B5BE7179A509C3D1F8F425A9F08AF879A5294492A19408CFCA62622A5BC3A9C5EDA9D2E561D4A495AC0A920D1474A1E5F7262255226294523799E86AD7CB857EDC63E5EFDA3C6C46F5FF8945ED85EE2B6D8B2EC6E6DD6EE1D66FB6FF82A670F4AC05347F292519E998E5AD7AE767F85B6DECDF074C33004C9C4CB054B5056F9DC538DD2455B3AD8D23A6F86B66A9787960A8EF245413624D7F5C4E423B41BB6DB1699B3C2F67B09B54DAE1F66C8650852381D012809C827DDD4035E5CF14E07153F18BC3209DE2A50705EDD6BD1F37D22E6BD82B9725539442830B9A8F20039EF6AD4C677B5C4829696C32EDCDF5AC96148405FFC827FAA75809C81D469558C2F84B6A22709A12B2C527783B1AEB99B695B88A76D532F09BC4A9225A87D6972E96A3A45B8FA69101B49BD4D8FD8FB7B9736871EC159C5EE9050BC29DB96D372A1051C0D30A3C45C283A7581CB2EEBE0AF0F6DB9D3244B419C3EA43BEF80CE3B5BD961144C5E3B0B30A93BC9176B3D439E6DD48A868CE9EC4EB6F1BC4F69F15C2ADF11B7C06F956EBC351788E148238FC75003DCE1528CA4A41F7609D32FAB9F077C37B5A4786B0C95CC50225A6E540D783717E46D48F3C78BF1D286D198037F22CCCF6A9D0F2E1DFA34DBF72B7D564D16C2D9FF00954660A48900467200CC4448E46BBB60F6763E4801531AC6E69C81D5F818A42A74A24CC6249C95566D07EF3E7170DB0FE8A40293DF3826615D32E9F3AB14842D29014A7A5483FD9075FDC339877944DC7BA7BF48A94839E52272E7F2D69D5086207322BEFA43428AEF1079353957EE6F09A9B5932263A67972D07DE758750A034CAA47D8FDB8C26A94A2CA49DD15BD6F971B7B68F381CEA7E7FA8AC12B218100EA493E4C2309973011F50E4CCFE515065CFF00B01DA4FED5A7FAAEFBE1DB43F985BE5CDFF926DA9F4DD68AC36A004904FAFED434D37507A56B956DFBE7A0DC2161AA1C73FC74E3092DB5CE4091CA34F9FDF2E54B0DD23EB1BC75F67DD21CA160065024EA0DBBDFAC3BAD613828820A20828820A208299FFF0013DFFC608A57F94FA7D453A47F11D7D4C10DDF8F060F323E4AAD5740A26D422BA0AB0FEA088CBB48B8B7C4D09125766F3601E7C6C2D1CB3F4F4EF5078D6DC5EBB8AFFF0012CF96BFD46E8A282B20473D3EF1CA8DD0DE59E13BDBDEEEEFDC4A2DF11B7BCC3DCB79012A712FA9CB85708D4FBAAD3FC47CF8F8D5289DAF8A2C1DD437855A86E74B3DF9D5E3AF787676EE0E4AB7C2420170F7E0D9FE6F48D9FB860F8E70F6D6129414124640C00A39F3333023ACE75E2BF10A77710B0E5B7A9A71E8DC6EEF16613F7C024558DF3F3152CD5E54115DEAC2565214141294891D426398D41CA399A819001994766CC039676D21C61C28252E0877B86A0A0FB7BBC03EEE7CBD3C865D796BA79CD36C7C8242980AB3B7953B0D29D21F4B99B94670E3B67EBA18B5F1148515AB2931A73119F7190F5F9D454A4196189001B83F6D6BFD44EE08EF252470BE57B83CC748C7F89B79AA67231979E7D7282477CF9450A5B549059D865D3F35C9E2D582965C51EDA3369E62FD2AF10215C038721CF3D73F514D262C176CDBC9AFDA2C9291F487A0F3E0DD83BC7BE2F74FDFAFD29AAD443005B3FEFDFDA139D2CD58B92DEA3200E86154BC024684E73198D7CC7D4FA51F30015F2B7AC611299357A7DCFE72FDB2A1D498EFE5FBD67E624D8BF01EDBCE02821CD0B778A090492343FB50169363D7286A45C5473A18F2B1F3124EAD9D0B79BC325214E49CF32EFE9053C97FFBB3D3FF00C8C3E904248245DEDD7DF48A1424A472CE7E54CE665D7ED0F45B2E968AADB1145ADF3768B489BC0BE124681A4C9CE39FAE47B56924172055FD06776FC5DDA23B184298B91B8ECD6CBBDDF3AF9E2FDEAED03F68DE178261DC49C476A9C5B36A10616916EE252EC419CD249C8491153F8697BC037F2B8E44E7F76F3CAAF8D55C062C1CBD45BB0F75148D98DCF6C261BB2781DB317ECB6AC64341DB979491E2294FFF005132A2388C255913A659F3A9995242432DE80114CEF6BE74ADDB8C5231F8A593FE92D3BA4B1292F66703B7AF33911A65E17EE3A82434954889394738E63C84F5D2B64A4A560D48EE0303964F0899E160214A0C457B5DD87BA50DA57C5F18970EA7231D801FA67DE69625CBFA70A46A1625A025352E74A76FC7482B216406A7BEB07CF660C4BBD5BD6B0A17B81A827A83DBA4651A7C7CE905E328500B3676E2D99BF3CA3225A96A7E447137AFAF017881BBB9009EA0664F7FA93DB4A6D327EF87D6E33A65C07AE50FE46195BD7714ED5F77F4316A5D5DF8CEDC34B3EE3404011C24913D73FD35CB3A63392A99517ADCD00C8367E5CE26E4481402E68E34177A587B61164A8B2EADE79F70356ECC9E251E1481AE73CA44E83A8EB4C7FC3330871987CB3A1E397DF211232A45992546C031A353DD7D639EBBD67D7BD2F686D8ED99C39E4DC613B26F5D3976E36AE26D25E652EA388891F99394F7E75318A5093B30CB269BA7D9CA83A71BB58F0D861F29D41880D6A662E4E678F2D63720E265F09C1DA02586DA68919710690903DEE7F96464749AA061C0998A2D72A24127BD85F2ABD68F0BAB084A416372D471C0B1B0D7FB89862CDD5A5B6C2C84AC852C4C0FE99E2D07FF0058F5D4532DB98054D4D03DADCE9906EE486B58C309D8437200A97A53B37AF36A4618F6AFDFD617B8CDCC6D1EDA5E5E21ABA187BD6F66CADC016A71C42ED814A4C12429409E1E7DEBA97C27D80A5E330EADD72E0B0150C7D915A986C30DF5292A0404B17670496B393668F92CF61ADACC5778DEDABB61B778FDCE1AE5C5DDE5C3DF8ABA5137696DCB77FC3971449108238794089022BDA7E295FF0087E0ED9F8647CEDE5CB9817BDFC28437CBCCD039E56BC593646397855A92E404B3659676E22DE71DC63BEDD9BDDA63785DA5B3D8A6D1ED0E2AF3E8B4C3B0F28BB0B712AE14B686810A3F98447EE2BCD5B3FC21336C6D641F96565732859DDF8FDAA6BCE2D98AF10FCBC210A5D02490E4B0605DEB90AD5C0B3E51BB7B0DB01ED2DBEAC3ACDCB2B3B0DDC6177A125C7F1B6EEB0AC7576EB208532A48292B2D994F2823BD7A63C3FF0003A66270B295330CC5490A7523AE61F87615A479EFC5FE33960CE32A689894A98896A06A49F537E2D6A08DE0DD77B0D6EE36510DE23B6C85EDCED428216F5D6D986B11B7F189926C94E242F873FEEE5C23CBBBF817E0A4AC362251561D0374B90A486A31D3A6768E398AF16CD52D43E6292836282CB15A3B71D33D408DE9D8ED91D9ED8FC391618261587616BE1E1FC3D830965A427904A52343EB9D7AD761EC846C6C1A30B2C04A4240205A8CCD4B0FC52299B5315FE5E21530A8A80620A8FD5C4E557A1034AE917531861656E3A552E3BA9CC9D343CF29FF007532E3511191276AC96194B64C90499F333400C19DF89821C5660828820A20828820A20828820A20828820A20828820A208299FF00F13DFF00C608A57F94FA7D453A47F11D7D4C10D5F696E363848100CCF998F9C7F8AC2E893EFDEB0432B5656D25E0EA924B808CB311075E472311E95078C1F4A8FF00E25FB1B7711BA54032732A04770FE91C96DFFE0EFEE7FDA7B01DE7BEA4DB6CEED638F358938825202D8B616F6FE31C91FF0022870CC939011957883E2FEC75CFDA1889A949DD724122E19CB71CEEFD63A3F87E624E1D290A04A5810E433D2CF99D286E7439AF13DAE690966F6D1C172E3C8438A6D83C6E04BC9050A201C804AA5463313A45786FC5D81323133090D53C29506F9B7957845FB0528CD6A64F517BBB6B4391EB4312D698BB6BB76CBCE78AE11C4A5A0F124CE704F54E87A10455264A82166A58DDED4A6BA1A166BEA5AC12F04B290A20D03B35BA70E459F9452E3E8733492274931965E5E5DF9E959C4CD4A839209019870E1C58E56E158D178662000CC6BAE64FE053B3C46DE2D01044891A9FA77AAFCC50249A804D2F6E96D5B9DE25F674B526EE4351EA471D453D78463EC56E5B0B5403AAB2006599E874CF974CF4A66B5BB8D7434CBCE8C7D88BAE0124848CDBB706777E9D9E2D371E0A515007BCE5A08EFD3F51AD3598B2976C98E8F6BFE338B0A65D057CBDF4BC781C49CC4C7A7EF4D973BEA05A87F593FDFD6135A0BB38A7DF8F6CA2A0F84E59769D7EA2B099848CB3BDEE6F58DD082C069ABD5EB483F129E7A7689FA9AC85105F5B8C8C6AB946FAF6F4A43943E8E111244EBD0796BCF4D7E228DF21C814BB54F6E6619CC940925883981D1B23C7FA8582B8A72D22B50A20867AF0A7584552D2A0D6EE59B3F7D697A4BA90A2933232F3A7D256A32C9B31BB90CC7DF484012956E0C9EAF5D7AF68590952F4103A9D3E5349AFF91E9E82174CC648FA8F427DE70DAE2DD01E6545A5AAE42FFA0E04CA120C05C9D47126440D29E61653A8646C0581777A59C5002C6ADC218E296774800126FC1DDA9F739906315ED8DBB877BDBBDBF7F0DBCB8C2F0372EC2D2D34572BB96D2949483EE901C92A3D3A9AB6E0F0C9012C32CF3C83EB91E19D22A58D9AC561C824170FA8B59AD4195728DEC43F6649716871370A6580A00001292DA7802A73900E731CC015349C2950752686D72D6E05BFB0E050D0312A4A17BA8AA5C977A5DCD8000BBF1AD9A1D7E2AD30EB72B79F6DD53D9210D2829633FEE1946B947CB2A49586A12D5D1980CAED4F2E1942682564862199C91F4D43D0C37174CB5EE292B4EAA055119FBD999E9E5E54CD69081BBBB9D0D39E5E94CF8C3C4CA5101ADA9D3B01F98A17895B2464B4ACFF00D5264FD3FDD24A2C0D5A85A1CA70EADDFE2E722D7AD5E8FEEB11CE62D6EB511C7C2AFF00A28C1196597CF49E7CAA1A7A8FCC56E96395487FCD3311272708B094967A685EE323CAC6910189620A6415FE1DF753AF1368919F33DB4131972CF5D10951D4826A732D5B86E54C9F4893912536DE4EF13FC49FAB27719EBA3748B22E71A4B2E29E55B5CBA2EA652DA24B013A97C4FBA2093DC024C53996904A5F3C856D77F22F1332F0C58170929AFD428AE01AE72FEE347BDA7BDA2B05D99B17B617642E5DC576BB14429969AC2D697BF04EAB206EC3678D0005C9C8C70ABA5384A10087506704B102859DBA44BE1F0EA5201DD6A5998E41F969AE9AE2BF65CD92DAED986714C6B6E6E2DAFB6AF1A71A798BA654B7434D15A95C2E2DCF7D2B0CAC2607F703CB2A8EF10CE929C3CC4E1BE67CB0004EFDC16FA9DAD5B3338E158B361B0FFE8A42B74BFF002045D886CB2E7EB1BCED5A06169BD1FF0022932B3A12633F9F3CB21D32AA16CD56F62DDDDCB8CCF16CF874348D9694B948CA8D91D1AEDA8F289CB472E9C4ADD688525F292C273E24041FEA8580722A12131AC8D79DBA7E193325870093BAC746350EF5A3B74AC46E211BAA2EC0203A9EC7787D246AC4579B8B3C7CF67F197DA3DE4E2988609B2F82E078FB9B16DB776E62AF5BDBBC6D4786DA5D4A9653FD3E10E26655D2626BD15F06F64E156B54D24A674BDCF928240DE2AFE54B939BB539C35972945082B295124B949A370EF6C8F111C3BF62BDFBEC56E9F7DB8BE33B4ECBB74C5E38DB4E2D80DAD2C061A5B4E0794B50093A83DC1ED3E93F15EC3C462F64E0E59412890956E8DD3FEF634147AFAEA61E61B08F34AD2D5ABE82C1E9DB4D1E3B84E6F77723B578BEEEF7B1B15895A3AE6CE623E2E2B62875855C137172CA130DB64E498515711194D33F875E0E48DAF2BE74820A56090A48D5C30B39E19B35210DB52CFF0089312E2A8527E922C4350D0BD69561CE3EBAF70DB7DB3BBD5DD7ECB6D8E149B276DEF70E61B6CAF855C0AB765B655C1C2602814E647388E95EFED93B1B052364CA5AA523784B00D038602D6637BDDB998F21F8A70937098DC44942E7195BE548517624B921474766190193C671B1B1612F2D2F22E2E9700B6ABA85B2D889FE9481034F38E74EF038CC1E1E794206E92CCCC18E6DCF955ED1CFF7267CC2A25543406DD0519B5FB44FB16A8528DC84F0B8AC80E402728E67B0CFE5562F9A99B5497196B5BF9E94EF1BA8104BDFDF285822E94A2A2A401C86632CE86CF4FBC6B0ED1C7C23C4E1E2E7C3A7CE8822AA20828820A20828820A20828820A20828820A20828820A2082738CF499E5FEE993FFA963DB837EF95608A57F94FA7D453B47F11D7D4C1142085028E9FBCFD7F5A260FA6B627DF2BDFA406BFA888C52E45937E202233EC3213CBEF5F481C6D88176367AB81FB1F6AC640048700D45F9C73BBDB4ED2D76F361312B25A02AE70961DBBB479A00BCD3AC82FB6904E69E371091035903BD79EFE20EC438944E9A52080959A8B9A8BEBD2DE7D23C37210501690EA5338B545DB3B3BF5E11CF0F65CDF33BBC0D8E7303BFC4D08DE661576F5A5DE0B70E91722D98BB5B2C28B0545DCED11C7310419D32AF9FF00F10F667CA9F3CEED5D54B70007DB3716B4762D8D854B254BFA521AAAB559AFA9B10E46A1A37AEDF13FC234DDBA894A9284F10320F1912A93D02A63E51A57009D30C85900589BDC70E8ECC43C5EE56CA0A961696622FA3B56F63DAA4C3F6F1B03FBB9EB3FB18E93A475A88C663C00CFFCAF534EE78548C9D9E911989D9E12545B30F6737E163C352D0CEEB1A4F1292173DE40F3E47BC6BF4A8F4CEF9A1C1770F7C8FBCFCE34C3CADD56EF2D72B657D0708B6EEEE7C624E5FAEB98F4F4E9A655A2945D81A70378B460259041160CF6FB50535AB3E7588570FBC40D01E53D8E7D629ACD986EE082FAB9E7C88EC45A2793603DE7F77FEE2A49040D3CBA5335ACB105DDE872CBED90A40A43D6C72391841C71295904E7974E9E63CAB644D094D5C9A75A9D7BFA438972FE9059DF5E19D6AC7AC51E2A3AFD3F7A0CD0C18ADF3ADBFB8C2E580E2E74BF937BE50FD820B608D0FAF4FBED419D57AF26A767AFAC32584B97EE687BF38916F9FA7EB58F9B5BAB3AE96D3DD28346AB4328B1E795C70F385916FE2282A241E71D32D63B659E5CEA4E4A8FCB0F6604F1D399D34615AD2227ACA66001F7AA4E8FE5EED12ECDB42047088D35FD8C759EFDAB604296F91D796919F9A1850726A8F3E5CFA43830DADA538DFB88564B23212759D6331FA8EB378196EA4B338F322F9E9C75CCC30C42C1DE2145D8167E1D6E1FAEB688DDE46CCE358A6CE9C5B654B4AC52D9A2B67F371F191970F067A8E46AF78291BC90401950799CB872BC5431B38296524907EAAD82AF50D7CDFF004D1687B3EEF2AEB11BCBBD97DE45EAF0FDA4B05F8776EDD385AB65A5454A60254EFBE47860033A9F4A9A4E1C10067AB301C1F83EADC338A96310A415AE5A4AC82084A43EF7D81E2236BAFC60CA6DB6ED1DB7BF4C8297ED141D20CCCF109D3B1FA5359F204B191E4C417B64DA9EA2F785306954E482A96B96CEE169637A900FA7586D70E36C8287997D694A07BEA124822609CE6328F86794C362250756F05240B1B71A5B2BE8EEFA4C61E46F91F2D52DC64554E1974CF4A345A78862D60C13E030F29CCFFB5249F841CFBC729E42A2672909A872D42FABB06E1C866F13987D9D38B29625EE8018241721858E8796BD2CF771F75DB85F8B6E80CC8CDB49FC5360092A76623ACF20338A40E18AD214452E08AE6F7AE7601F311292F03BAEADE50B50FF001391CDC83634F26318E76BF7B3B2DB2695AEE76C30D5BADE6AC1CDF2157EA3FF00F8D2C1CCAB4CBB839D6ABC3942410A1C52FEC53F1CE1DE170D28CC2932085021E62922B4A6E9CDBC9818D42DB3DFFED66F2EFAF365761AC6EF66F0F30DDCE2D7AD2ED6F2E90B0655873CD9217971054820020999CDB297B82A1AC090EEC5BFBD72A0113F87C1209AB2C38A1A80C459F8DF5F4B4367B7236585DDA717BC69FC6B14795E2DC6217094DC62EDB84F1152DC202928049009FEC1234A6EAC60466E32B3DABA9A1E1CC5DA611874A52280301A07D1A9973EB9C6CDECCE002D50C3885A5E48193A832328F74AB4949C95AC28543ED99BBF835281350DF8772C7B985C2D2964B860EE721A71EED1950A816020EA040FA4F2F38EDDEA9FB266286281BB28DCD454737ADDF8EB0D96B01C8AB8C83935E2DC2BF731459BB76A6DCB603F0ECB6A4C5C0949826550AE51A65196B15799939909FA98060EE003D79387EBC6184E5209DF512A77649AB90294A694BF3CE354BDB797816CFEE17783B4589E1D85E35F87C21C16CF620D26E0A16B6968570A9511EF473E5E95E8CF83B881FE66180A82A4872F67F66BF686A89DBC80427E58ABA2C29C2F6A9CCBC7E7F8AC6AD1EC4F69B1A699B7C314FE2B7B9211E0B251F8C7920339E7EECC8313957BE676C74E236326629D6528428331624034CEF4B5380A43A91B4A54A3BA4849CEC32E0C18937FB18CA1B078EED65FB89D9DD85B8C7D6BB94A9C5358629654E2DB05D48692DC924A802246B9F4A6FE1190946D64A9406F6FA5FA503FA35F94436DDDAF2BFC7584B541B1A73AE7ADAE35A7DC9FF00ADBEDEEE33B8CB0D89DE760BB45636D80A9E4E1F79B40C3EDBEF876E5C59E35BB214042424A63223AD7A802D6BD98128A3A0333F2E9E4794798BC61B411326CD015F5025CBB8EBC03F4BF3FA3AE1B90095A9B4A523DCE1273026049D328F2E5CE6A387C1E326E306EEF1651AF992E0706E79E714594A41BA779F2D3AFEAD5E5258738B72D92A7014AA4E4441D48CFE15D0F052E64B94913410B6ABBEBC7AC37C5A5299CA092E29D283F70FA9EC35828820A20828820A20828820A20828820A20828820A20828820A2084CAC82440807BFDFCBE349264952DF4B9CAD953D9E461354D4A5A84FAF4E5D22A90A919FDFC694002433DB33190B72CCD0D5B205C3A24C2635EE272F3A4674E64B641CBF5EDCB90B429761FD9FCC5ABB605430B79F4E41B4924692049CBEFAF3D61F1002D254E33E341CB4F5BDE8A22592450BB8B57BD3EF1CEDDEE5EBB77846D23B6D2E855A3C5E6DDCC02D34B29E103FB721C4491974CEB8F78C76A61F766E14A7EA00A5D403BEBEEC63AF7857045587429EA5AEEFA51C69C8691F3C9B1382EF176237B1B5DED03B349B9B809C4102E70BB1F11568A61A7576CE16D94C7BC1BE252A4FE6D6BC61E3FF000C2B68AA72E4AF7492A2082CF5E0E0F91CB9F6ED838340094CC01480CE15504BD3414636CF8C759F76BBFDD97DE66048C5EDEF9BB5C4DB4368BCC22E1C422F9A7A78172C0515005614AE7EE8122457963C43E119D83F9AA54D1F4924806B716B67714E0D48BFCA969420237286C52030622EF67A65967966BB0BF37C62D945D4A512A5A33427DD98528686328EBDB3AE2BB64CEC32D49DD2589A81C59B2A8BB67E51198E9297A86166199B1CF26F748A54F38B5A97242742093323DDD3BC1D33D33A4B03895995549078821C1BBBFA8E1C618CAD9E662B7D2C00A97762723CDAF5F48A937FC1F99975644E89D667CA7BFD73152482A591603B5C53DFAD22670F8732CEE82EFF006DEB30E3A08F42FC585A5B5A02B92844465E9DBAF2CA96183F98C4A921C9600B538E7F8E01E24501207D44150CB5E747CF4A1A9BC29C4842415109EC624EBE53DA951B18ACB99A91A024E94D05C545E8748092737F4E828DDA239E5A54EAA0C8E4797E9CF2E79D466270870E482A496D0BF7E2C7979C6C9C4EE108524B3163AB0E7AE659EB68F024AB3047DFDFDE751AB9A11A77A77F5FBC6DF337FEA0925F874E3A44B5A7FC694F3060FC7E3F4AD133F7D411BADAE473B1ECDCE8D9339EAFE4A6140ECDCAFA9F7AC4FDBD9B8E890A4671A98F3D7E35272B0A66241DE009C9C3679F6D6F58899D8E4A09705C8B916C867CB56CDE24D9B752141A50E229FEE198D0739F8FC0F3A723FD3FA0924E82C5B4B3FBCDE22E6CF4CC5EFB64398A7DFDBC4DB164E2C26074EDF1D79E87A9F83B9127E62812EC0E4FE6D97A437998842695D5EC73B71A44EB5847E2994B6F04F87A029FCD139E664663EE6ADBB3F0CC52EED537771C05F3047A8887C462D0EADD249346366E0D973CF4CA5B0FC25FB058432F2CDBA89E26D6A24C7602AE5833F2C00C28D931A67C7AF18839F342CA8AB76954DA8E00F32D66A8886DABDCF6C9ED9B4FBEE34BC2311B8482EE278725B62F5C291014E3B1C4AE180019D32E74F95B424CB05252E450167EE4DF4E0CE620A64DDC5804037DE0CD7B1B79E8D7731AFD8BEEEB7A7BB8E0FF00F02DA36F1465B595706D25D3CF4A78A4001B006432F9654CA66325CC2490CF9022957CF8FBCE1F499B2D49092CE4977E3A96D1F3D2CF0C93BC3F6810FA8E3183E0570C242415E1EC5CAD0B84804A4930731E951B3D6A9B41D2ED4356E9A6B5D626B048C3211BA120977DE663772C7ADAB4D22C4DB4DE3EF70B0B182ECF30D5C807DE7ED5E08E239CFBB2489988CA39D464CC395134B9C9DB5D072A7E62CB2264B003173CF875A575A4609BDC3FDA2B6F1A8C5F17B4D9AB57894A9CC11EBAB4C40A78A21C2A904C6424E4093AEB90B4C90CAE9DAB9B1A534787416822961951EFA7BD625365BD9C7F0D709BCDA0BBB8DA0BB510A55E62AB17373275295AC4CE7F28E8698E227CBB0FB70360DA5AAFA98732E720067D19D9FB0F76D699FB08DDE6138516D2CD9B4A2D8050EB8DA7C46CE521063204E59C6550F8898E5F4D73ED5341EEB12B271728252D7CC585697B3FBD62F746CC593A80A4ADDB77844AD82105E11925C3FDC00CBA807A45442D678BE4F6F51FBA1D0C3B5E3DE8908296FA8915D2963A69DE1FB762CDB302DD2CB4C944C2191C2DC927DE8EA7F32BA9EF4DF14AFF00230EB9207D6CCD9307C81EBC223D58E44B5EE83BC2EE6A4B9B7E05B5E292587418253C33966491FEF2E5FBD5691255B3E6FCE58700BBD09E5DF40FCE1413153599DCF1605F9B59BFAB4561DB8B45A96521FB55A7FA8D89516C9109244C244E797298CE9F61F6B1DA1351874214E54002DC6E3D96CE80422B94A2E09AE47DD072D0D59E386DFC4F76F36B37A5896CEFB2DEEDF137862FB4EEBF6F8E3985BCE78762CF1377091745A254D9532A504050FCDDB2AF6E7C06F076D09F3F0B8C4A52A09295044D7293CC58B33F2E05CC5E217B8E0A9DBEDAD1DF2A519E30C7B3C7F02DDCDECCBB61B4BBCFDA6DA8C79C7FC1BC7F0655DDBDD61E5E570BAE2576EEB67DC5384C89CC124E75EF79C572B00304B4A65CE284A775144D0370AF5376D229F8EDA0B913944294D56AD752D4E36CEEE5A3B3BBA7F635F65CD91C53086F03DD2ECA5B5C58F036D5E0C12CD172E848482A79C48F79440CF2CE67AC34F0FEC49F2F1E99EACD4EE4EB9171CB4B1AC53F6CEDB2A92A00AAC4104FE38971A67668ED0EEBF63F65F66F00B5B0D99D9DC1F03B4286FC3FE5D6A8B67084C157104E473F5835E88D9C52AC2225101F75A9996CFD4EB4B51F8A6D913311326CC0A356706C2AE19F8B8CF8465F72D564A0F88B2129FCA1592A00FCD3A904476FACB6130B2652B7CA06F5C1233D1C7B073886C295214525CB6649D2CDEFCA246C82C329E3E1933F97439EB9E7D7A5389C5256775F893C87BFBE9B4F52553094E801ED0F2928460A20828820A20828820A20828820A20828820A20828820A20828821056A7CCFD694979F4FBC3399975FB4548D4F97EA2915FF13D3D442C8FE43AFA1847861D7951AC69AE5D7F4A633BFDD425DB27A37EA16171971D22D9DB04716097794C20E5E87E3E54CA60FA59A8CAB0D787B787B21492A507AFD239D5E9E75CAFA472EB7B6BBE385ED5B587AC2568C3AFFC4CD420AAD9EE09033C8C46933A19AE35E35D94162762022A012EC3425FA51A3B078627844896934219A9EFC99AB1CC8F676DA96362771B8E63BB5364C62BC18BDE5A5F5B38DF8CE94DEE2EFDB347857D0382267B682BC51F11B6EE23662E7A5256129DE176D6B43D7A5C10F1D8B63E24290900B12DC496E1AD3D6CF0E778DB8CC1300C291BC4D86DA156C762375E15CDC5AE27749B1C3AE9774525A43086C4AF3720A4CFBC40D4D795F69788317B4F12A940AD414A20DCDDED56D795ED176978BDD4B29C8206EB64DABB172386958C6569ED8988EE871CC3776BBC9C3F16B5771542B87692C9A28B171B6DB0E871376EAB3494119E9D349A9BD8FF000E311E2097F35525DEBBA524294EF402C7CFEF11B8BC4826F40ED63CCB0D5E835E51B3FB31ED35BA5C4F0AB6759DE560092EF11F0B10C559178933987532633C93CB21DEB5C7FC1FC7E16614CB90A005BE9200A3E94E361A18464ED34246EEF3330A1153F67AD5BA5232059EF9362EFC8559EDAE07700E858C41B50D01E44E4476CFE134EDA3E01DAB8376953A8F6490E43816FEBBC48C8DA2852AA439156F215FDB9D1AB78611B4985E2EB439678CBF76E3874B57D2B615063DC00C9D33E53CCD50B696CDDB382DE644EFA49228A661CAE683AB718939535332C5ECC4D0FE7F65B38BC6E6CDE5301C7AE2E186C8FCEEAB875EA488FAE5F1AA4E2B696DB90B2DF3C373671A0ADF5A01D2AF658429802951B109A90E730DF6B68F0CEDDE436DA52DBFF8842491E2F105CE706543A69A11232AC61F6963A78FF5FE6151615243EAE3CF3F485BFC32A62D4C81E37F2CC919DA245BBAEE4E9CE09F5EB0465D674A9EC2A04D00AE845F79A94CC1737E40E9AB84E10243333D8E5F625FD4F794B5B900A3B4FC01FB8FAE469DCC952A5A77814BD2BA7B6B0A528D688EC561D92A2D4670DFBAF0F4BC5E36174084EBDFD7EFAE91D05444EDA8B904849342C188D3F54AE7567AD3F1D288DE167E67F75356191AD691775921B79285989333A671CBEFA73CEA5B073D7894256A241CCD8F3AF4BF9443952852C479FBD738BB6C996C464339EFDB3FAEBD39558F06A4A4D4D465626B4ABBE9F9CA22B153164DCB0A96E56ADCD7D22E4610D04241E181F18D403E67D0FA656BC1CE09DDBDBB3FE69CB8C424D52C28FF003FAADC3BDAFAFAD651A4B320C8111AE8341A8D3F69E756191884EE9750B52CEF9BB1B574E10C56A5870778B7FB8DEAC6F415B5DBBC392B4B44919B640D73072198ED9FF98A8FC56206FBBD0DD9AB4D7AD75A50445CD2A54C04B5097E595EAF5AFB30C2EACAD710052BE132208CBB46BF0133CFA014DD3880A7751072AF4D791BEBC21CC85949FAADC457DF4AD9D9E229DC26D6DDA36E8F0804CE47501464E5DC9903ECE4CF2186F31ADC9EBE599EF4898C3E24029290ABE55CF4FBF18B2F11D9DB77D4726733DA3BEB1ACFF9CE813C1A953E95D1F537D183DD844D49C45C8DECB831D73D2B9768861B3987B29085B6D29C4CCC0067B826397A10353A963397BEAF7DBA655A5A1F2318C0024B97AFB6A37EA1B39845B2092DB423B247307EF99CB28A6335EA2A79E97CAD5CB4AB34394625D4050BEB56E373DA1839837192EA5B0907310348EA0FEC7E951F312E906A497A135D0E55E5487D2F12919E54073E601CBDBC47396FE04C1397FDA728F5CC69CBD3234CD5289C800E5AEF77CC77870310F7722C5BCF33DA235D471B8489F41F03FBF79A48A04A49530E3A9F21D6374C833485901813C9C9662C1EBEEA4C51E17FF6EF97DC5203069DA0B1299CA8814142E6D636CF31CDDA464832C0A800543D2ADED87DAF83B7FF00BD5C3774BBBAC7B1CB87026FD4CA6D70EB30522EAFEEAEC9B767F0ADC85381A75C429C23348CF235D93C05F0A4E3B112270C3B82524326CC41AFBF3610DB178C4A105EE1D99FFA1F637223497D93F702E5AE258A6F877ACDAB13DE06DCBFF8CB87AE41791B34C30B51C3D36EA7878B686EED56DA5609FEA1194F3FA23F0C7C2C3C3F8792A52370212059AC2971426FEE951C76D015FA99DFB54D39C74556D2BF0EC052022324A522070A7241CCC6691396B3975AE9B8D299D8B0B4DB53A5AEFAEAF9DF3A76D09E263A81241A35C9C9DAFE77AB9CEECD8E6BFF00E6ECE468E0D27A8CB2E79FCC9CEAD3B2100292482F4AD0E9735D08E3D4C50F6AAC90A25D8851F7D2F4A9B523A5FB12230CB11C837A8CF90CBE1F1F4AE95B3EC19C30CE85EBE9AC51316B652C3D1ADAF21958916BC64958800F248F5FBFBF2B0A1B74019522292A1BCFA1A8E632852D7FE14FAFD6933736E96E9082FF0091E9E821C56235828820A20828820A20828820A20828820A20828820A20828820A208415A9F33F5A525E7D3EF0CE665D7ED152353E5FA8A457FC4F4F510B23F90EBE863D52638CC0CE3CF2EB4CA6921EB666E0ED0B45B1B440DD61D7368810B75042547F28273127E1CE99CC202483983E4CF0E2424858551A94ABD639E5B7FB2EE5AE2D8E5AE22522CDF4F8772A689CD0F20A722A81A28820CF58D6A87E244A67E1E6CA672A0459FA51F3D2F5238F43D858AF96948DE619134CEDFB23CA3827ED7B816F1B703B67865DECC5AAF1ADCE63B89B3738A58D925DB8BA67C1B969D256DA21848F1D4A32AE93135E40F1F7C3CC46D9993B76593BE4D4268D5CF4EB7E21E3ABEC6C76E9402A3955CD6FC38BFEAD6D7B69FB55619B63B05B0581EEE302C7717C6DF5E181EC2F0BB64BE2D976CF5A150BA65A3C48E20954C89C89E55C9367FC12C4271816BC3D029C9DDAE76A5B2E758BCA71DF403BC59867C087F3F2A868DA1D97DC15EEFAB0CD99DE76F4367DA699B2B0B3186E0AF5A94AC45B32CBE9BD61E04428A791191322BD25E0DF87B87D9E895F3248FA4016AF1CB8B7F548DC563F75249512E0D9B8919BF71C5818C9B8B7B296E5F1B2BBB1B178260EFAD08416F09B0B761A4290908E3402990E28895AB9A89922BA54EF046C89E9DE992251240A1482C4B5DE9E561C43D7266D35A6690925B30D46B57DD39C623C6FD88B622ECACE1BB47B4F8324CC270DBB6984A7A00026321EBD339AA5ED7F865B271214061E4D41B203D7855DFDE913184DA0490E4D6FD18F43AF78C4989FB136F1709BB7AE7767BEADB5C3EED9016C338FED03AD614A58121280CA41827256999EE2B926DBF82DB3F129294E1651A963B81F3BD2A38D7C8BDB3058F620EF03931CDC67D2D50DD22DE6F799ED7FECF771C1BC7C393BC6D9DB7242AE7056AFB15716D27995BC420A881993D0F399E5FB4BFE9EF0F396B50C2A2D40101ADA6EBBD0B70B459B0D8A964B8201615058D879DFB50B5636DB735ED6FBBEDEB5BB0C3C95EC863A6517382E301BB1B86169240058E22A495C710CB30418AE29E27F8313365CD98518764A49A25059874ABBBF37E0D60C2CF46EA4156FB13FC8826B9BBBBFE9E3692C71766F57C2CF8859569723FE050D4292B920883D79FA8E11E22D9188D8AA9837149092C0976001ABD9F5AF9801DF2A64B525C0045C01573DBCB2A6B5996F14B761E0CF18700221C410A6D5397BA474D3B9D473AE74BDB334CEF92545AD7FB3DDF952D686388489B294424A5C588EBD2AFA54D327BE30ABD6DEE11C611A415981F1CB9EBCF2CF5A9FD9FB317B4589058FD5514399E2E48B53F351C7E15552524EACEE6F61C2FA3B6822F9B47168E101E41E8127AF31F2CC48F2E73E30A7027E530200C8D2B5D3F37D1A2AF3E490B2C9525EAC47BE1EC345D56778E048F789D34267F5D3B4C65E54F30F34EF3B86A3DA94E957074D2D11B3A4B92E90C5AEEDA65ADB43CDE25D1882A47BC124E441CA23D7591AF79ED53D87C504DCF177FDBF0639758879F214092C487C85B43C3F1E724DDEAD4212B132273F2CC73F3CA338A94958C02E68D9E8C0E9E54600C464C96A3BCC09CB80A6B4E1971B44AAF106CDAA5A85174482A0070FA199F3CF5E8669ACEC63AC8717CECDD48BEBC4F3860708B528A98805D8313D5C0F2FB4465BDCDC34E95A9529998075F4E5F2A47FCCD19C35496EDECB768593875020949A7FE26BCE9FD4387EF90E38A570E662720740074FAFCA8FF2CD5CD7A7A5CF06E7587D26514A47D2435836AEEF4E3C3B34352FB2AD5B9F41F3F8655918C04583E7FA76F46CA1D252B702A3913E4DE7C2211F682EE56BE121063DD034CB9448F43D474A513337C02146B93FB7F487282ACC1E7CB81FB6799BC2CDAAC513E234E11CE123303CC83F5D73E95BFD2D577CD9ADF9FEF846CA3382BE921F8BD2DCEED71F8641E530EF1065B2949D0A840F5EBAF98AD7E48517B067EA74BF11C98B6AF6419C024AC826B6726E496F2ED945A18A5A49E3F11B4E44813CCF58CC72E9D6B070C9AD3CF37D1B23AF0AE920998B7018876EBC98D47166BF216AB64ADE79A8E14B31C4F1C9A3C59A615CCFEB505B424CCAA520B0D38B66D9E9956D13D879A99720155D87D39E76F77EF1686DAEDBE05B01805EED1ED2DC270FC3ECDB538953EB4B46E826470DB9564B512008EA40A9FF0006EC79F8AC7C92A42F777C646B517FDF0E2219E231E84950DF7DD150F6719F6AE9A8CF99780BBB4BED81BF2B0DAF7AD9DB6DD2EC7DC3BFFE3F8462485A138AF8882DDCBB88319B0F165F6FC5B4524E47849AFA4DF09FC3587978590A99280FA126A90F4029E85B2F28AA63F6928957D74AD03FEC6BA1CDEF1D14B6C26D10B7B05C3385AC3184B097DFBD01372F78094942429320A1A52785B06084848CF5AEDFB4D48C048DD943758300037B033F5CA2AD89C5AA6A8BABB1E7D746E05E913CFB8D396AD3AC92B687B80EA4F8709398E597EC2B5D91BD8A4852C0E04DCD79B53F0E2A223D73094A9E8189B9F6FD9FAC5F3BBEC31FC4715B6798294A50B1C5C5209CC1E5AE433D4E626BA36CAC391BA7938E0F677E40DABC6299B594EA5358D40AD181E1EC115B08E92EC8D83ACE1966B52870844473919139FDF99ABDE0E584A4166E038801AEC6D4D2DC2287895A4A94337A12ECCF97AD59B8C5F0A525488FEE20CF4D7CFE952454539D2AE333A74D7D888D0A2093AE4D4F7EF575ADC10D007A9D3CEB20B807580972E7385AB318828820A20828820A20828820A20828820A20828820A20828820A208415A9F33F5A525E7D3EF0CE665D7ED152353E5FA8A457FC4F4F510B23F90EBE862971D482519CFC3F63EB4C66FF00BA9A7DABEF585D201501AD7A0BC473F6A5E049E9CF33F7F4F432CE6074B9205C578C3A42802C680B5B87BBEB1AEBBD3D8543E9BEBF21C7137A905411986BC311247298D67F4AAB63702B9B38923E9341D8DE97E97A50B189AC0E33717BA19810D4E5A3BD4D7F348D16DA5D90C1F16B6BBD9FDA2C16C31CC31055EEDDDBA6E5C4024A8F0858E1064444E446424547AB64E15559A849A33103D68C7EDD0C74DD8D8B2A4A54E7A1E77007DAE6312ECE6E8F74183624F5CE1BBBAC35772957126F2E30B6086D59E6870094F0E83908D795339FB3B65C9FA932D00B6807F4E7C9B48BC4AC613280DE34B826C3977CB5B464271F7025586E1E52A62021BB56B3619198090819240CB4D48911A88F5AA44B27E5002E404B060D60DCB534AD5DC4663316A7FE4C2AC41B5E9CF216111CAC39FB64969F480E0FCC120C0E2322273D0E63581E555BC66D0C50584A0AC26AF520355BBD7CC4478529642AA756CEDF7CEBC6E5A21FB6F7A232CFD3E47D3A7C61B2319895FF0032B2FCEE6F4E27A7189492B54B00B9CEF7716EB51E9AC4270076E96CDD24861A23C328D64E66493D73F29E722B6F98A5B15A49702E0DA9CE822670B8FDCFF71F3670CC2D473EAF156321BBCB33875CD9E1D7387A870A85CA389CE1E73CBAE67D295DC94B4D51C983BBE5D470E71352B6CEE007798F0E81A97CAC5F9C68B6FBBD92361B6FD6BC4F64F13BFD92DAA92EB177B36F3763FD64C293F8F5A015F04800091913A646A8FE23F0DE13684B984CB495149674826D6B711C6F13185DBF91517CB30CD5D0F1B75AB4604C037DFBE5F664BE636237A9855F6D8ECB29618636970365FBE5DB320E4E62376EC368805324468ACA6BC7BF113E144CC67CF5489143BCCC9E6E5EB4AC59F05B5B7C004BBD5C105DEBDDF5E79D3A49B9FDE0EC4EF4B08B6BDC03686C3104B88E316F6F72DB974DA880A5B6E25130B42A52A1C8823B5793F6CFC2BC5E027AA6192432892774E5C481C75AB919C4F8C4054A71A33F6D3F7CB5CC76EFDBB37AA6D97DEF1983932FAB2544689D4E4397999CA9AE0D32B633226B0DDA1DE6D08FC30343965092F0C569214012450E8E28D90A0BBEB58B818DA3BB5DC00FA030B100B69052948190201D02B224EBDE69AE37152F1538AD0CC49B72F6FAD2948ACE236780ADD04AC027EA2C7D916AF570232560D8C21C424A97079927FD03D23CA3A53742B749AB3E7EFDBC4462B6791FC53958D5F4F36BF578B9D2EB6F283895E47BC67E59F6C892234D69EA66669533DEB7F38879B8577494D4065532E596773969126C148CC39E8159E9D20C680FFAA709C492C0A83F7EAEEF9F4B8B4464CC1A41FE1C5EC2FC73E34AE50AAEF434A28E398CCE7073EF041A426E21492594FF00D0A7BF468DD18305208043EA1FEDA367D228FE663A9FFF00D87ED487F94BD4F61F98DBFC2F7BBFA8ABF19C598224EA0AA08F9FC7215B7F9254010A19BBB7979F58CFF86902A97D4D07D87BBC1F8A13AE7A73FACE959FF2A9BA5EA6E0866F2039D5B9C63FC66760903437F207D4748709B849410A201391279687F5FF00753585585CBE2337F64E55D73C86BFE3A82AD4C9AA3ADCBE7C21A3972D0D60CF5F58D481F5E5D2A4A4A42981E6065D69AFAE90AA30EA51277496CDAE03707CDA20EF318650A5B08202D319E5CC48CB3CFF005D69F252281B8659F67F2A5290FA561CA40510CF4622D5CADA58D62D5BCBC6A49B8B94A1339852C800753F0EB9D394480B60A0CDFEE6615B548ABF67A43F461CD4B127219EBA7A03C1EB18C76DF791B21B1F85DE6338AE316D6CCE0CD974599B8421EC51C5025B6DA41203C50B0124488E2EF3574D89E085ED7095097BC090FF004B923B7DBCA19E2B1424A424BBFD5AB27CF2BD29EB1CFF0052F6E3DB476A8DFE32DDE6CC6EB706B8219B05872D177ED255C33E1AA597015B61407454F6AEFDE0EF849364AE54F121AC689FA4336A38393E6CF153C5E3021240512493BCA37CDB78FE7AC6F66CCECDECB6C16CF58601B1986B768D59365B2E25A4216B5180A52CA009E23267299AF54F86F672F644A952CA5B7404D29976E1DDC18AE4DC495AEAA2CF99ABB73FD680677731656D7366B75C3E0BCA12E1C84EA79E672D663F5AB6CFD9EBDA83751BCA243E6F9643C867935A044A2B2491AB7B66B0605EFC8C37B5B668B0DDA30A2B6D2A30A104925524C9EB9919FD26A5766ECB3834A65AD0410F96BA599EC2FE6D0C718D2DD35000A92EFF0070FC5B5A0631B29BA6D9C21E65C08C8A92743D729F203F6ABCECD96C94D2A72CC8143CFDD6B145DAAB7DE2E5FA7A5FCAFC6379F0867F0F87B0D10470A743DE0F3E5570C3A5887B1D2F62FC2F147C5CC725AEECF7D0FA5B2CB9C9D2B3087352DC72F3E5EE911BF32AC547B96F7AE435876CFE41E66B32CDEB4A379C2E92E906FC7AC2B4A46D0510414410510414410510414410510414410510414410510414410929064C6739D6E9504BBBD5BEF0D972D459859F5E1C22A4248249F2A4D41C11EEF0A24177666D61B2D8714E958238491A93947DE7F72D664A529D9FFAB37BFD2C181048B438E0CB5CFE5FBD22AC312962F93D3AE61BCE3255F56F0E8FDA2D3C76DEE31143F60865A29527878DD4CFE607F29194C76CA0674CE7210414EE90A66A8B355DFF00BABE4D0F30E374098A5115B3DF2B75B3DF48D29DE7EE81EC25F7313B2BDBC05C5296FB2870F8644CC25206801391CF3CEAA3B4B0F88FAF71442AC0825DAE486D1DB3B6B7BEEC9DA0896849B80CE3CA9FAE51AF97187B56F76B45BBD7EC37925C4BEAE149207BD09034267A73354DC4E0F686FD56A524E44927370030E2ED7ED17295B5D0B48029C2DBDA1E35E0DC6AF093682CBC1AC398694167FAAFF0FF0057A92950E799D40A4D3266A48DFD5944F503476E35BC626CF135254D52CEF6B86D5FBD7842F7987AC2D50A5A814A4F13C6564902412390CE04E4075A96C3E0B0CB4BAD0144DAC7B07FBE79D214958A44A001EF7B5455F9BE82916EDCD9A9274D394FFACB9E91D795666E1306827FD31FFD23ECF9D3DD1C231C951228C0F56767F23DDD806868E58DB78056DA26E553C5C63DC1D2329D2751F2A8D9D2A42086450568056CC2EFDFC9E1EA26850749619B96ECC6BCFCAB4B3EFF000643CA2A76E6E1067F2B4A1C1E5A1F8CEA08A62B54AC9200B3066B655A7439584384A966DDEAFE54F2D22199C2D9B275D5B4DA145407BEB48F117023DF235E824F59E95193247CD984DD2694B75F36CB430FB0F2E71008530D41208FB65E94D6CFDB0D93C236B70CB8C2717C2AC1FB6B84942C964294A4AA66788473F3C8F794311B0B098992A1364824E7BA33E80B3EA79E462D380C61925017500D49B65573FA191168D19DB3F664DBFDD29736E7D9B719698C5D6A5DCDF6CCE22FB89C2D0106786D2CED42540B89E22A0755281CF2AE29E32F86F83C7CB9BB92424A829B71201CFB777148B8E1F6E484240500695736CC5DBB6515EEC3DB771CB1C5D8D94DFCEC662FB2DB40DAC30EED13160BB2C0F891092EAAEAE55C45110AE2CCF9675E33F1B7C0ADB7899D357835AD287247F3720540A03A6B1292FC418520B8B86000147A1CECCFA3BDF4E87ECB6F036476B9B6DFD9CDA2B1DA16D684B89BBC3EE9174DBB29E2284AD33C4A6F342C7250E935C3319E12DABB0712AC0E2513173525B7D94451FD68DCDB81504F933C6FA0009360CDC0F2AF5CF9647C331B5292A952AD4A084FFF0022513248919E607603CF952A36362C23795296903FE40D7859FA13F686CB4058CB872396777E2F1778C6EF2D582B0A53EDA38214DF110BE331EEE70424913032F95436254BC2A94952542D71A6648E1D6D9444CDC1A4A8FD22AE48D3BB68F9B70222455B4D756C9694B0E2D4E09094495088D472F21D472AD64CD334B82C4317D35AB9B4305ECF0A2E052EF60EE7DDFBC4BDBED236FB4DADD65EF19C305B09F78198CC6713FE69962B1E64CD2820AAA6B46F7A9D78C339929129450A42891983FB1A8A5EF12C9BE44A78DB75949FEE713C20749E629346D12A3541166B55FA1B76E302512D401092736724F6730E1FBE6ED9A0E825E4A808F07DE27CCCFF00A83953C9334AD8258BDA9DEC5DE3099466160821B23CEC18D73FCC26CE32DBA9E2216D000E4E0E1518EC7F61F0A9093835CC75070EE4795EB5E59F3853FC298EC03926A2EC28ED5157340417F2886BBDA74A2E0B6DA1F7018014D00A403CE6397FB3AD49499A70E7E5EE289CC81D3BF377A55E1F4AD90552C15EE8A5CDFABE61F9579C20F63C86C02E3E1B075E3504F0889CE63A7CBD44D6096B9AB4B2147A6668E7FAA1CA30766194EE46EB3029A3D5BCEB9FDE31DED7EF0B67F6612710C4710694CB82438DBA928102082547AC0D27D6AF9B23C3789C79425093BCA6BF16CAFC0FE03422BDC94EF5E7FD30CEBEC6986F43DA1DAC5AF11846C65CBD7F7B70781A4D9AFC585188E2E054E848FBCBA76CCF851B4F18942805004A49B8A38B822A1E1B2B69C9942A0588BB3B38BE64F4BDF45F6437138D6F1D386637BDABEBC6ED2CD65FB0C2AD5C5254F052B8E31261E1EF24C24B607F6933CABD3DE01F86E76761651C4A0129097701E9AB8AD341776CC45076C6DB96310A4805AAC435DAEF903C637170BC1B07C22D6DACF0CB0670CB5B3425B6AD6C5B4B2C3C94A42429E424C29440E23A1E23AC57A2B65E070182C3A50A949DE48000DD1F8C9F26EB157C4635539F7598DFBF3E4FAC5C4EB4979A42AC98436B392894F0A0C18CA3393CCE93DA92C64844D98552C6E8B06B3741DBEC6B08494294A05F788B3126EEC39D756BC0F5BA516E52B0B0A508514446B999CFB919139CE862AC7B0F1387C26EFCF402F4767A5466D6FC67589CC3A928B9761504D6DC789CB8D5CD54D9FB12ABB6DA652B5238F20449CC826791F9F7CAAD8AC08DA2A4CF900250A62C030B72F75393C5736B632589AABD99BA72A37168DE9DD6E0AB432C2D480880932444E5241FDF3ED52985D9AB92A00D599F5176D03DCF1245EF147DA0B4A8296429839005CBD3D7CB2358D9069B21090001023A72FF00433A99972F728A72DA9AFA51F93DF58A5E2120BA83821C56BAF2A7B1A429C0AEC3EFB4D0B46F5B30C7DD623D72F7AD9DEBC5E1CB7926398D7F4F80115B253B800E17D7DFEF38712C86DD1FED1EFC88852B68520A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828821A3EE34D92A2015467D48F989F81A6B324EF0248008CF5EDA5EB61942885FF00B4AA8198136BF6EBD22D6C5B0BB5C6D05B7DA42873E248394F2907A673FA9062713852A72433D2999B657F76A9895C262BE4021C90C0DECF90CDB80F28D76DE1EE5517CCDC5CE16D842CA491C020C81D00EBD0EB2222A0F13B394E0B2800EF43404D9F2B795227F09B5104805401C876A5EDCDB5AC6B35AECF5EECFDF2ED2F6DD6485405291F3CC8F3923E7509336792A50DD37BB54BE4697E7A44E236900032AFFED2E74ADAB9D9B5176892BFC33C5714B4A40040CA34C88F4F88CF5CE95460FE5A40666A3B1EA3856E087B16A557FF00304C6DD37CC963636AD9F969AC5AB79849930939EB9798CBAC4D369D215BA4B07197AB73EC61DC89C01363625EF4A9A9A38D74B59C413F61C1C49888EB9779EDDB3EF50F89C392E4675E56B7323C985E26E4CF70327B686EFF00AE15E56D5E589E239489CB43CF97AF3FD62A24C9625C647A6B968CCF7E31252A7848157D2A19C5387463E8D10AEE1DC4147864C667E323423EF2D49A66A5EE2C0341A350DA8783FDEB133879E0241DE07870B3533FC86CA21DFC3553A13E59FC2048CFFCE993B4AF7D208343D9F90F7A43D4625259E95701E8E3813A674842D2D9D6DF5B686020019BCB494A5723FEDA98CBAC75E9178DC399885101DC663EC6E3FA6178749C502A636C8022A5AAFEA22C5DB5DD5EC06D9A56CED7ECD5AE22873253CDD9B6EB99F3E258D4E93D7AE7547C76C654D52814BBB801A95A58FBEB50EC62B46073770C39E7C9B5D2358769BD8D5FC18DEED1EE5B6E719D92D176381BF889B2C2D970020A516D6E9C92E2C4AA224CE872AE7F8DF84382DAF89562A74894B98A2FF5A6A5854971D6834ADA2C982C7A53280DE6200706C5ED9F5357E04C60C637ABEDA5B98C69CC3F783B1B866D6EC55BF1A9CC6707B0BEBEBF36EDA54BF13C77086F88849CC889CF28AAEEDDF83982C3E194538745029BE9E1614AD39D2B7A449C9C626630B3B333E75FC3FDE919A775DFC477737B73776DB34E626E6038A61EA71AC52C318798B7B9B67944801D6B8A5292B04A246600033AF2A78F3E1A623040E213865224CC2AF953770842F74B16362D6247F6FE5044C53392736233B5FF0059E85B6C70DDFE6EE31265E36BB6DB3EAB87024DAA1EC41A0662600067211315C50F8731B266EE2028024D81D73A73CFCEB1228C0254086C9ACE03F215EF9D844B61BBD1C2AF8AD4D63D87B970DE65DB7B90A61433238153C80131A6A3A53F95E1433803350EB3A8E3FDD2EE6174F86D33C0594824D4E9E60FBB6717261BBCC43C1DF1F1266EDB6B3E169E0BC87627B453A1E0EA809964D724BB771EEB01F0DA10092814B960FED8449FFEE8E10E5AB6E1BB2C34A2A002969470C18248073CFBE94FA4783E72082892A615FE2FDAD715E26819A103B225A0BEE80012C5AEC73B8D323CA23717DEAECDD8E1EBB84E2C2E16904F84D3E9528F6893AE63B7ACD494BF0D62890912D49721C37767EF9706784FFC244B56FB208A31A6F646BE74AF58C4B79ED47B2B84D8285CA5EF1D5E22521213E285490264F32411D6262BA56C6F86EBC6E1D334C92544554525CB90F56EA78E60444E2F172A42C85123402A939D6AD4CF2B5B2C2D896FF76C31E7DC6B64306C43145BE48652F30B7904AA40808327CBE9575D9BF0B5689809901A87F8E8796A2B1098BDA89DD2029935B1F79BD9DF5156A309DC7EF7F7C0EA5FDE25F39B2981CF1A2DEDDC7ACDC08992149765209232EB273CCD764F0D7C3F32572CFC948008B2780D00C868DEB157C5ED10EE54C0BBD682E00CAF616A9E91B47BBADC2EEFF621808C3B0CFE6F7AC0138BDD32D3EB0B4C92B0FA6089339E672CC577ED87E14F952D2E9600682ACD4B5816FB457311B40289216F53C5891EDB96869995A64786385C0B0320419000C824764881A888F4AB72657F88D2AC2D4A12C3A31A55FF005159C54BF9EB52C3D3B8D6A59EDCA14F00F5F4E7F18229CA092A152473A5453843032FE5922BD7F1D7F1136D5E356B668429292A1324F39396BAEA0F202A4E4E154B1715A37AB5383119D3284FFCA1243B81773A5FCECFFDB1685CC4D7C2DB5C5240809D2644EBA9E43A72815252B66294A02C4B1A5AF5E43A8A645E3076ACBFF9E55AF36CAC3A3F08D8CDDB6EE55768B5BC799E10A2492A4F43DFF4CEBA1EC89224E1820DC5B4BD5C9D39E715CC6E3133662D64B019937BB8A3DCF1E91B8582E0B6D84DA2128400A4A7A69FAE675F96553491BA092CEDD3DDACFC0D62A98BC52A7ACA45100B30CF9F0F662E2617C6DF144493F414992E49D622E7A774A83BD8F7685AB10C141945BDD21540CBCCFDFEB446C8CFA7BF48AE88520A20828820A20828820A20828820A208FFD9, '1', '2021-10-06 01:13:41', '1', '2021-10-06 01:13:41', b'0', 0); -INSERT INTO `inf_file` VALUES ('7e7ed694-2242-46cf-9ac9-0709debcc22f', 'jpg', 0xFFD8FFE000104A46494600010100000100010000FFE202284943435F50524F46494C450001010000021800000000021000006D6E74725247422058595A2000000000000000000000000061637370000000000000000000000000000000000000000000000000000000010000F6D6000100000000D32D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000964657363000000F0000000747258595A00000164000000146758595A00000178000000146258595A0000018C0000001472545243000001A00000002867545243000001A00000002862545243000001A00000002877747074000001C80000001463707274000001DC0000003C6D6C756300000000000000010000000C656E5553000000580000001C0073005200470042000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000058595A200000000000006FA2000038F50000039058595A2000000000000062990000B785000018DA58595A2000000000000024A000000F840000B6CF706172610000000000040000000266660000F2A700000D59000013D000000A5B000000000000000058595A20000000000000F6D6000100000000D32D6D6C756300000000000000010000000C656E5553000000200000001C0047006F006F0067006C006500200049006E0063002E00200032003000310036FFDB00430001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101FFDB00430101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101FFC00011080190019003011100021101031101FFC4001F00010000060301010000000000000000000001020308090A040607050BFFC40045100001020404040403060503030401050101020300040511060712210813314109225161147181233291A1B1F00A1542C1D116E1F1175262243363723443538292A3D3FFC4001E0101000006030100000000000000000000000203040506080107090AFFC4004A1100010204040306040405030304000309010211000304210512314106516107132271819108A1B1F01432C1D1234252E1F1091516243362435372923482A23654636473B2C2D2E2FFDA000C03010002110311003F00DB823E07E37221084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210844495A905D25BFB690844CEFE6FF54210EFE6FF00542112497249D4DCC2108421084210842108421084210842113E5CA72E5EDA37F8E5FDF584409B0BEFF48A832DD291CEC0EBEFCDF5EBBF28640BB163C9FEF589085292544591EA6D6BF4B5FDCFAC56D3E0CA9E9CC27213C81D4F958F9F571A341E5CB3721C380059B673BDD8731CDE2A458E1084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084211508960904681AF7BF95B5F4B1E5084574B4598062DBF27FBFD6112AB569240240DD76363A07DE20FE115B2A91552AEEE525D4740399D2DCBF6688173132C6656D70DCF9F266FB31F22AD52A5C8539D9BA9D45BA4531A429C5CDD4679A9461B084A965C3CE7921494252547D85ADB98EC7E10EC7B8DF896A648A0A3A899296B4F892859195D9EC92E6D6203EBD40B1565707565CA14A172C3C5E659F91DEEEC39FD98E958C8210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108472091A184239CEAE7F21FB4210CEAE7F21FB42110EB08421088E5E5CC3300431B1BFCB78437F97CADFDC7E9134CB0A3E005BA581FBF7F46844FE403CC77F99B6FBED6FDF5ED15D4B4D2759E82C7F5D3CB99312D4B63A86EBCDD9BEDA2522C76B588B8B7FBDE2EABC0E9EA249A893574F2128194CA5A996A624B817377673A989130CF529265964EF672FECDF4FDC0A13BAFEE807DB7EDD3DE28A51A1A75777328E6D5312EA96090AF23981B36DFB444813ED995ABB9B586CFAFD3D1E38DCF4955924F5B76DFEBDC7CBB7CE2399F839A3F8586D424AB474A8B7CCE9BBDB57D22AD92078943477D80E6E186D6FA189984B85603EA521A58F23F76CA49F42D825EB74370DF4E9DE2AE9F06A994B428D24FA94AD8A51282944B9B067B1DB4167E514B595D4D210E148CC0789209043EE087048D8027778F8188F155030AD2E72B38A71261DC3148A7A14E3F57AA54E5E9926B6D00A9612AAC392E5E7DB4A6EE352A9715E64D93B8BF7AF0376478971B4D954D478355C85CDCA04C9925612E6C1C91A97B73E4631556373D738A10A704E50C3AE8ED71D4FAF4C39713FE377C39E4E551FC17936AA8E7D63D712B97629F83A9D35352289A1E5287D6E332CE3AC078A10A7257982E53A5442AE77BBB25F80DA8C3ABD18F7194EA5460DDDA54135933F0E896B70439577799446621292A2ACB605A23AD99895553A134A16A5B87094662C5DCB316F3B6DA8D719189A77C48FC465A54DE65E269BE1B328DF70392385A96890A4D626245C3A4214B956CE255AD72CA50B3CAE595101C36B93B99832FB1CEC9E49A5C369B0EC42A24200354ACC24A272032932A5CDCBDE202B79A82EC08B1262EF81F0AE29882906AD0B0951B86B94B81A8D3676208763CA36E98F9A48BC42108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084220ABD8DAF7F6EBD601F6F942223EE8BDF57E5FEE7FE7AC5DB0E97DECC424B124E8767D2FA683CDFE72E62F20F9F3E71F16AF5594A6A983393723241D9E6245A13B50919353CB783250B65132FB4A7802EE9D0C852D4A0404F48ED2C1781AB3184A7F0D254B2AE492439DBCAD168A8AC6258F5D85AE370C6FD1C87F38FACCB9CFD2194F32CAD0A285254026FB39706CA041B84A4951162010445B389BB38C7B08AF932BF0B51967202F284A9D9CE819B661F48952F19932C142AEA0EC437E96D45D9FD220EA994874CC3C9939669402A6A710B956FA9B9097C36B2D8FEA780E5207996B4A45E333E12E08C4AB952E427876BA6A94C9EF3B898AD6DAB1F3E5789533192A0720241D033160CEFE4FE66DAC5A3673F1C1C2D70FB2B393398F9C182A4E6A4C2AF49A657A9D5BAB3853736453E93313D361574E9D2590ABED6E91B25C33F0ADC67C52BA7551E11554F256B96164D2AB280E09CCA32C8486DC9B5EFCA8D58954CCB0CE33F84000B6BF3D6FA90DAB5A30DB9A5E3998DB332A33185B820E1F31563DA8B5AE5CE39C4F4F7A428A92B5684BD2F2D507241364D8AC1725C822DB7511BCBC1FF00073C17C272696AF8CF15C32494A10A992066AA9CA5243AC034E998841D001372DF5D0C5C11C3788D600A4CA9AA0A4821C9D4FF00F262413BFB88B53ACF0A5C6D718B5194C49C5F67CD4F0FE1C9D77E28E5960B9B5C9372D2AA21486DF320C8A682E216B6D6A6DDF883A41755F723B0AAF8EBB24ECAA9552B85B04A2995F2E5A909ACAD44A9EB4AC064AA5497325C1018AE5121FCDB28C2BB37AA9EA419C9233105920816D9DF30DF768BF0C8EE0BF20F8799368605C074772A9A5297B11D7E5FF9DE2075570A594CFD50CE3AC05AD216A32EB6D414949490018D6CE39F8A3C7F1C136827D49FC1296549968968952F30709509729284000288484A40625AD68ED9C13812550E55CC940A7280330727A9D49767BBBF9978BA179B43EE36E3A5C77960250DA96A406D23601B79B29984240E890E04F416D3B46B571071662FC43316B935535282E4E559763B6A412F6BDC876BC671498452D390532D296DC02038D7A9F5043EA2D196B8F39A359E10842108472C59D8B736B4211C42108E1C0D481EB08E424A8B00E758383A107D6111776BFE931CC221208B1041E4434211C421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210844FA64A1535216404B13736D3CC6CF68422EB488EEEB652DC89799249B652971FCCDA33D9C68363149521652A604EA18027CB47EAFD4C625BC5C723736F34723E9B8F3237165728998792932D6366E9347985A65F12B5499D1565C8CC36DA4F3C99664B6B6C282F962CAB01B7AB3F06F3F82D788AA931B46175B2314A29B874F4D57773275209F2D72D3574B98B267C852FBC43A54E5094B125A30AC5513D63324AE5996B4A859401662525C12411B0EBCA30FF971E355C7267261D96C0D923C35E1EC458FB0B48B185F16E209F76B084532B72290C3D3EEF2AB92D4F4321A532A53B32CA91F109790547416D3E8AE3FD8076514C8A7C671E453FE025C84CC975264CC5A97241514B8949695308BF8C0D4280CACF434D4D555F34264CB54D597040D417DAF717F4D1C398E3629CBDF168E294A3FEAFF001308CAFC3D308D350C3F8585065FE124661453CB96769B2AE551D23ED1A438265C46A410E950044758278E3B01E0D99512704E15A4C5AA24A9A5CD9D3545495CBD1D14F325F81447882939D9F48EC8C2B81714A8085CEA69D2D0C03E420176772A04380C5DEFBC7A4657F850E436199D93ABE6AD471667463169497E4EA789EBCFCDD2A6A6894AD7F1EC535C937DA6CB801B3EB6FCAA56E77B6198F7C54CC41A9918149A6C1E42D16A4A7A7932D29CB982405AD0A9C40D0BCD2ED7711D9185F673256941328A9682E4A9C9DB51A1E5616776D6322984F2FF000565F4A269383F0A50B0E372C005FF002FA7CB043A027484879A4A94AB04DBFF0070A8DEE4C6AD711FC41714E25327A27D5CD9C95AD6C01CB636E439FD3AB763D260326484215283CB64B650C7EF41B8BBEC63B8216B492541B0A2AB8E5EA29D2474F3A945245B74936171B474A62DC5F598B2D73271984A8A9F34C2F76D03F5DB5BF98CA6969A9E404E5969040B823CDC8DC17D0F2F5894BAF29C21441458FA1DEFB1EFEFFAFA88C726AD53D254A5BEAC1459B721CB3916BBF9022D1799425D4112C808BBB1D1B40C771EBD62205FB81F389B49884CA4494A40507E6003EFAFDDEF1CAE86503AA6E4DAD66B336A2FADFDEC632CF1A4B1A6708E589D013E9084710844495149D6DA11B31D7EC5E114352AF72771D08FF1FF003138CC9440694C7CCEDD0F3D75D5E2320100A41F262DEFF7D22AA557B5ED7F98DFF3FF001F8440552BFF006CEFB9F931F38965209B8BEFB7BFDBFD22722D6DC6FD81BFE5FDC7D7B47227207E49794F32EC47BEBED10A501249737B31D9BF7D6211C9A8984310961D0FEF11C220F14D50B5DAE76B6E790FBBC21101052483A88423884210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210881DC1B6C6108A69D8D8DC9D477DEDB03E9DCFBF51192D34AEFA95CD94948B96723A73DBD75E9C10E18EF1C09E93969C42E548626989B4028947920B73AABF2A6E9F300A86A4CC3295A2D704A5D0047737635C62384F1F913D73D484A26A4FF00DC22C08D7C4346BBBBC63D88CA5942B32772E4E87FA4860DA37507D23536E2E328EA5E183C7949E7E61C6A651C387129539695C6549916D69A7E0FAD545628F55176C28309698E4D49B2EDFED5E51B9B587BA7D9DF68749DB5765D3B8724D449FF0075C2E8E6990AEF1E655D2212A9AB92015052E7CB26628285F294218B5ED78056270DC6A48984649B352EE2C9512003C8025BD5DE32C9469A97AA5269F52909895A8CBD49845429D392CB438DBD2334C34EB485290A29296DA216371F68B73BDC0D02ED3785EAFB3DC4AA27CC1353DECC5AC851533936D49362082C6C760E6377B87E6C8ACC2E5652851EED2EC13FD20B160E0B333FEB1F40A9B6946E4B6E7F572FF4D81E87A743D7AC74C1AC388054FCC6EE3522E5DBE5CFA5B78989989A39A52964DD8369736BB30D85C72BEA623D62C539CA9D4DA93A726BDC9DB7B4579493E2045C3FCBD8BF3B42282697BF33FA1FB31104060EEFBE9FB4224C4FA74B2887760E3DC06DED08456465A234DE34BE11594E9CC85076F11DB98108828E917B5F7B4552684CE3605F4F08E6D7207203F71BC20B75252404807D77B7B837B6DFDEDBDA27A7079997BCC8A294DC862E5AE47DF58840626E4F20768E2B6F357F3B8DB9D7642C3205ADB12BE67E37EA378ACA31214BCA680962416D75DDC1F2160C3AC40BAA484B25402858E6208F326DBDADF28E40765C2482D2D02F70EFC730B491DEE0320DC74B5FF48BA4FA7A612DD386AB3358EEFB91E1161BFE9146AAC5851CCB9447FE285076D812A53F9DEDD6D12A17AD4742D2B6EDB1093A811616D7A8A4FAEC05FAFCACC8A34572E64B974A65292097B9075DD868FA8D34F3994F52272D412DA17DF4D0FCF660DCA2AC5AEB30F9B4AB21414403CAE3F7DED63E7BD6C220A340528BEAE1873637BFDBB421126A401396DD3E8DFA4211221084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084211C80E586F1C12C09E512936FF001D6FBF61EBEF7DFD3A45DA9EBD32A5E460469B8366BFB0F6E45C4722EDD79DA264A1B5202B40D41E4CC03DC3CD690DB80FAA4211B7DD36F3024989332AEA25CC13A4A88162081A39BE9766362F147572028124396B7273762795DF4BEC748B3EE3A3860A2F17FC38E60E5454E4E51EAE4C51EAB55C2F54994053F4DC452322A9AA10957016F4AA76A8C312EE137BA0D9206E637EFE0CFB61A9E15E21A5A6ACAA250AA900852D82D07205A0B9365A5D2A61B9F21865652AA4D4A6A00395252EC086209BBF4B68469CA3009E19D9C589A66878DF871CCD7669BCD3C8D9C5D326252A0A29A84FD05B9A9812DF64B09594B6865F20A517E529B2491631E8DFC4B703CBE34C06471060B244CA3AEA54D4489B2D04A338493325E6BF892A752AE2CA1A3DFBDFB39E374A932A8A64C7520996B054091A0B0DADBF327CE32B096103CF2EB53CA7505EB38012D1171CB02DEA075F5F5BC799C696661B513A8677826233272F54921DB727A359F431DED329FF00192913A5BA92482481CDB71D074D0ECD14FF007E91669EE165DF5DEF7DEE0795CDA2ED2E532120A4B8006FB795A114131DAFABDECDB188FBB1FD27E708931325A7293621C75E639C2113632D2B1A5370413E96DBF1BFB88D384256BBA50A239B758D2D4AB3683F57F28A682A735E84EB2D8D4E2527CE11DB968DCB8A363E5041E9BEF715B48898A5096949CCA25831726CEE1EDB35BFBF330F760155B35927519B928FF2EA39BED12BB32CCAB5CE7D4DB6DA81239CE064A103EF178A81E4B82D7436AB972CA008D378EE7E0EECF719C7A6CA44AA49A3BC20056451FCCD7D3AF97D0582B71C452139924B1E6D71A8EBCF5F4D231CBC50F8AC7063C27CD2E8B8F332256AD8D2CBD18270FAA5E72B6A52076652FAD691AB62A2C900EFA760237D7B32F817E23E32A597884C9B364D2CAEECCE3DC152121434592A4B3E52CFA81E71609DC6D2659CA24B920B0CCC6DAD9AF7B4611334FF008A23084AD4E764329F878AC56E5A5E6552AC54EB98A996913001584BC8926B0EA14A4D93A8A7E26E01EA7AC6E6F0E7FA75F0E144935D3A9E44C54A4AC04D389AB52AD69802D3DD12FBB8D7CCD895C6414559242AC4B1D12CFB162F76622C5CE81E3CBF0AFF0014762C72AC246BDC39526ACD36FAD335274AC4AA93A832C972C95042E933A5C7143709084D8EDDE332AEFF004E6E11452A946A6466C80A40A6042944071FF70650347F10205AF6347338C5811DCB925FF36E6FAB3BB746F28CA670E9E3F5C256714FD3E898FA9988724AAD3BCB495E2E986D74665C71C4B60B93EE485312DA14B58B38524588DAC45B5B7B4CF808FF006AA2993387A4A664E965456BA593DE3A4256A2494D982439E57B98ADC2B8D25A66ABBC9590286AB55F5661E762CFA9D088CDCE1BC5748C6147A7622C2F3B255FC395B61A9AA1E20A54E373B47AA4B3E90E34E313CC853575A085048D66FB5FBC799DDAA7633C41C233A6A6652CE5A25A94EB32D490C017B5C90C2DD3CA337A5E219152C026E58BBD86E0DACDA797D3B1A545574E85A5C6D650F21692808B7F521476753EE026DF2DE35C44A5D34D299A322C29563AEA41243588B5BF7117E95384D19980490E920E672CECC006F47BDA220DFD3A91B1B8D891D47EC748B7549067288B8B7D2277F6D6D11891084459490FF6DBFDFD94221842108421084210842108421084210842108421084210842108421084210842108421084211C80352E12F72DA08440DC7417B75EDFDBE71528954EA01E7804BDADA738020BDFEFAEE3D8BC4BACF4D26FE9FB1F388674B9281E09BDE13C886FA7ED1CB00097B8D86FAE9E81FD62A00A209234DBD4C5366161ABF2BC40A5650E0666B16DA21B800916045F7FDFEF6F58AA912E44C0AEF270411602DAFAEBC8F2F680513B36FAFF6F6E6D10B82091BDBF7F389ABA7A64FE5A90BF261F7F41CE228883700FA8BC51A800A20170343F7CB47DE10886108E41620F28E08704738811716FD88E23901801C834453E516EB7D8F6FDFE715D22AA5CB9650B979B563EAE03EBD3CA38580B7CD7E56D2CCFF00AEDB44A90D05A12FA8995E6954DA124256439A532802883D6606D706DD6C40B9CE7B3AC46752F12D2CEA72A90942D2B241B780E620DC3381E57B03A45A311A54CC90B940A42969396EC6D7530BE83DC0D63555F13BCB9A8F05FC7565171858692AA560ECE7AA230C660265D854BC8A669130CCA3CF3EEA565A587E42725D2942D092DB8971C2A5870253EF5FC3A71E5376A1D9AE29C3F52906AB09A7993A95130E72B08927F1465B870D2E5A5459C17EB18FF0E53CEC271697384E2B42960283B017748373A9376219A32734CA9355191A555D975B5C954D69AB4ABCCAB5A6764DB969579F690011A0252E03CCBAD24AFEE009223CFDED2307550714E27396932E5A674E4A506DFCC599B61CF56F68DD4E15C7D153432E52A51CC94B024B87CA003A0D5F9DAD1CC26E49F537FC7F0FD23A926D4BA8802C145B968DABBF4FDCC6582A125D927DEFF40CFB6BF2884532A666770CEDBF289A8585E9089711C2108CB24D3A86D2A2A5001B5A5B593BE97156D293B920AB526DEB7B5EF1AC7493A9414C9080E47874D09D7401DEDFE234991532D049D589BE9A5AFAD8730F770C23A0E3CCCAC1D957862B18CB306B9218630A61E61C9EAD5627A6512CECB32D214E284AA9CB25C7D484A8A504A4FDDDCDE364BB1BEC5EB38E712A6AC9348B5C83350804214A49398170183BB80C5F6E822C18D6372E428212A00643A96D6DCBCEECFF0048D287C517C77B32B36F13E23CA4E186AD3B82B2BDA5AA9950C4CC3CA35AC46C6B799717A99E52132AF3772B297147CC9DF68F78BE1FFE10B02C370EA2AFC630F973EA3BB44C452F761225901242A728A4B31FFD3CB71A2E3AAF16C5D73A6108532492EA7B9F27F2F97531AD6572BB5BAF4F38FD42B5529A54C3AB989B9D9A79C9E9A989859D44E9756149495137FB5B017D8F7F41F06E0AC1B094211365C9414CB44B4CB9684CB9694A410004BDB61BFD41C745490080E6CDAD9F7D9C3EFCFD8C64C7C2FF00C32737FC47F3819C1D8710FC8E5D61F769CF66AE36984AD12B457E78AD729234A7D29E5A9D9E665AA0B652B582532AA246D1912B06A1A2654B4A4380583311ABBF2B0F668B6CCAA5DD24DD8EA5AD6B336FB10469611FA207099E0C7C0AF0A78768F4BA264AE15C6F8A25D86DB9CC5F8C2892D51A9BB34020BB3A667524596EA0A994149D29510567A981A9EA3C0A0188003B68DEBCF47DAED78A29B52A21C96670A00DBABDBA5AD7D7CEF8B197063C3363CA42A8F8B72672EEBD4D6DB29665E670DC9B4C36396A67C8940D63430B712DAF59D2A29558DAD1455FC17836292BBBA992950591A01770437270090DE9CE29C622BA72E9043DDC9361CCB0B7EB189CCD2E0F717702B3F53CD7E0D8D6AB593F3532F4E664F0F9539C76A529274D0E17EB55BC245B69B14F4D325D0FD46525CCA3C34B4941753BAA34DBE24FE18B87F17E1FAEADA6A296A9A69D6A49125254C997E101BFA58061B87F2CAF05E21525694A97A91A1606E0EE4F91B7CB4BB9CB4CC7C379BF822838EF05D55550A35728A5CA712A4A8D2A6A554B979EA6D54A55F673D28FB0FCB4C3640521D42C5B68F9B5ED93B25AEE19E24AC948A65CA9299EB0C94948090ABE83567E77B98EE9C0B1513D092EEEC1405C90D62EFCF53C847A2304F29A0A012BD09D601B8D7A415A8136BA54A2549FFC4FB46B857D02A454AE5A81494923996D6EE05F5F96968CC01CC01777BBE9AFEDA457208EA2D16F992B2E8180B33FDDF7E4768E621122108421084210842108421084210842108421084210842108421084210842108421084211015804DB4DDDBF4845449959C82438D4BFDDF9F26D621EF433B5BCFF00B3C2F6DFD378AF142A9A932D232BB31DB9E9E8C4BB9DA057983331569763F7CE097D2A04A54921240277D89F5E9126660F3901F338BBB0D1B5D7EFAC4B34AB07F3A8137607D76F9444DCDEE3AEFF0043FDBB44CA7C34158135795208DB5F5058F5F5D221EEE60F0855FAFCC92FF43AC4AB0A08240569FEA3DADFBF6B6FEF179381D34F4BC9580503C4C41E7E5AB723689D27F332C872EC34274E5CB71D6FA344A9D66E6C6D6BDCF44F7BF7B0DFFB768A19D82A500E59C333B070E3DDC7E9CC44E3945B3026D6D1F5B0E677F28AC90B02E1371DCDBAEC3F7F58903029F32E9989200D5881D776BFE9AC40540753CBF7E51245AA74A54898B94BFCC82527AB59E2205C03CC3C225C21084210842114B58F886DB5A0A9B1CB5382D70E05B9A1BDEFB09758E728906C937B0EF97F0E4DFC1257581B3A7300C6F74FCC870E1F66D629AA4781F2924050059C0B5DCB86CCE0462C3C65724D19D3C0DE67CB3A944DD5F01CB3D8BF0E16D1AE624DCA234AA8CCBCD28F9D097D0C34D5D3FD4C9DCEC23D36FF004F9E3A9838A1587CE9AC99B3E63A0A892B42800A4905DD2A4B823A9058968C76988154DE27705FCCEBA16BF4B74044590F87B6613B995C2565156A69D5CD56E8B26F618AA4E3CBD69667245D409D0FA89BA54A957A502924DEC81DAD6EC8F8BCE19A7E1DC76AA6524B299752B339194312263A880CDB96E6D62F1B1FC1554D22592C090010DCB53A33F2EB7D418BCB3D4F4EA7A74FA7B7A468F041201259C3DC73F58ED244D3AE80805CEFD086B7BF3E5108777D7E5FDE2B654C09DC17DFA9E8F6D3D37E88E148CA1DF5E8DCFF0068AB4AC2B4E57F97EF0882228CABCE16DBFF00D73B32DC8B0861C616F4C2ACCC9A582B7A66A13248F2A1965C4AF5764B67CC3B751F643D9D5671A6334F462495A7BF77082A073252004B0D2CF73AB9D75D0AAF9A64B9CCE6F62430040D36EBD75F2D0FFC707C52710F10398F5CE1D7292BAE7FD1BC1B55758C413B4F9A534711D592A0C541F438D2B42E496DCB32C2028AACB43BB0EDF46DF08DF0E949C13C35455F5F448556CD22A2953364248944A53926AB33292A494920338B17731D57C4156A9B50A4A56486655C39E637B0E6E5892DD75CC0E294DA92A6FE1895950972BE6ACA36D2B71CB24DF75586937F58F4CB0BA69384D025084244C291994078896F5F5FD230D9CA52CB3800D85AC06970FB7DE9695282E292817256A0800752544016F7DE2D53A8AB2BA699A952B2A1454C1F4776B72DFEB13A54ACC924DB28E409FF001E47773BC7EA6FFC3FDC2C61CE1DBC39B256A32B20C3788B38B0C51334B115614CA5152985D769A99DA7D39F5DB5AC53933B34DA35AFC9CC20246A317112A655242092484949BE9B6B7E5BF5D358B74D925CAB53C8727D75E6436FADA339127284B2D2DC74AD6A4056E9B286C2C93B9B691B5FEB6BC4B4E16A924AC28050D6E46F716B9BD87DB514C96924D806E8DB96BFDDA3E838D5D011AF4EAB017EFB5ED6BF5B7CE26A8D42C77685293DDDC90ECC39DC587CA28A653898921EE3700797A8766FDA3AF54687233327372932CB532998977DB5CB3E84A99984BADA92A65D06E9E5BA096D7706E851041E865D7D18C7B0E9D87D534C4290A490A16636D0BF9D8BB599C08829C2A9E6A402480C4598F4B8361766FA6B1ADFE526246F86BF10FCF8E0ED15112B8533265A5738B2BA9732AD2891AFD525A9F51C534BA7B57D09A73530E56E6101AD23426E509DC8F1AFE377B12A2E1FA2ACC6D146801A62FBC44A17CC933029652FCEC4E9A79F7070C5794776E45D817360469D75B1F6DE32B1A349B9042AE42EE2C39A9252E948EC953816A47FE047BC7815C47290BC4AA9494B253354966FE82DA1BD88F23CDE3B9E8661994E8512E4871B3FB6DB73F9435EAF2FFDBEDD7EBEDFBBC6213D000D1ED63A9163FAE9156033F5DB61E508B54730842108421084210842108421084210842108421084210842108421084210842108422242731676FF00205BADFDA28272C8594B5B5F573D2117DA296094B00A1A03A03BBB31DF9BF5E465779D3E7FDA20A525092A528A529054A501A8A401724276D440DC0B8B9DA332C3B099B5F36548A74A95327282101092A24A8848B80589275D1E38554A6482B53654392E761ABDADA6BB34790668678E5464DD25755CD2C7587308D292D17C3F55A9B01F521214A24C89525C3B0FBBACFE368D91E03F869E28E2B5CB4A696A5417909FE12D4121577D183F561637D445B26F13D32092932C120A5C3055AD6BE9D6DC9C02D18FAC4BE365E1DF85A6DD929CCE2929F536E9639D214A6D52C4A7FA9A26747937201B0B9BED1B172BFD3DF8D2BA9C4CA6C3EA56A290ACA896DB6CEDE7CAF7D18D9AA78BA9E5803BD272BB15A9CBBBB390E481ABD847AB65478A670339C35993A5611CF5C38AAB4D8024E4EAE19A6A02DD2004A9F334E849510906E9EDE9B46118CFC0EF1CF0DCA9AA9D4159E2709CB256A2181D9398BDEFCF48974DC5F2EA4AC256924725358D8824DC686ECCFE76BF192AED32A94F6EB3489DA3D425E7480CCE532A08AA3136950D490C3CD2121BD5D6E76B6C235478FBB18E29E1A9B34CEA6AA09959BF32169208BB9B3B80EE0B737D1AF94D8BF7A52010F66BF26B31D5DF979B3C7D7438B99681374150DEE6DBEFD0EDFEFEB1D1B35389504C5217F884149218BBB827672C0B5CB73EB17D94B331399811D2EFA6C3CFD3AC5609D2026E55A45AE7A9B77FAC5B264C5CD5AA62C92A5172FAFAF5E71562C03F288C411CC21084210842291F2BE8737B04DBF32477BFE47F18BB505412052B3898A6D1EC4DF96D667F944339FB85B6CE4DFA06D8E8770DEB1E3BC43D065B15E48E6F50E698130DD572E317C886880A05D98A34DB4DAAC76D94B041B5C6FDAF1BB5F09956BE17ED270BCAA2913932D44681D6A20821FF005E83A61C89853582C7F3366EAF7DDC020BBEFBD846B2DE11D5C99392398B84C927FD2B99B5861A6093E444E38C35603A0FFF0017A7B778DF8F8C897F8FC428122FDF6134D5414392FBC1AF4CAEFB9B35ADDF1C17519A4CBD1DC020EFE5D5F43CF668CB4479E4A9241286163940276E96376DADE71DC32A6121373A0F22390F4D2DD6110F766E19C0E7A6FA3F9B721A5A2BA5AF301AEE41DF58449A84B240218A4E80D8DD9E2E14CA398A6CECC4F36DC422922B23E178D9F17935C2AF0818965F0AD4E624B32B3464A6B0BE1D98979A32CFB54D9D6BE0AAF5261E4283A8765A5A65443890157652014E916DDEFF004FBECE287159B49595F432E69CC95998B9799921293943A48CC6E120903335DDE3CD9C72B6727334C22E580243EA6FC9831BF9911F9C25467266A939393530753930B5A5D55C90E85BAECC28F4DD0A7E61E5D8F55AD67A9263E82387B0D451514B19085327C4ABAD59400092752C00E6C00168EB4AC9EB5CD27312391F7D01EA5FE778E1A1050A51161AEC16475568BE9076DF4DCD876B9F58C8CA94AB124DB4276F2DE284924B9F362E7EA7CFDF68E632E8967E56634EAE4BCD3A53FF00772DC42C8FADAC2262274C96190ACA34616F3D1BEC472662C2540288041702C0EBA8DE3F5C8F081CD2C3B9ADE1DBC2862DA14CA1128CE51E13A0D4E4C283C69F896528F248AAD397A2FC84C93E80D213B69D4404A7A454CB190029B12351D768B4AA6ADD5E32C4DC3D8B738C9FCB1525B4A1D480E2494AACABEB29362A27ADD46E6C45C5E261512083BFEEF1095920825C6CFA81B0D741CB6D2394E1BA536483E636EBE5D8D8FB1DEC7F5B4429480261DCA093D5AEC59B4D6FCA244D52865092C5C6DE7AF43F6FA470E614BD0BB69B86D5E43B6A2524E920F5076041DBAC51519589732623F302AF1004E5653A481B335BA81D627A91FC30A03C4DAB39E66E072258C6893E22DC4BD3E5BC7F32127B0756D2FA7071C3D80B10BAC39CB765CD7692D48CFD2F9A8513C83FCC9D65E6494A4A4AD2A4D898D69F89CC1A8B17ECDB1E56272454A95433D402C02954C492467CCE6CCE1DEE1ACD19370B4C9A6A129CCE01F26736B3D83FE84738DAC03A5EE9A8730735209B90DB9F68D26F73E54B6A4848EC9000B585BE4DFB56C29143C438AA6911DD4B1513825080C01EF09D9ACCC06DBC6C3E1CA50A79409D833ED67B68DD03EE2C2D11D3A763D7B9F5F7BF58E97A70B54C2959516D5CBB312ECFF4DC6D175413B926DF3FD37B44A2F7B7604837EB6B6DFAFF009EF795501215E1003BBD80BB9F7F3E7E7132268A7842108421084210842108421084210842108421084210842108421084210842108124036F436DBDBF7FDA2A6453CCA929972802A7B9DEE6DA5CF5897952661240717DB90D7F7DA292DCE5A52544DD6A0D25294DCEB7886DB51B90129694A0B593D12937BF7ED0E19E12ACC6572282992A3513141072824E626C2C2E58B7937A52D6AE5CB92A3605AECCFB0FAFB07D630B9C78788DE37C298EE83C25F071456F3138A9C7336DD2AF28E0345C16C3EFF21BAACF3AD3730A945CB235CCCCB818D61B45F736B7B05F08FF0009F22A25D1E37C5583CB9D4D29529495D4484CC99316485044A42C329B3254B24A4049719882074F71062D52852E5CB9EB009219C84D9FF31E476B5CED1E8FC3F780DE12C72993CD7F119C7D8A7890CD4AD25BAC4E526AD589D7B07E149878077F94CACAD41E7D13ACB0B245BE0D841BE92848DE3D8BE0DECC3867014A1386E0D4D440C944A5FE1E54B946621398B4D08480B3E220E627D8475CCDAEAA512553944B96BA8E537FCBEC2F6B6B17F156F042F0CEABE1F3499AE16B2F9B61682D2E72430ED1A995DD3A059C62A6CCA1782ECAF2AB5A4DF73EDDC48C170F93232269A58480080122DB36835636B3FCE286655D428879AA2483B9361AB07EB76D635CFF0013EFE196A4E12C27883383821AAD453354677E2EA1957594AE75C7295A1E79EFE52F075E6FE2590D14A161B68A750B1DE2D8BE1AC2E7A66AD54A0651FCBE1777D1872D47BEED558755AA5F7854B2F6377363FCBBF93927D235DFE12FC4FF008C2E04B158C2B278B6BB3384A97555CB55B2DB16CECEA69B28CCABA1A7E45EA7BC5F625665F4EA4B2032A2C7248DB546B4769DF0E5C1FC7D4F5B2D180C89752B4AC99F269E5AD73164165CC0420BBB9529C936B168BCD3633552E7272D428070C92A622FFCAC6EEFD00667777DE63808F124C92E3BB2F64EA981E6DDC3F99547916062DCB9ABBAC2E66993250034F353C5F52E7DA9CD330B963F0E8E6A1A5393225DC4B4DB9E15FC547C22E39D9F55D5575350934C5739525726593296259F180C12465702E901EE1EF1DBDC3F8D2A621089939401482A25442812465601F5DFC5D37719109399334842D29284A9295241595948236054A082AB0EAA2013D6DBD879BF5342AA3993A4CF9051325A8A541408292090400C7FB1E519FA2A25AE5856619983920024D9C8D407F38FAA84690751D5F3DEC07B9FCCC6315292262B224848D407B12778E33B90C6C5B6D5F96BFA7478A04DDC3626D73B76E9E90414849CC1D4D62FADAFFB83ABE913C0F0126E5DDF95D9A2788220842110006B0A201005AC7FC743FBE9175C2552D3500A920A8174A88D2DFBB1F488165C141FCA41717EA7C88B79C7C5C4F229A961DC432602344CD0EA4C2D0A48295A5C96712A4AD3B85055EC41DADB5A3643B1EC4AAD3C65844E97394858ABA6961492CC9135362D77B9E5AC6258A23BA9AE9606C5C58EA7705F560DB316D63524F0A843D2353E25E981C586E433567D4A6428F2D094CD3C52023A0D3BE9DB627DF7F5B3E26A8915381F0DD62E5833D5C39440CD6B96EF8DCF477B9B5DAF78EDCECF14A5E40A512925995B9E9AF4BF94663BAEFEBF48F34B12795316124BE6587D086FBF48EFE4212508B3002C3E9D1C7368459BBC5FF51E7AFDFB6917196125CB0D06C377844D98B52A5241BDF5E419FF005DF94562404FE5B6DA98453C45994773CB58D74FF89873BA7313711F95D935293EAFE4981B2F25E6A765D0E12A454AB55AAEA6610EB62C017251B9548513AB4E9DB611EE47FA7C70148A3E0D935EB97E2A89F2E524140007712E54E5282B7244D01B4D0F48F30B8867113160100A42947AE674BF2D9B5B1B6ED1AC53056865AE6274152494B5727949D6A4A51A8EEAD93AEE6C6EA23B47A8D3A522494CB400025212C2CCDCF4BDFF00BC6066667274606FE77789D4AD42D6B6F7EBFED126110510A001B8006F63BDB6BFE90810E08E61A36B4FE1E1F18AC39C25D55FE13B3E2BAE48651632A99AA612C513CF38E53F0954A69E48765E70ACFD8A2643E82A08D69499717E80C578D07908B71483A8DEFB7BEF1FA0EE12C7D84F18D1E5712612AD5371361FAB2133F2558A14FB351927E5E6ECEB4FA48712FA50B4282820B29D17D361DB9F46FBD638CBAB004B921C580FECD1DAA6EB52D28CA9D7961080DA9E0E00E14F293F7493A079964A4580B00A3BED1CB7F0E6916210A62CE1F7F97D625CD466CA00D54010031DCB8BFDDBA88C417895F8B1E49702593788ABF5CC4B213F9A73F4FA9C960EC094F9F969AABBF539995986693507D8967DC7A5E5197D4CCCBCB7101686C28F2CD8034D87247E126A9475CEE79DCE836E7EFE95C6514CA7B3117D7C9BD4307E863F39EE1AF31F317895F11ACBBCCBC635176BB8BF3033BA8B8B6649042993395965C769CD383CCE4B53244A9D6DD524297F0C905B48248D70F893C424C8ECD3880949294E1B5054B0CE8374A4B13FCEB64D8D8289170D17EE1796915492080730B36A4060E4793E81F9EB1FA7053D85CB25942D5AD6D4ACAB2AD5BF99A966907724DC8D36B9E9E91F29BDA75548A9C57129BE1635338D88DA6AC3316E5B01D3731B05463F832C0B30FE57BDBCC3E9FB5AD1CE70DD57B761F8EFFAC74225483357959DF6D72937D1F6E9E80697397A9D45B7F3DFE71407DE55B6E9DBE57FC7F3EBE916CAAFFBA5B460DCB53136278A6842108421084210842108421084210842108421084210842108421084210842108993A54AD0490AE52962C2F7D24DEFEC122F7F6B7A45CB099FF87AB44C37495841D6CE017D3CFDE244D59439B245AFCC373B6F6D74E66D1615E23DC5B49F075C2AE3FCD6626A5DBC4F3126E61FC172B30A08F8DACD50269C9750E00A71B5C999BF89416D0A512D0074DEE3D20F841ECC6A38DB8D30C5FE1953A9BF152664C640565928295CD5B16072A12B56AE74E4630BC771212A5AD94C729CA3472CC2CC2CEDE641F38C7F7F0CA70E4ACC9C2F9BBC7B66DCBAF10E6766B63FAFD1B0DD62B0CFC43F254095A748FC5B94F997F5BA96DD7662A124129D0121AD43CC6C3E9C383781306E1EE1FC2E9A4D3CB94A972501084A06601878CF86EB5125CDF4CB7023A6715AEEF262813E2510E59C5CED72036B6BB5D89D36E51470E34D32FAD33086957487D943AD6806E94A585DDB4A80000700BF4BF6B67E8912245929003B8B00A7F30FD3CA31E5E562029C10406705C6A1FD9F48FAA25006424E97AC494F38056956C2E8041081600694D8003A5A2298A0B0A01094B800336BD6DF3B9FAC52CC3A1F3D874DB48F873F467E698790660B4B7016398D80AD32CF022612126C2EA096C2556051BE9EA6244A94405CB2582C8DCDD9C33076D7D7CF5972CAD2E017059BAB3907D3AFD05BF372FE270E0AF0EF0F5C624866EE10A44BD270867A4A556BD59A636D2053958B6526251C9FA8CBB2072922ABFCC82CCA0436D491964F2357315A66CBA9A5C1A5F7EA405E662A0525F7B1046A092CEF1512D531335C9B6847EC6FE567D3578C0C70D3C48663F0A79A18533432D310D5E9556A3CFA5CA9309A84D2E4EB34D0B42BE0AACD15944DB2A4A2CA2F36E95AACB502A488E9CED13B3BC17B5DA2ADA1AAC3E9A689D22684AE64A4AA64B59493990A5A5C3DC162C4B1D4465F87629324196D30A7291BD95B31BB68CDEB60E1BF4A5E0238CDC0DC6A70F58433770CCC49B35B72972F2D8EA84CB9E7A262465A422A32F2A8202DC9144D22650D3CB432484B7F6635587CDB7C4FFC35D7701F18712F7744A95492EAE72E4A8206554952D6A429243A4023290E5D88700C76A6118D77E99633853B0D6C08DB9E85DDB5B45EECB3E5D970FDFECDE515360D82C364F90AD276495274A8004FB6DBC79E35F469A7A99B2169CAA4A8820F47BF3BB68DA18CF698F789045ADA6CE43BDBDAE2FAF58AA079B55F7DFF000E83FB7CE31FA8484CC2069EDA74FBF95EA492C0727F7789E2447108420ADDB206C6E77FA7EFDBD62AA842BF152C8D2CFEE7EFCDB918814EFD0254FD1C16F7FD23E7D4965BA3D4544836937CA947FED2D2811F203A8B7AF5DC1D8AEC61C7166119BFFDF69F7FFF008A1CFB35F95B68C4F15FFBC860C1DC3EACE34E572F668D487C2E2FFEBBE2CD03CECCC667CF00BE9A15F113009481B13BF7E84C7B2DF11CA95FF15E1B040FFF0067A8D86A481DE9773CEC0E9666BC76BF6761CA741767035D1FA79FF88CC3A93A075BD81ED6E9FBF48F2EB1663394DA15ADADD7972E9CA36165FE44F94489248B9F5FF11645000B0E5FBC57CBDFD3F589A2357FDB479FFF00E222B2112A11A86F8FA2A61EF116CD7F8A4287C3D3F0DCAB416A0A0CB7F0DAE5C36029574BAFB8E005174A557D453631F461F01E8454766B87CEA719A4CA9B366A94001734D4EFB87B252EDD23CB4E270B4CC9A4921C33E8D73AB585F5D4FEB852056E152C8D94ABA45C6C90026C37E9704FB5ED1B9F2ABA4D5CC9DDDAF3144C2820BB82ECDA6DE7BC60F48ACC955DCE67F4D3EC40A48DC88AC4CB5AEE90F157108196A4EA3DBEFE908A8A5A9296594A9B5CBAD84A9F66CA423E2125252B52C23587507514A9BD4012AF36E22789C860EF61CA38EE147407E4797DFB7AE453859F156E37B84593628F94B9E98B9BC3AC329699C338994C5768B26DA7492CC90A8AE7D68641012D37CA6D2DA0694A520DA1DF23AFCFF687E1D77B1E9616F9FDFCA2EDF31BF889FC4C330A82F501DCD795C3D24F4B99375541A0D1A4279D4A9050B509F95916266512412B4BB2CEA5E4B81200092A22A64A84C4CE4A43954B20381AB8DCE9AC4999216921405C313B3A6FAED63BEBEF186ECC2CCBC7D9AD89A7319665E2FAE63DC415175C7DFAEE21AD54EAB5F9571D24AE5E4AA35079D7DB92255CB54BA6650DFC39E572CA7CB16B33E5D052CD97395956A0B012937054AB5C7D91CAD1397365AA5F77FCC5218368C2EDA5BDB95E3315FC3FF9033F9C7C79615C58F49BCEE1FCAEA05671954A6CA52A949279B949FA5D34BA4AAC56E4EBF2A86DB692E3A0AD2EA921B05C4E8AFC61717D3E07D95E3A99F552E5FE2A44F904120AD484CB54D4A5201CC06748753072E1F6395F0B51CCFC44B594380336D72E3D1C0E6413D748FD0EA58ABEFA9455A8ABCD7D942FB6DF976B5AC7A6DF2C3C538DFF00B955D6AE4954C0AA9A8208D6F315CEFF00DFA391DE7492D4254BF0B0B72D585BD79FED1C85904EDE96FCCC6094C99A998553028073A91A72B16317048235163F5FBFBD629D8EABF6B9BFE000FCE21A90E429F98F3B9D3C837CCC4713452C2108421084210842108440903A9B4210041E97FC0FEB68316762DCF6844610888049B08E0902E610208EB0041D21108E610842108421084210842108440AD4D942D2D9513CE6B620795C975807A816D6A03CD6DF71B6E2FF004B228A68A144A98F55327212B961C162A606E189361AF40F1435CB08965FF294E63B1CC0B01EC1DF6F38D3C3F8A0F3927D998C94C91929C537212B2A8C5351924A9612F4F4FD46724980F1166CFC3A5B6267515142529BDEE081F473FE9C3C0387D3E094B8A55CA972EA57202BBC29752410A0438048EF12E92E7425CB061D41C4756095B1163A6BA69736D6E4BD86CF1B007F0D366050719786565452688B9555430756F1461BAFCBCA2521F91ADB7569BAB3827084A4EB7E9751905A57A94DADB75094A8A8148F5F2A27833E549A7F14B9210124386012FA300C19F9FD63AAAAA62953924E85403826C1F90BDF9799D4131B0C34FA145B0370B0AD2373AB47DE3D3600DC6FD77B036B45610B37CA03B3B9DC8DEDCCF96D6DA5AB29D1F9F4275DCFE91C852D035592A2ABDEC3E5EE40E9EFF58890145EE9037D4F3D989FDFE929692A660ED7D5B9347CC7275925C0B250A6D362DAD41255AAF7500090426C2E6F617173B8B4D989C892B749510E3A14870C4B6BC816717244474F2AE41B01A1E7A92CE03B5BA1EAD7D18FF8BBB1961D5D5786FC0CEADB7EB32CCE259D532563E2A5D970D092DBCB4121C2CA88202C02D9B1B288B18B752CA975B5193123DD49CDA90F606EE2FD18EFE6F15F2E5CB6770FA12D6035D1B5F73A794693201698E7B6EA14F3CAE5AE59492A536D9FEB2549D1B586C95157A6D1578CAB0FC16405E05304E9A43148046BAB93E77B9D40F3E16E2E0D9DBFBF97F8BDE33AFE045C6D4E70DDC51D172971254D3FF4D7399E56139E71F7969A66199E9971BA849559C973E65393B35229930B9665E712A9DBBA10DEB58D0BF8BAECB29F8AB822BF1AA697295898C3D73E7CB5A56A99316A081DDA08429399398B66284324DC1201CBB87B114226CA4155F380AB8649626E753A36E5D88B1263F429712C89979A61485A109974256DA8299529B68257CA522E85252A05374F955D52542C63E587B4BC1EBF01E2BAEA3A89264A935335013A394AD419AE188040E40477DE1539132421492E08076E5B0D869CB7B36B505C24156D6B0BFE9D3DAD1D775685A56952C315005BF5F5E5B45C0AAE07325FE67E67EF9453E6E9BFE5FAC524090358748473AC414404D8F53AADF808BCE132D3DE77930003F95D892DBB7420EACF66EB094952AC1CE520F47763F51BC7C1C4EFA65F0CD79C2A09535489E741BD800DCBB8A2A247A0DEC0827B46C376254D3311E36C26928D39E68AA9134A458E513439B1E874E42313C70192B0B5B0043004E97BBF262395F58D4B7C2957F113FC4D546C541FCD09E710E69235B6B9B994B6A04F40A536B1BEFE5DC0045FD71F89AAA12304E1DA252DA7CBE1DA24AD1C940CD7D35235B58FA34769F6673133CA3BA72CA0E0EDA077E4E35D6CC63316B3A80037363EDB903E91E6AE2293366A8A468B53FA98D8947E50FAFF0078A69040DFD7FC459A62160DD26C1B6D6F15C8DFD3EFE713417F9123706FEC3F68AD009D2112A39C8AE5F31FBC6B5BFC4959293D8578B9C0D9A4C53DD670FE62606A731519C505043B59A1D5AB2E3CA2A2AB95094764C7C82447BD9FE9C5C6D4B51D9DC8C297350152D4165C87509B2254B091AB5D0E7A5F58F3278BE95CACB06208D18D8A8D980F61FB46B57CEE5A83695EB4A755943B8E62BE43F1FD23D0B451A28A7CEC8434D98A592E2E4DDFCAC1BD6DA475A53CBC8953867516E7EEE77FF11CA26E807D6DFBFC445F29D7952E1BCDF99E9F7789F14E219AB37D1DFE675F6E5A73D842114D1CFE2903FA8741A7D6F0843F168E6BF6FEF1239D07CFFB18953A6AE5CB59964F785242403725C37CFEF588913133C94A7313637E4FE71C995A6CF4F3CCB124C97DF9871B6589746EB79E7561B69A4FA95AD4948EF73D7BC627553A6D252555762CB32A54B94B5669849484A743A9D0072C09DFCA3958795CD0A4A4963A1536AF63A077B6BD5A3F41CF012E08A7F864E1B99CC6C6545FE538E739C1AC4C2669A099C93A126589A7C8254429486A69A95969CD09504A8BBA88B931E0CFC7976F52B12C46AF86E96A52BA294A54840490C52A27328B7E6CC492333A8021240668ED7E1AA254B420E5736B5AD70C2F63943FA69B88CF280802C84942412024DEE3737EBBD89B91EC4478D756A93DF4C54850295A94B600B3A9449FAF93EF1D9D252532D20F9FD3E87D62316F9AAB126CFAB72FB689B08A098B0A7DF603975FF10844984210842108421084535024FDDBFBEAF4EFD47E1EF1588952B2A54A372013AB071F7FA4226009B5D23F1B9FD0FEB102BB80E01162C0B39FA5C75F9BC227D27FED3F844A3325B6A0F4FBB420411D411F3820CA53955883B39047A3B75D3A6F088454265D3AC7B86757D0DF4842E4F5378A79A84CB5654B33025B997FD1A108970842108421084210842108422520907D01246FE88BDFD8DFFE7AC5DF0341FF0075C396C1BF132EE6F70AFF00163E6D141884B0A92A24EC4F930219FADB6D4346887FC4CAFCEAF8AEC0ACAD0F3E0E07A5069B48251C81569CF8ED7E84CA73436AB850558820EF1F50FF00008B4FFC0E926BA33212942C921C20CB4E501CBB39BB753B3C748F1120898B4904D981D77E5D430058ED73AC73FF00877BC50F0FF0499C95BC98CE1AFBD49C96CE6A8D3A625EB69716E5170C632D4CD365E726DC1AD1292932CC9D2A56717A741E5BA5C17D4A3E97D1A02E6A948B8CAEE1DC11772FB696D35F4EBA9D2CE77BB82EDB10496F3DC1BFCAF1FA44E18C6341C634762B3862A74FA9D067A465A6E995B9175B7A5E7989C4F312A977104821614149D2075F58BA051D4BEBA13A91B9BF9368FE912F22B97CC7EF1D9DAA830F21B080A4AAC752549F30B6C4281DF7EBEB623D601B7246F6E63471BF9432AB97D22DD3886E21F2A7874CBEC519A19B18A6898530AE19A7CC4D4F4D55A65B61E9D421B71C3234F0ABA9C987F9605900281D3BEFBF1356E05D8DEDCF466DF6B368DEB13A58660D7724DFC98F46F9C7E54FE2ABC74563C4178B8C5B9CAE4C4E1C2F4F666F0F604919A52912B4DC274F9A3F04B6D92797F15556D4DA92BB29C713284956D78A39A3327762E0B6CEDABE8F7EB6E6D13D80B0167D99BCFEEF18D98B7AE4289203100D8E96F93F56F9168E79F97DEB1DB702E239CC278AB0EE2191506EA940AE48D4E5A6E59CD0F32A62690FB3A948526CA4B2850513E9B82230FE3AC1C62DC3B5D4EA405A0D3CC95312D981CD2D41208B970BCA459EDAC5561072553B16CCE1DEEC6DD3426F1FA9670479B433BB85CC94CC433089B7EB781E88A9E792A0B71CA8374E956E78BAA1725C3321C2A5124924F61B7CB97C597670AC1F8EB1298B9441975B54E5807095AC39B6B6B0DFD9F60700A90A9090EF9909239BEA396D6B72D62EC9E074FB0EBF88B468662E3255996E5921803B36B19425CA8747FBF7312B3D07C8FEB16B8897A0F3FD0C15D4FCCFEB08893A0F21F48A6BE83E7FBFDFB45DA816020A7FF26EBCFDAFF3B17885133F8D979DB7D4027C8EBF28F38CD99844965C63A9D53A5A12583710CD05DED65314F98706E3A5C8F7B7422F1B65F0B346A99DA9614B667EEBAFF391B06BFCF5D34C538AAE84BF2D1CF3BDC7A9E46FCE3564F08C6D7319759C5592D8D355CD5AC4B7340009129301D1BDAE47FEAEFEA3574F5F4DBE2CD229EBF0B4920146074A0BB6A0CD2DE77F33B4769763F2DF2962F98DDDCB59DF51D7E96B465F7A479C33D6A54E98C4B672D761AEB72DE87CA362C060072845BA6AD4545F4FD9C7BC57A3F2F9FF008FD21125C91724FADB7FBF78AD46A7CBF5108E226C7C1F19DE0B4F18BC29D79FC3B26A99CC0CA8969FC4185A4DA6C7C74EAE5A5933B51969274243F3C27A5D86E5D896438EA4BFCC096C294ABEE1FC0D76D5FF0012C5E870C9F53929E64C44B9C1D4A025AB2A145AE73252E52C1C1D2E43F9CDC4F499D2BD0EA43D8EBA1716723A0D06B1F9C756E9351A2562A547A94B38C4DD2661EE636F4B19679A75A714C3B2B30D290D943CDB8C28A9B52526CB0A293AAE7E8338771F18DD248A90B42C1968216852568525690A0A4A92485020D8E8085070416EA1AA94254D291D4EE2DB38B7A7468F9BAD164137E6BE0ACA7A048476D3DAFABD3AFC84675217E1D5BCF4D8EA7D3974114D118826ADCB69B39B020BB5CDAF77E50D611144A34A765003910EDD1DE293854748483E5209B5B7BFEBD7A7D7B4239FC29FEBF94576D066661A4061B702BC802DE2CA12A282038541C6C158EA946A3AD5646837D3168C571397858913E6A4A922602A00151290E48600DB726CC05CB457E1F4C04E2E41195EE05AE2FB7DED1B217826F852D57883C6949E2033A69150A6654E079E6E76834DABC9AE5063AA8CA4C85CA2D2C3ED365C939598487C2ACDB534D4B00A53C976CBD09F8C6F8A6C1386B876AF0AC26B244BAD4C832E68913524A49967C2A54B252E34201707C2A014E233AC2F0E4CCC85B706E350DABB3EDD5F7DA37B6A733234A97A653A932865A974F9344B4AB01BD12F2ADB4D169A6A598B06996DA42434DA1A4A52840094009000F99DED47B40A8E38C5EAEAE6CF54D98B9F3157249578CB00EEE436D6DA3B3F0CA04CB976172035C83622F6B8B73D343ABC72DB37403A8AAE546E7DD6A36DFD2F6FA475685AD28F182936B10C6C00B69A90EDD7945F48CB6E407D044F14D3261248D411BFCBD5BEBCA38844984210842108421084210844D4C89AABA65A8BF263FAC482AB9015BD839DEFA74FF0F103A7FA9447A5B56FF86DB7E31552F0CAC9BF92513CB5BF93031095582893AB0777B7CC40AD29BA82D4A237B1D76E9EE7FCEF157FF1DC448FFB0CFD2EDCF43B7AC449582A00A89726D7EBE8D1444E952F416C01EB6FC2FF00BEA773D224AF01AE95732D7A12E34F7D74E6044C0800B827CB6DFF00B7B47209BF603E5B451AE8EA2590152D449BFDD8446CDCFD4BFD62112549524B28107AC2110C210842108421084210842108A0F95843AA4B6A559971B4DBA5D6855D42DBDD3AB6575DAC3A45D30EA8EE6B284BB659F2D4DB125635B7D878A7AB4A4C85DC151492C5EC0386E4C777E76BC69B1FC509960ED371AE46E67C934EA64AA987BFD34FCDE93A04E07A7D7A1C73BA87392121449E9DA3E913E0031C54EE13FC30983FFC24B9A849672651CD30870EFDDA4826D61B474BF11A1A6662C0BA92E0B7E6240172DA9BB967363A46A4295292CA5B6DD1F60F1967E592E061B525243EA7004A9096DC1CC2B4BA08536AF3852542F1EB360159DF216730FF00B761ADDBAF37FEF1D753D0339F50390626C3561A12DE4F1980E0BFC7038EBE09E52570F609CC16730B064AF290CE0CC7D2D51C45252D2ACE94A25E5AA3CA7A6E59B4A404A3913C8E5DBCA5317DCE797F9FF3B3696BC53F76798E9F7B7CE32A158FE2DBE2DA7B0F3F4AA4E45E50D0F104D36A73FD4F21FEAE985D39E29D3732957AC4D49385253CCD2655C45CD88B6C78CEAE9ED1CF7679C60AB8BEF123E2C78DDABBF53CEECC7A857686E2E615298629B309A761A6CBE525E0F50E404B493E404B496D5372CEA9002B96A054BD52E62CB82C1DBEF7B7EBE91125395F7FBFBF68B0848242B5F976404A13B22CDEA0D809161A5B0B5040B79352B4D813112015B01FCCCFAB72EACCEC62284550A64B1B3900DEC03B1D3FC984519770B538D36CB652E38A75C538AD92B215B7FF0061BD937B800D858136B1932E761F8BCB9803242C39E63333685C73F23D62A685C4E770CFCBAB17B6ADE6F1FA2C7804623A9E20F0EEC0E8A8AD6E2A8789314484B2944A9425FF009ED40B6D82493CB69284A1A47DC6D090940005A3E75FE3EA5D1D0718574B960054C4A66B96752A6CACEA249BB924EB772EE63B77872A9D0904B949200B80CE40D98581DFDA336C5DE6300AB651036B5AFBFF00C9B5FDFAC78F58DCB51AC3340F0177D2CF73F63AEDAF66493992140100A47B80C47AEADB72788B3D07C8FEB16688D7A0F3FD0C15D4FCCFEB08893A0F21F488100F500FCE2A695653350068542DD4106FBE8229262F254A03B38B0EB71F53AF9DE2DC78BBAF35863863CF4ADB8B4B224B2C7182D2E93A0A15FC9274A4A542C52AB8D88208EA237BBE12E93BCED27095650A51128804ED98ECFC8FCF4DE31AE23567C8356171D4960EFADF7D9F5168D797C2429625385F9FAF21BF357331F13CFB64A767105BA579F71650BEE09B9BEFD0C6FF007C60854AC4E8C2CBB61D212E48B001561FFC4BB0BEBC8BC774763D2925034040BF9B06D762CCC341B464F96D940D4E5C4ADEE1409D7A8F6B83ABFCFE51E7F4CA0CE55307F3171AB17F3BD83F9F222D1DF4410483CFCADB6F04951173D2FE53B6E9EC76EA4F7277F58A199879672837D1F5E5CADCCBBEDB3456205B5BEEC5DBD34F567FA09A2827D1F732F3170A1ABE87C86DD7945721DF6D3E4E3D8C228226C656D72C971B5B4E279894AD2B94D684AC4994D890842925B98429775A913699842B5149051E58E9EECF38EF12E13C564E274C90264A525410EA09749CCE7C43981AB5AF1A1F5D86CBAEFCE5409724872E79B696E8DA078D5BFC5D7C0FDCCE198C499F1C29521893C67301754C5196B2A24E4E4AB0EB616F3D37410F250F9A8CE9D4876584CBADEA4325A9649592BF71FE167E35E92AB06A4C2B8AE64BA6026A2409A939D7265B240999495A94847894A968198870963AF5963DC348913C99254A195C0F2727A924EDA731BC69B79959499899495B9EC3D989846B784ABB26E29B76955BA45464A765032A521C4BAE3ECB4CBC1D5001A7194E83A092557047ACBC0BDA3708F14534B9B271591512D60144E92B4B292A1E152904954B2774CC0141AE2E63119D86CC960F8482350AB106FA73F47EBD3CD94A2969978B6B6D95FDE71652BF9E94A3CC3BECABC65B8AD5D32539B0F9F26706F0E69A87E8E1C5BA86D6E7959A626A50E421EE6CD701C5FE7FAC5343E975CD0DA54A07A1510DABD0F917659DC8D80FCE2D5438AD4075622AA7952C6AA0B48B737CC76BE9AC4E96BAB5003BA6B13A3EFD2FE5E7EB1EB796B9399A19AB5B630FE5E607C438C6A736FB12C893A2D16A53AEA153074A16EBB2EC38D4B361446A71FD2D907EF01BC63DC5BDA870870CD2AE7D562D4B4E10852D4B9F3A5A41081E2EED24854D2F6640262E12A4CE59F12147664A6F7BBBB3245AEFCB9C6D27E1C5FC3CF8A5AAE61CCDAE31E5D990A7D3DC62B74ACAA6A6A5549AA21452A63FD4EF4BADC9944AB4DB81D725A56664A67E2D2CA564B21E6D5E697C47FC71D151E0B3F0FE0D9D22AEA565520D4294A44C424B85CC9212A4292E4300B05412A215768CB700C113573C89E0A424666001DC1651BF319ACCE1D9AD1B75618C1786B085028F84306D26468986282869990A4D2A59A96939697611A589546848714DB36400E2D6A7DCD00BCEBAA52CABC38ED67B4CC738CABEAEAB10AEA851A852D4A4898A520151777255D45C926F1D8B478549A420A545446CD61AB5F5B0D198748EEC6E41049B137B580B77B0DBA6DDEF1AEB242535499A19665CC0A214FE23989F2D4B10DA7CAF92E7996059D830F2F705FEF7B40000580007A0E9BEE7F3DE2662154AA8A954CC89960B78123C36003B6DA3DB9C56CB59989CC753F7B5A2316F25EE6238421084210842108828D813FBEB08453D67D07E7FE610370473895D984B496DCD2A754EB886D1288F2CD285F438E8D434F2839BA55A6DA48B92482737E1DA2ABAD9F224A64A0A56A4A4A9419C1DC5C10DBB8726EFB45B27AA6A3358101D947460AB037D483AE8FE60463EF8B5F13AE153835A8AF0DE6A62C9D99C70C3466DEC1F44A3D526E78CABA9E6CA244F33293324CCC2D97192B43CAF315A9484845ADE84F62DF09D89768D488AD934ABEE1D295CE05089409DB3AFC36D0906C436B18AE23C41328D5972A09B96D4B790FD7CDF718A299FE270E1755509C9597C9FCCA6E9EDCCB8C4BCE3FA01525B274B8F5A4529425D2362528B056E7BC6D9A3FD3831A5D30994C844E51979D91514F30B11A242145CD81B5C69B30C7BFE71588999532527501D2751D490C1DEFCDB945E2F0E1E39FC1671158970F608957B16E0EC5F89A759A3D1A8D55A44F4E2AA15498712CB01AA84AD3448B52CA7149054F39E54855D63631D15DA5FC10716F06E1B5B8A4CA296BA3A09626542D351216A92145921684ACA8172032803BC5DE8B8C2AAA16997324A1256AF0B2560DB5B92D762DA8EAE1E333C8750B65B75B55C38D21C483D6CB485209037DC11D3DFE51E747196152B87AA66D3D4251992A524D8120E80009BB3B73E42FA677433D7529CCB0DB962086B3DF66F4BC4CDA8A9373D6FE96FED1D4B5D3A54E980CA0C2E5FCFD2DE515CB00161CBDF5BC4F14510C2108421084210842108421100A5A15AC28D82569D040D275A0A2E76B929D5A86FD40BDC6D173C364A674E419812132CA54145C174DC5C96B90367B96DE2867294B0A9792FFD43467B0D6F76B1F48C1F78F5F0EF3B9DFC06E28ADD225BE3ABF93B5293C692879497669FA722A52A6AADD929E616E5A41334F0E4849484DDC2537BFB3BF00BDAB228F1AC3B87A764FC3CDFFA2CC1694AD26A11DC8512A2C120AC28822E1F78C131FC1E5CC96B9854429F336E18B91A1366DB4F211F9DCBAC242E612A09979D9598026549492DB93330CB40B684B8569525B975B24A55AACFF302AE9F20F7DE9D72B0EA5A09D44BEFA5D4651395981091676236D4BF50C747EA1C425A244E0906D99CBED7F204B69BFED1B9E625CB90A08D04364B49575DCA5BD29BEE7A01197C9553CE9456898ACCC6C49D586BEADC9FD2F4E0CBBF8AFB6972C3CDDEDECD122920B61B0549B1F2AC13A80B92527512160DFF00AC28FBC5A26D55489FDCCB4B8248CDEAD7BBFAEFCE39083C99CFCF77E5BFB7510D3A55ADB3CB2400BD0000BB5EC4A6DA41DCDCA40BF7BC5C66CAA944B96BCA08502544DEC1BAF2EBF38854876771CA2A95950B102FFF00777F7DBA0FA0113A9E7A12DDE1CAC43BB59B4170DEEF10641CCC4915E2BA9588497B101D880E376D7D7EB0C82FAE85B4D768AB2D2F35373B66D242255B6420E9014E3AFA9012C8240BA8F994948DF42557B9DE302C4EB2761B4F88CC9A909935256524D9D25CBDCB3B746773A3C4FA04E79AC4DED61700F98040F2D79E91FA49F823E5954B2BFC3F32A29959977A5EA388BF9A62979B79010932B5B9F7EA54E7191A52A2DBB2738DAC296544820831F389FEA0F8C48ACE28AEACA69C954D44C327202480992F2D25401B2B2A466BB66D0691DB3C3F4BDDA50D7719893CF52C5F9D9AEDB978CB7BC84EA42526C13E9FD574926F7EFBFF009B9E9E541AB9955493953929CE836B3120B7CB571EB1D8D4F3660484148621DCEB6D0EDAE9EA2228251D3DC0BFA1B1FD62D315840218C0EE49F584722C00E501BAAD6DB6DFF5FDDBD62A29C01325AB56580DB17205F7DF6222DB5672CF42F7091F57F2D631DDE2B5881FC33C077105506356B5E0CAA4928A090AE5CE484DB2BB58EC3492493716EA0DE3D1AF833A3FC4769FC3632002754D1CB3624655CD0920F201F5F78C6F1D39D2A51B1082433D9873DBD75D9A30BBC26E63CB70EDE1A985B3326685375896A1D0F106329C969242DC79C2A69B5143896415F2B4C9750028951F30DADE9A76C9C0187768DC65418355D4AA52E7CB954D4E73A1092B2B284E752C654A493724861BDA3B3FB3BC5E6E154FDE225A4E59654429CD807B3107E7A39E8395C39F8B470DB9F330CE1AADCF1CBEC6ABE4BA9A3D7E61B91A24E33A948725E42B73896E9EED41E213C867E35C537A55CD695AD24F4F71B7C1DF1070F522AB30F9532B29C67C93259CEACB2C02573252495C9410A012A5848532B29394B64D23B52A85D59933A5CB969CF95C8617533667B91A101C8B68E2326D4D9D91AAC93753A54EB352A63EB52999B61412C960E92DE9796794E2403FFBC825A58DD048063543887B3FC730054C159453529964824CB2EE97D181049FB78EECE1FC670DC569D33573D285901C0367DDC392D71CC5F4E7CC2928365EAD4BF3B45B42DE60B7DCAA71B0A96E66E9B36161646A201D2AB75657896A4AE5AD25265AC2559ACA7215A03729196E4020167D445FD13654EA85CAA7216424A831770E3EC060E1DB94422D49A5A32F9D6A4F2BB39B5B61BDA296A17884A2ACB252520EFC9DBAF22D73FA1CB602803E9B9B1FD8FA46A6D64D452CB79440531218F4D2DCD83031A7250A7D07BE9D03F94533A4297B208294801C24DAC4EA2C1494943C41B15B85C6EDA6C8D8DF20E14E29ACC347E2115B364290B7C89594E801D0697DCF2BBDE282AF0E4D49CC407367B3867B925DC17D031FA45B2E737077C35F10D28FB39B394584714B9308D2B9FA9C9BA8AB85EFA5D13F497E43594151524381609FBC15B46D8702FC6063BC1A6549958A546594438EF96C72B657014C77D45BD62C955C3F2D600CA0A8001C0B3BE9CFFB0DF58C5E639FE1DFE00714CFFC7D2A4F30F09A9D5A9C72530ED7294892694A37B36D5628D545948EC0B86DEA7BED0E0FFEA498E224A51515899C84801495860C35BA0853F47663CDA2C53B85252941425B39008FA1BEADB802DBB473B017F0F9787EE089A95AACF61BC758EAA52EB4AF4629C414CF82514907ED19A452692B50240B84B80DAFB826E22C73FD4B2BEAA96653535404050621014496046A4957931E479454CAE1496E3F86E43ED6D8900581F36F48CA364FF0AB9059094D12994795183704BA9535CC99A6D3D7333F369B12E73A76A8F4FB892955ADCA2DF4BA6C363A8FDA1FC59F1071AAE6CA4E275094AF3040EF941290A3A32944070C76BEBB45C6470DCB46881A07B0D5EDA7AFF68B802D2FEDD209534FAD243456A3CB1637B2D454A091D02104277164EDB6AF625C4D8ACC9F32AEAABE6CF4CDCC42153338751241035D3A168BB52E168A45664245C312CCEC1B7E6DF3F6AEDA1B6980CB292D0B82AE8A277B904EDB1DFDF7EB7DE310AEC56755921CB1249725F4D413CCECDA5B945C04BD741E9AF589A2D928B2C1FAEFA3F2EA6F0C8798DDFA72F3F942139414B2445520327D6DF21FA4225C47084210842108421105024103F7BC2114B42BD3F31FE61083ACB730565C4A94E725B61050AD0E369BA1C5AD2A208079884F404907E5191617C4157854E91340CA996458A487095066D1DD3A9B802C766A59F2CA9252DE139945408B924F858F42EFA3DB78C50788D7856E54F1F5444D5A6E69583B37A954D759A256E4DC684B54912439524DD590A4296F3AF21B64175B7594A13E45242AE63D45F857F8B64F079A7A2A89C9974CA64CF91312F2D76CA490AFCA46A086F173DFAF71BA0330AD4525D2ECC2EDA9D3E9FB469FD8E7C0AF8F9C258F5FC2329978CD729F3B53989495C4D4F54C2A98242EB4B737373A669E91616E369490970A097141B480B526DEC2601F1DFD99D360495AAA64C89F2E9100CB992BBE54C9A000532CCB0960A21C12E52EE7478C1E561D52AAA00CBCC1C80C72867B6A7ABB0DF4DE3646F0AFF050C37C244DD1F3A73C5F5E31CDC4B0918770D38BA72F0EE169871252DD4DD522594F4CCCCB2DC53C1B44EA14548000B98F3ABE27FE37F0FE25A2ADA0C365CA954F39535FBBCE833DC14A7BD656553302D9585890EE6332C3F0E29521653704036040075037F5DB7E51B0BA5A7D26CE0474B59B1645EE41D092A25290774824D93606F1E2F717F14CFE2CC5275490C17354A4A459DDC8275007A8FD23B0A8101094A5CB300AE570496D76D6F7BC5740201BFAFF0088C4A7D3AE9CA44CD4876E9B7AEAFE91725104DB60DFAFEB13453C43084210842108421084210844149252481B7FBC5DCABB8A24292D9D60070EFB820FD7E7B44195198BBB9171E96FDCF9931D4B17E12A563AC2F88F05D769ED5528D8BA8D52C3352937101D4993AFCA3D4A98982D5895FC1B336B9A510086C37AD5B24DB607E1C78FAA784B8C28EA3BF989949A992ACD988CACA4D9DD9833F4B748B1E37202E4A99394906E45896DCEC1474B74D63F324F11FE103177075C4AE60E02A9D366938597589BA9E0F9F32CA2C55E8F3CF2A68CD4BBC8406DC4C9256ECB39A54794995B28274C7D47F621DA8E1DC75C21413855A274F14E844F42541A52C20250487CCD3192CA2594B2402EE0741E39473133D6A53B0248E44B9D0B5F6075B73DF1FE494B41F5A56860EC1E5A4A5B27D02CD9255EC0DFA6DB8BED0E01202E43953BBD891A37E9ABED7BC63D24ACA838043E8075F7F4D87A4127500AB11717B28107EA0EE3FC6F1C57CF9545519D5600B12A673E7EDA69660F17695977019C00FA91E56B866D1C4462E1271DA5A99252328290407617E9B33F43E711D56564B10E5C103A35C97DDFFB59E204D85C02AF6482547E406E62CB5089B5330094EC5F4EBA7D1F52DCAF14512ADC4A0849D4A511750424ACB63D5D09BF2C0E84AAD6317BC33009D33C539797437394902E6C4FCECDC85E1F7F6378BE2F0FAE183147167C4F658E55D229D3935439EABCBCCE2BA9B2D2BF97D268ACA933E2A53B3A50A979748430991650F2D3CDF8CBA3514DE3A13E297B44C1F81F826AE749ABA693574943313290B502BA8A82912CA72A5416C94A96A54C072A16129241501176C36816A9C8284AC85AC6637602E75D1EC3ADC98FD3DF2EF03D172D303E14C038740146C214692A053BECF9444A52D8664E593A6C9D484B2C2436E81A5D400E2494A847CA476E1DA2CDE32E22AFEFE7F7AF5339CA959B55AB5724BF33A3B1B5E3BAB04A40844BCE360FCB42FA33BEFAF21667EE2A5152C13D0DFB5B7DFF007D7E5B46B55584C9742000958771AE876EA7F5EAD97A5294A48000200039FBDB4601F95A2316E8E610844A080E01DC807E809BFE83E71532A5A8A52BD122624BE80870087FD22DB565A7241D0A43742E6E796C1F67E518E7F16AA62AA9C02710EC042D7A304556642504851F87A74E2EFB5CD811626DD2FF005F4F7E0895295DA0F0FCD74832E752AC28EA32CC05FA806E47B5DE2C38A4BCE93ABE52006D77F3DBC8C629F80EA3D1F327801CBEC2755690BA5E22C195BC355965E097528E66A42404281BA8A660957A022E3711BD3DB9712AF867B48C2F24D3965AA9D454090E0CD2A2C431B696B87B68F1D8BC1D4A55484B0BCAF3FE50E35D4B7AF9C599F864704BC31E786767125E1CFC4FE194D3F15D36AB338DF26F3370EBCE51B1CCA2EA4B9B96A8D3999E78CC5366A59AF83A53B4FD14D002CCC84A965474FA6BD9CF13E17C71C3F830553C9577D4C9919D490A2B992908CF9C29C2923BD162092FD63A2F8F311A9C22A67996149289854A0C6C924DFA3B10F66234DA2E5B357C377C4FFC37AA350C53C36632A871479234775D989AC215895157C40C52412A217214F32F516ECC35A50EA59436A372DA41168B0F695F0D9C318FD1CD51A3972D73659095C84A03ACDCAA6A4A54480ECD2F2EB6BC41C13DAC56534D4CA993D40121242892DD1DEDC9C9D5ADB470387FF151C99CC6AAAF04E6F49CE641665B73424A670963075548A6393E85969D4306B0D30FB331CDD9A69734ABA0B9E4569BA7CE8ED4FE0DD5414B515B83D2CCA9525456A549979B2CA2EEB58427C21C8776CA4DF68DA0E11ED5A9A4D4226D54E43A9012332AE49666D01203BB12D1946959C969F625E6A45D4CE49CDB297E52765487E4E6D95A42D2ECB4CB454CBED9410A0A6D4A0526F78D17E32EC531EC0F391226808249050A60068E1AFE7BEC63BF708E34C1F18400552D456029C1BF2D7770496F72D196F56A005C5813637EA2FEFF002B75E97F78F2FF00BF993484AD5981617B8B9E5D4DBF78D4488800D8A813D3A9B1FAF5FAFCE26FE0EA08FE1E86CEE75D1AD6279743711C15006FF7F7F7A44E48B580B6FF005FDFD7DA241A59E8254BDAC6F61EC7A72F9C4A52C906CFC9F5E8DA37CFCCC4B157227CA9285A095124105859CF2FA17D625162A00A5EC5891A736B7907B4352D3600FCEE3A0DB6FF001140996262980B9DDFE6747FB3157E511BDCF9AE6FD6DB7EFF007BC542A8E721214901B517B8DEE1DC5F43F28E09035DE224240D893F3FF88905537F2CC2583100927D6E7605A380A074E46DBEDE9102A27A988529E43EFD62288421084210842108421084210842108401620F22F08858837DAC45AFB8BEFF0081F9C5DE7D7D3CFA79728CA01684A428817B0E7E8393B728E087B1D220A783435590413A4828FB4EFB2564DD23AF4045C13EC6F5C3D5829495C998B96A076535F9DF62CFCB5EB14D32825D4A8E61B38F5B173AEB76FD045129426CB4B8A652E11A94A75A78EE7A8694DEB27B5C2869EB6DB7CB6571EE2341572CCCAA9CB9290429099854406203A6F616B91ABB6D16D9983D3A1D484AB324DD59084F26CDA0B6FBF48E616C294DB6D15B8950F34CCC6C117EA520040001B91DAC7F1C7788B8B24E34145656493FCCF9B9105246DD46910CBA54A41394EE410356B81A073EFCDB58908D248B836245C743636B8EBB18C2513128585CB05C5C3FD6DA5BD045D25BA40F0B307F7177EBE83D2D1088EA6A1550A0A50660DABBF58A849704B35FF4108A688A10842108421084210842108AA366EE6F7FE9F7215F5BDBAC459D73552E493E104240BFF35AFEF1689954B4D6196904861AF367F70FF62380B4AB5071B5AD971BD7F6C9170DB4B494CC03B0DDD675B6826D65A8102E008ECFA3A218261B2713933009F90AC31F1020B330F1176E9C9CB98AB9D2FBF940292E48FCBB96B821B4BECFB5B48C5FF8A07876E1CE3DF261747A77C251F3430C494F4CE01C5AE30D26EF3685CCB5419F5108E70A94E7325D37710A099B09483617F4BBE0BFE21EA306AC914788554B553852254FA69F34A04D94FE20925432CC00932D45C05105493A475DE3B8289889C424E662A0407BB72BDB63CC0239C7E773C4170E9999C3AE61D7F02666E15AAD0ABB419B5CA06A75975BA655D08511F1D241C69BBA1763A4A5C5825205C902FEF0F673DA4E1D8D5352CFA0C4A454C89E80A5C91302A6D292E04B9A42AF6D159520DEDBC7594DA0992CA82E5292468426CA0D7205B936A19A3C2086C121A56B6C7DD56C6FEBD36D8DC0B6D611DCF5144316969992D59B3872411F2D5AF700DB7E71679EB9921C242AC1CD8F32FAEFB9F4F388458EB7089D864C91E2244E511AF222E46C2FBEBA69789722A0CE2A05DD237DFA8FDB5815251E6585148DCE8FBDF4D8F7FCBD3AC6474F3A451D377F3572D3912E5C806C073D469A6CCDAC5531E47DA2E5F86BE14739F8A6C7D48C0394584676B188AA6F21137596D879EA5536556A4A54ECEF2D3A129495249529D6FEE9EB1D51C69DB4E19C274F3E754D7C8921085F75244C4A66CF0917297242522DE229507291C8C7294CC2B0132D6A63E2212484E9AB0D6FFDC47E82BE17DE1B181B80CCA992A6CECBCBD7339F1253E5959858950CB6A975CF3896E6DFA3D1D612B532CC93C85B49D2FBAAE5336263C06F8AAF8A5AFE3CE22E20C264D514D153CF9D4B4B284C272CA4A949054A7654D504833141294A9574A520B0EE7C07089628A9E6AD394A900ACA92CC54D662F606D72FF58CAACA25E537A9F5A14B5BAF14253FFE8CAF315F08CAF7BEB6A5CA1B513624A6E6C498F27B1FA95AF139D5014A2A5A8A9C97759FCC5F912F66701B522D9CC893DC2084A4F8776B1762E07CAEF7D2E62B9EA7D8F716FAFE7FAC5A14B54E4952B54806C6D72079EFAF95F6888542BBC09205F93B37CEFF007A4224C5642108A4BD9615E89B5BEA7BFE517E95252707993AC1489B6D5D985EDD4DCC59EB0955420000800BB6BA1F36DB945B1F19185D18F3862CF4C26E341D156CB3C5B2EDA0DD5F6AAA2CE2506D6EA952AE36B9ED78DD7F82EC7D5238FB0E42E677413918A8E50E09667F77162FEB141529485241205C063B13E6DBDBAC6BF7E129585CFF000C350C273CE10EE1BCC7C534596BDEED30F4BD21A964007A69710F10361B9B46FF007C53CA988E2DC36BD39CCAFC152CF3318E44925648CDA380906E37D2EC7B6B80A5CA994E5208538524656760030D4D8BB07FF1E3FC7B7FA8784FE27F873E3FF2E82E59DC2D8A6428F986994D4DB550C3689C9479972683646AE6FF00EBAEA5EA074F4EB1B55F08FDA952564B93844E9C094210BA74A882A13A58032203B933C14E66FF00DB1A18EAFED5F84FBE4CE9C99533553A80B105DB316360C598DFADA3786CAEC798573AB2D709668E1826B386F3070CD2711D01A6D697C34C54A5B9BADD61A482E22CA4825D2A6CEE0245C83E9A54572B18A394241CC952100AC1722DB9761724E839EC23557FDBA661F50B57E42144B17177D1B9DAFD4B726B33E2F3C26F84AE32E99333198F9754DA763454B39F0B8F30B4A4AD1B13484E68296C1718967251C6895171C4AE4FE216E36DE99845961568A8E0FA7AA90A156A4AB30BA4D8286FD141C5C69177A0C6AB04D080B5A128B2495101B40731E5BDF7D7531AD966FF00855F89B78794D4FE2CE157164D712591F2CFB9333197F58979C62B52122D953E52E48B9393752AABAD3295A12E538C83257650674A82474871DF6118363B267A974F2DE6053CC4CA493F9491E1486624016008B1360D1D9FC3FDA1D6616B423BF24A4A6C261360402D7B816E81DA36970B0E0BF51736B811F19270C548398A81662C1CDF63E91DAD348A44E6512A0C4F88B9B726B74D479444003A472B98B7001600306DFEFF00789126AC55DF500D9FA0E85B5D79FBC22DF316A50B926ED7DEC7DF58AC47E61D5C1F68A5A95AFA9FBDEBEF1262730E5D3D394558E4122E0907982D0844466CC362B57B984220D75842108421084210842108421084210842108421121413FD47ADEDE9F9C4CEECB02FAF4DF71AFDDE11384A48DEDB6DD3F41BD81EFF00217BED11266AE592125BFF008F87F7D6205120DB46E9ADFA444B681B8293ED6FD05FAFD077809AA9C72292A24B33BEA3A8F5DDB94490A529652AB824020682C35D351CFD22112949292410C444FC89E5F33FBC22296C1697EBF43114226545D6080DE116F530844884210842108421084210842108AD9011950A23C40920DF991E9F2880CB41254521CEA5AFA37D2115C6AA6A91DDAA6ACA013E17253A9DB4BC4712AD295A14DAD3ADB50214DDF485023717EC4F4BDAE3AC5C309C7AB303A9975745553A4194B4A8892A52335C5AC3789532521695664A4B8BB87FBDFD7CCC5947157C0B70E9C6261B98C339D18229F539E2D2DAA4D6E96CB5275CA629C49087199B53531CE71B590B49537D411BDE37D3B07F8B6C5783AB69E6CDC5AAA494E5412A9C4E64064A810A0DA58BEA395E31DC470B953A5A80932D9812C9D3AB83AF9EF68D7133C7F862B11CBD66766320F34DB768CF38E392B48C6549E5CDC9B0BB14B0FD49AA830D4C2D2755DC4C9B234148E5DEE4FAA9C19FEA19814BA4922A6A64A96A48CC944C4A19400723366673720EE491AC75E627C36A9A099681BECE0F506DD5AC40DEC62D5695FC357C5EBF5032F3F8EF02C8529974DE716E19E6DA0A22EAE5227258A0D920F99D5EAFFC74DCE59897FA84F074C4833F3CD50BA422B65200D95632176D34237E6D168A4E0AA89EB51019AF74B3B6BCB5E7BDEC4EB7F7C3B7F0CFE04A55529F50E21333EA38CE5E5E61A79CA260B658A6CA4E2104A972AF3D30BAB1085EC09B0D81D85E3A578DBFD43B095C89F230BA844A2B4A9328998264F4280B14AD265A7375C85AF6D232391C14A9490B9CC1203A89B002D7BE83A1E91B1C70F3C2FE4270C186E5B0BE47E5A5130651E4DB44BCC54694D34E57A7A61A4848555269C654A528D9657A10D0D46F616B0F353B5EF8B3C4F8B6B67CD18AD4CC5CE2B7577A5FC44DD810003C872D498C969B85E44801265A524070E3563AF9680E8CEF7BC5C6151528ACECA512B3616F32AF73F3DC827AC694E298DCFC56AAA2BA64D98A5542CCC2A52892EA24DC9B9D5B5668CC69E9D12252258481912000341603991B442317AB5672E4BBAAC7D0DBADCEBBC544228E21C8905D838D0C21114210882BA1F91FD22ED4931E47764B8CDF94E9721891BD87F78A09C926A90C01F0871FFDAE7CCEF1D76BF4D6EB545ACD21D46B6AA74D9D91712521414899616D2C106E370A3D7EBDE3613B1CAD386F13618A92B5495F7F21D48394B158B588F913A9BE8F8DF1385A120A14126CED622F7BEF6DEDEB1A9578653FFE93CD0E2E326DF0A61CC1D981375644B2C90B0AA83B361D2949B69D2DC9B4761717BF78F667E2150715EC9302C6972D0AA89B83D1AFBF09F190813014855F70097E7E463B03B259C42BBB5ACADA6B10A3700E523FCF4E8E3235C4C64DD233D724F1B65B55A579CDE25A04CBD2EC5925725354C61D32AB4950514EA54DAAC12124E9EA2D78D5BF878E3D9F87713D11A7A8549994D548292936252B48D2DAB1F7023B8F8D30F935186ACF72839A592CA482E00279037D2FAB8023D9BF86DB8A7ABE37C82C67C27E625650732786AC4FFC929F2332B299C730791352CCB2969D70BA532469ED24AB748E700529BEFF00429D976374F896092CA18CBA99089B212ABAD085A5D2E5F662E402778F3D78E69D54789CC514948EF08530213626EC2C1DCB72BF58D9B585256FB847475287594FA200B2EF6FFB4A9209B75247A46535F3A7CCA83292B5654B10D67CBD7AD8F90DA31B54D4D452A132D92A6399ACA72C468C49B9DC0F9888D4A5C4DB0A61690E36A4292B428056A0A4904588293704EC458DC003789B2A9973100AC92EC195A581B9BFBF5E9A71210A96CE49BB927F6B5C96E4FF004B076CA5E965CD4BAD0B96274A5E3E5E5286DA9C479AE0F5FBDB01D63E182AB05C5686B5722B644D4A50A527328283B1B10E069CB9DDE36997562B1211A12CE1F7D6C741BE9F2888BE94EA02FA479926E95FFE69D8581E96DFA137B1116EC464A64CD480CF943B33177E5F63AC4DA5A714E328DC9F4B3B6A403118B1AF4F5FD0C5727F3067DFAEDE4228FF005FFF00CBFBC4A89D15A108421084210842108421084210842108421084210842108A7A4A8DEE46E40DBA5891EBED78BB22585213C9817363A02D673BB7ED088A8816BDC5FB8D81F98BFF00BFBC7270F9934E6426CF7B173FBFC8F5BC4B5EA34D3D7FC72F58980E9B923DFF00E2FF008C4D93854C4AC2D40E5BD98B86E4C7C869F5890807BCBEC41F76B7D81118A7AD9195CB5C5EC3CEDF7D186D15708B60201BE977F50D0844C9AA0A50234CA3EA4C2112A10842108421084210842108422A25AC84001B7FA9EB084479CF21F3FDE1102010411707620C47292674C4CB2400A203DEC5C3177D8DF430D62555D7E5754A7D0149D2DBD65368FF00EA00045B6E87B8115F5186CCA701521613943854B2C4BEA1F427C99BCDA257732C6660C55A9058FA1895652A520A9A41084E90920DADB917DFB5FF006220918AE2F4AA025D54F484801B39CB6E5CB972710FC2CA55C84DF9B38DAC1ADCC0EB11BA9684A3514A5B24B606DA0ABA9474B5EC2F7BDED7EB15753C478BAE5841AC9C366CE4B0EB71F4B9F9F224C9A775A52919C312000E0680EC45CF2239C54712979296DF25F426D6E61BDADD2D603A7FB0DA2CB36BEBEA16262EA271580400144FA6AD7DF5B973B3419E521F225201FCD96C15AEBABEBEF133A43A517480DB62C86922CD8B5AC748FEADBADCFEB79F4B453660FE24CCA48BA8975907F95DAC2D7D5F6222904CEEF314A57997F9892EA517B5DAEDC80163E512C499B33B952A4A194941CA0BEA06966B1B070F170428A92090C5BEC8E86114AA515973E8360222844308421084220AFBAAF91FD227D3AD499A801D8A8023CCC5296FC64B27560DD75FA6BF28E3CB3A96DF4AD490A00F99245C595D491DC5BAFB5F78EDEE09C40D0F12613E260A9D2092E5FF00EE076B80DB38275F58B4713C90BA70A6B80F6DCB9E86FEDF38D49F0A497FD25F199E28B00147C349663B0711D31A02C8996DE666186F4D800521D65CB2424D9448BEE23DE9E2892AE25F878C0E694E6FC3D34CA22C5FC32E449988510DAA8CE501B16706F177ECD6709357F99C152576E65C33B87D074DBAC65E8A88494AD44A5F41679A36581B029D66FB2BA280EA0017006FE73702CA3C37C4AA9D3159128AA605F2E8B24687FCBBD8DE3676B29856503315669563A9663A3DB7D4E818B461D6978D67FC3C7C5DB2CF885651FCAB2A78800FE15CC4665D2A6E8ED4ED5AA14E7DE9E6DA050D4B38858D2C9714F14A5C705CDC98F74FE1ABB48A2C4308A4A254F49992928CA02813908014557BA524240166CDCCC69076B1C36B97553E6041B955C6FAE8E186F7B7CA37D7A4D4246A4D89BA73E89C959A4FC5CBCDB442995313365A1B6CA4904253A415056E2DB5AD1BBD324C99B265D582921400077530FCCEFA93ECF1D0D492264852D2B4948D1B4208D39BFD35E91F7D09558F537B74ED7FD3F3FAC0148486D5BC56B391D1CB5AFE9152B219873279F3D7AF90DB48D6E3C3AFC4630071CB960A9B137274ACDEA138C48634C02B2DCABD6434CA5E9F90610A5A9E6564BCB24B4D1414280D5A6E7E6A7E283E19E7F08D3D6E2B494F28D3FF001264A9B2D0405A43A8149CBAD803C99AE18C6C5E2926AF87B189945552A6A56898525494B243167DBCDC73F5393F9697286D494A91CA0B219B2CA872F4A4D81291D14542D6001BC791B8D19B22AE7A66CB20CA9AA9641703C25AC08F2EA1E2FF002E7898942C5810EC7D5C96D2C75E9A6D0D6359459408EE46DFAFF6DFE862DD2A997532D4B43008B973CBEB6FBE7572C85170E7562DB6E5F944A410A07D4DC5BE7D3E71488495A8247EEC2278F6F38AB109B1239421084440BF703E70BEC09F20F0881B0EA458753DBE7F211514F4CB9EACA011670E1A2052C25DDEDF7CE21A91B9D69B72D2E8373E64A9E0C009DB756B22E3B0DC9BED114EA49923F3149B9006E5839B7400EF76B3C495554B4AB297EA4683CECFADB4D623FD45241491FF0076DEFF00DC7E2220FC34EEE84E12D4A96A240290FA6BECD1CFE210CEC5BFBB7D6D03B5B706F6DC6E37E9FBF7110224CD985932D6EED74900799E510FE290ED9544DF41CA04D813E913C51ACA824A909511A13BF2D45E2722605B3021CB78ADFA449CC1D2C77F688A650CD9775293A39FB7313B2FFE49F788950001DF7892241568A1F61FD3D5A21172438B75B7DF9B44A1D4136DFF000FDFEC426485A081F99F93903FC6FCBDDA5CE9A8920152817D81BFDFF688958092AB1207602E7A81B01F389D228664F4E60A4201D029C12FA6ADA9E4FCE241AD940397F4F5E9D3E6368A80595A1652D2F4EA097080543D82756FF3B4433A8E6C9D4A577605377F2897F8F97FFB737CF28FD4FD22915200090A0B5AD47ECD3BAC77D4A49B59361B9BF4F73191E078362D89CF9326970DAB9C56400A449514B682E35D6F6168986B65306CC4B02CC1DBDF5DBA6F1E119B5C48E45E4A31F1D9A39A584304CAB4921C5D66AAD34A0B0AB72B94C879FE65C5824B605C7511B6DC0FF0ABDA1F16D322AA8E87BB42D29532E54C07C40102C921C1E676F41493F11080FDC4D533E89D87AB1E7E4368F95937C5CF0DD9F8B7E5F28B38B05E399B95514CCC9D1EA61536C116DD6C4C2185906E1434255B107A74BAF187C2CF681C2D46B557E1EA40487CC25CC6209704282198B6C7DB48A1918CCA9B51DD2A44E483FCC410970C5957E5D75F48B8F5A92D9097569694A1A9B4ACF99C49170501214540FAED1AB1C51C198B609DE7E3A59494BB92921C39DC81A7A6FE717C1532CF36E7AB35E27092A1704475A4A90B9D37BA436676009EB688FBD06C2FE45FF4BF908914A09363BED7DB71FDA2A2AE867D3292169FE517BEB7B69F3B47226021D88FBD6201609B6FBC5114A81620BF94460821C40A80BDFB5BF3F489C9A65A939B3253CC13711CC4358F7FCBFCC53C21AC7A1FCBFCC21110A04D85E390092C211340820B184238842272242A60CC086F9EA47E9D6108E554EB4872437AFE80C211241292082411B8D443CA1F97CA2726A67243672407D6FF006F1032F98FBF487CE38993E62C0BB11B8717F3D5BEFCF8567D3A1D016E8E7EA2263A7B037F4F7F5277FDFA77A719FF009883D7A72DBECEF10A12B2FDE17BF859DDBABFDFA4523AF7B7A9F4B91DADFBBC54A26E51762599C8BB1F771CF43134250CC43FB7ABBC4A4ACFAFD0111C2A7CC517CC53D136100948B0000DAC1FEF9C5517205FADB7F9C4225A941C317EBF58E47B7972DA110149496208FBD8E87D2111B6D7B8207F9B74EB1082E598BF97EA2DFDE382583FCB9C2DFF001BDCFE5688995FD27CDBECFCA20EF3FF001F9FF68844689531659293E6C5BDDBA471DE8E5FB7BB31F4BBC414A484906FA88D88E83F7BF6313E9A9672EAE549092159816BDDAFA8D00E85F668851295327A67380940662353AF42FCFF0048E1A11A1C41529210A7129794A3D1951B2EC08B12104D877E9B465F4555F80E22C30CCCC3BB9B20961C96D7F507CACC5F5A0C7DA7D389680EA0EC791BFB8E76D7DE356AF10BA2AF283C5BB85ECCD45A5E473129145C2F539B274A9E9A4D7A743E1C16092D0627D8F31709DC8281604FD09F6555F278CBB0DAAC3A914A33692928E7E55FE41FC35F78A05CDD41091A5D872022DFC31592F0AAB9289D98199359C3F3480E6DD79EA6326E410C32DB83ECC1E65C6CA3AF705293B1DAE7A8B7D63CD7E3B9F36831CAB934CE9992EA9697B06217776D87EF68DC5C08A6AA9255DF3CB04036B116F3DBE6F161DE22F91073A786DC58BA3B1CCC5F80D52D8D30ACD281438B9DA625E51A7879095BAD87B5A1C3A12B376126C4EE36D3E187B48A9E1EC6B0E9589D42FF000B50B97226F7633A84B5A92E5282A4025F29624003E7D39DAA707CEA8933A74B421C02A4BDB62581DB9728CDF78197174EF15DC0D601AA57A795318EF2DD8465F63561F20CF1A9509A6A4533F3092B5384CF2E5A61DD4E04A8E924DF7B7BC5C29553712E189155DEA664B04242C1241CA0DD3B104DC1D08DF63A3BC474FF00EDCB58525941459C31172E34D1F67D5ADAC6695B75B04A350D4908B806E77BDADFDE2E69AD4217DD29F33B7307D6DE44EDE6F18D216A98E54A0580243F366B74F7BEF1F94FE03CC8C61C15E7D619E27B29D0BA67C03D2EF633A54BA94997ADD0D97899F0EB6CA4A1C52D83328216855EDB98D27ED1384697B49E19A9E1CAE9699FF8996B1874C58FFF000F5931391092A374C99CA12D331B448258E91ED076EFD86D2E1B4F538ECAA7485B2A628E4FCC8FCC7A9209B3E86F1BEAF0D59FB84B896C9AC119C782679A9AA4E31A4CBCF3D2ED38852E9F52294A66E9EE21B5AF96E36B0165074AFED41D3BC7CFCFC53760B53C058AD577148509CD326AB2A48055995605838395DEF63A468A4996CB9E803289731480144EDAB8DFEDF68B8043885F4B127A2AFABA7517F5DC5C1E9F58D29A01325CB9D2C5B50A0C76E963BB1B45C25A598DAC1981F9B69EBABC5428242546DB137EE2DB5BAF7FD3DAD16DA63FC7525AE12AE9F5E56D7589D0890AD4F99FAC211C4220A3617F7DA2E1413E9E42D6AA849527296000249F523EDA39177B816DE2620817B5F6D87AEDD36F5E9F5F9C564BC4A5CC9E8972E5E54A9411C8DCB31B93BB5BD768A0AC504249BB9D003C8721AEB7B697F3B4AE2378BACA4E16060D5E6FE205E1F97C5D5C4D2E49D12E5C4308752E3ED38E2CADB096D2EA079890011EBB1DB6EC93E1D6BBB520A551531A9EEA48A89C10CF2E5384296C58901F4014A6DB961B5989F70AF12C872C0DD9DF9FA30D99BAB7BD65FE66605CD6A348D7B01E2EA6E2CA454184CD4A5464A6A59D71D6964DC3CCB4F3AE34A65614CD9CB1B36147B0893DA37C3C718703D55448A4C2E74CA1909052B4C95A836404FF0020BF3BEA7C8C5761D8CCA56444C55CAB52DB917B91D7D74731DE1C69D6D5A53BE9EA46E2C49DF6BEDF306DF4B4740CC55550CC5D1D6619512A68252A2649003B022FEE741D748CBA54CA75A33029BB9D6ECCDFA1F38982B6B037BEDD7724F6B8F9F4FC36DA31F9FC3B533E77E269CA6585282B2AC94906C6C18B1D01D2C6FCE28E7D4CB27B896A0998B60FA0176D411CECFF002D621A80EE0FB77DF6E9D6E3F6224CEC17137399724D9803339D99B21B73F5B4527FB7D5A9DA7A6F67CEAD07A379F99BDE2A2834517DEE36501BEF6EBED6FEFD768912787B1352ECB90CEFF9C93E43C3D753F588461D58EDDF274D7311EC59C6B7FEF1C05841559BB9BDF6EBB03D40173FB1F5BCC9C32AE8D065CF942A153834BEED256C5B42C1C3BF2720F50D39385AC826A2A07966398736243726E76B17B7235043616A5BED824E95CBDB9F71D43375A015DBFF0031B137368BFE07D97F16712D64A14587CF32D6BD04A510012CC400C59F7E45A389A8934A950494CC22CCEE011B12C5B6D8973D5E2D3F884E327874E18A9351C439AD98B43C39332CCAD68A14BCD4BCFE26A8948BE94B0D3C032E9B5C85BE2C7A98DC6ECDBE0AB89F88534CBACA498CB28395485B25CB9BE560EE4396D4F4894719952BC0A913161D92C8B172427C3A10924747BB0600EB2FC5578EEE7FE78D5E7B037065855DC0586029F9098CCDAEA8B3899C924A94D266E412C36F940986C075005410424807DFD53ECA3E12780B83282817C494F26656499328F712A5A14E72273A67CE56432D41CBF76263A983B391D95C1BD9C631C473E4D40A499F86A9505852905803E2052188539637239011884ADE55627CCAC46EE39CF0C7589332F12CF3EB9B9A98ABCECCBB79875456E3DADE987D4C25B59504B6DA5614005122F68D9552F86B862985070ED3C8A0A7CA10B1492A5CB9931219BBD9A8654D2D62542F6B6D1B7BC3FF000D726AE8E5CEABA50B564492148B68E4B1059DFCFDAFCEA765B620CAEC4725991C3F620A9E0FC754371138CCCCB4ECC06E6C349297DA71E4AD9712812BCC4A921A58584941165189D594DC2BC5F81AB06C5129AC33124269E729254826E4CB2A2AC8B05D4E90E6E1C3BC63BC7DF0EF4D86E0D5551434A13549BA4A10012EC18B0F201CF22CCF1B30786AF8CC612CDB99A5645F146FFF00A0B37A4D0DD2A8F8DAA0E215218B396036CB5A9D530B9771E09E56B701170157F4F393E227E128D6D155E23C3F4F2EAA89944F7414A9D4C4964CB9E908604120254852C2925254C49034D388784719C11444D91310A46A329018594A05B97CDEE446C2CC5498530DBF2B3099B959942572F34D2D2E32F36B00B6E21C41536A0A41B801446FD77BC7927C57D8E633C1F884E5D4D24C4225CC56A850B02CEE46C5CFA728C6282B952A61454E600116367FFE409B1B36FF00B7251720A892493737ED7B5877B7CBD63AAF17AE952EA9326620BA5012C0683335C1B816F58BFCCA89534A55254E32DC82E09DDF6D2F7EA6EE22AA3A83EBD0FBF5EBF2FD628D629A6CBCE900167039DB537EAD73EEC226217616EA7F61D6DF3115929D573ABD80EDFF003B75FCA31B9EB698A06E1C807A06D3AFDBF29F14741F51FBFA44308683EA3F3FF10844C94906E6DD3FC42113C21084211C85280B2881D090211314902E7FE3E7013546D98FADDFDFF5844B1304BCC82B7B8737E407BBDA108950842108421084210844CEEA6650B00B588236EBD3CE202B487D6DBD9BEB11B1B5EC6DEBDA2AE44F916133F3331D0DF980C796C1EFD6CCE391F97EF04EE76B1F5DAFF908AEA8552A69F3C800CEB101AE6E0060C587F7BEE5992AB73E7FD8C415A6C6C6FD41BEC2DDF71D3F0FC22D899956AFE43CEC8FD19BCD8D8C71DD21DD9B7B13FA923E510B8F51F888A84D456CA07C0592D7C9E9EBB6D6DE3932D279DAFEBCFCE29AF7371BD8589F4DFA13DBA8DA2B70DC465CBAF44FAB4FE549482DA723CDBE9CF945DE265A72EE5C87FAFBEA3DBA5332E99A28975A8203CB4A028EC12546C1449E8124DC9B802DB98B84CACA7ACC729274BD04C9602816FE7703EF43A6E62D9569050A2CEC0AAF7E6E7993FBFB6B8FE3F9861DA5D03860CFC914F2A7302E64BF2AECC36921C436F3D4232A85AD23CBE765E524288BDCE9BEF1EEBFC20E30AC47846BF0794A4915582D4CB20FF5CA91FC324877014A36F38C726A4CAAAA6984B34F956D0865073AE86D6076768BC5C3F566B1061AC395C6CA4B53D4E91714A053A4F325DA5059502459449B126C6C403B18D33ED870B9B87F11562CA487AA985C8D4859BB3FCDC3BDE3703846ADE9E952083FC2961B5D83F26D76F3E91CC9A944CDB3354A7825E66A1CD6D52EE00A69682DA91A5772414A90E2EF716B81BF48ADECF71D34588512CAC0089B28E6722CE1DBDBCEECFA45C78CE90D650AC241BA083BD883ABF9BB93B92072C69F862E70D47C3E7C5531EF0DD5698765724F8A244F62AC20C2D65A9394C40E4FB5314B69842CA590A549D4E7B99CB56A4A9B4800DE3DFCF879ED065E3DC1D4346A9A950A695229D41ED69644AB3DDD295393D35B18D08ED2387174EA9930A2CA9AB20B1DDDCE8CEFA39F68DE269CA4CB961C51F887DD9653856157BDDD6929055736584A8920EE4037EE6364914885B4D09DC14DB4704F3B7ADF58E95549EE1DF62C4B75D34BB333F3263F2EDAC52DAAD5367A97382F28FB0E52DA4900FD9CDA085A803FD377957F61ED68D2DE1BC72529424CE2953324BB6A0B5DC6F1F4FDDB26088C638766D226582A54A218873F96ED63A0FAB6D7C8F780AF1315ECADCE9CC6E0CB16CF095A362443989F2B1730E00D375B936DC138D344F45CF2534E690123CC5AB6D611AD1F18DD9AD07137085471152C92B992652E5D41284F814539A52C2EE7F88A252C34C849D418F1E78DF8557C378D54524D42529993264C65020142890B0465F168C361CF511B7E30A6B98B6991A5B421B7D361E5D4F8295A47522C5ABDAF6F30DEF1F3CF8B60A9C3F15AE921232A26CE0DCD8B331FDF7D368C28BA45FF0037E52A1A16D0866D8DACE2FA472E3ADE70126A561980CD6F307EFF00BD8D399A01B82C4B3F3DC7B9108A43724F3262AD3A0F21F484711CC408BDBBEFFD8FEFBC5D70B93473A64C4D5A825390E52EDE2B37C9FDBD9056EDA92A27494A82ACB295004106CB362936E8A16D37BDF688CD1D3CBA942E44CCC10B075BBBB87E7CFAFA5E86B102624A5B6E572E2DD0750FB758F08CF1E1DF277890C2F318233A70661CC5B48764D6CD3276B54E62A157A628A0843B4E9F7A59D71A79A3E669487DB2156B2876DB6EC7FB78C5FB385499B41553E9662100154898B94B29DD2A28209041F107218DC308C46B30BEF94ACC84ABA116E840BE9AB7AEF182FC5DE109C4870E15F9EC77E1F9C45E23C30C3536A9A465BE28C4B88A5A973835070C889364D429330C38B2436DCE29968365285694A6C3D1EE16F8BCECF78DF09A4C378EB0EA7A99B3902554D4535352CAAA2A032256579A599AA2027395AC3924DC9BD96AB02AAA69667C85948D424A890CF7DEDBE9A5C691D42BDE291E247C19CA3EAE31785699AFE1DA3A1A62631CE167E8F2D4F99612BD2B987052DE6DB5A94DF9FEDCA54A27CC01E99AD3FC3C761FDAA8975BC3F8AD1F7F5AA7452564B54AA842A616423F8099D2C92A21215DE6B736722DD478CD7226F71312A0C425D24105ED776370DA73EA63D632FBF88DF841C492927FEB0C2D99B822666396FADC670ED16A1268208D65732AAE2660B6920952D0CAD76048415581EBEE2AFF004FB4CC33D383090082528226A42731B0B10F974DB425D9C81D9541825756D37E2A505158014078BD08201723403736D1E2E8289E38FE1D15A9613151CE96686923516AA741AC4ACFA7627755324274820FA397BF43DCF554CFF4ECE3052880B907312C04C397CC1CB9599F70D111C378843E544C21FF00A0866F30E1EEFF003678F8189BC797C39F0DA1E14FCCFABE274A412DB547A3D6D4F4C100D8736A52F2015A8ED77160F5E8378AFA5FF4E5E3072553694004BBCF4BB6F60E5DB90D03DA1FEDBC427495301B90421434DC06F263D2FA88B37CCAFE23ECA490977464BE4A63DC5B3E9E6B32D3156448CA4AAB9800696843554992EA5C29D4BE736829012003A956ED5E0AF8009787CECFC4359878653A3BC339494310EE51214092C00671ADDAD110E0CE37C726253414D52B4CB2D30A10A624B00EC1F477773ADA31A79C3E2F5E235C44373B87F05352992185275B5A5BA8525C4C8E249069C50FB6A6D4A4D869F959A4A6ED975136D2B438B1AECA20EE1F047601D9C705D3CB33254AA9AA94C4897290990B290CC262CA668D3512DCD835E3BAB82BB05E28C5152D388D2AC216C162621449720E8537E834E5160EE64F56B19E217319675E35C4398F8AA6965E9899C475299ABA9C7566EA2B5CDCCCC1515289B951F58ECBA9C469F089229F04A4934B2539411224A12548486F1AD202961BFA8B7AC6DC70B7C24E195B2E54DAD900AC0492163A826C74BB5C0778F69A652A4A8F21F034AA749C8B6D80DA529421212DA3CA12121160024580E805EDD228F19C729F16A2954F48B4A2AD32C2668496505E8A162E2E2FFD9E36C3867B25C1386A96929D34F2C0A642500E44DF2B00E5B50DAFEA23E824A74B6805B2509B2CA0586A2ABDC8207A9F6B7D231FC3F0A44B42D5884D254EA21D4588D9829AD76366F3678ECB952E8A9E4FE1E4A136013648E46C5BA1F944B30B28B10875C2568404B1FF00B835D90542EA48B2028A942FBA41B5ED68B4CDA3A9C3B11978952ACF712C90405288624D8EBCFA5AC378B256F0DC9C4F3A2A25255256E4829052C5DB5D9AE45B53BC79D63ACB3A2E36489879A96A5D769494BD4EC5524909A9CAAD3F688FB44043BA90A3FD2B3DF7B476FE018A5062B48BA7AC29299C8CB352A62998CC405A0B05234705C1E578D75ED3BB17C3710A69D324D2A02B2A99901C1637058BFCFA18BE9E0D7C5EF3FB8339A91CBAE224D6337324D97D9966313CC2D7395DC272C421A6DD69C9C525750F876836EB74FF008A54886C212A712EA9E6DBD78ED9FE1C301ED0A8EA95824AA79388290A12E90A42533E63951EEE6B650E08CA165202814B8178F37BB46ECA2B306A99D3254921014A399208B681C30D35B6CC5DD846D9DC37F14D91DC4E61A91C5D9458F6958A64AAB28977F97313C86AB2C4C68D6EA26A9332B65C6CB495250A4286E50A08D4DE859F1F3B5CF83FE20E1DC5E729747325302A3E1510C14AFCAA01887043A491B0DC474E48A39F400CA9CE083A17058733F7CE2E72E1D4A14E3EC1532A520B68B4B38DEA2059D96484A1C3E8E0D7A4DF7EF1A85C4BC115BC373A6C99C829C9624853F85DDDC793DE2BE52D88B900BA8825C722126EC34B585CB0DA260957DE69608B1DC1276F96D7FF003181FE0913733EA9725D81B6FF005B1D75DE2B92B2C5AD76E7EC7F589E2D2A195447224470E06A40F58471071CC7B8888569DFE90C856424737F4FB311A08CCC082E36302F03B036F7DFFC6D1592689C87F5BDF42DCC8EADFE2665725C9239683EFDA29DBFF941FA9FEE445E2461AECC90469CC93EC2FEBA7388BD0FCBF788A5DD2746A0AF43D7A807E7B13DFDF6B08ABA8C049906604876BEC5B577F3E9FBC70DBB317BF3E5AFB69FA98AE55E5BFAEDFAFEFF00778C426C85499AA41D125C1E8FCA3800051E7B5B6D1ED6BFA1D6D78A515727FECCCF3FDA22845242108421084210842264A5B49D4A22EAB9DCFE3EA2FDB71D62EFDECA5D32100788000E81ED6B6B7727D378A05CC01445CB7C8FBDFF00BC454F25C525B6D4137493CC5ABECD3637D2A46FA89DFB1F9C4CC3B87AB71099924A02B3285C0755EE03B383E5D625158377568CDF6468035CB696D6386ECF312EBD2EB85942012E4C265A5D894B006E56EBAB6BDF7D26EAFADFB4B05EC7B88AB96855353CF9F30A4144B085CC7E76234677F3D5E384CCCAAB3149D4A945C101C3062036EC4167D5E3A6D433372E29AE2DA9EC6D85A45682A0E89EADCA4A149BD8956970EFF80FEFD9941D8171C2807C1AA48673FF004EA22F73AA5C5DD9B9BBBC4FFC500921C3B0660FD3702DF64DA2AD2B3032DEA8A70D2F1DE0FA93AD275866571049CD2946D700214E8FBDD877B822DD224E27D83F1CCA0A2306A9B7FF00CBA98D9F74DC36AF7F3310FE301003283B82AB0DFA1245998802EFCA3BB3132D3D2EDCCB6C25D9479254152AF4B2AEAB901D0965E3A85ADE7B5F6B102D1D6B8F7639C59434F32B2AA8A653CC47842664A524103A1019AD6D9FCCC514DA9FE384A54543F99CA9EFA312D6E81C3B748A4E7297A9BF2A995254A5AD5B38DA77D60936EA2F7DFA1B5AC0C6094FC3389534D4CF9F2CA44A98330482DE1625C300F7D9FCC931744CB0B959CB91A313725B47B91F3B9F6C43F8DBE004634F0FACD0A9B2C29CA8E0376858FD8094DC84D255517E695B0E896A5182A36D811BED1EB27C0BF15E6C6F0DC1973804D54E450AC1538289E44A5803A8D74E718D622324D0A507CB31240D4062E0924F51CC5B4BBC5B6706B8C1CC75C34656560BC1D150C35212335656AD1FCA1B05415DAE3E36C6D6237262E9F139C3A30DC5672C2322C4D529C3862546DEA1B47B680C6C87065566954C972FDDA45FFF0021EBFB39F211754F10E4D2F9674B610E31A8F4E59D3CBEFDECAB6DF2E91AA987D5AE8BB998925253312435EDB7A68E7E71DC73E9455D2310540A7771AE9BE9A8F94623BC5472BAB6DE13C03C4DE5D19893CC8E1F2BF45AD4B4E4B0703CDD1987019F4A14DF9B4BE5997655DB4B8AD5600C7A89F081DA54E4E292F0F9F356A9332480A979C801496099B95DB3A5D49075651BB1BEB076BFC3D2E4613DF6548577A729CA792ADE4790BD83C6DF9C00F14D8778C1E17F28B3C291C966671461CA23F8869ECA90554DC64AA4A5588696EA5BBA52891A819A61247955CB16001DBD8BE1EAF15D852673A41EE926EAE809D3572373F38D2AC6E47E1E64C04B9398860080970C93C8B339B92CF6DFF3CC74A1252E2C5CA08527FEDB83B12916048B0DEDD8479EF427B99B9D04A540BEA6DF5D5CBC7D4CF12A0D4226257E24B33301ADCBEDA5B4E51E4E9C7B3F905C46E4571154575C95730BE2FA7A2A6F3675FF00E96467652696971B59E596DD4BAB4BA9234BA9484B80816195E3D86FFCB382B18C12B65AAA115149395265A6C573654B2509009482A5288CA096BDD81BF9B7F1358052534E562B26584CF96929CCD6009274008F32C7CC98FD0BB01E2796C6186A838969EE21D90AF51A9B559771B092922725D2B5D943AA0904A517D2937D00152A3E6FFE247023C1FC5F59230E9464CA54F9B9810EC4AD4087DD9883CADBC690E17553EAC4FEFCB9429936DAF71B061C87D23BC46B8574894695352524CF5148274170492CF7D6EE3D348A797326CCABC8FE00A729E40117E9B80D7F7877F6DFFB5BFBC5862FE9D0790FA4211CC2F6FF00807F5833FF00923E9081B1EA010762080524770474208D8822C7BC4485AA5A8292482342E4FF007F9C4250953B8D7CE0424941286C86C5908E5A3969EDE545B4823D401FA4578C4EA8060A6B3756F3D7E712BF0E8FA6DCB6B98A48515AFCC014B7FD040E52C2AE4875AFB8E8DC81CC0AB0000B694DABA8B17AE93365CC973E62148650CAB29B8208D1AFD795B4B452E2694A2880097CE4BBDD85C326DE10D764B0CC49372631CDE2AB838636E05B3F68DCB25B6708542A886D9529A2CBD232CF4D36B972D14A98F3B292E06F485A014AEE98F4DFE0AB8EF16A8E2DC264D755AA6C8935D46AEED6B2A49089A85314A89494822E92188DB68B2D3E078714227AA59EF14E4973AF4BEBE7E9B3690F92942C2F88F2BF0CAAA743A54FBF2489F917E69F909671E53C89A79094B8EA9A2E28805362A55FA5FD63DB7E26AC9D874942E95926714AE602C5BBC425619DD8806CC036CDA47A13F0EBD9DF0D712E140D7D3F7A512D252FABB7555F9171F58EF6F64FE5BBEE735784E91CCFFBD126C21571DEE96C1BC6314B8FE26B490AA89A10FF00973AC0DB676B58FE8FA6CD1EC2F82D2A6386A4BED9525AEE4EAEC7EEE447258CACCBB9316670BD2D6E1B5FE225599817EBE50F216136F4481D368AA5E3D5524029587EA735DB997D86BEEDBD653F623C009244EC3413BFF2FAB020302FA16D04768A7E1CA3D21015234BA549A05AC18A7CA34A5586C41434920A77B11BEE7DE2D555C5D8ACD69614022ECC9161D4EBD403EF768C8A87B2BE1BC309FF008FE1F2D092419F9D01648D99C2B997DAFBEDF6EEE2DA52544A9A705ACE28A936241B106E34D8741D361BC5AD5515F5ABCCA59B93A1203901C5AC4F3371E5AC67987E11826152C2AA6553CB5001C14A12CDB9B0E7E6E22B0425D40D2DA5A2D8B731AB27A6DEA371D7D76EB72045C69E9B160190090A4B1252EC0F521C0D362D7EB136A78AB07A0B53CE9290CD6500C363AD8B0BF568E3B885AD449F3D8DB56B686A1B8BAAEBB927AEFB923DC916691C3B5F4B573AAE522609B3661985DC872492C925B7B16D36E74353C53267CB0A18853A7380E0A815005B76B3DBAFCC4412D2812406507A1054028903EF59AD436B6E546E4FB457555062D557989586203E5034DBAF227945AE9F1DA71349FC7D3B937FE2585F7B07B0F2B4456AD249E610AE9F601C2E74B10924246FB8209B1171731CA28B124485489A85992E02BC3770430059C681D881A748CCA8789284809A8ADA632D8582D37605D9802FC8D9C1BEF13210928166CB57DD4B79160BBF5D6370AF7D5788512E7D25E5A66208B8B9E6F70E7CFADE2A6B310C0ABA4AD099B28BA6C92A0766D013A8736FD8470AAB4E91ADB069F5494949CA7A9B5204BCC30D4D4BA42AF7D2CBC853480492AB0401A94A2003D6EB2789313A41E02F9430CE80A7E56502C458FEBCBA3B8BFB39C0F1E2B2B928999DCD80B8366B5F9FBB5F48F24C2983B32F21F169CC8E1BB32711E5F6276A604E2E952D529E97A3545E6D41602DB69E5213CD484B0A6B93CA08424742445D6A1780718616AA4E29A1A6A99880512A6A64CA97532E5BB8099A94A56A014490852B2392E2EA7D4DE3FF00873A75AE6D56174CB0A095164E629700EC1C68DB3C6693866FE203C5585D54EC0BC67E56D459999528904E6461995905234D92DA2727794FCABF320A815B80B2F3C46C94289B46A876A9F079C11C5F4D5557C3D26554D4CC4A94294A972AA41209621792458DC94CD5007C9A34878DBB3DE34C02AA6A64D3CC4494A8F884A246504B5C2496F41AD9E3620C88E32B86AE2128F2B52CA5CE3C15880969B5BF23395372915D4B8B483C9FE5355664A61C58274EA9769D4956C951DA3CB8ED27E0F78D302ACAA46198655D3C894B5E6065288397F3044C4852140001D964024462141575F489527114294A66D082FCD880435EFA1D3AC5D4B6F29C49702DA71C50BA6525D130E246D7F2CD1684B9D8EDADF03BF4BC6B0E29D927116153549AAC3AA54505963BA50B8F200FD9EAD72A3C464AF309E0A1C929529214C01B020BEBCF9831C31353A546F2732DD8EE952E45640F62D4C2C58F604EB1FD401DA287FE12B4CA515E195598027F21046B637DBCFE515A716C2D0C95642AFF00C5EE39B103C881A5B9C7256EBC96C38B69E209094A12658F9EC482E59D2A4A36372904DF600C5B28784AAEB2B26C895455128A104A0AD0C09716724EC766D3568A9955B44B0F29525DAE4939824EE0333F9D9B5DE2AB575B7775D946DD501F620CD234057F538ECC32DB7A503EF1438AEF6BED7BFE13D9471AE275B2A4D0E1959390A580B58924A5B3072181B5CB3B16D6E62CF8862A64664CB58704B28017F41B72040DA2C1B8B8F10DE1CB847A2CFCE634C614DAA62C9469C94A565BE199D15CC4588EA6A05B9708128B758A7B6B7085A91393724E048292DEA3A237E7B20F83CAEE24952558CD04C92E94AA74D9E9549952923F3CC98B2400948F110E4EA12924B1C697C455A92495800961BBF20C4172FA722768F09F0F1E2BF8B3E2AEB38F333334B29BFE9B6443CA43797F25392D28CE27B296C30CCCADA179E9B4BCA2B7D45F71C682147944B6124C3F111D8F7655D9960F2F0DC0EBD38A6392A91733119F21C524A9C4A8225CA5CC285AD61190A884146ACA26C6E1418BD7CF733192927C0E3C4A7DD5661D1EF71AC65E4582020283A9D2DAD0F0B0252B6D24A1D48B043C95156A45B606F7ED1E5A570CF5F3729397BC521B29B82A2414FF00E395AF6F1022F19552CD5CC0EAFE90E3705CB1D1D88D03B5DD9DE25F5F9FE1B0FF009FAC71393DCA425048CD753EFE11CF7B1FA08A95120A5B737F9422922284211037B8B74BEF11272B10412A2D95B63777B8FD6113DD02F706DFBF7FC3FCC44696A8242CCB504B12F95C16E4403FB7A453A7BD3308259235077EA352D7DC8895C42DA046A0B5A85D0803CC01E97B6DE9D7D62BE80D1CCCA89B294B59B060352586E1EDAF5DECF104EAFA6901E610920905CFE66676BBB79B6BD23A8621C5941C2B47A9D7717D6E9D85A874C47C44D566AF34CCA4AA5948D4B4239CA1A5691B153E8434BD24B0B73CB7D82ECF3B16ACE35AAA6974987D4E59CA4B2B22FC44B00C90E18BEC39078B657D7489D207FB79CF38A400004BE63A952B5B1D0077B93CE300DC6478FA651E50D72A980786BC28E679634483292F5261130DE1E909F410D170CD3E584BC12BD4A216DA987083C9538DE951F53FB16F80744C954D88639293494682954D9935330A859CCB084A55333382012909041721DA20E1FE14E35C62A9225C89932529418250D6240D580B0D595CCB4613333B8F4F127E25669C7316E6B4D65AD027895270FE0F5CBE1F5CA4A2C85B52C87A8ADCA09B5B634256B79D52884A964EA11BA3807629D937074E44B9783AA6D6C82512E7CE2522614B8CC519C801C022C1F70ED1B5FC31D82565751A2657D1CC33549495008218B5C936737DDECFCA2D7EBF96998B5E74BD8AB3E73527DD9A56B9A2E627ADCD6B5A8DD4415D455A413D00B0B5B6EA63B329E470B5304A65E1985B200033E1F46B36B788AA512A2DB97BDF611D9141F0C941387F128A71275BCC07AFF330F31FBC51A3E5963CA1BC66B09E7DE6761D9B4D8279D886B8CA1DE58013654BCEB8A015606E6C77E978E67D3F09D524A2A708C2A624F2C3E925A83FFE4896147A0760C06822756FC30D04A4954BA49E0B59D4B51B6AC3391E5BFB5AEC72AB8F6F108E1867242770F661CD66D61B90790EBD43C43308ACBF3ED36425D9044CD792B99964A9948502CB8DA12B74AD2AD6551D65C43D8CF66DC6B30D2D5E152E5AA6864CD401DDCB725F32259761D10A2DF96E008E98E32EC427E0F37FE969673A525403172C0E9B35B9EC7CE3609E073C6C724389E9C6B2FF0037A4939319A336B44A3F46AD3825E9534F25294BA86AA6971D4B4ECD15290C043881AC84829EB1A1BF11BF07ABC130DA8ACE0DC355329B2A97DF5382B0A1AE6C87F8C848DCAD09667360F1AF38E609C51854E5A132972E5A4964AD07406CE4A48BFF00E24DC4646F8C5C0CDE6D70AD9DF81995333CE632CA8AF48D2D128A13087DA9DA7CEB4D2E59D41521E52814941D45C49B900289BF407C38E078C766DC57455189CA99227C8AE92A945492005266022CA0016BEA1BA3458654F417189ABC62C46977F47D6C7F578D7EBC24B13BB5DE19061C7DD52E6F01E35C41409C2AB24CBC8389916E5D9527B2B5CABDF6A46BBDFCC488DBFF008C0C30149AD4A58D44897509527465A1C11CEEF63A5F9BC77676778822A3BA4E77CAC94E8580E7A9240D1BADF9E542725C30A2DDEE0A10A041EA945CA0DF637F31D47FAB6BDED1E78E032D3579D154490851DD8D8B7401835B57BC6C19A99D2E4812CBA5AEE1C37933EBB80F1D4B1DE1CA6E3AC178A309D765A5E6A9588E8B3949A834EB28D2A6A699536DAF64DD2A6E60B2E85A46B1A763B98EF8EC578CEB385F8DA422967897241406597719D162E08B8D459B71A18C1F8C706958E61332555CBCC120A835988046BABDDD83D86F16EFFC3B59E551C84CFBE203C39F30AAAEBB3183E66A989B2DA66716196EB126D56D997986A442B4AE61F986AA089AE72921D2DB2E0D7652C1FA0CEC7B8A24F1170DD3552BBA4AAA643AA5214E94CD48026109FE54A9449969B009D0001C79DFDA260F3A83129B264A5425A1647E50E41360E46A1AF7D6F7D63010E8494D94350B7E207FCFA7B46A3D3338B3B93AED6FDA3EA131A9399040E40F2DF7D35DFDC74F09E22A942A19515C7255239D4E4AE79214095361B46A529045F495684D8FAA77204766F0DCC9444992B3FF00AC951E81C66B5C976B82588D846907C48E062A302AB9D949694BD47306CDEE435EE7A36EFDE1738F9798BC0770F18B1F75D999C7703D3E9B5171C525C7153B201416A2A493B143C80012163492A16B13E15FC73F094BC338BF14CA8044AA898CA218975A94E6CEF7FA72BF993409EE265420021E62CF3BA5C01B9E6DA0DB78C81056A492011B13BD8FF7F4F68F38AB96F4E10FF954DE400B020F91BD8F58868521557354412A48370F7399886F3F7789C1B807D45E2C517B8421084210842108E287036A374A8951005BF01DFE7DBFC45752804DF64EBCAD14389826953BB28017BB9572F2368F15E22B07378FF24336308BCD87515DC0589E450C9495175F7E8F3ADCBA52122FBBAA4F4B1DEC37B46E47C28F10FF00B6F19D123BC293F8991BB1BA92799661F65A24A7F874B2D4C6C92EED6E8D6D7D9C8B1DBF3DDC85BD1D7989825F4AD28C378CAA52ACA15605B5FF003279A08B13A868280A5277D88DAE63E89B139A6BF0CA2A8242C4EA2A69E14096FF00B084B83B8F06FBEF78DFEF855C6325225015B04949209D49B02FAB8DB7B9B08B842AD2AD2411DB576FF36FA461A85642400CC6D7DC59EDEBCF40EF1E8561EA456119C0620172074BB5EDB5C0F4110710DA6CAE6581DCA82566D737B00137236FE906E76EA2262A4CC9C52C09CDA79E8C4681833E97D4DC4565650D2210A5AA64B41F3034D7CBE47503A70AB13D214F91339549D669F4F646A5CF4C2CA1A401651BB2019859B58F91A55BBDAF68AFC3F86EA2AD655DDAD85BF2FCEEC2D71AFE91D6FC43DA2E11C1326677D512734F4AB2A4AC12E06CFC9EEDA45AD63FE2DF06E1B77E070A73F12CCCB9500F30C96A4798905239899C4B0EA91F7BEEA54490362378EC7C0F82D6ACB9E50008B022E4BF20EC741761EB1A55DA77C4BA65CD988A2A8252EB6C8A0CC0D9C86E970FB08B4AC43C56E62D75E996E4A7114A61C52CB4C4AB2EB6EA413B0D6A64377E83659DC8ED1DAD85F034AC89CF28330CC598BB166D0F3F3F58D63AAF88FC66A26ACA674E20122CAD3AEB702CC06BCA3A02B3CF345360713D4AE46E04ECB0B1F4DDC0458ED620456AF81640516942C4B02069E46EFB69186D47C4971A99F311295546585B26CAB279D9FD2FA73D23992B9F39A88F3338B670006EA0E3F20E1B8ED65294AE9FF68B03EE6203C0D20FFE881C88047B38617F4B74823E22B8E124280ACE764286A3958728EC725C4B66ACAB8D97312A9D4A41F23B249285AAC426EF372DA6E5440075D89B24122385F004A9A8EEFB91C8300EFC8F97D22E523E26B8CE9D48FC42AAD32DF749B6BFCDF527AEC5A3BBD378BFCD094F254E5E953AC9FB88703697562C371E54F5B9B5EDB7A6F165ACECC920102597035CA37D1B53C8B3467D807C55E2895A44F9D358104B953DDB571A83CBD7AFAFE1AE34692F34A96AFE1C9E69E4E90E3924A91424036D452B79F426C2CA360AD561B0DA311ADECD569CCC87B924005EC3AFBF2F9C77B605F143267213DF4EBB004A9406A3CC5FA6DABC5C6613CE6CB5C5CD3029189528A94D00D2642A41C69F97709EA0BE84C8AD1E616710B55C8201200B61B8870157D35485CB42932C241206603ABEDA6874FAC76F603DBFE01894B126A66492A51BE628D4EBA9FD36DCC7A55428B42AE492A52B14B91AE32A41E6CD4D7C3BC1095742C2A5D4A652B1D504E9712ADD1624C5CE969E5E1A902A90429296CCECA1EA082C5AEE59B980F19BD4613C1FC6F48569148A5CE4900B21C9201B0B7F516FD23C1E77217F97D43FD419638D311E01AECBACAA566E8956AA5203642B50D53928F3334024D88D0E103D2FBC713712E1DA9229AAA453CF44C390A6A254A9E03900B77C159736F9407B3EC0F41716FC31D26253A64DA1928CAF9FF86185DC8BA40701AFEE06A0DD365871B7E253C3DCAB149C279E752CC0A0CBA92A3298994D57A7E6128160DAA7310CB3EE5940149D33009BF7B4605C6DD82765F8CA26547FB651C99B56D373D390C82A724E42ACA181B0096E4356E88E24F873C4F0F4A932A4AFC2EDE156C6D7624B73B836BBC5DCD17C7978EDC38D3E9C4991D83EAEE4AB52ED29F0DB6C4C4D17028257CAA7B8D498594A16B51165100EBDEC23AA47C1F767D5B97F09916A98095AA62129968B064B0014E6E2C0DF68EA1C57B12C6E925CC9EB92B4A520ECB7B6B76B681CB87F38F50CA1F1ACF102E22710D7304E4BF0D186313E24A52968A8B72532DB4696D25E0C1995BB509E9794490FADB404B8E5BCF7B5818C5F1BF83EECD387D02BB13AB9186CA01C4E01241524BE520824D81B80D6F28E92C5A86BB03A85CBB950514949517E5CEF6BFAB6A045CE4C64EF8E0714EDA6999818D70CF0E18426D2029C94AA619555C4A3A2CB434FE115546A087792A572D4E2D2B0E006E1636C3E67167615D932552E5A2562D53252596A120495286A52C5135C1E801DEC62810AACAA63303025D83A94DD366B86D7F58BA2E1A3C15322F2A31149665674D7AB39FB9AD2EF226DCAEE339D9EACD20CDA55A8BC69D54714C4D2C1174B93926E39AACBB858046B4F6C3F1A61786CFC2B8366270AA6CCA6451CB95256A252A19664D9404D988BDD2B5949DDC08AE97869CD9D4824B7F33D8F406C2F7B01A6D199AA7D2A9549625252914C93A3CAC9A10897629AD89797974B32FC865B62510132A9692129FB3E584A06CD8012911E6871AF6B78DF15CC9E712A9993A6CCCF98B9B872C9B3000DBD185ECD9251519094B8B387491AECEE390D1BA748E5A414048164950529F02C12E3EA75479C06C428B452952459208F28B111D554C65AD7DEA92E58F8945D4D7B33A80009241673B9D4C64B265F760B905D826C1C240162753773E4DBBC5403ADED7ED6EFF3F7DBF48A4AE5E69C024B8018EC06A74DCDF5F7D6DCA9473B316041B9D9B6BEE47F6845244E898A4817DADB7E708842812D77BFCA29856AB80924FADC6DEF6EE7DBA6DBFBC490A0A0A0E42487001BFAEDFABC4A99332CC422E01373CF4B37BFE912252A5072EA03CBE50A36DC7624D80E9D49F9464F33134D552CAA1A7965535404B0C87249605CB6A3FC447553532649502C403770FD3CCFBD85FADBF7127C4B654F0AF96B89B35336312CAD06994D90755489379D49A857E6C254A4CA5325FCCB2F2C20E92F25B6F71E71D236CBE1F3E19718ED0EB29264CA49A65CC992C84996B01944396093A072543401DD8DB045D1D763152A45385AF32AD95CB8277D1F6E67EB1A46715FC7B7119E2338D2A4D3759C41963904CBEE4BD170CB2FAA9F3F5DA136BD34D7EAE698A2CCE3EF4A250E388987DC690E2945A02C0C7BC3D9BF615C1DD92E0B425345435D8C53489495CE500B97296103BC0944CFCF3133129F1E5524B1214418D98ECB7B03C5F169B455357226A64CD285F8926F998B9B75E86FA08F30C138170F6069644A61FA4CA32CF2D0D4CCC4E4BB5393D36B4A4054C99F984BD361CBDF4279E10D83A50024003B465F6A66850BA214E90951214A125001528DD49CA9600BECD7BB47A7FD9BF60F8461541226D4524AEF132D1F990926C90FA8279B1B6BEFDEAFA6ED052DF964DD4C87EC879A5ABEF6971AF369DD400D7D2C0F78C7314ACA2C625AEB10B4A6A49CC10157B9B8606FA97DF6B1B4771FFC7308C39A5A244B01366084B5B4B003E4E6C4BBDA29A523FAB58B74D2F3CAB7FF00DD67FE778C58C99EDF99577DC8B3B6DA74700758BAD2C9C2E580F2A5863A6506CFE4F7366DEC62294A5BBE90A59249D4F28BC45C1E8970AD2074B0000DA0254FE6BD0EEA3A07E77B44CA99585CC040948B8762801FDC7D3A7945441085978A96EBC41400A4A1965A411F79B431A0176E4F9D49B90120A88168BA51624AC2489D349241D49B84EB772FFE1CEF187627C0585710AFBC54997E1052F952ECE5EE436A6FCAD1E5798595987B1B044FB3CCC3D8865D6DAA42B74A5B92532CCD257A9A9D7E6A554DCC9725DCB38820A8123CFE58EC6C1B8A308C7252A96A65C9529485CB5A66CB44C44C42865295CB582852540905D26CF1AEFDA8761D86AA8A7CD974C824214414A0588720BB3D8EFCEC1CC665FC2AFC52F12A2B14CE0A78A3AA99533ADAA9597D9A15971A2E3CC280966E4A7675E2661ED4AE5F2D242C7995722FBF41768BD8161D886232318C0E9E5CA49A997326CA96923BA566CCE3F94A14FE101D4194140067F27FB5AE07C4706AF9C99125484216A2E80C960A3AECE06AC1CBF5BF4CF0CC9B4E08CEDE3532550A5372D4ACC0959FA3CAEB4DDC944CC56D4FCEB090A3F62FA56C94A810494EE00B475F7C4F70AA95C2F8695054C5CAC365D3AD4A0A242E424BA0950CC549CC3310E18863CA6F64F5733F1224920A92B620FE67703FF8EC6E2FEB78CCBB8E2DE4214B275140B057DE40DB4A15FF00926D6245C7707B4793735030AAD9F2C9CAEB5063ADC97B0B58EF61BBC6E24896154E92AB9CAEE06CDCDAEF72F7F91891482A69C4041755A524363A2CA549D940F54804A88FFC45B788B0EC597418B53D64B24293312E46ACE2E79E9F51ADA2555CA973A9D72AC4A9243303B6DF472E7A68230CFC7326B5C27F169C38F1EF800BD2030D63790C298F154B4ADB6E6A8D3AD3B27353152242187582863984BCA279BCB576247B45F089DA9A6BA8E4E1132A539FBB44C9685286799312529EED2F7FC8A5AC8B2591CDA3503B56E110F36A932588529CE5D2CE0E83911B104E8EE4E3C9C20A7637363E87B7B77F9464B4E3C5761E271F41ADC0F6D9E3E8371212D48CC1419B5777D43D8ED7FAD8C797E6EA3565B62F4A6C14BA1D4398576094A112EB29DD5B0372AF73D3D6D92603513D78B2244A42A624655A9280A2C01B9B07E7A6BAECD1AB7DBE53495F09562BC2491300F3CA34776E4C7CC5E36D2F0299C72A1E1C9938B5AC96D8AC629A7F989B16E4A5A80B60A49B5D054FBA1253749B2AC4DA3CA8FF00504453A38A31594A5244F5CE52BBB2597F97FA75F96DE71E422D915D572D2E0254B214C59CA94000742435C0B8717D23314E0425A3A4A6FB0DAC7A03B7FCFEB1E47D7CA32D0A4CC4A90EA240208E5B9D7D35FA718581DE4D2EE49D5B6720FCDB76D209FBA3F7DE2C11733A9034BFC8DA26842108421084211414D8D48F4D5D7D3F771EB1574B62B3A3A0805AC4DF7D39450D72553652512C673DE02000ECD73A740D731338D30EF31A7501E69681CD6F4EB4AD03771040BDD2B4DD36EFD3DA3BC3B0AAD9D86719D0CF9CA32A4FE2A493356E940016904B9606C0B9F5B452D613268529596514A86570EE5ADAF5DB73A388FCF2B3BF2F26F21F8FFE26B29E642D99238D26AB94C4389E525E96A9C8CAD55B725F504971A4BD30E36168D48D6DAD37D48508FA61E06C464F127675C375D453D35AB4617F859F325284C79B255326292ACA480B12E62014D884907420C6E17C2C57C9955D2E966CE4CA33662322545B56167D5CF983A58BC76A0E25F1A0900D8DD4748001EE49B7B7E178A04CB9899C5131241CCC0301ABBF2DAFF663D2EAAC630DC12994B99592652908D54B0901D2EC6FBF9318F10CD6CF5C2B95AC1949A9A6E7B1025B53723232AA1349D400B7C5219E614A82880438526DB91BC763F0E70DD5D700B452AE625B3254104DB90700374E86DAB6A776AFDBFD26088A8452627254B405B251303D9D9803AF2EA7DF1A398B9C98E332AA2E0A94F4E352BADC12D4FA74D225DB6D2EA87D9B92E95A4BCB5D93A1252A234A86C5568EF6E13E0F404CC13A53109BE64B1CDC85BEB71BBC79DBDA176DF8E71956CB934F327CC44852C128528BE62395FF0097968FCAD709C37F0139F3C46AA5A76998666F0CE1C69E417310E26939BA6CA2985DC739A4B8961FA80360409343EB370AB69D463B129F87A453B6596905C1609BEE753A00D6D3E66313C3300C6388D693512E7AC2F52A0A6BDCBF9EFA6B199ECA7F066C96C3F2F273D9A75FC538D6A8A4A0BF49A7CC49D3A85AEC35203CCB327544B60EC0AA642ADD49317D914A89432A52C036A007F205CD887FB11DAB83F62FDEA52B9B24826E428286ACEDCFF47BEF17668F0D2E0DE5E5DB97193D4C5686D0D0E6566BCEB8342401CC70D5D456BDBCEB2A5151B924EE638553B92420B126ED673736D3D3A467345D92612854B97369505401CC480059C392E01E5A75EB1F2E6BC2D78339F4153B95B2B2CA37015275DAE36B4DEFBE9356FBC36DCA7BF4BC71DC16CB90B7908C8D3D94E00101E9E4861CC6BA3B0E77B3B6A2C18479F55FC21383E9F43A24E8F8BA94FAC82DB92588669C6DA37049089F9D7A5943A821C6D440DD365011C042A4B14CB512F6B3EAFD1BAB5BE516AADEC7305AF49A64C9952CAF45D8007567760CDBB9DB78F01C69E08B94B502A770666B627A24FA8DD96AA6C53A7986C760A70539F6F6DAF757B7B0856B5AC5E41EA72F46D00F96F6BEE7AE71BEC2A55085AA9594521BC04923AD89776F41CF58B32CCBF06DCFDC332CECC60EAED0330649AE6A954C2EC9D2669686CA885075D553CA96B4A41294AFA9D29481B4502E94ADC9907723C3BB3E8CFD0B6FF2EB1AAE05C630D98B4C99352A009CB942890D70EE2CE77EB7B698CCCC3C9CCDFC9CABAA471DE0AC5584E6651C28957D74CA84BD33E192AB216D56C32649D1CD0E6FF18B36B1E8413455382A27C9528D382A20B0CAE599998DC5F90373B45BC2F1EC1E7A4FFD44B5D94124281B68EEC3C87EAC0F66CB4E2331BE067FE0A767175AA529D46B94997C3E6D7B25499852C92E27728643A54B36484AA3A7789783E7CF337BB9331249533A54524B59367676BAAC39C772F0476DB8A70FCF932AAEA264A40287EF14C19D8FE7B10DB5EFE91928CB7CE3C1B99D2ECB1213EC8A9A5B1F1143985A24A602AC2FA5B74B0F2D37B8BA49F99237EADACECF27A533679514AA5A4AC02E0E64DF6E6D601FF58DFF00ECD3B6EC231B954D2A75753AD533225454B41605B57B8FD39EB1EA09429E2B4869C25B27981B59496FA8BA885274DAC77558758EA6A8AFC5A9EA552EA67AE54A9530A1E63846549D8AAD71E91B335585E13C432E54CA29726A814254A32C256012C751AB83701CFD23AEE26AAA28744AA5414E252DD2E51CAC3A87969742912EDA98014E12A0752A69361AFCBA76B6F1D8B8157D64EA1CF433BF10C2EA96CB6722E40B59DEC34D43474CF6ADC3D82E0B80D62EA132244E1296425602540E55598DEFE568CEEFF0E5E4C2A4727B367887AC34A1399998B0D3A90FB92CC95990957E7DD9A32C669A3CC964BCD4B8756C6AD2E1681502A00E857C7776A58B70FE072F07C2B1614B574EB909A81DEA4295304A589AE012CEBB91B1B168F16F8AA7AF14E2EAD909967F0C85CD29580027F3B000F95CEBA0631B28AC9B04852260FF00DCDA10D293BF7E72529DBFF0B937D85EC078918EF68F8EE2555306235951521DCAF32C82B7D3C3CEFA5B6D35B850E172D0332C2410400540A8162C1B2927D3C9EDA4028136B11E97FDEDEDEB187D6628BAF9658AE5ACBBE75A89BDDEE4ECDE9EF174551CA67006FB973EEC469AC4D165974E0A9E6AC6BBA85EFA92E75EBE4F09729282592401F3BFB11E43DDE2900A2A1D45CF522DB7D6E361F3FC6209EA32D652953A406195EF6D8D81E8396A22A89194017E67D496E7AF97CE2A902E45EE36FD07A7BC49432828ACB1670E6E4BEEF7761C8BF2668A59A14569CA0B39CC46E001EFFDAE358404B5ABF2A4ABC81FD408A88A848D16BEF61B77ED1C042C9CB94E6E5BF4F7E5FB44AD167D4F2DBFB811C7407374A6C0ACA50906D75ACDF4A137EA5563602E4F6117BA2A450A6A8336594929F095037716F37B30F360E628EB0A84C94B03C28512B3D010E4B359B998F24CE9CD8C2B91196D8BB36B302A3274EC2782E9EFCFD4D7393ACC921F75A6DC5B34F6DD79C6C2A7664A4966552AE7B896DD2DA0842C8D99F86EEC5311ED0789A8C7FB65454D389D2C664CA5A900155CD937B073AEFE716AC52AD754052D203366AADDDCBFCEFA3B00F6D0EBADEEE63447E2BF8A0CCAF120CE5AA663632A9D4E87925862AF312383303A1130CD3AA6D25E52589C12E127E2872591776EB4FDA7DEB2A3E893B30ECDB02EC9B86E96548A6A64E24BA694B9B352077B2BF8779284BB254491DE2C8CC0A404900A9F68BE1EBB29C471CAA913F12C2E7A6515A559A6C92124020B9253A17B03625CB6E38F232125232AD536565DA9495966D0CB2997683494B4D00940012058040000B6DB7A4438862757595B3D6A5A84A5AD65291A24124E56602DCFCC728F5DF87381706C0F09A212A5494CC95252E909402E129D99B51ADDDFDF9FE40021054423CB75022FDEFB817EDBEE3E5145328E96A85C34C21B36971ABDF7D747BF998C90623364B499682258B066667173A7D058DB66450A30A5522CCF44E0509D519EE43EC1C9BF5DACDA472AA7156EB54C097D89E5EF7E9EBCA1159F8B2FF94B7917FF00FB629CD025258AD2DD08B9F66FBE508E3F16A7FCA5BCBFFF009FD3D638142925B3A4827A3E96DB6FA69AB422867A7F1B384A59C8950D4F8400347D2FD791E8C4264EA09C9972939D0A05CA466B93D1C69D039D440A0B88711E5D0A6D61DD4403C9D2799A3704B9A6FA129BA8AB648262BA46132F0B29A8A7AA429563952BB9B9E449275BC48C6A4FFB9514C9532513990A0CA4DBC42F66BEBA6FCA3C6F38701BD89284FD5F0E2DC90C5D86529C4B842B92CA53151977E4C29C326148B39CC5AE5DB2869492B55F61BC76870DF119504CBAA49521442559C020A5EE6E3F35EDB837B6B1A51DA9F6492315A7C46A3F0256B12272832092EC4836DC723A9B35A3DB7C2433BB11E29E31F185471838E0C4B8EB0AD569F3C1D05B53935465CB204D388504DD4AF8E2398A1BF63D63AE7E22F0BFC770AAE74A42574F213326E6431093529B249D8A7BA720B9BE9A13E6EF05E1D3301E24AC93894A3421357312813C6474A5458F89AC5CF2008F28DA854A2B529450A4124EA0A4A9373D3500AFE93D88D8F68F0B78E259463753DC8252998B0549BFF35DC00D650F4B46D9CB9B2E6D0A2648509882900290414D803B166D7DDEF13CBB8A6DF6D482906E41B916B14906F7DBA9118FD0E498334C504A8390542E48F6D6CDE7168975673E558290A39731B82492EC58D8D85ADADC18F00E287282899DD91198196D549444DCACFD0A61726AD05C996EB72E9130C4C4B5AEE151710B48522E4EBB026F63B5BF0E3C7B3B87B8AB0FCD5429822A258495AC049739487D829248E80FAC629C7F831ADC1E7CC44A2B2A4288616279B8F773BC6BA31E9D800681BCAD1EC44C91FF00464907401EE4585F4BF31CBD84792678CFA2999638B661C017CEA4CD4B21B3DD4E32E276B6F72542DD2334E026918E2A7A9208553A920A998A8BD9CEE5FCBE66351BE216BD349C3B5925445D332CE6CE9D9CEBA9B6B1B82782C61898C29E1D19032B30D299357A6CF6206D0A494DD350448B7700F507E17A81D6F1E2EFC7EE289AFED57144CB5E74A56A49F1020F88D9816F5FA5A3CA1967F115152B0011DE2D4E43D892EC762DA1E57DE32BC36474FF00B761F231E697134C1327CB4A5AC038075CBB9676B37AB9F2978620A274D17BBEBB37D9D39738E427A0F90FD23128B9C46108421084210845258B91F21FA9B456CC4997229D406555CEBAEA7DCB7BB44129250B528BB7EADB3DB604B31E7BBF0661C719E6724FDA5D84F426E92E8E674EC13ABADADED736CFF8671C12574A33E556648052C08B84B82CFC88E7B9B03160C7164E4CA49637B697258F2FAF5B5F4E5F1DECA87B2BF8CFCA2CF89060314ACD192A661FAECFB80265DAA926A53326E17DD3A509D12AFCB295AD42C83726C447D10FC09E3A317E06FF006498BEF589AA92952B31EF274A44B9AC4920782520816172EF1D9DD96F17CBE1EC5F0FAB5CDEEC4A5CB330E6CAC12B0A0F71E8E3D0C613B3BF897A661C969DC35835499EA93C971B9BA8344B89975105254CB893A094EE76BF4F7BC6ED55767AA9D5826E42139AE02497166660CE5CB38201BEE23BF7B41EDDA5E214CB952EA9C2A594B2661727281B17B33F9EFA08B10C278571CE77E3C91A0D025EB38CF11D65F4896A2CACBBEE3DCE797A7F983F38D34392C24900A16EA1002493B5E3BD7847034E1F4A842A4A50128B3A41623405C13763E47A346A462ABA9E2DAC9995732685A8FF003A943C5C8BB6D7EA0F48D8FF00836F0A0C2D964AA5E37CF26E5F1A6345A6566D187925B552E8E1214B5313C862C875C529490398E1559A50DB7BE634F2932D730A400E6F66D5F6B75BB74D1A328E19ECC27D22CCD99289EF082E52ECF7704DB77B78AE7A36686429F4BA34B0A7D269F4FA65365DA0894A5D31A4B52B2413609B252A55C84F97751DBB455C6C570B6009C3E5A54A94900009FC818BB390E19AC18ECC7998ADCE1EDF818476326A5126584A5297018D8338DF4D39F3B79C4A5A2AF30EFBF6EFBEDD2D6F78AE487487BB80403B79756D75DFCE382A0BF1B839AF60DAFA34020A363D4FEFDE3961C87B08E2260402094858EE93D0FE9D3AFD20C390F611CA4949046D13F31BDBFF004E8FCBEBFD5F85EF6830E43D847135A6865006CD700FD45FD629FC858761E9EDF48651C87B08B54EC165CF2559125F7291F2B6FE7F48E9B8DF01E0FC7D449AA3E33C2F47C494C7DA5B45AA8D3D1373002C14AD32AE29256858041484EE146F6DE28EA27F74A0819763700EF66007D6E446238A767527149E26AA5A49660C1AF7D2D6F6D6FE5838E2C7C20256AD2F55C6FC38BF372134969D9EA8E05A9B6D3466DB405B930AA6179965D43CDA3FFC74B4E951510129518B7554B15082084E8760E4373B7F88E89ED07B2B9D225AE6C896A0CE5D014347D0A6DADB4D630253F4EC759478A1E939FA55730BE26A1CC2982ECE33312AB94536E589982F213F1282A49D37D62C0DBDF03C5307EF73A4A432810C007B91B6E3A36A4F3B75D70CE318970955A10A5CF025AD3AA9603037BB8B59FCA322390DC4253B1F3030F6259A149C4520121D7B572935255826C0AFCABBA813E53FD5B4744F1C766C9ACA69825A594A51629706EE5AC7A06BF998F473B12F886A5A4912A5D45427326584A84C98F719458294480DD06D61B77BCF29AAA4FD128D81A94102B78F6B323469096974EB9A7A49F7343A8084EA5282CAD876C13BE8BDFADB09C030FF00F8461758BA8392549A79D3A62964654CB407CC4AF62ACA39B961165F880ED569B89A9A7269AA1CAD246542F5716663A5C5C3E91BDEF01591F25C3AF09F93994922D3685E1EC17457EB5E4D0F8C4537212CBAC29CD81BBD3A5D5AEE012A17EDBFCFFF00C66F685378BB8E31239C844CA99F34A10A3DDA4AA66664BA8B84DC3B9B3C79F8A923F1932733B95788B392E2EFBBB5FF004DAEEE5D5CD5A937DD249F6D8F4FD3F3DFBC68B4C524B82012E0BB8BB5C3FAEE4EA22B51A06245EEDCFF00C369BC72748BDFBC51AD7CB5D2C2C1BEDBE5AB4554462917F98FDED08443087484224045CF626C6C4F7B9BFE3B7BC5C697C0852B98EBB6CCF6EBA7E908A9636BF6BDBEB14E89E4542576FCC2C40259D83EBE5CBEB121572AF33CF57F7D629ACCAA4176694B436C254F9712A290D06C02A789B5B53771A6FD8AB63BDBB4B87B0B9FC478A61985C996A5FE2262107225CF88A6E7280F627A1BBBEB16FA9A8C88327C39A73A58B9373CDEC093E679BEBA6778DA71935EE26F3E91C1F656565F94CBFCB99875799D334E7F5D3311E2075E6D971130EA35B4EA29E996994B21B50004E39F7AFB7D047C24764323B38E0DA6E20AFA74FE2ABC20512548095CA12D20CCA898E0121D6912F44ABC565338ECDECA3B3BA9C631BA7A8EE14B97DE254A514E677513941219AC5EC768B0FA451E9944A53147A4B09669F4A9666564194EC1C742425D7937EA3C89248DBCD73B18D96E28AF4CE6A94ABC201243DAFB30B103DF9878F60FB32E194E0D85D3A0C844B5265201025A42AC058B241DBD01F37FA4949425282A2A29012544DCA881626FDEFD630B9733BE4899665DC375BFEB1DB19945C1240BB072CDD06DE513446E468488E21073A3DB941CE8F6E508E18721ED08418721EC2108A69A82EEC6EFA79DB4BBF3FDA2A242920B167770ED7E63CE207FB8FD444996179D8AB30D85C903DF76D3EAD15134A5495048B80790DBED8E9A8E713B96D02FFF00691F881195E1D332041258020B39058EADEDF58C2F1BA74CEA7AA494A4854A58BA5ECA4B3D83962368F21E174AF2A7C4332AA6F4A69F46C5B306940A7CA959AA4DCB09AF9ECDB5A80DF707D0C5E3B4447FB876638A84273A9292A700139532D6EE7903FA8DA3C8DEDD785E652713AE6A11DDE69E48284E424A967FA5AF6F96D1B8207D2B1A52A2A09011A95D490077DAFD47D0F7EB1E0FF17C8553E25896701FBF9ECE1ED9B6E619F4319B70B4BEEB87658513648D6E7F28D497D87AFAC12DEE55D0107D3AF7EFB7F68EB2739105CD94D6E56DB97EADEB45312B989003F86606661B9D180FB0F0B15794004AB600F424EC01F63D0FB476070ECC34757435E145065CC96B24129200BBBEEED737370CD17DC5D299B82CC944329528B0604BE536F1737F23CA3558DB9BA7FA74DEDF4F5FF78F6EA3D51C5670A6A13A0F0F36D05EE7993E71E01C43BCA9EC2F43C2120853957C5D8858A54AA1B1A9C710552E85A023CC08587C0E9717B8B11197607365D0D2D462534E59349227D44D568909929CE5C8167BEF7DAE63CE4F8A1E2029A1A992951F1A5490DA02410EDD19FCB6E7BFAF09596FFF0049786DC94CBC5321B4E14CBDA153D0D22E94B2EB8D38F4C24024A8956B413AC9370371BC7CFCFC4EF10CCE21ED1B159CB9BDEAD5327A8ACDDDA62D8F8586846DA7520C79E782AFBE4D42C6866285AEEFADDCE8C0F41D22E554004F96D627E63FE2F1A5D3CAAA7139A955DA5A8005F549D58EFD34B45753CBEEEA66302C413A36E6D1507416F48B12832943400903C9ED1510886108421084210FD221A4137F4B6FBEDDC03F3FEF15336685CB932C5D49DADEDF3F939D624D44DEEA59274B96EBF5E46C768A4BE436A4ADC4254A51290557BA428596E26CA02EDA2EBDC11B6E22E32E44FA697267074DC29C07D0BD987CFD48778B70A5358952F6059CEE4E9D1C9200D7908C16F8FE70F5FF0058B826C498D68D21373B5AC9EAA0C5ED2D085DC61F9144ACED6A78B8CA50EA25DB9494779AE21C4F2D2D29695A092A8F68BFD3D3B4D4D2E2585E12A58986A952E8D28528D9738F7692CE0BA49D1F958DA30BC6E7D46164896548502E0076617F7FD3CC46899905C3E66371199852380F2F69B393EE226597AAD599F65D5495224DE5D966AB3366D0DA025B5960A9D68909515297DBE85786174989CA96B5842959520B0058B3173AB92E0E9E71C6054B8BE3F39092A9AA0A206E581DC83672F6B0763D5F6D2E13782ACABE1730D372349A3A2AB981392ACA6B589E725C2E69539A0F396CBDCB09650547CA997D0916040B98CB272654821080371BEA3A3EFCC1F902636BFB3DECFA6538953AA25160CA254921DB5D5F7DDFD8C5E6B6DF2584C828A55C824AD68528ADC5396075B9ACAD76D161756D7D80B9110AA5E54A56C40568E3D75B7DB98D87385D14893292132D052003F945DBAFDBEF154129472C5823A580173F355B51FA9882385264212532F282030D353E807DB449A53E9F9910FBFBF68A1988528009F6F6EBFA1FDA7B9F53F8C5722E94EF6F99BC554B494A1293A800442E4F53788A238100EC6108974A7ADBF0247F784251FCA4F57F98FB313422ED226CA00020397F220071A68DEC6CD03BE8FF00C15AD3BF456DBFBF41D6E22D555256B9E0A4961A803404972E41BEDCB42ED1495D5C6956854A032E52F671A9B5F7F6FAC48E210E294E38B792544296F36B5F31B03FAD22E4109BDCA4A4A08FBC920455A299920ADEFD011B5B4D6DB6A7918A2EE6971E94B933509515BB381E5E640B7ED78B01E363814C11C5261676A9254C97A0E6B53D0E1C3D5691684BBB5AF26A0279A40128E9E604FDE6524EB3BEF169AB928217A39B0D2E5CD8837046F7DEF1D29C75D9953225D44E932929594A88200DBEF78D4DB1CE06C7591F98754C2B89A4A7F0F62BC2337CA4AA71A32EA9F966DD52553F2FAD080F0D4D26E4071BB2C6D620460588489C679973A5B245EE36E65EDC8D87EADA9F2A7631C2F533CA664E4A5135762E2C2E05B6671EA4B8DB353E10F9538978D7E34F2F6A95F924CEE0DC97A17FABAB95275B52E4173722ED3E5292D3CAD9A1315413333325BBF9952A421B4A52A11A6BF14DC6145C1BC198A284E122A2B50BA4968B34CA7095AAA54A3FCAA4CC4C801C87049019E2BC71855E2B35289F356B0F7CC492953DAE4E8C4BDAD1BFAD3A5D6C2A642921B2A2DF312940424AD492A5202400901A23400903E51F33BDAF631271AC66AABD3342F34F5827303BAB4E8C2DF2D62F400EEC16B9482FA9D8F9FBECDEBF45084364A9090926E49F5BF5EB78E8B9931EEF6FDDEC2FA5F488D3A0F2882D5D87D7F7FBFF0034E56E2D63A7D93F5D7DAF531327EE8FDF788211342108E53F993E63EB0892E35107ADC11F80B7F78B816EE5597928684177F778454241D449D086D049D879D5636DC8BFE16BDA29A8E42A74F4200CCA52D2C43B80FA00FA17F78A758214482FAB0B33F5F26DC83AF368C7F788D7144CF0A5C27666667CCCE891ADB720F533093414D87E7AB9372D3024E5986DC0AE6AD453F74215727A5AC47A55F065D8C4CE39E29A3A954B1DD51555395AE625E5CB75392A51601232104B8DAFCEDC29575588D02002477A3304B93AA59EDA5B96C3D747DC96A454E6A9751CC6C505D9EC519933B315FAA552714E393EB72657CE5CABCB2404961531BD908579EC7B5BDECAB461B4780CAC2F0E328228248A695DD1053DDCA4848CA1C92E43BB9BEBA5FD4EF87AE06A69786D254CD9290B2896B25490E0900FA970DF3F3F7148092D148B16505B6FBE942AD71BDEF7B0DD5757A1EB1D47895515CA994CA3E32E058DD8EF7EA2FF00E23766448972650952801943727EB6D44000901205801603DBEB10D2A4A644B4AB54A403E8037CA22D2231510842108421084226894172DF773E763A8D9DBA7BE91019813310922EAB8F4FF1103FDC7EA3F48B6CC010B012E3437F9BF42C475DA2E2856619B9F46D3689946EB427FA4A46DF33FE3E5174A69B910492C12F61ADB7DEFCB99B0EB66AD9266255AB3106DB3962DFDB61A3C7806369D99A0F107C386280B2C1A6633257349B0D2C998A616D249053A5252E5B55C9D4A24DB68CE028623D9C6352D5E27A7AA0010E73196962399B7A1667DFCEBF896C32448C550B6621614E181D4EFF00B39671A3BEE312AEF3909787DC74A1C6EDB0D0B420A6DEA23C32ED729BF078C62094A425E7CC66DD9675D083773A5DAD1D7782D4A060A84A7461E171C8BEE4F41BBD8E91F517E51E5DBA0FCB7FCFEBEF1D312E44C9B4C5694B842CB90341CC9E56D39B9DAD5B454C2749CC41233662DCDF4EBB368CF726290495102FA751B0574B5F6BDFDBAFB45DE8710264A2981F1A40209B1B036BEBE9B72789D3099E9553B38008EB6B5FA5FA7AEB1AAC32971E76E96C8503A4A09DC236BB9D3A0DF6F63BC7BE270F74A0A266752D0951401E2049D23D25E3AC5BFDBF0F99372156541D0B06DC8B1EA3576BF26ED9C0CE4C3FC5A7885E52E119168CF60CCAB9F94C5B8DDD5CAAE6651A664E792F196734A92DB2B9D4493ADA1D70A820A35142ED162ED478864F02F6678C55D48266D5A5726427433109964CE04EC0A5696D8DC0D2DE48FC4471DA315C5D785892A4AB2975E63B921258805C10799DCB46FAF2EC34DD3E9F2D2C90DB32ED6845AD608421B690CD9205B9296C1BDB7D605869DFE737B43E2395C41C5B89D72432553270CB9B9A9446A6C1FF00C46B5E08F4889885DFBC538243102F7B9DC73E562C5A390A074848B9FEF6FDF4FC3B4746AE77E17119B34A3BC042D838DCF36F724078BEA027BC52DC5DC3359FA9F5D5A271B003D22D130E65A8E8EA3F5842208421084210842237DAD6F9D8F5F4F51F94729B292A3B1076B5EFB38D3EED143588EF90C9246DE6EFF7FA4525B6B5EC8290B295A2EA49500971250AB0B8B129245FAF7F411971C4E4D5514BA64CA095A036721F51626EEC5FEDA26522D1225842F31CAA4AC652C4941CC97770403B3F3D8C740CD1CBEA6663E01C6D9775D6C4FD2B1CE16A9E0F9B95710172C6995A9398919E69D6C82A754F3532E0052A494DC5AE378D8FF869ED066703F1AE089505AA5AEBA4070B2023F88972E9D2C6CC4336BA08B0637868C4E6A67785194B90198B13721C5C8670C34768D347C3D6952DC3FE7A712BC2756E872B258CF09E2B7F10D16A330C8667B1150279C996C48294E0E6258A5B521AD2104EB1384796DA8FD5C7623C592F88F02A2C66410A45452CB5CC96924844E42121484804A9B2E455C972A277B76476672A8A8EAE54B9929335495A43EEC0F90B93661B30B4660E59D134D36FADC7D6DADAB001694AEF722E545B24DAD61EC07B18D84A4A638A2D534AC4A28BE53B82FA0B172DF60346EF615F83386A66499212AC83C235072EA6D7F60081D04546D21B6D2DF5D254759DD4AD447DE3DED6DB61D4C1338CF9D3699B28A72539B5CDD760DA7AED16454D993E7CC4A9C25077079ED766DC7C9B489A27F702FE2DED6D05EDAFDB472259DD6FFF00E503F58443DC17D587D7CAF6F5D3AC4F95910E54028B59C6FBB6BCACFA73844F4A42430828E6512030274844510C21084210841CF38453AEA132A600A482E0DD9F721CF4689CA948A8A55A161D409651D406D05C7BEAE7D4445AE2E14A171709205C7706E0EC7D2D15A9526621D2351AF43A7B1D0DBF58B45109B864ECE0660492120E9C88B11F460CF72F112A32C87C34B71C53D6E5A94417A58FFF000A824048371D527A01D22CF3E532F338B282B29B3826E357BB16B375B455E2B33FDD505053DD852487203380410FE7BF26F2386BF177C85CBEC4395A8CE49C9B92A4662E1B9C96A2529D12C958C48E4E25C52E9AE25B5B4A5BED1956CAE60A8A525C00B63588B57132A91183CFC61494CA14F295E0258928049676B6960E7918D51ED7702A4C350B32CA0A94092430209F223F73A18CCBF8117098BE1EB84F94C6B5DA6B5298AB3A5DA6E289A57C1AE5A718C34DCBBEF5165398EA9C5143A8A895AAC9093C949091B11F3C5F1D5DB92389311C4787281264FE1A64D97DFA26E742CA0A905486B04ADB30E82E7431D19C3B822EA0AA7998122E48208200D2C7524F2EA3A4678F65A52EA762A2B2E83D54EB842D4BED61706C37B0223C55C4EAEA4544EA79D30CD698A5E7279936D0F3E7B79465C0A913D74A2E5091E21A102DA5EF7E6FAFA22D0A566E822AD12C801C81E9E7AE9102904DCFA5A2189D11E908421081DC11EB112139D694870E407173025813C83C4A40D9449DB6FC37DF68A9130A14A94A199992FD6FAE8352036DBDA384AB307D2FF7E514DC0B582424AD2CADA3A41B6BE6150D20D8D8A74DC937EBD22EFC332BBDC6692982331A89C25EA7C374804B6A0BD874778A2AAA8124124155980BF524160FBDB4B5EF1A8FFF00110672BF8DF38720F85AA34FDE469B3CEE3BC54969D0B614E3AEC8B149919993410ABCB1959E2B5ADCD2E07800846824FD0EFC0BF03A384B82F887179ECB562926969E4132D94833D13F3290AD42A5B249DC66171BE5BD9AE1A78931EA6949053DCCE49510C4594080DC8F37BB6F78C65C832DC9C84853194A52CB689C9C6DB426C2588F864ADBB5FEEB87484EC9D3A08DC9DB6B254A9D453AA1532699B294A2528D59DFCF9DF5672FB47B3DD9570B9C2B8729A61502D25076D426DA752FA6BB6F1CA8C4EBE466AD35215E0752B233EA438E6C3E5611D954539536A4CA50600817D1B671CB5E7B75308A804100A6C0871EB15D3D1926AD2E0B28DC75BC23989508421084210844D4CF12D3948724BFA1DFFB037894B9256A4CC76CAC1BD5F9F51F3F288117FC41FC0DE29168EF0E70A6706CDA5CB0EB7D4FB454A67776026CD726C49FAB6DF7AC44EEB0BF4036F523F41F8C4EEE8A65AC380C82DE7D58DF6FD3468A49B3C4C761ADB930F6D62D67890989A9398CB5AB34B095C8E2391082904281332C1242B5796F6B74BEDE9D33CE0F989A8E13C4B0D98970B454F8F98C8CCEFB75FF003E7EFC55C95CBAE42D25FF00210C2E439B6A2FA6C402DA6B1B9360D9933F8570E4F120999A3C83C6DD8AE5D048BDFCC41EFD0FA0B5A3C59EDF28453F1157C94973DFCD503ADB39716FA6D1D21C3C4AF0C4254480E05EC74D03E9D2E6FF003EDAB3700FCBF21B6DF2FD3DEF1D038656A64266D32E5E74CD4A803A10A37EACCE7FB3467F86D32655266CD99C396D1CB0F5DD859EF6B44AB56B01247416F2F537F4F43D6DEE6286995F86AA42D57CAABEFA38D06BD7C85F9DBC5319150A9AA5829727297D09E96623A38DDE3510CD4C7A9C0587A7279C2815C7241F97A7B28365AE69C42C3480804A94B256DEC900EE9B1DC47D14601864C5A054CF7082B0949525C212E0E625C0CA01751E578D90EDBBB56A0C2E8EA24AA72065429BC61983DC0B7A46D09E093C1156B872C9B9FCDFC774F5C8E69E752A5EA3501509632F3D49C3C194BB212CEB6EFDAB6A7BE3669D054405256921201B9F353E363B6FA71495582D05524C9A797329CA10A1942925495120382490CFAB011E5A719E372B89F18995F28E748252E03D8924DDF500FA3D8C673396038B5A084B4B71C521BB58A01081B8B9EA4122DEFE82FE2A4BC4E6D4D7D4CE512A1354B984E61AA89720DBA6DC858463F4F28A05F99670C0FD4BDBC85EC4454B6E0FCC7E9FED168CFDFD52C936F11B7276F99F3FD62E487CA3E5E5F7F28451AB53E67EB114238842108421084210F3892A4DCB24B797DDA222E08B758AE91318A46A9B007A0F6EA7CC9884A1C3652C3A18A6E38A6C17EE12E320B8D85DB4EB48BA6FED7B77EBD2E778C9F01C6D7846274B5F2CF8E9A6A569209242828283105DCF41122A907B898424B849D0176D36DF97ED1A9878C9657CCF09FC66E4771B387DB729F8131BD54610CC45368E572A7256624DE70CEBA9B25B4CECBD542190E24EB2CB96240207D30FFA79F6B52789F8729F0FAB9EA5CC4C8945282B0425811354410E424049D587B43867153495D2C394B2C06B3862C36E6E35DF9DE2F5E8F5393ABD164AB72251FCBA6E42527DB710A0A6912F36D95B2B2B1B695E95E93DF4ABD23D4E5624292A92990AF04C50622E4ED76E5AB5ECFA068DDCE0AC6115987CB04E6F0071625DACE0FB9D5EDD23E99BA56A42B65A2DA927A8BDED71EF68C9534B925A2A4243D407246FB8FAF58BFCE94997314B01B33663EA59FCFF00B42388970842108421084210842108422827A5E68EA3F527E86D1CA67041C84FE60F60FD19F6B3C4C9246B55AE10852D67B250917528FA048DC9ED1552D795236663BE8799B0B3070D6EAF15669730700105CF202CE3C88DBCE283E5B6D21C0B0A0A5349D8DFCCF6AE50BF62BD0BD3EA126DD22D7555012B3999B5049D03B1B1F968DA1D5C58F11A99547267289014942882580F0DCB3F30FA6CDA5E31278D30A57BC41BC4032DF863C2E5E98CA0C9D9E6EBB98D55944AA669CF4C3D392A99E727261043082E1910994E66BBA4CC017DEDAB3F123DABD2F06707D723F129939E54E972867C8A5CCC873100BE64CB1942D9AEA4871BE96F693C44AC527CD94951584AC8201CCC0120025FAF237D2373EA1D029587A934FC3B45A7A69745A24A334BA44925096912B4F92406A5594A4252025B6D21205ADDEC9B6DF2C1DBCF1EAF1CE29C42A5330AD1326CE20E6FEA516B8B7CBDDC4621C373552A5906C140B06B97DF5B79B5BD447DE536842414A813B020107B1DCD8FB0F6FC493AB55134CE9EB986F9AFCD89BB3E8D72C390BC5FD2826A5537FA92475D8FB3066FED1244A8AA84210842108422649B4D437F50810E08E61A236F2DFDEDF97A44E969CD5A124FF3EED72EDD3FCB69BC219367D39FBEBA79791EAD514AB21006C1016FB84F72D849426FDB51B81D7A7A88EE3ECCF87535DC5986787313532F51AF893CB771A7BB5A2DD549330A85DD49661B59AFA3EBF7A0D0178CCC66BCE4F124CF9C5734F7C5C860899461FA6BC17CC976D72B313AA6996D77290B5952AC91B929BDA3E943B21C24F0EF661C394C94A659AA136A96C194A42A5538944976B10B6B6E6363BE19B877F1F8D575414B8926581E1704BADF4E6C1EEDB738F8081A753C9DCAF96D04F5296DC0B2E9B0EC0A51ABB0B88CBAAA715055F6201D7A5F97405F6EB1EC9707524B95824A90C3FED2037A680E9B39B6C3D2A463D509CC5CB59FC8B74FF3FAC433650A3A852D80014D676D776D5C6BBF43A9440341E42271567257FD57F784731C42108421084211297A8F2FD4C463F22BCFF684469FCA3D7EA629D7A8F2FD4C22B121F3067F09B7B45245AF7148162818450DA0971389A9810026EA3CD7D1CBB773AF96AD236DC11DA3B038469D12B08A82A0C324F5124B0CB903EACC367E8DAB468A7C57292BA99697B84A188D3771F3B746DDC1DC5F2E99533807062177E62B0D525D5A542CA0A5CAA09B8EA3A478AFF1013E5CCE2DAF45AD366BB1B0F196176B5FD341D35FF0305386A19C7892400D6605EFCB6B6C3CE3B99047516BC6B52D3DD4F2A018105B737D48D07E82D68CDB0EAA269F2A9D57B6D61BF2E9F7686FDBAF6F9C48D66B820B904EECFEDC989EBD6229ABCF99CF436D80F26FDCED1808F0AAF0FF00C55C6067052389ECF1A04ED3B24F2F2A7295BC19846A2CACFF00AB8D31D44E48B6FA1E4843B2F31516DD6E60A5B72EC102D78F693E243B75C3BB30E1A9FC3B8654A1788D4D22915B528983F86A99DE217224105CA4CB090B5784E6252DE073A9FDAD71C625C498BD4C81397DDF7AA09439D1DC1234B29FD9FCB751A5C94BD36974EA6CA30CCB49C84A372B26CB2004372AD957251600005B49E5F4D82001B08F01FB5EE32C4389EA2A27D44E5CC44E9EA5F89449295289DC9D1CF9F2D0C60982514DA7A7509E5E62A6155DC9661637BBEE39302F1CF26E49F58EA8C1E84AE92A27B0052950049D6CE5BEC6ACD17A12C06BE97666DDFAC4CAFBA9EFEFF4E9FBF48C7652FBB9AA503A15021EE799BF5BDC7AC44A5652CCF67D7FB4491C12E49E65E22842108421084210894A6F7B123EBB44C4A4100DFF004D7CA1104ABB1EBD8DFEBD7F4B402B2D8EC751E7088A9C2871B5E9E614292A083BEB2157D3DFADBBEDEB1365679F311293AAC8487BDC9034B3F417BFAC70B47792E625C070CFC9DFEDB7F91C7F789AF0B948E2BF843CC8CAF97944D4711B346A8E27C3932E361D9866BF48957661A44A020A83B32B32ED8D27512D0EB1E9AFC0EF6A957C1FC5B87613DF94A0D4C84141514A48CE014A838F09DC369678C22A54AA3AC490420858CA5CDC38D6CEEEFA90DD63017E1BB9C3378DF247FD0B889D73FD5F9433731836BD273AA2671D96A71D326F4C2576585051984DD40D80B031F4DFC3759FEF583E1F5E14266794898562E0F8505C5FA9D431F48DA3ECC71952A44A4297A849673CB467371F2772FB6431297D3A79E4294A69B5158E856756B4FCD1E51F5F717EDF97342E8A9A58FE4431BE9A6CD6D39DFA1B46C0AA689A84286E1FF60D7B5ED789E25C4B841C6E7CBAC2108421084210842108422927A5D614FA59BCC738A5593F8848D4302C35D7F6DB7D220AD2015292A58482A0DA05CB8A4EE1B23B85DAC477110AD4132F523C21DB5008FBB383190CD5F754C565DBBB3A5F627F563EC1CC5A671B3C43C8F0F19295DAD34B44E62EC4F2EAA1E0CA530A1F13313F526D4DF39B4EEA2BA7AC327CA094FC40E9717C271CACFC3D354CE52F2F752662CB9032E51F4E5A5FCA35E78E7890D3A6A519F2E64AC0F16F71F4DBEA22F9FC1338327787DC80566BE60C9B9399C19EEE9C49896A5506FF00F5D44912D97E5A454B7017521C5CF3BF78A2E5AD85C08F9E9FF501EDDAB958B546114552A4C890B5489684A880C0A8198B0090662C0198821D83C6AC842ABA7D4CC582A2A98545F525C161CD9EFB8B98CD9A15A9A64A9252E7291CE04DC87ADF69D86DABA6D1E42621366E2F4D32B66A8AC95924B9B9625FEAFCFE952995F842325B448036F32DEFFA5A268C31ACFD5BF7FD22ED4CB52CA546FA8274D8B5B6F9EEF7847115D0842108421087489B203CE962F750D3586B004690013604FE837FEDF8DB68A8929CB5E010CCB4FA31737FBF23A44A9C7282E40607E42DA6FAF5D7778E0D59458A7CF4CA1CD21320EA7D2CF0438A17F53BA4EE36F5BC6D276252E5CCE2DC252A00BD4C92188BF8D04EC7F6DA24C8489A5208198A8BBEC39F9F98FA88FCE5B0D569CC479DDC446259D3CD9BABE624FAD6A26E796D4D4DA5BDEF73D556EDE9EB1F4774129345C0FC252C32569C2E4A54058384825FCC11FAB5A374FE1629E5CB9B8B4D2920E6490FFF00E673AE875243EDE9EC65C7145166EC92773BED7DCF6FC77F6116A54C7B383B81B7CB7FB31E9BF0857E7948927602DF4F7663D793C548A399737BBBF41FE5F56E9A45FF001D941092B4B30662D72ECC7AEF7F43088348B64824C996497748BF384226C2108421084211297A8F2FD4C46E04B5396BFA6DBBC2234FE51F7BC53AEE43721F5308AD46A7CBF5114330E542CF204DFA45B7E774A3F8AB15E4EE0C934972A98971A25C6A545CABE1255FA7096361BE9BBEF5BBDEFEF19AD0552A8B85F14A963964D2543EC33A903207E658EB6B7988F3B3E27311EFB134CB2B21D4904022E013B74275B7B878DC870FCA894A6D324D07ECE56424D86876421B65294A3BD80B1DB63D7B4785BDB9622B9DC675E12A71DE4C26F727BC3AE9F521E3ADB8765A66612826E4B5F46B06BF93DBFB47DB73B7D7FB474E544C4CC4CB601DB5DDBF4EA09F48C964CBEE29CAF51A3DC5DF9FAB86E514E24CA0EBFBF3FD2212B706DA8E7CFD2325781706E1CCBDC3F46C2783A912587A8187E511214AA653586E565A4A5D0D86CA1A69A09424A8005CD22CA56A3D0C639DB0F6BD8A717625513313C4D75A55314D9D6A55CA891AA94C1DDDFE7B68ECE94BAAA9335473AD4B2EB2EEE7FB9B39BDF6D3BD21094202136000205BA00493B7B5C93F324F78D6AC4B129B5CBBAC9960061D43EFBBD9FA003577BBC84AD08CAB249B6AFF00AC4FD22965D6D44A96654B985282194012C793DF5F3F389F0F6EDE91486E49DC973D4C70C0EA01F4842398421084210842108472091A130880481B811C4220B52920AD3BAD035209DECA1B823AF422F7ED159875AAE49019960DAD1C1B850E6086E6E343D0C715D9495130D9754E34DB8C292DA59074B4B55C95213701249209F5EE768EEEECDB1D9F81F17D155C89E64AD35129614924310A4BDC37986FD62C988534B989CEA402522CA3724B6B7F3B9DB511A72E78E049DE067C57AB54B0CB749C9EE2B15F174C4348F85A3D2EB9539B71993FB01F6085B4A75D5CC292A04731074F98C7D497C237698788F8430DA4C42AC54CEA7912E58CEABA92B48C818A8F892412A2362036B190F02635328B129728CF5265674F85DDAF76BB071A1BDDB9B464F12E05A5294DC36948E56F70B695BA1E57ABAE804BA77BD931BD48CE9F102A0850F0F21A6876707CF5BDA37530AAC978861F2152085282015A8751EAC6C1B73D0E9344CCCA2CEA25B99FB7F58E664B9D98F8940B8D5FE9987DD8738433A9FF003126C2E74E5AE9E67AC56D2D8B2CE81AE5EFCBA9FD7D1D15892E073163D4B5FD3E711AC82A24583BB337A11F77844510C2108421084227F2A51AD7B2756907BDEDDBD7E5F3BF68A5AFAD91229172B20EFD45C2B522C2FF002DAFCA38FC14E9AA13C12109074B7BED6B6C74F6E24FCFA28928F55A69D6A569B4F6953B3B3CF381A4CB4AB092E3CE95A8F4420151E9FE2D58555A65226D456B2E5A412CA701989DF4605B4F90618FF117114AA2A499294B01484900067B0B8D6F7EAFAF58C5870B795359F13DE3ACE2EAEC8CCBBC2D70FF003AB7E48CC053F47AB622726C2D99032CB0259CF8A4D36D3977095252C6A49B46897C5676E143C1F846232A82BC5356D4C99A8972D2B0932A46523BD5328399C49082D6EED5ABC69BF1BE2F515D5EA4CA9A4CBCECACBB927477361B8DC7946E2D44956E9F288A749A12C4936CB4C265DA1A19E530928693A00B04A53B253616FCE3E69BB56E309FC598A621598AD5AAB661A99CA44C9AA73F98B0B956DA3683517734D229A4A5083DD8CD95DC8B8767F7611DA6EA3BA892A26EA27A93EA635B2A2AA62153244998A448CDF901203DECDA35FDC9F49A644A2CE816D180B422DF11265A505D21BD9BD035A1088E10842108421089F4ADF8894E1C670E34E708748A99A526BC14DC7789D39BD9BE512A6876E773E65ACFEF1F22B6426993E4B61C6D328F2D4D1170B7396BF314DAC49000FA7B08D9BEC1D4A1C6384E73635528E52DB2D2CFB38E4CF77722F13289290B0E900B827C81D1ACCE3DACE1C47E711976D191CD2CFF00A3CC20375092CC19D49D40071083393C426FE801DAC3E5E83E9196B13B82384A64A0DDE504A5E9B14A3A93B6BEFAC6F7FC294BA69871B0B969CC3BB60A6DB3E9A3EA6E35F28F7E52CF90051D3A74903A155875F736EBBF78C6EE94DEE79F2FDCBFD79078F40B87A9A64B98952414A2C459835D98F2D3AF48453CC98A50092A2E3DB910D68CC6BD426490959248E7B103463EBB7D211126C963AE9E57FDADE516B94C25A43378436CD77B7DEF08E623842108421084221EE56A0A98F64D9B61E7EFFE4C43303CB3D0A8FC87DFCA264A50A365A8A4589B8EB71D07BDFA44B9753290A12D4D98170FBEEDF767DE2A70B97DEAFF008802824BDCDADB6FD77B9F489F415DC200B01D48B5CFE67F3F5ED19261D48AAC9D2B2273256B4A4DB5048D6C6DE7C9DF48B6F1654D2D150D4A90D2D48913141ACCC937E7D49372EFB4752E13F06CD67C71F78224512E66E9595D4F355AAB83ED25645C919A694B4366DA50A7801ABA151685FEE889BDB26274DC19C115C3BD4D32AB0494CB95A674CA44D338962C582E5F4BE8C03F933DA763231FC6EA52B589CB953E6049D48F17840F624B1D985E36D169B665F4A65C290D048E528F5522D64AB6BDC11D06E01FAC783FDA46209C5F892AAAA511312B5CC04A6EFE2B3FB9B45470952CE974C1131CA2C4077000E846A4124ECC20493D493F38C49669D144996B4033C29DEC0E971E96D75F568C927CE42A61903401C87DCEAE3AF3E761108B7A662125C24FCBF40225E54F21ED195F4B0194F9544DAC06A24AAC361756E49E97277BDCF78D40A933EA27296B249517724971D2D7EBD59DA34B68E50482A5067B6F7B33BBBBD8388AE8FBBF58A59B2C4B2066CCFF00DBF7F94561001B1789A254710842108421084210842108421084210DBB8B8EE3D47A44FA698254E42D5A24BF4B11F7F281D0ED6D794012140EA06C7CA08BDBE5BFCAFF00DA328A1AE5C9AD97572CFE5585120960CD705B6D472DA29EA650992169087394B293D41DBFC6BE7182CF1DFE1BA733638617B3B707D352EE3BC84A88C5527312C926A535245B4BF3F2A852105C976E5853D8534E365C254F39E54E9055ED07C0BF6C424E3384E115557DD49A85CAA65AD4B3FC2CE40EF402D9B28D03877D4461D4D3A6D0D726600A395692002CE017617771E76EB68B5EE1633969F9D59138171F22650F4E54645A90AA34DACBAECAD6A4D96454A5A6490952032A71A0DA943CF75929469DFE85703C4E562783D0CE42B32FBA057CC1CA9D6E5DFF005DDA371BB28C7054D1CF44E5B8CA9CAF76E4039B33DFADF668B8C01614E2169014937480490A6B7FB4B902DFD3B0046E7CD1746E7E9D3FBFDF9F702A64B9E1810C1807372FCAF7D39FBEC8453A93DDE8E4E97EB7F6FBB6908AC941903ADFF61E8D1182E01E61E11321084210842108896D6E84357437AC3CEB2E4CACB5284CB212E4C071D407168286F42B669448FBB73B463D5B23BEAE4052990C1C1660C777FBBB795CCE234D4784CE131694AC956A766DDC5BD3F58C5A71E79B18CF30B10E13E0E720C4DD7334735DF91A7D6514A79C43141A2D466554F53130F4B85AC3CF813066D2A6D0897974CBB816E29D525BEAFED638E309E0CC02B26CFAB44844992B5AD49290B510939509B8754C6200FCA08B90D1A71DA37144C5554E972A61233166516D4B13E5EB7F71B2F702FC20607E0E787CC2994186996D7504B0D56B1BD610D36CBF5DC5936C3226261C436562CD96B4241715A49276D463E69FE2DBB72ACE2BC72BD326BD739014A952C09855965A54A09426E5807366677E91D4F4895D72BBC98147C40B92FA8724B976766717B8E422F219934B26E14543AD8A401FA98F37710C5A7D42D7994ACCA249B960FD7578C8C0603C9A39A4DCF4B6D61162BDDC924926FD60030FAF53CE211CB866DDDFD1BFBC7308E2108421084210813604FA0BC47295966215C943E767F477812C09E5135C045CF404FE62DE9D444F90AEF2B90543550373A653FDAFEFB440F99C37AB3B6BD7969D5F68A2EB48986B4BAA6D2C2DA7DB98D44DD0909BA5562083AF5286E401A7AEE63613B25C565D0715E16A2A0922A653DC6CB4DF5B6E3CC126E625A96A9398005D2C42AC013BA497B00C1CDD9C6BA47E7B79D181E632A38F0E26B08D41025CD5316B957A33253CB33326E3D39A5CD3601215736292A1707DEFF48DC058A48E20ECEF8566CA751914269E692036794994A2DCC34CD0B1E40C6DA7C30F12A68312C4644C98009CA94C093A12B1A1B91AD8EBECFF0057ECC2580959517105C7469B729D16B35B1370756EA363B0B88E3104892ACBBDF4274BF51A6C5CBDC748F57786172EA30E97516FFB60E9A0B6ACFF00ABDDDB589E2D929A61629D03B6B7F4DF58A99930CD9C65BE6D773ABB173F7ED08A8D22023296E56F6B421084210842108440F436F48AB97325A299695119944B02402CC7EBFB6B11E42A412CE1F4D8EDABEDFB36B14CAC124B89B348BADC55F70840BA881B6E05F62403D2E3AC634AA69F36A9D092C556376D7FBBFCA394D40A294B5964B026E40B00FB5EFBB74DB4F38CD6C7F2F80F09CC55CA4AAA01A7D9929242C844E549B405A2552E8BB810F07590D3A1B5152CBA9D00201576F70AC812C4B33328292082A19420002E4B5920DC9B30B9208BEB076B7DA2C9C3E9EB64F7E12552A6A00CDB949660FA9E8C766DA32E5E117C303D94D94F58CE0C6D4E98463ECDB71B9853F329297E9F2812E38A95438ABB8E36FF00C5A752D41B23942C937DB49BE313B4B4621493B0FC32A8CC954C1725012ACB701944A42884A94D7D49000E51E7660A9A8C5B17AA9D312A226542D6E5CB82A7DEEDD47B46608795B61BB11C9650CEEA2AFB808D89EDBEDFDFAC795D4733BEA89F327A89CD99409F76EBD7AF3B4776D2A25D0D2A5360A09B82C58B338E7C9F7E42CD1B0B5EFBDFA7F78B7559CD3D65F761E4098B5A65AD55467310823AB3BF5F23ED108A68AD8CB446A04DA82A709B0E9ADB6FEEE5FA469A29D23C2186EDF2FF003E5787D6FF008FF70229CA94ABA89F53FB130412439D5FA7E908E223842108421084210842108421084210874EBD3BC22098F94E5D7F4895685DC2C03A46FD7DF6FF001D37FA08BEE1B324A69E609AA00876245F4D46BA5F97D23994B4776CA201637201F6DBD2D1D4B1760EA4E37C358A309D6E525EA14DC594A7E95352CFA02E5C4B969E439CF6D6929597BE200FBAAD91BDB6BED17C3671B49C178C2833D4AA5A13532B7292C16346D7AB9EB18D55D2854F0B480466D53BF5F2FBE91A6CF0BF2B53E0F78CCCFBE09B190E4D26A9587B1860371F0A0CFC1BB373AD3CED3FCAA484BFCC94BA11A5C1CB4EB40B08FAAFF87CE33A3E27E0FA2A8935499F964094A577816BEF25206652C139815661E7721D8C770767989A6915369D331944A583B1B92C3605B70010CC232D4D21D265D6A515699275A716374A96DAD91A491717373626C15625254018D874CC428120D87DDA36530B33E6484CD5B94B03989B333EBD1F7B93B0BC4F1CE649DFE47F68BD2549AA5044A7528580B33BEF7B69AC22E32D0AC89B6C371FBC44A4141C8AD5363E908856B08B11A6BD3D9E388136EB12CD4203B916D6FF00DA382424392C39F9C46C6C0F631C0A9964B0209F33FB40282AE92E39889524293A93BA6FA49B1001F7BDADEC4EC6E2C77113173512D1DE28B27AEB6DDBEFD238529290E48116ADC5FF0012742E1AF29AAB8A670B351C4D32448612C34E1E63B56ACCDD98972CCB2438A765D9794CAAA20367992C5286D2FA816C61BC4588FE0A966E2692934F292A4A979C27C4C6C4A88000704924243B92D78E9EED0389FF00013BF0D2E690954A0A64BD9C1B9018936D399D768F77F05BE0731261192C47C6A67F48BF3F9E399EB7AA785E8B536D2F3F8530FADB4B92936DADD2B6587EB2A79D9795432BD6D7F2ED4EF242904F873F1C5F11F49514F5D826098A899512FBE96A44A98B75AC3A4BA8B16B3253A02090D98BEAE63552AAEAC5AD799492336627C24927C29BBB8675386F10626E6360E6E518974A3E19B75284A532ED36E2829C6DC04AD538E1D4429254BB0B2D4BB20F9378F0B313C5B12C4B119F57892D644C3317996B511E251CA082E0285EC2C5C39378AFC384B44ACA03314957E51993BCB497724F3206A09B3373631559904924A497D4E5FD58C57C229A6F77A219DCBB0FB1EC6108930842108421084210881E87E46394EA3CC7D638502410358893F6647537BF43B8B6FF005F6F5899295DDD4A56A0C124BFB9DADCE21969297CD7F26BDCF5B7BDA25E59710B4292D212B43683AF51D7A54B2A26C93D01036EBF3BC661C33894CA7C7E86A65A94254A9C852D4EC0242817B31275EB6893529510AC84AB3289E89748013FA82CEF6D2F1A6B78F4E4F5432678AECAAE2464248B387F33A48E1DA9CDB08024E5EAD479965D5B530536D2EBC8AAA4A4A93A5C083655D26DF463F06BC694BC6BC095584D1554BA89983A69E6CC964B2A5AA6CB5266972D66948B03E4EED19FF64D89CEC1F8864F7AA3284E988487536665161E5767B1B69162ACBACBAD735AD2E2668B732CAD04292595A54A2B045C58DC5B7055B9403636EF1C752D5464A1CAD24860E030B1198116F76DC73F69FB37C4454F0D485A5798AE44B3A83FCBBDEE3AFEE62AC5253D1CD949EF6686494B0653BFB1DDADF5074CA2814A35AA330784921C860CEEF7F21FDDA110ACA41241B5B5F61FA3F58AEA85CB4CD580A0CE75F3308862505A54582813C84204B6B13532D4BFCA1FE5F7F7C8C2210A49B3FD626FE1677F4FCC42228817266203A936DEE0B79C06EA427BAC94A7DC8173BF4D81BEE445B278AA5D54B972925482DCB9BDB7B06F5EB12D388514950A69B31A7AEE9433F84B3B97B6FC8C70EA33B4E94A7BD3B3936DCAC9212EF3E69E0B4B0D36C80A7D4B5D88D2DA3CC40B950D9214768CF705C3A5CF5A25AD2F394058A7F5235F3F326F6C038FF8BB09E19C36754621569908085104EAD94B69EAED6717678E1F07390D39C6FF0010CD57EACE25192194F3B25509EA729414D56A724DF71F94A7A5A04F3DC714CB85D52829A2DBED02E120A5359C678A2383B87F145CE4F753E7D1CE9689A09265A0A09CA948DE6BB1558A02410F1E5776B1DA0C8E29C58CAC12B7F148138E6092012A2AD4936F0D980B12E368DACA4A5A56954DA752A4E55A94A7CBC9A65A9B4E603653225B4A5082A435A90D92128B5CA774EFDE3C52E30E22ACC6B13C54E26668926AA70415A54A74951219FA3EB6BBEB17CE11A1934B265CD9B91331684A95A13988E7A83B5AFA6FAF2D9E6165AE60B2D09E5AC92012B46CA3D771B8DF707B131D23882108A82287C4093F96C6E77FCBAF95B9C5F3129B30CE0658796E1CA4E9772587CF7D468F135FCC5237B024900D86E075B5BBFAF689D4F854F54B33E6CB16198EE48DF98D4F4BE9D6E5F8DC3D34494F789EFDC166255A1B3EA4B6E6C1BD627D0AB6AB1B7AFF00B753D228D53A91337BB09BBB5922C4EDA8E607BF28932A626636453967DC1FBF27D632CD1A451A75084210842108421084210842108421084210842D7DBD76FC606C09E51C2BF29F2310D5BF2EF7F63EBE87F5F43BF78BB61D2D33654E05883D5B401B5DDFF4EB14CB43A416005EED66BBD86BA6FD622B6961B65B6C9F8879C992D01F7B4212D6C091BEEAE97B13EA378CA383ABD38263922A9F2844D45C69E151209F3DF901D628262194AB5C0B3960E5F7D187B7D6358DF1DDC86AE60BC4F93BC79E57D3172D5DCB4AB9A463E725501B54DD26A8E4ACC21D9D527675A964D32600E6936E71B0DCC7D097C01F6CB22BF0EC470A5D4A14EAA70119866CE91312026F6D4B80C15BDC089F86E2BFED788531272E755C8274047DFB69631EA396998341CD3C038771DE169B6D549C4F234CAB34C0375B4C392CB5A257A1D2B96E7044C0077529172A22E3D9AE1D992B12A04D424A559C036B9BB1F95DC9E76B46E7706E292B12C36520AC2894246CE430049D2F6D1B7F28EF315E6481332021B301A5BD3A731BEDB465F2650A39D99AC4920FECDD08DEDF545CC4C094A5214C121B293AFAECDA86B741098BEF16A5732FF7F584524CF1153117BF4DA20881FEE3F5114736966CE494CA4F8CB161B804126D7FDFDE25CD495232B3B90EFD086B6F7D3A889D5FFB60FA6AFEFEC7D3FD8C5D6824D0CA1DD541489C468AD41FF222BA969E58944AAD6246FE977BB373E7B474ACC1C7B8672DB0657317E2DAA3146A4D0255CACCEB8FA8A135497936B9A65A5AC0DD6AE496AC020951B5FBC635C5153FEDB295349690DCCF89CD983172458003CA3AD38C78965E12898D312E87736BA6D6661ADF5DC13B98B1AE04385AC6FE24DC4F4BF1539EF439A94E1AB2C2B68395586670E993C46FCA3A8984CF4C4A2545A9861D99E520A9FD4086D4922C2D1E687C58FC51E19C1986CFE17C3ABBFEA2AE9E62AA929210253A549125ECA135D24CC6190A549F11B81ABDC47C49FEF95A6785B840284DDC177625ACCFA1D45CB6B1B74D3A4E5694D49D2A9F2ED53E4241932129292ACA199532928847C3B4D25B4A5004BEB51B048FBF78F9CDED538E67F14F1055D58529626CD5A9DC9FCCA537305B99FA308C6C4AEF941C056C76F23E97BB5F478FAA5606DDFE5FF1DBA474C6293E729294A828279836EAF7D9F95B66B98BBC8A6EED1CCEAFFA00DA0E4D7BEE584D16289F0842108421084210842108423905883C883ED08409724DEE77B98452712E9E9D2C6DBF61D00F7FF6B45EB05599738298366BF26DDED77D8B9EBA3873F9FB0FD1A31DDE267C204A7197C2A63CCB6128DAF1652649EC53822A6520CCC8E21A5CBBA65589776C56D09D53890E041D2B2CA35821223D16F83CEDDC7657C512E8A69CD498C54D3A6AA4953266CA4A94952482406F19B10CD160C4F12AFC2EBE86A6973012D4E4A1C310525C91E5ABB3DE34A4CA5AB54E9ADD7F2BF1AC94C51B1D60C9D4536A3233A0A6652DD08BD2C89720951E621530BF880482496F5151008F77E4D0E17C43C37FEFB864D975027C81554D312E153254D4674299412AB81A1D8691EA07C3376CB4D88D1D1E175F5094CCC92A5A90B5B97218EA4805D9CECEEE58C7B0C74D61F5F892B1799455695A64216A4877D012036D60F7200F3DF7CB119085D2A2B70F2159D216E82082F7DB5F2D356636846473901331413A662C072E9D3A6D1229A42A6CA4296019840CEE40BFDEBD6112B2AB91F689A640478B2A411A31FBE9AF9EA211C290588367B3FF00831455556B91297DD139810183BD9B421EEFAF4B1BC225143071B3EB7B0D35773CDE20A2AAAF9E74985C0737D2DCCB6FE606A39225952DED7F33FA388AF9A8AA2851567B6CFEA4B02DCEFE770D1337AD2E21D6DB0B0D2AEE29EF2CB21B558294A51F28504EABFA0B45E30854B4CF96A9D2C1255F9887013B925886D5F76E767B6621270FA1C32A71AAB98844D9095105643B24022E5F57B5F5E8C63CE72FF2831FF1D39F546E1AF2A915046156EA32CFE3AAEC9179AA6C8539B750ED450A9B97F373D72C1619654034EB83438AD37233CE34E3AE11ECFF00860E3558BA7A7A9EE262A982D28CF31494F854125C99614F99475B84B9063CB5F88EEDA2462CBABC1A9A7A660495CA2016D1C063CEE188D2DE719B2CC1F054CF6E13E992B98BC0867A54DCABD229ADD42AB97F8955332D2D5DA84A239CEB68937587B0FCEA0A8680671E0A21442AC0DA34C387FE2AF8278FF18A9C0B8A853CDA31366265CFCED36582A09F0824226060084AC9483A6A634164E2988D056AEAA485A42965434CA6FA16248FAB36B1E5B817C4A330B2C310BD96FC6B64E57B2B71207112F318C29B8704961FA8104B456D4D4B34CB213A81714B6DB03CC08247495C5FD8AF0771B61D3712E08AAC3F134CF54D50A692B952F1090C017994EA282A01F59066070DC9FB4F03ED3EAC2E5C9A8CC8203397297B3B2AEC5F57637DA32BB80F31703E6361C97C4382715E1DC5524FCAB4E308909C6E6265964A6E96E605814CC3608E6A49D4091F38D22E30F87AE2AC126CDA9934D53DDA4956421492C1C8053F9800016B01ECD1DEB81F14C8AE952CCD9A9399237075D5FADFAEDADA3B8E9496D971A7C6879056B95BF992B007986DB04824582BBDF7EB1D4758713C03FE9EBE926A43E425692DA9704E86ED7D1F4D233DA09785D52DD2B9654012580D0B1B7936EDA5A25D5A4137500373A0E95586E6C6E2C76D8DC58D8DC4712F87518B844DA1428CF9846542527F317374E8FCC9B1BEBBD5D65561D874951CF2EDA170DBF3772790B0763D32D11E7D469B42108421084210842108421084210842108421111B11F3889092B5040D54587D986B14EDA9C161736DF6DEFBF53EDFAFCA2B25D42A90A917D9D835F6B5BE4F7DC98100A43E9703A01B8E4D7FB789DE5594829242DBBE9503E64DC0074AAFA85EC01B5AF6DFA4402A26AD59905414F60EDBEF71CBD229168046815E7707CF359C5B5B8F68F15CF7C9AC2F9F99319939518C65513944C6186E7E9E65D4D21C519F71A58935B214094BE85A8E871165A01558D8AAFB9FF099DADD5702713A29D550B962AEA656519D4904A56C5218B87CC46BA167B458713A25CC99267A411DC92480D616F16C1836B7E9D351BE01B10E21C84CCFCD4E05B359D5338A32DAB1547F08A674ABE2A7E41A9D5CB4EA25661D1AD72EEA8492E55B42B969690BE5A529B88FAB0EC2B8E2571270BD2E212EC9AA912E78961B2CA529214A96350C876B38362F1DBFD9A7189A59B268E64C7282941753BB167673D4DEDA3EF1961654EB92AB99290801DE5B92CA1F68122E09077576EB7DEF1DC526B1332B169170547C2198DCE8DD0F4B6DCF6B65D50ADA54CC43789292082E74727FB5F52C778AA34FF45F41DD3A892AD27EEEA277BDAD7F78B81980AC8666B11B803A8616B5A2343E50E19801E6D63ADFDE11390339617B121ACFEACCFCF7E71142C4824148D0953B655ACAE502E1458EC4B813A123D488BBE1D369A8E78A8A864CB0820E6B80A2922DADEFCDB4E71C804E9FAF9ED1F231055E9B46A33F5CAB4DB7214490617539FA8BCF2586E99C8056A4CD28A9376FECEFA141492955883731D5DC49555E9C5975D499C5225454E9242425CBBE836D9F48C5F1EE2497854A58EF02084ABC4766041F97CCEF18B8C3383B333C5B788890CAFC0CB9AA470BB96B5043F8CB14239B232F88912132A999F9365F486D736CBC1B534191A90B4ACA4A6C483AA5F129F11D85F0670BD4C9FC4A25E26890B12A5E609989535A6AAF99241F14B7F166014C12413AA9C6FC4F331754D972E6382A21C10C45F7DDDFC8731B6DFF0094796984327F2F30A65AE04A54A5270B613A4CB52A9B2D2928C49A1F44BA945734F34CB6D85BCEBEA7097560ACD937276B7CC9F6E5DAE62BC77C5759593AAE74D42A62C24A96540BAD4CC4923D4475C61B493C662A0A2EB203DDC1E84D9B6F2EB1E8AE2825494800841514816B20A800AD23FA4AAC35586F6009368D779B56942CAE6A8951399CBEB7D83EDE6C3934657229932D24E8AB392EC7A3EA40E8E1C9DE298428EFD8EF7BEE6FFBEF11AAAA92AA5A86AACAA60C07D6FE4DD5E2A0CD4203393C9FE436B7B6ECF15A3175B675368E5A21D6110C210842108421084210842108405C81CE108BAD29EE806706C5FD5EE3A107EC423813626F5244B381B4AC10E056E959360949491624EF6041EB19FF000A62429B12A6AF3332AE926052482C5DC1E6FB6B607CE23CB48B953135284A8A8320A99C58BB1377D34E578D63BC627C31F1139885DE32B869A73BFEAAA448CE54732708D325137AE35AD97E6DC97A536D166727E61414A5BBCA53EE04799674C7B87F09DF131475D87D3708E395485534C97264489F3540AA9969192512ABACC86242903300729086048B5F0BF1262DC1FC4126BA8E6CD448973731C8A21050140F301F5BEFB98C0F607CC6A36336A62594B99A4622A2ABE16B7876A61123544CEA0A92EB6D4ABDCB73CAE2169B2136BDAFEB1BED8A609435325188512259993E5F7C89924A5489885004292B4B820821C3BA5D9401D7D69EC5BE23F09C570CA6A3C4AAA599A94210A13141CA998820D817605F959C88F4E96507937425ED42C552F38DFC32D83FFED17084070A142DA82DCBDAF7B461AA92B428A569F10B1701FE778D8DA4E2AA6AF9C6753293DD4C53CBCAD97293A803417B10D106D4495837BA480410748FFEAA3F787D4DBEB10F767FA47CA329155DF49CD620877166FA5F5D3DC69139BDBCA424EDBAAD61BEF7B823A5FB758953D39259565166D81672DFDF711434F3651AA409E5D0A512ACC036E40E4EEDA74DE2575D4B68BB8359EE5AB8F97DDB5AFDF7B9BFCA25534BEF94D7655B41F57B7F862F1929C5707A196A566941924DD80040E418BE83A920BB470A72AB212095393938DB326DB45D5CFCE699269A013A8B639819E6949F2DC255A88B826F739252E0267E564FC897DC0E57F5F3DE3A878C7B5FC0B0644C06A24208736205873D1DC8DEFD045BAD4734B13E7262FA46446445127B1462CC715495C30E26410E02E22A7329923352D3492D89212497D534A9C438C9294E92EA928091949A0C1787703ABC5F189F2A90522264D42A6A414AD72D0552E584A92ACD9D40219B28CC0A992498D1BED9FE26933A8E7E118554B89E85214996B6B97049B82000CCD760400748DD9BC357C3E30CF03D935272210CCF66D6299392AC663629504BB30F4CCC8D12B4692985DDD6154C2D2D536A6395CF130038B740007899F16BDBDD4713F11D4617478977741207E1A4D3C89AD2A4CA0B5BA42416F11529449049CCC0B0481E6CD54CC4B1DC6A6D6D4CC99313327A96A2B5120E625CB682C583DB76DE326012E1692D3C0BCD04900384B880166CAB25774A42AC350005FE40479F5C458CD4E12A955984E253A5CF52D2A599530A48048243A487B92C1EDB81A467A30EA25C84CB54B4B80C54CE4960FF004F3D79BC793E7470F793FC43E199CC2D9B397B44C794F98656CB626E9F206AF21AD0525D66A4F25B9B469B829D135D53D6F1DF3D9CFC49E3BC193E8E7CCC4EA7BC421014B4D44D973012438CC95A54412015006EC1C6D16C9B8653D382A42120E64F8941D2A377CADA1B3F898FA4600B3BBC14F34F25EAEFE6470179C952C36A95599D772CF12D627CD2E62613A9D7A5241A992FD2C38E14A1B3FCCDD6E5D5A501A590176F47BB35F8C1E0FE3E91230DE31A5A6A82A9790564A4CA97579D59528EF49EEC4C4206624AB329C837BC432715ABA153534C52427C3949B16B950D5896E9D62DCB097889E6A644E27195BC72E49E24C01895B59A749E3B94A4293409808710D99898769BCCA6ADB78243BF172885B080082EA75A35773711F639D9D7695839A9E1CAEC36BA75A71952CC9975603789A42F24C9A428A434A4AC9D52088CBB05E3DAFA29A5750A5CB0A494BBA8A4DC0D744D811723E71E9DC447891601C3349A0E0EE1C1B98CEACE1CC36912D87B0F617945D5D2DAE65B0944CAC21050D8975B8D38EA4A810014949B9116BECE3E1584AC6A52A6CA54AA4973419AA9D2D40A4024E528292B054D94272D8DC86062D7C4BDA455CC9330226A8B83940535DF5770EE1EE09B3878DAA23E6E1484E89F9BEBC8BC731017DEFD6FDA25104163088C710842108421084210842108421084210844C9530CA98958BE53F2DE112A53A541409D85AC7DFF007F3F784E98672D4A2E33379DB4F28E49CCC0EDF3F3E7052428DCFE5F33F3F58E25ACCB50500EDB1DDB73F7E712F20D1CEFF36FDA205486C1B3A5B71B22652A090A500CECAE50292953C4AD2109505248D5E526D6CA3863139F458DD16212990AA39A898002C090A06EECECDB3EBE514D56724A3674A8292A21DEECCECC000DE77B59CC6B2DE395C2B624C038B301F884E4D51A698C4F81A765DBCCF93A43579C9BA2B8024CED465D905F536148597D61213AD482A209023E8A3E087E23EA714A4C3F8671034D4F2D5225C9913D6B48489C027289854A64A14949BD86609B80631CC2A72A831144F94A3FF7038E8E2E367BEBCADD4768C8ECD4A0E73E57618CC4C3F38D4F313B45A7B936F30E25C976EA0EB2C999979A48515B6EB6B2E0208490A49076B88F60F0412EBE9515F4EA2A9931209965C113080482351BB8B5FC9E375381388057524995348094A12905C5EDD3AF3EA76B7AD1569559640055E429E8A1D7DC5C8F4DBD22F32697169B30A8C9484B9BE64BEB62412145DB4E477DBB1512973147BB054924B6CE398BF5F573AB08996140A0213AF56FA6E12A5DBFA504903513D01ED7BC5F2452544A0153D21200670DBEAEC4DDAE186E0E978E67C89F210EA45C5DECC433DAF72DB7EB68A13CFCAD3A5A6AA1529E92A7C949B0E4D3C671CE5AA5D0CA0B85532E85061A4129D3AD6A4B690A0A5909BC50E312E555512E9BBF325765128241F0905DC0043B5FCE319C471FFF006E933261CB992198E999BE5BEF768C4566062ACD7F11DCF36F84FE180542432E642A12B2D9AB98F24879AA74C4AEB6D557956679E1F00844B4BEB6D16485CD94044A9756E35AB56BB68EDE70AECC785EB24CE34B327F773254A33168EF4B258CC2EA04A0974929B950235B46AF768BC715752A989932D0524104A4EE49B58866D58EB6F5DAE3855E1832D7848CA3A1653E5D509994453D9955566B886908A95667D0D3499D7669E404A5C6DF9842D4010094AAC7AC7CD4FC4FF6FF008D71DE3D5C69EA1465CC9CB00266950604EAEA3E10001CC0B08E9EC22B2A6BAADEA12C92AD1890972FE8EFE9A45D532A2E82B5DD2000128B0484A401B0005C026E4F7249373B468B56D7D52E795CE49CEBF13390FD5AEE7F68CE952912BBB4A2F6D459DF41B8B6BB3EE22991A9640B8DCEE7723F76FD22D7366AA6A8A893E44DBDA26BF8401E65EED7B6BCF7FEE5EB93D3A0B0B44B4A9482E9241F3E7B7F8D2242E5E720BE9D59CF5617FBDA211C44C01801C801ED08473084210842108421084210842390588235041F6842270A858E5E8E3F58441448091CB4AECE21CF36A162D9240F291D751B8FC22ED874D98B44E23C2A005C12E4B1205C917BDBCA2DD59878AC9929667AE577649CA824050B72E440D7A0E6FC09B9454E2669332A438CCDB856E36F32D3CC68B2D0A614C2D0B43AD2D2B21416955EE3A758ECEECFBB49C5B84315933A4A8FF0E6209254468417370012CDD3DA1574E8553894C1C25B396CD6003BEA79B102CFB8023029C7FF00820E57F1035B9ECE4C849A95C9FCD7B3B32BA55367572946AFCEB87985F999671D70216A746AD2D29A4F9D564EDB7AFBD88FC66CE9586D2E1D8D193514A132A5A93314833102C93DCA964997BD810924070A64C5061188E23C3D522751D5CD19561565902C5F40C08D1DC1E91AE6E6CE4A71B7C2D56A66899DF91D8A714E1FA638F4A318C70DD2A6EAD499B62557CB4CFAA7E841F61844C213CD4A67DC4BC02ACE2750508DF4C0F8B381F8B24C9C46871DA742AB25A2A154B55365CA54ACF9546589A4A24AD482ACA72A8BB12924398DB5E0DF8ADA8C2A968A82AE4CB5AE9D0896A985D4A2520024DDF63736F3B378B35C49E0A07955893AFE1F7D1B2A5EA544A904376D941A75B93FB54A48095A8AD6A0ADAF78CF918160D3E489B4F5D2A79525DA4544A9B725C3896A514B8B8701C36C6362303F8B4A09F29299DF874822EF6E6FCAC08D069E61E2A3DC4AE592104313551AA3842425993A6541BD6A51B04F31E954A13A4EE75293709291E62045A6A787095293FF00A16254A9B2D0A0967B254A04B5DEC6DA39BC5EEB3E25F079B4E55227C8134870124B72D73374671B5CC73A878D7363346A4D50F26723B3171A54262C1A7E4309D7E7A9E8BF42E3F2726522C06FA5CEA7A98A79BFF11C0291559896314B2912DBC09ACA75CE7701BB996B52DC394974B0BE9AC74D7177C4DD5CA93365D3290A2A49CA7311E999C0D1EF61B6BAF77E223813E2372B7271ACD6E2EB1527010C44A44965FE4F61B7E4AA58CABD529D713F07CE92A47C7BEC48C934F3731506664333E52C4CC9B67E3D21A191601C59C31884854CC0EAD152A41004C9E04B403943952A72532D09771996C9DC1168D34E3BEDA788B88A64C659961454004A8B92E5B424F2D3CB6B6C07E085E17ABC83C1349E2373568725FF0053316CAB8FD1A8D555CA3F3384687372A934A7ECD2CCD4AD61E6DD35408995F39B6E625D0EA1252511E6E7C67FC41E2986E2133843089F2C50AA410BA8A79A41993485778B202F28292320CA908294029725CF50D18AFC5271ACAF9F37BC0A3E052890403A02FADF35C963CAF1B23B6DB5A1B482A5A92A2B71E24799452902E364D9253B103512772768F11F8C2A6A2BB11A8AC9D5D3A6CC9D35531CAD4540AAE475FA6EE2ED9F502C212121203A024160483772EDB8D6E430B738AAB4A0D936B7B8B6D7B77DEFB74B763D7D311A7130A8CC9B3573521C842D448DF63A7B45C3BA5175198B06E4016BFD4B9F96F78A4A6D2A02FA82D26FCC6D6B6966DD012DA9208F9DFBC51A55397309CCAB962E90A480E5AC458750410378A79C0CD4E42490189B9670EFCEDCBCA24710E2C04A74DB6D576DB5F33AD8381695051049B2882AF31DEF19970ED6D5E153513A9EAA74952492C85948049F37B1E5E5A452268D21947C4FCF9B8D89725BA5BE63C7B3532172973A28B3987B3570061EC7149A88532F335BA7B53536C8536E36932B533A6A526DA02CFD94A4D30D15045D04A53A767BB39EDEF8DF84711915785D655552A504832D73D4C94B87219693B024BED7E711CFA644D97DDB64E643BEFABBBBBEFE7CA35EFCE5F02EC7993598F219FDE1FB996DE0AC6B86E7A66A345C335D144AA536443854EFF2E935D6A5672652D9B2186B9B306C2C56AD898F563B10F8F3A15264527194AA4953A6E44CC9E0A3BECC01B925452544EAA5824DEEED18662F8610850495298E84580BDB4F20361BC6CEC06DD49BFA98F9D14AD4ECEE0D8BEBAF3D63B273A79FC8FED118E6665CC32970DAFA98E4106E2112E3984210842108421084210842108421084210842108471E650A710C8427ED19996A6526E06AE4858E5A8122E85F32EAED740BF68BB61B3049EF265B310C92A7B0D490C6C6D677F4895365098CE4B00A1976254CC7D08D1D8BF48EB18E30450B3270C624C258C64E5EAF47C514C9CA1D665A6DB0F4B5469F506CEA5160A4A5A5CA38DB6A428042ACA5104D8C6D6760BDAE54F09E3945FF0050A96897365E8583670C5FA337AB6B18EAE9552A6B84304F5D1AE1D9C9B3EFF511A6A664609C7DE10DC4D55703D75BAA55B84ACD9A938AC275B71976A14BA24FCE4D26652DA1F934132C196D6F2421F55AC9B5B6B47D30FC3176F787716E094A9A8AB9736AE5D34B3365A94332D094A52169B8056EA1DE26EA24E60004931D91C33C4EBC2C4B41514249005F42E1D2AFA0BD886D5A32A542C4987315D1E46B187EAD2D55A3CD4ACB4C4A54A5DC4AE596CBAD256CF31D49D0D3EA6CA75B0E292EA17A90A40525406D950710E31595B30D3C84AE91730992B1E20524821989B00CE743B46C970E71E512A549EF569CD9124BA83070C75B7316EB156B15CA451E913D55AE4E374FA4D3DA5B93550997D1252B26D3682EAA6953AFA9B612025212105775055D208208CAF10C657494A5758132C250495125274724BAB636B807ABDA2FB8FF001C61A8A39850B438960FE600D8727BFBF3DEF189AC518EB3CBC49F3493C35709626A9196B4EA922999979B8DB4B6E9D354B92704CD45A66AB37FFA3743CDB46500925975ED450C1E6AD263583B57EDAF08E08C1ABB119F552A5AD1256512D53521473248428A5C29214E169CCD9810402088D4BE33ED09550A9F4F4F30B296CE97D943CDF5637E6D711B4D7059C17E59F05594D8632F32D68B26ED7DB6173B8D71B4EA10E54F15555EE63CE22696AD2FA1A69C2DB722590CA501A64CD17D21DE67CE1FC5CFC4CE23C698E5451D1621344898A988CD2D6B530CCACA02525432BDC802E5EEE63AE25CC9B891CEBCCB7006439728F15D6490E4E5240BB30B0DE2F1DD6DC74EB0B09528EA5A6D6B2AE491702C4024F403A6DEFA188A9AA9922657D7CC5CC24A9414BB953DB7BE8C18B1F9C5C138722907788D478ADA1D35E9A69EEDA5768143642D40A9573B0EDD00D875EBEDFDF19ADABFC5CDCD942427C23A8D47C88FD86F5B4B315345DCE55105CE9707C8EBA8F68A61275DEDB5CFA77BC51C574548421084210842108421084210842108421084210888BF617B7CF6F7FF0098ADA4AB14C160B32C8D4F27BB6EDFAC7043FDEDB8F5E9136B581E4294280D94A4EA483EA53DC7A8DFD62B92153BF892CDF5B33B1DEF6BB7202DAF3A79A82A0A04383A3DB7B5C68E3D46D6B450F86635175B69B5BCAFFDC33214E15F75724A540366E76B8D811E9B4EA7E21C670C5B4AABA8920365285B04906C483F987449B45B66D29538CA2EE016D41E4E6E7E5D39F5BAC52A9D57957A4AAD4D95ABC9BCE2D2F536A72F253ED2DA24FD9A5136CBD2A5B009D9D6D6E5AC4A89BDFB9B867B70ED0B0A453CAA6C527AA9E58012BEF9603002D94A811B3101A2D69E0ECF34D477EB41984AB2A54C120DDAD77DB7B00F16F188B82DE13B1ABEFCC625C84CB89A75F374392F4454B3EAD7E673E2B92FB729CC52EFA4CAB4CB6537BA09E9B01807C52F685492108562B549530702AA6A5F401F2CC0EC0B0D80B33697793814DA74909A99A02400095020EB76D75D7CC3F38F874AF0F9E0CE86EB5354EC84C01285B710B0EBF4E43FA55A81DD332F3AD104F96EB4102F7002AC466749F13DC71894DFC3CEC6ABD2952144135D3AC425D9CCDDF97563637A79B2EBE4A95DDD52946EC92A0C6E5AD636D40D437A4778C653D913C2AE5E631CC97E838372FB0BE0EA62A6E69325274AC38E4C25B42396C49CECC36D7C54ECD6A4265256596E3F34E38D36C36E2D6906E1D92F1EF693DA4F6812703AF15F3F0A5D5A91DEA7BE999A5A4A8E677585064824DECEA360F188E273F1251266CE5A9249D4E8072DB561E7EB1804E1532DF1EF8ADF16B53E2E33C68AEC9F0E194B5B7D193B84AA867E9F295DA953DE54BC8555D54C3CD30B6D87D4DD49728F8D53932D38D290ECBBC9615BD9DB9F68D85F621C013B07E1DABCFC4788D34B15F37349989A79250850A79672B89E56099B3104E54AFBB74CC4A9A8E8294CF9A89935CA125C02EE54E4124368CECF6B66B8D767490A43122DB4CCBA39328C21B6A5A450DB4CA659865B436DB4A5348421FD9014DB975E864B6CDC06C253E20F687DA5E3BC4B8B4EACC627AD7356A52A592BCCC87569989D4BB005AFB80D19AD3D2242032580B66B5C37EBA1B8368FB3A5211E4F2116011D6FEA493E9F38E99ACC466D52C925C6EFB972E472D98F48B9C99252058BB8DDADB35EFF003893ED3F768E69CB0502F724BBF3B1B746F9BDCC5C10E05FAB3BDBEFDA2A44E099697673D3F416B0F2FDA259412E19C79B7EB1305102C00FCFFCC3F14502CA0E2E05C1F47864568C18797DF972E9112B24822C2C6FB8D57D88B7B75FCBAC5CB0FE28A8C3A62E64B485A94928BECFB8B8059B9DE19093716D0E9A7CFCE387CA086A60B2843732E2B63756DE624AC5CE90A02C537DB6DC18A5FF0077C62AAB454A2A6A650CC54D2A619601D406B59EC482E6EC629EA28913CB1B0E76E5A335FE623936B6DE9B7E116020A5446E0B7B189998FF004A9FCBF5FED088A686500429272870A0C4173E51365A83310DE7FDFE5FBC225C4D84210842108421084210842108421084210842108448BBDB6B7D7B1EC46E3F589F215E308760A2DC989FED68446E556425412A23EF1B5874BDCD80B11717E9BED6BDE32292A9B86AA5D54A98525042832803B11EB7D2FD7489536521692543AB8373B5B9EB76D3CE3C1F881E1CF2E7899CB9AFE5AE68E17A6620A0D52594CD3DC9C693F13419A524A533D459A16704D22EAD162E8DCF93D3707B0DF897C67832A69908AE992448992DBF8852084AC12F70E0E5BA48D39DA2D73C194AF0E636BB073616CD6F091ABD8EFA9BEB558C3C1CB8FCE1C2BB3E8E0CF3A64717E017E7665F6B016399A92627A992AB796B9770BF3D312AAB308525255CA08DEF609B01EDAF66BFEA3DC128C170EA2C4E7CA15C990844E9EC184D281994B400EA75386490CEF76112D38D575125265CC5E500B3925C3116218379BF5BC56C29E0F1E221C4255A495C5B67B51F0C65DB4FB4E55B0860CAF50678D669A85875F9579CA53AF3B2CE25C1F0FCA76EEA9009BDAF141DAA7C7E70F4FC26A666155122A27AA4ABBA59590896A0C52B4A12B492A0C1B39286B292444A9BC4F89578EE15326A41B13E2B8DC13CBA8B03E71B1970CFC2F64CF0B397F47C0394D84A9B86E8F272ED3535352EC876A75A9C424F3E6EA936E6A78A9D7829E162DDD5A469B794F8BFDB6FC58713F1C4FC428135D36626A27282D7DE2806CCD60141200D02521800E368A74E08BAA9A26CC2A66CCDCEC092E41277DDDEEEF172FCA50792B07C840B0B1B7D3DFF001DBB5ED1A755D366D6CCFC656CC33567C5E239B52E5F7B824F9B0117BA5A4974A82946CEEFAB9041F4760FA9772758811A4950DCDC8EBE877DF6E9FDBE716CABC495552D34684B2010033A5EECC5C9B59BF78AD2D312DA8D34BDF6EBAFCCB40282F71FBF975DBD3F2DA2DD3A9A6D314A66800A838B8258F36FBE710CB92248291B9727993A91E7FA0B3888C488990842108421084210842108421084210842108421089828A6F6B6FEB0C857A025B937DED10A9452CCD77D7D225B12401FDB7FC7FE7AC55D3D5AA9BAB16662772EEC762037D60E950B91A7B1DFDBEED1026DB6E4F703B5FBF4B5F6E8627CCAD953537961CEB6FA173E9CB68E320E67D58FE913F250AB13626DD48DF7DCDC8EA3F6045322B6A81099648009602C2CF60799F3FED466A2B53372A12E8059CB80D7E805B9BFB448436CA4DC0B1BDC8EA0F7F5EA7D80F5DBA64D83D1E3B5D31024B84A8D8AD441236DC339B31DBADE2298AAB5A5DC07E45AE46BADEDC85CDDF58E8198798582F2CF08D7B1D634AFD3F0E61BC3124BA9D62AB5479B6A52564DA5252B1A9C5B6954D3EA5265A45AD44BD3CEB0DA50E29610761FB3FEC6B8DF8CB14A2C3F0F9530CC9F3104CC40504848214A054EDA2487D376722316C4675461C17573561694120A52ACC6F6D01F5B79DD9E357FC695FCE7F1ACE2065F0765E9A8E12E0CF2A71507EB555756FB4D633939098B4F054C28B489B9F9F529C4B52884A8D3C2D0A53204B18F61F85B0BE0DF871E01973B1E9743278B461899A145283534B3662000B55C9CF35044C4850BA1692C5DE30D9DC4F2ABD650259C854012124051DF57E4DD407711B3C657E5A60DCA1C0587B2F70650A4E8D85B0D48C8CB52E8F2CDA5B654E48CBB2D227E7DD480B75F794D098754A5242D6A248F35A3C83EDCBB6AA8E37E25AF12EAA7544B35534A02D44A194B25C9D1893A25801A002330C0A4A6ACA484A92E960C9BF422DB0D1DC93CC47A134E25D53AEEA529C75616E8B7D9256129404B1FFC410947F52BCDAB7EA06ADE34AA99D5095D410094BA424B86BF5373716B466829BBA4E53F94593719998139C6A144BD88059B9C56E91681254E1D9BA1D3CEDF4F78E42002F72DCDBF40211C99850A641D0DDEFF0030DEADE4F052882000FF005D624F3027CA373DB6BFE6638EFE61373AEA05BF788E205449B276F9FF007F9443989362CF7BDDCEFABB6E7FCC2264A74DF7BFD3F7EB1514EB95216F3466074B726F5B6BF77E0902E62622FF0050444732AD4A59120650E58871EC1FCB5F268E33A79FC8C525BA1D2082494800956CA24775000589B5C8B017B8B5B68BE0E1E9F4A8993EA82913A54C53CB506F10BB317245D872D758B7D2D52159430B68E5C74D39BEE3F78A8D8BA53FFDB4F6E9B6F6FAEFF43DE2C15F5B36B6705CC96841420212109CA1924B66726F7BDC08A998BCCA0CC3E9D1F523C873D7488C51C4C43BEBE7D628A42AE08E97DFF7F2F68E4027627CBFC44D8AD1C6908421084210842108421084210842108421080241716221089866CC5062B510CDAED088DCFA984B9B325282A5AD4953BBA490621284A9DD20BEBD621CC52D646FA8A74157F52923A02AB0245BDEDB0BC64F4F8D564A423BBAA9B2C8672998C7AEE7DBDA203224905D093D0A411E637F4EB6E9C654903F746906F700800DFD8587F7BEFD62A66710E2335395788542D25C10A985AFE8621122402E252411FF0081FDBEBFB41B94E5282B6B0BEC4FA8B6C3EBF80F94592B27A66214B242A613656AA73A5DBECFCE782D64B81D0103E968E4DCFAFECF58B499B30820AD441D43984220D348422252D6B6CCA2A60C1F6108443084210842108421084210842108421084210842108422346705D009E7671F77896B4A94D96DAF2E9CE11592909981A62402747B6D73E7D0FB44210A60E2FBDC42277FB785DD0480C4B5806E9AFEDC9A2624102E6E4BFDFDF947157392CC2CA1735CA037097125C0B776F2A402836BED6BFCCDFAC745864CAC9C6521255350404B6A482000C01B9DF9B7568A69D572E5A4BA5266074E60E0A53CC8721EF73D46D1E419D99FD96B905806B998F99D8AA8586A854D975FC43530E264EA552F21537254E44CCCA82A69F521210A4B2E5B71CB51371B77D86F623C5BC6B8AD253CEA09B2A88CC4242D32D614B482E0A544313670CE59F9462D5F58B7294CD98400493998E846C19F95AC1EC358D6C2AB5CE233C6CF353FD3F4592AD650F04F802B613579F6DA9A62AB8C69D2531A65855671CE54B4E4BCFD404B1684BCA31A0ADA5EA58410AF58A911C19F0D3C26AAB59A2C4B89C513675AA5CD461226000A9591B355B2B2292A5012CA94152C94BC628535188D4090B5AFB951202560BCD5072C39A433DB96AD1B25E44E4765E70F196B43CB1CAFC2F2F86B0ED0E565E9E1E94436B99A84D14244CD567DD43485294F3AB71D5158EFF7AC2F1E51FC40FC40D6F1C62B529915F31699AB5A94933592A049536BD58274660031022F74B804B925CC84306B6516D2E395F5D753CA3D99C68A53A0AF99A4692BE9AEDB6AB5FA2F622DEDD846AE77A9ACA75CF5A477A412546CA763A68E6FC9B93465D4320D325252026D6CA000DD6EFD3D2FAD8C0D2142D6F37A7B0E9EA3E5B7E7187CE528AC82A516275512753BFB45DB395804973A6BD7E515E251528862A24722491ED08471084210B0BDEC2FEBDE10842108423199C01788D655F189845AA63EE8C1B9C78793F098D32F2B0F225EAB2F36C2432F3F2D2EEA5B986E454F36F25130B6960A90E26C4B7757AAFF0011DF0B588F0FE26BC47069099F84D6AD5369AAE97F894D3D2A39CA513100254BC8A4E64804A49CA79C758E1F8ABAC0CD71AA6E080E5FC3721EE3E978C95A5D0871D966D95CCCC855B9216197595292950E73652E11B28280B8B8F35FCDB68971676733707A94CA32569564CCA7053E224E81AFB682FD358CCE967F7D29330286505CD9C948D46BF3313A1C0496CAC29E6EE1E4A4795B26C52926FD7AF6E96F58EA7AEC3A6522C8292C3576B731FDAC5B68BA4B2E5D98338BEBAECDEBFADA273701207A81F48A7956B74F320FD98A94805DF6493EB134532B53E67EB10C238842108421084210842108421084210842108421084216B7EB073CCC210836BD75842108421084210842108421084210842108421084210842108421084210881B9D877BEF6BFA7E7BFE5D2321C1A9D13D1382DBC2035D9DDFCFEFD184800924001B52DABDFD396EED688DB4A929B02544582961B4926DB6B215A7A1B581F90B88933E8664C9C25C8CDF9AF9415313A68C6C1EE1DF9BC534EA8421248371B0D6CF6D472FA18A6B71286CA89B39AAC5873ECDF401B15B6D9D466120DBA68BDC6E2E2334C0380F88311C9DCD34C58514FF002A8B0537B937243ECD16F9B88A424F47653BFB9E8DADC6F668C6C71B7E24990DC18532625AAD567314668541B725F08E0BC31CA9EADCE579DF2219A853505D7E5DB438487516529B2424A8DAF1E837609F0915BC4955438B56484C9A5909454D7D4D5112A969E524256A5CE9AB494A40D81D4900177118756627FC55E656AA20252495172400C0172F6B75318B6C9DE0DF8B6F135C6F4BE2178DCA954F0264E4BCCFC7E10CA54B8F482AB14D98744E4A2EA0C4C0B065284B687580C15ACAC6975001076FB8EFB6BECC3B18C02770C709CFA3A8C7A4CA34E31497265A0A66CB4196BFC2A92B5158510A026B90A9649C833068A4CA9952139D395240010E4926C407DC0D40D4100398D8E32EB2FB0B657E12A260DC1540A661FC3B429514F92A3D3659B9690618658530DCCA5A48E6AE69C1A56E38E3CE24B8B5A8206D6F2A3B50ED8F8838BA757C9AAAA98B9559356B04CC51042D454F72C2E5DB42CF17DC2F0BC9532E6AD395282081A10400E2EF63B8E4EC4477566ECA4A5B0528524A1C03AB8140EAE61DC1363DADB7CAF1ABB594535530AE6AF3072B0A55D40820D8BEAFD0A58C654B932945C806E160386045BC3BDDB99DF47115927524036B74F90D80F71B0BDBBEC7B889132B152A51952BF99EE090EFF7A732FA0BF0500F4F26688E909D81BF7EB7FDF48B5BBB9622FB868241018F3FDA11CC450842108421084210842304DC77785854ABF8951C52F06D597F2C3894A23BFCE1F92A4ACD3E4B17BF20AE7312FCA95D0B54C3A1B0C2A6541DD49281C8F212AF727B07F88EC2F8830095C25C7EA4E2B854D012A95302664DA45A8009A8A45AC9C93259016031CC521C8D4750D4E0D572672A7232A569DC12C43E8AD9BDBA3E87E9F049E295298D71149F0EBC5D5393947C40D25C4D1CCE54AF252588E6DBD2C30ECABF3296545530F25615AB502A55C28EAB0A6EDABE1E66714A57C57C0D3A9711C01526CB9601A894B56650973A5273649A9053E10A20862F7B5CF0FC7E9E807E12AD2B4CE26C19D376B876705EC1839E8C233712D312F32961722A6DF6020F3E6658A5D65E2B092DBDCF0402909B924022C6F722C63CB4ED1783B15C06B6748AAC3E7CAEED4A056652822C58EBE435B7AC669435F4F5233A54CED941D9C7E57EBAB163A3C72C1D64E904A1241E6EDCA57A84AFBDBBEC23A5A70FC3AC80524B90425CF99B0F2FF117513000E3F981B6EDEFE5EF13C521B927993114238842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842234CB5292540800733AF940D813CA11044B33072F7B7EF08E402A2024124E800731019E90D6372DEBED08AE9787CE5A5CA908B3B2CB1FD2F118980EA08F9EDF62CF7894AAD7B855877B6D688E561553366776907FF009149CBEA5FCE26800E8A4FA98A8D3ADD96B52AC940054AEC8BDEDA88E9DED6B8B83BED19451F0A62E854B4D3CC9530CFFE594B248361E26E9B6FD22DD88D4A69528CDFCC4B7566B8DB7BBFD63CD734734700653E16A9634CC4C5948C2986A9726ECECDD4EAB30DB4D372CC805C5B6D2D6DA9D50D413A42937241BF68D99ECB3E1FF8B7896AE966FE0CCD96B5218774A2F988D2DA800B0D3C8C61D578D480E0B80FAF32DBFAE8C1DFDE35FF00CF5F141CF9E2B7174CE44F86B60BAB57BF99BAE52B15E6C54A4DE44A50A58AF92BA85326A5B98969B0A25C428BB7D2949DCF4F513813B12E0CECE70A9589F68732970F299299F2280A659ABAC32C0250A4AF2F72862332FC641397217262CEAC45554A52648510EC56E72807CBF3173A37AF2BA0E0CFC23707654575BCF0E25AB7339F3C45CEA113CEE26ADBC154DA54FCDD9F9D6A5D8994CF2A64A1E3A5133CC972B09D5CA4EAD23A37B71F8B0C368696B384F8100C2F07A5993109A1A4697214B1993DE2D4829EF16C5402FC36528B5C34DA5C26715F7C7C6B533AD57241BB0E439F974BE65E464C49CA3728D36CCB30D1429A61A482DB41008084582004A76B5922C36B1B47979C55C6231EC426D7D655542EAD7316B482A25249249B1D05EE1CF521C4667875114175A45EEFAFB6C4F33BB691CC1BBCA7144A94A1A6E760902D6D237EC2DD46C7DB7C46B7109B369573497989004B62CC2D7E6EC357E9D632232D9032F808E8E0BF3D1B7F5F48AA6C6FB0DC58FBED68C567564F9C085A8B1E4EE6EFABFDE9BC4BF181B2BEFEF99EB055881A45AC2DBF436F503D7A1FDDE950188CE6D9812D761BEBF4FAC471017EE00FDF7F78AAAA3209477249F0F8BCFF0043D3FB422314B084210842108421084211C47913328968CB8750C4B952E4DD49BCF493AA3A96E050EAD9579800B174DFE9DA3C11DA0D6E055B2809C432C7892A2DA0DEC5C6F60D16399462A01CE904104104302EF666E5A863AEF68C74F1AFE1D1929C68619997F125265305E64B0CAD34FCCFA1C9B3FCE5B54BEA7641DAC041967A6651A9871E5A00992A6545E5252B2BB47A0FD8C7C5654F0E63347475B524E1AB484CE97399729626F86605CB52824BA40177B3EF161C4B8724AC77CA4174A6C45988F7D1DC3EE47531891CBBE3038C9F0B6C592592DC65E17A967170FA2643184336E9AF4E4CBF4FA5B6E06A510ECCCC4AAD7372E96815BC87DD9412D61A39FCD568DDBE38E06ECC3E20B84E7CDE14187C8C7A6D399A285E4A1539450A33552143F2972908964312497043C62DFEE5370C9C2592A0805B37F4F225AECFBFCA3634CA1CE6CBFCF2C1745CCACB5ACAEB783EBD2CDBB4E79080DB726E388438587901C5EA5A0287436163F4F1C7B4AEC1AA7B3DC531295892532FB99939D0BFCC9524B04ABCB4DEC488EC0C26B8D64B42C28310EEE6E96D2FCDF6E4D68F5B8D5E9A90898B48B84A881E86323844B84210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084226194B0813329C877F523DAD12D44E6CAF62C3DFFCC41448B585C9207F9FCBE5F38E64AD2850CC1C1B5B67B13F7A6B1CE44F33EE3F6890389248BF4EA6FB8DBB81198D2A29914E6A654B0B992D39C24072543460C5EE2F7E9B3C4464240CC4E96F736B91ABF3F789B526E13A93A8F417173F217BC500A2ACC6A7664C99895384A529490080761CC9B3EFB691473A6A653B906CFCB4D40D5EDE51F0310E22C338529D355AC4F5B6A814D946DD7A6A6DE98659A6252848257522FBAC1B917D4108780401B9E83BF3B3BEC838BF8AA6CAA0A7C3E777538A1026192A03C459CA802598817DB578B054631DD29C076248516B36E356D1DAC35D58BE13F89DF19FCBAC2D517B2AF848C1B3FC42E774DCC4C48CAD3288DDB0C51DD41434CCC19D6DB9B0E19A75C56A0A9768012DB2957DBD19EC7FE0770FC0A9E6E3FC755D2682966290A4CC9CA493298152B2CB9990AD6014B27C20BEA0C58AB7165D60CA1D653B6AE058126ED7D4B13A88B74CB9F0E9E2E38EFC4F279ADE20F9975AA1E03538DCFD2F263093F34E229E95A83A6467D97DF919671AD1A5A713CADC249DFBF62F1276FF00D9976234DFEC3C2B8709F3E9A59953718AA1295553968F0A574D4E14A146CC4828A89A4BDC0CAC6D29C3EA6A56A54C6D4E49693E1CBD567F306E639467BF23F21B29B876C1B2B80F29705E1AC2986A5586DA5A24251A945549D69012998989C665C3AE4F2815296853453A96AFB5D813A13DB17C47D776933679A4AD548EF0ACA8AA6A92F9897B827561E768C8E8F0A12825410A50703C2916EACFA37577DA3DA5A012DA004AD20252025CB7300B6C17627CC3FAB73BDFBC69FE2B8CCC9885266CD3366DF32CAB3662355137776DF5E717F9549959830DB60FB8D2CFB0F9F3A96DAF6DBA7B7CA3AF27D419B34A89D0923ADF5FDA2EB25052DB65166B7ADB73AF40DCE292479BA6F6DC1E82D6DC75FEDF388BF12B328CB7D6DA91ECDEEC5BE422A8AACC4DC9D39EE7A003D6FCA2AC52C4308421084210842108421084210842113BAAF2DAF7163DC9E9B7E1FE2F096F2A692FF914CEDEEDD40D2258225F88EA2E06BA72E87AB72BC71904367981C2176D211BF41720EDDC93D37E9F867D47552154C85AE6995392A0CACCC59837F306B92EDA1B011CCC9A898854BC9A85329C6AAB337462FE7A18F3BCCDCB3C1B9B584EB583F3070A53F15E19ABCB2D9A852EA4DB4E30E0295243E10E36EA4BAD85AB46D7F39E9DFBBB803B6CE20E0908387574F3DC9065A9139799053F94A483622EC6C7CAD1855770EF7F37BCCA9F11D3505CB369B5EEDB5C8168E0E4F650E09C94C0D47C059714090C2F8469EB53B4F94906DB6D2CAB4A124292DA1B09F281F87A6F189F6AFDB5F11F1F54CE99884C9B366CE5297366CD2A54D9CA57E652945F328BEA4BB8DCC5750D28C3C22581A30CACC03E8396BA5981676B47AC47401254493A92E7D63294E83C87D211C47308421084210842108421084210842108421084210842108421084210842108421084210842108421084210842110B8BDBBFF009FF91F8C5D04F942844A206700EBBD987BF57E8DB7052DE3BE86E5DBEED112AB581D49480ABB884EB2DDC1015A091A86FD36EDB88A9C1387EAF1BAA97229D0A65A901403926E2EC059FCD9E28E7D4894012013A804FCBD48F47D5A3CCF1FE6765D658D15EAD63FC618770C5259D7333153A95499A63A89666EB79C7651056E4CA5B4A56A5326FCD00A3FAA3723B3FF00875C67189748A4514C9C1443A1085294B16364E52F62D7FDDECD558D265CB5BCC60907C2AF107D035EC473B16DE30ADC4178CEE0497A94E606E10303D7B3F731DE7CD3A9F352529312986D99E715CA65D66B0CB73B3CE10B5255C87298D4B90024BE94A894EEF702FC20F0EE1A6462DC6664E0F4A8089CB338CBEFCCB06EA449CC1CD8F856A473D098C6D58E0A9514A3C6A0481B07E4F71BD8DC73DDBC1287C0EF88D78804D358A78DDCD2AA650E5BCC38DCCB194B427E610FBD4A78EA32F3F2528ECBC8A57CB1A6C1C7414A8155945494F65F13F6D3D8F761F44AC338528E46255F4F2823FDDA726529299E9CDE2914EEB194029216548538578583980514FAD2EA394125902E6ED62417DD9B9728CD1F0CDC0D70CFC26D0A4E9B93D9798765EA09659FE618D2A146957AB15B99612AD0669DE4B8F20CAAD4E2D3A9E5DCCCAED6B6FA17DB37C62F1771904A70BC4268968CE14D354159491940CA4B000358FE9171A4C10CB273900280094E9CDC8767F2D8F5BC5E24AB8DAE5820F9DF43C56B5309F8765091FF00C408053E82DB5B6EF1A4D8D71CE358FD42A6E293264D52D454E56A51503AEC58B91EAF7378C92930D4A00CF97460DBAB66234B3DFA33C7201B8BC62758B9AAFE2254A4277492C4921C1FAF41CE2E0A969942E0300C6C068DE978815806D7B7B83D0FF9BFCFB45377AA54B4A4924D9DF7FBF2E7D227A65029045DC0B1B7B5FED9BCE00A8DEC41FC41FDFD6298A083A6E7D3CDDBEB111494D99BEFA44403705477B5ADE9F5FF0068823889A108421084210842108421084210842108137163D3A7A7E906B93B9B9884A52751D3EF6880007402FEA4027F1209FA472A5294C14A510340E40F605A20EE92F986BCF53FA441490A26F7B1EA9BF94FB11D08EC47423AC56D26213A8AF24DFF00F2621BC883CA273D9986843B5EFD75FBF26821B4212B4A4592BFE9FE94FF00F44F44FD04735788CFAC20CD090435D203BEE4DB778A7994E89A41512E342F7F27D5BEDE278A089E2C00E50842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842200006F607DFBFA6DE9B77FCA2AE6514E453A2A5BF86A2C0EEFAEDB73BE8FE90AF33166D37E7F6C79C757C6D2B88E7F0B57E430AD45BA3D76728B5597A555DC473134FA9AE45F4D31E2D04AF5A4CE9642C6955937241170765BB05C5383A8EB654CE219456A428720ECAEAA008218B3F2B3C58AB65CD9815CEC2C3A680B7CC06D4F9EBFD46F070CD7E21F14D4F1AF1C3C42626C74C22BB34A93CB4C3755AA2692FD294FDE51E9B982F48A29EDF2882F312CDB9F6683642CAC83E96CDF8B4ECE3817064D1703E134743894AA608A6ACA89722A2ABBF324256AEF179CCBFE2662928538043170D18B4EC30CECE26A94A049747E54E5D2E3551D2C407E66331BC3CF099C3CF0CB4B92A664FE5AE1CC2D51926132EED7D1489399ADCC2123492AAC3ACFC6A96413670BDAAF63EE34F7B45F8A4E32E2CEF8D6E223F899EF297914C49203A5ACC4331E6F6788A9706952C8CA9372E06D7E7CDBAC5CF25600250B75CD4490F4C2D4ECCD8F54F39C25C08BDEC80426C7A46A1F11718D562EB986AAA664C2B2A72A98A51199D83391D59C6A3CA32AA1A308661A6AE2CA67B5DECCC2FD7CE217290436A5320FDE4B0A2D2576BFDF4A2C14773B917DFAC60536A44A2A3209FE2865025C59F673CFE97B45D932501B3252ACA4949233104B3DC8B683488292951048008EE3627A7DE3D4F4EF14D2EAE64B5660947FF00502FB7389E92521869B3B96F2736D9DB560F0000161FBFF3F38E27D54DA86EF08B17B5874B696DBCE25CC40981947CFAE9C88E510D293BDBDFB8FD2DF9C494ACA746F6BFDFDED13124A4000E9110903A088BBE5331093E63FBB4092753118964B973BC7108E2108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084535056A041200B7A5AC76FEF7F7E9D378BBAABF3D0CBA562C93A90399E8FA9B1FA4460A72DC686DD6DEFFA69105A14BD212AD04282839A52B520A4829D285DD0BB94F982FA03B0BC5FF85D545226154F9E25E623F9CA496018B8206B6376E46242D0142CC0F222C75D77EAE2F1054BB6E73358534A7B77DD93519571E5A40085B8582DEB02C9D4DA896D56B1052488C97169585CE42AAA556A4CD4254520CD2A72A052E03900DED94383705F5A4994485019521C105C9E5CDF9E9BB6DA5C19012940756023A2804EB3FF00D8F7BFCFF531834D9B51500A4CC245C02492080EC7AF993A9B1111CBA508BB26DB1BFE8C474E7F3989205AE4DB62483F874B74EF707D2289787CC5172497BDDFC8FD3668AB094822CC398D40D3A96B691147426DD7F7F87FBC524FA73200248249D8FCBE87CB7888B6DF57FD05F57F489E29638842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210843584223EED7FD26110B8F51F8C4041058D888381A9685C7A8FC639092AB00E79405F4BF95FE90B8F51F8888BBB5FF00498E58F23EC6171EA3F110EED7FD260C791F63118776BFE931C421DDAFFA4C211C142C072920084221842108418B3B16E7B470E06A40F584221EF11FD4211104288700B444083A1784431CC21084210842108422248CC425C804B18A65CC5A56C2E2EFD03D986FC9FD2220DBB03F317899369CA40226036764A9881D7CB7FF0011185A8D803EA2F112AEBE548FA6F13514730CA54E33D29C833652B2EA6BD99C1EA1ED13337FE2AF68962648AD5A080A621C5FF52EFF0064C705476497EA211553B133972A05F9BB81CB76F367E512CAD61DAE46B61FDBE4FCACF11DBB580DFE9EDF4FDFB5B26CF5CE3E3DB937D46BCB5FD23994B52CA9DDB676E9D4E9BE83944224C4E84210842108421070352D0841C1D08308421707A1BC21084210842108421084210842108421084210842108421084210842108421084210D2E3686B13E83EA9FC7FDA22FC42F62A7FFE29FDA0E06A5A2422C41251D6E09B7E7B83B5BAF4F94121738B252A528D980BFA75BBEF12D492BD3463FDF47035DD8FA44C12DAC12B525241EC7ADFEBD3D37B6E6DEA669A5AA96CA0850246FA8D7CBD5EFE76694EBA624E55282BA0B72DB7F206D7816D9B1D2B04F617EBF9C3BBABDD25B7FB31CFE2D674429FC81FD229E84FA7E67FCC45DDD4FF004AFE50FC54CFFDB57FF588DC0DAE36DBAC70D502D9556B7E51FB4540CCA00B1B8736DCC2E3D47E221FF51FD2AFFEA3F68E58F23EC6171EA3F18E1427904292A6DFC23F40F06235047A44625645FF004ABFFA9FDA3884322FFA55FF00D4FED088DB6BDF7BF4F68E1D693958806E2C7576D1BFB6B12165615F95F6040B3FCDF51F3BC44E816B2AE6D73DBA5FD6DFDFEB1C3CC55CA6C4BBF3D9ECE0B336DE71284959B9045EF720FB6FEBEB12EC3706F7B13F3FEFD07B44C4CD9A9041B0FCB70EE3DB7F7B4542539370CCC1EDE9F2F3844B89908421084210842108470C390F6842396034004239CCA6672DC9CB7B4211C42108E18721ED08472C06800842108421084210842205E83CFF004308E5AE1ECE1DF5B449412C0B97BDDF5BC4AA4DFA75DBBEC47BDBE7172934489D97C612ECF7D398B9DFEDA27A4A7C24B16E658E8C7AC100806FEBFD8453D6530A699902B303BFE9B1FBD6232413E1D36FBF389A29238842108421084210842108421084210842108421084210842108421084210882BA1F91FD2264A4E79884FF00516E5AF5DBCF68E46A1F988E3B6B595805571F4EC3E87A6FFDAFB8B97E0E4A54332C0F50C766BF96FD4C4150024A5BC232BF57B39BBFA73E51D2F30CD72568B313587DE4B13AD214B48490B71764937D0E1580761D1207B0119B70F61F87CC9D2FBD4A549CC3307B9D34FB23A9313A813DEACA5F5209B682EC1D98FCCEA7CACE9ECE9C7F4E7552CF4F95CCB6B50986D6DCB24A2C404923969209B2AFB58DBE71DA88E13C2AA80525196528032C84BBEE7507A137EA778EC0C27875388A0952012860599C72F4B6BBDB9C73D8E20316B607316C2963A29694E927D48414AADEC2251E08A004325C3DFC21C8E574B0E6EC79345EBFE13288632BDDFF0042639E8E223168B0E553DDF936FDFF00277FCFE10FF85503969674E482C5ACE320FA7CE38FF83C8FFDA1FF00EA8E627889AF1DDCA74993FD44158DFB91774DAFBD81E9DFA448570252E62404B13A143B7470CE7CAD120F052038EE880346517FAE9C9C9DA2A0E22AAD6DE42541F659DFFF00F431C7FC1246C847FF00450FDE38FF008523742FFF00B3FED1599E22AA41C4F3241829DEE10A5157D005DCFBFE30FF0081D390C5097246892033877245B778826705A424912D479B927E435DA3E99E240B4805CA5DCD8136E60B7E040F7B778E7FE03487FF004D3ECDF48A43C18F709581C8001AF7D4751F2D62238932403FC993D3FEE73FFF00A888BFE0549FFB52FF00FAFF007887FE17FF00F57FFD1FFF00AC4E9E24D0010AA484A8F4B1748B7AFDF3BF5F95C7BC51CDECF24CC9998494948B064FEEFCC1D6DB3344A5706AC28069BCF2B0D35170966F26F9C54638919353C84CC534A50B296F512BB24AB607EF5B63EE2D6EE3A97C012E5A484C84120153006FCDAEEEDF3BEB12EA3850C896544CC0078B41D5C7E50599BD5EF68F69C038D67717373534ED37E12525EC65DC56B027011B58A9442AC00FB85277F9475DE3F81D2D01CA152D6ACA4A909FFD3531F09D5CEE6305C4902996A4070C7A3060D677F9F3BDC47A5475DA9B3298300486F23100B81E42110C7308421084210842108421084210842108421084210842108421157452D136A1085B6520BDDB6D5F9F9D9E21507077E508A8ACA60951EEBC403B005CB7521DD80E9E8F14EA396E4E8F6240E4E2FD43FCA267026CAD21C0509D487824AA51D5752DA976B85249293658B11D46D6E6870CC4A7A8193266292A2D649CC9E4416CAE7935B523734AA9E527503762C4B73F26DF4D75DE06C52855D254A4DD6947DC42AE4593724D8A4026EA26E7D223C430EADA29894564B989528050CE18B17BE809B86E51554B34CD4924D815002DB11BFABF918845BFBB1FD27E7155087763FA4FCE108910842108421084210842108421084210842108421084210842108422045C103B8222396485A48D5EDE66DFE6391620F2222921AD26E55723F4DBEB7DA2A26098BDEEEF63A740FA036D39441500CDFCAE1C3176FBBFC9B483EC34FDCB8D2564A74D9449163EC763F845CF0BC427D04C0B5A8AC0FE51EFCFCB6D5E14D9A4060A29721F736BFB5F93EE3945A7672E5586F5E27A63284B639AAA925B4294B2494A99B252ADB60EDC80476ED63DD3C25C4E2B91329CE6409646472C94E6706E43DD835F68EC8E1FE2F95403BA992332940242C162AF7B5983DB7D22D45D65A404120A54EACA1011F7C1EBB83A823616BA9247A08ECBA7CD34FF00DC16B904DBD7426EDA476A6178B4AC492081DDB80439DC8DF987B5B7222A27992E2E97DE4D86E0F2557B0DF7E5DAE3D07D2F13E64A50BD9CE803936DF5F367F2B08BE2A58480A05C38B1DC7B6FF6F1497A1775595A95B95123727A920003DFA7D00885339831290536B9EBE7B6FB08A895534EA013DC051000243DD981E7777DDA29A5094DC6906E6FBDCDBF388BF1096B94D9C0BFDB8F5E6C62A15329C24114E492EC329F9B3DA26BDB74A520F6363FE7F7D6099CE43104EAC35FD6E366F38A7554485FF0C53B120DD988E841BEB6BB74D6F15A94E0B288B6DDBA81EBEF7BC4D336633B11B5C0FD2204CB945DE501E96FA7588210857F52C01DC116DBD361FE3DE39CE0302468EE406F73A7AF9445DDD3339091EDFA0814A41002B5A55B022CA5155FEEE9EBB5C1077049DBAC45F8C44A494E54A88199DD80E6E4301A73B5F62628EAE6D1D302B64121DDD81602F67D75DAE3CA3DC72EF27EA1891E96A9551BE4D212A0B5A16DA838EE92952528374DAFD0900DAF18763BC532644B5A5082149046641D1C31D8FB9F56263AD38878B68E509B2134C92B214CE7CD8916240D480C5CF38BDEA451E4E9920CC84B369665E59094CB06C6952481625761E706C2DD3B93D76D7EE21C515553A629198249B826F73CF5773C8474C620B35F31531242492EA6701DDD92092CDD5F6F28FB31886B016007202108E6108421084210842108421084210842108421084210842108422A2950A9934252ACA482DD6DF284401BAB49DBA6FF0087E978BAD32849AD952668EF5C82A3EA4FB3E859ED7768A69D604B681C7A97BFADBCBA45897890F1278C784EE15F1BE7360612B315DC3EBA1B32F293AD972415FCEAB92746428B616DB9AD954C97964BB6581A40178F41BE18BB20C1FB4DC628686B262A9A9D6B69CB42506714243A84BCE952412CC145045C13B88C7EB2A4CB4ACA402A00B3BB13737662C46A07CA3D5B838CD6C419E7C33E4DE6BE286E5D188F1EE15556EA6894416E544C26AD5291FB24A96E14A4B7248362B5106FBF68EA4F8A4ECFE9B8538D5585E1AE645299B25248016B44A9935292A648198801C8003DC0022AF0FAB5092E50E4B1243B3903CCEB6009DF6D4DCC8075142BCAA1DB620FD446A5544A994E48520D8B69FB6E3F43A45C056390326BADF4EADC8FEE35113F2FDFF2FF0078A235045F2BFA1F5FBE5E713D33D2A0F6EA1EE3D37FD629FCE24C4CCE7FA4FDFA42E3625491BFA8BDBD6DE91C3EA18E8FD3C9E22049D9BEBECD113A7B2813E900FB86F507E43488988D411E9108E6388FFFD9, '1', '2021-10-06 01:19:11', '1', '2021-10-06 01:19:11', b'0', 0); -INSERT INTO `inf_file` VALUES ('8448cada8c714e4ab61f521c8da21990', 'jpg', 0xFFD8FFE10DFA4578696600004D4D002A000000080007011200030000000100010000011A00050000000100000062011B0005000000010000006A012800030000000100020000013100020000001F000000720132000200000014000000918769000400000001000000A8000000D4000AFC8000002710000AFC800000271041646F62652050686F746F73686F702032312E30202857696E646F77732900323032303A30343A30322031373A32343A3135000000000003A001000300000001FFFF0000A00200040000000100000320A003000400000001000001C20000000000000006010300030000000100060000011A00050000000100000122011B0005000000010000012A012800030000000100020000020100040000000100000132020200040000000100000CC00000000000000048000000010000004800000001FFD8FFED000C41646F62655F434D0002FFEE000E41646F626500648000000001FFDB0084000C08080809080C09090C110B0A0B11150F0C0C0F1518131315131318110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C010D0B0B0D0E0D100E0E10140E0E0E14140E0E0E0E14110C0C0C0C0C11110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFC0001108005A00A003012200021101031101FFDD0004000AFFC4013F0000010501010101010100000000000000030001020405060708090A0B0100010501010101010100000000000000010002030405060708090A0B1000010401030204020507060805030C33010002110304211231054151611322718132061491A1B14223241552C16233347282D14307259253F0E1F163733516A2B283264493546445C2A3743617D255E265F2B384C3D375E3F3462794A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F637475767778797A7B7C7D7E7F711000202010204040304050607070605350100021103213112044151617122130532819114A1B14223C152D1F0332462E1728292435315637334F1250616A2B283072635C2D2449354A317644555367465E2F2B384C3D375E3F34694A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F62737475767778797A7B7C7FFDA000C03010002110311003F00F544924925293A64E929F18FADE19FF3ABAA48DC4DEDE49FF454ACD369FB3380796ED036EA74F26A9FD78C97B3EB8F55606C8F581FFC0A958D6E43DC037807B28C86505BB87D62EE9F91F68AEC7BEE6B5CC6BDC6480F11A4A1FA7D77AB07DD8F8F93934564FAAF631CEADB03D477AD77F315ED67BFF48F540820C1D7CD751F55053FB1FAB6EA8E4BFD3DA69AF09B90F26CBB0598CCFB45EFF45EFBED67E830BD1B1FFA1B327DFE95753D002D0644079DB3A5755AB26AC4B316DAF26FD68ADE20D83FE05C7F4767F61FF4FF0047FCE223BA3758AADF4DF876B2D01C4B4B44B431AFB2DF536BBF44E6574DCEDB6FBFF4562EC7AD136756E977D8DFB3D565B6DA2CC3763D4E190FC7AB1ECC4C6C8B1EFA6DB30EDC5F4F333A8F52CFB55946162D5F6BA2947EAB4B68CAEA05D6E43AFC6C4B9B6E28A7631BA6536BEA18F5E55F6751CFC1DFD532EAF53D4F4E8C965D93956E374FFB2E3D6FA0B6DE4BA6617D6B654DCBE9D8B9FE9583755763D76ED70F169AFD962EC3A17D64EA76D96616774CCAB32714B5B9365143DEF66EFA1F6BC6637757B9BEF66CFA7FE8D65F45774BA0FD5DC3774F77AEEEA15E583F68792CF55D87898D9AF69C766E6E6BB1ECCAA719DFF69ABAECF53D3CA62E7F17071B3FA8E3518782E155F6D6D6E2073AF7866E69CAFD27A75D9FCDB6EB5FECFD13130C227AAF8CE4351B3E96329ADCE6B032C60225A2EA6DAC3B69F7B7F4F535AF757BBF495AF37EB34578DD5F3E8ADBE9D75E4581958101AD277358D6FEEED77B56C3BA8DF4F5CC91439ADAF1AFC8A716AAC06D2CA197595B71E8A2ADB4D753FD365967A6DF52EB3F4F6BEDB150FACEFF00B47557E735A5ACCA6B09932058C6B6BB5AD77F65088119505D3265004F47296AFD52FF00C55748FF00C34DFF00A97AC995ADF54BFF00155D23FF000D37FEA5EA4627DE13274C8AD524924929FFD0F544924925293A64E929F09FAEEC9FAE1D59DFF0CD1FF8152B01DCF9ADEFAF0E23EB87578ED734C7FD6A9584E1EE07B4C7CD3482B82C0CB869F246A6B0F3B5C246920F1F728B29703C401C9F056B1D90F1A73AFC934AE0750D9C3C5ADD680D6001C35811C15D0E374AC79935336EEDE06D1F4A3E971F4952E958FEF693C49D7E2B7EB969E254323AB6B18EAD46F49C7F730D4DDAFF0073840824FD29597D6FA5D54EE2D1B77341606E9A8F6ED11FC95D334FB493A203B1ABBF21B65A37067D169E1464906ED9B844855393D1FA1399563DD60DAF68690D8D23F74FEEFB5687D60E8746474DB2DA5B16D23D481DE072B535EDC4A85969D0763A1F81D101908365470C786A9F2EDC473F72D5FAA07FECAFA47FE1A67E47ACFCBA855977560406BDC00F20568FD516FF00D95F473FF7699FF52F5781D9CC23523B3EF6993A6450A49249253FFFD1F544924925293A64E929F05FAF263EBA756F036B47FE05542C62241EFBB50B63EBE83FF3C7AAB876B87FE7AA56383EE1E1FEBEE40AE4AE2E207808251702C7D9696BB9747E2546BA9CF7348D7C63556FA7623EBCA24F0D2224729922297C626DE9B0A88EC0761F2F6AD4656EDBA842C0A9A183C5690600DD79EEA06E44506ABC32B682F78682A01F48FA37327CCA3BA9A277D906741BB80AA64D9D348F4CBEA6DA4C0687B43893DB6EE4C902BC16C8C80E86348772496F1082FCEC4F53F4B686469E253E3E2399510C044F8F654EDCBE97D3AD1F6C7B2BBEC05CDDE1C4C03B67DAD7353575E9ABC8F5EA5B5758CAD9AD56BCDB518896BFDDFF00548FF545B1F5ABA47FE1A67FD4BD5BFADF6D195660E650439B657657BDA080763B737E906FD1F5551FAA766EFADDD1C0ED94CFC8E57212B01CDC91A9C878BEF8993A65231A92492494FF00FFD2F544924925293A64E929F07FAF4377D6EEADFF001EDFFCF54ACEE8F875E7754A31ED1348DCFB478B180D85BFDA5A5F5E04FD6DEAE3FE1C7FE7AA5677D5BCAAF1FAC62BEC23D379752F9FF84696367FB4992D8D2F85710BEEF656F4FC73B5B93815D41803BD7C56ECF4C1FA2DBC7E77F2DC8195D2D941DF4925BCEBE20AD5B711F71BADCCB36E331D3B0BA1A770F6EF8F759FB9B10290CB2921ED2DD7DAC773B7F35D0AB027BB7A518F64BD39C7609E56A31C0F3ACAC9A5BE9FB55EA9F1051486593D2B032B5C8C7AEE3DB7B7700818DF57FA7E3DA2DAF1A8AC8320B2B00C8F376E5A55BC10028DD76D6B9BE4A39DD32C00ECCBD4AC360113DD0ACC7ADC009DBBF50476542C3D4FD3230D958B5D1165B25AD13EF3B1BF49C9E9ABABB2E0E7BD9E8B87BE352E70FE49FA09A9156D6FAE5D2DD6FD5E7E4077AAFC1B1B7B4F70C77E86F1FE6B98FF00FADAE33EA79FFB2EE91FF8699F91CBD22EB59753762BC82CBEB7D4E1C887B4B3FEFCBCD7EA583FF3ABA313CFDA980FDCE56701B15D9A5CDC6A57FBCFD04A2A4A2AC351749249253FFFD3F544924925293A64E929F06FAF13FF003BFABFFC70FF00CF74AC0C5A9F6BEC63352C63AC81FF000637BB5FEAAE8BEB9D2FBFEB97576B4682E6973DDA35A3D3AB955FA1E1D15F556398F3634D193EA480266B737D8D4384D13D14271E211BF53B9D07EB6E364D2DC7EA4F155EC01A2D78FD1D9FBAE738FF00376AE86C6B1CCF546C1A4EF90411CFD29DABCE31F01ECC9BF19F040D58EEC44E85AB5717A65C5A186D2299135C983FC90D55E7117A3771E43C3A8D5E9F7B79699F056B1DEC70826216457B9839D111993E9EB29ACA24EDFA80409F821DF6082663B954075105B13D92AAD16BE5CE803523C5327AE8BC11BB62EEA36D5596D741B081A1710D6FDFAB952C6EABD6ACBC0BE8AABA5C61D1634B88EDB55CB286E437520055D9D3E8C571BDD74EC05D06001085689120CF2F26BC5C5BF2DE76BA8ADCE209FCE03D8CFF003F6AE2FEA5B09FAD5D1FCB25B27E4E5B3D55CECF2EA812DA9C7D4DAE05A5DFE8DFEF8DCCFCF46FAA5D2998FD7B02C277385E3F2394D8FD3E64B5739E33A6D10FB028A928AB2D35D2492494FF00FFD4F544924925293A64E929F1DFACEDFF00B24EB193635CDC4A725AD73F69D9EA3AAA6373FF003ACFE42CBC7E8D93D7F2ECCBC1B5B895E3868B6F735CC68304CB760DDF41BFA47ADEFF0018DFF8A0C4FA3FCE5DFCC7F52BFE77FEEF7FEEB7A6B56AFF00C478FE6FFA3B3E87D1FA2CFE95FCBFFB91FC8F553A5C7C236A598FDBE296F77ABCF3306FFB0FA79370BEBACFACCC86506BB1A5C1BFA11BEE6EF764B5F47E83D1DFBEEA7F3DEA66814BFD116B4E4080EC7782CB8388935FB3D6ABD467F5DEB62EFE9479FE7EFF00E6B8E723FE4EFF00CD97FA1FF805CBFE60FA1F487F3BFCDFD21FCEFF0027FD2AAD2E2BE8DE87B75BCFFABC207ED7571DCEC88143D8E71240638ED7123E9358EFE6EC43C86E5D409B68786FEF012DFF0039B2B773BF9ABBFE4BFE6AAFE6BF9CE7FC07F23FEE27F2D407F363E9FD11F4BE97F6FF00EFC992ABD131E2AD5E6DB90D2ED343DC23D7925BA83007753EABF4FF00C17CBE925D17FE50C4FA1FCF33F9CFA3CFFAEC4CD1935AD1D0651955E39C9CEB3EC58AD05CE7B9A5D66D1F9C31D9EFDBBBD9FA445E82FC6EA37BC574DB752DDAD7E45CE643647AAE2719BBBE9D6DD8CFD25B6FFA5F4D56FADDFD1B2BF9FF00E98DFA7C7D13FCFF00FC0FFDC7FF0087F595CFA93FF22BB8FA777D1E7E8D7FCE7FDF7FE0D3870AD971D6BB3A9D4F0CE660D95B768B1CC2F617090D73C86D6E688FE73D3DFE9FFC26C5CEF4CCAA717EBBD5D2DAC706D394C635D21DA966F732CDA7F95F4D7517FF003C3FA5FD3ABF98FE6F86FD2FE4FF00DFD55BBFF141D2BFA1FF0049FF000BFD33E8DBF4BFF44A78DC5B19D8D767B851524CAC3554924924A7FFD9FFED160050686F746F73686F7020332E30003842494D0425000000000010000000000000000000000000000000003842494D043A0000000000D7000000100000000100000000000B7072696E744F7574707574000000050000000050737453626F6F6C0100000000496E7465656E756D00000000496E746500000000496D67200000000F7072696E745369787465656E426974626F6F6C000000000B7072696E7465724E616D65544558540000000100000000000F7072696E7450726F6F6653657475704F626A6300000005682168378BBE7F6E00000000000A70726F6F6653657475700000000100000000426C746E656E756D0000000C6275696C74696E50726F6F660000000970726F6F66434D594B003842494D043B00000000022D00000010000000010000000000127072696E744F75747075744F7074696F6E7300000017000000004370746E626F6F6C0000000000436C6272626F6F6C00000000005267734D626F6F6C000000000043726E43626F6F6C0000000000436E7443626F6F6C00000000004C626C73626F6F6C00000000004E677476626F6F6C0000000000456D6C44626F6F6C0000000000496E7472626F6F6C000000000042636B674F626A630000000100000000000052474243000000030000000052642020646F7562406FE000000000000000000047726E20646F7562406FE0000000000000000000426C2020646F7562406FE000000000000000000042726454556E744623526C74000000000000000000000000426C6420556E744623526C7400000000000000000000000052736C74556E74462350786C40520000000000000000000A766563746F7244617461626F6F6C010000000050675073656E756D00000000506750730000000050675043000000004C656674556E744623526C74000000000000000000000000546F7020556E744623526C7400000000000000000000000053636C20556E74462350726340590000000000000000001063726F705768656E5072696E74696E67626F6F6C000000000E63726F7052656374426F74746F6D6C6F6E67000000000000000C63726F70526563744C6566746C6F6E67000000000000000D63726F705265637452696768746C6F6E67000000000000000B63726F7052656374546F706C6F6E6700000000003842494D03ED000000000010004800000001000200480000000100023842494D042600000000000E000000000000000000003F8000003842494D040D0000000000040000005A3842494D04190000000000040000001E3842494D03F3000000000009000000000000000001003842494D271000000000000A000100000000000000023842494D03F5000000000048002F66660001006C66660006000000000001002F6666000100A1999A0006000000000001003200000001005A00000006000000000001003500000001002D000000060000000000013842494D03F80000000000700000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800003842494D040000000000000200093842494D040200000000001400000000000000000000000000000000000000003842494D043000000000000A010101010101010101013842494D042D00000000000600010000000A3842494D0408000000000010000000010000024000000240000000003842494D041E000000000004000000003842494D041A00000000033F000000060000000000000000000001C20000032000000005672A68079898002D0034000000010000000000000000000000000000000000000001000000000000000000000320000001C200000000000000000000000000000000010000000000000000000000000000000000000010000000010000000000006E756C6C0000000200000006626F756E64734F626A6300000001000000000000526374310000000400000000546F70206C6F6E6700000000000000004C6566746C6F6E67000000000000000042746F6D6C6F6E67000001C200000000526768746C6F6E670000032000000006736C69636573566C4C73000000014F626A6300000001000000000005736C6963650000001200000007736C69636549446C6F6E67000000000000000767726F757049446C6F6E6700000000000000066F726967696E656E756D0000000C45536C6963654F726967696E0000000D6175746F47656E6572617465640000000054797065656E756D0000000A45536C6963655479706500000000496D672000000006626F756E64734F626A6300000001000000000000526374310000000400000000546F70206C6F6E6700000000000000004C6566746C6F6E67000000000000000042746F6D6C6F6E67000001C200000000526768746C6F6E67000003200000000375726C54455854000000010000000000006E756C6C54455854000000010000000000004D7367655445585400000001000000000006616C74546167544558540000000100000000000E63656C6C54657874497348544D4C626F6F6C010000000863656C6C546578745445585400000001000000000009686F727A416C69676E656E756D0000000F45536C696365486F727A416C69676E0000000764656661756C740000000976657274416C69676E656E756D0000000F45536C69636556657274416C69676E0000000764656661756C740000000B6267436F6C6F7254797065656E756D0000001145536C6963654247436F6C6F7254797065000000004E6F6E6500000009746F704F75747365746C6F6E67000000000000000A6C6566744F75747365746C6F6E67000000000000000C626F74746F6D4F75747365746C6F6E67000000000000000B72696768744F75747365746C6F6E6700000000003842494D042800000000000C000000023FF00000000000003842494D041100000000000101003842494D04140000000000040000000A3842494D040C000000000CDC00000001000000A00000005A000001E00000A8C000000CC000180001FFD8FFED000C41646F62655F434D0002FFEE000E41646F626500648000000001FFDB0084000C08080809080C09090C110B0A0B11150F0C0C0F1518131315131318110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C010D0B0B0D0E0D100E0E10140E0E0E14140E0E0E0E14110C0C0C0C0C11110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFC0001108005A00A003012200021101031101FFDD0004000AFFC4013F0000010501010101010100000000000000030001020405060708090A0B0100010501010101010100000000000000010002030405060708090A0B1000010401030204020507060805030C33010002110304211231054151611322718132061491A1B14223241552C16233347282D14307259253F0E1F163733516A2B283264493546445C2A3743617D255E265F2B384C3D375E3F3462794A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F637475767778797A7B7C7D7E7F711000202010204040304050607070605350100021103213112044151617122130532819114A1B14223C152D1F0332462E1728292435315637334F1250616A2B283072635C2D2449354A317644555367465E2F2B384C3D375E3F34694A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F62737475767778797A7B7C7FFDA000C03010002110311003F00F544924925293A64E929F18FADE19FF3ABAA48DC4DEDE49FF454ACD369FB3380796ED036EA74F26A9FD78C97B3EB8F55606C8F581FFC0A958D6E43DC037807B28C86505BB87D62EE9F91F68AEC7BEE6B5CC6BDC6480F11A4A1FA7D77AB07DD8F8F93934564FAAF631CEADB03D477AD77F315ED67BFF48F540820C1D7CD751F55053FB1FAB6EA8E4BFD3DA69AF09B90F26CBB0598CCFB45EFF45EFBED67E830BD1B1FFA1B327DFE95753D002D0644079DB3A5755AB26AC4B316DAF26FD68ADE20D83FE05C7F4767F61FF4FF0047FCE223BA3758AADF4DF876B2D01C4B4B44B431AFB2DF536BBF44E6574DCEDB6FBFF4562EC7AD136756E977D8DFB3D565B6DA2CC3763D4E190FC7AB1ECC4C6C8B1EFA6DB30EDC5F4F333A8F52CFB55946162D5F6BA2947EAB4B68CAEA05D6E43AFC6C4B9B6E28A7631BA6536BEA18F5E55F6751CFC1DFD532EAF53D4F4E8C965D93956E374FFB2E3D6FA0B6DE4BA6617D6B654DCBE9D8B9FE9583755763D76ED70F169AFD962EC3A17D64EA76D96616774CCAB32714B5B9365143DEF66EFA1F6BC6637757B9BEF66CFA7FE8D65F45774BA0FD5DC3774F77AEEEA15E583F68792CF55D87898D9AF69C766E6E6BB1ECCAA719DFF69ABAECF53D3CA62E7F17071B3FA8E3518782E155F6D6D6E2073AF7866E69CAFD27A75D9FCDB6EB5FECFD13130C227AAF8CE4351B3E96329ADCE6B032C60225A2EA6DAC3B69F7B7F4F535AF757BBF495AF37EB34578DD5F3E8ADBE9D75E4581958101AD277358D6FEEED77B56C3BA8DF4F5CC91439ADAF1AFC8A716AAC06D2CA197595B71E8A2ADB4D753FD365967A6DF52EB3F4F6BEDB150FACEFF00B47557E735A5ACCA6B09932058C6B6BB5AD77F65088119505D3265004F47296AFD52FF00C55748FF00C34DFF00A97AC995ADF54BFF00155D23FF000D37FEA5EA4627DE13274C8AD524924929FFD0F544924925293A64E929F09FAEEC9FAE1D59DFF0CD1FF8152B01DCF9ADEFAF0E23EB87578ED734C7FD6A9584E1EE07B4C7CD3482B82C0CB869F246A6B0F3B5C246920F1F728B29703C401C9F056B1D90F1A73AFC934AE0750D9C3C5ADD680D6001C35811C15D0E374AC79935336EEDE06D1F4A3E971F4952E958FEF693C49D7E2B7EB969E254323AB6B18EAD46F49C7F730D4DDAFF0073840824FD29597D6FA5D54EE2D1B77341606E9A8F6ED11FC95D334FB493A203B1ABBF21B65A37067D169E1464906ED9B844855393D1FA1399563DD60DAF68690D8D23F74FEEFB5687D60E8746474DB2DA5B16D23D481DE072B535EDC4A85969D0763A1F81D101908365470C786A9F2EDC473F72D5FAA07FECAFA47FE1A67E47ACFCBA855977560406BDC00F20568FD516FF00D95F473FF7699FF52F5781D9CC23523B3EF6993A6450A49249253FFFD1F544924925293A64E929F05FAF263EBA756F036B47FE05542C62241EFBB50B63EBE83FF3C7AAB876B87FE7AA56383EE1E1FEBEE40AE4AE2E207808251702C7D9696BB9747E2546BA9CF7348D7C63556FA7623EBCA24F0D2224729922297C626DE9B0A88EC0761F2F6AD4656EDBA842C0A9A183C5690600DD79EEA06E44506ABC32B682F78682A01F48FA37327CCA3BA9A277D906741BB80AA64D9D348F4CBEA6DA4C0687B43893DB6EE4C902BC16C8C80E86348772496F1082FCEC4F53F4B686469E253E3E2399510C044F8F654EDCBE97D3AD1F6C7B2BBEC05CDDE1C4C03B67DAD7353575E9ABC8F5EA5B5758CAD9AD56BCDB518896BFDDFF00548FF545B1F5ABA47FE1A67FD4BD5BFADF6D195660E650439B657657BDA080763B737E906FD1F5551FAA766EFADDD1C0ED94CFC8E57212B01CDC91A9C878BEF8993A65231A92492494FF00FFD2F544924925293A64E929F07FAF4377D6EEADFF001EDFFCF54ACEE8F875E7754A31ED1348DCFB478B180D85BFDA5A5F5E04FD6DEAE3FE1C7FE7AA5677D5BCAAF1FAC62BEC23D379752F9FF84696367FB4992D8D2F85710BEEF656F4FC73B5B93815D41803BD7C56ECF4C1FA2DBC7E77F2DC8195D2D941DF4925BCEBE20AD5B711F71BADCCB36E331D3B0BA1A770F6EF8F759FB9B10290CB2921ED2DD7DAC773B7F35D0AB027BB7A518F64BD39C7609E56A31C0F3ACAC9A5BE9FB55EA9F1051486593D2B032B5C8C7AEE3DB7B7700818DF57FA7E3DA2DAF1A8AC8320B2B00C8F376E5A55BC10028DD76D6B9BE4A39DD32C00ECCBD4AC360113DD0ACC7ADC009DBBF50476542C3D4FD3230D958B5D1165B25AD13EF3B1BF49C9E9ABABB2E0E7BD9E8B87BE352E70FE49FA09A9156D6FAE5D2DD6FD5E7E4077AAFC1B1B7B4F70C77E86F1FE6B98FF00FADAE33EA79FFB2EE91FF8699F91CBD22EB59753762BC82CBEB7D4E1C887B4B3FEFCBCD7EA583FF3ABA313CFDA980FDCE56701B15D9A5CDC6A57FBCFD04A2A4A2AC351749249253FFFD3F544924925293A64E929F06FAF13FF003BFABFFC70FF00CF74AC0C5A9F6BEC63352C63AC81FF000637BB5FEAAE8BEB9D2FBFEB97576B4682E6973DDA35A3D3AB955FA1E1D15F556398F3634D193EA480266B737D8D4384D13D14271E211BF53B9D07EB6E364D2DC7EA4F155EC01A2D78FD1D9FBAE738FF00376AE86C6B1CCF546C1A4EF90411CFD29DABCE31F01ECC9BF19F040D58EEC44E85AB5717A65C5A186D2299135C983FC90D55E7117A3771E43C3A8D5E9F7B79699F056B1DEC70826216457B9839D111993E9EB29ACA24EDFA80409F821DF6082663B954075105B13D92AAD16BE5CE803523C5327AE8BC11BB62EEA36D5596D741B081A1710D6FDFAB952C6EABD6ACBC0BE8AABA5C61D1634B88EDB55CB286E437520055D9D3E8C571BDD74EC05D06001085689120CF2F26BC5C5BF2DE76BA8ADCE209FCE03D8CFF003F6AE2FEA5B09FAD5D1FCB25B27E4E5B3D55CECF2EA812DA9C7D4DAE05A5DFE8DFEF8DCCFCF46FAA5D2998FD7B02C277385E3F2394D8FD3E64B5739E33A6D10FB028A928AB2D35D2492494FF00FFD4F544924925293A64E929F1DFACEDFF00B24EB193635CDC4A725AD73F69D9EA3AAA6373FF003ACFE42CBC7E8D93D7F2ECCBC1B5B895E3868B6F735CC68304CB760DDF41BFA47ADEFF0018DFF8A0C4FA3FCE5DFCC7F52BFE77FEEF7FEEB7A6B56AFF00C478FE6FFA3B3E87D1FA2CFE95FCBFFB91FC8F553A5C7C236A598FDBE296F77ABCF3306FFB0FA79370BEBACFACCC86506BB1A5C1BFA11BEE6EF764B5F47E83D1DFBEEA7F3DEA66814BFD116B4E4080EC7782CB8388935FB3D6ABD467F5DEB62EFE9479FE7EFF00E6B8E723FE4EFF00CD97FA1FF805CBFE60FA1F487F3BFCDFD21FCEFF0027FD2AAD2E2BE8DE87B75BCFFABC207ED7571DCEC88143D8E71240638ED7123E9358EFE6EC43C86E5D409B68786FEF012DFF0039B2B773BF9ABBFE4BFE6AAFE6BF9CE7FC07F23FEE27F2D407F363E9FD11F4BE97F6FF00EFC992ABD131E2AD5E6DB90D2ED343DC23D7925BA83007753EABF4FF00C17CBE925D17FE50C4FA1FCF33F9CFA3CFFAEC4CD1935AD1D0651955E39C9CEB3EC58AD05CE7B9A5D66D1F9C31D9EFDBBBD9FA445E82FC6EA37BC574DB752DDAD7E45CE643647AAE2719BBBE9D6DD8CFD25B6FFA5F4D56FADDFD1B2BF9FF00E98DFA7C7D13FCFF00FC0FFDC7FF0087F595CFA93FF22BB8FA777D1E7E8D7FCE7FDF7FE0D3870AD971D6BB3A9D4F0CE660D95B768B1CC2F617090D73C86D6E688FE73D3DFE9FFC26C5CEF4CCAA717EBBD5D2DAC706D394C635D21DA966F732CDA7F95F4D7517FF003C3FA5FD3ABF98FE6F86FD2FE4FF00DFD55BBFF141D2BFA1FF0049FF000BFD33E8DBF4BFF44A78DC5B19D8D767B851524CAC3554924924A7FFD93842494D042100000000005700000001010000000F00410064006F00620065002000500068006F0074006F00730068006F00700000001400410064006F00620065002000500068006F0074006F00730068006F00700020003200300032003000000001003842494D04060000000000070006000000010100FFE10DD2687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F003C3F787061636B657420626567696E3D22EFBBBF222069643D2257354D304D7043656869487A7265537A4E54637A6B633964223F3E203C783A786D706D65746120786D6C6E733A783D2261646F62653A6E733A6D6574612F2220783A786D70746B3D2241646F626520584D5020436F726520352E362D633134382037392E3136343033362C20323031392F30382F31332D30313A30363A35372020202020202020223E203C7264663A52444620786D6C6E733A7264663D22687474703A2F2F7777772E77332E6F72672F313939392F30322F32322D7264662D73796E7461782D6E7323223E203C7264663A4465736372697074696F6E207264663A61626F75743D222220786D6C6E733A786D703D22687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F2220786D6C6E733A786D704D4D3D22687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F6D6D2F2220786D6C6E733A73744576743D22687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F73547970652F5265736F757263654576656E74232220786D6C6E733A64633D22687474703A2F2F7075726C2E6F72672F64632F656C656D656E74732F312E312F2220786D6C6E733A70686F746F73686F703D22687474703A2F2F6E732E61646F62652E636F6D2F70686F746F73686F702F312E302F2220786D703A43726561746F72546F6F6C3D2241646F62652050686F746F73686F702032312E30202857696E646F7773292220786D703A437265617465446174653D22323032302D30342D30325431373A32343A31352B30383A30302220786D703A4D65746164617461446174653D22323032302D30342D30325431373A32343A31352B30383A30302220786D703A4D6F64696679446174653D22323032302D30342D30325431373A32343A31352B30383A30302220786D704D4D3A496E7374616E636549443D22786D702E6969643A34656266653730652D643236652D623834312D613962612D3232623834663439646366312220786D704D4D3A446F63756D656E7449443D2261646F62653A646F6369643A70686F746F73686F703A64633333616566382D343164372D343134372D626566652D3133623366363839326632642220786D704D4D3A4F726967696E616C446F63756D656E7449443D22786D702E6469643A39633734393932312D633861652D393634382D613065372D613762366131393131336266222064633A666F726D61743D22696D6167652F6A706567222070686F746F73686F703A436F6C6F724D6F64653D2233223E203C786D704D4D3A486973746F72793E203C7264663A5365713E203C7264663A6C692073744576743A616374696F6E3D2263726561746564222073744576743A696E7374616E636549443D22786D702E6969643A39633734393932312D633861652D393634382D613065372D613762366131393131336266222073744576743A7768656E3D22323032302D30342D30325431373A32343A31352B30383A3030222073744576743A736F6674776172654167656E743D2241646F62652050686F746F73686F702032312E30202857696E646F777329222F3E203C7264663A6C692073744576743A616374696F6E3D227361766564222073744576743A696E7374616E636549443D22786D702E6969643A34656266653730652D643236652D623834312D613962612D323262383466343964636631222073744576743A7768656E3D22323032302D30342D30325431373A32343A31352B30383A3030222073744576743A736F6674776172654167656E743D2241646F62652050686F746F73686F702032312E30202857696E646F777329222073744576743A6368616E6765643D222F222F3E203C2F7264663A5365713E203C2F786D704D4D3A486973746F72793E203C2F7264663A4465736372697074696F6E3E203C2F7264663A5244463E203C2F783A786D706D6574613E2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203C3F787061636B657420656E643D2277223F3EFFEE000E41646F626500644000000001FFDB0084000202020202020202020203020202030403020203040504040404040506050505050505060607070807070609090A0A09090C0C0C0C0C0C0C0C0C0C0C0C0C0C0C01030303050405090606090D0A090A0D0F0E0E0E0E0F0F0C0C0C0C0C0F0F0C0C0C0C0C0C0F0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFC000110801C2032003011100021101031101FFDD00040064FFC401A20000000701010101010000000000000000040503020601000708090A0B0100020203010101010100000000000000010002030405060708090A0B1000020103030204020607030402060273010203110400052112314151061361227181143291A10715B14223C152D1E1331662F0247282F12543345392A2B26373C235442793A3B33617546474C3D2E2082683090A181984944546A4B456D355281AF2E3F3C4D4E4F465758595A5B5C5D5E5F566768696A6B6C6D6E6F637475767778797A7B7C7D7E7F738485868788898A8B8C8D8E8F82939495969798999A9B9C9D9E9F92A3A4A5A6A7A8A9AAABACADAEAFA110002020102030505040506040803036D0100021103042112314105511361220671819132A1B1F014C1D1E1234215526272F1332434438216925325A263B2C20773D235E2448317549308090A18192636451A2764745537F2A3B3C32829D3E3F38494A4B4C4D4E4F465758595A5B5C5D5E5F5465666768696A6B6C6D6E6F6475767778797A7B7C7D7E7F738485868788898A8B8C8D8E8F839495969798999A9B9C9D9E9F92A3A4A5A6A7A8A9AAABACADAEAFAFFDA000C03010002110311003F00FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8E35D5BCC737C2D3C9BFBFF666A389DAABAAEB92D09964A9F7C78D5CFA56B736CD2C94EF538F1AA82F96F534916762EE10D78F8E112B54DEDED35BD3EEA09B45B992D25620CA14D3265239BD8EDBCD5E6BB286DA2B8BE79A375FDFA924D4D3205B0232DB5BD4EF199998E5459C58F6A9ABEA16F71CB9114EF9125B120B8F3A5CDA026573418AA583F34D616346AB5298A09A424FF98F2DD0F80D2BE18691C4925DEBD7DAB05B61522434CAF2C51C6FBA7FE7122F60D17CBBA84175B333D4D7E6329E172714DF5E6AFE7ED22CE1043865814FAAB5F118F0B9A26F8C7F30BF306DEE7549AE2C8889391A95FA71E1499BC4758F3D5037A77ACDEA0AB47CBAE4E30713366E12F35D43F302DA14901531CE7ECCA7C72C11718E7796EAFE6ED57516663AA12A0515431E99608B8F2D430D9A677E524F3FAA4F5A9AE5822D0750978B98B8D140D8E4C63B63F9843BDC13F64532431B1F1AD0C5DB916EE72D8E362656ACB7457BE4BC3606368A13F2553F7E5321BB5F0EEDD0B6F916C0141ADD0558F5385BE2690CC5536E98B682985A4527312ABF1A6F5C9F44527A6F5255114979C48EC4E424136EE70A2D2593E54CA2516432D265A76A6F6B5FAACACBE041E995F0B319DE9DE5BFCCBF37E8C54E9FE619A075E8A1C8FE18699F88FA4FC9FF00F395FE6ED08C0BACAB6A71A302D2BFC5B0F98C890D8323EA6F247FCE5769BE63B8449ECD62F50F5D875AE564360C8FA2EC3CC5A46B32DADF898514F2F4EBD72B21BF14F74FF4D7626F1F53F8A192BF5207B785320439FC4115A4693711DBDF5F5F12CE8C0D913D857B640865CD910BAFAE46A41FEE46F95909115A6CE4BB46B98FAC20D7214C643662170CF7323C858AFA27E2FA314452DD56DE2D4F4C9F94A6B1827AF862DF163FA65C8FD1C2C11EADCA80D716F09EC33DE42A6D1472A2824F861069AB502C331D3BCB3E55F3C412795FCE9A746D05DC6CB0CEEBBD4A9A6FF3399784BA4D445F8C9FF3931F9253FE507E61EA96B145E9F97B57919B426A6C402C4D3AF866C605D3E41BBE5BAFA5230FC32DB583B90724F865D8B930CC5BCB5A16375C55AC5578E98AB78AA8BFDA38AAA2F7C55A3D7156B155EADD315560D8ABFADEFF009C6EFF00D677FC84FF00CD73E56FFBA45AE5A39349E6F68C28762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD0FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF917B754FE45FBB34FC2ED532A855A803C71E1551370C0E3C2AADF5A26361ED863155D0DC52840DFC72C2A39A6893B3D0124F8D7205B423E172F227A6C401D86D9516714AB5F0D52FD80A139193607916A21A49641526A722125825DE9F335C1F4C75ED96C434929D699A6C96C434DD0F639708B519B2F86D62F8446DC7EB1F0971B52990CB0D9871BE87FCB0F341D3236D0D5B8C6E3E2981A1FBF28E17231CD35F3479E9A06B8D356666080FC7CAA4D6BDF0F0B9919BE7FD5BCC7246F2B3BB10C4EC4E3C2994DE7979AD87666AFDAE9921171331B2C0F56D4F996EFF003CB045C5931D8EF2A483F765822E3C93012875EBB1C988B4108794A034D865910C68BA38D5CFDACB0048895EF171AE4C36479A0A470A7A6580362A4738A2F877CC49C775A4724E0D32149016B354935AD71A4A1DD6BD77C7853689173C4000D282981B835EBA75A0AF8D30316FEB00F53CBE780C5810510B7617A1A7CB21C2C68DA6FA7EA011872EBE39021BC16463520EBC791A11BF8640867128FB5D46EECDD26B2B9642A6A021A6408660BEA2FCB2FCFDD73CBED676DA8D64D3C301752BEE42FCCE56437639517E927903F33746F37E9D6F35B5CC6CC69C5188FE272B21CE195EF305FA4D63FBD6531AAF4047864086E8E4B486CAF94DD3C40F0427627A64086D8CD96A5DDCDA59B81C5A07EAC065720CA52B09035922C373792515250683B641116276C6D6D61BBE6F53302029E9BE2DF179F4113DAEA124A8F54249515DB16F0CA34926E2FE49AEE5291C6018F7A54F860465161EA22FDB4CB9B1BE11ABC42946201CC9C45D46A60F8AFF00E73E6C935ED07CAFE6151B69FEA733E1CB966C6127479A3BBF21B5802DEF21BB07F772A9A2F6CB896A8B7129F492423FBC15197E12C7338F7CBDA14FB8C555475C55CDD7156B156A98AB78AA8B1353BE2AB6A7C7155E3156EA7C7157F5CBFF0038D9FF00ACEBF907FF009AE3CABFF748B5CB472693CDED5850EC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFFD1FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF91688D3E8CD770BB55732D29BED5C3C2AA125C2826831E155317408208D8E02155E1B85AF4C8951CD358A7AEC0640B684DB436F56492BD16B9596615B5884496D2F7DF6CAE41B2245BC82F22E370C08A6F82213221279612262C82A46E7E599100E3CCAE5B8127C2F41C732621C6949524D42354F4A234917A1AE47306A2535D3BCDEBA4425797FA536DCC1FEDCC76FC4509A9F9B4384B899EB24952C6B5FE38D39824C1F50F30477E480698D24CAD8EDC5C8D85474E95C9C766360A4574C1CF635E9EF930D6404B3D13EA5541F0229BD72C01A26023D4B200A41E5D969BFDD9688B498A9C8A643CC30A7422BD32241B4C601C9CD0D0D4622D78559E6DA85BE9CB031A4148391EBD7EFC95A3758ABD0572A31B6611B1823A838384A95415A9D8EDDA98F09415600537EFDB070962DFD589EDEE477CA8B782D7D5877207CCE16629B36E3C4570F267C214BD23C80EE4F4C2427802690DB9461BF5CA484009D470F214276A6FE232B21980A5CBD19290CC580EB4DE83DF2B660332D27535212DEE8FFA3C9B487DB20591D9EA7E53F3E7983CB371CF47BA75B588D42722361ED5CACD22322FADFF002DBFE729E486FECA3F324A5B4F43C6EB7AD6B403F6B2B2DF0917D9AFF997E53F30E976D75A2CF1C72CA0114615DFE9C8172A322F48F2E1BBD5F477844BCCF02EA6BE032B937028CD596783CBD6EAE486690291DF2A6C890F3BF35C434FB6B478C9AC8A0B530D37C4879A9BFB99670B1D41AED5EFF2C0DE0B228A4BA8602D3935603D3A78FD1912CE554CFF004DBBBDD461B5B6949F4D3BB6DFAF32313ABD48BE4F08FF009CBD8E0D47F29B5582DF79B4BF4C311B9F889E99B081D9D0E789B7E39EB9664FE87818D4B86E5F7E5A1C5029425A239806C20F8732B0726190DA1CF7CC86A531D462AAABD7157375C55AC55D8ABB15506FB47156B155E3A0C55BC55FD72FFCE367FEB3AFE417FE6B8F2AFF00DD22D72D1C9A4F37B56143B15762AEC55A6E98AACC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5572F7C55762AFF00FFD2FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF91745DBAE6B5DAA0270038DFBF4C557A007DF1B569937DBBE025217C042073DC654C931B4B9E50CA83AF638153ED2A660AE69F7614A367BA58ED6466DC57BE210497946B3748D33508EB930030322C65AED519B7A6D930C0A4B25EA976A1A6581AD2C9AE872FB4704D38D012DCEFD72B6D40CD37A94DCD07BE2CACA024DF7F0C56CA8140C8FF00BB32CBD8569F0F7CAB27369C922D18005B7B89916CE2B561340E5BAB2F4EB92C64B5D943DB5FDB89F5295B5385DAF559A094950D1CE7B04AEF99B8C2D95595FCC31E95FA5A2F2DEAB79369A4C971E6692CA54B64886DBBF1E1B7BE654698F1747A07953F25FF00357CD5E47B8FCC3F2CF921F5AF26DAC924BAB6B8AEDF686F20A01B713919D1482F2ED2EE9AFF0053F4EEAE9567B5774B4D35A8AB291B1591BF678F6AF5C85320537786D4C727D62D7D2746ACB0024AAB57E1A37BE16C1BA0A592333C1F5AB6956F6452D6B040A646283AFC2B8B2D91111FAC46DF5AD0357B7907FBCF3A594ADC97BBF4ED8D30F103505E5DC61A19341D524914F1B6B916725593FDF9C698D3094C2BC17577C9A69749D5DD17E004584A7930F1DB6C698198519259239ED629ECE48EE637F5EE6CEF94DAB7A0DF64D1E87010C6D165EFA492CFF437FCEC1AD7982636B06996E39B2843F0A8095272AE0B6424C9F59F2D79A3CADA9E9BA7F9E7C8D3686FAFA7FA33DD1786BC056A3985C85331262333C3A54F76F7BC648AB4B360D5AF80195D16C12513E60D2CD80917D45D661916331703F0A31DDBE818981642749BC3AE6906375955CC900F87512A429FE19594FE60222D35781D3EB68CAD1034926660015F9572B3129FCC840C7E65D1D24BEB4B581E196ED089EE402E021EE32070CAAD7F3211EFE61B4168AB6D299934E50F75301F184E8085EF90F02523417F34193E95ABBEB4AB7361A9FA4427EFD88A72403A53C6980E92498EA8047DBF9C7CB567070FAFC915C4CE561708580643F1127B54E0FCA49C886AA2CCF4DFCE48343113DBF98273C2842D0D36FA71FCA172A3AB8BE9FF00CBBFF9CDB4D1FD0B6D435C905A2AD18F0A9FF896425A434CA7AC14FAC348FF009CD2FC9CD42C53F4D798CACC46EA631D7FE0B043465C6FCE29EAFF00F393FF00939ABD91B3B0F33299266A44F22AA8527BD4B659F932D90D6EEC1B4AFF009C92FC948F548E1D6BCDBEB7D5488E20B10E0B20DAA581E9954B4843B0C5AC0FA4F4CF3168FABC116ADA4C424D0EE943D9DEF51231DCD3B653E018736EC9A8E21B326B4D5ED26FDD28E20EDB6D8D535DDBC63FE7231043F97F76F6EA5FD68D8B83BD681BAE646271B34453F1A350B93EBFD65BAC723023C3E239B1C54E8B53B294BF1309FB5C0E4332C38504337F1C2CD662AAABFC3155F8ABB15587AE2AD62AEE15DEB8ABB80F1C55DD36F0C55D8ABFAE5FF9C6CFFD675FC82FFCD71E55FF00BA45AE5A39349E6F6AC28762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFD3FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF90949CD3DF35AED52FB89CF2AF7C55B86E091D7E78AA21AE147461F7E02A39A924D50F534F0CA99A334E620B96D86F4AE054F2D6EFD2473D3C3154A750D59DAD254AF1F88648734179BDEDD33C8C49D8E4C302C72E27356DE9930C6492F362E77DB26D6A44FC66A69B7538CD38D42523B1FA72B6E435483D7156B155F63A7CDACEBBE57F2EC774BA6C5E65D66CF4A9755A8E708BA9021600F600D6B93C70123BB466354FD9DB4FF9F49FE51E9B35B5DF9C7FE725E596D2C19259EC276B48A07400311EA48EBB7C865808ADA838F7BBEA8D27FE704FFE70B7F2CBC93ADFE62EB5E4ED2FCFDA1F97AD1F53B8D68CE66458A1AB332885B893F4E5D007DEA4EFDC5F217E7E7FCFC07FE716353FC95F327E49FE4E7952E35AD3FCD1A73D92DB5DE9DF548AD1A421898DE956229B1CBE2A0D9B7BB7FCFBAED6DAEFFE7DEDABC11C097125CEA9E608E58A641C5CAD0F02C474D8EF91931E27CE5FF386BF901FF38ADFF3939F947F9A5E46D4AC20D13F3DE4D4AFA3D5B502693D8AA5C31B692CB911EA29FDBA74FA3229E2A7E6C7E75FE48FE62FE43F9FB55FCAFF003FD93DAC31B9934FF32509B7B8B752CD0949A9C492805403D7037465694FE5779EB49FCAEFCC9F267E62EBFA147E6CF2EE9F1490DDE9774291BF26A6F8B2E2EAFDABFC97FF009CC4FCA9FCF4F37697E48F21FF00CE3B5ADDCD7052DF51BD5B3AD9D9DB103D4066084034DC570B1E305EEDFF00393BF9B5F917FF0038B736896771F9223CD9E6AD663E3A258D869FF588BEAA48520BA275A9D862C38DF24AFF00CFC07F285102BFFCE28EA5A6B472F2BE54D1A4243F7A829818193E5CF2EEB1F945FF0039A1FF0039BFA5493F92469FE42D5B4CB5D2E7D04C660314D0D43332281435070B0326BF337F28BCA9F919FF003F16F267E5FF00E5ED82683A169F269B7D6F08FDE822E95988A3D41D80C89E4CE25EFF00FF003F7E5B6B6D7BF216FAED56EE1B8866F5D446B172F848FD803B9CAEB9B3069F945A4FF8720F3D7902F7CCBA4407CA305FC0757B66735684CAA5B90FF572BE8DAFDCAB4F397FCFACEEF5A9560F2669B26AD218AD25536AE12579540001F528C7B5460970F716278AB9BE8CF3FF00E497FCE0E7E5E7E5C69FE7AF387E5468DA6F90EF8441677470419BEC02858124FCF23C239D7E3E4E29B7CC49E6EFF9F50CE925A2F93B4A8B4E1113C84120527C38FAB5AFD3938C224F543E93FC95FC95FF009C13FCF1F2BEA3E60FCB0FCA9D1F52D0EC646D3EEEE9E378D870A93D5DBC32D18815DDE0B79E65FF009F5A683AA6B3A4DE792B4AB0D6B4B9A7D36FE25B7763CE0AAB0E5EA53AFB75C9C71041BA7E10595CE9716ADE686D3E258B449B5DD4A4D123AD185A191BD15A7871A65BC23AB5926F67DC5FF3827AD7FCE27E9FA779F3FE865346B2D425D52E61FF000CC570865F4A341FBDA85652A49A1EB8384364645FA0ADE64FF9F54F0E2FE56D1154776B7907FCCEC7843689C97DBEBFFF003EAD240B6F2B684EC4D14185C024F6AFAD80C026539232EB55FF009F5B229F5BCA9A1AB20ABA7A7202A3DFF7DB618E30D5C459F7E5FF0090FF00E7DF7F9C370BA2790BF2B6D35DE5F66FADEDE6FAB236FD67595941DBBE1300CE32931BFF009CC4FF009C6AFF009C4DFC9FFF009C73FCD3D534FF0021E85E59F375CE85247E5495A765BA92F792F130866DD857B0CA66221CAC5399237D9E1DFF0038E06E1FF24BC8D6FA85CDC48EB67037D52742BC18C62AC09DCD7357A900BB9C123D5F4B695A658ED26C48DC819824539F1281FCC5F2E5A79A3C9FAA5A7107EAF03F15EE7E16E99386CD59793F083CE5A73699AFEB5A5BC6D088677081C52B466E999F8CBA3D4C5283B5B59A9054AA1A5733226C38110866FE39364B315545FE18AAFC55BC554CF5C55D8AB5CE9B53157733E18AB7B9DE9D715750F862AFEB97FE71B3FF0059D7F20FFF0035C7957FEE916B968E4D279BDAB0A1D8ABB15762AD374C55662AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AB97BE2ABB157FFFD4FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8EE4B96A57F0CD6BB54BEE6E4F2FD78AAE86E01502BB62AB1E41CC1F7C05211724A0FA7E1953247B5D0458CD771D302AC9756E0B4AE2AC5EFF0053332B28F1E9921CD058C5DDC9A1C98605209A72C684F7DB2618C96890713936B5093F7854786F8CD38DBF476F6CADB96AC542DF462ABFD318AAA691E55F3379E7CD9A1793FC99650DD799AF254BAD31DD8AC8AF1B7C3C69EF976201C4CE5F60F993FE70D3FE739BCCF6ED6FE636BAD4D0A7A0BA64974C55430141414FC72EA01A2CBF643F2F3F273CFDA2FF00CE0F79D3F27751D3560F3D6A7E56BAD3AD2D236678CCF22154058926A49DF7C9C764136FC52D1FFE701FFE72CB48B23A6C3E43D327E0C6E11A590B4CA587B532C0520D3F6A7FE70B3F25FF00307F2DBFE70CB52FCA9F37592691E78BBBFD6E6B3B02DD56EF8984D76EA01C892C0C9F94DF94FF00F389FF00F3995F93FF0099EDF98DE46F2ADA43ACF97B58B9B9BFF5A5741716D34DCA84568C0AD6981417AE7FCE7FAFFCE51FE6E79534AF35F9F3F2AB43D1FF002EBCAD1B32EA1612BCB7E1CA1F51AE118D5072AD074C590953F38FFE71DF41F23F993F327C9F61F9CBA9DDE9DF96FAE3B23DCB201688E1C22891CF40316CE27EE04FFF003953FF0038D3FF0038DF77A57E43FF00CE2AF97F45D77F31FCC37D67656F7518A6957724DF097B9BD427E3626800C58195B18FF9CAAFF9CCDFCF4FC80D7BCAFA67E687FCE3DF94F59BED56CC3691AFD83497715B5C16A2A4323861EA03B85271636FABFF002FFF0038507E40CFF9F1F9F7E46D13C8B05BDA9B9D3F4E4445935042AC10CEACBB48C69B0C5812FC5DFF009C15D5A2D67FE7381F58D3AD6DADAD7CCBAE5CEAD690D688B677723CB1C6941D830DB16264F56FF9CB6980FF009FA17962F26790A01A3C56CD08AFC512BA95FA2BBE25B81671FF003F8D92E6E35DFC86B458964B3FAB48F6A53790B537046408641F93B24769776F1C5A8D8BDC5E5005AA9AD32A21B8153B8D1ACADF59F24FD5E27B49CEB5640015A8FDE83B570034CB9BF793FE7E412ABFFCE01F962299A79644D5F458DA471425D6A77F6DF2C8C6A9818EE5F822DA1697A868B63A7E97A1869E3B413DF5D92F5F5075EF84367007EF97FCFA0C347FF38C9E7F8608E44B9FF10DDC61C0FDA11353EECB049AB806DF17E12F9AB47B1BAFCC0FCCEB8BA8DA7BDFF156A70A3396A02262C6BBF8938253D9B3806EB5E3B64FAAB416104933FC0DC4D7EC8CC7F14B1F0829A683A75C3FD616C230D727F7CA091B8F91C7C52918C27967E5AF2D4C04779A2A4DE22AFF00D71F14A784226DB4BF2FEA7AAD9F93BCA1F97771E62F34DF4C9FA3B4FB38E4964E75A091954D4283D4E4A323252007E937E427FCFA63CE7E6BD624F38FFCE42EA16DE50D126845CC1A268937AB24A08A94B9E6D5414EA2B970B69343DEFAFBF303FE72AFFE716BFE708FCA571F975F92DA2D9EB9E72107A561A1E8CA67B496FC01F15E4C0B1526A6B4C8CA7B338C093BF27E59F9CF5FFCCAFF009C81D6EDBF31FF003BB537D6EE21B8F5743FCBD8E42FA6D9467EC96E276A53BE60E6CF5C9D8E0C3B6E1F657E5BFE6369D731586871B246D63122D22A1B745A50468C07ECE61711939F5C2FA534DBE8E15925460EAE054D72328B7C24CC22D5AC61D12EA696CBEB7CA290B102BC7E13918AE4E4FC43FCFDBED3F5AF3EEAA2CE0F41D256DA94A6ED997093A7CE1E1FEA48CAB1C8FCFD01C57D8667623B3AF229D96A1D8ABB155CBDF15546ED8AAC1D3156F15770077AE2AEE03C7156B9D36A74DB157733E18ABFAE6FF9C6CDFF00E71D7F208F8FE5C7957FEE916B968E4D279BDAB0A1D8ABB15762AD374C55662AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AB97BE2ABB157FFFD5FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8D34BC51D4D0F8E6BA9DAA5D757887900C2A71A55B6D7229BB0AE34A897909F881D877C041506914D7085128E2A32AA2CB88285DDE7100A372E23B634578825125F3B6DE3DB0526D0734E0296AD08C9008291DD5D541EF920C0A4C65777FB27E7930C485FCC81BFD3930585174720E677DA9824530148B0F5141BE41B2D48B91D8FCF15B6BD4C56D917917CEFE6DFCBCF3E68FE74F25D8DA4FADE8686E21BDBD1FBA4E07970AF89F0CC8C3C9C5CFCDF7349FF3F5EFF9CA09EC6E2F7F40F96EDEE2C9C5CDC4A63A3948C50D169EDE39750B71DFAE1E46FF009C8DF3C7997FE70D7CC7F9F77D6D65079CF43D126F318B287FDE7668D4B05229D0853DB26021F945E58FF9FADFFCE5A79B35516DE55F22681E62D56E938AD859DA9967DABFB0057B78614BF5BFFE7113F3E7F303F3EFFE71A6FF00F34BCD7656107E6269DAB6B5A78B38978242DA7FD8475A7C2DB1A8C04354DF9BBF941FF3F0CFF9CA9FCDFF00CFA87F28345D1BCB916A1ABEA975A7BCB321458A3B4765E4CD4EDC70522934FF009CF1FCF6FF009CA8FCBB54FC9DF3CC3E4CD4B45FCDAB77FABC1A0167BE8560F85BD6561F0D6B51F2C5987E547903C85E7FFCE1F31E95F90DA75CE97A4DCC5234B6925EBFA51B3F2E410B7892705864FD16F257FCFA23F3F26D7B44BFF33F987CB7E4EB2D2CACD0DEF97A57FAFA5C210D14B5634E4AC01AD70A0BF577CE1E75FC81FCA3FCB5D0BCB7F9F7E7DD07F32353F23411CEF26B7325C6AD737D0F499537AB531624BF32FF00E7323CE1F9DBFF00392DF975379D3CA7E4D9FCB9FF0038CFE50893559ED75188C37B3C51FDA96341406234F84E1A60FCCAFC9CF2BF9BFCFDF9CDE47F2C7E5B79864F2479AFCE0F1D9F917558E43088E40A5C7AAC3703883D31E140897EB27E5E7FCFB5BFE727B4DFCF1F24FE6C7E63FE61689E709343BC49F53B89E691E765414DAB4AD6B5C69B86CC2FFE7EF9AD68DFE37FC9DF2EE8BA9A4BE67F2DDBDCBEAF6D237C36EB22928CDE0180DB2259805F3C7FCE28FF00CE04F9B3FE7277C8B379FED3CEF2E942398C3C1E42073EA05011EF913BF26775CDF5A68BFF003E80F35DB6ADA36B1ABFE62B5E3E957F6F77F57E65AA20903D055BA9A5300891D14CC17E927FCE507FCE31CDFF003909F913A5FE4E5B6A8FA49B39ECEFCDFF00EC97B4D954EFDF2C0C0CC9DDF9B23FE7CF5E6CB5D3445A7FE68CD0DDBB5651EA3052BDD766A644829F10BF463FE710FF00E717AF3FE717FF002A75DF235E6BF36A771A95F4DA9497719F84348A568373BEF954C90A245F9F1E67FF009F44F98B5AF37F9975FB0FCC06B6B3D7B50B8D4C42F211F1DCC86460C037515C4094BA289D17C03FF393DFF38B1AC7FCE29F9FBC85A4EA5AE9D56D3CC32395915890415F72727E1D06CF11E5115ADBC0BC0ACCAD3B3189E9B75DE990E109E22AF02A25CA98A4775EE7B60A0C6CBEB5FF009F6E24C3FE73B742F456393FE752D5CC824EC9C7E265F714DB2E8061225F657FCFCFFF003C3F35FC97E6DFCBAFC96F2179A27F2BE93E74D264D47CC3E6289FD3B9611CDE998B9D3BA8E9965048912FC9FF002E796B4CF2F6A1746D8A5FCB75704DF6B7A99ADCBC86A4C8A6BD77CAB200DF025ECD06A30454B7B39648D29FBFB81D251E0C7C335D962E7E29109E69570F65730DF69E56CA20DF15B45B4751D5BE6731E31A72B8ADF587E5979ECDFABDB5F5C28E2005E47AFE18261BE05F56793754B6B9B7BDD2DD11E3BD8D979B741B532B00B39BF217FE726FCA5FE19FCC1D4EE238EAB732332D3A1A96E999100EAF5043E588DA30F351BE22DF1A9EA0E67E2D83AD9157A1F0CB98BB7F0C3452D12075C08B5CA46FBE2AA8C46DBE2AB01DB156EA3C715773A6D4C16134EE67C31B5A6F883BD7AE3687701E3855FD72FF00CE367FEB3AFE417FE6B8F2AFFDD22D72D1C9A4F37B56143B15762AEC55A6E98AACC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5572F7C55762AFFFD6FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF87A96FEF941ACBF8E623B3B0963DF5F16DA5AE34B611515DDF541F571A5D9318B53BD42A1E4AA7ED2E0931927706A3CC0E9BE52D61166E7638B38A5E6EBE33D4E2D8103717049C52833FBC23155616C42F21DF15434B1D3B62A868D7E36F0F0C5894746A3DBE8C582BB461BE43155168462AC93F2FBF2CFCE1F9BDE7FD1FF2EBC9776965A8EAF19905C4E6900A1A7C7976271B31DDFA2BA47FCF9FFF003D7597F43CC9F997E58B4B688049A0B3123CA57AD18AEDF7E640F268B7EC4F907F217CA1F937FF0038F179F955E75D6E26F23C1A335AF9A359B87280447FBCAB9AD12872616DF1CEABFF003963FF00381FFF0038BD6BA743F96BE5BD23CF9A8D847C5755F29411C972838D2B3CEC2B5DC8241C905B5BFF003EB4FCC58FCF1F979F9AFA45BDB470DBEA3E63D675CB68140E5026A2EC544B4EFF00150E4BA2F0DB17FF009F7DFF00CE324FF963E63FCDAFCFEFCCDB44B09FF4B6ACDE5AB8B8F84DBC31CECCF23927F6C74DB010CB81F96DF9DDF9D7FF002BE3FE7253CE9F98D6F74D045A7CCD65A2E9970D50A9033C3CA01414E4054E56436C616CDFFE712FF28FF257F327CF9E6FF31FE72FE7149F963AB796353B69BCBCB6F75F56B8942307356F0AE459786FD51F38F93BFE71CFCE8D7B3AFF00CE71F98B48B4344BB5D3B5DE01005028483E032A32A3CDA4E2277A79DF977FE7DABFF388BF9C724FA9681F9DFE67FCC6BB8EA6F35A1A8ADDB0A750CEC07864F8C745E0A7D95F97BE4CFC8BFC81F25FFD0B3F99FF0036D7CCFA7F9B4496BA47977CC577EBDF4905C8A0B58A951C00FB2B931913C07B9F1A79AFFE7DDDFF003895F947E615F32F9A7F3CF59FCB2D465BD7B8F29DF0D405ACB64ECC4AADAB863C4A5683DB26269AA1C932B9FC9FFF009C6DD4E4B4D31BFE73E3CEE249C520787CC4435C9EA55985795326770C385F15FF00CE607FCE3DFF00CE35793FC93A9FE677927FE722AEFF0035BF320CB15BDBE9DABEA02FAEAE854A30AD6A780ED95C837C075A7C55E4DF31FE71792B429EDFCA5F991ADF923465E12CD616174D00776151B2E634B6673887D0DFF38F9E6FFF009C92F3EFE7CFE58F92FF00E576F99F50875F9E3D66F2CA5BF77A5BD9C80C9148A76A3807614C8F38DD72712517E82FFCFD9BF3BBCF5E43D53F2BFC95E46F376ABE50D47CC9A7CBA8CF75A64ED0168E297830629BF6F1CB9B7146F67E4949F9B1FF0039096D688A9F9E7E6F8AD66FDFCB72DA8CA013ECD5AFE382DCA9C283F6FBFE7D73E78F3479EFFE71CBCEFAC79EBCD5AC79AEFB4CF30DDC2BA85EDC34F27A0B192A159EA695A9EB8251704737E2FF009DFF003E7FE720AFBF30FF003022B5FCE7F34697A7DAEBF7D69A7410DF3A2450C729F4D68294016836C31A05CD8E332890C035DD5BCF3E67D574EF30FE64F9EEFF00CECFA07C7647509CCECBCF614AE4E73586911714D00BE54BA9663752A97D3E2AFEEC022A6A3E5989293951D3D2B5AB7A48ED5FDAFE3862584B1BEBEFF9F69C9EA7FCE75684C3FEA4ED647FC933991170F2C69EDFFF003F6FDFF3EFF26475FF0070139A7FD1C60916A897C11A8C06541DF8C9CA998F22E5C0A7769767EA8B08FD9ED9448B971679A34DCA08E393ECD77C85B75DB34B4D4A5D2EE2196CBA0209A64245CAC6FA93F2F7F32121B8B35B9702BC565AFBD3DB220B64F93C6BFE7316D6CB516B1D6AC183B3AD5A9F4E64C0BAAD445F9DD35A43EA99631F13EF2FCF2FE275A614A6E782D075CBE05690E243D3DF2EE882BC0E79596B937C78ED819479378B2762AEC55ACC79736D1C9BC4312578CB43592EEB920C097F5CDFF38D9FFACE9F905FF9AE3CABFF00748B5CB87260F6AC2AEC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFFD7FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF864BB048AACD51DB311CEB4BC2B147612EE01C56D17621DC0AC98ADA65E8307525EA2BB8C124129D5B45D38F4CA501306040229D716C8A58E28E49D862D88571C9F6DC629548E36A8DB154D235AAD08E9DB1541DC42687E1FA7154A1D5D0F43BE282A91C8E0F4C58F0A3519A9BEC3B62BC2B8891BA2938AF0B21F2279EFCFF00F94DE7DD13F323F2F2682DBCC7A3AFA3682ED3D5818B1AFC51F7CBB1CA9C4D40DDEF1F99FF00F39CFF00F3963F99305EDCF983CE163A19D22DDC48BE5D88D8BAB28AD1F89353F4E5DC40971E9FAFDF975AC7983CE1FF003EDFFCC2D67CC3ADCBADEAFAC793AF6692F6F5CCACAEC87A96F0C9476B5A7F387A7BE85A5F97E686F0C4B71A859A08A7863264776DF812A09AEFDF240AD3F707FE7D29F951F9A9E58D67F327CEFAF794AFFCB3F979E6FD06D2D74586F289F5A962209786B4A13D6A72D06C289D3D0FFE7EADF9D7E75FCBCFCB8F2D7E4FF95F4E9747D37F3126922D63CDB6EA5623146D510C6CA2AAC4FDADF7C494F1EEF91AF7FE70E3C83AA7FCE05F92BF3AEF2F5BC95F997E5B8A7B89B5A998AC37BEA48591645EA49A0A13EF9592D8323E2BFF009C7CFC90FCC1FF009C9CF3F6A1E5DF285F695A3F99A0478754D4EFA15781907C3CD50EF5A6F91B6632ECFD44F20FFCFAB7F26BF2AB40D53CD9FF003943F98B1EAF1E9122DD31D16E0D85B451A7C6C6757AB301DE83A60113F0419DBEF0F30F9D3F2CFF00297FE7157CDDF985FF0038E51E8F77A2E99A34D3E87AB584002CA507C25DB882FDF7A647C2A533B3BBF9ABD5FCC1E62BDBFD3BF38B52F3E1D5FF00332009E6CB79656692289588A59C486BC597C06110A62723F717F317CA1E4DFF009F8A7FCE1B683E61F29DEAA79DFC9B6E93C371250BAEACB12ADCC53746E24D763921162676F3AFF9C76FF9C4AFCACFF9C2AF256A3F9DDFF392BAF68DAC6BB25AC8348D2EEE1F56DE1050845489C37C66B4AE4B8D1C4FC98F3C683E4FF3F7E6A7987CE9A0F95AFF00CB7F97BAD5E493E91A34D227AD21690B17B72BF654D4103C32B3367E3523BCC3368DE5ED38437CCF631C29EAC4D72DCC48631544A0AD49A532A3BA7C6B7EAA7FCFAF3F21AF74CB6F31FF00CE577E62D9AE9F1EAD6D2BF93BD61C560D302B7AF32F2A5140527135F00C38ADF0C7FCE507E6BC1F9E5FF3923E60F3559336B1E4BF277ADA2792A590F34B9B5726B3475EC1AB91F136761A7C24EEF13D4A2B98216F556DEFED9374B08928CA3C0D76C7C47272E2D9FB2FFF003E9130C7FF0038CDF98534B0936D279BAFFD6B75D8AA08A9C7E8CB89DBE4EAB83D4FC42B8373FF002B0FF346E6C618E5B6B7F36EA8E7D75E4157D634041F0C864950761A68F34C66823B9FAC35E7A572978ABF0C0BC42537E99852CCEC052AAA97948E11B154E30923E3000EC721E2309CC24B3CE90432F3902146A3D4F427A65F09383972D3EC4FF9F65C7327FCE717971E44204FE4DD65E13D792F03BED9990E41D74F2713DD7FE7ED2449F9FF00F92E10F22FE5F9CA7B833E5732B10F862E5828B84A5655AD5331E45CBC6126D3AF59262937EEF7D81CC79172E2F55D2984B0523352AB5DB204B918E36C8F4C9E559024919604D2A72B949CA80A679663EAD494CBE9348414FA32024DB241F9EDEF35FB18ED9C35C431A101FA819938E4E0E585BE39D634AB9D26FEEA39A268D2662D096EE3DB2EE370E5898E354B6FF7E6463938D38D34D18D88FA73281D9C5915363C7A76C8940709053734381B03B9A78E2AB81077071575478E2ADD3C329237656EA1F0C900C495DD865803592DE4A9812FEB9BFE71B3FF0059D7F20BFF0035C7957FEE916B96057B562AEC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFFD0FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF86BB8802C67311CBE240DB460B32F63B1C57899159D94483A7CB15E25595139003AE465C97891F6DF00CA9215659878E2D914A669013D6A7B62D81411BE21E18A519137BE2A8C57A6F8AB52BD57DF154A6615A629014E35DFF008629A469140B8AD2262C5682DBA92EE182EA4897D5B636D227A6366F588F8581F6C944B46585BF40FF00E70A3FE70BFF0024FF00E723FF0029B5BF3279AFCCB2E85E6CD3F54FD1B7D1CF7CB1F2A8279716604E5FC449B718C2BA3F4B7F3B2EFF00283FE71B3FE7103CF7F9456BE72B18EF350F2ECFA4796A059D267BDB87144850231219B975392053E1DEEF8D7FE707F47FF9C0DF27FE58699F9D5E7A920D17CE3645F4EF33E9FE629BEBB0472C5F6A58ED983503B74A0C9DA38084AFFE7217FE7E75E7BF365C5E7907FE719F438FCB7A1D9BB245E63302FA77D68A6A9F554D84551B9A76C78E9A678492FBA3F267F36BF20BFE73B3F246D3F2E3CE2F6ADE69D3EDE14F3568B7AC8B7B693DB95E53432C86A3D4707ECFBE0333C988C469F327FCFCB3F353CABE53FCBAF26FFCE267E5CDFDA3C1E60317E9B4B77594D8C5624344ACC8763215A1191E3A663097E57797752F3AFE5FF9C6C7CCDF943A9C9A0F9CF47B37B69ADC3304BA5917E290814069EF94F8AD834F27D89FF38B3F927AAFFCE6FDA7E64798BF3E7F37350B297C93A92E973E8C3516B68AE39C65D8B46CE015A8A5732465003038E4FD4FB9B5FF009C5EFCACFC8DB6FC88F3D7E61E976FF96F73A61B09B4D8665F5F8B1DCB4D11635DFAD301CF148C322F85A05FF9F51FE534B65AAF9524BCF3E5F69779EB5A587D6E6BA592E54502399556AA41E94A644E701B069645F0D7E4CFE707E71FE4DFE6779E7F353F27ACA7B7F2BDEEB5777FAA7901F91B67D325959D04716C81E8C454657F9A8B68D148F47EAA587FCE5D7FCE207FCE64F97A0F277E7DD8CFE44D68148A2F29EA333219A56D898E455E2373B03F7E40E51F51E5E4C65A390DBABF3FBFE735BFE7193F2E7FE71D6EBCA4BF931E6B9F599BF306493F44F97BEB7F5C7B6892AE2854B05A8A0C81CA48B3C9A8E9A47A24BFF3851F919E41FCF8FCE08BCB7F9D5E708F47BEF273A5EE8BF97374C527BFF4784AEC676A2B2AF75EE36C1C6472EBD57F2E62FB7BFE738BFE730D64B5BBFF009C5CFF009C7DB8B4B9D4AE02D96BFAD6931886D349B68C7096D02A1E279A93BAED8F89E9B972FBDC8C7A49134FCD7F2F791E1F2BD8A68176E65963AD2F474AB6E687E67304EA2CBD060D36C9D5FF00962CDEC2E4C7290D6F197694577A7CB271CD6DB9F4FB3F537FE7D471DBC1FF0038CDF9836D79756F682FFCD9A8A47EB4F1C6DC425391566046FE39B033B1B793CF4F170CC03DE7EF7E383E88DABF9ABF332F6D2329158F9BF538A57471C64549295DBED5731F3CEA2ECB1E2B0B64B2FAB6DC295ED9A83959F8450935A7AA80863180EB571D695CB2191AE78497A47FCE3F7E527E5A7E66FF00CE4DE8BF97BF9B2B736BE4AF3858DC5D45789762D544B6F1928399200E4453E9CDB69C931BBE4EB73E120D53F757F207FE70C7FE718BFE71AFCE927E65F912FE4935C165716D61ACDEEB114F0C16970A04CA23671527C4666125C2188F73F2B3FE7E3BF9A5E4EFCDFF00F9C87FCBEB2FCB3F30C1E6A87C89E5FB8B0F31FD554D22B812972BEA74AD08CA67CADBF1E3DDF31DAC4D05A3A188C69337A8439E4E1BFD6CC69173A18924F4C0BA048EF98E4B950C4F51D01855631D5C01954E4E4C31D3D46DF46944493053B8AE63CA4DA229835ADEBC6A5222C22EBB64449245AB5B5C4A54C33C541EF9938E4C4C2DE59F9A3E5C4BCB14D4ADE3DED50AB53DF2D949A32627CC778E915B014A4B5A1CC8C527559E348462CA23AF565AE6C22EB25CDCA390DFB64CB3839A315C836114B7D35C50EA53618ABB155C1C014F0C8916825AF572403025BF532603025DEAE5822D64BFAEAFF9C6B35FF9C74FC823E3F971E55FFBA45AE0661ED78A5D8ABB15762AD374C55662AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AB97BE2ABB157FFD1FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF881BC880420F5CC3E20E424B0A857A1EA4ED8F12B24B50B4218D31E20AA8F08670CBB9ED809B0A39AA03C41076395F0B604BE5662C6870F0B30504E1C9AD31E165C6D29E277FA7070B21205171354FC382928CF8A83E78D2B8D698D2A12406B8A625A8D0D7A6D8B2B45B23300145698AD85F1EDB1EB8ADAA4A225884FC4CD3AB045B6AD0153D5BE8C429A2868F47BB86133689E66D47465BDBA56BFD32CEE6585789FB529E0402465832531E005338FCBB6FA84CE751D4B53D461B17E766D79772CEAF20E8C15C9030F8BDE98E11D11F0795F499EFEDAF6F2C266B595F85D69026222007FBB997ECB57C30F8C19F83BDB33B782934292BC7E8C4ECB672C2823F4231B2D78815DB6CA67985B64710EA91EA7E5A437115F68D25EF97EEA32FFA4F52D3EE5EDCDE06FB3511914E390F1E9B3C081768DE5FD3ED8FD72E26BBD7F5E0DB6AB793BCAF427B1724ED909E7B671C1001E86B6EF2DC590922A49044CAFABA1E2483FB240DF7CA8E50DBE0C52883F2E6D4EB125EC771AA59E917959750B0B1BE96DBEB128E858C64549F7CAFF3738F271A7A404BD4B4AFCA0F20CF6D75A85CD86A90996129159DE6A12DD0527BD5C9CA726AF24F9B762D180ED0FC95E5FD05E19F4BD0603769271769155C18BC68475F7CC796693B0C7A50F52D3ED674B48A28163B4912E1A66754142ADFB0C0751EC72BF1A4E6474B163FABFE5BF943CCB3DC5D6B1A12EA3716A39D98B522DA49246EB491402299911D4D7544B4B1287F227E4F59E81AD5C7992EAE2F3EB112D346B2D46E1EF7EAA0FDA0A64AD36F0C9CB59C5CCB8FF901D143CF1F94BA579AAE96F74992E3CADE648DAA3CDF6933C721435E6948E8DF1034EB9286B047CC2FF2782ED17F2EB4DF2AD9BD969566F737F74419BCC533F3993F9B9330E4C5B213D582092E54745188D833187CB62EAD134DB88792A75D40F53FC73046716D98F152B4FE598AD6DD2D6CC85957EC5CB0A807C48EF96C753109CB8F886CF269BFE71FC4B7D793E99E62D5B4A17B5B899AC6F26B783EB2E7E26F4A3206F99B1ED1A157B3A89682E5C54CA34AFCA7D23CB5A63D9C76B2DDDC475996F4C86AD3B7DA771FB44FBE5597571946ADCAC7A7203CF75FD0E64998087A1F8B35E32370D384AE0D338C0E49F4DD47C2C45687B6646292CB00609E67F2EBEAF0D8DC5DC93DB6B36CFC6DEFEDA5689E28C9F8802BBEE336DA7CDC2E0E7D2C65CD8A6A3A0EA36B2B45A7F9B35FBC8C7C715BFE91B85141D57ED77CCD3A814EBB369611E5F794CB42B39B42944DA3DD8824D64F3D75661EACAA4ECCBEA1DCE512CE1A2189EBB1D84090ACF0C6C2D8AF0F58B16E4DF2CA279A2E6431A0534EF527AA2D77CA2598391114CF346D3E7867B762945E42B944B286FC71E3E4FA7F44D352F2C21089CCF115DBDB293305B0E0932587CBA3D27458E8CC3714FECC00B0F0A439B17D4FCA324619C2D3AF41FD99930986420C0753D0A76B1BCB59D39C12EE58F63965F1726196161F1E79A3CB8D63A8CFCA32B6FC8956CCBC669D26AB1960ECBCB91614543C53E599F09874D381054A46F4E95D81E872EE265034A4F2F1343D698096C26DAF52B8A1557703155C411D462A8377F888AE203592B79FBE48062EE7EF93B6041772F7C9713120BFAF7FF9C68FFD671FF9C7FF00FCD6FE54FF00BA45AE066393DB714BB15762AEC55A6E98AACC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5572F7C55762AFF00FFD2FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8779E6690D0E6BDC86E0B62C55A9D0D6B8AA7B1454C555F8814C473508693A9CB59A5E480C49E98AB4CE9E18AA1A465236C05945742699536F1047092A078E2B61716DBF8E15B08391B7AD701482A9130DB026D16ADB1FD78ADADE4395715B5CC6A062A9859FD93912D914FACBEC37FAD95C9BA09CC1906F8A6B0A0645AF8E565124EE5B5E56640EE320531482C21F4EE0AFF29DF2B9330CEACE0F56829B9C8368E4CDAC6C8B24629D3205B22F49B3B43FA35969534C81722095DBD8BF3A50F5CA8B97065B6766FC7EC91909392190E9DA51E60F1A6F539510D822C94E9842EE2B4182922294BE9CBBFC3DF1A6D10413E9C95E9808D9918A3AD6C100A53AE505ABC3569B4C47A10BB8C57C3455AE9E00E9D714786EB9D2B9A3F14DE9B62830A0F10F35689708F3388C77C945800C0A1B0924B69D5D00DF7CCCC658CA2C43CC9A64B085600D3332127032879C5F44D1D651B3014CBB8DD6E68EC9569E93493D373BE4096BC707D0DE5ED224BCD3238D81217E2194CE4EC2186C27B0F95E4120223E9ED98F22CCE9CB2BB2D12485E12E869514DB2B3272F498082FA3BC976F1FA31C6CBD80C00B9B2C4F5CB6D22065A85FB5D72C12689E35F75E5C826423D304E4C16838DE5DE70F28FA16FCA18FE12A4B003FB332B0C9A270A0F913CE5E598A54B82F0FC42BDB33232B755A885BE51D7EC24D3EE1A3E344EA332A05D2E68531CB9903428D5E99931710841897950E5A98F25656C595ABAC805315B5479401F3C56D2F91FE33BE4C354B9ACE7EF8B1773F7C55DCFDF157F5FF00FF0038CFFF00ACE1FF0038FDFF009ADBCA9FF747B5C9ABDBB15762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFD3FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88316FCCD45335EE42630C7C17891F11D862AAE55A3FB5F862AA7CC9751DB08E6A164BD4E58CD00D192493F67C71552654F1E98AA832AF6EB91290B797134C832564620D6BDB1557E551B1EBDB1542C8AC687016512BE3246C4E0656881228DBC715B5E11CEE294C56C2AD0D003D7B629B4CACC1A53B9C896D8B20B34655607B9A8CAE4DD04EA089F20DF14C63AA7153E3BE56512656AC0D9EFE1902CA2C7A01FE94CD4D89DB2B9320F44D1A22C54D36A641B43D174E882B0E4366E9902D917A259DB936C4506FD32B2E44175B598E7F677AEF95972E0CB2D2D502EE3225C90C86CA10A46DB6574E481B270E8A474ED8D360012CFAA73AF15EA71A6C0109258B03BAD3011B3202D523B609F6B314B2E04D22B3590034AD714702362B38D4D08A62BC08D92CE26864A0DC8D8E2C670D9E75E64D0627B39A4352789ED928B8A214F04F4608659A2058B96A71236EB97424C65040F9A34E89EC95C28AF1CC98CDC1CB17806B5108838E3DE800CB3C475D9216A7E5FD3A7B8B80238C31276180CD9E1C4FACFC9BA25D0B4F4DA1019539357C331E591DBE1C2F4FD1740FAEC9C12352E3AD76CC796473469D93DC796E24291B4604886A6991E2B6EC7800667E5DD3440E9F0D0786112672C6F5FB14B68E3024AD587C3B65824D13C69CA476CD41BFB6D9609B41C4A77FA1C17F6B22320208EF97E39B899A0F913F337CA4B6E2E0DBC436AD4D3E59970C8EB33E2B0F827CFDA605F55B851D76FD599B8E56E935189E113865050F8E66C0BAAC91A520A4003B66406B05554D3AFD38A6D706A1AF6C56C36D20A7738ADA14B124EF930D6D54E28754E2AEA9C55FD837FCE337FEB37FFCE3EFFE6B5F2A7FDD1ED726AF6EC55D8ABB15762AD374C55662AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AB97BE2ABB157FFD4FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88EB5527A8EF9AF72138584000F862AB580622B8AAAAC0BC4B6D5188E6A1033851F3CB59A058A952062A876E3FD715506A74EF912BC90EDF6B2B5E254AD00A615E25367618AF129FAA5B6F0C0520ABC75207BE0648911B1236E98A11A88C314DB60126A7E8C59C135B35DC644B745925BAED95C9BE09EC0BF08C837C559C5181CACA24CA6DC7A9694F6C814C52DB7B73EBF4EF95C9987A5E876C788DBB641B4727A3E9B685DA314E832B2CE2F46B2B6263094C8172609D5AE983903E395972E0C8E1B001694C8C9C909A5A5A8AF4E9869B849363682831A6626BA2B44A7D9C69B04D42E2D12A76C8C86CCC4B74B4DA1AF4FA3304B7DA6F69684F1D8605B4CC590AD298ADA30598F4DB6ED8944B7093EA9610CB613A9515E27F5620B488BE60D5F4C486FA62ABD1F7FBF260B19063FE62F4CDA08EA2BC72624E0E58BC2354B0E572DC96A9434F9E4FC470B82CB37FCB4D05AEB534E70FC3CBA91F3C066E5E2C54FB7B4ED02D6DED144680394A1CA2537678A349BE91A6AD9CA5F852BDF2894DC8B013A36A269D98AEDDB0464D9020B26D2ECD232A4AF4CB049259A5BAC2FC435053A659C4D134E3D3B7420F2C989341451B988008879061BE4E33A71F246D83F9B7CB36BA8E997521505CA93FAB32F1C9C2CB8DF97BF9BDA0BD95D5CC623A0DC8FC336584BA6D563A7C937D66DEA91D2873658CBCEEA0520658FD26E077D81CC98F27094F0AB44818ADA8B362B6B7AE4C2BB15762AEC55FD837FCE337FEB377FCE3EFFE6B5F2A7FDD1ED726AF6FC55D8ABB15762AD374C55662AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AB97BE2ABB157FFD5FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8A0B7896BB6D9AEB72116C388EA3DF1B553E05BEC918DAAA51C2F1E43082A94DDF21DF25C4CAD2AA495D8E3C4B68696564D88C78D6D62B926A41380C946EAA2367351B0F7C8DB2F0D50055346618DAF86B1E30C2AA7AE36BE1A82A146F886C7A6048852696F172DE98A784A64B1AAF5EA7A62BC255982D0D06F8AF0950E209D87CF10120F0A696686A36C0436C66192DBA1DBA6552722124FEDE2240E9ED951939312AB340C29B8391E69E1B647A78ADBF1EF4C8908BA46DB5848CE1C5284E57209137A2E836CCC428A5477CACB744BD434BB378594BD083E1954A5BB7443D074EB477A11403DF21C4E5420591431716F8874DB225CA8C29378D4505075C8916DDC48BB65A374DB0ADA6C232C36A615E3A44288D054A934C5B233B509551C6C0D7232E4DC0A10C04B0D866010DE3284DED6DD956B4191B65E222429077180C93C48F8684712363913365CD21D4D084954746072226BC34F9E7CCF02C124EED4249DA9F3C98935C9E37AF34B2B829F647519306DC3C91B49ECB467D52EE2855284EE49C375CDA31E2B2FA6BC83E4C86CA38E568D79F723227239F0C74F6EB4B13EA0DA8A17A1CA897240A4E96C569F0819598B2E1255C5B46801A6E3AE08C59C2242716691BF414A78E4D914D2283E3156D97240B4C85A36508CB452464F8DA4C54EDA89255892064E32B6990A446A33A3DABC22B475A0CC9C73A699C6C3E1FFCF3F2C7A51C978C8ACA63AFC3D7B66D304DD46AB1ECFCEAF30DB98DE4923015549DBBE6DB16EF2FAB86EC2259FD56E46B502999575B3AEE02A7CC7BE4830229631A9F6C242A91563DF224D32112570141BF6C226B54B4B81E3878969776AD7256B4B4B01D8E2B4FEC23FE71977FF9C6EFF9C7C3E3F96BE53FFBA3DAE4D0F6FC55D8ABB15762AD374C55662AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AB97BE2ABB157FFFD6FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8A889788DF6CD7539086B99B8D6871A5538666618D2A20C8C0548E98D2A0E6FDE0A8FBB1A54BC2D1E871A540DC805F7F1C6954F9704AD37E98D3387344464BAEC298D37F120A6B794B7C24E34BC48A855900E5DBC71A5E257DA62140DD37271A5E24C625E031A5E256049231A5E2452AF2071A5E25F1435AEDF4E4834CF74CAD63A1F6C816706456895207BE51272E0CAADE1A2034E994C9CA8F25EE9C8D298C4ECD80A75A5C7521299125AA4CB9221146AB4F880DF2A2562CC7CAEB59D790DAB9025CB845EC16F10E4B45DBC731E5CDC880671A58A28DB22E6E309C2A0E75A77C5CB099451A918B021116F1FC74F1C5253A48A806D8B54954A2D3F8E2D9050E0B5A78E097272A28848158F4E9984425191A0414CAC8641A6A02476CAC86C0BD245515F0C810CC1A63DADCE1629187864405E37CFDE636699A6205687A64C313BB03B7D224BFB9E012A2B97458F876F5CF2D792A38E786478A8DC7C32333B2638A8BDE749D320B481005008194B7009FC50C75D862D8023046A0785316C010F20500E29A57B324134C2A426292B066C0D642A3CAD4A62D6421C5C145624EF5DB2C816B942D0525F173C589A65F02C0E379AFE66E996FAAE8570B40CE10D3F0CD9603BBACD5637E4D7E6158C9A7DFDCC0148018FF000CDE603B3CA6B31EEF25039027DF326F7757214D85F965D171A4E2BF2C99601BE3D3A65127231A9323576E9910C64A0C8D920C56A96AD0E58155D0035AE495FD83FF00CE337FEB37FF00CE3EFF00E6B6F2A7FDD1ED72618BDBB15762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFD7FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8A8F54702DC7305BD2695FD57E9424E2A898542F520E2A887914A15F11D71542A9AD452A7C7154BA7942494A6F8AA5D31323020D2B8AA22180135770569B8C5944EE8E411D28B8B6A1979198A114DBAE2AAF28F4D775E55F0C556DA71E4E7895A8C551EEEA829D7C062ABA08DA46240A0C55341198D6A472F962ADC13A92CBE99153D7161229DC101A06AFD19596704DECFED57C0F4CA24E5C198DB30740A053DF2993971E4ABE8947A7DAF7195B34F74A819650FD457A64496B3CD99C712CF2569C41A6C72B25B718671A0D9849148A139025CD84767AD58C01D5052847539496E8C7765768521A2952D4F0C0E66308812564340684EC3172404CE1734AF86282138B70052A7AEF4C5849368D948F0F6C5AA4B1C507DADB16D8286E7BF4380B9314744D4ED98A42551989208046F9590C8284C5BEEC810D810AEEDC0F6C8109972633AD4B5B765A9269D7234E3C4BCC24D39EE5DAA6B53D31AA72602D3FF2DE80AB74ACEA0EF5A530F139508BD86DECA389A3E294A0C04B394682747E08C7C3906B015ADA60E7885208DEB8B301184D462CC0404A18EDCA9E18B346D8802B5607160423FD440C7DB162434F32018B59096CD729E1B6374988492EAED549A0CB2326528B1CD465FADA3C4DF65D78D0E6CB049D5EAA2FCECFCE9D1E2B4D6AE233462E49047BD3377824F2BAB86EF96678C452C89D402733E06DD0E6145439004ED991170A4B8508AD29932C03741E19449C8C6DF25029C77C8863258789FD9C218A1D901AD053BE5A154591BB1A6495FD84FF00CE32FF00EB377FCE3E57AFFCAB5F29FF00DD1ED72618BDBF15762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD0FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF89F0E3D33BE6370B90957306400773B63C2A893C9057A531A5414B39AF107738D2A6360038353D31E154BB508584E08FB23BE34A81F41BAF8634ADD1B74AFBE3C2A0A32D41F9E0E14F1353B32CAA4277A63C2BC49B7C0D082CBBE3C2BC484A537514C785789A1148F22D477C78578995C16E91C4848DC8EB8F0AF122B8464531E15E2524B74120A0EB919041DD3B55548C6525BA2BAD1AAF41E3BE5127320CD6CD78C60D329939514DA35E681B8D77CA645927FA70008DBE79592C3AB2FB280C8E1E9B1E99025CAC4377A3E8500E6A4FD39592EC71C5EA7A75B5694E990655453A11716DB172F105648A86A7BE2E5008C8F614C58108849CD7AF4C5A64994539D8E2D5269AE0B122BF2C5B20A911248AF42712E5453D8A9435CA2412BCD011E195C83243CCCBE34AE564360404C418A403C36C8D32E618B5E219BE06DFC31A6B1043DBE9C88EAC57E795C9BE019569D6D142438503DF2A2E4C4D0653115722831059C8D84C245063E98B00142301771D7BE2CC05766DB16C010ACA64AD0D08C595226D548A8AE2C486D890C77C5AC8519588077C2C084B26734EB954CA46C92DC826BBED8C249914B48F8C0FA7365824EAB54762F867F3DA0FF738E69DBFA66EF049E5B56777C797AA05CCBB53739B5C6E833F34BD97AE65479B8325C3651932C02ECA24E441AA0C88632688184315608BC47CB2D0AA4C8BE1D724AFEBEFFE719F6FF9C70FF9C7E1E1F96DE54FFBA3DAE4C317B6E2AEC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFD1FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88C69196127AED9570B9096DAC8649D09D80618F0AB26963050B571E15484A8697C287070AA610308CD41AF88C3C2ADCF2ACBFB1F11C78556B47C63E5C7B74C78552891B91200E27C7052A6FA64609DCD70213292D95E4A70A537AE0295CF6C586DB64789544DBB12AA13EC9DCF8E08CAD53386D49A129C6992B545CC68AA03538F6F1C6D54EDCB4A695C6D5368AD893CB9F4ED913BA2DB9A42B48C0DBC72A945BA324C34BB33248007EA6A4D328945CB8167013EAEA13EDD7BE5243951927DA622C90056D8D4E52609326436500120402BEF95CA34DB0C76F41D3AD38471ED94C8539B8F15335D2217F500029EF95172E269EA9A7A88E38EA2A69BE066237BA6E6207E2AEDE18B91134E238D3BF862DE26AF1C7CE9BF1C549B5AABF11F638B4C8A3D361F2C585371C7CBE2AD37C52364CED5796DE180B7C7226491D3F6EBF4640B3E25B27C3DEB4CAC864248095B96F5A65526D0508CFB78E479320503E887979D694ED9599B6844B5B86150DC699519338A6F6E802019592D802776D1D5280EFE3823CD289766E3403A65BC2B6A28581A15A0F1C7859892282961B1DCE3C2DA0A998985487EBD4E3C2C81B5D1A322B1E75A63C2B24BE49DCB9DBA63C2D6A4CEEFDE871E16B2859A1928183D699465145318DA477AF242A0D0B1390894CA0878F9B3A9A54115AE6C7049D4EAE3B3E30FCFBB7923D45AE78F2AEDC7EECDCE1C941E53571DDF1B6A16ACB3C8EC69CB7E3F3CDBE09ECE8B34774918D0D3C333625C1986E95EF97736B6CAD3BE5320DD02B9412064445245AF1193DF080BC2B0AB02464C15E1586363DF1B5E17F5F3FF38D029FF38E3FF38FE3C3F2DBCA9FF747B5CB03597B6E143B15762AEC55A6E98AACC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5572F7C55762AFFFD2FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88D98A8B7639072125B39544C3E78AB27797F75F462A948156A62A88A30C554E163F584E5F67154E27E0D0D075A62AC7648CA82701546E95381285F7C8143339230D1864153DF2252A0A08201195211D0C695078D7C718F34A39A48047C76072C548AEC8E69C0D41EB8AA63A7C144E647CF154CE175AB8F7C082B1A1F524141D4E466CE2CA34AB6F488246F98F37331B2066569157282E4C59269F6CC5D4A8F848D865726639B34D32D97EB09C865322E6620F41855508551B28DB289976100C974992928A8DF2825917A04120E2A7C70B743927B6EDEA003B62D88958F93118B64516917100E2CC287A7F113E2716B3156040F9628E144C4B45DF7C578530B55EB812228A1CA83205B5425E546C8499452E7E54CA4B70429EA3C32259072FDA39410CC146A005699021B01B4CD015400E4086C0532B7978AD46301452792351CB76CBD00A2163E54DB61BE2CC145A41B74A571660AC922A0DB6C5B6254516BC875C5050BF54E4EE695C581287961E1DBA62D64A02694468478E63E50CE058FEA24BAA9032B8865296CA5C9A28E33C7AED99D846EEAB57C9F257FCE4246D0C493B2ECDDE9F2CDCE11B3CAEAB9BE25D56759642C050140299B6C01D0E61BB139012C69F4667E37026BD010287AE5E1A951BF865726C8AE465005722DA15D5D7EEC2AA9453BD3AE2AEE2BE18ABFAEAFF009C6BFF00D674FC82FF00CD71E55FFBA45AE5A39349E6F6BC28762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD3FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF87EBA9D962318514F1CA2DBD2086568E74237E4DBE36ACCE37F5223DB1B543A8E2F5EB4C6D51AC57D3E58DAA5F50581AD0D76C6D5305E4C8057E9C6D5053A108C08DBC71B5405BAFA73F20DBD712ACF6C6E8AA54A06DA943912944170E6BC403E195A15D2E022BD5474DB0412C76F2F19A4214D07B658AA96FCD8835E7E3ED8AB258A65861DE9B8E98AA5E977C653C68C09A9C5053DB39C33A92A0E426CE2CC6DD8351BA517A663CDCCC689854B5CA6F9417262F56D06C8488A37F63944CB7445A791C0F0DE2A28A8AF5CA497371067F6567249C7634A7DACC79173E316496561E8C80F224E524B221964638A281BED930D914DECE765A7C35C2CD3B81F93569D4E2D91473B6DD3166146353254D29BE285850F2229B62AAE8EE9B7018AA6768F4EA3AE2551ECCA83C72B2C908F286AED909328A11C8A74CA4B7041484006942476C052A51824824532B21368F8EB5DF61E390219829824818053B656436028F80A82141AD71884996C9BC4AAA011BE588053355AA29A52A77C5B01560CAA37C5982879248DC30AF4C59C4A0165547206F5C524A3519284FF375C5AC940DDAA052791C5812C62F1BE02C054A9E994E4512A414BC1EDD5C8A1F0C8C53C4E6712A20540420AE66E1165D76A4ECF9B3FE724B4F79FCBB1DD2C615947D91ED4CDCE10F35AA7E736A49E9BD1CD0F1155CDA61E4E833F349C0A0E43E23E199D8DD7CDD52DF115A13DB2F0D4D9A93D32B93645408F888AD37C8B6856403BB6154482B403962AA8154FED9C55FD75FFCE35FFEB3A7E417FE6B8F2AFF00DD22D72D1C9A4F37B5E143B15762AEC55A6E98AACC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5572F7C55762AFF00FFD4FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF876BBE87315C8485CF160DE06B8AB2DD364F561FA31555941018E2A88452D01F962A955584943E3B0C5538B771C77FBB156AE1D1D4A8EA70C552A02928F9E48A197589AAD3DB22528D63C72A4202EA7288287AE304B1A7959E5A7BE58A9D5BCAD12123BD3156E5D4491C4B6F8AA8C37039160D5A9C50591E9B745A5515EF909B38BD1ED5FECFB8CC79B998D3AB14E57287DF282E4C5ED7E598D43A46DE198D939B918D92DD411A5DA35075DB289173F10675A5BC7E94629BD331E45CF804DE8CCD551B786524B221388549550763DF2D8F2484DA24E00649926D6DDB16C8A3DFA62CC23ADE35E35F6C59D34235E67DF15A44FD5C374C569AF4590EDB602B4BDB91C8162A251B7ED909328A83A353AE525B8210A357A6053C9B58DC6FC71402AA0B1143B7BE408660AF5661DF2B219828BB695BD51BF6C88E6C89D936FAE84E35392620B23B5BB8E48802462D81AB89929B362D80A5227ABB0E58B3057AA826BE38A928D8CA804571604A1AEDD781DF16B258E3CF17C5191CB91A8CAE41ACC964482E3946A9B0ED8C42789A82CE732B2AA1E20666E1145C4D472795FE7CE96F2792E591A3FB009CDC610F39A97E4E6BCE5EF64A6C17E1A7CB3658DD06A39A5F08063DF3371BAF9B7407A65E393535C4572B9364541E262C48E9916D0B789185555436D8AABAAB53157F5DFF00F38D5FFACE7F903FF9AE3CABFF00748B5CB472693CDED7850EC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFD5FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF87BBB5531935DF31E9C863A543921B61ED8D2A6FA4DD324A200070AD2A7AE1A54E75173071F4C0656FB44E0A54C34F904B0716006DB61A54B2E222B72A00AA93D7052A342468952C41231A543955506452491B50F4C2020A1A83D415385871325D3E4F8B8F6E38299DA6373444E4BD7DF0708674C7EE1E4956941B1C1C20208A4BE38BF780B57E8C076502D386904501E00134E87236C8458C4B2C92CA6A00DFB640C99885A3AC80F4E466635076C788B194190E94DFBE06BDF2066CE117A759CCC4AF4D865129B9708B35F2E446F2ED44BB007F67283272A317B669F69F5495668EA76037E998F236E4420C87D2378E1CECC3F972B21CA86CCC749B3A471835AF7CA65172A136530C25187C35CAF80368926D1C2397235A9ED92029B446D328E20C37AFB6165C29A4302A01427E9C590D915C1586F5C520A362015401DF167C4E650096A9AE2BC48A85CED418AF1225959874FA3015E25AB6EFD5853293265C2E3180694EBB642526622AA2C95C7C24D72A25B4042B69D3A49CB882A0EF91E25217B5A3FECA60E363C28792D66542C62F8475A6478923642B46C3A46D8136B6349C3AF08CF23DCF4C40DD0648EB9B19446B21A863D874C953113455A7AB1A0E47638D33135D7771E9AFDADFDF1A6CE341C127AA58D7A0C04536C668E499D76FC7032E26A5BBE20107AE2C52A9EFA490F1DA98A0C6DD691722CF4E4D5D864A301269C9B328D32131373F4D4D7AD4648630A192470DBC70BCC8A0DC336E87A53333144071353C982FE6C68306B9E45BF515F552363C53C7369843CDEAA443F147CC3A4CB6DAC5F5B5C03188A4603E55CD96301D2651658DB22C5550DF2CCB8389382C415515CB9A0C5771CA6452154283414C900D814E445180AA9C6C4B71A6C3224A53058C507BE438D5FD727FCE36EDFF0038EBF9063C3F2E7CADFF00748B5CCA8F20D079BDA70A1D8ABB15762AD374C55662AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AB97BE2ABB157FFD6FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8749E4AC447B652DE9347F131A77DB1557B6AC3386E9BE2AC8AE5C5C427F9A9B62AABA7B98D4027154C4C625607BF6C550579CA31C7BE2ABA08CC916E31415268087C5AD34B4E51B03F462D8134B97E51FD18B68415AA076901F0C05126A5B602A5464648097CC484653D32B6C4A963A927C7BE565B62B91FD30E3C4E218493CD1A4E532FCF2126507A969FBBA8F1198E5CB83D5FC9B6D5BAE9DF292E541ED92A18ADD683282E54026BA2C2EC39B0D8644B7443D0F4C8D782E5527222190C71AF31B641BC04C52104834EBD316F8A67142076F9E2C9305B72698AAB0B638AA323B7341B62C9CF6C7154C2DAD136DF154E560840F703014851692255F88019410DA95CF7766A08E601F1C810C9049AA5BC469EA8DBDF2B21B0228EAD1488C88E3938F872045325B15C4951591720C11C2E55455DD597B8C55DF5AB56EC98AAEF5ED88FD95F7184319206EAF2071C3D41926210735CC7140A43D77ED8B20C62FB52E4E141F6C5B137D2C92189E8C36C05B2298CAC1109C8B3B486F2EC28DCECB8ADB1A7D7218A5E25FA75C56D33B7F355A5BD393800E5B02C08B4DD3CFDA7A2D0381F4E49908D2D5F3FDB199B8C808E1B0AF7CBB1C9C6CF0B4A0F9D67BAB6BFB49B7826560A0FBE6CB14DD0EA30597E74FE7368325B6B97B7B04748A51C811E273638A7B3A2D462E12F9DA60F1BA07EE73371C9D76514887015A83C065D6E21E6B7204A40554FE1841D99A9C9D701296E28F7AF8E564AA37A0CAED5FD707FCE36FFEB3AFE41FFE6B9F2B7FDD22D733A1F48683CDED39243B15762AEC55A6E98AACC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5572F7C55762AFFFD7FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8739D15050D6994B7A56838C8A53A72DEB8AAACCDFBCF87C7154E2DE86024FDA036C551B6EBB6E37C551F1CA237523B763EF8AADBF40F1FA83ED1DF156ACE5E30D0D3962828D58E3937A5716B5748B7A1FB23A62D817CA6A287718B68528488CB15EF80A24AE5CB0C8C9012BBB4F877CADB12C8C1DC0CACB6C50EC84B1E58B0927DA3C6038206F5C849941EA7A38F526507AD36CC72E5C1EDFE4F83D39B95329939507AE9ACD1A2D3E119417371F2659A55BFA70F151DB225BE219469B190429D88CAA4E44427D6EAED3053F6720DE032686D01A6C698B604D52D1788A038A5328ED8F15DB6C5518966081B7CF1555312203418B2433E2ABE3623BD3155579F82925BA024E2AC5AFF5A8F81A380720437304BEBDB89598A49F09CAC8641266B8946E646FBF2B21B436BAB4F1FC21CFCF2B904AE3ADDCAF499BEF394B05875FBCA504E7E938AAD5F30DE29DE7A62A887F32DC471971354F4A610C648287CCB712CB4692B9260190C1AB4D31285AB45A818B30EB6E7753FC7B8AF6C5B1E81A7C451197A055DB0499DD35773908DB8DB22BC4F3ED56EE5A482BB0AE2BC4F2DBFBB732B166A11E18AF124536A2EE4297240E94CB20CE25080DECB25217600F8EF8934D9619058E9FA9F2462599BB1DE9928CF76899B67B67A56AB7118528294EC3336191C2C98ADE51F9ABE4D9A5D3EF649E127D0879A353BD333F164D9D06B70D17E7FDFAC4CD70B30FDF40E4474D86C7BE67E2C8F3DA914972492301EA50B77CCC8C9D613BABAEF4AE025B61BAB2004D3240ECCCB6F12D2A7224AAC0FC7E8CAC9558F3B76A7CB236AFEBAFFE71A8D7FE71CFF2049EA7F2E3CAA4FF00DC22D73610FA47B9A0F37B5E490EC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFD0FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF87FBA8BD4048194B7B1D95BD16A1EB8AAAC3FBC353F3C553112FA6A476C553AB12255A8EF8AAF9E321AA3B74C5549AE015F4D8EF8AAC4AD76E871414E6D7B138B5A6C801E9E18B6042DC6DF3C5B52DF50A927C701449176CFEA353B646480985DD972841A74195B63152BC1C8EC0E565B62A4D4635F0C430927FA42FEF07EBC849941EA7A0445AE51BB0EB98F272E0F7DF2E22D40194C9CA83D12CB99611F5DF6CA0B9F886CCEB4D0C38AD3E8C89E4E44597E9F0FF00A415237DB2A939116530DA8F5850641BC06490460103C31649B2C6B4C551491B6D41B62A8D446A0F871569EDCD09A6E7164817B73BED8AA1243C176ED8AA4379764065AD6A08C55874D652DCEC95381B9520D0AE08355241C890C9171F961E43464A8F97F66565B0233FC191B293C7E2ED954F932E88197C9A00E998CC12CB8F2B8B78DA5E05F8761DF156297F6621AD206DBBD31563176EC6328B0B29AF5C218C90964D289B743D724C0335D3999E52A548F8716619DE89680B863D716C6573968D2918DFF6A980A4A4924C4F20FB7BE4516C475754653C37AD6B8ADBCDEE74C92791A83A9C56D42CFCB5732CDC1622E09EB4CB22764893D3347F216E924D1F1EFB8FECC848A99BD2EC7CA9630AA82AAC7AE40163C4CA6DF4AB5800E2829F2CCA84940619F99FE5A1A8F937549EDE1065F4986C3C01CCFC52D9D36BA1BBF1A35FD2CD96A5A84338E327ACDC54FF00AC7363864F27AD0C6648CC52943D466C205D213BAF4C9B978BBD156E393D0E36CA489BB4E2A3B57204A1219A52B5C892A8749F91A57A6564A1FD7F7FCE346FFF0038E3FF0038FE7C7F2DBCA9FF00747B5CD9E3FA47B9A4F37B6E4D0EC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFD1FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88FE09E89206F986265C86217D18790FE1928CAD5640FE91DF2684C42ACA093B8C2A9DE95F01A1FB3E18AA6578547D8D81EB91B4A41229E7CB2064847C0EA29CB718612B2829FC7E888EAA37F1CBA835A26DDD016277DB225B0284E19CD17A65664DA103242114B30EBD30192D5AAE9FFDE644C9908B241CE489D4EE00E982D980C4F50B52AC59453DF06CD8024EBC91B89EF9125B238C1E6C93493FBD51DB2B914F000F5FD094ACC9C45052A731E45B601EE3E5621A401B7AE504B9B08BD5ECA14AAB22D189EB98B3951765860299FE9502D15996AD90E22DE22199E9F6D1FA9EA71F8CD2A7236DB10C9E1894B82474EF8B626B144ACE7E793114A611464B713D3C325C2153A8E3000DBA0D8E0E10AAAC0A8DBEFC7842AAB0F86BED8F085B40BF5C7842DA577708E2DC0531E15B62F3E9EF2B13C490712026D1765A5246DFDDED9512BC4C892DE355A7015A656496C125C88A29F08CAC96F8C95C01D29D72B2CEDC638DBED2D722634B4A0F676EC0D23049ED9548522987EABA7C6C5FF74BF2A0CA49626DE75A8E99C8B462314AF4A61848DEE903BD278F4708F511EF5CBEC32E109FDA69C435553E223AE3B278598E9903C34EC3BE1B09A4E652163241F88F5C8C9B211058B5DFED6FD6B9149800C6258DA4675AD47718B510A967A6C4CFF147518B512CE74AD3ECADD59961018904138AC4B2B49232B420500F9603BA69689A388D176AEFD71A452256FA9FB59206992716CF16A9A65E69B3012452C6FCA33DFE1399FA736EA759B97E31FE70E94BA6FE656B564578DAA3B3431781A939B9D3879AD6403C655A49EB34E794A5882DD36068336511B3A1C9000AA00074DB2B9158121176E55483DFBE52665CB8C6C29DF5C301B361E22A62C6E6766AF235C9B02104B38434069878583FB10FF9C653CBFE71BBFE71F1BC7F2D7CA67FEE4F6B9B087D23DCD079BDBF248762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFD2FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88D8DAB09F719801BD8DDC8A4849EC77CB2294B5C736AA9CB1531B69285636FDADB0A19143FBB5AD7A60554F53D45627B602942BA77F0CA8A143D4DC01E38C0D154FE02C621E19719288A362069F3CACC9B045308E2046FF007E5664D822A7731064000E991253C2A7A7DB7EF3A64789908B2BB5B6AF30456B8F1331143EA7A627A65A831E26C1160A6CF94D41DB6C04B6C62CA746D3099936AF8E5722A43DA746D302F134DC65132CE01E9BE5C88ADC5076398F22E7630F63D1A20F22A1F1CC69F376388507A3D9C3C19401F4641B87366D610D29B6F8B6C53A4401C7862CD31B789CB123A65A392A610C3273C2AC8228C71507AD3155EF18A53BE2AD32EDFC715413AEF8AA19A307AFD38AB696D19EC36C0555BD140360065549010B22D180F7C810C8158401F3CAC86624B3991B9391E16C8C9DEB0C4C5B4168DC8405ABD3299452C72F6F1199878E6398A6AD875ECAA5C90054E400A4F0D2053E371B77C3C48643656C6B5A6D4DB1E254E12260BB63C4AB5A195C30F0C902DB89239AD253CBF56499C9237B57491B6A16C5A24995AC0C083DF16892730C8D1EC72405A225182E881D70F0B2B51376A49E477C7856D512ED36DFDB1E15B649A15D1127C3FEEC0CB4FA0E6660D9D6EAB72FCAFF00F9C90B196DBF342F66238A4AC493F7E6E74E5E73561F394A156460BF66B9B2076745946EA7FC72A996B886BD42A72AE6E643925D7331634C980892493DCFDA51DB6C980C4A56CE49D8E4C06A7F645FF38C1FFACD3FF38F1FF9ACFCA5FF00746B4CCD8F20D079BDCF248762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFD3FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88D880E040E87B66006F492FA2F88803AE5914A1C5B7186BC7E2F1CB108781585C46CDBAA9C2ACB15E3684803738154955A35663F6476C05285594BC9C6B55AF4CA8A157D052E2837C8F567109CDB3AA808D8993688A6B0C44B0A7D93DB2064D8229EFA01635A2D09CACC9B0456081581F86A720649E15D6F6AC1C7A6BC71E26422C9AC6D242D535A63C4CC4532BFD3CBC068B534C789988B036D34C731F82849C789B04597E8765C654257204B121EB9648B18400509198F32CE019C688A82652A286BB9CA497371F27B068CA81D582D0F8E5122E7E3E4CF6CCF29D2BD3C322DA39B36B4AF3F84D17B62DB14D56A5B03364368E811011BD284E5D1E4A9B200402A389F1C2A8F49102AEDBD3738AAE3221EA31543927715DBB62A82949036C550F473FB471556457A801A82BB9F6C555E458A31549BD4F639021925B35DB80CA2DD189E8DE190216D45EFA38AD889621EA53EDF7C810C4C92A4BB8DA29A46958B28F8129D72206EB19A0D2EA607D53C9D3F9299618B68CADB5ECB7069E87A71D3E2343944E0DB1C9691DD7EF83F01C58577198F28B609B1B78A560C492483F6B299C68365DA2ACEDDCC82BBE55C28675676A0AA80BF1531E154D52C588E98F0AAE5B1707A75D8E4A21B71A12EF4F2A84AAD0F8E58CE4C4E6B26939A96E2F5F84E2D1256787D2B16319E52C42AD20F018B449E6F79F9A5E52B099ACF51BD4B6B984F16151BE5916B2692D93F387C822A1B5B2BF223254BC4BED3F363F2FAE24A0D6D9B7DEB4C697899345E73F28DE11F53D5D2A7A02C31A5E2665E5DD574C9264F4F555256A428208DF2FC45C2D46EF833FE7278423F31E36DA482653507A13439B7D39741AB8BE3F6565BCB84635556345EC01CD903B3A2CA374422214625457B65536B8849677605E86832500E4C521B8B97527E3CB00625262EEECC791DCD7260312B94E4C06A7F64DFF0038C1FF00ACD3FF0038F1FF009ACFCA5FF746B4CCA8F2683CDEE7850EC55D8ABB155AE683E9C554F97B62AEE5ED8ABB97B62AEE5ED8ABB97B62AEE5ED8ABB97B62ABB15762AEC55D8ABB15762AB97BE2ABB157FFFD4FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88BB53C866006F5971082E0D3BE5914A16E00488FCB2C42550D19E83AD76C2A98DBC844BC3DFA6054E2E29F56603BD3014A4515564CA8F3423C5C0420F7A65726DC7CD745704B8232B25C9AB6490DEA22A6E2B5CAC96C8C593433ACB1AEF9025B04535B4B70E188A1DB20649E14FAC6C55985464789970B281A7848C328C3C4D9108EB6D3DA78DAA2BB63C4CC063B71A3137205325129AA4EACB4A68DD6829824C4866305B32B2023B663C8B38B35D1A03EAA6D9492E6630F56B106109951E6E6C59D69DF100D81B073673A6FC4AA69D7BE2DB14E917E3C59A7D6B6C48461D0EF96C792A751A711BE155C57DF157703E38AB5F4E2A849BA62A82798462BBD71541B6A616B5AE2AC7F51F31D9C1192CC63A77C910D8C02F7F30F4BB763CB520A57AA93FD99590C0B179FF003C3CB167270BABC593DABFD99590D04A47A97FCE48793ED2A91852C47C27DFEEC111BB59953CAB56FF009CAA82DEE78DAC21A3AD1401FD99710C2390DA5F27FCE4A6BFA821FA8D89E0C09E407F665120DF1C858D45FF00391BAEDAFAED776C556BDC7F6663C839519BE91FC9EF3EBFE61426231805D4B961ED954837C256FA2AC7437AA9E3F4655C0DCC9EDB4C78CD48C3C0A9DC160481515C1C2AACFA79A834EF8914DD8D0379A79E1F7E06526177962A03963C585787BE2D1248D61963B1D453ABCB1B08FE74DB16893F32BF313F293CFDA8F9AB50BE8209A5B79A4668F8F402A7DF32314801C9A64C462FCACF385B6D73A4CF2D3BF13FD725B215D7F2EBCDF34CB1D9E893C751BB713D7EFC7657A0F977F243F30A7991E4967B343BD09A7F1C695F5FFE597E526B1A5DBC6DA96A0F34CAF5662D5D89E9D7251E6D1946CF1DFF009CCDF253680DA3EB11356474EBDFA1CDAE9CBA0D587E7F593C9373965D9DBAD73640ECE8B28DD16A7E07F1ED954DAE218BDCDC0124895E8694CBB1F26F88D9239EAE4E5A031921F8D065803595226876EB9301ADFD94FF00CE2FFF00EB347FCE3BFF00E6B2F297FDD1AD32F1C9A0F37BA6143B15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD5FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88D8294F845330037B52D4B29AF7CB2294AAF6BB8CB152D8D5830A547CB0B13C930854870DBD7C72122C2253953585ABBE54496C4A1BFBC6F9E441552641238567283AD7F86322299E306D98F967CADABF98AEE2B5B3B62C8C69EA01DB31CC9D8E385BEDAF227FCE2EC17515B5D6B32155900A293FB5BFBE5129B9F8F102F43D57FE716EDA2B988E9CF5403EC76FF89663CA65BBC10F25F35FE476B9E5FB932C687D193E1555ED4FA72066C7C10F3E5D0750B0B8F4E5571C4D0D7009A462A6616D632491014AF11BE59C4CFC20BCD9DC4428B551ED931309F0D012DB49CD59C50F8E094BB94C02636B1134F1C8711699C53368A452A791E9B60B6BA65DA0C94750C706CE442DEA763229E15DF289F3765879334D35C55476F0C8B7B3EB023E103618AA7D18AB0DB02DB27B16F8554F6197479330980DDC006A3C30A551862AAB18046E31545718986C82B4C585A57716ACD5E228322B691CDA75D716F8493BD32B2516F3FD674BD4DCBA4523A73040A1E99124A5E3BAE7E4DF9C35F467835BBB8977AAABD3F8E4F88A402F1CD4BFE71BFCE6F3D06AD732B576ABF5F9EF82D9D16357DFF38C5E757A97919DFF0098FF00B78B218D8A5C7FCE3179D43F22BCCAF4AFFB78F2639310E1427FD0B379CC48ACF6EBB1EE3FB720723891C459FF00973F203CD715C436F39F4A0604391B536F9E4253722185E97A27FCE37581BC59757B812AF2ABC2C6A0EFE15CA8CDCA8627D4BE51F22F97BCA10C49A3D9C5048ABC4B462808EFDF2A9CB67271E3A2F52B68AA828287C72102DE629D5BD9B4AA07877CB835909BC569E9815CAE4C0AAB428C0D08F837CA81B402424B733060D18415E95C2DC0B0ED474F6A973B835A0F0C5B0C424F1C216A196B4C5A6710105736314EDCC205E1B103BE0B21C59C2F9249756B69103CE352464F88B5F865298A6B78A5A450278D699602BE19661653F35154070DAF8659369F7D0DA144745FF4821547BE46CDACA1B6EC37FE7263C99179DFF2D64586D926BCB088C826A55C0E2C7AD7365A693A4D5C03F119A136BA9CF6922F131C8D191EEA48FE19B8C727439318B5194888DD21D890787B6DDB26402B080616EB44AB6EE6BC98F5C9844A21047ED1CB034C821DBBFD3930D12438DC9AE58D25FD957FCE2FFF00EB347FCE3BFF00E6B2F297FDD1AD32F1C9A4F37B9E143B15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD6FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF889B535CC00DEAF28EF9645528BA1C8E58AA10C60B8AE2A5181789C045B590982FF7669E191314829431FDE36532D9BE22D52D2C9F52BE82D233467351F466365C941CCC18ACBF49BF21FC950E9D6105EDCDB2BD003C88F9E611CAEDB1617D71FE2ED0B4B8E21385E286813C0E512C8EC71E057B7FCCAD0EF6EE386270A76037CA2591BCE165F7369A4EAD6CF2CC527122FC209AD32BF111E03C475DFCB0B2D424966B78946E69B63E22F80F329BF2DEE609654856A17ED532D195071525571E49BB86BCD0ED93191071A437BE567442CEB4206DB6113B6AC90628BA7345395F7E98789C5945329ADB8462BD69D71B6BE156D224E33818F137462F48B49887515EC32B917618850679A4C84B2FBE06D7A3E9CDBAD76C5594DB8E4C3154E6D5C89197C32D1C9984DE13571852886FE38AAAC7D3154C228BBF638A6959A21DC74C82D21999882380CAD692C9ECFD53BA0A9DABE1919288EEE8ADE6B65F4924EA29838DC8F0D092DACA8793C8013D1BC31E36631A5773F003CAF01FA4E3C4D831B1E96F2047DEE86DEE72139ECCBC2B496EF568492A9722A7E798A7228D3282B5C489EAC373561D1413959C8DD1D3A274EB7964B80D2C859ABB2E40E46E1829E8D6914CC1226B6E117FBF48C8F1DB2963A65B6D6E11176AED96C0B5109D4238A82075CBAD810ACFCB8E5732D6425CED22568763D72B896043A38A39012454F8E49B6297DC5AF21257A0FB38B7249FA3958B6DF4E2D3916C1A423ACBCBB1DB22538B1F131ED53CBE8FCA87AE20B6F82C364D0258A60231C93A93938C97C047C505C5BAF43B6596BE026B6B0C976D645BED452127E583AB899B1D3D3AD2DC6ABA76B1A6CC39ACF6C63507DD48FE399D84D3A3D5C2DF87DF9F7E50FF0003F9EB50B20BC6970CF4A7F3B31CDB6296CE872E3A2F1CD4855D641FB4BBE650DDC7E4C4AE362C3C32C6322969FB67241A64876EFF004E581C7921C753963497F655FF0038BFFF00ACD1FF0038EFFF009ACBCA5FF746B4CBC72692F73C28762AEC55D8AAC7E9F4E2AA58ABB15762AEC55D8ABB15762AA98ABB15762AEC55D8ABB155CBDF155D8ABFFFD7FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF889B360BD730037A3E4A1E9DB2C8A529BB42C76CB10A50AF165A8A625211B55C622D8494E52786C77A8C998ECD60EE83BCF8AE9388A506F4CC2CFB39F845BD1FF2CB493A96BD68047CB8CAA6B4ED5CD5E59DBB7D3E3DDFA93A3D8B69DA6DABA0F4D1211555D8663176D8A2F2BD72D751D7353962B3321084B1504D32893B1C71D952DBCBBABE9EA26657046F5EF98F26FE009EE8DE78D5B41BD1CCC9344D45911892001DE99595107B868DE79D1B5B31AC92FA5310014069BE36930658D6A8E1DD40E128F81BC72C69945299F4A421AAA0D7C46581A0B0DD574359012117A1ED9312A6A9C5E51A9E83C2524201BF618789C69C58F5D69DC410476C789AB85274B5E126DF0D0F518F137C22CBB4752028356DFA9C376E5C0507A4E974053B7F98C2C9E83A6CA15803DA98AB288E7008A62A9AC2E480C3BF5CB63C998E49A42E69D4E14A395BA62AACADEFB62A9BDA5D536206D8B35F7373CA945A5720B4840ACDD09CACAD221232BD6BF3C84CA62375D2AF53D0E637139A12B9622FF0D49E5B6F8789B404A2EB492CA69DB071338B1A9BCBCCEE47106BED919CB66D88DD47FC2E3FDF43EECC4B6F115787CB8D1C8A40200ED902590A661A6E841543155A8F6CA8A788271E97A478D6A3C3082899B08E801D854E5F02E3109AA82A0153990C4869A471EF954CB590A2D2B32B0200C840DB54C25A4B89050903C32D6714C963F5A3DCD0A8DB16E4B64B295492010B5C5A72289825D8455A7ED655334DDA734BBEA32CA28687E782DC9E2583494460B201C9B71F2CB014F10448D060906EA3EEC9028E25F1796914F258FE9196C5C4CC2D36B6B45B53B2B03DC8EF97E39EEE9F518DF9A7FF0039C1E5223518FCCD15B8F4EE295217F9797539B2C32743A8C6FCE1BE9B8832EE55968066CF13AB9ECC50124B549CB4B594249D4E48354940F4CB038F2511D4E58D25FD957FCE2FFF00EB347FCE3BFF00E6B2F297FDD1AD32F1C9A4BDCF0A1D8ABB15762AB1FA7D38AA962AEC55D8ABB15762AEC55D8AAA62AEC55D8ABB15762AEC5572F7C55762AFFFD0FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88089A86B9801BD338CD40F1CB22969E30C32C420D8713B6291CD6D4E4A00B1C8B58D46E69979AA681CD40FC7331F019ABD4BB4D353E9EFF009C74D21751D692A952B535A78669C9DDDDE101FA397F6CB6DA3D360563A01DF2120ECB0B7F96FE5B8F503777862ABD08AB0EDBF88CA661D96309BF99F4A3043246918E9D8663C8373C0752D0F50796436F096321A37C35DBEECAE99458DCB65AAF96E48EF4A4B50C0D02B78FCB101127D05E48F375D6BB6612E418CDA850BCB626B4F1CB0071E6CFEE66658C7BE594E34C149A525D1AA3AE46450030AD4EC83B31A6F91DDAA51613A958D0F4A6DD71DDA845864B6A56423EFC6CB7C629EE92854283D6B9747937067DA79A32E4959BE9FBB8FA31564A83718153C85A8A9F2DB2D076660A6B136DBE1B4A354EC3F1C2AAEA4D3154742E148AF862DC119556C8324C6DE256A74DB2B28559630B95CF92421D979661B900A87A7BF4C0CE25B30F2ED8B60696C4160481B74C05B224DAAFD487F2D7E8CACC5B812EFA90F0032042D9575FDD0E23E9CAC861C454DE124FA9D7DB214CA3225673F4CF4CB62C885C353111AB6E3A65CD65506A91C9DB2120C0B6F771D36DABD7238F9B44D0E675AD69972628BB797D571C7609D716F64B58A587871DE98B4CC162B7F21D31F8769872194E45C7612F87519A46A274F6C886EE229B44E646066D9874F96482F116416C22E23A64D788A756F2AAC4151030AF5CC989D98917BAA344D37488610E0E78BE6AFF009C9CFCBF4F347E5EEA73BC5FBCD3E2661B54FD963E199D824E83541F83FAA5A1856F216D9ADA5650A7AECC7B66EB09D9D0E6D8B0FEA58E5E5AC1D9072F7DF2516B9287ECF5ED96071E4A2A773963490FECABFE717FFF0059A3FE71DFFF00359794BFEE8D69978E4D279BDCF0A1D8ABB15762AB1FA7D38AA962AEC55D8ABB15762AEC55D8AAA62AEC55D8ABB15762AEC5572F7C55762AFF00FFD1FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF87EB35F7CC572138A74DB2415A634196054B67900E44E487355B1CE38D2B96EC8282B9AB74F1CA665880A912F22CBDE99ABCE5CCC5B3EEAFF9C4EB113DD988815E25AB4DF6CD69767A626DF647999435D5A5BAB1D880403FC32B93BDD3F37B97962CD6D34832280ACD0EF414CA245DC621B30AD5A77B849A302A6A77CA2459494B4AD209812478C115DC951FD32316A1CD3AD5F49D15B4D91DCC3EAAA134655EB4F964993E64BFF300D235631DB30085C8F82806C7DB1453D5F45D7E4D52D54D6A683F56147084DE0BB3C9C4B4DB619645A728A49EE7799DFB1E992A68A627A944199EBD4EF8D2D30A9AD944BF3C6928AB440B28A61566BA79A30C559A58BFC43E8AE2A9F46FF10C55388EE00551E191BDD04A3A3BAA8EB8414A363B91B6FF003CB1B02312E47CE993661328DEB43E3DB16E099C4E38FF000C82A2606A656528D2A5C0A75C84D5BF4CE6310DA1A2877C890DB169537E99590E405754DC572239B656C98C511A74AE4E419C10D7111A1F7CA64E4001085780DFE9CC793090097CD7263A953F17860873681CD26B8D4E58EB5A6F97AC92A7BD9A405877E9938B4C9AB7BC9D09CB29A095433DDC8E4AD7010D68F82EEE0515D6BEF819C5368272159E9C69DF16F82223F307A4425457A62DD1016DF39D5F871FB4A28299092C804A6386EB4B928C84A9EE722C53D86EA3640CFF0068E2A98DBCF0D462A9EC13D221C3ECD76CCBC5C94A6B67744115CB1C2CE16F9AB4B1E63F2E6A1A4900FD7A090014FF00248CC9C45D06AE0FE76FF3A3CA4FE54FCC6D7347652AA9348C05283AB1F6CD96293CFE68EEF03BA6FDE483A10732E25A2B648E7152773BE5C1C69F35315000AE6445A96E5A036C407F661FF38BBFFACCFF00F38EDFF9AC7CA3FF00746B4CB43833FA8FBDEEB8B1762AEC55D8AAC7E9F4E2AA58ABB15762AEC55D8ABB15762AA98ABB15762AEC55D8ABB155CBDF155D8ABFFFD2FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF884B31D2B98AE426E47C3920A8694EDB6F9605482ED982BD01AF864952E86670D435F961B414D50730396D909A0370370B8907B7539AECCE5637DD7FF388F76A359642E05617A0AF7CD74C53B4D3737DAD359B5DEB30730410C280E63C9DEE9F9BD5EE3513A558B2745F4F8E5327718B9304B6D4629D679188EA69BE63C99496DDF9DEDB46B231B952D355547707C72316A1CDE15E63F38EA77F2C896933047A8A2939364C22DF48D42E6669E7E72173553D7157A56853DCE9A1622080682A715672D70DE9A3AB862FB900D72D838F991729E56E186EC7A81D726D2905FC25CA9FF277C558B5CDA9049A6D8AA95AA71931565567B32EF8AB2BB37A11BEDDCE2A9E46FF0010A9C55358CD40DF21D58946C792641191E58D811B1D6993661368998003C316F4D6273415E990423918D4532B294EED8065DF6F0C849513C465242789A2828720437464B553C7AE4087263255A002B4E9910376CB454520E3D69ED864DD0536219C0EA3C7289736F082BB1C50D3AF8E63C98C986DE4AC3950EE0E087368EAC3758BA99281493F2CBD125897130B346FDA66A11938B4C9111C92B15A6FEC32C0E396596B6D298D0AA924F51896B45C92C36A959402E3AAF7C8B6458E5FF99A0A18E21E9F0AF3AED8B7C5875C7984090BF30057662716F8A79A379A8C328726A95EBDB2052433C9FCC16DA94694515EE46458F0B514913505413E0315E14EED0C408E5F0FCF6C53C29D2CD1A2715229D46F97E33B302AD6F78A1BA81F4E4F89AA70B09B5AEA9CAE91030658C153FECB327149D36AF13F22FF00E7387C9B168FE686F3446800BE6259C0DAA6BDF3618E4F37A8C745F9A7786B7136D4F8B3638DD7C85256E09ED9787167CD408A66445A9665A1BA2FECC3FE7177FF00599FFE71DBFF00358F947FEE8D6996B813FA8FBDEEB8B1762AEC55D8AAC7E9F4E2AA58ABB15762AEC55D8ABB15762AA98ABB15762AEC55D8ABB155CBDF155D8ABFFFD3FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF884B33D37AE62B909B337C24788C2150E57E1396854A665FDE0C4AA4F29A4D5F7C802828E0F545DFC36C24A02E97EDB53C33132072B13EABFF009C5AD5E3B7F345BC6ED40411BF8D735F986CED34BCDFA88F12B6A36578375E20D730A4EF74FCD11E719DCE8F2CD16E6BC49CA64EE317278326AB710C14E5BF2E998F26526317AF79AA5F3210480A29918F36A1CD97683E45BBB86599E33C4D0D48C9B27A641E5FB0D360637340C47C18AB1BBFB6B494B7A43A74C550FA4A869DA222841A0CB60E3E6667058D09A8EBBE4DA503358061257F9B154A27D257D36FE98AA4034E546229DFAE2A9D5B5B22815C5536854290A3A0A62A9E47D302A2524A151E191EAC4A670CC7EFC90649847374CB1B022D26AE4D984E6396A06FB5316F098C6D5A64109A44C2A32B294D216A50D76AE4648298FAAA76C890805BE55CAC86D896F9656439112E26A322DD12A65C0EFF003C8C9C9C6D7D657A65126F086BA9818CF8E63C98C983EA32F10EC3C7A6087368EAC1AF2F19A4A7865E8936B7C562A1DF261A648ED37518849CA4DA996071E48ED7BF31F4AF2D69F25D4AEA0A834AFB62583E6AD6FF00E7226C2732CF030660C40A1FECC8B38A3BCB7E7A8FCCF6F73717527A224A7A5BD2B8B7C53237D1CC5E2AF348F7AE2DF1627A87E63C76529B0869198F6A0EF902D8032DF2B79D6FEEDC0E478B7BE4534F6FD0F5096499096DCE2B4F4225E5E1F175C5691261936A4DC76E95C9034D13E6EF425FF968FC71E26C10B08CB698D9D02B739240791AE64E29381AAC3B3E3CFF009CDAD163D5FF002CA3BF02B25A30634EBB54E6C71CDE57578F77E2BCF2195DE43FB44FE1B66DB0F27479051428EA3E79921C39A1E41B9F9E6445A90A577CB83745FD98FF00CE2EFF00EB337FCE3B7FE6B1F28FFDD1AD32C7027F51F7BDD7162EC55D8ABB1558FD3E9C554B15762AEC55D8ABB15762AEC555315762AEC55D8ABB15762AB97BE2ABB157FFD4FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF87DB371502A2B98B4DF69C13D01C90554E3B7D19312094A275F8FF005609482B1EB8DA6F964225055E3625900049F0C9A014D110167327C238EC4FCB31F240B938E41EA3F935A8FE8AF31DB4AB2846332802BD413D7303340D3B3D2C85BF5FF4FBEFAC6876376AC1C7A43E319AF90A77DA722D34B906FF00CB573DDC3120663C8BB9C4367CFB35ACCF70B0202CDCF751D466392999A7A8E81E5AB7F53D69286408A48F0C62D319025EA16D3456B0085221D280E499DA4B7BA7C9A99268691EF418DA5E5DE60BA83439191E550D5FB24EF82D52DD0754FAE6A30B28E20FE396C0868CA1EC8564540C632011B31193B684ADC1624914DF738ADA94F1A985A8C09A614816C6CDB92C4D3BE282295046CBD01C55150EC77FC7154F22208EB8AAB2005AB9162533840A75C21923E351B64DB0146C69B64EC3208A89CF2A5698DB784EA17D86F90B54D616AD28722529AC6F414272242AA2CC01153898B0E0368F4DC546FF002C818B6C415F46F7CACC4B9116B953A9A7CF20634D91284B89000486195483978C84A4DC7C62AD4F7CA241C805B966AA1DFB65120C64C33569F843235413D86463CDA3917973DEF2BA615AEFD32FB6264159AF9A12ECC85815D864E2D5229249E6048924DC230AD01EB9686821F337E6C6A3ADEBF6F1D8D8A4A07A8DCD97B838086145E59E5AFCABD62E21ADDBBAF26E546FA0F8E459C43E91F2CF96E2D234B68AE18C92C207A2ABB9F7C69BA3B2AEA725EDB594AF65138918100537C5B8178FE9DE5BD66FF547BABE57ABBD547B64241B4483E92F2CE8A6CE18A886A06E70527883D934189F9AB73E86871A5E20F4069278F8904D3C7052F105C6ED89AB392DED80DB44B9B5F5BFF29B23BB91090554BE113C4C5AAA55AB5EDF3CC9C4D3A88D8D9E47F9E9A41F30FE5579801AC92C51B32C23AD02935A66C71BCAEB31905F8377711867B8848A18A46047FB239BAC3F4BCCE7152418076DBBE65C5C19858EBB9DB2F8B4A1580CB04806E8BFB2CFF9C5EFFD667FF9C76FFCD63E51FF00BA35A65A393813FA8FBDEE9858BB15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD5FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF874B265328CA593246507853C72259C513C07139596D0935D28562721D5279311BC929375CBA1C9A24BE0B90268E872F8F26013B9650F1EE72126FC68DD12FDAC351B5B98DB8B472015F6CC2CE36761A73BBF5CBF267CCA9AFF966D6D24903148C0A66AB287A1D2C9EF3A5AA3C9FA30AF10FBD735D91E8714B6615AEF96C695E6084C43E0998548F7CA29A739B7B3E89E598CC6B3247EA19D0034DE996403878B9B2EFF095959C5F5ABB70AA054A9C910E482F39F3AF9B340D26C192C028B85560E57B900D32B21982F8EB53D425F345F4CD2A91463C09F9E565B014C740B2D46CEEC39AF18D870F964E0C66FA4B4DB8379651ACB27C400D8E5B17166956A21E262886AA456B9634F54B2332383B6581C8835E9301B8DF0144D690475C0C694FF6CE2B48F85C01F2C569188D520D698AD2650B50628A4D633D314D23636DBE58A8B6D1C73A62E60E49A44FD37EF8A53BB6906D8AA64241B6298F36CB0241CB9C9149B5ACC1471AD2BB656BB2600823AE40ADA1A7038B37865534DA493C828731CB740A4B3C94AD3AE51272E054DAE1BD322BDB2892C8B17BEFDE73E7D32B71E658826968D7264A7535C21A2D327D2BD40401D475CC88AA42FE528A69099146F99015747E43B157E7243EA03D0787E38C92194DAF9574C8900FAA8DBDB20C9CFE5AD3CCA812D40F1DB154F57C91A75C45536C3953C3FB714A4375F9736C2559628F804EBFE75C8948445AF97520223A74C0A9FDBE962CF7036AD4E2A9DA32BC746C550727A49B03912CFA2025B845DAA3DB20D40EE827B9574702868466463E4E55EC93F9C6E3D6F27F986253F11B4947FC21CD962745AE2377E0879810C7ADEAA87AACEFFF001239B6C3C9E3B55F594A17F8E67637026B24077FD796171D02EBBE5526E0FECABFE717BFF599FF00E71DBFF358F947FEE8D6999D0FA47B9D7E4FA8FBDEE99260EC55D8ABB1558FD3E9C554B15762AEC55D8ABB15762AEC555315762AEC55D8ABB15762AB97BE2ABB157FFFD6FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF861D3DE432034DBC72964CB565278537DF2259C51C6600152C2BE19516D093DDB13CBDF23D5279308D403ACA3623C32E8726892193D65742548F039911E4C03258F9B415E276CAE4DF8D49039755A94A1AD7E5989945873B0BEE7FF9C71F39AD95CC3652DE0EC3893F3CD7658BBAD34E8BF49F4D9C4C12F512944AAC9E39AEC90779872A6B75045AA442EA420CF17D95EFB653C2CF24AD9FF94B596B3B6953D1FAC49C6853BA8F1C9014D111458679F7CD173E94886630F20691FDF890DC0BE62BB6B9D42E984E8E6366F858F7A9C810CC1645A779360216644E04EF9510CC1640DA298978C49CDA9BD30C42C98F1D46F6C2F56DDB946A4F4CB22E3CDE84B492C83BB0666DF2D69EA81876276DB261C88372321620900D3A602C8A0E414DFB604521F73B8FBF15A5652C3A0C5691F1F2A2FEBC56933849A5295C569348C9D85715A46AB506FF004E290162960DD3E9C5BC724C627A002B4F1C529DDB38DA8698AA6AA4F615C5239ABA1EE72E6DB541280CA396F5DB2056D324B903E127E2CAD6D7CF23189FC29D72A9A82C7AE255E81B7F0CC72DF0293DC39505A9D3289B95028069DE9D0D3C7289A494AAE999D08A6F5DF2B699157B5B55600D37C21A93AB6B3ABD38D76DF3222AAB3D8AEC547CF3202A360B3429B10580F881C64C8223EAE9F6792FCB20C913069A240EC08057ECE2AEE735BBF02E062A8EE64C4C18862DD32254242E8166AB0A6F812A978C161AFE38AA412DD98E062AD52062AC4DB54B862C0D46E72126CE88492FE43B16A6443472288B5B8E714A7957A664636F32F4A035894C9A16BEA4D57EAD257FE04E6CB13A0D74DF86DE6D503CCFAE85DC0B96A7DE736D8793C9EA0DC98F053E199D8DC19B9CAD3AEF96171D06E2A76CAA4DC1FD92FF00CE2FFF00EB347FCE3BFF00E6B2F297FDD1AD333A1F48F73AFC9F51F7BDCF24C1D8ABB15762AB1FA7D38AA962AEC55D8ABB15762AEC55D8AAA62AEC55D8ABB15762AEC5572F7C55762AFF00FFD7FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF85DD35C96DF2964CB6023E1F9E44B20BA47FDE1DFBE5526E081BC7A2935E8323D527930FD45CB4887BE5D0E4D1253673CE1073223C9806516854C237CAE4DF8D12618E343336FDB31E4E66366BE45D767D175482E623455606BF7E61E58BB1C137EB17E5579EA1D734AB485E60D23280457E7EF9ADC917738723DF2D678ECAE638E75062946C7B6F94F0B9B1DD1535D496978CF6BF0C53281B63C283B21750D223D6007B800D7C7224282803E4ED387A4428AAE4086C05192E8F15BC5C621B814C810CC1632F697AB3858A22EA7A90322366576C7353F2BDE5CDCA4E632287241A26C820B0921B658DF7232D691CD4A5B431C6C476C9872209210DC8961BE02D94A72313B605E15200814C5695D6BBE2B48D4278A8F6C578531B76E9B62BC29B420938AD261E9B1FA714D2F119FA462D815D63DE98A53680D0818AA6F149414EB8AAE6980D89CB99F12D5605948EC6B5CACAF12A7D6292EE77C815E245CD755888F11954D416352CE7D43ED98E5BA086B89B92F1F1CA66E5C4A5D24C146E731E4A4A57713165F8776AE56D5229B69DCDA95C218B2AB5421AA4F514CC88AA37EAE5F71D33202A8C917A2373C6BB63264103FBB06A64A78E4192610DD451A37192BE3BE2A96DC319E4E4B21A0C551714AF1B202D514C894847CBE93A87D8918158F6AB72681074A74C55894D73C636538AB16B9999559972326D1F4A4C2EE477A1AD322E393BA716F70638580EAC4664636523B286BB2341E5FD79D8F10D6B21DFFD439B1C4F39AF93F11BCC8E24F30EB0E0D435C3107E939B5C3C9E6729B293667637126A2CB5AE5A5C7502BBE5526E0FEC8BFE7183FF0059A7FE71E3FF00359794BFEE8D6999D0FA47B9D7E4FA8FBDEE79260EC55D8ABB1558FD3E9C554B15762AEC55D8ABB15762AEC555315762AEC55D8ABB15762AB97BE2ABB157FFD0FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF85EB109D5771E394B24EE19497451D3950E44B208D724C840F1CAA4DC1037B50A4378647AA4F263B7B18AC6C72E872689206EC51A2653D32F8F26B08F82E48A440FEF295E39093918D3FB23F595759AA225EA7FCAED94172E299412FD5A2223FB75F8328C9172B1CA9F48FE507E663685756D0DE5D985C90B1A13B577F7CD7648D3B4C3983F4F342F325A6BDA35B5C3DC235D7006300824FE398C767698B202C860D46692358E54A18B704E0B05BA62D35B6BD77DBA0C890C63128A79D8107964086D102AC932B00246DBB9C898ADD2296EE2B643E8C425E5BB31ED95914CE3BA167D4A2991B946108F6C431940B13BCBC049111AD32624D3E19B4ABEB13382AC2993130DD114974E3892186F8DDB6092041DCD46D8AF12E6EA4D36F1C57897091456A715E2565993615C578C2656CEA69EF8AF104EEDA4407738A6C27B132151BE295540189A62CD1023351B7D38AA24232D0914C55148DD29D31559373AEC32DB544DB9A0F8BE9C812869C7C7C874F1CAC94B6F229000395CCDA84AA68DB996A6DDCE63B7C36414CE95A577CA66E540A45792D09DEA331E6C88B41C2FCE4006E7C32B6B9448DD9259C81283A64C45AF8939FAD3715E0475DF2E0BC4135B7BD2A9566CBC49788295C6A1137DA3CA9D4612CE26D8F5F6A9044A5AAAB4DF761FD723C2CE982EA5E7AB3B105566524D796E36FC71E15A63C9F9AB6B1D47A8A5BE63FAE34B4A4DF9AE92238128592BFBB507AFE39190544695F99324B308EE25A027615FEDC8D26DE956DA8C1A8C0662D56E831A5B63BA93FC7C23A927B531A543456723C3FBD4A313F86464D8262A90ADA70462426F91693024ECB5ADCAA0929448D8733E19763906194F0879FFE736BA343F26EA571EA7A69776AE96EDFCCC54803EFCD86298797D76404BF1AE617524D2CB74BC6791D9A415AFED1CDBE290AD9D1CE24EEA7C18F419990C81C498A5AE8C06E2872EE305C7A52E058ECB5CACEEDC1FD8DFF00CE308A7FCE35FF00CE3C8F0FCB3F290FFB935AE67C3E91EE75D93EA3EF7B964983B15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFD1FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF85BD3BEC652C938B6FEF53FD6C89641399500ABE5526E090DF3B32B11D40C8F549E4C7AFDE4E31FE397439344905217668C78E644793584C2C406BA27F9475CAE4E4637A6796B49FAFD95DBA0E455AB94D5B951E4C7EF266B5BC6B775A50D304A2CC4D7C26EBD7496194C7E97C48D5EF985931B918B23EA0FCA5FCDFD5B48BEB6B6D4EF19AD9481F131A537F139833C4EDB06601FA51E59F3FF9775DB2B764950C8CA3910457F5E53C1C2EC6192DE8D0C7672422789AA08AED91B72E050F34C84A88C74FB59025BC6ED2C8DF3F0C899354A289496A8CBD2BDB21236CF0C50922D011E390A6E314BA4B22416A634D44255246633BF638D3021033905B7F0E996C5ACA0682B5C92AC734247E18AA8337BFCF1572B74FD78B594CEDA6A0A62D914EADE652462CC325B6605462D89B4282A3BD71668EE031558ED8AB68DD3C3155772A77C9AD2989950100E56534A46707A9C84969A1254D474CA8A40DD648F5539516D8A4B350354E5126F821258048390DC0CA26DF14B638945C71E5C4D3AE463CD728B8A6358E05E4641B75DF2C70F850ADAC5B16E0660BC4D6B5C9C53C0D4FE71D2ACA2224B95A8F7FEDCB578581EB3F9B1A3DAC4FC640C4D42D3C7EFC945B2029F38F9ABF379DE597D19DD63A9E95FEB926C7906A1F99CD71EA52E9AABD4127FAE2AC557F301DE46ADD356BE3FDB8AA656BE75BD915E4B79CB2A1A36FDFEFC8C9059D7947CED24B7F18BB6661C803D7FAE455F61F973CE960B68891EE0EED5F1C559347E6182E6752B106A9C55939B95940658F8823A64486A3CD0CEF5AFC19590E4C64A2FE9B2FA4C2866EDF2C9C22E0EAA5B3E40FF9CA7F308B7D046911BFC71A9F86BF3CCEC71793D61DDF9A864E681D8FC4D527375861E975929521B91AEDE399020E26492E33A13C5B7236CB40A68B4D2CE28A4EAB9600DA0BFB03FF009C6A017FE71CBF2000E83F2DFCAA07FDC22D73363C83AFC9F51F7BDB324C1D8ABB15762AB1FA7D38AA962AEC55D8ABB15762AEC55D8AAA62AEC55D8ABB15762AEC5572F7C55762AFFFD2FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF85CD3C715A1EB94B24E228DC303B75A8C896514F44323C058D3EFCA8B70499EDCB24B5A647AA4F2492F638CAAFF91F6B2E87268925A5E07F8D2B48F63F4E6447935854B3E4B73327ED15247DD95C9C8C6FA0BF26AC66D5D2F6D22512486A287A6541C8E8C6FCFDA1A586A5710950B75093EA0ED936B32A79F192E1220A4D2A39291954A1698CD562D4A485158BB2C8A762329389CFC59DEF9E40FCD2BDD0960334F2B46E42F52694FA7313538A83B3D36A1F767917F3C6C350B782092EC06A00431A78660183B5C595F44693E60D3F558D7D39939103BF8E53214E7C260B295B66E21832303D286B94CB666775DE8488EA781A1F6C31DD944D35246EC6A23603B922992A64648A11A98B8820B569418D06B24062FABC2D683D4996887A531A6B25884B751B92C84D0F8E16050F57FB5514C285BEA57BEF8AA9B9F7F962AEE42837C5ACA2612716C8A3A17756152298B30CB2CE71C455B16C64115C28A55A9418B3470B943D0E2AE3206E877C55B57A0F7C5548CFC07C677C9B6D20649CB37C26801CACAAAC659B71D32125562DC76AEE72A2AB7983515DF2A2CA2955F3D15941F88D29944B937C1A8A4021F8CEF4CA26DF1631A9DD7A3C9D1A86B4C8C39B29724A9EEE49E3203354E58D54C4758B3D4562F5226DCB5363BE4E2B4C2A5D0754BE722494F1EF56396AD05A7C8B6654FD61CBB1EC7A64A2B4935E7E5C79767564907C4C3C324AC0F51FC93D2262CF6E7883526BB62A935B7E45D8FA9B9A927AE2ACCB4AFC83B510CCFEA705E42A323241677A0FE53E83A5C81A62A597C722AF51B0F2BE90CEA96BB1514A2F4C55153583E99708A895DF638AB2386FDFD3459051FC3034CB9A2D6E19876C8F0AF1D34D342CF1CA4F1FAA2B35D7CBAED9918A3BB81AAC9B3F327FE7257CD967AF79AEF2D74D9DA48E0E4AEAFB6E2BD33638F1BCDEA4D97C82C5D763D3B66E30C7D2EA66511000C4572DE4E24CA356D6126BFB44EF86D880C92C2CE20061E26F8C5FD757FCE3780BFF0038EFF90AA3A2FE5D79580FA349B5CCE87D21D764FA8FBDED19260EC55D8ABB1558FD3E9C554B15762AEC55D8ABB15762AEC555315762AEC55D8ABB15762AB97BE2ABB157FFD3FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF85BB6F848AE52C9904352B5F0C896514D3D7E36C77CA8B704AE3943AC9BEF91EA93C921BBFB2FF004E5D0E4D124854D2198FF94BFAF2F8F2601358471B966F18FF0086424DF8DF5BFF00CE24D8A6A7E63B9B6715564634F7198F234E544585BF9F9E5A934FD775396342055B7FBB1136B9C1F3100C614E4370B96036D06C20E54F8078D72756DB09334D247FA1C629B9EF9467C761CCC597853D827BFD3254B8B6BE642A6A141CC09E27698350F58F2A7E73EBFA4DC470CF3B988951CABE14CC49E276F872BECDF23FE7858DD476EB3DD8694815527E5ED9893839A26FA16D3F306DEFE28A55911380A28AF5FC32318A99D2723CCC6F10233A229FDAC970A0E54AEEB5C834C9030BD578C8E4C6BDF1E16A395E4DE74FCD485A64B586753DB63FD98F0B039103A66BAD7D124BCEBCBC30726C89B4F45EB1A2F2DCE2CD1092357AE2A88F888EB8AA834850D3C31605562B923BE2CE2895B86AD6BD716613AB4BB7000AF5C5B03238AF8FC3BEF4C59A651DD934DFAE2A9925C57BE2A89593E1FA314C79A065763BD726DF4A22BD7E9CACAF0AAACC13BE424BC2E6B8AFC43B6545045209AFB8BF5CA8AC50571741DAA4F5CA64DF04BE7D43802AA731E6DF148E59BD77A3FD9AD4E461CD390D04F6CCD998C291BD32C71B8D4EE6D2240640BCD5B6E3FC72617898FB58A732E4045EF962F1A51A8CB688AA88FF001D77C9C59C656C3A7748E4E6D27C35AE49938EB9A728547DC8C55522D734F520C7154FCB154C63F30B49F0C44411FED29DAB91920A5375AAF2B9553217A9ED9157A77945B99568C1E05A8D5F1C559B798AC80B713AA0E406F8ABCDE3D44F221CD181A53080E3CCA6D1EA238F5C20346495060DF999E7087CAFE5C17AB2859EED1C15AEFD08CCCC31757A89D87E54F99EE6EB5CF30EA3A93312B2B311F4939B5C50D9D266365881B52546D999195075F38DABDB5A9EC3194DA2504F60B08D8AF8F7CACE4651C4CBAC3490C071E9E190395CA8627F58BFF38EE9E9FF00CE3F7E45C7FEFBFCBDF2C2FDDA55B0CDCE23708FB83A3CC2B24BDE5EC59635BB15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD4FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF85884F361C76CAF8536C96DC111904D6A301816424D4A58C5C075A65462CC6441C41E1560CA5C9E80654765394525D76A423B31095ECD96E336D12CA18F05E69242AC0B484107B6C733230348134E0FC0EA6849910814F964278C86F84DF60FF00CE1AFA8BE6C997890CB5427B6F98594539D8657B3DBBFE720B44F56E352AA8320526BF40CC7E2A679214FCFAD422F413895A713C4E591CAE14F6485D8351286B5CCA84C14464F40D0A20D0C709A127BE3964006F88E264377A544A16AC797E19892C81CEC008418B78D5951D6BE04662642EDF164A099E9E2EED2E565B29CA1435A1398920E58D500F50B0FCCBD6A0F4E192770F0ECBC4ED4F7DB2996CCBF3024CDED7F37358E01259E4E245363FD991B41CAA7A97E61EA7771FA705CCD461B963FD98DB0F1187DA6A375A8DFA09E4919F97DAED8DB1337D27E58965B5B3854B971D70F0DB958A7419A457ACD2AB576F0C781B78D90C37CB51F153E79122990926B15CABAECE3E9C090B6491493DCF8E282143D555F1F962C86C8859EB4A57DB1640A696D24840DF167C4C82094556B5C53E204EA09169DF14F1A3A19949FB58A414DE27523ED8F962C816DD4788A0C9B68CA165630A41EB4D8E40848CA12C9E4E3FB5F3C810CB8D086E9551AB5395485053249E694B3F2076F0CA0C911507B8526B5E998F2986E8EC954D3879295CA8FA999CA229B69D6F1CF22ABF422A708853564D4090A6616FA65804AFC5CA985C7F1107776E2353E99A8EC3240AF88C3AFC4EA181A508E8327C6BE2306BCB3672F20635EA41CB319B6DC79186DFC7292CA49A65DC2DBE284858411732558B1E95C7857C5097FE9178643C5453DF1E14F8A11BF5DFAF71E6CD13A0A2F1E87E795CC5309660CAF42B41EAA34BFBDDF6AE52649196DEDBA3AC91C6A21554A374C1E2065C69DEB17D722C9A3908269D7263763E2878E3CB28B89030DEB52C3A53261C7C99022CDF47042D34AFC238FED13964604B87972BE3AFCEAF345C799357B8D2F4F98FD4ECA80723B1AD6B4CD861C6EAB3650F99E6B7BA8AF3882BE99D9877CD9E3141D5E49A0EE2DC076006C3265C594952DA2A76CAE450236CA34DB28E591405353D7316526F8637AF68BA242630596BB6527239718BFA78FC884117E47FE4D443611F91BCBAA07B0D32DC674FA7FEEE3EE1F73CBEA3FBD97BCFDEF56CB9A5D8ABB15762AB1FA7D38AA962AEC55D8ABB15762AEC55D8AAA62AEC55D8ABB15762AEC5572F7C55762AFF00FFD5FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF858B4FB432AE36EF0D94C1F6457A77C789061488210F4C89DD81539220637E0C15E9F0B7865660C244524D756F13A52693D47F019761C6E31905B67E5ABED43F756D68EAAFB89E9B0A66C61065198B425DE8B7BA7DD4114CFD036D95640E66220BEC4FF9C378DD7CE37019830E62A335D99D8E10017D63F9B7A7A6A3AB6A7005E47D36DBE8198526DCA6DF997E77B23A6EAD25AB0E2A0D7200D38138B07922A10C33271C9AC459B79526E573E9B7602992CC6C3958B67A75E5A7308CA3A8CC493B0C692359B89375DF28C8E6C792BD9C6E26238E63C925131C00CEC5C5083B644C6D946549998D5694C1C0CB8D1B1395E31815AEF8F02F1BD5FCABE5F49D16764F8BAE3C0BC4F5AD3A16810474D94ED86A9CAC4764E919B983F7E25B814DE201A8CCD4272A93644A690F1029C8E41B0146FAD40003B0C5928B4FEF8A559273F0D4F862A9A5B5DD286B8109DC57CA08DF0B105358F50403ED7CF16C051297B08228F8B3051E9A8A01B3F4E98B3B6CEAC4FED64896622B7F4913DF205988A067BD249F8B204B608A0FEB47725B6CAA6526282B8BC201A1CC599445269AF5FB5731E4DBD17DAFA93480F63928868996716303222B74DB2E1071AF74EA3770295230F84B6A53B32AF23BD71F097898EDED5C1F871F096D8D4F0121885EBD72CC71A6C81B63B77A6990310BB9AE5CDAC12FF4AB80CDC50D0F4C558EC9A3DE3BEC877F6C551B65A2DE8956B1B52BB653910636F54D134C962319910E6290D9183D46C42C7C05295DE980067253D7A655B76DFB665422E34CBC8AE2ED959C0FB3FCD968838939879279F7CD7E8594D630B9591C1008F7AE5F8E0E1E49BE6986D2E66B998CE4C8EC49673EF99D8F675D96492EA9A6709AA13BE65C4B8336373E9D234AD45EF84968E04759E8D2B015427299C9B61167BA2E84EAF1931F5CC6939110F67D1F4BE318F87B65326F8BFA35FC955E1F937F94A9FCBE4CD047DDA7419D5E9BFBA87B87DCF29A9FEF67EF3F7BD372E69762AEC55D8AAC7E9F4E2AA58ABB15762AEC55D8ABB15762AA98ABB15762AEC55D8ABB155CBDF155D8ABFFD6FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF855B670AC2A330CB984B2785D5A23C4EE46C300938D3C8037146EC0D640A57B1EA73271C6DC59E7013FD17CBB7FAEB98A106353D588EB9991D3B85A8D50112F59D1BF2CACE1557BF01993724E5F8F03A39768B3EB2B0D26C08B45317A454D401F16C3C732BC3D971F68BE7EFCC1D3E117D1DCDBB5631C8041D7BE60E78D3B9D2EB789F437FCE1B5928F37DC48C4A6FCAADEDDB35595DFE973F117D6DE76B8853CCBA848F19742AC38FDD98530EC4EEFCF4FCE7D0AE26D50DF5BC263889E5D3AF4DB292D5283C3230655657431B275AF7CB612A6A31A651E578C9BE1C5A94A65933619E30F7148792460EFB653273F1AF4B1ABB029C89E87C3289B9B16EDB4CFF004A3F0F5F6CC7924A3C6845A6E741D7A530C5814DA3F2DB4D4A2D3DE99246E9B59F955DAE230141A7B62BBBD7748D35ACA255DABE00615B2C9238C83C9969ED95973709D912B1FC4081F31912E48298C7C788D8E552660A2D08A743EF90660AA7A95D80E9D31656EE05BF6A98A6D772A7C35E9B62B6898A4E3D4D7145A244DDF9D315B442DD11D1B1640A3E1B84A8AB6F8B65A6D1DC42109A9E98B3077524BA534DFE5809724144FAE0A9A1A6DB6449660A02595BFDF832A25B0150FAD71DB9572B994CCEC8692E958D28731A4D112BE38BD42083D7B656D97B325D36D5415240F965D8E2D332CC15408C00287C732E107189B2B7E207ED5465BC010A95E638B0AE3C0150B2DB07E8B8F00543A699CF9D453C32328D3762431D138B54D18785320DE8693CBF0CE45502D3C7156E2F295B83560A47CB154CE0F2E598707D351C4F865536704CA6D16085032D001945365A47724C33A90A7805EA3C7271834E4C94C63CC5A8C0B6EDC9E840DF3371E375B9333C3755D61A4574B67F1ABE640C4E064CFBBC875ED367D4A61297F881DC9C988538F3C96A56DA488630CD1737237232D8871A52B492FF00449A798BAC3B78658254D2425FFE1E666DE2A1F9644CD90C6C86C3CBDC40AC5DBC321C4D831B38D3F468D387EEF7A6F9592D822CEAD2C5234038819596603F7D7F27871FCA4FCAD5F0F286883FE9C21CEAB4FF00DD47DC3EE792D4FF007B3F79FBDE8D9734BB15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD7FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF84F5A9238F5CAA50699EA135805C2D19413C7A0F1CA841D7E5D4BD77C9FE4C9F5955BAB9531A36FB8A7F0CDAE9B15BABCBABA7B25BC363E568B8428AD2D3E13B75CDC474FE975F9B54642929D43CD1733551578D7C3251C4EA660B1C79EEA4E530908600D30CE1B231715A437D65F5A82269F76DFAE6A75317A5D04097D2BFF38A5603FC513C69B50F519A5C8F59A4818BDF3F32C8B6D7EE550D4EF503E8CC4C8EDA06DE35E6CD274ED634C8E1745F5C2F2DC6FDB31645BC45F0F79C3499F4CD4E482088842DD40C6326A9C55BCB703DBDDC25B66722B97036C22FA334EB45963889EE06093998D91DB69F1FA87E1AE5191CD8F245DB5845F5ADD46512E6929EC1A746D253877F0C8DD2631B66365A3C2101283071B2E0641A7E9B6AB2F22A0536C7897813496D944AA517E11D71E35E0463C28C415E94186DB63B2E580602DA0AA88B88F6F0CAA4DA0B74A641902A65A84D3164D09A9D7155F50686BD77C55DCC0DB90C554DA6A54F2C516A26EE9D1B16C06D552F883F6B0330518BA937F37E3859834AE97F4FDACAC96C1345AEA15523976C812CC4D4DAF474E5BE544B671A88B82CD4E5D72124CA7B2AAB0E42A7BE504B18B23B331FC3B8C039B6B27B39A35A6F9978A2D190A73F5D8F8D2BBF6CCBAA71495CB728DB636BC4ACB301B8F9636BC498DB3ABF518DAF126255154103AE4265C8C25AA467ED0CADC97048491B0C5556910EE31550692256A823DF2B9ADD216EEF23E34AE5643194D846AFA82420B33058E952C72EC637703365781F99FCDF662678397A8A4D0919B2C7074D9B3BCEE7D5EC0C9584D10EFF004E6588389E2DAFB7F4AF4811906B80C11C68897479C39A3D01E8BE19514A9FE8B71F69B204A695974DA007803EF4CA8C9CA84764C6DED78EDC0636CF85905B45180BF08069BE368213650028A0FA3157EEEFE50FFE4A6FCAFF00FC04B44FFA80873A8D3FF771F70FB9E4753FDECFFAC7EF7A265CD0EC55D8ABB1558FD3E9C554B15762AEC55D8ABB15762AEC555315762AEC55D8ABB15762AB97BE2ABB157FFFD0FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF85F8ECA6827585979C84FD919084FC474B9674F6CF29F906F35036D773218A18D833A95FB437DB719B1C3A1E274FA8D43DA2E0C763686D6D2216DC06CE3BE6D30E8F81D5CF2F11610F34D76CEB212EC8767CCC3300535006ED2AB986E56455F4CB03FB54CC7F1699CB7539675B32AB335030DEBB532B9E76EC1877633ABEBD05BC4817E3095DEBE39AFCDEA7A8D0E301F49FFCE3379B34BD275C3753CAABF58466DC81C4F875CD5E6C342DE931914F72F3ADEC17BACC9A94171F5A4B9DFD21FB35CD7CE36E44254F2DD5E40F74AC253188D3E28FDB31A78CB951C8F3BD4BCA69E67B826C23334CBD471FEC395F0D322049E6DA8F93752D03518E4BC89E28D5BEC95207DF4C2254C6389EA9A33F3B58E48979851B8C4CDC884699569EEACE6BD5FF000CA652722324EBD158255940E61BB6545927D6AB1D43EDBEE47865728DB644D32A8A7884600F0C1C0CC4ADAFAC952283BE3C0DD18DB27B39964B73CA3DE9F6B1E06C186DD1A90A6A77A9C9C62D528515707AED84848D950380A2A37CAA41902A4CC7B0FA3214CC490EC549353438190921A42AB53CB14F1297390814AD3B62B6A2C66F7EB8ADA8BCAE2B5E98AD201E46AFDBA62C97FAE07FBB2A7BE2CB89DF5C03ABD0F8E02CB8DB5BFE34F8ABF4E506569051B1DF7203E2C896C89561755FDBC8D3305556E7810FCAB4ED8382D24A252ECBB57A7D39138523252716B7C626525B901DB11869978CC9ACEFD64A7C5C72F87A5AE53B4DE394935E5B53AE5BC77B35108B8EE82903957DF229114CEDEE62E5566E43C3DF1663127705DC0A2B8B3181305D460208A74F7C05B618F854A4BF87C46001B2D06DA8C6BBF2FA3088ADA1A4D622029CFF001C9702DA17F4AC4C681BE23D05729CB1A5AB405CDD731BBF0F01918C2DC7C9B3C4BF35FCCF268FA60B6B78DEE2F27158E34AF434DEA332F1E3751A8C8AFF00959F947A8F9D3433AAEA90B5BFAA2A3983B75F119B1C717499A565BD67FE71E6F9B549EC74CD4B9F04E6005EE7B74CCC842C38E254C2A7FCA7F39795E57730C9731C7D5829FE991941B23240C3785A76B4BD06DEE22DA507B6634E0E4455269E35902A2FAA9DE40731CC5B8056F5410027D9FD939518B9319505E8CE36AE222C84938B13CC8A8E9D708091BA7885760570A781FBABF947FF0092A3F2C7FF00013D17FEA061CE9F4FFDDC7DC3EE78DD57F7D3FEB1FBDE8797343B15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD1FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8D2F23F91A57BA4BFD6D6BC0D68D99B874D4F199B556F6FBFF00315959471D8E9F1AA0A7024019B9C18F85D466CD6C59E49EF25615E4332A52A0D50DCB2DF2D6856B70C52551CE43DF31324DCEC38B88D3D353C81A7CB0F32AB551E03FA663193B0FCA3E7DFCCDF2B2E9FEABC7B2C7E1F4E53293938B4F4F9C6F56297D485DF7198E64EDB4F0E146E83AFDC797196E2DE46AA9A00091D7E9CC6CDB876719D3DDBCB3F9BD24F2C31DE0DA94AB1FEA7308C1B0667B4D94D69ACB0BD12208D97E3151D3289636F8657A07911B4F7D723B3D2E146909A39DB7CC738DBE395EB1F997F96F6BAE687305B355D42DA332D55454D47B0C8F03938A76F86AD6E6EFCB17173A65F42C9F1955E429DF0183920B2BB7BC4616F2C5B16DDC65660CC165F14EB3463B9032071B30532B566E2C3B83B65538D1499526D019BBD6990E16719A6917C5DBA63C2DF19A6D6F7CB1008C7E8C785BE395344BA420107AE061396E881329C892A0DAD663C8D0ED9592CC054571DF2BB6C017F2B7FDA1BF7C2A8599ADE876DBBE2A82372A361D3A0C5541AE7155295D4AD477C52934EC6BB6D8AA0C87F138AA8307DB7380A43AAD502BB7865062DA0A3E1269D7A60A6C0510A5BF98E34D80ABA3316515F98C69369846687AE16B4C2075322A96D8F7C55328A7F498156AD31564767AA23108EDDB08544B5EC55DA4FC724C81444378A5A9EA7BF5C2CC14C92F401F6F6F9E06C1277E9458EB593AEC37C84CB6715A849AC27412F4F7C8829421D6A25AF292BE1BE580AA026D6226DC3FE39602A841AA52B2C64B329A0032AC82DC5CF9B81E8FA0797EFF00CC36DF582AC8AA3AD30C62E064D45B23D2FF002E746D666FABEB1682EAEE27FDDB915A27874CCCC61C0CB2B7BEC5E5C8B43F2FBD969AA96E889B050053F01997034E0CE16C3BC93A446D35E6A37975CAECB32853E03A665C25B38C63BA6F3C3CEDB526BEB5496201B83151EFED82526710F942FF00F2B62F34EABAAEA1631FA2F393450294A57DB31E45C8807897983488FC97713E9FA8CA1A624844277CA0B7C52BB760F0C4E05030A819590C81A45AF5C14CC14D74F6F888F0C7859829D237C58D3305FBB9F945FF0092A3F2C3FF00012D17FEA021CE9F4FFDDC7DC3EE78DD57F7D3FEB1FBDE8796B43B15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD2FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF911B5D4CA4450905BBAE74F1C603E6D3B48AE67FACCEA900FDE16A6D9682038A626D9EF97B49957795D99CFEC9195CE6E660C6F47B1B58EC87AAF540BB961D4661CE4EE74B87D4191C5AFAAC65616692836E5B65066EFC600F1FF3E4D71AB45708F1045607E21F4E5329B64703E3BD62C6EECB539792FEE8B1F88FCF31CCDB04292D9AE9C158E18C484915AE57C56C8DA31A49596358E416F21EA54E44840059C68FE69D574B44824D51BD24151F16E7D8E63C837C6DEEDF96BF9A30697AC437F733A5B98C8A9E5D7E798F272216FBDBC9DF9E9E4FD7AF7EAF7B7111F56309212474C003978362F14FCFAD33C9F3EA31DFE8572B34929E46314A54D7C301736DE23636377C39471820F5F6C8101B0499559B2DBA8F59E847619590CC14FAC751B37996105CB374DB6CA671B613932D59618940988453D0F7C8F0A04D136CD6F2352390BA9FDA1BEFE18385B064A593E9D74D30689498C9DD8E3C2CC66461E76A80354A81BB65538EE9F15B87528DDB846416F0272B316C8E54DE3BC454025A06EF4CACC5C98E45296FE05DD4B37B5321C0DE24BA2BC570095007BF5C8B0326E59EDE9BB004E28B4B5E48F7A1A8C56D41A44DF7C56D45A4DB167C482797AEC315E24135C76A62BC4A06E0D7A75C4A89287AB43D72921B414545734A53E9C785B01B45ADC8F1C785982AE2E42D0D7A74C14C89D95D2EEA2B5DF035DAAADD92C17953DF15B4CE0BB006EDCBDF15B44BCE78F247A3FB6109050E2EEE01FB44FD392664A69697B329A93DB147123FF4A3014240FA71533A434FA846D148EF394310AA81DF018DB28654A6E3518B9DBAC324B2198D1CD3A60106CF142A299A4BC92D622F2040086237DF2622BE28651A77947CC5A9C4F35BD83945E8C4102996082F881EB3E4EFCA9BD9D44FA8388EA7918FE5898BAAD7E4DDF4559E9967A26872A40024C828A0EC09C9083AFE3280F24DBDEACF7535F5BA2C8EC5A075DFE1DE997C4522ED966AD33DA5A4934D2963312A213D299785E152D23CBF696D62D3ABB191FF007A2BDCB76CB449A670DD4BCD4C2CF402DC4249715529F3DAB80C944698D7953405B5B06BB9A61140D1C923CDFB5D2BD32B25980FCBFF003D4B379FFF003D6EF4486FCC7A769D39ACAA7ED509EB9021982FA1F54FC9D96DF4DB7BFD27525BB9258C39B52C28BB0D85322907778AEA52AE8F70D677C443780D046761F7E2C814CEC599516534A30AEDD30365A6515E425FE26A7B61676FDE9FCA021BF297F2B997756F28E8841F63610E74783FBB8FB87DCF21A9FEF67FD63F7BD172D68762AEC55D8AAC7E9F4E2AA58ABB15762AEC55D8ABB15762AA98ABB15762AEC55D8ABB155CBDF155D8ABFFD3FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8EF578F9B5C06FDDBF4CE9B8DE267A6651E54D1967BAFADC9BA72AAE552C8E29C1BBD62DE25826E4AB45AE56656E6E0C28FB8B9068427241F697C72B9F276F871F0EE94C97B4256184257314C9D96395B10D522BB9CC8D23058687965129399116F07F30E857BACDF35B58446572D4F8728949651A4E34BFC8DF335FC6918B3912693756A76FBF2B126118D966FA67FCE2079E3569D2425E28DBA7F9F2C4C9C918596BFF00CE13F9AA29D1E5BD255853896E9FF0D944A4DD0C4CC2CBFE706B5A9E359DB5858C2EECBCFF00E6ECA2526F8E265563FF0038CDA7E8171691DF7994594A8F4F50494E4476EB91126D11E17A95A7E487956EAE62177E6E597881D6407F8E032660A7179F957E4CD35D2DE1F32C444A28C798DA995993602A69F929E539E932F9A6293BF0120C812D82491F987F2C348D2EDBEB1A7EAA048836F886E7EFC46ED3964C33FE55FF009A2FECCDDDAAFD7517A01BFF001C970B57131F6D13CF3A6481DB4B6B5B68FED02A454F8E3C28F11136DE77BCB598417D6E4229A31A634BE2338B4D6B48D6A25442179EC6BE380C2D81CD45BBAF28385F5EC65A93B8A1C81C6DF0CC92CBA4EB91A13E9B3D3BE40E37331E54BCCDA9DAB7EF6D0923DB2BF0DCA8CD53F48A85E722346C7ED2F8661CC516CBB516D4ED5BED311F3C82AFFAEC741C5B63D3E58AA8B5E27F362AA2FA82F4AEC3BE2D96817BF5AF5DBBE29B59F5A88FED62B6DFAF19EF8A82A2648EBF6BAE45B42BC6CB4FB5BE1640AB2B8DB7C0D815B92D3AD70164AD1B0A75CA9AD7F2DC50EF8551D0135A5715477A8513956BBD310CA3CD6FD61BAD324CCA9BDF49F663EB8B548A3ED2C750BFA705635F0C5ACC99E795BF2D359D7F538AD591845506507C0FD396E38DB0964A7D476DF933A0D959033C4867812AEC7B6DF3CBBC363E2A47A4F937C9BA5DEDDEABA95DC29145BF027AF1FF006B2C18D7C5629E7CFF009C98F23796F4ABBD13CB56714B76A0A0950577029E1ED93F0D7C57937E5BFE746B779ACC375AC4AD0E9CC4B70EDC6BF2C84E14E3E63C6FAAB53FCD9F25F9AEDA0D1F43981BDA8590AF5AF7ED80069E07B5E83A3AD8E9B6019FD4927456E47B03DB260278588F9D0BDE6AB67A65BF660580C902ACD043E8C3A7C1D2A02B8F96264C4861FF00987FE997DA7E996FD178F35191E2470A335A8DA0F265F5869B66D3EA4B6CCA0815DD908C921F9C3F96FE439FCB3E7ED77CC1E77D224852EE6768DCA6F424FB9C3487D831793349D5EC21D5BCBBADB441E3E6D64ED4E1ED4C348B7E587FCE45F9ADF47F3B0D3667A346FC5A64F6A60E1660A1FCA5F98F1DD086D6693F771A84563DC78E34D80D3DA2CEEF4FBD50F1CC391F7C69982FE81FF26E83F287F2A829A81E4FD0E87DBF47C19D061FEEE3EE0F25A9FEF67EF3F7BD232C69762AEC55D8AAC7E9F4E2AA58ABB15762AEC55D8ABB15762AA98ABB15762AEC55D8ABB155CBDF155D8ABFFFD4FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8BED12FA6D457F46FA12ADBC7F626A7C47E6736E72BCD5193DAFCA1772C114D67796EF4894FD51E31D5BB72F6C899A63A6B6609AB5DA32C37B6E2DD587C2E452BF2C78DCDC5A4012093CFBA5D95C5C4123AA9B7157693A7EAC13C9B39630D30CD5FF003318397B28A39E2ECD18AFF0CC4326D863A62B73E79D575085C4517A61F6F886DFAB29949CC807D51FF38D7F96B36BF24BE60D7A33C62F8E30BF64F43BEF98F29378C40BEE7D22C74E69E9269D0C76D07C10CB1AD18BF45AFB655C4CBC1E1DD9E8BFB58ED1ED0C421BF857933462881478E266DF8E16F93FCD9F9B3A89F3543E5DD06E92E5E7904370EC6BC2BD48DB2894DCD86114C9FCEFA4EB5E4DF2D0D6EE7CD33CD77749CA3B3864DAA7B5331A536C38E9E45E5CFCBEF30F9C746D43CE7E64D66E20B0B2532DB425E858FB0C89C94C463B64BF967F973179E359223BABDB6D26DEBEBDD31A6CBE06A32072527C17977E75585B796FCC53E81E54B9BBD4A68BE15773C8F2DC640E56DC7A7B286FCAFF002B79ECCC351D62C6F9A0421B801F0F1EB959CAEC31767F13E9997F303F2DADECC68BE67D3A6B4BB20707028DB6C4E1198863A8ECDA28BB3F307935EDBD0F2EEBB25AA1FB2B2BD313A92D3FC9A82D7B509BF41DC2C9AADB5F475256456ABFCB251CE4B4E4ECFE17805ADC68374F7306A7693F224F0940D8E644276EB3361314A5FCB71DB96BED36F0C31F22521734232F0C2386C59661A17994D9010DE5D212BB75C90882931A7AE681AF68FAB442DD6E22172B5E418ED919419C7210C953CBDA4EA2A566A7ADFB253ECE63CB6726398B18D47F2CE695A4789223131AA377A7DF98192365CC86434C1755FCB7B8B552CB1866F0EDFAF2A316CE379BDEE87A8DB170B6D29E269D36FA3234C81481A3BD462258245A7B645210F34BE98F8C1030B7525C6F2035058838B3115212F03591CFB53148802A6DA8C6845198E2C8E20022A1BB59A95241F6C5AC48A3967229C6B4F138B30510B73D37E98B74510B703ECD7AE03BA65B045070AB50D91E171BC42AA92EC64AEEB9131489A36DAEC3380DB0F118084892266BD759111006889DEBD71886C81DD1F0992E18C50C4657A7C210572CE16D243D3BC97F957AF798E482792310C524A1645E8426FBF5EB8F0B8D393EB1D1FF002374CD2AD24B8FACC8B2409CBF7A76247D38F0B8D29A0B4DF33689E5E3793CF730C571A7D79F134A8197618B10789E11F993FF003955A5E97697F6FA0A9BABC98323B49BA8EA36F87325AE669F188F3B7E6079FAF9ADAD2F561B59FD46B94534201A9006C3C70DB8E7290C5B4AD3E1D275392DB592F717334A03C8FBF53DB27C69194BEACF2AF93E2D6E1161A2A492974A3B36FC411DB2B99B6C8CDED5F941F9172796BCC4FA84AD2CE8CFCA6F537E277E9BE56CF8EDF74C691C2A8109E1025501F6C3652082F3BB1AEA1E6A7BCA739223C78FECED8DA683D06F1115A198578A312DEC72F8C0485A90180C006AFE6C9243F14708DA982500189A66B1C4F1488518AA4B5E5F25CAA52A6069E4DE67B48BCC7E67B6D2DADD25B585C7AEC07C54077CABC621AF64279ABF2B6EF4DD2B5AD5741BE6B484216823534A0A0EBBE4865B6C1005F879F9B02E6E7CD9A80D61E3BA9E1958073B9DB26269E00F3089B568627BAD3D12358E4A1E636E3ED960368D83D2B43F3C4F63259C11C9CE5968272DF641EF4DB274178807F551F9093B5D7E45FE4BDD350B5CF913CB92B11D2AFA65BB7F1CDEE1FA23EE0F2DA8DF2CBDE7EF7ACE58D2EC55D8ABB1558FD3E9C554B15762AEC55D8ABB15762AEC555315762AEC55D8ABB15762AB97BE2ABB157FFFD5FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF90FF00CB7F20CFABEB70F9784FE9BBB0569CD76FA727E3B8A3474FD1DD03F23BF2F3C93A589BCC5E60B79AEDE3E4119F707EFF007C7C76C8E969F1C7FCE4679DBCA97925BE9BE5331C6DA651649E3E8DC698F8EDF1C34F985743D435AB73A95C5AB244568B514F57DBDF01CEC8E34D74AFCB3F36EB344B1B65B6B63FB4C074FBF29395022CB74FFC91D5CEA169646F0CB792B82B02D6868457299657271C5FAB7F90DF96FA8695E588AC2E2331968C027E81941CAE6460F7693CA361A1E8F705C896E5DC145EFCBB1CA8E46E10BD9F397E76FE60587923CA7269D6404DE66D67F72186EC81E9BE0395C8861A60BF911F93BA0E956D75E74F38EA0B3DC5CC06ED8B36E8C6BB75CC79657371E36216F637DF9B9F9A52D868F792CBE5AD35E9287354A2FDDE198F2CACE589ED7E70F2C5C6B0963E42F2E5C1B68B4F939DEBC6688E0F63959CAD4715259E7AF3EE89F933F97B37956C5565F325C2141243F6F930237A57227236E3C5C4F19FC99FC9EF3579E357B2F3B7982E85BDACF299409BAB2F20DEDE390395DBE97476FA57F323F30348FCBD8C68F62F6D3B88F837115DC0A7BF8656723D0E9B40F813CDFACB79A75A6BE9E0145242328E80E0F11CC9F65F131F9AC2248F925F4B6EDE08D4C81CAC4F6481D1434AB8BFB2BB8A73AACD71A746F59A177AD4F7C9C32BAFD4F66D07D412F9D7C87AC79623B2D3ECA38F5644A34B415E599B8F23CE6A7414F0F3A6EAF7777248B3B95AD16253B53E599D8E6E8F2E1E03499E9BE5C56BD53AB192DE2247276DB2F127127165D7FA0E8F0317F2EEA85EF1002C8ADB93E18CA4D6229B7953F33A6D26F5346D6AD65424F1FACB0FA3AD330E72722117D2D63AAD9DEDB42F6B79CD5D4155AE634B9B971E48AF5AD89E372BCD7C72B219A1DACF4FB9E4A6C57813B371EA3C72B21B2293DE792B49BB25BD08D49F6FEDC810CC3CE75CFCAFB296390C4A2B534A7FB78B787916A1F965240EFC54D05698B6061D7DE50D42353FBB240E9F462CC31B974CB8B7E4B25B9AF8D31672E4848D2584EE87171AB74D61B9A8E25295D89C5B150951DF1640B4B28A80A773DB14CCEC9AC658A0DF22E2A3ED62326C7A1AE34B68D58A15824653F18E831E15B645E43F296A9E67D5E1B75899A194D2B966385948C9C2FB83CAFF0092FA779295353D5A2170654E410EF4AFD3991E1A0E77A4E82DA4699F5ED6AE255B3D3ADE3630C55A55C7418F86D32CCF3DD5BF33AE7CE574749D20496F6ECDE9B4E36047CE98F84E34B23CEBCF1A3792FCA7A1EA926BBAA97BEBD80FA4BCF7E743D725185328647E5DEBFA8C32EA57C2CE212DA991B8B91534AE4A98E4928F9735ABDD1EF0DD69B251CAB7A918F9634E29927A350BBF32B5ACB1DBB3DFB5C207A0DFED634CA2FD64FC8CF29C1E5EF2B0D66F63A5CC9081F17662A3010D8F77F23D85DCB6FA9DE5CC815667261AF8646922D3CD6EEC69D62189A168F8D7DF1A6C8DA43E4EB4FAB9B9D4661B4D5E24FBE34CF74E755BCFABE8B3C8C68ECEDC7E9E9878E934520F29DB1B2824D4E71BDC92149F7CAE5918905956A139B4B19A73B7D514927FD615CA253B6B312C23C8F6AD35FDFEB972B54B824424FBE5129313128BFCC0FD23079435716F2B969636A460F4DB2D8DD391189E17E06F9FFCB7AE0F34EA9A85FD94CD01998F220D2996C4B0902C7749D26F7CCD7834686136494AA9229C865824E348909B47E4F86CB506D288E57711A09325C6E399C83FAA2FF9C7E80DB7E437E495B375B7F20F96E33F34D2ED87F0CE9307F771F70FB9D2E5DE67DE5EBB96B0762AEC55D8AAC7DC7D38AA9D0E2AEA1C55D438ABA8715750E2AEA1C55D438AAFC55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD6FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF233CB9FF0038C3E4DF2ADCBEB13B133D0B1911C0CC3B2E7ECFCE5FF9C95D5A6B1F346A1A7E95AB4E6C625612C5CC96E229B03DB1B29A0F89DEDDEF00926B97974FF5394909AFAA47BB63653C2FA87CC9AF797F56F2279774DD25D34B4D3A86707FBD6A0A751BE365061B337FC8DF2C5E79C752B7D26D6F2E0CAEEA11B937122A32B258460FD2CD3FF27FCBDE569F47B4B9B432EAF28065BC6DF8F427299172618DF40456B6BA6D9C16FA4C4102A51E4661D69EE72891A732106272C4F737978F79C94DADBC970B272AA1F4C578D077395D972B1E3DDF9E76B6317E6E7E6FDCDAEA08F69636B318F8CA7ED509FB35F96425272B829F42FE69F927CBDF977E4FBCB5B1FAE896F63315A4924C4A7A8694A0F0DF28916D8079F7E5DDB5EF907C986636E96B7BAC9ACD7DC6878B03D0E512939118A6307E6459E97A6DCD968086FF00CD3316F4EE07C67936DBD2A72B2594B0DBCCBCB9F94BE65F327999FCDDE78B1B8BA4327A932C95E0141AEC08DB2264E4E9F4FBBD4FCFBF9ABE57F2AE8F0E81E52E7677F0A18E242F550D420EC32B26DE8F498007C75AEDF5D6B378B7DADDCB4D7B292CBBEDD7C32B327A0C31012DFADC21FEAF343EABAED118C5283DF07139825174B3C0842B583B13D2B91254CE285BAB580C5EAADAB41714FB1FB253C699289759AA31AD93BF21FE5BF997CF5AA25B7942D9E390B52E6465257DE9B6676393CB6AA9FA0BF97DFF0038C4BE5FB186E7CD3299AF1497996BFC33618E5B3CA6B620CB646F9AFF0025F45F3497D3AC6330A8F843A6C7C3AE64893AE9C5E7FE59FF009C4B6F2E6BEFA88BA9E78B90608EE5878F4C12935883D1FCE5F91FA16B366919822B5BC450A27550A6B4CC49CB7722317CD97FE5DF30FE5DDECA90C72EAB696CD44F4EA683000D8F40F2E79AEC35E884733AD9DD746B7907C55FA7010CD983EA0F1AFA3C1404F85180EB9590D812B7FADCADCBD6F84F4036C810C834F248AB406BDB7CADBD21BA53293CD41C5B42552E936F221AA038B20C2B54F2BC3217A44BB83DB16C3BBCCF54F2A4B17F751803E58B5F0B13B9D1E5B706AB4FA314243346F1FDA53BF4C50A5146DC838041076C0589927F096E03236C0A6F6C582FC3D7FCEB931BB548A3A0D2A6BABC820B40CC2660251D7AE5A22D7C4FD0BFC98F24E95A1E9D6B7A2D985F08F90673515A7865F8A3BB4CF23D4FCD9E6780AC36D247CE78E3ACC3F6683AED99341C7F11F21DDF9E17CF3E61BCF275ADF243A7D94865BB8D0856A0EA2B5F6C691E25BD5935BFCBEF2569062B7A34F0A7266EADCBFD6C683025F9C1F9BBF987A879ABCC37C25AAE903E1B5727627C0602144A9E07E85AB1755670AC4D77C1C2C2791D64B67A6DC898BB2CBB8849355DFAD463C2D5C56FA7FF00203CAB16AFAF433BBC73C664570817DC1C785BE127EA25D4634ED0934E0BC04DC5828DBA0ED9121CDC401E6CF7CB6D0268F089CBAB2814A1A7DF829BC4425FE6C65BF8AD6D636E3561C877E38D331009F689666F74B92DE195614B215766F6C69B0462C1FCF9AFE876D2C3A341AA4308545370ECC0EE7AF7CC79C776C1008D7F39FE5FDA687656D77E64B5630D0944700D7DF7CACC14C22C4BCD5F9C5E4792D27B1D3F5980FD6C2ADC55813F08A0A6FB640E32D6718653E49F37F93EEB4286C1756817D221A3F8C035EBBEF90F08B0F0C273AE79A34C3A7CF099619CCBB2B5410C3DB7CC8863A0E44202980CDF92FE44F3BE963EBBA72FD6AF3ED3A902B5C3C0C258C3E78F3E7FCE23685A523EB9E5EBAFAB6A963FBB823076A2F4040EB83869C69E10F9423FC92F3C4BE66FAC49A6CB33C8D46B8553C4FE18971CE9EDFD0E7E5058CFA67E52FE5769B72A52E74EF28E896D7087A8786C21461F78CE9F4FFDD47DC3EE797D40AC921E67EF7A2E5CD4EC55D8ABB1568FBE2AD547862AEA8F0C55D51E18ABAA3C3157547862AEA8F0C55D51E18AADC55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD7FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF30EE7FE3932FFBDDF60FF7998EE4BF25BF357FE537D53FE39BFB5FEF6F5EDD716D0F1497FDDBFF001C5EA7FB9E98B745253FDFDAFF00BC7FDE0FEFBFB9EBDF23264793F4DFFE7143FE3BBA67FC707A2FFBC7FDE74194B18BF42B56FF0094853EC7D8FF0077F5E9FB194CDCA83C8BCEFF0061BFE521FB5FF1E7F63A9E9ED98F272E09DF927FDE49BEDFFBCB27FBDFFDEFFB2FE3953938DF1A59FF00E4EBB4FB1FEF50FF00783FBAEA7EDE464DF27D01FF00395FFF001CEF2EFDAFEF63FF008C1DBAFBE53258F3625F985FF92AB47EBFDCAFFBCDF6BA663C9CDC6F00FF009C69FF0094FA7FEE7ED0FF008EAFCFB65679B9717EA37997FE51BD43FDE3FF00799BFDE4E9F64F4C94F936E93EB7E3179D7FE531BAEBFEF43FF7DFEB9E998E5E9B4FC921BDFF008EDDB74E9FEEEFB1959E4EC23C936D3BFE3A375FEF1FDB1D3E5DB029F8ABEB3FDF27D8FF009E790973627E2AB17FBD717F75FDC8FF007A7EC7D39383AFD47C5FA1DFF389BD2EBFE385D0FF00BC3FDF77EB99F89E675DC8F37D49AFFF007D71FDF743F6FECE6645D066E6C5344FF7A24FEE3AFECFDBEB99117124CCAD3FBE7FB5FECFA60C9C9AC3CD3CF1F69BEDF5FF0075FD398736F8BCA74FFF00A587FBC7DFFE3A19747E9497CB7AEFFCA552FF00BCDF6FFE95B80A43D7A1FF00792DFF00BCFEEC7F7DD722DB1504FB67EDFD1959641565E9DF2A2DE12997ED606D0843F4E2C825571D5BED7D38B6B12BFF00DAFB3FECB14179F6ADF6BFDD78B51611A8F5FF00757D18B192017FBB3F67A603C9804543FDD8C805926D69DF2E8B44F9BD2FC89FF1D6B7FEEBED8FEF7E797C5A25CDFA15E5BFF8E6DA75EA9FDD7D1F865F071F27262BE69FF8EB6A5F6BFDE47EBFC32E71DF97FE4FFF00C995E66FF7BFFDEC93FBBFB7F4FF00938ABEC7BDFF00943F52FF008E77F70DFEF47F7FF47BE2AFCCCD7FFDEDBBFF007A3FBF7FB7F63FD8E1632E4C6A3FB4DF6FE8C0D3245C3FDD5C74EDFDEF5FF638583EDFFF009C50FF008E9C5FDCFDA5FB5D7A8C0E4C1FA41E6DFEFB48FB3FDCF7FB3909399064D63FF1CF8BFBBE9FB3D320DC3E2C67CC5FF1D0B0FB7F647F77FC71671F8A62DFF28CEB5FEF67F74DFEF07F7BF4E167F37E67FE65FF00C746F7FE526E9FEEDFB5903CDBA3F178737D97FF008EDFFCF6EB8127E2952FF7FF00F4B5EBDFAE2D72F8BD3FCA9F6D7FE526E9FF001EFF006708607E2FA3EDBFDE1D1FFE523E8BFDFF004FF65930DD1E5D5F5BF977FDE0D27FDEFF00B2BFDD7DAFA72054A7FE6EFF007960FF007B3A8EBF47DAC816324FB4DFF8E7D97FC733A0FB5FDEF4EF902C1F62796FFE51ED07ECFF00C73AD7ECFD9FEE57A7B674DA7FEEE3EE1F73C7EABFBD9FF58FDE9D65AD0EC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFD9, '1', '2021-03-13 12:29:10', '1', '2021-03-13 12:29:10', b'0', 0); -INSERT INTO `inf_file` VALUES ('9a2317ba-fa4c-4f77-84b4-7cc537d382df', 'jpg', 0xFFD8FFE000104A46494600010100000100010000FFE202284943435F50524F46494C450001010000021800000000021000006D6E74725247422058595A2000000000000000000000000061637370000000000000000000000000000000000000000000000000000000010000F6D6000100000000D32D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000964657363000000F0000000747258595A00000164000000146758595A00000178000000146258595A0000018C0000001472545243000001A00000002867545243000001A00000002862545243000001A00000002877747074000001C80000001463707274000001DC0000003C6D6C756300000000000000010000000C656E5553000000580000001C0073005200470042000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000058595A200000000000006FA2000038F50000039058595A2000000000000062990000B785000018DA58595A2000000000000024A000000F840000B6CF706172610000000000040000000266660000F2A700000D59000013D000000A5B000000000000000058595A20000000000000F6D6000100000000D32D6D6C756300000000000000010000000C656E5553000000200000001C0047006F006F0067006C006500200049006E0063002E00200032003000310036FFDB00430001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101FFDB00430101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101FFC00011080190019003011100021101031101FFC4001F0000010402030101000000000000000000000405060702030108090A0BFFC400511000010302040305040804040404040309010203110421000506311241510713226171088191A1091432B1C1D1E1F015234252162462F1335392D20A4372A2253482E218356317192655648393A3B2FFC4001E0100010403010101000000000000000000000304050601020708090AFFC4004A1100010204040306050303030302030607010211000321310405415112617106138191A1F00722B1C1D11432E10842F115235233629272A20924E21617344382C2D225354463B2F2FFDA000C03010002110311003F00FCFF00F041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C10418208FD87B813D3E67F3C7788F3FC6E69363C22D6FDDF0411BB815D3E63F3C104286410153D460823760820C10418208E4027618208E7815D3E63F3C1041C0AE9F31F9E0820E0574F98FCF04119A10A936E5D479608525EBE1F78DBC0AE9F31F9E08520E0574F98FCF0410702BA7CC7E78208DADA0999B6DE7F8E08236F77E7F2FD70410777E7F2FD70410777E7F2FD704118A93C317999C10CF13AFBFF008C638219C72013B608232E03D47CFF002C1046694F0CCF38FDFCF094D4158006875877214CC4D4FD59E32C6132985EBAD1DBC7E9189A1DBE576B559DD9FA7DE0C2D0D1724AAA4545ABF8AC18553348A7AD1FC695F7ADF44E1946C9F53F76F5BC6C473F76174E33BB4F03024EB57AF9368DA3830E51803308511C2536ABBB6EC6FE9D1A366135E0FBF1DE92CDF335347DDEE075873FAB3873DD005AC29CB7F4D6B780E5F4D5A851A8FB2D5C6FCFDE363F973C309B988C092848E23661A353F0E1FEF1B1CBBF5AEA52806AD7954F9B1B391E70DFF567A9D7C397282190654A510010227ED1F523D3E3A0CBA7F68FE44CB50E2F95D8D8BEBB6EFE908AB3AC2766471AE623E4A8721E9CB4B73D7AC467586B5D2BA4A851555F54D2B3108594242AE1691B7849036DA2498EB6BC763FE0E62FBF335285B02145D07567AB3373E839C707F8B3F13F099FCB1290B41E0052E143F8D47E2EF1E7E769BDBC67DABAADECBA8415508529008E12384980678418B58EC46F7DFD51D8BEC1E2B2C54A331040053420A6D4D5DB4616EB78F1AF6AB1E8C5266709A17DA8E49ADFDF98A15D4F1A96E288FAC39726D6264FDE7974E5B63D138341C3C89686F942403B1259FA01BF3146BF11C561D4AC41535D46ACE2E3416D980B78C33F7B56CB87BCF13677208B0B58013EFE77E5BE1D4FC4E164A0103E602A5EA0F46E9EB5B45932826536F4DD9C352D4F3D2FB3D52AD755FC9CB69D6AA85405AE080831637111067A72BE2B38BCC82D570DD5DBF34FB545E26B329A26A101DC0DBCB6D7DF296D2692FAB2135D9FD5200FB41B252088822E08322C6FCFA5F112BC5898E259248B9B01B6DC8F3B5AF09DD10CA04B0BDBDDFCB5768E2B75F6579237F56CBC0EEC82952B8ACBE1B022790F58E57DB0B48C089EB97C60A9BF6D051CF2BDFD0738CF0B7ED2DBEBF58A8B526BFF00AE05C41924CCDE6E6F620C5C7A82011CBA064F952259494A49B3DC57AFD1875DE32C5EF4D9B4FE7E914E669A892E9971405D51B73DE4FF00B8169E78BD48CAC2C070C031353E0C4FBBD214960D6BEFA7D2AFD5CC57B9BE76C282A48264F31F388F2C5830A8561C0094150029CEB5B3D2FEE90B02458C5659CE748414107884AB8960CF0743CC103623167CBE79596EE94016DFA3DBC474D602A56FABFBB539443ABB50B652A4B55A16A0090D94F09932624F43E9E98B127284E3903893DDCB7625C9A1A3B5F7FB466F57751D1B9EF688457E7D9A212B536D0A74916295A5C2F728099244741BF4387185ECAE5929655FAC4F10A974B355CDDB63E2E7687F845F7038881A74156ADBD80C46AD1966479EEB3AE4D1D165F58FBCEAB852A34AFA112AB495A91C113E7F3C67138DCAB26429B1929D22A0A92096E4FAB69CD8690FD58B29038998F420ED607C5F4D23B15A53D8935667C935FA8EB5191D227816D347B97D758857DB061C0A68A45A08BCD8CC6397E79F18303226AB0982FF00E6785D2B354849D2A4172F5A13B46E9C6CB482490966E120BB1B9B1EB77F28EC2699F669EC9F45774E57D00ACCC1AB9A90F3A8950DD5C21445FEE0440C72CCEFE2063F16B2A9092949774049513D0B75BF4143185E669593C441239EA1F73A0A103520EF16DB35D9169D60B392A825A5A424B72A3C2102D75493EF323D310723033BB529EF714852384BB11551275D400DA3B93D22B79BC93982870034D75F00FD4921BF2C198EB9692092B4DE67C43A5C6D6B5B162C2F651583471CA4958005003E16BD3F310F2B2598925C103426F5F2B5B5BED15FE6DDA286F83B92823C5C478922236DCFC45EF893C360F1085702B09316C59FE617A060C77E40F51599C365533880AB01424569E5D6C4E8763F43BDDF9FCBF5C7C6A8FB131B1B6F7BF4E5EBE78208D9DD93B19F77EB8208CC20A6666FD44608239C1041820830410A1948215239E082377027A7CCFE782083813D3E67F3C1041C00EC27E38208D884004CA62DE7E5CFF0C10A4BD7C3EF1B3813D3E67F3C10A41C09E9F33F9E0820E04F4F99FCF0411B5B481303A608236E0820C10418208D0FEC98DA4CFEFD7E6704369C2A7937D0084D82108DEC6EAF4C10429C1046B7397BFF007FBEB85E454A81B375D768D54A2080CEFEDBE91AF1B2C0248D296E821DCA415F086277E956F0E9061B2BE57D5B6F7E71209C10500785CF3A0F37F1A6FAC7307A1F81C3757CA1EE7503D2B6E7CA36FD3357840DEBA79FE233458906C4EC0D89DF61CF1B494158E32A219CF0B78EFF0096D371A99A9927846B43A93CB95EBEAD1B0DAE6C3CEDF7E135E3E725624CB4A94FF28A3EDCB9F3DA31330B24CA33662920B7155B7D4927E9CB584B599BD1E4CC2EAAB9C42184A655C6A090A001DA489F389DBD316AC87B198ACF6721465AFE6503504B545C0B373357E4D1CCFB55DBEC2767E4CD4A26A78D20FF00700C40237D3EA6E0D23AA9DA97B41D332DBD41A6DC42570A471A162EA883736EBCFDF8F507633E14272F952E66270E1870A99419EAFAD5DC0D2F78F2376E3E2FCCCC8CD932672812541252A3F2935B0BEFA0E978E906A3D759BE6D50BFE3B50F2FBF512C00A5917BAAE9240B0E6664917DF1E89C8F23C248C3818591292500098FC2CA61435D983B0A9BED1E7CC7F6971666A973E72D426124024D35B39BBBD3C621A3307585FF002524A567ED106D3E666F7B01F118B1AE461928799C0929B0000E7561E7A97DAB0C5199FEACB1750258B9F017E6684EBCA14AA96B1F5B45995B951FDBE2E020C0E289E1BF5237EA31058BCD254B79682DC2E2EEEDD2B5D4EFE0DAAF0495BA8861A335EA46F41A915AE8226D94E87AE6529ABCCD680C7DA2952900F08BFD9E2927CCFEB8AD4FC7AB1130CBF9893D75ADFDB1A690DB80E1EA0B373BD036B4035BD3C21C333D4F91E46D0672361B554905350E18F09488175023D23F2930B96E2312B515F114D38433B5DDB5E437F28CCBC419CE92F6605DDC543DAFEDDA29BD41AE1350B50CCAA949249E16D1C5C23A094102DCF7F28C5830B904E5280E025C8AB352FCDFC7CEA215E015F6C3DEBE91546799EADC2D990191C45B5055C8E7304116DAF8BBE53D9A595259160E5C10CFEBE9E2D521962CF5DC5BDFD3C04573996A24B4140AED3D63EF31D07E62D8E9596E401013F2ECC1897A56BE356BFA1D420EA5BDF5F7F4AEF3AD4C1DE0E05C70F14DEDBF95BE1E78B561B23E2203300D417AB7974ABD342F0A2106AD5F2F7B8BC5719A67CE9E2217293B4131CF97E38B0E1F26C34A40330A53C357207DCEDE20C6C4117D62249CE6BAAD6696929AA2B5D7D5C284B2D2DD0924C429494A8226D1C513CAD384B1D8DCAB2F149D2828034701D86B5F76BC64214A4A940512CE5F7B7BE9168692F674ED1B5938DD5D4E5AACBB2E708597D6EB654942B9941215B6FCE76C737CE7E25CBCB5E5E194E5CB70D8B01A5B52CDE71AB6BB74BF4BEFEDE3B33A5FD98B4069B525ED515BFC7AB7C0A61A525D61348A4C158F0A8A1C0B3D640E9D39DE3FE2666999CD2995355864A5DC825D6F4AD886FB36D19FF74A552D2EA0BB8D49EB4AEBA336BADF946F643A6A8D34993D150D22109E14A8D3B0A58E1020F196F8A6013BDF7E78A86638BC7E6734CD54E9F3261FEE0A98906C2C0B1D80A51AE6012E7B01F3569BB72BD76AF4110FCDF581A4595F12AA03F370EF7496639A532019E805ADD4E12C0E439962A60E34288243B80E4022E59EC7DDA35EE26B5016AB0DF7E5EEB158675AE6951C6B7B312DEE4B6A4A9503A711BDFF00327963A7E4DD90594A0CCC389967240A1D74AD58C024CCAB8507D2B5E75F75EA22A8CF3B4FA36520533E85405719EF00EBB898103974B7AF47CAFB21C20BCB4CB048E1000DE9B5D80B1F4895C0C86204CBBD5F9BB0A8A50783F952FA8BB5C5242F81EE217809503693D2763EF1B5B95D309D9BC0E1C0FD44C9680003F3149D8D8989944992194DC99AF5D79BDF9161B0A9332ED3B38CC1C4B7468AC599321961D7449DB88A52A03CA6FE7189299FFD9DCBC12B992262AFFDA1DBA56A75F5893952E4FEEE14B269A0BF2A75D8C7D9F702BA7CC7E78FCE947D488CD00899E7820856D7F4FBFF001C1046C7397BFF000C1046BC10472013B0C10473C0AE9F31F9E0820E0574F98FCF0410702BA7CC7E78208CD00899C1042D47DA1EFF00B8E082327397BFF0C10A4BD7C3EF1AF04291B1BE7EEFC70411B304118A93C51788C10463DDF9FCBF5C1041DDF9FCBF5C1041DDF9FCBF5C1046C4366F0472DEDD7D7046AA4F13559A33E03D47CFF2C11AF77CFD3F98E0A4A6262F820EEF9FA7F318E083BBE7E9FCC6494F14DE2309AE7095AD4DC0F4D21ACC404AB702C767F7AFD9E32EEFCFE5F1E78C27121542AB50F46E9E17AD59E25B0880407143F624F87500F231AD41485A63633263D63979F581BDF0A0636ABFE7F36F48972BEED2598003A7ADE9785E97611E000AA2C009933E847E5EA6CA0C3950709AF536F63DB457B1D980960B1B3EBBF386F5A1F2E7795280D2904965C2425206EB27607C89983B637460B12B9A897250541440A026B4B5FCCE962D103333EC1C94AE64F9A947007F995AEFE837E758ACFB40ED7B49691A171BCCEA9BA8AF4A141A085414AD22D3DD9BEC3A73DAF8ECBD90F86188CD97266AE5514439526D57B37516FE787F6DFE2F4ACB53364C99C0B710042BCA8EFE1D0DA3A0BAE3B6DD45ABAB3EACEBAE3792A4B818E05F0C2153CD30A3CAEA9F863D51D9AEC160B2097C62524CC64F1929D980615D49D2BE71E43ED576FB17DA099302672D94A2ECA25DDF9DEF67D0E800A32B5C72AAB0A299C5960A8A9C5A964913E2B9513CE79F2F71E852E6CA54B1282412DC219852C2D7A6F60E3568E61370B880B3396A528383577AF89E7C8E9631ADEAC697C34AC8EF9C62CB4F0F1294544110482607979F3C44E331ABCA5887F9AE1D83D7F353E71159809B882020171471F6E648FE1A90F794E98CD7365871491474A2EB2E04DD063FBA08B4D801E5D442CFCF7138C3F2950068384925CEED785B01297214935040AB8B9D6F5D2BCF689839FC0F48B45197AD0F5554A4FD6D44F180A6C0E1E10A2A09BCDD3E569384F0F87C4E26612B4A88A312E5FD0BF8FF009B14BC406093C9CB83D2BD7A00FE759EA5D6AEB895A50E2D2992084A8C46DB0F4E9EEE58B9E5D9271315203D2AD5FE437D5C447E2809BC4003A7B715A5EBE42F151D76A72E71F78A22E4824C13D46F3E71B62FF95648944B0A080E68430E6DCCFADDB946B8190CA20861A1AD7C3EFD4968AF739D40D10A2B50B4F43BDA79F5F527618B8607260E9FF6C1377200BF20DB7F889054A0EA6340CDEF5D76F48ACB3ACF95C214D3A4F0C9E0130A9DAFB88FBF6C5AF078144A07BC481D40A6CDE9FCD635EEF9F5F7D22AFCC750D45495A16CFD58DE17DE7113CAC89E76DA7D4C624E4E270F852429495736614E47CF7D768C940A72F50F5AF9FF0010DF94E5B9FEA5A85D0657435598D4A9494B290D3ADA254620BBC3C2396E4623F31EDC65D93389810A55C7CC01A07D3ABB3788A4615F29A51DDC69E1E71D89D1BEC9FA82B8B199EBDCF13A5E8950BFA806915E5D418F09534AE24CED3CA76C732CF7E2B4EC68523289267AD2E95242FBB67E65810078F2302502BC5F28350757A93E7B1FB476974DF673A0BB3EA7713A6B25A6E3AA091579A3C43EAAE5343C2A4B2F051A7E13C93C24C99C73AC463738CD27CC9B889D312EDC3872A5349767F9C11C4F7A337AC60D0326BC5767AB1D9E9515A316F25D5DA83EAC9296F81A481012D8091FF4881B4DA3D061C48C9674FF009A6ACAAF42E6B5D5C9B5691A457D9CEADA068076B1CE052788A1C924A6638A403723A6E3EE7533B2B389419128A8387603FCF9D0E97896CB90851F98F2B0D3EB5DAA75BC5459FF0069542942D34E7EBCB4880B528D3F099B58C4FCE0FCAF5D9EEC84C982599C8E12083548275F3A00C452912E2549092431B0E74DDDEC35B750D14966FDA5D6BAB5F7CA53886C92D36DAA4B53361C175CEC378F22631D7705D95C24940527BB42884F12C81F330E76620B9153EB194CA9003900DEBBD1CD6ED53B3B18AF2A738D47AB5E34795B55656E12800D33C94C9B7FC45242779B93077E589350CAB2F9759D282807532D0F4D83DED6DF9C60C99360D7200602E4120BD9A950D123C9FD9B35B66E876AF50E6E720A65F0AD912DD49A94AAEA94A17C4D948EA39FC6859BF6DE5CB5AA5E58B338CB2CBE1052CF600B17F0AE81AD08CFE0C30534BE252838214CDD40FC01436689851760DD9DE429073DCCD39B3C800AC28AD90A2093221640B08F39BDB1589B9B67999A80968C4278AAE0A983F26B7DBC223CE2A7AA8A24241B52A0D59FEBE1A38896D1661A0345B6B190645423BD003CE3AE36F13C164901E4A888E7004DE7961493D96CEF1E52A9B889E90AB92165B4AFF86E4E408C9C54D724120D2C6FE1FCEF4DFEA0B813D3E67F3C7C448FAE1182C01103AFE18208DAD7F4FBFF001C1046C7397BFF000C1046BC10428640215239E082377027A7CCFE782083813D3E67F3C1041C09E9F33F9E082315262201E73B9E98208DC8FB43DFF71C10464E72F7FE1821497AF87DE35E08523637CFDDF8E08236608236B6099813B7E38208DBC0AE9F31F9E0820E0574F98FCF0410702BA7CC7E78208D8DA0C99B5BC8FE3851129730128492DB03F88D4A929604B3C6EEEFCFE5FAE345A552DF8C14B5DC41C69DFC9CC25A84414C49B1E584BBD976E34BECF1B42683D0FC0E144FCEDC3F33D9A08554E82AE29062D68F774F31EBB74223333973D2C532D5CA86EDEBC879C68B0E40F60381E3F6850503991EFF00F7BF2E9D79623E4CD5A3F7862DF6D6EFAFD62530A81F2922ADA1DDCE87DDB48E52D852D28304AE403C86D79B6D7FCB161C02D33F85D8BB3695ABEBE239F284F30C64B9328954C4861A9D9E8CFA74DF94346A0AFA5D334CBADA8A86509402AE15BCDA4D8490125533F38B5B173C164F8AC424193214BD5922AE76A55EC06DE11C833FED56030CA5F162D0821E8A50B8EA59AECE63A7DDAA7B49A94CA32BCA4A53671B79D6D4991FDA640133E47CFCB1DFFE1A7C3A39924E231D87E0EED890A4DDFA8ADBC9AFA793FE2AFC5299972C4ACBA7F7DC45415DDAF98A509A57968DCBA35A8B3BABCEEB5CACABAB72A8B8A2AE052D5099E504991E57E533338EFF0085CBE4F673865CA94084B00C1B7B9FCB6E1A91C067E718CED0054CC44C5A42854124924EDB30ADC784343D5A5B6437629779003C3C3BDC093BFEF9CBC9C7FEB4F0A93C06C4BF938A0B50EA79561A0C18C19EF0AF8F5F5DB7F0B7431BB2E4399B1197E5ADBA9754614E702F8403170A2909023CFD30E4C993844F7EB9A193F31147DC51DCD7D0E85842C31699E44BE10D40FE62A49A0DEDE57B0E934E64BA5984D4E62B43998B838D282AE2248BC5A529B5A481327AE2BF982E6672BE1C3C95144B35531170C0B1E96D7A42F2B2EC3A4778B5A49502458B36F5EB7FA9AC3B52768350EB6AA44C5234994A3BB29320587D88378EBE7732712195F67A6383310470B1729DCFD69F5EB0C7152E4CBE208502DA8F1D411BFDC08A6B36D4F5544438FB8A750F71142F8A763264090396F13B73C745CB324C31212402B4B3B80F514A11B8DF588552D6E785CBEDD357BF4D6A6915F663AC12EF1092679C9F988B753691E918B2272A5CB712A5B8A51987D4FAC48E152B985969246BD01A7566AF9440338D4895C70AC08E2913173F03CCED2475C59F27C2290969D2CA53A72BBF27F06A5A251587080080D6E54B5BA69BB12358AD735CFD6A514A572A13B193F0DC9BEE2E4CF2C584CE918541AA52DA9A9D3D2FD5BC635280D40C7993E30DF9465DAC351542A9F22CA6A2A9C5A9295BEA429286428D882B4049045EC63E2315ECC33F91282809E974BEA97D4DABA680758D084E8AB339DC9D3A5347BF28ECD683F65862AFBACEFB42CDC30530E0A20DF15EC4A4A9A544C45C8B1BF2C72CCEFB6B880A29C0A3F505D414CAE1E1AD0824D79B7F319FF6FF00B884DD892F6D4B6FE3CA3B2D97A748E8DA6396699CA695A0A486DCAA5212A5BBC0212415A0A916BDBE3CB154387C7E7E1588C56257420A52C7E4D48A5FD9B184D402E882585E80BEDD05B6E7AC36D7E7294A56BA806F24153A4848BFF4931EE03D7AE24F07947E9871A0998A0C48E121D9AA6E796E1ACE29A2A5AD3423F1AD36DCD7EF15E57EA96E902FFCC15A144C24130D81E7263E3CB98179895350A5241C39045096626C0559A8DF4D69191C61C90EF67A5BD9D2FE71516A3ED0D0C970072499E704C728EBCADBC8907170CB24C89A9038784B8D59AAD5F3EA06D4318214A366F114F7E315557EA3CE73E525ACB32FAAADAA04F70C06DC4B6E1302EE9414245C1249B832671699589C065724F7A25ACAAA1D497A6C2F60458D61591395248649A967AEFB1A59FEF1BF2FEC875667EE7D735BAD3A532F242843ADD515A39C869414391B89BDFCD15F6F24C99331380C195CC450000A5EAD761CDFCE1CCCC54C0A294925243B87E47E94E74BC4E99D15D94E97434B08467EF23ED54ADD718EED49DFF96A242A6368F80C404EED57687325A532C4DC1A4B8E04A78DC1D8B53AD2E23518D50354F15033ED7F1DEB47109732ED674CE4CC9A4CADBA3A100708E1A7694A03942CA267DF208DE775A56498FCCD5DE4D9D384C2039254012756240E54E8F185636610DC2A67E9A860ECFEF9C53D9FF6C152D9E2A3CD9FFE7717136D32B7A609800241088BDA00DAD8B764DD98C065EF33319885BD7E7604355DC972FF0047E6CFB0AB188A4C3C2D4F9B5AF33EC88AFDACDF5CEB3ABFABE51936659938B5405A9A7E992A2A3FDCB404C5F798138B0CCCFF00B3D948225A641290593C4870DD1CE9A3DC0D61E1C3C915E201BC6E2EFA0E55040701E27B45ECDDDB3E7C84395D90AB2AA65805152ACCD9594A5512A2D1701300EC47E00D6F17F19329C29549C3E152560904014D6AECCDE7472212386921CF186D6D576BD5CEE2DA120C7D69E3E0F47D6C80807700FAE0820C10460B49511161CCFE9EE8C1046D423E1F7FEFF41E4410A020FF00E91E9F8608232EEFCFE5FAE08237349E124CCED8D16680737F2FF3030370F1BB0946186C3C840403B807D719722C488180B0020C62061B0F28C929E29BC4608CC65DDF9FCBF5C1041DDF9FCBF5C1041DDF9FCBF5C1042AA64F09573C1042AC104182304034306081850B5ADEFDB4189CCAB32C3E102C4E0090000E1FC8B7D9B9C6ABC14CC5074288E1B73D3EC7C6FCCC218F9F2F18E25D097B36B61B59F5E95B335C89987352FC2EE0DDAA0F27B6F4F28E201DC03EEC5715964FE22A0A535C162037E0FD358C271A38B8483521EAEFE0C2DF6D9A081D07C06257053460C8EF403C2A04BD2BA8AFDEFEB137879667B0142C2C3A8B5396DADB44EFBD50C42984CA3FF32C3DDC89B1BDBD0DB12788CD70F8C09969949530201A6F714F0BEBB46D8CC30C2A4AD6A6D6BAF83F3AFB7E02D971B554D43818424712CA884EDB8F1116B1BFAF2C2723B353735534A96A1C4400C1E87A0ABEBB522A599F6B30B964A513312E906EA03C6FE26FA333C541DA0F6D7A674BD306289E6DECC21C4852553C2A168316E9626FD48231D2FB31F09B3099325CD54B99C2483549EA2FE3F5611C1FB61F14E4290B44A9E051428B048F5F31E0F531E78F68FDAB679ACEB5E1555CEA69829412843A4002F000491E86DF3C7A7FB21D809597A658C4C80B147E2480777A820E94FE44791FB63DA2CCB369B37F4F8B98905DB8546E6A2C5BFC6E0353ED39F5BEF50E71252DC0EF56A51E2264CDC99F75F1D824A30B95202644B4CB7150960ED7B0D3CF9C735C160B1656A56653173C9248E304D39151D5C3728D0D507D62A52CD3B6BA92A500549E2013B740A1B99E7CFAE23F1D8F95381709D6A6A75A134AD1AF577D8C4BA42650F91013C3FDB667D1FF001A88B432BD0D49414EACC3397D219090B0C2889E662C67CCD8F96F8AE9C61133BB9293C4AA822C9BD7C5DE9D21B6214A52439A0D1C543F3F4FE6AC79CEB3628D2BA4D28869829052A584A7888F252D3C5C8DEF688C4AE1302AC510AC5A9534E8092914E42F4A795223A62969712FE471A6A75D68DECC55199EA1A9796A5D538B150A278C95920ABFD227840B1FB3BF9E2F794E12522584942526C01001A35CEB4A353684D336711C2165B9DA8F4A07D5EF468AFB36CE5B85294E78AFCCC73EA6D6DCF962DD84C12569E14A472200A5431D3CFC7946122613572FA93720DEFA3914E422B1CEF3F70777DDD484B7E20E34471F780EC02BFA63A889D8733896C3E4F3259E304EE4B353C1CEBCE8FA448C8420BF100C3EC06FF715D62B1CD756B6959629E9781D5482B0E05993009E1F9E2C3231185C394F7E525290DC2435854BDB6F06A8B44B495CB9690C90EEEFA6BC8F2F58D794E88D73AE1E0C64740FBA0901EA93FCB45325C363E20028104CC6F1104E18675DB3C0602504E1D32C5083F30736F122D63CB91DE74F49D406B6B4F2DFD3A34766344FB30E4FA74379BEBFCED35B54385C145DD9042B7E096D445AD7237B75C726CDFB7B89C428A70B2C94A9C779C4C13CC03CFA7943454C4B925437602FE1717BEADCC98BF69DEA1A1A3728B4BE594F454CD25282F169A2B7922C93C4B4858889306E0ED338A82B133F19342E74F54C5BBA6A5210ECEE01634D08A784325CC592529A03D2B7F2D7EDCD9BF88D6D1F7AE57B854923ECF140883CA63FF6FC394E60F2B13C0E22492000C08776D75A7F8864B953947F716B9DDD8B337ABC40F35D4F4AA538A6DA085A64874AF842226E12A0019F5F518B5E132B97804242A604A1603A08A9AD43E9734F2890CBD1C0FC4E4D402742F5DF76F74A8339D7CC07974AE55BB5EE9202596DB5C09361C4806D31CEF1BE2CB839397280485A11C41CBA85FA13E5B3BECF28426EA0EDCDBD61137936AFD4AA6DBCBDB5E5197BD77EADCE17613C8842E15617107CB6C2B8B19561105969993B4484D49D03D58D817D34A46532788B80C3572C3D6BEBA7521DA97B3AD1F912BBED539BA351D427C61B334812B17E1250A20DEC6D163EB8ADCEC563D5296AC3619724A8FF00B6A0EA7008AF0B6BEBBC6552D095014551EFF7F5D59E8766FCE3B60A3D2FFE4720A0A4CB29D00A1A6B818A85D504F475482B411D4193898ECEF67CE7EBEF33698A42E5D415CC32C3171FB78922C36D9EA63454C42414801376D58F53CCF872678A633BED3B51EAAA834D4B479834F38A29406987DD696546DE24365B4836332201F762D98BCAF26C9C30C44998A483AA43EE1DEBB35FA930DCCC4A9D400246BB8B73B7873BC3B651D8F76C1A8D21CA8C8D54744F416EB975CD71F02B752A9F8829300FD95004F316B56E776E72FC14E54A46150B5208621373D598BB7A8DA324CB090428125C10D6F4B45A593FB2665A809ACD59AB0D42800A732F148B49EA51DF2147E37E4646D86B33E2662F8BBBC2E583855699C403529429B83A75148C254805D469A5363416B1D06FE962651D96F64BA5160D268D6EB2AA53354ED738A0B52765774E7104ED31104F2DB15BCCB36ED0668A4CC9B982D085391282384240AB3A59F6DEDE08E2B1219A586291A7D37A6F5F48B21AD48E65F4FF0057CBF2ACBF2BA303847053D22D684C58F106F8C9F7C8F9E20D7964CC44DEF67CD9AB59673C6A00B07FDBC5F4E9710C3F578866EF0B1DEBF588F3B9BAEBD6E29AAF5BCB0417525469D289D8004A527A1816F7E2464E5F2C30984166009009EA4FE5F78D3F513BFE6AF323E847E23DECC7C878FB35060820C104668483337DA3DF82085A845801CB73CBF7C86082378481B608239C104184E669E3F6820C27041820830410A69D20F1126361820855C23FBC7CBF3C10473C00ECA9F77EB82083BBF3F97EB8208C8009993BFBBAF9E0823991D47C46082091D47C46082091D47C46082091D47C4621F3113411DD922EED57D4F93B1D59E257018A972814AD9C8A39A16E5E2FB738CA0F43F0C38CBB106510269AD1C973776A73FC6B1A62A4271615DD01E06FE3CBDE91C7BBDFD316B463642D2CC38D8598EDA7DBFCC404DCA57294555046B5372FBF5B0E8638E24FF70F88C4762B013B141465A4925D9ABE81B4E9CA91B0CE64659F2CC58043072469BDDEDF7860CF3525269EA735D52F30186D2A53895BADA490279150240E606DCE3161EC8762B1D986251C52E61054E070A886B9FED6E9BD6AF143EDAFC44C24890C99C80A092C428072CE351D2BA79C7457B62F68A73375BF95E9474B4471216A6CDBA13361E97F4C7ABFB11F0F4618CA3889628C4BA7EFE75B08F2176EBE22CD9C26093394CCA145EEED626FBEBAD1E3A69996779ED6BEAFAC3EED43EF9256788A8B7B9BDCC4836F98C7A432BCAB2EC248484CB40EEC072120396AE9A757D3568F32667DA6C762B107FDC591C45AA58392E0BEACDD3D21BDA7F2FA154E64EA9550B8E1404A892A2622124F5DA06E3918C298DC44B961E5A512D20162C34B52F5229C9DF789EC8B13DF9499EA249209E2BF874ADABA6C048B2DD2F9FEA073EB4D27EAB9332429D5B812DF78DAAE3842A167C3BC4C03E726978FCC53326A65713A96EC12EAAA7FE4D673BB06B4587384C94CB49941367A36DECF5058D584E4E69A774A52F7394B68AAAD4A48754A9B2E3C5754F3FED36E62C30D6565F89C428F1A1610A6F95DDC3BBD2941E9D62AEB584D8F12AA09EBE60536FBC5699F6B673325254E3CA6FBAE2E2A70484906C048201B7FB5F169C0F67E61E17430A3121CDDB930AEA5C4205D4E4D46BC87BFCC54B9BE785D5A8B07EAEA932A9DFCC93113D245A7173C0F67C84A68C056C1D8F205B91F1A3C375CB7341A50FD8F5FBF5884E699FD5AD0DA1C8847142D2A04AA44CF86E23CF9F5C4A4DCA972787802985E9D35FF00378564C906F53A8A55AA3969BEFAD4D659C678E1529216A2ABF824924DF95C99F4F332379DCBA6A70AC66D367274B97366AF9738597213AB31140DB7F25FF10D195E9FD4BABDF5D365740FBAB94A0BAA4A9086B8F9A4A841041E46DE5CA4719DA5C1E1E51056805B7AF956A29467A79EAC6C68123414E5B54DBC394762344FB346459625BCDF5D66A0D4D9C6E93BA2AF172492DA88DE05E773D231CA33DED5E23133169C04854E9609E29817C3C2E59D8D09D4FD890C999852FC4A22EC2A6DF96FA0D62F7A3CCDBD2ED2F2DC9B2F62832F74043354036B5D4A50224829E3470EC66F27E15F91819B9B28CEC4297C52AA904A83137700D40E6E28C1A1133D75483C40B798DBCFEAD0C55F56D289A9A86D554E93214A754900998F0CC45EDC8C46155640FF003214E454802C006BD3ED194951503A9B87DBA52C1E83A8311C5EA4038C38FF007684CF7680809088E448DFCC9E7F0C208CB664999549D1F7A727F7D21E4A4BA8248626C5BCDBD9FCD51A8F54E7755589A5CB10E3E952A09424A80E57201DBA74F2C59F018D561E850CCC03FAD4DDFAB3D2241186E3B5199EFF009630A5DD179B6694F49519C560A1A532A711092A701024182088DB6C6732C562B31E197870A2514570DAAC45474EB5368274AEE1228C2C74D9B5356731B54AECFF0046B25CA6A0A7CCAB523894F2AA01525606E1B5151372791B817DC8C60B2AC62B87BD9CB96C352479D5F416DF9C240BFA1FC7F9EB102CFBB58CD7345A32AD314350F553C4A1BA56A95C4366E213DFF77C207424C74C58F0F829186509B3B16898A4B9659156DAA4D033DFC2360A2011E5CAAFEB1865BD8BF6A5AD9095EA0617A5D959E21506A5BA92A49933C09585260728BF2DCE1EA7B6B96E01250252710B45199813B71330E77E718D9CD0D5EFE3EEBCA27D967601D9E64C108D639B1D4158C90695052ED3C2EC5CBA150676932003D23142ED776CF34CD8A1394E19783624284924B8A307481CCD183F388FC6CC52280EC47E3C770FE348B8B2BA8D3DA5E9114BA7A86872EA74240495D3B358E2D226DC6E214B13EB23AD862B3864E6D8F081994C9F420875AC1AB12E1D8EF0C0629490C1C13D48600D395EFE50D953AA1AA8716AA665D65D905D79BE3E07093E129680E04C5AC1201993CA2E385461658509D350B0C004A800400198A8B957992D7D635FD612096AEAE5FD1B5ADBC5F44C9ACCEF30584B4A79D4AA3C3DCA933B40E22981EFDFE58D978FCB70C4944B4A9B6200240F07AF2FA467F52B7DFADB56E5D474D6B0A7FC2B9FD514ACE524857DA75750968A3A10851133CEDEFDCE23E767F2E6B2508091A1150DE1D18EEDABC67BC330D284D087BDBD34BF2EAE6D7672E389E3ACCDD3978DD48E10F01CB70A8F94EF86ABCDE6A52552D0A98480750F566D9C0DBC63520BDED42297F7EF7D4F68BD23430735CF3F882893DDA50CAE9F808FB576D438F8AD726D1206114E79892549549286622AFE83C7762488D8D855C540B0FBBFE0347B95C0AE9F31F9E3E55C7D9E8DADA0999B7CFF007FA608236F77E7F2FD70411B5A401337DB718208DF8208304106082324A78A6F1184E669E3F68232EEFCFE5FAE138236B68179BFCBF7FBE98208DBC09E9F33F9E0820E04F4F99FCF04107027A7CCFE78208514E002A8168C1042AC10425A80094C8B4608213F027A7CCFE782083813D3E67F3C1041C09E9F33F9E082324D10A93C72AFE544004DE76B741F8E1DC8C3A2783C407537A3B01BF37F37B44E3953D2B4997C4CE6D6DF4FA6BAEF0E0DB8FA07748488800C807CBA44F337DCF28388DC6E0D6853490E09A84835666A8EB7F1312F97E3C480F38B505C80E3CED4FBED1A5F7174692BA9521B61CE2EF14A2910123DDB091B73C3DCA329C5E226A3E4590486A12CE45A9CC72DF410CB3EED66070D87983BC9614124FEE48D0D3AF2AEB1D79ED47B63D37A5E9DE672DA943B570A078566CAE7CC8933CB6F863D15D8EEC1CCC70477D289A24D52FB568C18EBE2D5AC794BB6FF00113B954D32A707054C12A1CE9473F8B3D5CF40F5FF006A59CEAD71A43952F21849761A4BAA48712ADA4248DB9C83E5CC63D43D90EC4607289056A909E32126A914A54543F3B9A3758F2DF6A3B7D8CC7CD5253354415100859347B383E914C54BB534C4AD973BA0ABAB888515493375C1BDFCFDF8B96225C8C24AE3949482DA5096D8E8CDF6778A32F173F1A499855F31AB9A52BEFABD617646D56E64EB8D6574CB0FACA454542C1291FDAA01620082660F493D2A58CCFE6A55C090404D1C3D2E6A35FCDE3072897FBEE4B3E9FE2BD356DA2C8634C69DC890330D50E22A6B40E36C724AA398448F2BF2DCE231798633174758E226B52C05F4DB4FA464BE098A0971564914277F53E8F0C59FEB9398A1BA7A750632FA4E24D321B86CA81B10AE182AE51C409BF217C5A3B3B94A5466CF5CA2A9931B88A9D56B33D07A56F183984DC480164B25E8F67ABEF563D68DB1AA735CE91255C769EBF39264FDE791B63A160F2C007EC0E7968CE0FD3A728DD0AA9737667F7FE62BACE738010568584AC025299BABCA79C5FF002B62D183C081F2292C926AA6019B5E74F585C70A5882F77BD7F0DCEF155E67AA9F5AD6DBAB0CA45B912AE5B8BCDF95F9C6D13D25183C3B1510784B5D859DDBFC7842C9009259C8BDDCD051FCA18E91CD439E3E32FC832EA875D78F0AEA8A565082A220C389200BC83378DF0962F1F824216A98B425206A5209A56848B51D88D2F028F7601259DC74D7D6DEDE2FCD11ECFAE53A919CEBCA80F03C2EA59B022D37EECFA4D8F4C730CDFB49266AD72F2F52A628062405009BDBADBD7A616B143B8717AFA534A55BCE2FC6ABB4F644C228B4FD3329425212B525B485022C2545215E867EEC50B158DC5CF980ACA96A7F94D58576B12DCAF7686EFCEFE2FEF7861CCF3543AA2E3CBB7424C08E8240B7E96B9C4E65B2573B87BC04715E8C0ED41BF87E74324AEA5C9DDAF6D010F119AACEA9DE6D4A4284B1C50A5287849E8933EB6D8E2C404BC0002628049BA451C6CF7FE29BC09C3D406A93434661CF42DE3D4DE0EFE7199660FA9965E5D409212DA5B2916FF58106C2E6479CD8617958EC19708940391FDCEFCFD61C264A87EEAFDEFAE9E75BF5C93A7731AE5A6A334CC5BCAE8A98F12E957C0A35C954784AF88291C3039DE71B4E5CB5292997244C2B70482DC1B1E6CEFCEE6B0FA4C804B936A8D3952BEE94DDBF34ED0720D3ABFE17A572952F3357F2CBCDA1CAB0B7088064B6B489DCF8A3AC61EE1BB3FDE052F198A4774AAA65964B001C7CC0825835361489044C9690C181F37E5B5ED6DEC68DAAD2DDB06B30CD4552065F973D252FA9DA76E1B277EE8A924100DEC3D37C6ABCE72AC8A62E4E19231539D94C951029AA8022AFCAC39435C62CA920B7D093BFA379D21FF2DEC4BB3EC9168ADD539DBD9A6683C4AA64A2A0202FA12DA94D913D3CC6D1883C7F693178D98512B07DCA1569BC605D8FED6069615F2AC4705A48E251A8FEDF6DBBFA74B0A92BF2CC98219C972E672E60C065D1469AB71F8B4951694B6A37B91336E711189C0AE7A92A56348A12471D89157655486FBF4D04D2096B1B0A7E35F4E70F02B7516663FCBA1755C768314DE83C5C200E5B5B0D8C99787078E626601A8AD87224B7BE507784D002454F3DFF003BF28C17A1AB73458733C6DBCAD283FC950A843EA7A7ED4F0A8F0F0C73DEFE987D82ED0C8C220A25484CD5D944A4023A15276FA0A6B0CB1838882B0C3A8377D06FEE90E4D68BD2796A439559877CA489293C66E04DA146DE5E76F2D3119C62B1CAE14E15287A382353CBEBA4302DA17FF34F4BC64ACCB4750A0F754A97DC16061420898DD379E968DEDB61AFFA4637145C2D487B3F3BD29D5C884F84EA3886E28DB0D2FA0B08677B5CE60CA94DE5342DA132027F968317371C49E912461D48ECC82927118863A82E3D5F71EED19083606BA52D4EA012DBFDE1BEB351EA0CC0215983A5A0890D25B084833733C040F59F779CBE0F24C14A1FEDAC4C7A17D1BA9B97BBC38972D44BD9B9FE3DB8863A8CCEBCC8352E0106D0AE9E768BCFBFCB121FE8D216DF28045ED47FF1FC428401AB9E43DFB6D21ADD715557AA754BE01E13711CCEC47C67AE355E4320B1041BD185BEF6B51E8CD180CC5CF41CE3E827813D3E67F3C7C7F8FB3F1B5B481303A608236E0820C104182083041060821553278B88CC6C36C27334F18215777E7F2FD709C119A1004CA80F5FF7FDDB0411B3847F78F97E782083847F78F97E782083847F78F97E78208CD20098333FBEBE78208CB04118A93C51788C64249720381730463DDF9FCBF5C6AE096D76F7D63608529983BDBFC5E0EEFCFE5FAE1512A61B24F913F40605A4CBAAC30DFF003B41DDF9FCBF5C2334F73599F28DCD3C77AFE37AA299A859E14972341527C89B7B78534C9525445E1504988100733FBB4DF082317316B12F0A0CD0A2C420D9DB40E75AE96A562630F2F2E97256BC7CF97228E9EF080E79390FE1C9B788CEB0D5F41A5A8DCA875E6429092A20BA806403C8999DB91E5B418E89D9DECF63332988E3C32CB91562589E4CD476BB53998E3BDB7ED465D97226FE93192D7C214DC2A1663B135DEC6F56AC744BB53F698A9CC94D65794ACA427BE6DD5A0C8BC817FBAF8F48F64FE1AF109532661D8FCAAA81D59CED4D0D5F58F1AF6D3E27634CD992E54E5A9CA83824867A7D7C868D1D42CEF3E5D73CED4D7D4ADE75C5710495120711FF00EA039FE938F42E47D9A9397CB4012C7CA120BA59B9D458372B470CCC3B498DCCE61E352C827576AEEEDEDF788655B952E3EC968294F2CFF9742415711D8F144C0DBED45FE387B9D66E9CA6584259D42A686DE9BDB9C37C265E9C5152E62C39AD7C4EA77BE8D13BC974066F99A5198EA17052D23403810A521329F301493CB68B4CC75AB4CCE958B484A428A967E54D58BDDEE282F5E5D1E9C2A247ED62CDE8DCFF0005DF61128CC7566579553232BD38C349718053595090388923C264893CEE955BEF7182C82762662A6E25C216C509290C96B8A0A9DDC437562D95C201A5E8E7E87E8DA3EF54671A8D0B5A8D73E5F52893E2511C27DE6F1D7A7CEE380ECC4B29042028581671CF47D0F23D2009FD439340AB3F8374A6BB5B940B31CD5A4C2997070AE7C01511E9E5EE1B7A62DB97E59FA67404301C3A0F32E1FC7A50886B3F08B92C5150A3A07F56B6CCFAC40335CD9C4F100BF326401E46F1E9EA316294844A0EA4B3022A2D6FB7D6D1ACB1301AA4802D47AEBA6AE7ECD15DE69995556D4D35252A1E7AB5F2A4B01A6DC713C52012B294A929DC594403060E1862F389387491DE253BD406141B8A8D39DA1E4B06A542B4BFE2C0DADE9170E89EC0F36CD4359BEB157D5E96CE21B252494EF10D906E2D713F7628D8EED580B992A44C2B58B241372E3F75A8EFE778792F800F98F08AB9D69EFDBC76068FF80E9160506459730E180976A6101482810140AD24C9BCC751B462A1986698EC54D96662662D21D9292A003E8598173BDBCE23F30C414B7764177AD2FBD34FAC26A9CF5B7C2D352F29D4A859B014902DD45AC23F1B4E2532F94BC40654AEEF89AF5D28E5A97FB8BBC45A264D591C454403CF9EFCFEED588CB953474A8A87DA4C950920927840BFA83B7BB6DE313B23279666A42D21DEAED762E5C359ADF4899C3A09038B6A6FB721AEDE01A206E664FE6D59F56678F854A8309200927E7D24DBC8624274AC3E15C24A681C00DD69B695F21BCACA93C4C4DB6D9BA69FE3687E7B45505232D57E6F9A8A765292B5309256B77994F0A145423CC7A6F3881C662138C981082FC27E773C2C0D475B579B43A4E1A5862A2036FA9F37A368DBEF0C6BCCF35AD7865BD9FE9E5BC80425CAF765B027FAC77E913CF63CBD063051230C92A54E48091F33548A5A85FF008B18D4A253965060ECCE4539BFD4D1D8C3E9ECB9FAE432FEB5D48595BD25596328E22B3B9471D3AFC3130277D84E1A2FB45DD14FE9C7788018AE8967A588721F97F0D2694A49F99B60E45AF725DABB7D227FA6B4BE41A711DCE95C9425FB7F99A86CD471AAFE206A10AE199EB691888C6F69A64D2518A52E6CA49F965A54A9652F70E92FCC68F4869FA9E0A8FDC054DC17BDDFD37D61FABB4AE7B5EB69DCFB8282957C45A79B7D0070FF0051EE5A5262DFD247BA766927B6B2706152E4600AC1038B89D45BFF005281347F5EB0DE6624CD62A2F7602D7E839B7918E5BCB343E46DC9CE0668F0FB4C2E9D6140F3016AE2927A8E7EB25A623B513F18B213853281B10FAEE3847913A7584DD2F715E7AD21BC6ADC9E914E0C972B69852A05429C21D0E47D8E10EA484D85F86DBF4C2F84918AC6AC199314800B8BD1FA5E9BB585E91B8243B6B786AACD4EF541934AA120CF7083EEFF00869171CE2F8BA60B2247085CC9E8593A294000D615569FE37813C27FBB6D3DF99D8B88630F66398929A3A6AC2763C61F0049B01C6047BA67D7066392E1528044D948D7852A492B6E8AD07F26129F2EC01E2B3062C0BDEC3C284F58DECE8AD61527BD6E914B46F0E3C94C4DAFC4479741F2C44CACC70B97100AB8DA8C0120FE29CC4371289B1DBDFE37E50E88ECD757558E34D332D773757154D39E29E775CD874E91B61E1ED8E1A538EE540A87CB425F42580A78D77D633DD172C41B569FC736BD4B73854741EA36C774A0CB6A00ECE30AEBD0C0F7DFDE30D2767A8C602CA992C1D4254E1EAD40F5DFA467B956FE405FCFDEF18D3F673AA9EE33C54EFF0040AA8A747044EC14ABCF2E9F2C311DA03972BE554C98146DC0A16EA0EA5DDAD6DE3432D40396E61C13CADE31ADEECC756C1229E98EE20D5D34DBCB8E3A6DD646D7792FB6CE2A8586A97496AEE18743E71A80F6FA81F5863ACECF33DA28557B494850F0065C43C6DBCF764C6DCC5F962630DDB01378B8525811C44B8EB7B5EDE87508502035DF51A728F7531F24E3ECFC6C6F9FBBF1C1046CC1046494F14DE2304119777E7F2FD70411B5B40BCDFE5FBFDF4C1046DE04F4F99FCF0410A69C01C51E5F39FCB04288D7C214E085235B9CBDFF008608C100DC03D635E08186C3C8472013B0C1030D87908E7815D3E63F3C1030D87908D8DA157B74E63CF040C058011B3815D3E63F3C10307076B78C668044C8FDFEFF0076C6C2614B2407E2A01D2BEEDB3C359FC5C40006A6F4D05DBC2F5BB346785D385A778A21EF7E9A13A7D99A24E44B44897DE2CF152C6F4366A90DE16AC1C2AE12A4C42374F320D847A794EC6D8D6667327040A182D5616D5DC59CE9EA219CD98BC61328A4A454055A9AF8FA3D1AE212BAB65B6D550B712D21B054A2B206DBEF122DB7218CA32FC57699918696A495020F00DDDADF8262B79AAF0DD9D44CC5CDC5051038F8491FDB56A9B5361E4E2284ED37B7CCA34C5322872F79B72B569752A29503E24881C88E7D7A5F1DAFE1A7C1CC561CF7F8C42A677842871A0B5CEF414F3178F297C56F8BB88CD8FE972F9C70DDC128265AC8E236FED22ED53D4F21E74EBFED6732D575AEA33079F4B4E2D413C2EAC24024C084900F291BEF8F567677B1785C0703E193403FB6D4D4355F937DE3CEF8CED26678B2A13B17326715C9528D198EBEF6D62A879229525C2BE2454DD3C4789422E7724CDFD79C6F8EA38746130E84A1084CB54B152183BDBEBAF9B522BB89526629D63BC7724AAAE75F07EB42F7B99664398E67529552214585195A9426C62FE2DA2F61CBCED8431D9BA2524A1243B338D7C00BD9CD8BF488C561D0E78500381E0C5E963EA4DA2DCA4CA74F69BA32FD429B5E6CE241610BBF8C0B813206FEE33EFE7B99CCC466B8860925292DC4347EBD3F11A80A940949290A34BD750EEDE8FB8AB18AFF0039D4F9AD71719CD5459A3121AE05048206D6410761F9626F26CB1485238D1C5C2DA37D07DD8B6D7D54B529DCBBFF0098AD6A3306D0A78D2BDC2DA2EA59333EB26E3DF7E5E7D37098796108050EEC0066AF27B0FBEF184A52028ECCE2BE15F637DC57F9967F975538B69F05D7A4C2C15244DEE427A799F5107162C2C9320278260969B94B03CDF88DB9D7F11BF100CC1D85DDBAE95DE20D9AE6C9A3E04345556F5448A6691C454D907621326E0F38F888C482F1B85920AA64C4A5491F35871B3B16D0D05BEF0EA414AA93038A54BB0A6C74F3076898689EC7F5BEB379198662E9CBF29242D69742012DF41C5C2A88E979337E543CEBB628904C994388A9C24A6AFB59FD5857A8859425004200E26673D76FA3116F18EC9E53A6744E8869C672A6587B30E148AE79C4F7AA2B47D828EF02B809BC94113EB8A5946619C4C98B98552D0B6E1AD3CC1F4FE59152411F2B12474AECE35E7EC21CCB54B8E9534D921A1221321201E8040F2DAFD2F187527B30A92F38CD2B53394B17D2BBBC47AA5CD24A9C9074B54F4A5BA6E6230E6614892A52DE879C32DB241FE6904C82B261113CFCF98C4B610253FECAA504B515314038E6C4574FE630241511C639EF7DEBE875E5766AACD2ABBC08711F524A8C02DA7EB5C5B6E5B0787DE47BB94903849201252B53514070D7C286B6E8FCCA889291FDAC5C31A13AF5F752F1B5BA3754D97EADF729694C71250C29F5D6CEC0A100AD920F2816E5D62F1799F00A2824070EFE55EB4AD4F8C3A4100304D5B7BFB7261D6974C67999B61DC932D4E9BCBC5D79DAD48A979C4F350A273F9A9BC8E1099FC2B589CD0AE67019C78D40F0B3905AB734AB0D6B7D62465CE64BB0005FC6CFA9DE9D00892E4FA1320749152E556A7CDC91DD553A8A8A1692B06F2D2C06A395C006E7D21A662679F9C4C082788F0F10268FA82F56AB55F90A35C5CD247CA4B52A2D714B7B689F2321ACC9A9C9CE730A6CA68801C148C32C3EE2D16F0778C8E3498804933798C3246266E20A97294B98A059414E90347A96363E50C8CC58001554BF51E2E6EDD3C6191FCC743658A2FAF2071E7D5766B5558F2FBE527ED1EE1455C107900266061412316B981427F0CBB997C03415F17A6BE75867366926A493B1A37D6BE5D06ADAE76859DD52CD2E474EE32C1F0A51F538001DA5C53408B79F9CE1C7E8A42D7C5318AE80FCC2E07FC41EB7DED0D56B58D68795AD478C469BD61A865EA97954284DCB86A12B94A8CCF76560A607288EBC861F4A380C229A64A0A245B878812D6259BEFB5A149014A075B6B56D287EBF57785AD681A3A24F7B996A843AB172C7D5D33E63882C9E5D27A635FD58529A5E5E9087A2DC55F56E17047DC690B306BD7663F58D4F37A3E9212FE567315A6036EA5F71A8237242779E876BF5BE674DC4BBC8986504B12909041A6ED46B0F3E990A2976D7F98DADEA6CA6800FE1F9421881E12A577845EFF6C198C20BC562D48E05AE62C30B122BEAD56661F88C0252EC5ADB69E11B5DED033152404229DB4806006184904ED278413EFDADCF19C26055885BB4D26E5E62C8A6C0F8EF734A46C662CB39B72F7688C663ABF50D5CF7550100FF006F0276EB045C0E87160C3652400E8A0DEA7CEFCADAD76844A1C92F53CBD2F11A39FE76C294AABA97561CFB1C2E28011B93C26FE73EEC4B48CA9142A969F14026FD2C7E96178C701B7153DB307AC267351D6F279E33BAB8D667DE5437F8FBB133232E9691492936B20680727209F08CF07FDC7FC5B5EBE7E6DD51A96BC1003EFA45FECBAE0DEF78541D8753E98CE232993359E4A054D4A053500B03BD396D0DE70502DC47A837B6A0BFAEDA426FF1357EDF58A983FF00EB391FFF00DE18AB2295A4A4D1EC903EC5E1100837BB6F7D353E821C6875A673421C55357A9A0A8E34BC03DC7D000E93C31B1E1DFDD76537B3C95824CBE1356091C3BECC096F5F187D2DC3B726A3FBFAD63DF2C7C938FB371B1B04CC09DBF1C1046D83D0FC0E08214D3A24AA645872C1042AEEFCFE5FAE08233420099501EBFEFF00BB608236708FEF1F2FCF04119A4013041DBF1F3C10A4BD7C3EF19608523058262013BFE18208D707A1F81C1046E6904CCDB6DC608236F77E7F2FD70411B9A6F7B13B6C0FE1FBBE0823670A7A7CCFE782063B462B4C0040317F4E5CF12783C3226254A590E03B1D99CF4FBEF1B15A1287203D6A5B7E77E5E20F2D720EC715ACD7309D2667732C1370C1EA3766353CADBECC82D7C454B244B7724D9AE69AB72F1A3430E7B9CB792532B3075F69BA7610A53C95BA8471003601441277DA7A461FF66BB298EED06253C4898CA5025D24DC87D85B67B58C577B53DB7CAB20C24C509F2FBCE134E201884F22EDCEEDE31D13ED87DA357982DFCA74D3DC05054DAD4DAE4133133B6F3CCF3DB6C7B47E1C7C2C465E9933A7CB0AA24974D281ECDD5B6F28F10F6FBE2F62F37C54CC34998A12F8949052A2C41A587837956E7A559EEA3ACAF792F56BCE3B56A52D49F1120124F99178DBEF818F5065B94C8C3CB0992896942000484A68E3C398AFD8C70DCD312A528CF99338D4BA91B390F7353CB7F186A6AAA9EA15C35C897366C4493681B0FD70AE33BBC2A7E42900BD38478DF9FBDA253882A62E41A3EADCDC8736DFF1129C934557672B5D5BEB0CE5F49C2A6C3D08E34AA09E1E382A8E71276C52F1D9BA04D1292BF9A61200487A8A55AC5FA5BA43D94492EC40D79FDA9A743D224798EA7CB74ED31A1CB5082F2014A9420C9D89BFCAF78E57C272F018AC5BAC9514962915A0EAEEC40D7587899695330E44F9F9D5F97845319CEA4556540AA75D5F7CC9596D209892798109DA3E4479DBF22ECED38E6A6FA9FE7CBAF9C32C64A0804B8A55F7045075DFAF3222199A6A4AECCC776FA825B48804285E0C72BFEFAE2DB2B289723F6A40DEC29EC57C623A2135D9A06F853DF453890F80A92676100C9B9E585D4A124306A74FBF88A6D56104194E99CE75555213A6A996BA752A1E75C050009BDD71B78B9D8FA623F179BCBC3A0AA6CC609D4338D2C1DFEF4BC0C5DB972F4F0EAFA6AFD83D3DD96699D28DA731CE386B33480B534A0A506D62E76E24804FEED8E6FDA1CEF1989983F4A261924B05071C41C034D81E84D2052CCAB1A9049E5F987FCE353D45731F51CBD69CBD840E1086C253316004705F6DFAF5DE4B26C14B992C623128E298402AE22FA9D0F3E8EC291A4B9CB5900A80E47ADDEFABBF5D6B1057DAAD4142DD54C932E158973E26F1D3D39E2E127F4E10AEE40240B04D88FCF94498410905B47B83F48E5450F2785082A7369402A9923A0373F0BFBF090C5094B69DF225E8E740357341BDBA438952C077B6A3917B03F7685997E83CCB3B2B742D6865882E305B23BD0AD8070C14111CB103DA1CDB0D2912CC85A4294E15C2DE16D0DFA878526619203A6E0BD7C373FCDA2C3C9B485365E90DA1B144BB0571A7EB7C645CDD5C404F381CF7B038A87FACAA624852DC0DEFE8DCF4A8686531205856E096F13A0B023A72894B191A288AAA29D4CE5F605ECC9D4B6E848022452AFC37E612075386989C699E82953AC2AC904A49634750723EF6A3420B5F097E26167BB72A36BB7ABBC20ADCF322A074394F5DFC57334EF56DB2A65A4A87FF00D327F967680784C917C212D6A5A12E8EED350A415711FF00C9891E6618AF1252A3F3120D8F3E81F5BBD8D7AB4BFA8B5B67A453E4C94D2251E1A851A569B35A954F004A948496F807349133279E159587C3021641F92A3E6248772410E7D6DE91B4AC42E6FCA4BBD09B7986B071E7CE1C29346D406CD5EA6CC4E5CB2389414B35416664C2428813BC45B688C2E7109207E8E477CB7A86EED88717342D537F285CA080E4814EACE396AE6A368E10CE8FA55ADC34E3367198EEEA0A96D06CC5CF74652A98DA396FB61E0C3E2A709678BF4C43F12182C2B6E41BD2EE690CA6AAB51C6FB16B015BFBD21054F6888649A4A26996DAFB01B14CDF108E5DE16C1B0E7EFC38465120A84C582B9A2A5414A0FCDB88016FCDC43798B2C00A0AD3F9F1FBDDC98FD7E7AEB890B4B8AA253A09E14ACB9F58E920186E04F4EBCED33232E4CCE10A008A5581296A8EA793F28CC87AB12051F9EE39535F2D621B54F55AD7DE2E8DC75333DF7D6942DC8844CFBA3711CF1228CAF0FC410141E8FF002B5090FE7CE1CC694661510A4D354164A7EDA548E38E6002ADBA6F187A32492082A4A549558BD4EFF7ABDC068C804D8437D4E635C8E22B7839E7C294CFC36FDF538712F21C22D8AC01BFCA0D43B506DEAD625A33C2ADBD47E79C34AEB1FA8214E2CB6048179E299F75FA1F5DF1212B27C361FF00E90E27B800A6A7ADEA6FE42321075207AC6835A968FF00F33B5A26D7F203F7BE1F232F4B8694F4FE6FAE8EF4D2F19EEF9FA7F31A9CCE5B48852FBCE9CF879EF73FB89C3B46014689484B3D680927AB7BDF4C141D0BF266FBC373B9E20589BF9188F4117F3C3A4E015A3807C7E8FF00568D82030715D6BF83086A73C64F0F2DF73F98E71F2F3C64E14CA7E21C43A1F03A73F386F3D0281BA1FA7DE879C26FE36D7EFF00DB1B230E85D801BD0D3D457942299628D53F4E7B7D7CE1155E6297D4DAC37C696E4ABC653131161138728C14BAA480E450B061A6E77DF485D2909622E35FE0BED1F4AFDDF9FCBF5C7C3D8FB350A69D20154C1B6E47CB0410AA0741F018208E426761EB10304119702BA7CC7E78208D2EA488991EFF00C8FAE0823540F3F89FCF0411B5A493C51276DCFAF53821497AF87DE37702BA7CC7E78214850C8202A45E7F7F760823760823058262394E08230E0574F98FCF0410AE99E2C25C4981C7B6C76F7E08238642DC778B913E7F18FDDB98112100D0C10E75CE328A64B40A42DC163D001279FE9F3185A54C9C169972D2A5719E12DA3F423476F6D198E988920CE5CC094A0124380030D5EFB6B5DAD14F6ADED0324D134350BCC6A9B2FF000ACA47109E20091201F302637F763A9F657E1A4ECFE6CB9864F105104BA4D053537AF90DA388F6EFE2F60F29C34DC348988E209525D2AA82DF5372C36778F37FB52EDA730D5D990CBDB7DD4654A5BA16A43CA40E124DCF0907D24DBEFF0052765BE1AE1F2244B5AA4A1C00E38439FABD5BF378F11F69FB779B67D8A9AD3A6196A52BFB8904134A3B3331D5ECEF1D73AD71BA7AC2CD02D4B43A654A528A8C912492A9BDF69F21D71D6B0988952909932E58433024306601BAD3EFB456D05253C53140CCE65C83A53EF5EAD182692AEA1F6E9D8A75ADF74F85E825283CC9E569E640B61DE2330FD22490BBD4D852BA02C75F7687C526629557297B6EE6FF005DE2CBC9B4AE5F92B69AFD46B4BEEA405A1361C24DC02127D224408E4315AC5E613F1A0A6529552012D41E7B8EBADE13485020B11EF5DBDEB0DFAC7560AF6A8E9A99D0D52520743286886C90409E32D9055B082A07CBCF6CB3294AA719AA492B9853DE12E6DCAAD7D186FBC3C97354E012C2BA7E3715F6D14B66B9A13C5078B7B9373E649FDF3C752CB72D421090120160E48B5B97D34D9A1F4BC400003403526AF567FB115F5881E659C2DB5A5B0986AA09E35822101331F7CF9F438B1A244A928E3550A050333E9CBDF3108E366A6600010790343671A9FB38A188DF05754D4A58CB1876B3BD304A38A1324749EBD45BCEF88FC663A5A41248480EE5DBF0FF009ABBD21845CBA5BB17A6AA6C66BA81EE1202568A55133782A100824F3BA76F953331CE809C9952419855C4E412C9E6EF5EAFF48D92970E4B6DEF6FE768B6E9DDA5C9694D164686E97812132128055C22665404FC639ED0045AF0E714A0BC4BAB54A41347E94DB9BC0542A1346A3EBA1FC73F1778A5566B98A56EA89E22A27BC2A215DE003FA649023CA36DCE25F0D82C2A929EF509734402053E971CC5793426651984FAF878F2FCC46DF759AA5296E2BB87A6787C44ABDC0817BC5AE2679E159981E075CA514A459AA29BD75236D2309C32829CDC10C351E2FCF67B33C6DCBB21D4BA96A053E5D42EAE92988151532521295DD2785513D6C77107081CEF0D97527A93C6A1F28A39005B97E4F9484B2A0068C0737A1B036BEDD18068BDF4FF0066F4D94B287AB2A43EF708516D4DFD9205E4FBBE1EFC513B41DAC18A131121010CE1252A724D6CD6D2947E7787489812CF524073B7DBF1CA251515D4B9636942DF699660CD3252826A026D0A5A6EDC4089B99E56C51309371B8A5CC54D52C8D0173AD3F716F768C4EC40018AC33073E0EEC1EA3F976888661ACBBC7052E4B953944FA8F087D3C5549715D7EC94A77F75F78C49CB90B47EF5D4E85874B9F2A93EB0C66E252A040A91A35B7FA56BE4EF0997A775167686DDCFF34148C0054C84F04BC93B8521B50298062E01331C8E1DC941E258BA92DC418B07B56C4977FE61929455521817A7B25D8C6E4651A5F20477C809ABAB45C28A8F89436B1240F4B6DEEC3B4380AE24B59CDC1F2BEAEFB97B3C335CB2493663CCDECCFB7DEB0CB5FDA03ABE063BB4502192A0D77684A8B808DC94266D1B9263961C61A5212A2AE1AAD892A2FC4CE6C6829D1FC61690952487B569E0FF007F3A4476AB3CCC3300422A1E7A6E3C0A2083E57B795A399E92885A1218048E6004BFA0F6E6B0E88704421629B397B8BB969E215B80D2A075984FC663A6D8593894A58A949049A02A0391D9EF5DA1A2C5880799F76A7BD96A348EA7ADF137401C0AFEF521A37BFF005011F1E9B6379998C8921D4B0280923E61E2078D89F48414973415EB7E5D7C9F4736507B35D66E82AFA8B4C81713594EAE29F22AF0FA19F99C309BDA495288EE54B26AEE950D6A2A069EE90ACA414F13EE05F6FC74DE13AFB32D6A1265A6B9C4D5306DCFFACFC3D631B48ED6A9FE67045CF09FB06DFF008061686DA9ECCB5E0134CC30491E33F58A69B6DBA89E5BCF5E789893DB293F2F7814787604B1A5E9F53CDE320136D39C42B37D05DA432543F8621F1D5350C73DAC93CFD7A62730BDADC3AFF6A08D6C4539B80EFAF93504655C563FE6F5880E69956B1C9C4E71953F4C854F741A9A82E017325A49E083D627979CF60FB4322791C4532CBDCA833317E47CB58524A544579B167EBB72FAF38ADB33D5154DB8A61541534E663BD5B6EA408E67893005A7A40C4F49CC654C03854950701C11A16D0DE90B777CFD3DFDE3450EA4ABA54BCAE36EB52EC120B886D54D133209255363FBB4ACA5A2714926DA3DFAF21A8F1A46021E8EC45FECDD6BE4CD0DF53AA5A2E052B304A164925908E28B1B4881899932524710A00185CBEFFCEAF19EEF9FA7BF6758E06A34BD1C46020595F678A7CA6DF87C2313F00A981D20A8867715F0D3A8FC468A92E0907E63EFDB8F0DF7379EB53056224733CEDCE2DB73C248CB6705070BA5C70B7DEDD5B4F04BBB0356D5ED5DFF00970DCE36399D34AE14858F71BF5BDFA75DFD2D87C9C14C4B7C849E63D2DFC7D6125A824B5CF2000F478FAA9EEFCFE5FAE3E0C89885332856DA7D63ECDF02B6F51F98C80099922FD6DB7BFCF1BC60822E232C6C124D40F51188DCD0078A481B6FBF3C1C0A360FE519009B08DBC03FB87EFDF80A14039040E719E056DEA3F3182DB248893EEFD7CB1AC60822E230EE8F9FFD27F3C1188CD08899313D446DEA7CF046E8203BEB1B3801D953EEFD704280836AC66941131267CB1A95A45D43CE36E151D0FD3EB19411B823DD8C7788FF00908D84B59B249E958CDB4154F84988D813F763066CB01CAC010195305D0A1D4465C09E9F7FE784FF005521DBBC0EEDEF9467B998CFC26CF63F86F568DCCD1FD60D85926E7D6379F38C2C852564041E27DBDFBB5DA135BA012A0C05CB8A7BA7B11CD77065ECA96A504800995111600EE4C7EA4FBE42565B8C9DFF004E4A95AD219AF1F8496FC7392967B91A7F98EB476B7DB153E92A0094D436AAA7D2E86381D4A8A0A78B7292637B131F9F67F873F0FE766EAEF71521480820FCC9A1AF303AEBBD75F377C6BF8943B392D387C24CE3EFB8904A14CD60F404DD8F851A3CD6D53DA1675ADEBEA55985538A602D5C03BCB419E40C72B4F9EF79F54F66F274E46512D12010800060D6D682BEF48F1AE6ABC4F6856AC54CC4948592B292490C4BB5FD05EF15AF7DC4AA8654B01282384A884CC9E52798F2F8F3EA32387152871A780B3049D5FE9A73BC56A64D97820650471173F37A3D8D76D1C561E726D3AFE78529A00A2A4AA54E14F840DCF88C8137BCED26D338AF669265E05E677A01A9617BD07F97F1686D2A5CC9F30289294B82CFA03BD2EFA8AD4B88B5159964FA6281140F34DBB5E5252B7400A2D91CC403FBB7962030866E6B88A4D644BB23877B5F7D5BCE2566995C094801C0152CFF004D856DB6F150EA1CF2BDE5AD4DBCA758519093E1E117D81DBE5CEC062E383C9815255C3517A7959BF3EB0C968490F46FAECDFC6915D3F52B6CAD6A7788AFFA788908F7DFCFA4F4C5AF0F9726500B4A78599C357D456BD4D4EB0C660208AD9EBE5B7BBC44731AE5A8A9216093602428C911D66E64587CF12273097857723E5624BB6B66D7EFD61A4C9F32A00B8A372BD6FE2F4872D2DA2B36D60BA8525B5B34148506A9C790503856411C05613C5707EC123699C43E65DA790E995DE00A502129152E342D41E3D442B875A9555BB356BEDF4E757768BD727674AE85A72CE5F4E8AEADE185A8A54A8541132A0A1FBE5B629F9862B158E70A52A54B770805F883BBD08EAD57B43C0A480183B863EEB42FEDA1AAB353FD72A3BFEF14C3927829E0A5279401013B6E7CF09CA4CC4942425C02439AFAD75FC35DF5AA8EE4FAFE3DF266CADAC76B104BCA2CA87D9E19326D13C302F6F8F4BE2C384402DC4013D767DE9716AF8B46C25AD4EC934FE3F30C14ECE735CFA29DB438E2CAA28CB692BE393E2E220787CB8FA88E785F1624A071F7C9414876240A6947AB723E0454BCC2CB493FEE029E166D8F503F3CF78BD7487640F5425ACCF57114ED8E15A10A2078409B8491D472F238A4E69DB43210BC3E0BFDD98974958B0D19CB8F5B3F8AF31284915001A33EBB7E75AD79DB5519CE41A529914997A986587070385084AD4F706D300A9245BF7BF3DC5CFC4E6B34CD993162612E0D404BF205B5FA88426AD09E24A0B00C431BB53C3A52FD1ABCAECF755672EA98D33951553384872AD4EA510956EA09700279EC76E6409C187CA4E1D499D3E695A49FDBD2DA9F01CAA223D731492CEFCA94FA78B8077D192A34C657918359AA33A554D4D6F89597776B2029024A038824279C9116E9B62C38752E6BCB918701219A7050A3EA451F66B5219E226A8872A2FF00F115FCEFF4D2353DABFEA08EE34BE5CD503401497DC08A852845C80EA54A13C883387C32844DFF00F1534CF208524A7E4E12EE47CACFB3F2A43718850601241D5C3BF990D406B4B7288EAEBAB6B5C52FBAA87AB1E3FCC7077894715F8785221099F281D79E1DAA4CA4242414A5800EE1CB6875A59FAD21DCB3C572DD747DFC79D39011CB1A3B51D72C3B54E7D5E9946656E249E1DF6E20498FF6DF0D57325214521D6694009F221F7143B3C394CA04124D34A375D625D43A6345E5A92739A94D7D42C0E0400A4F7253F6AE92649FF6C349C9C62D40CB965080CCA05DC11701891EEF48DD4254A624B93BFDAB6DDC79C66EE6DA53290A19765887B876F11B40B5940FC79EC71B0958C23F7AAB764F9DBEDAD79424A992C9141C989FC81A359B4DA1B9CED26B18F065CC3396255FF10961A7FBE036FB48053C3E5136C61596F7E52A9C998BE1FDACA2867DD8B79DA1B4C9C12A74A80045880D66D8F95A962D467A9D6F9B56821CAA0B077E06D2D5FA0E100EFD0751B0C4861F06245449240B12EAA6E5DDFC4FAD61B4C9BC4CE5B71CB414AB36F0C1539C562883F597999076716BE23D202A047291D6713123264E3D24AD212CDFD8C6B6FF0088F7717856428105B96B777A8F7F58685E6F5C3C23317C0BF35106E660150F2DBCB0F13D96929D52C030A0D7D9EB587108DDCE733490A4662FA60D812BF17FEE3F327F2772BB3126951FF88DA87E95A1DE08554FAB7356665E5BC446E77BDE64FEBBF2C3E4767F0C3FB80074E11E9E3AD057782143BDA066EC94F030CF0ABFE221D69977BC03A7789570C738009E588DCCB23932F80A10B9A03F094A9496A87B1A8F7BC3DC37100588ADC10EC2A3DB11AF8A0ABD47A5F3F6CB1A934D53BC14005B88525926F04CB4DC8F71F7E12C261B31944A70F3978643060A495DABA97676FA43A4A52E4A92EE46BC87DC37214A88AC353F62DD9DEAC4A5CD1B50AD3158D859AA696E3D509AD5ACF8002E2C25AE0DA475BF95832FCCF35CB26138E7C64B531130327BA019CF0A7F7120BB35348DF825ABFED3B56BF41AF5D39C75EB56F60BDA26960E5751D02B35A16E562A1A79B512912A2AE04952AE22DBFDE7A0655DA9CAB14B4484E27866D1D2B4292DCB89403973F50EC29A2A42C00A6A6A5C1E761AB5F4B5A28B7F5156B6EB94954C3F49514AAE1710F36B6C12491652C242A083B480778C752C85781C4820CE96554003A6A497FC579EB68C77547D2BA8F02D7B5E95B8B18D88D44A3E12E0E5042C48DAD63F95F9C62D072C94A0E809376602BE156EA2908AE592E521DAE68F6F03B721E50E14F9EB8BE2FE6131037FBE26E6F724EDE78417964A480C815059CBB74DFF00311D365AAEC4B3BEF5ADAA63EC831F9C095839AE5C94B333823C0398FB38AC4CB510CCF5F1F21D6343DBA6F11CEFCE7CFCBD7CF1212A470DDCEC1F53D2E3EFA4604CE21FB5C0BBF875DE3142547727DE6607E7FBEB87F2C0003D8D4B6DA0FE3AB460254A2A60FC8066E9F9FBDD634024102794F9FEFA7973BE10C4E255254E84710E9CABE95D3988DD0A4CB07BC152D5351E819AF5F02446DC3318C5AE851D5F6D49A563071491F2A405528C697DDCB78C641D71BFB09E2264F5836827FD8FA1C2A898482E1F4D00FA7A69082E7CCAB21C1079D79DB71B5F48DC871F7265C089882426D7F4F891F3C2A99214FC47A06D2EE7DFDA1A2B158B144C9596772029F968C0F58CDC436803EB2A352493C3C1E1088899E106645EE46C71198FC4CDC2377492B7BB75E9CFA74710BE19626907123B903FE619EFAD350DE3AC6D645393C2867879F89447DF1B7C4619CA9D8CC45449587E4EF7BBB7430F26627052407C42001B2853F9FCC294B9C0084A1A8E654E206DCE144193CEE3E7897C2E498FC5B34B5D6C58B87FAB577E750D0CE676932CC3FEEC44B2D562A039EFECD0D210D566F9753A66AEA2999817979B047FEEE53EEF38C5870DD89C74D01C2C9BBF09200AF27B74F5864AEDE64F2B8BFF009892C3750BD3737F43B558B4AB5C69ACB829F39E5236C27FE38E26D731F641F11208EA089838964FC32CC316C89689C566C02155BBD746DABAF48AF66BF15F2BC17FD39929628E42D34F00F7E5CB9C305476AFD9F38E2AA17A96910DA264909827CC71016B8B7E786B3FE10E6F2CA4AA5CE06A482953EFD6A3C7AC42FF00F7D39714F0F1A050D5C1D1FD3760ED788F7FF882D0D48E3C8A0AD6F306CD9C711C490D948812448215D2D389AC97E1C63A4CD48992D65881F32496B55989EBBF368AA673F19B0BC0AE05205C82140BE87974AF2DA3ADFDB07B4AB6F52BD4990BA12A712A49295410152362266F8F41F63FE1FC996B44CC4CAEF08E160A4B01CACCC3C79C70BED1FC68524CC12A6F0B3D44C2D63A3F414DABCBCFFCEF3FCD7397AA2B739AE71D6DC512DB4A595589364C28913E5BF28BE3D1990F67F098342448C3A50081600585EC037D9F78E19DA2ED8AFB5530AA6CCEF382D5048E757A121FA446DB63EAE3EB617DCB0B3E14195151260EE64413CA712F88561B08E1494B8B9A0B7E39379C57933A620325440E4FF9891E53A1EB33CA962B2B12B6B2C2AE25386521494FFD244907E26F8879D9F4A48299412E91400F09D79FF24E8F08A997FBAAFAFBF38B0F31CF69B49D28CB321E05B65252E2C70C8B4925464CFBE397AC28C2E23362672F8B8DFE506A05480D56B35852F405A3604A1D293F2D35F3A0714B6A08D6292CD754B85F7B825750EAAE5478BAF5902DD395C8E96DECEF6695862A993430353A3E9FE29C8B184A612E9726A4DC935BF9DEB110ADCEDD434B35EB0804184FAFA5CFBEDE5B1C5C026560EB4E11577DBEDE0D5D85352A2431F7AFB6886D353E77A82BBEAFA769DDA94A963BF6FC412B04D8F78A10809DCF5DB0D713DA0C3006A904023D8170DAE8046840343EFF00117C699ECC74FE4C84669AC1D0FD7405A3282A50E1501201750608363703F3A263B158BCCE7AA5E1507BA3FF00F7014CDD13AB9A5EAE0BDE0EE65A43962A06DBBEAED421B6D5EF589466BAAA99A63EA8CA114F428494D3D13294A14DA62FC4EA1216E4DC8E2923118325C661A72A6F0AE6AA690EAA96B58924797D291A9412C123A803D77373BF9C578BCD09A82AA263BB0A2495384A84F33E3F3F772EA7167CBF07C491DFB020390696DF61B579428896430218DCBFA0FE34FAF0FB88AE537F5B6D55552927B84B28E1851201E22D0215CB7B731E52AB460E4310B42529152549714AD1DEEE000C6E3943A97C23E635E16A351F4DFC9A2CCD23D946A4D45C35956A19665A98510E841251B11E320FC2F7C52B38ED4E1702BEEE5AF8D6E78528048A740CFCDC561F4B5A58D0067AD3DD7DEA62D166AB44F674DBC8A453559982C27EB0BE12EA82D03C3C09855CFF00A76E722D8A74FCD7139CCD69AB5CA969B24122EEE0B16AEBE70D3173C24012C877AB6E0D3968FCFE91F7B38ED0FB415919165AA4652930BA871C45284B60DC8438104C01CBE7CD354CCBB0491DE7F796763314EF42400E2FAEDD623BBC98B3FBAB7BB7ADF7B56B4B8829F24C8F272EA733AE39AE6C882BA5571A514CB1BA439250B0A33245875BC61696EB5132E5F04A1C244CA7CCFCB46D7534B426EE4B9BD4B9277AB79C32661AD2B985FD4A887F0A4A894A03480F95721240913205E636C3E3292A6E3F99BCBA37DC3460DCEBCF78D74BA7758E7A7BF790A7583E245538529E049BCF02BE7F773C615899520F095849D921CF90B426B524508735A5A9AD6D1236B22D3F91242F3CCCD1595200229D0D91067ECCB648DCC5F975C2B2E6E266B8949212A3498E4335D81A9A381BDE13EF24A48AFCF5F958DC73B56953C9A0A8D5F4F449EEF2ECB9B6985C84AC84ACAC0D89E24120C7291CF0F519799BF3622615ABFB5BE5D2AE030F5AE86D185620243A52CF76D2AE3D75E8394305767B51988216A5B73C924A449F48E47A5CFC04DE1B052E526890ECD50EFE27C06BE702B16433DCF36BFBEA74148634D3A5B2A529C528B907C4A2A889E64902797AF4BE1EA6420B02905BC00F0B7A13F66988C4296C1D9AD57EB7D3ABFD63538844C48EB78FD9F761512258B2436C403FE39D3486DDEAFF00E47D863E7FE1A113E1B000253CE0C739F3FF006E5CB0E65C941A8961B9900D76A59C6BD631DE2DCB93B54BBEFD3FC6D0DEB2DC1F10E8449FDFAE1C8C3A4DE5B1AE83F0DA535AB41C6ADFD0437D43EDB407881E2917E51B6FC8003CFD30F644874B24330D8B1A9D87D07D1A1F609D8EDA7ADF43BEF414840AAE6047119236836FC7CA77FC30E53875357C6A47A53D6EC224211BD5CD9E102204FEC4CFCFCF0B4B9452E2DB6BEF5D6086F5D6A0837F75BF7E779F4C29C0DFDCD6B0FE75B4109975295F0C19DC99B812622DD630EA54A4A920A98DC5439F571D4DE1594A29762D6FBC2571D4926C24F97972E60FAC5F0B1932DAA81AD424026BEA7CCC2BC6ADFD07E211FF0011629DE6E9DC42BFCC980B42949E0E1BC9281CC91F9E18CC934B50BB16707CE81AB4EA233C6AA9E2AF415F187D4EAED47A78368CBD62AB2E77FE221D0878047310EF11DA7CFF00185C56592F10A4AA623E641252504A087D8A4A49F41F58D84D98971C47C61AB54E97ECC7B4EA7A56338A5628338752E019836853629DD588054868210BE251FEA369EB87582999D65E5588C32A64D91218A6471F0950D7E62788F09FC757D84026FEE5313AFAB01D7F160F1D27ED53D9D759766CF2F36A243B9CE975A8B89CD18BF76DEE3F92D95AAD2522676338EB1D8EF8872B19325E127AB827A084AE52D4C52FCD4CEE7F1AC3A9984E1142E0DB571A9FB5E28C7739532D06E83892572971C7014294A4DA0A1705252AF8F3E98EF3844E17152FF51316821829297147B9A1ABF36AF230DD58628F95497357D497059BD2AC07578FB7CC7E6CC4E4005806DE9E2D43E61ED1F5CE5E196E2E583391BB3D89F01EB189415DC49E1DE01547AC6D84578800B685FC391A3FA6FA343D44934228055B7F13B356362131629B799223F3FC30DCE2175E10E2A3416F0AF41E70F654B48AA9403914E7A3FADF468DE4445EE7974FDDFE18DE562012CB6E840F1041FAFF00889191946171B59D8844A61476AED7352DE4238F3E5D712386C32710C10872A346035F27EBEA4D21A63301966041271B2CF0D7F7245B9397B338D8E91C8AC66990B5B8F32DA40995B8DA66378E2509F77CF6C58A47661738A7E457CC47ED4151F161E1E02D57A8637B5B93E59C5C58892AE1B82A4876D9EDE1BE9101CFFB54D1790717F13AFA747083C5C2F24ED7BF02AF37FC2716AC17C33C7E2D295CB9334BEBC2A1434F6C7CB4A9E33E3664181E249321D3AF120BB5F715B6AF14EE7FED67A03254A5392BADD638B2A0F82B578236FB522FD131B62F9D9DF8178CCC4A8E264A900311C697E2D2C5A9CEE5EBA472FED77C6FC1E62C9CB9694B38265A83DF97DFD228FD4FED9B50AE2FE18C84CCC70A84011623C3CB6BF3E78E9584FE9F644A62A4A69FF60150068FCBED531C8B31F8AF8E524A53316EA06CA3A740E39741B98A473AF6B2D7B9BAD28A2A97691B4157111C278E6C394DADB7588316B4E0BE0C61B0801EED0786E784333BB1D0F98BF8473ACD7E25E6CBE2E19B32AECCA50B31F37AEE29D22BECD3B5DD679E89ABD4552C71CCF0855A6DFD2A1E405B6F3C4E23E1FE1B0A18C943501748E5C9E8056FF68E73987C45CFB895C3327D4B8F995D75A0FA72885D6EA6D4C1B729D8CFAA6BDBACBBFC4B71B0D04191BAAFC57DA448B8C5D7B3BD9BCAF0C952E7C89448A25D209D41D1DBD3D1F4CABB519CE68A3DFCD9A18B3A8ABA01567FAB6950CD543459FEA47539551D6562005CBAE77CEF0113C46545511CB78E90621E67392647264AA74C44A4B876E104D4D0301ABD9BF02D12F178E58613D6FBB9A9A69E7ADFC1EE845651E87C9D1943657519854208AA70BAA708524784924A80927918B6E314BC176770D8C9CB9F2E4A65C804143A402A72C6E90430A9603D6AD71A718A4979AA73D69ADDD9BADBA45479857ADFAA5AEA1D212B55815710B93CE6DBFB8822778B8E03249320829480C050003425A8C683D691CFF34CB71B3CA8A96A2E6A2A5A9422F46DC68613AB2B26A29AAD4FA9E4492DB224F1156D10542248E5CB61CE4A7636560E5AA5B04101B4D68EE7F36342C28865597CEC1A9466125CB80797234F5BF568B0B29D2CAA85B59AEA43F56CA5B1C4DB3CCC0B4A130BFB4049239913BCD1F34C67EA94A9723894B07F68762F5FDD7B7E0C5859EB615E6DEC96F3DA156A2D76A4538C9F2C4258CB784A68DD109242478CDC0572DC993CAF7C43E1B27C54D9FC650A01452E6AC7566B060F517D235AB004BB453798E7EF309729D0B53AF2EE5464D899373236B833E57DF1D4320CB5324244C484877A803C6BEDBC6088356E6FFCD652DB6B5D4051EF42413727C26D3F7C7AED8B6AE7C8C2A56164310024380CC2BE06CF616A54C68BE11C240735706DEF5D45625394F66D9D6B071AAFA9596689052B50721129064C85149881EFF7E2979E66B2427BB0B20A8909094953D6CE079D830D2130926C29BFDA2EAA2CC720D194472AC9E95B4D6B8808ADCC4242CD3140012784A55C7C664784CFBC629333078A9F3828A95C176F9AA0D6F46D3D01B4093C229E66FAD7AD621398E64E54BAA71D756F8513FF00C4AF6E63F9009B0FB3616126D8B5E592C4800ADA8C48A0714F76829B7F17E7F7D21A1B0D3ABEF944BE1933DE10525EE2D806CC404999B79DF13B331B879728A54B44B49FECA2B81BAD5CD2DD3ABFC3A41A90E5C317E97A9BFE0BDA24F9668DD41ABDF6D748C8A4A0491DEAD4128F04DFED7018201BEE663151CE339C2489265CB98CA51674B9E2B5481CC55FAC6F31254556029B507A036BF48B9F2F6BB3AD0AC34CB884E639FAC40470B8B097936B1852609B4EC27CCC731C6CFCC674C5913D6845D2789F8C747A30E571E30CE62F841653BDE8CDE1EDF9B346BAEA9D79AB941B654727C98447086D00B676B0E056D1D7CC1DB0D30B2972D45531E6951ABFCD5D4B976B9A5295864BC5292E09DD80F0B73AFDE358C8B4D643DC3950D7F15CD5525352B795C34EB024A968E25257C53B1B401D7124A0B2B4909EE9201E2481FBDEDA79F2686C310A5062E0AAF514AFD4F23A8F04399EB6CF549FE1EAAB0BA758E0698A669B67844C0054CA4131379DE2F33824616521456996EA56AA3C43C8B815D79C1C44EA7E9F48479668CCFF0032EF6ADE7BEAB42F14A9DA975490A693CC84AD416E7A2648F961E2E722594CBBAD60F0A52924121CB5289A8D5AFD6000973E25CFE624ADD1E90D38D9552AD3A9F3148BA57C54FDDAC5F759E130768B58FBB32A5E618A0AE296707C27E5B2FBC1F6A3539E91BFCA9B1E23E829A6FB7DE19EBF5A675512CB6AFE174A652AA642438427902B48936E7CF7BC62530F952070CC5278A6007E725C3B5684B0D98FA5223F15356976376DBEC75D2911879D0BE2719A4358F2AEA79C78A003BF17028FA98FD99697842861C2C1EA001F8B1F1B56EF0C7BE531AD740DEFEDE3686D7F316E80CD5BA1D53A3C2CC4060A6C405010AF5F899DA4A4E116A50253A9AEFB528370D077C40A54EC5BEBAEDE7686D7B3C61CE20D909E704C586C2E39FC4FBB12F270A6CC6D5A1EBF5DB954C6BDF2D550695029D43F5E74FB43554E7BDDF04B89E1331E20408FDC733EB787F2B02A2E58B8B8009A7D453E958511C531C9E55347F01FE3A4352F5118BAC4F5E2E43CFE64488C394E5EA70E9BDEC006F1A783F9D6151289B1F4FE61B2B752287042C73BF103F8E1DCBC0106897A75DB73F43E1780CA22E6F6B7E7F10D4BD48A9238C473F1263F48C38460554F9091B55ABD1FEFBF28C777CFD3F9844E678AA823F98070CFF5723D0DBA4F2B03D061E49C1949FDA45C9A337AEEDF6A54BEC2A7868EEF5DB7FC5FC2C61BDCCD557858B03FD42DBDB7F4BFCF0E061AA686843DD9BC7DF287D1C3599A94092B163FDC3F138C9C2BD8795BA51ABEDE08D6BCC094AAE08DB7079DBF0E5F0C63F4AE1A85C8D09E7BF9B7DA08C98AC0BE2E2500444091B5FF00630A264A903840A5F60078D61497AF87DE335D40EA09E5E216C1DC294A26E1FA7ABF41F4DE148D6DD5B6D05171016372AB029DE62449DBF59C0708667CACCFA5EA2D572DEF9C118A3306AA41432E48120A4836B9B5E0FBC6D37B63656042032920061517661CE96621B4EB1935EA6FEFDECC183E28140AE345424C120F024A9256A1B10A0653C27CF63B6C70C3172A648E032C128550B6828366D75894C0021DC6FD36B8E7F5893E59ACEBF2D6159457329CE74FBE3BB5E5AF849EED06D679C0A54DF885E6D88DC6E5183987F592268C2E392CA44F413FB83DD23E52F6A8DDE25E5CC09F9549E24D68CD53CFFCC513DAFF00B39E47AAE81CD53D9D14525536DBAFE679536254CA9409406F8882E711927BB4AA22F02D8B0F67FB7799E0F112B2ECC662D9C264E28D133C0607880608614009ADEB1B89095974D7705CB0A6FF006E76158FAAB14EF3A0A90E82D93F6004F101D36FC7CEDBE3E20C8913A610385441A00EC29F4E56ADDE91F59F118E9125DD490DAE86FF006B73715684CA72BE9969450321B4B9FF00CC2D7C30A236238C5A04ED3B1C4F617259D3880124BB12361D5B5F3615E55BC6769B0F21C7789003B90459BF3D5A346659A64F9630AAACD6B594388054A05C48D874040B11FBDCD8B0FD92C4CF1F24B596607E53AD99C0A3B781F2AC623E206130E5415350E9E62AECDA86BEC6295D51ED01A1F23B1A969E750141084AD5E28DC120981B419117DEF8B7E49F08F1B9C1E24CB5A58D5924BBDB9BD29CDFC389FC45F8DF8BC9001815A960BBF02C96B33B37AD772CC23AC3ACFDB12B96B769321A314A83294540712E0F230527D63CCDB6C746CAFE0AE2706B42D6851622852696E83DF28E1F8CF8F19E63C1733920B82CB51E5EFF002F1D76D4BDB8EBCCE8A5751A89F7D2A2BE065A6FBBEE42B70A53647174BDF9F3BF55C93B11272F20CD9292433F12013460E1EDE94D22A38FEDD6719985033E7278BFEE56BF9E81CD2B68A8EB739CEF3A714AAE456D5F19932F3C99044EC09DE76F49BE3AA65D272EC2CB4A3B99492033F08A11C9BDD6F150C4A332C7289563660E225DD458EDFDD61D7C43426469E72A882C650FB6AFFCC52AA1C571CF4E2F2E60F98F27389ED0C8CB292C2268D025012C756615E60B786ADA42E764C5466CF334A8BBA95FC91AB6AD48548D25999108A4EEFF00F538099F45183CE07C0DF0F307DAB4628006530AD1CFE3ADC3BD0087E8CFE5CD0C58BD49241F520B06FAF36852D692CC385C76A0329EEF8424171A4C9263FB8191F1BFAE24BFD6F0CA21012A49554B851E66C3D39439978BC34EFDC94101E85BA7D768CB30D179DB9429AAA32CC0FB49EFD904806F04A81EB6DF7EB8653F38C1AD6649242CEA50A6259EE4352D4859385C0CD1C4532EA4172C585AAFADEBE2690F5A734057E64D30AA94A5AA51C4730702D2AB054A6E93E1E60F0D8F989C406639D7E854132144A9764F86DAD6CF5D21B626661301592122CECD4622F46AD6BF7A43FE7799651A5DB396641C2B70A7856EA0788280BF8A09DC9D8EF6B622E463E76366056252A59249E024B002C0D9CF514AF323546768482134E747A57933D7C1DB56A8EAF37CC8D438AA90A71970F8D2A32A50E5C24CA844990244018B1C89F44B27800601A8D6F036D6B67DE1519DCB200501E2CC5EB6228CDEE91B586691C5216F952D959114E38B8812481712AFB5F95B7C490CC0CB04710068C68767D41B6946B0BB46A71F254A07840511BBD2F5F0D398B345A5A7B4E52E5684E6D99AE19580ACB185927BB800B9379B9FEEDE3D6299DA2CC2662E60952145453FBF841ABDABAFF815863889A998414A425EB4F1DB9FDD9A10E7DA95556FA90B3FC9448480610001174A77B81FB3891C872F993129529152410E2A3CC5295637F366CE6A37BF845339AD7F7F52F9AE7434DB5FFCA5E37FB51C246F6FC76C74C9197C844B96A44B4A94C4AC1A11B5E97F2DDED9E1E1153C3B58BEA7F930C748F56E6358DD1D1503952952827BF01400E222E4C5F97CFD31179A6351824B23852402D50FF8B35AD188BCF23D03956414DFC5B3BA865C7DF095B2C2928968A4788113CED756C67C8E2818BCE711899BC082A213422B6D6D4A0D7784E669E3F68E730D45F5D49A4CB406DA48290A6BC00804DE131BC7E00E25F299299A7BC9E1C83FDD5D3636E7AF22E634249A3D36FA7979727AC4442D4C970BAE2540901C4900A957EBBF53FB8C59952E4147CA8482D7A5B96963B0D2EF1903E663CDFC9E1C28281FCCD696F2CA25F093E271415C3732480A1C36DFA1E98A8E6D8C1872A12D40B39A1ADB6A9A07BFE4C6B164657A4725CA50BCC73A790EBE8095374A91F6940494F0A099320EE3CB738A54DCD264D532D642483F315370D767AD74ADDC42D2A6A50E09620382F5A93E57EA2F0B135FAA3533E9A1D3944ACAF2E42B816F1010148062656944D81BCF48C5731B8E9C14AE07984E9FBADEFD758DD7890A003EE6ECFB83A6AD489454645A5F4C334F5598BC8CC739502A5124ABBA7073201503276DAF7C34C3E231B3A6F0AA42F84D2C751CC396D6CD7B4305A8A892FD36F2F65A19731D675B99B2BA64B6453A13C2DA5A1C32361050013E7E7D77C742C9F2CC3293C4B484294CE144DAE4B28D2BA72B690D264B54C2017A390296E6435BC341B430E41936699EBF56A710ED253D2A9257DE9528B895CDD25571B5E397BB0E33DC26070E990254D4AA64C7F9501C820589492CD5A529CC424652921418B26E5C83E1FC52FE32DFABE9BC97C41BEF2BC5C2D456A057B4C1246F7F5F8E2224E0A628B5810E4004D08A3D6E45BD2350417176BD4B8E5B7A1F4864CDF3FCCF38EE997DC2CD352F10A7436AEEC10AB10AEEF878B6047145E4811898C26532A592B4CBAADB894AF9AD66E276F2B3D636330292E406D0DB7D2E756F015A4459C71B6892577EA5444D8F9DF6E7D7DC276560410DC3660EDBB696D81D4D810635AEA7AFBAC37B99BB4CFDA583C5CCF4079DEFEEB6E67A49C9CB8948012FB966D0335FD6F0DE7A0A8063E1D2D5FB75AC30D6EA1607142C2605A1511F0FF7B79E2464654A2DC487AB501A574BB8EB4AC35EE14C75B785DEC69A5493C8443731D44D150E250E70499F7DB90F3307CB13527292C192D4AD3EA7C3F98C890A1FB8172FEC445EAF50B4A9870081D773BF336D8DFAFA5E425654A7608A167A6C18354BEE3703CF412964870D5DF476D1FDBE95860A8D42D7FCDD89FEAFBA76E7B6C6D896C3E50A2E782BD356E5CB95BA3079213C3C4E18500ABEEF4AFBEB0D2FEA36D323BDEB7E2549BED161D7E76B6245193F100F2F95A8FADC1FCF5870DCBDFB3EB0D2EEA141301C9FFEA3637E5C5F2E5EFC381939000EEC9ADDB4DED7FC6B04225E7EDC1FE61F39511CFC893F324F3C3A464FC207FB6FE14B73A7BA410DEFE7CD9E11DE1E67ED91F71FDF9F25464C546881E1414B682B530E246B4A7E34F7E9AA6FE3ADFF00CC57FF00E457E78DBFD157FF001FFDC7F30E23919E36777543FF00EE1FFB8631FE8CA76E1ADEE6DD5E08528CF51B1709B5A547EEE21F2F7E30AC98D886B356C2D4A182370CE9300A5C2379851EB6B138426654514E177F06F16F75F1511AF87BF585EC6728FF009849E9C5D49F3B587BAF384C601418701A9156B3D39EEEC7561A39521C539B2146EAB73BF96DBFDF8D7F46520B259AD6F6FC818215B15EDF1020A44F21CED3D7F51842661D4456D63F6D7D5F94652A29FBC2DFADA5704116BC0249F4F2B0E76F761BAF0E0A5495241705BAB52A5F958DDFC5E49C404A48258BD0687C7F8FABC6F6EA87507FBAF7B100585EC3CBDC714BC664D8CEFB8DD5DD951219E82FE03DD2A21F4BC4A0D8B6FB1B31AF8D8DADAC3FE539A54D02955B40E115D4E4162482D142A03A1683FCB5CA0C0E206390E78595270F3A48C34F40285065814571519943E60C58B067E7123271001704380C09E6075AFF0036BC7BF3AC7B66D1FA494E135ACADD6F8BF969741937E84CF29B1906048C7CAECA7B258D5A920E196F7FDAA0FE83C4F531EF1CEBB7580085706312431FEE1F9DABB1B4757B5DFB5DBF5C86A9F4FA02035DE25C5226564D9264A790E9D37B63B1767BB0AEA4AE7492C4070DFB480696FB0D2C63887693B7EC17DDCF0407019635E43AEC7C2D1D5FD45DAAEBDD64FA9A554D4B2D3AA2375253076E968F3DC6E37C763CA3B1D9722524CC4A12C3E674876E76B695BB33C70ACF3E206378C844D5A81268146A1C9F7F48853F9054370F6719829D2FC90AEFB8CB7175484ACDC83CC7E38B7E06760B23491839299A411C4C86236D3D436BCA2A0BED5CCC7A9B1897FF00885973A58973F52E29C92BB4FA36851C7519B87D699259EE9627AA78879DA6D6E9CA6E5E6F89C6D25E0B80287EF6700F88DCDFC2AF1B8CCF0F313F2E1D24E8CC2B6D35B68D76D21A1CD6BA4E81696D8CAD2667C6A755FCC0911212A16117813F09C292F2CC66255FEECDE02BA049400D5A07363E760FCD2999868892C75BEDD2BBBB6F4168459876AF96D1B455474CC36A1BC14AF6B8DC6F613313E71189C93D869F8801E729955A24B7938ABE9ECB338CC52D8CB4A9AE4077DB4AFB1CE2BDAEEDFABDB52D287596D2926490D2605A2640F88EA22F3890C37C2C389502A9856D5FDA4B750E6BE7D1E1D61B28C5672E161496620170FCEF5B6ADAF843731F685A900977326DA039A4208DB62523CBDDD799B5603E142920140528D4905045056CDE3604D77874AEC74E92FF00EE1009A51886EB42E7AB8A369100CDBB7EFACB8C0FAFAAA5B1C657C2E16529B5AE08076DC0B0F22709E61D959395A4A66A9285D8829009E8EF4E5CEF1A8ECE62921452A5280AB0734EBCFEE41BC4F3B2DD59A9FB4BCE11419526A0E56D2D3DE3A9714A6B845CCAC9E1DC1FEADE6D7C736CF0230A0A829013BB25CB1664B3B9B7DC434998799875042A694AB4049A1A316704EDFC476FABB3CFF0F50AB4FE584A2A8B694D7B9DE71C92014F0A892266C4249DEF7DAB581C1CBCCF10578850013FF4C287EDA005EEEE2DA588A40AC14C989056A25DEF527CF5A1ABECD1515467148DBCAA62A2ED72D478944AB72646E623DF318B6C8C830F2C02569E1BBF981AFD2DD2B0DCE5938170694AB1A8D2A2DA3741D23706DCAF7A8A9A991DED792AEEDB4DC2A6E66011617B8D88F3C63112F05212409C800025DC1B03ABBE9AD74E9AFE82671001449E8C697D7AD0B7A87B7F28D3993E4544732CDD4DAF36E12A452954C2AF7B4A4181B102F8A5E3F138898B230C82A92927E70E3A535EAFD378789C1AD20294B246DA8A01A5EEDE0CE22BACEB573CF1ACFADA9490084D1308F106D3B1FB13B8BDF7F8C4CF65F2D56625467A3F6915533EBA9BB336EDAB340A32A4D0CC0496A3B9BF3AFA1881566A25B74A43A92A75C308812A99816BFAC799C5C96309971212B438FED76F20CF72DCBC28A04952428541D7E9E75FADAB0F9A7BB38ADD4494E699C2D4CE5E921684AFC1C693720494A8F2E477F3931B89ED194132A5B296A042529A8B6A459F991EA2123365A4B15007626F7FC74E7168A6A72ED374668F4CD232FBA94F0B8EA8A0293D482EDCDE763E5CE0577103118F5257892A72E529721AA2EC454EA2BF58732D132601DD825F502876D0B5EFAF237AD734A8ADABA89A9AA5ADC7092E3409086AE6C9E1F09B1B91E5BE25B2AC9A432A6CD02805E8ECEE0EE079BC253A52D052160A5ECE3F9DC74BD617656DA8A85252216A71C84850429504DA660F53CFE42C9E2F1185C1F1095312549B80A17D0BBD6D6D3EA8CC065D5747ABEF6E9E9F58B032DECDFEA4A39AEA1A8029DD85B2D12018173C412411331045E0E2A38BED5AA52952788D1C392D7722E2A0FE63596D33F655B6D3C36D983562734F9837DC8A1D3F40142380BE940213CA78949BEFD794623518A4E378A6AE6710350E77E4E6DB39A6B1998B4A4F091C2545AAD5A3B6C2A3434A3DE36D1E9AA3CBCBB9B67B541E7D10B6698A8DCF310959102C208BFC31178BCB06371084E1A61E00FC6A14096A8D6AF57A7833B33C515A0029716A8D7E9F5B0A8611AEBB58E6D9B32AA1CAE91BCB291A051DF24B60A9239FD94933C3313BEF899C064986C214CC9FFEE2B73AEF434AFDED0D133575150CCE29E429D2B70FE706A4C9B32CD2B1D6689D5D63C149FAD2DC909493241415CA4DB7E13EB737B14CC56598792FDC21C0D05475000724599FD21CA160B82A1BDFEA7CAFD22CBA0A1A0D254E1DCE50876A0890810BBDCC4A245AC36E700E2AD9863664E495E102920B874B87D03A41715FC720E5065A4FCC43806C41D8F4D79BD9CDA23F9CEB87AA5484D2D3A68E9FC4105011FCD02D0A80088E5C5EE1318C64985C5E2262953C2D4090DC4E48E94A5F47F178618C9B2C2992B751A000B123A7B6F07887D5E7A5C3C6F360CDCA94B13BEF1CF6E5F8DAE585C192689D589FA0B1BD6B5F0061B9933420AB84807521FF0087F17FA447EB73E652905A792557949504F0CF2127C899B49C5870997AD4C384814D2A4935FE6EEFA330D5089C43B384D8B1A3BBD1ABA9B52B101CDF5496F8A1C0627FA80B6FC8FA6E7EEB58246553385F80B51BE5D29E36BD34A42467252A62B0145831F16E5BFB3104A9D56A755FF140E136F10BEF1B917E53EEDEC6C183CB0949796F673F6A73D1FCAF0F25CB2B62490E1DD9DC54F833D2CEFB445EBB51B92A3DF0B72E31CFD081F9E2625654A2CD2AA6D4361BBDACCCEDCAD0B19029F35AEFA74888665A91C2A402EDAE6CB11F7824F3E7EFC4BE1F2B98C0196CC2B4D99F7F4F38D44820B3B0F7CDC9F088BD5EA35AB77A081FDE09336D81FDF5BDA465656A0C44B735D1A966B72F7AE5586AF102CF62DC98DCB69AE85E23D53A85DE4E026E7ED475E84CFEEF7C4DE172DBBCAA1D83FF00FB7F9AEB511B09640147275D76D74A35294B986A7F50BC2DDE4DCCF8891CED73E6791E5D70FD3966BC1E9BEEC0F3E7B178CF028E9EC7A7B1B874275039C4AF1CEDCC7CEFCF0E519726A0A1DB71F753728381434FA7E634AF3E7099EF08DCEF73E5BF2DB0E13972187C9C8D016F27F483815B7A884AACF56A375931CC2B693CFDFD3DF8C2F02948FDBC2D761A0A0A836F621442141C949D3EF1C7F1B56DC67AEF68EB311843F4D2FF00E5EBFCC1C497670FB4033C5F270DED3C604FE3F2F96373824B71105AF51F9A42810A21C0710A919DAEC7BC2473F10178E7CB9FE58D5385973094A594D46BB574D746A0FAC618BB6BE10A5ACED6A27F983FEA120499BCFEE309CECBF87E6200480C5C33BEEE2CEFB3C6E3E43F3538980F53EFAC3AB19D2A44B824EDE2DFE7E7F7CC6E19AF06548744BE2A35001EEE1F91703585C4B5A83A524F4F7EDE1F28F3852F8897072E7F2DCCDFDDF2C436324F700712784A8D396F435F2DEB1AA814FEE0DD61F98CCD500F18F5E21E5E639EC797CB117FA79AB2549415234228FD2952F52CF0977892581726C07376D46DBC3E51E653214A06C902E0FDA1E5BC193C845BD1A9C2198A0B52486771B1D76F7CE349A569524B108A574E7EC08764D428414AC137240222E041B7974EB718D664A49490A48200356B68FBBFF9E70B49C428D2DA6EED52DFCF833B43AD354ADCE249516E9AC5F7044A4FF48091E2326D6DB9CEE2B98ACA2522677A164A892A096D056F6A1E8FD686564CC55DE8343B86B54FB6DEBDD07F2A7EB966BB51E68B78995AD25D5113B9B0599BCEDB472E7E6F464597E1788CAC3A54117FF6DADD534E7FC3C6ABCDF3458FF7315354FA712ABB0725F4EB5DA1A2B750E92CA94D37474C2B1E1C414AE35A4A08D8DECA2623A8B47338778693C7300972C4B492001C352D46259EFB986ABC5E22692264C511FF00A8D5C5E95A7AC46F39ED12A92C292D25AA66384880947104C750028DFCFD2716FC176566E2D940A9054DA16ADF61B16FBC32323BD72A0E75700FD4D77B52298CD7B44A36D6A51CE9548A24F1A1495381DF20552940126E3FDAC69EC4E270252BEED5890B63FB2CC694A8FCF3786D332B54F520CB1C201B8DBA1E6CD5D62AFD41DAD65B468529354DBAB0492B2E804F9F093607CF963A3767BB2A7112D972532980705007D40AD35A08B5E579384201980A8D3A790D9DFC2B14E673DB930E3ECADB5B95350CA5D4B0594AD5DD29C0526528078A7948E56C48E65D93C1226C84F7D2E59E2A80D70A17636A72AEE6A5DE27052D2582343A01663EB5ABFDA2AD7BB48D5CB52BEAABAEA976A164A58348F2001C5207196E0083126398E78E9995765B2E19795AA6C952932C70A8CC4248201AF0F103FE1ECD19C1CB44B5FCD2D240342C0F3367B3E9D4421AB63B57CF9756E8C8D4D53381B97175CCB5208B1E12A4949EA2079F5C46644BC164B8D9DFAB216852FE43C25693C2589F95D88BF9178BB607F4C8427BB090A57EE0CCDA8AB7956ECEFAB4BBA27B48AAA734EE5336D33B92ACC1827726092E037B8DFD31D025768FB349E29AA2A134821291216C4B14D592C295F3F04F345A5212124352CA0DB55893ED891689B766DECFDDA4F6919DD26554CD2A8A868D73985621E6DF4069638941442884CA0280BE3CC1F17338929C4F7B257C1296A2C0382A721B84382CFB0B448E5C70EAC24E2A092A09BD284397D6C6F67A8AC7A7DA732DC97B11D3597E8CD2450BA9792539954777C4E3AA0429D8717C4A4DCB9B28C0F28C732C0652ACDD2AC5E632CF73874954849510FC42A48043EF5D758E17DA5CC38735484CD1598CA00528A037E571EAD0B17574798B952FF7AA6DA2106882B88A90E11FE638D47C4A0573F6CDA60784E18E132F3FA99812582154140E03D035D9BC46A6F12D9866024E1B0E65A5C902DD2A7AF3A6A6F11F6B2319957A5145C55554A5C2D494A884A64026448FB26E7CB7C587198708C1A953A67720268A26F7602BBE839C62566A66CB09EE6AD550D49AEDEB6D748BBE82874FE81A46B32013559F54B6A4788A8FD50A93DDDC2894F882B9C4103D31CA55226E231AB95326A9520AC10AE2FDCC5EC0D3437ADAD48C2E7CDE207BB2923400D1FC3A78F898ACB39CD5D6C56875E50AE9E342F8E5203B2B03864A620C6DD77C752C065B2A64AC3B04AA5AD2C4F0B31096AEB53F4BEE86231844B50E0341CEFB6D5FAC4332646679EACD1D0D2386A9A59FACD4AC12921C24A080B1C161CD24FADF1B2BB9CA933921494853948000239DDC97F6CD151527158AC424A4AC242EBE63A73FC345B796690D3D90B09AFD50A45555C05B68BC0526F109907E1D3DFCFB1737118BC4998952D48E3372AA5580772FBBBF95A2F5875265E184B27E7296A80F47D34EA35F44B9F6B2A8AE0C50D2B41BA06F8D14CB6CF006D077E2E10999B7DAB75DB13D95CBC261B8A7CC03BC980099C5524A4101817029A8BE9568AD4FC1E2A6CFE21C5C014E1BC4D34F77A9784B8E3C1F0DB6B72A9D70C70B7C52924F3299D846F3D622E5FCEC5485281484B519A81AD7F3A5045EB275CAC34B4A2704B902EC7424FE3E9BC58F90E81AF75BFE259BBA9A3CB602DE715C2A7109DE128FF88B9D8C030664E21339ED0A30F2D586904F785268976700EA0303AFF22233B438B44C9F27B9E1090A62D5A53C6F5DAEF6898399DE9FCA194D1E94A0EFDE309566DC2A52F8A409FABAD2A32488B72BE39F65AB9B8C9F34CE9C4A492482AB55C7CC4D3D3C19A1C66186C24EC24A2A9C996AE0A92D570FBD74AB0E5A339655A673BCD07D6F52D7C65EF0E26B8949417920DC774950537C361B49911B1C37CEF0CBC54F1230C851EEC8E352412002037CC28AB5DCF50042DD9CCAB2CE19AB9B8D965C5124A5F5A371120F2EA7585359A8E9B4F28E55903086A980E15D42871957532E5F73C8EDE78B4E51D9996AC27793D4AE34A5D280EEE41D9B9162348AF768A4C9938B47E9A7A540289201150FB8366A5F95223158F1CD1C52A9C3B53528238D0952F856A5ED00022D3CB7F29C3695227E0674C13414A41F9490051B525B98D2369C50B912C149058B3D74E61AA36B73A3C8B25D159916C667AA6A92C65691C69A2942145226CA285070C98DC6C79E1BCFCC4AE67712945531F404A438FF0090A1A6C74DE23BBA0012452C2F5AB3D6DEED78DF5FA8F26A40963226C36CB414145208593112A52BC44C89B9C38C3C99EB09131454A2CEE1C1F3F00F71F56137E42A2091B1777636F7D6D4101CDF55B8B90B5156FF0068CFDFB79EC36C5AF2FCB52B002E502555228CE395BF35B4305AA6EB3157BF9B0BD2FE3E1100AED4C9511C64240E28D87C36F9F4E98B7E0F2B4253C294840236AE8C6C37D0FDA23D52B1137198758528252A0540BB2AA3C3ABC42B35D4CD99977C239050006FB41FC39EE312B96646A52D4E93C2F4241E7607E9B3523A6E3F1386958194C8485F08726EEC1EFA9F0E9726BACD751B6784A5D2278A7C647A7300EC63D2D7C5CB099294948E0F9410E0A76B7BDCEF11996CF958B97380482A4A5836E41F33D0D6E62BECC73D016497491267C66E26799803A7511EFB449C0012EA803421BD34BEAF6715B452733C24E46352A4F184859A6843F56DDFAD2B10CAFCFD2A20A5E3CC471458ED3CCEF6368E932313380CB93F334B00534A8F4B8BEB16F12C0C34B2470AB87CFF00C9D1FCCB3C72AB3C041FE7122F038CFE727F1BD8DCE2764E5E0542075007833D3A8D28CD68D00510351B5BDBE86AD11DADCE92A2901C2626E556B8DB97DF389291800E494826971D3D4E9A52D0B212096D05C75B577E4F0C2FE6E9B8EF0C8907C47EFB8BD80FC30F9182096F901A12C45697723A3FD68C21CA659507B253B877360DD3D986E566817B393BF3B01BDED249F2E7F3752F08003F280C6D46E9BD3FCEA61544B4921C13BDF6E51A1CCC904005C1CC8827F318553866D007E87DFA9BC2DDD207F68FC7B6D6B081DCC900CF1C5C8E511F1BFEFDCB0C3A3500F4FF00023532050D4036603DFD3531ABF89A3FE67DDFF763612258B068D7B81FF23E5182F366D304AF6E7E667CE22206FBE37FD089E93F2920820330E7B6FAFDC08732D80EEF878B8A8E0506CFB0D2E3D04708CDDB5184ACDFA9B0F53F95C93388F3D9E0999DEA945DDD9B47D6A7C2EECD08E2BB3C427BF132AAF9C241AB01D76E6232733147085779F3B9F77CA6FCB71872BCB4CE0100708662406BD09D0FD39B5619E1A64C4FFB2A964B1E106951636DC55F42F66781ACDD04C0548039288BC5BF1EB6EB8424640308B334AD4A51735A00FA5F6B7D7589BFF4542657EA0CC0EDC412CE6AE483D3F9856C57000A8BA46DB133D7D48F5B8C6715844E29065A2E2F4B3353404BFAEB48ABE3A64D9B31294A58254D66074D28FE62B5B557B79924812B320F3511F1826E2C6E6FEF386D86C0F7482820716A2AE0396D2A3F1168C9CA12825601F946BAEE5FED7E6D0F9439A24260ACC7FEA3D6D6F758CDFD6062A1DADC02D430E65820F128A881CF561D7EAC62333A50AF754D4B56AD43F4F6D0FECE6D0532E1B40B289036FC87CC72C39C0604A7088F943B397DF4B83E15D75884CB92A5CC2555622E79EA2E7F160CCD25A4CD53F694E9D8589DBCEC418DE399EBBE19CDC2B4D989090D4F3AFABF96D58B062A48084828D9F57736FA1A75DE25F9766A92412EC8B58C1F84FE5F9E22F158321D9246DE7BEFEC0AB06A895F351343CF93EEFEEA369652D7B6A0003CC4DF7B8F744131BC7CB1018AC3109502284353DD8EC2BA8A43F961980B0B8B6EDCBA6DEA7B219EEAB6E95A5FD62B0F0806C571EBCEDF87AC1C72BC364431A383B8097A12C1ABB9603936E213329C38A0BFF817E7B34509AABB4FC8B2921C6EB5282AE3E200970A88D801E254CF48FBB13384EC54B94A0B52425AA03020D5CFA7D1ED1852284804DADA55AAFBFBD5A98CCBB5ACFF00523A6834D52D5D53CB3C083DCBA841262095291C31026E408DF7BDA70E8C0E5AC26A524A06AC2DB780E605232A94A007C8DC562EED67A7F35D233A0EC93B5CD48976AF515635A7A8442D9529DA6796F21775F842C2D25201DFDD87A3B7B9660D6654AC08C42D343721F467497A11AD76891C3144A523BC20F17200FA8FB574A3337E61D99766590A8AF54EAA566D5693E3A5E07D94A9437485A16537DA45B99B4E2532FED1E6F9DA972B2FCACC94AE9DEA48F945DD8A6BB7D22E9829B2152E8D50DC3EEE3E9F46AFF13F649A51B7579369168D414CA2A9CAE5BC5C52365869DE28F3040BE37C4762F3DC462A54EC4E2662F88BB04B04837143CEEE6C4C31CC70A99C7FDB04390CCF770EE6FD0559F68ADB3CF683CC909AC5E5E28E99B69486E998FA95328A78CF008516E7722E76BF58C5F51D91CB30180188C7198E99654B3DFCC40E24A5C538DAFCBAB5838CAB26C4CF530043B3029A9028EF5EB6FE7BE5D867B04FB587B54F665936BFD1144AABCBF35EFD65D69DA461BE14BA529E1515A4288023C33067AC63C6FF0012FF00A98EC8FC38CDE7652BC5A0622528A4CB215319AB555454784770EC87C1FCC7B4B2FBC9485814F980671E8D51FC459751F429FB6CD45452B4F65D54D31DEA4BE456529051C60AB67B98B48EBEFC5070BFD73F64BB95A573D05C3026517773AF07BA458B35FE9CF374AD053C6F6142D701D9F5ABFADE3D1DECBFE8BAEDDBB30D1D4995E4795AC6639B3406A2AB5BCC2DC694CDDA8EF16A32A25425044F4338E2BDB5FEAC7B399EE6527101626092B265B9525290A6770C0286DB1DAD133967F4E59AA3018842B8D948621AA684DDDE8F60F6D68F49EBBF649ED5F48769DA6742E7D95139CEB535634C294E324BAAA26B8EAE405148DEDC660D809938B8647FD47E418ACB674EE20512509EF439B90426C059BABBC79E7B4FFD3AE689CE25A5D65E691FB08FEE6707E9A3D445AB4BF46CFB42D49425ECA96D0A920BA0394E4348DD3052ABCA6F6F43B628B3BFA9BC9938B5CC1352895C44035B24B7ED6E46F78E8723FA6ACCD78592172D7314100D53472295FA9BB7888B7B25FA3E7B5BD1D4119564FF005DCD5D480B2B5B03855104F8C916079100C5F0AE69FD4A767333C2A513310489696484F125C9A87600383BD2D4D636C2FF004F58FC3CE32D724872CDC20B8D03D7DF9C573AB7E8FAF68259733472856DD3298A9AACDA5C615DCA699B53AD0482A9B84C7839D8CF3A8E5DF1E32C9D984A0AC50095CC4A5142CE4802CF476BB5EBAB4BE3BE044FC2E11734C83F2A492E8B53EBAF2B39B4744F2EECD7501A8CCAAB523BDDD0D3551A7714A292AFF2EF29920A428AF7411CFD71EBBECEF6E138BC04AE01C4B9B2819600DD2FC4ED4F2D3908F3F768BB1C8C04F54B5B009514970D50762E7CC7D627398E63419027EA790D334964A10972A470852884813E283636DF9623B1B8FC5E2672153D478CACFCA280026D60F436BE94D6B53728918596B52784FCAEEC36BBDCEFE1B56203579AA5F59FAD2D55255B24491799802474D8751B5B173C065F2D7850B253C5C37200D9CBF56DCEFAC51B138952311C01C241621C806A1ABF7AB6BBC2FC9B4A6739FA9C396B4A6B2F4149AD5BA9EEC2127EC96FBD00AC58CF0131BF4C54B37C48C24E1282C3AC901296502C6AE4394D09201009D00B45C30064AE4B9090403767B0E5F48B532B4767BA3592D102BB3822E9521D514B906627893BF4076F53886188C66266097DEF75243712A84A86A286E6A09B51E915DCE731FD33940248240009607951BA73E6D1853516A1D615AA7D2E2B2FCBA9552DAD5C21086D7BFF002CF0F78142C2C626D18639B63158541938792672A6063303922E2AC091D7AEF15CC3663331934959258B81A07D68D600D0FA3B89AF0698D2D4E56C5334FE6FC278F3499471C183F5720A01E5B743BC1C4365D819C95F7D3B8932D45D726A14AD5B881A35ED53A6CEF33C262B3195DDE1E72D2A01833967ADC569ADEFB88ACF33CE2B3317D6E5456283DC47EA8A49E04BE09F100DA4A528E110088E5318B4CACFE46101C3CACBC84964925D4A0DAB94B91AD7C394060FB2F9CC8529671B3B84D59D41C07A5FC8D3D5A0A5C83526A501971AEE196E097C70994820CC88B408DE60C1F39FC267B83C220CE501C4A0590FA9B86D0BEE2FA343B3956324CD42E6CE5AD94092A2FAD6E59B975E5135A77B2BD254EDB3488455E6CD24F79C5B2957224AA5361F740E78AFE27319B9CCE99C492251344F0B1AE8EDCAE0DFAD2CE71495C9972825949001377207F1B7E62079FEADACCD5E2ED5552997D3B5189088B08E2042222E3A89C39C1654785294228F43725DCDEEE1FEB5308124B925CF3E7B69CE20799EA4A5612820043EA90FA7886FC8CDC13CB9F9EF8B7E03252A524A935A55BC0D5C3FF30D4827881AD68F773FCF8DEF15FE6DAB1A1C44293BC0F101B9F2B8FC63D062F797E48470B259AF4FAD74F65A1232DC07152FD1BAB50DFCAF48AD33DD521CEEC36EA418513E21279D8137B6F63E6631273302A9588C3A384B2D55A74BB35C1D3A8112D9765C898854D203A6ACDB68F6F0B6A62B2CD753B8B2A0974285C1215BC7483CBE5E7B63A461B2F9186972D53120384DC35C36ACF43CBAD0C46666B9B3C2D087570529CAD61BF3FBC40EB351BA54415CC722BDA3AF3FDFA9167C365F2972C2D0010402384392FD1F573F8A46BD9533533D52D692C540317B3DAB7BB50DF42C222798EA074951EF02A761C516DF91DF636E9B6109582519CB41140450587B6FF348B567995210A93338402AAD03EDA003DDD8C44DFCF5D244AF7079DA7EE9371FB8C5AB0780EE9344B95004783BBD0BEF7109AE4714B4252C03063C837D3D5A186B33C74AACA2520112153EE1D27D2F7E5B4ACBC1AADC229C8F4D05858EF51D124E1406E2A91AF95181E5E3CA19979BB8A90A5445C5FC8F9C74E62DD36C3C460CA4B101EF4FAB51A95DFAD4C3A97877341437A7F3EB0DF519BAA6CB85007FAB7B7AC7422FD075C3B4614901869F96D7DEFAC3A12000346BDF573BF88AFD2A959CD5C5154ACC0E40FE33E44EE4018752F0459CD01F60D6BE1D616461F4097D6B46E752F4FBD0462E664AFEE5DA62F1F8DFDDBE161826B26D46625C697FA53D046E70E59CA03757F1BD3C5A123B9829444A95F133CF19FD116A20F93FD49BFA368F5C770FFD8EDE2DEB1A85728FF52EDB9981F3FCF18FD1285D247FFA47DC08C19005E581D7FCC62AAA539CC9888337F7F23B7C2FCE709CCC44BC1944A586E270E457F1AB75A68D0BCB4265A492900914047A83A50EE2F7BC02ACA08014491B9076E77106F1D63EFC48A1099C90A0C41A8E6799A6E2FAE9681299D354000A52491462CDD756F61E35BB982D447888BC448BF49DB9F90DF0D1139026141961206B7048FA0D776F387F3B2E912A57794E221D98120F9BD6DB73856C3EA4A544ABC46F79F8F9EF617116E9853152D465ABBB62520B10D40472F7AC442FBC532524948705B67EB407939FB70ACD5482471F0DC820AA0D89E46E3DFF007401179361A64C9738CD4170A277B13E54FCB40BCB810998104F139701F913B52CE2D0EACE66B21104C9DA3981B91E97F3B79E1A6608561710084FEE34DCB03777D3C29A3C3544B5E1C28005B7D00DBC2961E20830EAD666E20825563E640B4F537F873BCE1BE232F4E3D09F95DAACCF5FAE9CFD68C710833ECE6C4DCBF81A79EDD19EA97355909E254CF98DE663CFD26DF18D3F41DC4B292914140DBD35D687CFC94C1604A5567259CF2AB1A8B575A8DDA2434D9A2B652FED6C26F6EB11163B5BE2710EBC110B52B86A76A86B0B1B736DC6B594C4C970070B90CD5FBB816160695A0897E599A2E5202FA589DFE307F1C4662B04A20921CB5473D77E85F9814868249492FF002BB102FEB6F7B3458393E64A58582AB2787FAC1FBFDF7E5CE3158C661BFEC2F5F99ADE15D7A575AC2A896439BD9852AC4BEB1AA95BED3BB4FABEEA8D87E8E8DC5417950070C6F0A026C3CEF3BE2898C9F86CAD049280946819C54B52EFF61E6A892AA0B3EDA791A7E62C7A0EC034D64094661DA0E6C9AD7C80E53305C20A08BAC10DAC83E844748B6206676B26E2499584415D6ABAA7836A1BBDAFD79EE24F0A5492C4534AD399AD1ADFE21C337D75A5B4C512E8B48B5474CA690529714CB6A5981B853A8E29F7CDC1C3CC364F8DCDC714E0B592494B3A58DAC3E9D7A46BC0EE52E0747B5ABA30D472B475AF51F6C59AA96F2330A9714B54FD58A1E5251CC2A1283C207AF96F8BFE43D84537793A4F11A28F121CD37D69D4EDD59CFC3CF5AD250E438AFA5B93781A36FD6DD55AFABAB5E73EB4D2DF4A8F857DE1B0246F17239C4F43EBDA7B23904AC2A4A512932CBFEE2069C8B52F5163CAD6DCA708B0904A8956A2BA695A3F5A54ED15C6639A3CD394D58BCD3B84A43850C4779F68006402608F39BF96D7D3819331425094028302A34E27346068D7A5A2DB86C38580172DC9E16511FB18EC68417F30D488857EA6CB154F507EB1F58AC514F842549248513204401CE7D7A62A7DBDECC77F92E289C40C30EE54CAE2BFCA6A5886F16F48EB9D92C9F0D3D72C280D2AC391A5F60DA72B47E80DF413E62DE61F47FF0064E92D04BED8CEBBD709971415992C2428993610624F4B5B1F9B9FEA872F9B967C4CCF659C519E81353C0B27E5A26C1C90EFE7A47B93E15E5F87C160125084A8D2C91CF46DB773473B47B3A0212121490BDE2C3CBCA4F203D27738F33489C661583352E08A3B372BFB6DE3A6E63DD95A099009E497722CF46DADBEF53AEB94534C5688111E1005EF1BF972B73C45E284C9988969188FEE70CDB8D8DFCAB611218432C4951320370A87084835E122AC3CDED48F25BDAB2B6BBFFC5E7B3204B24203FA9803C3B4D322796F020FC71DE3B31842BC927A913C02657CC2F50926B6E82D51CABC1FB50A9433843E0C319AE0B3595436D77FABC7AB54E7868284A129054C3455E1927C099E53F198F2DF1C2F379B8C958F98254C51489847083407888D7DDC476BC8F0D859D97CA54C9284932D2C0A43DB524736AEBBC2E14EC8325092B804D85CC5BC85B903EE8C4A499D3D5201571061B9A96F0D796BA188E9D81C01C67089681534606CE76DCFE221FAF1B791A6B3BA86929E16B26CD14E3600F19144F70DE0C41BC5C6263229AF8AC3A66A8F12B1128A0D411FEE0241B1F173F730DDB6C1E1B0F934F9D2A5241125668904512696DDFC0C7C74EAAD78F54E7BA8E85D2AA7E0CE730484892920573C36063D3A5B9463EB17C2DC189F9560F8940FFB32D9D8FF006063BFDC9A88F8FF00F15FB55FA4CE3112C0349CB000A37CDEEDE1486BA4CA737D595F4F4F44DB8780F0F72A96D3565C8BF784009E1113E2C745CE30586C1CA56257313FED8E23C243F9024B1D5A9CC473BC1E74BCD148929155B301FF00736BF6E717552765234BD3B75F9DE4B505D653C6DB050EAD92A5899FAD2525B3C8DCF5F7F3F5FC43C221472F958D4495717013C40A85588E17DAACC0EB68B3CFEC362E64838B3216470F1F10496B3D4FD47942456619FE7B52D653434DF51A7A7E24B25A42528602A64ADC484A5E9E8A51E1B6D189B09C0FE8E6637BD0B9B39214B593C5C647ED29492787C39C73A9D8D9F84C5FE94B8659480EC4176F176B7D3495E4DA0E93295A733CE72F7350D7892EA69D2E28B4A3211C4194AC1DC6F698B6397E6FDAC95809CA9499E996A0AB93A38DF96B70E6F17DC0F62B159EE1FBD44952F892FF00B5EFD0381C9FC18D63BAA6BB33A52F36285DCB929FF84C10A6D6DA0C9F1029413E188E2FBB1D0BB199A65F9C4BE35AE59596FDC52A0A7A30AD35A6B15ECCFB233F20528CF94521C9A829147D2FF626FAC41D9CE93528465C285FCC2BEB894B496CB8A51524F2080A1CC4DFE76C5833C9596E5E8562A6E224C99680E949524F16BFF2046F60748D3229189C4CDE091215398B3004DF981A0EB4A0DA27F94F6579952B4C669AB296A68D2EA92ACA2816CB8555414A1DE0052906DE1DC1EBB639D27B7B93E2272F092FB92CE933810784876241BBB72D758B566395E6D864248CBA77090C7E45077F0BD28D485FAF2B339D26C50D3D2D3D569CA5AA491DFB94AE3A1C4881214E204483D441331CF1BE1E6E0313350B463E54CE253F0256950AE84051DDAA2DA4404ECBB16A92B33B08B96C29C40D05DEA01B7F9ABC52BA87508CB5483F5AFAD3AF24A9CA82384AD452083C3B02276E73B6D8EB192659271B2E5F772D20331501C54F01CBDD445352489D312F54A99A8FE1AF3F08A773CD646566403C8CF999D8833CAFE7B62F597F66CF106451C3A9835F636DD85DE1624E9E5BFBF22D5D08ABB36D53F598E2708E19BF15CF3BDC7588C5F703D9E4CB0974D5AA1AB50CFD4302F4D61CA5254453AB69D3D748AF735D4083C52E1EB1C4479723BDBA7E0459F0B94A5000096AD9AAF46A9F51E5A0859325C907A3EAFC86BA7BBC12B73F68B88594778A01690F178A031C40832926153CB7239DB1B4CCA0CCC5E1D610084A9DAE28DB126BF8D5A27F0004AC1CF0402AE1B9069422C76A5BC225DD957613DAE76E4C6A66BB23D3CEEA9AFD32AA75D586AA50CF748AC2A578B8C904700306F611BE28DF1A7E20657D8691949C7CF460A6630284A429871776520B10D5F017D5A935F0FF00B213BB4D371E65CA54D12880CC4E86DE5A7A5E2A0ED234A6A9ECCF5256E92D6B96AB28D4D96142731A353E1D5214E242D01412400384F2DCC1BC63A07C21ED3E1BB5F942F15879A99C829470A8317770C0FA59C6ADAE734ECA2F20CC528992CCB06654314D9B5F3E5A456157992493E2DC5AFF0018F5F2F3DA71D6F0D94A44D9930A5C1219EB6B7AD6A5B5BBC63B440A9186421AC28FC853DD7EEC6EE6095ECA262473B4F5E5D45883C84626E5609291448716E54DDFCBFC4472243CA4921E8ED5E5D1DF52417D4B59ADEAC02615D64933F21F77A83E4E9184A82534B966FB9AF56E70A230E285827A56DBD6FB3F5867A8AB4920F175D89B8163791E9704FB8CE1E4BC182430706E763CAE6E21D4BC33800077D68D47AB1B7BAC372EAC6FC4608224EDD391803D7E18708C154B80E19DCFF3434E7A43A1863F2B33694F47AB1A7836CD1ADBAC4A64F11B98DF90F79E7875FA5E160DE94A575377D7F98728C2392784BB6DCEBAD2BA6958E175A08038E7717206FBC926FEE8C6C9C3D4FCBEFC2BF6854E149B20BEAFB741BB743091CCC1488EEC933B9E5E5CCFE07CB0A8C3B8A8D742DF5F41A78C6461535E2A7D69E3CCEB78D5FC51FEB1EE18CFE993AA5FA91F983F4A8AB971D2B4B5493E8D0E1495DC6CBAF39501A5330024A67BC0B3004F2F5F7629FDA0C1A5536532C4B636B95390481A3F87DA18E230C7BD972D128CC4CC77502C11C350E357BB3E94A9A6972ADB5FD692D3A9A3701680A92A0E719598F0B64C6C48D8F2E58C62E72725C21C4E226F04A4A38895960400F724742DB30D00E83D9CC8862F0DC265712D88059F90637B30229BEC0595A6FB32D55A9F2ECCAB729CAB32ACA3C99943D5D99268AA4310E24AD04ABBBE048B45947DF0239D4AF8A7D9AC6E3D3814E3F0DDFA97C28477A80B2A70FC20A9CB78DCC2799F6233390B33132D66597247012002F5D74E86915A8CD2B5C72A51564D1AE956A69B70A78CACA1452A1C02F3298163E831D6A41972B069C54C295485238CA8AC335DC9A7F2D6D4B5C1F644CCF9420AD6A241604104E9677E4DB44F74B767FA9F57E5B579B655A7B33CD90C20BB595C9A5AA699A64B61452A24B45A5029178200FBB94E7BF18BB39946612B2EC2E370C674D982594098877E262C389DDDFC9EC4C4F0EC2E324CA066CB522500AE005069A9A8A914D6D5862A2AA4512E9DDA9571B8D2AA1B5B1B290A6CA9041024CA488BEF1E78E8786E1CEF069C62450A02D2A1FB4821CB69C874A450F39C957852A48B28906837FE6A07D840D6726ACAE4F025B24A5237B93631723DD699DF1A6580778B92AFDC0B01D1DE86956BB5DCDA2BE32C095213FB9CEDB11D79B72F0872A7AE91E9E67EEDF6B74E73D5FE2B0CE8259F930EB4F643E90F4E0061C0570D5AA6E3C5EC6E7D22434398250492A2640B93B46FBDF975FC0E20CE1DC9252C4934059BDFE68290C8A4CC253A0D2953B8AFDF9F496D06669041E2BDA21476F8EDF7EFE586389C30AD03D6AD4BFB6A168D152002771A558F377FBFDDA6995E6A94A95E3224833C47CB6BFE43CF6C55F1984624A8380E053EB4D39E90D94185410A0F4AD7A731EEB48EEFEA4D77479252AF2ED2EC314A96D250A791DD83000BF88024983B6C7CED8F2FE5F2B159ACEE2C5256A5ACFF00738034B160586A767021D9E15324103503DF58EAE6AED6A97D6971FCC5EACAD1C64B3C4B09428EF1E2298B721237E738EBBD9EEC22310D366A42258296200A825BC5A8C45EB58D84924EB7DABEFEBA0A18EBB6A8D522BD4B4BEE2E98A49809528CF99E1D86D73C84D8C476BC9BB2F84C0CB4A932D130001D4A6480DB0259DF97A429FA550A31074E7BF4D5B72F78A8736CCEB9D5B4C37DE55074A934EB6817140CC1909E2373D7CF718B94B5E53859478E74894784BA0A904D05831D0D1EBCDA2CF91E5986C413FA852659A37151DF968F4D236E4FD96F6B9A9DE42729A15AA85D23C6F06D9E14AA2E7BE00C409EA7A6D8A3665DB8C264EB599684CE0825B816C684B38483ADA8CD56117C9794E0A4CB79650A0055A8F461F5A569D69169D1FB2556B259CC3576AA6B2A091C4E5325B6EABBC9890436E1E189FEDBC8E98A663FE3263D73E5093819894F1101B88155280FCB6E76035BC45CCC74B9426489412A3C4385419C005C80CE4BFAD75A0794763DD87E9FCC5A7334A819C901417097D89213127849893B1DAE7A5A37B5BDB0CEB3DC8B1457266E18092A62144B82935A00CCCED4E82B16DECE674AC22E58528A7898026868DFC0A53CA3EE03E86DA1D2543EC5FA019D1F972B2EA39CD4477AE3A14057AE08EF0DAFD2C2DCB1F017FA8F38D9FDB8CD25E2F11DE244CFF6A802925892E412A3CB88B801C56B1EF1F837987EA700389355004A8B905C13FE45FABC7ACA84A9284C99266474B8EB279CC4FCF1E5D9397CF13261134A413B9AED7FAF5A476AC5CF4861C1C4776B0E8DAB7DEF0933104A50A0762094A60D8103AFDC0F4E738DA4E0569C54B0B98684B924D6ECD5DF61A7587B839D2CA1654001C35A5A87F9DDAEF48F33BDA9ABF2F4FB577B32B6E368EFBBDD4BC20800ABFCB372424DCC0E9CB7E98EF9D90C2CC392E604ACB2658E100D4D0DAAE7ADE388F6AB17874E71292A97FF00E630346FDC2A36F623D30A31C6CD3AA3C219660721FCA4C5B9CDBF1C7259B2509C6E256A524A8CC3C2EDFF00222DBFDFC23AEE5B342F2D9440E11DDF9B871F9F17E71B908714F49802E77E97F81DFE6061CAD52C4A60CE41A02CE1BFC7973AD6E5C9C4AB1C5452A090B2C482C2A77FF3D4888E6B2E3774AEA26511DF2F26CD12D091E22285F88E5BFC46F8DF2B9DC18FC299859A721A97216920817F5AD3AC3FED6611589C871A07EF4E1D756FFB0E9E6E7E8098F90FA6ECDA9EA7516A6CD357A90C3633BCC56D78924280AEA8200283D2279DCF4C7D2EF869DA6C5CACB30DC1296DDD203D69F2800DAAC757BC7C4BF8C792255DA1C50E2048C42C5F751D743F4D9EB0E8EE76D51D7B74FA66943CCE5EE35C4C349F155265370E04F123840B998DE77C755FF534E272EC7E2312A2B9E994BEEF8C90124A486E13436614A748AD64395230D9865E388042A6238CDC5D37D1A95D478D7DD6EC934769FED6FD96E82B337C929575AEE5B5AB7A987766A5B5529594F13E91DE8928B49079729C7CDDED676B731CABB6D394A339027E300487504B05B0205850B9661E71F47724EC46599C762A64DC22A5CF9C8C239084A5441E07A90E0171CCF311E2EEA7CFC653599E69EC969052A72EAAA969D4148EF29D21D73861C52429C2A026C48000EB18F76763710ACC7B392B309DC6168C2F15492144CB35634A31E6795447CD3EDD65389CB7B5E70AA92A42558C290188FF00F319B9F869ADE3D58FA3C3B28CA33AECE6BF5BEA2A76733467A406175C84A52834CF2DA50497A5224DADCE37B63C55F157B6389C3E73324E1714501135695B176F9A9A1F1711F48FE057C3CC366191CAC462B0E95F14A41495258074814D76AFD691D5CFA403B28CDF24ED3720A9D3540D51E4DA8BEB7F5B094B6DB4D2699A4849E22129209322201F3C760F81F9FCFCC30AA973318A54C40485A8124BA8D280DC78D7CA391FF531D8D9191F02F0B2C251F31570A40A029ABF4AD746B8887FB20F66D91D476B9A4F2FCC6859CD65756AA84A825C4A0A5A2B4F1C71A45C5A472816C4EFC699F9865D951C4A7319A014FCA975077206A473A8D2F1CD3E036024E6B9870CBC1A715C0B4F79404258D5FE53A0AD7AB5045D1EDE1DA9E96ECEBB5CEC972CA3A0A5A5CA74EBB5EAD48865B42B81B710D2E9F8D9420A956981C2666D8E19D83C266F9B23133CE266290B4A9D64A884B850DCDDDEF4A9348F58F6C256478491264FFA6C94AD80092948515001EE01BFE2D48EB97B607B5EF62DDA7685CBB28D06C37519BD2D3210E3832E76894D38037C652A718471EC762769E77EF3F073E1B6759A6638B9AAC74C9B2913905BBC2B48471925FE62D4E8ED68F3F7C431809981693804619625AC06481C6480DFDA34634DDAB68F22739D68BAB6D0E0A97EADC1DE175A4D33884B026C0391C2B1020F0CC45F79C7BFFB3D84C9F2597FA5C462E4255292848599882A5961C4384AFE562750E4C78F8767F375E3311311859AB965648012A00004EA017E474F28AAF35D4B59561468E96AAA409934EC3AF8B1DBF94857A72DA0F41D07099B767247089B99E1D0542814A46875756FD7CE26B0FD94CFA785775974F98CD6428EF7F969E3E1159E61A8AA0294D3A87699E132DBE95B2B3E5C0E2524C499F4BD862F395E2328C6B1C262E4CE701B8549376D028DDA8FE71BCFC8733C00FF00E6F0B370E752A490EDC940575D85DACF09CDF3DA8209E3299B03313E9B4CF31E91899C5FE932F94666216994801F894C186A5DC7D5B5D042984CBF1189253265296AA330249F2D0D869E31147EB2B5E6BBC3956695C82470FD5A96ADC41837975A6CA52204DD5D205A04049ED7764D13C22666D8497312AE101531018920070577EB4899576673DEED43F433D12D49AABBA5916A5386DCFF0088FA24FF00C3F34FFC4F38F69DEF288501A4A6D32426A521C5A78A9DE3F65E128248E8279EC4E3E6C7F5FBDA5C0E3335EC649C163538D4C95E278D522604865AA5900842AADB97F3B7AD7FA5DECB9948CD5799A4A030215365F0E8AA7CC0077F2EAE23C90FA4F9F799F6D1ED756B1C2555196A65238504229624204045A2605EE4E3D39FD1162A7627213278569C3A254A290B51506A93F329F9EAD63AC56BE39E5584959AA7F4265CC5198A7086705E96BD741EA1A3CFB62A6AAA96B14ECBF544D9229D972A15249E4D25667CA3F1C7BB3199FE43810462730C348EEDF8B8E621268F4AA9361E6F1C1734C9F3198A93C7849C525B80842D4EE06C08D75DA123D499CD2F78E55E5799D2B523C5534354C220EC789D6D222F3BFBCCDE1307F11BB1588C51C3CBCF708B9A5410940992C9772187CFE6DE10F53D97CDD3290AFD0CF08E176521428C1B4766360073B4332EA9D75410D256B52E7850D852D4A22660264FC26224C62ED3331CBF0D253899B88968C3A805A6628865248705C9666E7E17847FD1F1B2D410AC3AD2A51FDBC25DDF52DE97F186EAA5D43062A1B758528F843C85B73D63BC026046D244EF8532ACF327CD57DDE5F8C953D4925C2169241ABBB13F4B36D0FD792E370C90A9D8698806A92524537A86DAAFBD748481C71E3C0CA5C79667C2DA14B51F720127A9306D7EB896C663307974B13719391211565AC8F17A8F74D61F61320CCF1C954CC361664D4A3F7292951677BB258D053ED78D2E9A964F0B8CBAD2B925D6D4857C160131CEC7E186D97E7D93666B28C163E4CF502C52852491D589FA427FE9D8996A32D72D499828A0526EE69B0F7CE13A5558F71772D3EEF0DD61A69C584FFEAE049299E40C4F2C3AC666795E585031B8A9520ACB242D690F6B3900D4EC5EB5348772F25C74D415A30D316848752824F08BD7F6BB53F98D68A9712EF74A4385E5FD96D2DAD4E123786E0A8FB87CB0D319DA3C87052933B139848932D41C294B400433EFEDE12939662F1333BA91216A5A4F094A52A517766A5AADD7CA1CCD2E6E96FBE5E519AA59DFBD396D586E3AF7859E1F3DF11586EDD76471733BAC3E75849B3096094CD412EEDA178959FD8FCFF0D2FBD9D97CF972D9F8952D6CCCEF61A08D2DD653394D52D5532424800B8A25B2D284C4A6CAB9226622DB8B61CE6B81C3E3A4A71D22705F7693351C350A08054E5A961476DB788FC160CAB12996B4578825448B0763D3A781E7ED87D1C5F46D7651ED01A2D1DAD76D5AE32BCAF4AD3B89A84D1D656314EA7514EF10524FD65A7374581078B90BC1F9A5FD527F5419DE4017D9AC9B289F8A9C53364A972F8C04708677082F67BBD3C63D37F0FBB2194A9289D331929165709625CB96297D6DD23E8A352763BECDDA0BD8D7B435762D94652FE4C9C86A1A7B3A453B6F2AA1746D3EDA16DBCF214A212E20DDB70C8E626FF363B07DBCED3E63F12726CC733C5E310538A9B351853366A59D5C452A4F1071703886CC184764CCBB37835E5AB972F08853240337841715AD459B5F5BC7CE37D1D3EC0BD9C7B4E506AAED5FB5CED2B2BC9F4A6439EE60E1A2AE14F4A5D6D19A54A3BB014FB4E2802D40213B444E3E907C52FEABFB4DD9AECAE5D91E4DD9EC4E3F159AE0E64B13E5A9694CBEE258E251504101C56A43E95B50324EC4E469C619B89C6C99650B1FEDAB841249B00F4AF237D9E3E9B321F67CF66FD2BEC9FAAEAFB23C9F24CE3237B4D66ED8CE986987455B941495282B4B8A42D40A5D41921773D6063E6164DF157B5DDA0F899819B9862317215FEA282252D7308495CE4F121A80B3B07A8F37E87DA3ECCE00E4CB99859289A132DF8D207CAD7AB5776DF5A47E7EB99553CAD5DA81FA670AD946A3CF5A4B53E14A5BCCAA5B09126200004011D06C31FA51F85AB389EC06553B17F2CC9D8294A73534969F534A3B11D23C5FDB3C261E54F9C94949505101340CC5BCB4D3ADDD61A9E179C360A20152428409120743783F3DF0D64CE50CDA62250E24998C4836A9B36F5F50D578E6D2240E30E011FDA4EB537A68DF4BC2EA5AD22C5422473E91B19FDF3DF17B9D870653B7F66CE6CFCABE5BBDE15CC30EA4C8701C0069D28F4FCDAD687715CA44428136BCC6DB72B72B73B46D18ABC896A993660092C341AFDC59ACC1BC62B3224BAD4EF7DBDFB2D787EA0CC9700C9E5CF6E5204D8F4F913CCC46195574B06EB7AB81AF8E9CC18DD72D9C1A8FA3F5BDEE225B419A2E6EBFEDD95B79DBDE3DFD6715AC7619469C06AE280F4FF01C5BAB329A9B38FF00D5CEB4B794762B54E6C071A83A41333E237F58DBA5EF7DE71C7A565D225E253C12921883448152281C6D51B4339649559857C6F7DAAD7D6281CFF365B6EB4FB0A9711DE44999E4678A6C7AF58C769ECFE110BC1842C3215C2EC360E2CDE21CED13786AF8375E9EBD1B5178A7EBB33ABCC332397B6477F5B534F4EA240801D712824721014762248DF125DA5E2C2E54461D4A4044B515106AC2B73CAA7D889895278A6254A4FC86C79B0E5A901AC3AD63BE792F641A23B2BCAB2CA9CD69855E76ED326AB89D4AD694ADD6D2E8B282907EDCF3DA48031E5F38ECCB35C73E1B1737F4FDEA90085AABF310AA39208E7F888CCD676264CE0B0B29516A804381414040EA79B934AC573AED1B387EA1C6A90B34797A014A034869A21116FB294AB94FAEF8EB196F667032A44B99350A9B3D41255C4B591C4C0BB17162697DAD161C063316BC1CC2A9A543828EEE457C6CEFCBA5285CF359E62BAEA86E81D76A5E724A94BA8500929499E14AD445FC85E3DD8B22B29CBD6A92956165A96183809716636ADA9EDA23275CD5E3546628A92A5901DCB876677E74F3A98AD6B350D7BB46E2EAEA453BEEBED0727857094BC018BF4990236DB1359E76764CCECFE365230E90A561A6540AA7E451156AD3DE9178C405CBC5E0FBB0CEA4B80F40E9A96F36F311F6FF00F44CFB487627A07D8CBB31C8339D5749499930D6646A43A8292A5AEB0AC0054A093626627CF1F9D6FEA4BB1B9D49F8859DCF5C92705371044859500ECE08FF0095F4E4C358F7CFC27CD64E5B92E1C14FFB9DD8E335776A58789FE5A3D3C67DAE7B07A893FE35A0513B789223FF00783D368C79E667657311C24E1C8059994039DE86DC8C75D91DAA91312B2A092C39967F06F7CDA305FB55F624AA86186B5AD125D7C90DA000E070CC09F19E1DC7BB6DB0CF19D97C6257294B42A5A9C355DF97F9BBDAB0CD1DAE90913425600D6F5607D456DBBBB831D07F690ED5FB27CD3DA6FB08D495F9AB0EFF0085179EAFBE43842426B29D00294942B8556BDC1B74138EDDD8FECCE3E6F67B1C6493DFF749E04B0D01E2BB5EB7B4705ED876C24FFAEE140AA0CE72412EFC405B9791FAF7968BDAE3B1147749FF001C51381D6DB4A29F8384B2A420050278A4C9EB1B5A0638D637B25982F1B3D2B796B4CC5380417254FEA5FA73AC77197DBBC2E0B2FC12952C282E527889A30090C0536D47DA256DFB4AF63B52D17D3AB290242642B626D22DC40CEFBFA7A88ECCE612CA122515B9B920077D9CF21B35ED12D84EDCE027CA331284B84972D504F36372E5C0A39BC42754FB4E7636E64F9B32CEADA572BD596662C52B009056E3D4AEA001E21CD437F8EC70FD190E2B0D9860538895DDF14D965831765A6ED43B78D4456B3BEDA8C46539A32C1692B09029FDAA05CD3DDA823E726BB4D6A1D439C662AAA74D2E46E667983E97C29278D976A9E701001076563E90760D587C2E43841DC85CC3212C1AAAF94063E8FE11F1E3E27E67FA8ED1E2C951FF00F10B377BA8F3DEE1F76D1D5A15A4F42B81592559CCF34752A43E56C2D2195A92522EE05257C526FC8EFE53B2E4E2B3454D95DCAA44A7AA41278C39B6C035999AB668AC23303225CA5057FB80122B66622BE9EAD1EA67D1C3DA356E6B4DAD74267D5014D965A4E5ECACA600A843AB73BB40B0B284C0DA77E5E47FEA07B392F2DCC32FC7C99211DDCCE359081F310A4DC9036AB9FCC7D02FE947B5666659986131F33BE4CD95C284CC53B5160F08579EBA691E6DFB57D02F43FB446ADD2F48CA826B336CAD9A6436D1850AE711DE59293301D2609B795E3D03F0CBB5D82C6F60569529089D2706B4A8135044B291B3500F0E748E49F1ABB1E319DB5C26270F2190BC5B92948ABAC56800F46D9DDE3D63D679EB5ECDDECA7A4B4FD3D70A0AFA85E55514DC09EE9C70565753543E0410612975415CA3717B785F3FC9A7769F3FCCE76154A9A11885BB025BE657E29A1AF87B5BB159B49EC8F6772F913C0940E1D00020020F025DF7B86F1140219FDB652DEBAF673CB7B42A1A84D65465397D0AA9DF6520281A92C21F3C683E466F3F3C74CF833982BB31DA219762014AA7CC9685A9668CED650DCEDA5ACFC77E3BC8576AB239936534E2A9534A384026B4D37B80C28D778A1FE8BBD38ACC751F6A7AE3362A552E434B4151953EE712D3E0A675555C04CC41410A8FBA23A6FF005398DF9BB3D83C3AF8D3981095049A2788CB0280B7F73D5E28DFD1B7674E447B478BCCE571197F34B334587FB960A0478383D2F1D00EDF3B4DCB3B5FF6D6CC1CAD6C57698AECE692810DF787BAFF002FC34CE0481B12B490A81EA2F8BA7647E1F4EECC760A7E2952D4A5E2704660590470BCB2A0C5BFEEA6BE04449FC40ED2C8CE7B5D2F0B8629E04E2420A50A0430500D4F3A6D631D85FA4C7B09ECFBB23ECBF446A9D0990B397BF5B42DBB59DDA882F71A29E49E202D0B5796E76C3CFE9073EC42737ED665B8C9866210660725C83FEF70B29CF0B10051ACC6AC218FC68C99183C26453652693929E2012CF496EECE68EEFD6DADC5EC3BEC93D82F6D9ECCF95EAED55A69877387A87303535EA75C49A782E214E10980B800AAE6D1CB1CA7E2E7C43ED4766FB6F3F0F85C6CF121589504A12B57FB80AE8007A338D2FB88E87D81EC064D9BE469C5CDC1CA0A449054B29490E52EE695766F13E1D77CB7B55FA307D95F5337D966A5ADA5CE7575066CE50E74A5D0E6150D2DDCCAACA695B0EF03AD00D77A124A55102F187F2FFF00BD4ED5E0F119A617178CC26151251370C4052C21900AEC6BC446BBC5C3B2C9EC56598D56031587C199A66776C5281A90033737E8417878FA4D3D843B14CDBB0EA1F692EC3F29672E6F2DA36F31AB5D138E38DE60D661DDF7278388251DCA16491C2798306062D1F007E3B76A724ED88ECFF6AB319B3947132E5494CD74F02428853D4D081AB0B1B8880F8E1F0DB28CC72F46332AC24A948EECA94A9612D514B0B3EDCE3C95FA3EFD8CAB7DAFFB5072873D529AD09A51F4AB3B7B825B525C0A52525692950F1B651E156F36C7B53FAA0F8D583ECA76572F5659344DC6E61872112E5CDF996B2945B87626B7B4713F853F0CF0F88C7CC33D2172E52D24852416626EEE28CCD7F331ED076B5DA3FD17FEC44ED37657AB32FCAEA3324B69A5D4714B53982DA70B63B9529C6DB78B654553E150BEE4C63E7164B86F8B7DBDC662B32C1CFCCF0F216A13249489AA4A03BB3BB105FF00168F54CEC1F63B2E912F0B3F0B8452929E151504024D8D1BF8AEF1DBDF602D2BECA39865BDA876B9ECBD5AC3B9676954F42FE7397B02A1B5529CB5A712C0522A085A78C95010948E5046DC7FE30663DAFCB73DC932DED38C44D9A89FDD89B394A257F3201531729091A3F3ABD1DE5792E513F038E393AA5C80B40F96530268A37074F1A7311F2D9EDD9A0F5876C5F48CEABECE34B65EED466DAC334A1A4A4A169216B534C53A1352E955FBBEEDA25C85471011D4E3EBE7F4EFDAEC8FE1E7C239B9DE3B1B2A4ABFD3CCCEF145293C5C059342093C54E57358F3EE33E1D4DCC3B4015899AA9A9EF8B25609A055C13AB55A3DB2D21EC57EC31F474F627956BBF6A534555A86AA958AB7EB6A8543AF5454B8A42C34DD134A70ABBA5B81B3C283B49006DE1EED3FC50F89FF001AFB4999E1BB0F331872FC36226A672F0F314A010A52C24802B5636F08EDEBEC6F65F26C1E1978F93875AD284901410E4802E48247E5CD843AE8CED37E8AFF006F2AD1D8C694A4CA58D699834E31434BF52AACB54C843656DAD0FA9A612F153402880A244C1BEFCFE7E59F15FE1E6608CFF1F3F349F2B053113664B519C12A2140A81724338E90DE68ECAE3C8C2E1B0987750605212785A9B397B5DED68F1D7DACBD88321F60BF6BAEC9B33D4CDFF17EC2359674ED3525229B506128796C539429E1DE3A65EA800159F43C3B7B8BB2DFD48E3BE26FC3CC660A5625597E719560D689A9E22B521610A0826DC5C5C1D45758A2E73F0FF0D2F32C34D4E113DCAE62492122A388122DABBB73AB3476CBE995F611EC7B40F609A23B68EC4B4CA74F30DE5B435D9C2A9DC79F4D50CC51485A512BB2203AA22DD7D71CE3FA55FEA0FB519476C336C176971F331C9FD6777253314DC23BC58701C9A863A8F38DBE28F65B2EC365584560F06842D329D44243BB26EC0BEB61F58EB77D0CBEC69A0BDA2B5EEAECF3B48C9115DA5F4A379686DFA9714DD3B8BAE6149578EC9052E8B4F31B49C7A03FAD0FEA531B90766B2CC264188386C66310A226CB554B942943875A1ABD5E25BFA7ECBB2BC6E0B35958DC14B9CAEEF853C4134A2C3D41AFD77148CFE9C5F64DD15ECCDAABB21CCFB27D389CB322D4633E5E7556C294EB01146DA0B01448291C4498BFCB101FD0C7C4BCC3B6D8BCE26E7799ACAB02252D6664C241E30A51A1506B6C45F68E55F113B372324CE3113A5C905136728CA4705140ACD1EA035F9DDACFD87FA2DFD917D9F35B7B1EEBFF00682ED6B49359BFD7B23CC6A324CC2A5E7996D353963756DA8A00849979B48E524629DFD62FF501DA7C27C41C9F24EC7E70B9185C04E50C6CB90D30CC1F229292C5C380776D8BD7A9FC3CC8F2AC66478B18FC1CB13264A696A5330252AAFEDAFBA433FD16FF0047C7633ED01946B2F6A3ED7329198689CB736CF1CD319170BC80D51E519856D354789985B83829D2BF1209E84E3867C56FEA47B5D9965594653879D88C2E2B13284A5CFEF540A0808054524A5F8AA7C1F9C2BD81F875976133AC563674B973A4A269584148660A510CEE282EECE03C76133EF6D8FA209F5EAEEC8F37CAB2FC8AA72466B32CA247F07CC5C73EBADB6FB2905F14C140FD612920A951B99E78A9F6313F19666639763324CDF31C62A6E2242A68016A4AE5AA624CCA9240F95EDCAACC23B1F6C71BD9E9992CCC20CAA42572E4A92662529BF0900B04D5A80D5CF947CB7F6DD98682A9ED2754D0690A448D286B5E772AAC69C7385FA7756E38D1088E26F852A40009E77BC63EF5FC2D19AE27B2182979895FEAE6609099895D4998A9490B725EA0B9602C0DE3E7D66984C361F1F8E992F86B3144240FD9F329AD43EEA5DA204E7699DA05168C4E8ACBB50E6F43A64D7D10EE28B31A9A50106B10B221879060991D0DE6C4638DF6FBE086071B85CDB35C76024CF294CC9A17325A4AAA16A35209A0E679984BB3798E2E5E6F874CBC64CE033405490EC9AB0ABB1E63611F719ECCB4196577D12940C55079D6DCD299BA9CAA7DC75C71C5F0BCA256E2CF1AFC7B1528C998C7C5CCCB0B87C17C7E46130C844AC2231E89699290004D92599AE6E1BD23E876569953FB10B98B960CE18572BA12FC14D3CBEF1F1263B45D6195D26A5D1596EA0CCB2FD38ACFB37416286B9FA34A93FC52A5442FEAEF2146E49BDCDED8FB5123E10651987C3D938FC560244E9BFE9C572CAA524A83C804949524A83BD5887E758F9EFDA2C6E6327B52A12F1B350062FF00E902B0923BC6625C69C888FB62FA37436DFD10F45C0FD454A91A67582955352FBD50EB8A5AEB4925D794B70DC9FEA81E58F87FDB0C1E1B24F8E786C34A9489586959AA1299694A5213FEEA1DE81DCEEE7C9A3DDDD9793FAAEC4A97894F78B5610152C977F91C13B6E1B6E71F0D41E4FF0019D517B1D4F9FDE7AE6F567CB97A48DB6C7E8E7B00A188F879911C3B07CBA58615A8949B3035F060DAD63E7B76F113067F8C96147804E5F0DD802A3FC39F106F07D6386A5E954FD98127A6D791711D3117D9EC22E566589993417E371C557D4DFD3FCC56E4E19425CB2454025F5AF2BEBBF4D442B65F4A549F1117D8133B9DBF111118E9C7826CA5310DC2CD7D0FBB51F70D0EE6CB070EB0A0F42DCEF4F5ADDEA21DCD581C104806C04932237EA6F6F33E51882C348EEE6CCF9581347D1AE08A8FA3F28AAA241EF4B503D5875A537EBE46EED495890078A368BED3D3E23F29BE179A8490C589624F869F6DFCDA313648276D542BF9E477DED125A1AE4C99267C30677DAFB99FC09DE4E21B13265F1D520835622C4EC74F388C9F29945C5363CF5A1AFA9F38BB35566EB3C70BEBFD43CE36900188FC0922390232E2A9C9530A9AB077DFEC7D98889490A55ACD5AD7EBAEDA738A4F33AB7EA52E21A5C3A2E825406D1363E5CB68BCE3AAE4321387929EF43A05F50E5DB4B124B7B1161C248B52A0723BB1DBE9BC55D5D555F97D6B398A163BFA5ACA575C3292785A7D0B31FF00D2920C5AF8CF69B0C313835CB961C290B4816A28105EDBB1B78C5A70187965491387FB6012F5A16A73D06DA7231EC2D0E6343DB5F64794EA9C890DD4667945070670DA16953A8521096592A6EEA121063C33F7E3C9887ECA769A7E0318A29C3626705604A87CAE3E69B7A0209D6F0CB37C009C25CC4A6A824289A382ED4DF7DDF58F3FF55D53A8A8ACA6756ED33ACB8A429B295A4D94531C8F974DCDB1DD70D99499F230FC052470804820B8206BEBAC38C2614A306BA31092CFBB6C3D19BEC6A1CE2A1B6E94D552D6298A961412A012A529C0E2A0DA64409E7127A0C5AF0384EFE64A524D8855BF8A03AF2E710793A267EB485A010A98782AC181A8A16F0FA51E155F574F58EBB978796F3ED86D6E28A54890A0144126DB74F77417FCC241959262E7CC4A512BF4B31C382C532C87BEB52CEFD63A16225A9388C0CD029C69AB87A902B7D3AFD63ED77E88CF630EC27B6BF627ECBB55EB6D3F559D57BA33712D66B5F441A28AF536ABB0E212E714011702DEA7F365FD5776CF189F8939D6065CC12F0786C47FB44049E2E2249AD598BFD2CE23DE1F0CB234E3B22913520F11949E2150CE06A59F5FA3B523D456BE8DBF65AA623FFE03AE03911A9336303CA1FF0021D463CC333B578E584BE2980141C29D7EC2C1FA474DC3F64C244D704F10B329CDDF97AD18C3831F47AFB34D0BED3B4FA1EB42D0AE20E2B50666AEECA60A6389D26FE5CF0C31DDAB9E152C4F9C95936F9406F001E9EE86AC91D9204CE025100DEF5A3FB60199F58E8D7B457B34F63B90FB4CF611A5D9D2D50FB1AC1CCF9A52179BD60211434C9FEA53849B120472B0C769EC576BE6A3B3F8FE09E1333BA1C33784167E270DD287626D568E0BDB0EC71FF5FC277608499C1856EE1CF8F883AD8C776E9BE8F0F65F3DCD4AB485635565B6DCA8FF00E399990494050801E001E4607AE3924FED5E28E37124CD1326198A2E400D521C001B6A0B58EF1DE25FC3DFD5E5B81EF16C44A4B062744EA0E8DEBA6B2647B107B36D3B229C698AC526200FE31997DFDECDED68F3C03B439AAD49299818170191C9B41AF3A1B81489BC2FC3993230EB48554A7FEEE7CFF817D4B4373EF61DF66CCBA92B734674A568CC6932FCC2AA8E737CCD490B6695C7495254EF0C4A07DA91CE3A3E959C63B178EC1AF10B0A289F252FF2820296806D5B00ECF50FD28D9D7638E132ACD5810F26656BA254CF50FB7947831A8B5585D456D065B50728A0A5CC6BE999640FAC1E062ADC6805289E2D900DE37DE44E3EA4760F2892AC83033D127BE52F0F2CB92DC24A126D50F577AB97A5488F8E5F14303364F6931891C494A3113372FF00316D0FD39EB157E6DA919CBE1798BCDD436A5781D84A0C922E40F14926D72676BC0C746CBB234CB13172FE4580EA05360493737A1D08F431465F7E664841258D0726605EFBEAFBC7643D8BFB54CD727F689D274B96075594666E3E8AF5281699504D390D7138B0126E6DE2BEC271E5CFEA1B24978ACBA74D080A5484AD5C406C1E80835A3787311EA5F835DA09FD9DC760E54B9851FA85A1376FDC4021AAF43AD9EF1E95FB45F61995EA4F69BEC673E6F2B15CAD6AF57D4E6CA292A43472CA765CA72B51494DC8944C49B0DF1E36EC176EE6E5F2339C12A62A5CA96932C20A8BFCC169FDBC8B75BED1EEFCDBB132B3A9D94E63DD85AA6844D2784528824DBAEBD23AD7F4A7F69CC52E7FA1B413084A19D334CF273069A7C6FDC32BA7EF1B4AA525251299026245B7EFBFD3C761D3DA34E6F98CC1DE89EA2B0E976F9A61D47D7978729FEA2BB4733B289C9B0B2D7DDB0082104876E00CC36DABD358BFFD99EAA97B78F624ADC89D712FD65265798F7895381C752A654FAD80A049298E04F082013CAE71CD7E2CE0E7761BB62AC5A5E54BEF9250C0200E020166BEDA50C59BE17E151DB7C97867FF00BA7BB4B05391F303BF5AF86911CF672AC47B3A7B09EB3ED133C0296BDD6F51D1D4B8F8EE5C5835F5D474A49500612952786D7E538D519DCDF89DDADECBE0A6CC52E5CB9A8E034570F01965B672CD5B6D175C5F66657C3DECE677899284CA54C92A24A592F45D68DCD9BA574F9C3EC1F5EBDA8BB72D195B5B52A5B95FAC2BDE2932B5BA87736E26EC24C00A107EF8C7D53ED664186CA3E162B8E5A50519594824004B61C8A3B17A73158F017C3FCD67F68FE214E4AC952518FA3925819A7EC03E9A0BC7BC7F4D6D6FF09EC47B2F57D6453B4F652CA9692910A866948B58DBD31E0EFE93F15C19F76C8B904E215F35DBE79C2D7343E5E2DED0F8E39209B97767D93FB25A6800BB4B7F13AF808B4FE8FACFD549F477D567542FADA751A6B51A9350941242D2DD604A936894A8026098DE7149F8A586979A7C5BC1E1A604AE5CEC74B40492000EB4824D9A8790A1E7171EC14B184EC6631228A4E14F096B325479F3D0347C5C675A8733D4FAAB3FCF33FCC3F8B664F6AECCB82B9D400E2CB19DBC96B88993FC9094000AB940B1C7D81EC77C2AC9B29F86BDEC9912710B9D960592109F915DC71000B106A48A3171CDA3E7F67FDA7CEA4F6F92893366F7631E9494B90083380E8D5E5E31F657D9FBAF6A0FA23A8EA350D51CC1674DE661E5B80AD4E16DC70530264901AE1481702009C7C62CEB02B97F1C71B8192938799FEA00219C703289A33338A8A6FA47D19CCF2FC6633B0183C54C4A9415820B59209249402E6E472DF68A37E836D3D97D07B32F6959EB85B39ED70D46E553EDC38E452556666907123888284252902463A27F51133192734EC5E1E74D5CE9689B2C1E25BA4A4992FF00292798DA39F7C1CCB958939C1E13C487090C410471F206ED4FF11F2EFED8FA8F52EA1EDDFB4CAAAD79DA976B73A79AAA1564B8A4A296A1D431C21E24B7084A638627CC63EC27F4CF90F64717D89C395E030857FA1905733BB944BAE587513C3423E66249203D5DDF907C4D999B617365204D9B2E5F7AA0CE4502B7A7B2F4B1F7A3FF000DE663AA9DA2F69CA1CCAB9FAACA72CA6D37FC1A89C052CB21D69F35019512507888957081B7A63E5D7FF101ECDE4B9676EF245E562428CCC4CCE3EEC207012A433B683CE3ABFC229B889D8498A9B89513C0010493C4E0DDCB79D7ABD5E7B03CBF24D4DF4D0F68D575CD30CE6D9355D21CA92FF03A0177285F7E5A6DC94A89008514A4C4C9223152ED6CCC661FE0B49948C44D38695879616842D690BEF1496A820D09B30F1022F08C2E1FFD53884F471F192D4DBAEDCB77B88EB6FF00E230D59AD55DAE764D903A9A87749D28CE52CD0F7C5AA5AC52D868F1AAE107B8761694A8192200B63D3DFF00C34F22CA670ED22F30548EFE7770654C9B2D2B291F395278540BB8A170FA93148F8AF3A6C992832A72827849E04A8D580377A7361D291E2CFB2666FA9325EDFBB38CE748E72F2F57E539ED1B74CDD3346996EB15B52C35508213C29792DD3A949921462488C7B6BFA81EC7F65476273EC4FE93088C423093945932DC321452A0C9B967A5059C5E3987C369D8AC6E745D4BEE4CC40092A2A0083F31725EA6AC6D1F57DF4EE657923FEC8BD9F6ABCD99646A8D3949A7333CA1F79612F37501FCB6A6B0A4AA0C9524C83F2D87C73FE96F23C5768FB5BDACCB30EB52B0F3A7CF429491F2CB4A0CEA10ED50001401A8C418F5EF6865E0B0781C14D9851C72D095558392013737ABF56630F196E6C7DB87E89E6AB2BEA1ACCF3F3A7DBA6532036A768FF84389658909B9E2453A6091F2C42E6B879DF0CBE2F4FC3941978638827BCB267900A8D2A070977B3DCDE2A99F60F0FDA4C995DD11314896470A43905801B16D872B3563A8FD8A6643D877E8BDCF7B415D40CAF58EA9CE5867EB253DD55775976A834D716591DCC0936817B6273E21CDCC3E3576830D8096959C3E4921656A014A48EFA53A4B86A120B579D59E203E19E5E7B32719DE3A3F50B02B4601441E573BC5A9EDED95A7DAFF00E8B1D29DB250BE8CE35150399652D3543284BEF819967749435012A471281EED478C4DEF24628FF0CFB77987C09CEF3BCBD6B992A5CF284AE695143F0850173BABCA85C45C7B4FD94C1F69049528A14A7252C94921C826CC4D40BD5C3888E7B42D72BD89BE877D2FD9464B982323D579CE541540853694D43C330AE69FAC480B214B05150A077001DA76E91F09F21C57C6FF008BB8BCF66838BC1A274A33E6295DE252148F97E524EA3D0C547B5394CFEC764A9186E2E12820000B903722B6FA5447523E874FA4FBB34EC3F4D669ECE3DBA54B590E5B58B71AD3D993A953CCD5273971D7F350E36D2421BEF3EB0471BAAB4C836C76AFEA6BFA64CCCFFA6669D98C3AE64DC2A0AE6C99287131410909AA4109621D9AA4EF7A87C34EDF19B3F1387C4A08257C20A9554804824BEF5F5D6DDE1F694FA20BD9A7DA6B2BCE7B5BF657D4395E4F9BE694B559BE6147401399AB3AA82D395094ADC53AA142A2E1544849515584838E71F07BFA83CE3E0866986ECE76F7B389981731121189C4F04B32471048290A96EB0C45886AC7A0D59060BB4592E3F112260E3EE4A82407E27492D7DFDEA7E40BB5DD09AABB12ED0354766FAE3277329CFB22AE55355D33AEF7CE04F78A0C3BC424C3CD04B800FB33048DF1F6F7E1276EB2CED864F97E6D8032C61B19290B9694149487487629A50D3ECD48F9F3DA8CAB1180CE71D875850509AB090411FB496A9B50F5E948AED154DADD6D0EBB14C2AE8545266E3BF6CC72E639EC3963A6F6F932A5764B3498B4A7FF00C24EAB80DFED2EB434A79F9BC7767B0CD98E1D64007BC0E7982057DD5AD78FBEAF662AFA773E880CB14869229BFC279D8EF645E3EB039827DDBF524DB1F9A1CDF855FD47AE7713FF00FCDD2424D984D1AB81A5E84599CC7BDF23C6A7FF00B26B95C54FD310472E02E763B7324B5A3E04330A827526A39794298EA1CDC8DFFF00E6753EFF008FC36C7E8DF26C560D5F09F08BE14850CA4A4D451E4000EB73CEF7B4789FB418642FB4AA25001562814ADFFF00F23F9D3EBB53EF17E8DD7C39F43DD125091C08D2FAB036A172AF1D6CF29989FD6C4FE6E3E364B549F8F1317254ED9BCA5708714EF52687A104FA55C1F727663853D8DE07001C29DADC157B0153CB7BC7C2A3EFAD39C6A42018FF0013EA08FF005019BD64C7327AFA5F991FA25F8098838CF87D9226657830328126A6B292DEFEA2DE09EDCE042F3EC41480C672DE9CCF5DD9CFD5A3172A549A9709901411C2677B5E27E605E3974BA63F049C14C9B36581525541AD7DB6BADA22315970932A5F086A3B806D4A0A69E1A6AECA115465266E0F23C87DE7D63718322C51C52E625CB75B1AF93D01F5D221D587E397303513A1F16EAFB6FABC38AEB4422157326D73E9633F3208F291890C534951090C4D9BCEBE1B79BC41230CCA5921874DC9BB37BB42DA5AB55A5506DFD5E963EF3F872C45AE6BD5FC5ADBDEEFE95DE119B2039A3020B86DB9EDF5F52FD4D5EA491E2E917E91EF13F0DB0CE6A8AFE660143C7EA3D988D9F86AA986CFEE9EF5D22ECD40F90557B78B993D4DA3E47FDB15AC1E5E95B16A534B3B78FF00377AC5670C82E3776B3DCFE4D8DDADB54D9ABE12410A20C988B4753337E5636FBF172C149125212C006A8BF4D34B9DAF16BC149E2670E77AFA86E5E0E4BC56D9CBF2570A3799BF39B5A4733D49336318DB1B244E42924536D2C34E7BF268B6E1B0E0814D7CEB563D43D69D2B1D8BF644EDD6AFB31D768C86AEA4A74EEA7710DE69DF2B89942584F80042E42788A88F0804DB7DB1E5BF8C3932D58BC3CC972495A78CCB524170A2285FCBFC5DF62300674A2AA0E023E56078838366269B36FE3DF7EDCFB25C8F5C255AF34025A348DD38A8ABA36133F5A2A6813C3CC4104F8419918A6F65B3DC7E5C24603385A84F0A3C0A51A293C4E1C82C960C189A9E704CC20460A6AD2070941AD058359F4A9FBE91E5F6ABA775AAE7D54B4EBA179B70A1CA2752429B521453243804F111C42C37168838F4C765F3CC24F5490262492120A5DC681F57BE9A6BA8A165ABE1C4995310584C265CC7BFCC49D34B171D62B87DFAD69FAA7AB82509013E201209B47282771698B5A717AEDC62049EC8662BC3034C2CC345137428F366735DB58BCCCFF73138201F88AD0C1C9145245AD6E576ADDBF421FA081E6DFF00A3B3B225A2C952B3DF173319ABA0C1F224F5122DCB1F971FEA4D53719F10B3D52C9E3562893BD14A16D396B4AD23E8D7C2099DCE47210A179483E40793687A78FB2AA6CAA07148163F2F3B7FBDA31E7E998351E021668C08F2AB7A4760958896A0B205007A5BD3C357B469ABE15367FD31045B9ED68B7EE310F9AE5B3166594CC371AB00DC3CE96F6E211978D9604C5300100BB867B8B5796ECFE5E4C7B5B1AA57B657B27D400AEEE95FD58091B0E3A56C5CEE0F4BFBE6D8EDDD83C0CC464D8B2B55049AD2DF2A99C6FA0361D2384F6BF3195FEB7840502B3C696F9921FA5391FB7AAC8610A436F95C7794F4E08BC59A02F11EFDB718E62AC0A978EC4CC0A202A6ACB7451A75D5F6F08EED2B3A95232FC17124377496AE9C290CE7F834E8601429510B0AD89277B0F5E717B7AC61E04AA5293C35B8A9DD85A96FBC3D939E499929443304D7A0B576EAC79C326AC729DAD3B9F07109FF00F25CD477840F07F917E4F513E58525E24C8CC72F05C257390493AF0AD275A1B0677FCD373ECCE5E2729CD014848EE576BD9557DEDEB678F8E1D4F9E32D6A0D474542DAAB1F5E7799A51C00F8146BDF1B00A8B9927CADB463EAC7C2DED370E418342905411225B56CC8079DC0D46978F8CBF15A44A9DDA3C629D81C4CCADDC7191BFBF48D794F66398E69568AFD5EF16329716DB8DB6B570C2525248F0A82809EBE40E3ABC9ED34C9B87C42654BE29841E1029BD5D9A9A3ECD72639BE27092654DC312404B83D76AF93459D996B0A7D019AE42EE8D2D3797D2D7D025EAA6C252B4A45432167BC23886CA04F15C18338E4BDAEC9F17DA2C973097390553CCB99F2B3E8AE10DC9C5FCA3A764989461734CAA6CB53211325970E416282F73AD58FDEBF499A435D685D45A334A6BCCCB39CA9FAACA32353D48A5D4D377CCBA28501EE195F182A5A609B4F3136C7CE35F62736CAB3DCC72F460E7AD789C4A124A652F8529332AC5883451B6EF1F4DFB3BDB3C12F22C04E9F8894572A424104A5252C90DCDA805BED1F2C5ED9BDAD37DA37B40F69BA9D7998550D53F4AC51C39DE3605334A60F7601294C9489E10279E3EA77F4CFD805E41924E070CA2664996A09292EEA492AA915624D0DFCDFC45FD50F6A65F68733CB8489A0895318F097A0296D756D6B1DD9FA1DFB66CA5BCE3B40ECF33FCE986F2FCCBEA21A159528A7692840716E06C3CE2130A04F170EFCE71E78FEADBE1E4FC595E3E4E1967B8528F0CB4173C6A6FED0F7FA0B08ED5FD3776B70F96E1B0F879F31290B4CB492A22C000E1D85377E7179FD33BDAF694D0DECA2F765BD9F5565CFBBAC5C4AA918CBABE9C70FD533043D530197140F1852CA85A7A1338E73FD28FC32CC734ED4A71188C34E4A72A9D2D40CC94B0E165E8480D6B579DEBD7FFA81ED86053D9A9D2B0F350158890A4D140BFC9B3DCE9B79B7CD77B2766A32EEDEFB3072AE9196D0BCCDB577CED5B61A6141C68B8A5052826E649E23F9E3EA97C69CAB118EEC0CDC26124949C3E5F302B80151534922C072FE77F017C0B92995DADC4E3262811FA90B750666593ADC6ADCA8ED5F79BE9D9D6196E73D877654CE4F99E5F9A5553E5A84BAC52D7532948E24520095069D2AB0041045A27CF1F3E7FA49EC8E367E73DB554CC34E92133C8495A1697F9A6B91C4002D705ED48F717C4EED06171F82CAA585A0996800B10744DAAC35D3CAAD78FB04EB9CA32BFA322972CA8CCB2BA4CC9BD33A992ED23B5D489794A79157C03856E05137B5A6F618E61F14FB219E9F8C32E5E1A4625CE3A41429329652405209F9827845AA01ABDCE88E51DAEC265DD9DC44954C9602A5147015024B8237AD4BFB68F8D0FE20A6B3ACCF2DFE18DFD61ED599B283E2A91C1C2E674FAD2AB9E002140CCDC791C7DC6F8739663F07F0B70CAC5952972F2A53CA5A492B6C3D2A41208DACFE31E4BCC065F3FB6386C72928E0FD5A56A371598087F324EEDBC7D8F76739E65591FD132CE50EEA5CAD19A2F4F578550AABA914EA438E2C941417B8A549510044DE7A63E2DE2B2AC6F683FA929A065D364CB9F992A5999C0A0901CA1DF85855F56D3578FA378CEDA64EBF87F230B24C92B4E0D2821D2E0F00167A35EA0757631E6A7D081EDA3A43B2BCFF005CF619DA03AC65B926ABCCAB98C86B2B2B521A612BA9AC5D61256A4821D2EDB8D4041F0F2C7A13FABDFE9E33ACAB2BECD67D96CC993E64A93FA832132C924F0CB5247102598D5ABAD63897C24EDBE5B95E6799CBC419694CF9A52975003F72858B543EC2978EC3FB64FD0D190FB42769B98F69FD9176C990698D3DAA5F6EBB34A76CE5D5296DB442D6A05CAB04132A5129005E3AE285F08BFAACED47C30C966F67F1992E3D589EEBF4EE654E676294B132882E1ADA758B476F7B2B96F6BD68C5E1E74A4852B89D251576367B0B55ED6611E837D1D3D8EFB387B29E95D73D9668FED4723D49AEF2AA2A56F5F66685D3D297DF71A71745655429B5F772A4FF002C9B092463CE1F18F37EDE7C4AED2E5F9EE3F27C7A30D331266A25944D99C492B4963F238D0E8E29710E7B1FD8D9393E1712138E4105150E915093AB862ECECFB6F1F33DDB8FB4F663ECD1F4C46A1ED372CCD5BCC34FE4B9C50375B554EB40A5758CC28934CB529C6CADB5F76971517544198C7BA7B13F07715F11BE14FE8B1597CEC3A4E0E92A6216145728129FDC12A1F307F3022A824A64E76427304BA67317208AAAA2AAA96A5C37D7E813DAF7D9B3B11FA59BB1ED21AA346F68F91649AB74ED122A28EA7EB14AE3E8A8AE4B2AA805A72A5B5288525408502236F2F337617B67DBEFE98BB4B9A6066E4B8E9D2319394995365CB9BC0844A2BE1AA65905D245F7EB16DED7F6270B9D60A4CD46310A5997549E162E03D4AA800FCC7527D943E861D25ECD1DAA50F6E7DB776CD926A3CB3479555E59973AD515021A0868A544ADAAA01E3E04AA540C102379C5CBB6BFD55F6E3E20E538BECEE0F2BC623179924CA0A2998C94AA8B042900170A34E434022A1D98EC9E0BB278A13D7390A757168EE1CE84F202BCC563CF9FA747E900D37ED2FAAF48F62BD926629A8D1FD9B0ABA2D52E53387B9CFF00BE6DAFA88412477628D6D7FE52941405C441C7A5FF00A01F80398E588ED467F9E15C939A2113128992AA85A9331F849A9752812D67AEB087C4DEDA77B2F0F2F0EA2C804712554228D4D080EF7FB9EDDFFE1ECEDF34C6A4D2FDA67B3F6BAA9A5FE1540D658D51A730AF45335C351DF3CE06D0F389063651493245C1C79FBFAD5F8659CF677B468CD7012A6CD97227CD5F14B9449214A0CFC214751BB5A8224BE14F6865E2E4CE958A57CAB486E2340C0BD0DCE8FCEB5BB37D3F5DA4E8BD03A1FB2AF67DECD1CA0A9CA73A733E5E6AD50660CB8CD3943E8AB68AD2D2D6992B24A4820CDE4E247FA39EC5E6FDB0C6E7B3730C24C4CBC6A30C897DE4AF993C09525552028B9706CD6899ED6E7185CB1483865A400A51E20407ABBB3DB414B02EC0D6F2FA0EFB42D17DB1FB2AEADF66DD739965CCE55A0AA327AA0335AF6025C5D4E647304708A97533C2B6D2004930400231CD7FADBF81D8BEC8E6B968C2C99C3FD51538CC99264CC3C265F090FC009ABD1FA0687BD91ED29C74A99356B0132785454542805682DA1F0AF28E96FF00E221F684C973ED77D94762FA3FEAB5D93F67F4999B59A2B2ECC1B5538EF6959728F8D34EB2DAFC4D88DE3CAE07A6FF00F875FC20FF004DC873AED2E3662C4C9F252B9726721495BC94AD2C38AAE586973C8423DB1EDE6599C4B565AF2D7DDA4A388917218BF3A6D7E51487B197D12992FB6E7B2EE8CED8727ED3F2DD13AFB33399A33AA652E99CAB4269AB174B47C295D534B47F25008E048277B9BE257E2DFF005739D7C30ED563B23C4F646766982953C4B933940A92A4053121E52DA9CEC361150EC9F6224625189C6E16600A53A884B50FCC6CFCAAF4F08F793E8ECF653CCBE8CDD13DA8D576BFDBE516B1D33995031534197E67534ECAA8450B4FB8B6DA53D5AEB87EB0A2010902D682231E11F8FF00DA8C5FF513DA8ECE4FC83239D95AE54EFF007C4A90B481DE197FB9425201E1FF00D4760D1D0BB35DA49BD97938B918C2552D614900AAECE0D34636B5C3968F907FA447B67D33ED09ED73DADF6A7A792C3391E695F46C65686214CFFF000F42A91E712520254165B2AB822FB99BFD73FE9B324CC3B0BD8AECD649889F3711330F2815CC585024CC29531724D1DB661E5E67F89599E1F33CD66E230C94A553564A929E1726ACC40F4E82F1D247948AD71B69A3C6EBB574490B1002385F6C12784DC01733F7463DB1DB544EC6F617310924A95825B0B9FF00A65869AB59F7BB98AAE538632E7C998CCC41219C82FCF4FE35B7DDBFB336A1D3793FD1114D91661A9B2B7EAA9F4B66FC544BAEA565F42DC2F2908E00F070CAA364C9DF1F9D5C776733199FD434B9630338056684F7E25CC2857CFC553C2C963401EEF736F5164F99A11D9F989EF83995C25259C3EC77607E952F1F0AF98B15CFD56A6AFF00A9341273DCDFBA685437E20732A80DA80998363E933338FBBF869388C2FC36C361895059CBD824920FFD216075B53D77F336793258CFD2B04F0F7C4F78C4DD428C2F6F1E8F1F709F468EA4A2C9BE879C99BCD33DCB28F323A7758A2AB2A76B690D4203AED6A590A429D0E7892411E1988B63E137C46C8B198EFEA09787999662168566329489E25CD32CB14A89E2E129A1A5CB178F5A6419AA47645C4D48E1C3906A1CFCAC19CB8EA3A5EFF1079D56A9DD479CD0B47EA85AD47A8D65EB2D2B0EE6956B491C8820C8B9B75B8C7DEAF8272BFD27B2F95E166829030D253C268DFEDA685EF6B0E81AB1E46CEA60C566F3E61629338B1707FBC8AD6951E62102EA1F436DB6FD4FD6384A8254121300A8EE2D3F0F48E7D23B4B365994549775A48A6C03DDA9B787268C6712929C2A1807E116704061E2E6A3EF1922AA23C441F5F9441DA3DF883EC8A0F14F51258177DAF4B57EDB45630D85EF44C0D41A5FC5B6BF4DA17B3540F3E7613EFB1B0FD8DED1218FC4254B2904120D791D1FAFF88613F0641248D5B6BBF4D7EEDBC39B15299BDCFADE00F3BF31FBBE23FBDA0A38EB4F0F188E9987242810054736D4B915F1F5AC3E51D5004CAA768E7CEF73B794DB96136F5FF10C26E16F4E7EFCFAEE445EF9FBCA495C99916BEDE5E63E7317C37CB7BB3C3F3247450F3F06F5B450309C248A8D4B1D694F37766F4200A9B337AF24C133CF7822DCE08F95F6C5816B961988B5C355B5F0B922EFCA2E99690C12EC59AB4FE2B7A45739CBA47149067CED07A12768E7E98CA172C9F988FBEA6DCF98B45CB0286006B4B80C1AF77AFA6F102A9AAA8688729DC534B6DC43BDEA55C2B49696958008330A88B13D3683880ED276670B9ECB4A804AF8056D4B6A3A6BE4F13D265204D42D49E24B1052752A70E79EB6E5AC7B09EC69DBAD16A3C859CB7357D0E56E4ED064513AE052AA82C14990A3C809BA4FE5E61F899D9E565A0FE9A590563E65A41E24F0331A5473AD87384330C0CD93869E94A14B0524A5816AA5C5F50E0121CFAC4E3DA13D9FA83B45A1ACED1744308A4CC5092EE7B97B0907838070B0520402560711EED26F20CEC28DD8CED5E272BCC70D81C629687584CA98A27FDC018977A066662C4EED1C7B0699E8C7AC4D744B42CB248019D4E59D89FC1A691E516A5C933664E654556DADA76994A4292E24B6B3C2483E15709361331B796FECA9D9AE5F99F64B152578A97DE4CC22AEA492FC0A162AABB8FF00069D070D353331B8128F9F8549B312038BDDBEB406B1F7FF00F40754328FA39FB1E678871B6ACFC2E08327F8A3BB7C7AC74DF1F9ABFEA9B013301F14BB412E5874FEA125019A85C92799BF851C47D21F84F8633F219135350258141B74A6F6B5CD047B573C37170AEBCA3D3CCFCA31E7054C50E1FF006EA6F5B3791DFD6E0C752958644A4AD2A50254F7D3933DDEB5A53484756DFF0029464057862FB99E40C72BFB879E22F1F899A0CA4A65120104B5AF6B3C30384470CD26684EB56B56BA3DB4DB9C7997ED4C8A65FB4C7B3BBAA092ED2BD9F84A8C594B6100F39F90C769EC5E38232AC64B5A7878E5A68D664976D79B6FAD9F85F6B7088999F61BBB980844D1516FDC0E84801C7F916F48A8549FA95229C215C4C35179FF00CB06C07E679FBF9ACE5CFF00D6E238657CA16A6A8DCE9E57E7BD3B9E1729958CC0615256DC32D249A97A07EB60FD042D4BD07812D9E13304DA39449E9E71CE2708CC54D0A41E0B9AD411F57DABA9A56F0F5394C8C3C99893307EDE4052BB8FA9FBC43B5AF0AB4EE774EA8E0A8C9F354B8B240E0FF24FED7E60F97BF0E25619789CCB2DF91E5A27202C805EAB481CBAF4E91CF73DFD3C8CAB3596710973297C2E039649E7F47FB47C9CFF0087F4FE94CDB52E62C96AB6A579C664B21C50250AFAF3E47DB2779DA01FBB1F53FE18646064797CBE220CD92876154FCA08A354D5A9F48F8F1F144E2FFF00B438D54B96B52062165C02D45162FA8F1D6BBC55DAEB5E546669750ED48629297C3DD214059560070C1E42605A2F6DFB5C8ECE1C0C852E5A4A8CC0E0849B8D7CEB7F38E479AE2B1AA5E1C194B0C468695076E5E3A87B50F9EEB658CB5CCB43D14CF1E24BA560A92A6D457224CCF1446DF0DE7FB23D98563D73D18A90485FCB504382FA16AF879B45D329CC2711216A7E29401B331706FEFED1006BB78ED1F2C6574547AF330A6CA2950B67EA816EA92A4BA14DF081DE6C27A72F7E2771DF05B2D44F9589978290A54D515294654B7D2E4A5DEA48E62D48E98BF88D98E1B06A9285CD010801202D4D404559BCB4D0475D352EA97DD5BA0E60E5754BCE975E754A502B2B595192499DC9373EA39F77EC7F6364E4B82EEE5C84A4290DFB40B03A369CF5AEA1B926699EE63DA1C5099890B3C0B3C04B9D5F4B5BEC08D23B4DDA8E75A5EB5CACD3B995569FCD69D1097A95E741A80B4C2B88B6B483C0098924FA1DE9FDA8F85F27B4B8BEE276192B97316428AA58500E402E0A483726FF0066BE7663B5B98E46B9264159092976590CC41D19C035F28856A2ED63567696ED2D0EB3D4B98666CE9F53C72FFACBEFAD3FE6BC6F405B847BC9DE23A62FDD8EF82992F6170FDF60B0B25733149056A42128293A12007353AD9A8D171EDEF6EF34CEF05874954C502901438891A0E7737D2FA562BCA9D40FE459A65998E4B5AEB2F30E38B62A10E2C2DA5248B8F103722C7A581B62E0AEC761F1384C56131081313884291C2A0084F102050D3534A0D2D669D809F332E13B1330702D4CA36492589E553FCD8D1F75576A9ABBB412A6B5A6ADCC337A4A06826969EA6A1F5A112DC0094A9C2081C291EEF2C503B27F0872FEC763B19330F879481984C75704A4A48724D4015FDCF5D9F58B2E69DB1C7E2E6A10A2B28413C2EA2CD57AB9E60DB4D2B0DBA7FB70ED3322D34AD3997EB0CCA8B4E5225F65BCBDA7DD0D38D3E56140A43804428D883BE2C78DF81D90E3B33C3E3A661244DC4718985664A38A9C2AAAAA46C6B5A42A736C5E2E5A13DF2D0966238942A7714A5ED7E45E29276B87091C6E77AEBEB74D4F12B88B8E3A5C2B3B1278953EFDE71DA26E5B2B2CCA1196CA940C8549324200040053C26C0EEF42F6B34426264CD97884CD1338940951AB12407605FEEDBF3B353DAF76A54BA75CD08D6B3CD1DD38FB62687EB6F25969B47F34A0254F0042CC8B00224918F3F49FE9D322476865F69132E4CB9C7102795F7238828A8170581A1B6BA691D4FB239EE2F31C0CEC2E227AD12D29290952CB0670CEFD0FA91AC55D97E635EE553D9A503D5394D530E05A2B29EA9D69D6561478969536B428971424C2A6E649C768EDDFC3FC0F6970795E5D8C28C4A70C9084A972D2414B2284104580F3DE29598CDC564B9909D869CB525530FC892415392FF303A383E1B34596D7B5EF6FDA7285DC928BB50CF5BA1E014ED527D62A57DE34B942C77A5E253C2826FCEFEEE57DA2FE9DFB213A660572B29C112E0AD430F29C905372106B4D4E84C751C176C33395839404C5AFE573F39245050172FD473888E53DBA7695A1AAB37CD74AEBECEB2CCE75496959C569ABAAAA55616E40E24ADF3C3C016A48BCEDE98B2627E09F63F0323087FD1B09356809242A44B64D059D3BF4AF844BE13B7D987E8F1038E602A490071177A8FAE9A6A6B117D41A9EAB52D43F9CEAB7DCCFAAAAF8559966AF3CA4D4D5A80F0124953814D936214622C462E384C8F2DC9300A9383C049932B807CA89684866A8094A40028C4806BEBCCC769B34399098274D333BDE2EEBE6660A7AA8D2D5AF41A448342FB40769FD9636F27B25D5B9DE421B5346980CC6B1E69238A5CFE53CFF00040BC023CAD8A64FF86BD95ED9A7128C7E45835CC50204C99265A8B977214A43F3A9BD6BAF4CC4FC40C68C3C896B9EB432085312402C1A81C1D9EDF7996BAF6BEF6A7ED1A84651AC7B64CDEA74F3C80D869B0B614C881C485165D4B8E0717E12A3B5ED6C73EC37F4A1D99C2667FAC9383C2B77817C2244B00317350351E075BC452BB7388C4A529257C697A959215B720DA0D49A5E3AE55D4AFB4A7731ABAB71DA9E24ADBAA71D53EE38A599597256B52CAF97193C3336838F487677B3780EC9E5DFA6CBB0C894020256109E00AE1D580F17A8AD1ED10B8ACCE6664E272B881A1048B68C6A030E5666ABC4B3477693AB3B3DAF567DA1752D6696CF5F6C8AF4D1ADD6FBEE0414B454A42DB49F092773B9F29A4769BE1764BF12153139A61249AB1EF65A5770C28A05F97D350FB25CEA764AA3DCAC94A8FCA453AFD5BD2D0CFA9BB4AD6DDA356B59AF68F9F57EA4CC925EFE1AE555438A2C820A5CE02A717C05405CDA6DE470C3B29F0B724F845881FE998594B18958E2084252031352C1A8ED4E82D0BE79DA4C56629497514268B3C4494BB0B7D5BC636E94ED33B4DECE686BDBECFF0055E63A4559CB8D2B325D13EE95560A75CB417DDB8829E00624F5B7385BE27FC25CA3E24A7073F192A415243A44C968594BB1A150A3F215F5898ECFF693FD3B018A40593DE2181763622CFBF9DA36679A9F3ED6F9A576A0D5B9C556A5CD4B6C8CC6A6B2A1C2B57F2C210525C7167ECD884CF520EF8DBB15F09B03D85C3AB09829E89689C9632E5CB084B005D82193635A728A5CA5E2F1B33118C33152C05A9481C4FC45CB6B46A3D35B6D38ECDBDA27B6CEC7D8699ECA35DE67A5B2A60AD4DD0B0FBAED3A5C512AB32A7782EE19FB20199E6629DDB7F813D98ED8AD788C5E59869D393C44CC5CA4151513772924D75BD2B6ADFBB11F11B1B904D9B82C4A55312BF941366B5D8BB8A7A5ECE7AE7DACBB7CED8A94E51DADF69B9D6A1FE2922A285A7EA32E4308A732DA4AE95E42561D4813D3AC99315D88FE99FB33839A56BCB70C9EE8828224202878B39F7766893ED0F6867E67C5364932CADC800D01FF0026E47211D79A9CCF2D06BA99346E51B34FC011C6F2EA14E71FDA59714789449F11BA8DE099938F42E1BE1865F95E1E5CC91C3DDCA1F227858D00A017A352C34B4727C7E0B187172A6AA615AE693C40D804B6B6FB0D8986AA253ED24D45112A6DC50214A3050526410150A9E7D248F73AC4ABBFCBB1197CC4912D52D52FA8208B1D34F037AC4FC932A470778A4A66242788022B6D8E9D5ECC77B799EDC7B60469F6F43653AE7356B260DAD2BCA9350F374FDD9F1B8982F25B3226C419F2DB1E6FC2FC0CC8979F9CE152B0FDF77E66059948E3078B8BF71F9BE96B35AED83CEA52705350270AA18004D4D59C3DBD8058456B4E8A377EB05552B156B5713882B594A9C995AA4909F12A547D63963B2E7787949C261B2B92014A502529A80064A45052C00D3A544727CCF118B56350B12C2A49987E7A1FEED989A9B5ACFCA2DCCA3B77ED9748E937F4A69BED0732CB34CB882CA7256DC7154E50E921C484F7A1290A2A26C800CFC38FE7FF000772AFF51C366430B865CF52F8CCDEE659980B823E729E22D472F5B728EB595670A95932E5A9652F29B85C80696634F1F48A997589A4A751CCFF00CC562D4E3CB741BADC7945C52894F52B24FBCC0DF1D672D9672AC36170E80C1090030D801BEDD1E968E42A44CC4663326C90425535CA49B7CC6C4DDDA837A5A120AF55434C9EE032DA4ABBB571F115C9BCF3116B9E7BF9CB6653D73A5A454FCA34DC375F3E9511379980BC3CB48A900B80795F402D460C4794642A215008B7E5BEC3DE01EBB8C3DECDA3B9918A333E5252E09D686C2C746B5ED588CC04B4852828555AD2BCACC5B9F95995B5504CC72E5B7E1F84F9EE3103DE4C5E2A6853F0F116F07E41FECFD0C6B98E1857853C54E54F2F7CAD0EAC54A85E6E39C8B18F78F4FD92E3D6212661D4011C377E5FC74D1DC5EB0EAC55A81B2A662DCA39FA4DF7F8E1C4454D90B0E18815F467BD7CBD63B31A83FF0030F9729F3FDF5C5772ACAB109E1FF714DD5EC0023C58BB56F1C87064FCBCF5237BD9FDF8454B9AEFFF00501BFE1FBF23B62EF2329594FEF248BF27D37D7F2748BBE560F9DFC3C0D9B56AD9A2B8CE261572771BF33B7A4795B9DA30DB13964C40A2D887A8D46947F7CF5BC6096A6000B063CECDA06EB5F1115F660B2961D00F8942537BC03B73FC7737387196CA54942C2D7C65ACE76B6B4BDEE1E2D3804898A4BA4900B7A87B3378FD1C44F3B1CD74E7669AB726CED2F2D2AAEA80D5537C6A094A0A92D789174FD9513F64091B49C72EEDC61246213338A5853F1338043814A1D4B57A88BAAA4495E0D49525259140D770E5F7B8B92F5762447BBBD9F6BC0E06B32CAEB52BCA6AE9D872A11C21E6EA389A056DC2B885D4549909244CEE31E5DCEF2C4712FE4E15851E152404941770411B30B50EF78F3E76CA58C3E216A909EED890C000FC8351CFE34AC535ED49D82A35A6529ED5740E4E9A7AB6997D59BE9DA75A54A76525A0F155B7014F42516DBA623B2ACF335C3ABFD3B178F9AA2974A165D299A935E16FDA3803246F7DE1976471844EFF0076BF3A0A5CD5241AF9FDEB5871F656FA6A3B60F628EC4B24EC374A766CF6754BA42A2B02AA5CCC9144A52AB6B5750B4F74EB6543854A5241BC81320638FF006E3FA61CB3E296738DCFCCBE2C6E2780A94093FB53C3B905C72A0F38F72F60BE2CCBECC65430D310172C20339B33B3537F6E4C770B49FF00E240F69CD7DA86974E649D911454BAF52A12DA73AA5592952925C20A99E4992795AFE7C5F34FE89A46094B64148960924836A126FE941B6F0DF3FF008FABC3A138B4A949134AC896096649203902869B56A23D6CCB7E946EDBB32C8727CCF30D00AA3AB553A5754C8CCD874B8A7109264049038493CAF18E793FFA5BCBA54E992C4E49282C42914046C7463A87A5F78E6B9B7F54D8891296944A293C24385549B6DADC0E61A299ED17DB175FEB9D65A375E55E96FF0039A3D756B651F5E689FF003894A1710009001BC19E587184FE9EB0F830A40C425282188018116FF9023E9CE38ECEFEA5313331C27AE5296EB772A22C6E28CC5B4DA2E36BE93BED716BA5A2CB745B8E14252DA17F5C6E13090904CB7113CE4EFE7784CDBE03E4B800A5290272E6D4B121D89ADEB4F623B1645FD5CCC95874CB9A42025200E2581A731FE0B062D13CFF00F78C76CB45979ACCD74D251E00A4B66B2941822C2C276B0B6D1B6C6051F02B01895BE1F0EA4826CEA557A380F5F3B3E8669FD59AA705844D0285C85E8D4B6BF93BD693CFFE94CED32B5EAACB2A749A99A3A9A6ABA45BBF5D6D40F7ECB8D6E102078B91F23D7177C87FA70913264B5AE5174A90B49E134620EAEF51B8D2D58E4B9E7F5278EC6098133490A0A0C0D3E67BD18B83B1AED1E5CE7FAD2B97FC56A2B1A5533B9AD53F54A417F8E3BC79C7AD06DF6EFF00083B63DA3D83EC09CAA4C994A5525A5090E9A06006A4BF3D8EB68E099DFC44958F9CB9B3308959592492D5737A03D6DBC5199DEB069D0950A8E2E2E20B4F111B5AE49826DCF9FC477AC16449290854B414A406FDB5B3863E477BC404ACD70D9B14BE1C21ACFA7FEDD2CF435F18A7B506A469C04A5C22247085189322C41E66D63E51B62D797E4D230DF34B9684ACB5001E069B0FA18939494380848036B742FA3015D5AF58A8F33CE0155DC8E22A27C5B983B8B4FA1E67CA716C912A67CA9324CCE166A3F326C69E874261F224226065241069BD01E777B58E910BCC3356C93E3937BF15ED6E93D39CFB8E27646267A180C228B5D81B55A8DE7CE159396C90414CA1D5A8DCE84EBD1BC221B9A66685442828F8A4CC98F599300733D05AF13382C50278A7617BB240624786C0914DE9A4484AC24B42920A1D542CCDCF46A90DCF4AD6227515C8415149009DC8B4EFE9CC7BFE18B1C8C52267082C4358DACFAB8B9DBC6257825CD480B47101448B81666A7A8E9BC30D4D625704A8929B013D77E7E5D2FF002C4B4AC1A26BA811F3352D517634FAB57C21F485A657CA80C9147FDA080395EA1BC690C4FD741549227A137378DBF641F5C3A392CA9DC2ABA81B9F114F7AEF1212D32D4C4A58D093AF23F7F5D6120A90A0AB9BC5A48B74236F3103F1C18D9A8CA25A4A93C6E0806AFA3E9AE8FB43D4CA3352D2DC70D9BAD4D7670046A55401D2D7F4F5B1B8F761B4BCF70D3C1E342411404B1AD742F4EBFCC2FF00A25CCA4C25540CC0D35AF263E35D4437D655B29E1529E5A0DEE0124817E578063CB68E85EA71689A03106DC2011EF53EB6687B8595330A0894B28B384D1DFF003E957B086F73336F84B6CD42D40FF470290099EB11BF3369EBB61BCCC4E2CA9908330A59A9E9507969B0787ABC389ACA9ACB2352C589A8343420DBEE61B8D0BB592EAA95252824951793C4679804D8EFCBD712381C4255FF00F50099007ED330815DEBF9D4522470D3E5C84B2C150B003A369CBFC5C9C0AE812420D32BBC1027894B00C5E3700C748BFAE36C766794CB0D3319294002C389346E60E85BF9B4384E3E5A50A12D290821D55677AEAD7A873A36E63356599AD78032ECA6AF306D32169650F2BBBE232094212ADFCC72DF618A466BDAACAA43B4F94B4A6FF324003667D8DBEACF11E3159782B5AD6896AD0B713F27D08A0D2ADE12BD3BD9B6BDCF9E4D3657A5F365B8B20049A1A94A2FB4AD6C817E4662FBF2C52E6FC4CC9302A509788912D44D077881BFFDCF47A8A6CCF0CE766523898AF89239368F5F3B5B5EB7F647EC4FED1BA9592EE5FD9E2EB1901254A7F33A7A5EEC2EE0F0BAA4933D22C79E29B9EFF51585C866265CB2311DE71550AE266009A876D9F5BF3868ACD70284ACCCC426514D5296B96347A7D757B18B5322FA373B79CD78467196B7908541505D6D255F08F4EF8EDE5EEC5626FF0054D85980032542EE0A54DE3F2F56B5E1827B4985492EA0A4BE8A29FCB03FE22CCA6FA2AF523A38F3DD7AD50A94077484D132E1FF00571290E72F3E57E830D07F536B72AC1E14CC209E26251C3CEA9AE85EC393B05876B30E1242425059A8429DB91D5EDA58D61DE9FE8AE0820ABB4B440DBFF86A26FBC78EDB9BC09C34C57F5238FC494AA6E5A66105C1E3A83E29E42B082FB53289FDE189DFF173AB46EAAFA2DA9C371FFED6114EA13C08394A55DE1F52E7863AF5E76C43E3BFA94CD019694E0A64B4D4169855C351A70F2AF4DCD7795DA9C3A1DD6140DC7133F5B575AFA6B5FE75F45E6BC4073FC3FAADACE42BEC90D314A1C8DA429C1E42F204DB78C2F23FA93C50E156225AC002EE49F06497F4F4787D23B5387B258053BFCD4F0F3B33EDCE9ED4BF4777B43E996C2E9B224D734EF19EF1BAEA425B0904C96D2B24F15E39C99F2C5CF25FEA37018C5894A05C517C4952589E7C3A837DA8EC224A467B85042C043F25025F5737DF5703778EAA6B6EC6FB44D0150B6F55E4398875054389AA479C4A00B9FE6B2DA926D17E288E918EA7967C70CB25A4292B94870EAF9C135B386241DEB534262770DDA3953662509295710600A9AA2B525BC45FC1E2AA5BE5B5C3CDAC380C354EEB65B24C90788AC03311B89DC62DD84F8AB96E6B294A18847180591C4002FA00E2B436E578773D5331E4F0A824A59CA485B3EC5DFC34D8E9A066C95BA9A761BE3A8BCD37D8481B9872C36BC49F5C472BB55FEA738CA968E1492DC4CDADDC063BDCBFAC269C9E7A921E62B84F11EF1C93CA8FAD9CF8467515AD28B694B85156DF107D909527B90A8E1874001CE213B1F0EC45AEE8E4F3023BE91892B2594521A85BD59FCA1C232AC4489615C4BE136507636A91D2F4D6D5847DF892413277B9927CCC74EBD7094B54E0A6C42485248F995AB6CFD3CF5A5779721082954C4F1105C3D811C9A8FE7E158E7EB12209558D81262DCFF2FC3125326A26A50090B2072F201B4FAF487188C41527810A5252CCC090C3D3CBF980BE15F68957A927EF18D5D2400500B6E7F888D12824B82C6B6045FC63732F4C80600B6FB03BC08B72DB029408AA016B57FC5BDB465482AA1538B5BAE9D7DD21636F264C44DA4733F2B72F5B7963744E280C9A0B30342D4AB01E3184CAE0FDA5B5760EF1BFBF09E1BEF78FD8936EB1F2B37514051213525F66A79746D21708E200AABB121DFC1E961F6852DD4A6D06D17DE4738FBBCE7973C63BCE41C73F6D4FAC379B2900314860FB33574BEB6878CBEA412B24DAD37F75B616E971CF960331F4F5FE222E749410484802A6C36FADEAD7F08EDB6A0040701045BF3C31CB7304BA7FDB2FA579BFA3F378F3BE0813C15616661576D74F22D78A97340544F0DE27693D3A6DF2C5AA5E6A5293C2082756FF001A37BAC5E72C07C68E3A83CC7DE2B8CE5278556379E477822FEFF909279989C7672B03F6B9666DFA9D41BEDE16B9E0DE83D1EE29AE971E7B08AC734596EA29D441E0495950E5E11B73DF973F7C028E5D98AA695F10201DFC81D18EF4A79C5D3286A92C188B8DEFCADA9E95B98655D7AD550FD7107BA2A40A640994A93092A02D1E200ED1067152ED203384CB9A1E571B51E2EC84F1C9E009A81F317A105F6E434B691EA87B17F6AD539AE96AED10F362B73FA1EE0D0075F08516D6B538EAC15595DD340280327C3000918E059E610A662D4B5129413C619DCA8B245011AD0ED1C7FB6F9605A953254BFF006A603C079A5B8DC1A8A83B69B47A5DA2B519C9DD65D72BCE6B475414D66C1D6781B6A41406FB95CA48BA91294C18E2DAE68F98658713254152FBB5A6B2A60357049D1B50E4127504B472CC0A97976238D880F50E5AFE43C3C63A43EDADECD20297DAAF674B41A0AF4AAA33BC9A9A9D24502909096C95004AC3CAE25C25238660ED8E87F0A73F4489F3F29CD4044F96129C34F5B0FD55092364F7618126A6E23AEE4D9C4A9D2901DDD8104FEDDDC1F3371E05A3ABFEC4344731EDD326555708144E540A9429B0A054195252786265244D872F5C4C7C40C6CA380C47E9CA44DA061C24873A91B8A3BF8C3BED14AC3FE88CE511C2A4121D80703CEB4B5483A08FA26A3AE6695960B550AA86D68285A12DA95C240E14400098D87B8EDB63CB39B058E352A50410494A9C55EA4FD7634AEB1E54CFB339471CB94140A7BC29E170D73B694F26DC9892643A5DDAAA866BAB6A0B742B2E29E6DC470020FD910A20F316F973C73CC51C4AD6A329454F4F94BB7BAD4EDA5A3599230DFA633BE57E1A3B6DAEDD75AECF120CCF55E95D2A834B42DB4ED50078DDE107855CB84949111CC1E9230861F23CC33450E2428F0961720FF8F2D4F3A34F993B153552E44D52425458A7C7A7954DF48A0F57F6A4CD5171BA8AD524F8821B4A484EFB5845AC49881BF91E89D9FEC7CD94A4999873421DC3BDA963BF8C38919762D5533D570EE4DA806B715A39AE9143E79ACEA56C3ECAEB514A1EF152AFBB42CAF80F12BA14C6D7371EB8EC99476792908030BC4A02AC198598EFA6BD280C4FE172013402B9D5531A834AB5A87DD0C75E750EBACD16FD7BF515EAA86698B68427842678FC2600D87BA062EB23245CA4251264103CD893ADA874E4EE3533527B2D216C14B0A70EE69B1621EBE3D62AACFB53BA1C4968948209510A241E200FBB7F2F7462DD90F673118824CE2A961E9C5B6B41AD830E6FC9599934BCBD8CA214FB537A0BE962DB83CABECC351BAE182BEA6EAF5226E2C0F95E2D8BE60FB3699443CCE2F02C7C2DBFF0D573250490C1B42CE6EFD6C4D76A5E910DADCDD6E470B920C830AE978DEC7E43C862DB84CBE54A041097A0A8BDB7BFE7C62730F24380C5A95B3EE3DF5D5E2235F98BE6DC6522F2662C3CB909F3E76224E26E461E426A780780E5B0D89AFD627E4CB40482000534059DABB6E74F1DC4465DCC9C3FD44949224107E22FBCED8713B2CC3E350C3853B148A55B40D6B757EB1208C009A54501ADA6CCD5FC4335557B841324037BEDF3888E9CE7E1ACAECDA10070CD34B86ADFABF95442A32E54B7E21A8615DAB6229B5872AD5B055ADC2B009514C4917DE46F7BDCF5C494ACBE6618057116A358380CE19E8D4E96A5A164604B3F091ADAA6BB5ADE81EB085FA9B9922FBCD88E563BC8B79FBB0E06231086F914AF3A6BB73FC3DE1C0C3B1143535F0A0E7A1A68C79B205D5A927C2241BDCC7E22F63373870AC2E1B31923F56B4208144AD41243BEAA21E9A535DDE24B0613294788B6940ECDAF20CDF6D0C6C69398559029E92A1F9B70B2D38EA8F580DA56A3E71F28C44623B3F93212B51C74892054ABBE4D80D7E70283916D5E1D4CC5C8428A52A4BB56C35A5F517FB1898E9FECEF59EA4714C659A77347AA8A929612ED154B485294760B71909BDAE2C23CED48CE3B4390E43C6A939B61A7AA557804D43BEA080B27CD9EACE2194ECCA4CB524AD6025479114205081F9D83DE3B1FA33D823DA6B5829AA8A8D24DE5F93B852A354E56D105A5B55C9EED4B42E40E5636E471C7B35FEA7728C8B10A9070DFA8992CB06248537309203B1673E7584F159E6065CB4893344C24328BB70B36F42FD37D03C76AB4B7D18342E37DE6AAED03F83D43010A7E8D1446A038A31C480B69C8B796F6EA46396F6CBFA9CC776904B9595E58A9281C41644E32D9EA09701EDC9BC62B38EED62A505044C03621890297BBEBF715A76234B7B0C7B3A69A6D0D66D4BFE2CAB4402B57D6A8F8C88BD94A001E7726FF001E653FE26F697304F0A27CDC0F15E6199DE316BB13FE69688299DAB985FBC99C6F70297E8D5D5A8DCDE2F1D37D897635A24B8E696ECC6932E53DC25C79DAD35A1E0DC701087D2BE1E1E805EF388239FF006967A97FA9CF66E212A6F9423848FF00C4DCE9CB486533B461638904855C7CDE7AE8DD7D4C58ADE6EBCB1B0C65596E5542DA4404A72AA25280116E3EE38BD6FD245F1018ACAE7E366F7B3313882B26FDF4C0097B9653005C0B5F5BB207B4734D02CD5C1D7E9D46A2352B35CCEA7C4FAD3FE90C3696072990D848239C11E58565E117824A93889A663B7EF256D5A312FB8B7E62BF9AE753D750B21C9700967028F5D2A77F368D2A7EA957E37D20C41EF17CB7E7EB6EBBE1C24E1D54E140F2FC52FE3E110A3339E47EF556ACE58BFB0EF189A779D952DE748039B8B813D25437F9ED6C3D96990406425B56001E868EF7E9A5A31FEA9882ED315E2F4F33F6869A969D6C9875C302DFCC549173D7D3E7E787C89120904048D9C0DABB7BF53FD4E79A7117143534E8FC9FD3AC3154BC040A975D41FE8BAC91783B137E5EB1698385D381C2CCAA9085686836E4FBFD615959A620280E3350C2A59F5D77E5A5EB0D8E54BE3FF97CC9F644DBFE27431CFEE9C67FD270CA344A48D030B9F3FE6FC83E4669884D96A0372496BF3FF3053E619E33C6E0CE9C5017871B2B00F48595020F39C2BFE888A04A824AA80A5203D2EE08E5F6112387CE31003898ADB5BDADEBD6DAC6AADD4A9CDA9D596EA2C872ECFE81D05B794ED1D2B2BE056F0BEE4AE483BA4838513D9854A2A5C9C64C96B50A1E252803D38A97B35EB1252F3EC48293DE2C503976A35598B8F27A523AFBDA07B24FB3376A34AE53D16408D199ED5059773D6DDA9A914AEAEE1429414B6A9262DB74DB1B6165F68F245CCC4A272F1C5052A912BBCEEC283BA83BD29A11BD8C5FFB2DDAD9786501899C4059657117E837EB56D63CC6EDAFD81FB44EC9456661A5595768FA71216EA33AA608A27A9DB00A84D224A9E547D93693C338EE1D90F89E8C5A256071F2460F14964AC2D4286CE16400697A86A08EC9957697018A530527829C21C11CDDBCDBA523CF9AA7336A5AEAACBF36A3768DDA359406DE694D380DC292AE24851E1B8F10EB78C77CC9BB43230C12B13C6202C0243BD1AD42DE3E517644FC3622524A4A4F10B023A585CF854D79469EFD179880379B7A13C8FF00B6F8B81C761339960238252D983303B3E84B9EB4BC4163B0E2BC15B503F5BB36BE1A93A6C53E821245C1D8F5B5C5BA1DE074DB9C4FE8E76114F31F8093C24B904540D0B7E5F788C1294160A9F57A31A386234D1A30EF93FB9FCB193300A91EBFC42BC0373E9F88DCD3DF6B87CB9FE630779CBD7F883806E7D3F10B1B789F23B1FC2D1F3FD70779CBD7F883BB1B98C9EA854A60FC083F1B5FF1E671A2E630AD01E62BD76FE6374C9777A0D1DDFEA3DEFA728A93C8DBEEF740DFAC1BE11131C5C3D039B5EC694D07DED09CD906AC016A74DF7776E7B0877A0AA502A8369111E51BDB73BF2F2C678EA694A372DF4AC45CD90E750350C0D3EA7C34BC77CF51E5EB71C5051932AF0404F3200046F7FDED8432B12183292C19EA090F570FD3D63CC9817E2041A0D2F4B963420877F2A4545A859772E085200A5EF42A54921F2E70FA4F0C6D1F9E2DF839586C43844C042400414B33DAE35B6DE517DCB9822C1880C7AF2F2ADEF152672FD528A8877BD1CFC011689E83CB7F5DB18C5E512149078D2C7567B9DDF5736FF371C194B25CF2DC8A91F7E6CF6B456F9A07090A75239806C67AEDB7A7A4DB7849B21182A022AEC436AF7B74FA1BC5C32F21201497E4C777E57AED5884D70001B08DE3901FEF73CA715FC7244E428F0D4824017A1B791F0A6D175C11331043162C1B660FE15F758977649AF33CECFF005EE459FE56FA99629EA52DD692B012A6DF5A5BF182608095288F7F4C735CE32B528F1000A49571029D85C93B35CF8436CD728958AC0E213351C5340FF60B1F95CFCD4A03AD76018C7BED91EAAA6CDB2ECB731A65A2A29336A661C438D11C3DE25B4174786D3DE133D31CEF1D8732C2A581F32497B549B7A5ECE2F1C073FCA15855AC80C1CB162373E9CDDDB58B9F24AFA4A9A07B25CDD947F0ACE98729EA9D7877A965250A42086D5C533C53E1162271CEB3ECDC6553A44E49289D20A8A568F96F7729BBF32D70221F2699311315FEE94A4104F83DABA1D1C6D1D4EEC5FD9A33FECFBDAC296AB4A65CEE69A1F3172B2A1CAD282C329EF2956BDD60D92E2C8104440DA6D50CE7E2262716854B2E02B84125454DC2AF3AFAED61161CFB389588CB061D5891DECA4A8218D55C40BDB6A7531EBE64793653A529EA5FACAA6DDAC078D146B4825854CC49242A77988B4EDB55B179C62335526570144920052AE5541E219ABAF8011E67CCB2B2BC72A709DC40ADEAE3FB9C6AE06A01BD05E23F9F6B5ACCE10F34BE1629590784A385B1C2245B8426F6F5117D8E25328CA6520FCB24952AA5C955FF00F559DFA56D589718713B0DDCF7CC4A48DB403536DF4E44B375A7546B1656FA99A373BC5D39525DF119BED249BF2F2B7588EB1D9EC9A58964AE5A52E450A406F120120FF8E6CB2CC84C99B316495125C5BA915A7BD6F1486A0D50A056A2A04DFA488E62DE9E98E8784C0E1E4814492350D635A90187E6AFBCCAF00A4B324834AB1F2E75714BB549D6A1CEF527D65B2B5BE5A53615C12779F2E5B01F0C5A72F12D3312132854B6E5AFD0EFBF898504AC4A0060AA52943F47AD87561147E6DAA1E53EB6CFF310A2249D94394DAF07998EBD063A265987C34D4874A5058559EBB917AE95A3738591331628EA013A69FE0DB6ADDA2279C67C9643243E58EF02B89253C7C7CA24ED1C84CE2CD84CB82D4B200570B70914636D285C1D4D1D856B12983953B140F1254403525C9E6C0D9F666D5E21D579AD1B92A7495F9DD03DC200F5F85A31312F2E5AC072CC5A877E96A6B5DF78969381525884B39A505EDCB4AF97278D556654C920D22E5641E23C53C3D01067AFDD322D8772B2F41238E604116255FCB8E571B077893958650E1E305AE094B38B0667FBD9C07BB1D43F5AB9716F828BCA2104C45C5AF7F41720F39C2BFA1C3BB1C5A470FF00DC001B33A8EDA8A57568934F0A40484B1FF95459C825E95BEA46E2195758B0A8A5A4A82B9873BB65D7E49D884A52A22FD3A6DCB0B7EBF23CA10AFD66632934FEF58727C4D39FF989EC0A4A05D04914248F3A9D43FF00910FB94697D5BAA1D45365390E6B5EEB842508FE1B54CA5449B7F30B010073927E57C41E3BE21766B02852A5E658770FF2F7A8A9E4EA716F52D0EE6E265CA6134A43E80A4DBA758BAF4EFB1DFB456A250FE13A25CA3A77F83BD79EAA6124A55B1097824A60192239DF96396E7DF1FB26CB57C266226F0F170942F8830AFF00692396B7B3C68730C1A038989516622CDCAA3AFE2B1DA1D19F45CEBECD908ADD65AA5BD3E084A9D6BB962A7867ED0FE5BA0DAE3913CA39F3BC6FF565270C95FE9307FA8526C97297BD1CA5B415BDBC5BCCCD7082C108AB12EEEF6A55B7B45FDA73E8DFEC8723528EA8D53FE27523861A148FD206787EDA7890BF1F19040998F8E395F68BFA9CCF7B41C49C3E5F3B0411FB4A2612EE4D7E516E6C0F48AC66FDA456087FF293434CBD02883E20FA5FC5A3B0DA47D9DFD9F340703990E8C65EAE6C828A879C79E0549FEA28792B499B7236C73B9BF127B639B288566B899725414152FE6143A3B83EC86357A64FED1CE9B314B5A895A8D482C36D282DB8BB98B869AA58A64A5A6724CB1B61B1C34E96F2EA442909800CA92C711311751B462117271D8854C9EAC7E20AA6D55C53A6904F205675A9A798863373EC4AC01C67CDEAE343EC55E1CD2FD4D4A78471B083601B529A17E894948827947DD66B338E516989EFC821CA839FFC8824FD81D4C47AF339EA720A8F16B51BB8DB9D3F98D468452294A538A25DDF8D5C5B7BEF37DBCF1A771FADA22477406A05075A026DEED0C311899F32E49376726DABD7C347784AA4324C828F23001E5D0CEFB637FF004DC423F602A6152E453CFED5D79B41326AA951E20BF58E50A4A66556E84CFC24DBF19F2C06662B0F4EE896E4F50C7C793EBD68ACA335C072491AEE082E599BC6B4DE352D6CDE4A63F7E53BFECE105E718B92DFFCBA88AB104F3DB978C39E09859A85AAC01E5A9D2DF88C5A75A4856C7C847E53E9FB8798654ECDD1C53126504EE2EE48B167F1F08CFE9153182FE63573D6B6EBBD9F68D6AA865332073E6246FE40DBE1F761FCBCA59BE634B6E7ECC7CE3539730D0B1D6FD286A7C18BBBDA105454B728BCEFB1E7EEBFC236E987B2F2D20B124333B936AF3D34D7CA31FE9ED7040D75F1753F46F65B9CA84110543C849FDC7CF0F51810CDC64B5F95DB5AF3DF58DBFD39C58685EDE05DFEA7470CF0D954A6D7C3E14922FF003E5B9005FF0008C3D9187E1242AA92E1C6C00BDEFF00687787CB9249A07D8536D7A8F2AD21B1E423FB42444FA5FA81B7E1BE1F22525CB38E8FE546F53F7872701C24961D0D7C3A569F567742B284F100A067748833CF9C7FBFCB798274B0148048AD0D08EB736D9B5E90230C906CCDEF7E9AF386CA85260CC08312204FC23CF7EB783862BCC71F2AA994A34B3134DEC76E9CEF0A09006AFC9BEEF7DA9E570DAF02D34F5624A5229C0E2480257C5B7BF6DA4C9F84BE5988C4E34844F4AA5F17ED7AD06F4A74FA968AEE7388C4E1969FD3F130AB87172294E67EB0647A9730CB4B9581487B2F78143CC54A50F36A6D52850E07828010790B1E9C94CDF03879C8017F22E59E274ABBB248A872962588F1B8BC4F7677B4F8EC3AD1C4B50346049DABD3C5AD1D6FEDE3D913B30EDD32BCC73ED0E8A7CA35EA9A5BCA2DB6509A87402A212DABBB641E104481E7CF09E4DDBACCB24C477338CC9B2414212A249090282DC44B6B5D23BF767BB5EA9C2524ACF0967756D70CCFA53C447833DA4765FAA3B34D4359A5B55D15465CED23EB4BAFB8857054A428A9252A808BA40FB24EE3D71EA2EC56732332972F153316996DC2A282B1F33B16151D08AD6B526BD6B059849C5042E5965AA9C1722D5AB3EF70D4E8212E555138D34C50345A6980A06655C449B9955CC993B9FBB1D4F1B9EC9C721126524112D207159DF9B68D6D77A51DE230E95A8AC91C440E2200A1B587859B972D1C6AEBF21F96233BD2400D416AFF0010DFB8FF00BFFF006FFF0054668708993F2FD318EF08B06F183B8FFBFF00F6FF00319F7C46CA23DDFA6326613704F53FC41DC7FDFF00FB7FFAA39EFF00A92A1F77EFD0E1099340D58ECEED7D1BCF997D614461C382EED7D1DDFAC6F6DEDA0CFA5BCFCC79C1C23DEDFE6F4E9CBD3C79C6B3648014F534F7D7C07850876A2A88E3BEF69FD8B6F06FD6D80CEAB1557A7BB36DAF945CF94CEC1A95F4377DEF4D758F7DB59FB27D26A443B5DA635EB4942C2968CBCD121244EC8EF56B493FDBFA63CBF947C4ECDA44D48C4E1A64A941899A492E05E806EDE7E11E55C0844BE22B0F41C20D385B67BF51D6F1D57D4FEC9BDAC65EA29A3C9139937E28A94D653A83813B28202D453D62FE9B01D3F2DF8BB8698024CD5255F2820829ABEE40BD6C7E916DCB6721012153122F471A8B73DB7A6978EB4EB7EC3FB48C982FEBDA7EAD8E1E204B2D29F802D6EE90A99E9F0E98B02FE26CA29ACE43B3B1983ABDC1FF000E368B860F1B87494954C0C0D9C397AFDC98EB8E75A4751D2A887B29CD94429524E5D569098EA7BA88EB3B615C2F6EB038E5813F152D1A00482DA9B97E9A79C5B7058CC3A923BB5252DFF70735A6AFA68CF4A59EB6CD686B698AC3F4952D116875871B20DADE2408DF9F9CED8B049CE32EC427E4C44B503A710D7C7D9F38BDE498A925B8949B860E0877EBEC79986BC1D70A9A69EEE8929936B292414C90445F698E5CC5A2B369D84282D310EC5CB86E46F4FA3F9C5ED69C2AF0EEA29720FCAC0D1B4A56D7E7AD48F5BBD897B40CC75664343D9C966A2B333D36427EB010B7439F5A73BC400A09527C298FEAEB2236E319EE3F012664D267A0281759E260C1D99CB5A9A39DEB1C4BB7B83C3C997DE808952E6F1F761C1248FDCE2E2A4DC748F63B4776415EFB8C661AB9C34F42D842A9A9140053F61C40F010A4418FB42083E58E19DA8CCB09984F54BC1ABBF525C4C20370F9D08D3D46B1C1262E5CA4620A2684A8711005C8D350DD69AD758EC054578CBE9A8B23D3342C656FD1021CAE86DF754DA882485A815094822CA3BDE6F8A0A32B5A97326CC26622614F025B878384D41A56B7E948E5D98E678C998832D2B581C443B96356B68D5D76DA2B5D4B5685E66A78B8BE3504F7AE952825E21104845922FD2D04C729B4E599710B4B49766B0766E751E773D69B4DC22D720CC2A3C5C2E473DE9A170DCBC22A8D619D56B4C2DAA5580D1042B848063A7AFAF39922F8E9F926024F1A4AE50E2A3063E2EDA534B73310984462BF50996A52B84A83925B5FA1BBD0C75A33DCE99CB96A595CBAF93DECA88BA45AE491E91D6F16C5B71B2C20CA12889628080DBDF7726CFEB58BDCC989CBA52149F9CA920921EB4D48DA8D14CEA4D5C885F0EFE216923A5F96FEBBEF7C5E7B3B9461315C2676252E786854075A936E9E109CACDD2B3F3CBF4AEC28D4D2D41E315257EA1A7AB2454B6F786780212E2A49B5C207BC75F863A748C83072C20CB5C8530A9336586B6EADBD626F0B889136E024D1DDB6AB747D08E7CE34BA2CD337738327CAEBDD5AA424A28EA0DE3707BB20FCC5B91061CCF46558297C5331D2249009ACD411E6547C6C37E526818472192E1BFE3ABF87F9AC3ED0F60DDB16A984E59A6AAEA9498E02F27EABC1C7B7FC54A42E6D244C75938A7665F1532AECC71204E938E4BFF6CD4929035F94A987D5EBA44B613F472C1F9D32FC8B33D81607D88B334FFB047B43EA2527F88E548CBA8D712A35348A294D8981C4156116B138A4637FA95CAB0AB5265C932C870C3896D70F6200E861FAA7E0D80EF25922A15C4915BD9F77BEF17264FF00462E6301CCFF005CA72050E12E205222AFBFE6A00A1CF0F0DC08DF79B629999FF519889EEBC061D734172BF9CA0827F6B710F5AD199E90D66E6928278664C42B87FE991C3F2B9E4EFCBFCC5E5A4FE8FEEC5721EED5A93509D44EA2EB47D5AA69C2C8DC781440980091B75077A2661F1E7B43382C4A91370EA2E1333BE2BE1E60354F2AF5111ABCD81042A7858D8003D6AFF6DC98BFF21F673F678D2602F24ECFD8AB7EDC750ED4BAB00A2784F76EA488277023998DF146CC3B5DDACED3F12B139DCF4A0542424A59E8CE0B9D2A5C44163F3C561DBB952ABA851F1B1DCFF116AE5E9A1C95A14FA7322CA72E69B84A5272EA275691C80716CF17BE7CE462BD88CBB34C414AB119A6216D60264C079D38ABA73110ABED16281A2967672487F115E9AC6E7EBF50BDE27D6CB68FE8EE5965B007A36123A7481B63323033258527F50B98E0385F128EBAA892DAB0FA0AB39DDA0C58F99D55BDDC78339161EEAD8A756E2CF7F993A49DDB8584CF9C1F2DC6D63118789CB4104AA5850ABD03DBF9F462F4664BED062839F9C93677FF003E7FE5400C34900B21C0B175973681209124F2F5E584E6A8E0182240505120808725B5766A79EE7409CAC7CEC7179814CD406BAEE696B59ACF4846E54D2B5E215694C4FF002FBA1FF4F144F51B448E5B61CCAC589A901182295D3E600D6B701836FF00430B842D475009342C6A3504D6B7BBD9C98E59D4540D85875B48200E05752378006C236F96D892460B133EA1250EF46DC3B37BD28CEEEA561C29B8AFE94A917DB97AC3755EA8609FE49092072DB6371CF7F31E98929393A830981FA8DFE81BD29A43D978246ACC4588E953A7A0F188F556A171EE1529E8093065439F493BEC2D6EBCF0B4EC327049F96495BDD8174B741FC36B4108E2B0E89600410A05C11F4A9FCED7A437AF3C8559D4C1DA143F1EB6F31CFCF59730AC809C32EC78810AF070C1EE7EED0CD329CF090E6E77615A57E9FC423775129023BC0799F15C419117F873DAD8949382135819079BA49BBF27F5E51212F0C9201E163D4DBCD872A747844BD50A124AD244990543CB789BF3E57EB87E32394B002A5027FF00450BECCDEA21FCBC1A76FE1F4ABEA39F852139D565327BC03D543AF9903CB95FE1855191CB402112B843D404F2E87AF4F386B8C906511C20D5F9F9381F8DE342F562C890E0F14FF5A7DFBFBA3CBDD8DCE5069C29A0E458DF952BCB4F38E75A07CE3EC6BCAA7F10997AA564FF00C498B18526DCFD0EF8426E533459246C5B6F277A73BD1E3624F0B849AD8ECDCAAEFCBCE12B9A95524F1DCFFA87C7F7F3C31565D8A07F693CB86F7A0A13B59DF94612166BA6B46F3A16FE232A5D46A5F79C6A1023723DDCFDD387584CBB12A727880D4116A9D1BCBADE1D61D6438343BB86D7D3EFE718D467920CA811BC7145E27E516E9D231248C04C961CA4977DF6F06B373A73858CD27FCFE07F88C292BD355DECAD29E1893C5BF900489F5BE362860077640DAA5EDB8FAC26A9AA49AA29CCFB6A59C470FAD2A0A097048DEE0907DC64DF7B5FCF18135083594E2CC53AF3A6BE1AC6AA9E4D58FD7A685CB5FA436BCF30DB0EAAA1D2536F009F1F4FB33B72B4F2C2F2A782A4944BE0BB909F2D3CDFC01895CB72C939A85F7C4258382A67A3B8140C69A42043F963ECCADC2DA018EEC0599336F2F7EC3CF096372D9D8E6505148AF11B167D6A36DBC75847199248C32D4652D2003466A51BC5EFBF8D23625C6A9174CFD2BA685F492BA2524921E832B4A84C7900B917F8B34E130F854AE5CC94261218A88B3B8A52FCE15CB7133B07352CA20021AA6D5D3F3E24D44417B70EC334B7B50690A9A5CC2829F2ED7795D3B8BA0AA6DB4F15529292AF1A9B084494A07DB260911E2DA3E4E3B1BD9F9885C89D31380E225402947B872080C0BA828DB6B5ADDAFB359F70A90A54C09581A970C4070C4800E869B697F9D5ED2F416A2ECD35766BA475150BD4B59963EA6C294DC36EA3895DDA9B5A5210B1C204F0931378B63D07D83EDACBCDC1913480A40002890EA70EF50E3CCF2ABC75BC1E324E2A54B988980F183C4970599C56A5AA79024F9D7DC6A98813D20CFC2671D6C294A4F184929677D199F6DA1FA51C5FB520F808C16E2936B03CC117F81FDFE0D978E9083C2A5805D807D75E7E958C29007EE4B7A75B461DF2FCBE18593392B0E9623707F88C25295164873B545FAC721E5733EFB7DD184E62CAC809E8C2BB6BF56E861712BBB0EB0C0DAA6EDD6BE0F0A5B7AE20F3369DFDE479EDCEDD708A8197520872F7A93CAB0DA601707D2FCFFCE90B98A92926F04C11703CFF000E9EFC69DE23FE43667E7B7AEFE71173504A8EDCDEB4E7E14F03611EEB687EDA28B56E4B4B5F415A52AE04F1D1A5E217C560411C4166E3A7DF38E6399F626461D6102527814FC2B0078B860C29A8ADE3CD998767A74BE2480525248A0B9AEA39EB56D5EB178E49AE334453F7F4CFA815892D38BEF0A78605FBCBDFC85CEE76C51332ECD2A51504A4109B70A5B5DC5C575761B55AAD3B0B8CC3AC8429418B0BD0EB7A1058D37DE1F59ED3F380A087E9289F44C12ED2D2B93E678DB50DAFCFD0F2A8E27239D5265CE26E005AF437007260CDD6C61C49C46310A1C530BD1BFC3FDC0BD4439AF5CE555D4CBA5CD34F64F5497C4718A2A26C343FAA5419FEA9EBBD84E18AF21C793DE495CE90031502A5176EA6940FF589019B62A5283CE551810ED723622BCFCF522B5CDFB3AF67DD66EAF2FCEFB396332AFAC2502A292A1C6C256BB02453A20415036FF66188CEB38C8D4923325CB9693F32141F880E64D2F423AD6AF7CC8BB5BDC00264D2486A9558EB63B8E756E515767DF44BE94D4D5943A8B24CC93A634DBEB53D9865EB4AAA14EB44828405B8E25C4102D298266F84317F16D6B0642E712A0024FCE471102DF9DDF5BC5D95F1144891FEDCE1C481FEDA8A8324EB427E606DCAFA477C7D9F7D9C7B1BF67AA34A342D0D3D5679C094D4D6B85456E38911C443E55B5C0124016C53B1B9B6233E0A016B9724BFCC16544BF315BF372F1C73B5BDB4C4666B9AB99882B5ADC10080070B8700161A3B00FD62F7ADA8AFCDEA1E79E7128503FF00080084A06C0003853B03748F9E236528E440AE72FBD44DB155C80DA924F5276E42397CACC66CC5CCF9C92EE43DEFABFF001D2C18EA1BA868C90EAD5B7F2DB52A40B72067D66230EE5769702A2C6580FF00F73B3F40C352CC35F14CAD255C4B40E2B82456A6FAB730C2B10ECEF2DCD336EE9BA1CADFAB7D1C501495D3DD5612A5800CF9EDEEC4CE03B5584C3AD5C012C59EAF41767E5CBC21533CB049FDA6800AFD056FFCC41ABFB1BED433849527206E8A9553FCE56614EB21276250A58579C73C5830FF001272BC3AC209698080592ABEB5667DB9962F184B03C4940079102D52C34F0D1A22CE7B251CFDC0E6A4D7BFE1F553994308CB855F7FC5F693C6D984949B1379C2B9976FF173C4B396E0063925F8D426897DDD9A8C1DF6687285A6682274DE103F682C767D3F1B58564D967B21F65D4252333CE7FC431F689A77A9B8E05F63691CBFDB11E9EDC768387E4C1AF0AA028A13DF84F47FA862CCCD192890141960B37F6B7D77A0F1B356279967B3CF6099382468C4BCEA88870D53EAE229333C278A2FE93E7B618E23B5FDAF517FF599D2907FB5DEFA163A57CB7AC6FDEA01749D2EE5B67FADFADDE27796697D21A7CA7FC35A6A8A9383ECF1B0D3A44411FF0015B331FBB620330ED06758E97C189CC31334310E16B49AEC42BAD346A88DD38B9A97216435AA4937FF0015E512919B57BC022B6928D086ACC062969D98B00412D213C5B5A648F2C43E0654C26628AE74C2B238B8E6AD5FFF00B288D74617BC4763731C59002669D59A877D4F3ABF23B4267EAAA9D1C2DA96849D82145239DBC307E189232491F384B06350090FFE79C468C6E3CFFF009AB67BBBFBAFF986E4D23EEF117DC70C1044B8A264CF99318CA70A14C18005F4034B53D4185C6231441798A7A52A75D9EAFE8D7D2368A669BFB4A048DA483B6F2663F59C6DFA142A9C219EE40E8297D2947A987099939BF7AAD73CC31D7E8083AE91B05752D28225002F918E533B9EBE62E37185E4E02683FED2481AD2DA6D62C0DF43768590954C204C2549A9AD3A5074D61A6AF39A61242D23EEF94FE53CBA494BCBF1258976D86DE36A5AFE26B0A77097A02C3D3C798A5B41D6182AF5353D3000BA0C93CFA6D173E5D6D6DF129272A5A8025245AADF7EBF4D69019090C421C7476D39EAE59BC223957ABA94FF00E6206F7B731F0E5BCF3DF9E2564E50B15009A6C69E8E29F7B464E1A5A88F9051E8CFF5B7DE9ADE3D57AD92D001B766667C5C899037807DF07D7793939089A1D480A6FF00B45DEA6CFF00CF9C2B2E44A03E54B3D28E35F23E1F5AC46EAF5D1332E024F981703EF9FDDF1292BB3A84B34B48662070F2E9F4F387224814E1B5BC798F1FF26AC4FEB8248F1C8BDA76EB3064CDA67DE30FD1912524809BEC9D69F9F43194A149B06ABDC7E61ADED6E20F8EFCFC5CFDDCC7C2C230F5191BB30B96B379BD6AFE1195778BABD0FDB772D7B6BE02AC559AD9C514F0AC889FEA22F3B7EE63ADF0FE4E412CF1712126C47187FAFBA1D2329413FBEBBD6FB6F0D8E6B47044B86C6F0A3CE23F73D7D0BD4E4328544B40D43247E2AFA53F30B2252410421B9D2BB52F5D77844EEB4709003863AF11D86DB9F8F9DFD554E4B2D364D79240FB31F77D1DA2593FDB4F23EE9AC37AF59AC190B3D278A40F7491BEDBFBF7C2C32996DFB6ECE784D5B4B034A6DD2B0E901496615AD684DB66F7531A15AB7BDB29DDB621506FEA47EF95F1B272C4A5DD001E97F21E479C273A5098C0A5C8D4E9C98B7D630FF13A3FE72BFEB1F9E37FF4E47FC47FE3FC421FA51FF11E9FFF0014649D581BFB2E154EF2A063E78D55964B3FD96D923EE3DFD33FA61B0B35403B6E746A465FE3157F7FCC634FF4A957EEEBBF0A7F119FD3E8C1B664FE63735AA43C4953844742448F71F9FBB1B0CAD228897E694DB5D3A437992BBB366E8CC3DF5610B11A89B3092E18F27279CF33F0F3C68BCB4D7FDB05A96B1E8072D0C26505AD4F03E90A46A244801C2044471013D363CBC81DEFBE1BAF2A0C78A58DEC34BB346BC25DDAF7706B4FA78690BD8D428FF9A4C46EA3B73B49F2F293E986D332A4176403425B8454F887376D3EF0265077E1A1E8FCEF57A5DE168CF1A72C482636DC1F98D8FE7E8DCE5A949FD95BD874B1A7807D79C6C999364D251297BB38A3FF0027FC085CC668C9220A2368205BCF632447ECEC9AB06A0EC2FB69B3D7ED5D1A144AE6ADF896FE0F777A9A9AEF7FA2A7ABA99D085B8A03BBFB306DE2E824903AED88CC5617852410EE0D5BE85B96AF6B6B0EE5CA4B8243AA846AED434D9ECF53E149365999E694291539324A82E0385253C410601B9BC44FAF5EB4DCC6429414921D2F620B7277D798B51A25254D9929B814436D4F67AC7567DB77B00A5ED4BB305EB6D394AD3BABF4BB2E5454B4C3294BCF0755FCC2E148057C2DA55048558408B636ECD664BCB3324238FBA4A96912D4E594010E341C83FE5BAB762731981610B52969510169528B125D88B90C6B71E0F1F3DEDF7C9CD169A9416EA90E3AD34D2814F0AA9CA90F02081B7091E21D0EF8F67E419B4BC5E5492A292A54A0D624D00249A55C53CAC63BCE1132C278480A5000AAA0B712411A36BCF4A4697EA454D5BF503C285C252208129B1811D762371BEC3140CD6562958CE296A57095D6A433B5AB6B0D00E909E290002430B0FBFBF5A911C71A7AFC8E2D7830B97853C6493C22BAD479577357A437C2F0AA635C3816DCD79D6B5D7AC1C49EBFBFDFC79616CAF1697982656B47D2FEB41B810F33340084100301BF2DBAD86BAEF0718DC18F49B7FB7AFC70E715884ADF84B372BD6CF67A723CE2118867DB6BF383BCB8857A933CB6DF104A2B33388289ADF66E4F50631C2083405AE453F98BEF4CEBFCDF43E794F9965D50E9485A78A88295DDF0D81BCF01B5F613E9389CCCA4CD4A54264B2DCDE9A333756AF955AB79A64B214E90122E5D87873771AB063A47A3FD9AF6B949AC680D577E18AC69B6BEB6C71EC4A61302449317E104C11D714FC523052810B2902A5891426A5C92FAB5FA54C72ACE32B420AFE502EC58E976D2A03FF88B92975032FF000B3DF1EF098060CA89DAD33F0B9C432E6E5C16489B24DE84A74A015D7F8AD6B41C609525441205D9B715BD06DADCD9EF6EE83ECAB5B768350EB793E5B50FE54D29BFE2754B96830DAC8285202C02E710E48E5638E73DBAED8651934B95204C947133828042784BF0817297E17D373D5A2BB8D5A964996E529BDEFCB566D0135AB011DD2D15D90E98ECEDB64D251AB34CE4F0F1B6F36E0097089238DD053B93B1B45BCBCFD9BE69333C33A825243F090A492A0C492CF4E76356880C4E65370CC10B50A907ABEA4034FCEB511720D1FA973CA74BB9850A68287861084D6B6070931F612B498883613BE3974EC1E18E294938898A585314894B22EFFBAD4E6CEDE4C27768319C247129B60AA6D6F13E8C740859ECF74CE5CE17559BFD55D0656D80B724F31C5C5CAF7DB7C59F058F9F94200448336591FB94B09B5CD7DF48623113712A75AD4E6ACE6BB8B6FCEBBC3A21DD1F9780DAB2B39D2C1FF8A2A1CA5EEE01B9008E3E2F88F4C6313FABED08025E23BA425DD213C44BE875A31E5E4D0E01EE482C41362E4F56A1F62140D434ACC8CAF276E8F7E12B58A883E7C6923E0394E3597D9D9B29242E6289D4915BB3D01F7A1BC67BF528D15E0DCF701FCA13BFA8733AEF0D656B14FC00865A6E89A05C9B1054840222DB98F538DD1912A5926592CAFDC5CB6F625FC9A3638936770391FB8A35A181F4E60F2A4D33CA6C99EF9352A02277EEC1F7F4F33857FD3141642940A8EBC21D853C8F5DA35EFD4C3E7A3D8D6DD6ADA7F9AEC66899701EF2A94542E5050A3C3D07113B5AE7975C4A6193370547252451AD4B9676A1D7913A43895378C92E5F4FA1DA9A7DAA615A72DA350BBC1405B927DD333F9728C3BFD54D5DB88B9A72A59890799858924B98E54DD2D00965C4A4B932080EC91B1B931FEF8D485CF0CA4A8105810E2EDA5AB5AF2B883894050B35BDDFD61AEA734A76E4ADD4C83C92904F98E1FBA2270A0C02D5429241D473B56CFADBC633C4ADFE90CEE6754A248524C03BAA260F9FA8DEDD2C2F2585CB5612921041D0B3D4F2A57F31812C4CA6A2D6D8D1CE90CF55AB69A9F9A401207881E66768998B7A5BAE256564EB99520925BFB4DFEBCBEB1B230FC26A1F6A8007853CEBBED11BABD74DABFE1B89404CCC280BF2267EFF00C0E2464E44416E124DC534D74BF91D21D4BC3D89A1602C5C9F7B6F4D622398F682B6C2A1D49DFF00AC1BF9F8BE44FC70F9390AD80EECBF215BF4AFD0E94687430C4A696D5F9D59BEA2B10DCC3B45714524BC00122EA03F1BEDD207BF161CB7B3A560BCB714041B8D057EBF6A8877230E5AC69A569EF96BB0BC56B3B4274CFF003C1B5C718B8E5CC1D8FBF13F2FB3290C020B3EC69C85EBE7BD9A1D7E9940174D2847A3B1BDFCF61AC6730D74EBDC20BC07093B2D27AD890445C72B5AC31212BB38D5087DC375D5B5BF846BFA6511FB5B4A9B79D2CFE0F117ABD66F4121E1EE5811B473EBF2F762491D9DA0FF006DCEB415BB3D3DED5739FD312E025FA9BBB8E9D3A8A9BC323FADD4D59C701076F18E80CEFE5BF2B7962570BD9F24370330B30F64756E75610A230AA0FF00280D7D19ED5F77861ABD7727C2E5AF238A47CFA7CBA8C49272229BA7A52956AF8B74610A8C3916FB7E7F9E70D0AD7624CAEFE6A03E127FDB9E1C232276250EDA37E038AD7EF19EE0A86A474B5C6FD6F081ED729BC3969DB8A62FCEE7F2DBD70F139250108236A7F07EB1A8C31146D5EAD7D45C53EBB504379D6E924852F6E7C5E7D247C7D30EA5E48E920A59D8BB6CDEBE5AB88DFB824BB12CECCDAF8EC368D0AD689932A9F5503F8FE1F0C384E4D5B59DD9F4BE83EBE70E65618809171B31153CCF975E621139AD1004057583C561F3F7EDD05A7191947201D9C37A5479D7C61CA70E77E800000DFEDAEB7842E6B34816548DCC1FD7CB01CA3E604A75676F1760FB9A9A51E9ABC9720A52294D69E22AEFCE91A0EAB2F9F02E387FD43F3B45EF323A8C64E535A203176A7D69AB56FB18D2761EE5B85EF47D2F7F1F516783FC48EFFCCFFF00DBFF00DF8C7FA47FD89F2FE21B771FF7FF00EDFF00EA8DECEAA2D1571B9BC478F8BE65780E51FF006A4780FBA4C67F4E7424F8375DF979F9EFFF001827FE60F889F778BEF23DF8C7FA3F21FF008A7D7E5FA03E107E9D85490741BFA46D6F54A9E0781C1E189850E768B98FDEF8C8CA7874A3DC8481E845FCFEC9AB0E4E8EDCF7E9E1710B1BD46E5817418F303EE36F79DB91C6ABCB05004B3BBB5AAFBDEE1CEA4D18C2470E496143AEDE2FBC2D6B50B8AB9581111E2927E6267DDCF0D26654521F87992C3EAC2DCDEF194E18B12407D28C79BB17FAC3A53E7EB1B391CCDC193D37F38B461A9CA8104B709DCA5F9D01AB6B5D89D2038751B06F33E9EFF0FD459E2D6482E4111CC5847AF4F8729B623F17960FEDB1D5ADBF43EADB420BC3312141C9361F663AEBD4C3EB19CAC443827D45EF1BCD8DFDF798C33565E59CA496A0A5FEBB3D7D4C604B22C9DB63B0F2B44932BCC52FAF8AA163BA6E244EF3B6D24C6E0EFB79E2171D97F08F950E482CCFE24BD36D3CEF0B252DB82E1CED5E741E9BD22CFC8335A8A358718521748A0016E526124729BEE79F3988C5231F8104A93C3BDC5413A1F1FADE1CB52F6DEE7A7DE2DCD26ACB975754BCC1097B2ACD695FA6AEA75A789BFE732B65B24104594B9102058CE39BF6851330CB42652CCA58585058151C2A04B6B5142CD422F16FECC6293879C1CB391AEBD1EBCFCAF48F9CEF6DCEC453D8FF006BB9B53E5AD1672ECD2A955793A82785B525D1F58A80826CAB2C8DE4131CA31E81F87DDA6188C261E5A965CA02189B94809FA82DA72B3FA03B3D8BEF25D54486A9357A5013A0157D7C0C74D2ABBB052EB3096DCE5FEA480164CDEEA9FC31DA6465C8C4A5331828DC1AD1EBE66C7A686B162C47CE9048A1BD7A75F01F50212F193CC7CBF76C2799A46164100B508352C4D19EEF6FB5A1BE192CB1460487B59EB7B35FC290059E4418F43E938AB60712A4AD556726AFF4EBE3614A43DC6A3890973A58E9CBCFEC39C1C6AEBF218915CD2A04855DA94FC6DA188CEE81BD4E94F6F1A9D5AAC449F203FDFE7F942492AE249507BDADB7F93A36CD1B265814BFA790DDF6FCC7A3BA43D897DA2F5C86BEA1D9DBACD2B9C3158FD630D2824C1E3EEDE0950B72DEF1CF109DACF8C391484CC42E6A105415C251F3B535E10DEEBABF38C7769704B92172B12998B1747ED3714E22DAD4D6B66B4771FB2EFA323B56CA2A9399EA1D78747210A6D6AA3144CD726A4020A9254DAE121039911D31E74CF7E22FEBE6CC565B8A54C492A74F094D9C8A96176F66B4ACEBB4B97CCC32E5CDC083359A54D137F6124B9617A373DCC7A1DA23D973B3BC89348F6A0CF3FC499951F0127EAEED2071698B424C47879881C81C732C7F6AB39985412A9A82EAA85135362C08D34F0D8C714CD7321C4A505F0D4B03B6D4D816F2B477032AD5941A7B2EA6CA74F640CE554F4E8E053A82859AA000092AF00360247112761E58A2E2E566799E2A6623173A64D248E10AE2F92F6AF47635110F85C72269520AC5ADBBD1BC3D2B4763086BF546655AA2A4B08926CA0DA02B9DE4241B75B5E7CC99BCBF0F2E401DF715AAEAB378FF0098658C099AA50490E2E68C3A6CCC7576A924C372179A66055F5879E42531C0038B00850B82124585BACFBC1C4DA27E0A50FF006D12B88B392949B5AAA07DEA62115825153BBD4B1A7A6C6DA7D6323953847896A51B9924998247351FD7717C41E6D2D58B1FED6D460D76DB5D6C2BD0C4AE1308997C2A533E808E76A6AFBC6D6B23EF02C13B478BD7900227F0C23914B9B9671778E78F7D2A4B6B776F3AE85C6324215C212CEC4B0E5CFF000DF58548C992D7DA337DCCCFEE3F199C58558EE2B067E8C3ABB3F85B48622411CB7D7EA60759669C02549E7731F2263AC1D87C30267297706BCD81FB7E203294081777DBF3FC6F081DCC1A6C11C4205809B5A7CE3A5BF495912B8FFB59DF57D7AFE2F18187481F352DA93D69E7E9CD9ADFCF295B1E25A0127910368F537BF3BE1E4AC04C9A3E54BA74E4EF57E5B887985C3BD402DA1AD6FCED5FA54C45331D494C0C77C241BC28DF9DB90FDDC9DA4E464AB5172953D1836BCF7A57E9A43A1865392E4826819BEE0EBB9FB443AB75AB742210F7171CCCAC9022D6931E640E9EB89CC3F678AC0FF6D8EED7DF4B8F2DAD1B0C22B899ED5B73D75B369BF2787E65DA1A47178C738B83CBF5E7CE713B85ECD129629A1E5BB9ABF41F5AD2344E14872493A746D9CF336A6C0C40733ED0B6876082AD97122D0441E5F3E66F89AC07674A685048E8F6DC6DD2876A43BC361CB9E77A5697F434A75BC436BBB41324F79BFF00ACDCFBC4C723FB8B0E1FB3A354576E1EA3969F4EACF93874BD4D4B39AE834AF95222959AE43F056F149127ED913B8037F5BFBF13123B3547EEE81B427E809B914B386B343A4618306147AD1CD6C6BE0DE43788CD5EB068C8EF8DFAAE6DCA6F6E7BDBE589797D9B4A98F7551CBD5ACFFE7A3A4E1EB56E5B9B6B5E7AC43B3AD58DAFBBEEDF20DEE167EE9E5E66D36C4FE5DD9FEE81FF006AA2AFC3F5035AEFD61E49C307B1D19C1D2EDEF4B86788B3BA9D2265E3046DC6ABCEE7AFC671369C981AF776D4A5CFBEBD44385E19EF47D83BD3607CBF8A36BBA8D0A36748893F6D573FF508FDDBAAE8C9D229DD9ADA9FC72D6BE71A7E9056A6AEC18DC7D5B7E669B35BFA844477AA02F3E3E7E4388EE3D371CF0E1395049AA6BA387E9B37DF5A46C30E052B7A50FF001573EA219AA73D42A25D3B1DD5CA36267F73877272C4A480C0A8DC331157DDBCCB42A891566BEB5A5DF586B5E78DFF00CC83CA144DBA993CFA6DF0C3D4E5A1D9491E403EBA9D3FC6F0B7E9B97BFF00CA10D4E7483C24382F3324C7DFF8CFBA30BA32D4D999ABA13E2CF18186219EA77615EB5D36B5F786B733947F79224CF888FCE3E1BFBB0E9397A00140DB307ADDB9529BBF8C67F4C1852BC8D3EB60DB8BF846AFE309360BDA6FC479FC3E736E470A0C1A122890185C00F7E46329C355A95DDBEA490FF583F8B0BFF337FF0054C0EB73BFEE6241D7F4C904B2789DDE81EBEFA7285D3866360DE05BA0AFDFC213D466893C1FCC169B4813F33EE3B0DA231A8C3006A900B9B81AF9FBD03C3A120B8AB0D680136D39EF6E468C98E66836E3DF9123EF07F0F86F8C0C280A761D7DFE2B0E8480C38BC472D371EF5B473FC5120D9C8DB65728F51CFC87BED07E94034008E601FC74A8FA97D6761C10E030D8D7EBEDDB678E7F8B27FE67CCFF00DF83F4C3FE29FF00C53F986DFA73B0F21F98066C9FF99F3FCD6707E987FC53FF008A7F30770761E43F31BD19BA37E31E627EFF0017DD1F2C1FA61FF14FFE29FCC67B826EDE207E617339B213C5E33B8D951F8FE76B4EF8467614355218DC507466277E909F72C482068C43535B3BD5F4E421623371FF003150623C64FAF3133F39E9BB7386410FC201EB50D62E4B1EA5CFD8EE52DABEFF00C3FE617359C246EE131FEA8F4B4C7EF6EAD2661527FF004BF5BF466F00DE91A1C3A740FCEC7CADEF943A339CA0442C836985DBCB63EBCC01E47082F0A91D342C7C6FCEFEB78CA64243D1BC4926FB1FE6D7879A6CE923FF0030F23F68F4E7F9FC45CE194EC185E8F76205B9B3F98B6D0DE6C904BA412750697A59FF00C33BC49A873A4C0FE64F985493F80F39F29C355E5CC91476D19B6BEECED61630D55254E5A9B8D9AFBDF661E1131CB73D6D2140B84484DC93FB267ACF3B5B10F8BCB8A83F0D3E6E6E7714A536D61352787C7935A2C1D399FA03E805C24150B719EA3913D6D7EBCE6714BCC72E67213BF42EEDA7F986C0BBF36B16A0FB7D1B678ECEE8ECC935D4EF3282081DD13D4410641991307EF3B938E37DB1CB140899C25C3F85BCFDED0E30D8BFD3E225B1A715DCDF57DC97AB52F7B8E9CFD269D90AB53F64592F68F48D71BBA51BA82FB884CAC8A9752D278D43C4AB279F981CA63FB199D4CC2E3BB92AE14A16800380F4D282C2FCE3BE763F302B44B4B965D0DB7F16F2FA57E759550EBA029C04252A5049DBEC98363CC4796DEB8F6BF65F3046272F96A7015C1524BE9F7FBDDE3AC292424275A1EA0D7EE235973CA790BFAFCBEEC466758B4CC5292142B46BEC7714F5EB1ACAA2D3617FA1FAC6C43A6FBF2E7B7EA7D047DF5D912560B83424F838D74A335372D0EE727BD606840A86F2F7EB1B0B806E23D4E2465A295DEB7F2F2B9FA86847B8AD154E8E7EDF7FC62AAF7996D4CB090A2F885180600E932458F2BE375A8A0505073DCFA6BBBC6532120D4B87A7E49AFD0D23EE58D7D7B87F90F334A23FF2295968091784A12916E623D31F37578BC5A49054B501AACA97471FF27AFBE51F3CA5769715303AA6101EA6B5FE43ED5118703AA5A7EBD9D2CA567C08EE54A9F78988DA670B48C74C2A0F6342C03823C295B785A3188CDE74D4105448152E6ADF515F10FBC0E648A52C3D4AEF7A94C12A29E19D8EDF3369DEF89FC362659FFA92DC8D697A7DF5262A7986266CC25B88062E01D5DAA4330DAEDD21C9344BAA4210D27854CD9CB44CF4DB6F89B5BAECAC44A94B981494B2998961D0DBD2D5A44223193A4AD8053137A83D2DABDFA750BDACB5F6CDC098B4904DAF17E9B11E82F88E9DC331F8080EEE069D1F43EBCA27F098A54D62A0DB56FE9B3824C6F51553C7188045A0031B7404EC3783BF4D9A270D338832B6607D75F21CAEF1348E129D1C742EFF009FA51E95D2BAB49025503DD3D3CA3979DEC77C4B49904252407FBF99DFAF3D8319F8954BF9520921D9A8E487A300D7606D5D286123F9C374401EF078A6F206D1D7A5AE7E785958454D0C0356E2BAE9A68CDFC467033666214789241AFEE24BDC5F41D7CED114CC358776094B891C878927A81E5FBEB87587C996B3AB86A36A58F3BFA44909243D0BA7C5DDF9EDCA21B5BAD14EFF00E6A470837E310679DCEE3E78B061FB3EB2CE14E74626F66BBF9BF278DFF4E5DF57DFF9BB546819B6880E6FAD9D6F8887B69D9423AF22479FE63160C376616A1FB554D83D6DB7B1CDE35EE00AB7A1F5AFD6F15B66BDA0BE88870DE40F1F48E73CB9C1FBB16FC9FB30025416973472CEDE5A7869A562470522A6C69A0DFAD36143CEA220D98F685502DC7133FD53B6F10636F8FCB16CC3F6725A588439E9F5A55F95F6DA48E1C1B25AF63FCBFD36882669DA3383878DCDE784957BBD2D7FDC625A4644840712BA8B0D0FDF5BED77C7E98EC697DB96BB11107CCBB458E2FE77C553F79B7EE71268C9D9889543AB6DE1AF2A6F48C7E90E80B68000DF5310FA9ED0A7ED390449BAAC7A9131BF947C313383C8D731C22512433B06F56DCFD2978DD187E0366A790F7B539C45EB7B40041873CECAE77F506F61B7289C4EC9C8668209924071A52F7A57C0727DCBA9529D541C46CF6F01EFEAD11B7F5BAEA15097002264F1011D0EFF000F76DCE7B0D9404FEE4682E3A7D747EB630F112663064B02D522FABDB956CF6863ACD5CFC121D83FFAB6E53CEFCBF6226246552001C400A6DE27D9A6D7A391216CE433D4BEB40CF6036A18607F54BEB8974D898BF2EB24EDF893E78929796C9154241702A18EFA7E5FEF0F24A1449F9438B7A787AF367AC34BDA99C5132B248B595BCF94C7AEF85060D2094A6583762DFC35B975DA1C194B37413D4084ECEA0717C72E447FAC5FE26E6DF75BA6A708D6433BB8E1767DEDE756615A083BA57FC3D04277B3F59305C1CEFC5BF3F21B0EBE9B6105618B91C0430D8ED4ADFC1BD088C2A5A9AA8F4FB8722DF686D733D75572E584DA473262D3E5BFCF69DD18750154B73E61AD6E553585A5485100A505F723C47DBDD92AF3C5DBF99E9D4EDCBF630B265115B9DA94F7D75858E1A610CC5FD3F9F2109159D3A77583D25447E9E97C2F2E492C40A92761ABBFA54F846061542A5FC74E77E637E509579CB9BF797F5FD679F2FD70E44903FB69B381F7FABC6DDCA989AB3EDE9CE386B365A8A871DF7BA8FE07CF9DFF001467A120064B72B8D3D3A529CA364E1946A01AEC0F81B10357B46EFE28BFEF3EE3F9ABF0C35602C1A1C2308B001677DEFD1C68E2135466AB1C32B3B923C407A49323E1F9E08769C32C81C496E9AF3B8F6E7AA6FE2CBDF8CDBFD53F120C0BF909D873C10BCBC3B100A4DF5177F1A3539E83683F8B2CECB3F1302DCCCF3371CE647492359D86528D05A9AD3F3E3D2907F165FF0078FF00ABFF00BB0423FA49BEC472335593F6C7FD5FA9FBB0460E1660D3D3F98528CDDCFEF1E6388FC7D2FE57C118386982A416E9FCBF942E673654125520C589DB698E636DFDD717C379E3F69F0FAF2FBF5168495865F11A1AB3163CFF0093C86CF0B119B2AF0BE9FD463CB788C335817173A6FF00CFD7EBA9C24CAD1C8B50FA7F10A7F8BB96F1CF520FE67F7EFC345A5DCB3034F2B5A82BECC6BFA69C2C83E00FE217319C2C412AF7C9F4E5E5CA7A473C362826E0EFAF4B535F1F078C9C2AEFFF00ED3CBCB43E476877A7CE5C9BAAC77BDFDD049B4F2B7ADB1B499449F9833EFA5F57D79C379D87527FB5DF6A03B59FEBA59E251439D2ADE3B48983C85AF33D798FBB0E4C8960114A5AB42EDD29F73630C66495281052433871D7AD76FB44958CED61248724881F6A08F74EFD7732047945E2F0C1493C29A54E9E3CFF008D618CD9132AE9248A06FA790D6B6A9AC4D34E6A073BF44B877B99116E9CA47979EFCE9998606612AE14B8360C49D795296E8F11CA9337662FB0FF00034E76A563B63D98EAE0CD7B54CB5857D64A123C52045BC5D2C7A8EB7C735ED464EB99865CC54B628428B9005FC2AD66FA35232795C99E8F9480541B4F57D999E96E663B0DDB9E9A4EB5F67FED074C5434568FE18D5435C49903810BA8F09DFF00A44C1B9F5C79C50A548CEE4F092026629C02CEC59E9F6DF68EE7D859A4F03BDD2D6A5B7A59B63A74F8FECF1B6E92B2AB2F4A4257499857B4A064484D4B891D62C2D6BDBD4FB1BB15989465C80B53012C30259E95E6DCFC6D1DE904AC7117AA535028C05E9E3F9864539E7246DF1EB1E5CF0F67CC99889C7841238B9B33F900DB42A94D416A7E1E3969DBA813111D7F7E677E589944B972E5A12B676ABFBE6478187A9040480CFAF37FBE9D2371713BF14FC6F6F3F2C39425240E1200D83726D7A46EA42920929206BEF58C1EAB4D35338F012B4A9BE131600A84DE236EBD461963D69952D550686A1AB606F570ED6E51893C33961093BFA036F7D23EEB90C0E9E222361023FDBDD8F9E53E52438291434F478F99099412E05069ABFAD2FF00C0A4284B29FEA48F7807ADBCA30C912439A3541D3C4BDC68E7CA3612D9FE6356A36CDF8F7AB830F25BB13007B848F3BF97BEC39E25654A25258508A5DD9EBE1CFD8D0E1D157653DCB6E051A91B1598B6CA499049E9E198DAFE9D77B5FA6C704A9C40A80EEF5BD49F0D3F986D3B0729D252800005C52BE766F76863ACD46D37BAC022CABF4DAF20CF2DB79C3B93922D740E75A7A786BD7A88D512C22890C34034AE9A9E9EC45ABF59B54E2CA0419B1503100DF63F77E789AC276754BB8552CE2D466F7AC3C94859B17D19B5A52B51E9CA2039A6BE80A01404743EBB7E6019BF2C5830BD962B22A5AAC081F6D7973BC39124283901BC86EC6C3F07AC40B32D78E389480E9313693FB8F58817C4EE1BB2490589D469CC9F1A7BA0791C1E193A21B7D34715A7DD8B96315F66DAE570A3C6AFFA8DA37DE48823F41CAC983EC8CB05249AB0D00DAEF4D7979C48270E4B101B4DEFE3AF28AEF36ED01C6403C6A13360A304027A411E738B7607B2B289B03C2DA313ED8FE09683F4F5B5CD00FA50FDA95A33C57D99768CE92A951833BA89DC1DEF37F3F741C5AF0BD974060C2806839834D5ABE02D19FD393702DB0D34707C07E2209996BF7564788C09B137E80EDCAFB6E6313F87ECECB940B84D59E8DBD0DEC5ABD76687125A43850BEE1FD3CAA4FDE2215BAF1EE4AEBBA8F4F5B49DFD791C49C9C964B03AD68431246F7A07BFD21E09C820820176D486D6ACE2B7BC43F30D542BF87896416E600279FBF9F4DBA4624E564D2D92C052E4B5791F1B56C3785D130711A38A11A38A6BEFD2B17AACE512789C37064F118206DFEDC879E24E564928814018D28FA07A73D6DE10E51310481C2C7CF73B1F3FE222F9866C1C4A421C208E52473BF3DE2779F4DF161CBB05270E829094EF6150FE22C346FC6B36499EB484D00B902F50DB1BEBE2F0C2FE647FE6CEDCFDDD6D73CFEEDA5D12E4B5427A33B7B1E1607487D85C190A0E9E56BEFEEEFE24A2566409252E12044413F70EBE9CA63094D9485060863FF2A02C1DB6E94360444F49C1800028046C5A8DCDB7A8B38A184CE660019E33111F68CFDFBF958FA02488E99809ABAA490C6A03DEDB6C5F5D6BBEF3A42024FCB5FF003AF2DFC7486D7F304DA1CE479F49E9FEF6E587B80C2CC90E26329CEAFBFF0022FE15B6F8292921C867715EA77AE9BFDE1B575C913E3B936379FBFA7C312BDDCBD852FF00CC487E9D1B0F2FE634FD787FCC3F13FF007633C12CD78475FE633DC27D83F984CE55CC8EF0DA48B9BFFEE1F2B7974C704BD93B697FCC63F4E8D8797F309555A0117F9917BD8DFCB0D67A521D9205054372F1B75BEC214972057852FD037D2B1A1CAE17857A7895CFEEF4C3585FF4B47E1A1D77BDFE6EB094D7264CAEFCFC4BC107E99A8CDCBDAA38FAF23FBFFF0072F1B71AB7F41F88C1C283700F5FFF00EA37355C91C442F988B9BC0EA48B0E64CEDCF094D2FC3B87F173EF4AD6B0F30F85490C523C869E6F4DE87CE395E62019E23FF58B7BFF000184A1D7E8D3B0F249FAFF008848BAE0621479F318236FD2816007BFFD5187D70FF71FFA8608CFE9B97BFF00CA33456024CA80FF00D4411849603D2F57F48C190137D793FDCC67F5B1FF00311F2C690774397FE23F307D707FCC46083BA4F2FF00C4473F5DFF00F553F1FD7041DD0E5FF88FCC29A7AE09E225C076D898F7C1C27334F18061D2AAB024720295F0BFF887046629DF8933B1BABEE9FBF09D3DEDAC67F4C9FF0088B6C9A7F3CC79C2D6B304413C493B4C927E026E45F6F8E352949B814BFF003FCC63F4A9FF008BF4F7F585A9AF4C8F1EF72388FE7FBE538C7026FBB6BEEFFE231FA245F847D835986C75BBF285CCE60949FB569E4ABDA76B8993EB68C359E0241005DABF51B7BDDA23F17252904049200AEA6FF6F7762FD4D99A2C02F94183FAF59F7FB8E1A4462F0E922CEF534F1EA6FD6DBD5F18CD5278471C7FF5449B4F3F9DA2E3D304021BD7686D330E0B70D80A8A1DF707CB9C4CF29CD5B8038C8E5B91173E73720F5C2664CB533A438D587E3E90D558740BA4575DFDEACCF174681D52AA1CD58097152A75B54955E10A06C6E248FBF9099ACF68B29973F053D6123E596B7617749FA3B57D68D5CCD70E04D96426AEEE1A80355AA2BE7C8DE3D7BCAEBDAD5BD87E78F00852AAF24AA055024F734CE8B98F2B836BDF1E16CD248C276AE4B025299EB013A1E25746714BD599A3A576397C0123F69F958B1D3C2FBF9EB4F8CFED532F465FAEF523688FFF0036AE040B01154EF2B44DAD138F4D64B30C9C2618874F1212487E40E8D4D5CD01DC18EFD964E3330F2C7EE00539B8721F7A1D686DA45798E83964C9665924076BD34A1BD47D5A2591281E9BECD6DB4BB6AC6353AA03867CFF000BFA61863713F3B0535695E6E050F869D61DA249E20402C2EE59C737D4F946BE31FDC46FD7F77C2B2316521B89F4676E4ECE3E97F087989522649EED0C54DBD453AF4673D19A1592D5552BB4AE186D650A52F6E1E054C5C03E2888F7DE711F99E238A54C7535CB3FE4F98E9CE2264489D267A2784964F13ED5BE8D4BBB7231F79E8692483607CFA4F33D3A7E78F0CCE0A2753F8D1879FB78F9A610E03D0D5F57DB5D2372DB40493C42C0F3F96E709A10789238581D5B6B7B3F78381B9F2B79D7488ED6D4A5A053C6011100902237E63F600C4D61E4BF0B8B81A5FC2DADBAF283839BBEBB7AD5ED10FCD3352DA13C2B07ED490409BF3BC413187C65AA531425478B46D34F3F37F209AE5DABBD5AD6E715467FA8D6DF170B8044ECA1CE3A1DA62C7AF95A7300A98E01944BB35DBD0780A8F18C26497B39A69E3D4DEDE622A9CDB58AD9FB6B242A62E6DC26F6E9B7BFC8E2FD96E144DE10A9646EA20FD00A5A9FE21DCB96524937D2C7D2B5EB4E45A2BBCDB5B92170B55CC889B83D36E5E5B46DCAEF80C9E5A824DA81DC74A0F1FF0030EC218543BDCE835EB53EE910E7F5B59414B226D04EFBCFC62F137C4D0C914E381015CECCC76A3DDEF7D054449E0D245746D859B969A575F288566DAD93713E97B7BED7F48E773890C364D3D0CE87E82BA519BCC5A8D41121107ABD522AAE49841E6779DA2667CBF238B0E172F9E900041F6E3F3AFD60F7D07B6888661A8132A957B819F5E401F77E589FC3E167243841A5A8CE5E9706E7D7AD4888D4E7685127909DCFDF079FC2313586C0CC9C3E6490ED52DF4BD7931AC67F4C673102A7F8E63C3F9788B57E70832479F1413F7C4DF78F98C4ACAC9144BF16C76B3685BC7A54C2C8CB961EE096621CED56356BD6DADE22F559B990524A4C192491F1DFCF68E9E92B2325208F999E868FCADCE9CF5687A9CBE651817D6FE0DE218FD1AF1FA8CE1641959581EA2F71CBD3E3CF0FE5E4CAE22126946FAFAECDD6B48772F004DD241E86B7DFECC7AEACCEE6AB51FB479D898B5FAF9C6FD23AE1C8C9E63808AEEC6A0BEB5FE3986896C260121412450B5C1B53FCFA8BC36BF992C09E226677F48E7CBF0BCEE4AA9CA2626A2B6DCEED4A9E9FE1A7A4E050006482C5C161AE97D35AF84256B3155F8D5BCC4F9CC70F5E5B5BA61C270252C5436FF17E56BEB1209C2B248E17DC8D2874171E2E7C2BC3B5CE411260FAF59DCF2FDC61CA30E84B3801AF41CAB47DBCFCE23E7E1493661BFB1B37896A351B2A6BD5E0B9B024816B1F78F2DA2FE77C36C5A65A47CA41248DBC79DB6FB554C0E1EAA090E297E67DB9D078C36AEBCDF7F2137F84DFDF862E6EE5F778933873FF0017BD5EDEDF9F8C70D57295C526C47F70DFD27F7EB8C3EAFCDFEF07707FE3EA7EFE5BEDBC60BAD11BF3B78B7F9CFEEF8CB9DCED7F483F4EAA7CBFFBAD6BD7E9CE13AAB48820F90B8F91F3F3239EFC9A4F533EAFA93AD3EFF8E8ACAC39049663E07D5FDD7C343958B04EE6666E39FE1FB3869C67610BF72ADFE9F9F7B084A6B960917F88FDCE0E33B080C957D36DBA8F7BDE31FAFA86E63DE3F3C1C6761EBF983B857B03F31926BD5E220DCDA26479EDE42D84D6B347ADFED6F661C4A94A4D086E647531A5CAF72E01168237F9FCFA634EF03B51EB47AEADF673D690B776378D62B9CBC903A6FF00AE0EF361EBF7F380CB1A13E35FC4726B564CF11F404C7BED8CF782BF2F42F6F483BBE7E919A6B14641519F7FE53F2C36985CDB73E7FE20EEF73F6FCC67F5A3FDC7E7FF006E138CF00DCFA7E20FAD1FEE3F3FFB7041C0373E9F883EB47FB8FCFF00EDC10700DCFA7E2334D6A93B1E7CC9F2E91F3B61399A78FBF7F783806E615A2B960DD56F53F7613804B7DCF41A7BD7D216315EABF885BCFAC7EF6C101975D41E63CF6D87942E6F31541F189D8127D39F5F33D7041DDDAF6F3E6397B78503317131E3F2DF9CD8F3BEC3973B9C359C6B4B1FB010D71320936B8EBCB507D1FC21DE8F335DBC44C45CC4CFC7A7C4F5B611861330EE9735D29D46DE0F73E7477FE28B0A49E3DBFD44EF1BC47CB6E7821A2F0B47776D36F51F7EBBCB329CD96384F1DBD76F9C8FC799C10D26615DDEC76BD1B57AFAED13FC9B54FF000DAC61D51528CDB8495472BC0B5CC826DD31AE324A6665B8B2A0ED2D4C06A58BFA3442E3B08A98A49093F2B9A3F96AE6EDBB7378F6CBD997355EA5F67BCFDE52A4D3E5758949245FBD4BE9304FDADF604FC71F3FFB649123B5982401FF005712B04805CF0A9EB4A6CDAD6D13591CDFD3A892A090180A736B6ADADCD5F78F93FF00685CA9CC9BB50D594EEA5499CCEA1490A052654FB8A98224CCFA73C77EC19E0C34804D3BA43518B848A7979DE958EFBD9C9C3138292C6CE14D5B9A3EDD628C2A80241133F2FDFBBA62D597E294994B00B16D4E95F5B5766DA2EF2E41090598F5D2FAB5FA5234B8B24A523ED5EC0C9B6FE1FD397C22A7628AE6AAAF5B57EB7B33B36BD61D4A944CA98487B51EDA6FAB4042CA0AC24C0DC81205E37023E3E784BF5CA42CD4802CC5DFC896D0B188C9638B1291A150B8B870198E97F1AC29CBE9DCCC5F6B2C485F1573CD348E0495ACACAC25094A520A89248989F3BE2371D987121614A77259CDB9FB6EAD169CD25CAC165CA9C0252B12CA9E95A55C9B3E9BF847DE977E9FD93F963CA8403711F2A7BBE7E9FCC24AA7C04D8C588DFEEDAFEA396E30BC997C4A7091422A7617F0A0D2FCE0EEC6F6B53F98AE73EA829E205467909D81F7DFAC98EB8B460240212785FA8B1D797234783BBE7E9FCC55B9BE6EAA44A932541C993C46D137079FC276B0DF16DC1E5B2E7FEE48A33D2FC853CDE977730A224F103A9341A6DD5BEBD04529A9B3509529C0FA9B324D8157EC7C3DC716ECBB219331490994058D5ADBD773E3CE90A8C314967EBC9BF3C9C7845379BEA072B141B455F129B24429B080667990072DF68E5D6F381C9B0F2582C25205CB8A7875F6EF0E932428DFDE9EFD451EBECD735CE5BE25165B0D5E1C0F34605EFC324C8FBBCAD8B5E12565C3E4EF0120541A35A84BDFD97870891A31A54923DEDA163B1A4429DCF5A794B4D4D690B444212D1B13BDD3BDCDB96F7DB0F26E6395E5F45CC9638AE4A817B73F7A521C0989902CFA0B7A38F74A52196AEA9E767EAD4F5954397754B50A99E9C2855FD2DEBB9CA3B5393CB0077F2ACF5501F53CA9A5B68C7EAC3BB73AD9F62D7D6C075786FA6D3DACF3F5AD19469CCCDDEE48EF09A5A96878BECC153402BA7C49EA17476E32094DC588C397D0CD40A8AEFCFEB4615C8C524B92083E9A569E74AFD62454FD8576D19B81F52D2554B04FF5B896E3D78C00236E5D779C253FE28F66B07FF56749177E15856BA70B92E2951E942ACB9A8501C4BD580614F7BD7D2AE87D927DA2F30095536892A09992AAFA54403B1852A779E56E7883C5FC77ECA61292E78249A32555AF20D6D5F95ED37815A12ECA490C18961A787516AB52EC81FF00637F692BCE8804117FFE25487E1E212379DB9ED84E57F507D98A033A9A517BBD68DE0C74E71312D72DCFED1677228C3E9E5118CD7D8FBDA329921751A114A4C1852330A7544033210553EF1F9626709FD40F67669E193312F40428A83FFE4297F57DA1E266C9B28A5EC198B1E4DE75FCC5539FF61BDAB69C4ABF8B68FAF63BB9E20DA16FC0E63F96850BF53BFDF6397F1B72650752E53901BFDE4F8EBFE3EAAA67C80400C40BB306DADA9315366990E774CB08AECA735A22991DEAF2EACE111BCCB2058F3DAD0716FECF7C51C97342522749413A77A9513CD9F7F4BD2CF244E0A53A025401F992E900DB52DC81AB1E42B11475550CB8505A1992447DB50A45373B82954131E9BF962D67B5997B3C89F2C837F9817D857573A69E313B875C9984F11EE82438480540F881EA28FE70D9993CC3686DC7AA0B0E89EEE9D282B0DFF702B13C53E77C2A7B41859A974AD249D5EFA52A29B5EC3C64A423BD05405750FA581BED5E9CE1BE9B397140A1CA9E200785250124F2898916EBB79E3538FEF090920BB1047A519E96FF00308CEC27CC4F0B39734A1E5B8A0A5DC51AAD182AAD6A2A2A6CB69DD04DF8BA9DAD7E57B72C379B356A2789C27A9248F3E7BBBC2B86C1A407721EE386CDCEEDB75BC2672A81BF17A99FC62DFAE10E24EFF587BFA54D9CBF43F47FBFF089DA9008E131D60FCEC09F960E34EFE8631FA54B7EE3D58FE6FEDA357D689DC93FBFFD3838D3BFA1FC41FA54FF00CBD0FF00FC51A9CAAB893BF5E71EEE56E5CF7C369EA1422ADE1AFB3E3A43997870E0B3F890CDBB937F6743AFEB3E7FBFFA70DBBCE5EBFC438EE07FC07A7E639EFC281926DCA3F41EFF008E0132A1D34D6BFC41DC03640F06FE613ADE4C89F76E07EA7DDF760332EC3A560EE07FC01F2E576A7BE75E5AA8826F3B474F41B981E9EFC379AAB134049F7EF58048E7C23A3D7C08FCC6FF00AD790F9E11E34EFE8633DC7FDFFF00B7FF00AA13545403C3CBD27FDFE5EFC1C69DFD0FE20EE3FEEF4FE6137D60753F13F960E34EFE87F10771FF007FFEDFFEA8DEC5481C5700F9C9B7BFF2F7E3459059B478C89203B906DFDBD79FDFF951F5AFF5A7E18D236EE872FF00C47E60FAD7FAD3F0C10774397FE23F307D6BFD69F86083BA1CBFF11F98D6BAA16950E7E5D3C8E119AAE16A3F8FBF6F183252756E80463F5BFF005FCFF4C23DE72F5FE231DC0FF91F211B1BABB9F1FADFF7E7CBDF83BCE5EBFC463B815F98DA94D6B7E56F58588AB103C5BC45FAFBC6FEA70779CBD7F88CF703FE45BDF9FA78C2E66AC492553EF9E9222D3EE048DF1A124DC93D6119B87245F8B9B337A9A7BD6AEB4F5A9170AB7979ED79313E7BFC318866B9203862DBFE43D3F8A43B335C991E2045AC4DFF003BCF58B804D8E0840CA150534BBE9EC6DE90FB4B9824404A88E978F3B79C580BFBB04365C8493C4CFBF3D37D4ED5F1AC4BB2ACF9346164C2839C299578A0191FD524738F90D8E179CA6CAF16583896B63B0E13A589AFE758426E042E5CC5D9858815EA6E0B79F808F71FD95EBCD0FB2ED5D6344949695DDC13FCC0E54282E4CC90248BCF4137C7843B48944EED9E012520A7BF9E56C43020B8DD81E4DE8229B3E7FE96690E032806D5BDB9E54A068F05FDBDF432A935AA356D3B60379C3CF297C090005320054C08B99DF73D648C7674C9270F87521354A45BA002F4B6BD3731DABE1D6681695CA597E3E16F326C7D1AA7D63A00E38971BA5B01F6828C7398FDF9DAFB626F0292A96AD29577EBEDCF5BC777932C2A47117AD46D5B57434ABD2FA3425A86DBA37DEAB026A14128A74DC821638551B83123E1CAD88F97294664D5317AF9543B7315A9778D258E14AC3BBD816771E7FF00768DD636D3A2B1861CCB1100D47F31E5282645BBC4DD5B589DA76B622F160C849AD43D0EA1F6205A86F5AF846CC42D13BBF2966502036C58BD346B335F778EF6FB03F600AED63B51A2D479CD314E97D1AE1AACC1F7507B8716A6CB8CFDAB28871B1B489B5C462A198E35499530A13DE2E89097624AFE5706F477A7E04557B71DAD4E1300AC31980152140A5C38614F3A07B1E51F58E1D3CB88FCFF001B63877007E5B7F37F778F9F9C01DF4DBF9BC25AB74847F548D8111F8DFEFF00961E48284B0A51B56BF96BBDDB918024026DC872F1BC5719F3AA2493369DCC1E87E3F23CA3169C04C92809798916B9D35F75FAC67853B7D62A5CF90A7DB5109714B483C21B6DC5933BC84824440DF165C366F83C1DE6254ECE1C353A6BD357DA364B4B2F50D7677D47DE2A6774EEAFCEEAFEAF96E455350951294A9C4A9A499302EB40817BEC79198387A7B6F83921A528248A30587A72A0AD7F9A43849E201D56E5E76B747BD8561E97ECAFDA4EA84B0E2E81BCA1944971D152C2D442AFC45016140813637B7B8C0E2BE2B4A94B3242D7C7503E55106B4AD4791EB487680901DC30B546BAB5CF2FF1132C8BD89F2547039A9B582D6E0238E9452BAA13CD2548570F94ED88BC5FC58CC65ADB0F8733127FBBBCE137D99EA74A1B5377085201254B02C01DFDEE6A7A98B4F2FF0065CEC474EA52ACCF4FFF00885C708EE5DFAC5453776A4EE4A41F1151E4623A9338ADE69DB3CEF3CE032E7AF03DDFEE1FBCCC7A5EC1B938BEB0C71B3004FC81FA503EDD39D3517BD8F92E82ECEB4F84FF0002D0F4AC70C7097541FDAE27BE428CEC7CEF88539AE70B491373198A7B8019E8D707D6FAC46778ABF057FF005505B4D1EC6BCEB411384559612114F95E5B95A2200465F48E97472921A0470F29BE21E6CC2B5154C9D3D4A15713A6001479057E5B771194CF9B60199EE7C4E8E437D2F48C175599387F969A65CC7D8A561991063ECB698FC3EE406214876338D35993162E373B7AECC20FD44FA1A5A96BB9E6F6F510980CD883DF2C5288F070A52AE3EB3C3B797320E14E29F8A002261436F523CEFB1B6F511A2B1D8894411C4C0E85B8ADB786AD4246D081F4D692AFF3EBB5FF00E198DBDDD6DCAE07A6F2F05892586206946035BD6D4DEF7B46C337C4B8002B954FD7D98E292AAAE9839C59824154471D325CE28F250300758BF2387A301895103BF2E3FE25AECF40CFA43C4E6F8A21DD7B357EFF0088455B995528101343524FFCCCBA9940DB9F1B4A3E9B1DEDB4C94BCAE69487C4CC06C7FDC56CDFF2F4737D459CA33AC5ECAA5CEA7616D2E77A3C42739A2CAB3E6CD1EA1D2F95E6748E712168451D1D31095483E36D90AB8B4CCFE2A4BCD330ECE2BBCC06227267AAD302D6BB16259448FB75D657079BE216405F130AB59EEDA8F0E7AC755FB47F61EF67CD76CBF579436746E78F0528290AAAA94F78648F0CA5BDCCEDCC88C5D725F897DA494A40C499B8E24D57C7DD700DDAC76E9EB76CAF3C521011DE84248658500A2DC8A99A9B75D23CF8ED5BE8FAED3B47D2AF36D26FA759654C079C77BB0C5338C34992986CA94EB9C491C8488913271DD3B2FF0014F033A748C2E3712A953E610132D615C20815759F97CCD7D0DD3058CC3CC40216971552C2C3AB88B8F968CDD181F38E8266B95D4E4F5CF65D9EE4F539457D3A96829A86DD6C1520AB8A0AD0849888B4CF58C7A4322CFF002AC44B96A5E3651700BF12542A0355D9F4DF7E73F28C9989052A0A49146A934AEE450727BC449DCDDFA975CA7247774D01B200D9513717DADF28C5AE74DC2E2403849A89CC3FB0BFD09ADF50FA6912299094212B02AA7A359BDFA084AE54AC78BC50373B7DE07E186852A4D155E6CD7AFBB429DDA9BF6D3C1BA6DCE113952A26C6C6F63EEE9EBFA6D848CD40B9EBEFDDE8F1A8049600B8A5ACFCFEBEB1A8D4AC0B98F327CFE1B5B18FD44A667AEEFF0068C9045FEA2353952AB024F316BF5F2F220F48F8B798B4ACBA4BFBD6A76DBF10B4A415548A6845FC287C7D79E935046F23D47FF6E112A22E9F5FE21C77279F98852C544855FE71F801F29F3C63BCE5EBFC41DC9E6DD45FAC62B7FA104EC2E3D4DA3D718EF92ED4715BFF001E9783B93EDBCA349A829224C1BC7C0F41FBF38C27326254086AE977BF4F7E31A2E480D4726FCB6AD1F583EB47FB8FCFFEDC2109F75FF6FAFF00307D649E7F13F98C10775FF6FAFF00307D60F51F11F96083BAFF00B7D7F984EFD491C3E2DFA1E9E83CF09CCD3C7ED1BA255E8478FE49F7D213FD68FF0071F9FF00DB84E14EE4F3F3107D68FF0071F9FF00DB820EE4F3F3107D68FF0071F9FF00DB820EE4F3F311B1156AB8E23F13F97EFE184E669E3F68D552942C09F23F4F7F6D9F5A57F71F9FFDB84E35EED7FF00131B9AA95C9FB5620DE7F21F0B7E4463815B7A8FCC2D455192788C7333B7CBF3C60902E5A0E056DEA3F31B455994C2ADD419DBADC45FF6318E34EFF5D6353254AD3AEAFA6F0B98AC54C71729E53EB1791F1913D2300524D8DFAC21370C412149F16EA199FAFD61C45728100199BEF7046FB0BF2F775B8C6D0C662129714BD7EC6F4A0FB43C51D63C2150AE198920DFF2837F7C8C10D7BBE3A243D68D424DB7A373D2241475CA75496388953EF30D260C905C702009E57311CE6DD433CCF172F0D96E2FBC584032D4CFA963E3AF4874890D2660586F94B02CF6EA3C74173B8FA1BEC932E1D9FF00B2B68FA5ABF0AEB692B56FA17214A2B778DA2524711FB408B1E51D71E199934E33B638F2E5430D3D3DD96268B25EA37B9DA38EF690044F4F0D52565C8B33EDCBCB7D0C7955ED5B912354691AE79C6F8DCCA3BF5B64265403EB2AB089DAD69F3C77CC34A98AC249F94FED0496A014F07D3CE3A3FC3AC54B44D9616B01D40124B061A07F7E11E28672E2A8A502789B75C1C306603846D048B7DD79DB137815CA08582B014CC4539D6F4D6F1EB0C1CD953B088E050AA400072035D35362D76DF3154DD453A2A160ADC6C0EE85E49912600331CFE06D8D1084A4AD4A2CEECADE9A7B6BD223CC89E678E142B81EEC5BC09D0EE2D7A54C4A74DE9FCEBB44D4791696D3ECBAEE699C54B6C90D24A9494A5C6C2AC0181C04CDFACE2A39E4E9638D226A52A6E27BB302F63B0B18DF3AC5E0F2EC0CCC4CDE1265CB2E95109F988212C4EC40FBD63E95FB2CECA72EEC1FB12CAF4165E86D8D5B995353BFA8AB1290871402D152DA54B1D1B5A9278546DBE2858291331F8F5620712B0F294D862D4512196E1AAC46A3CDA3C21F113B633715984F9689A5654B502534012F40002CC07896E91EA7B1926655447D58771C5B712527DFE2B981E43A1C70B9B89080E54C0D5C124FDDBCDB511C942944D0FD21D11A1B377071E6199B6C22070028412AEA0106C3DF73CAF88F566409694A5129FDD460281B91A335E90ED091424373BDF56D3C39F8F1FE09D3E811982D35A6E1512824F9413CB78FBB1AAF31C451A628307BDBA907C74BDE1596CE695F31BFE3E9B46EA5A0D0D917789A4C992AAAA93E15282DE128F25A4A52098B1B61AAB1D8CE204E295C25F8925DF956FA5FEF189AA008A577F0FE7AE919C67750E7F96A7A5A7A256C94D353A5413CBC41015EB27D26D8D44CF9F88F1926E4AD46ADA827E83F108F78BD090341B46EA8CBA128287DC2F19EFC254A0279020103D23DFC861F2677197500E2E4A413AB69F8680AE6A59C902BA8A37BFF0031C3542120711BDF71C511D49EBE67607AE1C8095A5C067A6BF4A46C0CD21C1247D2BAF46F5F2DCE5234EA47110422E2448E879DCDF6F28C289509746A35F66DFAF4A985E5A4AFF73923AB0DCF5F2BF38D7DCD3B444AD23681C201B7BC79636078DF8535DDCF5B102E3F30B7729DFD0FE61BAB6B29982D8E2499E21C8CFBC9FDFA61497825CD04A659D0D8F4ABECFBD3D20EE0173D1FEDA8FA4361CF295A925C47C0088F779FEC6153944C51A20DAC4747D2A280F5D20EE13EC1FCC6A7354D12225D47389208816B79FCF7E787523249E6BC0455E9B1DF6BFAD2B19EE65B5520EE5839F12E69A43255EAAA3330E3441F31F76DBC91B1F75C3F464588B842A94142399FB5CD39DA329932925F801F7EBEF48627756D1200971B93E693F8FE7E98728C93141B841D34660342F63EB7687689128BBA035281BF07C36844E6B1A1360E376EA40F59BFCBE6360F5392629A81637FF3F8A561D2654AB042481AF969D7900DCDE1239AAE85F04075B91E622FCE06C07E56E78752F239A0033251535DD2F72EF5E40BB3EBA34394CA40FED62350DB03E9CE8F57D9BDCA8A3AC061D4926F2089EBB83BFE3E58D66E5E24A4B4A0826B415A78529E7F58DC4AA6CA3F228A46843D3E82EDF9A533A677F8705BCCACA9C5005BA85ABBD698FEE0A6164A17C62D04731EF64B95396381C841FDCC9295F50B4B283105D8B6E43346F81CC7132D6089AA0C402EA2CC6FC8EEFE5A452BDAEFB3B7657ED079255B59D50D2E5BAA10D2FB8D40C301905D20904B0C25B42BEC84893326712B83CEB39CA1094E13113A6E178A924CC53CAADCA892A2EE0D7A6B1D4722CE56952146610B0DF31A82FA312D6D8163E9E0676FBECDFADFB00D4028EBE8AAB34C973175FF00E139BA1A3DD38D3249517036161B02401DE284F58DFD2BF0AFB726485271B89EF0A827E55A98A696625F5367B3C757CAF128CC51C4C94A92050597CF61E7D2ACDD7B66A2AABCA9879BEE129DDE490E4C4CCA40B481CEF3E631DFF0D9D61F30ACA5A40536AE6BD0D2BA6FD626BF4D2D29725A96B5ABF7F0AC37BEF369754C21125AB17B889EF49F2330009DADCAFC9FAF2B5CE485256EE2E3CF4EBAD3D61AAC4B42411FBAAF4A80F4B0AE82BF68C50A49DC7BB9FE136C4062B053B0EA3F329B986A7893F5864A4AAE09B583EEDEEFB721995A524F4311BCC01EF3BFDDF0CE04A8F1025DEEE76B6AD0E308EE41767FB8E9BDFF00883BE4F4FBFF002C3F2A01DC57FE3EDFEB121C09DBD4FE611D53B3C3C260DF6E9EFF003C319AB1500DB5A8D6AC6CDF88D880407167ABDFF10938D7FDC711EB98A7724977D4C60002C238E359DD44FC30AC82E76D59F67FE1E02906E1DAD071ABAFC87E587718E04EDEA7F3071AC6CA23E1820E04EDEA7F31CF78BFEE381AFF009F67CA0E04EDEA7F31C15ACEEA27D630D67000800333FDA3200161071ABAFC87E5846331B5B59BCDF6F238208DBDE797CFF4C10462A722397CE7E58D9258B9DBCF940C0DC3C63DEFFABE5FA6304B926D030B353683BDFF0057CBF4C20A5BD4D00F1FB46A5293A0FA7D20EF88D9447BBF4C325CD2C43D352C0F9341C09DBD4FE63626A426788CED1D6F31F71C21316695AB12696FB69A43BC3CA4283148DF9DCEB5E5D2B0AD15224907736BF436FBCDAFEB87324D5B6A75773E1EB08E250928500966B53EADB8E5D6E61522AA1485893C324DEDE5BFEEFE7187C491C2A0683CEBE86D6D0FA56E6C924AC17F9EB41E76BF36E557893D16A3294861D4A7822012120C5B9C1F2F4893CCE365E21294BB81F73C9C535D7C637C160F816EA0E97EADB6EE5C9F08B7BB19D22EF693DA4699D1D94053EFE6D9830FB81092A296E89D4542ED36F020F911CA71C5FE26F68060E5772998C262174E261C4052C59DECDE05E1BF69669C2483325A820A12C43548550F5A1AD3D5A3E84BB5B798A3CA72ED22CAD29A7C972BA569B0D98417051B45C848313C6920C0277C710EC5E07F5B3BFD426CB3DECF984CC2760A3C26DB0D686387E6D88EF2628514C5C171527AD407D457768F33BB46AAFAF52565129292AAB45434A4AA088485A504883262FF00AEDE9AC2E0D2AC0042501FBBA0A5DB571FC987FD9CC44E953A584ACA7E6B0E55A79D3C23C43ED37275E9BD63995238DC043EB294910077C4A840023FA8444EE4E39DE33098AC2E294A05411C44EAD7AD4B69F6A8B9F5F763B18676070CA5AF89540A725CD69D1B9B03B5A21AC9719535434A98AA52BF94BE1E3E10B32B49491078C2B844891BE169F998EE38388021245C39A6ADB3C74CC666585C160D454949570FEEA51C07A6AC0D7C1E3DB0FA3E3D9D329D17962BB79D754210F6608074750D4A095B0B48553D639C047178D452B1C690003E13071CB71EBC4E331F351256B51E2F9C970250351C94E1C3E9E71E4BF8BBDAD5CEC28C0E0A6148477826CD0AFF00ADC45D3F2BD022C1AE7531DE6D53AA2A6ADCA87AB1E0A6D4496140A6C89809B2A6C205EDF0117CECDE5AA011C49A06AB0A93ADAFD1C8E4F4F21284DC46314B9CA2B254EE5CD8FF0000B374D23D7253B5B5622980667688113F033EFF004C78E0CC67A927635FA822357ABF8C6AFE159A2FC558E29E1B23C6501039EC6FB5FF0063092945449DEA6DD2A5B9FAC3D41241E5AF2FE291B0656849016B29B192495F43D49C6841208767F7F785E5EBE1F785CC51A5B0A534845544151584A7BBF4E2DE77F59F5C22A965C104BEED41A59DABE118980167D5FED1CBD5F4AC8E17561A3B140492262F71D4F4E9B5C61CCA96B5800034F0A3EF6FC7842600028290DCBCC2848269CC9FEB93F0249DF9EDE677B893938659AA83026BCFA7DCFA40C0B3D48861ADCE12D9512B4003A293CBDFFAF2F5949382510004923EBE3A8AD1BC8C6CE588DEFE1115ACD56180425693C57FB43DFB19FBFADED898C2E5466B7125C8616B1BF8B75A38EB0E30E81A1BEF7BD6BAFBB3D6119AEBD534490B1239F17EA7FDEFD266B0D919268871FF00A7DF8EE75D9DF77CFD22019A7680E3BC27BD1E12A89501327E1E9CFEEC59F05D9B26AA96C0B386FB36D5FB6B0777CFD3F9881667DA2BEDF143FC37BC2A46D6B4FE9F218B1C8ECA099FB500D350DE1F814D2918E02FF7F7E1E7AB188357F69D52D903EB0428CCF8F7DFCE0CFE42062C380EC8238085201234E1B3DF9D7C0F331A9412086E5BF37A4466A3B53A8850EFCDC9895DC472DF7E973E589A95D9094A1FF4D9887A1623621ADA9B96A6B00429ACFAE9E2FEA4F588C661DAB55254909A832267C7681B400679C7EE43F4762D0A149628CEC923D5EBC853A42F2E5A941EAE7705E9AF4AF28655F6AF58524FD60DF9779B7AC91B9FDC9C3C47629240694073236E82BE5E5587694AC0DD46F6A372B7E00E708DCED76B1929E1A851E23FDD3B795EE4ED3CBDE70DB17D8D290C9941F9279DED51A96F4891C3C92B49D4B5697F77E4C5A1DA8BB6FAA640FE793B48E21C88DE7D7A479E20315D8A98A04F766D6E1B79529ADE94AD1996330A482403CC5CBEA473A5BAF3690B1ED06E32A4D3BAAEFDA7C8E2638A3BCE1823C60786373793B75C404EEC54D49E2EE94E2D43AF8066A306671A38786EE95296183925CEC5B5E6D5B7DE2CFD3DDB9E48E1698CCC269E956414D3059924EF2EA6151241B9B6D30311388EC8E2405AA5A4A2616E13C20B35689B568FD68627B058A992AAEE28E2BA1A31A1A369FE2E8CC72DD01DB3E93CC34BE7B47415B97D753F754B5AE1696FE50A5A49E26E65E59716A04C111104918A8636466BD9EC6C9C54954C4CC493DFC90E0625BF6D6825F00BB5DA3A9F65FB408929E098A6B1049763CF42093E25F9478ABDBDFD1F3DAAF65598667A83B3EA7735468AA95B8FA9D692842D968952C2528254F2A0950B09B6DB01D3BB1DF14254B9C893899865E210405495929035B9A59CF3A8A878BE8ED1616700998A09243F7AF5E4C91D408F36F3ACAB30C9730A8A7CC69AA696A92B297296A69DD616DA84820075292A122E403D27618F4A647F127013D2841C44B51200AA83027406AE39D6AD416890C2CF4E264A149140FF00EE38255D520BA4528F7E7A321AA29540B106F0608E7F1DBDC0F3838BBA332C2E6684F76B492B0E450DE86A37A781B8A3484AC22A790D507602E06CCC3CF581152553C46E37BCC721FBEA00368C4762E58C190A019CD2ACE3F8A7A9BC3A565EB9041524A5EDB10DD5AF5F0EADB03E39284F90B88E7FBF74618FEA945E8E0EC7CEAD5F6EF0770B735D9830A7AEB1A5D72786F3BDB6FC3F5C36993BFE5A5A967B79D2DCA306490E49B72FE79C69EF3CBE7FA6102B0BB69D75F01B465324AAC7D3F983BCF2F9FE98D90B2922AC3D9FAC68B41433977F7EFA41DE797CFF004C2BDEFF00DDE9FC4690779E5F3FD3077BFF0077A7F1041DE797CFF4C1DEFF00DDFF00B7F8820EF3CBE7FA61354EDFC2BF602364A789EACD0779E5F3FD31AF7C9F6FF88DBBBE7E9FCC6C439B88F9FEFEEFD4EF93B7D7F1EFE8777CFD3F98D9DE797CFF004C1DF27DBFE20EEF9FA7F31A1E74880047BFF7F77BF1BA5616682DD75DEDE1D3946C257158DB5D23477CAFDC7E584D6B147A0D2F58C19453737E5FCC1DF2BF71F961B4D582181A8F7D6DBFF9C777CFD3F983BE57EE3F2C342B0297DF97A467BA3CFF00F1FE63053E411336BDA3DDC87BF7F9DD25AC121D85FD9F7B987B87965AFA736E5ADECFA6C291BD1526264F283FAC18BDB96DD670EE5A81D6A40F41F6DA1ACF0CA524835A00DE1D7DD0DE1E32EAB090EA9C850013E76F416DB7999185E6CE4CB492685A8747E5E8C7C7A9232E1398F01351F5E54EA75B0DCB830EB398AFB9694942B69046E4C6FB72F4B1D84E2AB9866C25950E2B3EA69F5B830BCCC28C2A4A8A5D22E35D4BD3AB51A879C7AF1F46476448CBB506AAED873A60AE9F45B0C8A05BA8FE5BEACC987183DC2D4385CE051495168AB84DCF0918F2C7C5CCF138AC6617042710A9F32810496E1525DD999F623560E6392F6F730E14A422812E082DAB114D7D1AB1DC8ED0F3DA8CC01AA5A897C3D505D24C12DADD25B1E8106398F9E3A176170A0612495A43290928A6C056803BE963778E32B9C66CCBBD89AB35C6BA077F60C74B35CB08FAE665560F829928537D09524CDCF9CDA37F3C774CA25F1CB94959AA8B35ACD46B7BE7164C94913D079BF4ADAF5B1D9ED1E52FB4464FDFE7C3374B453F5D5A8A951013DCC004AA204EC27DD7225AF6B72A97230C6680012851240D838ADAD4D3C418F4B763330E094002FC3C20279F21CA9A56269EC6DECF755DB57692DE719BD3B8D688D34EB1519F5538DA836613DE52A5B240539C4E37C2AEECAB732236F36AF1789C4632749940A8A14A4F059DC900BEE967E64342DF123B649C932D01C0C4625244B5F13997C20713A6B705803F68F6FB5867B414D449A4D30DB6C65140CB3454397A385A6D80D212C38E0042412E1471EC08E66716DC932698A4A3BF509D36A56BE009245481A03C2081AF8C790B3BCED59A2D4A2A2788927E67A9F0346B68DBB88A7EBDFA948A6A075E2E97B8D5C615207F5904824089237D85F7C749CBB048C3CB0A609006C03F2E5E772358AB8C331E337B7315BF95A8FE74FA0166912C8492424889EA46DB7BBF1EB8F9E17600F100F4666EA7C5EF5F288500A8B0ADE8D7F1B53F8BC735110DF88CDE4498DCFF00BFC6C70BA1249568295677A7BD7A6B0F91FB46DAF99F7E3CE1BDCA869BB2943CC4EC3CF95F0E048E20DC26F7624BF4635E45AF4BC2D2F5F0FBC3555674C5288E3038A440316E460413F779E1EC8CB5534FED25ABE760CFA3F37B429107CDB52D3F8BF9824837B4CFC763F9E2730D92A8B320D69635E9A75EAF04416B75630DECE01320F8A36EB16F96DB6E062C586C8944370D9AC1BD9176822B7CEF5835E387881B59663DE27E079F4838B1617B3A5407FB64EBA8FC0D18736171522A9CE75F268882878A839C5278F6B7207CE2E2201F8DA32DECD93FD8C7667B6946D3C2EE758752120EC0EFE6FE240F467115A671DA72A15E3277FEAB917E9BDE79F2EA316AC1F66C3B775E36D6BA1FF3CA1D7766EF417A796BEFC62B2CDFB4B528A4059B49B28DE3AF98B1DBAFA0B7E03B3A97004B1B540E4581F7B883BBE7E9FCC40B31ED21609FE6AA6FCF96DB93B0F889B8E58B7617B372D828A45A800B026DF6A3F283BBD5EDCB7F1880E6BDA22D6A49E3322608519F7FC7D368B62C382ECECB485120076D07261EFCA1D4990662598902DB68EFD6D5B5DF588A54F682E03016444C9E237F74DEFE9CBAE25E5E4726AE0519E801D7EBF5BC3B4607899C585E94D2BCB93B1D285E2335FAFDC25242D5378854FE16F8F94C61F4ACA248E2F901B7BFB5A9CED0E118124B3160EC451FA5DDB5F1D5CC313DDA0BB1F6951E6B2239CF3E43EEE7B3E4E572831E00FD03F88F62BE6E9182A5BA51ECDA86EB4B6DAC256FB4170714AD5D6E6639DB7EBE97E507189995C851AA1236A8F1E5B5FF00C49613046A120B16D0D3C079DEBD6315F684B93C2A23A78B7882791F593D37C6BFE8586994084316D05CBF5FA91E10B4CCAD4BA10C3A16D8B57CC5DEED0A287B45524A8A89266DC47ADA0123E406D1CE70CB13D97C3AC1696914E87C75E5ABD9A239791A89A21C7420F236D1B6D46D49053F692E0825C36123C4444C6D1D3AF2F7C62BD8AECBC9493FED8A93A0B073BEFD234FF465A2E867DF939DBDF9C58DA1FB69CFF21CE69F30A3CC5C6F2F60CD7B4A76CE050F04052A41046C07AE39B76B3B12314852E54BA804D12FE4E29F810DE7E171185FFA61418559FC3E97F5DBD79F679EDE721ED4B4E2F2B5BB4EBAFA1427FCBD4703BDEF112A52781C0526C0C883B89F2F2C76BBB3188CA718BC4A50A12D45426F0F12598302E19DC81EA4BBC664637168042CA9C7ED279173E82A5FC6C6211ED05EC5FD8EF6F34B53A86A6869B27D62FB6E062B2999534961D424A01532C8432AE30126E39CDC9C55B29ED563F2E9B2A4714D0994AF91456A20825ECEF4A569B522F3907686761DD066B22614858531B17A136F4D2D1F3FBDBE7B16F69DD8B66B5B555197D4E6FA790E38B6736A740290D4920965A0B518102FE64ED8F55FC3EEDF2E709427CF73F2D0A80A0E4588B5DAFB4769C97B41829825FEC4B0058904F3E95DCEF7D7A8A288BEB7FBB2A6CD3102A4B80B6A76491C3C0B852784C8902FF7F72C56792B1F2E5F7530120025883B0D2FE4FD0459B1F8A938896832F84D3420B16E54BDB61CA836B596BEF254BA4506823ED490663A027D4C6E27E0C462D540FF00C5B9357CB66A444A4A6BC49E2F13F57A587AC25356DB84B1C10F3261D5DC8513B1DA3972DF0A8C4059E151A8F7A795F96B0290400480CAF6C418E7892398FBFEEC3842B436D3DF38D638E34FEFF7FBF8E09EAE1A055C69A8A751CAFBC2339C800549F4B17F4838D3D7E47F2C35756E7CCC36E156C63052A6209F3DC60E23B9F38D822EEE36A8FE63193D4FC4E073B9F331B700DCFA7E23893BCDFAE14429C313516AD5AFF98510002075BF898E64F53F138DE178D88544C920F52795B9E08233E3FF0057FEEFD70411A9C50312A077DCFA6364AB85E8EF046B91D47C4632A5B8666DF58C100D0C71C69EBF238653161CF0BB9B9FB0F7D231C097FB69F9F58389279FE1F7E1BA95C2D4778DA3153894F39BFEFD7EEF3C204804026A6D12B8295C52D4793F3D5AAFB6FE5025C4AA6F11D7A47FBF21E587D2940DCD2846BE1F6E4622B152DA6B58F139A795B7F1F1854CBCA553BECB07F9CE29A09DA7838877963D1336E97E8434CD279972CB280614DDF6D77F41B44FE57212521C3961CEFE96BF90DE2CAD11D9E56EB3D6BA7B4BE9569CAB733CA965B7D2D712BB94214D97CA8DF8470951B91B475C714ED3674B9054429E8B7AD281CF8916B78C42F69B132B05879B3967FE98A21DB89C5F9333B7F88FA71D1BA1F2EEC7BB2ED2DD9BE5DDD8464D445DAA7109E15D43B5A94542D2FA8789D2DB8A504F78A5445A0638263702ACFB30398CBE2577B31248539E012D4051D99DAA68EE5DE3CB9DA7CE5599E2169E30424B30346A016D19A95B13D280ED12B920BBC3037DADFB8E5F9E3D25D8BC29461A44B218A529141B51C7A73D0EB15A929E250043F3A8FE3AF5E74E9EEB4A9A9A961686CFF97593F58322641F04F337FDEF3DA3072132C21668CC40B6C4DBD0B3F8D22C980024A9045DEDD341A1DF5ADB9F5AB3EECC737ED773ACAF43E594AA76B5DA81F5D7D081C2DB0161C27880013FCA0660824CC620BB699949565D352A58480929248A82CD6A12E6836D869D3320ED18CBA6226B717082C97672CC5DDEDEB4A47A59A6F46699EC07B39A3D21A6BB953ED530FE24EB690971C7970E14B8BBA97C2A2A0029460898031C3723CA5588C54C9BDD90952DD2752E4FA1BB18E71F13B3D9D9BCD413314A751700BA458000025B4D2BE51535766C336A779E71C2D8E2528A42A2E144C5A01B827F738EAF80CAD322585283300EE0FDF6D869AC50B01835291C641552A1BC286A5CD6ADF688B5255E699857D0E539334E543F50E16D4B00A8A1054028F1198F099EBE9BE13CC7304619052080002545C0B57EFEC98DF1BFEC8370C0B1EA79EF1F44D599B06F8A1409B990403F01CBDC7A63C0F2704EDF2D3A1A7DF5BD3CED570160964B0B33B9D6EE6F5D0D623CFEA0201957853360A173EA7A749F81C49CACBF8BFB0BAA83A52A08FB3E95AC3A9648A58A7EEFEDE2119BEAA5B6550E0000330AF97BA44ED89595969424012DC9D83F37B86FA1BEA216439249E515C66DABDE723F9974F15F8C017FC081F941C59F28CA8A93C4B450B0A8634B796AC2FAB43897AD36FF001EFF00115D66BAA9CF12BBEB9FF501E5B4CE2E584CA40E1025D68CE9D5EDE15BB7A38522B7CE756BA8E187C5C13F6803378E7B9FBA05CED68CBF264A81E2410A1A33F859AD6E45B4822ABCF357BDE287A08B9F1CEFD2FF00BBF5BDBB059225212D2DC3683AD0FB7E71B702B6FA7BD62A9CE75629453C6ECFDAE63EE9B7BF7E569C5A72FC88DC4B6DA9CEA3EA2FB50438929A07A359E807F80DE25F578ACF39D5890170B060C9F1794DA0DA3AF2B62C786C9549209960100B16AF3EBF53AD1E1D3278801CDEB4B1D5F9457F5BAA42B7546FB99F5E73E5EE3CF13D83CA8A6BC35A0B0F7616D3D236128AB88814A01CBAD7CAB110CC352A49278FDD3B41161F1B462770F8166052DCF98661AD799D6D1B270D3174483D4317EB703EBADAD0FABD42924CAC9898FC7F193D3D6EF84B12EC9B5B407C7A537E91399760560FCE926C6FD5E8DF588ED4EA049264C0E809F95EC363E5EB8CFCC5E9C3E47EDB0F11B44E8C18FF00800598354B02FBB56F6EB0C5539EB64595224DCF53B6DFB163E8BCA510DCB51CEFF78729C0A890C9A0B8E5F4F426196A33C499124474371D2F3B1BF3FC70E78D2039142D473714FBDB9D2242565E6C12E59C6A1BD2DA1DBCA10AB3D42448541E927EFE7D7E1E9889CC3126590516AFBE836A6B68792302A4129281522A40617D06E7D884ABCFD06FC5D058FADBAFFB88383098E5310A074151D37D696894465E1403A59DF4E85DAAF4BF95291827512533E2DE2F226C67A72F8EFE5896FD5CB2E4ABC1DC96DFECFF00430F539525491F2D1F6E9A31F4DFC21C58D4C9060AC587F76FF1E436F7F9E186266CB268A07AD3DD8D1A8FCA345E512D4E38452C680FA5AAC34B9B80F0A1DD48B7CB6CB5545A2E1E2212AFB7C3732418100409DF60271B60B0586C64A9826F0BB7F7355DFE82953E1568565F6764E2524109046E2F76F5DDABB3B45E1D90F6D59AF65FAE74C674CD538DE5B515496AA9A4AC94A8712199589200054771CE4440C716EDF76330D8D973BBB48527866592E4163C24B6DBFE1A2BB99F65F825CE32D20AD0C50281F7A1342351A57768FA23D3FAEE8F50E52C67678174599D1D2B9421A70143CA0CA0BA12EA0C24A566E2649B6FB78D732ECC8C1CF5492C67485AFBF510C500A89438B971CA976D4728CD26E232F5A9402801448E86B5D1B5EB09F3BA4A0D4794D56599AD15366F4952853672D7D0D4A12A0413DFB8951E7C5BDEC0488C2580993707353370AB5226CB219692A2363F2DAC7D0F8B7C376DF1386F912B5914043B352CEEDA72D6D1E457B4D7B026579A22AB56F66B1455680FBF9A652CA09EE54428B612A5101CE2B93C22D231DCBB19DB1E2C47E9B315AA48584893314494CD61F35E8963E7E11DBFE1F76B55994B28C54E60867E321C397B93F6A18F1933ED3FA9346E775392EA262A68D54EE38D82E34B4F1C122764F9441FC31D7E4665865DA7A58B310417717BB01D2ED1D725E270B8948326625445569E214DB5AF3E66CD0C2BB2D4509841D9569579C1B89F3E989595325AFE64A817A82FD5CFDABADA14490A6E1ABBF266BDF6A3F3318952809260752001F18C48A1429C25C1201FF27AFE6374A16A0FC247DA39E251124C03B18DF69823A0336C693663060A7DC6EEFD5BA78D1A1B4F42812E0823F87FA3FBA16FEF3F03F9E1AF79CBD7F886D19A386F2E7C41FC4E0EF397AFF118248B07F168CFC1FDE3E1FAE0EF397AFF00118757FC7FF708E0C5A140CCFCB0ACB983E67F96D57EBF5F778712412412185697F17B681B9BED0614EF11FF00210EA30592220F5FC3005A4D8BC11871ABAFC87E58CF1A77F43F88235B8A55AFD790FCB194CC4837EB4351FC7DE0626C1E35F1ABAFC87E58D57352A71C4035BF1BE8C5E33C2AD8C1C6AEBF21F961B19A80402475766E55FBB46785550D7BD469071ABAFC87E586E66A058BF4FF00107028D924F484EFB91C337DE4C7E42DCE7D3E1ACBF98B8AB5CF33FE6F13B9620095338F67B59B938AB8F1BF5E1A58292A83C3C88048313E5FB8C3DC3AD0A04715B516D4D9FD4DB7DE131692A9C78773EA691CD3D6770F21C68F12B8836122EA5170F0080249B9B002FEEC577B418EC361A5AC4E9E94382CE41AED7A7589AC03C994A2B7400E5CD2EFE4C1EBF48F7A3E8E6F6776345699A8EDAF545377CBCD508569C66ADAE175954A997D496DC1C6012B064A40D88240BF99FB5D9B4BC662266130AB3314E4AD601646A2B6214C4339357BC719F8979E61D1226265CE495F0AC04822E6FAD68EDBDF471DECD635D54CCBEF39C6A7F89492140C22E52090792488BFA011675D8DC377C959989F9924740E59DB9D39EBBC799F2B9B37158A9EA98E47112092599F4DF537D183523A8DDA1E624878070126E52140F3F2248DE31D8F2859C36265A00F95C7CDA50694B8DF6F4B3484CB04592CFE049A5FED58EACE66E56E6598D3E5F4E14E3550B536F250389416AF0B648124788CC8F59C75D562F0E8C119A5680A12DDC903FB7AEFE3A43C54E4A40F983FAB83B0A57AD393476BBB3FD2947D96E987B31A869B5EB7CC9B0A69E570F1B6D90AE6652921856DCE23CB1C4738C5E2339C6224CB0A5E082D42600ED34834622A38540EB51084DCC57292784B91600DA8F7E7CEB7E462ACD4DABB8D150D3CF29FA97D64BFE22A83C44F224589D85A05B962FF009065089694AD6809A07040B01D03D1EBFE0454C4AF309892B06849AFF9F16D7A308AB4E64F543AD51D38528BEE04F0A012A32A8FB224989BDA7CF699EC7AB0F8794A485A41092087A58D05583EE49E82D137879587912C82B4A484EB4F4E7AFDEE3B71A0324CA7B39C85DD4D9C3487330A9642E8D2EC071B54113C06542E41F1016EA231C4BB478B998C98B9387515842889894870E5CA471015E6DCDF58A8E72A0E4CB75036367AD2951B1F0E71EA36659C3664717226EA36B409F3B728F80C79D70B8304FED776B8DB6AB0A3176A7A4457027D9B7BE6F107CCB3B4240FE6753BC7A73E53EEC58F099792DF2D000006A907EA6F190902C22B7CE73C412A973ACCA8C7BBAD86E39FA462CB85CBC10029034FEDBBF852E06BCF9662B7CD73B6FF00E6708BDF889B6FB6E4F945FE3369CBF2F649E14072DE7B6D7E5CBA64122D1566779F24154BA45CFF005284EFE7602FCA716FC1E0520A4140AB68C4B7416FE3785E2AACE73B4A88FE612255038CDA796FEF91E96DB170C065E9FF008245051ACDFE75FB42E00141158E739B83C443A7983E237F2EA4F5E5E9B62DF82C024B3A053560341EB6A783C390C34A569FE7D8D22B8CCB34E22005A8913FD47DFD63A927DD6C5A3078364FED1A5C0AEC341B523632F8806A1DF6AF8546B6B59E21398E668F102A207A93E47FDF9CDE263139230C90015005AE1AF571A3736B885A561D45882E353A9D0F97D1A2179866215C30AB09E7FBFBA0DC937C3F972E5D59228D6E4FF4899C3616CC1DFCC56C2F7BF880F678BD556A493E283CAE679F39E63D3A838708968AFCAECD7FC79FE22730F82040743125EBC98F2634B7DA2355B5A2D04F393227ADA39F2F59F5C131080C486BD757F7FCEB12F84C210E079816F5B753E42D1CAAAD4927C4444C5FCAC664721333CF081084A41201B87B52A3EECDAE9AC4A4BC3970C97DE82BF5D343AD7AB2B95A0920A8DB7827693EF883B911E778C375000B00DAEB57DE24E4E1C16743BEC2BF47DB7E621ADFAC499B9F333063CFE07CF7B73C36529CFD044949C20D45069F9FC56D48697AB120024DEFCC47BE08F3933C8F48C359C0177AB3372B7958F9F3112D86C1214DF2D587570D4E74E8FF00442E5724EE7AECAB7C41836F8C0DF0D432052A0BB301F514F7E4F0E0827467AFED3F47D377F268D06B5226E62FFD5D3ADBEE9FC7092A72C502BC341CBED00904101E96A066F0DF95631FAFA3FBA0F3F10FFB8619AA6AC9352DF5EBEF946E306B0EC0B1F3FA1F6F7731C8CC9C410A6CA890A489E29DCC6F262660C1F29BE1D499D3112661130A69A7FF00AB4E5BB7285E4C8293B2B6D4EAD7D6C29E178795E7EF32FD352125448E2124CA4C05483CAF04411E5388BC2AC4E4E204E50997FDC1C6BBB8BEBB6B18C6E0FBC94A253522A6DB8BEBAED6D35F7B3D853B48675CF616F69872A0AEBF43A9A04AD654F2BEBF54560152CF11802D72074DA3C87F16B048CBB3999899008566055DE84BB204A0424DDAA7616F5E19DB0CB9284CC1DD8643906D777D8EB4D43DC388EE73F53DD17521C238D2D917327853248827DF706200E58E7FD9A946609CA5FCC0115218D497FBB694B6B1C52661889A43317A0F1AE8CCCF7F5668462B5AA94BE92E250EBC9E14154149004282C2BC2AB75F4B5862CAA966594841E14A4BB815A9A310C7AB1357A6D3B976327E048EE96657135412051BD5998E9568E977B41FB33E8FED432FACA9551B0CEA1085A9AAC6DAEEC2DC8241212128E82E637DE3172CAB1B3414A16B570822BC44B5294EAD6148EA9D9BCEF1699A850C42810DC4E7881D0821EA2D7E54263C32ED47B1DD57D93E78E51E7D46F399754BAE8A2A94A49404B64CCF76088129E7BD84CE3A9E513E624242A605022F4A027ABF9B78D1FBC6579948C6C994A03BB9881F3077EF1D83F2D49FADE295A97EAC3C94A877F9783B240494FAC4AAC79CFE38B74B99C49705F7B78728B8E1A6CB5212A291C400047A3697BFB10B6A54A0D30524160825A47347F749DCC99DC635984D1CD4DC56BF6D3AFD90C7250B4860C79ED616F523D211779E5F3FD309C45F723979983BCF2F9FE9820EE472F330779E5F3FD3041DC8E5E660EF0F43F1FD3015F06F5E434EBD616932921DC0F5FADF783BCF2F9FE98C77C79F9085F813B7A9FCC6D6D60CCC8F98FF007C67BDE6DE03EC0C1C09DBD4FE636F1A7AFC8FE583BDFF00BBD3F883813B7A9FCC705606D7F97E18D173096657A7F1070276F5309DC5EF3D2E768F86FF00BDF6C20B5AC10CA6E97F1FB78C1C09DBD4FE6908DC73602FD3F7CBD39DCE1098B5503B3BBB787BFA343E4A10003C21EF563EF96B1A7BCF4DFAFCBD7F71867DE2FF00E461544B4D5C3F5F18C915612B4B0A00A5E07895BF08489B1DC7388F2EA313D96AD3DC4E2B2EC9BF817EBAF421A821C7767BA584001F9B6FCE8E5BCABCD653D638D52D496480C01146540492490F44DC93CA7D4621F058D299D89055F213F292435C92D7F5D7AC43BCA973E519A38A73FF00BA384B00FF002B814A0A3B51E3B8DEC2FECA99AFB41F699475F9952BAC68FC96A13575EFB895772BEEC77E80788A64171B22C48B99118E09F16331C415BCA9EA425D99277236BF4FF10876B73C9383CB664B90532D66529D8D5DAE37F5BB347D2566ACE459464747439486D8A2D3B4EDD232C3490DB4A84A5824348E149BA249E1266E2F3344ECDCB993CB4E05666A5C2D42CC28F7771D4D58E823C2FDA2CCF158DCCA6056215313DE2800E5AA4EE49F7B33F5DF54E6EB8AC696A5292903EA4493BA812E45CEC771CA04473EABD97C0F77317F2808243B01536FAD35DE25B0525326425412028A4540BBDDD869E1CEAF1D4BD4AA79CAD577854E3AEAF8384289B1302C081CC63A2CB97C3502BEA1ECDAD7946B3A62D36253F97DF5BDAD6BC4FF0046E87C974851D46AECDD095D654252BA143838B8080428F0F885ED123716DC6196267E2B153C60A54C5140FF00ACC4D033A40635714A7A43513660209516FEDBD77E5E3466F3AFB5BEBDABAAAB5B8AAA4F0BD2869A04029481C205B6111B798E47172C97279328213DD5989E20EFABD5CDFC9CC399438CBABE635777018FF9B7E628DA8CD5FA6A9A879F052144428F8F88AB6481B9E298117BCDB9DA31F3118390C964324D2CE4793EDE35AB449A0A254B53258B3123EA29A79DB578EC5F62FA169DA655DA1EA767B9A0482ACAA89E07894E5D1C7C2405D9CE1500A4911B5B1C6B3CCD2762710BC2C89C5D4A214A497084ED7209507E8F6D62B3996216569E0511C2EE428B2AA34D18D2C1C72BA5ED4B582AB2A4B752F0352DF185F01E068B51FC901B443638500030395E0EF25906070E129946582054F11E2249A92497275678DF2C96AC4CC1DEFCCEC2D7DA9A7BAB47A7398E70F193736EBBF9C733EA71C070F80424B82E36236A353EACF488A880E6F9CB8024827C455CEC4FEB6FC37B59705824A883D2B60343D6C7AF8411586759D3A4AE144EF107D79DBAFCB16591854A00702D717DB4E9FE5E8456B9A674F447113B9224FDFF00B988E718B3E57864872A0030F1F3DF716A1DA08ABF3CCED7E205666F249BC91B7975361E87168C2E141F9A805399B8F5FC5E1C0B0D22B4AFCDDC528CA8AB7BFCBA1E7BC7C3171CBF0A1D23CDC374EA36FB5E1C457B9CE6AE78BC44133CF9413E9713B47A8BE2E183C325213C4028D6835DFC052DA6F0E694F567AF2AFD6D5B30AC0AAF3270932A3B9B5F793E5B5C6DCBAEE6691204A161A786DF6AECDCE24B0B28299D2C28EE5F99DEFF00E221D99662ABC1379FDFEF97BB0BA789C7FC6AF67D1BE8DB8D1844E61F0A82E05D2CE5ACFB575B797488ABB5CB502788DBD4F9003CAFD473F52E258357B166F5FBBFA44E61B0813C2281CD9BD7F00F8F363AAAC549B9136206DF21E7D37E4230E25EBE1F789B918349BD5FDEFCBEBBD63B5B58A004DF7D89E73F8FBAFB6E71ACE7E17D1EBE9F8898C3E112970430A5BC1B9F2209D22355758A13722D37BF5F311BDFD6D866B24853F2AEFF008689195844BBD850F9FE34DACED76572B172649E7FED37EB1CAD6EB86EB511E3AD0337F1D22570F84492C19C5E9BF93D18E8DF46B7AAD706E4F99BFEEE778DE2791C332A7B519EAFEED5F331232B09562001FDC47E2A3D37F16A76B166209833FEFEF9E7C8FA0084F3ADDE9D29E147B5BAD624B0F87482DD34D6A7ECC2D4840BAC50E7E637FBF7FDDB0CD4585013BEDFC7AFD8B93246C0F8FE77FF00309CD5B9D499EBFBBE1B295C2D4778D3B87A801B4A0E9BC71F5959DC7C0C7E1FBDEF11868A5851F95C0AEA7A7DA36EE696F17FE5A394E6A9A675A6D6990E104C9FED20F4EBEFEB6B1CA56384D6A4100877F3B4389785E22549B25B89CEE5A9E76630B9FCF1B72AEAAA026F4C1A4A4F4E301260F381F08C3196BEED6B06EA2C696B8F56FE443D9B81FF00648201E204A74A01E8F53FC523D2BFA35BB42A9A3ED79DD089528D26B3656E38893C3396D2B8F24F0DFF00A86F1EFDB1E68F8D5FED6265B31EF2CCDA33B120DF61B3B35B91F6DB2CE3C0CB9894022571F78453767A024F87D80F65AA3345BC8A9784FF0025F2D4F203BC2D816E97001F2BE39B766E58972C922843B7A9DFABBD19E9531E75C5E1409CB61AB721EC6C776A421CD1EA7A65B2CD538A692B0141692641226D11249B7A62D2A962600B48D6A0D486A539D397DE22F184482962ED6E56A6B7BD296686CCCF35A814BF5653519790422B090547CF8638F7B46D3D4E24F0321226898872B49A2743B3E9D4B1D0522C790E3A624A4034357B7997B5AA0F8C50FDA2F679A635E64EF506A0A269E67BB7050D52920AC29625644026CA20448C5D7018B9D2672552C711769D29C86164D5E828FB73D23B6F67F305B25894B70B58B9E7F4FB3B478BDDB876059AF66B9B55D6E5090F644E38B500784008DC40512AE768131E713D0B0B39D20A4B12016726BB5437D368EA981C72D68055FB8332874D68E695AFDC47565F0E25454567854480DFF6116313D4CED874B2EC742EDE7FE2260CC33D22E08A13BFAF43FCC2793D4FC4E348D7BBE7E9FCC127A9F89C10777CFD3F9824F53F13820EEF9FA7F31CF12873FC7EFC11B253C2F577F7BC1C6AEBF21F9608DA3636A55EFD3A79E0823671ABAFC87E58208E0ACC1936E76FC8608212AD66E67D07EFCBF7CB092EE3A7BF6FFC9089D5ED373CC7B87945B084CD3C7ED0F93FB4468EF0F41FA7EF9FCB0CE1697AF87DE32EF9A292D287F39653DD1BEC3EDFA0E107F330061EC99A65C998016241A72A8FE3A9E6625B0D2C2A5AA81D85478B136D5A96FB5BBD8FF65B9C76D1AFF21D01A7C91F5EAA6C344708E26D252E544F14720A1731EF99A066B982B0489F3662F825A41516E4F76E61ACCE763152CDF1A8CB7BC9C5026CD5823859B85835D8D4695B8BD23EA3BB30ECA329F679D0995E89D354CD53E6E9A563F8F54A10038A52909704AA24C82B1E156C6D36C70ECDB1CBED04F5E317F3617888C356DC2785742C4B91AF3F0F35F6DFB5335026C9E3539E20456C5DBC0023C2ECC2346AFCD29DC5B6DE5CB3F554A54AABB93C4B899337FB5C5E5E800C5A3B35844210AF943900696736AD1ABE768E13865FEB71A56AD5679EFAFAEF4B168EBBEAFCECB74E16A324F1269CED24920CEFCF99EB8EAB91E1021D40073566F3FB8BDE3A409625E1D054588143BBB303D2E5AE2C6231A474F36E29FCFB3B4F1B490A71B045844C6DE839183169C486366AD2A1270DFF0055640E96777BB8B546B1173C025459C01FB7C3466A8FB08AC35EF69CA0FD665A904D123C14C018080278AC049B89369BF3C59727CA6505214AACD5B152CBD48D2BCE97AB54E911FF0032A610372E0B7E69C9C9D7668EB56679C3150B5666FD4AF89B51286A1504A8909E703CCC6F36C741C3E01329085B86E9771B796AF1278595354A1292975173C2E03B03F40C6CE79C5F9D88F6655FAFAA9DD5FA9804E89CA54D3956490429464538213FCC82F2520900FB86397FC46CF93972A4E0A59271789E21264DB88062B3C4681857573477A95F1330A2539D010B5731403F9E51716BCD5AE53D4AE9A8DB0CE5D4AD7759751A2020B696F84ACC40160177124C9DE71CEB08927854A24CC51F994CC5CD5BC2D7D3668A8E2141732D47A5F91B73B56DE71D1BD55AADEA9CC2B180F29D430A90E99F171924A6F061311E62F18BE64E966A1040AF31E5E0E6D5A6F7EECF6010532A610FC676B358D29F4B47CB3E3F3111F6BE0C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C1041820830411FFD9, '1', '2021-10-06 01:15:47', '1', '2021-10-06 01:15:47', b'0', 0); -INSERT INTO `inf_file` VALUES ('add5ec1891a7d97d2cc1d60847e16294.jpg', NULL, 0xFFD8FFE000104A46494600010101006400640000FFDB00840006040506050406060506070706080A100A0A09090A140E0F0C1017141818171416161A1D251F1A1B231C1616202C20232627292A29191F2D302D283025282928010707070A080A130A0A13281A161A2828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828FFC200110800EC00EC03012200021101031101FFC4001C0001000105010100000000000000000000000701020405060308FFDA0008010100000000FA14000707A3E3F659B5F2B3CB1B171B57BAFA2C000BE1ED8731AFC752DF3F2F2EF249DF79D0000A465CD59E5ACA5BE7B09BB71441BBB943DC0017447C95DB0D662E4FD0192237F3E17E8600039B8AF556E579647D0B60807A3DA49368003D7E7AC1A5B678CA3255081A4AEBC0007AFCF5834C6E8BA3DDF756902CE39200034908796C661E82C04073E003D755A4B2FC9F48A34CFA172404152C6F415C4E175B9BB879F8EAB41CEF792A807CF1B1903B7BADA5DC0737D47ADCB3CFCBCE3FD2CCBDB807CE35CAF5E8B3F0757D0FBF1BE7DD655B65965BF384B9397B80F9C6A2EDAF577F05A0F3D9499958BACF4E7F41D0654E168118657B59A8E2E43DD71B31FC73ED26EE33FB0E939E8FB135FEFBA9528007159783CAD981B8C5DDC9596A5231D6E17173476200BE26D8351AFCEB33FBED077DABE2FCFB6DB59CE463365A018B156E4A3CB7DDBC65CDE3EDF71259C945B3D7900725CFFB554C0EA3B769E32BEC92F794A4711EEE3BDEBAC0380C657CB7FD6E50F3D4E266EE0C2E2F9DE73CA6FD90237B7CB7FDB5F554B6911C8BB8A948CB039CE5E79E94230B3B6E98A82945453C225BB87D44E3DA158BB77DF56A00A1452DE6A2DB397D6FD5C562696B215002DAE1E4D29CCF8471C9DBF4E9EB03CF952A028A539DE8296E1C7DD3C2DABFA80BA3690760A5C28514A626A37F4A523DC2D7E9A772B1CC9B7733B2DA2828A2DB628EAFABA523DD1D29302BC6767EE88E46DB1414A29486A1A9CF8E99E2BD91303CF98ECE8897A9EC5428A294A70B04E5E279751D613038FECBD5485BA5911428A514530780D5E9B7B62930B93ED2D6A222EA64A28A514514ADB444FE56D7FFC4001B01000105010100000000000000000000000001020304050607FFDA0008010210000000F3600075E70AD558EA46005B9DCE33E1B7367000694AC32CD3CC00034E58A1A69A59A125A512766681ACD81C9A194D4F44E2B280D94750E8BD1383E7AE6F60E4D500BB0F4BB3CCEBAC540E7500BD5CB7D135B33E0E769342FA6DDE51AAADE56CD084D7DE780014F9CBF8EFEA2E800346D4CDC87F57654104628C38ED9DE6B841064EB5978DEAAEB155104115A7FFC4001A010002030101000000000000000000000000040102030506FFDA0008010310000000EB00043FBC939A35CE4003A76164A7AFC9800061CB22B8CAC0006EDA78C4B0B845F5B8C23981D3533A3CA742D7F0DDCD006A346783E07D9FA05BCFF7A92016EAF9EE0FABE6CE8DD4901AE84ADC1E8F5BCDE0CEC483FA72520BD62DE8D54E46B8F500019F429A318AC001259BEAF3215C8009BC1B5F4C55D2B5924B9560D55CB5AD2490B4EB3FFFC400451000010302020604090A050403010000000102030400110512061321314151203261711014222330425281D11524333440537291A1B116436292C16382E1F0357383A2FFDA0008010100013F01F4FC6B4931051908C2222ACB706690B1EAA397BE9E719811335B2B68D800AF9C4D735CB6D6A56E48036229BC3DF575B223BCDE861A84ED71E3F95AB53091D672FF00EEA270F1EA66FCE8C8863AB187F68A335A1D58C8FD2953F932DD2A628FF2DAFEDA3249FE5B5FD94F2D9BF94D3415FD236D4518C6ABE66D627A9E194AADF6047585622C3B866352E54C49533297E43C3684F61E54E105ACC946B788038D09B2E495063220A77802EAFD696EBF721C79DBF2BDABBC93DFD0346AF750424152D5B9291727DD587E8ACA9090B9EE888DFDDA76AFE02B0FC270FC3BEAB1939FEF17E52BF3AD62A9195C405B4B4B883B8A4DFEC0B4A1D694D3C80B6D42C526B12C39583FCE226672028F96DEF2DF68ECAC4594AB24A64EC3B7327876D22521D4E5988CDFEA246DA7A294A758C9D635CC784D1AC330F918A492D46B04A7E91D3B91F13D9585619170A6B2C74E678F59E575954493BFC3F25BB11CD6E1129C8CBF66FE49A8BA55221B89631D8BB0EC0F37C6A2BEC4C643B0DD4BAD9E47D38B1052B014856C20D488BF26622B84ADB11F1999278734D3CD969D520F034CBCB65576D56A25895BECCBDCFD534F34B65595C16FF346A0C473109CDC465594A815297ECA79D448CCC18A88D15395B4FEA799E88A75B43AD943A90B41DE0D3C1FD1F9499905CB344D8A4EEEEA0A0E34DB805B3A42BD3E92C432F075A9B1E7E3F9D47BAA7283A961F4FF00311E14485253915671BF655FE3952D0082B64E64F11C53DF583CD187630C495FD09F34E7603C6962C766E3D1462130904EA7F0E534EBB20A9A8F159D74B705F28DC91CCD46D185BEE25EC6A46B2DB7528DD4A3BAC2C06C03D3B7B4E53B8EC34B4EA98531F72FAD1E1357208209046E229C3981CC37EF238FBAB43315D73670D92BBBAD8BB2A3EB2797BBA3872017F32BAA819AB4559221393DC1E7652AE3B10370FB0B5D7152961C7A42C6E72438A1DD7B785C7128EB1DBC071350B02C5268CC969319BF69EDE7DD4DE8728FD63123DCDA2B0DD178906735284A7DC5B66E01B513737E824EAF0A98E0DE465FFBF9D436F5387C4680B656923F4FB0E3738C083E6B6CA7CEAD94F6F3F752C25166D06E940CA0F3EDF061B02462920B516C9423E91E56E4F6769AC2F0785860BB2DEB1FE2F39B5468A89DFD37ADF213DF8BFC8A1B59688DD907A20835227C18BF5898CA7B335E97A478524D92EBAE7E06C9AFE228C7A90A72FF00F9D0C7D9E302701FFAFF00E6938EE1C4F9C53CCF6BAD102A563586C58FAE3290E83D54B67328FBAA6CE7A64A54A90323A5391B6FEE91F13E04A1C79C6D9605DD7559103B6A2456A0446E2C74D9081B7B4F3F43193AF852637150B8AD1E942760CC281BB8D8D5AC768E9EFA992A3416F3CC7D0D0E00EF34EE9148977460F12C3EF9EDD4A87325FF00E47107560FA8DEC151F0B84C7518413CD5B68009EA803BA8D1A34F448EEAB32DA467F680B1FCEA4E1EA4254A64A9CE394EFF00CE92A0ADDDC472AD098E97A5CA9AB17D479A6FBCEF3E899714D38168DE2A338E33255270D7FC5DF59BADA5F51CA87A48CA9496B1465511FF006BD4FCE9BCAEA02D95A5C41E2937ACA7978522FDD5896901538A8B82A75AE8EB3C7AA9A630B0A735F3DC5497CEF2ADD49B0161B055EAF57A2689A346A7E30F78C29A8694D926C5445EF4EC85BEE053A84B723DB1D55F61F8D684048C04A13F4A1D59713C526FC7DDE910FAC2321F2DBF655B4530A61B5E646BE3AB9B2E5A9B9F3B66A31726DC1D40AF95B1C693B04391EEB1A5693632D9F3986B67B81A7B1BC5719CD0C3488ADFF3549BEEE550E3B71590DB42C07EB4FBEDC76CB8F2825239D3FA43B7E6D1CA87359B531A4842AD263651CD06A3496A4B41C616149357ABD5E8D71AC230886BD1790EBA91AE5A5C257C516BD4194BF18650B480D1010A17BDCF3A8921FC2DC131ABAB56723E8FBC4703DF51A435362B72A32B332E0B8F4C1453D524771A87AE7DD09D6B9946D3B69B425B4E540B0A52821254A3648173498F37185AA42595AA3A4F93C8549929662BEEB2DA17A95645051B1BD61AFB38A5D011AB780BE5E75143D86C82E37D5F593ED0A8B25B94C875955D06AF4FBEDB29CCF3894279A8D7CA71782D44730DAAD45F4C98EE884F20B994E5B1DC6B0275E6D9721C8D6A2DD64AB7281A7F4714257993E689BDEFBAA4C96A2CA4B6F1F36F2721ECEDAD1F9FF22622B8EF9F993EADBFD0AE7DD446E236A4EE3E813A1E7F9B89AFFDA9A4E8743DBAD99257EFB57F0861BF7D27FBA95A1F879EA48909F7D3FA21251730A685F24AC5AA6C79B86AAD3D8213EDA77560907E6F9DCD855B4FC29C8A35B649B0B5EB1D516F0C91CFABFAD600DB4CE09112DDB206C7FCD692869CD209EB67E8CBA77568FB4E7CA91CB69E3B7BAB1646469C58DA40D82B0D8A21450D5EEAEB28F6D3697E63C598405D3F48EABAADFC4F6541C1A24539D49D7C8E2EBBB4FBB97827E0F0A68BADA0DBBC1D6FC950AC423488032CE0A7A2DFC99281B53F8870EFAF9D048CA10F208D8A0ACA4D3985096A0E4C514AF8250760158AC44B91EE91D5163DD5A218C2B38C3272AE7F92BE7D94458FA4D2D7C96A261C9EB495E65F6213B6A23EDA59B28D88A724A8BAA523603B2B1B19B0C7EE6DB2FF00AD6172DF430194B8AD572A95804790F1790ACAA3BC54382C4004A7CA739D7D6E50B6D69A55D479AB9504392A408B1CD96A175AFEED3CFBF95458EDC5610CB09CADA770E8101408201076106BE4A5AF5AF610E06D21C524B0EED4120F03C29D5CA8DF5D82FB607AEDF9C4FE95F29C4E2EE5FC4922B15318A82E3C8403BD3955B8D68962C716C36CF2AF299D8AED1CFD1A05D429D77C771D9926F76DAF30DFBB7F87158AA99096CA1412A36DF50E0C88EC84A9E43847022DFAD66929D81827B42C56A243E7CFA836DF241BA8FBE965319901A6EFEAA109F589DC2B0F8660425EE724AAEB591EB2B977560788B8E4F991E5150505272E6EEF04B9CC450758BF2BD91BE9CD296028846AFF00326938FC89CBD461CC05BCA1D6DB64F693585C4F1282DB19B3A86D52B9A8ED27C0A48575803DE2B178EC2602C865B06E3720560EB30B4B5ACBB1124588A56C51F4531EF168129FE2DB648EFAC211920357DEBF2CFBFA4EB8865B52DD504A06F26B0684B71D4CD94828007996D5BC7F51EDF0694C53E3D16446506DE5052566DB176B581AF18C4BAB9503B75A6D5E28EBC6F31DCC9FBB46C1EFA4B6848B252903BAB01467C656B4F55A672ABBC9D9FB7431F72CDB4D73398D48F271BC29437EB2DFA8A77AE7D1697B9ABD1E75237BAA08A69391B4279003A3E3216EEA6321521EF61BDB6EF3C2B0DC1D7AE4C9C4B22DC4ED6D94ED4B7DBDA7C38AC3F1D8A50956475273215C8FC29D73C5DCD5CB4961CE4BDC7B8F1AD6200B95A2DCEF4D2D7255921365F5F31D51DE6B08802045C8559DD51CCE2FDA3D0C614A54F702BD5D83BAB16D6F8E40547FA54AC94F7D31A4B8CC43F3D8A1F6C6F396C7F31585E9161D889080B2C3E7D473E34A491DDE834CCDD186B1EDBD7E83257254530DB2F91BC8D891DEAA6B020ED8CF794E7FA4DF928F89A8EC351DB0DB0DA1B40F5522DD15A12E272B894A93C942E2BE4A819F3F8947CDCF2548C4998A754CB79B2F04EC02B0F9C8999C25252A45B37BFA12633525367537E4788A9FA3C1E19DA78EB1BBA9A047ADC298703CD058D97DE391E22B11C2DB76EB69365F2158563B3B082942FE710C6F4AB78EEAC33108B8AC7D7435DFDA41DE9E9E949CD8E618DFB282AB781D73265012A5AD46C94245CA8F6544C194F0CF89916E11D0760FC478FED484A5080942425237002C07A03B8D390714724A9866304241B78C38AF27BC0E3585406F0F881A412B513996E1DEB573E963917C46619681F357CD9DFE85FB5DC68D6251B617503F10A61C7F0F9224C0564706F1C0D6038DC7C659B27CDCA48F2DB3FB8ECE96909CDA551C704B17FDE9E73568D892B59395284EF51E558461BE2BE7E45973163CA57040F653FF0076FD89E6D0F34B6DD48536B16524F115219561B24457AFA93B1874FAC3D93DB46A5B3A978A7D5DE2BCE30FA64C45143E837045617A510254342E63896246E5A4F3ECE871AC636E972FFA628FDEB47E3090F2A7AF6A5376D81FBABFC7D931D85F2843530DB812F6F483B95DE3FCD403250B5C793B54DEC39B62D3D879F7D62A9F36857236F03B192B5E6B91D01BEB1F51563D2D2D6C756866324F6AAFF1A8ECA23B0DB2D0B21B4848FB03EFA59C80DCAD672A1237A8F431E694A845F66FAE8FE705B88E229C8AC6330997C9C8FDBC9751BD3F11D958C3722235AB9A80368CAEA7A8BF81ECE937D7AC3E5993A62DBE47997242F2F7E5B0FB0E1C7C664489AADC545A67B1037FE67A12D84C98EB6944A42B883623B6B47642E015E1F33638855BE07B8D62AB4BF065B4B48394849078D4A82B601531771AF638A7BB9D254142E9DA3A093635A4C9660CEC15D650869297944D85870BD4394DCC6CB8C056AAF64AC8B05768ECF4F2DCD54579C1BD0852BF4AC0148560B0CB7BB563F3E3D1D286836F44969EB156A17DA0EEFD69C92A5EB2FEBA520F78F03F874779C2B505051DF9556E86C00A9442509DA49E1410349E787568B6131890DF02F2B9F750000000B01E0C6F11F1169B4A7E95D5048ECEDAC35F5488895B9D6DA0FA4202810ADA0EC35A3B3061932561524D834B3AB27D9E0698D21C35F9DE2AD48BBB7CA0DBC951E40F434CDDB4161A1D653A93D2DE6B1B5AF11949C1A2A8A507CA94E0E09F6477D30CB71D9432CA421B40CA948E1E1D28CCAC563A6FB3589FDAF58565F106B29BECDBDFE974FE225296662363AA56AC914127665D878562DA4AE468AD371D00CB50DAB56D48EDA81A5188C792954B73C618BF969290081D94FE2D15A4660E67BEEB7C6B1A7D53A6C7521C4E6CF982378B749D7931A3BD217D56D2555A2ED2BC4972DEFA696B2E13D9C3A1A48ABCC2AF61D47C2B00776BAD1FC43D2E99435CBC1EED0BAD956B2DD9C6A1B49912DA6F7A6F750ECA95152C4D534D9590948B85F0A71BF20D3816E93AE56729397B36568FA72B4FEC1B17BFDDD2D2E51F929A8E8DF25E4B74CB619690DA3AA80123C24D85CEE158A2F5ADBCBE6ACDFF00EAB0755B104F6823D32224742CAD11D94ACF108158E600FC99CB950D6DDDCB67439B368E37A8BA332B5A15296C8037041BFBEBF86B1242F54DA1A5206E74AF7FBABC45386B288F9B3BBD65ABB4F4B1FDB3B0349DC645FA18B2CA2039978ECAC4C5E0BBB48D97D9583FD7D9FF00BC3EC4EAD4E3AA5ACDD4A37E87FFC40029100100010303030402030101000000000001110021314151611071812091A1B130C1D1E1F0F140FFDA0008010100013F10FCE0B032D36BD74B69C8F6137A56A00C92E87777A82C152709D05827769D2D7B9F63F9A46C9B00FBB58E2CDE53EC547DD0BE1FDB41C2099E4F34E5A46241F4524D856723E655FC52A491A36144F10CD40C4961A5C0BFF8103389AB0DE8E169ED3DA981205B99E90B6F348CE90978FE14B61C15F4914ABF205FBE8D3D0A94B3D0E3F81769770BD97397E02682183E43CB1E2294727B5459448C1F25223088FE782179644A756382AA57C9FE734AE1D0F0A701E6841A16200E50FD7B5470BDCBE9DFD05429E19C96DC9A7BA2ACC52D45BBE8705A90953D65F35AD3FEB99A590583939461F10F15A997264EE64F3F9E17411A4473255DDB9BE3538D3C6F578EB43B9A352612C991EE56128D1979DAA72568E4EC7A0FF3C04C5986AE87347DCF7BCBAC9AAEAFA548290C636AC7B65C8D3BACB3232B35930F151AC466D20FEFF3CC91C50966E4F24FB563C096344FFBF1D1A6C29CB58E56553F01BAFC6DB92D589215DF9F161A0910DE1309E91A4CDA29F33334A674442CB680DA8854C0743C2EDBC7BD0282100D0FCE0719341D4A99198FBCDA64FBA69E8D4598425190EC4041DDA3C5B82951A60E51DDAA3E3B52228E4F427CED4F18FF0071508A74B9647DCD673FF804D4A38B5059803F0D34D47E461BF60AD946AA06E1BD452466E708EEBFAAB2938A163582A6777A1B4417B4508404404130FF00C248277E82EF8177C57B207167C957A5BF1A24CFA0F83DE8309CD60E1D0E0A6EEF1EB825B909A199214F63F0E714B2520DDA2A51BE056E096A589D2F5DAD52A33D0919F769379F44C1EF4895CE0F71A1286E36727605FDE2A69EC7647BB3F36C7484A6721AF6095ED45888919D64EAADFF0009631BDD8FE42B946162DDFC47AC15012D0471C8F60CBE29652EC840344313C2BDAA752C85BC7FE2A0133A73F9A3E01C400FAA4EEFBD2A6A65A33146488BB82F4E5E9BB25DB53DE895948C8215B268D0F0109B429EF441E5A5555CBF85500DEC3C539B9C696FD37699342E895CEC3DCE6A18E24207DA93D5489913A5DE017574A0FEA8371DB47BE3BD33BB64287CE7EB8A02103004051428F502ABA8AEEEBD8331B14A11200C06CEFB7BA928269B796034B0FC8B944B27FF000F15DE8A43C9AD4025299D5E162529513F4BBBD642AC6592CDB6B71A6A54C1026E2FD19AD4FE9D56EF35A945965D8DDA621FED4050052E66C78735ACD18C8EC9A3D0D1A2A1B3BD4F34B5BCA10E9114E98389E470D4FF00E47B1F402D3C157ADC184DC4D11B27E1289EBDE9A95790A51C2F23B1B79A020917BAE5776A73848E819A57822058E3777A12C6DA4081E68776F0320E1A9FA41C6193BECD61BD6E422644D1A69C1E605290A6D53DD14EC582B905A4C9521224524A4A6F522922B4B3B54EE99E4108D4C94B898ECD23C8CFF544090121713F036F227061F745B95C4087DD76EDA1FC5679B4929F45446DA8786A51E4BC5E51984B7EF8A8C0B0846F3A781F3489EBB4DE198A24320B3903483C8D4C2A4A7CCD00A4B060A597DE69CE00BDD97A839230195B07BA5199B32B5613E2D1531C9029E2FD2F31449AC5B8EF06C780A2C416363151862F7BB7933D9A8BE618658C8659D948A121381A28DBD9A3492C7BB254BBC94292C0466187B944DCA59CBFE7DA9A24FC6498A56248B9542F760F7A04762C3ACBA525502026850E3C127540D1A046D2B454B42CA124F6A72E4227A1C5044809A72C1ECDDF053088498961EF606AF050512C64795755CAEAFA0CB140488E89519BAED8014AE5DB0516E50404E66EA9146859863DCA9B889A276AD83EA92922BEBA4BDA1FEFF1C1A9B1F9B6190EEFDF54A42870B38AB1438400D8FE454E3B10FF009A619765E0DAC03C5EA43892D4AA039573DDAB53A1BA0B0E1603F9ACD1C4C659243819B76A8767DAA22904D9477D03BD04082D2C5F21158C6E001E16580F35255E63C4C7DC3429853B50503EC0FDD36AD1A0667B50146DEACA90E39068C0E7F143BF432DF3152AC253754FA8CA2CAA029E88A344D93D1160C837BBD0AE5E121981C4B0E4A5489372FB2682C64C80ABCB2D1328C00A7B21306CD1EC9A8EA60376EC163E569366ABDE4FE684245BF12BC8C9E32CFEAA0500B670450FA1405C987F403BD4CF6F28F7AFBF834EB02C03C9074791669747BC1CD8C5A934A7A8C5065C622F3E1838A8357E2C4BB1B183D02C2003EC99F32D12B97A62200EB6D2B548D8B7163DCADBD6912F183F15756FB8FC196AC3F11FCD4CAF49A52B50B97C96F04B436BFA8F698F913B560E6C31FDFA1A6AD7922786818BB16A38A686076D63E8AC2D08B30CA09EC4F9A9A7A427A30DBB0D1B85CC0C6C5DA684C5487C95939192811733667B73C52E6B2309E593B62AF84360DB27EF1587D473B2270C3367E28A13D80DA61FBC1AD1449DD2ED0DDF047750AEB8181B018EB1D5E854861441DA94CA50A46CAEAB513914657E8D0F531347030F63D80F3DE8503721835E7F9A70B66248EA27EA99413CACFD9F4A4461B3E832536A2B57F4A8242424AF03BFC6684A9180FE006EE5758F5C7E078E92244C952415959E636E392F4444491B2351565ECD31F559963FDE6823CB5310D61A3E830A3321D4BA4FF4AB81AD22063BEA2381DFF2BE99A5A88064DF8934DB21BEF460EA448D0346C1868D8B794F09FD534A825C81AFA04939A2ED9229CC98E0978A80023E023FBE87E6C7179CC09B6C05D5B06685426CEA4D34B57E252E63F717EE14980B7EB539375AF53A83177B1BF23C539F4991382F4C8109B710E07708F7A3F24F468BB065A6BC089D4C23915EC14B4BD09FCC0E497026CC51B17AB362717045F4A0BA5FB81446803032E45CB4719A26D2613D17789DCA38AC640334FB538887699CCB7744DA7D735353D66A7A26084F09FD531AADD9CC899795A9E93D0F68921BA65DBED404EAF3B86FF153577EECA2BBC1AFA08B60AD002EAB57153A1D4B7060B7EDB1320400401B1D00ACA5ED58A4175E8081873E89A9A9A9E934B53445424371CD397D2CD97B1113FF006A2D52499E215FBD3ACD030B14386DFBA72F7A9F4020196808A198B6F7247C73446CF80054F4BB44F801C3EEA232129773254FA96A6A6A6A6A66A5FC86214473E2D5282BA08B43367DEA76ABB504090CAB36C77A304BC800B021331AD16000384BE2EB1506C402D1D5E0BDF55A5BFA6226592C4C18FD79A8F63DE31876CBE881F77D885F74D25600BE1FD749A9A5A9E9353D27AAA8B716502437B53C09D614035DAA5D36095370388A8ACDD20E56C548A3D3591858C050002B042E9063B7AAEFA600C4998F8286E0083608A9A9A1658095E299DC9DDD894C4D1AF69FD7A67A4D4F49F464C0062F98A8FF00F9260110139B5A9AB865D03BAD74D0A5F6D3000272E5344461216360FF006DD1A9EB6AA660E40FE6B4A73D1254306F0B0D43C7824E1B25081958925CB7F57AADFA36E8DBD0E29E8B03DAA75809A7AFFFC40032110002010204030506070100000000000001020300110412213105104113202232510630618191B11433425271A1C1F0FFDA0008010201013F00EFA005803589B860B6D0578F61615918EED5D98EA4D1897D2961075B576D147A5C9FE2BF0F14BF966C7D0D4913466CC3BF0CFA76726DF6AC96391BA55CAEF57BED4C5635CEF52CEF2EFB7A72EC581006F5886CB1647376F711B67456EA34E445B514F1F6C997A8DB996CAAEE3A69EE625C91853B9D68024D853CF147A6E6BF1A4795451249B9E4CA5A3751BEFDC8E1793CA2861E34FCC6B9F8566897CA9F5AED97F60FA50923BDCA0A570FE2AC4C9D9A651B9FB7776371BD3AA3EAEBAFA8A38788ECD6FE452E16306E5AE29E62DE14D052F02E20D1F682136FEFE9BD302A72B6879E178370F970CA81487B0F17C48F4DADFE5710C2BA390775D0FCBBA401BB0AF07EE1F5A319B5C548731D36AF66E34476C532E62B602FEA7AFF005A50C5BE6BB6D5ED7080CC9227988D7E3E9586C0BCE331D05370A005D5B5AC171AEC90418AF091B1E84563F1D1CF8C695366FF0005AB130766732EC7BD86F046D27CAAE6B807168B02AE92FEAB7CAD53F1BC3019CBDCFC2833F13C419A4F28FF00AD4B6B694580DEA444986561714FC2A33E52453E0F247949B8A6194907BAFE18517E7CF0D8379CFA0F5A862585422D30B1AD0520B0D79620D909352E14C84BC66F7A65286CC2DDCC568557D0561F0B24E7C234F5A8387C716ADA9AB5B99B2EC285EDAF2750E0A9A9E37C2CA452BA4EB6715340D11D76E428C071188C9D2911635CAA34F738BC3ACE963B8A40639321A5716B30B8E51AE670B58440333F527DC13D2AF47515361927B31D0D4913466CDCA30C5C64DEB0CAC175A26DDEBD1366157E43734543687970CC383E33D7EDC9F6A1CAF57ABF26B11AD48E249028DA9E219C2AD5AC4D5F9605408C7CB93EC6877C69A8ACCD7CD7D79FFFC4002E110002010302040503040300000000000001020300041121311012204105223251811330610614A1F02391C1FFDA0008010301013F00EB3B559AA88F2A7535A5647B566813524EB1FA8D3DC17D947CD3C3247B8C8A041EB5668CF325238750EBDEB7E13CE53C89BD63B9DF81914024ED52B2BBE536FB168D82C9F3C6EA3E53F507CF1BB3A2A7BFD9B55CB17F8A670832D4F72EDE8D053176F5371BC182ADD04814B148FB0C50B53DDA85A2FB9A365ECD4A81005153BF3BE3B0E9650C30C29AD31E83FEE8C128ED9AFA721D31515BAC63277A6F17B20FF4CCA33FDEFB50C30C8A0280AB8F16BF8AE1A4E60533A2FE33EFEF48EAEA255F4B6A3E7A4DDA7615FBB5F6349728DA6683A8D0D78FB3CAAB6A8DCA18124FE0634FE75A6B28D63F2EFEF5FA4DE6681D24F483A7FDA9EF121381A9A5F12D7CCBA55F7833BC867B3F306DC7706BC3EC1E1B25824DC7F1939AD54F2B6FD5127D4900A118049AFD41E152DF9478775CFCE6A0F04BD7C465703F34B1A786DB8863DCFF00734C083AD04276A46784E41C1A5F1271B8CD49389FCD8C11435E9B25C966E33DD2423DCD4B2B4ADCCD564904CBCB268C28086DD73A0AB997EB4A5C708572401455A3D185039DBA2C47F8F353DC2423CDBD4D7D249A0D07428E6DCD1C674E0AECA722A1916E2306A7B4C6A9BD03D8EFC6398416C1BBD3B973CCDBFD9B59DA17C8DAB21D79854F6E24D46FC09C0CD5C31C2A7B0FB0077E0A706A19DE1381A8A8E5590647038C6B5211A0EF4064E051D3A95720D6382EAA281236E12363845EAA61AF1C56382120E94A9CA849DE94F9799AB3A0C7190F08877A7DFAF359D318E3FFD9, '', '2021-01-13 17:15:36', '', '2021-03-12 20:30:44', b'1', 0); +INSERT INTO `infra_file` VALUES ('1c164a1d-5f2d-460b-a0bf-dfc33deeaab1', 'jpg', 0xFFD8FFE000104A46494600010100000100010000FFE202284943435F50524F46494C450001010000021800000000021000006D6E74725247422058595A2000000000000000000000000061637370000000000000000000000000000000000000000000000000000000010000F6D6000100000000D32D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000964657363000000F0000000747258595A00000164000000146758595A00000178000000146258595A0000018C0000001472545243000001A00000002867545243000001A00000002862545243000001A00000002877747074000001C80000001463707274000001DC0000003C6D6C756300000000000000010000000C656E5553000000580000001C0073005200470042000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000058595A200000000000006FA2000038F50000039058595A2000000000000062990000B785000018DA58595A2000000000000024A000000F840000B6CF706172610000000000040000000266660000F2A700000D59000013D000000A5B000000000000000058595A20000000000000F6D6000100000000D32D6D6C756300000000000000010000000C656E5553000000200000001C0047006F006F0067006C006500200049006E0063002E00200032003000310036FFDB00430001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101FFDB00430101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101FFC00011080190019003011100021101031101FFC4001F0000010402030101000000000000000000000405060702030108090A0BFFC400511000010302040305040804040404040309010203110421000506311241510713226171088191A1091432B1C1D1E1F015234252162462F1335392D20A4372A2253482E218356317192655648393A3B2FFC4001E0100010403010101000000000000000000000304050601020708090AFFC4004A1100010204040306050303030302030607010211000321310405415112617106138191A1F00722B1C1D11432E10842F115235233629272A20924E21617344382C2D225354463B2F2FFDA000C03010002110311003F00FCFF00F041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C10418208FD87B813D3E67F3C7788F3FC6E69363C22D6FDDF0411BB815D3E63F3C104286410153D460823760820C10418208E4027618208E7815D3E63F3C1041C0AE9F31F9E0820E0574F98FCF04119A10A936E5D479608525EBE1F78DBC0AE9F31F9E08520E0574F98FCF0410702BA7CC7E78208DADA0999B6DE7F8E08236F77E7F2FD70410777E7F2FD70410777E7F2FD704118A93C317999C10CF13AFBFF008C638219C72013B608232E03D47CFF002C1046694F0CCF38FDFCF094D4158006875877214CC4D4FD59E32C6132985EBAD1DBC7E9189A1DBE576B559DD9FA7DE0C2D0D1724AAA4545ABF8AC18553348A7AD1FC695F7ADF44E1946C9F53F76F5BC6C473F76174E33BB4F03024EB57AF9368DA3830E51803308511C2536ABBB6EC6FE9D1A366135E0FBF1DE92CDF335347DDEE075873FAB3873DD005AC29CB7F4D6B780E5F4D5A851A8FB2D5C6FCFDE363F973C309B988C092848E23661A353F0E1FEF1B1CBBF5AEA52806AD7954F9B1B391E70DFF567A9D7C397282190654A510010227ED1F523D3E3A0CBA7F68FE44CB50E2F95D8D8BEBB6EFE908AB3AC2766471AE623E4A8721E9CB4B73D7AC467586B5D2BA4A851555F54D2B3108594242AE1691B7849036DA2498EB6BC763FE0E62FBF335285B02145D07567AB3373E839C707F8B3F13F099FCB1290B41E0052E143F8D47E2EF1E7E769BDBC67DABAADECBA8415508529008E12384980678418B58EC46F7DFD51D8BEC1E2B2C54A331040053420A6D4D5DB4616EB78F1AF6AB1E8C5266709A17DA8E49ADFDF98A15D4F1A96E288FAC39726D6264FDE7974E5B63D138341C3C89686F942403B1259FA01BF3146BF11C561D4AC41535D46ACE2E3416D980B78C33F7B56CB87BCF13677208B0B58013EFE77E5BE1D4FC4E164A0103E602A5EA0F46E9EB5B45932826536F4DD9C352D4F3D2FB3D52AD755FC9CB69D6AA85405AE080831637111067A72BE2B38BCC82D570DD5DBF34FB545E26B329A26A101DC0DBCB6D7DF296D2692FAB2135D9FD5200FB41B252088822E08322C6FCFA5F112BC5898E259248B9B01B6DC8F3B5AF09DD10CA04B0BDBDDFCB5768E2B75F6579237F56CBC0EEC82952B8ACBE1B022790F58E57DB0B48C089EB97C60A9BF6D051CF2BDFD0738CF0B7ED2DBEBF58A8B526BFF00AE05C41924CCDE6E6F620C5C7A82011CBA064F952259494A49B3DC57AFD1875DE32C5EF4D9B4FE7E914E669A892E9971405D51B73DE4FF00B8169E78BD48CAC2C070C031353E0C4FBBD214960D6BEFA7D2AFD5CC57B9BE76C282A48264F31F388F2C5830A8561C0094150029CEB5B3D2FEE90B02458C5659CE748414107884AB8960CF0743CC103623167CBE79596EE94016DFA3DBC474D602A56FABFBB539443ABB50B652A4B55A16A0090D94F09932624F43E9E98B127284E3903893DDCB7625C9A1A3B5F7FB466F57751D1B9EF688457E7D9A212B536D0A74916295A5C2F728099244741BF4387185ECAE5929655FAC4F10A974B355CDDB63E2E7687F845F7038881A74156ADBD80C46AD1966479EEB3AE4D1D165F58FBCEAB852A34AFA112AB495A91C113E7F3C67138DCAB26429B1929D22A0A92096E4FAB69CD8690FD58B29038998F420ED607C5F4D23B15A53D8935667C935FA8EB5191D227816D347B97D758857DB061C0A68A45A08BCD8CC6397E79F18303226AB0982FF00E6785D2B354849D2A4172F5A13B46E9C6CB482490966E120BB1B9B1EB77F28EC2699F669EC9F45774E57D00ACCC1AB9A90F3A8950DD5C21445FEE0440C72CCEFE2063F16B2A9092949774049513D0B75BF4143185E669593C441239EA1F73A0A103520EF16DB35D9169D60B392A825A5A424B72A3C2102D75493EF323D310723033BB529EF714852384BB11551275D400DA3B93D22B79BC93982870034D75F00FD4921BF2C198EB9692092B4DE67C43A5C6D6B5B162C2F651583471CA4958005003E16BD3F310F2B2598925C103426F5F2B5B5BED15FE6DDA286F83B92823C5C478922236DCFC45EF893C360F1085702B09316C59FE617A060C77E40F51599C365533880AB01424569E5D6C4E8763F43BDDF9FCBF5C7C6A8FB131B1B6F7BF4E5EBE78208D9DD93B19F77EB8208CC20A6666FD44608239C1041820830410A1948215239E082377027A7CCFE782083813D3E67F3C1041C00EC27E38208D884004CA62DE7E5CFF0C10A4BD7C3EF1B3813D3E67F3C10A41C09E9F33F9E0820E04F4F99FCF0411B5B481303A608236E0820C10418208D0FEC98DA4CFEFD7E6704369C2A7937D0084D82108DEC6EAF4C10429C1046B7397BFF007FBEB85E454A81B375D768D54A2080CEFEDBE91AF1B2C0248D296E821DCA415F086277E956F0E9061B2BE57D5B6F7E71209C10500785CF3A0F37F1A6FAC7307A1F81C3757CA1EE7503D2B6E7CA36FD3357840DEBA79FE233458906C4EC0D89DF61CF1B494158E32A219CF0B78EFF0096D371A99A9927846B43A93CB95EBEAD1B0DAE6C3CEDF7E135E3E725624CB4A94FF28A3EDCB9F3DA31330B24CA33662920B7155B7D4927E9CB584B599BD1E4CC2EAAB9C42184A655C6A090A001DA489F389DBD316AC87B198ACF6721465AFE6503504B545C0B373357E4D1CCFB55DBEC2767E4CD4A26A78D20FF00700C40237D3EA6E0D23AA9DA97B41D332DBD41A6DC42570A471A162EA883736EBCFDF8F507633E14272F952E66270E1870A99419EAFAD5DC0D2F78F2376E3E2FCCCC8CD932672812541252A3F2935B0BEFA0E978E906A3D759BE6D50BFE3B50F2FBF512C00A5917BAAE9240B0E6664917DF1E89C8F23C248C3818591292500098FC2CA61435D983B0A9BED1E7CC7F6971666A973E72D426124024D35B39BBBD3C621A3307585FF002524A567ED106D3E666F7B01F118B1AE461928799C0929B0000E7561E7A97DAB0C5199FEACB1750258B9F017E6684EBCA14AA96B1F5B45995B951FDBE2E020C0E289E1BF5237EA31058BCD254B79682DC2E2EEEDD2B5D4EFE0DAAF0495BA8861A335EA46F41A915AE8226D94E87AE6529ABCCD680C7DA2952900F08BFD9E2927CCFEB8AD4FC7AB1130CBF9893D75ADFDB1A690DB80E1EA0B373BD036B4035BD3C21C333D4F91E46D0672361B554905350E18F09488175023D23F2930B96E2312B515F114D38433B5DDB5E437F28CCBC419CE92F6605DDC543DAFEDDA29BD41AE1350B50CCAA949249E16D1C5C23A094102DCF7F28C5830B904E5280E025C8AB352FCDFC7CEA215E015F6C3DEBE91546799EADC2D990191C45B5055C8E7304116DAF8BBE53D9A595259160E5C10CFEBE9E2D521962CF5DC5BDFD3C04573996A24B4140AED3D63EF31D07E62D8E9596E401013F2ECC1897A56BE356BFA1D420EA5BDF5F7F4AEF3AD4C1DE0E05C70F14DEDBF95BE1E78B561B23E2203300D417AB7974ABD342F0A2106AD5F2F7B8BC5719A67CE9E2217293B4131CF97E38B0E1F26C34A40330A53C357207DCEDE20C6C4117D62249CE6BAAD6696929AA2B5D7D5C284B2D2DD0924C429494A8226D1C513CAD384B1D8DCAB2F149D2828034701D86B5F76BC64214A4A940512CE5F7B7BE9168692F674ED1B5938DD5D4E5AACBB2E708597D6EB654942B9941215B6FCE76C737CE7E25CBCB5E5E194E5CB70D8B01A5B52CDE71AB6BB74BF4BEFEDE3B33A5FD98B4069B525ED515BFC7AB7C0A61A525D61348A4C158F0A8A1C0B3D640E9D39DE3FE2666999CD2995355864A5DC825D6F4AD886FB36D19FF74A552D2EA0BB8D49EB4AEBA336BADF946F643A6A8D34993D150D22109E14A8D3B0A58E1020F196F8A6013BDF7E78A86638BC7E6734CD54E9F3261FEE0A98906C2C0B1D80A51AE6012E7B01F3569BB72BD76AF4110FCDF581A4595F12AA03F370EF7496639A532019E805ADD4E12C0E439962A60E34288243B80E4022E59EC7DDA35EE26B5016AB0DF7E5EEB158675AE6951C6B7B312DEE4B6A4A9503A711BDFF00327963A7E4DD90594A0CCC389967240A1D74AD58C024CCAB8507D2B5E75F75EA22A8CF3B4FA36520533E85405719EF00EBB898103974B7AF47CAFB21C20BCB4CB048E1000DE9B5D80B1F4895C0C86204CBBD5F9BB0A8A50783F952FA8BB5C5242F81EE217809503693D2763EF1B5B95D309D9BC0E1C0FD44C9680003F3149D8D8989944992194DC99AF5D79BDF9161B0A9332ED3B38CC1C4B7468AC599321961D7449DB88A52A03CA6FE7189299FFD9DCBC12B992262AFFDA1DBA56A75F5893952E4FEEE14B269A0BF2A75D8C7D9F702BA7CC7E78FCE947D488CD00899E7820856D7F4FBFF001C1046C7397BFF000C1046BC10472013B0C10473C0AE9F31F9E0820E0574F98FCF0410702BA7CC7E78208CD00899C1042D47DA1EFF00B8E082327397BFF0C10A4BD7C3EF1AF04291B1BE7EEFC70411B304118A93C51788C10463DDF9FCBF5C1041DDF9FCBF5C1041DDF9FCBF5C1046C4366F0472DEDD7D7046AA4F13559A33E03D47CFF2C11AF77CFD3F98E0A4A6262F820EEF9FA7F318E083BBE7E9FCC6494F14DE2309AE7095AD4DC0F4D21ACC404AB702C767F7AFD9E32EEFCFE5F1E78C27121542AB50F46E9E17AD59E25B0880407143F624F87500F231AD41485A63633263D63979F581BDF0A0636ABFE7F36F48972BEED2598003A7ADE9785E97611E000AA2C009933E847E5EA6CA0C3950709AF536F63DB457B1D980960B1B3EBBF386F5A1F2E7795280D2904965C2425206EB27607C89983B637460B12B9A897250541440A026B4B5FCCE962D103333EC1C94AE64F9A947007F995AEFE837E758ACFB40ED7B49691A171BCCEA9BA8AF4A141A085414AD22D3DD9BEC3A73DAF8ECBD90F86188CD97266AE5514439526D57B37516FE787F6DFE2F4ACB53364C99C0B710042BCA8EFE1D0DA3A0BAE3B6DD45ABAB3EACEBAE3792A4B818E05F0C2153CD30A3CAEA9F863D51D9AEC160B2097C62524CC64F1929D980615D49D2BE71E43ED576FB17DA099302672D94A2ECA25DDF9DEF67D0E800A32B5C72AAB0A299C5960A8A9C5A964913E2B9513CE79F2F71E852E6CA54B1282412DC219852C2D7A6F60E3568E61370B880B3396A528383577AF89E7C8E9631ADEAC697C34AC8EF9C62CB4F0F1294544110482607979F3C44E331ABCA5887F9AE1D83D7F353E71159809B882020171471F6E648FE1A90F794E98CD7365871491474A2EB2E04DD063FBA08B4D801E5D442CFCF7138C3F2950068384925CEED785B01297214935040AB8B9D6F5D2BCF689839FC0F48B45197AD0F5554A4FD6D44F180A6C0E1E10A2A09BCDD3E569384F0F87C4E26612B4A88A312E5FD0BF8FF009B14BC406093C9CB83D2BD7A00FE759EA5D6AEB895A50E2D2992084A8C46DB0F4E9EEE58B9E5D9271315203D2AD5FE437D5C447E2809BC4003A7B715A5EBE42F151D76A72E71F78A22E4824C13D46F3E71B62FF95648944B0A080E68430E6DCCFADDB946B8190CA20861A1AD7C3EFD4968AF739D40D10A2B50B4F43BDA79F5F527618B8607260E9FF6C1377200BF20DB7F889054A0EA6340CDEF5D76F48ACB3ACF95C214D3A4F0C9E0130A9DAFB88FBF6C5AF078144A07BC481D40A6CDE9FCD635EEF9F5F7D22AFCC750D45495A16CFD58DE17DE7113CAC89E76DA7D4C624E4E270F852429495736614E47CF7D768C940A72F50F5AF9FF0010DF94E5B9FEA5A85D0657435598D4A9494B290D3ADA254620BBC3C2396E4623F31EDC65D93389810A55C7CC01A07D3ABB3788A4615F29A51DDC69E1E71D89D1BEC9FA82B8B199EBDCF13A5E8950BFA806915E5D418F09534AE24CED3CA76C732CF7E2B4EC68523289267AD2E95242FBB67E65810078F2302502BC5F28350757A93E7B1FB476974DF673A0BB3EA7713A6B25A6E3AA091579A3C43EAAE5343C2A4B2F051A7E13C93C24C99C73AC463738CD27CC9B889D312EDC3872A5349767F9C11C4F7A337AC60D0326BC5767AB1D9E9515A316F25D5DA83EAC9296F81A481012D8091FF4881B4DA3D061C48C9674FF009A6ACAAF42E6B5D5C9B5691A457D9CEADA068076B1CE052788A1C924A6638A403723A6E3EE7533B2B389419128A8387603FCF9D0E97896CB90851F98F2B0D3EB5DAA75BC5459FF0069542942D34E7EBCB4880B528D3F099B58C4FCE0FCAF5D9EEC84C982599C8E12083548275F3A00C452912E2549092431B0E74DDDEC35B750D14966FDA5D6BAB5F7CA53886C92D36DAA4B53361C175CEC378F22631D7705D95C24940527BB42884F12C81F330E76620B9153EB194CA9003900DEBBD1CD6ED53B3B18AF2A738D47AB5E34795B55656E12800D33C94C9B7FC45242779B93077E589350CAB2F9759D282807532D0F4D83DED6DF9C60C99360D7200602E4120BD9A950D123C9FD9B35B66E876AF50E6E720A65F0AD912DD49A94AAEA94A17C4D948EA39FC6859BF6DE5CB5AA5E58B338CB2CBE1052CF600B17F0AE81AD08CFE0C30534BE252838214CDD40FC01436689851760DD9DE429073DCCD39B3C800AC28AD90A2093221640B08F39BDB1589B9B67999A80968C4278AAE0A983F26B7DBC223CE2A7AA8A24241B52A0D59FEBE1A38896D1661A0345B6B190645423BD003CE3AE36F13C164901E4A888E7004DE7961493D96CEF1E52A9B889E90AB92165B4AFF86E4E408C9C54D724120D2C6FE1FCEF4DFEA0B813D3E67F3C7C448FAE1182C01103AFE18208DAD7F4FBFF001C1046C7397BFF000C1046BC10428640215239E082377027A7CCFE782083813D3E67F3C1041C09E9F33F9E082315262201E73B9E98208DC8FB43DFF71C10464E72F7FE1821497AF87DE35E08523637CFDDF8E08236608236B6099813B7E38208DBC0AE9F31F9E0820E0574F98FCF0410702BA7CC7E78208D8DA0C99B5BC8FE3851129730128492DB03F88D4A929604B3C6EEEFCFE5FAE345A552DF8C14B5DC41C69DFC9CC25A84414C49B1E584BBD976E34BECF1B42683D0FC0E144FCEDC3F33D9A08554E82AE29062D68F774F31EBB74223333973D2C532D5CA86EDEBC879C68B0E40F60381E3F6850503991EFF00F7BF2E9D79623E4CD5A3F7862DF6D6EFAFD62530A81F2922ADA1DDCE87DDB48E52D852D28304AE403C86D79B6D7FCB161C02D33F85D8BB3695ABEBE239F284F30C64B9328954C4861A9D9E8CFA74DF94346A0AFA5D334CBADA8A86509402AE15BCDA4D8490125533F38B5B173C164F8AC424193214BD5922AE76A55EC06DE11C833FED56030CA5F162D0821E8A50B8EA59AECE63A7DDAA7B49A94CA32BCA4A53671B79D6D4991FDA640133E47CFCB1DFFE1A7C3A39924E231D87E0EED890A4DDFA8ADBC9AFA793FE2AFC5299972C4ACBA7F7DC45415DDAF98A509A57968DCBA35A8B3BABCEEB5CACABAB72A8B8A2AE052D5099E504991E57E533338EFF0085CBE4F673865CA94084B00C1B7B9FCB6E1A91C067E718CED0054CC44C5A42854124924EDB30ADC784343D5A5B6437629779003C3C3BDC093BFEF9CBC9C7FEB4F0A93C06C4BF938A0B50EA79561A0C18C19EF0AF8F5F5DB7F0B7431BB2E4399B1197E5ADBA9754614E702F8403170A2909023CFD30E4C993844F7EB9A193F31147DC51DCD7D0E85842C31699E44BE10D40FE62A49A0DEDE57B0E934E64BA5984D4E62B43998B838D282AE2248BC5A529B5A481327AE2BF982E6672BE1C3C95144B35531170C0B1E96D7A42F2B2EC3A4778B5A49502458B36F5EB7FA9AC3B52768350EB6AA44C5234994A3BB29320587D88378EBE7732712195F67A6383310470B1729DCFD69F5EB0C7152E4CBE208502DA8F1D411BFDC08A6B36D4F5544438FB8A750F71142F8A763264090396F13B73C745CB324C31212402B4B3B80F514A11B8DF588552D6E785CBEDD357BF4D6A6915F663AC12EF1092679C9F988B753691E918B2272A5CB712A5B8A51987D4FAC48E152B985969246BD01A7566AF9440338D4895C70AC08E2913173F03CCED2475C59F27C2290969D2CA53A72BBF27F06A5A251587080080D6E54B5BA69BB12358AD735CFD6A514A572A13B193F0DC9BEE2E4CF2C584CE918541AA52DA9A9D3D2FD5BC635280D40C7993E30DF9465DAC351542A9F22CA6A2A9C5A9295BEA429286428D882B4049045EC63E2315ECC33F91282809E974BEA97D4DABA680758D084E8AB339DC9D3A5347BF28ECD683F65862AFBACEFB42CDC30530E0A20DF15EC4A4A9A544C45C8B1BF2C72CCEFB6B880A29C0A3F505D414CAE1E1AD0824D79B7F319FF6FF00B884DD892F6D4B6FE3CA3B2D97A748E8DA6396699CA695A0A486DCAA5212A5BBC0212415A0A916BDBE3CB154387C7E7E1588C56257420A52C7E4D48A5FD9B184D402E882585E80BEDD05B6E7AC36D7E7294A56BA806F24153A4848BFF4931EE03D7AE24F07947E9871A0998A0C48E121D9AA6E796E1ACE29A2A5AD3423F1AD36DCD7EF15E57EA96E902FFCC15A144C24130D81E7263E3CB98179895350A5241C39045096626C0559A8DF4D69191C61C90EF67A5BD9D2FE71516A3ED0D0C970072499E704C728EBCADBC8907170CB24C89A9038784B8D59AAD5F3EA06D4318214A366F114F7E315557EA3CE73E525ACB32FAAADAA04F70C06DC4B6E1302EE9414245C1249B832671699589C065724F7A25ACAAA1D497A6C2F60458D61591395248649A967AEFB1A59FEF1BF2FEC875667EE7D735BAD3A532F242843ADD515A39C869414391B89BDFCD15F6F24C99331380C195CC450000A5EAD761CDFCE1CCCC54C0A294925243B87E47E94E74BC4E99D15D94E97434B08467EF23ED54ADD718EED49DFF96A242A6368F80C404EED57687325A532C4DC1A4B8E04A78DC1D8B53AD2E23518D50354F15033ED7F1DEB47109732ED674CE4CC9A4CADBA3A100708E1A7694A03942CA267DF208DE775A56498FCCD5DE4D9D384C2039254012756240E54E8F185636610DC2A67E9A860ECFEF9C53D9FF6C152D9E2A3CD9FFE7717136D32B7A609800241088BDA00DAD8B764DD98C065EF33319885BD7E7604355DC972FF0047E6CFB0AB188A4C3C2D4F9B5AF33EC88AFDACDF5CEB3ABFABE51936659938B5405A9A7E992A2A3FDCB404C5F798138B0CCCFF00B3D948225A641290593C4870DD1CE9A3DC0D61E1C3C915E201BC6E2EFA0E55040701E27B45ECDDDB3E7C84395D90AB2AA65805152ACCD9594A5512A2D1701300EC47E00D6F17F19329C29549C3E152560904014D6AECCDE7472212386921CF186D6D576BD5CEE2DA120C7D69E3E0F47D6C80807700FAE0820C10460B49511161CCFE9EE8C1046D423E1F7FEFF41E4410A020FF00E91E9F8608232EEFCFE5FAE08237349E124CCED8D16680737F2FF3030370F1BB0946186C3C840403B807D719722C488180B0020C62061B0F28C929E29BC4608CC65DDF9FCBF5C1041DDF9FCBF5C1041DDF9FCBF5C1042AA64F09573C1042AC104182304034306081850B5ADEFDB4189CCAB32C3E102C4E0090000E1FC8B7D9B9C6ABC14CC5074288E1B73D3EC7C6FCCC218F9F2F18E25D097B36B61B59F5E95B335C89987352FC2EE0DDAA0F27B6F4F28E201DC03EEC5715964FE22A0A535C162037E0FD358C271A38B8483521EAEFE0C2DF6D9A081D07C06257053460C8EF403C2A04BD2BA8AFDEFEB137879667B0142C2C3A8B5396DADB44EFBD50C42984CA3FF32C3DDC89B1BDBD0DB12788CD70F8C09969949530201A6F714F0BEBB46D8CC30C2A4AD6A6D6BAF83F3AFB7E02D971B554D43818424712CA884EDB8F1116B1BFAF2C2723B353735534A96A1C4400C1E87A0ABEBB522A599F6B30B964A513312E906EA03C6FE26FA333C541DA0F6D7A674BD306289E6DECC21C4852553C2A168316E9626FD48231D2FB31F09B3099325CD54B99C2483549EA2FE3F5611C1FB61F14E4290B44A9E051428B048F5F31E0F531E78F68FDAB679ACEB5E1555CEA69829412843A4002F000491E86DF3C7A7FB21D809597A658C4C80B147E2480777A820E94FE44791FB63DA2CCB369B37F4F8B98905DB8546E6A2C5BFC6E0353ED39F5BEF50E71252DC0EF56A51E2264CDC99F75F1D824A30B95202644B4CB7150960ED7B0D3CF9C735C160B1656A56653173C9248E304D39151D5C3728D0D507D62A52CD3B6BA92A500549E2013B740A1B99E7CFAE23F1D8F95381709D6A6A75A134AD1AF577D8C4BA42650F91013C3FDB667D1FF001A88B432BD0D49414EACC3397D219090B0C2889E662C67CCD8F96F8AE9C61133BB9293C4AA822C9BD7C5DE9D21B6214A52439A0D1C543F3F4FE6AC79CEB3628D2BA4D28869829052A584A7888F252D3C5C8DEF688C4AE1302AC510AC5A9534E8092914E42F4A795223A62969712FE471A6A75D68DECC55199EA1A9796A5D538B150A278C95920ABFD227840B1FB3BF9E2F794E12522584942526C01001A35CEB4A353684D336711C2165B9DA8F4A07D5EF468AFB36CE5B85294E78AFCCC73EA6D6DCF962DD84C12569E14A472200A5431D3CFC7946122613572FA93720DEFA3914E422B1CEF3F70777DDD484B7E20E34471F780EC02BFA63A889D8733896C3E4F3259E304EE4B353C1CEBCE8FA448C8420BF100C3EC06FF715D62B1CD756B6959629E9781D5482B0E05993009E1F9E2C3231185C394F7E525290DC2435854BDB6F06A8B44B495CB9690C90EEEFA6BC8F2F58D794E88D73AE1E0C64740FBA0901EA93FCB45325C363E20028104CC6F1104E18675DB3C0602504E1D32C5083F30736F122D63CB91DE74F49D406B6B4F2DFD3A34766344FB30E4FA74379BEBFCED35B54385C145DD9042B7E096D445AD7237B75C726CDFB7B89C428A70B2C94A9C779C4C13CC03CFA7943454C4B925437602FE1717BEADCC98BF69DEA1A1A3728B4BE594F454CD25282F169A2B7922C93C4B4858889306E0ED338A82B133F19342E74F54C5BBA6A5210ECEE01634D08A784325CC592529A03D2B7F2D7EDCD9BF88D6D1F7AE57B854923ECF140883CA63FF6FC394E60F2B13C0E22492000C08776D75A7F8864B953947F716B9DDD8B337ABC40F35D4F4AA538A6DA085A64874AF842226E12A0019F5F518B5E132B97804242A604A1603A08A9AD43E9734F2890CBD1C0FC4E4D402742F5DF76F74A8339D7CC07974AE55BB5EE9202596DB5C09361C4806D31CEF1BE2CB839397280485A11C41CBA85FA13E5B3BECF28426EA0EDCDBD61137936AFD4AA6DBCBDB5E5197BD77EADCE17613C8842E15617107CB6C2B8B19561105969993B4484D49D03D58D817D34A46532788B80C3572C3D6BEBA7521DA97B3AD1F912BBED539BA351D427C61B334812B17E1250A20DEC6D163EB8ADCEC563D5296AC3619724A8FF00B6A0EA7008AF0B6BEBBC6552D095014551EFF7F5D59E8766FCE3B60A3D2FFE4720A0A4CB29D00A1A6B818A85D504F475482B411D4193898ECEF67CE7EBEF33698A42E5D415CC32C3171FB78922C36D9EA63454C42414801376D58F53CCF872678A633BED3B51EAAA834D4B479834F38A29406987DD696546DE24365B4836332201F762D98BCAF26C9C30C44998A483AA43EE1DEBB35FA930DCCC4A9D400246BB8B73B7873BC3B651D8F76C1A8D21CA8C8D54744F416EB975CD71F02B752A9F8829300FD95004F316B56E776E72FC14E54A46150B5208621373D598BB7A8DA324CB090428125C10D6F4B45A593FB2665A809ACD59AB0D42800A732F148B49EA51DF2147E37E4646D86B33E2662F8BBBC2E583855699C403529429B83A75148C254805D469A5363416B1D06FE962651D96F64BA5160D268D6EB2AA53354ED738A0B52765774E7104ED31104F2DB15BCCB36ED0668A4CC9B982D085391282384240AB3A59F6DEDE08E2B1219A586291A7D37A6F5F48B21AD48E65F4FF0057CBF2ACBF2BA303847053D22D684C58F106F8C9F7C8F9E20D7964CC44DEF67CD9AB59673C6A00B07FDBC5F4E9710C3F578866EF0B1DEBF588F3B9BAEBD6E29AAF5BCB0417525469D289D8004A527A1816F7E2464E5F2C30984166009009EA4FE5F78D3F513BFE6AF323E847E23DECC7C878FB35060820C104668483337DA3DF82085A845801CB73CBF7C86082378481B608239C104184E669E3F6820C27041820830410A69D20F1126361820855C23FBC7CBF3C10473C00ECA9F77EB82083BBF3F97EB8208C8009993BFBBAF9E0823991D47C46082091D47C46082091D47C46082091D47C4621F3113411DD922EED57D4F93B1D59E257018A972814AD9C8A39A16E5E2FB738CA0F43F0C38CBB106510269AD1C973776A73FC6B1A62A4271615DD01E06FE3CBDE91C7BBDFD316B463642D2CC38D8598EDA7DBFCC404DCA57294555046B5372FBF5B0E8638E24FF70F88C4762B013B141465A4925D9ABE81B4E9CA91B0CE64659F2CC58043072469BDDEDF7860CF3525269EA735D52F30186D2A53895BADA490279150240E606DCE3161EC8762B1D986251C52E61054E070A886B9FED6E9BD6AF143EDAFC44C24890C99C80A092C428072CE351D2BA79C7457B62F68A73375BF95E9474B4471216A6CDBA13361E97F4C7ABFB11F0F4618CA3889628C4BA7EFE75B08F2176EBE22CD9C26093394CCA145EEED626FBEBAD1E3A69996779ED6BEAFAC3EED43EF9256788A8B7B9BDCC4836F98C7A432BCAB2EC248484CB40EEC072120396AE9A757D3568F32667DA6C762B107FDC591C45AA58392E0BEACDD3D21BDA7F2FA154E64EA9550B8E1404A892A2622124F5DA06E3918C298DC44B961E5A512D20162C34B52F5229C9DF789EC8B13DF9499EA249209E2BF874ADABA6C048B2DD2F9FEA073EB4D27EAB9332429D5B812DF78DAAE3842A167C3BC4C03E726978FCC53326A65713A96EC12EAAA7FE4D673BB06B4587384C94CB49941367A36DECF5058D584E4E69A774A52F7394B68AAAD4A48754A9B2E3C5754F3FED36E62C30D6565F89C428F1A1610A6F95DDC3BBD2941E9D62AEB584D8F12AA09EBE60536FBC5699F6B673325254E3CA6FBAE2E2A70484906C048201B7FB5F169C0F67E61E17430A3121CDDB930AEA5C4205D4E4D46BC87BFCC54B9BE785D5A8B07EAEA932A9DFCC93113D245A7173C0F67C84A68C056C1D8F205B91F1A3C375CB7341A50FD8F5FBF5884E699FD5AD0DA1C8847142D2A04AA44CF86E23CF9F5C4A4DCA972787802985E9D35FF00378564C906F53A8A55AA3969BEFAD4D659C678E1529216A2ABF824924DF95C99F4F332379DCBA6A70AC66D367274B97366AF9738597213AB31140DB7F25FF10D195E9FD4BABDF5D365740FBAB94A0BAA4A9086B8F9A4A841041E46DE5CA4719DA5C1E1E51056805B7AF956A29467A79EAC6C68123414E5B54DBC394762344FB346459625BCDF5D66A0D4D9C6E93BA2AF172492DA88DE05E773D231CA33DED5E23133169C04854E9609E29817C3C2E59D8D09D4FD890C999852FC4A22EC2A6DF96FA0D62F7A3CCDBD2ED2F2DC9B2F62832F74043354036B5D4A50224829E3470EC66F27E15F91819B9B28CEC4297C52AA904A83137700D40E6E28C1A1133D75483C40B798DBCFEAD0C55F56D289A9A86D554E93214A754900998F0CC45EDC8C46155640FF003214E454802C006BD3ED194951503A9B87DBA52C1E83A8311C5EA4038C38FF007684CF7680809088E448DFCC9E7F0C208CB664999549D1F7A727F7D21E4A4BA8248626C5BCDBD9FCD51A8F54E7755589A5CB10E3E952A09424A80E57201DBA74F2C59F018D561E850CCC03FAD4DDFAB3D2241186E3B5199EFF009630A5DD179B6694F49519C560A1A532A711092A701024182088DB6C6732C562B31E197870A2514570DAAC45474EB5368274AEE1228C2C74D9B5356731B54AECFF0046B25CA6A0A7CCAB523894F2AA01525606E1B5151372791B817DC8C60B2AC62B87BD9CB96C352479D5F416DF9C240BFA1FC7F9EB102CFBB58CD7345A32AD314350F553C4A1BA56A95C4366E213DFF77C207424C74C58F0F829186509B3B16898A4B9659156DAA4D033DFC2360A2011E5CAAFEB1865BD8BF6A5AD9095EA0617A5D959E21506A5BA92A49933C09585260728BF2DCE1EA7B6B96E01250252710B45199813B71330E77E718D9CD0D5EFE3EEBCA27D967601D9E64C108D639B1D4158C90695052ED3C2EC5CBA150676932003D23142ED776CF34CD8A1394E19783624284924B8A307481CCD183F388FC6CC52280EC47E3C770FE348B8B2BA8D3DA5E9114BA7A86872EA74240495D3B358E2D226DC6E214B13EB23AD862B3864E6D8F081994C9F420875AC1AB12E1D8EF0C0629490C1C13D48600D395EFE50D953AA1AA8716AA665D65D905D79BE3E07093E129680E04C5AC1201993CA2E385461658509D350B0C004A800400198A8B957992D7D635FD612096AEAE5FD1B5ADBC5F44C9ACCEF30584B4A79D4AA3C3DCA933B40E22981EFDFE58D978FCB70C4944B4A9B6200240F07AF2FA467F52B7DFADB56E5D474D6B0A7FC2B9FD514ACE524857DA75750968A3A10851133CEDEFDCE23E767F2E6B2508091A1150DE1D18EEDABC67BC330D284D087BDBD34BF2EAE6D7672E389E3ACCDD3978DD48E10F01CB70A8F94EF86ABCDE6A52552D0A98480750F566D9C0DBC63520BDED42297F7EF7D4F68BD23430735CF3F882893DDA50CAE9F808FB576D438F8AD726D1206114E79892549549286622AFE83C7762488D8D855C540B0FBBFE0347B95C0AE9F31F9E3E55C7D9E8DADA0999B7CFF007FA608236F77E7F2FD70411B5A401337DB718208DF8208304106082324A78A6F1184E669E3F68232EEFCFE5FAE138236B68179BFCBF7FBE98208DBC09E9F33F9E0820E04F4F99FCF04107027A7CCFE78208514E002A8168C1042AC10425A80094C8B4608213F027A7CCFE782083813D3E67F3C1041C09E9F33F9E082324D10A93C72AFE544004DE76B741F8E1DC8C3A2783C407537A3B01BF37F37B44E3953D2B4997C4CE6D6DF4FA6BAEF0E0DB8FA07748488800C807CBA44F337DCF28388DC6E0D6853490E09A84835666A8EB7F1312F97E3C480F38B505C80E3CED4FBED1A5F7174692BA9521B61CE2EF14A2910123DDB091B73C3DCA329C5E226A3E4590486A12CE45A9CC72DF410CB3EED66070D87983BC9614124FEE48D0D3AF2AEB1D79ED47B63D37A5E9DE672DA943B570A078566CAE7CC8933CB6F863D15D8EEC1CCC70477D289A24D52FB568C18EBE2D5AC794BB6FF00113B954D32A707054C12A1CE9473F8B3D5CF40F5FF006A59CEAD71A43952F21849761A4BAA48712ADA4248DB9C83E5CC63D43D90EC4607289056A909E32126A914A54543F3B9A3758F2DF6A3B7D8CC7CD5253354415100859347B383E914C54BB534C4AD973BA0ABAB888515493375C1BDFCFDF8B96225C8C24AE3949482DA5096D8E8CDF6778A32F173F1A499855F31AB9A52BEFABD617646D56E64EB8D6574CB0FACA454542C1291FDAA01620082660F493D2A58CCFE6A55C090404D1C3D2E6A35FCDE3072897FBEE4B3E9FE2BD356DA2C8634C69DC890330D50E22A6B40E36C724AA398448F2BF2DCE231798633174758E226B52C05F4DB4FA464BE098A0971564914277F53E8F0C59FEB9398A1BA7A750632FA4E24D321B86CA81B10AE182AE51C409BF217C5A3B3B94A5466CF5CA2A9931B88A9D56B33D07A56F183984DC480164B25E8F67ABEF563D68DB1AA735CE91255C769EBF39264FDE791B63A160F2C007EC0E7968CE0FD3A728DD0AA9737667F7FE62BACE738010568584AC025299BABCA79C5FF002B62D183C081F2292C926AA6019B5E74F585C70A5882F77BD7F0DCEF155E67AA9F5AD6DBAB0CA45B912AE5B8BCDF95F9C6D13D25183C3B1510784B5D859DDBFC7842C9009259C8BDDCD051FCA18E91CD439E3E32FC832EA875D78F0AEA8A565082A220C389200BC83378DF0962F1F824216A98B425206A5209A56848B51D88D2F028F7601259DC74D7D6DEDE2FCD11ECFAE53A919CEBCA80F03C2EA59B022D37EECFA4D8F4C730CDFB49266AD72F2F52A628062405009BDBADBD7A616B143B8717AFA534A55BCE2FC6ABB4F644C228B4FD3329425212B525B485022C2545215E867EEC50B158DC5CF980ACA96A7F94D58576B12DCAF7686EFCEFE2FEF7861CCF3543AA2E3CBB7424C08E8240B7E96B9C4E65B2573B87BC04715E8C0ED41BF87E74324AEA5C9DDAF6D010F119AACEA9DE6D4A4284B1C50A5287849E8933EB6D8E2C404BC0002628049BA451C6CF7FE29BC09C3D406A93434661CF42DE3D4DE0EFE7199660FA9965E5D409212DA5B2916FF58106C2E6479CD8617958EC19708940391FDCEFCFD61C264A87EEAFDEFAE9E75BF5C93A7731AE5A6A334CC5BCAE8A98F12E957C0A35C954784AF88291C3039DE71B4E5CB5292997244C2B70482DC1B1E6CEFCEE6B0FA4C804B936A8D3952BEE94DDBF34ED0720D3ABFE17A572952F3357F2CBCDA1CAB0B7088064B6B489DCF8A3AC61EE1BB3FDE052F198A4774AAA65964B001C7CC0825835361489044C9690C181F37E5B5ED6DEC68DAAD2DDB06B30CD4552065F973D252FA9DA76E1B277EE8A924100DEC3D37C6ABCE72AC8A62E4E19231539D94C951029AA8022AFCAC39435C62CA920B7D093BFA379D21FF2DEC4BB3EC9168ADD539DBD9A6683C4AA64A2A0202FA12DA94D913D3CC6D1883C7F693178D98512B07DCA1569BC605D8FED6069615F2AC4705A48E251A8FEDF6DBBFA74B0A92BF2CC98219C972E672E60C065D1469AB71F8B4951694B6A37B91336E711189C0AE7A92A56348A12471D89157655486FBF4D04D2096B1B0A7E35F4E70F02B7516663FCBA1755C768314DE83C5C200E5B5B0D8C99787078E626601A8AD87224B7BE507784D002454F3DFF003BF28C17A1AB73458733C6DBCAD283FC950A843EA7A7ED4F0A8F0F0C73DEFE987D82ED0C8C220A25484CD5D944A4023A15276FA0A6B0CB1838882B0C3A8377D06FEE90E4D68BD2796A439559877CA489293C66E04DA146DE5E76F2D3119C62B1CAE14E15287A382353CBEBA4302DA17FF34F4BC64ACCB4750A0F754A97DC16061420898DD379E968DEDB61AFFA4637145C2D487B3F3BD29D5C884F84EA3886E28DB0D2FA0B08677B5CE60CA94DE5342DA132027F968317371C49E912461D48ECC82927118863A82E3D5F71EED19083606BA52D4EA012DBFDE1BEB351EA0CC0215983A5A0890D25B084833733C040F59F779CBE0F24C14A1FEDAC4C7A17D1BA9B97BBC38972D44BD9B9FE3DB8863A8CCEBCC8352E0106D0AE9E768BCFBFCB121FE8D216DF28045ED47FF1FC428401AB9E43DFB6D21ADD715557AA754BE01E13711CCEC47C67AE355E4320B1041BD185BEF6B51E8CD180CC5CF41CE3E827813D3E67F3C7C7F8FB3F1B5B481303A608236E0820C104182083041060821553278B88CC6C36C27334F18215777E7F2FD709C119A1004CA80F5FF7FDDB0411B3847F78F97E782083847F78F97E782083847F78F97E78208CD20098333FBEBE78208CB04118A93C51788C64249720381730463DDF9FCBF5C6AE096D76F7D63608529983BDBFC5E0EEFCFE5FAE1512A61B24F913F40605A4CBAAC30DFF003B41DDF9FCBF5C2334F73599F28DCD3C77AFE37AA299A859E14972341527C89B7B78534C9525445E1504988100733FBB4DF082317316B12F0A0CD0A2C420D9DB40E75AE96A562630F2F2E97256BC7CF97228E9EF080E79390FE1C9B788CEB0D5F41A5A8DCA875E6429092A20BA806403C8999DB91E5B418E89D9DECF63332988E3C32CB91562589E4CD476BB53998E3BDB7ED465D97226FE93192D7C214DC2A1663B135DEC6F56AC744BB53F698A9CC94D65794ACA427BE6DD5A0C8BC817FBAF8F48F64FE1AF109532661D8FCAAA81D59CED4D0D5F58F1AF6D3E27634CD992E54E5A9CA83824867A7D7C868D1D42CEF3E5D73CED4D7D4ADE75C5710495120711FF00EA039FE938F42E47D9A9397CB4012C7CA120BA59B9D458372B470CCC3B498DCCE61E352C827576AEEEDEDF788655B952E3EC968294F2CFF9742415711D8F144C0DBED45FE387B9D66E9CA6584259D42A686DE9BDB9C37C265E9C5152E62C39AD7C4EA77BE8D13BC974066F99A5198EA17052D23403810A521329F301493CB68B4CC75AB4CCE958B484A428A967E54D58BDDEE282F5E5D1E9C2A247ED62CDE8DCFF0005DF61128CC7566579553232BD38C349718053595090388923C264893CEE955BEF7182C82762662A6E25C216C509290C96B8A0A9DDC437562D95C201A5E8E7E87E8DA3EF54671A8D0B5A8D73E5F52893E2511C27DE6F1D7A7CEE380ECC4B29042028581671CF47D0F23D2009FD439340AB3F8374A6BB5B940B31CD5A4C2997070AE7C01511E9E5EE1B7A62DB97E59FA67404301C3A0F32E1FC7A50886B3F08B92C5150A3A07F56B6CCFAC40335CD9C4F100BF326401E46F1E9EA316294844A0EA4B3022A2D6FB7D6D1ACB1301AA4802D47AEBA6AE7ECD15DE69995556D4D35252A1E7AB5F2A4B01A6DC713C52012B294A929DC594403060E1862F389387491DE253BD406141B8A8D39DA1E4B06A542B4BFE2C0DADE9170E89EC0F36CD4359BEB157D5E96CE21B252494EF10D906E2D713F7628D8EED580B992A44C2B58B241372E3F75A8EFE778792F800F98F08AB9D69EFDBC76068FF80E9160506459730E180976A6101482810140AD24C9BCC751B462A1986698EC54D96662662D21D9292A003E8598173BDBCE23F30C414B7764177AD2FBD34FAC26A9CF5B7C2D352F29D4A859B014902DD45AC23F1B4E2532F94BC40654AEEF89AF5D28E5A97FB8BBC45A264D591C454403CF9EFCFEED588CB953474A8A87DA4C950920927840BFA83B7BB6DE313B23279666A42D21DEAED762E5C359ADF4899C3A09038B6A6FB721AEDE01A206E664FE6D59F56678F854A8309200927E7D24DBC8624274AC3E15C24A681C00DD69B695F21BCACA93C4C4DB6D9BA69FE3687E7B45505232D57E6F9A8A765292B5309256B77994F0A145423CC7A6F3881C662138C981082FC27E773C2C0D475B579B43A4E1A5862A2036FA9F37A368DBEF0C6BCCF35AD7865BD9FE9E5BC80425CAF765B027FAC77E913CF63CBD063051230C92A54E48091F33548A5A85FF008B18D4A253965060ECCE4539BFD4D1D8C3E9ECB9FAE432FEB5D48595BD25596328E22B3B9471D3AFC3130277D84E1A2FB45DD14FE9C7788018AE8967A588721F97F0D2694A49F99B60E45AF725DABB7D227FA6B4BE41A711DCE95C9425FB7F99A86CD471AAFE206A10AE199EB691888C6F69A64D2518A52E6CA49F965A54A9652F70E92FCC68F4869FA9E0A8FDC054DC17BDDFD37D61FABB4AE7B5EB69DCFB8282957C45A79B7D0070FF0051EE5A5262DFD247BA766927B6B2706152E4600AC1038B89D45BFF005281347F5EB0DE6624CD62A2F7602D7E839B7918E5BCB343E46DC9CE0668F0FB4C2E9D6140F3016AE2927A8E7EB25A623B513F18B213853281B10FAEE3847913A7584DD2F715E7AD21BC6ADC9E914E0C972B69852A05429C21D0E47D8E10EA484D85F86DBF4C2F84918AC6AC199314800B8BD1FA5E9BB585E91B8243B6B786AACD4EF541934AA120CF7083EEFF00869171CE2F8BA60B2247085CC9E8593A294000D615569FE37813C27FBB6D3DF99D8B88630F66398929A3A6AC2763C61F0049B01C6047BA67D7066392E1528044D948D7852A492B6E8AD07F26129F2EC01E2B3062C0BDEC3C284F58DECE8AD61527BD6E914B46F0E3C94C4DAFC4479741F2C44CACC70B97100AB8DA8C0120FE29CC4371289B1DBDFE37E50E88ECD757558E34D332D773757154D39E29E775CD874E91B61E1ED8E1A538EE540A87CB425F42580A78D77D633DD172C41B569FC736BD4B73854741EA36C774A0CB6A00ECE30AEBD0C0F7DFDE30D2767A8C602CA992C1D4254E1EAD40F5DFA467B956FE405FCFDEF18D3F673AA9EE33C54EFF0040AA8A747044EC14ABCF2E9F2C311DA03972BE554C98146DC0A16EA0EA5DDAD6DE3432D40396E61C13CADE31ADEECC756C1229E98EE20D5D34DBCB8E3A6DD646D7792FB6CE2A8586A97496AEE18743E71A80F6FA81F5863ACECF33DA28557B494850F0065C43C6DBCF764C6DCC5F962630DDB01378B8525811C44B8EB7B5EDE87508502035DF51A728F7531F24E3ECFC6C6F9FBBF1C1046CC1046494F14DE2304119777E7F2FD70411B5B40BCDFE5FBFDF4C1046DE04F4F99FCF0410A69C01C51E5F39FCB04288D7C214E085235B9CBDFF008608C100DC03D635E08186C3C8472013B0C1030D87908E7815D3E63F3C1030D87908D8DA157B74E63CF040C058011B3815D3E63F3C10307076B78C668044C8FDFEFF0076C6C2614B2407E2A01D2BEEDB3C359FC5C40006A6F4D05DBC2F5BB346785D385A778A21EF7E9A13A7D99A24E44B44897DE2CF152C6F4366A90DE16AC1C2AE12A4C42374F320D847A794EC6D8D6667327040A182D5616D5DC59CE9EA219CD98BC61328A4A454055A9AF8FA3D1AE212BAB65B6D550B712D21B054A2B206DBEF122DB7218CA32FC57699918696A495020F00DDDADF8262B79AAF0DD9D44CC5CDC5051038F8491FDB56A9B5361E4E2284ED37B7CCA34C5322872F79B72B569752A29503E24881C88E7D7A5F1DAFE1A7C1CC561CF7F8C42A677842871A0B5CEF414F3178F297C56F8BB88CD8FE972F9C70DDC128265AC8E236FED22ED53D4F21E74EBFED6732D575AEA33079F4B4E2D413C2EAC24024C084900F291BEF8F567677B1785C0703E193403FB6D4D4355F937DE3CEF8CED26678B2A13B17326715C9528D198EBEF6D62A879229525C2BE2454DD3C4789422E7724CDFD79C6F8EA38746130E84A1084CB54B152183BDBEBAF9B522BB89526629D63BC7724AAAE75F07EB42F7B99664398E67529552214585195A9426C62FE2DA2F61CBCED8431D9BA2524A1243B338D7C00BD9CD8BF488C561D0E78500381E0C5E963EA4DA2DCA4CA74F69BA32FD429B5E6CE241610BBF8C0B813206FEE33EFE7B99CCC466B8860925292DC4347EBD3F11A80A940949290A34BD750EEDE8FB8AB18AFF0039D4F9AD71719CD5459A3121AE05048206D6410761F9626F26CB1485238D1C5C2DA37D07DD8B6D7D54B529DCBBFF0098AD6A3306D0A78D2BDC2DA2EA59333EB26E3DF7E5E7D37098796108050EEC0066AF27B0FBEF184A52028ECCE2BE15F637DC57F9967F975538B69F05D7A4C2C15244DEE427A799F5107162C2C9320278260969B94B03CDF88DB9D7F11BF100CC1D85DDBAE95DE20D9AE6C9A3E04345556F5448A6691C454D907621326E0F38F888C482F1B85920AA64C4A5491F35871B3B16D0D05BEF0EA414AA93038A54BB0A6C74F3076898689EC7F5BEB379198662E9CBF29242D69742012DF41C5C2A88E979337E543CEBB628904C994388A9C24A6AFB59FD5857A8859425004200E26673D76FA3116F18EC9E53A6744E8869C672A6587B30E148AE79C4F7AA2B47D828EF02B809BC94113EB8A5946619C4C98B98552D0B6E1AD3CC1F4FE59152411F2B12474AECE35E7EC21CCB54B8E9534D921A1221321201E8040F2DAFD2F187527B30A92F38CD2B53394B17D2BBBC47AA5CD24A9C9074B54F4A5BA6E6230E6614892A52DE879C32DB241FE6904C82B261113CFCF98C4B610253FECAA504B515314038E6C4574FE630241511C639EF7DEBE875E5766AACD2ABBC08711F524A8C02DA7EB5C5B6E5B0787DE47BB94903849201252B53514070D7C286B6E8FCCA889291FDAC5C31A13AF5F752F1B5BA3754D97EADF729694C71250C29F5D6CEC0A100AD920F2816E5D62F1799F00A2824070EFE55EB4AD4F8C3A4100304D5B7BFB7261D6974C67999B61DC932D4E9BCBC5D79DAD48A979C4F350A273F9A9BC8E1099FC2B589CD0AE67019C78D40F0B3905AB734AB0D6B7D62465CE64BB0005FC6CFA9DE9D00892E4FA1320749152E556A7CDC91DD553A8A8A1692B06F2D2C06A395C006E7D21A662679F9C4C082788F0F10268FA82F56AB55F90A35C5CD247CA4B52A2D714B7B689F2321ACC9A9C9CE730A6CA68801C148C32C3EE2D16F0778C8E3498804933798C3246266E20A97294B98A059414E90347A96363E50C8CC58001554BF51E2E6EDD3C6191FCC743658A2FAF2071E7D5766B5558F2FBE527ED1EE1455C107900266061412316B981427F0CBB997C03415F17A6BE75867366926A493B1A37D6BE5D06ADAE76859DD52CD2E474EE32C1F0A51F538001DA5C53408B79F9CE1C7E8A42D7C5318AE80FCC2E07FC41EB7DED0D56B58D68795AD478C469BD61A865EA97954284DCB86A12B94A8CCF76560A607288EBC861F4A380C229A64A0A245B878812D6259BEFB5A149014A075B6B56D287EBF57785AD681A3A24F7B996A843AB172C7D5D33E63882C9E5D27A635FD58529A5E5E9087A2DC55F56E17047DC690B306BD7663F58D4F37A3E9212FE567315A6036EA5F71A8237242779E876BF5BE674DC4BBC8986504B12909041A6ED46B0F3E990A2976D7F98DADEA6CA6800FE1F9421881E12A577845EFF6C198C20BC562D48E05AE62C30B122BEAD56661F88C0252EC5ADB69E11B5DED033152404229DB4806006184904ED278413EFDADCF19C26055885BB4D26E5E62C8A6C0F8EF734A46C662CB39B72F7688C663ABF50D5CF7550100FF006F0276EB045C0E87160C3652400E8A0DEA7CEFCADAD76844A1C92F53CBD2F11A39FE76C294AABA97561CFB1C2E28011B93C26FE73EEC4B48CA9142A969F14026FD2C7E96178C701B7153DB307AC267351D6F279E33BAB8D667DE5437F8FBB133232E9691492936B20680727209F08CF07FDC7FC5B5EBE7E6DD51A96BC1003EFA45FECBAE0DEF78541D8753E98CE232993359E4A054D4A053500B03BD396D0DE70502DC47A837B6A0BFAEDA426FF1357EDF58A983FF00EB391FFF00DE18AB2295A4A4D1EC903EC5E1100837BB6F7D353E821C6875A673421C55357A9A0A8E34BC03DC7D000E93C31B1E1DFDD76537B3C95824CBE1356091C3BECC096F5F187D2DC3B726A3FBFAD63DF2C7C938FB371B1B04CC09DBF1C1046D83D0FC0E08214D3A24AA645872C1042AEEFCFE5FAE08233420099501EBFEFF00BB608236708FEF1F2FCF04119A4013041DBF1F3C10A4BD7C3EF19608523058262013BFE18208D707A1F81C1046E6904CCDB6DC608236F77E7F2FD70411B9A6F7B13B6C0FE1FBBE0823670A7A7CCFE782063B462B4C0040317F4E5CF12783C3226254A590E03B1D99CF4FBEF1B15A1287203D6A5B7E77E5E20F2D720EC715ACD7309D2667732C1370C1EA3766353CADBECC82D7C454B244B7724D9AE69AB72F1A3430E7B9CB792532B3075F69BA7610A53C95BA8471003601441277DA7A461FF66BB298EED06253C4898CA5025D24DC87D85B67B58C577B53DB7CAB20C24C509F2FBCE134E201884F22EDCEEDE31D13ED87DA357982DFCA74D3DC05054DAD4DAE4133133B6F3CCF3DB6C7B47E1C7C2C465E9933A7CB0AA24974D281ECDD5B6F28F10F6FBE2F62F37C54CC34998A12F8949052A2C41A587837956E7A559EEA3ACAF792F56BCE3B56A52D49F1120124F99178DBEF818F5065B94C8C3CB0992896942000484A68E3C398AFD8C70DCD312A528CF99338D4BA91B390F7353CB7F186A6AAA9EA15C35C897366C4493681B0FD70AE33BBC2A7E42900BD38478DF9FBDA253882A62E41A3EADCDC8736DFF1129C934557672B5D5BEB0CE5F49C2A6C3D08E34AA09E1E382A8E71276C52F1D9BA04D1292BF9A61200487A8A55AC5FA5BA43D94492EC40D79FDA9A743D224798EA7CB74ED31A1CB5082F2014A9420C9D89BFCAF78E57C272F018AC5BAC9514962915A0EAEEC40D7587899695330E44F9F9D5F97845319CEA4556540AA75D5F7CC9596D209892798109DA3E4479DBF22ECED38E6A6FA9FE7CBAF9C32C64A0804B8A55F7045075DFAF3222199A6A4AECCC776FA825B48804285E0C72BFEFAE2DB2B289723F6A40DEC29EC57C623A2135D9A06F853DF453890F80A92676100C9B9E585D4A124306A74FBF88A6D56104194E99CE75555213A6A996BA752A1E75C050009BDD71B78B9D8FA623F179BCBC3A0AA6CC609D4338D2C1DFEF4BC0C5DB972F4F0EAFA6AFD83D3DD96699D28DA731CE386B33480B534A0A506D62E76E24804FEED8E6FDA1CEF1989983F4A261924B05071C41C034D81E84D2052CCAB1A9049E5F987FCE353D45731F51CBD69CBD840E1086C253316004705F6DFAF5DE4B26C14B992C623128E298402AE22FA9D0F3E8EC291A4B9CB5900A80E47ADDEFABBF5D6B1057DAAD4142DD54C932E158973E26F1D3D39E2E127F4E10AEE40240B04D88FCF94498410905B47B83F48E5450F2785082A7369402A9923A0373F0BFBF090C5094B69DF225E8E740357341BDBA438952C077B6A3917B03F7685997E83CCB3B2B742D6865882E305B23BD0AD8070C14111CB103DA1CDB0D2912CC85A4294E15C2DE16D0DFA878526619203A6E0BD7C373FCDA2C3C9B485365E90DA1B144BB0571A7EB7C645CDD5C404F381CF7B038A87FACAA624852DC0DEFE8DCF4A8686531205856E096F13A0B023A72894B191A288AAA29D4CE5F605ECC9D4B6E848022452AFC37E612075386989C699E82953AC2AC904A49634750723EF6A3420B5F097E26167BB72A36BB7ABBC20ADCF322A074394F5DFC57334EF56DB2A65A4A87FF00D327F967680784C917C212D6A5A12E8EED350A415711FF00C9891E6618AF1252A3F3120D8F3E81F5BBD8D7AB4BFA8B5B67A453E4C94D2251E1A851A569B35A954F004A948496F807349133279E159587C3021641F92A3E6248772410E7D6DE91B4AC42E6FCA4BBD09B7986B071E7CE1C29346D406CD5EA6CC4E5CB2389414B35416664C2428813BC45B688C2E7109207E8E477CB7A86EED88717342D537F285CA080E4814EACE396AE6A368E10CE8FA55ADC34E3367198EEEA0A96D06CC5CF74652A98DA396FB61E0C3E2A709678BF4C43F12182C2B6E41BD2EE690CA6AAB51C6FB16B015BFBD21054F6888649A4A26996DAFB01B14CDF108E5DE16C1B0E7EFC38465120A84C582B9A2A5414A0FCDB88016FCDC43798B2C00A0AD3F9F1FBDDC98FD7E7AEB890B4B8AA253A09E14ACB9F58E920186E04F4EBCED33232E4CCE10A008A5581296A8EA793F28CC87AB12051F9EE39535F2D621B54F55AD7DE2E8DC75333DF7D6942DC8844CFBA3711CF1228CAF0FC410141E8FF002B5090FE7CE1CC694661510A4D354164A7EDA548E38E6002ADBA6F187A32492082A4A549558BD4EFF7ABDC068C804D8437D4E635C8E22B7839E7C294CFC36FDF538712F21C22D8AC01BFCA0D43B506DEAD625A33C2ADBD47E79C34AEB1FA8214E2CB6048179E299F75FA1F5DF1212B27C361FF00E90E27B800A6A7ADEA6FE42321075207AC6835A968FF00F33B5A26D7F203F7BE1F232F4B8694F4FE6FAE8EF4D2F19EEF9FA7F31A9CCE5B48852FBCE9CF879EF73FB89C3B46014689484B3D680927AB7BDF4C141D0BF266FBC373B9E20589BF9188F4117F3C3A4E015A3807C7E8FF00568D82030715D6BF83086A73C64F0F2DF73F98E71F2F3C64E14CA7E21C43A1F03A73F386F3D0281BA1FA7DE879C26FE36D7EFF00DB1B230E85D801BD0D3D457942299628D53F4E7B7D7CE1155E6297D4DAC37C696E4ABC653131161138728C14BAA480E450B061A6E77DF485D2909622E35FE0BED1F4AFDDF9FCBF5C7C3D8FB350A69D20154C1B6E47CB0410AA0741F018208E426761EB10304119702BA7CC7E78208D2EA488991EFF00C8FAE0823540F3F89FCF0411B5A493C51276DCFAF53821497AF87DE37702BA7CC7E78214850C8202A45E7F7F760823760823058262394E08230E0574F98FCF0410AE99E2C25C4981C7B6C76F7E08238642DC778B913E7F18FDDB98112100D0C10E75CE328A64B40A42DC163D001279FE9F3185A54C9C169972D2A5719E12DA3F423476F6D198E988920CE5CC094A0124380030D5EFB6B5DAD14F6ADED0324D134350BCC6A9B2FF000ACA47109E20091201F302637F763A9F657E1A4ECFE6CB9864F105104BA4D053537AF90DA388F6EFE2F60F29C34DC348988E209525D2AA82DF5372C36778F37FB52EDA730D5D990CBDB7DD4654A5BA16A43CA40E124DCF0907D24DBEFF0052765BE1AE1F2244B5AA4A1C00E38439FABD5BF378F11F69FB779B67D8A9AD3A6196A52BFB8904134A3B3331D5ECEF1D73AD71BA7AC2CD02D4B43A654A528A8C912492A9BDF69F21D71D6B0988952909932E58433024306601BAD3EFB456D05253C53140CCE65C83A53EF5EAD182692AEA1F6E9D8A75ADF74F85E825283CC9E569E640B61DE2330FD22490BBD4D852BA02C75F7687C526629557297B6EE6FF005DE2CBC9B4AE5F92B69AFD46B4BEEA405A1361C24DC02127D224408E4315AC5E613F1A0A6529552012D41E7B8EBADE13485020B11EF5DBDEB0DFAC7560AF6A8E9A99D0D52520743286886C90409E32D9055B082A07CBCF6CB3294AA719AA492B9853DE12E6DCAAD7D186FBC3C97354E012C2BA7E3715F6D14B66B9A13C5078B7B9373E649FDF3C752CB72D421090120160E48B5B97D34D9A1F4BC400003403526AF567FB115F5881E659C2DB5A5B0986AA09E35822101331F7CF9F438B1A244A928E3550A050333E9CBDF3108E366A6600010790343671A9FB38A188DF05754D4A58CB1876B3BD304A38A1324749EBD45BCEF88FC663A5A41248480EE5DBF0FF009ABBD21845CBA5BB17A6AA6C66BA81EE1202568A55133782A100824F3BA76F953331CE809C9952419855C4E412C9E6EF5EAFF48D92970E4B6DEF6FE768B6E9DDA5C9694D164686E97812132128055C22665404FC639ED0045AF0E714A0BC4BAB54A41347E94DB9BC0542A1346A3EBA1FC73F1778A5566B98A56EA89E22A27BC2A215DE003FA649023CA36DCE25F0D82C2A929EF509734402053E971CC5793426651984FAF878F2FCC46DF759AA5296E2BB87A6787C44ABDC0817BC5AE2679E159981E075CA514A459AA29BD75236D2309C32829CDC10C351E2FCF67B33C6DCBB21D4BA96A053E5D42EAE92988151532521295DD2785513D6C77107081CEF0D97527A93C6A1F28A39005B97E4F9484B2A0068C0737A1B036BEDD18068BDF4FF0066F4D94B287AB2A43EF708516D4DFD9205E4FBBE1EFC513B41DAC18A131121010CE1252A724D6CD6D2947E7787489812CF524073B7DBF1CA251515D4B9636942DF699660CD3252826A026D0A5A6EDC4089B99E56C51309371B8A5CC54D52C8D0173AD3F716F768C4EC40018AC33073E0EEC1EA3F976888661ACBBC7052E4B953944FA8F087D3C5549715D7EC94A77F75F78C49CB90B47EF5D4E85874B9F2A93EB0C66E252A040A91A35B7FA56BE4EF0997A775167686DDCFF34148C0054C84F04BC93B8521B50298062E01331C8E1DC941E258BA92DC418B07B56C4977FE61929455521817A7B25D8C6E4651A5F20477C809ABAB45C28A8F89436B1240F4B6DEEC3B4380AE24B59CDC1F2BEAEFB97B3C335CB2493663CCDECCFB7DEB0CB5FDA03ABE063BB4502192A0D77684A8B808DC94266D1B9263961C61A5212A2AE1AAD892A2FC4CE6C6829D1FC61690952487B569E0FF007F3A4476AB3CCC3300422A1E7A6E3C0A2083E57B795A399E92885A1218048E6004BFA0F6E6B0E88704421629B397B8BB969E215B80D2A075984FC663A6D8593894A58A949049A02A0391D9EF5DA1A2C5880799F76A7BD96A348EA7ADF137401C0AFEF521A37BFF005011F1E9B6379998C8921D4B0280923E61E2078D89F48414973415EB7E5D7C9F4736507B35D66E82AFA8B4C81713594EAE29F22AF0FA19F99C309BDA495288EE54B26AEE950D6A2A069EE90ACA414F13EE05F6FC74DE13AFB32D6A1265A6B9C4D5306DCFFACFC3D631B48ED6A9FE67045CF09FB06DFF008061686DA9ECCB5E0134CC30491E33F58A69B6DBA89E5BCF5E789893DB293F2F7814787604B1A5E9F53CDE320136D39C42B37D05DA432543F8621F1D5350C73DAC93CFD7A62730BDADC3AFF6A08D6C4539B80EFAF93504655C563FE6F5880E69956B1C9C4E71953F4C854F741A9A82E017325A49E083D627979CF60FB4322791C4532CBDCA833317E47CB58524A544579B167EBB72FAF38ADB33D5154DB8A61541534E663BD5B6EA408E67893005A7A40C4F49CC654C03854950701C11A16D0DE90B777CFD3DFDE3450EA4ABA54BCAE36EB52EC120B886D54D133209255363FBB4ACA5A2714926DA3DFAF21A8F1A46021E8EC45FECDD6BE4CD0DF53AA5A2E052B304A164925908E28B1B4881899932524710A00185CBEFFCEAF19EEF9FA7BF6758E06A34BD1C46020595F678A7CA6DF87C2313F00A981D20A8867715F0D3A8FC468A92E0907E63EFDB8F0DF7379EB53056224733CEDCE2DB73C248CB6705070BA5C70B7DEDD5B4F04BBB0356D5ED5DFF00970DCE36399D34AE14858F71BF5BDFA75DFD2D87C9C14C4B7C849E63D2DFC7D6125A824B5CF2000F478FAA9EEFCFE5FAE3E0C89885332856DA7D63ECDF02B6F51F98C80099922FD6DB7BFCF1BC60822E232C6C124D40F51188DCD0078A481B6FBF3C1C0A360FE519009B08DBC03FB87EFDF80A14039040E719E056DEA3F3182DB248893EEFD7CB1AC60822E230EE8F9FFD27F3C1188CD08899313D446DEA7CF046E8203BEB1B3801D953EEFD704280836AC66941131267CB1A95A45D43CE36E151D0FD3EB19411B823DD8C7788FF00908D84B59B249E958CDB4154F84988D813F763066CB01CAC010195305D0A1D4465C09E9F7FE784FF005521DBBC0EEDEF9467B998CFC26CF63F86F568DCCD1FD60D85926E7D6379F38C2C852564041E27DBDFBB5DA135BA012A0C05CB8A7BA7B11CD77065ECA96A504800995111600EE4C7EA4FBE42565B8C9DFF004E4A95AD219AF1F8496FC7392967B91A7F98EB476B7DB153E92A0094D436AAA7D2E86381D4A8A0A78B7292637B131F9F67F873F0FE766EAEF71521480820FCC9A1AF303AEBBD75F377C6BF8943B392D387C24CE3EFB8904A14CD60F404DD8F851A3CD6D53DA1675ADEBEA55985538A602D5C03BCB419E40C72B4F9EF79F54F66F274E46512D12010800060D6D682BEF48F1AE6ABC4F6856AC54CC4948592B292490C4BB5FD05EF15AF7DC4AA8654B01282384A884CC9E52798F2F8F3EA32387152871A780B3049D5FE9A73BC56A64D97820650471173F37A3D8D76D1C561E726D3AFE78529A00A2A4AA54E14F840DCF88C8137BCED26D338AF669265E05E677A01A9617BD07F97F1686D2A5CC9F30289294B82CFA03BD2EFA8AD4B88B5159964FA6281140F34DBB5E5252B7400A2D91CC403FBB7962030866E6B88A4D644BB23877B5F7D5BCE2566995C094801C0152CFF004D856DB6F150EA1CF2BDE5AD4DBCA758519093E1E117D81DBE5CEC062E383C9815255C3517A7959BF3EB0C968490F46FAECDFC6915D3F52B6CAD6A7788AFFA788908F7DFCFA4F4C5AF0F9726500B4A78599C357D456BD4D4EB0C660208AD9EBE5B7BBC44731AE5A8A9216093602428C911D66E64587CF12273097857723E5624BB6B66D7EFD61A4C9F32A00B8A372BD6FE2F4872D2DA2B36D60BA8525B5B34148506A9C790503856411C05613C5707EC123699C43E65DA790E995DE00A502129152E342D41E3D442B875A9555BB356BEDF4E757768BD727674AE85A72CE5F4E8AEADE185A8A54A8541132A0A1FBE5B629F9862B158E70A52A54B770805F883BBD08EAD57B43C0A480183B863EEB42FEDA1AAB353FD72A3BFEF14C3927829E0A5279401013B6E7CF09CA4CC4942425C02439AFAD75FC35DF5AA8EE4FAFE3DF266CADAC76B104BCA2CA87D9E19326D13C302F6F8F4BE2C384402DC4013D767DE9716AF8B46C25AD4EC934FE3F30C14ECE735CFA29DB438E2CAA28CB692BE393E2E220787CB8FA88E785F1624A071F7C9414876240A6947AB723E0454BCC2CB493FEE029E166D8F503F3CF78BD7487640F5425ACCF57114ED8E15A10A2078409B8491D472F238A4E69DB43210BC3E0BFDD98974958B0D19CB8F5B3F8AF31284915001A33EBB7E75AD79DB5519CE41A529914997A986587070385084AD4F706D300A9245BF7BF3DC5CFC4E6B34CD993162612E0D404BF205B5FA88426AD09E24A0B00C431BB53C3A52FD1ABCAECF755672EA98D33951553384872AD4EA510956EA09700279EC76E6409C187CA4E1D499D3E695A49FDBD2DA9F01CAA223D731492CEFCA94FA78B8077D192A34C657918359AA33A554D4D6F89597776B2029024A038824279C9116E9B62C38752E6BCB918701219A7050A3EA451F66B5219E226A8872A2FF00F115FCEFF4D2353DABFEA08EE34BE5CD503401497DC08A852845C80EA54A13C883387C32844DFF00F1534CF208524A7E4E12EE47CACFB3F2A43718850601241D5C3BF990D406B4B7288EAEBAB6B5C52FBAA87AB1E3FCC7077894715F8785221099F281D79E1DAA4CA4242414A5800EE1CB6875A59FAD21DCB3C572DD747DFC79D39011CB1A3B51D72C3B54E7D5E9946656E249E1DF6E20498FF6DF0D57325214521D6694009F221F7143B3C394CA04124D34A375D625D43A6345E5A92739A94D7D42C0E0400A4F7253F6AE92649FF6C349C9C62D40CB965080CCA05DC11701891EEF48DD4254A624B93BFDAB6DDC79C66EE6DA53290A19765887B876F11B40B5940FC79EC71B0958C23F7AAB764F9DBEDAD79424A992C9141C989FC81A359B4DA1B9CED26B18F065CC3396255FF10961A7FBE036FB48053C3E5136C61596F7E52A9C998BE1FDACA2867DD8B79DA1B4C9C12A74A80045880D66D8F95A962D467A9D6F9B56821CAA0B077E06D2D5FA0E100EFD0751B0C4861F06245449240B12EAA6E5DDFC4FAD61B4C9BC4CE5B71CB414AB36F0C1539C562883F597999076716BE23D202A047291D6713123264E3D24AD212CDFD8C6B6FF0088F7717856428105B96B777A8F7F58685E6F5C3C23317C0BF35106E660150F2DBCB0F13D96929D52C030A0D7D9EB587108DDCE733490A4662FA60D812BF17FEE3F327F2772BB3126951FF88DA87E95A1DE08554FAB7356665E5BC446E77BDE64FEBBF2C3E4767F0C3FB80074E11E9E3AD057782143BDA066EC94F030CF0ABFE221D69977BC03A7789570C738009E588DCCB23932F80A10B9A03F094A9496A87B1A8F7BC3DC37100588ADC10EC2A3DB11AF8A0ABD47A5F3F6CB1A934D53BC14005B88525926F04CB4DC8F71F7E12C261B31944A70F3978643060A495DABA97676FA43A4A52E4A92EE46BC87DC37214A88AC353F62DD9DEAC4A5CD1B50AD3158D859AA696E3D509AD5ACF8002E2C25AE0DA475BF95832FCCF35CB26138E7C64B531130327BA019CF0A7F7120BB35348DF825ABFED3B56BF41AF5D39C75EB56F60BDA26960E5751D02B35A16E562A1A79B512912A2AE04952AE22DBFDE7A0655DA9CAB14B4484E27866D1D2B4292DCB89403973F50EC29A2A42C00A6A6A5C1E761AB5F4B5A28B7F5156B6EB94954C3F49514AAE1710F36B6C12491652C242A083B480778C752C85781C4820CE96554003A6A497FC579EB68C77547D2BA8F02D7B5E95B8B18D88D44A3E12E0E5042C48DAD63F95F9C62D072C94A0E809376602BE156EA2908AE592E521DAE68F6F03B721E50E14F9EB8BE2FE6131037FBE26E6F724EDE78417964A480C815059CBB74DFF00311D365AAEC4B3BEF5ADAA63EC831F9C095839AE5C94B333823C0398FB38AC4CB510CCF5F1F21D6343DBA6F11CEFCE7CFCBD7CF1212A470DDCEC1F53D2E3EFA4604CE21FB5C0BBF875DE3142547727DE6607E7FBEB87F2C0003D8D4B6DA0FE3AB460254A2A60FC8066E9F9FBDD634024102794F9FEFA7973BE10C4E255254E84710E9CABE95D3988DD0A4CB07BC152D5351E819AF5F02446DC3318C5AE851D5F6D49A563071491F2A405528C697DDCB78C641D71BFB09E2264F5836827FD8FA1C2A898482E1F4D00FA7A69082E7CCAB21C1079D79DB71B5F48DC871F7265C089882426D7F4F891F3C2A99214FC47A06D2EE7DFDA1A2B158B144C9596772029F968C0F58CDC436803EB2A352493C3C1E1088899E106645EE46C71198FC4CDC2377492B7BB75E9CFA74710BE19626907123B903FE619EFAD350DE3AC6D645393C2867879F89447DF1B7C4619CA9D8CC45449587E4EF7BBB7430F26627052407C42001B2853F9FCC294B9C0084A1A8E654E206DCE144193CEE3E7897C2E498FC5B34B5D6C58B87FAB577E750D0CE676932CC3FEEC44B2D562A039EFECD0D210D566F9753A66AEA2999817979B047FEEE53EEF38C5870DD89C74D01C2C9BBF09200AF27B74F5864AEDE64F2B8BFF009892C3750BD3737F43B558B4AB5C69ACB829F39E5236C27FE38E26D731F641F11208EA089838964FC32CC316C89689C566C02155BBD746DABAF48AF66BF15F2BC17FD39929628E42D34F00F7E5CB9C305476AFD9F38E2AA17A96910DA264909827CC71016B8B7E786B3FE10E6F2CA4AA5CE06A482953EFD6A3C7AC42FF00F7D39714F0F1A050D5C1D1FD3760ED788F7FF882D0D48E3C8A0AD6F306CD9C711C490D948812448215D2D389AC97E1C63A4CD48992D65881F32496B55989EBBF368AA673F19B0BC0AE05205C82140BE87974AF2DA3ADFDB07B4AB6F52BD4990BA12A712A49295410152362266F8F41F63FE1FC996B44CC4CAEF08E160A4B01CACCC3C79C70BED1FC68524CC12A6F0B3D44C2D63A3F414DABCBCFFCEF3FCD7397AA2B739AE71D6DC512DB4A595589364C28913E5BF28BE3D1990F67F098342448C3A50081600585EC037D9F78E19DA2ED8AFB5530AA6CCEF382D5048E757A121FA446DB63EAE3EB617DCB0B3E14195151260EE64413CA712F88561B08E1494B8B9A0B7E39379C57933A620325440E4FF9891E53A1EB33CA962B2B12B6B2C2AE25386521494FFD244907E26F8879D9F4A48299412E91400F09D79FF24E8F08A997FBAAFAFBF38B0F31CF69B49D28CB321E05B65252E2C70C8B4925464CFBE397AC28C2E23362672F8B8DFE506A05480D56B35852F405A3604A1D293F2D35F3A0714B6A08D6292CD754B85F7B825750EAAE5478BAF5902DD395C8E96DECEF6695862A993430353A3E9FE29C8B184A612E9726A4DC935BF9DEB110ADCEDD434B35EB0804184FAFA5CFBEDE5B1C5C026560EB4E11577DBEDE0D5D85352A2431F7AFB6886D353E77A82BBEAFA769DDA94A963BF6FC412B04D8F78A10809DCF5DB0D713DA0C3006A904023D8170DAE8046840343EFF00117C699ECC74FE4C84669AC1D0FD7405A3282A50E1501201750608363703F3A263B158BCCE7AA5E1507BA3FF00F7014CDD13AB9A5EAE0BDE0EE65A43962A06DBBEAED421B6D5EF589466BAAA99A63EA8CA114F428494D3D13294A14DA62FC4EA1216E4DC8E2923118325C661A72A6F0AE6AA690EAA96B58924797D291A9412C123A803D77373BF9C578BCD09A82AA263BB0A2495384A84F33E3F3F772EA7167CBF07C491DFB020390696DF61B579428896430218DCBFA0FE34FAF0FB88AE537F5B6D55552927B84B28E1851201E22D0215CB7B731E52AB460E4310B42529152549714AD1DEEE000C6E3943A97C23E635E16A351F4DFC9A2CCD23D946A4D45C35956A19665A98510E841251B11E320FC2F7C52B38ED4E1702BEEE5AF8D6E78528048A740CFCDC561F4B5A58D0067AD3DD7DEA62D166AB44F674DBC8A453559982C27EB0BE12EA82D03C3C09855CFF00A76E722D8A74FCD7139CCD69AB5CA969B24122EEE0B16AEBE70D3173C24012C877AB6E0D3968FCFE91F7B38ED0FB415919165AA4652930BA871C45284B60DC8438104C01CBE7CD354CCBB0491DE7F796763314EF42400E2FAEDD623BBC98B3FBAB7BB7ADF7B56B4B8829F24C8F272EA733AE39AE6C882BA5571A514CB1BA439250B0A33245875BC61696EB5132E5F04A1C244CA7CCFCB46D7534B426EE4B9BD4B9277AB79C32661AD2B985FD4A887F0A4A894A03480F95721240913205E636C3E3292A6E3F99BCBA37DC3460DCEBCF78D74BA7758E7A7BF790A7583E245538529E049BCF02BE7F773C615899520F095849D921CF90B426B524508735A5A9AD6D1236B22D3F91242F3CCCD1595200229D0D91067ECCB648DCC5F975C2B2E6E266B8949212A3498E4335D81A9A381BDE13EF24A48AFCF5F958DC73B56953C9A0A8D5F4F449EEF2ECB9B6985C84AC84ACAC0D89E24120C7291CF0F519799BF3622615ABFB5BE5D2AE030F5AE86D185620243A52CF76D2AE3D75E8394305767B51988216A5B73C924A449F48E47A5CFC04DE1B052E526890ECD50EFE27C06BE702B16433DCF36BFBEA74148634D3A5B2A529C528B907C4A2A889E64902797AF4BE1EA6420B02905BC00F0B7A13F66988C4296C1D9AD57EB7D3ABFD63538844C48EB78FD9F761512258B2436C403FE39D3486DDEAFF00E47D863E7FE1A113E1B000253CE0C739F3FF006E5CB0E65C941A8961B9900D76A59C6BD631DE2DCB93B54BBEFD3FC6D0DEB2DC1F10E8449FDFAE1C8C3A4DE5B1AE83F0DA535AB41C6ADFD0437D43EDB407881E2917E51B6FC8003CFD30F644874B24330D8B1A9D87D07D1A1F609D8EDA7ADF43BEF414840AAE6047119236836FC7CA77FC30E53875357C6A47A53D6EC224211BD5CD9E102204FEC4CFCFCF0B4B9452E2DB6BEF5D6086F5D6A0837F75BF7E779F4C29C0DFDCD6B0FE75B4109975295F0C19DC99B812622DD630EA54A4A920A98DC5439F571D4DE1594A29762D6FBC2571D4926C24F97972E60FAC5F0B1932DAA81AD424026BEA7CCC2BC6ADFD07E211FF0011629DE6E9DC42BFCC980B42949E0E1BC9281CC91F9E18CC934B50BB16707CE81AB4EA233C6AA9E2AF415F187D4EAED47A78368CBD62AB2E77FE221D0878047310EF11DA7CFF00185C56592F10A4AA623E641252504A087D8A4A49F41F58D84D98971C47C61AB54E97ECC7B4EA7A56338A5628338752E019836853629DD588054868210BE251FEA369EB87582999D65E5588C32A64D91218A6471F0950D7E62788F09FC757D84026FEE5313AFAB01D7F160F1D27ED53D9D759766CF2F36A243B9CE975A8B89CD18BF76DEE3F92D95AAD2522676338EB1D8EF8872B19325E127AB827A084AE52D4C52FCD4CEE7F1AC3A9984E1142E0DB571A9FB5E28C7739532D06E83892572971C7014294A4DA0A1705252AF8F3E98EF3844E17152FF51316821829297147B9A1ABF36AF230DD58628F95497357D497059BD2AC07578FB7CC7E6CC4E4005806DE9E2D43E61ED1F5CE5E196E2E583391BB3D89F01EB189415DC49E1DE01547AC6D84578800B685FC391A3FA6FA343D44934228055B7F13B356362131629B799223F3FC30DCE2175E10E2A3416F0AF41E70F654B48AA9403914E7A3FADF468DE4445EE7974FDDFE18DE562012CB6E840F1041FAFF00889191946171B59D8844A61476AED7352DE4238F3E5D712386C32710C10872A346035F27EBEA4D21A63301966041271B2CF0D7F7245B9397B338D8E91C8AC66990B5B8F32DA40995B8DA66378E2509F77CF6C58A47661738A7E457CC47ED4151F161E1E02D57A8637B5B93E59C5C58892AE1B82A4876D9EDE1BE9101CFFB54D1790717F13AFA747083C5C2F24ED7BF02AF37FC2716AC17C33C7E2D295CB9334BEBC2A1434F6C7CB4A9E33E3664181E249321D3AF120BB5F715B6AF14EE7FED67A03254A5392BADD638B2A0F82B578236FB522FD131B62F9D9DF8178CCC4A8E264A900311C697E2D2C5A9CEE5EBA472FED77C6FC1E62C9CB9694B38265A83DF97DFD228FD4FED9B50AE2FE18C84CCC70A84011623C3CB6BF3E78E9584FE9F644A62A4A69FF60150068FCBED531C8B31F8AF8E524A53316EA06CA3A740E39741B98A473AF6B2D7B9BAD28A2A97691B4157111C278E6C394DADB7588316B4E0BE0C61B0801EED0786E784333BB1D0F98BF8473ACD7E25E6CBE2E19B32AECCA50B31F37AEE29D22BECD3B5DD679E89ABD4552C71CCF0855A6DFD2A1E405B6F3C4E23E1FE1B0A18C943501748E5C9E8056FF68E73987C45CFB895C3327D4B8F995D75A0FA72885D6EA6D4C1B729D8CFAA6BDBACBBFC4B71B0D04191BAAFC57DA448B8C5D7B3BD9BCAF0C952E7C89448A25D209D41D1DBD3D1F4CABB519CE68A3DFCD9A18B3A8ABA01567FAB6950CD543459FEA47539551D6562005CBAE77CEF0113C46545511CB78E90621E67392647264AA74C44A4B876E104D4D0301ABD9BF02D12F178E58613D6FBB9A9A69E7ADFC1EE845651E87C9D1943657519854208AA70BAA708524784924A80927918B6E314BC176770D8C9CB9F2E4A65C804143A402A72C6E90430A9603D6AD71A718A4979AA73D69ADDD9BADBA45479857ADFAA5AEA1D212B55815710B93CE6DBFB8822778B8E03249320829480C050003425A8C683D691CFF34CB71B3CA8A96A2E6A2A5A9422F46DC68613AB2B26A29AAD4FA9E4492DB224F1156D10542248E5CB61CE4A7636560E5AA5B04101B4D68EE7F36342C28865597CEC1A9466125CB80797234F5BF568B0B29D2CAA85B59AEA43F56CA5B1C4DB3CCC0B4A130BFB4049239913BCD1F34C67EA94A9723894B07F68762F5FDD7B7E0C5859EB615E6DEC96F3DA156A2D76A4538C9F2C4258CB784A68DD109242478CDC0572DC993CAF7C43E1B27C54D9FC650A01452E6AC7566B060F517D235AB004BB453798E7EF309729D0B53AF2EE5464D899373236B833E57DF1D4320CB5324244C484877A803C6BEDBC6088356E6FFCD652DB6B5D4051EF42413727C26D3F7C7AED8B6AE7C8C2A56164310024380CC2BE06CF616A54C68BE11C240735706DEF5D45625394F66D9D6B071AAFA9596689052B50721129064C85149881EFF7E2979E66B2427BB0B20A8909094953D6CE079D830D2130926C29BFDA2EAA2CC720D194472AC9E95B4D6B8808ADCC4242CD3140012784A55C7C664784CFBC629333078A9F3828A95C176F9AA0D6F46D3D01B4093C229E66FAD7AD621398E64E54BAA71D756F8513FF00C4AF6E63F9009B0FB3616126D8B5E592C4800ADA8C48A0714F76829B7F17E7F7D21A1B0D3ABEF944BE1933DE10525EE2D806CC404999B79DF13B331B879728A54B44B49FECA2B81BAD5CD2DD3ABFC3A41A90E5C317E97A9BFE0BDA24F9668DD41ABDF6D748C8A4A0491DEAD4128F04DFED7018201BEE663151CE339C2489265CB98CA51674B9E2B5481CC55FAC6F31254556029B507A036BF48B9F2F6BB3AD0AC34CB884E639FAC40470B8B097936B1852609B4EC27CCC731C6CFCC674C5913D6845D2789F8C747A30E571E30CE62F841653BDE8CDE1EDF9B346BAEA9D79AB941B654727C98447086D00B676B0E056D1D7CC1DB0D30B2972D45531E6951ABFCD5D4B976B9A5295864BC5292E09DD80F0B73AFDE358C8B4D643DC3950D7F15CD5525352B795C34EB024A968E25257C53B1B401D7124A0B2B4909EE9201E2481FBDEDA79F2686C310A5062E0AAF514AFD4F23A8F04399EB6CF549FE1EAAB0BA758E0698A669B67844C0054CA4131379DE2F33824616521456996EA56AA3C43C8B815D79C1C44EA7E9F48479668CCFF0032EF6ADE7BEAB42F14A9DA975490A693CC84AD416E7A2648F961E2E722594CBBAD60F0A52924121CB5289A8D5AFD6000973E25CFE624ADD1E90D38D9552AD3A9F3148BA57C54FDDAC5F759E130768B58FBB32A5E618A0AE296707C27E5B2FBC1F6A3539E91BFCA9B1E23E829A6FB7DE19EBF5A675512CB6AFE174A652AA642438427902B48936E7CF7BC62530F952070CC5278A6007E725C3B5684B0D98FA5223F15356976376DBEC75D2911879D0BE2719A4358F2AEA79C78A003BF17028FA98FD99697842861C2C1EA001F8B1F1B56EF0C7BE531AD740DEFEDE3686D7F316E80CD5BA1D53A3C2CC4060A6C405010AF5F899DA4A4E116A50253A9AEFB528370D077C40A54EC5BEBAEDE7686D7B3C61CE20D909E704C586C2E39FC4FBB12F270A6CC6D5A1EBF5DB954C6BDF2D550695029D43F5E74FB43554E7BDDF04B89E1331E20408FDC733EB787F2B02A2E58B8B8009A7D453E958511C531C9E55347F01FE3A4352F5118BAC4F5E2E43CFE64488C394E5EA70E9BDEC006F1A783F9D6151289B1F4FE61B2B752287042C73BF103F8E1DCBC0106897A75DB73F43E1780CA22E6F6B7E7F10D4BD48A9238C473F1263F48C38460554F9091B55ABD1FEFBF28C777CFD3F9844E678AA823F98070CFF5723D0DBA4F2B03D061E49C1949FDA45C9A337AEEDF6A54BEC2A7868EEF5DB7FC5FC2C61BDCCD557858B03FD42DBDB7F4BFCF0E061AA686843DD9BC7DF287D1C3599A94092B163FDC3F138C9C2BD8795BA51ABEDE08D6BCC094AAE08DB7079DBF0E5F0C63F4AE1A85C8D09E7BF9B7DA08C98AC0BE2E2500444091B5FF00630A264A903840A5F60078D61497AF87DE335D40EA09E5E216C1DC294A26E1FA7ABF41F4DE148D6DD5B6D05171016372AB029DE62449DBF59C0708667CACCFA5EA2D572DEF9C118A3306AA41432E48120A4836B9B5E0FBC6D37B63656042032920061517661CE96621B4EB1935EA6FEFDECC183E28140AE345424C120F024A9256A1B10A0653C27CF63B6C70C3172A648E032C128550B6828366D75894C0021DC6FD36B8E7F5893E59ACEBF2D6159457329CE74FBE3BB5E5AF849EED06D679C0A54DF885E6D88DC6E5183987F592268C2E392CA44F413FB83DD23E52F6A8DDE25E5CC09F9549E24D68CD53CFFCC513DAFF00B39E47AAE81CD53D9D14525536DBAFE679536254CA9409406F8882E711927BB4AA22F02D8B0F67FB7799E0F112B2ECC662D9C264E28D133C0607880608614009ADEB1B89095974D7705CB0A6FF006E76158FAAB14EF3A0A90E82D93F6004F101D36FC7CEDBE3E20C8913A610385441A00EC29F4E56ADDE91F59F118E9125DD490DAE86FF006B73715684CA72BE9969450321B4B9FF00CC2D7C30A236238C5A04ED3B1C4F617259D3880124BB12361D5B5F3615E55BC6769B0F21C7789003B90459BF3D5A346659A64F9630AAACD6B594388054A05C48D874040B11FBDCD8B0FD92C4CF1F24B596607E53AD99C0A3B781F2AC623E206130E5415350E9E62AECDA86BEC6295D51ED01A1F23B1A969E750141084AD5E28DC120981B419117DEF8B7E49F08F1B9C1E24CB5A58D5924BBDB9BD29CDFC389FC45F8DF8BC9001815A960BBF02C96B33B37AD772CC23AC3ACFDB12B96B769321A314A83294540712E0F230527D63CCDB6C746CAFE0AE2706B42D6851622852696E83DF28E1F8CF8F19E63C1733920B82CB51E5EFF002F1D76D4BDB8EBCCE8A5751A89F7D2A2BE065A6FBBEE42B70A53647174BDF9F3BF55C93B11272F20CD9292433F12013460E1EDE94D22A38FEDD6719985033E7278BFEE56BF9E81CD2B68A8EB739CEF3A714AAE456D5F19932F3C99044EC09DE76F49BE3AA65D272EC2CB4A3B99492033F08A11C9BDD6F150C4A332C7289563660E225DD458EDFDD61D7C43426469E72A882C650FB6AFFCC52AA1C571CF4E2F2E60F98F27389ED0C8CB292C2268D025012C756615E60B786ADA42E764C5466CF334A8BBA95FC91AB6AD48548D25999108A4EEFF00F538099F45183CE07C0DF0F307DAB4628006530AD1CFE3ADC3BD0087E8CFE5CD0C58BD49241F520B06FAF36852D692CC385C76A0329EEF8424171A4C9263FB8191F1BFAE24BFD6F0CA21012A49554B851E66C3D39439978BC34EFDC94101E85BA7D768CB30D179DB9429AAA32CC0FB49EFD904806F04A81EB6DF7EB8653F38C1AD6649242CEA50A6259EE4352D4859385C0CD1C4532EA4172C585AAFADEBE2690F5A734057E64D30AA94A5AA51C4730702D2AB054A6E93E1E60F0D8F989C406639D7E854132144A9764F86DAD6CF5D21B626661301592122CECD4622F46AD6BF7A43FE7799651A5DB396641C2B70A7856EA0788280BF8A09DC9D8EF6B622E463E76366056252A59249E024B002C0D9CF514AF323546768482134E747A57933D7C1DB56A8EAF37CC8D438AA90A71970F8D2A32A50E5C24CA844990244018B1C89F44B27800601A8D6F036D6B67DE1519DCB200501E2CC5EB6228CDEE91B586691C5216F952D959114E38B8812481712AFB5F95B7C490CC0CB04710068C68767D41B6946B0BB46A71F254A07840511BBD2F5F0D398B345A5A7B4E52E5684E6D99AE19580ACB185927BB800B9379B9FEEDE3D6299DA2CC2662E60952145453FBF841ABDABAFF815863889A998414A425EB4F1DB9FDD9A10E7DA95556FA90B3FC9448480610001174A77B81FB3891C872F993129529152410E2A3CC5295637F366CE6A37BF845339AD7F7F52F9AE7434DB5FFCA5E37FB51C246F6FC76C74C9197C844B96A44B4A94C4AC1A11B5E97F2DDED9E1E1153C3B58BEA7F930C748F56E6358DD1D1503952952827BF01400E222E4C5F97CFD31179A6351824B23852402D50FF8B35AD188BCF23D03956414DFC5B3BA865C7DF095B2C2928968A4788113CED756C67C8E2818BCE711899BC082A213422B6D6D4A0D7784E669E3F68E730D45F5D49A4CB406DA48290A6BC00804DE131BC7E00E25F299299A7BC9E1C83FDD5D3636E7AF22E634249A3D36FA7979727AC4442D4C970BAE2540901C4900A957EBBF53FB8C59952E4147CA8482D7A5B96963B0D2EF1903E663CDFC9E1C28281FCCD696F2CA25F093E271415C3732480A1C36DFA1E98A8E6D8C1872A12D40B39A1ADB6A9A07BFE4C6B164657A4725CA50BCC73A790EBE8095374A91F6940494F0A099320EE3CB738A54DCD264D532D642483F315370D767AD74ADDC42D2A6A50E09620382F5A93E57EA2F0B135FAA3533E9A1D3944ACAF2E42B816F1010148062656944D81BCF48C5731B8E9C14AE07984E9FBADEFD758DD7890A003EE6ECFB83A6AD489454645A5F4C334F5598BC8CC739502A5124ABBA7073201503276DAF7C34C3E231B3A6F0AA42F84D2C751CC396D6CD7B4305A8A892FD36F2F65A19731D675B99B2BA64B6453A13C2DA5A1C32361050013E7E7D77C742C9F2CC3293C4B484294CE144DAE4B28D2BA72B690D264B54C2017A390296E6435BC341B430E41936699EBF56A710ED253D2A9257DE9528B895CDD25571B5E397BB0E33DC26070E990254D4AA64C7F9501C820589492CD5A529CC424652921418B26E5C83E1FC52FE32DFABE9BC97C41BEF2BC5C2D456A057B4C1246F7F5F8E2224E0A628B5810E4004D08A3D6E45BD2350417176BD4B8E5B7A1F4864CDF3FCCF38EE997DC2CD352F10A7436AEEC10AB10AEEF878B6047145E4811898C26532A592B4CBAADB894AF9AD66E276F2B3D636330292E406D0DB7D2E756F015A4459C71B6892577EA5444D8F9DF6E7D7DC276560410DC3660EDBB696D81D4D810635AEA7AFBAC37B99BB4CFDA583C5CCF4079DEFEEB6E67A49C9CB8948012FB966D0335FD6F0DE7A0A8063E1D2D5FB75AC30D6EA1607142C2605A1511F0FF7B79E2464654A2DC487AB501A574BB8EB4AC35EE14C75B785DEC69A5493C8443731D44D150E250E70499F7DB90F3307CB13527292C192D4AD3EA7C3F98C890A1FB8172FEC445EAF50B4A9870081D773BF336D8DFAFA5E425654A7608A167A6C18354BEE3703CF412964870D5DF476D1FDBE95860A8D42D7FCDD89FEAFBA76E7B6C6D896C3E50A2E782BD356E5CB95BA3079213C3C4E18500ABEEF4AFBEB0D2FEA36D323BDEB7E2549BED161D7E76B6245193F100F2F95A8FADC1FCF5870DCBDFB3EB0D2EEA141301C9FFEA3637E5C5F2E5EFC381939000EEC9ADDB4DED7FC6B04225E7EDC1FE61F39511CFC893F324F3C3A464FC207FB6FE14B73A7BA410DEFE7CD9E11DE1E67ED91F71FDF9F25464C546881E1414B682B530E246B4A7E34F7E9AA6FE3ADFF00CC57FF00E457E78DBFD157FF001FFDC7F30E23919E36777543FF00EE1FFB8631FE8CA76E1ADEE6DD5E08528CF51B1709B5A547EEE21F2F7E30AC98D886B356C2D4A182370CE9300A5C2379851EB6B138426654514E177F06F16F75F1511AF87BF585EC6728FF009849E9C5D49F3B587BAF384C601418701A9156B3D39EEEC7561A39521C539B2146EAB73BF96DBFDF8D7F46520B259AD6F6FC818215B15EDF1020A44F21CED3D7F51842661D4456D63F6D7D5F94652A29FBC2DFADA5704116BC0249F4F2B0E76F761BAF0E0A5495241705BAB52A5F958DDFC5E49C404A48258BD0687C7F8FABC6F6EA87507FBAF7B100585EC3CBDC714BC664D8CEFB8DD5DD951219E82FE03DD2A21F4BC4A0D8B6FB1B31AF8D8DADAC3FE539A54D02955B40E115D4E4162482D142A03A1683FCB5CA0C0E206390E78595270F3A48C34F40285065814571519943E60C58B067E7123271001704380C09E6075AFF0036BC7BF3AC7B66D1FA494E135ACADD6F8BF969741937E84CF29B1906048C7CAECA7B258D5A920E196F7FDAA0FE83C4F531EF1CEBB7580085706312431FEE1F9DABB1B4757B5DFB5DBF5C86A9F4FA02035DE25C5226564D9264A790E9D37B63B1767BB0AEA4AE7492C4070DFB480696FB0D2C63887693B7EC17DDCF0407019635E43AEC7C2D1D5FD45DAAEBDD64FA9A554D4B2D3AA2375253076E968F3DC6E37C763CA3B1D9722524CC4A12C3E674876E76B695BB33C70ACF3E206378C844D5A81268146A1C9F7F48853F9054370F6719829D2FC90AEFB8CB7175484ACDC83CC7E38B7E06760B23491839299A411C4C86236D3D436BCA2A0BED5CCC7A9B1897FF00885973A58973F52E29C92BB4FA36851C7519B87D699259EE9627AA78879DA6D6E9CA6E5E6F89C6D25E0B80287EF6700F88DCDFC2AF1B8CCF0F313F2E1D24E8CC2B6D35B68D76D21A1CD6BA4E81696D8CAD2667C6A755FCC0911212A16117813F09C292F2CC66255FEECDE02BA049400D5A07363E760FCD2999868892C75BEDD2BBBB6F4168459876AF96D1B455474CC36A1BC14AF6B8DC6F613313E71189C93D869F8801E729955A24B7938ABE9ECB338CC52D8CB4A9AE4077DB4AFB1CE2BDAEEDFABDB52D287596D2926490D2605A2640F88EA22F3890C37C2C389502A9856D5FDA4B750E6BE7D1E1D61B28C5672E161496620170FCEF5B6ADAF843731F685A900977326DA039A4208DB62523CBDDD799B5603E142920140528D4905045056CDE3604D77874AEC74E92FF00EE1009A51886EB42E7AB8A369100CDBB7EFACB8C0FAFAAA5B1C657C2E16529B5AE08076DC0B0F22709E61D959395A4A66A9285D8829009E8EF4E5CEF1A8ECE62921452A5280AB0734EBCFEE41BC4F3B2DD59A9FB4BCE11419526A0E56D2D3DE3A9714A6B845CCAC9E1DC1FEADE6D7C736CF0230A0A829013BB25CB1664B3B9B7DC434998799875042A694AB4049A1A316704EDFC476FABB3CFF0F50AB4FE584A2A8B694D7B9DE71C92014F0A892266C4249DEF7DAB581C1CBCCF10578850013FF4C287EDA005EEEE2DA588A40AC14C989056A25DEF527CF5A1ABECD1515467148DBCAA62A2ED72D478944AB72646E623DF318B6C8C830F2C02569E1BBF981AFD2DD2B0DCE5938170694AB1A8D2A2DA3741D23706DCAF7A8A9A991DED792AEEDB4DC2A6E66011617B8D88F3C63112F05212409C800025DC1B03ABBE9AD74E9AFE82671001449E8C697D7AD0B7A87B7F28D3993E4544732CDD4DAF36E12A452954C2AF7B4A4181B102F8A5E3F138898B230C82A92927E70E3A535EAFD378789C1AD20294B246DA8A01A5EEDE0CE22BACEB573CF1ACFADA9490084D1308F106D3B1FB13B8BDF7F8C4CF65F2D56625467A3F6915533EBA9BB336EDAB340A32A4D0CC0496A3B9BF3AFA1881566A25B74A43A92A75C308812A99816BFAC799C5C96309971212B438FED76F20CF72DCBC28A04952428541D7E9E75FADAB0F9A7BB38ADD4494E699C2D4CE5E921684AFC1C693720494A8F2E477F3931B89ED194132A5B296A042529A8B6A459F991EA2123365A4B15007626F7FC74E7168A6A72ED374668F4CD232FBA94F0B8EA8A0293D482EDCDE763E5CE0577103118F5257892A72E529721AA2EC454EA2BF58732D132601DD825F502876D0B5EFAF237AD734A8ADABA89A9AA5ADC7092E3409086AE6C9E1F09B1B91E5BE25B2AC9A432A6CD02805E8ECEE0EE079BC253A52D052160A5ECE3F9DC74BD617656DA8A85252216A71C84850429504DA660F53CFE42C9E2F1185C1F1095312549B80A17D0BBD6D6D3EA8CC065D5747ABEF6E9E9F58B032DECDFEA4A39AEA1A8029DD85B2D12018173C412411331045E0E2A38BED5AA52952788D1C392D7722E2A0FE63596D33F655B6D3C36D983562734F9837DC8A1D3F40142380BE940213CA78949BEFD794623518A4E378A6AE6710350E77E4E6DB39A6B1998B4A4F091C2545AAD5A3B6C2A3434A3DE36D1E9AA3CBCBB9B67B541E7D10B6698A8DCF310959102C208BFC31178BCB06371084E1A61E00FC6A14096A8D6AF57A7833B33C515A0029716A8D7E9F5B0A8611AEBB58E6D9B32AA1CAE91BCB291A051DF24B60A9239FD94933C3313BEF899C064986C214CC9FFEE2B73AEF434AFDED0D133575150CCE29E429D2B70FE706A4C9B32CD2B1D6689D5D63C149FAD2DC909493241415CA4DB7E13EB737B14CC56598792FDC21C0D05475000724599FD21CA160B82A1BDFEA7CAFD22CBA0A1A0D254E1DCE50876A0890810BBDCC4A245AC36E700E2AD9863664E495E102920B874B87D03A41715FC720E5065A4FCC43806C41D8F4D79BD9CDA23F9CEB87AA5484D2D3A68E9FC4105011FCD02D0A80088E5C5EE1318C64985C5E2262953C2D4090DC4E48E94A5F47F178618C9B2C2992B751A000B123A7B6F07887D5E7A5C3C6F360CDCA94B13BEF1CF6E5F8DAE585C192689D589FA0B1BD6B5F0061B9933420AB84807521FF0087F17FA447EB73E652905A792557949504F0CF2127C899B49C5870997AD4C384814D2A4935FE6EEFA330D5089C43B384D8B1A3BBD1ABA9B52B101CDF5496F8A1C0627FA80B6FC8FA6E7EEB58246553385F80B51BE5D29E36BD34A42467252A62B0145831F16E5BFB3104A9D56A755FF140E136F10BEF1B917E53EEDEC6C183CB0949796F673F6A73D1FCAF0F25CB2B62490E1DD9DC54F833D2CEFB445EBB51B92A3DF0B72E31CFD081F9E2625654A2CD2AA6D4361BBDACCCEDCAD0B19029F35AEFA74888665A91C2A402EDAE6CB11F7824F3E7EFC4BE1F2B98C0196CC2B4D99F7F4F38D44820B3B0F7CDC9F088BD5EA35AB77A081FDE09336D81FDF5BDA465656A0C44B735D1A966B72F7AE5586AF102CF62DC98DCB69AE85E23D53A85DE4E026E7ED475E84CFEEF7C4DE172DBBCAA1D83FF00FB7F9AEB511B09640147275D76D74A35294B986A7F50BC2DDE4DCCF8891CED73E6791E5D70FD3966BC1E9BEEC0F3E7B178CF028E9EC7A7B1B874275039C4AF1CEDCC7CEFCF0E519726A0A1DB71F753728381434FA7E634AF3E7099EF08DCEF73E5BF2DB0E13972187C9C8D016F27F483815B7A884AACF56A375931CC2B693CFDFD3DF8C2F02948FDBC2D761A0A0A836F621442141C949D3EF1C7F1B56DC67AEF68EB311843F4D2FF00E5EBFCC1C497670FB4033C5F270DED3C604FE3F2F96373824B71105AF51F9A42810A21C0710A919DAEC7BC2473F10178E7CB9FE58D5385973094A594D46BB574D746A0FAC618BB6BE10A5ACED6A27F983FEA120499BCFEE309CECBF87E6200480C5C33BEEE2CEFB3C6E3E43F3538980F53EFAC3AB19D2A44B824EDE2DFE7E7F7CC6E19AF06548744BE2A35001EEE1F91703585C4B5A83A524F4F7EDE1F28F3852F8897072E7F2DCCDFDDF2C436324F700712784A8D396F435F2DEB1AA814FEE0DD61F98CCD500F18F5E21E5E639EC797CB117FA79AB2549415234228FD2952F52CF0977892581726C07376D46DBC3E51E653214A06C902E0FDA1E5BC193C845BD1A9C2198A0B52486771B1D76F7CE349A569524B108A574E7EC08764D428414AC137240222E041B7974EB718D664A49490A48200356B68FBBFF9E70B49C428D2DA6EED52DFCF833B43AD354ADCE249516E9AC5F7044A4FF48091E2326D6DB9CEE2B98ACA2522677A164A892A096D056F6A1E8FD686564CC55DE8343B86B54FB6DEBDD07F2A7EB966BB51E68B78995AD25D5113B9B0599BCEDB472E7E6F464597E1788CAC3A54117FF6DADD534E7FC3C6ABCDF3458FF7315354FA712ABB0725F4EB5DA1A2B750E92CA94D37474C2B1E1C414AE35A4A08D8DECA2623A8B47338778693C7300972C4B492001C352D46259EFB986ABC5E22692264C511FF00A8D5C5E95A7AC46F39ED12A92C292D25AA66384880947104C750028DFCFD2716FC176566E2D940A9054DA16ADF61B16FBC32323BD72A0E75700FD4D77B52298CD7B44A36D6A51CE9548A24F1A1495381DF20552940126E3FDAC69EC4E270252BEED5890B63FB2CC694A8FCF3786D332B54F520CB1C201B8DBA1E6CD5D62AFD41DAD65B468529354DBAB0492B2E804F9F093607CF963A3767BB2A7112D972532980705007D40AD35A08B5E579384201980A8D3A790D9DFC2B14E673DB930E3ECADB5B95350CA5D4B0594AD5DD29C0526528078A7948E56C48E65D93C1226C84F7D2E59E2A80D70A17636A72AEE6A5DE27052D2582343A01663EB5ABFDA2AD7BB48D5CB52BEAABAEA976A164A58348F2001C5207196E0083126398E78E9995765B2E19795AA6C952932C70A8CC4248201AF0F103FE1ECD19C1CB44B5FCD2D240342C0F3367B3E9D4421AB63B57CF9756E8C8D4D53381B97175CCB5208B1E12A4949EA2079F5C46644BC164B8D9DFAB216852FE43C25693C2589F95D88BF9178BB607F4C8427BB090A57EE0CCDA8AB7956ECEFAB4BBA27B48AAA734EE5336D33B92ACC1827726092E037B8DFD31D025768FB349E29AA2A134821291216C4B14D592C295F3F04F345A5212124352CA0DB55893ED891689B766DECFDDA4F6919DD26554CD2A8A868D73985621E6DF4069638941442884CA0280BE3CC1F17338929C4F7B257C1296A2C0382A721B84382CFB0B448E5C70EAC24E2A092A09BD284397D6C6F67A8AC7A7DA732DC97B11D3597E8CD2450BA9792539954777C4E3AA0429D8717C4A4DCB9B28C0F28C732C0652ACDD2AC5E632CF73874954849510FC42A48043EF5D758E17DA5CC38735484CD1598CA00528A037E571EAD0B17574798B952FF7AA6DA2106882B88A90E11FE638D47C4A0573F6CDA60784E18E132F3FA99812582154140E03D035D9BC46A6F12D9866024E1B0E65A5C902DD2A7AF3A6A6F11F6B2319957A5145C55554A5C2D494A884A64026448FB26E7CB7C587198708C1A953A67720268A26F7602BBE839C62566A66CB09EE6AD550D49AEDEB6D748BBE82874FE81A46B32013559F54B6A4788A8FD50A93DDDC2894F882B9C4103D31CA55226E231AB95326A9520AC10AE2FDCC5EC0D3437ADAD48C2E7CDE207BB2923400D1FC3A78F898ACB39CD5D6C56875E50AE9E342F8E5203B2B03864A620C6DD77C752C065B2A64AC3B04AA5AD2C4F0B31096AEB53F4BEE86231844B50E0341CEFB6D5FAC4332646679EACD1D0D2386A9A59FACD4AC12921C24A080B1C161CD24FADF1B2BB9CA933921494853948000239DDC97F6CD151527158AC424A4AC242EBE63A73FC345B796690D3D90B09AFD50A45555C05B68BC0526F109907E1D3DFCFB1737118BC4998952D48E3372AA5580772FBBBF95A2F5875265E184B27E7296A80F47D34EA35F44B9F6B2A8AE0C50D2B41BA06F8D14CB6CF006D077E2E10999B7DAB75DB13D95CBC261B8A7CC03BC980099C5524A4101817029A8BE9568AD4FC1E2A6CFE21C5C014E1BC4D34F77A9784B8E3C1F0DB6B72A9D70C70B7C52924F3299D846F3D622E5FCEC5485281484B519A81AD7F3A5045EB275CAC34B4A2704B902EC7424FE3E9BC58F90E81AF75BFE259BBA9A3CB602DE715C2A7109DE128FF88B9D8C030664E21339ED0A30F2D586904F785268976700EA0303AFF22233B438B44C9F27B9E1090A62D5A53C6F5DAEF6898399DE9FCA194D1E94A0EFDE309566DC2A52F8A409FABAD2A32488B72BE39F65AB9B8C9F34CE9C4A492482AB55C7CC4D3D3C19A1C66186C24EC24A2A9C996AE0A92D570FBD74AB0E5A339655A673BCD07D6F52D7C65EF0E26B8949417920DC774950537C361B49911B1C37CEF0CBC54F1230C851EEC8E352412002037CC28AB5DCF50042DD9CCAB2CE19AB9B8D965C5124A5F5A371120F2EA7585359A8E9B4F28E55903086A980E15D42871957532E5F73C8EDE78B4E51D9996AC27793D4AE34A5D280EEE41D9B9162348AF768A4C9938B47E9A7A540289201150FB8366A5F95223158F1CD1C52A9C3B53528238D0952F856A5ED00022D3CB7F29C3695227E0674C13414A41F9490051B525B98D2369C50B912C149058B3D74E61AA36B73A3C8B25D159916C667AA6A92C65691C69A2942145226CA285070C98DC6C79E1BCFCC4AE67712945531F404A438FF0090A1A6C74DE23BBA0012452C2F5AB3D6DEED78DF5FA8F26A40963226C36CB414145208593112A52BC44C89B9C38C3C99EB09131454A2CEE1C1F3F00F71F56137E42A2091B1777636F7D6D4101CDF55B8B90B5156FF0068CFDFB79EC36C5AF2FCB52B002E502555228CE395BF35B4305AA6EB3157BF9B0BD2FE3E1100AED4C9511C64240E28D87C36F9F4E98B7E0F2B4253C294840236AE8C6C37D0FDA23D52B1137198758528252A0540BB2AA3C3ABC42B35D4CD99977C239050006FB41FC39EE312B96646A52D4E93C2F4241E7607E9B3523A6E3F1386958194C8485F08726EEC1EFA9F0E9726BACD751B6784A5D2278A7C647A7300EC63D2D7C5CB099294948E0F9410E0A76B7BDCEF11996CF958B97380482A4A5836E41F33D0D6E62BECC73D016497491267C66E26799803A7511EFB449C0012EA803421BD34BEAF6715B452733C24E46352A4F184859A6843F56DDFAD2B10CAFCFD2A20A5E3CC471458ED3CCEF6368E932313380CB93F334B00534A8F4B8BEB16F12C0C34B2470AB87CFF00C9D1FCCB3C72AB3C041FE7122F038CFE727F1BD8DCE2764E5E0542075007833D3A8D28CD68D00510351B5BDBE86AD11DADCE92A2901C2626E556B8DB97DF389291800E494826971D3D4E9A52D0B212096D05C75B577E4F0C2FE6E9B8EF0C8907C47EFB8BD80FC30F9182096F901A12C45697723A3FD68C21CA659507B253B877360DD3D986E566817B393BF3B01BDED249F2E7F3752F08003F280C6D46E9BD3FCEA61544B4921C13BDF6E51A1CCC904005C1CC8827F318553866D007E87DFA9BC2DDD207F68FC7B6D6B081DCC900CF1C5C8E511F1BFEFDCB0C3A3500F4FF00023532050D4036603DFD3531ABF89A3FE67DDFF763612258B068D7B81FF23E5182F366D304AF6E7E667CE22206FBE37FD089E93F2920820330E7B6FAFDC08732D80EEF878B8A8E0506CFB0D2E3D04708CDDB5184ACDFA9B0F53F95C93388F3D9E0999DEA945DDD9B47D6A7C2EECD08E2BB3C427BF132AAF9C241AB01D76E6232733147085779F3B9F77CA6FCB71872BCB4CE0100708662406BD09D0FD39B5619E1A64C4FFB2A964B1E106951636DC55F42F66781ACDD04C0548039288BC5BF1EB6EB8424640308B334AD4A51735A00FA5F6B7D7589BFF4542657EA0CC0EDC412CE6AE483D3F9856C57000A8BA46DB133D7D48F5B8C6715844E29065A2E2F4B3353404BFAEB48ABE3A64D9B31294A58254D66074D28FE62B5B557B79924812B320F3511F1826E2C6E6FEF386D86C0F7482820716A2AE0396D2A3F1168C9CA12825601F946BAEE5FED7E6D0F9439A24260ACC7FEA3D6D6F758CDFD6062A1DADC02D430E65820F128A881CF561D7EAC62333A50AF754D4B56AD43F4F6D0FECE6D0532E1B40B289036FC87CC72C39C0604A7088F943B397DF4B83E15D75884CB92A5CC2555622E79EA2E7F160CCD25A4CD53F694E9D8589DBCEC418DE399EBBE19CDC2B4D989090D4F3AFABF96D58B062A48084828D9F57736FA1A75DE25F9766A92412EC8B58C1F84FE5F9E22F158321D9246DE7BEFEC0AB06A895F351343CF93EEFEEA369652D7B6A0003CC4DF7B8F744131BC7CB1018AC3109502284353DD8EC2BA8A43F961980B0B8B6EDCBA6DEA7B219EEAB6E95A5FD62B0F0806C571EBCEDF87AC1C72BC364431A383B8097A12C1ABB9603936E213329C38A0BFF817E7B34509AABB4FC8B2921C6EB5282AE3E200970A88D801E254CF48FBB13384EC54B94A0B52425AA03020D5CFA7D1ED1852284804DADA55AAFBFBD5A98CCBB5ACFF00523A6834D52D5D53CB3C083DCBA841262095291C31026E408DF7BDA70E8C0E5AC26A524A06AC2DB780E605232A94A007C8DC562EED67A7F35D233A0EC93B5CD48976AF515635A7A8442D9529DA6796F21775F842C2D25201DFDD87A3B7B9660D6654AC08C42D343721F467497A11AD76891C3144A523BC20F17200FA8FB574A3337E61D99766590A8AF54EAA566D5693E3A5E07D94A9437485A16537DA45B99B4E2532FED1E6F9DA972B2FCACC94AE9DEA48F945DD8A6BB7D22E9829B2152E8D50DC3EEE3E9F46AFF13F649A51B7579369168D414CA2A9CAE5BC5C52365869DE28F3040BE37C4762F3DC462A54EC4E2662F88BB04B04837143CEEE6C4C31CC70A99C7FDB04390CCF770EE6FD0559F68ADB3CF683CC909AC5E5E28E99B69486E998FA95328A78CF008516E7722E76BF58C5F51D91CB30180188C7198E99654B3DFCC40E24A5C538DAFCBAB5838CAB26C4CF530043B3029A9028EF5EB6FE7BE5D867B04FB587B54F665936BFD1144AABCBF35EFD65D69DA461BE14BA529E1515A4288023C33067AC63C6FF0012FF00A98EC8FC38CDE7652BC5A0622528A4CB215319AB555454784770EC87C1FCC7B4B2FBC9485814F980671E8D51FC459751F429FB6CD45452B4F65D54D31DEA4BE456529051C60AB67B98B48EBEFC5070BFD73F64BB95A573D05C3026517773AF07BA458B35FE9CF374AD053C6F6142D701D9F5ABFADE3D1DECBFE8BAEDDBB30D1D4995E4795AC6639B3406A2AB5BCC2DC694CDDA8EF16A32A25425044F4338E2BDB5FEAC7B399EE6527101626092B265B9525290A6770C0286DB1DAD133967F4E59AA3018842B8D948621AA684DDDE8F60F6D68F49EBBF649ED5F48769DA6742E7D95139CEB535634C294E324BAAA26B8EAE405148DEDC660D809938B8647FD47E418ACB674EE20512509EF439B90426C059BABBC79E7B4FFD3AE689CE25A5D65E691FB08FEE6707E9A3D445AB4BF46CFB42D49425ECA96D0A920BA0394E4348DD3052ABCA6F6F43B628B3BFA9BC9938B5CC1352895C44035B24B7ED6E46F78E8723FA6ACCD78592172D7314100D53472295FA9BB7888B7B25FA3E7B5BD1D4119564FF005DCD5D480B2B5B03855104F8C916079100C5F0AE69FD4A767333C2A513310489696484F125C9A87600383BD2D4D636C2FF004F58FC3CE32D724872CDC20B8D03D7DF9C573AB7E8FAF68259733472856DD3298A9AACDA5C615DCA699B53AD0482A9B84C7839D8CF3A8E5DF1E32C9D984A0AC50095CC4A5142CE4802CF476BB5EBAB4BE3BE044FC2E11734C83F2A492E8B53EBAF2B39B4744F2EECD7501A8CCAAB523BDDD0D3551A7714A292AFF2EF29920A428AF7411CFD71EBBECEF6E138BC04AE01C4B9B2819600DD2FC4ED4F2D3908F3F768BB1C8C04F54B5B009514970D50762E7CC7D627398E63419027EA790D334964A10972A470852884813E283636DF9623B1B8FC5E2672153D478CACFCA280026D60F436BE94D6B53728918596B52784FCAEEC36BBDCEFE1B56203579AA5F59FAD2D55255B24491799802474D8751B5B173C065F2D7850B253C5C37200D9CBF56DCEFAC51B138952311C01C241621C806A1ABF7AB6BBC2FC9B4A6739FA9C396B4A6B2F4149AD5BA9EEC2127EC96FBD00AC58CF0131BF4C54B37C48C24E1282C3AC901296502C6AE4394D09201009D00B45C30064AE4B9090403767B0E5F48B532B4767BA3592D102BB3822E9521D514B906627893BF4076F53886188C66266097DEF75243712A84A86A286E6A09B51E915DCE731FD33940248240009607951BA73E6D1853516A1D615AA7D2E2B2FCBA9552DAD5C21086D7BFF002CF0F78142C2C626D18639B63158541938792672A6063303922E2AC091D7AEF15CC3663331934959258B81A07D68D600D0FA3B89AF0698D2D4E56C5334FE6FC278F3499471C183F5720A01E5B743BC1C4365D819C95F7D3B8932D45D726A14AD5B881A35ED53A6CEF33C262B3195DDE1E72D2A01833967ADC569ADEFB88ACF33CE2B3317D6E5456283DC47EA8A49E04BE09F100DA4A528E110088E5318B4CACFE46101C3CACBC84964925D4A0DAB94B91AD7C394060FB2F9CC8529671B3B84D59D41C07A5FC8D3D5A0A5C83526A501971AEE196E097C70994820CC88B408DE60C1F39FC267B83C220CE501C4A0590FA9B86D0BEE2FA343B3956324CD42E6CE5AD94092A2FAD6E59B975E5135A77B2BD254EDB3488455E6CD24F79C5B2957224AA5361F740E78AFE27319B9CCE99C492251344F0B1AE8EDCAE0DFAD2CE71495C9972825949001377207F1B7E62079FEADACCD5E2ED5552997D3B5189088B08E2042222E3A89C39C1654785294228F43725DCDEEE1FEB5308124B925CF3E7B69CE20799EA4A5612820043EA90FA7886FC8CDC13CB9F9EF8B7E03252A524A935A55BC0D5C3FF30D4827881AD68F773FCF8DEF15FE6DAB1A1C44293BC0F101B9F2B8FC63D062F797E48470B259AF4FAD74F65A1232DC07152FD1BAB50DFCAF48AD33DD521CEEC36EA418513E21279D8137B6F63E6631273302A9588C3A384B2D55A74BB35C1D3A8112D9765C898854D203A6ACDB68F6F0B6A62B2CD753B8B2A0974285C1215BC7483CBE5E7B63A461B2F9186972D53120384DC35C36ACF43CBAD0C46666B9B3C2D087570529CAD61BF3FBC40EB351BA54415CC722BDA3AF3FDFA9167C365F2972C2D0010402384392FD1F573F8A46BD9533533D52D692C540317B3DAB7BB50DF42C222798EA074951EF02A761C516DF91DF636E9B6109582519CB41140450587B6FF348B567995210A93338402AAD03EDA003DDD8C44DFCF5D244AF7079DA7EE9371FB8C5AB0780EE9344B95004783BBD0BEF7109AE4714B4252C03063C837D3D5A186B33C74AACA2520112153EE1D27D2F7E5B4ACBC1AADC229C8F4D05858EF51D124E1406E2A91AF95181E5E3CA19979BB8A90A5445C5FC8F9C74E62DD36C3C460CA4B101EF4FAB51A95DFAD4C3A97877341437A7F3EB0DF519BAA6CB85007FAB7B7AC7422FD075C3B4614901869F96D7DEFAC3A12000346BDF573BF88AFD2A959CD5C5154ACC0E40FE33E44EE4018752F0459CD01F60D6BE1D616461F4097D6B46E752F4FBD0462E664AFEE5DA62F1F8DFDDBE161826B26D46625C697FA53D046E70E59CA03757F1BD3C5A123B9829444A95F133CF19FD116A20F93FD49BFA368F5C770FFD8EDE2DEB1A85728FF52EDB9981F3FCF18FD1285D247FFA47DC08C19005E581D7FCC62AAA539CC9888337F7F23B7C2FCE709CCC44BC1944A586E270E457F1AB75A68D0BCB4265A492900914047A83A50EE2F7BC02ACA08014491B9076E77106F1D63EFC48A1099C90A0C41A8E6799A6E2FAE9681299D354000A52491462CDD756F61E35BB982D447888BC448BF49DB9F90DF0D1139026141961206B7048FA0D776F387F3B2E912A57794E221D98120F9BD6DB73856C3EA4A544ABC46F79F8F9EF617116E9853152D465ABBB62520B10D40472F7AC442FBC532524948705B67EB407939FB70ACD5482471F0DC820AA0D89E46E3DFF007401179361A64C9738CD4170A277B13E54FCB40BCB810998104F139701F913B52CE2D0EACE66B21104C9DA3981B91E97F3B79E1A6608561710084FEE34DCB03777D3C29A3C3544B5E1C28005B7D00DBC2961E20830EAD666E20825563E640B4F537F873BCE1BE232F4E3D09F95DAACCF5FAE9CFD68C710833ECE6C4DCBF81A79EDD19EA97355909E254CF98DE663CFD26DF18D3F41DC4B292914140DBD35D687CFC94C1604A5567259CF2AB1A8B575A8DDA2434D9A2B652FED6C26F6EB11163B5BE2710EBC110B52B86A76A86B0B1B736DC6B594C4C970070B90CD5FBB816160695A0897E599A2E5202FA589DFE307F1C4662B04A20921CB5473D77E85F9814868249492FF002BB102FEB6F7B3458393E64A58582AB2787FAC1FBFDF7E5CE3158C661BFEC2F5F99ADE15D7A575AC2A896439BD9852AC4BEB1AA95BED3BB4FABEEA8D87E8E8DC5417950070C6F0A026C3CEF3BE2898C9F86CAD049280946819C54B52EFF61E6A892AA0B3EDA791A7E62C7A0EC034D64094661DA0E6C9AD7C80E53305C20A08BAC10DAC83E844748B6206676B26E2499584415D6ABAA7836A1BBDAFD79EE24F0A5492C4534AD399AD1ADFE21C337D75A5B4C512E8B48B5474CA690529714CB6A5981B853A8E29F7CDC1C3CC364F8DCDC714E0B592494B3A58DAC3E9D7A46BC0EE52E0747B5ABA30D472B475AF51F6C59AA96F2330A9714B54FD58A1E5251CC2A1283C207AF96F8BFE43D84537793A4F11A28F121CD37D69D4EDD59CFC3CF5AD250E438AFA5B93781A36FD6DD55AFABAB5E73EB4D2DF4A8F857DE1B0246F17239C4F43EBDA7B23904AC2A4A512932CBFEE2069C8B52F5163CAD6DCA708B0904A8956A2BA695A3F5A54ED15C6639A3CD394D58BCD3B84A43850C4779F68006402608F39BF96D7D3819331425094028302A34E27346068D7A5A2DB86C38580172DC9E16511FB18EC68417F30D488857EA6CB154F507EB1F58AC514F842549248513204401CE7D7A62A7DBDECC77F92E289C40C30EE54CAE2BFCA6A5886F16F48EB9D92C9F0D3D72C280D2AC391A5F60DA72B47E80DF413E62DE61F47FF0064E92D04BED8CEBBD709971415992C2428993610624F4B5B1F9B9FEA872F9B967C4CCF659C519E81353C0B27E5A26C1C90EFE7A47B93E15E5F87C160125084A8D2C91CF46DB773473B47B3A0212121490BDE2C3CBCA4F203D27738F33489C661583352E08A3B372BFB6DE3A6E63DD95A099009E497722CF46DADBEF53AEB94534C5688111E1005EF1BF972B73C45E284C9988969188FEE70CDB8D8DFCAB611218432C4951320370A87084835E122AC3CDED48F25BDAB2B6BBFFC5E7B3204B24203FA9803C3B4D322796F020FC71DE3B31842BC927A913C02657CC2F50926B6E82D51CABC1FB50A9433843E0C319AE0B3595436D77FABC7AB54E7868284A129054C3455E1927C099E53F198F2DF1C2F379B8C958F98254C51489847083407888D7DDC476BC8F0D859D97CA54C9284932D2C0A43DB524736AEBBC2E14EC8325092B804D85CC5BC85B903EE8C4A499D3D5201571061B9A96F0D796BA188E9D81C01C67089681534606CE76DCFE221FAF1B791A6B3BA86929E16B26CD14E3600F19144F70DE0C41BC5C6263229AF8AC3A66A8F12B1128A0D411FEE0241B1F173F730DDB6C1E1B0F934F9D2A5241125668904512696DDFC0C7C74EAAD78F54E7BA8E85D2AA7E0CE730484892920573C36063D3A5B9463EB17C2DC189F9560F8940FFB32D9D8FF006063BFDC9A88F8FF00F15FB55FA4CE3112C0349CB000A37CDEEDE1486BA4CA737D595F4F4F44DB8780F0F72A96D3565C8BF784009E1113E2C745CE30586C1CA56257313FED8E23C243F9024B1D5A9CC473BC1E74BCD148929155B301FF00736BF6E717552765234BD3B75F9DE4B505D653C6DB050EAD92A5899FAD2525B3C8DCF5F7F3F5FC43C221472F958D4495717013C40A85588E17DAACC0EB68B3CFEC362E64838B3216470F1F10496B3D4FD47942456619FE7B52D653434DF51A7A7E24B25A42528602A64ADC484A5E9E8A51E1B6D189B09C0FE8E6637BD0B9B39214B593C5C647ED29492787C39C73A9D8D9F84C5FE94B8659480EC4176F176B7D3495E4DA0E93295A733CE72F7350D7892EA69D2E28B4A3211C4194AC1DC6F698B6397E6FDAC95809CA9499E996A0AB93A38DF96B70E6F17DC0F62B159EE1FBD44952F892FF00B5EFD0381C9FC18D63BAA6BB33A52F36285DCB929FF84C10A6D6DA0C9F1029413E188E2FBB1D0BB199A65F9C4BE35AE59596FDC52A0A7A30AD35A6B15ECCFB233F20528CF94521C9A829147D2FF626FAC41D9CE93528465C285FCC2BEB894B496CB8A51524F2080A1CC4DFE76C5833C9596E5E8562A6E224C99680E949524F16BFF2046F60748D3229189C4CDE091215398B3004DF981A0EB4A0DA27F94F6579952B4C669AB296A68D2EA92ACA2816CB8555414A1DE0052906DE1DC1EBB639D27B7B93E2272F092FB92CE933810784876241BBB72D758B566395E6D864248CBA77090C7E45077F0BD28D485FAF2B339D26C50D3D2D3D569CA5AA491DFB94AE3A1C4881214E204483D441331CF1BE1E6E0313350B463E54CE253F0256950AE84051DDAA2DA4404ECBB16A92B33B08B96C29C40D05DEA01B7F9ABC52BA87508CB5483F5AFAD3AF24A9CA82384AD452083C3B02276E73B6D8EB192659271B2E5F772D20331501C54F01CBDD445352489D312F54A99A8FE1AF3F08A773CD646566403C8CF999D8833CAFE7B62F597F66CF106451C3A9835F636DD85DE1624E9E5BFBF22D5D08ABB36D53F598E2708E19BF15CF3BDC7588C5F703D9E4CB0974D5AA1AB50CFD4302F4D61CA5254453AB69D3D748AF735D4083C52E1EB1C4479723BDBA7E0459F0B94A5000096AD9AAF46A9F51E5A0859325C907A3EAFC86BA7BBC12B73F68B88594778A01690F178A031C40832926153CB7239DB1B4CCA0CCC5E1D610084A9DAE28DB126BF8D5A27F0004AC1CF0402AE1B9069422C76A5BC225DD957613DAE76E4C6A66BB23D3CEEA9AFD32AA75D586AA50CF748AC2A578B8C904700306F611BE28DF1A7E20657D8691949C7CF460A6630284A429871776520B10D5F017D5A935F0FF00B213BB4D371E65CA54D12880CC4E86DE5A7A5E2A0ED234A6A9ECCF5256E92D6B96AB28D4D96142731A353E1D5214E242D01412400384F2DCC1BC63A07C21ED3E1BB5F942F15879A99C829470A8317770C0FA59C6ADAE734ECA2F20CC528992CCB06654314D9B5F3E5A456157992493E2DC5AFF0018F5F2F3DA71D6F0D94A44D9930A5C1219EB6B7AD6A5B5BBC63B440A9186421AC28FC853DD7EEC6EE6095ECA262473B4F5E5D45883C84626E5609291448716E54DDFCBFC4472243CA4921E8ED5E5D1DF52417D4B59ADEAC02615D64933F21F77A83E4E9184A82534B966FB9AF56E70A230E285827A56DBD6FB3F5867A8AB4920F175D89B8163791E9704FB8CE1E4BC182430706E763CAE6E21D4BC33800077D68D47AB1B7BAC372EAC6FC4608224EDD391803D7E18708C154B80E19DCFF3434E7A43A1863F2B33694F47AB1A7836CD1ADBAC4A64F11B98DF90F79E7875FA5E160DE94A575377D7F98728C2392784BB6DCEBAD2BA6958E175A08038E7717206FBC926FEE8C6C9C3D4FCBEFC2BF6854E149B20BEAFB741BB743091CCC1488EEC933B9E5E5CCFE07CB0A8C3B8A8D742DF5F41A78C6461535E2A7D69E3CCEB78D5FC51FEB1EE18CFE993AA5FA91F983F4A8AB971D2B4B5493E8D0E1495DC6CBAF39501A5330024A67BC0B3004F2F5F7629FDA0C1A5536532C4B636B95390481A3F87DA18E230C7BD972D128CC4CC77502C11C350E357BB3E94A9A6972ADB5FD692D3A9A3701680A92A0E719598F0B64C6C48D8F2E58C62E72725C21C4E226F04A4A38895960400F724742DB30D00E83D9CC8862F0DC265712D88059F90637B30229BEC0595A6FB32D55A9F2ECCAB729CAB32ACA3C99943D5D99268AA4310E24AD04ABBBE048B45947DF0239D4AF8A7D9AC6E3D3814E3F0DDFA97C28477A80B2A70FC20A9CB78DCC2799F6233390B33132D66597247012002F5D74E86915A8CD2B5C72A51564D1AE956A69B70A78CACA1452A1C02F3298163E831D6A41972B069C54C295485238CA8AC335DC9A7F2D6D4B5C1F644CCF9420AD6A241604104E9677E4DB44F74B767FA9F57E5B579B655A7B33CD90C20BB595C9A5AA699A64B61452A24B45A5029178200FBB94E7BF18BB39946612B2EC2E370C674D982594098877E262C389DDDFC9EC4C4F0EC2E324CA066CB522500AE005069A9A8A914D6D5862A2AA4512E9DDA9571B8D2AA1B5B1B290A6CA9041024CA488BEF1E78E8786E1CEF069C62450A02D2A1FB4821CB69C874A450F39C957852A48B28906837FE6A07D840D6726ACAE4F025B24A5237B93631723DD699DF1A6580778B92AFDC0B01D1DE86956BB5DCDA2BE32C095213FB9CEDB11D79B72F0872A7AE91E9E67EEDF6B74E73D5FE2B0CE8259F930EB4F643E90F4E0061C0570D5AA6E3C5EC6E7D22434398250492A2640B93B46FBDF975FC0E20CE1DC9252C4934059BDFE68290C8A4CC253A0D2953B8AFDF9F496D06669041E2BDA21476F8EDF7EFE586389C30AD03D6AD4BFB6A168D152002771A558F377FBFDDA6995E6A94A95E3224833C47CB6BFE43CF6C55F1984624A8380E053EB4D39E90D94185410A0F4AD7A731EEB48EEFEA4D77479252AF2ED2EC314A96D250A791DD83000BF88024983B6C7CED8F2FE5F2B159ACEE2C5256A5ACFF00738034B160586A767021D9E15324103503DF58EAE6AED6A97D6971FCC5EACAD1C64B3C4B09428EF1E2298B721237E738EBBD9EEC22310D366A42258296200A825BC5A8C45EB58D84924EB7DABEFEBA0A18EBB6A8D522BD4B4BEE2E98A49809528CF99E1D86D73C84D8C476BC9BB2F84C0CB4A932D130001D4A6480DB0259DF97A429FA550A31074E7BF4D5B72F78A8736CCEB9D5B4C37DE55074A934EB6817140CC1909E2373D7CF718B94B5E53859478E74894784BA0A904D05831D0D1EBCDA2CF91E5986C413FA852659A37151DF968F4D236E4FD96F6B9A9DE42729A15AA85D23C6F06D9E14AA2E7BE00C409EA7A6D8A3665DB8C264EB599684CE0825B816C684B38483ADA8CD56117C9794E0A4CB79650A0055A8F461F5A569D69169D1FB2556B259CC3576AA6B2A091C4E5325B6EABBC9890436E1E189FEDBC8E98A663FE3263D73E5093819894F1101B88155280FCB6E76035BC45CCC74B9426489412A3C4385419C005C80CE4BFAD75A0794763DD87E9FCC5A7334A819C901417097D89213127849893B1DAE7A5A37B5BDB0CEB3DC8B1457266E18092A62144B82935A00CCCED4E82B16DECE674AC22E58528A7898026868DFC0A53CA3EE03E86DA1D2543EC5FA019D1F972B2EA39CD4477AE3A14057AE08EF0DAFD2C2DCB1F017FA8F38D9FDB8CD25E2F11DE244CFF6A802925892E412A3CB88B801C56B1EF1F837987EA700389355004A8B905C13FE45FABC7ACA84A9284C99266474B8EB279CC4FCF1E5D9397CF13261134A413B9AED7FAF5A476AC5CF4861C1C4776B0E8DAB7DEF0933104A50A0762094A60D8103AFDC0F4E738DA4E0569C54B0B98684B924D6ECD5DF61A7587B839D2CA1654001C35A5A87F9DDAEF48F33BDA9ABF2F4FB577B32B6E368EFBBDD4BC20800ABFCB372424DCC0E9CB7E98EF9D90C2CC392E604ACB2658E100D4D0DAAE7ADE388F6AB17874E71292A97FF00E630346FDC2A36F623D30A31C6CD3AA3C219660721FCA4C5B9CDBF1C7259B2509C6E256A524A8CC3C2EDFF00222DBFDFC23AEE5B342F2D9440E11DDF9B871F9F17E71B908714F49802E77E97F81DFE6061CAD52C4A60CE41A02CE1BFC7973AD6E5C9C4AB1C5452A090B2C482C2A77FF3D4888E6B2E3774AEA26511DF2F26CD12D091E22285F88E5BFC46F8DF2B9DC18FC299859A721A97216920817F5AD3AC3FED6611589C871A07EF4E1D756FFB0E9E6E7E8098F90FA6ECDA9EA7516A6CD357A90C3633BCC56D78924280AEA8200283D2279DCF4C7D2EF869DA6C5CACB30DC1296DDD203D69F2800DAAC757BC7C4BF8C792255DA1C50E2048C42C5F751D743F4D9EB0E8EE76D51D7B74FA66943CCE5EE35C4C349F155265370E04F123840B998DE77C755FF534E272EC7E2312A2B9E994BEEF8C90124A486E13436614A748AD64395230D9865E388042A6238CDC5D37D1A95D478D7DD6EC934769FED6FD96E82B337C929575AEE5B5AB7A987766A5B5529594F13E91DE8928B49079729C7CDDED676B731CABB6D394A339027E300487504B05B0205850B9661E71F47724EC46599C762A64DC22A5CF9C8C239084A5441E07A90E0171CCF311E2EEA7CFC653599E69EC969052A72EAAA969D4148EF29D21D73861C52429C2A026C48000EB18F76763710ACC7B392B309DC6168C2F15492144CB35634A31E6795447CD3EDD65389CB7B5E70AA92A42558C290188FF00F319B9F869ADE3D58FA3C3B28CA33AECE6BF5BEA2A76733467A406175C84A52834CF2DA50497A5224DADCE37B63C55F157B6389C3E73324E1714501135695B176F9A9A1F1711F48FE057C3CC366191CAC462B0E95F14A41495258074814D76AFD691D5CFA403B28CDF24ED3720A9D3540D51E4DA8BEB7F5B094B6DB4D2699A4849E22129209322201F3C760F81F9FCFCC30AA973318A54C40485A8124BA8D280DC78D7CA391FF531D8D9191F02F0B2C251F31570A40A029ABF4AD746B8887FB20F66D91D476B9A4F2FCC6859CD65756AA84A825C4A0A5A2B4F1C71A45C5A472816C4EFC699F9865D951C4A7319A014FCA975077206A473A8D2F1CD3E036024E6B9870CBC1A715C0B4F79404258D5FE53A0AD7AB5045D1EDE1DA9E96ECEBB5CEC972CA3A0A5A5CA74EBB5EAD48865B42B81B710D2E9F8D9420A956981C2666D8E19D83C266F9B23133CE266290B4A9D64A884B850DCDDDEF4A9348F58F6C256478491264FFA6C94AD80092948515001EE01BFE2D48EB97B607B5EF62DDA7685CBB28D06C37519BD2D3210E3832E76894D38037C652A718471EC762769E77EF3F073E1B6759A6638B9AAC74C9B2913905BBC2B48471925FE62D4E8ED68F3F7C431809981693804619625AC06481C6480DFDA34634DDAB68F22739D68BAB6D0E0A97EADC1DE175A4D33884B026C0391C2B1020F0CC45F79C7BFFB3D84C9F2597FA5C462E4255292848599882A5961C4384AFE562750E4C78F8767F375E3311311859AB965648012A00004EA017E474F28AAF35D4B59561468E96AAA409934EC3AF8B1DBF94857A72DA0F41D07099B767247089B99E1D0542814A46875756FD7CE26B0FD94CFA785775974F98CD6428EF7F969E3E1159E61A8AA0294D3A87699E132DBE95B2B3E5C0E2524C499F4BD862F395E2328C6B1C262E4CE701B8549376D028DDA8FE71BCFC8733C00FF00E6F0B370E752A490EDC940575D85DACF09CDF3DA8209E3299B03313E9B4CF31E91899C5FE932F94666216994801F894C186A5DC7D5B5D042984CBF1189253265296AA330249F2D0D869E31147EB2B5E6BBC3956695C82470FD5A96ADC41837975A6CA52204DD5D205A04049ED7764D13C22666D8497312AE101531018920070577EB4899576673DEED43F433D12D49AABBA5916A5386DCFF0088FA24FF00C3F34FFC4F38F69DEF288501A4A6D32426A521C5A78A9DE3F65E128248E8279EC4E3E6C7F5FBDA5C0E3335EC649C163538D4C95E278D522604865AA5900842AADB97F3B7AD7FA5DECB9948CD5799A4A030215365F0E8AA7CC0077F2EAE23C90FA4F9F799F6D1ED756B1C2555196A65238504229624204045A2605EE4E3D39FD1162A7627213278569C3A254A290B51506A93F329F9EAD63AC56BE39E5584959AA7F4265CC5198A7086705E96BD741EA1A3CFB62A6AAA96B14ECBF544D9229D972A15249E4D25667CA3F1C7BB3199FE43810462730C348EEDF8B8E621268F4AA9361E6F1C1734C9F3198A93C7849C525B80842D4EE06C08D75DA123D499CD2F78E55E5799D2B523C5534354C220EC789D6D222F3BFBCCDE1307F11BB1588C51C3CBCF708B9A5410940992C9772187CFE6DE10F53D97CDD3290AFD0CF08E176521428C1B4766360073B4332EA9D75410D256B52E7850D852D4A22660264FC26224C62ED3331CBF0D253899B88968C3A805A6628865248705C9666E7E17847FD1F1B2D410AC3AD2A51FDBC25DDF52DE97F186EAA5D43062A1B758528F843C85B73D63BC026046D244EF8532ACF327CD57DDE5F8C953D4925C2169241ABBB13F4B36D0FD792E370C90A9D8698806A92524537A86DAAFBD748481C71E3C0CA5C79667C2DA14B51F720127A9306D7EB896C663307974B13719391211565AC8F17A8F74D61F61320CCF1C954CC361664D4A3F7292951677BB258D053ED78D2E9A964F0B8CBAD2B925D6D4857C160131CEC7E186D97E7D93666B28C163E4CF502C52852491D589FA427FE9D8996A32D72D499828A0526EE69B0F7CE13A5558F71772D3EEF0DD61A69C584FFEAE049299E40C4F2C3AC666795E585031B8A9520ACB242D690F6B3900D4EC5EB5348772F25C74D415A30D316848752824F08BD7F6BB53F98D68A9712EF74A4385E5FD96D2DAD4E123786E0A8FB87CB0D319DA3C87052933B139848932D41C294B400433EFEDE12939662F1333BA91216A5A4F094A52A517766A5AADD7CA1CCD2E6E96FBE5E519AA59DFBD396D586E3AF7859E1F3DF11586EDD76471733BAC3E75849B3096094CD412EEDA178959FD8FCFF0D2FBD9D97CF972D9F8952D6CCCEF61A08D2DD653394D52D5532424800B8A25B2D284C4A6CAB9226622DB8B61CE6B81C3E3A4A71D22705F7693351C350A08054E5A961476DB788FC160CAB12996B4578825448B0763D3A781E7ED87D1C5F46D7651ED01A2D1DAD76D5AE32BCAF4AD3B89A84D1D656314EA7514EF10524FD65A7374581078B90BC1F9A5FD527F5419DE4017D9AC9B289F8A9C53364A972F8C04708677082F67BBD3C63D37F0FBB2194A9289D331929165709625CB96297D6DD23E8A352763BECDDA0BD8D7B435762D94652FE4C9C86A1A7B3A453B6F2AA1746D3EDA16DBCF214A212E20DDB70C8E626FF363B07DBCED3E63F12726CC733C5E310538A9B351853366A59D5C452A4F1071703886CC184764CCBB37835E5AB972F08853240337841715AD459B5F5BC7CE37D1D3EC0BD9C7B4E506AAED5FB5CED2B2BC9F4A6439EE60E1A2AE14F4A5D6D19A54A3BB014FB4E2802D40213B444E3E907C52FEABFB4DD9AECAE5D91E4DD9EC4E3F159AE0E64B13E5A9694CBEE258E251504101C56A43E95B50324EC4E469C619B89C6C99650B1FEDAB841249B00F4AF237D9E3E9B321F67CF66FD2BEC9FAAEAFB23C9F24CE3237B4D66ED8CE986987455B941495282B4B8A42D40A5D41921773D6063E6164DF157B5DDA0F899819B9862317215FEA282252D7308495CE4F121A80B3B07A8F37E87DA3ECCE00E4CB99859289A132DF8D207CAD7AB5776DF5A47E7EB99553CAD5DA81FA670AD946A3CF5A4B53E14A5BCCAA5B09126200004011D06C31FA51F85AB389EC06553B17F2CC9D8294A73534969F534A3B11D23C5FDB3C261E54F9C94949505101340CC5BCB4D3ADDD61A9E179C360A20152428409120743783F3DF0D64CE50CDA62250E24998C4836A9B36F5F50D578E6D2240E30E011FDA4EB537A68DF4BC2EA5AD22C5422473E91B19FDF3DF17B9D870653B7F66CE6CFCABE5BBDE15CC30EA4C8701C0069D28F4FCDAD687715CA44428136BCC6DB72B72B73B46D18ABC896A993660092C341AFDC59ACC1BC62B3224BAD4EF7DBDFB2D787EA0CC9700C9E5CF6E5204D8F4F913CCC46195574B06EB7AB81AF8E9CC18DD72D9C1A8FA3F5BDEE225B419A2E6EBFEDD95B79DBDE3DFD6715AC7619469C06AE280F4FF01C5BAB329A9B38FF00D5CEB4B794762B54E6C071A83A41333E237F58DBA5EF7DE71C7A565D225E253C12921883448152281C6D51B4339649559857C6F7DAAD7D6281CFF365B6EB4FB0A9711DE44999E4678A6C7AF58C769ECFE110BC1842C3215C2EC360E2CDE21CED13786AF8375E9EBD1B5178A7EBB33ABCC332397B6477F5B534F4EA240801D712824721014762248DF125DA5E2C2E54461D4A4044B515106AC2B73CAA7D889895278A6254A4FC86C79B0E5A901AC3AD63BE792F641A23B2BCAB2CA9CD69855E76ED326AB89D4AD694ADD6D2E8B282907EDCF3DA48031E5F38ECCB35C73E1B1737F4FDEA90085AABF310AA39208E7F888CCD676264CE0B0B29516A804381414040EA79B934AC573AED1B387EA1C6A90B34797A014A034869A21116FB294AB94FAEF8EB196F667032A44B99350A9B3D41255C4B591C4C0BB17162697DAD161C063316BC1CC2A9A543828EEE457C6CEFCBA5285CF359E62BAEA86E81D76A5E724A94BA8500929499E14AD445FC85E3DD8B22B29CBD6A92956165A96183809716636ADA9EDA23275CD5E3546628A92A5901DCB876677E74F3A98AD6B350D7BB46E2EAEA453BEEBED0727857094BC018BF4990236DB1359E76764CCECFE365230E90A561A6540AA7E451156AD3DE9178C405CBC5E0FBB0CEA4B80F40E9A96F36F311F6FF00F44CFB487627A07D8CBB31C8339D5749499930D6646A43A8292A5AEB0AC0054A093626627CF1F9D6FEA4BB1B9D49F8859DCF5C92705371044859500ECE08FF0095F4E4C358F7CFC27CD64E5B92E1C14FFB9DD8E335776A58789FE5A3D3C67DAE7B07A893FE35A0513B789223FF00783D368C79E667657311C24E1C8059994039DE86DC8C75D91DAA91312B2A092C39967F06F7CDA305FB55F624AA86186B5AD125D7C90DA000E070CC09F19E1DC7BB6DB0CF19D97C6257294B42A5A9C355DF97F9BBDAB0CD1DAE90913425600D6F5607D456DBBBB831D07F690ED5FB27CD3DA6FB08D495F9AB0EFF0085179EAFBE43842426B29D00294942B8556BDC1B74138EDDD8FECCE3E6F67B1C6493DFF749E04B0D01E2BB5EB7B4705ED876C24FFAEE140AA0CE72412EFC405B9791FAF7968BDAE3B1147749FF001C51381D6DB4A29F8384B2A420050278A4C9EB1B5A0638D637B25982F1B3D2B796B4CC5380417254FEA5FA73AC77197DBBC2E0B2FC12952C282E527889A30090C0536D47DA256DFB4AF63B52D17D3AB290242642B626D22DC40CEFBFA7A88ECCE612CA122515B9B920077D9CF21B35ED12D84EDCE027CA331284B84972D504F36372E5C0A39BC42754FB4E7636E64F9B32CEADA572BD596662C52B009056E3D4AEA001E21CD437F8EC70FD190E2B0D9860538895DDF14D965831765A6ED43B78D4456B3BEDA8C46539A32C1692B09029FDAA05CD3DDA823E726BB4D6A1D439C662AAA74D2E46E667983E97C29278D976A9E701001076563E90760D587C2E43841DC85CC3212C1AAAF94063E8FE11F1E3E27E67FA8ED1E2C951FF00F10B377BA8F3DEE1F76D1D5A15A4F42B81592559CCF34752A43E56C2D2195A92522EE05257C526FC8EFE53B2E4E2B3454D95DCAA44A7AA41278C39B6C035999AB668AC23303225CA5057FB80122B66622BE9EAD1EA67D1C3DA356E6B4DAD74267D5014D965A4E5ECACA600A843AB73BB40B0B284C0DA77E5E47FEA07B392F2DCC32FC7C99211DDCCE359081F310A4DC9036AB9FCC7D02FE947B5666659986131F33BE4CD95C284CC53B5160F08579EBA691E6DFB57D02F43FB446ADD2F48CA826B336CAD9A6436D1850AE711DE59293301D2609B795E3D03F0CBB5D82C6F60569529089D2706B4A8135044B291B3500F0E748E49F1ABB1E319DB5C26270F2190BC5B92948ABAC56800F46D9DDE3D63D679EB5ECDDECA7A4B4FD3D70A0AFA85E55514DC09EE9C70565753543E0410612975415CA3717B785F3FC9A7769F3FCCE76154A9A11885BB025BE657E29A1AF87B5BB159B49EC8F6772F913C0940E1D00020020F025DF7B86F1140219FDB652DEBAF673CB7B42A1A84D65465397D0AA9DF6520281A92C21F3C683E466F3F3C74CF833982BB31DA219762014AA7CC9685A9668CED650DCEDA5ACFC77E3BC8576AB239936534E2A9534A384026B4D37B80C28D778A1FE8BBD38ACC751F6A7AE3362A552E434B4151953EE712D3E0A675555C04CC41410A8FBA23A6FF005398DF9BB3D83C3AF8D3981095049A2788CB0280B7F73D5E28DFD1B7674E447B478BCCE571197F34B334587FB960A0478383D2F1D00EDF3B4DCB3B5FF6D6CC1CAD6C57698AECE692810DF787BAFF002FC34CE0481B12B490A81EA2F8BA7647E1F4EECC760A7E2952D4A5E2704660590470BCB2A0C5BFEEA6BE04449FC40ED2C8CE7B5D2F0B8629E04E2420A50A0430500D4F3A6D631D85FA4C7B09ECFBB23ECBF446A9D0990B397BF5B42DBB59DDA882F71A29E49E202D0B5796E76C3CFE9073EC42737ED665B8C9866210660725C83FEF70B29CF0B10051ACC6AC218FC68C99183C26453652693929E2012CF496EECE68EEFD6DADC5EC3BEC93D82F6D9ECCF95EAED55A69877387A87303535EA75C49A782E214E10980B800AAE6D1CB1CA7E2E7C43ED4766FB6F3F0F85C6CF121589504A12B57FB80AE8007A338D2FB88E87D81EC064D9BE469C5CDC1CA0A449054B29490E52EE695766F13E1D77CB7B55FA307D95F5337D966A5ADA5CE7575066CE50E74A5D0E6150D2DDCCAACA695B0EF03AD00D77A124A55102F187F2FFF00BD4ED5E0F119A617178CC26151251370C4052C21900AEC6BC446BBC5C3B2C9EC56598D56031587C199A66776C5281A90033737E8417878FA4D3D843B14CDBB0EA1F692EC3F29672E6F2DA36F31AB5D138E38DE60D661DDF7278388251DCA16491C2798306062D1F007E3B76A724ED88ECFF6AB319B3947132E5494CD74F02428853D4D081AB0B1B8880F8E1F0DB28CC72F46332AC24A948EECA94A9612D514B0B3EDCE3C95FA3EFD8CAB7DAFFB5072873D529AD09A51F4AB3B7B825B525C0A52525692950F1B651E156F36C7B53FAA0F8D583ECA76572F5659344DC6E61872112E5CDF996B2945B87626B7B4713F853F0CF0F88C7CC33D2172E52D24852416626EEE28CCD7F331ED076B5DA3FD17FEC44ED37657AB32FCAEA3324B69A5D4714B53982DA70B63B9529C6DB78B654553E150BEE4C63E7164B86F8B7DBDC662B32C1CFCCF0F216A13249489AA4A03BB3BB105FF00168F54CEC1F63B2E912F0B3F0B8452929E151504024D8D1BF8AEF1DBDF602D2BECA39865BDA876B9ECBD5AC3B9676954F42FE7397B02A1B5529CB5A712C0522A085A78C95010948E5046DC7FE30663DAFCB73DC932DED38C44D9A89FDD89B394A257F3201531729091A3F3ABD1DE5792E513F038E393AA5C80B40F96530268A37074F1A7311F2D9EDD9A0F5876C5F48CEABECE34B65EED466DAC334A1A4A4A169216B534C53A1352E955FBBEEDA25C85471011D4E3EBE7F4EFDAEC8FE1E7C239B9DE3B1B2A4ABFD3CCCEF145293C5C059342093C54E57358F3EE33E1D4DCC3B4015899AA9A9EF8B25609A055C13AB55A3DB2D21EC57EC31F474F627956BBF6A534555A86AA958AB7EB6A8543AF5454B8A42C34DD134A70ABBA5B81B3C283B49006DE1EED3FC50F89FF001AFB4999E1BB0F331872FC36226A672F0F314A010A52C24802B5636F08EDEBEC6F65F26C1E1978F93875AD284901410E4802E48247E5CD843AE8CED37E8AFF006F2AD1D8C694A4CA58D699834E31434BF52AACB54C843656DAD0FA9A612F153402880A244C1BEFCFE7E59F15FE1E6608CFF1F3F349F2B053113664B519C12A2140A81724338E90DE68ECAE3C8C2E1B0987750605212785A9B397B5DED68F1D7DACBD88321F60BF6BAEC9B33D4CDFF17EC2359674ED3525229B506128796C539429E1DE3A65EA800159F43C3B7B8BB2DFD48E3BE26FC3CC660A5625597E719560D689A9E22B521610A0826DC5C5C1D45758A2E73F0FF0D2F32C34D4E113DCAE62492122A388122DABBB73AB3476CBE995F611EC7B40F609A23B68EC4B4CA74F30DE5B435D9C2A9DC79F4D50CC51485A512BB2203AA22DD7D71CE3FA55FEA0FB519476C336C176971F331C9FD6777253314DC23BC58701C9A863A8F38DBE28F65B2EC365584560F06842D329D44243BB26EC0BEB61F58EB77D0CBEC69A0BDA2B5EEAECF3B48C9115DA5F4A379686DFA9714DD3B8BAE6149578EC9052E8B4F31B49C7A03FAD0FEA531B90766B2CC264188386C66310A226CB554B942943875A1ABD5E25BFA7ECBB2BC6E0B35958DC14B9CAEEF853C4134A2C3D41AFD77148CFE9C5F64DD15ECCDAABB21CCFB27D389CB322D4633E5E7556C294EB01146DA0B01448291C4498BFCB101FD0C7C4BCC3B6D8BCE26E7799ACAB02252D6664C241E30A51A1506B6C45F68E55F113B372324CE3113A5C905136728CA4705140ACD1EA035F9DDACFD87FA2DFD917D9F35B7B1EEBFF00682ED6B49359BFD7B23CC6A324CC2A5E7996D353963756DA8A00849979B48E524629DFD62FF501DA7C27C41C9F24EC7E70B9185C04E50C6CB90D30CC1F229292C5C380776D8BD7A9FC3CC8F2AC66478B18FC1CB13264A696A5330252AAFEDAFBA433FD16FF0047C7633ED01946B2F6A3ED7329198689CB736CF1CD319170BC80D51E519856D354789985B83829D2BF1209E84E3867C56FEA47B5D9965594653879D88C2E2B13284A5CFEF540A0808054524A5F8AA7C1F9C2BD81F875976133AC563674B973A4A269584148660A510CEE282EECE03C76133EF6D8FA209F5EAEEC8F37CAB2FC8AA72466B32CA247F07CC5C73EBADB6FB2905F14C140FD612920A951B99E78A9F6313F19666639763324CDF31C62A6E2242A68016A4AE5AA624CCA9240F95EDCAACC23B1F6C71BD9E9992CCC20CAA42572E4A92662529BF0900B04D5A80D5CF947CB7F6DD98682A9ED2754D0690A448D286B5E772AAC69C7385FA7756E38D1088E26F852A40009E77BC63EF5FC2D19AE27B2182979895FEAE6609099895D4998A9490B725EA0B9602C0DE3E7D66984C361F1F8E992F86B3144240FD9F329AD43EEA5DA204E7699DA05168C4E8ACBB50E6F43A64D7D10EE28B31A9A50106B10B221879060991D0DE6C4638DF6FBE086071B85CDB35C76024CF294CC9A17325A4AAA16A35209A0E679984BB3798E2E5E6F874CBC64CE033405490EC9AB0ABB1E63611F719ECCB4196577D12940C55079D6DCD299BA9CAA7DC75C71C5F0BCA256E2CF1AFC7B1528C998C7C5CCCB0B87C17C7E46130C844AC2231E89699290004D92599AE6E1BD23E876569953FB10B98B960CE18572BA12FC14D3CBEF1F1263B45D6195D26A5D1596EA0CCB2FD38ACFB37416286B9FA34A93FC52A5442FEAEF2146E49BDCDED8FB5123E10651987C3D938FC560244E9BFE9C572CAA524A83C804949524A83BD5887E758F9EFDA2C6E6327B52A12F1B350062FF00E902B0923BC6625C69C888FB62FA37436DFD10F45C0FD454A91A67582955352FBD50EB8A5AEB4925D794B70DC9FEA81E58F87FDB0C1E1B24F8E786C34A9489586959AA1299694A5213FEEA1DE81DCEEE7C9A3DDDD9793FAAEC4A97894F78B5610152C977F91C13B6E1B6E71F0D41E4FF0019D517B1D4F9FDE7AE6F567CB97A48DB6C7E8E7B00A188F879911C3B07CBA58615A8949B3035F060DAD63E7B76F113067F8C96147804E5F0DD802A3FC39F106F07D6386A5E954FD98127A6D791711D3117D9EC22E566589993417E371C557D4DFD3FCC56E4E19425CB2454025F5AF2BEBBF4D442B65F4A549F1117D8133B9DBF111118E9C7826CA5310DC2CD7D0FBB51F70D0EE6CB070EB0A0F42DCEF4F5ADDEA21DCD581C104806C04932237EA6F6F33E51882C348EEE6CCF9581347D1AE08A8FA3F28AAA241EF4B503D5875A537EBE46EED495890078A368BED3D3E23F29BE179A8490C589624F869F6DFCDA313648276D542BF9E477DED125A1AE4C99267C30677DAFB99FC09DE4E21B13265F1D520835622C4EC74F388C9F29945C5363CF5A1AFA9F38BB35566EB3C70BEBFD43CE36900188FC0922390232E2A9C9530A9AB077DFEC7D98889490A55ACD5AD7EBAEDA738A4F33AB7EA52E21A5C3A2E825406D1363E5CB68BCE3AAE4321387929EF43A05F50E5DB4B124B7B1161C248B52A0723BB1DBE9BC55D5D555F97D6B398A163BFA5ACA575C3292785A7D0B31FF00D2920C5AF8CF69B0C313835CB961C290B4816A28105EDBB1B78C5A70187965491387FB6012F5A16A73D06DA7231EC2D0E6343DB5F64794EA9C890DD4667945070670DA16953A8521096592A6EEA121063C33F7E3C9887ECA769A7E0318A29C3626705604A87CAE3E69B7A0209D6F0CB37C009C25CC4A6A824289A382ED4DF7DDF58F3FF55D53A8A8ACA6756ED33ACB8A429B295A4D94531C8F974DCDB1DD70D99499F230FC052470804820B8206BEBAC38C2614A306BA31092CFBB6C3D19BEC6A1CE2A1B6E94D552D6298A961412A012A529C0E2A0DA64409E7127A0C5AF0384EFE64A524D8855BF8A03AF2E710793A267EB485A010A98782AC181A8A16F0FA51E155F574F58EBB978796F3ED86D6E28A54890A0144126DB74F77417FCC241959262E7CC4A512BF4B31C382C532C87BEB52CEFD63A16225A9388C0CD029C69AB87A902B7D3AFD63ED77E88CF630EC27B6BF627ECBB55EB6D3F559D57BA33712D66B5F441A28AF536ABB0E212E714011702DEA7F365FD5776CF189F8939D6065CC12F0786C47FB44049E2E2249AD598BFD2CE23DE1F0CB234E3B22913520F11949E2150CE06A59F5FA3B523D456BE8DBF65AA623FFE03AE03911A9336303CA1FF0021D463CC333B578E584BE2980141C29D7EC2C1FA474DC3F64C244D704F10B329CDDF97AD18C3831F47AFB34D0BED3B4FA1EB42D0AE20E2B50666AEECA60A6389D26FE5CF0C31DDAB9E152C4F9C95936F9406F001E9EE86AC91D9204CE025100DEF5A3FB60199F58E8D7B457B34F63B90FB4CF611A5D9D2D50FB1AC1CCF9A52179BD60211434C9FEA53849B120472B0C769EC576BE6A3B3F8FE09E1333BA1C33784167E270DD287626D568E0BDB0EC71FF5FC277608499C1856EE1CF8F883AD8C776E9BE8F0F65F3DCD4AB485635565B6DCA8FF00E399990494050801E001E4607AE3924FED5E28E37124CD1326198A2E400D521C001B6A0B58EF1DE25FC3DFD5E5B81EF16C44A4B062744EA0E8DEBA6B2647B107B36D3B229C698AC526200FE31997DFDECDED68F3C03B439AAD49299818170191C9B41AF3A1B81489BC2FC3993230EB48554A7FEEE7CFF817D4B4373EF61DF66CCBA92B734674A568CC6932FCC2AA8E737CCD490B6695C7495254EF0C4A07DA91CE3A3E959C63B178EC1AF10B0A289F252FF2820296806D5B00ECF50FD28D9D7638E132ACD5810F26656BA254CF50FB7947831A8B5585D456D065B50728A0A5CC6BE999640FAC1E062ADC6805289E2D900DE37DE44E3EA4760F2892AC83033D127BE52F0F2CB92DC24A126D50F577AB97A5488F8E5F14303364F6931891C494A3113372FF00316D0FD39EB157E6DA919CBE1798BCDD436A5781D84A0C922E40F14926D72676BC0C746CBB234CB13172FE4580EA05360493737A1D08F431465F7E664841258D0726605EFBEAFBC7643D8BFB54CD727F689D274B96075594666E3E8AF5281699504D390D7138B0126E6DE2BEC271E5CFEA1B24978ACBA74D080A5484AD5C406C1E80835A3787311EA5F835DA09FD9DC760E54B9851FA85A1376FDC4021AAF43AD9EF1E95FB45F61995EA4F69BEC673E6F2B15CAD6AF57D4E6CA292A43472CA765CA72B51494DC8944C49B0DF1E36EC176EE6E5F2339C12A62A5CA96932C20A8BFCC169FDBC8B75BED1EEFCDBB132B3A9D94E63DD85AA6844D2784528824DBAEBD23AD7F4A7F69CC52E7FA1B413084A19D334CF273069A7C6FDC32BA7EF1B4AA525251299026245B7EFBFD3C761D3DA34E6F98CC1DE89EA2B0E976F9A61D47D7978729FEA2BB4733B289C9B0B2D7DDB0082104876E00CC36DABD358BFFD99EAA97B78F624ADC89D712FD65265798F7895381C752A654FAD80A049298E04F082013CAE71CD7E2CE0E7761BB62AC5A5E54BEF9250C0200E020166BEDA50C59BE17E151DB7C97867FF00BA7BB4B05391F303BF5AF86911CF672AC47B3A7B09EB3ED133C0296BDD6F51D1D4B8F8EE5C5835F5D474A49500612952786D7E538D519DCDF89DDADECBE0A6CC52E5CB9A8E034570F01965B672CD5B6D175C5F66657C3DECE677899284CA54C92A24A592F45D68DCD9BA574F9C3EC1F5EBDA8BB72D195B5B52A5B95FAC2BDE2932B5BA87736E26EC24C00A107EF8C7D53ED664186CA3E162B8E5A50519594824004B61C8A3B17A73158F017C3FCD67F68FE214E4AC952518FA3925819A7EC03E9A0BC7BC7F4D6D6FF09EC47B2F57D6453B4F652CA9692910A866948B58DBD31E0EFE93F15C19F76C8B904E215F35DBE79C2D7343E5E2DED0F8E39209B97767D93FB25A6800BB4B7F13AF808B4FE8FACFD549F477D567542FADA751A6B51A9350941242D2DD604A936894A8026098DE7149F8A586979A7C5BC1E1A604AE5CEC74B40492000EB4824D9A8790A1E7171EC14B184EC6631228A4E14F096B325479F3D0347C5C675A8733D4FAAB3FCF33FCC3F8B664F6AECCB82B9D400E2CB19DBC96B88993FC9094000AB940B1C7D81EC77C2AC9B29F86BDEC9912710B9D960592109F915DC71000B106A48A3171CDA3E7F67FDA7CEA4F6F92893366F7631E9494B90083380E8D5E5E31F657D9FBAF6A0FA23A8EA350D51CC1674DE661E5B80AD4E16DC70530264901AE1481702009C7C62CEB02B97F1C71B8192938799FEA00219C703289A33338A8A6FA47D19CCF2FC6633B0183C54C4A9415820B59209249402E6E472DF68A37E836D3D97D07B32F6959EB85B39ED70D46E553EDC38E452556666907123888284252902463A27F51133192734EC5E1E74D5CE9689B2C1E25BA4A4992FF00292798DA39F7C1CCB958939C1E13C487090C410471F206ED4FF11F2EFED8FA8F52EA1EDDFB4CAAAD79DA976B73A79AAA1564B8A4A296A1D431C21E24B7084A638627CC63EC27F4CF90F64717D89C395E030857FA1905733BB944BAE587513C3423E66249203D5DDF907C4D999B617365204D9B2E5F7AA0CE4502B7A7B2F4B1F7A3FF000DE663AA9DA2F69CA1CCAB9FAACA72CA6D37FC1A89C052CB21D69F35019512507888957081B7A63E5D7FF101ECDE4B9676EF245E562428CCC4CCE3EEC207012A433B683CE3ABFC229B889D8498A9B89513C0010493C4E0DDCB79D7ABD5E7B03CBF24D4DF4D0F68D575CD30CE6D9355D21CA92FF03A0177285F7E5A6DC94A89008514A4C4C9223152ED6CCC661FE0B49948C44D38695879616842D690BEF1496A820D09B30F1022F08C2E1FFD53884F471F192D4DBAEDCB77B88EB6FF00E230D59AD55DAE764D903A9A87749D28CE52CD0F7C5AA5AC52D868F1AAE107B8761694A8192200B63D3DFF00C34F22CA670ED22F30548EFE7770654C9B2D2B291F395278540BB8A170FA93148F8AF3A6C992832A72827849E04A8D580377A7361D291E2CFB2666FA9325EDFBB38CE748E72F2F57E539ED1B74CDD3346996EB15B52C35508213C29792DD3A949921462488C7B6BFA81EC7F65476273EC4FE93088C423093945932DC321452A0C9B967A5059C5E3987C369D8AC6E745D4BEE4CC40092A2A0083F31725EA6AC6D1F57DF4EE657923FEC8BD9F6ABCD99646A8D3949A7333CA1F79612F37501FCB6A6B0A4AA0C9524C83F2D87C73FE96F23C5768FB5BDACCB30EB52B0F3A7CF429491F2CB4A0CEA10ED50001401A8C418F5EF6865E0B0781C14D9851C72D095558392013737ABF56630F196E6C7DB87E89E6AB2BEA1ACCF3F3A7DBA6532036A768FF84389658909B9E2453A6091F2C42E6B879DF0CBE2F4FC3941978638827BCB267900A8D2A070977B3DCDE2A99F60F0FDA4C995DD11314896470A43905801B16D872B3563A8FD8A6643D877E8BDCF7B415D40CAF58EA9CE5867EB253DD55775976A834D716591DCC0936817B6273E21CDCC3E3576830D8096959C3E4921656A014A48EFA53A4B86A120B579D59E203E19E5E7B32719DE3A3F50B02B4601441E573BC5A9EDED95A7DAFF00E8B1D29DB250BE8CE35150399652D3543284BEF819967749435012A471281EED478C4DEF24628FF0CFB77987C09CEF3BCBD6B992A5CF284AE695143F0850173BABCA85C45C7B4FD94C1F69049528A14A7252C94921C826CC4D40BD5C3888E7B42D72BD89BE877D2FD9464B982323D579CE541540853694D43C330AE69FAC480B214B05150A077001DA76E91F09F21C57C6FF008BB8BCF66838BC1A274A33E6295DE252148F97E524EA3D0C547B5394CFEC764A9186E2E12820000B903722B6FA5447523E874FA4FBB34EC3F4D669ECE3DBA54B590E5B58B71AD3D993A953CCD5273971D7F350E36D2421BEF3EB0471BAAB4C836C76AFEA6BFA64CCCFFA6669D98C3AE64DC2A0AE6C99287131410909AA4109621D9AA4EF7A87C34EDF19B3F1387C4A08257C20A9554804824BEF5F5D6DDE1F694FA20BD9A7DA6B2BCE7B5BF657D4395E4F9BE694B559BE6147401399AB3AA82D395094ADC53AA142A2E1544849515584838E71F07BFA83CE3E0866986ECE76F7B389981731121189C4F04B32471048290A96EB0C45886AC7A0D59060BB4592E3F112260E3EE4A82407E27492D7DFDEA7E40BB5DD09AABB12ED0354766FAE3277329CFB22AE55355D33AEF7CE04F78A0C3BC424C3CD04B800FB33048DF1F6F7E1276EB2CED864F97E6D8032C61B19290B9694149487487629A50D3ECD48F9F3DA8CAB1180CE71D875850509AB090411FB496A9B50F5E948AED154DADD6D0EBB14C2AE8545266E3BF6CC72E639EC3963A6F6F932A5764B3498B4A7FF00C24EAB80DFED2EB434A79F9BC7767B0CD98E1D64007BC0E7982057DD5AD78FBEAF662AFA773E880CB14869229BFC279D8EF645E3EB039827DDBF524DB1F9A1CDF855FD47AE7713FF00FCDD2424D984D1AB81A5E84599CC7BDF23C6A7FF00B26B95C54FD310472E02E763B7324B5A3E04330A827526A39794298EA1CDC8DFFF00E6753EFF008FC36C7E8DF26C560D5F09F08BE14850CA4A4D451E4000EB73CEF7B4789FB418642FB4AA25001562814ADFFF00F23F9D3EBB53EF17E8DD7C39F43DD125091C08D2FAB036A172AF1D6CF29989FD6C4FE6E3E364B549F8F1317254ED9BCA5708714EF52687A104FA55C1F727663853D8DE07001C29DADC157B0153CB7BC7C2A3EFAD39C6A42018FF0013EA08FF005019BD64C7327AFA5F991FA25F8098838CF87D9226657830328126A6B292DEFEA2DE09EDCE042F3EC41480C672DE9CCF5DD9CFD5A3172A549A9709901411C2677B5E27E605E3974BA63F049C14C9B36581525541AD7DB6BADA22315970932A5F086A3B806D4A0A69E1A6AECA115465266E0F23C87DE7D63718322C51C52E625CB75B1AF93D01F5D221D587E397303513A1F16EAFB6FABC38AEB4422157326D73E9633F3208F291890C534951090C4D9BCEBE1B79BC41230CCA5921874DC9BB37BB42DA5AB55A5506DFD5E963EF3F872C45AE6BD5FC5ADBDEEFE95DE119B2039A3020B86DB9EDF5F52FD4D5EA491E2E917E91EF13F0DB0CE6A8AFE660143C7EA3D988D9F86AA986CFEE9EF5D22ECD40F90557B78B993D4DA3E47FDB15AC1E5E95B16A534B3B78FF00377AC5670C82E3776B3DCFE4D8DDADB54D9ABE12410A20C988B4753337E5636FBF172C149125212C006A8BF4D34B9DAF16BC149E2670E77AFA86E5E0E4BC56D9CBF2570A3799BF39B5A4733D49336318DB1B244E42924536D2C34E7BF268B6E1B0E0814D7CEB563D43D69D2B1D8BF644EDD6AFB31D768C86AEA4A74EEA7710DE69DF2B89942584F80042E42788A88F0804DB7DB1E5BF8C3932D58BC3CC972495A78CCB524170A2285FCBFC5DF62300674A2AA0E023E56078838366269B36FE3DF7EDCFB25C8F5C255AF34025A348DD38A8ABA36133F5A2A6813C3CC4104F8419918A6F65B3DC7E5C24603385A84F0A3C0A51A293C4E1C82C960C189A9E704CC20460A6AD2070941AD058359F4A9FBE91E5F6ABA775AAE7D54B4EBA179B70A1CA2752429B521453243804F111C42C37168838F4C765F3CC24F5490262492120A5DC681F57BE9A6BA8A165ABE1C4995310584C265CC7BFCC49D34B171D62B87DFAD69FAA7AB82509013E201209B47282771698B5A717AEDC62049EC8662BC3034C2CC345137428F366735DB58BCCCFF73138201F88AD0C1C9145245AD6E576ADDBF421FA081E6DFF00A3B3B225A2C952B3DF173319ABA0C1F224F5122DCB1F971FEA4D53719F10B3D52C9E3562893BD14A16D396B4AD23E8D7C2099DCE47210A179483E40793687A78FB2AA6CAA07148163F2F3B7FBDA31E7E998351E021668C08F2AB7A4760958896A0B205007A5BD3C357B469ABE15367FD31045B9ED68B7EE310F9AE5B3166594CC371AB00DC3CE96F6E211978D9604C5300100BB867B8B5796ECFE5E4C7B5B1AA57B657B27D400AEEE95FD58091B0E3A56C5CEE0F4BFBE6D8EDDD83C0CC464D8B2B55049AD2DF2A99C6FA0361D2384F6BF3195FEB7840502B3C696F9921FA5391FB7AAC8610A436F95C7794F4E08BC59A02F11EFDB718E62AC0A978EC4CC0A202A6ACB7451A75D5F6F08EED2B3A95232FC17124377496AE9C290CE7F834E8601429510B0AD89277B0F5E717B7AC61E04AA5293C35B8A9DD85A96FBC3D939E499929443304D7A0B576EAC79C326AC729DAD3B9F07109FF00F25CD477840F07F917E4F513E58525E24C8CC72F05C257390493AF0AD275A1B0677FCD373ECCE5E2729CD014848EE576BD9557DEDEB678F8E1D4F9E32D6A0D474542DAAB1F5E7799A51C00F8146BDF1B00A8B9927CADB463EAC7C2DED370E418342905411225B56CC8079DC0D46978F8CBF15A44A9DDA3C629D81C4CCADDC7191BFBF48D794F66398E69568AFD5EF16329716DB8DB6B570C2525248F0A82809EBE40E3ABC9ED34C9B87C42654BE29841E1029BD5D9A9A3ECD72639BE27092654DC312404B83D76AF93459D996B0A7D019AE42EE8D2D3797D2D7D025EAA6C252B4A45432167BC23886CA04F15C18338E4BDAEC9F17DA2C973097390553CCB99F2B3E8AE10DC9C5FCA3A764989461734CAA6CB53211325970E416282F73AD58FDEBF499A435D685D45A334A6BCCCB39CA9FAACA32353D48A5D4D377CCBA28501EE195F182A5A609B4F3136C7CE35F62736CAB3DCC72F460E7AD789C4A124A652F8529332AC5883451B6EF1F4DFB3BDB3C12F22C04E9F8894572A424104A5252C90DCDA805BED1F2C5ED9BDAD37DA37B40F69BA9D7998550D53F4AC51C39DE3605334A60F7601294C9489E10279E3EA77F4CFD805E41924E070CA2664996A09292EEA492AA915624D0DFCDFC45FD50F6A65F68733CB8489A0895318F097A0296D756D6B1DD9FA1DFB66CA5BCE3B40ECF33FCE986F2FCCBEA21A159528A7692840716E06C3CE2130A04F170EFCE71E78FEADBE1E4FC595E3E4E1967B8528F0CB4173C6A6FED0F7FA0B08ED5FD3776B70F96E1B0F879F31290B4CB492A22C000E1D85377E7179FD33BDAF694D0DECA2F765BD9F5565CFBBAC5C4AA918CBABE9C70FD533043D530197140F1852CA85A7A1338E73FD28FC32CC734ED4A71188C34E4A72A9D2D40CC94B0E165E8480D6B579DEBD7FFA81ED86053D9A9D2B0F350158890A4D140BFC9B3DCE9B79B7CD77B2766A32EEDEFB3072AE9196D0BCCDB577CED5B61A6141C68B8A5052826E649E23F9E3EA97C69CAB118EEC0CDC26124949C3E5F302B80151534922C072FE77F017C0B92995DADC4E3262811FA90B750666593ADC6ADCA8ED5F79BE9D9D6196E73D877654CE4F99E5F9A5553E5A84BAC52D7532948E24520095069D2AB0041045A27CF1F3E7FA49EC8E367E73DB554CC34E92133C8495A1697F9A6B91C4002D705ED48F717C4EED06171F82CAA585A0996800B10744DAAC35D3CAAD78FB04EB9CA32BFA322972CA8CCB2BA4CC9BD33A992ED23B5D489794A79157C03856E05137B5A6F618E61F14FB219E9F8C32E5E1A4625CE3A41429329652405209F9827845AA01ABDCE88E51DAEC265DD9DC44954C9602A5147015024B8237AD4BFB68F8D0FE20A6B3ACCF2DFE18DFD61ED599B283E2A91C1C2E674FAD2AB9E002140CCDC791C7DC6F8739663F07F0B70CAC5952972F2A53CA5A492B6C3D2A41208DACFE31E4BCC065F3FB6386C72928E0FD5A56A371598087F324EEDBC7D8F76739E65591FD132CE50EEA5CAD19A2F4F578550AABA914EA438E2C941417B8A549510044DE7A63E2DE2B2AC6F683FA929A065D364CB9F992A5999C0A0901CA1DF85855F56D3578FA378CEDA64EBF87F230B24C92B4E0D2821D2E0F00167A35EA0757631E6A7D081EDA3A43B2BCFF005CF619DA03AC65B926ABCCAB98C86B2B2B521A612BA9AC5D61256A4821D2EDB8D4041F0F2C7A13FABDFE9E33ACAB2BECD67D96CC993E64A93FA832132C924F0CB5247102598D5ABAD63897C24EDBE5B95E6799CBC419694CF9A52975003F72858B543EC2978EC3FB64FD0D190FB42769B98F69FD9176C990698D3DAA5F6EBB34A76CE5D5296DB442D6A05CAB04132A5129005E3AE285F08BFAACED47C30C966F67F1992E3D589EEBF4EE654E676294B132882E1ADA758B476F7B2B96F6BD68C5E1E74A4852B89D251576367B0B55ED6611E837D1D3D8EFB387B29E95D73D9668FED4723D49AEF2AA2A56F5F66685D3D297DF71A71745655429B5F772A4FF002C9B092463CE1F18F37EDE7C4AED2E5F9EE3F27C7A30D331266A25944D99C492B4963F238D0E8E29710E7B1FD8D9393E1712138E4105150E915093AB862ECECFB6F1F33DDB8FB4F663ECD1F4C46A1ED372CCD5BCC34FE4B9C50375B554EB40A5758CC28934CB529C6CADB5F76971517544198C7BA7B13F07715F11BE14FE8B1597CEC3A4E0E92A6216145728129FDC12A1F307F3022A824A64E76427304BA67317208AAAA2AAA96A5C37D7E813DAF7D9B3B11FA59BB1ED21AA346F68F91649AB74ED122A28EA7EB14AE3E8A8AE4B2AA805A72A5B5288525408502236F2F337617B67DBEFE98BB4B9A6066E4B8E9D2319394995365CB9BC0844A2BE1AA65905D245F7EB16DED7F6270B9D60A4CD46310A5997549E162E03D4AA800FCC7527D943E861D25ECD1DAA50F6E7DB776CD926A3CB3479555E59973AD515021A0868A544ADAAA01E3E04AA540C102379C5CBB6BFD55F6E3E20E538BECEE0F2BC623179924CA0A2998C94AA8B042900170A34E434022A1D98EC9E0BB278A13D7390A757168EE1CE84F202BCC563CF9FA747E900D37ED2FAAF48F62BD926629A8D1FD9B0ABA2D52E53387B9CFF00BE6DAFA88412477628D6D7FE52941405C441C7A5FF00A01F80398E588ED467F9E15C939A2113128992AA85A9331F849A9752812D67AEB087C4DEDA77B2F0F2F0EA2C804712554228D4D080EF7FB9EDDFFE1ECEDF34C6A4D2FDA67B3F6BAA9A5FE1540D658D51A730AF45335C351DF3CE06D0F389063651493245C1C79FBFAD5F8659CF677B468CD7012A6CD97227CD5F14B9449214A0CFC214751BB5A8224BE14F6865E2E4CE958A57CAB486E2340C0BD0DCE8FCEB5BB37D3F5DA4E8BD03A1FB2AF67DECD1CA0A9CA73A733E5E6AD50660CB8CD3943E8AB68AD2D2D6992B24A4820CDE4E247FA39EC5E6FDB0C6E7B3730C24C4CBC6A30C897DE4AF993C09525552028B9706CD6899ED6E7185CB1483865A400A51E20407ABBB3DB414B02EC0D6F2FA0EFB42D17DB1FB2AEADF66DD739965CCE55A0AA327AA0335AF6025C5D4E647304708A97533C2B6D2004930400231CD7FADBF81D8BEC8E6B968C2C99C3FD51538CC99264CC3C265F090FC009ABD1FA0687BD91ED29C74A99356B0132785454542805682DA1F0AF28E96FF00E221F684C973ED77D94762FA3FEAB5D93F67F4999B59A2B2ECC1B5538EF6959728F8D34EB2DAFC4D88DE3CAE07A6FF00F875FC20FF004DC873AED2E3662C4C9F252B9726721495BC94AD2C38AAE586973C8423DB1EDE6599C4B565AF2D7DDA4A388917218BF3A6D7E51487B197D12992FB6E7B2EE8CED8727ED3F2DD13AFB33399A33AA652E99CAB4269AB174B47C295D534B47F25008E048277B9BE257E2DFF005739D7C30ED563B23C4F646766982953C4B933940A92A4053121E52DA9CEC361150EC9F6224625189C6E16600A53A884B50FCC6CFCAAF4F08F793E8ECF653CCBE8CDD13DA8D576BFDBE516B1D33995031534197E67534ECAA8450B4FB8B6DA53D5AEB87EB0A2010902D682231E11F8FF00DA8C5FF513DA8ECE4FC83239D95AE54EFF007C4A90B481DE197FB9425201E1FF00D4760D1D0BB35DA49BD97938B918C2552D614900AAECE0D34636B5C3968F907FA447B67D33ED09ED73DADF6A7A792C3391E695F46C65686214CFFF000F42A91E712520254165B2AB822FB99BFD73FE9B324CC3B0BD8AECD649889F3711330F2815CC585024CC29531724D1DB661E5E67F89599E1F33CD66E230C94A553564A929E1726ACC40F4E82F1D247948AD71B69A3C6EBB574490B1002385F6C12784DC01733F7463DB1DB544EC6F617310924A95825B0B9FF00A65869AB59F7BB98AAE538632E7C998CCC41219C82FCF4FE35B7DDBFB336A1D3793FD1114D91661A9B2B7EAA9F4B66FC544BAEA565F42DC2F2908E00F070CAA364C9DF1F9D5C776733199FD434B9630338056684F7E25CC2857CFC553C2C963401EEF736F5164F99A11D9F989EF83995C25259C3EC77607E952F1F0AF98B15CFD56A6AFF00A9341273DCDFBA685437E20732A80DA80998363E933338FBBF869388C2FC36C361895059CBD824920FFD216075B53D77F336793258CFD2B04F0F7C4F78C4DD428C2F6F1E8F1F709F468EA4A2C9BE879C99BCD33DCB28F323A7758A2AB2A76B690D4203AED6A590A429D0E7892411E1988B63E137C46C8B198EFEA09787999662168566329489E25CD32CB14A89E2E129A1A5CB178F5A6419AA47645C4D48E1C3906A1CFCAC19CB8EA3A5EFF1079D56A9DD479CD0B47EA85AD47A8D65EB2D2B0EE6956B491C8820C8B9B75B8C7DEAF8272BFD27B2F95E166829030D253C268DFEDA685EF6B0E81AB1E46CEA60C566F3E61629338B1707FBC8AD6951E62102EA1F436DB6FD4FD6384A8254121300A8EE2D3F0F48E7D23B4B365994549775A48A6C03DDA9B787268C6712929C2A1807E116704061E2E6A3EF1922AA23C441F5F9441DA3DF883EC8A0F14F51258177DAF4B57EDB45630D85EF44C0D41A5FC5B6BF4DA17B3540F3E7613EFB1B0FD8DED1218FC4254B2904120D791D1FAFF88613F0641248D5B6BBF4D7EEDBC39B15299BDCFADE00F3BF31FBBE23FBDA0A38EB4F0F188E9987242810054736D4B915F1F5AC3E51D5004CAA768E7CEF73B794DB96136F5FF10C26E16F4E7EFCFAEE445EF9FBCA495C99916BEDE5E63E7317C37CB7BB3C3F3247450F3F06F5B450309C248A8D4B1D694F37766F4200A9B337AF24C133CF7822DCE08F95F6C5816B961988B5C355B5F0B922EFCA2E99690C12EC59AB4FE2B7A45739CBA47149067CED07A12768E7E98CA172C9F988FBEA6DCF98B45CB0286006B4B80C1AF77AFA6F102A9AAA8688729DC534B6DC43BDEA55C2B49696958008330A88B13D3683880ED276670B9ECB4A804AF8056D4B6A3A6BE4F13D265204D42D49E24B1052752A70E79EB6E5AC7B09EC69DBAD16A3C859CB7357D0E56E4ED064513AE052AA82C14990A3C809BA4FE5E61F899D9E565A0FE9A590563E65A41E24F0331A5473AD87384330C0CD93869E94A14B0524A5816AA5C5F50E0121CFAC4E3DA13D9FA83B45A1ACED1744308A4CC5092EE7B97B0907838070B0520402560711EED26F20CEC28DD8CED5E272BCC70D81C629687584CA98A27FDC018977A066662C4EED1C7B0699E8C7AC4D744B42CB248019D4E59D89FC1A691E516A5C933664E654556DADA76994A4292E24B6B3C2483E15709361331B796FECA9D9AE5F99F64B152578A97DE4CC22AEA492FC0A162AABB8FF00069D070D353331B8128F9F8549B312038BDDBEB406B1F7FF00F40754328FA39FB1E678871B6ACFC2E08327F8A3BB7C7AC74DF1F9ABFEA9B013301F14BB412E5874FEA125019A85C92799BF851C47D21F84F8633F219135350258141B74A6F6B5CD047B573C37170AEBCA3D3CCFCA31E7054C50E1FF006EA6F5B3791DFD6E0C752958644A4AD2A50254F7D3933DDEB5A53484756DFF0029464057862FB99E40C72BFB879E22F1F899A0CA4A65120104B5AF6B3C30384470CD26684EB56B56BA3DB4DB9C7997ED4C8A65FB4C7B3BBAA092ED2BD9F84A8C594B6100F39F90C769EC5E38232AC64B5A7878E5A68D664976D79B6FAD9F85F6B7088999F61BBB980844D1516FDC0E84801C7F916F48A8549FA95229C215C4C35179FF00CB06C07E679FBF9ACE5CFF00D6E238657CA16A6A8DCE9E57E7BD3B9E1729958CC0615256DC32D249A97A07EB60FD042D4BD07812D9E13304DA39449E9E71CE2708CC54D0A41E0B9AD411F57DABA9A56F0F5394C8C3C99893307EDE4052BB8FA9FBC43B5AF0AB4EE774EA8E0A8C9F354B8B240E0FF24FED7E60F97BF0E25619789CCB2DF91E5A27202C805EAB481CBAF4E91CF73DFD3C8CAB3596710973297C2E039649E7F47FB47C9CFF0087F4FE94CDB52E62C96AB6A579C664B21C50250AFAF3E47DB2779DA01FBB1F53FE18646064797CBE220CD92876154FCA08A354D5A9F48F8F1F144E2FFF00B438D54B96B52062165C02D45162FA8F1D6BBC55DAEB5E546669750ED48629297C3DD214059560070C1E42605A2F6DFB5C8ECE1C0C852E5A4A8CC0E0849B8D7CEB7F38E479AE2B1AA5E1C194B0C468695076E5E3A87B50F9EEB658CB5CCB43D14CF1E24BA560A92A6D457224CCF1446DF0DE7FB23D98563D73D18A90485FCB504382FA16AF879B45D329CC2711216A7E29401B331706FEFED1006BB78ED1F2C6574547AF330A6CA2950B67EA816EA92A4BA14DF081DE6C27A72F7E2771DF05B2D44F9589978290A54D515294654B7D2E4A5DEA48E62D48E98BF88D98E1B06A9285CD010801202D4D404559BCB4D0475D352EA97DD5BA0E60E5754BCE975E754A502B2B595192499DC9373EA39F77EC7F6364E4B82EEE5C84A4290DFB40B03A369CF5AEA1B926699EE63DA1C5099890B3C0B3C04B9D5F4B5BEC08D23B4DDA8E75A5EB5CACD3B995569FCD69D1097A95E741A80B4C2B88B6B483C0098924FA1DE9FDA8F85F27B4B8BEE276192B97316428AA58500E402E0A483726FF0066BE7663B5B98E46B9264159092976590CC41D19C035F28856A2ED63567696ED2D0EB3D4B98666CE9F53C72FFACBEFAD3FE6BC6F405B847BC9DE23A62FDD8EF82992F6170FDF60B0B25733149056A42128293A12007353AD9A8D171EDEF6EF34CEF05874954C502901438891A0E7737D2FA562BCA9D40FE459A65998E4B5AEB2F30E38B62A10E2C2DA5248B8F103722C7A581B62E0AEC761F1384C56131081313884291C2A0084F102050D3534A0D2D669D809F332E13B1330702D4CA36492589E553FCD8D1F75576A9ABBB412A6B5A6ADCC337A4A06826969EA6A1F5A112DC0094A9C2081C291EEF2C503B27F0872FEC763B19330F879481984C75704A4A48724D4015FDCF5D9F58B2E69DB1C7E2E6A10A2B28413C2EA2CD57AB9E60DB4D2B0DBA7FB70ED3322D34AD3997EB0CCA8B4E5225F65BCBDA7DD0D38D3E56140A43804428D883BE2C78DF81D90E3B33C3E3A661244DC4718985664A38A9C2AAAAA46C6B5A42A736C5E2E5A13DF2D0966238942A7714A5ED7E45E29276B87091C6E77AEBEB74D4F12B88B8E3A5C2B3B1278953EFDE71DA26E5B2B2CCA1196CA940C8549324200040053C26C0EEF42F6B34426264CD97884CD1338940951AB12407605FEEDBF3B353DAF76A54BA75CD08D6B3CD1DD38FB62687EB6F25969B47F34A0254F0042CC8B00224918F3F49FE9D322476865F69132E4CB9C7102795F7238828A8170581A1B6BA691D4FB239EE2F31C0CEC2E227AD12D29290952CB0670CEFD0FA91AC55D97E635EE553D9A503D5394D530E05A2B29EA9D69D6561478969536B428971424C2A6E649C768EDDFC3FC0F6970795E5D8C28C4A70C9084A972D2414B2284104580F3DE29598CDC564B9909D869CB525530FC892415392FF303A383E1B34596D7B5EF6FDA7285DC928BB50CF5BA1E014ED527D62A57DE34B942C77A5E253C2826FCEFEEE57DA2FE9DFB213A660572B29C112E0AD430F29C905372106B4D4E84C751C176C33395839404C5AFE573F39245050172FD473888E53DBA7695A1AAB37CD74AEBECEB2CCE75496959C569ABAAAA55616E40E24ADF3C3C016A48BCEDE98B2627E09F63F0323087FD1B09356809242A44B64D059D3BF4AF844BE13B7D987E8F1038E602A490071177A8FAE9A6A6B117D41A9EAB52D43F9CEAB7DCCFAAAAF8559966AF3CA4D4D5A80F0124953814D936214622C462E384C8F2DC9300A9383C049932B807CA89684866A8094A40028C4806BEBCCC769B34399098274D333BDE2EEBE6660A7AA8D2D5AF41A448342FB40769FD9636F27B25D5B9DE421B5346980CC6B1E69238A5CFE53CFF00040BC023CAD8A64FF86BD95ED9A7128C7E45835CC50204C99265A8B977214A43F3A9BD6BAF4CC4FC40C68C3C896B9EB432085312402C1A81C1D9EDF7996BAF6BEF6A7ED1A84651AC7B64CDEA74F3C80D869B0B614C881C485165D4B8E0717E12A3B5ED6C73EC37F4A1D99C2667FAC9383C2B77817C2244B00317350351E075BC452BB7388C4A529257C697A959215B720DA0D49A5E3AE55D4AFB4A7731ABAB71DA9E24ADBAA71D53EE38A599597256B52CAF97193C3336838F487677B3780EC9E5DFA6CBB0C894020256109E00AE1D580F17A8AD1ED10B8ACCE6664E272B881A1048B68C6A030E5666ABC4B3477693AB3B3DAF567DA1752D6696CF5F6C8AF4D1ADD6FBEE0414B454A42DB49F092773B9F29A4769BE1764BF12153139A61249AB1EF65A5770C28A05F97D350FB25CEA764AA3DCAC94A8FCA453AFD5BD2D0CFA9BB4AD6DDA356B59AF68F9F57EA4CC925EFE1AE555438A2C820A5CE02A717C05405CDA6DE470C3B29F0B724F845881FE998594B18958E2084252031352C1A8ED4E82D0BE79DA4C56629497514268B3C4494BB0B7D5BC636E94ED33B4DECE686BDBECFF0055E63A4559CB8D2B325D13EE95560A75CB417DDB8829E00624F5B7385BE27FC25CA3E24A7073F192A415243A44C968594BB1A150A3F215F5898ECFF693FD3B018A40593DE2181763622CFBF9DA36679A9F3ED6F9A576A0D5B9C556A5CD4B6C8CC6A6B2A1C2B57F2C210525C7167ECD884CF520EF8DBB15F09B03D85C3AB09829E89689C9632E5CB084B005D82193635A728A5CA5E2F1B33118C33152C05A9481C4FC45CB6B46A3D35B6D38ECDBDA27B6CEC7D8699ECA35DE67A5B2A60AD4DD0B0FBAED3A5C512AB32A7782EE19FB20199E6629DDB7F813D98ED8AD788C5E59869D393C44CC5CA4151513772924D75BD2B6ADFBB11F11B1B904D9B82C4A55312BF941366B5D8BB8A7A5ECE7AE7DACBB7CED8A94E51DADF69B9D6A1FE2922A285A7EA32E4308A732DA4AE95E42561D4813D3AC99315D88FE99FB33839A56BCB70C9EE8828224202878B39F7766893ED0F6867E67C5364932CADC800D01FF0026E47211D79A9CCF2D06BA99346E51B34FC011C6F2EA14E71FDA59714789449F11BA8DE099938F42E1BE1865F95E1E5CC91C3DDCA1F227858D00A017A352C34B4727C7E0B187172A6AA615AE693C40D804B6B6FB0D8986AA253ED24D45112A6DC50214A3050526410150A9E7D248F73AC4ABBFCBB1197CC4912D52D52FA8208B1D34F037AC4FC932A470778A4A66242788022B6D8E9D5ECC77B799EDC7B60469F6F43653AE7356B260DAD2BCA9350F374FDD9F1B8982F25B3226C419F2DB1E6FC2FC0CC8979F9CE152B0FDF77E66059948E3078B8BF71F9BE96B35AED83CEA52705350270AA18004D4D59C3DBD8058456B4E8A377EB05552B156B5713882B594A9C995AA4909F12A547D63963B2E7787949C261B2B92014A502529A80064A45052C00D3A544727CCF118B56350B12C2A49987E7A1FEED989A9B5ACFCA2DCCA3B77ED9748E937F4A69BED0732CB34CB882CA7256DC7154E50E921C484F7A1290A2A26C800CFC38FE7FF000772AFF51C366430B865CF52F8CCDEE659980B823E729E22D472F5B728EB595670A95932E5A9652F29B85C80696634F1F48A997589A4A751CCFF00CC562D4E3CB741BADC7945C52894F52B24FBCC0DF1D672D9672AC36170E80C1090030D801BEDD1E968E42A44CC4663326C90425535CA49B7CC6C4DDDA837A5A120AF55434C9EE032DA4ABBB571F115C9BCF3116B9E7BF9CB6653D73A5A454FCA34DC375F3E9511379980BC3CB48A900B80795F402D460C4794642A215008B7E5BEC3DE01EBB8C3DECDA3B9918A333E5252E09D686C2C746B5ED588CC04B4852828555AD2BCACC5B9F95995B5504CC72E5B7E1F84F9EE3103DE4C5E2A6853F0F116F07E41FECFD0C6B98E1857853C54E54F2F7CAD0EAC54A85E6E39C8B18F78F4FD92E3D6212661D4011C377E5FC74D1DC5EB0EAC55A81B2A662DCA39FA4DF7F8E1C4454D90B0E18815F467BD7CBD63B31A83FF0030F9729F3FDF5C5772ACAB109E1FF714DD5EC0023C58BB56F1C87064FCBCF5237BD9FDF8454B9AEFFF00501BFE1FBF23B62EF2329594FEF248BF27D37D7F2748BBE560F9DFC3C0D9B56AD9A2B8CE261572771BF33B7A4795B9DA30DB13964C40A2D887A8D46947F7CF5BC6096A6000B063CECDA06EB5F1115F660B2961D00F8942537BC03B73FC7737387196CA54942C2D7C65ACE76B6B4BDEE1E2D3804898A4BA4900B7A87B3378FD1C44F3B1CD74E7669AB726CED2F2D2AAEA80D5537C6A094A0A92D789174FD9513F64091B49C72EEDC61246213338A5853F1338043814A1D4B57A88BAAA4495E0D49525259140D770E5F7B8B92F5762447BBBD9F6BC0E06B32CAEB52BCA6AE9D872A11C21E6EA389A056DC2B885D4549909244CEE31E5DCEF2C4712FE4E15851E152404941770411B30B50EF78F3E76CA58C3E216A909EED890C000FC8351CFE34AC535ED49D82A35A6529ED5740E4E9A7AB6997D59BE9DA75A54A76525A0F155B7014F42516DBA623B2ACF335C3ABFD3B178F9AA2974A165D299A935E16FDA3803246F7DE1976471844EFF0076BF3A0A5CD5241AF9FDEB5871F656FA6A3B60F628EC4B24EC374A766CF6754BA42A2B02AA5CCC9144A52AB6B5750B4F74EB6543854A5241BC81320638FF006E3FA61CB3E296738DCFCCBE2C6E2780A94093FB53C3B905C72A0F38F72F60BE2CCBECC65430D310172C20339B33B3537F6E4C770B49FF00E240F69CD7DA86974E649D911454BAF52A12DA73AA5592952925C20A99E4992795AFE7C5F34FE89A46094B64148960924836A126FE941B6F0DF3FF008FABC3A138B4A949134AC896096649203902869B56A23D6CCB7E946EDBB32C8727CCF30D00AA3AB553A5754C8CCD874B8A7109264049038493CAF18E793FFA5BCBA54E992C4E49282C42914046C7463A87A5F78E6B9B7F54D8891296944A293C24385549B6DADC0E61A299ED17DB175FEB9D65A375E55E96FF0039A3D756B651F5E689FF003894A1710009001BC19E587184FE9EB0F830A40C425282188018116FF9023E9CE38ECEFEA5313331C27AE5296EB772A22C6E28CC5B4DA2E36BE93BED716BA5A2CB745B8E14252DA17F5C6E13090904CB7113CE4EFE7784CDBE03E4B800A5290272E6D4B121D89ADEB4F623B1645FD5CCC95874CB9A42025200E2581A731FE0B062D13CFF00F78C76CB45979ACCD74D251E00A4B66B2941822C2C276B0B6D1B6C6051F02B01895BE1F0EA4826CEA557A380F5F3B3E8669FD59AA705844D0285C85E8D4B6BF93BD693CFFE94CED32B5EAACB2A749A99A3A9A6ABA45BBF5D6D40F7ECB8D6E102078B91F23D7177C87FA70913264B5AE5174A90B49E134620EAEF51B8D2D58E4B9E7F5278EC6098133490A0A0C0D3E67BD18B83B1AED1E5CE7FAD2B97FC56A2B1A5533B9AD53F54A417F8E3BC79C7AD06DF6EFF00083B63DA3D83EC09CAA4C994A5525A5090E9A06006A4BF3D8EB68E099DFC44958F9CB9B3308959592492D5737A03D6DBC5199DEB069D0950A8E2E2E20B4F111B5AE49826DCF9FC477AC16449290854B414A406FDB5B3863E477BC404ACD70D9B14BE1C21ACFA7FEDD2CF435F18A7B506A469C04A5C22247085189322C41E66D63E51B62D797E4D230DF34B9684ACB5001E069B0FA18939494380848036B742FA3015D5AF58A8F33CE0155DC8E22A27C5B983B8B4FA1E67CA716C912A67CA9324CCE166A3F326C69E874261F224226065241069BD01E777B58E910BCC3356C93E3937BF15ED6E93D39CFB8E27646267A180C228B5D81B55A8DE7CE159396C90414CA1D5A8DCE84EBD1BC221B9A66685442828F8A4CC98F599300733D05AF13382C50278A7617BB240624786C0914DE9A4484AC24B42920A1D542CCDCF46A90DCF4AD6227515C8415149009DC8B4EFE9CC7BFE18B1C8C52267082C4358DACFAB8B9DBC6257825CD480B47101448B81666A7A8E9BC30D4D625704A8929B013D77E7E5D2FF002C4B4AC1A26BA811F3352D517634FAB57C21F485A657CA80C9147FDA080395EA1BC690C4FD741549227A137378DBF641F5C3A392CA9DC2ABA81B9F114F7AEF1212D32D4C4A58D093AF23F7F5D6120A90A0AB9BC5A48B74236F3103F1C18D9A8CA25A4A93C6E0806AFA3E9AE8FB43D4CA3352D2DC70D9BAD4D7670046A55401D2D7F4F5B1B8F761B4BCF70D3C1E342411404B1AD742F4EBFCC2FF00A25CCA4C25540CC0D35AF263E35D4437D655B29E1529E5A0DEE0124817E578063CB68E85EA71689A03106DC2011EF53EB6687B8595330A0894B28B384D1DFF003E957B086F73336F84B6CD42D40FF470290099EB11BF3369EBB61BCCC4E2CA9908330A59A9E9507969B0787ABC389ACA9ACB2352C589A8343420DBEE61B8D0BB592EAA95252824951793C4679804D8EFCBD712381C4255FF00F50099007ED330815DEBF9D4522470D3E5C84B2C150B003A369CBFC5C9C0AE812420D32BBC1027894B00C5E3700C748BFAE36C766794CB0D3319294002C389346E60E85BF9B4384E3E5A50A12D290821D55677AEAD7A873A36E63356599AD78032ECA6AF306D32169650F2BBBE232094212ADFCC72DF618A466BDAACAA43B4F94B4A6FF324003667D8DBEACF11E3159782B5AD6896AD0B713F27D08A0D2ADE12BD3BD9B6BDCF9E4D3657A5F365B8B20049A1A94A2FB4AD6C817E4662FBF2C52E6FC4CC9302A509788912D44D077881BFFDCF47A8A6CCF0CE766523898AF89239368F5F3B5B5EB7F647EC4FED1BA9592EE5FD9E2EB1901254A7F33A7A5EEC2EE0F0BAA4933D22C79E29B9EFF51585C866265CB2311DE71550AE266009A876D9F5BF3868ACD70284ACCCC426514D5296B96347A7D757B18B5322FA373B79CD78467196B7908541505D6D255F08F4EF8EDE5EEC5626FF0054D85980032542EE0A54DE3F2F56B5E1827B4985492EA0A4BE8A29FCB03FE22CCA6FA2AF523A38F3DD7AD50A94077484D132E1FF00571290E72F3E57E830D07F536B72AC1E14CC209E26251C3CEA9AE85EC393B05876B30E1242425059A8429DB91D5EDA58D61DE9FE8AE0820ABB4B440DBFF86A26FBC78EDB9BC09C34C57F5238FC494AA6E5A66105C1E3A83E29E42B082FB53289FDE189DFF173AB46EAAFA2DA9C371FFED6114EA13C08394A55DE1F52E7863AF5E76C43E3BFA94CD019694E0A64B4D4169855C351A70F2AF4DCD7795DA9C3A1DD6140DC7133F5B575AFA6B5FE75F45E6BC4073FC3FAADACE42BEC90D314A1C8DA429C1E42F204DB78C2F23FA93C50E156225AC002EE49F06497F4F4787D23B5387B258053BFCD4F0F3B33EDCE9ED4BF4777B43E996C2E9B224D734EF19EF1BAEA425B0904C96D2B24F15E39C99F2C5CF25FEA37018C5894A05C517C4952589E7C3A837DA8EC224A467B85042C043F25025F5737DF5703778EAA6B6EC6FB44D0150B6F55E4398875054389AA479C4A00B9FE6B2DA926D17E288E918EA7967C70CB25A4292B94870EAF9C135B386241DEB534262770DDA3953662509295710600A9AA2B525BC45FC1E2AA5BE5B5C3CDAC380C354EEB65B24C90788AC03311B89DC62DD84F8AB96E6B294A18847180591C4002FA00E2B436E578773D5331E4F0A824A59CA485B3EC5DFC34D8E9A066C95BA9A761BE3A8BCD37D8481B9872C36BC49F5C472BB55FEA738CA968E1492DC4CDADDC063BDCBFAC269C9E7A921E62B84F11EF1C93CA8FAD9CF8467515AD28B694B85156DF107D909527B90A8E1874001CE213B1F0EC45AEE8E4F3023BE91892B2594521A85BD59FCA1C232AC4489615C4BE136507636A91D2F4D6D5847DF892413277B9927CCC74EBD7094B54E0A6C42485248F995AB6CFD3CF5A5779721082954C4F1105C3D811C9A8FE7E158E7EB12209558D81262DCFF2FC3125326A26A50090B2072F201B4FAF487188C41527810A5252CCC090C3D3CBF980BE15F68957A927EF18D5D2400500B6E7F888D12824B82C6B6045FC63732F4C80600B6FB03BC08B72DB029408AA016B57FC5BDB465482AA1538B5BAE9D7DD21636F264C44DA4733F2B72F5B7963744E280C9A0B30342D4AB01E3184CAE0FDA5B5760EF1BFBF09E1BEF78FD8936EB1F2B37514051213525F66A79746D21708E200AABB121DFC1E961F6852DD4A6D06D17DE4738FBBCE7973C63BCE41C73F6D4FAC379B2900314860FB33574BEB6878CBEA412B24DAD37F75B616E971CF960331F4F5FE222E749410484802A6C36FADEAD7F08EDB6A0040701045BF3C31CB7304BA7FDB2FA579BFA3F378F3BE0813C15616661576D74F22D78A97340544F0DE27693D3A6DF2C5AA5E6A5293C2082756FF001A37BAC5E72C07C68E3A83CC7DE2B8CE5278556379E477822FEFF909279989C7672B03F6B9666DFA9D41BEDE16B9E0DE83D1EE29AE971E7B08AC734596EA29D441E0495950E5E11B73DF973F7C028E5D98AA695F10201DFC81D18EF4A79C5D3286A92C188B8DEFCADA9E95B98655D7AD550FD7107BA2A40A640994A93092A02D1E200ED1067152ED203384CB9A1E571B51E2EC84F1C9E009A81F317A105F6E434B691EA87B17F6AD539AE96AED10F362B73FA1EE0D0075F08516D6B538EAC15595DD340280327C3000918E059E610A662D4B5129413C619DCA8B245011AD0ED1C7FB6F9605A953254BFF006A603C079A5B8DC1A8A83B69B47A5DA2B519C9DD65D72BCE6B475414D66C1D6781B6A41406FB95CA48BA91294C18E2DAE68F98658713254152FBB5A6B2A60357049D1B50E4127504B472CC0A97976238D880F50E5AFE43C3C63A43EDADECD20297DAAF674B41A0AF4AAA33BC9A9A9D24502909096C95004AC3CAE25C25238660ED8E87F0A73F4489F3F29CD4044F96129C34F5B0FD55092364F7618126A6E23AEE4D9C4A9D2901DDD8104FEDDDC1F3371E05A3ABFEC4344731EDD326555708144E540A9429B0A054195252786265244D872F5C4C7C40C6CA380C47E9CA44DA061C24873A91B8A3BF8C3BED14AC3FE88CE511C2A4121D80703CEB4B5483A08FA26A3AE6695960B550AA86D68285A12DA95C240E14400098D87B8EDB63CB39B058E352A50410494A9C55EA4FD7634AEB1E54CFB339471CB94140A7BC29E170D73B694F26DC9892643A5DDAAA866BAB6A0B742B2E29E6DC470020FD910A20F316F973C73CC51C4AD6A329454F4F94BB7BAD4EDA5A3599230DFA633BE57E1A3B6DAEDD75AECF120CCF55E95D2A834B42DB4ED50078DDE107855CB84949111CC1E9230861F23CC33450E2428F0961720FF8F2D4F3A34F993B153552E44D52425458A7C7A7954DF48A0F57F6A4CD5171BA8AD524F8821B4A484EFB5845AC49881BF91E89D9FEC7CD94A4999873421DC3BDA963BF8C38919762D5533D570EE4DA806B715A39AE9143E79ACEA56C3ECAEB514A1EF152AFBB42CAF80F12BA14C6D7371EB8EC99476792908030BC4A02AC198598EFA6BD280C4FE172013402B9D5531A834AB5A87DD0C75E750EBACD16FD7BF515EAA86698B68427842678FC2600D87BA062EB23245CA4251264103CD893ADA874E4EE3533527B2D216C14B0A70EE69B1621EBE3D62AACFB53BA1C4968948209510A241E200FBB7F2F7462DD90F673118824CE2A961E9C5B6B41AD830E6FC9599934BCBD8CA214FB537A0BE962DB83CABECC351BAE182BEA6EAF5226E2C0F95E2D8BE60FB3699443CCE2F02C7C2DBFF0D573250490C1B42CE6EFD6C4D76A5E910DADCDD6E470B920C830AE978DEC7E43C862DB84CBE54A041097A0A8BDB7BFE7C62730F24380C5A95B3EE3DF5D5E2235F98BE6DC6522F2662C3CB909F3E76224E26E461E426A780780E5B0D89AFD627E4CB40482000534059DABB6E74F1DC4465DCC9C3FD44949224107E22FBCED8713B2CC3E350C3853B148A55B40D6B757EB1208C009A54501ADA6CCD5FC4335557B841324037BEDF3888E9CE7E1ACAECDA10070CD34B86ADFABF95442A32E54B7E21A8615DAB6229B5872AD5B055ADC2B009514C4917DE46F7BDCF5C494ACBE6618057116A358380CE19E8D4E96A5A164604B3F091ADAA6BB5ADE81EB085FA9B9922FBCD88E563BC8B79FBB0E06231086F914AF3A6BB73FC3DE1C0C3B1143535F0A0E7A1A68C79B205D5A927C2241BDCC7E22F63373870AC2E1B31923F56B4208144AD41243BEAA21E9A535DDE24B0613294788B6940ECDAF20CDF6D0C6C69398559029E92A1F9B70B2D38EA8F580DA56A3E71F28C44623B3F93212B51C74892054ABBE4D80D7E70283916D5E1D4CC5C8428A52A4BB56C35A5F517FB1898E9FECEF59EA4714C659A77347AA8A929612ED154B485294760B71909BDAE2C23CED48CE3B4390E43C6A939B61A7AA557804D43BEA080B27CD9EACE2194ECCA4CB524AD6025479114205081F9D83DE3B1FA33D823DA6B5829AA8A8D24DE5F93B852A354E56D105A5B55C9EED4B42E40E5636E471C7B35FEA7728C8B10A9070DFA8992CB06248537309203B1673E7584F159E6065CB4893344C24328BB70B36F42FD37D03C76AB4B7D18342E37DE6AAED03F83D43010A7E8D1446A038A31C480B69C8B796F6EA46396F6CBFA9CC776904B9595E58A9281C41644E32D9EA09701EDC9BC62B38EED62A505044C03621890297BBEBF715A76234B7B0C7B3A69A6D0D66D4BFE2CAB4402B57D6A8F8C88BD94A001E7726FF001E653FE26F697304F0A27CDC0F15E6199DE316BB13FE69688299DAB985FBC99C6F70297E8D5D5A8DCDE2F1D37D897635A24B8E696ECC6932E53DC25C79DAD35A1E0DC701087D2BE1E1E805EF388239FF006967A97FA9CF66E212A6F9423848FF00C4DCE9CB486533B461638904855C7CDE7AE8DD7D4C58ADE6EBCB1B0C65596E5542DA4404A72AA25280116E3EE38BD6FD245F1018ACAE7E366F7B3313882B26FDF4C0097B9653005C0B5F5BB207B4734D02CD5C1D7E9D46A2352B35CCEA7C4FAD3FE90C3696072990D848239C11E58565E117824A93889A663B7EF256D5A312FB8B7E62BF9AE753D750B21C9700967028F5D2A77F368D2A7EA957E37D20C41EF17CB7E7EB6EBBE1C24E1D54E140F2FC52FE3E110A3339E47EF556ACE58BFB0EF189A779D952DE748039B8B813D25437F9ED6C3D96990406425B56001E868EF7E9A5A31FEA9882ED315E2F4F33F6869A969D6C9875C302DFCC549173D7D3E7E787C89120904048D9C0DABB7BF53FD4E79A7117143534E8FC9FD3AC3154BC040A975D41FE8BAC91783B137E5EB1698385D381C2CCAA9085686836E4FBFD615959A620280E3350C2A59F5D77E5A5EB0D8E54BE3FF97CC9F644DBFE27431CFEE9C67FD270CA344A48D030B9F3FE6FC83E4669884D96A0372496BF3FF3053E619E33C6E0CE9C5017871B2B00F48595020F39C2BFE888A04A824AA80A5203D2EE08E5F6112387CE31003898ADB5BDADEBD6DAC6AADD4A9CDA9D596EA2C872ECFE81D05B794ED1D2B2BE056F0BEE4AE483BA4838513D9854A2A5C9C64C96B50A1E252803D38A97B35EB1252F3EC48293DE2C503976A35598B8F27A523AFBDA07B24FB3376A34AE53D16408D199ED5059773D6DDA9A914AEAEE1429414B6A9262DB74DB1B6165F68F245CCC4A272F1C5052A912BBCEEC283BA83BD29A11BD8C5FFB2DDAD9786501899C4059657117E837EB56D63CC6EDAFD81FB44EC9456661A5595768FA71216EA33AA608A27A9DB00A84D224A9E547D93693C338EE1D90F89E8C5A256071F2460F14964AC2D4286CE16400697A86A08EC9957697018A530527829C21C11CDDBCDBA523CF9AA7336A5AEAACBF36A3768DDA359406DE694D380DC292AE24851E1B8F10EB78C77CC9BB43230C12B13C6202C0243BD1AD42DE3E517644FC3622524A4A4F10B023A585CF854D79469EFD179880379B7A13C8FF00B6F8B81C761339960238252D983303B3E84B9EB4BC4163B0E2BC15B503F5BB36BE1A93A6C53E821245C1D8F5B5C5BA1DE074DB9C4FE8E76114F31F8093C24B904540D0B7E5F788C1294160A9F57A31A386234D1A30EF93FB9FCB193300A91EBFC42BC0373E9F88DCD3DF6B87CB9FE630779CBD7F883806E7D3F10B1B789F23B1FC2D1F3FD70779CBD7F883BB1B98C9EA854A60FC083F1B5FF1E671A2E630AD01E62BD76FE6374C9777A0D1DDFEA3DEFA728A93C8DBEEF740DFAC1BE11131C5C3D039B5EC694D07DED09CD906AC016A74DF7776E7B0877A0AA502A8369111E51BDB73BF2F2C678EA694A372DF4AC45CD90E750350C0D3EA7C34BC77CF51E5EB71C5051932AF0404F3200046F7FDED8432B12183292C19EA090F570FD3D63CC9817E2041A0D2F4B963420877F2A4545A859772E085200A5EF42A54921F2E70FA4F0C6D1F9E2DF839586C43844C042400414B33DAE35B6DE517DCB9822C1880C7AF2F2ADEF152672FD528A8877BD1CFC011689E83CB7F5DB18C5E512149078D2C7567B9DDF5736FF371C194B25CF2DC8A91F7E6CF6B456F9A07090A75239806C67AEDB7A7A4DB7849B21182A022AEC436AF7B74FA1BC5C32F21201497E4C777E57AED5884D70001B08DE3901FEF73CA715FC7244E428F0D4824017A1B791F0A6D175C11331043162C1B660FE15F758977649AF33CECFF005EE459FE56FA99629EA52DD692B012A6DF5A5BF182608095288F7F4C735CE32B528F1000A49571029D85C93B35CF8436CD728958AC0E213351C5340FF60B1F95CFCD4A03AD76018C7BED91EAAA6CDB2ECB731A65A2A29336A661C438D11C3DE25B4174786D3DE133D31CEF1D8732C2A581F32497B549B7A5ECE2F1C073FCA15855AC80C1CB162373E9CDDDB58B9F24AFA4A9A07B25CDD947F0ACE98729EA9D7877A965250A42086D5C533C53E1162271CEB3ECDC6553A44E49289D20A8A568F96F7729BBF32D70221F2699311315FEE94A4104F83DABA1D1C6D1D4EEC5FD9A33FECFBDAC296AB4A65CEE69A1F3172B2A1CAD282C329EF2956BDD60D92E2C8104440DA6D50CE7E2262716854B2E02B84125454DC2AF3AFAED61161CFB389588CB061D5891DECA4A8218D55C40BDB6A7531EBE64793653A529EA5FACAA6DDAC078D146B4825854CC49242A77988B4EDB55B179C62335526570144920052AE5541E219ABAF8011E67CCB2B2BC72A709DC40ADEAE3FB9C6AE06A01BD05E23F9F6B5ACCE10F34BE1629590784A385B1C2245B8426F6F5117D8E25328CA6520FCB24952AA5C955FF00F559DFA56D589718713B0DDCF7CC4A48DB403536DF4E44B375A7546B1656FA99A373BC5D39525DF119BED249BF2F2B7588EB1D9EC9A58964AE5A52E450A406F120120FF8E6CB2CC84C99B316495125C5BA915A7BD6F1486A0D50A056A2A04DFA488E62DE9E98E8784C0E1E4814492350D635A90187E6AFBCCAF00A4B324834AB1F2E75714BB549D6A1CEF527D65B2B5BE5A53615C12779F2E5B01F0C5A72F12D3312132854B6E5AFD0EFBF898504AC4A0060AA52943F47AD87561147E6DAA1E53EB6CFF310A2249D94394DAF07998EBD063A265987C34D4874A5058559EBB917AE95A3738591331628EA013A69FE0DB6ADDA2279C67C9643243E58EF02B89253C7C7CA24ED1C84CE2CD84CB82D4B200570B70914636D285C1D4D1D856B12983953B140F1254403525C9E6C0D9F666D5E21D579AD1B92A7495F9DD03DC200F5F85A31312F2E5AC072CC5A877E96A6B5DF78969381525884B39A505EDCB4AF97278D556654C920D22E5641E23C53C3D01067AFDD322D8772B2F41238E604116255FCB8E571B077893958650E1E305AE094B38B0667FBD9C07BB1D43F5AB9716F828BCA2104C45C5AF7F41720F39C2BFA1C3BB1C5A470FF00DC001B33A8EDA8A57568934F0A40484B1FF95459C825E95BEA46E2195758B0A8A5A4A82B9873BB65D7E49D884A52A22FD3A6DCB0B7EBF23CA10AFD66632934FEF58727C4D39FF989EC0A4A05D04914248F3A9D43FF00910FB94697D5BAA1D45365390E6B5EEB842508FE1B54CA5449B7F30B010073927E57C41E3BE21766B02852A5E658770FF2F7A8A9E4EA716F52D0EE6E265CA6134A43E80A4DBA758BAF4EFB1DFB456A250FE13A25CA3A77F83BD79EAA6124A55B1097824A60192239DF96396E7DF1FB26CB57C266226F0F170942F8830AFF00692396B7B3C68730C1A038989516622CDCAA3AFE2B1DA1D19F45CEBECD908ADD65AA5BD3E084A9D6BB962A7867ED0FE5BA0DAE3913CA39F3BC6FF565270C95FE9307FA8526C97297BD1CA5B415BDBC5BCCCD7082C108AB12EEEF6A55B7B45FDA73E8DFEC8723528EA8D53FE27523861A148FD206787EDA7890BF1F19040998F8E395F68BFA9CCF7B41C49C3E5F3B0411FB4A2612EE4D7E516E6C0F48AC66FDA456087FF293434CBD02883E20FA5FC5A3B0DA47D9DFD9F340703990E8C65EAE6C828A879C79E0549FEA28792B499B7236C73B9BF127B639B288566B899725414152FE6143A3B83EC86357A64FED1CE9B314B5A895A8D482C36D282DB8BB98B869AA58A64A5A6724CB1B61B1C34E96F2EA442909800CA92C711311751B462117271D8854C9EAC7E20AA6D55C53A6904F205675A9A798863373EC4AC01C67CDEAE343EC55E1CD2FD4D4A78471B083601B529A17E894948827947DD66B338E516989EFC821CA839FFC8824FD81D4C47AF339EA720A8F16B51BB8DB9D3F98D468452294A538A25DDF8D5C5B7BEF37DBCF1A771FADA22477406A05075A026DEED0C311899F32E49376726DABD7C347784AA4324C828F23001E5D0CEFB637FF004DC423F602A6152E453CFED5D79B41326AA951E20BF58E50A4A66556E84CFC24DBF19F2C06662B0F4EE896E4F50C7C793EBD68ACA335C072491AEE082E599BC6B4DE352D6CDE4A63F7E53BFECE105E718B92DFFCBA88AB104F3DB978C39E09859A85AAC01E5A9D2DF88C5A75A4856C7C847E53E9FB8798654ECDD1C53126504EE2EE48B167F1F08CFE9153182FE63573D6B6EBBD9F68D6AA865332073E6246FE40DBE1F761FCBCA59BE634B6E7ECC7CE3539730D0B1D6FD286A7C18BBBDA105454B728BCEFB1E7EEBFC236E987B2F2D20B124333B936AF3D34D7CA31FE9ED7040D75F1753F46F65B9CA84110543C849FDC7CF0F51810CDC64B5F95DB5AF3DF58DBFD39C58685EDE05DFEA7470CF0D954A6D7C3E14922FF003E5B9005FF0008C3D9187E1242AA92E1C6C00BDEFF00687787CB9249A07D8536D7A8F2AD21B1E423FB42444FA5FA81B7E1BE1F22525CB38E8FE546F53F7872701C24961D0D7C3A569F567742B284F100A067748833CF9C7FBFCB798274B0148048AD0D08EB736D9B5E90230C906CCDEF7E9AF386CA85260CC08312204FC23CF7EB783862BCC71F2AA994A34B3134DEC76E9CEF0A09006AFC9BEEF7DA9E570DAF02D34F5624A5229C0E2480257C5B7BF6DA4C9F84BE5988C4E34844F4AA5F17ED7AD06F4A74FA968AEE7388C4E1969FD3F130AB87172294E67EB0647A9730CB4B9581487B2F78143CC54A50F36A6D52850E07828010790B1E9C94CDF03879C8017F22E59E274ABBB248A872962588F1B8BC4F7677B4F8EC3AD1C4B50346049DABD3C5AD1D6FEDE3D913B30EDD32BCC73ED0E8A7CA35EA9A5BCA2DB6509A87402A212DABBB641E104481E7CF09E4DDBACCB24C477338CC9B2414212A249090282DC44B6B5D23BF767BB5EA9C2524ACF0967756D70CCFA53C447833DA4765FAA3B34D4359A5B55D15465CED23EB4BAFB8857054A428A9252A808BA40FB24EE3D71EA2EC56732332972F153316996DC2A282B1F33B16151D08AD6B526BD6B059849C5042E5965AA9C1722D5AB3EF70D4E8212E555138D34C50345A6980A06655C449B9955CC993B9FBB1D4F1B9EC9C721126524112D207159DF9B68D6D77A51DE230E95A8AC91C440E2200A1B587859B972D1C6AEBF21F96233BD2400D416AFF0010DFB8FF00BFFF006FFF0054668708993F2FD318EF08B06F183B8FFBFF00F6FF00319F7C46CA23DDFA6326613704F53FC41DC7FDFF00FB7FFAA39EFF00A92A1F77EFD0E1099340D58ECEED7D1BCF997D614461C382EED7D1DDFAC6F6DEDA0CFA5BCFCC79C1C23DEDFE6F4E9CBD3C79C6B3648014F534F7D7C07850876A2A88E3BEF69FD8B6F06FD6D80CEAB1557A7BB36DAF945CF94CEC1A95F4377DEF4D758F7DB59FB27D26A443B5DA635EB4942C2968CBCD121244EC8EF56B493FDBFA63CBF947C4ECDA44D48C4E1A64A941899A492E05E806EDE7E11E55C0844BE22B0F41C20D385B67BF51D6F1D57D4FEC9BDAC65EA29A3C9139937E28A94D653A83813B28202D453D62FE9B01D3F2DF8BB8698024CD5255F2820829ABEE40BD6C7E916DCB6721012153122F471A8B73DB7A6978EB4EB7EC3FB48C982FEBDA7EAD8E1E204B2D29F802D6EE90A99E9F0E98B02FE26CA29ACE43B3B1983ABDC1FF000E368B860F1B87494954C0C0D9C397AFDC98EB8E75A4751D2A887B29CD94429524E5D569098EA7BA88EB3B615C2F6EB038E5813F152D1A00482DA9B97E9A79C5B7058CC3A923BB5252DFF70735A6AFA68CF4A59EB6CD686B698AC3F4952D116875871B20DADE2408DF9F9CED8B049CE32EC427E4C44B503A710D7C7D9F38BDE498A925B8949B860E0877EBEC79986BC1D70A9A69EEE8929936B292414C90445F698E5CC5A2B369D84282D310EC5CB86E46F4FA3F9C5ED69C2AF0EEA29720FCAC0D1B4A56D7E7AD48F5BBD897B40CC75664343D9C966A2B333D36427EB010B7439F5A73BC400A09527C298FEAEB2236E319EE3F012664D267A0281759E260C1D99CB5A9A39DEB1C4BB7B83C3C997DE808952E6F1F761C1248FDCE2E2A4DC748F63B4776415EFB8C661AB9C34F42D842A9A9140053F61C40F010A4418FB42083E58E19DA8CCB09984F54BC1ABBF525C4C20370F9D08D3D46B1C1262E5CA4620A2684A8711005C8D350DD69AD758EC054578CBE9A8B23D3342C656FD1021CAE86DF754DA882485A815094822CA3BDE6F8A0A32B5A97326CC26622614F025B878384D41A56B7E948E5D98E678C998832D2B581C443B96356B68D5D76DA2B5D4B5685E66A78B8BE3504F7AE952825E21104845922FD2D04C729B4E599710B4B49766B0766E751E773D69B4DC22D720CC2A3C5C2E473DE9A170DCBC22A8D619D56B4C2DAA5580D1042B848063A7AFAF39922F8E9F926024F1A4AE50E2A3063E2EDA534B73310984462BF50996A52B84A83925B5FA1BBD0C75A33DCE99CB96A595CBAF93DECA88BA45AE491E91D6F16C5B71B2C20CA12889628080DBDF7726CFEB58BDCC989CBA52149F9CA920921EB4D48DA8D14CEA4D5C885F0EFE216923A5F96FEBBEF7C5E7B3B9461315C2676252E786854075A936E9E109CACDD2B3F3CBF4AEC28D4D2D41E315257EA1A7AB2454B6F786780212E2A49B5C207BC75F863A748C83072C20CB5C8530A9336586B6EADBD626F0B889136E024D1DDB6AB747D08E7CE34BA2CD337738327CAEBDD5AA424A28EA0DE3707BB20FCC5B91061CCF46558297C5331D2249009ACD411E6547C6C37E526818472192E1BFE3ABF87F9AC3ED0F60DDB16A984E59A6AAEA9498E02F27EABC1C7B7FC54A42E6D244C75938A7665F1532AECC71204E938E4BFF6CD4929035F94A987D5EBA44B613F472C1F9D32FC8B33D81607D88B334FFB047B43EA2527F88E548CBA8D712A35348A294D8981C4156116B138A4637FA95CAB0AB5265C932C870C3896D70F6200E861FAA7E0D80EF25922A15C4915BD9F77BEF17264FF00462E6301CCFF005CA72050E12E205222AFBFE6A00A1CF0F0DC08DF79B629999FF519889EEBC061D734172BF9CA0827F6B710F5AD199E90D66E6928278664C42B87FE991C3F2B9E4EFCBFCC5E5A4FE8FEEC5721EED5A93509D44EA2EB47D5AA69C2C8DC781440980091B75077A2661F1E7B43382C4A91370EA2E1333BE2BE1E60354F2AF5111ABCD81042A7858D8003D6AFF6DC98BFF21F673F678D2602F24ECFD8AB7EDC750ED4BAB00A2784F76EA488277023998DF146CC3B5DDACED3F12B139DCF4A0542424A59E8CE0B9D2A5C44163F3C561DBB952ABA851F1B1DCFF116AE5E9A1C95A14FA7322CA72E69B84A5272EA275691C80716CF17BE7CE462BD88CBB34C414AB119A6216D60264C079D38ABA73110ABED16281A2967672487F115E9AC6E7EBF50BDE27D6CB68FE8EE5965B007A36123A7481B63323033258527F50B98E0385F128EBAA892DAB0FA0AB39DDA0C58F99D55BDDC78339161EEAD8A756E2CF7F993A49DDB8584CF9C1F2DC6D63118789CB4104AA5850ABD03DBF9F462F4664BED062839F9C93677FF003E7FE5400C34900B21C0B175973681209124F2F5E584E6A8E0182240505120808725B5766A79EE7409CAC7CEC7179814CD406BAEE696B59ACF4846E54D2B5E215694C4FF002FBA1FF4F144F51B448E5B61CCAC589A901182295D3E600D6B701836FF00430B842D475009342C6A3504D6B7BBD9C98E59D4540D85875B48200E05752378006C236F96D892460B133EA1250EF46DC3B37BD28CEEEA561C29B8AFE94A917DB97AC3755EA8609FE49092072DB6371CF7F31E98929393A830981FA8DFE81BD29A43D978246ACC4588E953A7A0F188F556A171EE1529E8093065439F493BEC2D6EBCF0B4EC327049F96495BDD8174B741FC36B4108E2B0E89600410A05C11F4A9FCED7A437AF3C8559D4C1DA143F1EB6F31CFCF59730AC809C32EC78810AF070C1EE7EED0CD329CF090E6E77615A57E9FC423775129023BC0799F15C419117F873DAD8949382135819079BA49BBF27F5E51212F0C9201E163D4DBCD872A747844BD50A124AD244990543CB789BF3E57EB87E32394B002A5027FF00450BECCDEA21FCBC1A76FE1F4ABEA39F852139D565327BC03D543AF9903CB95FE1855191CB402112B843D404F2E87AF4F386B8C906511C20D5F9F9381F8DE342F562C890E0F14FF5A7DFBFBA3CBDD8DCE5069C29A0E458DF952BCB4F38E75A07CE3EC6BCAA7F10997AA564FF00C498B18526DCFD0EF8426E533459246C5B6F277A73BD1E3624F0B849AD8ECDCAAEFCBCE12B9A95524F1DCFFA87C7F7F3C31565D8A07F693CB86F7A0A13B59DF94612166BA6B46F3A16FE232A5D46A5F79C6A1023723DDCFDD387584CBB12A727880D4116A9D1BCBADE1D61D6438343BB86D7D3EFE718D467920CA811BC7145E27E516E9D231248C04C961CA4977DF6F06B373A73858CD27FCFE07F88C292BD355DECAD29E1893C5BF900489F5BE362860077640DAA5EDB8FAC26A9AA49AA29CCFB6A59C470FAD2A0A097048DEE0907DC64DF7B5FCF18135083594E2CC53AF3A6BE1AC6AA9E4D58FD7A685CB5FA436BCF30DB0EAAA1D2536F009F1F4FB33B72B4F2C2F2A782A4944BE0BB909F2D3CDFC01895CB72C939A85F7C4258382A67A3B8140C69A42043F963ECCADC2DA018EEC0599336F2F7EC3CF096372D9D8E6505148AF11B167D6A36DBC75847199248C32D4652D2003466A51BC5EFBF8D23625C6A9174CFD2BA685F492BA2524921E832B4A84C7900B917F8B34E130F854AE5CC94261218A88B3B8A52FCE15CB7133B07352CA20021AA6D5D3F3E24D44417B70EC334B7B50690A9A5CC2829F2ED7795D3B8BA0AA6DB4F15529292AF1A9B084494A07DB260911E2DA3E4E3B1BD9F9885C89D31380E225402947B872080C0BA828DB6B5ADDAFB359F70A90A54C09581A970C4070C4800E869B697F9D5ED2F416A2ECD35766BA475150BD4B59963EA6C294DC36EA3895DDA9B5A5210B1C204F0931378B63D07D83EDACBCDC1913480A40002890EA70EF50E3CCF2ABC75BC1E324E2A54B988980F183C4970599C56A5AA79024F9D7DC6A98813D20CFC2671D6C294A4F184929677D199F6DA1FA51C5FB520F808C16E2936B03CC117F81FDFE0D978E9083C2A5805D807D75E7E958C29007EE4B7A75B461DF2FCBE18593392B0E9623707F88C25295164873B545FAC721E5733EFB7DD184E62CAC809E8C2BB6BF56E861712BBB0EB0C0DAA6EDD6BE0F0A5B7AE20F3369DFDE479EDCEDD708A8197520872F7A93CAB0DA601707D2FCFFCE90B98A92926F04C11703CFF000E9EFC69DE23FE43667E7B7AEFE71173504A8EDCDEB4E7E14F03611EEB687EDA28B56E4B4B5F415A52AE04F1D1A5E217C560411C4166E3A7DF38E6399F626461D6102527814FC2B0078B860C29A8ADE3CD998767A74BE2480525248A0B9AEA39EB56D5EB178E49AE334453F7F4CFA815892D38BEF0A78605FBCBDFC85CEE76C51332ECD2A51504A4109B70A5B5DC5C575761B55AAD3B0B8CC3AC8429418B0BD0EB7A1058D37DE1F59ED3F380A087E9289F44C12ED2D2B93E678DB50DAFCFD0F2A8E27239D5265CE26E005AF437007260CDD6C61C49C46310A1C530BD1BFC3FDC0BD4439AF5CE555D4CBA5CD34F64F5497C4718A2A26C343FAA5419FEA9EBBD84E18AF21C793DE495CE90031502A5176EA6940FF589019B62A5283CE551810ED723622BCFCF522B5CDFB3AF67DD66EAF2FCEFB396332AFAC2502A292A1C6C256BB02453A20415036FF66188CEB38C8D4923325CB9693F32141F880E64D2F423AD6AF7CC8BB5BDC00264D2486A9558EB63B8E756E515767DF44BE94D4D5943A8B24CC93A634DBEB53D9865EB4AAA14EB44828405B8E25C4102D298266F84317F16D6B0642E712A0024FCE471102DF9DDF5BC5D95F1144891FEDCE1C481FEDA8A8324EB427E606DCAFA477C7D9F7D9C7B1BF67AA34A342D0D3D5679C094D4D6B85456E38911C443E55B5C0124016C53B1B9B6233E0A016B9724BFCC16544BF315BF372F1C73B5BDB4C4666B9AB99882B5ADC10080070B8700161A3B00FD62F7ADA8AFCDEA1E79E7128503FF00080084A06C0003853B03748F9E236528E440AE72FBD44DB155C80DA924F5276E42397CACC66CC5CCF9C92EE43DEFABFF001D2C18EA1BA868C90EAD5B7F2DB52A40B72067D66230EE5769702A2C6580FF00F73B3F40C352CC35F14CAD255C4B40E2B82456A6FAB730C2B10ECEF2DCD336EE9BA1CADFAB7D1C501495D3DD5612A5800CF9EDEEC4CE03B5584C3AD5C012C59EAF41767E5CBC21533CB049FDA6800AFD056FFCC41ABFB1BED433849527206E8A9553FCE56614EB21276250A58579C73C5830FF001272BC3AC209698080592ABEB5667DB9962F184B03C4940079102D52C34F0D1A22CE7B251CFDC0E6A4D7BFE1F553994308CB855F7FC5F693C6D984949B1379C2B9976FF173C4B396E0063925F8D426897DDD9A8C1DF6687285A6682274DE103F682C767D3F1B58564D967B21F65D4252333CE7FC431F689A77A9B8E05F63691CBFDB11E9EDC768387E4C1AF0AA028A13DF84F47FA862CCCD192890141960B37F6B7D77A0F1B356279967B3CF6099382468C4BCEA88870D53EAE229333C278A2FE93E7B618E23B5FDAF517FF599D2907FB5DEFA163A57CB7AC6FDEA01749D2EE5B67FADFADDE27796697D21A7CA7FC35A6A8A9383ECF1B0D3A44411FF0015B331FBB620330ED06758E97C189CC31334310E16B49AEC42BAD346A88DD38B9A97216435AA4937FF0015E512919B57BC022B6928D086ACC062969D98B00412D213C5B5A648F2C43E0654C26628AE74C2B238B8E6AD5FFF00B288D74617BC4763731C59002669D59A877D4F3ABF23B4267EAAA9D1C2DA96849D82145239DBC307E189232491F384B06350090FFE79C468C6E3CFFF009AB67BBBFBAFF986E4D23EEF117DC70C1044B8A264CF99318CA70A14C18005F4034B53D4185C6231441798A7A52A75D9EAFE8D7D2368A669BFB4A048DA483B6F2663F59C6DFA142A9C219EE40E8297D2947A987099939BF7AAD73CC31D7E8083AE91B05752D28225002F918E533B9EBE62E37185E4E02683FED2481AD2DA6D62C0DF43768590954C204C2549A9AD3A5074D61A6AF39A61242D23EEF94FE53CBA494BCBF1258976D86DE36A5AFE26B0A77097A02C3D3C798A5B41D6182AF5353D3000BA0C93CFA6D173E5D6D6DF129272A5A8025245AADF7EBF4D69019090C421C7476D39EAE59BC223957ABA94FF00E6206F7B731F0E5BCF3DF9E2564E50B15009A6C69E8E29F7B464E1A5A88F9051E8CFF5B7DE9ADE3D57AD92D001B766667C5C899037807DF07D7793939089A1D480A6FF00B45DEA6CFF00CF9C2B2E44A03E54B3D28E35F23E1F5AC46EAF5D1332E024F981703EF9FDDF1292BB3A84B34B48662070F2E9F4F387224814E1B5BC798F1FF26AC4FEB8248F1C8BDA76EB3064CDA67DE30FD1912524809BEC9D69F9F43194A149B06ABDC7E61ADED6E20F8EFCFC5CFDDCC7C2C230F5191BB30B96B379BD6AFE1195778BABD0FDB772D7B6BE02AC559AD9C514F0AC889FEA22F3B7EE63ADF0FE4E412CF1712126C47187FAFBA1D2329413FBEBBD6FB6F0D8E6B47044B86C6F0A3CE23F73D7D0BD4E4328544B40D43247E2AFA53F30B2252410421B9D2BB52F5D77844EEB4709003863AF11D86DB9F8F9DFD554E4B2D364D79240FB31F77D1DA2593FDB4F23EE9AC37AF59AC190B3D278A40F7491BEDBFBF7C2C32996DFB6ECE784D5B4B034A6DD2B0E901496615AD684DB66F7531A15AB7BDB29DDB621506FEA47EF95F1B272C4A5DD001E97F21E479C273A5098C0A5C8D4E9C98B7D630FF13A3FE72BFEB1F9E37FF4E47FC47FE3FC421FA51FF11E9FFF0014649D581BFB2E154EF2A063E78D55964B3FD96D923EE3DFD33FA61B0B35403B6E746A465FE3157F7FCC634FF4A957EEEBBF0A7F119FD3E8C1B664FE63735AA43C4953844742448F71F9FBB1B0CAD228897E694DB5D3A437992BBB366E8CC3DF5610B11A89B3092E18F27279CF33F0F3C68BCB4D7FDB05A96B1E8072D0C26505AD4F03E90A46A244801C2044471013D363CBC81DEFBE1BAF2A0C78A58DEC34BB346BC25DDAF7706B4FA78690BD8D428FF9A4C46EA3B73B49F2F293E986D332A4176403425B8454F887376D3EF0265077E1A1E8FCEF57A5DE168CF1A72C482636DC1F98D8FE7E8DCE5A949FD95BD874B1A7807D79C6C999364D251297BB38A3FF0027FC085CC668C9220A2368205BCF632447ECEC9AB06A0EC2FB69B3D7ED5D1A144AE6ADF896FE0F777A9A9AEF7FA2A7ABA99D085B8A03BBFB306DE2E824903AED88CC5617852410EE0D5BE85B96AF6B6B0EE5CA4B8243AA846AED434D9ECF53E149365999E694291539324A82E0385253C410601B9BC44FAF5EB4DCC6429414921D2F620B7277D798B51A25254D9929B814436D4F67AC7567DB77B00A5ED4BB305EB6D394AD3BABF4BB2E5454B4C3294BCF0755FCC2E148057C2DA55048558408B636ECD664BCB3324238FBA4A96912D4E594010E341C83FE5BAB762731981610B52969510169528B125D88B90C6B71E0F1F3DEDF7C9CD169A9416EA90E3AD34D2814F0AA9CA90F02081B7091E21D0EF8F67E419B4BC5E5492A292A54A0D624D00249A55C53CAC63BCE1132C278480A5000AAA0B712411A36BCF4A4697EA454D5BF503C285C252208129B1811D762371BEC3140CD6562958CE296A57095D6A433B5AB6B0D00E909E290002430B0FBFBF5A911C71A7AFC8E2D7830B97853C6493C22BAD479577357A437C2F0AA635C3816DCD79D6B5D7AC1C49EBFBFDFC79616CAF1697982656B47D2FEB41B810F33340084100301BF2DBAD86BAEF0718DC18F49B7FB7AFC70E715884ADF84B372BD6CF67A723CE2118867DB6BF383BCB8857A933CB6DF104A2B33388289ADF66E4F50631C2083405AE453F98BEF4CEBFCDF43E794F9965D50E9485A78A88295DDF0D81BCF01B5F613E9389CCCA4CD4A54264B2DCDE9A333756AF955AB79A64B214E90122E5D87873771AB063A47A3FD9AF6B949AC680D577E18AC69B6BEB6C71EC4A61302449317E104C11D714FC523052810B2902A5891426A5C92FAB5FA54C72ACE32B420AFE502EC58E976D2A03FF88B92975032FF000B3DF1EF098060CA89DAD33F0B9C432E6E5C16489B24DE84A74A015D7F8AD6B41C609525441205D9B715BD06DADCD9EF6EE83ECAB5B768350EB793E5B50FE54D29BFE2754B96830DAC8285202C02E710E48E5638E73DBAED8651934B95204C947133828042784BF0817297E17D373D5A2BB8D5A964996E529BDEFCB566D0135AB011DD2D15D90E98ECEDB64D251AB34CE4F0F1B6F36E0097089238DD053B93B1B45BCBCFD9BE69333C33A825243F090A492A0C492CF4E76356880C4E65370CC10B50A907ABEA4034FCEB511720D1FA973CA74BB9850A68287861084D6B6070931F612B498883613BE3974EC1E18E294938898A585314894B22EFFBAD4E6CEDE4C27768319C247129B60AA6D6F13E8C740859ECF74CE5CE17559BFD55D0656D80B724F31C5C5CAF7DB7C59F058F9F94200448336591FB94B09B5CD7DF48623113712A75AD4E6ACE6BB8B6FCEBBC3A21DD1F9780DAB2B39D2C1FF8A2A1CA5EEE01B9008E3E2F88F4C6313FABED08025E23BA425DD213C44BE875A31E5E4D0E01EE482C41362E4F56A1F62140D434ACC8CAF276E8F7E12B58A883E7C6923E0394E3597D9D9B29242E6289D4915BB3D01F7A1BC67BF528D15E0DCF701FCA13BFA8733AEF0D656B14FC00865A6E89A05C9B1054840222DB98F538DD1912A5926592CAFDC5CB6F625FC9A3638936770391FB8A35A181F4E60F2A4D33CA6C99EF9352A02277EEC1F7F4F33857FD3141642940A8EBC21D853C8F5DA35EFD4C3E7A3D8D6DD6ADA7F9AEC66899701EF2A94542E5050A3C3D07113B5AE7975C4A6193370547252451AD4B9676A1D7913A43895378C92E5F4FA1DA9A7DAA615A72DA350BBC1405B927DD333F9728C3BFD54D5DB88B9A72A59890799858924B98E54DD2D00965C4A4B932080EC91B1B931FEF8D485CF0CA4A8105810E2EDA5AB5AF2B883894050B35BDDFD61AEA734A76E4ADD4C83C92904F98E1FBA2270A0C02D5429241D473B56CFADBC633C4ADFE90CEE6754A248524C03BAA260F9FA8DEDD2C2F2585CB5612921041D0B3D4F2A57F31812C4CA6A2D6D8D1CE90CF55AB69A9F9A401207881E66768998B7A5BAE256564EB99520925BFB4DFEBCBEB1B230FC26A1F6A8007853CEBBED11BABD74DABFE1B89404CCC280BF2267EFF00C0E2464E44416E124DC534D74BF91D21D4BC3D89A1602C5C9F7B6F4D622398F682B6C2A1D49DFF00AC1BF9F8BE44FC70F9390AD80EECBF215BF4AFD0E94687430C4A696D5F9D59BEA2B10DCC3B45714524BC00122EA03F1BEDD207BF161CB7B3A560BCB714041B8D057EBF6A8877230E5AC69A569EF96BB0BC56B3B4274CFF003C1B5C718B8E5CC1D8FBF13F2FB3290C020B3EC69C85EBE7BD9A1D7E9940174D2847A3B1BDFCF61AC6730D74EBDC20BC07093B2D27AD890445C72B5AC31212BB38D5087DC375D5B5BF846BFA6511FB5B4A9B79D2CFE0F117ABD66F4121E1EE5811B473EBF2F762491D9DA0FF006DCEB415BB3D3DED5739FD312E025FA9BBB8E9D3A8A9BC323FADD4D59C701076F18E80CEFE5BF2B7962570BD9F24370330B30F64756E75610A230AA0FF00280D7D19ED5F77861ABD7727C2E5AF238A47CFA7CBA8C49272229BA7A52956AF8B74610A8C3916FB7E7F9E70D0AD7624CAEFE6A03E127FDB9E1C232276250EDA37E038AD7EF19EE0A86A474B5C6FD6F081ED729BC3969DB8A62FCEE7F2DBD70F139250108236A7F07EB1A8C31146D5EAD7D45C53EBB504379D6E924852F6E7C5E7D247C7D30EA5E48E920A59D8BB6CDEBE5AB88DFB824BB12CECCDAF8EC368D0AD689932A9F5503F8FE1F0C384E4D5B59DD9F4BE83EBE70E65618809171B31153CCF975E621139AD1004057583C561F3F7EDD05A7191947201D9C37A5479D7C61CA70E77E800000DFEDAEB7842E6B34816548DCC1FD7CB01CA3E604A75676F1760FB9A9A51E9ABC9720A52294D69E22AEFCE91A0EAB2F9F02E387FD43F3B45EF323A8C64E535A203176A7D69AB56FB18D2761EE5B85EF47D2F7F1F516783FC48EFFCCFFF00DBFF00DF8C7FA47FD89F2FE21B771FF7FF00EDFF00EA8DECEAA2D1571B9BC478F8BE65780E51FF006A4780FBA4C67F4E7424F8375DF979F9EFFF001827FE60F889F778BEF23DF8C7FA3F21FF008A7D7E5FA03E107E9D85490741BFA46D6F54A9E0781C1E189850E768B98FDEF8C8CA7874A3DC8481E845FCFEC9AB0E4E8EDCF7E9E1710B1BD46E5817418F303EE36F79DB91C6ABCB05004B3BBB5AAFBDEE1CEA4D18C2470E496143AEDE2FBC2D6B50B8AB9581111E2927E6267DDCF0D26654521F87992C3EAC2DCDEF194E18B12407D28C79BB17FAC3A53E7EB1B391CCDC193D37F38B461A9CA8104B709DCA5F9D01AB6B5D89D2038751B06F33E9EFF0FD459E2D6482E4111CC5847AF4F8729B623F17960FEDB1D5ADBF43EADB420BC3312141C9361F663AEBD4C3EB19CAC443827D45EF1BCD8DFDF798C33565E59CA496A0A5FEBB3D7D4C604B22C9DB63B0F2B44932BCC52FAF8AA163BA6E244EF3B6D24C6E0EFB79E2171D97F08F950E482CCFE24BD36D3CEF0B252DB82E1CED5E741E9BD22CFC8335A8A358718521748A0016E526124729BEE79F3988C5231F8104A93C3BDC5413A1F1FADE1CB52F6DEE7A7DE2DCD26ACB975754BCC1097B2ACD695FA6AEA75A789BFE732B65B24104594B9102058CE39BF6851330CB42652CCA58585058151C2A04B6B5142CD422F16FECC6293879C1CB391AEBD1EBCFCAF48F9CEF6DCEC453D8FF006BB9B53E5AD1672ECD2A955793A82785B525D1F58A80826CAB2C8DE4131CA31E81F87DDA6188C261E5A965CA02189B94809FA82DA72B3FA03B3D8BEF25D54486A9357A5013A0157D7C0C74D2ABBB052EB3096DCE5FEA480164CDEEA9FC31DA6465C8C4A5331828DC1AD1EBE66C7A686B162C47CE9048A1BD7A75F01F50212F193CC7CBF76C2799A46164100B508352C4D19EEF6FB5A1BE192CB1460487B59EB7B35FC290059E4418F43E938AB60712A4AD556726AFF4EBE3614A43DC6A3890973A58E9CBCFEC39C1C6AEBF218915CD2A04855DA94FC6DA188CEE81BD4E94F6F1A9D5AAC449F203FDFE7F942492AE249507BDADB7F93A36CD1B265814BFA790DDF6FCC7A3BA43D897DA2F5C86BEA1D9DBACD2B9C3158FD630D2824C1E3EEDE0950B72DEF1CF109DACF8C391484CC42E6A105415C251F3B535E10DEEBABF38C7769704B92172B12998B1747ED3714E22DAD4D6B66B4771FB2EFA323B56CA2A9399EA1D78747210A6D6AA3144CD726A4020A9254DAE121039911D31E74CF7E22FEBE6CC565B8A54C492A74F094D9C8A96176F66B4ACEBB4B97CCC32E5CDC083359A54D137F6124B9617A373DCC7A1DA23D973B3BC89348F6A0CF3FC499951F0127EAEED2071698B424C47879881C81C732C7F6AB39985412A9A82EAA85135362C08D34F0D8C714CD7321C4A505F0D4B03B6D4D816F2B477032AD5941A7B2EA6CA74F640CE554F4E8E053A82859AA000092AF00360247112761E58A2E2E566799E2A6623173A64D248E10AE2F92F6AF47635110F85C72269520AC5ADBBD1BC3D2B4763086BF546655AA2A4B08926CA0DA02B9DE4241B75B5E7CC99BCBF0F2E401DF715AAEAB378FF0098658C099AA50490E2E68C3A6CCC7576A924C372179A66055F5879E42531C0038B00850B82124585BACFBC1C4DA27E0A50FF006D12B88B392949B5AAA07DEA62115825153BBD4B1A7A6C6DA7D6323953847896A51B9924998247351FD7717C41E6D2D58B1FED6D460D76DB5D6C2BD0C4AE1308997C2A533E808E76A6AFBC6D6B23EF02C13B478BD7900227F0C23914B9B9671778E78F7D2A4B6B776F3AE85C6324215C212CEC4B0E5CFF000DF58548C992D7DA337DCCCFEE3F199C58558EE2B067E8C3ABB3F85B48622411CB7D7EA60759669C02549E7731F2263AC1D87C30267297706BCD81FB7E203294081777DBF3FC6F081DCC1A6C11C4205809B5A7CE3A5BF495912B8FFB59DF57D7AFE2F18187481F352DA93D69E7E9CD9ADFCF295B1E25A0127910368F537BF3BE1E4AC04C9A3E54BA74E4EF57E5B887985C3BD402DA1AD6FCED5FA54C45331D494C0C77C241BC28DF9DB90FDDC9DA4E464AB5172953D1836BCF7A57E9A43A1865392E4826819BEE0EBB9FB443AB75AB742210F7171CCCAC9022D6931E640E9EB89CC3F678AC0FF6D8EED7DF4B8F2DAD1B0C22B899ED5B73D75B369BF2787E65DA1A47178C738B83CBF5E7CE713B85ECD129629A1E5BB9ABF41F5AD2344E14872493A746D9CF336A6C0C40733ED0B6876082AD97122D0441E5F3E66F89AC07674A685048E8F6DC6DD2876A43BC361CB9E77A5697F434A75BC436BBB41324F79BFF00ACDCFBC4C723FB8B0E1FB3A354576E1EA3969F4EACF93874BD4D4B39AE834AF95222959AE43F056F149127ED913B8037F5BFBF13123B3547EEE81B427E809B914B386B343A4618306147AD1CD6C6BE0DE43788CD5EB068C8EF8DFAAE6DCA6F6E7BDBE589797D9B4A98F7551CBD5ACFFE7A3A4E1EB56E5B9B6B5E7AC43B3AD58DAFBBEEDF20DEE167EE9E5E66D36C4FE5DD9FEE81FF006AA2AFC3F5035AEFD61E49C307B1D19C1D2EDEF4B86788B3BA9D2265E3046DC6ABCEE7AFC671369C981AF776D4A5CFBEBD44385E19EF47D83BD3607CBF8A36BBA8D0A36748893F6D573FF508FDDBAAE8C9D229DD9ADA9FC72D6BE71A7E9056A6AEC18DC7D5B7E669B35BFA844477AA02F3E3E7E4388EE3D371CF0E1395049AA6BA387E9B37DF5A46C30E052B7A50FF001573EA219AA73D42A25D3B1DD5CA36267F73877272C4A480C0A8DC331157DDBCCB42A891566BEB5A5DF586B5E78DFF00CC83CA144DBA993CFA6DF0C3D4E5A1D9491E403EBA9D3FC6F0B7E9B97BFF00CA10D4E7483C24382F3324C7DFF8CFBA30BA32D4D999ABA13E2CF18186219EA77615EB5D36B5F786B733947F79224CF888FCE3E1BFBB0E9397A00140DB307ADDB9529BBF8C67F4C1852BC8D3EB60DB8BF846AFE309360BDA6FC479FC3E736E470A0C1A122890185C00F7E46329C355A95DDBEA490FF583F8B0BFF337FF0054C0EB73BFEE6241D7F4C904B2789DDE81EBEFA7285D3866360DE05BA0AFDFC213D466893C1FCC169B4813F33EE3B0DA231A8C3006A900B9B81AF9FBD03C3A120B8AB0D680136D39EF6E468C98E66836E3DF9123EF07F0F86F8C0C280A761D7DFE2B0E8480C38BC472D371EF5B473FC5120D9C8DB65728F51CFC87BED07E94034008E601FC74A8FA97D6761C10E030D8D7EBEDDB678E7F8B27FE67CCFF00DF83F4C3FE29FF00C53F986DFA73B0F21F98066C9FF99F3FCD6707E987FC53FF008A7F30770761E43F31BD19BA37E31E627EFF0017DD1F2C1FA61FF14FFE29FCC67B826EDE207E617339B213C5E33B8D951F8FE76B4EF8467614355218DC507466277E909F72C482068C43535B3BD5F4E421623371FF003150623C64FAF3133F39E9BB7386410FC201EB50D62E4B1EA5CFD8EE52DABEFF00C3FE617359C246EE131FEA8F4B4C7EF6EAD2661527FF004BF5BF466F00DE91A1C3A740FCEC7CADEF943A339CA0442C836985DBCB63EBCC01E47082F0A91D342C7C6FCEFEB78CA64243D1BC4926FB1FE6D7879A6CE923FF0030F23F68F4E7F9FC45CE194EC185E8F76205B9B3F98B6D0DE6C904BA412750697A59FF00C33BC49A873A4C0FE64F985493F80F39F29C355E5CC91476D19B6BEECED61630D55254E5A9B8D9AFBDF661E1131CB73D6D2140B84484DC93FB267ACF3B5B10F8BCB8A83F0D3E6E6E7714A536D61352787C7935A2C1D399FA03E805C24150B719EA3913D6D7EBCE6714BCC72E67213BF42EEDA7F986C0BBF36B16A0FB7D1B678ECEE8ECC935D4EF3282081DD13D4410641991307EF3B938E37DB1CB140899C25C3F85BCFDED0E30D8BFD3E225B1A715DCDF57DC97AB52F7B8E9CFD269D90AB53F64592F68F48D71BBA51BA82FB884CAC8A9752D278D43C4AB279F981CA63FB199D4CC2E3BB92AE14A16800380F4D282C2FCE3BE763F302B44B4B965D0DB7F16F2FA57E759550EBA029C04252A5049DBEC98363CC4796DEB8F6BF65F3046272F96A7015C1524BE9F7FBDDE3AC292424275A1EA0D7EE235973CA790BFAFCBEEC466758B4CC5292142B46BEC7714F5EB1ACAA2D3617FA1FAC6C43A6FBF2E7B7EA7D047DF5D912560B83424F838D74A335372D0EE727BD606840A86F2F7EB1B0B806E23D4E2465A295DEB7F2F2B9FA86847B8AD154E8E7EDF7FC62AAF7996D4CB090A2F885180600E932458F2BE375A8A0505073DCFA6BBBC6532120D4B87A7E49AFD0D23EE58D7D7B87F90F334A23FF2295968091784A12916E623D31F37578BC5A49054B501AACA97471FF27AFBE51F3CA5769715303AA6101EA6B5FE43ED5118703AA5A7EBD9D2CA567C08EE54A9F78988DA670B48C74C2A0F6342C03823C295B785A3188CDE74D4105448152E6ADF515F10FBC0E648A52C3D4AEF7A94C12A29E19D8EDF3369DEF89FC362659FFA92DC8D697A7DF5262A7986266CC25B88062E01D5DAA4330DAEDD21C9344BAA4210D27854CD9CB44CF4DB6F89B5BAECAC44A94B981494B2998961D0DBD2D5A44223193A4AD8053137A83D2DABDFA750BDACB5F6CDC098B4904DAF17E9B11E82F88E9DC331F8080EEE069D1F43EBCA27F098A54D62A0DB56FE9B3824C6F51553C7188045A0031B7404EC3783BF4D9A270D338832B6607D75F21CAEF1348E129D1C742EFF009FA51E95D2BAB49025503DD3D3CA3979DEC77C4B49904252407FBF99DFAF3D8319F8954BF9520921D9A8E487A300D7606D5D286123F9C374401EF078A6F206D1D7A5AE7E785958454D0C0356E2BAE9A68CDFC467033666214789241AFEE24BDC5F41D7CED114CC358776094B891C878927A81E5FBEB87587C996B3AB86A36A58F3BFA44909243D0BA7C5DDF9EDCA21B5BAD14EFF00E6A470837E310679DCEE3E78B061FB3EB2CE14E74626F66BBF9BF278DFF4E5DF57DFF9BB546819B6880E6FAD9D6F8887B69D9423AF22479FE63160C376616A1FB554D83D6DB7B1CDE35EE00AB7A1F5AFD6F15B66BDA0BE88870DE40F1F48E73CB9C1FBB16FC9FB30025416973472CEDE5A7869A562470522A6C69A0DFAD36143CEA220D98F685502DC7133FD53B6F10636F8FCB16CC3F6725A588439E9F5A55F95F6DA48E1C1B25AF63FCBFD36882669DA3383878DCDE784957BBD2D7FDC625A4644840712BA8B0D0FDF5BED77C7E98EC697DB96BB11107CCBB458E2FE77C553F79B7EE71268C9D9889543AB6DE1AF2A6F48C7E90E80B68000DF5310FA9ED0A7ED390449BAAC7A9131BF947C313383C8D731C22512433B06F56DCFD2978DD187E0366A790F7B539C45EB7B40041873CECAE77F506F61B7289C4EC9C8668209924071A52F7A57C0727DCBA9529D541C46CF6F01EFEAD11B7F5BAEA15097002264F1011D0EFF000F76DCE7B0D9404FEE4682E3A7D747EB630F112663064B02D522FABDB956CF6863ACD5CFC121D83FFAB6E53CEFCBF6226246552001C400A6DE27D9A6D7A391216CE433D4BEB40CF6036A18607F54BEB8974D898BF2EB24EDF893E78929796C9154241702A18EFA7E5FEF0F24A1449F9438B7A787AF367AC34BDA99C5132B248B595BCF94C7AEF85060D2094A6583762DFC35B975DA1C194B37413D4084ECEA0717C72E447FAC5FE26E6DF75BA6A708D6433BB8E1767DEDE756615A083BA57FC3D04277B3F59305C1CEFC5BF3F21B0EBE9B6105618B91C0430D8ED4ADFC1BD088C2A5A9AA8F4FB8722DF686D733D75572E584DA473262D3E5BFCF69DD18750154B73E61AD6E553585A5485100A505F723C47DBDD92AF3C5DBF99E9D4EDCBF630B265115B9DA94F7D75858E1A610CC5FD3F9F2109159D3A77583D25447E9E97C2F2E492C40A92761ABBFA54F846061542A5FC74E77E637E509579CB9BF797F5FD679F2FD70E44903FB69B381F7FABC6DDCA989AB3EDE9CE386B365A8A871DF7BA8FE07CF9DFF001467A120064B72B8D3D3A529CA364E1946A01AEC0F81B10357B46EFE28BFEF3EE3F9ABF0C35602C1A1C2308B001677DEFD1C68E2135466AB1C32B3B923C407A49323E1F9E08769C32C81C496E9AF3B8F6E7AA6FE2CBDF8CDBFD53F120C0BF909D873C10BCBC3B100A4DF5177F1A3539E83683F8B2CECB3F1302DCCCF3371CE647492359D86528D05A9AD3F3E3D2907F165FF0078FF00ABFF00BB0423FA49BEC472335593F6C7FD5FA9FBB0460E1660D3D3F98528CDDCFEF1E6388FC7D2FE57C118386982A416E9FCBF942E673654125520C589DB698E636DFDD717C379E3F69F0FAF2FBF5168495865F11A1AB3163CFF0093C86CF0B119B2AF0BE9FD463CB788C335817173A6FF00CFD7EBA9C24CAD1C8B50FA7F10A7F8BB96F1CF520FE67F7EFC345A5DCB3034F2B5A82BECC6BFA69C2C83E00FE217319C2C412AF7C9F4E5E5CA7A473C362826E0EFAF4B535F1F078C9C2AEFFF00ED3CBCB43E476877A7CE5C9BAAC77BDFDD049B4F2B7ADB1B499449F9833EFA5F57D79C379D87527FB5DF6A03B59FEBA59E251439D2ADE3B48983C85AF33D798FBB0E4C8960114A5AB42EDD29F73630C66495281052433871D7AD76FB44958CED61248724881F6A08F74EFD7732047945E2F0C1493C29A54E9E3CFF008D618CD9132AE9248A06FA790D6B6A9AC4D34E6A073BF44B877B99116E9CA47979EFCE9998606612AE14B8360C49D795296E8F11CA9337662FB0FF00034E76A563B63D98EAE0CD7B54CB5857D64A123C52045BC5D2C7A8EB7C735ED464EB99865CC54B628428B9005FC2AD66FA35232795C99E8F9480541B4F57D999E96E663B0DDB9E9A4EB5F67FED074C5434568FE18D5435C49903810BA8F09DFF00A44C1B9F5C79C50A548CEE4F092026629C02CEC59E9F6DF68EE7D859A4F03BDD2D6A5B7A59B63A74F8FECF1B6E92B2AB2F4A4257499857B4A064484D4B891D62C2D6BDBD4FB1BB15989465C80B53012C30259E95E6DCFC6D1DE904AC7117AA535028C05E9E3F9864539E7246DF1EB1E5CF0F67CC99889C7841238B9B33F900DB42A94D416A7E1E3969DBA813111D7F7E677E589944B972E5A12B676ABFBE6478187A9040480CFAF37FBE9D2371713BF14FC6F6F3F2C39425240E1200D83726D7A46EA42920929206BEF58C1EAB4D35338F012B4A9BE131600A84DE236EBD461963D69952D550686A1AB606F570ED6E51893C33961093BFA036F7D23EEB90C0E9E222361023FDBDD8F9E53E52438291434F478F99099412E05069ABFAD2FF00C0A4284B29FEA48F7807ADBCA30C912439A3541D3C4BDC68E7CA3612D9FE6356A36CDF8F7AB830F25BB13007B848F3BF97BEC39E25654A25258508A5DD9EBE1CFD8D0E1D157653DCB6E051A91B1598B6CA499049E9E198DAFE9D77B5FA6C704A9C40A80EEF5BD49F0D3F986D3B0729D252800005C52BE766F76863ACD46D37BAC022CABF4DAF20CF2DB79C3B93922D740E75A7A786BD7A88D512C22890C34034AE9A9E9EC45ABF59B54E2CA0419B1503100DF63F77E789AC276754BB8552CE2D466F7AC3C94859B17D19B5A52B51E9CA2039A6BE80A01404743EBB7E6019BF2C5830BD962B22A5AAC081F6D7973BC39124283901BC86EC6C3F07AC40B32D78E389480E9313693FB8F58817C4EE1BB2490589D469CC9F1A7BA0791C1E193A21B7D34715A7DD8B96315F66DAE570A3C6AFFA8DA37DE48823F41CAC983EC8CB05249AB0D00DAEF4D7979C48270E4B101B4DEFE3AF28AEF36ED01C6403C6A13360A304027A411E738B7607B2B289B03C2DA313ED8FE09683F4F5B5CD00FA50FDA95A33C57D99768CE92A951833BA89DC1DEF37F3F741C5AF0BD974060C2806839834D5ABE02D19FD393702DB0D34707C07E2209996BF7564788C09B137E80EDCAFB6E6313F87ECECB940B84D59E8DBD0DEC5ABD76687125A43850BEE1FD3CAA4FDE2215BAF1EE4AEBBA8F4F5B49DFD791C49C9C964B03AD68431246F7A07BFD21E09C820820176D486D6ACE2B7BC43F30D542BF87896416E600279FBF9F4DBA4624E564D2D92C052E4B5791F1B56C3785D130711A38A11A38A6BEFD2B17AACE512789C37064F118206DFEDC879E24E564928814018D28FA07A73D6DE10E51310481C2C7CF73B1F3FE222F9866C1C4A421C208E52473BF3DE2779F4DF161CBB05270E829094EF6150FE22C346FC6B36499EB484D00B902F50DB1BEBE2F0C2FE647FE6CEDCFDDD6D73CFEEDA5D12E4B5427A33B7B1E1607487D85C190A0E9E56BEFEEEFE24A2566409252E12044413F70EBE9CA63094D9485060863FF2A02C1DB6E94360444F49C1800028046C5A8DCDB7A8B38A184CE660019E33111F68CFDFBF958FA02488E99809ABAA490C6A03DEDB6C5F5D6BBEF3A42024FCB5FF003AF2DFC7486D7F304DA1CE479F49E9FEF6E587B80C2CC90E26329CEAFBFF0022FE15B6F8292921C867715EA77AE9BFDE1B575C913E3B936379FBFA7C312BDDCBD852FF00CC487E9D1B0F2FE634FD787FCC3F13FF007633C12CD78475FE633DC27D83F984CE55CC8EF0DA48B9BFFEE1F2B7974C704BD93B697FCC63F4E8D8797F309555A0117F9917BD8DFCB0D67A521D9205054372F1B75BEC214972057852FD037D2B1A1CAE17857A7895CFEEF4C3585FF4B47E1A1D77BDFE6EB094D7264CAEFCFC4BC107E99A8CDCBDAA38FAF23FBFFF0072F1B71AB7F41F88C1C283700F5FFF00EA37355C91C442F988B9BC0EA48B0E64CEDCF094D2FC3B87F173EF4AD6B0F30F85490C523C869E6F4DE87CE395E62019E23FF58B7BFF000184A1D7E8D3B0F249FAFF008848BAE0621479F318236FD2816007BFFD5187D70FF71FFA8608CFE9B97BFF00CA33456024CA80FF00D4411849603D2F57F48C190137D793FDCC67F5B1FF00311F2C690774397FE23F307D707FCC46083BA4F2FF00C4473F5DFF00F553F1FD7041DD0E5FF88FCC29A7AE09E225C076D898F7C1C27334F18061D2AAB024720295F0BFF887046629DF8933B1BABEE9FBF09D3DEDAC67F4C9FF0088B6C9A7F3CC79C2D6B304413C493B4C927E026E45F6F8E352949B814BFF003FCC63F4A9FF008BF4F7F585A9AF4C8F1EF72388FE7FBE538C7026FBB6BEEFFE231FA245F847D835986C75BBF285CCE60949FB569E4ABDA76B8993EB68C359E0241005DABF51B7BDDA23F17252904049200AEA6FF6F7762FD4D99A2C02F94183FAF59F7FB8E1A4462F0E922CEF534F1EA6FD6DBD5F18CD5278471C7FF5449B4F3F9DA2E3D304021BD7686D330E0B70D80A8A1DF707CB9C4CF29CD5B8038C8E5B91173E73720F5C2664CB533A438D587E3E90D558740BA4575DFDEACCF174681D52AA1CD58097152A75B54955E10A06C6E248FBF9099ACF68B29973F053D6123E596B7617749FA3B57D68D5CCD70E04D96426AEEE1A80355AA2BE7C8DE3D7BCAEBDAD5BD87E78F00852AAF24AA055024F734CE8B98F2B836BDF1E16CD248C276AE4B025299EB013A1E25746714BD599A3A576397C0123F69F958B1D3C2FBF9EB4F8CFED532F465FAEF523688FFF0036AE040B01154EF2B44DAD138F4D64B30C9C2618874F1212487E40E8D4D5CD01DC18EFD964E3330F2C7EE00539B8721F7A1D686DA45798E83964C9665924076BD34A1BD47D5A2591281E9BECD6DB4BB6AC6353AA03867CFF000BFA61863713F3B0535695E6E050F869D61DA249E20402C2EE59C737D4F946BE31FDC46FD7F77C2B2316521B89F4676E4ECE3E97F087989522649EED0C54DBD453AF4673D19A1592D5552BB4AE186D650A52F6E1E054C5C03E2888F7DE711F99E238A54C7535CB3FE4F98E9CE2264489D267A2784964F13ED5BE8D4BBB7231F79E8692483607CFA4F33D3A7E78F0CCE0A2753F8D1879FB78F9A610E03D0D5F57DB5D2372DB40493C42C0F3F96E709A10789238581D5B6B7B3F78381B9F2B79D7488ED6D4A5A053C6011100902237E63F600C4D61E4BF0B8B81A5FC2DADBAF283839BBEBB7AD5ED10FCD3352DA13C2B07ED490409BF3BC413187C65AA531425478B46D34F3F37F209AE5DABBD5AD6E715467FA8D6DF170B8044ECA1CE3A1DA62C7AF95A7300A98E01944BB35DBD0780A8F18C26497B39A69E3D4DEDE622A9CDB58AD9FB6B242A62E6DC26F6E9B7BFC8E2FD96E144DE10A9646EA20FD00A5A9FE21DCB96524937D2C7D2B5EB4E45A2BBCDB5B92170B55CC889B83D36E5E5B46DCAEF80C9E5A824DA81DC74A0F1FF0030EC218543BDCE835EB53EE910E7F5B59414B226D04EFBCFC62F137C4D0C914E381015CECCC76A3DDEF7D054449E0D245746D859B969A575F288566DAD93713E97B7BED7F48E773890C364D3D0CE87E82BA519BCC5A8D41121107ABD522AAE49841E6779DA2667CBF238B0E172F9E900041F6E3F3AFD60F7D07B6888661A8132A957B819F5E401F77E589FC3E167243841A5A8CE5E9706E7D7AD4888D4E7685127909DCFDF079FC2313586C0CC9C3E6490ED52DF4BD7931AC67F4C673102A7F8E63C3F9788B57E70832479F1413F7C4DF78F98C4ACAC9144BF16C76B3685BC7A54C2C8CB961EE096621CED56356BD6DADE22F559B990524A4C192491F1DFCF68E9E92B2325208F999E868FCADCE9CF5687A9CBE651817D6FE0DE218FD1AF1FA8CE1641959581EA2F71CBD3E3CF0FE5E4CAE22126946FAFAECDD6B48772F004DD241E86B7DFECC7AEACCEE6AB51FB479D898B5FAF9C6FD23AE1C8C9E63808AEEC6A0BEB5FE3986896C260121412450B5C1B53FCFA8BC36BF992C09E226677F48E7CBF0BCEE4AA9CA2626A2B6DCEED4A9E9FE1A7A4E050006482C5C161AE97D35AF84256B3155F8D5BCC4F9CC70F5E5B5BA61C270252C5436FF17E56BEB1209C2B248E17DC8D2874171E2E7C2BC3B5CE411260FAF59DCF2FDC61CA30E84B3801AF41CAB47DBCFCE23E7E1493661BFB1B37896A351B2A6BD5E0B9B024816B1F78F2DA2FE77C36C5A65A47CA41248DBC79DB6FB554C0E1EAA090E297E67DB9D078C36AEBCDF7F2137F84DFDF862E6EE5F778933873FF0017BD5EDEDF9F8C70D57295C526C47F70DFD27F7EB8C3EAFCDFEF07707FE3EA7EFE5BEDBC60BAD11BF3B78B7F9CFEEF8CB9DCED7F483F4EAA7CBFFBAD6BD7E9CE13AAB48820F90B8F91F3F3239EFC9A4F533EAFA93AD3EFF8E8ACAC39049663E07D5FDD7C343958B04EE6666E39FE1FB3869C67610BF72ADFE9F9F7B084A6B960917F88FDCE0E33B080C957D36DBA8F7BDE31FAFA86E63DE3F3C1C6761EBF983B857B03F31926BD5E220DCDA26479EDE42D84D6B347ADFED6F661C4A94A4D086E647531A5CAF72E01168237F9FCFA634EF03B51EB47AEADF673D690B776378D62B9CBC903A6FF00AE0EF361EBF7F380CB1A13E35FC4726B564CF11F404C7BED8CF782BF2F42F6F483BBE7E919A6B14641519F7FE53F2C36985CDB73E7FE20EEF73F6FCC67F5A3FDC7E7FF006E138CF00DCFA7E20FAD1FEE3F3FFB7041C0373E9F883EB47FB8FCFF00EDC10700DCFA7E2334D6A93B1E7CC9F2E91F3B61399A78FBF7F783806E615A2B960DD56F53F7613804B7DCF41A7BD7D216315EABF885BCFAC7EF6C101975D41E63CF6D87942E6F31541F189D8127D39F5F33D7041DDDAF6F3E6397B78503317131E3F2DF9CD8F3BEC3973B9C359C6B4B1FB010D71320936B8EBCB507D1FC21DE8F335DBC44C45CC4CFC7A7C4F5B611861330EE9735D29D46DE0F73E7477FE28B0A49E3DBFD44EF1BC47CB6E7821A2F0B47776D36F51F7EBBCB329CD96384F1DBD76F9C8FC799C10D26615DDEC76BD1B57AFAED13FC9B54FF000DAC61D51528CDB8495472BC0B5CC826DD31AE324A6665B8B2A0ED2D4C06A58BFA3442E3B08A98A49093F2B9A3F96AE6EDBB7378F6CBD997355EA5F67BCFDE52A4D3E5758949245FBD4BE9304FDADF604FC71F3FFB649123B5982401FF005712B04805CF0A9EB4A6CDAD6D13591CDFD3A892A090180A736B6ADADCD5F78F93FF00685CA9CC9BB50D594EEA5499CCEA1490A052654FB8A98224CCFA73C77EC19E0C34804D3BA43518B848A7979DE958EFBD9C9C3138292C6CE14D5B9A3EDD628C2A80241133F2FDFBBA62D597E294994B00B16D4E95F5B5766DA2EF2E41090598F5D2FAB5FA5234B8B24A523ED5EC0C9B6FE1FD397C22A7628AE6AAAF5B57EB7B33B36BD61D4A944CA98487B51EDA6FAB4042CA0AC24C0DC81205E37023E3E784BF5CA42CD4802CC5DFC896D0B188C9638B1291A150B8B870198E97F1AC29CBE9DCCC5F6B2C485F1573CD348E0495ACACAC25094A520A89248989F3BE2371D987121614A77259CDB9FB6EAD169CD25CAC165CA9C0252B12CA9E95A55C9B3E9BF847DE977E9FD93F963CA8403711F2A7BBE7E9FCC24AA7C04D8C588DFEEDAFEA396E30BC997C4A7091422A7617F0A0D2FCE0EEC6F6B53F98AE73EA829E205467909D81F7DFAC98EB8B460240212785FA8B1D797234783BBE7E9FCC55B9BE6EAA44A932541C993C46D137079FC276B0DF16DC1E5B2E7FEE48A33D2FC853CDE977730A224F103A9341A6DD5BEBD04529A9B3509529C0FA9B324D8157EC7C3DC716ECBB219331490994058D5ADBD773E3CE90A8C314967EBC9BF3C9C7845379BEA072B141B455F129B24429B080667990072DF68E5D6F381C9B0F2582C25205CB8A7875F6EF0E932428DFDE9EFD451EBECD735CE5BE25165B0D5E1C0F34605EFC324C8FBBCAD8B5E12565C3E4EF0120541A35A84BDFD97870891A31A54923DEDA163B1A4429DCF5A794B4D4D690B444212D1B13BDD3BDCDB96F7DB0F26E6395E5F45CC9638AE4A817B73F7A521C0989902CFA0B7A38F74A52196AEA9E767EAD4F5954397754B50A99E9C2855FD2DEBB9CA3B5393CB0077F2ACF5501F53CA9A5B68C7EAC3BB73AD9F62D7D6C075786FA6D3DACF3F5AD19469CCCDDEE48EF09A5A96878BECC153402BA7C49EA17476E32094DC588C397D0CD40A8AEFCFEB4615C8C524B92083E9A569E74AFD62454FD8576D19B81F52D2554B04FF5B896E3D78C00236E5D779C253FE28F66B07FF56749177E15856BA70B92E2951E942ACB9A8501C4BD580614F7BD7D2AE87D927DA2F30095536892A09992AAFA54403B1852A779E56E7883C5FC77ECA61292E78249A32555AF20D6D5F95ED37815A12ECA490C18961A787516AB52EC81FF00637F692BCE8804117FFE25487E1E212379DB9ED84E57F507D98A033A9A517BBD68DE0C74E71312D72DCFED1677228C3E9E5118CD7D8FBDA329921751A114A4C1852330A7544033210553EF1F9626709FD40F67669E193312F40428A83FFE4297F57DA1E266C9B28A5EC198B1E4DE75FCC5539FF61BDAB69C4ABF8B68FAF63BB9E20DA16FC0E63F96850BF53BFDF6397F1B72650752E53901BFDE4F8EBFE3EAAA67C80400C40BB306DADA9315366990E774CB08AECA735A22991DEAF2EACE111BCCB2058F3DAD0716FECF7C51C97342522749413A77A9513CD9F7F4BD2CF244E0A53A025401F992E900DB52DC81AB1E42B11475550CB8505A1992447DB50A45373B82954131E9BF962D67B5997B3C89F2C837F9817D857573A69E313B875C9984F11EE82438480540F881EA28FE70D9993CC3686DC7AA0B0E89EEE9D282B0DFF702B13C53E77C2A7B41859A974AD249D5EFA52A29B5EC3C64A423BD05405750FA581BED5E9CE1BE9B397140A1CA9E200785250124F2898916EBB79E3538FEF090920BB1047A519E96FF00308CEC27CC4F0B39734A1E5B8A0A5DC51AAD182AAD6A2A2A6CB69DD04DF8BA9DAD7E57B72C379B356A2789C27A9248F3E7BBBC2B86C1A407721EE386CDCEEDB75BC2672A81BF17A99FC62DFAE10E24EFF587BFA54D9CBF43F47FBFF089DA9008E131D60FCEC09F960E34EFE8631FA54B7EE3D58FE6FEDA357D689DC93FBFFD3838D3BFA1FC41FA54FF00CBD0FF00FC51A9CAAB893BF5E71EEE56E5CF7C369EA1422ADE1AFB3E3A43997870E0B3F890CDBB937F6743AFEB3E7FBFFA70DBBCE5EBFC438EE07FC07A7E639EFC281926DCA3F41EFF008E0132A1D34D6BFC41DC03640F06FE613ADE4C89F76E07EA7DDF760332EC3A560EE07FC01F2E576A7BE75E5AA8826F3B474F41B981E9EFC379AAB134049F7EF58048E7C23A3D7C08FCC6FF00AD790F9E11E34EFE8633DC7FDFFF00B7FF00AA13545403C3CBD27FDFE5EFC1C69DFD0FE20EE3FEEF4FE6137D60753F13F960E34EFE87F10771FF007FFEDFFEA8DEC5481C5700F9C9B7BFF2F7E3459059B478C89203B906DFDBD79FDFF951F5AFF5A7E18D236EE872FF00C47E60FAD7FAD3F0C10774397FE23F307D6BFD69F86083BA1CBFF11F98D6BAA16950E7E5D3C8E119AAE16A3F8FBF6F183252756E80463F5BFF005FCFF4C23DE72F5FE231DC0FF91F211B1BABB9F1FADFF7E7CBDF83BCE5EBFC463B815F98DA94D6B7E56F58588AB103C5BC45FAFBC6FEA70779CBD7F88CF703FE45BDF9FA78C2E66AC492553EF9E9222D3EE048DF1A124DC93D6119B87245F8B9B337A9A7BD6AEB4F5A9170AB7979ED79313E7BFC318866B9203862DBFE43D3F8A43B335C991E2045AC4DFF003BCF58B804D8E0840CA150534BBE9EC6DE90FB4B9824404A88E978F3B79C580BFBB04365C8493C4CFBF3D37D4ED5F1AC4BB2ACF9346164C2839C299578A0191FD524738F90D8E179CA6CAF16583896B63B0E13A589AFE758426E042E5CC5D9858815EA6E0B79F808F71FD95EBCD0FB2ED5D6344949695DDC13FCC0E54282E4CC90248BCF4137C7843B48944EED9E012520A7BF9E56C43020B8DD81E4DE8229B3E7FE96690E032806D5BDB9E54A068F05FDBDF432A935AA356D3B60379C3CF297C090005320054C08B99DF73D648C7674C9270F87521354A45BA002F4B6BD3731DABE1D6681695CA597E3E16F326C7D1AA7D63A00E38971BA5B01F6828C7398FDF9DAFB626F0292A96AD29577EBEDCF5BC777932C2A47117AD46D5B57434ABD2FA3425A86DBA37DEAB026A14128A74DC821638551B83123E1CAD88F97294664D5317AF9543B7315A9778D258E14AC3BBD816771E7FF00768DD636D3A2B1861CCB1100D47F31E5282645BBC4DD5B589DA76B622F160C849AD43D0EA1F6205A86F5AF846CC42D13BBF2966502036C58BD346B335F778EF6FB03F600AED63B51A2D479CD314E97D1AE1AACC1F7507B8716A6CB8CFDAB28871B1B489B5C462A198E35499530A13DE2E89097624AFE5706F477A7E04557B71DAD4E1300AC31980152140A5C38614F3A07B1E51F58E1D3CB88FCFF001B63877007E5B7F37F778F9F9C01DF4DBF9BC25AB74847F548D8111F8DFEFF00961E48284B0A51B56BF96BBDDB918024026DC872F1BC5719F3AA2493369DCC1E87E3F23CA3169C04C92809798916B9D35F75FAC67853B7D62A5CF90A7DB5109714B483C21B6DC5933BC84824440DF165C366F83C1DE6254ECE1C353A6BD357DA364B4B2F50D7677D47DE2A6774EEAFCEEAFEAF96E455350951294A9C4A9A499302EB40817BEC79198387A7B6F83921A528248A30587A72A0AD7F9A43849E201D56E5E76B747BD8561E97ECAFDA4EA84B0E2E81BCA1944971D152C2D442AFC45016140813637B7B8C0E2BE2B4A94B3242D7C7503E55106B4AD4791EB487680901DC30B546BAB5CF2FF1132C8BD89F2547039A9B582D6E0238E9452BAA13CD2548570F94ED88BC5FC58CC65ADB0F8733127FBBBCE137D99EA74A1B5377085201254B02C01DFDEE6A7A98B4F2FF0065CEC474EA52ACCF4FFF00885C708EE5DFAC5453776A4EE4A41F1151E4623A9338ADE69DB3CEF3CE032E7AF03DDFEE1FBCCC7A5EC1B938BEB0C71B3004FC81FA503EDD39D3517BD8F92E82ECEB4F84FF0002D0F4AC70C7097541FDAE27BE428CEC7CEF88539AE70B491373198A7B8019E8D707D6FAC46778ABF057FF005505B4D1EC6BCEB411384559612114F95E5B95A2200465F48E97472921A0470F29BE21E6CC2B5154C9D3D4A15713A6001479057E5B771194CF9B60199EE7C4E8E437D2F48C175599387F969A65CC7D8A561991063ECB698FC3EE406214876338D35993162E373B7AECC20FD44FA1A5A96BB9E6F6F510980CD883DF2C5288F070A52AE3EB3C3B797320E14E29F8A002261436F523CEFB1B6F511A2B1D8894411C4C0E85B8ADB786AD4246D081F4D692AFF3EBB5FF00E198DBDDD6DCAE07A6F2F05892586206946035BD6D4DEF7B46C337C4B8002B954FD7D98E292AAAE9839C59824154471D325CE28F250300758BF2387A301895103BF2E3FE25AECF40CFA43C4E6F8A21DD7B357EFF0088455B995528101343524FFCCCBA9940DB9F1B4A3E9B1DEDB4C94BCAE69487C4CC06C7FDC56CDFF2F4737D459CA33AC5ECAA5CEA7616D2E77A3C42739A2CAB3E6CD1EA1D2F95E6748E712168451D1D31095483E36D90AB8B4CCFE2A4BCD330ECE2BBCC06227267AAD302D6BB16259448FB75D657079BE216405F130AB59EEDA8F0E7AC755FB47F61EF67CD76CBF579436746E78F0528290AAAA94F78648F0CA5BDCCEDCC88C5D725F897DA494A40C499B8E24D57C7DD700DDAC76E9EB76CAF3C521011DE84248658500A2DC8A99A9B75D23CF8ED5BE8FAED3B47D2AF36D26FA759654C079C77BB0C5338C34992986CA94EB9C491C8488913271DD3B2FF0014F033A748C2E3712A953E610132D615C20815759F97CCD7D0DD3058CC3CC40216971552C2C3AB88B8F968CDD181F38E8266B95D4E4F5CF65D9EE4F539457D3A96829A86DD6C1520AB8A0AD0849888B4CF58C7A4322CFF002AC44B96A5E3651700BF12542A0355D9F4DF7E73F28C9989052A0A49146A934AEE450727BC449DCDDFA975CA7247774D01B200D9513717DADF28C5AE74DC2E2403849A89CC3FB0BFD09ADF50FA6912299094212B02AA7A359BDFA084AE54AC78BC50373B7DE07E186852A4D155E6CD7AFBB429DDA9BF6D3C1BA6DCE113952A26C6C6F63EEE9EBFA6D848CD40B9EBEFDDE8F1A8049600B8A5ACFCFEBEB1A8D4AC0B98F327CFE1B5B18FD44A667AEEFF0068C9045FEA2353952AB024F316BF5F2F220F48F8B798B4ACBA4BFBD6A76DBF10B4A415548A6845FC287C7D79E935046F23D47FF6E112A22E9F5FE21C77279F98852C544855FE71F801F29F3C63BCE5EBFC41DC9E6DD45FAC62B7FA104EC2E3D4DA3D718EF92ED4715BFF001E9783B93EDBCA349A829224C1BC7C0F41FBF38C27326254086AE977BF4F7E31A2E480D4726FCB6AD1F583EB47FB8FCFFEDC2109F75FF6FAFF00307D649E7F13F98C10775FF6FAFF00307D60F51F11F96083BAFF00B7D7F984EFD491C3E2DFA1E9E83CF09CCD3C7ED1BA255E8478FE49F7D213FD68FF0071F9FF00DB84E14EE4F3F3107D68FF0071F9FF00DB820EE4F3F3107D68FF0071F9FF00DB820EE4F3F311B1156AB8E23F13F97EFE184E669E3F68D552942C09F23F4F7F6D9F5A57F71F9FFDB84E35EED7FF00131B9AA95C9FB5620DE7F21F0B7E4463815B7A8FCC2D455192788C7333B7CBF3C60902E5A0E056DEA3F31B455994C2ADD419DBADC45FF6318E34EFF5D6353254AD3AEAFA6F0B98AC54C71729E53EB1791F1913D2300524D8DFAC21370C412149F16EA199FAFD61C45728100199BEF7046FB0BF2F775B8C6D0C662129714BD7EC6F4A0FB43C51D63C2150AE198920DFF2837F7C8C10D7BBE3A243D68D424DB7A373D2241475CA75496388953EF30D260C905C702009E57311CE6DD433CCF172F0D96E2FBC584032D4CFA963E3AF4874890D2660586F94B02CF6EA3C74173B8FA1BEC932E1D9FF00B2B68FA5ABF0AEB692B56FA17214A2B778DA2524711FB408B1E51D71E199934E33B638F2E5430D3D3DD96268B25EA37B9DA38EF690044F4F0D52565C8B33EDCBCB7D0C7955ED5B912354691AE79C6F8DCCA3BF5B64265403EB2AB089DAD69F3C77CC34A98AC249F94FED0496A014F07D3CE3A3FC3AC54B44D9616B01D40124B061A07F7E11E28672E2A8A502789B75C1C306603846D048B7DD79DB137815CA08582B014CC4539D6F4D6F1EB0C1CD953B088E050AA400072035D35362D76DF3154DD453A2A160ADC6C0EE85E49912600331CFE06D8D1084A4AD4A2CEECADE9A7B6BD223CC89E678E142B81EEC5BC09D0EE2D7A54C4A74DE9FCEBB44D4791696D3ECBAEE699C54B6C90D24A9494A5C6C2AC0181C04CDFACE2A39E4E9638D226A52A6E27BB302F63B0B18DF3AC5E0F2EC0CCC4CDE1265CB2E95109F988212C4EC40FBD63E95FB2CECA72EEC1FB12CAF4165E86D8D5B995353BFA8AB1290871402D152DA54B1D1B5A9278546DBE2858291331F8F5620712B0F294D862D4512196E1AAC46A3CDA3C21F113B633715984F9689A5654B502534012F40002CC07896E91EA7B1926655447D58771C5B712527DFE2B981E43A1C70B9B89080E54C0D5C124FDDBCDB511C942944D0FD21D11A1B377071E6199B6C22070028412AEA0106C3DF73CAF88F566409694A5129FDD460281B91A335E90ED091424373BDF56D3C39F8F1FE09D3E811982D35A6E1512824F9413CB78FBB1AAF31C451A628307BDBA907C74BDE1596CE695F31BFE3E9B46EA5A0D0D917789A4C992AAAA93E15282DE128F25A4A52098B1B61AAB1D8CE204E295C25F8925DF956FA5FEF189AA008A577F0FE7AE919C67750E7F96A7A5A7A256C94D353A5413CBC41015EB27D26D8D44CF9F88F1926E4AD46ADA827E83F108F78BD090341B46EA8CBA128287DC2F19EFC254A0279020103D23DFC861F2677197500E2E4A413AB69F8680AE6A59C902BA8A37BFF0031C3542120711BDF71C511D49EBE67607AE1C8095A5C067A6BF4A46C0CD21C1247D2BAF46F5F2DCE5234EA47110422E2448E879DCDF6F28C289509746A35F66DFAF4A985E5A4AFF73923AB0DCF5F2BF38D7DCD3B444AD23681C201B7BC79636078DF8535DDCF5B102E3F30B7729DFD0FE61BAB6B29982D8E2499E21C8CFBC9FDFA61497825CD04A659D0D8F4ABECFBD3D20EE0173D1FEDA8FA4361CF295A925C47C0088F779FEC6153944C51A20DAC4747D2A280F5D20EE13EC1FCC6A7354D12225D47389208816B79FCF7E787523249E6BC0455E9B1DF6BFAD2B19EE65B5520EE5839F12E69A43255EAAA3330E3441F31F76DBC91B1F75C3F464588B842A94142399FB5CD39DA329932925F801F7EBEF48627756D1200971B93E693F8FE7E98728C93141B841D34660342F63EB7687689128BBA035281BF07C36844E6B1A1360E376EA40F59BFCBE6360F5392629A81637FF3F8A561D2654AB042481AF969D7900DCDE1239AAE85F04075B91E622FCE06C07E56E78752F239A0033251535DD2F72EF5E40BB3EBA34394CA40FED62350DB03E9CE8F57D9BDCA8A3AC061D4926F2089EBB83BFE3E58D66E5E24A4B4A0826B415A78529E7F58DC4AA6CA3F228A46843D3E82EDF9A533A677F8705BCCACA9C5005BA85ABBD698FEE0A6164A17C62D04731EF64B95396381C841FDCC9295F50B4B283105D8B6E43346F81CC7132D6089AA0C402EA2CC6FC8EEFE5A452BDAEFB3B7657ED079255B59D50D2E5BAA10D2FB8D40C301905D20904B0C25B42BEC84893326712B83CEB39CA1094E13113A6E178A924CC53CAADCA892A2EE0D7A6B1D4722CE56952146610B0DF31A82FA312D6D8163E9E0676FBECDFADFB00D4028EBE8AAB34C973175FF00E139BA1A3DD38D3249517036161B02401DE284F58DFD2BF0AFB726485271B89EF0A827E55A98A696625F5367B3C757CAF128CC51C4C94A92050597CF61E7D2ACDD7B66A2AABCA9879BEE129DDE490E4C4CCA40B481CEF3E631DFF0D9D61F30ACA5A40536AE6BD0D2BA6FD626BF4D2D29725A96B5ABF7F0AC37BEF369754C21125AB17B889EF49F2330009DADCAFC9FAF2B5CE485256EE2E3CF4EBAD3D61AAC4B42411FBAAF4A80F4B0AE82BF68C50A49DC7BB9FE136C4062B053B0EA3F329B986A7893F5864A4AAE09B583EEDEEFB721995A524F4311BCC01EF3BFDDF0CE04A8F1025DEEE76B6AD0E308EE41767FB8E9BDFF00883BE4F4FBFF002C3F2A01DC57FE3EDFEB121C09DBD4FE611D53B3C3C260DF6E9EFF003C319AB1500DB5A8D6AC6CDF88D880407167ABDFF10938D7FDC711EB98A7724977D4C60002C238E359DD44FC30AC82E76D59F67FE1E02906E1DAD071ABAFC87E587718E04EDEA7F3071AC6CA23E1820E04EDEA7F31CF78BFEE381AFF009F67CA0E04EDEA7F31C15ACEEA27D630D67000800333FDA3200161071ABAFC87E5846331B5B59BCDF6F238208DBDE797CFF4C10462A722397CE7E58D9258B9DBCF940C0DC3C63DEFFABE5FA6304B926D030B353683BDFF0057CBF4C20A5BD4D00F1FB46A5293A0FA7D20EF88D9447BBF4C325CD2C43D352C0F9341C09DBD4FE63626A426788CED1D6F31F71C21316695AB12696FB69A43BC3CA4283148DF9DCEB5E5D2B0AD15224907736BF436FBCDAFEB87324D5B6A75773E1EB08E250928500966B53EADB8E5D6E61522AA1485893C324DEDE5BFEEFE7187C491C2A0683CEBE86D6D0FA56E6C924AC17F9EB41E76BF36E557893D16A3294861D4A7822012120C5B9C1F2F4893CCE365E21294BB81F73C9C535D7C637C160F816EA0E97EADB6EE5C9F08B7BB19D22EF693DA4699D1D94053EFE6D9830FB81092A296E89D4542ED36F020F911CA71C5FE26F68060E5772998C262174E261C4052C59DECDE05E1BF69669C2483325A820A12C43548550F5A1AD3D5A3E84BB5B798A3CA72ED22CAD29A7C972BA569B0D98417051B45C848313C6920C0277C710EC5E07F5B3BFD426CB3DECF984CC2760A3C26DB0D686387E6D88EF2628514C5C171527AD407D457768F33BB46AAFAF52565129292AAB45434A4AA088485A504883262FF00AEDE9AC2E0D2AC0042501FBBA0A5DB571FC987FD9CC44E953A584ACA7E6B0E55A79D3C23C43ED37275E9BD63995238DC043EB294910077C4A840023FA8444EE4E39DE33098AC2E294A05411C44EAD7AD4B69F6A8B9F5F763B18676070CA5AF89540A725CD69D1B9B03B5A21AC9719535434A98AA52BF94BE1E3E10B32B49491078C2B844891BE169F998EE38388021245C39A6ADB3C74CC666585C160D454949570FEEA51C07A6AC0D7C1E3DB0FA3E3D9D329D17962BB79D754210F6608074750D4A095B0B48553D639C047178D452B1C690003E13071CB71EBC4E331F351256B51E2F9C970250351C94E1C3E9E71E4BF8BBDAD5CEC28C0E0A6148477826CD0AFF00ADC45D3F2BD022C1AE7531DE6D53AA2A6ADCA87AB1E0A6D4496140A6C89809B2A6C205EDF0117CECDE5AA011C49A06AB0A93ADAFD1C8E4F4F21284DC46314B9CA2B254EE5CD8FF0000B374D23D7253B5B5622980667688113F033EFF004C78E0CC67A927635FA822357ABF8C6AFE159A2FC558E29E1B23C6501039EC6FB5FF0063092945449DEA6DD2A5B9FAC3D41241E5AF2FE291B0656849016B29B192495F43D49C6841208767F7F785E5EBE1F785CC51A5B0A534845544151584A7BBF4E2DE77F59F5C22A965C104BEED41A59DABE118980167D5FED1CBD5F4AC8E17561A3B140492262F71D4F4E9B5C61CCA96B5800034F0A3EF6FC7842600028290DCBCC2848269CC9FEB93F0249DF9EDE677B893938659AA83026BCFA7DCFA40C0B3D48861ADCE12D9512B4003A293CBDFFAF2F5949382510004923EBE3A8AD1BC8C6CE588DEFE1115ACD56180425693C57FB43DFB19FBFADED898C2E5466B7125C8616B1BF8B75A38EB0E30E81A1BEF7BD6BAFBB3D6119AEBD534490B1239F17EA7FDEFD266B0D919268871FF00A7DF8EE75D9DF77CFD22019A7680E3BC27BD1E12A89501327E1E9CFEEC59F05D9B26AA96C0B386FB36D5FB6B0777CFD3F9881667DA2BEDF143FC37BC2A46D6B4FE9F218B1C8ECA099FB500D350DE1F814D2918E02FF7F7E1E7AB188357F69D52D903EB0428CCF8F7DFCE0CFE42062C380EC8238085201234E1B3DF9D7C0F331A9412086E5BF37A4466A3B53A8850EFCDC9895DC472DF7E973E589A95D9094A1FF4D9887A1623621ADA9B96A6B00429ACFAE9E2FEA4F588C661DAB55254909A832267C7681B400679C7EE43F4762D0A149628CEC923D5EBC853A42F2E5A941EAE7705E9AF4AF28655F6AF58524FD60DF9779B7AC91B9FDC9C3C47629240694073236E82BE5E5587694AC0DD46F6A372B7E00E708DCED76B1929E1A851E23FDD3B795EE4ED3CBDE70DB17D8D290C9941F9279DED51A96F4891C3C92B49D4B5697F77E4C5A1DA8BB6FAA640FE793B48E21C88DE7D7A479E20315D8A98A04F766D6E1B79529ADE94AD1996330A482403CC5CBEA473A5BAF3690B1ED06E32A4D3BAAEFDA7C8E2638A3BCE1823C60786373793B75C404EEC54D49E2EE94E2D43AF8066A306671A38786EE95296183925CEC5B5E6D5B7DE2CFD3DDB9E48E1698CCC269E956414D3059924EF2EA6151241B9B6D30311388EC8E2405AA5A4A2616E13C20B35689B568FD68627B058A992AAEE28E2BA1A31A1A369FE2E8CC72DD01DB3E93CC34BE7B47415B97D753F754B5AE1696FE50A5A49E26E65E59716A04C111104918A8636466BD9EC6C9C54954C4CC493DFC90E0625BF6D6825F00BB5DA3A9F65FB408929E098A6B1049763CF42093E25F9478ABDBDFD1F3DAAF65598667A83B3EA7735468AA95B8FA9D692842D968952C2528254F2A0950B09B6DB01D3BB1DF14254B9C893899865E210405495929035B9A59CF3A8A878BE8ED1616700998A09243F7AF5E4C91D408F36F3ACAB30C9730A8A7CC69AA696A92B297296A69DD616DA84820075292A122E403D27618F4A647F127013D2841C44B51200AA83027406AE39D6AD416890C2CF4E264A149140FF00EE38255D520BA4528F7E7A321AA29540B106F0608E7F1DBDC0F3838BBA332C2E6684F76B492B0E450DE86A37A781B8A3484AC22A790D507602E06CCC3CF581152553C46E37BCC721FBEA00368C4762E58C190A019CD2ACE3F8A7A9BC3A565EB9041524A5EDB10DD5AF5F0EADB03E39284F90B88E7FBF74618FEA945E8E0EC7CEAD5F6EF0770B735D9830A7AEB1A5D72786F3BDB6FC3F5C36993BFE5A5A967B79D2DCA306490E49B72FE79C69EF3CBE7FA6102B0BB69D75F01B465324AAC7D3F983BCF2F9FE98D90B2922AC3D9FAC68B41433977F7EFA41DE797CFF004C2BDEFF00DDE9FC4690779E5F3FD3077BFF0077A7F1041DE797CFF4C1DEFF00DDFF00B7F8820EF3CBE7FA61354EDFC2BF602364A789EACD0779E5F3FD31AF7C9F6FF88DBBBE7E9FCC6C439B88F9FEFEEFD4EF93B7D7F1EFE8777CFD3F98D9DE797CFF004C1DF27DBFE20EEF9FA7F31A1E74880047BFF7F77BF1BA5616682DD75DEDE1D3946C257158DB5D23477CAFDC7E584D6B147A0D2F58C19453737E5FCC1DF2BF71F961B4D582181A8F7D6DBFF9C777CFD3F983BE57EE3F2C342B0297DF97A467BA3CFF00F1FE63053E411336BDA3DDC87BF7F9DD25AC121D85FD9F7B987B87965AFA736E5ADECFA6C291BD1526264F283FAC18BDB96DD670EE5A81D6A40F41F6DA1ACF0CA524835A00DE1D7DD0DE1E32EAB090EA9C850013E76F416DB7999185E6CE4CB492685A8747E5E8C7C7A9232E1398F01351F5E54EA75B0DCB830EB398AFB9694942B69046E4C6FB72F4B1D84E2AB9866C25950E2B3EA69F5B830BCCC28C2A4A8A5D22E35D4BD3AB51A879C7AF1F46476448CBB506AAED873A60AE9F45B0C8A05BA8FE5BEACC987183DC2D4385CE051495168AB84DCF0918F2C7C5CCF138AC6617042710A9F32810496E1525DD999F623560E6392F6F730E14A422812E082DAB114D7D1AB1DC8ED0F3DA8CC01AA5A897C3D505D24C12DADD25B1E8106398F9E3A176170A0612495A43290928A6C056803BE963778E32B9C66CCBBD89AB35C6BA077F60C74B35CB08FAE665560F829928537D09524CDCF9CDA37F3C774CA25F1CB94959AA8B35ACD46B7BE7164C94913D079BF4ADAF5B1D9ED1E52FB4464FDFE7C3374B453F5D5A8A951013DCC004AA204EC27DD7225AF6B72A97230C6680012851240D838ADAD4D3C418F4B763330E094002FC3C20279F21CA9A56269EC6DECF755DB57692DE719BD3B8D688D34EB1519F5538DA836613DE52A5B240539C4E37C2AEECAB732236F36AF1789C4632749940A8A14A4F059DC900BEE967E64342DF123B649C932D01C0C4625244B5F13997C20713A6B705803F68F6FB5867B414D449A4D30DB6C65140CB3454397A385A6D80D212C38E0042412E1471EC08E66716DC932698A4A3BF509D36A56BE009245481A03C2081AF8C790B3BCED59A2D4A2A2788927E67A9F0346B68DBB88A7EBDFA948A6A075E2E97B8D5C615207F5904824089237D85F7C749CBB048C3CB0A609006C03F2E5E772358AB8C331E337B7315BF95A8FE74FA0166912C8492424889EA46DB7BBF1EB8F9E17600F100F4666EA7C5EF5F288500A8B0ADE8D7F1B53F8BC735110DF88CDE4498DCFF00BFC6C70BA1249568295677A7BD7A6B0F91FB46DAF99F7E3CE1BDCA869BB2943CC4EC3CF95F0E048E20DC26F7624BF4635E45AF4BC2D2F5F0FBC3555674C5288E3038A440316E460413F779E1EC8CB5534FED25ABE760CFA3F37B429107CDB52D3F8BF9824837B4CFC763F9E2730D92A8B320D69635E9A75EAF04416B75630DECE01320F8A36EB16F96DB6E062C586C8944370D9AC1BD9176822B7CEF5835E387881B59663DE27E079F4838B1617B3A5407FB64EBA8FC0D18736171522A9CE75F268882878A839C5278F6B7207CE2E2201F8DA32DECD93FD8C7667B6946D3C2EE758752120EC0EFE6FE240F467115A671DA72A15E3277FEAB917E9BDE79F2EA316AC1F66C3B775E36D6BA1FF3CA1D7766EF417A796BEFC62B2CDFB4B528A4059B49B28DE3AF98B1DBAFA0B7E03B3A97004B1B540E4581F7B883BBE7E9FCC40B31ED21609FE6AA6FCF96DB93B0F889B8E58B7617B372D828A45A800B026DF6A3F283BBD5EDCB7F1880E6BDA22D6A49E3322608519F7FC7D368B62C382ECECB485120076D07261EFCA1D4990662598902DB68EFD6D5B5DF588A54F682E03016444C9E237F74DEFE9CBAE25E5E4726AE0519E801D7EBF5BC3B4607899C585E94D2BCB93B1D285E2335FAFDC25242D5378854FE16F8F94C61F4ACA248E2F901B7BFB5A9CED0E118124B3160EC451FA5DDB5F1D5CC313DDA0BB1F6951E6B2239CF3E43EEE7B3E4E572831E00FD03F88F62BE6E9182A5BA51ECDA86EB4B6DAC256FB4170714AD5D6E6639DB7EBE97E507189995C851AA1236A8F1E5B5FF00C49613046A120B16D0D3C079DEBD6315F684B93C2A23A78B7882791F593D37C6BFE8586994084316D05CBF5FA91E10B4CCAD4BA10C3A16D8B57CC5DEED0A287B45524A8A89266DC47ADA0123E406D1CE70CB13D97C3AC1696914E87C75E5ABD9A239791A89A21C7420F236D1B6D46D49053F692E0825C36123C4444C6D1D3AF2F7C62BD8AECBC9493FED8A93A0B073BEFD234FF465A2E867DF939DBDF9C58DA1FB69CFF21CE69F30A3CC5C6F2F60CD7B4A76CE050F04052A41046C07AE39B76B3B12314852E54BA804D12FE4E29F810DE7E171185FFA61418559FC3E97F5DBD79F679EDE721ED4B4E2F2B5BB4EBAFA1427FCBD4703BDEF112A52781C0526C0C883B89F2F2C76BBB3188CA718BC4A50A12D45426F0F12598302E19DC81EA4BBC664637168042CA9C7ED279173E82A5FC6C6211ED05EC5FD8EF6F34B53A86A6869B27D62FB6E062B2999534961D424A01532C8432AE30126E39CDC9C55B29ED563F2E9B2A4714D0994AF91456A20825ECEF4A569B522F3907686761DD066B22614858531B17A136F4D2D1F3FBDBE7B16F69DD8B66B5B555197D4E6FA790E38B6736A740290D4920965A0B518102FE64ED8F55FC3EEDF2E709427CF73F2D0A80A0E4588B5DAFB4769C97B41829825FEC4B0058904F3E95DCEF7D7A8A288BEB7FBB2A6CD3102A4B80B6A76491C3C0B852784C8902FF7F72C56792B1F2E5F7530120025883B0D2FE4FD0459B1F8A938896832F84D3420B16E54BDB61CA836B596BEF254BA4506823ED490663A027D4C6E27E0C462D540FF00C5B9357CB66A444A4A6BC49E2F13F57A587AC25356DB84B1C10F3261D5DC8513B1DA3972DF0A8C4059E151A8F7A795F96B0290400480CAF6C418E7892398FBFEEC3842B436D3DF38D638E34FEFF7FBF8E09EAE1A055C69A8A751CAFBC2339C800549F4B17F4838D3D7E47F2C35756E7CCC36E156C63052A6209F3DC60E23B9F38D822EEE36A8FE63193D4FC4E073B9F331B700DCFA7E23893BCDFAE14429C313516AD5AFF98510002075BF898E64F53F138DE178D88544C920F52795B9E08233E3FF0057FEEFD70411A9C50312A077DCFA6364AB85E8EF046B91D47C4632A5B8666DF58C100D0C71C69EBF238653161CF0BB9B9FB0F7D231C097FB69F9F58389279FE1F7E1BA95C2D4778DA3153894F39BFEFD7EEF3C204804026A6D12B8295C52D4793F3D5AAFB6FE5025C4AA6F11D7A47FBF21E587D2940DCD2846BE1F6E4622B152DA6B58F139A795B7F1F1854CBCA553BECB07F9CE29A09DA7838877963D1336E97E8434CD279972CB280614DDF6D77F41B44FE57212521C3961CEFE96BF90DE2CAD11D9E56EB3D6BA7B4BE9569CAB733CA965B7D2D712BB94214D97CA8DF8470951B91B475C714ED3674B9054429E8B7AD281CF8916B78C42F69B132B05879B3967FE98A21DB89C5F9333B7F88FA71D1BA1F2EEC7BB2ED2DD9BE5DDD8464D445DAA7109E15D43B5A94542D2FA8789D2DB8A504F78A5445A0638263702ACFB30398CBE2577B31248539E012D4051D99DAA68EE5DE3CB9DA7CE5599E2169E30424B30346A016D19A95B13D280ED12B920BBC3037DADFB8E5F9E3D25D8BC29461A44B218A529141B51C7A73D0EB15A929E250043F3A8FE3AF5E74E9EEB4A9A9A961686CFF97593F58322641F04F337FDEF3DA3072132C21668CC40B6C4DBD0B3F8D22C980024A9045DEDD341A1DF5ADB9F5AB3EECC737ED773ACAF43E594AA76B5DA81F5D7D081C2DB0161C27880013FCA0660824CC620BB699949565D352A58480929248A82CD6A12E6836D869D3320ED18CBA6226B717082C97672CC5DDEDEB4A47A59A6F46699EC07B39A3D21A6BB953ED530FE24EB690971C7970E14B8BBA97C2A2A0029460898031C3723CA5588C54C9BDD90952DD2752E4FA1BB18E71F13B3D9D9BCD413314A751700BA458000025B4D2BE51535766C336A779E71C2D8E2528A42A2E144C5A01B827F738EAF80CAD322585283300EE0FDF6D869AC50B01835291C641552A1BC286A5CD6ADF688B5255E699857D0E539334E543F50E16D4B00A8A1054028F1198F099EBE9BE13CC7304619052080002545C0B57EFEC98DF1BFEC8370C0B1EA79EF1F44D599B06F8A1409B990403F01CBDC7A63C0F2704EDF2D3A1A7DF5BD3CED570160964B0B33B9D6EE6F5D0D623CFEA0201957853360A173EA7A749F81C49CACBF8BFB0BAA83A52A08FB3E95AC3A9648A58A7EEFEDE2119BEAA5B6550E0000330AF97BA44ED89595969424012DC9D83F37B86FA1BEA216439249E515C66DABDE723F9974F15F8C017FC081F941C59F28CA8A93C4B450B0A8634B796AC2FAB43897AD36FF001EFF00115D66BAA9CF12BBEB9FF501E5B4CE2E584CA40E1025D68CE9D5EDE15BB7A38522B7CE756BA8E187C5C13F6803378E7B9FBA05CED68CBF264A81E2410A1A33F859AD6E45B4822ABCF357BDE287A08B9F1CEFD2FF00BBF5BDBB059225212D2DC3683AD0FB7E71B702B6FA7BD62A9CE75629453C6ECFDAE63EE9B7BF7E569C5A72FC88DC4B6DA9CEA3EA2FB50438929A07A359E807F80DE25F578ACF39D5890170B060C9F1794DA0DA3AF2B62C786C9549209960100B16AF3EBF53AD1E1D3278801CDEB4B1D5F9457F5BAA42B7546FB99F5E73E5EE3CF13D83CA8A6BC35A0B0F7616D3D236128AB88814A01CBAD7CAB110CC352A49278FDD3B41161F1B462770F8166052DCF98661AD799D6D1B270D3174483D4317EB703EBADAD0FABD42924CAC9898FC7F193D3D6EF84B12EC9B5B407C7A537E91399760560FCE926C6FD5E8DF588ED4EA049264C0E809F95EC363E5EB8CFCC5E9C3E47EDB0F11B44E8C18FF00800598354B02FBB56F6EB0C5539EB64595224DCF53B6DFB163E8BCA510DCB51CEFF78729C0A890C9A0B8E5F4F426196A33C499124474371D2F3B1BF3FC70E78D2039142D473714FBDB9D2242565E6C12E59C6A1BD2DA1DBCA10AB3D42448541E927EFE7D7E1E9889CC3126590516AFBE836A6B68792302A4129281522A40617D06E7D884ABCFD06FC5D058FADBAFFB88383098E5310A074151D37D696894465E1403A59DF4E85DAAF4BF95291827512533E2DE2F226C67A72F8EFE5896FD5CB2E4ABC1DC96DFECFF00430F539525491F2D1F6E9A31F4DFC21C58D4C9060AC587F76FF1E436F7F9E186266CB268A07AD3DD8D1A8FCA345E512D4E38452C680FA5AAC34B9B80F0A1DD48B7CB6CB5545A2E1E2212AFB7C3732418100409DF60271B60B0586C64A9826F0BB7F7355DFE82953E1568565F6764E2524109046E2F76F5DDABB3B45E1D90F6D59AF65FAE74C674CD538DE5B515496AA9A4AC94A8712199589200054771CE4440C716EDF76330D8D973BBB48527866592E4163C24B6DBFE1A2BB99F65F825CE32D20AD0C50281F7A1342351A57768FA23D3FAEE8F50E52C67678174599D1D2B9421A70143CA0CA0BA12EA0C24A566E2649B6FB78D732ECC8C1CF5492C67485AFBF510C500A89438B971CA976D4728CD26E232F5A9402801448E86B5D1B5EB09F3BA4A0D4794D56599AD15366F4952853672D7D0D4A12A0413DFB8951E7C5BDEC0488C2580993707353370AB5226CB219692A2363F2DAC7D0F8B7C376DF1386F912B5914043B352CEEDA72D6D1E457B4D7B026579A22AB56F66B1455680FBF9A652CA09EE54428B612A5101CE2B93C22D231DCBB19DB1E2C47E9B315AA48584893314494CD61F35E8963E7E11DBFE1F76B55994B28C54E60867E321C397B93F6A18F1933ED3FA9346E775392EA262A68D54EE38D82E34B4F1C122764F9441FC31D7E4665865DA7A58B310417717BB01D2ED1D725E270B8948326625445569E214DB5AF3E66CD0C2BB2D4509841D9569579C1B89F3E989595325AFE64A817A82FD5CFDABADA14490A6E1ABBF266BDF6A3F3318952809260752001F18C48A1429C25C1201FF27AFE6374A16A0FC247DA39E251124C03B18DF69823A0336C693663060A7DC6EEFD5BA78D1A1B4F42812E0823F87FA3FBA16FEF3F03F9E1AF79CBD7F886D19A386F2E7C41FC4E0EF397AFF118248B07F168CFC1FDE3E1FAE0EF397AFF00118757FC7FF708E0C5A140CCFCB0ACB983E67F96D57EBF5F778712412412185697F17B681B9BED0614EF11FF00210EA30592220F5FC3005A4D8BC11871ABAFC87E58CF1A77F43F88235B8A55AFD790FCB194CC4837EB4351FC7DE0626C1E35F1ABAFC87E58D57352A71C4035BF1BE8C5E33C2AD8C1C6AEBF21F961B19A80402475766E55FBB46785550D7BD469071ABAFC87E586E66A058BF4FF00107028D924F484EFB91C337DE4C7E42DCE7D3E1ACBF98B8AB5CF33FE6F13B9620095338F67B59B938AB8F1BF5E1A58292A83C3C88048313E5FB8C3DC3AD0A04715B516D4D9FD4DB7DE131692A9C78773EA691CD3D6770F21C68F12B8836122EA5170F0080249B9B002FEEC577B418EC361A5AC4E9E94382CE41AED7A7589AC03C994A2B7400E5CD2EFE4C1EBF48F7A3E8E6F6776345699A8EDAF545377CBCD508569C66ADAE175954A997D496DC1C6012B064A40D88240BF99FB5D9B4BC662266130AB3314E4AD601646A2B6214C4339357BC719F8979E61D1226265CE495F0AC04822E6FAD68EDBDF471DECD635D54CCBEF39C6A7F89492140C22E52090792488BFA011675D8DC377C959989F9924740E59DB9D39EBBC799F2B9B37158A9EA98E47112092599F4DF537D183523A8DDA1E624878070126E52140F3F2248DE31D8F2859C36265A00F95C7CDA50694B8DF6F4B3484CB04592CFE049A5FED58EACE66E56E6598D3E5F4E14E3550B536F250389416AF0B648124788CC8F59C75D562F0E8C119A5680A12DDC903FB7AEFE3A43C54E4A40F983FAB83B0A57AD393476BBB3FD2947D96E987B31A869B5EB7CC9B0A69E570F1B6D90AE6652921856DCE23CB1C4738C5E2339C6224CB0A5E082D42600ED34834622A38540EB51084DCC57292784B91600DA8F7E7CEB7E462ACD4DABB8D150D3CF29FA97D64BFE22A83C44F224589D85A05B962FF009065089694AD6809A07040B01D03D1EBFE0454C4AF309892B06849AFF9F16D7A308AB4E64F543AD51D38528BEE04F0A012A32A8FB224989BDA7CF699EC7AB0F8794A485A41092087A58D05583EE49E82D137879587912C82B4A484EB4F4E7AFDEE3B71A0324CA7B39C85DD4D9C3487330A9642E8D2EC071B54113C06542E41F1016EA231C4BB478B998C98B9387515842889894870E5CA471015E6DCDF58A8E72A0E4CB75036367AD2951B1F0E71EA36659C3664717226EA36B409F3B728F80C79D70B8304FED776B8DB6AB0A3176A7A4457027D9B7BE6F107CCB3B4240FE6753BC7A73E53EEC58F099792DF2D000006A907EA6F190902C22B7CE73C412A973ACCA8C7BBAD86E39FA462CB85CBC10029034FEDBBF852E06BCF9662B7CD73B6FF00E6708BDF889B6FB6E4F945FE3369CBF2F649E14072DE7B6D7E5CBA64122D1566779F24154BA45CFF005284EFE7602FCA716FC1E0520A4140AB68C4B7416FE3785E2AACE73B4A88FE612255038CDA796FEF91E96DB170C065E9FF008245051ACDFE75FB42E00141158E739B83C443A7983E237F2EA4F5E5E9B62DF82C024B3A053560341EB6A783C390C34A569FE7D8D22B8CCB34E22005A8913FD47DFD63A927DD6C5A3078364FED1A5C0AEC341B523632F8806A1DF6AF8546B6B59E21398E668F102A207A93E47FDF9CDE263139230C90015005AE1AF571A3736B885A561D45882E353A9D0F97D1A2179866215C30AB09E7FBFBA0DC937C3F972E5D59228D6E4FF4899C3616CC1DFCC56C2F7BF880F678BD556A493E283CAE679F39E63D3A838708968AFCAECD7FC79FE22730F82040743125EBC98F2634B7DA2355B5A2D04F393227ADA39F2F59F5C131080C486BD757F7FCEB12F84C210E079816F5B753E42D1CAAAD4927C4444C5FCAC664721333CF081084A41201B87B52A3EECDAE9AC4A4BC3970C97DE82BF5D343AD7AB2B95A0920A8DB7827693EF883B911E778C375000B00DAEB57DE24E4E1C16743BEC2BF47DB7E621ADFAC499B9F333063CFE07CF7B73C36529CFD044949C20D45069F9FC56D48697AB120024DEFCC47BE08F3933C8F48C359C0177AB3372B7958F9F3112D86C1214DF2D587570D4E74E8FF00442E5724EE7AECAB7C41836F8C0DF0D432052A0BB301F514F7E4F0E0827467AFED3F47D377F268D06B5226E62FFD5D3ADBEE9FC7092A72C502BC341CBED00904101E96A066F0DF95631FAFA3FBA0F3F10FFB8619AA6AC9352DF5EBEF946E306B0EC0B1F3FA1F6F7731C8CC9C410A6CA890A489E29DCC6F262660C1F29BE1D499D3112661130A69A7FF00AB4E5BB7285E4C8293B2B6D4EAD7D6C29E178795E7EF32FD352125448E2124CA4C05483CAF04411E5388BC2AC4E4E204E50997FDC1C6BBB8BEBB6B18C6E0FBC94A253522A6DB8BEBAED6D35F7B3D853B48675CF616F69872A0AEBF43A9A04AD654F2BEBF54560152CF11802D72074DA3C87F16B048CBB3999899008566055DE84BB204A0424DDAA7616F5E19DB0CB9284CC1DD8643906D777D8EB4D43DC388EE73F53DD17521C238D2D917327853248827DF706200E58E7FD9A946609CA5FCC0115218D497FBB694B6B1C52661889A43317A0F1AE8CCCF7F5668462B5AA94BE92E250EBC9E14154149004282C2BC2AB75F4B5862CAA966594841E14A4BB815A9A310C7AB1357A6D3B976327E048EE96657135412051BD5998E9568E977B41FB33E8FED432FACA9551B0CEA1085A9AAC6DAEEC2DC8241212128E82E637DE3172CAB1B3414A16B570822BC44B5294EAD6148EA9D9BCEF1699A850C42810DC4E7881D0821EA2D7E54263C32ED47B1DD57D93E78E51E7D46F399754BAE8A2A94A49404B64CCF76088129E7BD84CE3A9E513E624242A605022F4A027ABF9B78D1FBC6579948C6C994A03BB9881F3077EF1D83F2D49FADE295A97EAC3C94A877F9783B240494FAC4AAC79CFE38B74B99C49705F7B78728B8E1A6CB5212A291C400047A3697BFB10B6A54A0D30524160825A47347F749DCC99DC635984D1CD4DC56BF6D3AFD90C7250B4860C79ED616F523D211779E5F3FD309C45F723979983BCF2F9FE9820EE472F330779E5F3FD3041DC8E5E660EF0F43F1FD3015F06F5E434EBD616932921DC0F5FADF783BCF2F9FE98C77C79F9085F813B7A9FCC6D6D60CCC8F98FF007C67BDE6DE03EC0C1C09DBD4FE636F1A7AFC8FE583BDFF00BBD3F883813B7A9FCC705606D7F97E18D173096657A7F1070276F5309DC5EF3D2E768F86FF00BDF6C20B5AC10CA6E97F1FB78C1C09DBD4FE6908DC73602FD3F7CBD39DCE1098B5503B3BBB787BFA343E4A10003C21EF563EF96B1A7BCF4DFAFCBD7F71867DE2FF00E461544B4D5C3F5F18C915612B4B0A00A5E07895BF08489B1DC7388F2EA313D96AD3DC4E2B2EC9BF817EBAF421A821C7767BA584001F9B6FCE8E5BCABCD653D638D52D496480C01146540492490F44DC93CA7D4621F058D299D89055F213F292435C92D7F5D7AC43BCA973E519A38A73FF00BA384B00FF002B814A0A3B51E3B8DEC2FECA99AFB41F699475F9952BAC68FC96A13575EFB895772BEEC77E80788A64171B22C48B99118E09F16331C415BCA9EA425D99277236BF4FF10876B73C9383CB664B90532D66529D8D5DAE37F5BB347D2566ACE459464747439486D8A2D3B4EDD232C3490DB4A84A5824348E149BA249E1266E2F3344ECDCB993CB4E05666A5C2D42CC28F7771D4D58E823C2FDA2CCF158DCCA6056215313DE2800E5AA4EE49F7B33F5DF54E6EB8AC696A5292903EA4493BA812E45CEC771CA04473EABD97C0F77317F2808243B01536FAD35DE25B0525326425412028A4540BBDDD869E1CEAF1D4BD4AA79CAD577854E3AEAF8384289B1302C081CC63A2CB97C3502BEA1ECDAD7946B3A62D36253F97DF5BDAD6BC4FF0046E87C974851D46AECDD095D654252BA143838B8080428F0F885ED123716DC6196267E2B153C60A54C5140FF00ACC4D033A40635714A7A43513660209516FEDBD77E5E3466F3AFB5BEBDABAAAB5B8AAA4F0BD2869A04029481C205B6111B798E47172C97279328213DD5989E20EFABD5CDFC9CC399438CBABE635777018FF9B7E628DA8CD5FA6A9A879F052144428F8F88AB6481B9E298117BCDB9DA31F3118390C964324D2CE4793EDE35AB449A0A254B53258B3123EA29A79DB578EC5F62FA169DA655DA1EA767B9A0482ACAA89E07894E5D1C7C2405D9CE1500A4911B5B1C6B3CCD2762710BC2C89C5D4A214A497084ED7209507E8F6D62B3996216569E0511C2EE428B2AA34D18D2C1C72BA5ED4B582AB2A4B752F0352DF185F01E068B51FC901B443638500030395E0EF25906070E129946582054F11E2249A92497275678DF2C96AC4CC1DEFCCEC2D7DA9A7BAB47A7398E70F193736EBBF9C733EA71C070F80424B82E36236A353EACF488A880E6F9CB8024827C455CEC4FEB6FC37B59705824A883D2B60343D6C7AF8411586759D3A4AE144EF107D79DBAFCB16591854A00702D717DB4E9FE5E8456B9A674F447113B9224FDFF00B988E718B3E57864872A0030F1F3DF716A1DA08ABF3CCED7E205666F249BC91B7975361E87168C2E141F9A805399B8F5FC5E1C0B0D22B4AFCDDC528CA8AB7BFCBA1E7BC7C3171CBF0A1D23CDC374EA36FB5E1C457B9CE6AE78BC44133CF9413E9713B47A8BE2E183C325213C4028D6835DFC052DA6F0E694F567AF2AFD6D5B30AC0AAF3270932A3B9B5F793E5B5C6DCBAEE6691204A161A786DF6AECDCE24B0B28299D2C28EE5F99DEFF00E221D99662ABC1379FDFEF97BB0BA789C7FC6AF67D1BE8DB8D1844E61F0A82E05D2CE5ACFB575B797488ABB5CB502788DBD4F9003CAFD473F52E258357B166F5FBBFA44E61B0813C2281CD9BD7F00F8F363AAAC549B9136206DF21E7D37E4230E25EBE1F789B918349BD5FDEFCBEBBD63B5B58A004DF7D89E73F8FBAFB6E71ACE7E17D1EBE9F8898C3E112970430A5BC1B9F2209D22355758A13722D37BF5F311BDFD6D866B24853F2AEFF008689195844BBD850F9FE34DACED76572B172649E7FED37EB1CAD6EB86EB511E3AD0337F1D22570F84492C19C5E9BF93D18E8DF46B7AAD706E4F99BFEEE778DE2791C332A7B519EAFEED5F331232B09562001FDC47E2A3D37F16A76B166209833FEFEF9E7C8FA0084F3ADDE9D29E147B5BAD624B0F87482DD34D6A7ECC2D4840BAC50E7E637FBF7FDDB0CD4585013BEDFC7AFD8B93246C0F8FE77FF00309CD5B9D499EBFBBE1B295C2D4778D3B87A801B4A0E9BC71F5959DC7C0C7E1FBDEF11868A5851F95C0AEA7A7DA36EE696F17FE5A394E6A9A675A6D6990E104C9FED20F4EBEFEB6B1CA56384D6A4100877F3B4389785E22549B25B89CEE5A9E76630B9FCF1B72AEAAA026F4C1A4A4F4E301260F381F08C3196BEED6B06EA2C696B8F56FE443D9B81FF00648201E204A74A01E8F53FC523D2BFA35BB42A9A3ED79DD089528D26B3656E38893C3396D2B8F24F0DFF00A86F1EFDB1E68F8D5FED6265B31EF2CCDA33B120DF61B3B35B91F6DB2CE3C0CB9894022571F78453767A024F87D80F65AA3345BC8A9784FF0025F2D4F203BC2D816E97001F2BE39B766E58972C922843B7A9DFABBD19E9531E75C5E1409CB61AB721EC6C776A421CD1EA7A65B2CD538A692B0141692641226D11249B7A62D2A962600B48D6A0D486A539D397DE22F184482962ED6E56A6B7BD296686CCCF35A814BF5653519790422B090547CF8638F7B46D3D4E24F0321226898872B49A2743B3E9D4B1D0522C790E3A624A4034357B7997B5AA0F8C50FDA2F679A635E64EF506A0A269E67BB7050D52920AC29625644026CA20448C5D7018B9D2672552C711769D29C86164D5E828FB73D23B6F67F305B25894B70B58B9E7F4FB3B478BDDB876059AF66B9B55D6E5090F644E38B500784008DC40512AE768131E713D0B0B39D20A4B12016726BB5437D368EA981C72D68055FB8332874D68E695AFDC47565F0E25454567854480DFF6116313D4CED874B2EC742EDE7FE2260CC33D22E08A13BFAF43FCC2793D4FC4E348D7BBE7E9FCC127A9F89C10777CFD3F9824F53F13820EEF9FA7F31CF12873FC7EFC11B253C2F577F7BC1C6AEBF21F9608DA3636A55EFD3A79E0823671ABAFC87E58208E0ACC1936E76FC8608212AD66E67D07EFCBF7CB092EE3A7BF6FFC9089D5ED373CC7B87945B084CD3C7ED0F93FB4468EF0F41FA7EF9FCB0CE1697AF87DE32EF9A292D287F39653DD1BEC3EDFA0E107F330061EC99A65C998016241A72A8FE3A9E6625B0D2C2A5AA81D85478B136D5A96FB5BBD8FF65B9C76D1AFF21D01A7C91F5EAA6C344708E26D252E544F14720A1731EF99A066B982B0489F3662F825A41516E4F76E61ACCE763152CDF1A8CB7BC9C5026CD5823859B85835D8D4695B8BD23EA3BB30ECA329F679D0995E89D354CD53E6E9A563F8F54A10038A52909704AA24C82B1E156C6D36C70ECDB1CBED04F5E317F3617888C356DC2785742C4B91AF3F0F35F6DFB5335026C9E3539E20456C5DBC0023C2ECC2346AFCD29DC5B6DE5CB3F554A54AABB93C4B899337FB5C5E5E800C5A3B35844210AF943900696736AD1ABE768E13865FEB71A56AD5679EFAFAEF4B168EBBEAFCECB74E16A324F1269CED24920CEFCF99EB8EAB91E1021D40073566F3FB8BDE3A409625E1D054588143BBB303D2E5AE2C6231A474F36E29FCFB3B4F1B490A71B045844C6DE839183169C486366AD2A1270DFF0055640E96777BB8B546B1173C025459C01FB7C3466A8FB08AC35EF69CA0FD665A904D123C14C018080278AC049B89369BF3C59727CA6505214AACD5B152CBD48D2BCE97AB54E911FF0032A610372E0B7E69C9C9D7668EB56679C3150B5666FD4AF89B51286A1504A8909E703CCC6F36C741C3E01329085B86E9771B796AF1278595354A1292975173C2E03B03F40C6CE79C5F9D88F6655FAFAA9DD5FA9804E89CA54D3956490429464538213FCC82F2520900FB86397FC46CF93972A4E0A59271789E21264DB88062B3C4681857573477A95F1330A2539D010B5731403F9E51716BCD5AE53D4AE9A8DB0CE5D4AD7759751A2020B696F84ACC40160177124C9DE71CEB08927854A24CC51F994CC5CD5BC2D7D3668A8E2141732D47A5F91B73B56DE71D1BD55AADEA9CC2B180F29D430A90E99F171924A6F061311E62F18BE64E966A1040AF31E5E0E6D5A6F7EECF6010532A610FC676B358D29F4B47CB3E3F3111F6BE0C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C1041820830411FFD9, '1', '2021-10-06 01:15:26', '1', '2021-10-06 01:15:26', b'0', 0); +INSERT INTO `infra_file` VALUES ('26193c15-afd3-469d-b55d-eb1aaa2a4b63', 'jpg', 0xFFD8FFE000104A46494600010100000100010000FFE202284943435F50524F46494C450001010000021800000000021000006D6E74725247422058595A2000000000000000000000000061637370000000000000000000000000000000000000000000000000000000010000F6D6000100000000D32D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000964657363000000F0000000747258595A00000164000000146758595A00000178000000146258595A0000018C0000001472545243000001A00000002867545243000001A00000002862545243000001A00000002877747074000001C80000001463707274000001DC0000003C6D6C756300000000000000010000000C656E5553000000580000001C0073005200470042000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000058595A200000000000006FA2000038F50000039058595A2000000000000062990000B785000018DA58595A2000000000000024A000000F840000B6CF706172610000000000040000000266660000F2A700000D59000013D000000A5B000000000000000058595A20000000000000F6D6000100000000D32D6D6C756300000000000000010000000C656E5553000000200000001C0047006F006F0067006C006500200049006E0063002E00200032003000310036FFDB00430001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101FFDB00430101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101FFC00011080190019003011100021101031101FFC4001F0000010305010101000000000000000000000304050206070809010A0BFFC400431000010302030603060406020104020203010203110004052131060712415161137181082291A1B1F01432C1D109152342E1F13352620A172472164325345392E2FFC4001E0100010403010101000000000000000000000304050601020708090AFFC4004311000102040306040602010303010803010102110003213104415105126171819106A1B1F0071322C1D1E132F114234252081562161833437292A2B2D224258234FFDA000C03010002110311003F00FBF8A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A208A0AC4C7CF97DFD89ACEE920903F71909243FB3CA2953A948260E5AE5FEFEFD29962312647F261DADAB54FBB46C10A2D60FA966E70826F595BA5941E25A7FE44A4825BE9C63513CA69A276A214A097A9E03D63265A85DBDF46841EC5AD187C5BBCE0696AFCA56A0904F2039FCAA524AC4D018D5BEDC3CFD886932709658834BD0F0E56F3CA1E22E10B820183A1EBF4CB9CD6B326196A29A1B6B623B74F38525AC2D20DB510B05054C4E5D684CC2A6602BAFF71BC7B4A07CD9F841149580633FBF5ACC11E832268823DA20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20840820C73A5029934B8D789F7DA140A64711AF13F87ED142BF29F4FA8A6D88C289E0920391507D9F66D0D558B097A0245BCA9D7FA363108D34DDAE2172E38BE137E13C0A0608F084104E5F43A193CEABD8AC18C3106D7A5E95AE76A59BCA1791395398105EC3ADBD39DB268B6B10C5F0D18A0C3577187A9E42B5B958372743EEF3D2069A4803AB0FFBC8C2AF777C066624B736FEDA9A44C4BD90B9D2BE7192B552C843AB3A97D1C7F717BDB3ADBC96D6D2925053970E900465CEA6F0B8A18B97F31DC9624FBCB4F60464E90642CA14929539704311C0F9FEA1FB7CFD3F5A9295FEDEBF784614A710422BFCC7D3E828821447E51EBF53441155104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104450C4D92F5D301B70BD6DC3C400FCFC63FF00D79E70067D09F4A6EB9E106B400E7C75F6348C33B8F21786AEE2AD254C254D3E90EA5D5AD6A4C2184B492A25E3FDA08120FE99D64ED09094B93500D33A3F0B521AAB05316680B121FBD3D8EC0C72B7DBCFF894EE97D96762F197705DA5C2369F6F9E6D6CDA6016578C5E5DE18F825B3F8AB54AC38CF1485A6332248D0D5476EED793F2D5BAB4835A3874E7EFFF00F422DDB1360CE99392152D6427759C12921BCDBD75AC7CA1ED6FF11EF696DBEDE6E03B7F6FB718AE0F64E634D1B8C0ECB11BB61B72DDEBB69086C5B85907FA440209233D2B8BEDADBCBF9A425550A167CCB3B50F6341D23B76C5D8084491BF2C01B85BE90D6ABBEB6BF4AC7DC57B266DF5CEF13721B0DB518825F17B89618D2DF55C4F88A5A5B6D2A528992789526739EDCBAF783710711B2E5AD4492522A79F1F7E51C6FC6385186DAF3D2121292430019837A46CFA7DD05474807EFE357795FEDEBF78A94548585A428640F5A710426BFCC7D3E828821447E51EBF5344115510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510478639C7AD10422B70699F61F0D47D34F5A208B57157D9B3B945F38EA6D8B48756950570B2E808952AE4999091F97A647ACC06D3C4090824E8FA3D2D7E1A1830A37E72505FEA2DCE9AF5F58F9FBFE279FC5A30ADC058E31BB6DCF5FDA6D46F5F1369CB0BDB5B3713796D84A5E4F85E2145BAC3CCAC5BB8A5C990148988CEB96EDCF150C2EF8DF096041AD9BFE35B1CFBB88EBDE16F09AB1CA4FCC969992BE9282DBCAADDFAB335358F90FC671FDA5DB2DACC7769F6E318BDDA5C5F137957CEDC5F3EBBB603AF953A5A42DC3C50C9596C24C70F0C72AE57B43C6431130A44C24926E4BF06A7E7817AC76FD9FE071225A54248140C426D9E94F3E2F0CF67F1042F1861576C16BC2C4B0F36E1A4F0A045D37A13D3224E7998D6A2D13978D58512540A852F73E5435F661C6230A9C0A199B752ABB0A80457F0D7B47E871FC3C2E9CBCF65BDD95C3AA2B5AB0F70499984A9B09D73FCB15E96F044BF97B265A48AEE8A9CDC9FD7947977C6F33E6ED89AA77049E548DF55FFC47FF00A8FD2AF72BFDBD7EF14C8A58FF00893F7D29C4102FF31F4FA0A208511F947AFD4D10455441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041A510435372388A40CBA99E5AFDFCEB2C7431B896A29DE0CD5A674E9F78592E020120FA7FBADB715C3BC25315F2802ACFD9ED0C9CBC487FC208717EE9515244A13099827404C7DC56E656EA0294E1DFAF271EFAC371880A56EA475D3FA7F53A3C4BB8AB49B755CA92E04A78CF01FCEA4B73C4B039848127A0A693268403C01BE747A7EE91252A42A6B338720727B3DEF46FC47CEE7F186FE29985EE1F652F3747BA1C4DAC4B79BB4E872D1D5DB3C975FC1036471F096161EB75B8CA95196640EE6B967893C4F2113D7841FC88604B642ADF97D6863A6787BE1A6D0C74B4ED10A1F2CEEA9206F6B906D0E5FA3F1FB79B578EED16358A6D56D05DBF7FB538A381FC4F16C61C5BB8A153C494A1A7D5EFF00080A28009FC99682B89788F0D89C7854C94A2CADE2E496725D8B06D341DCC77FF0A6CC97B1CCA4CF4A545346AE547660DCB3B0E1157CEBADB8943CF5C34C13C43F0AA8599CC95F2CC991D672D6B96AF63E3913C952D4C55A9B5333F961C834761978FC0CCC37D284856E8029C297E35CF389AB3C66D117B84E1B609E2BCBABDB4E07AFA080A6EE1B27888CE55FDBD7A9AE89E1DC0ACFCB4AC97053C474ED5766CE398F8A12662672A596A1208003D3FB7AE75A47E875FC353F1AAF643DD5BD7E86D1706C6E38C36084C071213139990273AF50785E42A5E025A5A8406F795ECDC9DE3C83E2C27FEE73526E925CDEF6F4CBAB1BF41B8C2D05398311DAADB2D2433E4F5AB574EF1578ADA494A003DE96820520924E5F63CA8822B488007DEB4411ED104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104332D00B2A264F41A67FE32FB9A0162595D1F4E1EB0AA57BA8AB801DD850D4F7EBCA14CB4F80A5C6A73F21A7BE4E5A23713382CEE876163D7D3BFE60B124DC36DB82DE42AE20054E69232D46920FCE75D50C4CFDC40054ECEC1C503D7FAE1CA16C061FE6A9DA97E4C4971CEBDC0A67CC3FE259EDBFB39EC5FB88C6714BEBFB556DCE2B66FDBECAE1FE2A3F1172E3A54C5CA92D1525D596D2EA55EE194EB19556F1B8D4A50BDE57D441662E406B1A38EBE917DD8FB24E2D7266CB42BE56F0F98141C100B0619E649D4F38F811DB3DE2E2FBE2DBEC477BBB68E5F5D6D0E23777772117854E5BB69714E78296C392B03C352444E59655E7BF124D3336B29408A28B9CD9B2CA9991C4C7AA7C307FC4D8E996DBA4245281FA50E5EE8F67DC630E3D69885E5DB1174EA901808465EE2B8444E7F9634FAE74D14BDE90D9B503BB8EB763566E8F1954F06728D2F5BFE9F2F530861F8C9BC69CFC69875AE1E20AD424E49CBEF43553C6319A684107D8D732EF607AC5870B3C26592AB1029ADC55B5C9BEEF10B6F77737FB71B3563624A9C7F6870461A08CCF0BB88DAB6E4013970A8CC0F955B3C3E80A2839EF0E771DB8F7CA29FE22DA0942561CD942EFADEE1BB3F08FD407D92F6311B15B82DDC60086FC216FB3D873E5311EF5D59DBBEA310352A24F53CEBD29E1D4B602506144E5EC97F2C8671E50F13CEF9DB5710B705D43EEFC3311B3496C01CC7C8F79CBE1FA54FC57615A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828821B3AB4A544150062403E5590905CD011E777E30DA62941C55893AD2A1BF5E50D9B7D2B497152809FEE5E49CF2CB49C87AD68A9852145C80900DE9C857B3422941597DDBDC900F9FEF9B461DDF76F3F04DD76C3E2FB658EE256B8761183E1F7777757172EA5A014CB2E38DA10A5909E35A90123AA8819CD56B68E37702885391966391F7CE2E7E1ED9E274EFA9255660D4AE4DD6DC5A3F385FE203EDABB55EDABED378B6338BE2574ADD8ECF623776FB0586B8EAFDF2CF131882AE995294C90B7590A64B5A82273AA06D0DACC6602B2581B9D41AD4F1AC776F0FEC69625A1210024350240BD4F0ADAD6F3D78731F17984B16E2C98B661B9485787C172424812AD358907A6715C7F6A6304DDA0B50373AB82E38687DB978E8F2D230F204A14614E1E61EE1B90E062C2C57690DBBA96D0C85DAA3881E24CAC98911CB23CE3E4269D024CABB535A6B6EB6CDEF586292A54F05A84E560F62C5BF3E916A0C4EEAED38A5DB07C312C809320E796401CBEE2273AE624154FB9626CFDEBE6F67D4889C4EF26428D430A87CEAFFDE71B1BEC8BB0979BC6F68FDD0ECC23C172E6FF001D6AE5697412829B2B862E3300124808300E522AF5E1B96EA41A0A8E6DEF8DAED1CA7C598B32BE692A20310CE6F4635E55E01F48FD46377F689C3B63F666C4A63F0B816156F0065C4CD85BB6AC8F29498AF456C30D8443061BA18767C838F7C4F9DF69ACCCC5CC59B93F97F26CFA45EE1415313975A9B88E8F68820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20886C47F0E9429D5BA50BE24C4A8246640239CD658B3B75E7EEB5F36704952C92029B32C481D7DB72A431C582DF612CDB381B6D0DA9C7DCE284A5284859248D321399023946551F8A5A82083762E03B3694CC8E76D042D2A484946F060E03666B4E6072CFA47C5B7FEA1FF00E2238D31B43B3FECA7BAAC7949FC4A710636E6F70FB950FC280843F68875C657EE789EF27FA91331D6681B6311F4AD5BEDB8F404125EED99E3766D0C749F0EE1C26624A430514F61A7A91CF4A7CB7EEEB0DBA432B6F197495DA3AA7B0DB85A8F1DCA9F70BB7478D43DFCCE64684E7CCD722DAFB40852F749CDC3DA829AE7C63D01B064A44A416B80030D296D5EC7D488C8D7D8C97EE5618052D70A5000D3DD10743A4899D0CCE46A80B9E6662F7AE5C0B335684D1BA718B1CF91BD4614A583D2A75FCF786A2D9BBA1FD4D79CFA4E7DC8D0E43B0CEAC7296AF9391A0D2BC3F6D5A7186987C2EF4C14203DEC0D4F98D3EF148B06ED78D981C374A4C003FE9F231E4395474C4EF4D14BDDB2B135AD0FEEB689B9D86DCC39A1B162C6BE753EBC6E3A93FC19B76771BC2F6F3D8252992EE1BB2CF5CB974A20A90D7E22C8A9AE230401C439F38F4E85E1B961E58FA6AC6B7E7C69F78E03E392A499C9245281AF7AF2CDCE7AC7E8C585B29B6B3B46131C2CB0DB690232086C240CBB0AEFFB1C3615219A9CB38E0B8B24CD24B3B914E0D7B5625DBE7E9FAD4BC358528820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A208A3C41C6524111FDC7435A15805AFAC11E2DD4A412015C65091268F98343FBF79F9410DD37D6E484A95C0B248285101498EA279F2A3E60D0C10BB8F36D23C45AA11CD59401D4924563E60D0DBCFF001C7CA08F5A79A7D01C656971B54C2D06526323047435B82E1E0852B3045256018CFEFD68823CE31D0FCBF7A208B571E6FC4F01A09754A5AB88140948E15030B1D3A538972BE64B52B78242323405C93D843DC24D4A5D0A6B356ACF50E39DB8D738E7DFF115F6C4D9AF637F67FDB4DE063772E1BBBAC1AE2DF03B2B2527F1CF5D38C396C9534DA882A0D3CB42DCE1CD284CF4AAAED9C64BC382F352E410CE32C9AEDCDB5689FD99B3558C50051541B9142E4EEB3D2DAF611F975EF2F7D5B63BEBDE46D36F3F6C7164E218DED5E3776FDD3AEBEB75C66D5178EA6C9BB752C952562DD4843892609C84015CA36EED295B8A295EF1ABB106D50E34CFBF38E95B2B644CC3142D6592902CF60CCFC18FF548CF1B05BB1DF0EDE26CC6C96C06D46D0D9A1294E197383E18FDD372EC078DC2DB0470C9CA0F2CCF4E1FB73C45829626A9588952D52DDC4C50750D031B9B679657E8381DB72B01BA161F75B7788AE763CFB0CA376B63BF8757B536D1DBDB963763B4ACADE1C454FE11789038BDE1242758C8E473CC93A57259BF123032316A48FA994438DD3D4135ABD357789C3E2BC2CD48514EEF16003B379B77D62736B7F8737B57EC6DA1BCB9DD86D2DEA1292A09B2C1EF1C591130014807FD55B303F11F67CF425090D40EE0573A375BD4BF087DB376F613133025050A0F5620B372377E753A18D3DDB3D91DABD8BC66C702DB3C0712D93C5ACD6E26F2D71CB65D93C82B82D8521C1C43887E59D4C413CED9B3F6B49DA0B4992B1BCA228E0BF519B699C5BA662A54DC2AB75988EA0B3963DEFCCDCC7D13FF00E9CDDDBDD5EEFA37D5B697765E1B7828D9DFC05FBE8E1688B861C4385A77A119647D729AEC7E1C401F2E8080CC59CF337A172D5AC79DFC7C903E6BBA9DC84A43A8B3D407AB67A0ABC7DB058A38D86D695A5423549904C09835DCF6497C3279379C701C511F394002189BD0D4E6D1209494CCC671FAD4AC368AA8820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A208A4AC0319FDFAD10479C63A1F97EF4410718E87E5FBD1041C63A1F97EF44115032268823DA20828820A20828820A20828820A20828820A20860F2149716EBAFF000319402A80206797CE9057F23CFDF7BC11666D2EDADBE06C1164D1BD7D2098653E249F4CF4CBEF2C41166E05BCBB7BCBA51C630B7EC9CB8570A1C71A0DA441E104151CA4C41EC2688232C5BC9654B5A85CDA3E029224AA124663A089F97C48224ECDB61A6108B7484340A884A4400493390CB5A591FC4756EF0439ADA08457F98FA7D051045344116D62CFDD61C9BABDF716D0485A52A24F021225D24682132673F4A8ADAFB59381C217207D24BE74239E55F3D61EE130FBF346B4E01F2AF0C88EA23E367F8C3EEF77F5FC42FDA8706DC2EEA2EEF2DB775B1572A6315BAB75DCA6C6E5388B4D3AE788B6789A5F84B43807101C24419AF2EF8CFE24CBC0CE9FBD3095249F96970519BEF54D9B22CF7B18E9BB025FC94277F777BFDEAFF713715CD99983F988D9AF63EFE047ECE7B90C1B0FBFDE660ADEF076990CB2F5E5A6256F6D8A61697D438C8436F36160024F1839C8AE05B57E2999C66113882778108564697269525F3F38BD7F9094C94EEAD237B2984351ACE5BB3D63B05B19ECE9B98DDC61CD33B2DBBBD93D9BB665294B16B85E176F68F909802108004981A6624F3135C43C4BE3138A54C57CC7DE2436F56A4F17A5CEBCE23B153C4C56E041537FF1121D2332C6C34F4148CB78761B6966E8559D93F6481012C7861B291119240301433F2D35AA12F18668F9EA2CF5AF0D78039641B3A4252E6808604115078F0A173C34D5A24317167736E59BE65C711C2414AC05020F9E5E5CF2E734BE0FC512B09352952EC46741AD29AF730EF67CE5CB9A3E42D285121EE120D09B7534C985E38F7FC473D89374BBF1DD4EDA6D3B3B38D61BB6384D91BB671CB7B4659B8B95B2953A0AAE024AD45296C2046931AD778F03F8BE4CF99282144311BCE456A2DABD6B9DF9741C16D4C42657C9C42E5B28109DD35B5779ED95ABF7B3FF00F4F9EEA319D90DD0EDC63D8922E16EED0DF8B5B75BE1456EA307BFB8B702559ABDC4011F488AF68782270C6C894A0E4A8249734B86BBFEBCE39478DF1BBF3378A80037C12E1C3D1F5173D6B58FA6FC25C53962CA94C9B739A7C2524A48E131307918915DFF00662372424337D3F88E233CBCD59077812483CEBC35FB448D4942505104144105104144105104144105104144105104144105104144105104144105104144105104144108AFF31F4FA0A208A68820A20828821647E51EBF53441155104144105104144105104144105104144109ADD4B7A83F7FEC51045958D5E3172EBD69E25CA1600109308CFA798FB148ABF91F77AC109605B396885975E6C5C2559C3E0288E7CF2E9DFA56B043EC6B6770BBCB77FC4B0687829E2654CB490E056B918EA069C851046161B6DB43B3B72E30AC3EE6EF0F61442129694B5F082604640E9CBFD10465CD8DDB6B2DA6C383E8B67AC9F6F272D1E4043A0CF240CF3D7BF6AD3E60058127562D5CBBEBEB045EA8B84ADA0E942900980958856B12474E7E559F9BC55EFAC11EA882B81993F2C86BD3E7419841673C6BD7FBB41082EE1A6D6B438A08298CD4400644E46B066D0D5563EEF19170FAC6B27B4DEF217BBFDDE6337B68BF1B14BE43769855B33EF3CE1BA5FE1DD52500F11084B9C448D0024E715C8FC7BB653230D3D1F308514AB76BFC6878E7DB57AC59F64618CD505252C10DF31EE4AACC1ABAD79651AAFB8ADD4586CBECB8C7EE6DED95B7D8FAD7758962A1224B6EBAA759487A3C42B6D973848568A112057CEFF89BB7277CE9FBB354594AA856A5D99F8E94B333C5FF00012CA081421830565A1F4A371E7B09636C6C4ADB45D5CBE98042DE5F12CAB55051FF00A857E5E511E47CF3376B6297356D316CFAB539D5B36F3AC4F7D6A4212B4CB3BAE086A0193529D33AC797AAC42ED4DA0A2CF810A9F1784F8E04823DECF3FBD29862264F9A1D44DEAD7BE7C6FE56B0D44909720A9943F893F4B8B3701A449B988ADBF75B425C504A4788E895929039F6323F5A55789F978420ACB806A491E76A0E19650C66CA284155537648A015CBC9F9B690DBF1A5FF0076EADD95248E4993DB5E9DC4F5E75CD7696D5988C428254582C3E6CE79B71FCC35953D52D745117A83DFEFEEF8A37C96F60FEEFB1F6EE2D9B364E5B969D4292381497429052444199C875AED1F0C36B4F9B8BC3A43B1525EFADF4EE474CAC92316A423E62D64A88A026D4AF916D3A45C3EC57B23826C66E3367ED365F09B5C3106EB1277FA4C21A5A94F5FB8E294BE0E64A8C1EE3AD7D51F84A93370787047D44249241E3566E57E4358E61E2A9E664C9CA2B5105BE924103CF37A664C6F95AF1F80DF88657C2388832248072F8D7A525A021200D07908E7A15BCFC0FBE5CA1C5291B414410510414410510414410510414410510414410510414410510414410510414410510414410510422BFCC7D3E944114FBBFF0064FCFF006A208A8249008220FDF4A208F780F51F3FDA88214488007DEB4411ED1041441051041441051041441051047848027E5D688222DF773E7EA72E5AE7F64FC48220578797AE4BFC392C8CCEA741E7AD22AFE4608B86C5AF0841CBAFC3B9ED5AC10929775F89B801014C80380998329CE3B7DE74410CADAD6C9DF1BF1366CA8CC9E3427424E79F59E9441186DD79EC1F780EB966DF87875C2D03C240842211072190939F39FAB259AB07073228FEFF0030466C2E2AE5F6024FF4D29E254130AE2483D391F856AE753DCC10A5C5C1B40FBEA9E11C013AF3CBEFEE300AB3513C6D04446216CEDFAEDDC4ACB49852DD5494C2520193D3219498AC2D442165CD12A373A18C8B86BB86E71CE5DE862973BC6DFEFF00212E7E236536023F1E12A2AB77DCBFB70A678A4F028A1D1CF307A9915E2DF8C1E334ECEDA33F0666B315021F813DC7987E71D4FC39840BC1A5652904E6CD6377A0F74BC66FB36DBB4C2587D88E06F8901034080AE14E404649033E990EDE20F16EDC4ED09B30EF05051373435B8C87DEF16642129510033588018937ADE95EDC22590A0E202D26028498D67CFF00DD51654B0BFA88CCDC31CFAD72D1ABA43C4AC001EA78DBAF0D0BFDD839289199E83D358E5D3AF5A6D8C9D2E425449A797E32CB9D32541053BB40C439D1CE5C7335147610D56E24B9075E632EFF007DF99CCD57B158EDF96B093420D34D2D5F778D9787DE946809AD49176F74E59BC535503825E2A7B004EF2AE7526A0B7E7ED158992CA66804B549616EADEF84620F68571D4EE9F1566D64DD5CDDE1AD3694FE6295DEB685E999C952794666BD1FF0AB602D38AC3929FF00720B805AE3D7EE7A494B5A84BC8848BF3D03E9D78D236AF725B3AD6CE6C060384840496ED10EA931C2429E4A5D5748F789CFE35F55BE1360BE460E43803E8431B56DC78646B58E6FE235154D9ADFC722F4F747AF2CA33D5BBA3C24F1647A65CB21CFA0AEF4A67A5987A7BE778A6243121C1E5D6FFDD216F151D7E63F7AD6378AC104023434411ED104144105104144105104144105104144105104144105104144105104505694983AFA7EF4411E78A8EBF31FBD1041E2A3AFCC7EF441078A8EBF31FBD1045054D289F7E09E522474D3CA882105DBA97F957944E4743CBEF9E74410E59429B6D295192264D1042B44105104144105104144105104144105104144109389242BDE0001CCE9FB4D1045B57B74865478B88C4CC73FF1209F5D288225B0E75B7ED1B7384E723319E47BFC7D6932824921BDFEE32013610B2D694C8022798EC7B47C72ED4990C723CA164CA0AAD85BAB642FDCF78667124A16EB5C6DFF004C0993EF264492AEDDB23DE88DFE466DD03EB9790C83968B3711DACB1C39C2D2EEED9F79F3C286587029D0498F7933AC91F5A23030E4BBB86E5EDF87E229C130379EC42EB13C490DA997FC35DA367FE46C47BC5615A7148E1035ED35ACDC12B70AF79AD406A59DDFECDC21BCC1F2D401B17E3EF236B18BEC2036DF0B412956504F200E9941D341A77E906711FEB7C904EFBB1739F063EB0A84A481561A8F67B656A44462D78D7862DDC9487149F7E3DD94107CF5C865AE50273B1E1B63CD9F2FE605BB07202AB5C855B8D78F08748C0AE60DE410DA532D6F56EFA462FDEFEF230DDDFEC5E278D5E5C22D12AB376DED7C4586C97DE41619E19227FAAA4E633CFCAA8FE2ADB523C3B266AA7AFF008CB5B82A1FF13C5A8C73CB38525ECE5CC514A6AA494BEE976E63D75EEFA05B91B0C75DD9DBCC5B1C478DB41B497770FE2D7484AD41DB745CB8BC3F816A1C4A86149078B2E432815F24FE39F8E93B43C518932261DDDF50001D2F47A5ADEC760F0F608CBC000A71F4FF00B8D0737A57FB8D87B5BFF0D3FCB1E65E408010B526100E5993CB3CE73E95E795ED799356E54482753AB96E678826260E11EA92E03B101FB51DCE629F68B92D0165A4B4B3C4A124A939A7324C4E50454B48DAA809DD20BB5E8C7F5EB09893AB5CDC90694AB7AFE21DA4CE71A9CBBE83EB95426D19D3315BC104806C051EF42C076D7ABE486247BF6D10B70EA19B8216415023DD1911F1D7FCF6A811F3503E52F7897E94AB74A7BBBF96B4AA5697BDEEF5E9D876878D02E20B8AFE93600256E7BA8CFBFA67DF49AB16C7C3854E4AA60012487F2B3D9ED71C6ED1058993BD314A4B3E82FA656E1D58C618DE4E3981DCE2182ECE5C62568E8BBBA415B61E49092CBA858E313919194E875CB4F587C3618695370E5D0900A6EC0BFDEF566A5A12FE32D60A4BEE9A0772CEC35A8B746168DD2D9CC5ACAD3F0564CBCD5D7896D6E96FF0EA0B0809653F9A208D07F800CFD0AF00ED5C14991210264BFE2960142EC2FD0DB5E158A26D2C24CC4C954E52552824A89F9819C12599E873CED1909CC52DDB70B706404E4223300F977F9D77594B913E58989C44A0E0382A0EEC38FE69DA2AD2F662948DE4A98126A74761D34E70A22FDA5E8950F3F5FDAB55AE52003F3659A904850CBDE709CCC1290F576CEDD6D6E6444A34F23813C326674923BCEB07C865A5335E325A4B0208D41E5D3386AA96A45F26E07D8CCC0AB9099046604F0C67E5AD23331E94644962C067FF00DB6F65A1B99890ADD37E7EF5B3C788BB4A92094A927A1107EFCF3ED5A2768EF16DD20D1DC0CF8D7D2174A0AC021AB50FFD7AC565FF00FA89F3CBE84D4A4A0A58DE2CC6DEC0F7D9F3F2D4ED4ADAB4E5CFFABC79E39FFA8F89A5770EA3CFF119F92BE1DE2B4BB2341E99451B8751E7F88D770F0F7D2140A07B1FBD3AD6A43163946A43163945548AD6524D0306E756E3188A0AC0EA7CBFDD227120121879FEE0838C743F2FDEB231209018579C1092AE1093041FBFF34F512D6B48506AF4848CC67666E37F231EFE21249804C7435932D42EC1F9FE23433C26EDCF2FFF002848DE278CA122549891CC489F877A426A8CB2D4347A024D9CE7FBBD28635389A80002F9BFE3D87EB09AF1065B5842D412546005644F909FD67E94C958F4255BAA0D56AD3ADF8C60E2802C401DFB33C7AE2D2525D198ED9CE5AEA7FC548C9DD9A84ADE8A7A8346F7C6F02A7ADDC27E9362DDF87115ADA1AFE2D80095389491FDA489F818A658BC6C9C3024AD34A9721DBDF0D03830E657CC9A5820BD1A9ADBFBB738B4368F78BB23B24C2EEB68F19B1C1ED500A8DCDFDC22DD8000CC95ACE83E755D9FE2BC2C956EA88E7A51DCFBCE26B0DB1717894BA10A3C0073D83FAE91A6BBD8FE257ECB5BA7656E621BC1C171E75BE20BB3C0713B3B9B90A4EA0A14AD7B76A64BF1C60104825D9EA18DBF7C62CF80F87DB631D284C4A02378D1330282868E32D7567D239FBB45FC797D98ED31FBD6AD30ADB7B9B7B72800DBB366B4AF2FED21C00F383A66075A8099F14B672715FE36ED49005BAE74EB6E313137E16ED3C3E1FE74E22953BBBCDAE9D39C7537D943DAB3653DA8F77184EF2F636C318B3C1B17F185B5BE2CDB68BB3E03A5959525B5149F7812209C88E8455EB656DC95B51095CAA6F65C3D7AE6C639FED4D953366A9495D4A0B1777ED973D637090EF124129209131D3E3156058280F43C8F2E1C620D13378B311A93D721CA2AE31D0FCBF7A13F53366FE4FF0088557F43BE515020891410D431AA54141C47B446D051041441051041441051041441142E214329313D4FEBA510441DD61FE31396B3A67F5FBE7144116EDC58E2ED38A45BBFE1B00FBA9E25089CCCC69D75FA524B51721E9EEFEF9DA1E61D28287500E4E6389F7588F5D9ED01822E675CF8D47D7335A43A094E4057AFAFB31430E5C38DDED93E034FA1290BBB57BA973881885E731FBF9D101166715CBFA3D85333990D706D8FC2BDDBEB809BABB0A2A4B8785680AE23A1226040D3A40E704614486622D576F6E7215B68F1925A49084050485240108D0002123E1197A695AE331625C929CCD88E4D41C751DA18CD413535009B8F3F261AF011497614467AFA76EBEB1FE6AA5225AE662F780533DCD337FA587BB57368AC48954CC137F74A9A30A5E18E236D6D76DF84B212E6AD9D0A888309D27400E7CE3A55F25E32660A56F95B0082F91A248CFC9F4E912180C7294A00541B8CDB3CCB665EA0718E597B6FBB8CEF0369B61B73F845CB96CFE2578B7AE54CAD4996EC1D6AEA1C89905082065067400D78CFE37F8C4A7FC994164B058A13620F117BBD0718E9BB0F65CA9F2862124013189529A841D73FBD3AE68C1997B05B7B2B266D90CDADAD95A5B97B87852A71A61B69C515692541473CABE5CF8C14ADA3B5E762007056A2146B43E77A791D22FF00224A30F2848241DD01F7454BD6A1D988E2ED17336DA5E22E3C443EB4E7C2D90A333066333D32CE67CAAB08D9EA2E40A92CCDCAD46EFC808C198949284A4A121C1DEE232F4EBAC4DDBCBCDA5650A6C1905247BC08CB31F4CCCF5A7A8C1AA8198B54E8F95B8356D0D17300A3D4E6FF007FEB38916DAFFAC18D32FD33F5FF0074E656CF35A10491522CFE8D5E5943698BDEFF00711A9B69FD311C231A6F0F0ADA2C5ECD769B397D84D95E70C071E756DDD024E454532476CF41CB28901B004C4098CE74B922D50DEEA79624CC095AC12B3BCC5CD5218656E02B7C8EB801BDC96F571869C631BDBCC5ED5974903F95624F200049309E21D08E5CA9038656115BCCDBACC2D6ADBCBED1BAD6925560750CF4008E397DE2DC77D8FF000A7AF6CEEEEF6EB789738C30B5AFC7388A576FC64CA4A5447140F9721573D81E2B56CD5A1456A1BA430701BCF26A1E1A1AC7CC595294459C5412E4B74D2FECE44C1F731BCDD97BD373856DF628B602006138B624F129012520980069198CF5EF5DCB60FC619D8308099EB1BBA28F0E34F40618CF4A672548504AD2F621C3F1D4E5700DE2FDC3B6977D9B1CD2157ED5BED132C294A5DD3097EE94F02660AC91309CBB1CB4ABCC8FFA81DA4852509C5CD01C0AACB3578E435111337092C277004A5811BA96043BD59BF558C93B37ED2EC17136DB4BB3D88583A212A58B50D3614041CD674CE672EF5D0B617C73C562952D33F124A54D5DE27CCAABA1CF38839FB28B1DC52C924B6F3B6B4D2FAE7D6335601BD0D8DC7941FB6C79AB37DC88B4B9B94204CE49080499EBD08EE4D773F0F7C42C163928F99392EA6FE4A0D5B9A97B674BE510D88C0CD4072016D3F96879F6ABF01191BC67EF5B4B8976DD76CE094BF6EA2551CD5C432939673E75D7765EDAD91884A54B992882D5DE490F9558F971A8688C560D2545D2CACF7A84B016CE8C5BD6CF5B6E069210DBA5D4670E2D4173D4714C64646556F9123093A5A66A11294156290922F46A3380CED9C2C896508B330ADC96FC5AD9C48B6E92331946503AFAC79D23895A70E92D714DD1DA83DDE82125ACB543317E3C21D0526341E801FAD468DA254A6097E3EC7BEF0D97308B5341FD7E5BEF5A4A4E994F2FF1A7C3D69F4A9E99A2B43D9E9E46F639776EA9CB0ECAAD3A67D7CEF0BA220693F3D4D616A4A5443B935157E37FECEB0A4B51525D5724FDA2BA44A4ADFF00AE83DF38DE102412634FDB2AD7FC71C3CBFF00D608F2B230E9F607EA086EE708566067CC810329FBEF4BFCEF94022CD4B1AB572311B389DF60F6C8FD87BBC15A1C600F9B5873BD1F58525CBF983EA4D746A5CEA0E82185F3B656ADA5E7DC5214A39F86614A8319CC4C1C8672396B934993D0B503BC1D4ED5CBA16032275A43D95B3D730EE84D732065760CF907A88B3B6AB6DF65765B0F5631B478BE1985E18D214A55C620FA185A40199E224267BEBEA29B4C9725492A2536A03F661EEB4687B2B62CC98BDD32D4496FA98EEE84BF06FEE3955BFDFE30BECABB8BBCC5B0D6B68713DB3C5EC12529B2D9BBAB3BF4F8A50A29496F8C2A01D408CB903542DB3E3093B2E62B0C998A0A4B8A1A6BA81AFA3DA3A36C5F00E37192913552A57C823EA0C77EA28D6F4E85A388DBECFE3CBBECDBBBEBAB7DD3ECF613B3D8195AD2D398EDB3F6D8B96E4F0AB89973878C8CE4643280245738DA9E3D54C27FD4357ABE5C6B9D2F46D6B16AC3FC3D129BFD206B761992DCACDDDDDA39D3B6FED7FED39BF5C5311B8DA3DE66276F86DD70F16096D8B5DA18680490B4B76EB51090A1DF3CA6A8B8CF15AE62C8DF24AAF527EFE4CDCDA2EDB23C1C990A4112D346B8C9EE28FE51AE78DE39676ADDDA71AFC6DFE22B0A3F88BA8778972493C4A20E67BF3CA342C7FEFAB50BDE97AD69E9E51D4B65EC544B4005291BA34A59CF6EFC811185B0E606278AF05B3AB37B8B62D85DA35689325297EF1A60C379900A57396A290C0C85E2F69267392EA15A117EFADC6B5884F154E461A42E582032482006B7E473CB468FD14FF8766E72DF72BECB3BB4C19C6CA2EEDB0D174F248851388F8770272CC8F167EF2F5578370DB9869273600EB517E793B5695BC7913C598BF9B8BC44B3FED53825994F577E047D9AE23A1A93C494ABA807E226AFF882529000A65C6CFE6DECC52B0F55BDCB9278302DE7CFD60041CC5664972068FE6F0E27D52DA8EB710B2343E7FA0AD95FC8F3F4A42328302346FBC57588560A20828820A20828820A2082882122851513208310348A208560741969DA8821A3D6C1C515152B38C81D0F68A457FC8FBFBE9CB942B2E66ED353E5EDF586CAB04ABFB9D1EA63F4CFBD6B0B7CEA30207FFEA9F6880C6F6751895A1B66DE76DD6A20975A5702D4279A867A081D46BD0119130D492492D9E598EDCF8C2D85E088C330F45936FBCE2923375C502B3273CF4D39FA5119F99CDBEF639B5BEF12008B5050AF154948F796BCC99EA7A74E7F5A467618CF0031700B3FE3DF2816A0A41248B331390B505B87DEB152805A4B8D9E21049CE4E43B4F4FBD4AB84C0224A82D4056B517A93C3AF663157C6EF952B75EFA114390A7363722ED68B7AFEE12DADBBEB8712D34C3370E34851E152FC36D456540C03F964768CC542F8A368CAC360E67D607D2A6FA99AE3CECF9D4D6253634A9C54860E094B8625DCB1CB4C9BCAFC45DB7F691D911ED23B53798B0BA7F15C11E6ADF675868A14AE37982D5C00951E3954641199244D7CE8F8C38D9D8A9F88521649758BD0D59A8C19B2B47A5BC298290AC1CB92B037581340E480F9687BE5568CBB84E39BDDDBE71972C1BB6C1B01BA585316F8925E63134B6A5492EA40291C5AA0E85275E55E47C46CE54D9A4A85779553EEAF52D121B5548978829960519D839A00D5152D4BF03C636D763765EFB02C350BC42E7F1576A4F12E1456DF144C0E283049F5035AC4BD937FA43BB00C41E449B0CBCEEF15F9B8A2A59417E2A0EDA70635ED98117AB16AFDC3697941A41512385220009240D27BCF7A7C8D904B7D15F27F2D7422838C3533C2014825441B90E7BBB43D459B89E69D3BCFDFCB4D29C276492A622DC1802296B1E6FCDE105621F3B59957E6FF88A6E703B2B8683A96909BC2656EC09510444919E42227A6B06A625E125CA921012A2B63BD620F07F7D2F088C5CC44C505281416DDB922D723956A5853587B6B87B4D33C0F296A580608323CB965AC79F28A86C5ECD4CEDE0DF5170187BFED9A8F189B899A4FD0CC4DCDDB872D3CE133873438D456E05E5C1044089D3991D79C54327C3938A8B254483F4BDABC72A5A03314A29DD2376CAD6DCB3E6C6D94242DDF7521170195849212482441EB3D80F86752786F0E63A852086B81A5FD321F78DBE9DD26CAE19F3A738F51645B5296979CE1207FF001B8A2D8408C91DF9FC69E0D97324ABFD451749FE24E79F115AB7A65A6EA492E91FFCC456B98BDBADE2DCC67671389A148FE578392ACBC47191C7E64C6BDC472EE2A57098F5E09492950013A65DAB95C1343586EAC3862417E7DA8C29EF40D8C712DCEE1D8CAD6CAEFD5835E364290E614E861614731275FDEAD381F8838BC090113961233DE37EED969DEB0CE6E0D2B2494D6AECDE85F864F9E822350FEF4F7560376589BB8FE12DCC26F9E7AE6E3806790100E444E9A4559F0DF1AF6AC8094A71539280400CB56B5CC0E43BC319BB39054E101CEA32BE84B7F6D431943607DA57673137D9C07692CAF301C552AE05DCDF368B6B0796A248F016A32ACC00ACBF3111DFD31E02FF00A81F9B80932313892576FAD7516E24F13DEAF1058BC1A82D4121806B51DF2F57A74A46D2DA6236D72C22E18790EB0B48521E4AB89B5057BC08568723967CF4CEBD0FB07C6B276F041F9A0EFB31DE70FA82E5F87488C9B2181A392E0822BCDAFCC5697687CBC4ADEDDA6D450B794A2470B602940CEA474CB289D0E95D43038144E4158DD60017C8BE64B1D73636BDE21E6A56926967C891CBD3BD9E1F255C680E04A803FDA47BC34D47DFC6955484CA528A4BB1CAC4559BBDA90C26129C8F4BBBD843A654481FF975D79C5472D6EB22AE0DC9B30CBB7087D20BCB079FDA14592001D67EFF004A7A9237732D702F5261588EB8BC0C29280CBAE951CFC34C84CF33F7D69CA64EF237F7D22B626A5DEDC9ABFAAE5AD6AF71CE2BB8B945BB5E32C1298931A8F3F2CE7A4674829494920A998B7AFE3DD1F1112DE356F72B73C169D5A1A897801C19CFF74F633D0014B8952E6A77C9497147A9A3BF2F4F386C70AA98A4B7FB89B7DF367E50C76876B304D9AC02F369318C42DAC308B0656F5D5E5C3A96D96508924ADC3EEA6025524FC63484C7997252A5EF064BB817BD1AAC28EE747B9896C1E109989941277CEB6D79E8DA18E0A7B647F1CEF672DCD59639836EF71DC376DF6B6C92F31F87B4B9B5C46D9BB8014801286DC0B052A1EF4E7293A72A26D3DBF2F0FBDBA40A666CC2E3D0E61FBDE3666C45AD43E67D24336E50915BE7406C3A068F93CF690FE27DED2DED3D8CE22FBDB71896CA6CB3AEB9E1E0985E217564A530A51848B7E2289E18303204F3CEA958CF1B1438334B00400154CF5E83BC5E70BB092129FA0BB8A33E62BC41D7D19E352F655AC731FC4978B5C620ABB2FAB897738B3CA73117540FBE5F5E739E692732233E75CAF6FED39FB4710A9A851AB9727D2B5E14A748EDFE1CC148938044B28E7415E56B1E3EB4CDE19526DA54DD895369F79C00F1E594827B0FBE74E9F2F12A7FA946A6AEFEC657CF8C4E2A4E140277464C186B5CFDD1A14C3F6999B26CA584DB32FE61C7D43856E6A004A844C4C08EDD2929180C44D58241041CDF3CE95EC38E51A7CF91203A4806BCCB52C33AE6D912F18537938DCADEC41CBCC482585202DA65CCD7C6A480509332003249D055830BB1672EAAE14A6BD73CB8D5E31FF7C932412E2C74A30CEB95697A56CD1D0DFE14FECC175ED3FBFCC3EE2DEDAE2F3677642F70FBCC5D7768E34BC55C0FB019500524A16DFBFC530418ED7CF0F6C55267CB74BD45817A5DB8654D699C722F1A6DE42BE6913004905892181A80E6CD501AEF5CA3F431D9BB0B7C1306C2B08B56C2AC6DAC2CAD136CD2415B26D5869A1EE400904A24EA20798AF49F8730624C8410186EB579598F1F5B078F2FEDCC519939656A054544BA5D98BEEB74A3BDB52232234A3E1254A82607E5F8019F3EB53D8B6000E7EA3F0623F0409054482C00A5AAEDE5F8E752223D73AD30EFBC092F42DFDFB6873882C87F7710E11A1F3FD052CAFE479FAD611945C13AB7DE2BAC42B0510414410510414410510414410510414410520A0CA3EF8FDE082B10422AFCC7EF9511973A9EF14D106F1D4F7860DF8CAB8BA4BE10AB684F8204951CA4F148826748F2E735A9C5A650751B02CEE7EF4E7A16778C09BBC580AE84063EEC6A6F9443629B4786601875DDF62453656B6E852CADD86D30013CFDDE5CCF6D74AE6D7F1548C14A51DE09DD06AFA5433177763D69430FB0FB3158B50F9680ADE672059B57CCD581E2F1CDFDE56FCB787BC1C6F12D9DDCD5ADB5CD98E3B5BDC5313438BB669B7125B51C35E6090161255C53202C0D6BCD7E36F89328A66CB137250A9B5C3DF507A3F38B860362FF008DB8A5218674B659B50DC509AE9168EEABD92F6236318BDDB2DA2B21B57B758E3CDBF7CFED0A1ABDFC1BC1D24FF2F2A4F88D8014A8933091E9E5CF106D795B5A6AD5BDBEE54595506E0E64D281B325A2ED85DA3FE1CB32FE61960060A0A62E1A879E7964CF1B9B63B1D86E1B6ACB8C3447B89290E2471A724FBA3A246881D001CEB9D62B664B52F7D018073614CAA3EEF4E108AB6B4DC54D50984153B1527302C78DB8005DC9891B64F128B440E10787CA63491A7AD272F67241FE2031B8041200E55E34EC0C6AB98A0EA2C5DCDC9E1C3BF9522585B86FDC48303CB9E7AE9F3A792F673D5A8C031D682DD1BF30C264E5283871AB0A9B0B547BEE785D95F0FF0014ED1B2C33EEB16CC1AF260DD4F7D10F9A599D479B7A8CA3D09E1CB3F5D6994EC0284C6018756BFBB423F3EBE66833D6BEF8C7B4A48D9C1C2D6064F47BD6AFAE5C7BC3844DDE00062D71E9D385E8D14139E5F993981C8CC4FCBECD4EC8D9F86491BC9191B015E7D87EACE12A041191BEB476EFCA1322091D3F6A974C9C24B05928A248A00F6CBEF0B82E1EC4E9CCC56940201CF3CBD7A695CBFC452A69C72CE1DFE5BB0DD2D95CF3F57845530A0EED2F753D7367D6A2CF9F5ABC2ECAF87F8A869783C44C0CA4AAA2D56E1771F9B88D7E6162412599EA73D397210C8E0F6C1F55F2DD5071504A240D073CA7A7E9DDEA36229406FA40725BE9E37CB3BB346BF31CB6EA8F162C6D639F56D213B976D5D4969DB64BE902389490A1D33F3D3F4CA96FFD3A08344922D720F4AD9C3F93C6C4004A98BF07E568B2368762764F69EC97677383376D7290A2DE24DB084396EB2642D0F1CD241CE6397A544213B4B66E387C952D3292A0480481A5851E95D7267845782DF3BE405050240CCE7A54B861E4D5318B707B4DE4EEAEF14EE0B8CBDB5FB3A544B96F7AFBB7CE5AB4924F0A12004208048E7A67CABD2BF0F7E224ED9864A67E216D2F75C1516AF33F8FC4362B6703FC5212EE2A08347B7EFD2367776BBE2D99DB05A70D52D16F8C3502E2D5CE04A90E1904044950CC73123E75ED1F097C58C163254A926783BC00502A1C19EAD6627D728ADE3302B1FC523743B8CEB9E56CE8391158CEC16A2DAA0057BA4A38648D32E5F0D632CABB16076A4ADA32C2A52810A17497EB47CFF262066E1EA686DA6432D0713C4F111E58ADCF0506E3DD72552279126358E47965D28988DD9B7725C9D052312D3BA902DC0C3C52D2A882329D48EDDE9FCB4921C0BFB17FB7DE3788F7D01FE34F8A5942735ADB3C2B3D33CF29D7D7AE44E9A99128953BB6593E5EEEEF187AFA9C873310B718B58D95A3A1E778AD5A0A2EDD5C94964093C456BD00027B0EF3548DA9B6C4B593BE46ED6FD43D6B5D736BB53748ABDF22E282A19B9F7BE4CDC7DF6F5FE2F5ECE3EC4D86E202E2FAEB6C36B196969B6D9ED9272D2FCA6E4A6129BEB6E30B0952C8200CE388C659D77FF5FE1E4A861953909995AA94C2E5DFCEE6D5368B56CED96AC44B44C4A014577C815625830B39B13C0B111F15FEDC3FC6A3DA8BDAF710BDC3F0AC7F1DDD06C3DE3AEB565846097379818BDB75A8A529C4184AD4DB9C42240CB356550FB43C609C4AD72E4CC1398FD664AB791517D0EA7AE6C22D5B3F634A97BBF4925FF92C7D4FABF0A7ADA395F84E078DDE622EE33893ABC531ABA597AF2EC294F5ABE552A0E070C2D4B20F12C9D5649E66A83B4F689C5297F2D4ADD36DEFE56620E82EDCFA8BF6CDD9E12120A4134AD08EA7FAD38C648C31FB5FC4A18BF47E19F1C291E100949E44C9CF21F03C8553B1180C5CF5B82ADD7767367D2FEA783C5BB0F864A775EC187D5567B90E07F4C4466CD96B816F72B6997896C04F01E29CF84731D3C8FD625709B2CA640F989753177048F57B171CF361163C2E21725210927746552D7FEE9F78C86E5F3C2D5E01D3F96667E1AC1EFA7956B330528120A6A08CA9D72E17ABD61EAB10B2C9049CCD781E6F4BDDCE6498C4B88E32BB40E3B7971E1B685136E4AA38D45449199CFDECB2F8D2B230B2CCC0C81CC0A3D05B3BD39C44E3A74C092A06CEC3837524FEA31DE39B4F717EB16CB42DFBABC7ED6CEC6D900A94FB974EA18494A355105C4E911CB4AB56170B2804B804532041AFDF2EFC22998EC64E439DE51BBD4B0FEAF957B1FBF2FE04FEC896DB81F662C136DB1FC33836D36C6D85D622A5B205D34D78CA72D64A93E20059746BC87202AFFB0B67A4AD13129B33306BD1B3399A76BC71DF166D19931464A95F4AB789075150D503DF48EEFD95BDBB3C4A67371E990A8CB52223489CF90E935D87038712B0E80C599C96BB0CDA81B839EB1C7F1B89F9B3D8549D7514AFB01CDA25D8694D3010A571112A999D4F144F3A6D8E98CB1734A0FBD876BB44A6046ECB2090E58D0713FAF6F0A224054093965EA6B6C2972391F407EF0A62BF80E7F88748D0F9FE829C29DCB97E36CA1293FC7B7A98AEB585A0A20828820A20828820A20828820A208283404E90426A58989223A18EDA73CF2D4532F9DF327096902B4734F7CCFEA36092438F7EEDFA8A38D3A052893DFA7953B54ADD04BDBDE43DE51A2F7902A070ABF93088C77114A2E0B1E138B331C604A64C6A67BC9903F5AAE62B6D4AC24C3294952C82CFCDDB3CF2BF384C6F28D378F04F36F7ECC2AE5DB698E24AF212A29CF834FCC7ECF6A98D9D306D097BE92CE1C0A7637F6F0BA70EB51DDDE21C3B17B67A03FDDE2DEC5B1FB3C3ADAE31572ED962C2C5B5B972FBEB096CA5292612AD388C10419CFA662A9DE2CC6AF65AD692ADD090A2429B9D5FCBABB185E56CC9BF3A51049269BA5DDBB5732281E39D9B7BBC0DADF687DA0B8D99D8470586C8D83AA6713C56E54B698B86C9215E0BED92DAA0A5691235307531E55F1E7C424C84CE97BE428053170C2F6FC9B9E317DD9721184402A439A1500DBC454D985B36343934664DDE6EC300D8AC0DAC330C75C200972FDA523F10F3AA3C4E9538912A4F19504C9FCA44F39F246DEF16CFDA78B5844C56E952AA0F13C69976062C93B169284FCA4A0518850147A061C5F57A5728C9E30D65B4B4D332EA1325C5BF9BB394709D067DE72CA29FEC3D978AC6292BDF25370E4BD6EFC2B50D4E358AFE2FE6CC7650E0C580CDECF7A1C83EB0ED4DDC7861A4B9C484880567DE8E84F6E5F0EF52F8AD97364CCDC25E81C1BBD6C19A86F0E30A7E5206F01BCEE5FF007EF46786ECD9B8DAB889124C920F3EBA09FF0011148A700C5C8F2ADED63966E4DEA61D2A7053B9150D70C29CF5FCF08921319EB4ED18548CB93DFD0FBE10D94B2682803DA84F33EC426A7529E44CF97EF4B09433096E03F50814A8DC8E4E5BD228E20A923E741C3CA374BF36FC424A9449AEF1E469D29482B53874D40602CD6B743E50B4A0524124B747A0A353D6E1F8414DE648985B74D9E9563A519BD5A1E226240AB5793F23584CA0924E59F9D47CEC1E35544CD2903FF2229470DC7CFAC2E89D2C2402AB727EB0BA084240CCFC2B28C3C84A00C44BDE99A90E686B535F2E1C6194F52A62DC1000E3F703EE62AE31D0FCBF7A5449C2972896906C1C0A33F0A75E9946A14A600914CC67A450596DC254B52E0C6423C8EBCFE548AB0C924EEFF10EDD790A6679E90A198A09A11BC727A0E2457850FEA02C3491FD3409FF00CB9F63CB23CFE1DD33849AFF004EF30E0587DE83EF78513369F536562D6A171DC8E6D10EFD95C5C38A0F381A6103DC4B248F132829781FCC397918D66965E0F0870FBB3100CD62E480E789CDAB6E22F487D2F1084A494BA89762AB26AC4A4D18B1B0CF85DAB9625F49B77382CAD888526C00429D11FF00ED1A2A7B81A9EB3542DA88C5E1967FC75196905C6E929B170E539DB33D2D0D66265B28A54A528D5D4D47B80EEC0BF105DAA5846BD6DF6EFF0013B1C5DCC6F76C9561F8F2B85C78DC4B56F745B0090C168712D5C20F10CFDE396822C7E11F1963F6762A4A66E21659401FA8B1008096CC9D72D6EF11388C2198414335406E3776D0D99B3E117EEE67DA770EBCC753BACDB65BB85EDCB29F089BC29658B85841582C970F88B052019E73CF9FD00F85FF001230F3244846217BCA5000B9A1714BD620315B266B19A94B807EA09FE4C7986A3871F88DCAB3BE57876C8BA520BCFF00190B41FE9848CD3AF2298CF31CE73AF4361F684ADA4533A5325243E42841E26BD74CAB159C4A55266143021E87D5DBD323A3C4938BE00550549001E2198331A7589135609612100EF2599C97146615BF6CEB1B4997F3684B1CF2D5A87F3EA230E6F3B7C5B2BBA7C32E718DA3BD69087504B5685C407AE1491010CA164712B888100EA467A550BC5BE26C26C991314B9A93BA0E632E9A8BC4A61F644D99BA405104DF235BF12CD4EACD6E6E6DB6F5F7E5ED28B7F01DDFE16BD87D81794B6EE318BF62E30EBEB8609502BB47DA25B59D609C80226BC87E34F8E7B3F674C9C962A3501B758F98EED46A71964786310A620B39760F605F95A3125A7F0C1F673C69C462FBC5C2DEDBFDA0716A7AEF10DA466D71271F7D47895C4E3A9E25210A242330427872E9C2B1DF154ED19AAC6C898B421C90016A0241602D6F4A5CC741D8FB31586C3225A92193725EBE55E74FCE16F685FE0B9ECADBE0D9C7ED304D9AB6D95C69B6949B17B0AB4B3B2610B2212A5292D9500204C09E94B6CBF8B0654C08F9AB05446F1DEB9763636A1AF4CA9328F9685329296A1147B54BD28F947C9E7B6CFF000F9DE87B186DE5CE0B7B762EF615E717FCA719B65BAE043613C4A4DD5C1425B1EF282120089D6BB3F87BC6183DA625283998AAAC16297C99ECF9F6033899C16365A5410C2AD6CA8D90FBDED1A02EB88B0B979448BC55B94153AB1C725794A5594C48E233D72E47AE6CE99849884A952D2491A034EA4F5A18B4E16626687B0CDC50F56C88CCD416ADA2ECC27690D9DDAD65695A161247826502139807491306329EB90AD316100ABE52581B5393861CE1D89E25CCE160722E2D5BD74EF172DCEF01BB7B7712B0F12A040800807389CF4FF0476859A852890189CAB53517BFBBE50E918E949014402CF7FC57BB4611DAADA6B9C6826C9A2E361A2B5B4B54849CF8B32390233D2233E54F307B3E6CC50AD1FB1F5AFDDF9C56D1DAD21285380287477ADC5AF9DA3AA7FC1DFD86B6EFDB13DA576371EC730A69EDD76C2DE1BADA2BDB961C55B5F29482E590B470A4B2E16DF6929702A20E99D5CB67F87F1535490154A67F4B1E5996A5F80731CDB6B788B0F21330A81234003F02DA0ED4BC7E93FB01B1D65B21B278760382DA37656F63676F66D5B9406DB422D9B43321090350991020FAD752D8BB25785968DE7269BD5156F2E39FDA38C6DDC71C74F5A83115DD29A5C017D403C8DE2EE4E1A5B750B4A885092449E193398112739CFD7CAEE89E94CB32C83BA02402C09D58EB9FF4E6291330330CD0B05AEF52280B0E41FCF8C4A21B73800594F144652447EFE597D2A33152CCC5BA012D6BF12D5FDB651338649948017FC99A99313CAF7AD7BC7A968A673067EFF7ACC80659FA816B5AB61A429387CC4B0A177ADBCBF10AA41020F5FDA9C13BC49D75ED09CB414062DD3A9FBC55588520A20828820A20828820A20828820A2082B06C73A1A6B04357092A910620C73F874D29B09252AF9C4589ED773A7E381261647F11D7D63DE11911023CB39FF13E5F0A5D33E5CC05233A000F31521EA74E7570F084EDEAB351AEF4B5BEF0D9684A5D04244281E3312721967F4CBD73A85C76C413D66600924D4D3215AD037BAB08DA4122C0F3AB7E351AF1CA20EEAE59B017F7D7AF34D61E96C952D6A00200499CC809198EDE672A8A3B5E46C1428CD584A520D5C0667E79BFA8689297294A28009330FF001EBAF0229F6BC6816DDE37B53BE6DA4BCD8DD8CBA5586C660EF70E23888716DA71343A78D6961D6E5B7BC35052083A695E6AF88BF12E562F1D3A5A673B3815A160455F419F48B860F0DBA8131613F31817D1A819EA1F3F3E394763B63B03D89C359C23006529B27004DF82948B953B3EF28F04020B854A93CB3CEBCAFE2BDA29DA6B9A42C2829F37B917B8E033B7030FC214CE48278753F8148C8ED5A316484DBDB28ADA4E609226559A81390C8935CC8ECCF95882A6DE0083BC03839973D79035B4094A941C8097CB870A690FDBE7E93F7F1E9F3CBA06C4C6A70410924815AD038617FB76D633B8751E7F8852A4F138BFF2166685120B541AE9C1ABEE820DC3A8F3FC414D44D39953F03FB8370EA3CFF108B8E70923E9AF2EF59F9BC55DFF0070141CABEF8C3271D83E5FE34CFE347CDFFE6E35FDF383715C3BDFDF1685DA3C4DA4F6F8E7AD1F37FF009BBFEE0DC5708528F9BC55DFF706E1D479FE20A3E6F1577FDC1B8751E7F8828F9BC55EFAC1B8751E7F88294FF10CE0666EBD9BD34A59E33F2D46CC7BFE20AD0E1021C6E8074A7DC463E5A8E9E7F88A82E0465975EF9F5A6EBFA32A644501F7CA32259259C41E2F74FC7FCD22AC484D013C2B4E8CFDED18F96751EB0D1D77357D807383DF5FA0CE9A2A7059D586AF5E27DFE5D252C18A401714D5DFA8B70866E3A0F383CE35D3CCFE9F3AACED762853598DF3A12FFA6D2B19DC4B73E6F4E74AF0885C55FB8B1B471F48438FDC148C3CAA55E004901DE23FD9C40F2CA35E754A933D3227A565552A1BB57DD635DE177E0F58D0A415802C9BB1707EE465FD574CB7FBB977B6B311B0DE56C95D2F0FDBBD970ABFBD5DAB85A4DE21094B81B940F11CFE8B452412012632D0FA3BE1EF88132848054CC520DAC14053A1F79EDBA4EF02DBA5D801A86AF2BFDF4CA7ECA3ED9580EF81DC4365B1B4230BDACC0128B4C42D710E06431F854A9B2E942945690E2195384919EBA1AF7DF8476DE1BFEC72F10A9B2C112E84A9896B76AD3D9A86D2D8E573153132D4402EC915AB87000635ADE9D1E28DF57B746CDE07B46E6ED776CEB7B59B5C54AB774618A45EB36CEA9328F13C1571A0093AE723C85517C63F1651B2513512E781BBBC1D2AF3BF00F916BDA37C16C73F4AD482294045B982F4EAD666B0C3381EEA76FB7938B33B59BE4BC7EED9B858B8B4D9F4ADD5DB59A490A48FC2BE084710E052A3533E55E57F15FC6156D33364AA7A95BCE03ADF5E3DC5338B461309B80580160010389CB8D73E31B8786E0D6186616C5934A4D859DAB6136D676E435200192DB040CE01CB339EB9D712DA32D1B794B9AB65397AD49AFF006FD2A1844DA48410000F99E7906F74D6B0AA5CF1471F006C49012040001C8C752209EB3355AC561938196A909002402E05B33E67DDE25E52B725303900C59DBF157CBA45550D253B93D243B3827A0E99FE61B2D2E4B8A5DFDE6FEDA39EFF00C4A7D97704F692F672DA8C1C5AB08DA0C3B0DB8BDB1BB0848B91F850BBA7385C82B1286B87DD1A6B3CFBD7823692652A424A9882C43B5A9A9B74C83DA16C0CB22728B9214CDA0028D90ADCF334D7F3D2DA1B16B66715BAC19E654F39657F8A58DDF12415715A3EEB08E2D39B79157975AF56F87B1699F2905C10522CF980DE6743ADDE2EB83514802AC59C727AF95A95B8D71F5962096C9466985AE12A1060A89032D321979CCD58A724A8D29C6CF4D58F935844899617F5172DDBDE66FDA14C4F1305B3067DD33DFD674CBFDCE68230CEA0A22B5BE872A0ABD33E30D27912D0541419BF8E46BA017E59579C3EC5ECD637BC4DB7C1361F044ADEC5F6A313B2B2C25A6B894A2872E1A6AE8F0A7DEF75B70A8C010019D60D8F676155BE9A549C85068F6E428FC294A36D9C7A50140920006FCBEFA77148FD383F8597B1BE13EC77ECE9B05B0C8B060ED462F8622FB687130DA7F101C7D28BC612E3BC216327783DFE4234AE95B2E514A529003D1DF2FD373BD9C57906D6DA2899355F52884BD07F153BBB9CC69CDA3AE167C66DDBF10242C0293C208100C0D7392209E5D2AE5202826B66D69937DF93C5594ADF2540B82491571D21D4099813D79D388D60A20828820A20828820A20828820A20828820A20828820263A9F2D68820A208681242C922049F9CFCFEF9D656DF254FA1EEE47DE164FF0011D7D4C567E3E550924B4D014480E737E3DDBBC22BFA9DB36F2688176E1F55EBD6ADA92D9F7787C6301C912A2D811300E7940F2CEAC7326E1E561D3316A0FB8A26A0E54DE7ECFAE90E64A52900A92E4359F8B3DE8DD41D234AFDA1B6F71CC5F6AF07DD46C4DD326E6E14E8DA4BAE35163096F843ADA6F548CD83728E24B1C63DF30398AF1E7C61F180C11C4A24CE228AA24B53BBFF0064F3B3ECBC3A66A1334A46F1D722096637D3B9CE2736476551B35875AE1F62B0CB366994BAD9097EF1E7614F9BB23FE44870A8B71A24E7CABE7EF883C6B88C4ED25FFAAA037D55735726E5FCE9468B44A9094824951DE1549341C86BC7F4D7BDBDA9171F8D7084BCAC94D23FE088E1E2819F16A74D49CA9CECFDA7FE531592A7D59BAFDC5BB88544B480C09E04D48FB7944BF0210785B2A299C8AE264EBA72074ED560DD9653BC012E1CE84578D630941DD01443825C8170F4F7E50F112013AF413D35CBE039D454FC52A52BE82522CC29AE9A91ED8C6CA4A697D037BE66292F2418827AE83FC7C2A57058B2A940A8DF2068393D89CF3F383743DBCB9D9F9E547F2F3C71FF0053F114F3FCA1A9FF00EA1F98CB0D07610D5E738946011A73CF4E51F7AD63FC9FFC8F71F9BF970818683B0868A4A892441E809F43C88158189FFCBCC77B8F7DE061A0EC21E30785B4854939CC79D60E24E4AF31FB818683B08578C743F2FDE8FF00255FF2FF00EE1F8818683B0838C743F2FDE8FF00255FF2FF00EE1F8818683B0838C743F2FDEB2312A71F5663307C9AB06E8D076838C743F2FDEADB809C9387493BA685F9F11ECB528C6022C0123967941C63A1F97EF49E216835052189766AF36CEF7FEF0520906CC5E99F384D464935018A9EC0A4101AC469F7AFE348374053F0B69C63CA839B88DDB9AE8F977AFBA5E009038F3860FBC12E2926728CB91CBCFB7DE74CD38B4998C0DC970FC082E01F3B5DCE65D210E12EC4077198734CA9C61929C2A39653AF2F84534C7A3E64B531269C686BAE66F67E758DCCA4BBE438777A57852FE69BC8B552136F745D26F012DAD59A590DE64B44FE52ACE48D4F3E55CE31E172E7024167B8B38201E1957D18423F2C6FB8FF0069B0A9BFFB9BA37DE2DABA4E1D86B57CFADD0E61CCB4BFC5BBC414E94290A1FD654C70415083309ABEF8576A2E4197F591BAC6F6CEE39726B17221432986E9DD0A361CAA47366CC671C32DB0DD66DAEF1FDADF15B9DC762EC6CAECD38FA5ADAAC4F0E7DCB26EF90E5B1427F00F5B8E071C6E5C4BBC792579098AF42E07E2A1C0ECC18233C83BAC06F3573ADF2D39BD225A4E065AA4EF280B5185DEEE286ECC0F6CE3A59B89F642DDFEE52EF15DA0B172EB6A76BF1816EEDE62DB49E15E3EC3C904BAAB67C00E264A9404C9223A5722F1778AB13B5D530A6728EF12CCA26F77AB7A733708CCC2A0252120005DC9A10D5191CEF9F1AD36DF8906D92C3656B0911E33F9BE0F31C407E549C9234E181A571BC527186715EFAF77789724EAE6E5A909A30CA4555BAE1FE94BB372233B9191B3188F71588A53E0B2CD93CD2A789DB9054F0067349D01CE0796719558F666D91839604C249CCE766677B758D172AA9980A86E9A007E93615705EBC7F6DD09FC3FF4497164192B3EF66ACE275806009E5E54DF17B4938CC4BA4BA4F4FB56BDE967021D4B5A94002430CB53FAAF46BBC2C0CCE4479D26A414B4C71676177A9AB5A1DCB4B800B91C74C872A7E22036A70D6B1EC1311C34AD4D97309C52D9C4A8C21C17166F37A664E4A8F3D62AD1E1CDB22462A5277C065005CD4641B9F57ED0FA56F61953269495209484253553D89577E62968FCE1FDBFF76D71B9BF68BDE16CFB1641AB45627717569E2B640578CA76E1D288024CAA7202799EBEC8F877B4062E549ABB800BB31CDD9F9FE22C52567752A0E1C02791AE5A3E59BC73C6C31238978778AE161370B7810A3C21AF09453EF8D13C6734C6B945762992525767A03C2DAD4D5B83C4E4B989F92096E2EC4F1035AFDE9085E622CBEF1B62F21840506D574EAB8584B8A84B4852F40A757086C7F728800666A470780F98A480379449167A0FE9FD3855F6B6304B0ADD20000876008F4AFBD5BE9CBF8057F0C3DA1DE9EF2309F68EDE9604E5A6C86CC3EDDDECDB57D6EA43B71E282DADD425D470293C694AD2A428120826ADF80D9AC5F70D19E99D074AFE9E3906DFDA43EA4EF92B3BDBA1D817E14F76A47DEC5B60F6966194DA39C2CFE1D86322250DDAB4969A4B519084A52083CB402AE184C304904023785CD05079380DDACC1F97E371049672497A641C9AD34FC708BAAD0CDBA0CF16A27AC18CFBF5A9C9619091A08D64282A586CBEE4C39ADAAE2CD9EBC1A1682B30414410510414410510414410510414410510414410510414410D1C5F0AC891AF3EFEA3FDCD65C2D1B82E72A645EB58DB786EEEE7FB78A3C5EE9F8FF9A8AC6CAF912CCDCC027B5ECD93FB35D635DB7FFBD7C3775BB3AAC75E702B1828718C1EC10525DBD7AE3FA1C48689973C25AD2A907DD1279E7C4FC69E3D3B2B0F365998A4965004A99E95B1BD7B7689AC1E1C4C60A70090F43AFA5188AE547B6ADEE7766718B5B0C5B793B5FC573B47B6AE21EC6D2E7129766D30E2861C1A0B1C6D9532A471956B1EE98AF0CFC42F162B6D4D9E04C2A0EA04825EAEDCB2C9BBC5E70125084A120252080523DF0BD5DEACD48D85B17416112A99923FFA926075C84039FCABCCB8DC2CC38B54C20D54E1F2AE629476353689854A19003570C7D2255B74189D0F2E533944FF008CEAC3B331064EE87634B919599A9D4D78D2032D346038D05BDF778ACDC42A24F91D7E67F71156D97B437D206F0B35EB600D34D73A5E0328640371BF90872DDCEB9EB1CF3FA8D7B99CBE0DA7054E2FBD7B1CEEFA311EF211A992ED60DA7F5142DEE2513273E93E5D7B67E7CE9FE154508DD2E1ACC7524BE46BFDB9AC6532D21C100B379BF28A7C5EEAF8FF009A75F378ABBFEE37F968FF00888A819CFAD1F378ABBFEE0F968FF88828F9BC55DFF707CB47FC447857C2624FA7FBA3E6F1577FDC1F2D1FF111E78BDD5F1FF347CDE2AEFF00B83E5A3FE220F17BABE3FE68F9BC55DFF707CB47FC441E2F757C7FCD1F378ABBFEE0F968FF00888F3C5EB3DF3FB9E7525276B7C997B80B76EAF6AE59346BF283D83720FE8D1EF8BDD5F1FF0035A4DDADBC18967766F7C6B7318F95C13DBF5078BDD5F7EB51B3717F308DD51CE8E1ABA0FB40658C92FA9200E4D9FB7178F3C533CFCE73FBF5A66B24A492493C4EA7EF1B09696A80FEFA53AC47BE789C51CFD7EFD2A00E20A71052E5277B2350DEEC05B5685E52185817EA5EAF97B109559D28F9D87A312D5269AF6A690AEE876DD0FA35619E2171EEDBD838827F16974B57490786CD2D82A70B8BD1B0A00E63588D73AA76D4C12B7882D7A70E5616393F1840A1017F31949DDBB00CA761AD5B96B1A75BD1DBABCDB0BC7773BBBA7DC7B115BC96B1FC6DB59534DB2A5074A7F10D9E20435C6885039E54B6CB92B97BA0687AB545B8BFBAC6FBA972B20BE5BD91AD9ED761FB78CD3BADDCE6C6EEBF0A69BC30B5797EA6C38FDF39E1B8F3B70E8E3789740055C2E1508E5E750FB57138B958F212A59008A034ED5039106B68728C5A952C2024A124B7D4E0E840AB7BA59865AB14F0979F5C80B981CB2072CF969E8672D2A6366CC1380F9C5DEEEDC0D457EFAF11BCD595EE84814A123B822BA8B9F2314820C919093F5A90C64AC39964A521C0B518BF072EDD2372779B80CEE48BB0FEB8E4C551F68485851129C81A3FDBAB7611A2A56F26A2952458B67D73F4A9A380C345A0E1002889E84C1E672FAFED4C367A9631010B777CF2B75A8E5AF2604AA5CDDD043037CD8543F1A1FDC435DDC30C922520C99394F6FBC855D6724270BBDA26ED4B015F6EE468F13D8594A98000EC4DF4FC9E432A45818FE36AB76EE5F6B34B4A6D2A03FB83A4214394829267B738154995B53E56D0090B23EB19DC38AFEBA0D0582448489441009ABEF0700E4D42DA6BE71F187FFA81B65B08C037E5B0D8F61CC36C0DA56F1255D38848485A99B46C09226482A233F809AF777C12C48C56137DCA8A44B097399A171CB5E22968D1531686046E9259920330B061CF2CA8098F9AFC6F16C3F01B753EA32CB6A507594C12A2EA88494A4E47878B889E5F2AF50A2415CE09A0700D4DFE9E5635A67D5A155E384B90EF522C1A94CC6A3871615AF4A7F8567F0FFDA8F6FADF5607B3C6CAE99DDB60988DADEED1634A6D69B7BB4A568BBB66937052A65C0975A2D2C2B39C84E756CD95842A29DDA1166B9BD68294F6F1CFF6E6D51BB30EF1000CCD0BB017273A796B1FA6EEE1B72783EE3776F816EE764F0DB2B0C2706B0B5B44AED594B4B70B0D3695AD65109254A44CF73ACD5E7098408028038161439FE4E669D0F25DA78AF9CB2B2A721D8136F6E3F119BDBBA6D572D59356EB86C1F15D08FE9A4C1391CF5333D0CFACAFC94A4DB26A5037403D88ADA91BE52A193820F1EFEDA272C8116E906322AD34D67D35D0D6C030034871292120A4351AD9DFDD6BAC3BACC2B051041441051041441051041441051041441092DC28272C873E9973CC51190926D5EB088BA9310358E79F97F98AD54ADDC8C2BF256CFF004F272FE622B55C25313AF6CC72FDFAF23956A99814486208B8BB7BE0EF0CA7CE124805DDF2EBA8E51EF8E989391E5D23E3FA8A5189200773661EC778DE42FE6B310E6DC39E5A373D18C44BD769F1C85B6B6D103FACA10D679895729981DE7589A692A72A5E2F70B14DB4B86D4FECF3A3954B09CC96B817E94108BF74DDBDB3B74A5071A6D0A7096C923810095A87284804AB3119926293F104E4CBD9F3959EE1672327CADC6FCA1597237949033A17CB9D9A85B4B738E66EF0312B5F684DF658E1F863C87704DDABEE1714EA81B2C4977AD85280E194BAA61C411C8A142BE76FC62DB13C4FC42113084EF29802697B6597A728B66CFD9EA202897766EE351CA9AC6CB216C5B617716EA6E5B52186B86253FD101032D2047BBA488E535E503B4953274C1314E5C80F9B12736CAEF61C62F385D9AADF9403020135BB90FA66F5F2E3E32E301094B4AE28049464548E70A1CBB4F2A8FC62A52D5BE12695B720D7BB77AB878DF120C89850BAA8163BBAB73CE9D4C4BD9A177297148040409F7A73D724F726047523D22D78B4CBA80435DAFECBD7D61B7CF4DC8507B53F2DC871E8ED4871C9250E36648287010A1048981391891FAE54AE1B6AA779AC468CF7E9D69C236131EA283DBF6AB5BB42C8511014A1EF0CF3CC40CC1CFE3C888AB361B1E998016A0E1AF31F717BD046DBE38FBCA02F804C127A9075FDFEFBC2F33692504B120E675D33FBB508D21C4B96575AFEFCFCBFBF3F11D95F1AD7FEE5FF00946FF238F9FEA1637ADB2C29D5C908CCA47E6CC9D073F39AD86D548A10934B92470EF1A192BDE0901DEC6ADD69FB8A9ABF6DEB537694381BCFDD508518E83E1FAC56DFF764FF00C5376B9F7CB58D7E590B0870E7476F4849171E3B62E129712DA89038801106338319F5A708C57CC1BC081D5BEFEF58D5437494921C33F0F7EF48F5B790EAC368701513192B2FAD6FF38FFC8773F98D49090E6D0E5C696DACA0AC122261479FCEB266A8162A1DCFE6308585A428380758F034E75CBFFB4FC2B1F38FFC8773F98D89604E91E96D43FBC7C48D7CA4FCA9BAD13261041735B1F5367A7BA460170E338F3C357FDFE07F723E9594CB980015F38CC78A42BFEC08F3FD33FA52884AF371A3BD3AFE3F3047810A9C881DE48FD294620124B8639935CBCE084D6CA8AA6419EF303F7EDF6602660662B1466B9625D2EE4039BEBA52B6BC2889BB818B56CF7F56F3D2F08A93C399223D7EFB0EB564918B461A5042EAC2EC3F67D3362F0B09C86722BD1FDF0AB6710B7D6B7AF337EC34E20377CD29AF1164F8B6E1485364B247E59073EB94F3A88C66364CC0A1BA93BCC5C8167A65D385EB684D6A96A5A16EA1BAEE9C94FA8A8A1BF522AD18CB77DBA7C0F60938B5D3015718B62AE788F622EF0AAEA38D4A203A3DE02145226721F0672368C9C3972C0E428001CB5F3E548D8A92A2086DDCD3404DC8D7AD3B168C9565656968CB6DCBAE25256A2550A24A8F119E5A939F6D2A1F1DB4708B9EA56EB92694A3F91D47E21352492E0539D7ABB76E668F14DFB8EAD4916BFD36D260A55209197E58CA72E7A914D65ED24053CB05366E87AB0C8DD898565CB5937625AEE3FBB5790A98A537896C04290E123290099394E67BD3A1B494AB971A1A5F32286D0FD1254F5151D5C6B407ED96B0A8BB6C988503DF2FBFDB3A5D18CC29ACC48720DC03916ADAF6D0E7A29F256C4D2D4D7B1F7EB0CAEF186DA429B1C5291C898CE35FF03E154AC66D49387DA7BC94B277B40C187B03288B9B839A6782092E680660D0FEF219877318EB17C5D6A51E02A19926662750797293FA54D4CF14E1A6618C929014450903833D726ED16AD9B86504A41760039CA8DC75CF964D1108E0C4ECAE0282B85BE05BEA50F7441E240933055103AAA0D57F01B326ED4DA09992CD0A9269A13C34EB4E6626CEE4B60A20153900B396E17A718F91BFFD484965388EE56F30F69C4DFDC1C7D29B72902E5496BC24A961033E10905733F973AFA0BF03B616270D22482BFA1613BCE7316C9FC9C6B1158A989492A72082F5BB68F6E6EDE91F3C7ECDDECBDB7DED69BD9C27775B05862F1ABBBBBEB165F79B69DB8B1B265C71B3726F94DA54507C2F10A0C47109D04D7B1F0BE1DC44D289A934212C43E8D96AC18778E7FB5BC4F270D315209D453859EC7EFCF2FD38FF00868FF0F9D8BF61EDC9ECD6C761163871DA4561ECBF8F6256ED37F8979F7909B8E15BA948510DA96B400A04A408EA6ADDB3F64CCC3EEEF176E39E7EE833CD850F69EDC978A0A42412FC3E927537272EB6A474F2D597C2C2CAA19CC04926739991E64558A58DD46E9150C05F2BF7FDF3AACE5198A26956FB7A0F4859D65F449B54B0952BF3150890489CC769FF0035B924E64F38412863514D29EFDD61DA13C0909D32CE349E7F3AC428000ED9C5744660A20828820A20828820A20828820A2082880D013A434715C4A52635D0733E63CBD27E49AC29DDCB7334F661295881F3B70B57A31032CDA95AF11C23D44A567581CB2D3E87CFCC4D2A847CCA6A1FC9FF00A76CE25D202D0CD5D6B9E99F4F285B252028721A4FD7EFCE68124A54EE1B4ABB6869E4FD62176949DD0140125EA720DAF13E7CCC789546474F8C44E9EB4B8486DE1BBD2F76F7C222F0D8A549582350F4A1F6E69AE90C71071E470A1D6C2ECDD3C2B28054B4E907A0F78FE99738A9C532E6198A6A55DECFCC9E6FF889F94BF9A37C66327ADEE3323DE51803DA237888DD8EEEB1272C9F6158ADF866CB04B15287E2AE1378E8B6BA286C4159690EC98D009CF3AE67E39F13CAC2E0E623E601BA82010781672FD68FCE24F0682A5070E5CEF3B90F6193D34CDAAD47C05B97DD6A760701FE6AA529DC471A3F8DB975C1C4E9372A2FF0A9591211E2409D220738F9C5F1476FA7178B9E12B25D4A72F7E5FACED9C5E36728CBDC2588D054BEB6FBBB068CD178DA3F97A51038D4412233FCD267ECE42473AE19860A9D341BD4B9A72E943C2B4CEB65C3633E5CDF9854E08615043D079794610DB6DF7EECB7758DE17B35B518BB785E278EAD4CB4E3AFB4CA029212139AC82278801AF4ED5633B344D96E949721CBB11E57E2E0EA75852626662262E6B2776E2953472E006E4E32A9D7256098D26CEF5AB36EE957B87620DA5DB3C410AF11A295B7E283E2881FDE008CA4D57B19B254146840BB8CF5CBD34AB648FC9332525425EE924FD2A152D43973B753175AEED0D82DB8E871D924A8281267302626239F41AE7510306A9531B74E795B9716A126CFC2BBCBC39502774803FDA6F4A50573D5F36A3C453CFAD6496C92274FD7B0CCFC226A670CAF96C19890720E0F6AF5E91B1C329C1602AE685ABC4D78BB13DE1CDBF1169257F98C935B4D2E413435FB43C929DD491CBEF0B5250B430712B2B7828C2145303EB94E7FECF6A208B6B6CF6C98D97C2D965281C4E880207500FEBF648ACBFD2DC5FDD29DF5D6114CA4998A9AA776FA41CB870E3F710AE17B533B396B88DDF0B4C5C8570717BA4C2883ACC796B3152F879BBA801A96EDEF586B3128528907EAB299A94A3FBCE25F0DBFB57D837364E05BABFCA2665427403F4A5FE71CC6990FD5FF00A68D4A524314823944ADADE5CADB0ABB1C2F999049100481127204474F5ACFCF3CF9FF007A7B178025200601B26B4493572404F1106796647CF39CFBF9C1AC89E331F6FB98C14036A1F2F7CA152F24924C4798FDFF005FF0E25CE4B5090323637E7194A400C403D3CA0F151D7E63F7A53E70FF0091EE3F31961A0EC20F151D7E63F7A3E70FF91EE3F3030D0761078A8EBF31FBD1F3926E49EA3F3030D07611429C041CC47CCFDFD9E75AAA62425DC87B1A558D58BF4841490EC6AC5F9FB7868E3A0CC68222749E7CFE1F731F889A14336ADEF6BE64B74EF0572BE5EC4365391C51FE32F5981CAA1672C31006B5A3716AD1F9B51AA21D224A99D4286E2F6B647DF286AE3C24E6679C0E5DBFCC1A8A98B735CAF7A353FBCAB0BCBC33D774F014739F3EEF9D042887DB0D80BE119F389CB2CE7E597EB4DD5212B75352EF7EB5BF1BF3192E641DE2C0B51D837273AE75FDC20E5CB1DA4E5060E5E597D99E54894A6596ED41E4DCE164619776A0AEF55FBB53DE70CDEBCB4420F1293C6359E1E7E6723DFF006A497884A33D5EB422C3D7A7AAF2E4CEDE66514D2A5C9A37936472AB6B6ADF630D209085091D3AF7CFBFCE9AAB1E0160CCF7AF2E3A694A3F19346154523E9BEB9B574BB7DDA2D6B8C67C452A55AE5DC7ACF61F66699CDC3CAC42CCD252E58BE619BB0FCEB69393B14CD4A66D068E0B93A00DC7A677788A7961F920C939907AAA32D675EDFB5446325FCA0C94801C55ACD666D6B5A6594487F8270C91705AA32FEA8E1C0AC050DD859397574F1651C2A36ECA54128BA201E22F24FE74B27DE911C31564F0862A6A3192C0DE62A02F4B8AF0A8B9D3AC41E3B152D0E4941520177FE497161A7106F78F928FE2DBB15B6DED89ED59BAADC4EE6AD2E76BB6DF0EBFC42DF197EC50E5F611815A5EA195B8A754C4B96EA5DA1599508E341E409AFA47F05C4E9D8594B52F744B0874070B99BC5BE815762CEFABF3A16D3DB484298AEEFF0053D05C39D1F27ED1F4C9FC2EFF008576E6BD89376782DD5861D698B6F62F2C5BB8C7B17BF69879D178E23C52869FE04BFF00D22E2DB857E588AF6E6C4DEFF111BEEFBBE807E7988E4BB6A789F8A5AC6B95ABEE83ED1D6FB662FEE9A530CBE2DEFEDD69FC482A29494F14A4240CE38040E511153310F17E3265A46609090091A1500028FA99A208528820A20828820A20828820A20828820A20828820A208288C1B1E4622C8517CE7209233E5D87C7EE056AA0E1A970EEFE5E5FDC4392BFF002D3A035367FB716BD5A1B5CA0859D60E606B3A0EBCB5D29EE1C2001FC5AAEF91033EFE9778B5C82F2D23302BD5CF7FEE1BDBDFA4DD2AC432F95A48E27787FA425322546234CCF5A6F3F109966AD9E57EAE1EDC84218C47CC96C0820E952E2DEF4E514DF620D589425495BAA5988687114E99ABA6BEB50988DB52643FD429FF001B80E72A07A57CD9A2125ECB9AB5021248268CEC2BCB437C8D0461ADE5EF9F03DDF2B8AE14BC556EA08770CB321EBC656530D7F48C14FBC413968272AA76DDF1548C3C8528CD48DE0AA0354B0A3D476761A45F3647867118A904A5135250DF510C95BDD8B55AC7DBE9F5AE0D8FEF976F6CF6D76C0BCC6CA60AB75DC0B07B8E24BA4BC8857E29872504A5CE152383311E83C75F123C72667CF9689C4825565790639D29DC45B65F870C94B6E80B2C58DE99915D7DE7B316172E26DDAB77D216DB01484A19023C31EEB6003CC2409EB90EF5E36DBD8CC4ED0C4CC53A8A4A8B3127339BDADC8BC492B64894031008CF98E356CB84463F77C57DC2E7134C9FC81DCA32F28F879F9A7B32419652542CC4D3AF535E43843799869B292087292E01E5A535CE9E51A4FED97ECB167BF1D8EB8C4301BA4DB6DEE1A855D6CE3ED2C2429D6541E752B5A4170921B4A404F3D6AFD864A1526803B51AE5FD2CD4D5B5899C24C0996D34EEB00EA55AA4B579D3AB523597D8B7DA8719B1B8B8F673DF42DBC33799B38EAAD6CEEF142A65ABC6C296E23F0EB7CF8AE2BF0E84010224E90669962B0B2D414126A75671A8F47BF1B43B5253499BCA56E7FB52685C67A8FC36B1BD7B41BDAB6D9FDA3C3B08C430EC542B14586D8B84B405B8881C4A5A8FE43C52939E5C849AAD62708122D517A7DBF1C758587CB6E62805DFF7CEA7331B1764D86D16CB788507DA43A8291301480B00FF00E50623AFCE2E62371553714DD2DC3CF843654D1310A084EE94962141B36714E1ED843E514A8952125291020E47A4C773A4524E4DDFAC0874B254C546A48B70D3F5CDE282A09899CE88521BBA871C2929809044CEA403FEFF00CD10459FB5FB228DA572C8FB810C281742F22A00A4FBA331263AD64D4B8EC32F79F18C25C0637D6FD7F4F16AEDC6CE62D88B186E0D8238CDB61F62521C0B5142D4094295C213910485418F3EB4E5134331240C9EDC73F6FA4202490EA212497B73B07CF5CEDC22F7C36CADF0EC36CD8B54B9F8A6529F156BFCAA3A9208CC89F803E55933D0003BCC4F4A060DC283AD235095BA814009664B03BC5EEED4D3DDAE125DBA5078C20A8004742911DE0F90D6B6F9C923F9163C47E632997BA18249BD48735E90B250E2755031A664FE9F7D7A644C49B1B71FC1F28CEE81FED6E8D0BA5C310449E79E9F5A5A54E00665F2714BB3706FD46DF2F827B7EA2AF13B7CFF00C52BF3C7FC4F7107CAE09EDFA83C4EDF3FF147CF1FF13DC41F2B827B7EA0F13B7CFF00C560CF190238D0C06550D13D2FE91515C266333C8EA343F7D41EF48AE79A249715619F1CF8BC3298965301CB534CF96AD488F75E0924198E5CA74D7E51E7CB5A653A7F501E86AFF7CEBA7185E4497FA8D746B821F877B886EA7651C5233981A4C1E7FA7975A899F39F9370AD0D33BFEF94A22582580D2B4E4C32CBCF4884BAC4D0D4950CA4C81D0643EF4D2A29588625DD8E4EDDDE9D00FDCA4AC1A942960010FE6FEBF9702206E31795A9495108E40C65027AFC32E7999D1EC99C9F95957BB8D3BDEFC1EF232B03BA03A4139DAE68CD4F588A7B1A09513C66675D63CBA4C72F2A61899A9A8D3A3D457B8ED0E65E042812D7E078FF005C8365160E2FB50F357CEA52B70A7DD1C20E60C673A7D2A071588704037666E1986249A9B0A521DCAC03390976BE560180ED7A8F588E671D174616A5372732E401EB398D2674FAD41CCC4A92E1F5A82DC3334AD8B748768C1512424BB8A351890D95799B3EB1E3F752E05347C74082E2992541A1C8ACF29F9812749A4A4ED598957CA724921D892D56A8A5F4CF2CA2C986972FE4849025A92974B800A8E6D77A74899B5B96C302E3882D8FEFB8041691060F88BD131D73CC559B09B3713B4C2404ACB8191B16E1EF566783DA98997265A9C804B8634373AB30F3F58D66DF56F5B69F69AEBFF66F73986AB1DDB3C4D4DDA5C62A965773678234F14F8AB2F307C4B7529852F84C66B4E7005764F027803153F1524FC951FA93FED26AF7B5BD968E3BB7F6AA10A98C4077FA8667D8143CB81DAAF63BF61FD85F67AB8BADACC630EB4DA2DEE6D1A1ABBC5F6BEF5A6EE6FECDDE12E169ABE290FA121B714C90A27DC0139E95F4D7E117810E0B092553A5B6EA5156FE2585B3CDB83306B4723DA9B495316A0EA00B80067CEA4657FD3746EDEC997DA4BF66861A751925C6212952A6145440CF31A7527A8AF470C327084C90929DC09A10D421C79373A1BC41151554925F587F6987F86E1BA7F87F14E7FCA5BC90A8109CF5303AFD2B68C449252103852207EF441155104144105104144105104144105104144105104144105101A823586FE1A788A89023B89F4039F9F3CE26886A24BAF7DABC5C79FDBF709388490547967E5CA474F9D2AE5292C0B80E73AB07D7D1A1EAB109901945A81C74ADAF6B4312EB09539E18487140F12801940804911A012263A8D045336E6D0F912D41D5BC012F663A70F31F7470F8A4CF98108FAAB6ED6E27D5852F1A87BFBF687D96DD558DC5A1BE6AE31A752A0D329710A712B33038642A012274F21AD714DBBE2A4E1CAC0987783B906CD7B33776AD23B4782BC173F6DAE4CD5CB2892E08431DE50E34ED9F131CB8C537B98C6D5638ADA27DD7957F78F151B774A8B484A15C2DC209E2128E139F5F879E3C63F10D7284F4FCF25E8DBDAB59EADABD69DFD2DB23E1EA30F2512C48012025BE8E21EE199DCF5BC5E789EF677876564CAAD2E5869B4A470B4DADD060680A4440813DF58AF2B7893C5B371F88581394CA51600D2B980FC5F56CE2CD27E1FE1A63138696A531BA4123967C7F30D6C3DA0F78B83B8CDF5F8F12D9C2014FF54C0490939129039AA7D7CD0D95819B8B48592A20D781E39FA7770F11B4FC07874214061900814012033E46C6BC34E11B87BB5DE7D9EDB58B5737A017E0150000209D75248E9DE222A57158718445824839DDF80D0802E2C738E59B6FC32BC30509481BA92E428304F26F5EB19B6D5D6195171284A9E792461C56250D650E8569C2160C403999ED4DB0BB5BE58352F61A5D8FE78D6958A062E5AA5CC4C956EEE827E62452D66A70E995A39E9ED2DEC6786EF431B5EF67636E0605BD2D9B52AFDCB8B250B66EFCA3DF4B7C6DA4BCE1F09B2889993C22662A465E2C4E0E2F9BBDCB585EBD7A460630A1411BA4A55449193382E7CB2D1B28BB372B7B8D6FA766F08C3B6C30C361B5FB2AB5DB5EA9D694D38A2C381A69C95CACF88DB3C5240041D291C420292A25CA8E99F40D419E798A88DFFCA4A52A2A2129E3463E8C7CBCE375DB43D6D8759B0E125DB5E16C99954248488D0E806A3E555AC5A4A4D18D7B9FE9EC7864C013D2EB3425405072F6DDCC4DB8506548238541111CC8038BE73F4A6B785641242492E6AFE6DE4D0D5CE5EBFA510E6112BE12467E9FEE8820F17BABE3FE683404E9041E0B4E1E356AACC8273F89EDFEF2A6CA5D6B53C3280AC8A04BB66DF7FD73AC38430D11904E7D333EB98FDAB099A967292E75CBBEBD21352C87A5B2B9F510938436A281200E9A67EBF1D73A4D53D8900103A8AF7F7CA14402B485503E45FF0071478BDD5F1FF358FF0020F1F3FF00F68DF70EA3CFF114071434FF003F28A7D2A712090790059BCCDFF0636DC1C7A7EDE3DF157D7E67F7A5BE69E3FF00D47F106E0D4F97E2144A8900C9F89AD0CE2FFC88E153DEF5F6D09A831223D93D4FC4D63E71FF0099F7D23115AD7C29224C88033F2E7DC7D2939B30DDDCD4D2BE432AE7C2B0C268DD981C8CEBD0444DC3D3232D79F4CBBE71D728F5A8E9F3CB5ECFAD4D9AAFDFA448E1D02990BB0E23CBF77888BABE0DA549900A41E7D758FA1FD8D45CE9E374B1249B575EE05ABC3289D9186DF214C58E57F7C8F908B1B11C4614A3C4009D391EE467A7F9F3889F3D89255C6940E791F79E462C984C216140DEEC7AF01C323665EE28E1716105412065073E7F2EB90EF49A71C65B0259DEFF006ADF477AC4BCBC206629760323EADDEA784405C62AF1260939F39FAF2E5F62939B8B13050826AE4F32F47A9BF43A98712F0AD641AD2DCB830F53EAD416543F1AF9E22B994920E9968ACCFF00AA8C98B7CEBC3EF5F57FC48A3083737774D83B8E7C2B57EB11CFE396A494B162E2D5D4340CE9A46BDBE798A68B93F309DDCF8350B0AB707D2164E082412EEE1BF0282A5871ADA18AB6A1385B4F5DA9567676F6A92BC47F19EE36DB7F9878F9C02A483E1CF3F3AB17873C2188DA78B96B420A92A21C106B66C98B65D6D68ABED6DA88C1A8CB538525D88B82D96601EF7A59F1AD86D2ED36FF00F1C5EC86E4038C5885F818EE3376169C11B4190A558DCB1202800E0055978804F3AF6AFC39F83537188905521CFD25F7356FFC7F0E5C8B98E5BB7FC48196EB7002B30E05988D5F2BB9063A21ECEFECBBB2BB93B3B8BBB5BC563DB6989250E5F6338B2D171705E00952597C2439C08952120E890065CBD75E15F84F2B650953178748524057F0FA49A1BD78FE35E3DB4F6BAF12A539210B25812EA0C6AE1DAB4ADBBC6D43185DC22D941453F8F70FF59CCE0A672E13993EE9220CC6990AF47F87A461F66E1D329490964D52D57028CCD9D49BBF68ACCC2A98492470CF9D7B0A51B2B35C7616EDDB5BA5B6C242049F774E227DE3EA7CBCAA466CE33E62E612E49D5D8643B40CD4666CA1E52704144105104144105104144105104144105104144105104144105104365082260013AF327A4E9D7BD6C775282A3C7A37BB5CF2B64A9094B921CBE76BB53F37D612582E2480600D3BE475FF005D73CAB28589A93BA6B9FBD3A5B37AC46E210BC492104824B66396BC6E7A4620DE56D55BEC16CC6D1ED0E23728658B7B7E161457C30E3885211993AF194819F481CEB8D7C45DA276561F13356580048F79FBB6564F0AF86E762B684A96141467281005427759DEECF46D7331C0FDBDFE6BB61B4571B5FB557173756B7F7370AC2D84A94B2D25B5A9214EA579252612531CB9578D36DF8D24637113A52544289500C4644834D19CF7BD63E807C2FF000A0C2C99026049A26A43DB9FBAD2916E365D0865C60B28790A21453207003088CCE7C3A939033D6BCD5E35DA3889D8D9B2D2B5339CF50F4CBEF933347A464EC69094A54100D01A0A71D1B3BDEB6CA6977F72EA5B2E5D3CA527229E33C1972CE72EFA6623957309784C41C4FCC9AB5105540496E2D417ADAACF5858E124C807FD2481FF002090E72BDBA0E377876FE266F2DD36AFC847090824C09F5EA73E73E55D4F61ED5C3E124A11312E406A3353AF6D38C5776861244D0B4A659753B9201EA7B5B367B88B9375BB7F77B31B516D8638EA4DB3CEA42425478632C8E91AE703CF3AC6D8C7A31AE24DCD0352967A1CFF0021A39BED8F089C5A26EE86742D42F5604D4FBF38EAD6CD6256F8B612D38F2212B6905975B03C46E5238B80F2E23AE432F855657839F25615BC4A545DAB48F29788B64AF0F8F9B292485A56A0A3504B1239D8370CE1CA2D14029B0E14A493FD50AFEBBA0FF6BC7FB872CB9181DA4B0F315258A9CE9A1AD73AB68E00F5833805FF00C88B905CD38D39661F942186E0F8260388DF63187D9376D8BE221B176586D286145B4F0A5498E124A84C93FDC4EBA177331E9615655883F6B97CCF1E9097FDB6729D2B585CA268332D5A86A5453BD22E86FC37ED1C2E03E33924F9C9397393CF9795454E5A66390E730C055DBAF5AD2038652549485303425ECDE5F8EB0D2DF883294AC10A05591CB9C0FA5317093BA1F2F3D3D817EAF50A12992A356229C33F2851492A888CA75F4AD9EAD5B3DBDB7585C2D2598DEDE9EB1157AE8B595AC920E813AC69D81CE39F6ED5B8965445C33E5771A671B0FA8B023BC376AE43A92A85B60735989F2CF3A57E41FF0090EC6141294A2C18F27FC4542EB3949246706411DCF3D72F2F5351B3F0E42CB114A3D72B7285912D2C413517D28FC0BF67B52D0ED17262012083A8FF007FBFD2992C949FA95FC72BBEB7E9E6F48D7E52544B3685E80B727B7317E31529B71490EC9E15732639C72D73F865DAB51302C920D7969A6B1A24A524CB7FA93957CB87BBC22E079082B0DB8E0027DC93D7F6F8674E65C852C12C726B7BFDD396E152DC852C06C9C0F7EF486A9B97145005BDC02B244149F7639ABA4EA3B53D97845EE0217D01B57F27F30A6F4B01DD2D5B90E5B9C3E7D06DD29538EA53C5CB8B31E734AFF84B607E65F2DEAF60FF00DB884D1350B24043366580E858BC2A56866DD0F29C4292AD384C91A6BF326B6FF0D4120EFA4DA999E37AF956ED0893F3262920335C9603A5AD6FC4541C6CB45E0B1C004EB9C67397C3E347F88B037B7837AEA066F76A4608216106E73CBBFBC8670D7F148B84788D9201919E625391883DB979646A3A782951483F57FB790BE9F6CC69094C904AC28D4532714A023AF9F5311CF0528CE507F4E5F7DBBD35549529998EA2FD6DC214978A97295F5659528ED5ED668B471552D0B7110490066273CB965E79F39075A8DC4615402B8580C9F2361D3F713985DAB2414A4025DADC756BFDC5DE8F60E245D528E444C9CE7E072E5AE7D3BC557B1095209DEA905B85E9663F8E0C22DB83C7CB580024DAE037126B5886280532A492ACF9778D39C7D00E5511377F78BD1AB47160EDC395AB13D2E727E5EF121FB3E43DD07578897DB46797CA39FF009E9AC79080C46DB1859C6493551604D47014AF58712714852824062726CBAEB51C4D189AC5B58ADD7816EFF085FF004009047BAA2AD3863948D39FAD58306BFF0026426730DDA9F36AE44D844E26592905354B5FDF9E9A4686EFE7DAAD5B9D71D63FF8D75888504DBE18CCB97F72A5100218641054ACC683CB3AE8BE0FF05E23C558B9385C390153160382C5C9039350B3B5A22B1FB6246CF4933121F74D28E5875FBD8F28BA7D987747BE4F6D8BF5ED96D7AF1ED80D85696CBBFCB1B2FE19758AB00E69BE65614DBED909F7338E05F306BDF3F0E3FE9D71B82C3E1E7E25285164A8920F3A022FAC79CBC5FE2F96BC6CCDD2456C0DC654A135D4BE71DDFDD46E8B77FBABD9DB7C236570DB2C20B084B770EDBB4D30F5DB89305CB852238D4544924E664F2AF6A7833C2383D858542264997F312901CA5390B03AD0371F3E5B8EDACBC4AAFF0042AB515001A5327E757B5632F33832DE74B8B5B6CB2D41B55DB1871523DF2E9D0C91A7C66AFB35723700932C390CB7008045B77C9F3ED58198B54C2EED983E808F76B44D38C5C298E149487B21C44E4403064E6648D6ABB8AC3E296A2652F72AF4240E541D188FCC6C929DD0142B9B01EB43F8878D24A1B4A5512358D279C4F539D4860E5CD44B1F34BAB5CCFB6F7531AA8824910A53C8C41441051041441051041441051041441051041441051041441051043777FBBD3F4A471333E5C93DEDD35B5B27BC20B964AB3ABB31A665AD7F7942493A8FFB65F234D3098848739004FAFE5F2D05EB99402660268F70C2946E9EAF4CE39FBED86FDFED726C375387BCB61FDA0B865DE3428A54A6EC5E6EE5D120660A010759935E74F8DBB4C7F8589054582486735E5D3CAA6F1D5FC133E5C89C99BBA3E63D145A84598B86278F9135D0ADFF006CCDF6CA33688C3ED54BC3F0FB661B5AD282471969B4B8A94C0CD609E526329CABE7AE236A23FEE93025542A56772E736D7879C7B1FC11E235270F23E61DD550148A067D29DC51DDE359AD31242EDD2A194F16B99993224E5967D3A41D4D3F6E2C4EC6296E0839641C3E76A35BFBF4F6C1C54AC761659DE0E52F767CB98EB9E90A9C5B8753F319F3E833E59546CB90952B402F6FC5A2C5FF006E4CD1FC778351DCDDB43F704520FE65F8B2D34DAB83C3E2E220C1CC488CF3D7FD53B4CA4A40001BD855EB4E3CFADE18E2763225A553141212C487A373BF067B1E622DEC39DC4EE36F70C66C1B71C487D216B40240D33919CEB9F78D32A732E554580A13AD3A5FAF58E7DB57132B0626B94064AEECF50410EF9F9DC651DB5DD95BBADECA61887C12EF809E30666613F219FF00AA7330BA500D4805EDC32E0DEB1E2CF19CF44CDB98B54A6092B70D620E7A3E5AD5AF1929B679F08E51F31D33F9D20A4B80D4BB69C62A0A98CEE49D74FC7E22972D87171AB28898CA3E3113FBD24A940BD95EAF6E367F6D194CEA6E834269EC1D79E4FC3CF1DB68788540348CD664447727E79FCEB41280C94C387EA1252014A812378BD694B6B4CB4F410A8BBB6BE1F88B45256C2B24A92414929C95047FE535B9C1EF10A09D34D33A1E77A9A9BC47A42925295AB7940A9CF3B4149AA46EB500E63F43DF287096DE0CEDC6F68C31BD5DE2DD6C5A2D0B1B378A63085A8A54BB3B42FA07BC9008339C4E67AD247E972F67A8AF63D7A670EA4286F900B917032A1BF7F6C627367B1356D7E15698A7E0313C33893C4AB475A2CAF3CA382627EE69B4CC490A0056D41571A3D05FABF287895251552F77424DEF7D5BA45CCE2508570A1B75A4803DC7870AE6332477EB4D274F0E58A8035367045E819BEF1AA5616905D2A2E7EA4D8D7DDFEF0E5BCA472CBF5A899D33E616666CF539C6628657893D70EB508166CE683EF051912648CB590279EBA56F86016424DC640DEF5A8D5A9F68D0EE20EF3328D1F32FA7BA6B568C07BD0DF0DEEC93AAB1C3EC2FAE569047130D1704FA1EA4CD5930F24EE86E3F8B53F19B98C942557482DAC5B9BA1DEC63DB518DDC318A61F8930DCA4A03AD29281209D09EFCA9862538B44C2995BFBAF42976156C99ECDC4DA1D8C2EFCA7615663A5855F95B2A38D365D65FBCB9F7D32DFBBC2179F207E3FB522DB43559EAAF3AE8F5A3660B884F7112D164B7035D7227CB2ED0FF00C1B77C26D9D5F0AD04F12504011CA06BA77C8D6A46D014066139DEB614A572CCB7A335A8804A7743E79D32A1B93DE97CA558B1B52D1638CE70224139EA3CF38FAEB9E5231E4FD456DAFD458E7A310465A90E619AF10B490FBA4F5719DFF1EB68E76D1162E2AD90494A0E5399F7B333F7A5650898EF33F95DD9DAE731A30CF8BC2E8C52264B0E589B870C18D4B1635E511EE72F5FBFBFDE9E2774074A6A28DF8CB9901F856135A50B2295D29D295E3083D60D3ADA9E54C919E9CBA48F872E71A532C5A0EE9A00F73E8DC287AE8D0F30B212952737D398B33726A7A8367E2187B526129F2CB967E5DC728806AA98D949FAB334AE479EB5ABF38B8604A52C1A8C38D455EBA3FEA2CBBCB54A5C5A529C8691A67A74D34CF3E9AD414F94A09533391424F034E15E00671654282A4834B57817CFA4415C5B44E51AF2F872D23E1D39572BDB00FF009C5245942A347AD5B964D951A35C2A93F3455CB8AB5BAD3BD62DFBB5B12BB77ED0108523FA8B6F27648260F381C8E42BA3EC89811B2901490E00AB0FF90BEAE34F58B6C80A520AD330B043143D03A481422D60733A473FBDAA775DB118DEF977418E5F60AA4A1DC45D379C56EDFE19D297184B61634502749D7313D3D3DF01673F8830AC187CC40614D1DC176B9F28E75E25DF1266098BDE9890BA82E03BDDF46F4A47D0FEEEB0AC3767B66F67B0AD9CC22CF0CB57B0CB30E8B660328E14DB3441844093339819F9D7D8AF0B2B7B66480C0112D16E43D3DF0F2A6DF2A38D98A52B79D4ACDC062437BBDC878C849C3B0B5BCB471053CDC2968041CE388C8F31F1CEACA43EBCB23CF588389CB55214CA4B69284094849C88831A72ACB0160D0438A20828820A20828820A20828820A20828820A20828820A20828820A20828820A2086EEFF0077A7E94D31DFFF00CE585AA4E7937BB46410A4E8439639FEE8CD0D3C4E151C8CA4F3C81F5FF15052A6142580513F5540EBC3C8BD21171BEE6CF9F2F7EB1CF0DE75F398E7B4961966C1877000F02173C31776A348CF4274D33E599F2A7C75C699782C48CB74B00399A9E1E5C4C5E3C3D3D52D52C8240075E3A75B679DE24B6F360ED76A2CDFC2AE116EE256DACB8A700519E12A1C24EB072F87A7CE39FB489DAA402C42D65CDB3F75B1E11DDF61EDD560C4B5952D40148FA4E64B59F5ABF2CE91CD4DBCDC56D2E09757D7B8532877094AD45843416A772278F2480089074D75D4452D3B1226282D4C6EEAA64295A67D5ED1E92F09F8DD1264CB96A9A02801F49559FAB80C476E91AF8F5AE2EDDD2AD5EC2AFDB5A55C256A6149464489072CBD339ED584CE483BC9E058795C9E7EDA3BB6C5F19E1674A1F3160D01AD43D5B3CF85F4192F6D84ED0BD76BB6B2C23115AD6501372185FE1CF10E4B1AC139F965953C97884A98960D7CB2F75AD6B9C6BB77C5B874E1D7B8B48FA496040A8CEEDC5B91D2374BD9FB73AFA1D4E25B43689376B5256D29683293075E2CC6A34FA654F113921F788B6445EACD5F5EF1E62F1978C49337E54CAD6E68CF5CF896FC88E8561086B09B166CD49953408940F7784FE5D633032397A9A693B1A90A670CF4663D4971F71A479EB6A62958DC52E7BB1597BE97A07A3FDE26D18A5BA6650AED034EBCB2F49AC231214097A86A1258BF3CB8FA188DDC59A3B8EBF8E10B3D78D299012485DCA541A3FDC9294E8BE62797A7ABB42D24124D4E941D7A3716A1B46802CAC245377B17A86A7ECD9A916CDEB372E6CCE296616945FBB6F70B616A24240690E2CC9D46432F2EA327294A72A9A367FD1B65DA30B44C0B0A25935DE7CEFC2CCFEC4637DC3ED1398B6C9B5875F2D6AC46C6EAF9370FA892D287E25DE0E151CF2488CEA570F286E0373A914AE5DB816E75289511308DD25DB2A8A1CF2B7171190F15DBAD92C11CF0B15C770EB120C13717286C083067888A6B899692E02439CDB917E3D7808708FE40B3F0E9CFEF0C13BC0D80C6DD6EC6CB68302C75E91C16B6F72D5CAC139C040CC2B39E711509884EEB860746AE5C6AEE3C99E1C4B4266391BF2DEE41670072A80D9DBBC4B3D8707407ECDDBBB22DA789BB76C86D939716481D7288D66634A819C95256480A15E34CC0B55AB778709292A017B8B4B67535D6835CEDA8362DC5CDD5BA6E2E140BE4A92A6C93E20083C2091DC099A69353354951357676BFE6D7785B79091F2D09DD4A6B664D5EDCC9FB3522A6EE21C2DA9A71074952606463F7C874A60A42F78D77781241B7DC8EBC60157D058EB6B7786D89DD3785A9973C4BA5AEE891E1B4A05ACA06635CFEF2A7D8374919BDCDF86553CFCA130779F7923E934A026AFD69C6DE9AA3ED21BDFC4F7718687F03DD5E25B5F893E825955AE0CABE4F1651C45242B98D34D672156FC2A920241602973AFDFF00340D19001208592C482E5C69F9AD7368E79621ED19ED878A20DDEC6EE5DBC0DE7CA821177805F5BBA8014784A92D92448CF29EDD2AE183C260A74A0A5896F9EF370CEBD34D22630FBA258DE3967E6F522E29C69711682F6EFF00891635748786CDB564D13252C5AE28DC2409C872CB97E94EBFC1D9E5D928366603ABF3E873BC258854A0E00481A1142EC3A9A1F748F1BDB9FE237638D3CD8D9D6DD6121BE071EB5C514E12539F11919493CB410234ADCE03670500D2F3776A534B3DBEE2B10D3C7D5F4D53C1FCF97F778BD6C36C7F88F39709B8FE478606A4152556D8A710C84889E5AE5131F04CE07679144A1C02723971A6A2A223662544BB727F5C8768EACEE131CDE3627BB6C05DDE961AE31B6AA1703154B0D3A8B710E90C94F8DFD4CDBCCCCE7A64455136AC8969C4912F76A5D85880F6B53FACA236619A85B07A16A3354D838BF2AD6335A995940594940E8A107C88CE0E597F9A6C25B07B3666FE9DADC2E61D4A9B368EE793BF07AFE1B9BC205D053E085A4AA0FBB3A6A6239CE910640E951F8C40DDCEDDAB9532EB9E8625F0F88989FAAA00C8DE872EE7A72882BFB27735171A42359528803EB1D7E3D22AA98B96778F603DDC8AFE6B12B276B0412198B86701F8B7F62869AC5917C508756994B9C310B6C820F69C87A89D2A2572F7D2A49B31AF2E4FD43EB174C0E24CE91BE48622A03925E9EB977362602E16933EE91A6BFB7F9CA7CAB93EDD93BBB4142C4285EEDD43D3A73AC2F869844C046ADC5AAC74FEA2031369BB96D0B295A45B927FA6002B9CC4CEBA4C8D055E36691FF6B4822A1AE38DB5CFDB45AF0CA280B62499A1C0A9DD2054707E6F68D62F6862D5FE19B378A5D34D24E1D8B5826D1C4262E1017885BA1C927498E434D729AF487C059BBBE21C2906826247BA35685B57CE285E28584A26805C90AE21C8F304BD357B523B89B076E977663671F42DC8FE51619AC82A8366CF3191EB98F9E55F657C1EADFD932142C65A07601F33AC79636F157F9B3028241049648A317AF5D22F46F0F6DA7D572CE6EAC0E32B882448AB5D5CD9B2D78BC41D5F867FAE3D624D09E148100750349E7598CC5544105104144105104265C4804C1CBCBF7A208A92A0A008FB34411556017D473BC105660828820A20828820A20828820A20828821B9CD6A9CC6500FAFEA3E95B2D01728A48B83D59E8F08AD7621C31FD3FEB8B4337340498FD74FF3F66ABE642C6FB07A1619B077B81DB410BE1E5A66104BAB3A75BDEB4CF5B4738769DD461DED4D7AEDD9E14624122DF8B20AF0ACE17C33E7CB96A6BC73F1FD1B983C5354EE2AA78D7AD79522F1B170EFB840A5AAFAFF006D4E45E325DF5CAD372EA8FF00D8883A94A89000D728C88D39659D7CC7C74E5276BCC00D02D4FA5CF76FD17CBAA6CE947712086A0F263C01E34CA978B6EFB0F6D68530E34CB96C4150428711CE54796799E7A0D69D4DC7A81DC2A2DA13437E5E5C1C459B0D8C9921695A54A4B3074D0D29F8A7ABC630C5360B66AF5D5ABF9532A70AA494B29CD47EC69AE62954ED0144B816D18FBAB3D5F9BC5D367F89F1D2032671090D42A3F917E7E861E615B2983E1A84348C1D91E19399613399EBF4CA220E5269ECADA29B10096AF1EDE5C1EC6338FDBD8FC5952CE32690A006E8592035D867F9B0353191F0B7F0FB3424218433000C921307A65E596A2333CC56CADA2EB3F532438A13C46BCCBF168A1ED44E2B144FD6A5139972FDB950EB43130ABE4B878D2A949D0C920C7791E5E9D6A2313B4089CDBC40A31A01D736D0657E310E9C1AE582142BFF0090FBF3A57411E7E2BBFCFA4FFE54BC8C7B8037C971AD2FE7A0E1CA364E15C394D4E8187663A738F1AC4494DD28A813645AE1139FF508E28813CBA7AF598C3E31D2FBD40CFC3CF2A071EB18548DD5210515980B280D3A6A6D719E70FF0013C45855962188A9C436D5AE1B76209E1054E5AB894CCC892AD273FA54CCBC5216410A601B3FB72F6F084DC229081288256B25414452EE413536A7E99F9A9BAADD46F776DDEC6319B7DAFC4300D97BFBEBCFC33585DF3F6D78DA1372F2547840E01C473491320D4EE1B10552DDCD05CE63CABEB11B88409738241B268466C1AFE7FB8D82C07D923661929C4368F6CB6E7682E78F89C6B18BF4DD5B13C52470A84F01E8796998CC5CF0B046E9AF6FCC6A824281A1E7EECCFE90DB6EBD9D6DB04B91B5FBB0BB7EDB14C3CB6EDD5936B0965696C26006DA01454A4A4954F5EB4C572828300F7A69E96BDDE838C3B94A00B29802FBBC75CAB57B7EA3316C0EF5AC31DC22D70FDA6BB6706C7ECC06556D72E25872E5685704210B3C4B242499FF00CBBE6CD783DF0429E868C2879963C837385A5CB085A949AA660FA83580058A5ED72FC6B6B65DB8BA61EB6FC438461F2907C673FA485240C9415CF88099E73CB96666CE64394B1ED91EBCF4AE51A00259500A33534A3EF10E73E3D22D6676A2D97722C6DF86F94494F8EDC3A91DCA81073CA0EB977A80C5E1771C94BB3D4873CB85BEF710E08702A43642DEFA45E2186EE59699B8653C4C7BC97169120A8F16455D34D3BD452677CB5005E97229FDE79757786DBDBAB528289DE23E97766A503DF9430C45AB5B80953A8B7B82CE6943802A39E999E5DB3D3AD4A49DA3BAC1EB70097176B3F47CEBC6164EE8496078D03D73D0B0ABE4211670966F909BD0D2592E65C0D27850383DDCA3213FAEB066B49DB7F13294532D4B6B80096F2F2F586FFE62649F9656481404B392F6AD1AFC9AC21E7E1DCB51EE072120444FC2639469DB3CB44BFF0052634577D63AAB97DE364E2933AE4115BDB4E3CCD0E9A3B806D968E271A74BE7252B8667391993CBBF291DEB7FFD478C5172B9A49A9A9E5EFBC2A12B2B2C65EE64FAB572BDADF984D572D5B49517929EF97DE9D67B01347FEA1C633954D1CC9D5BDE5C6154E1173582370ABBB926AF9BE94072AD22D1C6378585618E38CFE29849464438B01C075CC4C8F3D4CD4D60E79C523E62CEF28805CBB8E64FAF03689FC0783F138C489C6429454CEC974364CDABE678674B5BFF00763669C70A2EB16B76C4E85F48F3CA7598F2E5CEA4E54B4AD3F5915E7951B8D5BEF944B2FC118C949DE95852A2057E93E54248A8E59B52166B6B366B10B8371618DDB38B7238509B84418906409F2D7BD34C6E191BA4A5493CEE08BDBF711B33C338B961A661A605077210775F51A30ED487779883CFB7325F6CE60A254387288EC00E474CE7AD371A8DD51AEA2869A55E9534CAA5EF1098CD8F3A5AAC6EC41151A7DC1B8E516FAD0149242383FF00150F7A679888CFCE2A384A065920558DC3D2AEE6BF8CA2CBB35065604A4E8589C9AF7AF1B54D2B7888B86CE720F68F9F7E5A7948AE41E221FF00F60A615DE1956E1C76875865BCD038977A55F3D03D7CB586B7486936E841C94E8565CF2E994E93D7E02AD580504ECA4B962400E4B661AAFC34CDA2D38652F789BEE07A1B02C34CFBDAF58D58F680B05B981E156ED82A0317C39413131FFF0020C2A600EF3CC65F1F40FC079C3FF51E140723E627D79D85F93C50FC533184DD6B6072E55AF677CE91DBCDDC2148D8FD9D4AE4286156120EA3FF0088D083F7A57DA1F042F7B6361C1B89693E498F31EDE2FB426E5C0E51901BE7E9FAD5CA21A14A20828820A20828820A2086ABFCA7EF98A208A9B5A528009CE4F4FDE88214F151D7E63F7A208AC104023434411ED1041441051041441051041441051043424176648198C86B33AE7D4F2E9CEB72B0894544380FDAAF9D73F758D0C82A0082C9258BF0E9EFBB3779B511023EFAE63A547CB5267853101DED7CC00435BCA1DC8099742483C34E141C9F9DDA39BFED41835E607BE3DDA6D6B4EB6C61C1DC4538A3CA5148056DA1A652B50112A260126BC81FF509B3969C162D6038DD57A6597B7A068BF787A6A0A65A7526FCCB11D0F1F31190F12B9B775A17691EE2DA69606449F701927A1C88D2457CB9C760D5336C4C0DBBF5AAEF5B923F27CF5EB3B26515A5082012C4D4519B2AE9606B70D9C5A0AC45374B2E953C8493010080070E472D0091CA399EF50DB492A918829776A1BE8E34CB5B6978B0AB6792948CF403882E4DC71E368F5174EB47FA086951A07733E797AE82A3D33560BBBF7E99F2EDCDD05E12623F8A95517724654E068E3D6137311BC5288710C0573E10A803947783D065DE9D2316A0C5EF7735D5B2EA75ED04942D0485134E3CF2F7A9AD2103E2BDF9A00EA24651DB3F4FF30B7F9A3FE4D4362FDDCF4A3FA187E89D2401BC0122D6A7BB74891B674B6D21B3991327E7D4741F604B398264E9856282B9D6D6D5F5E995984F54A2B200FA4D8162EDF872C7D21E25D52A20FCCE5F3E54EB0F2660A9272A039D2E3803ADFA4372B969A048ADC365DFDE9155BB6A40BF796B4A9A5A99F1500CAF2309CBF42721CF3CE730C85B5DB9870C2CFAE9979D5099889614974D43B1614F3D784629DF6E3589E15B2D6B86E08D3EE3F8DDC30D071A0541B6C5C212E874A4C89415012623BCD4D4B0A29156398A86E9F9BEB099C54A24EF2052C5AD950B9CEFE958CE7B01B396FB31B3369875BA43695DB34E909007F51E425C72748256A56B9F51315352710508092EE00CD83E79F768AEE38A553B7921C39627B53F079D69177780855A29859515924833A664FCE69C22782C5CB96BE7CC72D1FA43505887EBEC7DB9437B4B336CD3ECA5280E5D0212A0202A27883A4EB0321D01D29F4B9C802D7B161C2EFEEF6CF72B0552D4C92106A186F558E5E75ED5235577DBB97631B617B4F845CBF8663F8105DEF0DAAFC2B4B82DFF0054A5600E257BA888E67999A5C4C964592E320C395AA29A3BC3B46252E096034F646BD838D2301EE877C9BC0DF862F7FB2B8AD85D61786600B4DA397A869D67F121AE26F890E1252AFF008B33949351D89DAF2252BE4A83D2854C683D7ED0FE561C4C47CC012806A4B004B9A51BA7946EBEC761385600828B6538F2930971DBE292BE29CCA5423E27B557315B4254E2C96009B5B56EEC6E358557825B10028D1DC697D3A68D9BBB5ED717816E908754A49009F0CFB9CB4CC75F2F4AAF4E214A56E9A1B75AFBBF0D2139781536F14B1D0B057BB71BE70DD6F2D078ADDB6564EBF884C83CA323CF3A4521492E083ABBD7CB9C657842A052EC750A63CEA29A5B5E061DB6FADC424BAE1B75FF007376CAE06939EA94F53CC9FF0034F913A40401365A49D583DF577CBAF48899FB216A5EF6FB816AB13AD73EF7CAD15A956FFDCFDD93CFDE1CF5E7CFEF9D6462304A1FFBA1FF00D21F857A5DFCE1B8C3AF0EC93522F99F3619F9DF449DBD62C9B539E2385B482417152729249CB972CB2E5DA4B0B2B0B394375294EB4039796A7CA27707865E2421294A4A945AD5B81CF51EB9BE9F6FB77D69C14AACB0CB974DC12A48F097212447E6820C67CB908CEA613B224CD62025AE73D2D567B768EC7E1AF8798DC7C895304B092A624B149BBD69516F2E31A5F7DB73B418B5CB97577885C7F5CCAB85D564341A9CA408333967CEA4A5600490C94848E54AEBE5FD8AFA07C3BE07183C32244E40DF005C71073BF967A88B2F16BAB9BB928C52F50A339F8D1107CB9E5D35A7024EE8259C0EA3A53DE516E1E0A9332A10914190CC64F5BBFB7885636AB1ED9CE1559629882DE6CC92B7945A235CA35CBEB03AD31C44BDFDEB56874193D1CD731ADCE510DB4FE1E7CC967712900E5EB460FE6EEF6BEC76E6BDA4715B9C598C131A7D0E71A90D85BAA247432547F49CF5EB5E9FB326CD5B83726EFA3035B37E291C9F6E7C369A9139611500ABE905FE90EC32A8B657B88DFD62F59C518372CB8D28702567C320A0F1267239E7F669AED7D98BD91B3D78C98A1BA12E4039364E19EB4EF58E358AC0CCC22BFC7285A194B1F58666398A366DC18EA623DE09530A7828702499139C831A1D73FA9E506B814EC4276CED4299043EF3026E58F0EB7616EB17295F2A682A0487BF7E0DDA2D8BB4BD78F5BB8CAC25A649E34A8905526047A83AE9E622AE188C1AF66ECE0998090006A386A3E6D5E80D1DA2DF859E9F944D015062F7E5D88B91768C67BD2C1BF98BFB3D874B7E2E25885AAEDF889294FE1AE995AF8F2241201881DF38AEEBFF004F928E2F6FE0D69240F9A1C500351C6AC337E51CF7C52779334BDC28E55615CBDE79C760F64C26DB01C2590326B0FB341F34DB360FCE4CF5EB5F68FC264E1B64C8704FFA48B0B505A8DA0D34A5BCD7B4D0A998A98A51FA8A8E766367ABFAC5D68706700998CF97EB5615ED1DCBA559D0073F6EF118A94CCC4679F2E1CE29FC5B61C2D190A1033D331220FDC73A25ED0130B00DA960D76BFEA115324B13DE9EEF15A9F4A53C460F9199F21F3D6A4E52D3303EF2453335B69EFB422B9BBB6AF1FEED9E45DA1A7F32689E11055CD23F30E922644F2A6B371699733E581BC750FEEB52D0D958E420EE962AD054F5B0EDF6857F1CCA44AD40189099851F2075CB3E54E64A8CDD136BD39E7942A9C4A5428CFA77E3EF431E26FDB5202E14892442C7BDF09EDCFF00DED35489555CC401997B35DFDF9D21ECA96B9A010186B966D0D5DBF69394923E9CF3D62753032F8D42E2F6E60B0C4838896FA6F0A7E7BF0E21DA706A2CF4A805ED5EDEB163E37BCFD8AD9E5BAC6278F61CC5F311E2D82AE5B4DD278B3482D28C891046B919D2ABDB53C73B3B6661158A993659003B05269A67CFCA1D4BD933A6A884A084E4A214C75620D5B3A44161BBE9D8DC52E536F6F72A1C4603AB52037F107F59F94D3B67FC65D918FC60C2A14872ADD774EADAF06FC52313364CE96E4D8396D00E95F7C5B2A5AE316370DDBAADDD43CD5C025B79B50534A2333EF75D0475AEAB86DAD2715864E225AD242802038CC75E76E05A23CE1D61DBFDB70D51CFDE9AC488B8495A91C2A1C312AFED33D0F3FBE944BDA895CC0862E6D415FD18D3E529897142C469ECD2D9650AA161C4852743313DAA550ADF4856BCFEF1AA925258DE2BADE35828820A20828820A2086123C4E1EE0FCCFD8F5ACCE1FF00F156AC8053F2F64FA43A425E50E6A3D89A428540850E9233E7F647D399AAF6CC9CF8B32ED555FA9E1A8E35D1A358D3FF006C4D89BADABDD4E309C212A38EDAAAD6F6C5C6C1F150DDADC26E2E380A4710E26DB2150340796BCDBE30F860ED6D8B895A51BE4CB2ED930A8B708B46C09AA1302033259DF4539FEFBC6B3EED36C5DDB5D82C3F145A8A6E380D9BCDA8C14AEC57F8658209247116C9CE67B57C89F887B2E6787B6B4F985051B8B5D5980ADCF3E9A976A76FD893D9090E1DA8721916CF83BEA06513CBBA0D2CA262232D27FC6A3E72753C6315B4FF00C99A5649356BD78B67A533F4BBCAFAD00D19AE6C47BA7AD6176EF4883C5A77E5A473D24F61CAB444D2A65025F424F2E1FDF9EAB97BB4BB54BDBB55BBBB370878973C44858D0E99F2FD29E4B9656C5C1D4E9FDFEDA192D3BC4901ABCADAB663FB7BC3E6F9FA73CF2F59E7AFCE9CA70FBC452D5200BBDB27D32F586CB96C5C9BE41C9F4A768593F986BDFF00CF6A7689252057A1EB70DDA13521245125CBB96AD3DD38087CD7F6FAFEB4FE4A294E14CEE7F64F610DD520B12417E0FE6E3216D6247F061865370A59E1BC30533A701811A46672CF974A9995294102A0939569D1BDF488D5813173129FE528FD593BE6D9BE79C4D3780E137D6ADA714690FF0081EFB256124833C530A079C69965E712B225050AB06A56B57CCE6D9BF9B888EC42E682844A40512FBC482586AF67A9D6D71130CDDA14D27C3F7509F71232FCA9012072C801FB73AC295B8B24F2D1E9E8F73FD420B94490141DAA684D4FA7AF2857F140F3E7CE72EFAFD3D2964CC0082F4C8034D6C4FAE67A468A934A22B4CAA7DFE8DE28BAB852916C5A265B52B8C89CB88C0075EB3AE7C8D3D44D06A08E5956C7B674849324EFA8A92C0E4CD6E6EF6B8A33C597BCCC758C0B6471DBF7D21C1E034D2F9FFCF2D899CB32AD3BF5A5FE6EEEF68D972D5FB3539C6C892920100DFA5FD9ABC61CDCDD8E0D856CDDBBF86E1CD337B89BB72E3CEA1A4A16B2A794A0544004C71644C6B3E74EDA7337B12480CFF6D3DDB47A58F092C19037CEE8171950E63A17E4632D3ED356CD169D584BAE0924182273E79F3CA7A79C45C3E94B2B53A58CB1404B105867F76B71315D9AD2865012E7880490BE2E23A9E7CFA72E9446CA439706BC7DFE624D2BE21A8FB3CB5F58F5A21BAD172C5F30D78F7C4299CE008D4F5F3CB2FBD6929A58022E3F223558019B378497759812353399CC7C40FACE79F3A6C92C41766F7E578869D27E6CE600D081ABBB0E6F7D2CCD420617DEFEDD1D98C02E4B6AE15B8DAC20E801823B733CBA4198CE7F674D4EF07BD1DB8364F6CC9EFC3A5F83B63267E224A948DEDD62011435A3DCFBAB54471EF6A77818A5EED0DC397CF2DE6DD795C3C4A24264E838A6047FBABC60A6A77413502835E75BB79B5338F69F823610F91246E00E91D18662B619674CAB139698A85DAB6A27358EBE5940048CBB4CE841069FAE68D69975D72FBD62F58BD9CB9135920D05486D1FD8D6DA9A1CC450264881CA673ED32232C865E7A4B45CF21C034550B5A8DC79EAF0909CB9640215A501A375F4FC442DF620C2D21B5000AC11CA67965D73924D3499358904BE6E3F2EDDB48C7CF5CCFA06F1D3CFDF73CB155F3B89E0D8EB18861EEADB8702814A8A465E519C1E7AF3EED953774850259E9A65C73CBCAB0CA6EC59D892B265A88502EE1F5B5EF9F28EA0FB3DEF06F719D9962DEF1F5BB7496F85C2A5126048124E790D0CF3ED3517E319FF0033C3F32593BC4A1541A3E94F6ED78F32F8F7C3E246D09BFE9EE904D8354BBB5FA9D2F58D8672FDE369E0824159EB1A9E59F9F502673AF37787E4997B5F79882262A9D7DDC8E2238FCDD9C5134FD2D66A3356F5D21F5836AE04A543DE57BDDF298F9199FAD74DDBDBD3F05BA1DC8038E55E3FAB343E4C8F9729E808157A0FEBD8BC634DAFBCF1F7A3BACC178A4DE5D5EC26419F08A17CB98CF96401F5EFDFF4E3B3CCADAF84514D3E62090464F5AB797A1A8E6FE279A1299AE4FF0015371A1717EF7FCF607086FC0C36C520C14DB30982607BAD2464272F8EBDEBECEF8551255B2E402104FCB450B3FF0011CB4FEAC3CCBB571E99589526BFC959B677D726B696313CDAF23319C4472E994F3A9C9B8390A2019690CF50900F2D0B7AE511A31C998FBA4022A75AE753AE55EB0CEE6CCB8A53ED28A5460C1ED965EBEBF1A6337032D03FD30D43EE9E63918CA4AE654B9734EBFBCCDF934276A9712541E54C64028F2CC69F0EFF00AD7F1188998759FA983EA476D457DE4BA2402FBC2FA5DC7EB514E358A14CDBB6FBCF209F117054A5C78420671CC77CF9F7353B85C6603FC713710B921412E4A88DF06AD77AD3FAB16EBD9614B2B4A4BB50354B9C83036AE7D59C595B51B6FB29B3D6EE3D8CE2D66CBCD4C34CBE80EE5FF8AB9E407EB54BF1178FB66EC996BDC9F2C14BD4292EE1F9578E6D9C49613642D44028209BBA73A3DBCEDE51AC5B43ED3570FDC5E615B01B3D8BDEDFA484B18B6296BE2604E28C66879B54A929D164686BCD9E2FF8ED2B0DBE9918A7237836FD2828CC781351168C2EC898AFA0B849008DD05E9AE8C6313E26D7B42EF0093B5FB59806CC60EE199D8EBDB9B3C4D0D13201E3F74382418D2418CABCD3E20F8F78F5CE9865E2E6B026D315BB7E05BD2968B061B6484A424A3798DC8ABDC3D9DDF99A42DB3BB9DD9AB4B858C471DDA3DA8B84C156258EDC22F2FAE179921D78895250470A33C911AD72FDB1FF005098AC4C95E0A662E66F12410566B51C74CADC749D93B31A57F1019E940DCBAE9190118260B875BBA9B6B271AF0D24216A692932260830232D620F3E951BE17F8AEB95B4E54E54F213BE2A554BB3DF4634CF9445E376728021208CCB8F5A1A643A4671DD163CCE2B84AF062E14DC614A511240510E2CA877D079F202BE85FC29F8928DBD230D86F9FBFBC121B7B80A55EDC8966B068A7E330E641528A497BD1DDADCFB53A1319B5DBB52ED0B4DF10B9040274300C1EF981F3F87ACB666CE44E948C4160E01AD19C6B6CF47E0D7AECD5942DD2D5720356D502CF7D2272C12B45AB6173C512675939E7FA768A94284CB2509B0B7BF7CE1B6FEF926BEEC07010F2B119828820A20828820A20861C12E13A1E674CA75EB39E5E75B4D27FC75268CC4D79B81C896A71870957FA613C4F2677EFF00685384F14E5DE3AF38F3EBE7EB5AC14A54AC5FCC66FA89D2845001DB2F2A425314C014914BD788BF9F3D0C59BB4B602E59BC66E528751736D716EC323DE243CCADA59E13A81C5273981D00AB26D1C148DA5B2E6C854BDE3B8ADF252E1CBB0E4F7B75B895D9F89DD5A595BA1D2E41B91A17AF2B7511CAFC2D86375FB7D8E6EFDF4A9168E5CAAE30B5A0016CE97D4ABAB84B44E4A502A85009FCD97535F26FFEA63C1ABC34FC6CE91288AA88094B50BE5C3981CB3EC1B0F1EF2A5A8029A0606ED9160FA96BB01D22FDBC68DDB8BBB62196571C2DBBEE39EEF320693A8D6441E95E024E166C8529131C292A21B2FE5C6B4BD348EB3B397F370E8A3EF5C9CB3BE74E34B81110C5D715C7E1C1293A059C9073F4CB4CF28A792533010E6CF42723CF89E7120A97424B74773CA95E462EC6141A425A52D2B52466A4990673CA796639D4D6186E9AB16CB5B96F3F2A888F54B5281205C921DDEFD7F30FD1708E60E71A67F4D73CBE93528898803439BB71F6DA57386E517240BB54549E14ADA1C25F4710C8C7A7FAF9F4F4DBE6A29F50739387F5F48DBE48527F890780D0F2CE1EB770811AE5DBAD3C9335096AD7C9BED7FD6A92A4960DC7A5EB4B509D4758A96F5DBE0A78D0184478024C833EF710E5273CA321E553322685331D5AD4BF13DAB5D3364BC3A0951090952BF9716B1A72B73AE9376AFDCFE1C21F7029432053311A419E80F3F9549CA98C28AA6A48ED66EB7AE70C57242545D00306A0727F35F28789B84B00340CC6A44C7BD04E874D35CF2A8F9F39A6286F501B8208B7F41AD0CA6E1C95380467D3806D5F8985C5C9390933D24FEB23E535AA278554AC86B0767BDC7F40469F208B247507F07D61CB2E10D5C051953BC3E11CC84C6B33A03EB4F25CF600DF4E1ABDFCBA36692A428A907E9003EF0CEA29C3C8C5A1B65B3EEED5ECAE2F81AD683717EE5A2995289F0D2961E0B7028E664A410235269E23140A4835245079675E3E5C630A9133E6CA28291283FCC16274A5AEFF007BC31C1F046367916366C2521BB26C2484819A9491C4469CC4CEBFA56B1CBDE9E55A9763C35F7E64C4C4840548521CB960F6039F9EBD225AE116F7772E3CFF0019414C2008907860C8D333D34F9533A126E3CFD4F9F942A842A5CA084B120E76A9AB7AD7AD629B3B12CB094215EEA492924E704CE7F1EDEB58850A80A1BE6D6F387801403C5CB90CE33A234242886A1ADFF4FA43776E005409D739D065A9E7C8F5CFCE91981CD5D8B5B87F5E70DA6A4EF312472D381E7D793C473B720716A75D20E639E5F12338D7B068A705B8B3FB7A9C9FD690A6170E14B0AFE4A7140F4FC5AFCA35ABDA06C9EC4765AE54D254B752D2CA12904A879C67CA7AC75A96C34D4A1282097CF362F9DDCE56E2C2D1D8FC0625A315BAA01814B3D32A803BEA79C7212E12E5BE2B72DE2E859525D5786003900A233E2D3CFE11955B30389010904D40E5CB91CF933691ED3F086270E8C3CB48DDDEDD00136AE65EAD66FDD66EDF1342521014AE119252341DA35D0C1ED9F39A915E212A1722B4C9FB9FBDBB474199814CE4FCC74AF785C5F2FBEBC3524BA5DFCA09D673C8E7AF5D3D3E3CA9A2E6E76BB1CB4BBD7A74AC4362364EF1748CCFE3B353AD4DA2DBC6F114B4D32E369754B24CF081C880200A69367B8209ADBE92FA5DFDE8E23383D8A4CC054906BD0374E56D7998B5B10C51779E1212E21B724407494F4D633D20F6CE9B99C4B24292C3F8BE45A963AE917BC26C992894EA4151DD3FC402598DCDAF993FBDEDF65D45DB2CAFF10B4389584F096C92233EA0E7A03976279D43EDB9DF3B04B94A2E7748615A1D070F4AC7923E2F61654AC76254801201A0CC6A1B91E0D1BBC9BB63C4432A42F8D24498CB91CFE73D74AE4B84C38918FDF0199449360DAD6ED5A37DA3CED89967F9298BB8059F9D4E608EE0C5CF66A0FDC80D25442000531AF126065CC08EF19F6ABC0969C604A12E4121F3BB120307F4BF3888C57D3208240556A6C1C66467A6BDA30A5DB2BC63DA7F74F84DBAD017833B8AB97E09C921DB74B8D822352065C519E5A44FAFFE026C6323178599BA2AA15E3439F3ADFCCC71DF15CEDD4CD17A299893ABB5A9AEBAD44764AC5D53EC5B0692B090DA119CFF0062129303331918EC62BE9C787538A4E1A4EE9DD0501ABF4D0545FDF91F2FEDB96B56354966FA8B1ED9BEBF6CE9131E21B74A54EA5652A895019274CC9390113FB55C7FCC44A40F9EADD201724D389EB7F4D21BC8C2CEA50D6E75F77E19EB0D6F7136ED185DD29E6D16A94951714A809004AA4E8204C98CAA0369F8BB65ECF96A5AE6A0EE8352A4B5B57F2BF78B260B08A528259D4726BDF5B0CDBF6DA81BCEF6B2DDFEC7DC3D63678BA31DC59BE248C2B067DBB8BF5AD23F2A590A0A2A9CA23E735C47C47F15F634854D1F3E51500AFF00724316A06CBDD2D16791B2B78A7E8AE6E2F67FBE5525AED18A99DF26F8F78D85A2F706C39AD98D9FBFE34B0C630D5C59ED1B484129529F4A4F08E28E264FFD08EB5E58F1A7C7FC461715324E1314532D2540042C806962C4D19A99F38B1613C3E850F98505D4CC08A060D4E3A33F286F83EEBD8BEBAFE67B578E6378A5D9505AEDDEB90FDA49CD4025C1307CB3115E72F14FC72DA38D331271733EA7702629EAF70F6D74E959895B11200013F50CC870391616D7F35C9EC5AE0B8484DBD85A069A68421A4B690D891AC72922550333F1AE3D8CF1EE2B684C56FCF242890C55EA0BE60B3F9089CC36C800074017CAFCAAEE39D3562F0E9788DB110AB5682644C204FCCC44763F2A7123112F1A9798A1BC41CC568F6F7DA2451B2806DDA13572EC73AE75D1E0172C3612E59B4842B4571244667B69ACCFC2B8D6DAD9D8A5F889A4AD46515644B014E9DDBA64B0C1A93BC998DF5301BB6A5C97F4F2CA29BB5BB7C10D9E042345F0E47399024F3E53AE5E553F324E2767CB4CC0A208DDB38146D19FF3A986B88D9E8520B3922FBCCEF6D2FF009B45AD866D07FF00816D93174DAD630EBC75B4DCA947DD4121284F88720389648483AC7781EB3FFA7AF1BCDC36D4C24B9D38A46FA036F367673A80C2BD328A16D9D9EA017F48200A86AD7FBAF08DE3B2B862F059E20CA7DC71A42DC1A95788D8292206866467E55F62BC27E24C3E3763C9226254F2D1621DE96ADFBD41BD0C72CC7CA5CA5949AB6F55249B96E1A75EC22EB654168E21224CC1D469AD5A02D333EA4D8D5A1ACA0426AF7CEF427DDCC2B598560A20828820A2082B06C791821B05242B965ACC41EDE79D42A3682A6633FC32490F548371715360F7E02F585424945297AF5CFA450B751060C1E922467FE321E952EB929952D5319886AE43573473AE7CDE184E594AB749607372DF80FF009EB6E5EDB3D77885BDDA4AB82C82D2100E4E0793C264660F083F426743A61B694B5A6648762BA298DC07760CF5F22F9C3BC1CDA906C0E5AF63C99FD446897B5AEEC2E7F96DB6F0F0041FC7ECC3BE290D025DB945CBA90E8570895042279E4267515E6BF8D3E0346DEC2E2A7225050285127774196AD47C9E8D78E8FB0F68D65214C145986603DC8A548B1A1D230CE01B5B6FB5383DA5EB2A0DBEB425B76DE785495B4036B0539C4A924C11A57C9CF1F7857FECFB6A761F7373756A04377CAED6CFBBC7A2FC3A913300958AD03837A8E0EC4B6B571138DD9A5E1C208438661472332799CFBF6F49AA22B06A975673477C8E6DF819923368975A0272040AD9DA81DD837F50FD9F12CC780EAF8968CF8A7AC75EDDA0E99CD3698B12AE403CFDBD5A90D16029F75B81ECFE90F9AB9194E7AE720F5CA333EB34DD5B458DDC73FBD9F4E8E2F0D148214D523337E8E58439173A67D39C65F1CBE1E95A0C7392A05EB4A870D539E661DA255052ED762C391AF3878DDD6B9FCFFCFEBFAD3E958E342540D01A9B599BB1B5A34561F41DBF43D44495BDC7BA9274CE7BFAFEB9F99A9AC3635C02145F47CC11F8A54654786536433D393367E9E96A65128DDD8C803E7A09CF31A7C797954AA31E4A4EEAAE2D4EAFCF817A3F0862B906A4D6CC19ED7EBD61D78B2AD411E93F2314DA6620A94589B9A3F3C837B7864B94E5ACDC7F47CE1CB6F0C88C8C41981F4394F6F2ACA67106E7AFE7BDE8D7D234F95BA2C0F9935E5587497A10003ACC91E7E83EBE95212A783572096EFE9A793BC226555C01D6E3CBCEFDA00F1D38943D4FE84D3A4CE049A654D7DFB6307CA1C3853DB432753C6E295EF13F1F8EB51B893BD3093776603261EF8BC399602502A2BD2C4DB9427E17657C3FC5378DDC6A3B887CC8E16D23CF5F3FDA8845441510F0939A2BCFF5A05481AC651FC875F4310376E70BAB13A46435FAF7AC4C04023DB3DF85A1E270E26241677AD785743DA2356E8D4188F3F8CFEC7D4D47CE21CD0E556A5B8F07F511ACB0252EC03721E963CFFBB5F1FC1DAC5AD5D6AE1295B6E2542089047DE9F104D29869E1EB514A71CAE0B71EE0D62DDB1B69AB0D325AE5962935D4E7DAFC1A39E7BEBDC83AD3AFE2B86DB10254A8424C19F200CF4CC7A4D5870D88DDF50E73E5CEF46E3468EFFE1BF1B7CB952C7CD3BC00DE0FDEFA79E6F411A717D8662B862541D6821482AE20B0A0A80729D397C2454989E4DCB9CF3FB8D3FBCBBE6C0F19C99D8742553379D981555B817F2E76A45BCDE3AF070B6E96C198304E506273396791F5CE915CF228E69535A7077E1F9E57EC26D2958A1BC374B805C31E9F887AAC6F0F527C2B9E052849311CC4E527EB4DD53C005CD4D8BFEFEEF6A343D9B889724198161219F260D42D4F7E96D59E10F6D26D35ADB5921D4B2A74090232C8F29190397C2A3CCF24FF002163AB654CE8787E220F15E38918013126686014012AD417A3F316EBAF55F727B14BD9BC36DDB525521B4A8920EA44EA40F3CE464072A87C5E20A94506A05186B9B823A37121A8D1E56F88FE2197B5B15366214FBC7573F80FD684E95D86B5B22FDCADC1C86B1D3F688F8E7CAAAF3E4EE2FE6002B91777EB98CAA3AC713C5E2D23FD304BD180234A9EB7CE2E54307C36DEB7716D2D869F72E14150901B42949923B2753F2AB3F8687F938B932C1FF700AA0A694EAE699935BC436227ACA666FB1410C9003A8DDE8F95BB691AE5EC70FA7783ED65BDCC72F9D7B10B6D947B086F0C57178ADA0BF6CB6DFF000E4103310A098D3CCD7D0AF835B351253859850E06E9A0B97D2C45B331C5FC64A56E4E29504BD89341C0F3B6763CA3B5789ED2E0DB3B64A7AFAF2CB0D65A4125574E2590001275204C011E9E75EE3C3789365ECED9D2D33A6CB42D08662520EA796AED1C706CA5E2A66FAA5AE639A2921D357CFF005ADA91A3FBD2F6EAD8FD97B97F66B63ADEEB6AB691D516996ED128BDB52E8C802942828827A6BAF9F16F1C7C5FD9F804CE12A7241485070A00F30694D6B9F289DC2786A615552425814900D35DEA368D4EED1AD8EE31ED33BE7BA2BDA67D7B15B2B78AE26ACB0455DE1F88A1854487DB54A01524F4820FC3C57E3BF8E789599F2B0F8A5D94C02C80C5F27CB3EE6B16BC16C192809594A41A312056ACC33A722DCE329ECBEE5B77FB20DA6E1786B78E63EA016BC571665BB8C483BA9525F8E3E29933E43BD79536FF00C4EDB98C9CB32F1338A544827E628EA00ECED7358B3E1F62860771CF10F40039A01F7E228D1976CAF2DAD2CDB65D0AE36C11FD503C4009F7475E102027B0C88AAEA36D6231C8F998A9855354FBC564953D75A677CBC8CC49C0001212C4021BEFD4371A5C0842E3681B40842608F42627A6BE7A6994655178BC22B100A92C49773D684D6A5C7A7187C8C0A52E48734A016167A5AC1D8171D61A0C40DC8F149E12A9CB498819C93AE5FE62A167603112BEA028330FDB27B96F505E1F4B90909DD0C40347B8A934CFD34D63C37103527B020F61F5E9972D2914ED5C66114005AE94352CCFA5FD87857E50C9B3FF006FBEB0ED9BA1C31391981D0CF4CF4927A6B9F4B56CC54A992C63A78057724EA1B335F3CAF1133E6A513B74F604E63306F6CA9A0AB8768BAE1E124E5A723D758F803CBE34DB6C6D2C2CF96654B6DEABB52C5B57FD8D03467E599A9DE48398A3BD19B91FE8E4F696DEE12BC6B66F116AD65376B4B772DBA9C96855A10F40234E22800E42454C78076FAB63ED492B0A665A58823506B466F7A9883DAB800B0A7191737AB68F97172348CEBECD9BC73B6BB0D87AAF9D42715C2D4FDAE2ACAD50B6C36EA99B62B495482A4360898CF3026057D6FF0081BE2F5EDBC1E0E4098A51DD4821DC0343C1C1ABBDF2668E3BB6B67FCB9AB601D4AFA435581ABF106D71A3398DADB6585B414233E9D394768FF55EC9C34B32E5A42AA77479811525A0CB5141B8F7EC8A438A711A414410510414410560D41E460862B695C648227F7FDA7FC72AADC9D958846D6FF309FF0049CD896A0CC7EF3E30E12AFF004F745EB539177B7A77E109780A05464124CF9F3E9973F972922CD8B989561D72C36F100303D5FDEBADE3A7C92B5022BCBF40DE1838CDE36FB6B6548F0D321C4A89CC1CB2F39EFD472269D230389978BF9A15F4B92439AD6BEE96EB1B4A1F2D41CD012E06B959DF96A6F169E3BB3CF63AFBB657A8B6770479A710F5BAC152965C6C89283EE9851907D6A5F68E0656D0C22E44C46F132D40821F22053ABFF6F162C26D64480192833014FD4431605DB514B59F5D390BBCED96C7370FBE1BBBEC45A5B3BB4C5EE9B187DEB69526CF0E52C00B4DEB86196FC57DC096C8D4E4649AF9B7F1B7E10E315B5F13B4E525A4EF2D4285B95B864D51DBD11E10F14C8998144B0C16000A4E85C5F893972BC64EC531469DBC63F95BA8711E1B4ECB64282D2EA12B49491120A4F5F3AF0FF89E51D8D889926602E85148E2DD069DFAC742C1E2062929B97772CEE0D998E86F5E10F7F18AB85788E4A565290A072208196BD62738EDA455490938D4EF21C82F703D1F2A67931D2243FEDFF4FD36353A0A03C0E674CC712E1A749C81CB399E594E79FCFA73AAD6D952F0153BCE34FB0EEFDE911F3B0C50A2925CD9CF0CC77AE5CCBC3A0F1CB3CE791CBACF3EB9EBFA536C0CF5626589801A9B171CCF2B5A9C328752253201567964039A5A1E36F19D4E99F7CB223EFAEB52B2D6A04006835B06AFB6AE42B4817298D183BFBB5FDF37CCDC840824C8CC4E9EBD4F6E644CD4AC9C49481EB6B65DFA529C58CE4D1C0BDE9F7F3EF126CDEB41241041904401033F97CA633315228C61490C6EC286CD6A397D79B5CDA3A6A1CD081C39B69516D224117CDAA08E20349CB5119CC79CE7EB4E3FCE4B80F56B92C6DC0E9CB943338770E01A92EF7AE7D3434E90E91760F2313D33D3B0FF0073DA9DC9C5A580A1275E15A55CB54EBA3011AAF0E4243379F637FC3F387ED3A1690648D753F7CA3BD49499C0B35CE6EC03396CF2E875A886A431208AE60C384852B457C499F9FEF520858A3B1247507367E7EDA34514A6E9F20DEFCE1276E034E14C4981A673D3EF29A426252A39823F5ECD23644BDF4024917E63837B2F0A25D2A12065E47F7A4FE582F7A5EDF88C19605DC3F11F8F75D0C2A1E200100C7A79567712C2A789F6FE4234F941DFB1B9FB7F51E195273D4E7F3AD0A085820D01D687DE543181F4AAB56D3945B778DA8DC2C83CF4E5EA0919F5A4A6CE480451C6B7B3BE6C226F0CA48949A3DEA00AF57AC462D0B920900721CC91D79FED51F35495367EF30E4728426618AD6A21EB5A1ABF7B71F286E0381D25C292DC0084A7946B97DE51AE7484B1B84B92CE2DC1D9E093226C92FBC79B906F4FBF631058DE1F638A214CBEC8532A10414827969397D3D0549C9C60401BC016A55ADCBD5BA67160C163A7482085356A145B36E35A07E3A55F5976EF719B338E3B746D5BB965C7408E04A12DA55C3CA0729EBF1A79FF00714121BE9A56C071E4F4E6747A742D89E319D83DD1366380DFC4D5C3F37F77A46B2621EC8370EDDADD62F8A5B5289095384119CE7EEC4F5E99D657B450522A2BDF3357AB7BE7D6763FC59C2E0D094CC51A001DEFA3D7BE94E30F2C7D929C438CF8D736EB4A0FBE56A25644F972D23E191A6AAC6855986957E1C39E5EA0C9E3BE32E0A7CA32E5BD410F41DAA4F3CEDC6362B633D9EB65F035DBDC780DAEE5B852961283EF01391039C6667B742115CF46E9622C5F869FBA1E51C9B6E78E66638CC32A6A92953B1DE6353570FCCFEA873E3569658682C30829E0425290008C9207FAE9D6A03138B44B9A4A8B819BD6B5AD0F3CDB368A64CC5E231690B98B2AE65D4C4E7534FEAC21EE1AFB6C073C549515FE58823312013991969FB53156225E2C89680429D83655B3D7D2AD4D0D7F152A615956F11C9C963A83C7DEB61EF676F86C86ECF6BB1568B366E61F62B4FE22E3DC2E9B86DC6D3E12841570A8C1D62BA3782F62AE5E225CF56E9485051B937D326D29E71133C94975294F50340E35F7DEFCFEF629F6ABC3F753B27B6F8A61FB3B88ED0EF1768EF880ED9DA8BAB7716DDE3C18F1085070A5285A44E6400790AF69F82BC6F81F0E61A5A6784BA11761906A3915E2FEB5E7BB7F64AF6829C12525DC3BA4E8E3576EA6368D9C2FDA37DA2F13FE77BC8C69DD8ED9FC45616CE0B82DC5D585E30C24884BF6EECA525C4F091C8C9390D281F103E37CE5E3662309885A6539000511FEDC803C433D468F0C703B1918597F2CA522F972D47EDEE1C18DB2D82DCA6C16EEACD0E1C370EC5B106D2957F37C4D969EC4BC4199587C0078A46473AF3178ABE256D2C7159FF226105DC95927851D9EF47EB5112F2F00898A094A149ADDBE9367761620EBD6ED78DCE34965F5B96B7B74A57BA1285B92CC0C824091EE819013CA04E83914FDBB3F1138AE74C5A8135DE24FBEA732F60D3B85D9492005212025DE9AE741DDF3ADA1156D23CE0F7D8B4E28C9C4A7FA82720788C67DA35F854CE071F805247CF92925AEC1C1BBF4D444A4BD88CA13113266ED7E97A11986AD2FC03666B0D5370BB9578AE2CA8AA4EB33197C8683975AAD6D19EA56349C2AB764B80C3EEC776D4CDE99461783F94ADD0000097767D437322FAD6249A6ED9413C62546072CC7D67CFE13562D95890129138953E46CD6E0FDE9E51A2E510E52D56BB9623F2FADC3C78B6C2544344840D04C7E9F0D2AC8B99859B2C83287D4340E3A3BEA1AB9C6C896581FA4645857DE77308159491999FD3EFF007E9558C7E064A945494A5817A8D33A574CEFC214DC2C6B5CB4E2F0A22E0275981D4F799E71150F88C79449560A4D1767B369667BF9718AFE27013264E2A06E5E9F6F60F3B05C5EA0260851D7BCF6F53DA3AD57D5B371F289C44C98A29772378DBAD8B11A3E4CF47F879265202564DAF535D3D8ED9C95A62B6FE33368E5B5C2D170875B52820147BC929053AE401CFA537C3ED9187C74948554298D58B83AD7AE5D03445ED259099891BAE59A976BF96675CA312EEFF1373751BFA7F67710BB6ADB6776E1D4ADB507382DAD956ACF8812B39252A71C54467C4A98CF3AFA77FF004BDE3593825E08E2541481BA0906E3277E2CE6BCAD1CCB6D23E6054C4CB1BE9A25C6B43D1AB5B1A56B1D4EC32E9A36CD80B4A894254983F99244A543A820820F39AFA7F83F1061F1F85978992C10509B35683DDFBC731C5A0FCE59C89A6B76F66CD5E53156186705104144105104144108A8428F9CFC73ADF786E367FB778502C2535CBDDF2D229A6B3524BF166E8DEB942714A913273CF9F2E43A5353F4D48A8EE3BFB31A2D05E82B98B1868E351390F3CE79761A79E9583894804B81467E85AAE6977FDC6A2528107773BB569E768E677F11CDB0C0F07DCC6D1E1D890B773107D36E709B25709BBBCBA43E92836ED932B0CBBC0A5F0E6919F979F3E2C4F9733033904228955DB31968FCBB476BF03E0819067EF2895EE9097A067BF03E7A472EFD94F7E3B59738633B17BD8B7B7C2F1A59745862AB4AD9F16D82CAD84F8CFF00BC4A58F0D10040564328AF953F13766CB99B467AC005D6A3AD09B5BD34B8CBBCEC492C25BEF53270C72A81AE95B51AF1BE7637A875A43ADBE5F6CF170BBC5C41624899C811A11CA32ED541D958444A400774024DEE2ED4BE5FA8BD26480809005402F571A64C694B0B989C6EEC04C0D7427940EB3946703D22AB9E2BD9E89A8580CED7E3477F4B6552222F17860AAB5791A65D2F51FDC546F805646349CC881CFB7FBF5AA7E100C3A0201AB97007134E4DE79BC252E584CBFA921C700FA0E95B707AC3B45F080273D73FD7B7EA741CA45130383E791CB2B7A084A64B241296B8A5B5D2997E9EB0F9ABB0A0924CEBCF9E9A6A7B7FBA7489A1C54B771F815FEE23A6C925C1A0E1EACDEEB687A8BA190904E59C9E646BAFEBA74A7B2D6E1F7806B3963D7D3F55868AC31277999B571CB85EF539DDA241BBA1C2923E1F0C867FBCFA5644C014E1C936A023A5B5E6611128824D9F5D2F461687EDDCE5F9BEFBE79794F5CA9EC99C090D716D43DC53D7F508CC94452A470E9DDBF312B6F78021327AE5273E5A7FBA9A913451E8783E76E3EF50D0D26C81739817BE7C06991E31248BD498D27439E60FA1E7CA2A5513ECCD4B3D1C77D3AC3432C66FD7FA8A16B4B8B9009273CFAC7A74EFD666B2A9E1CD09E34F7D237480031CACDF77E3A43969412224E713DBB4749CFF007AD7E790F4BDE9FB84964166637F7EB0E909073398E5FE7EFE5419CF93721FB86CB98C0B676D7DF1FBC2B5AFCCFF00E6F7D61A9984162F5D2DD33FBF3881BDFF00FB0BF4FA547CE72A249046447DFAFEEF13D842F253C00EAF58897397AFE948C3E979F4FBC377397AFE9442910F73CFEFFEB4411EB6CDB2DA05680A590413009E713F71442A852C00C12D567EBC5E115DB594FE448CB2C81F9E5F4A216DF570F388F73094B8E179A4008511000E913CE338144604C228E09E37AF5F7DA1445BF8060888E7C8F231D873EF44677CB3325B46A5DE195C3216EA960483107D35C872FBCAA1B1D24A86F11ADA84BBDDDBEFC1A24E44D1B9420062E2A03F4C859891D2156ED867967A8E7A89888CF5D341DAA1F08F2E7821AEFA675AB59FEEF0DE74CDE71955CE7C75ABD6343BDBEADF686FB61B67300C21D72D2CB17BFB7B7C49E6D4A6C2DB5DF32D80B52722085100284679F4AECFE1ADA2254B960AB404BD2EE3B72A9882C5A86EA998DB893CB8F95BAEDB6E13D983763BA3D91C1EE5BC399BFC5EE6C2D2F1C75D6997125F7196DE278B841FCEA3CFE3CEDF8DDB72E54B24CC724506F123A720F4D78D22B6B5CE9D34A10909961F7CAA8AAD8A69DCB3F3778CF78A63F6CC214E9B7658B8094A421A484A4250385B006A3DD007D00CCD71BDBF8E189C42A606AD28294B5F53CEB7D21CE1B00508A954D00BBA9CD497356B062FC39B4639BDC7B12C4D6A6DB754941910091F08F2E5DFCEA838E1BE556A963C789E2E6E35B5225A4E0C862D42CC0587BAE6F720521807EE6DE1A714A52D2249CC9839F3FDB23CF5150A6532AC75ABB6AE78FB689AC3E0F7402E920D9854FB2F9BDA3DFC6BA3593F2CBAF3D396835CEA4244BA501B1BE7719FA6A748999787DD4821346E8697B7AC5DB85BA576CD2944E7C53D400A3A0EA0F5EA6293561C99AE1D9C06722AD9E5ABFF00422BB8E4EECD239D0FB6D28E4C5C4C3A32391E93CBE7A8F4CA3BD58307240DDA0B5989D7954B573FB3121C343A99CFAE75341C000E50000504325EA3CBF534CF14CC5ECD5E5F4C6628FBFBF8D5357249C715815715FCF0EBA3EB1B265A58BA5B98D79E7F98F2419CC65AD48ED29DB982292C193471FA61CCBD60549770C082E2CC69D2E215C26FEE9DC41E64320B5625210B293EF78B32674C8FCFCC57199F8829DA454E28B198A07700D5FF004080F5881DA1856A549503571CFBB659D7478C5FED13B2371B41B2831CC19D533B47B3AFDADEA5E68F0BDE125F6DE7405247147828502274E55ED9F81FE269782183056032902A585C020F534FB6747C7E08AB788723EA7A38A70F77B3D6378B707B7B6BBC7DD86CDED8DA5C05B86DFF000772D85494BB645368B2A03FECA6D473CC99F2AFAF5F0EB6AA369787E42C4C0A2A407AD7A8E1D1F23AF24DAB855231AB94414073BA45055CE9D5867AC6CD57A062BD05104144105104141A0274821051924FD690DFFA9812E6AD90CD8FDBBD2352A0FBA7CEDAC794BA405B0362EFD1FF0010A01F533F51C9E1A2AFDA4AD6C702CA9B8E22008CF3C8CE7F7DE9962C7CB04873EE8F5E1E6D95551294B248200701EB9D3F1EE90DD58836A4DC1085245BA14E28AB294A50546328D07330488AAA62B13B8953920A4289198B97BF3D3CD8AE65A9050ECADE20063992DE5DF83C70DFDA0308C53DA3BDA57F97DEBAB6363B6096EA2C6D41294DF2EFADA1C55D20CB6B2CBC9E268A47BA60EBAF8E7E2DF8C932F1589C31994015F4EF3B1008B3DB5FB08EF5E0AC37C8D9F2F7C0DE6AD8BB97626E6A6A1F8F18C3FB47ECDD6D87ED134AB8C47107459B9386BAD3A14E24982A43AA2326C1848098F7644D7807C73B6133B1335654F551777ADC1BF0FD523AF6CC98997BB5A8636A6552CD9B9C890CFC364366F07BFC2708B4B2BB536A7D8441282A28293920E9255C31C5AE7AD72E46DE4CA252179977229DEBCB99D62E122724A4070C33353C1F5EB5E81A2E24F1A44127976FD07EDA74A8DDA1B6538896AFAD2487A3BBD5AC09CA8D946D37FD4FFC7461EFB3B738F0B2E2A1D0A002B91999F211AFD67388AAB9C4BA94AA33DFC9CB1A3C315000D81072FCFA884D771E0E4A24C69C267FC73D7B1E74A2279A90A26D6B31F75AC69B81BF8D356E3AE55890B6BE416D27333ACEBE7039FD9A7A8C4501053C43FB670D952BC631FE3A540BB31E845F36ABC48B77A88E6077313F3F874F853A4CE71424BDD89667FD7B1091C0D281C7176E7D1BCF263128CDD254849139839120C41F879473E94A267310C4BDEB979E6DC5E194CC2906D6E4FD2943AB5B330F9BB94C6B19794FFBE733DCD3C953C13A72B1CAFC1C5FCB268A95914039DBF421F35789809F78F48EBF796524E7533879EC0390DA3F3F400E6C0D2F0D26C87FA5A9C8BE5E63D6B9C48B5700C448EBE7E7F1F873135288C40342486BB1A7BFEA1B2B0DBA93F4853DB5F327F5CE1E22ED2980788EA2674E739E5AF3CEB2B9EC7F950330259ED5E37E1AD2F0CA64920B817C9A9D19FBE6F0EDABC40000E2275D75ED964639FAEB5A0C439FE56737166AE74B65DF46EB9248219AEC452CFA57F6CFA44BB174D142409CE7F365D7B76F8D6558A2C18B1A66D72F91FD00781762B94A62E03E5FAA7A4394BC8509063EFF005F856AA9F675543D01704F17CA9701AF0D8CA5120EEA8B543547A5CF768B7EFDF425F58E6408EF20E7A9D23EF3AD8AF7EC4E4EC4B70A74ADE2C1844BC9045F3ADFDF488972E10391CA7E197DC510F100877CDBDFBF3868BBA41204191FAC511BC34710A767872F3F4FDBD28821C356E80DA78BF3738CBE7F7E7440E0355B480E1E16A8C8039F2D75FBCE32F2A23054407A9CEFE7124C36DB2C2595092999F5D2328D3EC5109B2D4ADE0A2125E84FE2BEF8C475C59A9D27878403D49FF7A7C0E9D688583EBFB6B5BCB288E368A6D5C2AE1319C8F975EBD49CB91ADB13212AC31555DAEC694CDEC4DFCAAF0B0C46EA00722B716377E197DA164A1291A09E754F520CB9C9235AF0D1C3F2E0E2958426621C3024358D3F7C757C9A310FB40EEE0EDE6EDAE1092D0BBB2BAB1BAB22278D28B7BC6DF7818132A4A2044F43578D97354896921541DBEFA6BC223664DDF514545CEF1700F7C99835ABCA32EEC86D17F37D8DC1136CD949366DDB25C7C43893628432EF11131250784822728A4B6A6D39A842920B8B67AF46E8C2199900CC0B0A502FFC41649B0A8F4CBD623B107AD6E5C5E6E2F382A519929C95E920FCAA9B331866A89726E35CEF7E5167C0615E50243F1CEBC8699E67388A6908615C4D0CE79F4FBEB1E94DD52CCE340EF4A5D9CDE85BA5A25E5C80C10121BFF217F6D5ABC2CA40721C580547398CC41E607D018EDD7518204EF29245F8335B2A55DBD1CD17004BFA40492D9FAE7E86AFC63CF01BE9F4F2E9D2B7124203311C68077B6B9C29F315C29CFAE79E7133689E06D0907213CCF53F79C69CB2ADD321D4E41A376CC598D73115DDA65E6D1201AF2341DBDB9A44F5B93A8F21D0CF3F9FD6A670B26A29A92C3D3BDFCA23A24D1A791A7AA4800D1886FC7BEF7821AB90083A0EFF00BFAD4562177702C79585FCA99C108ACC0D0CF2EB974EFD2A0D52809A565BD2B933166CF9C3A4A5CBE432D6FF00DC362E01208206533239FC39F5F86B50BB63103E5290E5D8D7CA96BF1E42D0BA50A5073BA34D7EF15B37EE5AAD2B65290858578E63DF24084441CF339CF2E432AE458C49FF0024AD2186F397B9ADF46074D4E50CF15864A812A033624DB50347B5B2D6B14D9B571892B106AF54971AC4187985A3320A5C6D4DA723AC050991EB39575EF03F88666CD5E1C15EEFD686A961F50F4AB7E1E2AD8CC227EAFA458D8703A52AF90CF568B0FD9331EBCDDA6F276F373B8A5D04E0E8B9B67F669BF10F02BF13C77777E18510930A589E0CC1F39AFAFF00F00BC668C56C0C24B54D752928497232C8BE742F71DDE394EDDC0033D4B523EA0EC5BFAF2D63AEF5F41A394C144105104144105609604E81E086C5414A206467A743A799EDDCD343FF00BC6A0FB8673F878457FC8E56FCFEA3C518498FBCE9F4914E9EA4FE217921C025E9F9311EA6D2975C75510A02644CC40EBF1FD269AE3801289CAA48FC1D783BE74021F8A25290EE6F7677A76E2CE6DC2CFDB4BF1856018D5EB64A549B37CE52238585F4E7979EBD66B98EDC9E5089CC48FA1449E878E59F0A350BC8E090662E525601DD26B424B90731AB5F83691CCCDD4356588AB17DAC712955F5F5E5CA5D5C02A2597DD6D3EF6A0C0CB58E5957CD5F8CBB4272FC47899695AB777D4C0167A1CAE6AF4E7725E3B8787E684609296C870ABD331703A8222F5C470DB7C495F895B214E2566094CC4188EBF4CA72EBE57F11E1E74F4AD6497A972795EADA67D62E586C604B7D4CCD98AB57ED61ABEB0DDFC1028173878652204690398CBEFB5719DA089D2A6299C313AB54F1274C998F08B2E17690A00A532A8EED40D634FD45B17964193040100F4E5DFEBA76EED70F2E6CE35A825F8FB2F406DCA827E562C2C0726BC7866FEDAA62354BE06C27A75F4CC0EBE7DB3E55ACF0A92B292F562C03D40ECE33F485400B5125C0A7A33F4881BC7413CA679F4FBE7977CE45665CD63987B81E4783F1D0BDA1CCB96EA029BBA9B5AFF9FBC356AF3812124E63F7D4F5F334F11345DD8E9996F5E196A61DA70E0B101DF3D32CADDC3DE8F0FDBBD0AFCCA811A93F300E59C098CFB9D69DCB98406714B17FD8B37BCDC9C28091BA05726FB5B958359A82262DAF416D2388F38CF3991C81EB3F38EA326794B3392EC4EBC49776E3DE223172B72636E8A52835F4E36E3122DDF640A8E5A139E44C67CBEE29FC99CC41C8DA9CC6AD5E1E511D324850702A323FD39E50E917C018E2CB9EB23319EA6A630F3892C72ABE5CF5F6EEF0CD72B781A116C980CA262DEFB2199E5AF78FA8CA474A939739E9F503E6071AEACCF943654B20B338399B7A7DA1637C028C100E53999F4C8C4E7D7AD0B985C392F5B7DEBEFBC64E0C285535EBA51EEF91BBF1061D377C081EF721A93FA7D6739D2693336F550A8ABF2BD7A7286D3304E480917A86B7603D4D75CA45AC440481C5A6B9E539763F31FE76F9F5B06F3ECFF7867336706074ECDCFCBD987EDE240089F8931E79447DEBCB22702CD57FF8F0C8DFF3C4086EAC00161D48A7EBAD32CE185D3E1C714BE67498CBAF79CFE7CF9C8C82E9F7DB4CF81E79292E58969DD1D6235C744E7F7E67A9FBEEBC291EB69E3015966796BE9E7E74410ED0D1CB98FB39988CBEFB9042A4418A21BA955739F97EA1CA3F30F5FA1A235F9838D32F6605FE63E9F4144642C6448F2FD4534463E6F151F7CE105B3C6A2A024E4797974D7F7E666A41697C29A3B8A9D397E6ACCD0D5734905CB0CAAD4BB77F79C79F86FF00C7D23FC7DF5AA74D40F9E684D49715E9F807C9E35130A894B8C9ABCADA583FE690A8B14DEDBBF6AECA982CB8953660825685465A183F09CAAD1B3641296C886E4DEDCDEAF7AC6AE5F526952EF97703CE30CEC4E38DD95EED1EC6A8F05C6CF3ADF829D14A17CB53878473C959F6A63B5F0CB014F6BD3DE95A178D92927871EB945E7F855B1FD3590A503C52733EFF00BDDF406A80B5FCB9C47F17E87DFB348B66CEFA64241CA84B71A574D32E791E1764FC3FC54CE1415B31622A479BE61AB4CFD0C86F8073705A90A04802201F4A9712A868321F904B5FAC60CC466A0F7ADFCE00848E533D62994D9612FA1D453D83EC504682725CEF100017CBD7D9F29063F2A2639C41C8EBAFD08EB4EB0F237D20DDD89A56BF815B31ED1018C98664E5682DD7A0313D6DCBCB4E833E8627976D2A664C90801C574EE0D087AF38690F0B9C23873D351D67F6CBE149E24356CFE6037DCBC10C9C7323973FD797A49FF5355EC49604D33FB7BFC410DD4E8EA66633F8F7FDAA2A79694559B2892D9BD2DC5A0FF2025410E6F52E5FB701C74EAD5C7233275EF33AE79C7D39552368CE2A252EE1CF50ED7ABE46F0FE54F490C7DD6F7B71B7DA85105B047AF4D4663AFD63D2ABCAD9C66FD6CF9E55604E4281D9CB5E9CB49CB1BA4920BB3035035234D49BD32CA6F04FF953E71F08F9FF00AE5580A5E0D48209494A833508ABE5E5C1AD15DC496DE21D4E7E902E336D3AF9346A6FB495CE2BBB9DE26C0EF5F034ADBB7C26FC338F968101D45EBACDAB25DE18E2090B2654401A7427E82FFD3DF8C97270D8390A9845500D7FF21DFD98A2ED8C37CCDF3A822D62416D73D1F32F947786BEDF479FE0A20828820A2082B04382350D0423E17BD20FC7BFA521F24EFEFBEA18FAD3DEB09A90492411580B64822467E7FB5390BDDDE24528CDC183DF8F0B7185659DD0C47B73F6310F7E16A6DD436616D14024E878950207FAD79C0A678D5FCC945097048CE8CE5B2357FB71877267A10BDE5B9B51BD72A458DB75875C5DECB6376DC4853AE61D74A46A724DBB8A39C4FA0F2F3E79B5F63E23132E7310C50B26A43063D4D1A85A99449E1F1D2654C4AD2183B119124B0E0E0F91E71CC7DC03CDB78662D6B700B86CB10BB45C30982E33E2DE3A10A713FDA15C8F31074135F32FE366097B3FC49893313BC42D5E635AB3EBE6CE4759D838C97330882924067EBF8E71B14E58DAB0FA2DB80C3852A4AC0050A044FBB9004A4644472CC579A76A6D5C2CC2A925237AA0D85EDF7BDEC0DA2D322715A4A81293902F6B56D434A5BCC45388336E0A9B42488033CBA7F831975CBAD4713E1DFF00B8952E58649ABB55BDFE844CE0D730A52B529DC9601C677FCB77D31BE3764A3C4A052224C73044E9F5D7302321155BC4E1E4EC452BE724109D450BD0655AF0D38C5C301342C01F507FF769970D39B73118DEF1F0CAD6D282894C024091FEB9FE99CD53F1B8A463310664A1BA1CB3160CC464387BB0B4C895BE9DE01C3E59F3E16CF567310370AE324E639E7E83989E5FA69AA2896A772483AD7D93E50F25C95381666636B0AFBCF867185B738894A81132333EA0F7FA75269E4A965C1736CED5CF3BD80FD987F2A5D1B93D7304DB8BF68593C7FDC72E93CFB7CFF6A7299643D546B93FBF5F387E84B07D4797BE9A4485BDC708824FBA3B9D7D7EFAD2C990A507DF23AF5D38F11D1A22717277E61666B55F83D439F489469D2B88240E84FEDE5CF97C9E4A429000FE4033387CEB71AFBBC46AF0E6AC017D0575191BEB0F1B5AE75240EE7FCF4F49EC2A4A4952581CF9BB072D7F2CBD192F0C5D8BA6DAD7DD0F0C8E92F6EA591AFC7FC6911D27D2A5252C30A87A3D6FC03D6D4B521AAE42F7EC00193776B663B8BC39257248574CA4FCFCBCE7E94AB2D44AFD1DC9D7A37EF285D32C0480454660DEA2FE74ED0B0714343F7DF38AD0DAC08CC1F7F68D572C2ACC3EDCA86164DCAC0E73D79FD72F81D3CE912B50140E732F5EE7EDFDE9FE383763CCFE0085917BC3C8F2FBC8E83CBBF334899DBAC2C43BEB93035D350D784578601CD0835A0FD71E10F5ABB42D299E2988D3A73CF954DE17100A035F314278BD7D1A9D622E761F754D501DDCB8BE56BB5FA457E1970FBAA10399C819FD75FB9A72678D5BB76BFEF8C246436BE9DA9F8891B76F85213AA87EBD33FF005F183FC814FBB57CC7BBBC24A400D56E7D7417A5A251A64902018E53E7F4CFB0AC89FA8FD757D783C375CC4A417E36FB711083EDA90E28149F203B0CBA65F79E547CF72CCDCF2E758899D8D42565390D6F09FE2380C9428913901E87AF5A772D3BE01D74CB57F7EA23418C41661424F1FBFE383C02E02D51C0A493FF006FF5DBA7952FFE31DD7ABE999F2BB369F78748585B0B12F7B7DE1DA1A52E22339F9524A94437DF3E4C215DD6FE4F5B337DFDFD9EA1809480A20913A41E87FD7FB9DD58A4A257CB2EC5DC5B577EF91A68623E7255BCC0B0F798E87DD28586D133FA75EB3CB9F2390CAA1BE519B38A85002087676E2C3FA2337AEA90C039248776F2A97CF3F21482CA6CAE8DEDC00BB27213E1A3374920A678498804C933A0F302D3B3D69414A480C5C16C88033073CEFD291A4D5AD52CA65969818825DEEFE63B738D24DBEDB9C0377DED43B33835F3FC09DE2FE2835C0A486D2AC3ED429297E620CA804EB988E8697C66CF998B973264B49284B6F100D09B7986AF28565624EE21DC29EC431A5E9CF8756AC6D25DAD0D043AEBAD2D4E0E24A50A95709CD32239A4F7CF9F3AE678FD913118A2681CB90470CACCFDEDC4C5A701894996135B0EAEECD5A8EFC018669BA64F17BA470827DE033D7439CFE952182C27CB29DE5001AE4B00D6AE9A30E62D12C10660040234CAF47D1B5D3BC3138A32501C436EAE54470240E210634FBEF15253664B427743161C0F2AFBE1902A9C028D4A9406AEDD731D61C33749791C7E1B8D8E8E260EBDA6A0F138A4A7FDAEC6C050F0B5ADF624C36560940D161455672EC03D7AFBA449D9BA16522149CF22AD3C869DFCB4D69FE071682907779BF17FCF688D9F832164A957B36A19F5A56F9F289F69D6DB4F115A4F380738CE7EB91F954F4B99BC90ADD773A39F57F7C5A18AA510696199B7714FDEB0E53C2FB7E236EA013AB64FF504728F4FF3AD23889732623E942BE907CDAE2BA5883CA90D953128594281E7979B7BEACD16D393EF24A0680AF248D39E9F7D6ABB8AC36254584A5B1E05AE19F8D3B5612389402DBC003627D7FB0DE6611530A0A212B43875F70CE7AFCB9C7A659D456270D8A5A0A132261CA8836CEFC1AE7CE3230867B4C133753715A7076E5E9788FB9429912E10913A9C819E7E9CFA4D55A7EC4C74C98E30F38392EE93577B8A802DE54021CA6589742B0C9E3A59A9EF9C38B6426E5A406DD6C83202A72272E7E9EBF0A5E56C6C52505270D3778D2893DB8BFBAC213E724024AC07C89146D3A8725F95E2EDC1F09750B0A2EB5CA73EDF64FAC9CAA2B1DE1BC7E20B891343116496350CD42F5D7FA82C4E20027EA0A73FED6D5A96D4D3FB8B6F7C1BBFB4DB6D8AC5B087956A0AAD977AE2EE2238AC10AB96F8091AF13606712623335DEBE11A71FB1F13864CC9733712B41208E233CA95D32A8885C60F99254776956A57335B90CD901DE3A7F5FA248F3641441051041441051041441056ABFE27A7A882193EDA65797FC8524C8FFAC1EBD7A7AC9A6337FDCFC3D4379460F0152439FCDB2E3C9A22311B5172EA6DD79B2FB2FB6E03D16D9466398F7B3EB4CA700A95301762936E51906BC88E5F9F28E4818DCFFB4D6D5EC662292D605B7EF32BC1D6E7BACA1766C179DF0C9F7412E2B329933A8D4D7CFDF8EDE145E336962B13B942546D900C2BC29C9BB751F0F4E57F8682972D47009CDF96B4A5D9E3688DC5AA516CDA96953B61C456B541E20F105B20F4E129D7B467957CF4F15ECF3B3F1CBFA4277546ACCF5E6E5AEDA5EF5B8E1674C04925442B22FCA9CD8BB80DAC33B94A16F39CD27848F513F0A4F66ED02256EEF55B95B8BFA16D22CF849E7752924B55B2A1E2EFF63DA2C8DA048085102241FBFDFAD527C5A83890B533F27AF17B39E5578B161B1664EEDCE64E57D491E6F4D2310DF31C6FAD406A731969DF239CF49CFBD50F0F8764B171C7F5EFD04742D9988F99870ADE3567626E5B566A56E395A229CB52675075CF2F49EF3F5CA9F210ED635A119717A3F5E59C4BA660480A772FC185756FBF0A0864A678544427D7A67D2453C9729DB2CEF7A57D294E5AC3B97352D40C0B683576D7CA29F0BB27EFD29EA25B5198E65ADE97872165550A3DFDFE22B4359E83D34F5CA94F9645037BE548673D637D8DC69C75B57FACA262DDACB4F86BCF4D7F7D4F3A70843007B7ABFBF5864B5B3EA7ECD7AC390214B1D08D3D69CA406043977A8A80C7EEDEA1E192CBA8D5F4CF2896B6E5F7FF006A7D2D0C904DEEC3BD61AAD63789A97F76C9EF0F29E243243FBAC60170F0526BFE47DE519829B1A13CCC1053199FCD5CE0855B742541249044E7CB49FDBE039E54B4B9E515A002F5AF419817BEBD5BCD92958AD40A8D47937189961C491131FBCF5D233CFF004A9097377F3A6751A52BD3CE2371092806AED6E00E67ED6E222E9B0B42EB285C4CF4E601EBDE239FEF272249981296724D1F2A9AF3FC1C8C40E2715B856E5865ABB726157AF9C4FB162604A7A1CA472063D7EA7BD490C0934DD069907CB835B5D2B77020E763807482EEED50E2AEEE69C69AD844B23096D684AD60151C8F5CB9E79FC63BE7AC7CD93F2E69435F30DA3B7E3AB06110F366898B726996ACCFE8CE7AF086AE60CCE5EEF6E5D27D0CE5FEAA5B0E96003529EA6BF9E3485253D1C9AB9ABE9FA7885B8C3421F52909F76004C0EDDE7A7CE9FABE9431CDF7BD6E3366F3D22770F301483C18EB9559BBB79C3450F0647965988C867F4E9CA34A8A9F340A02ECE031AE4FCABF7BBC48865243D7F3CFEFA455E3712667D0647EFCBA9E548FC9F992CCC203F70C3BDC7A738653D20ABE9CB8BDDB9FB162EF0D9C741CB2806013A1FDF4A889D3C492524B35F76FF8E57A563544A2A06EFD5AFC32D7A5A1CB0B6EE91E0A9400642811944AA639E7C8C771CAAC9B1569C64C4246EDEB93B8E635E3530AAE40975DD2EB66A529D01CB8C7CC77F14CDF9E27BB9F69CD81BFC2EFD617B118B205CF86E194B589AEDD242A22006E467CA7B477DF0B786938FC0E2F086582B9E84AA5AC8000DC054412C58E90EA5ECDF981134A084E8433F3C9DED51C23BADBABDAAB6DE8EEBB65F783865DA2E19C470AB452836BE21E236C32873249227881273D7BEBC3FC73B226ECBDA139003142883A79778929527E54C1282482681EC5B4E2332D4E4F192090EE182E90402252AD44C1E13D3420FC338AE4D8EDB0AC3120120A6843BBE4FABBE5DA26A44D32D5BAA72E29720357F41B37B88696D6A9504BCB2A434A909520C75060F98EF9FC9BE0B6A2B1AB4A12B2497CC16E9E553D21CCDC6EE4B2CA049B05337170F4F2B4480B1B8B53F8AB4745C253EF78774A2B4FC04F5F98EE2BA1ECAF0CCEDA094CC082ACD88705CE74EFAE4E5A20B15B551BAA4EF096A3729A372CABDCD6E6E9BFB5FB376AD78B8E5F5AE10FA5243BC4EA18B64C12014851CA4013AC98EF13E9F066293382132949723F8A481E9C34E4F1569BB6D3281419AA5EE9242965D44939B73A35338B77FF0077B77CD2D4D5AE28DE3CE03019C1DE6AE5E39CC7083A9CC0D64D744D85F0FB153F70190A24B0FE3DB9F3E111D37C409208DF14ADF5D756FB5ACD01886F796BB95A3677775BC3BB7CF086DDFE55C76AB3191050734FCA39E75D5F66FC1D9D88097C37F201C14126B6A31A0EA5A910F88DBE92A7DF0791C8D296CFECD488C5ED17B4A6D09E1C03774FDB30ACD0717C2AE90424E93C32272CFAE7356D93FF004FD3310949FF0012EC7F8137E9D9C6778889DE25912D442E72535A396B86A9A5BD9AD5EA775DED7F8BDAA2FD8676570E75F9E2B47137CD38D41812D819150CC6798AB76CFF00FA6DC2CC94F370690B0CE4A0022D67193B75B8A3B997E324225309A9292285DC16E2F51D351530DEDBD987DAF76956538A6D36CCE1ED4C7B9777AD40503966201D34D7AD3FFF00D9AB03BC01C1CB482D532C7FFAD5C3F5F26589F1B2508514ACAC8FF6A4BBF4773C47DC45FF0084FB126FC5BB768DDEF0E2E332E0B3C56E3F0F9CC16E53232D7F5CAB63FF004CF8100B616496ABEE25B90FA6BA655D33819BE37132BBD3522B42C08D2E696B5ACF998BBED7D8EB7CCC883BC6BA911A628FE79C83F9479721DF5AC7FECD18225BFC29433ACB19016A1AE79E5C1E317E2E249AA8825EFF0082CFF9EA6D6C4BD8B77DF89626F0777A37EDD884F86EB2318B808536EA7856387860852499D35E82ACBB13FE9B64C85A66A30B2928490412802D95B80FC55A1F7FEAC4AB0E874CC515BD80B87BFEB9DDE3AFB5EEA8E530510414410510414410510415AAFF0089E9EA2086B7124122252329EFF3FBF8B19BFEEE9F682231C5388B76C28053CA2785799004F3233CC72E94CE6BEE299AC6FEF568C8B87D6388FF00C52F7ABB3BBBEDAADD6B96AC5D39B6CBBDBAFC2BD6012432D8758FC42AE543FA890599E18E8794D79B3E2CE1B0AAC3CFDF03E66EA892C1F5CF4E9D5ABD9FC15B2E6E2704A9CC0C93BBF281077854EF026D5398E7AC65CDDEEF16C36EB6630CC6F0AB8FC4A95676DFCCD09585B81C4B484E406842C2B881CC19915F2DBE2761D29C7CF12C06DF351C4D45299E95BE51D065EC6DD5268F7BDEADE7622DADAD95FF009EB0D5B25F752E7094E6A104242722147411967AEA7ACF32D9B2267D34AB9CAEFF006F47B189991B294E027701A3839F6E3EB5D22C8C476B306C41F559DBDD34B7F4E04AD255C51A44833F18D09A4F6CE0B7904A810C0966A1FC37BD625E46CC57FBC2695041E5ED985E2DFB9B55A417142352126263B8E91A76D73C8D2578620B252284D142A75B8E00F23163C12C4A40402C2C374D388ABF0AFB10E4B6E15240854C72CF3F972EDCAB797870186EF30453830E1C1F8C49A2752A5F997E3C85EDAD6193D6F0E2840032D4769FAF96BE74F65C9DE4D1249A01981CE8DC8F387889E08A966E37AB52A1FA7F690B73CF847A034E938726C03EA5DCF973B08748C4351C97CEA416D0B8E7A7185516AB1052011DB9FEB97C8D60CB656E903B38AFE5B85A109CB04EF6F73D5FA72F6D4906D250334EBD35C8E91918EDDB48AD9282E1D8F0BBFBA43652BE92A0687337E9E77E25E160C29C25620054403AE5391D3CA9FC990017501C9A834CAFD290C674DDD0C286CD9BF11A0D3D6D0F5A49447167D87AF5E84D3A4A2B5AE9FD4332B2471CCFA43D4A4A9214220FC72CAB785E5AC04805DF5EBDE91413026915FF0023D3D042D14F18EFF7EB4D8DF3772FDF2820E34F7A6333F9AB9C10DCAD5F886D0028F8AA30672000CF8BA65E9F11496EA8AC685CDE9419F514EF1B9004B51A029A134715F3D22E8B0B65BE0F014FBA7324E5EF699F3FBCF5A90C2A14A50487617239BF60F5EED15ADA53D32D248CC540671CE8733195306C25E6EC99E25227DE397427AC7FAEA60D5BF67CA2C97A91600D07EDC76D68DCFB1D8F24AAAD90E19BB7A718B81AB55208E2E123E711967AEBF4AB3C99296714D5A9A8F36AD44434CC4A8B3E6ECC752097FEA1E1B67D49050501267224E711F7CB954262E48FF20B00C097A0CC163E8FAD6B09A66282805D9D8101F5CEFA72CE18BCCBC38812920EB1DF58F2E7D0C75C95932E9A6BAE7EB125266924390C2D50F415E86D119728096CF101C40667D632CA7BF3F5ADB10B094901ECFE97E0C6BC0F0892933095259C02406B5BCF5E5C1A2CEC4042A412069976C81D33F3FD0D5771130826CCF400D6FAB53A69C226654C06854406E9C8F319D43C44A6FDA6DF6AC940F88E85A92A3F97DC049063AC65F5D6A730E12AC0B9DD7637A9E47953D3842CB93BDF58766CBA926AE7DB5EED98C41ABB75E690140B0A09254323248047C33D34AE6FB5E62C4F5A52400F91625EFDAA2D47AC3B9528001D2406CDB4A75CBD28C621F1EC64E03678BE24B2536F8759BCF5C70FE672195AD01BD24A4A7DE274F4136AF07625B132C2D4FF005076342E685FB6BC8343D421139280DF5289DD24000006B5C9DB99CB26F8AAF6EBDB4BCDF06FFF007838A9755F84FC420308B852BC40BB36D4942923300F1B6082328AF6EF808C8FF1E4AD4582836F5890C7798926E07763589D932E504EEB0A52845D801CEB7CEBD23B37FC15F7CB8CED86E6AFB777B417EAB9BBD902B656971D52816EEAE1D2C8682C9221B48072E523491CE7E29EC1C2E2B6962276113FE8A80202D8A8A825CBF026C29C4B52313E5032BE61037D2A0CC03873EFD873D8B6AE1413738580A0A6D633232214A2A11A99EC34AF17F8B3654CC3CE58DD206F1A686D53AFEAF0AAE58090B60481FEDCF5D1EE6BDE13C5EFF196703C51BC0ACDBFE6584301C4A31042BC2BB2B495816BC32A594C7BC32CC8D75A6DE12D98B998B96ECCE9705DEB40D6D056D4269159DA139482400A21408DE4B306C89FBC6BCEEB5BDFAEFD715C4B0D5DF60BB2F6D62F29B76CD2EDC59E24B4F12802DB79CE499131911CABDE5F0D7C2523132646F212B2424071C017ADB3E0383C5036BE38E1A5AE62C929059DEBF51005C9CF8E71B8BB27EC2FB3B89B76F8A6D9ED7ED1E297AE2C9B9B07AF90F5982930021A7133C2A2339D743AD7A67667C1D938D08C40908292C689B934E3C3DB18E6BB4F6EA913968485D0515FED2E1D835CD6B9BD2367765FD99F74DB1CEB16D866C761EBB929917AED833C4484CCA9C0264E7399931D44753D83F086448521F0EE035D2185726D397EABE76F621614B52D2056809DE1C6ED52FC79659CF0CD8AC0B0D65B0C61564D38DE9E1B290948E5A0CBD79FC2BAEEC9F0260F0A9015252E007DE48C8532E178869DB56729759C5292ECCAC83BB87B7AF089D18724A4B72584447F408491D00D3BFA73AB6C9D818294001290198064836CEDAE54D4B988C9BB4C12CA56F914FA9CF5D32C8D3BC7AC614CDBA83BE33CEA89FF00F6AA67CC67E5FEE2909B83968594CA410336D45AB972FC42C3173152C268126A00C859868E21FA909223810465A8F39E823427CA915E1C9AFCB7A55DB203ABD3DB984CAD4EE951A8ABFA694EBCE17693C08E1002626001909E9FA8EB5812D219D0464E406A6B7E9AF184D454413FEE3ECFBBF584D4DB866081D3F5FB3D7E3B7CB4A88FA7300903234A9E3DE19AA54D2E778EE8AB3B1A7BA65DA18BD64B716D289013EF78C53F98FF00D6391E433E5E662D1853265482C9A32775C060D77F366D7842D2F18A928092E487A1B8E219D896E55346789EA46310510414410510414410510415AAFF0089E9EA2086970471251FF79F8A472FBFDA98CDFF00774F3682239E50532FCC715BB657DC0009FF007F6299CD2D2D674493025DC3B5C5B9F1EC3F6C3807BCFDDF2F7D7EDB7B518DE3A97719D98D83532D7F2CB9FEBD9B6AC4AC4B40B6CAA5293E280A3FF909D419F137C6AF14A70B8AC4614AC823783386B1D1ECCDFBBFA3FC1189972363CB4B805AD402EE4906ADA64FA3455B57BA8DE46C0E23885C6EA4AD9B7B3522E1581A83C1A7D025C0D22D99038E402003919F8FCF2F1763063F1F34BEF6F2CD2F57A357F74ABB45E13B430CC085A083BC1DC528D4E2FC5FCDA9D99DA9F69EDF0D862F82DC6C4B7B1F6CD2516E9BD770FBBB274F00285B8870120F1147171644C8275AD363EC733A585897401E81AF9FE6BA662A61F68E0F07BA9993F794B2774CD507357A13CF2E91963769B92C6B6230C38A6D3631758AE36A70AD4871F53CDA55E21C805C2C08239CF789A8BF116004996BB16A65462D7C9BBDE8F58954ED992A2109A519E8C5C6473F224114CCE60BF4BAEDBF1BE84B6E70C14A072190813398D67227E7CC66A01986F760070A6638E5911AC3DC34E48427754A50A9BBD0F1B3D6E3F5169B6D7F54C8124E51209D7A99EC738AD928208FA41E14CE9FBA7AC3D97354A2EF50C5BF23B7A8872F5B4AC98D6232FD60FDCD3F9325C5807A923ADF2F7CE1E89EC5BEAB5C56B736FB0A425F85EDF2FF00FE4D3912C3B96E82ADCF28792E6D01766C9DAE3C8F0CA1C22D55C2397CBA763D64F4D05349D2885BD0699655E7DBAC60CC4851049232A8CEF7F64E96854DA280399F847E95B4B95BA5CDF2ABB72F7A9A420B9A6C1BA1F5D7CA1C36C10800EA3969FA7ED34F522828C746FB4315A8B924BF2FEFEF48AFC0EFF3FF0014E25A094824004703EACFFA221BAA687D1AD7CF979D042C84F0A427A4FCC93492BF91F7943D45520FBBC375FE53E9F514DD7FC8F4F410EA11A6CAB9E67D608298CCFE6AE704327314B4B7B945B38A48B8585A5906388983300E663B4763AC4961F0A66201670D76E26E5A8789A0E2F0DF133D32D0A1BC58EA6EDC3EF78BDB656DEE4DAB9E28595A9692041260AC11944E635CE0F6A929185DD50200BE966C8356C598B5E968E79B6B68B0500482C43F77E347A072285DE33BDAB45AB76904442465A119099F53CAA7E47D1BA416CB466B79DF2ED1CF66628AE6106A4A9989E3ECD4085C9813F2EB53327115634D06BC2F56A97F4891932B7C0DE0FA021FEFC3830B887CDE6CA08C8906077EBF1FD32A6F352262C9157B51F953BBE9084E64CD2906CC468EC096F271CF488EB911247F8CE073EA273D73ED584A08A873AB0A67F91ECD1590B3BD514E1AB54FBEB10576725CCC4465CC41FBF3F8534C67D20BE6E3D07A889A90BAA493FC5E838EBC05F5AC59D7C499E433CB94683D4E507FD554B1AA62483C4D6C497FC8112B2945D24D5CD46B58C15BD0DA74ECA2B09BF52F8038E96A6624BAE25B83A4FE61CF3CA7954A61B1891830924D4103880F56B0CF21CE2D9819489B2DF7492DD32F315B74317BE1CEA5B63F1474B86EDDD0A3FF009A52AD4CEB320E939F9543694933662940E74E3C0F4C83D21499282544E45DBD1D9BB5F5E30AE2CCE138D377982E22A5A19C4592CB8B948042D0A4E5C4623DE396B9EBD5DEC7C47F87392B3A82E2F43ADFBD7BC3254D9921237777792E6BCEC39DFDB8E72ED4FF000B7DD16D66D5E298E0B92A77135ADD5A7899D5695183EE480788EB333A4E55DF7C39E3C184972E509E400000EAA076167F4FC46A36B848DE2EE0B1029997A598D6B9000B0CF9AF87DCE0DFC3CBDA9B6B764307BA2F6178F5CE18866C50B4A8FBACA4A816925293EF3B23203E157FC76D71B63672B1213F313291F5CC4FD5FC9DB78F90CF3E1166D9D3938C9414A3F4AC58B034D327AEA03738EEA6C5ED939B7F81E17B476166BB4188B2DB854A6FC39F7539C82275D395797BC6EA94A9D34B3073609A5E8CDA9BF7687DF291293BA15605B78FD5516EC4339E7AC648462372D5E165F6C2DCB64A4359122EBC44C2C1FF00BF00C8467E99554BC398E9585C6CB4A887DFC9812E68EF5A7BA44162F0895A14B4A4B170C4684D40B7DAFCA2C3C69FC736336A6C76D764AD0B4FA9D4AB14B1610A090D88412A691D51C4A12635F4F6CFC39F1961F0A8C3A77C02371AAD987E15FD8E341DA9B344D1312B4A54820D161C1BB16ABB1AE7C23A61BACDBAC076FF006558C5F0FB86BF98786D0BAB60B4788DBC984AC29092482A5856A79F6AFA6BF0CB6B6CFDA1B0A4E20EE1514A5CD08AB371CB36B5737E09E20913B0D8F3200795F5329AA033B1C8B74A335A336D9BD70F34D2DC6D293C2A0490414F0E4338E63EB1CABADE1E7618A3E86049B00199FD05FA031569A908DE0E09241BD6EFF9F6D1236E14B68294482641CF9490397A7CBAD3933124FD3514B446E2012694F633E3F68F1693A491DFAFDF9D369AB510C0916B58DB8D5B8F7A088E54B2E6BDCD7D214524FBA00CE0FE9D7CE95972D3BA3786F1D4D49CBD479F3894C3CC9611BAA351976E514F0A872FD7E95BFCB47FC476873F32528DEBCC57B9F48F0156A01E9A4E9F1158F952BFE09EC232F2FF00E447323ECF154AFF00F2F851F265FF00C13DA31FE987216FA073F7A7A47A41E11A73264FAE7F1E7CFC8D44E30CF4129964849B0141C853AFA110D664A04BB528F4A060D4E3CF5EEF2A4A330510414410510414410525F346F6EB1F7F76AE9C608F098127956E7EA4D33D79C10CEE13EFB5713EE3721439FBD9081E7AD359B294C585FECDEFD3382216F3FA0CE30EA892916370E003586EDD6A503DF281DFA5466255BB2A627FDC50BF43D2364075241B150B73A5FA472A372F7D69B4DBC6DEB5F1B0368CDDDEDA072F52D06EEDD368B7529F19CCF8A0A21327F29AF9A7F1E70B8A9FB7F13B8B213BCA60E6943F7D28C23B278713393B39265A8540606BDC7B6EE23653F9433785CC58B858B8414A0149E12E04C2071E5272034823977F1C6D0C1CC93882B9877B7555AB9BF2D687ED5116057CD9450877DE04B582732696E022B76C2F1A2A53178F31C6078ADB4E292DA80038613CF5939913234322CFB276C48C3C912E83E96233F3CE9CEB1B842A784AD602CCB3F4BD59E9467FC660BC327180E366DEE5A696D907FADC32F4F33C46739D7CB2CE6AB5E23DA32F13F3371218D2D4E24B52A6BD75787A84E2490A0B395892C45079675CE8E231DE3584C3AEB76EB25B0014970FBFEA4469CB98CAB9FA702A9BF586152C34737E072EF170D9B8A526484CC724D88A695E009F6CF161BB62E5BB854E70100C426675331D065AF6D7232A0C0947D4A0EF974C9FA92FCB48B0C89A16414921C3DF81197BD0985525B500A854C4729ED9F91F2F9D2BF2CA064C3BFA0896952C901414F7BD7CC73FB410DF43F015B25612DF4B9AD6872A3FB685144A033960D416E0D685836952530400064244FAE46905CBDE53D1858396F4B7B31877ABBF1850201D483E46B2943172DC2355390C3AF28A0A903224C8D634F4A581000A026BCC0E3EED0D56EFBB964D9B7AFF0051E05A39854FA476EFE797A56E2790C1879F330D57FC8FBC8452563903EBF7F7D4F30A029D4FA7E3FBAC494921494A7302BD3DF0786EB39475FD08A67301770D5D780FEBCE1E478D34B796A6D00929FCC6321D3BE7A691396B48250A5D69535FBFB2D094D9A9942B736E9091212EA9B70F841295A94E2F242781254428F2240CBAD653B3A64D5E75209ECE40FBD435E9947CDDA6896EE199DDC76ABF38C0EC398C6DBEF430C6B016DD461D83DC2C5EBCE85062E02C40F00A642A083C53CF95593058612E504AB87F63234198B1BC57F1FB553312A4A6EC5B8532AD33BDB578DFCC330765BBA60A4250D969B0B6FF00B8A92D804C72958273C8EB5226407253FEE6F629EEA1A2878D54C9B2D4564935B59AADD80BD2FC22EB7D3C2E148C8240CBD3CFE3D6B7F94B0C1A9CC96D32310B2B045453343DF4D0DF23EF330CDC4A95319CC46B94452E994A4B39A6A1C1CF3FEA9133280400E0E6F4AE62D7E3D6251949F051A640CE7D634EFF00AD3A4495302492F9BD8E61EFDB5BC47CF46F4D2CE0EA3F35D1A22EE96912241CE08E7E9A1E5DBB8AC4C589798A3DAB6D2DF885A4A0A540105DDED4D0FEBF316FE26F22D98F19638D2B07DD466A11AFD75EFCB2150D8C9A54F50F561E879BD4F0CA25A44B24A83170DC882F6D695CAD163DE5EB0B4832532600244F2898F2922797C6A78B49528872378DEA1AA0E6FD386994BCA410AA82D421813A9FDE87AC692FB5D6309B6B5D8EC259722F716BF49B6208E1E162ED953BC4467F9721DFD6A5A5ECF9A8C1266BFD206F1BEB47A53339DAE22E1B2E7265A260291F500C4F3B3836AF1ED7D9CB6291B3D67C4485B56160544FE551F05A2634E608131CA44D57A74C0B5996DF55452F9BDEBD472AC667ACB9600825C11C6AD9674666A56977C87DBBA6987FC2B6E063842CAC0F155C442473839CFA18D4D4263F19FE1B38600936626BAB0F5883C4052D4A3BC72A3D052B5BE7179A509C3D1F8F425A9F08AF879A5294492A19408CFCA62622A5BC3A9C5EDA9D2E561D4A495AC0A920D1474A1E5F7262255226294523799E86AD7CB857EDC63E5EFDA3C6C46F5FF8945ED85EE2B6D8B2EC6E6DD6EE1D66FB6FF82A670F4AC05347F292519E998E5AD7AE767F85B6DECDF074C33004C9C4CB054B5056F9DC538DD2455B3AD8D23A6F86B66A9787960A8EF245413624D7F5C4E423B41BB6DB1699B3C2F67B09B54DAE1F66C8650852381D012809C827DDD4035E5CF14E07153F18BC3209DE2A50705EDD6BD1F37D22E6BD82B9725539442830B9A8F20039EF6AD4C677B5C4829696C32EDCDF5AC96148405FFC827FAA75809C81D469558C2F84B6A22709A12B2C527783B1AEB99B695B88A76D532F09BC4A9225A87D6972E96A3A45B8FA69101B49BD4D8FD8FB7B9736871EC159C5EE9050BC29DB96D372A1051C0D30A3C45C283A7581CB2EEBE0AF0F6DB9D3244B419C3EA43BEF80CE3B5BD961144C5E3B0B30A93BC9176B3D439E6DD48A868CE9EC4EB6F1BC4F69F15C2ADF11B7C06F956EBC351788E148238FC75003DCE1528CA4A41F7609D32FAB9F077C37B5A4786B0C95CC50225A6E540D783717E46D48F3C78BF1D286D198037F22CCCF6A9D0F2E1DFA34DBF72B7D564D16C2D9FF00954660A48900467200CC4448E46BBB60F6763E4801531AC6E69C81D5F818A42A74A24CC6249C95566D07EF3E7170DB0FE8A40293DF3826615D32E9F3AB14842D29014A7A5483FD9075FDC339877944DC7BA7BF48A94839E52272E7F2D69D5086207322BEFA43428AEF1079353957EE6F09A9B5932263A67972D07DE758750A034CAA47D8FDB8C26A94A2CA49DD15BD6F971B7B68F381CEA7E7FA8AC12B218100EA493E4C2309973011F50E4CCFE515065CFF00B01DA4FED5A7FAAEFBE1DB43F985BE5CDFF926DA9F4DD68AC36A004904FAFED434D37507A56B956DFBE7A0DC2161AA1C73FC74E3092DB5CE4091CA34F9FDF2E54B0DD23EB1BC75F67DD21CA160065024EA0DBBDFAC3BAD613828820A20828820A208299FFF0013DFFC608A57F94FA7D453A47F11D7D4C10DDF8F060F323E4AAD5740A26D422BA0AB0FEA088CBB48B8B7C4D09125766F3601E7C6C2D1CB3F4F4EF5078D6DC5EBB8AFFF0012CF96BFD46E8A282B20473D3EF1CA8DD0DE59E13BDBDEEEEFDC4A2DF11B7BCC3DCB79012A712FA9CB85708D4FBAAD3FC47CF8F8D5289DAF8A2C1DD437855A86E74B3DF9D5E3AF787676EE0E4AB7C2420170F7E0D9FE6F48D9FB860F8E70F6D6129414124640C00A39F3333023ACE75E2BF10A77710B0E5B7A9A71E8DC6EEF16613F7C024558DF3F3152CD5E54115DEAC2565214141294891D426398D41CA399A819001994766CC039676D21C61C28252E0877B86A0A0FB7BBC03EEE7CBD3C865D796BA79CD36C7C8242980AB3B7953B0D29D21F4B99B94670E3B67EBA18B5F1148515AB2931A73119F7190F5F9D454A4196189001B83F6D6BFD44EE08EF252470BE57B83CC748C7F89B79AA67231979E7D7282477CF9450A5B549059D865D3F35C9E2D582965C51EDA3369E62FD2AF10215C038721CF3D73F514D262C176CDBC9AFDA2C9291F487A0F3E0DD83BC7BE2F74FDFAFD29AAD443005B3FEFDFDA139D2CD58B92DEA3200E86154BC024684E73198D7CC7D4FA51F30015F2B7AC611299357A7DCFE72FDB2A1D498EFE5FBD67E624D8BF01EDBCE02821CD0B778A090492343FB50169363D7286A45C5473A18F2B1F3124EAD9D0B79BC325214E49CF32EFE9053C97FFBB3D3FF00C8C3E904248245DEDD7DF48A1424A472CE7E54CE665D7ED0F45B2E968AADB1145ADF3768B489BC0BE124681A4C9CE39FAE47B56924172055FD06776FC5DDA23B184298B91B8ECD6CBBDDF3AF9E2FDEAED03F68DE178261DC49C476A9C5B36A10616916EE252EC419CD249C8491153F8697BC037F2B8E44E7F76F3CAAF8D55C062C1CBD45BB0F75148D98DCF6C261BB2781DB317ECB6AC64341DB979491E2294FFF005132A2388C255913A659F3A9995242432DE80114CEF6BE74ADDB8C5231F8A593FE92D3BA4B1292F66703B7AF33911A65E17EE3A82434954889394738E63C84F5D2B64A4A560D48EE0303964F0899E160214A0C457B5DD87BA50DA57C5F18970EA7231D801FA67DE69625CBFA70A46A1625A025352E74A76FC7482B216406A7BEB07CF660C4BBD5BD6B0A17B81A827A83DBA4651A7C7CE905E328500B3676E2D99BF3CA3225A96A7E447137AFAF017881BBB9009EA0664F7FA93DB4A6D327EF87D6E33A65C07AE50FE46195BD7714ED5F77F4316A5D5DF8CEDC34B3EE3404011C24913D73FD35CB3A63392A99517ADCD00C8367E5CE26E4481402E68E34177A587B61164A8B2EADE79F70356ECC9E251E1481AE73CA44E83A8EB4C7FC3330871987CB3A1E397DF211232A45992546C031A353DD7D639EBBD67D7BD2F686D8ED99C39E4DC613B26F5D3976E36AE26D25E652EA388891F99394F7E75318A5093B30CB269BA7D9CA83A71BB58F0D861F29D41880D6A662E4E678F2D63720E265F09C1DA02586DA68919710690903DEE7F96464749AA061C0998A2D72A24127BD85F2ABD68F0BAB084A416372D471C0B1B0D7FB89862CDD5A5B6C2C84AC852C4C0FE99E2D07FF0058F5D4532DB98054D4D03DADCE9906EE486B58C309D8437200A97A53B37AF36A4618F6AFDFD617B8CDCC6D1EDA5E5E21ABA187BD6F66CADC016A71C42ED814A4C12429409E1E7DEBA97C27D80A5E330EADD72E0B0150C7D915A986C30DF5292A0404B17670496B393668F92CF61ADACC5778DEDABB61B778FDCE1AE5C5DDE5C3DF8ABA5137696DCB77FC3971449108238794089022BDA7E295FF0087E0ED9F8647CEDE5CB9817BDFC28437CBCCD039E56BC593646397855A92E404B3659676E22DE71DC63BEDD9BDDA63785DA5B3D8A6D1ED0E2AF3E8B4C3B0F28BB0B712AE14B686810A3F98447EE2BCD5B3FC21336C6D641F96565732859DDF8FDAA6BCE2D98AF10FCBC210A5D02490E4B0605DEB90AD5C0B3E51BB7B0DB01ED2DBEAC3ACDCB2B3B0DDC6177A125C7F1B6EEB0AC7576EB208532A48292B2D994F2823BD7A63C3FF0003A66270B295330CC5490A7523AE61F87615A479EFC5FE33960CE32A689894A98896A06A49F537E2D6A08DE0DD77B0D6EE36510DE23B6C85EDCED428216F5D6D986B11B7F189926C94E242F873FEEE5C23CBBBF817E0A4AC362251561D0374B90A486A31D3A6768E398AF16CD52D43E6292836282CB15A3B71D33D408DE9D8ED91D9ED8FC391618261587616BE1E1FC3D830965A427904A52343EB9D7AD761EC846C6C1A30B2C04A4240205A8CCD4B0FC52299B5315FE5E21530A8A80620A8FD5C4E557A1034AE917531861656E3A552E3BA9CC9D343CF29FF007532E3511191276AC96194B64C90499F333400C19DF89821C5660828820A20828820A20828820A20828820A20828820A208299FF00F13DFF00C608A57F94FA7D453A47F11D7D4C10D5F696E363848100CCF998F9C7F8AC2E893EFDEB0432B5656D25E0EA924B808CB311075E472311E95078C1F4A8FF00E25FB1B7711BA54032732A04770FE91C96DFFE0EFEE7FDA7B01DE7BEA4DB6CEED638F358938825202D8B616F6FE31C91FF0022870CC939011957883E2FEC75CFDA1889A949DD724122E19CB71CEEFD63A3F87E624E1D290A04A5810E433D2CF99D286E7439AF13DAE690966F6D1C172E3C8438A6D83C6E04BC9050A201C804AA5463313A45786FC5D81323133090D53C29506F9B7957845FB0528CD6A64F517BBB6B4391EB4312D698BB6BB76CBCE78AE11C4A5A0F124CE704F54E87A10455264A82166A58DDED4A6BA1A166BEA5AC12F04B290A20D03B35BA70E459F9452E3E8733492274931965E5E5DF9E959C4CD4A839209019870E1C58E56E158D178662000CC6BAE64FE053B3C46DE2D01044891A9FA77AAFCC50249A804D2F6E96D5B9DE25F674B526EE4351EA471D453D78463EC56E5B0B5403AAB2006599E874CF974CF4A66B5BB8D7434CBCE8C7D88BAE0124848CDBB706777E9D9E2D371E0A515007BCE5A08EFD3F51AD3598B2976C98E8F6BFE338B0A65D057CBDF4BC781C49CC4C7A7EF4D973BEA05A87F593FDFD6135A0BB38A7DF8F6CA2A0F84E59769D7EA2B099848CB3BDEE6F58DD082C069ABD5EB483F129E7A7689FA9AC85105F5B8C8C6AB946FAF6F4A43943E8E111244EBD0796BCF4D7E228DF21C814BB54F6E6619CC940925883981D1B23C7FA8582B8A72D22B50A20867AF0A7584552D2A0D6EE59B3F7D697A4BA90A2933232F3A7D256A32C9B31BB90CC7DF484012956E0C9EAF5D7AF68590952F4103A9D3E5349AFF91E9E82174CC648FA8F427DE70DAE2DD01E6545A5AAE42FFA0E04CA120C05C9D47126440D29E61653A8646C0581777A59C5002C6ADC218E296774800126FC1DDA9F739906315ED8DBB877BDBBDBF7F0DBCB8C2F0372EC2D2D34572BB96D2949483EE901C92A3D3A9AB6E0F0C9012C32CF3C83EB91E19D22A58D9AC561C824170FA8B59AD4195728DEC43F6649716871370A6580A00001292DA7802A73900E731CC015349C2950752686D72D6E05BFB0E050D0312A4A17BA8AA5C977A5DCD8000BBF1AD9A1D7E2AD30EB72B79F6DD53D9210D2829633FEE1946B947CB2A49586A12D5D1980CAED4F2E1942682564862199C91F4D43D0C37174CB5EE292B4EAA055119FBD999E9E5E54CD69081BBBB9D0D39E5E94CF8C3C4CA5101ADA9D3B01F98A17895B2464B4ACFF00D5264FD3FDD24A2C0D5A85A1CA70EADDFE2E722D7AD5E8FEEB11CE62D6EB511C7C2AFF00A28C1196597CF49E7CAA1A7A8FCC56E96395487FCD3311272708B094967A685EE323CAC6910189620A6415FE1DF753AF1368919F33DB4131972CF5D10951D4826A732D5B86E54C9F4893912536DE4EF13FC49FAB27719EBA3748B22E71A4B2E29E55B5CBA2EA652DA24B013A97C4FBA2093DC024C53996904A5F3C856D77F22F1332F0C58170929AFD428AE01AE72FEE347BDA7BDA2B05D99B17B617642E5DC576BB14429969AC2D697BF04EAB206EC3678D0005C9C8C70ABA5384A10087506704B102859DBA44BE1F0EA5201DD6A5998E41F969AE9AE2BF65CD92DAED986714C6B6E6E2DAFB6AF1A71A798BA654B7434D15A95C2E2DCF7D2B0CAC2607F703CB2A8EF10CE929C3CC4E1BE67CB0004EFDC16FA9DAD5B3338E158B361B0FFE8A42B74BFF002045D886CB2E7EB1BCED5A06169BD1FF0022932B3A12633F9F3CB21D32AA16CD56F62DDDDCB8CCF16CF874348D9694B948CA8D91D1AEDA8F289CB472E9C4ADD688525F292C273E24041FEA8580722A12131AC8D79DBA7E193325870093BAC746350EF5A3B74AC46E211BAA2EC0203A9EC7787D246AC4579B8B3C7CF67F197DA3DE4E2988609B2F82E078FB9B16DB776E62AF5BDBBC6D4786DA5D4A9653FD3E10E26655D2626BD15F06F64E156B54D24A674BDCF928240DE2AFE54B939BB539C35972945082B295124B949A370EF6C8F111C3BF62BDFBEC56E9F7DB8BE33B4ECBB74C5E38DB4E2D80DAD2C061A5B4E0794B50093A83DC1ED3E93F15EC3C462F64E0E59412890956E8DD3FEF634147AFAEA61E61B08F34AD2D5ABE82C1E9DB4D1E3B84E6F77723B578BEEEF7B1B15895A3AE6CE623E2E2B62875855C137172CA130DB64E498515711194D33F875E0E48DAF2BE74820A56090A48D5C30B39E19B35210DB52CFF0089312E2A8527E922C4350D0BD69561CE3EBAF70DB7DB3BBD5DD7ECB6D8E149B276DEF70E61B6CAF855C0AB765B655C1C2602814E647388E95EFED93B1B052364CA5AA523784B00D038602D6637BDDB998F21F8A70937098DC44942E7195BE548517624B921474766190193C671B1B1612F2D2F22E2E9700B6ABA85B2D889FE9481034F38E74EF038CC1E1E794206E92CCCC18E6DCF955ED1CFF7267CC2A25543406DD0519B5FB44FB16A8528DC84F0B8AC80E402728E67B0CFE5562F9A99B5497196B5BF9E94EF1BA8104BDFDF285822E94A2A2A401C86632CE86CF4FBC6B0ED1C7C23C4E1E2E7C3A7CE8822AA20828820A20828820A20828820A20828820A20828820A2082738CF499E5FEE993FFA963DB837EF95608A57F94FA7D453B47F11D7D4C1142085028E9FBCFD7F5A260FA6B627DF2BDFA406BFA888C52E45937E202233EC3213CBEF5F481C6D88176367AB81FB1F6AC640048700D45F9C73BBDB4ED2D76F361312B25A02AE70961DBBB479A00BCD3AC82FB6904E69E371091035903BD79EFE20EC438944E9A52080959A8B9A8BEBD2DE7D23C37210501690EA5338B545DB3B3BF5E11CF0F65CDF33BBC0D8E7303BFC4D08DE661576F5A5DE0B70E91722D98BB5B2C28B0545DCED11C7310419D32AF9FF00F10F667CA9F3CEED5D54B70007DB3716B4762D8D854B254BFA521AAAB559AFA9B10E46A1A37AEDF13FC234DDBA894A9284F10320F1912A93D02A63E51A57009D30C85900589BDC70E8ECC43C5EE56CA0A961696622FA3B56F63DAA4C3F6F1B03FBB9EB3FB18E93A475A88C663C00CFFCAF534EE78548C9D9E911989D9E12545B30F6737E163C352D0CEEB1A4F1292173DE40F3E47BC6BF4A8F4CEF9A1C1770F7C8FBCFCE34C3CADD56EF2D72B657D0708B6EEEE7C624E5FAEB98F4F4E9A655A2945D81A70378B460259041160CF6FB50535AB3E7588570FBC40D01E53D8E7D629ACD986EE082FAB9E7C88EC45A2793603DE7F77FEE2A49040D3CBA5335ACB105DDE872CBED90A40A43D6C72391841C71295904E7974E9E63CAB644D094D5C9A75A9D7BFA438972FE9059DF5E19D6AC7AC51E2A3AFD3F7A0CD0C18ADF3ADBFB8C2E580E2E74BF937BE50FD820B608D0FAF4FBED419D57AF26A767AFAC32584B97EE687BF38916F9FA7EB58F9B5BAB3AE96D3DD28346AB4328B1E795C70F385916FE2282A241E71D32D63B659E5CEA4E4A8FCB0F6604F1D399D34615AD2227ACA66001F7AA4E8FE5EED12ECDB42047088D35FD8C759EFDAB604296F91D796919F9A1850726A8F3E5CFA43830DADA538DFB88564B23212759D6331FA8EB378196EA4B338F322F9E9C75CCC30C42C1DE2145D8167E1D6E1FAEB688DDE46CCE358A6CE9C5B654B4AC52D9A2B67F371F191970F067A8E46AF78291BC90401950799CB872BC5431B38296524907EAAD82AF50D7CDFF004D1687B3EEF2AEB11BCBBD97DE45EAF0FDA4B05F8776EDD385AB65A5454A60254EFBE47860033A9F4A9A4E1C10067AB301C1F83EADC338A96310A415AE5A4AC82084A43EF7D81E2236BAFC60CA6DB6ED1DB7BF4C8297ED141D20CCCF109D3B1FA5359F204B191E4C417B64DA9EA2F785306954E482A96B96CEE169637A900FA7586D70E36C8287997D694A07BEA124822609CE6328F86794C362250756F05240B1B71A5B2BE8EEFA4C61E46F91F2D52DC64554E1974CF4A345A78862D60C13E030F29CCFFB5249F841CFBC729E42A2672909A872D42FABB06E1C866F13987D9D38B29625EE8018241721858E8796BD2CF771F75DB85F8B6E80CC8CDB49FC5360092A76623ACF20338A40E18AD214452E08AE6F7AE7601F311292F03BAEADE50B50FF001391CDC83634F26318E76BF7B3B2DB2695AEE76C30D5BADE6AC1CDF2157EA3FF00F8D2C1CCAB4CBB839D6ABC3942410A1C52FEC53F1CE1DE170D28CC2932085021E62922B4A6E9CDBC9818D42DB3DFFED66F2EFAF365761AC6EF66F0F30DDCE2D7AD2ED6F2E90B0655873CD9217971054820020999CDB297B82A1AC090EEC5BFBD72A0113F87C1209AB2C38A1A80C459F8DF5F4B4367B7236585DDA717BC69FC6B14795E2DC6217094DC62EDB84F1152DC202928049009FEC1234A6EAC60466E32B3DABA9A1E1CC5DA611874A52280301A07D1A9973EB9C6CDECCE002D50C3885A5E48193A832328F74AB4949C95AC28543ED99BBF835281350DF8772C7B985C2D2964B860EE721A71EED1950A816020EA040FA4F2F38EDDEA9FB266286281BB28DCD454737ADDF8EB0D96B01C8AB8C83935E2DC2BF731459BB76A6DCB603F0ECB6A4C5C0949826550AE51A65196B15799939909FA98060EE003D79387EBC6184E5209DF512A77649AB90294A694BF3CE354BDB797816CFEE17783B4589E1D85E35F87C21C16CF620D26E0A16B6968570A9511EF473E5E95E8CF83B881FE66180A82A4872F67F66BF686A89DBC80427E58ABA2C29C2F6A9CCBC7E7F8AC6AD1EC4F69B1A699B7C314FE2B7B9211E0B251F8C7920339E7EECC8313957BE676C74E236326629D6528428331624034CEF4B5380A43A91B4A54A3BA4849CEC32E0C18937FB18CA1B078EED65FB89D9DD85B8C7D6BB94A9C5358629654E2DB05D48692DC924A802246B9F4A6FE1190946D64A9406F6FA5FA503FA35F94436DDDAF2BFC7584B541B1A73AE7ADAE35A7DC9FF00ADBEDEEE33B8CB0D89DE760BB45636D80A9E4E1F79B40C3EDBEF876E5C59E35BB214042424A63223AD7A802D6BD98128A3A0333F2E9E4794798BC61B411326CD015F5025CBB8EBC03F4BF3FA3AE1B90095A9B4A523DCE1273026049D328F2E5CE6A387C1E326E306EEF1651AF992E0706E79E714594A41BA779F2D3AFEAD5E5258738B72D92A7014AA4E4441D48CFE15D0F052E64B94913410B6ABBEBC7AC37C5A5299CA092E29D283F70FA9EC35828820A20828820A20828820A20828820A20828820A20828820A2084CAC82440807BFDFCBE349264952DF4B9CAD953D9E461354D4A5A84FAF4E5D22A90A919FDFC694002433DB33190B72CCD0D5B205C3A24C2635EE272F3A4674E64B641CBF5EDCB90B429761FD9FCC5ABB605430B79F4E41B4924692049CBEFAF3D61F1002D254E33E341CB4F5BDE8A22592450BB8B57BD3EF1CEDDEE5EBB77846D23B6D2E855A3C5E6DDCC02D34B29E103FB721C4491974CEB8F78C76A61F766E14A7EA00A5D403BEBEEC63AF7857045587429EA5AEEFA51C69C8691F3C9B1382EF176237B1B5DED03B349B9B809C4102E70BB1F11568A61A7576CE16D94C7BC1BE252A4FE6D6BC61E3FF000C2B68AA72E4AF7492A2082CF5E0E0F91CB9F6ED838340094CC01480CE15504BD3414636CF8C759F76BBFDD97DE66048C5EDEF9BB5C4DB4368BCC22E1C422F9A7A78172C0515005614AE7EE8122457963C43E119D83F9AA54D1F4924806B716B67714E0D48BFCA969420237286C52030622EF67A65967966BB0BF37C62D945D4A512A5A33427DD98528686328EBDB3AE2BB64CEC32D49DD2589A81C59B2A8BB67E51198E9297A86166199B1CF26F748A54F38B5A97242742093323DDD3BC1D33D33A4B03895995549078821C1BBBFA8E1C618CAD9E662B7D2C00A97762723CDAF5F48A937FC1F99975644E89D667CA7BFD73152482A591603B5C53DFAD22670F8732CEE82EFF006DEB30E3A08F42FC585A5B5A02B92844465E9DBAF2CA96183F98C4A921C9600B538E7F8E01E24501207D44150CB5E747CF4A1A9BC29C4842415109EC624EBE53DA951B18ACB99A91A024E94D05C545E8748092737F4E828DDA239E5A54EAA0C8E4797E9CF2E79D466270870E482A496D0BF7E2C7979C6C9C4EE108524B3163AB0E7AE659EB68F024AB3047DFDFDE751AB9A11A77A77F5FBC6DF337FEA0925F874E3A44B5A7FC694F3060FC7E3F4AD133F7D411BADAE473B1ECDCE8D9339EAFE4A6140ECDCAFA9F7AC4FDBD9B8E890A4671A98F3D7E35272B0A66241DE009C9C3679F6D6F58899D8E4A09705C8B916C867CB56CDE24D9B752141A50E229FEE198D0739F8FC0F3A723FD3FA0924E82C5B4B3FBCDE22E6CF4CC5EFB64398A7DFDBC4DB164E2C26074EDF1D79E87A9F83B9127E62812EC0E4FE6D97A437998842695D5EC73B71A44EB5847E2994B6F04F87A029FCD139E664663EE6ADBB3F0CC52EED537771C05F3047A8887C462D0EADD249346366E0D973CF4CA5B0FC25FB058432F2CDBA89E26D6A24C7602AE5833F2C00C28D931A67C7AF18839F342CA8AB76954DA8E00F32D66A8886DABDCF6C9ED9B4FBEE34BC2311B8482EE278725B62F5C291014E3B1C4AE180019D32E74F95B424CB05252E450167EE4DF4E0CE620A64DDC5804037DE0CD7B1B79E8D7731AFD8BEEEB7A7BB8E0FF00F02DA36F1465B595706D25D3CF4A78A4001B006432F9654CA66325CC2490CF9022957CF8FBCE1F499B2D49092CE4977E3A96D1F3D2CF0C93BC3F6810FA8E3183E0570C242415E1EC5CAD0B84804A4930731E951B3D6A9B41D2ED4356E9A6B5D626B048C3211BA120977DE663772C7ADAB4D22C4DB4DE3EF70B0B182ECF30D5C807DE7ED5E08E239CFBB2489988CA39D464CC395134B9C9DB5D072A7E62CB2264B003173CF875A575A4609BDC3FDA2B6F1A8C5F17B4D9AB57894A9CC11EBAB4C40A78A21C2A904C6424E4093AEB90B4C90CAE9DAB9B1A534787416822961951EFA7BD625365BD9C7F0D709BCDA0BBB8DA0BB510A55E62AB17373275295AC4CE7F28E8698E227CBB0FB70360DA5AAFA98732E720067D19D9FB0F76D699FB08DDE6138516D2CD9B4A2D8050EB8DA7C46CE521063204E59C6550F8898E5F4D73ED5341EEB12B271728252D7CC585697B3FBD62F746CC593A80A4ADDB77844AD82105E11925C3FDC00CBA807A45442D678BE4F6F51FBA1D0C3B5E3DE8908296FA8915D2963A69DE1FB762CDB302DD2CB4C944C2191C2DC927DE8EA7F32BA9EF4DF14AFF00230EB9207D6CCD9307C81EBC223D58E44B5EE83BC2EE6A4B9B7E05B5E292587418253C33966491FEF2E5FBD5691255B3E6FCE58700BBD09E5DF40FCE1413153599DCF1605F9B59BFAB4561DB8B45A96521FB55A7FA8D89516C9109244C244E797298CE9F61F6B1DA1351874214E54002DC6E3D96CE80422B94A2E09AE47DD072D0D59E386DFC4F76F36B37A5896CEFB2DEEDF137862FB4EEBF6F8E3985BCE78762CF1377091745A254D9532A504050FCDDB2AF6E7C06F076D09F3F0B8C4A52A09295044D7293CC58B33F2E05CC5E217B8E0A9DBEDAD1DF2A519E30C7B3C7F02DDCDECCBB61B4BBCFDA6DA8C79C7FC1BC7F0655DDBDD61E5E570BAE2576EEB67DC5384C89CC124E75EF79C572B00304B4A65CE284A775144D0370AF5376D229F8EDA0B913944294D56AD752D4E36CEEE5A3B3BBA7F635F65CD91C53086F03DD2ECA5B5C58F036D5E0C12CD172E848482A79C48F79440CF2CE67AC34F0FEC49F2F1E99EACD4EE4EB9171CB4B1AC53F6CEDB2A92A00AAC4104FE38971A67668ED0EEBF63F65F66F00B5B0D99D9DC1F03B4286FC3FE5D6A8B67084C157104E473F5835E88D9C52AC2225101F75A9996CFD4EB4B51F8A6D913311326CC0A356706C2AE19F8B8CF8465F72D564A0F88B2129FCA1592A00FCD3A904476FACB6130B2652B7CA06F5C1233D1C7B073886C295214525CB6649D2CDEFCA246C82C329E3E1933F97439EB9E7D7A5389C5256775F893C87BFBE9B4F52553094E801ED0F2928460A20828820A20828820A20828820A20828820A20828820A20828821056A7CCFD694979F4FBC3399975FB4548D4F97EA2915FF13D3D442C8FE43AFA1847861D7951AC69AE5D7F4A633BFDD425DB27A37EA16171971D22D9DB04716097794C20E5E87E3E54CA60FA59A8CAB0D787B787B21492A507AFD239D5E9E75CAFA472EB7B6BBE385ED5B587AC2568C3AFFC4CD420AAD9EE09033C8C46933A19AE35E35D94162762022A012EC3425FA51A3B078627844896934219A9EFC99AB1CC8F676DA96362771B8E63BB5364C62BC18BDE5A5F5B38DF8CE94DEE2EFDB347857D0382267B682BC51F11B6EE23662E7A5256129DE176D6B43D7A5C10F1D8B63E24290900B12DC496E1AD3D6CF0E778DB8CC1300C291BC4D86DA156C762375E15CDC5AE27749B1C3AE9774525A43086C4AF3720A4CFBC40D4D795F69788317B4F12A940AD414A20DCDDED56D795ED176978BDD4B29C8206EB64DABB172386958C6569ED8988EE871CC3776BBC9C3F16B5771542B87692C9A28B171B6DB0E871376EAB3494119E9D349A9BD8FF000E311E2097F35525DEBBA524294EF402C7CFEF11B8BC4826F40ED63CCB0D5E835E51B3FB31ED35BA5C4F0AB6759DE560092EF11F0B10C559178933987532633C93CB21DEB5C7FC1FC7E16614CB90A005BE9200A3E94E361A18464ED34246EEF3330A1153F67AD5BA5232059EF9362EFC8559EDAE07700E858C41B50D01E44E4476CFE134EDA3E01DAB8376953A8F6490E43816FEBBC48C8DA2852AA439156F215FDB9D1AB78611B4985E2EB439678CBF76E3874B57D2B615063DC00C9D33E53CCD50B696CDDB382DE644EFA49228A661CAE683AB718939535332C5ECC4D0FE7F65B38BC6E6CDE5301C7AE2E186C8FCEEAB875EA488FAE5F1AA4E2B696DB90B2DF3C373671A0ADF5A01D2AF658429802951B109A90E730DF6B68F0CEDDE436DA52DBFF8842491E2F105CE706543A69A11232AC61F6963A78FF5FE6151615243EAE3CF3F485BFC32A62D4C81E37F2CC919DA245BBAEE4E9CE09F5EB0465D674A9EC2A04D00AE845F79A94CC1737E40E9AB84E10243333D8E5F625FD4F794B5B900A3B4FC01FB8FAE469DCC952A5A77814BD2BA7B6B0A528D688EC561D92A2D4670DFBAF0F4BC5E36174084EBDFD7EFAE91D05444EDA8B904849342C188D3F54AE7567AD3F1D288DE167E67F75356191AD691775921B79285989333A671CBEFA73CEA5B073D7894256A241CCD8F3AF4BF9443952852C479FBD738BB6C996C464339EFDB3FAEBD39558F06A4A4D4D465626B4ABBE9F9CA22B153164DCB0A96E56ADCD7D22E4610D04241E181F18D403E67D0FA656BC1CE09DDBDBB3FE69CB8C424D52C28FF003FAADC3BDAFAFAD651A4B320C8111AE8341A8D3F69E756191884EE9750B52CEF9BB1B574E10C56A5870778B7FB8DEAC6F415B5DBBC392B4B44919B640D73072198ED9FF98A8FC56206FBBD0DD9AB4D7AD75A50445CD2A54C04B5097E595EAF5AFB30C2EACAD710052BE132208CBB46BF0133CFA014DD3880A7751072AF4D791BEBC21CC85949FAADC457DF4AD9D9E229DC26D6DDA36E8F0804CE47501464E5DC9903ECE4CF2186F31ADC9EBE599EF4898C3E24029290ABE55CF4FBF18B2F11D9DB77D4726733DA3BEB1ACFF9CE813C1A953E95D1F537D183DD844D49C45C8DECB831D73D2B9768861B3987B29085B6D29C4CCC0067B826397A10353A963397BEAF7DBA655A5A1F2318C0024B97AFB6A37EA1B39845B2092DB423B247307EF99CB28A6335EA2A79E97CAD5CB4AB34394625D4050BEB56E373DA1839837192EA5B0907310348EA0FEC7E951F312E906A497A135D0E55E5487D2F12919E54073E601CBDBC47396FE04C1397FDA728F5CC69CBD3234CD5289C800E5AEF77CC77870310F7722C5BCF33DA235D471B8489F41F03FBF79A48A04A49530E3A9F21D6374C833485901813C9C9662C1EBEEA4C51E17FF6EF97DC5203069DA0B1299CA8814142E6D636CF31CDDA464832C0A800543D2ADED87DAF83B7FF00BD5C3774BBBAC7B1CB87026FD4CA6D70EB30522EAFEEAEC9B767F0ADC85381A75C429C23348CF235D93C05F0A4E3B112270C3B82524326CC41AFBF3610DB178C4A105EE1D99FFA1F637223497D93F702E5AE258A6F877ACDAB13DE06DCBFF8CB87AE41791B34C30B51C3D36EA7878B686EED56DA5609FEA1194F3FA23F0C7C2C3C3F8792A52370212059AC2971426FEE951C76D015FA99DFB54D39C74556D2BF0EC052022324A522070A7241CCC6691396B3975AE9B8D299D8B0B4DB53A5AEFAEAF9DF3A76D09E263A81241A35C9C9DAFE77AB9CEECD8E6BFF00E6ECE468E0D27A8CB2E79FCC9CEAD3B2100292482F4AD0E9735D08E3D4C50F6AAC90A25D8851F7D2F4A9B523A5FB12230CB11C837A8CF90CBE1F1F4AE95B3EC19C30CE85EBE9AC51316B652C3D1ADAF21958916BC64958800F248F5FBFBF2B0A1B74019522292A1BCFA1A8E632852D7FE14FAFD6933736E96E9082FF0091E9E821C56235828820A20828820A20828820A20828820A20828820A20828820A208415A9F33F5A525E7D3EF0CE665D7ED152353E5FA8A457FC4F4F510B23F90EBE863D52638CC0CE3CF2EB4CA6921EB666E0ED0B45B1B440DD61D7368810B75042547F28273127E1CE99CC202483983E4CF0E2424858551A94ABD639E5B7FB2EE5AE2D8E5AE22522CDF4F8772A689CD0F20A722A81A28820CF58D6A87E244A67E1E6CA672A0459FA51F3D2F5238F43D858AF96948DE619134CEDFB23CA3827ED7B816F1B703B67865DECC5AAF1ADCE63B89B3738A58D925DB8BA67C1B969D256DA21848F1D4A32AE93135E40F1F7C3CC46D9993B76593BE4D4268D5CF4EB7E21E3ABEC6C76E9402A3955CD6FC38BFEAD6D7B69FB55619B63B05B0581EEE302C7717C6DF5E181EC2F0BB64BE2D976CF5A150BA65A3C48E20954C89C89E55C9367FC12C4271816BC3D029C9DDAE76A5B2E758BCA71DF403BC59867C087F3F2A868DA1D97DC15EEFAB0CD99DE76F4367DA699B2B0B3186E0AF5A94AC45B32CBE9BD61E04428A791191322BD25E0DF87B87D9E895F3248FA4016AF1CB8B7F548DC563F75249512E0D9B8919BF71C5818C9B8B7B296E5F1B2BBB1B178260EFAD08416F09B0B761A4290908E3402990E28895AB9A89922BA54EF046C89E9DE992251240A1482C4B5DE9E561C43D7266D35A6690925B30D46B57DD39C623C6FD88B622ECACE1BB47B4F8324CC270DBB6984A7A00026321EBD339AA5ED7F865B271214061E4D41B203D7855DFDE913184DA0490E4D6FD18F43AF78C4989FB136F1709BB7AE7767BEADB5C3EED9016C338FED03AD614A58121280CA41827256999EE2B926DBF82DB3F129294E1651A963B81F3BD2A38D7C8BDB3058F620EF03931CDC67D2D50DD22DE6F799ED7FECF771C1BC7C393BC6D9DB7242AE7056AFB15716D27995BC420A881993D0F399E5FB4BFE9EF0F396B50C2A2D40101ADA6EBBD0B70B459B0D8A964B8201615058D879DFB50B5636DB735ED6FBBEDEB5BB0C3C95EC863A6517382E301BB1B86169240058E22A495C710CB30418AE29E27F8313365CD98518764A49A25059874ABBBF37E0D60C2CF46EA4156FB13FC8826B9BBBBFE9E3692C71766F57C2CF8859569723FE050D4292B920883D79FA8E11E22D9188D8AA9837149092C0976001ABD9F5AF9801DF2A64B525C0045C01573DBCB2A6B5996F14B761E0CF18700221C410A6D5397BA474D3B9D473AE74BDB334CEF92545AD7FB3DDF952D686388489B294424A5C588EBD2AFA54D327BE30ABD6DEE11C611A415981F1CB9EBCF2CF5A9FD9FB317B4589058FD5514399E2E48B53F351C7E15552524EACEE6F61C2FA3B6822F9B47168E101E41E8127AF31F2CC48F2E73E30A7027E530200C8D2B5D3F37D1A2AF3E490B2C9525EAC47BE1EC345D56778E048F789D34267F5D3B4C65E54F30F34EF3B86A3DA94E957074D2D11B3A4B92E90C5AEEDA65ADB43CDE25D1882A47BC124E441CA23D7591AF79ED53D87C504DCF177FDBF0639758879F214092C487C85B43C3F1E724DDEAD4212B132273F2CC73F3CA338A94958C02E68D9E8C0E9E54600C464C96A3BCC09CB80A6B4E1971B44AAF106CDAA5A85174482A0070FA199F3CF5E8669ACEC63AC8717CECDD48BEBC4F3860708B528A98805D8313D5C0F2FB4465BDCDC34E95A9529998075F4E5F2A47FCCD19C35496EDECB768593875020949A7FE26BCE9FD4387EF90E38A570E662720740074FAFCA8FF2CD5CD7A7A5CF06E7587D26514A47D2435836AEEF4E3C3B34352FB2AD5B9F41F3F8655918C04583E7FA76F46CA1D252B702A3913E4DE7C2211F682EE56BE121063DD034CB9448F43D474A513337C02146B93FB7F487282ACC1E7CB81FB6799BC2CDAAC513E234E11CE123303CC83F5D73E95BFD2D577CD9ADF9FEF846CA3382BE921F8BD2DCEED71F8641E530EF1065B2949D0A840F5EBAF98AD7E48517B067EA74BF11C98B6AF6419C024AC826B6726E496F2ED945A18A5A49E3F11B4E44813CCF58CC72E9D6B070C9AD3CF37D1B23AF0AE920998B7018876EBC98D47166BF216AB64ADE79A8E14B31C4F1C9A3C59A615CCFEB505B424CCAA520B0D38B66D9E9956D13D879A99720155D87D39E76F77EF1686DAEDBE05B01805EED1ED2DC270FC3ECDB538953EB4B46E826470DB9564B512008EA40A9FF0006EC79F8AC7C92A42F777C646B517FDF0E2219E231E84950DF7DD150F6719F6AE9A8CF99780BBB4BED81BF2B0DAF7AD9DB6DD2EC7DC3BFFE3F8462485A138AF8882DDCBB88319B0F165F6FC5B4524E47849AFA4DF09FC3587978590A99280FA126A90F4029E85B2F28AA63F6928957D74AD03FEC6BA1CDEF1D14B6C26D10B7B05C3385AC3184B097DFBD01372F78094942429320A1A52785B06084848CF5AEDFB4D48C048DD943758300037B033F5CA2AD89C5AA6A8BABB1E7D746E05E913CFB8D396AD3AC92B687B80EA4F8709398E597EC2B5D91BD8A4852C0E04DCD79B53F0E2A223D73094A9E8189B9F6FD9FAC5F3BBEC31FC4715B6798294A50B1C5C5209CC1E5AE433D4E626BA36CAC391BA7938E0F677E40DABC6299B594EA5358D40AD181E1EC115B08E92EC8D83ACE1966B52870844473919139FDF99ABDE0E584A4166E038801AEC6D4D2DC2287895A4A94337A12ECCF97AD59B8C5F0A525488FEE20CF4D7CFE952454539D2AE333A74D7D888D0A2093AE4D4F7EF575ADC10D007A9D3CEB20B807580972E7385AB318828820A20828820A20828820A20828820A20828820A20828820A208415A9F33F5A525E7D3EF0CE665D7ED152353E5FA8A457FC4F4F510B23F90EBE862971D482519CFC3F63EB4C66FF00BA9A7DABEF585D201501AD7A0BC473F6A5E049E9CF33F7F4F432CE6074B9205C578C3A42802C680B5B87BBEB1AEBBD3D8543E9BEBF21C7137A905411986BC311247298D67F4AAB63702B9B38923E9341D8DE97E97A50B189AC0E33717BA19810D4E5A3BD4D7F348D16DA5D90C1F16B6BBD9FDA2C16C31CC31055EEDDDBA6E5C4024A8F0858E1064444E446424547AB64E15559A849A33103D68C7EDD0C74DD8D8B2A4A54E7A1E77007DAE6312ECE6E8F74183624F5CE1BBBAC35772957126F2E30B6086D59E6870094F0E83908D795339FB3B65C9FA932D00B6807F4E7C9B48BC4AC613280DE34B826C3977CB5B464271F7025586E1E52A62021BB56B3619198090819240CB4D48911A88F5AA44B27E5002E404B060D60DCB534AD5DC4663316A7FE4C2AC41B5E9CF216111CAC39FB64969F480E0FCC120C0E2322273D0E63581E555BC66D0C50584A0AC26AF520355BBD7CC4478529642AA756CEDF7CEBC6E5A21FB6F7A232CFD3E47D3A7C61B2319895FF0032B2FCEE6F4E27A7189492B54B00B9CEF7716EB51E9AC4270076E96CDD24861A23C328D64E66493D73F29E722B6F98A5B15A49702E0DA9CE822670B8FDCFF71F3670CC2D473EAF156321BBCB33875CD9E1D7387A870A85CA389CE1E73CBAE67D295DC94B4D51C983BBE5D470E71352B6CEE007798F0E81A97CAC5F9C68B6FBBD92361B6FD6BC4F64F13BFD92DAA92EB177B36F3763FD64C293F8F5A015F04800091913A646A8FE23F0DE13684B984CB495149674826D6B711C6F13185DBF91517CB30CD5D0F1B75AB4604C037DFBE5F664BE636237A9855F6D8ECB29618636970365FBE5DB320E4E62376EC368805324468ACA6BC7BF113E144CC67CF5489143BCCC9E6E5EB4AC59F05B5B7C004BBD5C105DEBDDF5E79D3A49B9FDE0EC4EF4B08B6BDC03686C3104B88E316F6F72DB974DA880A5B6E25130B42A52A1C8823B5793F6CFC2BC5E027AA6192432892774E5C481C75AB919C4F8C4054A71A33F6D3F7CB5CC76EFDBB37AA6D97DEF1983932FAB2544689D4E4397999CA9AE0D32B633226B0DDA1DE6D08FC30343965092F0C569214012450E8E28D90A0BBEB58B818DA3BB5DC00FA030B100B69052948190201D02B224EBDE69AE37152F1538AD0CC49B72F6FAD2948ACE236780ADD04AC027EA2C7D916AF570232560D8C21C424A97079927FD03D23CA3A53742B749AB3E7EFDBC4462B6791FC53958D5F4F36BF578B9D2EB6F283895E47BC67E59F6C892234D69EA66669533DEB7F38879B8577494D4065532E596773969126C148CC39E8159E9D20C680FFAA709C492C0A83F7EAEEF9F4B8B4464CC1A41FE1C5EC2FC73E34AE50AAEF434A28E398CCE7073EF041A426E21492594FF00D0A7BF468DD18305208043EA1FEDA367D228FE663A9FFF00D87ED487F94BD4F61F98DBFC2F7BBFA8ABF19C598224EA0AA08F9FC7215B7F9254010A19BBB7979F58CFF86902A97D4D07D87BBC1F8A13AE7A73FACE959FF2A9BA5EA6E0866F2039D5B9C63FC66760903437F207D4748709B849410A201391279687F5FF00753585585CBE2337F64E55D73C86BFE3A82AD4C9AA3ADCBE7C21A3972D0D60CF5F58D481F5E5D2A4A4A42981E6065D69AFAE90AA30EA51277496CDAE03707CDA20EF318650A5B08202D319E5CC48CB3CFF005D69F252281B8659F67F2A5290FA561CA40510CF4622D5CADA58D62D5BCBC6A49B8B94A1339852C800753F0EB9D394480B60A0CDFEE6615B548ABF67A43F461CD4B127219EBA7A03C1EB18C76DF791B21B1F85DE6338AE316D6CCE0CD974599B8421EC51C5025B6DA41203C50B0124488E2EF3574D89E085ED7095097BC090FF004B923B7DBCA19E2B1424A424BBFD5AB27CF2BD29EB1CFF0052F6E3DB476A8DFE32DDE6CC6EB706B8219B05872D177ED255C33E1AA597015B61407454F6AEFDE0EF849364AE54F121AC689FA4336A38393E6CF153C5E3021240512493BCA37CDB78FE7AC6F66CCECDECB6C16CF58601B1986B768D59365B2E25A4216B5180A52CA009E23267299AF54F86F672F644A952CA5B7404D29976E1DDC18AE4DC495AEAA2CF99ABB73FD680677731656D7366B75C3E0BCA12E1C84EA79E672D663F5AB6CFD9EBDA83751BCA243E6F9643C867935A044A2B2491AB7B66B0605EFC8C37B5B668B0DDA30A2B6D2A30A104925524C9EB9919FD26A5766ECB3834A65AD0410F96BA599EC2FE6D0C718D2DD35000A92EFF0070FC5B5A0631B29BA6D9C21E65C08C8A92743D729F203F6ABCECD96C94D2A72CC8143CFDD6B145DAAB7DE2E5FA7A5FCAFC6379F0867F0F87B0D10470A743DE0F3E5570C3A5887B1D2F62FC2F147C5CC725AEECF7D0FA5B2CB9C9D2B3087352DC72F3E5EE911BF32AC547B96F7AE435876CFE41E66B32CDEB4A379C2E92E906FC7AC2B4A46D0510414410510414410510414410510414410510414410510414410929064C6739D6E9504BBBD5BEF0D972D459859F5E1C22A4248249F2A4D41C11EEF0A24177666D61B2D8714E958238491A93947DE7F72D664A529D9FFAB37BFD2C181048B438E0CB5CFE5FBD22AC312962F93D3AE61BCE3255F56F0E8FDA2D3C76DEE31143F60865A29527878DD4CFE607F29194C76CA0674CE7210414EE90A66A8B355DFF00BABE4D0F30E374098A5115B3DF2B75B3DF48D29DE7EE81EC25F7313B2BDBC05C5296FB2870F8644CC25206801391CF3CEAA3B4B0F88FAF71442AC0825DAE486D1DB3B6B7BEEC9DA0896849B80CE3CA9FAE51AF97187B56F76B45BBD7EC37925C4BEAE149207BD09034267A73354DC4E0F686FD56A524E44927370030E2ED7ED17295B5D0B48029C2DBDA1E35E0DC6AF093682CBC1AC398694167FAAFF0FF0057A92950E799D40A4D3266A48DFD5944F503476E35BC626CF135254D52CEF6B86D5FBD7842F7987AC2D50A5A814A4F13C6564902412390CE04E4075A96C3E0B0CB4BAD0144DAC7B07FBE79D214958A44A001EF7B5455F9BE82916EDCD9A9274D394FFACB9E91D795666E1306827FD31FFD23ECF9D3DD1C231C951228C0F56767F23DDD806868E58DB78056DA26E553C5C63DC1D2329D2751F2A8D9D2A42086450568056CC2EFDFC9E1EA26850749619B96ECC6BCFCAB4B3EFF000643CA2A76E6E1067F2B4A1C1E5A1F8CEA08A62B54AC9200B3066B655A7439584384A966DDEAFE54F2D22199C2D9B275D5B4DA145407BEB48F117023DF235E824F59E95193247CD984DD2694B75F36CB430FB0F2E71008530D41208FB65E94D6CFDB0D93C236B70CB8C2717C2AC1FB6B84942C964294A4AA66788473F3C8F794311B0B098992A1364824E7BA33E80B3EA79E462D380C61925017500D49B65573FA191168D19DB3F664DBFDD29736E7D9B719698C5D6A5DCDF6CCE22FB89C2D0106786D2CED42540B89E22A0755281CF2AE29E32F86F83C7CB9BB92424A829B71201CFB777148B8E1F6E484240500695736CC5DBB6515EEC3DB771CB1C5D8D94DFCEC662FB2DB40DAC30EED13160BB2C0F891092EAAEAE55C45110AE2CCF9675E33F1B7C0ADB7899D357835AD287247F3720540A03A6B1292FC418520B8B86000147A1CECCFA3BDF4E87ECB6F036476B9B6DFD9CDA2B1DA16D684B89BBC3EE9174DBB29E2284AD33C4A6F342C7250E935C3319E12DABB0712AC0E2513173525B7D94451FD68DCDB81504F933C6FA0009360CDC0F2AF5CF9647C331B5292A952AD4A084FFF0022513248919E607603CF952A36362C23795296903FE40D7859FA13F686CB4058CB872396777E2F1778C6EF2D582B0A53EDA38214DF110BE331EEE70424913032F95436254BC2A94952542D71A6648E1D6D9444CDC1A4A8FD22AE48D3BB68F9B70222455B4D756C9694B0E2D4E09094495088D472F21D472AD64CD334B82C4317D35AB9B4305ECF0A2E052EF60EE7DDFBC4BDBED236FB4DADD65EF19C305B09F78198CC6713FE69962B1E64CD2820AAA6B46F7A9D78C339929129450A42891983FB1A8A5EF12C9BE44A78DB75949FEE713C20749E629346D12A3541166B55FA1B76E302512D401092736724F6730E1FBE6ED9A0E825E4A808F07DE27CCCFF00A83953C9334AD8258BDA9DEC5DE3099466160821B23CEC18D73FCC26CE32DBA9E2216D000E4E0E1518EC7F61F0A9093835CC75070EE4795EB5E59F3853FC298EC03926A2EC28ED5157340417F2886BBDA74A2E0B6DA1F7018014D00A403CE6397FB3AD49499A70E7E5EE289CC81D3BF377A55E1F4AD90552C15EE8A5CDFABE61F9579C20F63C86C02E3E1B075E3504F0889CE63A7CBD44D6096B9AB4B2147A6668E7FAA1CA30766194EE46EB3029A3D5BCEB9FDE31DED7EF0B67F6612710C4710694CB82438DBA928102082547AC0D27D6AF9B23C3789C79425093BCA6BF16CAFC0FE03422BDC94EF5E7FD30CEBEC6986F43DA1DAC5AF11846C65CBD7F7B70781A4D9AFC585188E2E054E848FBCBA76CCF851B4F18942805004A49B8A38B822A1E1B2B69C9942A0588BB3B38BE64F4BDF45F6437138D6F1D386637BDABEBC6ED2CD65FB0C2AD5C5254F052B8E31261E1EF24C24B607F6933CABD3DE01F86E76761651C4A0129097701E9AB8AD341776CC45076C6DB96310A4805AAC435DAEF903C637170BC1B07C22D6DACF0CB0670CB5B3425B6AD6C5B4B2C3C94A42429E424C29440E23A1E23AC57A2B65E070182C3A50A949DE48000DD1F8C9F26EB157C4635539F7598DFBF3E4FAC5C4EB4979A42AC98436B392894F0A0C18CA3393CCE93DA92C64844D98552C6E8B06B3741DBEC6B08494294A05F788B3126EEC39D756BC0F5BA516E52B0B0A508514446B999CFB919139CE862AC7B0F1387C26EFCF402F4767A5466D6FC67589CC3A928B9761504D6DC789CB8D5CD54D9FB12ABB6DA652B5238F20449CC826791F9F7CAAD8AC08DA2A4CF900250A62C030B72F75393C5736B632589AABD99BA72A37168DE9DD6E0AB432C2D480880932444E5241FDF3ED52985D9AB92A00D599F5176D03DCF1245EF147DA0B4A8296429839005CBD3D7CB2358D9069B21090001023A72FF00433A99972F728A72DA9AFA51F93DF58A5E2120BA83821C56BAF2A7B1A429C0AEC3EFB4D0B46F5B30C7DD623D72F7AD9DEBC5E1CB7926398D7F4F80115B253B800E17D7DFEF38712C86DD1FED1EFC88852B68520A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828821A3EE34D92A2015467D48F989F81A6B324EF0248008CF5EDA5EB61942885FF00B4AA8198136BF6EBD22D6C5B0BB5C6D05B7DA42873E248394F2907A673FA9062713852A72433D2999B657F76A9895C262BE4021C90C0DECF90CDB80F28D76DE1EE5517CCDC5CE16D842CA491C020C81D00EBD0EB2222A0F13B394E0B2800EF43404D9F2B795227F09B5104805401C876A5EDCDB5AC6B35AECF5EECFDF2ED2F6DD6485405291F3CC8F3923E7509336792A50DD37BB54BE4697E7A44E236900032AFFED2E74ADAB9D9B5176892BFC33C5714B4A40040CA34C88F4F88CF5CE95460FE5A40666A3B1EA3856E087B16A557FF00304C6DD37CC963636AD9F969AC5AB79849930939EB9798CBAC4D369D215BA4B07197AB73EC61DC89C01363625EF4A9A9A38D74B59C413F61C1C49888EB9779EDDB3EF50F89C392E4675E56B7323C985E26E4CF70327B686EFF00AE15E56D5E589E239489CB43CF97AF3FD62A24C9625C647A6B968CCF7E31252A7848157D2A19C5387463E8D10AEE1DC4147864C667E323423EF2D49A66A5EE2C0341A350DA8783FDEB133879E0241DE07870B3533FC86CA21DFC3553A13E59FC2048CFFCE993B4AF7D208343D9F90F7A43D4625259E95701E8E3813A674842D2D9D6DF5B686020019BCB494A5723FEDA98CBAC75E9178DC399885101DC663EC6E3FA6178749C502A636C8022A5AAFEA22C5DB5DD5EC06D9A56CED7ECD5AE22873253CDD9B6EB99F3E258D4E93D7AE7547C76C654D52814BBB801A95A58FBEB50EC62B46073770C39E7C9B5D2358769BD8D5FC18DEED1EE5B6E719D92D176381BF889B2C2D970020A516D6E9C92E2C4AA224CE872AE7F8DF84382DAF89562A74894B98A2FF5A6A5854971D6834ADA2C982C7A53280DE6200706C5ED9F5357E04C60C637ABEDA5B98C69CC3F783B1B866D6EC55BF1A9CC6707B0BEBEBF36EDA54BF13C77086F88849CC889CF28AAEEDDF83982C3E194538745029BE9E1614AD39D2B7A449C9C626630B3B333E75FC3FDE919A775DFC477737B73776DB34E626E6038A61EA71AC52C318798B7B9B67944801D6B8A5292B04A246600033AF2A78F3E1A623040E213865224CC2AF953770842F74B16362D6247F6FE5044C53392736233B5FF0059E85B6C70DDFE6EE31265E36BB6DB3EAB87024DAA1EC41A0662600067211315C50F8731B266EE2028024D81D73A73CFCEB1228C0254086C9ACE03F215EF9D844B61BBD1C2AF8AD4D63D87B970DE65DB7B90A61433238153C80131A6A3A53F95E1433803350EB3A8E3FDD2EE6174F86D33C0594824D4E9E60FBB6717261BBCC43C1DF1F1266EDB6B3E169E0BC87627B453A1E0EA809964D724BB771EEB01F0DA10092814B960FED8449FFEE8E10E5AB6E1BB2C34A2A002969470C18248073CFBE94FA4783E72082892A615FE2FDAD715E26819A103B225A0BEE80012C5AEC73B8D323CA23717DEAECDD8E1EBB84E2C2E16904F84D3E9528F6893AE63B7ACD494BF0D62890912D49721C37767EF9706784FFC244B56FB208A31A6F646BE74AF58C4B79ED47B2B84D8285CA5EF1D5E22521213E285490264F32411D6262BA56C6F86EBC6E1D334C92544554525CB90F56EA78E60444E2F172A42C85123402A939D6AD4CF2B5B2C2D896FF76C31E7DC6B64306C43145BE48652F30B7904AA40808327CBE9575D9BF0B5689809901A87F8E8796A2B1098BDA89DD2029935B1F79BD9DF5156A309DC7EF7F7C0EA5FDE25F39B2981CF1A2DEDDC7ACDC08992149765209232EB273CCD764F0D7C3F32572CFC948008B2780D00C868DEB157C5ED10EE54C0BBD682E00CAF616A9E91B47BBADC2EEFF621808C3B0CFE6F7AC0138BDD32D3EB0B4C92B0FA6089339E672CC577ED87E14F952D2E9600682ACD4B5816FB457311B40289216F53C5891EDB96869995A64786385C0B0320419000C824764881A888F4AB72657F88D2AC2D4A12C3A31A55FF005159C54BF9EB52C3D3B8D6A59EDCA14F00F5F4E7F18229CA092A152473A5453843032FE5922BD7F1D7F1136D5E356B668429292A1324F39396BAEA0F202A4E4E154B1715A37AB5383119D3284FFCA1243B81773A5FCECFFDB1685CC4D7C2DB5C5240809D2644EBA9E43A72815252B66294A02C4B1A5AF5E43A8A645E3076ACBFF9E55AF36CAC3A3F08D8CDDB6EE55768B5BC799E10A2492A4F43DFF4CEBA1EC89224E1820DC5B4BD5C9D39E715CC6E3133662D64B019937BB8A3DCF1E91B8582E0B6D84DA2128400A4A7A69FAE675F96553491BA092CEDD3DDACFC0D62A98BC52A7ACA45100B30CF9F0F662E2617C6DF144493F414992E49D622E7A774A83BD8F7685AB10C141945BDD21540CBCCFDFEB446C8CFA7BF48AE88520A20828820A20828820A20828820A208FFD9, '1', '2021-10-06 01:13:39', '1', '2021-10-06 01:13:39', b'0', 0); +INSERT INTO `infra_file` VALUES ('427.jpg', 'jpg', 0xFFD8FFE000104A46494600010100000100010000FFDB00430006040506050406060506070706080A100A0A09090A140E0F0C1017141818171416161A1D251F1A1B231C1616202C20232627292A29191F2D302D283025282928FFDB0043010707070A080A130A0A13281A161A2828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828FFC0001108017F038403012200021101031101FFC4001C0001000203010101000000000000000000000607010405020308FFC40051100001030301040507060A08030803000000010203040511060712213113415161811422357191A1B115233242C1D1161752545572749394B2242536537392E1F0264362083334374482A2F163C2E2FFC4001C0101000203010101000000000000000000000102030405060807FFC4003811010002010204030507030402030000000001020304110512213113415114223371B13235617281A1D11552C1233454910642B2E1F1FFDA000C03010002110311003F00E5000D57E96000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001832600905ABD1F0F8FC4DA356D5E8F87C7E26D1EA307C3AFCA1F35F1DFBCB51F9EDF564006572800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000115001E49F5480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060C9802416AF47C3E3F136CD4B57A3E1F1F89B67A8C1F0EBF287CD7C77EF2D47E7B7D400195CA000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000454007927D5200000000000000000000000000000000000000000002407DA9692A6B24E8E8E9E6A893F26262B97DC84928B67BA9EB1A8E6DBD206F6D44AD67BB8A931599ECC3933E2C5F6ED11FAA2A09D26CC6E8C44F2AB9DAA05EC74AABF6184D9B55AFF00DDDF2CEE5EC4949E4960FEA1A6FEFF00AA0C09AD46CCF51C6D5740CA4AA6A7F753267DF823B73B05DED795B85B6AE06A7D758F2DF6A6508989865A6AB0E49DA968997301E517D5ED3D10CE000000000000000000000000000000000000000000001832600905ABD1F0F8FC4DB352D5E8F87C7E26D9EA307C3AFCA1F35F1DFBCB51F9EDF500065728000000000000000000000000000004BF41E9EB75E9B54DAD95ED9E3C2358D5C70EDC7ACE4EA7B14F62AF5865F3A27718DFF948638CB59B7279B6EDA2CB5C11A8DBDD96BE9FA165CEF549472395AD95F8554E7C957EC3ABAE6C94F63B945152B9EB1C91EF6EBBA9727334ED4BE86F14D58CA7927481DBCE6B13B950EAEBAB9BEEF7064E9473D3C71337732B719E3EE2B336F1636EDB3631D717B15B78F7F7E9F24681B16CA29EE3591D352B15F2BF97777AF7131D47A4286CFA7BCA24A87F96B5513B9EAABC5A89D98CF12D7CD5ADA2B3DDAF8347973D2D92B1EED7BCA060032350000000000000000000000000000000000000000000000000000000000000000115001E49F54800000000000000000000000000000000000063217FDFAC9D58F4A525B6DECBD6B391D4D46BC61A245F9C9D7AB29CD3D5ED2621873E7AE18DEDDFCA3CE51FD37A6AEBA8A454B6D32AC2D5F3A793CD8DBEB5EDEE4C9275B7E8FD2EDC5D677DFEE2C5E34F0E12362F7AF2F6AAAF71C8D49AD6B6EF079150B3E4DB4B3CD65343C329FF0052A7C1381172DBC4766BC62CFA8EB967963D23BFEB3FC2695BB47B9A46B4F63A5A3B452FD56C51239D8F5AF0F71DFB1E89D41A9EDD4F71BBEA3A88E2A96F48D8BCE55C2F2CF144F7155390FD41A178E8EB3FECB1FF002A16ACEEE7F1498D0E2ACE0888999EFDE50A8B63B6A545E9AE55B23D79AA6EA7D87D1763B65C79B5B5C8BDBBCDFB8B0EE956DB7DB6AEADCD57A4113A556A2E15D84CE08F684D6516AC6563A2A39297C995A8BBEE45DEDE4CF0C16DA1C5AEB75D6A4E48B748EFD9127EC966A3C3AD3A82AA07A72DE454C7F95508954EADD53A5EED516DA9B836ADD4EFDD7B676A488E4E6985E0B83F43751F9B369E99D7977FF11BFC8D22D1111BBA3C2F516D6649C79E22D1B7A43AC97FD29A85772FD69F936A9FC3CAE8F967BD138E3D68A685E341D5C34C95F60A98EF16D5E28F8573237D6DEBF0E3DC43B0746C97AB8D8EA92A2D754F81FD6DE6C77EB379298F789EEED7B2E4C5D705BF49EB1FCC39EA8A8E5454C2A73EE058A8FB1ED09158F6C369D4CD4E0A9FF7752BF7FBFD641EED6CABB457CB457185D0D446B8545E28A9D4A8BD68A44C32E1D4C649E4B46D78F2FE3D5A40021B00000000000000000000000000000000000001832600905ABD1F0F8FC4DB352D5E8F87C7E26D9EA307C3AFCA1F35F1DFBCB51F9EDF5000657280000000000000000000000003260EB586C35B7C9256D0B1AEE89115EAE76319CE3E0A45AD158DE593162BE5B72638DE5A343593D05547534B22B2662E5153E0BDC4F6D90566BAA886A6E6D6C5434996E234FF00BC770CF1F611ABC693B9DA6916A6AE362C48B85563B7950B0AE73A69ED0ACF2576EC9D135AC7638EF3B9AFC54D3CD7ACED34EB32EF70DD364C7CF5D4EF14AC6F35F5F462B750D8B4DA3A929A26BA46705644DE4BDEBDA6AD1EBAB3DCB14F5F4EB0A3D513E7111CDF12A9739CF7AB9EE5739572AABD664B7B1D7BCCF562B71FCFCDEE5622BE9B2D1BC58D6C73A5F34EB58A8C4557C38CB55ABD68402FF7CADBE552CD56F446A7D18DBF45A84F765D717D5DB6B282A155ED871BAABD4D5EAF72911FC19ACB85EEE14B6E63563A7915155CEC22679214C3314BCC64F2F367D752D9B0D2DA5E95BF7AC7AA38090DDF48DD6D544FAAA98D8B133E92B5E8B823C6E56F178DEB2E0E6C19304F2E5AED2006CD0D1D457D4360A385F34AEFAAD4F8F61699888DE58AB59B4C56B1BCB58FB535354554891D2C124CFF00C96372A593A7F67F0C2C6CB7A547BF19E898B86A7AD799D0AED5561B1B560A18D923DBC1594ED4C7B791AB6D56F3B638DDDBC5C1B92B1935778A47A79A1743A0EF550D47491C74ED5FEF1DC7D8874D9B36AD5CEFD7409EA62A9F1B9ED0EE3322B68A28E99BD4ABE73BDE71E5D5F7C91DBCB5CF4EE6A22215DB5168DFA42D36E138E79622D6FC5DE9366D588DCC75D0B97B158A872EBF42DE695AAE8E2654353FBB771F628B7EACD473CCC8296774F33B9377117259F6375CDB48F7DF1606BF1BC891FD54EBCA98F265CD87ED4C4B7749A3D06BFA62A5ABF8F928CA8A79E9A45654C3244F4E0A8F6E307C4BF116D77E8248D3A1AB8D8AAD72A71445EE5217A8B67B86BA6B2BF971E8645F82FDE64C7ACACCED78D9A9ABE01931D7C4C16E7AFEEADC1F4A8864A699F0CF1BA3958B8735C98543E66E38131313B4C00008000000000000000000000000000000000000454007927D5200000000000000000000000000000000180A4CB67F65A693CA7505ED11B68B779F85E3D2C89C51B8EB44E1C3B704C43167CD18693796FE9FB551695B3C7A9351C6AEAA7F9D6FA17261CE7753D53DFDDCF99C1D58DBE5C60A6BFDEDAE6C558E5640DEA6A226530DFAA8BED534B545F6AB51DD64AEABCB73E6C5167846CEA4FBFBCB6E66FE1BEC9DAE6377EBA18B7B7539F4B1F344F5A27BD0BC46FD1CBCB6BE9AD4CF9BACDA7699FED8F48FF2816CEB453756256495334B052C0A8C6BA2C2ABDCA99C71ECE1ED4265F8A0B5F5DE6A53FC86E56AA685D96A45F42E13B373873E95FCFF00CA9F028E491E9F5DFF00E6513111DD5C56D4EB6F7C98F272D62768E9BAE45D90DA7F4CD4FB23FB8B26C940CB659E8E8A29165653C4D89AF5E6E444C654FCA4B23FF2DFFE653F4FE85E3A3ACFFB2C7FCA85A9313D9CEE3183363C75F1727346FE9B205B50B3EA9AABBD4D65BA6959676D326FB12A3753088AAEF333D857DA3ED7A8EE6CAAFC189A46246AD499193F45955CE3DC7E93AFA58EB68A6A69F3D14CC58DD85C2E1530A7274B695B66996D425AA391893AB55FBEF57724C2732663AEEC5838B785A79C5CB1BF4DBA7D5D6B7325650D3B6A155666C6D47AAAE72B8E3EF3F3A6D3BFB7977FF11BFC8D3F49A1526AFD9A5D2F7A8EB6E1056D23239DC8E46C8D76530D44FB08B44CC6D0AF08D463C19ED7C93B46CA7CCB237CD345144D574923918D6A75AAAE110B1FF14179FD2141FE471E742E8DABA3DA2A535CE2456DB99E51D2373BAFCF0663C73FE531C527CDE92DC4F4FC96B52DBCC46EDCDA3E9AB4D9B4F58E28B14F7557B299B331708EE19739DEA5E39E79535A92AA3D4913B4B6B0CD35EA9FCDA5AC7A61CAEEA455EBCF0EE72779CFDB25DFE52D58EA58DD98685891FF00EF5E2EFB13C0DB9DD6CD59A1E965A8AEA6A4D4540DE8D1F2C88D59913922AAF6A630BD4B9267BB9F4ADE34F8EF977DE67BF9C6FDBF4F5416F16DAAB3DCA6A1AF8963A88970A9D4E4EA722F5A29A858D0B9BB42D32F8E4DD4D4F6B8F79ABD7511FDBCBDBEB2B84CA2AA2A6153A94ACC6CEB69B3CE589ADFA5A3BFF3F2964004364000000000000000000000000000000003064C0120B57A3E1F1F89B66A5ABD1F0F8FC4DB3D460F875F943E6BE3BF796A3F3DBEA000CAE5000000000000000000000000074ECB7CAEB2BA575BE548FA54447A2B51738CE39FAD4E6022622D1B4AF8F25F15A2F49DA5DCBAEAABADD697C9EB2663A1CA2AB5AC46E71CB9162DCA1FC21D0ACF244CC9D1B5CC6AF5AB7A8AA2DB433DC6AE3A6A462BE47AF57244ED52796D9EB3424D0D3DD5EC9E86A9729D1E556254E784F1434F3D2B1B453BC793BFC375192DCF6D56F34B46D33E8AEA46BA391CC91AAD7B570A8BCD0CA16FD65874FEA755ACA791A93393CE7C2EC2AFEB27DE7CE9744596DCADA8AB95D2A3173991E88DF12DED95F38EAC73FF008FE69B6F4B44D7D776AECBEDEFA4B5D4D7D43771B51F45179EE275FB7243DDA9AB28AF171A9B5CC8C65448AAA8AD4545C725C2F592FBDDF16F953F2069D5661ED54926CE1AD6A7344F7103D4164ACB1D524558C4563932D95BF45C570C45AD3393BCF933710BDB0E1A534BBF2D3BDA3D5F7BB6ABBB5D29169AAE76AC2E5CAA3588DCF71C3077748E9E96FD5E8C4CB69A35459644E58EC4EF3667930D77DB6871A3C7D6E58AEF36B4BC69BD395B7E9D1B4EDDCA6477CE4AF4E089DDDE5979B3689B5F9A89D22A72E7248BDFFEF81F2D437DA1D236E6D150318B528DF323EA6A7E5394A9AE15B3DC2ADF535723A495FCD57ABB93B8D488B6A3ADBA55DABE4C1C223931C45B2CF79F2876F51EADAFBC4AE62B960A6FEE5BD7EB5EB23CBC7060F46ED295A46D58707367C99EDCF927790D9B650D45CABA2A4A466FCB22E13B113B57B8F8451BE591B1C4D57C8E5C35A9CD57B0EBC4B73D29748A5960E8A656E51AFE2D722F34E1CC5E676DABDCC18E26D17BC4F246DBCC2C6B65B6D7A2AD4EABAC91AEA854C3A554E2E5FC96A7615FEA7D575B7A7AB379D051E5710B579FAD7ACD0BDDE6B2F556B3D6BD17098631A98462771CEC1AF8B4FB4F3E4EB2E8EB78A73C781A68E5C71FBFCD3AD93D6B9974A9A4CF9B2B37D3D69FFD9B57ED435DA6B55D4B51566A295525E89FD59E7BABD5C5148D6839961D5743BBF59CAD5F61DDDADC28DBAD2CC9CDF12B7D8BFEA63B52BE3ED31D261BB87519238673E39DAD4B24371B75AF5B5A1B5346E6B6A9A9E6BFEB357F25C9D855573A29EDB5B252D5B1592B170A8BD7DE9DC6D69DBD5458EE2CA9A755E8D78491F53D0B23525B29B56E9F657DBF756A9ADDE8D7AD7B5ABFEF9889B69EDB4CFBB2AE4AE3E2D86725236CB5EF1EAA8C1E958A8AA8BC15382A28C1BCF3BD9E40010000000000000000000000000000000008A800F24FAA400000000000000000000000000000004B62D9452DC6E14D474C999A77A46DF5AFFA71F0261B47B8436F8A874ADA9F8A3B73516754FF00992AA75FAB2ABEB5EE3DECBE28A821BC6A6AA6A2C76E85590F1E72393FFA4F138D43A5EF17EB5576A06A31D1A39EF915CEC3E454E2EC263AB897ED0E6E4C94B6A37C93B569FF00CA7F8847510B4F6157748EBEBACF22F99335278D157EB27077B787B0AB10DFD3F7296CD7AA4B8C0ABBF03F2ADFCA6AA61508A4ED2D8D6E9E35182D8FCFC933DB55F56BF51C76E89D9A7A06E17BE45E7EC4C215E9F4AB9E4AAA996A2672BA595EAF7B97AD5572A7CC5A7795B498234F86B8E3C83F49ECDAE34F5DA3ADBD048C57430B6291B9E2D72261514FCD87B8A5923CAC52491AAF5B1EAD5F7135B72B0710D0C6B6914DF6D9FAEB982B9D8EDCE066908A3ADAE8D6A5F50FC3669B2F5555E09C5724EEB2BE9691A8957510C0AECEEA48F46E7D5932EFD37789CD82D8B2CE2EFB361EF6B1AAE739A889D6AA7E7AD65AD6EB26A7B8FC9179AA650B64DC8D237E1BC111171E3922F74A999F70AE62554EE8D677E13A45DD54DE5E499C60D2C7798E6EF55A0E114C13CF79E6DE3D121A6D69A8E1A98A65BC55C9D1BD1DB8F765AE44EA54EC52F4A2D534357A424D4316EF46C815CF6AF36B9138B17C781F9A910DDA5B955D35A6B2DB14CA94954E6BA4677A2E787BB3EA222FEACFACE178B5115E4888989FFB8F36B54CEFA9ABA8A99955D2CEF591EABD6AAB93E58E27A05267774E2368D9BD60BB4F63BBD357D2AFCE44EE29F94D5E6D5F5A122DA65B608AB69AF96C6FF56DD5892B31C9B2638A77679FB4873932A84FB492FE10686BC58645DFABA2FE99479E689CD513BB394FFDC5A3B6CD2D57FA57AE78F94FCA7F894010C9843255BA000000000000000000000000000000001832600905ABD1F0F8FC4DB352D5E8F87C7E26D9EA307C3AFCA1F35F1DFBCB51F9EDF50006572800000000000000000000000000012DD0BA8686C3154F95C323E57AF9AE6222F0EC393A8EF93DF2E0EA89BCD8DBC2367E4A1C808638C558B73F9B6EFADCB7C31A799F761D4D394EFADBC52D2367921499DBAAE62F1443A7AF6D8EB3DC618A3AA9E68E466F7CEBB795173DA722C35CDB65E292B1EC57B617EF2B514E96B7BDC37EB94735344E6471B37115E985771E65662FE2C6DDB667C57C5EC56DE7DFDFA7C9C6A1AC9A82B22AAA57AB268D72D54F82932D47AC28EF1A696966A6779639132AA89BAD776A2906C054C96BE1ADED169EED7C1ADCB8296C749F76DDE188911CF4472EEA2AF15E782F4B23AD36AB5C105354D3B62DDCEF2C89972F69456015CF83C6888DF66D70DE25EC369B4577995BB5DA734DDCAA5F34956C59DEEDE7392A132B939170D9BE51CEB65723BB1923787B50AE5155392AA1D8B56A0B9DADED5A5AB9309CD8F5DE6AF82987C0C94EB4B36E78968B3DBFD7C3B6FE712F85DACB70B4CAACAEA67313A9E9C5AE4ED45439E5B162D61417C44A2BB431C72BF8223B8B245ECE3D671AF7A01EDBA40B6CF3A8A593CF6AF3893ED42F4D4ED3CB9636953370BADE9E2E8ADCF5F4F387D7669624CADDEADA88D66521DEE5DEE23FAF2F6DBCDDFE670B4F4F9631C9F5B9657D44D35EDCE2B269F8ADB46A8934CCE8DA89CDAC4E0ABF615314C11E25A72CFE8C9C4AF1A5C55D0E3F2EB6F9867ACC036DC077345AFF00C556CFF17EC251B5D5FE9741FAAEF891FD9DD3F4FAAE957FBBCBFDDFEA7536B336F5F29E2CF06439C7AD57EE352DFEE23E4EEE19E5E159267CEC84AA130D9C5FD2DB5CFA3AB911B493AF9AAE5E0C77FA90E43286CE5A464AF2CB95A5D45F4B9632D3C922D7B1D1B350CD2504AD91B2A23DFB9C511CBCF0BEFF00123A8B93BD45A5ABAB2C6FB9C4B1A46D457231578AA2673F038284629AEDCB13BECB6B2324E49CB7AF2F37587900191A8000000000000000000000000000000008A800F24FAA4000000000000000000000000000000C2B55EDC378AAAA22027A427B7DCDA365965A16A2B65B9CCEA9953FE945CE17FF00892DD9DAA7E28EE1C3AAA7E0A4476BAE4A7BA5A2DCCFA14544C6227AF87C1097ECEB09B23B8F0EAA9F829963ED6CF39A98DF495BCF7B5B7FFB95231AFCD33F550FA1DAD11A6AAF54D7B29699ED8A38D8D7CD33933B8DEEEF52D766C7ECDBA9BF595CAFC717239A99F7158A4CBABA9E25834B6E4BCF551E0BAABF63D6C5A7779157D5C7509F4164DD7373DE98429EBADBEA2D572A8A1AD66E5440EDD722725EC54EE5422D598EEBE975F8757BC629EB0D606327D994D52E6E5296A1517AD2272FD846CDB9B447796E69A6A2EA6B46533FD2E2FE742C4FFB40222D4D9F2D4779B273F02B7A1656D1D7535545493ABE091B2B5AE85D8556AE533C0ECEAED4577D54FA67D75BD635A747237A389FC5171CF29DC5B7E9B39B9B14DF578F2C6DCB113BA30864FA792D5FE6951FBA77DC3C96AFF34A8FDD3BEE29B3A5CF4F57C81F6F24ABFCD67FDD3BEE1E4957F9ACFF00BA77DC3639ABEAF883E8FA7A88DB9929E66A76B98E4F8A1F14767B3DA0DE27B4BD926D9AD7FC9DACEDEF72FCD4EE5A77A7739387BD108C9EE095D4F5104CC5547472B5E8A9DCB9FB0989DA58F3523263B527CE1D1D5543F25EA6B9D12261B14EE567EAB97793DCA72C9AED7E344D61D3B795452C7267B578A7D884285A369534979C982969EFB3000219C00000000000000000000000000003064C0120B57A3E1F1F89B66A5ABD1F0F8FC4DB3D460F875F943E6BE3BF796A3F3DBEA000CAE500000000000000000000000000000000000080005920000000AA1E8B1F456B58A2A54A3BD4D8731311CEE4CEF2762F7F795C031E5C55CB1B4B7345AECBA3BF3E39FD16F576AAD332488B53D1CEEE48E743BDEF53A13592C35F44CA9968E08E191A8E47AFCDF05F615269AB6FCAB7BA5A6C658AE473FB9A9CC9DED52E694F6FA7B6C0A89D2F9CE44FC94E4685F0456F14A4CEF2F4FA6E2339B4F9353A9A56623B74EF2F9DDB6750CAC74B68AB54EB48E5F39BEA472724F6901BA5AEB2D550B0D740E8DC9C979A2A76A293ED93C756E8EA279679168DA9B8C8D578679AAA7FBEB3BCDB8D9F533EAEDB2235EF89CADC3B9AE3EB34B57364C569ACF58861C9C3B4DADC35CB8E3C3B5BB47AA25B26A5E92E557549F4638D1A8BEBE3F61C3D7D56955AA2AD5AECB23546278271F7E4B3F4FD95BA6ED754C8DCB3B95CE7B7098554C7042A2AEB65C96592A2A68EA5AB2395EB98D79AAE54BE1BD6F966FBF46BF10D364D36871E9F6EBBEF2E6032A8E6B951ED56AA75298375E776D96BECB2A52A34FD452393290BD5BE0BC7EF2B4BA53AD25CEAE05FA92B913DA4CB6472B9B71AD853E8BA34763BD14E3ED0E9FC97534FFF00E54E93DAABF71A98BDDCF68F577B591E370DC593FB7A23200371E7C0000000000000000000000000000000115001E49F54800000000000000000000000000007DA878D7D237A9D33117FCC87C4FA533FA3A9824C7D0918EF63917EC08B7D994BF6C0F576BCAA6AF26431227B1549B6CE7FF292E3EAA9F8290BDB1468DD7123D39494D13BDCA9F6135D9C7FE525C7D553F0532D7EDCBCFEABFD8E2F9D51ED84DDA9686E1574352F464956C63A2739708AAD45F37D6A8B9F02F4CA769F91ADF4F3D64D4F4F4713E5A8911118C67355EE2C28748ED05226EED554B13A9AB5DC93DA296DA36D95E29A0C59337893922B33E52BD6491B1B1CF7B911AD4CAAAAF043F3F5EA2875B6D4960A273BC9267231D2C69CD8C6F9CE4FF7D67DAE5A3B5DCB472255BEA2AA1C79D0A566F6F78678FA8DAD8D5CE86DB7BA8B6D6D2AC771A95DC64F2734DDFF0094A8A9C3EDF61333CD310C5A6D357498B266C578BDB6DBA797E2B4AC1A46CD628D128A8A3E93AE591379EABFACA4811AD44C235113D4641936D9E7F265BE49DEF3BCB184EC4184EC432031B184EC4184EC43200C613B10613B10C803CAB1AEE0AD6AA77A114D4FA0ACB7E85CAFA665354F36CF0351AE45EF4E4BE24B4113113DD97166C98A79A93B4BF2DEAAD3D5BA66E7E495ED4563F8C5337E8C89F62F71C593E8397B1327E93DA5D823BF697A98D199A981AB3C0E4E68E6F578A653C4FCD8EE2D7276A60C36AED2F69C375BED78666DF6A3BA7BB57F3A4D3CFEB75B98AA40C9E6D7711DC6CD4D9E30DBD88BEDFF00420645FBB370EFF6D5FD7EA000AB7400000000000000000000000000003064C0120B57A3E1F1F89B66A5ABD1F0F8FC4DB3D460F875F943E6BE3BF796A3F3DBEA000CAE50000000000000000000000000000000000000002C00000000001F482274F3C7146997BDC8D44F5952B1369DA1636CA6D8E8E19EE52A265C9D1C6AA9D5D6A43B565C9D78BFCF33155EDDEE8E344EB44E09ED2C7D412B34D68A4A68977667B12262A73DE5E6BE0995207A06D6B71D4502B93E669FE75FE1CBDE68E3B44CDB34FE8F4DACC3315C3C3A9DE7ACFEA9DCCE4D27A11ADCA24E91E329D6F77595452D4CB4B591D540F564EC72391C9DA4DB6AF74496B21B6C6ECA429BEF44FCA5E5EECFB481A1934B49E49B5BCDA9C673FF00AF18B1CED18FA47CD65D2ED2A9FC9A34A8A2996A31E76EAA6157B8F69B4AA4FAF6F9BC1C8A56461C9927D9317A2238EEB3688E6FDA16FC17ED357F448AA5226C8BC9B3B3757C17B4E45FF67CC7C6E9AC92F7A42F5CB7C14AD53872243A7356D7D96446A3967A5EB85EBC113BBB0C7E05F1F5C53FA33D78A60D57B9ACA47E68EEEBECE20A8A1D552D354C4F8A5485779AE4C2F343E7B564FF008962E3CE99BFCCE2C5B3D4DB6F71C572A6463E66A6EE7939B9E6D52BADAB393F096344C2E29DBFCCE2986FCF9F798EBB3775DA5AE9B86F2D6DCD133BC4A16003A0F22000000000000000000000000000000008A800F24FAA4000000000000000000000000000030A64013CDA7E6B6834CDD5BC52A6912355FF00AD31F79AD69A9D676CB33ED9436FAB4A37EF6F316937B3BDCF8F89B14C897ED924D0A7FE2ACB51D22679F46BC797A957D86FD06D6AB696869E07DAE199F1C68C5916654572A26338C193A6FBCCB8B1E2462F0A948B72CCC6D3FF0071FB23D60A7D57A7EADD536DB3D5367737737E4A5DF544EEEC242BAAB68B95FE8753FC127DC7DD36C75A8A9FD4F022F674EBF719FC7257AF1F91E0FDF2FDC4ED5F553263D565B735F05667E6D776AADA2F0FE8753CFF00324FB88EDC29354D75E52EB35A2AD2B9AF6BFA48E9B772E6E30B84EBE084A976C75EAA9FD4D073FEF97EE0BB63AFE3FD4F073FEFD7EE1EEFA94C7AAC73BD30563F56AFE156D1BF33AAFE093EE33F853B465FFD1D57F049F71B3F8E2AC44E367833FE3AFDC6536C757FA1E0FDFAFDC3DDF563F66CFF00F1EBFB357F0A368DF9A557F0483F0A368DF9A557F0486D7E392AFF0043C1FBF5FB87E392AFF43C1FBF5FB87BBEA7B367FF008F5FD9ABF851B46FCD2ABF8241F851B46FCD2ABF82436BF1C957FA1E0FDFAFDC3F1C957FA1E0FDFAFDC3DDF53D9B3FFC7AFECD5FC28DA37E6955FC120FC28DA37E6955FC121B5F8E4ABFD0F07EFD7EE1F8E4ABFD0F07EFD7EE1EEFA9ECD9FF00E3D7F66AFE146D1BF34AAFE0907E146D1BF34AAFE090DAFC7255FE8783F7EBF718FC7256FE8883F7CBF70E9EA7B367FF008F5FD9A926A7DA33915AB4753854E3FD09086525A6AD75050D05652CF4F3544ECF32566EAE15DC571D9C3DC4F936C95B9F4441FBE5FB8F8E8FB83B54EBEA8D457089B0D3DBE9FA456A3B28C544546A7BDCBE0368F566C739B4F4BDAD8A2B1B7979CF9381B56AB4AAD735AD6AE590323853C1B95F7A9123EF70AB7DC2E3575B2AAEFD4CAE9573D48ABC0F818E6779DDD6D363F0F0D69E9000086500000000000000000000000000000C19300482D5E8F87C7E26D9A96AF47C3E3F136CF5183E1D7E50F9AF8EFDE5A8FCF6FA80032B94000000000000000000000000000000000000000B00000000012FD9A5B52BAFCB3BD33152B77D7F5BABED2225B9A3E99BA7F46BEB2A3849235677F7A7D5F763DA6AEAAFCB4DA3BCBABC1B4F1975117B7D9AF5945F6A1745AABCB68D8B98E99BE0AABCC92ECF28E3B5E9892E350DC3A66AC8ABD7BA9CBDDC4ADE9229EF97C6B132B2544B973B9E11578AF827C0B1768B5CCB669F8ADB4AA8C599123444E68C435F2D76AD30C7EAEA68F2F364CDC432768ECAC6EB58FAFB8D45548AAAE95EAEF51AC8A39837E3A4443CCDED37B4DA7BCBD000954306401D5D3D7EABB1D4BA5A554735C98746EE4BFEA6B5DEE53DD6B9F5554A8AF77244E4D4EC434C15E4AF3736DD59673649C718B9BDD8F27900191840000000000000000000000000000000115001E41F5480000000000000000000000000000000259B2FBAC741A93C8EB38D15C58B4D2B579657822AFB71E270F525AE5B1DF6B2DF322AF42FF31DF94C5E2D5F61CD5CA2A2A2AA2A7254EA2C5BF3135A68E86F50222DDED8DE8AB1889E7491FE5227BFDBD85BBC6CD1CBBE0CF197FF005B749F9F94FF008482AE9E24D87365E8A3E956919E7EE2678B9133929CC96E4772A6AED87D4454F222CB4B036195BD6D76F27B95389512136F263E17CDFEAF37F74B2002AEA8000000000000000058BB0F8A3935157B64635E9E4C8EC39329F490AE8B1361B2322D457292472358DA3455555E089BDC549A7768714998D2DF64675F2359AD2F0D6B5111B3E11113098C275120AACE97D99474DC1B72BF3B7E444E0E6C489CBD9C3FF729E6DB6EA6D59B40BADC5DE848245A89A57A61AAD444C357D7BAABEA381AD2FCED457D9AB1379B4ADF9BA762F0DD8D392E3A9578A9333B4CCB5EBBE6F0F079562267E7E51FE5C2001475C0004000000000000000000000000000000003BF6AF47C3E3F136CD4B57A3E1F1F89B67A8C1F0EBF287CD5C77EF2D47E7B7D400195C90000000000000000000000000000000000000196B55CB86A2AAF62264CB1AAF7B58D4CB9CB84253B4BC827743B38AE9988B55590C2BD8D6ABFEE3AF1ECEADB1373575D3B913B15AC4F81AD6D5E38F37571704D664EBCBB47E32AB816CB74BE94819F3B246FFD79F39F78F93F44B39F92F8C8EFBCAFB6567B44B63FA0E48FB592B1FAAB9D376E75D2F34D4C9F41CECBF8670DEB5279B53B8A52D053DB61546EFE1CE6B7A9A9C13FDF71D8B63F4ADBA7596DF352C52AA6EEF23B2B83DDCA9F4D5D67E9AB24A79A54444CACB8E1ED35AF9F9F245A6B3B43A98387F81A4BE1A64AF3DBCF7F245B6516BDEABA8B8CA986C69D1C7EBEB5F670381AF6E9F29EA19FA3766183E699D9C39A96B5B1B69A3A1F24A09E28E2E3F464455CAF5E72466A367543222F93574E8E55CAEFE1FF007134CF5F16725FF45753C3737B1534DA7989F39EAAB0137AED9D5CA1CAD2CD0D42272CF98ABF123770B15D2DEDDEAAA299ACEA722653DC6ED72D2D1D25E733683538637C9497300EE54C283234DE800480000F2002C0000000000000000000000000000000022A003C83EA8000000000000000000000000000000000ED692BFCFA76F11D5C397C2E4DC9E1EA919D7E29CCE2810AE4C75C959A5BB4A71AC6D4B6CA49AF1A72557E9DBBB375EC6F28D55728D54EAE3C97AB910545251A33543AC6E9E92B61F2CB355652A299533CF9B93BFB53AFD66C6ACD2294B49F2C69F93CBAC7226F2398997C3DCEEE4EDE69D65A7AB4B0E49D3DBC1CBE7DA7D7E7F8FD51107969E88744000480000000000007574CD35D2E35925AACF9DEAE674736170891A2E55557A93B7D878D3F64AFBF5C19496D855EE55F3E45E0C8D3B5CBD44C6ED78B7E8DA096C9A6A549AE9279B5B7044CAB57ADADEACFB93D64C7AB47559FAF838E37B4FEDF8CB5F5A5C68EC9676E93B0C88E631735F50DE0B2BFADBF7F821040AAAAAAAAAAAABC5557AC1599DD974F8630D36EF3E73EB2000360000000000000000000000000000000000001DFB57A3E1F1F89B66A5ABD1F0F8FC4DB3D460F875F943E6AE3BF796A3F3DBEA000CAE48000000000000000000000000000064C1D0B25AAA6F35CDA5A36E5EBC5CE5E4D6F5AA916B45637964C78AF96D14A46F32D4A6A79AAA66454F1BA491CB846B533927564D9E4D32364BACDD0B57FE5B78BBDA48E286CFA26D8D7CBE754BBEB632F91DDC9D49EE20B7FD6572BB6FC71C8EA5A65E4C8D70ABEB5E669F899337C3E91EAEF7B269387D62757EF5FFB63FCA6EEA9D33A61158CE85274E0A8D4DF7F8F6156DCEA23A8B954555347D147249BEC6A751A88864CF8B07873BCCEF2E76B388CEA62295AC56B1DB67726D5D7B9A1489F5AF4444C65A9BAABE27267AEABA8E3354CAFF5BD4F8221932463A57B4356FA8CD93ED5A65E40305B661DE59000D8DE59472A72554F529B305C6B29F1D0D54ECC7E4BD4D403963CD6ADEF5EB59949A835ADE6937512A3A5627D591339F1E649EDBB4785ED6B6E74CAC775BE3E29EC2B23260BE9B1DFC9D0C1C5F57827A5F7F9F55BCB43A6754C2AEA6585B3AA6731F98F4F5B48A5FF0041D75035F2D0392AE24E3BA9C1FEC21B13DD1C8D9237398F6F16B9AB8545269A6F5DD651B9B0DD57CAA9F96FE3CF6F8F598BC2CB8BE1CEF1E92DEAEB347AEF77534E4B7F747F984338A2AA39151C9C1517A816D5FEC16ED554495D6C7C5E538CA48DE4FEE7779555653CD4750F82A58AC958B87357A94CD8734648F4973F5FC3F268E627BD67B4C3E20C193339EF2002C0000000000000000000000000000000022A003C83EA8000000000000000000000000000000000000614EDE96D4B70D3952AFA2911F0BD7E769E4E31C89DE9D4BDE9EF38A60989D95C98EB92B34BC6F12B0DF66D3FAD58B3E9C9E2B4DE1C9E7D04FC237AF5EEE3B7BBD88436F565B8D96758AE7492C0BD4F54CB1DDE8E4E0A73D1551C8E6AAA3938A2A2E153BD17A949759F5F5DE8A04A4B824375A0C6162AB6EF3B1D9BDF7A293BC4F769C62D460E98A79ABE93DFF49FE51045C99276AED077B4CCACABB04EEE2AADCBA3DEF7A7B907E2F5954DDFB26A2B6D73179239DB8BEEC93C933D978D7E3AF4C9135F9C7F9EC82026B26CC75335331D3D34A9DADA84FB707C9366BAA57FF431277AD4331F1239656F6FD37F7C7FDA1E09D45B34BAB1BBF5F5F6DA38FAD5F36F63DD8F7994B0E8CB53B376BF4B719539C144D4C2AF670CFC49E59F356788619E94DED3F846E83451BE591B1C4C7C923D70D63132AABEA26B6BD06B0D3F97EADAC65A681A9BC8C5722CCFEEC757BD7B8FACBAF696D71BE1D2566A7A16AA63A79911F22FFBEF5521973B8D6DDAA9D5171A996A265EB7AF044EC44E4883DD5667519FA7D88FFB9FE23F74AEFBACA265B56D1A4E97E4DB5E30F97FE6CDDB95E69EDCFA8861E51307A2932D8C382986BB523F99600043280025600000000000000000000000000000000000077ED5E8F87C7E26D9A96AF47C3E3F136CF5183E1D7E50F9AB8EFDE5A8FCF6FA80032B92000000000000000000000000120D1FA7D6FF005CF8DD32450C288E7AE32E5CF5211F3668AB6A68645928E77C322A63798B829939A6BB57BB369ED8E9922D9637AC792D6752E95D36DCCEDA7E99A9C77FE724FB4FA52EB4D3CC7E237244ABD69163E053F23DD2395D2395CF5E6E5EB3C9AFEC713F6A665D98E3D7C73FE8E3AD63E4B8AFBA7EDBAA99E554D53F3FBBBAD918EDE6A772A15EDDB49DDADB22A3E95F347D52429BCDC7D8722DF5F556F9D26A399F149DAD5E7EB26F6DDA44B1B11971A44957ADF1BB0ABE0A56299B0FD8EB0BDF51A0E213BE78E4BFAC7641DB4B52E7A3129E6572AE1137172AA496C3A1EE3707A3AADAB494DF595DF497BB04A1DB43B5747BC94753BFF93BAD4FB4E05E75FD6D5C6B1D04494AD5E1BD9DE77FA133933DFA56BB295D2F0DD3CF3DF273FE1094250696D36C449920595BD722EFBD54F2BAA34B54B7724647BBFF00541C0A9E59649A474933DD23DDCDCE5CA9E10B7B26FD6D699944F1C9A74C38EB15F92D8ABD2DA7AFD0F4B6D7C513978EFC18C78B79107BC690BB5B65545A774F0F54B12653C53A8E35256D4D04C92D1CCE8654FACD526F69DA44F1C691DCA95B32E31BF1AE157C0AC53362EB5EB09F1B41ADF8D5F0EDEB1D9075A4A8E93A3E825DFE5BA8C5CE491D8744DCEE32B5D551BA929FADCFE0E5EE44257F8C4B5247BCB4751BFF0093BADFBCE15DF6895752C732DD036991786FAAEF3B1F613E267BF4AD76234BC3B04F3E4C9CFF008424EDB6697D371A36A920E9719574D87397BF1F71E3F0AF4BCB1A325466EFFD54FC3E054D34D2CF2BA49A4748F771573972AABEB3C389F64DFADED33289E3B349E5C38EB15F92DAAAD37A72FECDFB6BE38A444FA54EA889E2DE441EF3A3EED6D7F9B02D4C5D524499F6A751C2A3AAA8A2A86CD4933A291BD6D5C139B5ED1AA216232E14AD9D7ADEC5C2AF811C997175ACF341ED1A1D6FC68F0EDEB1D908F23A8E9773A1951DD8AC5424363D1772B948D5A889D4B065155F2271C762212C4DA1DA5D1E5D4751BFF92AC6FDE71AEBB45AAA8639B6DA76D3B57948E76F2FB303C4CF7E95AEC9AE9387609E7BE5E6FC2212DA082CBA3E95D1AD5246E7E15EAF7E55EA9D78EAF035AA35669AA97AB6A3122F2557C394F815255544B5333A5A891D24AEE2E73972AAA7C488D1C77B4F55B271FB563C3C38E22BE92B764D3DA6B5042AB6E74314C9C51D02A22A7ADA56FA92D12D92E4B4B339AFCB51ED73792A2AAA7D8685354CD4B2A4B4F23A395BC9CD5C2A18A99E5A999D2CEF74923B9B9CB95532E2C56C73F6B7868EB35B83538E27C3E5BFAC767CC00677300000000000000000000000000000000115001E49F5480000000000000000000000000000000000000C003200212185C271C267A97AD0C804ED3DDF48AB2AE36EEC75752C4EC6CCE44F89F575C2B9CDC2D755AA75A2CCE545F79AB83284EEAF875F41EAB22E65739EBDAE72AFC42222270320895A221E4C80000000001200090000000000000000000000000000000000001DFB57A3E1F1F89B66A5ABD1F0F8FC4DB3D460F875F943E6AE3BF796A3F3DBEA000CAE4800000000000000000000000064DDB6DAAB6E7D279053BE758F1BC8DEACE7EE3E75F41536FA8582B617432A26775DD8579E37E5DFAAF38B2453C49AFBBEBE4D5001650000197183AF1E9DBBCB4EDA88E825753B9BBED9131C5BCF2724AC5EB6ED2C97C3929B73D6637650C9843AD6DD3B77B8D3A4F4B412BA25FA2E5C3729DA99C649B5E2B1BCC98F0E4CB3CB8EB33F27254C60E85DACD70B56EADC69A4811CB86AAAA2A2F8A2A9CF4E02B3168DE117A5B1CF2DE36914C19530595650F4793AD53A76EF4D4CEA89A865642D4DE572E38276F322D78AF795A98AF9379A5667672000140C9800003AD169CBBCB4EDA88E825753B9BBED9131C5BDA56D78AF7964A62C9937E4ACCEDE8E51930096260004A40000000000000000000000000000000115001E49F54800000000000000000000000000000185036AD9433DCEE34D454AD474F3BD23622F6A9743F4DE8FD196D864BE3595133FCD49266AC8E7AF5EEB392271F81586CF2B22A0D676AA8A876EC4D955AAABD5BCD56A7BDC5A5B5CD2B72D40943536A6A4EB4E8E6BA2DF46AAEF2A2E533C3ABB7B0C958DA3770B8966B7B4530DEDCB49EF30F355A4B4AEAEB33EAB4F24704A996B65851588D7A753D9C3B53AB257BA0B4749A86FF53495AAE869E8B854A27D2DECAA6E278A2F1EE2D0D9369BAFD3F67AB6DD11239EA25DEE851E8EDC6A261155538657BB3C3079D13554B0EB3D59429B8C9DD5093353ADC98E3EF5F796DB78DDA11ADC9863363C569B4476969D737679A7EBD2D7574B4A950DC6FF004913A5DDCA7D6771C29C0DA5E85A2A2B5FCB5624DDA76E166898BBCD56AAE11EDF154CA72C2E7860D6D61B3DBF55EA8AC9E8216D4D3554CE95B2ACAD4DD472E551D95CF0CE3867860B1AF141F27ECD2AEDF23925753DB1D1B97A955B1F34F14276E9B4A273469FC2C98B24DA67BC6FBABED9A684A4B8DBD2F17CF3A9D573143BDBA8A89CDCE5ECCA7B892DB23D9FDFEB1D6CA2A3A474D85C6EC4E8D5E9D6AD77055FF7D477FE467D468186D146F48DF251C70EFBB8E115111CABE1922745B30B22E528AF957E5B1F37C5333CD5EBE08994F69131B76567575CF6BDF2E49ACEFD36ED1F8CABEDA069A4D337C5A68A47C94B2B7A485EEC671C9517BD17E2871EC3047537DB6C33377A392A63639BD4A8AE445453775969FACD397875256B925DE4DF8E744E12A2AF3F5E79A1A9A6FF00B4B68FDB22FE7429E6F498ED33A5DF9B9BA775A3B55D2D67B46974A9B7514704EB3359BCD55CE1517B54E26CEB67A97BA76DCAF0E923A157622898BBAE971C15557A933E2BDDD735DB5FF6359FB4C7F071D8D46AFD3FA02A9287E69D4F4BD146A9F55708D47782AE4B4C46EF398F5D9ABA6AD2B6F7AD698DFF000E8E43AD7B3FA49FE4E99B6D64EDF3375F2F9CD5EC572AF05F1227B44D9DC16BB7C973B12BFC9E2F3A5A772EF2B5BF94D5E784EBC9583955CAAAAB955E7DE48A4D6D7E75A62B6A572B69591742A88C4DE73718C2AAA67970226636DA61D5A6835382F5BE3CBBFAEEB0B65FA52CB78D27155DC68239A7591EDDE555CE11787594FD6B1ADAC99AD4C35AF7227AB25F9B18E3A162FF001A4F89425C13FA7D47F88EFE6522D1D224E1D92F7D5668B4EFB4FF002B37641A6ED37BB657CB73A38EA1F1CC8C6ABB3C1319211AE28E0A1D5972A4A48922822930C6A2F044C21676C13D0F74FDA13F950AE3693C35CDDFFC6FB106DEEC234B92F3AFC94999DA23F84700055DC00000000000000000000000000000000000077ED5E8F87C7E26D9A96AF47C3E3F136CF4F83E1D7E50F9AB8EFDE5A8FCF6FA80032B920000037AC75CB6DBCD1D52265237A2B93B5ABC17DCA5A5B47A08EAB4ABEA226377A07B256AB53AB92FB973E060C99BC3BC5663BBA7A4E1FED583265ADBAD7C94F82D1D95D0363B4D555CCD45E9A4DDCBB8E5AD4EFEF55399B58A0486BE8AAA34444918B1AE3A95AB94FE62B1A989C9E1B2DB845EBA38D56FFA2020BAAC71C162D150C93469F334FD33D1C9C55CA9BCA9ED5C113D9F69E8AF12D45DAE8DE998B22A318E4F35EEEB72A75A71E5CB9911AA8DAD331D2192DC12F16C78EB6DED68DFE5081A31EE6AB9AD556B7E92A2706A76A9E50B86E1AD2CF6AAF7D0F412BBA25DC7AC4C4DC62F5A734E5D7833A9B4ED05FED0EADA16312A959D2C534698E93AF75DDB9E5C7914F6B98DB9ABB44B2DB8145A2D1832C5AD5EF0A74F4D6B9D9DD6AAE1155709C910B4F64B1B24B0D52BDAD77F497734CFD461BD2DE2C3A6EB27A573F153348E9665646AE54572E7CE5EECFB09B6AE62D34AD779571F04ACE1A66C9962B13EBFFEB81B1F5F9EBAFEAC7F171C8DA8AFFC56FF00F099F6926D9DD67CA3A82FD54888D64AAC73513879B9763DC7CF50E9B9EFFAD5EEC2C7451C6C49264EDE786F7FC33EDC3178AE79B5FA746F5B4D6CDC3298B0F5F7BFCCAB005C7A8EF16DD2F6E6D252C50BAA91BF350639762BBAF9F8AFBC8169CB14DAB6AABA69AB12196356AB9563DEDEDECF7A631836A9A8E6AF3DA36872753C2FC2C95C18EDCD927CBD3F5464162FE2CA4FD28CFDC7FF00D1CDD43A1DF66B44F5EB5E93245BBE6245BAAB972273CF793ED38A6768952FC1F598EB37B53A475EF0B0ACBFD8AA3FD85BFC88413416A3B5DA2D33C37255E95D3ABD311EF70DD6A7D84EACABFF000551FEC2DFE4423BB298209AC555D2451BB76A5C89BCD45C26EB4E7D6622B6DFD5EA7356F6CD8231CC44F2CF7EBE8835DE782EDAA24922CAD3544CD44CA6155382722DED4B5EB62D3D355D2C2C73A246B58C5E0D4CAA2272EAEE21F4178A3B2EB5BBC53C123FCA266471F46D4546AF7E553B509CDFAE505A6D72D65546F9216632D6222AAE571C9553B49CF69B4D6BB7462E198AB4C79EFCF116999DFA76DB7531A8F50D55FE581F56D8DBD1355A8D622E32ABC578AAF77B0E4265CE46B532ABC93AD549356AC3ABB5840DA06BE2867C22AAA615A8D4E2BC17B13813DB957DA345D143143499924CEEB1A89BCFC632E72A9B7E3785B52B5EBE8E25787DB596BE7CB97DD8FF00DBD7F4538F4731CAD7B55AE4EA54C28452DFB2DFADBABE3968AAE85AD95ADDE58A4C3DAA9CB28BDBCBB17895CEB1B2FC897C969D8AAB03DA9244ABCF757ABC1514C98B51CF6E4B46D2C1ADE19E0628CF8AFCF49F3ECE3977EADFEC857FF81F6147A17FD7B29E5B3CADAE544A5E8F32E796EA2657260D6CED6A4BA3FF008F579F1E7AFAC7F2A011AE56B9C8D556B79AA27043C97258356D9EBAB9B6EA589F4EBF463DE62358EF5617811DDA85860A564572A385B12B9FB93358984555E28EC7B7DA5E9AA99BF25ABB353370788C13A8C3922D11DD5E9F4E8A4E8FA458DE8CFCADD5C7B7916168BABD376AB52544D5113AE1BBBF22BD8AAE6AE3E8B729F0EB3A769D72CB95C9B4B0DAA7742AE46F48C5DE56E579B91138278936D45A26796BD20C3C270DEB59C99A226DDA2237FF00B54C5EB65FEC551FEC2DFE44227B4DB0524148CB95344D8A457A32646261AE45CE171DB9E1E24AECD84D1547CFFF0002DFE4435B519632D2B6875B8568ADA2CF9715A77F75461E991BDF9E8D8E7639EEA6495E824B1433CD517B9A2599AA8D8A2918AAD4EBDE5CA633D9D9825157AFA8E3AEF24B6D03EAD8C76EAB99C33FAA888B936AD9AD13B56BBECE2E9F8762C98E32E5CB11BF977955460B9B54D9A9AF9627D5793AC356D87A68D55BB923571F45DF035B65D1B1DA71CAE6B557A777154CF5214F6C8E49B6DD9B3FD06D1A88C336E931BC4EDFE151E1CBC1A995EA4EB55EC430B945547261C9CD3B0B62A2FDA7B4DDDAA69DB03DF52F955F3CAC622AA2B955DCFB133D474F5A5AE96EFA72A6658DAB2471ACB148DE7844CE33D8B823DAE62637AF4947F43ADA979C79626D5EF0A50F4D6B9D9DD6AAE132B84E484E3675A660B8A495F708FA48A37EEC71AFD1739138AAF6E3284AEEFABACF64ABF2148A47BE3C239208D1519DDCD3DC5EFAADADC948DE58B4FC222D8633E7C91489ECA73031DE5B1A9A8EC17DB3A55A54D2D34F237A48A773918AE5EA4777110D05A763BD5CA5756377A929B0AE445FA6EEA4F5732D5D4C4D66D31B6CC59B84E4A67AE1C768B7376945DB1BDF948DAAF544CE113A8F05BB7BD5D6DD3B55F27D2D1748F89137DAC446B19D78E5CF1DC6C4715A35B595D3A41BAFE2C47AB51248DDEBECE463F6B98DA6D5E8DBFE874BDAD8F1E589BC796DFE54D983ED594EFA4AC9E9A54C490BD58EF5A29F1373BF5702D59ACED20002A000000008A800F24FAA400000000000000000000000000000001B36DA292E15F4F4703A36CB33D236AC8EDD6E5782657D782CBB97E1DE90B440E4AC4ABA654566236F4AB172C6555B9F6E53815631CE639AE6395AF6AA2A39382A2A75A16659F6B55D4B44C82E56F8EB646A63A56CBD12B93BFCD5E25AB31E72E6EBF166BCD671D22F11DE27FF00B4D765EDBABAD75B75D4324AB5154E4DCE993755236A705DDC26EA655DD5DFD656D414373D59ACEE971B055454F347374AD91F22B17755551B8C22AAF04E29DE7AD59B49B95F28DD474B0328291FC246B5EAF73DBF92AEE1C3C08AD86F35B60B9C75D6E911B33515AA8E4CB5ED5EA54ECE05F9A22366AE9B459AB1932CC445ADD223CA13CBE5E75F5BEBBE4674D34B2B9C8D64F153B7E7117B177797BD09AEAC992C1B319E9AAE6E92A56952955D9CABE47261CBED5555F122ADDB34BD1A23EC91BA4FCA4A9544F66EFDA41B576ACB8EA99D8EAE56B208D731C11F06B7BFBD7BFD98226D11DA5829C3F3E7BD2B931C5223ACEDB755D50CD35F3661BD6C72AD5CD43B8D46AF1DF46E1CDCF6E5150ABB66D65BCB359D13D292AA9A381EAB3BA462B111B85CA2E7B7960D2D19ADAE1A5F7E281AD9E8E476F3A07AAA222F5AB57A95496546D8AA16354A5B3C5148BC9CFA857A7B11A9F12DCF129F63D569A3262C548B56DE6DADB4C1F29DD74FDB69918EAF9164C22BB1C155A888BEBC2FB08737485DB4FDE6CB51728A3646FAE8636E1E8B95DECF57A8E5B351D63F53C37BAD72D454C72A49BB9DD4C27D54EC4243A9B6892DF56DAAEB7320F23AA654A625DEDFDDCF9BCB8732B368DF796CE3D3EAB4F4AE0A444D769DE7E69F6DB3868C8FF698FE0A75AD7241AC342358E7E3CAA99617AA7D493185E1DCA992A8D69B419753DA1281F6E653A248D937D25DEE5DD84385A5F54DD34DCCE75BA66F46F545921913798FF0FB899B44CB4E9C2B34E9A2BDAF13BC3E957A2F50D35C92896D55524AAB847C6C5746BDFBFCB1EB542C5BA682B1DAF447945DA356575341BD24D048A8AE7AF1DD4EA5E2B84CA761A71ED8E548D3A4B2C6E913ADB51BA9ECDD5217ABB595CF53AB1957D1C548C76F369E34F373DAB9E6A47BB0D9E4D7EA2D4AE48E488EF313DD676C42BA39B4C4F468E6F4D4F33955B9E3BAEE28BEDDE4F02BCD5BA26F3417CAB482DF53534B2C8E7C32411ABD15157288B8E4BD5C71C8E0586F55D62AF6D5DB65E8E544DD722A65AF6F62A7616353ED8E7489A953668A495138B9950AD45F056AFC47344C6D28B69F55A5D45B2E9E39A2C956C974FD5E9FD3F3FCA2C58AA2A65593A35545DC6A222222F7F055F1294D5F5CDB9EA7B9D646A8B14B3B958A8B9CB51708BE2888A493546D2AEB79A57D2D346CA0A67A61FD1BB79EE4EB4DE5E48BDC840C8B5A3688867E1DA4CB4CB7D467FB56F2640055D900000000000000000000000000000000000077ED5E8F87C7E26D9A96AF47C3E3F136CF4F83E1D7E50F9A78EFDE5A8FCF6FA80032B920000171E8DA88EF9A35B4B33B7B76375349DB8C613FF8AA14E128D0FA9A3D3B254A54C52CB0CDBB848F0AA8E4CF6E3ABE06B6AB1CDE9EEF7875F836AEBA6CFB649F76D1B4A6775CE9DD9C369D331D43A148F08B8547BD7CEC75F5B94D8BC52FE13699B6CC89973A486454C752AA35DEE55F610BD6FAAE2D410D2C54B14B1471B9CE7A4889C57184C617D7ED37B496B6A6B3D962A2AC82A247C6AEC3A344C61573D6A9DAA6AF8178A45F6EBBBB71C4F4D7CF6C336FF4B96223E70EDED52E294D638A89AEC3AA9F877EAB70BF1DD36B6613324D2D1C6C5CAC723DAEF5E73F0542B9D637D4BF5D52A236BD903188C635D8CA76F2FF007C8F3A5F5154E9FAB7490B52585FC2485CB8476392E7A94C9ECD6F07963BF76A7F57C71C4A734CFB9B72FE8F86A7A6969350DC239D8AD72CCF7A653E922B95517D8A5C3A4A1928B4B5147548B1BDB0EF391C98DDEBC2F6703851ED06CD335AFA8A6A86C8DE288B1A3B1EA5C91FD55AE9F74A27D15BA17D3C12262491EA9BCE45E6984E09ED52B6AE4CD1159AEDB33E0C9A3E1F6C99E9979B9BB424DB2D9124B3D7C8D4546BEADEE4CA617E8B4AD75348B36A2B9BDDCFCA246F823951090E8AD594BA7EDD3D35553CF23E49964CC7BB8445444C715EE22972A86D5DCAB2A58D735B34CF9511DCD115CAB8532E1C76AE6B4CB9FAFD5E3CBA2C54A4F58EF09E6C753FA4DCFF00563F8B898DDB51D05AAE1494750F5E96A1C89C3EA22F255EECE3FDA159688D474DA79F58EA98A593A746A37A3C70C6739CAF79A5ABEF10DEEF4EACA7648C62C6D6EEBD133C33D9EB31DF4F39334EFD9B9A6E2F4D270FA56931CF13DBF54D3699A716A62F95A8D999634F9F44E6E6FE57AD3E1EA2B6A5ACA9A4DEF25A89A1DEFA5D1C8ADCE396704FAC1B40829ED51535CA9EA67958DDC57B11151C9D59CAA71209767D24B5F2C96F6C8CA67AEF35922222B73D5C15781974F17AC78778ECD0E2D7C196D5D569EDD67BC79C4BEDF2BDCB8FF58D6FF10FFBCF94D70ADA889D1545655491BB196BE6739171DCAA6A21E9BD66CF2D63C9C9F1B24F49B4AF1B327FC1547FB0B7F910E36C8D3FA8AB3F6A77F2B0E5506BBA1A7B0C16F75354AC91D3242AE4DDC2AA371DA73F43EACA3B0DB27A6AA86A1F23E65951636A2A222B5A9D6A9D873270DF96D1B79BD95788E9BC7C36E78DA2B313FB34B50FF6F65FDB19F61606D23FB1F55FAD1FF3A1575D2E50D5EA675C636C9D03A76CB8544DEC263298CF3E04A3566B5A0BC58E6A1A7A7AA64AF562A2BDADC70722F538CD7C5799A74ECE7E9F5986B8F5516B6DCDBEDF8F77336673321D55123F199237B5BEBE7F61616AEBD45656C12D4DBBCAA27AAA6FF0C317861173DBF614B413494F5114D0B959246EDE6B939A2963DB76894D25224577A47ABF1873A344735DDF85F871275386D378C911BA384710C74D3DB4F7BF2DB7DE276DE1B169D62CADA87A5B2C2F9256B72EE895A9C3D7822DAFEE53DCAB699F536FA8A27C6D73712A7D2E29CB87124EFD7B65A389CDB75148AF54CEEB6346267BD7FD14AFEFD77A9BD5C1F5556E4E3C18C4E4C6F6211831CF3F372ED0713D5D674DE178BCF33E91110E7A17B6A2824A9D3159140D57C8EA75DD6A75F9BC8A250B366DA3D1B6955B4D4D3F4CD44DDDF44C78F12FABC76BCD66B1BECC3C0F53830D32D735B6DE3F942F47D2CF57A9681B4E8ECB256C8F544CE1AD5455CF67678962ED4E546699E8DDF4A499A89EB4CAFD86BC3B40B4246B23E9A78A77226F31AC4CAAFAF3F120FAC752CBA86A63548FA2A58F8C6C55F39557EB2E3BB063E5C9972D6D35DB66CF8BA6D0E8B262C7939E6E9EDB34F5A74F587CBABE9A3A89A38D1F2BDEDDFE3D8D45E073E8F5B54DCEB62A1B2DB1B1ABDC88AE72E775BD6E5444E18F5A9F2B06BFA46DB23A5BB4122CAD62315CD6A39AF4C63976F69F2B9EBCA58617C760A148A477395EC46A7B13ED31C62C9369E6AEF3FB36FDB34D4C549C1922958EF111D6521DA871D2927F8ACF89D0B3FF0062A8FF00616FF22108D55ACE82F763928E3A6A9648F56B91CE46EEF05CF6E78F2E47DEDFAEE820B053DBDF4954B2C74C90AB911B8CA371DA57C1BF8711B79B2CF12D2FB55EFCF1B4D76FD5EB679A628AAEDE973AF8D27DF72A471BF8B511170AAA9D6B9F81F6ACD75494150EA4B2DAD1DBAEE8F7B1BA8AA9D8D44CAFB8E368BD60DB2D3BE8EBA37C94EAE57B1ECC658ABCD30BCD3ACEDD5EBBB3C2F74D436F592ADC8B87BA36B3DABCCC96C7926F3CF5E68FD9AB8353A6A69A9E0E48A4C77E9BCA5B13EAE4D3CE7DC11ADAA7D3ABA46B5308D5545E18EEE470F653C74BAE787CF3FEC39147B42A75B6F4374A7A87543D1C8F744898C2E708995EC5434B486B0A3B0DA568EA29EA647F48E7658D4C71F131F81922968DBCDB7FD534939B1DF9FA444FF8EE8AEA37B9DA86E7BCB9C554889FE654FB0B9D7FB1ABFB17FF00A147DD2A1B5773ACA9635CD6CD33E44477344572AF1F693FFC3CA04B22512D3D4EF793F45BD86E33BB8CF3363518ED7AD368ECE570AD6E1C3933DAF6DB9BB7EEEDECC26649A5D91B172E8E57A3BD6AB9F82A15A6ABA59E975157B6A5AE6B9F339ED554FA4D5555454F053EFA5B51D4E9FAA73E26A4B4EFFA712AE33D985EA5276CDA159A68DAB5305431E8B9DD7468B8F795E5BE1C93688DF764F1B4DC43494C3932725A88851E86BBD5504554C4818D91BBC8C7B951E89DE9824FB257B194972A6739AE959322AAB573BC8A98E1DD96AFB4E76A6D7E957472525AA17C69222B1F2BD51151392E113E2442C178AAB257B6A69153B1EC5E4F6F62FDE5FC3CB931CC5A1869A8D1683554B6199988EF2B2752EA9A7B2DD24A6AAB42CAB8CB64554C3D31D59416DD592D450F4F6ED3B52B4EAABC6356F15F51F06EBFB2D5C2D4B951488FC6775CC491117BBFDA1AF72DA1D2C54AE82D14922BB186BA4446B1BD8B84CE78FA8D78C56988AF27EEEB5B5F8E26D97DA2397CA2223741B51543EAAF95751240FA7748EDEE8A44C39BC3AFE3E2734FB544AFA89E49A672BE591DBCF72F5A9F3C1D4AC6D110F179AFE25ED6F59790012C4000000008A800F24FAA4000000000000000000000000000000000005800054000580005800000005400120002150001200094800090000000000000000000000000000000077ED5E8F87C7E26D9A96AF47C3E3F136CF4F83E1D7E50F9A78EFDE5A8FCF6FA80032B920000F4614C9850960C9801564C80580C29930A40C000AA59064043C8009480000000000000003D00025E40010000B0000000000000000AA193201000003C80091E8005800007900048000000022A003C83EA900000000000000000000000000000000000160000000000016000000000004A0000400000000000090000000000000000000000000000000077ED5E8F87C7E26D9A96AF47C3E3F136CF4F83E1D7E50F9A78EFDE5A8FCF6FA80032B920000F400097900040002C00000002A0000000000000000000000003D000240001E4005800000000000000010000A800000000000B000000000000000008A800F20FAA400000000000000000000000000000000000580000000000058000000000012800000000000000000000000000000000000000000000000077ED5E8F87C7E26D9A96AF47C3E3F136CF4F83E1D7E50F9A78EFDE5A8FCF6FA80032B920000F40009000079001600000001540000000000000000000000003D000240001E40058000000000000000000055000000000000B000000000000000008A800F20FAA400000000000000000000000000000000000580000000000058000000000012800000000000000000000000000000000000000000000000077ED5E8F87C7E26D9A96AF47C3E3F136CF4F83E1D7E50F9A78EFDE5A8FCF6FA80032B920000F40009000079001600000001540000000000000000000000003D000240001E40058000000000000000000055000000000000B000000000000000008A800F20FAA400000000000000000000000000000000000580000000000058000000000012800000000000000000000000000000000000000000000000077ED5E8F87C7E26D9A96AF47C3E3F136CF4F83E1D7E50F9A78EFDE5A8FCF6FA80032B920000F40009000079001600000001540000000000000000000000003D000240001E40058000000000000000000055000000000000B000000000000000008A800F20FAA400000000000000000000000000000000000580000000000058000000000012800000000000000000000000000000000000000000000000077ED5E8F87C7E26D9A96AF47C3E3F136CF4F83E1D7E50F9A78EFDE5A8FCF6FA80032B920000F40009000079001600000001540000000000000000000000003D000240001E40058000000000000000000055000000000000B000000000000000008A800F20FAA400000000000000000000000000000000000580000000000058000000000012800000000000000000000000000000000000000000000000077ED5E8F87C7E26D9A96AF47C3E3F136CF4F83E1D7E50F9A78EFDE5A8FCF6FA80032B920000F40009000079001600000001540000000000000000000000003D000240001E40058000000000000000000055000000000000B000000000000000008A800F20FAA400000000000000000000000000000000000580000000000058000000000012800000000000000000000000000000000000000000000000077ED5E8F87C7E26D9A96AF47C3E3F136CF4F83E1D7E50F9A78EFDE5A8FCF6FA80032B920000F40009000079001600000001540000000000000000000000003D000240001E40058000000000000000000055000000000000B000000000000000008A800F20FAA400000000000000000000000000000000000580000000000058000000000012800000000000000000000000000000000000000000000000077ED5E8F87C7E26D9A96AF47C3E3F136CF4F83E1D7E50F9A78EFDE5A8FCF6FA80032B920000F40009000079001600000001540000000000000000000000003D000240001E40058000000000000000000055000000000000B00000000000000000FFFD9, '1', '2021-03-13 13:10:28', '1', '2021-03-13 13:10:28', b'0', 0); +INSERT INTO `infra_file` VALUES ('5e8609290e915c4fa8b08e67.jpg', 'jpg', 0xFFD8FFE10DFA4578696600004D4D002A000000080007011200030000000100010000011A00050000000100000062011B0005000000010000006A012800030000000100020000013100020000001F000000720132000200000014000000918769000400000001000000A8000000D4000AFC8000002710000AFC800000271041646F62652050686F746F73686F702032312E30202857696E646F77732900323032303A30343A30322031373A32343A3135000000000003A001000300000001FFFF0000A00200040000000100000320A003000400000001000001C20000000000000006010300030000000100060000011A00050000000100000122011B0005000000010000012A012800030000000100020000020100040000000100000132020200040000000100000CC00000000000000048000000010000004800000001FFD8FFED000C41646F62655F434D0002FFEE000E41646F626500648000000001FFDB0084000C08080809080C09090C110B0A0B11150F0C0C0F1518131315131318110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C010D0B0B0D0E0D100E0E10140E0E0E14140E0E0E0E14110C0C0C0C0C11110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFC0001108005A00A003012200021101031101FFDD0004000AFFC4013F0000010501010101010100000000000000030001020405060708090A0B0100010501010101010100000000000000010002030405060708090A0B1000010401030204020507060805030C33010002110304211231054151611322718132061491A1B14223241552C16233347282D14307259253F0E1F163733516A2B283264493546445C2A3743617D255E265F2B384C3D375E3F3462794A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F637475767778797A7B7C7D7E7F711000202010204040304050607070605350100021103213112044151617122130532819114A1B14223C152D1F0332462E1728292435315637334F1250616A2B283072635C2D2449354A317644555367465E2F2B384C3D375E3F34694A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F62737475767778797A7B7C7FFDA000C03010002110311003F00F544924925293A64E929F18FADE19FF3ABAA48DC4DEDE49FF454ACD369FB3380796ED036EA74F26A9FD78C97B3EB8F55606C8F581FFC0A958D6E43DC037807B28C86505BB87D62EE9F91F68AEC7BEE6B5CC6BDC6480F11A4A1FA7D77AB07DD8F8F93934564FAAF631CEADB03D477AD77F315ED67BFF48F540820C1D7CD751F55053FB1FAB6EA8E4BFD3DA69AF09B90F26CBB0598CCFB45EFF45EFBED67E830BD1B1FFA1B327DFE95753D002D0644079DB3A5755AB26AC4B316DAF26FD68ADE20D83FE05C7F4767F61FF4FF0047FCE223BA3758AADF4DF876B2D01C4B4B44B431AFB2DF536BBF44E6574DCEDB6FBFF4562EC7AD136756E977D8DFB3D565B6DA2CC3763D4E190FC7AB1ECC4C6C8B1EFA6DB30EDC5F4F333A8F52CFB55946162D5F6BA2947EAB4B68CAEA05D6E43AFC6C4B9B6E28A7631BA6536BEA18F5E55F6751CFC1DFD532EAF53D4F4E8C965D93956E374FFB2E3D6FA0B6DE4BA6617D6B654DCBE9D8B9FE9583755763D76ED70F169AFD962EC3A17D64EA76D96616774CCAB32714B5B9365143DEF66EFA1F6BC6637757B9BEF66CFA7FE8D65F45774BA0FD5DC3774F77AEEEA15E583F68792CF55D87898D9AF69C766E6E6BB1ECCAA719DFF69ABAECF53D3CA62E7F17071B3FA8E3518782E155F6D6D6E2073AF7866E69CAFD27A75D9FCDB6EB5FECFD13130C227AAF8CE4351B3E96329ADCE6B032C60225A2EA6DAC3B69F7B7F4F535AF757BBF495AF37EB34578DD5F3E8ADBE9D75E4581958101AD277358D6FEEED77B56C3BA8DF4F5CC91439ADAF1AFC8A716AAC06D2CA197595B71E8A2ADB4D753FD365967A6DF52EB3F4F6BEDB150FACEFF00B47557E735A5ACCA6B09932058C6B6BB5AD77F65088119505D3265004F47296AFD52FF00C55748FF00C34DFF00A97AC995ADF54BFF00155D23FF000D37FEA5EA4627DE13274C8AD524924929FFD0F544924925293A64E929F09FAEEC9FAE1D59DFF0CD1FF8152B01DCF9ADEFAF0E23EB87578ED734C7FD6A9584E1EE07B4C7CD3482B82C0CB869F246A6B0F3B5C246920F1F728B29703C401C9F056B1D90F1A73AFC934AE0750D9C3C5ADD680D6001C35811C15D0E374AC79935336EEDE06D1F4A3E971F4952E958FEF693C49D7E2B7EB969E254323AB6B18EAD46F49C7F730D4DDAFF0073840824FD29597D6FA5D54EE2D1B77341606E9A8F6ED11FC95D334FB493A203B1ABBF21B65A37067D169E1464906ED9B844855393D1FA1399563DD60DAF68690D8D23F74FEEFB5687D60E8746474DB2DA5B16D23D481DE072B535EDC4A85969D0763A1F81D101908365470C786A9F2EDC473F72D5FAA07FECAFA47FE1A67E47ACFCBA855977560406BDC00F20568FD516FF00D95F473FF7699FF52F5781D9CC23523B3EF6993A6450A49249253FFFD1F544924925293A64E929F05FAF263EBA756F036B47FE05542C62241EFBB50B63EBE83FF3C7AAB876B87FE7AA56383EE1E1FEBEE40AE4AE2E207808251702C7D9696BB9747E2546BA9CF7348D7C63556FA7623EBCA24F0D2224729922297C626DE9B0A88EC0761F2F6AD4656EDBA842C0A9A183C5690600DD79EEA06E44506ABC32B682F78682A01F48FA37327CCA3BA9A277D906741BB80AA64D9D348F4CBEA6DA4C0687B43893DB6EE4C902BC16C8C80E86348772496F1082FCEC4F53F4B686469E253E3E2399510C044F8F654EDCBE97D3AD1F6C7B2BBEC05CDDE1C4C03B67DAD7353575E9ABC8F5EA5B5758CAD9AD56BCDB518896BFDDFF00548FF545B1F5ABA47FE1A67FD4BD5BFADF6D195660E650439B657657BDA080763B737E906FD1F5551FAA766EFADDD1C0ED94CFC8E57212B01CDC91A9C878BEF8993A65231A92492494FF00FFD2F544924925293A64E929F07FAF4377D6EEADFF001EDFFCF54ACEE8F875E7754A31ED1348DCFB478B180D85BFDA5A5F5E04FD6DEAE3FE1C7FE7AA5677D5BCAAF1FAC62BEC23D379752F9FF84696367FB4992D8D2F85710BEEF656F4FC73B5B93815D41803BD7C56ECF4C1FA2DBC7E77F2DC8195D2D941DF4925BCEBE20AD5B711F71BADCCB36E331D3B0BA1A770F6EF8F759FB9B10290CB2921ED2DD7DAC773B7F35D0AB027BB7A518F64BD39C7609E56A31C0F3ACAC9A5BE9FB55EA9F1051486593D2B032B5C8C7AEE3DB7B7700818DF57FA7E3DA2DAF1A8AC8320B2B00C8F376E5A55BC10028DD76D6B9BE4A39DD32C00ECCBD4AC360113DD0ACC7ADC009DBBF50476542C3D4FD3230D958B5D1165B25AD13EF3B1BF49C9E9ABABB2E0E7BD9E8B87BE352E70FE49FA09A9156D6FAE5D2DD6FD5E7E4077AAFC1B1B7B4F70C77E86F1FE6B98FF00FADAE33EA79FFB2EE91FF8699F91CBD22EB59753762BC82CBEB7D4E1C887B4B3FEFCBCD7EA583FF3ABA313CFDA980FDCE56701B15D9A5CDC6A57FBCFD04A2A4A2AC351749249253FFFD3F544924925293A64E929F06FAF13FF003BFABFFC70FF00CF74AC0C5A9F6BEC63352C63AC81FF000637BB5FEAAE8BEB9D2FBFEB97576B4682E6973DDA35A3D3AB955FA1E1D15F556398F3634D193EA480266B737D8D4384D13D14271E211BF53B9D07EB6E364D2DC7EA4F155EC01A2D78FD1D9FBAE738FF00376AE86C6B1CCF546C1A4EF90411CFD29DABCE31F01ECC9BF19F040D58EEC44E85AB5717A65C5A186D2299135C983FC90D55E7117A3771E43C3A8D5E9F7B79699F056B1DEC70826216457B9839D111993E9EB29ACA24EDFA80409F821DF6082663B954075105B13D92AAD16BE5CE803523C5327AE8BC11BB62EEA36D5596D741B081A1710D6FDFAB952C6EABD6ACBC0BE8AABA5C61D1634B88EDB55CB286E437520055D9D3E8C571BDD74EC05D06001085689120CF2F26BC5C5BF2DE76BA8ADCE209FCE03D8CFF003F6AE2FEA5B09FAD5D1FCB25B27E4E5B3D55CECF2EA812DA9C7D4DAE05A5DFE8DFEF8DCCFCF46FAA5D2998FD7B02C277385E3F2394D8FD3E64B5739E33A6D10FB028A928AB2D35D2492494FF00FFD4F544924925293A64E929F1DFACEDFF00B24EB193635CDC4A725AD73F69D9EA3AAA6373FF003ACFE42CBC7E8D93D7F2ECCBC1B5B895E3868B6F735CC68304CB760DDF41BFA47ADEFF0018DFF8A0C4FA3FCE5DFCC7F52BFE77FEEF7FEEB7A6B56AFF00C478FE6FFA3B3E87D1FA2CFE95FCBFFB91FC8F553A5C7C236A598FDBE296F77ABCF3306FFB0FA79370BEBACFACCC86506BB1A5C1BFA11BEE6EF764B5F47E83D1DFBEEA7F3DEA66814BFD116B4E4080EC7782CB8388935FB3D6ABD467F5DEB62EFE9479FE7EFF00E6B8E723FE4EFF00CD97FA1FF805CBFE60FA1F487F3BFCDFD21FCEFF0027FD2AAD2E2BE8DE87B75BCFFABC207ED7571DCEC88143D8E71240638ED7123E9358EFE6EC43C86E5D409B68786FEF012DFF0039B2B773BF9ABBFE4BFE6AAFE6BF9CE7FC07F23FEE27F2D407F363E9FD11F4BE97F6FF00EFC992ABD131E2AD5E6DB90D2ED343DC23D7925BA83007753EABF4FF00C17CBE925D17FE50C4FA1FCF33F9CFA3CFFAEC4CD1935AD1D0651955E39C9CEB3EC58AD05CE7B9A5D66D1F9C31D9EFDBBBD9FA445E82FC6EA37BC574DB752DDAD7E45CE643647AAE2719BBBE9D6DD8CFD25B6FFA5F4D56FADDFD1B2BF9FF00E98DFA7C7D13FCFF00FC0FFDC7FF0087F595CFA93FF22BB8FA777D1E7E8D7FCE7FDF7FE0D3870AD971D6BB3A9D4F0CE660D95B768B1CC2F617090D73C86D6E688FE73D3DFE9FFC26C5CEF4CCAA717EBBD5D2DAC706D394C635D21DA966F732CDA7F95F4D7517FF003C3FA5FD3ABF98FE6F86FD2FE4FF00DFD55BBFF141D2BFA1FF0049FF000BFD33E8DBF4BFF44A78DC5B19D8D767B851524CAC3554924924A7FFD9FFED160050686F746F73686F7020332E30003842494D0425000000000010000000000000000000000000000000003842494D043A0000000000D7000000100000000100000000000B7072696E744F7574707574000000050000000050737453626F6F6C0100000000496E7465656E756D00000000496E746500000000496D67200000000F7072696E745369787465656E426974626F6F6C000000000B7072696E7465724E616D65544558540000000100000000000F7072696E7450726F6F6653657475704F626A6300000005682168378BBE7F6E00000000000A70726F6F6653657475700000000100000000426C746E656E756D0000000C6275696C74696E50726F6F660000000970726F6F66434D594B003842494D043B00000000022D00000010000000010000000000127072696E744F75747075744F7074696F6E7300000017000000004370746E626F6F6C0000000000436C6272626F6F6C00000000005267734D626F6F6C000000000043726E43626F6F6C0000000000436E7443626F6F6C00000000004C626C73626F6F6C00000000004E677476626F6F6C0000000000456D6C44626F6F6C0000000000496E7472626F6F6C000000000042636B674F626A630000000100000000000052474243000000030000000052642020646F7562406FE000000000000000000047726E20646F7562406FE0000000000000000000426C2020646F7562406FE000000000000000000042726454556E744623526C74000000000000000000000000426C6420556E744623526C7400000000000000000000000052736C74556E74462350786C40520000000000000000000A766563746F7244617461626F6F6C010000000050675073656E756D00000000506750730000000050675043000000004C656674556E744623526C74000000000000000000000000546F7020556E744623526C7400000000000000000000000053636C20556E74462350726340590000000000000000001063726F705768656E5072696E74696E67626F6F6C000000000E63726F7052656374426F74746F6D6C6F6E67000000000000000C63726F70526563744C6566746C6F6E67000000000000000D63726F705265637452696768746C6F6E67000000000000000B63726F7052656374546F706C6F6E6700000000003842494D03ED000000000010004800000001000200480000000100023842494D042600000000000E000000000000000000003F8000003842494D040D0000000000040000005A3842494D04190000000000040000001E3842494D03F3000000000009000000000000000001003842494D271000000000000A000100000000000000023842494D03F5000000000048002F66660001006C66660006000000000001002F6666000100A1999A0006000000000001003200000001005A00000006000000000001003500000001002D000000060000000000013842494D03F80000000000700000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800003842494D040000000000000200093842494D040200000000001400000000000000000000000000000000000000003842494D043000000000000A010101010101010101013842494D042D00000000000600010000000A3842494D0408000000000010000000010000024000000240000000003842494D041E000000000004000000003842494D041A00000000033F000000060000000000000000000001C20000032000000005672A68079898002D0034000000010000000000000000000000000000000000000001000000000000000000000320000001C200000000000000000000000000000000010000000000000000000000000000000000000010000000010000000000006E756C6C0000000200000006626F756E64734F626A6300000001000000000000526374310000000400000000546F70206C6F6E6700000000000000004C6566746C6F6E67000000000000000042746F6D6C6F6E67000001C200000000526768746C6F6E670000032000000006736C69636573566C4C73000000014F626A6300000001000000000005736C6963650000001200000007736C69636549446C6F6E67000000000000000767726F757049446C6F6E6700000000000000066F726967696E656E756D0000000C45536C6963654F726967696E0000000D6175746F47656E6572617465640000000054797065656E756D0000000A45536C6963655479706500000000496D672000000006626F756E64734F626A6300000001000000000000526374310000000400000000546F70206C6F6E6700000000000000004C6566746C6F6E67000000000000000042746F6D6C6F6E67000001C200000000526768746C6F6E67000003200000000375726C54455854000000010000000000006E756C6C54455854000000010000000000004D7367655445585400000001000000000006616C74546167544558540000000100000000000E63656C6C54657874497348544D4C626F6F6C010000000863656C6C546578745445585400000001000000000009686F727A416C69676E656E756D0000000F45536C696365486F727A416C69676E0000000764656661756C740000000976657274416C69676E656E756D0000000F45536C69636556657274416C69676E0000000764656661756C740000000B6267436F6C6F7254797065656E756D0000001145536C6963654247436F6C6F7254797065000000004E6F6E6500000009746F704F75747365746C6F6E67000000000000000A6C6566744F75747365746C6F6E67000000000000000C626F74746F6D4F75747365746C6F6E67000000000000000B72696768744F75747365746C6F6E6700000000003842494D042800000000000C000000023FF00000000000003842494D041100000000000101003842494D04140000000000040000000A3842494D040C000000000CDC00000001000000A00000005A000001E00000A8C000000CC000180001FFD8FFED000C41646F62655F434D0002FFEE000E41646F626500648000000001FFDB0084000C08080809080C09090C110B0A0B11150F0C0C0F1518131315131318110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C010D0B0B0D0E0D100E0E10140E0E0E14140E0E0E0E14110C0C0C0C0C11110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFC0001108005A00A003012200021101031101FFDD0004000AFFC4013F0000010501010101010100000000000000030001020405060708090A0B0100010501010101010100000000000000010002030405060708090A0B1000010401030204020507060805030C33010002110304211231054151611322718132061491A1B14223241552C16233347282D14307259253F0E1F163733516A2B283264493546445C2A3743617D255E265F2B384C3D375E3F3462794A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F637475767778797A7B7C7D7E7F711000202010204040304050607070605350100021103213112044151617122130532819114A1B14223C152D1F0332462E1728292435315637334F1250616A2B283072635C2D2449354A317644555367465E2F2B384C3D375E3F34694A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F62737475767778797A7B7C7FFDA000C03010002110311003F00F544924925293A64E929F18FADE19FF3ABAA48DC4DEDE49FF454ACD369FB3380796ED036EA74F26A9FD78C97B3EB8F55606C8F581FFC0A958D6E43DC037807B28C86505BB87D62EE9F91F68AEC7BEE6B5CC6BDC6480F11A4A1FA7D77AB07DD8F8F93934564FAAF631CEADB03D477AD77F315ED67BFF48F540820C1D7CD751F55053FB1FAB6EA8E4BFD3DA69AF09B90F26CBB0598CCFB45EFF45EFBED67E830BD1B1FFA1B327DFE95753D002D0644079DB3A5755AB26AC4B316DAF26FD68ADE20D83FE05C7F4767F61FF4FF0047FCE223BA3758AADF4DF876B2D01C4B4B44B431AFB2DF536BBF44E6574DCEDB6FBFF4562EC7AD136756E977D8DFB3D565B6DA2CC3763D4E190FC7AB1ECC4C6C8B1EFA6DB30EDC5F4F333A8F52CFB55946162D5F6BA2947EAB4B68CAEA05D6E43AFC6C4B9B6E28A7631BA6536BEA18F5E55F6751CFC1DFD532EAF53D4F4E8C965D93956E374FFB2E3D6FA0B6DE4BA6617D6B654DCBE9D8B9FE9583755763D76ED70F169AFD962EC3A17D64EA76D96616774CCAB32714B5B9365143DEF66EFA1F6BC6637757B9BEF66CFA7FE8D65F45774BA0FD5DC3774F77AEEEA15E583F68792CF55D87898D9AF69C766E6E6BB1ECCAA719DFF69ABAECF53D3CA62E7F17071B3FA8E3518782E155F6D6D6E2073AF7866E69CAFD27A75D9FCDB6EB5FECFD13130C227AAF8CE4351B3E96329ADCE6B032C60225A2EA6DAC3B69F7B7F4F535AF757BBF495AF37EB34578DD5F3E8ADBE9D75E4581958101AD277358D6FEEED77B56C3BA8DF4F5CC91439ADAF1AFC8A716AAC06D2CA197595B71E8A2ADB4D753FD365967A6DF52EB3F4F6BEDB150FACEFF00B47557E735A5ACCA6B09932058C6B6BB5AD77F65088119505D3265004F47296AFD52FF00C55748FF00C34DFF00A97AC995ADF54BFF00155D23FF000D37FEA5EA4627DE13274C8AD524924929FFD0F544924925293A64E929F09FAEEC9FAE1D59DFF0CD1FF8152B01DCF9ADEFAF0E23EB87578ED734C7FD6A9584E1EE07B4C7CD3482B82C0CB869F246A6B0F3B5C246920F1F728B29703C401C9F056B1D90F1A73AFC934AE0750D9C3C5ADD680D6001C35811C15D0E374AC79935336EEDE06D1F4A3E971F4952E958FEF693C49D7E2B7EB969E254323AB6B18EAD46F49C7F730D4DDAFF0073840824FD29597D6FA5D54EE2D1B77341606E9A8F6ED11FC95D334FB493A203B1ABBF21B65A37067D169E1464906ED9B844855393D1FA1399563DD60DAF68690D8D23F74FEEFB5687D60E8746474DB2DA5B16D23D481DE072B535EDC4A85969D0763A1F81D101908365470C786A9F2EDC473F72D5FAA07FECAFA47FE1A67E47ACFCBA855977560406BDC00F20568FD516FF00D95F473FF7699FF52F5781D9CC23523B3EF6993A6450A49249253FFFD1F544924925293A64E929F05FAF263EBA756F036B47FE05542C62241EFBB50B63EBE83FF3C7AAB876B87FE7AA56383EE1E1FEBEE40AE4AE2E207808251702C7D9696BB9747E2546BA9CF7348D7C63556FA7623EBCA24F0D2224729922297C626DE9B0A88EC0761F2F6AD4656EDBA842C0A9A183C5690600DD79EEA06E44506ABC32B682F78682A01F48FA37327CCA3BA9A277D906741BB80AA64D9D348F4CBEA6DA4C0687B43893DB6EE4C902BC16C8C80E86348772496F1082FCEC4F53F4B686469E253E3E2399510C044F8F654EDCBE97D3AD1F6C7B2BBEC05CDDE1C4C03B67DAD7353575E9ABC8F5EA5B5758CAD9AD56BCDB518896BFDDFF00548FF545B1F5ABA47FE1A67FD4BD5BFADF6D195660E650439B657657BDA080763B737E906FD1F5551FAA766EFADDD1C0ED94CFC8E57212B01CDC91A9C878BEF8993A65231A92492494FF00FFD2F544924925293A64E929F07FAF4377D6EEADFF001EDFFCF54ACEE8F875E7754A31ED1348DCFB478B180D85BFDA5A5F5E04FD6DEAE3FE1C7FE7AA5677D5BCAAF1FAC62BEC23D379752F9FF84696367FB4992D8D2F85710BEEF656F4FC73B5B93815D41803BD7C56ECF4C1FA2DBC7E77F2DC8195D2D941DF4925BCEBE20AD5B711F71BADCCB36E331D3B0BA1A770F6EF8F759FB9B10290CB2921ED2DD7DAC773B7F35D0AB027BB7A518F64BD39C7609E56A31C0F3ACAC9A5BE9FB55EA9F1051486593D2B032B5C8C7AEE3DB7B7700818DF57FA7E3DA2DAF1A8AC8320B2B00C8F376E5A55BC10028DD76D6B9BE4A39DD32C00ECCBD4AC360113DD0ACC7ADC009DBBF50476542C3D4FD3230D958B5D1165B25AD13EF3B1BF49C9E9ABABB2E0E7BD9E8B87BE352E70FE49FA09A9156D6FAE5D2DD6FD5E7E4077AAFC1B1B7B4F70C77E86F1FE6B98FF00FADAE33EA79FFB2EE91FF8699F91CBD22EB59753762BC82CBEB7D4E1C887B4B3FEFCBCD7EA583FF3ABA313CFDA980FDCE56701B15D9A5CDC6A57FBCFD04A2A4A2AC351749249253FFFD3F544924925293A64E929F06FAF13FF003BFABFFC70FF00CF74AC0C5A9F6BEC63352C63AC81FF000637BB5FEAAE8BEB9D2FBFEB97576B4682E6973DDA35A3D3AB955FA1E1D15F556398F3634D193EA480266B737D8D4384D13D14271E211BF53B9D07EB6E364D2DC7EA4F155EC01A2D78FD1D9FBAE738FF00376AE86C6B1CCF546C1A4EF90411CFD29DABCE31F01ECC9BF19F040D58EEC44E85AB5717A65C5A186D2299135C983FC90D55E7117A3771E43C3A8D5E9F7B79699F056B1DEC70826216457B9839D111993E9EB29ACA24EDFA80409F821DF6082663B954075105B13D92AAD16BE5CE803523C5327AE8BC11BB62EEA36D5596D741B081A1710D6FDFAB952C6EABD6ACBC0BE8AABA5C61D1634B88EDB55CB286E437520055D9D3E8C571BDD74EC05D06001085689120CF2F26BC5C5BF2DE76BA8ADCE209FCE03D8CFF003F6AE2FEA5B09FAD5D1FCB25B27E4E5B3D55CECF2EA812DA9C7D4DAE05A5DFE8DFEF8DCCFCF46FAA5D2998FD7B02C277385E3F2394D8FD3E64B5739E33A6D10FB028A928AB2D35D2492494FF00FFD4F544924925293A64E929F1DFACEDFF00B24EB193635CDC4A725AD73F69D9EA3AAA6373FF003ACFE42CBC7E8D93D7F2ECCBC1B5B895E3868B6F735CC68304CB760DDF41BFA47ADEFF0018DFF8A0C4FA3FCE5DFCC7F52BFE77FEEF7FEEB7A6B56AFF00C478FE6FFA3B3E87D1FA2CFE95FCBFFB91FC8F553A5C7C236A598FDBE296F77ABCF3306FFB0FA79370BEBACFACCC86506BB1A5C1BFA11BEE6EF764B5F47E83D1DFBEEA7F3DEA66814BFD116B4E4080EC7782CB8388935FB3D6ABD467F5DEB62EFE9479FE7EFF00E6B8E723FE4EFF00CD97FA1FF805CBFE60FA1F487F3BFCDFD21FCEFF0027FD2AAD2E2BE8DE87B75BCFFABC207ED7571DCEC88143D8E71240638ED7123E9358EFE6EC43C86E5D409B68786FEF012DFF0039B2B773BF9ABBFE4BFE6AAFE6BF9CE7FC07F23FEE27F2D407F363E9FD11F4BE97F6FF00EFC992ABD131E2AD5E6DB90D2ED343DC23D7925BA83007753EABF4FF00C17CBE925D17FE50C4FA1FCF33F9CFA3CFFAEC4CD1935AD1D0651955E39C9CEB3EC58AD05CE7B9A5D66D1F9C31D9EFDBBBD9FA445E82FC6EA37BC574DB752DDAD7E45CE643647AAE2719BBBE9D6DD8CFD25B6FFA5F4D56FADDFD1B2BF9FF00E98DFA7C7D13FCFF00FC0FFDC7FF0087F595CFA93FF22BB8FA777D1E7E8D7FCE7FDF7FE0D3870AD971D6BB3A9D4F0CE660D95B768B1CC2F617090D73C86D6E688FE73D3DFE9FFC26C5CEF4CCAA717EBBD5D2DAC706D394C635D21DA966F732CDA7F95F4D7517FF003C3FA5FD3ABF98FE6F86FD2FE4FF00DFD55BBFF141D2BFA1FF0049FF000BFD33E8DBF4BFF44A78DC5B19D8D767B851524CAC3554924924A7FFD93842494D042100000000005700000001010000000F00410064006F00620065002000500068006F0074006F00730068006F00700000001400410064006F00620065002000500068006F0074006F00730068006F00700020003200300032003000000001003842494D04060000000000070006000000010100FFE10DD2687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F003C3F787061636B657420626567696E3D22EFBBBF222069643D2257354D304D7043656869487A7265537A4E54637A6B633964223F3E203C783A786D706D65746120786D6C6E733A783D2261646F62653A6E733A6D6574612F2220783A786D70746B3D2241646F626520584D5020436F726520352E362D633134382037392E3136343033362C20323031392F30382F31332D30313A30363A35372020202020202020223E203C7264663A52444620786D6C6E733A7264663D22687474703A2F2F7777772E77332E6F72672F313939392F30322F32322D7264662D73796E7461782D6E7323223E203C7264663A4465736372697074696F6E207264663A61626F75743D222220786D6C6E733A786D703D22687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F2220786D6C6E733A786D704D4D3D22687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F6D6D2F2220786D6C6E733A73744576743D22687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F73547970652F5265736F757263654576656E74232220786D6C6E733A64633D22687474703A2F2F7075726C2E6F72672F64632F656C656D656E74732F312E312F2220786D6C6E733A70686F746F73686F703D22687474703A2F2F6E732E61646F62652E636F6D2F70686F746F73686F702F312E302F2220786D703A43726561746F72546F6F6C3D2241646F62652050686F746F73686F702032312E30202857696E646F7773292220786D703A437265617465446174653D22323032302D30342D30325431373A32343A31352B30383A30302220786D703A4D65746164617461446174653D22323032302D30342D30325431373A32343A31352B30383A30302220786D703A4D6F64696679446174653D22323032302D30342D30325431373A32343A31352B30383A30302220786D704D4D3A496E7374616E636549443D22786D702E6969643A34656266653730652D643236652D623834312D613962612D3232623834663439646366312220786D704D4D3A446F63756D656E7449443D2261646F62653A646F6369643A70686F746F73686F703A64633333616566382D343164372D343134372D626566652D3133623366363839326632642220786D704D4D3A4F726967696E616C446F63756D656E7449443D22786D702E6469643A39633734393932312D633861652D393634382D613065372D613762366131393131336266222064633A666F726D61743D22696D6167652F6A706567222070686F746F73686F703A436F6C6F724D6F64653D2233223E203C786D704D4D3A486973746F72793E203C7264663A5365713E203C7264663A6C692073744576743A616374696F6E3D2263726561746564222073744576743A696E7374616E636549443D22786D702E6969643A39633734393932312D633861652D393634382D613065372D613762366131393131336266222073744576743A7768656E3D22323032302D30342D30325431373A32343A31352B30383A3030222073744576743A736F6674776172654167656E743D2241646F62652050686F746F73686F702032312E30202857696E646F777329222F3E203C7264663A6C692073744576743A616374696F6E3D227361766564222073744576743A696E7374616E636549443D22786D702E6969643A34656266653730652D643236652D623834312D613962612D323262383466343964636631222073744576743A7768656E3D22323032302D30342D30325431373A32343A31352B30383A3030222073744576743A736F6674776172654167656E743D2241646F62652050686F746F73686F702032312E30202857696E646F777329222073744576743A6368616E6765643D222F222F3E203C2F7264663A5365713E203C2F786D704D4D3A486973746F72793E203C2F7264663A4465736372697074696F6E3E203C2F7264663A5244463E203C2F783A786D706D6574613E2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203C3F787061636B657420656E643D2277223F3EFFEE000E41646F626500644000000001FFDB0084000202020202020202020203020202030403020203040504040404040506050505050505060607070807070609090A0A09090C0C0C0C0C0C0C0C0C0C0C0C0C0C0C01030303050405090606090D0A090A0D0F0E0E0E0E0F0F0C0C0C0C0C0F0F0C0C0C0C0C0C0F0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFC000110801C2032003011100021101031101FFDD00040064FFC401A20000000701010101010000000000000000040503020601000708090A0B0100020203010101010100000000000000010002030405060708090A0B1000020103030204020607030402060273010203110400052112314151061361227181143291A10715B14223C152D1E1331662F0247282F12543345392A2B26373C235442793A3B33617546474C3D2E2082683090A181984944546A4B456D355281AF2E3F3C4D4E4F465758595A5B5C5D5E5F566768696A6B6C6D6E6F637475767778797A7B7C7D7E7F738485868788898A8B8C8D8E8F82939495969798999A9B9C9D9E9F92A3A4A5A6A7A8A9AAABACADAEAFA110002020102030505040506040803036D0100021103042112314105511361220671819132A1B1F014C1D1E1234215526272F1332434438216925325A263B2C20773D235E2448317549308090A18192636451A2764745537F2A3B3C32829D3E3F38494A4B4C4D4E4F465758595A5B5C5D5E5F5465666768696A6B6C6D6E6F6475767778797A7B7C7D7E7F738485868788898A8B8C8D8E8F839495969798999A9B9C9D9E9F92A3A4A5A6A7A8A9AAABACADAEAFAFFDA000C03010002110311003F00FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8E35D5BCC737C2D3C9BFBFF666A389DAABAAEB92D09964A9F7C78D5CFA56B736CD2C94EF538F1AA82F96F534916762EE10D78F8E112B54DEDED35BD3EEA09B45B992D25620CA14D3265239BD8EDBCD5E6BB286DA2B8BE79A375FDFA924D4D3205B0232DB5BD4EF199998E5459C58F6A9ABEA16F71CB9114EF9125B120B8F3A5CDA026573418AA583F34D616346AB5298A09A424FF98F2DD0F80D2BE18691C4925DEBD7DAB05B61522434CAF2C51C6FBA7FE7122F60D17CBBA84175B333D4D7E6329E172714DF5E6AFE7ED22CE1043865814FAAB5F118F0B9A26F8C7F30BF306DEE7549AE2C8889391A95FA71E1499BC4758F3D5037A77ACDEA0AB47CBAE4E30713366E12F35D43F302DA14901531CE7ECCA7C72C11718E7796EAFE6ED57516663AA12A0515431E99608B8F2D430D9A677E524F3FAA4F5A9AE5822D0750978B98B8D140D8E4C63B63F9843BDC13F64532431B1F1AD0C5DB916EE72D8E362656ACB7457BE4BC3606368A13F2553F7E5321BB5F0EEDD0B6F916C0141ADD0558F5385BE2690CC5536E98B682985A4527312ABF1A6F5C9F44527A6F5255114979C48EC4E424136EE70A2D2593E54CA2516432D265A76A6F6B5FAACACBE041E995F0B319DE9DE5BFCCBF37E8C54E9FE619A075E8A1C8FE18699F88FA4FC9FF00F395FE6ED08C0BACAB6A71A302D2BFC5B0F98C890D8323EA6F247FCE5769BE63B8449ECD62F50F5D875AE564360C8FA2EC3CC5A46B32DADF898514F2F4EBD72B21BF14F74FF4D7626F1F53F8A192BF5207B785320439FC4115A4693711DBDF5F5F12CE8C0D913D857B640865CD910BAFAE46A41FEE46F95909115A6CE4BB46B98FAC20D7214C643662170CF7323C858AFA27E2FA314452DD56DE2D4F4C9F94A6B1827AF862DF163FA65C8FD1C2C11EADCA80D716F09EC33DE42A6D1472A2824F861069AB502C331D3BCB3E55F3C412795FCE9A746D05DC6CB0CEEBBD4A9A6FF3399784BA4D445F8C9FF3931F9253FE507E61EA96B145E9F97B57919B426A6C402C4D3AF866C605D3E41BBE5BAFA5230FC32DB583B90724F865D8B930CC5BCB5A16375C55AC5578E98AB78AA8BFDA38AAA2F7C55A3D7156B155EADD315560D8ABFADEFF009C6EFF00D677FC84FF00CD73E56FFBA45AE5A39349E6F68C28762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD0FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF917B754FE45FBB34FC2ED532A855A803C71E1551370C0E3C2AADF5A26361ED863155D0DC52840DFC72C2A39A6893B3D0124F8D7205B423E172F227A6C401D86D9516714AB5F0D52FD80A139193607916A21A49641526A722125825DE9F335C1F4C75ED96C434929D699A6C96C434DD0F639708B519B2F86D62F8446DC7EB1F0971B52990CB0D9871BE87FCB0F341D3236D0D5B8C6E3E2981A1FBF28E17231CD35F3479E9A06B8D356666080FC7CAA4D6BDF0F0B9919BE7FD5BCC7246F2B3BB10C4EC4E3C2994DE7979AD87666AFDAE9921171331B2C0F56D4F996EFF003CB045C5931D8EF2A483F765822E3C93012875EBB1C988B4108794A034D865910C68BA38D5CFDACB0048895EF171AE4C36479A0A470A7A6580362A4738A2F877CC49C775A4724E0D32149016B354935AD71A4A1DD6BD77C7853689173C4000D282981B835EBA75A0AF8D30316FEB00F53CBE780C5810510B7617A1A7CB21C2C68DA6FA7EA011872EBE39021BC16463520EBC791A11BF8640867128FB5D46EECDD26B2B9642A6A021A6408660BEA2FCB2FCFDD73CBED676DA8D64D3C301752BEE42FCCE56437639517E927903F33746F37E9D6F35B5CC6CC69C5188FE272B21CE195EF305FA4D63FBD6531AAF4047864086E8E4B486CAF94DD3C40F0427627A64086D8CD96A5DDCDA59B81C5A07EAC065720CA52B09035922C373792515250683B641116276C6D6D61BBE6F53302029E9BE2DF179F4113DAEA124A8F54249515DB16F0CA34926E2FE49AEE5291C6018F7A54F860465161EA22FDB4CB9B1BE11ABC42946201CC9C45D46A60F8AFF00E73E6C935ED07CAFE6151B69FEA733E1CB966C6127479A3BBF21B5802DEF21BB07F772A9A2F6CB896A8B7129F492423FBC15197E12C7338F7CBDA14FB8C555475C55CDD7156B156A98AB78AA8B1353BE2AB6A7C7155E3156EA7C7157F5CBFF0038D9FF00ACEBF907FF009AE3CABFF748B5CB472693CDED5850EC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFFD1FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF91688D3E8CD770BB55732D29BED5C3C2AA125C2826831E155317408208D8E02155E1B85AF4C8951CD358A7AEC0640B684DB436F56492BD16B9596615B5884496D2F7DF6CAE41B2245BC82F22E370C08A6F82213221279612262C82A46E7E599100E3CCAE5B8127C2F41C732621C6949524D42354F4A234917A1AE47306A2535D3BCDEBA4425797FA536DCC1FEDCC76FC4509A9F9B4384B899EB24952C6B5FE38D39824C1F50F30477E480698D24CAD8EDC5C8D85474E95C9C766360A4574C1CF635E9EF930D6404B3D13EA5541F0229BD72C01A26023D4B200A41E5D969BFDD9688B498A9C8A643CC30A7422BD32241B4C601C9CD0D0D4622D78559E6DA85BE9CB031A4148391EBD7EFC95A3758ABD0572A31B6611B1823A838384A95415A9D8EDDA98F09415600537EFDB070962DFD589EDEE477CA8B782D7D5877207CCE16629B36E3C4570F267C214BD23C80EE4F4C2427802690DB9461BF5CA484009D470F214276A6FE232B21980A5CBD19290CC580EB4DE83DF2B660332D27535212DEE8FFA3C9B487DB20591D9EA7E53F3E7983CB371CF47BA75B588D42722361ED5CACD22322FADFF002DBFE729E486FECA3F324A5B4F43C6EB7AD6B403F6B2B2DF0917D9AFF997E53F30E976D75A2CF1C72CA0114615DFE9C8172A322F48F2E1BBD5F477844BCCF02EA6BE032B937028CD596783CBD6EAE486690291DF2A6C890F3BF35C434FB6B478C9AC8A0B530D37C4879A9BFB99670B1D41AED5EFF2C0DE0B228A4BA8602D3935603D3A78FD1912CE554CFF004DBBBDD461B5B6949F4D3BB6DFAF32313ABD48BE4F08FF009CBD8E0D47F29B5582DF79B4BF4C311B9F889E99B081D9D0E789B7E39EB9664FE87818D4B86E5F7E5A1C5029425A239806C20F8732B0726190DA1CF7CC86A531D462AAABD7157375C55AC55D8ABB15506FB47156B155E3A0C55BC55FD72FFCE367FEB3AFE417FE6B8F2AFF00DD22D72D1C9A4F37B56143B15762AEC55A6E98AACC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5572F7C55762AFF00FFD2FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF91745DBAE6B5DAA0270038DFBF4C557A007DF1B569937DBBE025217C042073DC654C931B4B9E50CA83AF638153ED2A660AE69F7614A367BA58ED6466DC57BE210497946B3748D33508EB930030322C65AED519B7A6D930C0A4B25EA976A1A6581AD2C9AE872FB4704D38D012DCEFD72B6D40CD37A94DCD07BE2CACA024DF7F0C56CA8140C8FF00BB32CBD8569F0F7CAB27369C922D18005B7B89916CE2B561340E5BAB2F4EB92C64B5D943DB5FDB89F5295B5385DAF559A094950D1CE7B04AEF99B8C2D95595FCC31E95FA5A2F2DEAB79369A4C971E6692CA54B64886DBBF1E1B7BE654698F1747A07953F25FF00357CD5E47B8FCC3F2CF921F5AF26DAC924BAB6B8AEDF686F20A01B713919D1482F2ED2EE9AFF0053F4EEAE9567B5774B4D35A8AB291B1591BF678F6AF5C85320537786D4C727D62D7D2746ACB0024AAB57E1A37BE16C1BA0A592333C1F5AB6956F6452D6B040A646283AFC2B8B2D91111FAC46DF5AD0357B7907FBCF3A594ADC97BBF4ED8D30F103505E5DC61A19341D524914F1B6B916725593FDF9C698D3094C2BC17577C9A69749D5DD17E004584A7930F1DB6C698198519259239ED629ECE48EE637F5EE6CEF94DAB7A0DF64D1E87010C6D165EFA492CFF437FCEC1AD7982636B06996E39B2843F0A8095272AE0B6424C9F59F2D79A3CADA9E9BA7F9E7C8D3686FAFA7FA33DD1786BC056A3985C85331262333C3A54F76F7BC648AB4B360D5AF80195D16C12513E60D2CD80917D45D661916331703F0A31DDBE818981642749BC3AE6906375955CC900F87512A429FE19594FE60222D35781D3EB68CAD1034926660015F9572B3129FCC840C7E65D1D24BEB4B581E196ED089EE402E021EE32070CAAD7F3211EFE61B4168AB6D299934E50F75301F184E8085EF90F02523417F34193E95ABBEB4AB7361A9FA4427EFD88A72403A53C6980E92498EA8047DBF9C7CB567070FAFC915C4CE561708580643F1127B54E0FCA49C886AA2CCF4DFCE48343113DBF98273C2842D0D36FA71FCA172A3AB8BE9FF00CBBFF9CDB4D1FD0B6D435C905A2AD18F0A9FF896425A434CA7AC14FAC348FF009CD2FC9CD42C53F4D798CACC46EA631D7FE0B043465C6FCE29EAFF00F393FF00939ABD91B3B0F33299266A44F22AA8527BD4B659F932D90D6EEC1B4AFF009C92FC948F548E1D6BCDBEB7D5488E20B10E0B20DAA581E9954B4843B0C5AC0FA4F4CF3168FABC116ADA4C424D0EE943D9DEF51231DCD3B653E018736EC9A8E21B326B4D5ED26FDD28E20EDB6D8D535DDBC63FE7231043F97F76F6EA5FD68D8B83BD681BAE646271B34453F1A350B93EBFD65BAC723023C3E239B1C54E8B53B294BF1309FB5C0E4332C38504337F1C2CD662AAABFC3155F8ABB15587AE2AD62AEE15DEB8ABB80F1C55DD36F0C55D8ABFAE5FF9C6CFFD675FC82FFCD71E55FF00BA45AE5A39349E6F6AC28762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFD3FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF90949CD3DF35AED52FB89CF2AF7C55B86E091D7E78AA21AE147461F7E02A39A924D50F534F0CA99A334E620B96D86F4AE054F2D6EFD2473D3C3154A750D59DAD254AF1F88648734179BDEDD33C8C49D8E4C302C72E27356DE9930C6492F362E77DB26D6A44FC66A69B7538CD38D42523B1FA72B6E435483D7156B155F63A7CDACEBBE57F2EC774BA6C5E65D66CF4A9755A8E708BA9021600F600D6B93C70123BB466354FD9DB4FF9F49FE51E9B35B5DF9C7FE725E596D2C19259EC276B48A07400311EA48EBB7C865808ADA838F7BBEA8D27FE704FFE70B7F2CBC93ADFE62EB5E4ED2FCFDA1F97AD1F53B8D68CE66458A1AB332885B893F4E5D007DEA4EFDC5F217E7E7FCFC07FE716353FC95F327E49FE4E7952E35AD3FCD1A73D92DB5DE9DF548AD1A421898DE956229B1CBE2A0D9B7BB7FCFBAED6DAEFFE7DEDABC11C097125CEA9E608E58A641C5CAD0F02C474D8EF91931E27CE5FF386BF901FF38ADFF3939F947F9A5E46D4AC20D13F3DE4D4AFA3D5B502693D8AA5C31B692CB911EA29FDBA74FA3229E2A7E6C7E75FE48FE62FE43F9FB55FCAFF003FD93DAC31B9934FF32509B7B8B752CD0949A9C492805403D7037465694FE5779EB49FCAEFCC9F267E62EBFA147E6CF2EE9F1490DDE9774291BF26A6F8B2E2EAFDABFC97FF009CC4FCA9FCF4F37697E48F21FF00CE3B5ADDCD7052DF51BD5B3AD9D9DB103D4066084034DC570B1E305EEDFF00393BF9B5F917FF0038B736896771F9223CD9E6AD663E3A258D869FF588BEAA48520BA275A9D862C38DF24AFF00CFC07F285102BFFCE28EA5A6B472F2BE54D1A4243F7A829818193E5CF2EEB1F945FF0039A1FF0039BFA5493F92469FE42D5B4CB5D2E7D04C660314D0D43332281435070B0326BF337F28BCA9F919FF003F16F267E5FF00E5ED82683A169F269B7D6F08FDE822E95988A3D41D80C89E4CE25EFF00FF003F7E5B6B6D7BF216FAED56EE1B8866F5D446B172F848FD803B9CAEB9B3069F945A4FF8720F3D7902F7CCBA4407CA305FC0757B66735684CAA5B90FF572BE8DAFDCAB4F397FCFACEEF5A9560F2669B26AD218AD25536AE12579540001F528C7B5460970F716278AB9BE8CF3FF00E497FCE0E7E5E7E5C69FE7AF387E5468DA6F90EF8441677470419BEC02858124FCF23C239D7E3E4E29B7CC49E6EFF9F50CE925A2F93B4A8B4E1113C84120527C38FAB5AFD3938C224F543E93FC95FC95FF009C13FCF1F2BEA3E60FCB0FCA9D1F52D0EC646D3EEEE9E378D870A93D5DBC32D18815DDE0B79E65FF009F5A683AA6B3A4DE792B4AB0D6B4B9A7D36FE25B7763CE0AAB0E5EA53AFB75C9C71041BA7E10595CE9716ADE686D3E258B449B5DD4A4D123AD185A191BD15A7871A65BC23AB5926F67DC5FF3827AD7FCE27E9FA779F3FE865346B2D425D52E61FF000CC570865F4A341FBDA85652A49A1EB8384364645FA0ADE64FF9F54F0E2FE56D1154776B7907FCCEC7843689C97DBEBFFF003EAD240B6F2B684EC4D14185C024F6AFAD80C026539232EB55FF009F5B229F5BCA9A1AB20ABA7A7202A3DFF7DB618E30D5C459F7E5FF0090FF00E7DF7F9C370BA2790BF2B6D35DE5F66FADEDE6FAB236FD67595941DBBE1300CE32931BFF009CC4FF009C6AFF009C4DFC9FFF009C73FCD3D534FF0021E85E59F375CE85247E5495A765BA92F792F130866DD857B0CA66221CAC5399237D9E1DFF0038E06E1FF24BC8D6FA85CDC48EB67037D52742BC18C62AC09DCD7357A900BB9C123D5F4B695A658ED26C48DC819824539F1281FCC5F2E5A79A3C9FAA5A7107EAF03F15EE7E16E99386CD59793F083CE5A73699AFEB5A5BC6D088677081C52B466E999F8CBA3D4C5283B5B59A9054AA1A5733226C38110866FE39364B315545FE18AAFC55BC554CF5C55D8AB5CE9B53157733E18AB7B9DE9D715750F862AFEB97FE71B3FF0059D7F20FFF0035C7957FEE916B968E4D279BDAB0A1D8ABB15762AD374C55662AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AB97BE2ABB157FFFD4FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8EE4B96A57F0CD6BB54BEE6E4F2FD78AAE86E01502BB62AB1E41CC1F7C05211724A0FA7E1953247B5D0458CD771D302AC9756E0B4AE2AC5EFF0053332B28F1E9921CD058C5DDC9A1C98605209A72C684F7DB2618C96890713936B5093F7854786F8CD38DBF476F6CADB96AC542DF462ABFD318AAA691E55F3379E7CD9A1793FC99650DD799AF254BAD31DD8AC8AF1B7C3C69EF976201C4CE5F60F993FE70D3FE739BCCF6ED6FE636BAD4D0A7A0BA64974C55430141414FC72EA01A2CBF643F2F3F273CFDA2FF00CE0F79D3F27751D3560F3D6A7E56BAD3AD2D236678CCF22154058926A49DF7C9C764136FC52D1FFE701FFE72CB48B23A6C3E43D327E0C6E11A590B4CA587B532C0520D3F6A7FE70B3F25FF00307F2DBFE70CB52FCA9F37592691E78BBBFD6E6B3B02DD56EF8984D76EA01C892C0C9F94DF94FF00F389FF00F3995F93FF0099EDF98DE46F2ADA43ACF97B58B9B9BFF5A5741716D34DCA84568C0AD6981417AE7FCE7FAFFCE51FE6E79534AF35F9F3F2AB43D1FF002EBCAD1B32EA1612BCB7E1CA1F51AE118D5072AD074C590953F38FFE71DF41F23F993F327C9F61F9CBA9DDE9DF96FAE3B23DCB201688E1C22891CF40316CE27EE04FFF003953FF0038D3FF0038DF77A57E43FF00CE2AF97F45D77F31FCC37D67656F7518A6957724DF097B9BD427E3626800C58195B18FF9CAAFF9CCDFCF4FC80D7BCAFA67E687FCE3DF94F59BED56CC3691AFD83497715B5C16A2A4323861EA03B85271636FABFF002FFF0038507E40CFF9F1F9F7E46D13C8B05BDA9B9D3F4E4445935042AC10CEACBB48C69B0C5812FC5DFF009C15D5A2D67FE7381F58D3AD6DADAD7CCBAE5CEAD690D688B677723CB1C6941D830DB16264F56FF9CB6980FF009FA17962F26790A01A3C56CD08AFC512BA95FA2BBE25B81671FF003F8D92E6E35DFC86B458964B3FAB48F6A53790B537046408641F93B24769776F1C5A8D8BDC5E5005AA9AD32A21B8153B8D1ACADF59F24FD5E27B49CEB5640015A8FDE83B570034CB9BF793FE7E412ABFFCE01F962299A79644D5F458DA471425D6A77F6DF2C8C6A9818EE5F822DA1697A868B63A7E97A1869E3B413DF5D92F5F5075EF84367007EF97FCFA0C347FF38C9E7F8608E44B9FF10DDC61C0FDA11353EECB049AB806DF17E12F9AB47B1BAFCC0FCCEB8BA8DA7BDFF156A70A3396A02262C6BBF8938253D9B3806EB5E3B64FAAB416104933FC0DC4D7EC8CC7F14B1F0829A683A75C3FD616C230D727F7CA091B8F91C7C52918C27967E5AF2D4C04779A2A4DE22AFF00D71F14A784226DB4BF2FEA7AAD9F93BCA1F97771E62F34DF4C9FA3B4FB38E4964E75A091954D4283D4E4A323252007E937E427FCFA63CE7E6BD624F38FFCE42EA16DE50D126845CC1A268937AB24A08A94B9E6D5414EA2B970B69343DEFAFBF303FE72AFFE716BFE708FCA571F975F92DA2D9EB9E72107A561A1E8CA67B496FC01F15E4C0B1526A6B4C8CA7B338C093BF27E59F9CF5FFCCAFF009C81D6EDBF31FF003BB537D6EE21B8F5743FCBD8E42FA6D9467EC96E276A53BE60E6CF5C9D8E0C3B6E1F657E5BFE6369D731586871B246D63122D22A1B745A50468C07ECE61711939F5C2FA534DBE8E15925460EAE054D72328B7C24CC22D5AC61D12EA696CBEB7CA290B102BC7E13918AE4E4FC43FCFDBED3F5AF3EEAA2CE0F41D256DA94A6ED997093A7CE1E1FEA48CAB1C8FCFD01C57D8667623B3AF229D96A1D8ABB155CBDF15546ED8AAC1D3156F15770077AE2AEE03C7156B9D36A74DB157733E18ABFAE6FF9C6CDFF00E71D7F208F8FE5C7957FEE916B968E4D279BDAB0A1D8ABB15762AD374C55662AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AB97BE2ABB157FFFD5FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8D34BC51D4D0F8E6BA9DAA5D757887900C2A71A55B6D7229BB0AE34A897909F881D877C041506914D7085128E2A32AA2CB88285DDE7100A372E23B634578825125F3B6DE3DB0526D0734E0296AD08C9008291DD5D541EF920C0A4C65777FB27E7930C485FCC81BFD3930585174720E677DA9824530148B0F5141BE41B2D48B91D8FCF15B6BD4C56D917917CEFE6DFCBCF3E68FE74F25D8DA4FADE8686E21BDBD1FBA4E07970AF89F0CC8C3C9C5CFCDF7349FF3F5EFF9CA09EC6E2F7F40F96EDEE2C9C5CDC4A63A3948C50D169EDE39750B71DFAE1E46FF009C8DF3C7997FE70D7CC7F9F77D6D65079CF43D126F318B287FDE7668D4B05229D0853DB26021F945E58FF9FADFFCE5A79B35516DE55F22681E62D56E938AD859DA9967DABFB0057B78614BF5BFFE7113F3E7F303F3EFFE71A6FF00F34BCD7656107E6269DAB6B5A78B38978242DA7FD8475A7C2DB1A8C04354DF9BBF941FF3F0CFF9CA9FCDFF00CFA87F28345D1BCB916A1ABEA975A7BCB321458A3B4765E4CD4EDC70522934FF009CF1FCF6FF009CA8FCBB54FC9DF3CC3E4CD4B45FCDAB77FABC1A0167BE8560F85BD6561F0D6B51F2C5987E547903C85E7FFCE1F31E95F90DA75CE97A4DCC5234B6925EBFA51B3F2E410B7892705864FD16F257FCFA23F3F26D7B44BFF33F987CB7E4EB2D2CACD0DEF97A57FAFA5C210D14B5634E4AC01AD70A0BF577CE1E75FC81FCA3FCB5D0BCB7F9F7E7DD07F32353F23411CEF26B7325C6AD737D0F499537AB531624BF32FF00E7323CE1F9DBFF00392DF975379D3CA7E4D9FCB9FF0038CFE50893559ED75188C37B3C51FDA96341406234F84E1A60FCCAFC9CF2BF9BFCFDF9CDE47F2C7E5B79864F2479AFCE0F1D9F917558E43088E40A5C7AAC3703883D31E140897EB27E5E7FCFB5BFE727B4DFCF1F24FE6C7E63FE61689E709343BC49F53B89E691E765414DAB4AD6B5C69B86CC2FFE7EF9AD68DFE37FC9DF2EE8BA9A4BE67F2DDBDCBEAF6D237C36EB22928CDE0180DB2259805F3C7FCE28FF00CE04F9B3FE7277C8B379FED3CEF2E942398C3C1E42073EA05011EF913BF26775CDF5A68BFF003E80F35DB6ADA36B1ABFE62B5E3E957F6F77F57E65AA20903D055BA9A5300891D14CC17E927FCE507FCE31CDFF003909F913A5FE4E5B6A8FA49B39ECEFCDFF00EC97B4D954EFDF2C0C0CC9DDF9B23FE7CF5E6CB5D3445A7FE68CD0DDBB5651EA3052BDD766A644829F10BF463FE710FF00E717AF3FE717FF002A75DF235E6BF36A771A95F4DA9497719F84348A568373BEF954C90A245F9F1E67FF009F44F98B5AF37F9975FB0FCC06B6B3D7B50B8D4C42F211F1DCC86460C037515C4094BA289D17C03FF393DFF38B1AC7FCE29F9FBC85A4EA5AE9D56D3CC32395915890415F72727E1D06CF11E5115ADBC0BC0ACCAD3B3189E9B75DE990E109E22AF02A25CA98A4775EE7B60A0C6CBEB5FF009F6E24C3FE73B742F456393FE752D5CC824EC9C7E265F714DB2E8061225F657FCFCFFF003C3F35FC97E6DFCBAFC96F2179A27F2BE93E74D264D47CC3E6289FD3B9611CDE998B9D3BA8E9965048912FC9FF002E796B4CF2F6A1746D8A5FCB75704DF6B7A99ADCBC86A4C8A6BD77CAB200DF025ECD06A30454B7B39648D29FBFB81D251E0C7C335D962E7E29109E69570F65730DF69E56CA20DF15B45B4751D5BE6731E31A72B8ADF587E5979ECDFABDB5F5C28E2005E47AFE18261BE05F56793754B6B9B7BDD2DD11E3BD8D979B741B532B00B39BF217FE726FCA5FE19FCC1D4EE238EAB732332D3A1A96E999100EAF5043E588DA30F351BE22DF1A9EA0E67E2D83AD9157A1F0CB98BB7F0C3452D12075C08B5CA46FBE2AA8C46DBE2AB01DB156EA3C715773A6D4C16134EE67C31B5A6F883BD7AE3687701E3855FD72FF00CE367FEB3AFE417FE6B8F2AFFDD22D72D1C9A4F37B56143B15762AEC55A6E98AACC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5572F7C55762AFFFD6FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF87A96FEF941ACBF8E623B3B0963DF5F16DA5AE34B611515DDF541F571A5D9318B53BD42A1E4AA7ED2E0931927706A3CC0E9BE52D61166E7638B38A5E6EBE33D4E2D8103717049C52833FBC23155616C42F21DF15434B1D3B62A868D7E36F0F0C5894746A3DBE8C582BB461BE43155168462AC93F2FBF2CFCE1F9BDE7FD1FF2EBC9776965A8EAF19905C4E6900A1A7C7976271B31DDFA2BA47FCF9FFF003D7597F43CC9F997E58B4B688049A0B3123CA57AD18AEDF7E640F268B7EC4F907F217CA1F937FF0038F179F955E75D6E26F23C1A335AF9A359B87280447FBCAB9AD12872616DF1CEABFF003963FF00381FFF0038BD6BA743F96BE5BD23CF9A8D847C5755F29411C972838D2B3CEC2B5DC8241C905B5BFF003EB4FCC58FCF1F979F9AFA45BDB470DBEA3E63D675CB68140E5026A2EC544B4EFF00150E4BA2F0DB17FF009F7DFF00CE324FF963E63FCDAFCFEFCCDB44B09FF4B6ACDE5AB8B8F84DBC31CECCF23927F6C74DB010CB81F96DF9DDF9D7FF002BE3FE7253CE9F98D6F74D045A7CCD65A2E9970D50A9033C3CA01414E4054E56436C616CDFFE712FF28FF257F327CF9E6FF31FE72FE7149F963AB796353B69BCBCB6F75F56B8942307356F0AE459786FD51F38F93BFE71CFCE8D7B3AFF00CE71F98B48B4344BB5D3B5DE01005028483E032A32A3CDA4E2277A79DF977FE7DABFF388BF9C724FA9681F9DFE67FCC6BB8EA6F35A1A8ADDB0A750CEC07864F8C745E0A7D95F97BE4CFC8BFC81F25FFD0B3F99FF0036D7CCFA7F9B4496BA47977CC577EBDF4905C8A0B58A951C00FB2B931913C07B9F1A79AFFE7DDDFF003895F947E615F32F9A7F3CF59FCB2D465BD7B8F29DF0D405ACB64ECC4AADAB863C4A5683DB26269AA1C932B9FC9FFF009C6DD4E4B4D31BFE73E3CEE249C520787CC4435C9EA55985795326770C385F15FF00CE607FCE3DFF00CE35793FC93A9FE677927FE722AEFF0035BF320CB15BDBE9DABEA02FAEAE854A30AD6A780ED95C837C075A7C55E4DF31FE71792B429EDFCA5F991ADF923465E12CD616174D00776151B2E634B6673887D0DFF38F9E6FFF009C92F3EFE7CFE58F92FF00E576F99F50875F9E3D66F2CA5BF77A5BD9C80C9148A76A3807614C8F38DD72712517E82FFCFD9BF3BBCF5E43D53F2BFC95E46F376ABE50D47CC9A7CBA8CF75A64ED0168E297830629BF6F1CB9B7146F67E4949F9B1FF0039096D688A9F9E7E6F8AD66FDFCB72DA8CA013ECD5AFE382DCA9C283F6FBFE7D73E78F3479EFFE71CBCEFAC79EBCD5AC79AEFB4CF30DDC2BA85EDC34F27A0B192A159EA695A9EB8251704737E2FF009DFF003E7FE720AFBF30FF003022B5FCE7F34697A7DAEBF7D69A7410DF3A2450C729F4D68294016836C31A05CD8E332890C035DD5BCF3E67D574EF30FE64F9EEFF00CECFA07C7647509CCECBCF614AE4E73586911714D00BE54BA9663752A97D3E2AFEEC022A6A3E5989293951D3D2B5AB7A48ED5FDAFE3862584B1BEBEFF9F69C9EA7FCE75684C3FEA4ED647FC933991170F2C69EDFFF003F6FDFF3EFF26475FF0070139A7FD1C60916A897C11A8C06541DF8C9CA998F22E5C0A7769767EA8B08FD9ED9448B971679A34DCA08E393ECD77C85B75DB34B4D4A5D2EE2196CBA0209A64245CAC6FA93F2F7F32121B8B35B9702BC565AFBD3DB220B64F93C6BFE7316D6CB516B1D6AC183B3AD5A9F4E64C0BAAD445F9DD35A43EA99631F13EF2FCF2FE275A614A6E782D075CBE05690E243D3DF2EE882BC0E79596B937C78ED819479378B2762AEC55ACC79736D1C9BC4312578CB43592EEB920C097F5CDFF38D9FFACE9F905FF9AE3CABFF00748B5CB87260F6AC2AEC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFFD7FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF864BB048AACD51DB311CEB4BC2B147612EE01C56D17621DC0AC98ADA65E8307525EA2BB8C124129D5B45D38F4CA501306040229D716C8A58E28E49D862D88571C9F6DC629548E36A8DB154D235AAD08E9DB1541DC42687E1FA7154A1D5D0F43BE282A91C8E0F4C58F0A3519A9BEC3B62BC2B8891BA2938AF0B21F2279EFCFF00F94DE7DD13F323F2F2682DBCC7A3AFA3682ED3D5818B1AFC51F7CBB1CA9C4D40DDEF1F99FF00F39CFF00F3963F99305EDCF983CE163A19D22DDC48BE5D88D8BAB28AD1F89353F4E5DC40971E9FAFDF975AC7983CE1FF003EDFFCC2D67CC3ADCBADEAFAC793AF6692F6F5CCACAEC87A96F0C9476B5A7F387A7BE85A5F97E686F0C4B71A859A08A7863264776DF812A09AEFDF240AD3F707FE7D29F951F9A9E58D67F327CEFAF794AFFCB3F979E6FD06D2D74586F289F5A962209786B4A13D6A72D06C289D3D0FFE7EADF9D7E75FCBCFCB8F2D7E4FF95F4E9747D37F3126922D63CDB6EA5623146D510C6CA2AAC4FDADF7C494F1EEF91AF7FE70E3C83AA7FCE05F92BF3AEF2F5BC95F997E5B8A7B89B5A998AC37BEA48591645EA49A0A13EF9592D8323E2BFF009C7CFC90FCC1FF009C9CF3F6A1E5DF285F695A3F99A0478754D4EFA15781907C3CD50EF5A6F91B6632ECFD44F20FFCFAB7F26BF2AB40D53CD9FF003943F98B1EAF1E9122DD31D16E0D85B451A7C6C6757AB301DE83A60113F0419DBEF0F30F9D3F2CFF00297FE7157CDDF985FF0038E51E8F77A2E99A34D3E87AB584002CA507C25DB882FDF7A647C2A533B3BBF9ABD5FCC1E62BDBFD3BF38B52F3E1D5FF00332009E6CB79656692289588A59C486BC597C06110A62723F717F317CA1E4DFF009F8A7FCE1B683E61F29DEAA79DFC9B6E93C371250BAEACB12ADCC53746E24D763921162676F3AFF9C76FF9C4AFCACFF9C2AF256A3F9DDFF392BAF68DAC6BB25AC8348D2EEE1F56DE1050845489C37C66B4AE4B8D1C4FC98F3C683E4FF3F7E6A7987CE9A0F95AFF00CB7F97BAD5E493E91A34D227AD21690B17B72BF654D4103C32B3367E3523BCC3368DE5ED38437CCF631C29EAC4D72DCC48631544A0AD49A532A3BA7C6B7EAA7FCFAF3F21AF74CB6F31FF00CE577E62D9AE9F1EAD6D2BF93BD61C560D302B7AF32F2A5140527135F00C38ADF0C7FCE507E6BC1F9E5FF3923E60F3559336B1E4BF277ADA2792A590F34B9B5726B3475EC1AB91F136761A7C24EEF13D4A2B98216F556DEFED9374B08928CA3C0D76C7C47272E2D9FB2FFF003E9130C7FF0038CDF98534B0936D279BAFFD6B75D8AA08A9C7E8CB89DBE4EAB83D4FC42B8373FF002B0FF346E6C618E5B6B7F36EA8E7D75E4157D634041F0C864950761A68F34C66823B9FAC35E7A572978ABF0C0BC42537E99852CCEC052AAA97948E11B154E30923E3000EC721E2309CC24B3CE90432F3902146A3D4F427A65F09383972D3EC4FF9F65C7327FCE717971E44204FE4DD65E13D792F03BED9990E41D74F2713DD7FE7ED2449F9FF00F92E10F22FE5F9CA7B833E5732B10F862E5828B84A5655AD5331E45CBC6126D3AF59262937EEF7D81CC79172E2F55D2984B0523352AB5DB204B918E36C8F4C9E559024919604D2A72B949CA80A679663EAD494CBE9348414FA32024DB241F9EDEF35FB18ED9C35C431A101FA819938E4E0E585BE39D634AB9D26FEEA39A268D2662D096EE3DB2EE370E5898E354B6FF7E6463938D38D34D18D88FA73281D9C5915363C7A76C8940709053734381B03B9A78E2AB81077071575478E2ADD3C329237656EA1F0C900C495DD865803592DE4A9812FEB9BFE71B3FF0059D7F20BFF0035C7957FEE916B96057B562AEC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFFD0FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF86BB8802C67311CBE240DB460B32F63B1C57899159D94483A7CB15E25595139003AE465C97891F6DF00CA9215659878E2D914A669013D6A7B62D81411BE21E18A519137BE2A8C57A6F8AB52BD57DF154A6615A629014E35DFF008629A469140B8AD2262C5682DBA92EE182EA4897D5B636D227A6366F588F8581F6C944B46585BF40FF00E70A3FE70BFF0024FF00E723FF0029B5BF3279AFCCB2E85E6CD3F54FD1B7D1CF7CB1F2A8279716604E5FC449B718C2BA3F4B7F3B2EFF00283FE71B3FE7103CF7F9456BE72B18EF350F2ECFA4796A059D267BDB87144850231219B975392053E1DEEF8D7FE707F47FF9C0DF27FE58699F9D5E7A920D17CE3645F4EF33E9FE629BEBB0472C5F6A58ED983503B74A0C9DA38084AFFE7217FE7E75E7BF365C5E7907FE719F438FCB7A1D9BB245E63302FA77D68A6A9F554D84551B9A76C78E9A678492FBA3F267F36BF20BFE73B3F246D3F2E3CE2F6ADE69D3EDE14F3568B7AC8B7B693DB95E53432C86A3D4707ECFBE0333C988C469F327FCFCB3F353CABE53FCBAF26FFCE267E5CDFDA3C1E60317E9B4B77594D8C5624344ACC8763215A1191E3A663097E57797752F3AFE5FF9C6C7CCDF943A9C9A0F9CF47B37B69ADC3304BA5917E290814069EF94F8AD834F27D89FF38B3F927AAFFCE6FDA7E64798BF3E7F37350B297C93A92E973E8C3516B68AE39C65D8B46CE015A8A5732465003038E4FD4FB9B5FF009C5EFCACFC8DB6FC88F3D7E61E976FF96F73A61B09B4D8665F5F8B1DCB4D11635DFAD301CF148C322F85A05FF9F51FE534B65AAF9524BCF3E5F69779EB5A587D6E6BA592E54502399556AA41E94A644E701B069645F0D7E4CFE707E71FE4DFE6779E7F353F27ACA7B7F2BDEEB5777FAA7901F91B67D325959D04716C81E8C454657F9A8B68D148F47EAA587FCE5D7FCE207FCE64F97A0F277E7DD8CFE44D68148A2F29EA333219A56D898E455E2373B03F7E40E51F51E5E4C65A390DBABF3FBFE735BFE7193F2E7FE71D6EBCA4BF931E6B9F599BF306493F44F97BEB7F5C7B6892AE2854B05A8A0C81CA48B3C9A8E9A47A24BFF3851F919E41FCF8FCE08BCB7F9D5E708F47BEF273A5EE8BF97374C527BFF4784AEC676A2B2AF75EE36C1C6472EBD57F2E62FB7BFE738BFE730D64B5BBFF009C5CFF009C7DB8B4B9D4AE02D96BFAD6931886D349B68C7096D02A1E279A93BAED8F89E9B972FBDC8C7A49134FCD7F2F791E1F2BD8A68176E65963AD2F474AB6E687E67304EA2CBD060D36C9D5FF00962CDEC2E4C7290D6F197694577A7CB271CD6DB9F4FB3F537FE7D471DBC1FF0038CDF9836D79756F682FFCD9A8A47EB4F1C6DC425391566046FE39B033B1B793CF4F170CC03DE7EF7E383E88DABF9ABF332F6D2329158F9BF538A57471C64549295DBED5731F3CEA2ECB1E2B0B64B2FAB6DC295ED9A83959F8450935A7AA80863180EB571D695CB2191AE78497A47FCE3F7E527E5A7E66FF00CE4DE8BF97BF9B2B736BE4AF3858DC5D45789762D544B6F1928399200E4453E9CDB69C931BBE4EB73E120D53F757F207FE70C7FE718BFE71AFCE927E65F912FE4935C165716D61ACDEEB114F0C16970A04CA23671527C4666125C2188F73F2B3FE7E3BF9A5E4EFCDFF00F9C87FCBEB2FCB3F30C1E6A87C89E5FB8B0F31FD554D22B812972BEA74AD08CA67CADBF1E3DDF31DAC4D05A3A188C69337A8439E4E1BFD6CC69173A18924F4C0BA048EF98E4B950C4F51D01855631D5C01954E4E4C31D3D46DF46944493053B8AE63CA4DA229835ADEBC6A5222C22EBB64449245AB5B5C4A54C33C541EF9938E4C4C2DE59F9A3E5C4BCB14D4ADE3DED50AB53DF2D949A32627CC778E915B014A4B5A1CC8C527559E348462CA23AF565AE6C22EB25CDCA390DFB64CB3839A315C836114B7D35C50EA53618ABB155C1C014F0C8916825AF572403025BF532603025DEAE5822D64BFAEAFF9C6B35FF9C74FC823E3F971E55FFBA45AE0661ED78A5D8ABB15762AD374C55662AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AB97BE2ABB157FFD1FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF881BC880420F5CC3E20E424B0A857A1EA4ED8F12B24B50B4218D31E20AA8F08670CBB9ED809B0A39AA03C41076395F0B604BE5662C6870F0B30504E1C9AD31E165C6D29E277FA7070B21205171354FC382928CF8A83E78D2B8D698D2A12406B8A625A8D0D7A6D8B2B45B23300145698AD85F1EDB1EB8ADAA4A225884FC4CD3AB045B6AD0153D5BE8C429A2868F47BB86133689E66D47465BDBA56BFD32CEE6585789FB529E0402465832531E005338FCBB6FA84CE751D4B53D461B17E766D79772CEAF20E8C15C9030F8BDE98E11D11F0795F499EFEDAF6F2C266B595F85D69026222007FBB997ECB57C30F8C19F83BDB33B782934292BC7E8C4ECB672C2823F4231B2D78815DB6CA67985B64710EA91EA7E5A437115F68D25EF97EEA32FFA4F52D3EE5EDCDE06FB3511914E390F1E9B3C081768DE5FD3ED8FD72E26BBD7F5E0DB6AB793BCAF427B1724ED909E7B671C1001E86B6EF2DC590922A49044CAFABA1E2483FB240DF7CA8E50DBE0C52883F2E6D4EB125EC771AA59E917959750B0B1BE96DBEB128E858C64549F7CAFF3738F271A7A404BD4B4AFCA0F20CF6D75A85CD86A90996129159DE6A12DD0527BD5C9CA726AF24F9B762D180ED0FC95E5FD05E19F4BD0603769271769155C18BC68475F7CC796693B0C7A50F52D3ED674B48A28163B4912E1A66754142ADFB0C0751EC72BF1A4E6474B163FABFE5BF943CCB3DC5D6B1A12EA3716A39D98B522DA49246EB491402299911D4D7544B4B1287F227E4F59E81AD5C7992EAE2F3EB112D346B2D46E1EF7EAA0FDA0A64AD36F0C9CB59C5CCB8FF901D143CF1F94BA579AAE96F74992E3CADE648DAA3CDF6933C721435E6948E8DF1034EB9286B047CC2FF2782ED17F2EB4DF2AD9BD969566F737F74419BCC533F3993F9B9330E4C5B213D582092E54745188D833187CB62EAD134DB88792A75D40F53FC73046716D98F152B4FE598AD6DD2D6CC85957EC5CB0A807C48EF96C753109CB8F886CF269BFE71FC4B7D793E99E62D5B4A17B5B899AC6F26B783EB2E7E26F4A3206F99B1ED1A157B3A89682E5C54CA34AFCA7D23CB5A63D9C76B2DDDC475996F4C86AD3B7DA771FB44FBE5597571946ADCAC7A7203CF75FD0E64998087A1F8B35E32370D384AE0D338C0E49F4DD47C2C45687B6646292CB00609E67F2EBEAF0D8DC5DC93DB6B36CFC6DEFEDA5689E28C9F8802BBEE336DA7CDC2E0E7D2C65CD8A6A3A0EA36B2B45A7F9B35FBC8C7C715BFE91B85141D57ED77CCD3A814EBB369611E5F794CB42B39B42944DA3DD8824D64F3D75661EACAA4ECCBEA1DCE512CE1A2189EBB1D84090ACF0C6C2D8AF0F58B16E4DF2CA279A2E6431A0534EF527AA2D77CA2598391114CF346D3E7867B762945E42B944B286FC71E3E4FA7F44D352F2C21089CCF115DBDB293305B0E0932587CBA3D27458E8CC3714FECC00B0F0A439B17D4FCA324619C2D3AF41FD99930986420C0753D0A76B1BCB59D39C12EE58F63965F1726196161F1E79A3CB8D63A8CFCA32B6FC8956CCBC669D26AB1960ECBCB91614543C53E599F09874D381054A46F4E95D81E872EE265034A4F2F1343D698096C26DAF52B8A1557703155C411D462A8377F888AE203592B79FBE48062EE7EF93B6041772F7C9713120BFAF7FF9C68FFD671FF9C7FF00FCD6FE54FF00BA45AE066393DB714BB15762AEC55A6E98AACC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5572F7C55762AFF00FFD2FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8779E6690D0E6BDC86E0B62C55A9D0D6B8AA7B1454C555F8814C473508693A9CB59A5E480C49E98AB4CE9E18AA1A465236C05945742699536F1047092A078E2B61716DBF8E15B08391B7AD701482A9130DB026D16ADB1FD78ADADE4395715B5CC6A062A9859FD93912D914FACBEC37FAD95C9BA09CC1906F8A6B0A0645AF8E565124EE5B5E56640EE320531482C21F4EE0AFF29DF2B9330CEACE0F56829B9C8368E4CDAC6C8B24629D3205B22F49B3B43FA35969534C81722095DBD8BF3A50F5CA8B97065B6766FC7EC91909392190E9DA51E60F1A6F539510D822C94E9842EE2B4182922294BE9CBBFC3DF1A6D10413E9C95E9808D9918A3AD6C100A53AE505ABC3569B4C47A10BB8C57C3455AE9E00E9D714786EB9D2B9A3F14DE9B62830A0F10F35689708F3388C77C945800C0A1B0924B69D5D00DF7CCCC658CA2C43CC9A64B085600D3332127032879C5F44D1D651B3014CBB8DD6E68EC9569E93493D373BE4096BC707D0DE5ED224BCD3238D81217E2194CE4EC2186C27B0F95E4120223E9ED98F22CCE9CB2BB2D12485E12E869514DB2B3272F498082FA3BC976F1FA31C6CBD80C00B9B2C4F5CB6D22065A85FB5D72C12689E35F75E5C826423D304E4C16838DE5DE70F28FA16FCA18FE12A4B003FB332B0C9A270A0F913CE5E598A54B82F0FC42BDB33232B755A885BE51D7EC24D3EE1A3E344EA332A05D2E68531CB9903428D5E99931710841897950E5A98F25656C595ABAC805315B5479401F3C56D2F91FE33BE4C354B9ACE7EF8B1773F7C55DCFDF157F5FF00FF0038CFFF00ACE1FF0038FDFF009ADBCA9FF747B5C9ABDBB15762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFD3FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88316FCCD45335EE42630C7C17891F11D862AAE55A3FB5F862AA7CC9751DB08E6A164BD4E58CD00D192493F67C71552654F1E98AA832AF6EB91290B797134C832564620D6BDB1557E551B1EBDB1542C8AC687016512BE3246C4E0656881228DBC715B5E11CEE294C56C2AD0D003D7B629B4CACC1A53B9C896D8B20B34655607B9A8CAE4DD04EA089F20DF14C63AA7153E3BE56512656AC0D9EFE1902CA2C7A01FE94CD4D89DB2B9320F44D1A22C54D36A641B43D174E882B0E4366E9902D917A259DB936C4506FD32B2E44175B598E7F677AEF95972E0CB2D2D502EE3225C90C86CA10A46DB6574E481B270E8A474ED8D360012CFAA73AF15EA71A6C0109258B03BAD3011B3202D523B609F6B314B2E04D22B3590034AD714702362B38D4D08A62BC08D92CE26864A0DC8D8E2C670D9E75E64D0627B39A4352789ED928B8A214F04F4608659A2058B96A71236EB97424C65040F9A34E89EC95C28AF1CC98CDC1CB17806B5108838E3DE800CB3C475D9216A7E5FD3A7B8B80238C31276180CD9E1C4FACFC9BA25D0B4F4DA1019539357C331E591DBE1C2F4FD1740FAEC9C12352E3AD76CC796473469D93DC796E24291B4604886A6991E2B6EC7800667E5DD3440E9F0D0786112672C6F5FB14B68E3024AD587C3B65824D13C69CA476CD41BFB6D9609B41C4A77FA1C17F6B22320208EF97E39B899A0F913F337CA4B6E2E0DBC436AD4D3E59970C8EB33E2B0F827CFDA605F55B851D76FD599B8E56E935189E113865050F8E66C0BAAC91A520A4003B66406B05554D3AFD38A6D706A1AF6C56C36D20A7738ADA14B124EF930D6D54E28754E2AEA9C55FD837FCE337FEB37FFCE3EFFE6B5F2A7FDD1ED726AF6EC55D8ABB15762AD374C55662AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AB97BE2ABB157FFD4FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88EB5527A8EF9AF72138584000F862AB580622B8AAAAC0BC4B6D5188E6A1033851F3CB59A058A952062A876E3FD715506A74EF912BC90EDF6B2B5E254AD00A615E25367618AF129FAA5B6F0C0520ABC75207BE0648911B1236E98A11A88C314DB60126A7E8C59C135B35DC644B745925BAED95C9BE09EC0BF08C837C559C5181CACA24CA6DC7A9694F6C814C52DB7B73EBF4EF95C9987A5E876C788DBB641B4727A3E9B685DA314E832B2CE2F46B2B6263094C8172609D5AE983903E395972E0C8E1B001694C8C9C909A5A5A8AF4E9869B849363682831A6626BA2B44A7D9C69B04D42E2D12A76C8C86CCC4B74B4DA1AF4FA3304B7DA6F69684F1D8605B4CC590AD298ADA30598F4DB6ED8944B7093EA9610CB613A9515E27F5620B488BE60D5F4C486FA62ABD1F7FBF260B19063FE62F4CDA08EA2BC72624E0E58BC2354B0E572DC96A9434F9E4FC470B82CB37FCB4D05AEB534E70FC3CBA91F3C066E5E2C54FB7B4ED02D6DED144680394A1CA2537678A349BE91A6AD9CA5F852BDF2894DC8B013A36A269D98AEDDB0464D9020B26D2ECD232A4AF4CB049259A5BAC2FC435053A659C4D134E3D3B7420F2C989341451B988008879061BE4E33A71F246D83F9B7CB36BA8E997521505CA93FAB32F1C9C2CB8DF97BF9BDA0BD95D5CC623A0DC8FC336584BA6D563A7C937D66DEA91D2873658CBCEEA0520658FD26E077D81CC98F27094F0AB44818ADA8B362B6B7AE4C2BB15762AEC55FD837FCE337FEB377FCE3EFFE6B5F2A7FDD1ED726AF6FC55D8ABB15762AD374C55662AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AB97BE2ABB157FFD5FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8A0B7896BB6D9AEB72116C388EA3DF1B553E05BEC918DAAA51C2F1E43082A94DDF21DF25C4CAD2AA495D8E3C4B68696564D88C78D6D62B926A41380C946EAA2367351B0F7C8DB2F0D50055346618DAF86B1E30C2AA7AE36BE1A82A146F886C7A6048852696F172DE98A784A64B1AAF5EA7A62BC255982D0D06F8AF0950E209D87CF10120F0A696686A36C0436C66192DBA1DBA6552722124FEDE2240E9ED951939312AB340C29B8391E69E1B647A78ADBF1EF4C8908BA46DB5848CE1C5284E57209137A2E836CCC428A5477CACB744BD434BB378594BD083E1954A5BB7443D074EB477A11403DF21C4E5420591431716F8874DB225CA8C29378D4505075C8916DDC48BB65A374DB0ADA6C232C36A615E3A44288D054A934C5B233B509551C6C0D7232E4DC0A10C04B0D866010DE3284DED6DD956B4191B65E222429077180C93C48F8684712363913365CD21D4D084954746072226BC34F9E7CCF02C124EED4249DA9F3C98935C9E37AF34B2B829F647519306DC3C91B49ECB467D52EE2855284EE49C375CDA31E2B2FA6BC83E4C86CA38E568D79F723227239F0C74F6EB4B13EA0DA8A17A1CA897240A4E96C569F0819598B2E1255C5B46801A6E3AE08C59C2242716691BF414A78E4D914D2283E3156D97240B4C85A36508CB452464F8DA4C54EDA89255892064E32B6990A446A33A3DABC22B475A0CC9C73A699C6C3E1FFCF3F2C7A51C978C8ACA63AFC3D7B66D304DD46AB1ECFCEAF30DB98DE4923015549DBBE6DB16EF2FAB86EC2259FD56E46B502999575B3AEE02A7CC7BE4830229631A9F6C242A91563DF224D32112570141BF6C226B54B4B81E3878969776AD7256B4B4B01D8E2B4FEC23FE71977FF9C6EFF9C7C3E3F96BE53FFBA3DAE4D0F6FC55D8ABB15762AD374C55662AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AB97BE2ABB157FFFD6FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8A889788DF6CD7539086B99B8D6871A5538666618D2A20C8C0548E98D2A0E6FDE0A8FBB1A54BC2D1E871A540DC805F7F1C6954F9704AD37E98D3387344464BAEC298D37F120A6B794B7C24E34BC48A855900E5DBC71A5E257DA62140DD37271A5E24C625E031A5E256049231A5E2452AF2071A5E25F1435AEDF4E4834CF74CAD63A1F6C816706456895207BE51272E0CAADE1A2034E994C9CA8F25EE9C8D298C4ECD80A75A5C7521299125AA4CB9221146AB4F880DF2A2562CC7CAEB59D790DAB9025CB845EC16F10E4B45DBC731E5CDC880671A58A28DB22E6E309C2A0E75A77C5CB099451A918B021116F1FC74F1C5253A48A806D8B54954A2D3F8E2D9050E0B5A78E097272A28848158F4E9984425191A0414CAC8641A6A02476CAC86C0BD245515F0C810CC1A63DADCE1629187864405E37CFDE636699A6205687A64C313BB03B7D224BFB9E012A2B97458F876F5CF2D792A38E786478A8DC7C32333B2638A8BDE749D320B481005008194B7009FC50C75D862D8023046A0785316C010F20500E29A57B324134C2A426292B066C0D642A3CAD4A62D6421C5C145624EF5DB2C816B942D0525F173C589A65F02C0E379AFE66E996FAAE8570B40CE10D3F0CD9603BBACD5637E4D7E6158C9A7DFDCC0148018FF000CDE603B3CA6B31EEF25039027DF326F7757214D85F965D171A4E2BF2C99601BE3D3A65127231A9323576E9910C64A0C8D920C56A96AD0E58155D0035AE495FD83FF00CE337FEB37FF00CE3EFF00E6B6F2A7FDD1ED72618BDBB15762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFD7FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8A8F54702DC7305BD2695FD57E9424E2A898542F520E2A887914A15F11D71542A9AD452A7C7154BA7942494A6F8AA5D31323020D2B8AA22180135770569B8C5944EE8E411D28B8B6A1979198A114DBAE2AAF28F4D775E55F0C556DA71E4E7895A8C551EEEA829D7C062ABA08DA46240A0C55341198D6A472F962ADC13A92CBE99153D7161229DC101A06AFD19596704DECFED57C0F4CA24E5C198DB30740A053DF2993971E4ABE8947A7DAF7195B34F74A819650FD457A64496B3CD99C712CF2569C41A6C72B25B718671A0D9849148A139025CD84767AD58C01D5052847539496E8C7765768521A2952D4F0C0E66308812564340684EC3172404CE1734AF86282138B70052A7AEF4C5849368D948F0F6C5AA4B1C507DADB16D8286E7BF4380B9314744D4ED98A42551989208046F9590C8284C5BEEC810D810AEEDC0F6C8109972633AD4B5B765A9269D7234E3C4BCC24D39EE5DAA6B53D31AA72602D3FF2DE80AB74ACEA0EF5A530F139508BD86DECA389A3E294A0C04B394682747E08C7C3906B015ADA60E7885208DEB8B301184D462CC0404A18EDCA9E18B346D8802B5607160423FD440C7DB162434F32018B59096CD729E1B6374988492EAED549A0CB2326528B1CD465FADA3C4DF65D78D0E6CB049D5EAA2FCECFCE9D1E2B4D6AE233462E49047BD3377824F2BAB86EF96678C452C89D402733E06DD0E6145439004ED991170A4B8508AD29932C03741E19449C8C6DF25029C77C8863258789FD9C218A1D901AD053BE5A154591BB1A6495FD84FF00CE32FF00EB377FCE3E57AFFCAB5F29FF00DD1ED72618BDBF15762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD0FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF89F0E3D33BE6370B90957306400773B63C2A893C9057A531A5414B39AF107738D2A6360038353D31E154BB508584E08FB23BE34A81F41BAF8634ADD1B74AFBE3C2A0A32D41F9E0E14F1353B32CAA4277A63C2BC49B7C0D082CBBE3C2BC484A537514C785789A1148F22D477C78578995C16E91C4848DC8EB8F0AF122B8464531E15E2524B74120A0EB919041DD3B55548C6525BA2BAD1AAF41E3BE5127320CD6CD78C60D329939514DA35E681B8D77CA645927FA70008DBE79592C3AB2FB280C8E1E9B1E99025CAC4377A3E8500E6A4FD39592EC71C5EA7A75B5694E990655453A11716DB172F105648A86A7BE2E5008C8F614C58108849CD7AF4C5A64994539D8E2D5269AE0B122BF2C5B20A911248AF42712E5453D8A9435CA2412BCD011E195C83243CCCBE34AE564360404C418A403C36C8D32E618B5E219BE06DFC31A6B1043DBE9C88EAC57E795C9BE019569D6D142438503DF2A2E4C4D0653115722831059C8D84C245063E98B00142301771D7BE2CC05766DB16C010ACA64AD0D08C595226D548A8AE2C486D890C77C5AC8519588077C2C084B26734EB954CA46C92DC826BBED8C249914B48F8C0FA7365824EAB54762F867F3DA0FF738E69DBFA66EF049E5B56777C797AA05CCBB53739B5C6E833F34BD97AE65479B8325C3651932C02ECA24E441AA0C88632688184315608BC47CB2D0AA4C8BE1D724AFEBEFFE719F6FF9C70FF9C7E1E1F96DE54FFBA3DAE4C317B6E2AEC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFD1FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88C69196127AED9570B9096DAC8649D09D80618F0AB26963050B571E15484A8697C287070AA610308CD41AF88C3C2ADCF2ACBFB1F11C78556B47C63E5C7B74C78552891B91200E27C7052A6FA64609DCD70213292D95E4A70A537AE0295CF6C586DB64789544DBB12AA13EC9DCF8E08CAD53386D49A129C6992B545CC68AA03538F6F1C6D54EDCB4A695C6D5368AD893CB9F4ED913BA2DB9A42B48C0DBC72A945BA324C34BB33248007EA6A4D328945CB8167013EAEA13EDD7BE5243951927DA622C90056D8D4E52609326436500120402BEF95CA34DB0C76F41D3AD38471ED94C8539B8F15335D2217F500029EF95172E269EA9A7A88E38EA2A69BE066237BA6E6207E2AEDE18B91134E238D3BF862DE26AF1C7CE9BF1C549B5AABF11F638B4C8A3D361F2C585371C7CBE2AD37C52364CED5796DE180B7C7226491D3F6EBF4640B3E25B27C3DEB4CAC864248095B96F5A65526D0508CFB78E479320503E887979D694ED9599B6844B5B86150DC699519338A6F6E802019592D802776D1D5280EFE3823CD289766E3403A65BC2B6A28581A15A0F1C7859892282961B1DCE3C2DA0A998985487EBD4E3C2C81B5D1A322B1E75A63C2B24BE49DCB9DBA63C2D6A4CEEFDE871E16B2859A1928183D699465145318DA477AF242A0D0B1390894CA0878F9B3A9A54115AE6C7049D4EAE3B3E30FCFBB7923D45AE78F2AEDC7EECDCE1C941E53571DDF1B6A16ACB3C8EC69CB7E3F3CDBE09ECE8B34774918D0D3C333625C1986E95EF97736B6CAD3BE5320DD02B9412064445245AF1193DF080BC2B0AB02464C15E1586363DF1B5E17F5F3FF38D029FF38E3FF38FE3C3F2DBCA9FF747B5CB03597B6E143B15762AEC55A6E98AACC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5572F7C55762AFFFD2FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88D98A8B7639072125B39544C3E78AB27797F75F462A948156A62A88A30C554E163F584E5F67154E27E0D0D075A62AC7648CA82701546E95381285F7C8143339230D1864153DF2252A0A08201195211D0C695078D7C718F34A39A48047C76072C548AEC8E69C0D41EB8AA63A7C144E647CF154CE175AB8F7C082B1A1F524141D4E466CE2CA34AB6F488246F98F37331B2066569157282E4C59269F6CC5D4A8F848D865726639B34D32D97EB09C865322E6620F41855508551B28DB289976100C974992928A8DF2825917A04120E2A7C70B743927B6EDEA003B62D88958F93118B64516917100E2CC287A7F113E2716B3156040F9628E144C4B45DF7C578530B55EB812228A1CA83205B5425E546C8499452E7E54CA4B70429EA3C32259072FDA39410CC146A005699021B01B4CD015400E4086C0532B7978AD46301452792351CB76CBD00A2163E54DB61BE2CC145A41B74A571660AC922A0DB6C5B6254516BC875C5050BF54E4EE695C581287961E1DBA62D64A02694468478E63E50CE058FEA24BAA9032B8865296CA5C9A28E33C7AED99D846EEAB57C9F257FCE4246D0C493B2ECDDE9F2CDCE11B3CAEAB9BE25D56759642C050140299B6C01D0E61BB139012C69F4667E37026BD010287AE5E1A951BF865726C8AE465005722DA15D5D7EEC2AA9453BD3AE2AEE2BE18ABFAEAFF009C6BFF00D674FC82FF00CD71E55FFBA45AE5A39349E6F6BC28762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD3FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF87EBA9D962318514F1CA2DBD2086568E74237E4DBE36ACCE37F5223DB1B543A8E2F5EB4C6D51AC57D3E58DAA5F50581AD0D76C6D5305E4C8057E9C6D5053A108C08DBC71B5405BAFA73F20DBD712ACF6C6E8AA54A06DA943912944170E6BC403E195A15D2E022BD5474DB0412C76F2F19A4214D07B658AA96FCD8835E7E3ED8AB258A65861DE9B8E98AA5E977C653C68C09A9C5053DB39C33A92A0E426CE2CC6DD8351BA517A663CDCCC689854B5CA6F9417262F56D06C8488A37F63944CB7445A791C0F0DE2A28A8AF5CA497371067F6567249C7634A7DACC79173E316496561E8C80F224E524B221964638A281BED930D914DECE765A7C35C2CD3B81F93569D4E2D91473B6DD3166146353254D29BE285850F2229B62AAE8EE9B7018AA6768F4EA3AE2551ECCA83C72B2C908F286AED909328A11C8A74CA4B7041484006942476C052A51824824532B21368F8EB5DF61E390219829824818053B656436028F80A82141AD71884996C9BC4AAA011BE588053355AA29A52A77C5B01560CAA37C5982879248DC30AF4C59C4A0165547206F5C524A3519284FF375C5AC940DDAA052791C5812C62F1BE02C054A9E994E4512A414BC1EDD5C8A1F0C8C53C4E6712A20540420AE66E1165D76A4ECF9B3FE724B4F79FCBB1DD2C615947D91ED4CDCE10F35AA7E736A49E9BD1CD0F1155CDA61E4E833F349C0A0E43E23E199D8DD7CDD52DF115A13DB2F0D4D9A93D32B93645408F888AD37C8B6856403BB6154482B403962AA8154FED9C55FD75FFCE35FFEB3A7E417FE6B8F2AFF00DD22D72D1C9A4F37B5E143B15762AEC55A6E98AACC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5572F7C55762AFF00FFD4FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF876BBE87315C8485CF160DE06B8AB2DD364F561FA31555941018E2A88452D01F962A955584943E3B0C5538B771C77FBB156AE1D1D4A8EA70C552A02928F9E48A197589AAD3DB22528D63C72A4202EA7288287AE304B1A7959E5A7BE58A9D5BCAD12123BD3156E5D4491C4B6F8AA8C37039160D5A9C50591E9B745A5515EF909B38BD1ED5FECFB8CC79B998D3AB14E57287DF282E4C5ED7E598D43A46DE198D939B918D92DD411A5DA35075DB289173F10675A5BC7E94629BD331E45CF804DE8CCD551B786524B221388549550763DF2D8F2484DA24E00649926D6DDB16C8A3DFA62CC23ADE35E35F6C59D34235E67DF15A44FD5C374C569AF4590EDB602B4BDB91C8162A251B7ED909328A83A353AE525B8210A357A6053C9B58DC6FC71402AA0B1143B7BE408660AF5661DF2B219828BB695BD51BF6C88E6C89D936FAE84E35392620B23B5BB8E48802462D81AB89929B362D80A5227ABB0E58B3057AA826BE38A928D8CA804571604A1AEDD781DF16B258E3CF17C5191CB91A8CAE41ACC964482E3946A9B0ED8C42789A82CE732B2AA1E20666E1145C4D472795FE7CE96F2792E591A3FB009CDC610F39A97E4E6BCE5EF64A6C17E1A7CB3658DD06A39A5F08063DF3371BAF9B7407A65E393535C4572B9364541E262C48E9916D0B789185555436D8AABAAB53157F5DFF00F38D5FFACE7F903FF9AE3CABFF00748B5CB472693CDED7850EC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFD5FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF87BBB5531935DF31E9C863A543921B61ED8D2A6FA4DD324A200070AD2A7AE1A54E75173071F4C0656FB44E0A54C34F904B0716006DB61A54B2E222B72A00AA93D7052A342468952C41231A543955506452491B50F4C2020A1A83D415385871325D3E4F8B8F6E38299DA6373444E4BD7DF0708674C7EE1E4956941B1C1C20208A4BE38BF780B57E8C076502D386904501E00134E87236C8458C4B2C92CA6A00DFB640C99885A3AC80F4E466635076C788B194190E94DFBE06BDF2066CE117A759CCC4AF4D865129B9708B35F2E446F2ED44BB007F67283272A317B669F69F5495668EA76037E998F236E4420C87D2378E1CECC3F972B21CA86CCC749B3A471835AF7CA65172A136530C25187C35CAF80368926D1C2397235A9ED92029B446D328E20C37AFB6165C29A4302A01427E9C590D915C1586F5C520A362015401DF167C4E650096A9AE2BC48A85CED418AF1225959874FA3015E25AB6EFD5853293265C2E3180694EBB642526622AA2C95C7C24D72A25B4042B69D3A49CB882A0EF91E25217B5A3FECA60E363C28792D66542C62F8475A6478923642B46C3A46D8136B6349C3AF08CF23DCF4C40DD0648EB9B19446B21A863D874C953113455A7AB1A0E47638D33135D7771E9AFDADFDF1A6CE341C127AA58D7A0C04536C668E499D76FC7032E26A5BBE20107AE2C52A9EFA490F1DA98A0C6DD691722CF4E4D5D864A301269C9B328D32131373F4D4D7AD4648630A192470DBC70BCC8A0DC336E87A53333144071353C982FE6C68306B9E45BF515F552363C53C7369843CDEAA443F147CC3A4CB6DAC5F5B5C03188A4603E55CD96301D2651658DB22C5550DF2CCB8389382C415515CB9A0C5771CA6452154283414C900D814E445180AA9C6C4B71A6C3224A53058C507BE438D5FD727FCE36EDFF0038EBF9063C3F2E7CADFF00748B5CCA8F20D079BDA70A1D8ABB15762AD374C55662AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AB97BE2ABB157FFD6FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8749E4AC447B652DE9347F131A77DB1557B6AC3386E9BE2AC8AE5C5C427F9A9B62AABA7B98D4027154C4C625607BF6C550579CA31C7BE2ABA08CC916E31415268087C5AD34B4E51B03F462D8134B97E51FD18B68415AA076901F0C05126A5B602A5464648097CC484653D32B6C4A963A927C7BE565B62B91FD30E3C4E218493CD1A4E532FCF2126507A969FBBA8F1198E5CB83D5FC9B6D5BAE9DF292E541ED92A18ADD683282E54026BA2C2EC39B0D8644B7443D0F4C8D782E5527222190C71AF31B641BC04C52104834EBD316F8A67142076F9E2C9305B72698AAB0B638AA323B7341B62C9CF6C7154C2DAD136DF154E560840F703014851692255F88019410DA95CF7766A08E601F1C810C9049AA5BC469EA8DBDF2B21B0228EAD1488C88E3938F872045325B15C4951591720C11C2E55455DD597B8C55DF5AB56EC98AAEF5ED88FD95F7184319206EAF2071C3D41926210735CC7140A43D77ED8B20C62FB52E4E141F6C5B137D2C92189E8C36C05B2298CAC1109C8B3B486F2EC28DCECB8ADB1A7D7218A5E25FA75C56D33B7F355A5BD393800E5B02C08B4DD3CFDA7A2D0381F4E49908D2D5F3FDB199B8C808E1B0AF7CBB1C9C6CF0B4A0F9D67BAB6BFB49B7826560A0FBE6CB14DD0EA30597E74FE7368325B6B97B7B04748A51C811E273638A7B3A2D462E12F9DA60F1BA07EE73371C9D76514887015A83C065D6E21E6B7204A40554FE1841D99A9C9D701296E28F7AF8E564AA37A0CAED5FD707FCE36FFEB3AFE41FFE6B9F2B7FDD22D733A1F48683CDED39243B15762AEC55A6E98AACC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5572F7C55762AFFFD7FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8739D15050D6994B7A56838C8A53A72DEB8AAACCDFBCF87C7154E2DE86024FDA036C551B6EBB6E37C551F1CA237523B763EF8AADBF40F1FA83ED1DF156ACE5E30D0D3962828D58E3937A5716B5748B7A1FB23A62D817CA6A287718B68528488CB15EF80A24AE5CB0C8C9012BBB4F877CADB12C8C1DC0CACB6C50EC84B1E58B0927DA3C6038206F5C849941EA7A38F526507AD36CC72E5C1EDFE4F83D39B95329939507AE9ACD1A2D3E119417371F2659A55BFA70F151DB225BE219469B190429D88CAA4E44427D6EAED3053F6720DE032686D01A6C698B604D52D1788A038A5328ED8F15DB6C5518966081B7CF1555312203418B2433E2ABE3623BD3155579F82925BA024E2AC5AFF5A8F81A380720437304BEBDB89598A49F09CAC8641266B8946E646FBF2B21B436BAB4F1FC21CFCF2B904AE3ADDCAF499BEF394B05875FBCA504E7E938AAD5F30DE29DE7A62A887F32DC471971354F4A610C648287CCB712CB4692B9260190C1AB4D31285AB45A818B30EB6E7753FC7B8AF6C5B1E81A7C451197A055DB0499DD35773908DB8DB22BC4F3ED56EE5A482BB0AE2BC4F2DBFBB732B166A11E18AF124536A2EE4297240E94CB20CE25080DECB25217600F8EF8934D9619058E9FA9F2462599BB1DE9928CF76899B67B67A56AB7118528294EC3336191C2C98ADE51F9ABE4D9A5D3EF649E127D0879A353BD333F164D9D06B70D17E7FDFAC4CD70B30FDF40E4474D86C7BE67E2C8F3DA914972492301EA50B77CCC8C9D613BABAEF4AE025B61BAB2004D3240ECCCB6F12D2A7224AAC0FC7E8CAC9558F3B76A7CB236AFEBAFFE71A8D7FE71CFF2049EA7F2E3CAA4FF00DC22D73610FA47B9A0F37B5E490EC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFD0FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF87FBA8BD4048194B7B1D95BD16A1EB8AAAC3FBC353F3C553112FA6A476C553AB12255A8EF8AAF9E321AA3B74C5549AE015F4D8EF8AAC4AD76E871414E6D7B138B5A6C801E9E18B6042DC6DF3C5B52DF50A927C701449176CFEA353B646480985DD972841A74195B63152BC1C8EC0E565B62A4D4635F0C430927FA42FEF07EBC849941EA7A0445AE51BB0EB98F272E0F7DF2E22D40194C9CA83D12CB99611F5DF6CA0B9F886CCEB4D0C38AD3E8C89E4E44597E9F0FF00A415237DB2A939116530DA8F5850641BC06490460103C31649B2C6B4C551491B6D41B62A8D446A0F871569EDCD09A6E7164817B73BED8AA1243C176ED8AA4379764065AD6A08C55874D652DCEC95381B9520D0AE08355241C890C9171F961E43464A8F97F66565B0233FC191B293C7E2ED954F932E88197C9A00E998CC12CB8F2B8B78DA5E05F8761DF156297F6621AD206DBBD31563176EC6328B0B29AF5C218C90964D289B743D724C0335D3999E52A548F8716619DE89680B863D716C6573968D2918DFF6A980A4A4924C4F20FB7BE4516C475754653C37AD6B8ADBCDEE74C92791A83A9C56D42CFCB5732CDC1622E09EB4CB22764893D3347F216E924D1F1EFB8FECC848A99BD2EC7CA9630AA82AAC7AE40163C4CA6DF4AB5800E2829F2CCA84940619F99FE5A1A8F937549EDE1065F4986C3C01CCFC52D9D36BA1BBF1A35FD2CD96A5A84338E327ACDC54FF00AC7363864F27AD0C6648CC52943D466C205D213BAF4C9B978BBD156E393D0E36CA489BB4E2A3B57204A1219A52B5C892A8749F91A57A6564A1FD7F7FCE346FFF0038E3FF0038FE7C7F2DBCA9FF00747B5CD9E3FA47B9A4F37B6E4D0EC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFD1FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88FE09E89206F986265C86217D18790FE1928CAD5640FE91DF2684C42ACA093B8C2A9DE95F01A1FB3E18AA6578547D8D81EB91B4A41229E7CB2064847C0EA29CB718612B2829FC7E888EAA37F1CBA835A26DDD016277DB225B0284E19CD17A65664DA103242114B30EBD30192D5AAE9FFDE644C9908B241CE489D4EE00E982D980C4F50B52AC59453DF06CD8024EBC91B89EF9125B238C1E6C93493FBD51DB2B914F000F5FD094ACC9C45052A731E45B601EE3E5621A401B7AE504B9B08BD5ECA14AAB22D189EB98B3951765860299FE9502D15996AD90E22DE22199E9F6D1FA9EA71F8CD2A7236DB10C9E1894B82474EF8B626B144ACE7E793114A611464B713D3C325C2153A8E3000DBA0D8E0E10AAAC0A8DBEFC7842AAB0F86BED8F085B40BF5C7842DA577708E2DC0531E15B62F3E9EF2B13C490712026D1765A5246DFDDED9512BC4C892DE355A7015A656496C125C88A29F08CAC96F8C95C01D29D72B2CEDC638DBED2D722634B4A0F676EC0D23049ED9548522987EABA7C6C5FF74BF2A0CA49626DE75A8E99C8B462314AF4A61848DEE903BD278F4708F511EF5CBEC32E109FDA69C435553E223AE3B278598E9903C34EC3BE1B09A4E652163241F88F5C8C9B211058B5DFED6FD6B9149800C6258DA4675AD47718B510A967A6C4CFF147518B512CE74AD3ECADD59961018904138AC4B2B49232B420500F9603BA69689A388D176AEFD71A452256FA9FB59206992716CF16A9A65E69B3012452C6FCA33DFE1399FA736EA759B97E31FE70E94BA6FE656B564578DAA3B3431781A939B9D3879AD6403C655A49EB34E794A5882DD36068336511B3A1C9000AA00074DB2B9158121176E55483DFBE52665CB8C6C29DF5C301B361E22A62C6E6766AF235C9B02104B38434069878583FB10FF9C653CBFE71BBFE71F1BC7F2D7CA67FEE4F6B9B087D23DCD079BDBF248762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFD2FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88D8DAB09F719801BD8DDC8A4849EC77CB2294B5C736AA9CB1531B69285636FDADB0A19143FBB5AD7A60554F53D45627B602942BA77F0CA8A143D4DC01E38C0D154FE02C621E19719288A362069F3CACC9B045308E2046FF007E5664D822A7731064000E991253C2A7A7DB7EF3A64789908B2BB5B6AF30456B8F1331143EA7A627A65A831E26C1160A6CF94D41DB6C04B6C62CA746D3099936AF8E5722A43DA746D302F134DC65132CE01E9BE5C88ADC5076398F22E7630F63D1A20F22A1F1CC69F376388507A3D9C3C19401F4641B87366D610D29B6F8B6C53A4401C7862CD31B789CB123A65A392A610C3273C2AC8228C71507AD3155EF18A53BE2AD32EDFC715413AEF8AA19A307AFD38AB696D19EC36C0555BD140360065549010B22D180F7C810C8158401F3CAC86624B3991B9391E16C8C9DEB0C4C5B4168DC8405ABD3299452C72F6F1199878E6398A6AD875ECAA5C90054E400A4F0D2053E371B77C3C48643656C6B5A6D4DB1E254E12260BB63C4AB5A195C30F0C902DB89239AD253CBF56499C9237B57491B6A16C5A24995AC0C083DF16892730C8D1EC72405A225182E881D70F0B2B51376A49E477C7856D512ED36DFDB1E15B649A15D1127C3FEEC0CB4FA0E6660D9D6EAB72FCAFF00F9C90B196DBF342F66238A4AC493F7E6E74E5E73561F394A156460BF66B9B2076745946EA7FC72A996B886BD42A72AE6E643925D7331634C980892493DCFDA51DB6C980C4A56CE49D8E4C06A7F645FF38C1FFACD3FF38F1FF9ACFCA5FF00746B4CCD8F20D079BDCF248762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFD3FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88D880E040E87B66006F492FA2F88803AE5914A1C5B7186BC7E2F1CB108781585C46CDBAA9C2ACB15E3684803738154955A35663F6476C05285594BC9C6B55AF4CA8A157D052E2837C8F567109CDB3AA808D8993688A6B0C44B0A7D93DB2064D8229EFA01635A2D09CACC9B0456081581F86A720649E15D6F6AC1C7A6BC71E26422C9AC6D242D535A63C4CC4532BFD3CBC068B534C789988B036D34C731F82849C789B04597E8765C654257204B121EB9648B18400509198F32CE019C688A82652A286BB9CA497371F27B068CA81D582D0F8E5122E7E3E4CF6CCF29D2BD3C322DA39B36B4AF3F84D17B62DB14D56A5B03364368E811011BD284E5D1E4A9B200402A389F1C2A8F49102AEDBD3738AAE3221EA31543927715DBB62A82949036C550F473FB471556457A801A82BB9F6C555E458A31549BD4F639021925B35DB80CA2DD189E8DE190216D45EFA38AD889621EA53EDF7C810C4C92A4BB8DA29A46958B28F8129D72206EB19A0D2EA607D53C9D3F9299618B68CADB5ECB7069E87A71D3E2343944E0DB1C9691DD7EF83F01C58577198F28B609B1B78A560C492483F6B299C68365DA2ACEDDCC82BBE55C28675676A0AA80BF1531E154D52C588E98F0AAE5B1707A75D8E4A21B71A12EF4F2A84AAD0F8E58CE4C4E6B26939A96E2F5F84E2D1256787D2B16319E52C42AD20F018B449E6F79F9A5E52B099ACF51BD4B6B984F16151BE5916B2692D93F387C822A1B5B2BF223254BC4BED3F363F2FAE24A0D6D9B7DEB4C697899345E73F28DE11F53D5D2A7A02C31A5E2665E5DD574C9264F4F555256A428208DF2FC45C2D46EF833FE7278423F31E36DA482653507A13439B7D39741AB8BE3F6565BCB84635556345EC01CD903B3A2CA374422214625457B65536B8849677605E86832500E4C521B8B97527E3CB00625262EEECC791DCD7260312B94E4C06A7F64DFF0038C1FF00ACD3FF0038F1FF009ACFCA5FF746B4CCA8F2683CDEE7850EC55D8ABB155AE683E9C554F97B62AEE5ED8ABB97B62AEE5ED8ABB97B62AEE5ED8ABB97B62ABB15762AEC55D8ABB15762AB97BE2ABB157FFFD4FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88BB53C866006F5971082E0D3BE5914A16E00488FCB2C42550D19E83AD76C2A98DBC844BC3DFA6054E2E29F56603BD3014A4515564CA8F3423C5C0420F7A65726DC7CD745704B8232B25C9AB6490DEA22A6E2B5CAC96C8C593433ACB1AEF9025B04535B4B70E188A1DB20649E14FAC6C55985464789970B281A7848C328C3C4D9108EB6D3DA78DAA2BB63C4CC063B71A3137205325129AA4EACB4A68DD6829824C4866305B32B2023B663C8B38B35D1A03EAA6D9492E6630F56B106109951E6E6C59D69DF100D81B073673A6FC4AA69D7BE2DB14E917E3C59A7D6B6C48461D0EF96C792A751A711BE155C57DF157703E38AB5F4E2A849BA62A82798462BBD71541B6A616B5AE2AC7F51F31D9C1192CC63A77C910D8C02F7F30F4BB763CB520A57AA93FD99590C0B179FF003C3CB167270BABC593DABFD99590D04A47A97FCE48793ED2A91852C47C27DFEEC111BB59953CAB56FF009CAA82DEE78DAC21A3AD1401FD99710C2390DA5F27FCE4A6BFA821FA8D89E0C09E407F665120DF1C858D45FF00391BAEDAFAED776C556BDC7F6663C839519BE91FC9EF3EBFE61426231805D4B961ED954837C256FA2AC7437AA9E3F4655C0DCC9EDB4C78CD48C3C0A9DC160481515C1C2AACFA79A834EF8914DD8D0379A79E1F7E06526177962A03963C585787BE2D1248D61963B1D453ABCB1B08FE74DB16893F32BF313F293CFDA8F9AB50BE8209A5B79A4668F8F402A7DF32314801C9A64C462FCACF385B6D73A4CF2D3BF13FD725B215D7F2EBCDF34CB1D9E893C751BB713D7EFC7657A0F977F243F30A7991E4967B343BD09A7F1C695F5FFE597E526B1A5DBC6DA96A0F34CAF5662D5D89E9D7251E6D1946CF1DFF009CCDF253680DA3EB11356474EBDFA1CDAE9CBA0D587E7F593C9373965D9DBAD73640ECE8B28DD16A7E07F1ED954DAE218BDCDC0124895E8694CBB1F26F88D9239EAE4E5A031921F8D065803595226876EB9301ADFD94FF00CE2FFF00EB347FCE3BFF00E6B2F297FDD1AD32F1C9A0F37BA6143B15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD5FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88D8294F845330037B52D4B29AF7CB2294AAF6BB8CB152D8D5830A547CB0B13C930854870DBD7C72122C2253953585ABBE54496C4A1BFBC6F9E441552641238567283AD7F86322299E306D98F967CADABF98AEE2B5B3B62C8C69EA01DB31CC9D8E385BEDAF227FCE2EC17515B5D6B32155900A293FB5BFBE5129B9F8F102F43D57FE716EDA2B988E9CF5403EC76FF89663CA65BBC10F25F35FE476B9E5FB932C687D193E1555ED4FA72066C7C10F3E5D0750B0B8F4E5571C4D0D7009A462A6616D632491014AF11BE59C4CFC20BCD9DC4428B551ED931309F0D012DB49CD59C50F8E094BB94C02636B1134F1C8711699C53368A452A791E9B60B6BA65DA0C94750C706CE442DEA763229E15DF289F3765879334D35C55476F0C8B7B3EB023E103618AA7D18AB0DB02DB27B16F8554F6197479330980DDC006A3C30A551862AAB18046E31545718986C82B4C585A57716ACD5E228322B691CDA75D716F8493BD32B2516F3FD674BD4DCBA4523A73040A1E99124A5E3BAE7E4DF9C35F467835BBB8977AAABD3F8E4F88A402F1CD4BFE71BFCE6F3D06AD732B576ABF5F9EF82D9D16357DFF38C5E757A97919DFF0098FF00B78B218D8A5C7FCE3179D43F22BCCAF4AFFB78F2639310E1427FD0B379CC48ACF6EBB1EE3FB720723891C459FF00973F203CD715C436F39F4A0604391B536F9E4253722185E97A27FCE37581BC59757B812AF2ABC2C6A0EFE15CA8CDCA8627D4BE51F22F97BCA10C49A3D9C5048ABC4B462808EFDF2A9CB67271E3A2F52B68AA828287C72102DE629D5BD9B4AA07877CB835909BC569E9815CAE4C0AAB428C0D08F837CA81B402424B733060D18415E95C2DC0B0ED474F6A973B835A0F0C5B0C424F1C216A196B4C5A6710105736314EDCC205E1B103BE0B21C59C2F9249756B69103CE352464F88B5F865298A6B78A5A450278D699602BE19661653F35154070DAF8659369F7D0DA144745FF4821547BE46CDACA1B6EC37FE7263C99179DFF2D64586D926BCB088C826A55C0E2C7AD7365A693A4D5C03F119A136BA9CF6922F131C8D191EEA48FE19B8C727439318B5194888DD21D890787B6DDB26402B080616EB44AB6EE6BC98F5C9844A21047ED1CB034C821DBBFD3930D12438DC9AE58D25FD957FCE2FFF00EB347FCE3BFF00E6B2F297FDD1AD32F1C9A4F37B9E143B15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD6FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF889B535CC00DEAF28EF9645528BA1C8E58AA10C60B8AE2A5181789C045B590982FF7669E191314829431FDE36532D9BE22D52D2C9F52BE82D233467351F466365C941CCC18ACBF49BF21FC950E9D6105EDCDB2BD003C88F9E611CAEDB1617D71FE2ED0B4B8E21385E286813C0E512C8EC71E057B7FCCAD0EF6EE386270A76037CA2591BCE165F7369A4EAD6CF2CC527122FC209AD32BF111E03C475DFCB0B2D424966B78946E69B63E22F80F329BF2DEE609654856A17ED532D195071525571E49BB86BCD0ED93191071A437BE567442CEB4206DB6113B6AC90628BA7345395F7E98789C5945329ADB8462BD69D71B6BE156D224E33818F137462F48B49887515EC32B917618850679A4C84B2FBE06D7A3E9CDBAD76C5594DB8E4C3154E6D5C89197C32D1C9984DE13571852886FE38AAAC7D3154C228BBF638A6959A21DC74C82D21999882380CAD692C9ECFD53BA0A9DABE1919288EEE8ADE6B65F4924EA29838DC8F0D092DACA8793C8013D1BC31E36631A5773F003CAF01FA4E3C4D831B1E96F2047DEE86DEE72139ECCBC2B496EF568492A9722A7E798A7228D3282B5C489EAC373561D1413959C8DD1D3A274EB7964B80D2C859ABB2E40E46E1829E8D6914CC1226B6E117FBF48C8F1DB2963A65B6D6E11176AED96C0B5109D4238A82075CBAD810ACFCB8E5732D6425CED22568763D72B896043A38A39012454F8E49B6297DC5AF21257A0FB38B7249FA3958B6DF4E2D3916C1A423ACBCBB1DB22538B1F131ED53CBE8FCA87AE20B6F82C364D0258A60231C93A93938C97C047C505C5BAF43B6596BE026B6B0C976D645BED452127E583AB899B1D3D3AD2DC6ABA76B1A6CC39ACF6C63507DD48FE399D84D3A3D5C2DF87DF9F7E50FF0003F9EB50B20BC6970CF4A7F3B31CDB6296CE872E3A2F1CD4855D641FB4BBE650DDC7E4C4AE362C3C32C6322969FB67241A64876EFF004E581C7921C753963497F655FF0038BFFF00ACD1FF0038EFFF009ACBCA5FF746B4CBC72692F73C28762AEC55D8AAC7E9F4E2AA58ABB15762AEC55D8ABB15762AA98ABB15762AEC55D8ABB155CBDF155D8ABFFFD7FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF889B360BD730037A3E4A1E9DB2C8A529BB42C76CB10A50AF165A8A625211B55C622D8494E52786C77A8C998ECD60EE83BCF8AE9388A506F4CC2CFB39F845BD1FF2CB493A96BD68047CB8CAA6B4ED5CD5E59DBB7D3E3DDFA93A3D8B69DA6DABA0F4D1211555D8663176D8A2F2BD72D751D7353962B3321084B1504D32893B1C71D952DBCBBABE9EA26657046F5EF98F26FE009EE8DE78D5B41BD1CCC9344D45911892001DE99595107B868DE79D1B5B31AC92FA5310014069BE36930658D6A8E1DD40E128F81BC72C69945299F4A421AAA0D7C46581A0B0DD574359012117A1ED9312A6A9C5E51A9E83C2524201BF618789C69C58F5D69DC410476C789AB85274B5E126DF0D0F518F137C22CBB4752028356DFA9C376E5C0507A4E974053B7F98C2C9E83A6CA15803DA98AB288E7008A62A9AC2E480C3BF5CB63C998E49A42E69D4E14A395BA62AACADEFB62A9BDA5D536206D8B35F7373CA945A5720B4840ACDD09CACAD221232BD6BF3C84CA62375D2AF53D0E637139A12B9622FF0D49E5B6F8789B404A2EB492CA69DB071338B1A9BCBCCEE47106BED919CB66D88DD47FC2E3FDF43EECC4B6F115787CB8D1C8A40200ED902590A661A6E841543155A8F6CA8A788271E97A478D6A3C3082899B08E801D854E5F02E3109AA82A0153990C4869A471EF954CB590A2D2B32B0200C840DB54C25A4B89050903C32D6714C963F5A3DCD0A8DB16E4B64B295492010B5C5A72289825D8455A7ED655334DDA734BBEA32CA28687E782DC9E2583494460B201C9B71F2CB014F10448D060906EA3EEC9028E25F1796914F258FE9196C5C4CC2D36B6B45B53B2B03DC8EF97E39EEE9F518DF9A7FF0039C1E5223518FCCD15B8F4EE295217F9797539B2C32743A8C6FCE1BE9B8832EE55968066CF13AB9ECC50124B549CB4B594249D4E48354940F4CB038F2511D4E58D25FD957FCE2FFF00EB347FCE3BFF00E6B2F297FDD1AD32F1C9A4BDCF0A1D8ABB15762AB1FA7D38AA962AEC55D8ABB15762AEC55D8AAA62AEC55D8ABB15762AEC5572F7C55762AFFFD0FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88089A86B9801BD338CD40F1CB22969E30C32C420D8713B6291CD6D4E4A00B1C8B58D46E69979AA681CD40FC7331F019ABD4BB4D353E9EFF009C74D21751D692A952B535A78669C9DDDDE101FA397F6CB6DA3D360563A01DF2120ECB0B7F96FE5B8F503777862ABD08AB0EDBF88CA661D96309BF99F4A3043246918E9D8663C8373C0752D0F50796436F096321A37C35DBEECAE99458DCB65AAF96E48EF4A4B50C0D02B78FCB101127D05E48F375D6BB6612E418CDA850BCB626B4F1CB0071E6CFEE66658C7BE594E34C149A525D1AA3AE46450030AD4EC83B31A6F91DDAA51613A958D0F4A6DD71DDA845864B6A56423EFC6CB7C629EE92854283D6B9747937067DA79A32E4959BE9FBB8FA31564A83718153C85A8A9F2DB2D076660A6B136DBE1B4A354EC3F1C2AAEA4D3154742E148AF862DC119556C8324C6DE256A74DB2B28559630B95CF92421D979661B900A87A7BF4C0CE25B30F2ED8B60696C4160481B74C05B224DAAFD487F2D7E8CACC5B812EFA90F0032042D9575FDD0E23E9CAC861C454DE124FA9D7DB214CA3225673F4CF4CB62C885C353111AB6E3A65CD65506A91C9DB2120C0B6F771D36DABD7238F9B44D0E675AD69972628BB797D571C7609D716F64B58A587871DE98B4CC162B7F21D31F8769872194E45C7612F87519A46A274F6C886EE229B44E646066D9874F96482F116416C22E23A64D788A756F2AAC4151030AF5CC989D98917BAA344D37488610E0E78BE6AFF009C9CFCBF4F347E5EEA73BC5FBCD3E2661B54FD963E199D824E83541F83FAA5A1856F216D9ADA5650A7AECC7B66EB09D9D0E6D8B0FEA58E5E5AC1D9072F7DF2516B9287ECF5ED96071E4A2A773963490FECABFE717FFF0059A3FE71DFFF00359794BFEE8D69978E4D279BDCF0A1D8ABB15762AB1FA7D38AA962AEC55D8ABB15762AEC55D8AAA62AEC55D8ABB15762AEC5572F7C55762AFF00FFD1FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF87EB35F7CC572138A74DB2415A634196054B67900E44E487355B1CE38D2B96EC8282B9AB74F1CA665880A912F22CBDE99ABCE5CCC5B3EEAFF9C4EB113DD988815E25AB4DF6CD69767A626DF647999435D5A5BAB1D880403FC32B93BDD3F37B97962CD6D34832280ACD0EF414CA245DC621B30AD5A77B849A302A6A77CA2459494B4AD209812478C115DC951FD32316A1CD3AD5F49D15B4D91DCC3EAAA134655EB4F964993E64BFF300D235631DB30085C8F82806C7DB1453D5F45D7E4D52D54D6A683F56147084DE0BB3C9C4B4DB619645A728A49EE7799DFB1E992A68A627A944199EBD4EF8D2D30A9AD944BF3C6928AB440B28A61566BA79A30C559A58BFC43E8AE2A9F46FF10C55388EE00551E191BDD04A3A3BAA8EB8414A363B91B6FF003CB1B02312E47CE993661328DEB43E3DB16E099C4E38FF000C82A2606A656528D2A5C0A75C84D5BF4CE6310DA1A2877C890DB169537E99590E405754DC572239B656C98C511A74AE4E419C10D7111A1F7CA64E4001085780DFE9CC793090097CD7263A953F17860873681CD26B8D4E58EB5A6F97AC92A7BD9A405877E9938B4C9AB7BC9D09CB29A095433DDC8E4AD7010D68F82EEE0515D6BEF819C5368272159E9C69DF16F82223F307A4425457A62DD1016DF39D5F871FB4A28299092C804A6386EB4B928C84A9EE722C53D86EA3640CFF0068E2A98DBCF0D462A9EC13D221C3ECD76CCBC5C94A6B67744115CB1C2CE16F9AB4B1E63F2E6A1A4900FD7A090014FF00248CC9C45D06AE0FE76FF3A3CA4FE54FCC6D7347652AA9348C05283AB1F6CD96293CFE68EEF03BA6FDE483A10732E25A2B648E7152773BE5C1C69F35315000AE6445A96E5A036C407F661FF38BBFFACCFF00F38EDFF9AC7CA3FF00746B4CB43833FA8FBDEEB8B1762AEC55D8AAC7E9F4E2AA58ABB15762AEC55D8ABB15762AA98ABB15762AEC55D8ABB155CBDF155D8ABFFFD2FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF884B31D2B98AE426E47C3920A8694EDB6F9605482ED982BD01AF864952E86670D435F961B414D50730396D909A0370370B8907B7539AECCE5637DD7FF388F76A359642E05617A0AF7CD74C53B4D3737DAD359B5DEB30730410C280E63C9DEE9F9BD5EE3513A558B2745F4F8E5327718B9304B6D4629D679188EA69BE63C99496DDF9DEDB46B231B952D355547707C72316A1CDE15E63F38EA77F2C896933047A8A2939364C22DF48D42E6669E7E72173553D7157A56853DCE9A1622080682A715672D70DE9A3AB862FB900D72D838F991729E56E186EC7A81D726D2905FC25CA9FF277C558B5CDA9049A6D8AA95AA71931565567B32EF8AB2BB37A11BEDDCE2A9E46FF0010A9C55358CD40DF21D58946C792641191E58D811B1D6993661368998003C316F4D6273415E990423918D4532B294EED8065DF6F0C849513C465242789A2828720437464B553C7AE4087263255A002B4E9910376CB454520E3D69ED864DD0536219C0EA3C7289736F082BB1C50D3AF8E63C98C986DE4AC3950EE0E087368EAC3758BA99281493F2CBD125897130B346FDA66A11938B4C9111C92B15A6FEC32C0E396596B6D298D0AA924F51896B45C92C36A959402E3AAF7C8B6458E5FF99A0A18E21E9F0AF3AED8B7C5875C7984090BF30057662716F8A79A379A8C328726A95EBDB2052433C9FCC16DA94694515EE46458F0B514913505413E0315E14EED0C408E5F0FCF6C53C29D2CD1A2715229D46F97E33B302AD6F78A1BA81F4E4F89AA70B09B5AEA9CAE91030658C153FECB327149D36AF13F22FF00E7387C9B168FE686F3446800BE6259C0DAA6BDF3618E4F37A8C745F9A7786B7136D4F8B3638DD7C85256E09ED9787167CD408A66445A9665A1BA2FECC3FE7177FF00599FFE71DBFF00358F947FEE8D6996B813FA8FBDEEB8B1762AEC55D8AAC7E9F4E2AA58ABB15762AEC55D8ABB15762AA98ABB15762AEC55D8ABB155CBDF155D8ABFFFD3FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF884B33D37AE62B909B337C24788C2150E57E1396854A665FDE0C4AA4F29A4D5F7C802828E0F545DFC36C24A02E97EDB53C33132072B13EABFF009C5AD5E3B7F345BC6ED40411BF8D735F986CED34BCDFA88F12B6A36578375E20D730A4EF74FCD11E719DCE8F2CD16E6BC49CA64EE317278326AB710C14E5BF2E998F26526317AF79AA5F3210480A29918F36A1CD97683E45BBB86599E33C4D0D48C9B27A641E5FB0D360637340C47C18AB1BBFB6B494B7A43A74C550FA4A869DA222841A0CB60E3E6667058D09A8EBBE4DA503358061257F9B154A27D257D36FE98AA4034E546229DFAE2A9D5B5B22815C5536854290A3A0A62A9E47D302A2524A151E191EAC4A670CC7EFC90649847374CB1B022D26AE4D984E6396A06FB5316F098C6D5A64109A44C2A32B294D216A50D76AE4648298FAAA76C890805BE55CAC86D896F9656439112E26A322DD12A65C0EFF003C8C9C9C6D7D657A65126F086BA9818CF8E63C98C983EA32F10EC3C7A6087368EAC1AF2F19A4A7865E8936B7C562A1DF261A648ED37518849CA4DA996071E48ED7BF31F4AF2D69F25D4AEA0A834AFB62583E6AD6FF00E7226C2732CF030660C40A1FECC8B38A3BCB7E7A8FCCF6F73717527A224A7A5BD2B8B7C53237D1CC5E2AF348F7AE2DF1627A87E63C76529B0869198F6A0EF902D8032DF2B79D6FEEDC0E478B7BE4534F6FD0F5096499096DCE2B4F4225E5E1F175C5691261936A4DC76E95C9034D13E6EF425FF968FC71E26C10B08CB698D9D02B739240791AE64E29381AAC3B3E3CFF009CDAD163D5FF002CA3BF02B25A30634EBB54E6C71CDE57578F77E2BCF2195DE43FB44FE1B66DB0F27479051428EA3E79921C39A1E41B9F9E6445A90A577CB83745FD98FF00CE2EFF00EB337FCE3B7FE6B1F28FFDD1AD32C7027F51F7BDD7162EC55D8ABB1558FD3E9C554B15762AEC55D8ABB15762AEC555315762AEC55D8ABB15762AB97BE2ABB157FFD4FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF87DB371502A2B98B4DF69C13D01C90554E3B7D19312094A275F8FF005609482B1EB8DA6F964225055E3625900049F0C9A014D110167327C238EC4FCB31F240B938E41EA3F935A8FE8AF31DB4AB2846332802BD413D7303340D3B3D2C85BF5FF4FBEFAC6876376AC1C7A43E319AF90A77DA722D34B906FF00CB573DDC3120663C8BB9C4367CFB35ACCF70B0202CDCF751D466392999A7A8E81E5AB7F53D69286408A48F0C62D319025EA16D3456B0085221D280E499DA4B7BA7C9A99268691EF418DA5E5DE60BA83439191E550D5FB24EF82D52DD0754FAE6A30B28E20FE396C0868CA1EC8564540C632011B31193B684ADC1624914DF738ADA94F1A985A8C09A614816C6CDB92C4D3BE282295046CBD01C55150EC77FC7154F22208EB8AAB2005AB9162533840A75C21923E351B64DB0146C69B64EC3208A89CF2A5698DB784EA17D86F90B54D616AD28722529AC6F414272242AA2CC01153898B0E0368F4DC546FF002C818B6C415F46F7CACC4B9116B953A9A7CF20634D91284B89000486195483978C84A4DC7C62AD4F7CA241C805B966AA1DFB65120C64C33569F843235413D86463CDA3917973DEF2BA615AEFD32FB6264159AF9A12ECC85815D864E2D5229249E6048924DC230AD01EB9686821F337E6C6A3ADEBF6F1D8D8A4A07A8DCD97B838086145E59E5AFCABD62E21ADDBBAF26E546FA0F8E459C43E91F2CF96E2D234B68AE18C92C207A2ABB9F7C69BA3B2AEA725EDB594AF65138918100537C5B8178FE9DE5BD66FF547BABE57ABBD547B64241B4483E92F2CE8A6CE18A886A06E70527883D934189F9AB73E86871A5E20F4069278F8904D3C7052F105C6ED89AB392DED80DB44B9B5F5BFF29B23BB91090554BE113C4C5AAA55AB5EDF3CC9C4D3A88D8D9E47F9E9A41F30FE5579801AC92C51B32C23AD02935A66C71BCAEB31905F8377711867B8848A18A46047FB239BAC3F4BCCE7152418076DBBE65C5C19858EBB9DB2F8B4A1580CB04806E8BFB2CFF9C5EFFD667FF9C76FFCD63E51FF00BA35A65A393813FA8FBDEE9858BB15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD5FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF874B265328CA593246507853C72259C513C07139596D0935D28562721D5279311BC929375CBA1C9A24BE0B90268E872F8F26013B9650F1EE72126FC68DD12FDAC351B5B98DB8B472015F6CC2CE36761A73BBF5CBF267CCA9AFF966D6D24903148C0A66AB287A1D2C9EF3A5AA3C9FA30AF10FBD735D91E8714B6615AEF96C695E6084C43E0998548F7CA29A739B7B3E89E598CC6B3247EA19D0034DE996403878B9B2EFF095959C5F5ABB70AA054A9C910E482F39F3AF9B340D26C192C028B85560E57B900D32B21982F8EB53D425F345F4CD2A91463C09F9E565B014C740B2D46CEEC39AF18D870F964E0C66FA4B4DB8379651ACB27C400D8E5B17166956A21E262886AA456B9634F54B2332383B6581C8835E9301B8DF0144D690475C0C694FF6CE2B48F85C01F2C569188D520D698AD2650B50628A4D633D314D23636DBE58A8B6D1C73A62E60E49A44FD37EF8A53BB6906D8AA64241B6298F36CB0241CB9C9149B5ACC1471AD2BB656BB2600823AE40ADA1A7038B37865534DA493C828731CB740A4B3C94AD3AE51272E054DAE1BD322BDB2892C8B17BEFDE73E7D32B71E658826968D7264A7535C21A2D327D2BD40401D475CC88AA42FE528A69099146F99015747E43B157E7243EA03D0787E38C92194DAF9574C8900FAA8DBDB20C9CFE5AD3CCA812D40F1DB154F57C91A75C45536C3953C3FB714A4375F9736C2559628F804EBFE75C8948445AF97520223A74C0A9FDBE962CF7036AD4E2A9DA32BC746C550727A49B03912CFA2025B845DAA3DB20D40EE827B9574702868466463E4E55EC93F9C6E3D6F27F986253F11B4947FC21CD962745AE2377E0879810C7ADEAA87AACEFFF001239B6C3C9E3B55F594A17F8E67637026B24077FD796171D02EBBE5526E0FECABFE717BFF599FF00E71DBFF358F947FEE8D6999D0FA47B9D7E4FA8FBDEE99260EC55D8ABB1558FD3E9C554B15762AEC55D8ABB15762AEC555315762AEC55D8ABB15762AB97BE2ABB157FFFD6FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF861D3DE432034DBC72964CB565278537DF2259C51C6600152C2BE19516D093DDB13CBDF23D5279308D403ACA3623C32E8726892193D65742548F039911E4C03258F9B415E276CAE4DF8D49039755A94A1AD7E5989945873B0BEE7FF9C71F39AD95CC3652DE0EC3893F3CD7658BBAD34E8BF49F4D9C4C12F512944AAC9E39AEC90779872A6B75045AA442EA420CF17D95EFB653C2CF24AD9FF94B596B3B6953D1FAC49C6853BA8F1C9014D111458679F7CD173E94886630F20691FDF890DC0BE62BB6B9D42E984E8E6366F858F7A9C810CC1645A779360216644E04EF9510CC1640DA298978C49CDA9BD30C42C98F1D46F6C2F56DDB946A4F4CB22E3CDE84B492C83BB0666DF2D69EA81876276DB261C88372321620900D3A602C8A0E414DFB604521F73B8FBF15A5652C3A0C5691F1F2A2FEBC56933849A5295C569348C9D85715A46AB506FF004E290162960DD3E9C5BC724C627A002B4F1C529DDB38DA8698AA6AA4F615C5239ABA1EE72E6DB541280CA396F5DB2056D324B903E127E2CAD6D7CF23189FC29D72A9A82C7AE255E81B7F0CC72DF0293DC39505A9D3289B95028069DE9D0D3C7289A494AAE999D08A6F5DF2B699157B5B55600D37C21A93AB6B3ABD38D76DF3222AAB3D8AEC547CF3202A360B3429B10580F881C64C8223EAE9F6792FCB20C913069A240EC08057ECE2AEE735BBF02E062A8EE64C4C18862DD32254242E8166AB0A6F812A978C161AFE38AA412DD98E062AD52062AC4DB54B862C0D46E72126CE88492FE43B16A6443472288B5B8E714A7957A664636F32F4A035894C9A16BEA4D57EAD257FE04E6CB13A0D74DF86DE6D503CCFAE85DC0B96A7DE736D8793C9EA0DC98F053E199D8DC19B9CAD3AEF96171D06E2A76CAA4DC1FD92FF00CE2FFF00EB347FCE3BFF00E6B2F297FDD1AD333A1F48F73AFC9F51F7BDCF24C1D8ABB15762AB1FA7D38AA962AEC55D8ABB15762AEC55D8AAA62AEC55D8ABB15762AEC5572F7C55762AFF00FFD7FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF85DD35C96DF2964CB6023E1F9E44B20BA47FDE1DFBE5526E081BC7A2935E8323D527930FD45CB4887BE5D0E4D1253673CE1073223C9806516854C237CAE4DF8D12618E343336FDB31E4E66366BE45D767D175482E623455606BF7E61E58BB1C137EB17E5579EA1D734AB485E60D23280457E7EF9ADC917738723DF2D678ECAE638E75062946C7B6F94F0B9B1DD1535D496978CF6BF0C53281B63C283B21750D223D6007B800D7C7224282803E4ED387A4428AAE4086C05192E8F15BC5C621B814C810CC1632F697AB3858A22EA7A90322366576C7353F2BDE5CDCA4E632287241A26C820B0921B658DF7232D691CD4A5B431C6C476C9872209210DC8961BE02D94A72313B605E15200814C5695D6BBE2B48D4278A8F6C578531B76E9B62BC29B420938AD261E9B1FA714D2F119FA462D815D63DE98A53680D0818AA6F149414EB8AAE6980D89CB99F12D5605948EC6B5CACAF12A7D6292EE77C815E245CD755888F11954D416352CE7D43ED98E5BA086B89B92F1F1CA66E5C4A5D24C146E731E4A4A57713165F8776AE56D5229B69DCDA95C218B2AB5421AA4F514CC88AA37EAE5F71D33202A8C917A2373C6BB63264103FBB06A64A78E4192610DD451A37192BE3BE2A96DC319E4E4B21A0C551714AF1B202D514C894847CBE93A87D8918158F6AB72681074A74C55894D73C636538AB16B9999559972326D1F4A4C2EE477A1AD322E393BA716F70638580EAC4664636523B286BB2341E5FD79D8F10D6B21DFFD439B1C4F39AF93F11BCC8E24F30EB0E0D435C3107E939B5C3C9E6729B293667637126A2CB5AE5A5C7502BBE5526E0FEC8BFE7183FF0059A7FE71E3FF00359794BFEE8D6999D0FA47B9D7E4FA8FBDEE79260EC55D8ABB1558FD3E9C554B15762AEC55D8ABB15762AEC555315762AEC55D8ABB15762AB97BE2ABB157FFD0FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF85EB109D5771E394B24EE19497451D3950E44B208D724C840F1CAA4DC1037B50A4378647AA4F263B7B18AC6C72E872689206EC51A2653D32F8F26B08F82E48A440FEF295E39093918D3FB23F595759AA225EA7FCAED94172E299412FD5A2223FB75F8328C9172B1CA9F48FE507E663685756D0DE5D985C90B1A13B577F7CD7648D3B4C3983F4F342F325A6BDA35B5C3DC235D7006300824FE398C767698B202C860D46692358E54A18B704E0B05BA62D35B6BD77DBA0C890C63128A79D8107964086D102AC932B00246DBB9C898ADD2296EE2B643E8C425E5BB31ED95914CE3BA167D4A2991B946108F6C431940B13BCBC049111AD32624D3E19B4ABEB13382AC2993130DD114974E3892186F8DDB6092041DCD46D8AF12E6EA4D36F1C57897091456A715E2565993615C578C2656CEA69EF8AF104EEDA4407738A6C27B132151BE295540189A62CD1023351B7D38AA24232D0914C55148DD29D31559373AEC32DB544DB9A0F8BE9C812869C7C7C874F1CAC94B6F229000395CCDA84AA68DB996A6DDCE63B7C36414CE95A577CA66E540A45792D09DEA331E6C88B41C2FCE4006E7C32B6B9448DD9259C81283A64C45AF8939FAD3715E0475DF2E0BC4135B7BD2A9566CBC49788295C6A1137DA3CA9D4612CE26D8F5F6A9044A5AAAB4DF761FD723C2CE982EA5E7AB3B105566524D796E36FC71E15A63C9F9AB6B1D47A8A5BE63FAE34B4A4DF9AE92238128592BFBB507AFE39190544695F99324B308EE25A027615FEDC8D26DE956DA8C1A8C0662D56E831A5B63BA93FC7C23A927B531A543456723C3FBD4A313F86464D8262A90ADA70462426F91693024ECB5ADCAA0929448D8733E19763906194F0879FFE736BA343F26EA571EA7A69776AE96EDFCCC54803EFCD86298797D76404BF1AE617524D2CB74BC6791D9A415AFED1CDBE290AD9D1CE24EEA7C18F419990C81C498A5AE8C06E2872EE305C7A52E058ECB5CACEEDC1FD8DFF00CE308A7FCE35FF00CE3C8F0FCB3F290FFB935AE67C3E91EE75D93EA3EF7B964983B15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFD1FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF85BD3BEC652C938B6FEF53FD6C89641399500ABE5526E090DF3B32B11D40C8F549E4C7AFDE4E31FE397439344905217668C78E644793584C2C406BA27F9475CAE4E4637A6796B49FAFD95DBA0E455AB94D5B951E4C7EF266B5BC6B775A50D304A2CC4D7C26EBD7496194C7E97C48D5EF985931B918B23EA0FCA5FCDFD5B48BEB6B6D4EF19AD9481F131A537F139833C4EDB06601FA51E59F3FF9775DB2B764950C8CA3910457F5E53C1C2EC6192DE8D0C7672422789AA08AED91B72E050F34C84A88C74FB59025BC6ED2C8DF3F0C899354A289496A8CBD2BDB21236CF0C50922D011E390A6E314BA4B22416A634D44255246633BF638D3021033905B7F0E996C5ACA0682B5C92AC734247E18AA8337BFCF1572B74FD78B594CEDA6A0A62D914EADE652462CC325B6605462D89B4282A3BD71668EE031558ED8AB68DD3C3155772A77C9AD2989950100E56534A46707A9C84969A1254D474CA8A40DD648F5539516D8A4B350354E5126F821258048390DC0CA26DF14B638945C71E5C4D3AE463CD728B8A6358E05E4641B75DF2C70F850ADAC5B16E0660BC4D6B5C9C53C0D4FE71D2ACA2224B95A8F7FEDCB578581EB3F9B1A3DAC4FC640C4D42D3C7EFC945B2029F38F9ABF379DE597D19DD63A9E95FEB926C7906A1F99CD71EA52E9AABD4127FAE2AC557F301DE46ADD356BE3FDB8AA656BE75BD915E4B79CB2A1A36FDFEFC8C9059D7947CED24B7F18BB6661C803D7FAE455F61F973CE960B68891EE0EED5F1C559347E6182E6752B106A9C55939B95940658F8823A64486A3CD0CEF5AFC19590E4C64A2FE9B2FA4C2866EDF2C9C22E0EAA5B3E40FF9CA7F308B7D046911BFC71A9F86BF3CCEC71793D61DDF9A864E681D8FC4D527375861E975929521B91AEDE399020E26492E33A13C5B7236CB40A68B4D2CE28A4EAB9600DA0BFB03FF009C6A017FE71CBF2000E83F2DFCAA07FDC22D73363C83AFC9F51F7BDB324C1D8ABB15762AB1FA7D38AA962AEC55D8ABB15762AEC55D8AAA62AEC55D8ABB15762AEC5572F7C55762AFFFD2FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF85CD3C715A1EB94B24E228DC303B75A8C896514F44323C058D3EFCA8B70499EDCB24B5A647AA4F2492F638CAAFF91F6B2E87268925A5E07F8D2B48F63F4E6447935854B3E4B73327ED15247DD95C9C8C6FA0BF26AC66D5D2F6D22512486A287A6541C8E8C6FCFDA1A586A5710950B75093EA0ED936B32A79F192E1220A4D2A39291954A1698CD562D4A485158BB2C8A762329389CFC59DEF9E40FCD2BDD0960334F2B46E42F52694FA7313538A83B3D36A1F767917F3C6C350B782092EC06A00431A78660183B5C595F44693E60D3F558D7D39939103BF8E53214E7C260B295B66E21832303D286B94CB666775DE8488EA781A1F6C31DD944D35246EC6A23603B922992A64648A11A98B8820B569418D06B24062FABC2D683D4996887A531A6B25884B751B92C84D0F8E16050F57FB5514C285BEA57BEF8AA9B9F7F962AEE42837C5ACA2612716C8A3A17756152298B30CB2CE71C455B16C64115C28A55A9418B3470B943D0E2AE3206E877C55B57A0F7C5548CFC07C677C9B6D20649CB37C26801CACAAAC659B71D32125562DC76AEE72A2AB7983515DF2A2CA2955F3D15941F88D29944B937C1A8A4021F8CEF4CA26DF1631A9DD7A3C9D1A86B4C8C39B29724A9EEE49E3203354E58D54C4758B3D4562F5226DCB5363BE4E2B4C2A5D0754BE722494F1EF56396AD05A7C8B6654FD61CBB1EC7A64A2B4935E7E5C79767564907C4C3C324AC0F51FC93D2262CF6E7883526BB62A935B7E45D8FA9B9A927AE2ACCB4AFC83B510CCFEA705E42A323241677A0FE53E83A5C81A62A597C722AF51B0F2BE90CEA96BB1514A2F4C55153583E99708A895DF638AB2386FDFD3459051FC3034CB9A2D6E19876C8F0AF1D34D342CF1CA4F1FAA2B35D7CBAED9918A3BB81AAC9B3F327FE7257CD967AF79AEF2D74D9DA48E0E4AEAFB6E2BD33638F1BCDEA4D97C82C5D763D3B66E30C7D2EA66511000C4572DE4E24CA356D6126BFB44EF86D880C92C2CE20061E26F8C5FD757FCE3780BFF0038EFF90AA3A2FE5D79580FA349B5CCE87D21D764FA8FBDED19260EC55D8ABB1558FD3E9C554B15762AEC55D8ABB15762AEC555315762AEC55D8ABB15762AB97BE2ABB157FFD3FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF85BB6F848AE52C9904352B5F0C896514D3D7E36C77CA8B704AE3943AC9BEF91EA93C921BBFB2FF004E5D0E4D124854D2198FF94BFAF2F8F2601358471B966F18FF0086424DF8DF5BFF00CE24D8A6A7E63B9B6715564634F7198F234E544585BF9F9E5A934FD775396342055B7FBB1136B9C1F3100C614E4370B96036D06C20E54F8078D72756DB09334D247FA1C629B9EF9467C761CCC597853D827BFD3254B8B6BE642A6A141CC09E27698350F58F2A7E73EBFA4DC470CF3B988951CABE14CC49E276F872BECDF23FE7858DD476EB3DD8694815527E5ED9893839A26FA16D3F306DEFE28A55911380A28AF5FC32318A99D2723CCC6F10233A229FDAC970A0E54AEEB5C834C9030BD578C8E4C6BDF1E16A395E4DE74FCD485A64B586753DB63FD98F0B039103A66BAD7D124BCEBCBC30726C89B4F45EB1A2F2DCE2CD1092357AE2A88F888EB8AA834850D3C31605562B923BE2CE2895B86AD6BD716613AB4BB7000AF5C5B03238AF8FC3BEF4C59A651DD934DFAE2A9925C57BE2A89593E1FA314C79A065763BD726DF4A22BD7E9CACAF0AAACC13BE424BC2E6B8AFC43B6545045209AFB8BF5CA8AC50571741DAA4F5CA64DF04BE7D43802AA731E6DF148E59BD77A3FD9AD4E461CD390D04F6CCD998C291BD32C71B8D4EE6D2240640BCD5B6E3FC72617898FB58A732E4045EF962F1A51A8CB688AA88FF001D77C9C59C656C3A7748E4E6D27C35AE49938EB9A728547DC8C55522D734F520C7154FCB154C63F30B49F0C44411FED29DAB91920A5375AAF2B9553217A9ED9157A77945B99568C1E05A8D5F1C559B798AC80B713AA0E406F8ABCDE3D44F221CD181A53080E3CCA6D1EA238F5C20346495060DF999E7087CAFE5C17AB2859EED1C15AEFD08CCCC31757A89D87E54F99EE6EB5CF30EA3A93312B2B311F4939B5C50D9D266365881B52546D999195075F38DABDB5A9EC3194DA2504F60B08D8AF8F7CACE4651C4CBAC3490C071E9E190395CA8627F58BFF38EE9E9FF00CE3F7E45C7FEFBFCBDF2C2FDDA55B0CDCE23708FB83A3CC2B24BDE5EC59635BB15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD4FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF85884F361C76CAF8536C96DC111904D6A301816424D4A58C5C075A65462CC6441C41E1560CA5C9E80654765394525D76A423B31095ECD96E336D12CA18F05E69242AC0B484107B6C733230348134E0FC0EA6849910814F964278C86F84DF60FF00CE1AFA8BE6C997890CB5427B6F98594539D8657B3DBBFE720B44F56E352AA8320526BF40CC7E2A679214FCFAD422F413895A713C4E591CAE14F6485D8351286B5CCA84C14464F40D0A20D0C709A127BE3964006F88E264377A544A16AC797E19892C81CEC008418B78D5951D6BE04662642EDF164A099E9E2EED2E565B29CA1435A1398920E58D500F50B0FCCBD6A0F4E192770F0ECBC4ED4F7DB2996CCBF3024CDED7F37358E01259E4E245363FD991B41CAA7A97E61EA7771FA705CCD461B963FD98DB0F1187DA6A375A8DFA09E4919F97DAED8DB1337D27E58965B5B3854B971D70F0DB958A7419A457ACD2AB576F0C781B78D90C37CB51F153E79122990926B15CABAECE3E9C090B6491493DCF8E282143D555F1F962C86C8859EB4A57DB1640A696D24840DF167C4C82094556B5C53E204EA09169DF14F1A3A19949FB58A414DE27523ED8F962C816DD4788A0C9B68CA165630A41EB4D8E40848CA12C9E4E3FB5F3C810CB8D086E9551AB5395485053249E694B3F2076F0CA0C911507B8526B5E998F2986E8EC954D3879295CA8FA999CA229B69D6F1CF22ABF422A708853564D4090A6616FA65804AFC5CA985C7F1107776E2353E99A8EC3240AF88C3AFC4EA181A508E8327C6BE2306BCB3672F20635EA41CB319B6DC79186DFC7292CA49A65DC2DBE284858411732558B1E95C7857C5097FE9178643C5453DF1E14F8A11BF5DFAF71E6CD13A0A2F1E87E795CC5309660CAF42B41EAA34BFBDDF6AE52649196DEDBA3AC91C6A21554A374C1E2065C69DEB17D722C9A3908269D7263763E2878E3CB28B89030DEB52C3A53261C7C99022CDF47042D34AFC238FED13964604B87972BE3AFCEAF345C799357B8D2F4F98FD4ECA80723B1AD6B4CD861C6EAB3650F99E6B7BA8AF3882BE99D9877CD9E3141D5E49A0EE2DC076006C3265C594952DA2A76CAE450236CA34DB28E591405353D7316526F8637AF68BA242630596BB6527239718BFA78FC884117E47FE4D443611F91BCBAA07B0D32DC674FA7FEEE3EE1F73CBEA3FBD97BCFDEF56CB9A5D8ABB15762AB1FA7D38AA962AEC55D8ABB15762AEC55D8AAA62AEC55D8ABB15762AEC5572F7C55762AFF00FFD5FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF858B4FB432AE36EF0D94C1F6457A77C789061488210F4C89DD81539220637E0C15E9F0B7865660C244524D756F13A52693D47F019761C6E31905B67E5ABED43F756D68EAAFB89E9B0A66C61065198B425DE8B7BA7DD4114CFD036D95640E66220BEC4FF9C378DD7CE37019830E62A335D99D8E10017D63F9B7A7A6A3AB6A7005E47D36DBE8198526DCA6DF997E77B23A6EAD25AB0E2A0D7200D38138B07922A10C33271C9AC459B79526E573E9B7602992CC6C3958B67A75E5A7308CA3A8CC493B0C692359B89375DF28C8E6C792BD9C6E26238E63C925131C00CEC5C5083B644C6D946549998D5694C1C0CB8D1B1395E31815AEF8F02F1BD5FCABE5F49D16764F8BAE3C0BC4F5AD3A16810474D94ED86A9CAC4764E919B983F7E25B814DE201A8CCD4272A93644A690F1029C8E41B0146FAD40003B0C5928B4FEF8A559273F0D4F862A9A5B5DD286B8109DC57CA08DF0B105358F50403ED7CF16C051297B08228F8B3051E9A8A01B3F4E98B3B6CEAC4FED64896622B7F4913DF205988A067BD249F8B204B608A0FEB47725B6CAA6526282B8BC201A1CC599445269AF5FB5731E4DBD17DAFA93480F63928868996716303222B74DB2E1071AF74EA3770295230F84B6A53B32AF23BD71F097898EDED5C1F871F096D8D4F0121885EBD72CC71A6C81B63B77A6990310BB9AE5CDAC12FF4AB80CDC50D0F4C558EC9A3DE3BEC877F6C551B65A2DE8956B1B52BB653910636F54D134C962319910E6290D9183D46C42C7C05295DE980067253D7A655B76DFB665422E34CBC8AE2ED959C0FB3FCD968838939879279F7CD7E8594D630B9591C1008F7AE5F8E0E1E49BE6986D2E66B998CE4C8EC49673EF99D8F675D96492EA9A6709AA13BE65C4B8336373E9D234AD45EF84968E04759E8D2B015427299C9B61167BA2E84EAF1931F5CC6939110F67D1F4BE318F87B65326F8BFA35FC955E1F937F94A9FCBE4CD047DDA7419D5E9BFBA87B87DCF29A9FEF67EF3F7BD372E69762AEC55D8AAC7E9F4E2AA58ABB15762AEC55D8ABB15762AA98ABB15762AEC55D8ABB155CBDF155D8ABFFD6FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF855B670AC2A330CB984B2785D5A23C4EE46C300938D3C8037146EC0D640A57B1EA73271C6DC59E7013FD17CBB7FAEB98A106353D588EB9991D3B85A8D50112F59D1BF2CACE1557BF01993724E5F8F03A39768B3EB2B0D26C08B45317A454D401F16C3C732BC3D971F68BE7EFCC1D3E117D1DCDBB5631C8041D7BE60E78D3B9D2EB789F437FCE1B5928F37DC48C4A6FCAADEDDB35595DFE973F117D6DE76B8853CCBA848F19742AC38FDD98530EC4EEFCF4FCE7D0AE26D50DF5BC263889E5D3AF4DB292D5283C3230655657431B275AF7CB612A6A31A651E578C9BE1C5A94A65933619E30F7148792460EFB653273F1AF4B1ABB029C89E87C3289B9B16EDB4CFF004A3F0F5F6CC7924A3C6845A6E741D7A530C5814DA3F2DB4D4A2D3DE99246E9B59F955DAE230141A7B62BBBD7748D35ACA255DABE00615B2C9238C83C9969ED95973709D912B1FC4081F31912E48298C7C788D8E552660A2D08A743EF90660AA7A95D80E9D31656EE05BF6A98A6D772A7C35E9B62B6898A4E3D4D7145A244DDF9D315B442DD11D1B1640A3E1B84A8AB6F8B65A6D1DC42109A9E98B3077524BA534DFE5809724144FAE0A9A1A6DB6449660A02595BFDF832A25B0150FAD71DB9572B994CCEC8692E958D28731A4D112BE38BD42083D7B656D97B325D36D5415240F965D8E2D332CC15408C00287C732E107189B2B7E207ED5465BC010A95E638B0AE3C0150B2DB07E8B8F00543A699CF9D453C32328D3762431D138B54D18785320DE8693CBF0CE45502D3C7156E2F295B83560A47CB154CE0F2E598707D351C4F865536704CA6D16085032D001945365A47724C33A90A7805EA3C7271834E4C94C63CC5A8C0B6EDC9E840DF3371E375B9333C3755D61A4574B67F1ABE640C4E064CFBBC875ED367D4A61297F881DC9C988538F3C96A56DA488630CD1737237232D8871A52B492FF00449A798BAC3B78658254D2425FFE1E666DE2A1F9644CD90C6C86C3CBDC40AC5DBC321C4D831B38D3F468D387EEF7A6F9592D822CEAD2C5234038819596603F7D7F27871FCA4FCAD5F0F286883FE9C21CEAB4FF00DD47DC3EE792D4FF007B3F79FBDE8D9734BB15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD7FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF84F5A9238F5CAA50699EA135805C2D19413C7A0F1CA841D7E5D4BD77C9FE4C9F5955BAB9531A36FB8A7F0CDAE9B15BABCBABA7B25BC363E568B8428AD2D3E13B75CDC474FE975F9B54642929D43CD1733551578D7C3251C4EA660B1C79EEA4E530908600D30CE1B231715A437D65F5A82269F76DFAE6A75317A5D04097D2BFF38A5603FC513C69B50F519A5C8F59A4818BDF3F32C8B6D7EE550D4EF503E8CC4C8EDA06DE35E6CD274ED634C8E1745F5C2F2DC6FDB31645BC45F0F79C3499F4CD4E482088842DD40C6326A9C55BCB703DBDDC25B66722B97036C22FA334EB45963889EE06093998D91DB69F1FA87E1AE5191CD8F245DB5845F5ADD46512E6929EC1A746D253877F0C8DD2631B66365A3C2101283071B2E0641A7E9B6AB2F22A0536C7897813496D944AA517E11D71E35E0463C28C415E94186DB63B2E580602DA0AA88B88F6F0CAA4DA0B74A641902A65A84D3164D09A9D7155F50686BD77C55DCC0DB90C554DA6A54F2C516A26EE9D1B16C06D552F883F6B0330518BA937F37E3859834AE97F4FDACAC96C1345AEA15523976C812CC4D4DAF474E5BE544B671A88B82CD4E5D72124CA7B2AAB0E42A7BE504B18B23B331FC3B8C039B6B27B39A35A6F9978A2D190A73F5D8F8D2BBF6CCBAA71495CB728DB636BC4ACB301B8F9636BC498DB3ABF518DAF126255154103AE4265C8C25AA467ED0CADC97048491B0C5556910EE31550692256A823DF2B9ADD216EEF23E34AE5643194D846AFA82420B33058E952C72EC637703365781F99FCDF662678397A8A4D0919B2C7074D9B3BCEE7D5EC0C9584D10EFF004E6588389E2DAFB7F4AF4811906B80C11C68897479C39A3D01E8BE19514A9FE8B71F69B204A695974DA007803EF4CA8C9CA84764C6DED78EDC0636CF85905B45180BF08069BE368213650028A0FA3157EEEFE50FFE4A6FCAFF00FC04B44FFA80873A8D3FF771F70FB9E4753FDECFFAC7EF7A265CD0EC55D8ABB1558FD3E9C554B15762AEC55D8ABB15762AEC555315762AEC55D8ABB15762AB97BE2ABB157FFFD0FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF85F8ECA6827585979C84FD919084FC474B9674F6CF29F906F35036D773218A18D833A95FB437DB719B1C3A1E274FA8D43DA2E0C763686D6D2216DC06CE3BE6D30E8F81D5CF2F11610F34D76CEB212EC8767CCC3300535006ED2AB986E56455F4CB03FB54CC7F1699CB7539675B32AB335030DEBB532B9E76EC1877633ABEBD05BC4817E3095DEBE39AFCDEA7A8D0E301F49FFCE3379B34BD275C3753CAABF58466DC81C4F875CD5E6C342DE931914F72F3ADEC17BACC9A94171F5A4B9DFD21FB35CD7CE36E44254F2DD5E40F74AC253188D3E28FDB31A78CB951C8F3BD4BCA69E67B826C23334CBD471FEC395F0D322049E6DA8F93752D03518E4BC89E28D5BEC95207DF4C2254C6389EA9A33F3B58E48979851B8C4CDC884699569EEACE6BD5FF000CA652722324EBD158255940E61BB6545927D6AB1D43EDBEE47865728DB644D32A8A7884600F0C1C0CC4ADAFAC952283BE3C0DD18DB27B39964B73CA3DE9F6B1E06C186DD1A90A6A77A9C9C62D528515707AED84848D950380A2A37CAA41902A4CC7B0FA3214CC490EC549353438190921A42AB53CB14F1297390814AD3B62B6A2C66F7EB8ADA8BCAE2B5E98AD201E46AFDBA62C97FAE07FBB2A7BE2CB89DF5C03ABD0F8E02CB8DB5BFE34F8ABF4E506569051B1DF7203E2C896C89561755FDBC8D3305556E7810FCAB4ED8382D24A252ECBB57A7D39138523252716B7C626525B901DB11869978CC9ACEFD64A7C5C72F87A5AE53B4DE394935E5B53AE5BC77B35108B8EE82903957DF229114CEDEE62E5566E43C3DF1663127705DC0A2B8B3181305D460208A74F7C05B618F854A4BF87C46001B2D06DA8C6BBF2FA3088ADA1A4D622029CFF001C9702DA17F4AC4C681BE23D05729CB1A5AB405CDD731BBF0F01918C2DC7C9B3C4BF35FCCF268FA60B6B78DEE2F27158E34AF434DEA332F1E3751A8C8AFF00959F947A8F9D3433AAEA90B5BFAA2A3983B75F119B1C717499A565BD67FE71E6F9B549EC74CD4B9F04E6005EE7B74CCC842C38E254C2A7FCA7F39795E57730C9731C7D5829FE991941B23240C3785A76B4BD06DEE22DA507B6634E0E4455269E35902A2FAA9DE40731CC5B8056F5410027D9FD939518B9319505E8CE36AE222C84938B13CC8A8E9D708091BA7885760570A781FBABF947FF0092A3F2C7FF00013D17FEA061CE9F4FFDDC7DC3EE78DD57F7D3FEB1FBDE8797343B15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD1FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8D2F23F91A57BA4BFD6D6BC0D68D99B874D4F199B556F6FBFF00315959471D8E9F1AA0A7024019B9C18F85D466CD6C59E49EF25615E4332A52A0D50DCB2DF2D6856B70C52551CE43DF31324DCEC38B88D3D353C81A7CB0F32AB551E03FA663193B0FCA3E7DFCCDF2B2E9FEABC7B2C7E1F4E53293938B4F4F9C6F56297D485DF7198E64EDB4F0E146E83AFDC797196E2DE46AA9A00091D7E9CC6CDB876719D3DDBCB3F9BD24F2C31DE0DA94AB1FEA7308C1B0667B4D94D69ACB0BD12208D97E3151D3289636F8657A07911B4F7D723B3D2E146909A39DB7CC738DBE395EB1F997F96F6BAE687305B355D42DA332D55454D47B0C8F03938A76F86AD6E6EFCB17173A65F42C9F1955E429DF0183920B2BB7BC4616F2C5B16DDC65660CC165F14EB3463B9032071B30532B566E2C3B83B65538D1499526D019BBD6990E16719A6917C5DBA63C2DF19A6D6F7CB1008C7E8C785BE395344BA420107AE061396E881329C892A0DAD663C8D0ED9592CC054571DF2BB6C017F2B7FDA1BF7C2A8599ADE876DBBE2A82372A361D3A0C5541AE7155295D4AD477C52934EC6BB6D8AA0C87F138AA8307DB7380A43AAD502BB7865062DA0A3E1269D7A60A6C0510A5BF98E34D80ABA3316515F98C69369846687AE16B4C2075322A96D8F7C55328A7F498156AD31564767AA23108EDDB08544B5EC55DA4FC724C81444378A5A9EA7BF5C2CC14C92F401F6F6F9E06C1277E9458EB593AEC37C84CB6715A849AC27412F4F7C8829421D6A25AF292BE1BE580AA026D6226DC3FE39602A841AA52B2C64B329A0032AC82DC5CF9B81E8FA0797EFF00CC36DF582AC8AA3AD30C62E064D45B23D2FF002E746D666FABEB1682EAEE27FDDB915A27874CCCC61C0CB2B7BEC5E5C8B43F2FBD969AA96E889B050053F01997034E0CE16C3BC93A446D35E6A37975CAECB32853E03A665C25B38C63BA6F3C3CEDB526BEB5496201B83151EFED82526710F942FF00F2B62F34EABAAEA1631FA2F393450294A57DB31E45C8807897983488FC97713E9FA8CA1A624844277CA0B7C52BB760F0C4E05030A819590C81A45AF5C14CC14D74F6F888F0C7859829D237C58D3305FBB9F945FF0092A3F2C3FF00012D17FEA021CE9F4FFDDC7DC3EE78DD57F7D3FEB1FBDE8796B43B15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD2FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF911B5D4CA4450905BBAE74F1C603E6D3B48AE67FACCEA900FDE16A6D9682038A626D9EF97B49957795D99CFEC9195CE6E660C6F47B1B58EC87AAF540BB961D4661CE4EE74B87D4191C5AFAAC65616692836E5B65066EFC600F1FF3E4D71AB45708F1045607E21F4E5329B64703E3BD62C6EECB539792FEE8B1F88FCF31CCDB04292D9AE9C158E18C484915AE57C56C8DA31A49596358E416F21EA54E44840059C68FE69D574B44824D51BD24151F16E7D8E63C837C6DEEDF96BF9A30697AC437F733A5B98C8A9E5D7E798F272216FBDBC9DF9E9E4FD7AF7EAF7B7111F56309212474C003978362F14FCFAD33C9F3EA31DFE8572B34929E46314A54D7C301736DE23636377C39471820F5F6C8101B0499559B2DBA8F59E847619590CC14FAC751B37996105CB374DB6CA671B613932D59618940988453D0F7C8F0A04D136CD6F2352390BA9FDA1BEFE18385B064A593E9D74D30689498C9DD8E3C2CC66461E76A80354A81BB65538EE9F15B87528DDB846416F0272B316C8E54DE3BC454025A06EF4CACC5C98E45296FE05DD4B37B5321C0DE24BA2BC570095007BF5C8B0326E59EDE9BB004E28B4B5E48F7A1A8C56D41A44DF7C56D45A4DB167C482797AEC315E24135C76A62BC4A06E0D7A75C4A89287AB43D72921B414545734A53E9C785B01B45ADC8F1C785982AE2E42D0D7A74C14C89D95D2EEA2B5DF035DAAADD92C17953DF15B4CE0BB006EDCBDF15B44BCE78F247A3FB6109050E2EEE01FB44FD392664A69697B329A93DB147123FF4A3014240FA71533A434FA846D148EF394310AA81DF018DB28654A6E3518B9DBAC324B2198D1CD3A60106CF142A299A4BC92D622F2040086237DF2622BE28651A77947CC5A9C4F35BD83945E8C4102996082F881EB3E4EFCA9BD9D44FA8388EA7918FE5898BAAD7E4DDF4559E9967A26872A40024C828A0EC09C9083AFE3280F24DBDEACF7535F5BA2C8EC5A075DFE1DE997C4522ED966AD33DA5A4934D2963312A213D299785E152D23CBF696D62D3ABB191FF007A2BDCB76CB449A670DD4BCD4C2CF402DC4249715529F3DAB80C944698D7953405B5B06BB9A61140D1C923CDFB5D2BD32B25980FCBFF003D4B379FFF003D6EF4486FCC7A769D39ACAA7ED509EB9021982FA1F54FC9D96DF4DB7BFD27525BB9258C39B52C28BB0D85322907778AEA52AE8F70D677C443780D046761F7E2C814CEC599516534A30AEDD30365A6515E425FE26A7B61676FDE9FCA021BF297F2B997756F28E8841F63610E74783FBB8FB87DCF21A9FEF67FD63F7BD172D68762AEC55D8AAC7E9F4E2AA58ABB15762AEC55D8ABB15762AA98ABB15762AEC55D8ABB155CBDF155D8ABFFD3FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8EF578F9B5C06FDDBF4CE9B8DE267A6651E54D1967BAFADC9BA72AAE552C8E29C1BBD62DE25826E4AB45AE56656E6E0C28FB8B9068427241F697C72B9F276F871F0EE94C97B4256184257314C9D96395B10D522BB9CC8D23058687965129399116F07F30E857BACDF35B58446572D4F8728949651A4E34BFC8DF335FC6918B3912693756A76FBF2B126118D966FA67FCE2079E3569D2425E28DBA7F9F2C4C9C918596BFF00CE13F9AA29D1E5BD255853896E9FF0D944A4DD0C4CC2CBFE706B5A9E359DB5858C2EECBCFF00E6ECA2526F8E265563FF0038CDA7E8171691DF7994594A8F4F50494E4476EB91126D11E17A95A7E487956EAE62177E6E597881D6407F8E032660A7179F957E4CD35D2DE1F32C444A28C798DA995993602A69F929E539E932F9A6293BF0120C812D82491F987F2C348D2EDBEB1A7EAA048836F886E7EFC46ED3964C33FE55FF009A2FECCDDDAAFD7517A01BFF001C970B57131F6D13CF3A6481DB4B6B5B68FED02A454F8E3C28F11136DE77BCB598417D6E4229A31A634BE2338B4D6B48D6A25442179EC6BE380C2D81CD45BBAF28385F5EC65A93B8A1C81C6DF0CC92CBA4EB91A13E9B3D3BE40E37331E54BCCDA9DAB7EF6D0923DB2BF0DCA8CD53F48A85E722346C7ED2F8661CC516CBB516D4ED5BED311F3C82AFFAEC741C5B63D3E58AA8B5E27F362AA2FA82F4AEC3BE2D96817BF5AF5DBBE29B59F5A88FED62B6DFAF19EF8A82A2648EBF6BAE45B42BC6CB4FB5BE1640AB2B8DB7C0D815B92D3AD70164AD1B0A75CA9AD7F2DC50EF8551D0135A5715477A8513956BBD310CA3CD6FD61BAD324CCA9BDF49F663EB8B548A3ED2C750BFA705635F0C5ACC99E795BF2D359D7F538AD591845506507C0FD396E38DB0964A7D476DF933A0D959033C4867812AEC7B6DF3CBBC363E2A47A4F937C9BA5DEDDEABA95DC29145BF027AF1FF006B2C18D7C5629E7CFF009C98F23796F4ABBD13CB56714B76A0A0950577029E1ED93F0D7C57937E5BFE746B779ACC375AC4AD0E9CC4B70EDC6BF2C84E14E3E63C6FAAB53FCD9F25F9AEDA0D1F43981BDA8590AF5AF7ED80069E07B5E83A3AD8E9B6019FD4927456E47B03DB260278588F9D0BDE6AB67A65BF660580C902ACD043E8C3A7C1D2A02B8F96264C4861FF00987FE997DA7E996FD178F35191E2470A335A8DA0F265F5869B66D3EA4B6CCA0815DD908C921F9C3F96FE439FCB3E7ED77CC1E77D224852EE6768DCA6F424FB9C3487D831793349D5EC21D5BCBBADB441E3E6D64ED4E1ED4C348B7E587FCE45F9ADF47F3B0D3667A346FC5A64F6A60E1660A1FCA5F98F1DD086D6693F771A84563DC78E34D80D3DA2CEEF4FBD50F1CC391F7C69982FE81FF26E83F287F2A829A81E4FD0E87DBF47C19D061FEEE3EE0F25A9FEF67EF3F7BD232C69762AEC55D8AAC7E9F4E2AA58ABB15762AEC55D8ABB15762AA98ABB15762AEC55D8ABB155CBDF155D8ABFFFD4FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8BED12FA6D457F46FA12ADBC7F626A7C47E6736E72BCD5193DAFCA1772C114D67796EF4894FD51E31D5BB72F6C899A63A6B6609AB5DA32C37B6E2DD587C2E452BF2C78DCDC5A4012093CFBA5D95C5C4123AA9B7157693A7EAC13C9B39630D30CD5FF003318397B28A39E2ECD18AFF0CC4326D863A62B73E79D575085C4517A61F6F886DFAB29949CC807D51FF38D7F96B36BF24BE60D7A33C62F8E30BF64F43BEF98F29378C40BEE7D22C74E69E9269D0C76D07C10CB1AD18BF45AFB655C4CBC1E1DD9E8BFB58ED1ED0C421BF857933462881478E266DF8E16F93FCD9F9B3A89F3543E5DD06E92E5E7904370EC6BC2BD48DB2894DCD86114C9FCEFA4EB5E4DF2D0D6EE7CD33CD77749CA3B3864DAA7B5331A536C38E9E45E5CFCBEF30F9C746D43CE7E64D66E20B0B2532DB425E858FB0C89C94C463B64BF967F973179E359223BABDB6D26DEBEBDD31A6CBE06A32072527C17977E75585B796FCC53E81E54B9BBD4A68BE15773C8F2DC640E56DC7A7B286FCAFF002B79ECCC351D62C6F9A0421B801F0F1EB959CAEC31767F13E9997F303F2DADECC68BE67D3A6B4BB20707028DB6C4E1198863A8ECDA28BB3F307935EDBD0F2EEBB25AA1FB2B2BD313A92D3FC9A82D7B509BF41DC2C9AADB5F475256456ABFCB251CE4B4E4ECFE17805ADC68374F7306A7693F224F0940D8E644276EB3361314A5FCB71DB96BED36F0C31F22521734232F0C2386C59661A17994D9010DE5D212BB75C90882931A7AE681AF68FAB442DD6E22172B5E418ED919419C7210C953CBDA4EA2A566A7ADFB253ECE63CB6726398B18D47F2CE695A4789223131AA377A7DF98192365CC86434C1755FCB7B8B552CB1866F0EDFAF2A316CE379BDEE87A8DB170B6D29E269D36FA3234C81481A3BD462258245A7B645210F34BE98F8C1030B7525C6F2035058838B3115212F03591CFB53148802A6DA8C6845198E2C8E20022A1BB59A95241F6C5AC48A3967229C6B4F138B30510B73D37E98B74510B703ECD7AE03BA65B045070AB50D91E171BC42AA92EC64AEEB9131489A36DAEC3380DB0F118084892266BD759111006889DEBD71886C81DD1F0992E18C50C4657A7C210572CE16D243D3BC97F957AF798E482792310C524A1645E8426FBF5EB8F0B8D393EB1D1FF002374CD2AD24B8FACC8B2409CBF7A76247D38F0B8D29A0B4DF33689E5E3793CF730C571A7D79F134A8197618B10789E11F993FF003955A5E97697F6FA0A9BABC98323B49BA8EA36F87325AE669F188F3B7E6079FAF9ADAD2F561B59FD46B94534201A9006C3C70DB8E7290C5B4AD3E1D275392DB592F717334A03C8FBF53DB27C69194BEACF2AF93E2D6E1161A2A492974A3B36FC411DB2B99B6C8CDED5F941F9172796BCC4FA84AD2CE8CFCA6F537E277E9BE56CF8EDF74C691C2A8109E1025501F6C3652082F3BB1AEA1E6A7BCA739223C78FECED8DA683D06F1115A198578A312DEC72F8C0485A90180C006AFE6C9243F14708DA982500189A66B1C4F1488518AA4B5E5F25CAA52A6069E4DE67B48BCC7E67B6D2DADD25B585C7AEC07C54077CABC621AF64279ABF2B6EF4DD2B5AD5741BE6B484216823534A0A0EBBE4865B6C1005F879F9B02E6E7CD9A80D61E3BA9E1958073B9DB26269E00F3089B568627BAD3D12358E4A1E636E3ED960368D83D2B43F3C4F63259C11C9CE5968272DF641EF4DB274178807F551F9093B5D7E45FE4BDD350B5CF913CB92B11D2AFA65BB7F1CDEE1FA23EE0F2DA8DF2CBDE7EF7ACE58D2EC55D8ABB1558FD3E9C554B15762AEC55D8ABB15762AEC555315762AEC55D8ABB15762AB97BE2ABB157FFFD5FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF90FF00CB7F20CFABEB70F9784FE9BBB0569CD76FA727E3B8A3474FD1DD03F23BF2F3C93A589BCC5E60B79AEDE3E4119F707EFF007C7C76C8E969F1C7FCE4679DBCA97925BE9BE5331C6DA651649E3E8DC698F8EDF1C34F985743D435AB73A95C5AB244568B514F57DBDF01CEC8E34D74AFCB3F36EB344B1B65B6B63FB4C074FBF29395022CB74FFC91D5CEA169646F0CB792B82B02D6868457299657271C5FAB7F90DF96FA8695E588AC2E2331968C027E81941CAE6460F7693CA361A1E8F705C896E5DC145EFCBB1CA8E46E10BD9F397E76FE60587923CA7269D6404DE66D67F72186EC81E9BE0395C8861A60BF911F93BA0E956D75E74F38EA0B3DC5CC06ED8B36E8C6BB75CC79657371E36216F637DF9B9F9A52D868F792CBE5AD35E9287354A2FDDE198F2CACE589ED7E70F2C5C6B0963E42F2E5C1B68B4F939DEBC6688E0F63959CAD4715259E7AF3EE89F933F97B37956C5565F325C2141243F6F930237A57227236E3C5C4F19FC99FC9EF3579E357B2F3B7982E85BDACF299409BAB2F20DEDE390395DBE97476FA57F323F30348FCBD8C68F62F6D3B88F837115DC0A7BF8656723D0E9B40F813CDFACB79A75A6BE9E0145242328E80E0F11CC9F65F131F9AC2248F925F4B6EDE08D4C81CAC4F6481D1434AB8BFB2BB8A73AACD71A746F59A177AD4F7C9C32BAFD4F66D07D412F9D7C87AC79623B2D3ECA38F5644A34B415E599B8F23CE6A7414F0F3A6EAF7777248B3B95AD16253B53E599D8E6E8F2E1E03499E9BE5C56BD53AB192DE2247276DB2F127127165D7FA0E8F0317F2EEA85EF1002C8ADB93E18CA4D6229B7953F33A6D26F5346D6AD65424F1FACB0FA3AD330E72722117D2D63AAD9DEDB42F6B79CD5D4155AE634B9B971E48AF5AD89E372BCD7C72B219A1DACF4FB9E4A6C57813B371EA3C72B21B2293DE792B49BB25BD08D49F6FEDC810CC3CE75CFCAFB296390C4A2B534A7FB78B787916A1F965240EFC54D05698B6061D7DE50D42353FBB240E9F462CC31B974CB8B7E4B25B9AF8D31672E4848D2584EE87171AB74D61B9A8E25295D89C5B150951DF1640B4B28A80A773DB14CCEC9AC658A0DF22E2A3ED62326C7A1AE34B68D58A15824653F18E831E15B645E43F296A9E67D5E1B75899A194D2B966385948C9C2FB83CAFF0092FA779295353D5A2170654E410EF4AFD3991E1A0E77A4E82DA4699F5ED6AE255B3D3ADE3630C55A55C7418F86D32CCF3DD5BF33AE7CE574749D20496F6ECDE9B4E36047CE98F84E34B23CEBCF1A3792FCA7A1EA926BBAA97BEBD80FA4BCF7E743D725185328647E5DEBFA8C32EA57C2CE212DA991B8B91534AE4A98E4928F9735ABDD1EF0DD69B251CAB7A918F9634E29927A350BBF32B5ACB1DBB3DFB5C207A0DFED634CA2FD64FC8CF29C1E5EF2B0D66F63A5CC9081F17662A3010D8F77F23D85DCB6FA9DE5CC815667261AF8646922D3CD6EEC69D62189A168F8D7DF1A6C8DA43E4EB4FAB9B9D4661B4D5E24FBE34CF74E755BCFABE8B3C8C68ECEDC7E9E9878E934520F29DB1B2824D4E71BDC92149F7CAE5918905956A139B4B19A73B7D514927FD615CA253B6B312C23C8F6AD35FDFEB972B54B824424FBE5129313128BFCC0FD23079435716F2B969636A460F4DB2D8DD391189E17E06F9FFCB7AE0F34EA9A85FD94CD01998F220D2996C4B0902C7749D26F7CCD7834686136494AA9229C865824E348909B47E4F86CB506D288E57711A09325C6E399C83FAA2FF9C7E80DB7E437E495B375B7F20F96E33F34D2ED87F0CE9307F771F70FB9D2E5DE67DE5EBB96B0762AEC55D8AAC7DC7D38AA9D0E2AEA1C55D438ABA8715750E2AEA1C55D438AAFC55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD6FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF233CB9FF0038C3E4DF2ADCBEB13B133D0B1911C0CC3B2E7ECFCE5FF9C95D5A6B1F346A1A7E95AB4E6C625612C5CC96E229B03DB1B29A0F89DEDDEF00926B97974FF5394909AFAA47BB63653C2FA87CC9AF797F56F2279774DD25D34B4D3A86707FBD6A0A751BE365061B337FC8DF2C5E79C752B7D26D6F2E0CAEEA11B937122A32B258460FD2CD3FF27FCBDE569F47B4B9B432EAF28065BC6DF8F427299172618DF40456B6BA6D9C16FA4C4102A51E4661D69EE72891A732106272C4F737978F79C94DADBC970B272AA1F4C578D077395D972B1E3DDF9E76B6317E6E7E6FDCDAEA08F69636B318F8CA7ED509FB35F96425272B829F42FE69F927CBDF977E4FBCB5B1FAE896F63315A4924C4A7A8694A0F0DF28916D8079F7E5DDB5EF907C986636E96B7BAC9ACD7DC6878B03D0E512939118A6307E6459E97A6DCD968086FF00CD3316F4EE07C67936DBD2A72B2594B0DBCCBCB9F94BE65F327999FCDDE78B1B8BA4327A932C95E0141AEC08DB2264E4E9F4FBBD4FCFBF9ABE57F2AE8F0E81E52E7677F0A18E242F550D420EC32B26DE8F498007C75AEDF5D6B378B7DADDCB4D7B292CBBEDD7C32B327A0C31012DFADC21FEAF343EABAED118C5283DF07139825174B3C0842B583B13D2B91254CE285BAB580C5EAADAB41714FB1FB253C699289759AA31AD93BF21FE5BF997CF5AA25B7942D9E390B52E6465257DE9B6676393CB6AA9FA0BF97DFF0038C4BE5FB186E7CD3299AF1497996BFC33618E5B3CA6B620CB646F9AFF0025F45F3497D3AC6330A8F843A6C7C3AE64893AE9C5E7FE59FF009C4B6F2E6BEFA88BA9E78B90608EE5878F4C12935883D1FCE5F91FA16B366919822B5BC450A27550A6B4CC49CB7722317CD97FE5DF30FE5DDECA90C72EAB696CD44F4EA683000D8F40F2E79AEC35E884733AD9DD746B7907C55FA7010CD983EA0F1AFA3C1404F85180EB9590D812B7FADCADCBD6F84F4036C810C834F248AB406BDB7CADBD21BA53293CD41C5B42552E936F221AA038B20C2B54F2BC3217A44BB83DB16C3BBCCF54F2A4B17F751803E58B5F0B13B9D1E5B706AB4FA314243346F1FDA53BF4C50A5146DC838041076C0589927F096E03236C0A6F6C582FC3D7FCEB931BB548A3A0D2A6BABC820B40CC2660251D7AE5A22D7C4FD0BFC98F24E95A1E9D6B7A2D985F08F90673515A7865F8A3BB4CF23D4FCD9E6780AC36D247CE78E3ACC3F6683AED99341C7F11F21DDF9E17CF3E61BCF275ADF243A7D94865BB8D0856A0EA2B5F6C691E25BD5935BFCBEF2569062B7A34F0A7266EADCBFD6C683025F9C1F9BBF987A879ABCC37C25AAE903E1B5727627C0602144A9E07E85AB1755670AC4D77C1C2C2791D64B67A6DC898BB2CBB8849355DFAD463C2D5C56FA7FF00203CAB16AFAF433BBC73C664570817DC1C785BE127EA25D4634ED0934E0BC04DC5828DBA0ED9121CDC401E6CF7CB6D0268F089CBAB2814A1A7DF829BC4425FE6C65BF8AD6D636E3561C877E38D331009F689666F74B92DE195614B215766F6C69B0462C1FCF9AFE876D2C3A341AA4308545370ECC0EE7AF7CC79C776C1008D7F39FE5FDA687656D77E64B5630D0944700D7DF7CACC14C22C4BCD5F9C5E4792D27B1D3F5980FD6C2ADC55813F08A0A6FB640E32D6718653E49F37F93EEB4286C1756817D221A3F8C035EBBEF90F08B0F0C273AE79A34C3A7CF099619CCBB2B5410C3DB7CC8863A0E44202980CDF92FE44F3BE963EBBA72FD6AF3ED3A902B5C3C0C258C3E78F3E7FCE23685A523EB9E5EBAFAB6A963FBB823076A2F4040EB83869C69E10F9423FC92F3C4BE66FAC49A6CB33C8D46B8553C4FE18971CE9EDFD0E7E5058CFA67E52FE5769B72A52E74EF28E896D7087A8786C21461F78CE9F4FFDD47DC3EE797D40AC921E67EF7A2E5CD4EC55D8ABB1568FBE2AD547862AEA8F0C55D51E18ABAA3C3157547862AEA8F0C55D51E18AADC55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD7FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF30EE7FE3932FFBDDF60FF7998EE4BF25BF357FE537D53FE39BFB5FEF6F5EDD716D0F1497FDDBFF001C5EA7FB9E98B745253FDFDAFF00BC7FDE0FEFBFB9EBDF23264793F4DFFE7143FE3BBA67FC707A2FFBC7FDE74194B18BF42B56FF0094853EC7D8FF0077F5E9FB194CDCA83C8BCEFF0061BFE521FB5FF1E7F63A9E9ED98F272E09DF927FDE49BEDFFBCB27FBDFFDEFFB2FE3953938DF1A59FF00E4EBB4FB1FEF50FF00783FBAEA7EDE464DF27D01FF00395FFF001CEF2EFDAFEF63FF008C1DBAFBE53258F3625F985FF92AB47EBFDCAFFBCDF6BA663C9CDC6F00FF009C69FF0094FA7FEE7ED0FF008EAFCFB65679B9717EA37997FE51BD43FDE3FF00799BFDE4E9F64F4C94F936E93EB7E3179D7FE531BAEBFEF43FF7DFEB9E998E5E9B4FC921BDFF008EDDB74E9FEEEFB1959E4EC23C936D3BFE3A375FEF1FDB1D3E5DB029F8ABEB3FDF27D8FF009E790973627E2AB17FBD717F75FDC8FF007A7EC7D39383AFD47C5FA1DFF389BD2EBFE385D0FF00BC3FDF77EB99F89E675DC8F37D49AFFF007D71FDF743F6FECE6645D066E6C5344FF7A24FEE3AFECFDBEB99117124CCAD3FBE7FB5FECFA60C9C9AC3CD3CF1F69BEDF5FF0075FD398736F8BCA74FFF00A587FBC7DFFE3A19747E9497CB7AEFFCA552FF00BCDF6FFE95B80A43D7A1FF00792DFF00BCFEEC7F7DD722DB1504FB67EDFD1959641565E9DF2A2DE12997ED606D0843F4E2C825571D5BED7D38B6B12BFF00DAFB3FECB14179F6ADF6BFDD78B51611A8F5FF00757D18B192017FBB3F67A603C9804543FDD8C805926D69DF2E8B44F9BD2FC89FF1D6B7FEEBED8FEF7E797C5A25CDFA15E5BFF8E6DA75EA9FDD7D1F865F071F27262BE69FF8EB6A5F6BFDE47EBFC32E71DF97FE4FFF00C995E66FF7BFFDEC93FBBFB7F4FF00938ABEC7BDFF00943F52FF008E77F70DFEF47F7FF47BE2AFCCCD7FFDEDBBFF007A3FBF7FB7F63FD8E1632E4C6A3FB4DF6FE8C0D3245C3FDD5C74EDFDEF5FF638583EDFFF009C50FF008E9C5FDCFDA5FB5D7A8C0E4C1FA41E6DFEFB48FB3FDCF7FB3909399064D63FF1CF8BFBBE9FB3D320DC3E2C67CC5FF1D0B0FB7F647F77FC71671F8A62DFF28CEB5FEF67F74DFEF07F7BF4E167F37E67FE65FF00C746F7FE526E9FEEDFB5903CDBA3F178737D97FF008EDFFCF6EB8127E2952FF7FF00F4B5EBDFAE2D72F8BD3FCA9F6D7FE526E9FF001EFF006708607E2FA3EDBFDE1D1FFE523E8BFDFF004FF65930DD1E5D5F5BF977FDE0D27FDEFF00B2BFDD7DAFA72054A7FE6EFF007960FF007B3A8EBF47DAC816324FB4DFF8E7D97FC733A0FB5FDEF4EF902C1F62796FFE51ED07ECFF00C73AD7ECFD9FEE57A7B674DA7FEEE3EE1F73C7EABFBD9FF58FDE9D65AD0EC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFD9, '1', '2021-03-13 12:45:48', '1', '2021-03-13 12:45:48', b'0', 0); +INSERT INTO `infra_file` VALUES ('6edb3893-8ec8-4bf9-aa64-c04f1c7ad98e', 'jpg', 0xFFD8FFE000104A46494600010100000100010000FFE202284943435F50524F46494C450001010000021800000000021000006D6E74725247422058595A2000000000000000000000000061637370000000000000000000000000000000000000000000000000000000010000F6D6000100000000D32D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000964657363000000F0000000747258595A00000164000000146758595A00000178000000146258595A0000018C0000001472545243000001A00000002867545243000001A00000002862545243000001A00000002877747074000001C80000001463707274000001DC0000003C6D6C756300000000000000010000000C656E5553000000580000001C0073005200470042000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000058595A200000000000006FA2000038F50000039058595A2000000000000062990000B785000018DA58595A2000000000000024A000000F840000B6CF706172610000000000040000000266660000F2A700000D59000013D000000A5B000000000000000058595A20000000000000F6D6000100000000D32D6D6C756300000000000000010000000C656E5553000000200000001C0047006F006F0067006C006500200049006E0063002E00200032003000310036FFDB00430001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101FFDB00430101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101FFC00011080190019003011100021101031101FFC4001F0000010305010101000000000000000000000304050206070809010A0BFFC400431000010302030603060406020104020203010203110004052131060712415161137181082291A1B1F01432C1D109152342E1F13352620A172472164325345392E2FFC4001E0100010403010101000000000000000000000304050601020708090AFFC4004311000102040306040602010303010803010102110003213104415105126171819106A1B1F0071322C1D1E132F114234252081562161833437292A2B2D224258234FFDA000C03010002110311003F00FBF8A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A208A0AC4C7CF97DFD89ACEE920903F71909243FB3CA2953A948260E5AE5FEFEFD29962312647F261DADAB54FBB46C10A2D60FA966E70826F595BA5941E25A7FE44A4825BE9C63513CA69A276A214A097A9E03D63265A85DBDF46841EC5AD187C5BBCE0696AFCA56A0904F2039FCAA524AC4D018D5BEDC3CFD886932709658834BD0F0E56F3CA1E22E10B820183A1EBF4CB9CD6B326196A29A1B6B623B74F38525AC2D20DB510B05054C4E5D684CC2A6602BAFF71BC7B4A07CD9F841149580633FBF5ACC11E832268823DA20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20840820C73A5029934B8D789F7DA140A64711AF13F87ED142BF29F4FA8A6D88C289E0920391507D9F66D0D558B097A0245BCA9D7FA363108D34DDAE2172E38BE137E13C0A0608F084104E5F43A193CEABD8AC18C3106D7A5E95AE76A59BCA1791395398105EC3ADBD39DB268B6B10C5F0D18A0C3577187A9E42B5B958372743EEF3D2069A4803AB0FFBC8C2AF777C066624B736FEDA9A44C4BD90B9D2BE7192B552C843AB3A97D1C7F717BDB3ADBC96D6D2925053970E900465CEA6F0B8A18B97F31DC9624FBCB4F60464E90642CA14929539704311C0F9FEA1FB7CFD3F5A9295FEDEBF784614A710422BFCC7D3E828821447E51EBF53441155104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104450C4D92F5D301B70BD6DC3C400FCFC63FF00D79E70067D09F4A6EB9E106B400E7C75F6348C33B8F21786AEE2AD254C254D3E90EA5D5AD6A4C2184B492A25E3FDA08120FE99D64ED09094B93500D33A3F0B521AAB05316680B121FBD3D8EC0C72B7DBCFF894EE97D96762F197705DA5C2369F6F9E6D6CDA6016578C5E5DE18F825B3F8AB54AC38CF1485A6332248D0D5476EED793F2D5BAB4835A3874E7EFFF00F422DDB1360CE99392152D6427759C12921BCDBD75AC7CA1ED6FF11EF696DBEDE6E03B7F6FB718AE0F64E634D1B8C0ECB11BB61B72DDEBB69086C5B85907FA440209233D2B8BEDADBCBF9A425550A167CCB3B50F6341D23B76C5D8084491BF2C01B85BE90D6ABBEB6BF4AC7DC57B266DF5CEF13721B0DB518825F17B89618D2DF55C4F88A5A5B6D2A528992789526739EDCBAF783710711B2E5AD4492522A79F1F7E51C6FC6385186DAF3D2121292430019837A46CFA7DD05474807EFE357795FEDEBF78A94548585A428640F5A710426BFCC7D3E828821447E51EBF5344115510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510414410510478639C7AD10422B70699F61F0D47D34F5A208B57157D9B3B945F38EA6D8B48756950570B2E808952AE4999091F97A647ACC06D3C4090824E8FA3D2D7E1A1830A37E72505FEA2DCE9AF5F58F9FBFE279FC5A30ADC058E31BB6DCF5FDA6D46F5F1369CB0BDB5B3713796D84A5E4F85E2145BAC3CCAC5BB8A5C990148988CEB96EDCF150C2EF8DF096041AD9BFE35B1CFBB88EBDE16F09AB1CA4FCC969992BE9282DBCAADDFAB335358F90FC671FDA5DB2DACC7769F6E318BDDA5C5F137957CEDC5F3EBBB603AF953A5A42DC3C50C9596C24C70F0C72AE57B43C6431130A44C24926E4BF06A7E7817AC76FD9FE071225A54248140C426D9E94F3E2F0CF67F1042F1861576C16BC2C4B0F36E1A4F0A045D37A13D3224E7998D6A2D13978D58512540A852F73E5435F661C6230A9C0A199B752ABB0A80457F0D7B47E871FC3C2E9CBCF65BDD95C3AA2B5AB0F70499984A9B09D73FCB15E96F044BF97B265A48AEE8A9CDC9FD7947977C6F33E6ED89AA77049E548DF55FFC47FF00A8FD2AF72BFDBD7EF14C8A58FF00893F7D29C4102FF31F4FA0A208511F947AFD4D10455441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041441051041A510435372388A40CBA99E5AFDFCEB2C7431B896A29DE0CD5A674E9F78592E020120FA7FBADB715C3BC25315F2802ACFD9ED0C9CBC487FC208717EE9515244A13099827404C7DC56E656EA0294E1DFAF271EFAC371880A56EA475D3FA7F53A3C4BB8AB49B755CA92E04A78CF01FCEA4B73C4B039848127A0A693268403C01BE747A7EE91252A42A6B338720727B3DEF46FC47CEE7F186FE29985EE1F652F3747BA1C4DAC4B79BB4E872D1D5DB3C975FC1036471F096161EB75B8CA95196640EE6B967893C4F2113D7841FC88604B642ADF97D6863A6787BE1A6D0C74B4ED10A1F2CEEA9206F6B906D0E5FA3F1FB79B578EED16358A6D56D05DBF7FB538A381FC4F16C61C5BB8A153C494A1A7D5EFF00080A28009FC99682B89788F0D89C7854C94A2CADE2E496725D8B06D341DCC77FF0A6CC97B1CCA4CF4A545346AE547660DCB3B0E1157CEBADB8943CF5C34C13C43F0AA8599CC95F2CC991D672D6B96AF63E3913C952D4C55A9B5333F961C834761978FC0CCC37D284856E8029C297E35CF389AB3C66D117B84E1B609E2BCBABDB4E07AFA080A6EE1B27888CE55FDBD7A9AE89E1DC0ACFCB4AC97053C474ED5766CE398F8A12662672A596A1208003D3FB7AE75A47E875FC353F1AAF643DD5BD7E86D1706C6E38C36084C071213139990273AF50785E42A5E025A5A8406F795ECDC9DE3C83E2C27FEE73526E925CDEF6F4CBAB1BF41B8C2D05398311DAADB2D2433E4F5AB574EF1578ADA494A003DE96820520924E5F63CA8822B488007DEB4411ED104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104144105104332D00B2A264F41A67FE32FB9A0162595D1F4E1EB0AA57BA8AB801DD850D4F7EBCA14CB4F80A5C6A73F21A7BE4E5A23713382CEE876163D7D3BFE60B124DC36DB82DE42AE20054E69232D46920FCE75D50C4CFDC40054ECEC1C503D7FAE1CA16C061FE6A9DA97E4C4971CEBDC0A67CC3FE259EDBFB39EC5FB88C6714BEBFB556DCE2B66FDBECAE1FE2A3F1172E3A54C5CA92D1525D596D2EA55EE194EB19556F1B8D4A50BDE57D441662E406B1A38EBE917DD8FB24E2D7266CB42BE56F0F98141C100B0619E649D4F38F811DB3DE2E2FBE2DBEC477BBB68E5F5D6D0E23777772117854E5BB69714E78296C392B03C352444E59655E7BF124D3336B29408A28B9CD9B2CA9991C4C7AA7C307FC4D8E996DBA4245281FA50E5EE8F67DC630E3D69885E5DB1174EA901808465EE2B8444E7F9634FAE74D14BDE90D9B503BB8EB763566E8F1954F06728D2F5BFE9F2F530861F8C9BC69CFC69875AE1E20AD424E49CBEF43553C6319A684107D8D732EF607AC5870B3C26592AB1029ADC55B5C9BEEF10B6F77737FB71B3563624A9C7F6870461A08CCF0BB88DAB6E4013970A8CC0F955B3C3E80A2839EF0E771DB8F7CA29FE22DA0942561CD942EFADEE1BB3F08FD407D92F6311B15B82DDC60086FC216FB3D873E5311EF5D59DBBEA310352A24F53CEBD29E1D4B602506144E5EC97F2C8671E50F13CEF9DB5710B705D43EEFC3311B3496C01CC7C8F79CBE1FA54FC57615A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828821B3AB4A544150062403E5590905CD011E777E30DA62941C55893AD2A1BF5E50D9B7D2B497152809FEE5E49CF2CB49C87AD68A9852145C80900DE9C857B3422941597DDBDC900F9FEF9B461DDF76F3F04DD76C3E2FB658EE256B8761183E1F7777757172EA5A014CB2E38DA10A5909E35A90123AA8819CD56B68E37702885391966391F7CE2E7E1ED9E274EFA9255660D4AE4DD6DC5A3F385FE203EDABB55EDABED378B6338BE2574ADD8ECF623776FB0586B8EAFDF2CF131882AE995294C90B7590A64B5A82273AA06D0DACC6602B2581B9D41AD4F1AC776F0FEC69625A1210024350240BD4F0ADAD6F3D78731F17984B16E2C98B661B9485787C172424812AD358907A6715C7F6A6304DDA0B50373AB82E38687DB978E8F2D230F204A14614E1E61EE1B90E062C2C57690DBBA96D0C85DAA3881E24CAC98911CB23CE3E4269D024CABB535A6B6EB6CDEF586292A54F05A84E560F62C5BF3E916A0C4EEAED38A5DB07C312C809320E796401CBEE2273AE624154FB9626CFDEBE6F67D4889C4EF26428D430A87CEAFFDE71B1BEC8BB0979BC6F68FDD0ECC23C172E6FF001D6AE5697412829B2B862E3300124808300E522AF5E1B96EA41A0A8E6DEF8DAED1CA7C598B32BE692A20310CE6F4635E55E01F48FD46377F689C3B63F666C4A63F0B816156F0065C4CD85BB6AC8F29498AF456C30D8443061BA18767C838F7C4F9DF69ACCCC5CC59B93F97F26CFA45EE1415313975A9B88E8F68820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20886C47F0E9429D5BA50BE24C4A8246640239CD658B3B75E7EEB5F36704952C92029B32C481D7DB72A431C582DF612CDB381B6D0DA9C7DCE284A5284859248D321399023946551F8A5A82083762E03B3694CC8E76D042D2A484946F060E03666B4E6072CFA47C5B7FEA1FF00E2238D31B43B3FECA7BAAC7949FC4A710636E6F70FB950FC280843F68875C657EE789EF27FA91331D6681B6311F4AD5BEDB8F404125EED99E3766D0C749F0EE1C26624A430514F61A7A91CF4A7CB7EEEB0DBA432B6F197495DA3AA7B0DB85A8F1DCA9F70BB7478D43DFCCE64684E7CCD722DAFB40852F749CDC3DA829AE7C63D01B064A44A416B80030D296D5EC7D488C8D7D8C97EE5618052D70A5000D3DD10743A4899D0CCE46A80B9E6662F7AE5C0B335684D1BA718B1CF91BD4614A583D2A75FCF786A2D9BBA1FD4D79CFA4E7DC8D0E43B0CEAC7296AF9391A0D2BC3F6D5A7186987C2EF4C14203DEC0D4F98D3EF148B06ED78D981C374A4C003FE9F231E4395474C4EF4D14BDDB2B135AD0FEEB689B9D86DCC39A1B162C6BE753EBC6E3A93FC19B76771BC2F6F3D8252992EE1BB2CF5CB974A20A90D7E22C8A9AE230401C439F38F4E85E1B961E58FA6AC6B7E7C69F78E03E392A499C9245281AF7AF2CDCE7AC7E8C585B29B6B3B46131C2CB0DB690232086C240CBB0AEFFB1C3615219A9CB38E0B8B24CD24B3B914E0D7B5625DBE7E9FAD4BC358528820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A208A3C41C6524111FDC7435A15805AFAC11E2DD4A412015C65091268F98343FBF79F9410DD37D6E484A95C0B248285101498EA279F2A3E60D0C10BB8F36D23C45AA11CD59401D4924563E60D0DBCFF001C7CA08F5A79A7D01C656971B54C2D06526323047435B82E1E0852B3045256018CFEFD68823CE31D0FCBF7A208B571E6FC4F01A09754A5AB88140948E15030B1D3A538972BE64B52B78242323405C93D843DC24D4A5D0A6B356ACF50E39DB8D738E7DFF115F6C4D9AF637F67FDB4DE063772E1BBBAC1AE2DF03B2B2527F1CF5D38C396C9534DA882A0D3CB42DCE1CD284CF4AAAED9C64BC382F352E410CE32C9AEDCDB5689FD99B3558C50051541B9142E4EEB3D2DAF611F975EF2F7D5B63BEBDE46D36F3F6C7164E218DED5E3776FDD3AEBEB75C66D5178EA6C9BB752C952562DD4843892609C84015CA36EED295B8A295EF1ABB106D50E34CFBF38E95B2B644CC3142D6592902CF60CCFC18FF548CF1B05BB1DF0EDE26CC6C96C06D46D0D9A1294E197383E18FDD372EC078DC2DB0470C9CA0F2CCF4E1FB73C45829626A9588952D52DDC4C50750D031B9B679657E8381DB72B01BA161F75B7788AE763CFB0CA376B63BF8757B536D1DBDB963763B4ACADE1C454FE11789038BDE1242758C8E473CC93A57259BF123032316A48FA994438DD3D4135ABD357789C3E2BC2CD48514EEF16003B379B77D62736B7F8737B57EC6DA1BCB9DD86D2DEA1292A09B2C1EF1C591130014807FD55B303F11F67CF425090D40EE0573A375BD4BF087DB376F613133025050A0F5620B372377E753A18D3DDB3D91DABD8BC66C702DB3C0712D93C5ACD6E26F2D71CB65D93C82B82D8521C1C43887E59D4C413CED9B3F6B49DA0B4992B1BCA228E0BF519B699C5BA662A54DC2AB75988EA0B3963DEFCCDCC7D13FF00E9CDDDBDD5EEFA37D5B697765E1B7828D9DFC05FBE8E1688B861C4385A77A119647D729AEC7E1C401F2E8080CC59CF337A172D5AC79DFC7C903E6BBA9DC84A43A8B3D407AB67A0ABC7DB058A38D86D695A5423549904C09835DCF6497C3279379C701C511F394002189BD0D4E6D1209494CCC671FAD4AC368AA8820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828820A208A4AC0319FDFAD10479C63A1F97EF4410718E87E5FBD1041C63A1F97EF44115032268823DA20828820A20828820A20828820A20828820A20860F2149716EBAFF000319402A80206797CE9057F23CFDF7BC11666D2EDADBE06C1164D1BD7D2098653E249F4CF4CBEF2C41166E05BCBB7BCBA51C630B7EC9CB8570A1C71A0DA441E104151CA4C41EC2688232C5BC9654B5A85CDA3E029224AA124663A089F97C48224ECDB61A6108B7484340A884A4400493390CB5A591FC4756EF0439ADA08457F98FA7D051045344116D62CFDD61C9BABDF716D0485A52A24F021225D24682132673F4A8ADAFB59381C217207D24BE74239E55F3D61EE130FBF346B4E01F2AF0C88EA23E367F8C3EEF77F5FC42FDA8706DC2EEA2EEF2DB775B1572A6315BAB75DCA6C6E5388B4D3AE788B6789A5F84B43807101C24419AF2EF8CFE24CBC0CE9FBD3095249F96970519BEF54D9B22CF7B18E9BB025FC94277F777BFDEAFF713715CD99983F988D9AF63EFE047ECE7B90C1B0FBFDE660ADEF076990CB2F5E5A6256F6D8A61697D438C8436F36160024F1839C8AE05B57E2999C66113882778108564697269525F3F38BD7F9094C94EEAD237B2984351ACE5BB3D63B05B19ECE9B98DDC61CD33B2DBBBD93D9BB665294B16B85E176F68F909802108004981A6624F3135C43C4BE3138A54C57CC7DE2436F56A4F17A5CEBCE23B153C4C56E041537FF1121D2332C6C34F4148CB78761B6966E8559D93F6481012C7861B291119240301433F2D35AA12F18668F9EA2CF5AF0D78039641B3A4252E6808604115078F0A173C34D5A24317167736E59BE65C711C2414AC05020F9E5E5CF2E734BE0FC512B09352952EC46741AD29AF730EF67CE5CB9A3E42D285121EE120D09B7534C985E38F7FC473D89374BBF1DD4EDA6D3B3B38D61BB6384D91BB671CB7B4659B8B95B2953A0AAE024AD45296C2046931AD778F03F8BE4CF99282144311BCE456A2DABD6B9DF9741C16D4C42657C9C42E5B28109DD35B5779ED95ABF7B3FF00F4F9EEA319D90DD0EDC63D8922E16EED0DF8B5B75BE1456EA307BFB8B702559ABDC4011F488AF68782270C6C894A0E4A8249734B86BBFEBCE39478DF1BBF3378A80037C12E1C3D1F5173D6B58FA6FC25C53962CA94C9B739A7C2524A48E131307918915DFF00662372424337D3F88E233CBCD59077812483CEBC35FB448D4942505104144105104144105104144105104144105104144105104144105104144105104144105104144108AFF31F4FA0A208A68820A20828821647E51EBF53441155104144105104144105104144105104144109ADD4B7A83F7FEC51045958D5E3172EBD69E25CA1600109308CFA798FB148ABF91F77AC109605B396885975E6C5C2559C3E0288E7CF2E9DFA56B043EC6B6770BBCB77FC4B0687829E2654CB490E056B918EA069C851046161B6DB43B3B72E30AC3EE6EF0F61442129694B5F082604640E9CBFD10465CD8DDB6B2DA6C383E8B67AC9F6F272D1E4043A0CF240CF3D7BF6AD3E60058127562D5CBBEBEB045EA8B84ADA0E942900980958856B12474E7E559F9BC55EFAC11EA882B81993F2C86BD3E7419841673C6BD7FBB41082EE1A6D6B438A08298CD4400644E46B066D0D5563EEF19170FAC6B27B4DEF217BBFDDE6337B68BF1B14BE43769855B33EF3CE1BA5FE1DD52500F11084B9C448D0024E715C8FC7BB653230D3D1F308514AB76BFC6878E7DB57AC59F64618CD505252C10DF31EE4AACC1ABAD79651AAFB8ADD4586CBECB8C7EE6DED95B7D8FAD7758962A1224B6EBAA759487A3C42B6D973848568A112057CEFF89BB7277CE9FBB354594AA856A5D99F8E94B333C5FF00012CA081421830565A1F4A371E7B09636C6C4ADB45D5CBE98042DE5F12CAB55051FF00A857E5E511E47CF3376B6297356D316CFAB539D5B36F3AC4F7D6A4212B4CB3BAE086A0193529D33AC797AAC42ED4DA0A2CF810A9F1784F8E04823DECF3FBD29862264F9A1D44DEAD7BE7C6FE56B0D44909720A9943F893F4B8B3701A449B988ADBF75B425C504A4788E895929039F6323F5A55789F978420ACB806A491E76A0E19650C66CA284155537648A015CBC9F9B690DBF1A5FF0076EADD95248E4993DB5E9DC4F5E75CD7696D5988C428254582C3E6CE79B71FCC35953D52D745117A83DFEFEEF8A37C96F60FEEFB1F6EE2D9B364E5B969D4292381497429052444199C875AED1F0C36B4F9B8BC3A43B1525EFADF4EE474CAC92316A423E62D64A88A026D4AF916D3A45C3EC57B23826C66E3367ED365F09B5C3106EB1277FA4C21A5A94F5FB8E294BE0E64A8C1EE3AD7D51F84A93370787047D44249241E3566E57E4358E61E2A9E664C9CA2B5105BE924103CF37A664C6F95AF1F80DF88657C2388832248072F8D7A525A021200D07908E7A15BCFC0FBE5CA1C5291B414410510414410510414410510414410510414410510414410510414410510414410510414410510422BFCC7D3E944114FBBFF0064FCFF006A208A8249008220FDF4A208F780F51F3FDA88214488007DEB4411ED1041441051041441051041441051047848027E5D688222DF773E7EA72E5AE7F64FC48220578797AE4BFC392C8CCEA741E7AD22AFE4608B86C5AF0841CBAFC3B9ED5AC10929775F89B801014C80380998329CE3B7DE74410CADAD6C9DF1BF1366CA8CC9E3427424E79F59E9441186DD79EC1F780EB966DF87875C2D03C240842211072190939F39FAB259AB07073228FEFF0030466C2E2AE5F6024FF4D29E254130AE2483D391F856AE753DCC10A5C5C1B40FBEA9E11C013AF3CBEFEE300AB3513C6D04446216CEDFAEDDC4ACB49852DD5494C2520193D3219498AC2D442165CD12A373A18C8B86BB86E71CE5DE862973BC6DFEFF00212E7E236536023F1E12A2AB77DCBFB70A678A4F028A1D1CF307A9915E2DF8C1E334ECEDA33F0666B315021F813DC7987E71D4FC39840BC1A5652904E6CD6377A0F74BC66FB36DBB4C2587D88E06F8901034080AE14E404649033E990EDE20F16EDC4ED09B30EF05051373435B8C87DEF16642129510033588018937ADE95EDC22590A0E202D26028498D67CFF00DD51654B0BFA88CCDC31CFAD72D1ABA43C4AC001EA78DBAF0D0BFDD839289199E83D358E5D3AF5A6D8C9D2E425449A797E32CB9D32541053BB40C439D1CE5C7335147610D56E24B9075E632EFF007DF99CCD57B158EDF96B093420D34D2D5F778D9787DE946809AD49176F74E59BC535503825E2A7B004EF2AE7526A0B7E7ED158992CA66804B549616EADEF84620F68571D4EE9F1566D64DD5CDDE1AD3694FE6295DEB685E999C952794666BD1FF0AB602D38AC3929FF00720B805AE3D7EE7A494B5A84BC8848BF3D03E9D78D236AF725B3AD6CE6C060384840496ED10EA931C2429E4A5D5748F789CFE35F55BE1360BE460E43803E8431B56DC78646B58E6FE235154D9ADFC722F4F747AF2CA33D5BBA3C24F1647A65CB21CFA0AEF4A67A5987A7BE778A6243121C1E5D6FFDD216F151D7E63F7AD6378AC104023434411ED104144105104144105104144105104144105104144105104144105104505694983AFA7EF4411E78A8EBF31FBD1041E2A3AFCC7EF441078A8EBF31FBD1045054D289F7E09E522474D3CA882105DBA97F957944E4743CBEF9E74410E59429B6D295192264D1042B44105104144105104144105104144105104144109389242BDE0001CCE9FB4D1045B57B74865478B88C4CC73FF1209F5D288225B0E75B7ED1B7384E723319E47BFC7D6932824921BDFEE32013610B2D694C8022798EC7B47C72ED4990C723CA164CA0AAD85BAB642FDCF78667124A16EB5C6DFF004C0993EF264492AEDDB23DE88DFE466DD03EB9790C83968B3711DACB1C39C2D2EEED9F79F3C286587029D0498F7933AC91F5A23030E4BBB86E5EDF87E229C130379EC42EB13C490DA997FC35DA367FE46C47BC5615A7148E1035ED35ACDC12B70AF79AD406A59DDFECDC21BCC1F2D401B17E3EF236B18BEC2036DF0B412956504F200E9941D341A77E906711FEB7C904EFBB1739F063EB0A84A481561A8F67B656A44462D78D7862DDC9487149F7E3DD94107CF5C865AE50273B1E1B63CD9F2FE605BB07202AB5C855B8D78F08748C0AE60DE410DA532D6F56EFA462FDEFEF230DDDFEC5E278D5E5C22D12AB376DED7C4586C97DE41619E19227FAAA4E633CFCAA8FE2ADB523C3B266AA7AFF008CB5B82A1FF13C5A8C73CB38525ECE5CC514A6AA494BEE976E63D75EEFA05B91B0C75DD9DBCC5B1C478DB41B497770FE2D7484AD41DB745CB8BC3F816A1C4A86149078B2E432815F24FE39F8E93B43C518932261DDDF50001D2F47A5ADEC760F0F608CBC000A71F4FF00B8D0737A57FB8D87B5BFF0D3FCB1E65E408010B526100E5993CB3CE73E95E795ED799356E54482753AB96E678826260E11EA92E03B101FB51DCE629F68B92D0165A4B4B3C4A124A939A7324C4E50454B48DAA809DD20BB5E8C7F5EB09893AB5CDC90694AB7AFE21DA4CE71A9CBBE83EB95426D19D3315BC104806C051EF42C076D7ABE486247BF6D10B70EA19B8216415023DD1911F1D7FCF6A811F3503E52F7897E94AB74A7BBBF96B4AA5697BDEEF5E9D876878D02E20B8AFE93600256E7BA8CFBFA67DF49AB16C7C3854E4AA60012487F2B3D9ED71C6ED1058993BD314A4B3E82FA656E1D58C618DE4E3981DCE2182ECE5C62568E8BBBA415B61E49092CBA858E313919194E875CB4F587C3618695370E5D0900A6EC0BFDEF566A5A12FE32D60A4BEE9A0772CEC35A8B746168DD2D9CC5ACAD3F0564CBCD5D7896D6E96FF0EA0B0809653F9A208D07F800CFD0AF00ED5C14991210264BFE2960142EC2FD0DB5E158A26D2C24CC4C954E52552824A89F9819C12599E873CED1909CC52DDB70B706404E4223300F977F9D77594B913E58989C44A0E0382A0EEC38FE69DA2AD2F662948DE4A98126A74761D34E70A22FDA5E8950F3F5FDAB55AE52003F3659A904850CBDE709CCC1290F576CEDD6D6E6444A34F23813C326674923BCEB07C865A5335E325A4B0208D41E5D3386AA96A45F26E07D8CCC0AB9099046604F0C67E5AD23331E94644962C067FF00DB6F65A1B99890ADD37E7EF5B3C788BB4A92094A927A1107EFCF3ED5A2768EF16DD20D1DC0CF8D7D2174A0AC021AB50FFD7AC565FF00FA89F3CBE84D4A4A0A58DE2CC6DEC0F7D9F3F2D4ED4ADAB4E5CFFABC79E39FFA8F89A5770EA3CFF119F92BE1DE2B4BB2341E99451B8751E7F88D770F0F7D2140A07B1FBD3AD6A43163946A43163945548AD6524D0306E756E3188A0AC0EA7CBFDD227120121879FEE0838C743F2FDEB231209018579C1092AE1093041FBFF34F512D6B48506AF4848CC67666E37F231EFE21249804C7435932D42EC1F9FE23433C26EDCF2FFF002848DE278CA122549891CC489F877A426A8CB2D4347A024D9CE7FBBD28635389A80002F9BFE3D87EB09AF1065B5842D412546005644F909FD67E94C958F4255BAA0D56AD3ADF8C60E2802C401DFB33C7AE2D2525D198ED9CE5AEA7FC548C9DD9A84ADE8A7A8346F7C6F02A7ADDC27E9362DDF87115ADA1AFE2D80095389491FDA489F818A658BC6C9C3024AD34A9721DBDF0D03830E657CC9A5820BD1A9ADBFBB738B4368F78BB23B24C2EEB68F19B1C1ED500A8DCDFDC22DD8000CC95ACE83E755D9FE2BC2C956EA88E7A51DCFBCE26B0DB1717894BA10A3C0073D83FAE91A6BBD8FE257ECB5BA7656E621BC1C171E75BE20BB3C0713B3B9B90A4EA0A14AD7B76A64BF1C60104825D9EA18DBF7C62CF80F87DB631D284C4A02378D1330282868E32D7567D239FBB45FC797D98ED31FBD6AD30ADB7B9B7B72800DBB366B4AF2FED21C00F383A66075A8099F14B672715FE36ED49005BAE74EB6E313137E16ED3C3E1FE74E22953BBBCDAE9D39C7537D943DAB3653DA8F77184EF2F636C318B3C1B17F185B5BE2CDB68BB3E03A5959525B5149F7812209C88E8455EB656DC95B51095CAA6F65C3D7AE6C639FED4D953366A9495D4A0B1777ED973D637090EF124129209131D3E3156058280F43C8F2E1C620D13378B311A93D721CA2AE31D0FCBF7A13F53366FE4FF0088557F43BE515020891410D431AA54141C47B446D051041441051041441051041441142E214329313D4FEBA510441DD61FE31396B3A67F5FBE7144116EDC58E2ED38A45BBFE1B00FBA9E25089CCCC69D75FA524B51721E9EEFEF9DA1E61D28287500E4E6389F7588F5D9ED01822E675CF8D47D7335A43A094E4057AFAFB31430E5C38DDED93E034FA1290BBB57BA973881885E731FBF9D101166715CBFA3D85333990D706D8FC2BDDBEB809BABB0A2A4B8785680AE23A1226040D3A40E704614486622D576F6E7215B68F1925A49084050485240108D0002123E1197A695AE331625C929CCD88E4D41C751DA18CD413535009B8F3F261AF011497614467AFA76EBEB1FE6AA5225AE662F780533DCD337FA587BB57368AC48954CC137F74A9A30A5E18E236D6D76DF84B212E6AD9D0A888309D27400E7CE3A55F25E32660A56F95B0082F91A248CFC9F4E912180C7294A00541B8CDB3CCB665EA0718E597B6FBB8CEF0369B61B73F845CB96CFE2578B7AE54CAD4996EC1D6AEA1C89905082065067400D78CFE37F8C4A7FC994164B058A13620F117BBD0718E9BB0F65CA9F2862124013189529A841D73FBD3AE68C1997B05B7B2B266D90CDADAD95A5B97B87852A71A61B69C515692541473CABE5CF8C14ADA3B5E762007056A2146B43E77A791D22FF00224A30F2848241DD01F7454BD6A1D988E2ED17336DA5E22E3C443EB4E7C2D90A333066333D32CE67CAAB08D9EA2E40A92CCDCAD46EFC808C198949284A4A121C1DEE232F4EBAC4DDBCBCDA5650A6C1905247BC08CB31F4CCCF5A7A8C1AA8198B54E8F95B8356D0D17300A3D4E6FF007FEB38916DAFFAC18D32FD33F5FF0074E656CF35A10491522CFE8D5E5943698BDEFF00711A9B69FD311C231A6F0F0ADA2C5ECD769B397D84D95E70C071E756DDD024E454532476CF41CB28901B004C4098CE74B922D50DEEA79624CC095AC12B3BCC5CD5218656E02B7C8EB801BDC96F571869C631BDBCC5ED5974903F95624F200049309E21D08E5CA9038656115BCCDBACC2D6ADBCBED1BAD6925560750CF4008E397DE2DC77D8FF000A7AF6CEEEEF6EB789738C30B5AFC7388A576FC64CA4A5447140F9721573D81E2B56CD5A1456A1BA430701BCF26A1E1A1AC7CC595294459C5412E4B74D2FECE44C1F731BCDD97BD373856DF628B602006138B624F129012520980069198CF5EF5DCB60FC619D8308099EB1BBA28F0E34F40618CF4A672548504AD2F621C3F1D4E5700DE2FDC3B6977D9B1CD2157ED5BED132C294A5DD3097EE94F02660AC91309CBB1CB4ABCC8FFA81DA4852509C5CD01C0AACB3578E435111337092C277004A5811BA96043BD59BF558C93B37ED2EC17136DB4BB3D88583A212A58B50D3614041CD674CE672EF5D0B617C73C562952D33F124A54D5DE27CCAABA1CF38839FB28B1DC52C924B6F3B6B4D2FAE7D6335601BD0D8DC7941FB6C79AB37DC88B4B9B94204CE49080499EBD08EE4D773F0F7C42C163928F99392EA6FE4A0D5B9A97B674BE510D88C0CD4072016D3F96879F6ABF01191BC67EF5B4B8976DD76CE094BF6EA2551CD5C432939673E75D7765EDAD91884A54B992882D5DE490F9558F971A8688C560D2545D2CACF7A84B016CE8C5BD6CF5B6E069210DBA5D4670E2D4173D4714C64646556F9123093A5A66A11294156290922F46A3380CED9C2C896508B330ADC96FC5AD9C48B6E92331946503AFAC79D23895A70E92D714DD1DA83DDE82125ACB543317E3C21D0526341E801FAD468DA254A6097E3EC7BEF0D97308B5341FD7E5BEF5A4A4E994F2FF1A7C3D69F4A9E99A2B43D9E9E46F639776EA9CB0ECAAD3A67D7CEF0BA220693F3D4D616A4A5443B935157E37FECEB0A4B51525D5724FDA2BA44A4ADFF00AE83DF38DE102412634FDB2AD7FC71C3CBFF00D608F2B230E9F607EA086EE708566067CC810329FBEF4BFCEF94022CD4B1AB572311B389DF60F6C8FD87BBC15A1C600F9B5873BD1F58525CBF983EA4D746A5CEA0E82185F3B656ADA5E7DC5214A39F86614A8319CC4C1C8672396B934993D0B503BC1D4ED5CBA16032275A43D95B3D730EE84D732065760CF907A88B3B6AB6DF65765B0F5631B478BE1985E18D214A55C620FA185A40199E224267BEBEA29B4C9725492A2536A03F661EEB4687B2B62CC98BDD32D4496FA98EEE84BF06FEE3955BFDFE30BECABB8BBCC5B0D6B68713DB3C5EC12529B2D9BBAB3BF4F8A50A29496F8C2A01D408CB903542DB3E3093B2E62B0C998A0A4B8A1A6BA81AFA3DA3A36C5F00E37192913552A57C823EA0C77EA28D6F4E85A388DBECFE3CBBECDBBBEBAB7DD3ECF613B3D8195AD2D398EDB3F6D8B96E4F0AB89973878C8CE4643280245738DA9E3D54C27FD4357ABE5C6B9D2F46D6B16AC3FC3D129BFD206B761992DCACDDDDDA39D3B6FED7FED39BF5C5311B8DA3DE66276F86DD70F16096D8B5DA18680490B4B76EB51090A1DF3CA6A8B8CF15AE62C8DF24AAF527EFE4CDCDA2EDB23C1C990A4112D346B8C9EE28FE51AE78DE39676ADDDA71AFC6DFE22B0A3F88BA8778972493C4A20E67BF3CA342C7FEFAB50BDE97AD69E9E51D4B65EC544B4005291BA34A59CF6EFC811185B0E606278AF05B3AB37B8B62D85DA35689325297EF1A60C379900A57396A290C0C85E2F69267392EA15A117EFADC6B5884F154E461A42E582032482006B7E473CB468FD14FF8766E72DF72BECB3BB4C19C6CA2EEDB0D174F248851388F8770272CC8F167EF2F5578370DB9869273600EB517E793B5695BC7913C598BF9B8BC44B3FED53825994F577E047D9AE23A1A93C494ABA807E226AFF882529000A65C6CFE6DECC52B0F55BDCB9278302DE7CFD60041CC5664972068FE6F0E27D52DA8EB710B2343E7FA0AD95FC8F3F4A42328302346FBC57588560A20828820A20828820A2082882122851513208310348A208560741969DA8821A3D6C1C515152B38C81D0F68A457FC8FBFBE9CB942B2E66ED353E5EDF586CAB04ABFB9D1EA63F4CFBD6B0B7CEA30207FFEA9F6880C6F6751895A1B66DE76DD6A20975A5702D4279A867A081D46BD0119130D492492D9E598EDCF8C2D85E088C330F45936FBCE2923375C502B3273CF4D39FA5119F99CDBEF639B5BEF12008B5050AF154948F796BCC99EA7A74E7F5A467618CF0031700B3FE3DF2816A0A41248B331390B505B87DEB152805A4B8D9E21049CE4E43B4F4FBD4AB84C0224A82D4056B517A93C3AF663157C6EF952B75EFA114390A7363722ED68B7AFEE12DADBBEB8712D34C3370E34851E152FC36D456540C03F964768CC542F8A368CAC360E67D607D2A6FA99AE3CECF9D4D6253634A9C54860E094B8625DCB1CB4C9BCAFC45DB7F691D911ED23B53798B0BA7F15C11E6ADF675868A14AE37982D5C00951E3954641199244D7CE8F8C38D9D8A9F88521649758BD0D59A8C19B2B47A5BC298290AC1CB92B037581340E480F9687BE5568CBB84E39BDDDBE71972C1BB6C1B01BA585316F8925E63134B6A5492EA40291C5AA0E85275E55E47C46CE54D9A4A85779553EEAF52D121B5548978829960519D839A00D5152D4BF03C636D763765EFB02C350BC42E7F1576A4F12E1456DF144C0E283049F5035AC4BD937FA43BB00C41E449B0CBCEEF15F9B8A2A59417E2A0EDA70635ED98117AB16AFDC3697941A41512385220009240D27BCF7A7C8D904B7D15F27F2D7422838C3533C2014825441B90E7BBB43D459B89E69D3BCFDFCB4D29C276492A622DC1802296B1E6FCDE105621F3B59957E6FF88A6E703B2B8683A96909BC2656EC09510444919E42227A6B06A625E125CA921012A2B63BD620F07F7D2F088C5CC44C505281416DDB922D723956A5853587B6B87B4D33C0F296A580608323CB965AC79F28A86C5ECD4CEDE0DF5170187BFED9A8F189B899A4FD0CC4DCDDB872D3CE133873438D456E05E5C1044089D3991D79C54327C3938A8B254483F4BDABC72A5A03314A29DD2376CAD6DCB3E6C6D94242DDF7521170195849212482441EB3D80F86752786F0E63A852086B81A5FD321F78DBE9DD26CAE19F3A738F51645B5296979CE1207FF001B8A2D8408C91DF9FC69E0D97324ABFD451749FE24E79F115AB7A65A6EA492E91FFCC456B98BDBADE2DCC67671389A148FE578392ACBC47191C7E64C6BDC472EE2A57098F5E09492950013A65DAB95C1343586EAC3862417E7DA8C29EF40D8C712DCEE1D8CAD6CAEFD5835E364290E614E861614731275FDEAD381F8838BC090113961233DE37EED969DEB0CE6E0D2B2494D6AECDE85F864F9E822350FEF4F7560376589BB8FE12DCC26F9E7AE6E3806790100E444E9A4559F0DF1AF6AC8094A71539280400CB56B5CC0E43BC319BB39054E101CEA32BE84B7F6D431943607DA57673137D9C07692CAF301C552AE05DCDF368B6B0796A248F016A32ACC00ACBF3111DFD31E02FF00A81F9B80932313892576FAD7516E24F13DEAF1058BC1A82D4121806B51DF2F57A74A46D2DA6236D72C22E18790EB0B48521E4AB89B5057BC08568723967CF4CEBD0FB07C6B276F041F9A0EFB31DE70FA82E5F87488C9B2181A392E0822BCDAFCC5697687CBC4ADEDDA6D450B794A2470B602940CEA474CB289D0E95D43038144E4158DD60017C8BE64B1D73636BDE21E6A56926967C891CBD3BD9E1F255C680E04A803FDA47BC34D47DFC6955484CA528A4BB1CAC4559BBDA90C26129C8F4BBBD843A654481FF975D79C5472D6EB22AE0DC9B30CBB7087D20BCB079FDA14592001D67EFF004A7A9237732D702F5261588EB8BC0C29280CBAE951CFC34C84CF33F7D69CA64EF237F7D22B626A5DEDC9ABFAAE5AD6AF71CE2BB8B945BB5E32C1298931A8F3F2CE7A4674829494920A998B7AFE3DD1F1112DE356F72B73C169D5A1A897801C19CFF74F633D0014B8952E6A77C9497147A9A3BF2F4F386C70AA98A4B7FB89B7DF367E50C76876B304D9AC02F369318C42DAC308B0656F5D5E5C3A96D96508924ADC3EEA6025524FC63484C7997252A5EF064BB817BD1AAC28EE747B9896C1E109989941277CEB6D79E8DA18E0A7B647F1CEF672DCD59639836EF71DC376DF6B6C92F31F87B4B9B5C46D9BB8014801286DC0B052A1EF4E7293A72A26D3DBF2F0FBDBA40A666CC2E3D0E61FBDE3666C45AD43E67D24336E50915BE7406C3A068F93CF690FE27DED2DED3D8CE22FBDB71896CA6CB3AEB9E1E0985E217564A530A51848B7E2289E18303204F3CEA958CF1B1438334B00400154CF5E83BC5E70BB092129FA0BB8A33E62BC41D7D19E352F655AC731FC4978B5C620ABB2FAB897738B3CA73117540FBE5F5E739E692732233E75CAF6FED39FB4710A9A851AB9727D2B5E14A748EDFE1CC148938044B28E7415E56B1E3EB4CDE19526DA54DD895369F79C00F1E594827B0FBE74E9F2F12A7FA946A6AEFEC657CF8C4E2A4E140277464C186B5CFDD1A14C3F6999B26CA584DB32FE61C7D43856E6A004A844C4C08EDD2929180C44D58241041CDF3CE95EC38E51A7CF91203A4806BCCB52C33AE6D912F18537938DCADEC41CBCC482585202DA65CCD7C6A480509332003249D055830BB1672EAAE14A6BD73CB8D5E31FF7C932412E2C74A30CEB95697A56CD1D0DFE14FECC175ED3FBFCC3EE2DEDAE2F3677642F70FBCC5D7768E34BC55C0FB019500524A16DFBFC530418ED7CF0F6C55267CB74BD45817A5DB8654D699C722F1A6DE42BE6913004905892181A80E6CD501AEF5CA3F431D9BB0B7C1306C2B08B56C2AC6DAC2CAD136CD2415B26D5869A1EE400904A24EA20798AF49F8730624C8410186EB579598F1F5B078F2FEDCC519939656A054544BA5D98BEEB74A3BDB52232234A3E1254A82607E5F8019F3EB53D8B6000E7EA3F0623F0409054482C00A5AAEDE5F8E752223D73AD30EFBC092F42DFDFB6873882C87F7710E11A1F3FD052CAFE479FAD611945C13AB7DE2BAC42B0510414410510414410510414410510414410520A0CA3EF8FDE082B10422AFCC7EF9511973A9EF14D106F1D4F7860DF8CAB8BA4BE10AB684F8204951CA4F148826748F2E735A9C5A650751B02CEE7EF4E7A16778C09BBC580AE84063EEC6A6F9443629B4786601875DDF62453656B6E852CADD86D30013CFDDE5CCF6D74AE6D7F1548C14A51DE09DD06AFA5433177763D69430FB0FB3158B50F9680ADE672059B57CCD581E2F1CDFDE56FCB787BC1C6F12D9DDCD5ADB5CD98E3B5BDC5313438BB669B7125B51C35E6090161255C53202C0D6BCD7E36F89328A66CB137250A9B5C3DF507A3F38B860362FF008DB8A5218674B659B50DC509AE9168EEABD92F6236318BDDB2DA2B21B57B758E3CDBF7CFED0A1ABDFC1BC1D24FF2F2A4F88D8014A8933091E9E5CF106D795B5A6AD5BDBEE54595506E0E64D281B325A2ED85DA3FE1CB32FE61960060A0A62E1A879E7964CF1B9B63B1D86E1B6ACB8C3447B89290E2471A724FBA3A246881D001CEB9D62B664B52F7D018073614CAA3EEF4E108AB6B4DC54D50984153B1527302C78DB8005DC9891B64F128B440E10787CA63491A7AD272F67241FE2031B8041200E55E34EC0C6AB98A0EA2C5DCDC9E1C3BF9522585B86FDC48303CB9E7AE9F3A792F673D5A8C031D682DD1BF30C264E5283871AB0A9B0B547BEE785D95F0FF0014ED1B2C33EEB16CC1AF260DD4F7D10F9A599D479B7A8CA3D09E1CB3F5D6994EC0284C6018756BFBB423F3EBE66833D6BEF8C7B4A48D9C1C2D6064F47BD6AFAE5C7BC3844DDE00062D71E9D385E8D14139E5F993981C8CC4FCBECD4EC8D9F86491BC9191B015E7D87EACE12A041191BEB476EFCA1322091D3F6A974C9C24B05928A248A00F6CBEF0B82E1EC4E9CCC56940201CF3CBD7A695CBFC452A69C72CE1DFE5BB0DD2D95CF3F57845530A0EED2F753D7367D6A2CF9F5ABC2ECAF87F8A869783C44C0CA4AAA2D56E1771F9B88D7E6162412599EA73D397210C8E0F6C1F55F2DD5071504A240D073CA7A7E9DDEA36229406FA40725BE9E37CB3BB346BF31CB6EA8F162C6D639F56D213B976D5D4969DB64BE902389490A1D33F3D3F4CA96FFD3A08344922D720F4AD9C3F93C6C4004A98BF07E568B2368762764F69EC97677383376D7290A2DE24DB084396EB2642D0F1CD241CE6397A544213B4B66E387C952D3292A0480481A5851E95D7267845782DF3BE405050240CCE7A54B861E4D5318B707B4DE4EEAEF14EE0B8CBDB5FB3A544B96F7AFBB7CE5AB4924F0A12004208048E7A67CABD2BF0F7E224ED9864A67E216D2F75C1516AF33F8FC4362B6703FC5212EE2A08347B7EFD2367776BBE2D99DB05A70D52D16F8C3502E2D5CE04A90E1904044950CC73123E75ED1F097C58C163254A926783BC00502A1C19EAD6627D728ADE3302B1FC523743B8CEB9E56CE8391158CEC16A2DAA0057BA4A38648D32E5F0D632CABB16076A4ADA32C2A52810A17497EB47CFF262066E1EA686DA6432D0713C4F111E58ADCF0506E3DD72552279126358E47965D28988DD9B7725C9D052312D3BA902DC0C3C52D2A882329D48EDDE9FCB4921C0BFB17FB7DE3788F7D01FE34F8A5942735ADB3C2B3D33CF29D7D7AE44E9A99128953BB6593E5EEEEF187AFA9C873310B718B58D95A3A1E778AD5A0A2EDD5C94964093C456BD00027B0EF3548DA9B6C4B593BE46ED6FD43D6B5D736BB53748ABDF22E282A19B9F7BE4CDC7DF6F5FE2F5ECE3EC4D86E202E2FAEB6C36B196969B6D9ED9272D2FCA6E4A6129BEB6E30B0952C8200CE388C659D77FF5FE1E4A861953909995AA94C2E5DFCEE6D5368B56CED96AC44B44C4A014577C815625830B39B13C0B111F15FEDC3FC6A3DA8BDAF710BDC3F0AC7F1DDD06C3DE3AEB565846097379818BDB75A8A529C4184AD4DB9C42240CB356550FB43C609C4AD72E4CC1398FD664AB791517D0EA7AE6C22D5B3F634A97BBF4925FF92C7D4FABF0A7ADA395F84E078DDE622EE33893ABC531ABA597AF2EC294F5ABE552A0E070C2D4B20F12C9D5649E66A83B4F689C5297F2D4ADD36DEFE56620E82EDCFA8BF6CDD9E12120A4134AD08EA7FAD38C648C31FB5FC4A18BF47E19F1C291E100949E44C9CF21F03C8553B1180C5CF5B82ADD7767367D2FEA783C5BB0F864A775EC187D5567B90E07F4C4466CD96B816F72B6997896C04F01E29CF84731D3C8FD625709B2CA640F989753177048F57B171CF361163C2E21725210927746552D7FEE9F78C86E5F3C2D5E01D3F96667E1AC1EFA7956B330528120A6A08CA9D72E17ABD61EAB10B2C9049CCD781E6F4BDDCE6498C4B88E32BB40E3B7971E1B685136E4AA38D45449199CFDECB2F8D2B230B2CCC0C81CC0A3D05B3BD39C44E3A74C092A06CEC3837524FEA31DE39B4F717EB16CB42DFBABC7ED6CEC6D900A94FB974EA18494A355105C4E911CB4AB56170B2804B804532041AFDF2EFC22998EC64E439DE51BBD4B0FEAF957B1FBF2FE04FEC896DB81F662C136DB1FC33836D36C6D85D622A5B205D34D78CA72D64A93E20059746BC87202AFFB0B67A4AD13129B33306BD1B3399A76BC71DF166D19931464A95F4AB789075150D503DF48EEFD95BDBB3C4A67371E990A8CB52223489CF90E935D87038712B0E80C599C96BB0CDA81B839EB1C7F1B89F9B3D8549D7514AFB01CDA25D8694D3010A571112A999D4F144F3A6D8E98CB1734A0FBD876BB44A6046ECB2090E58D0713FAF6F0A224054093965EA6B6C2972391F407EF0A62BF80E7F88748D0F9FE829C29DCB97E36CA1293FC7B7A98AEB585A0A20828820A20828820A20828820A208283404E90426A58989223A18EDA73CF2D4532F9DF327096902B4734F7CCFEA36092438F7EEDFA8A38D3A052893DFA7953B54ADD04BDBDE43DE51A2F7902A070ABF93088C77114A2E0B1E138B331C604A64C6A67BC9903F5AAE62B6D4AC24C3294952C82CFCDDB3CF2BF384C6F28D378F04F36F7ECC2AE5DB698E24AF212A29CF834FCC7ECF6A98D9D306D097BE92CE1C0A7637F6F0BA70EB51DDDE21C3B17B67A03FDDE2DEC5B1FB3C3ADAE31572ED962C2C5B5B972FBEB096CA5292612AD388C10419CFA662A9DE2CC6AF65AD692ADD090A2429B9D5FCBABB185E56CC9BF3A51049269BA5DDBB5732281E39D9B7BBC0DADF687DA0B8D99D8470586C8D83AA6713C56E54B698B86C9215E0BED92DAA0A5691235307531E55F1E7C424C84CE97BE428053170C2F6FC9B9E317DD9721184402A439A1500DBC454D985B36343934664DDE6EC300D8AC0DAC330C75C200972FDA523F10F3AA3C4E9538912A4F19504C9FCA44F39F246DEF16CFDA78B5844C56E952AA0F13C69976062C93B169284FCA4A0518850147A061C5F57A5728C9E30D65B4B4D332EA1325C5BF9BB394709D067DE72CA29FEC3D978AC6292BDF25370E4BD6EFC2B50D4E358AFE2FE6CC7650E0C580CDECF7A1C83EB0ED4DDC7861A4B9C484880567DE8E84F6E5F0EF52F8AD97364CCDC25E81C1BBD6C19A86F0E30A7E5206F01BCEE5FF007EF46786ECD9B8DAB889124C920F3EBA09FF0011148A700C5C8F2ADED63966E4DEA61D2A7053B9150D70C29CF5FCF08921319EB4ED18548CB93DFD0FBE10D94B2682803DA84F33EC426A7529E44CF97EF4B09433096E03F50814A8DC8E4E5BD228E20A923E741C3CA374BF36FC424A9449AEF1E469D29482B53874D40602CD6B743E50B4A0524124B747A0A353D6E1F8414DE648985B74D9E9563A519BD5A1E226240AB5793F23584CA0924E59F9D47CEC1E35544CD2903FF2229470DC7CFAC2E89D2C2402AB727EB0BA084240CCFC2B28C3C84A00C44BDE99A90E686B535F2E1C6194F52A62DC1000E3F703EE62AE31D0FCBF7A5449C2972896906C1C0A33F0A75E9946A14A600914CC67A450596DC254B52E0C6423C8EBCFE548AB0C924EEFF10EDD790A6679E90A198A09A11BC727A0E2457850FEA02C3491FD3409FF00CB9F63CB23CFE1DD33849AFF004EF30E0587DE83EF78513369F536562D6A171DC8E6D10EFD95C5C38A0F381A6103DC4B248F132829781FCC397918D66965E0F0870FBB3100CD62E480E789CDAB6E22F487D2F1084A494BA89762AB26AC4A4D18B1B0CF85DAB9625F49B77382CAD888526C00429D11FF00ED1A2A7B81A9EB3542DA88C5E1967FC75196905C6E929B170E539DB33D2D0D66265B28A54A528D5D4D47B80EEC0BF105DAA5846BD6DF6EFF0013B1C5DCC6F76C9561F8F2B85C78DC4B56F745B0090C168712D5C20F10CFDE396822C7E11F1963F6762A4A66E21659401FA8B1008096CC9D72D6EF11388C2198414335406E3776D0D99B3E117EEE67DA770EBCC753BACDB65BB85EDCB29F089BC29658B85841582C970F88B052019E73CF9FD00F85FF001230F3244846217BCA5000B9A1714BD620315B266B19A94B807EA09FE4C7986A3871F88DCAB3BE57876C8BA520BCFF00190B41FE9848CD3AF2298CF31CE73AF4361F684ADA4533A5325243E42841E26BD74CAB159C4A55266143021E87D5DBD323A3C4938BE00550549001E2198331A7589135609612100EF2599C97146615BF6CEB1B4997F3684B1CF2D5A87F3EA230E6F3B7C5B2BBA7C32E718DA3BD69087504B5685C407AE1491010CA164712B888100EA467A550BC5BE26C26C991314B9A93BA0E632E9A8BC4A61F644D99BA405104DF235BF12CD4EACD6E6E6DB6F5F7E5ED28B7F01DDFE16BD87D81794B6EE318BF62E30EBEB8609502BB47DA25B59D609C80226BC87E34F8E7B3F674C9C962A3501B758F98EED46A71964786310A620B39760F605F95A3125A7F0C1F673C69C462FBC5C2DEDBFDA0716A7AEF10DA466D71271F7D47895C4E3A9E25210A242330427872E9C2B1DF154ED19AAC6C898B421C90016A0241602D6F4A5CC741D8FB31586C3225A92193725EBE55E74FCE16F685FE0B9ECADBE0D9C7ED304D9AB6D95C69B6949B17B0AB4B3B2610B2212A5292D9500204C09E94B6CBF8B0654C08F9AB05446F1DEB9763636A1AF4CA9328F9685329296A1147B54BD28F947C9E7B6CFF000F9DE87B186DE5CE0B7B762EF615E717FCA719B65BAE043613C4A4DD5C1425B1EF282120089D6BB3F87BC6183DA625283998AAAC16297C99ECF9F6033899C16365A5410C2AD6CA8D90FBDED1A02EB88B0B979448BC55B94153AB1C725794A5594C48E233D72E47AE6CE99849884A952D2491A034EA4F5A18B4E16626687B0CDC50F56C88CCD416ADA2ECC27690D9DDAD65695A161247826502139807491306329EB90AD316100ABE52581B5393861CE1D89E25CCE160722E2D5BD74EF172DCEF01BB7B7712B0F12A040800807389CF4FF0476859A852890189CAB53517BFBBE50E918E949014402CF7FC57BB4611DAADA6B9C6826C9A2E361A2B5B4B54849CF8B32390233D2233E54F307B3E6CC50AD1FB1F5AFDDF9C56D1DAD21285380287477ADC5AF9DA3AA7FC1DFD86B6EFDB13DA576371EC730A69EDD76C2DE1BADA2BDB961C55B5F29482E590B470A4B2E16DF6929702A20E99D5CB67F87F1535490154A67F4B1E5996A5F80731CDB6B788B0F21330A81234003F02DA0ED4BC7E93FB01B1D65B21B278760382DA37656F63676F66D5B9406DB422D9B43321090350991020FAD752D8BB25785968DE7269BD5156F2E39FDA38C6DDC71C74F5A83115DD29A5C017D403C8DE2EE4E1A5B750B4A885092449E193398112739CFD7CAEE89E94CB32C83BA02402C09D58EB9FF4E6291330330CD0B05AEF52280B0E41FCF8C4A21B73800594F144652447EFE597D2A33152CCC5BA012D6BF12D5FDB651338649948017FC99A99313CAF7AD7BC7A968A673067EFF7ACC80659FA816B5AB61A429387CC4B0A177ADBCBF10AA41020F5FDA9C13BC49D75ED09CB414062DD3A9FBC55588520A20828820A20828820A20828820A2082B06C73A1A6B04357092A910620C73F874D29B09252AF9C4589ED773A7E381261647F11D7D63DE11911023CB39FF13E5F0A5D33E5CC05233A000F31521EA74E7570F084EDEAB351AEF4B5BEF0D9684A5D04244281E3312721967F4CBD73A85C76C413D66600924D4D3215AD037BAB08DA4122C0F3AB7E351AF1CA20EEAE59B017F7D7AF34D61E96C952D6A00200499CC809198EDE672A8A3B5E46C1428CD584A520D5C0667E79BFA8689297294A28009330FF001EBAF0229F6BC6816DDE37B53BE6DA4BCD8DD8CBA5586C660EF70E23888716DA71343A78D6961D6E5B7BC35052083A695E6AF88BF12E562F1D3A5A673B3815A160455F419F48B860F0DBA8131613F31817D1A819EA1F3F3E394763B63B03D89C359C23006529B27004DF82948B953B3EF28F04020B854A93CB3CEBCAFE2BDA29DA6B9A42C2829F37B917B8E033B7030FC214CE48278753F8148C8ED5A316484DBDB28ADA4E609226559A81390C8935CC8ECCF95882A6DE0083BC03839973D79035B4094A941C8097CB870A690FDBE7E93F7F1E9F3CBA06C4C6A70410924815AD038617FB76D633B8751E7F8852A4F138BFF2166685120B541AE9C1ABEE820DC3A8F3FC414D44D39953F03FB8370EA3CFF108B8E70923E9AF2EF59F9BC55DFF0070141CABEF8C3271D83E5FE34CFE347CDFFE6E35FDF383715C3BDFDF1685DA3C4DA4F6F8E7AD1F37FF009BBFEE0DC5708528F9BC55DFF706E1D479FE20A3E6F1577FDC1B8751E7F8828F9BC55EFAC1B8751E7F88294FF10CE0666EBD9BD34A59E33F2D46CC7BFE20AD0E1021C6E8074A7DC463E5A8E9E7F88A82E0465975EF9F5A6EBFA32A644501F7CA32259259C41E2F74FC7FCD22AC484D013C2B4E8CFDED18F96751EB0D1D77357D807383DF5FA0CE9A2A7059D586AF5E27DFE5D252C18A401714D5DFA8B70866E3A0F383CE35D3CCFE9F3AACED762853598DF3A12FFA6D2B19DC4B73E6F4E74AF0885C55FB8B1B471F48438FDC148C3CAA55E004901DE23FD9C40F2CA35E754A933D3227A565552A1BB57DD635DE177E0F58D0A415802C9BB1707EE465FD574CB7FBB977B6B311B0DE56C95D2F0FDBBD970ABFBD5DAB85A4DE21094B81B940F11CFE8B452412012632D0FA3BE1EF88132848054CC520DAC14053A1F79EDBA4EF02DBA5D801A86AF2BFDF4CA7ECA3ED9580EF81DC4365B1B4230BDACC0128B4C42D710E06431F854A9B2E942945690E2195384919EBA1AF7DF8476DE1BFEC72F10A9B2C112E84A9896B76AD3D9A86D2D8E573153132D4402EC915AB87000635ADE9D1E28DF57B746CDE07B46E6ED776CEB7B59B5C54AB774618A45EB36CEA9328F13C1571A0093AE723C85517C63F1651B2513512E781BBBC1D2AF3BF00F916BDA37C16C73F4AD482294045B982F4EAD666B0C3381EEA76FB7938B33B59BE4BC7EED9B858B8B4D9F4ADD5DB59A490A48FC2BE084710E052A3533E55E57F15FC6156D33364AA7A95BCE03ADF5E3DC5338B461309B80580160010389CB8D73E31B8786E0D6186616C5934A4D859DAB6136D676E435200192DB040CE01CB339EB9D712DA32D1B794B9AB65397AD49AFF006FD2A1844DA48410000F99E7906F74D6B0AA5CF1471F006C49012040001C8C752209EB3355AC561938196A909002402E05B33E67DDE25E52B725303900C59DBF157CBA45550D253B93D243B3827A0E99FE61B2D2E4B8A5DFDE6FEDA39EFF00C4A7D97704F692F672DA8C1C5AB08DA0C3B0DB8BDB1BB0848B91F850BBA7385C82B1286B87DD1A6B3CFBD7823692652A424A9882C43B5A9A9B74C83DA16C0CB22728B9214CDA0028D90ADCF334D7F3D2DA1B16B66715BAC19E654F39657F8A58DDF12415715A3EEB08E2D39B79157975AF56F87B1699F2905C10522CF980DE6743ADDE2EB83514802AC59C727AF95A95B8D71F5962096C9466985AE12A1060A89032D321979CCD58A724A8D29C6CF4D58F935844899617F5172DDBDE66FDA14C4F1305B3067DD33DFD674CBFDCE68230CEA0A22B5BE872A0ABD33E30D27912D0541419BF8E46BA017E59579C3EC5ECD637BC4DB7C1361F044ADEC5F6A313B2B2C25A6B894A2872E1A6AE8F0A7DEF75B70A8C010019D60D8F676155BE9A549C85068F6E428FC294A36D9C7A50140920006FCBEFA77148FD383F8597B1BE13EC77ECE9B05B0C8B060ED462F8622FB687130DA7F101C7D28BC612E3BC216327783DFE4234AE95B2E514A529003D1DF2FD373BD9C57906D6DA2899355F52884BD07F153BBB9CC69CDA3AE167C66DDBF10242C0293C208100C0D7392209E5D2AE5202826B66D69937DF93C5594ADF2540B82491571D21D4099813D79D388D60A20828820A20828820A20828820A20828820A20828820263A9F2D68820A208681242C922049F9CFCFEF9D656DF254FA1EEE47DE164FF0011D7D4C567E3E550924B4D014480E737E3DDBBC22BFA9DB36F2688176E1F55EBD6ADA92D9F7787C6301C912A2D811300E7940F2CEAC7326E1E561D3316A0FB8A26A0E54DE7ECFAE90E64A52900A92E4359F8B3DE8DD41D234AFDA1B6F71CC5F6AF07DD46C4DD326E6E14E8DA4BAE35163096F843ADA6F548CD83728E24B1C63DF30398AF1E7C61F180C11C4A24CE228AA24B53BBFF0064F3B3ECBC3A66A1334A46F1D722096637D3B9CE2736476551B35875AE1F62B0CB366994BAD9097EF1E7614F9BB23FE44870A8B71A24E7CABE7EF883C6B88C4ED25FFAAA037D55735726E5FCE9468B44A9094824951DE1549341C86BC7F4D7BDBDA9171F8D7084BCAC94D23FE088E1E2819F16A74D49CA9CECFDA7FE531592A7D59BAFDC5BB88544B480C09E04D48FB7944BF0210785B2A299C8AE264EBA72074ED560DD9653BC012E1CE84578D630941DD01443825C8170F4F7E50F112013AF413D35CBE039D454FC52A52BE82522CC29AE9A91ED8C6CA4A697D037BE66292F2418827AE83FC7C2A57058B2A940A8DF2068393D89CF3F383743DBCB9D9F9E547F2F3C71FF0053F114F3FCA1A9FF00EA1F98CB0D07610D5E738946011A73CF4E51F7AD63FC9FFC8F71F9BF970818683B0868A4A892441E809F43C88158189FFCBCC77B8F7DE061A0EC21E30785B4854939CC79D60E24E4AF31FB818683B08578C743F2FDE8FF00255FF2FF00EE1F8818683B0838C743F2FDE8FF00255FF2FF00EE1F8818683B0838C743F2FDEB2312A71F5663307C9AB06E8D076838C743F2FDEADB809C9387493BA685F9F11ECB528C6022C0123967941C63A1F97EF49E216835052189766AF36CEF7FEF0520906CC5E99F384D464935018A9EC0A4101AC469F7AFE348374053F0B69C63CA839B88DDB9AE8F977AFBA5E009038F3860FBC12E2926728CB91CBCFB7DE74CD38B4998C0DC970FC082E01F3B5DCE65D210E12EC4077198734CA9C61929C2A39653AF2F84534C7A3E64B531269C686BAE66F67E758DCCA4BBE438777A57852FE69BC8B552136F745D26F012DAD59A590DE64B44FE52ACE48D4F3E55CE31E172E7024167B8B38201E1957D18423F2C6FB8FF0069B0A9BFFB9BA37DE2DABA4E1D86B57CFADD0E61CCB4BFC5BBC414E94290A1FD654C70415083309ABEF8576A2E4197F591BAC6F6CEE39726B17221432986E9DD0A361CAA47366CC671C32DB0DD66DAEF1FDADF15B9DC762EC6CAECD38FA5ADAAC4F0E7DCB26EF90E5B1427F00F5B8E071C6E5C4BBC792579098AF42E07E2A1C0ECC18233C83BAC06F3573ADF2D39BD225A4E065AA4EF280B5185DEEE286ECC0F6CE3A59B89F642DDFEE52EF15DA0B172EB6A76BF1816EEDE62DB49E15E3EC3C904BAAB67C00E264A9404C9223A5722F1778AB13B5D530A6728EF12CCA26F77AB7A733708CCC2A0252120005DC9A10D5191CEF9F1AD36DF8906D92C3656B0911E33F9BE0F31C407E549C9234E181A571BC527186715EFAF77789724EAE6E5A909A30CA4555BAE1FE94BB372233B9191B3188F71588A53E0B2CD93CD2A789DB9054F0067349D01CE0796719558F666D91839604C249CCE766677B758D172AA9980A86E9A007E93615705EBC7F6DD09FC3FF4497164192B3EF66ACE275806009E5E54DF17B4938CC4BA4BA4F4FB56BDE967021D4B5A94002430CB53FAAF46BBC2C0CCE4479D26A414B4C71676177A9AB5A1DCB4B800B91C74C872A7E22036A70D6B1EC1311C34AD4D97309C52D9C4A8C21C17166F37A664E4A8F3D62AD1E1CDB22462A5277C065005CD4641B9F57ED0FA56F61953269495209484253553D89577E62968FCE1FDBFF76D71B9BF68BDE16CFB1641AB45627717569E2B640578CA76E1D288024CAA7202799EBEC8F877B4062E549ABB800BB31CDD9F9FE22C52567752A0E1C02791AE5A3E59BC73C6C31238978778AE161370B7810A3C21AF09453EF8D13C6734C6B945762992525767A03C2DAD4D5B83C4E4B989F92096E2EC4F1035AFDE9085E622CBEF1B62F21840506D574EAB8584B8A84B4852F40A757086C7F728800666A470780F98A480379449167A0FE9FD3855F6B6304B0ADD20000876008F4AFBD5BE9CBF8057F0C3DA1DE9EF2309F68EDE9604E5A6C86CC3EDDDECDB57D6EA43B71E282DADD425D470293C694AD2A428120826ADF80D9AC5F70D19E99D074AFE9E3906DFDA43EA4EF92B3BDBA1D817E14F76A47DEC5B60F6966194DA39C2CFE1D86322250DDAB4969A4B519084A52083CB402AE184C304904023785CD05079380DDACC1F97E371049672497A641C9AD34FC708BAAD0CDBA0CF16A27AC18CFBF5A9C9619091A08D64282A586CBEE4C39ADAAE2CD9EBC1A1682B30414410510414410510414410510414410510414410510414410D1C5F0AC891AF3EFEA3FDCD65C2D1B82E72A645EB58DB786EEEE7FB78A3C5EE9F8FF9A8AC6CAF912CCDCC027B5ECD93FB35D635DB7FFBD7C3775BB3AAC75E702B1828718C1EC10525DBD7AE3FA1C48689973C25AD2A907DD1279E7C4FC69E3D3B2B0F365998A4965004A99E95B1BD7B7689AC1E1C4C60A70090F43AFA5188AE547B6ADEE7766718B5B0C5B793B5FC573B47B6AE21EC6D2E7129766D30E2861C1A0B1C6D9532A471956B1EE98AF0CFC42F162B6D4D9E04C2A0EA04825EAEDCB2C9BBC5E70125084A120252080523DF0BD5DEACD48D85B17416112A99923FFA926075C84039FCABCCB8DC2CC38B54C20D54E1F2AE629476353689854A19003570C7D2255B74189D0F2E533944FF008CEAC3B331064EE87634B919599A9D4D78D2032D346038D05BDF778ACDC42A24F91D7E67F71156D97B437D206F0B35EB600D34D73A5E0328640371BF90872DDCEB9EB1CF3FA8D7B99CBE0DA7054E2FBD7B1CEEFA311EF211A992ED60DA7F5142DEE2513273E93E5D7B67E7CE9FE154508DD2E1ACC7524BE46BFDB9AC6532D21C100B379BF28A7C5EEAF8FF009A75F378ABBFEE37F968FF00888A819CFAD1F378ABBFEE0F968FF88828F9BC55DFF707CB47FC447857C2624FA7FBA3E6F1577FDC1F2D1FF111E78BDD5F1FF347CDE2AEFF00B83E5A3FE220F17BABE3FE68F9BC55DFF707CB47FC441E2F757C7FCD1F378ABBFEE0F968FF00888F3C5EB3DF3FB9E7525276B7C997B80B76EAF6AE59346BF283D83720FE8D1EF8BDD5F1FF0035A4DDADBC18967766F7C6B7318F95C13DBF5078BDD5F7EB51B3717F308DD51CE8E1ABA0FB40658C92FA9200E4D9FB7178F3C533CFCE73FBF5A66B24A492493C4EA7EF1B09696A80FEFA53AC47BE789C51CFD7EFD2A00E20A71052E5277B2350DEEC05B5685E52185817EA5EAF97B109559D28F9D87A312D5269AF6A690AEE876DD0FA35619E2171EEDBD838827F16974B57490786CD2D82A70B8BD1B0A00E63588D73AA76D4C12B7882D7A70E5616393F1840A1017F31949DDBB00CA761AD5B96B1A75BD1DBABCDB0BC7773BBBA7DC7B115BC96B1FC6DB59534DB2A5074A7F10D9E20435C6885039E54B6CB92B97BA0687AB545B8BFBAC6FBA972B20BE5BD91AD9ED761FB78CD3BADDCE6C6EEBF0A69BC30B5797EA6C38FDF39E1B8F3B70E8E3789740055C2E1508E5E750FB57138B958F212A59008A034ED5039106B68728C5A952C2024A124B7D4E0E840AB7BA59865AB14F0979F5C80B981CB2072CF969E8672D2A6366CC1380F9C5DEEEDC0D457EFAF11BCD595EE84814A123B822BA8B9F2314820C919093F5A90C64AC39964A521C0B518BF072EDD2372779B80CEE48BB0FEB8E4C551F68485851129C81A3FDBAB7611A2A56F26A2952458B67D73F4A9A380C345A0E1002889E84C1E672FAFED4C367A9631010B777CF2B75A8E5AF2604AA5CDDD043037CD8543F1A1FDC435DDC30C922520C99394F6FBC855D6724270BBDA26ED4B015F6EE468F13D8594A98000EC4DF4FC9E432A45818FE36AB76EE5F6B34B4A6D2A03FB83A4214394829267B738154995B53E56D0090B23EB19DC38AFEBA0D0582448489441009ABEF0700E4D42DA6BE71F187FFA81B65B08C037E5B0D8F61CC36C0DA56F1255D38848485A99B46C09226482A233F809AF777C12C48C56137DCA8A44B097399A171CB5E22968D1531686046E9259920330B061CF2CA8098F9AFC6F16C3F01B753EA32CB6A507594C12A2EA88494A4E47878B889E5F2AF50A2415CE09A0700D4DFE9E5635A67D5A155E384B90EF522C1A94CC6A3871615AF4A7F8567F0FFDA8F6FADF5607B3C6CAE99DDB60988DADEED1634A6D69B7BB4A568BBB66937052A65C0975A2D2C2B39C84E756CD95842A29DDA1166B9BD68294F6F1CFF6E6D51BB30EF1000CCD0BB017273A796B1FA6EEE1B72783EE3776F816EE764F0DB2B0C2706B0B5B44AED594B4B70B0D3695AD65109254A44CF73ACD5E7098408028038161439FE4E669D0F25DA78AF9CB2B2A721D8136F6E3F119BDBBA6D572D59356EB86C1F15D08FE9A4C1391CF5333D0CFACAFC94A4DB26A5037403D88ADA91BE52A193820F1EFEDA272C8116E906322AD34D67D35D0D6C030034871292120A4351AD9DFDD6BAC3BACC2B051041441051041441051041441051041441092DC28272C873E9973CC51190926D5EB088BA9310358E79F97F98AD54ADDC8C2BF256CFF004F272FE622B55C25313AF6CC72FDFAF23956A99814486208B8BB7BE0EF0CA7CE124805DDF2EBA8E51EF8E989391E5D23E3FA8A5189200773661EC778DE42FE6B310E6DC39E5A373D18C44BD769F1C85B6B6D103FACA10D679895729981DE7589A692A72A5E2F70B14DB4B86D4FECF3A3954B09CC96B817E94108BF74DDBDB3B74A5071A6D0A7096C923810095A87284804AB3119926293F104E4CBD9F3959EE1672327CADC6FCA1597237949033A17CB9D9A85B4B738E66EF0312B5F684DF658E1F863C87704DDABEE1714EA81B2C4977AD85280E194BAA61C411C8A142BE76FC62DB13C4FC42113084EF29802697B6597A728B66CFD9EA202897766EE351CA9AC6CB216C5B617716EA6E5B52186B86253FD101032D2047BBA488E535E503B4953274C1314E5C80F9B12736CAEF61C62F385D9AADF9403020135BB90FA66F5F2E3E32E301094B4AE28049464548E70A1CBB4F2A8FC62A52D5BE12695B720D7BB77AB878DF120C89850BAA8163BBAB73CE9D4C4BD9A177297148040409F7A73D724F726047523D22D78B4CBA80435DAFECBD7D61B7CF4DC8507B53F2DC871E8ED4871C9250E36648287010A1048981391891FAE54AE1B6AA779AC468CF7E9D69C236131EA283DBF6AB5BB42C8511014A1EF0CF3CC40CC1CFE3C888AB361B1E998016A0E1AF31F717BD046DBE38FBCA02F804C127A9075FDFEFBC2F33692504B120E675D33FBB508D21C4B96575AFEFCFCBFBF3F11D95F1AD7FEE5FF00946FF238F9FEA1637ADB2C29D5C908CCA47E6CC9D073F39AD86D548A10934B92470EF1A192BDE0901DEC6ADD69FB8A9ABF6DEB537694381BCFDD508518E83E1FAC56DFF764FF00C5376B9F7CB58D7E590B0870E7476F4849171E3B62E129712DA89038801106338319F5A708C57CC1BC081D5BEFEF58D5437494921C33F0F7EF48F5B790EAC368701513192B2FAD6FF38FFC8773F98D49090E6D0E5C696DACA0AC122261479FCEB266A8162A1DCFE6308585A428380758F034E75CBFFB4FC2B1F38FFC8773F98D89604E91E96D43FBC7C48D7CA4FCA9BAD13261041735B1F5367A7BA460170E338F3C357FDFE07F723E9594CB980015F38CC78A42BFEC08F3FD33FA52884AF371A3BD3AFE3F3047810A9C881DE48FD294620124B8639935CBCE084D6CA8AA6419EF303F7EDF6602660662B1466B9625D2EE4039BEBA52B6BC2889BB818B56CF7F56F3D2F08A93C399223D7EFB0EB564918B461A5042EAC2EC3F67D3362F0B09C86722BD1FDF0AB6710B7D6B7AF337EC34E20377CD29AF1164F8B6E1485364B247E59073EB94F3A88C66364CC0A1BA93BCC5C8167A65D385EB684D6A96A5A16EA1BAEE9C94FA8A8A1BF522AD18CB77DBA7C0F60938B5D3015718B62AE788F622EF0AAEA38D4A203A3DE02145226721F0672368C9C3972C0E428001CB5F3E548D8A92A2086DDCD3404DC8D7AD3B168C9565656968CB6DCBAE25256A2550A24A8F119E5A939F6D2A1F1DB4708B9EA56EB92694A3F91D47E21352492E0539D7ABB76E668F14DFB8EAD4916BFD36D260A55209197E58CA72E7A914D65ED24053CB05366E87AB0C8DD898565CB5937625AEE3FBB5790A98A537896C04290E123290099394E67BD3A1B494AB971A1A5F32286D0FD1254F5151D5C6B407ED96B0A8BB6C988503DF2FBFDB3A5D18CC29ACC48720DC03916ADAF6D0E7A29F256C4D2D4D7B1F7EB0CAEF186DA429B1C5291C898CE35FF03E154AC66D49387DA7BC94B277B40C187B03288B9B839A6782092E680660D0FEF219877318EB17C5D6A51E02A19926662750797293FA54D4CF14E1A6618C929014450903833D726ED16AD9B86504A41760039CA8DC75CF964D1108E0C4ECAE0282B85BE05BEA50F7441E240933055103AAA0D57F01B326ED4DA09992CD0A9269A13C34EB4E6626CEE4B60A20153900B396E17A718F91BFFD484965388EE56F30F69C4DFDC1C7D29B72902E5496BC24A961033E10905733F973AFA0BF03B616270D22482BFA1613BCE7316C9FC9C6B1158A989492A72082F5BB68F6E6EDE91F3C7ECDDECBDB7DED69BD9C27775B05862F1ABBBBBEB165F79B69DB8B1B265C71B3726F94DA54507C2F10A0C47109D04D7B1F0BE1DC44D289A934212C43E8D96AC18778E7FB5BC4F270D315209D453859EC7EFCF2FD38FF00868FF0F9D8BF61EDC9ECD6C761163871DA4561ECBF8F6256ED37F8979F7909B8E15BA948510DA96B400A04A408EA6ADDB3F64CCC3EEEF176E39E7EE833CD850F69EDC978A0A42412FC3E927537272EB6A474F2D597C2C2CAA19CC04926739991E64558A58DD46E9150C05F2BF7FDF3AACE5198A26956FB7A0F4859D65F449B54B0952BF3150890489CC769FF0035B924E64F38412863514D29EFDD61DA13C0909D32CE349E7F3AC428000ED9C5744660A20828820A20828820A20828820A2082880D013A434715C4A52635D0733E63CBD27E49AC29DDCB7334F661295881F3B70B57A31032CDA95AF11C23D44A567581CB2D3E87CFCC4D2A847CCA6A1FC9FF00A76CE25D202D0CD5D6B9E99F4F285B252028721A4FD7EFCE68124A54EE1B4ABB6869E4FD62176949DD0140125EA720DAF13E7CCC789546474F8C44E9EB4B8486DE1BBD2F76F7C222F0D8A549582350F4A1F6E69AE90C71071E470A1D6C2ECDD3C2B28054B4E907A0F78FE99738A9C532E6198A6A55DECFCC9E6FF889F94BF9A37C66327ADEE3323DE51803DA237888DD8EEEB1272C9F6158ADF866CB04B15287E2AE1378E8B6BA286C4159690EC98D009CF3AE67E39F13CAC2E0E623E601BA82010781672FD68FCE24F0682A5070E5CEF3B90F6193D34CDAAD47C05B97DD6A760701FE6AA529DC471A3F8DB975C1C4E9372A2FF0A9591211E2409D220738F9C5F1476FA7178B9E12B25D4A72F7E5FACED9C5E36728CBDC2588D054BEB6FBBB068CD178DA3F97A51038D4412233FCD267ECE42473AE19860A9D341BD4B9A72E943C2B4CEB65C3633E5CDF9854E08615043D079794610DB6DF7EECB7758DE17B35B518BB785E278EAD4CB4E3AFB4CA029212139AC82278801AF4ED5633B344D96E949721CBB11E57E2E0EA75852626662262E6B2776E2953472E006E4E32A9D7256098D26CEF5AB36EE957B87620DA5DB3C410AF11A295B7E283E2881FDE008CA4D57B19B254146840BB8CF5CBD34AB648FC9332525425EE924FD2A152D43973B753175AEED0D82DB8E871D924A8281267302626239F41AE7510306A9531B74E795B9716A126CFC2BBCBC39502774803FDA6F4A50573D5F36A3C453CFAD6496C92274FD7B0CCFC226A670CAF96C19890720E0F6AF5E91B1C329C1602AE685ABC4D78BB13DE1CDBF1169257F98C935B4D2E413435FB43C929DD491CBEF0B5250B430712B2B7828C2145303EB94E7FECF6A208B6B6CF6C98D97C2D965281C4E880207500FEBF648ACBFD2DC5FDD29DF5D6114CA4998A9AA776FA41CB870E3F710AE17B533B396B88DDF0B4C5C8570717BA4C2883ACC796B3152F879BBA801A96EDEF586B3128528907EAB299A94A3FBCE25F0DBFB57D837364E05BABFCA2665427403F4A5FE71CC6990FD5FF00A68D4A524314823944ADADE5CADB0ABB1C2F999049100481127204474F5ACFCF3CF9FF007A7B178025200601B26B4493572404F1106796647CF39CFBF9C1AC89E331F6FB98C14036A1F2F7CA152F24924C4798FDFF005FF0E25CE4B5090323637E7194A400C403D3CA0F151D7E63F7A53E70FF0091EE3F31961A0EC20F151D7E63F7A3E70FF91EE3F3030D0761078A8EBF31FBD1F3926E49EA3F3030D07611429C041CC47CCFDFD9E75AAA62425DC87B1A558D58BF4841490EC6AC5F9FB7868E3A0CC68222749E7CFE1F731F889A14336ADEF6BE64B74EF0572BE5EC4365391C51FE32F5981CAA1672C31006B5A3716AD1F9B51AA21D224A99D4286E2F6B647DF286AE3C24E6679C0E5DBFCC1A8A98B735CAF7A353FBCAB0BCBC33D774F014739F3EEF9D042887DB0D80BE119F389CB2CE7E597EB4DD5212B75352EF7EB5BF1BF3192E641DE2C0B51D837273AE75FDC20E5CB1DA4E5060E5E597D99E54894A6596ED41E4DCE164619776A0AEF55FBB53DE70CDEBCB4420F1293C6359E1E7E6723DFF006A497884A33D5EB422C3D7A7AAF2E4CEDE66514D2A5C9A37936472AB6B6ADF630D209085091D3AF7CFBFCE9AAB1E0160CCF7AF2E3A694A3F19346154523E9BEB9B574BB7DDA2D6B8C67C452A55AE5DC7ACF61F66699CDC3CAC42CCD252E58BE619BB0FCEB69393B14CD4A66D068E0B93A00DC7A677788A7961F920C939907AAA32D675EDFB5446325FCA0C94801C55ACD666D6B5A6594487F8270C91705AA32FEA8E1C0AC050DD859397574F1651C2A36ECA54128BA201E22F24FE74B27DE911C31564F0862A6A3192C0DE62A02F4B8AF0A8B9D3AC41E3B152D0E4941520177FE497161A7106F78F928FE2DBB15B6DED89ED59BAADC4EE6AD2E76BB6DF0EBFC42DF197EC50E5F611815A5EA195B8A754C4B96EA5DA1599508E341E409AFA47F05C4E9D8594B52F744B0874070B99BC5BE815762CEFABF3A16D3DB484298AEEFF0053D05C39D1F27ED1F4C9FC2EFF008576E6BD89376782DD5861D698B6F62F2C5BB8C7B17BF69879D178E23C52869FE04BFF00D22E2DB857E588AF6E6C4DEFF111BEEFBBE807E7988E4BB6A789F8A5AC6B95ABEE83ED1D6FB662FEE9A530CBE2DEFEDD69FC482A29494F14A4240CE38040E511153310F17E3265A46609090091A1500028FA99A208528820A20828820A20828820A20828820A20828820A208288C1B1E4622C8517CE7209233E5D87C7EE056AA0E1A970EEFE5E5FDC4392BFF002D3A035367FB716BD5A1B5CA0859D60E606B3A0EBCB5D29EE1C2001FC5AAEF91033EFE9778B5C82F2D23302BD5CF7FEE1BDBDFA4DD2AC432F95A48E27787FA425322546234CCF5A6F3F109966AD9E57EAE1EDC84218C47CC96C0820E952E2DEF4E514DF620D589425495BAA5988687114E99ABA6BEB50988DB52643FD429FF001B80E72A07A57CD9A2125ECB9AB5021248268CEC2BCB437C8D0461ADE5EF9F03DDF2B8AE14BC556EA08770CB321EBC656530D7F48C14FBC413968272AA76DDF1548C3C8528CD48DE0AA0354B0A3D476761A45F3647867118A904A5135250DF510C95BDD8B55AC7DBE9F5AE0D8FEF976F6CF6D76C0BCC6CA60AB75DC0B07B8E24BA4BC8857E29872504A5CE152383311E83C75F123C72667CF9689C4825565790639D29DC45B65F870C94B6E80B2C58DE99915D7DE7B316172E26DDAB77D216DB01484A19023C31EEB6003CC2409EB90EF5E36DBD8CC4ED0C4CC53A8A4A8B3127339BDADC8BC492B64894031008CF98E356CB84463F77C57DC2E7134C9FC81DCA32F28F879F9A7B32419652542CC4D3AF535E43843799869B292087292E01E5A535CE9E51A4FED97ECB167BF1D8EB8C4301BA4DB6DEE1A855D6CE3ED2C2429D6541E752B5A4170921B4A404F3D6AFD864A1526803B51AE5FD2CD4D5B5899C24C0996D34EEB00EA55AA4B579D3AB523597D8B7DA8719B1B8B8F673DF42DBC33799B38EAAD6CEEF142A65ABC6C296E23F0EB7CF8AE2BF0E84010224E90669962B0B2D414126A75671A8F47BF1B43B5253499BCA56E7FB52685C67A8FC36B1BD7B41BDAB6D9FDA3C3B08C430EC542B14586D8B84B405B8881C4A5A8FE43C52939E5C849AAD62708122D517A7DBF1C758587CB6E62805DFF7CEA7331B1764D86D16CB788507DA43A8291301480B00FF00E50623AFCE2E62371553714DD2DC3CF843654D1310A084EE94962141B36714E1ED843E514A8952125291020E47A4C773A4524E4DDFAC0874B254C546A48B70D3F5CDE282A09899CE88521BBA871C2929809044CEA403FEFF00CD10459FB5FB228DA572C8FB810C281742F22A00A4FBA331263AD64D4B8EC32F79F18C25C0637D6FD7F4F16AEDC6CE62D88B186E0D8238CDB61F62521C0B5142D4094295C213910485418F3EB4E5134331240C9EDC73F6FA4202490EA212497B73B07CF5CEDC22F7C36CADF0EC36CD8B54B9F8A6529F156BFCAA3A9208CC89F803E55933D0003BCC4F4A060DC283AD235095BA814009664B03BC5EEED4D3DDAE125DBA5078C20A8004742911DE0F90D6B6F9C923F9163C47E632997BA18249BD48735E90B250E2755031A664FE9F7D7A644C49B1B71FC1F28CEE81FED6E8D0BA5C310449E79E9F5A5A54E00665F2714BB3706FD46DF2F827B7EA2AF13B7CFF00C52BF3C7FC4F7107CAE09EDFA83C4EDF3FF147CF1FF13DC41F2B827B7EA0F13B7CFF00C560CF190238D0C06550D13D2FE91515C266333C8EA343F7D41EF48AE79A249715619F1CF8BC3298965301CB534CF96AD488F75E0924198E5CA74D7E51E7CB5A653A7F501E86AFF7CEBA7185E4497FA8D746B821F877B886EA7651C5233981A4C1E7FA7975A899F39F9370AD0D33BFEF94A22582580D2B4E4C32CBCF4884BAC4D0D4950CA4C81D0643EF4D2A29588625DD8E4EDDDE9D00FDCA4AC1A942960010FE6FEBF9702206E31795A9495108E40C65027AFC32E7999D1EC99C9F95957BB8D3BDEFC1EF232B03BA03A4139DAE68CD4F588A7B1A09513C66675D63CBA4C72F2A61899A9A8D3A3D457B8ED0E65E042812D7E078FF005C8365160E2FB50F357CEA52B70A7DD1C20E60C673A7D2A071588704037666E1986249A9B0A521DCAC03390976BE560180ED7A8F588E671D174616A5372732E401EB398D2674FAD41CCC4A92E1F5A82DC3334AD8B748768C1512424BB8A351890D95799B3EB1E3F752E05347C74082E2992541A1C8ACF29F9812749A4A4ED598957CA724921D892D56A8A5F4CF2CA2C986972FE4849025A92974B800A8E6D77A74899B5B96C302E3882D8FEFB8041691060F88BD131D73CC559B09B3713B4C2404ACB8191B16E1EF566783DA98997265A9C804B8634373AB30F3F58D66DF56F5B69F69AEBFF66F73986AB1DDB3C4D4DDA5C62A965773678234F14F8AB2F307C4B7529852F84C66B4E7005764F027803153F1524FC951FA93FED26AF7B5BD968E3BB7F6AA10A98C4077FA8667D8143CB81DAAF63BF61FD85F67AB8BADACC630EB4DA2DEE6D1A1ABBC5F6BEF5A6EE6FECDDE12E169ABE290FA121B714C90A27DC0139E95F4D7E117810E0B092553A5B6EA5156FE2585B3CDB83306B4723DA9B495316A0EA00B80067CEA4657FD3746EDEC997DA4BF66861A751925C6212952A6145440CF31A7527A8AF470C327084C90929DC09A10D421C79373A1BC41151554925F587F6987F86E1BA7F87F14E7FCA5BC90A8109CF5303AFD2B68C449252103852207EF441155104144105104144105104144105104144105104144105101A823586FE1A788A89023B89F4039F9F3CE26886A24BAF7DABC5C79FDBF709388490547967E5CA474F9D2AE5292C0B80E73AB07D7D1A1EAB109901945A81C74ADAF6B4312EB09539E18487140F12801940804911A012263A8D045336E6D0F912D41D5BC012F663A70F31F7470F8A4CF98108FAAB6ED6E27D5852F1A87BFBF687D96DD558DC5A1BE6AE31A752A0D329710A712B33038642A012274F21AD714DBBE2A4E1CAC0987783B906CD7B33776AD23B4782BC173F6DAE4CD5CB2892E08431DE50E34ED9F131CB8C537B98C6D5638ADA27DD7957F78F151B774A8B484A15C2DC209E2128E139F5F879E3C63F10D7284F4FCF25E8DBDAB59EADABD69DFD2DB23E1EA30F2512C48012025BE8E21EE199DCF5BC5E789EF677876564CAAD2E5869B4A470B4DADD060680A4440813DF58AF2B7893C5B371F88581394CA51600D2B980FC5F56CE2CD27E1FE1A63138696A531BA4123967C7F30D6C3DA0F78B83B8CDF5F8F12D9C2014FF54C0490939129039AA7D7CD0D95819B8B48592A20D781E39FA7770F11B4FC07874214061900814012033E46C6BC34E11B87BB5DE7D9EDB58B5737A017E0150000209D75248E9DE222A57158718445824839DDF80D0802E2C738E59B6FC32BC30509481BA92E428304F26F5EB19B6D5D6195171284A9E792461C56250D650E8569C2160C403999ED4DB0BB5BE58352F61A5D8FE78D6958A062E5AA5CC4C956EEE827E62452D66A70E995A39E9ED2DEC6786EF431B5EF67636E0605BD2D9B52AFDCB8B250B66EFCA3DF4B7C6DA4BCE1F09B2889993C22662A465E2C4E0E2F9BBDCB585EBD7A460630A1411BA4A55449193382E7CB2D1B28BB372B7B8D6FA766F08C3B6C30C361B5FB2AB5DB5EA9D694D38A2C381A69C95CACF88DB3C5240041D291C420292A25CA8E99F40D419E798A88DFFCA4A52A2A2129E3463E8C7CBCE375DB43D6D8759B0E125DB5E16C99954248488D0E806A3E555AC5A4A4D18D7B9FE9EC7864C013D2EB3425405072F6DDCC4DB8506548238541111CC8038BE73F4A6B785641242492E6AFE6DE4D0D5CE5EBFA510E6112BE12467E9FEE8820F17BABE3FE683404E9041E0B4E1E356AACC8273F89EDFEF2A6CA5D6B53C3280AC8A04BB66DF7FD73AC38430D11904E7D333EB98FDAB099A967292E75CBBEBD21352C87A5B2B9F510938436A281200E9A67EBF1D73A4D53D8900103A8AF7F7CA14402B485503E45FF0071478BDD5F1FF358FF0020F1F3FF00F68DF70EA3CFF114071434FF003F28A7D2A712090790059BCCDFF0636DC1C7A7EDE3DF157D7E67F7A5BE69E3FF00D47F106E0D4F97E2144A8900C9F89AD0CE2FFC88E153DEF5F6D09A831223D93D4FC4D63E71FF0099F7D23115AD7C29224C88033F2E7DC7D2939B30DDDCD4D2BE432AE7C2B0C268DD981C8CEBD0444DC3D3232D79F4CBBE71D728F5A8E9F3CB5ECFAD4D9AAFDFA448E1D02990BB0E23CBF77888BABE0DA549900A41E7D758FA1FD8D45CE9E374B1249B575EE05ABC3289D9186DF214C58E57F7C8F908B1B11C4614A3C4009D391EE467A7F9F3889F3D89255C6940E791F79E462C984C216140DEEC7AF01C323665EE28E1716105412065073E7F2EB90EF49A71C65B0259DEFF006ADF477AC4BCBC206629760323EADDEA784405C62AF1260939F39FAF2E5F62939B8B13050826AE4F32F47A9BF43A98712F0AD641AD2DCB830F53EAD416543F1AF9E22B994920E9968ACCFF00AA8C98B7CEBC3EF5F57FC48A3083737774D83B8E7C2B57EB11CFE396A494B162E2D5D4340CE9A46BDBE798A68B93F309DDCF8350B0AB707D2164E082412EEE1BF0282A5871ADA18AB6A1385B4F5DA9567676F6A92BC47F19EE36DB7F9878F9C02A483E1CF3F3AB17873C2188DA78B96B420A92A21C106B66C98B65D6D68ABED6DA88C1A8CB538525D88B82D96601EF7A59F1AD86D2ED36FF00F1C5EC86E4038C5885F818EE3376169C11B4190A558DCB1202800E0055978804F3AF6AFC39F83537188905521CFD25F7356FFC7F0E5C8B98E5BB7FC48196EB7002B30E05988D5F2BB9063A21ECEFECBBB2BB93B3B8BBB5BC563DB6989250E5F6338B2D171705E00952597C2439C08952120E890065CBD75E15F84F2B650953178748524057F0FA49A1BD78FE35E3DB4F6BAF12A539210B25812EA0C6AE1DAB4ADBBC6D43185DC22D941453F8F70FF59CCE0A672E13993EE9220CC6990AF47F87A461F66E1D329490964D52D57028CCD9D49BBF68ACCC2A98492470CF9D7B0A51B2B35C7616EDDB5BA5B6C242049F774E227DE3EA7CBCAA466CE33E62E612E49D5D8643B40CD4666CA1E52704144105104144105104144105104144105104144105104144105104365082260013AF327A4E9D7BD6C775282A3C7A37BB5CF2B64A9094B921CBE76BB53F37D612582E2480600D3BE475FF005D73CAB28589A93BA6B9FBD3A5B37AC46E210BC492104824B66396BC6E7A4620DE56D55BEC16CC6D1ED0E23728658B7B7E161457C30E3885211993AF194819F481CEB8D7C45DA276561F13356580048F79FBB6564F0AF86E762B684A96141467281005427759DEECF46D7331C0FDBDFE6BB61B4571B5FB557173756B7F7370AC2D84A94B2D25B5A9214EA579252612531CB9578D36DF8D24637113A52544289500C4644834D19CF7BD63E807C2FF000A0C2C99026049A26A43DB9FBAD2916E365D0865C60B28790A21453207003088CCE7C3A939033D6BCD5E35DA3889D8D9B2D2B5339CF50F4CBEF933347A464EC69094A54100D01A0A71D1B3BDEB6CA6977F72EA5B2E5D3CA527229E33C1972CE72EFA6623957309784C41C4FCC9AB5105540496E2D417ADAACF5858E124C807FD2481FF002090E72BDBA0E377876FE266F2DD36AFC847090824C09F5EA73E73E55D4F61ED5C3E124A11312E406A3353AF6D38C5776861244D0B4A659753B9201EA7B5B367B88B9375BB7F77B31B516D8638EA4DB3CEA42425478632C8E91AE703CF3AC6D8C7A31AE24DCD0352967A1CFF0021A39BED8F089C5A26EE86742D42F5604D4FBF38EAD6CD6256F8B612D38F2212B6905975B03C46E5238B80F2E23AE432F855657839F25615BC4A545DAB48F29788B64AF0F8F9B292485A56A0A3504B1239D8370CE1CA2D14029B0E14A493FD50AFEBBA0FF6BC7FB872CB9181DA4B0F315258A9CE9A1AD73AB68E00F5833805FF00C88B905CD38D39661F942186E0F8260388DF63187D9376D8BE221B176586D286145B4F0A5498E124A84C93FDC4EBA177331E9615655883F6B97CCF1E9097FDB6729D2B585CA268332D5A86A5453BD22E86FC37ED1C2E03E33924F9C9397393CF9795454E5A66390E730C055DBAF5AD2038652549485303425ECDE5F8EB0D2DF883294AC10A05591CB9C0FA5317093BA1F2F3D3D817EAF50A12992A356229C33F2851492A888CA75F4AD9EAD5B3DBDB7585C2D2598DEDE9EB1157AE8B595AC920E813AC69D81CE39F6ED5B8965445C33E5771A671B0FA8B023BC376AE43A92A85B60735989F2CF3A57E41FF0090EC6141294A2C18F27FC4542EB3949246706411DCF3D72F2F5351B3F0E42CB114A3D72B7285912D2C413517D28FC0BF67B52D0ED17262012083A8FF007FBFD2992C949FA95FC72BBEB7E9E6F48D7E52544B3685E80B727B7317E31529B71490EC9E15732639C72D73F865DAB51302C920D7969A6B1A24A524CB7FA93957CB87BBC22E079082B0DB8E0027DC93D7F6F8674E65C852C12C726B7BFDD396E152DC852C06C9C0F7EF486A9B97145005BDC02B244149F7639ABA4EA3B53D97845EE0217D01B57F27F30A6F4B01DD2D5B90E5B9C3E7D06DD29538EA53C5CB8B31E734AFF84B607E65F2DEAF60FF00DB884D1350B24043366580E858BC2A56866DD0F29C4292AD384C91A6BF326B6FF0D4120EFA4DA999E37AF956ED0893F3262920335C9603A5AD6FC4541C6CB45E0B1C004EB9C67397C3E347F88B037B7837AEA066F76A4608216106E73CBBFBC8670D7F148B84788D9201919E625391883DB979646A3A782951483F57FB790BE9F6CC69094C904AC28D4532714A023AF9F5311CF0528CE507F4E5F7DBBD35549529998EA2FD6DC214978A97295F5659528ED5ED668B471552D0B7110490066273CB965E79F39075A8DC4615402B8580C9F2361D3F713985DAB2414A4025DADC756BFDC5DE8F60E245D528E444C9CE7E072E5AE7D3BC557B1095209DEA905B85E9663F8E0C22DB83C7CB580024DAE037126B5886280532A492ACF9778D39C7D00E5511377F78BD1AB47160EDC395AB13D2E727E5EF121FB3E43DD07578897DB46797CA39FF009E9AC79080C46DB1859C6493551604D47014AF58712714852824062726CBAEB51C4D189AC5B58ADD7816EFF085FF004009047BAA2AD3863948D39FAD58306BFF0026426730DDA9F36AE44D844E26592905354B5FDF9E9A4686EFE7DAAD5B9D71D63FF8D75888504DBE18CCB97F72A5100218641054ACC683CB3AE8BE0FF05E23C558B9385C390153160382C5C9039350B3B5A22B1FB6246CF4933121F74D28E5875FBD8F28BA7D987747BE4F6D8BF5ED96D7AF1ED80D85696CBBFCB1B2FE19758AB00E69BE65614DBED909F7338E05F306BDF3F0E3FE9D71B82C3E1E7E25285164A8920F3A022FAC79CBC5FE2F96BC6CCDD2456C0DC654A135D4BE71DDFDD46E8B77FBABD9DB7C236570DB2C20B084B770EDBB4D30F5DB89305CB852238D4544924E664F2AF6A7833C2383D858542264997F312901CA5390B03AD0371F3E5B8EDACBC4AAFF0042AB515001A5327E757B5632F33832DE74B8B5B6CB2D41B55DB1871523DF2E9D0C91A7C66AFB35723700932C390CB7008045B77C9F3ED58198B54C2EED983E808F76B44D38C5C298E149487B21C44E4403064E6648D6ABB8AC3E296A2652F72AF4240E541D188FCC6C929DD0142B9B01EB43F8878D24A1B4A5512358D279C4F539D4860E5CD44B1F34BAB5CCFB6F7531AA8824910A53C8C41441051041441051041441051041441051041441051041441051043777FBBD3F4A471333E5C93DEDD35B5B27BC20B964AB3ABB31A665AD7F7942493A8FFB65F234D3098848739004FAFE5F2D05EB99402660268F70C2946E9EAF4CE39FBED86FDFED726C375387BCB61FDA0B865DE3428A54A6EC5E6EE5D120660A010759935E74F8DBB4C7F8589054582486735E5D3CAA6F1D5FC133E5C89C99BBA3E63D145A84598B86278F9135D0ADFF006CCDF6CA33688C3ED54BC3F0FB661B5AD282471969B4B8A94C0CD609E526329CABE7AE236A23FEE93025542A56772E736D7879C7B1FC11E235270F23E61DD550148A067D29DC51DDE359AD31242EDD2A194F16B99993224E5967D3A41D4D3F6E2C4EC6296E0839641C3E76A35BFBF4F6C1C54AC761659DE0E52F767CB98EB9E90A9C5B8753F319F3E833E59546CB90952B402F6FC5A2C5FF006E4CD1FC778351DCDDB43F704520FE65F8B2D34DAB83C3E2E220C1CC488CF3D7FD53B4CA4A40001BD855EB4E3CFADE18E2763225A553141212C487A373BF067B1E622DEC39DC4EE36F70C66C1B71C487D216B40240D33919CEB9F78D32A732E554580A13AD3A5FAF58E7DB57132B0626B94064AEECF50410EF9F9DC651DB5DD95BBADECA61887C12EF809E30666613F219FF00AA7330BA500D4805EDC32E0DEB1E2CF19CF44CDB98B54A6092B70D620E7A3E5AD5AF1929B679F08E51F31D33F9D20A4B80D4BB69C62A0A98CEE49D74FC7E22972D87171AB28898CA3E3113FBD24A940BD95EAF6E367F6D194CEA6E834269EC1D79E4FC3CF1DB68788540348CD664447727E79FCEB41280C94C387EA1252014A812378BD694B6B4CB4F410A8BBB6BE1F88B45256C2B24A92414929C95047FE535B9C1EF10A09D34D33A1E77A9A9BC47A42925295AB7940A9CF3B4149AA46EB500E63F43DF287096DE0CEDC6F68C31BD5DE2DD6C5A2D0B1B378A63085A8A54BB3B42FA07BC9008339C4E67AD247E972F67A8AF63D7A670EA4286F900B917032A1BF7F6C627367B1356D7E15698A7E0313C33893C4AB475A2CAF3CA382627EE69B4CC490A0056D41571A3D05FABF287895251552F77424DEF7D5BA45CCE2508570A1B75A4803DC7870AE6332477EB4D274F0E58A8035367045E819BEF1AA5616905D2A2E7EA4D8D7DDFEF0E5BCA472CBF5A899D33E616666CF539C6628657893D70EB508166CE683EF051912648CB590279EBA56F86016424DC640DEF5A8D5A9F68D0EE20EF3328D1F32FA7BA6B568C07BD0DF0DEEC93AAB1C3EC2FAE569047130D1704FA1EA4CD5930F24EE86E3F8B53F19B98C942557482DAC5B9BA1DEC63DB518DDC318A61F8930DCA4A03AD29281209D09EFCA9862538B44C2995BFBAF42976156C99ECDC4DA1D8C2EFCA7615663A5855F95B2A38D365D65FBCB9F7D32DFBBC2179F207E3FB522DB43559EAAF3AE8F5A3660B884F7112D164B7035D7227CB2ED0FF00C1B77C26D9D5F0AD04F12504011CA06BA77C8D6A46D014066139DEB614A572CCB7A335A8804A7743E79D32A1B93DE97CA558B1B52D1638CE70224139EA3CF38FAEB9E5231E4FD456DAFD458E7A310465A90E619AF10B490FBA4F5719DFF1EB68E76D1162E2AD90494A0E5399F7B333F7A5650898EF33F95DD9DAE731A30CF8BC2E8C52264B0E589B870C18D4B1635E511EE72F5FBFBFDE9E2774074A6A28DF8CB9901F856135A50B2295D29D295E3083D60D3ADA9E54C919E9CBA48F872E71A532C5A0EE9A00F73E8DC287AE8D0F30B212952737D398B33726A7A8367E2187B526129F2CB967E5DC728806AA98D949FAB334AE479EB5ABF38B8604A52C1A8C38D455EBA3FEA2CBBCB54A5C5A529C8691A67A74D34CF3E9AD414F94A09533391424F034E15E00671654282A4834B57817CFA4415C5B44E51AF2F872D23E1D39572BDB00FF009C5245942A347AD5B964D951A35C2A93F3455CB8AB5BAD3BD62DFBB5B12BB77ED0108523FA8B6F27648260F381C8E42BA3EC89811B2901490E00AB0FF90BEAE34F58B6C80A520AD330B043143D03A481422D60733A473FBDAA775DB118DEF977418E5F60AA4A1DC45D379C56EDFE19D297184B61634502749D7313D3D3DF01673F8830AC187CC40614D1DC176B9F28E75E25DF1266098BDE9890BA82E03BDDF46F4A47D0FEEEB0AC3767B66F67B0AD9CC22CF0CB57B0CB30E8B660328E14DB3441844093339819F9D7D8AF0B2B7B66480C0112D16E43D3DF0F2A6DF2A38D98A52B79D4ACDC062437BBDC878C849C3B0B5BCB471053CDC2968041CE388C8F31F1CEACA43EBCB23CF588389CB55214CA4B69284094849C88831A72ACB0160D0438A20828820A20828820A20828820A20828820A20828820A20828820A20828820A2086EEFF0077A7E94D31DFFF00CE585AA4E7937BB46410A4E8439639FEE8CD0D3C4E151C8CA4F3C81F5FF15052A6142580513F5540EBC3C8BD21171BEE6CF9F2F7EB1CF0DE75F398E7B4961966C1877000F02173C31776A348CF4274D33E599F2A7C75C699782C48CB74B00399A9E1E5C4C5E3C3D3D52D52C8240075E3A75B679DE24B6F360ED76A2CDFC2AE116EE256DACB8A700519E12A1C24EB072F87A7CE39FB489DAA402C42D65CDB3F75B1E11DDF61EDD560C4B5952D40148FA4E64B59F5ABF2CE91CD4DBCDC56D2E09757D7B8532877094AD45843416A772278F2480089074D75D4452D3B1226282D4C6EEAA64295A67D5ED1E92F09F8DD1264CB96A9A02801F49559FAB80C476E91AF8F5AE2EDDD2AD5EC2AFDB5A55C256A6149464489072CBD339ED584CE483BC9E058795C9E7EDA3BB6C5F19E1674A1F3160D01AD43D5B3CF85F4192F6D84ED0BD76BB6B2C23115AD6501372185FE1CF10E4B1AC139F965953C97884A98960D7CB2F75AD6B9C6BB77C5B874E1D7B8B48FA496040A8CEEDC5B91D2374BD9FB73AFA1D4E25B43689376B5256D29683293075E2CC6A34FA654F113921F788B6445EACD5F5EF1E62F1978C49337E54CAD6E68CF5CF896FC88E8561086B09B166CD49953408940F7784FE5D633032397A9A693B1A90A670CF4663D4971F71A479EB6A62958DC52E7BB1597BE97A07A3FDE26D18A5BA6650AED034EBCB2F49AC231214097A86A1258BF3CB8FA188DDC59A3B8EBF8E10B3D78D299012485DCA541A3FDC9294E8BE62797A7ABB42D24124D4E941D7A3716A1B46802CAC245377B17A86A7ECD9A916CDEB372E6CCE296616945FBB6F70B616A24240690E2CC9D46432F2EA327294A72A9A367FD1B65DA30B44C0B0A25935DE7CEFC2CCFEC4637DC3ED1398B6C9B5875F2D6AC46C6EAF9370FA892D287E25DE0E151CF2488CEA570F286E0373A914AE5DB816E75289511308DD25DB2A8A1CF2B7171190F15DBAD92C11CF0B15C770EB120C13717286C083067888A6B899692E02439CDB917E3D7808708FE40B3F0E9CFEF0C13BC0D80C6DD6EC6CB68302C75E91C16B6F72D5CAC139C040CC2B39E711509884EEB860746AE5C6AEE3C99E1C4B4266391BF2DEE41670072A80D9DBBC4B3D8707407ECDDBBB22DA789BB76C86D939716481D7288D66634A819C95256480A15E34CC0B55AB778709292A017B8B4B67535D6835CEDA8362DC5CDD5BA6E2E140BE4A92A6C93E20083C2091DC099A69353354951357676BFE6D7785B79091F2D09DD4A6B664D5EDCC9FB3522A6EE21C2DA9A71074952606463F7C874A60A42F78D77781241B7DC8EBC60157D058EB6B7786D89DD3785A9973C4BA5AEE891E1B4A05ACA06635CFEF2A7D8374919BDCDF86553CFCA130779F7923E934A026AFD69C6DE9AA3ED21BDFC4F7718687F03DD5E25B5F893E825955AE0CABE4F1651C45242B98D34D672156FC2A920241602973AFDFF00340D19001208592C482E5C69F9AD7368E79621ED19ED878A20DDEC6EE5DBC0DE7CA821177805F5BBA8014784A92D92448CF29EDD2AE183C260A74A0A5896F9EF370CEBD34D22630FBA258DE3967E6F522E29C69711682F6EFF00891635748786CDB564D13252C5AE28DC2409C872CB97E94EBFC1D9E5D928366603ABF3E873BC258854A0E00481A1142EC3A9A1F748F1BDB9FE237638D3CD8D9D6DD6121BE071EB5C514E12539F11919493CB410234ADCE03670500D2F3776A534B3DBEE2B10D3C7D5F4D53C1FCF97F778BD6C36C7F88F39709B8FE478606A4152556D8A710C84889E5AE5131F04CE07679144A1C02723971A6A2A223662544BB727F5C8768EACEE131CDE3627BB6C05DDE961AE31B6AA1703154B0D3A8B710E90C94F8DFD4CDBCCCCE7A64455136AC8969C4912F76A5D85880F6B53FACA236619A85B07A16A3354D838BF2AD6335A995940594940E8A107C88CE0E597F9A6C25B07B3666FE9DADC2E61D4A9B368EE793BF07AFE1B9BC205D053E085A4AA0FBB3A6A6239CE910640E951F8C40DDCEDDAB9532EB9E8625F0F88989FAAA00C8DE872EE7A72882BFB27735171A42359528803EB1D7E3D22AA98B96778F603DDC8AFE6B12B276B0412198B86701F8B7F62869AC5917C508756994B9C310B6C820F69C87A89D2A2572F7D2A49B31AF2E4FD43EB174C0E24CE91BE48622A03925E9EB977362602E16933EE91A6BFB7F9CA7CAB93EDD93BBB4142C4285EEDD43D3A73AC2F869844C046ADC5AAC74FEA2031369BB96D0B295A45B927FA6002B9CC4CEBA4C8D055E36691FF6B4822A1AE38DB5CFDB45AF0CA280B62499A1C0A9DD2054707E6F68D62F6862D5FE19B378A5D34D24E1D8B5826D1C4262E1017885BA1C927498E434D729AF487C059BBBE21C2906826247BA35685B57CE285E28584A26805C90AE21C8F304BD357B523B89B076E977663671F42DC8FE51619AC82A8366CF3191EB98F9E55F657C1EADFD932142C65A07601F33AC79636F157F9B3028241049648A317AF5D22F46F0F6DA7D572CE6EAC0E32B882448AB5D5CD9B2D78BC41D5F867FAE3D624D09E148100750349E7598CC5544105104144105104265C4804C1CBCBF7A208A92A0A008FB34411556017D473BC105660828820A20828820A20828820A20828821B9CD6A9CC6500FAFEA3E95B2D01728A48B83D59E8F08AD7621C31FD3FEB8B4337340498FD74FF3F66ABE642C6FB07A1619B077B81DB410BE1E5A66104BAB3A75BDEB4CF5B4738769DD461DED4D7AEDD9E14624122DF8B20AF0ACE17C33E7CB96A6BC73F1FD1B983C5354EE2AA78D7AD79522F1B170EFB840A5AAFAFF006D4E45E325DF5CAD372EA8FF00D8883A94A89000D728C88D39659D7CC7C74E5276BCC00D02D4FA5CF76FD17CBAA6CE947712086A0F263C01E34CA978B6EFB0F6D68530E34CB96C4150428711CE54796799E7A0D69D4DC7A81DC2A2DA13437E5E5C1C459B0D8C9921695A54A4B3074D0D29F8A7ABC630C5360B66AF5D5ABF9532A70AA494B29CD47EC69AE62954ED0144B816D18FBAB3D5F9BC5D367F89F1D2032671090D42A3F917E7E861E615B2983E1A84348C1D91E19399613399EBF4CA220E5269ECADA29B10096AF1EDE5C1EC6338FDBD8FC5952CE32690A006E8592035D867F9B0353191F0B7F0FB3424218433000C921307A65E596A2333CC56CADA2EB3F532438A13C46BCCBF168A1ED44E2B144FD6A5139972FDB950EB43130ABE4B878D2A949D0C920C7791E5E9D6A2313B4089CDBC40A31A01D736D0657E310E9C1AE582142BFF0090FBF3A57411E7E2BBFCFA4FFE54BC8C7B8037C971AD2FE7A0E1CA364E15C394D4E8187663A738F1AC4494DD28A813645AE1139FF508E28813CBA7AF598C3E31D2FBD40CFC3CF2A071EB18548DD5210515980B280D3A6A6D719E70FF0013C45855962188A9C436D5AE1B76209E1054E5AB894CCC892AD273FA54CCBC5216410A601B3FB72F6F084DC229081288256B25414452EE413536A7E99F9A9BAADD46F776DDEC6319B7DAFC4300D97BFBEBCFC33585DF3F6D78DA1372F2547840E01C473491320D4EE1B10552DDCD05CE63CABEB11B88409738241B268466C1AFE7FB8D82C07D923661929C4368F6CB6E7682E78F89C6B18BF4DD5B13C52470A84F01E8796998CC5CF0B046E9AF6FCC6A824281A1E7EECCFE90DB6EBD9D6DB04B91B5FBB0BB7EDB14C3CB6EDD5936B0965696C26006DA01454A4A4954F5EB4C572828300F7A69E96BDDE838C3B94A00B29802FBBC75CAB57B7EA3316C0EF5AC31DC22D70FDA6BB6706C7ECC06556D72E25872E5685704210B3C4B242499FF00CBBE6CD783DF0429E868C2879963C837385A5CB085A949AA660FA83580058A5ED72FC6B6B65DB8BA61EB6FC438461F2907C673FA485240C9415CF88099E73CB96666CE64394B1ED91EBCF4AE51A00259500A33534A3EF10E73E3D22D6676A2D97722C6DF86F94494F8EDC3A91DCA81073CA0EB977A80C5E1771C94BB3D4873CB85BEF710E08702A43642DEFA45E2186EE59699B8653C4C7BC97169120A8F16455D34D3BD452677CB5005E97229FDE79757786DBDBAB528289DE23E97766A503DF9430C45AB5B80953A8B7B82CE6943802A39E999E5DB3D3AD4A49DA3BAC1EB70097176B3F47CEBC6164EE8496078D03D73D0B0ABE4211670966F909BD0D2592E65C0D27850383DDCA3213FAEB066B49DB7F13294532D4B6B80096F2F2F586FFE62649F9656481404B392F6AD1AFC9AC21E7E1DCB51EE072120444FC2639469DB3CB44BFF0052634577D63AAB97DE364E2933AE4115BDB4E3CCD0E9A3B806D968E271A74BE7252B8667391993CBBF291DEB7FFD478C5172B9A49A9A9E5EFBC2A12B2B2C65EE64FAB572BDADF984D572D5B49517929EF97DE9D67B01347FEA1C633954D1CC9D5BDE5C6154E1173582370ABBB926AF9BE94072AD22D1C6378585618E38CFE29849464438B01C075CC4C8F3D4CD4D60E79C523E62CEF28805CBB8E64FAF03689FC0783F138C489C6429454CEC974364CDABE678674B5BFF00763669C70A2EB16B76C4E85F48F3CA7598F2E5CEA4E54B4AD3F5915E7951B8D5BEF944B2FC118C949DE95852A2057E93E54248A8E59B52166B6B366B10B8371618DDB38B7238509B84418906409F2D7BD34C6E191BA4A5493CEE08BDBF711B33C338B961A661A605077210775F51A30ED487779883CFB7325F6CE60A254387288EC00E474CE7AD371A8DD51AEA2869A55E9534CAA5EF1098CD8F3A5AAC6EC41151A7DC1B8E516FAD0149242383FF00150F7A679888CFCE2A384A065920558DC3D2AEE6BF8CA2CBB35065604A4E8589C9AF7AF1B54D2B7888B86CE720F68F9F7E5A7948AE41E221FF00F60A615DE1956E1C76875865BCD038977A55F3D03D7CB586B7486936E841C94E8565CF2E994E93D7E02AD580504ECA4B962400E4B661AAFC34CDA2D38652F789BEE07A1B02C34CFBDAF58D58F680B05B981E156ED82A0317C39413131FFF0020C2A600EF3CC65F1F40FC079C3FF51E140723E627D79D85F93C50FC533184DD6B6072E55AF677CE91DBCDDC2148D8FD9D4AE4286156120EA3FF0088D083F7A57DA1F042F7B6361C1B89693E498F31EDE2FB426E5C0E51901BE7E9FAD5CA21A14A20828820A20828820A2086ABFCA7EF98A208A9B5A528009CE4F4FDE88214F151D7E63F7A208AC104023434411ED1041441051041441051041441051043424176648198C86B33AE7D4F2E9CEB72B0894544380FDAAF9D73F758D0C82A0082C9258BF0E9EFBB3779B511023EFAE63A547CB5267853101DED7CC00435BCA1DC8099742483C34E141C9F9DDA39BFED41835E607BE3DDA6D6B4EB6C61C1DC4538A3CA5148056DA1A652B50112A260126BC81FF509B3969C162D6038DD57A6597B7A068BF787A6A0A65A7526FCCB11D0F1F31190F12B9B775A17691EE2DA69606449F701927A1C88D2457CB9C760D5336C4C0DBBF5AAEF5B923F27CF5EB3B26515A5082012C4D4519B2AE9606B70D9C5A0AC45374B2E953C8493010080070E472D0091CA399EF50DB492A918829776A1BE8E34CB5B6978B0AB6792948CF403882E4DC71E368F5174EB47FA086951A07733E797AE82A3D33560BBBF7E99F2EDCDD05E12623F8A95517724654E068E3D6137311BC5288710C0573E10A803947783D065DE9D2316A0C5EF7735D5B2EA75ED04942D0485134E3CF2F7A9AD2103E2BDF9A00EA24651DB3F4FF30B7F9A3FE4D4362FDDCF4A3FA187E89D2401BC0122D6A7BB74891B674B6D21B3991327E7D4741F604B398264E9856282B9D6D6D5F5E995984F54A2B200FA4D8162EDF872C7D21E25D52A20FCCE5F3E54EB0F2660A9272A039D2E3803ADFA4372B969A048ADC365DFDE9155BB6A40BF796B4A9A5A99F1500CAF2309CBF42721CF3CE730C85B5DB9870C2CFAE9979D5099889614974D43B1614F3D784629DF6E3589E15B2D6B86E08D3EE3F8DDC30D071A0541B6C5C212E874A4C89415012623BCD4D4B0A29156398A86E9F9BEB099C54A24EF2052C5AD950B9CEFE958CE7B01B396FB31B3369875BA43695DB34E909007F51E425C72748256A56B9F51315352710508092EE00CD83E79F768AEE38A553B7921C39627B53F079D69177780855A29859515924833A664FCE69C22782C5CB96BE7CC72D1FA43505887EBEC7DB9437B4B336CD3ECA5280E5D0212A0202A27883A4EB0321D01D29F4B9C802D7B161C2EFEEF6CF72B0552D4C92106A186F558E5E75ED5235577DBB97631B617B4F845CBF8663F8105DEF0DAAFC2B4B82DFF0054A5600E257BA888E67999A5C4C964592E320C395AA29A3BC3B46252E096034F646BD838D2301EE877C9BC0DF862F7FB2B8AD85D61786600B4DA397A869D67F121AE26F890E1252AFF008B33949351D89DAF2252BE4A83D2854C683D7ED0FE561C4C47CC012806A4B004B9A51BA7946EBEC761385600828B6538F2930971DBE292BE29CCA5423E27B557315B4254E2C96009B5B56EEC6E358557825B10028D1DC697D3A68D9BBB5ED717816E908754A49009F0CFB9CB4CC75F2F4AAF4E214A56E9A1B75AFBBF0D2139781536F14B1D0B057BB71BE70DD6F2D078ADDB6564EBF884C83CA323CF3A4521492E083ABBD7CB9C657842A052EC750A63CEA29A5B5E061DB6FADC424BAE1B75FF007376CAE06939EA94F53CC9FF0034F913A40401365A49D583DF577CBAF48899FB216A5EF6FB816AB13AD73EF7CAD15A956FFDCFDD93CFDE1CF5E7CFEF9D6462304A1FFBA1FF00D21F857A5DFCE1B8C3AF0EC93522F99F3619F9DF449DBD62C9B539E2385B482417152729249CB972CB2E5DA4B0B2B0B394375294EB4039796A7CA27707865E2421294A4A945AD5B81CF51EB9BE9F6FB77D69C14AACB0CB974DC12A48F097212447E6820C67CB908CEA613B224CD62025AE73D2D567B768EC7E1AF8798DC7C895304B092A624B149BBD69516F2E31A5F7DB73B418B5CB97577885C7F5CCAB85D564341A9CA408333967CEA4A5600490C94848E54AEBE5FD8AFA07C3BE07183C32244E40DF005C71073BF967A88B2F16BAB9BB928C52F50A339F8D1107CB9E5D35A7024EE8259C0EA3A53DE516E1E0A9332A10914190CC64F5BBFB7885636AB1ED9CE1559629882DE6CC92B7945A235CA35CBEB03AD31C44BDFDEB56874193D1CD731ADCE510DB4FE1E7CC967712900E5EB460FE6EEF6BEC76E6BDA4715B9C598C131A7D0E71A90D85BAA247432547F49CF5EB5E9FB326CD5B83726EFA3035B37E291C9F6E7C369A9139611500ABE905FE90EC32A8B657B88DFD62F59C518372CB8D28702567C320A0F1267239E7F669AED7D98BD91B3D78C98A1BA12E4039364E19EB4EF58E358AC0CCC22BFC7285A194B1F58666398A366DC18EA623DE09530A7828702499139C831A1D73FA9E506B814EC4276CED4299043EF3026E58F0EB7616EB17295F2A682A0487BF7E0DDA2D8BB4BD78F5BB8CAC25A649E34A8905526047A83AE9E622AE188C1AF66ECE0998090006A386A3E6D5E80D1DA2DF859E9F944D015062F7E5D88B91768C67BD2C1BF98BFB3D874B7E2E25885AAEDF889294FE1AE995AF8F2241201881DF38AEEBFF004F928E2F6FE0D69240F9A1C500351C6AC337E51CF7C52779334BDC28E55615CBDE79C760F64C26DB01C2590326B0FB341F34DB360FCE4CF5EB5F68FC264E1B64C8704FFA48B0B505A8DA0D34A5BCD7B4D0A998A98A51FA8A8E766367ABFAC5D68706700998CF97EB5615ED1DCBA559D0073F6EF118A94CCC4679F2E1CE29FC5B61C2D190A1033D331220FDC73A25ED0130B00DA960D76BFEA115324B13DE9EEF15A9F4A53C460F9199F21F3D6A4E52D3303EF2453335B69EFB422B9BBB6AF1FEED9E45DA1A7F32689E11055CD23F30E922644F2A6B371699733E581BC750FEEB52D0D958E420EE962AD054F5B0EDF6857F1CCA44AD40189099851F2075CB3E54E64A8CDD136BD39E7942A9C4A5428CFA77E3EF431E26FDB5202E14892442C7BDF09EDCFF00DED35489555CC401997B35DFDF9D21ECA96B9A010186B966D0D5DBF69394923E9CF3D62753032F8D42E2F6E60B0C4838896FA6F0A7E7BF0E21DA706A2CF4A805ED5EDEB163E37BCFD8AD9E5BAC6278F61CC5F311E2D82AE5B4DD278B3482D28C891046B919D2ABDB53C73B3B6661158A993659003B05269A67CFCA1D4BD933A6A884A084E4A214C75620D5B3A44161BBE9D8DC52E536F6F72A1C4603AB52037F107F59F94D3B67FC65D918FC60C2A14872ADD774EADAF06FC52313364CE96E4D8396D00E95F7C5B2A5AE316370DDBAADDD43CD5C025B79B50534A2333EF75D0475AEAB86DAD2715864E225AD242802038CC75E76E05A23CE1D61DBFDB70D51CFDE9AC488B8495A91C2A1C312AFED33D0F3FBE944BDA895CC0862E6D415FD18D3E529897142C469ECD2D9650AA161C4852743313DAA550ADF4856BCFEF1AA925258DE2BADE35828820A20828820A2086123C4E1EE0FCCFD8F5ACCE1FF00F156AC8053F2F64FA43A425E50E6A3D89A428540850E9233E7F647D399AAF6CC9CF8B32ED555FA9E1A8E35D1A358D3FF006C4D89BADABDD4E309C212A38EDAAAD6F6C5C6C1F150DDADC26E2E380A4710E26DB2150340796BCDBE30F860ED6D8B895A51BE4CB2ED930A8B708B46C09AA1302033259DF4539FEFBC6B3EED36C5DDB5D82C3F145A8A6E380D9BCDA8C14AEC57F8658209247116C9CE67B57C89F887B2E6787B6B4F985051B8B5D5980ADCF3E9A976A76FD893D9090E1DA8721916CF83BEA06513CBBA0D2CA262232D27FC6A3E72753C6315B4FF00C99A5649356BD78B67A533F4BBCAFAD00D19AE6C47BA7AD6176EF4883C5A77E5A473D24F61CAB444D2A65025F424F2E1FDF9EAB97BB4BB54BDBB55BBBB370878973C44858D0E99F2FD29E4B9656C5C1D4E9FDFEDA192D3BC4901ABCADAB663FB7BC3E6F9FA73CF2F59E7AFCE9CA70FBC452D5200BBDB27D32F586CB96C5C9BE41C9F4A768593F986BDFF00CF6A7689252057A1EB70DDA13521245125CBB96AD3DD38087CD7F6FAFEB4FE4A294E14CEE7F64F610DD520B12417E0FE6E3216D6247F061865370A59E1BC30533A701811A46672CF974A9995294102A0939569D1BDF488D5813173129FE528FD593BE6D9BE79C4D3780E137D6ADA714690FF0081EFB256124833C530A079C69965E712B225050AB06A56B57CCE6D9BF9B888EC42E682844A40512FBC482586AF67A9D6D71130CDDA14D27C3F7509F71232FCA9012072C801FB73AC295B8B24F2D1E9E8F73FD420B94490141DAA684D4FA7AF2857F140F3E7CE72EFAFD3D2964CC0082F4C8034D6C4FAE67A468A934A22B4CAA7DFE8DE28BAB852916C5A265B52B8C89CB88C0075EB3AE7C8D3D44D06A08E5956C7B674849324EFA8A92C0E4CD6E6EF6B8A33C597BCCC758C0B6471DBF7D21C1E034D2F9FFCF2D899CB32AD3BF5A5FE6EEEF68D972D5FB3539C6C892920100DFA5FD9ABC61CDCDD8E0D856CDDBBF86E1CD337B89BB72E3CEA1A4A16B2A794A0544004C71644C6B3E74EDA7337B12480CFF6D3DDB47A58F092C19037CEE8171950E63A17E4632D3ED356CD169D584BAE0924182273E79F3CA7A79C45C3E94B2B53A58CB1404B105867F76B71315D9AD2865012E7880490BE2E23A9E7CFA72E9446CA439706BC7DFE624D2BE21A8FB3CB5F58F5A21BAD172C5F30D78F7C4299CE008D4F5F3CB2FBD6929A58022E3F223558019B378497759812353399CC7C40FACE79F3A6C92C41766F7E578869D27E6CE600D081ABBB0E6F7D2CCD420617DEFEDD1D98C02E4B6AE15B8DAC20E801823B733CBA4198CE7F674D4EF07BD1DB8364F6CC9EFC3A5F83B63267E224A948DEDD62011435A3DCFBAB54471EF6A77818A5EED0DC397CF2DE6DD795C3C4A24264E838A6047FBABC60A6A77413502835E75BB79B5338F69F823610F91246E00E91D18662B619674CAB139698A85DAB6A27358EBE5940048CBB4CE841069FAE68D69975D72FBD62F58BD9CB9135920D05486D1FD8D6DA9A1CC450264881CA673ED32232C865E7A4B45CF21C034550B5A8DC79EAF0909CB9640215A501A375F4FC442DF620C2D21B5000AC11CA67965D73924D3499358904BE6E3F2EDDB48C7CF5CCFA06F1D3CFDF73CB155F3B89E0D8EB18861EEADB8702814A8A465E519C1E7AF3EED953774850259E9A65C73CBCAB0CA6EC59D892B265A88502EE1F5B5EF9F28EA0FB3DEF06F719D9962DEF1F5BB7496F85C2A5126048124E790D0CF3ED3517E319FF0033C3F32593BC4A1541A3E94F6ED78F32F8F7C3E246D09BFE9EE904D8354BBB5FA9D2F58D8672FDE369E0824159EB1A9E59F9F502673AF37787E4997B5F79882262A9D7DDC8E2238FCDD9C5134FD2D66A3356F5D21F5836AE04A543DE57BDDF298F9199FAD74DDBDBD3F05BA1DC8038E55E3FAB343E4C8F9729E808157A0FEBD8BC634DAFBCF1F7A3BACC178A4DE5D5EC26419F08A17CB98CF96401F5EFDFF4E3B3CCADAF84514D3E62090464F5AB797A1A8E6FE279A1299AE4FF0015371A1717EF7FCF607086FC0C36C520C14DB30982607BAD2464272F8EBDEBECEF8551255B2E402104FCB450B3FF0011CB4FEAC3CCBB571E99589526BFC959B677D726B696313CDAF23319C4472E994F3A9C9B8390A2019690CF50900F2D0B7AE511A31C998FBA4022A75AE753AE55EB0CEE6CCB8A53ED28A5460C1ED965EBEBF1A6337032D03FD30D43EE9E63918CA4AE654B9734EBFBCCDF934276A9712541E54C64028F2CC69F0EFF00AD7F1188998759FA983EA476D457DE4BA2402FBC2FA5DC7EB514E358A14CDBB6FBCF209F117054A5C78420671CC77CF9F7353B85C6603FC713710B921412E4A88DF06AD77AD3FAB16EBD9614B2B4A4BB50354B9C83036AE7D59C595B51B6FB29B3D6EE3D8CE2D66CBCD4C34CBE80EE5FF8AB9E407EB54BF1178FB66EC996BDC9F2C14BD4292EE1F9578E6D9C49613642D44028209BBA73A3DBCEDE51AC5B43ED3570FDC5E615B01B3D8BDEDFA484B18B6296BE2604E28C66879B54A929D164686BCD9E2FF8ED2B0DBE9918A7237836FD2828CC781351168C2EC898AFA0B849008DD05E9AE8C6313E26D7B42EF0093B5FB59806CC60EE199D8EBDB9B3C4D0D13201E3F74382418D2418CABCD3E20F8F78F5CE9865E2E6B026D315BB7E05BD2968B061B6484A424A3798DC8ABDC3D9DDF99A42DB3BB9DD9AB4B858C471DDA3DA8B84C156258EDC22F2FAE179921D78895250470A33C911AD72FDB1FF005098AC4C95E0A662E66F12410566B51C74CADC749D93B31A57F1019E940DCBAE9190118260B875BBA9B6B271AF0D24216A692932260830232D620F3E951BE17F8AEB95B4E54E54F213BE2A554BB3DF4634CF9445E376728021208CCB8F5A1A643A4671DD163CCE2B84AF062E14DC614A511240510E2CA877D079F202BE85FC29F8928DBD230D86F9FBFBC121B7B80A55EDC8966B068A7E330E641528A497BD1DDADCFB53A1319B5DBB52ED0B4DF10B9040274300C1EF981F3F87ACB666CE44E948C4160E01AD19C6B6CF47E0D7AECD5942DD2D5720356D502CF7D2272C12B45AB6173C512675939E7FA768A94284CB2509B0B7BF7CE1B6FEF926BEEC07010F2B119828820A20828820A20861C12E13A1E674CA75EB39E5E75B4D27FC75268CC4D79B81C896A71870957FA613C4F2677EFF00685384F14E5DE3AF38F3EBE7EB5AC14A54AC5FCC66FA89D2845001DB2F2A425314C014914BD788BF9F3D0C59BB4B602E59BC66E528751736D716EC323DE243CCADA59E13A81C5273981D00AB26D1C148DA5B2E6C854BDE3B8ADF252E1CBB0E4F7B75B895D9F89DD5A595BA1D2E41B91A17AF2B7511CAFC2D86375FB7D8E6EFDF4A9168E5CAAE30B5A0016CE97D4ABAB84B44E4A502A85009FCD97535F26FFEA63C1ABC34FC6CE91288AA88094B50BE5C3981CB3EC1B0F1EF2A5A8029A0606ED9160FA96BB01D22FDBC68DDB8BBB62196571C2DBBEE39EEF320693A8D6441E95E024E166C8529131C292A21B2FE5C6B4BD348EB3B397F370E8A3EF5C9CB3BE74E34B81110C5D715C7E1C1293A059C9073F4CB4CF28A792533010E6CF42723CF89E7120A97424B74773CA95E462EC6141A425A52D2B52466A4990673CA796639D4D6186E9AB16CB5B96F3F2A888F54B5281205C921DDEFD7F30FD1708E60E71A67F4D73CBE93528898803439BB71F6DA57386E517240BB54549E14ADA1C25F4710C8C7A7FAF9F4F4DBE6A29F50739387F5F48DBE48527F890780D0F2CE1EB770811AE5DBAD3C9335096AD7C9BED7FD6A92A4960DC7A5EB4B509D4758A96F5DBE0A78D0184478024C833EF710E5273CA321E553322685331D5AD4BF13DAB5D3364BC3A0951090952BF9716B1A72B73AE9376AFDCFE1C21F7029432053311A419E80F3F9549CA98C28AA6A48ED66EB7AE70C57242545D00306A0727F35F28789B84B00340CC6A44C7BD04E874D35CF2A8F9F39A6286F501B8208B7F41AD0CA6E1C95380467D3806D5F8985C5C9390933D24FEB23E535AA278554AC86B0767BDC7F40469F208B247507F07D61CB2E10D5C051953BC3E11CC84C6B33A03EB4F25CF600DF4E1ABDFCBA36692A428A907E9003EF0CEA29C3C8C5A1B65B3EEED5ECAE2F81AD683717EE5A2995289F0D2961E0B7028E664A410235269E23140A4835245079675E3E5C630A9133E6CA28291283FCC16274A5AEFF007BC31C1F046367916366C2521BB26C2484819A9491C4469CC4CEBFA56B1CBDE9E55A9763C35F7E64C4C4840548521CB960F6039F9EBD225AE116F7772E3CFF0019414C2008907860C8D333D34F9533A126E3CFD4F9F942A842A5CA084B120E76A9AB7AD7AD629B3B12CB094215EEA492924E704CE7F1EDEB58850A80A1BE6D6F387801403C5CB90CE33A234242886A1ADFF4FA43776E005409D739D065A9E7C8F5CFCE91981CD5D8B5B87F5E70DA6A4EF312472D381E7D793C473B720716A75D20E639E5F12338D7B068A705B8B3FB7A9C9FD690A6170E14B0AFE4A7140F4FC5AFCA35ABDA06C9EC4765AE54D254B752D2CA12904A879C67CA7AC75A96C34D4A1282097CF362F9DDCE56E2C2D1D8FC0625A315BAA01814B3D32A803BEA79C7212E12E5BE2B72DE2E859525D5786003900A233E2D3CFE11955B30389010904D40E5CB91CF933691ED3F086270E8C3CB48DDDEDD00136AE65EAD66FDD66EDF1342521014AE119252341DA35D0C1ED9F39A915E212A1722B4C9FB9FBDBB474199814CE4FCC74AF785C5F2FBEBC3524BA5DFCA09D673C8E7AF5D3D3E3CA9A2E6E76BB1CB4BBD7A74AC4362364EF1748CCFE3B353AD4DA2DBC6F114B4D32E369754B24CF081C880200A69367B8209ADBE92FA5DFDE8E23383D8A4CC054906BD0374E56D7998B5B10C51779E1212E21B724407494F4D633D20F6CE9B99C4B24292C3F8BE45A963AE917BC26C992894EA4151DD3FC402598DCDAF993FBDEDF65D45DB2CAFF10B4389584F096C92233EA0E7A03976279D43EDB9DF3B04B94A2E7748615A1D070F4AC7923E2F61654AC76254801201A0CC6A1B91E0D1BBC9BB63C4432A42F8D24498CB91CFE73D74AE4B84C38918FDF0199449360DAD6ED5A37DA3CED89967F9298BB8059F9D4E608EE0C5CF66A0FDC80D25442000531AF126065CC08EF19F6ABC0969C604A12E4121F3BB120307F4BF3888C57D3208240556A6C1C66467A6BDA30A5DB2BC63DA7F74F84DBAD017833B8AB97E09C921DB74B8D822352065C519E5A44FAFFE026C6323178599BA2AA15E3439F3ADFCCC71DF15CEDD4CD17A299893ABB5A9AEBAD44764AC5D53EC5B0692B090DA119CFF0062129303331918EC62BE9C787538A4E1A4EE9DD0501ABF4D0545FDF91F2FEDB96B56354966FA8B1ED9BEBF6CE9131E21B74A54EA5652A895019274CC9390113FB55C7FCC44A40F9EADD201724D389EB7F4D21BC8C2CEA50D6E75F77E19EB0D6F7136ED185DD29E6D16A94951714A809004AA4E8204C98CAA0369F8BB65ECF96A5AE6A0EE8352A4B5B57F2BF78B260B08A528259D4726BDF5B0CDBF6DA81BCEF6B2DDFEC7DC3D63678BA31DC59BE248C2B067DBB8BF5AD23F2A590A0A2A9CA23E735C47C47F15F634854D1F3E51500AFF00724316A06CBDD2D16791B2B78A7E8AE6E2F67FBE5525AED18A99DF26F8F78D85A2F706C39AD98D9FBFE34B0C630D5C59ED1B484129529F4A4F08E28E264FFD08EB5E58F1A7C7FC461715324E1314532D2540042C806962C4D19A99F38B1613C3E850F98505D4CC08A060D4E3A33F286F83EEBD8BEBAFE67B578E6378A5D9505AEDDEB90FDA49CD4025C1307CB3115E72F14FC72DA38D331271733EA7702629EAF70F6D74E959895B11200013F50CC870391616D7F35C9EC5AE0B8484DBD85A069A68421A4B690D891AC72922550333F1AE3D8CF1EE2B684C56FCF242890C55EA0BE60B3F9089CC36C800074017CAFCAAEE39D3562F0E9788DB110AB5682644C204FCCC44763F2A7123112F1A9798A1BC41CC568F6F7DA2451B2806DDA13572EC73AE75D1E0172C3612E59B4842B4571244667B69ACCFC2B8D6DAD9D8A5F889A4AD46515644B014E9DDBA64B0C1A93BC998DF5301BB6A5C97F4F2CA29BB5BB7C10D9E042345F0E47399024F3E53AE5E553F324E2767CB4CC0A208DDB38146D19FF3A986B88D9E8520B3922FBCCEF6D2FF009B45AD866D07FF00816D93174DAD630EBC75B4DCA947DD4121284F88720389648483AC7781EB3FFA7AF1BCDC36D4C24B9D38A46FA036F367673A80C2BD328A16D9D9EA017F48200A86AD7FBAF08DE3B2B862F059E20CA7DC71A42DC1A95788D8292206866467E55F62BC27E24C3E3763C9226254F2D1621DE96ADFBD41BD0C72CC7CA5CA5949AB6F55249B96E1A75EC22EB654168E21224CC1D469AD5A02D333EA4D8D5A1ACA0426AF7CEF427DDCC2B598560A20828820A2082B06C791821B05242B965ACC41EDE79D42A3682A6633FC32490F548371715360F7E02F585424945297AF5CFA450B751060C1E922467FE321E952EB929952D5319886AE43573473AE7CDE184E594AB749607372DF80FF009EB6E5EDB3D77885BDDA4AB82C82D2100E4E0793C264660F083F426743A61B694B5A6648762BA298DC07760CF5F22F9C3BC1CDA906C0E5AF63C99FD446897B5AEEC2E7F96DB6F0F0041FC7ECC3BE290D025DB945CBA90E8570895042279E4267515E6BF8D3E0346DEC2E2A7225050285127774196AD47C9E8D78E8FB0F68D65214C145986603DC8A548B1A1D230CE01B5B6FB5383DA5EB2A0DBEB425B76DE785495B4036B0539C4A924C11A57C9CF1F7857FECFB6A761F7373756A04377CAED6CFBBC7A2FC3A913300958AD03837A8E0EC4B6B571138DD9A5E1C208438661472332799CFBF6F49AA22B06A975673477C8E6DF819923368975A0272040AD9DA81DD837F50FD9F12CC780EAF8968CF8A7AC75EDDA0E99CD3698B12AE403CFDBD5A90D16029F75B81ECFE90F9AB9194E7AE720F5CA333EB34DD5B458DDC73FBD9F4E8E2F0D148214D523337E8E58439173A67D39C65F1CBE1E95A0C7392A05EB4A870D539E661DA255052ED762C391AF3878DDD6B9FCFFCFEBFAD3E958E342540D01A9B599BB1B5A34561F41DBF43D44495BDC7BA9274CE7BFAFEB9F99A9AC3635C02145F47CC11F8A54654786536433D393367E9E96A65128DDD8C803E7A09CF31A7C797954AA31E4A4EEAAE2D4EAFCF817A3F0862B906A4D6CC19ED7EBD61D78B2AD411E93F2314DA6620A94589B9A3F3C837B7864B94E5ACDC7F47CE1CB6F0C88C8C41981F4394F6F2ACA67106E7AFE7BDE8D7D234F95BA2C0F9935E5587497A10003ACC91E7E83EBE95212A783572096EFE9A793BC226555C01D6E3CBCEFDA00F1D38943D4FE84D3A4CE049A654D7DFB6307CA1C3853DB432753C6E295EF13F1F8EB51B893BD3093776603261EF8BC399602502A2BD2C4DB9427E17657C3FC5378DDC6A3B887CC8E16D23CF5F3FDA8845441510F0939A2BCFF5A05481AC651FC875F4310376E70BAB13A46435FAF7AC4C04023DB3DF85A1E270E26241677AD785743DA2356E8D4188F3F8CFEC7D4D47CE21CD0E556A5B8F07F511ACB0252EC03721E963CFFBB5F1FC1DAC5AD5D6AE1295B6E2542089047DE9F104D29869E1EB514A71CAE0B71EE0D62DDB1B69AB0D325AE5962935D4E7DAFC1A39E7BEBDC83AD3AFE2B86DB10254A8424C19F200CF4CC7A4D5870D88DDF50E73E5CEF46E3468EFFE1BF1B7CB952C7CD3BC00DE0FDEFA79E6F411A717D8662B862541D6821482AE20B0A0A80729D397C2454989E4DCB9CF3FB8D3FBCBBE6C0F19C99D8742553379D981555B817F2E76A45BCDE3AF070B6E96C198304E506273396791F5CE915CF228E69535A7077E1F9E57EC26D2958A1BC374B805C31E9F887AAC6F0F527C2B9E052849311CC4E527EB4DD53C005CD4D8BFEFEEF6A343D9B889724198161219F260D42D4F7E96D59E10F6D26D35ADB5921D4B2A74090232C8F29190397C2A3CCF24FF002163AB654CE8787E220F15E38918013126686014012AD417A3F316EBAF55F727B14BD9BC36DDB525521B4A8920EA44EA40F3CE464072A87C5E20A94506A05186B9B823A37121A8D1E56F88FE2197B5B15366214FBC7573F80FD684E95D86B5B22FDCADC1C86B1D3F688F8E7CAAAF3E4EE2FE6002B91777EB98CAA3AC713C5E2D23FD304BD180234A9EB7CE2E54307C36DEB7716D2D869F72E14150901B42949923B2753F2AB3F8687F938B932C1FF700AA0A694EAE699935BC436227ACA666FB1410C9003A8DDE8F95BB691AE5EC70FA7783ED65BDCC72F9D7B10B6D947B086F0C57178ADA0BF6CB6DFF000E4103310A098D3CCD7D0AF835B351253859850E06E9A0B97D2C45B331C5FC64A56E4E29504BD89341C0F3B6763CA3B5789ED2E0DB3B64A7AFAF2CB0D65A4125574E2590001275204C011E9E75EE3C3789365ECED9D2D33A6CB42D08662520EA796AED1C706CA5E2A66FAA5AE639A2921D357CFF005ADA91A3FBD2F6EAD8FD97B97F66B63ADEEB6AB691D516996ED128BDB52E8C802942828827A6BAF9F16F1C7C5FD9F804CE12A7241485070A00F30694D6B9F289DC2786A615552425814900D35DEA368D4EED1AD8EE31ED33BE7BA2BDA67D7B15B2B78AE26ACB0455DE1F88A1854487DB54A01524F4820FC3C57E3BF8E789599F2B0F8A5D94C02C80C5F27CB3EE6B16BC16C192809594A41A312056ACC33A722DCE329ECBEE5B77FB20DA6E1786B78E63EA016BC571665BB8C483BA9525F8E3E29933E43BD79536FF00C4EDB98C9CB32F1338A544827E628EA00ECED7358B3E1F62860771CF10F40039A01F7E228D1976CAF2DAD2CDB65D0AE36C11FD503C4009F7475E102027B0C88AAEA36D6231C8F998A9855354FBC564953D75A677CBC8CC49C0001212C4021BEFD4371A5C0842E3681B40842608F42627A6BE7A6994655178BC22B100A92C49773D684D6A5C7A7187C8C0A52E48734A016167A5AC1D8171D61A0C40DC8F149E12A9CB498819C93AE5FE62A167603112BEA028330FDB27B96F505E1F4B90909DD0C40347B8A934CFD34D63C37103527B020F61F5E9972D2914ED5C66114005AE94352CCFA5FD87857E50C9B3FF006FBEB0ED9BA1C31391981D0CF4CF4927A6B9F4B56CC54A992C63A78057724EA1B335F3CAF1133E6A513B74F604E63306F6CA9A0AB8768BAE1E124E5A723D758F803CBE34DB6C6D2C2CF96654B6DEABB52C5B57FD8D03467E599A9DE48398A3BD19B91FE8E4F696DEE12BC6B66F116AD65376B4B772DBA9C96855A10F40234E22800E42454C78076FAB63ED492B0A665A58823506B466F7A9883DAB800B0A7191737AB68F97172348CEBECD9BC73B6BB0D87AAF9D42715C2D4FDAE2ACAD50B6C36EA99B62B495482A4360898CF3026057D6FF0081BE2F5EDBC1E0E4098A51DD4821DC0343C1C1ABBDF2668E3BB6B67FCB9AB601D4AFA435581ABF106D71A3398DADB6585B414233E9D394768FF55EC9C34B32E5A42AA77479811525A0CB5141B8F7EC8A438A711A414410510414410560D41E460862B695C648227F7FDA7FC72AADC9D958846D6FF309FF0049CD896A0CC7EF3E30E12AFF004F745EB539177B7A77E109780A05464124CF9F3E9973F972922CD8B989561D72C36F100303D5FDEBADE3A7C92B5022BCBF40DE1838CDE36FB6B6548F0D321C4A89CC1CB2F39EFD472269D230389978BF9A15F4B92439AD6BEE96EB1B4A1F2D41CD012E06B959DF96A6F169E3BB3CF63AFBB657A8B6770479A710F5BAC152965C6C89283EE9851907D6A5F68E0656D0C22E44C46F132D40821F22053ABFF6F162C26D64480192833014FD4431605DB514B59F5D390BBCED96C7370FBE1BBBEC45A5B3BB4C5EE9B187DEB69526CF0E52C00B4DEB86196FC57DC096C8D4E4649AF9B7F1B7E10E315B5F13B4E525A4EF2D4285B95B864D51DBD11E10F14C8998144B0C16000A4E85C5F893972BC64EC531469DBC63F95BA8711E1B4ECB64282D2EA12B49491120A4F5F3AF0FF89E51D8D889926602E85148E2DD069DFAC742C1E2062929B97772CEE0D998E86F5E10F7F18AB85788E4A565290A072208196BD62738EDA455490938D4EF21C82F703D1F2A67931D2243FEDFF4FD36353A0A03C0E674CC712E1A749C81CB399E594E79FCFA73AAD6D952F0153BCE34FB0EEFDE911F3B0C50A2925CD9CF0CC77AE5CCBC3A0F1CB3CE791CBACF3EB9EBFA536C0CF5626589801A9B171CCF2B5A9C328752253201567964039A5A1E36F19D4E99F7CB223EFAEB52B2D6A04006835B06AFB6AE42B4817298D183BFBB5FDF37CCDC840824C8CC4E9EBD4F6E644CD4AC9C49481EB6B65DFA529C58CE4D1C0BDE9F7F3EF126CDEB41241041904401033F97CA633315228C61490C6EC286CD6A397D79B5CDA3A6A1CD081C39B69516D224117CDAA08E20349CB5119CC79CE7EB4E3FCE4B80F56B92C6DC0E9CB943338770E01A92EF7AE7D3434E90E91760F2313D33D3B0FF0073DA9DC9C5A580A1275E15A55CB54EBA3011AAF0E4243379F637FC3F387ED3A1690648D753F7CA3BD49499C0B35CE6EC03396CF2E875A886A431208AE60C384852B457C499F9FEF520858A3B1247507367E7EDA34514A6E9F20DEFCE1276E034E14C4981A673D3EF29A426252A39823F5ECD23644BDF4024917E63837B2F0A25D2A12065E47F7A4FE582F7A5EDF88C19605DC3F11F8F75D0C2A1E200100C7A79567712C2A789F6FE4234F941DFB1B9FB7F51E195273D4E7F3AD0A085820D01D687DE543181F4AAB56D3945B778DA8DC2C83CF4E5EA0919F5A4A6CE480451C6B7B3BE6C226F0CA48949A3DEA00AF57AC462D0B920900721CC91D79FED51F35495367EF30E4728426618AD6A21EB5A1ABF7B71F286E0381D25C292DC0084A7946B97DE51AE7484B1B84B92CE2DC1D9E093226C92FBC79B906F4FBF631058DE1F638A214CBEC8532A10414827969397D3D0549C9C60401BC016A55ADCBD5BA67160C163A7482085356A145B36E35A07E3A55F5976EF719B338E3B746D5BB965C7408E04A12DA55C3CA0729EBF1A79FF00714121BE9A56C071E4F4E6747A742D89E319D83DD1366380DFC4D5C3F37F77A46B2621EC8370EDDADD62F8A5B5289095384119CE7EEC4F5E99D657B450522A2BDF3357AB7BE7D6763FC59C2E0D094CC51A001DEFA3D7BE94E30F2C7D929C438CF8D736EB4A0FBE56A25644F972D23E191A6AAC6855986957E1C39E5EA0C9E3BE32E0A7CA32E5BD410F41DAA4F3CEDC6362B633D9EB65F035DBDC780DAEE5B852961283EF01391039C6667B742115CF46E9622C5F869FBA1E51C9B6E78E66638CC32A6A92953B1DE6353570FCCFEA873E3569658682C30829E0425290008C9207FAE9D6A03138B44B9A4A8B819BD6B5AD0F3CDB368A64CC5E231690B98B2AE65D4C4E7534FEAC21EE1AFB6C073C549515FE58823312013991969FB53156225E2C89680429D83655B3D7D2AD4D0D7F152A615956F11C9C963A83C7DEB61EF676F86C86ECF6BB1568B366E61F62B4FE22E3DC2E9B86DC6D3E12841570A8C1D62BA3782F62AE5E225CF56E9485051B937D326D29E71133C94975294F50340E35F7DEFCFEF629F6ABC3F753B27B6F8A61FB3B88ED0EF1768EF880ED9DA8BAB7716DDE3C18F1085070A5285A44E6400790AF69F82BC6F81F0E61A5A6784BA11761906A3915E2FEB5E7BB7F64AF6829C12525DC3BA4E8E3576EA6368D9C2FDA37DA2F13FE77BC8C69DD8ED9FC45616CE0B82DC5D585E30C24884BF6EECA525C4F091C8C9390D281F103E37CE5E3662309885A6539000511FEDC803C433D468F0C703B1918597F2CA522F972D47EDEE1C18DB2D82DCA6C16EEACD0E1C370EC5B106D2957F37C4D969EC4BC4199587C0078A46473AF3178ABE256D2C7159FF226105DC95927851D9EF47EB5112F2F00898A094A149ADDBE9367761620EBD6ED78DCE34965F5B96B7B74A57BA1285B92CC0C824091EE819013CA04E83914FDBB3F1138AE74C5A8135DE24FBEA732F60D3B85D9492005212025DE9AE741DDF3ADA1156D23CE0F7D8B4E28C9C4A7FA82720788C67DA35F854CE071F805247CF92925AEC1C1BBF4D444A4BD88CA13113266ED7E97A11986AD2FC03666B0D5370BB9578AE2CA8AA4EB33197C8683975AAD6D19EA56349C2AB764B80C3EEC776D4CDE99461783F94ADD0000097767D437322FAD6249A6ED9413C62546072CC7D67CFE13562D95890129138953E46CD6E0FDE9E51A2E510E52D56BB9623F2FADC3C78B6C2544344840D04C7E9F0D2AC8B99859B2C83287D4340E3A3BEA1AB9C6C896581FA4645857DE77308159491999FD3EFF007E9558C7E064A945494A5817A8D33A574CEFC214DC2C6B5CB4E2F0A22E0275981D4F799E71150F88C79449560A4D1767B369667BF9718AFE27013264E2A06E5E9F6F60F3B05C5EA0260851D7BCF6F53DA3AD57D5B371F289C44C98A29772378DBAD8B11A3E4CF47F879265202564DAF535D3D8ED9C95A62B6FE33368E5B5C2D170875B52820147BC929053AE401CFA537C3ED9187C74948554298D58B83AD7AE5D03445ED259099891BAE59A976BF96675CA312EEFF1373751BFA7F67710BB6ADB6776E1D4ADB507382DAD956ACF8812B39252A71C54467C4A98CF3AFA77FF004BDE3593825E08E2541481BA0906E3277E2CE6BCAD1CCB6D23E6054C4CB1BE9A25C6B43D1AB5B1A56B1D4EC32E9A36CD80B4A894254983F99244A543A820820F39AFA7F83F1061F1F85978992C10509B35683DDFBC731C5A0FCE59C89A6B76F66CD5E53156186705104144105104144108A8428F9CFC73ADF786E367FB778502C2535CBDDF2D229A6B3524BF166E8DEB942714A913273CF9F2E43A5353F4D48A8EE3BFB31A2D05E82B98B1868E351390F3CE79761A79E9583894804B81467E85AAE6977FDC6A2528107773BB569E768E677F11CDB0C0F07DCC6D1E1D890B773107D36E709B25709BBBCBA43E92836ED932B0CBBC0A5F0E6919F979F3E2C4F9733033904228955DB31968FCBB476BF03E0819067EF2895EE9097A067BF03E7A472EFD94F7E3B59738633B17BD8B7B7C2F1A59745862AB4AD9F16D82CAD84F8CFF00BC4A58F0D10040564328AF953F13766CB99B467AC005D6A3AD09B5BD34B8CBBCEC492C25BEF53270C72A81AE95B51AF1BE7637A875A43ADBE5F6CF170BBC5C41624899C811A11CA32ED541D958444A400774024DEE2ED4BE5FA8BD26480809005402F571A64C694B0B989C6EEC04C0D7427940EB3946703D22AB9E2BD9E89A8580CED7E3477F4B6552222F17860AAB5791A65D2F51FDC546F805646349CC881CFB7FBF5AA7E100C3A0201AB97007134E4DE79BC252E584CBFA921C700FA0E95B707AC3B45F080273D73FD7B7EA741CA45130383E791CB2B7A084A64B241296B8A5B5D2997E9EB0F9ABB0A0924CEBCF9E9A6A7B7FBA7489A1C54B771F815FEE23A6C925C1A0E1EACDEEB687A8BA190904E59C9E646BAFEBA74A7B2D6E1F7806B3963D7D3F55868AC31277999B571CB85EF539DDA241BBA1C2923E1F0C867FBCFA5644C014E1C936A023A5B5E6611128824D9F5D2F461687EDDCE5F9BEFBE79794F5CA9EC99C090D716D43DC53D7F508CC94452A470E9DDBF312B6F78021327AE5273E5A7FBA9A913451E8783E76E3EF50D0D26C81739817BE7C06991E31248BD498D27439E60FA1E7CA2A5513ECCD4B3D1C77D3AC3432C66FD7FA8A16B4B8B9009273CFAC7A74EFD666B2A9E1CD09E34F7D237480031CACDF77E3A43969412224E713DBB4749CFF007AD7E790F4BDE9FB84964166637F7EB0E909073398E5FE7EFE5419CF93721FB86CB98C0B676D7DF1FBC2B5AFCCFF00E6F7D61A9984162F5D2DD33FBF3881BDFF00FB0BF4FA547CE72A249046447DFAFEEF13D842F253C00EAF58897397AFE948C3E979F4FBC377397AFE9442910F73CFEFFEB4411EB6CDB2DA05680A590413009E713F71442A852C00C12D567EBC5E115DB594FE448CB2C81F9E5F4A216DF570F388F73094B8E179A4008511000E913CE338144604C228E09E37AF5F7DA1445BF8060888E7C8F231D873EF44677CB3325B46A5DE195C3216EA960483107D35C872FBCAA1B1D24A86F11ADA84BBDDDBEFC1A24E44D1B9420062E2A03F4C859891D2156ED867967A8E7A89888CF5D341DAA1F08F2E7821AEFA675AB59FEEF0DE74CDE71955CE7C75ABD6343BDBEADF686FB61B67300C21D72D2CB17BFB7B7C49E6D4A6C2DB5DF32D80B52722085100284679F4AECFE1ADA2254B960AB404BD2EE3B72A9882C5A86EA998DB893CB8F95BAEDB6E13D983763BA3D91C1EE5BC399BFC5EE6C2D2F1C75D6997125F7196DE278B841FCEA3CFE3CEDF8DDB72E54B24CC724506F123A720F4D78D22B6B5CE9D34A10909961F7CAA8AAD8A69DCB3F3778CF78A63F6CC214E9B7658B8094A421A484A4250385B006A3DD007D00CCD71BDBF8E189C42A606AD28294B5F53CEB7D21CE1B00508A954D00BBA9CD497356B062FC39B4639BDC7B12C4D6A6DB754941910091F08F2E5DFCEA838E1BE556A963C789E2E6E35B5225A4E0C862D42CC0587BAE6F720521807EE6DE1A714A52D2249CC9839F3FDB23CF5150A6532AC75ABB6AE78FB689AC3E0F7402E920D9854FB2F9BDA3DFC6BA3593F2CBAF3D396835CEA4244BA501B1BE7719FA6A748999787DD4821346E8697B7AC5DB85BA576CD2944E7C53D400A3A0EA0F5EA6293561C99AE1D9C06722AD9E5ABFF00422BB8E4EECD239D0FB6D28E4C5C4C3A32391E93CBE7A8F4CA3BD58307240DDA0B5989D7954B573FB3121C343A99CFAE75341C000E50000504325EA3CBF534CF14CC5ECD5E5F4C6628FBFBF8D5357249C715815715FCF0EBA3EB1B265A58BA5B98D79E7F98F2419CC65AD48ED29DB982292C193471FA61CCBD60549770C082E2CC69D2E215C26FEE9DC41E64320B5625210B293EF78B32674C8FCFCC57199F8829DA454E28B198A07700D5FF004080F5881DA1856A549503571CFBB659D7478C5FED13B2371B41B2831CC19D533B47B3AFDADEA5E68F0BDE125F6DE7405247147828502274E55ED9F81FE269782183056032902A585C020F534FB6747C7E08AB788723EA7A38A70F77B3D6378B707B7B6BBC7DD86CDED8DA5C05B86DFF000772D85494BB645368B2A03FECA6D473CC99F2AFAF5F0EB6AA369787E42C4C0A2A407AD7A8E1D1F23AF24DAB855231AB94414073BA45055CE9D5867AC6CD57A062BD05104144105104141A0274821051924FD690DFFA9812E6AD90CD8FDBBD2352A0FBA7CEDAC794BA405B0362EFD1FF0010A01F533F51C9E1A2AFDA4AD6C702CA9B8E22008CF3C8CE7F7DE9962C7CB04873EE8F5E1E6D95551294B248200701EB9D3F1EE90DD58836A4DC1085245BA14E28AB294A50546328D07330488AAA62B13B8953920A4289198B97BF3D3CD8AE65A9050ECADE20063992DE5DF83C70DFDA0308C53DA3BDA57F97DEBAB6363B6096EA2C6D41294DF2EFADA1C55D20CB6B2CBC9E268A47BA60EBAF8E7E2DF8C932F1589C31994015F4EF3B1008B3DB5FB08EF5E0AC37C8D9F2F7C0DE6AD8BB97626E6A6A1F8F18C3FB47ECDD6D87ED134AB8C47107459B9386BAD3A14E24982A43AA2326C1848098F7644D7807C73B6133B1335654F551777ADC1BF0FD523AF6CC98997BB5A8636A6552CD9B9C890CFC364366F07BFC2708B4B2BB536A7D8441282A28293920E9255C31C5AE7AD72E46DE4CA252179977229DEBCB99D62E122724A4070C33353C1F5EB5E81A2E24F1A44127976FD07EDA74A8DDA1B6538896AFAD2487A3BBD5AC09CA8D946D37FD4FFC7461EFB3B738F0B2E2A1D0A002B91999F211AFD67388AAB9C4BA94AA33DFC9CB1A3C315000D81072FCFA884D771E0E4A24C69C267FC73D7B1E74A2279A90A26D6B31F75AC69B81BF8D356E3AE55890B6BE416D27333ACEBE7039FD9A7A8C4501053C43FB670D952BC631FE3A540BB31E845F36ABC48B77A88E6077313F3F874F853A4CE71424BDD89667FD7B1091C0D281C7176E7D1BCF263128CDD254849139839120C41F879473E94A267310C4BDEB979E6DC5E194CC2906D6E4FD2943AB5B330F9BB94C6B19794FFBE733DCD3C953C13A72B1CAFC1C5FCB268A95914039DBF421F35789809F78F48EBF796524E7533879EC0390DA3F3F400E6C0D2F0D26C87FA5A9C8BE5E63D6B9C48B5700C448EBE7E7F1F873135288C40342486BB1A7BFEA1B2B0DBA93F4853DB5F327F5CE1E22ED2980788EA2674E739E5AF3CEB2B9EC7F950330259ED5E37E1AD2F0CA64920B817C9A9D19FBE6F0EDABC40000E2275D75ED964639FAEB5A0C439FE56737166AE74B65DF46EB9248219AEC452CFA57F6CFA44BB174D142409CE7F365D7B76F8D6558A2C18B1A66D72F91FD00781762B94A62E03E5FAA7A4394BC8509063EFF005F856AA9F675543D01704F17CA9701AF0D8CA5120EEA8B543547A5CF768B7EFDF425F58E6408EF20E7A9D23EF3AD8AF7EC4E4EC4B70A74ADE2C1844BC9045F3ADFDF488972E10391CA7E197DC510F100877CDBDFBF3868BBA41204191FAC511BC34710A767872F3F4FDBD28821C356E80DA78BF3738CBE7F7E7440E0355B480E1E16A8C8039F2D75FBCE32F2A23054407A9CEFE7124C36DB2C2595092999F5D2328D3EC5109B2D4ADE0A2125E84FE2BEF8C475C59A9D27878403D49FF7A7C0E9D688583EBFB6B5BCB288E368A6D5C2AE1319C8F975EBD49CB91ADB13212AC31555DAEC694CDEC4DFCAAF0B0C46EA00722B716377E197DA164A1291A09E754F520CB9C9235AF0D1C3F2E0E2958426621C3024358D3F7C757C9A310FB40EEE0EDE6EDAE1092D0BBB2BAB1BAB22278D28B7BC6DF7818132A4A2044F43578D97354896921541DBEFA6BC223664DDF514545CEF1700F7C99835ABCA32EEC86D17F37D8DC1136CD949366DDB25C7C43893628432EF11131250784822728A4B6A6D39A842920B8B67AF46E8C2199900CC0B0A502FFC41649B0A8F4CBD623B107AD6E5C5E6E2F382A519929C95E920FCAA9B331866A89726E35CEF7E5167C0615E50243F1CEBC8699E67388A6908615C4D0CE79F4FBEB1E94DD52CCE340EF4A5D9CDE85BA5A25E5C80C10121BFF217F6D5ABC2CA40721C580547398CC41E607D018EDD7518204EF29245F8335B2A55DBD1CD17004BFA40492D9FAE7E86AFC63CF01BE9F4F2E9D2B7124203311C68077B6B9C29F315C29CFAE79E7133689E06D0907213CCF53F79C69CB2ADD321D4E41A376CC598D73115DDA65E6D1201AF2341DBDB9A44F5B93A8F21D0CF3F9FD6A670B26A29A92C3D3BDFCA23A24D1A791A7AA4800D1886FC7BEF7821AB90083A0EFF00BFAD4562177702C79585FCA99C108ACC0D0CF2EB974EFD2A0D52809A565BD2B933166CF9C3A4A5CBE432D6FF00DC362E01208206533239FC39F5F86B50BB63103E5290E5D8D7CA96BF1E42D0BA50A5073BA34D7EF15B37EE5AAD2B65290858578E63DF24084441CF339CF2E432AE458C49FF0024AD2186F397B9ADF46074D4E50CF15864A812A033624DB50347B5B2D6B14D9B571892B106AF54971AC4187985A3320A5C6D4DA723AC050991EB39575EF03F88666CD5E1C15EEFD686A961F50F4AB7E1E2AD8CC227EAFA458D8703A52AF90CF568B0FD9331EBCDDA6F276F373B8A5D04E0E8B9B67F669BF10F02BF13C77777E18510930A589E0CC1F39AFAFF00F00BC668C56C0C24B54D752928497232C8BE742F71DDE394EDDC0033D4B523EA0EC5BFAF2D63AEF5F41A394C144105104144105609604E81E086C5414A206467A743A799EDDCD343FF00BC6A0FB8673F878457FC8E56FCFEA3C518498FBCE9F4914E9EA4FE217921C025E9F9311EA6D2975C75510A02644CC40EBF1FD269AE3801289CAA48FC1D783BE74021F8A25290EE6F7677A76E2CE6DC2CFDB4BF1856018D5EB64A549B37CE52238585F4E7979EBD66B98EDC9E5089CC48FA1449E878E59F0A350BC8E090662E525601DD26B424B90731AB5F83691CCCDD4356588AB17DAC712955F5F5E5CA5D5C02A2597DD6D3EF6A0C0CB58E5957CD5F8CBB4272FC47899695AB777D4C0167A1CAE6AF4E7725E3B8787E684609296C870ABD331703A8222F5C470DB7C495F895B214E2566094CC4188EBF4CA72EBE57F11E1E74F4AD6497A972795EADA67D62E586C604B7D4CCD98AB57ED61ABEB0DDFC1028173878652204690398CBEFB5719DA089D2A6299C313AB54F1274C998F08B2E17690A00A532A8EED40D634FD45B17964193040100F4E5DFEBA76EED70F2E6CE35A825F8FB2F406DCA827E562C2C0726BC7866FEDAA62354BE06C27A75F4CC0EBE7DB3E55ACF0A92B292F562C03D40ECE33F485400B5125C0A7A33F4881BC7413CA679F4FBE7977CE45665CD63987B81E4783F1D0BDA1CCB96EA029BBA9B5AFF9FBC356AF3812124E63F7D4F5F334F11345DD8E9996F5E196A61DA70E0B101DF3D32CADDC3DE8F0FDBBD0AFCCA811A93F300E59C098CFB9D69DCB98406714B17FD8B37BCDC9C28091BA05726FB5B958359A82262DAF416D2388F38CF3991C81EB3F38EA326794B3392EC4EBC49776E3DE223172B72636E8A52835F4E36E3122DDF640A8E5A139E44C67CBEE29FC99CC41C8DA9CC6AD5E1E511D324850702A323FD39E50E917C018E2CB9EB23319EA6A630F3892C72ABE5CF5F6EEF0CD72B781A116C980CA262DEFB2199E5AF78FA8CA474A939739E9F503E6071AEACCF943654B20B338399B7A7DA1637C028C100E53999F4C8C4E7D7AD0B985C392F5B7DEBEFBC64E0C285535EBA51EEF91BBF1061D377C081EF721A93FA7D6739D2693336F550A8ABF2BD7A7286D3304E480917A86B7603D4D75CA45AC440481C5A6B9E539763F31FE76F9F5B06F3ECFF7867336706074ECDCFCBD987EDE240089F8931E79447DEBCB22702CD57FF8F0C8DFF3C4086EAC00161D48A7EBAD32CE185D3E1C714BE67498CBAF79CFE7CF9C8C82E9F7DB4CF81E79292E58969DD1D6235C744E7F7E67A9FBEEBC291EB69E3015966796BE9E7E74410ED0D1CB98FB39988CBEFB9042A4418A21BA955739F97EA1CA3F30F5FA1A235F9838D32F6605FE63E9F4144642C6448F2FD4534463E6F151F7CE105B3C6A2A024E4797974D7F7E666A41697C29A3B8A9D397E6ACCD0D5734905CB0CAAD4BB77F79C79F86FF00C7D23FC7DF5AA74D40F9E684D49715E9F807C9E35130A894B8C9ABCADA583FE690A8B14DEDBBF6AECA982CB8953660825685465A183F09CAAD1B3641296C886E4DEDCDEAF7AC6AE5F526952EF97703CE30CEC4E38DD95EED1EC6A8F05C6CF3ADF829D14A17CB53878473C959F6A63B5F0CB014F6BD3DE95A178D92927871EB945E7F855B1FD3590A503C52733EFF00BDDF406A80B5FCB9C47F17E87DFB348B66CEFA64241CA84B71A574D32E791E1764FC3FC54CE1415B31622A479BE61AB4CFD0C86F8073705A90A04802201F4A9712A868321F904B5FAC60CC466A0F7ADFCE00848E533D62994D9612FA1D453D83EC504682725CEF100017CBD7D9F29063F2A2639C41C8EBAFD08EB4EB0F237D20DDD89A56BF815B31ED1018C98664E5682DD7A0313D6DCBCB4E833E8627976D2A664C90801C574EE0D087AF38690F0B9C23873D351D67F6CBE149E24356CFE6037DCBC10C9C7323973FD797A49FF5355EC49604D33FB7BFC410DD4E8EA66633F8F7FDAA2A79694559B2892D9BD2DC5A0FF2025410E6F52E5FB701C74EAD5C7233275EF33AE79C7D39552368CE2A252EE1CF50ED7ABE46F0FE54F490C7DD6F7B71B7DA85105B047AF4D4663AFD63D2ABCAD9C66FD6CF9E55604E4281D9CB5E9CB49CB1BA4920BB3035035234D49BD32CA6F04FF953E71F08F9FF00AE5580A5E0D48209494A833508ABE5E5C1AD15DC496DE21D4E7E902E336D3AF9346A6FB495CE2BBB9DE26C0EF5F034ADBB7C26FC338F968101D45EBACDAB25DE18E2090B2654401A7427E82FFD3DF8C97270D8390A9845500D7FF21DFD98A2ED8C37CCDF3A822D62416D73D1F32F947786BEDF479FE0A20828820A2082B04382350D0423E17BD20FC7BFA521F24EFEFBEA18FAD3DEB09A90492411580B64822467E7FB5390BDDDE24528CDC183DF8F0B7185659DD0C47B73F6310F7E16A6DD436616D14024E878950207FAD79C0A678D5FCC945097048CE8CE5B2357FB71877267A10BDE5B9B51BD72A458DB75875C5DECB6376DC4853AE61D74A46A724DBB8A39C4FA0F2F3E79B5F63E23132E7310C50B26A43063D4D1A85A99449E1F1D2654C4AD2183B119124B0E0E0F91E71CC7DC03CDB78662D6B700B86CB10BB45C30982E33E2DE3A10A713FDA15C8F31074135F32FE366097B3FC49893313BC42D5E635AB3EBE6CE4759D838C97330882924067EBF8E71B14E58DAB0FA2DB80C3852A4AC0050A044FBB9004A4644472CC579A76A6D5C2CC2A925237AA0D85EDF7BDEC0DA2D322715A4A81293902F6B56D434A5BCC45388336E0A9B42488033CBA7F831975CBAD4713E1DFF00B8952E58649ABB55BDFE844CE0D730A52B529DC9601C677FCB77D31BE3764A3C4A052224C73044E9F5D7302321155BC4E1E4EC452BE724109D450BD0655AF0D38C5C301342C01F507FF769970D39B73118DEF1F0CAD6D282894C024091FEB9FE99CD53F1B8A463310664A1BA1CB3160CC464387BB0B4C895BE9DE01C3E59F3E16CF567310370AE324E639E7E83989E5FA69AA2896A772483AD7D93E50F25C95381666636B0AFBCF867185B738894A81132333EA0F7FA75269E4A965C1736CED5CF3BD80FD987F2A5D1B93D7304DB8BF68593C7FDC72E93CFB7CFF6A7299643D546B93FBF5F387E84B07D4797BE9A4485BDC708824FBA3B9D7D7EFAD2C990A507DF23AF5D38F11D1A22717277E61666B55F83D439F489469D2B88240E84FEDE5CF97C9E4A429000FE4033387CEB71AFBBC46AF0E6AC017D0575191BEB0F1B5AE75240EE7FCF4F49EC2A4A4952581CF9BB072D7F2CBD192F0C5D8BA6DAD7DD0F0C8E92F6EA591AFC7FC6911D27D2A5252C30A87A3D6FC03D6D4B521AAE42F7EC00193776B663B8BC39257248574CA4FCFCBCE7E94AB2D44AFD1DC9D7A37EF285D32C0480454660DEA2FE74ED0B0714343F7DF38AD0DAC08CC1F7F68D572C2ACC3EDCA86164DCAC0E73D79FD72F81D3CE912B50140E732F5EE7EDFDE9FE383763CCFE0085917BC3C8F2FBC8E83CBBF334899DBAC2C43BEB93035D350D784578601CD0835A0FD71E10F5ABB42D299E2988D3A73CF954DE17100A035F314278BD7D1A9D622E761F754D501DDCB8BE56BB5FA457E1970FBAA10399C819FD75FB9A72678D5BB76BFEF8C246436BE9DA9F8891B76F85213AA87EBD33FF005F183FC814FBB57CC7BBBC24A400D56E7D7417A5A251A64902018E53E7F4CFB0AC89FA8FD757D783C375CC4A417E36FB711083EDA90E28149F203B0CBA65F79E547CF72CCDCF2E758899D8D42565390D6F09FE2380C9428913901E87AF5A772D3BE01D74CB57F7EA23418C41661424F1FBFE383C02E02D51C0A493FF006FF5DBA7952FFE31DD7ABE999F2BB369F78748585B0B12F7B7DE1DA1A52E22339F9524A94437DF3E4C215DD6FE4F5B337DFDFD9EA1809480A20913A41E87FD7FB9DD58A4A257CB2EC5DC5B577EF91A68623E7255BCC0B0F798E87DD28586D133FA75EB3CB9F2390CAA1BE519B38A85002087676E2C3FA2337AEA90C039248776F2A97CF3F21482CA6CAE8DEDC00BB27213E1A3374920A678498804C933A0F302D3B3D69414A480C5C16C88033073CEFD291A4D5AD52CA65969818825DEEFE63B738D24DBEDB9C0377DED43B33835F3FC09DE2FE2835C0A486D2AC3ED429297E620CA804EB988E8697C66CF998B973264B49284B6F100D09B7986AF28565624EE21DC29EC431A5E9CF8756AC6D25DAD0D043AEBAD2D4E0E24A50A95709CD32239A4F7CF9F3AE678FD913118A2681CB90470CACCFDEDC4C5A701894996135B0EAEECD5A8EFC018669BA64F17BA470827DE033D7439CFE952182C27CB29DE5001AE4B00D6AE9A30E62D12C10660040234CAF47D1B5D3BC3138A32501C436EAE54470240E210634FBEF15253664B427743161C0F2AFBE1902A9C028D4A9406AEDD731D61C33749791C7E1B8D8E8E260EBDA6A0F138A4A7FDAEC6C050F0B5ADF624C36560940D161455672EC03D7AFBA449D9BA16522149CF22AD3C869DFCB4D69FE071682907779BF17FCF688D9F832164A957B36A19F5A56F9F289F69D6DB4F115A4F380738CE7EB91F954F4B99BC90ADD773A39F57F7C5A18AA510696199B7714FDEB0E53C2FB7E236EA013AB64FF504728F4FF3AD23889732623E942BE907CDAE2BA5883CA90D953128594281E7979B7BEACD16D393EF24A0680AF248D39E9F7D6ABB8AC36254584A5B1E05AE19F8D3B5612389402DBC003627D7FB0DE6611530A0A212B43875F70CE7AFCB9C7A659D456270D8A5A0A132261CA8836CEFC1AE7CE3230867B4C133753715A7076E5E9788FB9429912E10913A9C819E7E9CFA4D55A7EC4C74C98E30F38392EE93577B8A802DE54021CA6589742B0C9E3A59A9EF9C38B6426E5A406DD6C83202A72272E7E9EBF0A5E56C6C52505270D3778D2893DB8BFBAC213E724024AC07C89146D3A8725F95E2EDC1F09750B0A2EB5CA73EDF64FAC9CAA2B1DE1BC7E20B891343116496350CD42F5D7FA82C4E20027EA0A73FED6D5A96D4D3FB8B6F7C1BBFB4DB6D8AC5B087956A0AAD977AE2EE2238AC10AB96F8091AF13606712623335DEBE11A71FB1F13864CC9733712B41208E233CA95D32A8885C60F99254776956A57335B90CD901DE3A7F5FA248F3641441051041441051041441056ABFE27A7A882193EDA65797FC8524C8FFAC1EBD7A7AC9A6337FDCFC3D4379460F0152439FCDB2E3C9A22311B5172EA6DD79B2FB2FB6E03D16D9466398F7B3EB4CA700A95301762936E51906BC88E5F9F28E4818DCFFB4D6D5EC662292D605B7EF32BC1D6E7BACA1766C179DF0C9F7412E2B329933A8D4D7CFDF8EDE145E336962B13B942546D900C2BC29C9BB751F0F4E57F8682972D47009CDF96B4A5D9E3688DC5AA516CDA96953B61C456B541E20F105B20F4E129D7B467957CF4F15ECF3B3F1CBFA4277546ACCF5E6E5AEDA5EF5B8E1674C04925442B22FCA9CD8BB80DAC33B94A16F39CD27848F513F0A4F66ED02256EEF55B95B8BFA16D22CF849E7752924B55B2A1E2EFF63DA2C8DA048085102241FBFDFAD527C5A83890B533F27AF17B39E5578B161B1664EEDCE64E57D491E6F4D2310DF31C6FAD406A731969DF239CF49CFBD50F0F8764B171C7F5EFD04742D9988F99870ADE3567626E5B566A56E395A229CB52675075CF2F49EF3F5CA9F210ED635A119717A3F5E59C4BA660480A772FC185756FBF0A0864A678544427D7A67D2453C9729DB2CEF7A57D294E5AC3B97352D40C0B683576D7CA29F0BB27EFD29EA25B5198E65ADE97872165550A3DFDFE22B4359E83D34F5CA94F9645037BE548673D637D8DC69C75B57FACA262DDACB4F86BCF4D7F7D4F3A70843007B7ABFBF5864B5B3EA7ECD7AC390214B1D08D3D69CA406043977A8A80C7EEDEA1E192CBA8D5F4CF2896B6E5F7FF006A7D2D0C904DEEC3BD61AAD63789A97F76C9EF0F29E243243FBAC60170F0526BFE47DE519829B1A13CCC1053199FCD5CE0855B742541249044E7CB49FDBE039E54B4B9E515A002F5AF419817BEBD5BCD92958AD40A8D47937189961C491131FBCF5D233CFF004A9097377F3A6751A52BD3CE2371092806AED6E00E67ED6E222E9B0B42EB285C4CF4E601EBDE239FEF272249981296724D1F2A9AF3FC1C8C40E2715B856E5865ABB726157AF9C4FB162604A7A1CA472063D7EA7BD490C0934DD069907CB835B5D2B77020E763807482EEED50E2AEEE69C69AD844B23096D684AD60151C8F5CB9E79FC63BE7AC7CD93F2E69435F30DA3B7E3AB06110F366898B726996ACCFE8CE7AF086AE60CCE5EEF6E5D27D0CE5FEAA5B0E96003529EA6BF9E3485253D1C9AB9ABE9FA7885B8C3421F52909F76004C0EDDE7A7CE9FABE9431CDF7BD6E3366F3D22770F301483C18EB9559BBB79C3450F0647965988C867F4E9CA34A8A9F340A02ECE031AE4FCABF7BBC48865243D7F3CFEFA455E3712667D0647EFCBA9E548FC9F992CCC203F70C3BDC7A738653D20ABE9CB8BDDB9FB162EF0D9C741CB2806013A1FDF4A889D3C492524B35F76FF8E57A563544A2A06EFD5AFC32D7A5A1CB0B6EE91E0A9400642811944AA639E7C8C771CAAC9B1569C64C4246EDEB93B8E635E3530AAE40975DD2EB66A529D01CB8C7CC77F14CDF9E27BB9F69CD81BFC2EFD617B118B205CF86E194B589AEDD242A22006E467CA7B477DF0B786938FC0E2F086582B9E84AA5AC8000DC054412C58E90EA5ECDF981134A084E8433F3C9DED51C23BADBABDAAB6DE8EEBB65F783865DA2E19C470AB452836BE21E236C32873249227881273D7BEBC3FC73B226ECBDA139003142883A79778929527E54C1282482681EC5B4E2332D4E4F192090EE182E90402252AD44C1E13D3420FC338AE4D8EDB0AC3120120A6843BBE4FABBE5DA26A44D32D5BAA72E29720357F41B37B88696D6A9504BCB2A434A909520C75060F98EF9FC9BE0B6A2B1AB4A12B2497CC16E9E553D21CCDC6EE4B2CA049B05337170F4F2B4480B1B8B53F8AB4745C253EF78774A2B4FC04F5F98EE2BA1ECAF0CCEDA094CC082ACD88705CE74EFAE4E5A20B15B551BAA4EF096A3729A372CABDCD6E6E9BFB5FB376AD78B8E5F5AE10FA5243BC4EA18B64C12014851CA4013AC98EF13E9F066293382132949723F8A481E9C34E4F1569BB6D3281419AA5EE9242965D44939B73A35338B77FF0077B77CD2D4D5AE28DE3CE03019C1DE6AE5E39CC7083A9CC0D64D744D85F0FB153F70190A24B0FE3DB9F3E111D37C409208DF14ADF5D756FB5ACD01886F796BB95A3677775BC3BB7CF086DDFE55C76AB3191050734FCA39E75D5F66FC1D9D88097C37F201C14126B6A31A0EA5A910F88DBE92A7DF0791C8D296CFECD488C5ED17B4A6D09E1C03774FDB30ACD0717C2AE90424E93C32272CFAE7356D93FF004FD3310949FF0012EC7F8137E9D9C6778889DE25912D442E72535A396B86A9A5BD9AD5EA775DED7F8BDAA2FD8676570E75F9E2B47137CD38D41812D819150CC6798AB76CFF00FA6DC2CC94F370690B0CE4A0022D67193B75B8A3B997E324225309A9292285DC16E2F51D351530DEDBD987DAF76956538A6D36CCE1ED4C7B9777AD40503966201D34D7AD3FFF00D9AB03BC01C1CB482D532C7FFAD5C3F5F26589F1B2508514ACAC8FF6A4BBF4773C47DC45FF0084FB126FC5BB768DDEF0E2E332E0B3C56E3F0F9CC16E53232D7F5CAB63FF004CF8100B616496ABEE25B90FA6BA655D33819BE37132BBD3522B42C08D2E696B5ACF998BBED7D8EB7CCC883BC6BA911A628FE79C83F9479721DF5AC7FECD18225BFC29433ACB19016A1AE79E5C1E317E2E249AA8825EFF0082CFF9EA6D6C4BD8B77DF89626F0777A37EDD884F86EB2318B808536EA7856387860852499D35E82ACBB13FE9B64C85A66A30B2928490412802D95B80FC55A1F7FEAC4AB0E874CC515BD80B87BFEB9DDE3AFB5EEA8E530510414410510414410510415AAFF0089E9EA2086B7124122252329EFF3FBF8B19BFEEE9F682231C5388B76C28053CA2785799004F3233CC72E94CE6BEE299AC6FEF568C8B87D6388FF00C52F7ABB3BBBEDAADD6B96AC5D39B6CBBDBAFC2BD6012432D8758FC42AE543FA890599E18E8794D79B3E2CE1B0AAC3CFDF03E66EA892C1F5CF4E9D5ABD9FC15B2E6E2704A9CC0C93BBF281077854EF026D5398E7AC65CDDEEF16C36EB6630CC6F0AB8FC4A95676DFCCD09585B81C4B484E406842C2B881CC19915F2DBE2761D29C7CF12C06DF351C4D45299E95BE51D065EC6DD5268F7BDEADE7622DADAD95FF009EB0D5B25F752E7094E6A104242722147411967AEA7ACF32D9B2267D34AB9CAEFF006F47B189991B294E027701A3839F6E3EB5D22C8C476B306C41F559DBDD34B7F4E04AD255C51A44833F18D09A4F6CE0B7904A810C0966A1FC37BD625E46CC57FBC2695041E5ED985E2DFB9B55A417142352126263B8E91A76D73C8D2578620B252284D142A75B8E00F23163C12C4A40402C2C374D388ABF0AFB10E4B6E15240854C72CF3F972EDCAB797870186EF30453830E1C1F8C49A2752A5F997E3C85EDAD6193D6F0E2840032D4769FAF96BE74F65C9DE4D1249A01981CE8DC8F387889E08A966E37AB52A1FA7F690B73CF847A034E938726C03EA5DCF973B08748C4351C97CEA416D0B8E7A7185516AB1052011DB9FEB97C8D60CB656E903B38AFE5B85A109CB04EF6F73D5FA72F6D4906D250334EBD35C8E91918EDDB48AD9282E1D8F0BBFBA43652BE92A0687337E9E77E25E160C29C25620054403AE5391D3CA9FC990017501C9A834CAFD290C674DDD0C286CD9BF11A0D3D6D0F5A49447167D87AF5E84D3A4A2B5AE9FD4332B2471CCFA43D4A4A9214220FC72CAB785E5AC04805DF5EBDE91413026915FF0023D3D042D14F18EFF7EB4D8DF3772FDF2820E34F7A6333F9AB9C10DCAD5F886D0028F8AA30672000CF8BA65E9F11496EA8AC685CDE9419F514EF1B9004B51A029A134715F3D22E8B0B65BE0F014FBA7324E5EF699F3FBCF5A90C2A14A50487617239BF60F5EED15ADA53D32D248CC540671CE8733195306C25E6EC99E25227DE397427AC7FAEA60D5BF67CA2C97A91600D07EDC76D68DCFB1D8F24AAAD90E19BB7A718B81AB55208E2E123E711967AEBF4AB3C99296714D5A9A8F36AD44434CC4A8B3E6ECC752097FEA1E1B67D49050501267224E711F7CB954262E48FF20B00C097A0CC163E8FAD6B09A66282805D9D8101F5CEFA72CE18BCCBC38812920EB1DF58F2E7D0C75C95932E9A6BAE7EB125266924390C2D50F415E86D119728096CF101C40667D632CA7BF3F5ADB10B094901ECFE97E0C6BC0F0892933095259C02406B5BCF5E5C1A2CEC4042A412069976C81D33F3FD0D5771130826CCF400D6FAB53A69C226654C06854406E9C8F319D43C44A6FDA6DF6AC940F88E85A92A3F97DC049063AC65F5D6A730E12AC0B9DD7637A9E47953D3842CB93BDF58766CBA926AE7DB5EED98C41ABB75E690140B0A09254323248047C33D34AE6FB5E62C4F5A52400F91625EFDAA2D47AC3B9528001D2406CDB4A75CBD28C621F1EC64E03678BE24B2536F8759BCF5C70FE672195AD01BD24A4A7DE274F4136AF07625B132C2D4FF005076342E685FB6BC8343D421139280DF5289DD24000006B5C9DB99CB26F8AAF6EBDB4BCDF06FFF007838A9755F84FC420308B852BC40BB36D4942923300F1B6082328AF6EF808C8FF1E4AD4582836F5890C7798926E07763589D932E504EEB0A52845D801CEB7CEBD23B37FC15F7CB8CED86E6AFB777B417EAB9BBD902B656971D52816EEAE1D2C8682C9221B48072E523491CE7E29EC1C2E2B6962276113FE8A80202D8A8A825CBF026C29C4B52313E5032BE61037D2A0CC03873EFD873D8B6AE1413738580A0A6D633232214A2A11A99EC34AF17F8B3654CC3CE58DD206F1A686D53AFEAF0AAE58090B60481FEDCF5D1EE6BDE13C5EFF196703C51BC0ACDBFE6584301C4A31042BC2BB2B495816BC32A594C7BC32CC8D75A6DE12D98B998B96ECCE9705DEB40D6D056D4269159DA139482400A21408DE4B306C89FBC6BCEEB5BDFAEFD715C4B0D5DF60BB2F6D62F29B76CD2EDC59E24B4F12802DB79CE499131911CABDE5F0D7C2523132646F212B2424071C017ADB3E0383C5036BE38E1A5AE62C929059DEBF51005C9CF8E71B8BB27EC2FB3B89B76F8A6D9ED7ED1E297AE2C9B9B07AF90F5982930021A7133C2A2339D743AD7A67667C1D938D08C40908292C689B934E3C3DB18E6BB4F6EA913968485D0515FED2E1D835CD6B9BD2367765FD99F74DB1CEB16D866C761EBB929917AED833C4484CCA9C0264E7399931D44753D83F086448521F0EE035D2185726D397EABE76F621614B52D2056809DE1C6ED52FC79659CF0CD8AC0B0D65B0C61564D38DE9E1B290948E5A0CBD79FC2BAEEC9F0260F0A9015252E007DE48C8532E178869DB56729759C5292ECCAC83BB87B7AF089D18724A4B72584447F408491D00D3BFA73AB6C9D818294001290198064836CEDAE54D4B988C9BB4C12CA56F914FA9CF5D32C8D3BC7AC614CDBA83BE33CEA89FF00F6AA67CC67E5FEE2909B83968594CA410336D45AB972FC42C3173152C268126A00C859868E21FA909223810465A8F39E823427CA915E1C9AFCB7A55DB203ABD3DB984CAD4EE951A8ABFA694EBCE17693C08E1002626001909E9FA8EB5812D219D0464E406A6B7E9AF184D454413FEE3ECFBBF584D4DB866081D3F5FB3D7E3B7CB4A88FA7300903234A9E3DE19AA54D2E778EE8AB3B1A7BA65DA18BD64B716D289013EF78C53F98FF00D6391E433E5E662D1853265482C9A32775C060D77F366D7842D2F18A928092E487A1B8E219D896E55346789EA46310510414410510414410510415AAFF0089E9EA2086970471251FF79F8A472FBFDA98CDFF00774F3682239E50532FCC715BB657DC0009FF007F6299CD2D2D674493025DC3B5C5B9F1EC3F6C3807BCFDDF2F7D7EDB7B518DE3A97719D98D83532D7F2CB9FEBD9B6AC4AC4B40B6CAA5293E280A3FF909D419F137C6AF14A70B8AC4614AC823783386B1D1ECCDFBBFA3FC1189972363CB4B805AD402EE4906ADA64FA3455B57BA8DE46C0E23885C6EA4AD9B7B3522E1581A83C1A7D025C0D22D99038E402003919F8FCF2F1763063F1F34BEF6F2CD2F57A357F74ABB45E13B430CC085A083BC1DC528D4E2FC5FCDA9D99DA9F69EDF0D862F82DC6C4B7B1F6CD2516E9BD770FBBB274F00285B8870120F1147171644C8275AD363EC733A585897401E81AF9FE6BA662A61F68E0F07BA9993F794B2774CD507357A13CF2E91963769B92C6B6230C38A6D3631758AE36A70AD4871F53CDA55E21C805C2C08239CF789A8BF116004996BB16A65462D7C9BBDE8F58954ED992A2109A519E8C5C6473F224114CCE60BF4BAEDBF1BE84B6E70C14A072190813398D67227E7CC66A01986F760070A6638E5911AC3DC34E48427754A50A9BBD0F1B3D6E3F5169B6D7F54C8124E51209D7A99EC738AD928208FA41E14CE9FBA7AC3D97354A2EF50C5BF23B7A8872F5B4AC98D6232FD60FDCD3F9325C5807A923ADF2F7CE1E89EC5BEAB5C56B736FB0A425F85EDF2FF00FE4D3912C3B96E82ADCF28792E6D01766C9DAE3C8F0CA1C22D55C2397CBA763D64F4D05349D2885BD0699655E7DBAC60CC4851049232A8CEF7F64E96854DA280399F847E95B4B95BA5CDF2ABB72F7A9A420B9A6C1BA1F5D7CA1C36C10800EA3969FA7ED34F522828C746FB4315A8B924BF2FEFEF48AFC0EFF3FF0014E25A094824004703EACFFA221BAA687D1AD7CF979D042C84F0A427A4FCC93492BF91F7943D45520FBBC375FE53E9F514DD7FC8F4F410EA11A6CAB9E67D608298CCFE6AE704327314B4B7B945B38A48B8585A5906388983300E663B4763AC4961F0A66201670D76E26E5A8789A0E2F0DF133D32D0A1BC58EA6EDC3EF78BDB656DEE4DAB9E28595A9692041260AC11944E635CE0F6A929185DD50200BE966C8356C598B5E968E79B6B68B0500482C43F77E347A072285DE33BDAB45AB76904442465A119099F53CAA7E47D1BA416CB466B79DF2ED1CF66628AE6106A4A9989E3ECD4085C9813F2EB53327115634D06BC2F56A97F4891932B7C0DE0FA021FEFC3830B887CDE6CA08C8906077EBF1FD32A6F352262C9157B51F953BBE9084E64CD2906CC468EC096F271CF488EB911247F8CE073EA273D73ED584A08A873AB0A67F91ECD1590B3BD514E1AB54FBEB10576725CCC4465CC41FBF3F8534C67D20BE6E3D07A889A90BAA493FC5E838EBC05F5AC59D7C499E433CB94683D4E507FD554B1AA62483C4D6C497FC8112B2945D24D5CD46B58C15BD0DA74ECA2B09BF52F8038E96A6624BAE25B83A4FE61CF3CA7954A61B1891830924D4103880F56B0CF21CE2D9819489B2DF7492DD32F315B74317BE1CEA5B63F1474B86EDDD0A3FF009A52AD4CEB320E939F9543694933662940E74E3C0F4C83D21499282544E45DBD1D9BB5F5E30AE2CCE138D377982E22A5A19C4592CB8B948042D0A4E5C4623DE396B9EBD5DEC7C47F87392B3A82E2F43ADFBD7BC3254D9921237777792E6BCEC39DFDB8E72ED4FF000B7DD16D66D5E298E0B92A77135ADD5A7899D5695183EE480788EB333A4E55DF7C39E3C184972E509E400000EAA076167F4FC46A36B848DE2EE0B1029997A598D6B9000B0CF9AF87DCE0DFC3CBDA9B6B764307BA2F6178F5CE18866C50B4A8FBACA4A816925293EF3B23203E157FC76D71B63672B1213F313291F5CC4FD5FC9DB78F90CF3E1166D9D3938C9414A3F4AC58B034D327AEA03738EEA6C5ED939B7F81E17B476166BB4188B2DB854A6FC39F7539C82275D395797BC6EA94A9D34B3073609A5E8CDA9BF7687DF291293BA15605B78FD5516EC4339E7AC648462372D5E165F6C2DCB64A4359122EBC44C2C1FF00BF00C8467E99554BC398E9585C6CB4A887DFC9812E68EF5A7BA44162F0895A14B4A4B170C4684D40B7DAFCA2C3C69FC736336A6C76D764AD0B4FA9D4AB14B1610A090D88412A691D51C4A12635F4F6CFC39F1961F0A8C3A77C02371AAD987E15FD8E341DA9B344D1312B4A54820D161C1BB16ABB1AE7C23A61BACDBAC076FF006558C5F0FB86BF98786D0BAB60B4788DBC984AC29092482A5856A79F6AFA6BF0CB6B6CFDA1B0A4E20EE1514A5CD08AB371CB36B5737E09E20913B0D8F3200795F5329AA033B1C8B74A335A336D9BD70F34D2DC6D293C2A0490414F0E4338E63EB1CABADE1E7618A3E86049B00199FD05FA031569A908DE0E09241BD6EFF9F6D1236E14B68294482641CF9490397A7CBAD3933124FD3514B446E2012694F633E3F68F1693A491DFAFDF9D369AB510C0916B58DB8D5B8F7A088E54B2E6BDCD7D214524FBA00CE0FE9D7CE95972D3BA3786F1D4D49CBD479F3894C3CC9611BAA351976E514F0A872FD7E95BFCB47FC476873F32528DEBCC57B9F48F0156A01E9A4E9F1158F952BFE09EC232F2FF00E447323ECF154AFF00F2F851F265FF00C13DA31FE987216FA073F7A7A47A41E11A73264FAE7F1E7CFC8D44E30CF4129964849B0141C853AFA110D664A04BB528F4A060D4E3CF5EEF2A4A330510414410510414410525F346F6EB1F7F76AE9C608F098127956E7EA4D33D79C10CEE13EFB5713EE3721439FBD9081E7AD359B294C585FECDEFD3382216F3FA0CE30EA892916370E003586EDD6A503DF281DFA5466255BB2A627FDC50BF43D2364075241B150B73A5FA472A372F7D69B4DBC6DEB5F1B0368CDDDEDA072F52D06EEDD368B7529F19CCF8A0A21327F29AF9A7F1E70B8A9FB7F13B8B213BCA60E6943F7D28C23B278713393B39265A8540606BDC7B6EE23653F9433785CC58B858B8414A0149E12E04C2071E5272034823977F1C6D0C1CC93882B9877B7555AB9BF2D687ED5116057CD9450877DE04B582732696E022B76C2F1A2A53178F31C6078ADB4E292DA80038613CF5939913234322CFB276C48C3C912E83E96233F3CE9CEB1B842A784AD602CCB3F4BD59E9467FC660BC327180E366DEE5A696D907FADC32F4F33C46739D7CB2CE6AB5E23DA32F13F3371218D2D4E24B52A6BD75787A84E2490A0B395892C45079675CE8E231DE3584C3AEB76EB25B0014970FBFEA4469CB98CAB9FA702A9BF586152C34737E072EF170D9B8A526484CC724D88A695E009F6CF161BB62E5BB854E70100C426675331D065AF6D7232A0C0947D4A0EF974C9FA92FCB48B0C89A16414921C3DF81197BD0985525B500A854C4729ED9F91F2F9D2BF2CA064C3BFA0896952C901414F7BD7CC73FB410DF43F015B25612DF4B9AD6872A3FB685144A033960D416E0D685836952530400064244FAE46905CBDE53D1858396F4B7B31877ABBF1850201D483E46B2943172DC2355390C3AF28A0A903224C8D634F4A581000A026BCC0E3EED0D56EFBB964D9B7AFF0051E05A39854FA476EFE797A56E2790C1879F330D57FC8FBC8452563903EBF7F7D4F30A029D4FA7E3FBAC494921494A7302BD3DF0786EB39475FD08A67301770D5D780FEBCE1E478D34B796A6D00929FCC6321D3BE7A691396B48250A5D69535FBFB2D094D9A9942B736E9091212EA9B70F841295A94E2F242781254428F2240CBAD653B3A64D5E75209ECE40FBD435E9947CDDA6896EE199DDC76ABF38C0EC398C6DBEF430C6B016DD461D83DC2C5EBCE85062E02C40F00A642A083C53CF95593058612E504AB87F63234198B1BC57F1FB553312A4A6EC5B8532AD33BDB578DFCC330765BBA60A4250D969B0B6FF00B8A92D804C72958273C8EB5226407253FEE6F629EEA1A2878D54C9B2D4564935B59AADD80BD2FC22EB7D3C2E148C8240CBD3CFE3D6B7F94B0C1A9CC96D32310B2B045453343DF4D0DF23EF330CDC4A95319CC46B94452E994A4B39A6A1C1CF3FEA9133280400E0E6F4AE62D7E3D6251949F051A640CE7D634EFF00AD3A4495302492F9BD8E61EFDB5BC47CF46F4D2CE0EA3F35D1A22EE96912241CE08E7E9A1E5DBB8AC4C589798A3DAB6D2DF885A4A0A540105DDED4D0FEBF316FE26F22D98F19638D2B07DD466A11AFD75EFCB2150D8C9A54F50F561E879BD4F0CA25A44B24A83170DC882F6D695CAD163DE5EB0B4832532600244F2898F2922797C6A78B49528872378DEA1AA0E6FD386994BCA410AA82D421813A9FDE87AC692FB5D6309B6B5D8EC259722F716BF49B6208E1E162ED953BC4467F9721DFD6A5A5ECF9A8C1266BFD206F1BEB47A53339DAE22E1B2E7265A260291F500C4F3B3836AF1ED7D9CB6291B3D67C4485B56160544FE551F05A2634E608131CA44D57A74C0B5996DF55452F9BDEBD472AC667ACB9600825C11C6AD9674666A56977C87DBBA6987FC2B6E063842CAC0F155C442473839CFA18D4D4263F19FE1B38600936626BAB0F5883C4052D4A3BC72A3D052B5BE7179A509C3D1F8F425A9F08AF879A5294492A19408CFCA62622A5BC3A9C5EDA9D2E561D4A495AC0A920D1474A1E5F7262255226294523799E86AD7CB857EDC63E5EFDA3C6C46F5FF8945ED85EE2B6D8B2EC6E6DD6EE1D66FB6FF82A670F4AC05347F292519E998E5AD7AE767F85B6DECDF074C33004C9C4CB054B5056F9DC538DD2455B3AD8D23A6F86B66A9787960A8EF245413624D7F5C4E423B41BB6DB1699B3C2F67B09B54DAE1F66C8650852381D012809C827DDD4035E5CF14E07153F18BC3209DE2A50705EDD6BD1F37D22E6BD82B9725539442830B9A8F20039EF6AD4C677B5C4829696C32EDCDF5AC96148405FFC827FAA75809C81D469558C2F84B6A22709A12B2C527783B1AEB99B695B88A76D532F09BC4A9225A87D6972E96A3A45B8FA69101B49BD4D8FD8FB7B9736871EC159C5EE9050BC29DB96D372A1051C0D30A3C45C283A7581CB2EEBE0AF0F6DB9D3244B419C3EA43BEF80CE3B5BD961144C5E3B0B30A93BC9176B3D439E6DD48A868CE9EC4EB6F1BC4F69F15C2ADF11B7C06F956EBC351788E148238FC75003DCE1528CA4A41F7609D32FAB9F077C37B5A4786B0C95CC50225A6E540D783717E46D48F3C78BF1D286D198037F22CCCF6A9D0F2E1DFA34DBF72B7D564D16C2D9FF00954660A48900467200CC4448E46BBB60F6763E4801531AC6E69C81D5F818A42A74A24CC6249C95566D07EF3E7170DB0FE8A40293DF3826615D32E9F3AB14842D29014A7A5483FD9075FDC339877944DC7BA7BF48A94839E52272E7F2D69D5086207322BEFA43428AEF1079353957EE6F09A9B5932263A67972D07DE758750A034CAA47D8FDB8C26A94A2CA49DD15BD6F971B7B68F381CEA7E7FA8AC12B218100EA493E4C2309973011F50E4CCFE515065CFF00B01DA4FED5A7FAAEFBE1DB43F985BE5CDFF926DA9F4DD68AC36A004904FAFED434D37507A56B956DFBE7A0DC2161AA1C73FC74E3092DB5CE4091CA34F9FDF2E54B0DD23EB1BC75F67DD21CA160065024EA0DBBDFAC3BAD613828820A20828820A208299FFF0013DFFC608A57F94FA7D453A47F11D7D4C10DDF8F060F323E4AAD5740A26D422BA0AB0FEA088CBB48B8B7C4D09125766F3601E7C6C2D1CB3F4F4EF5078D6DC5EBB8AFFF0012CF96BFD46E8A282B20473D3EF1CA8DD0DE59E13BDBDEEEEFDC4A2DF11B7BCC3DCB79012A712FA9CB85708D4FBAAD3FC47CF8F8D5289DAF8A2C1DD437855A86E74B3DF9D5E3AF787676EE0E4AB7C2420170F7E0D9FE6F48D9FB860F8E70F6D6129414124640C00A39F3333023ACE75E2BF10A77710B0E5B7A9A71E8DC6EEF16613F7C024558DF3F3152CD5E54115DEAC2565214141294891D426398D41CA399A819001994766CC039676D21C61C28252E0877B86A0A0FB7BBC03EEE7CBD3C865D796BA79CD36C7C8242980AB3B7953B0D29D21F4B99B94670E3B67EBA18B5F1148515AB2931A73119F7190F5F9D454A4196189001B83F6D6BFD44EE08EF252470BE57B83CC748C7F89B79AA67231979E7D7282477CF9450A5B549059D865D3F35C9E2D582965C51EDA3369E62FD2AF10215C038721CF3D73F514D262C176CDBC9AFDA2C9291F487A0F3E0DD83BC7BE2F74FDFAFD29AAD443005B3FEFDFDA139D2CD58B92DEA3200E86154BC024684E73198D7CC7D4FA51F30015F2B7AC611299357A7DCFE72FDB2A1D498EFE5FBD67E624D8BF01EDBCE02821CD0B778A090492343FB50169363D7286A45C5473A18F2B1F3124EAD9D0B79BC325214E49CF32EFE9053C97FFBB3D3FF00C8C3E904248245DEDD7DF48A1424A472CE7E54CE665D7ED0F45B2E968AADB1145ADF3768B489BC0BE124681A4C9CE39FAE47B56924172055FD06776FC5DDA23B184298B91B8ECD6CBBDDF3AF9E2FDEAED03F68DE178261DC49C476A9C5B36A10616916EE252EC419CD249C8491153F8697BC037F2B8E44E7F76F3CAAF8D55C062C1CBD45BB0F75148D98DCF6C261BB2781DB317ECB6AC64341DB979491E2294FFF005132A2388C255913A659F3A9995242432DE80114CEF6BE74ADDB8C5231F8A593FE92D3BA4B1292F66703B7AF33911A65E17EE3A82434954889394738E63C84F5D2B64A4A560D48EE0303964F0899E160214A0C457B5DD87BA50DA57C5F18970EA7231D801FA67DE69625CBFA70A46A1625A025352E74A76FC7482B216406A7BEB07CF660C4BBD5BD6B0A17B81A827A83DBA4651A7C7CE905E328500B3676E2D99BF3CA3225A96A7E447137AFAF017881BBB9009EA0664F7FA93DB4A6D327EF87D6E33A65C07AE50FE46195BD7714ED5F77F4316A5D5DF8CEDC34B3EE3404011C24913D73FD35CB3A63392A99517ADCD00C8367E5CE26E4481402E68E34177A587B61164A8B2EADE79F70356ECC9E251E1481AE73CA44E83A8EB4C7FC3330871987CB3A1E397DF211232A45992546C031A353DD7D639EBBD67D7BD2F686D8ED99C39E4DC613B26F5D3976E36AE26D25E652EA388891F99394F7E75318A5093B30CB269BA7D9CA83A71BB58F0D861F29D41880D6A662E4E678F2D63720E265F09C1DA02586DA68919710690903DEE7F96464749AA061C0998A2D72A24127BD85F2ABD68F0BAB084A416372D471C0B1B0D7FB89862CDD5A5B6C2C84AC852C4C0FE99E2D07FF0058F5D4532DB98054D4D03DADCE9906EE486B58C309D8437200A97A53B37AF36A4618F6AFDFD617B8CDCC6D1EDA5E5E21ABA187BD6F66CADC016A71C42ED814A4C12429409E1E7DEBA97C27D80A5E330EADD72E0B0150C7D915A986C30DF5292A0404B17670496B393668F92CF61ADACC5778DEDABB61B778FDCE1AE5C5DDE5C3DF8ABA5137696DCB77FC3971449108238794089022BDA7E295FF0087E0ED9F8647CEDE5CB9817BDFC28437CBCCD039E56BC593646397855A92E404B3659676E22DE71DC63BEDD9BDDA63785DA5B3D8A6D1ED0E2AF3E8B4C3B0F28BB0B712AE14B686810A3F98447EE2BCD5B3FC21336C6D641F96565732859DDF8FDAA6BCE2D98AF10FCBC210A5D02490E4B0605DEB90AD5C0B3E51BB7B0DB01ED2DBEAC3ACDCB2B3B0DDC6177A125C7F1B6EEB0AC7576EB208532A48292B2D994F2823BD7A63C3FF0003A66270B295330CC5490A7523AE61F87615A479EFC5FE33960CE32A689894A98896A06A49F537E2D6A08DE0DD77B0D6EE36510DE23B6C85EDCED428216F5D6D986B11B7F189926C94E242F873FEEE5C23CBBBF817E0A4AC362251561D0374B90A486A31D3A6768E398AF16CD52D43E6292836282CB15A3B71D33D408DE9D8ED91D9ED8FC391618261587616BE1E1FC3D830965A427904A52343EB9D7AD761EC846C6C1A30B2C04A4240205A8CCD4B0FC52299B5315FE5E21530A8A80620A8FD5C4E557A1034AE917531861656E3A552E3BA9CC9D343CF29FF007532E3511191276AC96194B64C90499F333400C19DF89821C5660828820A20828820A20828820A20828820A20828820A208299FF00F13DFF00C608A57F94FA7D453A47F11D7D4C10D5F696E363848100CCF998F9C7F8AC2E893EFDEB0432B5656D25E0EA924B808CB311075E472311E95078C1F4A8FF00E25FB1B7711BA54032732A04770FE91C96DFFE0EFEE7FDA7B01DE7BEA4DB6CEED638F358938825202D8B616F6FE31C91FF0022870CC939011957883E2FEC75CFDA1889A949DD724122E19CB71CEEFD63A3F87E624E1D290A04A5810E433D2CF99D286E7439AF13DAE690966F6D1C172E3C8438A6D83C6E04BC9050A201C804AA5463313A45786FC5D81323133090D53C29506F9B7957845FB0528CD6A64F517BBB6B4391EB4312D698BB6BB76CBCE78AE11C4A5A0F124CE704F54E87A10455264A82166A58DDED4A6BA1A166BEA5AC12F04B290A20D03B35BA70E459F9452E3E8733492274931965E5E5DF9E959C4CD4A839209019870E1C58E56E158D178662000CC6BAE64FE053B3C46DE2D01044891A9FA77AAFCC50249A804D2F6E96D5B9DE25F674B526EE4351EA471D453D78463EC56E5B0B5403AAB2006599E874CF974CF4A66B5BB8D7434CBCE8C7D88BAE0124848CDBB706777E9D9E2D371E0A515007BCE5A08EFD3F51AD3598B2976C98E8F6BFE338B0A65D057CBDF4BC781C49CC4C7A7EF4D973BEA05A87F593FDFD6135A0BB38A7DF8F6CA2A0F84E59769D7EA2B099848CB3BDEE6F58DD082C069ABD5EB483F129E7A7689FA9AC85105F5B8C8C6AB946FAF6F4A43943E8E111244EBD0796BCF4D7E228DF21C814BB54F6E6619CC940925883981D1B23C7FA8582B8A72D22B50A20867AF0A7584552D2A0D6EE59B3F7D697A4BA90A2933232F3A7D256A32C9B31BB90CC7DF484012956E0C9EAF5D7AF68590952F4103A9D3E5349AFF91E9E82174CC648FA8F427DE70DAE2DD01E6545A5AAE42FFA0E04CA120C05C9D47126440D29E61653A8646C0581777A59C5002C6ADC218E296774800126FC1DDA9F739906315ED8DBB877BDBBDBF7F0DBCB8C2F0372EC2D2D34572BB96D2949483EE901C92A3D3A9AB6E0F0C9012C32CF3C83EB91E19D22A58D9AC561C824170FA8B59AD4195728DEC43F6649716871370A6580A00001292DA7802A73900E731CC015349C2950752686D72D6E05BFB0E050D0312A4A17BA8AA5C977A5DCD8000BBF1AD9A1D7E2AD30EB72B79F6DD53D9210D2829633FEE1946B947CB2A49586A12D5D1980CAED4F2E1942682564862199C91F4D43D0C37174CB5EE292B4EAA055119FBD999E9E5E54CD69081BBBB9D0D39E5E94CF8C3C4CA5101ADA9D3B01F98A17895B2464B4ACFF00D5264FD3FDD24A2C0D5A85A1CA70EADDFE2E722D7AD5E8FEEB11CE62D6EB511C7C2AFF00A28C1196597CF49E7CAA1A7A8FCC56E96395487FCD3311272708B094967A685EE323CAC6910189620A6415FE1DF753AF1368919F33DB4131972CF5D10951D4826A732D5B86E54C9F4893912536DE4EF13FC49FAB27719EBA3748B22E71A4B2E29E55B5CBA2EA652DA24B013A97C4FBA2093DC024C53996904A5F3C856D77F22F1332F0C58170929AFD428AE01AE72FEE347BDA7BDA2B05D99B17B617642E5DC576BB14429969AC2D697BF04EAB206EC3678D0005C9C8C70ABA5384A10087506704B102859DBA44BE1F0EA5201DD6A5998E41F969AE9AE2BF65CD92DAED986714C6B6E6E2DAFB6AF1A71A798BA654B7434D15A95C2E2DCF7D2B0CAC2607F703CB2A8EF10CE929C3CC4E1BE67CB0004EFDC16FA9DAD5B3338E158B361B0FFE8A42B74BFF002045D886CB2E7EB1BCED5A06169BD1FF0022932B3A12633F9F3CB21D32AA16CD56F62DDDDCB8CCF16CF874348D9694B948CA8D91D1AEDA8F289CB472E9C4ADD688525F292C273E24041FEA8580722A12131AC8D79DBA7E193325870093BAC746350EF5A3B74AC46E211BAA2EC0203A9EC7787D246AC4579B8B3C7CF67F197DA3DE4E2988609B2F82E078FB9B16DB776E62AF5BDBBC6D4786DA5D4A9653FD3E10E26655D2626BD15F06F64E156B54D24A674BDCF928240DE2AFE54B939BB539C35972945082B295124B949A370EF6C8F111C3BF62BDFBEC56E9F7DB8BE33B4ECBB74C5E38DB4E2D80DAD2C061A5B4E0794B50093A83DC1ED3E93F15EC3C462F64E0E59412890956E8DD3FEF634147AFAEA61E61B08F34AD2D5ABE82C1E9DB4D1E3B84E6F77723B578BEEEF7B1B15895A3AE6CE623E2E2B62875855C137172CA130DB64E498515711194D33F875E0E48DAF2BE74820A56090A48D5C30B39E19B35210DB52CFF0089312E2A8527E922C4350D0BD69561CE3EBAF70DB7DB3BBD5DD7ECB6D8E149B276DEF70E61B6CAF855C0AB765B655C1C2602814E647388E95EFED93B1B052364CA5AA523784B00D038602D6637BDDB998F21F8A70937098DC44942E7195BE548517624B921474766190193C671B1B1612F2D2F22E2E9700B6ABA85B2D889FE9481034F38E74EF038CC1E1E794206E92CCCC18E6DCF955ED1CFF7267CC2A25543406DD0519B5FB44FB16A8528DC84F0B8AC80E402728E67B0CFE5562F9A99B5497196B5BF9E94EF1BA8104BDFDF285822E94A2A2A401C86632CE86CF4FBC6B0ED1C7C23C4E1E2E7C3A7CE8822AA20828820A20828820A20828820A20828820A20828820A2082738CF499E5FEE993FFA963DB837EF95608A57F94FA7D453B47F11D7D4C1142085028E9FBCFD7F5A260FA6B627DF2BDFA406BFA888C52E45937E202233EC3213CBEF5F481C6D88176367AB81FB1F6AC640048700D45F9C73BBDB4ED2D76F361312B25A02AE70961DBBB479A00BCD3AC82FB6904E69E371091035903BD79EFE20EC438944E9A52080959A8B9A8BEBD2DE7D23C37210501690EA5338B545DB3B3BF5E11CF0F65CDF33BBC0D8E7303BFC4D08DE661576F5A5DE0B70E91722D98BB5B2C28B0545DCED11C7310419D32AF9FF00F10F667CA9F3CEED5D54B70007DB3716B4762D8D854B254BFA521AAAB559AFA9B10E46A1A37AEDF13FC234DDBA894A9284F10320F1912A93D02A63E51A57009D30C85900589BDC70E8ECC43C5EE56CA0A961696622FA3B56F63DAA4C3F6F1B03FBB9EB3FB18E93A475A88C663C00CFFCAF534EE78548C9D9E911989D9E12545B30F6737E163C352D0CEEB1A4F1292173DE40F3E47BC6BF4A8F4CEF9A1C1770F7C8FBCFCE34C3CADD56EF2D72B657D0708B6EEEE7C624E5FAEB98F4F4E9A655A2945D81A70378B460259041160CF6FB50535AB3E7588570FBC40D01E53D8E7D629ACD986EE082FAB9E7C88EC45A2793603DE7F77FEE2A49040D3CBA5335ACB105DDE872CBED90A40A43D6C72391841C71295904E7974E9E63CAB644D094D5C9A75A9D7BFA438972FE9059DF5E19D6AC7AC51E2A3AFD3F7A0CD0C18ADF3ADBFB8C2E580E2E74BF937BE50FD820B608D0FAF4FBED419D57AF26A767AFAC32584B97EE687BF38916F9FA7EB58F9B5BAB3AE96D3DD28346AB4328B1E795C70F385916FE2282A241E71D32D63B659E5CEA4E4A8FCB0F6604F1D399D34615AD2227ACA66001F7AA4E8FE5EED12ECDB42047088D35FD8C759EFDAB604296F91D796919F9A1850726A8F3E5CFA43830DADA538DFB88564B23212759D6331FA8EB378196EA4B338F322F9E9C75CCC30C42C1DE2145D8167E1D6E1FAEB688DDE46CCE358A6CE9C5B654B4AC52D9A2B67F371F191970F067A8E46AF78291BC90401950799CB872BC5431B38296524907EAAD82AF50D7CDFF004D1687B3EEF2AEB11BCBBD97DE45EAF0FDA4B05F8776EDD385AB65A5454A60254EFBE47860033A9F4A9A4E1C10067AB301C1F83EADC338A96310A415AE5A4AC82084A43EF7D81E2236BAFC60CA6DB6ED1DB7BF4C8297ED141D20CCCF109D3B1FA5359F204B191E4C417B64DA9EA2F785306954E482A96B96CEE169637A900FA7586D70E36C8287997D694A07BEA124822609CE6328F86794C362250756F05240B1B71A5B2BE8EEFA4C61E46F91F2D52DC64554E1974CF4A345A78862D60C13E030F29CCFFB5249F841CFBC729E42A2672909A872D42FABB06E1C866F13987D9D38B29625EE8018241721858E8796BD2CF771F75DB85F8B6E80CC8CDB49FC5360092A76623ACF20338A40E18AD214452E08AE6F7AE7601F311292F03BAEADE50B50FF001391CDC83634F26318E76BF7B3B2DB2695AEE76C30D5BADE6AC1CDF2157EA3FF00F8D2C1CCAB4CBB839D6ABC3942410A1C52FEC53F1CE1DE170D28CC2932085021E62922B4A6E9CDBC9818D42DB3DFFED66F2EFAF365761AC6EF66F0F30DDCE2D7AD2ED6F2E90B0655873CD9217971054820020999CDB297B82A1AC090EEC5BFBD72A0113F87C1209AB2C38A1A80C459F8DF5F4B4367B7236585DDA717BC69FC6B14795E2DC6217094DC62EDB84F1152DC202928049009FEC1234A6EAC60466E32B3DABA9A1E1CC5DA611874A52280301A07D1A9973EB9C6CDECCE002D50C3885A5E48193A832328F74AB4949C95AC28543ED99BBF835281350DF8772C7B985C2D2964B860EE721A71EED1950A816020EA040FA4F2F38EDDEA9FB266286281BB28DCD454737ADDF8EB0D96B01C8AB8C83935E2DC2BF731459BB76A6DCB603F0ECB6A4C5C0949826550AE51A65196B15799939909FA98060EE003D79387EBC6184E5209DF512A77649AB90294A694BF3CE354BDB797816CFEE17783B4589E1D85E35F87C21C16CF620D26E0A16B6968570A9511EF473E5E95E8CF83B881FE66180A82A4872F67F66BF686A89DBC80427E58ABA2C29C2F6A9CCBC7E7F8AC6AD1EC4F69B1A699B7C314FE2B7B9211E0B251F8C7920339E7EECC8313957BE676C74E236326629D6528428331624034CEF4B5380A43A91B4A54A3BA4849CEC32E0C18937FB18CA1B078EED65FB89D9DD85B8C7D6BB94A9C5358629654E2DB05D48692DC924A802246B9F4A6FE1190946D64A9406F6FA5FA503FA35F94436DDDAF2BFC7584B541B1A73AE7ADAE35A7DC9FF00ADBEDEEE33B8CB0D89DE760BB45636D80A9E4E1F79B40C3EDBEF876E5C59E35BB214042424A63223AD7A802D6BD98128A3A0333F2E9E4794798BC61B411326CD015F5025CBB8EBC03F4BF3FA3AE1B90095A9B4A523DCE1273026049D328F2E5CE6A387C1E326E306EEF1651AF992E0706E79E714594A41BA779F2D3AFEAD5E5258738B72D92A7014AA4E4441D48CFE15D0F052E64B94913410B6ABBEBC7AC37C5A5299CA092E29D283F70FA9EC35828820A20828820A20828820A20828820A20828820A20828820A2084CAC82440807BFDFCBE349264952DF4B9CAD953D9E461354D4A5A84FAF4E5D22A90A919FDFC694002433DB33190B72CCD0D5B205C3A24C2635EE272F3A4674E64B641CBF5EDCB90B429761FD9FCC5ABB605430B79F4E41B4924692049CBEFAF3D61F1002D254E33E341CB4F5BDE8A22592450BB8B57BD3EF1CEDDEE5EBB77846D23B6D2E855A3C5E6DDCC02D34B29E103FB721C4491974CEB8F78C76A61F766E14A7EA00A5D403BEBEEC63AF7857045587429EA5AEEFA51C69C8691F3C9B1382EF176237B1B5DED03B349B9B809C4102E70BB1F11568A61A7576CE16D94C7BC1BE252A4FE6D6BC61E3FF000C2B68AA72E4AF7492A2082CF5E0E0F91CB9F6ED838340094CC01480CE15504BD3414636CF8C759F76BBFDD97DE66048C5EDEF9BB5C4DB4368BCC22E1C422F9A7A78172C0515005614AE7EE8122457963C43E119D83F9AA54D1F4924806B716B67714E0D48BFCA969420237286C52030622EF67A65967966BB0BF37C62D945D4A512A5A33427DD98528686328EBDB3AE2BB64CEC32D49DD2589A81C59B2A8BB67E51198E9297A86166199B1CF26F748A54F38B5A97242742093323DDD3BC1D33D33A4B03895995549078821C1BBBFA8E1C618CAD9E662B7D2C00A97762723CDAF5F48A937FC1F99975644E89D667CA7BFD73152482A591603B5C53DFAD22670F8732CEE82EFF006DEB30E3A08F42FC585A5B5A02B92844465E9DBAF2CA96183F98C4A921C9600B538E7F8E01E24501207D44150CB5E747CF4A1A9BC29C4842415109EC624EBE53DA951B18ACB99A91A024E94D05C545E8748092737F4E828DDA239E5A54EAA0C8E4797E9CF2E79D466270870E482A496D0BF7E2C7979C6C9C4EE108524B3163AB0E7AE659EB68F024AB3047DFDFDE751AB9A11A77A77F5FBC6DF337FEA0925F874E3A44B5A7FC694F3060FC7E3F4AD133F7D411BADAE473B1ECDCE8D9339EAFE4A6140ECDCAFA9F7AC4FDBD9B8E890A4671A98F3D7E35272B0A66241DE009C9C3679F6D6F58899D8E4A09705C8B916C867CB56CDE24D9B752141A50E229FEE198D0739F8FC0F3A723FD3FA0924E82C5B4B3FBCDE22E6CF4CC5EFB64398A7DFDBC4DB164E2C26074EDF1D79E87A9F83B9127E62812EC0E4FE6D97A437998842695D5EC73B71A44EB5847E2994B6F04F87A029FCD139E664663EE6ADBB3F0CC52EED537771C05F3047A8887C462D0EADD249346366E0D973CF4CA5B0FC25FB058432F2CDBA89E26D6A24C7602AE5833F2C00C28D931A67C7AF18839F342CA8AB76954DA8E00F32D66A8886DABDCF6C9ED9B4FBEE34BC2311B8482EE278725B62F5C291014E3B1C4AE180019D32E74F95B424CB05252E450167EE4DF4E0CE620A64DDC5804037DE0CD7B1B79E8D7731AFD8BEEEB7A7BB8E0FF00F02DA36F1465B595706D25D3CF4A78A4001B006432F9654CA66325CC2490CF9022957CF8FBCE1F499B2D49092CE4977E3A96D1F3D2CF0C93BC3F6810FA8E3183E0570C242415E1EC5CAD0B84804A4930731E951B3D6A9B41D2ED4356E9A6B5D626B048C3211BA120977DE663772C7ADAB4D22C4DB4DE3EF70B0B182ECF30D5C807DE7ED5E08E239CFBB2489988CA39D464CC395134B9C9DB5D072A7E62CB2264B003173CF875A575A4609BDC3FDA2B6F1A8C5F17B4D9AB57894A9CC11EBAB4C40A78A21C2A904C6424E4093AEB90B4C90CAE9DAB9B1A534787416822961951EFA7BD625365BD9C7F0D709BCDA0BBB8DA0BB510A55E62AB17373275295AC4CE7F28E8698E227CBB0FB70360DA5AAFA98732E720067D19D9FB0F76D699FB08DDE6138516D2CD9B4A2D8050EB8DA7C46CE521063204E59C6550F8898E5F4D73ED5341EEB12B271728252D7CC585697B3FBD62F746CC593A80A4ADDB77844AD82105E11925C3FDC00CBA807A45442D678BE4F6F51FBA1D0C3B5E3DE8908296FA8915D2963A69DE1FB762CDB302DD2CB4C944C2191C2DC927DE8EA7F32BA9EF4DF14AFF00230EB9207D6CCD9307C81EBC223D58E44B5EE83BC2EE6A4B9B7E05B5E292587418253C33966491FEF2E5FBD5691255B3E6FCE58700BBD09E5DF40FCE1413153599DCF1605F9B59BFAB4561DB8B45A96521FB55A7FA8D89516C9109244C244E797298CE9F61F6B1DA1351874214E54002DC6E3D96CE80422B94A2E09AE47DD072D0D59E386DFC4F76F36B37A5896CEFB2DEEDF137862FB4EEBF6F8E3985BCE78762CF1377091745A254D9532A504050FCDDB2AF6E7C06F076D09F3F0B8C4A52A09295044D7293CC58B33F2E05CC5E217B8E0A9DBEDAD1DF2A519E30C7B3C7F02DDCDECCBB61B4BBCFDA6DA8C79C7FC1BC7F0655DDBDD61E5E570BAE2576EEB67DC5384C89CC124E75EF79C572B00304B4A65CE284A775144D0370AF5376D229F8EDA0B913944294D56AD752D4E36CEEE5A3B3BBA7F635F65CD91C53086F03DD2ECA5B5C58F036D5E0C12CD172E848482A79C48F79440CF2CE67AC34F0FEC49F2F1E99EACD4EE4EB9171CB4B1AC53F6CEDB2A92A00AAC4104FE38971A67668ED0EEBF63F65F66F00B5B0D99D9DC1F03B4286FC3FE5D6A8B67084C157104E473F5835E88D9C52AC2225101F75A9996CFD4EB4B51F8A6D913311326CC0A356706C2AE19F8B8CF8465F72D564A0F88B2129FCA1592A00FCD3A904476FACB6130B2652B7CA06F5C1233D1C7B073886C295214525CB6649D2CDEFCA246C82C329E3E1933F97439EB9E7D7A5389C5256775F893C87BFBE9B4F52553094E801ED0F2928460A20828820A20828820A20828820A20828820A20828820A20828821056A7CCFD694979F4FBC3399975FB4548D4F97EA2915FF13D3D442C8FE43AFA1847861D7951AC69AE5D7F4A633BFDD425DB27A37EA16171971D22D9DB04716097794C20E5E87E3E54CA60FA59A8CAB0D787B787B21492A507AFD239D5E9E75CAFA472EB7B6BBE385ED5B587AC2568C3AFFC4CD420AAD9EE09033C8C46933A19AE35E35D94162762022A012EC3425FA51A3B078627844896934219A9EFC99AB1CC8F676DA96362771B8E63BB5364C62BC18BDE5A5F5B38DF8CE94DEE2EFDB347857D0382267B682BC51F11B6EE23662E7A5256129DE176D6B43D7A5C10F1D8B63E24290900B12DC496E1AD3D6CF0E778DB8CC1300C291BC4D86DA156C762375E15CDC5AE27749B1C3AE9774525A43086C4AF3720A4CFBC40D4D795F69788317B4F12A940AD414A20DCDDED56D795ED176978BDD4B29C8206EB64DABB172386958C6569ED8988EE871CC3776BBC9C3F16B5771542B87692C9A28B171B6DB0E871376EAB3494119E9D349A9BD8FF000E311E2097F35525DEBBA524294EF402C7CFEF11B8BC4826F40ED63CCB0D5E835E51B3FB31ED35BA5C4F0AB6759DE560092EF11F0B10C559178933987532633C93CB21DEB5C7FC1FC7E16614CB90A005BE9200A3E94E361A18464ED34246EEF3330A1153F67AD5BA5232059EF9362EFC8559EDAE07700E858C41B50D01E44E4476CFE134EDA3E01DAB8376953A8F6490E43816FEBBC48C8DA2852AA439156F215FDB9D1AB78611B4985E2EB439678CBF76E3874B57D2B615063DC00C9D33E53CCD50B696CDDB382DE644EFA49228A661CAE683AB718939535332C5ECC4D0FE7F65B38BC6E6CDE5301C7AE2E186C8FCEEAB875EA488FAE5F1AA4E2B696DB90B2DF3C373671A0ADF5A01D2AF658429802951B109A90E730DF6B68F0CEDDE436DA52DBFF8842491E2F105CE706543A69A11232AC61F6963A78FF5FE6151615243EAE3CF3F485BFC32A62D4C81E37F2CC919DA245BBAEE4E9CE09F5EB0465D674A9EC2A04D00AE845F79A94CC1737E40E9AB84E10243333D8E5F625FD4F794B5B900A3B4FC01FB8FAE469DCC952A5A77814BD2BA7B6B0A528D688EC561D92A2D4670DFBAF0F4BC5E36174084EBDFD7EFAE91D05444EDA8B904849342C188D3F54AE7567AD3F1D288DE167E67F75356191AD691775921B79285989333A671CBEFA73CEA5B073D7894256A241CCD8F3AF4BF9443952852C479FBD738BB6C996C464339EFDB3FAEBD39558F06A4A4D4D465626B4ABBE9F9CA22B153164DCB0A96E56ADCD7D22E4610D04241E181F18D403E67D0FA656BC1CE09DDBDBB3FE69CB8C424D52C28FF003FAADC3BDAFAFAD651A4B320C8111AE8341A8D3F69E756191884EE9750B52CEF9BB1B574E10C56A5870778B7FB8DEAC6F415B5DBBC392B4B44919B640D73072198ED9FF98A8FC56206FBBD0DD9AB4D7AD75A50445CD2A54C04B5097E595EAF5AFB30C2EACAD710052BE132208CBB46BF0133CFA014DD3880A7751072AF4D791BEBC21CC85949FAADC457DF4AD9D9E229DC26D6DDA36E8F0804CE47501464E5DC9903ECE4CF2186F31ADC9EBE599EF4898C3E24029290ABE55CF4FBF18B2F11D9DB77D4726733DA3BEB1ACFF9CE813C1A953E95D1F537D183DD844D49C45C8DECB831D73D2B9768861B3987B29085B6D29C4CCC0067B826397A10353A963397BEAF7DBA655A5A1F2318C0024B97AFB6A37EA1B39845B2092DB423B247307EF99CB28A6335EA2A79E97CAD5CB4AB34394625D4050BEB56E373DA1839837192EA5B0907310348EA0FEC7E951F312E906A497A135D0E55E5487D2F12919E54073E601CBDBC47396FE04C1397FDA728F5CC69CBD3234CD5289C800E5AEF77CC77870310F7722C5BCF33DA235D471B8489F41F03FBF79A48A04A49530E3A9F21D6374C833485901813C9C9662C1EBEEA4C51E17FF6EF97DC5203069DA0B1299CA8814142E6D636CF31CDDA464832C0A800543D2ADED87DAF83B7FF00BD5C3774BBBAC7B1CB87026FD4CA6D70EB30522EAFEEAEC9B767F0ADC85381A75C429C23348CF235D93C05F0A4E3B112270C3B82524326CC41AFBF3610DB178C4A105EE1D99FFA1F637223497D93F702E5AE258A6F877ACDAB13DE06DCBFF8CB87AE41791B34C30B51C3D36EA7878B686EED56DA5609FEA1194F3FA23F0C7C2C3C3F8792A52370212059AC2971426FEE951C76D015FA99DFB54D39C74556D2BF0EC052022324A522070A7241CCC6691396B3975AE9B8D299D8B0B4DB53A5AEFAEAF9DF3A76D09E263A81241A35C9C9DAFE77AB9CEECD8E6BFF00E6ECE468E0D27A8CB2E79FCC9CEAD3B2100292482F4AD0E9735D08E3D4C50F6AAC90A25D8851F7D2F4A9B523A5FB12230CB11C837A8CF90CBE1F1F4AE95B3EC19C30CE85EBE9AC51316B652C3D1ADAF21958916BC64958800F248F5FBFBF2B0A1B74019522292A1BCFA1A8E632852D7FE14FAFD6933736E96E9082FF0091E9E821C56235828820A20828820A20828820A20828820A20828820A20828820A208415A9F33F5A525E7D3EF0CE665D7ED152353E5FA8A457FC4F4F510B23F90EBE863D52638CC0CE3CF2EB4CA6921EB666E0ED0B45B1B440DD61D7368810B75042547F28273127E1CE99CC202483983E4CF0E2424858551A94ABD639E5B7FB2EE5AE2D8E5AE22522CDF4F8772A689CD0F20A722A81A28820CF58D6A87E244A67E1E6CA672A0459FA51F3D2F5238F43D858AF96948DE619134CEDFB23CA3827ED7B816F1B703B67865DECC5AAF1ADCE63B89B3738A58D925DB8BA67C1B969D256DA21848F1D4A32AE93135E40F1F7C3CC46D9993B76593BE4D4268D5CF4EB7E21E3ABEC6C76E9402A3955CD6FC38BFEAD6D7B69FB55619B63B05B0581EEE302C7717C6DF5E181EC2F0BB64BE2D976CF5A150BA65A3C48E20954C89C89E55C9367FC12C4271816BC3D029C9DDAE76A5B2E758BCA71DF403BC59867C087F3F2A868DA1D97DC15EEFAB0CD99DE76F4367DA699B2B0B3186E0AF5A94AC45B32CBE9BD61E04428A791191322BD25E0DF87B87D9E895F3248FA4016AF1CB8B7F548DC563F75249512E0D9B8919BF71C5818C9B8B7B296E5F1B2BBB1B178260EFAD08416F09B0B761A4290908E3402990E28895AB9A89922BA54EF046C89E9DE992251240A1482C4B5DE9E561C43D7266D35A6690925B30D46B57DD39C623C6FD88B622ECACE1BB47B4F8324CC270DBB6984A7A00026321EBD339AA5ED7F865B271214061E4D41B203D7855DFDE913184DA0490E4D6FD18F43AF78C4989FB136F1709BB7AE7767BEADB5C3EED9016C338FED03AD614A58121280CA41827256999EE2B926DBF82DB3F129294E1651A963B81F3BD2A38D7C8BDB3058F620EF03931CDC67D2D50DD22DE6F799ED7FECF771C1BC7C393BC6D9DB7242AE7056AFB15716D27995BC420A881993D0F399E5FB4BFE9EF0F396B50C2A2D40101ADA6EBBD0B70B459B0D8A964B8201615058D879DFB50B5636DB735ED6FBBEDEB5BB0C3C95EC863A6517382E301BB1B86169240058E22A495C710CB30418AE29E27F8313365CD98518764A49A25059874ABBBF37E0D60C2CF46EA4156FB13FC8826B9BBBBFE9E3692C71766F57C2CF8859569723FE050D4292B920883D79FA8E11E22D9188D8AA9837149092C0976001ABD9F5AF9801DF2A64B525C0045C01573DBCB2A6B5996F14B761E0CF18700221C410A6D5397BA474D3B9D473AE74BDB334CEF92545AD7FB3DDF952D686388489B294424A5C588EBD2AFA54D327BE30ABD6DEE11C611A415981F1CB9EBCF2CF5A9FD9FB317B4589058FD5514399E2E48B53F351C7E15552524EACEE6F61C2FA3B6822F9B47168E101E41E8127AF31F2CC48F2E73E30A7027E530200C8D2B5D3F37D1A2AF3E490B2C9525EAC47BE1EC345D56778E048F789D34267F5D3B4C65E54F30F34EF3B86A3DA94E957074D2D11B3A4B92E90C5AEEDA65ADB43CDE25D1882A47BC124E441CA23D7591AF79ED53D87C504DCF177FDBF0639758879F214092C487C85B43C3F1E724DDEAD4212B132273F2CC73F3CA338A94958C02E68D9E8C0E9E54600C464C96A3BCC09CB80A6B4E1971B44AAF106CDAA5A85174482A0070FA199F3CF5E8669ACEC63AC8717CECDD48BEBC4F3860708B528A98805D8313D5C0F2FB4465BDCDC34E95A9529998075F4E5F2A47FCCD19C35496EDECB768593875020949A7FE26BCE9FD4387EF90E38A570E662720740074FAFCA8FF2CD5CD7A7A5CF06E7587D26514A47D2435836AEEF4E3C3B34352FB2AD5B9F41F3F8655918C04583E7FA76F46CA1D252B702A3913E4DE7C2211F682EE56BE121063DD034CB9448F43D474A513337C02146B93FB7F487282ACC1E7CB81FB6799BC2CDAAC513E234E11CE123303CC83F5D73E95BFD2D577CD9ADF9FEF846CA3382BE921F8BD2DCEED71F8641E530EF1065B2949D0A840F5EBAF98AD7E48517B067EA74BF11C98B6AF6419C024AC826B6726E496F2ED945A18A5A49E3F11B4E44813CCF58CC72E9D6B070C9AD3CF37D1B23AF0AE920998B7018876EBC98D47166BF216AB64ADE79A8E14B31C4F1C9A3C59A615CCFEB505B424CCAA520B0D38B66D9E9956D13D879A99720155D87D39E76F77EF1686DAEDBE05B01805EED1ED2DC270FC3ECDB538953EB4B46E826470DB9564B512008EA40A9FF0006EC79F8AC7C92A42F777C646B517FDF0E2219E231E84950DF7DD150F6719F6AE9A8CF99780BBB4BED81BF2B0DAF7AD9DB6DD2EC7DC3BFFE3F8462485A138AF8882DDCBB88319B0F165F6FC5B4524E47849AFA4DF09FC3587978590A99280FA126A90F4029E85B2F28AA63F6928957D74AD03FEC6BA1CDEF1D14B6C26D10B7B05C3385AC3184B097DFBD01372F78094942429320A1A52785B06084848CF5AEDFB4D48C048DD943758300037B033F5CA2AD89C5AA6A8BABB1E7D746E05E913CFB8D396AD3AC92B687B80EA4F8709398E597EC2B5D91BD8A4852C0E04DCD79B53F0E2A223D73094A9E8189B9F6FD9FAC5F3BBEC31FC4715B6798294A50B1C5C5209CC1E5AE433D4E626BA36CAC391BA7938E0F677E40DABC6299B594EA5358D40AD181E1EC115B08E92EC8D83ACE1966B52870844473919139FDF99ABDE0E584A4166E038801AEC6D4D2DC2287895A4A94337A12ECCF97AD59B8C5F0A525488FEE20CF4D7CFE952454539D2AE333A74D7D888D0A2093AE4D4F7EF575ADC10D007A9D3CEB20B807580972E7385AB318828820A20828820A20828820A20828820A20828820A20828820A208415A9F33F5A525E7D3EF0CE665D7ED152353E5FA8A457FC4F4F510B23F90EBE862971D482519CFC3F63EB4C66FF00BA9A7DABEF585D201501AD7A0BC473F6A5E049E9CF33F7F4F432CE6074B9205C578C3A42802C680B5B87BBEB1AEBBD3D8543E9BEBF21C7137A905411986BC311247298D67F4AAB63702B9B38923E9341D8DE97E97A50B189AC0E33717BA19810D4E5A3BD4D7F348D16DA5D90C1F16B6BBD9FDA2C16C31CC31055EEDDDBA6E5C4024A8F0858E1064444E446424547AB64E15559A849A33103D68C7EDD0C74DD8D8B2A4A54E7A1E77007DAE6312ECE6E8F74183624F5CE1BBBAC35772957126F2E30B6086D59E6870094F0E83908D795339FB3B65C9FA932D00B6807F4E7C9B48BC4AC613280DE34B826C3977CB5B464271F7025586E1E52A62021BB56B3619198090819240CB4D48911A88F5AA44B27E5002E404B060D60DCB534AD5DC4663316A7FE4C2AC41B5E9CF216111CAC39FB64969F480E0FCC120C0E2322273D0E63581E555BC66D0C50584A0AC26AF520355BBD7CC4478529642AA756CEDF7CEBC6E5A21FB6F7A232CFD3E47D3A7C61B2319895FF0032B2FCEE6F4E27A7189492B54B00B9CEF7716EB51E9AC4270076E96CDD24861A23C328D64E66493D73F29E722B6F98A5B15A49702E0DA9CE822670B8FDCFF71F3670CC2D473EAF156321BBCB33875CD9E1D7387A870A85CA389CE1E73CBAE67D295DC94B4D51C983BBE5D470E71352B6CEE007798F0E81A97CAC5F9C68B6FBBD92361B6FD6BC4F64F13BFD92DAA92EB177B36F3763FD64C293F8F5A015F04800091913A646A8FE23F0DE13684B984CB495149674826D6B711C6F13185DBF91517CB30CD5D0F1B75AB4604C037DFBE5F664BE636237A9855F6D8ECB29618636970365FBE5DB320E4E62376EC368805324468ACA6BC7BF113E144CC67CF5489143BCCC9E6E5EB4AC59F05B5B7C004BBD5C105DEBDDF5E79D3A49B9FDE0EC4EF4B08B6BDC03686C3104B88E316F6F72DB974DA880A5B6E25130B42A52A1C8823B5793F6CFC2BC5E027AA6192432892774E5C481C75AB919C4F8C4054A71A33F6D3F7CB5CC76EFDBB37AA6D97DEF1983932FAB2544689D4E4397999CA9AE0D32B633226B0DDA1DE6D08FC30343965092F0C569214012450E8E28D90A0BBEB58B818DA3BB5DC00FA030B100B69052948190201D02B224EBDE69AE37152F1538AD0CC49B72F6FAD2948ACE236780ADD04AC027EA2C7D916AF570232560D8C21C424A97079927FD03D23CA3A53742B749AB3E7EFDBC4462B6791FC53958D5F4F36BF578B9D2EB6F283895E47BC67E59F6C892234D69EA66669533DEB7F38879B8577494D4065532E596773969126C148CC39E8159E9D20C680FFAA709C492C0A83F7EAEEF9F4B8B4464CC1A41FE1C5EC2FC73E34AE50AAEF434A28E398CCE7073EF041A426E21492594FF00D0A7BF468DD18305208043EA1FEDA367D228FE663A9FFF00D87ED487F94BD4F61F98DBFC2F7BBFA8ABF19C598224EA0AA08F9FC7215B7F9254010A19BBB7979F58CFF86902A97D4D07D87BBC1F8A13AE7A73FACE959FF2A9BA5EA6E0866F2039D5B9C63FC66760903437F207D4748709B849410A201391279687F5FF00753585585CBE2337F64E55D73C86BFE3A82AD4C9AA3ADCBE7C21A3972D0D60CF5F58D481F5E5D2A4A4A42981E6065D69AFAE90AA30EA51277496CDAE03707CDA20EF318650A5B08202D319E5CC48CB3CFF005D69F252281B8659F67F2A5290FA561CA40510CF4622D5CADA58D62D5BCBC6A49B8B94A1339852C800753F0EB9D394480B60A0CDFEE6615B548ABF67A43F461CD4B127219EBA7A03C1EB18C76DF791B21B1F85DE6338AE316D6CCE0CD974599B8421EC51C5025B6DA41203C50B0124488E2EF3574D89E085ED7095097BC090FF004B923B7DBCA19E2B1424A424BBFD5AB27CF2BD29EB1CFF0052F6E3DB476A8DFE32DDE6CC6EB706B8219B05872D177ED255C33E1AA597015B61407454F6AEFDE0EF849364AE54F121AC689FA4336A38393E6CF153C5E3021240512493BCA37CDB78FE7AC6F66CCECDECB6C16CF58601B1986B768D59365B2E25A4216B5180A52CA009E23267299AF54F86F672F644A952CA5B7404D29976E1DDC18AE4DC495AEAA2CF99ABB73FD680677731656D7366B75C3E0BCA12E1C84EA79E672D663F5AB6CFD9EBDA83751BCA243E6F9643C867935A044A2B2491AB7B66B0605EFC8C37B5B668B0DDA30A2B6D2A30A104925524C9EB9919FD26A5766ECB3834A65AD0410F96BA599EC2FE6D0C718D2DD35000A92EFF0070FC5B5A0631B29BA6D9C21E65C08C8A92743D729F203F6ABCECD96C94D2A72CC8143CFDD6B145DAAB7DE2E5FA7A5FCAFC6379F0867F0F87B0D10470A743DE0F3E5570C3A5887B1D2F62FC2F147C5CC725AEECF7D0FA5B2CB9C9D2B3087352DC72F3E5EE911BF32AC547B96F7AE435876CFE41E66B32CDEB4A379C2E92E906FC7AC2B4A46D0510414410510414410510414410510414410510414410510414410929064C6739D6E9504BBBD5BEF0D972D459859F5E1C22A4248249F2A4D41C11EEF0A24177666D61B2D8714E958238491A93947DE7F72D664A529D9FFAB37BFD2C181048B438E0CB5CFE5FBD22AC312962F93D3AE61BCE3255F56F0E8FDA2D3C76DEE31143F60865A29527878DD4CFE607F29194C76CA0674CE7210414EE90A66A8B355DFF00BABE4D0F30E374098A5115B3DF2B75B3DF48D29DE7EE81EC25F7313B2BDBC05C5296FB2870F8644CC25206801391CF3CEAA3B4B0F88FAF71442AC0825DAE486D1DB3B6B7BEEC9DA0896849B80CE3CA9FAE51AF97187B56F76B45BBD7EC37925C4BEAE149207BD09034267A73354DC4E0F686FD56A524E44927370030E2ED7ED17295B5D0B48029C2DBDA1E35E0DC6AF093682CBC1AC398694167FAAFF0FF0057A92950E799D40A4D3266A48DFD5944F503476E35BC626CF135254D52CEF6B86D5FBD7842F7987AC2D50A5A814A4F13C6564902412390CE04E4075A96C3E0B0CB4BAD0144DAC7B07FBE79D214958A44A001EF7B5455F9BE82916EDCD9A9274D394FFACB9E91D795666E1306827FD31FFD23ECF9D3DD1C231C951228C0F56767F23DDD806868E58DB78056DA26E553C5C63DC1D2329D2751F2A8D9D2A42086450568056CC2EFDFC9E1EA26850749619B96ECC6BCFCAB4B3EFF000643CA2A76E6E1067F2B4A1C1E5A1F8CEA08A62B54AC9200B3066B655A7439584384A966DDEAFE54F2D22199C2D9B275D5B4DA145407BEB48F117023DF235E824F59E95193247CD984DD2694B75F36CB430FB0F2E71008530D41208FB65E94D6CFDB0D93C236B70CB8C2717C2AC1FB6B84942C964294A4AA66788473F3C8F794311B0B098992A1364824E7BA33E80B3EA79E462D380C61925017500D49B65573FA191168D19DB3F664DBFDD29736E7D9B719698C5D6A5DCDF6CCE22FB89C2D0106786D2CED42540B89E22A0755281CF2AE29E32F86F83C7CB9BB92424A829B71201CFB777148B8E1F6E484240500695736CC5DBB6515EEC3DB771CB1C5D8D94DFCEC662FB2DB40DAC30EED13160BB2C0F891092EAAEAE55C45110AE2CCF9675E33F1B7C0ADB7899D357835AD287247F3720540A03A6B1292FC418520B8B86000147A1CECCFA3BDF4E87ECB6F036476B9B6DFD9CDA2B1DA16D684B89BBC3EE9174DBB29E2284AD33C4A6F342C7250E935C3319E12DABB0712AC0E2513173525B7D94451FD68DCDB81504F933C6FA0009360CDC0F2AF5CF9647C331B5292A952AD4A084FFF0022513248919E607603CF952A36362C23795296903FE40D7859FA13F686CB4058CB872396777E2F1778C6EF2D582B0A53EDA38214DF110BE331EEE70424913032F95436254BC2A94952542D71A6648E1D6D9444CDC1A4A8FD22AE48D3BB68F9B70222455B4D756C9694B0E2D4E09094495088D472F21D472AD64CD334B82C4317D35AB9B4305ECF0A2E052EF60EE7DDFBC4BDBED236FB4DADD65EF19C305B09F78198CC6713FE69962B1E64CD2820AAA6B46F7A9D78C339929129450A42891983FB1A8A5EF12C9BE44A78DB75949FEE713C20749E629346D12A3541166B55FA1B76E302512D401092736724F6730E1FBE6ED9A0E825E4A808F07DE27CCCFF00A83953C9334AD8258BDA9DEC5DE3099466160821B23CEC18D73FCC26CE32DBA9E2216D000E4E0E1518EC7F61F0A9093835CC75070EE4795EB5E59F3853FC298EC03926A2EC28ED5157340417F2886BBDA74A2E0B6DA1F7018014D00A403CE6397FB3AD49499A70E7E5EE289CC81D3BF377A55E1F4AD90552C15EE8A5CDFABE61F9579C20F63C86C02E3E1B075E3504F0889CE63A7CBD44D6096B9AB4B2147A6668E7FAA1CA30766194EE46EB3029A3D5BCEB9FDE31DED7EF0B67F6612710C4710694CB82438DBA928102082547AC0D27D6AF9B23C3789C79425093BCA6BF16CAFC0FE03422BDC94EF5E7FD30CEBEC6986F43DA1DAC5AF11846C65CBD7F7B70781A4D9AFC585188E2E054E848FBCBA76CCF851B4F18942805004A49B8A38B822A1E1B2B69C9942A0588BB3B38BE64F4BDF45F6437138D6F1D386637BDABEBC6ED2CD65FB0C2AD5C5254F052B8E31261E1EF24C24B607F6933CABD3DE01F86E76761651C4A0129097701E9AB8AD341776CC45076C6DB96310A4805AAC435DAEF903C637170BC1B07C22D6DACF0CB0670CB5B3425B6AD6C5B4B2C3C94A42429E424C29440E23A1E23AC57A2B65E070182C3A50A949DE48000DD1F8C9F26EB157C4635539F7598DFBF3E4FAC5C4EB4979A42AC98436B392894F0A0C18CA3393CCE93DA92C64844D98552C6E8B06B3741DBEC6B08494294A05F788B3126EEC39D756BC0F5BA516E52B0B0A508514446B999CFB919139CE862AC7B0F1387C26EFCF402F4767A5466D6FC67589CC3A928B9761504D6DC789CB8D5CD54D9FB12ABB6DA652B5238F20449CC826791F9F7CAAD8AC08DA2A4CF900250A62C030B72F75393C5736B632589AABD99BA72A37168DE9DD6E0AB432C2D480880932444E5241FDF3ED52985D9AB92A00D599F5176D03DCF1245EF147DA0B4A8296429839005CBD3D7CB2358D9069B21090001023A72FF00433A99972F728A72DA9AFA51F93DF58A5E2120BA83821C56BAF2A7B1A429C0AEC3EFB4D0B46F5B30C7DD623D72F7AD9DEBC5E1CB7926398D7F4F80115B253B800E17D7DFEF38712C86DD1FED1EFC88852B68520A20828820A20828820A20828820A20828820A20828820A20828820A20828820A20828821A3EE34D92A2015467D48F989F81A6B324EF0248008CF5EDA5EB61942885FF00B4AA8198136BF6EBD22D6C5B0BB5C6D05B7DA42873E248394F2907A673FA9062713852A72433D2999B657F76A9895C262BE4021C90C0DECF90CDB80F28D76DE1EE5517CCDC5CE16D842CA491C020C81D00EBD0EB2222A0F13B394E0B2800EF43404D9F2B795227F09B5104805401C876A5EDCDB5AC6B35AECF5EECFDF2ED2F6DD6485405291F3CC8F3923E7509336792A50DD37BB54BE4697E7A44E236900032AFFED2E74ADAB9D9B5176892BFC33C5714B4A40040CA34C88F4F88CF5CE95460FE5A40666A3B1EA3856E087B16A557FF00304C6DD37CC963636AD9F969AC5AB79849930939EB9798CBAC4D369D215BA4B07197AB73EC61DC89C01363625EF4A9A9A38D74B59C413F61C1C49888EB9779EDDB3EF50F89C392E4675E56B7323C985E26E4CF70327B686EFF00AE15E56D5E589E239489CB43CF97AF3FD62A24C9625C647A6B968CCF7E31252A7848157D2A19C5387463E8D10AEE1DC4147864C667E323423EF2D49A66A5EE2C0341A350DA8783FDEB133879E0241DE07870B3533FC86CA21DFC3553A13E59FC2048CFFCE993B4AF7D208343D9F90F7A43D4625259E95701E8E3813A674842D2D9D6DF5B686020019BCB494A5723FEDA98CBAC75E9178DC399885101DC663EC6E3FA6178749C502A636C8022A5AAFEA22C5DB5DD5EC06D9A56CED7ECD5AE22873253CDD9B6EB99F3E258D4E93D7AE7547C76C654D52814BBB801A95A58FBEB50EC62B46073770C39E7C9B5D2358769BD8D5FC18DEED1EE5B6E719D92D176381BF889B2C2D970020A516D6E9C92E2C4AA224CE872AE7F8DF84382DAF89562A74894B98A2FF5A6A5854971D6834ADA2C982C7A53280DE6200706C5ED9F5357E04C60C637ABEDA5B98C69CC3F783B1B866D6EC55BF1A9CC6707B0BEBEBF36EDA54BF13C77086F88849CC889CF28AAEEDDF83982C3E194538745029BE9E1614AD39D2B7A449C9C626630B3B333E75FC3FDE919A775DFC477737B73776DB34E626E6038A61EA71AC52C318798B7B9B67944801D6B8A5292B04A246600033AF2A78F3E1A623040E213865224CC2AF953770842F74B16362D6247F6FE5044C53392736233B5FF0059E85B6C70DDFE6EE31265E36BB6DB3EAB87024DAA1EC41A0662600067211315C50F8731B266EE2028024D81D73A73CFCEB1228C0254086C9ACE03F215EF9D844B61BBD1C2AF8AD4D63D87B970DE65DB7B90A61433238153C80131A6A3A53F95E1433803350EB3A8E3FDD2EE6174F86D33C0594824D4E9E60FBB6717261BBCC43C1DF1F1266EDB6B3E169E0BC87627B453A1E0EA809964D724BB771EEB01F0DA10092814B960FED8449FFEE8E10E5AB6E1BB2C34A2A002969470C18248073CFBE94FA4783E72082892A615FE2FDAD715E26819A103B225A0BEE80012C5AEC73B8D323CA23717DEAECDD8E1EBB84E2C2E16904F84D3E9528F6893AE63B7ACD494BF0D62890912D49721C37767EF9706784FFC244B56FB208A31A6F646BE74AF58C4B79ED47B2B84D8285CA5EF1D5E22521213E285490264F32411D6262BA56C6F86EBC6E1D334C92544554525CB90F56EA78E60444E2F172A42C85123402A939D6AD4CF2B5B2C2D896FF76C31E7DC6B64306C43145BE48652F30B7904AA40808327CBE9575D9BF0B5689809901A87F8E8796A2B1098BDA89DD2029935B1F79BD9DF5156A309DC7EF7F7C0EA5FDE25F39B2981CF1A2DEDDC7ACDC08992149765209232EB273CCD764F0D7C3F32572CFC948008B2780D00C868DEB157C5ED10EE54C0BBD682E00CAF616A9E91B47BBADC2EEFF621808C3B0CFE6F7AC0138BDD32D3EB0B4C92B0FA6089339E672CC577ED87E14F952D2E9600682ACD4B5816FB457311B40289216F53C5891EDB96869995A64786385C0B0320419000C824764881A888F4AB72657F88D2AC2D4A12C3A31A55FF005159C54BF9EB52C3D3B8D6A59EDCA14F00F5F4E7F18229CA092A152473A5453843032FE5922BD7F1D7F1136D5E356B668429292A1324F39396BAEA0F202A4E4E154B1715A37AB5383119D3284FFCA1243B81773A5FCECFFDB1685CC4D7C2DB5C5240809D2644EBA9E43A72815252B66294A02C4B1A5AF5E43A8A645E3076ACBFF9E55AF36CAC3A3F08D8CDDB6EE55768B5BC799E10A2492A4F43DFF4CEBA1EC89224E1820DC5B4BD5C9D39E715CC6E3133662D64B019937BB8A3DCF1E91B8582E0B6D84DA2128400A4A7A69FAE675F96553491BA092CEDD3DDACFC0D62A98BC52A7ACA45100B30CF9F0F662E2617C6DF144493F414992E49D622E7A774A83BD8F7685AB10C141945BDD21540CBCCFDFEB446C8CFA7BF48AE88520A20828820A20828820A20828820A208FFD9, '1', '2021-10-06 01:13:41', '1', '2021-10-06 01:13:41', b'0', 0); +INSERT INTO `infra_file` VALUES ('7e7ed694-2242-46cf-9ac9-0709debcc22f', 'jpg', 0xFFD8FFE000104A46494600010100000100010000FFE202284943435F50524F46494C450001010000021800000000021000006D6E74725247422058595A2000000000000000000000000061637370000000000000000000000000000000000000000000000000000000010000F6D6000100000000D32D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000964657363000000F0000000747258595A00000164000000146758595A00000178000000146258595A0000018C0000001472545243000001A00000002867545243000001A00000002862545243000001A00000002877747074000001C80000001463707274000001DC0000003C6D6C756300000000000000010000000C656E5553000000580000001C0073005200470042000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000058595A200000000000006FA2000038F50000039058595A2000000000000062990000B785000018DA58595A2000000000000024A000000F840000B6CF706172610000000000040000000266660000F2A700000D59000013D000000A5B000000000000000058595A20000000000000F6D6000100000000D32D6D6C756300000000000000010000000C656E5553000000200000001C0047006F006F0067006C006500200049006E0063002E00200032003000310036FFDB00430001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101FFDB00430101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101FFC00011080190019003011100021101031101FFC4001F00010000060301010000000000000000000001020308090A040607050BFFC40045100001020404040403060503030401050101020300040511060712210813314109225161147181233291A1B1F00A1542C1D116E1F1175262243363723443538292A3D3FFC4001E0101000006030100000000000000000000000203040506080107090AFFC4004A1100010204040306040405030304000309010211000304210512314106516107132271819108A1B1F01432C1D1234252E1F1091516243362435372923482A23654636473B2C2D2E2FFDA000C03010002110311003F00DB823E07E37221084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210844495A905D25BFB690844CEFE6FF54210EFE6FF00542112497249D4DCC2108421084210842108421084210842113E5CA72E5EDA37F8E5FDF584409B0BEFF48A832DD291CEC0EBEFCDF5EBBF28640BB163C9FEF589085292544591EA6D6BF4B5FDCFAC56D3E0CA9E9CC27213C81D4F958F9F571A341E5CB3721C380059B673BDD8731CDE2A458E1084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084211508960904681AF7BF95B5F4B1E5084574B4598062DBF27FBFD6112AB569240240DD76363A07DE20FE115B2A91552AEEE525D4740399D2DCBF6688173132C6656D70DCF9F266FB31F22AD52A5C8539D9BA9D45BA4531A429C5CDD4679A9461B084A965C3CE7921494252547D85ADB98EC7E10EC7B8DF896A648A0A3A899296B4F892859195D9EC92E6D6203EBD40B1565707565CA14A172C3C5E659F91DEEEC39FD98E958C8210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108472091A184239CEAE7F21FB4210CEAE7F21FB42110EB08421088E5E5CC3300431B1BFCB78437F97CADFDC7E9134CB0A3E005BA581FBF7F46844FE403CC77F99B6FBED6FDF5ED15D4B4D2759E82C7F5D3CB99312D4B63A86EBCDD9BEDA2522C76B588B8B7FBDE2EABC0E9EA249A893574F2128194CA5A996A624B817377673A989130CF529265964EF672FECDF4FDC0A13BAFEE807DB7EDD3DE28A51A1A75777328E6D5312EA96090AF23981B36DFB444813ED995ABB9B586CFAFD3D1E38DCF4955924F5B76DFEBDC7CBB7CE2399F839A3F8586D424AB474A8B7CCE9BBDB57D22AD92078943477D80E6E186D6FA189984B85603EA521A58F23F76CA49F42D825EB74370DF4E9DE2AE9F06A994B428D24FA94AD8A51282944B9B067B1DB4167E514B595D4D210E148CC0789209043EE087048D8027778F8188F155030AD2E72B38A71261DC3148A7A14E3F57AA54E5E9926B6D00A9612AAC392E5E7DB4A6EE352A9715E64D93B8BF7AF0376478971B4D954D478355C85CDCA04C9925612E6C1C91A97B73E4631556373D738A10A704E50C3AE8ED71D4FAF4C39713FE377C39E4E551FC17936AA8E7D63D712B97629F83A9D35352289A1E5287D6E332CE3AC078A10A7257982E53A5442AE77BBB25F80DA8C3ABD18F7194EA5460DDDA54135933F0E896B70439577799446621292A2ACB605A23AD99895553A134A16A5B87094662C5DCB316F3B6DA8D719189A77C48FC465A54DE65E269BE1B328DF70392385A96890A4D626245C3A4214B956CE255AD72CA50B3CAE595101C36B93B99832FB1CEC9E49A5C369B0EC42A24200354ACC24A272032932A5CDCBDE202B79A82EC08B1262EF81F0AE29882906AD0B0951B86B94B81A8D3676208763CA36E98F9A48BC42108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084220ABD8DAF7F6EBD601F6F942223EE8BDF57E5FEE7FE7AC5DB0E97DECC424B124E8767D2FA683CDFE72E62F20F9F3E71F16AF5594A6A983393723241D9E6245A13B50919353CB783250B65132FB4A7802EE9D0C852D4A0404F48ED2C1781AB3184A7F0D254B2AE492439DBCAD168A8AC6258F5D85AE370C6FD1C87F38FACCB9CFD2194F32CAD0A285254026FB39706CA041B84A4951162010445B389BB38C7B08AF932BF0B51967202F284A9D9CE819B661F48952F19932C142AEA0EC437E96D45D9FD220EA994874CC3C9939669402A6A710B956FA9B9097C36B2D8FEA780E5207996B4A45E333E12E08C4AB952E427876BA6A94C9EF3B898AD6DAB1F3E5789533192A0720241D033160CEFE4FE66DAC5A3673F1C1C2D70FB2B393398F9C182A4E6A4C2AF49A657A9D5BAB3853736453E93313D361574E9D2590ABED6E91B25C33F0ADC67C52BA7551E11554F256B96164D2AB280E09CCA32C8486DC9B5EFCA8D58954CCB0CE33F84000B6BF3D6FA90DAB5A30DB9A5E3998DB332A33185B820E1F31563DA8B5AE5CE39C4F4F7A428A92B5684BD2F2D507241364D8AC1725C822DB7511BCBC1FF00073C17C272696AF8CF15C32494A10A992066AA9CA5243AC034E998841D001372DF5D0C5C11C3788D600A4CA9AA0A4821C9D4FF00F262413BFB88B53ACF0A5C6D718B5194C49C5F67CD4F0FE1C9D77E28E5960B9B5C9372D2AA21486DF320C8A682E216B6D6A6DDF883A41755F723B0AAF8EBB24ECAA9552B85B04A2995F2E5A909ACAD44A9EB4AC064AA5497325C1018AE5121FCDB28C2BB37AA9EA419C9233105920816D9DF30DF768BF0C8EE0BF20F8799368605C074772A9A5297B11D7E5FF9DE2075570A594CFD50CE3AC05AD216A32EB6D414949490018D6CE39F8A3C7F1C136827D49FC1296549968968952F30709509729284000288484A40625AD68ED9C13812550E55CC940A7280330727A9D49767BBBF9978BA179B43EE36E3A5C77960250DA96A406D23601B79B29984240E890E04F416D3B46B571071662FC43316B935535282E4E559763B6A412F6BDC876BC671498452D390532D296DC02038D7A9F5043EA2D196B8F39A359E10842108472C59D8B736B4211C42108E1C0D481EB08E424A8B00E758383A107D6111776BFE931CC221208B1041E4434211C421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210844FA64A1535216404B13736D3CC6CF68422EB488EEEB652DC89799249B652971FCCDA33D9C68363149521652A604EA18027CB47EAFD4C625BC5C723736F34723E9B8F3237165728998792932D6366E9347985A65F12B5499D1565C8CC36DA4F3C99664B6B6C282F962CAB01B7AB3F06F3F82D788AA931B46175B2314A29B874F4D57773275209F2D72D3574B98B267C852FBC43A54E5094B125A30AC5513D63324AE5996B4A859401662525C12411B0EBCA30FF971E355C7267261D96C0D923C35E1EC458FB0B48B185F16E209F76B084532B72290C3D3EEF2AB92D4F4321A532A53B32CA91F109790547416D3E8AE3FD8076514C8A7C671E453FE025C84CC975264CC5A97241514B8949695308BF8C0D4280CACF434D4D555F34264CB54D597040D417DAF717F4D1C398E3629CBDF168E294A3FEAFF001308CAFC3D308D350C3F8585065FE124661453CB96769B2AE551D23ED1A438265C46A410E950044758278E3B01E0D99512704E15A4C5AA24A9A5CD9D3545495CBD1D14F325F81447882939D9F48EC8C2B81714A8085CEA69D2D0C03E420176772A04380C5DEFBC7A4657F850E436199D93ABE6AD471667463169497E4EA789EBCFCDD2A6A6894AD7F1EC535C937DA6CB801B3EB6FCAA56E77B6198F7C54CC41A9918149A6C1E42D16A4A7A7932D29CB982405AD0A9C40D0BCD2ED7711D9185F673256941328A9682E4A9C9DB51A1E5616776D6322984F2FF000565F4A269383F0A50B0E372C005FF002FA7CB043A027484879A4A94AB04DBFF0070A8DEE4C6AD711FC41714E25327A27D5CD9C95AD6C01CB636E439FD3AB763D260326484215283CB64B650C7EF41B8BBEC63B8216B492541B0A2AB8E5EA29D2474F3A945245B74936171B474A62DC5F598B2D73271984A8A9F34C2F76D03F5DB5BF98CA6969A9E404E5969040B823CDC8DC17D0F2F5894BAF29C21441458FA1DEFB1EFEFFAFA88C726AD53D254A5BEAC1459B721CB3916BBF9022D1799425D4112C808BBB1D1B40C771EBD62205FB81F389B49884CA4494A40507E6003EFAFDDEF1CAE86503AA6E4DAD66B336A2FADFDEC632CF1A4B1A6708E589D013E9084710844495149D6DA11B31D7EC5E114352AF72771D08FF1FF003138CC9440694C7CCEDD0F3D75D5E2320100A41F262DEFF7D22AA557B5ED7F98DFF3FF001F8440552BFF006CEFB9F931F38965209B8BEFB7BFDBFD22722D6DC6FD81BFE5FDC7D7B47227207E49794F32EC47BEBED10A501249737B31D9BF7D6211C9A8984310961D0FEF11C220F14D50B5DAE76B6E790FBBC21101052483A88423884210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210881DC1B6C6108A69D8D8DC9D477DEDB03E9DCFBF51192D34AEFA95CD94948B96723A73DBD75E9C10E18EF1C09E93969C42E548626989B4028947920B73AABF2A6E9F300A86A4CC3295A2D704A5D0047737635C62384F1F913D73D484A26A4FF00DC22C08D7C4346BBBBC63D88CA5942B32772E4E87FA4860DA37507D23536E2E328EA5E183C7949E7E61C6A651C387129539695C6549916D69A7E0FAD545628F55176C28309698E4D49B2EDFED5E51B9B587BA7D9DF68749DB5765D3B8724D449FF0075C2E8E6990AEF1E655D2212A9AB92015052E7CB26628285F294218B5ED78056270DC6A48984649B352EE2C9512003C8025BD5DE32C9469A97AA5269F52909895A8CBD49845429D392CB438DBD2334C34EB485290A29296DA216371F68B73BDC0D02ED3785EAFB3DC4AA27CC1353DECC5AC851533936D49362082C6C760E6377B87E6C8ACC2E5652851EED2EC13FD20B160E0B333FEB1F40A9B6946E4B6E7F572FF4D81E87A743D7AC74C1AC388054FCC6EE3522E5DBE5CFA5B78989989A39A52964DD8369736BB30D85C72BEA623D62C539CA9D4DA93A726BDC9DB7B4579493E2045C3FCBD8BF3B42282697BF33FA1FB31104060EEFBE9FB4224C4FA74B2887760E3DC06DED08456465A234DE34BE11594E9CC85076F11DB98108828E917B5F7B4552684CE3605F4F08E6D7207203F71BC20B75252404807D77B7B837B6DFDEDBDA27A7079997BCC8A294DC862E5AE47DF58840626E4F20768E2B6F357F3B8DB9D7642C3205ADB12BE67E37EA378ACA31214BCA680962416D75DDC1F2160C3AC40BAA484B25402858E6208F326DBDADF28E40765C2482D2D02F70EFC730B491DEE0320DC74B5FF48BA4FA7A612DD386AB3358EEFB91E1161BFE9146AAC5851CCB9447FE285076D812A53F9DEDD6D12A17AD4742D2B6EDB1093A811616D7A8A4FAEC05FAFCACC8A34572E64B974A65292097B9075DD868FA8D34F3994F52272D412DA17DF4D0FCF660DCA2AC5AEB30F9B4AB21414403CAE3F7DED63E7BD6C220A340528BEAE1873637BFDBB421126A401396DD3E8DFA4211221084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084211C80E586F1C12C09E512936FF001D6FBF61EBEF7DFD3A45DA9EBD32A5E460469B8366BFB0F6E45C4722EDD79DA264A1B5202B40D41E4CC03DC3CD690DB80FAA4211B7DD36F3024989332AEA25CC13A4A88162081A39BE9766362F147572028124396B7273762795DF4BEC748B3EE3A3860A2F17FC38E60E5454E4E51EAE4C51EAB55C2F54994053F4DC452322A9AA10957016F4AA76A8C312EE137BA0D9206E637EFE0CFB61A9E15E21A5A6ACAA250AA900852D82D07205A0B9365A5D2A61B9F21865652AA4D4A6A00395252EC086209BBF4B68469CA3009E19D9C589A66878DF871CCD7669BCD3C8D9C5D326252A0A29A84FD05B9A9812DF64B09594B6865F20A517E529B2491631E8DFC4B703CBE34C06471060B244CA3AEA54D4489B2D04A338493325E6BF892A752AE2CA1A3DFBDFB39E374A932A8A64C7520996B054091A0B0DADBF327CE32B096103CF2EB53CA7505EB38012D1171CB02DEA075F5F5BC799C696661B513A8677826233272F54921DB727A359F431DED329FF00192913A5BA92482481CDB71D074D0ECD14FF007E91669EE165DF5DEF7DEE0795CDA2ED2E532120A4B8006FB795A114131DAFABDECDB188FBB1FD27E708931325A7293621C75E639C2113632D2B1A5370413E96DBF1BFB88D384256BBA50A239B758D2D4AB3683F57F28A682A735E84EB2D8D4E2527CE11DB968DCB8A363E5041E9BEF715B48898A5096949CCA25831726CEE1EDB35BFBF330F760155B35927519B928FF2EA39BED12BB32CCAB5CE7D4DB6DA81239CE064A103EF178A81E4B82D7436AB972CA008D378EE7E0EECF719C7A6CA44AA49A3BC20056451FCCD7D3AF97D0582B71C452139924B1E6D71A8EBCF5F4D231CBC50F8AC7063C27CD2E8B8F332256AD8D2CBD18270FAA5E72B6A52076652FAD691AB62A2C900EFA760237D7B32F817E23E32A597884C9B364D2CAEECCE3DC152121434592A4B3E52CFA81E71609DC6D2659CA24B920B0CCC6DAD9AF7B4611334FF008A23084AD4E764329F878AC56E5A5E6552AC54EB98A996913001584BC8926B0EA14A4D93A8A7E26E01EA7AC6E6F0E7FA75F0E144935D3A9E44C54A4AC04D389AB52AD69802D3DD12FBB8D7CCD895C6414559242AC4B1D12CFB162F76622C5CE81E3CBF0AFF0014762C72AC246BDC39526ACD36FAD335274AC4AA93A832C972C95042E933A5C7143709084D8EDDE332AEFF004E6E11452A946A6466C80A40A6042944071FF70650347F10205AF6347338C5811DCB925FF36E6FAB3BB746F28CA670E9E3F5C256714FD3E898FA9988724AAD3BCB495E2E986D74665C71C4B60B93EE485312DA14B58B38524588DAC45B5B7B4CF808FF006AA2993387A4A664E965456BA593DE3A4256A2494D982439E57B98ADC2B8D25A66ABBC9590286AB55F5661E762CFA9D088CDCE1BC5748C6147A7622C2F3B255FC395B61A9AA1E20A54E373B47AA4B3E90E34E313CC853575A085048D66FB5FBC799DDAA7633C41C233A6A6652CE5A25A94EB32D490C017B5C90C2DD3CA337A5E219152C026E58BBD86E0DACDA797D3B1A545574E85A5C6D650F21692808B7F521476753EE026DF2DE35C44A5D34D299A322C29563AEA41243588B5BF7117E95384D19980490E920E672CECC006F47BDA220DFD3A91B1B8D891D47EC748B7549067288B8B7D2277F6D6D11891084459490FF6DBFDFD94221842108421084210842108421084210842108421084210842108421084210842108421084211C80352E12F72DA08440DC7417B75EDFDBE71528954EA01E7804BDADA738020BDFEFAEE3D8BC4BACF4D26FE9FB1F388674B9281E09BDE13C886FA7ED1CB00097B8D86FAE9E81FD62A00A209234DBD4C5366161ABF2BC40A5650E0666B16DA21B800916045F7FDFEF6F58AA912E44C0AEF270411602DAFAEBC8F2F680513B36FAFF6F6E6D10B82091BDBF7F389ABA7A64FE5A90BF261F7F41CE228883700FA8BC51A800A20170343F7CB47DE10886108E41620F28E08704738811716FD88E23901801C834453E516EB7D8F6FDFE715D22AA5CB9650B979B563EAE03EBD3CA38580B7CD7E56D2CCFF00AEDB44A90D05A12FA8995E6954DA124256439A532802883D6606D706DD6C40B9CE7B3AC46752F12D2CEA72A90942D2B241B780E620DC3381E57B03A45A311A54CC90B940A42969396EC6D7530BE83DC0D63555F13BCB9A8F05FC7565171858692AA560ECE7AA230C660265D854BC8A669130CCA3CF3EEA565A587E42725D2942D092DB8971C2A5870253EF5FC3A71E5376A1D9AE29C3F52906AB09A7993A95130E72B08927F1465B870D2E5A5459C17EB18FF0E53CEC271697384E2B42960283B017748373A9376219A32734CA9355191A555D975B5C954D69AB4ABCCAB5A6764DB969579F690011A0252E03CCBAD24AFEE009223CFDED2307550714E27396932E5A674E4A506DFCC599B61CF56F68DD4E15C7D153432E52A51CC94B024B87CA003A0D5F9DAD1CC26E49F537FC7F0FD23A926D4BA8802C145B968DABBF4FDCC6582A125D927DEFF40CFB6BF2884532A666770CEDBF289A8585E9089711C2108CB24D3A86D2A2A5001B5A5B593BE97156D293B920AB526DEB7B5EF1AC7493A9414C9080E47874D09D7401DEDFE234991532D049D589BE9A5AFAD8730F770C23A0E3CCCAC1D957862B18CB306B9218630A61E61C9EAD5627A6512CECB32D214E284AA9CB25C7D484A8A504A4FDDDCDE364BB1BEC5EB38E712A6AC9348B5C83350804214A49398170183BB80C5F6E822C18D6372E428212A00643A96D6DCBCEECFF0048D287C517C77B32B36F13E23CA4E186AD3B82B2BDA5AA9950C4CC3CA35AC46C6B799717A99E52132AF3772B297147CC9DF68F78BE1FFE10B02C370EA2AFC630F973EA3BB44C452F761225901242A728A4B31FFD3CB71A2E3AAF16C5D73A6108532492EA7B9F27F2F97531AD6572BB5BAF4F38FD42B5529A54C3AB989B9D9A79C9E9A989859D44E9756149495137FB5B017D8F7F41F06E0AC1B094211365C9414CB44B4CB9684CB9694A410004BDB61BFD41C745490080E6CDAD9F7D9C3EFCFD8C64C7C2FF00C32737FC47F3819C1D8710FC8E5D61F769CF66AE36984AD12B457E78AD729234A7D29E5A9D9E665AA0B652B582532AA246D1912B06A1A2654B4A4380583311ABBF2B0F668B6CCAA5DD24DD8EA5AD6B336FB10469611FA207099E0C7C0AF0A78768F4BA264AE15C6F8A25D86DB9CC5F8C2892D51A9BB34020BB3A667524596EA0A994149D29510567A981A9EA3C0A0188003B68DEBCF47DAED78A29B52A21C96670A00DBABDBA5AD7D7CEF8B197063C3363CA42A8F8B72672EEBD4D6DB29665E670DC9B4C36396A67C8940D63430B712DAF59D2A29558DAD1455FC17836292BBBA992950591A01770437270090DE9CE29C622BA72E9043DDC9361CCB0B7EB189CCD2E0F717702B3F53CD7E0D8D6AB593F3532F4E664F0F9539C76A529274D0E17EB55BC245B69B14F4D325D0FD46525CCA3C34B4941753BAA34DBE24FE18B87F17E1FAEADA6A296A9A69D6A49125254C997E101BFA58061B87F2CAF05E21525694A97A91A1606E0EE4F91B7CB4BB9CB4CC7C379BF822838EF05D55550A35728A5CA712A4A8D2A6A554B979EA6D54A55F673D28FB0FCB4C3640521D42C5B68F9B5ED93B25AEE19E24AC948A65CA9299EB0C94948090ABE83567E77B98EE9C0B1513D092EEEC1405C90D62EFCF53C847A2304F29A0A012BD09D601B8D7A415A8136BA54A2549FFC4FB46B857D02A454AE5A81494923996D6EE05F5F96968CC01CC01777BBE9AFEDA457208EA2D16F992B2E8180B33FDDF7E4768E621122108421084210842108421084210842108421084210842108421084210842108421084211015804DB4DDDBF4845449959C82438D4BFDDF9F26D621EF433B5BCFF00B3C2F6DFD378AF142A9A932D232BB31DB9E9E8C4BB9DA057983331569763F7CE097D2A04A54921240277D89F5E9126660F3901F338BBB0D1B5D7EFAC4B34AB07F3A8137607D76F9444DCDEE3AEFF0043FDBB44CA7C34158135795208DB5F5058F5F5D221EEE60F0855FAFCC92FF43AC4AB0A08240569FEA3DADFBF6B6FEF179381D34F4BC9580503C4C41E7E5AB723689D27F332C872EC34274E5CB71D6FA344A9D66E6C6D6BDCF44F7BF7B0DFFB768A19D82A500E59C333B070E3DDC7E9CC44E3945B3026D6D1F5B0E677F28AC90B02E1371DCDBAEC3F7F58903029F32E9989200D5881D776BFE9AC40540753CBF7E51245AA74A54898B94BFCC82527AB59E2205C03CC3C225C21084210842114B58F886DB5A0A9B1CB5382D70E05B9A1BDEFB09758E728906C937B0EF97F0E4DFC1257581B3A7300C6F74FCC870E1F66D629AA4781F2924050059C0B5DCB86CCE0462C3C65724D19D3C0DE67CB3A944DD5F01CB3D8BF0E16D1AE624DCA234AA8CCBCD28F9D097D0C34D5D3FD4C9DCEC23D36FF004F9E3A9838A1587CE9AC99B3E63A0A892B42800A4905DD2A4B823A9058968C76988154DE27705FCCEBA16BF4B74044590F87B6613B995C2565156A69D5CD56E8B26F618AA4E3CBD69667245D409D0FA89BA54A957A502924DEC81DAD6EC8F8BCE19A7E1DC76AA6524B299752B339194312263A880CDB96E6D62F1B1FC1554D22592C090010DCB53A33F2EB7D418BCB3D4F4EA7A74FA7B7A468F041201259C3DC73F58ED244D3AE80805CEFD086B7BF3E5108777D7E5FDE2B654C09DC17DFA9E8F6D3D37E88E148CA1DF5E8DCFF0068AB4AC2B4E57F97EF0882228CABCE16DBFF00D73B32DC8B0861C616F4C2ACCC9A582B7A66A13248F2A1965C4AF5764B67CC3B751F643D9D5671A6334F462495A7BF77082A073252004B0D2CF73AB9D75D0AAF9A64B9CCE6F62430040D36EBD75F2D0FFC707C52710F10398F5CE1D7292BAE7FD1BC1B55758C413B4F9A534711D592A0C541F438D2B42E496DCB32C2028AACB43BB0EDF46DF08DF0E949C13C35455F5F448556CD22A2953364248944A53926AB33292A494920338B17731D57C4156A9B50A4A56486655C39E637B0E6E5892DD75CC0E294DA92A6FE1895950972BE6ACA36D2B71CB24DF75586937F58F4CB0BA69384D025084244C291994078896F5F5FD230D9CA52CB3800D85AC06970FB7DE9695282E292817256A0800752544016F7DE2D53A8AB2BA699A952B2A1454C1F4776B72DFEB13A54ACC924DB28E409FF001E47773BC7EA6FFC3FDC2C61CE1DBC39B256A32B20C3788B38B0C51334B115614CA5152985D769A99DA7D39F5DB5AC53933B34DA35AFC9CC20246A317112A655242092484949BE9B6B7E5BF5D358B74D925CAB53C8727D75E6436FADA339127284B2D2DC74AD6A4056E9B286C2C93B9B691B5FEB6BC4B4E16A924AC28050D6E46F716B9BD87DB514C96924D806E8DB96BFDDA3E838D5D011AF4EAB017EFB5ED6BF5B7CE26A8D42C77685293DDDC90ECC39DC587CA28A653898921EE3700797A8766FDA3AF54687233327372932CB532998977DB5CB3E84A99984BADA92A65D06E9E5BA096D7706E851041E865D7D18C7B0E9D87D534C4290A490A16636D0BF9D8BB599C08829C2A9E6A402480C4598F4B8361766FA6B1ADFE526246F86BF10FCF8E0ED15112B8533265A5738B2BA9732AD2891AFD525A9F51C534BA7B57D09A73530E56E6101AD23426E509DC8F1AFE377B12A2E1FA2ACC6D146801A62FBC44A17CC933029652FCEC4E9A79F7070C5794776E45D817360469D75B1F6DE32B1A349B9042AE42EE2C39A9252E948EC953816A47FE047BC7815C47290BC4AA9494B253354966FE82DA1BD88F23CDE3B9E8661994E8512E4871B3FB6DB73F9435EAF2FFDBEDD7EBEDFBBC6213D000D1ED63A9163FAE9156033F5DB61E508B54730842108421084210842108421084210842108421084210842108421084210842108422242731676FF00205BADFDA28272C8594B5B5F573D2117DA296094B00A1A03A03BBB31DF9BF5E465779D3E7FDA20A525092A528A529054A501A8A401724276D440DC0B8B9DA332C3B099B5F36548A74A95327282101092A24A8848B80589275D1E38554A6482B53654392E761ABDADA6BB34790668678E5464DD25755CD2C7587308D292D17C3F55A9B01F521214A24C89525C3B0FBBACFE368D91E03F869E28E2B5CB4A696A5417909FE12D4121577D183F561637D445B26F13D32092932C120A5C3055AD6BE9D6DC9C02D18FAC4BE365E1DF85A6DD929CCE2929F536E9639D214A6D52C4A7FA9A26747937201B0B9BED1B172BFD3DF8D2BA9C4CA6C3EA56A290ACA896DB6CEDE7CAF7D18D9AA78BA9E5803BD272BB15A9CBBBB390E481ABD847AB65478A670339C35993A5611CF5C38AAB4D8024E4EAE19A6A02DD2004A9F334E849510906E9EDE9B46118CFC0EF1CF0DCA9AA9D4159E2709CB256A2181D9398BDEFCF48974DC5F2EA4AC256924725358D8824DC686ECCFE76BF192AED32A94F6EB3489DA3D425E7480CCE532A08AA3136950D490C3CD2121BD5D6E76B6C235478FBB18E29E1A9B34CEA6AA09959BF32169208BB9B3B80EE0B737D1AF94D8BF7A52010F66BF26B31D5DF979B3C7D7438B99681374150DEE6DBEFD0EDFEFEB1D1B35389504C5217F884149218BBB827672C0B5CB73EB17D94B331399811D2EFA6C3CFD3AC5609D2026E55A45AE7A9B77FAC5B264C5CD5AA62C92A5172FAFAF5E71562C03F288C411CC21084210842291F2BE8737B04DBF32477BFE47F18BB505412052B3898A6D1EC4DF96D667F944339FB85B6CE4DFA06D8E8770DEB1E3BC43D065B15E48E6F50E698130DD572E317C886880A05D98A34DB4DAAC76D94B041B5C6FDAF1BB5F09956BE17ED270BCAA2913932D44681D6A20821FF005E83A61C89853582C7F3366EAF7DDC020BBEFBD846B2DE11D5C99392398B84C927FD2B99B5861A6093E444E38C35603A0FFF0017A7B778DF8F8C897F8FC428122FDF6134D5414392FBC1AF4CAEFB9B35ADDF1C17519A4CBD1DC020EFE5D5F43CF668CB4479E4A9241286163940276E96376DADE71DC32A6121373A0F22390F4D2DD6110F766E19C0E7A6FA3F9B721A5A2BA5AF301AEE41DF58449A84B240218A4E80D8DD9E2E14CA398A6CECC4F36DC422922B23E178D9F17935C2AF0818965F0AD4E624B32B3464A6B0BE1D98979A32CFB54D9D6BE0AAF5261E4283A8765A5A65443890157652014E916DDEFF004FBECE287159B49595F432E69CC95998B9799921293943A48CC6E120903335DDE3CD9C72B6727334C22E580243EA6FC9831BF9911F9C25467266A939393530753930B5A5D55C90E85BAECC28F4DD0A7E61E5D8F55AD67A9263E82387B0D451514B19085327C4ABAD59400092752C00E6C00168EB4AC9EB5CD27312391F7D01EA5FE778E1A1050A51161AEC16475568BE9076DF4DCD876B9F58C8CA94AB124DB4276F2DE284924B9F362E7EA7CFDF68E632E8967E56634EAE4BCD3A53FF00772DC42C8FADAC2262274C96190ACA34616F3D1BEC472662C2540288041702C0EBA8DE3F5C8F081CD2C3B9ADE1DBC2862DA14CA1128CE51E13A0D4E4C283C69F896528F248AAD397A2FC84C93E80D213B69D4404A7A454CB190029B12351D768B4AA6ADD5E32C4DC3D8B738C9FCB1525B4A1D480E2494AACABEB29362A27ADD46E6C45C5E261512083BFEEF1095920825C6CFA81B0D741CB6D2394E1BA536483E636EBE5D8D8FB1DEC7F5B4429480261DCA093D5AEC59B4D6FCA244D52865092C5C6DE7AF43F6FA470E614BD0BB69B86D5E43B6A2524E920F5076041DBAC51519589732623F302AF1004E5653A481B335BA81D627A91FC30A03C4DAB39E66E072258C6893E22DC4BD3E5BC7F32127B0756D2FA7071C3D80B10BAC39CB765CD7692D48CFD2F9A8513C83FCC9D65E6494A4A4AD2A4D898D69F89CC1A8B17ECDB1E56272454A95433D402C02954C492467CCE6CCE1DEE1ACD19370B4C9A6A129CCE01F26736B3D83FE84738DAC03A5EE9A8730735209B90DB9F68D26F73E54B6A4848EC9000B585BE4DFB56C29143C438AA6911DD4B1513825080C01EF09D9ACCC06DBC6C3E1CA50A79409D833ED67B68DD03EE2C2D11D3A763D7B9F5F7BF58E97A70B54C2959516D5CBB312ECFF4DC6D175413B926DF3FD37B44A2F7B7604837EB6B6DFAFF009EF795501215E1003BBD80BB9F7F3E7E7132268A7842108421084210842108421084210842108421084210842108421084210842108124036F436DBDBF7FDA2A6453CCA929972802A7B9DEE6DA5CF5897952661240717DB90D7F7DA292DCE5A52544DD6A0D25294DCEB7886DB51B90129694A0B593D12937BF7ED0E19E12ACC6572282992A3513141072824E626C2C2E58B7937A52D6AE5CB92A3605AECCFB0FAFB07D630B9C78788DE37C298EE83C25F071456F3138A9C7336DD2AF28E0345C16C3EFF21BAACF3AD3730A945CB235CCCCB818D61B45F736B7B05F08FF0009F22A25D1E37C5583CB9D4D29529495D4484CC99316485044A42C329B3254B24A4049719882074F71062D52852E5CB9EB009219C84D9FF31E476B5CED1E8FC3F780DE12C72993CD7F119C7D8A7890CD4AD25BAC4E526AD589D7B07E149878077F94CACAD41E7D13ACB0B245BE0D841BE92848DE3D8BE0DECC3867014A1386E0D4D440C944A5FE1E54B946621398B4D08480B3E220E627D8475CCDAEAA512553944B96BA8E537FCBEC2F6B6B17F156F042F0CEABE1F3499AE16B2F9B61682D2E72430ED1A995DD3A059C62A6CCA1782ECAF2AB5A4DF73EDDC48C170F93232269A58480080122DB36835636B3FCE286655D428879AA2483B9361AB07EB76D635CFF0013EFE196A4E12C27883383821AAD453354677E2EA1957594AE75C7295A1E79EFE52F075E6FE2590D14A161B68A750B1DE2D8BE1AC2E7A66AD54A0651FCBE1777D1872D47BEED558755AA5F7854B2F6377363FCBBF93927D235DFE12FC4FF008C2E04B158C2B278B6BB3384A97555CB55B2DB16CECEA69B28CCABA1A7E45EA7BC5F625665F4EA4B2032A2C7248DB546B4769DF0E5C1FC7D4F5B2D180C89752B4AC99F269E5AD73164165CC0420BBB9529C936B168BCD3633552E7272D428070C92A622FFCAC6EEFD00667777DE63808F124C92E3BB2F64EA981E6DDC3F99547916062DCB9ABBAC2E66993250034F353C5F52E7DA9CD330B963F0E8E6A1A5393225DC4B4DB9E15FC547C22E39D9F55D5575350934C5739525726593296259F180C12465702E901EE1EF1DBDC3F8D2A621089939401482A25442812465601F5DFC5D37719109399334842D29284A9295241595948236054A082AB0EAA2013D6DBD879BF5342AA3993A4CF9051325A8A541408292090400C7FB1E519FA2A25AE5856619983920024D9C8D407F38FAA84690751D5F3DEC07B9FCCC6315292262B224848D407B12778E33B90C6C5B6D5F96BFA7478A04DDC3626D73B76E9E90414849CC1D4D62FADAFFB83ABE913C0F0126E5DDF95D9A2788220842110006B0A201005AC7FC743FBE9175C2552D3500A920A8174A88D2DFBB1F488165C141FCA41717EA7C88B79C7C5C4F229A961DC432602344CD0EA4C2D0A48295A5C96712A4AD3B85055EC41DADB5A3643B1EC4AAD3C65844E97394858ABA6961492CC9135362D77B9E5AC6258A23BA9AE9606C5C58EA7705F560DB316D63524F0A843D2353E25E981C586E433567D4A6428F2D094CD3C52023A0D3BE9DB627DF7F5B3E26A8915381F0DD62E5833D5C39440CD6B96EF8DCF477B9B5DAF78EDCECF14A5E40A512925995B9E9AF4BF94663BAEFEBF48F34B12795316124BE6587D086FBF48EFE4212508B3002C3E9D1C7368459BBC5FF51E7AFDFB6917196125CB0D06C377844D98B52A5241BDF5E419FF005DF94562404FE5B6DA98453C45994773CB58D74FF89873BA7313711F95D935293EAFE4981B2F25E6A765D0E12A454AB55AAEA6610EB62C017251B9548513AB4E9DB611EE47FA7C70148A3E0D935EB97E2A89F2E524140007712E54E5282B7244D01B4D0F48F30B8867113160100A42947AE674BF2D9B5B1B6ED1AC53056865AE6274152494B5727949D6A4A51A8EEAD93AEE6C6EA23B47A8D3A522494CB400025212C2CCDCF4BDFF00BC6066667274606FE77789D4AD42D6B6F7EBFED126110510A001B8006F63BDB6BFE90810E08E61A36B4FE1E1F18AC39C25D55FE13B3E2BAE48651632A99AA612C513CF38E53F0954A69E48765E70ACFD8A2643E82A08D69499717E80C578D07908B71483A8DEFB7BEF1FA0EE12C7D84F18D1E5712612AD5371361FAB2133F2558A14FB351927E5E6ECEB4FA48712FA50B4282820B29D17D361DB9F46FBD638CBAB004B921C580FECD1DAA6EB52D28CA9D7961080DA9E0E00E14F293F7493A079964A4580B00A3BED1CB7F0E6916210A62CE1F7F97D625CD466CA00D54010031DCB8BFDDBA88C417895F8B1E49702593788ABF5CC4B213F9A73F4FA9C960EC094F9F969AABBF539995986693507D8967DC7A5E5197D4CCCBCB7101686C28F2CD8034D87247E126A9475CEE79DCE836E7EFE95C6514CA7B3117D7C9BD4307E863F39EE1AF31F317895F11ACBBCCBC635176BB8BF3033BA8B8B6649042993395965C769CD383CCE4B53244A9D6DD524297F0C905B48248D70F893C424C8ECD3880949294E1B5054B0CE8374A4B13FCEB64D8D8289170D17EE1796915492080730B36A4060E4793E81F9EB1FA7053D85CB25942D5AD6D4ACAB2AD5BF99A966907724DC8D36B9E9E91F29BDA75548A9C57129BE1635338D88DA6AC3316E5B01D3731B05463F832C0B30FE57BDBCC3E9FB5AD1CE70DD57B761F8EFFAC74225483357959DF6D72937D1F6E9E80697397A9D45B7F3DFE71407DE55B6E9DBE57FC7F3EBE916CAAFFBA5B460DCB53136278A6842108421084210842108421084210842108421084210842108421084210842108993A54AD0490AE52962C2F7D24DEFEC122F7F6B7A45CB099FF87AB44C37495841D6CE017D3CFDE244D59439B245AFCC373B6F6D74E66D1615E23DC5B49F075C2AE3FCD6626A5DBC4F3126E61FC172B30A08F8DACD50269C9750E00A71B5C999BF89416D0A512D0074DEE3D20F841ECC6A38DB8D30C5FE1953A9BF152664C640565928295CD5B16072A12B56AE74E4630BC771212A5AD94C729CA3472CC2CC2CEDE641F38C7F7F0CA70E4ACC9C2F9BBC7B66DCBAF10E6766B63FAFD1B0DD62B0CFC43F254095A748FC5B94F997F5BA96DD7662A124129D0121AD43CC6C3E9C383781306E1EE1FC2E9A4D3CB94A972501084A06601878CF86EB5125CDF4CB7023A6715AEEF262813E2510E59C5CED72036B6BB5D89D36E51470E34D32FAD33086957487D943AD6806E94A585DDB4A80000700BF4BF6B67E8912245929003B8B00A7F30FD3CA31E5E562029C10406705C6A1FD9F48FAA25006424E97AC494F38056956C2E8041081600694D8003A5A2298A0B0A01094B800336BD6DF3B9FAC52CC3A1F3D874DB48F873F467E698790660B4B7016398D80AD32CF022612126C2EA096C2556051BE9EA6244A94405CB2582C8DCDD9C33076D7D7CF5972CAD2E017059BAB3907D3AFD05BF372FE270E0AF0EF0F5C624866EE10A44BD270867A4A556BD59A636D2053958B6526251C9FA8CBB2072922ABFCC82CCA0436D491964F2357315A66CBA9A5C1A5F7EA405E662A0525F7B1046A092CEF1512D531335C9B6847EC6FE567D3578C0C70D3C48663F0A79A18533432D310D5E9556A3CFA5CA9309A84D2E4EB34D0B42BE0AACD15944DB2A4A2CA2F36E95AACB502A488E9CED13B3BC17B5DA2ADA1AAC3E9A689D22684AE64A4AA64B59493990A5A5C3DC162C4B1D4465F87629324196D30A7291BD95B31BB68CDEB60E1BF4A5E0238CDC0DC6A70F58433770CCC49B35B72972F2D8EA84CB9E7A262465A422A32F2A8202DC9144D22650D3CB432484B7F6635587CDB7C4FFC35D7701F18712F7744A95492EAE72E4A8206554952D6A429243A4023290E5D88700C76A6118D77E99633853B0D6C08DB9E85DDB5B45EECB3E5D970FDFECDE515360D82C364F90AD276495274A8004FB6DBC79E35F469A7A99B2169CAA4A8820F47BF3BB68DA18CF698F789045ADA6CE43BDBDAE2FAF58AA079B55F7DFF000E83FB7CE31FA8484CC2069EDA74FBF95EA492C0727F7789E2447108420ADDB206C6E77FA7EFDBD62AA842BF152C8D2CFEE7EFCDB918814EFD0254FD1C16F7FD23E7D4965BA3D4544836937CA947FED2D2811F203A8B7AF5DC1D8AEC61C7166119BFFDF69F7FFF008A1CFB35F95B68C4F15FFBC860C1DC3EACE34E572F668D487C2E2FFEBBE2CD03CECCC667CF00BE9A15F113009481B13BF7E84C7B2DF11CA95FF15E1B040FFF0067A8D86A481DE9773CEC0E9666BC76BF6761CA741767035D1FA79FF88CC3A93A075BD81ED6E9FBF48F2EB1663394DA15ADADD7972E9CA36165FE44F94489248B9F5FF11645000B0E5FBC57CBDFD3F589A2357FDB479FFF00E222B2112A11A86F8FA2A61EF116CD7F8A4287C3D3F0DCAB416A0A0CB7F0DAE5C36029574BAFB8E005174A557D453631F461F01E8454766B87CEA719A4CA9B366A94001734D4EFB87B252EDD23CB4E270B4CC9A4921C33E8D73AB585F5D4FEB852056E152C8D94ABA45C6C90026C37E9704FB5ED1B9F2ABA4D5CC9DDDAF3144C2820BB82ECDA6DE7BC60F48ACC955DCE67F4D3EC40A48DC88AC4CB5AEE90F157108196A4EA3DBEFE908A8A5A9296594A9B5CBAD84A9F66CA423E2125252B52C23587507514A9BD4012AF36E22789C860EF61CA38EE147407E4797DFB7AE453859F156E37B84593628F94B9E98B9BC3AC329699C338994C5768B26DA7492CC90A8AE7D68641012D37CA6D2DA0694A520DA1DF23AFCFF687E1D77B1E9616F9FDFCA2EDF31BF889FC4C330A82F501DCD795C3D24F4B99375541A0D1A4279D4A9050B509F95916266512412B4BB2CEA5E4B81200092A22A64A84C4CE4A43954B20381AB8DCE9AC4999216921405C313B3A6FAED63BEBEF186ECC2CCBC7D9AD89A7319665E2FAE63DC415175C7DFAEE21AD54EAB5F9571D24AE5E4AA35079D7DB92255CB54BA6650DFC39E572CA7CB16B33E5D052CD97395956A0B012937054AB5C7D91CAD1397365AA5F77FCC5218368C2EDA5BDB95E3315FC3FF9033F9C7C79615C58F49BCEE1FCAEA05671954A6CA52A949279B949FA5D34BA4AAC56E4EBF2A86DB692E3A0AD2EA921B05C4E8AFC61717D3E07D95E3A99F552E5FE2A44F904120AD484CB54D4A5201CC06748753072E1F6395F0B51CCFC44B594380336D72E3D1C0E6413D748FD0EA58ABEFA9455A8ABCD7D942FB6DF976B5AC7A6DF2C3C538DFF00B955D6AE4954C0AA9A8208D6F315CEFF00DFA391DE7492D4254BF0B0B72D585BD79FED1C85904EDE96FCCC6094C99A998553028073A91A72B16317048235163F5FBFBD629D8EABF6B9BFE000FCE21A90E429F98F3B9D3C837CCC4713452C2108421084210842108440903A9B4210041E97FC0FEB68316762DCF6844610888049B08E0902E610208EB0041D21108E610842108421084210842108440AD4D942D2D9513CE6B620795C975807A816D6A03CD6DF71B6E2FF004B228A68A144A98F55327212B961C162A606E189361AF40F1435CB08965FF294E63B1CC0B01EC1DF6F38D3C3F8A0F3927D998C94C91929C537212B2A8C5351924A9612F4F4FD46724980F1166CFC3A5B6267515142529BDEE081F473FE9C3C0387D3E094B8A55CA972EA57202BBC29752410A0438048EF12E92E7425CB061D41C4756095B1163A6BA69736D6E4BD86CF1B007F0D366050719786565452688B9555430756F1461BAFCBCA2521F91ADB7569BAB3827084A4EB7E9751905A57A94DADB75094A8A8148F5F2A27833E549A7F14B9210124386012FA300C19F9FD63AAAAA62953924E85403826C1F90BDF9799D4131B0C34FA145B0370B0AD2373AB47DE3D3600DC6FD77B036B45610B37CA03B3B9DC8DEDCCF96D6DA5AB29D1F9F4275DCFE91C852D035592A2ABDEC3E5EE40E9EFF58890145EE9037D4F3D989FDFE929692A660ED7D5B9347CC7275925C0B250A6D362DAD41255AAF7500090426C2E6F617173B8B4D989C892B749510E3A14870C4B6BC816717244474F2AE41B01A1E7A92CE03B5BA1EAD7D18FF8BBB1961D5D5786FC0CEADB7EB32CCE259D532563E2A5D970D092DBCB4121C2CA88202C02D9B1B288B18B752CA975B5193123DD49CDA90F606EE2FD18EFE6F15F2E5CB6770FA12D6035D1B5F73A794693201698E7B6EA14F3CAE5AE59492A536D9FEB2549D1B586C95157A6D1578CAB0FC16405E05304E9A43148046BAB93E77B9D40F3E16E2E0D9DBFBF97F8BDE33AFE045C6D4E70DDC51D172971254D3FF4D7399E56139E71F7969A66199E9971BA849559C973E65393B35229930B9665E712A9DBBA10DEB58D0BF8BAECB29F8AB822BF1AA697295898C3D73E7CB5A56A99316A081DDA08429399398B66284324DC1201CBB87B114226CA4155F380AB8649626E753A36E5D88B1263F429712C89979A61485A109974256DA8299529B68257CA522E85252A05374F955D52542C63E587B4BC1EBF01E2BAEA3A89264A935335013A394AD419AE188040E40477DE1539132421492E08076E5B0D869CB7B36B505C24156D6B0BFE9D3DAD1D775685A56952C315005BF5F5E5B45C0AAE07325FE67E67EF9453E6E9BFE5FAC524090358748473AC414404D8F53AADF808BCE132D3DE77930003F95D892DBB7420EACF66EB094952AC1CE520F47763F51BC7C1C4EFA65F0CD79C2A09535489E741BD800DCBB8A2A247A0DEC0827B46C376254D3311E36C26928D39E68AA9134A458E513439B1E874E42313C70192B0B5B0043004E97BBF262395F58D4B7C2957F113FC4D546C541FCD09E710E69235B6B9B994B6A04F40A536B1BEFE5DC0045FD71F89AAA12304E1DA252DA7CBE1DA24AD1C940CD7D35235B58FA34769F6673133CA3BA72CA0E0EDA077E4E35D6CC63316B3A80037363EDB903E91E6AE2293366A8A468B53FA98D8947E50FAFF0078A69040DFD7FC459A62160DD26C1B6D6F15C8DFD3EFE713417F9123706FEC3F68AD009D2112A39C8AE5F31FBC6B5BFC4959293D8578B9C0D9A4C53DD670FE62606A731519C505043B59A1D5AB2E3CA2A2AB95094764C7C82447BD9FE9C5C6D4B51D9DC8C297350152D4165C87509B2254B091AB5D0E7A5F58F3278BE95CACB06208D18D8A8D980F61FB46B57CEE5A83695EB4A755943B8E62BE43F1FD23D0B451A28A7CEC8434D98A592E2E4DDFCAC1BD6DA475A53CBC8953867516E7EEE77FF11CA26E807D6DFBFC445F29D7952E1BCDF99E9F7789F14E219AB37D1DFE675F6E5A73D842114D1CFE2903FA8741A7D6F0843F168E6BF6FEF1239D07CFFB18953A6AE5CB59964F785242403725C37CFEF588913133C94A7313637E4FE71C995A6CF4F3CCB124C97DF9871B6589746EB79E7561B69A4FA95AD4948EF73D7BC627553A6D252555762CB32A54B94B5669849484A743A9D0072C09DFCA3958795CD0A4A4963A1536AF63A077B6BD5A3F41CF012E08A7F864E1B99CC6C6545FE538E739C1AC4C2669A099C93A126589A7C8254429486A69A95969CD09504A8BBA88B931E0CFC7976F52B12C46AF86E96A52BA294A54840490C52A27328B7E6CC492333A8021240668ED7E1AA254B420E5736B5AD70C2F63943FA69B88CF280802C84942412024DEE3737EBBD89B91EC4478D756A93DF4C54850295A94B600B3A9449FAF93EF1D9D252532D20F9FD3E87D62316F9AAB126CFAB72FB689B08A098B0A7DF603975FF10844984210842108421084535024FDDBFBEAF4EFD47E1EF1588952B2A54A372013AB071F7FA4226009B5D23F1B9FD0FEB102BB80E01162C0B39FA5C75F9BC227D27FED3F844A3325B6A0F4FBB420411D411F3820CA53955883B39047A3B75D3A6F088454265D3AC7B86757D0DF4842E4F5378A79A84CB5654B33025B997FD1A108970842108421084210842108422520907D01246FE88BDFD8DFFE7AC5DF0341FF0075C396C1BF132EE6F70AFF00163E6D141884B0A92A24EC4F930219FADB6D4346887FC4CAFCEAF8AEC0ACAD0F3E0E07A5069B48251C81569CF8ED7E84CA73436AB850558820EF1F50FF00008B4FFC0E926BA33212942C921C20CB4E501CBB39BB753B3C748F1120898B4904D981D77E5D430058ED73AC73FF00877BC50F0FF0499C95BC98CE1AFBD49C96CE6A8D3A625EB69716E5170C632D4CD365E726DC1AD1292932CC9D2A56717A741E5BA5C17D4A3E97D1A02E6A948B8CAEE1DC11772FB696D35F4EBA9D2CE77BB82EDB10496F3DC1BFCAF1FA44E18C6341C634762B3862A74FA9D067A465A6E995B9175B7A5E7989C4F312A977104821614149D2075F58BA051D4BEBA13A91B9BF9368FE912F22B97CC7EF1D9DAA830F21B080A4AAC752549F30B6C4281DF7EBEB623D601B7246F6E63471BF9432AB97D22DD3886E21F2A7874CBEC519A19B18A6898530AE19A7CC4D4F4D55A65B61E9D421B71C3234F0ABA9C987F9605900281D3BEFBF1356E05D8DEDCF466DF6B368DEB13A58660D7724DFC98F46F9C7E54FE2ABC74563C4178B8C5B9CAE4C4E1C2F4F666F0F604919A52912B4DC274F9A3F04B6D92797F15556D4DA92BB29C713284956D78A39A3327762E0B6CEDABE8F7EB6E6D13D80B0167D99BCFEEF18D98B7AE4289203100D8E96F93F56F9168E79F97DEB1DB702E239CC278AB0EE2191506EA940AE48D4E5A6E59CD0F32A62690FB3A948526CA4B2850513E9B82230FE3AC1C62DC3B5D4EA405A0D3CC95312D981CD2D41208B970BCA459EDAC5561072553B16CCE1DEEC6DD3426F1FA9670479B433BB85CC94CC433089B7EB781E88A9E792A0B71CA8374E956E78BAA1725C3321C2A5124924F61B7CB97C597670AC1F8EB1298B9441975B54E5807095AC39B6B6B0DFD9F60700A90A9090EF9909239BEA396D6B72D62EC9E074FB0EBF88B468662E3255996E5921803B36B19425CA8747FBF7312B3D07C8FEB16B8897A0F3FD0C15D4FCCFEB08893A0F21F48A6BE83E7FBFDFB45DA816020A7FF26EBCFDAFF3B17885133F8D979DB7D4027C8EBF28F38CD99844965C63A9D53A5A12583710CD05DED65314F98706E3A5C8F7B7422F1B65F0B346A99DA9614B667EEBAFF391B06BFCF5D34C538AAE84BF2D1CF3BDC7A9E46FCE3564F08C6D7319759C5592D8D355CD5AC4B7340009129301D1BDAE47FEAEFEA3574F5F4DBE2CD229EBF0B4920146074A0BB6A0CD2DE77F33B4769763F2DF2962F98DDDCB59DF51D7E96B465F7A479C33D6A54E98C4B672D761AEB72DE87CA362C060072845BA6AD4545F4FD9C7BC57A3F2F9FF008FD21125C91724FADB7FBF78AD46A7CBF5108E226C7C1F19DE0B4F18BC29D79FC3B26A99CC0CA8969FC4185A4DA6C7C74EAE5A5933B51969274243F3C27A5D86E5D896438EA4BFCC096C294ABEE1FC0D76D5FF0012C5E870C9F53929E64C44B9C1D4A025AB2A145AE73252E52C1C1D2E43F9CDC4F499D2BD0EA43D8EBA1716723A0D06B1F9C756E9351A2562A547A94B38C4DD2661EE636F4B19679A75A714C3B2B30D290D943CDB8C28A9B52526CB0A293AAE7E8338771F18DD248A90B42C1968216852568525690A0A4A92485020D8E8085070416EA1AA94254D291D4EE2DB38B7A7468F9BAD164137E6BE0ACA7A048476D3DAFABD3AFC84675217E1D5BCF4D8EA7D3974114D118826ADCB69B39B020BB5CDAF77E50D611144A34A765003910EDD1DE293854748483E5209B5B7BFEBD7A7D7B4239FC29FEBF94576D066661A4061B702BC802DE2CA12A282038541C6C158EA946A3AD5646837D3168C571397858913E6A4A922602A00151290E48600DB726CC05CB457E1F4C04E2E41195EE05AE2FB7DED1B217826F852D57883C6949E2033A69150A6654E079E6E76834DABC9AE5063AA8CA4C85CA2D2C3ED365C939598487C2ACDB534D4B00A53C976CBD09F8C6F8A6C1386B876AF0AC26B244BAD4C832E68913524A49967C2A54B252E34201707C2A014E233AC2F0E4CCC85B706E350DABB3EDD5F7DA37B6A733234A97A653A932865A974F9344B4AB01BD12F2ADB4D169A6A598B06996DA42434DA1A4A52840094009000F99DED47B40A8E38C5EAEAE6CF54D98B9F3157249578CB00EEE436D6DA3B3F0CA04CB976172035C83622F6B8B73D343ABC72DB37403A8AAE546E7DD6A36DFD2F6FA475685AD28F182936B10C6C00B69A90EDD7945F48CB6E407D044F14D3261248D411BFCBD5BEBCA38844984210842108421084210844D4C89AABA65A8BF263FAC482AB9015BD839DEFA74FF0F103A7FA9447A5B56FF86DB7E31552F0CAC9BF92513CB5BF93031095582893AB0777B7CC40AD29BA82D4A237B1D76E9EE7FCEF157FF1DC448FFB0CFD2EDCF43B7AC449582A00A89726D7EBE8D1444E952F416C01EB6FC2FF00BEA773D224AF01AE95732D7A12E34F7D74E6044C0800B827CB6DFF00B7B47209BF603E5B451AE8EA2590152D449BFDD8446CDCFD4BFD62112549524B28107AC2110C210842108421084210842108A0F95843AA4B6A559971B4DBA5D6855D42DBDD3AB6575DAC3A45D30EA8EE6B284BB659F2D4DB125635B7D878A7AB4A4C85DC151492C5EC0386E4C777E76BC69B1FC509960ED371AE46E67C934EA64AA987BFD34FCDE93A04E07A7D7A1C73BA87392121449E9DA3E913E0031C54EE13FC30983FFC24B9A849672651CD30870EFDDA4826D61B474BF11A1A6662C0BA92E0B7E6240172DA9BB967363A46A4295292CA5B6DD1F60F1967E592E061B525243EA7004A9096DC1CC2B4BA08536AF3852542F1EB360159DF216730FF00B761ADDBAF37FEF1D753D0339F50390626C3561A12DE4F1980E0BFC7038EBE09E52570F609CC16730B064AF290CE0CC7D2D51C45252D2ACE94A25E5AA3CA7A6E59B4A404A3913C8E5DBCA5317DCE797F9FF3B3696BC53F76798E9F7B7CE32A158FE2DBE2DA7B0F3F4AA4E45E50D0F104D36A73FD4F21FEAE985D39E29D3732957AC4D49385253CCD2655C45CD88B6C78CEAE9ED1CF7679C60AB8BEF123E2C78DDABBF53CEECC7A857686E2E615298629B309A761A6CBE525E0F50E404B493E404B496D5372CEA9002B96A054BD52E62CB82C1DBEF7B7EBE91125395F7FBFBF68B0848242B5F976404A13B22CDEA0D809161A5B0B5040B79352B4D813112015B01FCCCFAB72EACCEC62284550A64B1B3900DEC03B1D3FC984519770B538D36CB652E38A75C538AD92B215B7FF0061BD937B800D858136B1932E761F8BCB9803242C39E63333685C73F23D62A685C4E770CFCBAB17B6ADE6F1FA2C7804623A9E20F0EEC0E8A8AD6E2A8789314484B2944A9425FF009ED40B6D82493CB69284A1A47DC6D090940005A3E75FE3EA5D1D0718574B960054C4A66B96752A6CACEA249BB924EB772EE63B77872A9D0904B949200B80CE40D98581DFDA336C5DE6300AB651036B5AFBFF00C9B5FDFAC78F58DCB51AC3340F0177D2CF73F63AEDAF66493992140100A47B80C47AEADB72788B3D07C8FEB16688D7A0F3FD0C15D4FCCFEB08893A0F21F488100F500FCE2A695653350068542DD4106FBE8229262F254A03B38B0EB71F53AF9DE2DC78BBAF35863863CF4ADB8B4B224B2C7182D2E93A0A15FC9274A4A542C52AB8D88208EA237BBE12E93BCED27095650A51128804ED98ECFC8FCF4DE31AE23567C8356171D4960EFADF7D9F5168D797C2429625385F9FAF21BF357331F13CFB64A767105BA579F71650BEE09B9BEFD0C6FF007C60854AC4E8C2CBB61D212E48B001561FFC4BB0BEBC8BC774763D2925034040BF9B06D762CCC341B464F96D940D4E5C4ADEE1409D7A8F6B83ABFCFE51E7F4CA0CE55307F3171AB17F3BD83F9F222D1DF4410483CFCADB6F04951173D2FE53B6E9EC76EA4F7277F58A199879672837D1F5E5CADCCBBEDB3456205B5BEEC5DBD34F567FA09A2827D1F732F3170A1ABE87C86DD7945721DF6D3E4E3D8C228226C656D72C971B5B4E279894AD2B94D684AC4994D890842925B98429775A913699842B5149051E58E9EECF38EF12E13C564E274C90264A525410EA09749CCE7C43981AB5AF1A1F5D86CBAEFCE5409724872E79B696E8DA078D5BFC5D7C0FDCCE198C499F1C29521893C67301754C5196B2A24E4E4AB0EB616F3D37410F250F9A8CE9D4876584CBADEA4325A9649592BF71FE167E35E92AB06A4C2B8AE64BA6026A2409A939D7265B240999495A94847894A968198870963AF5963DC348913C99254A195C0F2727A924EDA731BC69B79959499899495B9EC3D989846B784ABB26E29B76955BA45464A765032A521C4BAE3ECB4CBC1D5001A7194E83A092557047ACBC0BDA3708F14534B9B271591512D60144E92B4B292A1E152904954B2774CC0141AE2E63119D86CC960F8482350AB106FA73F47EBD3CD94A2969978B6B6D95FDE71652BF9E94A3CC3BECABC65B8AD5D32539B0F9F26706F0E69A87E8E1C5BA86D6E7959A626A50E421EE6CD701C5FE7FAC5343E975CD0DA54A07A1510DABD0F917659DC8D80FCE2D5438AD4075622AA7952C6AA0B48B737CC76BE9AC4E96BAB5003BA6B13A3EFD2FE5E7EB1EB796B9399A19AB5B630FE5E607C438C6A736FB12C893A2D16A53AEA153074A16EBB2EC38D4B361446A71FD2D907EF01BC63DC5BDA870870CD2AE7D562D4B4E10852D4B9F3A5A41081E2EED24854D2F6640262E12A4CE59F12147664A6F7BBBB3245AEFCB9C6D27E1C5FC3CF8A5AAE61CCDAE31E5D990A7D3DC62B74ACAA6A6A5549AA21452A63FD4EF4BADC9944AB4DB81D725A56664A67E2D2CA564B21E6D5E697C47FC71D151E0B3F0FE0D9D22AEA565520D4294A44C424B85CC9212A4292E4300B05412A215768CB700C113573C89E0A424666001DC1651BF319ACCE1D9AD1B75618C1786B085028F84306D26468986282869990A4D2A59A96939697611A589546848714DB36400E2D6A7DCD00BCEBAA52CABC38ED67B4CC738CABEAEAB10AEA851A852D4A4898A520151777255D45C926F1D8B478549A420A545446CD61AB5F5B0D198748EEC6E41049B137B580B77B0DBA6DDEF1AEB242535499A19665CC0A214FE23989F2D4B10DA7CAF92E7996059D830F2F705FEF7B40000580007A0E9BEE7F3DE2662154AA8A954CC89960B78123C36003B6DA3DB9C56CB59989CC753F7B5A2316F25EE6238421084210842108828D813FBEB08453D67D07E7FE610370473895D984B496DCD2A754EB886D1288F2CD285F438E8D434F2839BA55A6DA48B92482737E1DA2ABAD9F224A64A0A56A4A4A9419C1DC5C10DBB8726EFB45B27AA6A3358101D947460AB037D483AE8FE60463EF8B5F13AE153835A8AF0DE6A62C9D99C70C3466DEC1F44A3D526E78CABA9E6CA244F33293324CCC2D97192B43CAF315A9484845ADE84F62DF09D89768D488AD934ABEE1D295CE05089409DB3AFC36D0906C436B18AE23C41328D5972A09B96D4B790FD7CDF718A299FE270E1755509C9597C9FCCA6E9EDCCB8C4BCE3FA01525B274B8F5A4529425D2362528B056E7BC6D9A3FD3831A5D30994C844E51979D91514F30B11A242145CD81B5C69B30C7BFE71588999532527501D2751D490C1DEFCDB945E2F0E1E39FC1671158970F608957B16E0EC5F89A759A3D1A8D55A44F4E2AA15498712CB01AA84AD3448B52CA7149054F39E54855D63631D15DA5FC10716F06E1B5B8A4CA296BA3A09626542D351216A92145921684ACA8172032803BC5DE8B8C2AAA16997324A1256AF0B2560DB5B92D762DA8EAE1E333C8750B65B75B55C38D21C483D6CB485209037DC11D3DFE51E747196152B87AA66D3D4251992A524D8120E80009BB3B73E42FA677433D7529CCB0DB962086B3DF66F4BC4CDA8A9373D6FE96FED1D4B5D3A54E980CA0C2E5FCFD2DE515CB00161CBDF5BC4F14510C2108421084210842108421100A5A15AC28D82569D040D275A0A2E76B929D5A86FD40BDC6D173C364A674E419812132CA54145C174DC5C96B90367B96DE2867294B0A9792FFD43467B0D6F76B1F48C1F78F5F0EF3B9DFC06E28ADD225BE3ABF93B5293C692879497669FA722A52A6AADD929E616E5A41334F0E4849484DDC2537BFB3BF00BDAB228F1AC3B87A764FC3CDFFA2CC1694AD26A11DC8512A2C120AC28822E1F78C131FC1E5CC96B9854429F336E18B91A1366DB4F211F9DCBAC242E612A09979D9598026549492DB93330CB40B684B8569525B975B24A55AACFF302AE9F20F7DE9D72B0EA5A09D44BEFA5D4651395981091676236D4BF50C747EA1C425A244E0906D99CBED7F204B69BFED1B9E625CB90A08D04364B49575DCA5BD29BEE7A01197C9553CE9456898ACCC6C49D586BEADC9FD2F4E0CBBF8AFB6972C3CDDEDECD122920B61B0549B1F2AC13A80B92527512160DFF00AC28FBC5A26D55489FDCCB4B8248CDEAD7BBFAEFCE39083C99CFCF77E5BFB7510D3A55ADB3CB2400BD0000BB5EC4A6DA41DCDCA40BF7BC5C66CAA944B96BCA08502544DEC1BAF2EBF38854876771CA2A95950B102FFF00777F7DBA0FA0113A9E7A12DDE1CAC43BB59B4170DEEF10641CCC4915E2BA9588497B101D880E376D7D7EB0C82FAE85B4D768AB2D2F35373B66D242255B6420E9014E3AFA9012C8240BA8F994948DF42557B9DE302C4EB2761B4F88CC9A909935256524D9D25CBDCB3B746773A3C4FA04E79AC4DED61700F98040F2D79E91FA49F823E5954B2BFC3F32A29959977A5EA388BF9A62979B79010932B5B9F7EA54E7191A52A2DBB2738DAC296544820831F389FEA0F8C48ACE28AEACA69C954D44C327202480992F2D25401B2B2A466BB66D0691DB3C3F4BDDA50D7719893CF52C5F9D9AEDB978CB7BC84EA42526C13E9FD574926F7EFBFF009B9E9E541AB9955493953929CE836B3120B7CB571EB1D8D4F3660484148621DCEB6D0EDAE9EA2228251D3DC0BFA1B1FD62D315840218C0EE49F584722C00E501BAAD6DB6DFF5FDDBD62A29C01325AB56580DB17205F7DF6222DB5672CF42F7091F57F2D631DDE2B5881FC33C077105506356B5E0CAA4928A090AE5CE484DB2BB58EC3492493716EA0DE3D1AF833A3FC4769FC3632002754D1CB3624655CD0920F201F5F78C6F1D39D2A51B1082433D9873DBD75D9A30BBC26E63CB70EDE1A985B3326685375896A1D0F106329C969242DC79C2A69B5143896415F2B4C9750028951F30DADE9A76C9C0187768DC65418355D4AA52E7CB954D4E73A1092B2B284E752C654A493724861BDA3B3FB3BC5E6E154FDE225A4E59654429CD807B3107E7A39E8395C39F8B470DB9F330CE1AADCF1CBEC6ABE4BA9A3D7E61B91A24E33A948725E42B73896E9EED41E213C867E35C537A55CD695AD24F4F71B7C1DF1070F522AB30F9532B29C67C93259CEACB2C02573252495C9410A012A5848532B29394B64D23B52A85D59933A5CB969CF95C8617533667B91A101C8B68E2326D4D9D91AAC93753A54EB352A63EB52999B61412C960E92DE9796794E2403FFBC825A58DD048063543887B3FC730054C159453529964824CB2EE97D181049FB78EECE1FC670DC569D33573D285901C0367DDC392D71CC5F4E7CC2928365EAD4BF3B45B42DE60B7DCAA71B0A96E66E9B36161646A201D2AB75657896A4AE5AD25265AC2559ACA7215A03729196E4020167D445FD13654EA85CAA7216424A831770E3EC060E1DB94422D49A5A32F9D6A4F2BB39B5B61BDA296A17884A2ACB252520EFC9DBAF22D73FA1CB602803E9B9B1FD8FA46A6D64D452CB79440531218F4D2DCD83031A7250A7D07BE9D03F94533A4297B208294801C24DAC4EA2C1494943C41B15B85C6EDA6C8D8DF20E14E29ACC347E2115B364290B7C89594E801D0697DCF2BBDE282AF0E4D49CC407367B3867B925DC17D031FA45B2E737077C35F10D28FB39B394584714B9308D2B9FA9C9BA8AB85EFA5D13F497E43594151524381609FBC15B46D8702FC6063BC1A6549958A546594438EF96C72B657014C77D45BD62C955C3F2D600CA0A8001C0B3BE9CFFB0DF58C5E639FE1DFE00714CFFC7D2A4F30F09A9D5A9C72530ED7294892694A37B36D5628D545948EC0B86DEA7BED0E0FFEA498E224A51515899C84801495860C35BA0853F47663CDA2C53B85252941425B39008FA1BEADB802DBB473B017F0F9787EE089A95AACF61BC758EAA52EB4AF4629C414CF82514907ED19A452692B50240B84B80DAFB826E22C73FD4B2BEAA96653535404050621014496046A4957931E479454CAE1496E3F86E43ED6D8900581F36F48CA364FF0AB9059094D12994795183704BA9535CC99A6D3D7333F369B12E73A76A8F4FB892955ADCA2DF4BA6C363A8FDA1FC59F1071AAE6CA4E275094AF3040EF941290A3A32944070C76BEBB45C6470DCB46881A07B0D5EDA7AFF68B802D2FEDD209534FAD243456A3CB1637B2D454A091D02104277164EDB6AF625C4D8ACC9F32AEAABE6CF4CDCC42153338751241035D3A168BB52E168A45664245C312CCEC1B7E6DF3F6AEDA1B6980CB292D0B82AE8A277B904EDB1DFDF7EB7DE310AEC56755921CB1249725F4D413CCECDA5B945C04BD741E9AF589A2D928B2C1FAEFA3F2EA6F0C8798DDFA72F3F942139414B2445520327D6DF21FA4225C47084210842108421105024103F7BC2114B42BD3F31FE61083ACB730565C4A94E725B61050AD0E369BA1C5AD2A208079884F404907E5191617C4157854E91340CA996458A487095066D1DD3A9B802C766A59F2CA9252DE139945408B924F858F42EFA3DB78C50788D7856E54F1F5444D5A6E69583B37A954D759A256E4DC684B54912439524DD590A4296F3AF21B64175B7594A13E45242AE63D45F857F8B64F079A7A2A89C9974CA64CF91312F2D76CA490AFCA46A086F173DFAF71BA0330AD4525D2ECC2EDA9D3E9FB469FD8E7C0AF8F9C258F5FC2329978CD729F3B53989495C4D4F54C2A98242EB4B737373A669E91616E369490970A097141B480B526DEC2601F1DFD99D360495AAA64C89F2E9100CB992BBE54C9A000532CCB0960A21C12E52EE7478C1E561D52AAA00CBCC1C80C72867B6A7ABB0DF4DE3646F0AFF050C37C244DD1F3A73C5F5E31CDC4B0918770D38BA72F0EE169871252DD4DD522594F4CCCCB2DC53C1B44EA14548000B98F3ABE27FE37F0FE25A2ADA0C365CA954F39535FBBCE833DC14A7BD656553302D9585890EE6332C3F0E29521653704036040075037F5DB7E51B0BA5A7D26CE0474B59B1645EE41D092A25290774824D93606F1E2F717F14CFE2CC5275490C17354A4A459DDC8275007A8FD23B0A8101094A5CB300AE570496D76D6F7BC5740201BFAFF0088C4A7D3AE9CA44CD4876E9B7AEAFE91725104DB60DFAFEB13453C43084210842108421084210844149252481B7FBC5DCABB8A24292D9D60070EFB820FD7E7B44195198BBB9171E96FDCF9931D4B17E12A563AC2F88F05D769ED5528D8BA8D52C3352937101D4993AFCA3D4A98982D5895FC1B336B9A510086C37AD5B24DB607E1C78FAA784B8C28EA3BF989949A992ACD988CACA4D9DD9833F4B748B1E37202E4A99394906E45896DCEC1474B74D63F324F11FE103177075C4AE60E02A9D366938597589BA9E0F9F32CA2C55E8F3CF2A68CD4BBC8406DC4C9256ECB39A54794995B28274C7D47F621DA8E1DC75C21413855A274F14E844F42541A52C20250487CCD3192CA2594B2402EE0741E39473133D6A53B0248E44B9D0B5F6075B73DF1FE494B41F5A56860EC1E5A4A5B27D02CD9255EC0DFA6DB8BED0E01202E43953BBD891A37E9ABED7BC63D24ACA838043E8075F7F4D87A4127500AB11717B28107EA0EE3FC6F1C57CF9545519D5600B12A673E7EDA69660F17695977019C00FA91E56B866D1C4462E1271DA5A99252328290407617E9B33F43E711D56564B10E5C103A35C97DDFFB59E204D85C02AF6482547E406E62CB5089B5330094EC5F4EBA7D1F52DCAF14512ADC4A0849D4A511750424ACB63D5D09BF2C0E84AAD6317BC33009D33C539797437394902E6C4FCECDC85E1F7F6378BE2F0FAE183147167C4F658E55D229D3935439EABCBCCE2BA9B2D2BF97D268ACA933E2A53B3A50A979748430991650F2D3CDF8CBA3514DE3A13E297B44C1F81F826AE749ABA693574943313290B502BA8A82912CA72A5416C94A96A54C072A16129241501176C36816A9C8284AC85AC6637602E75D1EC3ADC98FD3DF2EF03D172D303E14C038740146C214692A053BECF9444A52D8664E593A6C9D484B2C2436E81A5D400E2494A847CA476E1DA2CDE32E22AFEFE7F7AF5339CA959B55AB5724BF33A3B1B5E3BAB04A40844BCE360FCB42FA33BEFAF21667EE2A5152C13D0DFB5B7DFF007D7E5B46B55584C9742000958771AE876EA7F5EAD97A5294A48000200039FBDB4601F95A2316E8E610844A080E01DC807E809BFE83E71532A5A8A52BD122624BE80870087FD22DB565A7241D0A43742E6E796C1F67E518E7F16AA62AA9C02710EC042D7A304556642504851F87A74E2EFB5CD811626DD2FF005F4F7E0895295DA0F0FCD74832E752AC28EA32CC05FA806E47B5DE2C38A4BCE93ABE52006D77F3DBC8C629F80EA3D1F327801CBEC2755690BA5E22C195BC355965E097528E66A42404281BA8A660957A022E3711BD3DB9712AF867B48C2F24D3965AA9D454090E0CD2A2C431B696B87B68F1D8BC1D4A55484B0BCAF3FE50E35D4B7AF9C599F864704BC31E786767125E1CFC4FE194D3F15D36AB338DF26F3370EBCE51B1CCA2EA4B9B96A8D3999E78CC5366A59AF83A53B4FD14D002CCC84A965474FA6BD9CF13E17C71C3F830553C9577D4C9919D490A2B992908CF9C29C2923BD162092FD63A2F8F311A9C22A67996149289854A0C6C924DFA3B10F66234DA2E5B357C377C4FFC37AA350C53C36632A871479234775D989AC215895157C40C52412A217214F32F516ECC35A50EA59436A372DA41168B0F695F0D9C318FD1CD51A3972D73659095C84A03ACDCAA6A4A54480ECD2F2EB6BC41C13DAC56534D4CA993D40121242892DD1DEDC9C9D5ADB470387FF151C99CC6AAAF04E6F49CE641665B73424A670963075548A6393E85969D4306B0D30FB331CDD9A69734ABA0B9E4569BA7CE8ED4FE0DD5414B515B83D2CCA9525456A549979B2CA2EEB58427C21C8776CA4DF68DA0E11ED5A9A4D4226D54E43A9012332AE49666D01203BB12D1946959C969F625E6A45D4CE49CDB297E52765487E4E6D95A42D2ECB4CB454CBED9410A0A6D4A0526F78D17E32EC531EC0F391226808249050A60068E1AFE7BEC63BF708E34C1F18400552D456029C1BF2D7770496F72D196F56A005C5813637EA2FEFF002B75E97F78F2FF00BF993484AD5981617B8B9E5D4DBF78D4488800D8A813D3A9B1FAF5FAFCE26FE0EA08FE1E86CEE75D1AD6279743711C15006FF7F7F7A44E48B580B6FF005FDFD7DA241A59E8254BDAC6F61EC7A72F9C4A52C906CFC9F5E8DA37CFCCC4B157227CA9285A095124105859CF2FA17D625162A00A5EC5891A736B7907B4352D3600FCEE3A0DB6FF001140996262980B9DDFE6747FB3157E511BDCF9AE6FD6DB7EFF007BC542A8E721214901B517B8DEE1DC5F43F28E09035DE224240D893F3FF88905537F2CC2583100927D6E7605A380A074E46DBEDE9102A27A988529E43EFD62288421084210842108421084210842108401620F22F08858837DAC45AFB8BEFF0081F9C5DE7D7D3CFA79728CA01684A428817B0E7E8393B728E087B1D220A783435590413A4828FB4EFB2564DD23AF4045C13EC6F5C3D5829495C998B96A076535F9DF62CFCB5EB14D32825D4A8E61B38F5B173AEB76FD045129426CB4B8A652E11A94A75A78EE7A8694DEB27B5C2869EB6DB7CB6571EE2341572CCCAA9CB9290429099854406203A6F616B91ABB6D16D9983D3A1D484AB324DD59084F26CDA0B6FBF48E616C294DB6D15B8950F34CCC6C117EA520040001B91DAC7F1C7788B8B24E34145656493FCCF9B9105246DD46910CBA54A41394EE410356B81A073EFCDB58908D248B836245C743636B8EBB18C2513128585CB05C5C3FD6DA5BD045D25BA40F0B307F7177EBE83D2D1088EA6A1550A0A50660DABBF58A849704B35FF4108A688A10842108421084210842108AA366EE6F7FE9F7215F5BDBAC459D73552E493E104240BFF35AFEF1689954B4D6196904861AF367F70FF62380B4AB5071B5AD971BD7F6C9170DB4B494CC03B0DDD675B6826D65A8102E008ECFA3A218261B2713933009F90AC31F1020B330F1176E9C9CB98AB9D2FBF940292E48FCBB96B821B4BECFB5B48C5FF8A07876E1CE3DF261747A77C251F3430C494F4CE01C5AE30D26EF3685CCB5419F5108E70A94E7325D37710A099B09483617F4BBE0BFE21EA306AC914788554B553852254FA69F34A04D94FE20925432CC00932D45C05105493A475DE3B8289889C424E662A0407BB72BDB63CC0239C7E773C4170E9999C3AE61D7F02666E15AAD0ABB419B5CA06A75975BA655D08511F1D241C69BBA1763A4A5C5825205C902FEF0F673DA4E1D8D5352CFA0C4A454C89E80A5C91302A6D292E04B9A42AF6D159520DEDBC7594DA0992CA82E5292468426CA0D7205B936A19A3C2086C121A56B6C7DD56C6FEBD36D8DC0B6D611DCF5144316969992D59B3872411F2D5AF700DB7E71679EB9921C242AC1CD8F32FAEFB9F4F388458EB7089D864C91E2244E511AF222E46C2FBEBA69789722A0CE2A05DD237DFA8FDB5815251E6585148DCE8FBDF4D8F7FCBD3AC6474F3A451D377F3572D3912E5C806C073D469A6CCDAC5531E47DA2E5F86BE14739F8A6C7D48C0394584676B188AA6F21137596D879EA5536556A4A54ECEF2D3A129495249529D6FEE9EB1D51C69DB4E19C274F3E754D7C8921085F75244C4A66CF0917297242522DE229507291C8C7294CC2B0132D6A63E2212484E9AB0D6FFDC47E82BE17DE1B181B80CCA992A6CECBCBD7339F1253E5959858950CB6A975CF3896E6DFA3D1D612B532CC93C85B49D2FBAAE5336263C06F8AAF8A5AFE3CE22E20C264D514D153CF9D4B4B284C272CA4A949054A7654D504833141294A9574A520B0EE7C07089628A9E6AD394A900ACA92CC54D662F606D72FF58CAACA25E537A9F5A14B5BAF14253FFE8CAF315F08CAF7BEB6A5CA1B513624A6E6C498F27B1FA95AF139D5014A2A5A8A9C97759FCC5F912F66701B522D9CC893DC2084A4F8776B1762E07CAEF7D2E62B9EA7D8F716FAFE7FAC5A14B54E4952B54806C6D72079EFAF95F6888542BBC09205F93B37CEFF007A4224C5642108A4BD9615E89B5BEA7BFE517E95252707993AC1489B6D5D985EDD4DCC59EB0955420000800BB6BA1F36DB945B1F19185D18F3862CF4C26E341D156CB3C5B2EDA0DD5F6AAA2CE2506D6EA952AE36B9ED78DD7F82EC7D5238FB0E42E677413918A8E50E09667F77162FEB141529485241205C063B13E6DBDBAC6BF7E129585CFF000C350C273CE10EE1BCC7C534596BDEED30F4BD21A964007A69710F10361B9B46FF007C53CA988E2DC36BD39CCAFC152CF3318E44925648CDA380906E37D2EC7B6B80A5CA994E5208538524656760030D4D8BB07FF1E3FC7B7FA8784FE27F873E3FF2E82E59DC2D8A6428F986994D4DB550C3689C9479972683646AE6FF00EBAEA5EA074F4EB1B55F08FDA952564B93844E9C094210BA74A882A13A58032203B933C14E66FF00DB1A18EAFED5F84FBE4CE9C99533553A80B105DB316360C598DFADA3786CAEC798573AB2D709668E1826B386F3070CD2711D01A6D697C34C54A5B9BADD61A482E22CA4825D2A6CEE0245C83E9A54572B18A394241CC952100AC1722DB9761724E839EC23557FDBA661F50B57E42144B17177D1B9DAFD4B726B33E2F3C26F84AE32E99333198F9754DA763454B39F0B8F30B4A4AD1B13484E68296C1718967251C6895171C4AE4FE216E36DE99845961568A8E0FA7AA90A156A4AB30BA4D8286FD141C5C69177A0C6AB04D080B5A128B2495101B40731E5BDF7D7531AD966FF00855F89B78794D4FE2CE157164D712591F2CFB9333197F58979C62B52122D953E52E48B9393752AABAD3295A12E538C83257650674A82474871DF6118363B267A974F2DE6053CC4CA493F9491E1486624016008B1360D1D9FC3FDA1D6616B423BF24A4A6C261360402D7B816E81DA36970B0E0BF51736B811F19270C548398A81662C1CDF63E91DAD348A44E6512A0C4F88B9B726B74D479444003A472B98B7001600306DFEFF00789126AC55DF500D9FA0E85B5D79FBC22DF316A50B926ED7DEC7DF58AC47E61D5C1F68A5A95AFA9FBDEBEF1262730E5D3D394558E4122E0907982D0844466CC362B57B984220D75842108421084210842108421084210842108421121413FD47ADEDE9F9C4CEECB02FAF4DF71AFDDE11384A48DEDB6DD3F41BD81EFF00217BED11266AE592125BFF008F87F7D6205120DB46E9ADFA444B681B8293ED6FD05FAFD077809AA9C72292A24B33BEA3A8F5DDB94490A529652AB824020682C35D351CFD22112949292410C444FC89E5F33FBC22296C1697EBF43114226545D6080DE116F530844884210842108421084210842108AD9011950A23C40920DF991E9F2880CB41254521CEA5AFA37D2115C6AA6A91DDAA6ACA013E17253A9DB4BC4712AD295A14DAD3ADB50214DDF485023717EC4F4BDAE3AC5C309C7AB303A9975745553A4194B4A8892A52335C5AC3789532521695664A4B8BB87FBDFD7CCC5947157C0B70E9C6261B98C339D18229F539E2D2DAA4D6E96CB5275CA629C49087199B53531CE71B590B49537D411BDE37D3B07F8B6C5783AB69E6CDC5AAA494E5412A9C4E64064A810A0DA58BEA395E31DC470B953A5A80932D9812C9D3AB83AF9EF68D7133C7F862B11CBD66766320F34DB768CF38E392B48C6549E5CDC9B0BB14B0FD49AA830D4C2D2755DC4C9B234148E5DEE4FAA9C19FEA19814BA4922A6A64A96A48CC944C4A19400723366673720EE491AC75E627C36A9A099681BECE0F506DD5AC40DEC62D5695FC357C5EBF5032F3F8EF02C8529974DE716E19E6DA0A22EAE5227258A0D920F99D5EAFFC74DCE59897FA84F074C4833F3CD50BA422B65200D95632176D34237E6D168A4E0AA89EB51019AF74B3B6BCB5E7BDEC4EB7F7C3B7F0CFE04A55529F50E21333EA38CE5E5E61A79CA260B658A6CA4E2104A972AF3D30BAB1085EC09B0D81D85E3A578DBFD43B095C89F230BA844A2B4A9328998264F4280B14AD265A7375C85AF6D232391C14A9490B9CC1203A89B002D7BE83A1E91B1C70F3C2FE4270C186E5B0BE47E5A5130651E4DB44BCC54694D34E57A7A61A4848555269C654A528D9657A10D0D46F616B0F353B5EF8B3C4F8B6B67CD18AD4CC5CE2B7577A5FC44DD810003C872D498C969B85E44801265A524070E3563AF9680E8CEF7BC5C6151528ACECA512B3616F32AF73F3DC827AC694E298DCFC56AAA2BA64D98A5542CCC2A52892EA24DC9B9D5B5668CC69E9D12252258481912000341603991B442317AB5672E4BBAAC7D0DBADCEBBC544228E21C8905D838D0C21114210882BA1F91FD22ED4931E47764B8CDF94E9721891BD87F78A09C926A90C01F0871FFDAE7CCEF1D76BF4D6EB545ACD21D46B6AA74D9D91712521414899616D2C106E370A3D7EBDE3613B1CAD386F13618A92B5495F7F21D48394B158B588F913A9BE8F8DF1385A120A14126CED622F7BEF6DEDEB1A9578653FFE93CD0E2E326DF0A61CC1D981375644B2C90B0AA83B361D2949B69D2DC9B4761717BF78F667E2150715EC9302C6972D0AA89B83D1AFBF09F190813014855F70097E7E463B03B259C42BBB5ACADA6B10A3700E523FCF4E8E3235C4C64DD233D724F1B65B55A579CDE25A04CBD2EC5925725354C61D32AB4950514EA54DAAC12124E9EA2D78D5BF878E3D9F87713D11A7A8549994D548292936252B48D2DAB1F7023B8F8D30F935186ACF72839A592CA482E00279037D2FAB8023D9BF86DB8A7ABE37C82C67C27E625650732786AC4FFC929F2332B299C730791352CCB2969D70BA532469ED24AB748E700529BEFF00429D976374F896092CA18CBA99089B212ABAD085A5D2E5F662E402778F3D78E69D54789CC514948EF08530213626EC2C1DCB72BF58D9B585256FB847475287594FA200B2EF6FFB4A9209B75247A46535F3A7CCA83292B5654B10D67CBD7AD8F90DA31B54D4D452A132D92A6399ACA72C468C49B9DC0F9888D4A5C4DB0A61690E36A4292B428056A0A4904588293704EC458DC003789B2A9973100AC92EC195A581B9BFBF5E9A71210A96CE49BB927F6B5C96E4FF004B076CA5E965CD4BAD0B96274A5E3E5E5286DA9C479AE0F5FBDB01D63E182AB05C5686B5722B644D4A50A527328283B1B10E069CB9DDE36997562B1211A12CE1F7D6C741BE9F2888BE94EA02FA479926E95FFE69D8581E96DFA137B1116EC464A64CD480CF943B33177E5F63AC4DA5A714E328DC9F4B3B6A403118B1AF4F5FD0C5727F3067DFAEDE4228FF005FFF00CBFBC4A89D15A108421084210842108421084210842108421084210842108A7A4A8DEE46E40DBA5891EBED78BB22585213C9817363A02D673BB7ED088A8816BDC5FB8D81F98BFF00BFBC7270F9934E6426CF7B173FBFC8F5BC4B5EA34D3D7FC72F58980E9B923DFF00E2FF008C4D93854C4AC2D40E5BD98B86E4C7C869F5890807BCBEC41F76B7D81118A7AD9195CB5C5EC3CEDF7D186D15708B60201BE977F50D0844C9AA0A50234CA3EA4C2112A10842108421084210842108422A25AC84001B7FA9EB084479CF21F3FDE1102010411707620C47292674C4CB2400A203DEC5C3177D8DF430D62555D7E5754A7D0149D2DBD65368FF00EA00045B6E87B8115F5186CCA701521613943854B2C4BEA1F427C99BCDA257732C6660C55A9058FA1895652A520A9A41084E90920DADB917DFB5FF006220918AE2F4AA025D54F484801B39CB6E5CB972710FC2CA55C84DF9B38DAC1ADCC0EB11BA9684A3514A5B24B606DA0ABA9474B5EC2F7BDED7EB15753C478BAE5841AC9C366CE4B0EB71F4B9F9F224C9A775A52919C312000E0680EC45CF2239C54712979296DF25F426D6E61BDADD2D603A7FB0DA2CB36BEBEA16262EA271580400144FA6AD7DF5B973B3419E521F225201FCD96C15AEBABEBEF133A43A517480DB62C86922CD8B5AC748FEADBADCFEB79F4B453660FE24CCA48BA8975907F95DAC2D7D5F6222904CEEF314A57997F9892EA517B5DAEDC80163E512C499B33B952A4A194941CA0BEA06966B1B070F170428A92090C5BEC8E86114AA515973E8360222844308421084220AFBAAF91FD227D3AD499A801D8A8023CCC5296FC64B27560DD75FA6BF28E3CB3A96DF4AD490A00F99245C595D491DC5BAFB5F78EDEE09C40D0F12613E260A9D2092E5FF00EE076B80DB38275F58B4713C90BA70A6B80F6DCB9E86FEDF38D49F0A497FD25F199E28B00147C349663B0711D31A02C8996DE666186F4D800521D65CB2424D9448BEE23DE9E2892AE25F878C0E694E6FC3D34CA22C5FC32E449988510DAA8CE501B16706F177ECD6709357F99C152576E65C33B87D074DBAC65E8A88494AD44A5F41679A36581B029D66FB2BA280EA0017006FE73702CA3C37C4AA9D3159128AA605F2E8B24687FCBBD8DE3676B29856503315669563A9663A3DB7D4E818B461D6978D67FC3C7C5DB2CF885651FCAB2A78800FE15CC4665D2A6E8ED4ED5AA14E7DE9E6DA050D4B38858D2C9714F14A5C705CDC98F74FE1ABB48A2C4308A4A254F49992928CA02813908014557BA524240166CDCCC69076B1C36B97553E6041B955C6FAE8E186F7B7CA37D7A4D4246A4D89BA73E89C959A4FC5CBCDB442995313365A1B6CA4904253A415056E2DB5AD1BBD324C99B265D582921400077530FCCEFA93ECF1D0D492264852D2B4948D1B4208D39BFD35E91F7D09558F537B74ED7FD3F3FAC0148486D5BC56B391D1CB5AFE9152B219873279F3D7AF90DB48D6E3C3AFC4630071CB960A9B137274ACDEA138C48634C02B2DCABD6434CA5E9F90610A5A9E6564BCB24B4D1414280D5A6E7E6A7E283E19E7F08D3D6E2B494F28D3FF001264A9B2D0405A43A8149CBAD803C99AE18C6C5E2926AF87B189945552A6A56898525494B243167DBCDC73F5393F9697286D494A91CA0B219B2CA872F4A4D81291D14542D6001BC791B8D19B22AE7A66CB20CA9AA9641703C25AC08F2EA1E2FF002E7898942C5810EC7D5C96D2C75E9A6D0D6359459408EE46DFAFF6DFE862DD2A997532D4B43008B973CBEB6FBE7572C85170E7562DB6E5F944A410A07D4DC5BE7D3E71488495A8247EEC2278F6F38AB109B1239421084440BF703E70BEC09F20F0881B0EA458753DBE7F211514F4CB9EACA011670E1A2052C25DDEDF7CE21A91B9D69B72D2E8373E64A9E0C009DB756B22E3B0DC9BED114EA49923F3149B9006E5839B7400EF76B3C495554B4AB297EA4683CECFADB4D623FD45241491FF0076DEFF00DC7E2220FC34EEE84E12D4A96A240290FA6BECD1CFE210CEC5BFBB7D6D03B5B706F6DC6E37E9FBF7110224CD985932D6EED74900799E510FE290ED9544DF41CA04D813E913C51ACA824A909511A13BF2D45E2722605B3021CB78ADFA449CC1D2C77F688A650CD9775293A39FB7313B2FFE49F788950001DF7892241568A1F61FD3D5A21172438B75B7DF9B44A1D4136DFF000FDFEC426485A081F99F93903FC6FCBDDA5CE9A8920152817D81BFDFF688958092AB1207602E7A81B01F389D228664F4E60A4201D029C12FA6ADA9E4FCE241AD940397F4F5E9D3E6368A80595A1652D2F4EA097080543D82756FF3B4433A8E6C9D4A577605377F2897F8F97FFB737CF28FD4FD22915200090A0B5AD47ECD3BAC77D4A49B59361B9BF4F73191E078362D89CF9326970DAB9C56400A449514B682E35D6F6168986B65306CC4B02CC1DBDF5DBA6F1E119B5C48E45E4A31F1D9A39A584304CAB4921C5D66AAD34A0B0AB72B94C879FE65C5824B605C7511B6DC0FF0ABDA1F16D322AA8E87BB42D29532E54C07C40102C921C1E676F41493F11080FDC4D533E89D87AB1E7E4368F95937C5CF0DD9F8B7E5F28B38B05E399B95514CCC9D1EA61536C116DD6C4C2185906E1434255B107A74BAF187C2CF681C2D46B557E1EA40487CC25CC6209704282198B6C7DB48A1918CCA9B51DD2A44E483FCC410970C5957E5D75F48B8F5A92D9097569694A1A9B4ACF99C49170501214540FAED1AB1C51C198B609DE7E3A59494BB92921C39DC81A7A6FE717C1532CF36E7AB35E27092A1704475A4A90B9D37BA436676009EB688FBD06C2FE45FF4BF908914A09363BED7DB71FDA2A2AE867D3292169FE517BEB7B69F3B47226021D88FBD6201609B6FBC5114A81620BF94460821C40A80BDFB5BF3F489C9A65A939B3253CC13711CC4358F7FCBFCC53C21AC7A1FCBFCC21110A04D85E390092C211340820B184238842272242A60CC086F9EA47E9D6108E554EB4872437AFE80C211241292082411B8D443CA1F97CA2726A67243672407D6FF006F1032F98FBF487CE38993E62C0BB11B8717F3D5BEFCF8567D3A1D016E8E7EA2263A7B037F4F7F5277FDFA77A719FF009883D7A72DBECEF10A12B2FDE17BF859DDBABFDFA4523AF7B7A9F4B91DADFBBC54A26E51762599C8BB1F771CF43134250CC43FB7ABBC4A4ACFAFD0111C2A7CC517CC53D136100948B0000DAC1FEF9C5517205FADB7F9C4225A941C317EBF58E47B7972DA110149496208FBD8E87D2111B6D7B8207F9B74EB1082E598BF97EA2DFDE382583FCB9C2DFF001BDCFE5688995FD27CDBECFCA20EF3FF001F9FF68844689531659293E6C5BDDBA471DE8E5FB7BB31F4BBC414A484906FA88D88E83F7BF6313E9A9672EAE549092159816BDDAFA8D00E85F668851295327A67380940662353AF42FCFF0048E1A11A1C41529210A7129794A3D1951B2EC08B12104D877E9B465F4555F80E22C30CCCC3BB9B20961C96D7F507CACC5F5A0C7DA7D389680EA0EC791BFB8E76D7DE356AF10BA2AF283C5BB85ECCD45A5E473129145C2F539B274A9E9A4D7A743E1C16092D0627D8F31709DC8281604FD09F6555F278CBB0DAAC3A914A33692928E7E55FE41FC35F78A05CDD41091A5D872022DFC31592F0AAB9289D98199359C3F3480E6DD79EA6326E410C32DB83ECC1E65C6CA3AF705293B1DAE7A8B7D63CD7E3B9F36831CAB934CE9992EA9697B06217776D87EF68DC5C08A6AA9255DF3CB04036B116F3DBE6F161DE22F91073A786DC58BA3B1CCC5F80D52D8D30ACD281438B9DA625E51A7879095BAD87B5A1C3A12B376126C4EE36D3E187B48A9E1EC6B0E9589D42FF000B50B97226F7633A84B5A92E5282A4025F29624003E7D39DAA707CEA8933A74B421C02A4BDB62581DB9728CDF78197174EF15DC0D601AA57A795318EF2DD8465F63561F20CF1A9509A6A4533F3092B5384CF2E5A61DD4E04A8E924DF7B7BC5C29553712E189155DEA664B04242C1241CA0DD3B104DC1D08DF63A3BC474FF00EDCB58525941459C31172E34D1F67D5ADAC6695B75B04A350D4908B806E77BDADFDE2E69AD4217DD29F33B7307D6DE44EDE6F18D216A98E54A0580243F366B74F7BEF1F94FE03CC8C61C15E7D619E27B29D0BA67C03D2EF633A54BA94997ADD0D97899F0EB6CA4A1C52D83328216855EDB98D27ED1384697B49E19A9E1CAE9699FF8996B1874C58FFF000F5931391092A374C99CA12D331B448258E91ED076EFD86D2E1B4F538ECAA7485B2A628E4FCC8FCC7A9209B3E86F1BEAF0D59FB84B896C9AC119C782679A9AA4E31A4CBCF3D2ED38852E9F52294A66E9EE21B5AF96E36B0165074AFED41D3BC7CFCFC53760B53C058AD577148509CD326AB2A48055995605838395DEF63A468A4996CB9E803289731480144EDAB8DFEDF68B8043885F4B127A2AFABA7517F5DC5C1E9F58D29A01325CB9D2C5B50A0C76E963BB1B45C25A598DAC1981F9B69EBABC5428242546DB137EE2DB5BAF7FD3DAD16DA63FC7525AE12AE9F5E56D7589D0890AD4F99FAC211C4220A3617F7DA2E1413E9E42D6AA849527296000249F523EDA39177B816DE2620817B5F6D87AEDD36F5E9F5F9C564BC4A5CC9E8972E5E54A9411C8DCB31B93BB5BD768A0AC504249BB9D003C8721AEB7B697F3B4AE2378BACA4E16060D5E6FE205E1F97C5D5C4D2E49D12E5C4308752E3ED38E2CADB096D2EA079890011EBB1DB6EC93E1D6BBB520A551531A9EEA48A89C10CF2E5384296C58901F4014A6DB961B5989F70AF12C872C0DD9DF9FA30D99BAB7BD65FE66605CD6A348D7B01E2EA6E2CA454184CD4A5464A6A59D71D6964DC3CCB4F3AE34A65614CD9CB1B36147B0893DA37C3C718703D55448A4C2E74CA1909052B4C95A836404FF0020BF3BEA7C8C5761D8CCA56444C55CAB52DB917B91D7D74731DE1C69D6D5A53BE9EA46E2C49DF6BEDF306DF4B4740CC55550CC5D1D6619512A68252A2649003B022FEE741D748CBA54CA75A33029BB9D6ECCDFA1F38982B6B037BEDD7724F6B8F9F4FC36DA31F9FC3B533E77E269CA6585282B2AC94906C6C18B1D01D2C6FCE28E7D4CB27B896A0998B60FA0176D411CECFF002D621A80EE0FB77DF6E9D6E3F6224CEC17137399724D9803339D99B21B73F5B4527FB7D5A9DA7A6F67CEAD07A379F99BDE2A2834517DEE36501BEF6EBED6FEFD768912787B1352ECB90CEFF9C93E43C3D753F588461D58EDDF274D7311EC59C6B7FEF1C05841559BB9BDF6EBB03D40173FB1F5BCC9C32AE8D065CF942A153834BEED256C5B42C1C3BF2720F50D39385AC826A2A07966398736243726E76B17B7235043616A5BED824E95CBDB9F71D43375A015DBFF0031B137368BFE07D97F16712D64A14587CF32D6BD04A510012CC400C59F7E45A389A8934A950494CC22CCEE011B12C5B6D8973D5E2D3F884E327874E18A9351C439AD98B43C39332CCAD68A14BCD4BCFE26A8948BE94B0D3C032E9B5C85BE2C7A98DC6ECDBE0AB89F88534CBACA498CB28395485B25CB9BE560EE4396D4F4894719952BC0A913161D92C8B172427C3A10924747BB0600EB2FC5578EEE7FE78D5E7B037065855DC0586029F9098CCDAEA8B3899C924A94D266E412C36F940986C075005410424807DFD53ECA3E12780B83282817C494F26656499328F712A5A14E72273A67CE56432D41CBF76263A983B391D95C1BD9C631C473E4D40A499F86A9505852905803E2052188539637239011884ADE55627CCAC46EE39CF0C7589332F12CF3EB9B9A98ABCECCBB79875456E3DADE987D4C25B59504B6DA5614005122F68D9552F86B862985070ED3C8A0A7CA10B1492A5CB9931219BBD9A8654D2D62542F6B6D1B7BC3FF000D726AE8E5CEABA50B564492148B68E4B1059DFCFDAFCEA765B620CAEC4725991C3F620A9E0FC754371138CCCCB4ECC06E6C349297DA71E4AD9712812BCC4A921A58584941165189D594DC2BC5F81AB06C5129AC33124269E729254826E4CB2A2AC8B05D4E90E6E1C3BC63BC7DF0EF4D86E0D5551434A13549BA4A10012EC18B0F201CF22CCF1B30786AF8CC612CDB99A5645F146FFF00A0B37A4D0DD2A8F8DAA0E215218B396036CB5A9D530B9771E09E56B701170157F4F393E227E128D6D155E23C3F4F2EAA89944F7414A9D4C4964CB9E908604120254852C2925254C49034D388784719C11444D91310A46A329018594A05B97CDEE446C2CC5498530DBF2B3099B959942572F34D2D2E32F36B00B6E21C41536A0A41B801446FD77BC7927C57D8E633C1F884E5D4D24C4225CC56A850B02CEE46C5CFA728C6282B952A61454E600116367FFE409B1B36FF00B7251720A892493737ED7B5877B7CBD63AAF17AE952EA9326620BA5012C0683335C1B816F58BFCCA89534A55254E32DC82E09DDF6D2F7EA6EE22AA3A83EBD0FBF5EBF2FD628D629A6CBCE900167039DB537EAD73EEC226217616EA7F61D6DF3115929D573ABD80EDFF003B75FCA31B9EB698A06E1C807A06D3AFDBF29F14741F51FBFA44308683EA3F3FF10844C94906E6DD3FC42113C21084211C85280B2881D090211314902E7FE3E7013546D98FADDFDFF5844B1304BCC82B7B8737E407BBDA108950842108421084210844CEEA6650B00B588236EBD3CE202B487D6DBD9BEB11B1B5EC6DEBDA2AE44F916133F3331D0DF980C796C1EFD6CCE391F97EF04EE76B1F5DAFF908AEA8552A69F3C800CEB101AE6E0060C587F7BEE5992AB73E7FD8C415A6C6C6FD41BEC2DDF71D3F0FC22D899956AFE43CEC8FD19BCD8D8C71DD21DD9B7B13FA923E510B8F51F888A84D456CA07C0592D7C9E9EBB6D6DE3932D279DAFEBCFCE29AF7371BD8589F4DFA13DBA8DA2B70DC465CBAF44FAB4FE549482DA723CDBE9CF945DE265A72EE5C87FAFBEA3DBA5332E99A28975A8203CB4A028EC12546C1449E8124DC9B802DB98B84CACA7ACC729274BD04C9602816FE7703EF43A6E62D9569050A2CEC0AAF7E6E7993FBFB6B8FE3F9861DA5D03860CFC914F2A7302E64BF2AECC36921C436F3D4232A85AD23CBE765E524288BDCE9BEF1EEBFC20E30AC47846BF0794A4915582D4CB20FF5CA91FC324877014A36F38C726A4CAAAA6984B34F956D0865073AE86D6076768BC5C3F566B1061AC395C6CA4B53D4E91714A053A4F325DA5059502459449B126C6C403B18D33ED870B9B87F11562CA487AA985C8D4859BB3FCDC3BDE3703846ADE9E952083FC2961B5D83F26D76F3E91CC9A944CDB3354A7825E66A1CD6D52EE00A69682DA91A5772414A90E2EF716B81BF48ADECF71D34588512CAC0089B28E6722CE1DBDBCEECFA45C78CE90D650AC241BA083BD883ABF9BB93B92072C69F862E70D47C3E7C5531EF0DD5698765724F8A244F62AC20C2D65A9394C40E4FB5314B69842CA590A549D4E7B99CB56A4A9B4800DE3DFCF879ED065E3DC1D4346A9A950A695229D41ED69644AB3DDD295393D35B18D08ED2387174EA9930A2CA9AB20B1DDDCE8CEFA39F68DE269CA4CB961C51F887DD9653856157BDDD6929055736584A8920EE4037EE6364914885B4D09DC14DB4704F3B7ADF58E95549EE1DF62C4B75D34BB333F3263F2EDAC52DAAD5367A97382F28FB0E52DA4900FD9CDA085A803FD377957F61ED68D2DE1BC72529424CE2953324BB6A0B5DC6F1F4FDDB26088C638766D226582A54A218873F96ED63A0FAB6D7C8F780AF1315ECADCE9CC6E0CB16CF095A362443989F2B1730E00D375B936DC138D344F45CF2534E690123CC5AB6D611AD1F18DD9AD07137085471152C92B992652E5D41284F814539A52C2EE7F88A252C34C849D418F1E78DF8557C378D54524D42529993264C65020142890B0465F168C361CF511B7E30A6B98B6991A5B421B7D361E5D4F8295A47522C5ABDAF6F30DEF1F3CF8B60A9C3F15AE921232A26CE0DCD8B331FDF7D368C28BA45FF0037E52A1A16D0866D8DACE2FA472E3ADE70126A561980CD6F307EFF00BD8D399A01B82C4B3F3DC7B9108A43724F3262AD3A0F21F484711CC408BDBBEFFD8FEFBC5D70B93473A64C4D5A825390E52EDE2B37C9FDBD9056EDA92A27494A82ACB295004106CB362936E8A16D37BDF688CD1D3CBA942E44CCC10B075BBBB87E7CFAFA5E86B102624A5B6E572E2DD0750FB758F08CF1E1DF277890C2F318233A70661CC5B48764D6CD3276B54E62A157A628A0843B4E9F7A59D71A79A3E669487DB2156B2876DB6EC7FB78C5FB385499B41553E9662100154898B94B29DD2A28209041F107218DC308C46B30BEF94ACC84ABA116E840BE9AB7AEF182FC5DE109C4870E15F9EC77E1F9C45E23C30C3536A9A465BE28C4B88A5A973835070C889364D429330C38B2436DCE29968365285694A6C3D1EE16F8BCECF78DF09A4C378EB0EA7A99B3902554D4535352CAAA2A032256579A599AA2027395AC3924DC9BD96AB02AAA69667C85948D424A890CF7DEDBE9A5C691D42BDE291E247C19CA3EAE31785699AFE1DA3A1A62631CE167E8F2D4F99612BD2B987052DE6DB5A94DF9FEDCA54A27CC01E99AD3FC3C761FDAA8975BC3F8AD1F7F5AA7452564B54AA842A616423F8099D2C92A21215DE6B736722DD478CD7226F71312A0C425D24105ED776370DA73EA63D632FBF88DF841C492927FEB0C2D99B822666396FADC670ED16A1268208D65732AAE2660B6920952D0CAD76048415581EBEE2AFF004FB4CC33D383090082528226A42731B0B10F974DB425D9C81D9541825756D37E2A505158014078BD08201723403736D1E2E8289E38FE1D15A9613151CE96686923516AA741AC4ACFA7627755324274820FA397BF43DCF554CFF4ECE3052880B907312C04C397CC1CB9599F70D111C378843E544C21FF00A0866F30E1EEFF003678F8189BC797C39F0DA1E14FCCFABE274A412DB547A3D6D4F4C100D8736A52F2015A8ED77160F5E8378AFA5FF4E5E3072553694004BBCF4BB6F60E5DB90D03DA1FEDBC427495301B90421434DC06F263D2FA88B37CCAFE23ECA490977464BE4A63DC5B3E9E6B32D3156448CA4AAB9800696843554992EA5C29D4BE736829012003A956ED5E0AF8009787CECFC4359878653A3BC339494310EE51214092C00671ADDAD110E0CE37C726253414D52B4CB2D30A10A624B00EC1F477773ADA31A79C3E2F5E235C44373B87F05352992185275B5A5BA8525C4C8E249069C50FB6A6D4A4D869F959A4A6ED975136D2B438B1AECA20EE1F047601D9C705D3CB33254AA9AA94C4897290990B290CC262CA668D3512DCD835E3BAB82BB05E28C5152D388D2AC216C162621449720E8537E834E5160EE64F56B19E217319675E35C4398F8AA6965E9899C475299ABA9C7566EA2B5CDCCCC1515289B951F58ECBA9C469F089229F04A4934B2539411224A12548486F1AD202961BFA8B7AC6DC70B7C24E195B2E54DAD900AC0492163A826C74BB5C0778F69A652A4A8F21F034AA749C8B6D80DA529421212DA3CA12121160024580E805EDD228F19C729F16A2954F48B4A2AD32C2668496505E8A162E2E2FFD9E36C3867B25C1386A96929D34F2C0A642500E44DF2B00E5B50DAFEA23E824A74B6805B2509B2CA0586A2ABDC8207A9F6B7D231FC3F0A44B42D5884D254EA21D4588D9829AD76366F3678ECB952E8A9E4FE1E4A136013648E46C5BA1F944B30B28B10875C2568404B1FF00B835D90542EA48B2028A942FBA41B5ED68B4CDA3A9C3B11978952ACF712C90405288624D8EBCFA5AC378B256F0DC9C4F3A2A25255256E4829052C5DB5D9AE45B53BC79D63ACB3A2E36489879A96A5D769494BD4EC5524909A9CAAD3F688FB44043BA90A3FD2B3DF7B476FE018A5062B48BA7AC29299C8CB352A62998CC405A0B05234705C1E578D75ED3BB17C3710A69D324D2A02B2A99901C1637058BFCFA18BE9E0D7C5EF3FB8339A91CBAE224D6337324D97D9966313CC2D7395DC272C421A6DD69C9C525750F876836EB74FF008A54886C212A712EA9E6DBD78ED9FE1C301ED0A8EA95824AA79388290A12E90A42533E63951EEE6B650E08CA165202814B8178F37BB46ECA2B306A99D3254921014A399208B681C30D35B6CC5DD846D9DC37F14D91DC4E61A91C5D9458F6958A64AAB28977F97313C86AB2C4C68D6EA26A9332B65C6CB495250A4286E50A08D4DE859F1F3B5CF83FE20E1DC5E729747325302A3E1510C14AFCAA01887043A491B0DC474E48A39F400CA9CE083A17058733F7CE2E72E1D4A14E3EC1532A520B68B4B38DEA2059D96484A1C3E8E0D7A4DF7EF1A85C4BC115BC373A6C99C829C9624853F85DDDC793DE2BE52D88B900BA8825C722126EC34B585CB0DA260957DE69608B1DC1276F96D7FF003181FE0913733EA9725D81B6FF005B1D75DE2B92B2C5AD76E7EC7F589E2D2A195447224470E06A40F58471071CC7B8888569DFE90C856424737F4FB311A08CCC082E36302F03B036F7DFFC6D1592689C87F5BDF42DCC8EADFE2665725C9239683EFDA29DBFF941FA9FEE445E2461AECC90469CC93EC2FEBA7388BD0FCBF788A5DD2746A0AF43D7A807E7B13DFDF6B08ABA8C049906604876BEC5B577F3E9FBC70DBB317BF3E5AFB69FA98AE55E5BFAEDFAFEFF00778C426C85499AA41D125C1E8FCA3800051E7B5B6D1ED6BFA1D6D78A515727FECCCF3FDA22845242108421084210842264A5B49D4A22EAB9DCFE3EA2FDB71D62EFDECA5D32100788000E81ED6B6B7727D378A05CC01445CB7C8FBDFF00BC454F25C525B6D4137493CC5ABECD3637D2A46FA89DFB1F9C4CC3B87AB71099924A02B3285C0755EE03B383E5D625158377568CDF6468035CB696D6386ECF312EBD2EB85942012E4C265A5D894B006E56EBAB6BDF7D26EAFADFB4B05EC7B88AB96855353CF9F30A4144B085CC7E76234677F3D5E384CCCAAB3149D4A945C101C3062036EC4167D5E3A6D433372E29AE2DA9EC6D85A45682A0E89EADCA4A149BD8956970EFF80FEFD9941D8171C2807C1AA48673FF004EA22F73AA5C5DD9B9BBBC4FFC500921C3B0660FD3702DF64DA2AD2B3032DEA8A70D2F1DE0FA93AD275866571049CD2946D700214E8FBDD877B822DD224E27D83F1CCA0A2306A9B7FF00CBA98D9F74DC36AF7F3310FE301003283B82AB0DFA1245998802EFCA3BB3132D3D2EDCCB6C25D9479254152AF4B2AEAB901D0965E3A85ADE7B5F6B102D1D6B8F7639C59434F32B2AA8A653CC47842664A524103A1019AD6D9FCCC514DA9FE384A54543F99CA9EFA312D6E81C3B748A4E7297A9BF2A995254A5AD5B38DA77D60936EA2F7DFA1B5AC0C6094FC3389534D4CF9F2CA44A98330482DE1625C300F7D9FCC931744CB0B959CB91A313725B47B91F3B9F6C43F8DBE004634F0FACD0A9B2C29CA8E0376858FD8094DC84D255517E695B0E896A5182A36D811BED1EB27C0BF15E6C6F0DC1973804D54E450AC1538289E44A5803A8D74E718D622324D0A507CB31240D4062E0924F51CC5B4BBC5B6706B8C1CC75C34656560BC1D150C35212335656AD1FCA1B05415DAE3E36C6D6237262E9F139C3A30DC5672C2322C4D529C3862546DEA1B47B680C6C87065566954C972FDDA45FFF0021EBFB39F211754F10E4D2F9674B610E31A8F4E59D3CBEFDECAB6DF2E91AA987D5AE8BB998925253312435EDB7A68E7E71DC73E9455D2310540A7771AE9BE9A8F94623BC5472BAB6DE13C03C4DE5D19893CC8E1F2BF45AD4B4E4B0703CDD1987019F4A14DF9B4BE5997655DB4B8AD5600C7A89F081DA54E4E292F0F9F356A9332480A979C801496099B95DB3A5D49075651BB1BEB076BFC3D2E4613DF6548577A729CA792ADE4790BD83C6DF9C00F14D8778C1E17F28B3C291C966671461CA23F8869ECA90554DC64AA4A5588696EA5BBA52891A819A61247955CB16001DBD8BE1EAF15D852673A41EE926EAE809D3572373F38D2AC6E47E1E64C04B9398860080970C93C8B339B92CF6DFF3CC74A1252E2C5CA08527FEDB83B12916048B0DEDD8479EF427B99B9D04A540BEA6DF5D5CBC7D4CF12A0D4226257E24B33301ADCBEDA5B4E51E4E9C7B3F905C46E4571154575C95730BE2FA7A2A6F3675FF00E96467652696971B59E596DD4BAB4BA9234BA9484B80816195E3D86FFCB382B18C12B65AAA115149395265A6C573654B2509009482A5288CA096BDD81BF9B7F1358052534E562B26584CF96929CCD6009274008F32C7CC98FD0BB01E2796C6186A838969EE21D90AF51A9B559771B092922725D2B5D943AA0904A517D2937D00152A3E6FFE247023C1FC5F59230E9464CA54F9B9810EC4AD4087DD9883CADBC690E17553EAC4FEFCB9429936DAF71B061C87D23BC46B8574894695352524CF5148274170492CF7D6EE3D348A797326CCABC8FE00A729E40117E9B80D7F7877F6DFFB5BFBC5862FE9D0790FA4211CC2F6FF00807F5833FF00923E9081B1EA010762080524770474208D8822C7BC4485AA5A8292482342E4FF007F9C4250953B8D7CE0424941286C86C5908E5A3969EDE545B4823D401FA4578C4EA8060A6B3756F3D7E712BF0E8FA6DCB6B98A48515AFCC014B7FD040E52C2AE4875AFB8E8DC81CC0AB0000B694DABA8B17AE93365CC973E62148650CAB29B8208D1AFD795B4B452E2694A2880097CE4BBDD85C326DE10D764B0CC49372631CDE2AB838636E05B3F68DCB25B6708542A886D9529A2CBD232CF4D36B972D14A98F3B292E06F485A014AEE98F4DFE0AB8EF16A8E2DC264D755AA6C8935D46AEED6B2A49089A85314A89494822E92188DB68B2D3E078714227AA59EF14E4973AF4BEBE7E9B3690F92942C2F88F2BF0CAAA743A54FBF2489F917E69F909671E53C89A79094B8EA9A2E28805362A55FA5FD63DB7E26AC9D874942E95926714AE602C5BBC425619DD8806CC036CDA47A13F0EBD9DF0D712E140D7D3F7A512D252FABB7555F9171F58EF6F64FE5BBEE735784E91CCFFBD126C21571DEE96C1BC6314B8FE26B490AA89A10FF00973AC0DB676B58FE8FA6CD1EC2F82D2A6386A4BED9525AEE4EAEC7EEE447258CACCBB9316670BD2D6E1B5FE225599817EBE50F216136F4481D368AA5E3D5524029587EA735DB997D86BEEDBD653F623C009244EC3413BFF2FAB020302FA16D04768A7E1CA3D21015234BA549A05AC18A7CA34A5586C41434920A77B11BEE7DE2D555C5D8ACD69614022ECC9161D4EBD403EF768C8A87B2BE1BC309FF008FE1F2D092419F9D01648D99C2B997DAFBEDF6EEE2DA52544A9A705ACE28A936241B106E34D8741D361BC5AD5515F5ABCCA59B93A1203901C5AC4F3371E5AC67987E11826152C2AA6553CB5001C14A12CDB9B0E7E6E22B0425D40D2DA5A2D8B731AB27A6DEA371D7D76EB72045C69E9B160190090A4B1252EC0F521C0D362D7EB136A78AB07A0B53CE9290CD6500C363AD8B0BF568E3B885AD449F3D8DB56B686A1B8BAAEBB927AEFB923DC916691C3B5F4B573AAE522609B3661985DC872492C925B7B16D36E74353C53267CB0A18853A7380E0A815005B76B3DBAFCC4412D2812406507A1054028903EF59AD436B6E546E4FB457555062D557989586203E5034DBAF227945AE9F1DA71349FC7D3B937FE2585F7B07B0F2B4456AD249E610AE9F601C2E74B10924246FB8209B1171731CA28B124485489A85992E02BC3770430059C681D881A748CCA8789284809A8ADA632D8582D37605D9802FC8D9C1BEF13210928166CB57DD4B79160BBF5D6370AF7D5788512E7D25E5A66208B8B9E6F70E7CFADE2A6B310C0ABA4AD099B28BA6C92A0766D013A8736FD8470AAB4E91ADB069F5494949CA7A9B5204BCC30D4D4BA42AF7D2CBC853480492AB0401A94A2003D6EB2789313A41E02F9430CE80A7E56502C458FEBCBA3B8BFB39C0F1E2B2B928999DCD80B8366B5F9FBB5F48F24C2983B32F21F169CC8E1BB32711E5F6276A604E2E952D529E97A3545E6D41602DB69E5213CD484B0A6B93CA08424742445D6A1780718616AA4E29A1A6A99880512A6A64CA97532E5BB8099A94A56A014490852B2392E2EA7D4DE3FF00873A75AE6D56174CB0A095164E629700EC1C68DB3C6693866FE203C5585D54EC0BC67E56D459999528904E6461995905234D92DA2727794FCABF320A815B80B2F3C46C94289B46A876A9F079C11C5F4D5557C3D26554D4CC4A94294A972AA41209621792458DC94CD5007C9A34878DBB3DE34C02AA6A64D3CC4494A8F884A246504B5C2496F41AD9E3620C88E32B86AE2128F2B52CA5CE3C15880969B5BF23395372915D4B8B483C9FE5355664A61C58274EA9769D4956C951DA3CB8ED27E0F78D302ACAA46198655D3C894B5E6065288397F3044C4852140001D964024462141575F489527114294A66D082FCD880435EFA1D3AC5D4B6F29C49702DA71C50BA6525D130E246D7F2CD1684B9D8EDADF03BF4BC6B0E29D927116153549AAC3AA54505963BA50B8F200FD9EAD72A3C464AF309E0A1C929529214C01B020BEBCF9831C31353A546F2732DD8EE952E45640F62D4C2C58F604EB1FD401DA287FE12B4CA515E195598027F21046B637DBCFE515A716C2D0C95642AFF00C5EE39B103C881A5B9C7256EBC96C38B69E209094A12658F9EC482E59D2A4A36372904DF600C5B28784AAEB2B26C895455128A104A0AD0C09716724EC766D3568A9955B44B0F29525DAE4939824EE0333F9D9B5DE2AB575B7775D946DD501F620CD234057F538ECC32DB7A503EF1438AEF6BED7BFE13D9471AE275B2A4D0E1959390A580B58924A5B3072181B5CB3B16D6E62CF8862A64664CB58704B28017F41B72040DA2C1B8B8F10DE1CB847A2CFCE634C614DAA62C9469C94A565BE199D15CC4588EA6A05B9708128B758A7B6B7085A91393724E048292DEA3A237E7B20F83CAEE24952558CD04C92E94AA74D9E9549952923F3CC98B2400948F110E4EA12924B1C697C455A92495800961BBF20C4172FA722768F09F0F1E2BF8B3E2AEB38F333334B29BFE9B6443CA43797F25392D28CE27B296C30CCCADA179E9B4BCA2B7D45F71C682147944B6124C3F111D8F7655D9960F2F0DC0EBD38A6392A91733119F21C524A9C4A8225CA5CC285AD61190A884146ACA26C6E1418BD7CF733192927C0E3C4A7DD5661D1EF71AC65E4582020283A9D2DAD0F0B0252B6D24A1D48B043C95156A45B606F7ED1E5A570CF5F3729397BC521B29B82A2414FF00E395AF6F1022F19552CD5CC0EAFE90E3705CB1D1D88D03B5DD9DE25F5F9FE1B0FF009FAC71393DCA425048CD753EFE11CF7B1FA08A95120A5B737F9422922284211037B8B74BEF11272B10412A2D95B63777B8FD6113DD02F706DFBF7FC3FCC44696A8242CCB504B12F95C16E4403FB7A453A7BD3308259235077EA352D7DC8895C42DA046A0B5A85D0803CC01E97B6DE9D7D62BE80D1CCCA89B294B59B060352586E1EDAF5DECF104EAFA6901E610920905CFE66676BBB79B6BD23A8621C5941C2B47A9D7717D6E9D85A874C47C44D566AF34CCA4AA5948D4B4239CA1A5691B153E8434BD24B0B73CB7D82ECF3B16ACE35AAA6974987D4E59CA4B2B22FC44B00C90E18BEC39078B657D7489D207FB79CF38A400004BE63A952B5B1D0077B93CE300DC6478FA651E50D72A980786BC28E679634483292F5261130DE1E909F410D170CD3E584BC12BD4A216DA987083C9538DE951F53FB16F80744C954D88639293494682954D9935330A859CCB084A55333382012909041721DA20E1FE14E35C62A9225C89932529418250D6240D580B0D595CCB4613333B8F4F127E25669C7316E6B4D65AD027895270FE0F5CBE1F5CA4A2C85B52C87A8ADCA09B5B634256B79D52884A964EA11BA3807629D937074E44B9783AA6D6C82512E7CE2522614B8CC519C801C022C1F70ED1B5FC31D82565751A2657D1CC33549495008218B5C936737DDECFCA2D7EBF96998B5E74BD8AB3E73527DD9A56B9A2E627ADCD6B5A8DD4415D455A413D00B0B5B6EA63B329E470B5304A65E1985B200033E1F46B36B788AA512A2DB97BDF611D9141F0C941387F128A71275BCC07AFF330F31FBC51A3E5963CA1BC66B09E7DE6761D9B4D8279D886B8CA1DE58013654BCEB8A015606E6C77E978E67D3F09D524A2A708C2A624F2C3E925A83FFE4896147A0760C06822756FC30D04A4954BA49E0B59D4B51B6AC3391E5BFB5AEC72AB8F6F108E1867242770F661CD66D61B90790EBD43C43308ACBF3ED36425D9044CD792B99964A9948502CB8DA12B74AD2AD6551D65C43D8CF66DC6B30D2D5E152E5AA6864CD401DDCB725F32259761D10A2DF96E008E98E32EC427E0F37FE969673A525403172C0E9B35B9EC7CE3609E073C6C724389E9C6B2FF0037A4939319A336B44A3F46AD3825E9534F25294BA86AA6971D4B4ECD15290C043881AC84829EB1A1BF11BF07ABC130DA8ACE0DC355329B2A97DF5382B0A1AE6C87F8C848DCAD09667360F1AF38E609C51854E5A132972E5A4964AD07406CE4A48BFF00E24DC4646F8C5C0CDE6D70AD9DF81995333CE632CA8AF48D2D128A13087DA9DA7CEB4D2E59D41521E52814941D45C49B900289BF407C38E078C766DC57455189CA99227C8AE92A945492005266022CA0016BEA1BA3458654F417189ABC62C46977F47D6C7F578D7EBC24B13BB5DE19061C7DD52E6F01E35C41409C2AB24CBC8389916E5D9527B2B5CABDF6A46BBDFCC488DBFF008C0C30149AD4A58D44897509527465A1C11CEEF63A5F9BC77676778822A3BA4E77CAC94E8580E7A9240D1BADF9E542725C30A2DDEE0A10A041EA945CA0DF637F31D47FAB6BDED1E78E032D3579D154490851DD8D8B7401835B57BC6C19A99D2E4812CBA5AEE1C37933EBB80F1D4B1DE1CA6E3AC178A309D765A5E6A9588E8B3949A834EB28D2A6A699536DAF64DD2A6E60B2E85A46B1A763B98EF8EC578CEB385F8DA422967897241406597719D162E08B8D459B71A18C1F8C706958E61332555CBCC120A835988046BABDDD83D86F16EFFC3B59E551C84CFBE203C39F30AAAEBB3183E66A989B2DA66716196EB126D56D997986A442B4AE61F986AA089AE72921D2DB2E0D7652C1FA0CEC7B8A24F1170DD3552BBA4AAA643AA5214E94CD48026109FE54A9449969B009D0001C79DFDA260F3A83129B264A5425A1647E50E41360E46A1AF7D6F7D63010E8494D94350B7E207FCFA7B46A3D3338B3B93AED6FDA3EA131A9399040E40F2DF7D35DFDC74F09E22A942A19515C7255239D4E4AE79214095361B46A529045F495684D8FAA77204766F0DCC9444992B3FF00AC951E81C66B5C976B82588D846907C48E062A302AB9D949694BD47306CDEE435EE7A36EFDE1738F9798BC0770F18B1F75D999C7703D3E9B5171C525C7153B201416A2A493B143C80012163492A16B13E15FC73F094BC338BF14CA8044AA898CA218975A94E6CEF7FA72BF993409EE265420021E62CF3BA5C01B9E6DA0DB78C81056A492011B13BD8FF7F4F68F38AB96F4E10FF954DE400B020F91BD8F58868521557354412A48370F7399886F3F7789C1B807D45E2C517B8421084210842108E287036A374A8951005BF01DFE7DBFC45752804DF64EBCAD14389826953BB28017BB9572F2368F15E22B07378FF24336308BCD87515DC0589E450C9495175F7E8F3ADCBA52122FBBAA4F4B1DEC37B46E47C28F10FF00B6F19D123BC293F8991BB1BA92799661F65A24A7F874B2D4C6C92EED6E8D6D7D9C8B1DBF3DDC85BD1D7989825F4AD28C378CAA52ACA15605B5FF003279A08B13A868280A5277D88DAE63E89B139A6BF0CA2A8242C4EA2A69E14096FF00B084B83B8F06FBEF78DFEF855C6325225015B04949209D49B02FAB8DB7B9B08B842AD2AD2411DB576FF36FA461A85642400CC6D7DC59EDEBCF40EF1E8561EA456119C0620172074BB5EDB5C0F4110710DA6CAE6581DCA82566D737B00137236FE906E76EA2262A4CC9C52C09CDA79E8C4681833E97D4DC4565650D2210A5AA64B41F3034D7CBE47503A70AB13D214F91339549D669F4F646A5CF4C2CA1A401651BB2019859B58F91A55BBDAF68AFC3F86EA2AD655DDAD85BF2FCEEC2D71AFE91D6FC43DA2E11C1326677D512734F4AB2A4AC12E06CFC9EEDA45AD63FE2DF06E1B77E070A73F12CCCB9500F30C96A4798905239899C4B0EA91F7BEEA54490362378EC7C0F82D6ACB9E50008B022E4BF20EC741761EB1A55DA77C4BA65CD988A2A8252EB6C8A0CC0D9C86E970FB08B4AC43C56E62D75E996E4A7114A61C52CB4C4AB2EB6EA413B0D6A64377E83659DC8ED1DAD85F034AC89CF28330CC598BB166D0F3F3F58D63AAF88FC66A26ACA674E20122CAD3AEB702CC06BCA3A02B3CF345360713D4AE46E04ECB0B1F4DDC0458ED620456AF81640516942C4B02069E46EFB69186D47C4971A99F311295546585B26CAB279D9FD2FA73D23992B9F39A88F3338B670006EA0E3F20E1B8ED65294AE9FF68B03EE6203C0D20FFE881C88047B38617F4B74823E22B8E124280ACE764286A3958728EC725C4B66ACAB8D97312A9D4A41F23B249285AAC426EF372DA6E5440075D89B24122385F004A9A8EEFB91C8300EFC8F97D22E523E26B8CE9D48FC42AAD32DF749B6BFCDF527AEC5A3BBD378BFCD094F254E5E953AC9FB88703697562C371E54F5B9B5EDB7A6F165ACECC920102597035CA37D1B53C8B3467D807C55E2895A44F9D358104B953DDB571A83CBD7AFAFE1AE34692F34A96AFE1C9E69E4E90E3924A91424036D452B79F426C2CA360AD561B0DA311ADECD569CCC87B924005EC3AFBF2F9C77B605F143267213DF4EBB004A9406A3CC5FA6DABC5C6613CE6CB5C5CD3029189528A94D00D2642A41C69F97709EA0BE84C8AD1E616710B55C8201200B61B8870157D35485CB42932C241206603ABEDA6874FAC76F603DBFE01894B126A66492A51BE628D4EBA9FD36DCC7A55428B42AE492A52B14B91AE32A41E6CD4D7C3BC1095742C2A5D4A652B1D504E9712ADD1624C5CE969E5E1A902A90429296CCECA1EA082C5AEE59B980F19BD4613C1FC6F48569148A5CE4900B21C9201B0B7F516FD23C1E77217F97D43FD419638D311E01AECBACAA566E8956AA5203642B50D53928F3334024D88D0E103D2FBC713712E1DA9229AAA453CF44C390A6A254A9E03900B77C159736F9407B3EC0F41716FC31D26253A64DA1928CAF9FF86185DC8BA40701AFEE06A0DD365871B7E253C3DCAB149C279E752CC0A0CBA92A3298994D57A7E6128160DAA7310CB3EE5940149D33009BF7B4605C6DD82765F8CA26547FB651C99B56D373D390C82A724E42ACA181B0096E4356E88E24F873C4F0F4A932A4AFC2EDE156C6D7624B73B836BBC5DCD17C7978EDC38D3E9C4991D83EAEE4AB52ED29F0DB6C4C4D17028257CAA7B8D498594A16B51165100EBDEC23AA47C1F767D5B97F09916A98095AA62129968B064B0014E6E2C0DF68EA1C57B12C6E925CC9EB92B4A520ECB7B6B76B681CB87F38F50CA1F1ACF102E22710D7304E4BF0D186313E24A52968A8B72532DB4696D25E0C1995BB509E9794490FADB404B8E5BCF7B5818C5F1BF83EECD387D02BB13AB9186CA01C4E01241524BE520824D81B80D6F28E92C5A86BB03A85CBB950514949517E5CEF6BFAB6A045CE4C64EF8E0714EDA6999818D70CF0E18426D2029C94AA619555C4A3A2CB434FE115546A087792A572D4E2D2B0E006E1636C3E67167615D932552E5A2562D53252596A120495286A52C5135C1E801DEC62810AACAA63303025D83A94DD366B86D7F58BA2E1A3C15322F2A31149665674D7AB39FB9AD2EF226DCAEE339D9EACD20CDA55A8BC69D54714C4D2C1174B93926E39AACBB858046B4F6C3F1A61786CFC2B8366270AA6CCA6451CB95256A252A19664D9404D988BDD2B5949DDC08AE97869CD9D4824B7F33D8F406C2F7B01A6D199AA7D2A9549625252914C93A3CAC9A10897629AD89797974B32FC865B62510132A9692129FB3E584A06CD8012911E6871AF6B78DF15CC9E712A9993A6CCCF98B9B872C9B3000DBD185ECD9251519094B8B387491AECEE390D1BA748E5A414048164950529F02C12E3EA75479C06C428B452952459208F28B111D554C65AD7DEA92E58F8945D4D7B33A80009241673B9D4C64B265F760B905D826C1C240162753773E4DBBC5403ADED7ED6EFF3F7DBF48A4AE5E69C024B8018EC06A74DCDF5F7D6DCA9473B316041B9D9B6BEE47F6845244E898A4817DADB7E708842812D77BFCA29856AB80924FADC6DEF6EE7DBA6DBFBC490A0A0A0E42487001BFAEDFABC4A99332CC422E01373CF4B37BFE912252A5072EA03CBE50A36DC7624D80E9D49F9464F33134D552CAA1A7965535404B0C87249605CB6A3FC447553532649502C403770FD3CCFBD85FADBF7127C4B654F0AF96B89B35336312CAD06994D90755489379D49A857E6C254A4CA5325FCCB2F2C20E92F25B6F71E71D236CBE1F3E19718ED0EB29264CA49A65CC992C84996B01944396093A072543401DD8DB045D1D763152A45385AF32AD95CB8277D1F6E67EB1A46715FC7B7119E2338D2A4D3759C41963904CBEE4BD170CB2FAA9F3F5DA136BD34D7EAE698A2CCE3EF4A250E388987DC690E2945A02C0C7BC3D9BF615C1DD92E0B425345435D8C53489495CE500B97296103BC0944CFCF3133129F1E5524B1214418D98ECB7B03C5F169B455357226A64CD285F8926F998B9B75E86FA08F30C138170F6069644A61FA4CA32CF2D0D4CCC4E4BB5393D36B4A4054C99F984BD361CBDF4279E10D83A50024003B465F6A66850BA214E90951214A125001528DD49CA9600BECD7BB47A7FD9BF60F8461541226D4524AEF132D1F990926C90FA8279B1B6BEFDEAFA6ED052DF964DD4C87EC879A5ABEF6971AF369DD400D7D2C0F78C7314ACA2C625AEB10B4A6A49CC10157B9B8606FA97DF6B1B4771FFC7308C39A5A244B01366084B5B4B003E4E6C4BBDA29A523FAB58B74D2F3CAB7FF00DD67FE778C58C99EDF99577DC8B3B6DA74700758BAD2C9C2E580F2A5863A6506CFE4F7366DEC62294A5BBE90A59249D4F28BC45C1E8970AD2074B0000DA0254FE6BD0EEA3A07E77B44CA99585CC040948B8762801FDC7D3A7945441085978A96EBC41400A4A1965A411F79B431A0176E4F9D49B90120A88168BA51624AC2489D349241D49B84EB772FFE1CEF187627C0585710AFBC54997E1052F952ECE5EE436A6FCAD1E5798595987B1B044FB3CCC3D8865D6DAA42B74A5B92532CCD257A9A9D7E6A554DCC9725DCB38820A8123CFE58EC6C1B8A308C7252A96A65C9529485CB5A66CB44C44C42865295CB582852540905D26CF1AEFDA8761D86AA8A7CD974C824214414A0588720BB3D8EFCEC1CC665FC2AFC52F12A2B14CE0A78A3AA99533ADAA9597D9A15971A2E3CC280966E4A7675E2661ED4AE5F2D242C7995722FBF41768BD8161D886232318C0E9E5CA49A997326CA96923BA566CCE3F94A14FE101D4194140067F27FB5AE07C4706AF9C99125484216A2E80C960A3AECE06AC1CBF5BF4CF0CC9B4E08CEDE3532550A5372D4ACC0959FA3CAEB4DDC944CC56D4FCEB090A3F62FA56C94A810494EE00B475F7C4F70AA95C2F8695054C5CAC365D3AD4A0A242E424BA0950CC549CC3310E18863CA6F64F5733F1224920A92B620FE67703FF8EC6E2FEB78CCBB8E2DE4214B275140B057DE40DB4A15FF00926D6245C7707B4793735030AAD9F2C9CAEB5063ADC97B0B58EF61BBC6E24896154E92AB9CAEE06CDCDAEF72F7F91891482A69C4041755A524363A2CA549D940F54804A88FFC45B788B0EC597418B53D64B24293312E46ACE2E79E9F51ADA2555CA973A9D72AC4A9243303B6DF472E7A68230CFC7326B5C27F169C38F1EF800BD2030D63790C298F154B4ADB6E6A8D3AD3B27353152242187582863984BCA279BCB576247B45F089DA9A6BA8E4E1132A539FBB44C9685286799312529EED2F7FC8A5AC8B2591CDA3503B56E110F36A932588529CE5D2CE0E83911B104E8EE4E3C9C20A7637363E87B7B77F9464B4E3C5761E271F41ADC0F6D9E3E8371212D48CC1419B5777D43D8ED7FAD8C797E6EA3565B62F4A6C14BA1D4398576094A112EB29DD5B0372AF73D3D6D92603513D78B2244A42A624655A9280A2C01B9B07E7A6BAECD1AB7DBE53495F09562BC2491300F3CA34776E4C7CC5E36D2F0299C72A1E1C9938B5AC96D8AC629A7F989B16E4A5A80B60A49B5D054FBA1253749B2AC4DA3CA8FF00504453A38A31594A5244F5CE52BBB2597F97FA75F96DE71E422D915D572D2E0254B214C59CA94000742435C0B8717D23314E0425A3A4A6FB0DAC7A03B7FCFEB1E47D7CA32D0A4CC4A90EA240208E5B9D7D35FA718581DE4D2EE49D5B6720FCDB76D209FBA3F7DE2C11733A9034BFC8DA26842108421084211414D8D48F4D5D7D3F771EB1574B62B3A3A0805AC4DF7D39450D72553652512C673DE02000ECD73A740D731338D30EF31A7501E69681CD6F4EB4AD03771040BDD2B4DD36EFD3DA3BC3B0AAD9D86719D0CF9CA32A4FE2A493356E940016904B9606C0B9F5B452D613268529596514A86570EE5ADAF5DB73A388FCF2B3BF2F26F21F8FFE26B29E642D99238D26AB94C4389E525E96A9C8CAD55B725F504971A4BD30E36168D48D6DAD37D48508FA61E06C464F127675C375D453D35AB4617F859F325284C79B255326292ACA480B12E62014D884907420C6E17C2C57C9955D2E966CE4CA33662322545B56167D5CF983A58BC76A0E25F1A0900D8DD4748001EE49B7B7E178A04CB9899C5131241CCC0301ABBF2DAFF663D2EAAC630DC12994B99592652908D54B0901D2EC6FBF9318F10CD6CF5C2B95AC1949A9A6E7B1025B53723232AA1349D400B7C5219E614A82880438526DB91BC763F0E70DD5D700B452AE625B3254104DB90700374E86DAB6A776AFDBFD26088A8452627254B405B251303D9D9803AF2EA7DF1A398B9C98E332AA2E0A94F4E352BADC12D4FA74D225DB6D2EA87D9B92E95A4BCB5D93A1252A234A86C5568EF6E13E0F404CC13A53109BE64B1CDC85BEB71BBC79DBDA176DF8E71956CB934F327CC44852C128528BE62395FF0097968FCAD709C37F0139F3C46AA5A76998666F0CE1C69E417310E26939BA6CA2985DC739A4B8961FA80360409343EB370AB69D463B129F87A453B6596905C1609BEE753A00D6D3E66313C3300C6388D693512E7AC2F52A0A6BDCBF9EFA6B199ECA7F066C96C3F2F273D9A75FC538D6A8A4A0BF49A7CC49D3A85AEC35203CCB327544B60EC0AA642ADD49317D914A89432A52C036A007F205CD887FB11DAB83F62FDEA52B9B24826E428286ACEDCFF47BEF17668F0D2E0DE5E5DB97193D4C5686D0D0E6566BCEB8342401CC70D5D456BDBCEB2A5151B924EE638553B92420B126ED673736D3D3A467345D92612854B97369505401CC480059C392E01E5A75EB1F2E6BC2D78339F4153B95B2B2CA37015275DAE36B4DEFBE9356FBC36DCA7BF4BC71DC16CB90B7908C8D3D94E00101E9E4861CC6BA3B0E77B3B6A2C18479F55FC21383E9F43A24E8F8BA94FAC82DB92588669C6DA37049089F9D7A5943A821C6D440DD365011C042A4B14CB512F6B3EAFD1BAB5BE516AADEC7305AF49A64C9952CAF45D8007567760CDBB9DB78F01C69E08B94B502A770666B627A24FA8DD96AA6C53A7986C760A70539F6F6DAF757B7B0856B5AC5E41EA72F46D00F96F6BEE7AE71BEC2A55085AA9594521BC04923AD89776F41CF58B32CCBF06DCFDC332CECC60EAED0330649AE6A954C2EC9D2669686CA885075D553CA96B4A41294AFA9D29481B4502E94ADC9907723C3BB3E8CFD0B6FF2EB1AAE05C630D98B4C99352A009CB942890D70EE2CE77EB7B698CCCC3C9CCDFC9CABAA471DE0AC5584E6651C28957D74CA84BD33E192AB216D56C32649D1CD0E6FF18B36B1E8413455382A27C9528D382A20B0CAE599998DC5F90373B45BC2F1EC1E7A4FFD44B5D94124281B68EEC3C87EAC0F66CB4E2331BE067FE0A767175AA529D46B94997C3E6D7B25499852C92E27728643A54B36484AA3A7789783E7CF337BB9331249533A54524B59367676BAAC39C772F0476DB8A70FCF932AAEA264A40287EF14C19D8FE7B10DB5EFE91928CB7CE3C1B99D2ECB1213EC8A9A5B1F1143985A24A602AC2FA5B74B0F2D37B8BA49F99237EADACECF27A533679514AA5A4AC02E0E64DF6E6D601FF58DFF00ECD3B6EC231B954D2A75753AD533225454B41605B57B8FD39EB1EA09429E2B4869C25B27981B59496FA8BA885274DAC77558758EA6A8AFC5A9EA552EA67AE54A9530A1E63846549D8AAD71E91B335585E13C432E54CA29726A814254A32C256012C751AB83701CFD23AEE26AAA28744AA5414E252DD2E51CAC3A87969742912EDA98014E12A0752A69361AFCBA76B6F1D8B8157D64EA1CF433BF10C2EA96CB6722E40B59DEC34D43474CF6ADC3D82E0B80D62EA132244E1296425602540E55598DEFE568CEEFF0E5E4C2A4727B367887AC34A1399998B0D3A90FB92CC95990957E7DD9A32C669A3CC964BCD4B8756C6AD2E1681502A00E857C7776A58B70FE072F07C2B1614B574EB909A81DEA4295304A589AE012CEBB91B1B168F16F8AA7AF14E2EAD909967F0C85CD29580027F3B000F95CEBA0631B28AC9B04852260FF00DCDA10D293BF7E72529DBFF0B937D85EC078918EF68F8EE2555306235951521DCAF32C82B7D3C3CEFA5B6D35B850E172D0332C2410400540A8162C1B2927D3C9EDA4028136B11E97FDEDEDEB187D6628BAF9658AE5ACBBE75A89BDDEE4ECDE9EF174551CA67006FB973EEC469AC4D165974E0A9E6AC6BBA85EFA92E75EBE4F09729282592401F3BFB11E43DDE2900A2A1D45CF522DB7D6E361F3FC6209EA32D652953A406195EF6D8D81E8396A22A89194017E67D496E7AF97CE2A902E45EE36FD07A7BC49432828ACB1670E6E4BEEF7761C8BF2668A59A14569CA0B39CC46E001EFFDAE358404B5ABF2A4ABC81FD408A88A848D16BEF61B77ED1C042C9CB94E6E5BF4F7E5FB44AD167D4F2DBFB811C7407374A6C0ACA50906D75ACDF4A137EA5563602E4F6117BA2A450A6A8336594929F095037716F37B30F360E628EB0A84C94B03C28512B3D010E4B359B998F24CE9CD8C2B91196D8BB36B302A3274EC2782E9EFCFD4D7393ACC921F75A6DC5B34F6DD79C6C2A7664A4966552AE7B896DD2DA0842C8D99F86EEC5311ED0789A8C7FB65454D389D2C664CA5A900155CD937B073AEFE716AC52AD754052D203366AADDDCBFCEFA3B00F6D0EBADEEE63447E2BF8A0CCAF120CE5AA663632A9D4E87925862AF312383303A1130CD3AA6D25E52589C12E127E2872591776EB4FDA7DEB2A3E893B30ECDB02EC9B86E96548A6A64E24BA694B9B352077B2BF8779284BB254491DE2C8CC0A404900A9F68BE1EBB29C471CAA913F12C2E7A6515A559A6C92124020B9253A17B03625CB6E38F232125232AD536565DA9495966D0CB2997683494B4D00940012058040000B6DB7A4438862757595B3D6A5A84A5AD65291A24124E56602DCFCC728F5DF87381706C0F09A212A5494CC95252E909402E129D99B51ADDDFDF9FE40021054423CB75022FDEFB817EDBEE3E5145328E96A85C34C21B36971ABDF7D747BF998C90623364B499682258B066667173A7D058DB66450A30A5522CCF44E0509D519EE43EC1C9BF5DACDA472AA7156EB54C097D89E5EF7E9EBCA1159F8B2FF94B7917FF00FB629CD025258AD2DD08B9F66FBE508E3F16A7FCA5BCBFFF009FD3D638142925B3A4827A3E96DB6FA69AB422867A7F1B384A59C8950D4F8400347D2FD791E8C4264EA09C9972939D0A05CA466B93D1C69D039D440A0B88711E5D0A6D61DD4403C9D2799A3704B9A6FA129BA8AB648262BA46132F0B29A8A7AA429563952BB9B9E449275BC48C6A4FFB9514C9532513990A0CA4DBC42F66BEBA6FCA3C6F38701BD89284FD5F0E2DC90C5D86529C4B842B92CA53151977E4C29C326148B39CC5AE5DB2869492B55F61BC76870DF119504CBAA49521442559C020A5EE6E3F35EDB837B6B1A51DA9F6492315A7C46A3F0256B12272832092EC4836DC723A9B35A3DB7C2433BB11E29E31F185471838E0C4B8EB0AD569F3C1D05B53935465CB204D388504DD4AF8E2398A1BF63D63AE7E22F0BFC770AAE74A42574F213326E6431093529B249D8A7BA720B9BE9A13E6EF05E1D3301E24AC93894A3421357312813C6474A5458F89AC5CF2008F28DA854A2B529450A4124EA0A4A9373D3500AFE93D88D8F68F0B78E259463753DC8252998B0549BFF35DC00D650F4B46D9CB9B2E6D0A2648509882900290414D803B166D7DDEF13CBB8A6DF6D482906E41B916B14906F7DBA9118FD0E498334C504A8390542E48F6D6CDE7168975673E558290A39731B82492EC58D8D85ADADC18F00E287282899DD91198196D549444DCACFD0A61726AD05C996EB72E9130C4C4B5AEE151710B48522E4EBB026F63B5BF0E3C7B3B87B8AB0FCD5429822A258495AC049739487D829248E80FAC629C7F831ADC1E7CC44A2B2A4288616279B8F773BC6BA31E9D800681BCAD1EC44C91FF00464907401EE4585F4BF31CBD84792678CFA2999638B661C017CEA4CD4B21B3DD4E32E276B6F72542DD2334E026918E2A7A9208553A920A998A8BD9CEE5FCBE66351BE216BD349C3B5925445D332CE6CE9D9CEBA9B6B1B82782C61898C29E1D19032B30D299357A6CF6206D0A494DD350448B7700F507E17A81D6F1E2EFC7EE289AFED57144CB5E74A56A49F1020F88D9816F5FA5A3CA1967F115152B0011DE2D4E43D892EC762DA1E57DE32BC36474FF00B761F231E697134C1327CB4A5AC038075CBB9676B37AB9F2978620A274D17BBEBB37D9D39738E427A0F90FD23128B9C46108421084210845258B91F21FA9B456CC4997229D406555CEBAEA7DCB7BB44129250B528BB7EADB3DB604B31E7BBF0661C719E6724FDA5D84F426E92E8E674EC13ABADADED736CFF8671C12574A33E556648052C08B84B82CFC88E7B9B03160C7164E4CA49637B697258F2FAF5B5F4E5F1DECA87B2BF8CFCA2CF89060314ACD192A661FAECFB80265DAA926A53326E17DD3A509D12AFCB295AD42C83726C447D10FC09E3A317E06FF006498BEF589AA92952B31EF274A44B9AC4920782520816172EF1D9DD96F17CBE1EC5F0FAB5CDEEC4A5CB330E6CAC12B0A0F71E8E3D0C613B3BF897A661C969DC35835499EA93C971B9BA8344B89975105254CB893A094EE76BF4F7BC6ED55767AA9D5826E42139AE02497166660CE5CB38201BEE23BF7B41EDDA5E214CB952EA9C2A594B2661727281B17B33F9EFA08B10C278571CE77E3C91A0D025EB38CF11D65F4896A2CACBBEE3DCE797A7F983F38D34392C24900A16EA1002493B5E3BD7847034E1F4A842A4A50128B3A41623405C13763E47A346A462ABA9E2DAC9995732685A8FF003A943C5C8BB6D7EA0F48D8FF00836F0A0C2D964AA5E37CF26E5F1A6345A6566D187925B552E8E1214B5313C862C875C529490398E1559A50DB7BE634F2932D730A400E6F66D5F6B75BB74D1A328E19ECC27D22CCD99289EF082E52ECF7704DB77B78AE7A36686429F4BA34B0A7D269F4FA65365DA0894A5D31A4B52B2413609B252A55C84F97751DBB455C6C570B6009C3E5A54A94900009FC818BB390E19AC18ECC7998ADCE1EDF818476326A5126584A5297018D8338DF4D39F3B79C4A5A2AF30EFBF6EFBEDD2D6F78AE487487BB80403B79756D75DFCE382A0BF1B839AF60DAFA34020A363D4FEFDE3961C87B08E2260402094858EE93D0FE9D3AFD20C390F611CA4949046D13F31BDBFF004E8FCBEBFD5F85EF6830E43D847135A6865006CD700FD45FD629FC858761E9EDF48651C87B08B54EC165CF2559125F7291F2B6FE7F48E9B8DF01E0FC7D449AA3E33C2F47C494C7DA5B45AA8D3D1373002C14AD32AE29256858041484EE146F6DE28EA27F74A0819763700EF66007D6E446238A767527149E26AA5A49660C1AF7D2D6F6D6FE5838E2C7C20256AD2F55C6FC38BF372134969D9EA8E05A9B6D3466DB405B930AA6179965D43CDA3FFC74B4E951510129518B7554B15082084E8760E4373B7F88E89ED07B2B9D225AE6C896A0CE5D014347D0A6DADB4D630253F4EC759478A1E939FA55730BE26A1CC2982ECE33312AB94536E589982F213F1282A49D37D62C0DBDF03C5307EF73A4A432810C007B91B6E3A36A4F3B75D70CE318970955A10A5CF025AD3AA9603037BB8B59FCA322390DC4253B1F3030F6259A149C4520121D7B572935255826C0AFCABBA813E53FD5B4744F1C766C9ACA69825A594A51629706EE5AC7A06BF998F473B12F886A5A4912A5D45427326584A84C98F719458294480DD06D61B77BCF29AAA4FD128D81A94102B78F6B323469096974EB9A7A49F7343A8084EA5282CAD876C13BE8BDFADB09C030FF00F8461758BA8392549A79D3A62964654CB407CC4AF62ACA39B961165F880ED569B89A9A7269AA1CAD246542F5716663A5C5C3E91BDEF01591F25C3AF09F93994922D3685E1EC17457EB5E4D0F8C4537212CBAC29CD81BBD3A5D5AEE012A17EDBFCFFF00C66F685378BB8E31239C844CA99F34A10A3DDA4AA66664BA8B84DC3B9B3C79F8A923F1932733B95788B392E2EFBBB5FF004DAEEE5D5CD5A937DD249F6D8F4FD3F3DFBC68B4C524B82012E0BB8BB5C3FAEE4EA22B51A06245EEDCFF00C369BC72748BDFBC51AD7CB5D2C2C1BEDBE5AB4554462917F98FDED08443087484224045CF626C6C4F7B9BFE3B7BC5C697C0852B98EBB6CCF6EBA7E908A9636BF6BDBEB14E89E4542576FCC2C40259D83EBE5CBEB121572AF33CF57F7D629ACCAA4176694B436C254F9712A290D06C02A789B5B53771A6FD8AB63BDBB4B87B0B9FC478A61985C996A5FE2262107225CF88A6E7280F627A1BBBEB16FA9A8C88327C39A73A58B9373CDEC093E679BEBA6778DA71935EE26F3E91C1F656565F94CBFCB99875799D334E7F5D3311E2075E6D971130EA35B4EA29E996994B21B50004E39F7AFB7D047C24764323B38E0DA6E20AFA74FE2ABC20512548095CA12D20CCA898E0121D6912F44ABC565338ECDECA3B3BA9C631BA7A8EE14B97DE254A514E677513941219AC5EC768B0FA451E9944A53147A4B09669F4A9666564194EC1C742425D7937EA3C89248DBCD73B18D96E28AF4CE6A94ABC201243DAFB30B103DF9878F60FB32E194E0D85D3A0C844B5265201025A42AC058B241DBD01F37FA4949425282A2A29012544DCA881626FDEFD630B9733BE4899665DC375BFEB1DB19945C1240BB072CDD06DE513446E468488E21073A3DB941CE8F6E508E18721ED08418721EC2108A69A82EEC6EFA79DB4BBF3FDA2A242920B167770ED7E63CE207FB8FD444996179D8AB30D85C903DF76D3EAD15134A5495048B80790DBED8E9A8E713B96D02FFF00691F881195E1D332041258020B39058EADEDF58C2F1BA74CEA7AA494A4854A58BA5ECA4B3D83962368F21E174AF2A7C4332AA6F4A69F46C5B306940A7CA959AA4DCB09AF9ECDB5A80DF707D0C5E3B4447FB876638A84273A9292A700139532D6EE7903FA8DA3C8DEDD785E652713AE6A11DDE69E48284E424A967FA5AF6F96D1B8207D2B1A52A2A09011A95D490077DAFD47D0F7EB1E0FF17C8553E25896701FBF9ECE1ED9B6E619F4319B70B4BEEB87658513648D6E7F28D497D87AFAC12DEE55D0107D3AF7EFB7F68EB2739105CD94D6E56DB97EADEB45312B989003F86606661B9D180FB0F0B15794004AB600F424EC01F63D0FB476070ECC34757435E145065CC96B24129200BBBEEED737370CD17DC5D299B82CC944329528B0604BE536F1737F23CA3558DB9BA7FA74DEDF4F5FF78F6EA3D51C5670A6A13A0F0F36D05EE7993E71E01C43BCA9EC2F43C2120853957C5D8858A54AA1B1A9C710552E85A023CC08587C0E9717B8B11197607365D0D2D462534E59349227D44D568909929CE5C8167BEF7DAE63CE4F8A1E2029A1A992951F1A5490DA02410EDD19FCB6E7BFAF09596FFF0049786DC94CBC5321B4E14CBDA153D0D22E94B2EB8D38F4C24024A8956B413AC9370371BC7CFCFC4EF10CCE21ED1B159CB9BDEAD5327A8ACDDDA62D8F8586846DA7520C79E782AFBE4D42C6866285AEEFADDCE8C0F41D22E554004F96D627E63FE2F1A5D3CAAA7139A955DA5A8005F549D58EFD34B45753CBEEEA66302C413A36E6D1507416F48B12832943400903C9ED1510886108421084210FD221A4137F4B6FBEDDC03F3FEF15336685CB932C5D49DADEDF3F939D624D44DEEA59274B96EBF5E46C768A4BE436A4ADC4254A51290557BA428596E26CA02EDA2EBDC11B6E22E32E44FA697267074DC29C07D0BD987CFD48778B70A5358952F6059CEE4E9D1C9200D7908C16F8FE70F5FF0058B826C498D68D21373B5AC9EAA0C5ED2D085DC61F9144ACED6A78B8CA50EA25DB9494779AE21C4F2D2D29695A092A8F68BFD3D3B4D4D2E2585E12A58986A952E8D28528D9738F7692CE0BA49D1F958DA30BC6E7D46164896548502E0076617F7FD3CC46899905C3E66371199852380F2F69B393EE226597AAD599F65D5495224DE5D966AB3366D0DA025B5960A9D68909515297DBE85786174989CA96B5842959520B0058B3173AB92E0E9E71C6054B8BE3F39092A9AA0A206E581DC83672F6B0763D5F6D2E13782ACABE1730D372349A3A2AB981392ACA6B589E725C2E69539A0F396CBDCB09650547CA997D0916040B98CB272654821080371BEA3A3EFCC1F902636BFB3DECFA6538953AA25160CA254921DB5D5F7DDFD8C5E6B6DF2584C828A55C824AD68528ADC5396075B9ACAD76D161756D7D80B9110AA5E54A56C40568E3D75B7DB98D87385D14893292132D052003F945DBAFDBEF154129472C5823A580173F355B51FA9882385264212532F282030D353E807DB449A53E9F9910FBFBF68A1988528009F6F6EBFA1FDA7B9F53F8C5722E94EF6F99BC554B494A1293A800442E4F53788A238100EC6108974A7ADBF0247F784251FCA4F57F98FB313422ED226CA00020397F220071A68DEC6CD03BE8FF00C15AD3BF456DBFBF41D6E22D555256B9E0A4961A803404972E41BEDCB42ED1495D5C6956854A032E52F671A9B5F7F6FAC48E210E294E38B792544296F36B5F31B03FAD22E4109BDCA4A4A08FBC920455A299920ADEFD011B5B4D6DB6A7918A2EE6971E94B933509515BB381E5E640B7ED78B01E363814C11C5261676A9254C97A0E6B53D0E1C3D5691684BBB5AF26A0279A40128E9E604FDE6524EB3BEF169AB928217A39B0D2E5CD8837046F7DEF1D29C75D9953225D44E932929594A88200DBEF78D4DB1CE06C7591F98754C2B89A4A7F0F62BC2337CA4AA71A32EA9F966DD52553F2FAD080F0D4D26E4071BB2C6D620460588489C679973A5B245EE36E65EDC8D87EADA9F2A7631C2F533CA664E4A5135762E2C2E05B6671EA4B8DB353E10F9538978D7E34F2F6A95F924CEE0DC97A17FABAB95275B52E4173722ED3E5292D3CAD9A1315413333325BBF9952A421B4A52A11A6BF14DC6145C1BC198A284E122A2B50BA4968B34CA7095AAA54A3FCAA4CC4C801C87049019E2BC71855E2B35289F356B0F7CC492953DAE4E8C4BDAD1BFAD3A5D6C2A642921B2A2DF312940424AD492A5202400901A23400903E51F33BDAF631271AC66AABD3342F34F5827303BAB4E8C2DF2D62F400EEC16B9482FA9D8F9FBECDEBF45084364A9090926E49F5BF5EB78E8B9931EEF6FDDEC2FA5F488D3A0F2882D5D87D7F7FBFF0034E56E2D63A7D93F5D7DAF531327EE8FDF788211342108E53F993E63EB0892E35107ADC11F80B7F78B816EE5597928684177F778454241D449D086D049D879D5636DC8BFE16BDA29A8E42A74F4200CCA52D2C43B80FA00FA17F78A758214482FAB0B33F5F26DC83AF368C7F788D7144CF0A5C27666667CCCE891ADB720F533093414D87E7AB9372D3024E5986DC0AE6AD453F74215727A5AC47A55F065D8C4CE39E29A3A954B1DD51555395AE625E5CB75392A51601232104B8DAFCEDC29575588D02002477A3304B93AA59EDA5B96C3D747DC96A454E6A9751CC6C505D9EC519933B315FAA552714E393EB72657CE5CABCB2404961531BD908579EC7B5BDECAB461B4780CAC2F0E328228248A695DD1053DDCA4848CA1C92E43BB9BEBA5FD4EF87AE06A69786D254CD9290B2896B25490E0900FA970DF3F3F7148092D148B16505B6FBE942AD71BDEF7B0DD5757A1EB1D47895515CA994CA3E32E058DD8EF7EA2FF00E23766448972650952801943727EB6D44000901205801603DBEB10D2A4A644B4AB54A403E8037CA22D2231510842108421084226894172DF773E763A8D9DBA7BE91019813310922EAB8F4FF1103FDC7EA3F48B6CC010B012E3437F9BF42C475DA2E2856619B9F46D3689946EB427FA4A46DF33FE3E5174A69B910492C12F61ADB7DEFCB99B0EB66AD9266255AB3106DB3962DFDB61A3C7806369D99A0F107C386280B2C1A6633257349B0D2C998A616D249053A5252E5B55C9D4A24DB68CE028623D9C6352D5E27A7AA0010E73196962399B7A1667DFCEBF896C32448C550B6621614E181D4EFF00B39671A3BEE312AEF3909787DC74A1C6EDB0D0B420A6DEA23C32ED729BF078C62094A425E7CC66DD9675D083773A5DAD1D7782D4A060A84A7461E171C8BEE4F41BBD8E91F517E51E5DBA0FCB7FCFEBEF1D312E44C9B4C5694B842CB90341CC9E56D39B9DAD5B454C2749CC41233662DCDF4EBB368CF726290495102FA751B0574B5F6BDFDBAFB45DE8710264A2981F1A40209B1B036BEBE9B72789D3099E9553B38008EB6B5FA5FA7AEB1AAC32971E76E96C8503A4A09DC236BB9D3A0DF6F63BC7BE270F74A0A266752D0951401E2049D23D25E3AC5BFDBF0F99372156541D0B06DC8B1EA3576BF26ED9C0CE4C3FC5A7885E52E119168CF60CCAB9F94C5B8DDD5CAAE6651A664E792F196734A92DB2B9D4493ADA1D70A820A35142ED162ED478864F02F6678C55D48266D5A5726427433109964CE04EC0A5696D8DC0D2DE48FC4471DA315C5D785892A4AB2975E63B921258805C10799DCB46FAF2EC34DD3E9F2D2C90DB32ED6845AD608421B690CD9205B9296C1BDB7D605869DFE737B43E2395C41C5B89D72432553270CB9B9A9446A6C1FF00C46B5E08F4889885DFBC538243102F7B9DC73E562C5A390A074848B9FEF6FDF4FC3B4746AE77E17119B34A3BC042D838DCF36F724078BEA027BC52DC5DC3359FA9F5D5A271B003D22D130E65A8E8EA3F5842208421084210842237DAD6F9D8F5F4F51F94729B292A3B1076B5EFB38D3EED143588EF90C9246DE6EFF7FA4525B6B5EC8290B295A2EA49500971250AB0B8B129245FAF7F411971C4E4D5514BA64CA095A036721F51626EEC5FEDA26522D1225842F31CAA4AC652C4941CC97770403B3F3D8C740CD1CBEA6663E01C6D9775D6C4FD2B1CE16A9E0F9B95710172C6995A9398919E69D6C82A754F3532E0052A494DC5AE378D8FF869ED066703F1AE089505AA5AEBA4070B2023F88972E9D2C6CC4336BA08B0637868C4E6A67785194B90198B13721C5C8670C34768D347C3D6952DC3FE7A712BC2756E872B258CF09E2B7F10D16A330C8667B1150279C996C48294E0E6258A5B521AD2104EB1384796DA8FD5C7623C592F88F02A2C66410A45452CB5CC96924844E42121484804A9B2E455C972A277B76476672A8A8EAE54B9929335495A43EEC0F90B93661B30B4660E59D134D36FADC7D6DADAB001694AEF722E545B24DAD61EC07B18D84A4A638A2D534AC4A28BE53B82FA0B172DF60346EF615F83386A66499212AC83C235072EA6D7F60081D04546D21B6D2DF5D254759DD4AD447DE3DED6DB61D4C1338CF9D3699B28A72539B5CDD760DA7AED16454D993E7CC4A9C25077079ED766DC7C9B489A27F702FE2DED6D05EDAFDB472259DD6FFF00E503F58443DC17D587D7CAF6F5D3AC4F95910E54028B59C6FBB6BCACFA73844F4A42430828E6512030274844510C21084210841CF38453AEA132A600A482E0DD9F721CF4689CA948A8A55A161D409651D406D05C7BEAE7D4445AE2E14A171709205C7706E0EC7D2D15A9526621D2351AF43A7B1D0DBF58B45109B864ECE0660492120E9C88B11F460CF72F112A32C87C34B71C53D6E5A94417A58FFF000A824048371D527A01D22CF3E532F338B282B29B3826E357BB16B375B455E2B33FDD505053DD852487203380410FE7BF26F2386BF177C85CBEC4395A8CE49C9B92A4662E1B9C96A2529D12C958C48E4E25C52E9AE25B5B4A5BED1956CAE60A8A525C00B63588B57132A91183CFC61494CA14F295E0258928049676B6960E7918D51ED7702A4C350B32CA0A94092430209F223F73A18CCBF8117098BE1EB84F94C6B5DA6B5298AB3A5DA6E289A57C1AE5A718C34DCBBEF5165398EA9C5143A8A895AAC9093C949091B11F3C5F1D5DB92389311C4787281264FE1A64D97DFA26E742CA0A905486B04ADB30E82E7431D19C3B822EA0AA7998122E48208200D2C7524F2EA3A4678F65A52EA762A2B2E83D54EB842D4BED61706C37B0223C55C4EAEA4544EA79D30CD698A5E7279936D0F3E7B79465C0A913D74A2E5091E21A102DA5EF7E6FAFA22D0A566E822AD12C801C81E9E7AE9102904DCFA5A2189D11E908421081DC11EB112139D694870E407173025813C83C4A40D9449DB6FC37DF68A9130A14A94A199992FD6FAE8352036DBDA384AB307D2FF7E514DC0B582424AD2CADA3A41B6BE6150D20D8D8A74DC937EBD22EFC332BBDC6692982331A89C25EA7C374804B6A0BD874778A2AAA8124124155980BF524160FBDB4B5EF1A8FFF00110672BF8DF38720F85AA34FDE469B3CEE3BC54969D0B614E3AEC8B149919993410ABCB1959E2B5ADCD2E07800846824FD0EFC0BF03A384B82F887179ECB562926969E4132D94833D13F3290AD42A5B249DC66171BE5BD9AE1A78931EA6949053DCCE49510C4594080DC8F37BB6F78C65C832DC9C84853194A52CB689C9C6DB426C2588F864ADBB5FEEB87484EC9D3A08DC9DB6B254A9D453AA1532699B294A2528D59DFCF9DF5672FB47B3DD9570B9C2B8729A61502D25076D426DA752FA6BB6F1CA8C4EBE466AD35215E0752B233EA438E6C3E5611D954539536A4CA50600817D1B671CB5E7B75308A804100A6C0871EB15D3D1926AD2E0B28DC75BC23989508421084210844D4CF12D3948724BFA1DFFB037894B9256A4CC76CAC1BD5F9F51F3F288117FC41FC0DE29168EF0E70A6706CDA5CB0EB7D4FB454A67776026CD726C49FAB6DF7AC44EEB0BF4036F523F41F8C4EEE8A65AC380C82DE7D58DF6FD3468A49B3C4C761ADB930F6D62D67890989A9398CB5AB34B095C8E2391082904281332C1242B5796F6B74BEDE9D33CE0F989A8E13C4B0D98970B454F8F98C8CCEFB75FF003E7EFC55C95CBAE42D25FF00210C2E439B6A2FA6C402DA6B1B9360D9933F8570E4F120999A3C83C6DD8AE5D048BDFCC41EFD0FA0B5A3C59EDF28453F1157C94973DFCD503ADB39716FA6D1D21C3C4AF0C4254480E05EC74D03E9D2E6FF003EDAB3700FCBF21B6DF2FD3DEF1D038656A64266D32E5E74CD4A803A10A37EACCE7FB3467F86D32655266CD99C396D1CB0F5DD859EF6B44AB56B01247416F2F537F4F43D6DEE6286995F86AA42D57CAABEFA38D06BD7C85F9DBC5319150A9AA5829727297D09E96623A38DDE3510CD4C7A9C0587A7279C2815C7241F97A7B28365AE69C42C3480804A94B256DEC900EE9B1DC47D14601864C5A054CF7082B0949525C212E0E625C0CA01751E578D90EDBBB56A0C2E8EA24AA72065429BC61983DC0B7A46D09E093C1156B872C9B9FCDFC774F5C8E69E752A5EA3501509632F3D49C3C194BB212CEB6EFDAB6A7BE3669D054405256921201B9F353E363B6FA71495582D05524C9A797329CA10A1942925495120382490CFAB011E5A719E372B89F18995F28E748252E03D8924DDF500FA3D8C673396038B5A084B4B71C521BB58A01081B8B9EA4122DEFE82FE2A4BC4E6D4D7D4CE512A1354B984E61AA89720DBA6DC858463F4F28A05F99670C0FD4BDBC85EC4454B6E0FCC7E9FED168CFDFD52C936F11B7276F99F3FD62E487CA3E5E5F7F28451AB53E67EB114238842108421084210F3892A4DCB24B797DDA222E08B758AE91318A46A9B007A0F6EA7CC9884A1C3652C3A18A6E38A6C17EE12E320B8D85DB4EB48BA6FED7B77EBD2E778C9F01C6D7846274B5F2CF8E9A6A569209242828283105DCF41122A907B898424B849D0176D36DF97ED1A9878C9657CCF09FC66E4771B387DB729F8131BD54610CC45368E572A7256624DE70CEBA9B25B4CECBD542190E24EB2CB96240207D30FFA79F6B52789F8729F0FAB9EA5CC4C8945282B0425811354410E424049D587B43867153495D2C394B2C06B3862C36E6E35DF9DE2F5E8F5393ABD164AB72251FCBA6E42527DB710A0A6912F36D95B2B2B1B695E95E93DF4ABD23D4E5624292A92990AF04C50622E4ED76E5AB5ECFA068DDCE0AC6115987CB04E6F0071625DACE0FB9D5EDD23E99BA56A42B65A2DA927A8BDED71EF68C9534B925A2A4243D407246FB8FAF58BFCE94997314B01B33663EA59FCFF00B42388970842108421084210842108422827A5E68EA3F527E86D1CA67041C84FE60F60FD19F6B3C4C9246B55AE10852D67B250917528FA048DC9ED1552D795236663BE8799B0B3070D6EAF15669730700105CF202CE3C88DBCE283E5B6D21C0B0A0A5349D8DFCCF6AE50BF62BD0BD3EA126DD22D7555012B3999B5049D03B1B1F968DA1D5C58F11A99547267289014942882580F0DCB3F30FA6CDA5E31278D30A57BC41BC4032DF863C2E5E98CA0C9D9E6EBB98D55944AA669CF4C3D392A99E727261043082E1910994E66BBA4CC017DEDAB3F123DABD2F06707D723F129939E54E972867C8A5CCC873100BE64CB1942D9AEA4871BE96F693C44AC527CD94951584AC8201CCC0120025FAF237D2373EA1D029587A934FC3B45A7A69745A24A334BA44925096912B4F92406A5594A4252025B6D21205ADDEC9B6DF2C1DBCF1EAF1CE29C42A5330AD1326CE20E6FEA516B8B7CBDDC4621C373552A5906C140B06B97DF5B79B5BD447DE536842414A813B020107B1DCD8FB0F6FC493AB55134CE9EB986F9AFCD89BB3E8D72C390BC5FD2826A5537FA92475D8FB3066FED1244A8AA84210842108422649B4D437F50810E08E61A236F2DFDEDF97A44E969CD5A124FF3EED72EDD3FCB69BC219367D39FBEBA79791EAD514AB21006C1016FB84F72D849426FDB51B81D7A7A88EE3ECCF87535DC5986787313532F51AF893CB771A7BB5A2DD549330A85DD49661B59AFA3EBF7A0D0178CCC66BCE4F124CF9C5734F7C5C860899461FA6BC17CC976D72B313AA6996D77290B5952AC91B929BDA3E943B21C24F0EF661C394C94A659AA136A96C194A42A5538944976B10B6B6E6363BE19B877F1F8D575414B8926581E1704BADF4E6C1EEDB738F8081A753C9DCAF96D04F5296DC0B2E9B0EC0A51ABB0B88CBAAA715055F6201D7A5F97405F6EB1EC9707524B95824A90C3FED2037A680E9B39B6C3D2A463D509CC5CB59FC8B74FF3FAC433650A3A852D80014D676D776D5C6BBF43A9440341E42271567257FD57F784731C42108421084211297A8F2FD4C463F22BCFF684469FCA3D7EA629D7A8F2FD4C22B121F3067F09B7B45245AF7148162818450DA0971389A9810026EA3CD7D1CBB773AF96AD236DC11DA3B038469D12B08A82A0C324F5124B0CB903EACC367E8DAB468A7C57292BA99697B84A188D3771F3B746DDC1DC5F2E99533807062177E62B0D525D5A542CA0A5CAA09B8EA3A478AFF1013E5CCE2DAF45AD366BB1B0F196176B5FD341D35FF0305386A19C7892400D6605EFCB6B6C3CE3B99047516BC6B52D3DD4F2A018105B737D48D07E82D68CDB0EAA269F2A9D57B6D61BF2E9F7686FDBAF6F9C48D66B820B904EECFEDC989EBD6229ABCF99CF436D80F26FDCED1808F0AAF0FF00C55C6067052389ECF1A04ED3B24F2F2A7295BC19846A2CACFF00AB8D31D44E48B6FA1E4843B2F31516DD6E60A5B72EC102D78F693E243B75C3BB30E1A9FC3B8654A1788D4D22915B528983F86A99DE217224105CA4CB090B5784E6252DE073A9FDAD71C625C498BD4C81397DDF7AA09439D1DC1234B29FD9FCB751A5C94BD36974EA6CA30CCB49C84A372B26CB2004372AD957251600005B49E5F4D82001B08F01FB5EE32C4389EA2A27D44E5CC44E9EA5F89449295289DC9D1CF9F2D0C60982514DA7A7509E5E62A6155DC9661637BBEE39302F1CF26E49F58EA8C1E84AE92A27B0052950049D6CE5BEC6ACD17A12C06BE97666DDFAC4CAFBA9EFEFF4E9FBF48C7652FBB9AA503A15021EE799BF5BDC7AC44A5652CCF67D7FB4491C12E49E65E22842108421084210894A6F7B123EBB44C4A4100DFF004D7CA1104ABB1EBD8DFEBD7F4B402B2D8EC751E7088A9C2871B5E9E614292A083BEB2157D3DFADBBEDEB1365679F311293AAC8487BDC9034B3F417BFAC70B47792E625C070CFC9DFEDB7F91C7F789AF0B948E2BF843CC8CAF97944D4711B346A8E27C3932E361D9866BF48957661A44A020A83B32B32ED8D27512D0EB1E9AFC0EF6A957C1FC5B87613DF94A0D4C84141514A48CE014A838F09DC369678C22A54AA3AC490420858CA5CDC38D6CEEEFA90DD63017E1BB9C3378DF247FD0B889D73FD5F9433731836BD273AA2671D96A71D326F4C2576585051984DD40D80B031F4DFC3759FEF583E1F5E14266794898562E0F8505C5FA9D431F48DA3ECC71952A44A4297A849673CB467371F2772FB6431297D3A79E4294A69B5158E856756B4FCD1E51F5F717EDF97342E8A9A58FE4431BE9A6CD6D39DFA1B46C0AA689A84286E1FF60D7B5ED789E25C4B841C6E7CBAC2108421084210842108422927A5D614FA59BCC738A5593F8848D4302C35D7F6DB7D220AD2015292A58482A0DA05CB8A4EE1B23B85DAC477110AD4132F523C21DB5008FBB383190CD5F754C565DBBB3A5F627F563EC1CC5A671B3C43C8F0F19295DAD34B44E62EC4F2EAA1E0CA530A1F13313F526D4DF39B4EEA2BA7AC327CA094FC40E9717C271CACFC3D354CE52F2F752662CB9032E51F4E5A5FCA35E78E7890D3A6A519F2E64AC0F16F71F4DBEA22F9FC1338327787DC80566BE60C9B9399C19EEE9C49896A5506FF00F5D44912D97E5A454B7017521C5CF3BF78A2E5AD85C08F9E9FF501EDDAB958B546114552A4C890B5489684A880C0A8198B0090662C0198821D83C6AC842ABA7D4CC582A2A98545F525C161CD9EFB8B98CD9A15A9A64A9252E7291CE04DC87ADF69D86DABA6D1E42621366E2F4D32B66A8AC95924B9B9625FEAFCFE952995F842325B448036F32DEFFA5A268C31ACFD5BF7FD22ED4CB52CA546FA8274D8B5B6F9EEF7847115D0842108421087489B203CE962F750D3586B004690013604FE837FEDF8DB68A8929CB5E010CCB4FA31737FBF23A44A9C7282E40607E42DA6FAF5D7778E0D59458A7CF4CA1CD21320EA7D2CF0438A17F53BA4EE36F5BC6D276252E5CCE2DC252A00BD4C92188BF8D04EC7F6DA24C8489A5208198A8BBEC39F9F98FA88FCE5B0D569CC479DDC446259D3CD9BABE624FAD6A26E796D4D4DA5BDEF73D556EDE9EB1F4774129345C0FC252C32569C2E4A54058384825FCC11FAB5A374FE1629E5CB9B8B4D2920E6490FFF00E673AE875243EDE9EC65C7145166EC92773BED7DCF6FC77F6116A54C7B383B81B7CB7FB31E9BF0857E7948927602DF4F7663D793C548A399737BBBF41FE5F56E9A45FF001D941092B4B30662D72ECC7AEF7F43088348B64824C996497748BF384226C2108421084211297A8F2FD4C46E04B5396BFA6DBBC2234FE51F7BC53AEE43721F5308AD46A7CBF5114330E542CF204DFA45B7E774A3F8AB15E4EE0C934972A98971A25C6A545CABE1255FA7096361BE9BBEF5BBDEFEF19AD0552A8B85F14A963964D2543EC33A903207E658EB6B7988F3B3E27311EFB134CB2B21D4904022E013B74275B7B878DC870FCA894A6D324D07ECE56424D86876421B65294A3BD80B1DB63D7B4785BDB9622B9DC675E12A71DE4C26F727BC3AE9F521E3ADB8765A66612826E4B5F46B06BF93DBFB47DB73B7D7FB474E544C4CC4CB601DB5DDBF4EA09F48C964CBEE29CAF51A3DC5DF9FAB86E514E24CA0EBFBF3FD2212B706DA8E7CFD2325781706E1CCBDC3F46C2783A912587A8187E511214AA653586E565A4A5D0D86CA1A69A09424A8005CD22CA56A3D0C639DB0F6BD8A717625513313C4D75A55314D9D6A55CA891AA94C1DDDFE7B68ECE94BAAA9335473AD4B2EB2EEE7FB9B39BDF6D3BD21094202136000205BA00493B7B5C93F324F78D6AC4B129B5CBBAC9960061D43EFBBD9FA003577BBC84AD08CAB249B6AFF00AC4FD22965D6D44A96654B985282194012C793DF5F3F389F0F6EDE91486E49DC973D4C70C0EA01F4842398421084210842108472091A130880481B811C4220B52920AD3BAD035209DECA1B823AF422F7ED159875AAE49019960DAD1C1B850E6086E6E343D0C715D9495130D9754E34DB8C292DA59074B4B55C95213701249209F5EE768EEEECDB1D9F81F17D155C89E64AD35129614924310A4BDC37986FD62C988534B989CEA402522CA3724B6B7F3B9DB511A72E78E049DE067C57AB54B0CB749C9EE2B15F174C4348F85A3D2EB9539B71993FB01F6085B4A75D5CC292A04731074F98C7D497C237698788F8430DA4C42AC54CEA7912E58CEABA92B48C818A8F892412A2362036B190F02635328B129728CF5265674F85DDAF76BB071A1BDDB9B464F12E05A5294DC36948E56F70B695BA1E57ABAE804BA77BD931BD48CE9F102A0850F0F21A6876707CF5BDA37530AAC978861F2152085282015A8751EAC6C1B73D0E9344CCCA2CEA25B99FB7F58E664B9D98F8940B8D5FE9987DD8738433A9FF003126C2E74E5AE9E67AC56D2D8B2CE81AE5EFCBA9FD7D1D15892E073163D4B5FD3E711AC82A24583BB337A11F77844510C2108421084227F2A51AD7B2756907BDEDDBD7E5F3BF68A5AFAD91229172B20EFD45C2B522C2FF002DAFCA38FC14E9AA13C12109074B7BED6B6C74F6E24FCFA28928F55A69D6A569B4F6953B3B3CF381A4CB4AB092E3CE95A8F4420151E9FE2D58555A65226D456B2E5A412CA701989DF4605B4F90618FF117114AA2A499294B01484900067B0B8D6F7EAFAF58C5870B795359F13DE3ACE2EAEC8CCBBC2D70FF003AB7E48CC053F47AB622726C2D99032CB0259CF8A4D36D3977095252C6A49B46897C5676E143C1F846232A82BC5356D4C99A8972D2B0932A46523BD5328399C49082D6EED5ABC69BF1BE2F515D5EA4CA9A4CBCECACBB927477361B8DC7946E2D44956E9F288A749A12C4936CB4C265DA1A19E530928693A00B04A53B253616FCE3E69BB56E309FC598A621598AD5AAB661A99CA44C9AA73F98B0B956DA3683517734D229A4A5083DD8CD95DC8B8767F7611DA6EA3BA892A26EA27A93EA635B2A2AA62153244998A448CDF901203DECDA35FDC9F49A644A2CE816D180B422DF11265A505D21BD9BD035A1088E10842108421089F4ADF8894E1C670E34E708748A99A526BC14DC7789D39BD9BE512A6876E773E65ACFEF1F22B6426993E4B61C6D328F2D4D1170B7396BF314DAC49000FA7B08D9BEC1D4A1C6384E73635528E52DB2D2CFB38E4CF77722F13289290B0E900B827C81D1ACCE3DACE1C47E711976D191CD2CFF00A3CC20375092CC19D49D40071083393C426FE801DAC3E5E83E9196B13B82384A64A0DDE504A5E9B14A3A93B6BEFAC6F7FC294BA69871B0B969CC3BB60A6DB3E9A3EA6E35F28F7E52CF90051D3A74903A155875F736EBBF78C6EE94DEE79F2FDCBFD79078F40B87A9A64B98952414A2C459835D98F2D3AF48453CC98A50092A2E3DB910D68CC6BD426490959248E7B103463EBB7D211126C963AE9E57FDADE516B94C25A43378436CD77B7DEF08E623842108421084221EE56A0A98F64D9B61E7EFFE4C43303CB3D0A8FC87DFCA264A50A365A8A4589B8EB71D07BDFA44B9753290A12D4D98170FBEEDF767DE2A70B97DEAFF008802824BDCDADB6FD77B9F489F415DC200B01D48B5CFE67F3F5ED19261D48AAC9D2B2273256B4A4DB5048D6C6DE7C9DF48B6F1654D2D150D4A90D2D48913141ACCC937E7D49372EFB4752E13F06CD67C71F78224512E66E9595D4F355AAB83ED25645C919A694B4366DA50A7801ABA151685FEE889BDB26274DC19C115C3BD4D32AB0494CB95A674CA44D338962C582E5F4BE8C03F933DA763231FC6EA52B589CB953E6049D48F17840F624B1D985E36D169B665F4A65C290D048E528F5522D64AB6BDC11D06E01FAC783FDA46209C5F892AAAA511312B5CC04A6EFE2B3FB9B45470952CE974C1131CA2C4077000E846A4124ECC20493D493F38C49669D144996B4033C29DEC0E971E96D75F568C927CE42A61903401C87DCEAE3AF3E761108B7A662125C24FCBF40225E54F21ED195F4B0194F9544DAC06A24AAC361756E49E97277BDCF78D40A933EA27296B249517724971D2D7EBD59DA34B68E50482A5067B6F7B33BBBBD8388AE8FBBF58A59B2C4B2066CCFF00DBF7F94561001B1789A254710842108421084210842108421084210DBB8B8EE3D47A44FA698254E42D5A24BF4B11F7F281D0ED6D794012140EA06C7CA08BDBE5BFCAFF00DA328A1AE5C9AD97572CFE5585120960CD705B6D472DA29EA650992169087394B293D41DBFC6BE7182CF1DFE1BA733638617B3B707D352EE3BC84A88C5527312C926A535245B4BF3F2A852105C976E5853D8534E365C254F39E54E9055ED07C0BF6C424E3384E115557DD49A85CAA65AD4B3FC2CE40EF402D9B28D03877D4461D4D3A6D0D726600A395692002CE017617771E76EB68B5EE1633969F9D59138171F22650F4E54645A90AA34DACBAECAD6A4D96454A5A6490952032A71A0DA943CF75929469DFE85703C4E562783D0CE42B32FBA057CC1CA9D6E5DFF005DDA371BB28C7054D1CF44E5B8CA9CAF76E4039B33DFADF668B8C01614E2169014937480490A6B7FB4B902DFD3B0046E7CD1746E7E9D3FBFDF9F702A64B9E1810C1807372FCAF7D39FBEC8453A93DDE8E4E97EB7F6FBB6908AC941903ADFF61E8D1182E01E61E11321084210842108896D6E84357437AC3CEB2E4CACB5284CB212E4C071D407168286F42B669448FBB73B463D5B23BEAE4052990C1C1660C777FBBB795CCE234D4784CE131694AC956A766DDC5BD3F58C5A71E79B18CF30B10E13E0E720C4DD7334735DF91A7D6514A79C43141A2D466554F53130F4B85AC3CF813066D2A6D0897974CBB816E29D525BEAFED638E309E0CC02B26CFAB44844992B5AD49290B510939509B8754C6200FCA08B90D1A71DA37144C5554E972A61233166516D4B13E5EB7F71B2F702FC20607E0E787CC2994186996D7504B0D56B1BD610D36CBF5DC5936C3226261C436562CD96B4241715A49276D463E69FE2DBB72ACE2BC72BD326BD739014A952C09855965A54A09426E5807366677E91D4F4895D72BBC98147C40B92FA8724B976766717B8E422F219934B26E14543AD8A401FA98F37710C5A7D42D7994ACCA249B960FD7578C8C0603C9A39A4DCF4B6D61162BDDC924926FD60030FAF53CE211CB866DDDFD1BFBC7308E2108421084210813604FA0BC47295966215C943E767F477812C09E5135C045CF404FE62DE9D444F90AEF2B90543550373A653FDAFEFB440F99C37AB3B6BD7969D5F68A2EB48986B4BAA6D2C2DA7DB98D44DD0909BA5562083AF5286E401A7AEE63613B25C565D0715E16A2A0922A653DC6CB4DF5B6E3CC126E625A96A9398005D2C42AC013BA497B00C1CDD9C6BA47E7B79D181E632A38F0E26B08D41025CD5316B957A33253CB33326E3D39A5CD3601215736292A1707DEFF48DC058A48E20ECEF8566CA751914269E692036794994A2DCC34CD0B1E40C6DA7C30F12A68312C4644C98009CA94C093A12B1A1B91AD8EBECFF0057ECC2580959517105C7469B729D16B35B1370756EA363B0B88E3104892ACBBDF4274BF51A6C5CBDC748F57786172EA30E97516FFB60E9A0B6ACFF00ABDDDB589E2D929A61629D03B6B7F4DF58A99930CD9C65BE6D773ABB173F7ED08A8D22023296E56F6B421084210842108440F436F48AB97325A299695119944B02402CC7EBFB6B11E42A412CE1F4D8EDABEDFB36B14CAC124B89B348BADC55F70840BA881B6E05F62403D2E3AC634AA69F36A9D092C556376D7FBBFCA394D40A294B5964B026E40B00FB5EFBB74DB4F38CD6C7F2F80F09CC55CA4AAA01A7D9929242C844E549B405A2552E8BB810F07590D3A1B5152CBA9D00201576F70AC812C4B33328292082A19420002E4B5920DC9B30B9208BEB076B7DA2C9C3E9EB64F7E12552A6A00CDB949660FA9E8C766DA32E5E117C303D94D94F58CE0C6D4E98463ECDB71B9853F329297E9F2812E38A95438ABB8E36FF00C5A752D41B23942C937DB49BE313B4B4621493B0FC32A8CC954C1725012ACB701944A42884A94D7D49000E51E7660A9A8C5B17AA9D312A226542D6E5CB82A7DEEDD47B46608795B61BB11C9650CEEA2AFB808D89EDBEDFDFAC795D4733BEA89F327A89CD99409F76EBD7AF3B4776D2A25D0D2A5360A09B82C58B338E7C9F7E42CD1B0B5EFBDFA7F78B7559CD3D65F761E4098B5A65AD55467310823AB3BF5F23ED108A68AD8CB446A04DA82A709B0E9ADB6FEEE5FA469A29D23C2186EDF2FF003E5787D6FF008FF70229CA94ABA89F53FB130412439D5FA7E908E223842108421084210842108421084210874EBD3BC22098F94E5D7F4895685DC2C03A46FD7DF6FF001D37FA08BEE1B324A69E609AA00876245F4D46BA5F97D23994B4776CA201637201F6DBD2D1D4B1760EA4E37C358A309D6E525EA14DC594A7E95352CFA02E5C4B969E439CF6D6929597BE200FBAAD91BDB6BED17C3671B49C178C2833D4AA5A13532B7292C16346D7AB9EB18D55D2854F0B480466D53BF5F2FBE91A6CF0BF2B53E0F78CCCFBE09B190E4D26A9587B1860371F0A0CFC1BB373AD3CED3FCAA484BFCC94BA11A5C1CB4EB40B08FAAFF87CE33A3E27E0FA2A8935499F964094A577816BEF25206652C139815661E7721D8C770767989A6915369D331944A583B1B92C3605B70010CC232D4D21D265D6A515699275A716374A96DAD91A491717373626C15625254018D874CC428120D87DDA36530B33E6484CD5B94B03989B333EBD1F7B93B0BC4F1CE649DFE47F68BD2549AA5044A7528580B33BEF7B69AC22E32D0AC89B6C371FBC44A4141C8AD5363E908856B08B11A6BD3D9E388136EB12CD4203B916D6FF00DA382424392C39F9C46C6C0F631C0A9964B0209F33FB40282AE92E39889524293A93BA6FA49B1001F7BDADEC4EC6E2C77113173512D1DE28B27AEB6DDBEFD238529290E48116ADC5FF0012742E1AF29AAB8A670B351C4D32448612C34E1E63B56ACCDD98972CCB2438A765D9794CAAA20367992C5286D2FA816C61BC4588FE0A966E2692934F292A4A979C27C4C6C4A88000704924243B92D78E9EED0389FF00013BF0D2E690954A0A64BD9C1B9018936D399D768F77F05BE0731261192C47C6A67F48BF3F9E399EB7AA785E8B536D2F3F8530FADB4B92936DADD2B6587EB2A79D9795432BD6D7F2ED4EF242904F873F1C5F11F49514F5D826098A899512FBE96A44A98B75AC3A4BA8B16B3253A02090D98BEAE63552AAEAC5AD799492336627C24927C29BBB8675386F10626E6360E6E518974A3E19B75284A532ED36E2829C6DC04AD538E1D4429254BB0B2D4BB20F9378F0B313C5B12C4B119F57892D644C3317996B511E251CA082E0285EC2C5C39378AFC384B44ACA03314957E51993BCB497724F3206A09B3373631559904924A497D4E5FD58C57C229A6F77A219DCBB0FB1EC6108930842108421084210881E87E46394EA3CC7D638502410358893F6647537BF43B8B6FF005F6F5899295DDD4A56A0C124BFB9DADCE21969297CD7F26BDCF5B7BDA25E59710B4292D212B43683AF51D7A54B2A26C93D01036EBF3BC661C33894CA7C7E86A65A94254A9C852D4EC0242817B31275EB6893529510AC84AB3289E89748013FA82CEF6D2F1A6B78F4E4F5432678AECAAE2464248B387F33A48E1DA9CDB08024E5EAD479965D5B530536D2EBC8AAA4A4A93A5C083655D26DF463F06BC694BC6BC095584D1554BA89983A69E6CC964B2A5AA6CB5266972D66948B03E4EED19FF64D89CEC1F8864F7AA3284E988487536665161E5767B1B69162ACBACBAD735AD2E2668B732CAD04292595A54A2B045C58DC5B7055B9403636EF1C752D5464A1CAD24860E030B1198116F76DC73F69FB37C4454F0D485A5798AE44B3A83FCBBDEE3AFEE62AC5253D1CD949EF6686494B0653BFB1DDADF5074CA2814A35AA330784921C860CEEF7F21FDDA110ACA41241B5B5F61FA3F58AEA85CB4CD580A0CE75F3308862505A54582813C84204B6B13532D4BFCA1FE5F7F7C8C2210A49B3FD626FE1677F4FCC42228817266203A936DEE0B79C06EA427BAC94A7DC8173BF4D81BEE445B278AA5D54B972925482DCB9BDB7B06F5EB12D388514950A69B31A7AEE9433F84B3B97B6FC8C70EA33B4E94A7BD3B3936DCAC9212EF3E69E0B4B0D36C80A7D4B5D88D2DA3CC40B950D9214768CF705C3A5CF5A25AD2F394058A7F5235F3F326F6C038FF8BB09E19C36754621569908085104EAD94B69EAED6717678E1F07390D39C6FF0010CD57EACE25192194F3B25509EA729414D56A724DF71F94A7A5A04F3DC714CB85D52829A2DBED02E120A5359C678A2383B87F145CE4F753E7D1CE9689A09265A0A09CA948DE6BB1558A02410F1E5776B1DA0C8E29C58CAC12B7F148138E6092012A2AD4936F0D980B12E368DACA4A5A56954DA752A4E55A94A7CBC9A65A9B4E603653225B4A5082A435A90D92128B5CA774EFDE3C52E30E22ACC6B13C54E26668926AA70415A54A74951219FA3EB6BBEB17CE11A1934B265CD9B91331684A95A13988E7A83B5AFA6FAF2D9E6165AE60B2D09E5AC92012B46CA3D771B8DF707B131D23882108A82287C4093F96C6E77FCBAF95B9C5F3129B30CE0658796E1CA4E9772587CF7D468F135FCC5237B024900D86E075B5BBFAF689D4F854F54B33E6CB16198EE48DF98D4F4BE9D6E5F8DC3D34494F789EFDC166255A1B3EA4B6E6C1BD627D0AB6AB1B7AFF00B753D228D53A91337BB09BBB5922C4EDA8E607BF28932A626636453967DC1FBF27D632CD1A451A75084210842108421084210842108421084210842D7DBD76FC606C09E51C2BF29F2310D5BF2EF7F63EBE87F5F43BF78BB61D2D33654E05883D5B401B5DDFF4EB14CB43A416005EED66BBD86BA6FD622B6961B65B6C9F8879C992D01F7B4212D6C091BEEAE97B13EA378CA383ABD38263922A9F2844D45C69E151209F3DF901D628262194AB5C0B3960E5F7D187B7D6358DF1DDC86AE60BC4F93BC79E57D3172D5DCB4AB9A463E725501B54DD26A8E4ACC21D9D527675A964D32600E6936E71B0DCC7D097C01F6CB22BF0EC470A5D4A14EAA70119866CE91312026F6D4B80C15BDC089F86E2BFED788531272E755C8274047DFB69631EA396998341CD3C038771DE169B6D549C4F234CAB34C0375B4C392CB5A257A1D2B96E7044C0077529172A22E3D9AE1D992B12A04D424A559C036B9BB1F95DC9E76B46E7706E292B12C36520AC2894246CE430049D2F6D1B7F28EF315E6481332021B301A5BD3A731BEDB465F2650A39D99AC4920FECDD08DEDF545CC4C094A5214C121B293AFAECDA86B741098BEF16A5732FF7F584524CF1153117BF4DA20881FEE3F5114736966CE494CA4F8CB161B804126D7FDFDE25CD495232B3B90EFD086B6F7D3A889D5FFB60FA6AFEFEC7D3FD8C5D6824D0CA1DD541489C468AD41FF222BA969E58944AAD6246FE977BB373E7B474ACC1C7B8672DB0657317E2DAA3146A4D0255CACCEB8FA8A135497936B9A65A5AC0DD6AE496AC020951B5FBC635C5153FEDB295349690DCCF89CD983172458003CA3AD38C78965E12898D312E87736BA6D6661ADF5DC13B98B1AE04385AC6FE24DC4F4BF1539EF439A94E1AB2C2B68395586670E993C46FCA3A8984CF4C4A2545A9861D99E520A9FD4086D4922C2D1E687C58FC51E19C1986CFE17C3ABBFEA2AE9E62AA929210253A549125ECA135D24CC6190A549F11B81ABDC47C49FEF95A6785B840284DDC177625ACCFA1D45CB6B1B74D3A4E5694D49D2A9F2ED53E4241932129292ACA199532928847C3B4D25B4A5004BEB51B048FBF78F9CDED538E67F14F1055D58529626CD5A9DC9FCCA537305B99FA308C6C4AEF941C056C76F23E97BB5F478FAA5606DDFE5FF1DBA474C6293E729294A828279836EAF7D9F95B66B98BBC8A6EED1CCEAFFA00DA0E4D7BEE584D16289F0842108421084210842108423905883C883ED08409724DEE77B98452712E9E9D2C6DBF61D00F7FF6B45EB05599738298366BF26DDED77D8B9EBA3873F9FB0FD1A31DDE267C204A7197C2A63CCB6128DAF1652649EC53822A6520CCC8E21A5CBBA65589776C56D09D53890E041D2B2CA35821223D16F83CEDDC7657C512E8A69CD498C54D3A6AA4953266CA4A94952482406F19B10CD160C4F12AFC2EBE86A6973012D4E4A1C310525C91E5ABB3DE34A4CA5AB54E9ADD7F2BF1AC94C51B1D60C9D4536A3233A0A6652DD08BD2C89720951E621530BF880482496F5151008F77E4D0E17C43C37FEFB864D975027C81554D312E153254D4674299412AB81A1D8691EA07C3376CB4D88D1D1E175F5094CCC92A5A90B5B97218EA4805D9CECEEE58C7B0C74D61F5F892B1799455695A64216A4877D012036D60F7200F3DF7CB119085D2A2B70F2159D216E82082F7DB5F2D356636846473901331413A662C072E9D3A6D1229A42A6CA4296019840CEE40BFDEBD6112B2AB91F689A640478B2A411A31FBE9AF9EA211C290588367B3FF00831455556B91297DD139810183BD9B421EEFAF4B1BC225143071B3EB7B0D35773CDE20A2AAAF9E74985C0737D2DCCB6FE606A39225952DED7F33FA388AF9A8AA2851567B6CFEA4B02DCEFE770D1337AD2E21D6DB0B0D2AEE29EF2CB21B558294A51F28504EABFA0B45E30854B4CF96A9D2C1255F9887013B925886D5F76E767B6621270FA1C32A71AAB98844D9095105643B24022E5F57B5F5E8C63CE72FF2831FF1D39F546E1AF2A915046156EA32CFE3AAEC9179AA6C8539B750ED450A9B97F373D72C1619654034EB83438AD37233CE34E3AE11ECFF00860E3558BA7A7A9EE262A982D28CF31494F854125C99614F99475B84B9063CB5F88EEDA2462CBABC1A9A7A660495CA2016D1C063CEE188D2DE719B2CC1F054CF6E13E992B98BC0867A54DCABD229ADD42AB97F8955332D2D5DA84A239CEB68937587B0FCEA0A8680671E0A21442AC0DA34C387FE2AF8278FF18A9C0B8A853CDA31366265CFCED36582A09F0824226060084AC9483A6A634164E2988D056AEAA485A42965434CA6FA16248FAB36B1E5B817C4A330B2C310BD96FC6B64E57B2B71207112F318C29B8704961FA8104B456D4D4B34CB213A81714B6DB03CC08247495C5FD8AF0771B61D3712E08AAC3F134CF54D50A692B952F1090C017994EA282A01F59066070DC9FB4F03ED3EAC2E5C9A8CC8203397297B3B2AEC5F57637DA32BB80F31703E6361C97C4382715E1DC5524FCAB4E308909C6E6265964A6E96E605814CC3608E6A49D4091F38D22E30F87AE2AC126CDA9934D53DDA4956421492C1C8053F9800016B01ECD1DEB81F14C8AE952CCD9A9399237075D5FADFAEDADA3B8E9496D971A7C6879056B95BF992B007986DB04824582BBDF7EB1D4758713C03FE9EBE926A43E425692DA9704E86ED7D1F4D233DA09785D52DD2B9654012580D0B1B7936EDA5A25D5A4137500373A0E95586E6C6E2C76D8DC58D8DC4712F87518B844DA1428CF9846542527F317374E8FCC9B1BEBBD5D65561D874951CF2EDA170DBF3772790B0763D32D11E7D469B42108421084210842108421084210842108421111B11F3889092B5040D54587D986B14EDA9C161736DF6DEFBF53EDFAFCA2B25D42A90A917D9D835F6B5BE4F7DC98100A43E9703A01B8E4D7FB789DE5594829242DBBE9503E64DC0074AAFA85EC01B5AF6DFA4402A26AD59905414F60EDBEF71CBD229168046815E7707CF359C5B5B8F68F15CF7C9AC2F9F99319939518C65513944C6186E7E9E65D4D21C519F71A58935B214094BE85A8E871165A01558D8AAFB9FF099DADD5702713A29D550B962AEA656519D4904A56C5218B87CC46BA167B458713A25CC99267A411DC92480D616F16C1836B7E9D351BE01B10E21C84CCFCD4E05B359D5338A32DAB1547F08A674ABE2A7E41A9D5CB4EA25661D1AD72EEA8492E55B42B969690BE5A529B88FAB0EC2B8E2571270BD2E212EC9AA912E78961B2CA529214A96350C876B38362F1DBFD9A7189A59B268E64C7282941753BB167673D4DEDA3EF1961654EB92AB99290801DE5B92CA1F68122E09077576EB7DEF1DC526B1332B169170547C2198DCE8DD0F4B6DCF6B65D50ADA54CC43789292082E74727FB5F52C778AA34FF45F41DD3A892AD27EEEA277BDAD7F78B81980AC8666B11B803A8616B5A2343E50E19801E6D63ADFDE11390339617B121ACFEACCFCF7E71142C4824148D0953B655ACAE502E1458EC4B813A123D488BBE1D369A8E78A8A864CB0820E6B80A2922DADEFCDB4E71C804E9FAF9ED1F231055E9B46A33F5CAB4DB7214490617539FA8BCF2586E99C8056A4CD28A9376FECEFA141492955883731D5DC49555E9C5975D499C5225454E9242425CBBE836D9F48C5F1EE2497854A58EF02084ABC4766041F97CCEF18B8C3383B333C5B788890CAFC0CB9AA470BB96B5043F8CB14239B232F88912132A999F9365F486D736CBC1B534191A90B4ACA4A6C483AA5F129F11D85F0670BD4C9FC4A25E26890B12A5E609989535A6AAF99241F14B7F166014C12413AA9C6FC4F331754D972E6382A21C10C45F7DDDFC8731B6DFF0094796984327F2F30A65AE04A54A5270B613A4CB52A9B2D2928C49A1F44BA945734F34CB6D85BCEBEA7097560ACD937276B7CC9F6E5DAE62BC77C5759593AAE74D42A62C24A96540BAD4CC4923D4475C61B493C662A0A2EB203DDC1E84D9B6F2EB1E8AE2825494800841514816B20A800AD23FA4AAC35586F6009368D779B56942CAE6A8951399CBEB7D83EDE6C3934657229932D24E8AB392EC7A3EA40E8E1C9DE298428EFD8EF7BEE6FFBEF11AAAA92AA5A86AACAA60C07D6FE4DD5E2A0CD4203393C9FE436B7B6ECF15A3175B675368E5A21D6110C210842108421084210842108405C81CE108BAD29EE806706C5FD5EE3A107EC423813626F5244B381B4AC10E056E959360949491624EF6041EB19FF000A62429B12A6AF3332AE926052482C5DC1E6FB6B607CE23CB48B953135284A8A8320A99C58BB1377D34E578D63BC627C31F1139885DE32B869A73BFEAAA448CE54732708D325137AE35AD97E6DC97A536D166727E61414A5BBCA53EE04799674C7B87F09DF131475D87D3708E395485534C97264489F3540AA9969192512ABACC86242903300729086048B5F0BF1262DC1FC4126BA8E6CD448973731C8A21050140F301F5BEFB98C0F607CC6A36336A62594B99A4622A2ABE16B7876A61123544CEA0A92EB6D4ABDCB73CAE2169B2136BDAFEB1BED8A609435325188512259993E5F7C89924A5489885004292B4B820821C3BA5D9401D7D69EC5BE23F09C570CA6A3C4AAA599A94210A13141CA998820D817605F959C88F4E96507937425ED42C552F38DFC32D83FFED17084070A142DA82DCBDAF7B461AA92B428A569F10B1701FE778D8DA4E2AA6AF9C6753293DD4C53CBCAD97293A803417B10D106D4495837BA480410748FFEAA3F787D4DBEB10F767FA47CA329155DF49CD620877166FA5F5D3DC69139BDBCA424EDBAAD61BEF7B823A5FB758953D39259565166D81672DFDF711434F3651AA409E5D0A512ACC036E40E4EEDA74DE2575D4B68BB8359EE5AB8F97DDB5AFDF7B9BFCA25534BEF94D7655B41F57B7F862F1929C5707A196A566941924DD80040E418BE83A920BB470A72AB212095393938DB326DB45D5CFCE699269A013A8B639819E6949F2DC255A88B826F739252E0267E564FC897DC0E57F5F3DE3A878C7B5FC0B0644C06A24208736205873D1DC8DEFD045BAD4734B13E7262FA46446445127B1462CC715495C30E26410E02E22A7329923352D3492D89212497D534A9C438C9294E92EA928091949A0C1787703ABC5F189F2A90522264D42A6A414AD72D0552E584A92ACD9D40219B28CC0A992498D1BED9FE26933A8E7E118554B89E85214996B6B97049B82000CCD760400748DD9BC357C3E30CF03D935272210CCF66D6299392AC663629504BB30F4CCC8D12B4692985DDD6154C2D2D536A6395CF130038B740007899F16BDBDD4713F11D4617478977741207E1A4D3C89AD2A4CA0B5BA42416F11529449049CCC0B0481E6CD54CC4B1DC6A6D6D4CC99313327A96A2B5120E625CB682C583DB76DE326012E1692D3C0BCD04900384B880166CAB25774A42AC350005FE40479F5C458CD4E12A955984E253A5CF52D2A599530A48048243A487B92C1EDB81A467A30EA25C84CB54B4B80C54CE4960FF004F3D79BC793E7470F793FC43E199CC2D9B397B44C794F98656CB626E9F206AF21AD0525D66A4F25B9B469B829D135D53D6F1DF3D9CFC49E3BC193E8E7CCC4EA7BC421014B4D44D973012438CC95A54412015006EC1C6D16C9B8653D382A42120E64F8941D2A377CADA1B3F898FA4600B3BBC14F34F25EAEFE6470179C952C36A95599D772CF12D627CD2E62613A9D7A5241A992FD2C38E14A1B3FCCDD6E5D5A501A590176F47BB35F8C1E0FE3E91230DE31A5A6A82A9790564A4CA97579D59528EF49EEC4C4206624AB329C837BC432715ABA153534C52427C3949B16B950D5896E9D62DCB097889E6A644E27195BC72E49E24C01895B59A749E3B94A4293409808710D99898769BCCA6ADB78243BF172885B080082EA75A35773711F639D9D7695839A9E1CAEC36BA75A71952CC9975603789A42F24C9A428A434A4AC9D52088CBB05E3DAFA29A5750A5CB0A494BBA8A4DC0D744D811723E71E9DC447891601C3349A0E0EE1C1B98CEACE1CC36912D87B0F617945D5D2DAE65B0944CAC21050D8975B8D38EA4A810014949B9116BECE3E1584AC6A52A6CA54AA4973419AA9D2D40A4024E528292B054D94272D8DC86062D7C4BDA455CC9330226A8B83940535DF5770EE1EE09B3878DAA23E6E1484E89F9BEBC8BC731017DEFD6FDA25104163088C710842108421084210842108421084210844C9530CA98958BE53F2DE112A53A541409D85AC7DFF007F3F784E98672D4A2E33379DB4F28E49CCC0EDF3F3E7052428DCFE5F33F3F58E25ACCB50500EDB1DDB73F7E712F20D1CEFF36FDA205486C1B3A5B71B22652A090A500CECAE50292953C4AD2109505248D5E526D6CA3863139F458DD16212990AA39A898002C090A06EECECDB3EBE514D56724A3674A8292A21DEECCECC000DE77B59CC6B2DE395C2B624C038B301F884E4D51A698C4F81A765DBCCF93A43579C9BA2B8024CED465D905F536148597D61213AD482A209023E8A3E087E23EA714A4C3F8671034D4F2D5225C9913D6B48489C027289854A64A14949BD86609B80631CC2A72A831144F94A3FF7038E8E2E367BEBCADD4768C8ECD4A0E73E57618CC4C3F38D4F313B45A7B936F30E25C976EA0EB2C999979A48515B6EB6B2E0208490A49076B88F60F0412EBE9515F4EA2A9931209965C113080482351BB8B5FC9E375381388057524995348094A12905C5EDD3AF3EA76B7AD1569559640055E429E8A1D7DC5C8F4DBD22F32697169B30A8C9484B9BE64BEB62412145DB4E477DBB1512973147BB054924B6CE398BF5F573AB08996140A0213AF56FA6E12A5DBFA504903513D01ED7BC5F2452544A0153D21200670DBEAEC4DDAE186E0E978E67C89F210EA45C5DECC433DAF72DB7EB68A13CFCAD3A5A6AA1529E92A7C949B0E4D3C671CE5AA5D0CA0B85532E85061A4129D3AD6A4B690A0A5909BC50E312E555512E9BBF325765128241F0905DC0043B5FCE319C471FFF006E933261CB992198E999BE5BEF768C4566062ACD7F11DCF36F84FE180542432E642A12B2D9AB98F24879AA74C4AEB6D557956679E1F00844B4BEB6D16485CD94044A9756E35AB56BB68EDE70AECC785EB24CE34B327F773254A33168EF4B258CC2EA04A0974929B950235B46AF768BC715752A989932D0524104A4EE49B58866D58EB6F5DAE3855E1832D7848CA3A1653E5D509994453D9955566B886908A95667D0D3499D7669E404A5C6DF9842D4010094AAC7AC7CD4FC4FF6FF008D71DE3D5C69EA1465CC9CB00266950604EAEA3E10001CC0B08E9EC22B2A6BAADEA12C92AD1890972FE8EFE9A45D532A2E82B5DD2000128B0484A401B0005C026E4F7249373B468B56D7D52E795CE49CEBF13390FD5AEE7F68CE952912BBB4A2F6D459DF41B8B6BB3EE22991A9640B8DCEE7723F76FD22D7366AA6A8A893E44DBDA26BF8401E65EED7B6BCF7FEE5EB93D3A0B0B44B4A9482E9241F3E7B7F8D2242E5E720BE9D59CF5617FBDA211C44C01801C801ED08473084210842108421084210842390588235041F6842270A858E5E8E3F58441448091CB4AECE21CF36A162D9240F291D751B8FC22ED874D98B44E23C2A005C12E4B1205C917BDBCA2DD59878AC9929667AE577649CA824050B72E440D7A0E6FC09B9454E2669332A438CCDB856E36F32D3CC68B2D0A614C2D0B43AD2D2B21416955EE3A758ECEECFBB49C5B84315933A4A8FF0E6209254468417370012CDD3DA1574E8553894C1C25B396CD6003BEA79B102CFB8023029C7FF00820E57F1035B9ECE4C849A95C9FCD7B3B32BA55367572946AFCEB87985F999671D70216A746AD2D29A4F9D564EDB7AFBD88FC66CE9586D2E1D8D193514A132A5A93314833102C93DCA964997BD810924070A64C5061188E23C3D522751D5CD19561565902C5F40C08D1DC1E91AE6E6CE4A71B7C2D56A66899DF91D8A714E1FA638F4A318C70DD2A6EAD499B62557CB4CFAA7E841F61844C213CD4A67DC4BC02ACE2750508DF4C0F8B381F8B24C9C46871DA742AB25A2A154B55365CA54ACF9546589A4A24AD482ACA72A8BB12924398DB5E0DF8ADA8C2A968A82AE4CB5AE9D0896A985D4A2520024DDF63736F3B378B35C49E0A07955893AFE1F7D1B2A5EA544A904376D941A75B93FB54A48095A8AD6A0ADAF78CF918160D3E489B4F5D2A79525DA4544A9B725C3896A514B8B8701C36C6362303F8B4A09F29299DF874822EF6E6FCAC08D069E61E2A3DC4AE592104313551AA3842425993A6541BD6A51B04F31E954A13A4EE75293709291E62045A6A787095293FF00A16254A9B2D0A0967B254A04B5DEC6DA39BC5EEB3E25F079B4E55227C8134870124B72D73374671B5CC73A878D7363346A4D50F26723B3171A54262C1A7E4309D7E7A9E8BF42E3F2726522C06FA5CEA7A98A79BFF11C0291559896314B2912DBC09ACA75CE7701BB996B52DC394974B0BE9AC74D7177C4DD5CA93365D3290A2A49CA7311E999C0D1EF61B6BAF77E223813E2372B7271ACD6E2EB1527010C44A44965FE4F61B7E4AA58CABD529D713F07CE92A47C7BEC48C934F3731506664333E52C4CC9B67E3D21A191601C59C31884854CC0EAD152A41004C9E04B403943952A72532D09771996C9DC1168D34E3BEDA788B88A64C659961454004A8B92E5B424F2D3CB6B6C07E085E17ABC83C1349E2373568725FF0053316CAB8FD1A8D555CA3F3384687372A934A7ECD2CCD4AD61E6DD35408995F39B6E625D0EA1252511E6E7C67FC41E2986E2133843089F2C50AA410BA8A79A41993485778B202F28292320CA908294029725CF50D18AFC5271ACAF9F37BC0A3E052890403A02FADF35C963CAF1B23B6DB5A1B482A5A92A2B71E24799452902E364D9253B103512772768F11F8C2A6A2BB11A8AC9D5D3A6CC9D35531CAD4540AAE475FA6EE2ED9F502C212121203A024160483772EDB8D6E430B738AAB4A0D936B7B8B6D7B77DEFB74B763D7D311A7130A8CC9B3573521C842D448DF63A7B45C3BA5175198B06E4016BFD4B9F96F78A4A6D2A02FA82D26FCC6D6B6966DD012DA9208F9DFBC51A55397309CCAB962E90A480E5AC458750410378A79C0CD4E42490189B9670EFCEDCBCA24710E2C04A74DB6D576DB5F33AD8381695051049B2882AF31DEF19970ED6D5E153513A9EAA74952492C85948049F37B1E5E5A452268D21947C4FCF9B8D89725BA5BE63C7B3532172973A28B3987B3570061EC7149A88532F335BA7B53536C8536E36932B533A6A526DA02CFD94A4D30D15045D04A53A767BB39EDEF8DF84711915785D655552A504832D73D4C94B87219693B024BED7E711CFA644D97DDB64E643BEFABBBBBEFE7CA35EFCE5F02EC7993598F219FDE1FB996DE0AC6B86E7A66A345C335D144AA536443854EFF2E935D6A5672652D9B2186B9B306C2C56AD898F563B10F8F3A15264527194AA4953A6E44CC9E0A3BECC01B925452544EAA5824DEEED18662F8610850495298E84580BDB4F20361BC6CEC06DD49BFA98F9D14AD4ECEE0D8BEBAF3D63B273A79FC8FED118E6665CC32970DAFA98E4106E2112E3984210842108421084210842108421084210842108471E650A710C8427ED19996A6526E06AE4858E5A8122E85F32EAED740BF68BB61B3049EF265B310C92A7B0D490C6C6D677F4895365098CE4B00A1976254CC7D08D1D8BF48EB18E30450B3270C624C258C64E5EAF47C514C9CA1D665A6DB0F4B5469F506CEA5160A4A5A5CA38DB6A428042ACA5104D8C6D6760BDAE54F09E3945FF0050A96897365E8583670C5FA337AB6B18EAE9552A6B84304F5D1AE1D9C9B3EFF511A6A664609C7DE10DC4D55703D75BAA55B84ACD9A938AC275B71976A14BA24FCE4D26652DA1F934132C196D6F2421F55AC9B5B6B47D30FC3176F787716E094A9A8AB9736AE5D34B3365A94332D094A52169B8056EA1DE26EA24E60004931D91C33C4EBC2C4B41514249005F42E1D2AFA0BD886D5A32A542C4987315D1E46B187EAD2D55A3CD4ACB4C4A54A5DC4AE596CBAD256CF31D49D0D3EA6CA75B0E292EA17A90A40525406D950710E31595B30D3C84AE91730992B1E20524821989B00CE743B46C970E71E512A549EF569CD9124BA83070C75B7316EB156B15CA451E913D55AE4E374FA4D3DA5B93550997D1252B26D3682EAA6953AFA9B612025212105775055D208208CAF10C657494A5758132C250495125274724BAB636B807ABDA2FB8FF001C61A8A39850B438960FE600D8727BFBF3DEF189AC518EB3CBC49F3493C35709626A9196B4EA922999979B8DB4B6E9D354B92704CD45A66AB37FFA3743CDB46500925975ED450C1E6AD263583B57EDAF08E08C1ABB119F552A5AD1256512D53521473248428A5C29214E169CCD9810402088D4BE33ED09550A9F4F4F30B296CE97D943CDF5637E6D711B4D7059C17E59F05594D8632F32D68B26ED7DB6173B8D71B4EA10E54F15555EE63CE22696AD2FA1A69C2DB722590CA501A64CD17D21DE67CE1FC5CFC4CE23C698E5451D1621344898A988CD2D6B530CCACA02525432BDC802E5EEE63AE25CC9B891CEBCCB7006439728F15D6490E4E5240BB30B0DE2F1DD6DC74EB0B09528EA5A6D6B2AE491702C4024F403A6DEFA188A9AA9922657D7CC5CC24A9414BB953DB7BE8C18B1F9C5C138722907788D478ADA1D35E9A69EEDA5768143642D40A9573B0EDD00D875EBEDFDF19ADABFC5CDCD942427C23A8D47C88FD86F5B4B315345DCE55105CE9707C8EBA8F68A61275DEDB5CFA77BC51C574548421084210842108421084210842108421084210888BF617B7CF6F7FF0098ADA4AB14C160B32C8D4F27BB6EDFAC7043FDEDB8F5E9136B581E4294280D94A4EA483EA53DC7A8DFD62B92153BF892CDF5B33B1DEF6BB7202DAF3A79A82A0A04383A3DB7B5C68E3D46D6B450F86635175B69B5BCAFFDC33214E15F75724A540366E76B8D811E9B4EA7E21C670C5B4AABA8920365285B04906C483F987449B45B66D29538CA2EE016D41E4E6E7E5D39F5BAC52A9D57957A4AAD4D95ABC9BCE2D2F536A72F253ED2DA24FD9A5136CBD2A5B009D9D6D6E5AC4A89BDFB9B867B70ED0B0A453CAA6C527AA9E58012BEF9603002D94A811B3101A2D69E0ECF34D477EB41984AB2A54C120DDAD77DB7B00F16F188B82DE13B1ABEFCC625C84CB89A75F374392F4454B3EAD7E673E2B92FB729CC52EFA4CAB4CB6537BA09E9B01807C52F685492108562B549530702AA6A5F401F2CC0EC0B0D80B33697793814DA74909A99A02400095020EB76D75D7CC3F38F874AF0F9E0CE86EB5354EC84C01285B710B0EBF4E43FA55A81DD332F3AD104F96EB4102F7002AC466749F13DC71894DFC3CEC6ABD2952144135D3AC425D9CCDDF97563637A79B2EBE4A95DDD52946EC92A0C6E5AD636D40D437A4778C653D913C2AE5E631CC97E838372FB0BE0EA62A6E69325274AC38E4C25B42396C49CECC36D7C54ECD6A4265256596E3F34E38D36C36E2D6906E1D92F1EF693DA4F6812703AF15F3F0A5D5A91DEA7BE999A5A4A8E677585064824DECEA360F188E273F1251266CE5A9249D4E8072DB561E7EB1804E1532DF1EF8ADF16B53E2E33C68AEC9F0E194B5B7D193B84AA867E9F295DA953DE54BC8555D54C3CD30B6D87D4DD49728F8D53932D38D290ECBBC9615BD9DB9F68D85F621C013B07E1DABCFC4788D34B15F37349989A79250850A79672B89E56099B3104E54AFBB74CC4A9A8E8294CF9A89935CA125C02EE54E4124368CECF6B66B8D767490A43122DB4CCBA39328C21B6A5A450DB4CA659865B436DB4A5348421FD9014DB975E864B6CDC06C253E20F687DA5E3BC4B8B4EACC627AD7356A52A592BCCC87569989D4BB005AFB80D19AD3D2242032580B66B5C37EBA1B8368FB3A5211E4F2116011D6FEA493E9F38E99ACC466D52C925C6EFB972E472D98F48B9C99252058BB8DDADB35EFF003893ED3F768E69CB0502F724BBF3B1B746F9BDCC5C10E05FAB3BDBEFDA2A44E099697673D3F416B0F2FDA259412E19C79B7EB1305102C00FCFFCC3F14502CA0E2E05C1F47864568C18797DF972E9112B24822C2C6FB8D57D88B7B75FCBAC5CB0FE28A8C3A62E64B485A94928BECFB8B8059B9DE19093716D0E9A7CFCE387CA086A60B2843732E2B63756DE624AC5CE90A02C537DB6DC18A5FF0077C62AAB454A2A6A650CC54D2A619601D406B59EC482E6EC629EA28913CB1B0E76E5A335FE623936B6DE9B7E116020A5446E0B7B189998FF004A9FCBF5FED088A686500429272870A0C4173E51365A83310DE7FDFE5FBC225C4D84210842108421084210842108421084210842108448BBDB6B7D7B1EC46E3F589F215E308760A2DC989FED68446E556425412A23EF1B5874BDCD80B11717E9BED6BDE32292A9B86AA5D54A98525042832803B11EB7D2FD7489536521692543AB8373B5B9EB76D3CE3C1F881E1CF2E7899CB9AFE5AE68E17A6620A0D52594CD3DC9C693F13419A524A533D459A16704D22EAD162E8DCF93D3707B0DF897C67832A69908AE992448992DBF8852084AC12F70E0E5BA48D39DA2D73C194AF0E636BB073616CD6F091ABD8EFA9BEB558C3C1CB8FCE1C2BB3E8E0CF3A64717E017E7665F6B016399A92627A992AB796B9770BF3D312AAB308525255CA08DEF609B01EDAF66BFEA3DC128C170EA2C4E7CA15C990844E9EC184D281994B400EA75386490CEF76112D38D575125265CC5E500B3925C3116218379BF5BC56C29E0F1E221C4255A495C5B67B51F0C65DB4FB4E55B0860CAF50678D669A85875F9579CA53AF3B2CE25C1F0FCA76EEA9009BDAF141DAA7C7E70F4FC26A666155122A27AA4ABBA59590896A0C52B4A12B492A0C1B39286B292444A9BC4F89578EE15326A41B13E2B8DC13CBA8B03E71B1970CFC2F64CF0B397F47C0394D84A9B86E8F272ED3535352EC876A75A9C424F3E6EA936E6A78A9D7829E162DDD5A469B794F8BFDB6FC58713F1C4FC428135D36626A27282D7DE2806CCD60141200D02521800E368A74E08BAA9A26CC2A66CCDCEC092E41277DDDEEEF172FCA50792B07C840B0B1B7D3DFF001DBB5ED1A755D366D6CCFC656CC33567C5E239B52E5F7B824F9B0117BA5A4974A82946CEEFAB9041F4760FA9772758811A4950DCDC8EBE877DF6E9FDBE716CABC495552D34684B2010033A5EECC5C9B59BF78AD2D312DA8D34BDF6EBAFCCB40282F71FBF975DBD3F2DA2DD3A9A6D314A66800A838B8258F36FBE710CB92248291B9727993A91E7FA0B3888C488990842108421084210842108421084210842108421089828A6F6B6FEB0C857A025B937DED10A9452CCD77D7D225B12401FDB7FC7FE7AC55D3D5AA9BAB16662772EEC762037D60E950B91A7B1DFDBEED1026DB6E4F703B5FBF4B5F6E8627CCAD953537961CEB6FA173E9CB68E320E67D58FE913F250AB13626DD48DF7DCDC8EA3F6045322B6A81099648009602C2CF60799F3FED466A2B53372A12E8059CB80D7E805B9BFB448436CA4DC0B1BDC8EA0F7F5EA7D80F5DBA64D83D1E3B5D31024B84A8D8AD441236DC339B31DBADE2298AAB5A5DC07E45AE46BADEDC85CDDF58E8198798582F2CF08D7B1D634AFD3F0E61BC3124BA9D62AB5479B6A52564DA5252B1A9C5B6954D3EA5265A45AD44BD3CEB0DA50E29610761FB3FEC6B8DF8CB14A2C3F0F9530CC9F3104CC40504848214A054EDA2487D376722316C4675461C17573561694120A52ACC6F6D01F5B79DD9E357FC695FCE7F1ACE2065F0765E9A8E12E0CF2A71507EB555756FB4D633939098B4F054C28B489B9F9F529C4B52884A8D3C2D0A53204B18F61F85B0BE0DF871E01973B1E9743278B461899A145283534B3662000B55C9CF35044C4850BA1692C5DE30D9DC4F2ABD650259C854012124051DF57E4DD407711B3C657E5A60DCA1C0587B2F70650A4E8D85B0D48C8CB52E8F2CDA5B654E48CBB2D227E7DD480B75F794D098754A5242D6A248F35A3C83EDCBB6AA8E37E25AF12EAA7544B35534A02D44A194B25C9D1893A25801A002330C0A4A6ACA484A92E960C9BF422DB0D1DC93CC47A134E25D53AEEA529C75616E8B7D9256129404B1FFC410947F52BCDAB7EA06ADE34AA99D5095D410094BA424B86BF5373716B466829BBA4E53F94593719998139C6A144BD88059B9C56E91681254E1D9BA1D3CEDF4F78E42002F72DCDBF40211C99850A641D0DDEFF0030DEADE4F052882000FF005D624F3027CA373DB6BFE6638EFE61373AEA05BF788E205449B276F9FF007F9443989362CF7BDDCEFABB6E7FCC2264A74DF7BFD3F7EB1514EB95216F3466074B726F5B6BF77E0902E62622FF0050444732AD4A59120650E58871EC1FCB5F268E33A79FC8C525BA1D2082494800956CA24775000589B5C8B017B8B5B68BE0E1E9F4A8993EA82913A54C53CB506F10BB317245D872D758B7D2D52159430B68E5C74D39BEE3F78A8D8BA53FFDB4F6E9B6F6FAEFF43DE2C15F5B36B6705CC96841420212109CA1924B66726F7BDC08A998BCCA0CC3E9D1F523C873D7488C51C4C43BEBE7D628A42AE08E97DFF7F2F68E4027627CBFC44D8AD1C6908421084210842108421084210842108421080241716221089866CC5062B510CDAED088DCFA984B9B325282A5AD4953BBA490621284A9DD20BEBD621CC52D646FA8A74157F52923A02AB0245BDEDB0BC64F4F8D564A423BBAA9B2C8672998C7AEE7DBDA203224905D093D0A411E637F4EB6E9C654903F746906F700800DFD8587F7BEFD62A66710E2335395788542D25C10A985AFE8621122402E252411FF0081FDBEBFB41B94E5282B6B0BEC4FA8B6C3EBF80F94592B27A66214B242A613656AA73A5DBECFCE782D64B81D0103E968E4DCFAFECF58B499B30820AD441D43984220D348422252D6B6CCA2A60C1F6108443084210842108421084210842108421084210842108422346705D009E7671F77896B4A94D96DAF2E9CE11592909981A62402747B6D73E7D0FB44210A60E2FBDC42277FB785DD0480C4B5806E9AFEDC9A2624102E6E4BFDFDF947157392CC2CA1735CA037097125C0B776F2A402836BED6BFCCDFAC745864CAC9C6521255350404B6A482000C01B9DF9B7568A69D572E5A4BA5266074E60E0A53CC8721EF73D46D1E419D99FD96B905806B998F99D8AA8586A854D975FC43530E264EA552F21537254E44CCCA82A69F521210A4B2E5B71CB51371B77D86F623C5BC6B8AD253CEA09B2A88CC4242D32D614B482E0A544313670CE59F9462D5F58B7294CD98400493998E846C19F95AC1EC358D6C2AB5CE233C6CF353FD3F4592AD650F04F802B613579F6DA9A62AB8C69D2531A65855671CE54B4E4BCFD404B1684BCA31A0ADA5EA58410AF58A911C19F0D3C26AAB59A2C4B89C513675AA5CD461226000A9591B355B2B2292A5012CA94152C94BC628535188D4090B5AFB951202560BCD5072C39A433DB96AD1B25E44E4765E70F196B43CB1CAFC2F2F86B0ED0E565E9E1E94436B99A84D14244CD567DD43485294F3AB71D5158EFF7AC2F1E51FC40FC40D6F1C62B529915F31699AB5A94933592A049536BD58274660031022F74B804B925CC84306B6516D2E395F5D753CA3D99C68A53A0AF99A4692BE9AEDB6AB5FA2F622DEDD846AE77A9ACA75CF5A477A412546CA763A68E6FC9B93465D4320D325252026D6CA000DD6EFD3D2FAD8C0D2142D6F37A7B0E9EA3E5B7E7187CE528AC82A516275512753BFB45DB395804973A6BD7E515E251528862A24722491ED08471084210B0BDEC2FEBDE10842108423199C01788D655F189845AA63EE8C1B9C78793F098D32F2B0F225EAB2F36C2432F3F2D2EEA5B986E454F36F25130B6960A90E26C4B7757AAFF0011DF0B588F0FE26BC47069099F84D6AD5369AAE97F894D3D2A39CA513100254BC8A4E64804A49CA79C758E1F8ABAC0CD71AA6E080E5FC3721EE3E978C95A5D0871D966D95CCCC855B9216197595292950E73652E11B28280B8B8F35FCDB68971676733707A94CA32569564CCA7053E224E81AFB682FD358CCE967F7D29330286505CD9C948D46BF3313A1C0496CAC29E6EE1E4A4795B26C52926FD7AF6E96F58EA7AEC3A6522C8292C3576B731FDAC5B68BA4B2E5D98338BEBAECDEBFADA273701207A81F48A7956B74F320FD98A94805DF6493EB134532B53E67EB10C238842108421084210842108421084210842108421084216B7EB073CCC210836BD75842108421084210842108421084210842108421084210842108421084210881B9D877BEF6BFA7E7BFE5D2321C1A9D13D1382DBC2035D9DDFCFEFD184800924001B52DABDFD396EED688DB4A929B02544582961B4926DB6B215A7A1B581F90B88933E8664C9C25C8CDF9AF9415313A68C6C1EE1DF9BC534EA8421248371B0D6CF6D472FA18A6B71286CA89B39AAC5873ECDF401B15B6D9D466120DBA68BDC6E2E2334C0380F88311C9DCD34C58514FF002A8B0537B937243ECD16F9B88A424F47653BFB9E8DADC6F668C6C71B7E24990DC18532625AAD567314668541B725F08E0BC31CA9EADCE579DF2219A853505D7E5DB438487516529B2424A8DAF1E837609F0915BC4955438B56484C9A5909454D7D4D5112A969E524256A5CE9AB494A40D81D4900177118756627FC55E656AA20252495172400C0172F6B75318B6C9DE0DF8B6F135C6F4BE2178DCA954F0264E4BCCFC7E10CA54B8F482AB14D98744E4A2EA0C4C0B065284B687580C15ACAC6975001076FB8EFB6BECC3B18C02770C709CFA3A8C7A4CA34E31497265A0A66CB4196BFC2A92B5158510A026B90A9649C833068A4CA9952139D395240010E4926C407DC0D40D4100398D8E32EB2FB0B657E12A260DC1540A661FC3B429514F92A3D3659B9690618658530DCCA5A48E6AE69C1A56E38E3CE24B8B5A8206D6F2A3B50ED8F8838BA757C9AAAA98B9559356B04CC51042D454F72C2E5DB42CF17DC2F0BC9532E6AD395282081A10400E2EF63B8E4EC4477566ECA4A5B0528524A1C03AB8140EAE61DC1363DADB7CAF1ABB594535530AE6AF3072B0A55D40820D8BEAFD0A58C654B932945C806E160386045BC3BDDB99DF47115927524036B74F90D80F71B0BDBBEC7B889132B152A51952BF99EE090EFF7A732FA0BF0500F4F26688E909D81BF7EB7FDF48B5BBB9622FB868241018F3FDA11CC450842108421084210842304DC77785854ABF8951C52F06D597F2C3894A23BFCE1F92A4ACD3E4B17BF20AE7312FCA95D0B54C3A1B0C2A6541DD49281C8F212AF727B07F88EC2F8830095C25C7EA4E2B854D012A95302664DA45A8009A8A45AC9C93259016031CC521C8D4750D4E0D572672A7232A569DC12C43E8AD9BDBA3E87E9F049E295298D71149F0EBC5D5393947C40D25C4D1CCE54AF252588E6DBD2C30ECABF3296545530F25615AB502A55C28EAB0A6EDABE1E66714A57C57C0D3A9711C01526CB9601A894B56650973A5273649A9053E10A20862F7B5CF0FC7E9E807E12AD2B4CE26C19D376B876705EC1839E8C233712D312F32961722A6DF6020F3E6658A5D65E2B092DBDCF0402909B924022C6F722C63CB4ED1783B15C06B6748AAC3E7CAEED4A056652822C58EBE435B7AC669435F4F5233A54CED941D9C7E57EBAB163A3C72C1D64E904A1241E6EDCA57A84AFBDBBEC23A5A70FC3AC80524B90425CF99B0F2FF117513000E3F981B6EDEFE5EF13C521B927993114238842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842234CB5292540800733AF940D813CA11044B33072F7B7EF08E402A2024124E800731019E90D6372DEBED08AE9787CE5A5CA908B3B2CB1FD2F118980EA08F9EDF62CF7894AAD7B855877B6D688E561553366776907FF009149CBEA5FCE26800E8A4FA98A8D3ADD96B52AC940054AEC8BDEDA88E9DED6B8B83BED19451F0A62E854B4D3CC9530CFFE594B248361E26E9B6FD22DD88D4A69528CDFCC4B7566B8DB7BBFD63CD734734700653E16A9634CC4C5948C2986A9726ECECDD4EAB30DB4D372CC805C5B6D2D6DA9D50D413A42937241BF68D99ECB3E1FF8B7896AE966FE0CCD96B5218774A2F988D2DA800B0D3C8C61D578D480E0B80FAF32DBFAE8C1DFDE35FF00CF5F141CF9E2B7174CE44F86B60BAB57BF99BAE52B15E6C54A4DE44A50A58AF92BA85326A5B98969B0A25C428BB7D2949DCF4F513813B12E0CECE70A9589F68732970F299299F2280A659ABAC32C0250A4AF2F72862332FC641397217262CEAC45554A52648510EC56E72807CBF3173A37AF2BA0E0CFC23707654575BCF0E25AB7339F3C45CEA113CEE26ADBC154DA54FCDD9F9D6A5D8994CF2A64A1E3A5133CC972B09D5CA4EAD23A37B71F8B0C368696B384F8100C2F07A5993109A1A4697214B1993DE2D4829EF16C5402FC36528B5C34DA5C26715F7C7C6B533AD57241BB0E439F974BE65E464C49CA3728D36CCB30D1429A61A482DB41008084582004A76B5922C36B1B47979C55C6231EC426D7D655542EAD7316B482A25249249B1D05EE1CF521C4667875114175A45EEFAFB6C4F33BB691CC1BBCA7144A94A1A6E760902D6D237EC2DD46C7DB7C46B7109B369573497989004B62CC2D7E6EC357E9D632232D9032F808E8E0BF3D1B7F5F48AA6C6FB0DC58FBED68C567564F9C085A8B1E4EE6EFABFDE9BC4BF181B2BEFEF99EB055881A45AC2DBF436F503D7A1FDDE950188CE6D9812D761BEBF4FAC471017EE00FDF7F78AAAA3209477249F0F8BCFF0043D3FB422314B084210842108421084211C47913328968CB8750C4B952E4DD49BCF493AA3A96E050EAD9579800B174DFE9DA3C11DA0D6E055B2809C432C7892A2DA0DEC5C6F60D16399462A01CE904104104302EF666E5A863AEF68C74F1AFE1D1929C68619997F125265305E64B0CAD34FCCFA1C9B3FCE5B54BEA7641DAC041967A6651A9871E5A00992A6545E5252B2BB47A0FD8C7C5654F0E63347475B524E1AB484CE97399729626F86605CB52824BA40177B3EF161C4B8724AC77CA4174A6C45988F7D1DC3EE47531891CBBE3038C9F0B6C592592DC65E17A967170FA2643184336E9AF4E4CBF4FA5B6E06A510ECCCC4AAD7372E96815BC87DD9412D61A39FCD568DDBE38E06ECC3E20B84E7CDE14187C8C7A6D399A285E4A1539450A33552143F2972908964312497043C62DFEE5370C9C2592A0805B37F4F225AECFBFCA3634CA1CE6CBFCF2C1745CCACB5ACAEB783EBD2CDBB4E79080DB726E388438587901C5EA5A0287436163F4F1C7B4AEC1AA7B3DC531295892532FB99939D0BFCC9524B04ABCB4DEC488EC0C26B8D64B42C28310EEE6E96D2FCDF6E4D68F5B8D5E9A90898B48B84A881E86323844B84210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084226194B0813329C877F523DAD12D44E6CAF62C3DFFCC41448B585C9207F9FCBE5F38E64AD2850CC1C1B5B67B13F7A6B1CE44F33EE3F6890389248BF4EA6FB8DBB81198D2A29914E6A654B0B992D39C24072543460C5EE2F7E9B3C4464240CC4E96F736B91ABF3F789B526E13A93A8F417173F217BC500A2ACC6A7664C99895384A529490080761CC9B3EFB691473A6A653B906CFCB4D40D5EDE51F0310E22C338529D355AC4F5B6A814D946DD7A6A6DE98659A6252848257522FBAC1B917D4108780401B9E83BF3B3BEC838BF8AA6CAA0A7C3E777538A1026192A03C459CA802598817DB578B054631DD29C076248516B36E356D1DAC35D58BE13F89DF19FCBAC2D517B2AF848C1B3FC42E774DCC4C48CAD3288DDB0C51DD41434CCC19D6DB9B0E19A75C56A0A9768012DB2957DBD19EC7FE0770FC0A9E6E3FC755D2682966290A4CC9CA493298152B2CB9990AD6014B27C20BEA0C58AB7165D60CA1D653B6AE058126ED7D4B13A88B74CB9F0E9E2E38EFC4F279ADE20F9975AA1E03538DCFD2F263093F34E229E95A83A6467D97DF919671AD1A5A713CADC249DFBF62F1276FF00D9976234DFEC3C2B8709F3E9A59953718AA1295553968F0A574D4E14A146CC4828A89A4BDC0CAC6D29C3EA6A56A54C6D4E49693E1CBD567F306E639467BF23F21B29B876C1B2B80F29705E1AC2986A5586DA5A24251A945549D69012998989C665C3AE4F2815296853453A96AFB5D813A13DB17C47D776933679A4AD548EF0ACA8AA6A92F9897B827561E768C8E8F0A12825410A50703C2916EACFA37577DA3DA5A012DA004AD20252025CB7300B6C17627CC3FAB73BDFBC69FE2B8CCC9885266CD3366DF32CAB3662355137776DF5E717F9549959830DB60FB8D2CFB0F9F3A96DAF6DBA7B7CA3AF27D419B34A89D0923ADF5FDA2EB25052DB65166B7ADB73AF40DCE292479BA6F6DC1E82D6DC75FEDF388BF12B328CB7D6DA91ECDEEC5BE422A8AACC4DC9D39EE7A003D6FCA2AC52C4308421084210842108421084210842113BAAF2DAF7163DC9E9B7E1FE2F096F2A692FF914CEDEEDD40D2258225F88EA2E06BA72E87AB72BC71904367981C2176D211BF41720EDDC93D37E9F867D47552154C85AE6995392A0CACCC59837F306B92EDA1B011CCC9A898854BC9A85329C6AAB337462FE7A18F3BCCDCB3C1B9B584EB583F3070A53F15E19ABCB2D9A852EA4DB4E30E0295243E10E36EA4BAD85AB46D7F39E9DFBBB803B6CE20E0908387574F3DC9065A9139799053F94A483622EC6C7CAD1855770EF7F37BCCA9F11D3505CB369B5EEDB5C8168E0E4F650E09C94C0D47C059714090C2F8469EB53B4F94906DB6D2CAB4A124292DA1B09F281F87A6F189F6AFDB5F11F1F54CE99884C9B366CE5297366CD2A54D9CA57E652945F328BEA4BB8DCC5750D28C3C22581A30CACC03E8396BA5981676B47AC47401254493A92E7D63294E83C87D211C47308421084210842108421084210842108421084210842108421084210842108421084210842108421084210842110B8BDBBFF009FF91F8C5D04F942844A206700EBBD987BF57E8DB7052DE3BE86E5DBEED112AB581D49480ABB884EB2DDC1015A091A86FD36EDB88A9C1387EAF1BAA97229D0A65A901403926E2EC059FCD9E28E7D4894012013A804FCBD48F47D5A3CCF1FE6765D658D15EAD63FC618770C5259D7333153A95499A63A89666EB79C7651056E4CA5B4A56A5326FCD00A3FAA3723B3FF00875C67189748A4514C9C1443A1085294B16364E52F62D7FDDECD558D265CB5BCC60907C2AF107D035EC473B16DE30ADC4178CEE0497A94E606E10303D7B3F731DE7CD3A9F352529312986D99E715CA65D66B0CB73B3CE10B5255C87298D4B90024BE94A894EEF702FC20F0EE1A6462DC6664E0F4A8089CB338CBEFCCB06EA449CC1CD8F856A473D098C6D58E0A9514A3C6A0481B07E4F71BD8DC73DDBC1287C0EF88D78804D358A78DDCD2AA650E5BCC38DCCB194B427E610FBD4A78EA32F3F2528ECBC8A57CB1A6C1C7414A8155945494F65F13F6D3D8F761F44AC338528E46255F4F2823FDDA726529299E9CDE2914EEB194029216548538578583980514FAD2EA394125902E6ED62417DD9B9728CD1F0CDC0D70CFC26D0A4E9B93D9798765EA09659FE618D2A146957AB15B99612AD0669DE4B8F20CAAD4E2D3A9E5DCCCAED6B6FA17DB37C62F1771904A70BC4268968CE14D354159491940CA4B000358FE9171A4C10CB273900280094E9CDC8767F2D8F5BC5E24AB8DAE5820F9DF43C56B5309F8765091FF00C408053E82DB5B6EF1A4D8D71CE358FD42A6E293264D52D454E56A51503AEC58B91EAF7378C92930D4A00CF97460DBAB66234B3DFA33C7201B8BC62758B9AAFE2254A4277492C4921C1FAF41CE2E0A969942E0300C6C068DE978815806D7B7B83D0FF9BFCFB45377AA54B4A4924D9DF7FBF2E7D227A65029045DC0B1B7B5FED9BCE00A8DEC41FC41FDFD6298A083A6E7D3CDDBEB111494D99BEFA44403705477B5ADE9F5FF0068823889A108421084210842108421084210842108137163D3A7A7E906B93B9B9884A52751D3EF6880007402FEA4027F1209FA472A5294C14A510340E40F605A20EE92F986BCF53FA441490A26F7B1EA9BF94FB11D08EC47423AC56D26213A8AF24DFF00F2621BC883CA273D9986843B5EFD75FBF26821B4212B4A4592BFE9FE94FF00F44F44FD04735788CFAC20CD090435D203BEE4DB778A7994E89A41512E342F7F27D5BEDE278A089E2C00E50842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842200006F607DFBFA6DE9B77FCA2AE6514E453A2A5BF86A2C0EEFAEDB73BE8FE90AF33166D37E7F6C79C757C6D2B88E7F0B57E430AD45BA3D76728B5597A555DC473134FA9AE45F4D31E2D04AF5A4CE9642C6955937241170765BB05C5383A8EB654CE219456A428720ECAEAA008218B3F2B3C58AB65CD9815CEC2C3A680B7CC06D4F9EBFD46F070CD7E21F14D4F1AF1C3C42626C74C22BB34A93CB4C3755AA2692FD294FDE51E9B982F48A29EDF2882F312CDB9F6683642CAC83E96CDF8B4ECE3817064D1703E134743894AA608A6ACA89722A2ABBF324256AEF179CCBFE2662928538043170D18B4EC30CECE26A94A049747E54E5D2E3551D2C407E66331BC3CF099C3CF0CB4B92A664FE5AE1CC2D51926132EED7D1489399ADCC2123492AAC3ACFC6A96413670BDAAF63EE34F7B45F8A4E32E2CEF8D6E223F899EF297914C49203A5ACC4331E6F6788A9706952C8CA9372E06D7E7CDBAC5CF25600250B75CD4490F4C2D4ECCD8F54F39C25C08BDEC80426C7A46A1F11718D562EB986AAA664C2B2A72A98A51199D83391D59C6A3CA32AA1A308661A6AE2CA67B5DECCC2FD7CE217290436A5320FDE4B0A2D2576BFDF4A2C14773B917DFAC60536A44A2A3209FE2865025C59F673CFE97B45D932501B3252ACA4949233104B3DC8B683488292951048008EE3627A7DE3D4F4EF14D2EAE64B5660947FF00502FB7389E92521869B3B96F2736D9DB560F0000161FBFF3F38E27D54DA86EF08B17B5874B696DBCE25CC40981947CFAE9C88E510D293BDBDFB8FD2DF9C494ACA746F6BFDFDED13124A4000E9110903A088BBE5331093E63FBB4092753118964B973BC7108E2108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210842108421084535056A041200B7A5AC76FEF7F7E9D378BBAABF3D0CBA562C93A90399E8FA9B1FA4460A72DC686DD6DEFFA69105A14BD212AD04282839A52B520A4829D285DD0BB94F982FA03B0BC5FF85D545226154F9E25E623F9CA496018B8206B6376E46242D0142CC0F222C75D77EAE2F1054BB6E73358534A7B77DD93519571E5A40085B8582DEB02C9D4DA896D56B1052488C97169585CE42AAA556A4CD4254520CD2A72A052E03900DED94383705F5A4994485019521C105C9E5CDF9E9BB6DA5C19012940756023A2804EB3FF00D8F7BFCFF531834D9B51500A4CC245C02492080EC7AF993A9B1111CBA508BB26DB1BFE8C474E7F3989205AE4DB62483F874B74EF707D2289787CC5172497BDDFC8FD3668AB094822CC398D40D3A96B691147426DD7F7F87FBC524FA73200248249D8FCBE87CB7888B6DF57FD05F57F489E29638842108421084210842108421084210842108421084210842108421084210842108421084210842108421084210843584223EED7FD26110B8F51F8C4041058D888381A9685C7A8FC639092AB00E79405F4BF95FE90B8F51F8888BBB5FF00498E58F23EC6171EA3F110EED7FD260C791F63118776BFE931C421DDAFFA4C211C142C072920084221842108418B3B16E7B470E06A40F584221EF11FD4211104288700B444083A1784431CC21084210842108422248CC425C804B18A65CC5A56C2E2EFD03D986FC9FD2220DBB03F317899369CA40226036764A9881D7CB7FF0011185A8D803EA2F112AEBE548FA6F13514730CA54E33D29C833652B2EA6BD99C1EA1ED13337FE2AF68962648AD5A080A621C5FF52EFF0064C705476497EA211553B133972A05F9BB81CB76F367E512CAD61DAE46B61FDBE4FCACF11DBB580DFE9EDF4FDFB5B26CF5CE3E3DB937D46BCB5FD23994B52CA9DDB676E9D4E9BE83944224C4E84210842108421070352D0841C1D08308421707A1BC21084210842108421084210842108421084210842108421084210842108421084210D2E3686B13E83EA9FC7FDA22FC42F62A7FFE29FDA0E06A5A2422C41251D6E09B7E7B83B5BAF4F94121738B252A528D980BFA75BBEF12D492BD3463FDF47035DD8FA44C12DAC12B525241EC7ADFEBD3D37B6E6DEA669A5AA96CA0850246FA8D7CBD5EFE76694EBA624E55282BA0B72DB7F206D7816D9B1D2B04F617EBF9C3BBABDD25B7FB31CFE2D674429FC81FD229E84FA7E67FCC45DDD4FF004AFE50FC54CFFDB57FF588DC0DAE36DBAC70D502D9556B7E51FB4540CCA00B1B8736DCC2E3D47E221FF51FD2AFFEA3F68E58F23EC6171EA3F18E1427904292A6DFC23F40F06235047A44625645FF004ABFFA9FDA3884322FFA55FF00D4FED088DB6BDF7BF4F68E1D693958806E2C7576D1BFB6B12165615F95F6040B3FCDF51F3BC44E816B2AE6D73DBA5FD6DFDFEB1C3CC55CA6C4BBF3D9ECE0B336DE71284959B9045EF720FB6FEBEB12EC3706F7B13F3FEFD07B44C4CD9A9041B0FCB70EE3DB7F7B4542539370CCC1EDE9F2F3844B89908421084210842108470C390F6842396034004239CCA6672DC9CB7B4211C42108E18721ED08472C06800842108421084210842205E83CFF004308E5AE1ECE1DF5B449412C0B97BDDF5BC4AA4DFA75DBBEC47BDBE7172934489D97C612ECF7D398B9DFEDA27A4A7C24B16E658E8C7AC100806FEBFD8453D6530A699902B303BFE9B1FBD6232413E1D36FBF389A29238842108421084210842108421084210842108421084210842108421084210882BA1F91FD2264A4E79884FF00516E5AF5DBCF68E46A1F988E3B6B595805571F4EC3E87A6FFDAFB8B97E0E4A54332C0F50C766BF96FD4C4150024A5BC232BF57B39BBFA73E51D2F30CD72568B313587DE4B13AD214B48490B71764937D0E1580761D1207B0119B70F61F87CC9D2FBD4A549CC3307B9D34FB23A9313A813DEACA5F5209B682EC1D98FCCEA7CACE9ECE9C7F4E7552CF4F95CCB6B50986D6DCB24A2C404923969209B2AFB58DBE71DA88E13C2AA80525196528032C84BBEE7507A137EA778EC0C27875388A0952012860599C72F4B6BBDB9C73D8E20316B607316C2963A29694E927D48414AADEC2251E08A004325C3DFC21C8E574B0E6EC79345EBFE13288632BDDFF0042639E8E223168B0E553DDF936FDFF00277FCFE10FF85503969674E482C5ACE320FA7CE38FF83C8FFDA1FF00EA8E627889AF1DDCA74993FD44158DFB91774DAFBD81E9DFA448570252E62404B13A143B7470CE7CAD120F052038EE880346517FAE9C9C9DA2A0E22AAD6DE42541F659DFFF00F431C7FC1246C847FF00450FDE38FF008523742FFF00B3FED1599E22AA41C4F3241829DEE10A5157D005DCFBFE30FF0081D390C5097246892033877245B778826705A424912D479B927E435DA3E99E240B4805CA5DCD8136E60B7E040F7B778E7FE03487FF004D3ECDF48A43C18F709581C8001AF7D4751F2D62238932403FC993D3FEE73FFF00A888BFE0549FFB52FF00FAFF007887FE17FF00F57FFD1FFF00AC4E9E24D0010AA484A8F4B1748B7AFDF3BF5F95C7BC51CDECF24CC9998494948B064FEEFCC1D6DB3344A5706AC28069BCF2B0D35170966F26F9C54638919353C84CC534A50B296F512BB24AB607EF5B63EE2D6EE3A97C012E5A484C84120153006FCDAEEEDF3BEB12EA3850C896544CC0078B41D5C7E50599BD5EF68F69C038D67717373534ED37E12525EC65DC56B027011B58A9442AC00FB85277F9475DE3F81D2D01CA152D6ACA4A909FFD3531F09D5CEE6305C4902996A4070C7A3060D677F9F3BDC47A5475DA9B3298300486F23100B81E42110C7308421084210842108421084210842108421084210842108421157452D136A1085B6520BDDB6D5F9F9D9E21507077E508A8ACA60951EEBC403B005CB7521DD80E9E8F14EA396E4E8F6240E4E2FD43FCA267026CAD21C0509D487824AA51D5752DA976B85249293658B11D46D6E6870CC4A7A8193266292A2D649CC9E4416CAE7935B523734AA9E527503762C4B73F26DF4D75DE06C52855D254A4DD6947DC42AE4593724D8A4026EA26E7D223C430EADA29894564B989528050CE18B17BE809B86E51554B34CD4924D815002DB11BFABF918845BFBB1FD27E7155087763FA4FCE108910842108421084210842108421084210842108421084210842108422045C103B8222396485A48D5EDE66DFE6391620F2222921AD26E55723F4DBEB7DA2A26098BDEEEF63A740FA036D39441500CDFCAE1C3176FBBFC9B483EC34FDCB8D2564A74D9449163EC763F845CF0BC427D04C0B5A8AC0FE51EFCFCB6D5E14D9A4060A29721F736BFB5F93EE3945A7672E5586F5E27A63284B639AAA925B4294B2494A99B252ADB60EDC80476ED63DD3C25C4E2B91329CE6409646472C94E6706E43DD835F68EC8E1FE2F95403BA992332940242C162AF7B5983DB7D22D45D65A404120A54EACA1011F7C1EBB83A823616BA9247A08ECBA7CD34FF00DC16B904DBD7426EDA476A6178B4AC492081DDB80439DC8DF987B5B7222A27992E2E97DE4D86E0F2557B0DF7E5DAE3D07D2F13E64A50BD9CE803936DF5F367F2B08BE2A58480A05C38B1DC7B6FF6F1497A1775595A95B95123727A920003DFA7D00885339831290536B9EBE7B6FB08A895534EA013DC051000243DD981E7777DDA29A5094DC6906E6FBDCDBF388BF1096B94D9C0BFDB8F5E6C62A15329C24114E492EC329F9B3DA26BDB74A520F6363FE7F7D6099CE43104EAC35FD6E366F38A7554485FF0C53B120DD988E841BEB6BB74D6F15A94E0B288B6DDBA81EBEF7BC4D336633B11B5C0FD2204CB945DE501E96FA7588210857F52C01DC116DBD361FE3DE39CE0302468EE406F73A7AF9445DDD3339091EDFA0814A41002B5A55B022CA5155FEEE9EBB5C1077049DBAC45F8C44A494E54A88199DD80E6E4301A73B5F62628EAE6D1D302B64121DDD81602F67D75DAE3CA3DC72EF27EA1891E96A9551BE4D212A0B5A16DA838EE92952528374DAFD0900DAF18763BC532644B5A5082149046641D1C31D8FB9F56263AD38878B68E509B2134C92B214CE7CD8916240D480C5CF38BDEA451E4E9920CC84B369665E59094CB06C6952481625761E706C2DD3B93D76D7EE21C515553A629198249B826F73CF5773C8474C620B35F31531242492EA6701DDD92092CDD5F6F28FB31886B016007202108E6108421084210842108421084210842108421084210842108422A2950A9934252ACA482DD6DF284401BAB49DBA6FF0087E978BAD32849AD952668EF5C82A3EA4FB3E859ED7768A69D604B681C7A97BFADBCBA45897890F1278C784EE15F1BE7360612B315DC3EBA1B32F293AD972415FCEAB92746428B616DB9AD954C97964BB6581A40178F41BE18BB20C1FB4DC628686B262A9A9D6B69CB42506714243A84BCE952412CC145045C13B88C7EB2A4CB4ACA402A00B3BB13737662C46A07CA3D5B838CD6C419E7C33E4DE6BE286E5D188F1EE15556EA6894416E544C26AD5291FB24A96E14A4B7248362B5106FBF68EA4F8A4ECFE9B8538D5585E1AE645299B25248016B44A9935292A648198801C8003DC0022AF0FAB5092E50E4B1243B3903CCEB6009DF6D4DCC8075142BCAA1DB620FD446A5544A994E48520D8B69FB6E3F43A45C056390326BADF4EADC8FEE35113F2FDFF2FF0078A235045F2BFA1F5FBE5E713D33D2A0F6EA1EE3D37FD629FCE24C4CCE7FA4FDFA42E3625491BFA8BDBD6DE91C3EA18E8FD3C9E22049D9BEBECD113A7B2813E900FB86F507E43488988D411E9108E6388FFFD9, '1', '2021-10-06 01:19:11', '1', '2021-10-06 01:19:11', b'0', 0); +INSERT INTO `infra_file` VALUES ('8448cada8c714e4ab61f521c8da21990', 'jpg', 0xFFD8FFE10DFA4578696600004D4D002A000000080007011200030000000100010000011A00050000000100000062011B0005000000010000006A012800030000000100020000013100020000001F000000720132000200000014000000918769000400000001000000A8000000D4000AFC8000002710000AFC800000271041646F62652050686F746F73686F702032312E30202857696E646F77732900323032303A30343A30322031373A32343A3135000000000003A001000300000001FFFF0000A00200040000000100000320A003000400000001000001C20000000000000006010300030000000100060000011A00050000000100000122011B0005000000010000012A012800030000000100020000020100040000000100000132020200040000000100000CC00000000000000048000000010000004800000001FFD8FFED000C41646F62655F434D0002FFEE000E41646F626500648000000001FFDB0084000C08080809080C09090C110B0A0B11150F0C0C0F1518131315131318110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C010D0B0B0D0E0D100E0E10140E0E0E14140E0E0E0E14110C0C0C0C0C11110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFC0001108005A00A003012200021101031101FFDD0004000AFFC4013F0000010501010101010100000000000000030001020405060708090A0B0100010501010101010100000000000000010002030405060708090A0B1000010401030204020507060805030C33010002110304211231054151611322718132061491A1B14223241552C16233347282D14307259253F0E1F163733516A2B283264493546445C2A3743617D255E265F2B384C3D375E3F3462794A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F637475767778797A7B7C7D7E7F711000202010204040304050607070605350100021103213112044151617122130532819114A1B14223C152D1F0332462E1728292435315637334F1250616A2B283072635C2D2449354A317644555367465E2F2B384C3D375E3F34694A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F62737475767778797A7B7C7FFDA000C03010002110311003F00F544924925293A64E929F18FADE19FF3ABAA48DC4DEDE49FF454ACD369FB3380796ED036EA74F26A9FD78C97B3EB8F55606C8F581FFC0A958D6E43DC037807B28C86505BB87D62EE9F91F68AEC7BEE6B5CC6BDC6480F11A4A1FA7D77AB07DD8F8F93934564FAAF631CEADB03D477AD77F315ED67BFF48F540820C1D7CD751F55053FB1FAB6EA8E4BFD3DA69AF09B90F26CBB0598CCFB45EFF45EFBED67E830BD1B1FFA1B327DFE95753D002D0644079DB3A5755AB26AC4B316DAF26FD68ADE20D83FE05C7F4767F61FF4FF0047FCE223BA3758AADF4DF876B2D01C4B4B44B431AFB2DF536BBF44E6574DCEDB6FBFF4562EC7AD136756E977D8DFB3D565B6DA2CC3763D4E190FC7AB1ECC4C6C8B1EFA6DB30EDC5F4F333A8F52CFB55946162D5F6BA2947EAB4B68CAEA05D6E43AFC6C4B9B6E28A7631BA6536BEA18F5E55F6751CFC1DFD532EAF53D4F4E8C965D93956E374FFB2E3D6FA0B6DE4BA6617D6B654DCBE9D8B9FE9583755763D76ED70F169AFD962EC3A17D64EA76D96616774CCAB32714B5B9365143DEF66EFA1F6BC6637757B9BEF66CFA7FE8D65F45774BA0FD5DC3774F77AEEEA15E583F68792CF55D87898D9AF69C766E6E6BB1ECCAA719DFF69ABAECF53D3CA62E7F17071B3FA8E3518782E155F6D6D6E2073AF7866E69CAFD27A75D9FCDB6EB5FECFD13130C227AAF8CE4351B3E96329ADCE6B032C60225A2EA6DAC3B69F7B7F4F535AF757BBF495AF37EB34578DD5F3E8ADBE9D75E4581958101AD277358D6FEEED77B56C3BA8DF4F5CC91439ADAF1AFC8A716AAC06D2CA197595B71E8A2ADB4D753FD365967A6DF52EB3F4F6BEDB150FACEFF00B47557E735A5ACCA6B09932058C6B6BB5AD77F65088119505D3265004F47296AFD52FF00C55748FF00C34DFF00A97AC995ADF54BFF00155D23FF000D37FEA5EA4627DE13274C8AD524924929FFD0F544924925293A64E929F09FAEEC9FAE1D59DFF0CD1FF8152B01DCF9ADEFAF0E23EB87578ED734C7FD6A9584E1EE07B4C7CD3482B82C0CB869F246A6B0F3B5C246920F1F728B29703C401C9F056B1D90F1A73AFC934AE0750D9C3C5ADD680D6001C35811C15D0E374AC79935336EEDE06D1F4A3E971F4952E958FEF693C49D7E2B7EB969E254323AB6B18EAD46F49C7F730D4DDAFF0073840824FD29597D6FA5D54EE2D1B77341606E9A8F6ED11FC95D334FB493A203B1ABBF21B65A37067D169E1464906ED9B844855393D1FA1399563DD60DAF68690D8D23F74FEEFB5687D60E8746474DB2DA5B16D23D481DE072B535EDC4A85969D0763A1F81D101908365470C786A9F2EDC473F72D5FAA07FECAFA47FE1A67E47ACFCBA855977560406BDC00F20568FD516FF00D95F473FF7699FF52F5781D9CC23523B3EF6993A6450A49249253FFFD1F544924925293A64E929F05FAF263EBA756F036B47FE05542C62241EFBB50B63EBE83FF3C7AAB876B87FE7AA56383EE1E1FEBEE40AE4AE2E207808251702C7D9696BB9747E2546BA9CF7348D7C63556FA7623EBCA24F0D2224729922297C626DE9B0A88EC0761F2F6AD4656EDBA842C0A9A183C5690600DD79EEA06E44506ABC32B682F78682A01F48FA37327CCA3BA9A277D906741BB80AA64D9D348F4CBEA6DA4C0687B43893DB6EE4C902BC16C8C80E86348772496F1082FCEC4F53F4B686469E253E3E2399510C044F8F654EDCBE97D3AD1F6C7B2BBEC05CDDE1C4C03B67DAD7353575E9ABC8F5EA5B5758CAD9AD56BCDB518896BFDDFF00548FF545B1F5ABA47FE1A67FD4BD5BFADF6D195660E650439B657657BDA080763B737E906FD1F5551FAA766EFADDD1C0ED94CFC8E57212B01CDC91A9C878BEF8993A65231A92492494FF00FFD2F544924925293A64E929F07FAF4377D6EEADFF001EDFFCF54ACEE8F875E7754A31ED1348DCFB478B180D85BFDA5A5F5E04FD6DEAE3FE1C7FE7AA5677D5BCAAF1FAC62BEC23D379752F9FF84696367FB4992D8D2F85710BEEF656F4FC73B5B93815D41803BD7C56ECF4C1FA2DBC7E77F2DC8195D2D941DF4925BCEBE20AD5B711F71BADCCB36E331D3B0BA1A770F6EF8F759FB9B10290CB2921ED2DD7DAC773B7F35D0AB027BB7A518F64BD39C7609E56A31C0F3ACAC9A5BE9FB55EA9F1051486593D2B032B5C8C7AEE3DB7B7700818DF57FA7E3DA2DAF1A8AC8320B2B00C8F376E5A55BC10028DD76D6B9BE4A39DD32C00ECCBD4AC360113DD0ACC7ADC009DBBF50476542C3D4FD3230D958B5D1165B25AD13EF3B1BF49C9E9ABABB2E0E7BD9E8B87BE352E70FE49FA09A9156D6FAE5D2DD6FD5E7E4077AAFC1B1B7B4F70C77E86F1FE6B98FF00FADAE33EA79FFB2EE91FF8699F91CBD22EB59753762BC82CBEB7D4E1C887B4B3FEFCBCD7EA583FF3ABA313CFDA980FDCE56701B15D9A5CDC6A57FBCFD04A2A4A2AC351749249253FFFD3F544924925293A64E929F06FAF13FF003BFABFFC70FF00CF74AC0C5A9F6BEC63352C63AC81FF000637BB5FEAAE8BEB9D2FBFEB97576B4682E6973DDA35A3D3AB955FA1E1D15F556398F3634D193EA480266B737D8D4384D13D14271E211BF53B9D07EB6E364D2DC7EA4F155EC01A2D78FD1D9FBAE738FF00376AE86C6B1CCF546C1A4EF90411CFD29DABCE31F01ECC9BF19F040D58EEC44E85AB5717A65C5A186D2299135C983FC90D55E7117A3771E43C3A8D5E9F7B79699F056B1DEC70826216457B9839D111993E9EB29ACA24EDFA80409F821DF6082663B954075105B13D92AAD16BE5CE803523C5327AE8BC11BB62EEA36D5596D741B081A1710D6FDFAB952C6EABD6ACBC0BE8AABA5C61D1634B88EDB55CB286E437520055D9D3E8C571BDD74EC05D06001085689120CF2F26BC5C5BF2DE76BA8ADCE209FCE03D8CFF003F6AE2FEA5B09FAD5D1FCB25B27E4E5B3D55CECF2EA812DA9C7D4DAE05A5DFE8DFEF8DCCFCF46FAA5D2998FD7B02C277385E3F2394D8FD3E64B5739E33A6D10FB028A928AB2D35D2492494FF00FFD4F544924925293A64E929F1DFACEDFF00B24EB193635CDC4A725AD73F69D9EA3AAA6373FF003ACFE42CBC7E8D93D7F2ECCBC1B5B895E3868B6F735CC68304CB760DDF41BFA47ADEFF0018DFF8A0C4FA3FCE5DFCC7F52BFE77FEEF7FEEB7A6B56AFF00C478FE6FFA3B3E87D1FA2CFE95FCBFFB91FC8F553A5C7C236A598FDBE296F77ABCF3306FFB0FA79370BEBACFACCC86506BB1A5C1BFA11BEE6EF764B5F47E83D1DFBEEA7F3DEA66814BFD116B4E4080EC7782CB8388935FB3D6ABD467F5DEB62EFE9479FE7EFF00E6B8E723FE4EFF00CD97FA1FF805CBFE60FA1F487F3BFCDFD21FCEFF0027FD2AAD2E2BE8DE87B75BCFFABC207ED7571DCEC88143D8E71240638ED7123E9358EFE6EC43C86E5D409B68786FEF012DFF0039B2B773BF9ABBFE4BFE6AAFE6BF9CE7FC07F23FEE27F2D407F363E9FD11F4BE97F6FF00EFC992ABD131E2AD5E6DB90D2ED343DC23D7925BA83007753EABF4FF00C17CBE925D17FE50C4FA1FCF33F9CFA3CFFAEC4CD1935AD1D0651955E39C9CEB3EC58AD05CE7B9A5D66D1F9C31D9EFDBBBD9FA445E82FC6EA37BC574DB752DDAD7E45CE643647AAE2719BBBE9D6DD8CFD25B6FFA5F4D56FADDFD1B2BF9FF00E98DFA7C7D13FCFF00FC0FFDC7FF0087F595CFA93FF22BB8FA777D1E7E8D7FCE7FDF7FE0D3870AD971D6BB3A9D4F0CE660D95B768B1CC2F617090D73C86D6E688FE73D3DFE9FFC26C5CEF4CCAA717EBBD5D2DAC706D394C635D21DA966F732CDA7F95F4D7517FF003C3FA5FD3ABF98FE6F86FD2FE4FF00DFD55BBFF141D2BFA1FF0049FF000BFD33E8DBF4BFF44A78DC5B19D8D767B851524CAC3554924924A7FFD9FFED160050686F746F73686F7020332E30003842494D0425000000000010000000000000000000000000000000003842494D043A0000000000D7000000100000000100000000000B7072696E744F7574707574000000050000000050737453626F6F6C0100000000496E7465656E756D00000000496E746500000000496D67200000000F7072696E745369787465656E426974626F6F6C000000000B7072696E7465724E616D65544558540000000100000000000F7072696E7450726F6F6653657475704F626A6300000005682168378BBE7F6E00000000000A70726F6F6653657475700000000100000000426C746E656E756D0000000C6275696C74696E50726F6F660000000970726F6F66434D594B003842494D043B00000000022D00000010000000010000000000127072696E744F75747075744F7074696F6E7300000017000000004370746E626F6F6C0000000000436C6272626F6F6C00000000005267734D626F6F6C000000000043726E43626F6F6C0000000000436E7443626F6F6C00000000004C626C73626F6F6C00000000004E677476626F6F6C0000000000456D6C44626F6F6C0000000000496E7472626F6F6C000000000042636B674F626A630000000100000000000052474243000000030000000052642020646F7562406FE000000000000000000047726E20646F7562406FE0000000000000000000426C2020646F7562406FE000000000000000000042726454556E744623526C74000000000000000000000000426C6420556E744623526C7400000000000000000000000052736C74556E74462350786C40520000000000000000000A766563746F7244617461626F6F6C010000000050675073656E756D00000000506750730000000050675043000000004C656674556E744623526C74000000000000000000000000546F7020556E744623526C7400000000000000000000000053636C20556E74462350726340590000000000000000001063726F705768656E5072696E74696E67626F6F6C000000000E63726F7052656374426F74746F6D6C6F6E67000000000000000C63726F70526563744C6566746C6F6E67000000000000000D63726F705265637452696768746C6F6E67000000000000000B63726F7052656374546F706C6F6E6700000000003842494D03ED000000000010004800000001000200480000000100023842494D042600000000000E000000000000000000003F8000003842494D040D0000000000040000005A3842494D04190000000000040000001E3842494D03F3000000000009000000000000000001003842494D271000000000000A000100000000000000023842494D03F5000000000048002F66660001006C66660006000000000001002F6666000100A1999A0006000000000001003200000001005A00000006000000000001003500000001002D000000060000000000013842494D03F80000000000700000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800003842494D040000000000000200093842494D040200000000001400000000000000000000000000000000000000003842494D043000000000000A010101010101010101013842494D042D00000000000600010000000A3842494D0408000000000010000000010000024000000240000000003842494D041E000000000004000000003842494D041A00000000033F000000060000000000000000000001C20000032000000005672A68079898002D0034000000010000000000000000000000000000000000000001000000000000000000000320000001C200000000000000000000000000000000010000000000000000000000000000000000000010000000010000000000006E756C6C0000000200000006626F756E64734F626A6300000001000000000000526374310000000400000000546F70206C6F6E6700000000000000004C6566746C6F6E67000000000000000042746F6D6C6F6E67000001C200000000526768746C6F6E670000032000000006736C69636573566C4C73000000014F626A6300000001000000000005736C6963650000001200000007736C69636549446C6F6E67000000000000000767726F757049446C6F6E6700000000000000066F726967696E656E756D0000000C45536C6963654F726967696E0000000D6175746F47656E6572617465640000000054797065656E756D0000000A45536C6963655479706500000000496D672000000006626F756E64734F626A6300000001000000000000526374310000000400000000546F70206C6F6E6700000000000000004C6566746C6F6E67000000000000000042746F6D6C6F6E67000001C200000000526768746C6F6E67000003200000000375726C54455854000000010000000000006E756C6C54455854000000010000000000004D7367655445585400000001000000000006616C74546167544558540000000100000000000E63656C6C54657874497348544D4C626F6F6C010000000863656C6C546578745445585400000001000000000009686F727A416C69676E656E756D0000000F45536C696365486F727A416C69676E0000000764656661756C740000000976657274416C69676E656E756D0000000F45536C69636556657274416C69676E0000000764656661756C740000000B6267436F6C6F7254797065656E756D0000001145536C6963654247436F6C6F7254797065000000004E6F6E6500000009746F704F75747365746C6F6E67000000000000000A6C6566744F75747365746C6F6E67000000000000000C626F74746F6D4F75747365746C6F6E67000000000000000B72696768744F75747365746C6F6E6700000000003842494D042800000000000C000000023FF00000000000003842494D041100000000000101003842494D04140000000000040000000A3842494D040C000000000CDC00000001000000A00000005A000001E00000A8C000000CC000180001FFD8FFED000C41646F62655F434D0002FFEE000E41646F626500648000000001FFDB0084000C08080809080C09090C110B0A0B11150F0C0C0F1518131315131318110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C010D0B0B0D0E0D100E0E10140E0E0E14140E0E0E0E14110C0C0C0C0C11110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFC0001108005A00A003012200021101031101FFDD0004000AFFC4013F0000010501010101010100000000000000030001020405060708090A0B0100010501010101010100000000000000010002030405060708090A0B1000010401030204020507060805030C33010002110304211231054151611322718132061491A1B14223241552C16233347282D14307259253F0E1F163733516A2B283264493546445C2A3743617D255E265F2B384C3D375E3F3462794A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F637475767778797A7B7C7D7E7F711000202010204040304050607070605350100021103213112044151617122130532819114A1B14223C152D1F0332462E1728292435315637334F1250616A2B283072635C2D2449354A317644555367465E2F2B384C3D375E3F34694A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F62737475767778797A7B7C7FFDA000C03010002110311003F00F544924925293A64E929F18FADE19FF3ABAA48DC4DEDE49FF454ACD369FB3380796ED036EA74F26A9FD78C97B3EB8F55606C8F581FFC0A958D6E43DC037807B28C86505BB87D62EE9F91F68AEC7BEE6B5CC6BDC6480F11A4A1FA7D77AB07DD8F8F93934564FAAF631CEADB03D477AD77F315ED67BFF48F540820C1D7CD751F55053FB1FAB6EA8E4BFD3DA69AF09B90F26CBB0598CCFB45EFF45EFBED67E830BD1B1FFA1B327DFE95753D002D0644079DB3A5755AB26AC4B316DAF26FD68ADE20D83FE05C7F4767F61FF4FF0047FCE223BA3758AADF4DF876B2D01C4B4B44B431AFB2DF536BBF44E6574DCEDB6FBFF4562EC7AD136756E977D8DFB3D565B6DA2CC3763D4E190FC7AB1ECC4C6C8B1EFA6DB30EDC5F4F333A8F52CFB55946162D5F6BA2947EAB4B68CAEA05D6E43AFC6C4B9B6E28A7631BA6536BEA18F5E55F6751CFC1DFD532EAF53D4F4E8C965D93956E374FFB2E3D6FA0B6DE4BA6617D6B654DCBE9D8B9FE9583755763D76ED70F169AFD962EC3A17D64EA76D96616774CCAB32714B5B9365143DEF66EFA1F6BC6637757B9BEF66CFA7FE8D65F45774BA0FD5DC3774F77AEEEA15E583F68792CF55D87898D9AF69C766E6E6BB1ECCAA719DFF69ABAECF53D3CA62E7F17071B3FA8E3518782E155F6D6D6E2073AF7866E69CAFD27A75D9FCDB6EB5FECFD13130C227AAF8CE4351B3E96329ADCE6B032C60225A2EA6DAC3B69F7B7F4F535AF757BBF495AF37EB34578DD5F3E8ADBE9D75E4581958101AD277358D6FEEED77B56C3BA8DF4F5CC91439ADAF1AFC8A716AAC06D2CA197595B71E8A2ADB4D753FD365967A6DF52EB3F4F6BEDB150FACEFF00B47557E735A5ACCA6B09932058C6B6BB5AD77F65088119505D3265004F47296AFD52FF00C55748FF00C34DFF00A97AC995ADF54BFF00155D23FF000D37FEA5EA4627DE13274C8AD524924929FFD0F544924925293A64E929F09FAEEC9FAE1D59DFF0CD1FF8152B01DCF9ADEFAF0E23EB87578ED734C7FD6A9584E1EE07B4C7CD3482B82C0CB869F246A6B0F3B5C246920F1F728B29703C401C9F056B1D90F1A73AFC934AE0750D9C3C5ADD680D6001C35811C15D0E374AC79935336EEDE06D1F4A3E971F4952E958FEF693C49D7E2B7EB969E254323AB6B18EAD46F49C7F730D4DDAFF0073840824FD29597D6FA5D54EE2D1B77341606E9A8F6ED11FC95D334FB493A203B1ABBF21B65A37067D169E1464906ED9B844855393D1FA1399563DD60DAF68690D8D23F74FEEFB5687D60E8746474DB2DA5B16D23D481DE072B535EDC4A85969D0763A1F81D101908365470C786A9F2EDC473F72D5FAA07FECAFA47FE1A67E47ACFCBA855977560406BDC00F20568FD516FF00D95F473FF7699FF52F5781D9CC23523B3EF6993A6450A49249253FFFD1F544924925293A64E929F05FAF263EBA756F036B47FE05542C62241EFBB50B63EBE83FF3C7AAB876B87FE7AA56383EE1E1FEBEE40AE4AE2E207808251702C7D9696BB9747E2546BA9CF7348D7C63556FA7623EBCA24F0D2224729922297C626DE9B0A88EC0761F2F6AD4656EDBA842C0A9A183C5690600DD79EEA06E44506ABC32B682F78682A01F48FA37327CCA3BA9A277D906741BB80AA64D9D348F4CBEA6DA4C0687B43893DB6EE4C902BC16C8C80E86348772496F1082FCEC4F53F4B686469E253E3E2399510C044F8F654EDCBE97D3AD1F6C7B2BBEC05CDDE1C4C03B67DAD7353575E9ABC8F5EA5B5758CAD9AD56BCDB518896BFDDFF00548FF545B1F5ABA47FE1A67FD4BD5BFADF6D195660E650439B657657BDA080763B737E906FD1F5551FAA766EFADDD1C0ED94CFC8E57212B01CDC91A9C878BEF8993A65231A92492494FF00FFD2F544924925293A64E929F07FAF4377D6EEADFF001EDFFCF54ACEE8F875E7754A31ED1348DCFB478B180D85BFDA5A5F5E04FD6DEAE3FE1C7FE7AA5677D5BCAAF1FAC62BEC23D379752F9FF84696367FB4992D8D2F85710BEEF656F4FC73B5B93815D41803BD7C56ECF4C1FA2DBC7E77F2DC8195D2D941DF4925BCEBE20AD5B711F71BADCCB36E331D3B0BA1A770F6EF8F759FB9B10290CB2921ED2DD7DAC773B7F35D0AB027BB7A518F64BD39C7609E56A31C0F3ACAC9A5BE9FB55EA9F1051486593D2B032B5C8C7AEE3DB7B7700818DF57FA7E3DA2DAF1A8AC8320B2B00C8F376E5A55BC10028DD76D6B9BE4A39DD32C00ECCBD4AC360113DD0ACC7ADC009DBBF50476542C3D4FD3230D958B5D1165B25AD13EF3B1BF49C9E9ABABB2E0E7BD9E8B87BE352E70FE49FA09A9156D6FAE5D2DD6FD5E7E4077AAFC1B1B7B4F70C77E86F1FE6B98FF00FADAE33EA79FFB2EE91FF8699F91CBD22EB59753762BC82CBEB7D4E1C887B4B3FEFCBCD7EA583FF3ABA313CFDA980FDCE56701B15D9A5CDC6A57FBCFD04A2A4A2AC351749249253FFFD3F544924925293A64E929F06FAF13FF003BFABFFC70FF00CF74AC0C5A9F6BEC63352C63AC81FF000637BB5FEAAE8BEB9D2FBFEB97576B4682E6973DDA35A3D3AB955FA1E1D15F556398F3634D193EA480266B737D8D4384D13D14271E211BF53B9D07EB6E364D2DC7EA4F155EC01A2D78FD1D9FBAE738FF00376AE86C6B1CCF546C1A4EF90411CFD29DABCE31F01ECC9BF19F040D58EEC44E85AB5717A65C5A186D2299135C983FC90D55E7117A3771E43C3A8D5E9F7B79699F056B1DEC70826216457B9839D111993E9EB29ACA24EDFA80409F821DF6082663B954075105B13D92AAD16BE5CE803523C5327AE8BC11BB62EEA36D5596D741B081A1710D6FDFAB952C6EABD6ACBC0BE8AABA5C61D1634B88EDB55CB286E437520055D9D3E8C571BDD74EC05D06001085689120CF2F26BC5C5BF2DE76BA8ADCE209FCE03D8CFF003F6AE2FEA5B09FAD5D1FCB25B27E4E5B3D55CECF2EA812DA9C7D4DAE05A5DFE8DFEF8DCCFCF46FAA5D2998FD7B02C277385E3F2394D8FD3E64B5739E33A6D10FB028A928AB2D35D2492494FF00FFD4F544924925293A64E929F1DFACEDFF00B24EB193635CDC4A725AD73F69D9EA3AAA6373FF003ACFE42CBC7E8D93D7F2ECCBC1B5B895E3868B6F735CC68304CB760DDF41BFA47ADEFF0018DFF8A0C4FA3FCE5DFCC7F52BFE77FEEF7FEEB7A6B56AFF00C478FE6FFA3B3E87D1FA2CFE95FCBFFB91FC8F553A5C7C236A598FDBE296F77ABCF3306FFB0FA79370BEBACFACCC86506BB1A5C1BFA11BEE6EF764B5F47E83D1DFBEEA7F3DEA66814BFD116B4E4080EC7782CB8388935FB3D6ABD467F5DEB62EFE9479FE7EFF00E6B8E723FE4EFF00CD97FA1FF805CBFE60FA1F487F3BFCDFD21FCEFF0027FD2AAD2E2BE8DE87B75BCFFABC207ED7571DCEC88143D8E71240638ED7123E9358EFE6EC43C86E5D409B68786FEF012DFF0039B2B773BF9ABBFE4BFE6AAFE6BF9CE7FC07F23FEE27F2D407F363E9FD11F4BE97F6FF00EFC992ABD131E2AD5E6DB90D2ED343DC23D7925BA83007753EABF4FF00C17CBE925D17FE50C4FA1FCF33F9CFA3CFFAEC4CD1935AD1D0651955E39C9CEB3EC58AD05CE7B9A5D66D1F9C31D9EFDBBBD9FA445E82FC6EA37BC574DB752DDAD7E45CE643647AAE2719BBBE9D6DD8CFD25B6FFA5F4D56FADDFD1B2BF9FF00E98DFA7C7D13FCFF00FC0FFDC7FF0087F595CFA93FF22BB8FA777D1E7E8D7FCE7FDF7FE0D3870AD971D6BB3A9D4F0CE660D95B768B1CC2F617090D73C86D6E688FE73D3DFE9FFC26C5CEF4CCAA717EBBD5D2DAC706D394C635D21DA966F732CDA7F95F4D7517FF003C3FA5FD3ABF98FE6F86FD2FE4FF00DFD55BBFF141D2BFA1FF0049FF000BFD33E8DBF4BFF44A78DC5B19D8D767B851524CAC3554924924A7FFD93842494D042100000000005700000001010000000F00410064006F00620065002000500068006F0074006F00730068006F00700000001400410064006F00620065002000500068006F0074006F00730068006F00700020003200300032003000000001003842494D04060000000000070006000000010100FFE10DD2687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F003C3F787061636B657420626567696E3D22EFBBBF222069643D2257354D304D7043656869487A7265537A4E54637A6B633964223F3E203C783A786D706D65746120786D6C6E733A783D2261646F62653A6E733A6D6574612F2220783A786D70746B3D2241646F626520584D5020436F726520352E362D633134382037392E3136343033362C20323031392F30382F31332D30313A30363A35372020202020202020223E203C7264663A52444620786D6C6E733A7264663D22687474703A2F2F7777772E77332E6F72672F313939392F30322F32322D7264662D73796E7461782D6E7323223E203C7264663A4465736372697074696F6E207264663A61626F75743D222220786D6C6E733A786D703D22687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F2220786D6C6E733A786D704D4D3D22687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F6D6D2F2220786D6C6E733A73744576743D22687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F73547970652F5265736F757263654576656E74232220786D6C6E733A64633D22687474703A2F2F7075726C2E6F72672F64632F656C656D656E74732F312E312F2220786D6C6E733A70686F746F73686F703D22687474703A2F2F6E732E61646F62652E636F6D2F70686F746F73686F702F312E302F2220786D703A43726561746F72546F6F6C3D2241646F62652050686F746F73686F702032312E30202857696E646F7773292220786D703A437265617465446174653D22323032302D30342D30325431373A32343A31352B30383A30302220786D703A4D65746164617461446174653D22323032302D30342D30325431373A32343A31352B30383A30302220786D703A4D6F64696679446174653D22323032302D30342D30325431373A32343A31352B30383A30302220786D704D4D3A496E7374616E636549443D22786D702E6969643A34656266653730652D643236652D623834312D613962612D3232623834663439646366312220786D704D4D3A446F63756D656E7449443D2261646F62653A646F6369643A70686F746F73686F703A64633333616566382D343164372D343134372D626566652D3133623366363839326632642220786D704D4D3A4F726967696E616C446F63756D656E7449443D22786D702E6469643A39633734393932312D633861652D393634382D613065372D613762366131393131336266222064633A666F726D61743D22696D6167652F6A706567222070686F746F73686F703A436F6C6F724D6F64653D2233223E203C786D704D4D3A486973746F72793E203C7264663A5365713E203C7264663A6C692073744576743A616374696F6E3D2263726561746564222073744576743A696E7374616E636549443D22786D702E6969643A39633734393932312D633861652D393634382D613065372D613762366131393131336266222073744576743A7768656E3D22323032302D30342D30325431373A32343A31352B30383A3030222073744576743A736F6674776172654167656E743D2241646F62652050686F746F73686F702032312E30202857696E646F777329222F3E203C7264663A6C692073744576743A616374696F6E3D227361766564222073744576743A696E7374616E636549443D22786D702E6969643A34656266653730652D643236652D623834312D613962612D323262383466343964636631222073744576743A7768656E3D22323032302D30342D30325431373A32343A31352B30383A3030222073744576743A736F6674776172654167656E743D2241646F62652050686F746F73686F702032312E30202857696E646F777329222073744576743A6368616E6765643D222F222F3E203C2F7264663A5365713E203C2F786D704D4D3A486973746F72793E203C2F7264663A4465736372697074696F6E3E203C2F7264663A5244463E203C2F783A786D706D6574613E2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203C3F787061636B657420656E643D2277223F3EFFEE000E41646F626500644000000001FFDB0084000202020202020202020203020202030403020203040504040404040506050505050505060607070807070609090A0A09090C0C0C0C0C0C0C0C0C0C0C0C0C0C0C01030303050405090606090D0A090A0D0F0E0E0E0E0F0F0C0C0C0C0C0F0F0C0C0C0C0C0C0F0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFC000110801C2032003011100021101031101FFDD00040064FFC401A20000000701010101010000000000000000040503020601000708090A0B0100020203010101010100000000000000010002030405060708090A0B1000020103030204020607030402060273010203110400052112314151061361227181143291A10715B14223C152D1E1331662F0247282F12543345392A2B26373C235442793A3B33617546474C3D2E2082683090A181984944546A4B456D355281AF2E3F3C4D4E4F465758595A5B5C5D5E5F566768696A6B6C6D6E6F637475767778797A7B7C7D7E7F738485868788898A8B8C8D8E8F82939495969798999A9B9C9D9E9F92A3A4A5A6A7A8A9AAABACADAEAFA110002020102030505040506040803036D0100021103042112314105511361220671819132A1B1F014C1D1E1234215526272F1332434438216925325A263B2C20773D235E2448317549308090A18192636451A2764745537F2A3B3C32829D3E3F38494A4B4C4D4E4F465758595A5B5C5D5E5F5465666768696A6B6C6D6E6F6475767778797A7B7C7D7E7F738485868788898A8B8C8D8E8F839495969798999A9B9C9D9E9F92A3A4A5A6A7A8A9AAABACADAEAFAFFDA000C03010002110311003F00FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8E35D5BCC737C2D3C9BFBFF666A389DAABAAEB92D09964A9F7C78D5CFA56B736CD2C94EF538F1AA82F96F534916762EE10D78F8E112B54DEDED35BD3EEA09B45B992D25620CA14D3265239BD8EDBCD5E6BB286DA2B8BE79A375FDFA924D4D3205B0232DB5BD4EF199998E5459C58F6A9ABEA16F71CB9114EF9125B120B8F3A5CDA026573418AA583F34D616346AB5298A09A424FF98F2DD0F80D2BE18691C4925DEBD7DAB05B61522434CAF2C51C6FBA7FE7122F60D17CBBA84175B333D4D7E6329E172714DF5E6AFE7ED22CE1043865814FAAB5F118F0B9A26F8C7F30BF306DEE7549AE2C8889391A95FA71E1499BC4758F3D5037A77ACDEA0AB47CBAE4E30713366E12F35D43F302DA14901531CE7ECCA7C72C11718E7796EAFE6ED57516663AA12A0515431E99608B8F2D430D9A677E524F3FAA4F5A9AE5822D0750978B98B8D140D8E4C63B63F9843BDC13F64532431B1F1AD0C5DB916EE72D8E362656ACB7457BE4BC3606368A13F2553F7E5321BB5F0EEDD0B6F916C0141ADD0558F5385BE2690CC5536E98B682985A4527312ABF1A6F5C9F44527A6F5255114979C48EC4E424136EE70A2D2593E54CA2516432D265A76A6F6B5FAACACBE041E995F0B319DE9DE5BFCCBF37E8C54E9FE619A075E8A1C8FE18699F88FA4FC9FF00F395FE6ED08C0BACAB6A71A302D2BFC5B0F98C890D8323EA6F247FCE5769BE63B8449ECD62F50F5D875AE564360C8FA2EC3CC5A46B32DADF898514F2F4EBD72B21BF14F74FF4D7626F1F53F8A192BF5207B785320439FC4115A4693711DBDF5F5F12CE8C0D913D857B640865CD910BAFAE46A41FEE46F95909115A6CE4BB46B98FAC20D7214C643662170CF7323C858AFA27E2FA314452DD56DE2D4F4C9F94A6B1827AF862DF163FA65C8FD1C2C11EADCA80D716F09EC33DE42A6D1472A2824F861069AB502C331D3BCB3E55F3C412795FCE9A746D05DC6CB0CEEBBD4A9A6FF3399784BA4D445F8C9FF3931F9253FE507E61EA96B145E9F97B57919B426A6C402C4D3AF866C605D3E41BBE5BAFA5230FC32DB583B90724F865D8B930CC5BCB5A16375C55AC5578E98AB78AA8BFDA38AAA2F7C55A3D7156B155EADD315560D8ABFADEFF009C6EFF00D677FC84FF00CD73E56FFBA45AE5A39349E6F68C28762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD0FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF917B754FE45FBB34FC2ED532A855A803C71E1551370C0E3C2AADF5A26361ED863155D0DC52840DFC72C2A39A6893B3D0124F8D7205B423E172F227A6C401D86D9516714AB5F0D52FD80A139193607916A21A49641526A722125825DE9F335C1F4C75ED96C434929D699A6C96C434DD0F639708B519B2F86D62F8446DC7EB1F0971B52990CB0D9871BE87FCB0F341D3236D0D5B8C6E3E2981A1FBF28E17231CD35F3479E9A06B8D356666080FC7CAA4D6BDF0F0B9919BE7FD5BCC7246F2B3BB10C4EC4E3C2994DE7979AD87666AFDAE9921171331B2C0F56D4F996EFF003CB045C5931D8EF2A483F765822E3C93012875EBB1C988B4108794A034D865910C68BA38D5CFDACB0048895EF171AE4C36479A0A470A7A6580362A4738A2F877CC49C775A4724E0D32149016B354935AD71A4A1DD6BD77C7853689173C4000D282981B835EBA75A0AF8D30316FEB00F53CBE780C5810510B7617A1A7CB21C2C68DA6FA7EA011872EBE39021BC16463520EBC791A11BF8640867128FB5D46EECDD26B2B9642A6A021A6408660BEA2FCB2FCFDD73CBED676DA8D64D3C301752BEE42FCCE56437639517E927903F33746F37E9D6F35B5CC6CC69C5188FE272B21CE195EF305FA4D63FBD6531AAF4047864086E8E4B486CAF94DD3C40F0427627A64086D8CD96A5DDCDA59B81C5A07EAC065720CA52B09035922C373792515250683B641116276C6D6D61BBE6F53302029E9BE2DF179F4113DAEA124A8F54249515DB16F0CA34926E2FE49AEE5291C6018F7A54F860465161EA22FDB4CB9B1BE11ABC42946201CC9C45D46A60F8AFF00E73E6C935ED07CAFE6151B69FEA733E1CB966C6127479A3BBF21B5802DEF21BB07F772A9A2F6CB896A8B7129F492423FBC15197E12C7338F7CBDA14FB8C555475C55CDD7156B156A98AB78AA8B1353BE2AB6A7C7155E3156EA7C7157F5CBFF0038D9FF00ACEBF907FF009AE3CABFF748B5CB472693CDED5850EC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFFD1FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF91688D3E8CD770BB55732D29BED5C3C2AA125C2826831E155317408208D8E02155E1B85AF4C8951CD358A7AEC0640B684DB436F56492BD16B9596615B5884496D2F7DF6CAE41B2245BC82F22E370C08A6F82213221279612262C82A46E7E599100E3CCAE5B8127C2F41C732621C6949524D42354F4A234917A1AE47306A2535D3BCDEBA4425797FA536DCC1FEDCC76FC4509A9F9B4384B899EB24952C6B5FE38D39824C1F50F30477E480698D24CAD8EDC5C8D85474E95C9C766360A4574C1CF635E9EF930D6404B3D13EA5541F0229BD72C01A26023D4B200A41E5D969BFDD9688B498A9C8A643CC30A7422BD32241B4C601C9CD0D0D4622D78559E6DA85BE9CB031A4148391EBD7EFC95A3758ABD0572A31B6611B1823A838384A95415A9D8EDDA98F09415600537EFDB070962DFD589EDEE477CA8B782D7D5877207CCE16629B36E3C4570F267C214BD23C80EE4F4C2427802690DB9461BF5CA484009D470F214276A6FE232B21980A5CBD19290CC580EB4DE83DF2B660332D27535212DEE8FFA3C9B487DB20591D9EA7E53F3E7983CB371CF47BA75B588D42722361ED5CACD22322FADFF002DBFE729E486FECA3F324A5B4F43C6EB7AD6B403F6B2B2DF0917D9AFF997E53F30E976D75A2CF1C72CA0114615DFE9C8172A322F48F2E1BBD5F477844BCCF02EA6BE032B937028CD596783CBD6EAE486690291DF2A6C890F3BF35C434FB6B478C9AC8A0B530D37C4879A9BFB99670B1D41AED5EFF2C0DE0B228A4BA8602D3935603D3A78FD1912CE554CFF004DBBBDD461B5B6949F4D3BB6DFAF32313ABD48BE4F08FF009CBD8E0D47F29B5582DF79B4BF4C311B9F889E99B081D9D0E789B7E39EB9664FE87818D4B86E5F7E5A1C5029425A239806C20F8732B0726190DA1CF7CC86A531D462AAABD7157375C55AC55D8ABB15506FB47156B155E3A0C55BC55FD72FFCE367FEB3AFE417FE6B8F2AFF00DD22D72D1C9A4F37B56143B15762AEC55A6E98AACC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5572F7C55762AFF00FFD2FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF91745DBAE6B5DAA0270038DFBF4C557A007DF1B569937DBBE025217C042073DC654C931B4B9E50CA83AF638153ED2A660AE69F7614A367BA58ED6466DC57BE210497946B3748D33508EB930030322C65AED519B7A6D930C0A4B25EA976A1A6581AD2C9AE872FB4704D38D012DCEFD72B6D40CD37A94DCD07BE2CACA024DF7F0C56CA8140C8FF00BB32CBD8569F0F7CAB27369C922D18005B7B89916CE2B561340E5BAB2F4EB92C64B5D943DB5FDB89F5295B5385DAF559A094950D1CE7B04AEF99B8C2D95595FCC31E95FA5A2F2DEAB79369A4C971E6692CA54B64886DBBF1E1B7BE654698F1747A07953F25FF00357CD5E47B8FCC3F2CF921F5AF26DAC924BAB6B8AEDF686F20A01B713919D1482F2ED2EE9AFF0053F4EEAE9567B5774B4D35A8AB291B1591BF678F6AF5C85320537786D4C727D62D7D2746ACB0024AAB57E1A37BE16C1BA0A592333C1F5AB6956F6452D6B040A646283AFC2B8B2D91111FAC46DF5AD0357B7907FBCF3A594ADC97BBF4ED8D30F103505E5DC61A19341D524914F1B6B916725593FDF9C698D3094C2BC17577C9A69749D5DD17E004584A7930F1DB6C698198519259239ED629ECE48EE637F5EE6CEF94DAB7A0DF64D1E87010C6D165EFA492CFF437FCEC1AD7982636B06996E39B2843F0A8095272AE0B6424C9F59F2D79A3CADA9E9BA7F9E7C8D3686FAFA7FA33DD1786BC056A3985C85331262333C3A54F76F7BC648AB4B360D5AF80195D16C12513E60D2CD80917D45D661916331703F0A31DDBE818981642749BC3AE6906375955CC900F87512A429FE19594FE60222D35781D3EB68CAD1034926660015F9572B3129FCC840C7E65D1D24BEB4B581E196ED089EE402E021EE32070CAAD7F3211EFE61B4168AB6D299934E50F75301F184E8085EF90F02523417F34193E95ABBEB4AB7361A9FA4427EFD88A72403A53C6980E92498EA8047DBF9C7CB567070FAFC915C4CE561708580643F1127B54E0FCA49C886AA2CCF4DFCE48343113DBF98273C2842D0D36FA71FCA172A3AB8BE9FF00CBBFF9CDB4D1FD0B6D435C905A2AD18F0A9FF896425A434CA7AC14FAC348FF009CD2FC9CD42C53F4D798CACC46EA631D7FE0B043465C6FCE29EAFF00F393FF00939ABD91B3B0F33299266A44F22AA8527BD4B659F932D90D6EEC1B4AFF009C92FC948F548E1D6BCDBEB7D5488E20B10E0B20DAA581E9954B4843B0C5AC0FA4F4CF3168FABC116ADA4C424D0EE943D9DEF51231DCD3B653E018736EC9A8E21B326B4D5ED26FDD28E20EDB6D8D535DDBC63FE7231043F97F76F6EA5FD68D8B83BD681BAE646271B34453F1A350B93EBFD65BAC723023C3E239B1C54E8B53B294BF1309FB5C0E4332C38504337F1C2CD662AAABFC3155F8ABB15587AE2AD62AEE15DEB8ABB80F1C55DD36F0C55D8ABFAE5FF9C6CFFD675FC82FFCD71E55FF00BA45AE5A39349E6F6AC28762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFD3FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF90949CD3DF35AED52FB89CF2AF7C55B86E091D7E78AA21AE147461F7E02A39A924D50F534F0CA99A334E620B96D86F4AE054F2D6EFD2473D3C3154A750D59DAD254AF1F88648734179BDEDD33C8C49D8E4C302C72E27356DE9930C6492F362E77DB26D6A44FC66A69B7538CD38D42523B1FA72B6E435483D7156B155F63A7CDACEBBE57F2EC774BA6C5E65D66CF4A9755A8E708BA9021600F600D6B93C70123BB466354FD9DB4FF9F49FE51E9B35B5DF9C7FE725E596D2C19259EC276B48A07400311EA48EBB7C865808ADA838F7BBEA8D27FE704FFE70B7F2CBC93ADFE62EB5E4ED2FCFDA1F97AD1F53B8D68CE66458A1AB332885B893F4E5D007DEA4EFDC5F217E7E7FCFC07FE716353FC95F327E49FE4E7952E35AD3FCD1A73D92DB5DE9DF548AD1A421898DE956229B1CBE2A0D9B7BB7FCFBAED6DAEFFE7DEDABC11C097125CEA9E608E58A641C5CAD0F02C474D8EF91931E27CE5FF386BF901FF38ADFF3939F947F9A5E46D4AC20D13F3DE4D4AFA3D5B502693D8AA5C31B692CB911EA29FDBA74FA3229E2A7E6C7E75FE48FE62FE43F9FB55FCAFF003FD93DAC31B9934FF32509B7B8B752CD0949A9C492805403D7037465694FE5779EB49FCAEFCC9F267E62EBFA147E6CF2EE9F1490DDE9774291BF26A6F8B2E2EAFDABFC97FF009CC4FCA9FCF4F37697E48F21FF00CE3B5ADDCD7052DF51BD5B3AD9D9DB103D4066084034DC570B1E305EEDFF00393BF9B5F917FF0038B736896771F9223CD9E6AD663E3A258D869FF588BEAA48520BA275A9D862C38DF24AFF00CFC07F285102BFFCE28EA5A6B472F2BE54D1A4243F7A829818193E5CF2EEB1F945FF0039A1FF0039BFA5493F92469FE42D5B4CB5D2E7D04C660314D0D43332281435070B0326BF337F28BCA9F919FF003F16F267E5FF00E5ED82683A169F269B7D6F08FDE822E95988A3D41D80C89E4CE25EFF00FF003F7E5B6B6D7BF216FAED56EE1B8866F5D446B172F848FD803B9CAEB9B3069F945A4FF8720F3D7902F7CCBA4407CA305FC0757B66735684CAA5B90FF572BE8DAFDCAB4F397FCFACEEF5A9560F2669B26AD218AD25536AE12579540001F528C7B5460970F716278AB9BE8CF3FF00E497FCE0E7E5E7E5C69FE7AF387E5468DA6F90EF8441677470419BEC02858124FCF23C239D7E3E4E29B7CC49E6EFF9F50CE925A2F93B4A8B4E1113C84120527C38FAB5AFD3938C224F543E93FC95FC95FF009C13FCF1F2BEA3E60FCB0FCA9D1F52D0EC646D3EEEE9E378D870A93D5DBC32D18815DDE0B79E65FF009F5A683AA6B3A4DE792B4AB0D6B4B9A7D36FE25B7763CE0AAB0E5EA53AFB75C9C71041BA7E10595CE9716ADE686D3E258B449B5DD4A4D123AD185A191BD15A7871A65BC23AB5926F67DC5FF3827AD7FCE27E9FA779F3FE865346B2D425D52E61FF000CC570865F4A341FBDA85652A49A1EB8384364645FA0ADE64FF9F54F0E2FE56D1154776B7907FCCEC7843689C97DBEBFFF003EAD240B6F2B684EC4D14185C024F6AFAD80C026539232EB55FF009F5B229F5BCA9A1AB20ABA7A7202A3DFF7DB618E30D5C459F7E5FF0090FF00E7DF7F9C370BA2790BF2B6D35DE5F66FADEDE6FAB236FD67595941DBBE1300CE32931BFF009CC4FF009C6AFF009C4DFC9FFF009C73FCD3D534FF0021E85E59F375CE85247E5495A765BA92F792F130866DD857B0CA66221CAC5399237D9E1DFF0038E06E1FF24BC8D6FA85CDC48EB67037D52742BC18C62AC09DCD7357A900BB9C123D5F4B695A658ED26C48DC819824539F1281FCC5F2E5A79A3C9FAA5A7107EAF03F15EE7E16E99386CD59793F083CE5A73699AFEB5A5BC6D088677081C52B466E999F8CBA3D4C5283B5B59A9054AA1A5733226C38110866FE39364B315545FE18AAFC55BC554CF5C55D8AB5CE9B53157733E18AB7B9DE9D715750F862AFEB97FE71B3FF0059D7F20FFF0035C7957FEE916B968E4D279BDAB0A1D8ABB15762AD374C55662AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AB97BE2ABB157FFFD4FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8EE4B96A57F0CD6BB54BEE6E4F2FD78AAE86E01502BB62AB1E41CC1F7C05211724A0FA7E1953247B5D0458CD771D302AC9756E0B4AE2AC5EFF0053332B28F1E9921CD058C5DDC9A1C98605209A72C684F7DB2618C96890713936B5093F7854786F8CD38DBF476F6CADB96AC542DF462ABFD318AAA691E55F3379E7CD9A1793FC99650DD799AF254BAD31DD8AC8AF1B7C3C69EF976201C4CE5F60F993FE70D3FE739BCCF6ED6FE636BAD4D0A7A0BA64974C55430141414FC72EA01A2CBF643F2F3F273CFDA2FF00CE0F79D3F27751D3560F3D6A7E56BAD3AD2D236678CCF22154058926A49DF7C9C764136FC52D1FFE701FFE72CB48B23A6C3E43D327E0C6E11A590B4CA587B532C0520D3F6A7FE70B3F25FF00307F2DBFE70CB52FCA9F37592691E78BBBFD6E6B3B02DD56EF8984D76EA01C892C0C9F94DF94FF00F389FF00F3995F93FF0099EDF98DE46F2ADA43ACF97B58B9B9BFF5A5741716D34DCA84568C0AD6981417AE7FCE7FAFFCE51FE6E79534AF35F9F3F2AB43D1FF002EBCAD1B32EA1612BCB7E1CA1F51AE118D5072AD074C590953F38FFE71DF41F23F993F327C9F61F9CBA9DDE9DF96FAE3B23DCB201688E1C22891CF40316CE27EE04FFF003953FF0038D3FF0038DF77A57E43FF00CE2AF97F45D77F31FCC37D67656F7518A6957724DF097B9BD427E3626800C58195B18FF9CAAFF9CCDFCF4FC80D7BCAFA67E687FCE3DF94F59BED56CC3691AFD83497715B5C16A2A4323861EA03B85271636FABFF002FFF0038507E40CFF9F1F9F7E46D13C8B05BDA9B9D3F4E4445935042AC10CEACBB48C69B0C5812FC5DFF009C15D5A2D67FE7381F58D3AD6DADAD7CCBAE5CEAD690D688B677723CB1C6941D830DB16264F56FF9CB6980FF009FA17962F26790A01A3C56CD08AFC512BA95FA2BBE25B81671FF003F8D92E6E35DFC86B458964B3FAB48F6A53790B537046408641F93B24769776F1C5A8D8BDC5E5005AA9AD32A21B8153B8D1ACADF59F24FD5E27B49CEB5640015A8FDE83B570034CB9BF793FE7E412ABFFCE01F962299A79644D5F458DA471425D6A77F6DF2C8C6A9818EE5F822DA1697A868B63A7E97A1869E3B413DF5D92F5F5075EF84367007EF97FCFA0C347FF38C9E7F8608E44B9FF10DDC61C0FDA11353EECB049AB806DF17E12F9AB47B1BAFCC0FCCEB8BA8DA7BDFF156A70A3396A02262C6BBF8938253D9B3806EB5E3B64FAAB416104933FC0DC4D7EC8CC7F14B1F0829A683A75C3FD616C230D727F7CA091B8F91C7C52918C27967E5AF2D4C04779A2A4DE22AFF00D71F14A784226DB4BF2FEA7AAD9F93BCA1F97771E62F34DF4C9FA3B4FB38E4964E75A091954D4283D4E4A323252007E937E427FCFA63CE7E6BD624F38FFCE42EA16DE50D126845CC1A268937AB24A08A94B9E6D5414EA2B970B69343DEFAFBF303FE72AFFE716BFE708FCA571F975F92DA2D9EB9E72107A561A1E8CA67B496FC01F15E4C0B1526A6B4C8CA7B338C093BF27E59F9CF5FFCCAFF009C81D6EDBF31FF003BB537D6EE21B8F5743FCBD8E42FA6D9467EC96E276A53BE60E6CF5C9D8E0C3B6E1F657E5BFE6369D731586871B246D63122D22A1B745A50468C07ECE61711939F5C2FA534DBE8E15925460EAE054D72328B7C24CC22D5AC61D12EA696CBEB7CA290B102BC7E13918AE4E4FC43FCFDBED3F5AF3EEAA2CE0F41D256DA94A6ED997093A7CE1E1FEA48CAB1C8FCFD01C57D8667623B3AF229D96A1D8ABB155CBDF15546ED8AAC1D3156F15770077AE2AEE03C7156B9D36A74DB157733E18ABFAE6FF9C6CDFF00E71D7F208F8FE5C7957FEE916B968E4D279BDAB0A1D8ABB15762AD374C55662AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AB97BE2ABB157FFFD5FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8D34BC51D4D0F8E6BA9DAA5D757887900C2A71A55B6D7229BB0AE34A897909F881D877C041506914D7085128E2A32AA2CB88285DDE7100A372E23B634578825125F3B6DE3DB0526D0734E0296AD08C9008291DD5D541EF920C0A4C65777FB27E7930C485FCC81BFD3930585174720E677DA9824530148B0F5141BE41B2D48B91D8FCF15B6BD4C56D917917CEFE6DFCBCF3E68FE74F25D8DA4FADE8686E21BDBD1FBA4E07970AF89F0CC8C3C9C5CFCDF7349FF3F5EFF9CA09EC6E2F7F40F96EDEE2C9C5CDC4A63A3948C50D169EDE39750B71DFAE1E46FF009C8DF3C7997FE70D7CC7F9F77D6D65079CF43D126F318B287FDE7668D4B05229D0853DB26021F945E58FF9FADFFCE5A79B35516DE55F22681E62D56E938AD859DA9967DABFB0057B78614BF5BFFE7113F3E7F303F3EFFE71A6FF00F34BCD7656107E6269DAB6B5A78B38978242DA7FD8475A7C2DB1A8C04354DF9BBF941FF3F0CFF9CA9FCDFF00CFA87F28345D1BCB916A1ABEA975A7BCB321458A3B4765E4CD4EDC70522934FF009CF1FCF6FF009CA8FCBB54FC9DF3CC3E4CD4B45FCDAB77FABC1A0167BE8560F85BD6561F0D6B51F2C5987E547903C85E7FFCE1F31E95F90DA75CE97A4DCC5234B6925EBFA51B3F2E410B7892705864FD16F257FCFA23F3F26D7B44BFF33F987CB7E4EB2D2CACD0DEF97A57FAFA5C210D14B5634E4AC01AD70A0BF577CE1E75FC81FCA3FCB5D0BCB7F9F7E7DD07F32353F23411CEF26B7325C6AD737D0F499537AB531624BF32FF00E7323CE1F9DBFF00392DF975379D3CA7E4D9FCB9FF0038CFE50893559ED75188C37B3C51FDA96341406234F84E1A60FCCAFC9CF2BF9BFCFDF9CDE47F2C7E5B79864F2479AFCE0F1D9F917558E43088E40A5C7AAC3703883D31E140897EB27E5E7FCFB5BFE727B4DFCF1F24FE6C7E63FE61689E709343BC49F53B89E691E765414DAB4AD6B5C69B86CC2FFE7EF9AD68DFE37FC9DF2EE8BA9A4BE67F2DDBDCBEAF6D237C36EB22928CDE0180DB2259805F3C7FCE28FF00CE04F9B3FE7277C8B379FED3CEF2E942398C3C1E42073EA05011EF913BF26775CDF5A68BFF003E80F35DB6ADA36B1ABFE62B5E3E957F6F77F57E65AA20903D055BA9A5300891D14CC17E927FCE507FCE31CDFF003909F913A5FE4E5B6A8FA49B39ECEFCDFF00EC97B4D954EFDF2C0C0CC9DDF9B23FE7CF5E6CB5D3445A7FE68CD0DDBB5651EA3052BDD766A644829F10BF463FE710FF00E717AF3FE717FF002A75DF235E6BF36A771A95F4DA9497719F84348A568373BEF954C90A245F9F1E67FF009F44F98B5AF37F9975FB0FCC06B6B3D7B50B8D4C42F211F1DCC86460C037515C4094BA289D17C03FF393DFF38B1AC7FCE29F9FBC85A4EA5AE9D56D3CC32395915890415F72727E1D06CF11E5115ADBC0BC0ACCAD3B3189E9B75DE990E109E22AF02A25CA98A4775EE7B60A0C6CBEB5FF009F6E24C3FE73B742F456393FE752D5CC824EC9C7E265F714DB2E8061225F657FCFCFFF003C3F35FC97E6DFCBAFC96F2179A27F2BE93E74D264D47CC3E6289FD3B9611CDE998B9D3BA8E9965048912FC9FF002E796B4CF2F6A1746D8A5FCB75704DF6B7A99ADCBC86A4C8A6BD77CAB200DF025ECD06A30454B7B39648D29FBFB81D251E0C7C335D962E7E29109E69570F65730DF69E56CA20DF15B45B4751D5BE6731E31A72B8ADF587E5979ECDFABDB5F5C28E2005E47AFE18261BE05F56793754B6B9B7BDD2DD11E3BD8D979B741B532B00B39BF217FE726FCA5FE19FCC1D4EE238EAB732332D3A1A96E999100EAF5043E588DA30F351BE22DF1A9EA0E67E2D83AD9157A1F0CB98BB7F0C3452D12075C08B5CA46FBE2AA8C46DBE2AB01DB156EA3C715773A6D4C16134EE67C31B5A6F883BD7AE3687701E3855FD72FF00CE367FEB3AFE417FE6B8F2AFFDD22D72D1C9A4F37B56143B15762AEC55A6E98AACC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5572F7C55762AFFFD6FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF87A96FEF941ACBF8E623B3B0963DF5F16DA5AE34B611515DDF541F571A5D9318B53BD42A1E4AA7ED2E0931927706A3CC0E9BE52D61166E7638B38A5E6EBE33D4E2D8103717049C52833FBC23155616C42F21DF15434B1D3B62A868D7E36F0F0C5894746A3DBE8C582BB461BE43155168462AC93F2FBF2CFCE1F9BDE7FD1FF2EBC9776965A8EAF19905C4E6900A1A7C7976271B31DDFA2BA47FCF9FFF003D7597F43CC9F997E58B4B688049A0B3123CA57AD18AEDF7E640F268B7EC4F907F217CA1F937FF0038F179F955E75D6E26F23C1A335AF9A359B87280447FBCAB9AD12872616DF1CEABFF003963FF00381FFF0038BD6BA743F96BE5BD23CF9A8D847C5755F29411C972838D2B3CEC2B5DC8241C905B5BFF003EB4FCC58FCF1F979F9AFA45BDB470DBEA3E63D675CB68140E5026A2EC544B4EFF00150E4BA2F0DB17FF009F7DFF00CE324FF963E63FCDAFCFEFCCDB44B09FF4B6ACDE5AB8B8F84DBC31CECCF23927F6C74DB010CB81F96DF9DDF9D7FF002BE3FE7253CE9F98D6F74D045A7CCD65A2E9970D50A9033C3CA01414E4054E56436C616CDFFE712FF28FF257F327CF9E6FF31FE72FE7149F963AB796353B69BCBCB6F75F56B8942307356F0AE459786FD51F38F93BFE71CFCE8D7B3AFF00CE71F98B48B4344BB5D3B5DE01005028483E032A32A3CDA4E2277A79DF977FE7DABFF388BF9C724FA9681F9DFE67FCC6BB8EA6F35A1A8ADDB0A750CEC07864F8C745E0A7D95F97BE4CFC8BFC81F25FFD0B3F99FF0036D7CCFA7F9B4496BA47977CC577EBDF4905C8A0B58A951C00FB2B931913C07B9F1A79AFFE7DDDFF003895F947E615F32F9A7F3CF59FCB2D465BD7B8F29DF0D405ACB64ECC4AADAB863C4A5683DB26269AA1C932B9FC9FFF009C6DD4E4B4D31BFE73E3CEE249C520787CC4435C9EA55985795326770C385F15FF00CE607FCE3DFF00CE35793FC93A9FE677927FE722AEFF0035BF320CB15BDBE9DABEA02FAEAE854A30AD6A780ED95C837C075A7C55E4DF31FE71792B429EDFCA5F991ADF923465E12CD616174D00776151B2E634B6673887D0DFF38F9E6FFF009C92F3EFE7CFE58F92FF00E576F99F50875F9E3D66F2CA5BF77A5BD9C80C9148A76A3807614C8F38DD72712517E82FFCFD9BF3BBCF5E43D53F2BFC95E46F376ABE50D47CC9A7CBA8CF75A64ED0168E297830629BF6F1CB9B7146F67E4949F9B1FF0039096D688A9F9E7E6F8AD66FDFCB72DA8CA013ECD5AFE382DCA9C283F6FBFE7D73E78F3479EFFE71CBCEFAC79EBCD5AC79AEFB4CF30DDC2BA85EDC34F27A0B192A159EA695A9EB8251704737E2FF009DFF003E7FE720AFBF30FF003022B5FCE7F34697A7DAEBF7D69A7410DF3A2450C729F4D68294016836C31A05CD8E332890C035DD5BCF3E67D574EF30FE64F9EEFF00CECFA07C7647509CCECBCF614AE4E73586911714D00BE54BA9663752A97D3E2AFEEC022A6A3E5989293951D3D2B5AB7A48ED5FDAFE3862584B1BEBEFF9F69C9EA7FCE75684C3FEA4ED647FC933991170F2C69EDFFF003F6FDFF3EFF26475FF0070139A7FD1C60916A897C11A8C06541DF8C9CA998F22E5C0A7769767EA8B08FD9ED9448B971679A34DCA08E393ECD77C85B75DB34B4D4A5D2EE2196CBA0209A64245CAC6FA93F2F7F32121B8B35B9702BC565AFBD3DB220B64F93C6BFE7316D6CB516B1D6AC183B3AD5A9F4E64C0BAAD445F9DD35A43EA99631F13EF2FCF2FE275A614A6E782D075CBE05690E243D3DF2EE882BC0E79596B937C78ED819479378B2762AEC55ACC79736D1C9BC4312578CB43592EEB920C097F5CDFF38D9FFACE9F905FF9AE3CABFF00748B5CB87260F6AC2AEC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFFD7FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF864BB048AACD51DB311CEB4BC2B147612EE01C56D17621DC0AC98ADA65E8307525EA2BB8C124129D5B45D38F4CA501306040229D716C8A58E28E49D862D88571C9F6DC629548E36A8DB154D235AAD08E9DB1541DC42687E1FA7154A1D5D0F43BE282A91C8E0F4C58F0A3519A9BEC3B62BC2B8891BA2938AF0B21F2279EFCFF00F94DE7DD13F323F2F2682DBCC7A3AFA3682ED3D5818B1AFC51F7CBB1CA9C4D40DDEF1F99FF00F39CFF00F3963F99305EDCF983CE163A19D22DDC48BE5D88D8BAB28AD1F89353F4E5DC40971E9FAFDF975AC7983CE1FF003EDFFCC2D67CC3ADCBADEAFAC793AF6692F6F5CCACAEC87A96F0C9476B5A7F387A7BE85A5F97E686F0C4B71A859A08A7863264776DF812A09AEFDF240AD3F707FE7D29F951F9A9E58D67F327CEFAF794AFFCB3F979E6FD06D2D74586F289F5A962209786B4A13D6A72D06C289D3D0FFE7EADF9D7E75FCBCFCB8F2D7E4FF95F4E9747D37F3126922D63CDB6EA5623146D510C6CA2AAC4FDADF7C494F1EEF91AF7FE70E3C83AA7FCE05F92BF3AEF2F5BC95F997E5B8A7B89B5A998AC37BEA48591645EA49A0A13EF9592D8323E2BFF009C7CFC90FCC1FF009C9CF3F6A1E5DF285F695A3F99A0478754D4EFA15781907C3CD50EF5A6F91B6632ECFD44F20FFCFAB7F26BF2AB40D53CD9FF003943F98B1EAF1E9122DD31D16E0D85B451A7C6C6757AB301DE83A60113F0419DBEF0F30F9D3F2CFF00297FE7157CDDF985FF0038E51E8F77A2E99A34D3E87AB584002CA507C25DB882FDF7A647C2A533B3BBF9ABD5FCC1E62BDBFD3BF38B52F3E1D5FF00332009E6CB79656692289588A59C486BC597C06110A62723F717F317CA1E4DFF009F8A7FCE1B683E61F29DEAA79DFC9B6E93C371250BAEACB12ADCC53746E24D763921162676F3AFF9C76FF9C4AFCACFF9C2AF256A3F9DDFF392BAF68DAC6BB25AC8348D2EEE1F56DE1050845489C37C66B4AE4B8D1C4FC98F3C683E4FF3F7E6A7987CE9A0F95AFF00CB7F97BAD5E493E91A34D227AD21690B17B72BF654D4103C32B3367E3523BCC3368DE5ED38437CCF631C29EAC4D72DCC48631544A0AD49A532A3BA7C6B7EAA7FCFAF3F21AF74CB6F31FF00CE577E62D9AE9F1EAD6D2BF93BD61C560D302B7AF32F2A5140527135F00C38ADF0C7FCE507E6BC1F9E5FF3923E60F3559336B1E4BF277ADA2792A590F34B9B5726B3475EC1AB91F136761A7C24EEF13D4A2B98216F556DEFED9374B08928CA3C0D76C7C47272E2D9FB2FFF003E9130C7FF0038CDF98534B0936D279BAFFD6B75D8AA08A9C7E8CB89DBE4EAB83D4FC42B8373FF002B0FF346E6C618E5B6B7F36EA8E7D75E4157D634041F0C864950761A68F34C66823B9FAC35E7A572978ABF0C0BC42537E99852CCEC052AAA97948E11B154E30923E3000EC721E2309CC24B3CE90432F3902146A3D4F427A65F09383972D3EC4FF9F65C7327FCE717971E44204FE4DD65E13D792F03BED9990E41D74F2713DD7FE7ED2449F9FF00F92E10F22FE5F9CA7B833E5732B10F862E5828B84A5655AD5331E45CBC6126D3AF59262937EEF7D81CC79172E2F55D2984B0523352AB5DB204B918E36C8F4C9E559024919604D2A72B949CA80A679663EAD494CBE9348414FA32024DB241F9EDEF35FB18ED9C35C431A101FA819938E4E0E585BE39D634AB9D26FEEA39A268D2662D096EE3DB2EE370E5898E354B6FF7E6463938D38D34D18D88FA73281D9C5915363C7A76C8940709053734381B03B9A78E2AB81077071575478E2ADD3C329237656EA1F0C900C495DD865803592DE4A9812FEB9BFE71B3FF0059D7F20BFF0035C7957FEE916B96057B562AEC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFFD0FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF86BB8802C67311CBE240DB460B32F63B1C57899159D94483A7CB15E25595139003AE465C97891F6DF00CA9215659878E2D914A669013D6A7B62D81411BE21E18A519137BE2A8C57A6F8AB52BD57DF154A6615A629014E35DFF008629A469140B8AD2262C5682DBA92EE182EA4897D5B636D227A6366F588F8581F6C944B46585BF40FF00E70A3FE70BFF0024FF00E723FF0029B5BF3279AFCCB2E85E6CD3F54FD1B7D1CF7CB1F2A8279716604E5FC449B718C2BA3F4B7F3B2EFF00283FE71B3FE7103CF7F9456BE72B18EF350F2ECFA4796A059D267BDB87144850231219B975392053E1DEEF8D7FE707F47FF9C0DF27FE58699F9D5E7A920D17CE3645F4EF33E9FE629BEBB0472C5F6A58ED983503B74A0C9DA38084AFFE7217FE7E75E7BF365C5E7907FE719F438FCB7A1D9BB245E63302FA77D68A6A9F554D84551B9A76C78E9A678492FBA3F267F36BF20BFE73B3F246D3F2E3CE2F6ADE69D3EDE14F3568B7AC8B7B693DB95E53432C86A3D4707ECFBE0333C988C469F327FCFCB3F353CABE53FCBAF26FFCE267E5CDFDA3C1E60317E9B4B77594D8C5624344ACC8763215A1191E3A663097E57797752F3AFE5FF9C6C7CCDF943A9C9A0F9CF47B37B69ADC3304BA5917E290814069EF94F8AD834F27D89FF38B3F927AAFFCE6FDA7E64798BF3E7F37350B297C93A92E973E8C3516B68AE39C65D8B46CE015A8A5732465003038E4FD4FB9B5FF009C5EFCACFC8DB6FC88F3D7E61E976FF96F73A61B09B4D8665F5F8B1DCB4D11635DFAD301CF148C322F85A05FF9F51FE534B65AAF9524BCF3E5F69779EB5A587D6E6BA592E54502399556AA41E94A644E701B069645F0D7E4CFE707E71FE4DFE6779E7F353F27ACA7B7F2BDEEB5777FAA7901F91B67D325959D04716C81E8C454657F9A8B68D148F47EAA587FCE5D7FCE207FCE64F97A0F277E7DD8CFE44D68148A2F29EA333219A56D898E455E2373B03F7E40E51F51E5E4C65A390DBABF3FBFE735BFE7193F2E7FE71D6EBCA4BF931E6B9F599BF306493F44F97BEB7F5C7B6892AE2854B05A8A0C81CA48B3C9A8E9A47A24BFF3851F919E41FCF8FCE08BCB7F9D5E708F47BEF273A5EE8BF97374C527BFF4784AEC676A2B2AF75EE36C1C6472EBD57F2E62FB7BFE738BFE730D64B5BBFF009C5CFF009C7DB8B4B9D4AE02D96BFAD6931886D349B68C7096D02A1E279A93BAED8F89E9B972FBDC8C7A49134FCD7F2F791E1F2BD8A68176E65963AD2F474AB6E687E67304EA2CBD060D36C9D5FF00962CDEC2E4C7290D6F197694577A7CB271CD6DB9F4FB3F537FE7D471DBC1FF0038CDF9836D79756F682FFCD9A8A47EB4F1C6DC425391566046FE39B033B1B793CF4F170CC03DE7EF7E383E88DABF9ABF332F6D2329158F9BF538A57471C64549295DBED5731F3CEA2ECB1E2B0B64B2FAB6DC295ED9A83959F8450935A7AA80863180EB571D695CB2191AE78497A47FCE3F7E527E5A7E66FF00CE4DE8BF97BF9B2B736BE4AF3858DC5D45789762D544B6F1928399200E4453E9CDB69C931BBE4EB73E120D53F757F207FE70C7FE718BFE71AFCE927E65F912FE4935C165716D61ACDEEB114F0C16970A04CA23671527C4666125C2188F73F2B3FE7E3BF9A5E4EFCDFF00F9C87FCBEB2FCB3F30C1E6A87C89E5FB8B0F31FD554D22B812972BEA74AD08CA67CADBF1E3DDF31DAC4D05A3A188C69337A8439E4E1BFD6CC69173A18924F4C0BA048EF98E4B950C4F51D01855631D5C01954E4E4C31D3D46DF46944493053B8AE63CA4DA229835ADEBC6A5222C22EBB64449245AB5B5C4A54C33C541EF9938E4C4C2DE59F9A3E5C4BCB14D4ADE3DED50AB53DF2D949A32627CC778E915B014A4B5A1CC8C527559E348462CA23AF565AE6C22EB25CDCA390DFB64CB3839A315C836114B7D35C50EA53618ABB155C1C014F0C8916825AF572403025BF532603025DEAE5822D64BFAEAFF9C6B35FF9C74FC823E3F971E55FFBA45AE0661ED78A5D8ABB15762AD374C55662AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AB97BE2ABB157FFD1FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF881BC880420F5CC3E20E424B0A857A1EA4ED8F12B24B50B4218D31E20AA8F08670CBB9ED809B0A39AA03C41076395F0B604BE5662C6870F0B30504E1C9AD31E165C6D29E277FA7070B21205171354FC382928CF8A83E78D2B8D698D2A12406B8A625A8D0D7A6D8B2B45B23300145698AD85F1EDB1EB8ADAA4A225884FC4CD3AB045B6AD0153D5BE8C429A2868F47BB86133689E66D47465BDBA56BFD32CEE6585789FB529E0402465832531E005338FCBB6FA84CE751D4B53D461B17E766D79772CEAF20E8C15C9030F8BDE98E11D11F0795F499EFEDAF6F2C266B595F85D69026222007FBB997ECB57C30F8C19F83BDB33B782934292BC7E8C4ECB672C2823F4231B2D78815DB6CA67985B64710EA91EA7E5A437115F68D25EF97EEA32FFA4F52D3EE5EDCDE06FB3511914E390F1E9B3C081768DE5FD3ED8FD72E26BBD7F5E0DB6AB793BCAF427B1724ED909E7B671C1001E86B6EF2DC590922A49044CAFABA1E2483FB240DF7CA8E50DBE0C52883F2E6D4EB125EC771AA59E917959750B0B1BE96DBEB128E858C64549F7CAFF3738F271A7A404BD4B4AFCA0F20CF6D75A85CD86A90996129159DE6A12DD0527BD5C9CA726AF24F9B762D180ED0FC95E5FD05E19F4BD0603769271769155C18BC68475F7CC796693B0C7A50F52D3ED674B48A28163B4912E1A66754142ADFB0C0751EC72BF1A4E6474B163FABFE5BF943CCB3DC5D6B1A12EA3716A39D98B522DA49246EB491402299911D4D7544B4B1287F227E4F59E81AD5C7992EAE2F3EB112D346B2D46E1EF7EAA0FDA0A64AD36F0C9CB59C5CCB8FF901D143CF1F94BA579AAE96F74992E3CADE648DAA3CDF6933C721435E6948E8DF1034EB9286B047CC2FF2782ED17F2EB4DF2AD9BD969566F737F74419BCC533F3993F9B9330E4C5B213D582092E54745188D833187CB62EAD134DB88792A75D40F53FC73046716D98F152B4FE598AD6DD2D6CC85957EC5CB0A807C48EF96C753109CB8F886CF269BFE71FC4B7D793E99E62D5B4A17B5B899AC6F26B783EB2E7E26F4A3206F99B1ED1A157B3A89682E5C54CA34AFCA7D23CB5A63D9C76B2DDDC475996F4C86AD3B7DA771FB44FBE5597571946ADCAC7A7203CF75FD0E64998087A1F8B35E32370D384AE0D338C0E49F4DD47C2C45687B6646292CB00609E67F2EBEAF0D8DC5DC93DB6B36CFC6DEFEDA5689E28C9F8802BBEE336DA7CDC2E0E7D2C65CD8A6A3A0EA36B2B45A7F9B35FBC8C7C715BFE91B85141D57ED77CCD3A814EBB369611E5F794CB42B39B42944DA3DD8824D64F3D75661EACAA4ECCBEA1DCE512CE1A2189EBB1D84090ACF0C6C2D8AF0F58B16E4DF2CA279A2E6431A0534EF527AA2D77CA2598391114CF346D3E7867B762945E42B944B286FC71E3E4FA7F44D352F2C21089CCF115DBDB293305B0E0932587CBA3D27458E8CC3714FECC00B0F0A439B17D4FCA324619C2D3AF41FD99930986420C0753D0A76B1BCB59D39C12EE58F63965F1726196161F1E79A3CB8D63A8CFCA32B6FC8956CCBC669D26AB1960ECBCB91614543C53E599F09874D381054A46F4E95D81E872EE265034A4F2F1343D698096C26DAF52B8A1557703155C411D462A8377F888AE203592B79FBE48062EE7EF93B6041772F7C9713120BFAF7FF9C68FFD671FF9C7FF00FCD6FE54FF00BA45AE066393DB714BB15762AEC55A6E98AACC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5572F7C55762AFF00FFD2FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8779E6690D0E6BDC86E0B62C55A9D0D6B8AA7B1454C555F8814C473508693A9CB59A5E480C49E98AB4CE9E18AA1A465236C05945742699536F1047092A078E2B61716DBF8E15B08391B7AD701482A9130DB026D16ADB1FD78ADADE4395715B5CC6A062A9859FD93912D914FACBEC37FAD95C9BA09CC1906F8A6B0A0645AF8E565124EE5B5E56640EE320531482C21F4EE0AFF29DF2B9330CEACE0F56829B9C8368E4CDAC6C8B24629D3205B22F49B3B43FA35969534C81722095DBD8BF3A50F5CA8B97065B6766FC7EC91909392190E9DA51E60F1A6F539510D822C94E9842EE2B4182922294BE9CBBFC3DF1A6D10413E9C95E9808D9918A3AD6C100A53AE505ABC3569B4C47A10BB8C57C3455AE9E00E9D714786EB9D2B9A3F14DE9B62830A0F10F35689708F3388C77C945800C0A1B0924B69D5D00DF7CCCC658CA2C43CC9A64B085600D3332127032879C5F44D1D651B3014CBB8DD6E68EC9569E93493D373BE4096BC707D0DE5ED224BCD3238D81217E2194CE4EC2186C27B0F95E4120223E9ED98F22CCE9CB2BB2D12485E12E869514DB2B3272F498082FA3BC976F1FA31C6CBD80C00B9B2C4F5CB6D22065A85FB5D72C12689E35F75E5C826423D304E4C16838DE5DE70F28FA16FCA18FE12A4B003FB332B0C9A270A0F913CE5E598A54B82F0FC42BDB33232B755A885BE51D7EC24D3EE1A3E344EA332A05D2E68531CB9903428D5E99931710841897950E5A98F25656C595ABAC805315B5479401F3C56D2F91FE33BE4C354B9ACE7EF8B1773F7C55DCFDF157F5FF00FF0038CFFF00ACE1FF0038FDFF009ADBCA9FF747B5C9ABDBB15762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFD3FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88316FCCD45335EE42630C7C17891F11D862AAE55A3FB5F862AA7CC9751DB08E6A164BD4E58CD00D192493F67C71552654F1E98AA832AF6EB91290B797134C832564620D6BDB1557E551B1EBDB1542C8AC687016512BE3246C4E0656881228DBC715B5E11CEE294C56C2AD0D003D7B629B4CACC1A53B9C896D8B20B34655607B9A8CAE4DD04EA089F20DF14C63AA7153E3BE56512656AC0D9EFE1902CA2C7A01FE94CD4D89DB2B9320F44D1A22C54D36A641B43D174E882B0E4366E9902D917A259DB936C4506FD32B2E44175B598E7F677AEF95972E0CB2D2D502EE3225C90C86CA10A46DB6574E481B270E8A474ED8D360012CFAA73AF15EA71A6C0109258B03BAD3011B3202D523B609F6B314B2E04D22B3590034AD714702362B38D4D08A62BC08D92CE26864A0DC8D8E2C670D9E75E64D0627B39A4352789ED928B8A214F04F4608659A2058B96A71236EB97424C65040F9A34E89EC95C28AF1CC98CDC1CB17806B5108838E3DE800CB3C475D9216A7E5FD3A7B8B80238C31276180CD9E1C4FACFC9BA25D0B4F4DA1019539357C331E591DBE1C2F4FD1740FAEC9C12352E3AD76CC796473469D93DC796E24291B4604886A6991E2B6EC7800667E5DD3440E9F0D0786112672C6F5FB14B68E3024AD587C3B65824D13C69CA476CD41BFB6D9609B41C4A77FA1C17F6B22320208EF97E39B899A0F913F337CA4B6E2E0DBC436AD4D3E59970C8EB33E2B0F827CFDA605F55B851D76FD599B8E56E935189E113865050F8E66C0BAAC91A520A4003B66406B05554D3AFD38A6D706A1AF6C56C36D20A7738ADA14B124EF930D6D54E28754E2AEA9C55FD837FCE337FEB37FFCE3EFFE6B5F2A7FDD1ED726AF6EC55D8ABB15762AD374C55662AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AB97BE2ABB157FFD4FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88EB5527A8EF9AF72138584000F862AB580622B8AAAAC0BC4B6D5188E6A1033851F3CB59A058A952062A876E3FD715506A74EF912BC90EDF6B2B5E254AD00A615E25367618AF129FAA5B6F0C0520ABC75207BE0648911B1236E98A11A88C314DB60126A7E8C59C135B35DC644B745925BAED95C9BE09EC0BF08C837C559C5181CACA24CA6DC7A9694F6C814C52DB7B73EBF4EF95C9987A5E876C788DBB641B4727A3E9B685DA314E832B2CE2F46B2B6263094C8172609D5AE983903E395972E0C8E1B001694C8C9C909A5A5A8AF4E9869B849363682831A6626BA2B44A7D9C69B04D42E2D12A76C8C86CCC4B74B4DA1AF4FA3304B7DA6F69684F1D8605B4CC590AD298ADA30598F4DB6ED8944B7093EA9610CB613A9515E27F5620B488BE60D5F4C486FA62ABD1F7FBF260B19063FE62F4CDA08EA2BC72624E0E58BC2354B0E572DC96A9434F9E4FC470B82CB37FCB4D05AEB534E70FC3CBA91F3C066E5E2C54FB7B4ED02D6DED144680394A1CA2537678A349BE91A6AD9CA5F852BDF2894DC8B013A36A269D98AEDDB0464D9020B26D2ECD232A4AF4CB049259A5BAC2FC435053A659C4D134E3D3B7420F2C989341451B988008879061BE4E33A71F246D83F9B7CB36BA8E997521505CA93FAB32F1C9C2CB8DF97BF9BDA0BD95D5CC623A0DC8FC336584BA6D563A7C937D66DEA91D2873658CBCEEA0520658FD26E077D81CC98F27094F0AB44818ADA8B362B6B7AE4C2BB15762AEC55FD837FCE337FEB377FCE3EFFE6B5F2A7FDD1ED726AF6FC55D8ABB15762AD374C55662AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AB97BE2ABB157FFD5FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8A0B7896BB6D9AEB72116C388EA3DF1B553E05BEC918DAAA51C2F1E43082A94DDF21DF25C4CAD2AA495D8E3C4B68696564D88C78D6D62B926A41380C946EAA2367351B0F7C8DB2F0D50055346618DAF86B1E30C2AA7AE36BE1A82A146F886C7A6048852696F172DE98A784A64B1AAF5EA7A62BC255982D0D06F8AF0950E209D87CF10120F0A696686A36C0436C66192DBA1DBA6552722124FEDE2240E9ED951939312AB340C29B8391E69E1B647A78ADBF1EF4C8908BA46DB5848CE1C5284E57209137A2E836CCC428A5477CACB744BD434BB378594BD083E1954A5BB7443D074EB477A11403DF21C4E5420591431716F8874DB225CA8C29378D4505075C8916DDC48BB65A374DB0ADA6C232C36A615E3A44288D054A934C5B233B509551C6C0D7232E4DC0A10C04B0D866010DE3284DED6DD956B4191B65E222429077180C93C48F8684712363913365CD21D4D084954746072226BC34F9E7CCF02C124EED4249DA9F3C98935C9E37AF34B2B829F647519306DC3C91B49ECB467D52EE2855284EE49C375CDA31E2B2FA6BC83E4C86CA38E568D79F723227239F0C74F6EB4B13EA0DA8A17A1CA897240A4E96C569F0819598B2E1255C5B46801A6E3AE08C59C2242716691BF414A78E4D914D2283E3156D97240B4C85A36508CB452464F8DA4C54EDA89255892064E32B6990A446A33A3DABC22B475A0CC9C73A699C6C3E1FFCF3F2C7A51C978C8ACA63AFC3D7B66D304DD46AB1ECFCEAF30DB98DE4923015549DBBE6DB16EF2FAB86EC2259FD56E46B502999575B3AEE02A7CC7BE4830229631A9F6C242A91563DF224D32112570141BF6C226B54B4B81E3878969776AD7256B4B4B01D8E2B4FEC23FE71977FF9C6EFF9C7C3E3F96BE53FFBA3DAE4D0F6FC55D8ABB15762AD374C55662AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AB97BE2ABB157FFFD6FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8A889788DF6CD7539086B99B8D6871A5538666618D2A20C8C0548E98D2A0E6FDE0A8FBB1A54BC2D1E871A540DC805F7F1C6954F9704AD37E98D3387344464BAEC298D37F120A6B794B7C24E34BC48A855900E5DBC71A5E257DA62140DD37271A5E24C625E031A5E256049231A5E2452AF2071A5E25F1435AEDF4E4834CF74CAD63A1F6C816706456895207BE51272E0CAADE1A2034E994C9CA8F25EE9C8D298C4ECD80A75A5C7521299125AA4CB9221146AB4F880DF2A2562CC7CAEB59D790DAB9025CB845EC16F10E4B45DBC731E5CDC880671A58A28DB22E6E309C2A0E75A77C5CB099451A918B021116F1FC74F1C5253A48A806D8B54954A2D3F8E2D9050E0B5A78E097272A28848158F4E9984425191A0414CAC8641A6A02476CAC86C0BD245515F0C810CC1A63DADCE1629187864405E37CFDE636699A6205687A64C313BB03B7D224BFB9E012A2B97458F876F5CF2D792A38E786478A8DC7C32333B2638A8BDE749D320B481005008194B7009FC50C75D862D8023046A0785316C010F20500E29A57B324134C2A426292B066C0D642A3CAD4A62D6421C5C145624EF5DB2C816B942D0525F173C589A65F02C0E379AFE66E996FAAE8570B40CE10D3F0CD9603BBACD5637E4D7E6158C9A7DFDCC0148018FF000CDE603B3CA6B31EEF25039027DF326F7757214D85F965D171A4E2BF2C99601BE3D3A65127231A9323576E9910C64A0C8D920C56A96AD0E58155D0035AE495FD83FF00CE337FEB37FF00CE3EFF00E6B6F2A7FDD1ED72618BDBB15762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFD7FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8A8F54702DC7305BD2695FD57E9424E2A898542F520E2A887914A15F11D71542A9AD452A7C7154BA7942494A6F8AA5D31323020D2B8AA22180135770569B8C5944EE8E411D28B8B6A1979198A114DBAE2AAF28F4D775E55F0C556DA71E4E7895A8C551EEEA829D7C062ABA08DA46240A0C55341198D6A472F962ADC13A92CBE99153D7161229DC101A06AFD19596704DECFED57C0F4CA24E5C198DB30740A053DF2993971E4ABE8947A7DAF7195B34F74A819650FD457A64496B3CD99C712CF2569C41A6C72B25B718671A0D9849148A139025CD84767AD58C01D5052847539496E8C7765768521A2952D4F0C0E66308812564340684EC3172404CE1734AF86282138B70052A7AEF4C5849368D948F0F6C5AA4B1C507DADB16D8286E7BF4380B9314744D4ED98A42551989208046F9590C8284C5BEEC810D810AEEDC0F6C8109972633AD4B5B765A9269D7234E3C4BCC24D39EE5DAA6B53D31AA72602D3FF2DE80AB74ACEA0EF5A530F139508BD86DECA389A3E294A0C04B394682747E08C7C3906B015ADA60E7885208DEB8B301184D462CC0404A18EDCA9E18B346D8802B5607160423FD440C7DB162434F32018B59096CD729E1B6374988492EAED549A0CB2326528B1CD465FADA3C4DF65D78D0E6CB049D5EAA2FCECFCE9D1E2B4D6AE233462E49047BD3377824F2BAB86EF96678C452C89D402733E06DD0E6145439004ED991170A4B8508AD29932C03741E19449C8C6DF25029C77C8863258789FD9C218A1D901AD053BE5A154591BB1A6495FD84FF00CE32FF00EB377FCE3E57AFFCAB5F29FF00DD1ED72618BDBF15762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD0FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF89F0E3D33BE6370B90957306400773B63C2A893C9057A531A5414B39AF107738D2A6360038353D31E154BB508584E08FB23BE34A81F41BAF8634ADD1B74AFBE3C2A0A32D41F9E0E14F1353B32CAA4277A63C2BC49B7C0D082CBBE3C2BC484A537514C785789A1148F22D477C78578995C16E91C4848DC8EB8F0AF122B8464531E15E2524B74120A0EB919041DD3B55548C6525BA2BAD1AAF41E3BE5127320CD6CD78C60D329939514DA35E681B8D77CA645927FA70008DBE79592C3AB2FB280C8E1E9B1E99025CAC4377A3E8500E6A4FD39592EC71C5EA7A75B5694E990655453A11716DB172F105648A86A7BE2E5008C8F614C58108849CD7AF4C5A64994539D8E2D5269AE0B122BF2C5B20A911248AF42712E5453D8A9435CA2412BCD011E195C83243CCCBE34AE564360404C418A403C36C8D32E618B5E219BE06DFC31A6B1043DBE9C88EAC57E795C9BE019569D6D142438503DF2A2E4C4D0653115722831059C8D84C245063E98B00142301771D7BE2CC05766DB16C010ACA64AD0D08C595226D548A8AE2C486D890C77C5AC8519588077C2C084B26734EB954CA46C92DC826BBED8C249914B48F8C0FA7365824EAB54762F867F3DA0FF738E69DBFA66EF049E5B56777C797AA05CCBB53739B5C6E833F34BD97AE65479B8325C3651932C02ECA24E441AA0C88632688184315608BC47CB2D0AA4C8BE1D724AFEBEFFE719F6FF9C70FF9C7E1E1F96DE54FFBA3DAE4C317B6E2AEC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFD1FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88C69196127AED9570B9096DAC8649D09D80618F0AB26963050B571E15484A8697C287070AA610308CD41AF88C3C2ADCF2ACBFB1F11C78556B47C63E5C7B74C78552891B91200E27C7052A6FA64609DCD70213292D95E4A70A537AE0295CF6C586DB64789544DBB12AA13EC9DCF8E08CAD53386D49A129C6992B545CC68AA03538F6F1C6D54EDCB4A695C6D5368AD893CB9F4ED913BA2DB9A42B48C0DBC72A945BA324C34BB33248007EA6A4D328945CB8167013EAEA13EDD7BE5243951927DA622C90056D8D4E52609326436500120402BEF95CA34DB0C76F41D3AD38471ED94C8539B8F15335D2217F500029EF95172E269EA9A7A88E38EA2A69BE066237BA6E6207E2AEDE18B91134E238D3BF862DE26AF1C7CE9BF1C549B5AABF11F638B4C8A3D361F2C585371C7CBE2AD37C52364CED5796DE180B7C7226491D3F6EBF4640B3E25B27C3DEB4CAC864248095B96F5A65526D0508CFB78E479320503E887979D694ED9599B6844B5B86150DC699519338A6F6E802019592D802776D1D5280EFE3823CD289766E3403A65BC2B6A28581A15A0F1C7859892282961B1DCE3C2DA0A998985487EBD4E3C2C81B5D1A322B1E75A63C2B24BE49DCB9DBA63C2D6A4CEEFDE871E16B2859A1928183D699465145318DA477AF242A0D0B1390894CA0878F9B3A9A54115AE6C7049D4EAE3B3E30FCFBB7923D45AE78F2AEDC7EECDCE1C941E53571DDF1B6A16ACB3C8EC69CB7E3F3CDBE09ECE8B34774918D0D3C333625C1986E95EF97736B6CAD3BE5320DD02B9412064445245AF1193DF080BC2B0AB02464C15E1586363DF1B5E17F5F3FF38D029FF38E3FF38FE3C3F2DBCA9FF747B5CB03597B6E143B15762AEC55A6E98AACC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5572F7C55762AFFFD2FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88D98A8B7639072125B39544C3E78AB27797F75F462A948156A62A88A30C554E163F584E5F67154E27E0D0D075A62AC7648CA82701546E95381285F7C8143339230D1864153DF2252A0A08201195211D0C695078D7C718F34A39A48047C76072C548AEC8E69C0D41EB8AA63A7C144E647CF154CE175AB8F7C082B1A1F524141D4E466CE2CA34AB6F488246F98F37331B2066569157282E4C59269F6CC5D4A8F848D865726639B34D32D97EB09C865322E6620F41855508551B28DB289976100C974992928A8DF2825917A04120E2A7C70B743927B6EDEA003B62D88958F93118B64516917100E2CC287A7F113E2716B3156040F9628E144C4B45DF7C578530B55EB812228A1CA83205B5425E546C8499452E7E54CA4B70429EA3C32259072FDA39410CC146A005699021B01B4CD015400E4086C0532B7978AD46301452792351CB76CBD00A2163E54DB61BE2CC145A41B74A571660AC922A0DB6C5B6254516BC875C5050BF54E4EE695C581287961E1DBA62D64A02694468478E63E50CE058FEA24BAA9032B8865296CA5C9A28E33C7AED99D846EEAB57C9F257FCE4246D0C493B2ECDDE9F2CDCE11B3CAEAB9BE25D56759642C050140299B6C01D0E61BB139012C69F4667E37026BD010287AE5E1A951BF865726C8AE465005722DA15D5D7EEC2AA9453BD3AE2AEE2BE18ABFAEAFF009C6BFF00D674FC82FF00CD71E55FFBA45AE5A39349E6F6BC28762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD3FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF87EBA9D962318514F1CA2DBD2086568E74237E4DBE36ACCE37F5223DB1B543A8E2F5EB4C6D51AC57D3E58DAA5F50581AD0D76C6D5305E4C8057E9C6D5053A108C08DBC71B5405BAFA73F20DBD712ACF6C6E8AA54A06DA943912944170E6BC403E195A15D2E022BD5474DB0412C76F2F19A4214D07B658AA96FCD8835E7E3ED8AB258A65861DE9B8E98AA5E977C653C68C09A9C5053DB39C33A92A0E426CE2CC6DD8351BA517A663CDCCC689854B5CA6F9417262F56D06C8488A37F63944CB7445A791C0F0DE2A28A8AF5CA497371067F6567249C7634A7DACC79173E316496561E8C80F224E524B221964638A281BED930D914DECE765A7C35C2CD3B81F93569D4E2D91473B6DD3166146353254D29BE285850F2229B62AAE8EE9B7018AA6768F4EA3AE2551ECCA83C72B2C908F286AED909328A11C8A74CA4B7041484006942476C052A51824824532B21368F8EB5DF61E390219829824818053B656436028F80A82141AD71884996C9BC4AAA011BE588053355AA29A52A77C5B01560CAA37C5982879248DC30AF4C59C4A0165547206F5C524A3519284FF375C5AC940DDAA052791C5812C62F1BE02C054A9E994E4512A414BC1EDD5C8A1F0C8C53C4E6712A20540420AE66E1165D76A4ECF9B3FE724B4F79FCBB1DD2C615947D91ED4CDCE10F35AA7E736A49E9BD1CD0F1155CDA61E4E833F349C0A0E43E23E199D8DD7CDD52DF115A13DB2F0D4D9A93D32B93645408F888AD37C8B6856403BB6154482B403962AA8154FED9C55FD75FFCE35FFEB3A7E417FE6B8F2AFF00DD22D72D1C9A4F37B5E143B15762AEC55A6E98AACC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5572F7C55762AFF00FFD4FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF876BBE87315C8485CF160DE06B8AB2DD364F561FA31555941018E2A88452D01F962A955584943E3B0C5538B771C77FBB156AE1D1D4A8EA70C552A02928F9E48A197589AAD3DB22528D63C72A4202EA7288287AE304B1A7959E5A7BE58A9D5BCAD12123BD3156E5D4491C4B6F8AA8C37039160D5A9C50591E9B745A5515EF909B38BD1ED5FECFB8CC79B998D3AB14E57287DF282E4C5ED7E598D43A46DE198D939B918D92DD411A5DA35075DB289173F10675A5BC7E94629BD331E45CF804DE8CCD551B786524B221388549550763DF2D8F2484DA24E00649926D6DDB16C8A3DFA62CC23ADE35E35F6C59D34235E67DF15A44FD5C374C569AF4590EDB602B4BDB91C8162A251B7ED909328A83A353AE525B8210A357A6053C9B58DC6FC71402AA0B1143B7BE408660AF5661DF2B219828BB695BD51BF6C88E6C89D936FAE84E35392620B23B5BB8E48802462D81AB89929B362D80A5227ABB0E58B3057AA826BE38A928D8CA804571604A1AEDD781DF16B258E3CF17C5191CB91A8CAE41ACC964482E3946A9B0ED8C42789A82CE732B2AA1E20666E1145C4D472795FE7CE96F2792E591A3FB009CDC610F39A97E4E6BCE5EF64A6C17E1A7CB3658DD06A39A5F08063DF3371BAF9B7407A65E393535C4572B9364541E262C48E9916D0B789185555436D8AABAAB53157F5DFF00F38D5FFACE7F903FF9AE3CABFF00748B5CB472693CDED7850EC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFD5FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF87BBB5531935DF31E9C863A543921B61ED8D2A6FA4DD324A200070AD2A7AE1A54E75173071F4C0656FB44E0A54C34F904B0716006DB61A54B2E222B72A00AA93D7052A342468952C41231A543955506452491B50F4C2020A1A83D415385871325D3E4F8B8F6E38299DA6373444E4BD7DF0708674C7EE1E4956941B1C1C20208A4BE38BF780B57E8C076502D386904501E00134E87236C8458C4B2C92CA6A00DFB640C99885A3AC80F4E466635076C788B194190E94DFBE06BDF2066CE117A759CCC4AF4D865129B9708B35F2E446F2ED44BB007F67283272A317B669F69F5495668EA76037E998F236E4420C87D2378E1CECC3F972B21CA86CCC749B3A471835AF7CA65172A136530C25187C35CAF80368926D1C2397235A9ED92029B446D328E20C37AFB6165C29A4302A01427E9C590D915C1586F5C520A362015401DF167C4E650096A9AE2BC48A85CED418AF1225959874FA3015E25AB6EFD5853293265C2E3180694EBB642526622AA2C95C7C24D72A25B4042B69D3A49CB882A0EF91E25217B5A3FECA60E363C28792D66542C62F8475A6478923642B46C3A46D8136B6349C3AF08CF23DCF4C40DD0648EB9B19446B21A863D874C953113455A7AB1A0E47638D33135D7771E9AFDADFDF1A6CE341C127AA58D7A0C04536C668E499D76FC7032E26A5BBE20107AE2C52A9EFA490F1DA98A0C6DD691722CF4E4D5D864A301269C9B328D32131373F4D4D7AD4648630A192470DBC70BCC8A0DC336E87A53333144071353C982FE6C68306B9E45BF515F552363C53C7369843CDEAA443F147CC3A4CB6DAC5F5B5C03188A4603E55CD96301D2651658DB22C5550DF2CCB8389382C415515CB9A0C5771CA6452154283414C900D814E445180AA9C6C4B71A6C3224A53058C507BE438D5FD727FCE36EDFF0038EBF9063C3F2E7CADFF00748B5CCA8F20D079BDA70A1D8ABB15762AD374C55662AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AB97BE2ABB157FFD6FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8749E4AC447B652DE9347F131A77DB1557B6AC3386E9BE2AC8AE5C5C427F9A9B62AABA7B98D4027154C4C625607BF6C550579CA31C7BE2ABA08CC916E31415268087C5AD34B4E51B03F462D8134B97E51FD18B68415AA076901F0C05126A5B602A5464648097CC484653D32B6C4A963A927C7BE565B62B91FD30E3C4E218493CD1A4E532FCF2126507A969FBBA8F1198E5CB83D5FC9B6D5BAE9DF292E541ED92A18ADD683282E54026BA2C2EC39B0D8644B7443D0F4C8D782E5527222190C71AF31B641BC04C52104834EBD316F8A67142076F9E2C9305B72698AAB0B638AA323B7341B62C9CF6C7154C2DAD136DF154E560840F703014851692255F88019410DA95CF7766A08E601F1C810C9049AA5BC469EA8DBDF2B21B0228EAD1488C88E3938F872045325B15C4951591720C11C2E55455DD597B8C55DF5AB56EC98AAEF5ED88FD95F7184319206EAF2071C3D41926210735CC7140A43D77ED8B20C62FB52E4E141F6C5B137D2C92189E8C36C05B2298CAC1109C8B3B486F2EC28DCECB8ADB1A7D7218A5E25FA75C56D33B7F355A5BD393800E5B02C08B4DD3CFDA7A2D0381F4E49908D2D5F3FDB199B8C808E1B0AF7CBB1C9C6CF0B4A0F9D67BAB6BFB49B7826560A0FBE6CB14DD0EA30597E74FE7368325B6B97B7B04748A51C811E273638A7B3A2D462E12F9DA60F1BA07EE73371C9D76514887015A83C065D6E21E6B7204A40554FE1841D99A9C9D701296E28F7AF8E564AA37A0CAED5FD707FCE36FFEB3AFE41FFE6B9F2B7FDD22D733A1F48683CDED39243B15762AEC55A6E98AACC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5572F7C55762AFFFD7FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8739D15050D6994B7A56838C8A53A72DEB8AAACCDFBCF87C7154E2DE86024FDA036C551B6EBB6E37C551F1CA237523B763EF8AADBF40F1FA83ED1DF156ACE5E30D0D3962828D58E3937A5716B5748B7A1FB23A62D817CA6A287718B68528488CB15EF80A24AE5CB0C8C9012BBB4F877CADB12C8C1DC0CACB6C50EC84B1E58B0927DA3C6038206F5C849941EA7A38F526507AD36CC72E5C1EDFE4F83D39B95329939507AE9ACD1A2D3E119417371F2659A55BFA70F151DB225BE219469B190429D88CAA4E44427D6EAED3053F6720DE032686D01A6C698B604D52D1788A038A5328ED8F15DB6C5518966081B7CF1555312203418B2433E2ABE3623BD3155579F82925BA024E2AC5AFF5A8F81A380720437304BEBDB89598A49F09CAC8641266B8946E646FBF2B21B436BAB4F1FC21CFCF2B904AE3ADDCAF499BEF394B05875FBCA504E7E938AAD5F30DE29DE7A62A887F32DC471971354F4A610C648287CCB712CB4692B9260190C1AB4D31285AB45A818B30EB6E7753FC7B8AF6C5B1E81A7C451197A055DB0499DD35773908DB8DB22BC4F3ED56EE5A482BB0AE2BC4F2DBFBB732B166A11E18AF124536A2EE4297240E94CB20CE25080DECB25217600F8EF8934D9619058E9FA9F2462599BB1DE9928CF76899B67B67A56AB7118528294EC3336191C2C98ADE51F9ABE4D9A5D3EF649E127D0879A353BD333F164D9D06B70D17E7FDFAC4CD70B30FDF40E4474D86C7BE67E2C8F3DA914972492301EA50B77CCC8C9D613BABAEF4AE025B61BAB2004D3240ECCCB6F12D2A7224AAC0FC7E8CAC9558F3B76A7CB236AFEBAFFE71A8D7FE71CFF2049EA7F2E3CAA4FF00DC22D73610FA47B9A0F37B5E490EC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFD0FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF87FBA8BD4048194B7B1D95BD16A1EB8AAAC3FBC353F3C553112FA6A476C553AB12255A8EF8AAF9E321AA3B74C5549AE015F4D8EF8AAC4AD76E871414E6D7B138B5A6C801E9E18B6042DC6DF3C5B52DF50A927C701449176CFEA353B646480985DD972841A74195B63152BC1C8EC0E565B62A4D4635F0C430927FA42FEF07EBC849941EA7A0445AE51BB0EB98F272E0F7DF2E22D40194C9CA83D12CB99611F5DF6CA0B9F886CCEB4D0C38AD3E8C89E4E44597E9F0FF00A415237DB2A939116530DA8F5850641BC06490460103C31649B2C6B4C551491B6D41B62A8D446A0F871569EDCD09A6E7164817B73BED8AA1243C176ED8AA4379764065AD6A08C55874D652DCEC95381B9520D0AE08355241C890C9171F961E43464A8F97F66565B0233FC191B293C7E2ED954F932E88197C9A00E998CC12CB8F2B8B78DA5E05F8761DF156297F6621AD206DBBD31563176EC6328B0B29AF5C218C90964D289B743D724C0335D3999E52A548F8716619DE89680B863D716C6573968D2918DFF6A980A4A4924C4F20FB7BE4516C475754653C37AD6B8ADBCDEE74C92791A83A9C56D42CFCB5732CDC1622E09EB4CB22764893D3347F216E924D1F1EFB8FECC848A99BD2EC7CA9630AA82AAC7AE40163C4CA6DF4AB5800E2829F2CCA84940619F99FE5A1A8F937549EDE1065F4986C3C01CCFC52D9D36BA1BBF1A35FD2CD96A5A84338E327ACDC54FF00AC7363864F27AD0C6648CC52943D466C205D213BAF4C9B978BBD156E393D0E36CA489BB4E2A3B57204A1219A52B5C892A8749F91A57A6564A1FD7F7FCE346FFF0038E3FF0038FE7C7F2DBCA9FF00747B5CD9E3FA47B9A4F37B6E4D0EC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFD1FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88FE09E89206F986265C86217D18790FE1928CAD5640FE91DF2684C42ACA093B8C2A9DE95F01A1FB3E18AA6578547D8D81EB91B4A41229E7CB2064847C0EA29CB718612B2829FC7E888EAA37F1CBA835A26DDD016277DB225B0284E19CD17A65664DA103242114B30EBD30192D5AAE9FFDE644C9908B241CE489D4EE00E982D980C4F50B52AC59453DF06CD8024EBC91B89EF9125B238C1E6C93493FBD51DB2B914F000F5FD094ACC9C45052A731E45B601EE3E5621A401B7AE504B9B08BD5ECA14AAB22D189EB98B3951765860299FE9502D15996AD90E22DE22199E9F6D1FA9EA71F8CD2A7236DB10C9E1894B82474EF8B626B144ACE7E793114A611464B713D3C325C2153A8E3000DBA0D8E0E10AAAC0A8DBEFC7842AAB0F86BED8F085B40BF5C7842DA577708E2DC0531E15B62F3E9EF2B13C490712026D1765A5246DFDDED9512BC4C892DE355A7015A656496C125C88A29F08CAC96F8C95C01D29D72B2CEDC638DBED2D722634B4A0F676EC0D23049ED9548522987EABA7C6C5FF74BF2A0CA49626DE75A8E99C8B462314AF4A61848DEE903BD278F4708F511EF5CBEC32E109FDA69C435553E223AE3B278598E9903C34EC3BE1B09A4E652163241F88F5C8C9B211058B5DFED6FD6B9149800C6258DA4675AD47718B510A967A6C4CFF147518B512CE74AD3ECADD59961018904138AC4B2B49232B420500F9603BA69689A388D176AEFD71A452256FA9FB59206992716CF16A9A65E69B3012452C6FCA33DFE1399FA736EA759B97E31FE70E94BA6FE656B564578DAA3B3431781A939B9D3879AD6403C655A49EB34E794A5882DD36068336511B3A1C9000AA00074DB2B9158121176E55483DFBE52665CB8C6C29DF5C301B361E22A62C6E6766AF235C9B02104B38434069878583FB10FF9C653CBFE71BBFE71F1BC7F2D7CA67FEE4F6B9B087D23DCD079BDBF248762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFD2FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88D8DAB09F719801BD8DDC8A4849EC77CB2294B5C736AA9CB1531B69285636FDADB0A19143FBB5AD7A60554F53D45627B602942BA77F0CA8A143D4DC01E38C0D154FE02C621E19719288A362069F3CACC9B045308E2046FF007E5664D822A7731064000E991253C2A7A7DB7EF3A64789908B2BB5B6AF30456B8F1331143EA7A627A65A831E26C1160A6CF94D41DB6C04B6C62CA746D3099936AF8E5722A43DA746D302F134DC65132CE01E9BE5C88ADC5076398F22E7630F63D1A20F22A1F1CC69F376388507A3D9C3C19401F4641B87366D610D29B6F8B6C53A4401C7862CD31B789CB123A65A392A610C3273C2AC8228C71507AD3155EF18A53BE2AD32EDFC715413AEF8AA19A307AFD38AB696D19EC36C0555BD140360065549010B22D180F7C810C8158401F3CAC86624B3991B9391E16C8C9DEB0C4C5B4168DC8405ABD3299452C72F6F1199878E6398A6AD875ECAA5C90054E400A4F0D2053E371B77C3C48643656C6B5A6D4DB1E254E12260BB63C4AB5A195C30F0C902DB89239AD253CBF56499C9237B57491B6A16C5A24995AC0C083DF16892730C8D1EC72405A225182E881D70F0B2B51376A49E477C7856D512ED36DFDB1E15B649A15D1127C3FEEC0CB4FA0E6660D9D6EAB72FCAFF00F9C90B196DBF342F66238A4AC493F7E6E74E5E73561F394A156460BF66B9B2076745946EA7FC72A996B886BD42A72AE6E643925D7331634C980892493DCFDA51DB6C980C4A56CE49D8E4C06A7F645FF38C1FFACD3FF38F1FF9ACFCA5FF00746B4CCD8F20D079BDCF248762AEC55D8AB4DD315598ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8AAE5EF8AAEC55FFD3FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88D880E040E87B66006F492FA2F88803AE5914A1C5B7186BC7E2F1CB108781585C46CDBAA9C2ACB15E3684803738154955A35663F6476C05285594BC9C6B55AF4CA8A157D052E2837C8F567109CDB3AA808D8993688A6B0C44B0A7D93DB2064D8229EFA01635A2D09CACC9B0456081581F86A720649E15D6F6AC1C7A6BC71E26422C9AC6D242D535A63C4CC4532BFD3CBC068B534C789988B036D34C731F82849C789B04597E8765C654257204B121EB9648B18400509198F32CE019C688A82652A286BB9CA497371F27B068CA81D582D0F8E5122E7E3E4CF6CCF29D2BD3C322DA39B36B4AF3F84D17B62DB14D56A5B03364368E811011BD284E5D1E4A9B200402A389F1C2A8F49102AEDBD3738AAE3221EA31543927715DBB62A82949036C550F473FB471556457A801A82BB9F6C555E458A31549BD4F639021925B35DB80CA2DD189E8DE190216D45EFA38AD889621EA53EDF7C810C4C92A4BB8DA29A46958B28F8129D72206EB19A0D2EA607D53C9D3F9299618B68CADB5ECB7069E87A71D3E2343944E0DB1C9691DD7EF83F01C58577198F28B609B1B78A560C492483F6B299C68365DA2ACEDDCC82BBE55C28675676A0AA80BF1531E154D52C588E98F0AAE5B1707A75D8E4A21B71A12EF4F2A84AAD0F8E58CE4C4E6B26939A96E2F5F84E2D1256787D2B16319E52C42AD20F018B449E6F79F9A5E52B099ACF51BD4B6B984F16151BE5916B2692D93F387C822A1B5B2BF223254BC4BED3F363F2FAE24A0D6D9B7DEB4C697899345E73F28DE11F53D5D2A7A02C31A5E2665E5DD574C9264F4F555256A428208DF2FC45C2D46EF833FE7278423F31E36DA482653507A13439B7D39741AB8BE3F6565BCB84635556345EC01CD903B3A2CA374422214625457B65536B8849677605E86832500E4C521B8B97527E3CB00625262EEECC791DCD7260312B94E4C06A7F64DFF0038C1FF00ACD3FF0038F1FF009ACFCA5FF746B4CCA8F2683CDEE7850EC55D8ABB155AE683E9C554F97B62AEE5ED8ABB97B62AEE5ED8ABB97B62AEE5ED8ABB97B62ABB15762AEC55D8ABB15762AB97BE2ABB157FFFD4FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88BB53C866006F5971082E0D3BE5914A16E00488FCB2C42550D19E83AD76C2A98DBC844BC3DFA6054E2E29F56603BD3014A4515564CA8F3423C5C0420F7A65726DC7CD745704B8232B25C9AB6490DEA22A6E2B5CAC96C8C593433ACB1AEF9025B04535B4B70E188A1DB20649E14FAC6C55985464789970B281A7848C328C3C4D9108EB6D3DA78DAA2BB63C4CC063B71A3137205325129AA4EACB4A68DD6829824C4866305B32B2023B663C8B38B35D1A03EAA6D9492E6630F56B106109951E6E6C59D69DF100D81B073673A6FC4AA69D7BE2DB14E917E3C59A7D6B6C48461D0EF96C792A751A711BE155C57DF157703E38AB5F4E2A849BA62A82798462BBD71541B6A616B5AE2AC7F51F31D9C1192CC63A77C910D8C02F7F30F4BB763CB520A57AA93FD99590C0B179FF003C3CB167270BABC593DABFD99590D04A47A97FCE48793ED2A91852C47C27DFEEC111BB59953CAB56FF009CAA82DEE78DAC21A3AD1401FD99710C2390DA5F27FCE4A6BFA821FA8D89E0C09E407F665120DF1C858D45FF00391BAEDAFAED776C556BDC7F6663C839519BE91FC9EF3EBFE61426231805D4B961ED954837C256FA2AC7437AA9E3F4655C0DCC9EDB4C78CD48C3C0A9DC160481515C1C2AACFA79A834EF8914DD8D0379A79E1F7E06526177962A03963C585787BE2D1248D61963B1D453ABCB1B08FE74DB16893F32BF313F293CFDA8F9AB50BE8209A5B79A4668F8F402A7DF32314801C9A64C462FCACF385B6D73A4CF2D3BF13FD725B215D7F2EBCDF34CB1D9E893C751BB713D7EFC7657A0F977F243F30A7991E4967B343BD09A7F1C695F5FFE597E526B1A5DBC6DA96A0F34CAF5662D5D89E9D7251E6D1946CF1DFF009CCDF253680DA3EB11356474EBDFA1CDAE9CBA0D587E7F593C9373965D9DBAD73640ECE8B28DD16A7E07F1ED954DAE218BDCDC0124895E8694CBB1F26F88D9239EAE4E5A031921F8D065803595226876EB9301ADFD94FF00CE2FFF00EB347FCE3BFF00E6B2F297FDD1AD32F1C9A0F37BA6143B15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD5FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88D8294F845330037B52D4B29AF7CB2294AAF6BB8CB152D8D5830A547CB0B13C930854870DBD7C72122C2253953585ABBE54496C4A1BFBC6F9E441552641238567283AD7F86322299E306D98F967CADABF98AEE2B5B3B62C8C69EA01DB31CC9D8E385BEDAF227FCE2EC17515B5D6B32155900A293FB5BFBE5129B9F8F102F43D57FE716EDA2B988E9CF5403EC76FF89663CA65BBC10F25F35FE476B9E5FB932C687D193E1555ED4FA72066C7C10F3E5D0750B0B8F4E5571C4D0D7009A462A6616D632491014AF11BE59C4CFC20BCD9DC4428B551ED931309F0D012DB49CD59C50F8E094BB94C02636B1134F1C8711699C53368A452A791E9B60B6BA65DA0C94750C706CE442DEA763229E15DF289F3765879334D35C55476F0C8B7B3EB023E103618AA7D18AB0DB02DB27B16F8554F6197479330980DDC006A3C30A551862AAB18046E31545718986C82B4C585A57716ACD5E228322B691CDA75D716F8493BD32B2516F3FD674BD4DCBA4523A73040A1E99124A5E3BAE7E4DF9C35F467835BBB8977AAABD3F8E4F88A402F1CD4BFE71BFCE6F3D06AD732B576ABF5F9EF82D9D16357DFF38C5E757A97919DFF0098FF00B78B218D8A5C7FCE3179D43F22BCCAF4AFFB78F2639310E1427FD0B379CC48ACF6EBB1EE3FB720723891C459FF00973F203CD715C436F39F4A0604391B536F9E4253722185E97A27FCE37581BC59757B812AF2ABC2C6A0EFE15CA8CDCA8627D4BE51F22F97BCA10C49A3D9C5048ABC4B462808EFDF2A9CB67271E3A2F52B68AA828287C72102DE629D5BD9B4AA07877CB835909BC569E9815CAE4C0AAB428C0D08F837CA81B402424B733060D18415E95C2DC0B0ED474F6A973B835A0F0C5B0C424F1C216A196B4C5A6710105736314EDCC205E1B103BE0B21C59C2F9249756B69103CE352464F88B5F865298A6B78A5A450278D699602BE19661653F35154070DAF8659369F7D0DA144745FF4821547BE46CDACA1B6EC37FE7263C99179DFF2D64586D926BCB088C826A55C0E2C7AD7365A693A4D5C03F119A136BA9CF6922F131C8D191EEA48FE19B8C727439318B5194888DD21D890787B6DDB26402B080616EB44AB6EE6BC98F5C9844A21047ED1CB034C821DBBFD3930D12438DC9AE58D25FD957FCE2FFF00EB347FCE3BFF00E6B2F297FDD1AD32F1C9A4F37B9E143B15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD6FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF889B535CC00DEAF28EF9645528BA1C8E58AA10C60B8AE2A5181789C045B590982FF7669E191314829431FDE36532D9BE22D52D2C9F52BE82D233467351F466365C941CCC18ACBF49BF21FC950E9D6105EDCDB2BD003C88F9E611CAEDB1617D71FE2ED0B4B8E21385E286813C0E512C8EC71E057B7FCCAD0EF6EE386270A76037CA2591BCE165F7369A4EAD6CF2CC527122FC209AD32BF111E03C475DFCB0B2D424966B78946E69B63E22F80F329BF2DEE609654856A17ED532D195071525571E49BB86BCD0ED93191071A437BE567442CEB4206DB6113B6AC90628BA7345395F7E98789C5945329ADB8462BD69D71B6BE156D224E33818F137462F48B49887515EC32B917618850679A4C84B2FBE06D7A3E9CDBAD76C5594DB8E4C3154E6D5C89197C32D1C9984DE13571852886FE38AAAC7D3154C228BBF638A6959A21DC74C82D21999882380CAD692C9ECFD53BA0A9DABE1919288EEE8ADE6B65F4924EA29838DC8F0D092DACA8793C8013D1BC31E36631A5773F003CAF01FA4E3C4D831B1E96F2047DEE86DEE72139ECCBC2B496EF568492A9722A7E798A7228D3282B5C489EAC373561D1413959C8DD1D3A274EB7964B80D2C859ABB2E40E46E1829E8D6914CC1226B6E117FBF48C8F1DB2963A65B6D6E11176AED96C0B5109D4238A82075CBAD810ACFCB8E5732D6425CED22568763D72B896043A38A39012454F8E49B6297DC5AF21257A0FB38B7249FA3958B6DF4E2D3916C1A423ACBCBB1DB22538B1F131ED53CBE8FCA87AE20B6F82C364D0258A60231C93A93938C97C047C505C5BAF43B6596BE026B6B0C976D645BED452127E583AB899B1D3D3AD2DC6ABA76B1A6CC39ACF6C63507DD48FE399D84D3A3D5C2DF87DF9F7E50FF0003F9EB50B20BC6970CF4A7F3B31CDB6296CE872E3A2F1CD4855D641FB4BBE650DDC7E4C4AE362C3C32C6322969FB67241A64876EFF004E581C7921C753963497F655FF0038BFFF00ACD1FF0038EFFF009ACBCA5FF746B4CBC72692F73C28762AEC55D8AAC7E9F4E2AA58ABB15762AEC55D8ABB15762AA98ABB15762AEC55D8ABB155CBDF155D8ABFFFD7FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF889B360BD730037A3E4A1E9DB2C8A529BB42C76CB10A50AF165A8A625211B55C622D8494E52786C77A8C998ECD60EE83BCF8AE9388A506F4CC2CFB39F845BD1FF2CB493A96BD68047CB8CAA6B4ED5CD5E59DBB7D3E3DDFA93A3D8B69DA6DABA0F4D1211555D8663176D8A2F2BD72D751D7353962B3321084B1504D32893B1C71D952DBCBBABE9EA26657046F5EF98F26FE009EE8DE78D5B41BD1CCC9344D45911892001DE99595107B868DE79D1B5B31AC92FA5310014069BE36930658D6A8E1DD40E128F81BC72C69945299F4A421AAA0D7C46581A0B0DD574359012117A1ED9312A6A9C5E51A9E83C2524201BF618789C69C58F5D69DC410476C789AB85274B5E126DF0D0F518F137C22CBB4752028356DFA9C376E5C0507A4E974053B7F98C2C9E83A6CA15803DA98AB288E7008A62A9AC2E480C3BF5CB63C998E49A42E69D4E14A395BA62AACADEFB62A9BDA5D536206D8B35F7373CA945A5720B4840ACDD09CACAD221232BD6BF3C84CA62375D2AF53D0E637139A12B9622FF0D49E5B6F8789B404A2EB492CA69DB071338B1A9BCBCCEE47106BED919CB66D88DD47FC2E3FDF43EECC4B6F115787CB8D1C8A40200ED902590A661A6E841543155A8F6CA8A788271E97A478D6A3C3082899B08E801D854E5F02E3109AA82A0153990C4869A471EF954CB590A2D2B32B0200C840DB54C25A4B89050903C32D6714C963F5A3DCD0A8DB16E4B64B295492010B5C5A72289825D8455A7ED655334DDA734BBEA32CA28687E782DC9E2583494460B201C9B71F2CB014F10448D060906EA3EEC9028E25F1796914F258FE9196C5C4CC2D36B6B45B53B2B03DC8EF97E39EEE9F518DF9A7FF0039C1E5223518FCCD15B8F4EE295217F9797539B2C32743A8C6FCE1BE9B8832EE55968066CF13AB9ECC50124B549CB4B594249D4E48354940F4CB038F2511D4E58D25FD957FCE2FFF00EB347FCE3BFF00E6B2F297FDD1AD32F1C9A4BDCF0A1D8ABB15762AB1FA7D38AA962AEC55D8ABB15762AEC55D8AAA62AEC55D8ABB15762AEC5572F7C55762AFFFD0FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF88089A86B9801BD338CD40F1CB22969E30C32C420D8713B6291CD6D4E4A00B1C8B58D46E69979AA681CD40FC7331F019ABD4BB4D353E9EFF009C74D21751D692A952B535A78669C9DDDDE101FA397F6CB6DA3D360563A01DF2120ECB0B7F96FE5B8F503777862ABD08AB0EDBF88CA661D96309BF99F4A3043246918E9D8663C8373C0752D0F50796436F096321A37C35DBEECAE99458DCB65AAF96E48EF4A4B50C0D02B78FCB101127D05E48F375D6BB6612E418CDA850BCB626B4F1CB0071E6CFEE66658C7BE594E34C149A525D1AA3AE46450030AD4EC83B31A6F91DDAA51613A958D0F4A6DD71DDA845864B6A56423EFC6CB7C629EE92854283D6B9747937067DA79A32E4959BE9FBB8FA31564A83718153C85A8A9F2DB2D076660A6B136DBE1B4A354EC3F1C2AAEA4D3154742E148AF862DC119556C8324C6DE256A74DB2B28559630B95CF92421D979661B900A87A7BF4C0CE25B30F2ED8B60696C4160481B74C05B224DAAFD487F2D7E8CACC5B812EFA90F0032042D9575FDD0E23E9CAC861C454DE124FA9D7DB214CA3225673F4CF4CB62C885C353111AB6E3A65CD65506A91C9DB2120C0B6F771D36DABD7238F9B44D0E675AD69972628BB797D571C7609D716F64B58A587871DE98B4CC162B7F21D31F8769872194E45C7612F87519A46A274F6C886EE229B44E646066D9874F96482F116416C22E23A64D788A756F2AAC4151030AF5CC989D98917BAA344D37488610E0E78BE6AFF009C9CFCBF4F347E5EEA73BC5FBCD3E2661B54FD963E199D824E83541F83FAA5A1856F216D9ADA5650A7AECC7B66EB09D9D0E6D8B0FEA58E5E5AC1D9072F7DF2516B9287ECF5ED96071E4A2A773963490FECABFE717FFF0059A3FE71DFFF00359794BFEE8D69978E4D279BDCF0A1D8ABB15762AB1FA7D38AA962AEC55D8ABB15762AEC55D8AAA62AEC55D8ABB15762AEC5572F7C55762AFF00FFD1FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF87EB35F7CC572138A74DB2415A634196054B67900E44E487355B1CE38D2B96EC8282B9AB74F1CA665880A912F22CBDE99ABCE5CCC5B3EEAFF9C4EB113DD988815E25AB4DF6CD69767A626DF647999435D5A5BAB1D880403FC32B93BDD3F37B97962CD6D34832280ACD0EF414CA245DC621B30AD5A77B849A302A6A77CA2459494B4AD209812478C115DC951FD32316A1CD3AD5F49D15B4D91DCC3EAAA134655EB4F964993E64BFF300D235631DB30085C8F82806C7DB1453D5F45D7E4D52D54D6A683F56147084DE0BB3C9C4B4DB619645A728A49EE7799DFB1E992A68A627A944199EBD4EF8D2D30A9AD944BF3C6928AB440B28A61566BA79A30C559A58BFC43E8AE2A9F46FF10C55388EE00551E191BDD04A3A3BAA8EB8414A363B91B6FF003CB1B02312E47CE993661328DEB43E3DB16E099C4E38FF000C82A2606A656528D2A5C0A75C84D5BF4CE6310DA1A2877C890DB169537E99590E405754DC572239B656C98C511A74AE4E419C10D7111A1F7CA64E4001085780DFE9CC793090097CD7263A953F17860873681CD26B8D4E58EB5A6F97AC92A7BD9A405877E9938B4C9AB7BC9D09CB29A095433DDC8E4AD7010D68F82EEE0515D6BEF819C5368272159E9C69DF16F82223F307A4425457A62DD1016DF39D5F871FB4A28299092C804A6386EB4B928C84A9EE722C53D86EA3640CFF0068E2A98DBCF0D462A9EC13D221C3ECD76CCBC5C94A6B67744115CB1C2CE16F9AB4B1E63F2E6A1A4900FD7A090014FF00248CC9C45D06AE0FE76FF3A3CA4FE54FCC6D7347652AA9348C05283AB1F6CD96293CFE68EEF03BA6FDE483A10732E25A2B648E7152773BE5C1C69F35315000AE6445A96E5A036C407F661FF38BBFFACCFF00F38EDFF9AC7CA3FF00746B4CB43833FA8FBDEEB8B1762AEC55D8AAC7E9F4E2AA58ABB15762AEC55D8ABB15762AA98ABB15762AEC55D8ABB155CBDF155D8ABFFFD2FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF884B31D2B98AE426E47C3920A8694EDB6F9605482ED982BD01AF864952E86670D435F961B414D50730396D909A0370370B8907B7539AECCE5637DD7FF388F76A359642E05617A0AF7CD74C53B4D3737DAD359B5DEB30730410C280E63C9DEE9F9BD5EE3513A558B2745F4F8E5327718B9304B6D4629D679188EA69BE63C99496DDF9DEDB46B231B952D355547707C72316A1CDE15E63F38EA77F2C896933047A8A2939364C22DF48D42E6669E7E72173553D7157A56853DCE9A1622080682A715672D70DE9A3AB862FB900D72D838F991729E56E186EC7A81D726D2905FC25CA9FF277C558B5CDA9049A6D8AA95AA71931565567B32EF8AB2BB37A11BEDDCE2A9E46FF0010A9C55358CD40DF21D58946C792641191E58D811B1D6993661368998003C316F4D6273415E990423918D4532B294EED8065DF6F0C849513C465242789A2828720437464B553C7AE4087263255A002B4E9910376CB454520E3D69ED864DD0536219C0EA3C7289736F082BB1C50D3AF8E63C98C986DE4AC3950EE0E087368EAC3758BA99281493F2CBD125897130B346FDA66A11938B4C9111C92B15A6FEC32C0E396596B6D298D0AA924F51896B45C92C36A959402E3AAF7C8B6458E5FF99A0A18E21E9F0AF3AED8B7C5875C7984090BF30057662716F8A79A379A8C328726A95EBDB2052433C9FCC16DA94694515EE46458F0B514913505413E0315E14EED0C408E5F0FCF6C53C29D2CD1A2715229D46F97E33B302AD6F78A1BA81F4E4F89AA70B09B5AEA9CAE91030658C153FECB327149D36AF13F22FF00E7387C9B168FE686F3446800BE6259C0DAA6BDF3618E4F37A8C745F9A7786B7136D4F8B3638DD7C85256E09ED9787167CD408A66445A9665A1BA2FECC3FE7177FF00599FFE71DBFF00358F947FEE8D6996B813FA8FBDEEB8B1762AEC55D8AAC7E9F4E2AA58ABB15762AEC55D8ABB15762AA98ABB15762AEC55D8ABB155CBDF155D8ABFFFD3FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF884B33D37AE62B909B337C24788C2150E57E1396854A665FDE0C4AA4F29A4D5F7C802828E0F545DFC36C24A02E97EDB53C33132072B13EABFF009C5AD5E3B7F345BC6ED40411BF8D735F986CED34BCDFA88F12B6A36578375E20D730A4EF74FCD11E719DCE8F2CD16E6BC49CA64EE317278326AB710C14E5BF2E998F26526317AF79AA5F3210480A29918F36A1CD97683E45BBB86599E33C4D0D48C9B27A641E5FB0D360637340C47C18AB1BBFB6B494B7A43A74C550FA4A869DA222841A0CB60E3E6667058D09A8EBBE4DA503358061257F9B154A27D257D36FE98AA4034E546229DFAE2A9D5B5B22815C5536854290A3A0A62A9E47D302A2524A151E191EAC4A670CC7EFC90649847374CB1B022D26AE4D984E6396A06FB5316F098C6D5A64109A44C2A32B294D216A50D76AE4648298FAAA76C890805BE55CAC86D896F9656439112E26A322DD12A65C0EFF003C8C9C9C6D7D657A65126F086BA9818CF8E63C98C983EA32F10EC3C7A6087368EAC1AF2F19A4A7865E8936B7C562A1DF261A648ED37518849CA4DA996071E48ED7BF31F4AF2D69F25D4AEA0A834AFB62583E6AD6FF00E7226C2732CF030660C40A1FECC8B38A3BCB7E7A8FCCF6F73717527A224A7A5BD2B8B7C53237D1CC5E2AF348F7AE2DF1627A87E63C76529B0869198F6A0EF902D8032DF2B79D6FEEDC0E478B7BE4534F6FD0F5096499096DCE2B4F4225E5E1F175C5691261936A4DC76E95C9034D13E6EF425FF968FC71E26C10B08CB698D9D02B739240791AE64E29381AAC3B3E3CFF009CDAD163D5FF002CA3BF02B25A30634EBB54E6C71CDE57578F77E2BCF2195DE43FB44FE1B66DB0F27479051428EA3E79921C39A1E41B9F9E6445A90A577CB83745FD98FF00CE2EFF00EB337FCE3B7FE6B1F28FFDD1AD32C7027F51F7BDD7162EC55D8ABB1558FD3E9C554B15762AEC55D8ABB15762AEC555315762AEC55D8ABB15762AB97BE2ABB157FFD4FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF87DB371502A2B98B4DF69C13D01C90554E3B7D19312094A275F8FF005609482B1EB8DA6F964225055E3625900049F0C9A014D110167327C238EC4FCB31F240B938E41EA3F935A8FE8AF31DB4AB2846332802BD413D7303340D3B3D2C85BF5FF4FBEFAC6876376AC1C7A43E319AF90A77DA722D34B906FF00CB573DDC3120663C8BB9C4367CFB35ACCF70B0202CDCF751D466392999A7A8E81E5AB7F53D69286408A48F0C62D319025EA16D3456B0085221D280E499DA4B7BA7C9A99268691EF418DA5E5DE60BA83439191E550D5FB24EF82D52DD0754FAE6A30B28E20FE396C0868CA1EC8564540C632011B31193B684ADC1624914DF738ADA94F1A985A8C09A614816C6CDB92C4D3BE282295046CBD01C55150EC77FC7154F22208EB8AAB2005AB9162533840A75C21923E351B64DB0146C69B64EC3208A89CF2A5698DB784EA17D86F90B54D616AD28722529AC6F414272242AA2CC01153898B0E0368F4DC546FF002C818B6C415F46F7CACC4B9116B953A9A7CF20634D91284B89000486195483978C84A4DC7C62AD4F7CA241C805B966AA1DFB65120C64C33569F843235413D86463CDA3917973DEF2BA615AEFD32FB6264159AF9A12ECC85815D864E2D5229249E6048924DC230AD01EB9686821F337E6C6A3ADEBF6F1D8D8A4A07A8DCD97B838086145E59E5AFCABD62E21ADDBBAF26E546FA0F8E459C43E91F2CF96E2D234B68AE18C92C207A2ABB9F7C69BA3B2AEA725EDB594AF65138918100537C5B8178FE9DE5BD66FF547BABE57ABBD547B64241B4483E92F2CE8A6CE18A886A06E70527883D934189F9AB73E86871A5E20F4069278F8904D3C7052F105C6ED89AB392DED80DB44B9B5F5BFF29B23BB91090554BE113C4C5AAA55AB5EDF3CC9C4D3A88D8D9E47F9E9A41F30FE5579801AC92C51B32C23AD02935A66C71BCAEB31905F8377711867B8848A18A46047FB239BAC3F4BCCE7152418076DBBE65C5C19858EBB9DB2F8B4A1580CB04806E8BFB2CFF9C5EFFD667FF9C76FFCD63E51FF00BA35A65A393813FA8FBDEE9858BB15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD5FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF874B265328CA593246507853C72259C513C07139596D0935D28562721D5279311BC929375CBA1C9A24BE0B90268E872F8F26013B9650F1EE72126FC68DD12FDAC351B5B98DB8B472015F6CC2CE36761A73BBF5CBF267CCA9AFF966D6D24903148C0A66AB287A1D2C9EF3A5AA3C9FA30AF10FBD735D91E8714B6615AEF96C695E6084C43E0998548F7CA29A739B7B3E89E598CC6B3247EA19D0034DE996403878B9B2EFF095959C5F5ABB70AA054A9C910E482F39F3AF9B340D26C192C028B85560E57B900D32B21982F8EB53D425F345F4CD2A91463C09F9E565B014C740B2D46CEEC39AF18D870F964E0C66FA4B4DB8379651ACB27C400D8E5B17166956A21E262886AA456B9634F54B2332383B6581C8835E9301B8DF0144D690475C0C694FF6CE2B48F85C01F2C569188D520D698AD2650B50628A4D633D314D23636DBE58A8B6D1C73A62E60E49A44FD37EF8A53BB6906D8AA64241B6298F36CB0241CB9C9149B5ACC1471AD2BB656BB2600823AE40ADA1A7038B37865534DA493C828731CB740A4B3C94AD3AE51272E054DAE1BD322BDB2892C8B17BEFDE73E7D32B71E658826968D7264A7535C21A2D327D2BD40401D475CC88AA42FE528A69099146F99015747E43B157E7243EA03D0787E38C92194DAF9574C8900FAA8DBDB20C9CFE5AD3CCA812D40F1DB154F57C91A75C45536C3953C3FB714A4375F9736C2559628F804EBFE75C8948445AF97520223A74C0A9FDBE962CF7036AD4E2A9DA32BC746C550727A49B03912CFA2025B845DAA3DB20D40EE827B9574702868466463E4E55EC93F9C6E3D6F27F986253F11B4947FC21CD962745AE2377E0879810C7ADEAA87AACEFFF001239B6C3C9E3B55F594A17F8E67637026B24077FD796171D02EBBE5526E0FECABFE717BFF599FF00E71DBFF358F947FEE8D6999D0FA47B9D7E4FA8FBDEE99260EC55D8ABB1558FD3E9C554B15762AEC55D8ABB15762AEC555315762AEC55D8ABB15762AB97BE2ABB157FFFD6FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF861D3DE432034DBC72964CB565278537DF2259C51C6600152C2BE19516D093DDB13CBDF23D5279308D403ACA3623C32E8726892193D65742548F039911E4C03258F9B415E276CAE4DF8D49039755A94A1AD7E5989945873B0BEE7FF9C71F39AD95CC3652DE0EC3893F3CD7658BBAD34E8BF49F4D9C4C12F512944AAC9E39AEC90779872A6B75045AA442EA420CF17D95EFB653C2CF24AD9FF94B596B3B6953D1FAC49C6853BA8F1C9014D111458679F7CD173E94886630F20691FDF890DC0BE62BB6B9D42E984E8E6366F858F7A9C810CC1645A779360216644E04EF9510CC1640DA298978C49CDA9BD30C42C98F1D46F6C2F56DDB946A4F4CB22E3CDE84B492C83BB0666DF2D69EA81876276DB261C88372321620900D3A602C8A0E414DFB604521F73B8FBF15A5652C3A0C5691F1F2A2FEBC56933849A5295C569348C9D85715A46AB506FF004E290162960DD3E9C5BC724C627A002B4F1C529DDB38DA8698AA6AA4F615C5239ABA1EE72E6DB541280CA396F5DB2056D324B903E127E2CAD6D7CF23189FC29D72A9A82C7AE255E81B7F0CC72DF0293DC39505A9D3289B95028069DE9D0D3C7289A494AAE999D08A6F5DF2B699157B5B55600D37C21A93AB6B3ABD38D76DF3222AAB3D8AEC547CF3202A360B3429B10580F881C64C8223EAE9F6792FCB20C913069A240EC08057ECE2AEE735BBF02E062A8EE64C4C18862DD32254242E8166AB0A6F812A978C161AFE38AA412DD98E062AD52062AC4DB54B862C0D46E72126CE88492FE43B16A6443472288B5B8E714A7957A664636F32F4A035894C9A16BEA4D57EAD257FE04E6CB13A0D74DF86DE6D503CCFAE85DC0B96A7DE736D8793C9EA0DC98F053E199D8DC19B9CAD3AEF96171D06E2A76CAA4DC1FD92FF00CE2FFF00EB347FCE3BFF00E6B2F297FDD1AD333A1F48F73AFC9F51F7BDCF24C1D8ABB15762AB1FA7D38AA962AEC55D8ABB15762AEC55D8AAA62AEC55D8ABB15762AEC5572F7C55762AFF00FFD7FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF85DD35C96DF2964CB6023E1F9E44B20BA47FDE1DFBE5526E081BC7A2935E8323D527930FD45CB4887BE5D0E4D1253673CE1073223C9806516854C237CAE4DF8D12618E343336FDB31E4E66366BE45D767D175482E623455606BF7E61E58BB1C137EB17E5579EA1D734AB485E60D23280457E7EF9ADC917738723DF2D678ECAE638E75062946C7B6F94F0B9B1DD1535D496978CF6BF0C53281B63C283B21750D223D6007B800D7C7224282803E4ED387A4428AAE4086C05192E8F15BC5C621B814C810CC1632F697AB3858A22EA7A90322366576C7353F2BDE5CDCA4E632287241A26C820B0921B658DF7232D691CD4A5B431C6C476C9872209210DC8961BE02D94A72313B605E15200814C5695D6BBE2B48D4278A8F6C578531B76E9B62BC29B420938AD261E9B1FA714D2F119FA462D815D63DE98A53680D0818AA6F149414EB8AAE6980D89CB99F12D5605948EC6B5CACAF12A7D6292EE77C815E245CD755888F11954D416352CE7D43ED98E5BA086B89B92F1F1CA66E5C4A5D24C146E731E4A4A57713165F8776AE56D5229B69DCDA95C218B2AB5421AA4F514CC88AA37EAE5F71D33202A8C917A2373C6BB63264103FBB06A64A78E4192610DD451A37192BE3BE2A96DC319E4E4B21A0C551714AF1B202D514C894847CBE93A87D8918158F6AB72681074A74C55894D73C636538AB16B9999559972326D1F4A4C2EE477A1AD322E393BA716F70638580EAC4664636523B286BB2341E5FD79D8F10D6B21DFFD439B1C4F39AF93F11BCC8E24F30EB0E0D435C3107E939B5C3C9E6729B293667637126A2CB5AE5A5C7502BBE5526E0FEC8BFE7183FF0059A7FE71E3FF00359794BFEE8D6999D0FA47B9D7E4FA8FBDEE79260EC55D8ABB1558FD3E9C554B15762AEC55D8ABB15762AEC555315762AEC55D8ABB15762AB97BE2ABB157FFD0FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF85EB109D5771E394B24EE19497451D3950E44B208D724C840F1CAA4DC1037B50A4378647AA4F263B7B18AC6C72E872689206EC51A2653D32F8F26B08F82E48A440FEF295E39093918D3FB23F595759AA225EA7FCAED94172E299412FD5A2223FB75F8328C9172B1CA9F48FE507E663685756D0DE5D985C90B1A13B577F7CD7648D3B4C3983F4F342F325A6BDA35B5C3DC235D7006300824FE398C767698B202C860D46692358E54A18B704E0B05BA62D35B6BD77DBA0C890C63128A79D8107964086D102AC932B00246DBB9C898ADD2296EE2B643E8C425E5BB31ED95914CE3BA167D4A2991B946108F6C431940B13BCBC049111AD32624D3E19B4ABEB13382AC2993130DD114974E3892186F8DDB6092041DCD46D8AF12E6EA4D36F1C57897091456A715E2565993615C578C2656CEA69EF8AF104EEDA4407738A6C27B132151BE295540189A62CD1023351B7D38AA24232D0914C55148DD29D31559373AEC32DB544DB9A0F8BE9C812869C7C7C874F1CAC94B6F229000395CCDA84AA68DB996A6DDCE63B7C36414CE95A577CA66E540A45792D09DEA331E6C88B41C2FCE4006E7C32B6B9448DD9259C81283A64C45AF8939FAD3715E0475DF2E0BC4135B7BD2A9566CBC49788295C6A1137DA3CA9D4612CE26D8F5F6A9044A5AAAB4DF761FD723C2CE982EA5E7AB3B105566524D796E36FC71E15A63C9F9AB6B1D47A8A5BE63FAE34B4A4DF9AE92238128592BFBB507AFE39190544695F99324B308EE25A027615FEDC8D26DE956DA8C1A8C0662D56E831A5B63BA93FC7C23A927B531A543456723C3FBD4A313F86464D8262A90ADA70462426F91693024ECB5ADCAA0929448D8733E19763906194F0879FFE736BA343F26EA571EA7A69776AE96EDFCCC54803EFCD86298797D76404BF1AE617524D2CB74BC6791D9A415AFED1CDBE290AD9D1CE24EEA7C18F419990C81C498A5AE8C06E2872EE305C7A52E058ECB5CACEEDC1FD8DFF00CE308A7FCE35FF00CE3C8F0FCB3F290FFB935AE67C3E91EE75D93EA3EF7B964983B15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFD1FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF85BD3BEC652C938B6FEF53FD6C89641399500ABE5526E090DF3B32B11D40C8F549E4C7AFDE4E31FE397439344905217668C78E644793584C2C406BA27F9475CAE4E4637A6796B49FAFD95DBA0E455AB94D5B951E4C7EF266B5BC6B775A50D304A2CC4D7C26EBD7496194C7E97C48D5EF985931B918B23EA0FCA5FCDFD5B48BEB6B6D4EF19AD9481F131A537F139833C4EDB06601FA51E59F3FF9775DB2B764950C8CA3910457F5E53C1C2EC6192DE8D0C7672422789AA08AED91B72E050F34C84A88C74FB59025BC6ED2C8DF3F0C899354A289496A8CBD2BDB21236CF0C50922D011E390A6E314BA4B22416A634D44255246633BF638D3021033905B7F0E996C5ACA0682B5C92AC734247E18AA8337BFCF1572B74FD78B594CEDA6A0A62D914EADE652462CC325B6605462D89B4282A3BD71668EE031558ED8AB68DD3C3155772A77C9AD2989950100E56534A46707A9C84969A1254D474CA8A40DD648F5539516D8A4B350354E5126F821258048390DC0CA26DF14B638945C71E5C4D3AE463CD728B8A6358E05E4641B75DF2C70F850ADAC5B16E0660BC4D6B5C9C53C0D4FE71D2ACA2224B95A8F7FEDCB578581EB3F9B1A3DAC4FC640C4D42D3C7EFC945B2029F38F9ABF379DE597D19DD63A9E95FEB926C7906A1F99CD71EA52E9AABD4127FAE2AC557F301DE46ADD356BE3FDB8AA656BE75BD915E4B79CB2A1A36FDFEFC8C9059D7947CED24B7F18BB6661C803D7FAE455F61F973CE960B68891EE0EED5F1C559347E6182E6752B106A9C55939B95940658F8823A64486A3CD0CEF5AFC19590E4C64A2FE9B2FA4C2866EDF2C9C22E0EAA5B3E40FF9CA7F308B7D046911BFC71A9F86BF3CCEC71793D61DDF9A864E681D8FC4D527375861E975929521B91AEDE399020E26492E33A13C5B7236CB40A68B4D2CE28A4EAB9600DA0BFB03FF009C6A017FE71CBF2000E83F2DFCAA07FDC22D73363C83AFC9F51F7BDB324C1D8ABB15762AB1FA7D38AA962AEC55D8ABB15762AEC55D8AAA62AEC55D8ABB15762AEC5572F7C55762AFFFD2FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF85CD3C715A1EB94B24E228DC303B75A8C896514F44323C058D3EFCA8B70499EDCB24B5A647AA4F2492F638CAAFF91F6B2E87268925A5E07F8D2B48F63F4E6447935854B3E4B73327ED15247DD95C9C8C6FA0BF26AC66D5D2F6D22512486A287A6541C8E8C6FCFDA1A586A5710950B75093EA0ED936B32A79F192E1220A4D2A39291954A1698CD562D4A485158BB2C8A762329389CFC59DEF9E40FCD2BDD0960334F2B46E42F52694FA7313538A83B3D36A1F767917F3C6C350B782092EC06A00431A78660183B5C595F44693E60D3F558D7D39939103BF8E53214E7C260B295B66E21832303D286B94CB666775DE8488EA781A1F6C31DD944D35246EC6A23603B922992A64648A11A98B8820B569418D06B24062FABC2D683D4996887A531A6B25884B751B92C84D0F8E16050F57FB5514C285BEA57BEF8AA9B9F7F962AEE42837C5ACA2612716C8A3A17756152298B30CB2CE71C455B16C64115C28A55A9418B3470B943D0E2AE3206E877C55B57A0F7C5548CFC07C677C9B6D20649CB37C26801CACAAAC659B71D32125562DC76AEE72A2AB7983515DF2A2CA2955F3D15941F88D29944B937C1A8A4021F8CEF4CA26DF1631A9DD7A3C9D1A86B4C8C39B29724A9EEE49E3203354E58D54C4758B3D4562F5226DCB5363BE4E2B4C2A5D0754BE722494F1EF56396AD05A7C8B6654FD61CBB1EC7A64A2B4935E7E5C79767564907C4C3C324AC0F51FC93D2262CF6E7883526BB62A935B7E45D8FA9B9A927AE2ACCB4AFC83B510CCFEA705E42A323241677A0FE53E83A5C81A62A597C722AF51B0F2BE90CEA96BB1514A2F4C55153583E99708A895DF638AB2386FDFD3459051FC3034CB9A2D6E19876C8F0AF1D34D342CF1CA4F1FAA2B35D7CBAED9918A3BB81AAC9B3F327FE7257CD967AF79AEF2D74D9DA48E0E4AEAFB6E2BD33638F1BCDEA4D97C82C5D763D3B66E30C7D2EA66511000C4572DE4E24CA356D6126BFB44EF86D880C92C2CE20061E26F8C5FD757FCE3780BFF0038EFF90AA3A2FE5D79580FA349B5CCE87D21D764FA8FBDED19260EC55D8ABB1558FD3E9C554B15762AEC55D8ABB15762AEC555315762AEC55D8ABB15762AB97BE2ABB157FFD3FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF85BB6F848AE52C9904352B5F0C896514D3D7E36C77CA8B704AE3943AC9BEF91EA93C921BBFB2FF004E5D0E4D124854D2198FF94BFAF2F8F2601358471B966F18FF0086424DF8DF5BFF00CE24D8A6A7E63B9B6715564634F7198F234E544585BF9F9E5A934FD775396342055B7FBB1136B9C1F3100C614E4370B96036D06C20E54F8078D72756DB09334D247FA1C629B9EF9467C761CCC597853D827BFD3254B8B6BE642A6A141CC09E27698350F58F2A7E73EBFA4DC470CF3B988951CABE14CC49E276F872BECDF23FE7858DD476EB3DD8694815527E5ED9893839A26FA16D3F306DEFE28A55911380A28AF5FC32318A99D2723CCC6F10233A229FDAC970A0E54AEEB5C834C9030BD578C8E4C6BDF1E16A395E4DE74FCD485A64B586753DB63FD98F0B039103A66BAD7D124BCEBCBC30726C89B4F45EB1A2F2DCE2CD1092357AE2A88F888EB8AA834850D3C31605562B923BE2CE2895B86AD6BD716613AB4BB7000AF5C5B03238AF8FC3BEF4C59A651DD934DFAE2A9925C57BE2A89593E1FA314C79A065763BD726DF4A22BD7E9CACAF0AAACC13BE424BC2E6B8AFC43B6545045209AFB8BF5CA8AC50571741DAA4F5CA64DF04BE7D43802AA731E6DF148E59BD77A3FD9AD4E461CD390D04F6CCD998C291BD32C71B8D4EE6D2240640BCD5B6E3FC72617898FB58A732E4045EF962F1A51A8CB688AA88FF001D77C9C59C656C3A7748E4E6D27C35AE49938EB9A728547DC8C55522D734F520C7154FCB154C63F30B49F0C44411FED29DAB91920A5375AAF2B9553217A9ED9157A77945B99568C1E05A8D5F1C559B798AC80B713AA0E406F8ABCDE3D44F221CD181A53080E3CCA6D1EA238F5C20346495060DF999E7087CAFE5C17AB2859EED1C15AEFD08CCCC31757A89D87E54F99EE6EB5CF30EA3A93312B2B311F4939B5C50D9D266365881B52546D999195075F38DABDB5A9EC3194DA2504F60B08D8AF8F7CACE4651C4CBAC3490C071E9E190395CA8627F58BFF38EE9E9FF00CE3F7E45C7FEFBFCBDF2C2FDDA55B0CDCE23708FB83A3CC2B24BDE5EC59635BB15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD4FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF85884F361C76CAF8536C96DC111904D6A301816424D4A58C5C075A65462CC6441C41E1560CA5C9E80654765394525D76A423B31095ECD96E336D12CA18F05E69242AC0B484107B6C733230348134E0FC0EA6849910814F964278C86F84DF60FF00CE1AFA8BE6C997890CB5427B6F98594539D8657B3DBBFE720B44F56E352AA8320526BF40CC7E2A679214FCFAD422F413895A713C4E591CAE14F6485D8351286B5CCA84C14464F40D0A20D0C709A127BE3964006F88E264377A544A16AC797E19892C81CEC008418B78D5951D6BE04662642EDF164A099E9E2EED2E565B29CA1435A1398920E58D500F50B0FCCBD6A0F4E192770F0ECBC4ED4F7DB2996CCBF3024CDED7F37358E01259E4E245363FD991B41CAA7A97E61EA7771FA705CCD461B963FD98DB0F1187DA6A375A8DFA09E4919F97DAED8DB1337D27E58965B5B3854B971D70F0DB958A7419A457ACD2AB576F0C781B78D90C37CB51F153E79122990926B15CABAECE3E9C090B6491493DCF8E282143D555F1F962C86C8859EB4A57DB1640A696D24840DF167C4C82094556B5C53E204EA09169DF14F1A3A19949FB58A414DE27523ED8F962C816DD4788A0C9B68CA165630A41EB4D8E40848CA12C9E4E3FB5F3C810CB8D086E9551AB5395485053249E694B3F2076F0CA0C911507B8526B5E998F2986E8EC954D3879295CA8FA999CA229B69D6F1CF22ABF422A708853564D4090A6616FA65804AFC5CA985C7F1107776E2353E99A8EC3240AF88C3AFC4EA181A508E8327C6BE2306BCB3672F20635EA41CB319B6DC79186DFC7292CA49A65DC2DBE284858411732558B1E95C7857C5097FE9178643C5453DF1E14F8A11BF5DFAF71E6CD13A0A2F1E87E795CC5309660CAF42B41EAA34BFBDDF6AE52649196DEDBA3AC91C6A21554A374C1E2065C69DEB17D722C9A3908269D7263763E2878E3CB28B89030DEB52C3A53261C7C99022CDF47042D34AFC238FED13964604B87972BE3AFCEAF345C799357B8D2F4F98FD4ECA80723B1AD6B4CD861C6EAB3650F99E6B7BA8AF3882BE99D9877CD9E3141D5E49A0EE2DC076006C3265C594952DA2A76CAE450236CA34DB28E591405353D7316526F8637AF68BA242630596BB6527239718BFA78FC884117E47FE4D443611F91BCBAA07B0D32DC674FA7FEEE3EE1F73CBEA3FBD97BCFDEF56CB9A5D8ABB15762AB1FA7D38AA962AEC55D8ABB15762AEC55D8AAA62AEC55D8ABB15762AEC5572F7C55762AFF00FFD5FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF858B4FB432AE36EF0D94C1F6457A77C789061488210F4C89DD81539220637E0C15E9F0B7865660C244524D756F13A52693D47F019761C6E31905B67E5ABED43F756D68EAAFB89E9B0A66C61065198B425DE8B7BA7DD4114CFD036D95640E66220BEC4FF9C378DD7CE37019830E62A335D99D8E10017D63F9B7A7A6A3AB6A7005E47D36DBE8198526DCA6DF997E77B23A6EAD25AB0E2A0D7200D38138B07922A10C33271C9AC459B79526E573E9B7602992CC6C3958B67A75E5A7308CA3A8CC493B0C692359B89375DF28C8E6C792BD9C6E26238E63C925131C00CEC5C5083B644C6D946549998D5694C1C0CB8D1B1395E31815AEF8F02F1BD5FCABE5F49D16764F8BAE3C0BC4F5AD3A16810474D94ED86A9CAC4764E919B983F7E25B814DE201A8CCD4272A93644A690F1029C8E41B0146FAD40003B0C5928B4FEF8A559273F0D4F862A9A5B5DD286B8109DC57CA08DF0B105358F50403ED7CF16C051297B08228F8B3051E9A8A01B3F4E98B3B6CEAC4FED64896622B7F4913DF205988A067BD249F8B204B608A0FEB47725B6CAA6526282B8BC201A1CC599445269AF5FB5731E4DBD17DAFA93480F63928868996716303222B74DB2E1071AF74EA3770295230F84B6A53B32AF23BD71F097898EDED5C1F871F096D8D4F0121885EBD72CC71A6C81B63B77A6990310BB9AE5CDAC12FF4AB80CDC50D0F4C558EC9A3DE3BEC877F6C551B65A2DE8956B1B52BB653910636F54D134C962319910E6290D9183D46C42C7C05295DE980067253D7A655B76DFB665422E34CBC8AE2ED959C0FB3FCD968838939879279F7CD7E8594D630B9591C1008F7AE5F8E0E1E49BE6986D2E66B998CE4C8EC49673EF99D8F675D96492EA9A6709AA13BE65C4B8336373E9D234AD45EF84968E04759E8D2B015427299C9B61167BA2E84EAF1931F5CC6939110F67D1F4BE318F87B65326F8BFA35FC955E1F937F94A9FCBE4CD047DDA7419D5E9BFBA87B87DCF29A9FEF67EF3F7BD372E69762AEC55D8AAC7E9F4E2AA58ABB15762AEC55D8ABB15762AA98ABB15762AEC55D8ABB155CBDF155D8ABFFD6FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF855B670AC2A330CB984B2785D5A23C4EE46C300938D3C8037146EC0D640A57B1EA73271C6DC59E7013FD17CBB7FAEB98A106353D588EB9991D3B85A8D50112F59D1BF2CACE1557BF01993724E5F8F03A39768B3EB2B0D26C08B45317A454D401F16C3C732BC3D971F68BE7EFCC1D3E117D1DCDBB5631C8041D7BE60E78D3B9D2EB789F437FCE1B5928F37DC48C4A6FCAADEDDB35595DFE973F117D6DE76B8853CCBA848F19742AC38FDD98530EC4EEFCF4FCE7D0AE26D50DF5BC263889E5D3AF4DB292D5283C3230655657431B275AF7CB612A6A31A651E578C9BE1C5A94A65933619E30F7148792460EFB653273F1AF4B1ABB029C89E87C3289B9B16EDB4CFF004A3F0F5F6CC7924A3C6845A6E741D7A530C5814DA3F2DB4D4A2D3DE99246E9B59F955DAE230141A7B62BBBD7748D35ACA255DABE00615B2C9238C83C9969ED95973709D912B1FC4081F31912E48298C7C788D8E552660A2D08A743EF90660AA7A95D80E9D31656EE05BF6A98A6D772A7C35E9B62B6898A4E3D4D7145A244DDF9D315B442DD11D1B1640A3E1B84A8AB6F8B65A6D1DC42109A9E98B3077524BA534DFE5809724144FAE0A9A1A6DB6449660A02595BFDF832A25B0150FAD71DB9572B994CCEC8692E958D28731A4D112BE38BD42083D7B656D97B325D36D5415240F965D8E2D332CC15408C00287C732E107189B2B7E207ED5465BC010A95E638B0AE3C0150B2DB07E8B8F00543A699CF9D453C32328D3762431D138B54D18785320DE8693CBF0CE45502D3C7156E2F295B83560A47CB154CE0F2E598707D351C4F865536704CA6D16085032D001945365A47724C33A90A7805EA3C7271834E4C94C63CC5A8C0B6EDC9E840DF3371E375B9333C3755D61A4574B67F1ABE640C4E064CFBBC875ED367D4A61297F881DC9C988538F3C96A56DA488630CD1737237232D8871A52B492FF00449A798BAC3B78658254D2425FFE1E666DE2A1F9644CD90C6C86C3CBDC40AC5DBC321C4D831B38D3F468D387EEF7A6F9592D822CEAD2C5234038819596603F7D7F27871FCA4FCAD5F0F286883FE9C21CEAB4FF00DD47DC3EE792D4FF007B3F79FBDE8D9734BB15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD7FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF84F5A9238F5CAA50699EA135805C2D19413C7A0F1CA841D7E5D4BD77C9FE4C9F5955BAB9531A36FB8A7F0CDAE9B15BABCBABA7B25BC363E568B8428AD2D3E13B75CDC474FE975F9B54642929D43CD1733551578D7C3251C4EA660B1C79EEA4E530908600D30CE1B231715A437D65F5A82269F76DFAE6A75317A5D04097D2BFF38A5603FC513C69B50F519A5C8F59A4818BDF3F32C8B6D7EE550D4EF503E8CC4C8EDA06DE35E6CD274ED634C8E1745F5C2F2DC6FDB31645BC45F0F79C3499F4CD4E482088842DD40C6326A9C55BCB703DBDDC25B66722B97036C22FA334EB45963889EE06093998D91DB69F1FA87E1AE5191CD8F245DB5845F5ADD46512E6929EC1A746D253877F0C8DD2631B66365A3C2101283071B2E0641A7E9B6AB2F22A0536C7897813496D944AA517E11D71E35E0463C28C415E94186DB63B2E580602DA0AA88B88F6F0CAA4DA0B74A641902A65A84D3164D09A9D7155F50686BD77C55DCC0DB90C554DA6A54F2C516A26EE9D1B16C06D552F883F6B0330518BA937F37E3859834AE97F4FDACAC96C1345AEA15523976C812CC4D4DAF474E5BE544B671A88B82CD4E5D72124CA7B2AAB0E42A7BE504B18B23B331FC3B8C039B6B27B39A35A6F9978A2D190A73F5D8F8D2BBF6CCBAA71495CB728DB636BC4ACB301B8F9636BC498DB3ABF518DAF126255154103AE4265C8C25AA467ED0CADC97048491B0C5556910EE31550692256A823DF2B9ADD216EEF23E34AE5643194D846AFA82420B33058E952C72EC637703365781F99FCDF662678397A8A4D0919B2C7074D9B3BCEE7D5EC0C9584D10EFF004E6588389E2DAFB7F4AF4811906B80C11C68897479C39A3D01E8BE19514A9FE8B71F69B204A695974DA007803EF4CA8C9CA84764C6DED78EDC0636CF85905B45180BF08069BE368213650028A0FA3157EEEFE50FFE4A6FCAFF00FC04B44FFA80873A8D3FF771F70FB9E4753FDECFFAC7EF7A265CD0EC55D8ABB1558FD3E9C554B15762AEC55D8ABB15762AEC555315762AEC55D8ABB15762AB97BE2ABB157FFFD0FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF85F8ECA6827585979C84FD919084FC474B9674F6CF29F906F35036D773218A18D833A95FB437DB719B1C3A1E274FA8D43DA2E0C763686D6D2216DC06CE3BE6D30E8F81D5CF2F11610F34D76CEB212EC8767CCC3300535006ED2AB986E56455F4CB03FB54CC7F1699CB7539675B32AB335030DEBB532B9E76EC1877633ABEBD05BC4817E3095DEBE39AFCDEA7A8D0E301F49FFCE3379B34BD275C3753CAABF58466DC81C4F875CD5E6C342DE931914F72F3ADEC17BACC9A94171F5A4B9DFD21FB35CD7CE36E44254F2DD5E40F74AC253188D3E28FDB31A78CB951C8F3BD4BCA69E67B826C23334CBD471FEC395F0D322049E6DA8F93752D03518E4BC89E28D5BEC95207DF4C2254C6389EA9A33F3B58E48979851B8C4CDC884699569EEACE6BD5FF000CA652722324EBD158255940E61BB6545927D6AB1D43EDBEE47865728DB644D32A8A7884600F0C1C0CC4ADAFAC952283BE3C0DD18DB27B39964B73CA3DE9F6B1E06C186DD1A90A6A77A9C9C62D528515707AED84848D950380A2A37CAA41902A4CC7B0FA3214CC490EC549353438190921A42AB53CB14F1297390814AD3B62B6A2C66F7EB8ADA8BCAE2B5E98AD201E46AFDBA62C97FAE07FBB2A7BE2CB89DF5C03ABD0F8E02CB8DB5BFE34F8ABF4E506569051B1DF7203E2C896C89561755FDBC8D3305556E7810FCAB4ED8382D24A252ECBB57A7D39138523252716B7C626525B901DB11869978CC9ACEFD64A7C5C72F87A5AE53B4DE394935E5B53AE5BC77B35108B8EE82903957DF229114CEDEE62E5566E43C3DF1663127705DC0A2B8B3181305D460208A74F7C05B618F854A4BF87C46001B2D06DA8C6BBF2FA3088ADA1A4D622029CFF001C9702DA17F4AC4C681BE23D05729CB1A5AB405CDD731BBF0F01918C2DC7C9B3C4BF35FCCF268FA60B6B78DEE2F27158E34AF434DEA332F1E3751A8C8AFF00959F947A8F9D3433AAEA90B5BFAA2A3983B75F119B1C717499A565BD67FE71E6F9B549EC74CD4B9F04E6005EE7B74CCC842C38E254C2A7FCA7F39795E57730C9731C7D5829FE991941B23240C3785A76B4BD06DEE22DA507B6634E0E4455269E35902A2FAA9DE40731CC5B8056F5410027D9FD939518B9319505E8CE36AE222C84938B13CC8A8E9D708091BA7885760570A781FBABF947FF0092A3F2C7FF00013D17FEA061CE9F4FFDDC7DC3EE78DD57F7D3FEB1FBDE8797343B15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD1FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8D2F23F91A57BA4BFD6D6BC0D68D99B874D4F199B556F6FBFF00315959471D8E9F1AA0A7024019B9C18F85D466CD6C59E49EF25615E4332A52A0D50DCB2DF2D6856B70C52551CE43DF31324DCEC38B88D3D353C81A7CB0F32AB551E03FA663193B0FCA3E7DFCCDF2B2E9FEABC7B2C7E1F4E53293938B4F4F9C6F56297D485DF7198E64EDB4F0E146E83AFDC797196E2DE46AA9A00091D7E9CC6CDB876719D3DDBCB3F9BD24F2C31DE0DA94AB1FEA7308C1B0667B4D94D69ACB0BD12208D97E3151D3289636F8657A07911B4F7D723B3D2E146909A39DB7CC738DBE395EB1F997F96F6BAE687305B355D42DA332D55454D47B0C8F03938A76F86AD6E6EFCB17173A65F42C9F1955E429DF0183920B2BB7BC4616F2C5B16DDC65660CC165F14EB3463B9032071B30532B566E2C3B83B65538D1499526D019BBD6990E16719A6917C5DBA63C2DF19A6D6F7CB1008C7E8C785BE395344BA420107AE061396E881329C892A0DAD663C8D0ED9592CC054571DF2BB6C017F2B7FDA1BF7C2A8599ADE876DBBE2A82372A361D3A0C5541AE7155295D4AD477C52934EC6BB6D8AA0C87F138AA8307DB7380A43AAD502BB7865062DA0A3E1269D7A60A6C0510A5BF98E34D80ABA3316515F98C69369846687AE16B4C2075322A96D8F7C55328A7F498156AD31564767AA23108EDDB08544B5EC55DA4FC724C81444378A5A9EA7BF5C2CC14C92F401F6F6F9E06C1277E9458EB593AEC37C84CB6715A849AC27412F4F7C8829421D6A25AF292BE1BE580AA026D6226DC3FE39602A841AA52B2C64B329A0032AC82DC5CF9B81E8FA0797EFF00CC36DF582AC8AA3AD30C62E064D45B23D2FF002E746D666FABEB1682EAEE27FDDB915A27874CCCC61C0CB2B7BEC5E5C8B43F2FBD969AA96E889B050053F01997034E0CE16C3BC93A446D35E6A37975CAECB32853E03A665C25B38C63BA6F3C3CEDB526BEB5496201B83151EFED82526710F942FF00F2B62F34EABAAEA1631FA2F393450294A57DB31E45C8807897983488FC97713E9FA8CA1A624844277CA0B7C52BB760F0C4E05030A819590C81A45AF5C14CC14D74F6F888F0C7859829D237C58D3305FBB9F945FF0092A3F2C3FF00012D17FEA021CE9F4FFDDC7DC3EE78DD57F7D3FEB1FBDE8796B43B15762AEC5563F4FA71552C55D8ABB15762AEC55D8ABB1554C55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD2FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF911B5D4CA4450905BBAE74F1C603E6D3B48AE67FACCEA900FDE16A6D9682038A626D9EF97B49957795D99CFEC9195CE6E660C6F47B1B58EC87AAF540BB961D4661CE4EE74B87D4191C5AFAAC65616692836E5B65066EFC600F1FF3E4D71AB45708F1045607E21F4E5329B64703E3BD62C6EECB539792FEE8B1F88FCF31CCDB04292D9AE9C158E18C484915AE57C56C8DA31A49596358E416F21EA54E44840059C68FE69D574B44824D51BD24151F16E7D8E63C837C6DEEDF96BF9A30697AC437F733A5B98C8A9E5D7E798F272216FBDBC9DF9E9E4FD7AF7EAF7B7111F56309212474C003978362F14FCFAD33C9F3EA31DFE8572B34929E46314A54D7C301736DE23636377C39471820F5F6C8101B0499559B2DBA8F59E847619590CC14FAC751B37996105CB374DB6CA671B613932D59618940988453D0F7C8F0A04D136CD6F2352390BA9FDA1BEFE18385B064A593E9D74D30689498C9DD8E3C2CC66461E76A80354A81BB65538EE9F15B87528DDB846416F0272B316C8E54DE3BC454025A06EF4CACC5C98E45296FE05DD4B37B5321C0DE24BA2BC570095007BF5C8B0326E59EDE9BB004E28B4B5E48F7A1A8C56D41A44DF7C56D45A4DB167C482797AEC315E24135C76A62BC4A06E0D7A75C4A89287AB43D72921B414545734A53E9C785B01B45ADC8F1C785982AE2E42D0D7A74C14C89D95D2EEA2B5DF035DAAADD92C17953DF15B4CE0BB006EDCBDF15B44BCE78F247A3FB6109050E2EEE01FB44FD392664A69697B329A93DB147123FF4A3014240FA71533A434FA846D148EF394310AA81DF018DB28654A6E3518B9DBAC324B2198D1CD3A60106CF142A299A4BC92D622F2040086237DF2622BE28651A77947CC5A9C4F35BD83945E8C4102996082F881EB3E4EFCA9BD9D44FA8388EA7918FE5898BAAD7E4DDF4559E9967A26872A40024C828A0EC09C9083AFE3280F24DBDEACF7535F5BA2C8EC5A075DFE1DE997C4522ED966AD33DA5A4934D2963312A213D299785E152D23CBF696D62D3ABB191FF007A2BDCB76CB449A670DD4BCD4C2CF402DC4249715529F3DAB80C944698D7953405B5B06BB9A61140D1C923CDFB5D2BD32B25980FCBFF003D4B379FFF003D6EF4486FCC7A769D39ACAA7ED509EB9021982FA1F54FC9D96DF4DB7BFD27525BB9258C39B52C28BB0D85322907778AEA52AE8F70D677C443780D046761F7E2C814CEC599516534A30AEDD30365A6515E425FE26A7B61676FDE9FCA021BF297F2B997756F28E8841F63610E74783FBB8FB87DCF21A9FEF67FD63F7BD172D68762AEC55D8AAC7E9F4E2AA58ABB15762AEC55D8ABB15762AA98ABB15762AEC55D8ABB155CBDF155D8ABFFD3FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8EF578F9B5C06FDDBF4CE9B8DE267A6651E54D1967BAFADC9BA72AAE552C8E29C1BBD62DE25826E4AB45AE56656E6E0C28FB8B9068427241F697C72B9F276F871F0EE94C97B4256184257314C9D96395B10D522BB9CC8D23058687965129399116F07F30E857BACDF35B58446572D4F8728949651A4E34BFC8DF335FC6918B3912693756A76FBF2B126118D966FA67FCE2079E3569D2425E28DBA7F9F2C4C9C918596BFF00CE13F9AA29D1E5BD255853896E9FF0D944A4DD0C4CC2CBFE706B5A9E359DB5858C2EECBCFF00E6ECA2526F8E265563FF0038CDA7E8171691DF7994594A8F4F50494E4476EB91126D11E17A95A7E487956EAE62177E6E597881D6407F8E032660A7179F957E4CD35D2DE1F32C444A28C798DA995993602A69F929E539E932F9A6293BF0120C812D82491F987F2C348D2EDBEB1A7EAA048836F886E7EFC46ED3964C33FE55FF009A2FECCDDDAAFD7517A01BFF001C970B57131F6D13CF3A6481DB4B6B5B68FED02A454F8E3C28F11136DE77BCB598417D6E4229A31A634BE2338B4D6B48D6A25442179EC6BE380C2D81CD45BBAF28385F5EC65A93B8A1C81C6DF0CC92CBA4EB91A13E9B3D3BE40E37331E54BCCDA9DAB7EF6D0923DB2BF0DCA8CD53F48A85E722346C7ED2F8661CC516CBB516D4ED5BED311F3C82AFFAEC741C5B63D3E58AA8B5E27F362AA2FA82F4AEC3BE2D96817BF5AF5DBBE29B59F5A88FED62B6DFAF19EF8A82A2648EBF6BAE45B42BC6CB4FB5BE1640AB2B8DB7C0D815B92D3AD70164AD1B0A75CA9AD7F2DC50EF8551D0135A5715477A8513956BBD310CA3CD6FD61BAD324CCA9BDF49F663EB8B548A3ED2C750BFA705635F0C5ACC99E795BF2D359D7F538AD591845506507C0FD396E38DB0964A7D476DF933A0D959033C4867812AEC7B6DF3CBBC363E2A47A4F937C9BA5DEDDEABA95DC29145BF027AF1FF006B2C18D7C5629E7CFF009C98F23796F4ABBD13CB56714B76A0A0950577029E1ED93F0D7C57937E5BFE746B779ACC375AC4AD0E9CC4B70EDC6BF2C84E14E3E63C6FAAB53FCD9F25F9AEDA0D1F43981BDA8590AF5AF7ED80069E07B5E83A3AD8E9B6019FD4927456E47B03DB260278588F9D0BDE6AB67A65BF660580C902ACD043E8C3A7C1D2A02B8F96264C4861FF00987FE997DA7E996FD178F35191E2470A335A8DA0F265F5869B66D3EA4B6CCA0815DD908C921F9C3F96FE439FCB3E7ED77CC1E77D224852EE6768DCA6F424FB9C3487D831793349D5EC21D5BCBBADB441E3E6D64ED4E1ED4C348B7E587FCE45F9ADF47F3B0D3667A346FC5A64F6A60E1660A1FCA5F98F1DD086D6693F771A84563DC78E34D80D3DA2CEEF4FBD50F1CC391F7C69982FE81FF26E83F287F2A829A81E4FD0E87DBF47C19D061FEEE3EE0F25A9FEF67EF3F7BD232C69762AEC55D8AAC7E9F4E2AA58ABB15762AEC55D8ABB15762AA98ABB15762AEC55D8ABB155CBDF155D8ABFFFD4FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF8BED12FA6D457F46FA12ADBC7F626A7C47E6736E72BCD5193DAFCA1772C114D67796EF4894FD51E31D5BB72F6C899A63A6B6609AB5DA32C37B6E2DD587C2E452BF2C78DCDC5A4012093CFBA5D95C5C4123AA9B7157693A7EAC13C9B39630D30CD5FF003318397B28A39E2ECD18AFF0CC4326D863A62B73E79D575085C4517A61F6F886DFAB29949CC807D51FF38D7F96B36BF24BE60D7A33C62F8E30BF64F43BEF98F29378C40BEE7D22C74E69E9269D0C76D07C10CB1AD18BF45AFB655C4CBC1E1DD9E8BFB58ED1ED0C421BF857933462881478E266DF8E16F93FCD9F9B3A89F3543E5DD06E92E5E7904370EC6BC2BD48DB2894DCD86114C9FCEFA4EB5E4DF2D0D6EE7CD33CD77749CA3B3864DAA7B5331A536C38E9E45E5CFCBEF30F9C746D43CE7E64D66E20B0B2532DB425E858FB0C89C94C463B64BF967F973179E359223BABDB6D26DEBEBDD31A6CBE06A32072527C17977E75585B796FCC53E81E54B9BBD4A68BE15773C8F2DC640E56DC7A7B286FCAFF002B79ECCC351D62C6F9A0421B801F0F1EB959CAEC31767F13E9997F303F2DADECC68BE67D3A6B4BB20707028DB6C4E1198863A8ECDA28BB3F307935EDBD0F2EEBB25AA1FB2B2BD313A92D3FC9A82D7B509BF41DC2C9AADB5F475256456ABFCB251CE4B4E4ECFE17805ADC68374F7306A7693F224F0940D8E644276EB3361314A5FCB71DB96BED36F0C31F22521734232F0C2386C59661A17994D9010DE5D212BB75C90882931A7AE681AF68FAB442DD6E22172B5E418ED919419C7210C953CBDA4EA2A566A7ADFB253ECE63CB6726398B18D47F2CE695A4789223131AA377A7DF98192365CC86434C1755FCB7B8B552CB1866F0EDFAF2A316CE379BDEE87A8DB170B6D29E269D36FA3234C81481A3BD462258245A7B645210F34BE98F8C1030B7525C6F2035058838B3115212F03591CFB53148802A6DA8C6845198E2C8E20022A1BB59A95241F6C5AC48A3967229C6B4F138B30510B73D37E98B74510B703ECD7AE03BA65B045070AB50D91E171BC42AA92EC64AEEB9131489A36DAEC3380DB0F118084892266BD759111006889DEBD71886C81DD1F0992E18C50C4657A7C210572CE16D243D3BC97F957AF798E482792310C524A1645E8426FBF5EB8F0B8D393EB1D1FF002374CD2AD24B8FACC8B2409CBF7A76247D38F0B8D29A0B4DF33689E5E3793CF730C571A7D79F134A8197618B10789E11F993FF003955A5E97697F6FA0A9BABC98323B49BA8EA36F87325AE669F188F3B7E6079FAF9ADAD2F561B59FD46B94534201A9006C3C70DB8E7290C5B4AD3E1D275392DB592F717334A03C8FBF53DB27C69194BEACF2AF93E2D6E1161A2A492974A3B36FC411DB2B99B6C8CDED5F941F9172796BCC4FA84AD2CE8CFCA6F537E277E9BE56CF8EDF74C691C2A8109E1025501F6C3652082F3BB1AEA1E6A7BCA739223C78FECED8DA683D06F1115A198578A312DEC72F8C0485A90180C006AFE6C9243F14708DA982500189A66B1C4F1488518AA4B5E5F25CAA52A6069E4DE67B48BCC7E67B6D2DADD25B585C7AEC07C54077CABC621AF64279ABF2B6EF4DD2B5AD5741BE6B484216823534A0A0EBBE4865B6C1005F879F9B02E6E7CD9A80D61E3BA9E1958073B9DB26269E00F3089B568627BAD3D12358E4A1E636E3ED960368D83D2B43F3C4F63259C11C9CE5968272DF641EF4DB274178807F551F9093B5D7E45FE4BDD350B5CF913CB92B11D2AFA65BB7F1CDEE1FA23EE0F2DA8DF2CBDE7EF7ACE58D2EC55D8ABB1558FD3E9C554B15762AEC55D8ABB15762AEC555315762AEC55D8ABB15762AB97BE2ABB157FFFD5FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF90FF00CB7F20CFABEB70F9784FE9BBB0569CD76FA727E3B8A3474FD1DD03F23BF2F3C93A589BCC5E60B79AEDE3E4119F707EFF007C7C76C8E969F1C7FCE4679DBCA97925BE9BE5331C6DA651649E3E8DC698F8EDF1C34F985743D435AB73A95C5AB244568B514F57DBDF01CEC8E34D74AFCB3F36EB344B1B65B6B63FB4C074FBF29395022CB74FFC91D5CEA169646F0CB792B82B02D6868457299657271C5FAB7F90DF96FA8695E588AC2E2331968C027E81941CAE6460F7693CA361A1E8F705C896E5DC145EFCBB1CA8E46E10BD9F397E76FE60587923CA7269D6404DE66D67F72186EC81E9BE0395C8861A60BF911F93BA0E956D75E74F38EA0B3DC5CC06ED8B36E8C6BB75CC79657371E36216F637DF9B9F9A52D868F792CBE5AD35E9287354A2FDDE198F2CACE589ED7E70F2C5C6B0963E42F2E5C1B68B4F939DEBC6688E0F63959CAD4715259E7AF3EE89F933F97B37956C5565F325C2141243F6F930237A57227236E3C5C4F19FC99FC9EF3579E357B2F3B7982E85BDACF299409BAB2F20DEDE390395DBE97476FA57F323F30348FCBD8C68F62F6D3B88F837115DC0A7BF8656723D0E9B40F813CDFACB79A75A6BE9E0145242328E80E0F11CC9F65F131F9AC2248F925F4B6EDE08D4C81CAC4F6481D1434AB8BFB2BB8A73AACD71A746F59A177AD4F7C9C32BAFD4F66D07D412F9D7C87AC79623B2D3ECA38F5644A34B415E599B8F23CE6A7414F0F3A6EAF7777248B3B95AD16253B53E599D8E6E8F2E1E03499E9BE5C56BD53AB192DE2247276DB2F127127165D7FA0E8F0317F2EEA85EF1002C8ADB93E18CA4D6229B7953F33A6D26F5346D6AD65424F1FACB0FA3AD330E72722117D2D63AAD9DEDB42F6B79CD5D4155AE634B9B971E48AF5AD89E372BCD7C72B219A1DACF4FB9E4A6C57813B371EA3C72B21B2293DE792B49BB25BD08D49F6FEDC810CC3CE75CFCAFB296390C4A2B534A7FB78B787916A1F965240EFC54D05698B6061D7DE50D42353FBB240E9F462CC31B974CB8B7E4B25B9AF8D31672E4848D2584EE87171AB74D61B9A8E25295D89C5B150951DF1640B4B28A80A773DB14CCEC9AC658A0DF22E2A3ED62326C7A1AE34B68D58A15824653F18E831E15B645E43F296A9E67D5E1B75899A194D2B966385948C9C2FB83CAFF0092FA779295353D5A2170654E410EF4AFD3991E1A0E77A4E82DA4699F5ED6AE255B3D3ADE3630C55A55C7418F86D32CCF3DD5BF33AE7CE574749D20496F6ECDE9B4E36047CE98F84E34B23CEBCF1A3792FCA7A1EA926BBAA97BEBD80FA4BCF7E743D725185328647E5DEBFA8C32EA57C2CE212DA991B8B91534AE4A98E4928F9735ABDD1EF0DD69B251CAB7A918F9634E29927A350BBF32B5ACB1DBB3DFB5C207A0DFED634CA2FD64FC8CF29C1E5EF2B0D66F63A5CC9081F17662A3010D8F77F23D85DCB6FA9DE5CC815667261AF8646922D3CD6EEC69D62189A168F8D7DF1A6C8DA43E4EB4FAB9B9D4661B4D5E24FBE34CF74E755BCFABE8B3C8C68ECEDC7E9E9878E934520F29DB1B2824D4E71BDC92149F7CAE5918905956A139B4B19A73B7D514927FD615CA253B6B312C23C8F6AD35FDFEB972B54B824424FBE5129313128BFCC0FD23079435716F2B969636A460F4DB2D8DD391189E17E06F9FFCB7AE0F34EA9A85FD94CD01998F220D2996C4B0902C7749D26F7CCD7834686136494AA9229C865824E348909B47E4F86CB506D288E57711A09325C6E399C83FAA2FF9C7E80DB7E437E495B375B7F20F96E33F34D2ED87F0CE9307F771F70FB9D2E5DE67DE5EBB96B0762AEC55D8AAC7DC7D38AA9D0E2AEA1C55D438ABA8715750E2AEA1C55D438AAFC55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD6FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF233CB9FF0038C3E4DF2ADCBEB13B133D0B1911C0CC3B2E7ECFCE5FF9C95D5A6B1F346A1A7E95AB4E6C625612C5CC96E229B03DB1B29A0F89DEDDEF00926B97974FF5394909AFAA47BB63653C2FA87CC9AF797F56F2279774DD25D34B4D3A86707FBD6A0A751BE365061B337FC8DF2C5E79C752B7D26D6F2E0CAEEA11B937122A32B258460FD2CD3FF27FCBDE569F47B4B9B432EAF28065BC6DF8F427299172618DF40456B6BA6D9C16FA4C4102A51E4661D69EE72891A732106272C4F737978F79C94DADBC970B272AA1F4C578D077395D972B1E3DDF9E76B6317E6E7E6FDCDAEA08F69636B318F8CA7ED509FB35F96425272B829F42FE69F927CBDF977E4FBCB5B1FAE896F63315A4924C4A7A8694A0F0DF28916D8079F7E5DDB5EF907C986636E96B7BAC9ACD7DC6878B03D0E512939118A6307E6459E97A6DCD968086FF00CD3316F4EE07C67936DBD2A72B2594B0DBCCBCB9F94BE65F327999FCDDE78B1B8BA4327A932C95E0141AEC08DB2264E4E9F4FBBD4FCFBF9ABE57F2AE8F0E81E52E7677F0A18E242F550D420EC32B26DE8F498007C75AEDF5D6B378B7DADDCB4D7B292CBBEDD7C32B327A0C31012DFADC21FEAF343EABAED118C5283DF07139825174B3C0842B583B13D2B91254CE285BAB580C5EAADAB41714FB1FB253C699289759AA31AD93BF21FE5BF997CF5AA25B7942D9E390B52E6465257DE9B6676393CB6AA9FA0BF97DFF0038C4BE5FB186E7CD3299AF1497996BFC33618E5B3CA6B620CB646F9AFF0025F45F3497D3AC6330A8F843A6C7C3AE64893AE9C5E7FE59FF009C4B6F2E6BEFA88BA9E78B90608EE5878F4C12935883D1FCE5F91FA16B366919822B5BC450A27550A6B4CC49CB7722317CD97FE5DF30FE5DDECA90C72EAB696CD44F4EA683000D8F40F2E79AEC35E884733AD9DD746B7907C55FA7010CD983EA0F1AFA3C1404F85180EB9590D812B7FADCADCBD6F84F4036C810C834F248AB406BDB7CADBD21BA53293CD41C5B42552E936F221AA038B20C2B54F2BC3217A44BB83DB16C3BBCCF54F2A4B17F751803E58B5F0B13B9D1E5B706AB4FA314243346F1FDA53BF4C50A5146DC838041076C0589927F096E03236C0A6F6C582FC3D7FCEB931BB548A3A0D2A6BABC820B40CC2660251D7AE5A22D7C4FD0BFC98F24E95A1E9D6B7A2D985F08F90673515A7865F8A3BB4CF23D4FCD9E6780AC36D247CE78E3ACC3F6683AED99341C7F11F21DDF9E17CF3E61BCF275ADF243A7D94865BB8D0856A0EA2B5F6C691E25BD5935BFCBEF2569062B7A34F0A7266EADCBFD6C683025F9C1F9BBF987A879ABCC37C25AAE903E1B5727627C0602144A9E07E85AB1755670AC4D77C1C2C2791D64B67A6DC898BB2CBB8849355DFAD463C2D5C56FA7FF00203CAB16AFAF433BBC73C664570817DC1C785BE127EA25D4634ED0934E0BC04DC5828DBA0ED9121CDC401E6CF7CB6D0268F089CBAB2814A1A7DF829BC4425FE6C65BF8AD6D636E3561C877E38D331009F689666F74B92DE195614B215766F6C69B0462C1FCF9AFE876D2C3A341AA4308545370ECC0EE7AF7CC79C776C1008D7F39FE5FDA687656D77E64B5630D0944700D7DF7CACC14C22C4BCD5F9C5E4792D27B1D3F5980FD6C2ADC55813F08A0A6FB640E32D6718653E49F37F93EEB4286C1756817D221A3F8C035EBBEF90F08B0F0C273AE79A34C3A7CF099619CCBB2B5410C3DB7CC8863A0E44202980CDF92FE44F3BE963EBBA72FD6AF3ED3A902B5C3C0C258C3E78F3E7FCE23685A523EB9E5EBAFAB6A963FBB823076A2F4040EB83869C69E10F9423FC92F3C4BE66FAC49A6CB33C8D46B8553C4FE18971CE9EDFD0E7E5058CFA67E52FE5769B72A52E74EF28E896D7087A8786C21461F78CE9F4FFDD47DC3EE797D40AC921E67EF7A2E5CD4EC55D8ABB1568FBE2AD547862AEA8F0C55D51E18ABAA3C3157547862AEA8F0C55D51E18AADC55D8ABB15762AEC55D8AAE5EF8AAEC55FFFD7FBF98AAD6ED8AADC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5578E98AB78ABB15762AEC55D8ABF30EE7FE3932FFBDDF60FF7998EE4BF25BF357FE537D53FE39BFB5FEF6F5EDD716D0F1497FDDBFF001C5EA7FB9E98B745253FDFDAFF00BC7FDE0FEFBFB9EBDF23264793F4DFFE7143FE3BBA67FC707A2FFBC7FDE74194B18BF42B56FF0094853EC7D8FF0077F5E9FB194CDCA83C8BCEFF0061BFE521FB5FF1E7F63A9E9ED98F272E09DF927FDE49BEDFFBCB27FBDFFDEFFB2FE3953938DF1A59FF00E4EBB4FB1FEF50FF00783FBAEA7EDE464DF27D01FF00395FFF001CEF2EFDAFEF63FF008C1DBAFBE53258F3625F985FF92AB47EBFDCAFFBCDF6BA663C9CDC6F00FF009C69FF0094FA7FEE7ED0FF008EAFCFB65679B9717EA37997FE51BD43FDE3FF00799BFDE4E9F64F4C94F936E93EB7E3179D7FE531BAEBFEF43FF7DFEB9E998E5E9B4FC921BDFF008EDDB74E9FEEEFB1959E4EC23C936D3BFE3A375FEF1FDB1D3E5DB029F8ABEB3FDF27D8FF009E790973627E2AB17FBD717F75FDC8FF007A7EC7D39383AFD47C5FA1DFF389BD2EBFE385D0FF00BC3FDF77EB99F89E675DC8F37D49AFFF007D71FDF743F6FECE6645D066E6C5344FF7A24FEE3AFECFDBEB99117124CCAD3FBE7FB5FECFA60C9C9AC3CD3CF1F69BEDF5FF0075FD398736F8BCA74FFF00A587FBC7DFFE3A19747E9497CB7AEFFCA552FF00BCDF6FFE95B80A43D7A1FF00792DFF00BCFEEC7F7DD722DB1504FB67EDFD1959641565E9DF2A2DE12997ED606D0843F4E2C825571D5BED7D38B6B12BFF00DAFB3FECB14179F6ADF6BFDD78B51611A8F5FF00757D18B192017FBB3F67A603C9804543FDD8C805926D69DF2E8B44F9BD2FC89FF1D6B7FEEBED8FEF7E797C5A25CDFA15E5BFF8E6DA75EA9FDD7D1F865F071F27262BE69FF8EB6A5F6BFDE47EBFC32E71DF97FE4FFF00C995E66FF7BFFDEC93FBBFB7F4FF00938ABEC7BDFF00943F52FF008E77F70DFEF47F7FF47BE2AFCCCD7FFDEDBBFF007A3FBF7FB7F63FD8E1632E4C6A3FB4DF6FE8C0D3245C3FDD5C74EDFDEF5FF638583EDFFF009C50FF008E9C5FDCFDA5FB5D7A8C0E4C1FA41E6DFEFB48FB3FDCF7FB3909399064D63FF1CF8BFBBE9FB3D320DC3E2C67CC5FF1D0B0FB7F647F77FC71671F8A62DFF28CEB5FEF67F74DFEF07F7BF4E167F37E67FE65FF00C746F7FE526E9FEEDFB5903CDBA3F178737D97FF008EDFFCF6EB8127E2952FF7FF00F4B5EBDFAE2D72F8BD3FCA9F6D7FE526E9FF001EFF006708607E2FA3EDBFDE1D1FFE523E8BFDFF004FF65930DD1E5D5F5BF977FDE0D27FDEFF00B2BFDD7DAFA72054A7FE6EFF007960FF007B3A8EBF47DAC816324FB4DFF8E7D97FC733A0FB5FDEF4EF902C1F62796FFE51ED07ECFF00C73AD7ECFD9FEE57A7B674DA7FEEE3EE1F73C7EABFBD9FF58FDE9D65AD0EC55D8ABB1569BA62AB315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB155CBDF155D8ABFFD9, '1', '2021-03-13 12:29:10', '1', '2021-03-13 12:29:10', b'0', 0); +INSERT INTO `infra_file` VALUES ('9a2317ba-fa4c-4f77-84b4-7cc537d382df', 'jpg', 0xFFD8FFE000104A46494600010100000100010000FFE202284943435F50524F46494C450001010000021800000000021000006D6E74725247422058595A2000000000000000000000000061637370000000000000000000000000000000000000000000000000000000010000F6D6000100000000D32D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000964657363000000F0000000747258595A00000164000000146758595A00000178000000146258595A0000018C0000001472545243000001A00000002867545243000001A00000002862545243000001A00000002877747074000001C80000001463707274000001DC0000003C6D6C756300000000000000010000000C656E5553000000580000001C0073005200470042000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000058595A200000000000006FA2000038F50000039058595A2000000000000062990000B785000018DA58595A2000000000000024A000000F840000B6CF706172610000000000040000000266660000F2A700000D59000013D000000A5B000000000000000058595A20000000000000F6D6000100000000D32D6D6C756300000000000000010000000C656E5553000000200000001C0047006F006F0067006C006500200049006E0063002E00200032003000310036FFDB00430001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101FFDB00430101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101FFC00011080190019003011100021101031101FFC4001F0000010402030101000000000000000000000405060702030108090A0BFFC400511000010302040305040804040404040309010203110421000506311241510713226171088191A1091432B1C1D1E1F015234252162462F1335392D20A4372A2253482E218356317192655648393A3B2FFC4001E0100010403010101000000000000000000000304050601020708090AFFC4004A1100010204040306050303030302030607010211000321310405415112617106138191A1F00722B1C1D11432E10842F115235233629272A20924E21617344382C2D225354463B2F2FFDA000C03010002110311003F00FCFF00F041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C10418208FD87B813D3E67F3C7788F3FC6E69363C22D6FDDF0411BB815D3E63F3C104286410153D460823760820C10418208E4027618208E7815D3E63F3C1041C0AE9F31F9E0820E0574F98FCF04119A10A936E5D479608525EBE1F78DBC0AE9F31F9E08520E0574F98FCF0410702BA7CC7E78208DADA0999B6DE7F8E08236F77E7F2FD70410777E7F2FD70410777E7F2FD704118A93C317999C10CF13AFBFF008C638219C72013B608232E03D47CFF002C1046694F0CCF38FDFCF094D4158006875877214CC4D4FD59E32C6132985EBAD1DBC7E9189A1DBE576B559DD9FA7DE0C2D0D1724AAA4545ABF8AC18553348A7AD1FC695F7ADF44E1946C9F53F76F5BC6C473F76174E33BB4F03024EB57AF9368DA3830E51803308511C2536ABBB6EC6FE9D1A366135E0FBF1DE92CDF335347DDEE075873FAB3873DD005AC29CB7F4D6B780E5F4D5A851A8FB2D5C6FCFDE363F973C309B988C092848E23661A353F0E1FEF1B1CBBF5AEA52806AD7954F9B1B391E70DFF567A9D7C397282190654A510010227ED1F523D3E3A0CBA7F68FE44CB50E2F95D8D8BEBB6EFE908AB3AC2766471AE623E4A8721E9CB4B73D7AC467586B5D2BA4A851555F54D2B3108594242AE1691B7849036DA2498EB6BC763FE0E62FBF335285B02145D07567AB3373E839C707F8B3F13F099FCB1290B41E0052E143F8D47E2EF1E7E769BDBC67DABAADECBA8415508529008E12384980678418B58EC46F7DFD51D8BEC1E2B2C54A331040053420A6D4D5DB4616EB78F1AF6AB1E8C5266709A17DA8E49ADFDF98A15D4F1A96E288FAC39726D6264FDE7974E5B63D138341C3C89686F942403B1259FA01BF3146BF11C561D4AC41535D46ACE2E3416D980B78C33F7B56CB87BCF13677208B0B58013EFE77E5BE1D4FC4E164A0103E602A5EA0F46E9EB5B45932826536F4DD9C352D4F3D2FB3D52AD755FC9CB69D6AA85405AE080831637111067A72BE2B38BCC82D570DD5DBF34FB545E26B329A26A101DC0DBCB6D7DF296D2692FAB2135D9FD5200FB41B252088822E08322C6FCFA5F112BC5898E259248B9B01B6DC8F3B5AF09DD10CA04B0BDBDDFCB5768E2B75F6579237F56CBC0EEC82952B8ACBE1B022790F58E57DB0B48C089EB97C60A9BF6D051CF2BDFD0738CF0B7ED2DBEBF58A8B526BFF00AE05C41924CCDE6E6F620C5C7A82011CBA064F952259494A49B3DC57AFD1875DE32C5EF4D9B4FE7E914E669A892E9971405D51B73DE4FF00B8169E78BD48CAC2C070C031353E0C4FBBD214960D6BEFA7D2AFD5CC57B9BE76C282A48264F31F388F2C5830A8561C0094150029CEB5B3D2FEE90B02458C5659CE748414107884AB8960CF0743CC103623167CBE79596EE94016DFA3DBC474D602A56FABFBB539443ABB50B652A4B55A16A0090D94F09932624F43E9E98B127284E3903893DDCB7625C9A1A3B5F7FB466F57751D1B9EF688457E7D9A212B536D0A74916295A5C2F728099244741BF4387185ECAE5929655FAC4F10A974B355CDDB63E2E7687F845F7038881A74156ADBD80C46AD1966479EEB3AE4D1D165F58FBCEAB852A34AFA112AB495A91C113E7F3C67138DCAB26429B1929D22A0A92096E4FAB69CD8690FD58B29038998F420ED607C5F4D23B15A53D8935667C935FA8EB5191D227816D347B97D758857DB061C0A68A45A08BCD8CC6397E79F18303226AB0982FF00E6785D2B354849D2A4172F5A13B46E9C6CB482490966E120BB1B9B1EB77F28EC2699F669EC9F45774E57D00ACCC1AB9A90F3A8950DD5C21445FEE0440C72CCEFE2063F16B2A9092949774049513D0B75BF4143185E669593C441239EA1F73A0A103520EF16DB35D9169D60B392A825A5A424B72A3C2102D75493EF323D310723033BB529EF714852384BB11551275D400DA3B93D22B79BC93982870034D75F00FD4921BF2C198EB9692092B4DE67C43A5C6D6B5B162C2F651583471CA4958005003E16BD3F310F2B2598925C103426F5F2B5B5BED15FE6DDA286F83B92823C5C478922236DCFC45EF893C360F1085702B09316C59FE617A060C77E40F51599C365533880AB01424569E5D6C4E8763F43BDDF9FCBF5C7C6A8FB131B1B6F7BF4E5EBE78208D9DD93B19F77EB8208CC20A6666FD44608239C1041820830410A1948215239E082377027A7CCFE782083813D3E67F3C1041C00EC27E38208D884004CA62DE7E5CFF0C10A4BD7C3EF1B3813D3E67F3C10A41C09E9F33F9E0820E04F4F99FCF0411B5B481303A608236E0820C10418208D0FEC98DA4CFEFD7E6704369C2A7937D0084D82108DEC6EAF4C10429C1046B7397BFF007FBEB85E454A81B375D768D54A2080CEFEDBE91AF1B2C0248D296E821DCA415F086277E956F0E9061B2BE57D5B6F7E71209C10500785CF3A0F37F1A6FAC7307A1F81C3757CA1EE7503D2B6E7CA36FD3357840DEBA79FE233458906C4EC0D89DF61CF1B494158E32A219CF0B78EFF0096D371A99A9927846B43A93CB95EBEAD1B0DAE6C3CEDF7E135E3E725624CB4A94FF28A3EDCB9F3DA31330B24CA33662920B7155B7D4927E9CB584B599BD1E4CC2EAAB9C42184A655C6A090A001DA489F389DBD316AC87B198ACF6721465AFE6503504B545C0B373357E4D1CCFB55DBEC2767E4CD4A26A78D20FF00700C40237D3EA6E0D23AA9DA97B41D332DBD41A6DC42570A471A162EA883736EBCFDF8F507633E14272F952E66270E1870A99419EAFAD5DC0D2F78F2376E3E2FCCCC8CD932672812541252A3F2935B0BEFA0E978E906A3D759BE6D50BFE3B50F2FBF512C00A5917BAAE9240B0E6664917DF1E89C8F23C248C3818591292500098FC2CA61435D983B0A9BED1E7CC7F6971666A973E72D426124024D35B39BBBD3C621A3307585FF002524A567ED106D3E666F7B01F118B1AE461928799C0929B0000E7561E7A97DAB0C5199FEACB1750258B9F017E6684EBCA14AA96B1F5B45995B951FDBE2E020C0E289E1BF5237EA31058BCD254B79682DC2E2EEEDD2B5D4EFE0DAAF0495BA8861A335EA46F41A915AE8226D94E87AE6529ABCCD680C7DA2952900F08BFD9E2927CCFEB8AD4FC7AB1130CBF9893D75ADFDB1A690DB80E1EA0B373BD036B4035BD3C21C333D4F91E46D0672361B554905350E18F09488175023D23F2930B96E2312B515F114D38433B5DDB5E437F28CCBC419CE92F6605DDC543DAFEDDA29BD41AE1350B50CCAA949249E16D1C5C23A094102DCF7F28C5830B904E5280E025C8AB352FCDFC7CEA215E015F6C3DEBE91546799EADC2D990191C45B5055C8E7304116DAF8BBE53D9A595259160E5C10CFEBE9E2D521962CF5DC5BDFD3C04573996A24B4140AED3D63EF31D07E62D8E9596E401013F2ECC1897A56BE356BFA1D420EA5BDF5F7F4AEF3AD4C1DE0E05C70F14DEDBF95BE1E78B561B23E2203300D417AB7974ABD342F0A2106AD5F2F7B8BC5719A67CE9E2217293B4131CF97E38B0E1F26C34A40330A53C357207DCEDE20C6C4117D62249CE6BAAD6696929AA2B5D7D5C284B2D2DD0924C429494A8226D1C513CAD384B1D8DCAB2F149D2828034701D86B5F76BC64214A4A940512CE5F7B7BE9168692F674ED1B5938DD5D4E5AACBB2E708597D6EB654942B9941215B6FCE76C737CE7E25CBCB5E5E194E5CB70D8B01A5B52CDE71AB6BB74BF4BEFEDE3B33A5FD98B4069B525ED515BFC7AB7C0A61A525D61348A4C158F0A8A1C0B3D640E9D39DE3FE2666999CD2995355864A5DC825D6F4AD886FB36D19FF74A552D2EA0BB8D49EB4AEBA336BADF946F643A6A8D34993D150D22109E14A8D3B0A58E1020F196F8A6013BDF7E78A86638BC7E6734CD54E9F3261FEE0A98906C2C0B1D80A51AE6012E7B01F3569BB72BD76AF4110FCDF581A4595F12AA03F370EF7496639A532019E805ADD4E12C0E439962A60E34288243B80E4022E59EC7DDA35EE26B5016AB0DF7E5EEB158675AE6951C6B7B312DEE4B6A4A9503A711BDFF00327963A7E4DD90594A0CCC389967240A1D74AD58C024CCAB8507D2B5E75F75EA22A8CF3B4FA36520533E85405719EF00EBB898103974B7AF47CAFB21C20BCB4CB048E1000DE9B5D80B1F4895C0C86204CBBD5F9BB0A8A50783F952FA8BB5C5242F81EE217809503693D2763EF1B5B95D309D9BC0E1C0FD44C9680003F3149D8D8989944992194DC99AF5D79BDF9161B0A9332ED3B38CC1C4B7468AC599321961D7449DB88A52A03CA6FE7189299FFD9DCBC12B992262AFFDA1DBA56A75F5893952E4FEEE14B269A0BF2A75D8C7D9F702BA7CC7E78FCE947D488CD00899E7820856D7F4FBFF001C1046C7397BFF000C1046BC10472013B0C10473C0AE9F31F9E0820E0574F98FCF0410702BA7CC7E78208CD00899C1042D47DA1EFF00B8E082327397BFF0C10A4BD7C3EF1AF04291B1BE7EEFC70411B304118A93C51788C10463DDF9FCBF5C1041DDF9FCBF5C1041DDF9FCBF5C1046C4366F0472DEDD7D7046AA4F13559A33E03D47CFF2C11AF77CFD3F98E0A4A6262F820EEF9FA7F318E083BBE7E9FCC6494F14DE2309AE7095AD4DC0F4D21ACC404AB702C767F7AFD9E32EEFCFE5F1E78C27121542AB50F46E9E17AD59E25B0880407143F624F87500F231AD41485A63633263D63979F581BDF0A0636ABFE7F36F48972BEED2598003A7ADE9785E97611E000AA2C009933E847E5EA6CA0C3950709AF536F63DB457B1D980960B1B3EBBF386F5A1F2E7795280D2904965C2425206EB27607C89983B637460B12B9A897250541440A026B4B5FCCE962D103333EC1C94AE64F9A947007F995AEFE837E758ACFB40ED7B49691A171BCCEA9BA8AF4A141A085414AD22D3DD9BEC3A73DAF8ECBD90F86188CD97266AE5514439526D57B37516FE787F6DFE2F4ACB53364C99C0B710042BCA8EFE1D0DA3A0BAE3B6DD45ABAB3EACEBAE3792A4B818E05F0C2153CD30A3CAEA9F863D51D9AEC160B2097C62524CC64F1929D980615D49D2BE71E43ED576FB17DA099302672D94A2ECA25DDF9DEF67D0E800A32B5C72AAB0A299C5960A8A9C5A964913E2B9513CE79F2F71E852E6CA54B1282412DC219852C2D7A6F60E3568E61370B880B3396A528383577AF89E7C8E9631ADEAC697C34AC8EF9C62CB4F0F1294544110482607979F3C44E331ABCA5887F9AE1D83D7F353E71159809B882020171471F6E648FE1A90F794E98CD7365871491474A2EB2E04DD063FBA08B4D801E5D442CFCF7138C3F2950068384925CEED785B01297214935040AB8B9D6F5D2BCF689839FC0F48B45197AD0F5554A4FD6D44F180A6C0E1E10A2A09BCDD3E569384F0F87C4E26612B4A88A312E5FD0BF8FF009B14BC406093C9CB83D2BD7A00FE759EA5D6AEB895A50E2D2992084A8C46DB0F4E9EEE58B9E5D9271315203D2AD5FE437D5C447E2809BC4003A7B715A5EBE42F151D76A72E71F78A22E4824C13D46F3E71B62FF95648944B0A080E68430E6DCCFADDB946B8190CA20861A1AD7C3EFD4968AF739D40D10A2B50B4F43BDA79F5F527618B8607260E9FF6C1377200BF20DB7F889054A0EA6340CDEF5D76F48ACB3ACF95C214D3A4F0C9E0130A9DAFB88FBF6C5AF078144A07BC481D40A6CDE9FCD635EEF9F5F7D22AFCC750D45495A16CFD58DE17DE7113CAC89E76DA7D4C624E4E270F852429495736614E47CF7D768C940A72F50F5AF9FF0010DF94E5B9FEA5A85D0657435598D4A9494B290D3ADA254620BBC3C2396E4623F31EDC65D93389810A55C7CC01A07D3ABB3788A4615F29A51DDC69E1E71D89D1BEC9FA82B8B199EBDCF13A5E8950BFA806915E5D418F09534AE24CED3CA76C732CF7E2B4EC68523289267AD2E95242FBB67E65810078F2302502BC5F28350757A93E7B1FB476974DF673A0BB3EA7713A6B25A6E3AA091579A3C43EAAE5343C2A4B2F051A7E13C93C24C99C73AC463738CD27CC9B889D312EDC3872A5349767F9C11C4F7A337AC60D0326BC5767AB1D9E9515A316F25D5DA83EAC9296F81A481012D8091FF4881B4DA3D061C48C9674FF009A6ACAAF42E6B5D5C9B5691A457D9CEADA068076B1CE052788A1C924A6638A403723A6E3EE7533B2B389419128A8387603FCF9D0E97896CB90851F98F2B0D3EB5DAA75BC5459FF0069542942D34E7EBCB4880B528D3F099B58C4FCE0FCAF5D9EEC84C982599C8E12083548275F3A00C452912E2549092431B0E74DDDEC35B750D14966FDA5D6BAB5F7CA53886C92D36DAA4B53361C175CEC378F22631D7705D95C24940527BB42884F12C81F330E76620B9153EB194CA9003900DEBBD1CD6ED53B3B18AF2A738D47AB5E34795B55656E12800D33C94C9B7FC45242779B93077E589350CAB2F9759D282807532D0F4D83DED6DF9C60C99360D7200602E4120BD9A950D123C9FD9B35B66E876AF50E6E720A65F0AD912DD49A94AAEA94A17C4D948EA39FC6859BF6DE5CB5AA5E58B338CB2CBE1052CF600B17F0AE81AD08CFE0C30534BE252838214CDD40FC01436689851760DD9DE429073DCCD39B3C800AC28AD90A2093221640B08F39BDB1589B9B67999A80968C4278AAE0A983F26B7DBC223CE2A7AA8A24241B52A0D59FEBE1A38896D1661A0345B6B190645423BD003CE3AE36F13C164901E4A888E7004DE7961493D96CEF1E52A9B889E90AB92165B4AFF86E4E408C9C54D724120D2C6FE1FCEF4DFEA0B813D3E67F3C7C448FAE1182C01103AFE18208DAD7F4FBFF001C1046C7397BFF000C1046BC10428640215239E082377027A7CCFE782083813D3E67F3C1041C09E9F33F9E082315262201E73B9E98208DC8FB43DFF71C10464E72F7FE1821497AF87DE35E08523637CFDDF8E08236608236B6099813B7E38208DBC0AE9F31F9E0820E0574F98FCF0410702BA7CC7E78208D8DA0C99B5BC8FE3851129730128492DB03F88D4A929604B3C6EEEFCFE5FAE345A552DF8C14B5DC41C69DFC9CC25A84414C49B1E584BBD976E34BECF1B42683D0FC0E144FCEDC3F33D9A08554E82AE29062D68F774F31EBB74223333973D2C532D5CA86EDEBC879C68B0E40F60381E3F6850503991EFF00F7BF2E9D79623E4CD5A3F7862DF6D6EFAFD62530A81F2922ADA1DDCE87DDB48E52D852D28304AE403C86D79B6D7FCB161C02D33F85D8BB3695ABEBE239F284F30C64B9328954C4861A9D9E8CFA74DF94346A0AFA5D334CBADA8A86509402AE15BCDA4D8490125533F38B5B173C164F8AC424193214BD5922AE76A55EC06DE11C833FED56030CA5F162D0821E8A50B8EA59AECE63A7DDAA7B49A94CA32BCA4A53671B79D6D4991FDA640133E47CFCB1DFFE1A7C3A39924E231D87E0EED890A4DDFA8ADBC9AFA793FE2AFC5299972C4ACBA7F7DC45415DDAF98A509A57968DCBA35A8B3BABCEEB5CACABAB72A8B8A2AE052D5099E504991E57E533338EFF0085CBE4F673865CA94084B00C1B7B9FCB6E1A91C067E718CED0054CC44C5A42854124924EDB30ADC784343D5A5B6437629779003C3C3BDC093BFEF9CBC9C7FEB4F0A93C06C4BF938A0B50EA79561A0C18C19EF0AF8F5F5DB7F0B7431BB2E4399B1197E5ADBA9754614E702F8403170A2909023CFD30E4C993844F7EB9A193F31147DC51DCD7D0E85842C31699E44BE10D40FE62A49A0DEDE57B0E934E64BA5984D4E62B43998B838D282AE2248BC5A529B5A481327AE2BF982E6672BE1C3C95144B35531170C0B1E96D7A42F2B2EC3A4778B5A49502458B36F5EB7FA9AC3B52768350EB6AA44C5234994A3BB29320587D88378EBE7732712195F67A6383310470B1729DCFD69F5EB0C7152E4CBE208502DA8F1D411BFDC08A6B36D4F5544438FB8A750F71142F8A763264090396F13B73C745CB324C31212402B4B3B80F514A11B8DF588552D6E785CBEDD357BF4D6A6915F663AC12EF1092679C9F988B753691E918B2272A5CB712A5B8A51987D4FAC48E152B985969246BD01A7566AF9440338D4895C70AC08E2913173F03CCED2475C59F27C2290969D2CA53A72BBF27F06A5A251587080080D6E54B5BA69BB12358AD735CFD6A514A572A13B193F0DC9BEE2E4CF2C584CE918541AA52DA9A9D3D2FD5BC635280D40C7993E30DF9465DAC351542A9F22CA6A2A9C5A9295BEA429286428D882B4049045EC63E2315ECC33F91282809E974BEA97D4DABA680758D084E8AB339DC9D3A5347BF28ECD683F65862AFBACEFB42CDC30530E0A20DF15EC4A4A9A544C45C8B1BF2C72CCEFB6B880A29C0A3F505D414CAE1E1AD0824D79B7F319FF6FF00B884DD892F6D4B6FE3CA3B2D97A748E8DA6396699CA695A0A486DCAA5212A5BBC0212415A0A916BDBE3CB154387C7E7E1588C56257420A52C7E4D48A5FD9B184D402E882585E80BEDD05B6E7AC36D7E7294A56BA806F24153A4848BFF4931EE03D7AE24F07947E9871A0998A0C48E121D9AA6E796E1ACE29A2A5AD3423F1AD36DCD7EF15E57EA96E902FFCC15A144C24130D81E7263E3CB98179895350A5241C39045096626C0559A8DF4D69191C61C90EF67A5BD9D2FE71516A3ED0D0C970072499E704C728EBCADBC8907170CB24C89A9038784B8D59AAD5F3EA06D4318214A366F114F7E315557EA3CE73E525ACB32FAAADAA04F70C06DC4B6E1302EE9414245C1249B832671699589C065724F7A25ACAAA1D497A6C2F60458D61591395248649A967AEFB1A59FEF1BF2FEC875667EE7D735BAD3A532F242843ADD515A39C869414391B89BDFCD15F6F24C99331380C195CC450000A5EAD761CDFCE1CCCC54C0A294925243B87E47E94E74BC4E99D15D94E97434B08467EF23ED54ADD718EED49DFF96A242A6368F80C404EED57687325A532C4DC1A4B8E04A78DC1D8B53AD2E23518D50354F15033ED7F1DEB47109732ED674CE4CC9A4CADBA3A100708E1A7694A03942CA267DF208DE775A56498FCCD5DE4D9D384C2039254012756240E54E8F185636610DC2A67E9A860ECFEF9C53D9FF6C152D9E2A3CD9FFE7717136D32B7A609800241088BDA00DAD8B764DD98C065EF33319885BD7E7604355DC972FF0047E6CFB0AB188A4C3C2D4F9B5AF33EC88AFDACDF5CEB3ABFABE51936659938B5405A9A7E992A2A3FDCB404C5F798138B0CCCFF00B3D948225A641290593C4870DD1CE9A3DC0D61E1C3C915E201BC6E2EFA0E55040701E27B45ECDDDB3E7C84395D90AB2AA65805152ACCD9594A5512A2D1701300EC47E00D6F17F19329C29549C3E152560904014D6AECCDE7472212386921CF186D6D576BD5CEE2DA120C7D69E3E0F47D6C80807700FAE0820C10460B49511161CCFE9EE8C1046D423E1F7FEFF41E4410A020FF00E91E9F8608232EEFCFE5FAE08237349E124CCED8D16680737F2FF3030370F1BB0946186C3C840403B807D719722C488180B0020C62061B0F28C929E29BC4608CC65DDF9FCBF5C1041DDF9FCBF5C1041DDF9FCBF5C1042AA64F09573C1042AC104182304034306081850B5ADEFDB4189CCAB32C3E102C4E0090000E1FC8B7D9B9C6ABC14CC5074288E1B73D3EC7C6FCCC218F9F2F18E25D097B36B61B59F5E95B335C89987352FC2EE0DDAA0F27B6F4F28E201DC03EEC5715964FE22A0A535C162037E0FD358C271A38B8483521EAEFE0C2DF6D9A081D07C06257053460C8EF403C2A04BD2BA8AFDEFEB137879667B0142C2C3A8B5396DADB44EFBD50C42984CA3FF32C3DDC89B1BDBD0DB12788CD70F8C09969949530201A6F714F0BEBB46D8CC30C2A4AD6A6D6BAF83F3AFB7E02D971B554D43818424712CA884EDB8F1116B1BFAF2C2723B353735534A96A1C4400C1E87A0ABEBB522A599F6B30B964A513312E906EA03C6FE26FA333C541DA0F6D7A674BD306289E6DECC21C4852553C2A168316E9626FD48231D2FB31F09B3099325CD54B99C2483549EA2FE3F5611C1FB61F14E4290B44A9E051428B048F5F31E0F531E78F68FDAB679ACEB5E1555CEA69829412843A4002F000491E86DF3C7A7FB21D809597A658C4C80B147E2480777A820E94FE44791FB63DA2CCB369B37F4F8B98905DB8546E6A2C5BFC6E0353ED39F5BEF50E71252DC0EF56A51E2264CDC99F75F1D824A30B95202644B4CB7150960ED7B0D3CF9C735C160B1656A56653173C9248E304D39151D5C3728D0D507D62A52CD3B6BA92A500549E2013B740A1B99E7CFAE23F1D8F95381709D6A6A75A134AD1AF577D8C4BA42650F91013C3FDB667D1FF001A88B432BD0D49414EACC3397D219090B0C2889E662C67CCD8F96F8AE9C61133BB9293C4AA822C9BD7C5DE9D21B6214A52439A0D1C543F3F4FE6AC79CEB3628D2BA4D28869829052A584A7888F252D3C5C8DEF688C4AE1302AC510AC5A9534E8092914E42F4A795223A62969712FE471A6A75D68DECC55199EA1A9796A5D538B150A278C95920ABFD227840B1FB3BF9E2F794E12522584942526C01001A35CEB4A353684D336711C2165B9DA8F4A07D5EF468AFB36CE5B85294E78AFCCC73EA6D6DCF962DD84C12569E14A472200A5431D3CFC7946122613572FA93720DEFA3914E422B1CEF3F70777DDD484B7E20E34471F780EC02BFA63A889D8733896C3E4F3259E304EE4B353C1CEBCE8FA448C8420BF100C3EC06FF715D62B1CD756B6959629E9781D5482B0E05993009E1F9E2C3231185C394F7E525290DC2435854BDB6F06A8B44B495CB9690C90EEEFA6BC8F2F58D794E88D73AE1E0C64740FBA0901EA93FCB45325C363E20028104CC6F1104E18675DB3C0602504E1D32C5083F30736F122D63CB91DE74F49D406B6B4F2DFD3A34766344FB30E4FA74379BEBFCED35B54385C145DD9042B7E096D445AD7237B75C726CDFB7B89C428A70B2C94A9C779C4C13CC03CFA7943454C4B925437602FE1717BEADCC98BF69DEA1A1A3728B4BE594F454CD25282F169A2B7922C93C4B4858889306E0ED338A82B133F19342E74F54C5BBA6A5210ECEE01634D08A784325CC592529A03D2B7F2D7EDCD9BF88D6D1F7AE57B854923ECF140883CA63FF6FC394E60F2B13C0E22492000C08776D75A7F8864B953947F716B9DDD8B337ABC40F35D4F4AA538A6DA085A64874AF842226E12A0019F5F518B5E132B97804242A604A1603A08A9AD43E9734F2890CBD1C0FC4E4D402742F5DF76F74A8339D7CC07974AE55BB5EE9202596DB5C09361C4806D31CEF1BE2CB839397280485A11C41CBA85FA13E5B3BECF28426EA0EDCDBD61137936AFD4AA6DBCBDB5E5197BD77EADCE17613C8842E15617107CB6C2B8B19561105969993B4484D49D03D58D817D34A46532788B80C3572C3D6BEBA7521DA97B3AD1F912BBED539BA351D427C61B334812B17E1250A20DEC6D163EB8ADCEC563D5296AC3619724A8FF00B6A0EA7008AF0B6BEBBC6552D095014551EFF7F5D59E8766FCE3B60A3D2FFE4720A0A4CB29D00A1A6B818A85D504F475482B411D4193898ECEF67CE7EBEF33698A42E5D415CC32C3171FB78922C36D9EA63454C42414801376D58F53CCF872678A633BED3B51EAAA834D4B479834F38A29406987DD696546DE24365B4836332201F762D98BCAF26C9C30C44998A483AA43EE1DEBB35FA930DCCC4A9D400246BB8B73B7873BC3B651D8F76C1A8D21CA8C8D54744F416EB975CD71F02B752A9F8829300FD95004F316B56E776E72FC14E54A46150B5208621373D598BB7A8DA324CB090428125C10D6F4B45A593FB2665A809ACD59AB0D42800A732F148B49EA51DF2147E37E4646D86B33E2662F8BBBC2E583855699C403529429B83A75148C254805D469A5363416B1D06FE962651D96F64BA5160D268D6EB2AA53354ED738A0B52765774E7104ED31104F2DB15BCCB36ED0668A4CC9B982D085391282384240AB3A59F6DEDE08E2B1219A586291A7D37A6F5F48B21AD48E65F4FF0057CBF2ACBF2BA303847053D22D684C58F106F8C9F7C8F9E20D7964CC44DEF67CD9AB59673C6A00B07FDBC5F4E9710C3F578866EF0B1DEBF588F3B9BAEBD6E29AAF5BCB0417525469D289D8004A527A1816F7E2464E5F2C30984166009009EA4FE5F78D3F513BFE6AF323E847E23DECC7C878FB35060820C104668483337DA3DF82085A845801CB73CBF7C86082378481B608239C104184E669E3F6820C27041820830410A69D20F1126361820855C23FBC7CBF3C10473C00ECA9F77EB82083BBF3F97EB8208C8009993BFBBAF9E0823991D47C46082091D47C46082091D47C46082091D47C4621F3113411DD922EED57D4F93B1D59E257018A972814AD9C8A39A16E5E2FB738CA0F43F0C38CBB106510269AD1C973776A73FC6B1A62A4271615DD01E06FE3CBDE91C7BBDFD316B463642D2CC38D8598EDA7DBFCC404DCA57294555046B5372FBF5B0E8638E24FF70F88C4762B013B141465A4925D9ABE81B4E9CA91B0CE64659F2CC58043072469BDDEDF7860CF3525269EA735D52F30186D2A53895BADA490279150240E606DCE3161EC8762B1D986251C52E61054E070A886B9FED6E9BD6AF143EDAFC44C24890C99C80A092C428072CE351D2BA79C7457B62F68A73375BF95E9474B4471216A6CDBA13361E97F4C7ABFB11F0F4618CA3889628C4BA7EFE75B08F2176EBE22CD9C26093394CCA145EEED626FBEBAD1E3A69996779ED6BEAFAC3EED43EF9256788A8B7B9BDCC4836F98C7A432BCAB2EC248484CB40EEC072120396AE9A757D3568F32667DA6C762B107FDC591C45AA58392E0BEACDD3D21BDA7F2FA154E64EA9550B8E1404A892A2622124F5DA06E3918C298DC44B961E5A512D20162C34B52F5229C9DF789EC8B13DF9499EA249209E2BF874ADABA6C048B2DD2F9FEA073EB4D27EAB9332429D5B812DF78DAAE3842A167C3BC4C03E726978FCC53326A65713A96EC12EAAA7FE4D673BB06B4587384C94CB49941367A36DECF5058D584E4E69A774A52F7394B68AAAD4A48754A9B2E3C5754F3FED36E62C30D6565F89C428F1A1610A6F95DDC3BBD2941E9D62AEB584D8F12AA09EBE60536FBC5699F6B673325254E3CA6FBAE2E2A70484906C048201B7FB5F169C0F67E61E17430A3121CDDB930AEA5C4205D4E4D46BC87BFCC54B9BE785D5A8B07EAEA932A9DFCC93113D245A7173C0F67C84A68C056C1D8F205B91F1A3C375CB7341A50FD8F5FBF5884E699FD5AD0DA1C8847142D2A04AA44CF86E23CF9F5C4A4DCA972787802985E9D35FF00378564C906F53A8A55AA3969BEFAD4D659C678E1529216A2ABF824924DF95C99F4F332379DCBA6A70AC66D367274B97366AF9738597213AB31140DB7F25FF10D195E9FD4BABDF5D365740FBAB94A0BAA4A9086B8F9A4A841041E46DE5CA4719DA5C1E1E51056805B7AF956A29467A79EAC6C68123414E5B54DBC394762344FB346459625BCDF5D66A0D4D9C6E93BA2AF172492DA88DE05E773D231CA33DED5E23133169C04854E9609E29817C3C2E59D8D09D4FD890C999852FC4A22EC2A6DF96FA0D62F7A3CCDBD2ED2F2DC9B2F62832F74043354036B5D4A50224829E3470EC66F27E15F91819B9B28CEC4297C52AA904A83137700D40E6E28C1A1133D75483C40B798DBCFEAD0C55F56D289A9A86D554E93214A754900998F0CC45EDC8C46155640FF003214E454802C006BD3ED194951503A9B87DBA52C1E83A8311C5EA4038C38FF007684CF7680809088E448DFCC9E7F0C208CB664999549D1F7A727F7D21E4A4BA8248626C5BCDBD9FCD51A8F54E7755589A5CB10E3E952A09424A80E57201DBA74F2C59F018D561E850CCC03FAD4DDFAB3D2241186E3B5199EFF009630A5DD179B6694F49519C560A1A532A711092A701024182088DB6C6732C562B31E197870A2514570DAAC45474EB5368274AEE1228C2C74D9B5356731B54AECFF0046B25CA6A0A7CCAB523894F2AA01525606E1B5151372791B817DC8C60B2AC62B87BD9CB96C352479D5F416DF9C240BFA1FC7F9EB102CFBB58CD7345A32AD314350F553C4A1BA56A95C4366E213DFF77C207424C74C58F0F829186509B3B16898A4B9659156DAA4D033DFC2360A2011E5CAAFEB1865BD8BF6A5AD9095EA0617A5D959E21506A5BA92A49933C09585260728BF2DCE1EA7B6B96E01250252710B45199813B71330E77E718D9CD0D5EFE3EEBCA27D967601D9E64C108D639B1D4158C90695052ED3C2EC5CBA150676932003D23142ED776CF34CD8A1394E19783624284924B8A307481CCD183F388FC6CC52280EC47E3C770FE348B8B2BA8D3DA5E9114BA7A86872EA74240495D3B358E2D226DC6E214B13EB23AD862B3864E6D8F081994C9F420875AC1AB12E1D8EF0C0629490C1C13D48600D395EFE50D953AA1AA8716AA665D65D905D79BE3E07093E129680E04C5AC1201993CA2E385461658509D350B0C004A800400198A8B957992D7D635FD612096AEAE5FD1B5ADBC5F44C9ACCEF30584B4A79D4AA3C3DCA933B40E22981EFDFE58D978FCB70C4944B4A9B6200240F07AF2FA467F52B7DFADB56E5D474D6B0A7FC2B9FD514ACE524857DA75750968A3A10851133CEDEFDCE23E767F2E6B2508091A1150DE1D18EEDABC67BC330D284D087BDBD34BF2EAE6D7672E389E3ACCDD3978DD48E10F01CB70A8F94EF86ABCDE6A52552D0A98480750F566D9C0DBC63520BDED42297F7EF7D4F68BD23430735CF3F882893DDA50CAE9F808FB576D438F8AD726D1206114E79892549549286622AFE83C7762488D8D855C540B0FBBFE0347B95C0AE9F31F9E3E55C7D9E8DADA0999B7CFF007FA608236F77E7F2FD70411B5A401337DB718208DF8208304106082324A78A6F1184E669E3F68232EEFCFE5FAE138236B68179BFCBF7FBE98208DBC09E9F33F9E0820E04F4F99FCF04107027A7CCFE78208514E002A8168C1042AC10425A80094C8B4608213F027A7CCFE782083813D3E67F3C1041C09E9F33F9E082324D10A93C72AFE544004DE76B741F8E1DC8C3A2783C407537A3B01BF37F37B44E3953D2B4997C4CE6D6DF4FA6BAEF0E0DB8FA07748488800C807CBA44F337DCF28388DC6E0D6853490E09A84835666A8EB7F1312F97E3C480F38B505C80E3CED4FBED1A5F7174692BA9521B61CE2EF14A2910123DDB091B73C3DCA329C5E226A3E4590486A12CE45A9CC72DF410CB3EED66070D87983BC9614124FEE48D0D3AF2AEB1D79ED47B63D37A5E9DE672DA943B570A078566CAE7CC8933CB6F863D15D8EEC1CCC70477D289A24D52FB568C18EBE2D5AC794BB6FF00113B954D32A707054C12A1CE9473F8B3D5CF40F5FF006A59CEAD71A43952F21849761A4BAA48712ADA4248DB9C83E5CC63D43D90EC4607289056A909E32126A914A54543F3B9A3758F2DF6A3B7D8CC7CD5253354415100859347B383E914C54BB534C4AD973BA0ABAB888515493375C1BDFCFDF8B96225C8C24AE3949482DA5096D8E8CDF6778A32F173F1A499855F31AB9A52BEFABD617646D56E64EB8D6574CB0FACA454542C1291FDAA01620082660F493D2A58CCFE6A55C090404D1C3D2E6A35FCDE3072897FBEE4B3E9FE2BD356DA2C8634C69DC890330D50E22A6B40E36C724AA398448F2BF2DCE231798633174758E226B52C05F4DB4FA464BE098A0971564914277F53E8F0C59FEB9398A1BA7A750632FA4E24D321B86CA81B10AE182AE51C409BF217C5A3B3B94A5466CF5CA2A9931B88A9D56B33D07A56F183984DC480164B25E8F67ABEF563D68DB1AA735CE91255C769EBF39264FDE791B63A160F2C007EC0E7968CE0FD3A728DD0AA9737667F7FE62BACE738010568584AC025299BABCA79C5FF002B62D183C081F2292C926AA6019B5E74F585C70A5882F77BD7F0DCEF155E67AA9F5AD6DBAB0CA45B912AE5B8BCDF95F9C6D13D25183C3B1510784B5D859DDBFC7842C9009259C8BDDCD051FCA18E91CD439E3E32FC832EA875D78F0AEA8A565082A220C389200BC83378DF0962F1F824216A98B425206A5209A56848B51D88D2F028F7601259DC74D7D6DEDE2FCD11ECFAE53A919CEBCA80F03C2EA59B022D37EECFA4D8F4C730CDFB49266AD72F2F52A628062405009BDBADBD7A616B143B8717AFA534A55BCE2FC6ABB4F644C228B4FD3329425212B525B485022C2545215E867EEC50B158DC5CF980ACA96A7F94D58576B12DCAF7686EFCEFE2FEF7861CCF3543AA2E3CBB7424C08E8240B7E96B9C4E65B2573B87BC04715E8C0ED41BF87E74324AEA5C9DDAF6D010F119AACEA9DE6D4A4284B1C50A5287849E8933EB6D8E2C404BC0002628049BA451C6CF7FE29BC09C3D406A93434661CF42DE3D4DE0EFE7199660FA9965E5D409212DA5B2916FF58106C2E6479CD8617958EC19708940391FDCEFCFD61C264A87EEAFDEFAE9E75BF5C93A7731AE5A6A334CC5BCAE8A98F12E957C0A35C954784AF88291C3039DE71B4E5CB5292997244C2B70482DC1B1E6CEFCEE6B0FA4C804B936A8D3952BEE94DDBF34ED0720D3ABFE17A572952F3357F2CBCDA1CAB0B7088064B6B489DCF8A3AC61EE1BB3FDE052F198A4774AAA65964B001C7CC0825835361489044C9690C181F37E5B5ED6DEC68DAAD2DDB06B30CD4552065F973D252FA9DA76E1B277EE8A924100DEC3D37C6ABCE72AC8A62E4E19231539D94C951029AA8022AFCAC39435C62CA920B7D093BFA379D21FF2DEC4BB3EC9168ADD539DBD9A6683C4AA64A2A0202FA12DA94D913D3CC6D1883C7F693178D98512B07DCA1569BC605D8FED6069615F2AC4705A48E251A8FEDF6DBBFA74B0A92BF2CC98219C972E672E60C065D1469AB71F8B4951694B6A37B91336E711189C0AE7A92A56348A12471D89157655486FBF4D04D2096B1B0A7E35F4E70F02B7516663FCBA1755C768314DE83C5C200E5B5B0D8C99787078E626601A8AD87224B7BE507784D002454F3DFF003BF28C17A1AB73458733C6DBCAD283FC950A843EA7A7ED4F0A8F0F0C73DEFE987D82ED0C8C220A25484CD5D944A4023A15276FA0A6B0CB1838882B0C3A8377D06FEE90E4D68BD2796A439559877CA489293C66E04DA146DE5E76F2D3119C62B1CAE14E15287A382353CBEBA4302DA17FF34F4BC64ACCB4750A0F754A97DC16061420898DD379E968DEDB61AFFA4637145C2D487B3F3BD29D5C884F84EA3886E28DB0D2FA0B08677B5CE60CA94DE5342DA132027F968317371C49E912461D48ECC82927118863A82E3D5F71EED19083606BA52D4EA012DBFDE1BEB351EA0CC0215983A5A0890D25B084833733C040F59F779CBE0F24C14A1FEDAC4C7A17D1BA9B97BBC38972D44BD9B9FE3DB8863A8CCEBCC8352E0106D0AE9E768BCFBFCB121FE8D216DF28045ED47FF1FC428401AB9E43DFB6D21ADD715557AA754BE01E13711CCEC47C67AE355E4320B1041BD185BEF6B51E8CD180CC5CF41CE3E827813D3E67F3C7C7F8FB3F1B5B481303A608236E0820C104182083041060821553278B88CC6C36C27334F18215777E7F2FD709C119A1004CA80F5FF7FDDB0411B3847F78F97E782083847F78F97E782083847F78F97E78208CD20098333FBEBE78208CB04118A93C51788C64249720381730463DDF9FCBF5C6AE096D76F7D63608529983BDBFC5E0EEFCFE5FAE1512A61B24F913F40605A4CBAAC30DFF003B41DDF9FCBF5C2334F73599F28DCD3C77AFE37AA299A859E14972341527C89B7B78534C9525445E1504988100733FBB4DF082317316B12F0A0CD0A2C420D9DB40E75AE96A562630F2F2E97256BC7CF97228E9EF080E79390FE1C9B788CEB0D5F41A5A8DCA875E6429092A20BA806403C8999DB91E5B418E89D9DECF63332988E3C32CB91562589E4CD476BB53998E3BDB7ED465D97226FE93192D7C214DC2A1663B135DEC6F56AC744BB53F698A9CC94D65794ACA427BE6DD5A0C8BC817FBAF8F48F64FE1AF109532661D8FCAAA81D59CED4D0D5F58F1AF6D3E27634CD992E54E5A9CA83824867A7D7C868D1D42CEF3E5D73CED4D7D4ADE75C5710495120711FF00EA039FE938F42E47D9A9397CB4012C7CA120BA59B9D458372B470CCC3B498DCCE61E352C827576AEEEDEDF788655B952E3EC968294F2CFF9742415711D8F144C0DBED45FE387B9D66E9CA6584259D42A686DE9BDB9C37C265E9C5152E62C39AD7C4EA77BE8D13BC974066F99A5198EA17052D23403810A521329F301493CB68B4CC75AB4CCE958B484A428A967E54D58BDDEE282F5E5D1E9C2A247ED62CDE8DCFF0005DF61128CC7566579553232BD38C349718053595090388923C264893CEE955BEF7182C82762662A6E25C216C509290C96B8A0A9DDC437562D95C201A5E8E7E87E8DA3EF54671A8D0B5A8D73E5F52893E2511C27DE6F1D7A7CEE380ECC4B29042028581671CF47D0F23D2009FD439340AB3F8374A6BB5B940B31CD5A4C2997070AE7C01511E9E5EE1B7A62DB97E59FA67404301C3A0F32E1FC7A50886B3F08B92C5150A3A07F56B6CCFAC40335CD9C4F100BF326401E46F1E9EA316294844A0EA4B3022A2D6FB7D6D1ACB1301AA4802D47AEBA6AE7ECD15DE69995556D4D35252A1E7AB5F2A4B01A6DC713C52012B294A929DC594403060E1862F389387491DE253BD406141B8A8D39DA1E4B06A542B4BFE2C0DADE9170E89EC0F36CD4359BEB157D5E96CE21B252494EF10D906E2D713F7628D8EED580B992A44C2B58B241372E3F75A8EFE778792F800F98F08AB9D69EFDBC76068FF80E9160506459730E180976A6101482810140AD24C9BCC751B462A1986698EC54D96662662D21D9292A003E8598173BDBCE23F30C414B7764177AD2FBD34FAC26A9CF5B7C2D352F29D4A859B014902DD45AC23F1B4E2532F94BC40654AEEF89AF5D28E5A97FB8BBC45A264D591C454403CF9EFCFEED588CB953474A8A87DA4C950920927840BFA83B7BB6DE313B23279666A42D21DEAED762E5C359ADF4899C3A09038B6A6FB721AEDE01A206E664FE6D59F56678F854A8309200927E7D24DBC8624274AC3E15C24A681C00DD69B695F21BCACA93C4C4DB6D9BA69FE3687E7B45505232D57E6F9A8A765292B5309256B77994F0A145423CC7A6F3881C662138C981082FC27E773C2C0D475B579B43A4E1A5862A2036FA9F37A368DBEF0C6BCCF35AD7865BD9FE9E5BC80425CAF765B027FAC77E913CF63CBD063051230C92A54E48091F33548A5A85FF008B18D4A253965060ECCE4539BFD4D1D8C3E9ECB9FAE432FEB5D48595BD25596328E22B3B9471D3AFC3130277D84E1A2FB45DD14FE9C7788018AE8967A588721F97F0D2694A49F99B60E45AF725DABB7D227FA6B4BE41A711DCE95C9425FB7F99A86CD471AAFE206A10AE199EB691888C6F69A64D2518A52E6CA49F965A54A9652F70E92FCC68F4869FA9E0A8FDC054DC17BDDFD37D61FABB4AE7B5EB69DCFB8282957C45A79B7D0070FF0051EE5A5262DFD247BA766927B6B2706152E4600AC1038B89D45BFF005281347F5EB0DE6624CD62A2F7602D7E839B7918E5BCB343E46DC9CE0668F0FB4C2E9D6140F3016AE2927A8E7EB25A623B513F18B213853281B10FAEE3847913A7584DD2F715E7AD21BC6ADC9E914E0C972B69852A05429C21D0E47D8E10EA484D85F86DBF4C2F84918AC6AC199314800B8BD1FA5E9BB585E91B8243B6B786AACD4EF541934AA120CF7083EEFF00869171CE2F8BA60B2247085CC9E8593A294000D615569FE37813C27FBB6D3DF99D8B88630F66398929A3A6AC2763C61F0049B01C6047BA67D7066392E1528044D948D7852A492B6E8AD07F26129F2EC01E2B3062C0BDEC3C284F58DECE8AD61527BD6E914B46F0E3C94C4DAFC4479741F2C44CACC70B97100AB8DA8C0120FE29CC4371289B1DBDFE37E50E88ECD757558E34D332D773757154D39E29E775CD874E91B61E1ED8E1A538EE540A87CB425F42580A78D77D633DD172C41B569FC736BD4B73854741EA36C774A0CB6A00ECE30AEBD0C0F7DFDE30D2767A8C602CA992C1D4254E1EAD40F5DFA467B956FE405FCFDEF18D3F673AA9EE33C54EFF0040AA8A747044EC14ABCF2E9F2C311DA03972BE554C98146DC0A16EA0EA5DDAD6DE3432D40396E61C13CADE31ADEECC756C1229E98EE20D5D34DBCB8E3A6DD646D7792FB6CE2A8586A97496AEE18743E71A80F6FA81F5863ACECF33DA28557B494850F0065C43C6DBCF764C6DCC5F962630DDB01378B8525811C44B8EB7B5EDE87508502035DF51A728F7531F24E3ECFC6C6F9FBBF1C1046CC1046494F14DE2304119777E7F2FD70411B5B40BCDFE5FBFDF4C1046DE04F4F99FCF0410A69C01C51E5F39FCB04288D7C214E085235B9CBDFF008608C100DC03D635E08186C3C8472013B0C1030D87908E7815D3E63F3C1030D87908D8DA157B74E63CF040C058011B3815D3E63F3C10307076B78C668044C8FDFEFF0076C6C2614B2407E2A01D2BEEDB3C359FC5C40006A6F4D05DBC2F5BB346785D385A778A21EF7E9A13A7D99A24E44B44897DE2CF152C6F4366A90DE16AC1C2AE12A4C42374F320D847A794EC6D8D6667327040A182D5616D5DC59CE9EA219CD98BC61328A4A454055A9AF8FA3D1AE212BAB65B6D550B712D21B054A2B206DBEF122DB7218CA32FC57699918696A495020F00DDDADF8262B79AAF0DD9D44CC5CDC5051038F8491FDB56A9B5361E4E2284ED37B7CCA34C5322872F79B72B569752A29503E24881C88E7D7A5F1DAFE1A7C1CC561CF7F8C42A677842871A0B5CEF414F3178F297C56F8BB88CD8FE972F9C70DDC128265AC8E236FED22ED53D4F21E74EBFED6732D575AEA33079F4B4E2D413C2EAC24024C084900F291BEF8F567677B1785C0703E193403FB6D4D4355F937DE3CEF8CED26678B2A13B17326715C9528D198EBEF6D62A879229525C2BE2454DD3C4789422E7724CDFD79C6F8EA38746130E84A1084CB54B152183BDBEBAF9B522BB89526629D63BC7724AAAE75F07EB42F7B99664398E67529552214585195A9426C62FE2DA2F61CBCED8431D9BA2524A1243B338D7C00BD9CD8BF488C561D0E78500381E0C5E963EA4DA2DCA4CA74F69BA32FD429B5E6CE241610BBF8C0B813206FEE33EFE7B99CCC466B8860925292DC4347EBD3F11A80A940949290A34BD750EEDE8FB8AB18AFF0039D4F9AD71719CD5459A3121AE05048206D6410761F9626F26CB1485238D1C5C2DA37D07DD8B6D7D54B529DCBBFF0098AD6A3306D0A78D2BDC2DA2EA59333EB26E3DF7E5E7D37098796108050EEC0066AF27B0FBEF184A52028ECCE2BE15F637DC57F9967F975538B69F05D7A4C2C15244DEE427A799F5107162C2C9320278260969B94B03CDF88DB9D7F11BF100CC1D85DDBAE95DE20D9AE6C9A3E04345556F5448A6691C454D907621326E0F38F888C482F1B85920AA64C4A5491F35871B3B16D0D05BEF0EA414AA93038A54BB0A6C74F3076898689EC7F5BEB379198662E9CBF29242D69742012DF41C5C2A88E979337E543CEBB628904C994388A9C24A6AFB59FD5857A8859425004200E26673D76FA3116F18EC9E53A6744E8869C672A6587B30E148AE79C4F7AA2B47D828EF02B809BC94113EB8A5946619C4C98B98552D0B6E1AD3CC1F4FE59152411F2B12474AECE35E7EC21CCB54B8E9534D921A1221321201E8040F2DAFD2F187527B30A92F38CD2B53394B17D2BBBC47AA5CD24A9C9074B54F4A5BA6E6230E6614892A52DE879C32DB241FE6904C82B261113CFCF98C4B610253FECAA504B515314038E6C4574FE630241511C639EF7DEBE875E5766AACD2ABBC08711F524A8C02DA7EB5C5B6E5B0787DE47BB94903849201252B53514070D7C286B6E8FCCA889291FDAC5C31A13AF5F752F1B5BA3754D97EADF729694C71250C29F5D6CEC0A100AD920F2816E5D62F1799F00A2824070EFE55EB4AD4F8C3A4100304D5B7BFB7261D6974C67999B61DC932D4E9BCBC5D79DAD48A979C4F350A273F9A9BC8E1099FC2B589CD0AE67019C78D40F0B3905AB734AB0D6B7D62465CE64BB0005FC6CFA9DE9D00892E4FA1320749152E556A7CDC91DD553A8A8A1692B06F2D2C06A395C006E7D21A662679F9C4C082788F0F10268FA82F56AB55F90A35C5CD247CA4B52A2D714B7B689F2321ACC9A9C9CE730A6CA68801C148C32C3EE2D16F0778C8E3498804933798C3246266E20A97294B98A059414E90347A96363E50C8CC58001554BF51E2E6EDD3C6191FCC743658A2FAF2071E7D5766B5558F2FBE527ED1EE1455C107900266061412316B981427F0CBB997C03415F17A6BE75867366926A493B1A37D6BE5D06ADAE76859DD52CD2E474EE32C1F0A51F538001DA5C53408B79F9CE1C7E8A42D7C5318AE80FCC2E07FC41EB7DED0D56B58D68795AD478C469BD61A865EA97954284DCB86A12B94A8CCF76560A607288EBC861F4A380C229A64A0A245B878812D6259BEFB5A149014A075B6B56D287EBF57785AD681A3A24F7B996A843AB172C7D5D33E63882C9E5D27A635FD58529A5E5E9087A2DC55F56E17047DC690B306BD7663F58D4F37A3E9212FE567315A6036EA5F71A8237242779E876BF5BE674DC4BBC8986504B12909041A6ED46B0F3E990A2976D7F98DADEA6CA6800FE1F9421881E12A577845EFF6C198C20BC562D48E05AE62C30B122BEAD56661F88C0252EC5ADB69E11B5DED033152404229DB4806006184904ED278413EFDADCF19C26055885BB4D26E5E62C8A6C0F8EF734A46C662CB39B72F7688C663ABF50D5CF7550100FF006F0276EB045C0E87160C3652400E8A0DEA7CEFCADAD76844A1C92F53CBD2F11A39FE76C294AABA97561CFB1C2E28011B93C26FE73EEC4B48CA9142A969F14026FD2C7E96178C701B7153DB307AC267351D6F279E33BAB8D667DE5437F8FBB133232E9691492936B20680727209F08CF07FDC7FC5B5EBE7E6DD51A96BC1003EFA45FECBAE0DEF78541D8753E98CE232993359E4A054D4A053500B03BD396D0DE70502DC47A837B6A0BFAEDA426FF1357EDF58A983FF00EB391FFF00DE18AB2295A4A4D1EC903EC5E1100837BB6F7D353E821C6875A673421C55357A9A0A8E34BC03DC7D000E93C31B1E1DFDD76537B3C95824CBE1356091C3BECC096F5F187D2DC3B726A3FBFAD63DF2C7C938FB371B1B04CC09DBF1C1046D83D0FC0E08214D3A24AA645872C1042AEEFCFE5FAE08233420099501EBFEFF00BB608236708FEF1F2FCF04119A4013041DBF1F3C10A4BD7C3EF19608523058262013BFE18208D707A1F81C1046E6904CCDB6DC608236F77E7F2FD70411B9A6F7B13B6C0FE1FBBE0823670A7A7CCFE782063B462B4C0040317F4E5CF12783C3226254A590E03B1D99CF4FBEF1B15A1287203D6A5B7E77E5E20F2D720EC715ACD7309D2667732C1370C1EA3766353CADBECC82D7C454B244B7724D9AE69AB72F1A3430E7B9CB792532B3075F69BA7610A53C95BA8471003601441277DA7A461FF66BB298EED06253C4898CA5025D24DC87D85B67B58C577B53DB7CAB20C24C509F2FBCE134E201884F22EDCEEDE31D13ED87DA357982DFCA74D3DC05054DAD4DAE4133133B6F3CCF3DB6C7B47E1C7C2C465E9933A7CB0AA24974D281ECDD5B6F28F10F6FBE2F62F37C54CC34998A12F8949052A2C41A587837956E7A559EEA3ACAF792F56BCE3B56A52D49F1120124F99178DBEF818F5065B94C8C3CB0992896942000484A68E3C398AFD8C70DCD312A528CF99338D4BA91B390F7353CB7F186A6AAA9EA15C35C897366C4493681B0FD70AE33BBC2A7E42900BD38478DF9FBDA253882A62E41A3EADCDC8736DFF1129C934557672B5D5BEB0CE5F49C2A6C3D08E34AA09E1E382A8E71276C52F1D9BA04D1292BF9A61200487A8A55AC5FA5BA43D94492EC40D79FDA9A743D224798EA7CB74ED31A1CB5082F2014A9420C9D89BFCAF78E57C272F018AC5BAC9514962915A0EAEEC40D7587899695330E44F9F9D5F97845319CEA4556540AA75D5F7CC9596D209892798109DA3E4479DBF22ECED38E6A6FA9FE7CBAF9C32C64A0804B8A55F7045075DFAF3222199A6A4AECCC776FA825B48804285E0C72BFEFAE2DB2B289723F6A40DEC29EC57C623A2135D9A06F853DF453890F80A92676100C9B9E585D4A124306A74FBF88A6D56104194E99CE75555213A6A996BA752A1E75C050009BDD71B78B9D8FA623F179BCBC3A0AA6CC609D4338D2C1DFEF4BC0C5DB972F4F0EAFA6AFD83D3DD96699D28DA731CE386B33480B534A0A506D62E76E24804FEED8E6FDA1CEF1989983F4A261924B05071C41C034D81E84D2052CCAB1A9049E5F987FCE353D45731F51CBD69CBD840E1086C253316004705F6DFAF5DE4B26C14B992C623128E298402AE22FA9D0F3E8EC291A4B9CB5900A80E47ADDEFABBF5D6B1057DAAD4142DD54C932E158973E26F1D3D39E2E127F4E10AEE40240B04D88FCF94498410905B47B83F48E5450F2785082A7369402A9923A0373F0BFBF090C5094B69DF225E8E740357341BDBA438952C077B6A3917B03F7685997E83CCB3B2B742D6865882E305B23BD0AD8070C14111CB103DA1CDB0D2912CC85A4294E15C2DE16D0DFA878526619203A6E0BD7C373FCDA2C3C9B485365E90DA1B144BB0571A7EB7C645CDD5C404F381CF7B038A87FACAA624852DC0DEFE8DCF4A8686531205856E096F13A0B023A72894B191A288AAA29D4CE5F605ECC9D4B6E848022452AFC37E612075386989C699E82953AC2AC904A49634750723EF6A3420B5F097E26167BB72A36BB7ABBC20ADCF322A074394F5DFC57334EF56DB2A65A4A87FF00D327F967680784C917C212D6A5A12E8EED350A415711FF00C9891E6618AF1252A3F3120D8F3E81F5BBD8D7AB4BFA8B5B67A453E4C94D2251E1A851A569B35A954F004A948496F807349133279E159587C3021641F92A3E6248772410E7D6DE91B4AC42E6FCA4BBD09B7986B071E7CE1C29346D406CD5EA6CC4E5CB2389414B35416664C2428813BC45B688C2E7109207E8E477CB7A86EED88717342D537F285CA080E4814EACE396AE6A368E10CE8FA55ADC34E3367198EEEA0A96D06CC5CF74652A98DA396FB61E0C3E2A709678BF4C43F12182C2B6E41BD2EE690CA6AAB51C6FB16B015BFBD21054F6888649A4A26996DAFB01B14CDF108E5DE16C1B0E7EFC38465120A84C582B9A2A5414A0FCDB88016FCDC43798B2C00A0AD3F9F1FBDDC98FD7E7AEB890B4B8AA253A09E14ACB9F58E920186E04F4EBCED33232E4CCE10A008A5581296A8EA793F28CC87AB12051F9EE39535F2D621B54F55AD7DE2E8DC75333DF7D6942DC8844CFBA3711CF1228CAF0FC410141E8FF002B5090FE7CE1CC694661510A4D354164A7EDA548E38E6002ADBA6F187A32492082A4A549558BD4EFF7ABDC068C804D8437D4E635C8E22B7839E7C294CFC36FDF538712F21C22D8AC01BFCA0D43B506DEAD625A33C2ADBD47E79C34AEB1FA8214E2CB6048179E299F75FA1F5DF1212B27C361FF00E90E27B800A6A7ADEA6FE42321075207AC6835A968FF00F33B5A26D7F203F7BE1F232F4B8694F4FE6FAE8EF4D2F19EEF9FA7F31A9CCE5B48852FBCE9CF879EF73FB89C3B46014689484B3D680927AB7BDF4C141D0BF266FBC373B9E20589BF9188F4117F3C3A4E015A3807C7E8FF00568D82030715D6BF83086A73C64F0F2DF73F98E71F2F3C64E14CA7E21C43A1F03A73F386F3D0281BA1FA7DE879C26FE36D7EFF00DB1B230E85D801BD0D3D457942299628D53F4E7B7D7CE1155E6297D4DAC37C696E4ABC653131161138728C14BAA480E450B061A6E77DF485D2909622E35FE0BED1F4AFDDF9FCBF5C7C3D8FB350A69D20154C1B6E47CB0410AA0741F018208E426761EB10304119702BA7CC7E78208D2EA488991EFF00C8FAE0823540F3F89FCF0411B5A493C51276DCFAF53821497AF87DE37702BA7CC7E78214850C8202A45E7F7F760823760823058262394E08230E0574F98FCF0410AE99E2C25C4981C7B6C76F7E08238642DC778B913E7F18FDDB98112100D0C10E75CE328A64B40A42DC163D001279FE9F3185A54C9C169972D2A5719E12DA3F423476F6D198E988920CE5CC094A0124380030D5EFB6B5DAD14F6ADED0324D134350BCC6A9B2FF000ACA47109E20091201F302637F763A9F657E1A4ECFE6CB9864F105104BA4D053537AF90DA388F6EFE2F60F29C34DC348988E209525D2AA82DF5372C36778F37FB52EDA730D5D990CBDB7DD4654A5BA16A43CA40E124DCF0907D24DBEFF0052765BE1AE1F2244B5AA4A1C00E38439FABD5BF378F11F69FB779B67D8A9AD3A6196A52BFB8904134A3B3331D5ECEF1D73AD71BA7AC2CD02D4B43A654A528A8C912492A9BDF69F21D71D6B0988952909932E58433024306601BAD3EFB456D05253C53140CCE65C83A53EF5EAD182692AEA1F6E9D8A75ADF74F85E825283CC9E569E640B61DE2330FD22490BBD4D852BA02C75F7687C526629557297B6EE6FF005DE2CBC9B4AE5F92B69AFD46B4BEEA405A1361C24DC02127D224408E4315AC5E613F1A0A6529552012D41E7B8EBADE13485020B11EF5DBDEB0DFAC7560AF6A8E9A99D0D52520743286886C90409E32D9055B082A07CBCF6CB3294AA719AA492B9853DE12E6DCAAD7D186FBC3C97354E012C2BA7E3715F6D14B66B9A13C5078B7B9373E649FDF3C752CB72D421090120160E48B5B97D34D9A1F4BC400003403526AF567FB115F5881E659C2DB5A5B0986AA09E35822101331F7CF9F438B1A244A928E3550A050333E9CBDF3108E366A6600010790343671A9FB38A188DF05754D4A58CB1876B3BD304A38A1324749EBD45BCEF88FC663A5A41248480EE5DBF0FF009ABBD21845CBA5BB17A6AA6C66BA81EE1202568A55133782A100824F3BA76F953331CE809C9952419855C4E412C9E6EF5EAFF48D92970E4B6DEF6FE768B6E9DDA5C9694D164686E97812132128055C22665404FC639ED0045AF0E714A0BC4BAB54A41347E94DB9BC0542A1346A3EBA1FC73F1778A5566B98A56EA89E22A27BC2A215DE003FA649023CA36DCE25F0D82C2A929EF509734402053E971CC5793426651984FAF878F2FCC46DF759AA5296E2BB87A6787C44ABDC0817BC5AE2679E159981E075CA514A459AA29BD75236D2309C32829CDC10C351E2FCF67B33C6DCBB21D4BA96A053E5D42EAE92988151532521295DD2785513D6C77107081CEF0D97527A93C6A1F28A39005B97E4F9484B2A0068C0737A1B036BEDD18068BDF4FF0066F4D94B287AB2A43EF708516D4DFD9205E4FBBE1EFC513B41DAC18A131121010CE1252A724D6CD6D2947E7787489812CF524073B7DBF1CA251515D4B9636942DF699660CD3252826A026D0A5A6EDC4089B99E56C51309371B8A5CC54D52C8D0173AD3F716F768C4EC40018AC33073E0EEC1EA3F976888661ACBBC7052E4B953944FA8F087D3C5549715D7EC94A77F75F78C49CB90B47EF5D4E85874B9F2A93EB0C66E252A040A91A35B7FA56BE4EF0997A775167686DDCFF34148C0054C84F04BC93B8521B50298062E01331C8E1DC941E258BA92DC418B07B56C4977FE61929455521817A7B25D8C6E4651A5F20477C809ABAB45C28A8F89436B1240F4B6DEEC3B4380AE24B59CDC1F2BEAEFB97B3C335CB2493663CCDECCFB7DEB0CB5FDA03ABE063BB4502192A0D77684A8B808DC94266D1B9263961C61A5212A2AE1AAD892A2FC4CE6C6829D1FC61690952487B569E0FF007F3A4476AB3CCC3300422A1E7A6E3C0A2083E57B795A399E92885A1218048E6004BFA0F6E6B0E88704421629B397B8BB969E215B80D2A075984FC663A6D8593894A58A949049A02A0391D9EF5DA1A2C5880799F76A7BD96A348EA7ADF137401C0AFEF521A37BFF005011F1E9B6379998C8921D4B0280923E61E2078D89F48414973415EB7E5D7C9F4736507B35D66E82AFA8B4C81713594EAE29F22AF0FA19F99C309BDA495288EE54B26AEE950D6A2A069EE90ACA414F13EE05F6FC74DE13AFB32D6A1265A6B9C4D5306DCFFACFC3D631B48ED6A9FE67045CF09FB06DFF008061686DA9ECCB5E0134CC30491E33F58A69B6DBA89E5BCF5E789893DB293F2F7814787604B1A5E9F53CDE320136D39C42B37D05DA432543F8621F1D5350C73DAC93CFD7A62730BDADC3AFF6A08D6C4539B80EFAF93504655C563FE6F5880E69956B1C9C4E71953F4C854F741A9A82E017325A49E083D627979CF60FB4322791C4532CBDCA833317E47CB58524A544579B167EBB72FAF38ADB33D5154DB8A61541534E663BD5B6EA408E67893005A7A40C4F49CC654C03854950701C11A16D0DE90B777CFD3DFDE3450EA4ABA54BCAE36EB52EC120B886D54D133209255363FBB4ACA5A2714926DA3DFAF21A8F1A46021E8EC45FECDD6BE4CD0DF53AA5A2E052B304A164925908E28B1B4881899932524710A00185CBEFFCEAF19EEF9FA7BF6758E06A34BD1C46020595F678A7CA6DF87C2313F00A981D20A8867715F0D3A8FC468A92E0907E63EFDB8F0DF7379EB53056224733CEDCE2DB73C248CB6705070BA5C70B7DEDD5B4F04BBB0356D5ED5DFF00970DCE36399D34AE14858F71BF5BDFA75DFD2D87C9C14C4B7C849E63D2DFC7D6125A824B5CF2000F478FAA9EEFCFE5FAE3E0C89885332856DA7D63ECDF02B6F51F98C80099922FD6DB7BFCF1BC60822E232C6C124D40F51188DCD0078A481B6FBF3C1C0A360FE519009B08DBC03FB87EFDF80A14039040E719E056DEA3F3182DB248893EEFD7CB1AC60822E230EE8F9FFD27F3C1188CD08899313D446DEA7CF046E8203BEB1B3801D953EEFD704280836AC66941131267CB1A95A45D43CE36E151D0FD3EB19411B823DD8C7788FF00908D84B59B249E958CDB4154F84988D813F763066CB01CAC010195305D0A1D4465C09E9F7FE784FF005521DBBC0EEDEF9467B998CFC26CF63F86F568DCCD1FD60D85926E7D6379F38C2C852564041E27DBDFBB5DA135BA012A0C05CB8A7BA7B11CD77065ECA96A504800995111600EE4C7EA4FBE42565B8C9DFF004E4A95AD219AF1F8496FC7392967B91A7F98EB476B7DB153E92A0094D436AAA7D2E86381D4A8A0A78B7292637B131F9F67F873F0FE766EAEF71521480820FCC9A1AF303AEBBD75F377C6BF8943B392D387C24CE3EFB8904A14CD60F404DD8F851A3CD6D53DA1675ADEBEA55985538A602D5C03BCB419E40C72B4F9EF79F54F66F274E46512D12010800060D6D682BEF48F1AE6ABC4F6856AC54CC4948592B292490C4BB5FD05EF15AF7DC4AA8654B01282384A884CC9E52798F2F8F3EA32387152871A780B3049D5FE9A73BC56A64D97820650471173F37A3D8D76D1C561E726D3AFE78529A00A2A4AA54E14F840DCF88C8137BCED26D338AF669265E05E677A01A9617BD07F97F1686D2A5CC9F30289294B82CFA03BD2EFA8AD4B88B5159964FA6281140F34DBB5E5252B7400A2D91CC403FBB7962030866E6B88A4D644BB23877B5F7D5BCE2566995C094801C0152CFF004D856DB6F150EA1CF2BDE5AD4DBCA758519093E1E117D81DBE5CEC062E383C9815255C3517A7959BF3EB0C968490F46FAECDFC6915D3F52B6CAD6A7788AFFA788908F7DFCFA4F4C5AF0F9726500B4A78599C357D456BD4D4EB0C660208AD9EBE5B7BBC44731AE5A8A9216093602428C911D66E64587CF12273097857723E5624BB6B66D7EFD61A4C9F32A00B8A372BD6FE2F4872D2DA2B36D60BA8525B5B34148506A9C790503856411C05613C5707EC123699C43E65DA790E995DE00A502129152E342D41E3D442B875A9555BB356BEDF4E757768BD727674AE85A72CE5F4E8AEADE185A8A54A8541132A0A1FBE5B629F9862B158E70A52A54B770805F883BBD08EAD57B43C0A480183B863EEB42FEDA1AAB353FD72A3BFEF14C3927829E0A5279401013B6E7CF09CA4CC4942425C02439AFAD75FC35DF5AA8EE4FAFE3DF266CADAC76B104BCA2CA87D9E19326D13C302F6F8F4BE2C384402DC4013D767DE9716AF8B46C25AD4EC934FE3F30C14ECE735CFA29DB438E2CAA28CB692BE393E2E220787CB8FA88E785F1624A071F7C9414876240A6947AB723E0454BCC2CB493FEE029E166D8F503F3CF78BD7487640F5425ACCF57114ED8E15A10A2078409B8491D472F238A4E69DB43210BC3E0BFDD98974958B0D19CB8F5B3F8AF31284915001A33EBB7E75AD79DB5519CE41A529914997A986587070385084AD4F706D300A9245BF7BF3DC5CFC4E6B34CD993162612E0D404BF205B5FA88426AD09E24A0B00C431BB53C3A52FD1ABCAECF755672EA98D33951553384872AD4EA510956EA09700279EC76E6409C187CA4E1D499D3E695A49FDBD2DA9F01CAA223D731492CEFCA94FA78B8077D192A34C657918359AA33A554D4D6F89597776B2029024A038824279C9116E9B62C38752E6BCB918701219A7050A3EA451F66B5219E226A8872A2FF00F115FCEFF4D2353DABFEA08EE34BE5CD503401497DC08A852845C80EA54A13C883387C32844DFF00F1534CF208524A7E4E12EE47CACFB3F2A43718850601241D5C3BF990D406B4B7288EAEBAB6B5C52FBAA87AB1E3FCC7077894715F8785221099F281D79E1DAA4CA4242414A5800EE1CB6875A59FAD21DCB3C572DD747DFC79D39011CB1A3B51D72C3B54E7D5E9946656E249E1DF6E20498FF6DF0D57325214521D6694009F221F7143B3C394CA04124D34A375D625D43A6345E5A92739A94D7D42C0E0400A4F7253F6AE92649FF6C349C9C62D40CB965080CCA05DC11701891EEF48DD4254A624B93BFDAB6DDC79C66EE6DA53290A19765887B876F11B40B5940FC79EC71B0958C23F7AAB764F9DBEDAD79424A992C9141C989FC81A359B4DA1B9CED26B18F065CC3396255FF10961A7FBE036FB48053C3E5136C61596F7E52A9C998BE1FDACA2867DD8B79DA1B4C9C12A74A80045880D66D8F95A962D467A9D6F9B56821CAA0B077E06D2D5FA0E100EFD0751B0C4861F06245449240B12EAA6E5DDFC4FAD61B4C9BC4CE5B71CB414AB36F0C1539C562883F597999076716BE23D202A047291D6713123264E3D24AD212CDFD8C6B6FF0088F7717856428105B96B777A8F7F58685E6F5C3C23317C0BF35106E660150F2DBCB0F13D96929D52C030A0D7D9EB587108DDCE733490A4662FA60D812BF17FEE3F327F2772BB3126951FF88DA87E95A1DE08554FAB7356665E5BC446E77BDE64FEBBF2C3E4767F0C3FB80074E11E9E3AD057782143BDA066EC94F030CF0ABFE221D69977BC03A7789570C738009E588DCCB23932F80A10B9A03F094A9496A87B1A8F7BC3DC37100588ADC10EC2A3DB11AF8A0ABD47A5F3F6CB1A934D53BC14005B88525926F04CB4DC8F71F7E12C261B31944A70F3978643060A495DABA97676FA43A4A52E4A92EE46BC87DC37214A88AC353F62DD9DEAC4A5CD1B50AD3158D859AA696E3D509AD5ACF8002E2C25AE0DA475BF95832FCCF35CB26138E7C64B531130327BA019CF0A7F7120BB35348DF825ABFED3B56BF41AF5D39C75EB56F60BDA26960E5751D02B35A16E562A1A79B512912A2AE04952AE22DBFDE7A0655DA9CAB14B4484E27866D1D2B4292DCB89403973F50EC29A2A42C00A6A6A5C1E761AB5F4B5A28B7F5156B6EB94954C3F49514AAE1710F36B6C12491652C242A083B480778C752C85781C4820CE96554003A6A497FC579EB68C77547D2BA8F02D7B5E95B8B18D88D44A3E12E0E5042C48DAD63F95F9C62D072C94A0E809376602BE156EA2908AE592E521DAE68F6F03B721E50E14F9EB8BE2FE6131037FBE26E6F724EDE78417964A480C815059CBB74DFF00311D365AAEC4B3BEF5ADAA63EC831F9C095839AE5C94B333823C0398FB38AC4CB510CCF5F1F21D6343DBA6F11CEFCE7CFCBD7CF1212A470DDCEC1F53D2E3EFA4604CE21FB5C0BBF875DE3142547727DE6607E7FBEB87F2C0003D8D4B6DA0FE3AB460254A2A60FC8066E9F9FBDD634024102794F9FEFA7973BE10C4E255254E84710E9CABE95D3988DD0A4CB07BC152D5351E819AF5F02446DC3318C5AE851D5F6D49A563071491F2A405528C697DDCB78C641D71BFB09E2264F5836827FD8FA1C2A898482E1F4D00FA7A69082E7CCAB21C1079D79DB71B5F48DC871F7265C089882426D7F4F891F3C2A99214FC47A06D2EE7DFDA1A2B158B144C9596772029F968C0F58CDC436803EB2A352493C3C1E1088899E106645EE46C71198FC4CDC2377492B7BB75E9CFA74710BE19626907123B903FE619EFAD350DE3AC6D645393C2867879F89447DF1B7C4619CA9D8CC45449587E4EF7BBB7430F26627052407C42001B2853F9FCC294B9C0084A1A8E654E206DCE144193CEE3E7897C2E498FC5B34B5D6C58B87FAB577E750D0CE676932CC3FEEC44B2D562A039EFECD0D210D566F9753A66AEA2999817979B047FEEE53EEF38C5870DD89C74D01C2C9BBF09200AF27B74F5864AEDE64F2B8BFF009892C3750BD3737F43B558B4AB5C69ACB829F39E5236C27FE38E26D731F641F11208EA089838964FC32CC316C89689C566C02155BBD746DABAF48AF66BF15F2BC17FD39929628E42D34F00F7E5CB9C305476AFD9F38E2AA17A96910DA264909827CC71016B8B7E786B3FE10E6F2CA4AA5CE06A482953EFD6A3C7AC42FF00F7D39714F0F1A050D5C1D1FD3760ED788F7FF882D0D48E3C8A0AD6F306CD9C711C490D948812448215D2D389AC97E1C63A4CD48992D65881F32496B55989EBBF368AA673F19B0BC0AE05205C82140BE87974AF2DA3ADFDB07B4AB6F52BD4990BA12A712A49295410152362266F8F41F63FE1FC996B44CC4CAEF08E160A4B01CACCC3C79C70BED1FC68524CC12A6F0B3D44C2D63A3F414DABCBCFFCEF3FCD7397AA2B739AE71D6DC512DB4A595589364C28913E5BF28BE3D1990F67F098342448C3A50081600585EC037D9F78E19DA2ED8AFB5530AA6CCEF382D5048E757A121FA446DB63EAE3EB617DCB0B3E14195151260EE64413CA712F88561B08E1494B8B9A0B7E39379C57933A620325440E4FF9891E53A1EB33CA962B2B12B6B2C2AE25386521494FFD244907E26F8879D9F4A48299412E91400F09D79FF24E8F08A997FBAAFAFBF38B0F31CF69B49D28CB321E05B65252E2C70C8B4925464CFBE397AC28C2E23362672F8B8DFE506A05480D56B35852F405A3604A1D293F2D35F3A0714B6A08D6292CD754B85F7B825750EAAE5478BAF5902DD395C8E96DECEF6695862A993430353A3E9FE29C8B184A612E9726A4DC935BF9DEB110ADCEDD434B35EB0804184FAFA5CFBEDE5B1C5C026560EB4E11577DBEDE0D5D85352A2431F7AFB6886D353E77A82BBEAFA769DDA94A963BF6FC412B04D8F78A10809DCF5DB0D713DA0C3006A904023D8170DAE8046840343EFF00117C699ECC74FE4C84669AC1D0FD7405A3282A50E1501201750608363703F3A263B158BCCE7AA5E1507BA3FF00F7014CDD13AB9A5EAE0BDE0EE65A43962A06DBBEAED421B6D5EF589466BAAA99A63EA8CA114F428494D3D13294A14DA62FC4EA1216E4DC8E2923118325C661A72A6F0AE6AA690EAA96B58924797D291A9412C123A803D77373BF9C578BCD09A82AA263BB0A2495384A84F33E3F3F772EA7167CBF07C491DFB020390696DF61B579428896430218DCBFA0FE34FAF0FB88AE537F5B6D55552927B84B28E1851201E22D0215CB7B731E52AB460E4310B42529152549714AD1DEEE000C6E3943A97C23E635E16A351F4DFC9A2CCD23D946A4D45C35956A19665A98510E841251B11E320FC2F7C52B38ED4E1702BEEE5AF8D6E78528048A740CFCDC561F4B5A58D0067AD3DD7DEA62D166AB44F674DBC8A453559982C27EB0BE12EA82D03C3C09855CFF00A76E722D8A74FCD7139CCD69AB5CA969B24122EEE0B16AEBE70D3173C24012C877AB6E0D3968FCFE91F7B38ED0FB415919165AA4652930BA871C45284B60DC8438104C01CBE7CD354CCBB0491DE7F796763314EF42400E2FAEDD623BBC98B3FBAB7BB7ADF7B56B4B8829F24C8F272EA733AE39AE6C882BA5571A514CB1BA439250B0A33245875BC61696EB5132E5F04A1C244CA7CCFCB46D7534B426EE4B9BD4B9277AB79C32661AD2B985FD4A887F0A4A894A03480F95721240913205E636C3E3292A6E3F99BCBA37DC3460DCEBCF78D74BA7758E7A7BF790A7583E245538529E049BCF02BE7F773C615899520F095849D921CF90B426B524508735A5A9AD6D1236B22D3F91242F3CCCD1595200229D0D91067ECCB648DCC5F975C2B2E6E266B8949212A3498E4335D81A9A381BDE13EF24A48AFCF5F958DC73B56953C9A0A8D5F4F449EEF2ECB9B6985C84AC84ACAC0D89E24120C7291CF0F519799BF3622615ABFB5BE5D2AE030F5AE86D185620243A52CF76D2AE3D75E8394305767B51988216A5B73C924A449F48E47A5CFC04DE1B052E526890ECD50EFE27C06BE702B16433DCF36BFBEA74148634D3A5B2A529C528B907C4A2A889E64902797AF4BE1EA6420B02905BC00F0B7A13F66988C4296C1D9AD57EB7D3ABFD63538844C48EB78FD9F761512258B2436C403FE39D3486DDEAFF00E47D863E7FE1A113E1B000253CE0C739F3FF006E5CB0E65C941A8961B9900D76A59C6BD631DE2DCB93B54BBEFD3FC6D0DEB2DC1F10E8449FDFAE1C8C3A4DE5B1AE83F0DA535AB41C6ADFD0437D43EDB407881E2917E51B6FC8003CFD30F644874B24330D8B1A9D87D07D1A1F609D8EDA7ADF43BEF414840AAE6047119236836FC7CA77FC30E53875357C6A47A53D6EC224211BD5CD9E102204FEC4CFCFCF0B4B9452E2DB6BEF5D6086F5D6A0837F75BF7E779F4C29C0DFDCD6B0FE75B4109975295F0C19DC99B812622DD630EA54A4A920A98DC5439F571D4DE1594A29762D6FBC2571D4926C24F97972E60FAC5F0B1932DAA81AD424026BEA7CCC2BC6ADFD07E211FF0011629DE6E9DC42BFCC980B42949E0E1BC9281CC91F9E18CC934B50BB16707CE81AB4EA233C6AA9E2AF415F187D4EAED47A78368CBD62AB2E77FE221D0878047310EF11DA7CFF00185C56592F10A4AA623E641252504A087D8A4A49F41F58D84D98971C47C61AB54E97ECC7B4EA7A56338A5628338752E019836853629DD588054868210BE251FEA369EB87582999D65E5588C32A64D91218A6471F0950D7E62788F09FC757D84026FEE5313AFAB01D7F160F1D27ED53D9D759766CF2F36A243B9CE975A8B89CD18BF76DEE3F92D95AAD2522676338EB1D8EF8872B19325E127AB827A084AE52D4C52FCD4CEE7F1AC3A9984E1142E0DB571A9FB5E28C7739532D06E83892572971C7014294A4DA0A1705252AF8F3E98EF3844E17152FF51316821829297147B9A1ABF36AF230DD58628F95497357D497059BD2AC07578FB7CC7E6CC4E4005806DE9E2D43E61ED1F5CE5E196E2E583391BB3D89F01EB189415DC49E1DE01547AC6D84578800B685FC391A3FA6FA343D44934228055B7F13B356362131629B799223F3FC30DCE2175E10E2A3416F0AF41E70F654B48AA9403914E7A3FADF468DE4445EE7974FDDFE18DE562012CB6E840F1041FAFF00889191946171B59D8844A61476AED7352DE4238F3E5D712386C32710C10872A346035F27EBEA4D21A63301966041271B2CF0D7F7245B9397B338D8E91C8AC66990B5B8F32DA40995B8DA66378E2509F77CF6C58A47661738A7E457CC47ED4151F161E1E02D57A8637B5B93E59C5C58892AE1B82A4876D9EDE1BE9101CFFB54D1790717F13AFA747083C5C2F24ED7BF02AF37FC2716AC17C33C7E2D295CB9334BEBC2A1434F6C7CB4A9E33E3664181E249321D3AF120BB5F715B6AF14EE7FED67A03254A5392BADD638B2A0F82B578236FB522FD131B62F9D9DF8178CCC4A8E264A900311C697E2D2C5A9CEE5EBA472FED77C6FC1E62C9CB9694B38265A83DF97DFD228FD4FED9B50AE2FE18C84CCC70A84011623C3CB6BF3E78E9584FE9F644A62A4A69FF60150068FCBED531C8B31F8AF8E524A53316EA06CA3A740E39741B98A473AF6B2D7B9BAD28A2A97691B4157111C278E6C394DADB7588316B4E0BE0C61B0801EED0786E784333BB1D0F98BF8473ACD7E25E6CBE2E19B32AECCA50B31F37AEE29D22BECD3B5DD679E89ABD4552C71CCF0855A6DFD2A1E405B6F3C4E23E1FE1B0A18C943501748E5C9E8056FF68E73987C45CFB895C3327D4B8F995D75A0FA72885D6EA6D4C1B729D8CFAA6BDBACBBFC4B71B0D04191BAAFC57DA448B8C5D7B3BD9BCAF0C952E7C89448A25D209D41D1DBD3D1F4CABB519CE68A3DFCD9A18B3A8ABA01567FAB6950CD543459FEA47539551D6562005CBAE77CEF0113C46545511CB78E90621E67392647264AA74C44A4B876E104D4D0301ABD9BF02D12F178E58613D6FBB9A9A69E7ADFC1EE845651E87C9D1943657519854208AA70BAA708524784924A80927918B6E314BC176770D8C9CB9F2E4A65C804143A402A72C6E90430A9603D6AD71A718A4979AA73D69ADDD9BADBA45479857ADFAA5AEA1D212B55815710B93CE6DBFB8822778B8E03249320829480C050003425A8C683D691CFF34CB71B3CA8A96A2E6A2A5A9422F46DC68613AB2B26A29AAD4FA9E4492DB224F1156D10542248E5CB61CE4A7636560E5AA5B04101B4D68EE7F36342C28865597CEC1A9466125CB80797234F5BF568B0B29D2CAA85B59AEA43F56CA5B1C4DB3CCC0B4A130BFB4049239913BCD1F34C67EA94A9723894B07F68762F5FDD7B7E0C5859EB615E6DEC96F3DA156A2D76A4538C9F2C4258CB784A68DD109242478CDC0572DC993CAF7C43E1B27C54D9FC650A01452E6AC7566B060F517D235AB004BB453798E7EF309729D0B53AF2EE5464D899373236B833E57DF1D4320CB5324244C484877A803C6BEDBC6088356E6FFCD652DB6B5D4051EF42413727C26D3F7C7AED8B6AE7C8C2A56164310024380CC2BE06CF616A54C68BE11C240735706DEF5D45625394F66D9D6B071AAFA9596689052B50721129064C85149881EFF7E2979E66B2427BB0B20A8909094953D6CE079D830D2130926C29BFDA2EAA2CC720D194472AC9E95B4D6B8808ADCC4242CD3140012784A55C7C664784CFBC629333078A9F3828A95C176F9AA0D6F46D3D01B4093C229E66FAD7AD621398E64E54BAA71D756F8513FF00C4AF6E63F9009B0FB3616126D8B5E592C4800ADA8C48A0714F76829B7F17E7F7D21A1B0D3ABEF944BE1933DE10525EE2D806CC404999B79DF13B331B879728A54B44B49FECA2B81BAD5CD2DD3ABFC3A41A90E5C317E97A9BFE0BDA24F9668DD41ABDF6D748C8A4A0491DEAD4128F04DFED7018201BEE663151CE339C2489265CB98CA51674B9E2B5481CC55FAC6F31254556029B507A036BF48B9F2F6BB3AD0AC34CB884E639FAC40470B8B097936B1852609B4EC27CCC731C6CFCC674C5913D6845D2789F8C747A30E571E30CE62F841653BDE8CDE1EDF9B346BAEA9D79AB941B654727C98447086D00B676B0E056D1D7CC1DB0D30B2972D45531E6951ABFCD5D4B976B9A5295864BC5292E09DD80F0B73AFDE358C8B4D643DC3950D7F15CD5525352B795C34EB024A968E25257C53B1B401D7124A0B2B4909EE9201E2481FBDEDA79F2686C310A5062E0AAF514AFD4F23A8F04399EB6CF549FE1EAAB0BA758E0698A669B67844C0054CA4131379DE2F33824616521456996EA56AA3C43C8B815D79C1C44EA7E9F48479668CCFF0032EF6ADE7BEAB42F14A9DA975490A693CC84AD416E7A2648F961E2E722594CBBAD60F0A52924121CB5289A8D5AFD6000973E25CFE624ADD1E90D38D9552AD3A9F3148BA57C54FDDAC5F759E130768B58FBB32A5E618A0AE296707C27E5B2FBC1F6A3539E91BFCA9B1E23E829A6FB7DE19EBF5A675512CB6AFE174A652AA642438427902B48936E7CF7BC62530F952070CC5278A6007E725C3B5684B0D98FA5223F15356976376DBEC75D2911879D0BE2719A4358F2AEA79C78A003BF17028FA98FD99697842861C2C1EA001F8B1F1B56EF0C7BE531AD740DEFEDE3686D7F316E80CD5BA1D53A3C2CC4060A6C405010AF5F899DA4A4E116A50253A9AEFB528370D077C40A54EC5BEBAEDE7686D7B3C61CE20D909E704C586C2E39FC4FBB12F270A6CC6D5A1EBF5DB954C6BDF2D550695029D43F5E74FB43554E7BDDF04B89E1331E20408FDC733EB787F2B02A2E58B8B8009A7D453E958511C531C9E55347F01FE3A4352F5118BAC4F5E2E43CFE64488C394E5EA70E9BDEC006F1A783F9D6151289B1F4FE61B2B752287042C73BF103F8E1DCBC0106897A75DB73F43E1780CA22E6F6B7E7F10D4BD48A9238C473F1263F48C38460554F9091B55ABD1FEFBF28C777CFD3F9844E678AA823F98070CFF5723D0DBA4F2B03D061E49C1949FDA45C9A337AEEDF6A54BEC2A7868EEF5DB7FC5FC2C61BDCCD557858B03FD42DBDB7F4BFCF0E061AA686843DD9BC7DF287D1C3599A94092B163FDC3F138C9C2BD8795BA51ABEDE08D6BCC094AAE08DB7079DBF0E5F0C63F4AE1A85C8D09E7BF9B7DA08C98AC0BE2E2500444091B5FF00630A264A903840A5F60078D61497AF87DE335D40EA09E5E216C1DC294A26E1FA7ABF41F4DE148D6DD5B6D05171016372AB029DE62449DBF59C0708667CACCFA5EA2D572DEF9C118A3306AA41432E48120A4836B9B5E0FBC6D37B63656042032920061517661CE96621B4EB1935EA6FEFDECC183E28140AE345424C120F024A9256A1B10A0653C27CF63B6C70C3172A648E032C128550B6828366D75894C0021DC6FD36B8E7F5893E59ACEBF2D6159457329CE74FBE3BB5E5AF849EED06D679C0A54DF885E6D88DC6E5183987F592268C2E392CA44F413FB83DD23E52F6A8DDE25E5CC09F9549E24D68CD53CFFCC513DAFF00B39E47AAE81CD53D9D14525536DBAFE679536254CA9409406F8882E711927BB4AA22F02D8B0F67FB7799E0F112B2ECC662D9C264E28D133C0607880608614009ADEB1B89095974D7705CB0A6FF006E76158FAAB14EF3A0A90E82D93F6004F101D36FC7CEDBE3E20C8913A610385441A00EC29F4E56ADDE91F59F118E9125DD490DAE86FF006B73715684CA72BE9969450321B4B9FF00CC2D7C30A236238C5A04ED3B1C4F617259D3880124BB12361D5B5F3615E55BC6769B0F21C7789003B90459BF3D5A346659A64F9630AAACD6B594388054A05C48D874040B11FBDCD8B0FD92C4CF1F24B596607E53AD99C0A3B781F2AC623E206130E5415350E9E62AECDA86BEC6295D51ED01A1F23B1A969E750141084AD5E28DC120981B419117DEF8B7E49F08F1B9C1E24CB5A58D5924BBDB9BD29CDFC389FC45F8DF8BC9001815A960BBF02C96B33B37AD772CC23AC3ACFDB12B96B769321A314A83294540712E0F230527D63CCDB6C746CAFE0AE2706B42D6851622852696E83DF28E1F8CF8F19E63C1733920B82CB51E5EFF002F1D76D4BDB8EBCCE8A5751A89F7D2A2BE065A6FBBEE42B70A53647174BDF9F3BF55C93B11272F20CD9292433F12013460E1EDE94D22A38FEDD6719985033E7278BFEE56BF9E81CD2B68A8EB739CEF3A714AAE456D5F19932F3C99044EC09DE76F49BE3AA65D272EC2CB4A3B99492033F08A11C9BDD6F150C4A332C7289563660E225DD458EDFDD61D7C43426469E72A882C650FB6AFFCC52AA1C571CF4E2F2E60F98F27389ED0C8CB292C2268D025012C756615E60B786ADA42E764C5466CF334A8BBA95FC91AB6AD48548D25999108A4EEFF00F538099F45183CE07C0DF0F307DAB4628006530AD1CFE3ADC3BD0087E8CFE5CD0C58BD49241F520B06FAF36852D692CC385C76A0329EEF8424171A4C9263FB8191F1BFAE24BFD6F0CA21012A49554B851E66C3D39439978BC34EFDC94101E85BA7D768CB30D179DB9429AAA32CC0FB49EFD904806F04A81EB6DF7EB8653F38C1AD6649242CEA50A6259EE4352D4859385C0CD1C4532EA4172C585AAFADEBE2690F5A734057E64D30AA94A5AA51C4730702D2AB054A6E93E1E60F0D8F989C406639D7E854132144A9764F86DAD6CF5D21B626661301592122CECD4622F46AD6BF7A43FE7799651A5DB396641C2B70A7856EA0788280BF8A09DC9D8EF6B622E463E76366056252A59249E024B002C0D9CF514AF323546768482134E747A57933D7C1DB56A8EAF37CC8D438AA90A71970F8D2A32A50E5C24CA844990244018B1C89F44B27800601A8D6F036D6B67DE1519DCB200501E2CC5EB6228CDEE91B586691C5216F952D959114E38B8812481712AFB5F95B7C490CC0CB04710068C68767D41B6946B0BB46A71F254A07840511BBD2F5F0D398B345A5A7B4E52E5684E6D99AE19580ACB185927BB800B9379B9FEEDE3D6299DA2CC2662E60952145453FBF841ABDABAFF815863889A998414A425EB4F1DB9FDD9A10E7DA95556FA90B3FC9448480610001174A77B81FB3891C872F993129529152410E2A3CC5295637F366CE6A37BF845339AD7F7F52F9AE7434DB5FFCA5E37FB51C246F6FC76C74C9197C844B96A44B4A94C4AC1A11B5E97F2DDED9E1E1153C3B58BEA7F930C748F56E6358DD1D1503952952827BF01400E222E4C5F97CFD31179A6351824B23852402D50FF8B35AD188BCF23D03956414DFC5B3BA865C7DF095B2C2928968A4788113CED756C67C8E2818BCE711899BC082A213422B6D6D4A0D7784E669E3F68E730D45F5D49A4CB406DA48290A6BC00804DE131BC7E00E25F299299A7BC9E1C83FDD5D3636E7AF22E634249A3D36FA7979727AC4442D4C970BAE2540901C4900A957EBBF53FB8C59952E4147CA8482D7A5B96963B0D2EF1903E663CDFC9E1C28281FCCD696F2CA25F093E271415C3732480A1C36DFA1E98A8E6D8C1872A12D40B39A1ADB6A9A07BFE4C6B164657A4725CA50BCC73A790EBE8095374A91F6940494F0A099320EE3CB738A54DCD264D532D642483F315370D767AD74ADDC42D2A6A50E09620382F5A93E57EA2F0B135FAA3533E9A1D3944ACAF2E42B816F1010148062656944D81BCF48C5731B8E9C14AE07984E9FBADEFD758DD7890A003EE6ECFB83A6AD489454645A5F4C334F5598BC8CC739502A5124ABBA7073201503276DAF7C34C3E231B3A6F0AA42F84D2C751CC396D6CD7B4305A8A892FD36F2F65A19731D675B99B2BA64B6453A13C2DA5A1C32361050013E7E7D77C742C9F2CC3293C4B484294CE144DAE4B28D2BA72B690D264B54C2017A390296E6435BC341B430E41936699EBF56A710ED253D2A9257DE9528B895CDD25571B5E397BB0E33DC26070E990254D4AA64C7F9501C820589492CD5A529CC424652921418B26E5C83E1FC52FE32DFABE9BC97C41BEF2BC5C2D456A057B4C1246F7F5F8E2224E0A628B5810E4004D08A3D6E45BD2350417176BD4B8E5B7A1F4864CDF3FCCF38EE997DC2CD352F10A7436AEEC10AB10AEEF878B6047145E4811898C26532A592B4CBAADB894AF9AD66E276F2B3D636330292E406D0DB7D2E756F015A4459C71B6892577EA5444D8F9DF6E7D7DC276560410DC3660EDBB696D81D4D810635AEA7AFBAC37B99BB4CFDA583C5CCF4079DEFEEB6E67A49C9CB8948012FB966D0335FD6F0DE7A0A8063E1D2D5FB75AC30D6EA1607142C2605A1511F0FF7B79E2464654A2DC487AB501A574BB8EB4AC35EE14C75B785DEC69A5493C8443731D44D150E250E70499F7DB90F3307CB13527292C192D4AD3EA7C3F98C890A1FB8172FEC445EAF50B4A9870081D773BF336D8DFAFA5E425654A7608A167A6C18354BEE3703CF412964870D5DF476D1FDBE95860A8D42D7FCDD89FEAFBA76E7B6C6D896C3E50A2E782BD356E5CB95BA3079213C3C4E18500ABEEF4AFBEB0D2FEA36D323BDEB7E2549BED161D7E76B6245193F100F2F95A8FADC1FCF5870DCBDFB3EB0D2EEA141301C9FFEA3637E5C5F2E5EFC381939000EEC9ADDB4DED7FC6B04225E7EDC1FE61F39511CFC893F324F3C3A464FC207FB6FE14B73A7BA410DEFE7CD9E11DE1E67ED91F71FDF9F25464C546881E1414B682B530E246B4A7E34F7E9AA6FE3ADFF00CC57FF00E457E78DBFD157FF001FFDC7F30E23919E36777543FF00EE1FFB8631FE8CA76E1ADEE6DD5E08528CF51B1709B5A547EEE21F2F7E30AC98D886B356C2D4A182370CE9300A5C2379851EB6B138426654514E177F06F16F75F1511AF87BF585EC6728FF009849E9C5D49F3B587BAF384C601418701A9156B3D39EEEC7561A39521C539B2146EAB73BF96DBFDF8D7F46520B259AD6F6FC818215B15EDF1020A44F21CED3D7F51842661D4456D63F6D7D5F94652A29FBC2DFADA5704116BC0249F4F2B0E76F761BAF0E0A5495241705BAB52A5F958DDFC5E49C404A48258BD0687C7F8FABC6F6EA87507FBAF7B100585EC3CBDC714BC664D8CEFB8DD5DD951219E82FE03DD2A21F4BC4A0D8B6FB1B31AF8D8DADAC3FE539A54D02955B40E115D4E4162482D142A03A1683FCB5CA0C0E206390E78595270F3A48C34F40285065814571519943E60C58B067E7123271001704380C09E6075AFF0036BC7BF3AC7B66D1FA494E135ACADD6F8BF969741937E84CF29B1906048C7CAECA7B258D5A920E196F7FDAA0FE83C4F531EF1CEBB7580085706312431FEE1F9DABB1B4757B5DFB5DBF5C86A9F4FA02035DE25C5226564D9264A790E9D37B63B1767BB0AEA4AE7492C4070DFB480696FB0D2C63887693B7EC17DDCF0407019635E43AEC7C2D1D5FD45DAAEBDD64FA9A554D4B2D3AA2375253076E968F3DC6E37C763CA3B1D9722524CC4A12C3E674876E76B695BB33C70ACF3E206378C844D5A81268146A1C9F7F48853F9054370F6719829D2FC90AEFB8CB7175484ACDC83CC7E38B7E06760B23491839299A411C4C86236D3D436BCA2A0BED5CCC7A9B1897FF00885973A58973F52E29C92BB4FA36851C7519B87D699259EE9627AA78879DA6D6E9CA6E5E6F89C6D25E0B80287EF6700F88DCDFC2AF1B8CCF0F313F2E1D24E8CC2B6D35B68D76D21A1CD6BA4E81696D8CAD2667C6A755FCC0911212A16117813F09C292F2CC66255FEECDE02BA049400D5A07363E760FCD2999868892C75BEDD2BBBB6F4168459876AF96D1B455474CC36A1BC14AF6B8DC6F613313E71189C93D869F8801E729955A24B7938ABE9ECB338CC52D8CB4A9AE4077DB4AFB1CE2BDAEEDFABDB52D287596D2926490D2605A2640F88EA22F3890C37C2C389502A9856D5FDA4B750E6BE7D1E1D61B28C5672E161496620170FCEF5B6ADAF843731F685A900977326DA039A4208DB62523CBDDD799B5603E142920140528D4905045056CDE3604D77874AEC74E92FF00EE1009A51886EB42E7AB8A369100CDBB7EFACB8C0FAFAAA5B1C657C2E16529B5AE08076DC0B0F22709E61D959395A4A66A9285D8829009E8EF4E5CEF1A8ECE62921452A5280AB0734EBCFEE41BC4F3B2DD59A9FB4BCE11419526A0E56D2D3DE3A9714A6B845CCAC9E1DC1FEADE6D7C736CF0230A0A829013BB25CB1664B3B9B7DC434998799875042A694AB4049A1A316704EDFC476FABB3CFF0F50AB4FE584A2A8B694D7B9DE71C92014F0A892266C4249DEF7DAB581C1CBCCF10578850013FF4C287EDA005EEEE2DA588A40AC14C989056A25DEF527CF5A1ABECD1515467148DBCAA62A2ED72D478944AB72646E623DF318B6C8C830F2C02569E1BBF981AFD2DD2B0DCE5938170694AB1A8D2A2DA3741D23706DCAF7A8A9A991DED792AEEDB4DC2A6E66011617B8D88F3C63112F05212409C800025DC1B03ABBE9AD74E9AFE82671001449E8C697D7AD0B7A87B7F28D3993E4544732CDD4DAF36E12A452954C2AF7B4A4181B102F8A5E3F138898B230C82A92927E70E3A535EAFD378789C1AD20294B246DA8A01A5EEDE0CE22BACEB573CF1ACFADA9490084D1308F106D3B1FB13B8BDF7F8C4CF65F2D56625467A3F6915533EBA9BB336EDAB340A32A4D0CC0496A3B9BF3AFA1881566A25B74A43A92A75C308812A99816BFAC799C5C96309971212B438FED76F20CF72DCBC28A04952428541D7E9E75FADAB0F9A7BB38ADD4494E699C2D4CE5E921684AFC1C693720494A8F2E477F3931B89ED194132A5B296A042529A8B6A459F991EA2123365A4B15007626F7FC74E7168A6A72ED374668F4CD232FBA94F0B8EA8A0293D482EDCDE763E5CE0577103118F5257892A72E529721AA2EC454EA2BF58732D132601DD825F502876D0B5EFAF237AD734A8ADABA89A9AA5ADC7092E3409086AE6C9E1F09B1B91E5BE25B2AC9A432A6CD02805E8ECEE0EE079BC253A52D052160A5ECE3F9DC74BD617656DA8A85252216A71C84850429504DA660F53CFE42C9E2F1185C1F1095312549B80A17D0BBD6D6D3EA8CC065D5747ABEF6E9E9F58B032DECDFEA4A39AEA1A8029DD85B2D12018173C412411331045E0E2A38BED5AA52952788D1C392D7722E2A0FE63596D33F655B6D3C36D983562734F9837DC8A1D3F40142380BE940213CA78949BEFD794623518A4E378A6AE6710350E77E4E6DB39A6B1998B4A4F091C2545AAD5A3B6C2A3434A3DE36D1E9AA3CBCBB9B67B541E7D10B6698A8DCF310959102C208BFC31178BCB06371084E1A61E00FC6A14096A8D6AF57A7833B33C515A0029716A8D7E9F5B0A8611AEBB58E6D9B32AA1CAE91BCB291A051DF24B60A9239FD94933C3313BEF899C064986C214CC9FFEE2B73AEF434AFDED0D133575150CCE29E429D2B70FE706A4C9B32CD2B1D6689D5D63C149FAD2DC909493241415CA4DB7E13EB737B14CC56598792FDC21C0D05475000724599FD21CA160B82A1BDFEA7CAFD22CBA0A1A0D254E1DCE50876A0890810BBDCC4A245AC36E700E2AD9863664E495E102920B874B87D03A41715FC720E5065A4FCC43806C41D8F4D79BD9CDA23F9CEB87AA5484D2D3A68E9FC4105011FCD02D0A80088E5C5EE1318C64985C5E2262953C2D4090DC4E48E94A5F47F178618C9B2C2992B751A000B123A7B6F07887D5E7A5C3C6F360CDCA94B13BEF1CF6E5F8DAE585C192689D589FA0B1BD6B5F0061B9933420AB84807521FF0087F17FA447EB73E652905A792557949504F0CF2127C899B49C5870997AD4C384814D2A4935FE6EEFA330D5089C43B384D8B1A3BBD1ABA9B52B101CDF5496F8A1C0627FA80B6FC8FA6E7EEB58246553385F80B51BE5D29E36BD34A42467252A62B0145831F16E5BFB3104A9D56A755FF140E136F10BEF1B917E53EEDEC6C183CB0949796F673F6A73D1FCAF0F25CB2B62490E1DD9DC54F833D2CEFB445EBB51B92A3DF0B72E31CFD081F9E2625654A2CD2AA6D4361BBDACCCEDCAD0B19029F35AEFA74888665A91C2A402EDAE6CB11F7824F3E7EFC4BE1F2B98C0196CC2B4D99F7F4F38D44820B3B0F7CDC9F088BD5EA35AB77A081FDE09336D81FDF5BDA465656A0C44B735D1A966B72F7AE5586AF102CF62DC98DCB69AE85E23D53A85DE4E026E7ED475E84CFEEF7C4DE172DBBCAA1D83FF00FB7F9AEB511B09640147275D76D74A35294B986A7F50BC2DDE4DCCF8891CED73E6791E5D70FD3966BC1E9BEEC0F3E7B178CF028E9EC7A7B1B874275039C4AF1CEDCC7CEFCF0E519726A0A1DB71F753728381434FA7E634AF3E7099EF08DCEF73E5BF2DB0E13972187C9C8D016F27F483815B7A884AACF56A375931CC2B693CFDFD3DF8C2F02948FDBC2D761A0A0A836F621442141C949D3EF1C7F1B56DC67AEF68EB311843F4D2FF00E5EBFCC1C497670FB4033C5F270DED3C604FE3F2F96373824B71105AF51F9A42810A21C0710A919DAEC7BC2473F10178E7CB9FE58D5385973094A594D46BB574D746A0FAC618BB6BE10A5ACED6A27F983FEA120499BCFEE309CECBF87E6200480C5C33BEEE2CEFB3C6E3E43F3538980F53EFAC3AB19D2A44B824EDE2DFE7E7F7CC6E19AF06548744BE2A35001EEE1F91703585C4B5A83A524F4F7EDE1F28F3852F8897072E7F2DCCDFDDF2C436324F700712784A8D396F435F2DEB1AA814FEE0DD61F98CCD500F18F5E21E5E639EC797CB117FA79AB2549415234228FD2952F52CF0977892581726C07376D46DBC3E51E653214A06C902E0FDA1E5BC193C845BD1A9C2198A0B52486771B1D76F7CE349A569524B108A574E7EC08764D428414AC137240222E041B7974EB718D664A49490A48200356B68FBBFF9E70B49C428D2DA6EED52DFCF833B43AD354ADCE249516E9AC5F7044A4FF48091E2326D6DB9CEE2B98ACA2522677A164A892A096D056F6A1E8FD686564CC55DE8343B86B54FB6DEBDD07F2A7EB966BB51E68B78995AD25D5113B9B0599BCEDB472E7E6F464597E1788CAC3A54117FF6DADD534E7FC3C6ABCDF3458FF7315354FA712ABB0725F4EB5DA1A2B750E92CA94D37474C2B1E1C414AE35A4A08D8DECA2623A8B47338778693C7300972C4B492001C352D46259EFB986ABC5E22692264C511FF00A8D5C5E95A7AC46F39ED12A92C292D25AA66384880947104C750028DFCFD2716FC176566E2D940A9054DA16ADF61B16FBC32323BD72A0E75700FD4D77B52298CD7B44A36D6A51CE9548A24F1A1495381DF20552940126E3FDAC69EC4E270252BEED5890B63FB2CC694A8FCF3786D332B54F520CB1C201B8DBA1E6CD5D62AFD41DAD65B468529354DBAB0492B2E804F9F093607CF963A3767BB2A7112D972532980705007D40AD35A08B5E579384201980A8D3A790D9DFC2B14E673DB930E3ECADB5B95350CA5D4B0594AD5DD29C0526528078A7948E56C48E65D93C1226C84F7D2E59E2A80D70A17636A72AEE6A5DE27052D2582343A01663EB5ABFDA2AD7BB48D5CB52BEAABAEA976A164A58348F2001C5207196E0083126398E78E9995765B2E19795AA6C952932C70A8CC4248201AF0F103FE1ECD19C1CB44B5FCD2D240342C0F3367B3E9D4421AB63B57CF9756E8C8D4D53381B97175CCB5208B1E12A4949EA2079F5C46644BC164B8D9DFAB216852FE43C25693C2589F95D88BF9178BB607F4C8427BB090A57EE0CCDA8AB7956ECEFAB4BBA27B48AAA734EE5336D33B92ACC1827726092E037B8DFD31D025768FB349E29AA2A134821291216C4B14D592C295F3F04F345A5212124352CA0DB55893ED891689B766DECFDDA4F6919DD26554CD2A8A868D73985621E6DF4069638941442884CA0280BE3CC1F17338929C4F7B257C1296A2C0382A721B84382CFB0B448E5C70EAC24E2A092A09BD284397D6C6F67A8AC7A7DA732DC97B11D3597E8CD2450BA9792539954777C4E3AA0429D8717C4A4DCB9B28C0F28C732C0652ACDD2AC5E632CF73874954849510FC42A48043EF5D758E17DA5CC38735484CD1598CA00528A037E571EAD0B17574798B952FF7AA6DA2106882B88A90E11FE638D47C4A0573F6CDA60784E18E132F3FA99812582154140E03D035D9BC46A6F12D9866024E1B0E65A5C902DD2A7AF3A6A6F11F6B2319957A5145C55554A5C2D494A884A64026448FB26E7CB7C587198708C1A953A67720268A26F7602BBE839C62566A66CB09EE6AD550D49AEDEB6D748BBE82874FE81A46B32013559F54B6A4788A8FD50A93DDDC2894F882B9C4103D31CA55226E231AB95326A9520AC10AE2FDCC5EC0D3437ADAD48C2E7CDE207BB2923400D1FC3A78F898ACB39CD5D6C56875E50AE9E342F8E5203B2B03864A620C6DD77C752C065B2A64AC3B04AA5AD2C4F0B31096AEB53F4BEE86231844B50E0341CEFB6D5FAC4332646679EACD1D0D2386A9A59FACD4AC12921C24A080B1C161CD24FADF1B2BB9CA933921494853948000239DDC97F6CD151527158AC424A4AC242EBE63A73FC345B796690D3D90B09AFD50A45555C05B68BC0526F109907E1D3DFCFB1737118BC4998952D48E3372AA5580772FBBBF95A2F5875265E184B27E7296A80F47D34EA35F44B9F6B2A8AE0C50D2B41BA06F8D14CB6CF006D077E2E10999B7DAB75DB13D95CBC261B8A7CC03BC980099C5524A4101817029A8BE9568AD4FC1E2A6CFE21C5C014E1BC4D34F77A9784B8E3C1F0DB6B72A9D70C70B7C52924F3299D846F3D622E5FCEC5485281484B519A81AD7F3A5045EB275CAC34B4A2704B902EC7424FE3E9BC58F90E81AF75BFE259BBA9A3CB602DE715C2A7109DE128FF88B9D8C030664E21339ED0A30F2D586904F785268976700EA0303AFF22233B438B44C9F27B9E1090A62D5A53C6F5DAEF6898399DE9FCA194D1E94A0EFDE309566DC2A52F8A409FABAD2A32488B72BE39F65AB9B8C9F34CE9C4A492482AB55C7CC4D3D3C19A1C66186C24EC24A2A9C996AE0A92D570FBD74AB0E5A339655A673BCD07D6F52D7C65EF0E26B8949417920DC774950537C361B49911B1C37CEF0CBC54F1230C851EEC8E352412002037CC28AB5DCF50042DD9CCAB2CE19AB9B8D965C5124A5F5A371120F2EA7585359A8E9B4F28E55903086A980E15D42871957532E5F73C8EDE78B4E51D9996AC27793D4AE34A5D280EEE41D9B9162348AF768A4C9938B47E9A7A540289201150FB8366A5F95223158F1CD1C52A9C3B53528238D0952F856A5ED00022D3CB7F29C3695227E0674C13414A41F9490051B525B98D2369C50B912C149058B3D74E61AA36B73A3C8B25D159916C667AA6A92C65691C69A2942145226CA285070C98DC6C79E1BCFCC4AE67712945531F404A438FF0090A1A6C74DE23BBA0012452C2F5AB3D6DEED78DF5FA8F26A40963226C36CB414145208593112A52BC44C89B9C38C3C99EB09131454A2CEE1C1F3F00F71F56137E42A2091B1777636F7D6D4101CDF55B8B90B5156FF0068CFDFB79EC36C5AF2FCB52B002E502555228CE395BF35B4305AA6EB3157BF9B0BD2FE3E1100AED4C9511C64240E28D87C36F9F4E98B7E0F2B4253C294840236AE8C6C37D0FDA23D52B1137198758528252A0540BB2AA3C3ABC42B35D4CD99977C239050006FB41FC39EE312B96646A52D4E93C2F4241E7607E9B3523A6E3F1386958194C8485F08726EEC1EFA9F0E9726BACD751B6784A5D2278A7C647A7300EC63D2D7C5CB099294948E0F9410E0A76B7BDCEF11996CF958B97380482A4A5836E41F33D0D6E62BECC73D016497491267C66E26799803A7511EFB449C0012EA803421BD34BEAF6715B452733C24E46352A4F184859A6843F56DDFAD2B10CAFCFD2A20A5E3CC471458ED3CCEF6368E932313380CB93F334B00534A8F4B8BEB16F12C0C34B2470AB87CFF00C9D1FCCB3C72AB3C041FE7122F038CFE727F1BD8DCE2764E5E0542075007833D3A8D28CD68D00510351B5BDBE86AD11DADCE92A2901C2626E556B8DB97DF389291800E494826971D3D4E9A52D0B212096D05C75B577E4F0C2FE6E9B8EF0C8907C47EFB8BD80FC30F9182096F901A12C45697723A3FD68C21CA659507B253B877360DD3D986E566817B393BF3B01BDED249F2E7F3752F08003F280C6D46E9BD3FCEA61544B4921C13BDF6E51A1CCC904005C1CC8827F318553866D007E87DFA9BC2DDD207F68FC7B6D6B081DCC900CF1C5C8E511F1BFEFDCB0C3A3500F4FF00023532050D4036603DFD3531ABF89A3FE67DDFF763612258B068D7B81FF23E5182F366D304AF6E7E667CE22206FBE37FD089E93F2920820330E7B6FAFDC08732D80EEF878B8A8E0506CFB0D2E3D04708CDDB5184ACDFA9B0F53F95C93388F3D9E0999DEA945DDD9B47D6A7C2EECD08E2BB3C427BF132AAF9C241AB01D76E6232733147085779F3B9F77CA6FCB71872BCB4CE0100708662406BD09D0FD39B5619E1A64C4FFB2A964B1E106951636DC55F42F66781ACDD04C0548039288BC5BF1EB6EB8424640308B334AD4A51735A00FA5F6B7D7589BFF4542657EA0CC0EDC412CE6AE483D3F9856C57000A8BA46DB133D7D48F5B8C6715844E29065A2E2F4B3353404BFAEB48ABE3A64D9B31294A58254D66074D28FE62B5B557B79924812B320F3511F1826E2C6E6FEF386D86C0F7482820716A2AE0396D2A3F1168C9CA12825601F946BAEE5FED7E6D0F9439A24260ACC7FEA3D6D6F758CDFD6062A1DADC02D430E65820F128A881CF561D7EAC62333A50AF754D4B56AD43F4F6D0FECE6D0532E1B40B289036FC87CC72C39C0604A7088F943B397DF4B83E15D75884CB92A5CC2555622E79EA2E7F160CCD25A4CD53F694E9D8589DBCEC418DE399EBBE19CDC2B4D989090D4F3AFABF96D58B062A48084828D9F57736FA1A75DE25F9766A92412EC8B58C1F84FE5F9E22F158321D9246DE7BEFEC0AB06A895F351343CF93EEFEEA369652D7B6A0003CC4DF7B8F744131BC7CB1018AC3109502284353DD8EC2BA8A43F961980B0B8B6EDCBA6DEA7B219EEAB6E95A5FD62B0F0806C571EBCEDF87AC1C72BC364431A383B8097A12C1ABB9603936E213329C38A0BFF817E7B34509AABB4FC8B2921C6EB5282AE3E200970A88D801E254CF48FBB13384EC54B94A0B52425AA03020D5CFA7D1ED1852284804DADA55AAFBFBD5A98CCBB5ACFF00523A6834D52D5D53CB3C083DCBA841262095291C31026E408DF7BDA70E8C0E5AC26A524A06AC2DB780E605232A94A007C8DC562EED67A7F35D233A0EC93B5CD48976AF515635A7A8442D9529DA6796F21775F842C2D25201DFDD87A3B7B9660D6654AC08C42D343721F467497A11AD76891C3144A523BC20F17200FA8FB574A3337E61D99766590A8AF54EAA566D5693E3A5E07D94A9437485A16537DA45B99B4E2532FED1E6F9DA972B2FCACC94AE9DEA48F945DD8A6BB7D22E9829B2152E8D50DC3EEE3E9F46AFF13F649A51B7579369168D414CA2A9CAE5BC5C52365869DE28F3040BE37C4762F3DC462A54EC4E2662F88BB04B04837143CEEE6C4C31CC70A99C7FDB04390CCF770EE6FD0559F68ADB3CF683CC909AC5E5E28E99B69486E998FA95328A78CF008516E7722E76BF58C5F51D91CB30180188C7198E99654B3DFCC40E24A5C538DAFCBAB5838CAB26C4CF530043B3029A9028EF5EB6FE7BE5D867B04FB587B54F665936BFD1144AABCBF35EFD65D69DA461BE14BA529E1515A4288023C33067AC63C6FF0012FF00A98EC8FC38CDE7652BC5A0622528A4CB215319AB555454784770EC87C1FCC7B4B2FBC9485814F980671E8D51FC459751F429FB6CD45452B4F65D54D31DEA4BE456529051C60AB67B98B48EBEFC5070BFD73F64BB95A573D05C3026517773AF07BA458B35FE9CF374AD053C6F6142D701D9F5ABFADE3D1DECBFE8BAEDDBB30D1D4995E4795AC6639B3406A2AB5BCC2DC694CDDA8EF16A32A25425044F4338E2BDB5FEAC7B399EE6527101626092B265B9525290A6770C0286DB1DAD133967F4E59AA3018842B8D948621AA684DDDE8F60F6D68F49EBBF649ED5F48769DA6742E7D95139CEB535634C294E324BAAA26B8EAE405148DEDC660D809938B8647FD47E418ACB674EE20512509EF439B90426C059BABBC79E7B4FFD3AE689CE25A5D65E691FB08FEE6707E9A3D445AB4BF46CFB42D49425ECA96D0A920BA0394E4348DD3052ABCA6F6F43B628B3BFA9BC9938B5CC1352895C44035B24B7ED6E46F78E8723FA6ACCD78592172D7314100D53472295FA9BB7888B7B25FA3E7B5BD1D4119564FF005DCD5D480B2B5B03855104F8C916079100C5F0AE69FD4A767333C2A513310489696484F125C9A87600383BD2D4D636C2FF004F58FC3CE32D724872CDC20B8D03D7DF9C573AB7E8FAF68259733472856DD3298A9AACDA5C615DCA699B53AD0482A9B84C7839D8CF3A8E5DF1E32C9D984A0AC50095CC4A5142CE4802CF476BB5EBAB4BE3BE044FC2E11734C83F2A492E8B53EBAF2B39B4744F2EECD7501A8CCAAB523BDDD0D3551A7714A292AFF2EF29920A428AF7411CFD71EBBECEF6E138BC04AE01C4B9B2819600DD2FC4ED4F2D3908F3F768BB1C8C04F54B5B009514970D50762E7CC7D627398E63419027EA790D334964A10972A470852884813E283636DF9623B1B8FC5E2672153D478CACFCA280026D60F436BE94D6B53728918596B52784FCAEEC36BBDCEFE1B56203579AA5F59FAD2D55255B24491799802474D8751B5B173C065F2D7850B253C5C37200D9CBF56DCEFAC51B138952311C01C241621C806A1ABF7AB6BBC2FC9B4A6739FA9C396B4A6B2F4149AD5BA9EEC2127EC96FBD00AC58CF0131BF4C54B37C48C24E1282C3AC901296502C6AE4394D09201009D00B45C30064AE4B9090403767B0E5F48B532B4767BA3592D102BB3822E9521D514B906627893BF4076F53886188C66266097DEF75243712A84A86A286E6A09B51E915DCE731FD33940248240009607951BA73E6D1853516A1D615AA7D2E2B2FCBA9552DAD5C21086D7BFF002CF0F78142C2C626D18639B63158541938792672A6063303922E2AC091D7AEF15CC3663331934959258B81A07D68D600D0FA3B89AF0698D2D4E56C5334FE6FC278F3499471C183F5720A01E5B743BC1C4365D819C95F7D3B8932D45D726A14AD5B881A35ED53A6CEF33C262B3195DDE1E72D2A01833967ADC569ADEFB88ACF33CE2B3317D6E5456283DC47EA8A49E04BE09F100DA4A528E110088E5318B4CACFE46101C3CACBC84964925D4A0DAB94B91AD7C394060FB2F9CC8529671B3B84D59D41C07A5FC8D3D5A0A5C83526A501971AEE196E097C70994820CC88B408DE60C1F39FC267B83C220CE501C4A0590FA9B86D0BEE2FA343B3956324CD42E6CE5AD94092A2FAD6E59B975E5135A77B2BD254EDB3488455E6CD24F79C5B2957224AA5361F740E78AFE27319B9CCE99C492251344F0B1AE8EDCAE0DFAD2CE71495C9972825949001377207F1B7E62079FEADACCD5E2ED5552997D3B5189088B08E2042222E3A89C39C1654785294228F43725DCDEEE1FEB5308124B925CF3E7B69CE20799EA4A5612820043EA90FA7886FC8CDC13CB9F9EF8B7E03252A524A935A55BC0D5C3FF30D4827881AD68F773FCF8DEF15FE6DAB1A1C44293BC0F101B9F2B8FC63D062F797E48470B259AF4FAD74F65A1232DC07152FD1BAB50DFCAF48AD33DD521CEEC36EA418513E21279D8137B6F63E6631273302A9588C3A384B2D55A74BB35C1D3A8112D9765C898854D203A6ACDB68F6F0B6A62B2CD753B8B2A0974285C1215BC7483CBE5E7B63A461B2F9186972D53120384DC35C36ACF43CBAD0C46666B9B3C2D087570529CAD61BF3FBC40EB351BA54415CC722BDA3AF3FDFA9167C365F2972C2D0010402384392FD1F573F8A46BD9533533D52D692C540317B3DAB7BB50DF42C222798EA074951EF02A761C516DF91DF636E9B6109582519CB41140450587B6FF348B567995210A93338402AAD03EDA003DDD8C44DFCF5D244AF7079DA7EE9371FB8C5AB0780EE9344B95004783BBD0BEF7109AE4714B4252C03063C837D3D5A186B33C74AACA2520112153EE1D27D2F7E5B4ACBC1AADC229C8F4D05858EF51D124E1406E2A91AF95181E5E3CA19979BB8A90A5445C5FC8F9C74E62DD36C3C460CA4B101EF4FAB51A95DFAD4C3A97877341437A7F3EB0DF519BAA6CB85007FAB7B7AC7422FD075C3B4614901869F96D7DEFAC3A12000346BDF573BF88AFD2A959CD5C5154ACC0E40FE33E44EE4018752F0459CD01F60D6BE1D616461F4097D6B46E752F4FBD0462E664AFEE5DA62F1F8DFDDBE161826B26D46625C697FA53D046E70E59CA03757F1BD3C5A123B9829444A95F133CF19FD116A20F93FD49BFA368F5C770FFD8EDE2DEB1A85728FF52EDB9981F3FCF18FD1285D247FFA47DC08C19005E581D7FCC62AAA539CC9888337F7F23B7C2FCE709CCC44BC1944A586E270E457F1AB75A68D0BCB4265A492900914047A83A50EE2F7BC02ACA08014491B9076E77106F1D63EFC48A1099C90A0C41A8E6799A6E2FAE9681299D354000A52491462CDD756F61E35BB982D447888BC448BF49DB9F90DF0D1139026141961206B7048FA0D776F387F3B2E912A57794E221D98120F9BD6DB73856C3EA4A544ABC46F79F8F9EF617116E9853152D465ABBB62520B10D40472F7AC442FBC532524948705B67EB407939FB70ACD5482471F0DC820AA0D89E46E3DFF007401179361A64C9738CD4170A277B13E54FCB40BCB810998104F139701F913B52CE2D0EACE66B21104C9DA3981B91E97F3B79E1A6608561710084FEE34DCB03777D3C29A3C3544B5E1C28005B7D00DBC2961E20830EAD666E20825563E640B4F537F873BCE1BE232F4E3D09F95DAACCF5FAE9CFD68C710833ECE6C4DCBF81A79EDD19EA97355909E254CF98DE663CFD26DF18D3F41DC4B292914140DBD35D687CFC94C1604A5567259CF2AB1A8B575A8DDA2434D9A2B652FED6C26F6EB11163B5BE2710EBC110B52B86A76A86B0B1B736DC6B594C4C970070B90CD5FBB816160695A0897E599A2E5202FA589DFE307F1C4662B04A20921CB5473D77E85F9814868249492FF002BB102FEB6F7B3458393E64A58582AB2787FAC1FBFDF7E5CE3158C661BFEC2F5F99ADE15D7A575AC2A896439BD9852AC4BEB1AA95BED3BB4FABEEA8D87E8E8DC5417950070C6F0A026C3CEF3BE2898C9F86CAD049280946819C54B52EFF61E6A892AA0B3EDA791A7E62C7A0EC034D64094661DA0E6C9AD7C80E53305C20A08BAC10DAC83E844748B6206676B26E2499584415D6ABAA7836A1BBDAFD79EE24F0A5492C4534AD399AD1ADFE21C337D75A5B4C512E8B48B5474CA690529714CB6A5981B853A8E29F7CDC1C3CC364F8DCDC714E0B592494B3A58DAC3E9D7A46BC0EE52E0747B5ABA30D472B475AF51F6C59AA96F2330A9714B54FD58A1E5251CC2A1283C207AF96F8BFE43D84537793A4F11A28F121CD37D69D4EDD59CFC3CF5AD250E438AFA5B93781A36FD6DD55AFABAB5E73EB4D2DF4A8F857DE1B0246F17239C4F43EBDA7B23904AC2A4A512932CBFEE2069C8B52F5163CAD6DCA708B0904A8956A2BA695A3F5A54ED15C6639A3CD394D58BCD3B84A43850C4779F68006402608F39BF96D7D3819331425094028302A34E27346068D7A5A2DB86C38580172DC9E16511FB18EC68417F30D488857EA6CB154F507EB1F58AC514F842549248513204401CE7D7A62A7DBDECC77F92E289C40C30EE54CAE2BFCA6A5886F16F48EB9D92C9F0D3D72C280D2AC391A5F60DA72B47E80DF413E62DE61F47FF0064E92D04BED8CEBBD709971415992C2428993610624F4B5B1F9B9FEA872F9B967C4CCF659C519E81353C0B27E5A26C1C90EFE7A47B93E15E5F87C160125084A8D2C91CF46DB773473B47B3A0212121490BDE2C3CBCA4F203D27738F33489C661583352E08A3B372BFB6DE3A6E63DD95A099009E497722CF46DADBEF53AEB94534C5688111E1005EF1BF972B73C45E284C9988969188FEE70CDB8D8DFCAB611218432C4951320370A87084835E122AC3CDED48F25BDAB2B6BBFFC5E7B3204B24203FA9803C3B4D322796F020FC71DE3B31842BC927A913C02657CC2F50926B6E82D51CABC1FB50A9433843E0C319AE0B3595436D77FABC7AB54E7868284A129054C3455E1927C099E53F198F2DF1C2F379B8C958F98254C51489847083407888D7DDC476BC8F0D859D97CA54C9284932D2C0A43DB524736AEBBC2E14EC8325092B804D85CC5BC85B903EE8C4A499D3D5201571061B9A96F0D796BA188E9D81C01C67089681534606CE76DCFE221FAF1B791A6B3BA86929E16B26CD14E3600F19144F70DE0C41BC5C6263229AF8AC3A66A8F12B1128A0D411FEE0241B1F173F730DDB6C1E1B0F934F9D2A5241125668904512696DDFC0C7C74EAAD78F54E7BA8E85D2AA7E0CE730484892920573C36063D3A5B9463EB17C2DC189F9560F8940FFB32D9D8FF006063BFDC9A88F8FF00F15FB55FA4CE3112C0349CB000A37CDEEDE1486BA4CA737D595F4F4F44DB8780F0F72A96D3565C8BF784009E1113E2C745CE30586C1CA56257313FED8E23C243F9024B1D5A9CC473BC1E74BCD148929155B301FF00736BF6E717552765234BD3B75F9DE4B505D653C6DB050EAD92A5899FAD2525B3C8DCF5F7F3F5FC43C221472F958D4495717013C40A85588E17DAACC0EB68B3CFEC362E64838B3216470F1F10496B3D4FD47942456619FE7B52D653434DF51A7A7E24B25A42528602A64ADC484A5E9E8A51E1B6D189B09C0FE8E6637BD0B9B39214B593C5C647ED29492787C39C73A9D8D9F84C5FE94B8659480EC4176F176B7D3495E4DA0E93295A733CE72F7350D7892EA69D2E28B4A3211C4194AC1DC6F698B6397E6FDAC95809CA9499E996A0AB93A38DF96B70E6F17DC0F62B159EE1FBD44952F892FF00B5EFD0381C9FC18D63BAA6BB33A52F36285DCB929FF84C10A6D6DA0C9F1029413E188E2FBB1D0BB199A65F9C4BE35AE59596FDC52A0A7A30AD35A6B15ECCFB233F20528CF94521C9A829147D2FF626FAC41D9CE93528465C285FCC2BEB894B496CB8A51524F2080A1CC4DFE76C5833C9596E5E8562A6E224C99680E949524F16BFF2046F60748D3229189C4CDE091215398B3004DF981A0EB4A0DA27F94F6579952B4C669AB296A68D2EA92ACA2816CB8555414A1DE0052906DE1DC1EBB639D27B7B93E2272F092FB92CE933810784876241BBB72D758B566395E6D864248CBA77090C7E45077F0BD28D485FAF2B339D26C50D3D2D3D569CA5AA491DFB94AE3A1C4881214E204483D441331CF1BE1E6E0313350B463E54CE253F0256950AE84051DDAA2DA4404ECBB16A92B33B08B96C29C40D05DEA01B7F9ABC52BA87508CB5483F5AFAD3AF24A9CA82384AD452083C3B02276E73B6D8EB192659271B2E5F772D20331501C54F01CBDD445352489D312F54A99A8FE1AF3F08A773CD646566403C8CF999D8833CAFE7B62F597F66CF106451C3A9835F636DD85DE1624E9E5BFBF22D5D08ABB36D53F598E2708E19BF15CF3BDC7588C5F703D9E4CB0974D5AA1AB50CFD4302F4D61CA5254453AB69D3D748AF735D4083C52E1EB1C4479723BDBA7E0459F0B94A5000096AD9AAF46A9F51E5A0859325C907A3EAFC86BA7BBC12B73F68B88594778A01690F178A031C40832926153CB7239DB1B4CCA0CCC5E1D610084A9DAE28DB126BF8D5A27F0004AC1CF0402AE1B9069422C76A5BC225DD957613DAE76E4C6A66BB23D3CEEA9AFD32AA75D586AA50CF748AC2A578B8C904700306F611BE28DF1A7E20657D8691949C7CF460A6630284A429871776520B10D5F017D5A935F0FF00B213BB4D371E65CA54D12880CC4E86DE5A7A5E2A0ED234A6A9ECCF5256E92D6B96AB28D4D96142731A353E1D5214E242D01412400384F2DCC1BC63A07C21ED3E1BB5F942F15879A99C829470A8317770C0FA59C6ADAE734ECA2F20CC528992CCB06654314D9B5F3E5A456157992493E2DC5AFF0018F5F2F3DA71D6F0D94A44D9930A5C1219EB6B7AD6A5B5BBC63B440A9186421AC28FC853DD7EEC6EE6095ECA262473B4F5E5D45883C84626E5609291448716E54DDFCBFC4472243CA4921E8ED5E5D1DF52417D4B59ADEAC02615D64933F21F77A83E4E9184A82534B966FB9AF56E70A230E285827A56DBD6FB3F5867A8AB4920F175D89B8163791E9704FB8CE1E4BC182430706E763CAE6E21D4BC33800077D68D47AB1B7BAC372EAC6FC4608224EDD391803D7E18708C154B80E19DCFF3434E7A43A1863F2B33694F47AB1A7836CD1ADBAC4A64F11B98DF90F79E7875FA5E160DE94A575377D7F98728C2392784BB6DCEBAD2BA6958E175A08038E7717206FBC926FEE8C6C9C3D4FCBEFC2BF6854E149B20BEAFB741BB743091CCC1488EEC933B9E5E5CCFE07CB0A8C3B8A8D742DF5F41A78C6461535E2A7D69E3CCEB78D5FC51FEB1EE18CFE993AA5FA91F983F4A8AB971D2B4B5493E8D0E1495DC6CBAF39501A5330024A67BC0B3004F2F5F7629FDA0C1A5536532C4B636B95390481A3F87DA18E230C7BD972D128CC4CC77502C11C350E357BB3E94A9A6972ADB5FD692D3A9A3701680A92A0E719598F0B64C6C48D8F2E58C62E72725C21C4E226F04A4A38895960400F724742DB30D00E83D9CC8862F0DC265712D88059F90637B30229BEC0595A6FB32D55A9F2ECCAB729CAB32ACA3C99943D5D99268AA4310E24AD04ABBBE048B45947DF0239D4AF8A7D9AC6E3D3814E3F0DDFA97C28477A80B2A70FC20A9CB78DCC2799F6233390B33132D66597247012002F5D74E86915A8CD2B5C72A51564D1AE956A69B70A78CACA1452A1C02F3298163E831D6A41972B069C54C295485238CA8AC335DC9A7F2D6D4B5C1F644CCF9420AD6A241604104E9677E4DB44F74B767FA9F57E5B579B655A7B33CD90C20BB595C9A5AA699A64B61452A24B45A5029178200FBB94E7BF18BB39946612B2EC2E370C674D982594098877E262C389DDDFC9EC4C4F0EC2E324CA066CB522500AE005069A9A8A914D6D5862A2AA4512E9DDA9571B8D2AA1B5B1B290A6CA9041024CA488BEF1E78E8786E1CEF069C62450A02D2A1FB4821CB69C874A450F39C957852A48B28906837FE6A07D840D6726ACAE4F025B24A5237B93631723DD699DF1A6580778B92AFDC0B01D1DE86956BB5DCDA2BE32C095213FB9CEDB11D79B72F0872A7AE91E9E67EEDF6B74E73D5FE2B0CE8259F930EB4F643E90F4E0061C0570D5AA6E3C5EC6E7D22434398250492A2640B93B46FBDF975FC0E20CE1DC9252C4934059BDFE68290C8A4CC253A0D2953B8AFDF9F496D06669041E2BDA21476F8EDF7EFE586389C30AD03D6AD4BFB6A168D152002771A558F377FBFDDA6995E6A94A95E3224833C47CB6BFE43CF6C55F1984624A8380E053EB4D39E90D94185410A0F4AD7A731EEB48EEFEA4D77479252AF2ED2EC314A96D250A791DD83000BF88024983B6C7CED8F2FE5F2B159ACEE2C5256A5ACFF00738034B160586A767021D9E15324103503DF58EAE6AED6A97D6971FCC5EACAD1C64B3C4B09428EF1E2298B721237E738EBBD9EEC22310D366A42258296200A825BC5A8C45EB58D84924EB7DABEFEBA0A18EBB6A8D522BD4B4BEE2E98A49809528CF99E1D86D73C84D8C476BC9BB2F84C0CB4A932D130001D4A6480DB0259DF97A429FA550A31074E7BF4D5B72F78A8736CCEB9D5B4C37DE55074A934EB6817140CC1909E2373D7CF718B94B5E53859478E74894784BA0A904D05831D0D1EBCDA2CF91E5986C413FA852659A37151DF968F4D236E4FD96F6B9A9DE42729A15AA85D23C6F06D9E14AA2E7BE00C409EA7A6D8A3665DB8C264EB599684CE0825B816C684B38483ADA8CD56117C9794E0A4CB79650A0055A8F461F5A569D69169D1FB2556B259CC3576AA6B2A091C4E5325B6EABBC9890436E1E189FEDBC8E98A663FE3263D73E5093819894F1101B88155280FCB6E76035BC45CCC74B9426489412A3C4385419C005C80CE4BFAD75A0794763DD87E9FCC5A7334A819C901417097D89213127849893B1DAE7A5A37B5BDB0CEB3DC8B1457266E18092A62144B82935A00CCCED4E82B16DECE674AC22E58528A7898026868DFC0A53CA3EE03E86DA1D2543EC5FA019D1F972B2EA39CD4477AE3A14057AE08EF0DAFD2C2DCB1F017FA8F38D9FDB8CD25E2F11DE244CFF6A802925892E412A3CB88B801C56B1EF1F837987EA700389355004A8B905C13FE45FABC7ACA84A9284C99266474B8EB279CC4FCF1E5D9397CF13261134A413B9AED7FAF5A476AC5CF4861C1C4776B0E8DAB7DEF0933104A50A0762094A60D8103AFDC0F4E738DA4E0569C54B0B98684B924D6ECD5DF61A7587B839D2CA1654001C35A5A87F9DDAEF48F33BDA9ABF2F4FB577B32B6E368EFBBDD4BC20800ABFCB372424DCC0E9CB7E98EF9D90C2CC392E604ACB2658E100D4D0DAAE7ADE388F6AB17874E71292A97FF00E630346FDC2A36F623D30A31C6CD3AA3C219660721FCA4C5B9CDBF1C7259B2509C6E256A524A8CC3C2EDFF00222DBFDFC23AEE5B342F2D9440E11DDF9B871F9F17E71B908714F49802E77E97F81DFE6061CAD52C4A60CE41A02CE1BFC7973AD6E5C9C4AB1C5452A090B2C482C2A77FF3D4888E6B2E3774AEA26511DF2F26CD12D091E22285F88E5BFC46F8DF2B9DC18FC299859A721A97216920817F5AD3AC3FED6611589C871A07EF4E1D756FFB0E9E6E7E8098F90FA6ECDA9EA7516A6CD357A90C3633BCC56D78924280AEA8200283D2279DCF4C7D2EF869DA6C5CACB30DC1296DDD203D69F2800DAAC757BC7C4BF8C792255DA1C50E2048C42C5F751D743F4D9EB0E8EE76D51D7B74FA66943CCE5EE35C4C349F155265370E04F123840B998DE77C755FF534E272EC7E2312A2B9E994BEEF8C90124A486E13436614A748AD64395230D9865E388042A6238CDC5D37D1A95D478D7DD6EC934769FED6FD96E82B337C929575AEE5B5AB7A987766A5B5529594F13E91DE8928B49079729C7CDDED676B731CABB6D394A339027E300487504B05B0205850B9661E71F47724EC46599C762A64DC22A5CF9C8C239084A5441E07A90E0171CCF311E2EEA7CFC653599E69EC969052A72EAAA969D4148EF29D21D73861C52429C2A026C48000EB18F76763710ACC7B392B309DC6168C2F15492144CB35634A31E6795447CD3EDD65389CB7B5E70AA92A42558C290188FF00F319B9F869ADE3D58FA3C3B28CA33AECE6BF5BEA2A76733467A406175C84A52834CF2DA50497A5224DADCE37B63C55F157B6389C3E73324E1714501135695B176F9A9A1F1711F48FE057C3CC366191CAC462B0E95F14A41495258074814D76AFD691D5CFA403B28CDF24ED3720A9D3540D51E4DA8BEB7F5B094B6DB4D2699A4849E22129209322201F3C760F81F9FCFCC30AA973318A54C40485A8124BA8D280DC78D7CA391FF531D8D9191F02F0B2C251F31570A40A029ABF4AD746B8887FB20F66D91D476B9A4F2FCC6859CD65756AA84A825C4A0A5A2B4F1C71A45C5A472816C4EFC699F9865D951C4A7319A014FCA975077206A473A8D2F1CD3E036024E6B9870CBC1A715C0B4F79404258D5FE53A0AD7AB5045D1EDE1DA9E96ECEBB5CEC972CA3A0A5A5CA74EBB5EAD48865B42B81B710D2E9F8D9420A956981C2666D8E19D83C266F9B23133CE266290B4A9D64A884B850DCDDDEF4A9348F58F6C256478491264FFA6C94AD80092948515001EE01BFE2D48EB97B607B5EF62DDA7685CBB28D06C37519BD2D3210E3832E76894D38037C652A718471EC762769E77EF3F073E1B6759A6638B9AAC74C9B2913905BBC2B48471925FE62D4E8ED68F3F7C431809981693804619625AC06481C6480DFDA34634DDAB68F22739D68BAB6D0E0A97EADC1DE175A4D33884B026C0391C2B1020F0CC45F79C7BFFB3D84C9F2597FA5C462E4255292848599882A5961C4384AFE562750E4C78F8767F375E3311311859AB965648012A00004EA017E474F28AAF35D4B59561468E96AAA409934EC3AF8B1DBF94857A72DA0F41D07099B767247089B99E1D0542814A46875756FD7CE26B0FD94CFA785775974F98CD6428EF7F969E3E1159E61A8AA0294D3A87699E132DBE95B2B3E5C0E2524C499F4BD862F395E2328C6B1C262E4CE701B8549376D028DDA8FE71BCFC8733C00FF00E6F0B370E752A490EDC940575D85DACF09CDF3DA8209E3299B03313E9B4CF31E91899C5FE932F94666216994801F894C186A5DC7D5B5D042984CBF1189253265296AA330249F2D0D869E31147EB2B5E6BBC3956695C82470FD5A96ADC41837975A6CA52204DD5D205A04049ED7764D13C22666D8497312AE101531018920070577EB4899576673DEED43F433D12D49AABBA5916A5386DCFF0088FA24FF00C3F34FFC4F38F69DEF288501A4A6D32426A521C5A78A9DE3F65E128248E8279EC4E3E6C7F5FBDA5C0E3335EC649C163538D4C95E278D522604865AA5900842AADB97F3B7AD7FA5DECB9948CD5799A4A030215365F0E8AA7CC0077F2EAE23C90FA4F9F799F6D1ED756B1C2555196A65238504229624204045A2605EE4E3D39FD1162A7627213278569C3A254A290B51506A93F329F9EAD63AC56BE39E5584959AA7F4265CC5198A7086705E96BD741EA1A3CFB62A6AAA96B14ECBF544D9229D972A15249E4D25667CA3F1C7BB3199FE43810462730C348EEDF8B8E621268F4AA9361E6F1C1734C9F3198A93C7849C525B80842D4EE06C08D75DA123D499CD2F78E55E5799D2B523C5534354C220EC789D6D222F3BFBCCDE1307F11BB1588C51C3CBCF708B9A5410940992C9772187CFE6DE10F53D97CDD3290AFD0CF08E176521428C1B4766360073B4332EA9D75410D256B52E7850D852D4A22660264FC26224C62ED3331CBF0D253899B88968C3A805A6628865248705C9666E7E17847FD1F1B2D410AC3AD2A51FDBC25DDF52DE97F186EAA5D43062A1B758528F843C85B73D63BC026046D244EF8532ACF327CD57DDE5F8C953D4925C2169241ABBB13F4B36D0FD792E370C90A9D8698806A92524537A86DAAFBD748481C71E3C0CA5C79667C2DA14B51F720127A9306D7EB896C663307974B13719391211565AC8F17A8F74D61F61320CCF1C954CC361664D4A3F7292951677BB258D053ED78D2E9A964F0B8CBAD2B925D6D4857C160131CEC7E186D97E7D93666B28C163E4CF502C52852491D589FA427FE9D8996A32D72D499828A0526EE69B0F7CE13A5558F71772D3EEF0DD61A69C584FFEAE049299E40C4F2C3AC666795E585031B8A9520ACB242D690F6B3900D4EC5EB5348772F25C74D415A30D316848752824F08BD7F6BB53F98D68A9712EF74A4385E5FD96D2DAD4E123786E0A8FB87CB0D319DA3C87052933B139848932D41C294B400433EFEDE12939662F1333BA91216A5A4F094A52A517766A5AADD7CA1CCD2E6E96FBE5E519AA59DFBD396D586E3AF7859E1F3DF11586EDD76471733BAC3E75849B3096094CD412EEDA178959FD8FCFF0D2FBD9D97CF972D9F8952D6CCCEF61A08D2DD653394D52D5532424800B8A25B2D284C4A6CAB9226622DB8B61CE6B81C3E3A4A71D22705F7693351C350A08054E5A961476DB788FC160CAB12996B4578825448B0763D3A781E7ED87D1C5F46D7651ED01A2D1DAD76D5AE32BCAF4AD3B89A84D1D656314EA7514EF10524FD65A7374581078B90BC1F9A5FD527F5419DE4017D9AC9B289F8A9C53364A972F8C04708677082F67BBD3C63D37F0FBB2194A9289D331929165709625CB96297D6DD23E8A352763BECDDA0BD8D7B435762D94652FE4C9C86A1A7B3A453B6F2AA1746D3EDA16DBCF214A212E20DDB70C8E626FF363B07DBCED3E63F12726CC733C5E310538A9B351853366A59D5C452A4F1071703886CC184764CCBB37835E5AB972F08853240337841715AD459B5F5BC7CE37D1D3EC0BD9C7B4E506AAED5FB5CED2B2BC9F4A6439EE60E1A2AE14F4A5D6D19A54A3BB014FB4E2802D40213B444E3E907C52FEABFB4DD9AECAE5D91E4DD9EC4E3F159AE0E64B13E5A9694CBEE258E251504101C56A43E95B50324EC4E469C619B89C6C99650B1FEDAB841249B00F4AF237D9E3E9B321F67CF66FD2BEC9FAAEAFB23C9F24CE3237B4D66ED8CE986987455B941495282B4B8A42D40A5D41921773D6063E6164DF157B5DDA0F899819B9862317215FEA282252D7308495CE4F121A80B3B07A8F37E87DA3ECCE00E4CB99859289A132DF8D207CAD7AB5776DF5A47E7EB99553CAD5DA81FA670AD946A3CF5A4B53E14A5BCCAA5B09126200004011D06C31FA51F85AB389EC06553B17F2CC9D8294A73534969F534A3B11D23C5FDB3C261E54F9C94949505101340CC5BCB4D3ADDD61A9E179C360A20152428409120743783F3DF0D64CE50CDA62250E24998C4836A9B36F5F50D578E6D2240E30E011FDA4EB537A68DF4BC2EA5AD22C5422473E91B19FDF3DF17B9D870653B7F66CE6CFCABE5BBDE15CC30EA4C8701C0069D28F4FCDAD687715CA44428136BCC6DB72B72B73B46D18ABC896A993660092C341AFDC59ACC1BC62B3224BAD4EF7DBDFB2D787EA0CC9700C9E5CF6E5204D8F4F913CCC46195574B06EB7AB81AF8E9CC18DD72D9C1A8FA3F5BDEE225B419A2E6EBFEDD95B79DBDE3DFD6715AC7619469C06AE280F4FF01C5BAB329A9B38FF00D5CEB4B794762B54E6C071A83A41333E237F58DBA5EF7DE71C7A565D225E253C12921883448152281C6D51B4339649559857C6F7DAAD7D6281CFF365B6EB4FB0A9711DE44999E4678A6C7AF58C769ECFE110BC1842C3215C2EC360E2CDE21CED13786AF8375E9EBD1B5178A7EBB33ABCC332397B6477F5B534F4EA240801D712824721014762248DF125DA5E2C2E54461D4A4044B515106AC2B73CAA7D889895278A6254A4FC86C79B0E5A901AC3AD63BE792F641A23B2BCAB2CA9CD69855E76ED326AB89D4AD694ADD6D2E8B282907EDCF3DA48031E5F38ECCB35C73E1B1737F4FDEA90085AABF310AA39208E7F888CCD676264CE0B0B29516A804381414040EA79B934AC573AED1B387EA1C6A90B34797A014A034869A21116FB294AB94FAEF8EB196F667032A44B99350A9B3D41255C4B591C4C0BB17162697DAD161C063316BC1CC2A9A543828EEE457C6CEFCBA5285CF359E62BAEA86E81D76A5E724A94BA8500929499E14AD445FC85E3DD8B22B29CBD6A92956165A96183809716636ADA9EDA23275CD5E3546628A92A5901DCB876677E74F3A98AD6B350D7BB46E2EAEA453BEEBED0727857094BC018BF4990236DB1359E76764CCECFE365230E90A561A6540AA7E451156AD3DE9178C405CBC5E0FBB0CEA4B80F40E9A96F36F311F6FF00F44CFB487627A07D8CBB31C8339D5749499930D6646A43A8292A5AEB0AC0054A093626627CF1F9D6FEA4BB1B9D49F8859DCF5C92705371044859500ECE08FF0095F4E4C358F7CFC27CD64E5B92E1C14FFB9DD8E335776A58789FE5A3D3C67DAE7B07A893FE35A0513B789223FF00783D368C79E667657311C24E1C8059994039DE86DC8C75D91DAA91312B2A092C39967F06F7CDA305FB55F624AA86186B5AD125D7C90DA000E070CC09F19E1DC7BB6DB0CF19D97C6257294B42A5A9C355DF97F9BBDAB0CD1DAE90913425600D6F5607D456DBBBB831D07F690ED5FB27CD3DA6FB08D495F9AB0EFF0085179EAFBE43842426B29D00294942B8556BDC1B74138EDDD8FECCE3E6F67B1C6493DFF749E04B0D01E2BB5EB7B4705ED876C24FFAEE140AA0CE72412EFC405B9791FAF7968BDAE3B1147749FF001C51381D6DB4A29F8384B2A420050278A4C9EB1B5A0638D637B25982F1B3D2B796B4CC5380417254FEA5FA73AC77197DBBC2E0B2FC12952C282E527889A30090C0536D47DA256DFB4AF63B52D17D3AB290242642B626D22DC40CEFBFA7A88ECCE612CA122515B9B920077D9CF21B35ED12D84EDCE027CA331284B84972D504F36372E5C0A39BC42754FB4E7636E64F9B32CEADA572BD596662C52B009056E3D4AEA001E21CD437F8EC70FD190E2B0D9860538895DDF14D965831765A6ED43B78D4456B3BEDA8C46539A32C1692B09029FDAA05CD3DDA823E726BB4D6A1D439C662AAA74D2E46E667983E97C29278D976A9E701001076563E90760D587C2E43841DC85CC3212C1AAAF94063E8FE11F1E3E27E67FA8ED1E2C951FF00F10B377BA8F3DEE1F76D1D5A15A4F42B81592559CCF34752A43E56C2D2195A92522EE05257C526FC8EFE53B2E4E2B3454D95DCAA44A7AA41278C39B6C035999AB668AC23303225CA5057FB80122B66622BE9EAD1EA67D1C3DA356E6B4DAD74267D5014D965A4E5ECACA600A843AB73BB40B0B284C0DA77E5E47FEA07B392F2DCC32FC7C99211DDCCE359081F310A4DC9036AB9FCC7D02FE947B5666659986131F33BE4CD95C284CC53B5160F08579EBA691E6DFB57D02F43FB446ADD2F48CA826B336CAD9A6436D1850AE711DE59293301D2609B795E3D03F0CBB5D82C6F60569529089D2706B4A8135044B291B3500F0E748E49F1ABB1E319DB5C26270F2190BC5B92948ABAC56800F46D9DDE3D63D679EB5ECDDECA7A4B4FD3D70A0AFA85E55514DC09EE9C70565753543E0410612975415CA3717B785F3FC9A7769F3FCCE76154A9A11885BB025BE657E29A1AF87B5BB159B49EC8F6772F913C0940E1D00020020F025DF7B86F1140219FDB652DEBAF673CB7B42A1A84D65465397D0AA9DF6520281A92C21F3C683E466F3F3C74CF833982BB31DA219762014AA7CC9685A9668CED650DCEDA5ACFC77E3BC8576AB239936534E2A9534A384026B4D37B80C28D778A1FE8BBD38ACC751F6A7AE3362A552E434B4151953EE712D3E0A675555C04CC41410A8FBA23A6FF005398DF9BB3D83C3AF8D3981095049A2788CB0280B7F73D5E28DFD1B7674E447B478BCCE571197F34B334587FB960A0478383D2F1D00EDF3B4DCB3B5FF6D6CC1CAD6C57698AECE692810DF787BAFF002FC34CE0481B12B490A81EA2F8BA7647E1F4EECC760A7E2952D4A5E2704660590470BCB2A0C5BFEEA6BE04449FC40ED2C8CE7B5D2F0B8629E04E2420A50A0430500D4F3A6D631D85FA4C7B09ECFBB23ECBF446A9D0990B397BF5B42DBB59DDA882F71A29E49E202D0B5796E76C3CFE9073EC42737ED665B8C9866210660725C83FEF70B29CF0B10051ACC6AC218FC68C99183C26453652693929E2012CF496EECE68EEFD6DADC5EC3BEC93D82F6D9ECCF95EAED55A69877387A87303535EA75C49A782E214E10980B800AAE6D1CB1CA7E2E7C43ED4766FB6F3F0F85C6CF121589504A12B57FB80AE8007A338D2FB88E87D81EC064D9BE469C5CDC1CA0A449054B29490E52EE695766F13E1D77CB7B55FA307D95F5337D966A5ADA5CE7575066CE50E74A5D0E6150D2DDCCAACA695B0EF03AD00D77A124A55102F187F2FFF00BD4ED5E0F119A617178CC26151251370C4052C21900AEC6BC446BBC5C3B2C9EC56598D56031587C199A66776C5281A90033737E8417878FA4D3D843B14CDBB0EA1F692EC3F29672E6F2DA36F31AB5D138E38DE60D661DDF7278388251DCA16491C2798306062D1F007E3B76A724ED88ECFF6AB319B3947132E5494CD74F02428853D4D081AB0B1B8880F8E1F0DB28CC72F46332AC24A948EECA94A9612D514B0B3EDCE3C95FA3EFD8CAB7DAFFB5072873D529AD09A51F4AB3B7B825B525C0A52525692950F1B651E156F36C7B53FAA0F8D583ECA76572F5659344DC6E61872112E5CDF996B2945B87626B7B4713F853F0CF0F88C7CC33D2172E52D24852416626EEE28CCD7F331ED076B5DA3FD17FEC44ED37657AB32FCAEA3324B69A5D4714B53982DA70B63B9529C6DB78B654553E150BEE4C63E7164B86F8B7DBDC662B32C1CFCCF0F216A13249489AA4A03BB3BB105FF00168F54CEC1F63B2E912F0B3F0B8452929E151504024D8D1BF8AEF1DBDF602D2BECA39865BDA876B9ECBD5AC3B9676954F42FE7397B02A1B5529CB5A712C0522A085A78C95010948E5046DC7FE30663DAFCB73DC932DED38C44D9A89FDD89B394A257F3201531729091A3F3ABD1DE5792E513F038E393AA5C80B40F96530268A37074F1A7311F2D9EDD9A0F5876C5F48CEABECE34B65EED466DAC334A1A4A4A169216B534C53A1352E955FBBEEDA25C85471011D4E3EBE7F4EFDAEC8FE1E7C239B9DE3B1B2A4ABFD3CCCEF145293C5C059342093C54E57358F3EE33E1D4DCC3B4015899AA9A9EF8B25609A055C13AB55A3DB2D21EC57EC31F474F627956BBF6A534555A86AA958AB7EB6A8543AF5454B8A42C34DD134A70ABBA5B81B3C283B49006DE1EED3FC50F89FF001AFB4999E1BB0F331872FC36226A672F0F314A010A52C24802B5636F08EDEBEC6F65F26C1E1978F93875AD284901410E4802E48247E5CD843AE8CED37E8AFF006F2AD1D8C694A4CA58D699834E31434BF52AACB54C843656DAD0FA9A612F153402880A244C1BEFCFE7E59F15FE1E6608CFF1F3F349F2B053113664B519C12A2140A81724338E90DE68ECAE3C8C2E1B0987750605212785A9B397B5DED68F1D7DACBD88321F60BF6BAEC9B33D4CDFF17EC2359674ED3525229B506128796C539429E1DE3A65EA800159F43C3B7B8BB2DFD48E3BE26FC3CC660A5625597E719560D689A9E22B521610A0826DC5C5C1D45758A2E73F0FF0D2F32C34D4E113DCAE62492122A388122DABBB73AB3476CBE995F611EC7B40F609A23B68EC4B4CA74F30DE5B435D9C2A9DC79F4D50CC51485A512BB2203AA22DD7D71CE3FA55FEA0FB519476C336C176971F331C9FD6777253314DC23BC58701C9A863A8F38DBE28F65B2EC365584560F06842D329D44243BB26EC0BEB61F58EB77D0CBEC69A0BDA2B5EEAECF3B48C9115DA5F4A379686DFA9714DD3B8BAE6149578EC9052E8B4F31B49C7A03FAD0FEA531B90766B2CC264188386C66310A226CB554B942943875A1ABD5E25BFA7ECBB2BC6E0B35958DC14B9CAEEF853C4134A2C3D41AFD77148CFE9C5F64DD15ECCDAABB21CCFB27D389CB322D4633E5E7556C294EB01146DA0B01448291C4498BFCB101FD0C7C4BCC3B6D8BCE26E7799ACAB02252D6664C241E30A51A1506B6C45F68E55F113B372324CE3113A5C905136728CA4705140ACD1EA035F9DDACFD87FA2DFD917D9F35B7B1EEBFF00682ED6B49359BFD7B23CC6A324CC2A5E7996D353963756DA8A00849979B48E524629DFD62FF501DA7C27C41C9F24EC7E70B9185C04E50C6CB90D30CC1F229292C5C380776D8BD7A9FC3CC8F2AC66478B18FC1CB13264A696A5330252AAFEDAFBA433FD16FF0047C7633ED01946B2F6A3ED7329198689CB736CF1CD319170BC80D51E519856D354789985B83829D2BF1209E84E3867C56FEA47B5D9965594653879D88C2E2B13284A5CFEF540A0808054524A5F8AA7C1F9C2BD81F875976133AC563674B973A4A269584148660A510CEE282EECE03C76133EF6D8FA209F5EAEEC8F37CAB2FC8AA72466B32CA247F07CC5C73EBADB6FB2905F14C140FD612920A951B99E78A9F6313F19666639763324CDF31C62A6E2242A68016A4AE5AA624CCA9240F95EDCAACC23B1F6C71BD9E9992CCC20CAA42572E4A92662529BF0900B04D5A80D5CF947CB7F6DD98682A9ED2754D0690A448D286B5E772AAC69C7385FA7756E38D1088E26F852A40009E77BC63EF5FC2D19AE27B2182979895FEAE6609099895D4998A9490B725EA0B9602C0DE3E7D66984C361F1F8E992F86B3144240FD9F329AD43EEA5DA204E7699DA05168C4E8ACBB50E6F43A64D7D10EE28B31A9A50106B10B221879060991D0DE6C4638DF6FBE086071B85CDB35C76024CF294CC9A17325A4AAA16A35209A0E679984BB3798E2E5E6F874CBC64CE033405490EC9AB0ABB1E63611F719ECCB4196577D12940C55079D6DCD299BA9CAA7DC75C71C5F0BCA256E2CF1AFC7B1528C998C7C5CCCB0B87C17C7E46130C844AC2231E89699290004D92599AE6E1BD23E876569953FB10B98B960CE18572BA12FC14D3CBEF1F1263B45D6195D26A5D1596EA0CCB2FD38ACFB37416286B9FA34A93FC52A5442FEAEF2146E49BDCDED8FB5123E10651987C3D938FC560244E9BFE9C572CAA524A83C804949524A83BD5887E758F9EFDA2C6E6327B52A12F1B350062FF00E902B0923BC6625C69C888FB62FA37436DFD10F45C0FD454A91A67582955352FBD50EB8A5AEB4925D794B70DC9FEA81E58F87FDB0C1E1B24F8E786C34A9489586959AA1299694A5213FEEA1DE81DCEEE7C9A3DDDD9793FAAEC4A97894F78B5610152C977F91C13B6E1B6E71F0D41E4FF0019D517B1D4F9FDE7AE6F567CB97A48DB6C7E8E7B00A188F879911C3B07CBA58615A8949B3035F060DAD63E7B76F113067F8C96147804E5F0DD802A3FC39F106F07D6386A5E954FD98127A6D791711D3117D9EC22E566589993417E371C557D4DFD3FCC56E4E19425CB2454025F5AF2BEBBF4D442B65F4A549F1117D8133B9DBF111118E9C7826CA5310DC2CD7D0FBB51F70D0EE6CB070EB0A0F42DCEF4F5ADDEA21DCD581C104806C04932237EA6F6F33E51882C348EEE6CCF9581347D1AE08A8FA3F28AAA241EF4B503D5875A537EBE46EED495890078A368BED3D3E23F29BE179A8490C589624F869F6DFCDA313648276D542BF9E477DED125A1AE4C99267C30677DAFB99FC09DE4E21B13265F1D520835622C4EC74F388C9F29945C5363CF5A1AFA9F38BB35566EB3C70BEBFD43CE36900188FC0922390232E2A9C9530A9AB077DFEC7D98889490A55ACD5AD7EBAEDA738A4F33AB7EA52E21A5C3A2E825406D1363E5CB68BCE3AAE4321387929EF43A05F50E5DB4B124B7B1161C248B52A0723BB1DBE9BC55D5D555F97D6B398A163BFA5ACA575C3292785A7D0B31FF00D2920C5AF8CF69B0C313835CB961C290B4816A28105EDBB1B78C5A70187965491387FB6012F5A16A73D06DA7231EC2D0E6343DB5F64794EA9C890DD4667945070670DA16953A8521096592A6EEA121063C33F7E3C9887ECA769A7E0318A29C3626705604A87CAE3E69B7A0209D6F0CB37C009C25CC4A6A824289A382ED4DF7DDF58F3FF55D53A8A8ACA6756ED33ACB8A429B295A4D94531C8F974DCDB1DD70D99499F230FC052470804820B8206BEBAC38C2614A306BA31092CFBB6C3D19BEC6A1CE2A1B6E94D552D6298A961412A012A529C0E2A0DA64409E7127A0C5AF0384EFE64A524D8855BF8A03AF2E710793A267EB485A010A98782AC181A8A16F0FA51E155F574F58EBB978796F3ED86D6E28A54890A0144126DB74F77417FCC241959262E7CC4A512BF4B31C382C532C87BEB52CEFD63A16225A9388C0CD029C69AB87A902B7D3AFD63ED77E88CF630EC27B6BF627ECBB55EB6D3F559D57BA33712D66B5F441A28AF536ABB0E212E714011702DEA7F365FD5776CF189F8939D6065CC12F0786C47FB44049E2E2249AD598BFD2CE23DE1F0CB234E3B22913520F11949E2150CE06A59F5FA3B523D456BE8DBF65AA623FFE03AE03911A9336303CA1FF0021D463CC333B578E584BE2980141C29D7EC2C1FA474DC3F64C244D704F10B329CDDF97AD18C3831F47AFB34D0BED3B4FA1EB42D0AE20E2B50666AEECA60A6389D26FE5CF0C31DDAB9E152C4F9C95936F9406F001E9EE86AC91D9204CE025100DEF5A3FB60199F58E8D7B457B34F63B90FB4CF611A5D9D2D50FB1AC1CCF9A52179BD60211434C9FEA53849B120472B0C769EC576BE6A3B3F8FE09E1333BA1C33784167E270DD287626D568E0BDB0EC71FF5FC277608499C1856EE1CF8F883AD8C776E9BE8F0F65F3DCD4AB485635565B6DCA8FF00E399990494050801E001E4607AE3924FED5E28E37124CD1326198A2E400D521C001B6A0B58EF1DE25FC3DFD5E5B81EF16C44A4B062744EA0E8DEBA6B2647B107B36D3B229C698AC526200FE31997DFDECDED68F3C03B439AAD49299818170191C9B41AF3A1B81489BC2FC3993230EB48554A7FEEE7CFF817D4B4373EF61DF66CCBA92B734674A568CC6932FCC2AA8E737CCD490B6695C7495254EF0C4A07DA91CE3A3E959C63B178EC1AF10B0A289F252FF2820296806D5B00ECF50FD28D9D7638E132ACD5810F26656BA254CF50FB7947831A8B5585D456D065B50728A0A5CC6BE999640FAC1E062ADC6805289E2D900DE37DE44E3EA4760F2892AC83033D127BE52F0F2CB92DC24A126D50F577AB97A5488F8E5F14303364F6931891C494A3113372FF00316D0FD39EB157E6DA919CBE1798BCDD436A5781D84A0C922E40F14926D72676BC0C746CBB234CB13172FE4580EA05360493737A1D08F431465F7E664841258D0726605EFBEAFBC7643D8BFB54CD727F689D274B96075594666E3E8AF5281699504D390D7138B0126E6DE2BEC271E5CFEA1B24978ACBA74D080A5484AD5C406C1E80835A3787311EA5F835DA09FD9DC760E54B9851FA85A1376FDC4021AAF43AD9EF1E95FB45F61995EA4F69BEC673E6F2B15CAD6AF57D4E6CA292A43472CA765CA72B51494DC8944C49B0DF1E36EC176EE6E5F2339C12A62A5CA96932C20A8BFCC169FDBC8B75BED1EEFCDBB132B3A9D94E63DD85AA6844D2784528824DBAEBD23AD7F4A7F69CC52E7FA1B413084A19D334CF273069A7C6FDC32BA7EF1B4AA525251299026245B7EFBFD3C761D3DA34E6F98CC1DE89EA2B0E976F9A61D47D7978729FEA2BB4733B289C9B0B2D7DDB0082104876E00CC36DABD358BFFD99EAA97B78F624ADC89D712FD65265798F7895381C752A654FAD80A049298E04F082013CAE71CD7E2CE0E7761BB62AC5A5E54BEF9250C0200E020166BEDA50C59BE17E151DB7C97867FF00BA7BB4B05391F303BF5AF86911CF672AC47B3A7B09EB3ED133C0296BDD6F51D1D4B8F8EE5C5835F5D474A49500612952786D7E538D519DCDF89DDADECBE0A6CC52E5CB9A8E034570F01965B672CD5B6D175C5F66657C3DECE677899284CA54C92A24A592F45D68DCD9BA574F9C3EC1F5EBDA8BB72D195B5B52A5B95FAC2BDE2932B5BA87736E26EC24C00A107EF8C7D53ED664186CA3E162B8E5A50519594824004B61C8A3B17A73158F017C3FCD67F68FE214E4AC952518FA3925819A7EC03E9A0BC7BC7F4D6D6FF09EC47B2F57D6453B4F652CA9692910A866948B58DBD31E0EFE93F15C19F76C8B904E215F35DBE79C2D7343E5E2DED0F8E39209B97767D93FB25A6800BB4B7F13AF808B4FE8FACFD549F477D567542FADA751A6B51A9350941242D2DD604A936894A8026098DE7149F8A586979A7C5BC1E1A604AE5CEC74B40492000EB4824D9A8790A1E7171EC14B184EC6631228A4E14F096B325479F3D0347C5C675A8733D4FAAB3FCF33FCC3F8B664F6AECCB82B9D400E2CB19DBC96B88993FC9094000AB940B1C7D81EC77C2AC9B29F86BDEC9912710B9D960592109F915DC71000B106A48A3171CDA3E7F67FDA7CEA4F6F92893366F7631E9494B90083380E8D5E5E31F657D9FBAF6A0FA23A8EA350D51CC1674DE661E5B80AD4E16DC70530264901AE1481702009C7C62CEB02B97F1C71B8192938799FEA00219C703289A33338A8A6FA47D19CCF2FC6633B0183C54C4A9415820B59209249402E6E472DF68A37E836D3D97D07B32F6959EB85B39ED70D46E553EDC38E452556666907123888284252902463A27F51133192734EC5E1E74D5CE9689B2C1E25BA4A4992FF00292798DA39F7C1CCB958939C1E13C487090C410471F206ED4FF11F2EFED8FA8F52EA1EDDFB4CAAAD79DA976B73A79AAA1564B8A4A296A1D431C21E24B7084A638627CC63EC27F4CF90F64717D89C395E030857FA1905733BB944BAE587513C3423E66249203D5DDF907C4D999B617365204D9B2E5F7AA0CE4502B7A7B2F4B1F7A3FF000DE663AA9DA2F69CA1CCAB9FAACA72CA6D37FC1A89C052CB21D69F35019512507888957081B7A63E5D7FF101ECDE4B9676EF245E562428CCC4CCE3EEC207012A433B683CE3ABFC229B889D8498A9B89513C0010493C4E0DDCB79D7ABD5E7B03CBF24D4DF4D0F68D575CD30CE6D9355D21CA92FF03A0177285F7E5A6DC94A89008514A4C4C9223152ED6CCC661FE0B49948C44D38695879616842D690BEF1496A820D09B30F1022F08C2E1FFD53884F471F192D4DBAEDCB77B88EB6FF00E230D59AD55DAE764D903A9A87749D28CE52CD0F7C5AA5AC52D868F1AAE107B8761694A8192200B63D3DFF00C34F22CA670ED22F30548EFE7770654C9B2D2B291F395278540BB8A170FA93148F8AF3A6C992832A72827849E04A8D580377A7361D291E2CFB2666FA9325EDFBB38CE748E72F2F57E539ED1B74CDD3346996EB15B52C35508213C29792DD3A949921462488C7B6BFA81EC7F65476273EC4FE93088C423093945932DC321452A0C9B967A5059C5E3987C369D8AC6E745D4BEE4CC40092A2A0083F31725EA6AC6D1F57DF4EE657923FEC8BD9F6ABCD99646A8D3949A7333CA1F79612F37501FCB6A6B0A4AA0C9524C83F2D87C73FE96F23C5768FB5BDACCB30EB52B0F3A7CF429491F2CB4A0CEA10ED50001401A8C418F5EF6865E0B0781C14D9851C72D095558392013737ABF56630F196E6C7DB87E89E6AB2BEA1ACCF3F3A7DBA6532036A768FF84389658909B9E2453A6091F2C42E6B879DF0CBE2F4FC3941978638827BCB267900A8D2A070977B3DCDE2A99F60F0FDA4C995DD11314896470A43905801B16D872B3563A8FD8A6643D877E8BDCF7B415D40CAF58EA9CE5867EB253DD55775976A834D716591DCC0936817B6273E21CDCC3E3576830D8096959C3E4921656A014A48EFA53A4B86A120B579D59E203E19E5E7B32719DE3A3F50B02B4601441E573BC5A9EDED95A7DAFF00E8B1D29DB250BE8CE35150399652D3543284BEF819967749435012A471281EED478C4DEF24628FF0CFB77987C09CEF3BCBD6B992A5CF284AE695143F0850173BABCA85C45C7B4FD94C1F69049528A14A7252C94921C826CC4D40BD5C3888E7B42D72BD89BE877D2FD9464B982323D579CE541540853694D43C330AE69FAC480B214B05150A077001DA76E91F09F21C57C6FF008BB8BCF66838BC1A274A33E6295DE252148F97E524EA3D0C547B5394CFEC764A9186E2E12820000B903722B6FA5447523E874FA4FBB34EC3F4D669ECE3DBA54B590E5B58B71AD3D993A953CCD5273971D7F350E36D2421BEF3EB0471BAAB4C836C76AFEA6BFA64CCCFFA6669D98C3AE64DC2A0AE6C99287131410909AA4109621D9AA4EF7A87C34EDF19B3F1387C4A08257C20A9554804824BEF5F5D6DDE1F694FA20BD9A7DA6B2BCE7B5BF657D4395E4F9BE694B559BE6147401399AB3AA82D395094ADC53AA142A2E1544849515584838E71F07BFA83CE3E0866986ECE76F7B389981731121189C4F04B32471048290A96EB0C45886AC7A0D59060BB4592E3F112260E3EE4A82407E27492D7DFDEA7E40BB5DD09AABB12ED0354766FAE3277329CFB22AE55355D33AEF7CE04F78A0C3BC424C3CD04B800FB33048DF1F6F7E1276EB2CED864F97E6D8032C61B19290B9694149487487629A50D3ECD48F9F3DA8CAB1180CE71D875850509AB090411FB496A9B50F5E948AED154DADD6D0EBB14C2AE8545266E3BF6CC72E639EC3963A6F6F932A5764B3498B4A7FF00C24EAB80DFED2EB434A79F9BC7767B0CD98E1D64007BC0E7982057DD5AD78FBEAF662AFA773E880CB14869229BFC279D8EF645E3EB039827DDBF524DB1F9A1CDF855FD47AE7713FF00FCDD2424D984D1AB81A5E84599CC7BDF23C6A7FF00B26B95C54FD310472E02E763B7324B5A3E04330A827526A39794298EA1CDC8DFFF00E6753EFF008FC36C7E8DF26C560D5F09F08BE14850CA4A4D451E4000EB73CEF7B4789FB418642FB4AA25001562814ADFFF00F23F9D3EBB53EF17E8DD7C39F43DD125091C08D2FAB036A172AF1D6CF29989FD6C4FE6E3E364B549F8F1317254ED9BCA5708714EF52687A104FA55C1F727663853D8DE07001C29DADC157B0153CB7BC7C2A3EFAD39C6A42018FF0013EA08FF005019BD64C7327AFA5F991FA25F8098838CF87D9226657830328126A6B292DEFEA2DE09EDCE042F3EC41480C672DE9CCF5DD9CFD5A3172A549A9709901411C2677B5E27E605E3974BA63F049C14C9B36581525541AD7DB6BADA22315970932A5F086A3B806D4A0A69E1A6AECA115465266E0F23C87DE7D63718322C51C52E625CB75B1AF93D01F5D221D587E397303513A1F16EAFB6FABC38AEB4422157326D73E9633F3208F291890C534951090C4D9BCEBE1B79BC41230CCA5921874DC9BB37BB42DA5AB55A5506DFD5E963EF3F872C45AE6BD5FC5ADBDEEFE95DE119B2039A3020B86DB9EDF5F52FD4D5EA491E2E917E91EF13F0DB0CE6A8AFE660143C7EA3D988D9F86AA986CFEE9EF5D22ECD40F90557B78B993D4DA3E47FDB15AC1E5E95B16A534B3B78FF00377AC5670C82E3776B3DCFE4D8DDADB54D9ABE12410A20C988B4753337E5636FBF172C149125212C006A8BF4D34B9DAF16BC149E2670E77AFA86E5E0E4BC56D9CBF2570A3799BF39B5A4733D49336318DB1B244E42924536D2C34E7BF268B6E1B0E0814D7CEB563D43D69D2B1D8BF644EDD6AFB31D768C86AEA4A74EEA7710DE69DF2B89942584F80042E42788A88F0804DB7DB1E5BF8C3932D58BC3CC972495A78CCB524170A2285FCBFC5DF62300674A2AA0E023E56078838366269B36FE3DF7EDCFB25C8F5C255AF34025A348DD38A8ABA36133F5A2A6813C3CC4104F8419918A6F65B3DC7E5C24603385A84F0A3C0A51A293C4E1C82C960C189A9E704CC20460A6AD2070941AD058359F4A9FBE91E5F6ABA775AAE7D54B4EBA179B70A1CA2752429B521453243804F111C42C37168838F4C765F3CC24F5490262492120A5DC681F57BE9A6BA8A165ABE1C4995310584C265CC7BFCC49D34B171D62B87DFAD69FAA7AB82509013E201209B47282771698B5A717AEDC62049EC8662BC3034C2CC345137428F366735DB58BCCCFF73138201F88AD0C1C9145245AD6E576ADDBF421FA081E6DFF00A3B3B225A2C952B3DF173319ABA0C1F224F5122DCB1F971FEA4D53719F10B3D52C9E3562893BD14A16D396B4AD23E8D7C2099DCE47210A179483E40793687A78FB2AA6CAA07148163F2F3B7FBDA31E7E998351E021668C08F2AB7A4760958896A0B205007A5BD3C357B469ABE15367FD31045B9ED68B7EE310F9AE5B3166594CC371AB00DC3CE96F6E211978D9604C5300100BB867B8B5796ECFE5E4C7B5B1AA57B657B27D400AEEE95FD58091B0E3A56C5CEE0F4BFBE6D8EDDD83C0CC464D8B2B55049AD2DF2A99C6FA0361D2384F6BF3195FEB7840502B3C696F9921FA5391FB7AAC8610A436F95C7794F4E08BC59A02F11EFDB718E62AC0A978EC4CC0A202A6ACB7451A75D5F6F08EED2B3A95232FC17124377496AE9C290CE7F834E8601429510B0AD89277B0F5E717B7AC61E04AA5293C35B8A9DD85A96FBC3D939E499929443304D7A0B576EAC79C326AC729DAD3B9F07109FF00F25CD477840F07F917E4F513E58525E24C8CC72F05C257390493AF0AD275A1B0677FCD373ECCE5E2729CD014848EE576BD9557DEDEB678F8E1D4F9E32D6A0D474542DAAB1F5E7799A51C00F8146BDF1B00A8B9927CADB463EAC7C2DED370E418342905411225B56CC8079DC0D46978F8CBF15A44A9DDA3C629D81C4CCADDC7191BFBF48D794F66398E69568AFD5EF16329716DB8DB6B570C2525248F0A82809EBE40E3ABC9ED34C9B87C42654BE29841E1029BD5D9A9A3ECD72639BE27092654DC312404B83D76AF93459D996B0A7D019AE42EE8D2D3797D2D7D025EAA6C252B4A45432167BC23886CA04F15C18338E4BDAEC9F17DA2C973097390553CCB99F2B3E8AE10DC9C5FCA3A764989461734CAA6CB53211325970E416282F73AD58FDEBF499A435D685D45A334A6BCCCB39CA9FAACA32353D48A5D4D377CCBA28501EE195F182A5A609B4F3136C7CE35F62736CAB3DCC72F460E7AD789C4A124A652F8529332AC5883451B6EF1F4DFB3BDB3C12F22C04E9F8894572A424104A5252C90DCDA805BED1F2C5ED9BDAD37DA37B40F69BA9D7998550D53F4AC51C39DE3605334A60F7601294C9489E10279E3EA77F4CFD805E41924E070CA2664996A09292EEA492AA915624D0DFCDFC45FD50F6A65F68733CB8489A0895318F097A0296D756D6B1DD9FA1DFB66CA5BCE3B40ECF33FCE986F2FCCBEA21A159528A7692840716E06C3CE2130A04F170EFCE71E78FEADBE1E4FC595E3E4E1967B8528F0CB4173C6A6FED0F7FA0B08ED5FD3776B70F96E1B0F879F31290B4CB492A22C000E1D85377E7179FD33BDAF694D0DECA2F765BD9F5565CFBBAC5C4AA918CBABE9C70FD533043D530197140F1852CA85A7A1338E73FD28FC32CC734ED4A71188C34E4A72A9D2D40CC94B0E165E8480D6B579DEBD7FFA81ED86053D9A9D2B0F350158890A4D140BFC9B3DCE9B79B7CD77B2766A32EEDEFB3072AE9196D0BCCDB577CED5B61A6141C68B8A5052826E649E23F9E3EA97C69CAB118EEC0CDC26124949C3E5F302B80151534922C072FE77F017C0B92995DADC4E3262811FA90B750666593ADC6ADCA8ED5F79BE9D9D6196E73D877654CE4F99E5F9A5553E5A84BAC52D7532948E24520095069D2AB0041045A27CF1F3E7FA49EC8E367E73DB554CC34E92133C8495A1697F9A6B91C4002D705ED48F717C4EED06171F82CAA585A0996800B10744DAAC35D3CAAD78FB04EB9CA32BFA322972CA8CCB2BA4CC9BD33A992ED23B5D489794A79157C03856E05137B5A6F618E61F14FB219E9F8C32E5E1A4625CE3A41429329652405209F9827845AA01ABDCE88E51DAEC265DD9DC44954C9602A5147015024B8237AD4BFB68F8D0FE20A6B3ACCF2DFE18DFD61ED599B283E2A91C1C2E674FAD2AB9E002140CCDC791C7DC6F8739663F07F0B70CAC5952972F2A53CA5A492B6C3D2A41208DACFE31E4BCC065F3FB6386C72928E0FD5A56A371598087F324EEDBC7D8F76739E65591FD132CE50EEA5CAD19A2F4F578550AABA914EA438E2C941417B8A549510044DE7A63E2DE2B2AC6F683FA929A065D364CB9F992A5999C0A0901CA1DF85855F56D3578FA378CEDA64EBF87F230B24C92B4E0D2821D2E0F00167A35EA0757631E6A7D081EDA3A43B2BCFF005CF619DA03AC65B926ABCCAB98C86B2B2B521A612BA9AC5D61256A4821D2EDB8D4041F0F2C7A13FABDFE9E33ACAB2BECD67D96CC993E64A93FA832132C924F0CB5247102598D5ABAD63897C24EDBE5B95E6799CBC419694CF9A52975003F72858B543EC2978EC3FB64FD0D190FB42769B98F69FD9176C990698D3DAA5F6EBB34A76CE5D5296DB442D6A05CAB04132A5129005E3AE285F08BFAACED47C30C966F67F1992E3D589EEBF4EE654E676294B132882E1ADA758B476F7B2B96F6BD68C5E1E74A4852B89D251576367B0B55ED6611E837D1D3D8EFB387B29E95D73D9668FED4723D49AEF2AA2A56F5F66685D3D297DF71A71745655429B5F772A4FF002C9B092463CE1F18F37EDE7C4AED2E5F9EE3F27C7A30D331266A25944D99C492B4963F238D0E8E29710E7B1FD8D9393E1712138E4105150E915093AB862ECECFB6F1F33DDB8FB4F663ECD1F4C46A1ED372CCD5BCC34FE4B9C50375B554EB40A5758CC28934CB529C6CADB5F76971517544198C7BA7B13F07715F11BE14FE8B1597CEC3A4E0E92A6216145728129FDC12A1F307F3022A824A64E76427304BA67317208AAAA2AAA96A5C37D7E813DAF7D9B3B11FA59BB1ED21AA346F68F91649AB74ED122A28EA7EB14AE3E8A8AE4B2AA805A72A5B5288525408502236F2F337617B67DBEFE98BB4B9A6066E4B8E9D2319394995365CB9BC0844A2BE1AA65905D245F7EB16DED7F6270B9D60A4CD46310A5997549E162E03D4AA800FCC7527D943E861D25ECD1DAA50F6E7DB776CD926A3CB3479555E59973AD515021A0868A544ADAAA01E3E04AA540C102379C5CBB6BFD55F6E3E20E538BECEE0F2BC623179924CA0A2998C94AA8B042900170A34E434022A1D98EC9E0BB278A13D7390A757168EE1CE84F202BCC563CF9FA747E900D37ED2FAAF48F62BD926629A8D1FD9B0ABA2D52E53387B9CFF00BE6DAFA88412477628D6D7FE52941405C441C7A5FF00A01F80398E588ED467F9E15C939A2113128992AA85A9331F849A9752812D67AEB087C4DEDA77B2F0F2F0EA2C804712554228D4D080EF7FB9EDDFFE1ECEDF34C6A4D2FDA67B3F6BAA9A5FE1540D658D51A730AF45335C351DF3CE06D0F389063651493245C1C79FBFAD5F8659CF677B468CD7012A6CD97227CD5F14B9449214A0CFC214751BB5A8224BE14F6865E2E4CE958A57CAB486E2340C0BD0DCE8FCEB5BB37D3F5DA4E8BD03A1FB2AF67DECD1CA0A9CA73A733E5E6AD50660CB8CD3943E8AB68AD2D2D6992B24A4820CDE4E247FA39EC5E6FDB0C6E7B3730C24C4CBC6A30C897DE4AF993C09525552028B9706CD6899ED6E7185CB1483865A400A51E20407ABBB3DB414B02EC0D6F2FA0EFB42D17DB1FB2AEADF66DD739965CCE55A0AA327AA0335AF6025C5D4E647304708A97533C2B6D2004930400231CD7FADBF81D8BEC8E6B968C2C99C3FD51538CC99264CC3C265F090FC009ABD1FA0687BD91ED29C74A99356B0132785454542805682DA1F0AF28E96FF00E221F684C973ED77D94762FA3FEAB5D93F67F4999B59A2B2ECC1B5538EF6959728F8D34EB2DAFC4D88DE3CAE07A6FF00F875FC20FF004DC873AED2E3662C4C9F252B9726721495BC94AD2C38AAE586973C8423DB1EDE6599C4B565AF2D7DDA4A388917218BF3A6D7E51487B197D12992FB6E7B2EE8CED8727ED3F2DD13AFB33399A33AA652E99CAB4269AB174B47C295D534B47F25008E048277B9BE257E2DFF005739D7C30ED563B23C4F646766982953C4B933940A92A4053121E52DA9CEC361150EC9F6224625189C6E16600A53A884B50FCC6CFCAAF4F08F793E8ECF653CCBE8CDD13DA8D576BFDBE516B1D33995031534197E67534ECAA8450B4FB8B6DA53D5AEB87EB0A2010902D682231E11F8FF00DA8C5FF513DA8ECE4FC83239D95AE54EFF007C4A90B481DE197FB9425201E1FF00D4760D1D0BB35DA49BD97938B918C2552D614900AAECE0D34636B5C3968F907FA447B67D33ED09ED73DADF6A7A792C3391E695F46C65686214CFFF000F42A91E712520254165B2AB822FB99BFD73FE9B324CC3B0BD8AECD649889F3711330F2815CC585024CC29531724D1DB661E5E67F89599E1F33CD66E230C94A553564A929E1726ACC40F4E82F1D247948AD71B69A3C6EBB574490B1002385F6C12784DC01733F7463DB1DB544EC6F617310924A95825B0B9FF00A65869AB59F7BB98AAE538632E7C998CCC41219C82FCF4FE35B7DDBFB336A1D3793FD1114D91661A9B2B7EAA9F4B66FC544BAEA565F42DC2F2908E00F070CAA364C9DF1F9D5C776733199FD434B9630338056684F7E25CC2857CFC553C2C963401EEF736F5164F99A11D9F989EF83995C25259C3EC77607E952F1F0AF98B15CFD56A6AFF00A9341273DCDFBA685437E20732A80DA80998363E933338FBBF869388C2FC36C361895059CBD824920FFD216075B53D77F336793258CFD2B04F0F7C4F78C4DD428C2F6F1E8F1F709F468EA4A2C9BE879C99BCD33DCB28F323A7758A2AB2A76B690D4203AED6A590A429D0E7892411E1988B63E137C46C8B198EFEA09787999662168566329489E25CD32CB14A89E2E129A1A5CB178F5A6419AA47645C4D48E1C3906A1CFCAC19CB8EA3A5EFF1079D56A9DD479CD0B47EA85AD47A8D65EB2D2B0EE6956B491C8820C8B9B75B8C7DEAF8272BFD27B2F95E166829030D253C268DFEDA685EF6B0E81AB1E46CEA60C566F3E61629338B1707FBC8AD6951E62102EA1F436DB6FD4FD6384A8254121300A8EE2D3F0F48E7D23B4B365994549775A48A6C03DDA9B787268C6712929C2A1807E116704061E2E6A3EF1922AA23C441F5F9441DA3DF883EC8A0F14F51258177DAF4B57EDB45630D85EF44C0D41A5FC5B6BF4DA17B3540F3E7613EFB1B0FD8DED1218FC4254B2904120D791D1FAFF88613F0641248D5B6BBF4D7EEDBC39B15299BDCFADE00F3BF31FBBE23FBDA0A38EB4F0F188E9987242810054736D4B915F1F5AC3E51D5004CAA768E7CEF73B794DB96136F5FF10C26E16F4E7EFCFAEE445EF9FBCA495C99916BEDE5E63E7317C37CB7BB3C3F3247450F3F06F5B450309C248A8D4B1D694F37766F4200A9B337AF24C133CF7822DCE08F95F6C5816B961988B5C355B5F0B922EFCA2E99690C12EC59AB4FE2B7A45739CBA47149067CED07A12768E7E98CA172C9F988FBEA6DCF98B45CB0286006B4B80C1AF77AFA6F102A9AAA8688729DC534B6DC43BDEA55C2B49696958008330A88B13D3683880ED276670B9ECB4A804AF8056D4B6A3A6BE4F13D265204D42D49E24B1052752A70E79EB6E5AC7B09EC69DBAD16A3C859CB7357D0E56E4ED064513AE052AA82C14990A3C809BA4FE5E61F899D9E565A0FE9A590563E65A41E24F0331A5473AD87384330C0CD93869E94A14B0524A5816AA5C5F50E0121CFAC4E3DA13D9FA83B45A1ACED1744308A4CC5092EE7B97B0907838070B0520402560711EED26F20CEC28DD8CED5E272BCC70D81C629687584CA98A27FDC018977A066662C4EED1C7B0699E8C7AC4D744B42CB248019D4E59D89FC1A691E516A5C933664E654556DADA76994A4292E24B6B3C2483E15709361331B796FECA9D9AE5F99F64B152578A97DE4CC22AEA492FC0A162AABB8FF00069D070D353331B8128F9F8549B312038BDDBEB406B1F7FF00F40754328FA39FB1E678871B6ACFC2E08327F8A3BB7C7AC74DF1F9ABFEA9B013301F14BB412E5874FEA125019A85C92799BF851C47D21F84F8633F219135350258141B74A6F6B5CD047B573C37170AEBCA3D3CCFCA31E7054C50E1FF006EA6F5B3791DFD6E0C752958644A4AD2A50254F7D3933DDEB5A53484756DFF0029464057862FB99E40C72BFB879E22F1F899A0CA4A65120104B5AF6B3C30384470CD26684EB56B56BA3DB4DB9C7997ED4C8A65FB4C7B3BBAA092ED2BD9F84A8C594B6100F39F90C769EC5E38232AC64B5A7878E5A68D664976D79B6FAD9F85F6B7088999F61BBB980844D1516FDC0E84801C7F916F48A8549FA95229C215C4C35179FF00CB06C07E679FBF9ACE5CFF00D6E238657CA16A6A8DCE9E57E7BD3B9E1729958CC0615256DC32D249A97A07EB60FD042D4BD07812D9E13304DA39449E9E71CE2708CC54D0A41E0B9AD411F57DABA9A56F0F5394C8C3C99893307EDE4052BB8FA9FBC43B5AF0AB4EE774EA8E0A8C9F354B8B240E0FF24FED7E60F97BF0E25619789CCB2DF91E5A27202C805EAB481CBAF4E91CF73DFD3C8CAB3596710973297C2E039649E7F47FB47C9CFF0087F4FE94CDB52E62C96AB6A579C664B21C50250AFAF3E47DB2779DA01FBB1F53FE18646064797CBE220CD92876154FCA08A354D5A9F48F8F1F144E2FFF00B438D54B96B52062165C02D45162FA8F1D6BBC55DAEB5E546669750ED48629297C3DD214059560070C1E42605A2F6DFB5C8ECE1C0C852E5A4A8CC0E0849B8D7CEB7F38E479AE2B1AA5E1C194B0C468695076E5E3A87B50F9EEB658CB5CCB43D14CF1E24BA560A92A6D457224CCF1446DF0DE7FB23D98563D73D18A90485FCB504382FA16AF879B45D329CC2711216A7E29401B331706FEFED1006BB78ED1F2C6574547AF330A6CA2950B67EA816EA92A4BA14DF081DE6C27A72F7E2771DF05B2D44F9589978290A54D515294654B7D2E4A5DEA48E62D48E98BF88D98E1B06A9285CD010801202D4D404559BCB4D0475D352EA97DD5BA0E60E5754BCE975E754A502B2B595192499DC9373EA39F77EC7F6364E4B82EEE5C84A4290DFB40B03A369CF5AEA1B926699EE63DA1C5099890B3C0B3C04B9D5F4B5BEC08D23B4DDA8E75A5EB5CACD3B995569FCD69D1097A95E741A80B4C2B88B6B483C0098924FA1DE9FDA8F85F27B4B8BEE276192B97316428AA58500E402E0A483726FF0066BE7663B5B98E46B9264159092976590CC41D19C035F28856A2ED63567696ED2D0EB3D4B98666CE9F53C72FFACBEFAD3FE6BC6F405B847BC9DE23A62FDD8EF82992F6170FDF60B0B25733149056A42128293A12007353AD9A8D171EDEF6EF34CEF05874954C502901438891A0E7737D2FA562BCA9D40FE459A65998E4B5AEB2F30E38B62A10E2C2DA5248B8F103722C7A581B62E0AEC761F1384C56131081313884291C2A0084F102050D3534A0D2D669D809F332E13B1330702D4CA36492589E553FCD8D1F75576A9ABBB412A6B5A6ADCC337A4A06826969EA6A1F5A112DC0094A9C2081C291EEF2C503B27F0872FEC763B19330F879481984C75704A4A48724D4015FDCF5D9F58B2E69DB1C7E2E6A10A2B28413C2EA2CD57AB9E60DB4D2B0DBA7FB70ED3322D34AD3997EB0CCA8B4E5225F65BCBDA7DD0D38D3E56140A43804428D883BE2C78DF81D90E3B33C3E3A661244DC4718985664A38A9C2AAAAA46C6B5A42A736C5E2E5A13DF2D0966238942A7714A5ED7E45E29276B87091C6E77AEBEB74D4F12B88B8E3A5C2B3B1278953EFDE71DA26E5B2B2CCA1196CA940C8549324200040053C26C0EEF42F6B34426264CD97884CD1338940951AB12407605FEEDBF3B353DAF76A54BA75CD08D6B3CD1DD38FB62687EB6F25969B47F34A0254F0042CC8B00224918F3F49FE9D322476865F69132E4CB9C7102795F7238828A8170581A1B6BA691D4FB239EE2F31C0CEC2E227AD12D29290952CB0670CEFD0FA91AC55D97E635EE553D9A503D5394D530E05A2B29EA9D69D6561478969536B428971424C2A6E649C768EDDFC3FC0F6970795E5D8C28C4A70C9084A972D2414B2284104580F3DE29598CDC564B9909D869CB525530FC892415392FF303A383E1B34596D7B5EF6FDA7285DC928BB50CF5BA1E014ED527D62A57DE34B942C77A5E253C2826FCEFEEE57DA2FE9DFB213A660572B29C112E0AD430F29C905372106B4D4E84C751C176C33395839404C5AFE573F39245050172FD473888E53DBA7695A1AAB37CD74AEBECEB2CCE75496959C569ABAAAA55616E40E24ADF3C3C016A48BCEDE98B2627E09F63F0323087FD1B09356809242A44B64D059D3BF4AF844BE13B7D987E8F1038E602A490071177A8FAE9A6A6B117D41A9EAB52D43F9CEAB7DCCFAAAAF8559966AF3CA4D4D5A80F0124953814D936214622C462E384C8F2DC9300A9383C049932B807CA89684866A8094A40028C4806BEBCCC769B34399098274D333BDE2EEBE6660A7AA8D2D5AF41A448342FB40769FD9636F27B25D5B9DE421B5346980CC6B1E69238A5CFE53CFF00040BC023CAD8A64FF86BD95ED9A7128C7E45835CC50204C99265A8B977214A43F3A9BD6BAF4CC4FC40C68C3C896B9EB432085312402C1A81C1D9EDF7996BAF6BEF6A7ED1A84651AC7B64CDEA74F3C80D869B0B614C881C485165D4B8E0717E12A3B5ED6C73EC37F4A1D99C2667FAC9383C2B77817C2244B00317350351E075BC452BB7388C4A529257C697A959215B720DA0D49A5E3AE55D4AFB4A7731ABAB71DA9E24ADBAA71D53EE38A599597256B52CAF97193C3336838F487677B3780EC9E5DFA6CBB0C894020256109E00AE1D580F17A8AD1ED10B8ACCE6664E272B881A1048B68C6A030E5666ABC4B3477693AB3B3DAF567DA1752D6696CF5F6C8AF4D1ADD6FBEE0414B454A42DB49F092773B9F29A4769BE1764BF12153139A61249AB1EF65A5770C28A05F97D350FB25CEA764AA3DCAC94A8FCA453AFD5BD2D0CFA9BB4AD6DDA356B59AF68F9F57EA4CC925EFE1AE555438A2C820A5CE02A717C05405CDA6DE470C3B29F0B724F845881FE998594B18958E2084252031352C1A8ED4E82D0BE79DA4C56629497514268B3C4494BB0B7D5BC636E94ED33B4DECE686BDBECFF0055E63A4559CB8D2B325D13EE95560A75CB417DDB8829E00624F5B7385BE27FC25CA3E24A7073F192A415243A44C968594BB1A150A3F215F5898ECFF693FD3B018A40593DE2181763622CFBF9DA36679A9F3ED6F9A576A0D5B9C556A5CD4B6C8CC6A6B2A1C2B57F2C210525C7167ECD884CF520EF8DBB15F09B03D85C3AB09829E89689C9632E5CB084B005D82193635A728A5CA5E2F1B33118C33152C05A9481C4FC45CB6B46A3D35B6D38ECDBDA27B6CEC7D8699ECA35DE67A5B2A60AD4DD0B0FBAED3A5C512AB32A7782EE19FB20199E6629DDB7F813D98ED8AD788C5E59869D393C44CC5CA4151513772924D75BD2B6ADFBB11F11B1B904D9B82C4A55312BF941366B5D8BB8A7A5ECE7AE7DACBB7CED8A94E51DADF69B9D6A1FE2922A285A7EA32E4308A732DA4AE95E42561D4813D3AC99315D88FE99FB33839A56BCB70C9EE8828224202878B39F7766893ED0F6867E67C5364932CADC800D01FF0026E47211D79A9CCF2D06BA99346E51B34FC011C6F2EA14E71FDA59714789449F11BA8DE099938F42E1BE1865F95E1E5CC91C3DDCA1F227858D00A017A352C34B4727C7E0B187172A6AA615AE693C40D804B6B6FB0D8986AA253ED24D45112A6DC50214A3050526410150A9E7D248F73AC4ABBFCBB1197CC4912D52D52FA8208B1D34F037AC4FC932A470778A4A66242788022B6D8E9D5ECC77B799EDC7B60469F6F43653AE7356B260DAD2BCA9350F374FDD9F1B8982F25B3226C419F2DB1E6FC2FC0CC8979F9CE152B0FDF77E66059948E3078B8BF71F9BE96B35AED83CEA52705350270AA18004D4D59C3DBD8058456B4E8A377EB05552B156B5713882B594A9C995AA4909F12A547D63963B2E7787949C261B2B92014A502529A80064A45052C00D3A544727CCF118B56350B12C2A49987E7A1FEED989A9B5ACFCA2DCCA3B77ED9748E937F4A69BED0732CB34CB882CA7256DC7154E50E921C484F7A1290A2A26C800CFC38FE7FF000772AFF51C366430B865CF52F8CCDEE659980B823E729E22D472F5B728EB595670A95932E5A9652F29B85C80696634F1F48A997589A4A751CCFF00CC562D4E3CB741BADC7945C52894F52B24FBCC0DF1D672D9672AC36170E80C1090030D801BEDD1E968E42A44CC4663326C90425535CA49B7CC6C4DDDA837A5A120AF55434C9EE032DA4ABBB571F115C9BCF3116B9E7BF9CB6653D73A5A454FCA34DC375F3E9511379980BC3CB48A900B80795F402D460C4794642A215008B7E5BEC3DE01EBB8C3DECDA3B9918A333E5252E09D686C2C746B5ED588CC04B4852828555AD2BCACC5B9F95995B5504CC72E5B7E1F84F9EE3103DE4C5E2A6853F0F116F07E41FECFD0C6B98E1857853C54E54F2F7CAD0EAC54A85E6E39C8B18F78F4FD92E3D6212661D4011C377E5FC74D1DC5EB0EAC55A81B2A662DCA39FA4DF7F8E1C4454D90B0E18815F467BD7CBD63B31A83FF0030F9729F3FDF5C5772ACAB109E1FF714DD5EC0023C58BB56F1C87064FCBCF5237BD9FDF8454B9AEFFF00501BFE1FBF23B62EF2329594FEF248BF27D37D7F2748BBE560F9DFC3C0D9B56AD9A2B8CE261572771BF33B7A4795B9DA30DB13964C40A2D887A8D46947F7CF5BC6096A6000B063CECDA06EB5F1115F660B2961D00F8942537BC03B73FC7737387196CA54942C2D7C65ACE76B6B4BDEE1E2D3804898A4BA4900B7A87B3378FD1C44F3B1CD74E7669AB726CED2F2D2AAEA80D5537C6A094A0A92D789174FD9513F64091B49C72EEDC61246213338A5853F1338043814A1D4B57A88BAAA4495E0D49525259140D770E5F7B8B92F5762447BBBD9F6BC0E06B32CAEB52BCA6AE9D872A11C21E6EA389A056DC2B885D4549909244CEE31E5DCEF2C4712FE4E15851E152404941770411B30B50EF78F3E76CA58C3E216A909EED890C000FC8351CFE34AC535ED49D82A35A6529ED5740E4E9A7AB6997D59BE9DA75A54A76525A0F155B7014F42516DBA623B2ACF335C3ABFD3B178F9AA2974A165D299A935E16FDA3803246F7DE1976471844EFF0076BF3A0A5CD5241AF9FDEB5871F656FA6A3B60F628EC4B24EC374A766CF6754BA42A2B02AA5CCC9144A52AB6B5750B4F74EB6543854A5241BC81320638FF006E3FA61CB3E296738DCFCCBE2C6E2780A94093FB53C3B905C72A0F38F72F60BE2CCBECC65430D310172C20339B33B3537F6E4C770B49FF00E240F69CD7DA86974E649D911454BAF52A12DA73AA5592952925C20A99E4992795AFE7C5F34FE89A46094B64148960924836A126FE941B6F0DF3FF008FABC3A138B4A949134AC896096649203902869B56A23D6CCB7E946EDBB32C8727CCF30D00AA3AB553A5754C8CCD874B8A7109264049038493CAF18E793FFA5BCBA54E992C4E49282C42914046C7463A87A5F78E6B9B7F54D8891296944A293C24385549B6DADC0E61A299ED17DB175FEB9D65A375E55E96FF0039A3D756B651F5E689FF003894A1710009001BC19E587184FE9EB0F830A40C425282188018116FF9023E9CE38ECEFEA5313331C27AE5296EB772A22C6E28CC5B4DA2E36BE93BED716BA5A2CB745B8E14252DA17F5C6E13090904CB7113CE4EFE7784CDBE03E4B800A5290272E6D4B121D89ADEB4F623B1645FD5CCC95874CB9A42025200E2581A731FE0B062D13CFF00F78C76CB45979ACCD74D251E00A4B66B2941822C2C276B0B6D1B6C6051F02B01895BE1F0EA4826CEA557A380F5F3B3E8669FD59AA705844D0285C85E8D4B6BF93BD693CFFE94CED32B5EAACB2A749A99A3A9A6ABA45BBF5D6D40F7ECB8D6E102078B91F23D7177C87FA70913264B5AE5174A90B49E134620EAEF51B8D2D58E4B9E7F5278EC6098133490A0A0C0D3E67BD18B83B1AED1E5CE7FAD2B97FC56A2B1A5533B9AD53F54A417F8E3BC79C7AD06DF6EFF00083B63DA3D83EC09CAA4C994A5525A5090E9A06006A4BF3D8EB68E099DFC44958F9CB9B3308959592492D5737A03D6DBC5199DEB069D0950A8E2E2E20B4F111B5AE49826DCF9FC477AC16449290854B414A406FDB5B3863E477BC404ACD70D9B14BE1C21ACFA7FEDD2CF435F18A7B506A469C04A5C22247085189322C41E66D63E51B62D797E4D230DF34B9684ACB5001E069B0FA18939494380848036B742FA3015D5AF58A8F33CE0155DC8E22A27C5B983B8B4FA1E67CA716C912A67CA9324CCE166A3F326C69E874261F224226065241069BD01E777B58E910BCC3356C93E3937BF15ED6E93D39CFB8E27646267A180C228B5D81B55A8DE7CE159396C90414CA1D5A8DCE84EBD1BC221B9A66685442828F8A4CC98F599300733D05AF13382C50278A7617BB240624786C0914DE9A4484AC24B42920A1D542CCDCF46A90DCF4AD6227515C8415149009DC8B4EFE9CC7BFE18B1C8C52267082C4358DACFAB8B9DBC6257825CD480B47101448B81666A7A8E9BC30D4D625704A8929B013D77E7E5D2FF002C4B4AC1A26BA811F3352D517634FAB57C21F485A657CA80C9147FDA080395EA1BC690C4FD741549227A137378DBF641F5C3A392CA9DC2ABA81B9F114F7AEF1212D32D4C4A58D093AF23F7F5D6120A90A0AB9BC5A48B74236F3103F1C18D9A8CA25A4A93C6E0806AFA3E9AE8FB43D4CA3352D2DC70D9BAD4D7670046A55401D2D7F4F5B1B8F761B4BCF70D3C1E342411404B1AD742F4EBFCC2FF00A25CCA4C25540CC0D35AF263E35D4437D655B29E1529E5A0DEE0124817E578063CB68E85EA71689A03106DC2011EF53EB6687B8595330A0894B28B384D1DFF003E957B086F73336F84B6CD42D40FF470290099EB11BF3369EBB61BCCC4E2CA9908330A59A9E9507969B0787ABC389ACA9ACB2352C589A8343420DBEE61B8D0BB592EAA95252824951793C4679804D8EFCBD712381C4255FF00F50099007ED330815DEBF9D4522470D3E5C84B2C150B003A369CBFC5C9C0AE812420D32BBC1027894B00C5E3700C748BFAE36C766794CB0D3319294002C389346E60E85BF9B4384E3E5A50A12D290821D55677AEAD7A873A36E63356599AD78032ECA6AF306D32169650F2BBBE232094212ADFCC72DF618A466BDAACAA43B4F94B4A6FF324003667D8DBEACF11E3159782B5AD6896AD0B713F27D08A0D2ADE12BD3BD9B6BDCF9E4D3657A5F365B8B20049A1A94A2FB4AD6C817E4662FBF2C52E6FC4CC9302A509788912D44D077881BFFDCF47A8A6CCF0CE766523898AF89239368F5F3B5B5EB7F647EC4FED1BA9592EE5FD9E2EB1901254A7F33A7A5EEC2EE0F0BAA4933D22C79E29B9EFF51585C866265CB2311DE71550AE266009A876D9F5BF3868ACD70284ACCCC426514D5296B96347A7D757B18B5322FA373B79CD78467196B7908541505D6D255F08F4EF8EDE5EEC5626FF0054D85980032542EE0A54DE3F2F56B5E1827B4985492EA0A4BE8A29FCB03FE22CCA6FA2AF523A38F3DD7AD50A94077484D132E1FF00571290E72F3E57E830D07F536B72AC1E14CC209E26251C3CEA9AE85EC393B05876B30E1242425059A8429DB91D5EDA58D61DE9FE8AE0820ABB4B440DBFF86A26FBC78EDB9BC09C34C57F5238FC494AA6E5A66105C1E3A83E29E42B082FB53289FDE189DFF173AB46EAAFA2DA9C371FFED6114EA13C08394A55DE1F52E7863AF5E76C43E3BFA94CD019694E0A64B4D4169855C351A70F2AF4DCD7795DA9C3A1DD6140DC7133F5B575AFA6B5FE75F45E6BC4073FC3FAADACE42BEC90D314A1C8DA429C1E42F204DB78C2F23FA93C50E156225AC002EE49F06497F4F4787D23B5387B258053BFCD4F0F3B33EDCE9ED4BF4777B43E996C2E9B224D734EF19EF1BAEA425B0904C96D2B24F15E39C99F2C5CF25FEA37018C5894A05C517C4952589E7C3A837DA8EC224A467B85042C043F25025F5737DF5703778EAA6B6EC6FB44D0150B6F55E4398875054389AA479C4A00B9FE6B2DA926D17E288E918EA7967C70CB25A4292B94870EAF9C135B386241DEB534262770DDA3953662509295710600A9AA2B525BC45FC1E2AA5BE5B5C3CDAC380C354EEB65B24C90788AC03311B89DC62DD84F8AB96E6B294A18847180591C4002FA00E2B436E578773D5331E4F0A824A59CA485B3EC5DFC34D8E9A066C95BA9A761BE3A8BCD37D8481B9872C36BC49F5C472BB55FEA738CA968E1492DC4CDADDC063BDCBFAC269C9E7A921E62B84F11EF1C93CA8FAD9CF8467515AD28B694B85156DF107D909527B90A8E1874001CE213B1F0EC45AEE8E4F3023BE91892B2594521A85BD59FCA1C232AC4489615C4BE136507636A91D2F4D6D5847DF892413277B9927CCC74EBD7094B54E0A6C42485248F995AB6CFD3CF5A5779721082954C4F1105C3D811C9A8FE7E158E7EB12209558D81262DCFF2FC3125326A26A50090B2072F201B4FAF487188C41527810A5252CCC090C3D3CBF980BE15F68957A927EF18D5D2400500B6E7F888D12824B82C6B6045FC63732F4C80600B6FB03BC08B72DB029408AA016B57FC5BDB465482AA1538B5BAE9D7DD21636F264C44DA4733F2B72F5B7963744E280C9A0B30342D4AB01E3184CAE0FDA5B5760EF1BFBF09E1BEF78FD8936EB1F2B37514051213525F66A79746D21708E200AABB121DFC1E961F6852DD4A6D06D17DE4738FBBCE7973C63BCE41C73F6D4FAC379B2900314860FB33574BEB6878CBEA412B24DAD37F75B616E971CF960331F4F5FE222E749410484802A6C36FADEAD7F08EDB6A0040701045BF3C31CB7304BA7FDB2FA579BFA3F378F3BE0813C15616661576D74F22D78A97340544F0DE27693D3A6DF2C5AA5E6A5293C2082756FF001A37BAC5E72C07C68E3A83CC7DE2B8CE5278556379E477822FEFF909279989C7672B03F6B9666DFA9D41BEDE16B9E0DE83D1EE29AE971E7B08AC734596EA29D441E0495950E5E11B73DF973F7C028E5D98AA695F10201DFC81D18EF4A79C5D3286A92C188B8DEFCADA9E95B98655D7AD550FD7107BA2A40A640994A93092A02D1E200ED1067152ED203384CB9A1E571B51E2EC84F1C9E009A81F317A105F6E434B691EA87B17F6AD539AE96AED10F362B73FA1EE0D0075F08516D6B538EAC15595DD340280327C3000918E059E610A662D4B5129413C619DCA8B245011AD0ED1C7FB6F9605A953254BFF006A603C079A5B8DC1A8A83B69B47A5DA2B519C9DD65D72BCE6B475414D66C1D6781B6A41406FB95CA48BA91294C18E2DAE68F98658713254152FBB5A6B2A60357049D1B50E4127504B472CC0A97976238D880F50E5AFE43C3C63A43EDADECD20297DAAF674B41A0AF4AAA33BC9A9A9D24502909096C95004AC3CAE25C25238660ED8E87F0A73F4489F3F29CD4044F96129C34F5B0FD55092364F7618126A6E23AEE4D9C4A9D2901DDD8104FEDDDC1F3371E05A3ABFEC4344731EDD326555708144E540A9429B0A054195252786265244D872F5C4C7C40C6CA380C47E9CA44DA061C24873A91B8A3BF8C3BED14AC3FE88CE511C2A4121D80703CEB4B5483A08FA26A3AE6695960B550AA86D68285A12DA95C240E14400098D87B8EDB63CB39B058E352A50410494A9C55EA4FD7634AEB1E54CFB339471CB94140A7BC29E170D73B694F26DC9892643A5DDAAA866BAB6A0B742B2E29E6DC470020FD910A20F316F973C73CC51C4AD6A329454F4F94BB7BAD4EDA5A3599230DFA633BE57E1A3B6DAEDD75AECF120CCF55E95D2A834B42DB4ED50078DDE107855CB84949111CC1E9230861F23CC33450E2428F0961720FF8F2D4F3A34F993B153552E44D52425458A7C7A7954DF48A0F57F6A4CD5171BA8AD524F8821B4A484EFB5845AC49881BF91E89D9FEC7CD94A4999873421DC3BDA963BF8C38919762D5533D570EE4DA806B715A39AE9143E79ACEA56C3ECAEB514A1EF152AFBB42CAF80F12BA14C6D7371EB8EC99476792908030BC4A02AC198598EFA6BD280C4FE172013402B9D5531A834AB5A87DD0C75E750EBACD16FD7BF515EAA86698B68427842678FC2600D87BA062EB23245CA4251264103CD893ADA874E4EE3533527B2D216C14B0A70EE69B1621EBE3D62AACFB53BA1C4968948209510A241E200FBB7F2F7462DD90F673118824CE2A961E9C5B6B41AD830E6FC9599934BCBD8CA214FB537A0BE962DB83CABECC351BAE182BEA6EAF5226E2C0F95E2D8BE60FB3699443CCE2F02C7C2DBFF0D573250490C1B42CE6EFD6C4D76A5E910DADCDD6E470B920C830AE978DEC7E43C862DB84CBE54A041097A0A8BDB7BFE7C62730F24380C5A95B3EE3DF5D5E2235F98BE6DC6522F2662C3CB909F3E76224E26E461E426A780780E5B0D89AFD627E4CB40482000534059DABB6E74F1DC4465DCC9C3FD44949224107E22FBCED8713B2CC3E350C3853B148A55B40D6B757EB1208C009A54501ADA6CCD5FC4335557B841324037BEDF3888E9CE7E1ACAECDA10070CD34B86ADFABF95442A32E54B7E21A8615DAB6229B5872AD5B055ADC2B009514C4917DE46F7BDCF5C494ACBE6618057116A358380CE19E8D4E96A5A164604B3F091ADAA6BB5ADE81EB085FA9B9922FBCD88E563BC8B79FBB0E06231086F914AF3A6BB73FC3DE1C0C3B1143535F0A0E7A1A68C79B205D5A927C2241BDCC7E22F63373870AC2E1B31923F56B4208144AD41243BEAA21E9A535DDE24B0613294788B6940ECDAF20CDF6D0C6C69398559029E92A1F9B70B2D38EA8F580DA56A3E71F28C44623B3F93212B51C74892054ABBE4D80D7E70283916D5E1D4CC5C8428A52A4BB56C35A5F517FB1898E9FECEF59EA4714C659A77347AA8A929612ED154B485294760B71909BDAE2C23CED48CE3B4390E43C6A939B61A7AA557804D43BEA080B27CD9EACE2194ECCA4CB524AD6025479114205081F9D83DE3B1FA33D823DA6B5829AA8A8D24DE5F93B852A354E56D105A5B55C9EED4B42E40E5636E471C7B35FEA7728C8B10A9070DFA8992CB06248537309203B1673E7584F159E6065CB4893344C24328BB70B36F42FD37D03C76AB4B7D18342E37DE6AAED03F83D43010A7E8D1446A038A31C480B69C8B796F6EA46396F6CBFA9CC776904B9595E58A9281C41644E32D9EA09701EDC9BC62B38EED62A505044C03621890297BBEBF715A76234B7B0C7B3A69A6D0D66D4BFE2CAB4402B57D6A8F8C88BD94A001E7726FF001E653FE26F697304F0A27CDC0F15E6199DE316BB13FE69688299DAB985FBC99C6F70297E8D5D5A8DCDE2F1D37D897635A24B8E696ECC6932E53DC25C79DAD35A1E0DC701087D2BE1E1E805EF388239FF006967A97FA9CF66E212A6F9423848FF00C4DCE9CB486533B461638904855C7CDE7AE8DD7D4C58ADE6EBCB1B0C65596E5542DA4404A72AA25280116E3EE38BD6FD245F1018ACAE7E366F7B3313882B26FDF4C0097B9653005C0B5F5BB207B4734D02CD5C1D7E9D46A2352B35CCEA7C4FAD3FE90C3696072990D848239C11E58565E117824A93889A663B7EF256D5A312FB8B7E62BF9AE753D750B21C9700967028F5D2A77F368D2A7EA957E37D20C41EF17CB7E7EB6EBBE1C24E1D54E140F2FC52FE3E110A3339E47EF556ACE58BFB0EF189A779D952DE748039B8B813D25437F9ED6C3D96990406425B56001E868EF7E9A5A31FEA9882ED315E2F4F33F6869A969D6C9875C302DFCC549173D7D3E7E787C89120904048D9C0DABB7BF53FD4E79A7117143534E8FC9FD3AC3154BC040A975D41FE8BAC91783B137E5EB1698385D381C2CCAA9085686836E4FBFD615959A620280E3350C2A59F5D77E5A5EB0D8E54BE3FF97CC9F644DBFE27431CFEE9C67FD270CA344A48D030B9F3FE6FC83E4669884D96A0372496BF3FF3053E619E33C6E0CE9C5017871B2B00F48595020F39C2BFE888A04A824AA80A5203D2EE08E5F6112387CE31003898ADB5BDADEBD6DAC6AADD4A9CDA9D596EA2C872ECFE81D05B794ED1D2B2BE056F0BEE4AE483BA4838513D9854A2A5C9C64C96B50A1E252803D38A97B35EB1252F3EC48293DE2C503976A35598B8F27A523AFBDA07B24FB3376A34AE53D16408D199ED5059773D6DDA9A914AEAEE1429414B6A9262DB74DB1B6165F68F245CCC4A272F1C5052A912BBCEEC283BA83BD29A11BD8C5FFB2DDAD9786501899C4059657117E837EB56D63CC6EDAFD81FB44EC9456661A5595768FA71216EA33AA608A27A9DB00A84D224A9E547D93693C338EE1D90F89E8C5A256071F2460F14964AC2D4286CE16400697A86A08EC9957697018A530527829C21C11CDDBCDBA523CF9AA7336A5AEAACBF36A3768DDA359406DE694D380DC292AE24851E1B8F10EB78C77CC9BB43230C12B13C6202C0243BD1AD42DE3E517644FC3622524A4A4F10B023A585CF854D79469EFD179880379B7A13C8FF00B6F8B81C761339960238252D983303B3E84B9EB4BC4163B0E2BC15B503F5BB36BE1A93A6C53E821245C1D8F5B5C5BA1DE074DB9C4FE8E76114F31F8093C24B904540D0B7E5F788C1294160A9F57A31A386234D1A30EF93FB9FCB193300A91EBFC42BC0373E9F88DCD3DF6B87CB9FE630779CBD7F883806E7D3F10B1B789F23B1FC2D1F3FD70779CBD7F883BB1B98C9EA854A60FC083F1B5FF1E671A2E630AD01E62BD76FE6374C9777A0D1DDFEA3DEFA728A93C8DBEEF740DFAC1BE11131C5C3D039B5EC694D07DED09CD906AC016A74DF7776E7B0877A0AA502A8369111E51BDB73BF2F2C678EA694A372DF4AC45CD90E750350C0D3EA7C34BC77CF51E5EB71C5051932AF0404F3200046F7FDED8432B12183292C19EA090F570FD3D63CC9817E2041A0D2F4B963420877F2A4545A859772E085200A5EF42A54921F2E70FA4F0C6D1F9E2DF839586C43844C042400414B33DAE35B6DE517DCB9822C1880C7AF2F2ADEF152672FD528A8877BD1CFC011689E83CB7F5DB18C5E512149078D2C7567B9DDF5736FF371C194B25CF2DC8A91F7E6CF6B456F9A07090A75239806C67AEDB7A7A4DB7849B21182A022AEC436AF7B74FA1BC5C32F21201497E4C777E57AED5884D70001B08DE3901FEF73CA715FC7244E428F0D4824017A1B791F0A6D175C11331043162C1B660FE15F758977649AF33CECFF005EE459FE56FA99629EA52DD692B012A6DF5A5BF182608095288F7F4C735CE32B528F1000A49571029D85C93B35CF8436CD728958AC0E213351C5340FF60B1F95CFCD4A03AD76018C7BED91EAAA6CDB2ECB731A65A2A29336A661C438D11C3DE25B4174786D3DE133D31CEF1D8732C2A581F32497B549B7A5ECE2F1C073FCA15855AC80C1CB162373E9CDDDB58B9F24AFA4A9A07B25CDD947F0ACE98729EA9D7877A965250A42086D5C533C53E1162271CEB3ECDC6553A44E49289D20A8A568F96F7729BBF32D70221F2699311315FEE94A4104F83DABA1D1C6D1D4EEC5FD9A33FECFBDAC296AB4A65CEE69A1F3172B2A1CAD282C329EF2956BDD60D92E2C8104440DA6D50CE7E2262716854B2E02B84125454DC2AF3AFAED61161CFB389588CB061D5891DECA4A8218D55C40BDB6A7531EBE64793653A529EA5FACAA6DDAC078D146B4825854CC49242A77988B4EDB55B179C62335526570144920052AE5541E219ABAF8011E67CCB2B2BC72A709DC40ADEAE3FB9C6AE06A01BD05E23F9F6B5ACCE10F34BE1629590784A385B1C2245B8426F6F5117D8E25328CA6520FCB24952AA5C955FF00F559DFA56D589718713B0DDCF7CC4A48DB403536DF4E44B375A7546B1656FA99A373BC5D39525DF119BED249BF2F2B7588EB1D9EC9A58964AE5A52E450A406F120120FF8E6CB2CC84C99B316495125C5BA915A7BD6F1486A0D50A056A2A04DFA488E62DE9E98E8784C0E1E4814492350D635A90187E6AFBCCAF00A4B324834AB1F2E75714BB549D6A1CEF527D65B2B5BE5A53615C12779F2E5B01F0C5A72F12D3312132854B6E5AFD0EFBF898504AC4A0060AA52943F47AD87561147E6DAA1E53EB6CFF310A2249D94394DAF07998EBD063A265987C34D4874A5058559EBB917AE95A3738591331628EA013A69FE0DB6ADDA2279C67C9643243E58EF02B89253C7C7CA24ED1C84CE2CD84CB82D4B200570B70914636D285C1D4D1D856B12983953B140F1254403525C9E6C0D9F666D5E21D579AD1B92A7495F9DD03DC200F5F85A31312F2E5AC072CC5A877E96A6B5DF78969381525884B39A505EDCB4AF97278D556654C920D22E5641E23C53C3D01067AFDD322D8772B2F41238E604116255FCB8E571B077893958650E1E305AE094B38B0667FBD9C07BB1D43F5AB9716F828BCA2104C45C5AF7F41720F39C2BFA1C3BB1C5A470FF00DC001B33A8EDA8A57568934F0A40484B1FF95459C825E95BEA46E2195758B0A8A5A4A82B9873BB65D7E49D884A52A22FD3A6DCB0B7EBF23CA10AFD66632934FEF58727C4D39FF989EC0A4A05D04914248F3A9D43FF00910FB94697D5BAA1D45365390E6B5EEB842508FE1B54CA5449B7F30B010073927E57C41E3BE21766B02852A5E658770FF2F7A8A9E4EA716F52D0EE6E265CA6134A43E80A4DBA758BAF4EFB1DFB456A250FE13A25CA3A77F83BD79EAA6124A55B1097824A60192239DF96396E7DF1FB26CB57C266226F0F170942F8830AFF00692396B7B3C68730C1A038989516622CDCAA3AFE2B1DA1D19F45CEBECD908ADD65AA5BD3E084A9D6BB962A7867ED0FE5BA0DAE3913CA39F3BC6FF565270C95FE9307FA8526C97297BD1CA5B415BDBC5BCCCD7082C108AB12EEEF6A55B7B45FDA73E8DFEC8723528EA8D53FE27523861A148FD206787EDA7890BF1F19040998F8E395F68BFA9CCF7B41C49C3E5F3B0411FB4A2612EE4D7E516E6C0F48AC66FDA456087FF293434CBD02883E20FA5FC5A3B0DA47D9DFD9F340703990E8C65EAE6C828A879C79E0549FEA28792B499B7236C73B9BF127B639B288566B899725414152FE6143A3B83EC86357A64FED1CE9B314B5A895A8D482C36D282DB8BB98B869AA58A64A5A6724CB1B61B1C34E96F2EA442909800CA92C711311751B462117271D8854C9EAC7E20AA6D55C53A6904F205675A9A798863373EC4AC01C67CDEAE343EC55E1CD2FD4D4A78471B083601B529A17E894948827947DD66B338E516989EFC821CA839FFC8824FD81D4C47AF339EA720A8F16B51BB8DB9D3F98D468452294A538A25DDF8D5C5B7BEF37DBCF1A771FADA22477406A05075A026DEED0C311899F32E49376726DABD7C347784AA4324C828F23001E5D0CEFB637FF004DC423F602A6152E453CFED5D79B41326AA951E20BF58E50A4A66556E84CFC24DBF19F2C06662B0F4EE896E4F50C7C793EBD68ACA335C072491AEE082E599BC6B4DE352D6CDE4A63F7E53BFECE105E718B92DFFCBA88AB104F3DB978C39E09859A85AAC01E5A9D2DF88C5A75A4856C7C847E53E9FB8798654ECDD1C53126504EE2EE48B167F1F08CFE9153182FE63573D6B6EBBD9F68D6AA865332073E6246FE40DBE1F761FCBCA59BE634B6E7ECC7CE3539730D0B1D6FD286A7C18BBBDA105454B728BCEFB1E7EEBFC236E987B2F2D20B124333B936AF3D34D7CA31FE9ED7040D75F1753F46F65B9CA84110543C849FDC7CF0F51810CDC64B5F95DB5AF3DF58DBFD39C58685EDE05DFEA7470CF0D954A6D7C3E14922FF003E5B9005FF0008C3D9187E1242AA92E1C6C00BDEFF00687787CB9249A07D8536D7A8F2AD21B1E423FB42444FA5FA81B7E1BE1F22525CB38E8FE546F53F7872701C24961D0D7C3A569F567742B284F100A067748833CF9C7FBFCB798274B0148048AD0D08EB736D9B5E90230C906CCDEF7E9AF386CA85260CC08312204FC23CF7EB783862BCC71F2AA994A34B3134DEC76E9CEF0A09006AFC9BEEF7DA9E570DAF02D34F5624A5229C0E2480257C5B7BF6DA4C9F84BE5988C4E34844F4AA5F17ED7AD06F4A74FA968AEE7388C4E1969FD3F130AB87172294E67EB0647A9730CB4B9581487B2F78143CC54A50F36A6D52850E07828010790B1E9C94CDF03879C8017F22E59E274ABBB248A872962588F1B8BC4F7677B4F8EC3AD1C4B50346049DABD3C5AD1D6FEDE3D913B30EDD32BCC73ED0E8A7CA35EA9A5BCA2DB6509A87402A212DABBB641E104481E7CF09E4DDBACCB24C477338CC9B2414212A249090282DC44B6B5D23BF767BB5EA9C2524ACF0967756D70CCFA53C447833DA4765FAA3B34D4359A5B55D15465CED23EB4BAFB8857054A428A9252A808BA40FB24EE3D71EA2EC56732332972F153316996DC2A282B1F33B16151D08AD6B526BD6B059849C5042E5965AA9C1722D5AB3EF70D4E8212E555138D34C50345A6980A06655C449B9955CC993B9FBB1D4F1B9EC9C721126524112D207159DF9B68D6D77A51DE230E95A8AC91C440E2200A1B587859B972D1C6AEBF21F96233BD2400D416AFF0010DFB8FF00BFFF006FFF0054668708993F2FD318EF08B06F183B8FFBFF00F6FF00319F7C46CA23DDFA6326613704F53FC41DC7FDFF00FB7FFAA39EFF00A92A1F77EFD0E1099340D58ECEED7D1BCF997D614461C382EED7D1DDFAC6F6DEDA0CFA5BCFCC79C1C23DEDFE6F4E9CBD3C79C6B3648014F534F7D7C07850876A2A88E3BEF69FD8B6F06FD6D80CEAB1557A7BB36DAF945CF94CEC1A95F4377DEF4D758F7DB59FB27D26A443B5DA635EB4942C2968CBCD121244EC8EF56B493FDBFA63CBF947C4ECDA44D48C4E1A64A941899A492E05E806EDE7E11E55C0844BE22B0F41C20D385B67BF51D6F1D57D4FEC9BDAC65EA29A3C9139937E28A94D653A83813B28202D453D62FE9B01D3F2DF8BB8698024CD5255F2820829ABEE40BD6C7E916DCB6721012153122F471A8B73DB7A6978EB4EB7EC3FB48C982FEBDA7EAD8E1E204B2D29F802D6EE90A99E9F0E98B02FE26CA29ACE43B3B1983ABDC1FF000E368B860F1B87494954C0C0D9C397AFDC98EB8E75A4751D2A887B29CD94429524E5D569098EA7BA88EB3B615C2F6EB038E5813F152D1A00482DA9B97E9A79C5B7058CC3A923BB5252DFF70735A6AFA68CF4A59EB6CD686B698AC3F4952D116875871B20DADE2408DF9F9CED8B049CE32EC427E4C44B503A710D7C7D9F38BDE498A925B8949B860E0877EBEC79986BC1D70A9A69EEE8929936B292414C90445F698E5CC5A2B369D84282D310EC5CB86E46F4FA3F9C5ED69C2AF0EEA29720FCAC0D1B4A56D7E7AD48F5BBD897B40CC75664343D9C966A2B333D36427EB010B7439F5A73BC400A09527C298FEAEB2236E319EE3F012664D267A0281759E260C1D99CB5A9A39DEB1C4BB7B83C3C997DE808952E6F1F761C1248FDCE2E2A4DC748F63B4776415EFB8C661AB9C34F42D842A9A9140053F61C40F010A4418FB42083E58E19DA8CCB09984F54BC1ABBF525C4C20370F9D08D3D46B1C1262E5CA4620A2684A8711005C8D350DD69AD758EC054578CBE9A8B23D3342C656FD1021CAE86DF754DA882485A815094822CA3BDE6F8A0A32B5A97326CC26622614F025B878384D41A56B7E948E5D98E678C998832D2B581C443B96356B68D5D76DA2B5D4B5685E66A78B8BE3504F7AE952825E21104845922FD2D04C729B4E599710B4B49766B0766E751E773D69B4DC22D720CC2A3C5C2E473DE9A170DCBC22A8D619D56B4C2DAA5580D1042B848063A7AFAF39922F8E9F926024F1A4AE50E2A3063E2EDA534B73310984462BF50996A52B84A83925B5FA1BBD0C75A33DCE99CB96A595CBAF93DECA88BA45AE491E91D6F16C5B71B2C20CA12889628080DBDF7726CFEB58BDCC989CBA52149F9CA920921EB4D48DA8D14CEA4D5C885F0EFE216923A5F96FEBBEF7C5E7B3B9461315C2676252E786854075A936E9E109CACDD2B3F3CBF4AEC28D4D2D41E315257EA1A7AB2454B6F786780212E2A49B5C207BC75F863A748C83072C20CB5C8530A9336586B6EADBD626F0B889136E024D1DDB6AB747D08E7CE34BA2CD337738327CAEBDD5AA424A28EA0DE3707BB20FCC5B91061CCF46558297C5331D2249009ACD411E6547C6C37E526818472192E1BFE3ABF87F9AC3ED0F60DDB16A984E59A6AAEA9498E02F27EABC1C7B7FC54A42E6D244C75938A7665F1532AECC71204E938E4BFF6CD4929035F94A987D5EBA44B613F472C1F9D32FC8B33D81607D88B334FFB047B43EA2527F88E548CBA8D712A35348A294D8981C4156116B138A4637FA95CAB0AB5265C932C870C3896D70F6200E861FAA7E0D80EF25922A15C4915BD9F77BEF17264FF00462E6301CCFF005CA72050E12E205222AFBFE6A00A1CF0F0DC08DF79B629999FF519889EEBC061D734172BF9CA0827F6B710F5AD199E90D66E6928278664C42B87FE991C3F2B9E4EFCBFCC5E5A4FE8FEEC5721EED5A93509D44EA2EB47D5AA69C2C8DC781440980091B75077A2661F1E7B43382C4A91370EA2E1333BE2BE1E60354F2AF5111ABCD81042A7858D8003D6AFF6DC98BFF21F673F678D2602F24ECFD8AB7EDC750ED4BAB00A2784F76EA488277023998DF146CC3B5DDACED3F12B139DCF4A0542424A59E8CE0B9D2A5C44163F3C561DBB952ABA851F1B1DCFF116AE5E9A1C95A14FA7322CA72E69B84A5272EA275691C80716CF17BE7CE462BD88CBB34C414AB119A6216D60264C079D38ABA73110ABED16281A2967672487F115E9AC6E7EBF50BDE27D6CB68FE8EE5965B007A36123A7481B63323033258527F50B98E0385F128EBAA892DAB0FA0AB39DDA0C58F99D55BDDC78339161EEAD8A756E2CF7F993A49DDB8584CF9C1F2DC6D63118789CB4104AA5850ABD03DBF9F462F4664BED062839F9C93677FF003E7FE5400C34900B21C0B175973681209124F2F5E584E6A8E0182240505120808725B5766A79EE7409CAC7CEC7179814CD406BAEE696B59ACF4846E54D2B5E215694C4FF002FBA1FF4F144F51B448E5B61CCAC589A901182295D3E600D6B701836FF00430B842D475009342C6A3504D6B7BBD9C98E59D4540D85875B48200E05752378006C236F96D892460B133EA1250EF46DC3B37BD28CEEEA561C29B8AFE94A917DB97AC3755EA8609FE49092072DB6371CF7F31E98929393A830981FA8DFE81BD29A43D978246ACC4588E953A7A0F188F556A171EE1529E8093065439F493BEC2D6EBCF0B4EC327049F96495BDD8174B741FC36B4108E2B0E89600410A05C11F4A9FCED7A437AF3C8559D4C1DA143F1EB6F31CFCF59730AC809C32EC78810AF070C1EE7EED0CD329CF090E6E77615A57E9FC423775129023BC0799F15C419117F873DAD8949382135819079BA49BBF27F5E51212F0C9201E163D4DBCD872A747844BD50A124AD244990543CB789BF3E57EB87E32394B002A5027FF00450BECCDEA21FCBC1A76FE1F4ABEA39F852139D565327BC03D543AF9903CB95FE1855191CB402112B843D404F2E87AF4F386B8C906511C20D5F9F9381F8DE342F562C890E0F14FF5A7DFBFBA3CBDD8DCE5069C29A0E458DF952BCB4F38E75A07CE3EC6BCAA7F10997AA564FF00C498B18526DCFD0EF8426E533459246C5B6F277A73BD1E3624F0B849AD8ECDCAAEFCBCE12B9A95524F1DCFFA87C7F7F3C31565D8A07F693CB86F7A0A13B59DF94612166BA6B46F3A16FE232A5D46A5F79C6A1023723DDCFDD387584CBB12A727880D4116A9D1BCBADE1D61D6438343BB86D7D3EFE718D467920CA811BC7145E27E516E9D231248C04C961CA4977DF6F06B373A73858CD27FCFE07F88C292BD355DECAD29E1893C5BF900489F5BE362860077640DAA5EDB8FAC26A9AA49AA29CCFB6A59C470FAD2A0A097048DEE0907DC64DF7B5FCF18135083594E2CC53AF3A6BE1AC6AA9E4D58FD7A685CB5FA436BCF30DB0EAAA1D2536F009F1F4FB33B72B4F2C2F2A782A4944BE0BB909F2D3CDFC01895CB72C939A85F7C4258382A67A3B8140C69A42043F963ECCADC2DA018EEC0599336F2F7EC3CF096372D9D8E6505148AF11B167D6A36DBC75847199248C32D4652D2003466A51BC5EFBF8D23625C6A9174CFD2BA685F492BA2524921E832B4A84C7900B917F8B34E130F854AE5CC94261218A88B3B8A52FCE15CB7133B07352CA20021AA6D5D3F3E24D44417B70EC334B7B50690A9A5CC2829F2ED7795D3B8BA0AA6DB4F15529292AF1A9B084494A07DB260911E2DA3E4E3B1BD9F9885C89D31380E225402947B872080C0BA828DB6B5ADDAFB359F70A90A54C09581A970C4070C4800E869B697F9D5ED2F416A2ECD35766BA475150BD4B59963EA6C294DC36EA3895DDA9B5A5210B1C204F0931378B63D07D83EDACBCDC1913480A40002890EA70EF50E3CCF2ABC75BC1E324E2A54B988980F183C4970599C56A5AA79024F9D7DC6A98813D20CFC2671D6C294A4F184929677D199F6DA1FA51C5FB520F808C16E2936B03CC117F81FDFE0D978E9083C2A5805D807D75E7E958C29007EE4B7A75B461DF2FCBE18593392B0E9623707F88C25295164873B545FAC721E5733EFB7DD184E62CAC809E8C2BB6BF56E861712BBB0EB0C0DAA6EDD6BE0F0A5B7AE20F3369DFDE479EDCEDD708A8197520872F7A93CAB0DA601707D2FCFFCE90B98A92926F04C11703CFF000E9EFC69DE23FE43667E7B7AEFE71173504A8EDCDEB4E7E14F03611EEB687EDA28B56E4B4B5F415A52AE04F1D1A5E217C560411C4166E3A7DF38E6399F626461D6102527814FC2B0078B860C29A8ADE3CD998767A74BE2480525248A0B9AEA39EB56D5EB178E49AE334453F7F4CFA815892D38BEF0A78605FBCBDFC85CEE76C51332ECD2A51504A4109B70A5B5DC5C575761B55AAD3B0B8CC3AC8429418B0BD0EB7A1058D37DE1F59ED3F380A087E9289F44C12ED2D2B93E678DB50DAFCFD0F2A8E27239D5265CE26E005AF437007260CDD6C61C49C46310A1C530BD1BFC3FDC0BD4439AF5CE555D4CBA5CD34F64F5497C4718A2A26C343FAA5419FEA9EBBD84E18AF21C793DE495CE90031502A5176EA6940FF589019B62A5283CE551810ED723622BCFCF522B5CDFB3AF67DD66EAF2FCEFB396332AFAC2502A292A1C6C256BB02453A20415036FF66188CEB38C8D4923325CB9693F32141F880E64D2F423AD6AF7CC8BB5BDC00264D2486A9558EB63B8E756E515767DF44BE94D4D5943A8B24CC93A634DBEB53D9865EB4AAA14EB44828405B8E25C4102D298266F84317F16D6B0642E712A0024FCE471102DF9DDF5BC5D95F1144891FEDCE1C481FEDA8A8324EB427E606DCAFA477C7D9F7D9C7B1BF67AA34A342D0D3D5679C094D4D6B85456E38911C443E55B5C0124016C53B1B9B6233E0A016B9724BFCC16544BF315BF372F1C73B5BDB4C4666B9AB99882B5ADC10080070B8700161A3B00FD62F7ADA8AFCDEA1E79E7128503FF00080084A06C0003853B03748F9E236528E440AE72FBD44DB155C80DA924F5276E42397CACC66CC5CCF9C92EE43DEFABFF001D2C18EA1BA868C90EAD5B7F2DB52A40B72067D66230EE5769702A2C6580FF00F73B3F40C352CC35F14CAD255C4B40E2B82456A6FAB730C2B10ECEF2DCD336EE9BA1CADFAB7D1C501495D3DD5612A5800CF9EDEEC4CE03B5584C3AD5C012C59EAF41767E5CBC21533CB049FDA6800AFD056FFCC41ABFB1BED433849527206E8A9553FCE56614EB21276250A58579C73C5830FF001272BC3AC209698080592ABEB5667DB9962F184B03C4940079102D52C34F0D1A22CE7B251CFDC0E6A4D7BFE1F553994308CB855F7FC5F693C6D984949B1379C2B9976FF173C4B396E0063925F8D426897DDD9A8C1DF6687285A6682274DE103F682C767D3F1B58564D967B21F65D4252333CE7FC431F689A77A9B8E05F63691CBFDB11E9EDC768387E4C1AF0AA028A13DF84F47FA862CCCD192890141960B37F6B7D77A0F1B356279967B3CF6099382468C4BCEA88870D53EAE229333C278A2FE93E7B618E23B5FDAF517FF599D2907FB5DEFA163A57CB7AC6FDEA01749D2EE5B67FADFADDE27796697D21A7CA7FC35A6A8A9383ECF1B0D3A44411FF0015B331FBB620330ED06758E97C189CC31334310E16B49AEC42BAD346A88DD38B9A97216435AA4937FF0015E512919B57BC022B6928D086ACC062969D98B00412D213C5B5A648F2C43E0654C26628AE74C2B238B8E6AD5FFF00B288D74617BC4763731C59002669D59A877D4F3ABF23B4267EAAA9D1C2DA96849D82145239DBC307E189232491F384B06350090FFE79C468C6E3CFFF009AB67BBBFBAFF986E4D23EEF117DC70C1044B8A264CF99318CA70A14C18005F4034B53D4185C6231441798A7A52A75D9EAFE8D7D2368A669BFB4A048DA483B6F2663F59C6DFA142A9C219EE40E8297D2947A987099939BF7AAD73CC31D7E8083AE91B05752D28225002F918E533B9EBE62E37185E4E02683FED2481AD2DA6D62C0DF43768590954C204C2549A9AD3A5074D61A6AF39A61242D23EEF94FE53CBA494BCBF1258976D86DE36A5AFE26B0A77097A02C3D3C798A5B41D6182AF5353D3000BA0C93CFA6D173E5D6D6DF129272A5A8025245AADF7EBF4D69019090C421C7476D39EAE59BC223957ABA94FF00E6206F7B731F0E5BCF3DF9E2564E50B15009A6C69E8E29F7B464E1A5A88F9051E8CFF5B7DE9ADE3D57AD92D001B766667C5C899037807DF07D7793939089A1D480A6FF00B45DEA6CFF00CF9C2B2E44A03E54B3D28E35F23E1F5AC46EAF5D1332E024F981703EF9FDDF1292BB3A84B34B48662070F2E9F4F387224814E1B5BC798F1FF26AC4FEB8248F1C8BDA76EB3064CDA67DE30FD1912524809BEC9D69F9F43194A149B06ABDC7E61ADED6E20F8EFCFC5CFDDCC7C2C230F5191BB30B96B379BD6AFE1195778BABD0FDB772D7B6BE02AC559AD9C514F0AC889FEA22F3B7EE63ADF0FE4E412CF1712126C47187FAFBA1D2329413FBEBBD6FB6F0D8E6B47044B86C6F0A3CE23F73D7D0BD4E4328544B40D43247E2AFA53F30B2252410421B9D2BB52F5D77844EEB4709003863AF11D86DB9F8F9DFD554E4B2D364D79240FB31F77D1DA2593FDB4F23EE9AC37AF59AC190B3D278A40F7491BEDBFBF7C2C32996DFB6ECE784D5B4B034A6DD2B0E901496615AD684DB66F7531A15AB7BDB29DDB621506FEA47EF95F1B272C4A5DD001E97F21E479C273A5098C0A5C8D4E9C98B7D630FF13A3FE72BFEB1F9E37FF4E47FC47FE3FC421FA51FF11E9FFF0014649D581BFB2E154EF2A063E78D55964B3FD96D923EE3DFD33FA61B0B35403B6E746A465FE3157F7FCC634FF4A957EEEBBF0A7F119FD3E8C1B664FE63735AA43C4953844742448F71F9FBB1B0CAD228897E694DB5D3A437992BBB366E8CC3DF5610B11A89B3092E18F27279CF33F0F3C68BCB4D7FDB05A96B1E8072D0C26505AD4F03E90A46A244801C2044471013D363CBC81DEFBE1BAF2A0C78A58DEC34BB346BC25DDAF7706B4FA78690BD8D428FF9A4C46EA3B73B49F2F293E986D332A4176403425B8454F887376D3EF0265077E1A1E8FCEF57A5DE168CF1A72C482636DC1F98D8FE7E8DCE5A949FD95BD874B1A7807D79C6C999364D251297BB38A3FF0027FC085CC668C9220A2368205BCF632447ECEC9AB06A0EC2FB69B3D7ED5D1A144AE6ADF896FE0F777A9A9AEF7FA2A7ABA99D085B8A03BBFB306DE2E824903AED88CC5617852410EE0D5BE85B96AF6B6B0EE5CA4B8243AA846AED434D9ECF53E149365999E694291539324A82E0385253C410601B9BC44FAF5EB4DCC6429414921D2F620B7277D798B51A25254D9929B814436D4F67AC7567DB77B00A5ED4BB305EB6D394AD3BABF4BB2E5454B4C3294BCF0755FCC2E148057C2DA55048558408B636ECD664BCB3324238FBA4A96912D4E594010E341C83FE5BAB762731981610B52969510169528B125D88B90C6B71E0F1F3DEDF7C9CD169A9416EA90E3AD34D2814F0AA9CA90F02081B7091E21D0EF8F67E419B4BC5E5492A292A54A0D624D00249A55C53CAC63BCE1132C278480A5000AAA0B712411A36BCF4A4697EA454D5BF503C285C252208129B1811D762371BEC3140CD6562958CE296A57095D6A433B5AB6B0D00E909E290002430B0FBFBF5A911C71A7AFC8E2D7830B97853C6493C22BAD479577357A437C2F0AA635C3816DCD79D6B5D7AC1C49EBFBFDFC79616CAF1697982656B47D2FEB41B810F33340084100301BF2DBAD86BAEF0718DC18F49B7FB7AFC70E715884ADF84B372BD6CF67A723CE2118867DB6BF383BCB8857A933CB6DF104A2B33388289ADF66E4F50631C2083405AE453F98BEF4CEBFCDF43E794F9965D50E9485A78A88295DDF0D81BCF01B5F613E9389CCCA4CD4A54264B2DCDE9A333756AF955AB79A64B214E90122E5D87873771AB063A47A3FD9AF6B949AC680D577E18AC69B6BEB6C71EC4A61302449317E104C11D714FC523052810B2902A5891426A5C92FAB5FA54C72ACE32B420AFE502EC58E976D2A03FF88B92975032FF000B3DF1EF098060CA89DAD33F0B9C432E6E5C16489B24DE84A74A015D7F8AD6B41C609525441205D9B715BD06DADCD9EF6EE83ECAB5B768350EB793E5B50FE54D29BFE2754B96830DAC8285202C02E710E48E5638E73DBAED8651934B95204C947133828042784BF0817297E17D373D5A2BB8D5A964996E529BDEFCB566D0135AB011DD2D15D90E98ECEDB64D251AB34CE4F0F1B6F36E0097089238DD053B93B1B45BCBCFD9BE69333C33A825243F090A492A0C492CF4E76356880C4E65370CC10B50A907ABEA4034FCEB511720D1FA973CA74BB9850A68287861084D6B6070931F612B498883613BE3974EC1E18E294938898A585314894B22EFFBAD4E6CEDE4C27768319C247129B60AA6D6F13E8C740859ECF74CE5CE17559BFD55D0656D80B724F31C5C5CAF7DB7C59F058F9F94200448336591FB94B09B5CD7DF48623113712A75AD4E6ACE6BB8B6FCEBBC3A21DD1F9780DAB2B39D2C1FF8A2A1CA5EEE01B9008E3E2F88F4C6313FABED08025E23BA425DD213C44BE875A31E5E4D0E01EE482C41362E4F56A1F62140D434ACC8CAF276E8F7E12B58A883E7C6923E0394E3597D9D9B29242E6289D4915BB3D01F7A1BC67BF528D15E0DCF701FCA13BFA8733AEF0D656B14FC00865A6E89A05C9B1054840222DB98F538DD1912A5926592CAFDC5CB6F625FC9A3638936770391FB8A35A181F4E60F2A4D33CA6C99EF9352A02277EEC1F7F4F33857FD3141642940A8EBC21D853C8F5DA35EFD4C3E7A3D8D6DD6ADA7F9AEC66899701EF2A94542E5050A3C3D07113B5AE7975C4A6193370547252451AD4B9676A1D7913A43895378C92E5F4FA1DA9A7DAA615A72DA350BBC1405B927DD333F9728C3BFD54D5DB88B9A72A59890799858924B98E54DD2D00965C4A4B932080EC91B1B931FEF8D485CF0CA4A8105810E2EDA5AB5AF2B883894050B35BDDFD61AEA734A76E4ADD4C83C92904F98E1FBA2270A0C02D5429241D473B56CFADBC633C4ADFE90CEE6754A248524C03BAA260F9FA8DEDD2C2F2585CB5612921041D0B3D4F2A57F31812C4CA6A2D6D8D1CE90CF55AB69A9F9A401207881E66768998B7A5BAE256564EB99520925BFB4DFEBCBEB1B230FC26A1F6A8007853CEBBED11BABD74DABFE1B89404CCC280BF2267EFF00C0E2464E44416E124DC534D74BF91D21D4BC3D89A1602C5C9F7B6F4D622398F682B6C2A1D49DFF00AC1BF9F8BE44FC70F9390AD80EECBF215BF4AFD0E94687430C4A696D5F9D59BEA2B10DCC3B45714524BC00122EA03F1BEDD207BF161CB7B3A560BCB714041B8D057EBF6A8877230E5AC69A569EF96BB0BC56B3B4274CFF003C1B5C718B8E5CC1D8FBF13F2FB3290C020B3EC69C85EBE7BD9A1D7E9940174D2847A3B1BDFCF61AC6730D74EBDC20BC07093B2D27AD890445C72B5AC31212BB38D5087DC375D5B5BF846BFA6511FB5B4A9B79D2CFE0F117ABD66F4121E1EE5811B473EBF2F762491D9DA0FF006DCEB415BB3D3DED5739FD312E025FA9BBB8E9D3A8A9BC323FADD4D59C701076F18E80CEFE5BF2B7962570BD9F24370330B30F64756E75610A230AA0FF00280D7D19ED5F77861ABD7727C2E5AF238A47CFA7CBA8C49272229BA7A52956AF8B74610A8C3916FB7E7F9E70D0AD7624CAEFE6A03E127FDB9E1C232276250EDA37E038AD7EF19EE0A86A474B5C6FD6F081ED729BC3969DB8A62FCEE7F2DBD70F139250108236A7F07EB1A8C31146D5EAD7D45C53EBB504379D6E924852F6E7C5E7D247C7D30EA5E48E920A59D8BB6CDEBE5AB88DFB824BB12CECCDAF8EC368D0AD689932A9F5503F8FE1F0C384E4D5B59DD9F4BE83EBE70E65618809171B31153CCF975E621139AD1004057583C561F3F7EDD05A7191947201D9C37A5479D7C61CA70E77E800000DFEDAEB7842E6B34816548DCC1FD7CB01CA3E604A75676F1760FB9A9A51E9ABC9720A52294D69E22AEFCE91A0EAB2F9F02E387FD43F3B45EF323A8C64E535A203176A7D69AB56FB18D2761EE5B85EF47D2F7F1F516783FC48EFFCCFFF00DBFF00DF8C7FA47FD89F2FE21B771FF7FF00EDFF00EA8DECEAA2D1571B9BC478F8BE65780E51FF006A4780FBA4C67F4E7424F8375DF979F9EFFF001827FE60F889F778BEF23DF8C7FA3F21FF008A7D7E5FA03E107E9D85490741BFA46D6F54A9E0781C1E189850E768B98FDEF8C8CA7874A3DC8481E845FCFEC9AB0E4E8EDCF7E9E1710B1BD46E5817418F303EE36F79DB91C6ABCB05004B3BBB5AAFBDEE1CEA4D18C2470E496143AEDE2FBC2D6B50B8AB9581111E2927E6267DDCF0D26654521F87992C3EAC2DCDEF194E18B12407D28C79BB17FAC3A53E7EB1B391CCDC193D37F38B461A9CA8104B709DCA5F9D01AB6B5D89D2038751B06F33E9EFF0FD459E2D6482E4111CC5847AF4F8729B623F17960FEDB1D5ADBF43EADB420BC3312141C9361F663AEBD4C3EB19CAC443827D45EF1BCD8DFDF798C33565E59CA496A0A5FEBB3D7D4C604B22C9DB63B0F2B44932BCC52FAF8AA163BA6E244EF3B6D24C6E0EFB79E2171D97F08F950E482CCFE24BD36D3CEF0B252DB82E1CED5E741E9BD22CFC8335A8A358718521748A0016E526124729BEE79F3988C5231F8104A93C3BDC5413A1F1FADE1CB52F6DEE7A7DE2DCD26ACB975754BCC1097B2ACD695FA6AEA75A789BFE732B65B24104594B9102058CE39BF6851330CB42652CCA58585058151C2A04B6B5142CD422F16FECC6293879C1CB391AEBD1EBCFCAF48F9CEF6DCEC453D8FF006BB9B53E5AD1672ECD2A955793A82785B525D1F58A80826CAB2C8DE4131CA31E81F87DDA6188C261E5A965CA02189B94809FA82DA72B3FA03B3D8BEF25D54486A9357A5013A0157D7C0C74D2ABBB052EB3096DCE5FEA480164CDEEA9FC31DA6465C8C4A5331828DC1AD1EBE66C7A686B162C47CE9048A1BD7A75F01F50212F193CC7CBF76C2799A46164100B508352C4D19EEF6FB5A1BE192CB1460487B59EB7B35FC290059E4418F43E938AB60712A4AD556726AFF4EBE3614A43DC6A3890973A58E9CBCFEC39C1C6AEBF218915CD2A04855DA94FC6DA188CEE81BD4E94F6F1A9D5AAC449F203FDFE7F942492AE249507BDADB7F93A36CD1B265814BFA790DDF6FCC7A3BA43D897DA2F5C86BEA1D9DBACD2B9C3158FD630D2824C1E3EEDE0950B72DEF1CF109DACF8C391484CC42E6A105415C251F3B535E10DEEBABF38C7769704B92172B12998B1747ED3714E22DAD4D6B66B4771FB2EFA323B56CA2A9399EA1D78747210A6D6AA3144CD726A4020A9254DAE121039911D31E74CF7E22FEBE6CC565B8A54C492A74F094D9C8A96176F66B4ACEBB4B97CCC32E5CDC083359A54D137F6124B9617A373DCC7A1DA23D973B3BC89348F6A0CF3FC499951F0127EAEED2071698B424C47879881C81C732C7F6AB39985412A9A82EAA85135362C08D34F0D8C714CD7321C4A505F0D4B03B6D4D816F2B477032AD5941A7B2EA6CA74F640CE554F4E8E053A82859AA000092AF00360247112761E58A2E2E566799E2A6623173A64D248E10AE2F92F6AF47635110F85C72269520AC5ADBBD1BC3D2B4763086BF546655AA2A4B08926CA0DA02B9DE4241B75B5E7CC99BCBF0F2E401DF715AAEAB378FF0098658C099AA50490E2E68C3A6CCC7576A924C372179A66055F5879E42531C0038B00850B82124585BACFBC1C4DA27E0A50FF006D12B88B392949B5AAA07DEA62115825153BBD4B1A7A6C6DA7D6323953847896A51B9924998247351FD7717C41E6D2D58B1FED6D460D76DB5D6C2BD0C4AE1308997C2A533E808E76A6AFBC6D6B23EF02C13B478BD7900227F0C23914B9B9671778E78F7D2A4B6B776F3AE85C6324215C212CEC4B0E5CFF000DF58548C992D7DA337DCCCFEE3F199C58558EE2B067E8C3ABB3F85B48622411CB7D7EA60759669C02549E7731F2263AC1D87C30267297706BCD81FB7E203294081777DBF3FC6F081DCC1A6C11C4205809B5A7CE3A5BF495912B8FFB59DF57D7AFE2F18187481F352DA93D69E7E9CD9ADFCF295B1E25A0127910368F537BF3BE1E4AC04C9A3E54BA74E4EF57E5B887985C3BD402DA1AD6FCED5FA54C45331D494C0C77C241BC28DF9DB90FDDC9DA4E464AB5172953D1836BCF7A57E9A43A1865392E4826819BEE0EBB9FB443AB75AB742210F7171CCCAC9022D6931E640E9EB89CC3F678AC0FF6D8EED7DF4B8F2DAD1B0C22B899ED5B73D75B369BF2787E65DA1A47178C738B83CBF5E7CE713B85ECD129629A1E5BB9ABF41F5AD2344E14872493A746D9CF336A6C0C40733ED0B6876082AD97122D0441E5F3E66F89AC07674A685048E8F6DC6DD2876A43BC361CB9E77A5697F434A75BC436BBB41324F79BFF00ACDCFBC4C723FB8B0E1FB3A354576E1EA3969F4EACF93874BD4D4B39AE834AF95222959AE43F056F149127ED913B8037F5BFBF13123B3547EEE81B427E809B914B386B343A4618306147AD1CD6C6BE0DE43788CD5EB068C8EF8DFAAE6DCA6F6E7BDBE589797D9B4A98F7551CBD5ACFFE7A3A4E1EB56E5B9B6B5E7AC43B3AD58DAFBBEEDF20DEE167EE9E5E66D36C4FE5DD9FEE81FF006AA2AFC3F5035AEFD61E49C307B1D19C1D2EDEF4B86788B3BA9D2265E3046DC6ABCEE7AFC671369C981AF776D4A5CFBEBD44385E19EF47D83BD3607CBF8A36BBA8D0A36748893F6D573FF508FDDBAAE8C9D229DD9ADA9FC72D6BE71A7E9056A6AEC18DC7D5B7E669B35BFA844477AA02F3E3E7E4388EE3D371CF0E1395049AA6BA387E9B37DF5A46C30E052B7A50FF001573EA219AA73D42A25D3B1DD5CA36267F73877272C4A480C0A8DC331157DDBCCB42A891566BEB5A5DF586B5E78DFF00CC83CA144DBA993CFA6DF0C3D4E5A1D9491E403EBA9D3FC6F0B7E9B97BFF00CA10D4E7483C24382F3324C7DFF8CFBA30BA32D4D999ABA13E2CF18186219EA77615EB5D36B5F786B733947F79224CF888FCE3E1BFBB0E9397A00140DB307ADDB9529BBF8C67F4C1852BC8D3EB60DB8BF846AFE309360BDA6FC479FC3E736E470A0C1A122890185C00F7E46329C355A95DDBEA490FF583F8B0BFF337FF0054C0EB73BFEE6241D7F4C904B2789DDE81EBEFA7285D3866360DE05BA0AFDFC213D466893C1FCC169B4813F33EE3B0DA231A8C3006A900B9B81AF9FBD03C3A120B8AB0D680136D39EF6E468C98E66836E3DF9123EF07F0F86F8C0C280A761D7DFE2B0E8480C38BC472D371EF5B473FC5120D9C8DB65728F51CFC87BED07E94034008E601FC74A8FA97D6761C10E030D8D7EBEDDB678E7F8B27FE67CCFF00DF83F4C3FE29FF00C53F986DFA73B0F21F98066C9FF99F3FCD6707E987FC53FF008A7F30770761E43F31BD19BA37E31E627EFF0017DD1F2C1FA61FF14FFE29FCC67B826EDE207E617339B213C5E33B8D951F8FE76B4EF8467614355218DC507466277E909F72C482068C43535B3BD5F4E421623371FF003150623C64FAF3133F39E9BB7386410FC201EB50D62E4B1EA5CFD8EE52DABEFF00C3FE617359C246EE131FEA8F4B4C7EF6EAD2661527FF004BF5BF466F00DE91A1C3A740FCEC7CADEF943A339CA0442C836985DBCB63EBCC01E47082F0A91D342C7C6FCEFEB78CA64243D1BC4926FB1FE6D7879A6CE923FF0030F23F68F4E7F9FC45CE194EC185E8F76205B9B3F98B6D0DE6C904BA412750697A59FF00C33BC49A873A4C0FE64F985493F80F39F29C355E5CC91476D19B6BEECED61630D55254E5A9B8D9AFBDF661E1131CB73D6D2140B84484DC93FB267ACF3B5B10F8BCB8A83F0D3E6E6E7714A536D61352787C7935A2C1D399FA03E805C24150B719EA3913D6D7EBCE6714BCC72E67213BF42EEDA7F986C0BBF36B16A0FB7D1B678ECEE8ECC935D4EF3282081DD13D4410641991307EF3B938E37DB1CB140899C25C3F85BCFDED0E30D8BFD3E225B1A715DCDF57DC97AB52F7B8E9CFD269D90AB53F64592F68F48D71BBA51BA82FB884CAC8A9752D278D43C4AB279F981CA63FB199D4CC2E3BB92AE14A16800380F4D282C2FCE3BE763F302B44B4B965D0DB7F16F2FA57E759550EBA029C04252A5049DBEC98363CC4796DEB8F6BF65F3046272F96A7015C1524BE9F7FBDDE3AC292424275A1EA0D7EE235973CA790BFAFCBEEC466758B4CC5292142B46BEC7714F5EB1ACAA2D3617FA1FAC6C43A6FBF2E7B7EA7D047DF5D912560B83424F838D74A335372D0EE727BD606840A86F2F7EB1B0B806E23D4E2465A295DEB7F2F2B9FA86847B8AD154E8E7EDF7FC62AAF7996D4CB090A2F885180600E932458F2BE375A8A0505073DCFA6BBBC6532120D4B87A7E49AFD0D23EE58D7D7B87F90F334A23FF2295968091784A12916E623D31F37578BC5A49054B501AACA97471FF27AFBE51F3CA5769715303AA6101EA6B5FE43ED5118703AA5A7EBD9D2CA567C08EE54A9F78988DA670B48C74C2A0F6342C03823C295B785A3188CDE74D4105448152E6ADF515F10FBC0E648A52C3D4AEF7A94C12A29E19D8EDF3369DEF89FC362659FFA92DC8D697A7DF5262A7986266CC25B88062E01D5DAA4330DAEDD21C9344BAA4210D27854CD9CB44CF4DB6F89B5BAECAC44A94B981494B2998961D0DBD2D5A44223193A4AD8053137A83D2DABDFA750BDACB5F6CDC098B4904DAF17E9B11E82F88E9DC331F8080EEE069D1F43EBCA27F098A54D62A0DB56FE9B3824C6F51553C7188045A0031B7404EC3783BF4D9A270D338832B6607D75F21CAEF1348E129D1C742EFF009FA51E95D2BAB49025503DD3D3CA3979DEC77C4B49904252407FBF99DFAF3D8319F8954BF9520921D9A8E487A300D7606D5D286123F9C374401EF078A6F206D1D7A5AE7E785958454D0C0356E2BAE9A68CDFC467033666214789241AFEE24BDC5F41D7CED114CC358776094B891C878927A81E5FBEB87587C996B3AB86A36A58F3BFA44909243D0BA7C5DDF9EDCA21B5BAD14EFF00E6A470837E310679DCEE3E78B061FB3EB2CE14E74626F66BBF9BF278DFF4E5DF57DFF9BB546819B6880E6FAD9D6F8887B69D9423AF22479FE63160C376616A1FB554D83D6DB7B1CDE35EE00AB7A1F5AFD6F15B66BDA0BE88870DE40F1F48E73CB9C1FBB16FC9FB30025416973472CEDE5A7869A562470522A6C69A0DFAD36143CEA220D98F685502DC7133FD53B6F10636F8FCB16CC3F6725A588439E9F5A55F95F6DA48E1C1B25AF63FCBFD36882669DA3383878DCDE784957BBD2D7FDC625A4644840712BA8B0D0FDF5BED77C7E98EC697DB96BB11107CCBB458E2FE77C553F79B7EE71268C9D9889543AB6DE1AF2A6F48C7E90E80B68000DF5310FA9ED0A7ED390449BAAC7A9131BF947C313383C8D731C22512433B06F56DCFD2978DD187E0366A790F7B539C45EB7B40041873CECAE77F506F61B7289C4EC9C8668209924071A52F7A57C0727DCBA9529D541C46CF6F01EFEAD11B7F5BAEA15097002264F1011D0EFF000F76DCE7B0D9404FEE4682E3A7D747EB630F112663064B02D522FABDB956CF6863ACD5CFC121D83FFAB6E53CEFCBF6226246552001C400A6DE27D9A6D7A391216CE433D4BEB40CF6036A18607F54BEB8974D898BF2EB24EDF893E78929796C9154241702A18EFA7E5FEF0F24A1449F9438B7A787AF367AC34BDA99C5132B248B595BCF94C7AEF85060D2094A6583762DFC35B975DA1C194B37413D4084ECEA0717C72E447FAC5FE26E6DF75BA6A708D6433BB8E1767DEDE756615A083BA57FC3D04277B3F59305C1CEFC5BF3F21B0EBE9B6105618B91C0430D8ED4ADFC1BD088C2A5A9AA8F4FB8722DF686D733D75572E584DA473262D3E5BFCF69DD18750154B73E61AD6E553585A5485100A505F723C47DBDD92AF3C5DBF99E9D4EDCBF630B265115B9DA94F7D75858E1A610CC5FD3F9F2109159D3A77583D25447E9E97C2F2E492C40A92761ABBFA54F846061542A5FC74E77E637E509579CB9BF797F5FD679F2FD70E44903FB69B381F7FABC6DDCA989AB3EDE9CE386B365A8A871DF7BA8FE07CF9DFF001467A120064B72B8D3D3A529CA364E1946A01AEC0F81B10357B46EFE28BFEF3EE3F9ABF0C35602C1A1C2308B001677DEFD1C68E2135466AB1C32B3B923C407A49323E1F9E08769C32C81C496E9AF3B8F6E7AA6FE2CBDF8CDBFD53F120C0BF909D873C10BCBC3B100A4DF5177F1A3539E83683F8B2CECB3F1302DCCCF3371CE647492359D86528D05A9AD3F3E3D2907F165FF0078FF00ABFF00BB0423FA49BEC472335593F6C7FD5FA9FBB0460E1660D3D3F98528CDDCFEF1E6388FC7D2FE57C118386982A416E9FCBF942E673654125520C589DB698E636DFDD717C379E3F69F0FAF2FBF5168495865F11A1AB3163CFF0093C86CF0B119B2AF0BE9FD463CB788C335817173A6FF00CFD7EBA9C24CAD1C8B50FA7F10A7F8BB96F1CF520FE67F7EFC345A5DCB3034F2B5A82BECC6BFA69C2C83E00FE217319C2C412AF7C9F4E5E5CA7A473C362826E0EFAF4B535F1F078C9C2AEFFF00ED3CBCB43E476877A7CE5C9BAAC77BDFDD049B4F2B7ADB1B499449F9833EFA5F57D79C379D87527FB5DF6A03B59FEBA59E251439D2ADE3B48983C85AF33D798FBB0E4C8960114A5AB42EDD29F73630C66495281052433871D7AD76FB44958CED61248724881F6A08F74EFD7732047945E2F0C1493C29A54E9E3CFF008D618CD9132AE9248A06FA790D6B6A9AC4D34E6A073BF44B877B99116E9CA47979EFCE9998606612AE14B8360C49D795296E8F11CA9337662FB0FF00034E76A563B63D98EAE0CD7B54CB5857D64A123C52045BC5D2C7A8EB7C735ED464EB99865CC54B628428B9005FC2AD66FA35232795C99E8F9480541B4F57D999E96E663B0DDB9E9A4EB5F67FED074C5434568FE18D5435C49903810BA8F09DFF00A44C1B9F5C79C50A548CEE4F092026629C02CEC59E9F6DF68EE7D859A4F03BDD2D6A5B7A59B63A74F8FECF1B6E92B2AB2F4A4257499857B4A064484D4B891D62C2D6BDBD4FB1BB15989465C80B53012C30259E95E6DCFC6D1DE904AC7117AA535028C05E9E3F9864539E7246DF1EB1E5CF0F67CC99889C7841238B9B33F900DB42A94D416A7E1E3969DBA813111D7F7E677E589944B972E5A12B676ABFBE6478187A9040480CFAF37FBE9D2371713BF14FC6F6F3F2C39425240E1200D83726D7A46EA42920929206BEF58C1EAB4D35338F012B4A9BE131600A84DE236EBD461963D69952D550686A1AB606F570ED6E51893C33961093BFA036F7D23EEB90C0E9E222361023FDBDD8F9E53E52438291434F478F99099412E05069ABFAD2FF00C0A4284B29FEA48F7807ADBCA30C912439A3541D3C4BDC68E7CA3612D9FE6356A36CDF8F7AB830F25BB13007B848F3BF97BEC39E25654A25258508A5DD9EBE1CFD8D0E1D157653DCB6E051A91B1598B6CA499049E9E198DAFE9D77B5FA6C704A9C40A80EEF5BD49F0D3F986D3B0729D252800005C52BE766F76863ACD46D37BAC022CABF4DAF20CF2DB79C3B93922D740E75A7A786BD7A88D512C22890C34034AE9A9E9EC45ABF59B54E2CA0419B1503100DF63F77E789AC276754BB8552CE2D466F7AC3C94859B17D19B5A52B51E9CA2039A6BE80A01404743EBB7E6019BF2C5830BD962B22A5AAC081F6D7973BC39124283901BC86EC6C3F07AC40B32D78E389480E9313693FB8F58817C4EE1BB2490589D469CC9F1A7BA0791C1E193A21B7D34715A7DD8B96315F66DAE570A3C6AFFA8DA37DE48823F41CAC983EC8CB05249AB0D00DAEF4D7979C48270E4B101B4DEFE3AF28AEF36ED01C6403C6A13360A304027A411E738B7607B2B289B03C2DA313ED8FE09683F4F5B5CD00FA50FDA95A33C57D99768CE92A951833BA89DC1DEF37F3F741C5AF0BD974060C2806839834D5ABE02D19FD393702DB0D34707C07E2209996BF7564788C09B137E80EDCAFB6E6313F87ECECB940B84D59E8DBD0DEC5ABD76687125A43850BEE1FD3CAA4FDE2215BAF1EE4AEBBA8F4F5B49DFD791C49C9C964B03AD68431246F7A07BFD21E09C820820176D486D6ACE2B7BC43F30D542BF87896416E600279FBF9F4DBA4624E564D2D92C052E4B5791F1B56C3785D130711A38A11A38A6BEFD2B17AACE512789C37064F118206DFEDC879E24E564928814018D28FA07A73D6DE10E51310481C2C7CF73B1F3FE222F9866C1C4A421C208E52473BF3DE2779F4DF161CBB05270E829094EF6150FE22C346FC6B36499EB484D00B902F50DB1BEBE2F0C2FE647FE6CEDCFDDD6D73CFEEDA5D12E4B5427A33B7B1E1607487D85C190A0E9E56BEFEEEFE24A2566409252E12044413F70EBE9CA63094D9485060863FF2A02C1DB6E94360444F49C1800028046C5A8DCDB7A8B38A184CE660019E33111F68CFDFBF958FA02488E99809ABAA490C6A03DEDB6C5F5D6BBEF3A42024FCB5FF003AF2DFC7486D7F304DA1CE479F49E9FEF6E587B80C2CC90E26329CEAFBFF0022FE15B6F8292921C867715EA77AE9BFDE1B575C913E3B936379FBFA7C312BDDCBD852FF00CC487E9D1B0F2FE634FD787FCC3F13FF007633C12CD78475FE633DC27D83F984CE55CC8EF0DA48B9BFFEE1F2B7974C704BD93B697FCC63F4E8D8797F309555A0117F9917BD8DFCB0D67A521D9205054372F1B75BEC214972057852FD037D2B1A1CAE17857A7895CFEEF4C3585FF4B47E1A1D77BDFE6EB094D7264CAEFCFC4BC107E99A8CDCBDAA38FAF23FBFFF0072F1B71AB7F41F88C1C283700F5FFF00EA37355C91C442F988B9BC0EA48B0E64CEDCF094D2FC3B87F173EF4AD6B0F30F85490C523C869E6F4DE87CE395E62019E23FF58B7BFF000184A1D7E8D3B0F249FAFF008848BAE0621479F318236FD2816007BFFD5187D70FF71FFA8608CFE9B97BFF00CA33456024CA80FF00D4411849603D2F57F48C190137D793FDCC67F5B1FF00311F2C690774397FE23F307D707FCC46083BA4F2FF00C4473F5DFF00F553F1FD7041DD0E5FF88FCC29A7AE09E225C076D898F7C1C27334F18061D2AAB024720295F0BFF887046629DF8933B1BABEE9FBF09D3DEDAC67F4C9FF0088B6C9A7F3CC79C2D6B304413C493B4C927E026E45F6F8E352949B814BFF003FCC63F4A9FF008BF4F7F585A9AF4C8F1EF72388FE7FBE538C7026FBB6BEEFFE231FA245F847D835986C75BBF285CCE60949FB569E4ABDA76B8993EB68C359E0241005DABF51B7BDDA23F17252904049200AEA6FF6F7762FD4D99A2C02F94183FAF59F7FB8E1A4462F0E922CEF534F1EA6FD6DBD5F18CD5278471C7FF5449B4F3F9DA2E3D304021BD7686D330E0B70D80A8A1DF707CB9C4CF29CD5B8038C8E5B91173E73720F5C2664CB533A438D587E3E90D558740BA4575DFDEACCF174681D52AA1CD58097152A75B54955E10A06C6E248FBF9099ACF68B29973F053D6123E596B7617749FA3B57D68D5CCD70E04D96426AEEE1A80355AA2BE7C8DE3D7BCAEBDAD5BD87E78F00852AAF24AA055024F734CE8B98F2B836BDF1E16CD248C276AE4B025299EB013A1E25746714BD599A3A576397C0123F69F958B1D3C2FBF9EB4F8CFED532F465FAEF523688FFF0036AE040B01154EF2B44DAD138F4D64B30C9C2618874F1212487E40E8D4D5CD01DC18EFD964E3330F2C7EE00539B8721F7A1D686DA45798E83964C9665924076BD34A1BD47D5A2591281E9BECD6DB4BB6AC6353AA03867CFF000BFA61863713F3B0535695E6E050F869D61DA249E20402C2EE59C737D4F946BE31FDC46FD7F77C2B2316521B89F4676E4ECE3E97F087989522649EED0C54DBD453AF4673D19A1592D5552BB4AE186D650A52F6E1E054C5C03E2888F7DE711F99E238A54C7535CB3FE4F98E9CE2264489D267A2784964F13ED5BE8D4BBB7231F79E8692483607CFA4F33D3A7E78F0CCE0A2753F8D1879FB78F9A610E03D0D5F57DB5D2372DB40493C42C0F3F96E709A10789238581D5B6B7B3F78381B9F2B79D7488ED6D4A5A053C6011100902237E63F600C4D61E4BF0B8B81A5FC2DADBAF283839BBEBB7AD5ED10FCD3352DA13C2B07ED490409BF3BC413187C65AA531425478B46D34F3F37F209AE5DABBD5AD6E715467FA8D6DF170B8044ECA1CE3A1DA62C7AF95A7300A98E01944BB35DBD0780A8F18C26497B39A69E3D4DEDE622A9CDB58AD9FB6B242A62E6DC26F6E9B7BFC8E2FD96E144DE10A9646EA20FD00A5A9FE21DCB96524937D2C7D2B5EB4E45A2BBCDB5B92170B55CC889B83D36E5E5B46DCAEF80C9E5A824DA81DC74A0F1FF0030EC218543BDCE835EB53EE910E7F5B59414B226D04EFBCFC62F137C4D0C914E381015CECCC76A3DDEF7D054449E0D245746D859B969A575F288566DAD93713E97B7BED7F48E773890C364D3D0CE87E82BA519BCC5A8D41121107ABD522AAE49841E6779DA2667CBF238B0E172F9E900041F6E3F3AFD60F7D07B6888661A8132A957B819F5E401F77E589FC3E167243841A5A8CE5E9706E7D7AD4888D4E7685127909DCFDF079FC2313586C0CC9C3E6490ED52DF4BD7931AC67F4C673102A7F8E63C3F9788B57E70832479F1413F7C4DF78F98C4ACAC9144BF16C76B3685BC7A54C2C8CB961EE096621CED56356BD6DADE22F559B990524A4C192491F1DFCF68E9E92B2325208F999E868FCADCE9CF5687A9CBE651817D6FE0DE218FD1AF1FA8CE1641959581EA2F71CBD3E3CF0FE5E4CAE22126946FAFAECDD6B48772F004DD241E86B7DFECC7AEACCEE6AB51FB479D898B5FAF9C6FD23AE1C8C9E63808AEEC6A0BEB5FE3986896C260121412450B5C1B53FCFA8BC36BF992C09E226677F48E7CBF0BCEE4AA9CA2626A2B6DCEED4A9E9FE1A7A4E050006482C5C161AE97D35AF84256B3155F8D5BCC4F9CC70F5E5B5BA61C270252C5436FF17E56BEB1209C2B248E17DC8D2874171E2E7C2BC3B5CE411260FAF59DCF2FDC61CA30E84B3801AF41CAB47DBCFCE23E7E1493661BFB1B37896A351B2A6BD5E0B9B024816B1F78F2DA2FE77C36C5A65A47CA41248DBC79DB6FB554C0E1EAA090E297E67DB9D078C36AEBCDF7F2137F84DFDF862E6EE5F778933873FF0017BD5EDEDF9F8C70D57295C526C47F70DFD27F7EB8C3EAFCDFEF07707FE3EA7EFE5BEDBC60BAD11BF3B78B7F9CFEEF8CB9DCED7F483F4EAA7CBFFBAD6BD7E9CE13AAB48820F90B8F91F3F3239EFC9A4F533EAFA93AD3EFF8E8ACAC39049663E07D5FDD7C343958B04EE6666E39FE1FB3869C67610BF72ADFE9F9F7B084A6B960917F88FDCE0E33B080C957D36DBA8F7BDE31FAFA86E63DE3F3C1C6761EBF983B857B03F31926BD5E220DCDA26479EDE42D84D6B347ADFED6F661C4A94A4D086E647531A5CAF72E01168237F9FCFA634EF03B51EB47AEADF673D690B776378D62B9CBC903A6FF00AE0EF361EBF7F380CB1A13E35FC4726B564CF11F404C7BED8CF782BF2F42F6F483BBE7E919A6B14641519F7FE53F2C36985CDB73E7FE20EEF73F6FCC67F5A3FDC7E7FF006E138CF00DCFA7E20FAD1FEE3F3FFB7041C0373E9F883EB47FB8FCFF00EDC10700DCFA7E2334D6A93B1E7CC9F2E91F3B61399A78FBF7F783806E615A2B960DD56F53F7613804B7DCF41A7BD7D216315EABF885BCFAC7EF6C101975D41E63CF6D87942E6F31541F189D8127D39F5F33D7041DDDAF6F3E6397B78503317131E3F2DF9CD8F3BEC3973B9C359C6B4B1FB010D71320936B8EBCB507D1FC21DE8F335DBC44C45CC4CFC7A7C4F5B611861330EE9735D29D46DE0F73E7477FE28B0A49E3DBFD44EF1BC47CB6E7821A2F0B47776D36F51F7EBBCB329CD96384F1DBD76F9C8FC799C10D26615DDEC76BD1B57AFAED13FC9B54FF000DAC61D51528CDB8495472BC0B5CC826DD31AE324A6665B8B2A0ED2D4C06A58BFA3442E3B08A98A49093F2B9A3F96AE6EDBB7378F6CBD997355EA5F67BCFDE52A4D3E5758949245FBD4BE9304FDADF604FC71F3FFB649123B5982401FF005712B04805CF0A9EB4A6CDAD6D13591CDFD3A892A090180A736B6ADADCD5F78F93FF00685CA9CC9BB50D594EEA5499CCEA1490A052654FB8A98224CCFA73C77EC19E0C34804D3BA43518B848A7979DE958EFBD9C9C3138292C6CE14D5B9A3EDD628C2A80241133F2FDFBBA62D597E294994B00B16D4E95F5B5766DA2EF2E41090598F5D2FAB5FA5234B8B24A523ED5EC0C9B6FE1FD397C22A7628AE6AAAF5B57EB7B33B36BD61D4A944CA98487B51EDA6FAB4042CA0AC24C0DC81205E37023E3E784BF5CA42CD4802CC5DFC896D0B188C9638B1291A150B8B870198E97F1AC29CBE9DCCC5F6B2C485F1573CD348E0495ACACAC25094A520A89248989F3BE2371D987121614A77259CDB9FB6EAD169CD25CAC165CA9C0252B12CA9E95A55C9B3E9BF847DE977E9FD93F963CA8403711F2A7BBE7E9FCC24AA7C04D8C588DFEEDAFEA396E30BC997C4A7091422A7617F0A0D2FCE0EEC6F6B53F98AE73EA829E205467909D81F7DFAC98EB8B460240212785FA8B1D797234783BBE7E9FCC55B9BE6EAA44A932541C993C46D137079FC276B0DF16DC1E5B2E7FEE48A33D2FC853CDE977730A224F103A9341A6DD5BEBD04529A9B3509529C0FA9B324D8157EC7C3DC716ECBB219331490994058D5ADBD773E3CE90A8C314967EBC9BF3C9C7845379BEA072B141B455F129B24429B080667990072DF68E5D6F381C9B0F2582C25205CB8A7875F6EF0E932428DFDE9EFD451EBECD735CE5BE25165B0D5E1C0F34605EFC324C8FBBCAD8B5E12565C3E4EF0120541A35A84BDFD97870891A31A54923DEDA163B1A4429DCF5A794B4D4D690B444212D1B13BDD3BDCDB96F7DB0F26E6395E5F45CC9638AE4A817B73F7A521C0989902CFA0B7A38F74A52196AEA9E767EAD4F5954397754B50A99E9C2855FD2DEBB9CA3B5393CB0077F2ACF5501F53CA9A5B68C7EAC3BB73AD9F62D7D6C075786FA6D3DACF3F5AD19469CCCDDEE48EF09A5A96878BECC153402BA7C49EA17476E32094DC588C397D0CD40A8AEFCFEB4615C8C524B92083E9A569E74AFD62454FD8576D19B81F52D2554B04FF5B896E3D78C00236E5D779C253FE28F66B07FF56749177E15856BA70B92E2951E942ACB9A8501C4BD580614F7BD7D2AE87D927DA2F30095536892A09992AAFA54403B1852A779E56E7883C5FC77ECA61292E78249A32555AF20D6D5F95ED37815A12ECA490C18961A787516AB52EC81FF00637F692BCE8804117FFE25487E1E212379DB9ED84E57F507D98A033A9A517BBD68DE0C74E71312D72DCFED1677228C3E9E5118CD7D8FBDA329921751A114A4C1852330A7544033210553EF1F9626709FD40F67669E193312F40428A83FFE4297F57DA1E266C9B28A5EC198B1E4DE75FCC5539FF61BDAB69C4ABF8B68FAF63BB9E20DA16FC0E63F96850BF53BFDF6397F1B72650752E53901BFDE4F8EBFE3EAAA67C80400C40BB306DADA9315366990E774CB08AECA735A22991DEAF2EACE111BCCB2058F3DAD0716FECF7C51C97342522749413A77A9513CD9F7F4BD2CF244E0A53A025401F992E900DB52DC81AB1E42B11475550CB8505A1992447DB50A45373B82954131E9BF962D67B5997B3C89F2C837F9817D857573A69E313B875C9984F11EE82438480540F881EA28FE70D9993CC3686DC7AA0B0E89EEE9D282B0DFF702B13C53E77C2A7B41859A974AD249D5EFA52A29B5EC3C64A423BD05405750FA581BED5E9CE1BE9B397140A1CA9E200785250124F2898916EBB79E3538FEF090920BB1047A519E96FF00308CEC27CC4F0B39734A1E5B8A0A5DC51AAD182AAD6A2A2A6CB69DD04DF8BA9DAD7E57B72C379B356A2789C27A9248F3E7BBBC2B86C1A407721EE386CDCEEDB75BC2672A81BF17A99FC62DFAE10E24EFF587BFA54D9CBF43F47FBFF089DA9008E131D60FCEC09F960E34EFE8631FA54B7EE3D58FE6FEDA357D689DC93FBFFD3838D3BFA1FC41FA54FF00CBD0FF00FC51A9CAAB893BF5E71EEE56E5CF7C369EA1422ADE1AFB3E3A43997870E0B3F890CDBB937F6743AFEB3E7FBFFA70DBBCE5EBFC438EE07FC07A7E639EFC281926DCA3F41EFF008E0132A1D34D6BFC41DC03640F06FE613ADE4C89F76E07EA7DDF760332EC3A560EE07FC01F2E576A7BE75E5AA8826F3B474F41B981E9EFC379AAB134049F7EF58048E7C23A3D7C08FCC6FF00AD790F9E11E34EFE8633DC7FDFFF00B7FF00AA13545403C3CBD27FDFE5EFC1C69DFD0FE20EE3FEEF4FE6137D60753F13F960E34EFE87F10771FF007FFEDFFEA8DEC5481C5700F9C9B7BFF2F7E3459059B478C89203B906DFDBD79FDFF951F5AFF5A7E18D236EE872FF00C47E60FAD7FAD3F0C10774397FE23F307D6BFD69F86083BA1CBFF11F98D6BAA16950E7E5D3C8E119AAE16A3F8FBF6F183252756E80463F5BFF005FCFF4C23DE72F5FE231DC0FF91F211B1BABB9F1FADFF7E7CBDF83BCE5EBFC463B815F98DA94D6B7E56F58588AB103C5BC45FAFBC6FEA70779CBD7F88CF703FE45BDF9FA78C2E66AC492553EF9E9222D3EE048DF1A124DC93D6119B87245F8B9B337A9A7BD6AEB4F5A9170AB7979ED79313E7BFC318866B9203862DBFE43D3F8A43B335C991E2045AC4DFF003BCF58B804D8E0840CA150534BBE9EC6DE90FB4B9824404A88E978F3B79C580BFBB04365C8493C4CFBF3D37D4ED5F1AC4BB2ACF9346164C2839C299578A0191FD524738F90D8E179CA6CAF16583896B63B0E13A589AFE758426E042E5CC5D9858815EA6E0B79F808F71FD95EBCD0FB2ED5D6344949695DDC13FCC0E54282E4CC90248BCF4137C7843B48944EED9E012520A7BF9E56C43020B8DD81E4DE8229B3E7FE96690E032806D5BDB9E54A068F05FDBDF432A935AA356D3B60379C3CF297C090005320054C08B99DF73D648C7674C9270F87521354A45BA002F4B6BD3731DABE1D6681695CA597E3E16F326C7D1AA7D63A00E38971BA5B01F6828C7398FDF9DAFB626F0292A96AD29577EBEDCF5BC777932C2A47117AD46D5B57434ABD2FA3425A86DBA37DEAB026A14128A74DC821638551B83123E1CAD88F97294664D5317AF9543B7315A9778D258E14AC3BBD816771E7FF00768DD636D3A2B1861CCB1100D47F31E5282645BBC4DD5B589DA76B622F160C849AD43D0EA1F6205A86F5AF846CC42D13BBF2966502036C58BD346B335F778EF6FB03F600AED63B51A2D479CD314E97D1AE1AACC1F7507B8716A6CB8CFDAB28871B1B489B5C462A198E35499530A13DE2E89097624AFE5706F477A7E04557B71DAD4E1300AC31980152140A5C38614F3A07B1E51F58E1D3CB88FCFF001B63877007E5B7F37F778F9F9C01DF4DBF9BC25AB74847F548D8111F8DFEFF00961E48284B0A51B56BF96BBDDB918024026DC872F1BC5719F3AA2493369DCC1E87E3F23CA3169C04C92809798916B9D35F75FAC67853B7D62A5CF90A7DB5109714B483C21B6DC5933BC84824440DF165C366F83C1DE6254ECE1C353A6BD357DA364B4B2F50D7677D47DE2A6774EEAFCEEAFEAF96E455350951294A9C4A9A499302EB40817BEC79198387A7B6F83921A528248A30587A72A0AD7F9A43849E201D56E5E76B747BD8561E97ECAFDA4EA84B0E2E81BCA1944971D152C2D442AFC45016140813637B7B8C0E2BE2B4A94B3242D7C7503E55106B4AD4791EB487680901DC30B546BAB5CF2FF1132C8BD89F2547039A9B582D6E0238E9452BAA13CD2548570F94ED88BC5FC58CC65ADB0F8733127FBBBCE137D99EA74A1B5377085201254B02C01DFDEE6A7A98B4F2FF0065CEC474EA52ACCF4FFF00885C708EE5DFAC5453776A4EE4A41F1151E4623A9338ADE69DB3CEF3CE032E7AF03DDFEE1FBCCC7A5EC1B938BEB0C71B3004FC81FA503EDD39D3517BD8F92E82ECEB4F84FF0002D0F4AC70C7097541FDAE27BE428CEC7CEF88539AE70B491373198A7B8019E8D707D6FAC46778ABF057FF005505B4D1EC6BCEB411384559612114F95E5B95A2200465F48E97472921A0470F29BE21E6CC2B5154C9D3D4A15713A6001479057E5B771194CF9B60199EE7C4E8E437D2F48C175599387F969A65CC7D8A561991063ECB698FC3EE406214876338D35993162E373B7AECC20FD44FA1A5A96BB9E6F6F510980CD883DF2C5288F070A52AE3EB3C3B797320E14E29F8A002261436F523CEFB1B6F511A2B1D8894411C4C0E85B8ADB786AD4246D081F4D692AFF3EBB5FF00E198DBDDD6DCAE07A6F2F05892586206946035BD6D4DEF7B46C337C4B8002B954FD7D98E292AAAE9839C59824154471D325CE28F250300758BF2387A301895103BF2E3FE25AECF40CFA43C4E6F8A21DD7B357EFF0088455B995528101343524FFCCCBA9940DB9F1B4A3E9B1DEDB4C94BCAE69487C4CC06C7FDC56CDFF2F4737D459CA33AC5ECAA5CEA7616D2E77A3C42739A2CAB3E6CD1EA1D2F95E6748E712168451D1D31095483E36D90AB8B4CCFE2A4BCD330ECE2BBCC06227267AAD302D6BB16259448FB75D657079BE216405F130AB59EEDA8F0E7AC755FB47F61EF67CD76CBF579436746E78F0528290AAAA94F78648F0CA5BDCCEDCC88C5D725F897DA494A40C499B8E24D57C7DD700DDAC76E9EB76CAF3C521011DE84248658500A2DC8A99A9B75D23CF8ED5BE8FAED3B47D2AF36D26FA759654C079C77BB0C5338C34992986CA94EB9C491C8488913271DD3B2FF0014F033A748C2E3712A953E610132D615C20815759F97CCD7D0DD3058CC3CC40216971552C2C3AB88B8F968CDD181F38E8266B95D4E4F5CF65D9EE4F539457D3A96829A86DD6C1520AB8A0AD0849888B4CF58C7A4322CFF002AC44B96A5E3651700BF12542A0355D9F4DF7E73F28C9989052A0A49146A934AEE450727BC449DCDDFA975CA7247774D01B200D9513717DADF28C5AE74DC2E2403849A89CC3FB0BFD09ADF50FA6912299094212B02AA7A359BDFA084AE54AC78BC50373B7DE07E186852A4D155E6CD7AFBB429DDA9BF6D3C1BA6DCE113952A26C6C6F63EEE9EBFA6D848CD40B9EBEFDDE8F1A8049600B8A5ACFCFEBEB1A8D4AC0B98F327CFE1B5B18FD44A667AEEFF0068C9045FEA2353952AB024F316BF5F2F220F48F8B798B4ACBA4BFBD6A76DBF10B4A415548A6845FC287C7D79E935046F23D47FF6E112A22E9F5FE21C77279F98852C544855FE71F801F29F3C63BCE5EBFC41DC9E6DD45FAC62B7FA104EC2E3D4DA3D718EF92ED4715BFF001E9783B93EDBCA349A829224C1BC7C0F41FBF38C27326254086AE977BF4F7E31A2E480D4726FCB6AD1F583EB47FB8FCFFEDC2109F75FF6FAFF00307D649E7F13F98C10775FF6FAFF00307D60F51F11F96083BAFF00B7D7F984EFD491C3E2DFA1E9E83CF09CCD3C7ED1BA255E8478FE49F7D213FD68FF0071F9FF00DB84E14EE4F3F3107D68FF0071F9FF00DB820EE4F3F3107D68FF0071F9FF00DB820EE4F3F311B1156AB8E23F13F97EFE184E669E3F68D552942C09F23F4F7F6D9F5A57F71F9FFDB84E35EED7FF00131B9AA95C9FB5620DE7F21F0B7E4463815B7A8FCC2D455192788C7333B7CBF3C60902E5A0E056DEA3F31B455994C2ADD419DBADC45FF6318E34EFF5D6353254AD3AEAFA6F0B98AC54C71729E53EB1791F1913D2300524D8DFAC21370C412149F16EA199FAFD61C45728100199BEF7046FB0BF2F775B8C6D0C662129714BD7EC6F4A0FB43C51D63C2150AE198920DFF2837F7C8C10D7BBE3A243D68D424DB7A373D2241475CA75496388953EF30D260C905C702009E57311CE6DD433CCF172F0D96E2FBC584032D4CFA963E3AF4874890D2660586F94B02CF6EA3C74173B8FA1BEC932E1D9FF00B2B68FA5ABF0AEB692B56FA17214A2B778DA2524711FB408B1E51D71E199934E33B638F2E5430D3D3DD96268B25EA37B9DA38EF690044F4F0D52565C8B33EDCBCB7D0C7955ED5B912354691AE79C6F8DCCA3BF5B64265403EB2AB089DAD69F3C77CC34A98AC249F94FED0496A014F07D3CE3A3FC3AC54B44D9616B01D40124B061A07F7E11E28672E2A8A502789B75C1C306603846D048B7DD79DB137815CA08582B014CC4539D6F4D6F1EB0C1CD953B088E050AA400072035D35362D76DF3154DD453A2A160ADC6C0EE85E49912600331CFE06D8D1084A4AD4A2CEECADE9A7B6BD223CC89E678E142B81EEC5BC09D0EE2D7A54C4A74DE9FCEBB44D4791696D3ECBAEE699C54B6C90D24A9494A5C6C2AC0181C04CDFACE2A39E4E9638D226A52A6E27BB302F63B0B18DF3AC5E0F2EC0CCC4CDE1265CB2E95109F988212C4EC40FBD63E95FB2CECA72EEC1FB12CAF4165E86D8D5B995353BFA8AB1290871402D152DA54B1D1B5A9278546DBE2858291331F8F5620712B0F294D862D4512196E1AAC46A3CDA3C21F113B633715984F9689A5654B502534012F40002CC07896E91EA7B1926655447D58771C5B712527DFE2B981E43A1C70B9B89080E54C0D5C124FDDBCDB511C942944D0FD21D11A1B377071E6199B6C22070028412AEA0106C3DF73CAF88F566409694A5129FDD460281B91A335E90ED091424373BDF56D3C39F8F1FE09D3E811982D35A6E1512824F9413CB78FBB1AAF31C451A628307BDBA907C74BDE1596CE695F31BFE3E9B46EA5A0D0D917789A4C992AAAA93E15282DE128F25A4A52098B1B61AAB1D8CE204E295C25F8925DF956FA5FEF189AA008A577F0FE7AE919C67750E7F96A7A5A7A256C94D353A5413CBC41015EB27D26D8D44CF9F88F1926E4AD46ADA827E83F108F78BD090341B46EA8CBA128287DC2F19EFC254A0279020103D23DFC861F2677197500E2E4A413AB69F8680AE6A59C902BA8A37BFF0031C3542120711BDF71C511D49EBE67607AE1C8095A5C067A6BF4A46C0CD21C1247D2BAF46F5F2DCE5234EA47110422E2448E879DCDF6F28C289509746A35F66DFAF4A985E5A4AFF73923AB0DCF5F2BF38D7DCD3B444AD23681C201B7BC79636078DF8535DDCF5B102E3F30B7729DFD0FE61BAB6B29982D8E2499E21C8CFBC9FDFA61497825CD04A659D0D8F4ABECFBD3D20EE0173D1FEDA8FA4361CF295A925C47C0088F779FEC6153944C51A20DAC4747D2A280F5D20EE13EC1FCC6A7354D12225D47389208816B79FCF7E787523249E6BC0455E9B1DF6BFAD2B19EE65B5520EE5839F12E69A43255EAAA3330E3441F31F76DBC91B1F75C3F464588B842A94142399FB5CD39DA329932925F801F7EBEF48627756D1200971B93E693F8FE7E98728C93141B841D34660342F63EB7687689128BBA035281BF07C36844E6B1A1360E376EA40F59BFCBE6360F5392629A81637FF3F8A561D2654AB042481AF969D7900DCDE1239AAE85F04075B91E622FCE06C07E56E78752F239A0033251535DD2F72EF5E40BB3EBA34394CA40FED62350DB03E9CE8F57D9BDCA8A3AC061D4926F2089EBB83BFE3E58D66E5E24A4B4A0826B415A78529E7F58DC4AA6CA3F228A46843D3E82EDF9A533A677F8705BCCACA9C5005BA85ABBD698FEE0A6164A17C62D04731EF64B95396381C841FDCC9295F50B4B283105D8B6E43346F81CC7132D6089AA0C402EA2CC6FC8EEFE5A452BDAEFB3B7657ED079255B59D50D2E5BAA10D2FB8D40C301905D20904B0C25B42BEC84893326712B83CEB39CA1094E13113A6E178A924CC53CAADCA892A2EE0D7A6B1D4722CE56952146610B0DF31A82FA312D6D8163E9E0676FBECDFADFB00D4028EBE8AAB34C973175FF00E139BA1A3DD38D3249517036161B02401DE284F58DFD2BF0AFB726485271B89EF0A827E55A98A696625F5367B3C757CAF128CC51C4C94A92050597CF61E7D2ACDD7B66A2AABCA9879BEE129DDE490E4C4CCA40B481CEF3E631DFF0D9D61F30ACA5A40536AE6BD0D2BA6FD626BF4D2D29725A96B5ABF7F0AC37BEF369754C21125AB17B889EF49F2330009DADCAFC9FAF2B5CE485256EE2E3CF4EBAD3D61AAC4B42411FBAAF4A80F4B0AE82BF68C50A49DC7BB9FE136C4062B053B0EA3F329B986A7893F5864A4AAE09B583EEDEEFB721995A524F4311BCC01EF3BFDDF0CE04A8F1025DEEE76B6AD0E308EE41767FB8E9BDFF00883BE4F4FBFF002C3F2A01DC57FE3EDFEB121C09DBD4FE611D53B3C3C260DF6E9EFF003C319AB1500DB5A8D6AC6CDF88D880407167ABDFF10938D7FDC711EB98A7724977D4C60002C238E359DD44FC30AC82E76D59F67FE1E02906E1DAD071ABAFC87E587718E04EDEA7F3071AC6CA23E1820E04EDEA7F31CF78BFEE381AFF009F67CA0E04EDEA7F31C15ACEEA27D630D67000800333FDA3200161071ABAFC87E5846331B5B59BCDF6F238208DBDE797CFF4C10462A722397CE7E58D9258B9DBCF940C0DC3C63DEFFABE5FA6304B926D030B353683BDFF0057CBF4C20A5BD4D00F1FB46A5293A0FA7D20EF88D9447BBF4C325CD2C43D352C0F9341C09DBD4FE63626A426788CED1D6F31F71C21316695AB12696FB69A43BC3CA4283148DF9DCEB5E5D2B0AD15224907736BF436FBCDAFEB87324D5B6A75773E1EB08E250928500966B53EADB8E5D6E61522AA1485893C324DEDE5BFEEFE7187C491C2A0683CEBE86D6D0FA56E6C924AC17F9EB41E76BF36E557893D16A3294861D4A7822012120C5B9C1F2F4893CCE365E21294BB81F73C9C535D7C637C160F816EA0E97EADB6EE5C9F08B7BB19D22EF693DA4699D1D94053EFE6D9830FB81092A296E89D4542ED36F020F911CA71C5FE26F68060E5772998C262174E261C4052C59DECDE05E1BF69669C2483325A820A12C43548550F5A1AD3D5A3E84BB5B798A3CA72ED22CAD29A7C972BA569B0D98417051B45C848313C6920C0277C710EC5E07F5B3BFD426CB3DECF984CC2760A3C26DB0D686387E6D88EF2628514C5C171527AD407D457768F33BB46AAFAF52565129292AAB45434A4AA088485A504883262FF00AEDE9AC2E0D2AC0042501FBBA0A5DB571FC987FD9CC44E953A584ACA7E6B0E55A79D3C23C43ED37275E9BD63995238DC043EB294910077C4A840023FA8444EE4E39DE33098AC2E294A05411C44EAD7AD4B69F6A8B9F5F763B18676070CA5AF89540A725CD69D1B9B03B5A21AC9719535434A98AA52BF94BE1E3E10B32B49491078C2B844891BE169F998EE38388021245C39A6ADB3C74CC666585C160D454949570FEEA51C07A6AC0D7C1E3DB0FA3E3D9D329D17962BB79D754210F6608074750D4A095B0B48553D639C047178D452B1C690003E13071CB71EBC4E331F351256B51E2F9C970250351C94E1C3E9E71E4BF8BBDAD5CEC28C0E0A6148477826CD0AFF00ADC45D3F2BD022C1AE7531DE6D53AA2A6ADCA87AB1E0A6D4496140A6C89809B2A6C205EDF0117CECDE5AA011C49A06AB0A93ADAFD1C8E4F4F21284DC46314B9CA2B254EE5CD8FF0000B374D23D7253B5B5622980667688113F033EFF004C78E0CC67A927635FA822357ABF8C6AFE159A2FC558E29E1B23C6501039EC6FB5FF0063092945449DEA6DD2A5B9FAC3D41241E5AF2FE291B0656849016B29B192495F43D49C6841208767F7F785E5EBE1F785CC51A5B0A534845544151584A7BBF4E2DE77F59F5C22A965C104BEED41A59DABE118980167D5FED1CBD5F4AC8E17561A3B140492262F71D4F4E9B5C61CCA96B5800034F0A3EF6FC7842600028290DCBCC2848269CC9FEB93F0249DF9EDE677B893938659AA83026BCFA7DCFA40C0B3D48861ADCE12D9512B4003A293CBDFFAF2F5949382510004923EBE3A8AD1BC8C6CE588DEFE1115ACD56180425693C57FB43DFB19FBFADED898C2E5466B7125C8616B1BF8B75A38EB0E30E81A1BEF7BD6BAFBB3D6119AEBD534490B1239F17EA7FDEFD266B0D919268871FF00A7DF8EE75D9DF77CFD22019A7680E3BC27BD1E12A89501327E1E9CFEEC59F05D9B26AA96C0B386FB36D5FB6B0777CFD3F9881667DA2BEDF143FC37BC2A46D6B4FE9F218B1C8ECA099FB500D350DE1F814D2918E02FF7F7E1E7AB188357F69D52D903EB0428CCF8F7DFCE0CFE42062C380EC8238085201234E1B3DF9D7C0F331A9412086E5BF37A4466A3B53A8850EFCDC9895DC472DF7E973E589A95D9094A1FF4D9887A1623621ADA9B96A6B00429ACFAE9E2FEA4F588C661DAB55254909A832267C7681B400679C7EE43F4762D0A149628CEC923D5EBC853A42F2E5A941EAE7705E9AF4AF28655F6AF58524FD60DF9779B7AC91B9FDC9C3C47629240694073236E82BE5E5587694AC0DD46F6A372B7E00E708DCED76B1929E1A851E23FDD3B795EE4ED3CBDE70DB17D8D290C9941F9279DED51A96F4891C3C92B49D4B5697F77E4C5A1DA8BB6FAA640FE793B48E21C88DE7D7A479E20315D8A98A04F766D6E1B79529ADE94AD1996330A482403CC5CBEA473A5BAF3690B1ED06E32A4D3BAAEFDA7C8E2638A3BCE1823C60786373793B75C404EEC54D49E2EE94E2D43AF8066A306671A38786EE95296183925CEC5B5E6D5B7DE2CFD3DDB9E48E1698CCC269E956414D3059924EF2EA6151241B9B6D30311388EC8E2405AA5A4A2616E13C20B35689B568FD68627B058A992AAEE28E2BA1A31A1A369FE2E8CC72DD01DB3E93CC34BE7B47415B97D753F754B5AE1696FE50A5A49E26E65E59716A04C111104918A8636466BD9EC6C9C54954C4CC493DFC90E0625BF6D6825F00BB5DA3A9F65FB408929E098A6B1049763CF42093E25F9478ABDBDFD1F3DAAF65598667A83B3EA7735468AA95B8FA9D692842D968952C2528254F2A0950B09B6DB01D3BB1DF14254B9C893899865E210405495929035B9A59CF3A8A878BE8ED1616700998A09243F7AF5E4C91D408F36F3ACAB30C9730A8A7CC69AA696A92B297296A69DD616DA84820075292A122E403D27618F4A647F127013D2841C44B51200AA83027406AE39D6AD416890C2CF4E264A149140FF00EE38255D520BA4528F7E7A321AA29540B106F0608E7F1DBDC0F3838BBA332C2E6684F76B492B0E450DE86A37A781B8A3484AC22A790D507602E06CCC3CF581152553C46E37BCC721FBEA00368C4762E58C190A019CD2ACE3F8A7A9BC3A565EB9041524A5EDB10DD5AF5F0EADB03E39284F90B88E7FBF74618FEA945E8E0EC7CEAD5F6EF0770B735D9830A7AEB1A5D72786F3BDB6FC3F5C36993BFE5A5A967B79D2DCA306490E49B72FE79C69EF3CBE7FA6102B0BB69D75F01B465324AAC7D3F983BCF2F9FE98D90B2922AC3D9FAC68B41433977F7EFA41DE797CFF004C2BDEFF00DDE9FC4690779E5F3FD3077BFF0077A7F1041DE797CFF4C1DEFF00DDFF00B7F8820EF3CBE7FA61354EDFC2BF602364A789EACD0779E5F3FD31AF7C9F6FF88DBBBE7E9FCC6C439B88F9FEFEEFD4EF93B7D7F1EFE8777CFD3F98D9DE797CFF004C1DF27DBFE20EEF9FA7F31A1E74880047BFF7F77BF1BA5616682DD75DEDE1D3946C257158DB5D23477CAFDC7E584D6B147A0D2F58C19453737E5FCC1DF2BF71F961B4D582181A8F7D6DBFF9C777CFD3F983BE57EE3F2C342B0297DF97A467BA3CFF00F1FE63053E411336BDA3DDC87BF7F9DD25AC121D85FD9F7B987B87965AFA736E5ADECFA6C291BD1526264F283FAC18BDB96DD670EE5A81D6A40F41F6DA1ACF0CA524835A00DE1D7DD0DE1E32EAB090EA9C850013E76F416DB7999185E6CE4CB492685A8747E5E8C7C7A9232E1398F01351F5E54EA75B0DCB830EB398AFB9694942B69046E4C6FB72F4B1D84E2AB9866C25950E2B3EA69F5B830BCCC28C2A4A8A5D22E35D4BD3AB51A879C7AF1F46476448CBB506AAED873A60AE9F45B0C8A05BA8FE5BEACC987183DC2D4385CE051495168AB84DCF0918F2C7C5CCF138AC6617042710A9F32810496E1525DD999F623560E6392F6F730E14A422812E082DAB114D7D1AB1DC8ED0F3DA8CC01AA5A897C3D505D24C12DADD25B1E8106398F9E3A176170A0612495A43290928A6C056803BE963778E32B9C66CCBBD89AB35C6BA077F60C74B35CB08FAE665560F829928537D09524CDCF9CDA37F3C774CA25F1CB94959AA8B35ACD46B7BE7164C94913D079BF4ADAF5B1D9ED1E52FB4464FDFE7C3374B453F5D5A8A951013DCC004AA204EC27DD7225AF6B72A97230C6680012851240D838ADAD4D3C418F4B763330E094002FC3C20279F21CA9A56269EC6DECF755DB57692DE719BD3B8D688D34EB1519F5538DA836613DE52A5B240539C4E37C2AEECAB732236F36AF1789C4632749940A8A14A4F059DC900BEE967E64342DF123B649C932D01C0C4625244B5F13997C20713A6B705803F68F6FB5867B414D449A4D30DB6C65140CB3454397A385A6D80D212C38E0042412E1471EC08E66716DC932698A4A3BF509D36A56BE009245481A03C2081AF8C790B3BCED59A2D4A2A2788927E67A9F0346B68DBB88A7EBDFA948A6A075E2E97B8D5C615207F5904824089237D85F7C749CBB048C3CB0A609006C03F2E5E772358AB8C331E337B7315BF95A8FE74FA0166912C8492424889EA46DB7BBF1EB8F9E17600F100F4666EA7C5EF5F288500A8B0ADE8D7F1B53F8BC735110DF88CDE4498DCFF00BFC6C70BA1249568295677A7BD7A6B0F91FB46DAF99F7E3CE1BDCA869BB2943CC4EC3CF95F0E048E20DC26F7624BF4635E45AF4BC2D2F5F0FBC3555674C5288E3038A440316E460413F779E1EC8CB5534FED25ABE760CFA3F37B429107CDB52D3F8BF9824837B4CFC763F9E2730D92A8B320D69635E9A75EAF04416B75630DECE01320F8A36EB16F96DB6E062C586C8944370D9AC1BD9176822B7CEF5835E387881B59663DE27E079F4838B1617B3A5407FB64EBA8FC0D18736171522A9CE75F268882878A839C5278F6B7207CE2E2201F8DA32DECD93FD8C7667B6946D3C2EE758752120EC0EFE6FE240F467115A671DA72A15E3277FEAB917E9BDE79F2EA316AC1F66C3B775E36D6BA1FF3CA1D7766EF417A796BEFC62B2CDFB4B528A4059B49B28DE3AF98B1DBAFA0B7E03B3A97004B1B540E4581F7B883BBE7E9FCC40B31ED21609FE6AA6FCF96DB93B0F889B8E58B7617B372D828A45A800B026DF6A3F283BBD5EDCB7F1880E6BDA22D6A49E3322608519F7FC7D368B62C382ECECB485120076D07261EFCA1D4990662598902DB68EFD6D5B5DF588A54F682E03016444C9E237F74DEFE9CBAE25E5E4726AE0519E801D7EBF5BC3B4607899C585E94D2BCB93B1D285E2335FAFDC25242D5378854FE16F8F94C61F4ACA248E2F901B7BFB5A9CED0E118124B3160EC451FA5DDB5F1D5CC313DDA0BB1F6951E6B2239CF3E43EEE7B3E4E572831E00FD03F88F62BE6E9182A5BA51ECDA86EB4B6DAC256FB4170714AD5D6E6639DB7EBE97E507189995C851AA1236A8F1E5B5FF00C49613046A120B16D0D3C079DEBD6315F684B93C2A23A78B7882791F593D37C6BFE8586994084316D05CBF5FA91E10B4CCAD4BA10C3A16D8B57CC5DEED0A287B45524A8A89266DC47ADA0123E406D1CE70CB13D97C3AC1696914E87C75E5ABD9A239791A89A21C7420F236D1B6D46D49053F692E0825C36123C4444C6D1D3AF2F7C62BD8AECBC9493FED8A93A0B073BEFD234FF465A2E867DF939DBDF9C58DA1FB69CFF21CE69F30A3CC5C6F2F60CD7B4A76CE050F04052A41046C07AE39B76B3B12314852E54BA804D12FE4E29F810DE7E171185FFA61418559FC3E97F5DBD79F679EDE721ED4B4E2F2B5BB4EBAFA1427FCBD4703BDEF112A52781C0526C0C883B89F2F2C76BBB3188CA718BC4A50A12D45426F0F12598302E19DC81EA4BBC664637168042CA9C7ED279173E82A5FC6C6211ED05EC5FD8EF6F34B53A86A6869B27D62FB6E062B2999534961D424A01532C8432AE30126E39CDC9C55B29ED563F2E9B2A4714D0994AF91456A20825ECEF4A569B522F3907686761DD066B22614858531B17A136F4D2D1F3FBDBE7B16F69DD8B66B5B555197D4E6FA790E38B6736A740290D4920965A0B518102FE64ED8F55FC3EEDF2E709427CF73F2D0A80A0E4588B5DAFB4769C97B41829825FEC4B0058904F3E95DCEF7D7A8A288BEB7FBB2A6CD3102A4B80B6A76491C3C0B852784C8902FF7F72C56792B1F2E5F7530120025883B0D2FE4FD0459B1F8A938896832F84D3420B16E54BDB61CA836B596BEF254BA4506823ED490663A027D4C6E27E0C462D540FF00C5B9357CB66A444A4A6BC49E2F13F57A587AC25356DB84B1C10F3261D5DC8513B1DA3972DF0A8C4059E151A8F7A795F96B0290400480CAF6C418E7892398FBFEEC3842B436D3DF38D638E34FEFF7FBF8E09EAE1A055C69A8A751CAFBC2339C800549F4B17F4838D3D7E47F2C35756E7CCC36E156C63052A6209F3DC60E23B9F38D822EEE36A8FE63193D4FC4E073B9F331B700DCFA7E23893BCDFAE14429C313516AD5AFF98510002075BF898E64F53F138DE178D88544C920F52795B9E08233E3FF0057FEEFD70411A9C50312A077DCFA6364AB85E8EF046B91D47C4632A5B8666DF58C100D0C71C69EBF238653161CF0BB9B9FB0F7D231C097FB69F9F58389279FE1F7E1BA95C2D4778DA3153894F39BFEFD7EEF3C204804026A6D12B8295C52D4793F3D5AAFB6FE5025C4AA6F11D7A47FBF21E587D2940DCD2846BE1F6E4622B152DA6B58F139A795B7F1F1854CBCA553BECB07F9CE29A09DA7838877963D1336E97E8434CD279972CB280614DDF6D77F41B44FE57212521C3961CEFE96BF90DE2CAD11D9E56EB3D6BA7B4BE9569CAB733CA965B7D2D712BB94214D97CA8DF8470951B91B475C714ED3674B9054429E8B7AD281CF8916B78C42F69B132B05879B3967FE98A21DB89C5F9333B7F88FA71D1BA1F2EEC7BB2ED2DD9BE5DDD8464D445DAA7109E15D43B5A94542D2FA8789D2DB8A504F78A5445A0638263702ACFB30398CBE2577B31248539E012D4051D99DAA68EE5DE3CB9DA7CE5599E2169E30424B30346A016D19A95B13D280ED12B920BBC3037DADFB8E5F9E3D25D8BC29461A44B218A529141B51C7A73D0EB15A929E250043F3A8FE3AF5E74E9EEB4A9A9A961686CFF97593F58322641F04F337FDEF3DA3072132C21668CC40B6C4DBD0B3F8D22C980024A9045DEDD341A1DF5ADB9F5AB3EECC737ED773ACAF43E594AA76B5DA81F5D7D081C2DB0161C27880013FCA0660824CC620BB699949565D352A58480929248A82CD6A12E6836D869D3320ED18CBA6226B717082C97672CC5DDEDEB4A47A59A6F46699EC07B39A3D21A6BB953ED530FE24EB690971C7970E14B8BBA97C2A2A0029460898031C3723CA5588C54C9BDD90952DD2752E4FA1BB18E71F13B3D9D9BCD413314A751700BA458000025B4D2BE51535766C336A779E71C2D8E2528A42A2E144C5A01B827F738EAF80CAD322585283300EE0FDF6D869AC50B01835291C641552A1BC286A5CD6ADF688B5255E699857D0E539334E543F50E16D4B00A8A1054028F1198F099EBE9BE13CC7304619052080002545C0B57EFEC98DF1BFEC8370C0B1EA79EF1F44D599B06F8A1409B990403F01CBDC7A63C0F2704EDF2D3A1A7DF5BD3CED570160964B0B33B9D6EE6F5D0D623CFEA0201957853360A173EA7A749F81C49CACBF8BFB0BAA83A52A08FB3E95AC3A9648A58A7EEFEDE2119BEAA5B6550E0000330AF97BA44ED89595969424012DC9D83F37B86FA1BEA216439249E515C66DABDE723F9974F15F8C017FC081F941C59F28CA8A93C4B450B0A8634B796AC2FAB43897AD36FF001EFF00115D66BAA9CF12BBEB9FF501E5B4CE2E584CA40E1025D68CE9D5EDE15BB7A38522B7CE756BA8E187C5C13F6803378E7B9FBA05CED68CBF264A81E2410A1A33F859AD6E45B4822ABCF357BDE287A08B9F1CEFD2FF00BBF5BDBB059225212D2DC3683AD0FB7E71B702B6FA7BD62A9CE75629453C6ECFDAE63EE9B7BF7E569C5A72FC88DC4B6DA9CEA3EA2FB50438929A07A359E807F80DE25F578ACF39D5890170B060C9F1794DA0DA3AF2B62C786C9549209960100B16AF3EBF53AD1E1D3278801CDEB4B1D5F9457F5BAA42B7546FB99F5E73E5EE3CF13D83CA8A6BC35A0B0F7616D3D236128AB88814A01CBAD7CAB110CC352A49278FDD3B41161F1B462770F8166052DCF98661AD799D6D1B270D3174483D4317EB703EBADAD0FABD42924CAC9898FC7F193D3D6EF84B12EC9B5B407C7A537E91399760560FCE926C6FD5E8DF588ED4EA049264C0E809F95EC363E5EB8CFCC5E9C3E47EDB0F11B44E8C18FF00800598354B02FBB56F6EB0C5539EB64595224DCF53B6DFB163E8BCA510DCB51CEFF78729C0A890C9A0B8E5F4F426196A33C499124474371D2F3B1BF3FC70E78D2039142D473714FBDB9D2242565E6C12E59C6A1BD2DA1DBCA10AB3D42448541E927EFE7D7E1E9889CC3126590516AFBE836A6B68792302A4129281522A40617D06E7D884ABCFD06FC5D058FADBAFFB88383098E5310A074151D37D696894465E1403A59DF4E85DAAF4BF95291827512533E2DE2F226C67A72F8EFE5896FD5CB2E4ABC1DC96DFECFF00430F539525491F2D1F6E9A31F4DFC21C58D4C9060AC587F76FF1E436F7F9E186266CB268A07AD3DD8D1A8FCA345E512D4E38452C680FA5AAC34B9B80F0A1DD48B7CB6CB5545A2E1E2212AFB7C3732418100409DF60271B60B0586C64A9826F0BB7F7355DFE82953E1568565F6764E2524109046E2F76F5DDABB3B45E1D90F6D59AF65FAE74C674CD538DE5B515496AA9A4AC94A8712199589200054771CE4440C716EDF76330D8D973BBB48527866592E4163C24B6DBFE1A2BB99F65F825CE32D20AD0C50281F7A1342351A57768FA23D3FAEE8F50E52C67678174599D1D2B9421A70143CA0CA0BA12EA0C24A566E2649B6FB78D732ECC8C1CF5492C67485AFBF510C500A89438B971CA976D4728CD26E232F5A9402801448E86B5D1B5EB09F3BA4A0D4794D56599AD15366F4952853672D7D0D4A12A0413DFB8951E7C5BDEC0488C2580993707353370AB5226CB219692A2363F2DAC7D0F8B7C376DF1386F912B5914043B352CEEDA72D6D1E457B4D7B026579A22AB56F66B1455680FBF9A652CA09EE54428B612A5101CE2B93C22D231DCBB19DB1E2C47E9B315AA48584893314494CD61F35E8963E7E11DBFE1F76B55994B28C54E60867E321C397B93F6A18F1933ED3FA9346E775392EA262A68D54EE38D82E34B4F1C122764F9441FC31D7E4665865DA7A58B310417717BB01D2ED1D725E270B8948326625445569E214DB5AF3E66CD0C2BB2D4509841D9569579C1B89F3E989595325AFE64A817A82FD5CFDABADA14490A6E1ABBF266BDF6A3F3318952809260752001F18C48A1429C25C1201FF27AFE6374A16A0FC247DA39E251124C03B18DF69823A0336C693663060A7DC6EEFD5BA78D1A1B4F42812E0823F87FA3FBA16FEF3F03F9E1AF79CBD7F886D19A386F2E7C41FC4E0EF397AFF118248B07F168CFC1FDE3E1FAE0EF397AFF00118757FC7FF708E0C5A140CCFCB0ACB983E67F96D57EBF5F778712412412185697F17B681B9BED0614EF11FF00210EA30592220F5FC3005A4D8BC11871ABAFC87E58CF1A77F43F88235B8A55AFD790FCB194CC4837EB4351FC7DE0626C1E35F1ABAFC87E58D57352A71C4035BF1BE8C5E33C2AD8C1C6AEBF21F961B19A80402475766E55FBB46785550D7BD469071ABAFC87E586E66A058BF4FF00107028D924F484EFB91C337DE4C7E42DCE7D3E1ACBF98B8AB5CF33FE6F13B9620095338F67B59B938AB8F1BF5E1A58292A83C3C88048313E5FB8C3DC3AD0A04715B516D4D9FD4DB7DE131692A9C78773EA691CD3D6770F21C68F12B8836122EA5170F0080249B9B002FEEC577B418EC361A5AC4E9E94382CE41AED7A7589AC03C994A2B7400E5CD2EFE4C1EBF48F7A3E8E6F6776345699A8EDAF545377CBCD508569C66ADAE175954A997D496DC1C6012B064A40D88240BF99FB5D9B4BC662266130AB3314E4AD601646A2B6214C4339357BC719F8979E61D1226265CE495F0AC04822E6FAD68EDBDF471DECD635D54CCBEF39C6A7F89492140C22E52090792488BFA011675D8DC377C959989F9924740E59DB9D39EBBC799F2B9B37158A9EA98E47112092599F4DF537D183523A8DDA1E624878070126E52140F3F2248DE31D8F2859C36265A00F95C7CDA50694B8DF6F4B3484CB04592CFE049A5FED58EACE66E56E6598D3E5F4E14E3550B536F250389416AF0B648124788CC8F59C75D562F0E8C119A5680A12DDC903FB7AEFE3A43C54E4A40F983FAB83B0A57AD393476BBB3FD2947D96E987B31A869B5EB7CC9B0A69E570F1B6D90AE6652921856DCE23CB1C4738C5E2339C6224CB0A5E082D42600ED34834622A38540EB51084DCC57292784B91600DA8F7E7CEB7E462ACD4DABB8D150D3CF29FA97D64BFE22A83C44F224589D85A05B962FF009065089694AD6809A07040B01D03D1EBFE0454C4AF309892B06849AFF9F16D7A308AB4E64F543AD51D38528BEE04F0A012A32A8FB224989BDA7CF699EC7AB0F8794A485A41092087A58D05583EE49E82D137879587912C82B4A484EB4F4E7AFDEE3B71A0324CA7B39C85DD4D9C3487330A9642E8D2EC071B54113C06542E41F1016EA231C4BB478B998C98B9387515842889894870E5CA471015E6DCDF58A8E72A0E4CB75036367AD2951B1F0E71EA36659C3664717226EA36B409F3B728F80C79D70B8304FED776B8DB6AB0A3176A7A4457027D9B7BE6F107CCB3B4240FE6753BC7A73E53EEC58F099792DF2D000006A907EA6F190902C22B7CE73C412A973ACCA8C7BBAD86E39FA462CB85CBC10029034FEDBBF852E06BCF9662B7CD73B6FF00E6708BDF889B6FB6E4F945FE3369CBF2F649E14072DE7B6D7E5CBA64122D1566779F24154BA45CFF005284EFE7602FCA716FC1E0520A4140AB68C4B7416FE3785E2AACE73B4A88FE612255038CDA796FEF91E96DB170C065E9FF008245051ACDFE75FB42E00141158E739B83C443A7983E237F2EA4F5E5E9B62DF82C024B3A053560341EB6A783C390C34A569FE7D8D22B8CCB34E22005A8913FD47DFD63A927DD6C5A3078364FED1A5C0AEC341B523632F8806A1DF6AF8546B6B59E21398E668F102A207A93E47FDF9CDE263139230C90015005AE1AF571A3736B885A561D45882E353A9D0F97D1A2179866215C30AB09E7FBFBA0DC937C3F972E5D59228D6E4FF4899C3616CC1DFCC56C2F7BF880F678BD556A493E283CAE679F39E63D3A838708968AFCAECD7FC79FE22730F82040743125EBC98F2634B7DA2355B5A2D04F393227ADA39F2F59F5C131080C486BD757F7FCEB12F84C210E079816F5B753E42D1CAAAD4927C4444C5FCAC664721333CF081084A41201B87B52A3EECDAE9AC4A4BC3970C97DE82BF5D343AD7AB2B95A0920A8DB7827693EF883B911E778C375000B00DAEB57DE24E4E1C16743BEC2BF47DB7E621ADFAC499B9F333063CFE07CF7B73C36529CFD044949C20D45069F9FC56D48697AB120024DEFCC47BE08F3933C8F48C359C0177AB3372B7958F9F3112D86C1214DF2D587570D4E74E8FF00442E5724EE7AECAB7C41836F8C0DF0D432052A0BB301F514F7E4F0E0827467AFED3F47D377F268D06B5226E62FFD5D3ADBEE9FC7092A72C502BC341CBED00904101E96A066F0DF95631FAFA3FBA0F3F10FFB8619AA6AC9352DF5EBEF946E306B0EC0B1F3FA1F6F7731C8CC9C410A6CA890A489E29DCC6F262660C1F29BE1D499D3112661130A69A7FF00AB4E5BB7285E4C8293B2B6D4EAD7D6C29E178795E7EF32FD352125448E2124CA4C05483CAF04411E5388BC2AC4E4E204E50997FDC1C6BBB8BEBB6B18C6E0FBC94A253522A6DB8BEBAED6D35F7B3D853B48675CF616F69872A0AEBF43A9A04AD654F2BEBF54560152CF11802D72074DA3C87F16B048CBB3999899008566055DE84BB204A0424DDAA7616F5E19DB0CB9284CC1DD8643906D777D8EB4D43DC388EE73F53DD17521C238D2D917327853248827DF706200E58E7FD9A946609CA5FCC0115218D497FBB694B6B1C52661889A43317A0F1AE8CCCF7F5668462B5AA94BE92E250EBC9E14154149004282C2BC2AB75F4B5862CAA966594841E14A4BB815A9A310C7AB1357A6D3B976327E048EE96657135412051BD5998E9568E977B41FB33E8FED432FACA9551B0CEA1085A9AAC6DAEEC2DC8241212128E82E637DE3172CAB1B3414A16B570822BC44B5294EAD6148EA9D9BCEF1699A850C42810DC4E7881D0821EA2D7E54263C32ED47B1DD57D93E78E51E7D46F399754BAE8A2A94A49404B64CCF76088129E7BD84CE3A9E513E624242A605022F4A027ABF9B78D1FBC6579948C6C994A03BB9881F3077EF1D83F2D49FADE295A97EAC3C94A877F9783B240494FAC4AAC79CFE38B74B99C49705F7B78728B8E1A6CB5212A291C400047A3697BFB10B6A54A0D30524160825A47347F749DCC99DC635984D1CD4DC56BF6D3AFD90C7250B4860C79ED616F523D211779E5F3FD309C45F723979983BCF2F9FE9820EE472F330779E5F3FD3041DC8E5E660EF0F43F1FD3015F06F5E434EBD616932921DC0F5FADF783BCF2F9FE98C77C79F9085F813B7A9FCC6D6D60CCC8F98FF007C67BDE6DE03EC0C1C09DBD4FE636F1A7AFC8FE583BDFF00BBD3F883813B7A9FCC705606D7F97E18D173096657A7F1070276F5309DC5EF3D2E768F86FF00BDF6C20B5AC10CA6E97F1FB78C1C09DBD4FE6908DC73602FD3F7CBD39DCE1098B5503B3BBB787BFA343E4A10003C21EF563EF96B1A7BCF4DFAFCBD7F71867DE2FF00E461544B4D5C3F5F18C915612B4B0A00A5E07895BF08489B1DC7388F2EA313D96AD3DC4E2B2EC9BF817EBAF421A821C7767BA584001F9B6FCE8E5BCABCD653D638D52D496480C01146540492490F44DC93CA7D4621F058D299D89055F213F292435C92D7F5D7AC43BCA973E519A38A73FF00BA384B00FF002B814A0A3B51E3B8DEC2FECA99AFB41F699475F9952BAC68FC96A13575EFB895772BEEC77E80788A64171B22C48B99118E09F16331C415BCA9EA425D99277236BF4FF10876B73C9383CB664B90532D66529D8D5DAE37F5BB347D2566ACE459464747439486D8A2D3B4EDD232C3490DB4A84A5824348E149BA249E1266E2F3344ECDCB993CB4E05666A5C2D42CC28F7771D4D58E823C2FDA2CCF158DCCA6056215313DE2800E5AA4EE49F7B33F5DF54E6EB8AC696A5292903EA4493BA812E45CEC771CA04473EABD97C0F77317F2808243B01536FAD35DE25B0525326425412028A4540BBDDD869E1CEAF1D4BD4AA79CAD577854E3AEAF8384289B1302C081CC63A2CB97C3502BEA1ECDAD7946B3A62D36253F97DF5BDAD6BC4FF0046E87C974851D46AECDD095D654252BA143838B8080428F0F885ED123716DC6196267E2B153C60A54C5140FF00ACC4D033A40635714A7A43513660209516FEDBD77E5E3466F3AFB5BEBDABAAAB5B8AAA4F0BD2869A04029481C205B6111B798E47172C97279328213DD5989E20EFABD5CDFC9CC399438CBABE635777018FF9B7E628DA8CD5FA6A9A879F052144428F8F88AB6481B9E298117BCDB9DA31F3118390C964324D2CE4793EDE35AB449A0A254B53258B3123EA29A79DB578EC5F62FA169DA655DA1EA767B9A0482ACAA89E07894E5D1C7C2405D9CE1500A4911B5B1C6B3CCD2762710BC2C89C5D4A214A497084ED7209507E8F6D62B3996216569E0511C2EE428B2AA34D18D2C1C72BA5ED4B582AB2A4B752F0352DF185F01E068B51FC901B443638500030395E0EF25906070E129946582054F11E2249A92497275678DF2C96AC4CC1DEFCCEC2D7DA9A7BAB47A7398E70F193736EBBF9C733EA71C070F80424B82E36236A353EACF488A880E6F9CB8024827C455CEC4FEB6FC37B59705824A883D2B60343D6C7AF8411586759D3A4AE144EF107D79DBAFCB16591854A00702D717DB4E9FE5E8456B9A674F447113B9224FDFF00B988E718B3E57864872A0030F1F3DF716A1DA08ABF3CCED7E205666F249BC91B7975361E87168C2E141F9A805399B8F5FC5E1C0B0D22B4AFCDDC528CA8AB7BFCBA1E7BC7C3171CBF0A1D23CDC374EA36FB5E1C457B9CE6AE78BC44133CF9413E9713B47A8BE2E183C325213C4028D6835DFC052DA6F0E694F567AF2AFD6D5B30AC0AAF3270932A3B9B5F793E5B5C6DCBAEE6691204A161A786DF6AECDCE24B0B28299D2C28EE5F99DEFF00E221D99662ABC1379FDFEF97BB0BA789C7FC6AF67D1BE8DB8D1844E61F0A82E05D2CE5ACFB575B797488ABB5CB502788DBD4F9003CAFD473F52E258357B166F5FBBFA44E61B0813C2281CD9BD7F00F8F363AAAC549B9136206DF21E7D37E4230E25EBE1F789B918349BD5FDEFCBEBBD63B5B58A004DF7D89E73F8FBAFB6E71ACE7E17D1EBE9F8898C3E112970430A5BC1B9F2209D22355758A13722D37BF5F311BDFD6D866B24853F2AEFF008689195844BBD850F9FE34DACED76572B172649E7FED37EB1CAD6EB86EB511E3AD0337F1D22570F84492C19C5E9BF93D18E8DF46B7AAD706E4F99BFEEE778DE2791C332A7B519EAFEED5F331232B09562001FDC47E2A3D37F16A76B166209833FEFEF9E7C8FA0084F3ADDE9D29E147B5BAD624B0F87482DD34D6A7ECC2D4840BAC50E7E637FBF7FDDB0CD4585013BEDFC7AFD8B93246C0F8FE77FF00309CD5B9D499EBFBBE1B295C2D4778D3B87A801B4A0E9BC71F5959DC7C0C7E1FBDEF11868A5851F95C0AEA7A7DA36EE696F17FE5A394E6A9A675A6D6990E104C9FED20F4EBEFEB6B1CA56384D6A4100877F3B4389785E22549B25B89CEE5A9E76630B9FCF1B72AEAAA026F4C1A4A4F4E301260F381F08C3196BEED6B06EA2C696B8F56FE443D9B81FF00648201E204A74A01E8F53FC523D2BFA35BB42A9A3ED79DD089528D26B3656E38893C3396D2B8F24F0DFF00A86F1EFDB1E68F8D5FED6265B31EF2CCDA33B120DF61B3B35B91F6DB2CE3C0CB9894022571F78453767A024F87D80F65AA3345BC8A9784FF0025F2D4F203BC2D816E97001F2BE39B766E58972C922843B7A9DFABBD19E9531E75C5E1409CB61AB721EC6C776A421CD1EA7A65B2CD538A692B0141692641226D11249B7A62D2A962600B48D6A0D486A539D397DE22F184482962ED6E56A6B7BD296686CCCF35A814BF5653519790422B090547CF8638F7B46D3D4E24F0321226898872B49A2743B3E9D4B1D0522C790E3A624A4034357B7997B5AA0F8C50FDA2F679A635E64EF506A0A269E67BB7050D52920AC29625644026CA20448C5D7018B9D2672552C711769D29C86164D5E828FB73D23B6F67F305B25894B70B58B9E7F4FB3B478BDDB876059AF66B9B55D6E5090F644E38B500784008DC40512AE768131E713D0B0B39D20A4B12016726BB5437D368EA981C72D68055FB8332874D68E695AFDC47565F0E25454567854480DFF6116313D4CED874B2EC742EDE7FE2260CC33D22E08A13BFAF43FCC2793D4FC4E348D7BBE7E9FCC127A9F89C10777CFD3F9824F53F13820EEF9FA7F31CF12873FC7EFC11B253C2F577F7BC1C6AEBF21F9608DA3636A55EFD3A79E0823671ABAFC87E58208E0ACC1936E76FC8608212AD66E67D07EFCBF7CB092EE3A7BF6FFC9089D5ED373CC7B87945B084CD3C7ED0F93FB4468EF0F41FA7EF9FCB0CE1697AF87DE32EF9A292D287F39653DD1BEC3EDFA0E107F330061EC99A65C998016241A72A8FE3A9E6625B0D2C2A5AA81D85478B136D5A96FB5BBD8FF65B9C76D1AFF21D01A7C91F5EAA6C344708E26D252E544F14720A1731EF99A066B982B0489F3662F825A41516E4F76E61ACCE763152CDF1A8CB7BC9C5026CD5823859B85835D8D4695B8BD23EA3BB30ECA329F679D0995E89D354CD53E6E9A563F8F54A10038A52909704AA24C82B1E156C6D36C70ECDB1CBED04F5E317F3617888C356DC2785742C4B91AF3F0F35F6DFB5335026C9E3539E20456C5DBC0023C2ECC2346AFCD29DC5B6DE5CB3F554A54AABB93C4B899337FB5C5E5E800C5A3B35844210AF943900696736AD1ABE768E13865FEB71A56AD5679EFAFAEF4B168EBBEAFCECB74E16A324F1269CED24920CEFCF99EB8EAB91E1021D40073566F3FB8BDE3A409625E1D054588143BBB303D2E5AE2C6231A474F36E29FCFB3B4F1B490A71B045844C6DE839183169C486366AD2A1270DFF0055640E96777BB8B546B1173C025459C01FB7C3466A8FB08AC35EF69CA0FD665A904D123C14C018080278AC049B89369BF3C59727CA6505214AACD5B152CBD48D2BCE97AB54E911FF0032A610372E0B7E69C9C9D7668EB56679C3150B5666FD4AF89B51286A1504A8909E703CCC6F36C741C3E01329085B86E9771B796AF1278595354A1292975173C2E03B03F40C6CE79C5F9D88F6655FAFAA9DD5FA9804E89CA54D3956490429464538213FCC82F2520900FB86397FC46CF93972A4E0A59271789E21264DB88062B3C4681857573477A95F1330A2539D010B5731403F9E51716BCD5AE53D4AE9A8DB0CE5D4AD7759751A2020B696F84ACC40160177124C9DE71CEB08927854A24CC51F994CC5CD5BC2D7D3668A8E2141732D47A5F91B73B56DE71D1BD55AADEA9CC2B180F29D430A90E99F171924A6F061311E62F18BE64E966A1040AF31E5E0E6D5A6F7EECF6010532A610FC676B358D29F4B47CB3E3F3111F6BE0C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C104182083041060820C1041820830411FFD9, '1', '2021-10-06 01:15:47', '1', '2021-10-06 01:15:47', b'0', 0); +INSERT INTO `infra_file` VALUES ('add5ec1891a7d97d2cc1d60847e16294.jpg', NULL, 0xFFD8FFE000104A46494600010101006400640000FFDB00840006040506050406060506070706080A100A0A09090A140E0F0C1017141818171416161A1D251F1A1B231C1616202C20232627292A29191F2D302D283025282928010707070A080A130A0A13281A161A2828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828FFC200110800EC00EC03012200021101031101FFC4001C0001000105010100000000000000000000000701020405060308FFDA0008010100000000FA14000707A3E3F659B5F2B3CB1B171B57BAFA2C000BE1ED8731AFC752DF3F2F2EF249DF79D0000A465CD59E5ACA5BE7B09BB71441BBB943DC0017447C95DB0D662E4FD0192237F3E17E8600039B8AF556E579647D0B60807A3DA49368003D7E7AC1A5B678CA3255081A4AEBC0007AFCF5834C6E8BA3DDF756902CE39200034908796C661E82C04073E003D755A4B2FC9F48A34CFA172404152C6F415C4E175B9BB879F8EAB41CEF792A807CF1B1903B7BADA5DC0737D47ADCB3CFCBCE3FD2CCBDB807CE35CAF5E8B3F0757D0FBF1BE7DD655B65965BF384B9397B80F9C6A2EDAF577F05A0F3D9499958BACF4E7F41D0654E168118657B59A8E2E43DD71B31FC73ED26EE33FB0E939E8FB135FEFBA9528007159783CAD981B8C5DDC9596A5231D6E17173476200BE26D8351AFCEB33FBED077DABE2FCFB6DB59CE463365A018B156E4A3CB7DDBC65CDE3EDF71259C945B3D7900725CFFB554C0EA3B769E32BEC92F794A4711EEE3BDEBAC0380C657CB7FD6E50F3D4E266EE0C2E2F9DE73CA6FD90237B7CB7FDB5F554B6911C8BB8A948CB039CE5E79E94230B3B6E98A82945453C225BB87D44E3DA158BB77DF56A00A1452DE6A2DB397D6FD5C562696B215002DAE1E4D29CCF8471C9DBF4E9EB03CF952A028A539DE8296E1C7DD3C2DABFA80BA3690760A5C28514A626A37F4A523DC2D7E9A772B1CC9B7733B2DA2828A2DB628EAFABA523DD1D29302BC6767EE88E46DB1414A29486A1A9CF8E99E2BD91303CF98ECE8897A9EC5428A294A70B04E5E279751D613038FECBD5485BA5911428A514530780D5E9B7B62930B93ED2D6A222EA64A28A514514ADB444FE56D7FFC4001B01000105010100000000000000000000000001020304050607FFDA0008010210000000F3600075E70AD558EA46005B9DCE33E1B7367000694AC32CD3CC00034E58A1A69A59A125A512766681ACD81C9A194D4F44E2B280D94750E8BD1383E7AE6F60E4D500BB0F4BB3CCEBAC540E7500BD5CB7D135B33E0E769342FA6DDE51AAADE56CD084D7DE780014F9CBF8EFEA2E800346D4CDC87F57654104628C38ED9DE6B841064EB5978DEAAEB155104115A7FFC4001A010002030101000000000000000000000000040102030506FFDA0008010310000000EB00043FBC939A35CE4003A76164A7AFC9800061CB22B8CAC0006EDA78C4B0B845F5B8C23981D3533A3CA742D7F0DDCD006A346783E07D9FA05BCFF7A92016EAF9EE0FABE6CE8DD4901AE84ADC1E8F5BCDE0CEC483FA72520BD62DE8D54E46B8F500019F429A318AC001259BEAF3215C8009BC1B5F4C55D2B5924B9560D55CB5AD2490B4EB3FFFC400451000010302020604090A050403010000000102030400110512061321314151203261711014222330425281D11524333440537291A1B116436292C16382E1F0357383A2FFDA0008010100013F01F4FC6B4931051908C2222ACB706690B1EAA397BE9E719811335B2B68D800AF9C4D735CB6D6A56E48036229BC3DF575B223BCDE861A84ED71E3F95AB53091D672FF00EEA270F1EA66FCE8C8863AB187F68A335A1D58C8FD2953F932DD2A628FF2DAFEDA3249FE5B5FD94F2D9BF94D3415FD236D4518C6ABE66D627A9E194AADF6047585622C3B866352E54C49533297E43C3684F61E54E105ACC946B788038D09B2E495063220A77802EAFD696EBF721C79DBF2BDABBC93DFD0346AF750424152D5B9291727DD587E8ACA9090B9EE888DFDDA76AFE02B0FC270FC3BEAB1939FEF17E52BF3AD62A9195C405B4B4B883B8A4DFEC0B4A1D694D3C80B6D42C526B12C39583FCE226672028F96DEF2DF68ECAC4594AB24A64EC3B7327876D22521D4E5988CDFEA246DA7A294A758C9D635CC784D1AC330F918A492D46B04A7E91D3B91F13D9585619170A6B2C74E678F59E575954493BFC3F25BB11CD6E1129C8CBF66FE49A8BA55221B89631D8BB0EC0F37C6A2BEC4C643B0DD4BAD9E47D38B1052B014856C20D488BF26622B84ADB11F1999278734D3CD969D520F034CBCB65576D56A25895BECCBDCFD534F34B65595C16FF346A0C473109CDC465594A815297ECA79D448CCC18A88D15395B4FEA799E88A75B43AD943A90B41DE0D3C1FD1F9499905CB344D8A4EEEEA0A0E34DB805B3A42BD3E92C432F075A9B1E7E3F9D47BAA7283A961F4FF00311E14485253915671BF655FE3952D0082B64E64F11C53DF583CD187630C495FD09F34E7603C6962C766E3D1462130904EA7F0E534EBB20A9A8F159D74B705F28DC91CCD46D185BEE25EC6A46B2DB7528DD4A3BAC2C06C03D3B7B4E53B8EC34B4EA98531F72FAD1E1357208209046E229C3981CC37EF238FBAB43315D73670D92BBBAD8BB2A3EB2797BBA3872017F32BAA819AB4559221393DC1E7652AE3B10370FB0B5D7152961C7A42C6E72438A1DD7B785C7128EB1DBC071350B02C5268CC969319BF69EDE7DD4DE8728FD63123DCDA2B0DD178906735284A7DC5B66E01B513737E824EAF0A98E0DE465FFBF9D436F5387C4680B656923F4FB0E3738C083E6B6CA7CEAD94F6F3F752C25166D06E940CA0F3EDF061B02462920B516C9423E91E56E4F6769AC2F0785860BB2DEB1FE2F39B5468A89DFD37ADF213DF8BFC8A1B59688DD907A20835227C18BF5898CA7B335E97A478524D92EBAE7E06C9AFE228C7A90A72FF00F9D0C7D9E302701FFAFF00E6938EE1C4F9C53CCF6BAD102A563586C58FAE3290E83D54B67328FBAA6CE7A64A54A90323A5391B6FEE91F13E04A1C79C6D9605DD7559103B6A2456A0446E2C74D9081B7B4F3F43193AF852637150B8AD1E942760CC281BB8D8D5AC768E9EFA992A3416F3CC7D0D0E00EF34EE9148977460F12C3EF9EDD4A87325FF00E47107560FA8DEC151F0B84C7518413CD5B68009EA803BA8D1A34F448EEAB32DA467F680B1FCEA4E1EA4254A64A9CE394EFF00CE92A0ADDDC472AD098E97A5CA9AB17D479A6FBCEF3E899714D38168DE2A338E33255270D7FC5DF59BADA5F51CA87A48CA9496B1465511FF006BD4FCE9BCAEA02D95A5C41E2937ACA7978522FDD5896901538A8B82A75AE8EB3C7AA9A630B0A735F3DC5497CEF2ADD49B0161B055EAF57A2689A346A7E30F78C29A8694D926C5445EF4EC85BEE053A84B723DB1D55F61F8D684048C04A13F4A1D59713C526FC7DDE910FAC2321F2DBF655B4530A61B5E646BE3AB9B2E5A9B9F3B66A31726DC1D40AF95B1C693B04391EEB1A5693632D9F3986B67B81A7B1BC5719CD0C3488ADFF3549BEEE550E3B71590DB42C07EB4FBEDC76CB8F2825239D3FA43B7E6D1CA87359B531A4842AD263651CD06A3496A4B41C616149357ABD5E8D71AC230886BD1790EBA91AE5A5C257C516BD4194BF18650B480D1010A17BDCF3A8921FC2DC131ABAB56723E8FBC4703DF51A435362B72A32B332E0B8F4C1453D524771A87AE7DD09D6B9946D3B69B425B4E540B0A52821254A3648173498F37185AA42595AA3A4F93C8549929662BEEB2DA17A95645051B1BD61AFB38A5D011AB780BE5E75143D86C82E37D5F593ED0A8B25B94C875955D06AF4FBEDB29CCF3894279A8D7CA71782D44730DAAD45F4C98EE884F20B994E5B1DC6B0275E6D9721C8D6A2DD64AB7281A7F4714257993E689BDEFBAA4C96A2CA4B6F1F36F2721ECEDAD1F9FF22622B8EF9F993EADBFD0AE7DD446E236A4EE3E813A1E7F9B89AFFDA9A4E8743DBAD99257EFB57F0861BF7D27FBA95A1F879EA48909F7D3FA21251730A685F24AC5AA6C79B86AAD3D8213EDA77560907E6F9DCD855B4FC29C8A35B649B0B5EB1D516F0C91CFABFAD600DB4CE09112DDB206C7FCD692869CD209EB67E8CBA77568FB4E7CA91CB69E3B7BAB1646469C58DA40D82B0D8A21450D5EEAEB28F6D3697E63C598405D3F48EABAADFC4F6541C1A24539D49D7C8E2EBBB4FBB97827E0F0A68BADA0DBBC1D6FC950AC423488032CE0A7A2DFC99281B53F8870EFAF9D048CA10F208D8A0ACA4D3985096A0E4C514AF8250760158AC44B91EE91D5163DD5A218C2B38C3272AE7F92BE7D94458FA4D2D7C96A261C9EB495E65F6213B6A23EDA59B28D88A724A8BAA523603B2B1B19B0C7EE6DB2FF00AD6172DF430194B8AD572A95804790F1790ACAA3BC54382C4004A7CA739D7D6E50B6D69A55D479AB9504392A408B1CD96A175AFEED3CFBF95458EDC5610CB09CADA770E8101408201076106BE4A5AF5AF610E06D21C524B0EED4120F03C29D5CA8DF5D82FB607AEDF9C4FE95F29C4E2EE5FC4922B15318A82E3C8403BD3955B8D68962C716C36CF2AF299D8AED1CFD1A05D429D77C771D9926F76DAF30DFBB7F87158AA99096CA1412A36DF50E0C88EC84A9E43847022DFAD66929D81827B42C56A243E7CFA836DF241BA8FBE965319901A6EFEAA109F589DC2B0F8660425EE724AAEB591EB2B977560788B8E4F991E5150505272E6EEF04B9CC450758BF2BD91BE9CD296028846AFF00326938FC89CBD461CC05BCA1D6DB64F693585C4F1282DB19B3A86D52B9A8ED27C0A48575803DE2B178EC2602C865B06E3720560EB30B4B5ACBB1124588A56C51F4531EF168129FE2DB648EFAC211920357DEBF2CFBFA4EB8865B52DD504A06F26B0684B71D4CD94828007996D5BC7F51EDF0694C53E3D16446506DE5052566DB176B581AF18C4BAB9503B75A6D5E28EBC6F31DCC9FBB46C1EFA4B6848B252903BAB01467C656B4F55A672ABBC9D9FB7431F72CDB4D73398D48F271BC29437EB2DFA8A77AE7D1697B9ABD1E75237BAA08A69391B4279003A3E3216EEA6321521EF61BDB6EF3C2B0DC1D7AE4C9C4B22DC4ED6D94ED4B7DBDA7C38AC3F1D8A50956475273215C8FC29D73C5DCD5CB4961CE4BDC7B8F1AD6200B95A2DCEF4D2D7255921365F5F31D51DE6B08802045C8559DD51CCE2FDA3D0C614A54F702BD5D83BAB16D6F8E40547FA54AC94F7D31A4B8CC43F3D8A1F6C6F396C7F31585E9161D889080B2C3E7D473E34A491DDE834CCDD186B1EDBD7E83257254530DB2F91BC8D891DEAA6B020ED8CF794E7FA4DF928F89A8EC351DB0DB0DA1B40F5522DD15A12E272B894A93C942E2BE4A819F3F8947CDCF2548C4998A754CB79B2F04EC02B0F9C8999C25252A45B37BFA12633525367537E4788A9FA3C1E19DA78EB1BBA9A047ADC298703CD058D97DE391E22B11C2DB76EB69365F2158563B3B082942FE710C6F4AB78EEAC33108B8AC7D7435DFDA41DE9E9E949CD8E618DFB282AB781D73265012A5AD46C94245CA8F6544C194F0CF89916E11D0760FC478FED484A5080942425237002C07A03B8D390714724A9866304241B78C38AF27BC0E3585406F0F881A412B513996E1DEB573E963917C46619681F357CD9DFE85FB5DC68D6251B617503F10A61C7F0F9224C0564706F1C0D6038DC7C659B27CDCA48F2DB3FB8ECE96909CDA551C704B17FDE9E73568D892B59395284EF51E558461BE2BE7E45973163CA57040F653FF0076FD89E6D0F34B6DD48536B16524F115219561B24457AFA93B1874FAC3D93DB46A5B3A978A7D5DE2BCE30FA64C45143E837045617A510254342E63896246E5A4F3ECE871AC636E972FFA628FDEB47E3090F2A7AF6A5376D81FBABFC7D931D85F2843530DB812F6F483B95DE3FCD403250B5C793B54DEC39B62D3D879F7D62A9F36857236F03B192B5E6B91D01BEB1F51563D2D2D6C756866324F6AAFF1A8ECA23B0DB2D0B21B4848FB03EFA59C80DCAD672A1237A8F431E694A845F66FAE8FE705B88E229C8AC6330997C9C8FDBC9751BD3F11D958C3722235AB9A80368CAEA7A8BF81ECE937D7AC3E5993A62DBE47997242F2F7E5B0FB0E1C7C664489AADC545A67B1037FE67A12D84C98EB6944A42B883623B6B47642E015E1F33638855BE07B8D62AB4BF065B4B48394849078D4A82B601531771AF638A7BB9D254142E9DA3A093635A4C9660CEC15D650869297944D85870BD4394DCC6CB8C056AAF64AC8B05768ECF4F2DCD54579C1BD0852BF4AC0148560B0CB7BB563F3E3D1D286836F44969EB156A17DA0EEFD69C92A5EB2FEBA520F78F03F874779C2B505051DF9556E86C00A9442509DA49E1410349E787568B6131890DF02F2B9F750000000B01E0C6F11F1169B4A7E95D5048ECEDAC35F5488895B9D6DA0FA4202810ADA0EC35A3B3061932561524D834B3AB27D9E0698D21C35F9DE2AD48BBB7CA0DBC951E40F434CDDB4161A1D653A93D2DE6B1B5AF11949C1A2A8A507CA94E0E09F6477D30CB71D9432CA421B40CA948E1E1D28CCAC563A6FB3589FDAF58565F106B29BECDBDFE974FE225296662363AA56AC914127665D878562DA4AE468AD371D00CB50DAB56D48EDA81A5188C792954B73C618BF969290081D94FE2D15A4660E67BEEB7C6B1A7D53A6C7521C4E6CF982378B749D7931A3BD217D56D2555A2ED2BC4972DEFA696B2E13D9C3A1A48ABCC2AF61D47C2B00776BAD1FC43D2E99435CBC1EED0BAD956B2DD9C6A1B49912DA6F7A6F750ECA95152C4D534D9590948B85F0A71BF20D3816E93AE56729397B36568FA72B4FEC1B17BFDDD2D2E51F929A8E8DF25E4B74CB619690DA3AA80123C24D85CEE158A2F5ADBCBE6ACDFF00EAB0755B104F6823D32224742CAD11D94ACF108158E600FC99CB950D6DDDCB67439B368E37A8BA332B5A15296C8037041BFBEBF86B1242F54DA1A5206E74AF7FBABC45386B288F9B3BBD65ABB4F4B1FDB3B0349DC645FA18B2CA2039978ECAC4C5E0BBB48D97D9583FD7D9FF00BC3EC4EAD4E3AA5ACDD4A37E87FFC40029100100010303030402030101000000000001110021314151611071812091A1B130C1D1E1F0F140FFDA0008010100013F10FCE0B032D36BD74B69C8F6137A56A00C92E87777A82C152709D05827769D2D7B9F63F9A46C9B00FBB58E2CDE53EC547DD0BE1FDB41C2099E4F34E5A46241F4524D856723E655FC52A491A36144F10CD40C4961A5C0BFF8103389AB0DE8E169ED3DA981205B99E90B6F348CE90978FE14B61C15F4914ABF205FBE8D3D0A94B3D0E3F81769770BD97397E02682183E43CB1E2294727B5459448C1F25223088FE782179644A756382AA57C9FE734AE1D0F0A701E6841A16200E50FD7B5470BDCBE9DFD05429E19C96DC9A7BA2ACC52D45BBE8705A90953D65F35AD3FEB99A590583939461F10F15A997264EE64F3F9E17411A4473255DDB9BE3538D3C6F578EB43B9A352612C991EE56128D1979DAA72568E4EC7A0FF3C04C5986AE87347DCF7BCBAC9AAEAFA548290C636AC7B65C8D3BACB3232B35930F151AC466D20FEFF3CC91C50966E4F24FB563C096344FFBF1D1A6C29CB58E56553F01BAFC6DB92D589215DF9F161A0910DE1309E91A4CDA29F33334A674442CB680DA8854C0743C2EDBC7BD0282100D0FCE0719341D4A99198FBCDA64FBA69E8D4598425190EC4041DDA3C5B82951A60E51DDAA3E3B52228E4F427CED4F18FF0071508A74B9647DCD673FF804D4A38B5059803F0D34D47E461BF60AD946AA06E1BD452466E708EEBFAAB2938A163582A6777A1B4417B4508404404130FF00C248277E82EF8177C57B207167C957A5BF1A24CFA0F83DE8309CD60E1D0E0A6EEF1EB825B909A199214F63F0E714B2520DDA2A51BE056E096A589D2F5DAD52A33D0919F769379F44C1EF4895CE0F71A1286E36727605FDE2A69EC7647BB3F36C7484A6721AF6095ED45888919D64EAADFF0009631BDD8FE42B946162DDFC47AC15012D0471C8F60CBE29652EC840344313C2BDAA752C85BC7FE2A0133A73F9A3E01C400FAA4EEFBD2A6A65A33146488BB82F4E5E9BB25DB53DE895948C8215B268D0F0109B429EF441E5A5555CBF85500DEC3C539B9C696FD37699342E895CEC3DCE6A18E24207DA93D5489913A5DE017574A0FEA8371DB47BE3BD33BB64287CE7EB8A02103004051428F502ABA8AEEEBD8331B14A11200C06CEFB7BA928269B796034B0FC8B944B27FF000F15DE8A43C9AD4025299D5E162529513F4BBBD642AC6592CDB6B71A6A54C1026E2FD19AD4FE9D56EF35A945965D8DDA621FED4050052E66C78735ACD18C8EC9A3D0D1A2A1B3BD4F34B5BCA10E9114E98389E470D4FF00E47B1F402D3C157ADC184DC4D11B27E1289EBDE9A95790A51C2F23B1B79A020917BAE5776A73848E819A57822058E3777A12C6DA4081E68776F0320E1A9FA41C6193BECD61BD6E422644D1A69C1E605290A6D53DD14EC582B905A4C9521224524A4A6F522922B4B3B54EE99E4108D4C94B898ECD23C8CFF544090121713F036F227061F745B95C4087DD76EDA1FC5679B4929F45446DA8786A51E4BC5E51984B7EF8A8C0B0846F3A781F3489EBB4DE198A24320B3903483C8D4C2A4A7CCD00A4B060A597DE69CE00BDD97A839230195B07BA5199B32B5613E2D1531C9029E2FD2F31449AC5B8EF06C780A2C416363151862F7BB7933D9A8BE618658C8659D948A121381A28DBD9A3492C7BB254BBC94292C0466187B944DCA59CBFE7DA9A24FC6498A56248B9542F760F7A04762C3ACBA525502026850E3C127540D1A046D2B454B42CA124F6A72E4227A1C5044809A72C1ECDDF053088498961EF606AF050512C64795755CAEAFA0CB140488E89519BAED8014AE5DB0516E50404E66EA9146859863DCA9B889A276AD83EA92922BEBA4BDA1FEFF1C1A9B1F9B6190EEFDF54A42870B38AB1438400D8FE454E3B10FF009A619765E0DAC03C5EA43892D4AA039573DDAB53A1BA0B0E1603F9ACD1C4C659243819B76A8767DAA22904D9477D03BD04082D2C5F21158C6E001E16580F35255E63C4C7DC3429853B50503EC0FDD36AD1A0667B50146DEACA90E39068C0E7F143BF432DF3152AC253754FA8CA2CAA029E88A344D93D1160C837BBD0AE5E121981C4B0E4A5489372FB2682C64C80ABCB2D1328C00A7B21306CD1EC9A8EA60376EC163E569366ABDE4FE684245BF12BC8C9E32CFEAA0500B670450FA1405C987F403BD4CF6F28F7AFBF834EB02C03C9074791669747BC1CD8C5A934A7A8C5065C622F3E1838A8357E2C4BB1B183D02C2003EC99F32D12B97A62200EB6D2B548D8B7163DCADBD6912F183F15756FB8FC196AC3F11FCD4CAF49A52B50B97C96F04B436BFA8F698F913B560E6C31FDFA1A6AD7922786818BB16A38A686076D63E8AC2D08B30CA09EC4F9A9A7A427A30DBB0D1B85CC0C6C5DA684C5487C95939192811733667B73C52E6B2309E593B62AF84360DB27EF1587D473B2270C3367E28A13D80DA61FBC1AD1449DD2ED0DDF047750AEB8181B018EB1D5E854861441DA94CA50A46CAEAB513914657E8D0F531347030F63D80F3DE8503721835E7F9A70B66248EA27EA99413CACFD9F4A4461B3E832536A2B57F4A8242424AF03BFC6684A9180FE006EE5758F5C7E078E92244C952415959E636E392F4444491B2351565ECD31F559963FDE6823CB5310D61A3E830A3321D4BA4FF4AB81AD22063BEA2381DFF2BE99A5A88064DF8934DB21BEF460EA448D0346C1868D8B794F09FD534A825C81AFA04939A2ED9229CC98E0978A80023E023FBE87E6C7179CC09B6C05D5B06685426CEA4D34B57E252E63F717EE14980B7EB539375AF53A83177B1BF23C539F4991382F4C8109B710E07708F7A3F24F468BB065A6BC089D4C23915EC14B4BD09FCC0E497026CC51B17AB362717045F4A0BA5FB81446803032E45CB4719A26D2613D17789DCA38AC640334FB538887699CCB7744DA7D735353D66A7A26084F09FD531AADD9CC899795A9E93D0F68921BA65DBED404EAF3B86FF153577EECA2BBC1AFA08B60AD002EAB57153A1D4B7060B7EDB1320400401B1D00ACA5ED58A4175E8081873E89A9A9A9E934B53445424371CD397D2CD97B1113FF006A2D52499E215FBD3ACD030B14386DFBA72F7A9F4020196808A198B6F7247C73446CF80054F4BB44F801C3EEA232129773254FA96A6A6A6A6A66A5FC86214473E2D5282BA08B43367DEA76ABB504090CAB36C77A304BC800B021331AD16000384BE2EB1506C402D1D5E0BDF55A5BFA6226592C4C18FD79A8F63DE31876CBE881F77D885F74D25600BE1FD749A9A5A9E9353D27AAA8B716502437B53C09D614035DAA5D36095370388A8ACDD20E56C548A3D3591858C050002B042E9063B7AAEFA600C4998F8286E0083608A9A9A1658095E299DC9DDD894C4D1AF69FD7A67A4D4F49F464C0062F98A8FF00F9260110139B5A9AB865D03BAD74D0A5F6D3000272E5344461216360FF006DD1A9EB6AA660E40FE6B4A73D1254306F0B0D43C7824E1B25081958925CB7F57AADFA36E8DBD0E29E8B03DAA75809A7AFFFC40032110002010204030506070100000000000001020300110412213105104113202232510630618191B11433425271A1C1F0FFDA0008010201013F00EFA005803589B860B6D0578F61615918EED5D98EA4D1897D2961075B576D147A5C9FE2BF0F14BF966C7D0D4913466CC3BF0CFA76726DF6AC96391BA55CAEF57BED4C5635CEF52CEF2EFB7A72EC581006F5886CB1647376F711B67456EA34E445B514F1F6C997A8DB996CAAEE3A69EE625C91853B9D68024D853CF147A6E6BF1A4795451249B9E4CA5A3751BEFDC8E1793CA2861E34FCC6B9F8566897CA9F5AED97F60FA50923BDCA0A570FE2AC4C9D9A651B9FB7776371BD3AA3EAEBAFA8A38788ECD6FE452E16306E5AE29E62DE14D052F02E20D1F682136FEFE9BD302A72B6879E178370F970CA81487B0F17C48F4DADFE5710C2BA390775D0FCBBA401BB0AF07EE1F5A319B5C548731D36AF66E34476C532E62B602FEA7AFF005A50C5BE6BB6D5ED7080CC9227988D7E3E9586C0BCE331D05370A005D5B5AC171AEC90418AF091B1E84563F1D1CF8C695366FF0005AB130766732EC7BD86F046D27CAAE6B807168B02AE92FEAB7CAD53F1BC3019CBDCFC2833F13C419A4F28FF00AD4B6B694580DEA444986561714FC2A33E52453E0F247949B8A6194907BAFE18517E7CF0D8379CFA0F5A862585422D30B1AD0520B0D79620D909352E14C84BC66F7A65286CC2DDCC568557D0561F0B24E7C234F5A8387C716ADA9AB5B99B2EC285EDAF2750E0A9A9E37C2CA452BA4EB6715340D11D76E428C071188C9D2911635CAA34F738BC3ACE963B8A40639321A5716B30B8E51AE670B58440333F527DC13D2AF47515361927B31D0D4913466CDCA30C5C64DEB0CAC175A26DDEBD1366157E43734543687970CC383E33D7EDC9F6A1CAF57ABF26B11AD48E249028DA9E219C2AD5AC4D5F9605408C7CB93EC6877C69A8ACCD7CD7D79FFFC4002E110002010302040503040300000000000001020300041121311012204105223251811330610614A1F02391C1FFDA0008010301013F00EB3B559AA88F2A7535A5647B566813524EB1FA8D3DC17D947CD3C3247B8C8A041EB5668CF325238750EBDEB7E13CE53C89BD63B9DF81914024ED52B2BBE536FB168D82C9F3C6EA3E53F507CF1BB3A2A7BFD9B55CB17F8A670832D4F72EDE8D053176F5371BC182ADD04814B148FB0C50B53DDA85A2FB9A365ECD4A81005153BF3BE3B0E9650C30C29AD31E83FEE8C128ED9AFA721D31515BAC63277A6F17B20FF4CCA33FDEFB50C30C8A0280AB8F16BF8AE1A4E60533A2FE33EFEF48EAEA255F4B6A3E7A4DDA7615FBB5F6349728DA6683A8D0D78FB3CAAB6A8DCA18124FE0634FE75A6B28D63F2EFEF5FA4DE6681D24F483A7FDA9EF121381A9A5F12D7CCBA55F7833BC867B3F306DC7706BC3EC1E1B25824DC7F1939AD54F2B6FD5127D4900A118049AFD41E152DF9478775CFCE6A0F04BD7C465703F34B1A786DB8863DCFF00734C083AD04276A46784E41C1A5F1271B8CD49389FCD8C11435E9B25C966E33DD2423DCD4B2B4ADCCD564904CBCB268C28086DD73A0AB997EB4A5C708572401455A3D185039DBA2C47F8F353DC2423CDBD4D7D249A0D07428E6DCD1C674E0AECA722A1916E2306A7B4C6A9BD03D8EFC6398416C1BBD3B973CCDBFD9B59DA17C8DAB21D79854F6E24D46FC09C0CD5C31C2A7B0FB0077E0A706A19DE1381A8A8E5590647038C6B5211A0EF4064E051D3A95720D6382EAA281236E12363845EAA61AF1C56382120E94A9CA849DE94F9799AB3A0C7190F08877A7DFAF359D318E3FFD9, '', '2021-01-13 17:15:36', '', '2021-03-12 20:30:44', b'1', 0); COMMIT; -- ---------------------------- --- Table structure for inf_job +-- Table structure for infra_job -- ---------------------------- -DROP TABLE IF EXISTS `inf_job`; -CREATE TABLE `inf_job` ( +DROP TABLE IF EXISTS `infra_job`; +CREATE TABLE `infra_job` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '任务编å·', - `name` varchar(32) NOT NULL COMMENT '任务åç§°', + `name` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '任务åç§°', `status` tinyint NOT NULL COMMENT '任务状æ€', - `handler_name` varchar(64) NOT NULL COMMENT '处ç†å™¨çš„åå­—', - `handler_param` varchar(255) DEFAULT NULL COMMENT '处ç†å™¨çš„傿•°', - `cron_expression` varchar(32) NOT NULL COMMENT 'CRON 表达å¼', + `handler_name` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '处ç†å™¨çš„åå­—', + `handler_param` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '处ç†å™¨çš„傿•°', + `cron_expression` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'CRON 表达å¼', `retry_count` int NOT NULL DEFAULT '0' COMMENT 'é‡è¯•次数', `retry_interval` int NOT NULL DEFAULT '0' COMMENT 'é‡è¯•é—´éš”', `monitor_timeout` int NOT NULL DEFAULT '0' COMMENT '监控超时时间', - `creator` varchar(64) DEFAULT '' COMMENT '创建者', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) DEFAULT '' COMMENT '更新者', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='定时任务表'; -- ---------------------------- --- Records of inf_job +-- Records of infra_job -- ---------------------------- BEGIN; -INSERT INTO `inf_job` VALUES (2, '用户 Session è¶…æ—¶ Job', 3, 'sysUserSessionTimeoutJob', 'aoteman', '0/5 * * * * ? *', 0, 0, 10, '', '2021-02-07 10:15:09', '', '2021-02-07 12:57:44', b'1'); -INSERT INTO `inf_job` VALUES (3, '用户 Session è¶…æ—¶ Job', 1, 'sysUserSessionTimeoutJob', NULL, '0 * * * * ? *', 3, 2000, 0, '', '2021-02-07 13:07:32', '', '2021-02-08 04:44:58', b'0'); -INSERT INTO `inf_job` VALUES (4, 'payNotifyJob', 1, '支付通知 Job', NULL, '* * * * * ?', 0, 0, 0, '1', '2021-10-27 08:33:35', '1', '2021-10-27 00:34:14', b'1'); -INSERT INTO `inf_job` VALUES (5, '支付通知 Job', 1, 'payNotifyJob', NULL, '* * * * * ?', 0, 0, 0, '1', '2021-10-27 08:34:42', '1', '2021-10-27 08:34:42', b'0'); +INSERT INTO `infra_job` VALUES (2, '用户 Session è¶…æ—¶ Job', 3, 'sysUserSessionTimeoutJob', 'aoteman', '0/5 * * * * ? *', 0, 0, 10, '', '2021-02-07 10:15:09', '', '2021-02-07 12:57:44', b'1'); +INSERT INTO `infra_job` VALUES (3, '用户 Session è¶…æ—¶ Job', 1, 'sysUserSessionTimeoutJob', NULL, '0 * * * * ? *', 3, 2000, 0, '', '2021-02-07 13:07:32', '1', '2022-02-02 01:00:11', b'0'); +INSERT INTO `infra_job` VALUES (4, 'payNotifyJob', 1, '支付通知 Job', NULL, '* * * * * ?', 0, 0, 0, '1', '2021-10-27 08:33:35', '1', '2021-10-27 00:34:14', b'1'); +INSERT INTO `infra_job` VALUES (5, '支付通知 Job', 1, 'payNotifyJob', NULL, '* * * * * ?', 0, 0, 0, '1', '2021-10-27 08:34:42', '1', '2021-10-27 08:34:42', b'0'); COMMIT; -- ---------------------------- --- Table structure for inf_job_log +-- Table structure for infra_job_log -- ---------------------------- -DROP TABLE IF EXISTS `inf_job_log`; -CREATE TABLE `inf_job_log` ( +DROP TABLE IF EXISTS `infra_job_log`; +CREATE TABLE `infra_job_log` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '日志编å·', `job_id` bigint NOT NULL COMMENT '任务编å·', `handler_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '处ç†å™¨çš„åå­—', @@ -892,16 +1315,16 @@ CREATE TABLE `inf_job_log` ( ) ENGINE=InnoDB AUTO_INCREMENT=25274 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='定时任务日志表'; -- ---------------------------- --- Records of inf_job_log +-- Records of infra_job_log -- ---------------------------- BEGIN; COMMIT; -- ---------------------------- --- Table structure for mbr_user +-- Table structure for member_user -- ---------------------------- -DROP TABLE IF EXISTS `mbr_user`; -CREATE TABLE `mbr_user` ( +DROP TABLE IF EXISTS `member_user`; +CREATE TABLE `member_user` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ç¼–å·', `nickname` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户昵称', `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '头åƒ', @@ -922,11 +1345,11 @@ CREATE TABLE `mbr_user` ( ) ENGINE=InnoDB AUTO_INCREMENT=247 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户'; -- ---------------------------- --- Records of mbr_user +-- Records of member_user -- ---------------------------- BEGIN; -INSERT INTO `mbr_user` VALUES (245, '芋艿', 'http://pic.616pic.com/ys_b_img/00/06/20/novPzrqvE3.jpg', 0, '15601691300', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', '127.0.0.1', '127.0.0.1', '2021-11-28 20:47:51', '', '2021-10-10 08:51:38', '245', '2021-11-28 20:47:51', b'0', 0); -INSERT INTO `mbr_user` VALUES (246, '', '', 0, '15601691301', '$2a$10$KLvmwoU.bvjU2u/MeWa1iOX2GDRJ2P9YqaCad10bYQCiyOaPexGwW', '127.0.0.1', '127.0.0.1', '2021-10-10 22:36:27', NULL, '2021-10-10 22:36:27', NULL, '2021-10-10 22:36:27', b'0', 0); +INSERT INTO `member_user` VALUES (245, '芋艿', 'http://pic.616pic.com/ys_b_img/00/06/20/novPzrqvE3.jpg', 0, '15601691300', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', '127.0.0.1', '127.0.0.1', '2022-01-29 13:58:04', '', '2021-10-10 08:51:38', NULL, '2022-01-29 13:58:04', b'0', 1); +INSERT INTO `member_user` VALUES (246, '', '', 0, '15601691301', '$2a$10$KLvmwoU.bvjU2u/MeWa1iOX2GDRJ2P9YqaCad10bYQCiyOaPexGwW', '127.0.0.1', '127.0.0.1', '2021-10-10 22:36:27', NULL, '2021-10-10 22:36:27', NULL, '2021-10-10 22:36:27', b'0', 0); COMMIT; -- ---------------------------- @@ -937,13 +1360,13 @@ CREATE TABLE `pay_app` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '应用编å·', `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '应用å', `status` tinyint NOT NULL COMMENT 'å¼€å¯çжæ€', - `remark` varchar(255) DEFAULT NULL COMMENT '备注', - `pay_notify_url` varchar(1024) NOT NULL COMMENT '支付结果的回调地å€', + `remark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `pay_notify_url` varchar(1024) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '支付结果的回调地å€', `refund_notify_url` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '退款结果的回调地å€', `merchant_id` bigint NOT NULL COMMENT '商户编å·', - `creator` varchar(64) DEFAULT '' COMMENT '创建者', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) DEFAULT '' COMMENT '更新者', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', PRIMARY KEY (`id`) USING BTREE @@ -964,18 +1387,18 @@ CREATE TABLE `pay_channel` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '商户编å·', `code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '渠é“ç¼–ç ', `status` tinyint NOT NULL COMMENT 'å¼€å¯çжæ€', - `remark` varchar(255) DEFAULT NULL COMMENT '备注', + `remark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', `fee_rate` double NOT NULL DEFAULT '0' COMMENT '渠é“费率,å•ä½ï¼šç™¾åˆ†æ¯”', `merchant_id` bigint NOT NULL COMMENT '商户编å·', `app_id` bigint NOT NULL COMMENT '应用编å·', `config` varchar(4096) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '支付渠é“é…ç½®', - `creator` varchar(64) DEFAULT '' COMMENT '创建者', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) DEFAULT '' COMMENT '更新者', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='支付渠é“\n'; +) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='支付渠é“\n'; -- ---------------------------- -- Records of pay_channel @@ -988,6 +1411,8 @@ INSERT INTO `pay_channel` VALUES (12, 'wx_pub', 0, NULL, 1, 1, 6, '{\"@class\":\ INSERT INTO `pay_channel` VALUES (13, 'wx_pub', 0, NULL, 1, 1, 6, '{\"@class\":\"cn.iocoder.yudao.framework.pay.core.client.impl.wx.WXPayClientConfig\",\"appId\":\"wx041349c6f39b268b\",\"mchId\":\"1545083881\",\"apiVersion\":\"v2\",\"mchKey\":\"0alL64UDQdlCwiKZ73ib7ypaIjMns06p\",\"privateKeyContent\":\"-----BEGIN PRIVATE KEY-----\\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC5q2hYE3loOQoH\\nl/2kh/epuj17W8VpV5vBl7ysJWAbBXux6mlq4gKTHD0QUQdiKtDEUm/bKC9Bi6VU\\nuklM5Y8oCaCbhjklHRbET8jsgd9phSNGviHclYRLsQRO8oXnN89kN0y7DYKm0hYd\\nmaiS12Z3v8VaImSTr4HVeHlC/z3S6mdwSr263stKt931YTcbTj/QFH7znsv9Na0u\\nX6LaMBEEAsJctWdm8Ndrd1tGh9Fzf0DA5VRXsJR3kkWspy+IwiDTPV/FDKOU9NJC\\nSxMmDePerTfkoZ2s1rltqBK0ykDJrXtxR+hTzEsKZ/KpNi8tyYpfNZsviHIlUsLP\\nFJ5UvUhpAgMBAAECggEAd90NltazqTIxpGdeCwrwOzWNnYbIclJprlhMKIJUgf1P\\nNrPTbHoOGXTAgzkcYCat8iAaMEzH/TOu/3zn92m3uqxEcEL9v1UBLqknWHAbkB6w\\ngGocqDAqYUcdNe5hvbyM+fCta5C0SQgV2PQrHOlMMICwYpkTfzhtxCdreXIYMoGg\\nJEIRkZWgrm/N7LTtNgizznuUjy6OURWjXaWKPcs3b3j6G1gLj9Vp++z4y0u51nqM\\n4R6fcvl8M6BjlcC8zo6DbOvCW8cXtuXsnru+2TPrUnsGeybJok4fEQsfW1BvpvPo\\nief38rYJn4OWxIrHcpWrhNtXtgRPeiMGFfIsEQDmVQKBgQDzXK6Nn3Nr3TFfGVTy\\n8QYrzOuY2NqzH8nnsLL6qn3HoKxTv+PcFKOTPsi6f4hIYCzBP0esRrPv0ffMu9oQ\\nJvFtCJvMmcKGtp0Q5hcj0y/XkbC3AWuahJtBv8lhKXVnQXSL0j3+ombljw4/8yN0\\nAzgBz+j/skQQgZ3sN5h+DHGtgwKBgQDDT784/2pd4m86c/uBmrwYfqu6MJo0eHJh\\n1XPtE+u8pOHyNTFk77rKobKDqN5VlrF0uEmBc/08LKhyxJ3vh/zAbcmqT1Mq778y\\nAKKUtVmvcaVDrvSQHsnhj0zt4SHGmmU34U2b9hV+nocq5VszX6/jp//HJi9bs3We\\ndAzfFCmaowKBgC1MmDVGc+6lCraf+X8LPFHU4Bnga70h8qxM6NPd/nG1R76DHn/t\\n25DiA+0rJgwK0unZxJadxoqic9TJNssA5Lmd+5o3GM2Imm311mLVwbcHqHQ4MHZf\\nrqKrd2m9lNv2hCIurVmDk1Gxsj5XHMdQfhFgSQengCHubp30r07vNA3PAoGAUEAE\\nIjdQTSMs8KeXP7mEb8wcY3R05/pVhT1fVJpK0kgtTofss7yM05V88/v+3sv8Pik6\\niqZN9tuimwWOn00Q3UA/DGtrkMjRlooMQ24AW8YmUZkhg9YivTtUMKnAZwopbLx2\\nVw7V5iDdCRMUVheK/c+ZmQpnixZBzcmBQGfYcGECgYBjEq3Mem+Aw6pXOu6+0FwH\\n9y6Xi4HhBkq0OOZZuXFtWVry7YrD3pBgzWVAZJqJCkyPKKZzCzwdbFd3u0lYBs35\\nzYgx7ug4hR+wfI980a3vxjcWGOqnOUUnUJ7ucIa+KDgnYV/bBy4jqpVreXmWAJXl\\nfyjG3eLWBrtrsI9YX6zeAA==\\n-----END PRIVATE KEY-----\\n\",\"privateCertContent\":\"-----BEGIN CERTIFICATE-----\\nMIID6TCCAtGgAwIBAgIUNkEHq6aQcF80NSYqWS58ybsJzI4wDQYJKoZIhvcNAQEL\\nBQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT\\nFFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg\\nQ0EwHhcNMjExMDIxMDU0NTQxWhcNMjYxMDIwMDU0NTQxWjB7MRMwEQYDVQQDDAox\\nNTQ1MDgzODgxMRswGQYDVQQKDBLlvq7kv6HllYbmiLfns7vnu58xJzAlBgNVBAsM\\nHuWOhuWfjuWMuuWkp+adjuWwp+aXpeeUqOWTgeW6lzELMAkGA1UEBgwCQ04xETAP\\nBgNVBAcMCFNoZW5aaGVuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\\nuatoWBN5aDkKB5f9pIf3qbo9e1vFaVebwZe8rCVgGwV7seppauICkxw9EFEHYirQ\\nxFJv2ygvQYulVLpJTOWPKAmgm4Y5JR0WxE/I7IHfaYUjRr4h3JWES7EETvKF5zfP\\nZDdMuw2CptIWHZmoktdmd7/FWiJkk6+B1Xh5Qv890upncEq9ut7LSrfd9WE3G04/\\n0BR+857L/TWtLl+i2jARBALCXLVnZvDXa3dbRofRc39AwOVUV7CUd5JFrKcviMIg\\n0z1fxQyjlPTSQksTJg3j3q035KGdrNa5bagStMpAya17cUfoU8xLCmfyqTYvLcmK\\nXzWbL4hyJVLCzxSeVL1IaQIDAQABo4GBMH8wCQYDVR0TBAIwADALBgNVHQ8EBAMC\\nBPAwZQYDVR0fBF4wXDBaoFigVoZUaHR0cDovL2V2Y2EuaXRydXMuY29tLmNuL3B1\\nYmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIwRTUwREJDMDRCMDZBRDM5NzU0OTg0NkMw\\nMUMzRThFQkQyMA0GCSqGSIb3DQEBCwUAA4IBAQBe7XgncAY/1PLbCsnMsYt11k3V\\n2cdNZ+yuCxhlOEKk3nHE6WCTL6zL0qWlTKKpnw1rE/+4OS76Tg72wWXcHfHDAOgt\\n9icp62cKx1WO3QweeZpSvLDmtdLgKKrqeIWh+rL8+ZhuAOxSkaRwcsMTWDaLeDOi\\n0pGeqvfG8WNhPxkkaSI8xbiTK641Yg9WT/Q4yfHS7Q6wg1dj9YQdo0dvVB0S2Nir\\nX9IK6PUaHDnQeFKDmKgLkDGLaKaiijEvC91wMEE6qB8b0eNhciaxq2YhGHcFmSRP\\nWUyc5CmBadt7wIOH5Z3bfuwWGxqxKjNw/baM/d+nk7hlDr01YL9c0g16B9MW\\n-----END CERTIFICATE-----\\n\",\"apiV3Key\":\"joerVi8y5DJ3o4ttA0o1uH47Xz1u2Ase\"}', NULL, '2021-12-14 22:09:39', NULL, '2021-12-14 22:09:39', b'0'); INSERT INTO `pay_channel` VALUES (14, 'wx_pub', 0, NULL, 1, 1, 6, '{\"@class\":\"cn.iocoder.yudao.framework.pay.core.client.impl.wx.WXPayClientConfig\",\"appId\":\"wx041349c6f39b268b\",\"mchId\":\"1545083881\",\"apiVersion\":\"v2\",\"mchKey\":\"0alL64UDQdlCwiKZ73ib7ypaIjMns06p\",\"privateKeyContent\":\"-----BEGIN PRIVATE KEY-----\\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC5q2hYE3loOQoH\\nl/2kh/epuj17W8VpV5vBl7ysJWAbBXux6mlq4gKTHD0QUQdiKtDEUm/bKC9Bi6VU\\nuklM5Y8oCaCbhjklHRbET8jsgd9phSNGviHclYRLsQRO8oXnN89kN0y7DYKm0hYd\\nmaiS12Z3v8VaImSTr4HVeHlC/z3S6mdwSr263stKt931YTcbTj/QFH7znsv9Na0u\\nX6LaMBEEAsJctWdm8Ndrd1tGh9Fzf0DA5VRXsJR3kkWspy+IwiDTPV/FDKOU9NJC\\nSxMmDePerTfkoZ2s1rltqBK0ykDJrXtxR+hTzEsKZ/KpNi8tyYpfNZsviHIlUsLP\\nFJ5UvUhpAgMBAAECggEAd90NltazqTIxpGdeCwrwOzWNnYbIclJprlhMKIJUgf1P\\nNrPTbHoOGXTAgzkcYCat8iAaMEzH/TOu/3zn92m3uqxEcEL9v1UBLqknWHAbkB6w\\ngGocqDAqYUcdNe5hvbyM+fCta5C0SQgV2PQrHOlMMICwYpkTfzhtxCdreXIYMoGg\\nJEIRkZWgrm/N7LTtNgizznuUjy6OURWjXaWKPcs3b3j6G1gLj9Vp++z4y0u51nqM\\n4R6fcvl8M6BjlcC8zo6DbOvCW8cXtuXsnru+2TPrUnsGeybJok4fEQsfW1BvpvPo\\nief38rYJn4OWxIrHcpWrhNtXtgRPeiMGFfIsEQDmVQKBgQDzXK6Nn3Nr3TFfGVTy\\n8QYrzOuY2NqzH8nnsLL6qn3HoKxTv+PcFKOTPsi6f4hIYCzBP0esRrPv0ffMu9oQ\\nJvFtCJvMmcKGtp0Q5hcj0y/XkbC3AWuahJtBv8lhKXVnQXSL0j3+ombljw4/8yN0\\nAzgBz+j/skQQgZ3sN5h+DHGtgwKBgQDDT784/2pd4m86c/uBmrwYfqu6MJo0eHJh\\n1XPtE+u8pOHyNTFk77rKobKDqN5VlrF0uEmBc/08LKhyxJ3vh/zAbcmqT1Mq778y\\nAKKUtVmvcaVDrvSQHsnhj0zt4SHGmmU34U2b9hV+nocq5VszX6/jp//HJi9bs3We\\ndAzfFCmaowKBgC1MmDVGc+6lCraf+X8LPFHU4Bnga70h8qxM6NPd/nG1R76DHn/t\\n25DiA+0rJgwK0unZxJadxoqic9TJNssA5Lmd+5o3GM2Imm311mLVwbcHqHQ4MHZf\\nrqKrd2m9lNv2hCIurVmDk1Gxsj5XHMdQfhFgSQengCHubp30r07vNA3PAoGAUEAE\\nIjdQTSMs8KeXP7mEb8wcY3R05/pVhT1fVJpK0kgtTofss7yM05V88/v+3sv8Pik6\\niqZN9tuimwWOn00Q3UA/DGtrkMjRlooMQ24AW8YmUZkhg9YivTtUMKnAZwopbLx2\\nVw7V5iDdCRMUVheK/c+ZmQpnixZBzcmBQGfYcGECgYBjEq3Mem+Aw6pXOu6+0FwH\\n9y6Xi4HhBkq0OOZZuXFtWVry7YrD3pBgzWVAZJqJCkyPKKZzCzwdbFd3u0lYBs35\\nzYgx7ug4hR+wfI980a3vxjcWGOqnOUUnUJ7ucIa+KDgnYV/bBy4jqpVreXmWAJXl\\nfyjG3eLWBrtrsI9YX6zeAA==\\n-----END PRIVATE KEY-----\\n\",\"privateCertContent\":\"-----BEGIN CERTIFICATE-----\\nMIID6TCCAtGgAwIBAgIUNkEHq6aQcF80NSYqWS58ybsJzI4wDQYJKoZIhvcNAQEL\\nBQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT\\nFFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg\\nQ0EwHhcNMjExMDIxMDU0NTQxWhcNMjYxMDIwMDU0NTQxWjB7MRMwEQYDVQQDDAox\\nNTQ1MDgzODgxMRswGQYDVQQKDBLlvq7kv6HllYbmiLfns7vnu58xJzAlBgNVBAsM\\nHuWOhuWfjuWMuuWkp+adjuWwp+aXpeeUqOWTgeW6lzELMAkGA1UEBgwCQ04xETAP\\nBgNVBAcMCFNoZW5aaGVuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\\nuatoWBN5aDkKB5f9pIf3qbo9e1vFaVebwZe8rCVgGwV7seppauICkxw9EFEHYirQ\\nxFJv2ygvQYulVLpJTOWPKAmgm4Y5JR0WxE/I7IHfaYUjRr4h3JWES7EETvKF5zfP\\nZDdMuw2CptIWHZmoktdmd7/FWiJkk6+B1Xh5Qv890upncEq9ut7LSrfd9WE3G04/\\n0BR+857L/TWtLl+i2jARBALCXLVnZvDXa3dbRofRc39AwOVUV7CUd5JFrKcviMIg\\n0z1fxQyjlPTSQksTJg3j3q035KGdrNa5bagStMpAya17cUfoU8xLCmfyqTYvLcmK\\nXzWbL4hyJVLCzxSeVL1IaQIDAQABo4GBMH8wCQYDVR0TBAIwADALBgNVHQ8EBAMC\\nBPAwZQYDVR0fBF4wXDBaoFigVoZUaHR0cDovL2V2Y2EuaXRydXMuY29tLmNuL3B1\\nYmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIwRTUwREJDMDRCMDZBRDM5NzU0OTg0NkMw\\nMUMzRThFQkQyMA0GCSqGSIb3DQEBCwUAA4IBAQBe7XgncAY/1PLbCsnMsYt11k3V\\n2cdNZ+yuCxhlOEKk3nHE6WCTL6zL0qWlTKKpnw1rE/+4OS76Tg72wWXcHfHDAOgt\\n9icp62cKx1WO3QweeZpSvLDmtdLgKKrqeIWh+rL8+ZhuAOxSkaRwcsMTWDaLeDOi\\n0pGeqvfG8WNhPxkkaSI8xbiTK641Yg9WT/Q4yfHS7Q6wg1dj9YQdo0dvVB0S2Nir\\nX9IK6PUaHDnQeFKDmKgLkDGLaKaiijEvC91wMEE6qB8b0eNhciaxq2YhGHcFmSRP\\nWUyc5CmBadt7wIOH5Z3bfuwWGxqxKjNw/baM/d+nk7hlDr01YL9c0g16B9MW\\n-----END CERTIFICATE-----\\n\",\"apiV3Key\":\"joerVi8y5DJ3o4ttA0o1uH47Xz1u2Ase\"}', NULL, '2021-12-14 22:38:49', NULL, '2021-12-14 22:38:49', b'0'); INSERT INTO `pay_channel` VALUES (15, 'wx_pub', 0, NULL, 1, 1, 6, '{\"@class\":\"cn.iocoder.yudao.framework.pay.core.client.impl.wx.WXPayClientConfig\",\"appId\":\"wx041349c6f39b268b\",\"mchId\":\"1545083881\",\"apiVersion\":\"v2\",\"mchKey\":\"0alL64UDQdlCwiKZ73ib7ypaIjMns06p\",\"privateKeyContent\":\"-----BEGIN PRIVATE KEY-----\\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC5q2hYE3loOQoH\\nl/2kh/epuj17W8VpV5vBl7ysJWAbBXux6mlq4gKTHD0QUQdiKtDEUm/bKC9Bi6VU\\nuklM5Y8oCaCbhjklHRbET8jsgd9phSNGviHclYRLsQRO8oXnN89kN0y7DYKm0hYd\\nmaiS12Z3v8VaImSTr4HVeHlC/z3S6mdwSr263stKt931YTcbTj/QFH7znsv9Na0u\\nX6LaMBEEAsJctWdm8Ndrd1tGh9Fzf0DA5VRXsJR3kkWspy+IwiDTPV/FDKOU9NJC\\nSxMmDePerTfkoZ2s1rltqBK0ykDJrXtxR+hTzEsKZ/KpNi8tyYpfNZsviHIlUsLP\\nFJ5UvUhpAgMBAAECggEAd90NltazqTIxpGdeCwrwOzWNnYbIclJprlhMKIJUgf1P\\nNrPTbHoOGXTAgzkcYCat8iAaMEzH/TOu/3zn92m3uqxEcEL9v1UBLqknWHAbkB6w\\ngGocqDAqYUcdNe5hvbyM+fCta5C0SQgV2PQrHOlMMICwYpkTfzhtxCdreXIYMoGg\\nJEIRkZWgrm/N7LTtNgizznuUjy6OURWjXaWKPcs3b3j6G1gLj9Vp++z4y0u51nqM\\n4R6fcvl8M6BjlcC8zo6DbOvCW8cXtuXsnru+2TPrUnsGeybJok4fEQsfW1BvpvPo\\nief38rYJn4OWxIrHcpWrhNtXtgRPeiMGFfIsEQDmVQKBgQDzXK6Nn3Nr3TFfGVTy\\n8QYrzOuY2NqzH8nnsLL6qn3HoKxTv+PcFKOTPsi6f4hIYCzBP0esRrPv0ffMu9oQ\\nJvFtCJvMmcKGtp0Q5hcj0y/XkbC3AWuahJtBv8lhKXVnQXSL0j3+ombljw4/8yN0\\nAzgBz+j/skQQgZ3sN5h+DHGtgwKBgQDDT784/2pd4m86c/uBmrwYfqu6MJo0eHJh\\n1XPtE+u8pOHyNTFk77rKobKDqN5VlrF0uEmBc/08LKhyxJ3vh/zAbcmqT1Mq778y\\nAKKUtVmvcaVDrvSQHsnhj0zt4SHGmmU34U2b9hV+nocq5VszX6/jp//HJi9bs3We\\ndAzfFCmaowKBgC1MmDVGc+6lCraf+X8LPFHU4Bnga70h8qxM6NPd/nG1R76DHn/t\\n25DiA+0rJgwK0unZxJadxoqic9TJNssA5Lmd+5o3GM2Imm311mLVwbcHqHQ4MHZf\\nrqKrd2m9lNv2hCIurVmDk1Gxsj5XHMdQfhFgSQengCHubp30r07vNA3PAoGAUEAE\\nIjdQTSMs8KeXP7mEb8wcY3R05/pVhT1fVJpK0kgtTofss7yM05V88/v+3sv8Pik6\\niqZN9tuimwWOn00Q3UA/DGtrkMjRlooMQ24AW8YmUZkhg9YivTtUMKnAZwopbLx2\\nVw7V5iDdCRMUVheK/c+ZmQpnixZBzcmBQGfYcGECgYBjEq3Mem+Aw6pXOu6+0FwH\\n9y6Xi4HhBkq0OOZZuXFtWVry7YrD3pBgzWVAZJqJCkyPKKZzCzwdbFd3u0lYBs35\\nzYgx7ug4hR+wfI980a3vxjcWGOqnOUUnUJ7ucIa+KDgnYV/bBy4jqpVreXmWAJXl\\nfyjG3eLWBrtrsI9YX6zeAA==\\n-----END PRIVATE KEY-----\\n\",\"privateCertContent\":\"-----BEGIN CERTIFICATE-----\\nMIID6TCCAtGgAwIBAgIUNkEHq6aQcF80NSYqWS58ybsJzI4wDQYJKoZIhvcNAQEL\\nBQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT\\nFFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg\\nQ0EwHhcNMjExMDIxMDU0NTQxWhcNMjYxMDIwMDU0NTQxWjB7MRMwEQYDVQQDDAox\\nNTQ1MDgzODgxMRswGQYDVQQKDBLlvq7kv6HllYbmiLfns7vnu58xJzAlBgNVBAsM\\nHuWOhuWfjuWMuuWkp+adjuWwp+aXpeeUqOWTgeW6lzELMAkGA1UEBgwCQ04xETAP\\nBgNVBAcMCFNoZW5aaGVuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\\nuatoWBN5aDkKB5f9pIf3qbo9e1vFaVebwZe8rCVgGwV7seppauICkxw9EFEHYirQ\\nxFJv2ygvQYulVLpJTOWPKAmgm4Y5JR0WxE/I7IHfaYUjRr4h3JWES7EETvKF5zfP\\nZDdMuw2CptIWHZmoktdmd7/FWiJkk6+B1Xh5Qv890upncEq9ut7LSrfd9WE3G04/\\n0BR+857L/TWtLl+i2jARBALCXLVnZvDXa3dbRofRc39AwOVUV7CUd5JFrKcviMIg\\n0z1fxQyjlPTSQksTJg3j3q035KGdrNa5bagStMpAya17cUfoU8xLCmfyqTYvLcmK\\nXzWbL4hyJVLCzxSeVL1IaQIDAQABo4GBMH8wCQYDVR0TBAIwADALBgNVHQ8EBAMC\\nBPAwZQYDVR0fBF4wXDBaoFigVoZUaHR0cDovL2V2Y2EuaXRydXMuY29tLmNuL3B1\\nYmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIwRTUwREJDMDRCMDZBRDM5NzU0OTg0NkMw\\nMUMzRThFQkQyMA0GCSqGSIb3DQEBCwUAA4IBAQBe7XgncAY/1PLbCsnMsYt11k3V\\n2cdNZ+yuCxhlOEKk3nHE6WCTL6zL0qWlTKKpnw1rE/+4OS76Tg72wWXcHfHDAOgt\\n9icp62cKx1WO3QweeZpSvLDmtdLgKKrqeIWh+rL8+ZhuAOxSkaRwcsMTWDaLeDOi\\n0pGeqvfG8WNhPxkkaSI8xbiTK641Yg9WT/Q4yfHS7Q6wg1dj9YQdo0dvVB0S2Nir\\nX9IK6PUaHDnQeFKDmKgLkDGLaKaiijEvC91wMEE6qB8b0eNhciaxq2YhGHcFmSRP\\nWUyc5CmBadt7wIOH5Z3bfuwWGxqxKjNw/baM/d+nk7hlDr01YL9c0g16B9MW\\n-----END CERTIFICATE-----\\n\",\"apiV3Key\":\"joerVi8y5DJ3o4ttA0o1uH47Xz1u2Ase\"}', NULL, '2021-12-15 09:32:26', NULL, '2021-12-15 09:32:26', b'0'); +INSERT INTO `pay_channel` VALUES (16, 'wx_pub', 0, NULL, 1, 1, 6, '{\"@class\":\"cn.iocoder.yudao.framework.pay.core.client.impl.wx.WXPayClientConfig\",\"appId\":\"wx041349c6f39b268b\",\"mchId\":\"1545083881\",\"apiVersion\":\"v2\",\"mchKey\":\"0alL64UDQdlCwiKZ73ib7ypaIjMns06p\",\"privateKeyContent\":\"-----BEGIN PRIVATE KEY-----\\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC5q2hYE3loOQoH\\nl/2kh/epuj17W8VpV5vBl7ysJWAbBXux6mlq4gKTHD0QUQdiKtDEUm/bKC9Bi6VU\\nuklM5Y8oCaCbhjklHRbET8jsgd9phSNGviHclYRLsQRO8oXnN89kN0y7DYKm0hYd\\nmaiS12Z3v8VaImSTr4HVeHlC/z3S6mdwSr263stKt931YTcbTj/QFH7znsv9Na0u\\nX6LaMBEEAsJctWdm8Ndrd1tGh9Fzf0DA5VRXsJR3kkWspy+IwiDTPV/FDKOU9NJC\\nSxMmDePerTfkoZ2s1rltqBK0ykDJrXtxR+hTzEsKZ/KpNi8tyYpfNZsviHIlUsLP\\nFJ5UvUhpAgMBAAECggEAd90NltazqTIxpGdeCwrwOzWNnYbIclJprlhMKIJUgf1P\\nNrPTbHoOGXTAgzkcYCat8iAaMEzH/TOu/3zn92m3uqxEcEL9v1UBLqknWHAbkB6w\\ngGocqDAqYUcdNe5hvbyM+fCta5C0SQgV2PQrHOlMMICwYpkTfzhtxCdreXIYMoGg\\nJEIRkZWgrm/N7LTtNgizznuUjy6OURWjXaWKPcs3b3j6G1gLj9Vp++z4y0u51nqM\\n4R6fcvl8M6BjlcC8zo6DbOvCW8cXtuXsnru+2TPrUnsGeybJok4fEQsfW1BvpvPo\\nief38rYJn4OWxIrHcpWrhNtXtgRPeiMGFfIsEQDmVQKBgQDzXK6Nn3Nr3TFfGVTy\\n8QYrzOuY2NqzH8nnsLL6qn3HoKxTv+PcFKOTPsi6f4hIYCzBP0esRrPv0ffMu9oQ\\nJvFtCJvMmcKGtp0Q5hcj0y/XkbC3AWuahJtBv8lhKXVnQXSL0j3+ombljw4/8yN0\\nAzgBz+j/skQQgZ3sN5h+DHGtgwKBgQDDT784/2pd4m86c/uBmrwYfqu6MJo0eHJh\\n1XPtE+u8pOHyNTFk77rKobKDqN5VlrF0uEmBc/08LKhyxJ3vh/zAbcmqT1Mq778y\\nAKKUtVmvcaVDrvSQHsnhj0zt4SHGmmU34U2b9hV+nocq5VszX6/jp//HJi9bs3We\\ndAzfFCmaowKBgC1MmDVGc+6lCraf+X8LPFHU4Bnga70h8qxM6NPd/nG1R76DHn/t\\n25DiA+0rJgwK0unZxJadxoqic9TJNssA5Lmd+5o3GM2Imm311mLVwbcHqHQ4MHZf\\nrqKrd2m9lNv2hCIurVmDk1Gxsj5XHMdQfhFgSQengCHubp30r07vNA3PAoGAUEAE\\nIjdQTSMs8KeXP7mEb8wcY3R05/pVhT1fVJpK0kgtTofss7yM05V88/v+3sv8Pik6\\niqZN9tuimwWOn00Q3UA/DGtrkMjRlooMQ24AW8YmUZkhg9YivTtUMKnAZwopbLx2\\nVw7V5iDdCRMUVheK/c+ZmQpnixZBzcmBQGfYcGECgYBjEq3Mem+Aw6pXOu6+0FwH\\n9y6Xi4HhBkq0OOZZuXFtWVry7YrD3pBgzWVAZJqJCkyPKKZzCzwdbFd3u0lYBs35\\nzYgx7ug4hR+wfI980a3vxjcWGOqnOUUnUJ7ucIa+KDgnYV/bBy4jqpVreXmWAJXl\\nfyjG3eLWBrtrsI9YX6zeAA==\\n-----END PRIVATE KEY-----\\n\",\"privateCertContent\":\"-----BEGIN CERTIFICATE-----\\nMIID6TCCAtGgAwIBAgIUNkEHq6aQcF80NSYqWS58ybsJzI4wDQYJKoZIhvcNAQEL\\nBQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT\\nFFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg\\nQ0EwHhcNMjExMDIxMDU0NTQxWhcNMjYxMDIwMDU0NTQxWjB7MRMwEQYDVQQDDAox\\nNTQ1MDgzODgxMRswGQYDVQQKDBLlvq7kv6HllYbmiLfns7vnu58xJzAlBgNVBAsM\\nHuWOhuWfjuWMuuWkp+adjuWwp+aXpeeUqOWTgeW6lzELMAkGA1UEBgwCQ04xETAP\\nBgNVBAcMCFNoZW5aaGVuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\\nuatoWBN5aDkKB5f9pIf3qbo9e1vFaVebwZe8rCVgGwV7seppauICkxw9EFEHYirQ\\nxFJv2ygvQYulVLpJTOWPKAmgm4Y5JR0WxE/I7IHfaYUjRr4h3JWES7EETvKF5zfP\\nZDdMuw2CptIWHZmoktdmd7/FWiJkk6+B1Xh5Qv890upncEq9ut7LSrfd9WE3G04/\\n0BR+857L/TWtLl+i2jARBALCXLVnZvDXa3dbRofRc39AwOVUV7CUd5JFrKcviMIg\\n0z1fxQyjlPTSQksTJg3j3q035KGdrNa5bagStMpAya17cUfoU8xLCmfyqTYvLcmK\\nXzWbL4hyJVLCzxSeVL1IaQIDAQABo4GBMH8wCQYDVR0TBAIwADALBgNVHQ8EBAMC\\nBPAwZQYDVR0fBF4wXDBaoFigVoZUaHR0cDovL2V2Y2EuaXRydXMuY29tLmNuL3B1\\nYmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIwRTUwREJDMDRCMDZBRDM5NzU0OTg0NkMw\\nMUMzRThFQkQyMA0GCSqGSIb3DQEBCwUAA4IBAQBe7XgncAY/1PLbCsnMsYt11k3V\\n2cdNZ+yuCxhlOEKk3nHE6WCTL6zL0qWlTKKpnw1rE/+4OS76Tg72wWXcHfHDAOgt\\n9icp62cKx1WO3QweeZpSvLDmtdLgKKrqeIWh+rL8+ZhuAOxSkaRwcsMTWDaLeDOi\\n0pGeqvfG8WNhPxkkaSI8xbiTK641Yg9WT/Q4yfHS7Q6wg1dj9YQdo0dvVB0S2Nir\\nX9IK6PUaHDnQeFKDmKgLkDGLaKaiijEvC91wMEE6qB8b0eNhciaxq2YhGHcFmSRP\\nWUyc5CmBadt7wIOH5Z3bfuwWGxqxKjNw/baM/d+nk7hlDr01YL9c0g16B9MW\\n-----END CERTIFICATE-----\\n\",\"apiV3Key\":\"joerVi8y5DJ3o4ttA0o1uH47Xz1u2Ase\"}', NULL, '2022-01-31 22:13:25', NULL, '2022-01-31 22:13:25', b'0'); +INSERT INTO `pay_channel` VALUES (17, 'alipay_qr', 0, NULL, 1, 1, 6, '{\"@class\":\"cn.iocoder.yudao.framework.pay.core.client.impl.alipay.AlipayPayClientConfig\",\"serverUrl\":\"https://openapi.alipaydev.com/gateway.do\",\"appId\":\"2021000118634035\",\"signType\":\"RSA2\",\"mode\":null,\"privateKey\":\"MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCHsEV1cDupwJv890x84qbppUtRIfhaKSwSVN0thCcsDCaAsGR5MZslDkO8NCT9V4r2SVXjyY7eJUZlZd1M0C8T01Tg4UOx5LUbic0O3A1uJMy6V1n9IyYwbAW3AEZhBd5bSbPgrqvmv3NeWSTQT6Anxnllf+2iDH6zyA2fPl7cYyQtbZoDJQFGqr4F+cGh2R6akzRKNoBkAeMYwoY6es2lX8sJxCVPWUmxNUoL3tScwlSpd7Bxw0q9c/X01jMwuQ0+Va358zgFiGERTE6yD01eu40OBDXOYO3z++y+TAYHlQQ2toMO63trepo88X3xV3R44/1DH+k2pAm2IF5ixiLrAgMBAAECggEAPx3SoXcseaD7rmcGcE0p4SMfbsUDdkUSmBBbtfF0GzwnqNLkWa+mgE0rWt9SmXngTQH97vByAYmLPl1s3G82ht1V7Sk7yQMe74lhFllr8eEyTjeVx3dTK1EEM4TwN+936DTXdFsr4TELJEcJJdD0KaxcCcfBLRDs2wnitEFZ9N+GoZybVmY8w0e0MI7PLObUZ2l0X4RurQnfG9ZxjXjC7PkeMVv7cGGylpNFi3BbvkRhdhLPDC2E6wqnr9e7zk+hiENivAezXrtxtwKovzCtnWJ1r0IO14Rh47H509Ic0wFnj+o5YyUL4LdmpL7yaaH6fM7zcSLFjNZPHvZCKPwYcQKBgQDQFho98QvnL8ex4v6cry4VitGpjSXm1qP3vmMQk4rTsn8iPWtcxPjqGEqOQJjdi4Mi0VZKQOLFwlH0kl95wNrD/isJ4O1yeYfX7YAXApzHqYNINzM79HemO3Yx1qLMW3okRFJ9pPRzbQ9qkTpsaegsmyX316zOBhzGRYjKbutTYwKBgQCm7phr9XdFW5Vh+XR90mVs483nrLmMiDKg7YKxSLJ8amiDjzPejCn7i95Hah08P+2MIZLIPbh2VLacczR6ltRRzN5bg5etFuqSgfkuHyxpoDmpjbe08+Q2h8JBYqcC5Nhv1AKU4iOUhVLHo/FBAQliMcGc/J3eiYTFC7EsNx382QKBgClb20doe7cttgFTXswBvaUmfFm45kmla924B7SpvrQpDD/f+VDtDZRp05fGmxuduSjYdtA3aVtpLiTwWu22OUUvZZqHDGruYOO4Hvdz23mL5b4ayqImCwoNU4bAZIc9v18p/UNf3/55NNE3oGcf/bev9rH2OjCQ4nM+Ktwhg8CFAoGACSgvbkShzUkv0ZcIf9ppu+ZnJh1AdGgINvGwaJ8vQ0nm/8h8NOoFZ4oNoGc+wU5Ubops7dUM6FjPR5e+OjdJ4E7Xp7d5O4J1TaIZlCEbo5OpdhaTDDcQvrkFu+Z4eN0qzj+YAKjDAOOrXc4tbr5q0FsgXscwtcNfaBuzFVTUrUkCgYEAwzPnMNhWG3zOWLUs2QFA2GP4Y+J8cpUYfj6pbKKzeLwyG9qBwF1NJpN8m+q9q7V9P2LY+9Lp9e1mGsGeqt5HMEA3P6vIpcqLJLqE/4PBLLRzfccTcmqb1m71+erxTRhHBRkGS+I7dZEb3olQfnS1Y1tpMBxiwYwR3LW4oXuJwj8=\",\"alipayPublicKey\":\"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnq90KnF4dTnlzzmxpujbI05OYqi5WxAS6cL0gnZFv2gK51HExF8v/BaP7P979PhFMgWTqmOOI+Dtno5s+yD09XTY1WkshbLk6i4g2Xlr8fyW9ODnkU88RI2w9UdPhQU4cPPwBNlrsYhKkVK2OxwM3kFqjoBBY0CZoZCsSQ3LDH5WeZqPArlsS6xa2zqJBuuoKjMrdpELl3eXSjP8K54eDJCbeetCZNKWLL3DPahTPB7LZikfYmslb0QUvCgGapD0xkS7eVq70NaL1G57MWABs4tbfWgxike4Daj3EfUrzIVspQxj7w8HEj9WozJPgL88kSJSits0pqD3n5r8HSuseQIDAQAB\",\"appCertContent\":null,\"alipayPublicCertContent\":null,\"rootCertContent\":null}', NULL, '2022-01-31 22:13:25', NULL, '2022-01-31 22:13:25', b'0'); COMMIT; -- ---------------------------- @@ -1000,10 +1425,10 @@ CREATE TABLE `pay_merchant` ( `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商户全称', `short_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商户简称', `status` tinyint NOT NULL COMMENT 'å¼€å¯çжæ€', - `remark` varchar(255) DEFAULT NULL COMMENT '备注', - `creator` varchar(64) DEFAULT '' COMMENT '创建者', + `remark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) DEFAULT '' COMMENT '更新者', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', PRIMARY KEY (`id`) USING BTREE @@ -1024,11 +1449,11 @@ CREATE TABLE `pay_notify_log` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '日志编å·', `task_id` bigint NOT NULL COMMENT '通知任务编å·', `notify_times` tinyint NOT NULL COMMENT '第几次被通知', - `response` varchar(2048) NOT NULL COMMENT 'è¯·æ±‚å‚æ•°', + `response` varchar(2048) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'è¯·æ±‚å‚æ•°', `status` tinyint NOT NULL COMMENT '通知状æ€', - `creator` varchar(64) DEFAULT '' COMMENT '创建者', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) DEFAULT '' COMMENT '更新者', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', PRIMARY KEY (`id`) USING BTREE @@ -1057,9 +1482,9 @@ CREATE TABLE `pay_notify_task` ( `notify_times` tinyint NOT NULL COMMENT '当å‰é€šçŸ¥æ¬¡æ•°', `max_notify_times` tinyint NOT NULL COMMENT '最大å¯é€šçŸ¥æ¬¡æ•°', `notify_url` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异步通知地å€', - `creator` varchar(64) DEFAULT '' COMMENT '创建者', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) DEFAULT '' COMMENT '更新者', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', PRIMARY KEY (`id`) USING BTREE @@ -1097,7 +1522,7 @@ CREATE TABLE `pay_order` ( `app_id` bigint NOT NULL COMMENT '应用编å·', `channel_id` bigint DEFAULT NULL COMMENT '渠é“ç¼–å·', `channel_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '渠é“ç¼–ç ', - `merchant_order_id` varchar(64) NOT NULL COMMENT '商户订å•ç¼–å·', + `merchant_order_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商户订å•ç¼–å·', `subject` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商哿 ‡é¢˜', `body` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'å•†å“æè¿°', `notify_url` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异步通知地å€', @@ -1115,10 +1540,10 @@ CREATE TABLE `pay_order` ( `refund_times` tinyint NOT NULL COMMENT '退款次数', `refund_amount` bigint NOT NULL COMMENT '退款总金é¢ï¼Œå•ä½ï¼šåˆ†', `channel_user_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '渠é“用户编å·', - `channel_order_no` varchar(64) DEFAULT NULL COMMENT '渠é“订å•å·', - `creator` varchar(64) DEFAULT '' COMMENT '创建者', + `channel_order_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '渠é“订å•å·', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) DEFAULT '' COMMENT '更新者', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', PRIMARY KEY (`id`) USING BTREE @@ -1248,7 +1673,7 @@ COMMIT; DROP TABLE IF EXISTS `pay_order_extension`; CREATE TABLE `pay_order_extension` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '支付订å•ç¼–å·', - `no` varchar(64) NOT NULL COMMENT '支付订å•å·', + `no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '支付订å•å·', `order_id` bigint NOT NULL COMMENT '支付订å•ç¼–å·', `channel_id` bigint NOT NULL COMMENT '渠é“ç¼–å·', `channel_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '渠é“ç¼–ç ', @@ -1256,9 +1681,9 @@ CREATE TABLE `pay_order_extension` ( `status` tinyint NOT NULL COMMENT '支付状æ€', `channel_extras` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '支付渠é“çš„é¢å¤–傿•°', `channel_notify_data` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '支付渠é“异步通知的内容', - `creator` varchar(64) DEFAULT '' COMMENT '创建者', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) DEFAULT '' COMMENT '更新者', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', PRIMARY KEY (`id`) USING BTREE @@ -1373,28 +1798,28 @@ CREATE TABLE `pay_refund` ( `channel_id` bigint NOT NULL COMMENT '渠é“ç¼–å·', `channel_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '渠é“ç¼–ç ', `order_id` bigint NOT NULL COMMENT '支付订å•ç¼–å· pay_order 表id', - `trade_no` varchar(64) NOT NULL COMMENT '交易订å•å· pay_extension 表no 字段', - `merchant_order_id` varchar(64) NOT NULL COMMENT '商户订å•ç¼–å·ï¼ˆå•†æˆ·ç³»ç»Ÿç”Ÿæˆï¼‰', - `merchant_refund_no` varchar(64) NOT NULL COMMENT '商户退款订å•å·ï¼ˆå•†æˆ·ç³»ç»Ÿç”Ÿæˆï¼‰', + `trade_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '交易订å•å· pay_extension 表no 字段', + `merchant_order_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商户订å•ç¼–å·ï¼ˆå•†æˆ·ç³»ç»Ÿç”Ÿæˆï¼‰', + `merchant_refund_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商户退款订å•å·ï¼ˆå•†æˆ·ç³»ç»Ÿç”Ÿæˆï¼‰', `notify_url` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异步通知商户地å€', `notify_status` tinyint NOT NULL COMMENT '通知商户退款结果的回调状æ€', `status` tinyint NOT NULL COMMENT '退款状æ€', `type` tinyint NOT NULL COMMENT '退款类型(部分退款,全部退款)', `pay_amount` bigint NOT NULL COMMENT '支付金é¢,å•ä½åˆ†', `refund_amount` bigint NOT NULL COMMENT '退款金é¢,å•ä½åˆ†', - `reason` varchar(256) NOT NULL COMMENT '退款原因', + `reason` varchar(256) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '退款原因', `user_ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '用户 IP', - `channel_order_no` varchar(64) NOT NULL COMMENT '渠é“订å•å·ï¼Œpay_order 中的channel_order_no 对应', - `channel_refund_no` varchar(64) DEFAULT NULL COMMENT '渠é“退款å•å·ï¼Œæ¸ é“返回', - `channel_error_code` varchar(128) DEFAULT NULL COMMENT '渠é“调用报错时,错误ç ', - `channel_error_msg` varchar(256) DEFAULT NULL COMMENT '渠é“调用报错时,错误信æ¯', + `channel_order_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '渠é“订å•å·ï¼Œpay_order 中的channel_order_no 对应', + `channel_refund_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '渠é“退款å•å·ï¼Œæ¸ é“返回', + `channel_error_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '渠é“调用报错时,错误ç ', + `channel_error_msg` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '渠é“调用报错时,错误信æ¯', `channel_extras` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '支付渠é“çš„é¢å¤–傿•°', `expire_time` datetime DEFAULT NULL COMMENT '退款失效时间', `success_time` datetime DEFAULT NULL COMMENT '退款æˆåŠŸæ—¶é—´', `notify_time` datetime DEFAULT NULL COMMENT '退款通知时间', - `creator` varchar(64) DEFAULT '' COMMENT '创建者', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) DEFAULT '' COMMENT '更新者', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', PRIMARY KEY (`id`) USING BTREE @@ -1407,10 +1832,10 @@ BEGIN; COMMIT; -- ---------------------------- --- Table structure for sys_dept +-- Table structure for system_dept -- ---------------------------- -DROP TABLE IF EXISTS `sys_dept`; -CREATE TABLE `sys_dept` ( +DROP TABLE IF EXISTS `system_dept`; +CREATE TABLE `system_dept` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '部门id', `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '部门åç§°', `parent_id` bigint NOT NULL DEFAULT '0' COMMENT '父部门id', @@ -1429,26 +1854,26 @@ CREATE TABLE `sys_dept` ( ) ENGINE=InnoDB AUTO_INCREMENT=110 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='部门表'; -- ---------------------------- --- Records of sys_dept +-- Records of system_dept -- ---------------------------- BEGIN; -INSERT INTO `sys_dept` VALUES (100, 'èŠ‹é“æºç ', 0, 0, 1, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '103', '2022-01-14 01:04:05', b'0', 1); -INSERT INTO `sys_dept` VALUES (101, '深圳总公å¸', 100, 1, 104, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '103', '2022-01-15 21:32:28', b'0', 1); -INSERT INTO `sys_dept` VALUES (102, '长沙分公å¸', 100, 2, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '', '2021-12-15 05:01:40', b'0', 1); -INSERT INTO `sys_dept` VALUES (103, 'ç ”å‘部门', 101, 1, 104, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '103', '2022-01-14 01:04:14', b'0', 1); -INSERT INTO `sys_dept` VALUES (104, '市场部门', 101, 2, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '', '2021-12-15 05:01:38', b'0', 1); -INSERT INTO `sys_dept` VALUES (105, '测试部门', 101, 3, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '', '2021-12-15 05:01:37', b'0', 1); -INSERT INTO `sys_dept` VALUES (106, '财务部门', 101, 4, 103, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '103', '2022-01-15 21:32:22', b'0', 1); -INSERT INTO `sys_dept` VALUES (107, 'è¿ç»´éƒ¨é—¨', 101, 5, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '', '2021-12-15 05:01:33', b'0', 1); -INSERT INTO `sys_dept` VALUES (108, '市场部门', 102, 1, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '', '2021-12-15 05:01:31', b'0', 1); -INSERT INTO `sys_dept` VALUES (109, '财务部门', 102, 2, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '', '2021-12-15 05:01:29', b'0', 1); +INSERT INTO `system_dept` VALUES (100, 'èŠ‹é“æºç ', 0, 0, 1, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '103', '2022-01-14 01:04:05', b'0', 1); +INSERT INTO `system_dept` VALUES (101, '深圳总公å¸', 100, 1, 104, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '103', '2022-01-15 21:32:28', b'0', 1); +INSERT INTO `system_dept` VALUES (102, '长沙分公å¸', 100, 2, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '', '2021-12-15 05:01:40', b'0', 1); +INSERT INTO `system_dept` VALUES (103, 'ç ”å‘部门', 101, 1, 104, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '103', '2022-01-14 01:04:14', b'0', 1); +INSERT INTO `system_dept` VALUES (104, '市场部门', 101, 2, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '', '2021-12-15 05:01:38', b'0', 1); +INSERT INTO `system_dept` VALUES (105, '测试部门', 101, 3, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '', '2021-12-15 05:01:37', b'0', 1); +INSERT INTO `system_dept` VALUES (106, '财务部门', 101, 4, 103, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '103', '2022-01-15 21:32:22', b'0', 1); +INSERT INTO `system_dept` VALUES (107, 'è¿ç»´éƒ¨é—¨', 101, 5, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '', '2021-12-15 05:01:33', b'0', 1); +INSERT INTO `system_dept` VALUES (108, '市场部门', 102, 1, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '', '2021-12-15 05:01:31', b'0', 1); +INSERT INTO `system_dept` VALUES (109, '财务部门', 102, 2, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '', '2021-12-15 05:01:29', b'0', 1); COMMIT; -- ---------------------------- --- Table structure for sys_dict_data +-- Table structure for system_dict_data -- ---------------------------- -DROP TABLE IF EXISTS `sys_dict_data`; -CREATE TABLE `sys_dict_data` ( +DROP TABLE IF EXISTS `system_dict_data`; +CREATE TABLE `system_dict_data` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '字典编ç ', `sort` int NOT NULL DEFAULT '0' COMMENT '字典排åº', `label` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '字典标签', @@ -1465,148 +1890,141 @@ CREATE TABLE `sys_dict_data` ( ) ENGINE=InnoDB AUTO_INCREMENT=1145 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='字典数æ®è¡¨'; -- ---------------------------- --- Records of sys_dict_data +-- Records of system_dict_data -- ---------------------------- BEGIN; -INSERT INTO `sys_dict_data` VALUES (1, 1, 'ç”·', '1', 'sys_user_sex', 0, '性别男', 'admin', '2021-01-05 17:03:48', '', '2021-01-06 05:48:53', b'0'); -INSERT INTO `sys_dict_data` VALUES (2, 2, '女', '2', 'sys_user_sex', 0, '性别女', 'admin', '2021-01-05 17:03:48', '', '2021-01-06 05:48:55', b'0'); -INSERT INTO `sys_dict_data` VALUES (8, 1, '正常', '0', 'sys_job_status', 0, '正常状æ€', 'admin', '2021-01-05 17:03:48', '', '2021-02-07 07:43:57', b'1'); -INSERT INTO `sys_dict_data` VALUES (9, 2, 'æš‚åœ', '1', 'sys_job_status', 0, 'åœç”¨çжæ€', 'admin', '2021-01-05 17:03:48', '', '2021-02-07 07:43:59', b'1'); -INSERT INTO `sys_dict_data` VALUES (10, 1, '默认', 'DEFAULT', 'sys_job_group', 0, '默认分组', 'admin', '2021-01-05 17:03:48', '', '2021-02-07 07:43:44', b'1'); -INSERT INTO `sys_dict_data` VALUES (11, 2, '系统', 'SYSTEM', 'sys_job_group', 0, '系统分组', 'admin', '2021-01-05 17:03:48', '', '2021-02-07 07:43:45', b'1'); -INSERT INTO `sys_dict_data` VALUES (12, 1, '系统内置', '1', 'sys_config_type', 0, '傿•°ç±»åž‹ - 系统内置', 'admin', '2021-01-05 17:03:48', '', '2021-01-18 07:41:59', b'0'); -INSERT INTO `sys_dict_data` VALUES (13, 2, '自定义', '2', 'sys_config_type', 0, '傿•°ç±»åž‹ - 自定义', 'admin', '2021-01-05 17:03:48', '', '2021-01-18 07:41:51', b'0'); -INSERT INTO `sys_dict_data` VALUES (14, 1, '通知', '1', 'sys_notice_type', 0, '通知', 'admin', '2021-01-05 17:03:48', '', '2021-01-06 00:02:28', b'0'); -INSERT INTO `sys_dict_data` VALUES (15, 2, '公告', '2', 'sys_notice_type', 0, '公告', 'admin', '2021-01-05 17:03:48', '', '2021-01-06 00:02:28', b'0'); -INSERT INTO `sys_dict_data` VALUES (16, 0, '其它', '0', 'sys_operate_type', 0, '其它æ“作', 'admin', '2021-01-05 17:03:48', '', '2021-01-16 13:51:12', b'0'); -INSERT INTO `sys_dict_data` VALUES (17, 1, '查询', '1', 'sys_operate_type', 0, '查询æ“作', 'admin', '2021-01-05 17:03:48', '', '2021-01-16 13:51:10', b'0'); -INSERT INTO `sys_dict_data` VALUES (18, 2, '新增', '2', 'sys_operate_type', 0, '新增æ“作', 'admin', '2021-01-05 17:03:48', '', '2021-01-16 13:51:17', b'0'); -INSERT INTO `sys_dict_data` VALUES (19, 3, '修改', '3', 'sys_operate_type', 0, '修改æ“作', 'admin', '2021-01-05 17:03:48', '', '2021-01-16 13:51:20', b'0'); -INSERT INTO `sys_dict_data` VALUES (20, 4, '删除', '4', 'sys_operate_type', 0, '删除æ“作', 'admin', '2021-01-05 17:03:48', '', '2021-01-16 13:51:24', b'0'); -INSERT INTO `sys_dict_data` VALUES (22, 5, '导出', '5', 'sys_operate_type', 0, '导出æ“作', 'admin', '2021-01-05 17:03:48', '', '2021-01-16 13:49:20', b'0'); -INSERT INTO `sys_dict_data` VALUES (23, 6, '导入', '6', 'sys_operate_type', 0, '导入æ“作', 'admin', '2021-01-05 17:03:48', '', '2021-01-16 13:49:24', b'0'); -INSERT INTO `sys_dict_data` VALUES (27, 1, 'å¼€å¯', '0', 'sys_common_status', 0, 'å¼€å¯çжæ€', 'admin', '2021-01-05 17:03:48', '', '2021-01-06 02:57:12', b'0'); -INSERT INTO `sys_dict_data` VALUES (28, 2, '关闭', '1', 'sys_common_status', 0, '关闭状æ€', 'admin', '2021-01-05 17:03:48', '', '2021-01-06 05:48:32', b'0'); -INSERT INTO `sys_dict_data` VALUES (29, 1, '目录', '1', 'sys_menu_type', 0, '目录', 'admin', '2021-01-05 17:03:48', '', '2021-01-06 13:33:30', b'0'); -INSERT INTO `sys_dict_data` VALUES (30, 2, 'èœå•', '2', 'sys_menu_type', 0, 'èœå•', 'admin', '2021-01-05 17:03:48', '', '2021-01-06 13:33:35', b'0'); -INSERT INTO `sys_dict_data` VALUES (31, 3, '按钮', '3', 'sys_menu_type', 0, '按钮', 'admin', '2021-01-05 17:03:48', '', '2021-01-06 13:33:38', b'0'); -INSERT INTO `sys_dict_data` VALUES (32, 1, '内置', '1', 'sys_role_type', 0, '内置角色', 'admin', '2021-01-05 17:03:48', '', '2021-01-06 13:34:22', b'0'); -INSERT INTO `sys_dict_data` VALUES (33, 2, '自定义', '2', 'sys_role_type', 0, '自定义角色', 'admin', '2021-01-05 17:03:48', '', '2021-01-06 13:34:26', b'0'); -INSERT INTO `sys_dict_data` VALUES (34, 1, 'å…¨éƒ¨æ•°æ®æƒé™', '1', 'sys_data_scope', 0, 'å…¨éƒ¨æ•°æ®æƒé™', 'admin', '2021-01-05 17:03:48', '', '2021-01-06 19:38:02', b'0'); -INSERT INTO `sys_dict_data` VALUES (35, 2, 'æŒ‡å®šéƒ¨é—¨æ•°æ®æƒé™', '2', 'sys_data_scope', 0, 'æŒ‡å®šéƒ¨é—¨æ•°æ®æƒé™', 'admin', '2021-01-05 17:03:48', '', '2021-01-06 19:38:20', b'0'); -INSERT INTO `sys_dict_data` VALUES (36, 3, 'æœ¬éƒ¨é—¨æ•°æ®æƒé™', '3', 'sys_data_scope', 0, 'æœ¬éƒ¨é—¨æ•°æ®æƒé™', 'admin', '2021-01-05 17:03:48', '', '2021-01-06 19:38:29', b'0'); -INSERT INTO `sys_dict_data` VALUES (37, 4, '本部门åŠä»¥ä¸‹æ•°æ®æƒé™', '4', 'sys_data_scope', 0, '本部门åŠä»¥ä¸‹æ•°æ®æƒé™', 'admin', '2021-01-05 17:03:48', '', '2021-01-06 19:38:32', b'0'); -INSERT INTO `sys_dict_data` VALUES (38, 5, 'ä»…æœ¬äººæ•°æ®æƒé™', '5', 'sys_data_scope', 0, 'ä»…æœ¬äººæ•°æ®æƒé™', 'admin', '2021-01-05 17:03:48', '', '2021-01-06 19:38:38', b'0'); -INSERT INTO `sys_dict_data` VALUES (39, 0, 'æˆåŠŸ', '0', 'sys_login_result', 0, '登陆结果 - æˆåŠŸ', '', '2021-01-18 06:17:36', '', '2021-01-18 06:17:36', b'0'); -INSERT INTO `sys_dict_data` VALUES (40, 10, 'è´¦å·æˆ–密ç ä¸æ­£ç¡®', '10', 'sys_login_result', 0, '登陆结果 - è´¦å·æˆ–密ç ä¸æ­£ç¡®', '', '2021-01-18 06:17:54', '', '2021-01-18 06:17:54', b'0'); -INSERT INTO `sys_dict_data` VALUES (41, 20, '用户被ç¦ç”¨', '20', 'sys_login_result', 0, '登陆结果 - 用户被ç¦ç”¨', '', '2021-01-18 06:17:54', '', '2021-01-18 06:19:02', b'0'); -INSERT INTO `sys_dict_data` VALUES (42, 30, '验è¯ç ä¸å­˜åœ¨', '30', 'sys_login_result', 0, '登陆结果 - 验è¯ç ä¸å­˜åœ¨', '', '2021-01-18 06:17:54', '', '2021-01-18 06:19:24', b'0'); -INSERT INTO `sys_dict_data` VALUES (43, 31, '验è¯ç ä¸æ­£ç¡®', '31', 'sys_login_result', 0, '登陆结果 - 验è¯ç ä¸æ­£ç¡®', '', '2021-01-18 06:17:54', '', '2021-01-18 06:19:33', b'0'); -INSERT INTO `sys_dict_data` VALUES (44, 100, '未知异常', '100', 'sys_login_result', 0, '登陆结果 - 未知异常', '', '2021-01-18 06:17:54', '', '2021-01-18 06:19:57', b'0'); -INSERT INTO `sys_dict_data` VALUES (45, 1, '是', 'true', 'sys_boolean_string', 0, 'Boolean 是å¦ç±»åž‹ - 是', '', '2021-01-19 03:20:55', '', '2021-01-19 03:21:08', b'0'); -INSERT INTO `sys_dict_data` VALUES (46, 1, 'å¦', 'false', 'sys_boolean_string', 0, 'Boolean 是å¦ç±»åž‹ - å¦', '', '2021-01-19 03:20:55', '', '2021-01-19 03:21:39', b'0'); -INSERT INTO `sys_dict_data` VALUES (47, 1, 'æ°¸ä¸è¶…æ—¶', '1', 'inf_redis_timeout_type', 0, 'Redis 未设置超时的情况', '', '2021-01-26 00:53:17', '', '2021-01-26 00:53:17', b'0'); -INSERT INTO `sys_dict_data` VALUES (48, 1, '动æ€è¶…æ—¶', '2', 'inf_redis_timeout_type', 0, '程åºé‡ŒåЍæ€ä¼ å…¥è¶…时时间,无法固定', '', '2021-01-26 00:55:00', '', '2021-01-26 00:55:00', b'0'); -INSERT INTO `sys_dict_data` VALUES (49, 3, '固定超时', '3', 'inf_redis_timeout_type', 0, 'Redis 设置了过期时间', '', '2021-01-26 00:55:26', '', '2021-01-26 00:55:26', b'0'); -INSERT INTO `sys_dict_data` VALUES (50, 1, 'å•表(增删改查)', '1', 'tool_codegen_template_type', 0, NULL, '', '2021-02-05 07:09:06', '', '2021-02-05 07:21:52', b'0'); -INSERT INTO `sys_dict_data` VALUES (51, 2, '树表(增删改查)', '2', 'tool_codegen_template_type', 0, NULL, '', '2021-02-05 07:14:46', '', '2021-02-05 07:21:49', b'0'); -INSERT INTO `sys_dict_data` VALUES (52, 3, '主å­è¡¨ï¼ˆå¢žåˆ æ”¹æŸ¥ï¼‰', '3', 'tool_codegen_template_type', 0, NULL, '', '2021-02-05 07:21:45', '', '2021-02-06 18:54:26', b'1'); -INSERT INTO `sys_dict_data` VALUES (53, 0, 'åˆå§‹åŒ–中', '0', 'inf_job_status', 0, NULL, '', '2021-02-07 07:46:49', '', '2021-02-07 07:46:49', b'0'); -INSERT INTO `sys_dict_data` VALUES (54, 1, 'å¼€å¯', '1', 'inf_job_status', 0, NULL, '', '2021-02-07 07:46:57', '', '2021-02-07 11:54:09', b'0'); -INSERT INTO `sys_dict_data` VALUES (56, 3, 'æš‚åœ', '2', 'inf_job_status', 0, NULL, '', '2021-02-07 07:47:16', '', '2021-02-08 04:54:11', b'0'); -INSERT INTO `sys_dict_data` VALUES (57, 0, 'è¿è¡Œä¸­', '0', 'inf_job_log_status', 0, 'RUNNING', '', '2021-02-08 10:04:24', '', '2021-02-08 10:04:24', b'0'); -INSERT INTO `sys_dict_data` VALUES (58, 1, 'æˆåŠŸ', '1', 'inf_job_log_status', 0, NULL, '', '2021-02-08 10:06:57', '', '2021-02-08 10:06:57', b'0'); -INSERT INTO `sys_dict_data` VALUES (59, 2, '失败', '2', 'inf_job_log_status', 0, '失败', '', '2021-02-08 10:07:38', '', '2021-02-08 10:07:38', b'0'); -INSERT INTO `sys_dict_data` VALUES (60, 1, '会员', '1', 'user_type', 0, NULL, '', '2021-02-26 00:16:27', '', '2021-02-26 00:16:27', b'0'); -INSERT INTO `sys_dict_data` VALUES (61, 2, '管ç†å‘˜', '2', 'user_type', 0, NULL, '', '2021-02-26 00:16:34', '', '2021-02-26 00:16:34', b'0'); -INSERT INTO `sys_dict_data` VALUES (62, 0, '未处ç†', '0', 'inf_api_error_log_process_status', 0, NULL, '', '2021-02-26 07:07:19', '', '2021-02-26 08:11:23', b'0'); -INSERT INTO `sys_dict_data` VALUES (63, 1, '已处ç†', '1', 'inf_api_error_log_process_status', 0, NULL, '', '2021-02-26 07:07:26', '', '2021-02-26 08:11:29', b'0'); -INSERT INTO `sys_dict_data` VALUES (64, 2, '已忽略', '2', 'inf_api_error_log_process_status', 0, NULL, '', '2021-02-26 07:07:34', '', '2021-02-26 08:11:34', b'0'); -INSERT INTO `sys_dict_data` VALUES (65, 1, '云片', 'YUN_PIAN', 'sys_sms_channel_code', 0, NULL, '1', '2021-04-05 01:05:14', '1', '2021-04-13 00:20:13', b'0'); -INSERT INTO `sys_dict_data` VALUES (66, 2, '阿里云', 'ALIYUN', 'sys_sms_channel_code', 0, NULL, '1', '2021-04-05 01:05:26', '1', '2021-04-13 00:20:16', b'0'); -INSERT INTO `sys_dict_data` VALUES (67, 1, '验è¯ç ', '1', 'sys_sms_template_type', 0, NULL, '1', '2021-04-05 21:50:57', '1', '2021-04-05 21:50:57', b'0'); -INSERT INTO `sys_dict_data` VALUES (68, 2, '通知', '2', 'sys_sms_template_type', 0, NULL, '1', '2021-04-05 21:51:08', '1', '2021-04-05 21:51:08', b'0'); -INSERT INTO `sys_dict_data` VALUES (69, 0, 'è¥é”€', '3', 'sys_sms_template_type', 0, NULL, '1', '2021-04-05 21:51:15', '1', '2021-04-05 21:51:15', b'0'); -INSERT INTO `sys_dict_data` VALUES (70, 0, 'åˆå§‹åŒ–', '0', 'sys_sms_send_status', 0, NULL, '1', '2021-04-11 20:18:33', '1', '2021-04-11 09:30:18', b'0'); -INSERT INTO `sys_dict_data` VALUES (71, 1, 'å‘逿ˆåŠŸ', '10', 'sys_sms_send_status', 0, NULL, '1', '2021-04-11 20:18:43', '1', '2021-04-11 09:30:20', b'0'); -INSERT INTO `sys_dict_data` VALUES (72, 2, 'å‘é€å¤±è´¥', '20', 'sys_sms_send_status', 0, NULL, '1', '2021-04-11 20:18:49', '1', '2021-04-11 09:30:22', b'0'); -INSERT INTO `sys_dict_data` VALUES (73, 3, 'ä¸å‘é€', '30', 'sys_sms_send_status', 0, NULL, '1', '2021-04-11 20:19:44', '1', '2021-04-11 09:30:23', b'0'); -INSERT INTO `sys_dict_data` VALUES (74, 0, '等待结果', '0', 'sys_sms_receive_status', 0, NULL, '1', '2021-04-11 20:27:43', '1', '2021-04-17 23:05:19', b'0'); -INSERT INTO `sys_dict_data` VALUES (75, 1, '接收æˆåŠŸ', '10', 'sys_sms_receive_status', 0, NULL, '1', '2021-04-11 20:29:25', '1', '2021-04-11 20:29:35', b'0'); -INSERT INTO `sys_dict_data` VALUES (76, 2, '接收失败', '20', 'sys_sms_receive_status', 0, NULL, '1', '2021-04-11 20:29:31', '1', '2021-04-11 20:29:39', b'0'); -INSERT INTO `sys_dict_data` VALUES (77, 0, '调试(钉钉)', 'DEBUG_DING_TALK', 'sys_sms_channel_code', 0, NULL, '1', '2021-04-13 00:20:37', '1', '2021-04-13 00:20:37', b'0'); -INSERT INTO `sys_dict_data` VALUES (78, 1, '自动生æˆ', '1', 'sys_error_code_type', 0, NULL, '1', '2021-04-21 00:06:48', '1', '2021-04-13 22:06:44', b'0'); -INSERT INTO `sys_dict_data` VALUES (79, 2, '手动编辑', '2', 'sys_error_code_type', 0, NULL, '1', '2021-04-21 00:07:14', '1', '2021-04-13 22:06:49', b'0'); -INSERT INTO `sys_dict_data` VALUES (80, 100, 'è´¦å·ç™»å½•', '100', 'sys_login_type', 0, 'è´¦å·ç™»å½•', '1', '2021-10-06 00:52:02', '1', '2021-10-06 00:52:43', b'0'); -INSERT INTO `sys_dict_data` VALUES (81, 101, '社交登录', '101', 'sys_login_type', 0, '社交登录', '1', '2021-10-06 00:52:17', '1', '2021-10-06 00:52:17', b'0'); -INSERT INTO `sys_dict_data` VALUES (82, 102, 'Mock 登录', '102', 'sys_login_type', 0, 'Mock 登录', '1', '2021-10-06 00:52:32', '1', '2021-10-06 00:52:39', b'0'); -INSERT INTO `sys_dict_data` VALUES (83, 200, '主动登出', '200', 'sys_login_type', 0, '主动登出', '1', '2021-10-06 00:52:58', '1', '2021-10-06 00:52:58', b'0'); -INSERT INTO `sys_dict_data` VALUES (84, 201, '超时登出', '201', 'sys_login_type', 0, '超时登出', '1', '2021-10-06 00:53:17', '1', '2021-10-06 00:53:17', b'0'); -INSERT INTO `sys_dict_data` VALUES (85, 202, '强制登出', '202', 'sys_login_type', 0, '强制退出', '1', '2021-10-06 00:53:41', '1', '2021-10-06 00:53:41', b'0'); -INSERT INTO `sys_dict_data` VALUES (86, 0, 'ç—…å‡', '1', 'bpm_oa_leave_type', 0, NULL, '1', '2021-09-21 22:35:28', '1', '2022-01-22 10:42:08', b'0'); -INSERT INTO `sys_dict_data` VALUES (87, 1, '事å‡', '2', 'bpm_oa_leave_type', 0, NULL, '1', '2021-09-21 22:36:11', '1', '2022-01-22 10:42:11', b'0'); -INSERT INTO `sys_dict_data` VALUES (88, 2, '婚å‡', '3', 'bpm_oa_leave_type', 0, NULL, '1', '2021-09-21 22:36:38', '1', '2022-01-22 10:42:16', b'0'); -INSERT INTO `sys_dict_data` VALUES (89, 0, '处ç†ä¸­', '1', 'oa_leave_status', 0, NULL, '1', '2021-09-21 22:46:46', '1', '2022-01-22 10:40:38', b'1'); -INSERT INTO `sys_dict_data` VALUES (90, 1, 'æµç¨‹ç»“æŸ', '2', 'oa_leave_status', 0, NULL, '1', '2021-09-21 22:47:03', '1', '2022-01-22 10:40:37', b'1'); -INSERT INTO `sys_dict_data` VALUES (91, 2, '完æˆ', '3', 'oa_leave_status', 0, NULL, '1', '2021-09-21 22:47:25', '1', '2021-10-12 14:13:06', b'1'); -INSERT INTO `sys_dict_data` VALUES (98, 1, 'v2', 'v2', 'pay_channel_wechat_version', 0, 'v2版本', '1', '2021-11-08 17:00:58', '1', '2021-11-08 17:00:58', b'0'); -INSERT INTO `sys_dict_data` VALUES (99, 2, 'v3', 'v3', 'pay_channel_wechat_version', 0, 'v3版本', '1', '2021-11-08 17:01:07', '1', '2021-11-08 17:01:07', b'0'); -INSERT INTO `sys_dict_data` VALUES (108, 1, 'RSA2', 'RSA2', 'pay_channel_alipay_sign_type', 0, 'RSA2', '1', '2021-11-18 15:39:29', '1', '2021-11-18 15:39:29', b'0'); -INSERT INTO `sys_dict_data` VALUES (109, 1, '公钥模å¼', '1', 'pay_channel_alipay_mode', 0, '公钥模å¼ï¼šprivateKey + alipayPublicKey', '1', '2021-11-18 15:45:23', '1', '2021-11-18 15:45:23', b'0'); -INSERT INTO `sys_dict_data` VALUES (110, 2, 'è¯ä¹¦æ¨¡å¼', '2', 'pay_channel_alipay_mode', 0, 'è¯ä¹¦æ¨¡å¼ï¼šappCertContent + alipayPublicCertContent + rootCertContent', '1', '2021-11-18 15:45:40', '1', '2021-11-18 15:45:40', b'0'); -INSERT INTO `sys_dict_data` VALUES (111, 1, '线上', 'https://openapi.alipay.com/gateway.do', 'pay_channel_alipay_server_type', 0, 'ç½‘å…³åœ°å€ - 线上', '1', '2021-11-18 16:59:32', '1', '2021-11-21 17:37:29', b'0'); -INSERT INTO `sys_dict_data` VALUES (112, 2, '沙箱', 'https://openapi.alipaydev.com/gateway.do', 'pay_channel_alipay_server_type', 0, 'ç½‘å…³åœ°å€ - 沙箱', '1', '2021-11-18 16:59:48', '1', '2021-11-21 17:37:39', b'0'); -INSERT INTO `sys_dict_data` VALUES (113, 1, '微信 JSAPI 支付', 'wx_pub', 'pay_channel_code_type', 0, '微信 JSAPI(公众å·ï¼‰ 支付', '1', '2021-12-03 10:40:24', '1', '2021-12-04 16:41:00', b'0'); -INSERT INTO `sys_dict_data` VALUES (114, 2, '微信å°ç¨‹åºæ”¯ä»˜', 'wx_lite', 'pay_channel_code_type', 0, '微信å°ç¨‹åºæ”¯ä»˜', '1', '2021-12-03 10:41:06', '1', '2021-12-03 10:41:06', b'0'); -INSERT INTO `sys_dict_data` VALUES (115, 3, '微信 App 支付', 'wx_app', 'pay_channel_code_type', 0, '微信 App 支付', '1', '2021-12-03 10:41:20', '1', '2021-12-03 10:41:20', b'0'); -INSERT INTO `sys_dict_data` VALUES (116, 4, 'æ”¯ä»˜å® PC 网站支付', 'alipay_pc', 'pay_channel_code_type', 0, 'æ”¯ä»˜å® PC 网站支付', '1', '2021-12-03 10:42:09', '1', '2021-12-03 10:42:09', b'0'); -INSERT INTO `sys_dict_data` VALUES (117, 5, 'æ”¯ä»˜å® Wap 网站支付', 'alipay_wap', 'pay_channel_code_type', 0, 'æ”¯ä»˜å® Wap 网站支付', '1', '2021-12-03 10:42:26', '1', '2021-12-03 10:42:26', b'0'); -INSERT INTO `sys_dict_data` VALUES (118, 6, '支付å®App 支付', 'alipay_app', 'pay_channel_code_type', 0, '支付å®App 支付', '1', '2021-12-03 10:42:55', '1', '2021-12-03 10:42:55', b'0'); -INSERT INTO `sys_dict_data` VALUES (119, 7, 'æ”¯ä»˜å®æ‰«ç æ”¯ä»˜', 'alipay_qr', 'pay_channel_code_type', 0, 'æ”¯ä»˜å®æ‰«ç æ”¯ä»˜', '1', '2021-12-03 10:43:10', '1', '2021-12-03 10:43:10', b'0'); -INSERT INTO `sys_dict_data` VALUES (120, 1, '通知æˆåŠŸ', '10', 'pay_order_notify_status', 0, '通知æˆåŠŸ', '1', '2021-12-03 11:02:41', '1', '2021-12-03 11:02:41', b'0'); -INSERT INTO `sys_dict_data` VALUES (121, 2, '通知失败', '20', 'pay_order_notify_status', 0, '通知失败', '1', '2021-12-03 11:02:59', '1', '2021-12-03 11:02:59', b'0'); -INSERT INTO `sys_dict_data` VALUES (122, 3, '未通知', '0', 'pay_order_notify_status', 0, '未通知', '1', '2021-12-03 11:03:10', '1', '2021-12-03 11:03:10', b'0'); -INSERT INTO `sys_dict_data` VALUES (123, 1, '支付æˆåŠŸ', '10', 'pay_order_status', 0, '支付æˆåŠŸ', '1', '2021-12-03 11:18:29', '1', '2021-12-03 11:28:32', b'0'); -INSERT INTO `sys_dict_data` VALUES (124, 2, '支付关闭', '20', 'pay_order_status', 0, '支付关闭', '1', '2021-12-03 11:18:42', '1', '2021-12-03 11:28:34', b'0'); -INSERT INTO `sys_dict_data` VALUES (125, 3, '未支付', '0', 'pay_order_status', 0, '未支付', '1', '2021-12-03 11:18:18', '1', '2021-12-03 11:28:36', b'0'); -INSERT INTO `sys_dict_data` VALUES (126, 1, '未退款', '0', 'pay_order_refund_status', 0, '未退款', '1', '2021-12-03 11:30:35', '1', '2021-12-03 11:34:05', b'0'); -INSERT INTO `sys_dict_data` VALUES (127, 2, '部分退款', '10', 'pay_order_refund_status', 0, '部分退款', '1', '2021-12-03 11:30:44', '1', '2021-12-03 11:34:10', b'0'); -INSERT INTO `sys_dict_data` VALUES (128, 3, '全部退款', '20', 'pay_order_refund_status', 0, '全部退款', '1', '2021-12-03 11:30:52', '1', '2021-12-03 11:34:14', b'0'); -INSERT INTO `sys_dict_data` VALUES (1117, 1, '退款订å•生æˆ', '0', 'pay_refund_order_status', 0, '退款订å•生æˆ', '1', '2021-12-10 16:44:44', '1', '2021-12-10 16:44:44', b'0'); -INSERT INTO `sys_dict_data` VALUES (1118, 2, '退款æˆåŠŸ', '1', 'pay_refund_order_status', 0, '退款æˆåŠŸ', '1', '2021-12-10 16:44:59', '1', '2021-12-10 16:44:59', b'0'); -INSERT INTO `sys_dict_data` VALUES (1119, 3, '退款失败', '2', 'pay_refund_order_status', 0, '退款失败', '1', '2021-12-10 16:45:10', '1', '2021-12-10 16:45:10', b'0'); -INSERT INTO `sys_dict_data` VALUES (1120, 4, '退款中, 渠é“通知结果', '3', 'pay_refund_order_status', 0, '退款中, 渠é“通知结果', '1', '2021-12-10 16:45:32', '1', '2021-12-10 16:45:32', b'0'); -INSERT INTO `sys_dict_data` VALUES (1121, 5, '退款中, 系统查询结果', '4', 'pay_refund_order_status', 0, '退款中, 系统查询结果', '1', '2021-12-10 16:45:48', '1', '2021-12-10 16:45:48', b'0'); -INSERT INTO `sys_dict_data` VALUES (1122, 6, 'çŠ¶æ€æœªçŸ¥ï¼Œéœ€è¦é‡è¯•', '5', 'pay_refund_order_status', 0, 'çŠ¶æ€æœªçŸ¥ï¼Œéœ€è¦é‡è¯•', '1', '2021-12-10 16:46:03', '1', '2021-12-10 16:46:03', b'0'); -INSERT INTO `sys_dict_data` VALUES (1123, 7, 'çŠ¶æ€æœªçŸ¥ï¼Œç³»ç»ŸæŸ¥è¯¢ç»“æžœ', '6', 'pay_refund_order_status', 0, 'çŠ¶æ€æœªçŸ¥ï¼Œç³»ç»ŸæŸ¥è¯¢ç»“æžœ', '1', '2021-12-10 16:46:13', '1', '2021-12-10 16:46:13', b'0'); -INSERT INTO `sys_dict_data` VALUES (1124, 8, '退款关闭', '99', 'pay_refund_order_status', 0, '退款关闭', '1', '2021-12-10 16:46:26', '1', '2021-12-10 16:46:26', b'0'); -INSERT INTO `sys_dict_data` VALUES (1125, 0, '默认', '1', 'bpm_model_category', 0, 'æµç¨‹åˆ†ç±» - 默认', '1', '2022-01-02 08:41:11', '1', '2022-01-02 08:41:11', b'0'); -INSERT INTO `sys_dict_data` VALUES (1126, 0, 'OA', '2', 'bpm_model_category', 0, 'æµç¨‹åˆ†ç±» - OA', '1', '2022-01-02 08:41:22', '1', '2022-01-02 08:41:22', b'0'); -INSERT INTO `sys_dict_data` VALUES (1127, 0, '进行中', '1', 'bpm_process_instance_status', 0, 'æµç¨‹å®žä¾‹çš„çŠ¶æ€ - 进行中', '1', '2022-01-07 23:47:22', '1', '2022-01-09 08:59:34', b'0'); -INSERT INTO `sys_dict_data` VALUES (1128, 2, '已完æˆ', '2', 'bpm_process_instance_status', 0, 'æµç¨‹å®žä¾‹çš„çŠ¶æ€ - 已完æˆ', '1', '2022-01-07 23:47:49', '1', '2022-01-07 23:47:49', b'0'); -INSERT INTO `sys_dict_data` VALUES (1129, 1, '处ç†ä¸­', '1', 'bpm_process_instance_result', 0, 'æµç¨‹å®žä¾‹çš„结果 - 处ç†ä¸­', '1', '2022-01-07 23:48:32', '1', '2022-01-07 23:48:32', b'0'); -INSERT INTO `sys_dict_data` VALUES (1130, 2, '通过', '2', 'bpm_process_instance_result', 0, 'æµç¨‹å®žä¾‹çš„结果 - 通过', '1', '2022-01-07 23:48:45', '1', '2022-01-07 23:48:45', b'0'); -INSERT INTO `sys_dict_data` VALUES (1131, 3, 'ä¸é€šè¿‡', '3', 'bpm_process_instance_result', 0, 'æµç¨‹å®žä¾‹çš„结果 - ä¸é€šè¿‡', '1', '2022-01-07 23:48:55', '1', '2022-01-07 23:48:55', b'0'); -INSERT INTO `sys_dict_data` VALUES (1132, 4, '已喿¶ˆ', '4', 'bpm_process_instance_result', 0, 'æµç¨‹å®žä¾‹çš„结果 - 撤销', '1', '2022-01-07 23:49:06', '1', '2022-01-08 13:21:14', b'0'); -INSERT INTO `sys_dict_data` VALUES (1133, 10, 'æµç¨‹è¡¨å•', '10', 'bpm_model_form_type', 0, 'æµç¨‹çš„表å•类型 - æµç¨‹è¡¨å•', '103', '2022-01-11 23:51:30', '103', '2022-01-11 23:51:30', b'0'); -INSERT INTO `sys_dict_data` VALUES (1134, 20, '业务表å•', '20', 'bpm_model_form_type', 0, 'æµç¨‹çš„表å•类型 - 业务表å•', '103', '2022-01-11 23:51:47', '103', '2022-01-11 23:51:47', b'0'); -INSERT INTO `sys_dict_data` VALUES (1135, 10, '角色', '10', 'bpm_task_assign_rule_type', 0, '任务分é…规则的类型 - 角色', '103', '2022-01-12 23:21:22', '103', '2022-01-12 15:46:30', b'0'); -INSERT INTO `sys_dict_data` VALUES (1136, 20, '部门的æˆå‘˜', '20', 'bpm_task_assign_rule_type', 0, '任务分é…规则的类型 - 部门的æˆå‘˜', '103', '2022-01-12 23:21:47', '103', '2022-01-12 15:46:26', b'0'); -INSERT INTO `sys_dict_data` VALUES (1137, 21, '部门的负责人', '21', 'bpm_task_assign_rule_type', 0, '任务分é…规则的类型 - 部门的负责人', '103', '2022-01-12 23:33:36', '103', '2022-01-12 15:46:24', b'0'); -INSERT INTO `sys_dict_data` VALUES (1138, 30, '用户', '30', 'bpm_task_assign_rule_type', 0, '任务分é…规则的类型 - 用户', '103', '2022-01-12 23:34:02', '103', '2022-01-12 15:46:22', b'0'); -INSERT INTO `sys_dict_data` VALUES (1139, 40, '用户组', '40', 'bpm_task_assign_rule_type', 0, '任务分é…规则的类型 - 用户组', '103', '2022-01-12 23:34:21', '103', '2022-01-12 15:46:21', b'0'); -INSERT INTO `sys_dict_data` VALUES (1140, 50, '自定义脚本', '50', 'bpm_task_assign_rule_type', 0, '任务分é…规则的类型 - 自定义脚本', '103', '2022-01-12 23:34:43', '103', '2022-01-12 15:46:19', b'0'); -INSERT INTO `sys_dict_data` VALUES (1141, 22, 'å²—ä½', '22', 'bpm_task_assign_rule_type', 0, '任务分é…规则的类型 - å²—ä½', '103', '2022-01-14 18:41:55', '103', '2022-01-14 18:42:31', b'0'); -INSERT INTO `sys_dict_data` VALUES (1142, 10, 'æµç¨‹å‘起人', '10', 'bpm_task_assign_script', 0, '任务分é…自定义脚本 - æµç¨‹å‘起人', '103', '2022-01-15 00:10:57', '103', '2022-01-15 21:24:10', b'0'); -INSERT INTO `sys_dict_data` VALUES (1143, 20, 'æµç¨‹å‘起人的一级领导', '20', 'bpm_task_assign_script', 0, '任务分é…自定义脚本 - æµç¨‹å‘起人的一级领导', '103', '2022-01-15 21:24:31', '103', '2022-01-15 21:24:31', b'0'); -INSERT INTO `sys_dict_data` VALUES (1144, 21, 'æµç¨‹å‘起人的二级领导', '21', 'bpm_task_assign_script', 0, '任务分é…自定义脚本 - æµç¨‹å‘起人的二级领导', '103', '2022-01-15 21:24:46', '103', '2022-01-15 21:24:57', b'0'); +INSERT INTO `system_dict_data` VALUES (1, 1, 'ç”·', '1', 'system_user_sex', 0, '性别男', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:30:38', b'0'); +INSERT INTO `system_dict_data` VALUES (2, 2, '女', '2', 'system_user_sex', 0, '性别女', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:30:41', b'0'); +INSERT INTO `system_dict_data` VALUES (8, 1, '正常', '1', 'infra_job_status', 0, '正常状æ€', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:59:07', b'0'); +INSERT INTO `system_dict_data` VALUES (9, 2, 'æš‚åœ', '2', 'infra_job_status', 0, 'åœç”¨çжæ€', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:57:08', b'0'); +INSERT INTO `system_dict_data` VALUES (12, 1, '系统内置', '1', 'infra_config_type', 0, '傿•°ç±»åž‹ - 系统内置', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:30', b'0'); +INSERT INTO `system_dict_data` VALUES (13, 2, '自定义', '2', 'infra_config_type', 0, '傿•°ç±»åž‹ - 自定义', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:28', b'0'); +INSERT INTO `system_dict_data` VALUES (14, 1, '通知', '1', 'system_notice_type', 0, '通知', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:43:32', b'0'); +INSERT INTO `system_dict_data` VALUES (15, 2, '公告', '2', 'system_notice_type', 0, '公告', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:43:25', b'0'); +INSERT INTO `system_dict_data` VALUES (16, 0, '其它', '0', 'system_operate_type', 0, '其它æ“作', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:43:13', b'0'); +INSERT INTO `system_dict_data` VALUES (17, 1, '查询', '1', 'system_operate_type', 0, '查询æ“作', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:43:16', b'0'); +INSERT INTO `system_dict_data` VALUES (18, 2, '新增', '2', 'system_operate_type', 0, '新增æ“作', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:43:18', b'0'); +INSERT INTO `system_dict_data` VALUES (19, 3, '修改', '3', 'system_operate_type', 0, '修改æ“作', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:43:19', b'0'); +INSERT INTO `system_dict_data` VALUES (20, 4, '删除', '4', 'system_operate_type', 0, '删除æ“作', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:43:21', b'0'); +INSERT INTO `system_dict_data` VALUES (22, 5, '导出', '5', 'system_operate_type', 0, '导出æ“作', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:43:22', b'0'); +INSERT INTO `system_dict_data` VALUES (23, 6, '导入', '6', 'system_operate_type', 0, '导入æ“作', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:43:10', b'0'); +INSERT INTO `system_dict_data` VALUES (27, 1, 'å¼€å¯', '0', 'common_status', 0, 'å¼€å¯çжæ€', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:21:04', b'0'); +INSERT INTO `system_dict_data` VALUES (28, 2, '关闭', '1', 'common_status', 0, '关闭状æ€', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:21:08', b'0'); +INSERT INTO `system_dict_data` VALUES (29, 1, '目录', '1', 'system_menu_type', 0, '目录', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:43:45', b'0'); +INSERT INTO `system_dict_data` VALUES (30, 2, 'èœå•', '2', 'system_menu_type', 0, 'èœå•', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:43:41', b'0'); +INSERT INTO `system_dict_data` VALUES (31, 3, '按钮', '3', 'system_menu_type', 0, '按钮', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:43:39', b'0'); +INSERT INTO `system_dict_data` VALUES (32, 1, '内置', '1', 'system_role_type', 0, '内置角色', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:43:03', b'0'); +INSERT INTO `system_dict_data` VALUES (33, 2, '自定义', '2', 'system_role_type', 0, '自定义角色', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:43:06', b'0'); +INSERT INTO `system_dict_data` VALUES (34, 1, 'å…¨éƒ¨æ•°æ®æƒé™', '1', 'system_data_scope', 0, 'å…¨éƒ¨æ•°æ®æƒé™', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:17', b'0'); +INSERT INTO `system_dict_data` VALUES (35, 2, 'æŒ‡å®šéƒ¨é—¨æ•°æ®æƒé™', '2', 'system_data_scope', 0, 'æŒ‡å®šéƒ¨é—¨æ•°æ®æƒé™', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:18', b'0'); +INSERT INTO `system_dict_data` VALUES (36, 3, 'æœ¬éƒ¨é—¨æ•°æ®æƒé™', '3', 'system_data_scope', 0, 'æœ¬éƒ¨é—¨æ•°æ®æƒé™', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:16', b'0'); +INSERT INTO `system_dict_data` VALUES (37, 4, '本部门åŠä»¥ä¸‹æ•°æ®æƒé™', '4', 'system_data_scope', 0, '本部门åŠä»¥ä¸‹æ•°æ®æƒé™', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:21', b'0'); +INSERT INTO `system_dict_data` VALUES (38, 5, 'ä»…æœ¬äººæ•°æ®æƒé™', '5', 'system_data_scope', 0, 'ä»…æœ¬äººæ•°æ®æƒé™', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:23', b'0'); +INSERT INTO `system_dict_data` VALUES (39, 0, 'æˆåŠŸ', '0', 'system_login_result', 0, '登陆结果 - æˆåŠŸ', '', '2021-01-18 06:17:36', '', '2022-02-01 16:44:30', b'0'); +INSERT INTO `system_dict_data` VALUES (40, 10, 'è´¦å·æˆ–密ç ä¸æ­£ç¡®', '10', 'system_login_result', 0, '登陆结果 - è´¦å·æˆ–密ç ä¸æ­£ç¡®', '', '2021-01-18 06:17:54', '', '2022-02-01 16:44:26', b'0'); +INSERT INTO `system_dict_data` VALUES (41, 20, '用户被ç¦ç”¨', '20', 'system_login_result', 0, '登陆结果 - 用户被ç¦ç”¨', '', '2021-01-18 06:17:54', '', '2022-02-01 16:44:24', b'0'); +INSERT INTO `system_dict_data` VALUES (42, 30, '验è¯ç ä¸å­˜åœ¨', '30', 'system_login_result', 0, '登陆结果 - 验è¯ç ä¸å­˜åœ¨', '', '2021-01-18 06:17:54', '', '2022-02-01 16:44:23', b'0'); +INSERT INTO `system_dict_data` VALUES (43, 31, '验è¯ç ä¸æ­£ç¡®', '31', 'system_login_result', 0, '登陆结果 - 验è¯ç ä¸æ­£ç¡®', '', '2021-01-18 06:17:54', '', '2022-02-01 16:44:19', b'0'); +INSERT INTO `system_dict_data` VALUES (44, 100, '未知异常', '100', 'system_login_result', 0, '登陆结果 - 未知异常', '', '2021-01-18 06:17:54', '', '2022-02-01 16:44:17', b'0'); +INSERT INTO `system_dict_data` VALUES (45, 1, '是', 'true', 'infra_boolean_string', 0, 'Boolean 是å¦ç±»åž‹ - 是', '', '2021-01-19 03:20:55', '', '2022-02-01 16:47:38', b'0'); +INSERT INTO `system_dict_data` VALUES (46, 1, 'å¦', 'false', 'infra_boolean_string', 0, 'Boolean 是å¦ç±»åž‹ - å¦', '', '2021-01-19 03:20:55', '', '2022-02-01 16:47:35', b'0'); +INSERT INTO `system_dict_data` VALUES (47, 1, 'æ°¸ä¸è¶…æ—¶', '1', 'infra_redis_timeout_type', 0, 'Redis 未设置超时的情况', '', '2021-01-26 00:53:17', '', '2022-02-01 16:48:09', b'0'); +INSERT INTO `system_dict_data` VALUES (48, 1, '动æ€è¶…æ—¶', '2', 'infra_redis_timeout_type', 0, '程åºé‡ŒåЍæ€ä¼ å…¥è¶…时时间,无法固定', '', '2021-01-26 00:55:00', '', '2022-02-01 16:48:06', b'0'); +INSERT INTO `system_dict_data` VALUES (49, 3, '固定超时', '3', 'infra_redis_timeout_type', 0, 'Redis 设置了过期时间', '', '2021-01-26 00:55:26', '', '2022-02-01 16:48:01', b'0'); +INSERT INTO `system_dict_data` VALUES (50, 1, 'å•表(增删改查)', '1', 'tool_codegen_template_type', 0, NULL, '', '2021-02-05 07:09:06', '', '2021-02-05 07:21:52', b'0'); +INSERT INTO `system_dict_data` VALUES (51, 2, '树表(增删改查)', '2', 'tool_codegen_template_type', 0, NULL, '', '2021-02-05 07:14:46', '', '2021-02-05 07:21:49', b'0'); +INSERT INTO `system_dict_data` VALUES (52, 3, '主å­è¡¨ï¼ˆå¢žåˆ æ”¹æŸ¥ï¼‰', '3', 'tool_codegen_template_type', 0, NULL, '', '2021-02-05 07:21:45', '', '2021-02-06 18:54:26', b'1'); +INSERT INTO `system_dict_data` VALUES (53, 0, 'åˆå§‹åŒ–中', '0', 'infra_job_status', 0, NULL, '', '2021-02-07 07:46:49', '', '2022-02-01 16:47:57', b'0'); +INSERT INTO `system_dict_data` VALUES (57, 0, 'è¿è¡Œä¸­', '0', 'infra_job_log_status', 0, 'RUNNING', '', '2021-02-08 10:04:24', '', '2022-02-01 16:48:54', b'0'); +INSERT INTO `system_dict_data` VALUES (58, 1, 'æˆåŠŸ', '1', 'infra_job_log_status', 0, NULL, '', '2021-02-08 10:06:57', '', '2022-02-01 16:48:58', b'0'); +INSERT INTO `system_dict_data` VALUES (59, 2, '失败', '2', 'infra_job_log_status', 0, '失败', '', '2021-02-08 10:07:38', '', '2022-02-01 16:49:02', b'0'); +INSERT INTO `system_dict_data` VALUES (60, 1, '会员', '1', 'user_type', 0, NULL, '', '2021-02-26 00:16:27', '', '2021-02-26 00:16:27', b'0'); +INSERT INTO `system_dict_data` VALUES (61, 2, '管ç†å‘˜', '2', 'user_type', 0, NULL, '', '2021-02-26 00:16:34', '', '2021-02-26 00:16:34', b'0'); +INSERT INTO `system_dict_data` VALUES (62, 0, '未处ç†', '0', 'infra_api_error_log_process_status', 0, NULL, '', '2021-02-26 07:07:19', '', '2022-02-01 16:49:05', b'0'); +INSERT INTO `system_dict_data` VALUES (63, 1, '已处ç†', '1', 'infra_api_error_log_process_status', 0, NULL, '', '2021-02-26 07:07:26', '', '2022-02-01 16:49:09', b'0'); +INSERT INTO `system_dict_data` VALUES (64, 2, '已忽略', '2', 'infra_api_error_log_process_status', 0, NULL, '', '2021-02-26 07:07:34', '', '2022-02-01 16:49:12', b'0'); +INSERT INTO `system_dict_data` VALUES (65, 1, '云片', 'YUN_PIAN', 'system_sms_channel_code', 0, NULL, '1', '2021-04-05 01:05:14', '1', '2022-02-01 16:39:36', b'0'); +INSERT INTO `system_dict_data` VALUES (66, 2, '阿里云', 'ALIYUN', 'system_sms_channel_code', 0, NULL, '1', '2021-04-05 01:05:26', '1', '2022-02-01 16:39:41', b'0'); +INSERT INTO `system_dict_data` VALUES (67, 1, '验è¯ç ', '1', 'system_sms_template_type', 0, NULL, '1', '2021-04-05 21:50:57', '1', '2022-02-01 16:37:27', b'0'); +INSERT INTO `system_dict_data` VALUES (68, 2, '通知', '2', 'system_sms_template_type', 0, NULL, '1', '2021-04-05 21:51:08', '1', '2022-02-01 16:37:33', b'0'); +INSERT INTO `system_dict_data` VALUES (69, 0, 'è¥é”€', '3', 'system_sms_template_type', 0, NULL, '1', '2021-04-05 21:51:15', '1', '2022-02-01 16:37:40', b'0'); +INSERT INTO `system_dict_data` VALUES (70, 0, 'åˆå§‹åŒ–', '0', 'system_sms_send_status', 0, NULL, '1', '2021-04-11 20:18:33', '1', '2022-02-01 16:38:58', b'0'); +INSERT INTO `system_dict_data` VALUES (71, 1, 'å‘逿ˆåŠŸ', '10', 'system_sms_send_status', 0, NULL, '1', '2021-04-11 20:18:43', '1', '2022-02-01 16:39:02', b'0'); +INSERT INTO `system_dict_data` VALUES (72, 2, 'å‘é€å¤±è´¥', '20', 'system_sms_send_status', 0, NULL, '1', '2021-04-11 20:18:49', '1', '2022-02-01 16:39:07', b'0'); +INSERT INTO `system_dict_data` VALUES (73, 3, 'ä¸å‘é€', '30', 'system_sms_send_status', 0, NULL, '1', '2021-04-11 20:19:44', '1', '2022-02-01 16:39:13', b'0'); +INSERT INTO `system_dict_data` VALUES (74, 0, '等待结果', '0', 'system_sms_receive_status', 0, NULL, '1', '2021-04-11 20:27:43', '1', '2022-02-01 16:39:19', b'0'); +INSERT INTO `system_dict_data` VALUES (75, 1, '接收æˆåŠŸ', '10', 'system_sms_receive_status', 0, NULL, '1', '2021-04-11 20:29:25', '1', '2022-02-01 16:39:23', b'0'); +INSERT INTO `system_dict_data` VALUES (76, 2, '接收失败', '20', 'system_sms_receive_status', 0, NULL, '1', '2021-04-11 20:29:31', '1', '2022-02-01 16:39:29', b'0'); +INSERT INTO `system_dict_data` VALUES (77, 0, '调试(钉钉)', 'DEBUG_DING_TALK', 'system_sms_channel_code', 0, NULL, '1', '2021-04-13 00:20:37', '1', '2022-02-01 16:39:47', b'0'); +INSERT INTO `system_dict_data` VALUES (78, 1, '自动生æˆ', '1', 'system_error_code_type', 0, NULL, '1', '2021-04-21 00:06:48', '1', '2022-02-01 16:47:11', b'0'); +INSERT INTO `system_dict_data` VALUES (79, 2, '手动编辑', '2', 'system_error_code_type', 0, NULL, '1', '2021-04-21 00:07:14', '1', '2022-02-01 16:47:10', b'0'); +INSERT INTO `system_dict_data` VALUES (80, 100, 'è´¦å·ç™»å½•', '100', 'system_login_type', 0, 'è´¦å·ç™»å½•', '1', '2021-10-06 00:52:02', '1', '2022-02-01 16:43:50', b'0'); +INSERT INTO `system_dict_data` VALUES (81, 101, '社交登录', '101', 'system_login_type', 0, '社交登录', '1', '2021-10-06 00:52:17', '1', '2022-02-01 16:43:51', b'0'); +INSERT INTO `system_dict_data` VALUES (82, 102, 'Mock 登录', '102', 'system_login_type', 0, 'Mock 登录', '1', '2021-10-06 00:52:32', '1', '2022-02-01 16:43:54', b'0'); +INSERT INTO `system_dict_data` VALUES (83, 200, '主动登出', '200', 'system_login_type', 0, '主动登出', '1', '2021-10-06 00:52:58', '1', '2022-02-01 16:43:55', b'0'); +INSERT INTO `system_dict_data` VALUES (84, 201, '超时登出', '201', 'system_login_type', 0, '超时登出', '1', '2021-10-06 00:53:17', '1', '2022-02-01 16:43:56', b'0'); +INSERT INTO `system_dict_data` VALUES (85, 202, '强制登出', '202', 'system_login_type', 0, '强制退出', '1', '2021-10-06 00:53:41', '1', '2022-02-01 16:43:58', b'0'); +INSERT INTO `system_dict_data` VALUES (86, 0, 'ç—…å‡', '1', 'bpm_oa_leave_type', 0, NULL, '1', '2021-09-21 22:35:28', '1', '2022-01-22 10:42:08', b'0'); +INSERT INTO `system_dict_data` VALUES (87, 1, '事å‡', '2', 'bpm_oa_leave_type', 0, NULL, '1', '2021-09-21 22:36:11', '1', '2022-01-22 10:42:11', b'0'); +INSERT INTO `system_dict_data` VALUES (88, 2, '婚å‡', '3', 'bpm_oa_leave_type', 0, NULL, '1', '2021-09-21 22:36:38', '1', '2022-01-22 10:42:16', b'0'); +INSERT INTO `system_dict_data` VALUES (98, 1, 'v2', 'v2', 'pay_channel_wechat_version', 0, 'v2版本', '1', '2021-11-08 17:00:58', '1', '2021-11-08 17:00:58', b'0'); +INSERT INTO `system_dict_data` VALUES (99, 2, 'v3', 'v3', 'pay_channel_wechat_version', 0, 'v3版本', '1', '2021-11-08 17:01:07', '1', '2021-11-08 17:01:07', b'0'); +INSERT INTO `system_dict_data` VALUES (108, 1, 'RSA2', 'RSA2', 'pay_channel_alipay_sign_type', 0, 'RSA2', '1', '2021-11-18 15:39:29', '1', '2021-11-18 15:39:29', b'0'); +INSERT INTO `system_dict_data` VALUES (109, 1, '公钥模å¼', '1', 'pay_channel_alipay_mode', 0, '公钥模å¼ï¼šprivateKey + alipayPublicKey', '1', '2021-11-18 15:45:23', '1', '2021-11-18 15:45:23', b'0'); +INSERT INTO `system_dict_data` VALUES (110, 2, 'è¯ä¹¦æ¨¡å¼', '2', 'pay_channel_alipay_mode', 0, 'è¯ä¹¦æ¨¡å¼ï¼šappCertContent + alipayPublicCertContent + rootCertContent', '1', '2021-11-18 15:45:40', '1', '2021-11-18 15:45:40', b'0'); +INSERT INTO `system_dict_data` VALUES (111, 1, '线上', 'https://openapi.alipay.com/gateway.do', 'pay_channel_alipay_server_type', 0, 'ç½‘å…³åœ°å€ - 线上', '1', '2021-11-18 16:59:32', '1', '2021-11-21 17:37:29', b'0'); +INSERT INTO `system_dict_data` VALUES (112, 2, '沙箱', 'https://openapi.alipaydev.com/gateway.do', 'pay_channel_alipay_server_type', 0, 'ç½‘å…³åœ°å€ - 沙箱', '1', '2021-11-18 16:59:48', '1', '2021-11-21 17:37:39', b'0'); +INSERT INTO `system_dict_data` VALUES (113, 1, '微信 JSAPI 支付', 'wx_pub', 'pay_channel_code_type', 0, '微信 JSAPI(公众å·ï¼‰ 支付', '1', '2021-12-03 10:40:24', '1', '2021-12-04 16:41:00', b'0'); +INSERT INTO `system_dict_data` VALUES (114, 2, '微信å°ç¨‹åºæ”¯ä»˜', 'wx_lite', 'pay_channel_code_type', 0, '微信å°ç¨‹åºæ”¯ä»˜', '1', '2021-12-03 10:41:06', '1', '2021-12-03 10:41:06', b'0'); +INSERT INTO `system_dict_data` VALUES (115, 3, '微信 App 支付', 'wx_app', 'pay_channel_code_type', 0, '微信 App 支付', '1', '2021-12-03 10:41:20', '1', '2021-12-03 10:41:20', b'0'); +INSERT INTO `system_dict_data` VALUES (116, 4, 'æ”¯ä»˜å® PC 网站支付', 'alipay_pc', 'pay_channel_code_type', 0, 'æ”¯ä»˜å® PC 网站支付', '1', '2021-12-03 10:42:09', '1', '2021-12-03 10:42:09', b'0'); +INSERT INTO `system_dict_data` VALUES (117, 5, 'æ”¯ä»˜å® Wap 网站支付', 'alipay_wap', 'pay_channel_code_type', 0, 'æ”¯ä»˜å® Wap 网站支付', '1', '2021-12-03 10:42:26', '1', '2021-12-03 10:42:26', b'0'); +INSERT INTO `system_dict_data` VALUES (118, 6, '支付å®App 支付', 'alipay_app', 'pay_channel_code_type', 0, '支付å®App 支付', '1', '2021-12-03 10:42:55', '1', '2021-12-03 10:42:55', b'0'); +INSERT INTO `system_dict_data` VALUES (119, 7, 'æ”¯ä»˜å®æ‰«ç æ”¯ä»˜', 'alipay_qr', 'pay_channel_code_type', 0, 'æ”¯ä»˜å®æ‰«ç æ”¯ä»˜', '1', '2021-12-03 10:43:10', '1', '2021-12-03 10:43:10', b'0'); +INSERT INTO `system_dict_data` VALUES (120, 1, '通知æˆåŠŸ', '10', 'pay_order_notify_status', 0, '通知æˆåŠŸ', '1', '2021-12-03 11:02:41', '1', '2021-12-03 11:02:41', b'0'); +INSERT INTO `system_dict_data` VALUES (121, 2, '通知失败', '20', 'pay_order_notify_status', 0, '通知失败', '1', '2021-12-03 11:02:59', '1', '2021-12-03 11:02:59', b'0'); +INSERT INTO `system_dict_data` VALUES (122, 3, '未通知', '0', 'pay_order_notify_status', 0, '未通知', '1', '2021-12-03 11:03:10', '1', '2021-12-03 11:03:10', b'0'); +INSERT INTO `system_dict_data` VALUES (123, 1, '支付æˆåŠŸ', '10', 'pay_order_status', 0, '支付æˆåŠŸ', '1', '2021-12-03 11:18:29', '1', '2021-12-03 11:28:32', b'0'); +INSERT INTO `system_dict_data` VALUES (124, 2, '支付关闭', '20', 'pay_order_status', 0, '支付关闭', '1', '2021-12-03 11:18:42', '1', '2021-12-03 11:28:34', b'0'); +INSERT INTO `system_dict_data` VALUES (125, 3, '未支付', '0', 'pay_order_status', 0, '未支付', '1', '2021-12-03 11:18:18', '1', '2021-12-03 11:28:36', b'0'); +INSERT INTO `system_dict_data` VALUES (126, 1, '未退款', '0', 'pay_order_refund_status', 0, '未退款', '1', '2021-12-03 11:30:35', '1', '2021-12-03 11:34:05', b'0'); +INSERT INTO `system_dict_data` VALUES (127, 2, '部分退款', '10', 'pay_order_refund_status', 0, '部分退款', '1', '2021-12-03 11:30:44', '1', '2021-12-03 11:34:10', b'0'); +INSERT INTO `system_dict_data` VALUES (128, 3, '全部退款', '20', 'pay_order_refund_status', 0, '全部退款', '1', '2021-12-03 11:30:52', '1', '2021-12-03 11:34:14', b'0'); +INSERT INTO `system_dict_data` VALUES (1117, 1, '退款订å•生æˆ', '0', 'pay_refund_order_status', 0, '退款订å•生æˆ', '1', '2021-12-10 16:44:44', '1', '2021-12-10 16:44:44', b'0'); +INSERT INTO `system_dict_data` VALUES (1118, 2, '退款æˆåŠŸ', '1', 'pay_refund_order_status', 0, '退款æˆåŠŸ', '1', '2021-12-10 16:44:59', '1', '2021-12-10 16:44:59', b'0'); +INSERT INTO `system_dict_data` VALUES (1119, 3, '退款失败', '2', 'pay_refund_order_status', 0, '退款失败', '1', '2021-12-10 16:45:10', '1', '2021-12-10 16:45:10', b'0'); +INSERT INTO `system_dict_data` VALUES (1120, 4, '退款中, 渠é“通知结果', '3', 'pay_refund_order_status', 0, '退款中, 渠é“通知结果', '1', '2021-12-10 16:45:32', '1', '2021-12-10 16:45:32', b'0'); +INSERT INTO `system_dict_data` VALUES (1121, 5, '退款中, 系统查询结果', '4', 'pay_refund_order_status', 0, '退款中, 系统查询结果', '1', '2021-12-10 16:45:48', '1', '2021-12-10 16:45:48', b'0'); +INSERT INTO `system_dict_data` VALUES (1122, 6, 'çŠ¶æ€æœªçŸ¥ï¼Œéœ€è¦é‡è¯•', '5', 'pay_refund_order_status', 0, 'çŠ¶æ€æœªçŸ¥ï¼Œéœ€è¦é‡è¯•', '1', '2021-12-10 16:46:03', '1', '2021-12-10 16:46:03', b'0'); +INSERT INTO `system_dict_data` VALUES (1123, 7, 'çŠ¶æ€æœªçŸ¥ï¼Œç³»ç»ŸæŸ¥è¯¢ç»“æžœ', '6', 'pay_refund_order_status', 0, 'çŠ¶æ€æœªçŸ¥ï¼Œç³»ç»ŸæŸ¥è¯¢ç»“æžœ', '1', '2021-12-10 16:46:13', '1', '2021-12-10 16:46:13', b'0'); +INSERT INTO `system_dict_data` VALUES (1124, 8, '退款关闭', '99', 'pay_refund_order_status', 0, '退款关闭', '1', '2021-12-10 16:46:26', '1', '2021-12-10 16:46:26', b'0'); +INSERT INTO `system_dict_data` VALUES (1125, 0, '默认', '1', 'bpm_model_category', 0, 'æµç¨‹åˆ†ç±» - 默认', '1', '2022-01-02 08:41:11', '1', '2022-01-02 08:41:11', b'0'); +INSERT INTO `system_dict_data` VALUES (1126, 0, 'OA', '2', 'bpm_model_category', 0, 'æµç¨‹åˆ†ç±» - OA', '1', '2022-01-02 08:41:22', '1', '2022-01-02 08:41:22', b'0'); +INSERT INTO `system_dict_data` VALUES (1127, 0, '进行中', '1', 'bpm_process_instance_status', 0, 'æµç¨‹å®žä¾‹çš„çŠ¶æ€ - 进行中', '1', '2022-01-07 23:47:22', '1', '2022-01-09 08:59:34', b'0'); +INSERT INTO `system_dict_data` VALUES (1128, 2, '已完æˆ', '2', 'bpm_process_instance_status', 0, 'æµç¨‹å®žä¾‹çš„çŠ¶æ€ - 已完æˆ', '1', '2022-01-07 23:47:49', '1', '2022-01-07 23:47:49', b'0'); +INSERT INTO `system_dict_data` VALUES (1129, 1, '处ç†ä¸­', '1', 'bpm_process_instance_result', 0, 'æµç¨‹å®žä¾‹çš„结果 - 处ç†ä¸­', '1', '2022-01-07 23:48:32', '1', '2022-01-07 23:48:32', b'0'); +INSERT INTO `system_dict_data` VALUES (1130, 2, '通过', '2', 'bpm_process_instance_result', 0, 'æµç¨‹å®žä¾‹çš„结果 - 通过', '1', '2022-01-07 23:48:45', '1', '2022-01-07 23:48:45', b'0'); +INSERT INTO `system_dict_data` VALUES (1131, 3, 'ä¸é€šè¿‡', '3', 'bpm_process_instance_result', 0, 'æµç¨‹å®žä¾‹çš„结果 - ä¸é€šè¿‡', '1', '2022-01-07 23:48:55', '1', '2022-01-07 23:48:55', b'0'); +INSERT INTO `system_dict_data` VALUES (1132, 4, '已喿¶ˆ', '4', 'bpm_process_instance_result', 0, 'æµç¨‹å®žä¾‹çš„结果 - 撤销', '1', '2022-01-07 23:49:06', '1', '2022-01-08 13:21:14', b'0'); +INSERT INTO `system_dict_data` VALUES (1133, 10, 'æµç¨‹è¡¨å•', '10', 'bpm_model_form_type', 0, 'æµç¨‹çš„表å•类型 - æµç¨‹è¡¨å•', '103', '2022-01-11 23:51:30', '103', '2022-01-11 23:51:30', b'0'); +INSERT INTO `system_dict_data` VALUES (1134, 20, '业务表å•', '20', 'bpm_model_form_type', 0, 'æµç¨‹çš„表å•类型 - 业务表å•', '103', '2022-01-11 23:51:47', '103', '2022-01-11 23:51:47', b'0'); +INSERT INTO `system_dict_data` VALUES (1135, 10, '角色', '10', 'bpm_task_assign_rule_type', 0, '任务分é…规则的类型 - 角色', '103', '2022-01-12 23:21:22', '103', '2022-01-12 15:46:30', b'0'); +INSERT INTO `system_dict_data` VALUES (1136, 20, '部门的æˆå‘˜', '20', 'bpm_task_assign_rule_type', 0, '任务分é…规则的类型 - 部门的æˆå‘˜', '103', '2022-01-12 23:21:47', '103', '2022-01-12 15:46:26', b'0'); +INSERT INTO `system_dict_data` VALUES (1137, 21, '部门的负责人', '21', 'bpm_task_assign_rule_type', 0, '任务分é…规则的类型 - 部门的负责人', '103', '2022-01-12 23:33:36', '103', '2022-01-12 15:46:24', b'0'); +INSERT INTO `system_dict_data` VALUES (1138, 30, '用户', '30', 'bpm_task_assign_rule_type', 0, '任务分é…规则的类型 - 用户', '103', '2022-01-12 23:34:02', '103', '2022-01-12 15:46:22', b'0'); +INSERT INTO `system_dict_data` VALUES (1139, 40, '用户组', '40', 'bpm_task_assign_rule_type', 0, '任务分é…规则的类型 - 用户组', '103', '2022-01-12 23:34:21', '103', '2022-01-12 15:46:21', b'0'); +INSERT INTO `system_dict_data` VALUES (1140, 50, '自定义脚本', '50', 'bpm_task_assign_rule_type', 0, '任务分é…规则的类型 - 自定义脚本', '103', '2022-01-12 23:34:43', '103', '2022-01-12 15:46:19', b'0'); +INSERT INTO `system_dict_data` VALUES (1141, 22, 'å²—ä½', '22', 'bpm_task_assign_rule_type', 0, '任务分é…规则的类型 - å²—ä½', '103', '2022-01-14 18:41:55', '103', '2022-01-14 18:42:31', b'0'); +INSERT INTO `system_dict_data` VALUES (1142, 10, 'æµç¨‹å‘起人', '10', 'bpm_task_assign_script', 0, '任务分é…自定义脚本 - æµç¨‹å‘起人', '103', '2022-01-15 00:10:57', '103', '2022-01-15 21:24:10', b'0'); +INSERT INTO `system_dict_data` VALUES (1143, 20, 'æµç¨‹å‘起人的一级领导', '20', 'bpm_task_assign_script', 0, '任务分é…自定义脚本 - æµç¨‹å‘起人的一级领导', '103', '2022-01-15 21:24:31', '103', '2022-01-15 21:24:31', b'0'); +INSERT INTO `system_dict_data` VALUES (1144, 21, 'æµç¨‹å‘起人的二级领导', '21', 'bpm_task_assign_script', 0, '任务分é…自定义脚本 - æµç¨‹å‘起人的二级领导', '103', '2022-01-15 21:24:46', '103', '2022-01-15 21:24:57', b'0'); COMMIT; -- ---------------------------- --- Table structure for sys_dict_type +-- Table structure for system_dict_type -- ---------------------------- -DROP TABLE IF EXISTS `sys_dict_type`; -CREATE TABLE `sys_dict_type` ( +DROP TABLE IF EXISTS `system_dict_type`; +CREATE TABLE `system_dict_type` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '字典主键', `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'å­—å…¸åç§°', `type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '字典类型', @@ -1622,58 +2040,52 @@ CREATE TABLE `sys_dict_type` ( ) ENGINE=InnoDB AUTO_INCREMENT=144 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='字典类型表'; -- ---------------------------- --- Records of sys_dict_type +-- Records of system_dict_type -- ---------------------------- BEGIN; -INSERT INTO `sys_dict_type` VALUES (1, '用户性别', 'sys_user_sex', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 17:03:48', b'0'); -INSERT INTO `sys_dict_type` VALUES (3, '系统开关', 'sys_normal_disable', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2021-01-07 19:47:48', b'1'); -INSERT INTO `sys_dict_type` VALUES (4, '任务状æ€çš„æžšä¸¾', 'sys_job_status', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2021-02-07 07:44:06', b'1'); -INSERT INTO `sys_dict_type` VALUES (5, '任务分组', 'sys_job_group', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2021-02-07 07:43:52', b'1'); -INSERT INTO `sys_dict_type` VALUES (6, '傿•°ç±»åž‹', 'sys_config_type', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2021-01-18 07:41:04', b'0'); -INSERT INTO `sys_dict_type` VALUES (7, '通知类型', 'sys_notice_type', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 17:03:48', b'0'); -INSERT INTO `sys_dict_type` VALUES (8, '通知状æ€', 'sys_notice_status', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 17:03:48', b'0'); -INSERT INTO `sys_dict_type` VALUES (9, 'æ“作类型', 'sys_oper_type', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 17:03:48', b'0'); -INSERT INTO `sys_dict_type` VALUES (10, '系统状æ€', 'sys_common_status', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 17:03:48', b'0'); -INSERT INTO `sys_dict_type` VALUES (11, 'Boolean 是å¦ç±»åž‹', 'sys_boolean_string', 0, 'boolean 转是å¦', '', '2021-01-19 03:20:08', '', '2021-01-19 03:20:08', b'0'); -INSERT INTO `sys_dict_type` VALUES (104, '登陆结果', 'sys_login_result', 0, '登陆结果', '', '2021-01-18 06:17:11', '', '2021-01-18 06:17:11', b'0'); -INSERT INTO `sys_dict_type` VALUES (105, 'Redis 超时类型', 'inf_redis_timeout_type', 0, 'RedisKeyDefine.TimeoutTypeEnum', '', '2021-01-26 00:52:50', '', '2021-01-26 00:52:50', b'0'); -INSERT INTO `sys_dict_type` VALUES (106, '代ç ç”Ÿæˆæ¨¡æ¿ç±»åž‹', 'tool_codegen_template_type', 0, NULL, '', '2021-02-05 07:08:06', '', '2021-02-05 07:08:06', b'0'); -INSERT INTO `sys_dict_type` VALUES (107, '定时任务状æ€', 'inf_job_status', 0, NULL, '', '2021-02-07 07:44:16', '', '2021-02-07 07:44:16', b'0'); -INSERT INTO `sys_dict_type` VALUES (108, '定时任务日志状æ€', 'inf_job_log_status', 0, NULL, '', '2021-02-08 10:03:51', '', '2021-02-08 10:03:51', b'0'); -INSERT INTO `sys_dict_type` VALUES (109, '用户类型', 'user_type', 0, NULL, '', '2021-02-26 00:15:51', '', '2021-02-26 00:15:51', b'0'); -INSERT INTO `sys_dict_type` VALUES (110, 'API 异常数æ®çš„处ç†çжæ€', 'inf_api_error_log_process_status', 0, NULL, '', '2021-02-26 07:07:01', '', '2021-02-26 07:07:01', b'0'); -INSERT INTO `sys_dict_type` VALUES (111, '短信渠é“ç¼–ç ', 'sys_sms_channel_code', 0, NULL, '1', '2021-04-05 01:04:50', '1', '2021-04-05 01:04:50', b'0'); -INSERT INTO `sys_dict_type` VALUES (112, '短信模æ¿çš„类型', 'sys_sms_template_type', 0, NULL, '1', '2021-04-05 21:50:43', '1', '2021-04-05 21:50:43', b'0'); -INSERT INTO `sys_dict_type` VALUES (113, '短信å‘é€çжæ€', 'sys_sms_send_status', 0, NULL, '1', '2021-04-11 20:18:03', '1', '2021-04-11 09:30:02', b'0'); -INSERT INTO `sys_dict_type` VALUES (114, '短信接收状æ€', 'sys_sms_receive_status', 0, NULL, '1', '2021-04-11 20:27:14', '1', '2021-04-11 20:27:14', b'0'); -INSERT INTO `sys_dict_type` VALUES (115, '错误ç çš„类型', 'sys_error_code_type', 0, NULL, '1', '2021-04-21 00:06:30', '1', '2021-04-13 22:07:12', b'0'); -INSERT INTO `sys_dict_type` VALUES (116, '登陆日志的类型', 'sys_login_type', 0, '登陆日志的类型', '1', '2021-10-06 00:50:46', '1', '2021-10-06 00:50:46', b'0'); -INSERT INTO `sys_dict_type` VALUES (117, 'OA 请å‡ç±»åž‹', 'bpm_oa_leave_type', 0, NULL, '1', '2021-09-21 22:34:33', '1', '2022-01-22 10:41:37', b'0'); -INSERT INTO `sys_dict_type` VALUES (118, 'è¯·å‡æµç¨‹çжæ€', 'oa_leave_status', 0, NULL, '1', '2021-09-21 22:46:04', '1', '2022-01-22 10:40:46', b'1'); -INSERT INTO `sys_dict_type` VALUES (122, '支付渠é“微信版本', 'pay_channel_wechat_version', 0, '支付渠é“微信版本', '1', '2021-11-08 17:00:26', '1', '2021-11-08 17:00:26', b'0'); -INSERT INTO `sys_dict_type` VALUES (127, 'æ”¯ä»˜æ¸ é“æ”¯ä»˜å®ç®—法类型', 'pay_channel_alipay_sign_type', 0, 'æ”¯ä»˜æ¸ é“æ”¯ä»˜å®ç®—法类型', '1', '2021-11-18 15:39:09', '1', '2021-11-18 15:39:09', b'0'); -INSERT INTO `sys_dict_type` VALUES (128, 'æ”¯ä»˜æ¸ é“æ”¯ä»˜å®å…¬é’¥ç±»åž‹', 'pay_channel_alipay_mode', 0, 'æ”¯ä»˜æ¸ é“æ”¯ä»˜å®å…¬é’¥ç±»åž‹', '1', '2021-11-18 15:44:28', '1', '2021-11-18 15:44:28', b'0'); -INSERT INTO `sys_dict_type` VALUES (129, '支付å®ç½‘关地å€', 'pay_channel_alipay_server_type', 0, '支付å®ç½‘关地å€', '1', '2021-11-18 16:58:55', '1', '2021-11-18 17:01:34', b'0'); -INSERT INTO `sys_dict_type` VALUES (130, '支付渠é“ç¼–ç ç±»åž‹', 'pay_channel_code_type', 0, '支付渠é“的编ç ', '1', '2021-12-03 10:35:08', '1', '2021-12-03 10:35:08', b'0'); -INSERT INTO `sys_dict_type` VALUES (131, '支付订å•回调状æ€', 'pay_order_notify_status', 0, '支付订å•回调状æ€', '1', '2021-12-03 10:53:29', '1', '2021-12-03 10:53:29', b'0'); -INSERT INTO `sys_dict_type` VALUES (132, '支付订å•状æ€', 'pay_order_status', 0, '支付订å•状æ€', '1', '2021-12-03 11:17:50', '1', '2021-12-03 11:17:50', b'0'); -INSERT INTO `sys_dict_type` VALUES (133, '支付订å•退款状æ€', 'pay_order_refund_status', 0, '支付订å•退款状æ€', '1', '2021-12-03 11:27:31', '1', '2021-12-03 11:27:31', b'0'); -INSERT INTO `sys_dict_type` VALUES (134, '退款订å•状æ€', 'pay_refund_order_status', 0, '退款订å•状æ€', '1', '2021-12-10 16:42:50', '1', '2021-12-10 16:42:50', b'0'); -INSERT INTO `sys_dict_type` VALUES (135, '退款订å•类别', 'pay_refund_order_type', 0, '退款订å•类别', '1', '2021-12-10 17:14:53', '1', '2021-12-10 17:14:53', b'0'); -INSERT INTO `sys_dict_type` VALUES (137, 'æµç¨‹åˆ†ç±»', 'æµç¨‹åˆ†ç±»', 0, 'æµç¨‹åˆ†ç±»', '1', '2022-01-02 08:40:17', '1', '2022-01-02 00:40:34', b'1'); -INSERT INTO `sys_dict_type` VALUES (138, 'æµç¨‹åˆ†ç±»', 'bpm_model_category', 0, 'æµç¨‹åˆ†ç±»', '1', '2022-01-02 08:40:45', '1', '2022-01-02 08:40:45', b'0'); -INSERT INTO `sys_dict_type` VALUES (139, 'æµç¨‹å®žä¾‹çš„状æ€', 'bpm_process_instance_status', 0, 'æµç¨‹å®žä¾‹çš„状æ€', '1', '2022-01-07 23:46:42', '1', '2022-01-07 23:46:42', b'0'); -INSERT INTO `sys_dict_type` VALUES (140, 'æµç¨‹å®žä¾‹çš„结果', 'bpm_process_instance_result', 0, 'æµç¨‹å®žä¾‹çš„结果', '1', '2022-01-07 23:48:10', '1', '2022-01-07 23:48:10', b'0'); -INSERT INTO `sys_dict_type` VALUES (141, 'æµç¨‹çš„表å•类型', 'bpm_model_form_type', 0, 'æµç¨‹çš„表å•类型', '103', '2022-01-11 23:50:45', '103', '2022-01-11 23:50:45', b'0'); -INSERT INTO `sys_dict_type` VALUES (142, '任务分é…规则的类型', 'bpm_task_assign_rule_type', 0, '任务分é…规则的类型', '103', '2022-01-12 23:21:04', '103', '2022-01-12 15:46:10', b'0'); -INSERT INTO `sys_dict_type` VALUES (143, '任务分é…自定义脚本', 'bpm_task_assign_script', 0, '任务分é…自定义脚本', '103', '2022-01-15 00:10:35', '103', '2022-01-15 00:10:35', b'0'); +INSERT INTO `system_dict_type` VALUES (1, '用户性别', 'system_user_sex', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:30:31', b'0'); +INSERT INTO `system_dict_type` VALUES (6, '傿•°ç±»åž‹', 'infra_config_type', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:36:54', b'0'); +INSERT INTO `system_dict_type` VALUES (7, '通知类型', 'system_notice_type', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:35:26', b'0'); +INSERT INTO `system_dict_type` VALUES (9, 'æ“作类型', 'system_oper_type', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:35:22', b'0'); +INSERT INTO `system_dict_type` VALUES (10, '系统状æ€', 'common_status', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:21:28', b'0'); +INSERT INTO `system_dict_type` VALUES (11, 'Boolean 是å¦ç±»åž‹', 'infra_boolean_string', 0, 'boolean 转是å¦', '', '2021-01-19 03:20:08', '', '2022-02-01 16:37:10', b'0'); +INSERT INTO `system_dict_type` VALUES (104, '登陆结果', 'system_login_result', 0, '登陆结果', '', '2021-01-18 06:17:11', '', '2022-02-01 16:36:00', b'0'); +INSERT INTO `system_dict_type` VALUES (105, 'Redis 超时类型', 'infra_redis_timeout_type', 0, 'RedisKeyDefine.TimeoutTypeEnum', '', '2021-01-26 00:52:50', '', '2022-02-01 16:50:29', b'0'); +INSERT INTO `system_dict_type` VALUES (106, '代ç ç”Ÿæˆæ¨¡æ¿ç±»åž‹', 'tool_codegen_template_type', 0, NULL, '', '2021-02-05 07:08:06', '', '2021-02-05 07:08:06', b'0'); +INSERT INTO `system_dict_type` VALUES (107, '定时任务状æ€', 'infra_job_status', 0, NULL, '', '2021-02-07 07:44:16', '', '2022-02-01 16:51:11', b'0'); +INSERT INTO `system_dict_type` VALUES (108, '定时任务日志状æ€', 'infra_job_log_status', 0, NULL, '', '2021-02-08 10:03:51', '', '2022-02-01 16:50:43', b'0'); +INSERT INTO `system_dict_type` VALUES (109, '用户类型', 'user_type', 0, NULL, '', '2021-02-26 00:15:51', '', '2021-02-26 00:15:51', b'0'); +INSERT INTO `system_dict_type` VALUES (110, 'API 异常数æ®çš„处ç†çжæ€', 'infra_api_error_log_process_status', 0, NULL, '', '2021-02-26 07:07:01', '', '2022-02-01 16:50:53', b'0'); +INSERT INTO `system_dict_type` VALUES (111, '短信渠é“ç¼–ç ', 'sytems_sms_channel_code', 0, NULL, '1', '2021-04-05 01:04:50', '1', '2022-02-01 16:35:18', b'0'); +INSERT INTO `system_dict_type` VALUES (112, '短信模æ¿çš„类型', 'system_sms_template_type', 0, NULL, '1', '2021-04-05 21:50:43', '1', '2022-02-01 16:35:06', b'0'); +INSERT INTO `system_dict_type` VALUES (113, '短信å‘é€çжæ€', 'system_sms_send_status', 0, NULL, '1', '2021-04-11 20:18:03', '1', '2022-02-01 16:35:09', b'0'); +INSERT INTO `system_dict_type` VALUES (114, '短信接收状æ€', 'system_sms_receive_status', 0, NULL, '1', '2021-04-11 20:27:14', '1', '2022-02-01 16:35:14', b'0'); +INSERT INTO `system_dict_type` VALUES (115, '错误ç çš„类型', 'system_error_code_type', 0, NULL, '1', '2021-04-21 00:06:30', '1', '2022-02-01 16:36:49', b'0'); +INSERT INTO `system_dict_type` VALUES (116, '登陆日志的类型', 'system_login_type', 0, '登陆日志的类型', '1', '2021-10-06 00:50:46', '1', '2022-02-01 16:35:56', b'0'); +INSERT INTO `system_dict_type` VALUES (117, 'OA 请å‡ç±»åž‹', 'bpm_oa_leave_type', 0, NULL, '1', '2021-09-21 22:34:33', '1', '2022-01-22 10:41:37', b'0'); +INSERT INTO `system_dict_type` VALUES (122, '支付渠é“微信版本', 'pay_channel_wechat_version', 0, '支付渠é“微信版本', '1', '2021-11-08 17:00:26', '1', '2021-11-08 17:00:26', b'0'); +INSERT INTO `system_dict_type` VALUES (127, 'æ”¯ä»˜æ¸ é“æ”¯ä»˜å®ç®—法类型', 'pay_channel_alipay_sign_type', 0, 'æ”¯ä»˜æ¸ é“æ”¯ä»˜å®ç®—法类型', '1', '2021-11-18 15:39:09', '1', '2021-11-18 15:39:09', b'0'); +INSERT INTO `system_dict_type` VALUES (128, 'æ”¯ä»˜æ¸ é“æ”¯ä»˜å®å…¬é’¥ç±»åž‹', 'pay_channel_alipay_mode', 0, 'æ”¯ä»˜æ¸ é“æ”¯ä»˜å®å…¬é’¥ç±»åž‹', '1', '2021-11-18 15:44:28', '1', '2021-11-18 15:44:28', b'0'); +INSERT INTO `system_dict_type` VALUES (129, '支付å®ç½‘关地å€', 'pay_channel_alipay_server_type', 0, '支付å®ç½‘关地å€', '1', '2021-11-18 16:58:55', '1', '2021-11-18 17:01:34', b'0'); +INSERT INTO `system_dict_type` VALUES (130, '支付渠é“ç¼–ç ç±»åž‹', 'pay_channel_code_type', 0, '支付渠é“的编ç ', '1', '2021-12-03 10:35:08', '1', '2021-12-03 10:35:08', b'0'); +INSERT INTO `system_dict_type` VALUES (131, '支付订å•回调状æ€', 'pay_order_notify_status', 0, '支付订å•回调状æ€', '1', '2021-12-03 10:53:29', '1', '2021-12-03 10:53:29', b'0'); +INSERT INTO `system_dict_type` VALUES (132, '支付订å•状æ€', 'pay_order_status', 0, '支付订å•状æ€', '1', '2021-12-03 11:17:50', '1', '2021-12-03 11:17:50', b'0'); +INSERT INTO `system_dict_type` VALUES (133, '支付订å•退款状æ€', 'pay_order_refund_status', 0, '支付订å•退款状æ€', '1', '2021-12-03 11:27:31', '1', '2021-12-03 11:27:31', b'0'); +INSERT INTO `system_dict_type` VALUES (134, '退款订å•状æ€', 'pay_refund_order_status', 0, '退款订å•状æ€', '1', '2021-12-10 16:42:50', '1', '2021-12-10 16:42:50', b'0'); +INSERT INTO `system_dict_type` VALUES (135, '退款订å•类别', 'pay_refund_order_type', 0, '退款订å•类别', '1', '2021-12-10 17:14:53', '1', '2021-12-10 17:14:53', b'0'); +INSERT INTO `system_dict_type` VALUES (138, 'æµç¨‹åˆ†ç±»', 'bpm_model_category', 0, 'æµç¨‹åˆ†ç±»', '1', '2022-01-02 08:40:45', '1', '2022-01-02 08:40:45', b'0'); +INSERT INTO `system_dict_type` VALUES (139, 'æµç¨‹å®žä¾‹çš„状æ€', 'bpm_process_instance_status', 0, 'æµç¨‹å®žä¾‹çš„状æ€', '1', '2022-01-07 23:46:42', '1', '2022-01-07 23:46:42', b'0'); +INSERT INTO `system_dict_type` VALUES (140, 'æµç¨‹å®žä¾‹çš„结果', 'bpm_process_instance_result', 0, 'æµç¨‹å®žä¾‹çš„结果', '1', '2022-01-07 23:48:10', '1', '2022-01-07 23:48:10', b'0'); +INSERT INTO `system_dict_type` VALUES (141, 'æµç¨‹çš„表å•类型', 'bpm_model_form_type', 0, 'æµç¨‹çš„表å•类型', '103', '2022-01-11 23:50:45', '103', '2022-01-11 23:50:45', b'0'); +INSERT INTO `system_dict_type` VALUES (142, '任务分é…规则的类型', 'bpm_task_assign_rule_type', 0, '任务分é…规则的类型', '103', '2022-01-12 23:21:04', '103', '2022-01-12 15:46:10', b'0'); +INSERT INTO `system_dict_type` VALUES (143, '任务分é…自定义脚本', 'bpm_task_assign_script', 0, '任务分é…自定义脚本', '103', '2022-01-15 00:10:35', '103', '2022-01-15 00:10:35', b'0'); COMMIT; -- ---------------------------- --- Table structure for sys_error_code +-- Table structure for system_error_code -- ---------------------------- -DROP TABLE IF EXISTS `sys_error_code`; -CREATE TABLE `sys_error_code` ( +DROP TABLE IF EXISTS `system_error_code`; +CREATE TABLE `system_error_code` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '错误ç ç¼–å·', `type` tinyint NOT NULL DEFAULT '0' COMMENT '错误ç ç±»åž‹', `application_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '应用å', @@ -1686,121 +2098,180 @@ CREATE TABLE `sys_error_code` ( `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=4696 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='错误ç è¡¨'; +) ENGINE=InnoDB AUTO_INCREMENT=4755 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='错误ç è¡¨'; -- ---------------------------- --- Records of sys_error_code +-- Records of system_error_code -- ---------------------------- BEGIN; -INSERT INTO `sys_error_code` VALUES (4594, 1, 'yudao-admin-server', 1001000001, '傿•°é…ç½®ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); -INSERT INTO `sys_error_code` VALUES (4595, 1, 'yudao-admin-server', 1001000002, '傿•°é…ç½® key é‡å¤', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); -INSERT INTO `sys_error_code` VALUES (4596, 1, 'yudao-admin-server', 1001000003, 'ä¸èƒ½åˆ é™¤ç±»åž‹ä¸ºç³»ç»Ÿå†…ç½®çš„å‚æ•°é…ç½®', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); -INSERT INTO `sys_error_code` VALUES (4597, 1, 'yudao-admin-server', 1001000004, 'ä¸å…è®¸èŽ·å–æ•感é…置到å‰ç«¯', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); -INSERT INTO `sys_error_code` VALUES (4598, 1, 'yudao-admin-server', 1001001000, '定时任务ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); -INSERT INTO `sys_error_code` VALUES (4599, 1, 'yudao-admin-server', 1001001001, '定时任务的处ç†å™¨å·²ç»å­˜åœ¨', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); -INSERT INTO `sys_error_code` VALUES (4600, 1, 'yudao-admin-server', 1001001002, 'åªå…è®¸ä¿®æ”¹ä¸ºå¼€å¯æˆ–者关闭状æ€', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); -INSERT INTO `sys_error_code` VALUES (4601, 1, 'yudao-admin-server', 1001001003, '定时任务已ç»å¤„于该状æ€ï¼Œæ— éœ€ä¿®æ”¹', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); -INSERT INTO `sys_error_code` VALUES (4602, 1, 'yudao-admin-server', 1001001004, 'åªæœ‰å¼€å¯çжæ€çš„任务,æ‰å¯ä»¥ä¿®æ”¹', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); -INSERT INTO `sys_error_code` VALUES (4603, 1, 'yudao-admin-server', 1001001005, 'CRON 表达å¼ä¸æ­£ç¡®', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); -INSERT INTO `sys_error_code` VALUES (4604, 1, 'yudao-admin-server', 1001002000, 'API 错误日志ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); -INSERT INTO `sys_error_code` VALUES (4605, 1, 'yudao-admin-server', 1001002001, 'API 错误日志已处ç†', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); -INSERT INTO `sys_error_code` VALUES (4606, 1, 'yudao-admin-server', 1002000000, '登录失败,账å·å¯†ç ä¸æ­£ç¡®', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); -INSERT INTO `sys_error_code` VALUES (4607, 1, 'yudao-admin-server', 1002000001, '登录失败,账å·è¢«ç¦ç”¨', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); -INSERT INTO `sys_error_code` VALUES (4608, 1, 'yudao-admin-server', 1002000002, '登录失败', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); -INSERT INTO `sys_error_code` VALUES (4609, 1, 'yudao-admin-server', 1002000003, '验è¯ç ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); -INSERT INTO `sys_error_code` VALUES (4610, 1, 'yudao-admin-server', 1002000004, '验è¯ç ä¸æ­£ç¡®', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); -INSERT INTO `sys_error_code` VALUES (4611, 1, 'yudao-admin-server', 1002000005, '未绑定账å·ï¼Œéœ€è¦è¿›è¡Œç»‘定', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); -INSERT INTO `sys_error_code` VALUES (4612, 1, 'yudao-admin-server', 1002000006, 'Token å·²ç»è¿‡æœŸ', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); -INSERT INTO `sys_error_code` VALUES (4613, 1, 'yudao-admin-server', 1002002000, 'å·²ç»å­˜åœ¨è¯¥åå­—çš„èœå•', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); -INSERT INTO `sys_error_code` VALUES (4614, 1, 'yudao-admin-server', 1002002001, '父èœå•ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); -INSERT INTO `sys_error_code` VALUES (4615, 1, 'yudao-admin-server', 1002002002, 'ä¸èƒ½è®¾ç½®è‡ªå·±ä¸ºçˆ¶èœå•', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); -INSERT INTO `sys_error_code` VALUES (4616, 1, 'yudao-admin-server', 1002002003, 'èœå•ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4617, 1, 'yudao-admin-server', 1002002004, '存在å­èœå•,无法删除', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4618, 1, 'yudao-admin-server', 1002002005, '父èœå•的类型必须是目录或者èœå•', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4619, 1, 'yudao-admin-server', 1002003000, '角色ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4620, 1, 'yudao-admin-server', 1002003001, 'å·²ç»å­˜åœ¨å为ã€{}】的角色', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4621, 1, 'yudao-admin-server', 1002003002, 'å·²ç»å­˜åœ¨ç¼–ç ä¸ºã€{}】的角色', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4622, 1, 'yudao-admin-server', 1002003004, 'ä¸èƒ½æ“作类型为系统内置的角色', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4623, 1, 'yudao-admin-server', 1002003004, 'å字为ã€{}】的角色已被ç¦ç”¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4624, 1, 'yudao-admin-server', 1002004000, '用户账å·å·²ç»å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4625, 1, 'yudao-admin-server', 1002004001, '手机å·å·²ç»å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4626, 1, 'yudao-admin-server', 1002004002, '邮箱已ç»å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4627, 1, 'yudao-admin-server', 1002004003, '用户ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4628, 1, 'yudao-admin-server', 1002004004, '导入用户数æ®ä¸èƒ½ä¸ºç©ºï¼', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4629, 1, 'yudao-admin-server', 1002004005, 'ç”¨æˆ·å¯†ç æ ¡éªŒå¤±è´¥', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4630, 1, 'yudao-admin-server', 1002003004, 'å字为ã€{}】的用户已被ç¦ç”¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4631, 1, 'yudao-admin-server', 1002004001, 'å·²ç»å­˜åœ¨è¯¥å字的部门', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4632, 1, 'yudao-admin-server', 1002004002, '父级部门ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4633, 1, 'yudao-admin-server', 1002004003, '当å‰éƒ¨é—¨ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4634, 1, 'yudao-admin-server', 1002004004, '存在å­éƒ¨é—¨ï¼Œæ— æ³•删除', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4635, 1, 'yudao-admin-server', 1002004005, 'ä¸èƒ½è®¾ç½®è‡ªå·±ä¸ºçˆ¶éƒ¨é—¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4636, 1, 'yudao-admin-server', 1002004006, '部门中存在员工,无法删除', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4637, 1, 'yudao-admin-server', 1002004007, '部门ä¸å¤„于开å¯çжæ€ï¼Œä¸å…许选择', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4638, 1, 'yudao-admin-server', 1002004008, 'ä¸èƒ½è®¾ç½®è‡ªå·±çš„å­éƒ¨é—¨ä¸ºçˆ¶éƒ¨é—¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4639, 1, 'yudao-admin-server', 1002005001, '当å‰å²—ä½ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4640, 1, 'yudao-admin-server', 1002005002, 'å²—ä½({}) ä¸å¤„于开å¯çжæ€ï¼Œä¸å…许选择', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4641, 1, 'yudao-admin-server', 1002005001, 'å·²ç»å­˜åœ¨è¯¥å字的岗ä½', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4642, 1, 'yudao-admin-server', 1002005001, 'å·²ç»å­˜åœ¨è¯¥æ ‡è¯†çš„å²—ä½', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4643, 1, 'yudao-admin-server', 1002006001, '当å‰å­—典类型ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4644, 1, 'yudao-admin-server', 1002006002, '字典类型ä¸å¤„于开å¯çжæ€ï¼Œä¸å…许选择', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4645, 1, 'yudao-admin-server', 1002006003, 'å·²ç»å­˜åœ¨è¯¥å字的字典类型', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4646, 1, 'yudao-admin-server', 1002006004, 'å·²ç»å­˜åœ¨è¯¥ç±»åž‹çš„字典类型', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4647, 1, 'yudao-admin-server', 1002006004, '无法删除,该字典类型还有字典数æ®', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4648, 1, 'yudao-admin-server', 1002007001, '当å‰å­—典数æ®ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4649, 1, 'yudao-admin-server', 1002007002, '字典数æ®({})ä¸å¤„于开å¯çжæ€ï¼Œä¸å…许选择', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4650, 1, 'yudao-admin-server', 1002007003, 'å·²ç»å­˜åœ¨è¯¥å€¼çš„字典数æ®', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4651, 1, 'yudao-admin-server', 1002008001, '当å‰é€šçŸ¥å…¬å‘Šä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4652, 1, 'yudao-admin-server', 1002009001, '文件路径已ç»å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4653, 1, 'yudao-admin-server', 1002009002, '文件上传失败', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4654, 1, 'yudao-admin-server', 1002009003, '文件为空', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4655, 1, 'yudao-admin-server', 1002011000, '短信渠é“ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4656, 1, 'yudao-admin-server', 1002011001, '短信渠é“ä¸å¤„于开å¯çжæ€ï¼Œä¸å…许选择', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4657, 1, 'yudao-admin-server', 1002011002, '无法删除,该短信渠é“还有短信模æ¿', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4658, 1, 'yudao-admin-server', 1002011000, '短信模æ¿ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4659, 1, 'yudao-admin-server', 1002011001, 'å·²ç»å­˜åœ¨ç¼–ç ä¸ºã€{}】的短信模æ¿', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4660, 1, 'yudao-admin-server', 1002012000, '租户ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4661, 1, 'yudao-admin-server', 1002013000, '错误ç ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4662, 1, 'yudao-admin-server', 1002013001, 'å·²ç»å­˜åœ¨ç¼–ç ä¸ºã€{}】的错误ç ', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4663, 1, 'yudao-admin-server', 1009000002, '获å–高亮æµç¨‹å›¾å¼‚常', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4664, 1, 'yudao-admin-server', 1009001001, '请å‡ç”³è¯·ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4665, 1, 'yudao-admin-server', 1009001002, '项目ç»ç†å²—使œªè®¾ç½®', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4666, 1, 'yudao-admin-server', 1009001009, '部门的项目ç»ç†ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4667, 1, 'yudao-admin-server', 1009001004, '部门ç»ç†å²—使œªè®¾ç½®', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4668, 1, 'yudao-admin-server', 1009001005, '部门的部门ç»ç†ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4669, 1, 'yudao-admin-server', 1009001006, 'HR岗使œªè®¾ç½®', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4670, 1, 'yudao-admin-server', 1009001007, '请å‡å¤©æ•°å¿…é¡»>=1', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4671, 1, 'yudao-admin-server', 1009002000, 'å·²ç»å­˜åœ¨æµç¨‹æ ‡è¯†ä¸ºã€{}】的æµç¨‹', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4672, 1, 'yudao-admin-server', 1009002001, 'æµç¨‹æ¨¡åž‹ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4673, 1, 'yudao-admin-server', 1009002002, 'æµç¨‹æ ‡è¯†æ ¼å¼ä¸æ­£ç¡®ï¼Œéœ€è¦ä»¥å­—æ¯æˆ–ä¸‹åˆ’çº¿å¼€å¤´ï¼ŒåŽæŽ¥ä»»æ„å­—æ¯ã€æ•°å­—ã€ä¸­åˆ’线ã€ä¸‹åˆ’线ã€å¥ç‚¹ï¼', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4674, 1, 'yudao-admin-server', 1009002003, '部署æµç¨‹å¤±è´¥ï¼ŒåŽŸå› ï¼šæµç¨‹è¡¨å•未é…置,请点击ã€ä¿®æ”¹æµç¨‹ã€‘按钮进行é…ç½®', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4675, 1, 'yudao-admin-server', 1009002004, '部署æµç¨‹å¤±è´¥ï¼ŒåŽŸå› ï¼šç”¨æˆ·ä»»åŠ¡({})未é…置分é…规则,请点击ã€ä¿®æ”¹æµç¨‹ã€‘按钮进行é…ç½®', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4676, 1, 'yudao-admin-server', 1009003005, 'æµç¨‹å®šä¹‰éƒ¨ç½²å¤±è´¥ï¼ŒåŽŸå› ï¼šä¿¡æ¯æœªå‘生å˜åŒ–', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4677, 1, 'yudao-admin-server', 1009003000, 'æµç¨‹å®šä¹‰çš„æ ‡è¯†æœŸæœ›æ˜¯({})ï¼Œå½“å‰æ˜¯({}),请修改 BPMN æµç¨‹å›¾', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4678, 1, 'yudao-admin-server', 1009003001, 'æµç¨‹å®šä¹‰çš„å字期望是({})ï¼Œå½“å‰æ˜¯({}),请修改 BPMN æµç¨‹å›¾', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4679, 1, 'yudao-admin-server', 1009003002, 'æµç¨‹å®šä¹‰ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4680, 1, 'yudao-admin-server', 1009003003, 'æµç¨‹å®šä¹‰å¤„于挂起状æ€', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4681, 1, 'yudao-admin-server', 1009003004, 'æµç¨‹å®šä¹‰çš„æ¨¡åž‹ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4682, 1, 'yudao-admin-server', 1009004000, 'æµç¨‹å®žä¾‹ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4683, 1, 'yudao-admin-server', 1009004001, 'æµç¨‹å–消失败,æµç¨‹ä¸å¤„于è¿è¡Œä¸­', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4684, 1, 'yudao-admin-server', 1009004002, 'æµç¨‹å–消失败,该æµç¨‹ä¸æ˜¯ä½ å‘èµ·çš„', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4685, 1, 'yudao-admin-server', 1009004000, '审批任务失败,原因:该任务ä¸å¤„于未审批', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4686, 1, 'yudao-admin-server', 1009004001, 'å®¡æ‰¹ä»»åŠ¡å¤±è´¥ï¼ŒåŽŸå› ï¼šè¯¥ä»»åŠ¡çš„å®¡æ‰¹äººä¸æ˜¯ä½ ', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4687, 1, 'yudao-admin-server', 1009006000, 'æµç¨‹({}) 的任务({}) å·²ç»å­˜åœ¨åˆ†é…规则', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4688, 1, 'yudao-admin-server', 1009006001, 'æµç¨‹ä»»åŠ¡åˆ†é…规则ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4689, 1, 'yudao-admin-server', 1009006002, 'åªæœ‰æµç¨‹æ¨¡åž‹çš„任务分é…规则,æ‰å…许被修改', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4690, 1, 'yudao-admin-server', 1009006003, 'æ“作失败,原因:找ä¸åˆ°ä»»åŠ¡çš„å®¡æ‰¹äººï¼', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4691, 1, 'yudao-admin-server', 1009006004, 'æ“作失败,原因:任务分é…脚本({}) ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4692, 1, 'yudao-admin-server', 1009010000, '动æ€è¡¨å•ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4693, 1, 'yudao-admin-server', 1009010000, '表å•项({}) å’Œ ({}) 使用了相åŒçš„字段å({})', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4694, 1, 'yudao-admin-server', 1009011000, '用户组ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); -INSERT INTO `sys_error_code` VALUES (4695, 1, 'yudao-admin-server', 1009011001, 'å字为ã€{}】的用户组已被ç¦ç”¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4594, 1, 'yudao-admin-server', 1001000001, '傿•°é…ç½®ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); +INSERT INTO `system_error_code` VALUES (4595, 1, 'yudao-admin-server', 1001000002, '傿•°é…ç½® key é‡å¤', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); +INSERT INTO `system_error_code` VALUES (4596, 1, 'yudao-admin-server', 1001000003, 'ä¸èƒ½åˆ é™¤ç±»åž‹ä¸ºç³»ç»Ÿå†…ç½®çš„å‚æ•°é…ç½®', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); +INSERT INTO `system_error_code` VALUES (4597, 1, 'yudao-admin-server', 1001000004, 'ä¸å…è®¸èŽ·å–æ•感é…置到å‰ç«¯', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); +INSERT INTO `system_error_code` VALUES (4598, 1, 'yudao-admin-server', 1001001000, '定时任务ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); +INSERT INTO `system_error_code` VALUES (4599, 1, 'yudao-admin-server', 1001001001, '定时任务的处ç†å™¨å·²ç»å­˜åœ¨', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); +INSERT INTO `system_error_code` VALUES (4600, 1, 'yudao-admin-server', 1001001002, 'åªå…è®¸ä¿®æ”¹ä¸ºå¼€å¯æˆ–者关闭状æ€', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); +INSERT INTO `system_error_code` VALUES (4601, 1, 'yudao-admin-server', 1001001003, '定时任务已ç»å¤„于该状æ€ï¼Œæ— éœ€ä¿®æ”¹', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); +INSERT INTO `system_error_code` VALUES (4602, 1, 'yudao-admin-server', 1001001004, 'åªæœ‰å¼€å¯çжæ€çš„任务,æ‰å¯ä»¥ä¿®æ”¹', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); +INSERT INTO `system_error_code` VALUES (4603, 1, 'yudao-admin-server', 1001001005, 'CRON 表达å¼ä¸æ­£ç¡®', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); +INSERT INTO `system_error_code` VALUES (4604, 1, 'yudao-admin-server', 1001002000, 'API 错误日志ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); +INSERT INTO `system_error_code` VALUES (4605, 1, 'yudao-admin-server', 1001002001, 'API 错误日志已处ç†', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); +INSERT INTO `system_error_code` VALUES (4606, 1, 'yudao-admin-server', 1002000000, '登录失败,账å·å¯†ç ä¸æ­£ç¡®', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); +INSERT INTO `system_error_code` VALUES (4607, 1, 'yudao-admin-server', 1002000001, '登录失败,账å·è¢«ç¦ç”¨', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); +INSERT INTO `system_error_code` VALUES (4608, 1, 'yudao-admin-server', 1002000002, '登录失败', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); +INSERT INTO `system_error_code` VALUES (4609, 1, 'yudao-admin-server', 1002000003, '验è¯ç ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); +INSERT INTO `system_error_code` VALUES (4610, 1, 'yudao-admin-server', 1002000004, '验è¯ç ä¸æ­£ç¡®', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); +INSERT INTO `system_error_code` VALUES (4611, 1, 'yudao-admin-server', 1002000005, '未绑定账å·ï¼Œéœ€è¦è¿›è¡Œç»‘定', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); +INSERT INTO `system_error_code` VALUES (4612, 1, 'yudao-admin-server', 1002000006, 'Token å·²ç»è¿‡æœŸ', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); +INSERT INTO `system_error_code` VALUES (4613, 1, 'yudao-admin-server', 1002002000, 'å·²ç»å­˜åœ¨è¯¥åå­—çš„èœå•', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); +INSERT INTO `system_error_code` VALUES (4614, 1, 'yudao-admin-server', 1002002001, '父èœå•ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); +INSERT INTO `system_error_code` VALUES (4615, 1, 'yudao-admin-server', 1002002002, 'ä¸èƒ½è®¾ç½®è‡ªå·±ä¸ºçˆ¶èœå•', '', NULL, '2022-01-23 01:38:31', NULL, '2022-01-23 01:38:31', b'0'); +INSERT INTO `system_error_code` VALUES (4616, 1, 'yudao-admin-server', 1002002003, 'èœå•ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4617, 1, 'yudao-admin-server', 1002002004, '存在å­èœå•,无法删除', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4618, 1, 'yudao-admin-server', 1002002005, '父èœå•的类型必须是目录或者èœå•', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4619, 1, 'yudao-admin-server', 1002003000, '角色ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4620, 1, 'yudao-admin-server', 1002003001, 'å·²ç»å­˜åœ¨å为ã€{}】的角色', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4621, 1, 'yudao-admin-server', 1002003002, 'å·²ç»å­˜åœ¨ç¼–ç ä¸ºã€{}】的角色', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4622, 1, 'yudao-admin-server', 1002003004, 'å字为ã€{}】的角色已被ç¦ç”¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-02-02 01:20:38', b'0'); +INSERT INTO `system_error_code` VALUES (4623, 1, 'yudao-admin-server', 1002003004, 'å字为ã€{}】的角色已被ç¦ç”¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4624, 1, 'yudao-admin-server', 1002004000, '用户账å·å·²ç»å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4625, 1, 'yudao-admin-server', 1002004001, '手机å·å·²ç»å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-02-02 01:20:38', b'0'); +INSERT INTO `system_error_code` VALUES (4626, 1, 'yudao-admin-server', 1002004002, '邮箱已ç»å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-02-02 01:20:38', b'0'); +INSERT INTO `system_error_code` VALUES (4627, 1, 'yudao-admin-server', 1002004003, '用户ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-02-02 01:20:38', b'0'); +INSERT INTO `system_error_code` VALUES (4628, 1, 'yudao-admin-server', 1002004004, '导入用户数æ®ä¸èƒ½ä¸ºç©ºï¼', '', NULL, '2022-01-23 01:38:32', NULL, '2022-02-02 01:20:38', b'0'); +INSERT INTO `system_error_code` VALUES (4629, 1, 'yudao-admin-server', 1002004005, 'ç”¨æˆ·å¯†ç æ ¡éªŒå¤±è´¥', '', NULL, '2022-01-23 01:38:32', NULL, '2022-02-02 01:20:38', b'0'); +INSERT INTO `system_error_code` VALUES (4630, 1, 'yudao-admin-server', 1002003004, 'å字为ã€{}】的用户已被ç¦ç”¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4631, 1, 'yudao-admin-server', 1002004001, 'å·²ç»å­˜åœ¨è¯¥å字的部门', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4632, 1, 'yudao-admin-server', 1002004002, '父级部门ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4633, 1, 'yudao-admin-server', 1002004003, '当å‰éƒ¨é—¨ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4634, 1, 'yudao-admin-server', 1002004004, '存在å­éƒ¨é—¨ï¼Œæ— æ³•删除', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4635, 1, 'yudao-admin-server', 1002004005, 'ä¸èƒ½è®¾ç½®è‡ªå·±ä¸ºçˆ¶éƒ¨é—¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4636, 1, 'yudao-admin-server', 1002004006, '部门中存在员工,无法删除', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4637, 1, 'yudao-admin-server', 1002004007, '部门ä¸å¤„于开å¯çжæ€ï¼Œä¸å…许选择', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4638, 1, 'yudao-admin-server', 1002004008, 'ä¸èƒ½è®¾ç½®è‡ªå·±çš„å­éƒ¨é—¨ä¸ºçˆ¶éƒ¨é—¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4639, 1, 'yudao-admin-server', 1002005001, 'å·²ç»å­˜åœ¨è¯¥å字的岗ä½', '', NULL, '2022-01-23 01:38:32', NULL, '2022-02-02 01:20:38', b'0'); +INSERT INTO `system_error_code` VALUES (4640, 1, 'yudao-admin-server', 1002005002, 'å²—ä½({}) ä¸å¤„于开å¯çжæ€ï¼Œä¸å…许选择', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4641, 1, 'yudao-admin-server', 1002005001, 'å·²ç»å­˜åœ¨è¯¥å字的岗ä½', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4642, 1, 'yudao-admin-server', 1002005001, 'å·²ç»å­˜åœ¨è¯¥æ ‡è¯†çš„å²—ä½', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4643, 1, 'yudao-admin-server', 1002006001, '当å‰å­—典类型ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4644, 1, 'yudao-admin-server', 1002006002, '字典类型ä¸å¤„于开å¯çжæ€ï¼Œä¸å…许选择', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4645, 1, 'yudao-admin-server', 1002006003, 'å·²ç»å­˜åœ¨è¯¥å字的字典类型', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4646, 1, 'yudao-admin-server', 1002006004, 'å·²ç»å­˜åœ¨è¯¥ç±»åž‹çš„字典类型', '', NULL, '2022-01-23 01:38:32', NULL, '2022-02-02 01:20:38', b'0'); +INSERT INTO `system_error_code` VALUES (4647, 1, 'yudao-admin-server', 1002006004, '无法删除,该字典类型还有字典数æ®', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4648, 1, 'yudao-admin-server', 1002007001, '当å‰å­—典数æ®ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4649, 1, 'yudao-admin-server', 1002007002, '字典数æ®({})ä¸å¤„于开å¯çжæ€ï¼Œä¸å…许选择', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4650, 1, 'yudao-admin-server', 1002007003, 'å·²ç»å­˜åœ¨è¯¥å€¼çš„字典数æ®', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4651, 1, 'yudao-admin-server', 1002008001, '当å‰é€šçŸ¥å…¬å‘Šä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4652, 1, 'yudao-admin-server', 1002009001, '文件路径已ç»å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4653, 1, 'yudao-admin-server', 1002009002, '文件上传失败', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4654, 1, 'yudao-admin-server', 1002009003, '文件为空', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4655, 1, 'yudao-admin-server', 1002011000, '短信渠é“ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-02-02 01:20:38', b'0'); +INSERT INTO `system_error_code` VALUES (4656, 1, 'yudao-admin-server', 1002011001, '短信渠é“ä¸å¤„于开å¯çжæ€ï¼Œä¸å…许选择', '', NULL, '2022-01-23 01:38:32', NULL, '2022-02-02 01:20:38', b'0'); +INSERT INTO `system_error_code` VALUES (4657, 1, 'yudao-admin-server', 1002011002, '无法删除,该短信渠é“还有短信模æ¿', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4658, 1, 'yudao-admin-server', 1002011000, '短信模æ¿ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4659, 1, 'yudao-admin-server', 1002011001, 'å·²ç»å­˜åœ¨ç¼–ç ä¸ºã€{}】的短信模æ¿', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4660, 1, 'yudao-admin-server', 1002012000, '手机å·ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4661, 1, 'yudao-admin-server', 1002013000, '验è¯ç ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4662, 1, 'yudao-admin-server', 1002013001, '验è¯ç å·²è¿‡æœŸ', '', NULL, '2022-01-23 01:38:32', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4663, 1, 'yudao-admin-server', 1009000002, '获å–高亮æµç¨‹å›¾å¼‚常', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4664, 1, 'yudao-admin-server', 1009001001, '请å‡ç”³è¯·ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4665, 1, 'yudao-admin-server', 1009001002, '项目ç»ç†å²—使œªè®¾ç½®', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4666, 1, 'yudao-admin-server', 1009001009, '部门的项目ç»ç†ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4667, 1, 'yudao-admin-server', 1009001004, '部门ç»ç†å²—使œªè®¾ç½®', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4668, 1, 'yudao-admin-server', 1009001005, '部门的部门ç»ç†ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4669, 1, 'yudao-admin-server', 1009001006, 'HR岗使œªè®¾ç½®', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4670, 1, 'yudao-admin-server', 1009001007, '请å‡å¤©æ•°å¿…é¡»>=1', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4671, 1, 'yudao-admin-server', 1009002000, 'å·²ç»å­˜åœ¨æµç¨‹æ ‡è¯†ä¸ºã€{}】的æµç¨‹', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4672, 1, 'yudao-admin-server', 1009002001, 'æµç¨‹æ¨¡åž‹ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4673, 1, 'yudao-admin-server', 1009002002, 'æµç¨‹æ ‡è¯†æ ¼å¼ä¸æ­£ç¡®ï¼Œéœ€è¦ä»¥å­—æ¯æˆ–ä¸‹åˆ’çº¿å¼€å¤´ï¼ŒåŽæŽ¥ä»»æ„å­—æ¯ã€æ•°å­—ã€ä¸­åˆ’线ã€ä¸‹åˆ’线ã€å¥ç‚¹ï¼', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4674, 1, 'yudao-admin-server', 1009002003, '部署æµç¨‹å¤±è´¥ï¼ŒåŽŸå› ï¼šæµç¨‹è¡¨å•未é…置,请点击ã€ä¿®æ”¹æµç¨‹ã€‘按钮进行é…ç½®', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4675, 1, 'yudao-admin-server', 1009002004, '部署æµç¨‹å¤±è´¥ï¼ŒåŽŸå› ï¼šç”¨æˆ·ä»»åŠ¡({})未é…置分é…规则,请点击ã€ä¿®æ”¹æµç¨‹ã€‘按钮进行é…ç½®', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4676, 1, 'yudao-admin-server', 1009003005, 'æµç¨‹å®šä¹‰éƒ¨ç½²å¤±è´¥ï¼ŒåŽŸå› ï¼šä¿¡æ¯æœªå‘生å˜åŒ–', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4677, 1, 'yudao-admin-server', 1009003000, 'æµç¨‹å®šä¹‰çš„æ ‡è¯†æœŸæœ›æ˜¯({})ï¼Œå½“å‰æ˜¯({}),请修改 BPMN æµç¨‹å›¾', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4678, 1, 'yudao-admin-server', 1009003001, 'æµç¨‹å®šä¹‰çš„å字期望是({})ï¼Œå½“å‰æ˜¯({}),请修改 BPMN æµç¨‹å›¾', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4679, 1, 'yudao-admin-server', 1009003002, 'æµç¨‹å®šä¹‰ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4680, 1, 'yudao-admin-server', 1009003003, 'æµç¨‹å®šä¹‰å¤„于挂起状æ€', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4681, 1, 'yudao-admin-server', 1009003004, 'æµç¨‹å®šä¹‰çš„æ¨¡åž‹ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4682, 1, 'yudao-admin-server', 1009004000, 'æµç¨‹å®žä¾‹ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-02-02 01:20:38', b'0'); +INSERT INTO `system_error_code` VALUES (4683, 1, 'yudao-admin-server', 1009004001, 'æµç¨‹å–消失败,æµç¨‹ä¸å¤„于è¿è¡Œä¸­', '', NULL, '2022-01-23 01:38:32', NULL, '2022-02-02 01:20:38', b'0'); +INSERT INTO `system_error_code` VALUES (4684, 1, 'yudao-admin-server', 1009004002, 'æµç¨‹å–消失败,该æµç¨‹ä¸æ˜¯ä½ å‘èµ·çš„', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4685, 1, 'yudao-admin-server', 1009004000, '审批任务失败,原因:该任务ä¸å¤„于未审批', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4686, 1, 'yudao-admin-server', 1009004001, 'å®¡æ‰¹ä»»åŠ¡å¤±è´¥ï¼ŒåŽŸå› ï¼šè¯¥ä»»åŠ¡çš„å®¡æ‰¹äººä¸æ˜¯ä½ ', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4687, 1, 'yudao-admin-server', 1009006000, 'æµç¨‹({}) 的任务({}) å·²ç»å­˜åœ¨åˆ†é…规则', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4688, 1, 'yudao-admin-server', 1009006001, 'æµç¨‹ä»»åŠ¡åˆ†é…规则ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4689, 1, 'yudao-admin-server', 1009006002, 'åªæœ‰æµç¨‹æ¨¡åž‹çš„任务分é…规则,æ‰å…许被修改', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4690, 1, 'yudao-admin-server', 1009006003, 'æ“作失败,原因:找ä¸åˆ°ä»»åŠ¡çš„å®¡æ‰¹äººï¼', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4691, 1, 'yudao-admin-server', 1009006004, 'æ“作失败,原因:任务分é…脚本({}) ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4692, 1, 'yudao-admin-server', 1009010000, '动æ€è¡¨å•ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-02-02 01:20:38', b'0'); +INSERT INTO `system_error_code` VALUES (4693, 1, 'yudao-admin-server', 1009010000, '表å•项({}) å’Œ ({}) 使用了相åŒçš„字段å({})', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4694, 1, 'yudao-admin-server', 1009011000, '用户组ä¸å­˜åœ¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4695, 1, 'yudao-admin-server', 1009011001, 'å字为ã€{}】的用户组已被ç¦ç”¨', '', NULL, '2022-01-23 01:38:32', NULL, '2022-01-23 01:38:32', b'0'); +INSERT INTO `system_error_code` VALUES (4696, 1, 'yudao-admin-server', 1001003000, '文件路径已存在', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4697, 1, 'yudao-admin-server', 1001003001, '文件ä¸å­˜åœ¨', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4698, 1, 'yudao-admin-server', 1004001000, '用户ä¸å­˜åœ¨', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4699, 1, 'yudao-admin-server', 1004001001, 'å¯†ç æ ¡éªŒå¤±è´¥', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4700, 1, 'yudao-admin-server', 1004002000, '文件为空', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4701, 1, 'yudao-admin-server', 1004003000, '登录失败,账å·å¯†ç ä¸æ­£ç¡®', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4702, 1, 'yudao-admin-server', 1004003001, '登录失败,账å·è¢«ç¦ç”¨', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4703, 1, 'yudao-admin-server', 1004003002, '登录失败', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4704, 1, 'yudao-admin-server', 1004003004, 'Token å·²ç»è¿‡æœŸ', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4705, 1, 'yudao-admin-server', 1004003005, '未绑定账å·ï¼Œéœ€è¦è¿›è¡Œç»‘定', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4706, 1, 'yudao-admin-server', 1007000000, 'App ä¸å­˜åœ¨', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4707, 1, 'yudao-admin-server', 1007000002, 'App å·²ç»è¢«ç¦ç”¨', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4708, 1, 'yudao-admin-server', 1007000003, '支付应用存在交易中的订å•,无法删除', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4709, 1, 'yudao-admin-server', 1007001000, '支付渠é“çš„é…ç½®ä¸å­˜åœ¨', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4710, 1, 'yudao-admin-server', 1007001001, '支付渠é“å·²ç»ç¦ç”¨', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4711, 1, 'yudao-admin-server', 1007001002, '支付渠é“的客户端ä¸å­˜åœ¨', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4712, 1, 'yudao-admin-server', 1007001003, '支付渠é“ä¸å­˜åœ¨', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4713, 1, 'yudao-admin-server', 1007001005, '已存在相åŒçš„æ¸ é“', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4714, 1, 'yudao-admin-server', 1007001006, '微信渠é“v2版本中商户密钥ä¸å¯ä¸ºç©º', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4715, 1, 'yudao-admin-server', 1007001007, '微信渠é“v3版本apiclient_key.pemä¸å¯ä¸ºç©º', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4716, 1, 'yudao-admin-server', 1007001008, '微信渠é“v3版本中apiclient_cert.pemä¸å¯ä¸ºç©º', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4717, 1, 'yudao-admin-server', 1007001009, '渠é“通知校验失败', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4718, 1, 'yudao-admin-server', 1007002000, '支付订å•ä¸å­˜åœ¨', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4719, 1, 'yudao-admin-server', 1007002001, '支付订å•ä¸å¤„于待支付', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4720, 1, 'yudao-admin-server', 1007002002, '支付订å•ä¸å¤„于已支付', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4721, 1, 'yudao-admin-server', 1007002003, '支付订å•ç”¨æˆ·ä¸æ­£ç¡®', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4722, 1, 'yudao-admin-server', 1007003000, '支付交易拓展å•ä¸å­˜åœ¨', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4723, 1, 'yudao-admin-server', 1007003001, '支付交易拓展å•ä¸å¤„于待支付', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4724, 1, 'yudao-admin-server', 1007003002, '支付订å•ä¸å¤„于已支付', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4725, 1, 'yudao-admin-server', 1007006000, '退款金é¢è¶…过订å•å¯é€€æ¬¾é‡‘é¢', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4726, 1, 'yudao-admin-server', 1007006001, '订å•å·²ç»å…¨é¢é€€æ¬¾', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4727, 1, 'yudao-admin-server', 1007006002, '该订å•的渠é“订å•为空', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4728, 1, 'yudao-admin-server', 1007006003, 'å·²ç»é€€æ¬¾æˆåŠŸ', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4729, 1, 'yudao-admin-server', 1007006004, '支付退款å•ä¸å­˜åœ¨', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4730, 1, 'yudao-admin-server', 1007004000, '支付商户信æ¯ä¸å­˜åœ¨', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4731, 1, 'yudao-admin-server', 1007004001, '支付商户存在支付应用,无法删除', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4732, 1, 'yudao-admin-server', 1002012001, '模æ¿å‚æ•°({})缺失', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4733, 1, 'yudao-admin-server', 1002012002, '短信模æ¿ä¸å­˜åœ¨', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4734, 1, 'yudao-admin-server', 1002013002, '验è¯ç å·²ä½¿ç”¨', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4735, 1, 'yudao-admin-server', 1002013004, '验è¯ç ä¸æ­£ç¡®', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4736, 1, 'yudao-admin-server', 1002013005, 'è¶…è¿‡æ¯æ—¥çŸ­ä¿¡å‘逿•°é‡', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4737, 1, 'yudao-admin-server', 1002013006, '短信å‘é€è¿‡äºŽé¢‘率', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4738, 1, 'yudao-admin-server', 1002013007, '手机å·å·²è¢«ä½¿ç”¨', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4739, 1, 'yudao-admin-server', 1002013008, '验è¯ç æœªè¢«ä½¿ç”¨', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4740, 1, 'yudao-admin-server', 1002014000, '租户ä¸å­˜åœ¨', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4741, 1, 'yudao-admin-server', 1002015000, '错误ç ä¸å­˜åœ¨', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:20:38', b'0'); +INSERT INTO `system_error_code` VALUES (4742, 1, 'yudao-admin-server', 1002015001, '社交解绑失败,éžå½“å‰ç”¨æˆ·ç»‘定', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:20:38', b'0'); +INSERT INTO `system_error_code` VALUES (4743, 1, 'yudao-admin-server', 1002015000, '社交授æƒå¤±è´¥ï¼ŒåŽŸå› æ˜¯ï¼š{}', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4744, 1, 'yudao-admin-server', 1002015001, '社交解绑失败,éžå½“å‰ç”¨æˆ·ç»‘定', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4745, 1, 'yudao-admin-server', 1002015001, '社交授æƒå¤±è´¥ï¼Œæ‰¾ä¸åˆ°å¯¹åº”的用户', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4746, 1, 'yudao-admin-server', 1003000000, '测试示例ä¸å­˜åœ¨', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4747, 1, 'yudao-admin-server', 1003001000, '表定义已ç»å­˜åœ¨', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4748, 1, 'yudao-admin-server', 1003001001, '导入的表ä¸å­˜åœ¨', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4749, 1, 'yudao-admin-server', 1003001002, '导入的字段ä¸å­˜åœ¨', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4750, 1, 'yudao-admin-server', 1003001003, 'è§£æž SQL 失败,请检查', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4751, 1, 'yudao-admin-server', 1003001004, '表定义ä¸å­˜åœ¨', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4752, 1, 'yudao-admin-server', 1003001005, '字段义ä¸å­˜åœ¨', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4753, 1, 'yudao-admin-server', 1003001006, 'åŒæ­¥çš„字段ä¸å­˜åœ¨', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); +INSERT INTO `system_error_code` VALUES (4754, 1, 'yudao-admin-server', 1003001007, 'åŒæ­¥å¤±è´¥ï¼Œä¸å­˜åœ¨æ”¹å˜', '', NULL, '2022-02-02 01:11:46', NULL, '2022-02-02 01:11:46', b'0'); COMMIT; -- ---------------------------- --- Table structure for sys_login_log +-- Table structure for system_login_log -- ---------------------------- -DROP TABLE IF EXISTS `sys_login_log`; -CREATE TABLE `sys_login_log` ( +DROP TABLE IF EXISTS `system_login_log`; +CREATE TABLE `system_login_log` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '访问ID', `log_type` bigint NOT NULL COMMENT '日志类型', `trace_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '链路追踪编å·', @@ -1817,19 +2288,70 @@ CREATE TABLE `sys_login_log` ( `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编å·', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=764 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统访问记录'; +) ENGINE=InnoDB AUTO_INCREMENT=815 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统访问记录'; -- ---------------------------- --- Records of sys_login_log +-- Records of system_login_log -- ---------------------------- BEGIN; +INSERT INTO `system_login_log` VALUES (764, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-23 01:42:39', NULL, '2022-01-23 01:42:39', b'0', 0); +INSERT INTO `system_login_log` VALUES (765, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-23 03:21:32', NULL, '2022-01-23 03:21:32', b'0', 0); +INSERT INTO `system_login_log` VALUES (766, 200, '', 1, 2, 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-23 04:10:38', NULL, '2022-01-23 04:10:38', b'0', 0); +INSERT INTO `system_login_log` VALUES (767, 200, '', 1, 2, 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-23 04:10:38', NULL, '2022-01-23 04:10:38', b'0', 0); +INSERT INTO `system_login_log` VALUES (768, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-23 04:19:53', NULL, '2022-01-23 04:19:53', b'0', 0); +INSERT INTO `system_login_log` VALUES (769, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-23 12:40:59', NULL, '2022-01-23 12:40:59', b'0', 0); +INSERT INTO `system_login_log` VALUES (770, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-23 13:24:43', NULL, '2022-01-23 13:24:43', b'0', 0); +INSERT INTO `system_login_log` VALUES (771, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-24 07:50:09', NULL, '2022-01-24 07:50:09', b'0', 0); +INSERT INTO `system_login_log` VALUES (772, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 09:49:07', NULL, '2022-01-28 09:49:07', b'0', 0); +INSERT INTO `system_login_log` VALUES (773, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 20:39:33', NULL, '2022-01-28 20:39:33', b'0', 0); +INSERT INTO `system_login_log` VALUES (774, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 21:22:31', NULL, '2022-01-28 21:22:31', b'0', 0); +INSERT INTO `system_login_log` VALUES (775, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 21:22:44', NULL, '2022-01-28 21:22:44', b'0', 0); +INSERT INTO `system_login_log` VALUES (776, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 21:23:20', NULL, '2022-01-28 21:23:20', b'0', 0); +INSERT INTO `system_login_log` VALUES (777, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 21:23:22', NULL, '2022-01-28 21:23:22', b'0', 0); +INSERT INTO `system_login_log` VALUES (778, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 21:23:35', NULL, '2022-01-28 21:23:35', b'0', 0); +INSERT INTO `system_login_log` VALUES (779, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 21:24:02', NULL, '2022-01-28 21:24:02', b'0', 0); +INSERT INTO `system_login_log` VALUES (780, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 21:25:00', NULL, '2022-01-28 21:25:00', b'0', 0); +INSERT INTO `system_login_log` VALUES (781, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 21:25:14', NULL, '2022-01-28 21:25:14', b'0', 0); +INSERT INTO `system_login_log` VALUES (782, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 21:26:46', NULL, '2022-01-28 21:26:46', b'0', 0); +INSERT INTO `system_login_log` VALUES (783, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 21:26:47', NULL, '2022-01-28 21:26:47', b'0', 0); +INSERT INTO `system_login_log` VALUES (784, 100, '', 1, 2, 'admin', 10, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 21:26:57', NULL, '2022-01-28 21:26:57', b'0', 0); +INSERT INTO `system_login_log` VALUES (785, 100, '', 1, 2, 'admin', 10, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 21:27:28', NULL, '2022-01-28 21:27:28', b'0', 0); +INSERT INTO `system_login_log` VALUES (786, 100, '', 1, 2, 'admin', 10, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 21:40:29', NULL, '2022-01-28 21:40:29', b'0', 0); +INSERT INTO `system_login_log` VALUES (787, 100, '', 1, 2, 'admin', 10, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 21:42:30', NULL, '2022-01-28 21:42:30', b'0', 0); +INSERT INTO `system_login_log` VALUES (788, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 21:42:41', NULL, '2022-01-28 21:42:41', b'0', 0); +INSERT INTO `system_login_log` VALUES (789, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 23:21:07', NULL, '2022-01-28 23:21:07', b'0', 0); +INSERT INTO `system_login_log` VALUES (790, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 23:21:10', NULL, '2022-01-28 23:21:10', b'0', 0); +INSERT INTO `system_login_log` VALUES (791, 100, '', 0, 0, '15601691300', 10, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-29 00:37:24', NULL, '2022-01-29 00:37:24', b'0', 0); +INSERT INTO `system_login_log` VALUES (792, 100, '', 245, 0, '15601691300', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-29 00:37:51', NULL, '2022-01-29 00:37:51', b'0', 0); +INSERT INTO `system_login_log` VALUES (793, 100, '', 245, 0, '15601691300', 10, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-29 00:37:59', NULL, '2022-01-29 00:37:59', b'0', 0); +INSERT INTO `system_login_log` VALUES (794, 100, '', 245, 0, '15601691300', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-29 11:50:08', NULL, '2022-01-29 11:50:08', b'0', 0); +INSERT INTO `system_login_log` VALUES (795, 100, '', 245, 0, '15601691300', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-29 13:58:04', NULL, '2022-01-29 13:58:04', b'0', 0); +INSERT INTO `system_login_log` VALUES (796, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-29 16:34:19', NULL, '2022-01-29 16:34:19', b'0', 0); +INSERT INTO `system_login_log` VALUES (797, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-29 16:47:54', NULL, '2022-01-29 16:47:54', b'0', 0); +INSERT INTO `system_login_log` VALUES (798, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-29 16:48:14', NULL, '2022-01-29 16:48:14', b'0', 0); +INSERT INTO `system_login_log` VALUES (799, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-30 23:30:54', NULL, '2022-01-30 23:30:54', b'0', 0); +INSERT INTO `system_login_log` VALUES (800, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-01-31 13:30:40', NULL, '2022-01-31 13:30:40', b'0', 0); +INSERT INTO `system_login_log` VALUES (801, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-01-31 17:12:35', NULL, '2022-01-31 17:12:35', b'0', 0); +INSERT INTO `system_login_log` VALUES (802, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-01-31 17:12:51', NULL, '2022-01-31 17:12:51', b'0', 0); +INSERT INTO `system_login_log` VALUES (803, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-01-31 17:15:38', NULL, '2022-01-31 17:15:38', b'0', 0); +INSERT INTO `system_login_log` VALUES (804, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-01-31 17:36:10', NULL, '2022-01-31 17:36:10', b'0', 0); +INSERT INTO `system_login_log` VALUES (805, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-01-31 17:45:45', NULL, '2022-01-31 17:45:45', b'0', 0); +INSERT INTO `system_login_log` VALUES (806, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-01-31 17:45:53', NULL, '2022-01-31 17:45:53', b'0', 0); +INSERT INTO `system_login_log` VALUES (807, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-01-31 17:47:25', NULL, '2022-01-31 17:47:25', b'0', 0); +INSERT INTO `system_login_log` VALUES (808, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-02-01 21:46:34', NULL, '2022-02-01 21:46:34', b'0', 0); +INSERT INTO `system_login_log` VALUES (809, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-02-01 21:56:07', NULL, '2022-02-01 21:56:07', b'0', 0); +INSERT INTO `system_login_log` VALUES (810, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36', NULL, '2022-02-01 22:57:32', NULL, '2022-02-01 22:57:32', b'0', 0); +INSERT INTO `system_login_log` VALUES (811, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36', NULL, '2022-02-02 00:24:35', NULL, '2022-02-02 00:24:35', b'0', 0); +INSERT INTO `system_login_log` VALUES (812, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36', NULL, '2022-02-02 00:25:21', NULL, '2022-02-02 00:25:21', b'0', 0); +INSERT INTO `system_login_log` VALUES (813, 200, '', 1, 2, 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36', NULL, '2022-02-02 00:26:41', NULL, '2022-02-02 00:26:41', b'0', 0); +INSERT INTO `system_login_log` VALUES (814, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36', NULL, '2022-02-02 00:27:55', NULL, '2022-02-02 00:27:55', b'0', 0); COMMIT; -- ---------------------------- --- Table structure for sys_menu +-- Table structure for system_menu -- ---------------------------- -DROP TABLE IF EXISTS `sys_menu`; -CREATE TABLE `sys_menu` ( +DROP TABLE IF EXISTS `system_menu`; +CREATE TABLE `system_menu` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'èœå•ID', `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'èœå•åç§°', `permission` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'æƒé™æ ‡è¯†', @@ -1850,244 +2372,244 @@ CREATE TABLE `sys_menu` ( ) ENGINE=InnoDB AUTO_INCREMENT=1223 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='èœå•æƒé™è¡¨'; -- ---------------------------- --- Records of sys_menu +-- Records of system_menu -- ---------------------------- BEGIN; -INSERT INTO `sys_menu` VALUES (1, '系统管ç†', '', 1, 10, 0, '/system', 'system', NULL, 0, 'admin', '2021-01-05 17:03:48', '1', '2021-12-25 16:43:08', b'0', 0); -INSERT INTO `sys_menu` VALUES (2, '基础设施', '', 1, 20, 0, '/infra', 'monitor', NULL, 0, 'admin', '2021-01-05 17:03:48', '1', '2021-12-25 16:43:18', b'0', 0); -INSERT INTO `sys_menu` VALUES (3, 'ç ”å‘工具', '', 1, 30, 0, '/tool', 'tool', NULL, 0, 'admin', '2021-01-05 17:03:48', '1', '2021-12-25 16:43:13', b'0', 0); -INSERT INTO `sys_menu` VALUES (4, 'è‹¥ä¾å®˜ç½‘', '', 1, 4, 0, 'http://ruoyi.vip', 'guide', NULL, 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-20 21:54:28', b'1', 0); -INSERT INTO `sys_menu` VALUES (5, 'OA 示例', '', 1, 40, 1185, 'oa', 'people', NULL, 0, 'admin', '2021-09-20 16:26:19', '1', '2022-01-22 18:32:50', b'0', 0); -INSERT INTO `sys_menu` VALUES (100, '用户管ç†', 'system:user:list', 2, 1, 1, 'user', 'user', 'system/user/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:45', b'0', 0); -INSERT INTO `sys_menu` VALUES (101, '角色管ç†', '', 2, 2, 1, 'role', 'peoples', 'system/role/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 22:04:49', b'0', 0); -INSERT INTO `sys_menu` VALUES (102, 'èœå•管ç†', '', 2, 3, 1, 'menu', 'tree-table', 'system/menu/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 22:04:28', b'0', 0); -INSERT INTO `sys_menu` VALUES (103, '部门管ç†', '', 2, 4, 1, 'dept', 'tree', 'system/dept/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 20:25:19', b'0', 0); -INSERT INTO `sys_menu` VALUES (104, 'å²—ä½ç®¡ç†', '', 2, 5, 1, 'post', 'post', 'system/post/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 20:38:23', b'0', 0); -INSERT INTO `sys_menu` VALUES (105, '字典管ç†', '', 2, 6, 1, 'dict', 'dict', 'system/dict/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 21:16:58', b'0', 0); -INSERT INTO `sys_menu` VALUES (106, 'é…置管ç†', '', 2, 1, 2, 'config', 'edit', 'infra/config/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-10 01:12:10', b'0', 0); -INSERT INTO `sys_menu` VALUES (107, '通知公告', '', 2, 8, 1, 'notice', 'message', 'system/notice/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 21:51:39', b'0', 0); -INSERT INTO `sys_menu` VALUES (108, '审计日志', '', 1, 9, 1, 'log', 'log', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-04-26 22:34:58', b'0', 0); -INSERT INTO `sys_menu` VALUES (109, '在线用户', 'system:user-session:list', 2, 10, 1, 'user-session', 'online', 'system/session/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-26 08:21:20', b'0', 0); -INSERT INTO `sys_menu` VALUES (110, '定时任务', '', 2, 2, 2, 'job', 'job', 'infra/job/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-10 01:25:51', b'0', 0); -INSERT INTO `sys_menu` VALUES (111, 'MySQL 监控', '', 2, 4, 2, 'druid', 'druid', 'infra/druid/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-26 02:18:32', b'0', 0); -INSERT INTO `sys_menu` VALUES (112, 'Java 监控', '', 2, 6, 2, 'admin-server', 'server', 'infra/server', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-26 02:18:41', b'0', 0); -INSERT INTO `sys_menu` VALUES (113, 'Redis 监控', '', 2, 5, 2, 'redis', 'redis', 'infra/redis/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-26 02:18:37', b'0', 0); -INSERT INTO `sys_menu` VALUES (114, 'è¡¨å•æž„建', 'tool:build:list', 2, 1, 3, 'build', 'build', 'tool/build/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:45', b'0', 0); -INSERT INTO `sys_menu` VALUES (115, '代ç ç”Ÿæˆ', 'tool:codegen:query', 2, 0, 3, 'codegen', 'code', 'tool/codegen/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-03-06 03:43:14', b'0', 0); -INSERT INTO `sys_menu` VALUES (116, '系统接å£', 'tool:swagger:list', 2, 3, 3, 'swagger', 'swagger', 'tool/swagger/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:45', b'0', 0); -INSERT INTO `sys_menu` VALUES (500, 'æ“作日志', '', 2, 1, 108, 'operate-log', 'form', 'system/operatelog/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 21:42:56', b'0', 0); -INSERT INTO `sys_menu` VALUES (501, '登录日志', '', 2, 2, 108, 'login-log', 'logininfor', 'system/loginlog/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 21:39:23', b'0', 0); -INSERT INTO `sys_menu` VALUES (1001, '用户查询', 'system:user:query', 3, 1, 100, '', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0', 0); -INSERT INTO `sys_menu` VALUES (1002, '用户新增', 'system:user:create', 3, 2, 100, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 22:21:47', b'0', 0); -INSERT INTO `sys_menu` VALUES (1003, '用户修改', 'system:user:update', 3, 3, 100, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 22:21:54', b'0', 0); -INSERT INTO `sys_menu` VALUES (1004, '用户删除', 'system:user:delete', 3, 4, 100, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 22:22:03', b'0', 0); -INSERT INTO `sys_menu` VALUES (1005, '用户导出', 'system:user:export', 3, 5, 100, '', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0', 0); -INSERT INTO `sys_menu` VALUES (1006, '用户导入', 'system:user:import', 3, 6, 100, '', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0', 0); -INSERT INTO `sys_menu` VALUES (1007, 'é‡ç½®å¯†ç ', 'system:user:update-password', 3, 7, 100, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 22:20:55', b'0', 0); -INSERT INTO `sys_menu` VALUES (1008, '角色查询', 'system:role:query', 3, 1, 101, '', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0', 0); -INSERT INTO `sys_menu` VALUES (1009, '角色新增', 'system:role:create', 3, 2, 101, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 22:05:24', b'0', 0); -INSERT INTO `sys_menu` VALUES (1010, '角色修改', 'system:role:update', 3, 3, 101, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 22:05:14', b'0', 0); -INSERT INTO `sys_menu` VALUES (1011, '角色删除', 'system:role:delete', 3, 4, 101, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 22:05:05', b'0', 0); -INSERT INTO `sys_menu` VALUES (1012, '角色导出', 'system:role:export', 3, 5, 101, '', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0', 0); -INSERT INTO `sys_menu` VALUES (1013, 'èœå•查询', 'system:menu:query', 3, 1, 102, '', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0', 0); -INSERT INTO `sys_menu` VALUES (1014, 'èœå•新增', 'system:menu:create', 3, 2, 102, '', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-03-13 15:49:36', b'0', 0); -INSERT INTO `sys_menu` VALUES (1015, 'èœå•修改', 'system:menu:update', 3, 3, 102, '', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-03-13 15:49:30', b'0', 0); -INSERT INTO `sys_menu` VALUES (1016, 'èœå•删除', 'system:menu:delete', 3, 4, 102, '', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-03-13 15:49:45', b'0', 0); -INSERT INTO `sys_menu` VALUES (1017, '部门查询', 'system:dept:query', 3, 1, 103, '', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0', 0); -INSERT INTO `sys_menu` VALUES (1018, '部门新增', 'system:dept:create', 3, 2, 103, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 20:25:30', b'0', 0); -INSERT INTO `sys_menu` VALUES (1019, '部门修改', 'system:dept:update', 3, 3, 103, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 20:25:37', b'0', 0); -INSERT INTO `sys_menu` VALUES (1020, '部门删除', 'system:dept:delete', 3, 4, 103, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 20:25:43', b'0', 0); -INSERT INTO `sys_menu` VALUES (1021, '岗使Ÿ¥è¯¢', 'system:post:query', 3, 1, 104, '', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0', 0); -INSERT INTO `sys_menu` VALUES (1022, '岗使–°å¢ž', 'system:post:create', 3, 2, 104, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 20:38:34', b'0', 0); -INSERT INTO `sys_menu` VALUES (1023, 'å²—ä½ä¿®æ”¹', 'system:post:update', 3, 3, 104, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 20:38:41', b'0', 0); -INSERT INTO `sys_menu` VALUES (1024, 'å²—ä½åˆ é™¤', 'system:post:delete', 3, 4, 104, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 20:38:48', b'0', 0); -INSERT INTO `sys_menu` VALUES (1025, 'å²—ä½å¯¼å‡º', 'system:post:export', 3, 5, 104, '', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0', 0); -INSERT INTO `sys_menu` VALUES (1026, '字典查询', 'system:dict:query', 3, 1, 105, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0', 0); -INSERT INTO `sys_menu` VALUES (1027, '字典新增', 'system:dict:create', 3, 2, 105, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 21:19:29', b'0', 0); -INSERT INTO `sys_menu` VALUES (1028, '字典修改', 'system:dict:update', 3, 3, 105, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 21:19:36', b'0', 0); -INSERT INTO `sys_menu` VALUES (1029, '字典删除', 'system:dict:delete', 3, 4, 105, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 21:19:45', b'0', 0); -INSERT INTO `sys_menu` VALUES (1030, '字典导出', 'system:dict:export', 3, 5, 105, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0', 0); -INSERT INTO `sys_menu` VALUES (1031, 'é…置查询', 'infra:config:query', 3, 1, 106, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-20 14:34:00', b'0', 0); -INSERT INTO `sys_menu` VALUES (1032, 'é…置新增', 'infra:config:create', 3, 2, 106, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-10 01:12:18', b'0', 0); -INSERT INTO `sys_menu` VALUES (1033, 'é…置修改', 'infra:config:update', 3, 3, 106, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-10 01:12:30', b'0', 0); -INSERT INTO `sys_menu` VALUES (1034, 'é…置删除', 'infra:config:delete', 3, 4, 106, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-10 01:12:36', b'0', 0); -INSERT INTO `sys_menu` VALUES (1035, 'é…置导出', 'infra:config:export', 3, 5, 106, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-20 14:34:19', b'0', 0); -INSERT INTO `sys_menu` VALUES (1036, '公告查询', 'system:notice:query', 3, 1, 107, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0', 0); -INSERT INTO `sys_menu` VALUES (1037, '公告新增', 'system:notice:create', 3, 2, 107, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 21:51:48', b'0', 0); -INSERT INTO `sys_menu` VALUES (1038, '公告修改', 'system:notice:update', 3, 3, 107, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 21:51:55', b'0', 0); -INSERT INTO `sys_menu` VALUES (1039, '公告删除', 'system:notice:delete', 3, 4, 107, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 21:52:01', b'0', 0); -INSERT INTO `sys_menu` VALUES (1040, 'æ“作查询', 'system:operate-log:query', 3, 1, 500, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-16 18:28:10', b'0', 0); -INSERT INTO `sys_menu` VALUES (1042, '日志导出', 'system:operate-log:export', 3, 2, 500, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-16 18:28:23', b'0', 0); -INSERT INTO `sys_menu` VALUES (1043, '登录查询', 'system:login-log:query', 3, 1, 501, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-18 05:29:26', b'0', 0); -INSERT INTO `sys_menu` VALUES (1045, '日志导出', 'system:login-log:export', 3, 3, 501, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-18 05:29:30', b'0', 0); -INSERT INTO `sys_menu` VALUES (1046, '在线查询', 'system:user-session:list', 3, 1, 109, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-26 08:22:37', b'0', 0); -INSERT INTO `sys_menu` VALUES (1047, '批é‡å¼ºé€€', 'monitor:online:batchLogout', 3, 2, 109, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-26 08:21:46', b'1', 0); -INSERT INTO `sys_menu` VALUES (1048, '啿¡å¼ºé€€', 'system:user-session:delete', 3, 3, 109, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-26 08:22:54', b'0', 0); -INSERT INTO `sys_menu` VALUES (1049, '任务查询', 'monitor:job:query', 3, 1, 110, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-07 13:01:42', b'1', 0); -INSERT INTO `sys_menu` VALUES (1050, '任务新增', 'infra:job:create', 3, 2, 110, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-07 13:01:58', b'0', 0); -INSERT INTO `sys_menu` VALUES (1051, '任务修改', 'infra:job:update', 3, 3, 110, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-07 13:02:10', b'0', 0); -INSERT INTO `sys_menu` VALUES (1052, '任务删除', 'infra:job:delete', 3, 4, 110, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-07 13:02:22', b'0', 0); -INSERT INTO `sys_menu` VALUES (1053, '状æ€ä¿®æ”¹', 'infra:job:update', 3, 5, 110, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-07 13:02:38', b'0', 0); -INSERT INTO `sys_menu` VALUES (1054, '任务导出', 'infra:job:export', 3, 7, 110, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-07 13:02:51', b'0', 0); -INSERT INTO `sys_menu` VALUES (1055, 'ç”ŸæˆæŸ¥è¯¢', 'tool:gen:query', 3, 1, 115, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-06 21:23:25', b'1', 0); -INSERT INTO `sys_menu` VALUES (1056, '生æˆä¿®æ”¹', 'tool:codegen:update', 3, 2, 115, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-06 21:23:41', b'0', 0); -INSERT INTO `sys_menu` VALUES (1057, '生æˆåˆ é™¤', 'tool:codegen:delete', 3, 3, 115, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-06 21:24:02', b'0', 0); -INSERT INTO `sys_menu` VALUES (1058, '导入代ç ', 'tool:codegen:create', 3, 2, 115, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-06 21:23:50', b'0', 0); -INSERT INTO `sys_menu` VALUES (1059, '预览代ç ', 'tool:codegen:preview', 3, 4, 115, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-06 21:24:10', b'0', 0); -INSERT INTO `sys_menu` VALUES (1060, '生æˆä»£ç ', 'tool:codegen:download', 3, 5, 115, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-06 21:24:20', b'0', 0); -INSERT INTO `sys_menu` VALUES (1063, '设置角色èœå•æƒé™', 'system:permission:assign-role-menu', 3, 6, 101, '', '', '', 0, '', '2021-01-06 17:53:44', '', '2021-01-06 17:55:23', b'0', 0); -INSERT INTO `sys_menu` VALUES (1064, 'è®¾ç½®è§’è‰²æ•°æ®æƒé™', 'system:permission:assign-role-data-scope', 3, 7, 101, '', '', '', 0, '', '2021-01-06 17:56:31', '', '2021-01-06 17:56:31', b'0', 0); -INSERT INTO `sys_menu` VALUES (1065, '设置用户角色', 'system:permission:assign-user-role', 3, 8, 101, '', '', '', 0, '', '2021-01-07 10:23:28', '', '2021-01-07 10:23:28', b'0', 0); -INSERT INTO `sys_menu` VALUES (1066, '获得 Redis 监控信æ¯', 'infra:redis:get-monitor-info', 3, 1, 113, '', '', '', 0, '', '2021-01-26 01:02:31', '', '2021-01-26 01:02:31', b'0', 0); -INSERT INTO `sys_menu` VALUES (1067, '获得 Redis Key 列表', 'infra:redis:get-key-list', 3, 2, 113, '', '', '', 0, '', '2021-01-26 01:02:52', '', '2021-01-26 01:02:52', b'0', 0); -INSERT INTO `sys_menu` VALUES (1070, '代ç ç”Ÿæˆç¤ºä¾‹', 'tool:test-demo:query', 2, 0, 3, 'test-demo', 'validCode', 'tool/testDemo/index', 0, '', '2021-02-06 12:42:49', '', '2021-03-06 03:45:22', b'0', 0); -INSERT INTO `sys_menu` VALUES (1071, '测试示例表创建', 'tool:test-demo:create', 3, 1, 1070, '', '', '', 0, '', '2021-02-06 12:42:49', '', '2021-02-06 12:53:47', b'0', 0); -INSERT INTO `sys_menu` VALUES (1072, '测试示例表更新', 'tool:test-demo:update', 3, 2, 1070, '', '', '', 0, '', '2021-02-06 12:42:49', '', '2021-02-06 12:53:51', b'0', 0); -INSERT INTO `sys_menu` VALUES (1073, '测试示例表删除', 'tool:test-demo:delete', 3, 3, 1070, '', '', '', 0, '', '2021-02-06 12:42:49', '', '2021-02-06 12:53:58', b'0', 0); -INSERT INTO `sys_menu` VALUES (1074, '测试示例表导出', 'tool:test-demo:export', 3, 4, 1070, '', '', '', 0, '', '2021-02-06 12:42:49', '', '2021-02-06 12:54:01', b'0', 0); -INSERT INTO `sys_menu` VALUES (1075, '任务触å‘', 'infra:job:trigger', 3, 8, 110, '', '', '', 0, '', '2021-02-07 13:03:10', '', '2021-02-07 13:03:10', b'0', 0); -INSERT INTO `sys_menu` VALUES (1076, 'æ•°æ®åº“文档', '', 2, 5, 3, 'db-doc', 'table', 'tool/dbDoc/index', 0, '', '2021-02-08 01:41:47', '', '2021-02-08 01:49:00', b'0', 0); -INSERT INTO `sys_menu` VALUES (1077, '链路追踪', '', 2, 7, 2, 'skywalking', 'eye-open', 'infra/skywalking', 0, '', '2021-02-08 20:41:31', '', '2021-02-26 02:18:45', b'0', 0); -INSERT INTO `sys_menu` VALUES (1078, '访问日志', '', 2, 1, 1083, 'api-access-log', 'log', 'infra/apiAccessLog/index', 0, '', '2021-02-26 01:32:59', '1', '2021-03-10 01:28:09', b'0', 0); -INSERT INTO `sys_menu` VALUES (1079, 'API 访问日志表创建', 'system:api-access-log:create', 3, 1, 1078, '', '', '', 1, '', '2021-02-26 01:32:59', '', '2021-02-26 02:21:00', b'1', 0); -INSERT INTO `sys_menu` VALUES (1080, 'API 访问日志表更新', 'system:api-access-log:update', 3, 2, 1078, '', '', '', 1, '', '2021-02-26 01:32:59', '', '2021-02-26 02:21:08', b'1', 0); -INSERT INTO `sys_menu` VALUES (1081, 'API 访问日志表删除', 'system:api-access-log:delete', 3, 3, 1078, '', '', '', 1, '', '2021-02-26 01:32:59', '', '2021-02-26 02:21:27', b'1', 0); -INSERT INTO `sys_menu` VALUES (1082, '日志导出', 'infra:api-access-log:export', 3, 2, 1078, '', '', '', 0, '', '2021-02-26 01:32:59', '1', '2021-03-10 01:28:13', b'0', 0); -INSERT INTO `sys_menu` VALUES (1083, 'API 日志', '', 2, 3, 2, 'log', 'log', NULL, 0, '', '2021-02-26 02:18:24', '', '2021-02-26 02:20:17', b'0', 0); -INSERT INTO `sys_menu` VALUES (1084, '错误日志', 'infra:api-error-log:query', 2, 2, 1083, 'api-error-log', 'log', 'infra/apiErrorLog/index', 0, '', '2021-02-26 07:53:20', '', '2021-02-26 07:54:40', b'0', 0); -INSERT INTO `sys_menu` VALUES (1085, '日志处ç†', 'infra:api-error-log:update-status', 3, 2, 1084, '', '', '', 0, '', '2021-02-26 07:53:20', '1', '2021-03-10 01:28:18', b'0', 0); -INSERT INTO `sys_menu` VALUES (1086, '日志导出', 'infra:api-error-log:export', 3, 3, 1084, '', '', '', 0, '', '2021-02-26 07:53:20', '1', '2021-03-10 01:28:21', b'0', 0); -INSERT INTO `sys_menu` VALUES (1087, '任务查询', 'infra:job:query', 3, 1, 110, '', '', '', 0, '1', '2021-03-10 01:26:19', '1', '2021-03-10 01:26:19', b'0', 0); -INSERT INTO `sys_menu` VALUES (1088, '日志查询', 'infra:api-access-log:query', 3, 1, 1078, '', '', '', 0, '1', '2021-03-10 01:28:04', '1', '2021-03-10 01:29:38', b'0', 0); -INSERT INTO `sys_menu` VALUES (1089, '日志查询', 'infra:api-error-log:query', 3, 1, 1084, '', '', '', 0, '1', '2021-03-10 01:29:09', '1', '2021-03-10 01:29:09', b'0', 0); -INSERT INTO `sys_menu` VALUES (1090, '文件管ç†', '', 2, 0, 2, 'file', 'upload', 'infra/file/index', 0, '', '2021-03-12 20:16:20', '1', '2021-03-13 11:07:05', b'0', 0); -INSERT INTO `sys_menu` VALUES (1091, '文件查询', 'infra:file:query', 3, 1, 1090, '', '', '', 0, '', '2021-03-12 20:16:20', '', '2021-03-12 20:16:20', b'0', 0); -INSERT INTO `sys_menu` VALUES (1092, '文件删除', 'infra:file:delete', 3, 4, 1090, '', '', '', 0, '', '2021-03-12 20:16:20', '', '2021-03-12 20:16:20', b'0', 0); -INSERT INTO `sys_menu` VALUES (1093, '短信管ç†', '', 1, 11, 1, 'sms', 'validCode', NULL, 0, '1', '2021-04-05 01:10:16', '1', '2021-04-05 01:11:38', b'0', 0); -INSERT INTO `sys_menu` VALUES (1094, '短信渠é“', '', 2, 0, 1093, 'sms-channel', 'phone', 'system/sms/smsChannel', 0, '', '2021-04-01 11:07:15', '1', '2021-04-09 23:44:07', b'0', 0); -INSERT INTO `sys_menu` VALUES (1095, 'çŸ­ä¿¡æ¸ é“æŸ¥è¯¢', 'system:sms-channel:query', 3, 1, 1094, '', '', '', 0, '', '2021-04-01 11:07:15', '', '2021-04-01 11:07:15', b'0', 0); -INSERT INTO `sys_menu` VALUES (1096, '短信渠é“创建', 'system:sms-channel:create', 3, 2, 1094, '', '', '', 0, '', '2021-04-01 11:07:15', '', '2021-04-01 11:07:15', b'0', 0); -INSERT INTO `sys_menu` VALUES (1097, 'çŸ­ä¿¡æ¸ é“æ›´æ–°', 'system:sms-channel:update', 3, 3, 1094, '', '', '', 0, '', '2021-04-01 11:07:15', '', '2021-04-01 11:07:15', b'0', 0); -INSERT INTO `sys_menu` VALUES (1098, '短信渠é“删除', 'system:sms-channel:delete', 3, 4, 1094, '', '', '', 0, '', '2021-04-01 11:07:15', '', '2021-04-01 11:07:15', b'0', 0); -INSERT INTO `sys_menu` VALUES (1100, '短信模æ¿', '', 2, 1, 1093, 'sms-template', 'phone', 'system/sms/smsTemplate', 0, '', '2021-04-01 17:35:17', '1', '2021-04-11 19:34:21', b'0', 0); -INSERT INTO `sys_menu` VALUES (1101, 'çŸ­ä¿¡æ¨¡æ¿æŸ¥è¯¢', 'system:sms-template:query', 3, 1, 1100, '', '', '', 0, '', '2021-04-01 17:35:17', '', '2021-04-01 17:35:17', b'0', 0); -INSERT INTO `sys_menu` VALUES (1102, '短信模æ¿åˆ›å»º', 'system:sms-template:create', 3, 2, 1100, '', '', '', 0, '', '2021-04-01 17:35:17', '', '2021-04-01 17:35:17', b'0', 0); -INSERT INTO `sys_menu` VALUES (1103, 'çŸ­ä¿¡æ¨¡æ¿æ›´æ–°', 'system:sms-template:update', 3, 3, 1100, '', '', '', 0, '', '2021-04-01 17:35:17', '', '2021-04-01 17:35:17', b'0', 0); -INSERT INTO `sys_menu` VALUES (1104, '短信模æ¿åˆ é™¤', 'system:sms-template:delete', 3, 4, 1100, '', '', '', 0, '', '2021-04-01 17:35:17', '', '2021-04-01 17:35:17', b'0', 0); -INSERT INTO `sys_menu` VALUES (1105, '短信模æ¿å¯¼å‡º', 'system:sms-template:export', 3, 5, 1100, '', '', '', 0, '', '2021-04-01 17:35:17', '', '2021-04-01 17:35:17', b'0', 0); -INSERT INTO `sys_menu` VALUES (1106, 'å‘逿µ‹è¯•短信', 'system:sms-template:send-sms', 3, 6, 1100, '', '', '', 0, '1', '2021-04-11 00:26:40', '1', '2021-04-11 00:26:40', b'0', 0); -INSERT INTO `sys_menu` VALUES (1107, '短信日志', '', 2, 2, 1093, 'sms-log', 'phone', 'system/sms/smsLog', 0, '', '2021-04-11 08:37:05', '1', '2021-04-11 19:34:25', b'0', 0); -INSERT INTO `sys_menu` VALUES (1108, '短信日志查询', 'system:sms-log:query', 3, 1, 1107, '', '', '', 0, '', '2021-04-11 08:37:05', '', '2021-04-11 08:37:05', b'0', 0); -INSERT INTO `sys_menu` VALUES (1109, '短信日志导出', 'system:sms-log:export', 3, 5, 1107, '', '', '', 0, '', '2021-04-11 08:37:05', '', '2021-04-11 08:37:05', b'0', 0); -INSERT INTO `sys_menu` VALUES (1110, '错误ç ç®¡ç†', '', 2, 12, 1, 'error-code', 'code', 'system/errorCode/index', 0, '', '2021-04-13 21:46:42', '1', '2021-04-22 00:04:35', b'0', 0); -INSERT INTO `sys_menu` VALUES (1111, 'é”™è¯¯ç æŸ¥è¯¢', 'system:error-code:query', 3, 1, 1110, '', '', '', 0, '', '2021-04-13 21:46:42', '', '2021-04-13 22:09:37', b'0', 0); -INSERT INTO `sys_menu` VALUES (1112, '错误ç åˆ›å»º', 'system:error-code:create', 3, 2, 1110, '', '', '', 0, '', '2021-04-13 21:46:42', '', '2021-04-13 22:09:43', b'0', 0); -INSERT INTO `sys_menu` VALUES (1113, 'é”™è¯¯ç æ›´æ–°', 'system:error-code:update', 3, 3, 1110, '', '', '', 0, '', '2021-04-13 21:46:42', '', '2021-04-13 22:09:47', b'0', 0); -INSERT INTO `sys_menu` VALUES (1114, '错误ç åˆ é™¤', 'system:error-code:delete', 3, 4, 1110, '', '', '', 0, '', '2021-04-13 21:46:42', '', '2021-04-13 22:09:51', b'0', 0); -INSERT INTO `sys_menu` VALUES (1115, '错误ç å¯¼å‡º', 'system:error-code:export', 3, 5, 1110, '', '', '', 0, '', '2021-04-13 21:46:42', '', '2021-04-13 22:09:55', b'0', 0); -INSERT INTO `sys_menu` VALUES (1116, '日志中心', '', 2, 8, 2, 'log-center', 'log', 'infra/skywalking/log', 0, '1', '2021-04-26 22:35:45', '1', '2021-04-26 22:37:25', b'0', 0); -INSERT INTO `sys_menu` VALUES (1117, '支付管ç†', '', 1, 11, 0, '/pay', 'money', NULL, 0, '1', '2021-12-25 16:43:41', '1', '2021-12-25 16:46:40', b'0', 0); -INSERT INTO `sys_menu` VALUES (1118, 'è¯·å‡æŸ¥è¯¢', '', 2, 0, 5, 'leave', 'user', 'bpm/oa/leave/index', 0, '', '2021-09-20 08:51:03', '1', '2022-01-22 21:36:06', b'0', 0); -INSERT INTO `sys_menu` VALUES (1119, '请å‡ç”³è¯·æŸ¥è¯¢', 'bpm:oa-leave:query', 3, 1, 1118, '', '', '', 0, '', '2021-09-20 08:51:03', '1', '2022-01-23 00:14:20', b'0', 0); -INSERT INTO `sys_menu` VALUES (1120, '请å‡ç”³è¯·åˆ›å»º', 'bpm:oa-leave:create', 3, 2, 1118, '', '', '', 0, '', '2021-09-20 08:51:03', '1', '2022-01-23 00:14:49', b'0', 0); -INSERT INTO `sys_menu` VALUES (1121, '请å‡ç”³è¯·æ›´æ–°', 'oa:leave:update', 3, 3, 1118, '', '', '', 0, '', '2021-09-20 08:51:03', '', '2022-01-22 16:14:26', b'1', 0); -INSERT INTO `sys_menu` VALUES (1122, '请å‡ç”³è¯·åˆ é™¤', 'oa:leave:delete', 3, 4, 1118, '', '', '', 0, '', '2021-09-20 08:51:03', '', '2022-01-22 16:14:28', b'1', 0); -INSERT INTO `sys_menu` VALUES (1123, '请å‡ç”³è¯·å¯¼å‡º', 'oa:leave:export', 3, 5, 1118, '', '', '', 0, '', '2021-09-20 08:51:03', '', '2022-01-22 16:14:30', b'1', 0); -INSERT INTO `sys_menu` VALUES (1124, '待办任务', '', 2, 2, 5, 'todo', 'edit', 'oa/todo/index', 0, '1', '2021-09-20 22:10:09', '1', '2022-01-22 10:33:01', b'1', 0); -INSERT INTO `sys_menu` VALUES (1125, 'æµç¨‹ç”³è¯·', '', 2, 3, 5, 'flow', 'form', 'oa/flow/index', 0, '1', '2021-10-23 22:10:09', '1', '2022-01-22 10:33:03', b'1', 0); -INSERT INTO `sys_menu` VALUES (1126, '应用信æ¯', '', 2, 1, 1117, 'app', 'table', 'pay/app/index', 0, '', '2021-11-10 01:13:30', '1', '2021-12-25 16:56:41', b'0', 0); -INSERT INTO `sys_menu` VALUES (1127, 'æ”¯ä»˜åº”ç”¨ä¿¡æ¯æŸ¥è¯¢', 'pay:app:query', 3, 1, 1126, '', '', '', 0, '', '2021-11-10 01:13:31', '', '2021-11-10 01:13:31', b'0', 0); -INSERT INTO `sys_menu` VALUES (1128, '支付应用信æ¯åˆ›å»º', 'pay:app:create', 3, 2, 1126, '', '', '', 0, '', '2021-11-10 01:13:31', '', '2021-11-10 01:13:31', b'0', 0); -INSERT INTO `sys_menu` VALUES (1129, 'æ”¯ä»˜åº”ç”¨ä¿¡æ¯æ›´æ–°', 'pay:app:update', 3, 3, 1126, '', '', '', 0, '', '2021-11-10 01:13:31', '', '2021-11-10 01:13:31', b'0', 0); -INSERT INTO `sys_menu` VALUES (1130, '支付应用信æ¯åˆ é™¤', 'pay:app:delete', 3, 4, 1126, '', '', '', 0, '', '2021-11-10 01:13:31', '', '2021-11-10 01:13:31', b'0', 0); -INSERT INTO `sys_menu` VALUES (1131, '支付应用信æ¯å¯¼å‡º', 'pay:app:export', 3, 5, 1126, '', '', '', 0, '', '2021-11-10 01:13:31', '', '2021-11-10 01:13:31', b'0', 0); -INSERT INTO `sys_menu` VALUES (1132, '秘钥解æž', 'pay:channel:parsing', 3, 6, 1129, '', '', '', 0, '1', '2021-11-08 15:15:47', '1', '2021-11-08 15:15:47', b'0', 0); -INSERT INTO `sys_menu` VALUES (1133, 'æ”¯ä»˜å•†æˆ·ä¿¡æ¯æŸ¥è¯¢', 'pay:merchant:query', 3, 1, 1132, '', '', '', 0, '', '2021-11-10 01:13:41', '', '2021-11-10 01:13:41', b'0', 0); -INSERT INTO `sys_menu` VALUES (1134, '支付商户信æ¯åˆ›å»º', 'pay:merchant:create', 3, 2, 1132, '', '', '', 0, '', '2021-11-10 01:13:41', '', '2021-11-10 01:13:41', b'0', 0); -INSERT INTO `sys_menu` VALUES (1135, 'æ”¯ä»˜å•†æˆ·ä¿¡æ¯æ›´æ–°', 'pay:merchant:update', 3, 3, 1132, '', '', '', 0, '', '2021-11-10 01:13:41', '', '2021-11-10 01:13:41', b'0', 0); -INSERT INTO `sys_menu` VALUES (1136, '支付商户信æ¯åˆ é™¤', 'pay:merchant:delete', 3, 4, 1132, '', '', '', 0, '', '2021-11-10 01:13:41', '', '2021-11-10 01:13:41', b'0', 0); -INSERT INTO `sys_menu` VALUES (1137, '支付商户信æ¯å¯¼å‡º', 'pay:merchant:export', 3, 5, 1132, '', '', '', 0, '', '2021-11-10 01:13:41', '', '2021-11-10 01:13:41', b'0', 0); -INSERT INTO `sys_menu` VALUES (1138, '租户管ç†', '', 2, 0, 1, 'tenant', 'peoples', 'system/tenant/index', 0, '', '2021-12-14 12:31:43', '1', '2021-12-14 20:32:32', b'0', 0); -INSERT INTO `sys_menu` VALUES (1139, '租户查询', 'system:tenant:query', 3, 1, 1138, '', '', '', 0, '', '2021-12-14 12:31:44', '', '2021-12-14 12:31:44', b'0', 0); -INSERT INTO `sys_menu` VALUES (1140, '租户创建', 'system:tenant:create', 3, 2, 1138, '', '', '', 0, '', '2021-12-14 12:31:44', '', '2021-12-14 12:31:44', b'0', 0); -INSERT INTO `sys_menu` VALUES (1141, '租户更新', 'system:tenant:update', 3, 3, 1138, '', '', '', 0, '', '2021-12-14 12:31:44', '', '2021-12-14 12:31:44', b'0', 0); -INSERT INTO `sys_menu` VALUES (1142, '租户删除', 'system:tenant:delete', 3, 4, 1138, '', '', '', 0, '', '2021-12-14 12:31:44', '', '2021-12-14 12:31:44', b'0', 0); -INSERT INTO `sys_menu` VALUES (1143, '租户导出', 'system:tenant:export', 3, 5, 1138, '', '', '', 0, '', '2021-12-14 12:31:44', '', '2021-12-14 12:31:44', b'0', 0); -INSERT INTO `sys_menu` VALUES (1144, '支付应用信æ¯ç®¡ç†', '', 2, 0, 1117, 'app', '', 'pay/app/index', 0, '', '2021-12-25 08:26:31', '', '2021-12-25 08:48:05', b'1', 0); -INSERT INTO `sys_menu` VALUES (1145, 'æ”¯ä»˜åº”ç”¨ä¿¡æ¯æŸ¥è¯¢', 'pay:app:query', 3, 1, 1144, '', '', '', 0, '', '2021-12-25 08:26:31', '', '2021-12-25 08:47:53', b'1', 0); -INSERT INTO `sys_menu` VALUES (1146, '支付应用信æ¯åˆ›å»º', 'pay:app:create', 3, 2, 1144, '', '', '', 0, '', '2021-12-25 08:26:31', '', '2021-12-25 08:47:51', b'1', 0); -INSERT INTO `sys_menu` VALUES (1147, 'æ”¯ä»˜åº”ç”¨ä¿¡æ¯æ›´æ–°', 'pay:app:update', 3, 3, 1144, '', '', '', 0, '', '2021-12-25 08:26:31', '', '2021-12-25 08:47:48', b'1', 0); -INSERT INTO `sys_menu` VALUES (1148, '支付应用信æ¯åˆ é™¤', 'pay:app:delete', 3, 4, 1144, '', '', '', 0, '', '2021-12-25 08:26:31', '', '2021-12-25 08:47:46', b'1', 0); -INSERT INTO `sys_menu` VALUES (1149, '支付应用信æ¯å¯¼å‡º', 'pay:app:export', 3, 5, 1144, '', '', '', 0, '', '2021-12-25 08:26:31', '', '2021-12-25 08:47:43', b'1', 0); -INSERT INTO `sys_menu` VALUES (1150, '秘钥解æž', 'pay:channel:parsing', 3, 6, 1129, '', '', '', 0, '1', '2021-11-08 15:15:47', '1', '2021-11-08 15:15:47', b'0', 0); -INSERT INTO `sys_menu` VALUES (1156, 'æ”¯ä»˜è®¢å•æŸ¥è¯¢', 'pay:order:query', 3, 1, 1155, '', '', '', 0, '', '2021-12-25 08:29:01', '', '2021-12-25 08:29:01', b'0', 0); -INSERT INTO `sys_menu` VALUES (1157, '支付订å•创建', 'pay:order:create', 3, 2, 1155, '', '', '', 0, '', '2021-12-25 08:29:01', '', '2021-12-25 08:29:01', b'0', 0); -INSERT INTO `sys_menu` VALUES (1158, 'æ”¯ä»˜è®¢å•æ›´æ–°', 'pay:order:update', 3, 3, 1155, '', '', '', 0, '', '2021-12-25 08:29:01', '', '2021-12-25 08:29:01', b'0', 0); -INSERT INTO `sys_menu` VALUES (1159, '支付订å•删除', 'pay:order:delete', 3, 4, 1155, '', '', '', 0, '', '2021-12-25 08:29:01', '', '2021-12-25 08:29:01', b'0', 0); -INSERT INTO `sys_menu` VALUES (1160, '支付订å•导出', 'pay:order:export', 3, 5, 1155, '', '', '', 0, '', '2021-12-25 08:29:01', '', '2021-12-25 08:29:01', b'0', 0); -INSERT INTO `sys_menu` VALUES (1161, '退款订å•', '', 2, 3, 1117, 'refund', 'order', 'pay/refund/index', 0, '', '2021-12-25 08:29:07', '1', '2021-12-25 19:30:22', b'0', 0); -INSERT INTO `sys_menu` VALUES (1162, 'é€€æ¬¾è®¢å•æŸ¥è¯¢', 'pay:refund:query', 3, 1, 1161, '', '', '', 0, '', '2021-12-25 08:29:07', '', '2021-12-25 08:29:07', b'0', 0); -INSERT INTO `sys_menu` VALUES (1163, '退款订å•创建', 'pay:refund:create', 3, 2, 1161, '', '', '', 0, '', '2021-12-25 08:29:07', '', '2021-12-25 08:29:07', b'0', 0); -INSERT INTO `sys_menu` VALUES (1164, 'é€€æ¬¾è®¢å•æ›´æ–°', 'pay:refund:update', 3, 3, 1161, '', '', '', 0, '', '2021-12-25 08:29:07', '', '2021-12-25 08:29:07', b'0', 0); -INSERT INTO `sys_menu` VALUES (1165, '退款订å•删除', 'pay:refund:delete', 3, 4, 1161, '', '', '', 0, '', '2021-12-25 08:29:07', '', '2021-12-25 08:29:07', b'0', 0); -INSERT INTO `sys_menu` VALUES (1166, '退款订å•导出', 'pay:refund:export', 3, 5, 1161, '', '', '', 0, '', '2021-12-25 08:29:07', '', '2021-12-25 08:29:07', b'0', 0); -INSERT INTO `sys_menu` VALUES (1173, '支付订å•', '', 2, 2, 1117, 'order', 'pay', 'pay/order/index', 0, '', '2021-12-25 08:49:43', '1', '2021-12-25 19:29:54', b'0', 0); -INSERT INTO `sys_menu` VALUES (1174, 'æ”¯ä»˜è®¢å•æŸ¥è¯¢', 'pay:order:query', 3, 1, 1173, '', '', '', 0, '', '2021-12-25 08:49:43', '', '2021-12-25 08:49:43', b'0', 0); -INSERT INTO `sys_menu` VALUES (1175, '支付订å•创建', 'pay:order:create', 3, 2, 1173, '', '', '', 0, '', '2021-12-25 08:49:43', '', '2021-12-25 08:49:43', b'0', 0); -INSERT INTO `sys_menu` VALUES (1176, 'æ”¯ä»˜è®¢å•æ›´æ–°', 'pay:order:update', 3, 3, 1173, '', '', '', 0, '', '2021-12-25 08:49:43', '', '2021-12-25 08:49:43', b'0', 0); -INSERT INTO `sys_menu` VALUES (1177, '支付订å•删除', 'pay:order:delete', 3, 4, 1173, '', '', '', 0, '', '2021-12-25 08:49:43', '', '2021-12-25 08:49:43', b'0', 0); -INSERT INTO `sys_menu` VALUES (1178, '支付订å•导出', 'pay:order:export', 3, 5, 1173, '', '', '', 0, '', '2021-12-25 08:49:43', '', '2021-12-25 08:49:43', b'0', 0); -INSERT INTO `sys_menu` VALUES (1179, '商户信æ¯', '', 2, 0, 1117, 'merchant', 'merchant', 'pay/merchant/index', 0, '', '2021-12-25 09:01:44', '1', '2021-12-25 17:02:13', b'0', 0); -INSERT INTO `sys_menu` VALUES (1180, 'æ”¯ä»˜å•†æˆ·ä¿¡æ¯æŸ¥è¯¢', 'pay:merchant:query', 3, 1, 1179, '', '', '', 0, '', '2021-12-25 09:01:44', '', '2021-12-25 09:01:44', b'0', 0); -INSERT INTO `sys_menu` VALUES (1181, '支付商户信æ¯åˆ›å»º', 'pay:merchant:create', 3, 2, 1179, '', '', '', 0, '', '2021-12-25 09:01:44', '', '2021-12-25 09:01:44', b'0', 0); -INSERT INTO `sys_menu` VALUES (1182, 'æ”¯ä»˜å•†æˆ·ä¿¡æ¯æ›´æ–°', 'pay:merchant:update', 3, 3, 1179, '', '', '', 0, '', '2021-12-25 09:01:44', '', '2021-12-25 09:01:44', b'0', 0); -INSERT INTO `sys_menu` VALUES (1183, '支付商户信æ¯åˆ é™¤', 'pay:merchant:delete', 3, 4, 1179, '', '', '', 0, '', '2021-12-25 09:01:44', '', '2021-12-25 09:01:44', b'0', 0); -INSERT INTO `sys_menu` VALUES (1184, '支付商户信æ¯å¯¼å‡º', 'pay:merchant:export', 3, 5, 1179, '', '', '', 0, '', '2021-12-25 09:01:44', '', '2021-12-25 09:01:44', b'0', 0); -INSERT INTO `sys_menu` VALUES (1185, '工作æµç¨‹', '', 1, 50, 0, '/bpm', 'tool', NULL, 0, '1', '2021-12-30 20:26:36', '103', '2022-01-14 18:44:00', b'0', 0); -INSERT INTO `sys_menu` VALUES (1186, 'æµç¨‹ç®¡ç†', '', 1, 10, 1185, 'manager', 'nested', NULL, 0, '1', '2021-12-30 20:28:30', '1', '2021-12-30 20:28:57', b'0', 0); -INSERT INTO `sys_menu` VALUES (1187, 'æµç¨‹è¡¨å•', '', 2, 0, 1186, 'form', 'form', 'bpm/form/index', 0, '', '2021-12-30 12:38:22', '1', '2021-12-31 23:20:38', b'0', 0); -INSERT INTO `sys_menu` VALUES (1188, 'è¡¨å•æŸ¥è¯¢', 'bpm:form:query', 3, 1, 1187, '', '', '', 0, '', '2021-12-30 12:38:22', '1', '2022-01-03 18:59:53', b'0', 0); -INSERT INTO `sys_menu` VALUES (1189, '表å•创建', 'bpm:form:create', 3, 2, 1187, '', '', '', 0, '', '2021-12-30 12:38:22', '1', '2022-01-03 18:59:59', b'0', 0); -INSERT INTO `sys_menu` VALUES (1190, 'è¡¨å•æ›´æ–°', 'bpm:form:update', 3, 3, 1187, '', '', '', 0, '', '2021-12-30 12:38:22', '1', '2022-01-03 19:00:21', b'0', 0); -INSERT INTO `sys_menu` VALUES (1191, '表å•删除', 'bpm:form:delete', 3, 4, 1187, '', '', '', 0, '', '2021-12-30 12:38:22', '1', '2022-01-03 19:00:26', b'0', 0); -INSERT INTO `sys_menu` VALUES (1192, '表å•导出', 'bpm:form:export', 3, 5, 1187, '', '', '', 0, '', '2021-12-30 12:38:22', '1', '2022-01-03 19:00:33', b'0', 0); -INSERT INTO `sys_menu` VALUES (1193, 'æµç¨‹æ¨¡åž‹', '', 2, 5, 1186, 'model', 'guide', 'bpm/model/index', 0, '1', '2021-12-31 23:24:58', '103', '2022-01-14 10:14:38', b'0', 0); -INSERT INTO `sys_menu` VALUES (1194, '模型查询', 'bpm:model:query', 3, 1, 1193, '', '', '', 0, '1', '2022-01-03 19:01:10', '1', '2022-01-03 19:01:10', b'0', 0); -INSERT INTO `sys_menu` VALUES (1195, '模型创建', 'bpm:model:create', 3, 2, 1193, '', '', '', 0, '1', '2022-01-03 19:01:24', '1', '2022-01-03 19:02:02', b'0', 0); -INSERT INTO `sys_menu` VALUES (1196, '模型导入', 'bpm:model:import', 3, 3, 1193, '', '', '', 0, '1', '2022-01-03 19:01:35', '1', '2022-01-03 19:02:11', b'0', 0); -INSERT INTO `sys_menu` VALUES (1197, '模型更新', 'bpm:model:update', 3, 4, 1193, '', '', '', 0, '1', '2022-01-03 19:02:28', '1', '2022-01-03 19:02:28', b'0', 0); -INSERT INTO `sys_menu` VALUES (1198, '模型删除', 'bpm:model:delete', 3, 5, 1193, '', '', '', 0, '1', '2022-01-03 19:02:43', '1', '2022-01-03 19:02:43', b'0', 0); -INSERT INTO `sys_menu` VALUES (1199, '模型å‘布', 'bpm:model:deploy', 3, 6, 1193, '', '', '', 0, '1', '2022-01-03 19:03:24', '1', '2022-01-03 19:03:24', b'0', 0); -INSERT INTO `sys_menu` VALUES (1200, '任务管ç†', '', 1, 20, 1185, 'task', 'cascader', NULL, 0, '1', '2022-01-07 23:51:48', '1', '2022-01-07 23:51:48', b'0', 0); -INSERT INTO `sys_menu` VALUES (1201, '我的æµç¨‹', '', 2, 0, 1200, 'my', 'people', 'bpm/processInstance/index', 0, '', '2022-01-07 15:53:44', '1', '2022-01-08 16:44:41', b'0', 0); -INSERT INTO `sys_menu` VALUES (1202, 'æµç¨‹å®žä¾‹çš„æŸ¥è¯¢', 'bpm:process-instance:query', 3, 1, 1201, '', '', '', 0, '', '2022-01-07 15:53:44', '1', '2022-01-07 23:56:29', b'0', 0); -INSERT INTO `sys_menu` VALUES (1203, '工作æµçš„æµç¨‹å®žä¾‹çš„æ‹“å±•åˆ›å»º', 'bpm:process-instance-ext:create', 3, 2, 1201, '', '', '', 0, '', '2022-01-07 15:53:44', '', '2022-01-07 15:56:08', b'1', 0); -INSERT INTO `sys_menu` VALUES (1204, '工作æµçš„æµç¨‹å®žä¾‹çš„æ‹“å±•æ›´æ–°', 'bpm:process-instance-ext:update', 3, 3, 1201, '', '', '', 0, '', '2022-01-07 15:53:44', '', '2022-01-07 15:56:00', b'1', 0); -INSERT INTO `sys_menu` VALUES (1205, '工作æµçš„æµç¨‹å®žä¾‹çš„æ‹“å±•åˆ é™¤', 'bpm:process-instance-ext:delete', 3, 4, 1201, '', '', '', 0, '', '2022-01-07 15:53:44', '', '2022-01-07 15:55:56', b'1', 0); -INSERT INTO `sys_menu` VALUES (1206, '工作æµçš„æµç¨‹å®žä¾‹çš„æ‹“å±•å¯¼å‡º', 'bpm:process-instance-ext:export', 3, 5, 1201, '', '', '', 0, '', '2022-01-07 15:53:44', '', '2022-01-07 15:55:51', b'1', 0); -INSERT INTO `sys_menu` VALUES (1207, '待办任务', '', 2, 10, 1200, 'todo', 'eye-open', 'bpm/task/todo', 0, '1', '2022-01-08 10:33:37', '1', '2022-01-08 10:33:48', b'0', 0); -INSERT INTO `sys_menu` VALUES (1208, '已办任务', '', 2, 20, 1200, 'done', 'eye', 'bpm/task/done', 0, '1', '2022-01-08 10:34:13', '1', '2022-01-08 10:34:13', b'0', 0); -INSERT INTO `sys_menu` VALUES (1209, '用户分组', '', 2, 2, 1186, 'user-group', 'people', 'bpm/group/index', 0, '', '2022-01-14 02:14:20', '103', '2022-01-14 10:15:43', b'0', 0); -INSERT INTO `sys_menu` VALUES (1210, '用户组查询', 'bpm:user-group:query', 3, 1, 1209, '', '', '', 0, '', '2022-01-14 02:14:20', '', '2022-01-14 02:14:20', b'0', 0); -INSERT INTO `sys_menu` VALUES (1211, '用户组创建', 'bpm:user-group:create', 3, 2, 1209, '', '', '', 0, '', '2022-01-14 02:14:20', '', '2022-01-14 02:14:20', b'0', 0); -INSERT INTO `sys_menu` VALUES (1212, '用户组更新', 'bpm:user-group:update', 3, 3, 1209, '', '', '', 0, '', '2022-01-14 02:14:20', '', '2022-01-14 02:14:20', b'0', 0); -INSERT INTO `sys_menu` VALUES (1213, '用户组删除', 'bpm:user-group:delete', 3, 4, 1209, '', '', '', 0, '', '2022-01-14 02:14:20', '', '2022-01-14 02:14:20', b'0', 0); -INSERT INTO `sys_menu` VALUES (1214, '用户组导出', 'bpm:user-group:export', 3, 5, 1209, '', '', '', 0, '', '2022-01-14 02:14:20', '', '2022-01-14 02:14:58', b'1', 0); -INSERT INTO `sys_menu` VALUES (1215, 'æµç¨‹å®šä¹‰æŸ¥è¯¢', 'bpm:process-definition:query', 3, 10, 1193, '', '', '', 0, '1', '2022-01-23 00:21:43', '1', '2022-01-23 00:26:30', b'0', 0); -INSERT INTO `sys_menu` VALUES (1216, 'æµç¨‹ä»»åŠ¡åˆ†é…规则查询', 'bpm:task-assign-rule:query', 3, 20, 1193, '', '', '', 0, '1', '2022-01-23 00:26:53', '1', '2022-01-23 00:26:53', b'0', 0); -INSERT INTO `sys_menu` VALUES (1217, 'æµç¨‹ä»»åŠ¡åˆ†é…规则创建', 'bpm:task-assign-rule:create', 3, 21, 1193, '', '', '', 0, '1', '2022-01-23 00:28:15', '1', '2022-01-23 00:28:15', b'0', 0); -INSERT INTO `sys_menu` VALUES (1218, 'æµç¨‹ä»»åŠ¡åˆ†é…规则更新', 'bpm:task-assign-rule:update', 3, 22, 1193, '', '', '', 0, '1', '2022-01-23 00:28:41', '1', '2022-01-23 00:28:41', b'0', 0); -INSERT INTO `sys_menu` VALUES (1219, 'æµç¨‹å®žä¾‹çš„创建', 'bpm:process-instance:create', 3, 2, 1201, '', '', '', 0, '1', '2022-01-23 00:36:15', '1', '2022-01-23 00:36:15', b'0', 0); -INSERT INTO `sys_menu` VALUES (1220, 'æµç¨‹å®žä¾‹çš„å–æ¶ˆ', 'bpm:process-instance:cancel', 3, 3, 1201, '', '', '', 0, '1', '2022-01-23 00:36:33', '1', '2022-01-23 00:36:33', b'0', 0); -INSERT INTO `sys_menu` VALUES (1221, 'æµç¨‹ä»»åŠ¡çš„æŸ¥è¯¢', 'bpm:task:query', 3, 1, 1207, '', '', '', 0, '1', '2022-01-23 00:38:52', '1', '2022-01-23 00:38:52', b'0', 0); -INSERT INTO `sys_menu` VALUES (1222, 'æµç¨‹ä»»åŠ¡çš„æ›´æ–°', 'bpm:task:update', 3, 2, 1207, '', '', '', 0, '1', '2022-01-23 00:39:24', '1', '2022-01-23 00:39:30', b'0', 0); +INSERT INTO `system_menu` VALUES (1, '系统管ç†', '', 1, 10, 0, '/system', 'system', NULL, 0, 'admin', '2021-01-05 17:03:48', '1', '2021-12-25 16:43:08', b'0', 0); +INSERT INTO `system_menu` VALUES (2, '基础设施', '', 1, 20, 0, '/infra', 'monitor', NULL, 0, 'admin', '2021-01-05 17:03:48', '1', '2021-12-25 16:43:18', b'0', 0); +INSERT INTO `system_menu` VALUES (3, 'ç ”å‘工具', '', 1, 30, 0, '/tool', 'tool', NULL, 0, 'admin', '2021-01-05 17:03:48', '1', '2021-12-25 16:43:13', b'0', 0); +INSERT INTO `system_menu` VALUES (4, 'è‹¥ä¾å®˜ç½‘', '', 1, 4, 0, 'http://ruoyi.vip', 'guide', NULL, 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-20 21:54:28', b'1', 0); +INSERT INTO `system_menu` VALUES (5, 'OA 示例', '', 1, 40, 1185, 'oa', 'people', NULL, 0, 'admin', '2021-09-20 16:26:19', '1', '2022-01-22 18:32:50', b'0', 0); +INSERT INTO `system_menu` VALUES (100, '用户管ç†', 'system:user:list', 2, 1, 1, 'user', 'user', 'system/user/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:45', b'0', 0); +INSERT INTO `system_menu` VALUES (101, '角色管ç†', '', 2, 2, 1, 'role', 'peoples', 'system/role/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 22:04:49', b'0', 0); +INSERT INTO `system_menu` VALUES (102, 'èœå•管ç†', '', 2, 3, 1, 'menu', 'tree-table', 'system/menu/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 22:04:28', b'0', 0); +INSERT INTO `system_menu` VALUES (103, '部门管ç†', '', 2, 4, 1, 'dept', 'tree', 'system/dept/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 20:25:19', b'0', 0); +INSERT INTO `system_menu` VALUES (104, 'å²—ä½ç®¡ç†', '', 2, 5, 1, 'post', 'post', 'system/post/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 20:38:23', b'0', 0); +INSERT INTO `system_menu` VALUES (105, '字典管ç†', '', 2, 6, 1, 'dict', 'dict', 'system/dict/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 21:16:58', b'0', 0); +INSERT INTO `system_menu` VALUES (106, 'é…置管ç†', '', 2, 1, 2, 'config', 'edit', 'infra/config/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-10 01:12:10', b'0', 0); +INSERT INTO `system_menu` VALUES (107, '通知公告', '', 2, 8, 1, 'notice', 'message', 'system/notice/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 21:51:39', b'0', 0); +INSERT INTO `system_menu` VALUES (108, '审计日志', '', 1, 9, 1, 'log', 'log', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-04-26 22:34:58', b'0', 0); +INSERT INTO `system_menu` VALUES (109, '在线用户', 'system:user-session:list', 2, 10, 1, 'user-session', 'online', 'system/session/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-26 08:21:20', b'0', 0); +INSERT INTO `system_menu` VALUES (110, '定时任务', '', 2, 2, 2, 'job', 'job', 'infra/job/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-10 01:25:51', b'0', 0); +INSERT INTO `system_menu` VALUES (111, 'MySQL 监控', '', 2, 4, 2, 'druid', 'druid', 'infra/druid/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-26 02:18:32', b'0', 0); +INSERT INTO `system_menu` VALUES (112, 'Java 监控', '', 2, 6, 2, 'admin-server', 'server', 'infra/server', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-26 02:18:41', b'0', 0); +INSERT INTO `system_menu` VALUES (113, 'Redis 监控', '', 2, 5, 2, 'redis', 'redis', 'infra/redis/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-26 02:18:37', b'0', 0); +INSERT INTO `system_menu` VALUES (114, 'è¡¨å•æž„建', 'tool:build:list', 2, 1, 3, 'build', 'build', 'tool/build/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:45', b'0', 0); +INSERT INTO `system_menu` VALUES (115, '代ç ç”Ÿæˆ', 'tool:codegen:query', 2, 0, 3, 'codegen', 'code', 'tool/codegen/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-03-06 03:43:14', b'0', 0); +INSERT INTO `system_menu` VALUES (116, '系统接å£', 'tool:swagger:list', 2, 3, 3, 'swagger', 'swagger', 'tool/swagger/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:45', b'0', 0); +INSERT INTO `system_menu` VALUES (500, 'æ“作日志', '', 2, 1, 108, 'operate-log', 'form', 'system/operatelog/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 21:42:56', b'0', 0); +INSERT INTO `system_menu` VALUES (501, '登录日志', '', 2, 2, 108, 'login-log', 'logininfor', 'system/loginlog/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 21:39:23', b'0', 0); +INSERT INTO `system_menu` VALUES (1001, '用户查询', 'system:user:query', 3, 1, 100, '', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0', 0); +INSERT INTO `system_menu` VALUES (1002, '用户新增', 'system:user:create', 3, 2, 100, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 22:21:47', b'0', 0); +INSERT INTO `system_menu` VALUES (1003, '用户修改', 'system:user:update', 3, 3, 100, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 22:21:54', b'0', 0); +INSERT INTO `system_menu` VALUES (1004, '用户删除', 'system:user:delete', 3, 4, 100, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 22:22:03', b'0', 0); +INSERT INTO `system_menu` VALUES (1005, '用户导出', 'system:user:export', 3, 5, 100, '', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0', 0); +INSERT INTO `system_menu` VALUES (1006, '用户导入', 'system:user:import', 3, 6, 100, '', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0', 0); +INSERT INTO `system_menu` VALUES (1007, 'é‡ç½®å¯†ç ', 'system:user:update-password', 3, 7, 100, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 22:20:55', b'0', 0); +INSERT INTO `system_menu` VALUES (1008, '角色查询', 'system:role:query', 3, 1, 101, '', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0', 0); +INSERT INTO `system_menu` VALUES (1009, '角色新增', 'system:role:create', 3, 2, 101, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 22:05:24', b'0', 0); +INSERT INTO `system_menu` VALUES (1010, '角色修改', 'system:role:update', 3, 3, 101, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 22:05:14', b'0', 0); +INSERT INTO `system_menu` VALUES (1011, '角色删除', 'system:role:delete', 3, 4, 101, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 22:05:05', b'0', 0); +INSERT INTO `system_menu` VALUES (1012, '角色导出', 'system:role:export', 3, 5, 101, '', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0', 0); +INSERT INTO `system_menu` VALUES (1013, 'èœå•查询', 'system:menu:query', 3, 1, 102, '', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0', 0); +INSERT INTO `system_menu` VALUES (1014, 'èœå•新增', 'system:menu:create', 3, 2, 102, '', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-03-13 15:49:36', b'0', 0); +INSERT INTO `system_menu` VALUES (1015, 'èœå•修改', 'system:menu:update', 3, 3, 102, '', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-03-13 15:49:30', b'0', 0); +INSERT INTO `system_menu` VALUES (1016, 'èœå•删除', 'system:menu:delete', 3, 4, 102, '', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-03-13 15:49:45', b'0', 0); +INSERT INTO `system_menu` VALUES (1017, '部门查询', 'system:dept:query', 3, 1, 103, '', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0', 0); +INSERT INTO `system_menu` VALUES (1018, '部门新增', 'system:dept:create', 3, 2, 103, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 20:25:30', b'0', 0); +INSERT INTO `system_menu` VALUES (1019, '部门修改', 'system:dept:update', 3, 3, 103, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 20:25:37', b'0', 0); +INSERT INTO `system_menu` VALUES (1020, '部门删除', 'system:dept:delete', 3, 4, 103, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 20:25:43', b'0', 0); +INSERT INTO `system_menu` VALUES (1021, '岗使Ÿ¥è¯¢', 'system:post:query', 3, 1, 104, '', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0', 0); +INSERT INTO `system_menu` VALUES (1022, '岗使–°å¢ž', 'system:post:create', 3, 2, 104, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 20:38:34', b'0', 0); +INSERT INTO `system_menu` VALUES (1023, 'å²—ä½ä¿®æ”¹', 'system:post:update', 3, 3, 104, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 20:38:41', b'0', 0); +INSERT INTO `system_menu` VALUES (1024, 'å²—ä½åˆ é™¤', 'system:post:delete', 3, 4, 104, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 20:38:48', b'0', 0); +INSERT INTO `system_menu` VALUES (1025, 'å²—ä½å¯¼å‡º', 'system:post:export', 3, 5, 104, '', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0', 0); +INSERT INTO `system_menu` VALUES (1026, '字典查询', 'system:dict:query', 3, 1, 105, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0', 0); +INSERT INTO `system_menu` VALUES (1027, '字典新增', 'system:dict:create', 3, 2, 105, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 21:19:29', b'0', 0); +INSERT INTO `system_menu` VALUES (1028, '字典修改', 'system:dict:update', 3, 3, 105, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 21:19:36', b'0', 0); +INSERT INTO `system_menu` VALUES (1029, '字典删除', 'system:dict:delete', 3, 4, 105, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 21:19:45', b'0', 0); +INSERT INTO `system_menu` VALUES (1030, '字典导出', 'system:dict:export', 3, 5, 105, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0', 0); +INSERT INTO `system_menu` VALUES (1031, 'é…置查询', 'infra:config:query', 3, 1, 106, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-20 14:34:00', b'0', 0); +INSERT INTO `system_menu` VALUES (1032, 'é…置新增', 'infra:config:create', 3, 2, 106, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-10 01:12:18', b'0', 0); +INSERT INTO `system_menu` VALUES (1033, 'é…置修改', 'infra:config:update', 3, 3, 106, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-10 01:12:30', b'0', 0); +INSERT INTO `system_menu` VALUES (1034, 'é…置删除', 'infra:config:delete', 3, 4, 106, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-10 01:12:36', b'0', 0); +INSERT INTO `system_menu` VALUES (1035, 'é…置导出', 'infra:config:export', 3, 5, 106, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-20 14:34:19', b'0', 0); +INSERT INTO `system_menu` VALUES (1036, '公告查询', 'system:notice:query', 3, 1, 107, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0', 0); +INSERT INTO `system_menu` VALUES (1037, '公告新增', 'system:notice:create', 3, 2, 107, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 21:51:48', b'0', 0); +INSERT INTO `system_menu` VALUES (1038, '公告修改', 'system:notice:update', 3, 3, 107, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 21:51:55', b'0', 0); +INSERT INTO `system_menu` VALUES (1039, '公告删除', 'system:notice:delete', 3, 4, 107, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 21:52:01', b'0', 0); +INSERT INTO `system_menu` VALUES (1040, 'æ“作查询', 'system:operate-log:query', 3, 1, 500, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-16 18:28:10', b'0', 0); +INSERT INTO `system_menu` VALUES (1042, '日志导出', 'system:operate-log:export', 3, 2, 500, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-16 18:28:23', b'0', 0); +INSERT INTO `system_menu` VALUES (1043, '登录查询', 'system:login-log:query', 3, 1, 501, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-18 05:29:26', b'0', 0); +INSERT INTO `system_menu` VALUES (1045, '日志导出', 'system:login-log:export', 3, 3, 501, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-18 05:29:30', b'0', 0); +INSERT INTO `system_menu` VALUES (1046, '在线查询', 'system:user-session:list', 3, 1, 109, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-26 08:22:37', b'0', 0); +INSERT INTO `system_menu` VALUES (1047, '批é‡å¼ºé€€', 'monitor:online:batchLogout', 3, 2, 109, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-26 08:21:46', b'1', 0); +INSERT INTO `system_menu` VALUES (1048, '啿¡å¼ºé€€', 'system:user-session:delete', 3, 3, 109, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-26 08:22:54', b'0', 0); +INSERT INTO `system_menu` VALUES (1049, '任务查询', 'monitor:job:query', 3, 1, 110, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-07 13:01:42', b'1', 0); +INSERT INTO `system_menu` VALUES (1050, '任务新增', 'infra:job:create', 3, 2, 110, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-07 13:01:58', b'0', 0); +INSERT INTO `system_menu` VALUES (1051, '任务修改', 'infra:job:update', 3, 3, 110, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-07 13:02:10', b'0', 0); +INSERT INTO `system_menu` VALUES (1052, '任务删除', 'infra:job:delete', 3, 4, 110, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-07 13:02:22', b'0', 0); +INSERT INTO `system_menu` VALUES (1053, '状æ€ä¿®æ”¹', 'infra:job:update', 3, 5, 110, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-07 13:02:38', b'0', 0); +INSERT INTO `system_menu` VALUES (1054, '任务导出', 'infra:job:export', 3, 7, 110, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-07 13:02:51', b'0', 0); +INSERT INTO `system_menu` VALUES (1055, 'ç”ŸæˆæŸ¥è¯¢', 'tool:gen:query', 3, 1, 115, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-06 21:23:25', b'1', 0); +INSERT INTO `system_menu` VALUES (1056, '生æˆä¿®æ”¹', 'tool:codegen:update', 3, 2, 115, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-06 21:23:41', b'0', 0); +INSERT INTO `system_menu` VALUES (1057, '生æˆåˆ é™¤', 'tool:codegen:delete', 3, 3, 115, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-06 21:24:02', b'0', 0); +INSERT INTO `system_menu` VALUES (1058, '导入代ç ', 'tool:codegen:create', 3, 2, 115, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-06 21:23:50', b'0', 0); +INSERT INTO `system_menu` VALUES (1059, '预览代ç ', 'tool:codegen:preview', 3, 4, 115, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-06 21:24:10', b'0', 0); +INSERT INTO `system_menu` VALUES (1060, '生æˆä»£ç ', 'tool:codegen:download', 3, 5, 115, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-06 21:24:20', b'0', 0); +INSERT INTO `system_menu` VALUES (1063, '设置角色èœå•æƒé™', 'system:permission:assign-role-menu', 3, 6, 101, '', '', '', 0, '', '2021-01-06 17:53:44', '', '2021-01-06 17:55:23', b'0', 0); +INSERT INTO `system_menu` VALUES (1064, 'è®¾ç½®è§’è‰²æ•°æ®æƒé™', 'system:permission:assign-role-data-scope', 3, 7, 101, '', '', '', 0, '', '2021-01-06 17:56:31', '', '2021-01-06 17:56:31', b'0', 0); +INSERT INTO `system_menu` VALUES (1065, '设置用户角色', 'system:permission:assign-user-role', 3, 8, 101, '', '', '', 0, '', '2021-01-07 10:23:28', '', '2021-01-07 10:23:28', b'0', 0); +INSERT INTO `system_menu` VALUES (1066, '获得 Redis 监控信æ¯', 'infra:redis:get-monitor-info', 3, 1, 113, '', '', '', 0, '', '2021-01-26 01:02:31', '', '2021-01-26 01:02:31', b'0', 0); +INSERT INTO `system_menu` VALUES (1067, '获得 Redis Key 列表', 'infra:redis:get-key-list', 3, 2, 113, '', '', '', 0, '', '2021-01-26 01:02:52', '', '2021-01-26 01:02:52', b'0', 0); +INSERT INTO `system_menu` VALUES (1070, '代ç ç”Ÿæˆç¤ºä¾‹', 'tool:test-demo:query', 2, 0, 3, 'test-demo', 'validCode', 'tool/testDemo/index', 0, '', '2021-02-06 12:42:49', '', '2021-03-06 03:45:22', b'0', 0); +INSERT INTO `system_menu` VALUES (1071, '测试示例表创建', 'tool:test-demo:create', 3, 1, 1070, '', '', '', 0, '', '2021-02-06 12:42:49', '', '2021-02-06 12:53:47', b'0', 0); +INSERT INTO `system_menu` VALUES (1072, '测试示例表更新', 'tool:test-demo:update', 3, 2, 1070, '', '', '', 0, '', '2021-02-06 12:42:49', '', '2021-02-06 12:53:51', b'0', 0); +INSERT INTO `system_menu` VALUES (1073, '测试示例表删除', 'tool:test-demo:delete', 3, 3, 1070, '', '', '', 0, '', '2021-02-06 12:42:49', '', '2021-02-06 12:53:58', b'0', 0); +INSERT INTO `system_menu` VALUES (1074, '测试示例表导出', 'tool:test-demo:export', 3, 4, 1070, '', '', '', 0, '', '2021-02-06 12:42:49', '', '2021-02-06 12:54:01', b'0', 0); +INSERT INTO `system_menu` VALUES (1075, '任务触å‘', 'infra:job:trigger', 3, 8, 110, '', '', '', 0, '', '2021-02-07 13:03:10', '', '2021-02-07 13:03:10', b'0', 0); +INSERT INTO `system_menu` VALUES (1076, 'æ•°æ®åº“文档', '', 2, 5, 3, 'db-doc', 'table', 'tool/dbDoc/index', 0, '', '2021-02-08 01:41:47', '', '2021-02-08 01:49:00', b'0', 0); +INSERT INTO `system_menu` VALUES (1077, '链路追踪', '', 2, 7, 2, 'skywalking', 'eye-open', 'infra/skywalking', 0, '', '2021-02-08 20:41:31', '', '2021-02-26 02:18:45', b'0', 0); +INSERT INTO `system_menu` VALUES (1078, '访问日志', '', 2, 1, 1083, 'api-access-log', 'log', 'infra/apiAccessLog/index', 0, '', '2021-02-26 01:32:59', '1', '2021-03-10 01:28:09', b'0', 0); +INSERT INTO `system_menu` VALUES (1079, 'API 访问日志表创建', 'system:api-access-log:create', 3, 1, 1078, '', '', '', 1, '', '2021-02-26 01:32:59', '', '2021-02-26 02:21:00', b'1', 0); +INSERT INTO `system_menu` VALUES (1080, 'API 访问日志表更新', 'system:api-access-log:update', 3, 2, 1078, '', '', '', 1, '', '2021-02-26 01:32:59', '', '2021-02-26 02:21:08', b'1', 0); +INSERT INTO `system_menu` VALUES (1081, 'API 访问日志表删除', 'system:api-access-log:delete', 3, 3, 1078, '', '', '', 1, '', '2021-02-26 01:32:59', '', '2021-02-26 02:21:27', b'1', 0); +INSERT INTO `system_menu` VALUES (1082, '日志导出', 'infra:api-access-log:export', 3, 2, 1078, '', '', '', 0, '', '2021-02-26 01:32:59', '1', '2021-03-10 01:28:13', b'0', 0); +INSERT INTO `system_menu` VALUES (1083, 'API 日志', '', 2, 3, 2, 'log', 'log', NULL, 0, '', '2021-02-26 02:18:24', '', '2021-02-26 02:20:17', b'0', 0); +INSERT INTO `system_menu` VALUES (1084, '错误日志', 'infra:api-error-log:query', 2, 2, 1083, 'api-error-log', 'log', 'infra/apiErrorLog/index', 0, '', '2021-02-26 07:53:20', '', '2021-02-26 07:54:40', b'0', 0); +INSERT INTO `system_menu` VALUES (1085, '日志处ç†', 'infra:api-error-log:update-status', 3, 2, 1084, '', '', '', 0, '', '2021-02-26 07:53:20', '1', '2021-03-10 01:28:18', b'0', 0); +INSERT INTO `system_menu` VALUES (1086, '日志导出', 'infra:api-error-log:export', 3, 3, 1084, '', '', '', 0, '', '2021-02-26 07:53:20', '1', '2021-03-10 01:28:21', b'0', 0); +INSERT INTO `system_menu` VALUES (1087, '任务查询', 'infra:job:query', 3, 1, 110, '', '', '', 0, '1', '2021-03-10 01:26:19', '1', '2021-03-10 01:26:19', b'0', 0); +INSERT INTO `system_menu` VALUES (1088, '日志查询', 'infra:api-access-log:query', 3, 1, 1078, '', '', '', 0, '1', '2021-03-10 01:28:04', '1', '2021-03-10 01:29:38', b'0', 0); +INSERT INTO `system_menu` VALUES (1089, '日志查询', 'infra:api-error-log:query', 3, 1, 1084, '', '', '', 0, '1', '2021-03-10 01:29:09', '1', '2021-03-10 01:29:09', b'0', 0); +INSERT INTO `system_menu` VALUES (1090, '文件管ç†', '', 2, 0, 2, 'file', 'upload', 'infra/file/index', 0, '', '2021-03-12 20:16:20', '1', '2021-03-13 11:07:05', b'0', 0); +INSERT INTO `system_menu` VALUES (1091, '文件查询', 'infra:file:query', 3, 1, 1090, '', '', '', 0, '', '2021-03-12 20:16:20', '', '2021-03-12 20:16:20', b'0', 0); +INSERT INTO `system_menu` VALUES (1092, '文件删除', 'infra:file:delete', 3, 4, 1090, '', '', '', 0, '', '2021-03-12 20:16:20', '', '2021-03-12 20:16:20', b'0', 0); +INSERT INTO `system_menu` VALUES (1093, '短信管ç†', '', 1, 11, 1, 'sms', 'validCode', NULL, 0, '1', '2021-04-05 01:10:16', '1', '2021-04-05 01:11:38', b'0', 0); +INSERT INTO `system_menu` VALUES (1094, '短信渠é“', '', 2, 0, 1093, 'sms-channel', 'phone', 'system/sms/smsChannel', 0, '', '2021-04-01 11:07:15', '1', '2021-04-09 23:44:07', b'0', 0); +INSERT INTO `system_menu` VALUES (1095, 'çŸ­ä¿¡æ¸ é“æŸ¥è¯¢', 'system:sms-channel:query', 3, 1, 1094, '', '', '', 0, '', '2021-04-01 11:07:15', '', '2021-04-01 11:07:15', b'0', 0); +INSERT INTO `system_menu` VALUES (1096, '短信渠é“创建', 'system:sms-channel:create', 3, 2, 1094, '', '', '', 0, '', '2021-04-01 11:07:15', '', '2021-04-01 11:07:15', b'0', 0); +INSERT INTO `system_menu` VALUES (1097, 'çŸ­ä¿¡æ¸ é“æ›´æ–°', 'system:sms-channel:update', 3, 3, 1094, '', '', '', 0, '', '2021-04-01 11:07:15', '', '2021-04-01 11:07:15', b'0', 0); +INSERT INTO `system_menu` VALUES (1098, '短信渠é“删除', 'system:sms-channel:delete', 3, 4, 1094, '', '', '', 0, '', '2021-04-01 11:07:15', '', '2021-04-01 11:07:15', b'0', 0); +INSERT INTO `system_menu` VALUES (1100, '短信模æ¿', '', 2, 1, 1093, 'sms-template', 'phone', 'system/sms/smsTemplate', 0, '', '2021-04-01 17:35:17', '1', '2021-04-11 19:34:21', b'0', 0); +INSERT INTO `system_menu` VALUES (1101, 'çŸ­ä¿¡æ¨¡æ¿æŸ¥è¯¢', 'system:sms-template:query', 3, 1, 1100, '', '', '', 0, '', '2021-04-01 17:35:17', '', '2021-04-01 17:35:17', b'0', 0); +INSERT INTO `system_menu` VALUES (1102, '短信模æ¿åˆ›å»º', 'system:sms-template:create', 3, 2, 1100, '', '', '', 0, '', '2021-04-01 17:35:17', '', '2021-04-01 17:35:17', b'0', 0); +INSERT INTO `system_menu` VALUES (1103, 'çŸ­ä¿¡æ¨¡æ¿æ›´æ–°', 'system:sms-template:update', 3, 3, 1100, '', '', '', 0, '', '2021-04-01 17:35:17', '', '2021-04-01 17:35:17', b'0', 0); +INSERT INTO `system_menu` VALUES (1104, '短信模æ¿åˆ é™¤', 'system:sms-template:delete', 3, 4, 1100, '', '', '', 0, '', '2021-04-01 17:35:17', '', '2021-04-01 17:35:17', b'0', 0); +INSERT INTO `system_menu` VALUES (1105, '短信模æ¿å¯¼å‡º', 'system:sms-template:export', 3, 5, 1100, '', '', '', 0, '', '2021-04-01 17:35:17', '', '2021-04-01 17:35:17', b'0', 0); +INSERT INTO `system_menu` VALUES (1106, 'å‘逿µ‹è¯•短信', 'system:sms-template:send-sms', 3, 6, 1100, '', '', '', 0, '1', '2021-04-11 00:26:40', '1', '2021-04-11 00:26:40', b'0', 0); +INSERT INTO `system_menu` VALUES (1107, '短信日志', '', 2, 2, 1093, 'sms-log', 'phone', 'system/sms/smsLog', 0, '', '2021-04-11 08:37:05', '1', '2021-04-11 19:34:25', b'0', 0); +INSERT INTO `system_menu` VALUES (1108, '短信日志查询', 'system:sms-log:query', 3, 1, 1107, '', '', '', 0, '', '2021-04-11 08:37:05', '', '2021-04-11 08:37:05', b'0', 0); +INSERT INTO `system_menu` VALUES (1109, '短信日志导出', 'system:sms-log:export', 3, 5, 1107, '', '', '', 0, '', '2021-04-11 08:37:05', '', '2021-04-11 08:37:05', b'0', 0); +INSERT INTO `system_menu` VALUES (1110, '错误ç ç®¡ç†', '', 2, 12, 1, 'error-code', 'code', 'system/errorCode/index', 0, '', '2021-04-13 21:46:42', '1', '2021-04-22 00:04:35', b'0', 0); +INSERT INTO `system_menu` VALUES (1111, 'é”™è¯¯ç æŸ¥è¯¢', 'system:error-code:query', 3, 1, 1110, '', '', '', 0, '', '2021-04-13 21:46:42', '', '2021-04-13 22:09:37', b'0', 0); +INSERT INTO `system_menu` VALUES (1112, '错误ç åˆ›å»º', 'system:error-code:create', 3, 2, 1110, '', '', '', 0, '', '2021-04-13 21:46:42', '', '2021-04-13 22:09:43', b'0', 0); +INSERT INTO `system_menu` VALUES (1113, 'é”™è¯¯ç æ›´æ–°', 'system:error-code:update', 3, 3, 1110, '', '', '', 0, '', '2021-04-13 21:46:42', '', '2021-04-13 22:09:47', b'0', 0); +INSERT INTO `system_menu` VALUES (1114, '错误ç åˆ é™¤', 'system:error-code:delete', 3, 4, 1110, '', '', '', 0, '', '2021-04-13 21:46:42', '', '2021-04-13 22:09:51', b'0', 0); +INSERT INTO `system_menu` VALUES (1115, '错误ç å¯¼å‡º', 'system:error-code:export', 3, 5, 1110, '', '', '', 0, '', '2021-04-13 21:46:42', '', '2021-04-13 22:09:55', b'0', 0); +INSERT INTO `system_menu` VALUES (1116, '日志中心', '', 2, 8, 2, 'log-center', 'log', 'infra/skywalking/log', 0, '1', '2021-04-26 22:35:45', '1', '2021-04-26 22:37:25', b'0', 0); +INSERT INTO `system_menu` VALUES (1117, '支付管ç†', '', 1, 11, 0, '/pay', 'money', NULL, 0, '1', '2021-12-25 16:43:41', '1', '2021-12-25 16:46:40', b'0', 0); +INSERT INTO `system_menu` VALUES (1118, 'è¯·å‡æŸ¥è¯¢', '', 2, 0, 5, 'leave', 'user', 'bpm/oa/leave/index', 0, '', '2021-09-20 08:51:03', '1', '2022-01-22 21:36:06', b'0', 0); +INSERT INTO `system_menu` VALUES (1119, '请å‡ç”³è¯·æŸ¥è¯¢', 'bpm:oa-leave:query', 3, 1, 1118, '', '', '', 0, '', '2021-09-20 08:51:03', '1', '2022-01-23 00:14:20', b'0', 0); +INSERT INTO `system_menu` VALUES (1120, '请å‡ç”³è¯·åˆ›å»º', 'bpm:oa-leave:create', 3, 2, 1118, '', '', '', 0, '', '2021-09-20 08:51:03', '1', '2022-01-23 00:14:49', b'0', 0); +INSERT INTO `system_menu` VALUES (1121, '请å‡ç”³è¯·æ›´æ–°', 'oa:leave:update', 3, 3, 1118, '', '', '', 0, '', '2021-09-20 08:51:03', '', '2022-01-22 16:14:26', b'1', 0); +INSERT INTO `system_menu` VALUES (1122, '请å‡ç”³è¯·åˆ é™¤', 'oa:leave:delete', 3, 4, 1118, '', '', '', 0, '', '2021-09-20 08:51:03', '', '2022-01-22 16:14:28', b'1', 0); +INSERT INTO `system_menu` VALUES (1123, '请å‡ç”³è¯·å¯¼å‡º', 'oa:leave:export', 3, 5, 1118, '', '', '', 0, '', '2021-09-20 08:51:03', '', '2022-01-22 16:14:30', b'1', 0); +INSERT INTO `system_menu` VALUES (1124, '待办任务', '', 2, 2, 5, 'todo', 'edit', 'oa/todo/index', 0, '1', '2021-09-20 22:10:09', '1', '2022-01-22 10:33:01', b'1', 0); +INSERT INTO `system_menu` VALUES (1125, 'æµç¨‹ç”³è¯·', '', 2, 3, 5, 'flow', 'form', 'oa/flow/index', 0, '1', '2021-10-23 22:10:09', '1', '2022-01-22 10:33:03', b'1', 0); +INSERT INTO `system_menu` VALUES (1126, '应用信æ¯', '', 2, 1, 1117, 'app', 'table', 'pay/app/index', 0, '', '2021-11-10 01:13:30', '1', '2021-12-25 16:56:41', b'0', 0); +INSERT INTO `system_menu` VALUES (1127, 'æ”¯ä»˜åº”ç”¨ä¿¡æ¯æŸ¥è¯¢', 'pay:app:query', 3, 1, 1126, '', '', '', 0, '', '2021-11-10 01:13:31', '', '2021-11-10 01:13:31', b'0', 0); +INSERT INTO `system_menu` VALUES (1128, '支付应用信æ¯åˆ›å»º', 'pay:app:create', 3, 2, 1126, '', '', '', 0, '', '2021-11-10 01:13:31', '', '2021-11-10 01:13:31', b'0', 0); +INSERT INTO `system_menu` VALUES (1129, 'æ”¯ä»˜åº”ç”¨ä¿¡æ¯æ›´æ–°', 'pay:app:update', 3, 3, 1126, '', '', '', 0, '', '2021-11-10 01:13:31', '', '2021-11-10 01:13:31', b'0', 0); +INSERT INTO `system_menu` VALUES (1130, '支付应用信æ¯åˆ é™¤', 'pay:app:delete', 3, 4, 1126, '', '', '', 0, '', '2021-11-10 01:13:31', '', '2021-11-10 01:13:31', b'0', 0); +INSERT INTO `system_menu` VALUES (1131, '支付应用信æ¯å¯¼å‡º', 'pay:app:export', 3, 5, 1126, '', '', '', 0, '', '2021-11-10 01:13:31', '', '2021-11-10 01:13:31', b'0', 0); +INSERT INTO `system_menu` VALUES (1132, '秘钥解æž', 'pay:channel:parsing', 3, 6, 1129, '', '', '', 0, '1', '2021-11-08 15:15:47', '1', '2021-11-08 15:15:47', b'0', 0); +INSERT INTO `system_menu` VALUES (1133, 'æ”¯ä»˜å•†æˆ·ä¿¡æ¯æŸ¥è¯¢', 'pay:merchant:query', 3, 1, 1132, '', '', '', 0, '', '2021-11-10 01:13:41', '', '2021-11-10 01:13:41', b'0', 0); +INSERT INTO `system_menu` VALUES (1134, '支付商户信æ¯åˆ›å»º', 'pay:merchant:create', 3, 2, 1132, '', '', '', 0, '', '2021-11-10 01:13:41', '', '2021-11-10 01:13:41', b'0', 0); +INSERT INTO `system_menu` VALUES (1135, 'æ”¯ä»˜å•†æˆ·ä¿¡æ¯æ›´æ–°', 'pay:merchant:update', 3, 3, 1132, '', '', '', 0, '', '2021-11-10 01:13:41', '', '2021-11-10 01:13:41', b'0', 0); +INSERT INTO `system_menu` VALUES (1136, '支付商户信æ¯åˆ é™¤', 'pay:merchant:delete', 3, 4, 1132, '', '', '', 0, '', '2021-11-10 01:13:41', '', '2021-11-10 01:13:41', b'0', 0); +INSERT INTO `system_menu` VALUES (1137, '支付商户信æ¯å¯¼å‡º', 'pay:merchant:export', 3, 5, 1132, '', '', '', 0, '', '2021-11-10 01:13:41', '', '2021-11-10 01:13:41', b'0', 0); +INSERT INTO `system_menu` VALUES (1138, '租户管ç†', '', 2, 0, 1, 'tenant', 'peoples', 'system/tenant/index', 0, '', '2021-12-14 12:31:43', '1', '2021-12-14 20:32:32', b'0', 0); +INSERT INTO `system_menu` VALUES (1139, '租户查询', 'system:tenant:query', 3, 1, 1138, '', '', '', 0, '', '2021-12-14 12:31:44', '', '2021-12-14 12:31:44', b'0', 0); +INSERT INTO `system_menu` VALUES (1140, '租户创建', 'system:tenant:create', 3, 2, 1138, '', '', '', 0, '', '2021-12-14 12:31:44', '', '2021-12-14 12:31:44', b'0', 0); +INSERT INTO `system_menu` VALUES (1141, '租户更新', 'system:tenant:update', 3, 3, 1138, '', '', '', 0, '', '2021-12-14 12:31:44', '', '2021-12-14 12:31:44', b'0', 0); +INSERT INTO `system_menu` VALUES (1142, '租户删除', 'system:tenant:delete', 3, 4, 1138, '', '', '', 0, '', '2021-12-14 12:31:44', '', '2021-12-14 12:31:44', b'0', 0); +INSERT INTO `system_menu` VALUES (1143, '租户导出', 'system:tenant:export', 3, 5, 1138, '', '', '', 0, '', '2021-12-14 12:31:44', '', '2021-12-14 12:31:44', b'0', 0); +INSERT INTO `system_menu` VALUES (1144, '支付应用信æ¯ç®¡ç†', '', 2, 0, 1117, 'app', '', 'pay/app/index', 0, '', '2021-12-25 08:26:31', '', '2021-12-25 08:48:05', b'1', 0); +INSERT INTO `system_menu` VALUES (1145, 'æ”¯ä»˜åº”ç”¨ä¿¡æ¯æŸ¥è¯¢', 'pay:app:query', 3, 1, 1144, '', '', '', 0, '', '2021-12-25 08:26:31', '', '2021-12-25 08:47:53', b'1', 0); +INSERT INTO `system_menu` VALUES (1146, '支付应用信æ¯åˆ›å»º', 'pay:app:create', 3, 2, 1144, '', '', '', 0, '', '2021-12-25 08:26:31', '', '2021-12-25 08:47:51', b'1', 0); +INSERT INTO `system_menu` VALUES (1147, 'æ”¯ä»˜åº”ç”¨ä¿¡æ¯æ›´æ–°', 'pay:app:update', 3, 3, 1144, '', '', '', 0, '', '2021-12-25 08:26:31', '', '2021-12-25 08:47:48', b'1', 0); +INSERT INTO `system_menu` VALUES (1148, '支付应用信æ¯åˆ é™¤', 'pay:app:delete', 3, 4, 1144, '', '', '', 0, '', '2021-12-25 08:26:31', '', '2021-12-25 08:47:46', b'1', 0); +INSERT INTO `system_menu` VALUES (1149, '支付应用信æ¯å¯¼å‡º', 'pay:app:export', 3, 5, 1144, '', '', '', 0, '', '2021-12-25 08:26:31', '', '2021-12-25 08:47:43', b'1', 0); +INSERT INTO `system_menu` VALUES (1150, '秘钥解æž', 'pay:channel:parsing', 3, 6, 1129, '', '', '', 0, '1', '2021-11-08 15:15:47', '1', '2021-11-08 15:15:47', b'0', 0); +INSERT INTO `system_menu` VALUES (1156, 'æ”¯ä»˜è®¢å•æŸ¥è¯¢', 'pay:order:query', 3, 1, 1155, '', '', '', 0, '', '2021-12-25 08:29:01', '', '2021-12-25 08:29:01', b'0', 0); +INSERT INTO `system_menu` VALUES (1157, '支付订å•创建', 'pay:order:create', 3, 2, 1155, '', '', '', 0, '', '2021-12-25 08:29:01', '', '2021-12-25 08:29:01', b'0', 0); +INSERT INTO `system_menu` VALUES (1158, 'æ”¯ä»˜è®¢å•æ›´æ–°', 'pay:order:update', 3, 3, 1155, '', '', '', 0, '', '2021-12-25 08:29:01', '', '2021-12-25 08:29:01', b'0', 0); +INSERT INTO `system_menu` VALUES (1159, '支付订å•删除', 'pay:order:delete', 3, 4, 1155, '', '', '', 0, '', '2021-12-25 08:29:01', '', '2021-12-25 08:29:01', b'0', 0); +INSERT INTO `system_menu` VALUES (1160, '支付订å•导出', 'pay:order:export', 3, 5, 1155, '', '', '', 0, '', '2021-12-25 08:29:01', '', '2021-12-25 08:29:01', b'0', 0); +INSERT INTO `system_menu` VALUES (1161, '退款订å•', '', 2, 3, 1117, 'refund', 'order', 'pay/refund/index', 0, '', '2021-12-25 08:29:07', '1', '2021-12-25 19:30:22', b'0', 0); +INSERT INTO `system_menu` VALUES (1162, 'é€€æ¬¾è®¢å•æŸ¥è¯¢', 'pay:refund:query', 3, 1, 1161, '', '', '', 0, '', '2021-12-25 08:29:07', '', '2021-12-25 08:29:07', b'0', 0); +INSERT INTO `system_menu` VALUES (1163, '退款订å•创建', 'pay:refund:create', 3, 2, 1161, '', '', '', 0, '', '2021-12-25 08:29:07', '', '2021-12-25 08:29:07', b'0', 0); +INSERT INTO `system_menu` VALUES (1164, 'é€€æ¬¾è®¢å•æ›´æ–°', 'pay:refund:update', 3, 3, 1161, '', '', '', 0, '', '2021-12-25 08:29:07', '', '2021-12-25 08:29:07', b'0', 0); +INSERT INTO `system_menu` VALUES (1165, '退款订å•删除', 'pay:refund:delete', 3, 4, 1161, '', '', '', 0, '', '2021-12-25 08:29:07', '', '2021-12-25 08:29:07', b'0', 0); +INSERT INTO `system_menu` VALUES (1166, '退款订å•导出', 'pay:refund:export', 3, 5, 1161, '', '', '', 0, '', '2021-12-25 08:29:07', '', '2021-12-25 08:29:07', b'0', 0); +INSERT INTO `system_menu` VALUES (1173, '支付订å•', '', 2, 2, 1117, 'order', 'pay', 'pay/order/index', 0, '', '2021-12-25 08:49:43', '1', '2021-12-25 19:29:54', b'0', 0); +INSERT INTO `system_menu` VALUES (1174, 'æ”¯ä»˜è®¢å•æŸ¥è¯¢', 'pay:order:query', 3, 1, 1173, '', '', '', 0, '', '2021-12-25 08:49:43', '', '2021-12-25 08:49:43', b'0', 0); +INSERT INTO `system_menu` VALUES (1175, '支付订å•创建', 'pay:order:create', 3, 2, 1173, '', '', '', 0, '', '2021-12-25 08:49:43', '', '2021-12-25 08:49:43', b'0', 0); +INSERT INTO `system_menu` VALUES (1176, 'æ”¯ä»˜è®¢å•æ›´æ–°', 'pay:order:update', 3, 3, 1173, '', '', '', 0, '', '2021-12-25 08:49:43', '', '2021-12-25 08:49:43', b'0', 0); +INSERT INTO `system_menu` VALUES (1177, '支付订å•删除', 'pay:order:delete', 3, 4, 1173, '', '', '', 0, '', '2021-12-25 08:49:43', '', '2021-12-25 08:49:43', b'0', 0); +INSERT INTO `system_menu` VALUES (1178, '支付订å•导出', 'pay:order:export', 3, 5, 1173, '', '', '', 0, '', '2021-12-25 08:49:43', '', '2021-12-25 08:49:43', b'0', 0); +INSERT INTO `system_menu` VALUES (1179, '商户信æ¯', '', 2, 0, 1117, 'merchant', 'merchant', 'pay/merchant/index', 0, '', '2021-12-25 09:01:44', '1', '2021-12-25 17:02:13', b'0', 0); +INSERT INTO `system_menu` VALUES (1180, 'æ”¯ä»˜å•†æˆ·ä¿¡æ¯æŸ¥è¯¢', 'pay:merchant:query', 3, 1, 1179, '', '', '', 0, '', '2021-12-25 09:01:44', '', '2021-12-25 09:01:44', b'0', 0); +INSERT INTO `system_menu` VALUES (1181, '支付商户信æ¯åˆ›å»º', 'pay:merchant:create', 3, 2, 1179, '', '', '', 0, '', '2021-12-25 09:01:44', '', '2021-12-25 09:01:44', b'0', 0); +INSERT INTO `system_menu` VALUES (1182, 'æ”¯ä»˜å•†æˆ·ä¿¡æ¯æ›´æ–°', 'pay:merchant:update', 3, 3, 1179, '', '', '', 0, '', '2021-12-25 09:01:44', '', '2021-12-25 09:01:44', b'0', 0); +INSERT INTO `system_menu` VALUES (1183, '支付商户信æ¯åˆ é™¤', 'pay:merchant:delete', 3, 4, 1179, '', '', '', 0, '', '2021-12-25 09:01:44', '', '2021-12-25 09:01:44', b'0', 0); +INSERT INTO `system_menu` VALUES (1184, '支付商户信æ¯å¯¼å‡º', 'pay:merchant:export', 3, 5, 1179, '', '', '', 0, '', '2021-12-25 09:01:44', '', '2021-12-25 09:01:44', b'0', 0); +INSERT INTO `system_menu` VALUES (1185, '工作æµç¨‹', '', 1, 50, 0, '/bpm', 'tool', NULL, 0, '1', '2021-12-30 20:26:36', '103', '2022-01-14 18:44:00', b'0', 0); +INSERT INTO `system_menu` VALUES (1186, 'æµç¨‹ç®¡ç†', '', 1, 10, 1185, 'manager', 'nested', NULL, 0, '1', '2021-12-30 20:28:30', '1', '2021-12-30 20:28:57', b'0', 0); +INSERT INTO `system_menu` VALUES (1187, 'æµç¨‹è¡¨å•', '', 2, 0, 1186, 'form', 'form', 'bpm/form/index', 0, '', '2021-12-30 12:38:22', '1', '2021-12-31 23:20:38', b'0', 0); +INSERT INTO `system_menu` VALUES (1188, 'è¡¨å•æŸ¥è¯¢', 'bpm:form:query', 3, 1, 1187, '', '', '', 0, '', '2021-12-30 12:38:22', '1', '2022-01-03 18:59:53', b'0', 0); +INSERT INTO `system_menu` VALUES (1189, '表å•创建', 'bpm:form:create', 3, 2, 1187, '', '', '', 0, '', '2021-12-30 12:38:22', '1', '2022-01-03 18:59:59', b'0', 0); +INSERT INTO `system_menu` VALUES (1190, 'è¡¨å•æ›´æ–°', 'bpm:form:update', 3, 3, 1187, '', '', '', 0, '', '2021-12-30 12:38:22', '1', '2022-01-03 19:00:21', b'0', 0); +INSERT INTO `system_menu` VALUES (1191, '表å•删除', 'bpm:form:delete', 3, 4, 1187, '', '', '', 0, '', '2021-12-30 12:38:22', '1', '2022-01-03 19:00:26', b'0', 0); +INSERT INTO `system_menu` VALUES (1192, '表å•导出', 'bpm:form:export', 3, 5, 1187, '', '', '', 0, '', '2021-12-30 12:38:22', '1', '2022-01-03 19:00:33', b'0', 0); +INSERT INTO `system_menu` VALUES (1193, 'æµç¨‹æ¨¡åž‹', '', 2, 5, 1186, 'model', 'guide', 'bpm/model/index', 0, '1', '2021-12-31 23:24:58', '103', '2022-01-14 10:14:38', b'0', 0); +INSERT INTO `system_menu` VALUES (1194, '模型查询', 'bpm:model:query', 3, 1, 1193, '', '', '', 0, '1', '2022-01-03 19:01:10', '1', '2022-01-03 19:01:10', b'0', 0); +INSERT INTO `system_menu` VALUES (1195, '模型创建', 'bpm:model:create', 3, 2, 1193, '', '', '', 0, '1', '2022-01-03 19:01:24', '1', '2022-01-03 19:02:02', b'0', 0); +INSERT INTO `system_menu` VALUES (1196, '模型导入', 'bpm:model:import', 3, 3, 1193, '', '', '', 0, '1', '2022-01-03 19:01:35', '1', '2022-01-03 19:02:11', b'0', 0); +INSERT INTO `system_menu` VALUES (1197, '模型更新', 'bpm:model:update', 3, 4, 1193, '', '', '', 0, '1', '2022-01-03 19:02:28', '1', '2022-01-03 19:02:28', b'0', 0); +INSERT INTO `system_menu` VALUES (1198, '模型删除', 'bpm:model:delete', 3, 5, 1193, '', '', '', 0, '1', '2022-01-03 19:02:43', '1', '2022-01-03 19:02:43', b'0', 0); +INSERT INTO `system_menu` VALUES (1199, '模型å‘布', 'bpm:model:deploy', 3, 6, 1193, '', '', '', 0, '1', '2022-01-03 19:03:24', '1', '2022-01-03 19:03:24', b'0', 0); +INSERT INTO `system_menu` VALUES (1200, '任务管ç†', '', 1, 20, 1185, 'task', 'cascader', NULL, 0, '1', '2022-01-07 23:51:48', '1', '2022-01-07 23:51:48', b'0', 0); +INSERT INTO `system_menu` VALUES (1201, '我的æµç¨‹', '', 2, 0, 1200, 'my', 'people', 'bpm/processInstance/index', 0, '', '2022-01-07 15:53:44', '1', '2022-01-08 16:44:41', b'0', 0); +INSERT INTO `system_menu` VALUES (1202, 'æµç¨‹å®žä¾‹çš„æŸ¥è¯¢', 'bpm:process-instance:query', 3, 1, 1201, '', '', '', 0, '', '2022-01-07 15:53:44', '1', '2022-01-07 23:56:29', b'0', 0); +INSERT INTO `system_menu` VALUES (1203, '工作æµçš„æµç¨‹å®žä¾‹çš„æ‹“å±•åˆ›å»º', 'bpm:process-instance-ext:create', 3, 2, 1201, '', '', '', 0, '', '2022-01-07 15:53:44', '', '2022-01-07 15:56:08', b'1', 0); +INSERT INTO `system_menu` VALUES (1204, '工作æµçš„æµç¨‹å®žä¾‹çš„æ‹“å±•æ›´æ–°', 'bpm:process-instance-ext:update', 3, 3, 1201, '', '', '', 0, '', '2022-01-07 15:53:44', '', '2022-01-07 15:56:00', b'1', 0); +INSERT INTO `system_menu` VALUES (1205, '工作æµçš„æµç¨‹å®žä¾‹çš„æ‹“å±•åˆ é™¤', 'bpm:process-instance-ext:delete', 3, 4, 1201, '', '', '', 0, '', '2022-01-07 15:53:44', '', '2022-01-07 15:55:56', b'1', 0); +INSERT INTO `system_menu` VALUES (1206, '工作æµçš„æµç¨‹å®žä¾‹çš„æ‹“å±•å¯¼å‡º', 'bpm:process-instance-ext:export', 3, 5, 1201, '', '', '', 0, '', '2022-01-07 15:53:44', '', '2022-01-07 15:55:51', b'1', 0); +INSERT INTO `system_menu` VALUES (1207, '待办任务', '', 2, 10, 1200, 'todo', 'eye-open', 'bpm/task/todo', 0, '1', '2022-01-08 10:33:37', '1', '2022-01-08 10:33:48', b'0', 0); +INSERT INTO `system_menu` VALUES (1208, '已办任务', '', 2, 20, 1200, 'done', 'eye', 'bpm/task/done', 0, '1', '2022-01-08 10:34:13', '1', '2022-01-08 10:34:13', b'0', 0); +INSERT INTO `system_menu` VALUES (1209, '用户分组', '', 2, 2, 1186, 'user-group', 'people', 'bpm/group/index', 0, '', '2022-01-14 02:14:20', '103', '2022-01-14 10:15:43', b'0', 0); +INSERT INTO `system_menu` VALUES (1210, '用户组查询', 'bpm:user-group:query', 3, 1, 1209, '', '', '', 0, '', '2022-01-14 02:14:20', '', '2022-01-14 02:14:20', b'0', 0); +INSERT INTO `system_menu` VALUES (1211, '用户组创建', 'bpm:user-group:create', 3, 2, 1209, '', '', '', 0, '', '2022-01-14 02:14:20', '', '2022-01-14 02:14:20', b'0', 0); +INSERT INTO `system_menu` VALUES (1212, '用户组更新', 'bpm:user-group:update', 3, 3, 1209, '', '', '', 0, '', '2022-01-14 02:14:20', '', '2022-01-14 02:14:20', b'0', 0); +INSERT INTO `system_menu` VALUES (1213, '用户组删除', 'bpm:user-group:delete', 3, 4, 1209, '', '', '', 0, '', '2022-01-14 02:14:20', '', '2022-01-14 02:14:20', b'0', 0); +INSERT INTO `system_menu` VALUES (1214, '用户组导出', 'bpm:user-group:export', 3, 5, 1209, '', '', '', 0, '', '2022-01-14 02:14:20', '', '2022-01-14 02:14:58', b'1', 0); +INSERT INTO `system_menu` VALUES (1215, 'æµç¨‹å®šä¹‰æŸ¥è¯¢', 'bpm:process-definition:query', 3, 10, 1193, '', '', '', 0, '1', '2022-01-23 00:21:43', '1', '2022-01-23 00:26:30', b'0', 0); +INSERT INTO `system_menu` VALUES (1216, 'æµç¨‹ä»»åŠ¡åˆ†é…规则查询', 'bpm:task-assign-rule:query', 3, 20, 1193, '', '', '', 0, '1', '2022-01-23 00:26:53', '1', '2022-01-23 00:26:53', b'0', 0); +INSERT INTO `system_menu` VALUES (1217, 'æµç¨‹ä»»åŠ¡åˆ†é…规则创建', 'bpm:task-assign-rule:create', 3, 21, 1193, '', '', '', 0, '1', '2022-01-23 00:28:15', '1', '2022-01-23 00:28:15', b'0', 0); +INSERT INTO `system_menu` VALUES (1218, 'æµç¨‹ä»»åŠ¡åˆ†é…规则更新', 'bpm:task-assign-rule:update', 3, 22, 1193, '', '', '', 0, '1', '2022-01-23 00:28:41', '1', '2022-01-23 00:28:41', b'0', 0); +INSERT INTO `system_menu` VALUES (1219, 'æµç¨‹å®žä¾‹çš„创建', 'bpm:process-instance:create', 3, 2, 1201, '', '', '', 0, '1', '2022-01-23 00:36:15', '1', '2022-01-23 00:36:15', b'0', 0); +INSERT INTO `system_menu` VALUES (1220, 'æµç¨‹å®žä¾‹çš„å–æ¶ˆ', 'bpm:process-instance:cancel', 3, 3, 1201, '', '', '', 0, '1', '2022-01-23 00:36:33', '1', '2022-01-23 00:36:33', b'0', 0); +INSERT INTO `system_menu` VALUES (1221, 'æµç¨‹ä»»åŠ¡çš„æŸ¥è¯¢', 'bpm:task:query', 3, 1, 1207, '', '', '', 0, '1', '2022-01-23 00:38:52', '1', '2022-01-23 00:38:52', b'0', 0); +INSERT INTO `system_menu` VALUES (1222, 'æµç¨‹ä»»åŠ¡çš„æ›´æ–°', 'bpm:task:update', 3, 2, 1207, '', '', '', 0, '1', '2022-01-23 00:39:24', '1', '2022-01-23 00:39:30', b'0', 0); COMMIT; -- ---------------------------- --- Table structure for sys_notice +-- Table structure for system_notice -- ---------------------------- -DROP TABLE IF EXISTS `sys_notice`; -CREATE TABLE `sys_notice` ( +DROP TABLE IF EXISTS `system_notice`; +CREATE TABLE `system_notice` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '公告ID', `title` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '公告标题', `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '公告内容', @@ -2103,22 +2625,23 @@ CREATE TABLE `sys_notice` ( ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='通知公告表'; -- ---------------------------- --- Records of sys_notice +-- Records of system_notice -- ---------------------------- BEGIN; -INSERT INTO `sys_notice` VALUES (1, '温馨æé†’:2018-07-01 è‹¥ä¾æ–°ç‰ˆæœ¬å‘布啦', '新版本内容', 2, 0, 'admin', '2021-01-05 17:03:48', '', '2021-12-15 05:02:23', b'0', 1); -INSERT INTO `sys_notice` VALUES (2, '维护通知:2018-07-01 è‹¥ä¾ç³»ç»Ÿå‡Œæ™¨ç»´æŠ¤', '维护内容', 1, 0, 'admin', '2021-01-05 17:03:48', '', '2021-12-15 05:02:22', b'0', 1); -INSERT INTO `sys_notice` VALUES (3, '1133', '

222333

', 1, 0, '', '2021-01-13 05:24:52', '', '2021-12-15 05:02:21', b'1', 1); +INSERT INTO `system_notice` VALUES (1, '温馨æé†’:2018-07-01 è‹¥ä¾æ–°ç‰ˆæœ¬å‘布啦', '新版本内容', 2, 0, 'admin', '2021-01-05 17:03:48', '', '2021-12-15 05:02:23', b'0', 1); +INSERT INTO `system_notice` VALUES (2, '维护通知:2018-07-01 è‹¥ä¾ç³»ç»Ÿå‡Œæ™¨ç»´æŠ¤', '维护内容', 1, 0, 'admin', '2021-01-05 17:03:48', '', '2021-12-15 05:02:22', b'0', 1); +INSERT INTO `system_notice` VALUES (3, '1133', '

222333

', 1, 0, '', '2021-01-13 05:24:52', '', '2021-12-15 05:02:21', b'1', 1); COMMIT; -- ---------------------------- --- Table structure for sys_operate_log +-- Table structure for system_operate_log -- ---------------------------- -DROP TABLE IF EXISTS `sys_operate_log`; -CREATE TABLE `sys_operate_log` ( +DROP TABLE IF EXISTS `system_operate_log`; +CREATE TABLE `system_operate_log` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '日志主键', `trace_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '链路追踪编å·', `user_id` bigint NOT NULL COMMENT '用户编å·', + `user_type` tinyint NOT NULL DEFAULT '0' COMMENT '用户类型', `module` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'æ¨¡å—æ ‡é¢˜', `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'æ“作å', `operate_type` bigint NOT NULL DEFAULT '0' COMMENT 'æ“作分类', @@ -2142,28 +2665,37 @@ CREATE TABLE `sys_operate_log` ( `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编å·', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=1099 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='æ“作日志记录'; +) ENGINE=InnoDB AUTO_INCREMENT=1108 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='æ“作日志记录'; -- ---------------------------- --- Records of sys_operate_log +-- Records of system_operate_log -- ---------------------------- BEGIN; +INSERT INTO `system_operate_log` VALUES (1099, '', 1, 0, 'æµç¨‹å®žä¾‹', '新建æµç¨‹å®žä¾‹', 2, '', '', 'POST', '/api/bpm/process-instance/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', 'CommonResult cn.iocoder.yudao.adminserver.modules.bpm.controller.task.BpmProcessInstanceController.createProcessInstance(BpmProcessInstanceCreateReqVO)', '{\"createReqVO\":{\"processDefinitionId\":\"eee:17:f3aad03b-7ae5-11ec-a69c-a2380e71991a\",\"variables\":{\"field121\":\"AAA\",\"field122\":[1]}}}', '2022-01-23 12:41:14', 4959, 0, '', '\"b243fa82-7c06-11ec-9110-acde48001122\"', NULL, '2022-01-23 12:41:19', NULL, '2022-01-23 12:41:19', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1100, '', 1, 0, 'æµç¨‹å®žä¾‹', '新建æµç¨‹å®žä¾‹', 2, '', '', 'POST', '/api/bpm/process-instance/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', 'CommonResult cn.iocoder.yudao.adminserver.modules.bpm.controller.task.BpmProcessInstanceController.createProcessInstance(BpmProcessInstanceCreateReqVO)', '{\"createReqVO\":{\"processDefinitionId\":\"test_001:4:3dbe6714-76b1-11ec-9c66-a2380e71991a\",\"variables\":{\"field121\":\"AAA\",\"field122\":[1]}}}', '2022-01-23 12:50:02', 4130, 0, '', '\"ecddb286-7c07-11ec-a41d-acde48001122\"', NULL, '2022-01-23 12:50:06', NULL, '2022-01-23 12:50:06', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1101, '', 1, 0, 'æµç¨‹å®žä¾‹', '新建æµç¨‹å®žä¾‹', 2, '', '', 'POST', '/api/bpm/process-instance/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', 'CommonResult cn.iocoder.yudao.adminserver.modules.bpm.controller.task.BpmProcessInstanceController.createProcessInstance(BpmProcessInstanceCreateReqVO)', '{\"createReqVO\":{\"processDefinitionId\":\"self:2:3a5a065e-76b1-11ec-9c66-a2380e71991a\",\"variables\":{\"field121\":\"aaa\",\"field122\":[1]}}}', '2022-01-23 12:50:46', 202, 500, 'RuntimeException: 123', 'null', NULL, '2022-01-23 12:50:46', NULL, '2022-01-23 12:50:46', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1102, '', 1, 0, 'æµç¨‹å®žä¾‹', 'å–æ¶ˆæµç¨‹å®žä¾‹', 4, '', '', 'DELETE', '/api/bpm/process-instance/cancel', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', 'CommonResult cn.iocoder.yudao.adminserver.modules.bpm.controller.task.BpmProcessInstanceController.cancelProcessInstance(BpmProcessInstanceCancelReqVO)', '{\"cancelReqVO\":{\"id\":\"ecddb286-7c07-11ec-a41d-acde48001122\",\"reason\":\"aaa\"}}', '2022-01-23 12:59:40', 395, 0, '', 'true', NULL, '2022-01-23 12:59:41', NULL, '2022-01-23 12:59:41', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1103, '', 1, 0, 'æµç¨‹å®žä¾‹', '新建æµç¨‹å®žä¾‹', 2, '', '', 'POST', '/api/bpm/process-instance/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', 'CommonResult cn.iocoder.yudao.adminserver.modules.bpm.controller.task.BpmProcessInstanceController.createProcessInstance(BpmProcessInstanceCreateReqVO)', '{\"createReqVO\":{\"processDefinitionId\":\"test:21:c2cd44b0-79b0-11ec-b2b8-a2380e71991a\",\"variables\":{\"field121\":\"aaa\",\"field122\":[1]}}}', '2022-01-23 12:59:57', 384, 0, '', '\"4f676a08-7c09-11ec-b8a1-acde48001122\"', NULL, '2022-01-23 12:59:57', NULL, '2022-01-23 12:59:57', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1104, '', 1, 0, '管ç†åŽå° - 用户', '修改用户', 3, '', '', 'PUT', '/admin-api/system/user/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.user.UserController.updateUser(UserUpdateReqVO)', '{\"reqVO\":{\"username\":\"admin\",\"nickname\":\"èŠ‹é“æºç \",\"remark\":\"管ç†å‘˜\",\"deptId\":103,\"postIds\":[1],\"email\":\"aoteman@126.com\",\"mobile\":\"15612345678\",\"sex\":1,\"avatar\":\"http://127.0.0.1:48080/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f\",\"id\":1}}', '2022-02-01 22:58:45', 112, 0, '', 'true', NULL, '2022-02-01 22:58:45', NULL, '2022-02-01 22:58:45', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1105, '', 1, 0, '管ç†åŽå° - 认è¯', 'å–æ¶ˆç¤¾äº¤ç»‘定', 4, '', '', 'DELETE', '/admin-api/system/social-unbind', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.auth.AuthController.socialUnbind(AuthSocialUnbindReqVO)', '{\"reqVO\":{\"type\":20,\"unionId\":\"IPRmJ0wvBptiPIlGEZiPewGwiEiE\"}}', '2022-02-01 23:00:30', 24, 0, '', 'true', NULL, '2022-02-01 23:00:30', NULL, '2022-02-01 23:00:30', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1106, '', 1, 0, '管ç†åŽå° - 定时任务', '更新定时任务的状æ€', 3, '', '', 'PUT', '/admin-api/infra/job/update-status', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.job.JobController.updateJobStatus(Long,Integer)', '{\"id\":3,\"status\":2}', '2022-02-02 01:00:08', 106, 0, '', 'true', NULL, '2022-02-02 01:00:08', NULL, '2022-02-02 01:00:08', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1107, '', 1, 0, '管ç†åŽå° - 定时任务', '更新定时任务的状æ€', 3, '', '', 'PUT', '/admin-api/infra/job/update-status', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.job.JobController.updateJobStatus(Long,Integer)', '{\"id\":3,\"status\":1}', '2022-02-02 01:00:11', 58, 0, '', 'true', NULL, '2022-02-02 01:00:11', NULL, '2022-02-02 01:00:11', b'0', 1); COMMIT; -- ---------------------------- --- Table structure for sys_post +-- Table structure for system_post -- ---------------------------- -DROP TABLE IF EXISTS `sys_post`; -CREATE TABLE `sys_post` ( +DROP TABLE IF EXISTS `system_post`; +CREATE TABLE `system_post` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'å²—ä½ID', - `code` varchar(64) NOT NULL COMMENT 'å²—ä½ç¼–ç ', - `name` varchar(50) NOT NULL COMMENT 'å²—ä½åç§°', + `code` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'å²—ä½ç¼–ç ', + `name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'å²—ä½åç§°', `sort` int NOT NULL COMMENT '显示顺åº', `status` tinyint NOT NULL COMMENT '状æ€ï¼ˆ0正常 1åœç”¨ï¼‰', - `remark` varchar(500) DEFAULT NULL COMMENT '备注', - `creator` varchar(64) DEFAULT '' COMMENT '创建者', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) DEFAULT '' COMMENT '更新者', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编å·', @@ -2171,362 +2703,374 @@ CREATE TABLE `sys_post` ( ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='å²—ä½ä¿¡æ¯è¡¨'; -- ---------------------------- --- Records of sys_post +-- Records of system_post -- ---------------------------- BEGIN; -INSERT INTO `sys_post` VALUES (1, 'ceo', '董事长', 1, 0, '', 'admin', '2021-01-05 17:03:48', '1', '2021-12-12 10:47:45', b'0', 1); -INSERT INTO `sys_post` VALUES (2, 'se', '项目ç»ç†', 2, 0, '', 'admin', '2021-01-05 17:03:48', '1', '2021-12-12 10:47:47', b'0', 1); -INSERT INTO `sys_post` VALUES (3, 'hr', '人力资æº', 3, 0, '', 'admin', '2021-01-05 17:03:48', '', '2021-12-12 10:47:50', b'0', 1); -INSERT INTO `sys_post` VALUES (4, 'user', '普通员工', 4, 0, '', 'admin', '2021-01-05 17:03:48', '', '2021-12-12 10:47:51', b'0', 1); -INSERT INTO `sys_post` VALUES (5, 'test', '测试岗ä½', 0, 1, '132', '', '2021-01-07 15:07:44', '', '2021-12-12 10:47:53', b'1', 1); +INSERT INTO `system_post` VALUES (1, 'ceo', '董事长', 1, 0, '', 'admin', '2021-01-05 17:03:48', '1', '2021-12-12 10:47:45', b'0', 1); +INSERT INTO `system_post` VALUES (2, 'se', '项目ç»ç†', 2, 0, '', 'admin', '2021-01-05 17:03:48', '1', '2021-12-12 10:47:47', b'0', 1); +INSERT INTO `system_post` VALUES (3, 'hr', '人力资æº', 3, 0, '', 'admin', '2021-01-05 17:03:48', '', '2021-12-12 10:47:50', b'0', 1); +INSERT INTO `system_post` VALUES (4, 'user', '普通员工', 4, 0, '', 'admin', '2021-01-05 17:03:48', '', '2021-12-12 10:47:51', b'0', 1); +INSERT INTO `system_post` VALUES (5, 'test', '测试岗ä½', 0, 1, '132', '', '2021-01-07 15:07:44', '', '2021-12-12 10:47:53', b'1', 1); COMMIT; -- ---------------------------- --- Table structure for sys_role +-- Table structure for system_role -- ---------------------------- -DROP TABLE IF EXISTS `sys_role`; -CREATE TABLE `sys_role` ( +DROP TABLE IF EXISTS `system_role`; +CREATE TABLE `system_role` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '角色ID', - `name` varchar(30) NOT NULL COMMENT '角色åç§°', - `code` varchar(100) NOT NULL COMMENT '角色æƒé™å­—符串', + `name` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '角色åç§°', + `code` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '角色æƒé™å­—符串', `sort` int NOT NULL COMMENT '显示顺åº', `data_scope` tinyint NOT NULL DEFAULT '1' COMMENT 'æ•°æ®èŒƒå›´ï¼ˆ1ï¼šå…¨éƒ¨æ•°æ®æƒé™ 2ï¼šè‡ªå®šæ•°æ®æƒé™ 3ï¼šæœ¬éƒ¨é—¨æ•°æ®æƒé™ 4:本部门åŠä»¥ä¸‹æ•°æ®æƒé™ï¼‰', - `data_scope_dept_ids` varchar(500) NOT NULL DEFAULT '' COMMENT 'æ•°æ®èŒƒå›´(指定部门数组)', + `data_scope_dept_ids` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'æ•°æ®èŒƒå›´(指定部门数组)', `status` tinyint NOT NULL COMMENT '角色状æ€ï¼ˆ0正常 1åœç”¨ï¼‰', `type` tinyint NOT NULL COMMENT '角色类型', - `remark` varchar(500) DEFAULT NULL COMMENT '备注', - `creator` varchar(64) DEFAULT '' COMMENT '创建者', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) DEFAULT '' COMMENT '更新者', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=102 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色信æ¯è¡¨'; -- ---------------------------- --- Records of sys_role +-- Records of system_role -- ---------------------------- BEGIN; -INSERT INTO `sys_role` VALUES (1, '超级管ç†å‘˜', 'admin', 1, 1, '', 0, 1, '超级管ç†å‘˜', 'admin', '2021-01-05 17:03:48', '', '2021-12-15 04:52:44', b'0'); -INSERT INTO `sys_role` VALUES (2, '普通角色', 'common', 2, 2, '', 0, 1, '普通角色', 'admin', '2021-01-05 17:03:48', '', '2021-01-06 11:46:58', b'0'); -INSERT INTO `sys_role` VALUES (101, '测试账å·', 'test', 0, 2, '[102,108,109]', 0, 2, '132', '', '2021-01-06 13:49:35', '1', '2021-12-16 09:27:01', b'0'); +INSERT INTO `system_role` VALUES (1, '超级管ç†å‘˜', 'admin', 1, 1, '', 0, 1, '超级管ç†å‘˜', 'admin', '2021-01-05 17:03:48', '', '2021-12-15 04:52:44', b'0'); +INSERT INTO `system_role` VALUES (2, '普通角色', 'common', 2, 2, '', 0, 1, '普通角色', 'admin', '2021-01-05 17:03:48', '', '2021-01-06 11:46:58', b'0'); +INSERT INTO `system_role` VALUES (101, '测试账å·', 'test', 0, 2, '[102,108,109]', 0, 2, '132', '', '2021-01-06 13:49:35', '1', '2021-12-16 09:27:01', b'0'); COMMIT; -- ---------------------------- --- Table structure for sys_role_menu +-- Table structure for system_role_menu -- ---------------------------- -DROP TABLE IF EXISTS `sys_role_menu`; -CREATE TABLE `sys_role_menu` ( +DROP TABLE IF EXISTS `system_role_menu`; +CREATE TABLE `system_role_menu` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增编å·', `role_id` bigint NOT NULL COMMENT '角色ID', `menu_id` bigint NOT NULL COMMENT 'èœå•ID', - `creator` varchar(64) DEFAULT '' COMMENT '创建者', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) DEFAULT '' COMMENT '更新者', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=253 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色和èœå•å…³è”表'; -- ---------------------------- --- Records of sys_role_menu +-- Records of system_role_menu -- ---------------------------- BEGIN; -INSERT INTO `sys_role_menu` VALUES (1, 2, 1, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); -INSERT INTO `sys_role_menu` VALUES (2, 2, 2, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); -INSERT INTO `sys_role_menu` VALUES (3, 2, 3, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); -INSERT INTO `sys_role_menu` VALUES (4, 2, 4, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (5, 2, 100, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); -INSERT INTO `sys_role_menu` VALUES (6, 2, 101, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); -INSERT INTO `sys_role_menu` VALUES (7, 2, 102, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); -INSERT INTO `sys_role_menu` VALUES (8, 2, 103, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); -INSERT INTO `sys_role_menu` VALUES (9, 2, 104, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); -INSERT INTO `sys_role_menu` VALUES (10, 2, 105, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); -INSERT INTO `sys_role_menu` VALUES (11, 2, 106, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); -INSERT INTO `sys_role_menu` VALUES (12, 2, 107, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); -INSERT INTO `sys_role_menu` VALUES (13, 2, 108, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); -INSERT INTO `sys_role_menu` VALUES (14, 2, 109, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); -INSERT INTO `sys_role_menu` VALUES (15, 2, 110, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); -INSERT INTO `sys_role_menu` VALUES (16, 2, 111, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (17, 2, 112, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (18, 2, 113, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (19, 2, 114, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (20, 2, 115, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); -INSERT INTO `sys_role_menu` VALUES (21, 2, 116, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (22, 2, 500, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); -INSERT INTO `sys_role_menu` VALUES (23, 2, 501, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); -INSERT INTO `sys_role_menu` VALUES (24, 2, 1000, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); -INSERT INTO `sys_role_menu` VALUES (25, 2, 1001, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (26, 2, 1002, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (27, 2, 1003, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (28, 2, 1004, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (29, 2, 1005, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (30, 2, 1006, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (31, 2, 1007, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (32, 2, 1008, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (33, 2, 1009, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (34, 2, 1010, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (35, 2, 1011, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (36, 2, 1012, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (37, 2, 1013, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (38, 2, 1014, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (39, 2, 1015, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (40, 2, 1016, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (41, 2, 1017, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (42, 2, 1018, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (43, 2, 1019, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (44, 2, 1020, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (45, 2, 1021, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (46, 2, 1022, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (47, 2, 1023, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (48, 2, 1024, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (49, 2, 1025, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (50, 2, 1026, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (51, 2, 1027, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (52, 2, 1028, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (53, 2, 1029, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (54, 2, 1030, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (55, 2, 1031, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (56, 2, 1032, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (57, 2, 1033, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (58, 2, 1034, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (59, 2, 1035, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (60, 2, 1036, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (61, 2, 1037, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (62, 2, 1038, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (63, 2, 1039, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (64, 2, 1040, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (65, 2, 1041, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (66, 2, 1042, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (67, 2, 1043, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (68, 2, 1044, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (69, 2, 1045, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (70, 2, 1046, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (71, 2, 1047, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (72, 2, 1048, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (73, 2, 1049, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (74, 2, 1050, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (75, 2, 1051, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (76, 2, 1052, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (77, 2, 1053, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (78, 2, 1054, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (79, 2, 1055, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); -INSERT INTO `sys_role_menu` VALUES (80, 2, 1056, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (81, 2, 1057, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (82, 2, 1058, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (83, 2, 1059, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (84, 2, 1060, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); -INSERT INTO `sys_role_menu` VALUES (169, 101, 1001, '', '2021-01-21 02:15:01', '', '2021-01-21 03:04:50', b'1'); -INSERT INTO `sys_role_menu` VALUES (170, 101, 1, '', '2021-01-21 02:39:45', '', '2021-01-21 03:13:11', b'1'); -INSERT INTO `sys_role_menu` VALUES (171, 101, 100, '', '2021-01-21 02:39:45', '', '2021-01-21 03:13:11', b'1'); -INSERT INTO `sys_role_menu` VALUES (172, 101, 1024, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (173, 101, 1025, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (174, 101, 1026, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (175, 101, 1027, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (176, 101, 1028, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (177, 101, 1029, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (178, 101, 1030, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (179, 101, 1036, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (180, 101, 1037, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (181, 101, 1038, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (182, 101, 1039, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (183, 101, 1040, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (184, 101, 1042, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (185, 101, 1043, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (186, 101, 1045, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (187, 101, 1063, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (188, 101, 1064, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (189, 101, 1065, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (190, 101, 1007, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (191, 101, 1008, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (192, 101, 1009, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (193, 101, 1010, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (194, 101, 1011, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (195, 101, 1012, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (196, 101, 1013, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (197, 101, 1014, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (198, 101, 1015, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (199, 101, 1016, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (200, 101, 1017, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (201, 101, 1018, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (202, 101, 1019, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (203, 101, 1020, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (204, 101, 1021, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (205, 101, 1022, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (206, 101, 1023, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); -INSERT INTO `sys_role_menu` VALUES (207, 101, 1001, '', '2021-01-21 03:07:43', '', '2021-01-21 03:13:11', b'1'); -INSERT INTO `sys_role_menu` VALUES (208, 101, 1002, '', '2021-01-21 03:07:43', '', '2021-01-21 03:10:08', b'1'); -INSERT INTO `sys_role_menu` VALUES (209, 101, 1002, '', '2021-01-21 03:11:17', '', '2021-01-21 03:13:11', b'1'); -INSERT INTO `sys_role_menu` VALUES (210, 101, 1, '', '2021-01-21 03:13:21', '', '2021-01-21 03:13:21', b'0'); -INSERT INTO `sys_role_menu` VALUES (211, 101, 1001, '', '2021-01-21 03:13:21', '', '2021-01-21 03:13:40', b'1'); -INSERT INTO `sys_role_menu` VALUES (212, 101, 100, '', '2021-01-21 03:13:21', '', '2021-01-21 03:13:40', b'1'); -INSERT INTO `sys_role_menu` VALUES (213, 101, 1008, '', '2021-01-21 03:13:40', '', '2021-01-21 03:23:14', b'1'); -INSERT INTO `sys_role_menu` VALUES (214, 101, 1009, '', '2021-01-21 03:13:40', '', '2021-01-21 03:23:14', b'1'); -INSERT INTO `sys_role_menu` VALUES (215, 101, 1010, '', '2021-01-21 03:13:40', '', '2021-01-21 03:23:14', b'1'); -INSERT INTO `sys_role_menu` VALUES (216, 101, 1011, '', '2021-01-21 03:13:40', '', '2021-01-21 03:23:14', b'1'); -INSERT INTO `sys_role_menu` VALUES (217, 101, 1012, '', '2021-01-21 03:13:40', '', '2021-01-21 03:23:14', b'1'); -INSERT INTO `sys_role_menu` VALUES (218, 101, 101, '', '2021-01-21 03:13:40', '', '2021-01-21 03:23:14', b'1'); -INSERT INTO `sys_role_menu` VALUES (219, 101, 1063, '', '2021-01-21 03:13:40', '', '2021-01-21 03:23:14', b'1'); -INSERT INTO `sys_role_menu` VALUES (220, 101, 1064, '', '2021-01-21 03:13:40', '', '2021-01-21 03:23:14', b'1'); -INSERT INTO `sys_role_menu` VALUES (221, 101, 1065, '', '2021-01-21 03:13:40', '', '2021-01-21 03:23:14', b'1'); -INSERT INTO `sys_role_menu` VALUES (222, 101, 100, '', '2021-01-21 03:23:14', '', '2021-01-21 03:23:27', b'1'); -INSERT INTO `sys_role_menu` VALUES (223, 101, 1001, '', '2021-01-21 03:23:14', '', '2021-01-21 03:23:27', b'1'); -INSERT INTO `sys_role_menu` VALUES (224, 101, 1002, '', '2021-01-21 03:23:14', '', '2021-01-21 03:23:27', b'1'); -INSERT INTO `sys_role_menu` VALUES (225, 101, 1003, '', '2021-01-21 03:23:14', '', '2021-01-21 03:23:27', b'1'); -INSERT INTO `sys_role_menu` VALUES (226, 101, 1004, '', '2021-01-21 03:23:14', '', '2021-01-21 03:23:27', b'1'); -INSERT INTO `sys_role_menu` VALUES (227, 101, 1005, '', '2021-01-21 03:23:14', '', '2021-01-21 03:23:27', b'1'); -INSERT INTO `sys_role_menu` VALUES (228, 101, 1006, '', '2021-01-21 03:23:14', '', '2021-01-21 03:23:27', b'1'); -INSERT INTO `sys_role_menu` VALUES (229, 101, 1007, '', '2021-01-21 03:23:14', '', '2021-01-21 03:23:27', b'1'); -INSERT INTO `sys_role_menu` VALUES (230, 101, 1008, '', '2021-01-21 03:23:27', '', '2021-01-21 03:23:27', b'0'); -INSERT INTO `sys_role_menu` VALUES (231, 101, 1009, '', '2021-01-21 03:23:27', '', '2021-01-21 03:23:27', b'0'); -INSERT INTO `sys_role_menu` VALUES (232, 101, 1010, '', '2021-01-21 03:23:27', '', '2021-01-21 03:23:27', b'0'); -INSERT INTO `sys_role_menu` VALUES (233, 101, 1011, '', '2021-01-21 03:23:27', '', '2021-01-21 03:23:27', b'0'); -INSERT INTO `sys_role_menu` VALUES (234, 101, 1012, '', '2021-01-21 03:23:27', '', '2021-01-21 03:23:27', b'0'); -INSERT INTO `sys_role_menu` VALUES (235, 101, 101, '', '2021-01-21 03:23:27', '', '2021-01-21 03:23:27', b'0'); -INSERT INTO `sys_role_menu` VALUES (236, 101, 1063, '', '2021-01-21 03:23:27', '', '2021-01-21 03:23:27', b'0'); -INSERT INTO `sys_role_menu` VALUES (237, 101, 1064, '', '2021-01-21 03:23:27', '', '2021-01-21 03:23:27', b'0'); -INSERT INTO `sys_role_menu` VALUES (238, 101, 1065, '', '2021-01-21 03:23:27', '', '2021-01-21 03:23:27', b'0'); -INSERT INTO `sys_role_menu` VALUES (239, 101, 100, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); -INSERT INTO `sys_role_menu` VALUES (240, 101, 1001, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); -INSERT INTO `sys_role_menu` VALUES (241, 101, 1002, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); -INSERT INTO `sys_role_menu` VALUES (242, 101, 1003, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); -INSERT INTO `sys_role_menu` VALUES (243, 101, 1004, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); -INSERT INTO `sys_role_menu` VALUES (244, 101, 1005, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); -INSERT INTO `sys_role_menu` VALUES (245, 101, 1006, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); -INSERT INTO `sys_role_menu` VALUES (246, 101, 1007, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); -INSERT INTO `sys_role_menu` VALUES (247, 101, 1138, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); -INSERT INTO `sys_role_menu` VALUES (248, 101, 1139, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); -INSERT INTO `sys_role_menu` VALUES (249, 101, 1140, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); -INSERT INTO `sys_role_menu` VALUES (250, 101, 1141, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); -INSERT INTO `sys_role_menu` VALUES (251, 101, 1142, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); -INSERT INTO `sys_role_menu` VALUES (252, 101, 1143, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); +INSERT INTO `system_role_menu` VALUES (1, 2, 1, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); +INSERT INTO `system_role_menu` VALUES (2, 2, 2, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); +INSERT INTO `system_role_menu` VALUES (3, 2, 3, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); +INSERT INTO `system_role_menu` VALUES (4, 2, 4, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (5, 2, 100, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); +INSERT INTO `system_role_menu` VALUES (6, 2, 101, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); +INSERT INTO `system_role_menu` VALUES (7, 2, 102, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); +INSERT INTO `system_role_menu` VALUES (8, 2, 103, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); +INSERT INTO `system_role_menu` VALUES (9, 2, 104, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); +INSERT INTO `system_role_menu` VALUES (10, 2, 105, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); +INSERT INTO `system_role_menu` VALUES (11, 2, 106, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); +INSERT INTO `system_role_menu` VALUES (12, 2, 107, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); +INSERT INTO `system_role_menu` VALUES (13, 2, 108, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); +INSERT INTO `system_role_menu` VALUES (14, 2, 109, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); +INSERT INTO `system_role_menu` VALUES (15, 2, 110, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); +INSERT INTO `system_role_menu` VALUES (16, 2, 111, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (17, 2, 112, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (18, 2, 113, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (19, 2, 114, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (20, 2, 115, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); +INSERT INTO `system_role_menu` VALUES (21, 2, 116, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (22, 2, 500, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); +INSERT INTO `system_role_menu` VALUES (23, 2, 501, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); +INSERT INTO `system_role_menu` VALUES (24, 2, 1000, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); +INSERT INTO `system_role_menu` VALUES (25, 2, 1001, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (26, 2, 1002, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (27, 2, 1003, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (28, 2, 1004, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (29, 2, 1005, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (30, 2, 1006, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (31, 2, 1007, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (32, 2, 1008, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (33, 2, 1009, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (34, 2, 1010, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (35, 2, 1011, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (36, 2, 1012, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (37, 2, 1013, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (38, 2, 1014, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (39, 2, 1015, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (40, 2, 1016, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (41, 2, 1017, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (42, 2, 1018, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (43, 2, 1019, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (44, 2, 1020, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (45, 2, 1021, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (46, 2, 1022, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (47, 2, 1023, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (48, 2, 1024, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (49, 2, 1025, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (50, 2, 1026, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (51, 2, 1027, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (52, 2, 1028, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (53, 2, 1029, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (54, 2, 1030, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (55, 2, 1031, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (56, 2, 1032, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (57, 2, 1033, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (58, 2, 1034, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (59, 2, 1035, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (60, 2, 1036, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (61, 2, 1037, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (62, 2, 1038, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (63, 2, 1039, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (64, 2, 1040, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (65, 2, 1041, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (66, 2, 1042, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (67, 2, 1043, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (68, 2, 1044, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (69, 2, 1045, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (70, 2, 1046, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (71, 2, 1047, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (72, 2, 1048, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (73, 2, 1049, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (74, 2, 1050, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (75, 2, 1051, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (76, 2, 1052, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (77, 2, 1053, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (78, 2, 1054, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (79, 2, 1055, '', '2021-01-06 17:28:04', '', '2021-01-06 17:48:51', b'1'); +INSERT INTO `system_role_menu` VALUES (80, 2, 1056, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (81, 2, 1057, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (82, 2, 1058, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (83, 2, 1059, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (84, 2, 1060, '', '2021-01-06 17:28:04', '', '2021-01-06 17:28:04', b'0'); +INSERT INTO `system_role_menu` VALUES (169, 101, 1001, '', '2021-01-21 02:15:01', '', '2021-01-21 03:04:50', b'1'); +INSERT INTO `system_role_menu` VALUES (170, 101, 1, '', '2021-01-21 02:39:45', '', '2021-01-21 03:13:11', b'1'); +INSERT INTO `system_role_menu` VALUES (171, 101, 100, '', '2021-01-21 02:39:45', '', '2021-01-21 03:13:11', b'1'); +INSERT INTO `system_role_menu` VALUES (172, 101, 1024, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (173, 101, 1025, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (174, 101, 1026, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (175, 101, 1027, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (176, 101, 1028, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (177, 101, 1029, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (178, 101, 1030, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (179, 101, 1036, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (180, 101, 1037, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (181, 101, 1038, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (182, 101, 1039, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (183, 101, 1040, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (184, 101, 1042, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (185, 101, 1043, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (186, 101, 1045, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (187, 101, 1063, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (188, 101, 1064, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (189, 101, 1065, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (190, 101, 1007, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (191, 101, 1008, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (192, 101, 1009, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (193, 101, 1010, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (194, 101, 1011, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (195, 101, 1012, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (196, 101, 1013, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (197, 101, 1014, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (198, 101, 1015, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (199, 101, 1016, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (200, 101, 1017, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (201, 101, 1018, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (202, 101, 1019, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (203, 101, 1020, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (204, 101, 1021, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (205, 101, 1022, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (206, 101, 1023, '', '2021-01-21 03:04:50', '', '2021-01-21 03:07:43', b'1'); +INSERT INTO `system_role_menu` VALUES (207, 101, 1001, '', '2021-01-21 03:07:43', '', '2021-01-21 03:13:11', b'1'); +INSERT INTO `system_role_menu` VALUES (208, 101, 1002, '', '2021-01-21 03:07:43', '', '2021-01-21 03:10:08', b'1'); +INSERT INTO `system_role_menu` VALUES (209, 101, 1002, '', '2021-01-21 03:11:17', '', '2021-01-21 03:13:11', b'1'); +INSERT INTO `system_role_menu` VALUES (210, 101, 1, '', '2021-01-21 03:13:21', '', '2021-01-21 03:13:21', b'0'); +INSERT INTO `system_role_menu` VALUES (211, 101, 1001, '', '2021-01-21 03:13:21', '', '2021-01-21 03:13:40', b'1'); +INSERT INTO `system_role_menu` VALUES (212, 101, 100, '', '2021-01-21 03:13:21', '', '2021-01-21 03:13:40', b'1'); +INSERT INTO `system_role_menu` VALUES (213, 101, 1008, '', '2021-01-21 03:13:40', '', '2021-01-21 03:23:14', b'1'); +INSERT INTO `system_role_menu` VALUES (214, 101, 1009, '', '2021-01-21 03:13:40', '', '2021-01-21 03:23:14', b'1'); +INSERT INTO `system_role_menu` VALUES (215, 101, 1010, '', '2021-01-21 03:13:40', '', '2021-01-21 03:23:14', b'1'); +INSERT INTO `system_role_menu` VALUES (216, 101, 1011, '', '2021-01-21 03:13:40', '', '2021-01-21 03:23:14', b'1'); +INSERT INTO `system_role_menu` VALUES (217, 101, 1012, '', '2021-01-21 03:13:40', '', '2021-01-21 03:23:14', b'1'); +INSERT INTO `system_role_menu` VALUES (218, 101, 101, '', '2021-01-21 03:13:40', '', '2021-01-21 03:23:14', b'1'); +INSERT INTO `system_role_menu` VALUES (219, 101, 1063, '', '2021-01-21 03:13:40', '', '2021-01-21 03:23:14', b'1'); +INSERT INTO `system_role_menu` VALUES (220, 101, 1064, '', '2021-01-21 03:13:40', '', '2021-01-21 03:23:14', b'1'); +INSERT INTO `system_role_menu` VALUES (221, 101, 1065, '', '2021-01-21 03:13:40', '', '2021-01-21 03:23:14', b'1'); +INSERT INTO `system_role_menu` VALUES (222, 101, 100, '', '2021-01-21 03:23:14', '', '2021-01-21 03:23:27', b'1'); +INSERT INTO `system_role_menu` VALUES (223, 101, 1001, '', '2021-01-21 03:23:14', '', '2021-01-21 03:23:27', b'1'); +INSERT INTO `system_role_menu` VALUES (224, 101, 1002, '', '2021-01-21 03:23:14', '', '2021-01-21 03:23:27', b'1'); +INSERT INTO `system_role_menu` VALUES (225, 101, 1003, '', '2021-01-21 03:23:14', '', '2021-01-21 03:23:27', b'1'); +INSERT INTO `system_role_menu` VALUES (226, 101, 1004, '', '2021-01-21 03:23:14', '', '2021-01-21 03:23:27', b'1'); +INSERT INTO `system_role_menu` VALUES (227, 101, 1005, '', '2021-01-21 03:23:14', '', '2021-01-21 03:23:27', b'1'); +INSERT INTO `system_role_menu` VALUES (228, 101, 1006, '', '2021-01-21 03:23:14', '', '2021-01-21 03:23:27', b'1'); +INSERT INTO `system_role_menu` VALUES (229, 101, 1007, '', '2021-01-21 03:23:14', '', '2021-01-21 03:23:27', b'1'); +INSERT INTO `system_role_menu` VALUES (230, 101, 1008, '', '2021-01-21 03:23:27', '', '2021-01-21 03:23:27', b'0'); +INSERT INTO `system_role_menu` VALUES (231, 101, 1009, '', '2021-01-21 03:23:27', '', '2021-01-21 03:23:27', b'0'); +INSERT INTO `system_role_menu` VALUES (232, 101, 1010, '', '2021-01-21 03:23:27', '', '2021-01-21 03:23:27', b'0'); +INSERT INTO `system_role_menu` VALUES (233, 101, 1011, '', '2021-01-21 03:23:27', '', '2021-01-21 03:23:27', b'0'); +INSERT INTO `system_role_menu` VALUES (234, 101, 1012, '', '2021-01-21 03:23:27', '', '2021-01-21 03:23:27', b'0'); +INSERT INTO `system_role_menu` VALUES (235, 101, 101, '', '2021-01-21 03:23:27', '', '2021-01-21 03:23:27', b'0'); +INSERT INTO `system_role_menu` VALUES (236, 101, 1063, '', '2021-01-21 03:23:27', '', '2021-01-21 03:23:27', b'0'); +INSERT INTO `system_role_menu` VALUES (237, 101, 1064, '', '2021-01-21 03:23:27', '', '2021-01-21 03:23:27', b'0'); +INSERT INTO `system_role_menu` VALUES (238, 101, 1065, '', '2021-01-21 03:23:27', '', '2021-01-21 03:23:27', b'0'); +INSERT INTO `system_role_menu` VALUES (239, 101, 100, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); +INSERT INTO `system_role_menu` VALUES (240, 101, 1001, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); +INSERT INTO `system_role_menu` VALUES (241, 101, 1002, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); +INSERT INTO `system_role_menu` VALUES (242, 101, 1003, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); +INSERT INTO `system_role_menu` VALUES (243, 101, 1004, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); +INSERT INTO `system_role_menu` VALUES (244, 101, 1005, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); +INSERT INTO `system_role_menu` VALUES (245, 101, 1006, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); +INSERT INTO `system_role_menu` VALUES (246, 101, 1007, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); +INSERT INTO `system_role_menu` VALUES (247, 101, 1138, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); +INSERT INTO `system_role_menu` VALUES (248, 101, 1139, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); +INSERT INTO `system_role_menu` VALUES (249, 101, 1140, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); +INSERT INTO `system_role_menu` VALUES (250, 101, 1141, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); +INSERT INTO `system_role_menu` VALUES (251, 101, 1142, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); +INSERT INTO `system_role_menu` VALUES (252, 101, 1143, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); COMMIT; -- ---------------------------- --- Table structure for sys_sms_channel +-- Table structure for system_sms_channel -- ---------------------------- -DROP TABLE IF EXISTS `sys_sms_channel`; -CREATE TABLE `sys_sms_channel` ( +DROP TABLE IF EXISTS `system_sms_channel`; +CREATE TABLE `system_sms_channel` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ç¼–å·', - `signature` varchar(10) NOT NULL COMMENT '短信签å', - `code` varchar(63) NOT NULL COMMENT '渠é“ç¼–ç ', + `signature` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '短信签å', + `code` varchar(63) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '渠é“ç¼–ç ', `status` tinyint NOT NULL COMMENT 'å¼€å¯çжæ€', - `remark` varchar(255) DEFAULT NULL COMMENT '备注', - `api_key` varchar(128) NOT NULL COMMENT '短信 API 的账å·', - `api_secret` varchar(128) DEFAULT NULL COMMENT '短信 API 的秘钥', - `callback_url` varchar(255) DEFAULT NULL COMMENT '短信å‘é€å›žè°ƒ URL', - `creator` varchar(64) DEFAULT '' COMMENT '创建者', + `remark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `api_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '短信 API 的账å·', + `api_secret` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '短信 API 的秘钥', + `callback_url` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '短信å‘é€å›žè°ƒ URL', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) DEFAULT '' COMMENT '更新者', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='短信渠é“'; -- ---------------------------- --- Records of sys_sms_channel +-- Records of system_sms_channel -- ---------------------------- BEGIN; -INSERT INTO `sys_sms_channel` VALUES (1, '芋é“', 'YUN_PIAN', 0, '呵呵呵哒', '1555a14277cb8a608cf45a9e6a80d510', NULL, 'http://java.nat300.top/api/system/sms/callback/sms/yunpian', '', '2021-03-31 06:12:20', '1', '2021-04-13 01:03:19', b'0'); -INSERT INTO `sys_sms_channel` VALUES (2, 'Ballcat', 'ALIYUN', 0, '啦啦啦', 'LTAI5tCnKso2uG3kJ5gRav88', 'fGJ5SNXL7P1NHNRmJ7DJaMJGPyE55C', NULL, '', '2021-03-31 11:53:10', '1', '2021-04-14 00:08:37', b'0'); -INSERT INTO `sys_sms_channel` VALUES (3, '测试', 'YUN_PIAN', 0, '哈哈哈', '23132', NULL, 'http://www.baidu.com', '1', '2021-04-05 21:10:34', '1', '2021-04-11 16:21:58', b'1'); -INSERT INTO `sys_sms_channel` VALUES (4, '测试渠é“', 'DEBUG_DING_TALK', 0, '123', '696b5d8ead48071237e4aa5861ff08dbadb2b4ded1c688a7b7c9afc615579859', 'SEC5c4e5ff888bc8a9923ae47f59e7ccd30af1f14d93c55b4e2c9cb094e35aeed67', NULL, '1', '2021-04-13 00:23:14', '1', '2021-04-14 00:07:10', b'0'); +INSERT INTO `system_sms_channel` VALUES (1, '芋é“', 'YUN_PIAN', 0, '呵呵呵哒', '1555a14277cb8a608cf45a9e6a80d510', NULL, 'http://java.nat300.top/api/system/sms/callback/sms/yunpian', '', '2021-03-31 06:12:20', '1', '2021-04-13 01:03:19', b'0'); +INSERT INTO `system_sms_channel` VALUES (2, 'Ballcat', 'ALIYUN', 0, '啦啦啦', 'LTAI5tCnKso2uG3kJ5gRav88', 'fGJ5SNXL7P1NHNRmJ7DJaMJGPyE55C', NULL, '', '2021-03-31 11:53:10', '1', '2021-04-14 00:08:37', b'0'); +INSERT INTO `system_sms_channel` VALUES (3, '测试', 'YUN_PIAN', 0, '哈哈哈', '23132', NULL, 'http://www.baidu.com', '1', '2021-04-05 21:10:34', '1', '2021-04-11 16:21:58', b'1'); +INSERT INTO `system_sms_channel` VALUES (4, '测试渠é“', 'DEBUG_DING_TALK', 0, '123', '696b5d8ead48071237e4aa5861ff08dbadb2b4ded1c688a7b7c9afc615579859', 'SEC5c4e5ff888bc8a9923ae47f59e7ccd30af1f14d93c55b4e2c9cb094e35aeed67', NULL, '1', '2021-04-13 00:23:14', '1', '2021-04-14 00:07:10', b'0'); COMMIT; -- ---------------------------- --- Table structure for sys_sms_code +-- Table structure for system_sms_code -- ---------------------------- -DROP TABLE IF EXISTS `sys_sms_code`; -CREATE TABLE `sys_sms_code` ( +DROP TABLE IF EXISTS `system_sms_code`; +CREATE TABLE `system_sms_code` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ç¼–å·', - `mobile` varchar(11) NOT NULL COMMENT '手机å·', - `code` varchar(6) NOT NULL COMMENT '验è¯ç ', - `create_ip` varchar(15) NOT NULL COMMENT '创建 IP', + `mobile` varchar(11) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '手机å·', + `code` varchar(6) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '验è¯ç ', + `create_ip` varchar(15) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建 IP', `scene` tinyint NOT NULL COMMENT 'å‘é€åœºæ™¯', `today_index` tinyint NOT NULL COMMENT '今日å‘é€çš„第几æ¡', `used` tinyint NOT NULL COMMENT '是å¦ä½¿ç”¨', `used_time` datetime DEFAULT NULL COMMENT '使用时间', - `used_ip` varchar(255) DEFAULT NULL COMMENT '使用 IP', - `creator` varchar(64) DEFAULT '' COMMENT '创建者', + `used_ip` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '使用 IP', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) DEFAULT '' COMMENT '更新者', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', PRIMARY KEY (`id`) USING BTREE, KEY `idx_mobile` (`mobile`) USING BTREE COMMENT '手机å·' -) ENGINE=InnoDB AUTO_INCREMENT=462 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='手机验è¯ç '; +) ENGINE=InnoDB AUTO_INCREMENT=464 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='手机验è¯ç '; -- ---------------------------- --- Records of sys_sms_code +-- Records of system_sms_code -- ---------------------------- BEGIN; -INSERT INTO `sys_sms_code` VALUES (445, '15601691300', '9999', '127.0.0.1', 1, 1, 0, NULL, NULL, NULL, '2021-10-10 21:46:49', NULL, '2021-10-10 21:46:49', b'0'); -INSERT INTO `sys_sms_code` VALUES (446, '15601691300', '9999', '127.0.0.1', 1, 2, 0, NULL, NULL, NULL, '2021-10-10 21:47:51', NULL, '2021-10-10 21:47:51', b'0'); -INSERT INTO `sys_sms_code` VALUES (447, '15601691300', '9999', '127.0.0.1', 1, 3, 0, NULL, NULL, NULL, '2021-10-10 21:48:55', NULL, '2021-10-10 21:48:55', b'0'); -INSERT INTO `sys_sms_code` VALUES (448, '15601691300', '9999', '127.0.0.1', 1, 4, 1, '2021-10-10 22:32:52', '127.0.0.1', NULL, '2021-10-10 22:32:49', NULL, '2021-10-10 22:32:52', b'0'); -INSERT INTO `sys_sms_code` VALUES (449, '15601691300', '9999', '127.0.0.1', 1, 5, 1, '2021-10-10 22:34:03', '127.0.0.1', NULL, '2021-10-10 22:34:01', NULL, '2021-10-10 22:34:03', b'0'); -INSERT INTO `sys_sms_code` VALUES (450, '15601691301', '9999', '127.0.0.1', 1, 1, 1, '2021-10-10 22:36:27', '127.0.0.1', NULL, '2021-10-10 22:34:12', NULL, '2021-10-10 22:36:27', b'0'); -INSERT INTO `sys_sms_code` VALUES (451, '15601691399', '9999', '127.0.0.1', 1, 1, 0, NULL, NULL, NULL, '2021-10-12 08:29:09', NULL, '2021-10-12 08:29:09', b'0'); -INSERT INTO `sys_sms_code` VALUES (452, '15601691399', '9999', '127.0.0.1', 1, 2, 0, NULL, NULL, NULL, '2021-10-12 08:42:16', NULL, '2021-10-12 08:42:16', b'0'); -INSERT INTO `sys_sms_code` VALUES (453, '15601691300', '9999', '127.0.0.1', 1, 6, 0, NULL, NULL, NULL, '2021-11-28 20:29:24', NULL, '2021-11-28 20:29:24', b'0'); -INSERT INTO `sys_sms_code` VALUES (454, '15601691300', '9999', '127.0.0.1', 1, 7, 0, NULL, NULL, NULL, '2021-11-28 20:30:33', NULL, '2021-11-28 20:30:33', b'0'); -INSERT INTO `sys_sms_code` VALUES (455, '15601691300', '9999', '127.0.0.1', 1, 8, 0, NULL, NULL, NULL, '2021-11-28 20:31:49', NULL, '2021-11-28 20:31:49', b'0'); -INSERT INTO `sys_sms_code` VALUES (456, '15601691301', '9999', '127.0.0.1', 1, 2, 0, NULL, NULL, NULL, '2021-11-28 20:32:22', NULL, '2021-11-28 20:32:22', b'0'); -INSERT INTO `sys_sms_code` VALUES (457, '15601691302', '9999', '127.0.0.1', 1, 1, 0, NULL, NULL, NULL, '2021-11-28 20:33:04', NULL, '2021-11-28 20:33:04', b'0'); -INSERT INTO `sys_sms_code` VALUES (458, '15601691322', '9999', '127.0.0.1', 1, 1, 0, NULL, NULL, NULL, '2021-11-28 20:33:24', NULL, '2021-11-28 20:33:24', b'0'); -INSERT INTO `sys_sms_code` VALUES (459, '15601691322', '9999', '127.0.0.1', 1, 2, 0, NULL, NULL, NULL, '2021-11-28 20:34:48', NULL, '2021-11-28 20:34:48', b'0'); -INSERT INTO `sys_sms_code` VALUES (460, '15601691300', '9999', '127.0.0.1', 1, 9, 1, '2021-11-28 20:37:02', '127.0.0.1', NULL, '2021-11-28 20:36:59', NULL, '2021-11-28 20:37:02', b'0'); -INSERT INTO `sys_sms_code` VALUES (461, '15601691300', '9999', '127.0.0.1', 1, 10, 1, '2021-11-28 20:47:51', '127.0.0.1', '245', '2021-11-28 20:47:49', '245', '2021-11-28 20:47:51', b'0'); +INSERT INTO `system_sms_code` VALUES (445, '15601691300', '9999', '127.0.0.1', 1, 1, 0, NULL, NULL, NULL, '2021-10-10 21:46:49', NULL, '2021-10-10 21:46:49', b'0'); +INSERT INTO `system_sms_code` VALUES (446, '15601691300', '9999', '127.0.0.1', 1, 2, 0, NULL, NULL, NULL, '2021-10-10 21:47:51', NULL, '2021-10-10 21:47:51', b'0'); +INSERT INTO `system_sms_code` VALUES (447, '15601691300', '9999', '127.0.0.1', 1, 3, 0, NULL, NULL, NULL, '2021-10-10 21:48:55', NULL, '2021-10-10 21:48:55', b'0'); +INSERT INTO `system_sms_code` VALUES (448, '15601691300', '9999', '127.0.0.1', 1, 4, 1, '2021-10-10 22:32:52', '127.0.0.1', NULL, '2021-10-10 22:32:49', NULL, '2021-10-10 22:32:52', b'0'); +INSERT INTO `system_sms_code` VALUES (449, '15601691300', '9999', '127.0.0.1', 1, 5, 1, '2021-10-10 22:34:03', '127.0.0.1', NULL, '2021-10-10 22:34:01', NULL, '2021-10-10 22:34:03', b'0'); +INSERT INTO `system_sms_code` VALUES (450, '15601691301', '9999', '127.0.0.1', 1, 1, 1, '2021-10-10 22:36:27', '127.0.0.1', NULL, '2021-10-10 22:34:12', NULL, '2021-10-10 22:36:27', b'0'); +INSERT INTO `system_sms_code` VALUES (451, '15601691399', '9999', '127.0.0.1', 1, 1, 0, NULL, NULL, NULL, '2021-10-12 08:29:09', NULL, '2021-10-12 08:29:09', b'0'); +INSERT INTO `system_sms_code` VALUES (452, '15601691399', '9999', '127.0.0.1', 1, 2, 0, NULL, NULL, NULL, '2021-10-12 08:42:16', NULL, '2021-10-12 08:42:16', b'0'); +INSERT INTO `system_sms_code` VALUES (453, '15601691300', '9999', '127.0.0.1', 1, 6, 0, NULL, NULL, NULL, '2021-11-28 20:29:24', NULL, '2021-11-28 20:29:24', b'0'); +INSERT INTO `system_sms_code` VALUES (454, '15601691300', '9999', '127.0.0.1', 1, 7, 0, NULL, NULL, NULL, '2021-11-28 20:30:33', NULL, '2021-11-28 20:30:33', b'0'); +INSERT INTO `system_sms_code` VALUES (455, '15601691300', '9999', '127.0.0.1', 1, 8, 0, NULL, NULL, NULL, '2021-11-28 20:31:49', NULL, '2021-11-28 20:31:49', b'0'); +INSERT INTO `system_sms_code` VALUES (456, '15601691301', '9999', '127.0.0.1', 1, 2, 0, NULL, NULL, NULL, '2021-11-28 20:32:22', NULL, '2021-11-28 20:32:22', b'0'); +INSERT INTO `system_sms_code` VALUES (457, '15601691302', '9999', '127.0.0.1', 1, 1, 0, NULL, NULL, NULL, '2021-11-28 20:33:04', NULL, '2021-11-28 20:33:04', b'0'); +INSERT INTO `system_sms_code` VALUES (458, '15601691322', '9999', '127.0.0.1', 1, 1, 0, NULL, NULL, NULL, '2021-11-28 20:33:24', NULL, '2021-11-28 20:33:24', b'0'); +INSERT INTO `system_sms_code` VALUES (459, '15601691322', '9999', '127.0.0.1', 1, 2, 0, NULL, NULL, NULL, '2021-11-28 20:34:48', NULL, '2021-11-28 20:34:48', b'0'); +INSERT INTO `system_sms_code` VALUES (460, '15601691300', '9999', '127.0.0.1', 1, 9, 1, '2021-11-28 20:37:02', '127.0.0.1', NULL, '2021-11-28 20:36:59', NULL, '2021-11-28 20:37:02', b'0'); +INSERT INTO `system_sms_code` VALUES (461, '15601691300', '9999', '127.0.0.1', 1, 10, 1, '2021-11-28 20:47:51', '127.0.0.1', '245', '2021-11-28 20:47:49', '245', '2021-11-28 20:47:51', b'0'); +INSERT INTO `system_sms_code` VALUES (462, '15601691399', '9999', '127.0.0.1', 1, 3, 0, NULL, NULL, NULL, '2022-01-29 11:50:26', NULL, '2022-01-29 11:50:26', b'0'); +INSERT INTO `system_sms_code` VALUES (463, '15601691399', '9999', '127.0.0.1', 1, 4, 0, NULL, NULL, NULL, '2022-01-29 13:58:06', NULL, '2022-01-29 13:58:06', b'0'); COMMIT; -- ---------------------------- --- Table structure for sys_sms_log +-- Table structure for system_sms_log -- ---------------------------- -DROP TABLE IF EXISTS `sys_sms_log`; -CREATE TABLE `sys_sms_log` ( +DROP TABLE IF EXISTS `system_sms_log`; +CREATE TABLE `system_sms_log` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ç¼–å·', `channel_id` bigint NOT NULL COMMENT '短信渠é“ç¼–å·', - `channel_code` varchar(63) NOT NULL COMMENT '短信渠é“ç¼–ç ', + `channel_code` varchar(63) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '短信渠é“ç¼–ç ', `template_id` bigint NOT NULL COMMENT '模æ¿ç¼–å·', - `template_code` varchar(63) NOT NULL COMMENT '模æ¿ç¼–ç ', + `template_code` varchar(63) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模æ¿ç¼–ç ', `template_type` tinyint NOT NULL COMMENT '短信类型', - `template_content` varchar(255) NOT NULL COMMENT '短信内容', - `template_params` varchar(255) NOT NULL COMMENT 'çŸ­ä¿¡å‚æ•°', - `api_template_id` varchar(63) NOT NULL COMMENT '短信 API 的模æ¿ç¼–å·', - `mobile` varchar(11) NOT NULL COMMENT '手机å·', + `template_content` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '短信内容', + `template_params` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'çŸ­ä¿¡å‚æ•°', + `api_template_id` varchar(63) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '短信 API 的模æ¿ç¼–å·', + `mobile` varchar(11) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '手机å·', `user_id` bigint DEFAULT NULL COMMENT '用户编å·', `user_type` tinyint DEFAULT NULL COMMENT '用户类型', `send_status` tinyint NOT NULL DEFAULT '0' COMMENT 'å‘é€çжæ€', `send_time` datetime DEFAULT NULL COMMENT 'å‘逿—¶é—´', `send_code` int DEFAULT NULL COMMENT 'å‘é€ç»“果的编ç ', - `send_msg` varchar(255) DEFAULT NULL COMMENT 'å‘é€ç»“果的æç¤º', - `api_send_code` varchar(63) DEFAULT NULL COMMENT '短信 API å‘é€ç»“果的编ç ', - `api_send_msg` varchar(255) DEFAULT NULL COMMENT '短信 API å‘é€å¤±è´¥çš„æç¤º', - `api_request_id` varchar(255) DEFAULT NULL COMMENT '短信 API å‘é€è¿”回的唯一请求 ID', - `api_serial_no` varchar(255) DEFAULT NULL COMMENT '短信 API å‘é€è¿”回的åºå·', + `send_msg` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'å‘é€ç»“果的æç¤º', + `api_send_code` varchar(63) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '短信 API å‘é€ç»“果的编ç ', + `api_send_msg` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '短信 API å‘é€å¤±è´¥çš„æç¤º', + `api_request_id` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '短信 API å‘é€è¿”回的唯一请求 ID', + `api_serial_no` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '短信 API å‘é€è¿”回的åºå·', `receive_status` tinyint NOT NULL DEFAULT '0' COMMENT '接收状æ€', `receive_time` datetime DEFAULT NULL COMMENT '接收时间', - `api_receive_code` varchar(63) DEFAULT NULL COMMENT 'API 接收结果的编ç ', - `api_receive_msg` varchar(255) DEFAULT NULL COMMENT 'API 接收结果的说明', - `creator` varchar(64) DEFAULT '' COMMENT '创建者', + `api_receive_code` varchar(63) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'API 接收结果的编ç ', + `api_receive_msg` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'API 接收结果的说明', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) DEFAULT '' COMMENT '更新者', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=116 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='短信日志'; +) ENGINE=InnoDB AUTO_INCREMENT=126 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='短信日志'; -- ---------------------------- --- Records of sys_sms_log +-- Records of system_sms_log -- ---------------------------- BEGIN; +INSERT INTO `system_sms_log` VALUES (116, 4, 'DEBUG_DING_TALK', 9, 'bpm_task_assigned', 2, 'æ‚¨æ”¶åˆ°äº†ä¸€æ¡æ–°çš„待办任务:eeee-ç”³è¯·ï¼Œç”³è¯·äººï¼šèŠ‹é“æºç ï¼Œå¤„ç†é“¾æŽ¥ï¼šhttp://dashboard.yudao.iocoder.cnbpm/process-instance/detail?id=b243fa82-7c06-11ec-9110-acde48001122', '{\"startUserNickname\":\"èŠ‹é“æºç \",\"taskName\":\"申请\",\"detailUrl\":\"http://dashboard.yudao.iocoder.cnbpm/process-instance/detail?id=b243fa82-7c06-11ec-9110-acde48001122\",\"processInstanceName\":\"eeee\"}', 'suibian', '15612345678', 1, 2, 10, '2022-01-23 12:41:21', 0, 'æˆåŠŸ', '0', NULL, NULL, 'b8b77315-6e6f-46a4-82e7-8610d198bef8', 0, NULL, NULL, NULL, '1', '2022-01-23 12:41:19', NULL, '2022-01-23 12:41:21', b'0'); +INSERT INTO `system_sms_log` VALUES (117, 4, 'DEBUG_DING_TALK', 9, 'bpm_task_assigned', 2, 'æ‚¨æ”¶åˆ°äº†ä¸€æ¡æ–°çš„待办任务:eeee-ç”³è¯·ï¼Œç”³è¯·äººï¼šèŠ‹é“æºç ï¼Œå¤„ç†é“¾æŽ¥ï¼šhttp://dashboard.yudao.iocoder.cnbpm/process-instance/detail?id=b243fa82-7c06-11ec-9110-acde48001122', '{\"startUserNickname\":\"èŠ‹é“æºç \",\"taskName\":\"申请\",\"detailUrl\":\"http://dashboard.yudao.iocoder.cnbpm/process-instance/detail?id=b243fa82-7c06-11ec-9110-acde48001122\",\"processInstanceName\":\"eeee\"}', 'suibian', '15612345678', 1, 2, 10, '2022-01-23 12:41:21', 0, 'æˆåŠŸ', '0', NULL, NULL, 'b06bbd9b-912b-4d61-9dc2-a7f7e336ebe2', 0, NULL, NULL, NULL, '1', '2022-01-23 12:41:19', NULL, '2022-01-23 12:41:21', b'0'); +INSERT INTO `system_sms_log` VALUES (118, 4, 'DEBUG_DING_TALK', 9, 'bpm_task_assigned', 2, 'æ‚¨æ”¶åˆ°äº†ä¸€æ¡æ–°çš„待办任务:测试多审批人-1.1ï¼Œç”³è¯·äººï¼šèŠ‹é“æºç ï¼Œå¤„ç†é“¾æŽ¥ï¼šhttp://dashboard.yudao.iocoder.cnbpm/process-instance/detail?id=ecddb286-7c07-11ec-a41d-acde48001122', '{\"startUserNickname\":\"èŠ‹é“æºç \",\"taskName\":\"1.1\",\"detailUrl\":\"http://dashboard.yudao.iocoder.cnbpm/process-instance/detail?id=ecddb286-7c07-11ec-a41d-acde48001122\",\"processInstanceName\":\"测试多审批人\"}', 'suibian', '15612345678', 1, 2, 10, '2022-01-23 12:50:08', 0, 'æˆåŠŸ', '0', NULL, NULL, '97c8032c-e159-4e96-8d4a-c087a780f390', 0, NULL, NULL, NULL, '1', '2022-01-23 12:50:06', NULL, '2022-01-23 12:50:08', b'0'); +INSERT INTO `system_sms_log` VALUES (119, 4, 'DEBUG_DING_TALK', 9, 'bpm_task_assigned', 2, 'æ‚¨æ”¶åˆ°äº†ä¸€æ¡æ–°çš„待办任务:测试多审批人-1.2ï¼Œç”³è¯·äººï¼šèŠ‹é“æºç ï¼Œå¤„ç†é“¾æŽ¥ï¼šhttp://dashboard.yudao.iocoder.cnbpm/process-instance/detail?id=ecddb286-7c07-11ec-a41d-acde48001122', '{\"startUserNickname\":\"èŠ‹é“æºç \",\"taskName\":\"1.2\",\"detailUrl\":\"http://dashboard.yudao.iocoder.cnbpm/process-instance/detail?id=ecddb286-7c07-11ec-a41d-acde48001122\",\"processInstanceName\":\"测试多审批人\"}', 'suibian', '15612345678', 1, 2, 10, '2022-01-23 12:50:08', 0, 'æˆåŠŸ', '0', NULL, NULL, '880a1432-2de0-409d-9e72-0e9ecbe073fb', 0, NULL, NULL, NULL, '1', '2022-01-23 12:50:06', NULL, '2022-01-23 12:50:08', b'0'); +INSERT INTO `system_sms_log` VALUES (120, 4, 'DEBUG_DING_TALK', 9, 'bpm_task_assigned', 2, 'æ‚¨æ”¶åˆ°äº†ä¸€æ¡æ–°çš„待办任务:测试多审批人-1.2ï¼Œç”³è¯·äººï¼šèŠ‹é“æºç ï¼Œå¤„ç†é“¾æŽ¥ï¼šhttp://dashboard.yudao.iocoder.cnbpm/process-instance/detail?id=ecddb286-7c07-11ec-a41d-acde48001122', '{\"startUserNickname\":\"èŠ‹é“æºç \",\"taskName\":\"1.2\",\"detailUrl\":\"http://dashboard.yudao.iocoder.cnbpm/process-instance/detail?id=ecddb286-7c07-11ec-a41d-acde48001122\",\"processInstanceName\":\"测试多审批人\"}', 'suibian', '15612345678', 1, 2, 10, '2022-01-23 12:50:08', 0, 'æˆåŠŸ', '0', NULL, NULL, 'de12a261-fc48-4a0c-8b9d-8628f6697ca8', 0, NULL, NULL, NULL, '1', '2022-01-23 12:50:06', NULL, '2022-01-23 12:50:08', b'0'); +INSERT INTO `system_sms_log` VALUES (121, 4, 'DEBUG_DING_TALK', 9, 'bpm_task_assigned', 2, 'æ‚¨æ”¶åˆ°äº†ä¸€æ¡æ–°çš„待办任务:测试多审批人-1.1ï¼Œç”³è¯·äººï¼šèŠ‹é“æºç ï¼Œå¤„ç†é“¾æŽ¥ï¼šhttp://dashboard.yudao.iocoder.cnbpm/process-instance/detail?id=ecddb286-7c07-11ec-a41d-acde48001122', '{\"startUserNickname\":\"èŠ‹é“æºç \",\"taskName\":\"1.1\",\"detailUrl\":\"http://dashboard.yudao.iocoder.cnbpm/process-instance/detail?id=ecddb286-7c07-11ec-a41d-acde48001122\",\"processInstanceName\":\"测试多审批人\"}', 'suibian', '15612345678', 1, 2, 10, '2022-01-23 12:50:08', 0, 'æˆåŠŸ', '0', NULL, NULL, '0d482592-56c2-4855-b846-b218fafa8b2f', 0, NULL, NULL, NULL, '1', '2022-01-23 12:50:06', NULL, '2022-01-23 12:50:08', b'0'); +INSERT INTO `system_sms_log` VALUES (122, 4, 'DEBUG_DING_TALK', 9, 'bpm_task_assigned', 2, 'æ‚¨æ”¶åˆ°äº†ä¸€æ¡æ–°çš„待办任务:滔åš-ä»»åŠ¡ä¸€ï¼Œç”³è¯·äººï¼šèŠ‹é“æºç ï¼Œå¤„ç†é“¾æŽ¥ï¼šhttp://dashboard.yudao.iocoder.cnbpm/process-instance/detail?id=4f676a08-7c09-11ec-b8a1-acde48001122', '{\"startUserNickname\":\"èŠ‹é“æºç \",\"taskName\":\"任务一\",\"detailUrl\":\"http://dashboard.yudao.iocoder.cnbpm/process-instance/detail?id=4f676a08-7c09-11ec-b8a1-acde48001122\",\"processInstanceName\":\"æ»”åš\"}', 'suibian', '15612345678', 1, 2, 10, '2022-01-23 12:59:58', 0, 'æˆåŠŸ', '0', NULL, NULL, '792d966f-a5ab-43bb-9a33-706688e1550b', 0, NULL, NULL, NULL, '1', '2022-01-23 12:59:57', NULL, '2022-01-23 12:59:58', b'0'); +INSERT INTO `system_sms_log` VALUES (123, 4, 'DEBUG_DING_TALK', 9, 'bpm_task_assigned', 2, 'æ‚¨æ”¶åˆ°äº†ä¸€æ¡æ–°çš„待办任务:滔åš-ä»»åŠ¡ä¸€ï¼Œç”³è¯·äººï¼šèŠ‹é“æºç ï¼Œå¤„ç†é“¾æŽ¥ï¼šhttp://dashboard.yudao.iocoder.cnbpm/process-instance/detail?id=4f676a08-7c09-11ec-b8a1-acde48001122', '{\"startUserNickname\":\"èŠ‹é“æºç \",\"taskName\":\"任务一\",\"detailUrl\":\"http://dashboard.yudao.iocoder.cnbpm/process-instance/detail?id=4f676a08-7c09-11ec-b8a1-acde48001122\",\"processInstanceName\":\"æ»”åš\"}', 'suibian', '15612345678', 1, 2, 10, '2022-01-23 12:59:58', 0, 'æˆåŠŸ', '0', NULL, NULL, '54cdaa92-8d2c-4c53-826f-70397eb29531', 0, NULL, NULL, NULL, '1', '2022-01-23 12:59:57', NULL, '2022-01-23 12:59:58', b'0'); +INSERT INTO `system_sms_log` VALUES (124, 1, 'YUN_PIAN', 8, 'user-sms-login', 1, '您的验è¯ç æ˜¯9999', '{\"code\":\"9999\"}', '4372216', '15601691399', NULL, 1, 20, '2022-01-29 11:50:27', 2001000100, 'IP ä¸å…许å‘é€çŸ­ä¿¡', '-3', 'IP没有æƒé™ => IP 101.82.59.182 未加入白åå•,å¯åœ¨åŽå°â€˜ç³»ç»Ÿè®¾ç½®->IP白åå•设置’里添加', NULL, NULL, 0, NULL, NULL, NULL, NULL, '2022-01-29 11:50:26', NULL, '2022-01-29 11:50:27', b'0'); +INSERT INTO `system_sms_log` VALUES (125, 1, 'YUN_PIAN', 8, 'user-sms-login', 1, '您的验è¯ç æ˜¯9999', '{\"code\":\"9999\"}', '4372216', '15601691399', NULL, 1, 20, '2022-01-29 13:58:07', 2001000100, 'IP ä¸å…许å‘é€çŸ­ä¿¡', '-3', 'IP没有æƒé™ => IP 101.82.80.210 未加入白åå•,å¯åœ¨åŽå°â€˜ç³»ç»Ÿè®¾ç½®->IP白åå•设置’里添加', NULL, NULL, 0, NULL, NULL, NULL, NULL, '2022-01-29 13:58:07', NULL, '2022-01-29 13:58:07', b'0'); COMMIT; -- ---------------------------- --- Table structure for sys_sms_template +-- Table structure for system_sms_template -- ---------------------------- -DROP TABLE IF EXISTS `sys_sms_template`; -CREATE TABLE `sys_sms_template` ( +DROP TABLE IF EXISTS `system_sms_template`; +CREATE TABLE `system_sms_template` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ç¼–å·', `type` tinyint NOT NULL COMMENT '短信签å', `status` tinyint NOT NULL COMMENT 'å¼€å¯çжæ€', @@ -2547,26 +3091,26 @@ CREATE TABLE `sys_sms_template` ( ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='短信模æ¿'; -- ---------------------------- --- Records of sys_sms_template +-- Records of system_sms_template -- ---------------------------- BEGIN; -INSERT INTO `sys_sms_template` VALUES (2, 1, 0, 'test_01', '测试验è¯ç çŸ­ä¿¡', '正在进行登录æ“作{operation},您的验è¯ç æ˜¯{code}', '[\"operation\",\"code\"]', NULL, '4383920', 1, 'YUN_PIAN', '', '2021-03-31 10:49:38', '1', '2021-04-10 01:22:00', b'0'); -INSERT INTO `sys_sms_template` VALUES (3, 1, 0, 'test_02', '公告通知', '您的验è¯ç {code},该验è¯ç 5分钟内有效,请勿泄æ¼äºŽä»–人ï¼', '[\"code\"]', NULL, 'SMS_207945135', 2, 'ALIYUN', '', '2021-03-31 11:56:30', '1', '2021-04-10 01:22:02', b'0'); -INSERT INTO `sys_sms_template` VALUES (4, 3, 0, 'test-ooxx', '测试模æ¿', 'biubiubiu', '[]', '1111', '110', 1, 'YUN_PIAN', '1', '2021-04-09 23:58:42', '1', '2021-04-02 07:47:12', b'1'); -INSERT INTO `sys_sms_template` VALUES (5, 3, 0, 'test-ooxx', '测试模æ¿', 'biubiubiu', '[]', '1111', '110', 1, 'YUN_PIAN', '1', '2021-04-09 23:58:42', '1', '2021-04-02 08:32:22', b'1'); -INSERT INTO `sys_sms_template` VALUES (6, 3, 0, 'test-01', '测试模æ¿', '哈哈哈 {name}', '[\"name\"]', 'f哈哈哈', '4383920', 1, 'YUN_PIAN', '1', '2021-04-10 01:07:21', '1', '2021-04-10 01:22:05', b'0'); -INSERT INTO `sys_sms_template` VALUES (7, 3, 0, 'test-04', '测试下', 'è€é¸¡{name},牛逼{code}', '[\"name\",\"code\"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', '2021-04-13 00:29:53', '1', '2021-04-14 00:30:38', b'0'); -INSERT INTO `sys_sms_template` VALUES (8, 1, 0, 'user-sms-login', 'å‰å°ç”¨æˆ·çŸ­ä¿¡ç™»å½•', '您的验è¯ç æ˜¯{code}', '[\"code\"]', NULL, '4372216', 1, 'YUN_PIAN', '1', '2021-10-11 08:10:00', '1', '2021-10-11 08:10:00', b'0'); -INSERT INTO `sys_sms_template` VALUES (9, 2, 0, 'bpm_task_assigned', 'ã€å·¥ä½œæµã€‘任务被分é…', 'æ‚¨æ”¶åˆ°äº†ä¸€æ¡æ–°çš„待办任务:{processInstanceName}-{taskName},申请人:{startUserNickname},处ç†é“¾æŽ¥ï¼š{detailUrl}', '[\"processInstanceName\",\"taskName\",\"startUserNickname\",\"detailUrl\"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', '2022-01-21 22:31:19', '1', '2022-01-22 00:03:36', b'0'); -INSERT INTO `sys_sms_template` VALUES (10, 2, 0, 'bpm_process_instance_reject', 'ã€å·¥ä½œæµã€‘æµç¨‹è¢«ä¸é€šè¿‡', '您的æµç¨‹è¢«å®¡æ‰¹ä¸é€šè¿‡ï¼š{processInstanceName},原因:{comment},查看链接:{detailUrl}', '[\"processInstanceName\",\"comment\",\"detailUrl\"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', '2022-01-22 00:03:31', '1', '2022-01-22 00:24:31', b'0'); -INSERT INTO `sys_sms_template` VALUES (11, 2, 0, 'bpm_process_instance_approve', 'ã€å·¥ä½œæµã€‘æµç¨‹è¢«é€šè¿‡', '您的æµç¨‹è¢«å®¡æ‰¹é€šè¿‡ï¼š{processInstanceName},查看链接:{detailUrl}', '[\"processInstanceName\",\"detailUrl\"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', '2022-01-22 00:04:31', '1', '2022-01-22 00:24:23', b'0'); +INSERT INTO `system_sms_template` VALUES (2, 1, 0, 'test_01', '测试验è¯ç çŸ­ä¿¡', '正在进行登录æ“作{operation},您的验è¯ç æ˜¯{code}', '[\"operation\",\"code\"]', NULL, '4383920', 1, 'YUN_PIAN', '', '2021-03-31 10:49:38', '1', '2021-04-10 01:22:00', b'0'); +INSERT INTO `system_sms_template` VALUES (3, 1, 0, 'test_02', '公告通知', '您的验è¯ç {code},该验è¯ç 5分钟内有效,请勿泄æ¼äºŽä»–人ï¼', '[\"code\"]', NULL, 'SMS_207945135', 2, 'ALIYUN', '', '2021-03-31 11:56:30', '1', '2021-04-10 01:22:02', b'0'); +INSERT INTO `system_sms_template` VALUES (4, 3, 0, 'test-ooxx', '测试模æ¿', 'biubiubiu', '[]', '1111', '110', 1, 'YUN_PIAN', '1', '2021-04-09 23:58:42', '1', '2021-04-02 07:47:12', b'1'); +INSERT INTO `system_sms_template` VALUES (5, 3, 0, 'test-ooxx', '测试模æ¿', 'biubiubiu', '[]', '1111', '110', 1, 'YUN_PIAN', '1', '2021-04-09 23:58:42', '1', '2021-04-02 08:32:22', b'1'); +INSERT INTO `system_sms_template` VALUES (6, 3, 0, 'test-01', '测试模æ¿', '哈哈哈 {name}', '[\"name\"]', 'f哈哈哈', '4383920', 1, 'YUN_PIAN', '1', '2021-04-10 01:07:21', '1', '2021-04-10 01:22:05', b'0'); +INSERT INTO `system_sms_template` VALUES (7, 3, 0, 'test-04', '测试下', 'è€é¸¡{name},牛逼{code}', '[\"name\",\"code\"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', '2021-04-13 00:29:53', '1', '2021-04-14 00:30:38', b'0'); +INSERT INTO `system_sms_template` VALUES (8, 1, 0, 'user-sms-login', 'å‰å°ç”¨æˆ·çŸ­ä¿¡ç™»å½•', '您的验è¯ç æ˜¯{code}', '[\"code\"]', NULL, '4372216', 1, 'YUN_PIAN', '1', '2021-10-11 08:10:00', '1', '2021-10-11 08:10:00', b'0'); +INSERT INTO `system_sms_template` VALUES (9, 2, 0, 'bpm_task_assigned', 'ã€å·¥ä½œæµã€‘任务被分é…', 'æ‚¨æ”¶åˆ°äº†ä¸€æ¡æ–°çš„待办任务:{processInstanceName}-{taskName},申请人:{startUserNickname},处ç†é“¾æŽ¥ï¼š{detailUrl}', '[\"processInstanceName\",\"taskName\",\"startUserNickname\",\"detailUrl\"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', '2022-01-21 22:31:19', '1', '2022-01-22 00:03:36', b'0'); +INSERT INTO `system_sms_template` VALUES (10, 2, 0, 'bpm_process_instance_reject', 'ã€å·¥ä½œæµã€‘æµç¨‹è¢«ä¸é€šè¿‡', '您的æµç¨‹è¢«å®¡æ‰¹ä¸é€šè¿‡ï¼š{processInstanceName},原因:{comment},查看链接:{detailUrl}', '[\"processInstanceName\",\"comment\",\"detailUrl\"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', '2022-01-22 00:03:31', '1', '2022-01-22 00:24:31', b'0'); +INSERT INTO `system_sms_template` VALUES (11, 2, 0, 'bpm_process_instance_approve', 'ã€å·¥ä½œæµã€‘æµç¨‹è¢«é€šè¿‡', '您的æµç¨‹è¢«å®¡æ‰¹é€šè¿‡ï¼š{processInstanceName},查看链接:{detailUrl}', '[\"processInstanceName\",\"detailUrl\"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', '2022-01-22 00:04:31', '1', '2022-01-22 00:24:23', b'0'); COMMIT; -- ---------------------------- --- Table structure for sys_social_user +-- Table structure for system_social_user -- ---------------------------- -DROP TABLE IF EXISTS `sys_social_user`; -CREATE TABLE `sys_social_user` ( +DROP TABLE IF EXISTS `system_social_user`; +CREATE TABLE `system_social_user` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键(自增策略)', `user_id` bigint NOT NULL COMMENT 'å…³è”的用户编å·', `user_type` tinyint NOT NULL DEFAULT '0' COMMENT '用户类型', @@ -2587,62 +3131,62 @@ CREATE TABLE `sys_social_user` ( ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='社交用户'; -- ---------------------------- --- Records of sys_social_user +-- Records of system_social_user -- ---------------------------- BEGIN; -INSERT INTO `sys_social_user` VALUES (4, 1, 2, 20, 'IPRmJ0wvBptiPIlGEZiPewGwiEiE', NULL, 'IPRmJ0wvBptiPIlGEZiPewGwiEiE', '{\"accessToken\":null,\"expireIn\":0,\"refreshToken\":null,\"refreshTokenExpireIn\":0,\"uid\":null,\"openId\":\"0TvabQWZs9g6UedEWZKSegiEiE\",\"accessCode\":null,\"unionId\":\"IPRmJ0wvBptiPIlGEZiPewGwiEiE\",\"scope\":null,\"tokenType\":null,\"idToken\":null,\"macAlgorithm\":null,\"macKey\":null,\"code\":null,\"oauthToken\":null,\"oauthTokenSecret\":null,\"userId\":null,\"screenName\":null,\"oauthCallbackConfirmed\":null}', '王文斌(芋艿)(正在输出)', NULL, '{\"nick\":\"王文斌(芋艿)(正在输出)\",\"unionid\":\"IPRmJ0wvBptiPIlGEZiPewGwiEiE\",\"dingId\":\"$:LWCP_v1:$r28ct/waSBPp5Gk7a6kDXA==\",\"openid\":\"0TvabQWZs9g6UedEWZKSegiEiE\",\"main_org_auth_high_level\":false}', NULL, '2021-10-06 00:43:17', NULL, '2021-10-06 00:43:34', b'0'); -INSERT INTO `sys_social_user` VALUES (5, 245, 1, 33, 'osFZg6JVT_mbOOXfeCSxmRv-Cs_4', NULL, 'osFZg6JVT_mbOOXfeCSxmRv-Cs_4', '{\"accessToken\":null,\"expireIn\":0,\"refreshToken\":null,\"refreshTokenExpireIn\":0,\"uid\":null,\"openId\":\"osFZg6JVT_mbOOXfeCSxmRv-Cs_4\",\"accessCode\":null,\"unionId\":null,\"scope\":null,\"tokenType\":null,\"idToken\":null,\"macAlgorithm\":null,\"macKey\":null,\"code\":null,\"oauthToken\":null,\"oauthTokenSecret\":null,\"userId\":null,\"screenName\":null,\"oauthCallbackConfirmed\":null,\"miniSessionKey\":\"7BK7xtyJleOWEXTHhW6eDg==\"}', '', '', 'null', NULL, '2021-10-30 10:08:42', NULL, '2021-10-30 10:08:42', b'0'); +INSERT INTO `system_social_user` VALUES (4, 1, 2, 20, 'IPRmJ0wvBptiPIlGEZiPewGwiEiE', NULL, 'IPRmJ0wvBptiPIlGEZiPewGwiEiE', '{\"accessToken\":null,\"expireIn\":0,\"refreshToken\":null,\"refreshTokenExpireIn\":0,\"uid\":null,\"openId\":\"0TvabQWZs9g6UedEWZKSegiEiE\",\"accessCode\":null,\"unionId\":\"IPRmJ0wvBptiPIlGEZiPewGwiEiE\",\"scope\":null,\"tokenType\":null,\"idToken\":null,\"macAlgorithm\":null,\"macKey\":null,\"code\":null,\"oauthToken\":null,\"oauthTokenSecret\":null,\"userId\":null,\"screenName\":null,\"oauthCallbackConfirmed\":null}', '王文斌(芋艿)(正在输出)', NULL, '{\"nick\":\"王文斌(芋艿)(正在输出)\",\"unionid\":\"IPRmJ0wvBptiPIlGEZiPewGwiEiE\",\"dingId\":\"$:LWCP_v1:$r28ct/waSBPp5Gk7a6kDXA==\",\"openid\":\"0TvabQWZs9g6UedEWZKSegiEiE\",\"main_org_auth_high_level\":false}', NULL, '2021-10-06 00:43:17', NULL, '2022-02-01 15:00:30', b'1'); +INSERT INTO `system_social_user` VALUES (5, 245, 1, 33, 'osFZg6JVT_mbOOXfeCSxmRv-Cs_4', NULL, 'osFZg6JVT_mbOOXfeCSxmRv-Cs_4', '{\"accessToken\":null,\"expireIn\":0,\"refreshToken\":null,\"refreshTokenExpireIn\":0,\"uid\":null,\"openId\":\"osFZg6JVT_mbOOXfeCSxmRv-Cs_4\",\"accessCode\":null,\"unionId\":null,\"scope\":null,\"tokenType\":null,\"idToken\":null,\"macAlgorithm\":null,\"macKey\":null,\"code\":null,\"oauthToken\":null,\"oauthTokenSecret\":null,\"userId\":null,\"screenName\":null,\"oauthCallbackConfirmed\":null,\"miniSessionKey\":\"7BK7xtyJleOWEXTHhW6eDg==\"}', '', '', 'null', NULL, '2021-10-30 10:08:42', NULL, '2021-10-30 10:08:42', b'0'); COMMIT; -- ---------------------------- --- Table structure for sys_tenant +-- Table structure for system_tenant -- ---------------------------- -DROP TABLE IF EXISTS `sys_tenant`; -CREATE TABLE `sys_tenant` ( +DROP TABLE IF EXISTS `system_tenant`; +CREATE TABLE `system_tenant` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '租户编å·', `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户å', `contact_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'è”系人', `contact_mobile` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'è”系手机', `status` tinyint NOT NULL DEFAULT '0' COMMENT '租户状æ€ï¼ˆ0正常 1åœç”¨ï¼‰', - `creator` varchar(64) DEFAULT '' COMMENT '创建者', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) DEFAULT '' COMMENT '更新者', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=109 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='租户表'; -- ---------------------------- --- Records of sys_tenant +-- Records of system_tenant -- ---------------------------- BEGIN; -INSERT INTO `sys_tenant` VALUES (1, 'èŠ‹é“æºç ', '芋艿', '17321315478', 0, 'admin', '2021-01-05 17:03:47', NULL, '2021-12-05 02:22:26', b'0'); -INSERT INTO `sys_tenant` VALUES (107, '测试租户', '秃头', '15601691300', 1, '1', '2021-12-14 20:49:44', '1', '2021-12-14 20:49:49', b'0'); -INSERT INTO `sys_tenant` VALUES (108, '测试', '测试', '15601691300', 1, '1', '2021-12-14 21:02:09', '1', '2021-12-14 21:02:09', b'0'); +INSERT INTO `system_tenant` VALUES (1, 'èŠ‹é“æºç ', '芋艿', '17321315478', 0, 'admin', '2021-01-05 17:03:47', NULL, '2021-12-05 02:22:26', b'0'); +INSERT INTO `system_tenant` VALUES (107, '测试租户', '秃头', '15601691300', 1, '1', '2021-12-14 20:49:44', '1', '2021-12-14 20:49:49', b'0'); +INSERT INTO `system_tenant` VALUES (108, '测试', '测试', '15601691300', 1, '1', '2021-12-14 21:02:09', '1', '2021-12-14 21:02:09', b'0'); COMMIT; -- ---------------------------- --- Table structure for sys_user +-- Table structure for system_user -- ---------------------------- -DROP TABLE IF EXISTS `sys_user`; -CREATE TABLE `sys_user` ( +DROP TABLE IF EXISTS `system_user`; +CREATE TABLE `system_user` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID', - `username` varchar(30) NOT NULL COMMENT '用户账å·', - `password` varchar(100) NOT NULL DEFAULT '' COMMENT '密ç ', - `nickname` varchar(30) NOT NULL COMMENT '用户昵称', - `remark` varchar(500) DEFAULT NULL COMMENT '备注', + `username` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户账å·', + `password` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '密ç ', + `nickname` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户昵称', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', `dept_id` bigint DEFAULT NULL COMMENT '部门ID', - `post_ids` varchar(255) DEFAULT NULL COMMENT 'å²—ä½ç¼–å·æ•°ç»„', - `email` varchar(50) DEFAULT '' COMMENT '用户邮箱', - `mobile` varchar(11) DEFAULT '' COMMENT '手机å·ç ', + `post_ids` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'å²—ä½ç¼–å·æ•°ç»„', + `email` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '用户邮箱', + `mobile` varchar(11) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '手机å·ç ', `sex` tinyint DEFAULT '0' COMMENT '用户性别', - `avatar` varchar(100) DEFAULT '' COMMENT '头åƒåœ°å€', + `avatar` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '头åƒåœ°å€', `status` tinyint NOT NULL DEFAULT '0' COMMENT 'å¸å·çжæ€ï¼ˆ0正常 1åœç”¨ï¼‰', - `login_ip` varchar(50) DEFAULT '' COMMENT '最åŽç™»å½•IP', + `login_ip` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '最åŽç™»å½•IP', `login_date` datetime DEFAULT NULL COMMENT '最åŽç™»å½•æ—¶é—´', - `creator` varchar(64) DEFAULT '' COMMENT '创建者', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) DEFAULT '' COMMENT '更新者', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编å·', @@ -2650,29 +3194,29 @@ CREATE TABLE `sys_user` ( ) ENGINE=InnoDB AUTO_INCREMENT=107 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户信æ¯è¡¨'; -- ---------------------------- --- Records of sys_user +-- Records of system_user -- ---------------------------- BEGIN; -INSERT INTO `sys_user` VALUES (1, 'admin', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', 'èŠ‹é“æºç ', '管ç†å‘˜', 103, '[1]', 'aoteman@126.com', '15612345678', 1, 'http://127.0.0.1:48080/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', 0, '127.0.0.1', '2022-01-22 23:30:35', 'admin', '2021-01-05 17:03:47', NULL, '2022-01-22 23:30:35', b'0', 1); -INSERT INTO `sys_user` VALUES (2, 'ry', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', 'è‹¥ä¾', '测试员', 103, '[2]', 'ry@qq.com', '15666666666', 1, '', 0, '127.0.0.1', '2021-01-05 17:03:47', 'admin', '2021-01-05 17:03:47', '', '2021-12-13 01:26:34', b'1', 1); -INSERT INTO `sys_user` VALUES (100, 'yudao', '$2a$10$11U48RhyJ5pSBYWSn12AD./ld671.ycSzJHbyrtpeoMeYiw31eo8a', '芋é“', 'ä¸è¦å“我', 104, '[1]', 'yudao@iocoder.cn', '15601691300', 1, '', 1, '', NULL, '', '2021-01-07 09:07:17', '104', '2021-12-16 09:26:10', b'0', 1); -INSERT INTO `sys_user` VALUES (103, 'yuanma', '$2a$10$wWoPT7sqriM2O1YXRL.je.GiL538OR6ZTN8aQZr9JAGdnpCH2tpYe', 'æºç ', NULL, 106, NULL, 'yuanma@iocoder.cn', '15601701300', 0, '', 0, '127.0.0.1', '2022-01-18 00:33:40', '', '2021-01-13 23:50:35', NULL, '2022-01-18 00:33:40', b'0', 1); -INSERT INTO `sys_user` VALUES (104, 'test', '$2a$10$CkyM2xvzUhSWsh.JqGcSju.KjlPsaX1A76wO8O/mYtkpQvcp2jWTW', '测试å·', NULL, 107, '[]', '', '15601691200', 1, '', 0, '127.0.0.1', '2021-12-16 09:27:08', '', '2021-01-21 02:13:53', NULL, '2021-12-16 09:27:08', b'0', 1); -INSERT INTO `sys_user` VALUES (105, 'hradmin', '$2a$10$JEhJOL25X1eMnFfR3PILo.MoAljf29YukpL2w6H9GvVGjmqOCuh.O', 'hr-mgr', 'hr 管ç†å‘˜', 109, '[3]', '', '18818260000', 1, '', 0, '127.0.0.1', '2021-10-30 21:19:36', '1', '2021-09-25 16:50:41', '1', '2021-12-16 09:26:41', b'0', 1); -INSERT INTO `sys_user` VALUES (106, 'zhijiantianya', '$2a$10$Y0hSfV2udA8quqMeWukhTuHEoKpQ5tDhclG8WUWSOH7o/MGw185Ti', 'èŠ‹é“æºç ', '', NULL, NULL, '', '', 3, 'https://portrait.gitee.com/uploads/avatars/user/0/176_zhijiantianya_1578913741.png', 0, '', NULL, NULL, '2021-09-28 09:40:59', NULL, '2021-12-15 14:44:47', b'1', 1); +INSERT INTO `system_user` VALUES (1, 'admin', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', 'èŠ‹é“æºç ', '管ç†å‘˜', 103, '[1]', 'aoteman@126.com', '15612345678', 1, 'http://127.0.0.1:48080/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', 0, '127.0.0.1', '2022-02-02 00:27:55', 'admin', '2021-01-05 17:03:47', NULL, '2022-02-02 00:27:55', b'0', 1); +INSERT INTO `system_user` VALUES (2, 'ry', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', 'è‹¥ä¾', '测试员', 103, '[2]', 'ry@qq.com', '15666666666', 1, '', 0, '127.0.0.1', '2021-01-05 17:03:47', 'admin', '2021-01-05 17:03:47', '', '2021-12-13 01:26:34', b'1', 1); +INSERT INTO `system_user` VALUES (100, 'yudao', '$2a$10$11U48RhyJ5pSBYWSn12AD./ld671.ycSzJHbyrtpeoMeYiw31eo8a', '芋é“', 'ä¸è¦å“我', 104, '[1]', 'yudao@iocoder.cn', '15601691300', 1, '', 1, '', NULL, '', '2021-01-07 09:07:17', '104', '2021-12-16 09:26:10', b'0', 1); +INSERT INTO `system_user` VALUES (103, 'yuanma', '$2a$10$wWoPT7sqriM2O1YXRL.je.GiL538OR6ZTN8aQZr9JAGdnpCH2tpYe', 'æºç ', NULL, 106, NULL, 'yuanma@iocoder.cn', '15601701300', 0, '', 0, '127.0.0.1', '2022-01-18 00:33:40', '', '2021-01-13 23:50:35', NULL, '2022-01-18 00:33:40', b'0', 1); +INSERT INTO `system_user` VALUES (104, 'test', '$2a$10$CkyM2xvzUhSWsh.JqGcSju.KjlPsaX1A76wO8O/mYtkpQvcp2jWTW', '测试å·', NULL, 107, '[]', '', '15601691200', 1, '', 0, '127.0.0.1', '2021-12-16 09:27:08', '', '2021-01-21 02:13:53', NULL, '2021-12-16 09:27:08', b'0', 1); +INSERT INTO `system_user` VALUES (105, 'hradmin', '$2a$10$JEhJOL25X1eMnFfR3PILo.MoAljf29YukpL2w6H9GvVGjmqOCuh.O', 'hr-mgr', 'hr 管ç†å‘˜', 109, '[3]', '', '18818260000', 1, '', 0, '127.0.0.1', '2021-10-30 21:19:36', '1', '2021-09-25 16:50:41', '1', '2021-12-16 09:26:41', b'0', 1); +INSERT INTO `system_user` VALUES (106, 'zhijiantianya', '$2a$10$Y0hSfV2udA8quqMeWukhTuHEoKpQ5tDhclG8WUWSOH7o/MGw185Ti', 'èŠ‹é“æºç ', '', NULL, NULL, '', '', 3, 'https://portrait.gitee.com/uploads/avatars/user/0/176_zhijiantianya_1578913741.png', 0, '', NULL, NULL, '2021-09-28 09:40:59', NULL, '2021-12-15 14:44:47', b'1', 1); COMMIT; -- ---------------------------- --- Table structure for sys_user_role +-- Table structure for system_user_role -- ---------------------------- -DROP TABLE IF EXISTS `sys_user_role`; -CREATE TABLE `sys_user_role` ( +DROP TABLE IF EXISTS `system_user_role`; +CREATE TABLE `system_user_role` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增编å·', `user_id` bigint NOT NULL COMMENT '用户ID', `role_id` bigint NOT NULL COMMENT '角色ID', - `creator` varchar(64) DEFAULT '' COMMENT '创建者', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', - `updater` varchar(64) DEFAULT '' COMMENT '更新者', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) DEFAULT b'0' COMMENT '是å¦åˆ é™¤', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编å·', @@ -2680,26 +3224,26 @@ CREATE TABLE `sys_user_role` ( ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户和角色关è”表'; -- ---------------------------- --- Records of sys_user_role +-- Records of system_user_role -- ---------------------------- BEGIN; -INSERT INTO `sys_user_role` VALUES (1, 1, 1, '', NULL, '', NULL, b'0', 0); -INSERT INTO `sys_user_role` VALUES (2, 2, 2, '', NULL, '', NULL, b'0', 0); -INSERT INTO `sys_user_role` VALUES (3, 100, 1, '', NULL, '', NULL, b'1', 0); -INSERT INTO `sys_user_role` VALUES (4, 100, 101, '', NULL, '', NULL, b'0', 0); -INSERT INTO `sys_user_role` VALUES (5, 100, 1, '', NULL, '', NULL, b'0', 0); -INSERT INTO `sys_user_role` VALUES (6, 100, 2, '', NULL, '', NULL, b'0', 0); -INSERT INTO `sys_user_role` VALUES (7, 104, 101, '', NULL, '', NULL, b'0', 0); -INSERT INTO `sys_user_role` VALUES (8, 106, 1, NULL, '2021-09-28 09:40:59', NULL, '2021-09-28 09:40:59', b'1', 0); -INSERT INTO `sys_user_role` VALUES (9, 105, 1, '1', '2021-10-30 13:40:48', '1', '2021-10-30 13:40:48', b'0', 0); -INSERT INTO `sys_user_role` VALUES (10, 103, 1, '1', '2022-01-11 13:19:45', '1', '2022-01-11 13:19:45', b'0', 0); +INSERT INTO `system_user_role` VALUES (1, 1, 1, '', NULL, '', NULL, b'0', 0); +INSERT INTO `system_user_role` VALUES (2, 2, 2, '', NULL, '', NULL, b'0', 0); +INSERT INTO `system_user_role` VALUES (3, 100, 1, '', NULL, '', NULL, b'1', 0); +INSERT INTO `system_user_role` VALUES (4, 100, 101, '', NULL, '', NULL, b'0', 0); +INSERT INTO `system_user_role` VALUES (5, 100, 1, '', NULL, '', NULL, b'0', 0); +INSERT INTO `system_user_role` VALUES (6, 100, 2, '', NULL, '', NULL, b'0', 0); +INSERT INTO `system_user_role` VALUES (7, 104, 101, '', NULL, '', NULL, b'0', 0); +INSERT INTO `system_user_role` VALUES (8, 106, 1, NULL, '2021-09-28 09:40:59', NULL, '2021-09-28 09:40:59', b'1', 0); +INSERT INTO `system_user_role` VALUES (9, 105, 1, '1', '2021-10-30 13:40:48', '1', '2021-10-30 13:40:48', b'0', 0); +INSERT INTO `system_user_role` VALUES (10, 103, 1, '1', '2022-01-11 13:19:45', '1', '2022-01-11 13:19:45', b'0', 0); COMMIT; -- ---------------------------- --- Table structure for sys_user_session +-- Table structure for system_user_session -- ---------------------------- -DROP TABLE IF EXISTS `sys_user_session`; -CREATE TABLE `sys_user_session` ( +DROP TABLE IF EXISTS `system_user_session`; +CREATE TABLE `system_user_session` ( `id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '会è¯ç¼–å·', `user_id` bigint NOT NULL COMMENT '用户编å·', `user_type` tinyint NOT NULL DEFAULT '0' COMMENT '用户类型', @@ -2717,158 +3261,191 @@ CREATE TABLE `sys_user_session` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户在线 Session'; -- ---------------------------- --- Records of sys_user_session +-- Records of system_user_session -- ---------------------------- BEGIN; -INSERT INTO `sys_user_session` VALUES ('0180929bb4b244b891253885e86ad9d1', 1, 2, '2021-12-16 09:37:48', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-16 09:07:48', NULL, '2021-12-16 09:07:48', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('01b7469337864db7a9b65747f38fa928', 1, 2, '2021-12-31 14:29:42', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-31 13:49:05', NULL, '2021-12-31 13:59:42', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('01f68d27b18b414ebfa7f417ffbbe185', 103, 2, '2022-01-15 21:53:10', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-15 21:23:10', NULL, '2022-01-15 13:31:15', b'1', 1); -INSERT INTO `sys_user_session` VALUES ('04abd513bbee4a51973780f93cca16c2', 1, 2, '2022-01-03 05:59:14', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-03 05:29:14', NULL, '2022-01-03 05:29:14', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('04b9f6b2480c48deb3ea9d67c3db8cfe', 1, 2, '2022-01-16 02:47:08', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-16 01:37:56', NULL, '2022-01-16 02:17:08', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('0558f1e97ff044609ccb7c6e7ead6a6b', 1, 2, '2022-01-19 14:07:46', 'admin', '127.0.0.1', '', NULL, '2022-01-19 12:38:45', NULL, '2022-01-19 13:37:46', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('07b0c58cd92449319522a998cf883a37', 1, 2, '2022-01-08 11:07:28', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-08 10:37:28', NULL, '2022-01-08 10:37:28', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('0806e3aa2c0b446eb9b3496d9b63e51f', 103, 2, '2022-01-13 21:51:47', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-13 21:21:47', NULL, '2022-01-13 21:21:47', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('09c26e452a6c44129a2d495478b40d27', 1, 2, '2022-01-02 13:25:15', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-02 12:06:51', NULL, '2022-01-02 12:55:15', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('0b03400e80544594b7e766d48b9d8aed', 1, 2, '2022-01-17 02:44:00', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-17 02:14:00', NULL, '2022-01-17 02:14:00', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('0b8545465544481da4d162a3a74a552e', 1, 2, '2021-12-15 23:48:37', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-15 22:44:07', NULL, '2021-12-15 23:18:37', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('0bf9cd592168451aad7b546ff085df58', 1, 2, '2022-01-03 00:00:30', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-02 23:30:30', NULL, '2022-01-02 15:39:40', b'1', 1); -INSERT INTO `sys_user_session` VALUES ('0c5e3db754714de38ed163c3ef53fb19', 1, 2, '2022-01-17 01:20:21', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-16 21:33:06', NULL, '2022-01-17 00:50:21', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('0c8f02172a894f11a3d054a5811e1c5b', 1, 2, '2022-01-03 09:25:54', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-03 08:32:07', NULL, '2022-01-03 01:17:42', b'1', 1); -INSERT INTO `sys_user_session` VALUES ('0fef9f0bc17047008bef199f1682dce0', 1, 2, '2022-01-21 23:22:20', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-21 22:29:19', NULL, '2022-01-21 22:52:20', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('1645cee3484248929f406fccf8772e67', 1, 2, '2022-01-18 08:43:25', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-18 08:01:22', NULL, '2022-01-18 08:13:25', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('166cea69fca846c985c62dd365994561', 1, 2, '2022-01-03 11:36:12', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-03 09:17:50', NULL, '2022-01-03 11:06:12', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('1893bfb924174e3c82f02f18be0606fd', 1, 2, '2022-01-04 00:05:19', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-03 23:35:19', NULL, '2022-01-03 23:35:19', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('1995595036aa4652bb887c43cfd35ba8', 1, 2, '2022-01-01 00:18:24', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-31 22:57:57', NULL, '2021-12-31 23:48:24', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('19fdd80f6ba3491b8a5cd934694a2ddc', 103, 2, '2022-01-11 22:40:28', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-11 22:10:28', NULL, '2022-01-11 22:10:28', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('1b6154299e1a470ebf80d2eaef72b0e2', 1, 2, '2022-01-02 11:59:52', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-02 09:30:29', NULL, '2022-01-02 11:29:52', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('1b7c79d9d8b04b4fb826564fce41f77c', 1, 2, '2022-01-03 22:42:07', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-03 22:12:07', NULL, '2022-01-03 22:12:07', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('1b848d99cde6448097dcedc83fda4c0a', 1, 2, '2021-12-31 10:45:09', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-31 08:35:36', NULL, '2021-12-31 10:15:09', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('1bc6ad0827fe48099bcbdb9a206818ac', 104, 2, '2021-12-15 23:48:59', 'test', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-15 23:18:59', NULL, '2021-12-15 23:18:59', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('1bfa6a2ed10741fbb03996a48656f0d2', 1, 2, '2022-01-14 10:48:14', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-14 10:18:14', NULL, '2022-01-14 10:18:14', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('2150cb32189f4ccdba60a7209dac1e0d', 1, 2, '2022-01-15 22:49:10', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-15 22:19:10', NULL, '2022-01-15 14:20:19', b'1', 1); -INSERT INTO `sys_user_session` VALUES ('234b1084a5574ffc920669d4d230a18b', 1, 2, '2022-01-19 00:08:56', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-18 23:38:56', NULL, '2022-01-18 23:38:56', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('251bab4618b644faa2c54083ac8b1902', 1, 2, '2022-01-08 01:34:39', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-08 00:37:26', NULL, '2022-01-07 17:10:10', b'1', 1); -INSERT INTO `sys_user_session` VALUES ('27052d883f1047e68b0841429d234b6b', 1, 2, '2022-01-08 10:25:42', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-08 09:55:42', NULL, '2022-01-08 09:55:42', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('27d8ed14a6394e1f8be6fad865d8355a', 1, 2, '2022-01-11 12:58:28', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-11 12:28:28', NULL, '2022-01-11 12:28:28', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('28d90f7da308407296fface4ca68d732', 1, 2, '2022-01-01 21:54:30', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-01 21:01:18', NULL, '2022-01-01 21:24:30', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('291f36ffc1da483981845efd20e8eae4', 1, 2, '2022-01-08 00:23:49', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-07 23:42:43', NULL, '2022-01-07 23:53:49', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('2b49a2e3f5494cebb4a3f19080853355', 103, 2, '2022-01-17 01:26:54', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-17 00:56:54', NULL, '2022-01-17 00:56:54', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('2d920ad234a442cd98f5f517d50d6b60', 1, 2, '2022-01-02 16:47:41', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-02 14:34:30', NULL, '2022-01-02 16:17:41', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('2ec1ca2d0053415599fa18e6bddf710e', 104, 2, '2021-12-16 10:08:04', 'test', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-16 09:27:08', NULL, '2021-12-16 09:38:04', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('303e29836f3540c79188c835466318b2', 1, 2, '2022-01-19 10:40:31', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-19 08:35:23', NULL, '2022-01-19 10:10:31', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('32a043324c7541d191cdf6a8b667ad6c', 103, 2, '2022-01-15 22:44:58', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-15 22:00:56', NULL, '2022-01-15 14:19:00', b'1', 1); -INSERT INTO `sys_user_session` VALUES ('32c405074a3b462681bca9afd26fdfe9', 103, 2, '2022-01-13 13:43:30', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-13 13:03:29', NULL, '2022-01-13 13:13:30', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('345ad9af8d0c46c8ad285b57cabfd060', 1, 2, '2021-12-25 19:57:51', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-25 19:15:06', NULL, '2021-12-25 19:27:51', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('355c57509a5643519107ec132bd85ba6', 103, 2, '2022-01-14 00:49:12', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-13 23:12:26', NULL, '2022-01-14 00:19:12', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('367c9c23eb4e4539be4ecc737af8fbf6', 103, 2, '2022-01-14 20:39:07', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-14 18:39:31', NULL, '2022-01-14 20:09:07', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('374d99e8a41b464c98f73ddbc5aa4d29', 1, 2, '2022-01-03 04:04:14', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-02 23:39:46', NULL, '2022-01-03 03:34:14', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('39647615e860424ebcc9b3f598f135be', 103, 2, '2022-01-18 01:03:40', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-18 00:33:40', NULL, '2022-01-17 16:33:44', b'1', 1); -INSERT INTO `sys_user_session` VALUES ('3cc54b8687504a388b5b8c7457d16382', 1, 2, '2022-01-10 21:01:18', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-10 20:18:15', NULL, '2022-01-10 20:31:18', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('3d9a4ffee19c47dfbc3c807adccf4c23', 1, 2, '2022-01-20 01:43:32', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-20 00:32:48', NULL, '2022-01-20 01:13:32', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('3ec1ce407e8a4accab0b51e756ab74be', 1, 2, '2022-01-20 14:01:25', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-20 12:46:56', NULL, '2022-01-20 13:31:25', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('42c1711b9b6448c18b0cd621b20bd9e2', 1, 2, '2022-01-16 00:23:32', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-15 23:53:32', NULL, '2022-01-15 23:53:32', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('439e30be513e42c094a0a0296b761cc5', 1, 2, '2022-01-13 01:24:38', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-13 00:33:14', NULL, '2022-01-13 00:54:38', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('47949a90a88d4c49823d70995d980ee9', 1, 2, '2021-12-16 10:04:30', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-16 09:20:41', NULL, '2021-12-16 09:34:30', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('488438fbac1e490aba5fadbc5aef18c8', 1, 2, '2022-01-09 00:45:11', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-08 23:07:53', NULL, '2022-01-09 00:15:11', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('495da339c78846609991d9bc66e17dcf', 1, 2, '2021-12-31 22:54:24', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-31 21:47:55', NULL, '2021-12-31 22:24:24', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('4e00d142b22e4826938de31c221b6b32', 104, 2, '2021-12-16 09:54:24', 'test', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-16 09:24:24', NULL, '2021-12-16 01:27:04', b'1', 1); -INSERT INTO `sys_user_session` VALUES ('4f18d2a257bb45148f64b5dd8a895fad', 1, 2, '2022-01-08 23:37:52', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-08 23:07:52', NULL, '2022-01-08 23:07:52', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('51b1fc7d18264e7e97b1992b4994551a', 1, 2, '2022-01-22 20:11:04', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-22 18:37:19', NULL, '2022-01-22 19:41:04', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('55d703899dc74e6881e2a52d11e155dc', 1, 2, '2022-01-16 19:10:11', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-16 17:38:41', NULL, '2022-01-16 18:40:11', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('569063f65eb24fcc92df57779ea671d5', 1, 2, '2022-01-14 23:10:22', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-14 22:23:55', NULL, '2022-01-14 22:40:22', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('5921e2838860430b80d02c2dc5bc9b14', 1, 2, '2022-01-01 18:38:17', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-01 17:19:06', NULL, '2022-01-01 18:08:17', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('5c8b305b180648c4919384c2204262f1', 1, 2, '2022-01-18 00:20:50', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-17 23:50:50', NULL, '2022-01-17 15:50:58', b'1', 1); -INSERT INTO `sys_user_session` VALUES ('5cb75ff3873b4ee99c54ca8126b6a239', 103, 2, '2022-01-18 00:21:08', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-17 23:51:08', NULL, '2022-01-17 23:51:08', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('5d65f92a84b5497787686e513289372f', 1, 2, '2022-01-16 00:16:18', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-15 23:46:18', NULL, '2022-01-15 15:47:33', b'1', 1); -INSERT INTO `sys_user_session` VALUES ('5e8984281b354935b422c95a06ac9ff8', 1, 2, '2022-01-20 14:21:17', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-20 13:31:17', NULL, '2022-01-20 13:51:17', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('604d98299b7243ddafa3ee0350f6edce', 1, 2, '2022-01-22 01:00:30', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-22 00:00:28', NULL, '2022-01-22 00:30:30', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('63d50b8b7e4448f98bd4ab2c084ac18f', 103, 2, '2022-01-17 13:18:45', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-17 12:48:45', NULL, '2022-01-17 12:48:45', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('63ea8e8249cb4089b4b0d10256f39ba4', 1, 2, '2022-01-11 13:52:44', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-11 13:22:44', NULL, '2022-01-11 05:23:14', b'1', 1); -INSERT INTO `sys_user_session` VALUES ('64f51e60527349d6b4a0a74f3d8eca97', 104, 2, '2021-12-16 07:37:54', 'test', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-16 07:07:54', NULL, '2021-12-16 07:07:54', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('6b7d55bad59e401cb1f8d6c418bf552e', 103, 2, '2022-01-14 10:43:59', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-14 09:49:52', NULL, '2022-01-14 10:13:59', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('6d554dd8e0724ff9907bc1186119280c', 1, 2, '2022-01-23 01:22:38', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-22 23:30:35', NULL, '2022-01-23 00:52:38', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('6f0e4f523b13484c94d0dfe49d505d41', 103, 2, '2022-01-13 10:46:00', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-13 09:51:45', NULL, '2022-01-13 10:16:00', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('725e3f1407844ffebbaf02ba0673e0a4', 103, 2, '2022-01-16 12:23:58', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-16 11:53:58', NULL, '2022-01-16 11:53:58', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('729362aa59ed43cf9606a163883f2f2a', 103, 2, '2022-01-15 22:27:50', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-15 21:32:02', NULL, '2022-01-15 13:58:33', b'1', 1); -INSERT INTO `sys_user_session` VALUES ('79924bcc8d594452a8ee8406d312b2c2', 1, 2, '2022-01-01 23:37:34', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-01 22:02:06', NULL, '2022-01-01 23:07:34', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('7aa8d8f930f34aba857c14db311a9a02', 1, 2, '2022-01-11 10:44:50', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-11 09:58:54', NULL, '2022-01-11 10:14:50', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('7b60ae1b30734903a34b9c7f8723d5e2', 103, 2, '2022-01-14 01:33:42', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-14 00:51:03', NULL, '2022-01-14 01:03:42', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('7bc4dca653954475b05cf233c08f783e', 103, 2, '2022-01-15 13:23:54', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-15 11:56:10', NULL, '2022-01-15 12:53:54', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('7d55dfdc996d4d24a0c4c6aad6065ca4', 103, 2, '2022-01-12 01:00:08', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-11 23:33:26', NULL, '2022-01-12 00:30:08', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('83c9839e34454f0eba630f29002d0ee3', 1, 2, '2022-01-09 23:00:41', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-09 20:59:49', NULL, '2022-01-09 22:30:41', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('845e9e7778a64200a87993db0fe6872d', 1, 2, '2022-01-21 00:12:44', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-20 23:42:44', NULL, '2022-01-20 23:42:44', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('84cc13aee41d473c987c1c0381cc05b1', 1, 2, '2022-01-09 02:01:10', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-09 01:03:29', NULL, '2022-01-09 01:31:10', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('882e89a623154797ac2a213c78da1f69', 1, 2, '2022-01-18 00:13:23', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-17 23:33:03', NULL, '2022-01-17 23:43:23', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('89bd23481c9a4b598ebea524679441b3', 103, 2, '2022-01-15 00:57:03', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-14 23:51:41', NULL, '2022-01-15 00:27:03', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('89cc980ca0d941109b3933c82d01d9c3', 103, 2, '2022-01-15 22:30:17', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-15 22:00:17', NULL, '2022-01-15 14:00:35', b'1', 1); -INSERT INTO `sys_user_session` VALUES ('8c49cc6f52154dca9da6a2632985aa35', 1, 2, '2022-01-08 09:05:55', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-08 07:10:02', NULL, '2022-01-08 08:35:55', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('8e9599699f5141d2b041b855c7b34181', 1, 2, '2022-01-16 13:45:56', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-16 13:15:56', NULL, '2022-01-16 13:15:56', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('9122b55409a94388a7b277ad808a127c', 1, 2, '2022-01-01 17:18:53', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-01 16:20:04', NULL, '2022-01-01 16:48:53', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('91b94971b7f044c8b68420e6ef7377af', 1, 2, '2022-01-02 17:32:50', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-02 17:02:50', NULL, '2022-01-02 17:02:50', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('93ada27b50d24c1a9b476c7fd4fef2ce', 1, 2, '2022-01-11 13:49:11', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-11 13:09:10', NULL, '2022-01-11 05:22:27', b'1', 1); -INSERT INTO `sys_user_session` VALUES ('93caa65dbd9d480299850552067a031a', 1, 2, '2022-01-15 22:01:33', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-15 21:31:33', NULL, '2022-01-15 13:31:53', b'1', 1); -INSERT INTO `sys_user_session` VALUES ('945e4bb19f4d4c28ba7135218ee3abe3', 1, 2, '2021-12-16 08:28:54', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-16 07:42:25', NULL, '2021-12-16 07:58:54', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('9526809b303f489b8aab0c05e6b483dd', 1, 2, '2022-01-01 00:51:19', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-01 00:21:19', NULL, '2022-01-01 00:21:19', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('9655c170353849dfadfdc810c6c5ca61', 1, 2, '2022-01-03 12:50:55', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-03 11:56:55', NULL, '2022-01-03 12:20:55', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('9a84339c3c594140b0c3a9bfe95f7919', 1, 2, '2022-01-18 01:03:28', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-18 00:33:28', NULL, '2022-01-18 00:33:28', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('9ee1349d7d3043759cb742a0fa5a3163', 1, 2, '2021-12-25 19:08:33', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-25 18:38:33', NULL, '2021-12-25 18:38:33', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('9f3266f59b8746c3bfe143361d86f6e8', 1, 2, '2022-01-08 22:31:37', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-08 22:01:37', NULL, '2022-01-08 22:01:37', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('a09624232ed94b44a846023790e6282f', 1, 2, '2022-01-09 13:45:26', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-09 12:59:15', NULL, '2022-01-09 13:15:26', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('a155e6dfe4b74fbaa69fcca239facc40', 1, 2, '2021-12-16 07:37:39', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-16 07:07:39', NULL, '2021-12-16 07:07:39', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('a17d02a7c4264f7489728f510e40e823', 1, 2, '2022-01-17 13:18:31', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-17 12:48:31', NULL, '2022-01-17 04:48:37', b'1', 1); -INSERT INTO `sys_user_session` VALUES ('a30e807e5db640feb92bb1eeb4ae89d0', 1, 2, '2022-01-16 12:23:10', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-16 11:53:10', NULL, '2022-01-16 11:53:10', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('a4688af426e342a69c814d07bb8f7d3b', 1, 2, '2022-01-08 17:21:11', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-08 16:25:34', NULL, '2022-01-08 16:51:11', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('a49e304816e0477998592c76caa9546d', 1, 2, '2022-01-16 01:20:18', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-16 00:30:18', NULL, '2022-01-16 00:50:18', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('a55b31ff9e6a41fcb931d2244b4240a8', 1, 2, '2021-12-30 22:32:56', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-30 20:04:02', NULL, '2021-12-30 22:02:56', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('a88e404ba71e41b0a16c75a8ce44bb9d', 1, 2, '2022-01-09 11:57:51', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-09 11:27:51', NULL, '2022-01-09 11:27:51', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('a9b27f95517d4ef9ae15c68bd4365d1b', 103, 2, '2022-01-11 20:37:20', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-11 19:35:41', NULL, '2022-01-11 20:07:20', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('ab449ce8f2ea456591d23515c188c242', 1, 2, '2021-12-25 17:55:45', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-25 16:42:42', NULL, '2021-12-25 17:25:45', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('ac730d1c96be41e5821a6de24b23bf7b', 103, 2, '2022-01-11 20:05:41', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-11 19:35:41', NULL, '2022-01-11 19:35:41', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('ac88c6d1cb184979a015e9a8b50e21f0', 1, 2, '2022-01-03 04:59:36', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-03 03:39:08', NULL, '2022-01-03 04:29:36', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('ae2a8c4a7df64271b0e7a2b702c378f8', 1, 2, '2022-01-18 02:18:53', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-18 00:58:20', NULL, '2022-01-18 01:48:53', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('b12325b8930245c09b75aa100dc1124d', 1, 2, '2022-01-01 09:12:53', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-01 08:09:05', NULL, '2022-01-01 08:42:53', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('b523e3add6e74587b247b467de677325', 1, 2, '2022-01-18 01:15:31', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-18 00:33:47', NULL, '2022-01-18 00:45:31', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('b6a02289210b4861b71a363b11b6b919', 1, 2, '2022-01-09 11:23:22', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-09 10:39:49', NULL, '2022-01-09 10:53:22', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('b883ba1582f54826b42fa073276c85cb', 1, 2, '2022-01-08 01:40:34', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-08 01:10:34', NULL, '2022-01-08 01:10:34', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('ba1658c24b78442fb39062e31d902a5f', 1, 2, '2022-01-10 20:12:44', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-10 19:21:24', NULL, '2022-01-10 19:42:44', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('bb14f39f65ca41cc8ef915ad7f0c25d6', 1, 2, '2022-01-09 09:40:48', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-09 08:48:56', NULL, '2022-01-09 09:10:48', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('bd2b51a53b8d4046b024f43406985caf', 103, 2, '2022-01-15 23:31:38', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-15 22:20:30', NULL, '2022-01-15 23:01:38', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('bd52c43710274cd8bd888b1737cd939d', 1, 2, '2022-01-22 23:09:46', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-22 20:45:15', NULL, '2022-01-22 22:39:46', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('bd655254904748f79c0ad47dfb49d457', 1, 2, '2022-01-01 08:05:32', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-01 07:35:32', NULL, '2022-01-01 07:35:32', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('be98e2f02a444a4092d1cea3dc6e3073', 1, 2, '2022-01-17 13:34:51', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-17 12:26:04', NULL, '2022-01-17 13:04:51', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('c09baa895d79468db63417f60c65573c', 1, 2, '2022-01-01 11:33:44', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-01 10:13:48', NULL, '2022-01-01 11:03:44', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('c1797274297f4cd7b859c6c482d06005', 1, 2, '2022-01-09 10:26:00', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-09 09:44:24', NULL, '2022-01-09 09:56:00', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('c7c4d30623c84d3e88aab2f0b742e7c3', 1, 2, '2022-01-21 01:14:47', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-21 00:24:00', NULL, '2022-01-20 16:54:39', b'1', 1); -INSERT INTO `sys_user_session` VALUES ('c7fc3e37d927405ebbe66df3dd5fd77e', 103, 2, '2022-01-13 01:01:29', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-12 22:57:04', NULL, '2022-01-13 00:31:29', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('cbd09ba52ccc47b2a639a6e28e92894f', 103, 2, '2022-01-12 01:34:01', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-12 01:04:01', NULL, '2022-01-12 01:04:01', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('ccc85a8ee5a7407c97012b755cde979e', 1, 2, '2022-01-16 18:08:41', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-16 17:38:41', NULL, '2022-01-16 17:38:41', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('d229b8f8ef4d4df4afd05209acc87446', 1, 2, '2022-01-08 11:02:36', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-08 10:32:36', NULL, '2022-01-08 02:37:12', b'1', 1); -INSERT INTO `sys_user_session` VALUES ('d46d26f08f624eb28eb665b6515587bd', 1, 2, '2022-01-16 00:19:32', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-15 23:49:32', NULL, '2022-01-15 23:49:32', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('d4aeab42d1934197865ce72ffe244009', 1, 2, '2022-01-16 03:11:56', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-16 02:41:56', NULL, '2022-01-16 02:41:56', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('d8550bde3c8b43a194e592b49c856c71', 1, 2, '2022-01-09 21:26:38', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-09 19:38:12', NULL, '2022-01-09 20:56:38', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('d8ebbe89793f4a829a108c4f1badbb11', 103, 2, '2022-01-13 21:18:56', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-13 20:38:43', NULL, '2022-01-13 20:48:56', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('da04f99dc14a4f28a8a77178861cb3ed', 104, 2, '2021-12-15 23:37:58', 'test', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-15 22:47:31', NULL, '2021-12-15 15:11:55', b'1', 1); -INSERT INTO `sys_user_session` VALUES ('daec82cc885849a7bbab76eb9f0a4b32', 1, 2, '2022-01-15 23:31:35', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-15 22:00:43', NULL, '2022-01-15 23:01:35', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('dbaaa89e1659488c9693317454fe6ae2', 1, 2, '2022-01-14 22:53:55', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-14 22:23:55', NULL, '2022-01-14 22:23:55', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('dbe0f27930244ae38e0322226d6ecdbb', 1, 2, '2022-01-21 01:46:31', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-21 00:54:45', NULL, '2022-01-21 01:16:31', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('dd2e53ccf8c44b3e8556571687d4825d', 103, 2, '2022-01-12 01:34:01', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-12 01:04:01', NULL, '2022-01-12 01:04:01', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('ddb9d3c65ee14c4a8ff1a3cf0e10e69a', 1, 2, '2022-01-19 00:52:57', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-19 00:22:57', NULL, '2022-01-19 00:22:57', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('ddd32e0a43d644ca95ba10e4e5b19416', 1, 2, '2022-01-03 19:28:22', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-03 17:22:27', NULL, '2022-01-03 18:58:22', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('df12a50eb8814317bb8e1003e098cbe7', 1, 2, '2022-01-09 19:04:00', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-09 16:26:16', NULL, '2022-01-09 18:34:00', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('e198f4f04da243d5b80caa0c8336d6a0', 103, 2, '2022-01-14 19:09:16', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-14 18:39:16', NULL, '2022-01-14 10:39:24', b'1', 1); -INSERT INTO `sys_user_session` VALUES ('e290aebda5f34c379d0cf3e013cbcc8b', 1, 2, '2022-01-02 09:27:23', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-02 08:32:23', NULL, '2022-01-02 08:57:23', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('e2efa96cacbb47b580096193244a3739', 1, 2, '2022-01-14 14:24:13', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-14 13:44:04', NULL, '2022-01-14 13:54:13', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('e3c0319f639a481999bac6fa250af552', 1, 2, '2022-01-03 16:56:06', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-03 16:14:34', NULL, '2022-01-03 16:26:06', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('e42efabb61af4f5eaeea3b84693871da', 1, 2, '2022-01-15 22:28:55', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-15 21:58:55', NULL, '2022-01-15 14:00:08', b'1', 1); -INSERT INTO `sys_user_session` VALUES ('e75c264df71342a59a85a6512a5a1fb7', 1, 2, '2022-01-22 19:18:46', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-22 18:30:58', NULL, '2022-01-22 18:48:46', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('f10cabf849b245ebbaa5284b540c0bb2', 103, 2, '2022-01-11 21:51:14', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-11 20:54:19', NULL, '2022-01-11 21:21:14', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('f49ade9038d24a73832e64efcc30b205', 103, 2, '2022-01-11 13:53:26', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-11 13:23:26', NULL, '2022-01-11 13:23:26', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('f562fd12a7bb41f19ca1bf4aa5e3c9d1', 1, 2, '2022-01-22 02:42:51', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-22 01:20:59', NULL, '2022-01-22 02:12:51', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('f76c8610a7e5461aac8972e21f14e734', 1, 2, '2022-01-22 21:52:44', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-22 20:29:53', NULL, '2022-01-22 21:22:44', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('f974a40ea70941cdb9e04cb63bf5e557', 1, 2, '2022-01-16 02:00:25', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-16 01:30:25', NULL, '2022-01-16 01:30:25', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('f9f257cf09e640f2904696f2de35d3f6', 1, 2, '2022-01-03 21:42:44', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-03 20:59:23', NULL, '2022-01-03 21:12:44', b'0', 1); -INSERT INTO `sys_user_session` VALUES ('fe82f6ecb17449b595c7d6bd4bc1d371', 1, 2, '2021-12-15 23:16:49', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-15 22:46:49', NULL, '2021-12-15 14:46:53', b'1', 1); -INSERT INTO `sys_user_session` VALUES ('ffeae9ee4b8649b6b9ececaa502a934d', 1, 2, '2022-01-01 19:56:49', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-01 18:47:31', NULL, '2022-01-01 19:26:49', b'0', 1); +INSERT INTO `system_user_session` VALUES ('0180929bb4b244b891253885e86ad9d1', 1, 2, '2021-12-16 09:37:48', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-16 09:07:48', NULL, '2021-12-16 09:07:48', b'0', 1); +INSERT INTO `system_user_session` VALUES ('01b7469337864db7a9b65747f38fa928', 1, 2, '2021-12-31 14:29:42', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-31 13:49:05', NULL, '2021-12-31 13:59:42', b'0', 1); +INSERT INTO `system_user_session` VALUES ('01f68d27b18b414ebfa7f417ffbbe185', 103, 2, '2022-01-15 21:53:10', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-15 21:23:10', NULL, '2022-01-15 13:31:15', b'1', 1); +INSERT INTO `system_user_session` VALUES ('04abd513bbee4a51973780f93cca16c2', 1, 2, '2022-01-03 05:59:14', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-03 05:29:14', NULL, '2022-01-03 05:29:14', b'0', 1); +INSERT INTO `system_user_session` VALUES ('04b9f6b2480c48deb3ea9d67c3db8cfe', 1, 2, '2022-01-16 02:47:08', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-16 01:37:56', NULL, '2022-01-16 02:17:08', b'0', 1); +INSERT INTO `system_user_session` VALUES ('0558f1e97ff044609ccb7c6e7ead6a6b', 1, 2, '2022-01-19 14:07:46', 'admin', '127.0.0.1', '', NULL, '2022-01-19 12:38:45', NULL, '2022-01-19 13:37:46', b'0', 1); +INSERT INTO `system_user_session` VALUES ('07b0c58cd92449319522a998cf883a37', 1, 2, '2022-01-08 11:07:28', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-08 10:37:28', NULL, '2022-01-08 10:37:28', b'0', 1); +INSERT INTO `system_user_session` VALUES ('0806e3aa2c0b446eb9b3496d9b63e51f', 103, 2, '2022-01-13 21:51:47', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-13 21:21:47', NULL, '2022-01-13 21:21:47', b'0', 1); +INSERT INTO `system_user_session` VALUES ('09c26e452a6c44129a2d495478b40d27', 1, 2, '2022-01-02 13:25:15', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-02 12:06:51', NULL, '2022-01-02 12:55:15', b'0', 1); +INSERT INTO `system_user_session` VALUES ('0b03400e80544594b7e766d48b9d8aed', 1, 2, '2022-01-17 02:44:00', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-17 02:14:00', NULL, '2022-01-17 02:14:00', b'0', 1); +INSERT INTO `system_user_session` VALUES ('0b8545465544481da4d162a3a74a552e', 1, 2, '2021-12-15 23:48:37', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-15 22:44:07', NULL, '2021-12-15 23:18:37', b'0', 1); +INSERT INTO `system_user_session` VALUES ('0bf9cd592168451aad7b546ff085df58', 1, 2, '2022-01-03 00:00:30', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-02 23:30:30', NULL, '2022-01-02 15:39:40', b'1', 1); +INSERT INTO `system_user_session` VALUES ('0c5e3db754714de38ed163c3ef53fb19', 1, 2, '2022-01-17 01:20:21', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-16 21:33:06', NULL, '2022-01-17 00:50:21', b'0', 1); +INSERT INTO `system_user_session` VALUES ('0c8f02172a894f11a3d054a5811e1c5b', 1, 2, '2022-01-03 09:25:54', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-03 08:32:07', NULL, '2022-01-03 01:17:42', b'1', 1); +INSERT INTO `system_user_session` VALUES ('0fef9f0bc17047008bef199f1682dce0', 1, 2, '2022-01-21 23:22:20', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-21 22:29:19', NULL, '2022-01-21 22:52:20', b'0', 1); +INSERT INTO `system_user_session` VALUES ('1168ac997c354e68a9c9a97b3ee3e621', 1, 2, '2022-02-01 23:37:40', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36', NULL, '2022-02-01 22:57:32', NULL, '2022-02-01 23:07:40', b'0', 1); +INSERT INTO `system_user_session` VALUES ('121a386aef284bbd903188b9b6e72fe0', 1, 2, '2022-01-31 18:15:53', 'admin', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-01-31 17:45:53', NULL, '2022-01-31 17:45:53', b'0', 1); +INSERT INTO `system_user_session` VALUES ('1645cee3484248929f406fccf8772e67', 1, 2, '2022-01-18 08:43:25', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-18 08:01:22', NULL, '2022-01-18 08:13:25', b'0', 1); +INSERT INTO `system_user_session` VALUES ('166cea69fca846c985c62dd365994561', 1, 2, '2022-01-03 11:36:12', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-03 09:17:50', NULL, '2022-01-03 11:06:12', b'0', 1); +INSERT INTO `system_user_session` VALUES ('1893bfb924174e3c82f02f18be0606fd', 1, 2, '2022-01-04 00:05:19', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-03 23:35:19', NULL, '2022-01-03 23:35:19', b'0', 1); +INSERT INTO `system_user_session` VALUES ('1995595036aa4652bb887c43cfd35ba8', 1, 2, '2022-01-01 00:18:24', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-31 22:57:57', NULL, '2021-12-31 23:48:24', b'0', 1); +INSERT INTO `system_user_session` VALUES ('19fdd80f6ba3491b8a5cd934694a2ddc', 103, 2, '2022-01-11 22:40:28', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-11 22:10:28', NULL, '2022-01-11 22:10:28', b'0', 1); +INSERT INTO `system_user_session` VALUES ('1b6154299e1a470ebf80d2eaef72b0e2', 1, 2, '2022-01-02 11:59:52', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-02 09:30:29', NULL, '2022-01-02 11:29:52', b'0', 1); +INSERT INTO `system_user_session` VALUES ('1b7c79d9d8b04b4fb826564fce41f77c', 1, 2, '2022-01-03 22:42:07', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-03 22:12:07', NULL, '2022-01-03 22:12:07', b'0', 1); +INSERT INTO `system_user_session` VALUES ('1b848d99cde6448097dcedc83fda4c0a', 1, 2, '2021-12-31 10:45:09', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-31 08:35:36', NULL, '2021-12-31 10:15:09', b'0', 1); +INSERT INTO `system_user_session` VALUES ('1bc6ad0827fe48099bcbdb9a206818ac', 104, 2, '2021-12-15 23:48:59', 'test', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-15 23:18:59', NULL, '2021-12-15 23:18:59', b'0', 1); +INSERT INTO `system_user_session` VALUES ('1bfa6a2ed10741fbb03996a48656f0d2', 1, 2, '2022-01-14 10:48:14', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-14 10:18:14', NULL, '2022-01-14 10:18:14', b'0', 1); +INSERT INTO `system_user_session` VALUES ('2150cb32189f4ccdba60a7209dac1e0d', 1, 2, '2022-01-15 22:49:10', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-15 22:19:10', NULL, '2022-01-15 14:20:19', b'1', 1); +INSERT INTO `system_user_session` VALUES ('22adcacad96647bfb8c86fcd7d563be6', 1, 2, '2022-01-28 22:12:41', 'admin', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 21:42:41', NULL, '2022-01-28 21:42:41', b'0', 1); +INSERT INTO `system_user_session` VALUES ('234b1084a5574ffc920669d4d230a18b', 1, 2, '2022-01-19 00:08:56', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-18 23:38:56', NULL, '2022-01-18 23:38:56', b'0', 1); +INSERT INTO `system_user_session` VALUES ('251bab4618b644faa2c54083ac8b1902', 1, 2, '2022-01-08 01:34:39', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-08 00:37:26', NULL, '2022-01-07 17:10:10', b'1', 1); +INSERT INTO `system_user_session` VALUES ('27052d883f1047e68b0841429d234b6b', 1, 2, '2022-01-08 10:25:42', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-08 09:55:42', NULL, '2022-01-08 09:55:42', b'0', 1); +INSERT INTO `system_user_session` VALUES ('27d8ed14a6394e1f8be6fad865d8355a', 1, 2, '2022-01-11 12:58:28', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-11 12:28:28', NULL, '2022-01-11 12:28:28', b'0', 1); +INSERT INTO `system_user_session` VALUES ('28c9235b81474020931acc876d054f9b', 1, 2, '2022-01-31 00:00:54', 'admin', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-30 23:30:54', NULL, '2022-01-30 23:30:54', b'0', 1); +INSERT INTO `system_user_session` VALUES ('28d90f7da308407296fface4ca68d732', 1, 2, '2022-01-01 21:54:30', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-01 21:01:18', NULL, '2022-01-01 21:24:30', b'0', 1); +INSERT INTO `system_user_session` VALUES ('291f36ffc1da483981845efd20e8eae4', 1, 2, '2022-01-08 00:23:49', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-07 23:42:43', NULL, '2022-01-07 23:53:49', b'0', 1); +INSERT INTO `system_user_session` VALUES ('29737038cd76429cb60a279cbeb802ea', 1, 2, '2022-01-28 21:53:22', 'admin', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 21:23:22', NULL, '2022-01-28 21:23:22', b'0', 1); +INSERT INTO `system_user_session` VALUES ('2b49a2e3f5494cebb4a3f19080853355', 103, 2, '2022-01-17 01:26:54', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-17 00:56:54', NULL, '2022-01-17 00:56:54', b'0', 1); +INSERT INTO `system_user_session` VALUES ('2d920ad234a442cd98f5f517d50d6b60', 1, 2, '2022-01-02 16:47:41', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-02 14:34:30', NULL, '2022-01-02 16:17:41', b'0', 1); +INSERT INTO `system_user_session` VALUES ('2db67457fb474cfc8a7b7099515ae2aa', 1, 2, '2022-01-23 13:54:43', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-23 13:24:43', NULL, '2022-01-23 13:24:43', b'0', 1); +INSERT INTO `system_user_session` VALUES ('2ec1ca2d0053415599fa18e6bddf710e', 104, 2, '2021-12-16 10:08:04', 'test', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-16 09:27:08', NULL, '2021-12-16 09:38:04', b'0', 1); +INSERT INTO `system_user_session` VALUES ('303e29836f3540c79188c835466318b2', 1, 2, '2022-01-19 10:40:31', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-19 08:35:23', NULL, '2022-01-19 10:10:31', b'0', 1); +INSERT INTO `system_user_session` VALUES ('32a043324c7541d191cdf6a8b667ad6c', 103, 2, '2022-01-15 22:44:58', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-15 22:00:56', NULL, '2022-01-15 14:19:00', b'1', 1); +INSERT INTO `system_user_session` VALUES ('32c405074a3b462681bca9afd26fdfe9', 103, 2, '2022-01-13 13:43:30', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-13 13:03:29', NULL, '2022-01-13 13:13:30', b'0', 1); +INSERT INTO `system_user_session` VALUES ('345ad9af8d0c46c8ad285b57cabfd060', 1, 2, '2021-12-25 19:57:51', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-25 19:15:06', NULL, '2021-12-25 19:27:51', b'0', 1); +INSERT INTO `system_user_session` VALUES ('355c57509a5643519107ec132bd85ba6', 103, 2, '2022-01-14 00:49:12', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-13 23:12:26', NULL, '2022-01-14 00:19:12', b'0', 1); +INSERT INTO `system_user_session` VALUES ('367c9c23eb4e4539be4ecc737af8fbf6', 103, 2, '2022-01-14 20:39:07', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-14 18:39:31', NULL, '2022-01-14 20:09:07', b'0', 1); +INSERT INTO `system_user_session` VALUES ('374d99e8a41b464c98f73ddbc5aa4d29', 1, 2, '2022-01-03 04:04:14', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-02 23:39:46', NULL, '2022-01-03 03:34:14', b'0', 1); +INSERT INTO `system_user_session` VALUES ('38535319952f41f9b3d94aaf71f42de6', 1, 2, '2022-01-29 17:17:54', 'admin', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-29 16:47:54', NULL, '2022-01-29 16:47:54', b'0', 1); +INSERT INTO `system_user_session` VALUES ('39647615e860424ebcc9b3f598f135be', 103, 2, '2022-01-18 01:03:40', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-18 00:33:40', NULL, '2022-01-17 16:33:44', b'1', 1); +INSERT INTO `system_user_session` VALUES ('3cc54b8687504a388b5b8c7457d16382', 1, 2, '2022-01-10 21:01:18', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-10 20:18:15', NULL, '2022-01-10 20:31:18', b'0', 1); +INSERT INTO `system_user_session` VALUES ('3d9a4ffee19c47dfbc3c807adccf4c23', 1, 2, '2022-01-20 01:43:32', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-20 00:32:48', NULL, '2022-01-20 01:13:32', b'0', 1); +INSERT INTO `system_user_session` VALUES ('3ec1ce407e8a4accab0b51e756ab74be', 1, 2, '2022-01-20 14:01:25', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-20 12:46:56', NULL, '2022-01-20 13:31:25', b'0', 1); +INSERT INTO `system_user_session` VALUES ('3ecf0bc3d9b94cd28f0499bbeb0584b4', 1, 2, '2022-01-28 21:56:46', 'admin', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 21:26:46', NULL, '2022-01-28 21:26:46', b'0', 1); +INSERT INTO `system_user_session` VALUES ('3fee3a4e10714d9c9df62b845db37f63', 245, 1, '2022-01-29 14:28:04', '15601691300', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-29 13:58:04', NULL, '2022-01-29 13:58:04', b'0', 1); +INSERT INTO `system_user_session` VALUES ('42c1711b9b6448c18b0cd621b20bd9e2', 1, 2, '2022-01-16 00:23:32', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-15 23:53:32', NULL, '2022-01-15 23:53:32', b'0', 1); +INSERT INTO `system_user_session` VALUES ('439e30be513e42c094a0a0296b761cc5', 1, 2, '2022-01-13 01:24:38', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-13 00:33:14', NULL, '2022-01-13 00:54:38', b'0', 1); +INSERT INTO `system_user_session` VALUES ('47949a90a88d4c49823d70995d980ee9', 1, 2, '2021-12-16 10:04:30', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-16 09:20:41', NULL, '2021-12-16 09:34:30', b'0', 1); +INSERT INTO `system_user_session` VALUES ('488438fbac1e490aba5fadbc5aef18c8', 1, 2, '2022-01-09 00:45:11', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-08 23:07:53', NULL, '2022-01-09 00:15:11', b'0', 1); +INSERT INTO `system_user_session` VALUES ('495da339c78846609991d9bc66e17dcf', 1, 2, '2021-12-31 22:54:24', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-31 21:47:55', NULL, '2021-12-31 22:24:24', b'0', 1); +INSERT INTO `system_user_session` VALUES ('4c92facae3a74e6bb714d2a2ce931c6b', 1, 2, '2022-01-31 18:17:25', 'admin', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-01-31 17:47:25', NULL, '2022-01-31 17:47:25', b'0', 1); +INSERT INTO `system_user_session` VALUES ('4e00d142b22e4826938de31c221b6b32', 104, 2, '2021-12-16 09:54:24', 'test', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-16 09:24:24', NULL, '2021-12-16 01:27:04', b'1', 1); +INSERT INTO `system_user_session` VALUES ('4eb828d1ce434dbea637f0f6f75872bb', 1, 2, '2022-01-28 21:09:33', 'admin', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 20:39:33', NULL, '2022-01-28 20:39:33', b'0', 1); +INSERT INTO `system_user_session` VALUES ('4f18d2a257bb45148f64b5dd8a895fad', 1, 2, '2022-01-08 23:37:52', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-08 23:07:52', NULL, '2022-01-08 23:07:52', b'0', 1); +INSERT INTO `system_user_session` VALUES ('51b1fc7d18264e7e97b1992b4994551a', 1, 2, '2022-01-22 20:11:04', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-22 18:37:19', NULL, '2022-01-22 19:41:04', b'0', 1); +INSERT INTO `system_user_session` VALUES ('55d703899dc74e6881e2a52d11e155dc', 1, 2, '2022-01-16 19:10:11', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-16 17:38:41', NULL, '2022-01-16 18:40:11', b'0', 1); +INSERT INTO `system_user_session` VALUES ('569063f65eb24fcc92df57779ea671d5', 1, 2, '2022-01-14 23:10:22', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-14 22:23:55', NULL, '2022-01-14 22:40:22', b'0', 1); +INSERT INTO `system_user_session` VALUES ('5921e2838860430b80d02c2dc5bc9b14', 1, 2, '2022-01-01 18:38:17', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-01 17:19:06', NULL, '2022-01-01 18:08:17', b'0', 1); +INSERT INTO `system_user_session` VALUES ('5c8b305b180648c4919384c2204262f1', 1, 2, '2022-01-18 00:20:50', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-17 23:50:50', NULL, '2022-01-17 15:50:58', b'1', 1); +INSERT INTO `system_user_session` VALUES ('5cb75ff3873b4ee99c54ca8126b6a239', 103, 2, '2022-01-18 00:21:08', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-17 23:51:08', NULL, '2022-01-17 23:51:08', b'0', 1); +INSERT INTO `system_user_session` VALUES ('5d65f92a84b5497787686e513289372f', 1, 2, '2022-01-16 00:16:18', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-15 23:46:18', NULL, '2022-01-15 15:47:33', b'1', 1); +INSERT INTO `system_user_session` VALUES ('5e6bd35bd4c24f1fb717d59256b937b0', 1, 2, '2022-01-23 04:14:45', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-23 03:21:32', NULL, '2022-01-22 20:10:37', b'1', 1); +INSERT INTO `system_user_session` VALUES ('5e8984281b354935b422c95a06ac9ff8', 1, 2, '2022-01-20 14:21:17', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-20 13:31:17', NULL, '2022-01-20 13:51:17', b'0', 1); +INSERT INTO `system_user_session` VALUES ('604d98299b7243ddafa3ee0350f6edce', 1, 2, '2022-01-22 01:00:30', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-22 00:00:28', NULL, '2022-01-22 00:30:30', b'0', 1); +INSERT INTO `system_user_session` VALUES ('6308a8a2833d4570a56cd8af3cd13367', 1, 2, '2022-01-31 14:00:40', 'admin', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-01-31 13:30:40', NULL, '2022-01-31 13:30:40', b'0', 1); +INSERT INTO `system_user_session` VALUES ('63d50b8b7e4448f98bd4ab2c084ac18f', 103, 2, '2022-01-17 13:18:45', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-17 12:48:45', NULL, '2022-01-17 12:48:45', b'0', 1); +INSERT INTO `system_user_session` VALUES ('63ea8e8249cb4089b4b0d10256f39ba4', 1, 2, '2022-01-11 13:52:44', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-11 13:22:44', NULL, '2022-01-11 05:23:14', b'1', 1); +INSERT INTO `system_user_session` VALUES ('64f51e60527349d6b4a0a74f3d8eca97', 104, 2, '2021-12-16 07:37:54', 'test', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-16 07:07:54', NULL, '2021-12-16 07:07:54', b'0', 1); +INSERT INTO `system_user_session` VALUES ('671e9e7d2be541efa538d337f4e7752d', 1, 2, '2022-02-02 00:54:35', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36', NULL, '2022-02-02 00:24:35', NULL, '2022-02-02 00:24:35', b'0', 1); +INSERT INTO `system_user_session` VALUES ('690be3aeef894ec3b3cef553b76082fa', 1, 2, '2022-01-28 21:54:02', 'admin', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 21:24:02', NULL, '2022-01-28 21:24:02', b'0', 1); +INSERT INTO `system_user_session` VALUES ('6b7d55bad59e401cb1f8d6c418bf552e', 103, 2, '2022-01-14 10:43:59', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-14 09:49:52', NULL, '2022-01-14 10:13:59', b'0', 1); +INSERT INTO `system_user_session` VALUES ('6d554dd8e0724ff9907bc1186119280c', 1, 2, '2022-01-23 01:22:38', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-22 23:30:35', NULL, '2022-01-23 00:52:38', b'0', 1); +INSERT INTO `system_user_session` VALUES ('6f0e4f523b13484c94d0dfe49d505d41', 103, 2, '2022-01-13 10:46:00', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-13 09:51:45', NULL, '2022-01-13 10:16:00', b'0', 1); +INSERT INTO `system_user_session` VALUES ('725e3f1407844ffebbaf02ba0673e0a4', 103, 2, '2022-01-16 12:23:58', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-16 11:53:58', NULL, '2022-01-16 11:53:58', b'0', 1); +INSERT INTO `system_user_session` VALUES ('729362aa59ed43cf9606a163883f2f2a', 103, 2, '2022-01-15 22:27:50', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-15 21:32:02', NULL, '2022-01-15 13:58:33', b'1', 1); +INSERT INTO `system_user_session` VALUES ('798b6db869fb4a77802824df2811be31', 1, 2, '2022-01-28 21:55:00', 'admin', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 21:25:00', NULL, '2022-01-28 21:25:00', b'0', 1); +INSERT INTO `system_user_session` VALUES ('79924bcc8d594452a8ee8406d312b2c2', 1, 2, '2022-01-01 23:37:34', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-01 22:02:06', NULL, '2022-01-01 23:07:34', b'0', 1); +INSERT INTO `system_user_session` VALUES ('7aa8d8f930f34aba857c14db311a9a02', 1, 2, '2022-01-11 10:44:50', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-11 09:58:54', NULL, '2022-01-11 10:14:50', b'0', 1); +INSERT INTO `system_user_session` VALUES ('7b60ae1b30734903a34b9c7f8723d5e2', 103, 2, '2022-01-14 01:33:42', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-14 00:51:03', NULL, '2022-01-14 01:03:42', b'0', 1); +INSERT INTO `system_user_session` VALUES ('7bc4dca653954475b05cf233c08f783e', 103, 2, '2022-01-15 13:23:54', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-15 11:56:10', NULL, '2022-01-15 12:53:54', b'0', 1); +INSERT INTO `system_user_session` VALUES ('7be6aecdb9d340609c87e29e608b886d', 1, 2, '2022-01-28 21:56:48', 'admin', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 21:26:48', NULL, '2022-01-28 21:26:48', b'0', 1); +INSERT INTO `system_user_session` VALUES ('7d55dfdc996d4d24a0c4c6aad6065ca4', 103, 2, '2022-01-12 01:00:08', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-11 23:33:26', NULL, '2022-01-12 00:30:08', b'0', 1); +INSERT INTO `system_user_session` VALUES ('83b5043f08e34cd8aad97c2c798a8f00', 1, 2, '2022-01-23 02:12:39', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-23 01:42:39', NULL, '2022-01-23 01:42:39', b'0', 1); +INSERT INTO `system_user_session` VALUES ('83c9839e34454f0eba630f29002d0ee3', 1, 2, '2022-01-09 23:00:41', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-09 20:59:49', NULL, '2022-01-09 22:30:41', b'0', 1); +INSERT INTO `system_user_session` VALUES ('845e9e7778a64200a87993db0fe6872d', 1, 2, '2022-01-21 00:12:44', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-20 23:42:44', NULL, '2022-01-20 23:42:44', b'0', 1); +INSERT INTO `system_user_session` VALUES ('84cc13aee41d473c987c1c0381cc05b1', 1, 2, '2022-01-09 02:01:10', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-09 01:03:29', NULL, '2022-01-09 01:31:10', b'0', 1); +INSERT INTO `system_user_session` VALUES ('882e89a623154797ac2a213c78da1f69', 1, 2, '2022-01-18 00:13:23', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-17 23:33:03', NULL, '2022-01-17 23:43:23', b'0', 1); +INSERT INTO `system_user_session` VALUES ('89bd23481c9a4b598ebea524679441b3', 103, 2, '2022-01-15 00:57:03', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-14 23:51:41', NULL, '2022-01-15 00:27:03', b'0', 1); +INSERT INTO `system_user_session` VALUES ('89cc980ca0d941109b3933c82d01d9c3', 103, 2, '2022-01-15 22:30:17', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-15 22:00:17', NULL, '2022-01-15 14:00:35', b'1', 1); +INSERT INTO `system_user_session` VALUES ('8c49cc6f52154dca9da6a2632985aa35', 1, 2, '2022-01-08 09:05:55', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-08 07:10:02', NULL, '2022-01-08 08:35:55', b'0', 1); +INSERT INTO `system_user_session` VALUES ('8dfa794cc43840f99b2cc7ba287356ab', 1, 2, '2022-01-28 23:51:07', 'admin', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 23:21:07', NULL, '2022-01-28 23:21:07', b'0', 1); +INSERT INTO `system_user_session` VALUES ('8e9599699f5141d2b041b855c7b34181', 1, 2, '2022-01-16 13:45:56', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-16 13:15:56', NULL, '2022-01-16 13:15:56', b'0', 1); +INSERT INTO `system_user_session` VALUES ('9122b55409a94388a7b277ad808a127c', 1, 2, '2022-01-01 17:18:53', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-01 16:20:04', NULL, '2022-01-01 16:48:53', b'0', 1); +INSERT INTO `system_user_session` VALUES ('91b94971b7f044c8b68420e6ef7377af', 1, 2, '2022-01-02 17:32:50', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-02 17:02:50', NULL, '2022-01-02 17:02:50', b'0', 1); +INSERT INTO `system_user_session` VALUES ('93ada27b50d24c1a9b476c7fd4fef2ce', 1, 2, '2022-01-11 13:49:11', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-11 13:09:10', NULL, '2022-01-11 05:22:27', b'1', 1); +INSERT INTO `system_user_session` VALUES ('93caa65dbd9d480299850552067a031a', 1, 2, '2022-01-15 22:01:33', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-15 21:31:33', NULL, '2022-01-15 13:31:53', b'1', 1); +INSERT INTO `system_user_session` VALUES ('945e4bb19f4d4c28ba7135218ee3abe3', 1, 2, '2021-12-16 08:28:54', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-16 07:42:25', NULL, '2021-12-16 07:58:54', b'0', 1); +INSERT INTO `system_user_session` VALUES ('9526809b303f489b8aab0c05e6b483dd', 1, 2, '2022-01-01 00:51:19', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-01 00:21:19', NULL, '2022-01-01 00:21:19', b'0', 1); +INSERT INTO `system_user_session` VALUES ('9655c170353849dfadfdc810c6c5ca61', 1, 2, '2022-01-03 12:50:55', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-03 11:56:55', NULL, '2022-01-03 12:20:55', b'0', 1); +INSERT INTO `system_user_session` VALUES ('9a84339c3c594140b0c3a9bfe95f7919', 1, 2, '2022-01-18 01:03:28', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-18 00:33:28', NULL, '2022-01-18 00:33:28', b'0', 1); +INSERT INTO `system_user_session` VALUES ('9cb0aefe562d4332bd5a1188ca55552d', 1, 2, '2022-01-28 21:55:14', 'admin', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 21:25:14', NULL, '2022-01-28 21:25:14', b'0', 1); +INSERT INTO `system_user_session` VALUES ('9ee1349d7d3043759cb742a0fa5a3163', 1, 2, '2021-12-25 19:08:33', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-25 18:38:33', NULL, '2021-12-25 18:38:33', b'0', 1); +INSERT INTO `system_user_session` VALUES ('9f24e48662764c6b8b3ba9b4dab24205', 1, 2, '2022-01-28 10:19:07', 'admin', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 09:49:07', NULL, '2022-01-28 09:49:07', b'0', 1); +INSERT INTO `system_user_session` VALUES ('9f3266f59b8746c3bfe143361d86f6e8', 1, 2, '2022-01-08 22:31:37', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-08 22:01:37', NULL, '2022-01-08 22:01:37', b'0', 1); +INSERT INTO `system_user_session` VALUES ('a09624232ed94b44a846023790e6282f', 1, 2, '2022-01-09 13:45:26', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-09 12:59:15', NULL, '2022-01-09 13:15:26', b'0', 1); +INSERT INTO `system_user_session` VALUES ('a155e6dfe4b74fbaa69fcca239facc40', 1, 2, '2021-12-16 07:37:39', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-16 07:07:39', NULL, '2021-12-16 07:07:39', b'0', 1); +INSERT INTO `system_user_session` VALUES ('a17d02a7c4264f7489728f510e40e823', 1, 2, '2022-01-17 13:18:31', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-17 12:48:31', NULL, '2022-01-17 04:48:37', b'1', 1); +INSERT INTO `system_user_session` VALUES ('a30e807e5db640feb92bb1eeb4ae89d0', 1, 2, '2022-01-16 12:23:10', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-16 11:53:10', NULL, '2022-01-16 11:53:10', b'0', 1); +INSERT INTO `system_user_session` VALUES ('a4688af426e342a69c814d07bb8f7d3b', 1, 2, '2022-01-08 17:21:11', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-08 16:25:34', NULL, '2022-01-08 16:51:11', b'0', 1); +INSERT INTO `system_user_session` VALUES ('a49e304816e0477998592c76caa9546d', 1, 2, '2022-01-16 01:20:18', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-16 00:30:18', NULL, '2022-01-16 00:50:18', b'0', 1); +INSERT INTO `system_user_session` VALUES ('a55b31ff9e6a41fcb931d2244b4240a8', 1, 2, '2021-12-30 22:32:56', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-30 20:04:02', NULL, '2021-12-30 22:02:56', b'0', 1); +INSERT INTO `system_user_session` VALUES ('a88e404ba71e41b0a16c75a8ce44bb9d', 1, 2, '2022-01-09 11:57:51', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-09 11:27:51', NULL, '2022-01-09 11:27:51', b'0', 1); +INSERT INTO `system_user_session` VALUES ('a9b27f95517d4ef9ae15c68bd4365d1b', 103, 2, '2022-01-11 20:37:20', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-11 19:35:41', NULL, '2022-01-11 20:07:20', b'0', 1); +INSERT INTO `system_user_session` VALUES ('ab449ce8f2ea456591d23515c188c242', 1, 2, '2021-12-25 17:55:45', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-25 16:42:42', NULL, '2021-12-25 17:25:45', b'0', 1); +INSERT INTO `system_user_session` VALUES ('ac730d1c96be41e5821a6de24b23bf7b', 103, 2, '2022-01-11 20:05:41', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-11 19:35:41', NULL, '2022-01-11 19:35:41', b'0', 1); +INSERT INTO `system_user_session` VALUES ('ac88c6d1cb184979a015e9a8b50e21f0', 1, 2, '2022-01-03 04:59:36', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-03 03:39:08', NULL, '2022-01-03 04:29:36', b'0', 1); +INSERT INTO `system_user_session` VALUES ('ae2a8c4a7df64271b0e7a2b702c378f8', 1, 2, '2022-01-18 02:18:53', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-18 00:58:20', NULL, '2022-01-18 01:48:53', b'0', 1); +INSERT INTO `system_user_session` VALUES ('b12325b8930245c09b75aa100dc1124d', 1, 2, '2022-01-01 09:12:53', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-01 08:09:05', NULL, '2022-01-01 08:42:53', b'0', 1); +INSERT INTO `system_user_session` VALUES ('b25e2297fca14a5e843288df2aa59c12', 1, 2, '2022-01-23 04:49:53', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-23 04:19:53', NULL, '2022-01-23 04:19:53', b'0', 1); +INSERT INTO `system_user_session` VALUES ('b523e3add6e74587b247b467de677325', 1, 2, '2022-01-18 01:15:31', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-18 00:33:47', NULL, '2022-01-18 00:45:31', b'0', 1); +INSERT INTO `system_user_session` VALUES ('b64443d1c4bd4f8eabdff02c47f6ae26', 1, 2, '2022-01-28 21:53:20', 'admin', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 21:23:20', NULL, '2022-01-28 21:23:20', b'0', 1); +INSERT INTO `system_user_session` VALUES ('b6a02289210b4861b71a363b11b6b919', 1, 2, '2022-01-09 11:23:22', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-09 10:39:49', NULL, '2022-01-09 10:53:22', b'0', 1); +INSERT INTO `system_user_session` VALUES ('b883ba1582f54826b42fa073276c85cb', 1, 2, '2022-01-08 01:40:34', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-08 01:10:34', NULL, '2022-01-08 01:10:34', b'0', 1); +INSERT INTO `system_user_session` VALUES ('ba1658c24b78442fb39062e31d902a5f', 1, 2, '2022-01-10 20:12:44', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-10 19:21:24', NULL, '2022-01-10 19:42:44', b'0', 1); +INSERT INTO `system_user_session` VALUES ('bb14f39f65ca41cc8ef915ad7f0c25d6', 1, 2, '2022-01-09 09:40:48', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-09 08:48:56', NULL, '2022-01-09 09:10:48', b'0', 1); +INSERT INTO `system_user_session` VALUES ('bcd449a215fd432e8154d883f954606b', 1, 2, '2022-01-28 21:52:31', 'admin', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 21:22:31', NULL, '2022-01-28 21:22:31', b'0', 1); +INSERT INTO `system_user_session` VALUES ('bce9ee82f6f34159acfc26e5e994b892', 1, 2, '2022-01-23 13:42:55', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-23 12:40:59', NULL, '2022-01-23 13:12:55', b'0', 1); +INSERT INTO `system_user_session` VALUES ('bd2b51a53b8d4046b024f43406985caf', 103, 2, '2022-01-15 23:31:38', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-15 22:20:30', NULL, '2022-01-15 23:01:38', b'0', 1); +INSERT INTO `system_user_session` VALUES ('bd52c43710274cd8bd888b1737cd939d', 1, 2, '2022-01-22 23:09:46', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-22 20:45:15', NULL, '2022-01-22 22:39:46', b'0', 1); +INSERT INTO `system_user_session` VALUES ('bd655254904748f79c0ad47dfb49d457', 1, 2, '2022-01-01 08:05:32', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-01 07:35:32', NULL, '2022-01-01 07:35:32', b'0', 1); +INSERT INTO `system_user_session` VALUES ('be98e2f02a444a4092d1cea3dc6e3073', 1, 2, '2022-01-17 13:34:51', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-17 12:26:04', NULL, '2022-01-17 13:04:51', b'0', 1); +INSERT INTO `system_user_session` VALUES ('c09baa895d79468db63417f60c65573c', 1, 2, '2022-01-01 11:33:44', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-01 10:13:48', NULL, '2022-01-01 11:03:44', b'0', 1); +INSERT INTO `system_user_session` VALUES ('c0f2be79200f4f0b9c6304745742b468', 245, 1, '2022-01-29 01:07:51', '15601691300', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-29 00:37:51', NULL, '2022-01-29 00:37:51', b'0', 1); +INSERT INTO `system_user_session` VALUES ('c1797274297f4cd7b859c6c482d06005', 1, 2, '2022-01-09 10:26:00', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-09 09:44:24', NULL, '2022-01-09 09:56:00', b'0', 1); +INSERT INTO `system_user_session` VALUES ('c386c570da874af588fd4e64f86dadfc', 1, 2, '2022-01-31 17:45:38', 'admin', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-01-31 17:15:38', NULL, '2022-01-31 17:15:38', b'0', 1); +INSERT INTO `system_user_session` VALUES ('c425763ad38c471a9f6e572ee2fd85ae', 1, 2, '2022-01-24 08:20:09', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-24 07:50:09', NULL, '2022-01-24 07:50:09', b'0', 1); +INSERT INTO `system_user_session` VALUES ('c591d431be494e8c847a6b9ee4b0b3dc', 1, 2, '2022-02-02 01:41:58', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36', NULL, '2022-02-02 00:27:55', NULL, '2022-02-02 01:11:58', b'0', 1); +INSERT INTO `system_user_session` VALUES ('c7c4d30623c84d3e88aab2f0b742e7c3', 1, 2, '2022-01-21 01:14:47', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-21 00:24:00', NULL, '2022-01-20 16:54:39', b'1', 1); +INSERT INTO `system_user_session` VALUES ('c7fc3e37d927405ebbe66df3dd5fd77e', 103, 2, '2022-01-13 01:01:29', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-12 22:57:04', NULL, '2022-01-13 00:31:29', b'0', 1); +INSERT INTO `system_user_session` VALUES ('cbd09ba52ccc47b2a639a6e28e92894f', 103, 2, '2022-01-12 01:34:01', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-12 01:04:01', NULL, '2022-01-12 01:04:01', b'0', 1); +INSERT INTO `system_user_session` VALUES ('ccc85a8ee5a7407c97012b755cde979e', 1, 2, '2022-01-16 18:08:41', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-16 17:38:41', NULL, '2022-01-16 17:38:41', b'0', 1); +INSERT INTO `system_user_session` VALUES ('d229b8f8ef4d4df4afd05209acc87446', 1, 2, '2022-01-08 11:02:36', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-08 10:32:36', NULL, '2022-01-08 02:37:12', b'1', 1); +INSERT INTO `system_user_session` VALUES ('d46d26f08f624eb28eb665b6515587bd', 1, 2, '2022-01-16 00:19:32', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-15 23:49:32', NULL, '2022-01-15 23:49:32', b'0', 1); +INSERT INTO `system_user_session` VALUES ('d4aeab42d1934197865ce72ffe244009', 1, 2, '2022-01-16 03:11:56', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-16 02:41:56', NULL, '2022-01-16 02:41:56', b'0', 1); +INSERT INTO `system_user_session` VALUES ('d8550bde3c8b43a194e592b49c856c71', 1, 2, '2022-01-09 21:26:38', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-09 19:38:12', NULL, '2022-01-09 20:56:38', b'0', 1); +INSERT INTO `system_user_session` VALUES ('d8ebbe89793f4a829a108c4f1badbb11', 103, 2, '2022-01-13 21:18:56', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-13 20:38:43', NULL, '2022-01-13 20:48:56', b'0', 1); +INSERT INTO `system_user_session` VALUES ('da04f99dc14a4f28a8a77178861cb3ed', 104, 2, '2021-12-15 23:37:58', 'test', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-15 22:47:31', NULL, '2021-12-15 15:11:55', b'1', 1); +INSERT INTO `system_user_session` VALUES ('daec82cc885849a7bbab76eb9f0a4b32', 1, 2, '2022-01-15 23:31:35', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-15 22:00:43', NULL, '2022-01-15 23:01:35', b'0', 1); +INSERT INTO `system_user_session` VALUES ('dbaaa89e1659488c9693317454fe6ae2', 1, 2, '2022-01-14 22:53:55', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-14 22:23:55', NULL, '2022-01-14 22:23:55', b'0', 1); +INSERT INTO `system_user_session` VALUES ('dbe0f27930244ae38e0322226d6ecdbb', 1, 2, '2022-01-21 01:46:31', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-21 00:54:45', NULL, '2022-01-21 01:16:31', b'0', 1); +INSERT INTO `system_user_session` VALUES ('dd2e53ccf8c44b3e8556571687d4825d', 103, 2, '2022-01-12 01:34:01', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-12 01:04:01', NULL, '2022-01-12 01:04:01', b'0', 1); +INSERT INTO `system_user_session` VALUES ('ddb9d3c65ee14c4a8ff1a3cf0e10e69a', 1, 2, '2022-01-19 00:52:57', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-19 00:22:57', NULL, '2022-01-19 00:22:57', b'0', 1); +INSERT INTO `system_user_session` VALUES ('ddd32e0a43d644ca95ba10e4e5b19416', 1, 2, '2022-01-03 19:28:22', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-03 17:22:27', NULL, '2022-01-03 18:58:22', b'0', 1); +INSERT INTO `system_user_session` VALUES ('df12a50eb8814317bb8e1003e098cbe7', 1, 2, '2022-01-09 19:04:00', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-09 16:26:16', NULL, '2022-01-09 18:34:00', b'0', 1); +INSERT INTO `system_user_session` VALUES ('e198f4f04da243d5b80caa0c8336d6a0', 103, 2, '2022-01-14 19:09:16', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-14 18:39:16', NULL, '2022-01-14 10:39:24', b'1', 1); +INSERT INTO `system_user_session` VALUES ('e290aebda5f34c379d0cf3e013cbcc8b', 1, 2, '2022-01-02 09:27:23', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-02 08:32:23', NULL, '2022-01-02 08:57:23', b'0', 1); +INSERT INTO `system_user_session` VALUES ('e2efa96cacbb47b580096193244a3739', 1, 2, '2022-01-14 14:24:13', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-14 13:44:04', NULL, '2022-01-14 13:54:13', b'0', 1); +INSERT INTO `system_user_session` VALUES ('e3c0319f639a481999bac6fa250af552', 1, 2, '2022-01-03 16:56:06', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-03 16:14:34', NULL, '2022-01-03 16:26:06', b'0', 1); +INSERT INTO `system_user_session` VALUES ('e42efabb61af4f5eaeea3b84693871da', 1, 2, '2022-01-15 22:28:55', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-15 21:58:55', NULL, '2022-01-15 14:00:08', b'1', 1); +INSERT INTO `system_user_session` VALUES ('e75c264df71342a59a85a6512a5a1fb7', 1, 2, '2022-01-22 19:18:46', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-22 18:30:58', NULL, '2022-01-22 18:48:46', b'0', 1); +INSERT INTO `system_user_session` VALUES ('f0285533812349a9a6c548a9a9dda1b7', 245, 1, '2022-01-29 12:20:08', '15601691300', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-29 11:50:08', NULL, '2022-01-29 11:50:08', b'0', 1); +INSERT INTO `system_user_session` VALUES ('f10cabf849b245ebbaa5284b540c0bb2', 103, 2, '2022-01-11 21:51:14', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-11 20:54:19', NULL, '2022-01-11 21:21:14', b'0', 1); +INSERT INTO `system_user_session` VALUES ('f2dcbc8096b14903a5f66d01a8335d78', 1, 2, '2022-01-28 21:53:36', 'admin', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 21:23:36', NULL, '2022-01-28 21:23:36', b'0', 1); +INSERT INTO `system_user_session` VALUES ('f42ef6d30bd34349addf16b8a9edaf16', 1, 2, '2022-01-28 21:52:45', 'admin', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2022-01-28 21:22:45', NULL, '2022-01-28 21:22:45', b'0', 1); +INSERT INTO `system_user_session` VALUES ('f49ade9038d24a73832e64efcc30b205', 103, 2, '2022-01-11 13:53:26', 'yuanma', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-11 13:23:26', NULL, '2022-01-11 13:23:26', b'0', 1); +INSERT INTO `system_user_session` VALUES ('f562fd12a7bb41f19ca1bf4aa5e3c9d1', 1, 2, '2022-01-22 02:42:51', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-22 01:20:59', NULL, '2022-01-22 02:12:51', b'0', 1); +INSERT INTO `system_user_session` VALUES ('f76c8610a7e5461aac8972e21f14e734', 1, 2, '2022-01-22 21:52:44', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-22 20:29:53', NULL, '2022-01-22 21:22:44', b'0', 1); +INSERT INTO `system_user_session` VALUES ('f974a40ea70941cdb9e04cb63bf5e557', 1, 2, '2022-01-16 02:00:25', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', NULL, '2022-01-16 01:30:25', NULL, '2022-01-16 01:30:25', b'0', 1); +INSERT INTO `system_user_session` VALUES ('f9f257cf09e640f2904696f2de35d3f6', 1, 2, '2022-01-03 21:42:44', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-03 20:59:23', NULL, '2022-01-03 21:12:44', b'0', 1); +INSERT INTO `system_user_session` VALUES ('fcac1dd7161d46cbb60fd66b898a9503', 1, 2, '2022-02-02 00:55:21', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36', NULL, '2022-02-02 00:25:21', NULL, '2022-02-01 16:26:40', b'1', 1); +INSERT INTO `system_user_session` VALUES ('fe82f6ecb17449b595c7d6bd4bc1d371', 1, 2, '2021-12-15 23:16:49', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-15 22:46:49', NULL, '2021-12-15 14:46:53', b'1', 1); +INSERT INTO `system_user_session` VALUES ('ffeae9ee4b8649b6b9ececaa502a934d', 1, 2, '2022-01-01 19:56:49', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-01 18:47:31', NULL, '2022-01-01 19:26:49', b'0', 1); COMMIT; -- ---------------------------- @@ -2878,26 +3455,26 @@ DROP TABLE IF EXISTS `tool_codegen_column`; CREATE TABLE `tool_codegen_column` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ç¼–å·', `table_id` bigint NOT NULL COMMENT '表编å·', - `column_name` varchar(200) NOT NULL COMMENT '字段å', - `column_type` varchar(100) NOT NULL COMMENT '字段类型', - `column_comment` varchar(500) NOT NULL COMMENT '字段æè¿°', + `column_name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '字段å', + `column_type` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '字段类型', + `column_comment` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '字段æè¿°', `nullable` bit(1) NOT NULL COMMENT '是å¦å…许为空', `primary_key` bit(1) NOT NULL COMMENT '是å¦ä¸»é”®', - `auto_Increment` char(1) NOT NULL COMMENT '是å¦è‡ªå¢ž', + `auto_Increment` char(1) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '是å¦è‡ªå¢ž', `ordinal_position` int NOT NULL COMMENT '排åº', - `java_type` varchar(32) NOT NULL COMMENT 'Java 属性类型', - `java_field` varchar(64) NOT NULL COMMENT 'Java 属性å', - `dict_type` varchar(200) DEFAULT '' COMMENT '字典类型', - `example` varchar(64) DEFAULT NULL COMMENT 'æ•°æ®ç¤ºä¾‹', + `java_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Java 属性类型', + `java_field` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Java 属性å', + `dict_type` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '字典类型', + `example` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'æ•°æ®ç¤ºä¾‹', `create_operation` bit(1) NOT NULL COMMENT '是å¦ä¸º Create 创建æ“作的字段', `update_operation` bit(1) NOT NULL COMMENT '是å¦ä¸º Update æ›´æ–°æ“作的字段', `list_operation` bit(1) NOT NULL COMMENT '是å¦ä¸º List 查询æ“作的字段', - `list_operation_condition` varchar(32) NOT NULL DEFAULT '=' COMMENT 'List 查询æ“作的æ¡ä»¶ç±»åž‹', + `list_operation_condition` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '=' COMMENT 'List 查询æ“作的æ¡ä»¶ç±»åž‹', `list_operation_result` bit(1) NOT NULL COMMENT '是å¦ä¸º List 查询æ“作的返回字段', - `html_type` varchar(32) NOT NULL COMMENT '显示类型', - `creator` varchar(64) DEFAULT '' COMMENT '创建者', + `html_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '显示类型', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) DEFAULT '' COMMENT '更新者', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', PRIMARY KEY (`id`) USING BTREE @@ -3162,19 +3739,19 @@ DROP TABLE IF EXISTS `tool_codegen_table`; CREATE TABLE `tool_codegen_table` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ç¼–å·', `import_type` tinyint NOT NULL DEFAULT '1' COMMENT '导入类型', - `table_name` varchar(200) NOT NULL DEFAULT '' COMMENT '表åç§°', - `table_comment` varchar(500) NOT NULL DEFAULT '' COMMENT '表æè¿°', - `remark` varchar(500) DEFAULT NULL COMMENT '备注', - `module_name` varchar(30) NOT NULL COMMENT '模å—å', - `business_name` varchar(30) NOT NULL COMMENT '业务å', - `class_name` varchar(100) NOT NULL DEFAULT '' COMMENT 'ç±»åç§°', - `class_comment` varchar(50) NOT NULL COMMENT 'ç±»æè¿°', - `author` varchar(50) NOT NULL COMMENT '作者', + `table_name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '表åç§°', + `table_comment` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '表æè¿°', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `module_name` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模å—å', + `business_name` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '业务å', + `class_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'ç±»åç§°', + `class_comment` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'ç±»æè¿°', + `author` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '作者', `template_type` tinyint NOT NULL DEFAULT '1' COMMENT '模æ¿ç±»åž‹', `parent_menu_id` bigint DEFAULT NULL COMMENT '父èœå•ç¼–å·', - `creator` varchar(64) DEFAULT '' COMMENT '创建者', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) DEFAULT '' COMMENT '更新者', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', PRIMARY KEY (`id`) USING BTREE @@ -3210,14 +3787,14 @@ COMMIT; DROP TABLE IF EXISTS `tool_test_demo`; CREATE TABLE `tool_test_demo` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ç¼–å·', - `name` varchar(100) NOT NULL DEFAULT '' COMMENT 'åå­—', + `name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'åå­—', `status` tinyint NOT NULL DEFAULT '0' COMMENT '状æ€', `type` tinyint NOT NULL COMMENT '类型', `category` tinyint NOT NULL COMMENT '分类', - `remark` varchar(500) DEFAULT NULL COMMENT '备注', - `creator` varchar(64) DEFAULT '' COMMENT '创建者', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) DEFAULT '' COMMENT '更新者', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ é™¤', PRIMARY KEY (`id`) USING BTREE diff --git a/yudao-admin-server/pom.xml b/yudao-admin-server/pom.xml index e27f025d70..3c19531904 100644 --- a/yudao-admin-server/pom.xml +++ b/yudao-admin-server/pom.xml @@ -32,6 +32,11 @@ yudao-module-system-impl ${revision}
+ + cn.iocoder.boot + yudao-module-tool-impl + ${revision} + cn.iocoder.boot yudao-module-infra-impl diff --git a/yudao-admin-server/src/main/resources/application.yaml b/yudao-admin-server/src/main/resources/application.yaml index e5761d5d09..14c5025d24 100644 --- a/yudao-admin-server/src/main/resources/application.yaml +++ b/yudao-admin-server/src/main/resources/application.yaml @@ -74,9 +74,12 @@ yudao: db-schemas: ${spring.datasource.dynamic.datasource.master.name} error-code: # 错误ç ç›¸å…³é…置项 constants-class-list: - - cn.iocoder.yudao.adminserver.modules.infra.enums.InfErrorCodeConstants + - cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants + - cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants + - cn.iocoder.yudao.module.member.enums.ErrorCodeConstants + - cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants - cn.iocoder.yudao.module.system.enums.ErrorCodeConstants - - cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants + - cn.iocoder.yudao.module.tool.enums.ErrorCodeConstants tenant: # 多租户相关é…置项 tables: # é…置需è¦å¼€å¯å¤šç§Ÿæˆ·çš„表;如果实体已ç»ç»§æ‰¿ TenantBaseDO 类,则无需é‡å¤é…ç½® sms-code: # 短信验è¯ç ç›¸å…³çš„é…置项 diff --git a/yudao-admin-ui/src/api/infra/dbDoc.js b/yudao-admin-ui/src/api/tool/dbDoc.js similarity index 75% rename from yudao-admin-ui/src/api/infra/dbDoc.js rename to yudao-admin-ui/src/api/tool/dbDoc.js index 015c6d71dc..19f91c3711 100644 --- a/yudao-admin-ui/src/api/infra/dbDoc.js +++ b/yudao-admin-ui/src/api/tool/dbDoc.js @@ -3,7 +3,7 @@ import request from "@/utils/request"; export function exportHtml() { return request({ - url: '/infra/db-doc/export-html', + url: '/tool/db-doc/export-html', method: 'get', responseType: 'blob' }) @@ -11,7 +11,7 @@ export function exportHtml() { export function exportWord() { return request({ - url: '/infra/db-doc/export-word', + url: '/tool/db-doc/export-word', method: 'get', responseType: 'blob' }) @@ -19,7 +19,7 @@ export function exportWord() { export function exportMarkdown() { return request({ - url: '/infra/db-doc/export-markdown', + url: '/tool/db-doc/export-markdown', method: 'get', responseType: 'blob' }) diff --git a/yudao-admin-ui/src/store/modules/dict.js b/yudao-admin-ui/src/store/modules/dict.js index 6d3984d677..62d84ec8ab 100644 --- a/yudao-admin-ui/src/store/modules/dict.js +++ b/yudao-admin-ui/src/store/modules/dict.js @@ -19,7 +19,7 @@ const actions = { loadDictDatas({ commit }) { listSimpleDictDatas().then(response => { // 如果未加载到数æ®ï¼Œåˆ™ç›´æŽ¥è¿”回 - if (!response.data) { + if (!response || !response.data) { return; } // è®¾ç½®æ•°æ® diff --git a/yudao-admin-ui/src/utils/constants.js b/yudao-admin-ui/src/utils/constants.js index 87ca6e8ccc..912f90f2ad 100644 --- a/yudao-admin-ui/src/utils/constants.js +++ b/yudao-admin-ui/src/utils/constants.js @@ -7,7 +7,7 @@ /** * å…¨å±€é€šç”¨çŠ¶æ€æžšä¸¾ */ -export const SysCommonStatusEnum = { +export const CommonStatusEnum = { ENABLE: 0, // å¼€å¯ DISABLE: 1 // ç¦ç”¨ } @@ -15,7 +15,7 @@ export const SysCommonStatusEnum = { /** * èœå•的类型枚举 */ -export const SysMenuTypeEnum = { +export const SystemMenuTypeEnum = { DIR: 1, // 目录 MENU: 2, // èœå• BUTTON: 3 // 按钮 @@ -24,7 +24,7 @@ export const SysMenuTypeEnum = { /** * 角色的类型枚举 */ -export const SysRoleTypeEnum = { +export const SystemRoleTypeEnum = { SYSTEM: 1, // 内置角色 CUSTOM: 2 // 自定义角色 } @@ -32,7 +32,7 @@ export const SysRoleTypeEnum = { /** * æ•°æ®æƒé™çš„范围枚举 */ -export const SysDataScopeEnum = { +export const SystemDataScopeEnum = { ALL: 1, // å…¨éƒ¨æ•°æ®æƒé™ DEPT_CUSTOM: 2, // æŒ‡å®šéƒ¨é—¨æ•°æ®æƒé™ DEPT_ONLY: 3, // éƒ¨é—¨æ•°æ®æƒé™ @@ -52,7 +52,7 @@ export const ToolCodegenTemplateTypeEnum = { /** * 任务状æ€çš„æžšä¸¾ */ -export const InfJobStatusEnum = { +export const InfraJobStatusEnum = { INIT: 0, // åˆå§‹åŒ–中 NORMAL: 1, // è¿è¡Œä¸­ STOP: 2, // æš‚åœè¿è¡Œ @@ -61,7 +61,7 @@ export const InfJobStatusEnum = { /** * API 异常数æ®çš„处ç†çŠ¶æ€ */ -export const InfApiErrorLogProcessStatusEnum = { +export const InfraApiErrorLogProcessStatusEnum = { INIT: 0, // æœªå¤„ç† DONE: 1, // å·²å¤„ç† IGNORE: 2, // 已忽略 @@ -70,7 +70,7 @@ export const InfApiErrorLogProcessStatusEnum = { /** * 用户的社交平å°çš„类型枚举 */ -export const SysUserSocialTypeEnum = { +export const SystemUserSocialTypeEnum = { // GITEE: { // title: "ç äº‘", // type: 10, @@ -136,7 +136,7 @@ export const PayType = { /** * 支付订å•çŠ¶æ€æžšä¸¾ */ -export const payOrderStatusEnum = { +export const PayOrderStatusEnum = { WAITING: { status: 0, name: '未支付' @@ -154,7 +154,7 @@ export const payOrderStatusEnum = { /** * 支付订å•å›žè°ƒçŠ¶æ€æžšä¸¾ */ -export const payOrderNotifyStatusEnum = { +export const PayOrderNotifyStatusEnum = { NO: { status: 0, name: '未通知' @@ -172,7 +172,7 @@ export const payOrderNotifyStatusEnum = { /** * 支付订å•é€€æ¬¾çŠ¶æ€æžšä¸¾ */ -export const payOrderRefundStatusEnum = { +export const PayOrderRefundStatusEnum = { NO: { status: 0, name: '未退款' @@ -190,7 +190,7 @@ export const payOrderRefundStatusEnum = { /** * 支付退款订å•çŠ¶æ€æžšä¸¾ */ -export const payRefundStatusEnum = { +export const PayRefundStatusEnum = { CREATE:{ status:0, name: '退款订å•生æˆ' diff --git a/yudao-admin-ui/src/utils/dict.js b/yudao-admin-ui/src/utils/dict.js index e10414d405..c3813c31aa 100644 --- a/yudao-admin-ui/src/utils/dict.js +++ b/yudao-admin-ui/src/utils/dict.js @@ -7,34 +7,34 @@ import store from '@/store' export const DICT_TYPE = { USER_TYPE: 'user_type', + COMMON_STATUS: 'common_status', - // system - SYS_COMMON_STATUS: 'sys_common_status', - SYS_MENU_TYPE: 'sys_menu_type', - SYS_ROLE_TYPE: 'sys_role_type', - SYS_DATA_SCOPE: 'sys_data_scope', - SYS_USER_SEX: 'sys_user_sex', - SYS_NOTICE_TYPE: 'sys_notice_type', - SYS_OPERATE_TYPE: 'sys_operate_type', - SYS_LOGIN_TYPE: 'sys_login_type', - SYS_LOGIN_RESULT: 'sys_login_result', - SYS_CONFIG_TYPE: 'sys_config_type', - SYS_SMS_CHANNEL_CODE: 'sys_sms_channel_code', - SYS_SMS_TEMPLATE_TYPE: 'sys_sms_template_type', - SYS_SMS_SEND_STATUS: 'sys_sms_send_status', - SYS_SMS_RECEIVE_STATUS: 'sys_sms_receive_status', - SYS_ERROR_CODE_TYPE: 'sys_error_code_type', + // ========== SYSTEM æ¨¡å— ========== + SYSTEM_USER_SEX: 'system_user_sex', + SYSTEM_MENU_TYPE: 'system_menu_type', + SYSTEM_ROLE_TYPE: 'system_role_type', + SYSTEM_DATA_SCOPE: 'system_data_scope', + SYSTEM_NOTICE_TYPE: 'system_notice_type', + SYSTEM_OPERATE_TYPE: 'system_operate_type', + SYSTEM_LOGIN_TYPE: 'system_login_type', + SYSTEM_LOGIN_RESULT: 'system_login_result', + SYSTEM_SMS_CHANNEL_CODE: 'system_sms_channel_code', + SYSTEM_SMS_TEMPLATE_TYPE: 'system_sms_template_type', + SYSTEM_SMS_SEND_STATUS: 'system_sms_send_status', + SYSTEM_SMS_RECEIVE_STATUS: 'system_sms_receive_status', + SYSTEM_ERROR_CODE_TYPE: 'system_error_code_type', - // infra - INF_REDIS_TIMEOUT_TYPE: 'inf_redis_timeout_type', - INF_JOB_STATUS: 'inf_job_status', - INF_JOB_LOG_STATUS: 'inf_job_log_status', - INF_API_ERROR_LOG_PROCESS_STATUS: 'inf_api_error_log_process_status', + // ========== INFRA æ¨¡å— ========== + INFRA_REDIS_TIMEOUT_TYPE: 'infra_redis_timeout_type', + INFRA_JOB_STATUS: 'infra_job_status', + INFRA_JOB_LOG_STATUS: 'infra_job_log_status', + INFRA_API_ERROR_LOG_PROCESS_STATUS: 'infra_api_error_log_process_status', + INFRA_CONFIG_TYPE: 'infra_config_type', - // tool + // ========== TOOL æ¨¡å— ========== TOOL_CODEGEN_TEMPLATE_TYPE: 'tool_codegen_template_type', - // bpm + // ========== BPM æ¨¡å— ========== BPM_MODEL_CATEGORY: 'bpm_model_category', BPM_MODEL_FORM_TYPE: 'bpm_model_form_type', BPM_TASK_ASSIGN_RULE_TYPE: 'bpm_task_assign_rule_type', @@ -43,27 +43,17 @@ export const DICT_TYPE = { BPM_TASK_ASSIGN_SCRIPT: 'bpm_task_assign_script', BPM_OA_LEAVE_TYPE: 'bpm_oa_leave_type', - // pay - // 微信渠é“版本 - PAY_CHANNEL_WECHAT_VERSION:'pay_channel_wechat_version', - // æ”¯ä»˜æ¸ é“æ”¯ä»˜å®ç®—法类型 - PAY_CHANNEL_ALIPAY_SIGN_TYPE:'pay_channel_alipay_sign_type', - // 支付å®å…¬é’¥ç±»åž‹ - PAY_CHANNEL_ALIPAY_MODE:'pay_channel_alipay_mode', - // 支付å®ç½‘å…³åœ°å€ - PAY_CHANNEL_ALIPAY_SERVER_TYPE:'pay_channel_alipay_server_type', - // 支付渠é“ç¼–ç ç±»åž‹ - PAY_CHANNEL_CODE_TYPE: 'pay_channel_code_type', - // 商户支付订å•å›žè°ƒçŠ¶æ€ - PAY_ORDER_NOTIFY_STATUS: 'pay_order_notify_status', - // 商户支付订å•çŠ¶æ€ - PAY_ORDER_STATUS: 'pay_order_status', - // 商户支付订å•é€€æ¬¾çŠ¶æ€ - PAY_ORDER_REFUND_STATUS: 'pay_order_refund_status', - // 退款订å•çŠ¶æ€ - PAY_REFUND_ORDER_STATUS: 'pay_refund_order_status', - // 退款订å•类别 - PAY_REFUND_ORDER_TYPE: 'pay_refund_order_type', + // ========== PAY æ¨¡å— ========== + PAY_CHANNEL_WECHAT_VERSION: 'pay_channel_wechat_version', // 微信渠é“版本 + PAY_CHANNEL_ALIPAY_SIGN_TYPE: 'pay_channel_alipay_sign_type', // æ”¯ä»˜æ¸ é“æ”¯ä»˜å®ç®—法类型 + PAY_CHANNEL_ALIPAY_MODE: 'pay_channel_alipay_mode', // 支付å®å…¬é’¥ç±»åž‹ + PAY_CHANNEL_ALIPAY_SERVER_TYPE: 'pay_channel_alipay_server_type', // 支付å®ç½‘å…³åœ°å€ + PAY_CHANNEL_CODE_TYPE: 'pay_channel_code_type', // 支付渠é“ç¼–ç ç±»åž‹ + PAY_ORDER_NOTIFY_STATUS: 'pay_order_notify_status', // 商户支付订å•å›žè°ƒçŠ¶æ€ + PAY_ORDER_STATUS: 'pay_order_status', // 商户支付订å•çŠ¶æ€ + PAY_ORDER_REFUND_STATUS: 'pay_order_refund_status', // 商户支付订å•é€€æ¬¾çŠ¶æ€ + PAY_REFUND_ORDER_STATUS: 'pay_refund_order_status', // 退款订å•çŠ¶æ€ + PAY_REFUND_ORDER_TYPE: 'pay_refund_order_type', // 退款订å•类别 } /** diff --git a/yudao-admin-ui/src/views/bpm/form/formEditor.vue b/yudao-admin-ui/src/views/bpm/form/formEditor.vue index b04ef694e4..c2ec15e32c 100644 --- a/yudao-admin-ui/src/views/bpm/form/formEditor.vue +++ b/yudao-admin-ui/src/views/bpm/form/formEditor.vue @@ -42,7 +42,7 @@ - {{dict.label}} @@ -167,7 +167,7 @@ import { getDrawingList, saveDrawingList, getIdGlobal, saveIdGlobal, getFormConf } from '@/utils/db' import loadBeautifier from '@/utils/loadBeautifier' -import {SysCommonStatusEnum} from "@/utils/constants"; +import {CommonStatusEnum} from "@/utils/constants"; import {createForm, getForm, updateForm} from "@/api/bpm/form"; import {decodeFields} from "@/utils/formGenerator"; @@ -232,7 +232,7 @@ export default { // 表å•傿•° form: { - status: SysCommonStatusEnum.ENABLE, + status: CommonStatusEnum.ENABLE, }, // è¡¨å•æ ¡éªŒ rules: { diff --git a/yudao-admin-ui/src/views/bpm/form/index.vue b/yudao-admin-ui/src/views/bpm/form/index.vue index 15943b7cef..41be534d3d 100644 --- a/yudao-admin-ui/src/views/bpm/form/index.vue +++ b/yudao-admin-ui/src/views/bpm/form/index.vue @@ -27,7 +27,7 @@ diff --git a/yudao-admin-ui/src/views/bpm/group/index.vue b/yudao-admin-ui/src/views/bpm/group/index.vue index f0407270c0..9b2372c999 100644 --- a/yudao-admin-ui/src/views/bpm/group/index.vue +++ b/yudao-admin-ui/src/views/bpm/group/index.vue @@ -8,7 +8,7 @@ - @@ -45,7 +45,7 @@ @@ -82,7 +82,7 @@ - {{dict.label}} @@ -97,7 +97,7 @@ + diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/base/browser/ui/codicons/codicon/codicon.ttf b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/base/browser/ui/codicons/codicon/codicon.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b546c0a9775d3a6eae370da888c20094986fc70a GIT binary patch literal 65176 zcmeFad3+nyy*_--j26q?*}(s zvSH7LKd633h;}|9jw`lZeAU)Z4!rvsA--z~`R-fWw`|y4`L!Qx$GN`*GTU)L`>*O8 z_Q!yl?U(GkviE815&8ik>g^Zr-n8NE;m^bgseGLf;iXG9T)9WMhI|X3SKuW7t__!L z2|P37Mna1CKB0Wi?#uRFI(KX>A-@|U#Fir{yZ9lyAA9}Be~Q0nN2dSKRmu?@wI2F% zY@NCDBckV5{A}g72H2T=`;T$)_u_Bywu}gq*W(&o{W5VY@7d9E{NiiQe~$M}Bu9k4 zS@V|>)5RP1?IK>Hn)dnheR}al+cx0-xUB+}awf$QN;FeP#ebuB5jEbK1=eDB@Gbo% zX{IQFK-40R{*#}9tur^1?&A8=t4i%wp)OPRoIINy{~!EM8~o20_@6QGKV#tkn=t@U z%Val`(a>p3zN;FzMiOgrl*#=#w$LItt`g4Ty-CqHn&QFY9mO|_-!3gIz4{MmnBw~4 z;o_0vw~OB^4Y2pqekiUPCL75Q$q(tfI4+WB$e+m{$?fFVG=*bk@-=EFZFC7$Q3KVJ zJtRs_k*(xm@*-)X&15w((Z%FyvYq^%e2=_NzDYaDr^wCZ2+dF**+Cnrn?`62t)Nlb zKV zC0Rw*khQ4wId$u6>+TuLq@`^e?w3bLPENvMz*XKL-yz>6C&~B8kI280 zACsSupOT-E_sGx5FTjF+MgEQahWtDEko=YuNs0W9oF;!D|3Usl&XAADU&vp{-^ky| zIFZReD4~=JRHRy3Ms>8D8mWm|sFm8NgF2~)dTAxCq7wDf01eSFt)=xePFrZ2W@#&J zqwTbVcF`Qo({4J0&ZM*H96FcIqx0zkx`+?KF(ER0+;nM*!P-Xv#f6M2W+Ni|eWen4I1UGhH3 z(S;;MzDh13_mG#!x5)>jio8wUBDJKBWNDK2(>~fmd&yz)pJalZAPYc&7(4m@`;UP& zfMpJE25?QxdJZN*iW@jEyGd~)2j)2`ZsNdOe#a$c}H7M@pfTSVCJsglZq_~#@ z(uWi;<$xR_#mhJ#kw|eL2V@f|Ud{n2MT%E&fL)W~ehx@3QoND_GK>_j;(#Mx^9FXXwcs~bZJ1Mfd0ZeNZAK+lx ztoR@YvnPrVaX<%<;s^(`Xo{@=0O$o$e1wB(x#FW7&=sWkX%1)&Qv3`D^am+E#sN)2 zijQ+Zr;y?k9MCSL_#_AP3@JXvLAtU1EC+NCDL%~sEkufJ&H&IyqY)fdiV36u-y;okxma;(+!e zMK-1Z;>Y$S4roMD{1*=BMpFDT2ec$9euV@2k`!O&faWB{Q4Z)(QXJ!eHYLTcazL+= z;wv1CffU)?2B2$6@l_6JT~hoy2lOu~zQzGfOp4#&fKDdG*Eyh_N%5N;(9@*&Ee>dG zQhb90x|gY=ir?daJ}1RDIiT4|@gxUyJSl#k1KOSx-{OGYC&eFdfB}%=4>`aE zNbyG;U`bdNb$EEU^Apx!Gt4;)}ir1(b;@Fr6H4-POWQv4GKxD+Y=nFFkf6wh#gUycMuz{p5(oCDm96#tV$sn=QT1K?|DSByxcDk&=o7{Ew8>9AJW^q~QQ3Bqc2e*dZxF#xZ~=l9G-C zjFFVeIlvuBNzVZmNlFF|@@Z_19AK8DWa0qFBqcKk*d{4iIKVqe$;tr+N=h~ka8XjS zbAXkSl7j>Ml$4wtV5+3#;s9qQB{v7yD=AfQfX9-OhXah3l)N0^wxm?a0hUWjRUF{E zq*ToT=1WRG4sc*nk~qMINy*OvUQ9{>4)Q9tK@MM09z-e zCJyj+QflS^gD0gV2e>>br8vOqNvVZ{{1V$V2bex7WjMh3Nh!+#_D@Q!9IyjOsf_~` z0V%a}z&0SI4h~oeq}0j526m~71C|3RV=KAf-MI*dL@clLM9rDb3=5O+reuIbfZT(i{%hDWo))0~QM@^>Z+vXlWh?CD_jA zpmIsY(6dLpeAewIVhV$D>$eX z+aV5W!*(SHbzr-SgR*(EnuB_mm-y#?%fD=Akd`fjfHDDDC_eA2W5SJ9S3E7emw_eeSQN6Wqp1l z2W5SJ69+6@Qo5M~wk|2%!U3z7ly2pK{Yy%>aljHLr2`zWiAm`o2draKI>Z4xnUoH5 zz+xt)+c{u6lhPd=gtf^hIABkc(w!WztV!tz2W)Iox{CwWHYt6Q19mql-OT|DoRse2 zfGti+_j0gEO6fih*yp5llmnJJDc#RO*s)J>z2VJD3P|Y*4)OzRpX7l5 zfRvu%fG2^J*mnc)DUj0B9Eh)w(lZ?JGmz3T4tN|$>2nSU*@3w*nWkBvT^k?2kpUjlmosIQeyoIz)M0(tUdtzC8YEU2RtXF^feCn zP)O-j4(3f!eqMv0sGhE&*V3c(IQ<^|HT|1l5^98;aE0&}aX`FD{5e8SeX5_UiTY~w z8O;gpQ)Q;IT-ma+$I8B3cCzd@WwOq%%jo)a+jU2Eub0QmSCv1Z59){XFX;bdFc>a1 z{MguHTxGn|_$^bdX}jqz(`%-;%){pIS(+?IEhjB!tR}19nzVLXhpgMJciLRG7TYn~ zt9F%riT$wsnEjXbafi>*>bTPJnB%0=;*2=QoPTopT-UlDah-6Tc2~J`?#=EI_gn72 zRn%4tRoqtb7talzmp$)#tGqXOPgdqCAF2FVRi^5AHK|@!J>o0#HTX9AZjo$KMp`9Z zEB(-K@b~z~0y_e)1j~Z=hT@@@Yqr)L3vUdcjl3QmjE+Q)*OJ=)+DmKSuFKWkQ1?PT zsoz>ZQhz2k5PKr_r+6fOU7|a2MdHJT!G;GL&Ng;8?r8jRt zV{N}_A8bF^{-=(?j^{e#oi}x!?kelbbsg+F(e**jk!#J3WZCbQ*Dqhc{Mo@>gAcB#U$K3~FNX|6 z{X-{L8deUj99j9ns-{&pt$KFV+0`|x2UlOZ`t3C>Yl>^*YjbM{)^1$8Z|%>AgTq^g zUl<-=w`<*F>;AU>h7H{t?%wd7ji!yeHom;cuqnA|aMRIE-`PBW^R6wkwmi7yLyTG# z!m0ldKSVqt2!GQ&=2M|9(MUAn*J`vHr^D@%sH@qH-x0DIpP*F-S&t~~ zmt-xb^pbc?n6Ym*HDp((Y3usSwsdQJe%-*;vs$+=iqVPZ7tH7mN2B5H84vX2BlyYp z2zSjcEYkRWny&SiZtPU2hTHVQ%u8ob8e6ozRbpp6aKSaKXwX?G-%gZIk2lVMHDnE> z1J;yP+$kT*$%p9voRG@1ZJzFz53wvX5A?m*U>%BHor+)1qg zs~B(w#KULbmhdASmn8r2M6+;uVzIEdz-}iV^N&gszr$w^X>_Dem^ew#$Oe4PRGE$l zpJiIq?$$=rS+_P2&AOf1Xm;$j#OP?^Hev4pwmm>!IuIX=kH&Ai4KHJHP>iYTH;Ox% z$IMPs2(_SE^qaIbPTS)0L|&etFUfBx`@$U)`xs%KYKJJhMu&hvmZBo`W9Nxc`Hi@I zB2L8|JhfBT1erH3j6i{wqR!MUq-d*rB0XW=^FWoZTvfguL#GLb9qZR18#bBWF)aoIfc%9IQDQH zmwoJ9rL|Cps8GdjCqF^gY!i-Oc=PzH80VF~*J<)X=YPPV5G!4Wq_ zd8xQ@sxk6Z{8*itj~(OWVvG|f^u8bMBc@a7P+ILwIYo_6NClEPfo82)j2mq>;1)Ok zIiHtLG!FL?ewf znaWTUE**0C1nMx+1}OQYkBW(Mb67fM4=0-4UZdT9N{SfNWges5>aCyEm^OHfT7#jn z&K}g+%Tz{>Fyzr21h?KIzg_OJl^1k24}CQ?xOFf^lgjH@KDIMf(NJU8mD_9$6|tR3 zPhH^fyrfj=_QV`^dr}Z|x;j(b-IzWUX{>6UIWsWZEXdz1w>eEFr>$Jro0_^;YH+gt z7m3fqI~rl0K^p0znFb*mF$r3y!%W>NREJe7l~rqkk#x$X4J+-D$>ylrC*mZD2E@J! zTDS0`j^4t?G_45xPT4~Z&5c3FDWCk3ttDKbcKNgJs(7S!OH0$zyq{LNC!V59=gu#5 z>{;2W)z+`Ps^{?hIlJmB8bWqlT2Vh}4|~1#owJq<9!_rv)dVz}#N3rl*R5C#;;;0X z@CPx0D1(c6a>G`r94HE{kK#2XI#bC^x+N4Z2O$M}!9Q&(H7lO~QxnT#atop?~M6H<*6XLUNk6EEaP z^JDnU;TJ{bdLx1HT*hKBN+ETaFJd&LwFX4v#7QZGaHf#Wzu)jaJp*Za_H8GX?I(ZY4OQz#vUz{Xvezz(BIYNs}hyE>zooS2|iH>7zsjjuZV zQ@?ydIweVB+&}T=_&7Z?E{*!f=}QIqjd5vA8W&CvOVY3;8_*7ChV!|mJ0!nfI+7U6 z<;LlZBQ8mD+$p~{sWX@?s6%XE6SE-@M@>!A0_eds8;CifK{Saz>UKI@ZfAp#p_&jz zK{S*MHG@iY(IC*0>7Yp$o2_<-7TcV_Cbvm&xj{7|IROJFYQmX0oaLl74Le%5u2`N- zXL;9ij!D!Di^CqFIHVu(!(_)-A5G1!{zlKX%3b z!Rk=LR;`+`Wpi#Tt!W7}h&v>ID!FWE%c47XdPT7^qVr#L!;Kfua#!_Va{aYi{5pG$ zQLK6DM_-?KTlcWhMpY`E@nM_cI&V1az0RPcP04y+NFyy>y(|z9_=omiQKzo)#dj=~ zf-BM#C#7)SA`^83MFWDL$!t>)`!t4=yNFtooZvi5SXw*ou2+F)aaR9 zVd@@FqTREI;Vea~r&}6m(1e78P*m$?6i}jUj5AT`&bm1XbY~$c^Ay55i^kvOTypWJ-Mw>{^+TXoC&&CT zw3!_2zpJr-*aw{1KF4U`mYE3GrGRzxvQv}@!!Ouu#gAfX$`?MOj!>0x< zhwujj%{GY2xuS-h&rW09p0Rh9?vUYj0H&79OiiNGhf(0eRk$f8u}_5o!5BY?7U*Nj zNkxk-Y&CftR)?qTKs0RB>!`8Zska-dY-U?s!c$xA4OeQwm0B0C+qtVPll4p9c&(?3 z3gxZ}Q>8&~s;lreL4NO89_z32TFe@?%Un}#)_9DPS8t(Z7M;s(q-Nu9O*LUlwZpEn z>9y`Eslr@tx0-?v%Rhe;L;^JBGg_+E+T1pipt~tjXEqx(dW+t!cl+$M)mFPRTv_Ff zB)pQpW%sU~>le3MEtG0Bl@U*MttC)ZX>{xLCiz1R>;;RreR+Jir77Lm?D07KmQcA> z?~zOu8hx3)+~$?6j*#iMCNnKFx}7?s#Vu94wI)^=x9}JFJ@nn1EM`27qv+tTf|m(g z3S2vsrcpP9AzD>*qb1QhQAS#(x&b>%CuQ6)6<|oYOe(ixDloGxCuTDu)H<81=dK6^ z!DTQ>F#;HQK^I0_l)GVE1n~*8&e$CwY!!=5sHVY_v@I|HJbtpay4+Z4s&MHkt@1?U zm6AW3Y0tE^q=)OGzADy62Cu_fSzTMvP#?5ZQKQ{uGgF=37>*t&^VscnkI8ED)dqad z@-khyvD$1f8nk+w&R$+2g=ow>T! zCRI3WHoeAZHrGXN(g`MXzg8>1t#?U|a+B6zG@7dodR>`OhXH9cqt`;wYOhUiE7NPd z2KJeamWRwiyT{YmoNh|3i!X2YTA+Zr-SZH*iWW>F#r&3_RANX>W$h56c`-$usdP&O z(+ifI)~QSl!KpQgpk3fE*(m0V6Ld5bY!F&NKk3`8ec$Q+c3=8(amh|-#UAH zY>r?+U+&2Vt<_Hb-atY!n|+DuNQeCvt7nb5D(bR&?d95XJ$>OG!8Gxwd#GRci(lw; zHu;kFKlja5X-sNum$RbWUE{T=9R64XMtUf4iAFR=+)>F|Zgp3Bbg)(?>+=KDM+57{ zz+(S88Wpo{oe+gGz%P3vz9m;AzTWsO{l4s{wz&MaeCS{>$&QHHiB|<`51bKdoMaf3u5Y2e${woK&wZ!P+`ia?#Xw>_>6dbD85FqBbhBZ4S$XA z#z*l>_$d$ZcfwmevHGF7Enk2HF68LSUGbq|GK0q0#IA{Wr3*Ty2jCyMTbQ@X@oHH?T1T6MVdS?Vf{Mms(+V1ko(cN9*V=SC>u|TfPuaCu0&P{@ z!fBmtZMQU&e~MjyUw2h&&|;gqx5BrWM`QBdY$k(EHmI2MOSyAL+n&cIi&WjQsd>*8 zdo~WVLk3rOY)tMEk6EP0_q1NQJGrr=T9VoaHtyNKyLl7#r`nO}=Xw_Vpb^MmcI##n zRiv;0@z9L2Lr#NlMWW4$<_77-S<}CMs#L;?rmao1v3_~d<26>!3NBl}Z5?}KphhD# zcsxNGtgCONuK!ZVD|qR}VVq~ING^}9+t#>#Rxs(U#2Z}Ew5<`ht;6*mk745FkJn_f zhP*$~52qnFSSBM0Cv%iDONWnUVKT!-$Qfglp6R=+xA(Gx?B(C%^M>Zdm6ylICy(KS z@%ZGy_`Dk?#|mpJC%gub0O$+oC`K{R%TS7n{hp$*5x{axq8f@#QG@gh^SgC)O#1zl z9XPBSVuB@m@W?G2)57V7*u)?CzIbfPKY0EEd0tN;C0H60+OCUkorC>}Kl1%^cGNM9 z-Zo@F&0|?I+-!uE6iBB)oTnN9_F@Pm2tBJDOvCD)`cR_{H86z_BPQu`zy=rjrX>@Y z+Ts2(k&(xfM@${P?ZIGsZ+l>@P^bz9uoo;SuQ=FYdd$=j5R&qtU|SG>qgCuRNblua z#U5ld^z5IfE)C*7!s)wkSLFibvc9%psIoGI`8IWVs5KaD4e?h@i*t2PC{~Ca`B{kK zgxwIzQ7(d+n+(%Epk^Bpcunkr0StUuQV5o(hg3Vu3Z4&5cZ@xEiRpLr{WBjUkU#>5HoscYy z_;b81bAFiU!nmVSYm#attKbUQCce-|7s_AkjbC*YZMrhiC%-@!_9f6hoEPkb?$To} z_*qUFRa6r*sIt(Z%xnuendO%45Zp}GxnX4pmGPBB@ge-JjIU%ej~M}wb5KL$`GVX( zF3+Pc(m%vk;$wauy*~#D$xH>bS{_FDm^|;C+)|5bCg&VC_&#J`#%W+p|z#rth8O*d|}O zgf5ex8-T}`jZdzlSY6s!KH{{x#ArJ8e^(n=KT2gp#rYY98}x$8Tzl<*Tb+>+RHw;U z<5{pqsm?HJ6TdBf;QvW&(noT&87r^N8%yNR)5Qbv0|%zprHbYGO{+^N?F@XZ`2)?mqgpr|M*aSg!pP)yl)W95as|OI!A~bi1^mcIUVAMc z-@7-iL|$+Pv`T?}Iwp-43JU#S}p-8e??^e_%yBEi zV+$<-&!`e{8cBbVKJCxTJ6yN^=rQ$#^OA z6)DUWUW@<@1T{{p#)U9NCT(q?ig#z{IggIbTSLQM;j|YX!FLJ;;Wz|02I85pSDxps zsqxa6JYi5-w3%WD3CAaSF-9_0l7NU6%w~0Muhg#h znAI+iSwmfoW~m{j3w=IZ8z0C8q=t|!xb)I%+r%wh>^5J%@YWM=R{3aSV&TBr#YZ+u z_1lj=dOQ7I{D9P3t7)FuYBTTF;;tsO(|dPgw5~JN(EX{t1?B*xC-&1|5Rk{| z(R50L*{Dv3p_}Q6tZ~`J%Z%Ch99=%IG7iLNdgctw@yv`57*+XP`J8b?PP0#_XC;%f z)Z@7(m{#{AS`daGG27D9)55OHdNWn#Iw<8cD#AEN;SKA zSZMXihg$w)-mA3hgDLLwbL1EBdUXHq)&s^bYGI8)ko>PIqRxH1BEmL#Io&w%>*`<= zeJPtlMOqWHb@`l1s+wLAb!T2TJE2r0Ia{rsom@-vE%G1xe@R!!S2)V)lauSpg+B{_ zR&1JTwtfIy2NY94Bm$EU(FyFkvaE9edQt0bSM}>U_ujI9URm4b$l9eXn)-#S7pFAQ z_gSz;BwwfeTngxED$1fjm;L54h_M&t z2fj0TAASyjKM0@72H~_kFm=5cpS1glT_>brGkg`!j;#Fc=bn3xe#GMB^0yB?_x$rX zebU#GP|hcqm1k(1{Dyo&Ot4pEWGXyE_>=G_^bv0}$UP9&dhQx*tHdF3BVS7=?Y?ejDqDtI=L}S60 zSEOB*w>#1o&rO71p= zc+f&G4Ntnn;1-)a7f-%ma^BC@5ryIXh1k~mgvs(HTD$9_#r5iB zeEw7Ze6~5TMQ}4g{l>hbOi)ja^#poKr}$T4x!ThKjTVFg$vTlJUSPvBM@0kdK#XxV zmsq(>0y@$MH9J!$F078o89Hpy$)n7m7anLEa*Mw98vJGxuLnQK3>)iHC1BX-WGCtf4&1sf*FwwP)m zX4}BN*G{z&Cb?MMw)KX>X77s7EuVe%;DYYUjy`<2X}Iy!erfA9SFMAr?AbR^>0i82q!2>g$G>^%KC{JT7(MXMa|gBE8m8rQnI~uNTDn(EMCBLY6p0GGvg0pk z8*YnVD_(w}aX&qXwCXsZ6<4jRDQYP&uRi%bCkjgrxnUd+=z5%j)-cwywK$U7P$Mt*`A{JhPTQAWWPU{IsGXR<~`>w)*-C4}DAY zUmrVgOa1lN*W;DGUyu8Wn|3&zVu!eGvFfh+L#lLpXGV=1s}^q-Iz^{*=Q(*Up{0%KXo>#5#Tr%FbmxvmGaMXDD;RqWSHtHK5(_v?tOk%RJ2r;DbGbMZ zN#XgzXnu5*<#h3KG5-m>CyRqkE0-FX6QT44Sv~X&GG#9;8{9aDklFL`dsUpj7t0U2 zKw?b0rF;k}gOg2luF5Dp>U?st!O@J92*aPBtUhhm2ARR7-Pl&YdMxO%mNp%BIb>akB?6JNsfVY@&4plJ@7v9 zB4rhCSUMD*Dj_qLfr3QaFuLE6@-Sz{v2Np>H)(uaH2Rf+1wR+8vB@zu@%uu7**#Qg z;H-E#TXk+%I2t6fPe9I!n?fils*DNh^eO4oBOUdZ?OQJSWAbQ%&deeK!oF+XoH_Hd zadGDIROUw4{tCzQrudQ z;>KKOETQh)&Uv|c45JP{AU0EB1GBzNiO{*2cxmOAP3CcBp5;c7{>HM&ful^m2&a_^ zc=k(l2>!U25H9ggEQSo89FGqpKeiH4k6yHmlKGq~_k=$A15QWONJ+0RnkH(Kq{fWoaA%FV7m-}b;<=P{)CbM2&6Wx8sgEL2#)J4v| zWA+DAnYMg>{++1}IaOJ+tFJaE6mHg+G zY&1dp!k@&9D|ae_piZPwfF5q7={yWEH)Obkai&F1pM=~lH*+wVnF*_bcZsD`vMt<; z=iDG}hyh{#ao>%F!TawYEZpe3DNy0E34*q%(6Y>N@4b#?Erq7){%X8kY7gtnSJhO0 zYOrv_{^$&&&#R6!1jI_W%}}4P%qk=<-#yfwu;Bti4wncWoVVYJZxV& z?PmAhtGv|;g3VPCxJkO9F!-57jlt%w6ax(rwby4^xT^j6sIzX(<-6xv>sDQQ@uqx! zlCwY9YwpNGh8=kkwJQ9lPVi^-GB^lCPc~9}4 znHVVmC82F7%o`|j+u6Z9ZDoJ?iN$Qi2K*)rI08q?v8l6I&;*Ga`&r68`@@;+1nk1i zGC7u*?zh4(&7Q$X5Fc@KM(ToZgG~!HypY(1gA%!9a84_(N+gkqJv= z2*SO0<`dhJ%P-k7giuJnvu)GXi63olYRM&Hhr-Q+E#dBpvDk!-`d^HM!2*zoR^C;Y zHyX;UErUsM=e&4Z3*snSl=yybxb5zRGp}kaG|os5HhU|cj|30#0Ts(;vrXrz*2F zGIQ0YRecdWajeRdUSXG9dSA<|g|pHoIP+cAH&(%K0;h)JABiM|RlA6;yqKP ziC$`Lowp)US=qd*FB+b?GF4fbSP@L2W$gWsH=WGL;gix)_IGc4!4OX%s!sLAp^>i7IRi3HBJpQME%!?}zQ?V z%p;Q4I^q2kndC=qILwL*PZ92W6It{F2vWT-cOko8ermA3VOhK()6?_DrrS%MuEKXcMO@z@l<7E+@VSIy|Url)Jg)8YE>I%E2y@+0*}^)csn7hb6x zAAI_p>|o_**>PUQBYdvp+LYoTgr7u&k?C~j5!%N*pH?!{7y|Ud-c!9UKixnOT3EP-+i+s`Zc@ETRQZFkfWBhN)6~EnF>%Q^Fb*S+I@K>9n%) z1K}tqXb4zzC!0>+hrD=OpCy6_PKo@~713~?iBQw{o#n&rmFCU(QJ!4fkptpGJO zIAT4a8b?LYVhR4tWTMGrPmd$A#Nnx-)QVL&w5$H&o-W}>sGa-_ZDlpZQjK#pgczi4 zW4TekugYdy)82l)sm9Te7^Oznej2Lq+O0G)XEfM|`f{DiAUSnw-ZE75Cu;j|4^M}x838DgGB zQN%0;Y1LJ^;_;IU zDU=KVcL+Cy;emx!?B2ppa9b=4qJQoDMs{q|rh;r3Ltr1Ch_+GjLwquEM`!0No%FAp zHo+j>E8o_chiISlzp*){<(8=8ZBHw<4910c48{pq%l-mw#S)mE+vRuJnnhZ_9cBy2 z46QetC-2dN@zuiO>)~idNrvaFUW*hmw(ObxA_0@{z~?P!SquWK9}X-SWg5o*wahOU zLFfm}CK81K$Zp}pM+neog^oa#K2#miHk4^?dVi?rqE?ZrHCQ|##cjw@w>s5oYkcOA z*Wos1D7-RZ|CRlPjLIj~2aVA#o7q@p%LiTczCP`3+C|kSs>(D=7RPYDsb+0;#f+Nn z)`mn?qRF`Qs$R3h>GMTGbzz&kA{eNxsSnmQ-|@s^SCty;L9SlaH&jl)=!q@yRj*H) zS|e>&wD_vku~pyd-*>pIcYdv(c3kA|?_YHh8|Iv^UWvBRaK6e?gi~Q9Q#d7FiLoFb ziqlW9zo}iZkYLj)Az$X2+L^k~EmQZgvxH-qvwV|}fnV;A%U8tZz2|lXZ=Bg}aeCL; zzfbK=-KPS6XI>tdFf@gGx!K)>(%=3br3U;>{Q4hqR6dPAap~Xw7GaWT0*`WyQk#65 z$-RF};ECfqp*?+EE;Dfq_oE{40xq}Wii1=>C;86VICd78LiQY!eAPkuiVPEY-5R3| zi3TAUy+HI$j{$%6zT}NdqDXQ^0*lMMk_o+lk7*^{3ySFb*#!aN({F@7Kci`IYEHg| zvKp2AL4s@+JJKDaOeSmLu|g@GC^p<|YWS|8IEIDieNXykOY%{a4aqUoka5A<{f#UA zdtXl2KXK3Y4_s-wqu{15MMwN;#*~ClW^@Hz+V$#ZXsa$W$&1hH13RRng`uNImlSUC zJQq37+zVAozN_#Ku3wTY#Bn=Zzr>E~r`_&XM;8}v_Ds9Q^U96o{`0(kJU3B8poI(BkO z3r-efz(iL^oe0)r6a_GPrXmf_sHPeV8xd^43Y|cDY+Nn>3e)<1*PA*|n9&DloKrb? zhLHf5SK>I&*b7+u3*}O1Q?o^Vx|8ll!!D0>3QK#(^U^pn*w~p!(+(!=o_yZsH)&rQ z8=I74!k?fYE7R&unS7e2Xpa!Z64R&w09QaxKf6#rWcs zAy?_`3RfAWf#~kWsNE6+~Ze|kC%0>x@c{;etcY|_he(6)_qW` z$AY@RtX#cD5NJibJ=f+`#5|LW@&%vJ`N5;cyrVA%2AA;`4b7R?LCSc=&?gEra@F`DU!-R>sZY*I>_OfPF7G#i@0;IE$VfsK52r_@c|C_IO32*B)Nj zghy*s&{^4R^b1wJjas{5W?~(}*)J=_@lE<1MTffyPBBYlF{ITVqF&(*|>Aqv)qmm}t=_`x(MWxnP4DR!tLtpT-J}NhM^u*+?R-?}6 z^0J=L)ihu*bH4r|#!&z^eI6@|;T>jNNQ*Q(wm?xCD3Dsy29(I6nfSv#3exNL0|dhJ@D{ zsVrA%(DxRTcuz%@H|`P4$|!RRkL0t_%O(d_<06|uV8IxKzP=Q-i)#4|O~@N<4EW+{ z+A@SjqPeNTm1y@jO`LXnZT>oE6^5(Z)gqWIm5CPYu~GK$@Z_jUENY2YOB1_U+$YD{ z26OD$b8WMMJz?~Jzis%uQxZM@>%?OXWrwBAT9GyE|6xNl1Y8xArqK+xnp%(V!e$G( zwKgjo6Z*1nL*oCq_1GMBwM)vtUpwTTHc2O&^E+-#XP2RtkL#&1_blYT0TPw3>4vq9 z6@Wabie)ugJm@8qg$qP<+p%1mW<%gnDV8n$%4h0+tEf4oAJbJshw1u;t*MqTwjF6Z z^2N)4CVy(j=K?SOaCzYY*orJd>X+Z$_3*^WpU~|)SFaDtCx+<$G5MZ9!Y82oPaKf8 zr^K(Zr@1PN;Wg|z1S}AO=WQTaM$y!4-8?!5Q^E`(kGu!i2$&T72}u$p0v>XpT%lp& zpRM^)elatcYKKFfZL;Y|7Khn`4VYz;Vh5on;8M-t4DsT&1syx=W{(x?t?jep?Y^3{ zwp`G;9X0jtgNIxzB08$qR#gXmZHc*Nt3|YVZ0+$HpUo>;%Zx^qN-c;Ez1wMYYMf>_ z5-8ObJ30s2bQ+UgYw<|+&9@(Js`q=WT6?u<>|1?wL5D4nc?fHJjSp2cSd%)tC)u%n zZiiIaUZv8Rd}1&trmH(VQsu1By7r{kp=-9q+>au-Yg}P4lvi4UqNB_ps>}4{1_KNs zy+>PZv}?-r=0v@#ec|1!`)U^l%_^!lNuf}{Y@jOh5{Tx>Sln+Ro44Z)ch@=?)p4GiBWaBlX4e@9z)}o3FTj`*b8*ACwQ$`dikB`uWF02M&d@CBE ze?GVmkBmyxKeWNBD~tFmT@Zm9Rk^9$psU7XUR-vwUgv9;f~v}`={YT0Dq{Vx$zD+v zNY3x*@mE*aO?sUNOt~^tosG>f>&mUx%?~aY*yFG85UifP`ws5hIQ)sApwsFHbt=(N zZqggdy>@&Fo*hF?@wQl?q9(yhZ_^BmUA4(aF)a6pEv>HKFnX0QjhMhYN-l}SoT0qcM1-(kCQQs1( ziy4f9I~g^=s>Y+iR2nr^>&ws=YC~&4uXh@C;-D$+tbu| zkIFcr`>Ck<4;3}Pr!8~0igvrs(CV6DtIutcDvZVvqv*Z2=DG!)*LV59;y)#IEiBZC z$1b?rd$@o0@9isGi-yK5=B9?4%6v}ptE#);knPU-Pi-0$C>`81w8*uhJ>RfC(bes( z8K1Szvb48<_3G6dms-}%nzDo0`j`r^dW1A7TiD_bnFNGmn9qy_nme$tC>)BiBwd!y z!BQPU2oKQxH{KQ>7>&)Yub&;0q$r5y=;8#;eKt>P;$t@Wv6$~_JU1p>abx^IVu04q zUOuNjpIMk)93RiyN8{`S`c7J2&$42sd=STwcc{-5zPlPh29jR##7)sA?7Ph~V|~t5sEUZ&fS3RlbHkCconK(w@o;^MVvp>oeqyln;hOwGzatDqFex#5` zs>YWJ)AMPB#ftlPFI&VaBqyFjVhFRSln^9Jf*;}dWd1D6E@5k-2%a4RM=FOB_n+LS zZEWch(lYo)OekACLXQ2gTb=jSUf2g|aQQCwp9|RCupk#afx<3i%c-L9(W|HJi_`X} z9ghj{?4nS^h2deOk{o6AmDuvjcc#`%o%*kb@~m9qG3G9XxhOxQw33uB@C8}$c`7~Y zM-MA2wD8aYJn)YD;EstGWBg!PF>|4TsXDWuC^nW9sKq1G;7fyGjb`vp2SW@oONj0y zgoLtT;vLLee5}mp_7AR!)%wM{I?-PnTQlfyFqcuY&rSEzy>7Ea=`4d^9+h9Vxb%9L zr6S*(uUNjkB8QE&+(p&GSA7{*AY`*vtLo}h)mB?55YPE??Ql08p?h7G>70K~3^$-N zEz$Z!ENZFndf5%|YH>spE_CPA9QqRSErOU61Pe_RwtqoFuL(v0ONY)d7Y}lw#ra*a z+RmPD{$#W@C!IP}fB4DAuj^CIyZOl{ZpB)Lul)SYPsCry>3*}|tFJ5?Tw~ZXd=&XL zbJtZh?0Vpt`?g0yTjy18y4E>#Z{mgDkGsy7;Zx#0n4QQcfoC&{smQ(xuT~^1BCA9h z5h-g_(8I%-#~Qc-kcYeT1GYAT&$h zjco%4gST8m%WZmxw_N{V%W6qizJ0sX?4%mq0v6w5uGGgLmk&Mu_!Amr23j08zei`) zi1ML_(yFVe$zEwOIOWeFXn#Jg!d6pvl5S-k6=neQi?Bve7Vj~42|OhDLlIfdH;W}B zI~)SRi4>8jMw`}Pr2~TE8IWrPV=kInQm*)ZbY z<9gxNP_k}ub=<#v^)mlIuvjIZho|X!sS6GJtm|m)7qNHHHM^|Z%5s6cmZ~!Ot7Gyf z%MM*%{!mRhEvxV){GpKl7(yCT`hodx@jNu!qm7lcx+?Y=`o+rF-y18x@C1DtQ`$>^?sCe_^1J?*7n&^#a+U=P z%>sRKvQMAEx;*B)X=eYIgIWHpzm%y6?b{&cU}Z4ogc-?3w&E4QbM&xMFdcHE`-O`B z11$?B$?2HYy=K*>EvtIAv}t223!m)w<#*L~TCHAhZ`Whb%vrobw|%hnx;nO0MSQw! zMrPrTZ5LgE?|HVG zWy;6;EMn}9h;bl=1JQYuEKga9O>E>fu%fc^q8bQ!uthU&Wf2B4QNv8oSz&C`cUBL~ zZ)g%a4WZDS{?|9G@1H+UU!KVx-?Cxls*ZTW?T_BOt2~L5jBVbqWZ6b4)W?^^dlu;OS3UShVHTx7S`vSEMdIQ-+-dSW zEcxfSk4CYFg|S2^f*v84q}rCqrAavfiMdENY%KfBGaY-G*K zfhAitm|?V@6!Rku3Tyx{Z$+T(7gD*d|S*?oJJ%CG=(%0F8!7wltL03Zj z0COU&4X|#BRMl&#UsHoe0y%E78l|HS zhoC99czft;*=nP!+~FuIub(OBa#oYQ{G5*3iGIR-2!noMre(uyR-hpu8!~xO4WE7p z^ASWR3%S9Dp0Xel>ECXwMf*^8Nh^JI4q9HT(Q3;qv4)tXOj|D2(sFmbZ{dC1=BP$#x6CU$xwOa7ROr2w8%~KWfdLR9?blLyK z+nd0*Rh{X>IrnPc7i+U*ZMG!alDx^byd+ZM?6I@&2{G{^CypK4c*zE)Ktk9C!qNhT zP?j!0C}pS9#!O*o3$z8g^Dm*(b~;nqX-nH_hZZ-!{hs$+$##IwbUMG^=S8}@y34uu zp7Wk}dEVz;sa9DG9-qnVHkeH-#{#$~@|-$=IdwJFBq0S7PYU{St%}rXEIB;MykKq42NM!z2qyfNG5^B#tNet%$6pwvn`LEI=v6vBB9we+{%9U#=4P z;o%!qIaFMD;BE+X7CJFItSW&&O)H9`#smTymC9zZ8VqU;R%msV=@P66dEh%_Dvdc1 zFl$sy@O!K_)Uqu}SL)ukpHap4gA5$AbJjeBUgCN(<+LZ~F<1gA7$Y;u4$4)WQHY^4L60 z{QyU$Ga?D@6uETqwaTT&Q3M715P0y=aE_g|}Gzl;uFj@)b+^ znwgSq(H0>9>n{t{p^T2uclt?3mS4d@y1XBETUsFhan4LJrOQ24LN242i0xY5Eor zA{SgySRvk;%Ww=}Cg;|gH}!6^XiN6LIO(2r3n{!zzPP_cYuT9FXwlA`c2rjyPaBlb zU$0*)wXbE@XD0g{H5JCwdNQ;CKbX$ew6xS@5#Kl5Q&)EnmB#W5{tyscCKkIjOT1o;nO?&P>YZSn6GH(m^PaYY7Apa}>RSO&bI47lp#R+xr&n zbxr6sJ2Y0csyAE{4wP3h7PHl7S4TVAKZGrko5q6I(ZtG~N#ULxlzG~=7r9Ac|yBkUF%r+FVtI$v$Fyz-# z*VrKZAW+J@F0-{aTwNL{Peu`PUL9S#WJx5(k`G<4*Ys-i?Cbsw@m_a@PW4w>(R&vf zsn6H?=KYoKC85`dTs*~Xcd|c03j#y5lX;NWoF$|g=r5&R3HBN38N`&yh?G9w1oB4o?$|3dz-%;J&~NZKgkT(1Lz4x1SmJ8rYZ! z_KaXpEB=wwHAh|{yhF&}X^hbIdlo++_L+Fc=wP9D)UT&i2)Ll z2UAJkfCd2D6V7f((o*XE^sSnpzydM%rX1X1D~}>_%5xkm_YD%}6@5|2mm0vJIpv8b zU2wi|ayblG{=QgH=oA{4(Qk5U#FU6AHC%;)LR4lan`3aGg3bYe0<+$3(u&Fy=*Z#T zR=}AknDv5^CRKP6g_K@tDstL2MzxaZMR9x4+3Rgem?dYk%qlA3$J4vDDwWQq#g{4t zYQ+M-Bj~g$<*IPv1yNzK>$EPdQl$f*r9spPN+t*jwN@jtazRvK?gkyR5+}2p)jGu1 zRYtwuW+vTn4u?$sBs^E(!DpXq7A}(4cs}i8GaD~_t_Ax|=FO9RB@3u8P{v&0AA+%z zXX-u9`SUpIA=JoZHVd#7OfG_4A-9A2iH2S<9_JsgkV}J!gH%<@{Ut~n8KniXMS7pd zRtvThAWA;)k2A_Nib(jC7xH@ZONf<_Pp^?@T@YghEbyq@K@b`tIRtw&4Xj+0It_Xg z6fN~EAO~G5&%GclT*%f-Pb_q=D{rkv5Ttc6&<$IUKd?34{_9^J*>Fe83jfk&t*h%U zdaJx^N24mav2$yqs(gdHr9P-Au5C_*M7MZUVwW%8lLI8WfcqI=6nuqVUwVV0RA=Lbs6X+=u}Y1_9n00Jbq3 z@OH~l2C>h4;NGY2Jz&n7vx_de`1==Mv?yy9Qaes<+<0oofo)rBYHMq@ZaW~~AK`c6 z4e(Ed;Fn9&(IC9IR$@=tc?OCr4Qt4$)|28QxS%@WeqjEdy+6XIOLx}^%SM-C4)}8T z%jH7s2TEn#76>f=efJ?6U%O?eGgYFG*Olll_bpo#RRo&bS|UoHxVSXNmX0o4wNSc* zom#l6Zg(|+8^EhKCZy-s(nMq3w)&H1zF$1mR-`OxUbZkIl%(5QXXO;(H7QSF0gYh_ zLSit>xZa2is4oGR1R+t9Sx#F4y#Sume5x4#ny$*k1 zL1TyWedrACk#7O9t1ZIW+5R){3pR&822YJ>J89q$e_$3JvEwzKy)@iSW(g;Z& zfnr$-@ZF8acPob5FA>F@KXt2N&AD^WK0ABe zZg_V&tCBqeA9#eUcS=5TA%+3nIvr73m6M`aSt%XY)~#GwZ_`~_{C$CyHB@P&w}h|F zGzv?;ADVeP)Kl6}WUF6U778EzhFasT(D;gPonl{mC2!-o#42zy0#_D+qeF#L0BTX- zmM7nbDux#XySM?@=yau1YVbN?E|S@L(L>-{O*_-B2xS?h8#x?HxGCOU*D|=dTp`x( zy?lAcqQzxVw|jHlGQkG8MmiCRCjBXmvAIsKa|Rj$m+srJc+oN@2HSR4@7ZLK{@7fW zHu<*(ie27+15ig%zUg4|@+-OIEEsVAJFpyi)-6eiSs3i4rJXE!@cJE+$ z?7Gd>JC}wOig@xD?JZ45JkB-w`}uSD81wT7sZE7sIPvG_-E;rK;}~D)+xdHA56L#85bhv5n=6b4O|0%91@Uqno+L8(cinSTXsO1SwXSnZZEL8aB0 zD&5uYsC$P_YqL})E5jfmUiw+R&TUp%DiW1en^w2e6?F?=J$W*@e6f$&?PZaovgYDC zPr5ChPAB4JA%Ci>x;_vt>s}_kqc?=3Hg~cr6`D=XyvegQm5jlpi z-GD0wXCl%EI6@HfQbWi^$_-#-yadCJ4D&dyz19JwreS7MIF9ThIo)Y8I1OYQdqy)^ zHL0CG+ZoLB?r@z{2d`5E$5&F{R02j2u`8_+NDF$k%dn^roK6IC3JGp@+*~6ala5uJ z*zsk^pLiJPe756o@~*oQz0!3(iM#Gj>|>XSXQtgVFBDHt7YkYU^vqX&$o}ixlTZCn zGW-jw@Wk&Cf^5*<1df_+eg^Qj|5 zILdX>!<;tm^d!+|vS-f!9s=_Z$oq|hO_&&k*NE36{?rZ@Ip8;7;N~&^L87*s&iA*^ zi1+ds9?T~@3_QdJ5FoG<$RD~8JdfxGghNfcIzRWj#>U@$F7Vs0e8qYCw6HgM@L+Oq zFhPI9>f67o3AKKB!L>u)QQQ z0PKaYS3QUAop-W1oG;MCUzJh5*~Rl=zM1^l2O4ygsDi0l+c*j48*Ss+2JQLp&bC4B zOJ{_q@Ej>~3ejA6T=HC6t|%sD)SYmWH4uxyAyyiK)7OFC6{-WILtLZ}fou8C`itH@{snb7_#z7-Ui7l4^$O^S3OQjfa%W2+(;3B+* zET8|o$`e#~Vl(3Yy9qOgXN@yn_)i8AA}^(6d{G9RtF)n2aFnLxMf#X>G^A*&REXBi zoBC-tS&av14)PI!ler%xgz%gY$_;^40K!842bVLt5sbk+Q6}E=x<0NPDWRB9&gOq< zJ&s3Nr1>9y2yRBc2GtIB3>+oIq&|u26u2dY`12g+Wj?EQzP_Tw1rSP?hBgwxW-X9O z91!*?Kd@v#@R;YS;+?Es`G=}y@Vpdm+sYS4E#pnV`SblyT!b6|;%wf7(SQjaK~-*j zKwBhDk|S0Cpn$R?S4EIfGU!ZmMZxPBGxN2J#HP^bzJgDH9 zjIK}r(HldKO7xH3XcW;U;c9Pb>mtUKO0z8h^be3g0h^gH(~DY5y&VJBtY01QdIPK1 zUo#+$YK)P}&4CuTU9DE&N3FKkWjDnms5@h8-q<|*m%lf^%*)ycaMV1j2^4%G?w=u= z3k0=*zd*bQHV7GE6xpCy2N6n=>vl?bEb9+RFRzeZhvcQsa&387@J3B~+ii*40;^Zn zI}FKCnI{A!ADq(-0B1VN;n$I#F(FZ9X2*)G0Gk*2yVnUtmilbgdu#He4y~tgYUW>o*knz?8;bvy?mUc2@YU ztPBt}_arvJAG20vm|B@rsxv9?ETW>qcMCTAsAq_2=^TJVYdJRdU*aUITq zDVrux$VLtt=I>;By5{*Y#3W?hDTqHVA0VvYT0(BDEZqz5NJYz@|1P9lg0ku8=lpgt zF$t9#O7%RMl0=Ur4np7xxCW_=kOoO)3R#R)Sa{Y5QgYP|LNVJ{;g+tHu5?9NpJ6)u z{i)WOCuy)Cj^A{7R!r_Kk#_m}`~B=QC3~|OV^f`78r{bBZQd+>d>iWv-*35>&MVuJ zHv?B3hEI1n&KhfA4OOB#3SAwgBQc?J%p+MdA}Z@~yg7Qb+73y@A*S_kz3^BRxeuW2 z-?&P8jhVcqwpinryxyN0tz~6aBdf0vRj6p=bEqV+i|CAMy(P0mp)%-I%74}Am>D@L zp@2zi`Yltvs9<&L?BQYxhD5({*0O^*y{~t7Kas|*3l#{v zHo-~~(tAe|Eco{jfv_co-Ov5KEFgvcC_DiwH6aoQD<<{gF0Ru}*o}Ohcy(xZ|KUE?`P>i)Vm|)(B!2GG7`-<)= z@*zE_SE&&P2_&ilH?wl@r?Eo%*&{{p#FP|0^14#3 zR=z&_{0Cs;`Ut;(EKkIwkcbSoJ`tHhz|up4C{EKeLT(x!68&1a-wk>#0Prqxz#3iR ze9BmnS{MkvlF7Uh473(E7C+@&91H4n7M(%*i`p14d+@N`9<$$s3Mz03TMTeytO@x` zszO#u=s~fNmXZ)#hF)*AA+x}!*D0kn3ccRwjXLZalaa=v9AEwg;#FyiL%?530-xGQ zknd_h=rTe&gwFxw38TgM4PiQkDF=O@ToGx&Z5l8qeMlJ-@_>TiA1!j(O(n&mx3b8l z#c8E)E0BI=cf^XRNvzps00w8;Y6&-^x!-lvq}(+tjB2%UMU6YZXsR&LJz4B}%IL5b z=`5Iz0%h!NAKJW6LRqFU1=a*i%iVr;5wn*^8E1@SFFlyKWJXxzgujdqa ze<))5cQgMe;kmY>OzYo8`*Wfe1dwmnW?%UGIe&!K;;H(x#cZJ@U77EHh?oK81;4%> zMlrgRmHny)452gU*g0{ac*a)D4%bU(grm}nbI&T z!Lh9AC-uv}zPM$xQe+C{CU(c|%Qw`-8e)OY)RXY0879$$dx9v? zd@Jaj?6WYysD74+)i^!J_sD-ScQ5hWXutQ_ucWA>97-t#`H8c4zWs{IR#0#Vl6oPF z9NLIXU9xI9PFRj-kRQs1ULlt187xmCsj#QKD00>y{Ocu|@zo1gKlw_aYUSdI-TogV zK7Cl~Vhz&oGp>iFe`fzEz2(a0#~Ri7bRe2RR<4}+1VtLZvoktamFH;MdBlWc-|dhN z04oVt5=I>E<6lj*_+smy$bu|K=Y0$ zn5|m9L0cAgnLWsURT!*VtKaA~6#K0e0aLNTYYIjy%cYk<4cpg-zDFP(pa^xIrTd)g#4-+Z;;)swV2PBOLgg4xF ztRf63%otdFMJhW`pBSAkT0;yhYP%YU%b2|iW;7f+NCiP50zOo$03%VSTo~SGS$%C1 zbX3jB+WIyYFHa&JBakSsWdA}-!DK8RuS(W7H1Lhy6YU!98_hM+XKI_@DAGIJWb1Wl z4GNV-YqaTXN^9ffmZqoE!VSwVuT3<6?Ea56Cu%NV*0e8{EZMkiqdyVb_m>5Uzy^77 zWFLDzS#$Zdm)G!3-wOLQDyhUXIOt(N1%;HU|>UMW2w@q4F7Q6IAUmTUK6k zV3DFecjBh2_9WF=-R8R=JzkNyxe36hNPXEo#jZpsToy{Wz4tJDrvE9pT_!WY`QwMj zc>g;u)B?uqTOh?3J~v+90#bw^LiA6bCyD`+iyf3ZDXI}njwN#a5}+}iUq;kxAnfJLzx1-|?^53n z&oKxH2ssA-E*`&pEZHP-u1N+=HbR%O0|WLwBw`-38($Bs84otNE%^lrKf(u zZVrbZJSjcdw)ExvPaEEsF1_J~)netT>h0d@hH7t{P}RP@y-L9D=N}9Sj&OM9mtpp8 z9A)O0p{4BGFaJVX-?nsV+fw1~r7tgiiM8cr?*#Os5chr)dMia!4;(n8ej?ofQw(q^ zBml{OiUwb_VJKcUaQF7z8`sx2`bvD6CEIPQ`m0?#uI^ZRY-hQ7Sy~Npp^VsGcH+TD zuI;ESU$y$_ZCkR7eXZ^TH{O198L)s?o*0X^AZa0g{vn)SX5$4t8xJ4gj>!=O@;nKn zi|(W7{C$h=3*3Ky;64e-`{KZh-A!FxP2Df%-=)`yi&U0PzYuSRT}=4}^~A$V4}yE@ zLJ;6URB>uyay4N%$U}qj&*j)SKu;97P`hH}$BQ+I>q7q0^S@`yLqX~Mi_%@8knq`+ zM^>yjawEO0XxP=zuu)xf-^|{I=OG3g8A?av- zAM7YKHS8Rqo$zveC-%#Qbd$+>PfbCF2-(2^A^p5delp+F0knw2h?DI#{0$ zr>ay%^EN#4wen(?)rZxvp;OqdA-`o~gR3sx0C;6R9FGmr(l8w$GS5RVFI$E0nQDst zZkIk10X=}*WOQjXOscxNBAY6^?KXq8wc;was=U=`HtL?Y-(p5|I%+m}W7P?1&wS7Mb-Y}hxTGWztEh9?-|b&+LJ8O+ zx4~qQrmwEZbe5&S(P}ev;+&5TbSOo2rM*O@srUGqztv!NF;vPGXQqnr(NnKc`HL!5 z+Kw>jI8f-AIjn1SNh9;slrUqprXg8g3l=LG9YM4p2pHf4Kpgmy^S;RTu%I8;funQ- zRZ+B~ORDh*2t-XV#h5aM*gQQSJOxaoRswPqbSJe5h>oZz-+#)7cF--xBvzMp%ti$v zr(U_~`uJj-@#2f4X|{|_Fl#81h?YiCbOJ6go5rlr=@k~OrKr(e)v#nmYq{O&^OuGF z#U7N6&c{J0ZYW4M-Vo3B8jFzF9qVm7U6QS@NtYd$zOmckD$%G-sQawZ`XqyiEp1r1 zlIb(n$l@|8(i|!9B zaYHF;Tf90gy$g4V;+5z(QouiW7=xEtgARMq%;!RBqb8%!Shd<9YPM<=muDz7hj^J`KDD1c+X>(b z@&_{+s0&R{7p}{I{F@;dN&QNeFT`mUCBIQ&ifZ7~6lp7{JUy@_L=N*>94B=N{({Bf$D z2DWbmxhOUWpL)>lV_CT69l|E;U}e&G632FbDt-jQ>qnQzKfCp^#1qs`ITkf24&#}% zK!*Wdg-WIZ2~VK{pqinELz*D(PhJJL2@G&9&ZCI7%OQw}TsgFgalQfi-~f)EG;xd! zaiFbxt+}yAt9kTMjgD0{7*=+!G&EFs-DhT(ANF`zMg7dFJQwpe=#9`QKQZg<6W*y^ zrCGFhlfF%BR_xlLu;|(h>-J=`d)67+yh+23O@?)ynM~(8!=|la(GH&KM6v0-DqMGXdT6vH|qYmJybkB@H z>Eu7`Pk1bc*{RFpPs}{iVVkmv*YC+lhI4qDOq}h1V*Y6s*&RXa%!}-sX5JH7FmWXN z5p)2lr4s~r^1Mv_E`qD8Lf>16>k1)t9z##gAyLt=t=~eetp^vMMR&{;WLu zAEsNKA3G%TD365KgyiEKrYJ-cuW=x@>7+)` z*gX|^5`_lgpm~e}*1?gJOp;#W?wJpqr;MH`9BUt_F^J9wM+DstZtHz$%|SSWPLoB( zT`xE*uRe&gQuRTU?KLcBhsf5OdoFZ+4xl9h7%O#P%9VX5fP_F2xN3n0N|Ud4?C!gzw>Ru8 zmhLXjc6@r(_tvjH*3ql`#C=CESvdvI7W+}KBhGg&JSXC^^TXd)58DDbbeRhkDW@V~ zWC1LWg6Iu892n(ZFs7xuQ&zOAjfH#j*!<*KbK<8yMGxbldHw{F2=>Jt=gMCBxV zNX;)sW)W1Wajh=#Z@40vR#m#gZNsCI4zXgt(>cp47%Cy2!N&joie!pac>O<*oDioD z1cMJ)-MGk^cmJmgl5J_Kv8F_CD@CNOw4n}Js}4C1LFC>%&X3RJufj*j0;qDZmM2H| z=T65H*}CdSN5((0W%bI6c$ToPQ}|L?pH0M1=k||XF+TEWb=`C}Ua@lZ77m9k#4gFd zC|93aU`OB$Tz`NeA(skRKGYJ)vU`*4-fudkF4yZQ%5l@q?|JcI?*E40a@GS5G&%CTOM&4UF8IRlO`cBd%kE2v4;Osm z4-3bn7t2m3_e-B;TlT?8C*K#U)kXev%Am-5)KRpK43^K;)+r_p{UGOwVH$gTQ0pFi`{`rnt@GfBNb!sO&^7Gvp@j)(uqcYD0$FHH@43tVz z)hVl9^zEI3^sv^YI$OC% z<0c`BLyR3%HxjFZllKI&GoQnj8B_}H#CIr& zvIqD$xoYqR zN{?5u4K1f`Io4rIbf0YRXv;=ou}HS<<4cg6hdjF_;?IY^@Jfetypmm36)xU#`K>n% zEt)wMjn3QT<89d}hG?N5J%zq0V*^WYkHLpQx)fO_c#>dnhvGtZNr++|)|3)`46!&G zQ)*;=@gJe}{E2mkbXJ#<9X2>^xM$>3@)3FG1_+K zwMpTz^WQ~zXKpLa^=ZP_Rv~h|bwMZk80IrsA4h+JI|(Je`9qJA-w1JPszwXfh?7vT zaE!#{Qcq#k-?$kCq%g8zQO8jv2~a)OY&Et9T12rW&}y<|EXLMgt0>~dXj$it`Ft@i zTZ@&2EzH@u4}~p!fMQAqP&WhW?&GH?XI@>V(uW(vR=N(oa`|$lo&=H=tMsa6r|oo1 zuk^8HDqV;+l2;dY$!}ETrE|~Ik=1+*rjY}>8TSY_7~vH0SV+$*{NpU}ALhT~^z{6( z&3<1>EJhI0Fj;8GUig0+f(WGb=g7{*FGy{&xJ7)O6wj}qZ`k+b6xAT#3@eaC?F*=@ruTCw%fN4rnm7XDiJwo~16i=X_=XIy(1o@xwl4mX}! zxYu>zN9mu-;;|*MCB3`K{hMq~e?_n^S!5P2eg9GT0j0Y>{2=*bzURh~QtOLqF7Eo6 zp#r>`I(IeZ2`$|K@nOvIRM(1fj4ApX13I*tB&`*IT0BZv5(O3@*~bkAdW_Qu>Lww) z1+X6`I*i(LfILpV?D4$pksjl3Z}R&Le<^$CC6DJN&uRV`!~yB$aHb@P7FJ=@xw;K~R!H8i+OW0`D4nce2DPeV1g zSeiPvcGgHAXTI8S>3Za~L?g-d%j&!^rh~z@X0zEBsH+Kh{h7rl7m)0AD0q^97 zlI)soJ?Yj(F9#I{5C|G=T9r+!w>S)n;LD3z)4khPXG?^CJX7DZJzBoZ?{T?2{$*=- z^wgh0rlu*PRhyJ*lg?%@2CU^jK{Hxe+16_OWMMA<9G;O2GcIX44Jb@RdX5zpcpLB# zXc3x^2w8=2y(6EZAv}=@z?_4GZz_K)ka^DWQ})cCr>9?FjnX%Ga)xl8Wo`^$Bwgkk z^k)J$W|8CXTR)TCEG*eF^Ck9~jGULjy9j@o-v);~jAz>ro7V<1W*{gb8~#cg*d5X< ztO19=J0YC!%8bo5;*#vm7c^oZ+Z+FQ@@}Z3d420?@hR>vjl<7JvofD{0f^%|dOBa1 znqawvaRoq*NF}*jC^EZ5*jI#c<#;b+UBCLyadZDy4~^~{IH6Y8)t}t_$}=OzT@U5D zckI4IrHUuMDu)<-m@5H&lv0AVa41wISKEGj9YZ4zxT#;N2 zIL6e}UAo#AAS2ICPRpf^ny?oEFwcUu?02gZANfcEE-A>xzewUB2IiNrs zh8k`z+=yx`<)OmCgEdwP3v)y?C6Xf;oDuRVk8tLNqqENe5n|b8Cl0XcbvsuE&8?M| zg{70>C7viJ-d(>euJN}f)aC+VolcU3A$>TO%+m;xEb(EJ`e@xm;_xWOkEw}T1A#y7;#2vp900lCGvgU|&;mBt^o!Frs574iYtZc(AB3$E%l z+ZuhP!m?72T7k@~I`TDy3O%Fh%OU zc2O@XRK}8UwSS>E?lY^k;9=CMJUX+<9JM)uN}Z!b6&3`C!XvfI5O8rR^T#&%j&!&~ zF1?y*BE=EA(GwE1B_UOEdDLKILbSa*wYo*?Hx&icfWa6Q>L7vv&8rti9SBe*BQ?bi zU8IrC+*wyrQ>=5B34vsr*rY~)OXVuo=nyhlp$>#s>_Pg1sIsgq4XPB*wf2etf^J%~ zH{r55+)B4jr3Qz*4&cy`GurOeRy0;uCL`>KT=10|ih);sM{lq67_;`F=(4Vl+0OrhSvPE`-z21^-$?I#w5sZ(N2-n-sS>)_ zYU%Uem7aXeOCHC`$E(0w|CyYXU`pU?gCzl&OPs(??1zZhr)hyHoO)s zws5qS7j3jh=+A`+JTToMc5`np+a$fyC%r4Z+lMsWXV9>ZR6 zd-?G~_y`gDOe@+10s42sB4BTP^6!B|2$xL%A5ahldyVD=;&LDqQPUydif@P)()w%`vZXyN$p+2KOYv|xV|U*h*_mcf_!J^p6?dEN<`Ntx;8 zd=`_nMAYBn$|7e2n`TJ)eCrV(=OpFi3hjDN2Ql0CX>^XiIu35y*c@r z&53aYPgT#APx4_$=JKfcS=gDYAwPF7=tVUA5c&jWF3?$L?LAdKzAhW zF1#c3NfK`krAP2knXzeZk}II1W|a=in3Qe<_JKcazyH#uOb7*bgi0@J69Zwr%Uu&a z)YsFpkns731q20|s5gdPuCS+VWt&IuH){v@=Qbq?Ejzxk9m)H`xD3UTYUFnokoBRA{PBB*P#N9p!g!YXGzf1+IB?FJA!n_I zfENa)oJTY$s_}=Jjj(_VAX4<*N%-Pmsv$xmZ&UCW&^R!_=R|eX!dwf6^$G4u8G8d2 ziNX@0w1}fe2z0|ENTeY>i*P$Y8?Z5OY?)4h!qDt>54jQG38EwzIYK`LbZTB9q6t0g zi6GApUlsb0+y<)iDz^c=vE*-rl15P$1hODxVrsb|R$kPa);RD_;scJDPs=G<)vtS6}_Ucui@~_YX)-tA4x73zmXcp!5OiH22&FaJ)R4 zmNKt#OO>ezG@eL65$1N}^(SC!@EroB zX(!g8Q}H8U7X-3Zu_!{1S(MXAJCOkoYlk0$%cfKvkZ|DBk3yKi3T7_`%YrR-r$Z3z zc3Y#rxV9*hQP)_DEPkC^5WG5ktw+VbVpKs3pi*gZS)JagF|DnMno&lj+!+mMwXL96 zvn2dNu_0h}T8u_-V6mVn308w=!XL4h8hnrvW)p~%d|o|Bw-;A=1i@L!7TFo|6(fN@ zu*l~MYndK_wv z@7tc*BCGBB@}R*4=DV2LB5F^A%*d@=RpewiYn3Z$vsi4F)d~yqrk0k5vhZURczno@ zF^343nOHE#aMKBLh-4ARaN?c8n@G5Js+R`y2#$S9)}163TzZ+1;E+G~0=hkVAT2>m z!IeSd5s)6xGo6LBm>WCPr~k^>u_}|y2vSzDgLBD|ml?UC@Yd1Dk^acQm?ix`j6{4A z-kF+el&)(ydlu|gGe3EVE&cc#Pd@p;j~-&1K2GP7``qI=mj=?%3OR(39InbqIooMh zObkV`aP?o{jHV%g^iRm#Ai^1$lPgL39v&<$9k{9X(1A8}L(ka$CF7zC}s2iE43uju@Iaq%n4+# z%Ke_^9sZwp%{D-L#6J)FK)eW#(~Lu$XZWEP5OvIcqWbVCBS>(|*|GHm^m96L9A47p zdCWXS8q9m5HA7(zXhkmI;(5Fsl`=ujjdP(5JRmfmG6HCM2u5(sz?(;AE94=s21KdJ z1h0M?C8LULPET1KGU8kzlh$BzI1S9?JTE;JXKR@)bI(1Q)2F4o62rrZ;i2U4aB}EH zT|5=nX%+5hJn9zHDub>_qYxDebCFJ^R4dpIaDksR1_6YL8ccPi#c`eSQiauN1A-p~ zjK=tZr3@W5b6IjoJ|+&%Cfq)syC`1jaFoWq29-jgQK)o9W(AI|Df&DK06Et75b}Dw z&`c<%SDHz0Qpfg`x$VbYLa4DK;fy@kiKHY0F(fwKXlZIRIib>P{H z5~IV3nQvXRGci1hoL{3|ddO%)87(8*VK<_}jYXIS`=wr?bvtLtu z_|tCRk5risxP+wxv-)xB(0oKx8^e3~{sqq^v{*KC`qI>RrfOJdwdXwnm6pP?C5xK)ad_pve zynj<4r+)}(AnJHJl4O8%2VXwAc%B^rU^OZZ%F~|d85ZUb*>)zJGO;i7Olm~E0q@3t zjA87+LgLu~g?9>fkg9nahSy_YZ2UcuNI;83)B&$FuMj;%aHftsc3umf|5zdRAiv|> z1x^S#2aBrawt~ZS_uSP%EwcVkC|s8e<*k*Wy|Hi%-XHWk8Pxkh1a1luPg(6o`03w1 z6j%G{NJNI@V&KVm+_x_P)k2@mmyw{{DbzuI{;y$W7Xf2SVA~YiV=X{!4_=6prTFAr zERJSyJ2bi=>2!9ClMswWnyb|mia=C`?tVjP{)hS3gSxCVVd3dcVWvd}#aTS=v!qwc zUtkuel_+|Zf1f=!#xU91axEpAS<#iC1LKw8p|X-sbr_W(dTvNZQVe!S8fZzxh18RX zAj29LjWESe2fuE%OK+E)Hrtt}M0$76p0Zuv-L>n@H^Ci3iEQYZgbPK6+f~K)_$K#w zPnS$e|I)O%sXpD=D81FaeJ}2ZELZ+r9Kk%#Bi}L?J;pQL0T-P0b{ELKXta{~>=%KW zRkLk1TfhGFLB*Qtt7@*QUMp_D`P1L4-TK0Vy~>W-A?j2osy7DJQC~EKOdYx#7}vYO$>~Q&mGS;o9W8TE*qk&)JpC zok4jWLEXF~SN*nD9MDP^C#0zxLTzKqEtVCR#cmq101oW9`oEOg%Mty#>Pvz3af>;% zIi)Ik8&HsfjZU}2{|EN2Zh z(vQdD*YD?LND6xCe#m7xhA7voCT?O7o%6pe!_~#06;KEr|6nXuiva#0Y$TSZg)fzz zFufMh{isZLUs=+6kHP#Sy%k`#8(iV#XP1X3P7U2t#F5#TV(_ zZRY)vw&JqA#bweL8=D(CKEC13_0nImY(Yl4N_y?NY1StF`47CS@Rx!wKaY(n1X3c1 zMdRw{ix4S(?p*v!bJNB7?@*Zj!Ni-5|K64hxJkjH#E zf(aEa@NeI?Ie24u>utMgYS|ZhU+Jp;c1^eRr56Jfzm``4d<;N!x_`zRcjwD}&k9h7P6e-98g908v zn%`3)WGNzh18T8~1}j$s&;z+Ng#iiZN}AW0N5VmfZS}f57UROtIb&{7H|o7jnx0*|_2AGD;w5)#EJ)tp0}2e?TRNVuSI}z)aSenbCMcd6iVECx zq{x(p2pdj060Ffq42ASd_BKVU5u*yLu}Cm?WI_nH(Iprb&AWt|Z{rf`%C@nCA9@99 z>16&2!~uQ*%u$xK|A}8g**Pes+nh6NH0s)(o%{k=rF;R>Cvh3)bX*sg=Q7GOEkm4g z4YcLm3&wCAB&^9+=cc|3w;nD>1kdCvfQ%3t8sWSE+>mQ=jcI&Gh)`TISL`xi;>UED z0@WOip=xFpD2WNQrD>NFk#K}wfKR|NoiL&xYs9;2PPAWXsEAi@3zkJ}FaDE56ugFj z&F@-%Y(GtwSzI$R%#hNR5>=Y=i)@X zQek>3Qm+^b-6Aa8!(OlaXOG9;;IZhx5`Pgq1$vbR^h%=1aJ=K1S`&+e!#leY&wsTz zT;?`{f4^wSvEf~|$g&+ZiJ4Cz=A%@C3}(s1;0}XJH_g6S)>cd&&)9)fxZXPvKXl1e z$;x=YZ$i-!`TX}UUU8drapgn5tQW{2iet zmwVXWRQ@=HZHPYylgC9EhT959D;x(ExA?gj5N|9sdjxsoLVM1L8+dLgM!9UJp@+!6 zBk20%L5iWHREdiaq~j(SMiIIWe!;^5^c5UdR7p+Um=@32lf|$Q0yWjgR;+GcePd?T z^-Y!S9*fo*4EP($9nnO@p;sCVDr2~E%l`UCQSjBaty$(-)SxRbX{;5_d#mjRLt}sK z@|LFcMKB`DHL*l_*yR;Ottwd48bCc=53-JuNtYuYTIxfebm*ds>wJE%As7Td9|-Yf znM;0_Iqxe8+I(0+1QJD#DtN)U%NI#urp3gVNKHC^O))D%Y z+5rO)?EorC`TX;WARTw`n{B*JOTRT3n6aS&Q)LH(T&JLo{*lRy&)6hg=x;PmmT&Nqf6Jl!F3MiX9#oageb85sch z5p~v3wWu>NFcLtWfPo(m;FXHfWT&Q}DTCP|J3a7gted0_Cj-Bx?*k(Pd~@OE%=8p_ z$Iw3u^A_1scFwln0I5e1WT;ztHL-!x9VyoZtt6sH2(u8vs2HX6*f+15|@l6vhRHn3nQagVA~ge{<+23JMPFX ze)gXhXYRZ+13wuxispW5PXXVQf)^u;+{l%b>uX2jI6gXU$D7%-RvrE5jPaHoUXDjGVPa-Er?hpTM&9njd0w_kZ00DAJ&_~%Ic>myg$RkJ8WXz(Y zSFGH*b+LJgWz*=Tz0ELH5qd!z$da2(u5U0GFN!bR6}PMyTy#Ougc28JAEbOgt+17d zdG5nFLNRRtE+7*ps7vWnV?B`rpu!hla=wo_^p;dj5;az$iJBCLgMj z@FHRZCRa{G+Ll1 z8T2NP9mo!Y*%C4tTxO%+jPfAX@cM1*!@-R^)`kNc_`-V^=dKeubiBiNCEY?f(_kA}fp;884tm?m!6rBQHE4Isk>9 zb&4R)I_n?#!(1#AblU(XbY`Zq^aegZIN`W6Zst`)9$ub?3uH|odv-D#M9s_$-IKq} zh`)wjWM2^E2!8~2XLI>6t|*sZ#`(d~&`9;rAfX9E?GF)jI_RIC0_n9-)^zgd8tp;= z;M+CL&wZ@!%1tpi2m-JoQI&V*)zsed46xCcNSAZ0{LwXCNTk&=%I<%2DJY}wdSPWumP|GMp|)b`xA6w2Xfc6mW5 za38S>ct5Pc59Rl{c5EqPQK{{{*mYaqwmSBsoyFMkbjAyQfx^5y*M5#-|G<6x>uvv= z+xx$2BX8GV{+xfl)yNn7@OIVtQLvrpbI6K;R|^IZq)wwN=J=3yg%>wfSv*FgCYe-Yff@H1LTSjj1kYzO>7 zXW4e18S@TKg*-->3DmJ>J_kC6**S-7Kgye;yn+Qt?t-2UPY-3SaR1W}((F#}`B%M2 z?7CZcMS2mH4$sW6sw%jNyD=NXU7eQ|WY?&GI6&qL@OI?Pg3%5+$~8GIWJ%MbLO!#} zf%0~Dnhz5aNNk}Y-I!i7v7N`YR$E>mRxIRhBalTI+19IzfQ8D2C}V`gNOhq z{N&QhJfo1KBj@|SDRx_m*wSk72X3W)0#_6cjJ^OoFHUV{JeUry04kS573HDd;8qY> z7Qg;jZA~pK8A{Ww<-U$OB7KflrB1h9t7&f0+q4FEnMb8+RU52! zi$O(iR-Ibm4d@YjxOa0UfY2Xi^%z3T=^1Z&fJu!Vi&hjgH-YRpOav5|iwh zXfdhvDg`Pc32j=iQWt3jv)ddD;OUr5&IjC){bs$+u2m}qjm~J$2nx2^5pgk-T6?#2 zsnx6$o#k$?&*OFmi*!tDcIZQ94_F$kKIwUs6VO;zDlpf?QhslBxCk`~n^ZbD`80|m zqXjAO5+=Os0#_!VNuVu-Xa0!zB>aaJR6&wCQ5RlK{vQCTafk7M)I1)CCrA%O#rXiz zTnLam8!_D9Dk|bkpOD^NbjO_^S*6ZQ+_LYkjiD+bT+nsHTDS=^e+rRVF zYGMD<%j>0g6HK3q`a7>XeM?{5yXzY1ig>wDzQ1X0A)O1kT9Mc^<;}p}mHTF)olp?| zwswjbdH;*{Z6<20|4s8SKhVgrEcmMIeZeb5(zquE@?4Eyd6}e&DZi}1vLnB&T%d<{ zQQk&{^|Ac24z_evewpG>J8=h?LW?z~1%vrz0n5ko%OaMq%`Ypke0zRb3Ek;a`DLm$ z{>A*V4&K0*^UL}LQReR%?(Odx9@>=KH!;{Xn*Wr4+m;(0>mMEp)>hTz*R0G94 zbG^atqrtI5`|8HW`+|L=!v}*ahKI&;gM-7tk9beFg&wV)7Fi@C5aBb1?XzM}z4r9#-|Ly?R^k99}g8h82 z5paZ5rYpYoet7UbV z=j%b@gv@&)>740yN+GYZeahwZe%yH zQwZ_g!fs`^v5&HkA@TkWb|?EdyNlh;PP2R1C)m9}_ubDPV4q~4VxMN8VGpv0*u(4$ zdxU+KJ<2}E9%GNQC)kthDfTpb22_}zXaC5)z`n@NvMKf)`zQ7#_B?xm{WE)!eVKiQ zeU-h$UIzH^YwYXn8|+o~8hf36lYI*;X5V4oW#41pXK%3o$9}-xWarph?1$`M*pJwc z*-t=*1m*e}_y*ss|;>^JPU?04)x+3(pO*nhEi*&o@T*n4c6 z{h6I-GfZNC5f-2noj?Wh1W;}ZYC$7t1)ZQ541y8<5wlg;m08VU5r(bO>vOb;5dKgRoK9By1M82wR11 z!ggVYuv6G2>|UVm>ggGt7#c6?>KX4pgmItj9?f+Pj12b=jgN_4y}fFPjQ#zGa=Nb3 z(c#0%?&0zM`NiJh!$bMS!Cc?CUfy7|f8YLbi@ZE`unXl_XuAtm(AL)ZTkw5M^Vdv_ zXylI*BdTt+CpW6;hU~$y#uc=n=pG*I#mn%3hF%VKjSgtLNBeVqJzZltEDd+{Vrg8B zrNd*nQL%espQfj4FgMiOHEP7dV6uM*;;MgWpZsZfVtgMid7p{)Pmbk=#`w!(%yf{=>np zBmD>akIjAVAL5@)`R_+_W8=f4Ib%=%XwP6S+1EcfnCrFYKS7-DE37NJU>&Y!uzx6L z%CF3SG~_>y4R(#~=ZBo=AIBr@8tv8M=v||9rK+C6{*jTRSb=8BmrhG2e4gm#mph2N zYmh%qjL-)q|DeDOk~8!S4-R&X$b0JWVR$ro5bM>r+udl94etkYL*vQb{;{5kF`9hn zD_W)R8O`;gJw0fSq8BaH(hF~$rnhUns~eBT+?&IrM61S=ymM)1KgZ;yx!#+^oQK2V z1YLv4iJ?Qe(f+>vT(9rH+b;NlFX_bd_I7;e24x>u+cz#e?A9~D_eyfWUPP8kUKas zel&Twe+UvrnS<~hRp*ZM3{Ldsbh#rVT|>QmuwoHU9Bal&X5o43a!2zbrdPzGrZ1Q4 zr8}pG=zwtVAL<%Cs^!ZxTy=a2?dtE+@WqkdJ`-OUo9M>XObq6n^2ehGAy5V|Y)8>! zhDVQDFIY_<Ll-oM_675gW;c@u_*=(zmT;J7)z*iZ5U14|`;R_+@d?#}7<4JXHk zNhasi`$oIEyV2qBKC(Ya^MH~s;tNRA+^BWm=Hv+%qlyD#!$YQlTz6M@lCGd1bDubnJ1P!#9aazacaNesSO;m!?w%OL^-qis z_w^sq&aN@?hfcj~6k=3CpY$~S(M4k&Hl*dju5klj8Xm=i%=Mc1hq2rsx(fQFyw&(< zE+>C6ff2*E(+%Q*C&%{Vp{Z#e!33-s9Pa6&ofKFYP#x^rHzjDYsfClzsaBWbCv%{SzePi;#|_3ufLlM zmLY3`M@d=?nnn)LvdG$y_H8{}sYVt|8F#Yd2x_;gvn5aQZRp90?CgAA5A?vQJ_D50 zOL`0=@Xv9{q{fqK_$J6spM_9h2>Kf)9fJ(m`?@QHY;W2MKu-HjKKUTo$_)1#Oi~eC zh9N?OFNKMO(H_M(`s!6GErVIq_R`)=cS(g71f9+N6J+g0k-t6*9#Hr-=Axk~Wt`QC z+NAB+y~xy29lt70xedfBk%1D@#&o$h;>vfUgBSJVHmR+`WBv9neJh}Rs zxmw<}1|Rst#z6BXlVJ_low{S_lLpF_BX=!eg;rTXocptAP0coOo)SmkBym>n3fM#j zQ7CoFm!^HLe7y4)p5md-Q|gwRi|H1uC%j+($^YEj2 z^2+yzdC-cTf3fT``ls@1GT`hPnF^jC9qxT#8aYy6z$%hCTHaM8%Liic>)xkJZB=0?!0:typeof process!="undefined"?process.platform==="win32":!1},p}();I.Environment=t})(X||(X={}));var X;(function(I){var t=function(){function E(u,d,l){this.type=u,this.detail=d,this.timestamp=l}return E}();I.LoaderEvent=t;var p=function(){function E(u){this._events=[new t(1,"",u)]}return E.prototype.record=function(u,d){this._events.push(new t(u,d,I.Utilities.getHighPerformanceTimestamp()))},E.prototype.getEvents=function(){return this._events},E}();I.LoaderEventRecorder=p;var P=function(){function E(){}return E.prototype.record=function(u,d){},E.prototype.getEvents=function(){return[]},E.INSTANCE=new E,E}();I.NullLoaderEventRecorder=P})(X||(X={}));var X;(function(I){var t=function(){function p(){}return p.fileUriToFilePath=function(P,E){if(E=decodeURI(E).replace(/%23/g,"#"),P){if(/^file:\/\/\//.test(E))return E.substr(8);if(/^file:\/\//.test(E))return E.substr(5)}else if(/^file:\/\//.test(E))return E.substr(7);return E},p.startsWith=function(P,E){return P.length>=E.length&&P.substr(0,E.length)===E},p.endsWith=function(P,E){return P.length>=E.length&&P.substr(P.length-E.length)===E},p.containsQueryString=function(P){return/^[^\#]*\?/gi.test(P)},p.isAbsolutePath=function(P){return/^((http:\/\/)|(https:\/\/)|(file:\/\/)|(\/))/.test(P)},p.forEachProperty=function(P,E){if(P){var u=void 0;for(u in P)P.hasOwnProperty(u)&&E(u,P[u])}},p.isEmpty=function(P){var E=!0;return p.forEachProperty(P,function(){E=!1}),E},p.recursiveClone=function(P){if(!P||typeof P!="object"||P instanceof RegExp||!Array.isArray(P)&&Object.getPrototypeOf(P)!==Object.prototype)return P;var E=Array.isArray(P)?[]:{};return p.forEachProperty(P,function(u,d){d&&typeof d=="object"?E[u]=p.recursiveClone(d):E[u]=d}),E},p.generateAnonymousModule=function(){return"===anonymous"+p.NEXT_ANONYMOUS_ID+++"==="},p.isAnonymousModule=function(P){return p.startsWith(P,"===anonymous")},p.getHighPerformanceTimestamp=function(){return this.PERFORMANCE_NOW_PROBED||(this.PERFORMANCE_NOW_PROBED=!0,this.HAS_PERFORMANCE_NOW=I.global.performance&&typeof I.global.performance.now=="function"),this.HAS_PERFORMANCE_NOW?I.global.performance.now():Date.now()},p.NEXT_ANONYMOUS_ID=1,p.PERFORMANCE_NOW_PROBED=!1,p.HAS_PERFORMANCE_NOW=!1,p}();I.Utilities=t})(X||(X={}));var X;(function(I){function t(E){if(E instanceof Error)return E;var u=new Error(E.message||String(E)||"Unknown Error");return E.stack&&(u.stack=E.stack),u}I.ensureError=t;var p=function(){function E(){}return E.validateConfigurationOptions=function(u){function d(s){if(s.phase==="loading"){console.error('Loading "'+s.moduleId+'" failed'),console.error(s),console.error("Here are the modules that depend on it:"),console.error(s.neededBy);return}if(s.phase==="factory"){console.error('The factory method of "'+s.moduleId+'" has thrown an exception'),console.error(s);return}}if(u=u||{},typeof u.baseUrl!="string"&&(u.baseUrl=""),typeof u.isBuild!="boolean"&&(u.isBuild=!1),typeof u.paths!="object"&&(u.paths={}),typeof u.config!="object"&&(u.config={}),typeof u.catchError=="undefined"&&(u.catchError=!1),typeof u.recordStats=="undefined"&&(u.recordStats=!1),typeof u.urlArgs!="string"&&(u.urlArgs=""),typeof u.onError!="function"&&(u.onError=d),Array.isArray(u.ignoreDuplicateModules)||(u.ignoreDuplicateModules=[]),u.baseUrl.length>0&&(I.Utilities.endsWith(u.baseUrl,"/")||(u.baseUrl+="/")),typeof u.cspNonce!="string"&&(u.cspNonce=""),typeof u.preferScriptTags=="undefined"&&(u.preferScriptTags=!1),Array.isArray(u.nodeModules)||(u.nodeModules=[]),u.nodeCachedData&&typeof u.nodeCachedData=="object"&&(typeof u.nodeCachedData.seed!="string"&&(u.nodeCachedData.seed="seed"),(typeof u.nodeCachedData.writeDelay!="number"||u.nodeCachedData.writeDelay<0)&&(u.nodeCachedData.writeDelay=1e3*7),!u.nodeCachedData.path||typeof u.nodeCachedData.path!="string")){var l=t(new Error("INVALID cached data configuration, 'path' MUST be set"));l.phase="configuration",u.onError(l),u.nodeCachedData=void 0}return u},E.mergeConfigurationOptions=function(u,d){u===void 0&&(u=null),d===void 0&&(d=null);var l=I.Utilities.recursiveClone(d||{});return I.Utilities.forEachProperty(u,function(s,h){s==="ignoreDuplicateModules"&&typeof l.ignoreDuplicateModules!="undefined"?l.ignoreDuplicateModules=l.ignoreDuplicateModules.concat(h):s==="paths"&&typeof l.paths!="undefined"?I.Utilities.forEachProperty(h,function(w,a){return l.paths[w]=a}):s==="config"&&typeof l.config!="undefined"?I.Utilities.forEachProperty(h,function(w,a){return l.config[w]=a}):l[s]=I.Utilities.recursiveClone(h)}),E.validateConfigurationOptions(l)},E}();I.ConfigurationOptionsUtil=p;var P=function(){function E(u,d){if(this._env=u,this.options=p.mergeConfigurationOptions(d),this._createIgnoreDuplicateModulesMap(),this._createNodeModulesMap(),this._createSortedPathsRules(),this.options.baseUrl===""){if(this.options.nodeRequire&&this.options.nodeRequire.main&&this.options.nodeRequire.main.filename&&this._env.isNode){var l=this.options.nodeRequire.main.filename,s=Math.max(l.lastIndexOf("/"),l.lastIndexOf("\\"));this.options.baseUrl=l.substring(0,s+1)}if(this.options.nodeMain&&this._env.isNode){var l=this.options.nodeMain,s=Math.max(l.lastIndexOf("/"),l.lastIndexOf("\\"));this.options.baseUrl=l.substring(0,s+1)}}}return E.prototype._createIgnoreDuplicateModulesMap=function(){this.ignoreDuplicateModulesMap={};for(var u=0;u=5)){if(_.length0?(C=_.slice(0,16),v=_.slice(16),w.record(60,h)):w.record(61,h),r()})}},l.prototype._verifyCachedData=function(s,h,w,a,S){var v=this;!a||s.cachedDataRejected||setTimeout(function(){var C=v._crypto.createHash("md5").update(h,"utf8").digest();a.equals(C)||(S.getConfig().onError(new Error("FAILED TO VERIFY CACHED DATA, deleting stale '"+w+"' now, but a RESTART IS REQUIRED")),v._fs.unlink(w,function(n){n&&S.getConfig().onError(n)}))},Math.ceil(5e3*(1+Math.random())))},l._BOM=65279,l._PREFIX="(function (require, define, __filename, __dirname) { ",l._SUFFIX=` +});`,l}();function u(l,s){if(s.__$__isRecorded)return s;var h=function(a){l.record(33,a);try{return s(a)}finally{l.record(34,a)}};return h.__$__isRecorded=!0,h}I.ensureRecordedNodeRequire=u;function d(l){return new t(l)}I.createScriptLoader=d})(X||(X={}));var X;(function(I){var t=function(){function l(s){var h=s.lastIndexOf("/");h!==-1?this.fromModulePath=s.substr(0,h+1):this.fromModulePath=""}return l._normalizeModuleId=function(s){var h=s,w;for(w=/\/\.\//;w.test(h);)h=h.replace(w,"/");for(h=h.replace(/^\.\//g,""),w=/\/(([^\/])|([^\/][^\/\.])|([^\/\.][^\/])|([^\/][^\/][^\/]+))\/\.\.\//;w.test(h);)h=h.replace(w,"/");return h=h.replace(/^(([^\/])|([^\/][^\/\.])|([^\/\.][^\/])|([^\/][^\/][^\/]+))\/\.\.\//,""),h},l.prototype.resolveModule=function(s){var h=s;return I.Utilities.isAbsolutePath(h)||(I.Utilities.startsWith(h,"./")||I.Utilities.startsWith(h,"../"))&&(h=l._normalizeModuleId(this.fromModulePath+h)),h},l.ROOT=new l(""),l}();I.ModuleIdResolver=t;var p=function(){function l(s,h,w,a,S,v){this.id=s,this.strId=h,this.dependencies=w,this._callback=a,this._errorback=S,this.moduleIdResolver=v,this.exports={},this.error=null,this.exportsPassedIn=!1,this.unresolvedDependenciesCount=this.dependencies.length,this._isComplete=!1}return l._safeInvokeFunction=function(s,h){try{return{returnedValue:s.apply(I.global,h),producedError:null}}catch(w){return{returnedValue:null,producedError:w}}},l._invokeFactory=function(s,h,w,a){return s.isBuild()&&!I.Utilities.isAnonymousModule(h)?{returnedValue:null,producedError:null}:s.shouldCatchError()?this._safeInvokeFunction(w,a):{returnedValue:w.apply(I.global,a),producedError:null}},l.prototype.complete=function(s,h,w){this._isComplete=!0;var a=null;if(this._callback)if(typeof this._callback=="function"){s.record(21,this.strId);var S=l._invokeFactory(h,this.strId,this._callback,w);a=S.producedError,s.record(22,this.strId),!a&&typeof S.returnedValue!="undefined"&&(!this.exportsPassedIn||I.Utilities.isEmpty(this.exports))&&(this.exports=S.returnedValue)}else this.exports=this._callback;if(a){var v=I.ensureError(a);v.phase="factory",v.moduleId=this.strId,this.error=v,h.onError(v)}this.dependencies=null,this._callback=null,this._errorback=null,this.moduleIdResolver=null},l.prototype.onDependencyError=function(s){return this._isComplete=!0,this.error=s,this._errorback?(this._errorback(s),!0):!1},l.prototype.isComplete=function(){return this._isComplete},l}();I.Module=p;var P=function(){function l(){this._nextId=0,this._strModuleIdToIntModuleId=new Map,this._intModuleIdToStrModuleId=[],this.getModuleId("exports"),this.getModuleId("module"),this.getModuleId("require")}return l.prototype.getMaxModuleId=function(){return this._nextId},l.prototype.getModuleId=function(s){var h=this._strModuleIdToIntModuleId.get(s);return typeof h=="undefined"&&(h=this._nextId++,this._strModuleIdToIntModuleId.set(s,h),this._intModuleIdToStrModuleId[h]=s),h},l.prototype.getStrModuleId=function(s){return this._intModuleIdToStrModuleId[s]},l}(),E=function(){function l(s){this.id=s}return l.EXPORTS=new l(0),l.MODULE=new l(1),l.REQUIRE=new l(2),l}();I.RegularDependency=E;var u=function(){function l(s,h,w){this.id=s,this.pluginId=h,this.pluginParam=w}return l}();I.PluginDependency=u;var d=function(){function l(s,h,w,a,S){S===void 0&&(S=0),this._env=s,this._scriptLoader=h,this._loaderAvailableTimestamp=S,this._defineFunc=w,this._requireFunc=a,this._moduleIdProvider=new P,this._config=new I.Configuration(this._env),this._hasDependencyCycle=!1,this._modules2=[],this._knownModules2=[],this._inverseDependencies2=[],this._inversePluginDependencies2=new Map,this._currentAnnonymousDefineCall=null,this._recorder=null,this._buildInfoPath=[],this._buildInfoDefineStack=[],this._buildInfoDependencies=[]}return l.prototype.reset=function(){return new l(this._env,this._scriptLoader,this._defineFunc,this._requireFunc,this._loaderAvailableTimestamp)},l.prototype.getGlobalAMDDefineFunc=function(){return this._defineFunc},l.prototype.getGlobalAMDRequireFunc=function(){return this._requireFunc},l._findRelevantLocationInStack=function(s,h){for(var w=function(i){return i.replace(/\\/g,"/")},a=w(s),S=h.split(/\n/),v=0;v=0){var a=h.resolveModule(s.substr(0,w)),S=h.resolveModule(s.substr(w+1)),v=this._moduleIdProvider.getModuleId(a+"!"+S),C=this._moduleIdProvider.getModuleId(a);return new u(v,C,S)}return new E(this._moduleIdProvider.getModuleId(h.resolveModule(s)))},l.prototype._normalizeDependencies=function(s,h){for(var w=[],a=0,S=0,v=s.length;S0;){var r=n.shift(),m=this._modules2[r];m&&(C=m.onDependencyError(w)||C);var _=this._inverseDependencies2[r];if(_)for(var S=0,v=_.length;S0;){var n=C.shift(),r=n.dependencies;if(r)for(var S=0,v=r.length;S=a.length)h._onLoadError(s,n);else{var r=a[v],m=h.getRecorder();if(h._config.isBuild()&&r==="empty:"){h._buildInfoPath[s]=r,h.defineModule(h._moduleIdProvider.getStrModuleId(s),[],null,null,null),h._onLoad(s);return}m.record(10,r),h._scriptLoader.load(h,r,function(){h._config.isBuild()&&(h._buildInfoPath[s]=r),m.record(11,r),h._onLoad(s)},function(_){m.record(12,r),C(_)})}};C(null)}},l.prototype._loadPluginDependency=function(s,h){var w=this;if(!(this._modules2[h.id]||this._knownModules2[h.id])){this._knownModules2[h.id]=!0;var a=function(S){w.defineModule(w._moduleIdProvider.getStrModuleId(h.id),[],S,null,null)};a.error=function(S){w._config.onError(w._createLoadError(h.id,S))},s.load(h.pluginParam,this._createRequire(t.ROOT),a,this._config.getOptionsLiteral())}},l.prototype._resolve=function(s){var h=this,w=s.dependencies;if(w)for(var a=0,S=w.length;a +`)),s.unresolvedDependenciesCount--;continue}if(this._inverseDependencies2[v.id]=this._inverseDependencies2[v.id]||[],this._inverseDependencies2[v.id].push(s.id),v instanceof u){var r=this._modules2[v.pluginId];if(r&&r.isComplete()){this._loadPluginDependency(r.exports,v);continue}var m=this._inversePluginDependencies2.get(v.pluginId);m||(m=[],this._inversePluginDependencies2.set(v.pluginId,m)),m.push(v),this._loadModule(v.pluginId);continue}this._loadModule(v.id)}s.unresolvedDependenciesCount===0&&this._onModuleComplete(s)},l.prototype._onModuleComplete=function(s){var h=this,w=this.getRecorder();if(!s.isComplete()){var a=s.dependencies,S=[];if(a)for(var v=0,C=a.length;vA===M){if(c===g)return!0;if(!c||!g||c.length!==g.length)return!1;for(let A=0,M=c.length;A0)M=R-1;else return R}return-(A+1)}t.binarySearch=u;function d(c,g){let L=0,A=c.length;if(A===0)return 0;for(;L=g.length)throw new TypeError("invalid index");let A=g[Math.floor(g.length*Math.random())],M=[],R=[],D=[];for(let T of g){const $=L(T,A);$<0?M.push(T):$>0?R.push(T):D.push(T)}return cA?c[$]=R[T++]:T>M?c[$]=R[D++]:g(R[T],R[D])<0?c[$]=R[T++]:c[$]=R[D++]}function w(c,g,L,A,M){if(!(A<=L)){const R=L+(A-L)/2|0;w(c,g,L,R,M),w(c,g,R+1,A,M),!(g(c[R],c[R+1])<=0)&&h(c,g,L,R,A,M)}}function a(c,g){const L=[];let A;for(const M of s(c.slice(0),g))!A||g(A[0],M)!==0?(A=[M],L.push(A)):A.push(M);return L}t.groupBy=a;function S(c){return c.filter(g=>!!g)}t.coalesce=S;function v(c){return!Array.isArray(c)||c.length===0}t.isFalsyOrEmpty=v;function C(c){return Array.isArray(c)&&c.length>0}t.isNonEmptyArray=C;function n(c,g){if(!g)return c.filter((A,M)=>c.indexOf(A)===M);const L=Object.create(null);return c.filter(A=>{const M=g(A);return L[M]?!1:(L[M]=!0,!0)})}t.distinct=n;function r(c){const g=new Set;return c.filter(L=>g.has(L)?!1:(g.add(L),!0))}t.distinctES6=r;function m(c,g){return c.length>0?c[0]:g}t.firstOrDefault=m;function _(c){return[].concat(...c)}t.flatten=_;function o(c,g){let L=typeof g=="number"?c:0;typeof g=="number"?L=c:(L=0,g=c);const A=[];if(L<=g)for(let M=L;Mg;M--)A.push(M);return A}t.range=o;function i(c,g,L){const A=c.slice(0,g),M=c.slice(g);return A.concat(L,M)}t.arrayInsert=i;function f(c,g){const L=c.indexOf(g);L>-1&&(c.splice(L,1),c.unshift(g))}t.pushToStart=f;function b(c,g){const L=c.indexOf(g);L>-1&&(c.splice(L,1),c.push(g))}t.pushToEnd=b;function N(c){return Array.isArray(c)?c:[c]}t.asArray=N}),V(z[15],G([0,1]),function(I,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DiffChange=void 0;class p{constructor(E,u,d,l){this.originalStart=E,this.originalLength=u,this.modifiedStart=d,this.modifiedLength=l}getOriginalEnd(){return this.originalStart+this.originalLength}getModifiedEnd(){return this.modifiedStart+this.modifiedLength}}t.DiffChange=p}),V(z[4],G([0,1]),function(I,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.illegalState=t.illegalArgument=t.canceled=t.isPromiseCanceledError=t.transformErrorForSerialization=t.onUnexpectedExternalError=t.onUnexpectedError=t.errorHandler=t.ErrorHandler=void 0;class p{constructor(){this.listeners=[],this.unexpectedErrorHandler=function(S){setTimeout(()=>{throw S.stack?new Error(S.message+` + +`+S.stack):S},0)}}emit(S){this.listeners.forEach(v=>{v(S)})}onUnexpectedError(S){this.unexpectedErrorHandler(S),this.emit(S)}onUnexpectedExternalError(S){this.unexpectedErrorHandler(S)}}t.ErrorHandler=p,t.errorHandler=new p;function P(a){l(a)||t.errorHandler.onUnexpectedError(a)}t.onUnexpectedError=P;function E(a){l(a)||t.errorHandler.onUnexpectedExternalError(a)}t.onUnexpectedExternalError=E;function u(a){if(a instanceof Error){let{name:S,message:v}=a;const C=a.stacktrace||a.stack;return{$isError:!0,name:S,message:v,stack:C}}return a}t.transformErrorForSerialization=u;const d="Canceled";function l(a){return a instanceof Error&&a.name===d&&a.message===d}t.isPromiseCanceledError=l;function s(){const a=new Error(d);return a.name=a.message,a}t.canceled=s;function h(a){return a?new Error(`Illegal argument: ${a}`):new Error("Illegal argument")}t.illegalArgument=h;function w(a){return a?new Error(`Illegal state: ${a}`):new Error("Illegal state")}t.illegalState=w}),V(z[16],G([0,1]),function(I,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Iterable=void 0;var p;(function(P){function E(f){return f&&typeof f=="object"&&typeof f[Symbol.iterator]=="function"}P.is=E;const u=Object.freeze([]);function d(){return u}P.empty=d;function*l(f){yield f}P.single=l;function s(f){return f||u}P.from=s;function h(f){return!f||f[Symbol.iterator]().next().done===!0}P.isEmpty=h;function w(f){return f[Symbol.iterator]().next().value}P.first=w;function a(f,b){for(const N of f)if(b(N))return!0;return!1}P.some=a;function S(f,b){for(const N of f)if(b(N))return N}P.find=S;function*v(f,b){for(const N of f)b(N)&&(yield N)}P.filter=v;function*C(f,b){for(const N of f)yield b(N)}P.map=C;function*n(...f){for(const b of f)for(const N of b)yield N}P.concat=n;function*r(f){for(const b of f)for(const N of b)yield N}P.concatNested=r;function m(f,b,N){let c=N;for(const g of f)c=b(c,g);return c}P.reduce=m;function*_(f,b,N=f.length){for(b<0&&(b+=f.length),N<0?N+=f.length:N>f.length&&(N=f.length);bc===g){const c=f[Symbol.iterator](),g=b[Symbol.iterator]();for(;;){const L=c.next(),A=g.next();if(L.done!==A.done)return!1;if(L.done)return!0;if(!N(L.value,A.value))return!1}}P.equals=i})(p=t.Iterable||(t.Iterable={}))}),V(z[17],G([0,1,4]),function(I,t,p){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ResolvedKeybinding=t.ResolvedKeybindingPart=t.ChordKeybinding=t.SimpleKeybinding=t.createSimpleKeybinding=t.createKeybinding=t.KeyChord=t.KeyCodeUtils=void 0;class P{constructor(){this._keyCodeToStr=[],this._strToKeyCode=Object.create(null)}define(r,m){this._keyCodeToStr[r]=m,this._strToKeyCode[m.toLowerCase()]=r}keyCodeToStr(r){return this._keyCodeToStr[r]}strToKeyCode(r){return this._strToKeyCode[r.toLowerCase()]||0}}const E=new P,u=new P,d=new P;(function(){function n(r,m,_=m,o=_){E.define(r,m),u.define(r,_),d.define(r,o)}n(0,"unknown"),n(1,"Backspace"),n(2,"Tab"),n(3,"Enter"),n(4,"Shift"),n(5,"Ctrl"),n(6,"Alt"),n(7,"PauseBreak"),n(8,"CapsLock"),n(9,"Escape"),n(10,"Space"),n(11,"PageUp"),n(12,"PageDown"),n(13,"End"),n(14,"Home"),n(15,"LeftArrow","Left"),n(16,"UpArrow","Up"),n(17,"RightArrow","Right"),n(18,"DownArrow","Down"),n(19,"Insert"),n(20,"Delete"),n(21,"0"),n(22,"1"),n(23,"2"),n(24,"3"),n(25,"4"),n(26,"5"),n(27,"6"),n(28,"7"),n(29,"8"),n(30,"9"),n(31,"A"),n(32,"B"),n(33,"C"),n(34,"D"),n(35,"E"),n(36,"F"),n(37,"G"),n(38,"H"),n(39,"I"),n(40,"J"),n(41,"K"),n(42,"L"),n(43,"M"),n(44,"N"),n(45,"O"),n(46,"P"),n(47,"Q"),n(48,"R"),n(49,"S"),n(50,"T"),n(51,"U"),n(52,"V"),n(53,"W"),n(54,"X"),n(55,"Y"),n(56,"Z"),n(57,"Meta"),n(58,"ContextMenu"),n(59,"F1"),n(60,"F2"),n(61,"F3"),n(62,"F4"),n(63,"F5"),n(64,"F6"),n(65,"F7"),n(66,"F8"),n(67,"F9"),n(68,"F10"),n(69,"F11"),n(70,"F12"),n(71,"F13"),n(72,"F14"),n(73,"F15"),n(74,"F16"),n(75,"F17"),n(76,"F18"),n(77,"F19"),n(78,"NumLock"),n(79,"ScrollLock"),n(80,";",";","OEM_1"),n(81,"=","=","OEM_PLUS"),n(82,",",",","OEM_COMMA"),n(83,"-","-","OEM_MINUS"),n(84,".",".","OEM_PERIOD"),n(85,"/","/","OEM_2"),n(86,"`","`","OEM_3"),n(110,"ABNT_C1"),n(111,"ABNT_C2"),n(87,"[","[","OEM_4"),n(88,"\\","\\","OEM_5"),n(89,"]","]","OEM_6"),n(90,"'","'","OEM_7"),n(91,"OEM_8"),n(92,"OEM_102"),n(93,"NumPad0"),n(94,"NumPad1"),n(95,"NumPad2"),n(96,"NumPad3"),n(97,"NumPad4"),n(98,"NumPad5"),n(99,"NumPad6"),n(100,"NumPad7"),n(101,"NumPad8"),n(102,"NumPad9"),n(103,"NumPad_Multiply"),n(104,"NumPad_Add"),n(105,"NumPad_Separator"),n(106,"NumPad_Subtract"),n(107,"NumPad_Decimal"),n(108,"NumPad_Divide")})();var l;(function(n){function r(f){return E.keyCodeToStr(f)}n.toString=r;function m(f){return E.strToKeyCode(f)}n.fromString=m;function _(f){return u.keyCodeToStr(f)}n.toUserSettingsUS=_;function o(f){return d.keyCodeToStr(f)}n.toUserSettingsGeneral=o;function i(f){return u.strToKeyCode(f)||d.strToKeyCode(f)}n.fromUserSettings=i})(l=t.KeyCodeUtils||(t.KeyCodeUtils={}));function s(n,r){const m=(r&65535)<<16>>>0;return(n|m)>>>0}t.KeyChord=s;function h(n,r){if(n===0)return null;const m=(n&65535)>>>0,_=(n&4294901760)>>>16;return _!==0?new S([w(m,r),w(_,r)]):new S([w(m,r)])}t.createKeybinding=h;function w(n,r){const m=!!(n&2048),_=!!(n&256),o=r===2?_:m,i=!!(n&1024),f=!!(n&512),b=r===2?m:_,N=n&255;return new a(o,i,f,b,N)}t.createSimpleKeybinding=w;class a{constructor(r,m,_,o,i){this.ctrlKey=r,this.shiftKey=m,this.altKey=_,this.metaKey=o,this.keyCode=i}equals(r){return this.ctrlKey===r.ctrlKey&&this.shiftKey===r.shiftKey&&this.altKey===r.altKey&&this.metaKey===r.metaKey&&this.keyCode===r.keyCode}isModifierKey(){return this.keyCode===0||this.keyCode===5||this.keyCode===57||this.keyCode===6||this.keyCode===4}toChord(){return new S([this])}isDuplicateModifierCase(){return this.ctrlKey&&this.keyCode===5||this.shiftKey&&this.keyCode===4||this.altKey&&this.keyCode===6||this.metaKey&&this.keyCode===57}}t.SimpleKeybinding=a;class S{constructor(r){if(r.length===0)throw p.illegalArgument("parts");this.parts=r}}t.ChordKeybinding=S;class v{constructor(r,m,_,o,i,f){this.ctrlKey=r,this.shiftKey=m,this.altKey=_,this.metaKey=o,this.keyLabel=i,this.keyAriaLabel=f}}t.ResolvedKeybindingPart=v;class C{}t.ResolvedKeybinding=C}),V(z[7],G([0,1,16]),function(I,t,p){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ImmortalReference=t.MutableDisposable=t.Disposable=t.DisposableStore=t.toDisposable=t.combinedDisposable=t.dispose=t.isDisposable=t.MultiDisposeError=t.trackDisposable=void 0;const P=!1;let E=null;if(P){const r="__is_disposable_tracked__";E=new class{trackDisposable(m){const _=new Error("Potentially leaked disposable").stack;setTimeout(()=>{m[r]||console.log(_)},3e3)}markTracked(m){if(m&&m!==v.None)try{m[r]=!0}catch(_){}}}}function u(r){!E||E.markTracked(r)}function d(r){return E&&E.trackDisposable(r),r}t.trackDisposable=d;class l extends Error{constructor(m){super(`Encountered errors while disposing of store. Errors: [${m.join(", ")}]`);this.errors=m}}t.MultiDisposeError=l;function s(r){return typeof r.dispose=="function"&&r.dispose.length===0}t.isDisposable=s;function h(r){if(p.Iterable.is(r)){let m=[];for(const _ of r)if(_){u(_);try{_.dispose()}catch(o){m.push(o)}}if(m.length===1)throw m[0];if(m.length>1)throw new l(m);return Array.isArray(r)?[]:r}else if(r)return u(r),r.dispose(),r}t.dispose=h;function w(...r){return r.forEach(u),a(()=>h(r))}t.combinedDisposable=w;function a(r){const m=d({dispose:()=>{u(m),r()}});return m}t.toDisposable=a;class S{constructor(){this._toDispose=new Set,this._isDisposed=!1}dispose(){this._isDisposed||(u(this),this._isDisposed=!0,this.clear())}clear(){try{h(this._toDispose.values())}finally{this._toDispose.clear()}}add(m){if(!m)return m;if(m===this)throw new Error("Cannot register a disposable on itself!");return u(m),this._isDisposed?S.DISABLE_DISPOSED_WARNING||console.warn(new Error("Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!").stack):this._toDispose.add(m),m}}t.DisposableStore=S,S.DISABLE_DISPOSED_WARNING=!1;class v{constructor(){this._store=new S,d(this)}dispose(){u(this),this._store.dispose()}_register(m){if(m===this)throw new Error("Cannot register a disposable on itself!");return this._store.add(m)}}t.Disposable=v,v.None=Object.freeze({dispose(){}});class C{constructor(){this._isDisposed=!1,d(this)}get value(){return this._isDisposed?void 0:this._value}set value(m){var _;this._isDisposed||m===this._value||((_=this._value)===null||_===void 0||_.dispose(),m&&u(m),this._value=m)}clear(){this.value=void 0}dispose(){var m;this._isDisposed=!0,u(this),(m=this._value)===null||m===void 0||m.dispose(),this._value=void 0}}t.MutableDisposable=C;class n{constructor(m){this.object=m}dispose(){}}t.ImmortalReference=n}),V(z[18],G([0,1]),function(I,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.LinkedList=void 0;class p{constructor(u){this.element=u,this.next=p.Undefined,this.prev=p.Undefined}}p.Undefined=new p(void 0);class P{constructor(){this._first=p.Undefined,this._last=p.Undefined,this._size=0}get size(){return this._size}isEmpty(){return this._first===p.Undefined}clear(){this._first=p.Undefined,this._last=p.Undefined,this._size=0}unshift(u){return this._insert(u,!1)}push(u){return this._insert(u,!0)}_insert(u,d){const l=new p(u);if(this._first===p.Undefined)this._first=l,this._last=l;else if(d){const h=this._last;this._last=l,l.prev=h,h.next=l}else{const h=this._first;this._first=l,l.next=h,h.prev=l}this._size+=1;let s=!1;return()=>{s||(s=!0,this._remove(l))}}shift(){if(this._first!==p.Undefined){const u=this._first.element;return this._remove(this._first),u}}pop(){if(this._last!==p.Undefined){const u=this._last.element;return this._remove(this._last),u}}_remove(u){if(u.prev!==p.Undefined&&u.next!==p.Undefined){const d=u.prev;d.next=u.next,u.next.prev=d}else u.prev===p.Undefined&&u.next===p.Undefined?(this._first=p.Undefined,this._last=p.Undefined):u.next===p.Undefined?(this._last=this._last.prev,this._last.next=p.Undefined):u.prev===p.Undefined&&(this._first=this._first.next,this._first.prev=p.Undefined);this._size-=1}*[Symbol.iterator](){let u=this._first;for(;u!==p.Undefined;)yield u.element,u=u.next}}t.LinkedList=P}),V(z[2],G([0,1]),function(I,t){"use strict";var p;Object.defineProperty(t,"__esModule",{value:!0}),t.isLittleEndian=t.OS=t.setImmediate=t.globals=t.userAgent=t.isIOS=t.isWeb=t.isNative=t.isLinux=t.isMacintosh=t.isWindows=t.isPreferringBrowserCodeLoad=t.browserCodeLoadingCacheStrategy=t.isElectronSandboxed=void 0;const P="en";let E=!1,u=!1,d=!1,l=!1,s=!1,h=!1,w=!1,a,S=P,v,C;const n=typeof self=="object"?self:typeof global=="object"?global:{};let r;typeof process!="undefined"?r=process:typeof n.vscode!="undefined"&&(r=n.vscode.process);const m=typeof((p=r==null?void 0:r.versions)===null||p===void 0?void 0:p.electron)=="string"&&r.type==="renderer";if(t.isElectronSandboxed=m&&(r==null?void 0:r.sandboxed),t.browserCodeLoadingCacheStrategy=(()=>{if(t.isElectronSandboxed)return"bypassHeatCheck";const b=r==null?void 0:r.env.ENABLE_VSCODE_BROWSER_CODE_LOADING;if(typeof b=="string")return b==="none"||b==="code"||b==="bypassHeatCheck"||b==="bypassHeatCheckAndEagerCompile"?b:"bypassHeatCheck"})(),t.isPreferringBrowserCodeLoad=typeof t.browserCodeLoadingCacheStrategy=="string",typeof navigator=="object"&&!m)C=navigator.userAgent,E=C.indexOf("Windows")>=0,u=C.indexOf("Macintosh")>=0,w=(C.indexOf("Macintosh")>=0||C.indexOf("iPad")>=0||C.indexOf("iPhone")>=0)&&!!navigator.maxTouchPoints&&navigator.maxTouchPoints>0,d=C.indexOf("Linux")>=0,h=!0,a=navigator.language,S=a;else if(typeof r=="object"){E=r.platform==="win32",u=r.platform==="darwin",d=r.platform==="linux",l=d&&!!r.env.SNAP&&!!r.env.SNAP_REVISION,a=P,S=P;const b=r.env.VSCODE_NLS_CONFIG;if(b)try{const N=JSON.parse(b),c=N.availableLanguages["*"];a=N.locale,S=c||P,v=N._translationsConfigFile}catch(N){}s=!0}else console.error("Unable to resolve platform.");let _=0;u?_=1:E?_=3:d&&(_=2),t.isWindows=E,t.isMacintosh=u,t.isLinux=d,t.isNative=s,t.isWeb=h,t.isIOS=w,t.userAgent=C,t.globals=n,t.setImmediate=function(){if(t.globals.setImmediate)return t.globals.setImmediate.bind(t.globals);if(typeof t.globals.postMessage=="function"&&!t.globals.importScripts){let c=[];t.globals.addEventListener("message",L=>{if(L.data&&L.data.vscodeSetImmediateId)for(let A=0,M=c.length;A{const A=++g;c.push({id:A,callback:L}),t.globals.postMessage({vscodeSetImmediateId:A},"*")}}if(r&&typeof r.nextTick=="function")return r.nextTick.bind(r);const N=Promise.resolve();return c=>N.then(c)}(),t.OS=u||w?2:E?1:3;let o=!0,i=!1;function f(){if(!i){i=!0;const b=new Uint8Array(2);b[0]=1,b[1]=2,o=new Uint16Array(b.buffer)[0]===(2<<8)+1}return o}t.isLittleEndian=f}),V(z[19],G([0,1,2]),function(I,t,p){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.platform=t.env=t.cwd=void 0;let P;typeof process!="undefined"?P=process:typeof p.globals.vscode!="undefined"?P={get platform(){return p.globals.vscode.process.platform},get env(){return p.globals.vscode.process.env},nextTick(E){return p.setImmediate(E)},cwd(){return p.globals.vscode.process.env.VSCODE_CWD||p.globals.vscode.process.execPath.substr(0,p.globals.vscode.process.execPath.lastIndexOf(p.globals.vscode.process.platform==="win32"?"\\":"/"))}}:P={get platform(){return p.isWindows?"win32":p.isMacintosh?"darwin":"linux"},nextTick(E){return p.setImmediate(E)},get env(){return Object.create(null)},cwd(){return"/"}},t.cwd=P.cwd,t.env=P.env,t.platform=P.platform}),V(z[20],G([0,1,19]),function(I,t,p){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.sep=t.extname=t.basename=t.dirname=t.relative=t.resolve=t.normalize=t.posix=t.win32=void 0;const P=65,E=97,u=90,d=122,l=46,s=47,h=92,w=58,a=63;class S extends Error{constructor(i,f,b){let N;typeof f=="string"&&f.indexOf("not ")===0?(N="must not be",f=f.replace(/^not /,"")):N="must be";const c=i.indexOf(".")!==-1?"property":"argument";let g=`The "${i}" ${c} ${N} of type ${f}`;g+=`. Received type ${typeof b}`,super(g),this.code="ERR_INVALID_ARG_TYPE"}}function v(o,i){if(typeof o!="string")throw new S(i,"string",o)}function C(o){return o===s||o===h}function n(o){return o===s}function r(o){return o>=P&&o<=u||o>=E&&o<=d}function m(o,i,f,b){let N="",c=0,g=-1,L=0,A=0;for(let M=0;M<=o.length;++M){if(M2){const R=N.lastIndexOf(f);R===-1?(N="",c=0):(N=N.slice(0,R),c=N.length-1-N.lastIndexOf(f)),g=M,L=0;continue}else if(N.length!==0){N="",c=0,g=M,L=0;continue}}i&&(N+=N.length>0?`${f}..`:"..",c=2)}else N.length>0?N+=`${f}${o.slice(g+1,M)}`:N=o.slice(g+1,M),c=M-g-1;g=M,L=0}else A===l&&L!==-1?++L:L=-1}return N}function _(o,i){if(i===null||typeof i!="object")throw new S("pathObject","Object",i);const f=i.dir||i.root,b=i.base||`${i.name||""}${i.ext||""}`;return f?f===i.root?`${f}${b}`:`${f}${o}${b}`:b}t.win32={resolve(...o){let i="",f="",b=!1;for(let N=o.length-1;N>=-1;N--){let c;if(N>=0){if(c=o[N],v(c,"path"),c.length===0)continue}else i.length===0?c=p.cwd():(c=p.env[`=${i}`]||p.cwd(),(c===void 0||c.slice(0,2).toLowerCase()!==i.toLowerCase()&&c.charCodeAt(2)===h)&&(c=`${i}\\`));const g=c.length;let L=0,A="",M=!1;const R=c.charCodeAt(0);if(g===1)C(R)&&(L=1,M=!0);else if(C(R))if(M=!0,C(c.charCodeAt(1))){let D=2,T=D;for(;D2&&C(c.charCodeAt(2))&&(M=!0,L=3));if(A.length>0)if(i.length>0){if(A.toLowerCase()!==i.toLowerCase())continue}else i=A;if(b){if(i.length>0)break}else if(f=`${c.slice(L)}\\${f}`,b=M,M&&i.length>0)break}return f=m(f,!b,"\\",C),b?`${i}\\${f}`:`${i}${f}`||"."},normalize(o){v(o,"path");const i=o.length;if(i===0)return".";let f=0,b,N=!1;const c=o.charCodeAt(0);if(i===1)return n(c)?"\\":o;if(C(c))if(N=!0,C(o.charCodeAt(1))){let L=2,A=L;for(;L2&&C(o.charCodeAt(2))&&(N=!0,f=3));let g=f0&&C(o.charCodeAt(i-1))&&(g+="\\"),b===void 0?N?`\\${g}`:g:N?`${b}\\${g}`:`${b}${g}`},isAbsolute(o){v(o,"path");const i=o.length;if(i===0)return!1;const f=o.charCodeAt(0);return C(f)||i>2&&r(f)&&o.charCodeAt(1)===w&&C(o.charCodeAt(2))},join(...o){if(o.length===0)return".";let i,f;for(let c=0;c0&&(i===void 0?i=f=g:i+=`\\${g}`)}if(i===void 0)return".";let b=!0,N=0;if(typeof f=="string"&&C(f.charCodeAt(0))){++N;const c=f.length;c>1&&C(f.charCodeAt(1))&&(++N,c>2&&(C(f.charCodeAt(2))?++N:b=!1))}if(b){for(;N=2&&(i=`\\${i.slice(N)}`)}return t.win32.normalize(i)},relative(o,i){if(v(o,"from"),v(i,"to"),o===i)return"";const f=t.win32.resolve(o),b=t.win32.resolve(i);if(f===b||(o=f.toLowerCase(),i=b.toLowerCase(),o===i))return"";let N=0;for(;NN&&o.charCodeAt(c-1)===h;)c--;const g=c-N;let L=0;for(;LL&&i.charCodeAt(A-1)===h;)A--;const M=A-L,R=gR){if(i.charCodeAt(L+T)===h)return b.slice(L+T+1);if(T===2)return b.slice(L+T)}g>R&&(o.charCodeAt(N+T)===h?D=T:T===2&&(D=3)),D===-1&&(D=0)}let $="";for(T=N+D+1;T<=c;++T)(T===c||o.charCodeAt(T)===h)&&($+=$.length===0?"..":"\\..");return L+=D,$.length>0?`${$}${b.slice(L,A)}`:(b.charCodeAt(L)===h&&++L,b.slice(L,A))},toNamespacedPath(o){if(typeof o!="string")return o;if(o.length===0)return"";const i=t.win32.resolve(o);if(i.length<=2)return o;if(i.charCodeAt(0)===h){if(i.charCodeAt(1)===h){const f=i.charCodeAt(2);if(f!==a&&f!==l)return`\\\\?\\UNC\\${i.slice(2)}`}}else if(r(i.charCodeAt(0))&&i.charCodeAt(1)===w&&i.charCodeAt(2)===h)return`\\\\?\\${i}`;return o},dirname(o){v(o,"path");const i=o.length;if(i===0)return".";let f=-1,b=0;const N=o.charCodeAt(0);if(i===1)return C(N)?o:".";if(C(N)){if(f=b=1,C(o.charCodeAt(1))){let L=2,A=L;for(;L2&&C(o.charCodeAt(2))?3:2,b=f);let c=-1,g=!0;for(let L=i-1;L>=b;--L)if(C(o.charCodeAt(L))){if(!g){c=L;break}}else g=!1;if(c===-1){if(f===-1)return".";c=f}return o.slice(0,c)},basename(o,i){i!==void 0&&v(i,"ext"),v(o,"path");let f=0,b=-1,N=!0,c;if(o.length>=2&&r(o.charCodeAt(0))&&o.charCodeAt(1)===w&&(f=2),i!==void 0&&i.length>0&&i.length<=o.length){if(i===o)return"";let g=i.length-1,L=-1;for(c=o.length-1;c>=f;--c){const A=o.charCodeAt(c);if(C(A)){if(!N){f=c+1;break}}else L===-1&&(N=!1,L=c+1),g>=0&&(A===i.charCodeAt(g)?--g==-1&&(b=c):(g=-1,b=L))}return f===b?b=L:b===-1&&(b=o.length),o.slice(f,b)}for(c=o.length-1;c>=f;--c)if(C(o.charCodeAt(c))){if(!N){f=c+1;break}}else b===-1&&(N=!1,b=c+1);return b===-1?"":o.slice(f,b)},extname(o){v(o,"path");let i=0,f=-1,b=0,N=-1,c=!0,g=0;o.length>=2&&o.charCodeAt(1)===w&&r(o.charCodeAt(0))&&(i=b=2);for(let L=o.length-1;L>=i;--L){const A=o.charCodeAt(L);if(C(A)){if(!c){b=L+1;break}continue}N===-1&&(c=!1,N=L+1),A===l?f===-1?f=L:g!==1&&(g=1):f!==-1&&(g=-1)}return f===-1||N===-1||g===0||g===1&&f===N-1&&f===b+1?"":o.slice(f,N)},format:_.bind(null,"\\"),parse(o){v(o,"path");const i={root:"",dir:"",base:"",ext:"",name:""};if(o.length===0)return i;const f=o.length;let b=0,N=o.charCodeAt(0);if(f===1)return C(N)?(i.root=i.dir=o,i):(i.base=i.name=o,i);if(C(N)){if(b=1,C(o.charCodeAt(1))){let D=2,T=D;for(;D0&&(i.root=o.slice(0,b));let c=-1,g=b,L=-1,A=!0,M=o.length-1,R=0;for(;M>=b;--M){if(N=o.charCodeAt(M),C(N)){if(!A){g=M+1;break}continue}L===-1&&(A=!1,L=M+1),N===l?c===-1?c=M:R!==1&&(R=1):c!==-1&&(R=-1)}return L!==-1&&(c===-1||R===0||R===1&&c===L-1&&c===g+1?i.base=i.name=o.slice(g,L):(i.name=o.slice(g,c),i.base=o.slice(g,L),i.ext=o.slice(c,L))),g>0&&g!==b?i.dir=o.slice(0,g-1):i.dir=i.root,i},sep:"\\",delimiter:";",win32:null,posix:null},t.posix={resolve(...o){let i="",f=!1;for(let b=o.length-1;b>=-1&&!f;b--){const N=b>=0?o[b]:p.cwd();v(N,"path"),N.length!==0&&(i=`${N}/${i}`,f=N.charCodeAt(0)===s)}return i=m(i,!f,"/",n),f?`/${i}`:i.length>0?i:"."},normalize(o){if(v(o,"path"),o.length===0)return".";const i=o.charCodeAt(0)===s,f=o.charCodeAt(o.length-1)===s;return o=m(o,!i,"/",n),o.length===0?i?"/":f?"./":".":(f&&(o+="/"),i?`/${o}`:o)},isAbsolute(o){return v(o,"path"),o.length>0&&o.charCodeAt(0)===s},join(...o){if(o.length===0)return".";let i;for(let f=0;f0&&(i===void 0?i=b:i+=`/${b}`)}return i===void 0?".":t.posix.normalize(i)},relative(o,i){if(v(o,"from"),v(i,"to"),o===i||(o=t.posix.resolve(o),i=t.posix.resolve(i),o===i))return"";const f=1,b=o.length,N=b-f,c=1,g=i.length-c,L=NL){if(i.charCodeAt(c+M)===s)return i.slice(c+M+1);if(M===0)return i.slice(c+M)}else N>L&&(o.charCodeAt(f+M)===s?A=M:M===0&&(A=0));let R="";for(M=f+A+1;M<=b;++M)(M===b||o.charCodeAt(M)===s)&&(R+=R.length===0?"..":"/..");return`${R}${i.slice(c+A)}`},toNamespacedPath(o){return o},dirname(o){if(v(o,"path"),o.length===0)return".";const i=o.charCodeAt(0)===s;let f=-1,b=!0;for(let N=o.length-1;N>=1;--N)if(o.charCodeAt(N)===s){if(!b){f=N;break}}else b=!1;return f===-1?i?"/":".":i&&f===1?"//":o.slice(0,f)},basename(o,i){i!==void 0&&v(i,"ext"),v(o,"path");let f=0,b=-1,N=!0,c;if(i!==void 0&&i.length>0&&i.length<=o.length){if(i===o)return"";let g=i.length-1,L=-1;for(c=o.length-1;c>=0;--c){const A=o.charCodeAt(c);if(A===s){if(!N){f=c+1;break}}else L===-1&&(N=!1,L=c+1),g>=0&&(A===i.charCodeAt(g)?--g==-1&&(b=c):(g=-1,b=L))}return f===b?b=L:b===-1&&(b=o.length),o.slice(f,b)}for(c=o.length-1;c>=0;--c)if(o.charCodeAt(c)===s){if(!N){f=c+1;break}}else b===-1&&(N=!1,b=c+1);return b===-1?"":o.slice(f,b)},extname(o){v(o,"path");let i=-1,f=0,b=-1,N=!0,c=0;for(let g=o.length-1;g>=0;--g){const L=o.charCodeAt(g);if(L===s){if(!N){f=g+1;break}continue}b===-1&&(N=!1,b=g+1),L===l?i===-1?i=g:c!==1&&(c=1):i!==-1&&(c=-1)}return i===-1||b===-1||c===0||c===1&&i===b-1&&i===f+1?"":o.slice(i,b)},format:_.bind(null,"/"),parse(o){v(o,"path");const i={root:"",dir:"",base:"",ext:"",name:""};if(o.length===0)return i;const f=o.charCodeAt(0)===s;let b;f?(i.root="/",b=1):b=0;let N=-1,c=0,g=-1,L=!0,A=o.length-1,M=0;for(;A>=b;--A){const R=o.charCodeAt(A);if(R===s){if(!L){c=A+1;break}continue}g===-1&&(L=!1,g=A+1),R===l?N===-1?N=A:M!==1&&(M=1):N!==-1&&(M=-1)}if(g!==-1){const R=c===0&&f?1:c;N===-1||M===0||M===1&&N===g-1&&N===c+1?i.base=i.name=o.slice(R,g):(i.name=o.slice(R,N),i.base=o.slice(R,g),i.ext=o.slice(N,g))}return c>0?i.dir=o.slice(0,c-1):f&&(i.dir="/"),i},sep:"/",delimiter:":",win32:null,posix:null},t.posix.win32=t.win32.win32=t.win32,t.posix.posix=t.win32.posix=t.posix,t.normalize=p.platform==="win32"?t.win32.normalize:t.posix.normalize,t.resolve=p.platform==="win32"?t.win32.resolve:t.posix.resolve,t.relative=p.platform==="win32"?t.win32.relative:t.posix.relative,t.dirname=p.platform==="win32"?t.win32.dirname:t.posix.dirname,t.basename=p.platform==="win32"?t.win32.basename:t.posix.basename,t.extname=p.platform==="win32"?t.win32.extname:t.posix.extname,t.sep=p.platform==="win32"?t.win32.sep:t.posix.sep}),V(z[8],G([0,1,2]),function(I,t,p){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.StopWatch=void 0;const P=p.globals.performance&&typeof p.globals.performance.now=="function";class E{constructor(d){this._highResolution=P&&d,this._startTime=this._now(),this._stopTime=-1}static create(d=!0){return new E(d)}stop(){this._stopTime=this._now()}elapsed(){return this._stopTime!==-1?this._stopTime-this._startTime:this._now()-this._startTime}_now(){return this._highResolution?p.globals.performance.now():Date.now()}}t.StopWatch=E}),V(z[9],G([0,1,4,7,18,8]),function(I,t,p,P,E,u){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Relay=t.EventBufferer=t.PauseableEmitter=t.Emitter=t.Event=void 0;var d;(function(C){C.None=()=>P.Disposable.None;function n(k){return(F,O=null,e)=>{let H=!1,B;return B=k(Q=>{if(!H)return B?B.dispose():H=!0,F.call(O,Q)},null,e),H&&B.dispose(),B}}C.once=n;function r(k,F){return b((O,e=null,H)=>k(B=>O.call(e,F(B)),null,H))}C.map=r;function m(k,F){return b((O,e=null,H)=>k(B=>{F(B),O.call(e,B)},null,H))}C.forEach=m;function _(k,F){return b((O,e=null,H)=>k(B=>F(B)&&O.call(e,B),null,H))}C.filter=_;function o(k){return k}C.signal=o;function i(...k){return(F,O=null,e)=>P.combinedDisposable(...k.map(H=>H(B=>F.call(O,B),null,e)))}C.any=i;function f(k,F,O){let e=O;return r(k,H=>(e=F(e,H),e))}C.reduce=f;function b(k){let F;const O=new w({onFirstListenerAdd(){F=k(O.fire,O)},onLastListenerRemove(){F.dispose()}});return O.event}C.snapshot=b;function N(k,F,O=100,e=!1,H){let B,Q,Z,ie=0;const re=new w({leakWarningThreshold:H,onFirstListenerAdd(){B=k(se=>{ie++,Q=F(Q,se),e&&!Z&&(re.fire(Q),Q=void 0),clearTimeout(Z),Z=setTimeout(()=>{const le=Q;Q=void 0,Z=void 0,(!e||ie>1)&&re.fire(le),ie=0},O)})},onLastListenerRemove(){B.dispose()}});return re.event}C.debounce=N;function c(k){const F=new Date().getTime();return r(n(k),O=>new Date().getTime()-F)}C.stopwatch=c;function g(k){let F=!0,O;return _(k,e=>{const H=F||e!==O;return F=!1,O=e,H})}C.latch=g;function L(k,F=!1,O=[]){let e=O.slice(),H=k(Z=>{e?e.push(Z):Q.fire(Z)});const B=()=>{e&&e.forEach(Z=>Q.fire(Z)),e=null},Q=new w({onFirstListenerAdd(){H||(H=k(Z=>Q.fire(Z)))},onFirstListenerDidAdd(){e&&(F?setTimeout(B):B())},onLastListenerRemove(){H&&H.dispose(),H=null}});return Q.event}C.buffer=L;class A{constructor(F){this.event=F}map(F){return new A(r(this.event,F))}forEach(F){return new A(m(this.event,F))}filter(F){return new A(_(this.event,F))}reduce(F,O){return new A(f(this.event,F,O))}latch(){return new A(g(this.event))}debounce(F,O=100,e=!1,H){return new A(N(this.event,F,O,e,H))}on(F,O,e){return this.event(F,O,e)}once(F,O,e){return n(this.event)(F,O,e)}}function M(k){return new A(k)}C.chain=M;function R(k,F,O=e=>e){const e=(...Z)=>Q.fire(O(...Z)),H=()=>k.on(F,e),B=()=>k.removeListener(F,e),Q=new w({onFirstListenerAdd:H,onLastListenerRemove:B});return Q.event}C.fromNodeEventEmitter=R;function D(k,F,O=e=>e){const e=(...Z)=>Q.fire(O(...Z)),H=()=>k.addEventListener(F,e),B=()=>k.removeEventListener(F,e),Q=new w({onFirstListenerAdd:H,onLastListenerRemove:B});return Q.event}C.fromDOMEventEmitter=D;function T(k){const F=new w;let O=!1;return k.then(void 0,()=>null).then(()=>{O?F.fire(void 0):setTimeout(()=>F.fire(void 0),0)}),O=!0,F.event}C.fromPromise=T;function $(k){return new Promise(F=>n(k)(F))}C.toPromise=$})(d=t.Event||(t.Event={}));class l{constructor(n){this._listenerCount=0,this._invocationCount=0,this._elapsedOverall=0,this._name=`${n}_${l._idPool++}`}start(n){this._stopWatch=new u.StopWatch(!0),this._listenerCount=n}stop(){if(this._stopWatch){const n=this._stopWatch.elapsed();this._elapsedOverall+=n,this._invocationCount+=1,console.info(`did FIRE ${this._name}: elapsed_ms: ${n.toFixed(5)}, listener: ${this._listenerCount} (elapsed_overall: ${this._elapsedOverall.toFixed(2)}, invocations: ${this._invocationCount})`),this._stopWatch=void 0}}}l._idPool=0;let s=-1;class h{constructor(n,r=Math.random().toString(18).slice(2,5)){this.customThreshold=n,this.name=r,this._warnCountdown=0}dispose(){this._stacks&&this._stacks.clear()}check(n){let r=s;if(typeof this.customThreshold=="number"&&(r=this.customThreshold),!(r<=0||n{const o=this._stacks.get(m)||0;this._stacks.set(m,o-1)}}}}class w{constructor(n){var r;this._disposed=!1,this._options=n,this._leakageMon=s>0?new h(this._options&&this._options.leakWarningThreshold):void 0,this._perfMon=((r=this._options)===null||r===void 0?void 0:r._profName)?new l(this._options._profName):void 0}get event(){return this._event||(this._event=(n,r,m)=>{var _;this._listeners||(this._listeners=new E.LinkedList);const o=this._listeners.isEmpty();o&&this._options&&this._options.onFirstListenerAdd&&this._options.onFirstListenerAdd(this);const i=this._listeners.push(r?[n,r]:n);o&&this._options&&this._options.onFirstListenerDidAdd&&this._options.onFirstListenerDidAdd(this),this._options&&this._options.onListenerDidAdd&&this._options.onListenerDidAdd(this,n,r);const f=(_=this._leakageMon)===null||_===void 0?void 0:_.check(this._listeners.size);let b;return b={dispose:()=>{f&&f(),b.dispose=w._noop,this._disposed||(i(),this._options&&this._options.onLastListenerRemove&&(this._listeners&&!this._listeners.isEmpty()||this._options.onLastListenerRemove(this)))}},m instanceof P.DisposableStore?m.add(b):Array.isArray(m)&&m.push(b),b}),this._event}fire(n){var r,m;if(this._listeners){this._deliveryQueue||(this._deliveryQueue=new E.LinkedList);for(let _ of this._listeners)this._deliveryQueue.push([_,n]);for((r=this._perfMon)===null||r===void 0||r.start(this._deliveryQueue.size);this._deliveryQueue.size>0;){const[_,o]=this._deliveryQueue.shift();try{typeof _=="function"?_.call(void 0,o):_[0].call(_[1],o)}catch(i){p.onUnexpectedError(i)}}(m=this._perfMon)===null||m===void 0||m.stop()}}dispose(){var n,r,m;(n=this._listeners)===null||n===void 0||n.clear(),(r=this._deliveryQueue)===null||r===void 0||r.clear(),(m=this._leakageMon)===null||m===void 0||m.dispose(),this._disposed=!0}}t.Emitter=w,w._noop=function(){};class a extends w{constructor(n){super(n);this._isPaused=0,this._eventQueue=new E.LinkedList,this._mergeFn=n==null?void 0:n.merge}pause(){this._isPaused++}resume(){if(this._isPaused!==0&&--this._isPaused==0)if(this._mergeFn){const n=Array.from(this._eventQueue);this._eventQueue.clear(),super.fire(this._mergeFn(n))}else for(;!this._isPaused&&this._eventQueue.size!==0;)super.fire(this._eventQueue.shift())}fire(n){this._listeners&&(this._isPaused!==0?this._eventQueue.push(n):super.fire(n))}}t.PauseableEmitter=a;class S{constructor(){this.buffers=[]}wrapEvent(n){return(r,m,_)=>n(o=>{const i=this.buffers[this.buffers.length-1];i?i.push(()=>r.call(m,o)):r.call(m,o)},void 0,_)}bufferEvents(n){const r=[];this.buffers.push(r);const m=n();return this.buffers.pop(),r.forEach(_=>_()),m}}t.EventBufferer=S;class v{constructor(){this.listening=!1,this.inputEvent=d.None,this.inputEventListener=P.Disposable.None,this.emitter=new w({onFirstListenerDidAdd:()=>{this.listening=!0,this.inputEventListener=this.inputEvent(this.emitter.fire,this.emitter)},onLastListenerRemove:()=>{this.listening=!1,this.inputEventListener.dispose()}}),this.event=this.emitter.event}set input(n){this.inputEvent=n,this.listening&&(this.inputEventListener.dispose(),this.inputEventListener=n(this.emitter.fire,this.emitter))}dispose(){this.inputEventListener.dispose(),this.emitter.dispose()}}t.Relay=v}),V(z[21],G([0,1,9]),function(I,t,p){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CancellationTokenSource=t.CancellationToken=void 0;const P=Object.freeze(function(l,s){const h=setTimeout(l.bind(s),0);return{dispose(){clearTimeout(h)}}});var E;(function(l){function s(h){return h===l.None||h===l.Cancelled||h instanceof u?!0:!h||typeof h!="object"?!1:typeof h.isCancellationRequested=="boolean"&&typeof h.onCancellationRequested=="function"}l.isCancellationToken=s,l.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:p.Event.None}),l.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:P})})(E=t.CancellationToken||(t.CancellationToken={}));class u{constructor(){this._isCancelled=!1,this._emitter=null}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?P:(this._emitter||(this._emitter=new p.Emitter),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=null)}}class d{constructor(s){this._token=void 0,this._parentListener=void 0,this._parentListener=s&&s.onCancellationRequested(this.cancel,this)}get token(){return this._token||(this._token=new u),this._token}cancel(){this._token?this._token instanceof u&&this._token.cancel():this._token=E.Cancelled}dispose(s=!1){s&&this.cancel(),this._parentListener&&this._parentListener.dispose(),this._token?this._token instanceof u&&this._token.dispose():this._token=E.None}}t.CancellationTokenSource=d}),V(z[5],G([0,1]),function(I,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.breakBetweenGraphemeBreakType=t.getGraphemeBreakType=t.singleLetterHash=t.containsUppercaseCharacter=t.startsWithUTF8BOM=t.UTF8_BOM_CHARACTER=t.isEmojiImprecise=t.isFullWidthCharacter=t.containsFullWidthCharacter=t.containsUnusualLineTerminators=t.UNUSUAL_LINE_TERMINATORS=t.isBasicASCII=t.containsEmoji=t.containsRTL=t.decodeUTF8=t.prevCharLength=t.nextCharLength=t.getNextCodePoint=t.computeCodePoint=t.isLowSurrogate=t.isHighSurrogate=t.commonSuffixLength=t.commonPrefixLength=t.startsWithIgnoreCase=t.equalsIgnoreCase=t.isUpperAsciiLetter=t.isLowerAsciiLetter=t.compareSubstringIgnoreCase=t.compareIgnoreCase=t.compareSubstring=t.compare=t.lastNonWhitespaceIndex=t.getLeadingWhitespace=t.firstNonWhitespaceIndex=t.splitLines=t.regExpFlags=t.regExpLeadsToEndlessLoop=t.createRegExp=t.stripWildcards=t.convertSimple2RegExpPattern=t.rtrim=t.ltrim=t.trim=t.escapeRegExpCharacters=t.escape=t.format=t.isFalsyOrWhitespace=void 0;function p(y){return!y||typeof y!="string"?!0:y.trim().length===0}t.isFalsyOrWhitespace=p;const P=/{(\d+)}/g;function E(y,...U){return U.length===0?y:y.replace(P,function(W,q){const j=parseInt(q,10);return isNaN(j)||j<0||j>=U.length?W:U[j]})}t.format=E;function u(y){return y.replace(/[<>&]/g,function(U){switch(U){case"<":return"<";case">":return">";case"&":return"&";default:return U}})}t.escape=u;function d(y){return y.replace(/[\\\{\}\*\+\?\|\^\$\.\[\]\(\)]/g,"\\$&")}t.escapeRegExpCharacters=d;function l(y,U=" "){const W=s(y,U);return h(W,U)}t.trim=l;function s(y,U){if(!y||!U)return y;const W=U.length;if(W===0||y.length===0)return y;let q=0;for(;y.indexOf(U,q)===q;)q=q+W;return y.substring(q)}t.ltrim=s;function h(y,U){if(!y||!U)return y;const W=U.length,q=y.length;if(W===0||q===0)return y;let j=q,Y=-1;for(;Y=y.lastIndexOf(U,j-1),!(Y===-1||Y+W!==j);){if(Y===0)return"";j=Y}return y.substring(0,j)}t.rtrim=h;function w(y){return y.replace(/[\-\\\{\}\+\?\|\^\$\.\,\[\]\(\)\#\s]/g,"\\$&").replace(/[\*]/g,".*")}t.convertSimple2RegExpPattern=w;function a(y){return y.replace(/\*/g,"")}t.stripWildcards=a;function S(y,U,W={}){if(!y)throw new Error("Cannot create regex from empty string");U||(y=d(y)),W.wholeWord&&(/\B/.test(y.charAt(0))||(y="\\b"+y),/\B/.test(y.charAt(y.length-1))||(y=y+"\\b"));let q="";return W.global&&(q+="g"),W.matchCase||(q+="i"),W.multiline&&(q+="m"),W.unicode&&(q+="u"),new RegExp(y,q)}t.createRegExp=S;function v(y){return y.source==="^"||y.source==="^$"||y.source==="$"||y.source==="^\\s*$"?!1:!!(y.exec("")&&y.lastIndex===0)}t.regExpLeadsToEndlessLoop=v;function C(y){return(y.global?"g":"")+(y.ignoreCase?"i":"")+(y.multiline?"m":"")+(y.unicode?"u":"")}t.regExpFlags=C;function n(y){return y.split(/\r\n|\r|\n/)}t.splitLines=n;function r(y){for(let U=0,W=y.length;U=0;W--){const q=y.charCodeAt(W);if(q!==32&&q!==9)return W}return-1}t.lastNonWhitespaceIndex=_;function o(y,U){return yU?1:0}t.compare=o;function i(y,U,W=0,q=y.length,j=0,Y=U.length){for(;Wte)return 1}const J=q-W,x=Y-j;return Jx?1:0}t.compareSubstring=i;function f(y,U){return b(y,U,0,y.length,0,U.length)}t.compareIgnoreCase=f;function b(y,U,W=0,q=y.length,j=0,Y=U.length){for(;Wx?1:0}t.compareSubstringIgnoreCase=b;function N(y){return y>=97&&y<=122}t.isLowerAsciiLetter=N;function c(y){return y>=65&&y<=90}t.isUpperAsciiLetter=c;function g(y){return N(y)||c(y)}function L(y,U){return y.length===U.length&&A(y,U)}t.equalsIgnoreCase=L;function A(y,U,W=y.length){for(let q=0;qy.length?!1:A(y,U,W)}t.startsWithIgnoreCase=M;function R(y,U){let W,q=Math.min(y.length,U.length);for(W=0;W1){const q=y.charCodeAt(U-2);if(T(q))return k(q,W)}return W}function e(y,U){const W=ee.getInstance(),q=U,j=y.length,Y=F(y,j,U);U+=Y>=65536?2:1;let J=W.getGraphemeBreakType(Y);for(;U=65536?2:1,J=K}return U-q}t.nextCharLength=e;function H(y,U){const W=ee.getInstance(),q=U,j=O(y,U);U-=j>=65536?2:1;let Y=W.getGraphemeBreakType(j);for(;U>0;){const J=O(y,U),x=W.getGraphemeBreakType(J);if(ue(x,Y))break;U-=J>=65536?2:1,Y=x}return q-U}t.prevCharLength=H;function B(y){const U=y.byteLength,W=[];let q=0;for(;q=240&&q+3>>0|(y[q++]&63)<<12>>>0|(y[q++]&63)<<6>>>0|(y[q++]&63)<<0>>>0:j>=224&&q+2>>0|(y[q++]&63)<<6>>>0|(y[q++]&63)<<0>>>0:j>=192&&q+1>>0|(y[q++]&63)<<0>>>0:Y=y[q++],Y>=0&&Y<=55295||Y>=57344&&Y<=65535)W.push(String.fromCharCode(Y));else if(Y>=65536&&Y<=1114111){const J=Y-65536,x=55296+((J&1047552)>>>10),K=56320+((J&1023)>>>0);W.push(String.fromCharCode(x)),W.push(String.fromCharCode(K))}else W.push(String.fromCharCode(65533))}return W.join("")}t.decodeUTF8=B;const Q=/(?:[\u05BE\u05C0\u05C3\u05C6\u05D0-\u05F4\u0608\u060B\u060D\u061B-\u064A\u066D-\u066F\u0671-\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u0710\u0712-\u072F\u074D-\u07A5\u07B1-\u07EA\u07F4\u07F5\u07FA-\u0815\u081A\u0824\u0828\u0830-\u0858\u085E-\u08BD\u200F\uFB1D\uFB1F-\uFB28\uFB2A-\uFD3D\uFD50-\uFDFC\uFE70-\uFEFC]|\uD802[\uDC00-\uDD1B\uDD20-\uDE00\uDE10-\uDE33\uDE40-\uDEE4\uDEEB-\uDF35\uDF40-\uDFFF]|\uD803[\uDC00-\uDCFF]|\uD83A[\uDC00-\uDCCF\uDD00-\uDD43\uDD50-\uDFFF]|\uD83B[\uDC00-\uDEBB])/;function Z(y){return Q.test(y)}t.containsRTL=Z;const ie=/(?:[\u231A\u231B\u23F0\u23F3\u2600-\u27BF\u2B50\u2B55]|\uD83C[\uDDE6-\uDDFF\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F\uDE80-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD00-\uDDFF\uDE70-\uDED6])/;function re(y){return ie.test(y)}t.containsEmoji=re;const se=/^[\t\n\r\x20-\x7E]*$/;function le(y){return se.test(y)}t.isBasicASCII=le,t.UNUSUAL_LINE_TERMINATORS=/[\u2028\u2029]/;function he(y){return t.UNUSUAL_LINE_TERMINATORS.test(y)}t.containsUnusualLineTerminators=he;function de(y){for(let U=0,W=y.length;U=11904&&y<=55215||y>=63744&&y<=64255||y>=65281&&y<=65374}t.isFullWidthCharacter=ae;function me(y){return y>=127462&&y<=127487||y===8986||y===8987||y===9200||y===9203||y>=9728&&y<=10175||y===11088||y===11093||y>=127744&&y<=128591||y>=128640&&y<=128764||y>=128992&&y<=129003||y>=129280&&y<=129535||y>=129648&&y<=129750}t.isEmojiImprecise=me,t.UTF8_BOM_CHARACTER=String.fromCharCode(65279);function ge(y){return!!(y&&y.length>0&&y.charCodeAt(0)===65279)}t.startsWithUTF8BOM=ge;function _e(y,U=!1){return y?(U&&(y=y.replace(/\\./g,"")),y.toLowerCase()!==y):!1}t.containsUppercaseCharacter=_e;function ve(y){const U=90-65+1;return y=y%(2*U),yW[3*j+1])j=2*j+1;else return W[3*j+2];return 0}}ee._INSTANCE=null;function be(){return JSON.parse("[0,0,0,51592,51592,11,44424,44424,11,72251,72254,5,7150,7150,7,48008,48008,11,55176,55176,11,128420,128420,14,3276,3277,5,9979,9980,14,46216,46216,11,49800,49800,11,53384,53384,11,70726,70726,5,122915,122916,5,129320,129327,14,2558,2558,5,5906,5908,5,9762,9763,14,43360,43388,8,45320,45320,11,47112,47112,11,48904,48904,11,50696,50696,11,52488,52488,11,54280,54280,11,70082,70083,1,71350,71350,7,73111,73111,5,127892,127893,14,128726,128727,14,129473,129474,14,2027,2035,5,2901,2902,5,3784,3789,5,6754,6754,5,8418,8420,5,9877,9877,14,11088,11088,14,44008,44008,5,44872,44872,11,45768,45768,11,46664,46664,11,47560,47560,11,48456,48456,11,49352,49352,11,50248,50248,11,51144,51144,11,52040,52040,11,52936,52936,11,53832,53832,11,54728,54728,11,69811,69814,5,70459,70460,5,71096,71099,7,71998,71998,5,72874,72880,5,119149,119149,7,127374,127374,14,128335,128335,14,128482,128482,14,128765,128767,14,129399,129400,14,129680,129685,14,1476,1477,5,2377,2380,7,2759,2760,5,3137,3140,7,3458,3459,7,4153,4154,5,6432,6434,5,6978,6978,5,7675,7679,5,9723,9726,14,9823,9823,14,9919,9923,14,10035,10036,14,42736,42737,5,43596,43596,5,44200,44200,11,44648,44648,11,45096,45096,11,45544,45544,11,45992,45992,11,46440,46440,11,46888,46888,11,47336,47336,11,47784,47784,11,48232,48232,11,48680,48680,11,49128,49128,11,49576,49576,11,50024,50024,11,50472,50472,11,50920,50920,11,51368,51368,11,51816,51816,11,52264,52264,11,52712,52712,11,53160,53160,11,53608,53608,11,54056,54056,11,54504,54504,11,54952,54952,11,68108,68111,5,69933,69940,5,70197,70197,7,70498,70499,7,70845,70845,5,71229,71229,5,71727,71735,5,72154,72155,5,72344,72345,5,73023,73029,5,94095,94098,5,121403,121452,5,126981,127182,14,127538,127546,14,127990,127990,14,128391,128391,14,128445,128449,14,128500,128505,14,128752,128752,14,129160,129167,14,129356,129356,14,129432,129442,14,129648,129651,14,129751,131069,14,173,173,4,1757,1757,1,2274,2274,1,2494,2494,5,2641,2641,5,2876,2876,5,3014,3016,7,3262,3262,7,3393,3396,5,3570,3571,7,3968,3972,5,4228,4228,7,6086,6086,5,6679,6680,5,6912,6915,5,7080,7081,5,7380,7392,5,8252,8252,14,9096,9096,14,9748,9749,14,9784,9786,14,9833,9850,14,9890,9894,14,9938,9938,14,9999,9999,14,10085,10087,14,12349,12349,14,43136,43137,7,43454,43456,7,43755,43755,7,44088,44088,11,44312,44312,11,44536,44536,11,44760,44760,11,44984,44984,11,45208,45208,11,45432,45432,11,45656,45656,11,45880,45880,11,46104,46104,11,46328,46328,11,46552,46552,11,46776,46776,11,47000,47000,11,47224,47224,11,47448,47448,11,47672,47672,11,47896,47896,11,48120,48120,11,48344,48344,11,48568,48568,11,48792,48792,11,49016,49016,11,49240,49240,11,49464,49464,11,49688,49688,11,49912,49912,11,50136,50136,11,50360,50360,11,50584,50584,11,50808,50808,11,51032,51032,11,51256,51256,11,51480,51480,11,51704,51704,11,51928,51928,11,52152,52152,11,52376,52376,11,52600,52600,11,52824,52824,11,53048,53048,11,53272,53272,11,53496,53496,11,53720,53720,11,53944,53944,11,54168,54168,11,54392,54392,11,54616,54616,11,54840,54840,11,55064,55064,11,65438,65439,5,69633,69633,5,69837,69837,1,70018,70018,7,70188,70190,7,70368,70370,7,70465,70468,7,70712,70719,5,70835,70840,5,70850,70851,5,71132,71133,5,71340,71340,7,71458,71461,5,71985,71989,7,72002,72002,7,72193,72202,5,72281,72283,5,72766,72766,7,72885,72886,5,73104,73105,5,92912,92916,5,113824,113827,4,119173,119179,5,121505,121519,5,125136,125142,5,127279,127279,14,127489,127490,14,127570,127743,14,127900,127901,14,128254,128254,14,128369,128370,14,128400,128400,14,128425,128432,14,128468,128475,14,128489,128494,14,128715,128720,14,128745,128745,14,128759,128760,14,129004,129023,14,129296,129304,14,129340,129342,14,129388,129392,14,129404,129407,14,129454,129455,14,129485,129487,14,129659,129663,14,129719,129727,14,917536,917631,5,13,13,2,1160,1161,5,1564,1564,4,1807,1807,1,2085,2087,5,2363,2363,7,2402,2403,5,2507,2508,7,2622,2624,7,2691,2691,7,2786,2787,5,2881,2884,5,3006,3006,5,3072,3072,5,3170,3171,5,3267,3268,7,3330,3331,7,3406,3406,1,3538,3540,5,3655,3662,5,3897,3897,5,4038,4038,5,4184,4185,5,4352,4447,8,6068,6069,5,6155,6157,5,6448,6449,7,6742,6742,5,6783,6783,5,6966,6970,5,7042,7042,7,7143,7143,7,7212,7219,5,7412,7412,5,8206,8207,4,8294,8303,4,8596,8601,14,9410,9410,14,9742,9742,14,9757,9757,14,9770,9770,14,9794,9794,14,9828,9828,14,9855,9855,14,9882,9882,14,9900,9903,14,9929,9933,14,9963,9967,14,9987,9988,14,10006,10006,14,10062,10062,14,10175,10175,14,11744,11775,5,42607,42607,5,43043,43044,7,43263,43263,5,43444,43445,7,43569,43570,5,43698,43700,5,43766,43766,5,44032,44032,11,44144,44144,11,44256,44256,11,44368,44368,11,44480,44480,11,44592,44592,11,44704,44704,11,44816,44816,11,44928,44928,11,45040,45040,11,45152,45152,11,45264,45264,11,45376,45376,11,45488,45488,11,45600,45600,11,45712,45712,11,45824,45824,11,45936,45936,11,46048,46048,11,46160,46160,11,46272,46272,11,46384,46384,11,46496,46496,11,46608,46608,11,46720,46720,11,46832,46832,11,46944,46944,11,47056,47056,11,47168,47168,11,47280,47280,11,47392,47392,11,47504,47504,11,47616,47616,11,47728,47728,11,47840,47840,11,47952,47952,11,48064,48064,11,48176,48176,11,48288,48288,11,48400,48400,11,48512,48512,11,48624,48624,11,48736,48736,11,48848,48848,11,48960,48960,11,49072,49072,11,49184,49184,11,49296,49296,11,49408,49408,11,49520,49520,11,49632,49632,11,49744,49744,11,49856,49856,11,49968,49968,11,50080,50080,11,50192,50192,11,50304,50304,11,50416,50416,11,50528,50528,11,50640,50640,11,50752,50752,11,50864,50864,11,50976,50976,11,51088,51088,11,51200,51200,11,51312,51312,11,51424,51424,11,51536,51536,11,51648,51648,11,51760,51760,11,51872,51872,11,51984,51984,11,52096,52096,11,52208,52208,11,52320,52320,11,52432,52432,11,52544,52544,11,52656,52656,11,52768,52768,11,52880,52880,11,52992,52992,11,53104,53104,11,53216,53216,11,53328,53328,11,53440,53440,11,53552,53552,11,53664,53664,11,53776,53776,11,53888,53888,11,54000,54000,11,54112,54112,11,54224,54224,11,54336,54336,11,54448,54448,11,54560,54560,11,54672,54672,11,54784,54784,11,54896,54896,11,55008,55008,11,55120,55120,11,64286,64286,5,66272,66272,5,68900,68903,5,69762,69762,7,69817,69818,5,69927,69931,5,70003,70003,5,70070,70078,5,70094,70094,7,70194,70195,7,70206,70206,5,70400,70401,5,70463,70463,7,70475,70477,7,70512,70516,5,70722,70724,5,70832,70832,5,70842,70842,5,70847,70848,5,71088,71089,7,71102,71102,7,71219,71226,5,71231,71232,5,71342,71343,7,71453,71455,5,71463,71467,5,71737,71738,5,71995,71996,5,72000,72000,7,72145,72147,7,72160,72160,5,72249,72249,7,72273,72278,5,72330,72342,5,72752,72758,5,72850,72871,5,72882,72883,5,73018,73018,5,73031,73031,5,73109,73109,5,73461,73462,7,94031,94031,5,94192,94193,7,119142,119142,7,119155,119162,4,119362,119364,5,121476,121476,5,122888,122904,5,123184,123190,5,126976,126979,14,127184,127231,14,127344,127345,14,127405,127461,14,127514,127514,14,127561,127567,14,127778,127779,14,127896,127896,14,127985,127986,14,127995,127999,5,128326,128328,14,128360,128366,14,128378,128378,14,128394,128397,14,128405,128406,14,128422,128423,14,128435,128443,14,128453,128464,14,128479,128480,14,128484,128487,14,128496,128498,14,128640,128709,14,128723,128724,14,128736,128741,14,128747,128748,14,128755,128755,14,128762,128762,14,128981,128991,14,129096,129103,14,129292,129292,14,129311,129311,14,129329,129330,14,129344,129349,14,129360,129374,14,129394,129394,14,129402,129402,14,129413,129425,14,129445,129450,14,129466,129471,14,129483,129483,14,129511,129535,14,129653,129655,14,129667,129670,14,129705,129711,14,129731,129743,14,917505,917505,4,917760,917999,5,10,10,3,127,159,4,768,879,5,1471,1471,5,1536,1541,1,1648,1648,5,1767,1768,5,1840,1866,5,2070,2073,5,2137,2139,5,2307,2307,7,2366,2368,7,2382,2383,7,2434,2435,7,2497,2500,5,2519,2519,5,2563,2563,7,2631,2632,5,2677,2677,5,2750,2752,7,2763,2764,7,2817,2817,5,2879,2879,5,2891,2892,7,2914,2915,5,3008,3008,5,3021,3021,5,3076,3076,5,3146,3149,5,3202,3203,7,3264,3265,7,3271,3272,7,3298,3299,5,3390,3390,5,3402,3404,7,3426,3427,5,3535,3535,5,3544,3550,7,3635,3635,7,3763,3763,7,3893,3893,5,3953,3966,5,3981,3991,5,4145,4145,7,4157,4158,5,4209,4212,5,4237,4237,5,4520,4607,10,5970,5971,5,6071,6077,5,6089,6099,5,6277,6278,5,6439,6440,5,6451,6456,7,6683,6683,5,6744,6750,5,6765,6770,7,6846,6846,5,6964,6964,5,6972,6972,5,7019,7027,5,7074,7077,5,7083,7085,5,7146,7148,7,7154,7155,7,7222,7223,5,7394,7400,5,7416,7417,5,8204,8204,5,8233,8233,4,8288,8292,4,8413,8416,5,8482,8482,14,8986,8987,14,9193,9203,14,9654,9654,14,9733,9733,14,9745,9745,14,9752,9752,14,9760,9760,14,9766,9766,14,9774,9775,14,9792,9792,14,9800,9811,14,9825,9826,14,9831,9831,14,9852,9853,14,9872,9873,14,9880,9880,14,9885,9887,14,9896,9897,14,9906,9916,14,9926,9927,14,9936,9936,14,9941,9960,14,9974,9974,14,9982,9985,14,9992,9997,14,10002,10002,14,10017,10017,14,10055,10055,14,10071,10071,14,10145,10145,14,11013,11015,14,11503,11505,5,12334,12335,5,12951,12951,14,42612,42621,5,43014,43014,5,43047,43047,7,43204,43205,5,43335,43345,5,43395,43395,7,43450,43451,7,43561,43566,5,43573,43574,5,43644,43644,5,43710,43711,5,43758,43759,7,44005,44005,5,44012,44012,7,44060,44060,11,44116,44116,11,44172,44172,11,44228,44228,11,44284,44284,11,44340,44340,11,44396,44396,11,44452,44452,11,44508,44508,11,44564,44564,11,44620,44620,11,44676,44676,11,44732,44732,11,44788,44788,11,44844,44844,11,44900,44900,11,44956,44956,11,45012,45012,11,45068,45068,11,45124,45124,11,45180,45180,11,45236,45236,11,45292,45292,11,45348,45348,11,45404,45404,11,45460,45460,11,45516,45516,11,45572,45572,11,45628,45628,11,45684,45684,11,45740,45740,11,45796,45796,11,45852,45852,11,45908,45908,11,45964,45964,11,46020,46020,11,46076,46076,11,46132,46132,11,46188,46188,11,46244,46244,11,46300,46300,11,46356,46356,11,46412,46412,11,46468,46468,11,46524,46524,11,46580,46580,11,46636,46636,11,46692,46692,11,46748,46748,11,46804,46804,11,46860,46860,11,46916,46916,11,46972,46972,11,47028,47028,11,47084,47084,11,47140,47140,11,47196,47196,11,47252,47252,11,47308,47308,11,47364,47364,11,47420,47420,11,47476,47476,11,47532,47532,11,47588,47588,11,47644,47644,11,47700,47700,11,47756,47756,11,47812,47812,11,47868,47868,11,47924,47924,11,47980,47980,11,48036,48036,11,48092,48092,11,48148,48148,11,48204,48204,11,48260,48260,11,48316,48316,11,48372,48372,11,48428,48428,11,48484,48484,11,48540,48540,11,48596,48596,11,48652,48652,11,48708,48708,11,48764,48764,11,48820,48820,11,48876,48876,11,48932,48932,11,48988,48988,11,49044,49044,11,49100,49100,11,49156,49156,11,49212,49212,11,49268,49268,11,49324,49324,11,49380,49380,11,49436,49436,11,49492,49492,11,49548,49548,11,49604,49604,11,49660,49660,11,49716,49716,11,49772,49772,11,49828,49828,11,49884,49884,11,49940,49940,11,49996,49996,11,50052,50052,11,50108,50108,11,50164,50164,11,50220,50220,11,50276,50276,11,50332,50332,11,50388,50388,11,50444,50444,11,50500,50500,11,50556,50556,11,50612,50612,11,50668,50668,11,50724,50724,11,50780,50780,11,50836,50836,11,50892,50892,11,50948,50948,11,51004,51004,11,51060,51060,11,51116,51116,11,51172,51172,11,51228,51228,11,51284,51284,11,51340,51340,11,51396,51396,11,51452,51452,11,51508,51508,11,51564,51564,11,51620,51620,11,51676,51676,11,51732,51732,11,51788,51788,11,51844,51844,11,51900,51900,11,51956,51956,11,52012,52012,11,52068,52068,11,52124,52124,11,52180,52180,11,52236,52236,11,52292,52292,11,52348,52348,11,52404,52404,11,52460,52460,11,52516,52516,11,52572,52572,11,52628,52628,11,52684,52684,11,52740,52740,11,52796,52796,11,52852,52852,11,52908,52908,11,52964,52964,11,53020,53020,11,53076,53076,11,53132,53132,11,53188,53188,11,53244,53244,11,53300,53300,11,53356,53356,11,53412,53412,11,53468,53468,11,53524,53524,11,53580,53580,11,53636,53636,11,53692,53692,11,53748,53748,11,53804,53804,11,53860,53860,11,53916,53916,11,53972,53972,11,54028,54028,11,54084,54084,11,54140,54140,11,54196,54196,11,54252,54252,11,54308,54308,11,54364,54364,11,54420,54420,11,54476,54476,11,54532,54532,11,54588,54588,11,54644,54644,11,54700,54700,11,54756,54756,11,54812,54812,11,54868,54868,11,54924,54924,11,54980,54980,11,55036,55036,11,55092,55092,11,55148,55148,11,55216,55238,9,65056,65071,5,65529,65531,4,68097,68099,5,68159,68159,5,69446,69456,5,69688,69702,5,69808,69810,7,69815,69816,7,69821,69821,1,69888,69890,5,69932,69932,7,69957,69958,7,70016,70017,5,70067,70069,7,70079,70080,7,70089,70092,5,70095,70095,5,70191,70193,5,70196,70196,5,70198,70199,5,70367,70367,5,70371,70378,5,70402,70403,7,70462,70462,5,70464,70464,5,70471,70472,7,70487,70487,5,70502,70508,5,70709,70711,7,70720,70721,7,70725,70725,7,70750,70750,5,70833,70834,7,70841,70841,7,70843,70844,7,70846,70846,7,70849,70849,7,71087,71087,5,71090,71093,5,71100,71101,5,71103,71104,5,71216,71218,7,71227,71228,7,71230,71230,7,71339,71339,5,71341,71341,5,71344,71349,5,71351,71351,5,71456,71457,7,71462,71462,7,71724,71726,7,71736,71736,7,71984,71984,5,71991,71992,7,71997,71997,7,71999,71999,1,72001,72001,1,72003,72003,5,72148,72151,5,72156,72159,7,72164,72164,7,72243,72248,5,72250,72250,1,72263,72263,5,72279,72280,7,72324,72329,1,72343,72343,7,72751,72751,7,72760,72765,5,72767,72767,5,72873,72873,7,72881,72881,7,72884,72884,7,73009,73014,5,73020,73021,5,73030,73030,1,73098,73102,7,73107,73108,7,73110,73110,7,73459,73460,5,78896,78904,4,92976,92982,5,94033,94087,7,94180,94180,5,113821,113822,5,119141,119141,5,119143,119145,5,119150,119154,5,119163,119170,5,119210,119213,5,121344,121398,5,121461,121461,5,121499,121503,5,122880,122886,5,122907,122913,5,122918,122922,5,123628,123631,5,125252,125258,5,126980,126980,14,127183,127183,14,127245,127247,14,127340,127343,14,127358,127359,14,127377,127386,14,127462,127487,6,127491,127503,14,127535,127535,14,127548,127551,14,127568,127569,14,127744,127777,14,127780,127891,14,127894,127895,14,127897,127899,14,127902,127984,14,127987,127989,14,127991,127994,14,128000,128253,14,128255,128317,14,128329,128334,14,128336,128359,14,128367,128368,14,128371,128377,14,128379,128390,14,128392,128393,14,128398,128399,14,128401,128404,14,128407,128419,14,128421,128421,14,128424,128424,14,128433,128434,14,128444,128444,14,128450,128452,14,128465,128467,14,128476,128478,14,128481,128481,14,128483,128483,14,128488,128488,14,128495,128495,14,128499,128499,14,128506,128591,14,128710,128714,14,128721,128722,14,128725,128725,14,128728,128735,14,128742,128744,14,128746,128746,14,128749,128751,14,128753,128754,14,128756,128758,14,128761,128761,14,128763,128764,14,128884,128895,14,128992,129003,14,129036,129039,14,129114,129119,14,129198,129279,14,129293,129295,14,129305,129310,14,129312,129319,14,129328,129328,14,129331,129338,14,129343,129343,14,129351,129355,14,129357,129359,14,129375,129387,14,129393,129393,14,129395,129398,14,129401,129401,14,129403,129403,14,129408,129412,14,129426,129431,14,129443,129444,14,129451,129453,14,129456,129465,14,129472,129472,14,129475,129482,14,129484,129484,14,129488,129510,14,129536,129647,14,129652,129652,14,129656,129658,14,129664,129666,14,129671,129679,14,129686,129704,14,129712,129718,14,129728,129730,14,129744,129750,14,917504,917504,4,917506,917535,4,917632,917759,4,918000,921599,4,0,9,4,11,12,4,14,31,4,169,169,14,174,174,14,1155,1159,5,1425,1469,5,1473,1474,5,1479,1479,5,1552,1562,5,1611,1631,5,1750,1756,5,1759,1764,5,1770,1773,5,1809,1809,5,1958,1968,5,2045,2045,5,2075,2083,5,2089,2093,5,2259,2273,5,2275,2306,5,2362,2362,5,2364,2364,5,2369,2376,5,2381,2381,5,2385,2391,5,2433,2433,5,2492,2492,5,2495,2496,7,2503,2504,7,2509,2509,5,2530,2531,5,2561,2562,5,2620,2620,5,2625,2626,5,2635,2637,5,2672,2673,5,2689,2690,5,2748,2748,5,2753,2757,5,2761,2761,7,2765,2765,5,2810,2815,5,2818,2819,7,2878,2878,5,2880,2880,7,2887,2888,7,2893,2893,5,2903,2903,5,2946,2946,5,3007,3007,7,3009,3010,7,3018,3020,7,3031,3031,5,3073,3075,7,3134,3136,5,3142,3144,5,3157,3158,5,3201,3201,5,3260,3260,5,3263,3263,5,3266,3266,5,3270,3270,5,3274,3275,7,3285,3286,5,3328,3329,5,3387,3388,5,3391,3392,7,3398,3400,7,3405,3405,5,3415,3415,5,3457,3457,5,3530,3530,5,3536,3537,7,3542,3542,5,3551,3551,5,3633,3633,5,3636,3642,5,3761,3761,5,3764,3772,5,3864,3865,5,3895,3895,5,3902,3903,7,3967,3967,7,3974,3975,5,3993,4028,5,4141,4144,5,4146,4151,5,4155,4156,7,4182,4183,7,4190,4192,5,4226,4226,5,4229,4230,5,4253,4253,5,4448,4519,9,4957,4959,5,5938,5940,5,6002,6003,5,6070,6070,7,6078,6085,7,6087,6088,7,6109,6109,5,6158,6158,4,6313,6313,5,6435,6438,7,6441,6443,7,6450,6450,5,6457,6459,5,6681,6682,7,6741,6741,7,6743,6743,7,6752,6752,5,6757,6764,5,6771,6780,5,6832,6845,5,6847,6848,5,6916,6916,7,6965,6965,5,6971,6971,7,6973,6977,7,6979,6980,7,7040,7041,5,7073,7073,7,7078,7079,7,7082,7082,7,7142,7142,5,7144,7145,5,7149,7149,5,7151,7153,5,7204,7211,7,7220,7221,7,7376,7378,5,7393,7393,7,7405,7405,5,7415,7415,7,7616,7673,5,8203,8203,4,8205,8205,13,8232,8232,4,8234,8238,4,8265,8265,14,8293,8293,4,8400,8412,5,8417,8417,5,8421,8432,5,8505,8505,14,8617,8618,14,9000,9000,14,9167,9167,14,9208,9210,14,9642,9643,14,9664,9664,14,9728,9732,14,9735,9741,14,9743,9744,14,9746,9746,14,9750,9751,14,9753,9756,14,9758,9759,14,9761,9761,14,9764,9765,14,9767,9769,14,9771,9773,14,9776,9783,14,9787,9791,14,9793,9793,14,9795,9799,14,9812,9822,14,9824,9824,14,9827,9827,14,9829,9830,14,9832,9832,14,9851,9851,14,9854,9854,14,9856,9861,14,9874,9876,14,9878,9879,14,9881,9881,14,9883,9884,14,9888,9889,14,9895,9895,14,9898,9899,14,9904,9905,14,9917,9918,14,9924,9925,14,9928,9928,14,9934,9935,14,9937,9937,14,9939,9940,14,9961,9962,14,9968,9973,14,9975,9978,14,9981,9981,14,9986,9986,14,9989,9989,14,9998,9998,14,10000,10001,14,10004,10004,14,10013,10013,14,10024,10024,14,10052,10052,14,10060,10060,14,10067,10069,14,10083,10084,14,10133,10135,14,10160,10160,14,10548,10549,14,11035,11036,14,11093,11093,14,11647,11647,5,12330,12333,5,12336,12336,14,12441,12442,5,12953,12953,14,42608,42610,5,42654,42655,5,43010,43010,5,43019,43019,5,43045,43046,5,43052,43052,5,43188,43203,7,43232,43249,5,43302,43309,5,43346,43347,7,43392,43394,5,43443,43443,5,43446,43449,5,43452,43453,5,43493,43493,5,43567,43568,7,43571,43572,7,43587,43587,5,43597,43597,7,43696,43696,5,43703,43704,5,43713,43713,5,43756,43757,5,43765,43765,7,44003,44004,7,44006,44007,7,44009,44010,7,44013,44013,5,44033,44059,12,44061,44087,12,44089,44115,12,44117,44143,12,44145,44171,12,44173,44199,12,44201,44227,12,44229,44255,12,44257,44283,12,44285,44311,12,44313,44339,12,44341,44367,12,44369,44395,12,44397,44423,12,44425,44451,12,44453,44479,12,44481,44507,12,44509,44535,12,44537,44563,12,44565,44591,12,44593,44619,12,44621,44647,12,44649,44675,12,44677,44703,12,44705,44731,12,44733,44759,12,44761,44787,12,44789,44815,12,44817,44843,12,44845,44871,12,44873,44899,12,44901,44927,12,44929,44955,12,44957,44983,12,44985,45011,12,45013,45039,12,45041,45067,12,45069,45095,12,45097,45123,12,45125,45151,12,45153,45179,12,45181,45207,12,45209,45235,12,45237,45263,12,45265,45291,12,45293,45319,12,45321,45347,12,45349,45375,12,45377,45403,12,45405,45431,12,45433,45459,12,45461,45487,12,45489,45515,12,45517,45543,12,45545,45571,12,45573,45599,12,45601,45627,12,45629,45655,12,45657,45683,12,45685,45711,12,45713,45739,12,45741,45767,12,45769,45795,12,45797,45823,12,45825,45851,12,45853,45879,12,45881,45907,12,45909,45935,12,45937,45963,12,45965,45991,12,45993,46019,12,46021,46047,12,46049,46075,12,46077,46103,12,46105,46131,12,46133,46159,12,46161,46187,12,46189,46215,12,46217,46243,12,46245,46271,12,46273,46299,12,46301,46327,12,46329,46355,12,46357,46383,12,46385,46411,12,46413,46439,12,46441,46467,12,46469,46495,12,46497,46523,12,46525,46551,12,46553,46579,12,46581,46607,12,46609,46635,12,46637,46663,12,46665,46691,12,46693,46719,12,46721,46747,12,46749,46775,12,46777,46803,12,46805,46831,12,46833,46859,12,46861,46887,12,46889,46915,12,46917,46943,12,46945,46971,12,46973,46999,12,47001,47027,12,47029,47055,12,47057,47083,12,47085,47111,12,47113,47139,12,47141,47167,12,47169,47195,12,47197,47223,12,47225,47251,12,47253,47279,12,47281,47307,12,47309,47335,12,47337,47363,12,47365,47391,12,47393,47419,12,47421,47447,12,47449,47475,12,47477,47503,12,47505,47531,12,47533,47559,12,47561,47587,12,47589,47615,12,47617,47643,12,47645,47671,12,47673,47699,12,47701,47727,12,47729,47755,12,47757,47783,12,47785,47811,12,47813,47839,12,47841,47867,12,47869,47895,12,47897,47923,12,47925,47951,12,47953,47979,12,47981,48007,12,48009,48035,12,48037,48063,12,48065,48091,12,48093,48119,12,48121,48147,12,48149,48175,12,48177,48203,12,48205,48231,12,48233,48259,12,48261,48287,12,48289,48315,12,48317,48343,12,48345,48371,12,48373,48399,12,48401,48427,12,48429,48455,12,48457,48483,12,48485,48511,12,48513,48539,12,48541,48567,12,48569,48595,12,48597,48623,12,48625,48651,12,48653,48679,12,48681,48707,12,48709,48735,12,48737,48763,12,48765,48791,12,48793,48819,12,48821,48847,12,48849,48875,12,48877,48903,12,48905,48931,12,48933,48959,12,48961,48987,12,48989,49015,12,49017,49043,12,49045,49071,12,49073,49099,12,49101,49127,12,49129,49155,12,49157,49183,12,49185,49211,12,49213,49239,12,49241,49267,12,49269,49295,12,49297,49323,12,49325,49351,12,49353,49379,12,49381,49407,12,49409,49435,12,49437,49463,12,49465,49491,12,49493,49519,12,49521,49547,12,49549,49575,12,49577,49603,12,49605,49631,12,49633,49659,12,49661,49687,12,49689,49715,12,49717,49743,12,49745,49771,12,49773,49799,12,49801,49827,12,49829,49855,12,49857,49883,12,49885,49911,12,49913,49939,12,49941,49967,12,49969,49995,12,49997,50023,12,50025,50051,12,50053,50079,12,50081,50107,12,50109,50135,12,50137,50163,12,50165,50191,12,50193,50219,12,50221,50247,12,50249,50275,12,50277,50303,12,50305,50331,12,50333,50359,12,50361,50387,12,50389,50415,12,50417,50443,12,50445,50471,12,50473,50499,12,50501,50527,12,50529,50555,12,50557,50583,12,50585,50611,12,50613,50639,12,50641,50667,12,50669,50695,12,50697,50723,12,50725,50751,12,50753,50779,12,50781,50807,12,50809,50835,12,50837,50863,12,50865,50891,12,50893,50919,12,50921,50947,12,50949,50975,12,50977,51003,12,51005,51031,12,51033,51059,12,51061,51087,12,51089,51115,12,51117,51143,12,51145,51171,12,51173,51199,12,51201,51227,12,51229,51255,12,51257,51283,12,51285,51311,12,51313,51339,12,51341,51367,12,51369,51395,12,51397,51423,12,51425,51451,12,51453,51479,12,51481,51507,12,51509,51535,12,51537,51563,12,51565,51591,12,51593,51619,12,51621,51647,12,51649,51675,12,51677,51703,12,51705,51731,12,51733,51759,12,51761,51787,12,51789,51815,12,51817,51843,12,51845,51871,12,51873,51899,12,51901,51927,12,51929,51955,12,51957,51983,12,51985,52011,12,52013,52039,12,52041,52067,12,52069,52095,12,52097,52123,12,52125,52151,12,52153,52179,12,52181,52207,12,52209,52235,12,52237,52263,12,52265,52291,12,52293,52319,12,52321,52347,12,52349,52375,12,52377,52403,12,52405,52431,12,52433,52459,12,52461,52487,12,52489,52515,12,52517,52543,12,52545,52571,12,52573,52599,12,52601,52627,12,52629,52655,12,52657,52683,12,52685,52711,12,52713,52739,12,52741,52767,12,52769,52795,12,52797,52823,12,52825,52851,12,52853,52879,12,52881,52907,12,52909,52935,12,52937,52963,12,52965,52991,12,52993,53019,12,53021,53047,12,53049,53075,12,53077,53103,12,53105,53131,12,53133,53159,12,53161,53187,12,53189,53215,12,53217,53243,12,53245,53271,12,53273,53299,12,53301,53327,12,53329,53355,12,53357,53383,12,53385,53411,12,53413,53439,12,53441,53467,12,53469,53495,12,53497,53523,12,53525,53551,12,53553,53579,12,53581,53607,12,53609,53635,12,53637,53663,12,53665,53691,12,53693,53719,12,53721,53747,12,53749,53775,12,53777,53803,12,53805,53831,12,53833,53859,12,53861,53887,12,53889,53915,12,53917,53943,12,53945,53971,12,53973,53999,12,54001,54027,12,54029,54055,12,54057,54083,12,54085,54111,12,54113,54139,12,54141,54167,12,54169,54195,12,54197,54223,12,54225,54251,12,54253,54279,12,54281,54307,12,54309,54335,12,54337,54363,12,54365,54391,12,54393,54419,12,54421,54447,12,54449,54475,12,54477,54503,12,54505,54531,12,54533,54559,12,54561,54587,12,54589,54615,12,54617,54643,12,54645,54671,12,54673,54699,12,54701,54727,12,54729,54755,12,54757,54783,12,54785,54811,12,54813,54839,12,54841,54867,12,54869,54895,12,54897,54923,12,54925,54951,12,54953,54979,12,54981,55007,12,55009,55035,12,55037,55063,12,55065,55091,12,55093,55119,12,55121,55147,12,55149,55175,12,55177,55203,12,55243,55291,10,65024,65039,5,65279,65279,4,65520,65528,4,66045,66045,5,66422,66426,5,68101,68102,5,68152,68154,5,68325,68326,5,69291,69292,5,69632,69632,7,69634,69634,7,69759,69761,5]")}}),V(z[22],G([0,1,5]),function(I,t,p){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.StringSHA1=t.toHexString=t.stringHash=t.doHash=t.hash=void 0;function P(n){return E(n,0)}t.hash=P;function E(n,r){switch(typeof n){case"object":return n===null?u(349,r):Array.isArray(n)?s(n,r):h(n,r);case"string":return l(n,r);case"boolean":return d(n,r);case"number":return u(n,r);case"undefined":return u(937,r);default:return u(617,r)}}t.doHash=E;function u(n,r){return(r<<5)-r+n|0}function d(n,r){return u(n?433:863,r)}function l(n,r){r=u(149417,r);for(let m=0,_=n.length;m<_;m++)r=u(n.charCodeAt(m),r);return r}t.stringHash=l;function s(n,r){return r=u(104579,r),n.reduce((m,_)=>E(_,m),r)}function h(n,r){return r=u(181387,r),Object.keys(n).sort().reduce((m,_)=>(m=l(_,m),E(n[_],m)),r)}function w(n,r,m=32){const _=m-r,o=~((1<<_)-1);return(n<>>_)>>>0}function a(n,r=0,m=n.byteLength,_=0){for(let o=0;om.toString(16).padStart(2,"0")).join(""):S((n>>>0).toString(16),r/4)}t.toHexString=v;class C{constructor(){this._h0=1732584193,this._h1=4023233417,this._h2=2562383102,this._h3=271733878,this._h4=3285377520,this._buff=new Uint8Array(64+3),this._buffDV=new DataView(this._buff.buffer),this._buffLen=0,this._totalLen=0,this._leftoverHighSurrogate=0,this._finished=!1}update(r){const m=r.length;if(m!==0){const _=this._buff;let o=this._buffLen,i=this._leftoverHighSurrogate,f,b;for(i!==0?(f=i,b=-1,i=0):(f=r.charCodeAt(0),b=0);;){let N=f;if(p.isHighSurrogate(f))if(b+1>>6,r[m++]=128|(_&63)>>>0):_<65536?(r[m++]=224|(_&61440)>>>12,r[m++]=128|(_&4032)>>>6,r[m++]=128|(_&63)>>>0):(r[m++]=240|(_&1835008)>>>18,r[m++]=128|(_&258048)>>>12,r[m++]=128|(_&4032)>>>6,r[m++]=128|(_&63)>>>0),m>=64&&(this._step(),m-=64,this._totalLen+=64,r[0]=r[64+0],r[1]=r[64+1],r[2]=r[64+2]),m}digest(){return this._finished||(this._finished=!0,this._leftoverHighSurrogate&&(this._leftoverHighSurrogate=0,this._buffLen=this._push(this._buff,this._buffLen,65533)),this._totalLen+=this._buffLen,this._wrapUp()),v(this._h0)+v(this._h1)+v(this._h2)+v(this._h3)+v(this._h4)}_wrapUp(){this._buff[this._buffLen++]=128,a(this._buff,this._buffLen),this._buffLen>56&&(this._step(),a(this._buff));const r=8*this._totalLen;this._buffDV.setUint32(56,Math.floor(r/4294967296),!1),this._buffDV.setUint32(60,r%4294967296,!1),this._step()}_step(){const r=C._bigBlock32,m=this._buffDV;for(let L=0;L<64;L+=4)r.setUint32(L,m.getUint32(L,!1),!1);for(let L=64;L<320;L+=4)r.setUint32(L,w(r.getUint32(L-12,!1)^r.getUint32(L-32,!1)^r.getUint32(L-56,!1)^r.getUint32(L-64,!1),1),!1);let _=this._h0,o=this._h1,i=this._h2,f=this._h3,b=this._h4,N,c,g;for(let L=0;L<80;L++)L<20?(N=o&i|~o&f,c=1518500249):L<40?(N=o^i^f,c=1859775393):L<60?(N=o&i|o&f|i&f,c=2400959708):(N=o^i^f,c=3395469782),g=w(_,5)+N+b+c+r.getUint32(L*4,!1)&4294967295,b=f,f=i,i=w(o,30),o=_,_=g;this._h0=this._h0+_&4294967295,this._h1=this._h1+o&4294967295,this._h2=this._h2+i&4294967295,this._h3=this._h3+f&4294967295,this._h4=this._h4+b&4294967295}}t.StringSHA1=C,C._bigBlock32=new DataView(new ArrayBuffer(320))}),V(z[10],G([0,1,15,22]),function(I,t,p,P){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.LcsDiff=t.MyArray=t.Debug=t.stringDiff=t.StringDiffSequence=void 0;class E{constructor(a){this.source=a}getElements(){const a=this.source,S=new Int32Array(a.length);for(let v=0,C=a.length;v0||this.m_modifiedCount>0)&&this.m_changes.push(new p.DiffChange(this.m_originalStart,this.m_originalCount,this.m_modifiedStart,this.m_modifiedCount)),this.m_originalCount=0,this.m_modifiedCount=0,this.m_originalStart=1073741824,this.m_modifiedStart=1073741824}AddOriginalElement(a,S){this.m_originalStart=Math.min(this.m_originalStart,a),this.m_modifiedStart=Math.min(this.m_modifiedStart,S),this.m_originalCount++}AddModifiedElement(a,S){this.m_originalStart=Math.min(this.m_originalStart,a),this.m_modifiedStart=Math.min(this.m_modifiedStart,S),this.m_modifiedCount++}getChanges(){return(this.m_originalCount>0||this.m_modifiedCount>0)&&this.MarkNextChange(),this.m_changes}getReverseChanges(){return(this.m_originalCount>0||this.m_modifiedCount>0)&&this.MarkNextChange(),this.m_changes.reverse(),this.m_changes}}class h{constructor(a,S,v=null){this.ContinueProcessingPredicate=v;const[C,n,r]=h._getElements(a),[m,_,o]=h._getElements(S);this._hasStrings=r&&o,this._originalStringElements=C,this._originalElementsOrHash=n,this._modifiedStringElements=m,this._modifiedElementsOrHash=_,this.m_forwardHistory=[],this.m_reverseHistory=[]}static _isStringArray(a){return a.length>0&&typeof a[0]=="string"}static _getElements(a){const S=a.getElements();if(h._isStringArray(S)){const v=new Int32Array(S.length);for(let C=0,n=S.length;C=a&&C>=v&&this.ElementsAreEqual(S,C);)S--,C--;if(a>S||v>C){let f;return v<=C?(d.Assert(a===S+1,"originalStart should only be one more than originalEnd"),f=[new p.DiffChange(a,0,v,C-v+1)]):a<=S?(d.Assert(v===C+1,"modifiedStart should only be one more than modifiedEnd"),f=[new p.DiffChange(a,S-a+1,v,0)]):(d.Assert(a===S+1,"originalStart should only be one more than originalEnd"),d.Assert(v===C+1,"modifiedStart should only be one more than modifiedEnd"),f=[]),f}const r=[0],m=[0],_=this.ComputeRecursionPoint(a,S,v,C,r,m,n),o=r[0],i=m[0];if(_!==null)return _;if(!n[0]){const f=this.ComputeDiffRecursive(a,o,v,i,n);let b=[];return n[0]?b=[new p.DiffChange(o+1,S-(o+1)+1,i+1,C-(i+1)+1)]:b=this.ComputeDiffRecursive(o+1,S,i+1,C,n),this.ConcatenateChanges(f,b)}return[new p.DiffChange(a,S-a+1,v,C-v+1)]}WALKTRACE(a,S,v,C,n,r,m,_,o,i,f,b,N,c,g,L,A,M){let R=null,D=null,T=new s,$=S,k=v,F=N[0]-L[0]-C,O=-1073741824,e=this.m_forwardHistory.length-1;do{const H=F+a;H===$||H=0&&(o=this.m_forwardHistory[e],a=o[0],$=1,k=o.length-1)}while(--e>=-1);if(R=T.getReverseChanges(),M[0]){let H=N[0]+1,B=L[0]+1;if(R!==null&&R.length>0){const Q=R[R.length-1];H=Math.max(H,Q.getOriginalEnd()),B=Math.max(B,Q.getModifiedEnd())}D=[new p.DiffChange(H,b-H+1,B,g-B+1)]}else{T=new s,$=r,k=m,F=N[0]-L[0]-_,O=1073741824,e=A?this.m_reverseHistory.length-1:this.m_reverseHistory.length-2;do{const H=F+n;H===$||H=i[H+1]?(f=i[H+1]-1,c=f-F-_,f>O&&T.MarkNextChange(),O=f+1,T.AddOriginalElement(f+1,c+1),F=H+1-n):(f=i[H-1],c=f-F-_,f>O&&T.MarkNextChange(),O=f,T.AddModifiedElement(f+1,c+1),F=H-1-n),e>=0&&(i=this.m_reverseHistory[e],n=i[0],$=1,k=i.length-1)}while(--e>=-1);D=T.getChanges()}return this.ConcatenateChanges(R,D)}ComputeRecursionPoint(a,S,v,C,n,r,m){let _=0,o=0,i=0,f=0,b=0,N=0;a--,v--,n[0]=0,r[0]=0,this.m_forwardHistory=[],this.m_reverseHistory=[];const c=S-a+(C-v),g=c+1,L=new Int32Array(g),A=new Int32Array(g),M=C-v,R=S-a,D=a-v,T=S-C,k=(R-M)%2==0;L[M]=a,A[R]=S,m[0]=!1;for(let F=1;F<=c/2+1;F++){let O=0,e=0;i=this.ClipDiagonalBound(M-F,F,M,g),f=this.ClipDiagonalBound(M+F,F,M,g);for(let B=i;B<=f;B+=2){B===i||BO+e&&(O=_,e=o),!k&&Math.abs(B-R)<=F-1&&_>=A[B])return n[0]=_,r[0]=o,Q<=A[B]&&1447>0&&F<=1447+1?this.WALKTRACE(M,i,f,D,R,b,N,T,L,A,_,S,n,o,C,r,k,m):null}const H=(O-a+(e-v)-F)/2;if(this.ContinueProcessingPredicate!==null&&!this.ContinueProcessingPredicate(O,H))return m[0]=!0,n[0]=O,r[0]=e,H>0&&1447>0&&F<=1447+1?this.WALKTRACE(M,i,f,D,R,b,N,T,L,A,_,S,n,o,C,r,k,m):(a++,v++,[new p.DiffChange(a,S-a+1,v,C-v+1)]);b=this.ClipDiagonalBound(R-F,F,R,g),N=this.ClipDiagonalBound(R+F,F,R,g);for(let B=b;B<=N;B+=2){B===b||B=A[B+1]?_=A[B+1]-1:_=A[B-1],o=_-(B-R)-T;const Q=_;for(;_>a&&o>v&&this.ElementsAreEqual(_,o);)_--,o--;if(A[B]=_,k&&Math.abs(B-M)<=F&&_<=L[B])return n[0]=_,r[0]=o,Q>=L[B]&&1447>0&&F<=1447+1?this.WALKTRACE(M,i,f,D,R,b,N,T,L,A,_,S,n,o,C,r,k,m):null}if(F<=1447){let B=new Int32Array(f-i+2);B[0]=M-i+1,l.Copy2(L,i,B,1,f-i+1),this.m_forwardHistory.push(B),B=new Int32Array(N-b+2),B[0]=R-b+1,l.Copy2(A,b,B,1,N-b+1),this.m_reverseHistory.push(B)}}return this.WALKTRACE(M,i,f,D,R,b,N,T,L,A,_,S,n,o,C,r,k,m)}PrettifyChanges(a){for(let S=0;S0,m=v.modifiedLength>0;for(;v.originalStart+v.originalLength=0;S--){const v=a[S];let C=0,n=0;if(S>0){const i=a[S-1];i.originalLength>0&&(C=i.originalStart+i.originalLength),i.modifiedLength>0&&(n=i.modifiedStart+i.modifiedLength)}const r=v.originalLength>0,m=v.modifiedLength>0;let _=0,o=this._boundaryScore(v.originalStart,v.originalLength,v.modifiedStart,v.modifiedLength);for(let i=1;;i++){const f=v.originalStart-i,b=v.modifiedStart-i;if(fo&&(o=N,_=i)}v.originalStart-=_,v.modifiedStart-=_}if(this._hasStrings)for(let S=1,v=a.length;S0&&N>_&&(_=N,o=f,i=b)}return _>0?[o,i]:null}_contiguousSequenceScore(a,S,v){let C=0;for(let n=0;n=this._originalElementsOrHash.length-1?!0:this._hasStrings&&/^\s*$/.test(this._originalStringElements[a])}_OriginalRegionIsBoundary(a,S){if(this._OriginalIsBoundary(a)||this._OriginalIsBoundary(a-1))return!0;if(S>0){const v=a+S;if(this._OriginalIsBoundary(v-1)||this._OriginalIsBoundary(v))return!0}return!1}_ModifiedIsBoundary(a){return a<=0||a>=this._modifiedElementsOrHash.length-1?!0:this._hasStrings&&/^\s*$/.test(this._modifiedStringElements[a])}_ModifiedRegionIsBoundary(a,S){if(this._ModifiedIsBoundary(a)||this._ModifiedIsBoundary(a-1))return!0;if(S>0){const v=a+S;if(this._ModifiedIsBoundary(v-1)||this._ModifiedIsBoundary(v))return!0}return!1}_boundaryScore(a,S,v,C){const n=this._OriginalRegionIsBoundary(a,S)?1:0,r=this._ModifiedRegionIsBoundary(v,C)?1:0;return n+r}ConcatenateChanges(a,S){let v=[];if(a.length===0||S.length===0)return S.length>0?S:a;if(this.ChangesOverlap(a[a.length-1],S[0],v)){const C=new Array(a.length+S.length-1);return l.Copy(a,0,C,0,a.length-1),C[a.length-1]=v[0],l.Copy(S,1,C,a.length,S.length-1),C}else{const C=new Array(a.length+S.length);return l.Copy(a,0,C,0,a.length),l.Copy(S,0,C,a.length,S.length),C}}ChangesOverlap(a,S,v){if(d.Assert(a.originalStart<=S.originalStart,"Left change is not less than or equal to right change"),d.Assert(a.modifiedStart<=S.modifiedStart,"Left change is not less than or equal to right change"),a.originalStart+a.originalLength>=S.originalStart||a.modifiedStart+a.modifiedLength>=S.modifiedStart){const C=a.originalStart;let n=a.originalLength;const r=a.modifiedStart;let m=a.modifiedLength;return a.originalStart+a.originalLength>=S.originalStart&&(n=S.originalStart+S.originalLength-a.originalStart),a.modifiedStart+a.modifiedLength>=S.modifiedStart&&(m=S.modifiedStart+S.modifiedLength-a.modifiedStart),v[0]=new p.DiffChange(C,n,r,m),!0}else return v[0]=null,!1}ClipDiagonalBound(a,S,v,C){if(a>=0&&afunction(){const N=Array.prototype.slice.call(arguments,0);return o(b,N)};let f={};for(const b of _)f[b]=i(b);return f}t.createProxyObject=r;function m(_){return _===null?void 0:_}t.withNullAsUndefined=m}),V(z[12],G([0,1]),function(I,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.toUint32=t.toUint8=void 0;function p(E){return E<0?0:E>255?255:E|0}t.toUint8=p;function P(E){return E<0?0:E>4294967295?4294967295:E|0}t.toUint32=P}),V(z[13],G([0,1,2,20]),function(I,t,p,P){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.uriToFsPath=t.URI=void 0;const E=/^\w[\w\d+.-]*$/,u=/^\//,d=/^\/\//;function l(c,g){if(!c.scheme&&g)throw new Error(`[UriError]: Scheme is missing: {scheme: "", authority: "${c.authority}", path: "${c.path}", query: "${c.query}", fragment: "${c.fragment}"}`);if(c.scheme&&!E.test(c.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if(c.path){if(c.authority){if(!u.test(c.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(d.test(c.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}}function s(c,g){return!c&&!g?"file":c}function h(c,g){switch(c){case"https":case"http":case"file":g?g[0]!==a&&(g=a+g):g=a;break}return g}const w="",a="/",S=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;class v{constructor(g,L,A,M,R,D=!1){typeof g=="object"?(this.scheme=g.scheme||w,this.authority=g.authority||w,this.path=g.path||w,this.query=g.query||w,this.fragment=g.fragment||w):(this.scheme=s(g,D),this.authority=L||w,this.path=h(this.scheme,A||w),this.query=M||w,this.fragment=R||w,l(this,D))}static isUri(g){return g instanceof v?!0:g?typeof g.authority=="string"&&typeof g.fragment=="string"&&typeof g.path=="string"&&typeof g.query=="string"&&typeof g.scheme=="string"&&typeof g.fsPath=="string"&&typeof g.with=="function"&&typeof g.toString=="function":!1}get fsPath(){return o(this,!1)}with(g){if(!g)return this;let{scheme:L,authority:A,path:M,query:R,fragment:D}=g;return L===void 0?L=this.scheme:L===null&&(L=w),A===void 0?A=this.authority:A===null&&(A=w),M===void 0?M=this.path:M===null&&(M=w),R===void 0?R=this.query:R===null&&(R=w),D===void 0?D=this.fragment:D===null&&(D=w),L===this.scheme&&A===this.authority&&M===this.path&&R===this.query&&D===this.fragment?this:new n(L,A,M,R,D)}static parse(g,L=!1){const A=S.exec(g);return A?new n(A[2]||w,N(A[4]||w),N(A[5]||w),N(A[7]||w),N(A[9]||w),L):new n(w,w,w,w,w)}static file(g){let L=w;if(p.isWindows&&(g=g.replace(/\\/g,a)),g[0]===a&&g[1]===a){const A=g.indexOf(a,2);A===-1?(L=g.substring(2),g=a):(L=g.substring(2,A),g=g.substring(A)||a)}return new n("file",L,g,w,w)}static from(g){return new n(g.scheme,g.authority,g.path,g.query,g.fragment)}static joinPath(g,...L){if(!g.path)throw new Error("[UriError]: cannot call joinPath on URI without path");let A;return p.isWindows&&g.scheme==="file"?A=v.file(P.win32.join(o(g,!0),...L)).path:A=P.posix.join(g.path,...L),g.with({path:A})}toString(g=!1){return i(this,g)}toJSON(){return this}static revive(g){if(g){if(g instanceof v)return g;{const L=new n(g);return L._formatted=g.external,L._fsPath=g._sep===C?g.fsPath:null,L}}else return g}}t.URI=v;const C=p.isWindows?1:void 0;class n extends v{constructor(){super(...arguments);this._formatted=null,this._fsPath=null}get fsPath(){return this._fsPath||(this._fsPath=o(this,!1)),this._fsPath}toString(g=!1){return g?i(this,!0):(this._formatted||(this._formatted=i(this,!1)),this._formatted)}toJSON(){const g={$mid:1};return this._fsPath&&(g.fsPath=this._fsPath,g._sep=C),this._formatted&&(g.external=this._formatted),this.path&&(g.path=this.path),this.scheme&&(g.scheme=this.scheme),this.authority&&(g.authority=this.authority),this.query&&(g.query=this.query),this.fragment&&(g.fragment=this.fragment),g}}const r={[58]:"%3A",[47]:"%2F",[63]:"%3F",[35]:"%23",[91]:"%5B",[93]:"%5D",[64]:"%40",[33]:"%21",[36]:"%24",[38]:"%26",[39]:"%27",[40]:"%28",[41]:"%29",[42]:"%2A",[43]:"%2B",[44]:"%2C",[59]:"%3B",[61]:"%3D",[32]:"%20"};function m(c,g){let L,A=-1;for(let M=0;M=97&&R<=122||R>=65&&R<=90||R>=48&&R<=57||R===45||R===46||R===95||R===126||g&&R===47)A!==-1&&(L+=encodeURIComponent(c.substring(A,M)),A=-1),L!==void 0&&(L+=c.charAt(M));else{L===void 0&&(L=c.substr(0,M));const D=r[R];D!==void 0?(A!==-1&&(L+=encodeURIComponent(c.substring(A,M)),A=-1),L+=D):A===-1&&(A=M)}}return A!==-1&&(L+=encodeURIComponent(c.substring(A))),L!==void 0?L:c}function _(c){let g;for(let L=0;L1&&c.scheme==="file"?L=`//${c.authority}${c.path}`:c.path.charCodeAt(0)===47&&(c.path.charCodeAt(1)>=65&&c.path.charCodeAt(1)<=90||c.path.charCodeAt(1)>=97&&c.path.charCodeAt(1)<=122)&&c.path.charCodeAt(2)===58?g?L=c.path.substr(1):L=c.path[1].toLowerCase()+c.path.substr(2):L=c.path,p.isWindows&&(L=L.replace(/\//g,"\\")),L}t.uriToFsPath=o;function i(c,g){const L=g?_:m;let A="",{scheme:M,authority:R,path:D,query:T,fragment:$}=c;if(M&&(A+=M,A+=":"),(R||M==="file")&&(A+=a,A+=a),R){let k=R.indexOf("@");if(k!==-1){const F=R.substr(0,k);R=R.substr(k+1),k=F.indexOf(":"),k===-1?A+=L(F,!1):(A+=L(F.substr(0,k),!1),A+=":",A+=L(F.substr(k+1),!1)),A+="@"}R=R.toLowerCase(),k=R.indexOf(":"),k===-1?A+=L(R,!1):(A+=L(R.substr(0,k),!1),A+=R.substr(k))}if(D){if(D.length>=3&&D.charCodeAt(0)===47&&D.charCodeAt(2)===58){const k=D.charCodeAt(1);k>=65&&k<=90&&(D=`/${String.fromCharCode(k+32)}:${D.substr(3)}`)}else if(D.length>=2&&D.charCodeAt(1)===58){const k=D.charCodeAt(0);k>=65&&k<=90&&(D=`${String.fromCharCode(k+32)}:${D.substr(2)}`)}A+=L(D,!0)}return T&&(A+="?",A+=L(T,!1)),$&&(A+="#",A+=g?$:m($,!1)),A}function f(c){try{return decodeURIComponent(c)}catch(g){return c.length>3?c.substr(0,3)+f(c.substr(3)):c}}const b=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function N(c){return c.match(b)?c.replace(b,g=>f(g)):c}}),V(z[34],G([0,1,4,7,2,11]),function(I,t,p,P,E,u){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.create=t.SimpleWorkerServer=t.SimpleWorkerClient=t.logOnceWebWorkerWarning=void 0;const d="$initialize";let l=!1;function s(v){!E.isWeb||(l||(l=!0,console.warn("Could not create web worker(s). Falling back to loading web worker code in main thread, which might cause UI freezes. Please see https://github.com/microsoft/monaco-editor#faq")),console.warn(v.message))}t.logOnceWebWorkerWarning=s;class h{constructor(C){this._workerId=-1,this._handler=C,this._lastSentReq=0,this._pendingReplies=Object.create(null)}setWorkerId(C){this._workerId=C}sendMessage(C,n){let r=String(++this._lastSentReq);return new Promise((m,_)=>{this._pendingReplies[r]={resolve:m,reject:_},this._send({vsWorker:this._workerId,req:r,method:C,args:n})})}handleMessage(C){!C||!C.vsWorker||this._workerId!==-1&&C.vsWorker!==this._workerId||this._handleMessage(C)}_handleMessage(C){if(C.seq){let _=C;if(!this._pendingReplies[_.seq]){console.warn("Got reply to unknown seq");return}let o=this._pendingReplies[_.seq];if(delete this._pendingReplies[_.seq],_.err){let i=_.err;_.err.$isError&&(i=new Error,i.name=_.err.name,i.message=_.err.message,i.stack=_.err.stack),o.reject(i);return}o.resolve(_.res);return}let n=C,r=n.req;this._handler.handleMessage(n.method,n.args).then(_=>{this._send({vsWorker:this._workerId,seq:r,res:_,err:void 0})},_=>{_.detail instanceof Error&&(_.detail=p.transformErrorForSerialization(_.detail)),this._send({vsWorker:this._workerId,seq:r,res:void 0,err:p.transformErrorForSerialization(_)})})}_send(C){let n=[];if(C.req){const r=C;for(let m=0;m{this._protocol.handleMessage(f)},f=>{m&&m(f)})),this._protocol=new h({sendMessage:(f,b)=>{this._worker.postMessage(f,b)},handleMessage:(f,b)=>{if(typeof r[f]!="function")return Promise.reject(new Error("Missing method "+f+" on main thread host."));try{return Promise.resolve(r[f].apply(r,b))}catch(N){return Promise.reject(N)}}}),this._protocol.setWorkerId(this._worker.getId());let _=null;typeof self.require!="undefined"&&typeof self.require.getConfig=="function"?_=self.require.getConfig():typeof self.requirejs!="undefined"&&(_=self.requirejs.s.contexts._.config);const o=u.getAllMethodNames(r);this._onModuleLoaded=this._protocol.sendMessage(d,[this._worker.getId(),JSON.parse(JSON.stringify(_)),n,o]);const i=(f,b)=>this._request(f,b);this._lazyProxy=new Promise((f,b)=>{m=b,this._onModuleLoaded.then(N=>{f(u.createProxyObject(N,i))},N=>{b(N),this._onError("Worker failed to load "+n,N)})})}getProxyObject(){return this._lazyProxy}_request(C,n){return new Promise((r,m)=>{this._onModuleLoaded.then(()=>{this._protocol.sendMessage(C,n).then(r,m)},m)})}_onError(C,n){console.error(C),console.info(n)}}t.SimpleWorkerClient=w;class a{constructor(C,n){this._requestHandlerFactory=n,this._requestHandler=null,this._protocol=new h({sendMessage:(r,m)=>{C(r,m)},handleMessage:(r,m)=>this._handleMessage(r,m)})}onmessage(C){this._protocol.handleMessage(C)}_handleMessage(C,n){if(C===d)return this.initialize(n[0],n[1],n[2],n[3]);if(!this._requestHandler||typeof this._requestHandler[C]!="function")return Promise.reject(new Error("Missing requestHandler or method: "+C));try{return Promise.resolve(this._requestHandler[C].apply(this._requestHandler,n))}catch(r){return Promise.reject(r)}}initialize(C,n,r,m){this._protocol.setWorkerId(C);const _=(i,f)=>this._protocol.sendMessage(i,f),o=u.createProxyObject(m,_);return this._requestHandlerFactory?(this._requestHandler=this._requestHandlerFactory(o),Promise.resolve(u.getAllMethodNames(this._requestHandler))):(n&&(typeof n.baseUrl!="undefined"&&delete n.baseUrl,typeof n.paths!="undefined"&&typeof n.paths.vs!="undefined"&&delete n.paths.vs,typeof n.trustedTypesPolicy!==void 0&&delete n.trustedTypesPolicy,n.catchError=!0,self.require.config(n)),new Promise((i,f)=>{self.require([r],b=>{if(this._requestHandler=b.create(o),!this._requestHandler){f(new Error("No RequestHandler!"));return}i(u.getAllMethodNames(this._requestHandler))},f)}))}}t.SimpleWorkerServer=a;function S(v){return new a(v,null)}t.create=S}),V(z[23],G([0,1,12]),function(I,t,p){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CharacterSet=t.CharacterClassifier=void 0;class P{constructor(d){let l=p.toUint8(d);this._defaultValue=l,this._asciiMap=P._createAsciiMap(l),this._map=new Map}static _createAsciiMap(d){let l=new Uint8Array(256);for(let s=0;s<256;s++)l[s]=d;return l}set(d,l){let s=p.toUint8(l);d>=0&&d<256?this._asciiMap[d]=s:this._map.set(d,s)}get(d){return d>=0&&d<256?this._asciiMap[d]:this._map.get(d)||this._defaultValue}}t.CharacterClassifier=P;class E{constructor(){this._actual=new P(0)}add(d){this._actual.set(d,1)}has(d){return this._actual.get(d)===1}}t.CharacterSet=E}),V(z[3],G([0,1]),function(I,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Position=void 0;class p{constructor(E,u){this.lineNumber=E,this.column=u}with(E=this.lineNumber,u=this.column){return E===this.lineNumber&&u===this.column?this:new p(E,u)}delta(E=0,u=0){return this.with(this.lineNumber+E,this.column+u)}equals(E){return p.equals(this,E)}static equals(E,u){return!E&&!u?!0:!!E&&!!u&&E.lineNumber===u.lineNumber&&E.column===u.column}isBefore(E){return p.isBefore(this,E)}static isBefore(E,u){return E.lineNumberl||u===l&&d>s?(this.startLineNumber=l,this.startColumn=s,this.endLineNumber=u,this.endColumn=d):(this.startLineNumber=u,this.startColumn=d,this.endLineNumber=l,this.endColumn=s)}isEmpty(){return P.isEmpty(this)}static isEmpty(u){return u.startLineNumber===u.endLineNumber&&u.startColumn===u.endColumn}containsPosition(u){return P.containsPosition(this,u)}static containsPosition(u,d){return!(d.lineNumberu.endLineNumber||d.lineNumber===u.startLineNumber&&d.columnu.endColumn)}containsRange(u){return P.containsRange(this,u)}static containsRange(u,d){return!(d.startLineNumberu.endLineNumber||d.endLineNumber>u.endLineNumber||d.startLineNumber===u.startLineNumber&&d.startColumnu.endColumn)}strictContainsRange(u){return P.strictContainsRange(this,u)}static strictContainsRange(u,d){return!(d.startLineNumberu.endLineNumber||d.endLineNumber>u.endLineNumber||d.startLineNumber===u.startLineNumber&&d.startColumn<=u.startColumn||d.endLineNumber===u.endLineNumber&&d.endColumn>=u.endColumn)}plusRange(u){return P.plusRange(this,u)}static plusRange(u,d){let l,s,h,w;return d.startLineNumberu.endLineNumber?(h=d.endLineNumber,w=d.endColumn):d.endLineNumber===u.endLineNumber?(h=d.endLineNumber,w=Math.max(d.endColumn,u.endColumn)):(h=u.endLineNumber,w=u.endColumn),new P(l,s,h,w)}intersectRanges(u){return P.intersectRanges(this,u)}static intersectRanges(u,d){let l=u.startLineNumber,s=u.startColumn,h=u.endLineNumber,w=u.endColumn,a=d.startLineNumber,S=d.startColumn,v=d.endLineNumber,C=d.endColumn;return lv?(h=v,w=C):h===v&&(w=Math.min(w,C)),l>h||l===h&&s>w?null:new P(l,s,h,w)}equalsRange(u){return P.equalsRange(this,u)}static equalsRange(u,d){return!!u&&!!d&&u.startLineNumber===d.startLineNumber&&u.startColumn===d.startColumn&&u.endLineNumber===d.endLineNumber&&u.endColumn===d.endColumn}getEndPosition(){return P.getEndPosition(this)}static getEndPosition(u){return new p.Position(u.endLineNumber,u.endColumn)}getStartPosition(){return P.getStartPosition(this)}static getStartPosition(u){return new p.Position(u.startLineNumber,u.startColumn)}toString(){return"["+this.startLineNumber+","+this.startColumn+" -> "+this.endLineNumber+","+this.endColumn+"]"}setEndPosition(u,d){return new P(this.startLineNumber,this.startColumn,u,d)}setStartPosition(u,d){return new P(u,d,this.endLineNumber,this.endColumn)}collapseToStart(){return P.collapseToStart(this)}static collapseToStart(u){return new P(u.startLineNumber,u.startColumn,u.startLineNumber,u.startColumn)}static fromPositions(u,d=u){return new P(u.lineNumber,u.column,d.lineNumber,d.column)}static lift(u){return u?new P(u.startLineNumber,u.startColumn,u.endLineNumber,u.endColumn):null}static isIRange(u){return u&&typeof u.startLineNumber=="number"&&typeof u.startColumn=="number"&&typeof u.endLineNumber=="number"&&typeof u.endColumn=="number"}static areIntersectingOrTouching(u,d){return!(u.endLineNumberu.startLineNumber}}t.Range=P}),V(z[24],G([0,1,3,6]),function(I,t,p,P){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Selection=void 0;class E extends P.Range{constructor(d,l,s,h){super(d,l,s,h);this.selectionStartLineNumber=d,this.selectionStartColumn=l,this.positionLineNumber=s,this.positionColumn=h}toString(){return"["+this.selectionStartLineNumber+","+this.selectionStartColumn+" -> "+this.positionLineNumber+","+this.positionColumn+"]"}equalsSelection(d){return E.selectionsEqual(this,d)}static selectionsEqual(d,l){return d.selectionStartLineNumber===l.selectionStartLineNumber&&d.selectionStartColumn===l.selectionStartColumn&&d.positionLineNumber===l.positionLineNumber&&d.positionColumn===l.positionColumn}getDirection(){return this.selectionStartLineNumber===this.startLineNumber&&this.selectionStartColumn===this.startColumn?0:1}setEndPosition(d,l){return this.getDirection()===0?new E(this.startLineNumber,this.startColumn,d,l):new E(d,l,this.startLineNumber,this.startColumn)}getPosition(){return new p.Position(this.positionLineNumber,this.positionColumn)}setStartPosition(d,l){return this.getDirection()===0?new E(d,l,this.endLineNumber,this.endColumn):new E(this.endLineNumber,this.endColumn,d,l)}static fromPositions(d,l=d){return new E(d.lineNumber,d.column,l.lineNumber,l.column)}static liftSelection(d){return new E(d.selectionStartLineNumber,d.selectionStartColumn,d.positionLineNumber,d.positionColumn)}static selectionsArrEqual(d,l){if(d&&!l||!d&&l)return!1;if(!d&&!l)return!0;if(d.length!==l.length)return!1;for(let s=0,h=d.length;s0&&m.originalLength<20&&m.modifiedLength>0&&m.modifiedLength<20&&i()){const M=_.createCharSequence(r,m.originalStart,m.originalStart+m.originalLength-1),R=o.createCharSequence(r,m.modifiedStart,m.modifiedStart+m.modifiedLength-1);let D=u(M,R,i,!0).changes;b&&(D=h(D)),A=[];for(let T=0,$=D.length;T<$;T++)A.push(s.createFromDiffChange(D[T],M,R))}return new w(N,c,g,L,A)}}class a{constructor(r,m,_){this.shouldComputeCharChanges=_.shouldComputeCharChanges,this.shouldPostProcessCharChanges=_.shouldPostProcessCharChanges,this.shouldIgnoreTrimWhitespace=_.shouldIgnoreTrimWhitespace,this.shouldMakePrettyDiff=_.shouldMakePrettyDiff,this.originalLines=r,this.modifiedLines=m,this.original=new d(r),this.modified=new d(m),this.continueLineDiff=C(_.maxComputationTime),this.continueCharDiff=C(_.maxComputationTime===0?0:Math.min(_.maxComputationTime,5e3))}computeDiff(){if(this.original.lines.length===1&&this.original.lines[0].length===0)return this.modified.lines.length===1&&this.modified.lines[0].length===0?{quitEarly:!1,changes:[]}:{quitEarly:!1,changes:[{originalStartLineNumber:1,originalEndLineNumber:1,modifiedStartLineNumber:1,modifiedEndLineNumber:this.modified.lines.length,charChanges:[{modifiedEndColumn:0,modifiedEndLineNumber:0,modifiedStartColumn:0,modifiedStartLineNumber:0,originalEndColumn:0,originalEndLineNumber:0,originalStartColumn:0,originalStartLineNumber:0}]}]};if(this.modified.lines.length===1&&this.modified.lines[0].length===0)return{quitEarly:!1,changes:[{originalStartLineNumber:1,originalEndLineNumber:this.original.lines.length,modifiedStartLineNumber:1,modifiedEndLineNumber:1,charChanges:[{modifiedEndColumn:0,modifiedEndLineNumber:0,modifiedStartColumn:0,modifiedStartLineNumber:0,originalEndColumn:0,originalEndLineNumber:0,originalStartColumn:0,originalStartLineNumber:0}]}]};const r=u(this.original,this.modified,this.continueLineDiff,this.shouldMakePrettyDiff),m=r.changes,_=r.quitEarly;if(this.shouldIgnoreTrimWhitespace){const b=[];for(let N=0,c=m.length;N1&&D>1;){const T=A.charCodeAt(R-2),$=M.charCodeAt(D-2);if(T!==$)break;R--,D--}(R>1||D>1)&&this._pushTrimWhitespaceCharChange(o,i+1,1,R,f+1,1,D)}{let R=v(A,1),D=v(M,1);const T=A.length+1,$=M.length+1;for(;R!0;const r=Date.now();return()=>Date.now()-r/?";function p(l=""){let s="(-?\\d*\\.\\d\\w*)|([^";for(const h of t.USUAL_WORD_SEPARATORS)l.indexOf(h)>=0||(s+="\\"+h);return s+="\\s]+)",new RegExp(s,"g")}t.DEFAULT_WORD_REGEXP=p();function P(l){let s=t.DEFAULT_WORD_REGEXP;if(l&&l instanceof RegExp)if(l.global)s=l;else{let h="g";l.ignoreCase&&(h+="i"),l.multiline&&(h+="m"),l.unicode&&(h+="u"),s=new RegExp(l.source,h)}return s.lastIndex=0,s}t.ensureValidWordDefinition=P;const E={maxLen:1e3,windowSize:15,timeBudget:150};function u(l,s,h,w,a=E){if(h.length>a.maxLen){let r=l-a.maxLen/2;return r<0?r=0:w+=r,h=h.substring(r,l+a.maxLen/2),u(l,s,h,w,a)}const S=Date.now(),v=l-1-w;let C=-1,n=null;for(let r=1;!(Date.now()-S>=a.timeBudget);r++){const m=v-a.windowSize*r;s.lastIndex=Math.max(0,m);const _=d(s,h,v,C);if(!_&&n||(n=_,m<=0))break;C=m}if(n){let r={word:n[0],startColumn:w+1+n.index,endColumn:w+1+n.index+n[0].length};return s.lastIndex=0,r}return null}t.getWordAtText=u;function d(l,s,h,w){let a;for(;a=l.exec(s);){const S=a.index||0;if(S<=h&&l.lastIndex>=h)return a;if(w>0&&S>w)return null}return null}}),V(z[28],G([0,1,23]),function(I,t,p){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.computeLinks=t.LinkComputer=t.StateMachine=t.Uint8Matrix=void 0;class P{constructor(S,v,C){const n=new Uint8Array(S*v);for(let r=0,m=S*v;rv&&(v=o),_>C&&(C=_),i>C&&(C=i)}v++,C++;let n=new P(C,v,0);for(let r=0,m=S.length;r=this._maxCharCode?0:this._states.get(S,v)}}t.StateMachine=E;let u=null;function d(){return u===null&&(u=new E([[1,104,2],[1,72,2],[1,102,6],[1,70,6],[2,116,3],[2,84,3],[3,116,4],[3,84,4],[4,112,5],[4,80,5],[5,115,9],[5,83,9],[5,58,10],[6,105,7],[6,73,7],[7,108,8],[7,76,8],[8,101,9],[8,69,9],[9,58,10],[10,47,11],[11,47,12]])),u}let l=null;function s(){if(l===null){l=new p.CharacterClassifier(0);const a=` <>'"\u3001\u3002\uFF61\uFF64\uFF0C\uFF0E\uFF1A\uFF1B\u2018\u201C\u3008\u300A\u300C\u300E\u3010\u3014\uFF08\uFF3B\uFF5B\uFF62\uFF63\uFF5D\uFF3D\uFF09\u3015\u3011\u300F\u300D\u300B\u3009\u201D\u2019\uFF40\uFF5E\u2026`;for(let v=0;vn);if(n>0){const _=v.charCodeAt(n-1),o=v.charCodeAt(m);(_===40&&o===41||_===91&&o===93||_===123&&o===125)&&m--}return{range:{startLineNumber:C,startColumn:n+1,endLineNumber:C,endColumn:m+2},url:v.substring(n,m+1)}}static computeLinks(S,v=d()){const C=s();let n=[];for(let r=1,m=S.getLineCount();r<=m;r++){const _=S.getLineContent(r),o=_.length;let i=0,f=0,b=0,N=1,c=!1,g=!1,L=!1,A=!1;for(;i=0?(l+=d?1:-1,l<0?l=E.length-1:l%=E.length,E[l]):null}}t.BasicInplaceReplace=p,p.INSTANCE=new p}),V(z[30],G([0,1]),function(I,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.WrappingIndent=t.TrackedRangeStickiness=t.TextEditorCursorStyle=t.TextEditorCursorBlinkingStyle=t.SymbolTag=t.SymbolKind=t.SignatureHelpTriggerKind=t.SelectionDirection=t.ScrollbarVisibility=t.ScrollType=t.RenderMinimap=t.RenderLineNumbersType=t.OverviewRulerLane=t.OverlayWidgetPositionPreference=t.MouseTargetType=t.MinimapPosition=t.MarkerTag=t.MarkerSeverity=t.KeyCode=t.InlineHintKind=t.IndentAction=t.EndOfLineSequence=t.EndOfLinePreference=t.EditorOption=t.EditorAutoIndentStrategy=t.DocumentHighlightKind=t.DefaultEndOfLine=t.CursorChangeReason=t.ContentWidgetPositionPreference=t.CompletionTriggerKind=t.CompletionItemTag=t.CompletionItemKind=t.CompletionItemInsertTextRule=t.AccessibilitySupport=void 0;var p;(function(e){e[e.Unknown=0]="Unknown",e[e.Disabled=1]="Disabled",e[e.Enabled=2]="Enabled"})(p=t.AccessibilitySupport||(t.AccessibilitySupport={}));var P;(function(e){e[e.KeepWhitespace=1]="KeepWhitespace",e[e.InsertAsSnippet=4]="InsertAsSnippet"})(P=t.CompletionItemInsertTextRule||(t.CompletionItemInsertTextRule={}));var E;(function(e){e[e.Method=0]="Method",e[e.Function=1]="Function",e[e.Constructor=2]="Constructor",e[e.Field=3]="Field",e[e.Variable=4]="Variable",e[e.Class=5]="Class",e[e.Struct=6]="Struct",e[e.Interface=7]="Interface",e[e.Module=8]="Module",e[e.Property=9]="Property",e[e.Event=10]="Event",e[e.Operator=11]="Operator",e[e.Unit=12]="Unit",e[e.Value=13]="Value",e[e.Constant=14]="Constant",e[e.Enum=15]="Enum",e[e.EnumMember=16]="EnumMember",e[e.Keyword=17]="Keyword",e[e.Text=18]="Text",e[e.Color=19]="Color",e[e.File=20]="File",e[e.Reference=21]="Reference",e[e.Customcolor=22]="Customcolor",e[e.Folder=23]="Folder",e[e.TypeParameter=24]="TypeParameter",e[e.User=25]="User",e[e.Issue=26]="Issue",e[e.Snippet=27]="Snippet"})(E=t.CompletionItemKind||(t.CompletionItemKind={}));var u;(function(e){e[e.Deprecated=1]="Deprecated"})(u=t.CompletionItemTag||(t.CompletionItemTag={}));var d;(function(e){e[e.Invoke=0]="Invoke",e[e.TriggerCharacter=1]="TriggerCharacter",e[e.TriggerForIncompleteCompletions=2]="TriggerForIncompleteCompletions"})(d=t.CompletionTriggerKind||(t.CompletionTriggerKind={}));var l;(function(e){e[e.EXACT=0]="EXACT",e[e.ABOVE=1]="ABOVE",e[e.BELOW=2]="BELOW"})(l=t.ContentWidgetPositionPreference||(t.ContentWidgetPositionPreference={}));var s;(function(e){e[e.NotSet=0]="NotSet",e[e.ContentFlush=1]="ContentFlush",e[e.RecoverFromMarkers=2]="RecoverFromMarkers",e[e.Explicit=3]="Explicit",e[e.Paste=4]="Paste",e[e.Undo=5]="Undo",e[e.Redo=6]="Redo"})(s=t.CursorChangeReason||(t.CursorChangeReason={}));var h;(function(e){e[e.LF=1]="LF",e[e.CRLF=2]="CRLF"})(h=t.DefaultEndOfLine||(t.DefaultEndOfLine={}));var w;(function(e){e[e.Text=0]="Text",e[e.Read=1]="Read",e[e.Write=2]="Write"})(w=t.DocumentHighlightKind||(t.DocumentHighlightKind={}));var a;(function(e){e[e.None=0]="None",e[e.Keep=1]="Keep",e[e.Brackets=2]="Brackets",e[e.Advanced=3]="Advanced",e[e.Full=4]="Full"})(a=t.EditorAutoIndentStrategy||(t.EditorAutoIndentStrategy={}));var S;(function(e){e[e.acceptSuggestionOnCommitCharacter=0]="acceptSuggestionOnCommitCharacter",e[e.acceptSuggestionOnEnter=1]="acceptSuggestionOnEnter",e[e.accessibilitySupport=2]="accessibilitySupport",e[e.accessibilityPageSize=3]="accessibilityPageSize",e[e.ariaLabel=4]="ariaLabel",e[e.autoClosingBrackets=5]="autoClosingBrackets",e[e.autoClosingOvertype=6]="autoClosingOvertype",e[e.autoClosingQuotes=7]="autoClosingQuotes",e[e.autoIndent=8]="autoIndent",e[e.automaticLayout=9]="automaticLayout",e[e.autoSurround=10]="autoSurround",e[e.codeLens=11]="codeLens",e[e.codeLensFontFamily=12]="codeLensFontFamily",e[e.codeLensFontSize=13]="codeLensFontSize",e[e.colorDecorators=14]="colorDecorators",e[e.columnSelection=15]="columnSelection",e[e.comments=16]="comments",e[e.contextmenu=17]="contextmenu",e[e.copyWithSyntaxHighlighting=18]="copyWithSyntaxHighlighting",e[e.cursorBlinking=19]="cursorBlinking",e[e.cursorSmoothCaretAnimation=20]="cursorSmoothCaretAnimation",e[e.cursorStyle=21]="cursorStyle",e[e.cursorSurroundingLines=22]="cursorSurroundingLines",e[e.cursorSurroundingLinesStyle=23]="cursorSurroundingLinesStyle",e[e.cursorWidth=24]="cursorWidth",e[e.disableLayerHinting=25]="disableLayerHinting",e[e.disableMonospaceOptimizations=26]="disableMonospaceOptimizations",e[e.dragAndDrop=27]="dragAndDrop",e[e.emptySelectionClipboard=28]="emptySelectionClipboard",e[e.extraEditorClassName=29]="extraEditorClassName",e[e.fastScrollSensitivity=30]="fastScrollSensitivity",e[e.find=31]="find",e[e.fixedOverflowWidgets=32]="fixedOverflowWidgets",e[e.folding=33]="folding",e[e.foldingStrategy=34]="foldingStrategy",e[e.foldingHighlight=35]="foldingHighlight",e[e.unfoldOnClickAfterEndOfLine=36]="unfoldOnClickAfterEndOfLine",e[e.fontFamily=37]="fontFamily",e[e.fontInfo=38]="fontInfo",e[e.fontLigatures=39]="fontLigatures",e[e.fontSize=40]="fontSize",e[e.fontWeight=41]="fontWeight",e[e.formatOnPaste=42]="formatOnPaste",e[e.formatOnType=43]="formatOnType",e[e.glyphMargin=44]="glyphMargin",e[e.gotoLocation=45]="gotoLocation",e[e.hideCursorInOverviewRuler=46]="hideCursorInOverviewRuler",e[e.highlightActiveIndentGuide=47]="highlightActiveIndentGuide",e[e.hover=48]="hover",e[e.inDiffEditor=49]="inDiffEditor",e[e.letterSpacing=50]="letterSpacing",e[e.lightbulb=51]="lightbulb",e[e.lineDecorationsWidth=52]="lineDecorationsWidth",e[e.lineHeight=53]="lineHeight",e[e.lineNumbers=54]="lineNumbers",e[e.lineNumbersMinChars=55]="lineNumbersMinChars",e[e.linkedEditing=56]="linkedEditing",e[e.links=57]="links",e[e.matchBrackets=58]="matchBrackets",e[e.minimap=59]="minimap",e[e.mouseStyle=60]="mouseStyle",e[e.mouseWheelScrollSensitivity=61]="mouseWheelScrollSensitivity",e[e.mouseWheelZoom=62]="mouseWheelZoom",e[e.multiCursorMergeOverlapping=63]="multiCursorMergeOverlapping",e[e.multiCursorModifier=64]="multiCursorModifier",e[e.multiCursorPaste=65]="multiCursorPaste",e[e.occurrencesHighlight=66]="occurrencesHighlight",e[e.overviewRulerBorder=67]="overviewRulerBorder",e[e.overviewRulerLanes=68]="overviewRulerLanes",e[e.padding=69]="padding",e[e.parameterHints=70]="parameterHints",e[e.peekWidgetDefaultFocus=71]="peekWidgetDefaultFocus",e[e.definitionLinkOpensInPeek=72]="definitionLinkOpensInPeek",e[e.quickSuggestions=73]="quickSuggestions",e[e.quickSuggestionsDelay=74]="quickSuggestionsDelay",e[e.readOnly=75]="readOnly",e[e.renameOnType=76]="renameOnType",e[e.renderControlCharacters=77]="renderControlCharacters",e[e.renderIndentGuides=78]="renderIndentGuides",e[e.renderFinalNewline=79]="renderFinalNewline",e[e.renderLineHighlight=80]="renderLineHighlight",e[e.renderLineHighlightOnlyWhenFocus=81]="renderLineHighlightOnlyWhenFocus",e[e.renderValidationDecorations=82]="renderValidationDecorations",e[e.renderWhitespace=83]="renderWhitespace",e[e.revealHorizontalRightPadding=84]="revealHorizontalRightPadding",e[e.roundedSelection=85]="roundedSelection",e[e.rulers=86]="rulers",e[e.scrollbar=87]="scrollbar",e[e.scrollBeyondLastColumn=88]="scrollBeyondLastColumn",e[e.scrollBeyondLastLine=89]="scrollBeyondLastLine",e[e.scrollPredominantAxis=90]="scrollPredominantAxis",e[e.selectionClipboard=91]="selectionClipboard",e[e.selectionHighlight=92]="selectionHighlight",e[e.selectOnLineNumbers=93]="selectOnLineNumbers",e[e.showFoldingControls=94]="showFoldingControls",e[e.showUnused=95]="showUnused",e[e.snippetSuggestions=96]="snippetSuggestions",e[e.smartSelect=97]="smartSelect",e[e.smoothScrolling=98]="smoothScrolling",e[e.stickyTabStops=99]="stickyTabStops",e[e.stopRenderingLineAfter=100]="stopRenderingLineAfter",e[e.suggest=101]="suggest",e[e.suggestFontSize=102]="suggestFontSize",e[e.suggestLineHeight=103]="suggestLineHeight",e[e.suggestOnTriggerCharacters=104]="suggestOnTriggerCharacters",e[e.suggestSelection=105]="suggestSelection",e[e.tabCompletion=106]="tabCompletion",e[e.tabIndex=107]="tabIndex",e[e.unusualLineTerminators=108]="unusualLineTerminators",e[e.useTabStops=109]="useTabStops",e[e.wordSeparators=110]="wordSeparators",e[e.wordWrap=111]="wordWrap",e[e.wordWrapBreakAfterCharacters=112]="wordWrapBreakAfterCharacters",e[e.wordWrapBreakBeforeCharacters=113]="wordWrapBreakBeforeCharacters",e[e.wordWrapColumn=114]="wordWrapColumn",e[e.wordWrapOverride1=115]="wordWrapOverride1",e[e.wordWrapOverride2=116]="wordWrapOverride2",e[e.wrappingIndent=117]="wrappingIndent",e[e.wrappingStrategy=118]="wrappingStrategy",e[e.showDeprecated=119]="showDeprecated",e[e.inlineHints=120]="inlineHints",e[e.editorClassName=121]="editorClassName",e[e.pixelRatio=122]="pixelRatio",e[e.tabFocusMode=123]="tabFocusMode",e[e.layoutInfo=124]="layoutInfo",e[e.wrappingInfo=125]="wrappingInfo"})(S=t.EditorOption||(t.EditorOption={}));var v;(function(e){e[e.TextDefined=0]="TextDefined",e[e.LF=1]="LF",e[e.CRLF=2]="CRLF"})(v=t.EndOfLinePreference||(t.EndOfLinePreference={}));var C;(function(e){e[e.LF=0]="LF",e[e.CRLF=1]="CRLF"})(C=t.EndOfLineSequence||(t.EndOfLineSequence={}));var n;(function(e){e[e.None=0]="None",e[e.Indent=1]="Indent",e[e.IndentOutdent=2]="IndentOutdent",e[e.Outdent=3]="Outdent"})(n=t.IndentAction||(t.IndentAction={}));var r;(function(e){e[e.Other=0]="Other",e[e.Type=1]="Type",e[e.Parameter=2]="Parameter"})(r=t.InlineHintKind||(t.InlineHintKind={}));var m;(function(e){e[e.Unknown=0]="Unknown",e[e.Backspace=1]="Backspace",e[e.Tab=2]="Tab",e[e.Enter=3]="Enter",e[e.Shift=4]="Shift",e[e.Ctrl=5]="Ctrl",e[e.Alt=6]="Alt",e[e.PauseBreak=7]="PauseBreak",e[e.CapsLock=8]="CapsLock",e[e.Escape=9]="Escape",e[e.Space=10]="Space",e[e.PageUp=11]="PageUp",e[e.PageDown=12]="PageDown",e[e.End=13]="End",e[e.Home=14]="Home",e[e.LeftArrow=15]="LeftArrow",e[e.UpArrow=16]="UpArrow",e[e.RightArrow=17]="RightArrow",e[e.DownArrow=18]="DownArrow",e[e.Insert=19]="Insert",e[e.Delete=20]="Delete",e[e.KEY_0=21]="KEY_0",e[e.KEY_1=22]="KEY_1",e[e.KEY_2=23]="KEY_2",e[e.KEY_3=24]="KEY_3",e[e.KEY_4=25]="KEY_4",e[e.KEY_5=26]="KEY_5",e[e.KEY_6=27]="KEY_6",e[e.KEY_7=28]="KEY_7",e[e.KEY_8=29]="KEY_8",e[e.KEY_9=30]="KEY_9",e[e.KEY_A=31]="KEY_A",e[e.KEY_B=32]="KEY_B",e[e.KEY_C=33]="KEY_C",e[e.KEY_D=34]="KEY_D",e[e.KEY_E=35]="KEY_E",e[e.KEY_F=36]="KEY_F",e[e.KEY_G=37]="KEY_G",e[e.KEY_H=38]="KEY_H",e[e.KEY_I=39]="KEY_I",e[e.KEY_J=40]="KEY_J",e[e.KEY_K=41]="KEY_K",e[e.KEY_L=42]="KEY_L",e[e.KEY_M=43]="KEY_M",e[e.KEY_N=44]="KEY_N",e[e.KEY_O=45]="KEY_O",e[e.KEY_P=46]="KEY_P",e[e.KEY_Q=47]="KEY_Q",e[e.KEY_R=48]="KEY_R",e[e.KEY_S=49]="KEY_S",e[e.KEY_T=50]="KEY_T",e[e.KEY_U=51]="KEY_U",e[e.KEY_V=52]="KEY_V",e[e.KEY_W=53]="KEY_W",e[e.KEY_X=54]="KEY_X",e[e.KEY_Y=55]="KEY_Y",e[e.KEY_Z=56]="KEY_Z",e[e.Meta=57]="Meta",e[e.ContextMenu=58]="ContextMenu",e[e.F1=59]="F1",e[e.F2=60]="F2",e[e.F3=61]="F3",e[e.F4=62]="F4",e[e.F5=63]="F5",e[e.F6=64]="F6",e[e.F7=65]="F7",e[e.F8=66]="F8",e[e.F9=67]="F9",e[e.F10=68]="F10",e[e.F11=69]="F11",e[e.F12=70]="F12",e[e.F13=71]="F13",e[e.F14=72]="F14",e[e.F15=73]="F15",e[e.F16=74]="F16",e[e.F17=75]="F17",e[e.F18=76]="F18",e[e.F19=77]="F19",e[e.NumLock=78]="NumLock",e[e.ScrollLock=79]="ScrollLock",e[e.US_SEMICOLON=80]="US_SEMICOLON",e[e.US_EQUAL=81]="US_EQUAL",e[e.US_COMMA=82]="US_COMMA",e[e.US_MINUS=83]="US_MINUS",e[e.US_DOT=84]="US_DOT",e[e.US_SLASH=85]="US_SLASH",e[e.US_BACKTICK=86]="US_BACKTICK",e[e.US_OPEN_SQUARE_BRACKET=87]="US_OPEN_SQUARE_BRACKET",e[e.US_BACKSLASH=88]="US_BACKSLASH",e[e.US_CLOSE_SQUARE_BRACKET=89]="US_CLOSE_SQUARE_BRACKET",e[e.US_QUOTE=90]="US_QUOTE",e[e.OEM_8=91]="OEM_8",e[e.OEM_102=92]="OEM_102",e[e.NUMPAD_0=93]="NUMPAD_0",e[e.NUMPAD_1=94]="NUMPAD_1",e[e.NUMPAD_2=95]="NUMPAD_2",e[e.NUMPAD_3=96]="NUMPAD_3",e[e.NUMPAD_4=97]="NUMPAD_4",e[e.NUMPAD_5=98]="NUMPAD_5",e[e.NUMPAD_6=99]="NUMPAD_6",e[e.NUMPAD_7=100]="NUMPAD_7",e[e.NUMPAD_8=101]="NUMPAD_8",e[e.NUMPAD_9=102]="NUMPAD_9",e[e.NUMPAD_MULTIPLY=103]="NUMPAD_MULTIPLY",e[e.NUMPAD_ADD=104]="NUMPAD_ADD",e[e.NUMPAD_SEPARATOR=105]="NUMPAD_SEPARATOR",e[e.NUMPAD_SUBTRACT=106]="NUMPAD_SUBTRACT",e[e.NUMPAD_DECIMAL=107]="NUMPAD_DECIMAL",e[e.NUMPAD_DIVIDE=108]="NUMPAD_DIVIDE",e[e.KEY_IN_COMPOSITION=109]="KEY_IN_COMPOSITION",e[e.ABNT_C1=110]="ABNT_C1",e[e.ABNT_C2=111]="ABNT_C2",e[e.MAX_VALUE=112]="MAX_VALUE"})(m=t.KeyCode||(t.KeyCode={}));var _;(function(e){e[e.Hint=1]="Hint",e[e.Info=2]="Info",e[e.Warning=4]="Warning",e[e.Error=8]="Error"})(_=t.MarkerSeverity||(t.MarkerSeverity={}));var o;(function(e){e[e.Unnecessary=1]="Unnecessary",e[e.Deprecated=2]="Deprecated"})(o=t.MarkerTag||(t.MarkerTag={}));var i;(function(e){e[e.Inline=1]="Inline",e[e.Gutter=2]="Gutter"})(i=t.MinimapPosition||(t.MinimapPosition={}));var f;(function(e){e[e.UNKNOWN=0]="UNKNOWN",e[e.TEXTAREA=1]="TEXTAREA",e[e.GUTTER_GLYPH_MARGIN=2]="GUTTER_GLYPH_MARGIN",e[e.GUTTER_LINE_NUMBERS=3]="GUTTER_LINE_NUMBERS",e[e.GUTTER_LINE_DECORATIONS=4]="GUTTER_LINE_DECORATIONS",e[e.GUTTER_VIEW_ZONE=5]="GUTTER_VIEW_ZONE",e[e.CONTENT_TEXT=6]="CONTENT_TEXT",e[e.CONTENT_EMPTY=7]="CONTENT_EMPTY",e[e.CONTENT_VIEW_ZONE=8]="CONTENT_VIEW_ZONE",e[e.CONTENT_WIDGET=9]="CONTENT_WIDGET",e[e.OVERVIEW_RULER=10]="OVERVIEW_RULER",e[e.SCROLLBAR=11]="SCROLLBAR",e[e.OVERLAY_WIDGET=12]="OVERLAY_WIDGET",e[e.OUTSIDE_EDITOR=13]="OUTSIDE_EDITOR"})(f=t.MouseTargetType||(t.MouseTargetType={}));var b;(function(e){e[e.TOP_RIGHT_CORNER=0]="TOP_RIGHT_CORNER",e[e.BOTTOM_RIGHT_CORNER=1]="BOTTOM_RIGHT_CORNER",e[e.TOP_CENTER=2]="TOP_CENTER"})(b=t.OverlayWidgetPositionPreference||(t.OverlayWidgetPositionPreference={}));var N;(function(e){e[e.Left=1]="Left",e[e.Center=2]="Center",e[e.Right=4]="Right",e[e.Full=7]="Full"})(N=t.OverviewRulerLane||(t.OverviewRulerLane={}));var c;(function(e){e[e.Off=0]="Off",e[e.On=1]="On",e[e.Relative=2]="Relative",e[e.Interval=3]="Interval",e[e.Custom=4]="Custom"})(c=t.RenderLineNumbersType||(t.RenderLineNumbersType={}));var g;(function(e){e[e.None=0]="None",e[e.Text=1]="Text",e[e.Blocks=2]="Blocks"})(g=t.RenderMinimap||(t.RenderMinimap={}));var L;(function(e){e[e.Smooth=0]="Smooth",e[e.Immediate=1]="Immediate"})(L=t.ScrollType||(t.ScrollType={}));var A;(function(e){e[e.Auto=1]="Auto",e[e.Hidden=2]="Hidden",e[e.Visible=3]="Visible"})(A=t.ScrollbarVisibility||(t.ScrollbarVisibility={}));var M;(function(e){e[e.LTR=0]="LTR",e[e.RTL=1]="RTL"})(M=t.SelectionDirection||(t.SelectionDirection={}));var R;(function(e){e[e.Invoke=1]="Invoke",e[e.TriggerCharacter=2]="TriggerCharacter",e[e.ContentChange=3]="ContentChange"})(R=t.SignatureHelpTriggerKind||(t.SignatureHelpTriggerKind={}));var D;(function(e){e[e.File=0]="File",e[e.Module=1]="Module",e[e.Namespace=2]="Namespace",e[e.Package=3]="Package",e[e.Class=4]="Class",e[e.Method=5]="Method",e[e.Property=6]="Property",e[e.Field=7]="Field",e[e.Constructor=8]="Constructor",e[e.Enum=9]="Enum",e[e.Interface=10]="Interface",e[e.Function=11]="Function",e[e.Variable=12]="Variable",e[e.Constant=13]="Constant",e[e.String=14]="String",e[e.Number=15]="Number",e[e.Boolean=16]="Boolean",e[e.Array=17]="Array",e[e.Object=18]="Object",e[e.Key=19]="Key",e[e.Null=20]="Null",e[e.EnumMember=21]="EnumMember",e[e.Struct=22]="Struct",e[e.Event=23]="Event",e[e.Operator=24]="Operator",e[e.TypeParameter=25]="TypeParameter"})(D=t.SymbolKind||(t.SymbolKind={}));var T;(function(e){e[e.Deprecated=1]="Deprecated"})(T=t.SymbolTag||(t.SymbolTag={}));var $;(function(e){e[e.Hidden=0]="Hidden",e[e.Blink=1]="Blink",e[e.Smooth=2]="Smooth",e[e.Phase=3]="Phase",e[e.Expand=4]="Expand",e[e.Solid=5]="Solid"})($=t.TextEditorCursorBlinkingStyle||(t.TextEditorCursorBlinkingStyle={}));var k;(function(e){e[e.Line=1]="Line",e[e.Block=2]="Block",e[e.Underline=3]="Underline",e[e.LineThin=4]="LineThin",e[e.BlockOutline=5]="BlockOutline",e[e.UnderlineThin=6]="UnderlineThin"})(k=t.TextEditorCursorStyle||(t.TextEditorCursorStyle={}));var F;(function(e){e[e.AlwaysGrowsWhenTypingAtEdges=0]="AlwaysGrowsWhenTypingAtEdges",e[e.NeverGrowsWhenTypingAtEdges=1]="NeverGrowsWhenTypingAtEdges",e[e.GrowsOnlyWhenTypingBefore=2]="GrowsOnlyWhenTypingBefore",e[e.GrowsOnlyWhenTypingAfter=3]="GrowsOnlyWhenTypingAfter"})(F=t.TrackedRangeStickiness||(t.TrackedRangeStickiness={}));var O;(function(e){e[e.None=0]="None",e[e.Same=1]="Same",e[e.Indent=2]="Indent",e[e.DeepIndent=3]="DeepIndent"})(O=t.WrappingIndent||(t.WrappingIndent={}))}),V(z[31],G([0,1,21,9,17,13,3,6,24,25,30]),function(I,t,p,P,E,u,d,l,s,h,w){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.createMonacoBaseAPI=t.KeyMod=void 0;class a{static chord(C,n){return E.KeyChord(C,n)}}t.KeyMod=a,a.CtrlCmd=2048,a.Shift=1024,a.Alt=512,a.WinCtrl=256;function S(){return{editor:void 0,languages:void 0,CancellationTokenSource:p.CancellationTokenSource,Emitter:P.Emitter,KeyCode:w.KeyCode,KeyMod:a,Position:d.Position,Range:l.Range,Selection:s.Selection,SelectionDirection:w.SelectionDirection,MarkerSeverity:w.MarkerSeverity,MarkerTag:w.MarkerTag,Uri:u.URI,Token:h.Token}}t.createMonacoBaseAPI=S}),V(z[32],G([0,1,12]),function(I,t,p){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.PrefixSumComputer=t.PrefixSumIndexOfResult=void 0;class P{constructor(d,l){this.index=d,this.remainder=l}}t.PrefixSumIndexOfResult=P;class E{constructor(d){this.values=d,this.prefixSum=new Uint32Array(d.length),this.prefixSumValidIndex=new Int32Array(1),this.prefixSumValidIndex[0]=-1}insertValues(d,l){d=p.toUint32(d);const s=this.values,h=this.prefixSum,w=l.length;return w===0?!1:(this.values=new Uint32Array(s.length+w),this.values.set(s.subarray(0,d),0),this.values.set(s.subarray(d),d+w),this.values.set(l,d),d-1=0&&this.prefixSum.set(h.subarray(0,this.prefixSumValidIndex[0]+1)),!0)}changeValue(d,l){return d=p.toUint32(d),l=p.toUint32(l),this.values[d]===l?!1:(this.values[d]=l,d-1=s.length)return!1;let w=s.length-d;return l>=w&&(l=w),l===0?!1:(this.values=new Uint32Array(s.length-l),this.values.set(s.subarray(0,d),0),this.values.set(s.subarray(d+l),d),this.prefixSum=new Uint32Array(this.values.length),d-1=0&&this.prefixSum.set(h.subarray(0,this.prefixSumValidIndex[0]+1)),!0)}getTotalValue(){return this.values.length===0?0:this._getAccumulatedValue(this.values.length-1)}getAccumulatedValue(d){return d<0?0:(d=p.toUint32(d),this._getAccumulatedValue(d))}_getAccumulatedValue(d){if(d<=this.prefixSumValidIndex[0])return this.prefixSum[d];let l=this.prefixSumValidIndex[0]+1;l===0&&(this.prefixSum[0]=this.values[0],l++),d>=this.values.length&&(d=this.values.length-1);for(let s=l;s<=d;s++)this.prefixSum[s]=this.prefixSum[s-1]+this.values[s];return this.prefixSumValidIndex[0]=Math.max(this.prefixSumValidIndex[0],d),this.prefixSum[d]}getIndexOf(d){d=Math.floor(d),this.getTotalValue();let l=0,s=this.values.length-1,h=0,w=0,a=0;for(;l<=s;)if(h=l+(s-l)/2|0,w=this.prefixSum[h],a=w-this.values[h],d=w)l=h+1;else break;return new P(h,d-a)}}t.PrefixSumComputer=E}),V(z[33],G([0,1,5,3,32]),function(I,t,p,P,E){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MirrorTextModel=void 0;class u{constructor(l,s,h,w){this._uri=l,this._lines=s,this._eol=h,this._versionId=w,this._lineStarts=null,this._cachedTextValue=null}dispose(){this._lines.length=0}getText(){return this._cachedTextValue===null&&(this._cachedTextValue=this._lines.join(this._eol)),this._cachedTextValue}onEvents(l){l.eol&&l.eol!==this._eol&&(this._eol=l.eol,this._lineStarts=null);const s=l.changes;for(const h of s)this._acceptDeleteRange(h.range),this._acceptInsertText(new P.Position(h.range.startLineNumber,h.range.startColumn),h.text);this._versionId=l.versionId,this._cachedTextValue=null}_ensureLineStarts(){if(!this._lineStarts){const l=this._eol.length,s=this._lines.length,h=new Uint32Array(s);for(let w=0;wthis._lines.length)f=this._lines.length,b=this._lines[f-1].length+1,N=!0;else{let c=this._lines[f-1].length+1;b<1?(b=1,N=!0):b>c&&(b=c,N=!0)}return N?{lineNumber:f,column:b}:i}}class m{constructor(i,f){this._host=i,this._models=Object.create(null),this._foreignModuleFactory=f,this._foreignModule=null}dispose(){this._models=Object.create(null)}_getModel(i){return this._models[i]}_getModels(){let i=[];return Object.keys(this._models).forEach(f=>i.push(this._models[f])),i}acceptNewModel(i){this._models[i.url]=new r(u.URI.parse(i.url),i.lines,i.EOL,i.versionId)}acceptModelChanged(i,f){!this._models[i]||this._models[i].onEvents(f)}acceptRemovedModel(i){!this._models[i]||delete this._models[i]}computeDiff(i,f,b,N){return ne(this,void 0,void 0,function*(){const c=this._getModel(i),g=this._getModel(f);if(!c||!g)return null;const L=c.getLinesContent(),A=g.getLinesContent(),R=new s.DiffComputer(L,A,{shouldComputeCharChanges:!0,shouldPostProcessCharChanges:!0,shouldIgnoreTrimWhitespace:b,shouldMakePrettyDiff:!0,maxComputationTime:N}).computeDiff(),D=R.changes.length>0?!1:this._modelsAreIdentical(c,g);return{quitEarly:R.quitEarly,identical:D,changes:R.changes}})}_modelsAreIdentical(i,f){const b=i.getLineCount(),N=f.getLineCount();if(b!==N)return!1;for(let c=1;c<=b;c++){const g=i.getLineContent(c),L=f.getLineContent(c);if(g!==L)return!1}return!0}computeMoreMinimalEdits(i,f){return ne(this,void 0,void 0,function*(){const b=this._getModel(i);if(!b)return f;const N=[];let c;f=p.mergeSort(f,(g,L)=>{if(g.range&&L.range)return l.Range.compareRangesUsingStarts(g.range,L.range);let A=g.range?0:1,M=L.range?0:1;return A-M});for(let{range:g,text:L,eol:A}of f)if(typeof A=="number"&&(c=A),!(l.Range.isEmpty(g)&&!L)){const M=b.getValueInRange(g);if(L=L.replace(/\r\n|\n|\r/g,b.eol),M!==L){if(Math.max(L.length,M.length)>m._diffLimit){N.push({range:g,text:L});continue}const R=P.stringDiff(M,L,!1),D=b.offsetAt(l.Range.lift(g).getStartPosition());for(const T of R){const $=b.positionAt(D+T.originalStart),k=b.positionAt(D+T.originalStart+T.originalLength),F={text:L.substr(T.modifiedStart,T.modifiedLength),range:{startLineNumber:$.lineNumber,startColumn:$.column,endLineNumber:k.lineNumber,endColumn:k.column}};b.getValueInRange(F.range)!==F.text&&N.push(F)}}}return typeof c=="number"&&N.push({eol:c,text:"",range:{startLineNumber:0,startColumn:0,endLineNumber:0,endColumn:0}}),N})}computeLinks(i){return ne(this,void 0,void 0,function*(){let f=this._getModel(i);return f?a.computeLinks(f):null})}textualSuggest(i,f,b,N){return ne(this,void 0,void 0,function*(){const c=new n.StopWatch(!0),g=new RegExp(b,N),L=new Set;e:for(let A of i){const M=this._getModel(A);if(!!M){for(let R of M.words(g))if(!(R===f||!isNaN(Number(R)))&&(L.add(R),L.size>m._suggestionsLimit))break e}}return{words:Array.from(L),duration:c.elapsed()}})}computeWordRanges(i,f,b,N){return ne(this,void 0,void 0,function*(){let c=this._getModel(i);if(!c)return Object.create(null);const g=new RegExp(b,N),L=Object.create(null);for(let A=f.startLineNumber;Athis._host.fhr(L,A);let g={host:C.createProxyObject(b,N),getMirrorModels:()=>this._getModels()};return this._foreignModuleFactory?(this._foreignModule=this._foreignModuleFactory(g,f),Promise.resolve(C.getAllMethodNames(this._foreignModule))):new Promise((L,A)=>{I([i],M=>{this._foreignModule=M.create(g,f),L(C.getAllMethodNames(this._foreignModule))},A)})}fmr(i,f){if(!this._foreignModule||typeof this._foreignModule[i]!="function")return Promise.reject(new Error("Missing requestHandler or method: "+i));try{return Promise.resolve(this._foreignModule[i].apply(this._foreignModule,f))}catch(b){return Promise.reject(b)}}}t.EditorSimpleWorker=m,m._diffLimit=1e5,m._suggestionsLimit=1e4;function _(o){return new m(o,null)}t.create=_,typeof importScripts=="function"&&(E.globals.monaco=v.createMonacoBaseAPI())});"use strict";(function(){var I,t;const p=self.MonacoEnvironment,P=p&&p.baseUrl?p.baseUrl:"../../../",E=typeof((I=self.trustedTypes)===null||I===void 0?void 0:I.createPolicy)=="function"?(t=self.trustedTypes)===null||t===void 0?void 0:t.createPolicy("amdLoader",{createScriptURL:s=>s}):void 0;if(typeof self.define!="function"||!self.define.amd){let s=P+"vs/loader.js";E&&(s=E.createScriptURL(s)),importScripts(s)}require.config({baseUrl:P,catchError:!0,trustedTypesPolicy:E});let u=function(s){require([s],function(h){setTimeout(function(){let w=h.create((a,S)=>{self.postMessage(a,S)},null);for(self.onmessage=a=>w.onmessage(a.data);l.length>0;)self.onmessage(l.shift())},0)})},d=!0,l=[];self.onmessage=s=>{if(!d){l.push(s);return}d=!1,u(s.data)}})()}).call(this); diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/abap/abap.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/abap/abap.js new file mode 100644 index 0000000000..efe87c5505 --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/abap/abap.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/abap/abap",["require","exports"],(function(e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.language=n.conf=void 0,n.conf={comments:{lineComment:"*"},brackets:[["[","]"],["(",")"]]};n.language={defaultToken:"invalid",ignoreCase:!0,tokenPostfix:".abap",keywords:["abap-source","abbreviated","abstract","accept","accepting","according","activation","actual","add","add-corresponding","adjacent","after","alias","aliases","align","all","allocate","alpha","analysis","analyzer","append","appendage","appending","application","archive","area","arithmetic","as","ascending","aspect","assert","assign","assigned","assigning","association","asynchronous","at","attributes","authority","authority-check","avg","back","background","backup","backward","badi","base","before","begin","big","binary","bintohex","bit","black","blank","blanks","blob","block","blocks","blue","bound","boundaries","bounds","boxed","break-point","buffer","by","bypassing","byte","byte-order","call","calling","case","cast","casting","catch","center","centered","chain","chain-input","chain-request","change","changing","channels","character","char-to-hex","check","checkbox","ci_","circular","class","class-coding","class-data","class-events","class-methods","class-pool","cleanup","clear","client","clob","clock","close","coalesce","code","coding","col_background","col_group","col_heading","col_key","col_negative","col_normal","col_positive","col_total","collect","color","column","columns","comment","comments","commit","common","communication","comparing","component","components","compression","compute","concat","concat_with_space","concatenate","cond","condition","connect","connection","constants","context","contexts","continue","control","controls","conv","conversion","convert","copies","copy","corresponding","country","cover","cpi","create","creating","critical","currency","currency_conversion","current","cursor","cursor-selection","customer","customer-function","dangerous","data","database","datainfo","dataset","date","dats_add_days","dats_add_months","dats_days_between","dats_is_valid","daylight","dd/mm/yy","dd/mm/yyyy","ddmmyy","deallocate","decimal_shift","decimals","declarations","deep","default","deferred","define","defining","definition","delete","deleting","demand","department","descending","describe","destination","detail","dialog","directory","disconnect","display","display-mode","distinct","divide","divide-corresponding","division","do","dummy","duplicate","duplicates","duration","during","dynamic","dynpro","edit","editor-call","else","elseif","empty","enabled","enabling","encoding","end","endat","endcase","endcatch","endchain","endclass","enddo","endenhancement","end-enhancement-section","endexec","endform","endfunction","endian","endif","ending","endinterface","end-lines","endloop","endmethod","endmodule","end-of-definition","end-of-editing","end-of-file","end-of-page","end-of-selection","endon","endprovide","endselect","end-test-injection","end-test-seam","endtry","endwhile","endwith","engineering","enhancement","enhancement-point","enhancements","enhancement-section","entries","entry","enum","environment","errormessage","errors","escaping","event","events","exact","except","exception","exceptions","exception-table","exclude","excluding","exec","execute","exists","exit","exit-command","expand","expanding","expiration","explicit","exponent","export","exporting","extend","extended","extension","extract","fail","fetch","field","field-groups","fields","field-symbol","field-symbols","file","filter","filters","filter-table","final","first","first-line","fixed-point","fkeq","fkge","flush","font","for","form","format","forward","found","frame","frames","free","friends","from","function","functionality","function-pool","further","gaps","generate","get","giving","gkeq","gkge","global","grant","green","group","groups","handle","handler","harmless","hashed","having","hdb","header","headers","heading","head-lines","help-id","help-request","hextobin","hide","high","hint","hold","hotspot","icon","id","identification","identifier","ids","if","ignore","ignoring","immediately","implementation","implementations","implemented","implicit","import","importing","inactive","incl","include","includes","including","increment","index","index-line","infotypes","inheriting","init","initial","initialization","inner","inout","input","instance","instances","instr","intensified","interface","interface-pool","interfaces","internal","intervals","into","inverse","inverted-date","is","iso","job","join","keep","keeping","kernel","key","keys","keywords","kind","language","last","late","layout","leading","leave","left","left-justified","leftplus","leftspace","legacy","length","let","level","levels","like","line","line-count","linefeed","line-selection","line-size","list","listbox","list-processing","little","llang","load","load-of-program","lob","local","locale","locator","logfile","logical","log-point","long","loop","low","lower","lpad","lpi","ltrim","mail","main","major-id","mapping","margin","mark","mask","matchcode","max","maximum","medium","members","memory","mesh","message","message-id","messages","messaging","method","methods","min","minimum","minor-id","mm/dd/yy","mm/dd/yyyy","mmddyy","mode","modif","modifier","modify","module","move","move-corresponding","multiply","multiply-corresponding","name","nametab","native","nested","nesting","new","new-line","new-page","new-section","next","no","node","nodes","no-display","no-extension","no-gap","no-gaps","no-grouping","no-heading","non-unicode","non-unique","no-scrolling","no-sign","no-title","no-topofpage","no-zero","null","number","object","objects","obligatory","occurrence","occurrences","occurs","of","off","offset","ole","on","only","open","option","optional","options","order","other","others","out","outer","output","output-length","overflow","overlay","pack","package","pad","padding","page","pages","parameter","parameters","parameter-table","part","partially","pattern","percentage","perform","performing","person","pf1","pf10","pf11","pf12","pf13","pf14","pf15","pf2","pf3","pf4","pf5","pf6","pf7","pf8","pf9","pf-status","pink","places","pool","pos_high","pos_low","position","pragmas","precompiled","preferred","preserving","primary","print","print-control","priority","private","procedure","process","program","property","protected","provide","public","push","pushbutton","put","queue-only","quickinfo","radiobutton","raise","raising","range","ranges","read","reader","read-only","receive","received","receiver","receiving","red","redefinition","reduce","reduced","ref","reference","refresh","regex","reject","remote","renaming","replacement","replacing","report","request","requested","reserve","reset","resolution","respecting","responsible","result","results","resumable","resume","retry","return","returncode","returning","returns","right","right-justified","rightplus","rightspace","risk","rmc_communication_failure","rmc_invalid_status","rmc_system_failure","role","rollback","rows","rpad","rtrim","run","sap","sap-spool","saving","scale_preserving","scale_preserving_scientific","scan","scientific","scientific_with_leading_zero","scroll","scroll-boundary","scrolling","search","secondary","seconds","section","select","selection","selections","selection-screen","selection-set","selection-sets","selection-table","select-options","send","separate","separated","set","shared","shift","short","shortdump-id","sign_as_postfix","single","size","skip","skipping","smart","some","sort","sortable","sorted","source","specified","split","spool","spots","sql","sqlscript","stable","stamp","standard","starting","start-of-editing","start-of-selection","state","statement","statements","static","statics","statusinfo","step-loop","stop","structure","structures","style","subkey","submatches","submit","subroutine","subscreen","subtract","subtract-corresponding","suffix","sum","summary","summing","supplied","supply","suppress","switch","switchstates","symbol","syncpoints","syntax","syntax-check","syntax-trace","system-call","system-exceptions","system-exit","tab","tabbed","tables","tableview","tabstrip","target","task","tasks","test","testing","test-injection","test-seam","text","textpool","then","throw","time","times","timestamp","timezone","tims_is_valid","title","titlebar","title-lines","to","tokenization","tokens","top-lines","top-of-page","trace-file","trace-table","trailing","transaction","transfer","transformation","transporting","trmac","truncate","truncation","try","tstmp_add_seconds","tstmp_current_utctimestamp","tstmp_is_valid","tstmp_seconds_between","type","type-pool","type-pools","types","uline","unassign","under","unicode","union","unique","unit_conversion","unix","unpack","until","unwind","up","update","upper","user","user-command","using","utf-8","valid","value","value-request","values","vary","varying","verification-message","version","via","view","visible","wait","warning","when","whenever","where","while","width","window","windows","with","with-heading","without","with-title","word","work","write","writer","xml","xsd","yellow","yes","yymmdd","zero","zone","abs","acos","asin","atan","bit-set","boolc","boolx","ceil","char_off","charlen","cmax","cmin","concat_lines_of","condense","contains","contains_any_not_of","contains_any_of","cos","cosh","count","count_any_not_of","count_any_of","dbmaxlen","distance","escape","exp","find","find_any_not_of","find_any_of","find_end","floor","frac","from_mixed","insert","ipow","line_exists","line_index","lines","log","log10","match","matches","nmax","nmin","numofchar","repeat","replace","rescale","reverse","round","segment","shift_left","shift_right","sign","sin","sinh","sqrt","strlen","substring","substring_after","substring_before","substring_from","substring_to","tan","tanh","to_lower","to_mixed","to_upper","translate","trunc","utclong_add","utclong_current","utclong_diff","xsdbool","xstrlen"],typeKeywords:["b","c","d","decfloat16","decfloat34","f","i","int8","n","p","s","string","t","utclong","x","xstring","any","clike","csequence","decfloat","numeric","simple","xsequence","table","hashed","index","sorted","standard","accp","char","clnt","cuky","curr","dats","dec","df16_dec","df16_raw","df34_dec","df34_raw","fltp","int1","int2","int4","lang","lchr","lraw","numc","quan","raw","rawstring","sstring","tims","unit","df16_scl","df34_scl","prec","varc","abap_bool","space","me","syst","sy","screen"],operators:[" +"," -","/","*","**","div","mod","=","#","@","&","&&","bit-and","bit-not","bit-or","bit-xor","m","o","z","and","equiv","not","or"," < "," > ","<=",">=","<>","><","=<","=>","between","bt","byte-ca","byte-cn","byte-co","byte-cs","byte-na","byte-ns","ca","cn","co","cp","cs","eq","ge","gt","in","le","lt","na","nb","ne","np","ns"],symbols:/[=>/,"identifier"],{include:"@whitespace"},[/[:,.]/,"delimiter"],[/[{}()\[\]]/,"@brackets"],[/@symbols/,{cases:{"@operators":"operator","@default":""}}],[/'/,{token:"string",bracket:"@open",next:"@stringquote"}],[/`/,{token:"string",bracket:"@open",next:"@stringping"}],[/\|/,{token:"string",bracket:"@open",next:"@stringtemplate"}],[/\d+/,"number"]],stringtemplate:[[/[^\\\|]+/,"string"],[/\\\|/,"string"],[/\|/,{token:"string",bracket:"@close",next:"@pop"}]],stringping:[[/[^\\`]+/,"string"],[/`/,{token:"string",bracket:"@close",next:"@pop"}]],stringquote:[[/[^\\']+/,"string"],[/'/,{token:"string",bracket:"@close",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,""],[/^\*.*$/,"comment"],[/\".*$/,"comment"]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/apex/apex.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/apex/apex.js new file mode 100644 index 0000000000..8c75f0254e --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/apex/apex.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/apex/apex",["require","exports"],(function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.language=t.conf=void 0,t.conf={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"<",close:">"}],folding:{markers:{start:new RegExp("^\\s*//\\s*(?:(?:#?region\\b)|(?:))")}}};var s=[];["abstract","activate","and","any","array","as","asc","assert","autonomous","begin","bigdecimal","blob","boolean","break","bulk","by","case","cast","catch","char","class","collect","commit","const","continue","convertcurrency","decimal","default","delete","desc","do","double","else","end","enum","exception","exit","export","extends","false","final","finally","float","for","from","future","get","global","goto","group","having","hint","if","implements","import","in","inner","insert","instanceof","int","interface","into","join","last_90_days","last_month","last_n_days","last_week","like","limit","list","long","loop","map","merge","native","new","next_90_days","next_month","next_n_days","next_week","not","null","nulls","number","object","of","on","or","outer","override","package","parallel","pragma","private","protected","public","retrieve","return","returning","rollback","savepoint","search","select","set","short","sort","stat","static","strictfp","super","switch","synchronized","system","testmethod","then","this","this_month","this_week","throw","throws","today","tolabel","tomorrow","transaction","transient","trigger","true","try","type","undelete","update","upsert","using","virtual","void","volatile","webservice","when","where","while","yesterday"].forEach((function(e){s.push(e),s.push(e.toUpperCase()),s.push(function(e){return e.charAt(0).toUpperCase()+e.substr(1)}(e))})),t.language={defaultToken:"",tokenPostfix:".apex",keywords:s,operators:["=",">","<","!","~","?",":","==","<=",">=","!=","&&","||","++","--","+","-","*","/","&","|","^","%","<<",">>",">>>","+=","-=","*=","/=","&=","|=","^=","%=","<<=",">>=",">>>="],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/@\s*[a-zA-Z_\$][\w\$]*/,"annotation"],[/(@digits)[eE]([\-+]?(@digits))?[fFdD]?/,"number.float"],[/(@digits)\.(@digits)([eE][\-+]?(@digits))?[fFdD]?/,"number.float"],[/(@digits)[fFdD]/,"number.float"],[/(@digits)[lL]?/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/"/,"string",'@string."'],[/'/,"string","@string.'"],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@apexdoc"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],apexdoc:[[/[^\/*]+/,"comment.doc"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],string:[[/[^\\"']+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/["']/,{cases:{"$#==$S2":{token:"string",next:"@pop"},"@default":"string"}}]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/azcli/azcli.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/azcli/azcli.js new file mode 100644 index 0000000000..2ee40f67ef --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/azcli/azcli.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/azcli/azcli",["require","exports"],(function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.language=t.conf=void 0,t.conf={comments:{lineComment:"#"}},t.language={defaultToken:"keyword",ignoreCase:!0,tokenPostfix:".azcli",str:/[^#\s]/,tokenizer:{root:[{include:"@comment"},[/\s-+@str*\s*/,{cases:{"@eos":{token:"key.identifier",next:"@popall"},"@default":{token:"key.identifier",next:"@type"}}}],[/^-+@str*\s*/,{cases:{"@eos":{token:"key.identifier",next:"@popall"},"@default":{token:"key.identifier",next:"@type"}}}]],type:[{include:"@comment"},[/-+@str*\s*/,{cases:{"@eos":{token:"key.identifier",next:"@popall"},"@default":"key.identifier"}}],[/@str+\s*/,{cases:{"@eos":{token:"string",next:"@popall"},"@default":"string"}}]],comment:[[/#.*$/,{cases:{"@eos":{token:"comment",next:"@popall"}}}]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/bat/bat.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/bat/bat.js new file mode 100644 index 0000000000..b12e11b38e --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/bat/bat.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/bat/bat",["require","exports"],(function(e,s){"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.language=s.conf=void 0,s.conf={comments:{lineComment:"REM"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}],surroundingPairs:[{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}],folding:{markers:{start:new RegExp("^\\s*(::\\s*|REM\\s+)#region"),end:new RegExp("^\\s*(::\\s*|REM\\s+)#endregion")}}},s.language={defaultToken:"",ignoreCase:!0,tokenPostfix:".bat",brackets:[{token:"delimiter.bracket",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"}],keywords:/call|defined|echo|errorlevel|exist|for|goto|if|pause|set|shift|start|title|not|pushd|popd/,symbols:/[=>"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"}]},o.language={defaultToken:"",tokenPostfix:".cameligo",ignoreCase:!0,brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],keywords:["abs","begin","Bytes","Crypto","Current","else","end","failwith","false","fun","if","in","let","let%entry","let%init","List","list","Map","map","match","match%nat","mod","not","operation","Operation","of","Set","set","sender","source","String","then","true","type","with"],typeKeywords:["int","unit","string","tz"],operators:["=",">","<","<=",">=","<>",":",":=","and","mod","or","+","-","*","/","@","&","^","%","->","<-"],symbols:/[=><:@\^&|+\-*\/\^%]+/,tokenizer:{root:[[/[a-zA-Z_][\w]*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"identifier"}}],{include:"@whitespace"},[/[{}()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float"],[/\$[0-9a-fA-F]{1,16}/,"number.hex"],[/\d+/,"number"],[/[;,.]/,"delimiter"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/'/,"string","@string"],[/'[^\\']'/,"string"],[/'/,"string.invalid"],[/\#\d+/,"string"]],comment:[[/[^\(\*]+/,"comment"],[/\*\)/,"comment","@pop"],[/\(\*/,"comment"]],string:[[/[^\\']+/,"string"],[/\\./,"string.escape.invalid"],[/'/,{token:"string.quote",bracket:"@close",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,"white"],[/\(\*/,"comment","@comment"],[/\/\/.*$/,"comment"]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/clojure/clojure.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/clojure/clojure.js new file mode 100644 index 0000000000..24e807dff7 --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/clojure/clojure.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/clojure/clojure",["require","exports"],(function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.language=t.conf=void 0,t.conf={comments:{lineComment:";;"},brackets:[["[","]"],["(",")"],["{","}"]],autoClosingPairs:[{open:"[",close:"]"},{open:'"',close:'"'},{open:"(",close:")"},{open:"{",close:"}"}],surroundingPairs:[{open:"[",close:"]"},{open:'"',close:'"'},{open:"(",close:")"},{open:"{",close:"}"}]},t.language={defaultToken:"",ignoreCase:!0,tokenPostfix:".clj",brackets:[{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"{",close:"}",token:"delimiter.curly"}],constants:["true","false","nil"],numbers:/^(?:[+\-]?\d+(?:(?:N|(?:[eE][+\-]?\d+))|(?:\.?\d*(?:M|(?:[eE][+\-]?\d+))?)|\/\d+|[xX][0-9a-fA-F]+|r[0-9a-zA-Z]+)?(?=[\\\[\]\s"#'(),;@^`{}~]|$))/,characters:/^(?:\\(?:backspace|formfeed|newline|return|space|tab|o[0-7]{3}|u[0-9A-Fa-f]{4}|x[0-9A-Fa-f]{4}|.)?(?=[\\\[\]\s"(),;@^`{}~]|$))/,escapes:/^\\(?:["'\\bfnrt]|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,qualifiedSymbols:/^(?:(?:[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*(?:\.[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)*\/)?(?:\/|[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)*(?=[\\\[\]\s"(),;@^`{}~]|$))/,specialForms:[".","catch","def","do","if","monitor-enter","monitor-exit","new","quote","recur","set!","throw","try","var"],coreSymbols:["*","*'","*1","*2","*3","*agent*","*allow-unresolved-vars*","*assert*","*clojure-version*","*command-line-args*","*compile-files*","*compile-path*","*compiler-options*","*data-readers*","*default-data-reader-fn*","*e","*err*","*file*","*flush-on-newline*","*fn-loader*","*in*","*math-context*","*ns*","*out*","*print-dup*","*print-length*","*print-level*","*print-meta*","*print-namespace-maps*","*print-readably*","*read-eval*","*reader-resolver*","*source-path*","*suppress-read*","*unchecked-math*","*use-context-classloader*","*verbose-defrecords*","*warn-on-reflection*","+","+'","-","-'","->","->>","->ArrayChunk","->Eduction","->Vec","->VecNode","->VecSeq","-cache-protocol-fn","-reset-methods","..","/","<","<=","=","==",">",">=","EMPTY-NODE","Inst","StackTraceElement->vec","Throwable->map","accessor","aclone","add-classpath","add-watch","agent","agent-error","agent-errors","aget","alength","alias","all-ns","alter","alter-meta!","alter-var-root","amap","ancestors","and","any?","apply","areduce","array-map","as->","aset","aset-boolean","aset-byte","aset-char","aset-double","aset-float","aset-int","aset-long","aset-short","assert","assoc","assoc!","assoc-in","associative?","atom","await","await-for","await1","bases","bean","bigdec","bigint","biginteger","binding","bit-and","bit-and-not","bit-clear","bit-flip","bit-not","bit-or","bit-set","bit-shift-left","bit-shift-right","bit-test","bit-xor","boolean","boolean-array","boolean?","booleans","bound-fn","bound-fn*","bound?","bounded-count","butlast","byte","byte-array","bytes","bytes?","case","cast","cat","char","char-array","char-escape-string","char-name-string","char?","chars","chunk","chunk-append","chunk-buffer","chunk-cons","chunk-first","chunk-next","chunk-rest","chunked-seq?","class","class?","clear-agent-errors","clojure-version","coll?","comment","commute","comp","comparator","compare","compare-and-set!","compile","complement","completing","concat","cond","cond->","cond->>","condp","conj","conj!","cons","constantly","construct-proxy","contains?","count","counted?","create-ns","create-struct","cycle","dec","dec'","decimal?","declare","dedupe","default-data-readers","definline","definterface","defmacro","defmethod","defmulti","defn","defn-","defonce","defprotocol","defrecord","defstruct","deftype","delay","delay?","deliver","denominator","deref","derive","descendants","destructure","disj","disj!","dissoc","dissoc!","distinct","distinct?","doall","dorun","doseq","dosync","dotimes","doto","double","double-array","double?","doubles","drop","drop-last","drop-while","eduction","empty","empty?","ensure","ensure-reduced","enumeration-seq","error-handler","error-mode","eval","even?","every-pred","every?","ex-data","ex-info","extend","extend-protocol","extend-type","extenders","extends?","false?","ffirst","file-seq","filter","filterv","find","find-keyword","find-ns","find-protocol-impl","find-protocol-method","find-var","first","flatten","float","float-array","float?","floats","flush","fn","fn?","fnext","fnil","for","force","format","frequencies","future","future-call","future-cancel","future-cancelled?","future-done?","future?","gen-class","gen-interface","gensym","get","get-in","get-method","get-proxy-class","get-thread-bindings","get-validator","group-by","halt-when","hash","hash-combine","hash-map","hash-ordered-coll","hash-set","hash-unordered-coll","ident?","identical?","identity","if-let","if-not","if-some","ifn?","import","in-ns","inc","inc'","indexed?","init-proxy","inst-ms","inst-ms*","inst?","instance?","int","int-array","int?","integer?","interleave","intern","interpose","into","into-array","ints","io!","isa?","iterate","iterator-seq","juxt","keep","keep-indexed","key","keys","keyword","keyword?","last","lazy-cat","lazy-seq","let","letfn","line-seq","list","list*","list?","load","load-file","load-reader","load-string","loaded-libs","locking","long","long-array","longs","loop","macroexpand","macroexpand-1","make-array","make-hierarchy","map","map-entry?","map-indexed","map?","mapcat","mapv","max","max-key","memfn","memoize","merge","merge-with","meta","method-sig","methods","min","min-key","mix-collection-hash","mod","munge","name","namespace","namespace-munge","nat-int?","neg-int?","neg?","newline","next","nfirst","nil?","nnext","not","not-any?","not-empty","not-every?","not=","ns","ns-aliases","ns-imports","ns-interns","ns-map","ns-name","ns-publics","ns-refers","ns-resolve","ns-unalias","ns-unmap","nth","nthnext","nthrest","num","number?","numerator","object-array","odd?","or","parents","partial","partition","partition-all","partition-by","pcalls","peek","persistent!","pmap","pop","pop!","pop-thread-bindings","pos-int?","pos?","pr","pr-str","prefer-method","prefers","primitives-classnames","print","print-ctor","print-dup","print-method","print-simple","print-str","printf","println","println-str","prn","prn-str","promise","proxy","proxy-call-with-super","proxy-mappings","proxy-name","proxy-super","push-thread-bindings","pvalues","qualified-ident?","qualified-keyword?","qualified-symbol?","quot","rand","rand-int","rand-nth","random-sample","range","ratio?","rational?","rationalize","re-find","re-groups","re-matcher","re-matches","re-pattern","re-seq","read","read-line","read-string","reader-conditional","reader-conditional?","realized?","record?","reduce","reduce-kv","reduced","reduced?","reductions","ref","ref-history-count","ref-max-history","ref-min-history","ref-set","refer","refer-clojure","reify","release-pending-sends","rem","remove","remove-all-methods","remove-method","remove-ns","remove-watch","repeat","repeatedly","replace","replicate","require","reset!","reset-meta!","reset-vals!","resolve","rest","restart-agent","resultset-seq","reverse","reversible?","rseq","rsubseq","run!","satisfies?","second","select-keys","send","send-off","send-via","seq","seq?","seqable?","seque","sequence","sequential?","set","set-agent-send-executor!","set-agent-send-off-executor!","set-error-handler!","set-error-mode!","set-validator!","set?","short","short-array","shorts","shuffle","shutdown-agents","simple-ident?","simple-keyword?","simple-symbol?","slurp","some","some->","some->>","some-fn","some?","sort","sort-by","sorted-map","sorted-map-by","sorted-set","sorted-set-by","sorted?","special-symbol?","spit","split-at","split-with","str","string?","struct","struct-map","subs","subseq","subvec","supers","swap!","swap-vals!","symbol","symbol?","sync","tagged-literal","tagged-literal?","take","take-last","take-nth","take-while","test","the-ns","thread-bound?","time","to-array","to-array-2d","trampoline","transduce","transient","tree-seq","true?","type","unchecked-add","unchecked-add-int","unchecked-byte","unchecked-char","unchecked-dec","unchecked-dec-int","unchecked-divide-int","unchecked-double","unchecked-float","unchecked-inc","unchecked-inc-int","unchecked-int","unchecked-long","unchecked-multiply","unchecked-multiply-int","unchecked-negate","unchecked-negate-int","unchecked-remainder-int","unchecked-short","unchecked-subtract","unchecked-subtract-int","underive","unquote","unquote-splicing","unreduced","unsigned-bit-shift-right","update","update-in","update-proxy","uri?","use","uuid?","val","vals","var-get","var-set","var?","vary-meta","vec","vector","vector-of","vector?","volatile!","volatile?","vreset!","vswap!","when","when-first","when-let","when-not","when-some","while","with-bindings","with-bindings*","with-in-str","with-loading-context","with-local-vars","with-meta","with-open","with-out-str","with-precision","with-redefs","with-redefs-fn","xml-seq","zero?","zipmap"],tokenizer:{root:[{include:"@whitespace"},[/@numbers/,"number"],[/@characters/,"string"],{include:"@string"},[/[()\[\]{}]/,"@brackets"],[/\/#"(?:\.|(?:")|[^"\n])*"\/g/,"regexp"],[/[#'@^`~]/,"meta"],[/@qualifiedSymbols/,{cases:{"^:.+$":"constant","@specialForms":"keyword","@coreSymbols":"keyword","@constants":"constant","@default":"identifier"}}]],whitespace:[[/[\s,]+/,"white"],[/;.*$/,"comment"],[/\(comment\b/,"comment","@comment"]],comment:[[/\(/,"comment","@push"],[/\)/,"comment","@pop"],[/[^()]/,"comment"]],string:[[/"/,"string","@multiLineString"]],multiLineString:[[/"/,"string","@popall"],[/@escapes/,"string.escape"],[/./,"string"]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/coffee/coffee.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/coffee/coffee.js new file mode 100644 index 0000000000..780942637b --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/coffee/coffee.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/coffee/coffee",["require","exports"],(function(e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.language=n.conf=void 0,n.conf={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\#%\^\&\*\(\)\=\$\-\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{blockComment:["###","###"],lineComment:"#"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*#region\\b"),end:new RegExp("^\\s*#endregion\\b")}}},n.language={defaultToken:"",ignoreCase:!0,tokenPostfix:".coffee",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"}],regEx:/\/(?!\/\/)(?:[^\/\\]|\\.)*\/[igm]*/,keywords:["and","or","is","isnt","not","on","yes","@","no","off","true","false","null","this","new","delete","typeof","in","instanceof","return","throw","break","continue","debugger","if","else","switch","for","while","do","try","catch","finally","class","extends","super","undefined","then","unless","until","loop","of","by","when"],symbols:/[=>"}],keywords:["abstract","amp","array","auto","bool","break","case","catch","char","class","const","constexpr","const_cast","continue","cpu","decltype","default","delegate","delete","do","double","dynamic_cast","each","else","enum","event","explicit","export","extern","false","final","finally","float","for","friend","gcnew","generic","goto","if","in","initonly","inline","int","interface","interior_ptr","internal","literal","long","mutable","namespace","new","noexcept","nullptr","__nullptr","operator","override","partial","pascal","pin_ptr","private","property","protected","public","ref","register","reinterpret_cast","restrict","return","safe_cast","sealed","short","signed","sizeof","static","static_assert","static_cast","struct","switch","template","this","thread_local","throw","tile_static","true","try","typedef","typeid","typename","union","unsigned","using","virtual","void","volatile","wchar_t","where","while","_asm","_based","_cdecl","_declspec","_fastcall","_if_exists","_if_not_exists","_inline","_multiple_inheritance","_pascal","_single_inheritance","_stdcall","_virtual_inheritance","_w64","__abstract","__alignof","__asm","__assume","__based","__box","__builtin_alignof","__cdecl","__clrcall","__declspec","__delegate","__event","__except","__fastcall","__finally","__forceinline","__gc","__hook","__identifier","__if_exists","__if_not_exists","__inline","__int128","__int16","__int32","__int64","__int8","__interface","__leave","__m128","__m128d","__m128i","__m256","__m256d","__m256i","__m64","__multiple_inheritance","__newslot","__nogc","__noop","__nounwind","__novtordisp","__pascal","__pin","__pragma","__property","__ptr32","__ptr64","__raise","__restrict","__resume","__sealed","__single_inheritance","__stdcall","__super","__thiscall","__try","__try_cast","__typeof","__unaligned","__unhook","__uuidof","__value","__virtual_inheritance","__w64","__wchar_t"],operators:["=",">","<","!","~","?",":","==","<=",">=","!=","&&","||","++","--","+","-","*","/","&","|","^","%","<<",">>",">>>","+=","-=","*=","/=","&=","|=","^=","%=","<<=",">>=",">>>="],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/\d*\d+[eE]([\-+]?\d+)?(@floatsuffix)/,"number.float"],[/\d*\.\d+([eE][\-+]?\d+)?(@floatsuffix)/,"number.float"],[/0[xX][0-9a-fA-F']*[0-9a-fA-F](@integersuffix)/,"number.hex"],[/0[0-7']*[0-7](@integersuffix)/,"number.octal"],[/0[bB][0-1']*[0-1](@integersuffix)/,"number.binary"],[/\d[\d']*\d(@integersuffix)/,"number"],[/\d(@integersuffix)/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string"],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@doccomment"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],doccomment:[[/[^\/*]+/,"comment.doc"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],raw:[[/(.*)(\))(?:([^ ()\\\t"]*))(\")/,{cases:{"$3==$S2":["string.raw","string.raw.end","string.raw.end",{token:"string.raw.end",next:"@pop"}],"@default":["string.raw","string.raw","string.raw","string.raw"]}}],[/.*/,"string.raw"]],annotation:[{include:"@whitespace"},[/using|alignas/,"keyword"],[/[a-zA-Z0-9_]+/,"annotation"],[/[,:]/,"delimiter"],[/[()]/,"@brackets"],[/\]\s*\]/,{token:"annotation",next:"@pop"}]],include:[[/(\s*)(<)([^<>]*)(>)/,["","keyword.directive.include.begin","string.include.identifier",{token:"keyword.directive.include.end",next:"@pop"}]],[/(\s*)(")([^"]*)(")/,["","keyword.directive.include.begin","string.include.identifier",{token:"keyword.directive.include.end",next:"@pop"}]]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/csharp/csharp.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/csharp/csharp.js new file mode 100644 index 0000000000..06b57d45f3 --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/csharp/csharp.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/csharp/csharp",["require","exports"],(function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.language=t.conf=void 0,t.conf={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\#\$\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"'",close:"'",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'}],folding:{markers:{start:new RegExp("^\\s*#region\\b"),end:new RegExp("^\\s*#endregion\\b")}}},t.language={defaultToken:"",tokenPostfix:".cs",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],keywords:["extern","alias","using","bool","decimal","sbyte","byte","short","ushort","int","uint","long","ulong","char","float","double","object","dynamic","string","assembly","is","as","ref","out","this","base","new","typeof","void","checked","unchecked","default","delegate","var","const","if","else","switch","case","while","do","for","foreach","in","break","continue","goto","return","throw","try","catch","finally","lock","yield","from","let","where","join","on","equals","into","orderby","ascending","descending","select","group","by","namespace","partial","class","field","event","method","param","public","protected","internal","private","abstract","sealed","static","struct","readonly","volatile","virtual","override","params","get","set","add","remove","operator","true","false","implicit","explicit","interface","enum","null","async","await","fixed","sizeof","stackalloc","unsafe","nameof","when"],namespaceFollows:["namespace","using"],parenFollows:["if","for","while","switch","foreach","using","catch","when"],operators:["=","??","||","&&","|","^","&","==","!=","<=",">=","<<","+","-","*","/","%","!","~","++","--","+=","-=","*=","/=","%=","&=","|=","^=","<<=",">>=",">>","=>"],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/[0-9_]*\.[0-9_]+([eE][\-+]?\d+)?[fFdD]?/,"number.float"],[/0[xX][0-9a-fA-F_]+/,"number.hex"],[/0[bB][01_]+/,"number.hex"],[/[0-9_]+/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,{token:"string.quote",next:"@string"}],[/\$\@"/,{token:"string.quote",next:"@litinterpstring"}],[/\@"/,{token:"string.quote",next:"@litstring"}],[/\$"/,{token:"string.quote",next:"@interpolatedstring"}],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],qualified:[[/[a-zA-Z_][\w]*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"identifier"}}],[/\./,"delimiter"],["","","@pop"]],namespace:[{include:"@whitespace"},[/[A-Z]\w*/,"namespace"],[/[\.=]/,"delimiter"],["","","@pop"]],comment:[[/[^\/*]+/,"comment"],["\\*/","comment","@pop"],[/[\/*]/,"comment"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,{token:"string.quote",next:"@pop"}]],litstring:[[/[^"]+/,"string"],[/""/,"string.escape"],[/"/,{token:"string.quote",next:"@pop"}]],litinterpstring:[[/[^"{]+/,"string"],[/""/,"string.escape"],[/{{/,"string.escape"],[/}}/,"string.escape"],[/{/,{token:"string.quote",next:"root.litinterpstring"}],[/"/,{token:"string.quote",next:"@pop"}]],interpolatedstring:[[/[^\\"{]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/{{/,"string.escape"],[/}}/,"string.escape"],[/{/,{token:"string.quote",next:"root.interpolatedstring"}],[/"/,{token:"string.quote",next:"@pop"}]],whitespace:[[/^[ \t\v\f]*#((r)|(load))(?=\s)/,"directive.csx"],[/^[ \t\v\f]*#\w.*$/,"namespace.cpp"],[/[ \t\v\f\r\n]+/,""],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/csp/csp.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/csp/csp.js new file mode 100644 index 0000000000..05010bdd29 --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/csp/csp.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/csp/csp",["require","exports"],(function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.language=e.conf=void 0,e.conf={brackets:[],autoClosingPairs:[],surroundingPairs:[]},e.language={keywords:[],typeKeywords:[],tokenPostfix:".csp",operators:[],symbols:/[=>",token:"delimiter.angle"}],tokenizer:{root:[{include:"@selector"}],selector:[{include:"@comments"},{include:"@import"},{include:"@strings"},["[@](keyframes|-webkit-keyframes|-moz-keyframes|-o-keyframes)",{token:"keyword",next:"@keyframedeclaration"}],["[@](page|content|font-face|-moz-document)",{token:"keyword"}],["[@](charset|namespace)",{token:"keyword",next:"@declarationbody"}],["(url-prefix)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],["(url)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],{include:"@selectorname"},["[\\*]","tag"],["[>\\+,]","delimiter"],["\\[",{token:"delimiter.bracket",next:"@selectorattribute"}],["{",{token:"delimiter.bracket",next:"@selectorbody"}]],selectorbody:[{include:"@comments"},["[*_]?@identifier@ws:(?=(\\s|\\d|[^{;}]*[;}]))","attribute.name","@rulevalue"],["}",{token:"delimiter.bracket",next:"@pop"}]],selectorname:[["(\\.|#(?=[^{])|%|(@identifier)|:)+","tag"]],selectorattribute:[{include:"@term"},["]",{token:"delimiter.bracket",next:"@pop"}]],term:[{include:"@comments"},["(url-prefix)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],["(url)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],{include:"@functioninvocation"},{include:"@numbers"},{include:"@name"},["([<>=\\+\\-\\*\\/\\^\\|\\~,])","delimiter"],[",","delimiter"]],rulevalue:[{include:"@comments"},{include:"@strings"},{include:"@term"},["!important","keyword"],[";","delimiter","@pop"],["(?=})",{token:"",next:"@pop"}]],warndebug:[["[@](warn|debug)",{token:"keyword",next:"@declarationbody"}]],import:[["[@](import)",{token:"keyword",next:"@declarationbody"}]],urldeclaration:[{include:"@strings"},["[^)\r\n]+","string"],["\\)",{token:"delimiter.parenthesis",next:"@pop"}]],parenthizedterm:[{include:"@term"},["\\)",{token:"delimiter.parenthesis",next:"@pop"}]],declarationbody:[{include:"@term"},[";","delimiter","@pop"],["(?=})",{token:"",next:"@pop"}]],comments:[["\\/\\*","comment","@comment"],["\\/\\/+.*","comment"]],comment:[["\\*\\/","comment","@pop"],[/[^*/]+/,"comment"],[/./,"comment"]],name:[["@identifier","attribute.value"]],numbers:[["-?(\\d*\\.)?\\d+([eE][\\-+]?\\d+)?",{token:"attribute.value.number",next:"@units"}],["#[0-9a-fA-F_]+(?!\\w)","attribute.value.hex"]],units:[["(em|ex|ch|rem|vmin|vmax|vw|vh|vm|cm|mm|in|px|pt|pc|deg|grad|rad|turn|s|ms|Hz|kHz|%)?","attribute.value.unit","@pop"]],keyframedeclaration:[["@identifier","attribute.value"],["{",{token:"delimiter.bracket",switchTo:"@keyframebody"}]],keyframebody:[{include:"@term"},["{",{token:"delimiter.bracket",next:"@selectorbody"}],["}",{token:"delimiter.bracket",next:"@pop"}]],functioninvocation:[["@identifier\\(",{token:"attribute.value",next:"@functionarguments"}]],functionarguments:[["\\$@identifier@ws:","attribute.name"],["[,]","delimiter"],{include:"@term"},["\\)",{token:"attribute.value",next:"@pop"}]],strings:[['~?"',{token:"string",next:"@stringenddoublequote"}],["~?'",{token:"string",next:"@stringendquote"}]],stringenddoublequote:[["\\\\.","string"],['"',{token:"string",next:"@pop"}],[/[^\\"]+/,"string"],[".","string"]],stringendquote:[["\\\\.","string"],["'",{token:"string",next:"@pop"}],[/[^\\']+/,"string"],[".","string"]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/dart/dart.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/dart/dart.js new file mode 100644 index 0000000000..6ad018a5d6 --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/dart/dart.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/dart/dart",["require","exports"],(function(e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.language=n.conf=void 0,n.conf={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"'",close:"'",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string"]},{open:"`",close:"`",notIn:["string","comment"]},{open:"/**",close:" */",notIn:["string"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"},{open:"(",close:")"},{open:'"',close:'"'},{open:"`",close:"`"}],folding:{markers:{start:/^\s*\s*#?region\b/,end:/^\s*\s*#?endregion\b/}}},n.language={defaultToken:"invalid",tokenPostfix:".dart",keywords:["abstract","dynamic","implements","show","as","else","import","static","assert","enum","in","super","async","export","interface","switch","await","extends","is","sync","break","external","library","this","case","factory","mixin","throw","catch","false","new","true","class","final","null","try","const","finally","on","typedef","continue","for","operator","var","covariant","Function","part","void","default","get","rethrow","while","deferred","hide","return","with","do","if","set","yield"],typeKeywords:["int","double","String","bool"],operators:["+","-","*","/","~/","%","++","--","==","!=",">","<",">=","<=","=","-=","/=","%=",">>=","^=","+=","*=","~/=","<<=","&=","!=","||","&&","&","|","^","~","<<",">>","!",">>>","??","?",":","|="],symbols:/[=>](?!@symbols)/,"@brackets"],[/!(?=([^=]|$))/,"delimiter"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/(@digits)[eE]([\-+]?(@digits))?/,"number.float"],[/(@digits)\.(@digits)([eE][\-+]?(@digits))?/,"number.float"],[/0[xX](@hexdigits)n?/,"number.hex"],[/0[oO]?(@octaldigits)n?/,"number.octal"],[/0[bB](@binarydigits)n?/,"number.binary"],[/(@digits)n?/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string_double"],[/'/,"string","@string_single"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@jsdoc"],[/\/\*/,"comment","@comment"],[/\/\/\/.*$/,"comment.doc"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],jsdoc:[[/[^\/*]+/,"comment.doc"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],regexp:[[/(\{)(\d+(?:,\d*)?)(\})/,["regexp.escape.control","regexp.escape.control","regexp.escape.control"]],[/(\[)(\^?)(?=(?:[^\]\\\/]|\\.)+)/,["regexp.escape.control",{token:"regexp.escape.control",next:"@regexrange"}]],[/(\()(\?:|\?=|\?!)/,["regexp.escape.control","regexp.escape.control"]],[/[()]/,"regexp.escape.control"],[/@regexpctl/,"regexp.escape.control"],[/[^\\\/]/,"regexp"],[/@regexpesc/,"regexp.escape"],[/\\\./,"regexp.invalid"],[/(\/)([gimsuy]*)/,[{token:"regexp",bracket:"@close",next:"@pop"},"keyword.other"]]],regexrange:[[/-/,"regexp.escape.control"],[/\^/,"regexp.invalid"],[/@regexpesc/,"regexp.escape"],[/[^\]]/,"regexp"],[/\]/,{token:"regexp.escape.control",next:"@pop",bracket:"@close"}]],string_double:[[/[^\\"\$]+/,"string"],[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"],[/\$\w+/,"identifier"]],string_single:[[/[^\\'\$]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/'/,"string","@pop"],[/\$\w+/,"identifier"]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/dockerfile/dockerfile.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/dockerfile/dockerfile.js new file mode 100644 index 0000000000..2dcc929db5 --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/dockerfile/dockerfile.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/dockerfile/dockerfile",["require","exports"],(function(e,o){"use strict";Object.defineProperty(o,"__esModule",{value:!0}),o.language=o.conf=void 0,o.conf={brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},o.language={defaultToken:"",tokenPostfix:".dockerfile",variable:/\${?[\w]+}?/,tokenizer:{root:[{include:"@whitespace"},{include:"@comment"},[/(ONBUILD)(\s+)/,["keyword",""]],[/(ENV)(\s+)([\w]+)/,["keyword","",{token:"variable",next:"@arguments"}]],[/(FROM|MAINTAINER|RUN|EXPOSE|ENV|ADD|ARG|VOLUME|LABEL|USER|WORKDIR|COPY|CMD|STOPSIGNAL|SHELL|HEALTHCHECK|ENTRYPOINT)/,{token:"keyword",next:"@arguments"}]],arguments:[{include:"@whitespace"},{include:"@strings"},[/(@variable)/,{cases:{"@eos":{token:"variable",next:"@popall"},"@default":"variable"}}],[/\\/,{cases:{"@eos":"","@default":""}}],[/./,{cases:{"@eos":{token:"",next:"@popall"},"@default":""}}]],whitespace:[[/\s+/,{cases:{"@eos":{token:"",next:"@popall"},"@default":""}}]],comment:[[/(^#.*$)/,"comment","@popall"]],strings:[[/\\'$/,"","@popall"],[/\\'/,""],[/'$/,"string","@popall"],[/'/,"string","@stringBody"],[/"$/,"string","@popall"],[/"/,"string","@dblStringBody"]],stringBody:[[/[^\\\$']/,{cases:{"@eos":{token:"string",next:"@popall"},"@default":"string"}}],[/\\./,"string.escape"],[/'$/,"string","@popall"],[/'/,"string","@pop"],[/(@variable)/,"variable"],[/\\$/,"string"],[/$/,"string","@popall"]],dblStringBody:[[/[^\\\$"]/,{cases:{"@eos":{token:"string",next:"@popall"},"@default":"string"}}],[/\\./,"string.escape"],[/"$/,"string","@popall"],[/"/,"string","@pop"],[/(@variable)/,"variable"],[/\\$/,"string"],[/$/,"string","@popall"]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/ecl/ecl.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/ecl/ecl.js new file mode 100644 index 0000000000..c97e21cf5a --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/ecl/ecl.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/ecl/ecl",["require","exports"],(function(e,o){"use strict";Object.defineProperty(o,"__esModule",{value:!0}),o.language=o.conf=void 0,o.conf={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"'",close:"'",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'}]},o.language={defaultToken:"",tokenPostfix:".ecl",ignoreCase:!0,brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],pounds:["append","break","declare","demangle","end","for","getdatatype","if","inmodule","loop","mangle","onwarning","option","set","stored","uniquename"].join("|"),keywords:["__compressed__","after","all","and","any","as","atmost","before","beginc","best","between","case","cluster","compressed","compression","const","counter","csv","default","descend","embed","encoding","encrypt","end","endc","endembed","endmacro","enum","escape","except","exclusive","expire","export","extend","fail","few","fileposition","first","flat","forward","from","full","function","functionmacro","group","grouped","heading","hole","ifblock","import","in","inner","interface","internal","joined","keep","keyed","last","left","limit","linkcounted","literal","little_endian","load","local","locale","lookup","lzw","macro","many","maxcount","maxlength","min skew","module","mofn","multiple","named","namespace","nocase","noroot","noscan","nosort","not","noxpath","of","onfail","only","opt","or","outer","overwrite","packed","partition","penalty","physicallength","pipe","prefetch","quote","record","repeat","retry","return","right","right1","right2","rows","rowset","scan","scope","self","separator","service","shared","skew","skip","smart","soapaction","sql","stable","store","terminator","thor","threshold","timelimit","timeout","token","transform","trim","type","unicodeorder","unordered","unsorted","unstable","update","use","validate","virtual","whole","width","wild","within","wnotrim","xml","xpath"],functions:["abs","acos","aggregate","allnodes","apply","ascii","asin","assert","asstring","atan","atan2","ave","build","buildindex","case","catch","choose","choosen","choosesets","clustersize","combine","correlation","cos","cosh","count","covariance","cron","dataset","dedup","define","denormalize","dictionary","distribute","distributed","distribution","ebcdic","enth","error","evaluate","event","eventextra","eventname","exists","exp","fail","failcode","failmessage","fetch","fromunicode","fromxml","getenv","getisvalid","global","graph","group","hash","hash32","hash64","hashcrc","hashmd5","having","httpcall","httpheader","if","iff","index","intformat","isvalid","iterate","join","keydiff","keypatch","keyunicode","length","library","limit","ln","loadxml","local","log","loop","map","matched","matchlength","matchposition","matchtext","matchunicode","max","merge","mergejoin","min","nofold","nolocal","nonempty","normalize","nothor","notify","output","parallel","parse","pipe","power","preload","process","project","pull","random","range","rank","ranked","realformat","recordof","regexfind","regexreplace","regroup","rejected","rollup","round","roundup","row","rowdiff","sample","sequential","set","sin","sinh","sizeof","soapcall","sort","sorted","sqrt","stepped","stored","sum","table","tan","tanh","thisnode","topn","tounicode","toxml","transfer","transform","trim","truncate","typeof","ungroup","unicodeorder","variance","wait","which","workunit","xmldecode","xmlencode","xmltext","xmlunicode"],typesint:["integer","unsigned"].join("|"),typesnum:["data","qstring","string","unicode","utf8","varstring","varunicode"],typesone:["ascii","big_endian","boolean","data","decimal","ebcdic","grouped","integer","linkcounted","pattern","qstring","real","record","rule","set of","streamed","string","token","udecimal","unicode","unsigned","utf8","varstring","varunicode"].join("|"),operators:["+","-","/",":=","<","<>","=",">","\\","and","in","not","or"],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/[0-9_]*\.[0-9_]+([eE][\-+]?\d+)?/,"number.float"],[/0[xX][0-9a-fA-F_]+/,"number.hex"],[/0[bB][01]+/,"number.hex"],[/[0-9_]+/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string"],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\v\f\r\n]+/,""],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],string:[[/[^\\']+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/'/,"string","@pop"]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/fsharp/fsharp.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/fsharp/fsharp.js new file mode 100644 index 0000000000..b4cdd387be --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/fsharp/fsharp.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/fsharp/fsharp",["require","exports"],(function(e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.language=n.conf=void 0,n.conf={comments:{lineComment:"//",blockComment:["(*","*)"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*//\\s*#region\\b|^\\s*\\(\\*\\s*#region(.*)\\*\\)"),end:new RegExp("^\\s*//\\s*#endregion\\b|^\\s*\\(\\*\\s*#endregion\\s*\\*\\)")}}},n.language={defaultToken:"",tokenPostfix:".fs",keywords:["abstract","and","atomic","as","assert","asr","base","begin","break","checked","component","const","constraint","constructor","continue","class","default","delegate","do","done","downcast","downto","elif","else","end","exception","eager","event","external","extern","false","finally","for","fun","function","fixed","functor","global","if","in","include","inherit","inline","interface","internal","land","lor","lsl","lsr","lxor","lazy","let","match","member","mod","module","mutable","namespace","method","mixin","new","not","null","of","open","or","object","override","private","parallel","process","protected","pure","public","rec","return","static","sealed","struct","sig","then","to","true","tailcall","trait","try","type","upcast","use","val","void","virtual","volatile","when","while","with","yield"],symbols:/[=>\]/,"annotation"],[/^#(if|else|endif)/,"keyword"],[/[{}()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/@symbols/,"delimiter"],[/\d*\d+[eE]([\-+]?\d+)?(@floatsuffix)/,"number.float"],[/\d*\.\d+([eE][\-+]?\d+)?(@floatsuffix)/,"number.float"],[/0x[0-9a-fA-F]+LF/,"number.float"],[/0x[0-9a-fA-F]+(@integersuffix)/,"number.hex"],[/0b[0-1]+(@integersuffix)/,"number.bin"],[/\d+(@integersuffix)/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"""/,"string",'@string."""'],[/"/,"string",'@string."'],[/\@"/,{token:"string.quote",next:"@litstring"}],[/'[^\\']'B?/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\(\*(?!\))/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^*(]+/,"comment"],[/\*\)/,"comment","@pop"],[/\*/,"comment"],[/\(\*\)/,"comment"],[/\(/,"comment"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/("""|"B?)/,{cases:{"$#==$S2":{token:"string",next:"@pop"},"@default":"string"}}]],litstring:[[/[^"]+/,"string"],[/""/,"string.escape"],[/"/,{token:"string.quote",next:"@pop"}]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/go/go.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/go/go.js new file mode 100644 index 0000000000..bedb5beedb --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/go/go.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/go/go",["require","exports"],(function(e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.language=n.conf=void 0,n.conf={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"`",close:"`",notIn:["string"]},{open:'"',close:'"',notIn:["string"]},{open:"'",close:"'",notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"`",close:"`"},{open:'"',close:'"'},{open:"'",close:"'"}]},n.language={defaultToken:"",tokenPostfix:".go",keywords:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var","bool","true","false","uint8","uint16","uint32","uint64","int8","int16","int32","int64","float32","float64","complex64","complex128","byte","rune","uint","int","uintptr","string","nil"],operators:["+","-","*","/","%","&","|","^","<<",">>","&^","+=","-=","*=","/=","%=","&=","|=","^=","<<=",">>=","&^=","&&","||","<-","++","--","==","<",">","=","!","!=","<=",">=",":=","...","(",")","","]","{","}",",",";",".",":"],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/\d*\d+[eE]([\-+]?\d+)?/,"number.float"],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float"],[/0[xX][0-9a-fA-F']*[0-9a-fA-F]/,"number.hex"],[/0[0-7']*[0-7]/,"number.octal"],[/0[bB][0-1']*[0-1]/,"number.binary"],[/\d[\d']*/,"number"],[/\d/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string"],[/`/,"string","@rawstring"],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@doccomment"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],doccomment:[[/[^\/*]+/,"comment.doc"],[/\/\*/,"comment.doc.invalid"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],rawstring:[[/[^\`]/,"string"],[/`/,"string","@pop"]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/graphql/graphql.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/graphql/graphql.js new file mode 100644 index 0000000000..dfcd6d0c5d --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/graphql/graphql.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/graphql/graphql",["require","exports"],(function(e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.language=n.conf=void 0,n.conf={comments:{lineComment:"#"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"""',close:'"""',notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"""',close:'"""'},{open:'"',close:'"'}],folding:{offSide:!0}},n.language={defaultToken:"invalid",tokenPostfix:".gql",keywords:["null","true","false","query","mutation","subscription","extend","schema","directive","scalar","type","interface","union","enum","input","implements","fragment","on"],typeKeywords:["Int","Float","String","Boolean","ID"],directiveLocations:["SCHEMA","SCALAR","OBJECT","FIELD_DEFINITION","ARGUMENT_DEFINITION","INTERFACE","UNION","ENUM","ENUM_VALUE","INPUT_OBJECT","INPUT_FIELD_DEFINITION","QUERY","MUTATION","SUBSCRIPTION","FIELD","FRAGMENT_DEFINITION","FRAGMENT_SPREAD","INLINE_FRAGMENT","VARIABLE_DEFINITION"],operators:["=","!","?",":","&","|"],symbols:/[=!?:&|]+/,escapes:/\\(?:["\\\/bfnrt]|u[0-9A-Fa-f]{4})/,tokenizer:{root:[[/[a-z_][\w$]*/,{cases:{"@keywords":"keyword","@default":"key.identifier"}}],[/[$][\w$]*/,{cases:{"@keywords":"keyword","@default":"argument.identifier"}}],[/[A-Z][\w\$]*/,{cases:{"@typeKeywords":"keyword","@default":"type.identifier"}}],{include:"@whitespace"},[/[{}()\[\]]/,"@brackets"],[/@symbols/,{cases:{"@operators":"operator","@default":""}}],[/@\s*[a-zA-Z_\$][\w\$]*/,{token:"annotation",log:"annotation token: $0"}],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float"],[/0[xX][0-9a-fA-F]+/,"number.hex"],[/\d+/,"number"],[/[;,.]/,"delimiter"],[/"""/,{token:"string",next:"@mlstring",nextEmbedded:"markdown"}],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,{token:"string.quote",bracket:"@open",next:"@string"}]],mlstring:[[/[^"]+/,"string"],['"""',{token:"string",next:"@pop",nextEmbedded:"@pop"}]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,{token:"string.quote",bracket:"@close",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,""],[/#.*$/,"comment"]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/handlebars/handlebars.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/handlebars/handlebars.js new file mode 100644 index 0000000000..3225fb97a6 --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/handlebars/handlebars.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/handlebars/handlebars",["require","exports","../fillers/monaco-editor-core"],(function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.language=t.conf=void 0;var a=["area","base","br","col","embed","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr"];t.conf={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,comments:{blockComment:["{{!--","--}}"]},brackets:[["\x3c!--","--\x3e"],["<",">"],["{{","}}"],["{","}"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"<",close:">"},{open:'"',close:'"'},{open:"'",close:"'"}],onEnterRules:[{beforeText:new RegExp("<(?!(?:"+a.join("|")+"))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$","i"),afterText:/^<\/(\w[\w\d]*)\s*>$/i,action:{indentAction:n.languages.IndentAction.IndentOutdent}},{beforeText:new RegExp("<(?!(?:"+a.join("|")+"))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$","i"),action:{indentAction:n.languages.IndentAction.Indent}}]},t.language={defaultToken:"",tokenPostfix:"",tokenizer:{root:[[/\{\{!--/,"comment.block.start.handlebars","@commentBlock"],[/\{\{!/,"comment.start.handlebars","@comment"],[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.root"}],[/)/,["delimiter.html","tag.html","delimiter.html"]],[/(<)(script)/,["delimiter.html",{token:"tag.html",next:"@script"}]],[/(<)(style)/,["delimiter.html",{token:"tag.html",next:"@style"}]],[/(<)([:\w]+)/,["delimiter.html",{token:"tag.html",next:"@otherTag"}]],[/(<\/)(\w+)/,["delimiter.html",{token:"tag.html",next:"@otherTag"}]],[/]+/,"metatag.content.html"],[/>/,"metatag.html","@pop"]],comment:[[/\}\}/,"comment.end.handlebars","@pop"],[/./,"comment.content.handlebars"]],commentBlock:[[/--\}\}/,"comment.block.end.handlebars","@pop"],[/./,"comment.content.handlebars"]],commentHtml:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.comment"}],[/-->/,"comment.html","@pop"],[/[^-]+/,"comment.content.html"],[/./,"comment.content.html"]],otherTag:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.otherTag"}],[/\/?>/,"delimiter.html","@pop"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/]],script:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.script"}],[/type/,"attribute.name","@scriptAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,["delimiter.html","tag.html",{token:"delimiter.html",next:"@pop"}]]],scriptAfterType:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.scriptAfterType"}],[/=/,"delimiter","@scriptAfterTypeEquals"],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptAfterTypeEquals:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.scriptAfterTypeEquals"}],[/"([^"]*)"/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptWithCustomType:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.scriptWithCustomType.$S2"}],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptEmbedded:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInEmbeddedState.scriptEmbedded.$S2",nextEmbedded:"@pop"}],[/<\/script/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}]],style:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.style"}],[/type/,"attribute.name","@styleAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,["delimiter.html","tag.html",{token:"delimiter.html",next:"@pop"}]]],styleAfterType:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.styleAfterType"}],[/=/,"delimiter","@styleAfterTypeEquals"],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleAfterTypeEquals:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.styleAfterTypeEquals"}],[/"([^"]*)"/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleWithCustomType:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.styleWithCustomType.$S2"}],[/>/,{token:"delimiter.html",next:"@styleEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleEmbedded:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInEmbeddedState.styleEmbedded.$S2",nextEmbedded:"@pop"}],[/<\/style/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}]],handlebarsInSimpleState:[[/\{\{\{?/,"delimiter.handlebars"],[/\}\}\}?/,{token:"delimiter.handlebars",switchTo:"@$S2.$S3"}],{include:"handlebarsRoot"}],handlebarsInEmbeddedState:[[/\{\{\{?/,"delimiter.handlebars"],[/\}\}\}?/,{token:"delimiter.handlebars",switchTo:"@$S2.$S3",nextEmbedded:"$S3"}],{include:"handlebarsRoot"}],handlebarsRoot:[[/"[^"]*"/,"string.handlebars"],[/[#/][^\s}]+/,"keyword.helper.handlebars"],[/else\b/,"keyword.helper.handlebars"],[/[\s]+/],[/[^}]/,"variable.parameter.handlebars"]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/hcl/hcl.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/hcl/hcl.js new file mode 100644 index 0000000000..4859378ffe --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/hcl/hcl.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/hcl/hcl",["require","exports"],(function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.language=t.conf=void 0,t.conf={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"',notIn:["string"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}]},t.language={defaultToken:"",tokenPostfix:".hcl",keywords:["var","local","path","for_each","any","string","number","bool","true","false","null","if ","else ","endif ","for ","in","endfor"],operators:["=",">=","<=","==","!=","+","-","*","/","%","&&","||","!","<",">","?","...",":"],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"operator","@default":""}}],[/\d*\d+[eE]([\-+]?\d+)?/,"number.float"],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float"],[/\d[\d']*/,"number"],[/\d/,"number"],[/[;,.]/,"delimiter"],[/"/,"string","@string"],[/'/,"invalid"]],heredoc:[[/<<[-]*\s*["]?([\w\-]+)["]?/,{token:"string.heredoc.delimiter",next:"@heredocBody.$1"}]],heredocBody:[[/([\w\-]+)$/,{cases:{"$1==$S2":[{token:"string.heredoc.delimiter",next:"@popall"}],"@default":"string.heredoc"}}],[/./,"string.heredoc"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"],[/#.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],string:[[/\$\{/,{token:"delimiter",next:"@stringExpression"}],[/[^\\"\$]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@popall"]],stringInsideExpression:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],stringExpression:[[/\}/,{token:"delimiter",next:"@pop"}],[/"/,"string","@stringInsideExpression"],{include:"@terraform"}]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/html/html.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/html/html.js new file mode 100644 index 0000000000..32ac8c8926 --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/html/html.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/html/html",["require","exports","../fillers/monaco-editor-core"],(function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.language=t.conf=void 0;var i=["area","base","br","col","embed","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr"];t.conf={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,comments:{blockComment:["\x3c!--","--\x3e"]},brackets:[["\x3c!--","--\x3e"],["<",">"],["{","}"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:'"',close:'"'},{open:"'",close:"'"},{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"}],onEnterRules:[{beforeText:new RegExp("<(?!(?:"+i.join("|")+"))([_:\\w][_:\\w-.\\d]*)([^/>]*(?!/)>)[^<]*$","i"),afterText:/^<\/([_:\w][_:\w-.\d]*)\s*>$/i,action:{indentAction:n.languages.IndentAction.IndentOutdent}},{beforeText:new RegExp("<(?!(?:"+i.join("|")+"))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$","i"),action:{indentAction:n.languages.IndentAction.Indent}}],folding:{markers:{start:new RegExp("^\\s*\x3c!--\\s*#region\\b.*--\x3e"),end:new RegExp("^\\s*\x3c!--\\s*#endregion\\b.*--\x3e")}}},t.language={defaultToken:"",tokenPostfix:".html",ignoreCase:!0,tokenizer:{root:[[/)/,["delimiter","tag","","delimiter"]],[/(<)(script)/,["delimiter",{token:"tag",next:"@script"}]],[/(<)(style)/,["delimiter",{token:"tag",next:"@style"}]],[/(<)((?:[\w\-]+:)?[\w\-]+)/,["delimiter",{token:"tag",next:"@otherTag"}]],[/(<\/)((?:[\w\-]+:)?[\w\-]+)/,["delimiter",{token:"tag",next:"@otherTag"}]],[/]+/,"metatag.content"],[/>/,"metatag","@pop"]],comment:[[/-->/,"comment","@pop"],[/[^-]+/,"comment.content"],[/./,"comment.content"]],otherTag:[[/\/?>/,"delimiter","@pop"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/]],script:[[/type/,"attribute.name","@scriptAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,["delimiter","tag",{token:"delimiter",next:"@pop"}]]],scriptAfterType:[[/=/,"delimiter","@scriptAfterTypeEquals"],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptAfterTypeEquals:[[/"([^"]*)"/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptWithCustomType:[[/>/,{token:"delimiter",next:"@scriptEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptEmbedded:[[/<\/script/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/[^<]+/,""]],style:[[/type/,"attribute.name","@styleAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,["delimiter","tag",{token:"delimiter",next:"@pop"}]]],styleAfterType:[[/=/,"delimiter","@styleAfterTypeEquals"],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleAfterTypeEquals:[[/"([^"]*)"/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleWithCustomType:[[/>/,{token:"delimiter",next:"@styleEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleEmbedded:[[/<\/style/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/[^<]+/,""]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/ini/ini.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/ini/ini.js new file mode 100644 index 0000000000..8f19f7e2eb --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/ini/ini.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/ini/ini",["require","exports"],(function(e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.language=n.conf=void 0,n.conf={comments:{lineComment:"#"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},n.language={defaultToken:"",tokenPostfix:".ini",escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/^\[[^\]]*\]/,"metatag"],[/(^\w+)(\s*)(\=)/,["key","","delimiter"]],{include:"@whitespace"},[/\d+/,"number"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/"/,"string",'@string."'],[/'/,"string","@string.'"]],whitespace:[[/[ \t\r\n]+/,""],[/^\s*[#;].*$/,"comment"]],string:[[/[^\\"']+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/["']/,{cases:{"$#==$S2":{token:"string",next:"@pop"},"@default":"string"}}]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/java/java.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/java/java.js new file mode 100644 index 0000000000..83e516ea9d --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/java/java.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/java/java",["require","exports"],(function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.language=t.conf=void 0,t.conf={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"<",close:">"}],folding:{markers:{start:new RegExp("^\\s*//\\s*(?:(?:#?region\\b)|(?:))")}}},t.language={defaultToken:"",tokenPostfix:".java",keywords:["abstract","continue","for","new","switch","assert","default","goto","package","synchronized","boolean","do","if","private","this","break","double","implements","protected","throw","byte","else","import","public","throws","case","enum","instanceof","return","transient","catch","extends","int","short","try","char","final","interface","static","void","class","finally","long","strictfp","volatile","const","float","native","super","while","true","false"],operators:["=",">","<","!","~","?",":","==","<=",">=","!=","&&","||","++","--","+","-","*","/","&","|","^","%","<<",">>",">>>","+=","-=","*=","/=","&=","|=","^=","%=","<<=",">>=",">>>="],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/@\s*[a-zA-Z_\$][\w\$]*/,"annotation"],[/(@digits)[eE]([\-+]?(@digits))?[fFdD]?/,"number.float"],[/(@digits)\.(@digits)([eE][\-+]?(@digits))?[fFdD]?/,"number.float"],[/0[xX](@hexdigits)[Ll]?/,"number.hex"],[/0(@octaldigits)[Ll]?/,"number.octal"],[/0[bB](@binarydigits)[Ll]?/,"number.binary"],[/(@digits)[fFdD]/,"number.float"],[/(@digits)[lL]?/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string"],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@javadoc"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],javadoc:[[/[^\/*]+/,"comment.doc"],[/\/\*/,"comment.doc.invalid"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/javascript/javascript.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/javascript/javascript.js new file mode 100644 index 0000000000..66dc825f7e --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/javascript/javascript.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/typescript/typescript",["require","exports","../fillers/monaco-editor-core"],(function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.language=t.conf=void 0,t.conf={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],onEnterRules:[{beforeText:/^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,afterText:/^\s*\*\/$/,action:{indentAction:n.languages.IndentAction.IndentOutdent,appendText:" * "}},{beforeText:/^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,action:{indentAction:n.languages.IndentAction.None,appendText:" * "}},{beforeText:/^(\t|(\ \ ))*\ \*(\ ([^\*]|\*(?!\/))*)?$/,action:{indentAction:n.languages.IndentAction.None,appendText:"* "}},{beforeText:/^(\t|(\ \ ))*\ \*\/\s*$/,action:{indentAction:n.languages.IndentAction.None,removeText:1}}],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"',notIn:["string"]},{open:"'",close:"'",notIn:["string","comment"]},{open:"`",close:"`",notIn:["string","comment"]},{open:"/**",close:" */",notIn:["string"]}],folding:{markers:{start:new RegExp("^\\s*//\\s*#?region\\b"),end:new RegExp("^\\s*//\\s*#?endregion\\b")}}},t.language={defaultToken:"invalid",tokenPostfix:".ts",keywords:["abstract","any","as","asserts","bigint","boolean","break","case","catch","class","continue","const","constructor","debugger","declare","default","delete","do","else","enum","export","extends","false","finally","for","from","function","get","if","implements","import","in","infer","instanceof","interface","is","keyof","let","module","namespace","never","new","null","number","object","package","private","protected","public","readonly","require","global","return","set","static","string","super","switch","symbol","this","throw","true","try","type","typeof","undefined","unique","unknown","var","void","while","with","yield","async","await","of"],operators:["<=",">=","==","!=","===","!==","=>","+","-","**","*","/","%","++","--","<<",">",">>>","&","|","^","!","~","&&","||","??","?",":","=","+=","-=","*=","**=","/=","%=","<<=",">>=",">>>=","&=","|=","^=","@"],symbols:/[=>](?!@symbols)/,"@brackets"],[/!(?=([^=]|$))/,"delimiter"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/(@digits)[eE]([\-+]?(@digits))?/,"number.float"],[/(@digits)\.(@digits)([eE][\-+]?(@digits))?/,"number.float"],[/0[xX](@hexdigits)n?/,"number.hex"],[/0[oO]?(@octaldigits)n?/,"number.octal"],[/0[bB](@binarydigits)n?/,"number.binary"],[/(@digits)n?/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string_double"],[/'/,"string","@string_single"],[/`/,"string","@string_backtick"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@jsdoc"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],jsdoc:[[/[^\/*]+/,"comment.doc"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],regexp:[[/(\{)(\d+(?:,\d*)?)(\})/,["regexp.escape.control","regexp.escape.control","regexp.escape.control"]],[/(\[)(\^?)(?=(?:[^\]\\\/]|\\.)+)/,["regexp.escape.control",{token:"regexp.escape.control",next:"@regexrange"}]],[/(\()(\?:|\?=|\?!)/,["regexp.escape.control","regexp.escape.control"]],[/[()]/,"regexp.escape.control"],[/@regexpctl/,"regexp.escape.control"],[/[^\\\/]/,"regexp"],[/@regexpesc/,"regexp.escape"],[/\\\./,"regexp.invalid"],[/(\/)([gimsuy]*)/,[{token:"regexp",bracket:"@close",next:"@pop"},"keyword.other"]]],regexrange:[[/-/,"regexp.escape.control"],[/\^/,"regexp.invalid"],[/@regexpesc/,"regexp.escape"],[/[^\]]/,"regexp"],[/\]/,{token:"regexp.escape.control",next:"@pop",bracket:"@close"}]],string_double:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],string_single:[[/[^\\']+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/'/,"string","@pop"]],string_backtick:[[/\$\{/,{token:"delimiter.bracket",next:"@bracketCounting"}],[/[^\\`$]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/`/,"string","@pop"]],bracketCounting:[[/\{/,"delimiter.bracket","@bracketCounting"],[/\}/,"delimiter.bracket","@pop"],{include:"common"}]}}})),define("vs/basic-languages/javascript/javascript",["require","exports","../typescript/typescript"],(function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.language=t.conf=void 0,t.conf=n.conf,t.language={defaultToken:"invalid",tokenPostfix:".js",keywords:["break","case","catch","class","continue","const","constructor","debugger","default","delete","do","else","export","extends","false","finally","for","from","function","get","if","import","in","instanceof","let","new","null","return","set","super","switch","symbol","this","throw","true","try","typeof","undefined","var","void","while","with","yield","async","await","of"],typeKeywords:[],operators:n.language.operators,symbols:n.language.symbols,escapes:n.language.escapes,digits:n.language.digits,octaldigits:n.language.octaldigits,binarydigits:n.language.binarydigits,hexdigits:n.language.hexdigits,regexpctl:n.language.regexpctl,regexpesc:n.language.regexpesc,tokenizer:n.language.tokenizer}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/julia/julia.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/julia/julia.js new file mode 100644 index 0000000000..3d27f05d3c --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/julia/julia.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/julia/julia",["require","exports"],(function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.language=t.conf=void 0,t.conf={brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},t.language={tokenPostfix:".julia",keywords:["begin","while","if","for","try","return","break","continue","function","macro","quote","let","local","global","const","do","struct","module","baremodule","using","import","export","end","else","elseif","catch","finally","mutable","primitive","abstract","type","in","isa","where","new"],types:["LinRange","LineNumberNode","LinearIndices","LoadError","MIME","Matrix","Method","MethodError","Missing","MissingException","Module","NTuple","NamedTuple","Nothing","Number","OrdinalRange","OutOfMemoryError","OverflowError","Pair","PartialQuickSort","PermutedDimsArray","Pipe","Ptr","QuoteNode","Rational","RawFD","ReadOnlyMemoryError","Real","ReentrantLock","Ref","Regex","RegexMatch","RoundingMode","SegmentationFault","Set","Signed","Some","StackOverflowError","StepRange","StepRangeLen","StridedArray","StridedMatrix","StridedVecOrMat","StridedVector","String","StringIndexError","SubArray","SubString","SubstitutionString","Symbol","SystemError","Task","Text","TextDisplay","Timer","Tuple","Type","TypeError","TypeVar","UInt","UInt128","UInt16","UInt32","UInt64","UInt8","UndefInitializer","AbstractArray","UndefKeywordError","AbstractChannel","UndefRefError","AbstractChar","UndefVarError","AbstractDict","Union","AbstractDisplay","UnionAll","AbstractFloat","UnitRange","AbstractIrrational","Unsigned","AbstractMatrix","AbstractRange","Val","AbstractSet","Vararg","AbstractString","VecElement","AbstractUnitRange","VecOrMat","AbstractVecOrMat","Vector","AbstractVector","VersionNumber","Any","WeakKeyDict","ArgumentError","WeakRef","Array","AssertionError","BigFloat","BigInt","BitArray","BitMatrix","BitSet","BitVector","Bool","BoundsError","CapturedException","CartesianIndex","CartesianIndices","Cchar","Cdouble","Cfloat","Channel","Char","Cint","Cintmax_t","Clong","Clonglong","Cmd","Colon","Complex","ComplexF16","ComplexF32","ComplexF64","CompositeException","Condition","Cptrdiff_t","Cshort","Csize_t","Cssize_t","Cstring","Cuchar","Cuint","Cuintmax_t","Culong","Culonglong","Cushort","Cvoid","Cwchar_t","Cwstring","DataType","DenseArray","DenseMatrix","DenseVecOrMat","DenseVector","Dict","DimensionMismatch","Dims","DivideError","DomainError","EOFError","Enum","ErrorException","Exception","ExponentialBackOff","Expr","Float16","Float32","Float64","Function","GlobalRef","HTML","IO","IOBuffer","IOContext","IOStream","IdDict","IndexCartesian","IndexLinear","IndexStyle","InexactError","InitError","Int","Int128","Int16","Int32","Int64","Int8","Integer","InterruptException","InvalidStateException","Irrational","KeyError"],keywordops:["<:",">:",":","=>","...",".","->","?"],allops:/[^\w\d\s()\[\]{}"'#]+/,constants:["true","false","nothing","missing","undef","Inf","pi","NaN","Ï€","ℯ","ans","PROGRAM_FILE","ARGS","C_NULL","VERSION","DEPOT_PATH","LOAD_PATH"],operators:["!","!=","!==","%","&","*","+","-","/","//","<","<<","<=","==","===","=>",">",">=",">>",">>>","\\","^","|","|>","~","÷","∈","∉","∋","∌","∘","√","∛","∩","∪","≈","≉","≠","≡","≢","≤","≥","⊆","⊇","⊈","⊉","⊊","⊋","⊻"],brackets:[{open:"(",close:")",token:"delimiter.parenthesis"},{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"}],ident:/Ï€|ℯ|\b(?!\d)\w+\b/,escape:/(?:[abefnrstv\\"'\n\r]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2}|u[0-9A-Fa-f]{4})/,escapes:/\\(?:C\-(@escape|.)|c(@escape|.)|@escape)/,tokenizer:{root:[[/(::)\s*|\b(isa)\s+/,"keyword","@typeanno"],[/\b(isa)(\s*\(@ident\s*,\s*)/,["keyword",{token:"",next:"@typeanno"}]],[/\b(type|struct)[ \t]+/,"keyword","@typeanno"],[/^\s*:@ident[!?]?/,"metatag"],[/(return)(\s*:@ident[!?]?)/,["keyword","metatag"]],[/(\(|\[|\{|@allops)(\s*:@ident[!?]?)/,["","metatag"]],[/:\(/,"metatag","@quote"],[/r"""/,"regexp.delim","@tregexp"],[/r"/,"regexp.delim","@sregexp"],[/raw"""/,"string.delim","@rtstring"],[/[bv]?"""/,"string.delim","@dtstring"],[/raw"/,"string.delim","@rsstring"],[/[bv]?"/,"string.delim","@dsstring"],[/(@ident)\{/,{cases:{"$1@types":{token:"type",next:"@gen"},"@default":{token:"type",next:"@gen"}}}],[/@ident[!?'']?(?=\.?\()/,{cases:{"@types":"type","@keywords":"keyword","@constants":"variable","@default":"keyword.flow"}}],[/@ident[!?']?/,{cases:{"@types":"type","@keywords":"keyword","@constants":"variable","@default":"identifier"}}],[/\$\w+/,"key"],[/\$\(/,"key","@paste"],[/@@ident/,"annotation"],{include:"@whitespace"},[/'(?:@escapes|.)'/,"string.character"],[/[()\[\]{}]/,"@brackets"],[/@allops/,{cases:{"@keywordops":"keyword","@operators":"operator"}}],[/[;,]/,"delimiter"],[/0[xX][0-9a-fA-F](_?[0-9a-fA-F])*/,"number.hex"],[/0[_oO][0-7](_?[0-7])*/,"number.octal"],[/0[bB][01](_?[01])*/,"number.binary"],[/[+\-]?\d+(\.\d+)?(im?|[eE][+\-]?\d+(\.\d+)?)?/,"number"]],typeanno:[[/[a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*)*\{/,"type","@gen"],[/([a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*)*)(\s*<:\s*)/,["type","keyword"]],[/[a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*)*/,"type","@pop"],["","","@pop"]],gen:[[/[a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*)*\{/,"type","@push"],[/[a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*)*/,"type"],[/<:/,"keyword"],[/(\})(\s*<:\s*)/,["type",{token:"keyword",next:"@pop"}]],[/\}/,"type","@pop"],{include:"@root"}],quote:[[/\$\(/,"key","@paste"],[/\(/,"@brackets","@paren"],[/\)/,"metatag","@pop"],{include:"@root"}],paste:[[/:\(/,"metatag","@quote"],[/\(/,"@brackets","@paren"],[/\)/,"key","@pop"],{include:"@root"}],paren:[[/\$\(/,"key","@paste"],[/:\(/,"metatag","@quote"],[/\(/,"@brackets","@push"],[/\)/,"@brackets","@pop"],{include:"@root"}],sregexp:[[/^.*/,"invalid"],[/[^\\"()\[\]{}]/,"regexp"],[/[()\[\]{}]/,"@brackets"],[/\\./,"operator.scss"],[/"[imsx]*/,"regexp.delim","@pop"]],tregexp:[[/[^\\"()\[\]{}]/,"regexp"],[/[()\[\]{}]/,"@brackets"],[/\\./,"operator.scss"],[/"(?!"")/,"string"],[/"""[imsx]*/,"regexp.delim","@pop"]],rsstring:[[/^.*/,"invalid"],[/[^\\"]/,"string"],[/\\./,"string.escape"],[/"/,"string.delim","@pop"]],rtstring:[[/[^\\"]/,"string"],[/\\./,"string.escape"],[/"(?!"")/,"string"],[/"""/,"string.delim","@pop"]],dsstring:[[/^.*/,"invalid"],[/[^\\"\$]/,"string"],[/\$/,"","@interpolated"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string.delim","@pop"]],dtstring:[[/[^\\"\$]/,"string"],[/\$/,"","@interpolated"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"(?!"")/,"string"],[/"""/,"string.delim","@pop"]],interpolated:[[/\(/,{token:"",switchTo:"@interpolated_compound"}],[/[a-zA-Z_]\w*/,"identifier"],["","","@pop"]],interpolated_compound:[[/\)/,"","@pop"],{include:"@root"}],whitespace:[[/[ \t\r\n]+/,""],[/#=/,"comment","@multi_comment"],[/#.*$/,"comment"]],multi_comment:[[/#=/,"comment","@push"],[/=#/,"comment","@pop"],[/=(?!#)|#(?!=)/,"comment"],[/[^#=]+/,"comment"]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/kotlin/kotlin.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/kotlin/kotlin.js new file mode 100644 index 0000000000..f2568426e7 --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/kotlin/kotlin.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/kotlin/kotlin",["require","exports"],(function(e,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.language=i.conf=void 0,i.conf={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"<",close:">"}],folding:{markers:{start:new RegExp("^\\s*//\\s*(?:(?:#?region\\b)|(?:))")}}},i.language={defaultToken:"",tokenPostfix:".kt",keywords:["as","as?","break","class","continue","do","else","false","for","fun","if","in","!in","interface","is","!is","null","object","package","return","super","this","throw","true","try","typealias","val","var","when","while","by","catch","constructor","delegate","dynamic","field","file","finally","get","import","init","param","property","receiver","set","setparam","where","actual","abstract","annotation","companion","const","crossinline","data","enum","expect","external","final","infix","inline","inner","internal","lateinit","noinline","open","operator","out","override","private","protected","public","reified","sealed","suspend","tailrec","vararg","field","it"],operators:["+","-","*","/","%","=","+=","-=","*=","/=","%=","++","--","&&","||","!","==","!=","===","!==",">","<","<=",">=","[","]","!!","?.","?:","::","..",":","?","->","@",";","$","_"],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/@\s*[a-zA-Z_\$][\w\$]*/,"annotation"],[/(@digits)[eE]([\-+]?(@digits))?[fFdD]?/,"number.float"],[/(@digits)\.(@digits)([eE][\-+]?(@digits))?[fFdD]?/,"number.float"],[/0[xX](@hexdigits)[Ll]?/,"number.hex"],[/0(@octaldigits)[Ll]?/,"number.octal"],[/0[bB](@binarydigits)[Ll]?/,"number.binary"],[/(@digits)[fFdD]/,"number.float"],[/(@digits)[lL]?/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"""/,"string","@multistring"],[/"/,"string","@string"],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@javadoc"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\/\*/,"comment","@comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],javadoc:[[/[^\/*]+/,"comment.doc"],[/\/\*/,"comment.doc","@push"],[/\/\*/,"comment.doc.invalid"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],multistring:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"""/,"string","@pop"],[/./,"string"]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/less/less.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/less/less.js new file mode 100644 index 0000000000..edcf04de3c --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/less/less.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/less/less",["require","exports"],(function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.language=t.conf=void 0,t.conf={wordPattern:/(#?-?\d*\.\d\w*%?)|([@#!.:]?[\w-?]+%?)|[@#!.]/g,comments:{blockComment:["/*","*/"],lineComment:"//"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]},{open:"'",close:"'",notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*\\/\\*\\s*#region\\b\\s*(.*?)\\s*\\*\\/"),end:new RegExp("^\\s*\\/\\*\\s*#endregion\\b.*\\*\\/")}}},t.language={defaultToken:"",tokenPostfix:".less",identifier:"-?-?([a-zA-Z]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))([\\w\\-]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))*",identifierPlus:"-?-?([a-zA-Z:.]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))([\\w\\-:.]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))*",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.bracket"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],tokenizer:{root:[{include:"@nestedJSBegin"},["[ \\t\\r\\n]+",""],{include:"@comments"},{include:"@keyword"},{include:"@strings"},{include:"@numbers"},["[*_]?[a-zA-Z\\-\\s]+(?=:.*(;|(\\\\$)))","attribute.name","@attribute"],["url(\\-prefix)?\\(",{token:"tag",next:"@urldeclaration"}],["[{}()\\[\\]]","@brackets"],["[,:;]","delimiter"],["#@identifierPlus","tag.id"],["&","tag"],["\\.@identifierPlus(?=\\()","tag.class","@attribute"],["\\.@identifierPlus","tag.class"],["@identifierPlus","tag"],{include:"@operators"},["@(@identifier(?=[:,\\)]))","variable","@attribute"],["@(@identifier)","variable"],["@","key","@atRules"]],nestedJSBegin:[["``","delimiter.backtick"],["`",{token:"delimiter.backtick",next:"@nestedJSEnd",nextEmbedded:"text/javascript"}]],nestedJSEnd:[["`",{token:"delimiter.backtick",next:"@pop",nextEmbedded:"@pop"}]],operators:[["[<>=\\+\\-\\*\\/\\^\\|\\~]","operator"]],keyword:[["(@[\\s]*import|![\\s]*important|true|false|when|iscolor|isnumber|isstring|iskeyword|isurl|ispixel|ispercentage|isem|hue|saturation|lightness|alpha|lighten|darken|saturate|desaturate|fadein|fadeout|fade|spin|mix|round|ceil|floor|percentage)\\b","keyword"]],urldeclaration:[{include:"@strings"},["[^)\r\n]+","string"],["\\)",{token:"tag",next:"@pop"}]],attribute:[{include:"@nestedJSBegin"},{include:"@comments"},{include:"@strings"},{include:"@numbers"},{include:"@keyword"},["[a-zA-Z\\-]+(?=\\()","attribute.value","@attribute"],[">","operator","@pop"],["@identifier","attribute.value"],{include:"@operators"},["@(@identifier)","variable"],["[)\\}]","@brackets","@pop"],["[{}()\\[\\]>]","@brackets"],["[;]","delimiter","@pop"],["[,=:]","delimiter"],["\\s",""],[".","attribute.value"]],comments:[["\\/\\*","comment","@comment"],["\\/\\/+.*","comment"]],comment:[["\\*\\/","comment","@pop"],[".","comment"]],numbers:[["(\\d*\\.)?\\d+([eE][\\-+]?\\d+)?",{token:"attribute.value.number",next:"@units"}],["#[0-9a-fA-F_]+(?!\\w)","attribute.value.hex"]],units:[["(em|ex|ch|rem|vmin|vmax|vw|vh|vm|cm|mm|in|px|pt|pc|deg|grad|rad|turn|s|ms|Hz|kHz|%)?","attribute.value.unit","@pop"]],strings:[['~?"',{token:"string.delimiter",next:"@stringsEndDoubleQuote"}],["~?'",{token:"string.delimiter",next:"@stringsEndQuote"}]],stringsEndDoubleQuote:[['\\\\"',"string"],['"',{token:"string.delimiter",next:"@popall"}],[".","string"]],stringsEndQuote:[["\\\\'","string"],["'",{token:"string.delimiter",next:"@popall"}],[".","string"]],atRules:[{include:"@comments"},{include:"@strings"},["[()]","delimiter"],["[\\{;]","delimiter","@pop"],[".","key"]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/lexon/lexon.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/lexon/lexon.js new file mode 100644 index 0000000000..f52f8ec387 --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/lexon/lexon.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/lexon/lexon",["require","exports"],(function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.language=t.conf=void 0,t.conf={comments:{lineComment:"COMMENT"},brackets:[["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:":",close:"."}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"`",close:"`"},{open:'"',close:'"'},{open:"'",close:"'"},{open:":",close:"."}],folding:{markers:{start:new RegExp("^\\s*(::\\s*|COMMENT\\s+)#region"),end:new RegExp("^\\s*(::\\s*|COMMENT\\s+)#endregion")}}},t.language={tokenPostfix:".lexon",ignoreCase:!0,keywords:["lexon","lex","clause","terms","contracts","may","pay","pays","appoints","into","to"],typeKeywords:["amount","person","key","time","date","asset","text"],operators:["less","greater","equal","le","gt","or","and","add","added","subtract","subtracted","multiply","multiplied","times","divide","divided","is","be","certified"],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,"delimiter"],[/\d*\.\d*\.\d*/,"number.semver"],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float"],[/0[xX][0-9a-fA-F]+/,"number.hex"],[/\d+/,"number"],[/[;,.]/,"delimiter"]],quoted_identifier:[[/[^\\"]+/,"identifier"],[/"/,{token:"identifier.quote",bracket:"@close",next:"@pop"}]],space_identifier_until_period:[[":","delimiter"],[" ",{token:"white",next:"@identifier_rest"}]],identifier_until_period:[{include:"@whitespace"},[":",{token:"delimiter",next:"@identifier_rest"}],[/[^\\.]+/,"identifier"],[/\./,{token:"delimiter",bracket:"@close",next:"@pop"}]],identifier_rest:[[/[^\\.]+/,"identifier"],[/\./,{token:"delimiter",bracket:"@close",next:"@pop"}]],semver:[{include:"@whitespace"},[":","delimiter"],[/\d*\.\d*\.\d*/,{token:"number.semver",bracket:"@close",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,"white"]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/lua/lua.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/lua/lua.js new file mode 100644 index 0000000000..da401990c7 --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/lua/lua.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/lua/lua",["require","exports"],(function(e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.language=n.conf=void 0,n.conf={comments:{lineComment:"--",blockComment:["--[[","]]"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},n.language={defaultToken:"",tokenPostfix:".lua",keywords:["and","break","do","else","elseif","end","false","for","function","goto","if","in","local","nil","not","or","repeat","return","then","true","until","while"],brackets:[{token:"delimiter.bracket",open:"{",close:"}"},{token:"delimiter.array",open:"[",close:"]"},{token:"delimiter.parenthesis",open:"(",close:")"}],operators:["+","-","*","/","%","^","#","==","~=","<=",">=","<",">","=",";",":",",",".","..","..."],symbols:/[=>"},{open:"'",close:"'",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]}]},o.language={defaultToken:"",tokenPostfix:".m3",brackets:[{token:"delimiter.curly",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"}],keywords:["AND","ANY","ARRAY","AS","BEGIN","BITS","BRANDED","BY","CASE","CONST","DIV","DO","ELSE","ELSIF","END","EVAL","EXCEPT","EXCEPTION","EXIT","EXPORTS","FINALLY","FOR","FROM","GENERIC","IF","IMPORT","IN","INTERFACE","LOCK","LOOP","METHODS","MOD","MODULE","NOT","OBJECT","OF","OR","OVERRIDES","PROCEDURE","RAISE","RAISES","READONLY","RECORD","REF","REPEAT","RETURN","REVEAL","SET","THEN","TO","TRY","TYPE","TYPECASE","UNSAFE","UNTIL","UNTRACED","VALUE","VAR","WHILE","WITH"],reservedConstNames:["ABS","ADR","ADRSIZE","BITSIZE","BYTESIZE","CEILING","DEC","DISPOSE","FALSE","FIRST","FLOAT","FLOOR","INC","ISTYPE","LAST","LOOPHOLE","MAX","MIN","NARROW","NEW","NIL","NUMBER","ORD","ROUND","SUBARRAY","TRUE","TRUNC","TYPECODE","VAL"],reservedTypeNames:["ADDRESS","ANY","BOOLEAN","CARDINAL","CHAR","EXTENDED","INTEGER","LONGCARD","LONGINT","LONGREAL","MUTEX","NULL","REAL","REFANY","ROOT","TEXT"],operators:["+","-","*","/","&","^","."],relations:["=","#","<","<=",">",">=","<:",":"],delimiters:["|","..","=>",",",";",":="],symbols:/[>=<#.,:;+\-*/&^]+/,escapes:/\\(?:[\\fnrt"']|[0-7]{3})/,tokenizer:{root:[[/_\w*/,"invalid"],[/[a-zA-Z][a-zA-Z0-9_]*/,{cases:{"@keywords":{token:"keyword.$0"},"@reservedConstNames":{token:"constant.reserved.$0"},"@reservedTypeNames":{token:"type.reserved.$0"},"@default":"identifier"}}],{include:"@whitespace"},[/[{}()\[\]]/,"@brackets"],[/[0-9]+\.[0-9]+(?:[DdEeXx][\+\-]?[0-9]+)?/,"number.float"],[/[0-9]+(?:\_[0-9a-fA-F]+)?L?/,"number"],[/@symbols/,{cases:{"@operators":"operators","@relations":"operators","@delimiters":"delimiter","@default":"invalid"}}],[/'[^\\']'/,"string.char"],[/(')(@escapes)(')/,["string.char","string.escape","string.char"]],[/'/,"invalid"],[/"([^"\\]|\\.)*$/,"invalid"],[/"/,"string.text","@text"]],text:[[/[^\\"]+/,"string.text"],[/@escapes/,"string.escape"],[/\\./,"invalid"],[/"/,"string.text","@pop"]],comment:[[/\(\*/,"comment","@push"],[/\*\)/,"comment","@pop"],[/./,"comment"]],pragma:[[/<\*/,"keyword.pragma","@push"],[/\*>/,"keyword.pragma","@pop"],[/./,"keyword.pragma"]],whitespace:[[/[ \t\r\n]+/,"white"],[/\(\*/,"comment","@comment"],[/<\*/,"keyword.pragma","@pragma"]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/markdown/markdown.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/markdown/markdown.js new file mode 100644 index 0000000000..dc020eef6a --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/markdown/markdown.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/markdown/markdown",["require","exports"],(function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.language=t.conf=void 0,t.conf={comments:{blockComment:["\x3c!--","--\x3e"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">",notIn:["string"]}],surroundingPairs:[{open:"(",close:")"},{open:"[",close:"]"},{open:"`",close:"`"}],folding:{markers:{start:new RegExp("^\\s*\x3c!--\\s*#?region\\b.*--\x3e"),end:new RegExp("^\\s*\x3c!--\\s*#?endregion\\b.*--\x3e")}}},t.language={defaultToken:"",tokenPostfix:".md",control:/[\\`*_\[\]{}()#+\-\.!]/,noncontrol:/[^\\`*_\[\]{}()#+\-\.!]/,escapes:/\\(?:@control)/,jsescapes:/\\(?:[btnfr\\"']|[0-7][0-7]?|[0-3][0-7]{2})/,empty:["area","base","basefont","br","col","frame","hr","img","input","isindex","link","meta","param"],tokenizer:{root:[[/^\s*\|/,"@rematch","@table_header"],[/^(\s{0,3})(#+)((?:[^\\#]|@escapes)+)((?:#+)?)/,["white","keyword","keyword","keyword"]],[/^\s*(=+|\-+)\s*$/,"keyword"],[/^\s*((\*[ ]?)+)\s*$/,"meta.separator"],[/^\s*>+/,"comment"],[/^\s*([\*\-+:]|\d+\.)\s/,"keyword"],[/^(\t|[ ]{4})[^ ].*$/,"string"],[/^\s*~~~\s*((?:\w|[\/\-#])+)?\s*$/,{token:"string",next:"@codeblock"}],[/^\s*```\s*((?:\w|[\/\-#])+).*$/,{token:"string",next:"@codeblockgh",nextEmbedded:"$1"}],[/^\s*```\s*$/,{token:"string",next:"@codeblock"}],{include:"@linecontent"}],table_header:[{include:"@table_common"},[/[^\|]+/,"keyword.table.header"]],table_body:[{include:"@table_common"},{include:"@linecontent"}],table_common:[[/\s*[\-:]+\s*/,{token:"keyword",switchTo:"table_body"}],[/^\s*\|/,"keyword.table.left"],[/^\s*[^\|]/,"@rematch","@pop"],[/^\s*$/,"@rematch","@pop"],[/\|/,{cases:{"@eos":"keyword.table.right","@default":"keyword.table.middle"}}]],codeblock:[[/^\s*~~~\s*$/,{token:"string",next:"@pop"}],[/^\s*```\s*$/,{token:"string",next:"@pop"}],[/.*$/,"variable.source"]],codeblockgh:[[/```\s*$/,{token:"variable.source",next:"@pop",nextEmbedded:"@pop"}],[/[^`]+/,"variable.source"]],linecontent:[[/&\w+;/,"string.escape"],[/@escapes/,"escape"],[/\b__([^\\_]|@escapes|_(?!_))+__\b/,"strong"],[/\*\*([^\\*]|@escapes|\*(?!\*))+\*\*/,"strong"],[/\b_[^_]+_\b/,"emphasis"],[/\*([^\\*]|@escapes)+\*/,"emphasis"],[/`([^\\`]|@escapes)+`/,"variable"],[/\{+[^}]+\}+/,"string.target"],[/(!?\[)((?:[^\]\\]|@escapes)*)(\]\([^\)]+\))/,["string.link","","string.link"]],[/(!?\[)((?:[^\]\\]|@escapes)*)(\])/,"string.link"],{include:"html"}],html:[[/<(\w+)\/>/,"tag"],[/<(\w+)/,{cases:{"@empty":{token:"tag",next:"@tag.$1"},"@default":{token:"tag",next:"@tag.$1"}}}],[/<\/(\w+)\s*>/,{token:"tag"}],[//,"comment","@pop"],[//,"comment.html","@pop"],[/[^-]+/,"comment.content.html"],[/./,"comment.content.html"]],otherTag:[[/<\?((php)|=)?/,{token:"@rematch",switchTo:"@phpInSimpleState.otherTag"}],[/\/?>/,"delimiter.html","@pop"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/]],script:[[/<\?((php)|=)?/,{token:"@rematch",switchTo:"@phpInSimpleState.script"}],[/type/,"attribute.name","@scriptAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,["delimiter.html","tag.html",{token:"delimiter.html",next:"@pop"}]]],scriptAfterType:[[/<\?((php)|=)?/,{token:"@rematch",switchTo:"@phpInSimpleState.scriptAfterType"}],[/=/,"delimiter","@scriptAfterTypeEquals"],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptAfterTypeEquals:[[/<\?((php)|=)?/,{token:"@rematch",switchTo:"@phpInSimpleState.scriptAfterTypeEquals"}],[/"([^"]*)"/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptWithCustomType:[[/<\?((php)|=)?/,{token:"@rematch",switchTo:"@phpInSimpleState.scriptWithCustomType.$S2"}],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptEmbedded:[[/<\?((php)|=)?/,{token:"@rematch",switchTo:"@phpInEmbeddedState.scriptEmbedded.$S2",nextEmbedded:"@pop"}],[/<\/script/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}]],style:[[/<\?((php)|=)?/,{token:"@rematch",switchTo:"@phpInSimpleState.style"}],[/type/,"attribute.name","@styleAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,["delimiter.html","tag.html",{token:"delimiter.html",next:"@pop"}]]],styleAfterType:[[/<\?((php)|=)?/,{token:"@rematch",switchTo:"@phpInSimpleState.styleAfterType"}],[/=/,"delimiter","@styleAfterTypeEquals"],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleAfterTypeEquals:[[/<\?((php)|=)?/,{token:"@rematch",switchTo:"@phpInSimpleState.styleAfterTypeEquals"}],[/"([^"]*)"/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleWithCustomType:[[/<\?((php)|=)?/,{token:"@rematch",switchTo:"@phpInSimpleState.styleWithCustomType.$S2"}],[/>/,{token:"delimiter.html",next:"@styleEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleEmbedded:[[/<\?((php)|=)?/,{token:"@rematch",switchTo:"@phpInEmbeddedState.styleEmbedded.$S2",nextEmbedded:"@pop"}],[/<\/style/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}]],phpInSimpleState:[[/<\?((php)|=)?/,"metatag.php"],[/\?>/,{token:"metatag.php",switchTo:"@$S2.$S3"}],{include:"phpRoot"}],phpInEmbeddedState:[[/<\?((php)|=)?/,"metatag.php"],[/\?>/,{token:"metatag.php",switchTo:"@$S2.$S3",nextEmbedded:"$S3"}],{include:"phpRoot"}],phpRoot:[[/[a-zA-Z_]\w*/,{cases:{"@phpKeywords":{token:"keyword.php"},"@phpCompileTimeConstants":{token:"constant.php"},"@default":"identifier.php"}}],[/[$a-zA-Z_]\w*/,{cases:{"@phpPreDefinedVariables":{token:"variable.predefined.php"},"@default":"variable.php"}}],[/[{}]/,"delimiter.bracket.php"],[/[\[\]]/,"delimiter.array.php"],[/[()]/,"delimiter.parenthesis.php"],[/[ \t\r\n]+/],[/(#|\/\/)$/,"comment.php"],[/(#|\/\/)/,"comment.php","@phpLineComment"],[/\/\*/,"comment.php","@phpComment"],[/"/,"string.php","@phpDoubleQuoteString"],[/'/,"string.php","@phpSingleQuoteString"],[/[\+\-\*\%\&\|\^\~\!\=\<\>\/\?\;\:\.\,\@]/,"delimiter.php"],[/\d*\d+[eE]([\-+]?\d+)?/,"number.float.php"],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float.php"],[/0[xX][0-9a-fA-F']*[0-9a-fA-F]/,"number.hex.php"],[/0[0-7']*[0-7]/,"number.octal.php"],[/0[bB][0-1']*[0-1]/,"number.binary.php"],[/\d[\d']*/,"number.php"],[/\d/,"number.php"]],phpComment:[[/\*\//,"comment.php","@pop"],[/[^*]+/,"comment.php"],[/./,"comment.php"]],phpLineComment:[[/\?>/,{token:"@rematch",next:"@pop"}],[/.$/,"comment.php","@pop"],[/[^?]+$/,"comment.php","@pop"],[/[^?]+/,"comment.php"],[/./,"comment.php"]],phpDoubleQuoteString:[[/[^\\"]+/,"string.php"],[/@escapes/,"string.escape.php"],[/\\./,"string.escape.invalid.php"],[/"/,"string.php","@pop"]],phpSingleQuoteString:[[/[^\\']+/,"string.php"],[/@escapes/,"string.escape.php"],[/\\./,"string.escape.invalid.php"],[/'/,"string.php","@pop"]]},phpKeywords:["abstract","and","array","as","break","callable","case","catch","cfunction","class","clone","const","continue","declare","default","do","else","elseif","enddeclare","endfor","endforeach","endif","endswitch","endwhile","extends","false","final","for","foreach","function","global","goto","if","implements","interface","instanceof","insteadof","namespace","new","null","object","old_function","or","private","protected","public","resource","static","switch","throw","trait","try","true","use","var","while","xor","die","echo","empty","exit","eval","include","include_once","isset","list","require","require_once","return","print","unset","yield","__construct"],phpCompileTimeConstants:["__CLASS__","__DIR__","__FILE__","__LINE__","__NAMESPACE__","__METHOD__","__FUNCTION__","__TRAIT__"],phpPreDefinedVariables:["$GLOBALS","$_SERVER","$_GET","$_POST","$_FILES","$_REQUEST","$_SESSION","$_ENV","$_COOKIE","$php_errormsg","$HTTP_RAW_POST_DATA","$http_response_header","$argc","$argv"],escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/postiats/postiats.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/postiats/postiats.js new file mode 100644 index 0000000000..df397c1cae --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/postiats/postiats.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/postiats/postiats",["require","exports"],(function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.language=t.conf=void 0,t.conf={comments:{lineComment:"//",blockComment:["(*","*)"]},brackets:[["{","}"],["[","]"],["(",")"],["<",">"]],autoClosingPairs:[{open:'"',close:'"',notIn:["string","comment"]},{open:"{",close:"}",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]}]},t.language={tokenPostfix:".pats",defaultToken:"invalid",keywords:["abstype","abst0ype","absprop","absview","absvtype","absviewtype","absvt0ype","absviewt0ype","as","and","assume","begin","classdec","datasort","datatype","dataprop","dataview","datavtype","dataviewtype","do","end","extern","extype","extvar","exception","fn","fnx","fun","prfn","prfun","praxi","castfn","if","then","else","ifcase","in","infix","infixl","infixr","prefix","postfix","implmnt","implement","primplmnt","primplement","import","let","local","macdef","macrodef","nonfix","symelim","symintr","overload","of","op","rec","sif","scase","sortdef","sta","stacst","stadef","static","staload","dynload","try","tkindef","typedef","propdef","viewdef","vtypedef","viewtypedef","prval","var","prvar","when","where","with","withtype","withprop","withview","withvtype","withviewtype"],keywords_dlr:["$delay","$ldelay","$arrpsz","$arrptrsize","$d2ctype","$effmask","$effmask_ntm","$effmask_exn","$effmask_ref","$effmask_wrt","$effmask_all","$extern","$extkind","$extype","$extype_struct","$extval","$extfcall","$extmcall","$literal","$myfilename","$mylocation","$myfunction","$lst","$lst_t","$lst_vt","$list","$list_t","$list_vt","$rec","$rec_t","$rec_vt","$record","$record_t","$record_vt","$tup","$tup_t","$tup_vt","$tuple","$tuple_t","$tuple_vt","$break","$continue","$raise","$showtype","$vcopyenv_v","$vcopyenv_vt","$tempenver","$solver_assert","$solver_verify"],keywords_srp:["#if","#ifdef","#ifndef","#then","#elif","#elifdef","#elifndef","#else","#endif","#error","#prerr","#print","#assert","#undef","#define","#include","#require","#pragma","#codegen2","#codegen3"],irregular_keyword_list:["val+","val-","val","case+","case-","case","addr@","addr","fold@","free@","fix@","fix","lam@","lam","llam@","llam","viewt@ype+","viewt@ype-","viewt@ype","viewtype+","viewtype-","viewtype","view+","view-","view@","view","type+","type-","type","vtype+","vtype-","vtype","vt@ype+","vt@ype-","vt@ype","viewt@ype+","viewt@ype-","viewt@ype","viewtype+","viewtype-","viewtype","prop+","prop-","prop","type+","type-","type","t@ype","t@ype+","t@ype-","abst@ype","abstype","absviewt@ype","absvt@ype","for*","for","while*","while"],keywords_types:["bool","double","byte","int","short","char","void","unit","long","float","string","strptr"],keywords_effects:["0","fun","clo","prf","funclo","cloptr","cloref","ref","ntm","1"],operators:["@","!","|","`",":","$",".","=","#","~","..","...","=>","=<>","=/=>","=>>","=/=>>","<",">","><",".<",">.",".<>.","->","-<>"],brackets:[{open:",(",close:")",token:"delimiter.parenthesis"},{open:"`(",close:")",token:"delimiter.parenthesis"},{open:"%(",close:")",token:"delimiter.parenthesis"},{open:"'(",close:")",token:"delimiter.parenthesis"},{open:"'{",close:"}",token:"delimiter.parenthesis"},{open:"@(",close:")",token:"delimiter.parenthesis"},{open:"@{",close:"}",token:"delimiter.brace"},{open:"@[",close:"]",token:"delimiter.square"},{open:"#[",close:"]",token:"delimiter.square"},{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],symbols:/[=>]/,digit:/[0-9]/,digitseq0:/@digit*/,xdigit:/[0-9A-Za-z]/,xdigitseq0:/@xdigit*/,INTSP:/[lLuU]/,FLOATSP:/[fFlL]/,fexponent:/[eE][+-]?[0-9]+/,fexponent_bin:/[pP][+-]?[0-9]+/,deciexp:/\.[0-9]*@fexponent?/,hexiexp:/\.[0-9a-zA-Z]*@fexponent_bin?/,irregular_keywords:/val[+-]?|case[+-]?|addr\@?|fold\@|free\@|fix\@?|lam\@?|llam\@?|prop[+-]?|type[+-]?|view[+-@]?|viewt@?ype[+-]?|t@?ype[+-]?|v(iew)?t@?ype[+-]?|abst@?ype|absv(iew)?t@?ype|for\*?|while\*?/,ESCHAR:/[ntvbrfa\\\?'"\(\[\{]/,start:"root",tokenizer:{root:[{regex:/[ \t\r\n]+/,action:{token:""}},{regex:/\(\*\)/,action:{token:"invalid"}},{regex:/\(\*/,action:{token:"comment",next:"lexing_COMMENT_block_ml"}},{regex:/\(/,action:"@brackets"},{regex:/\)/,action:"@brackets"},{regex:/\[/,action:"@brackets"},{regex:/\]/,action:"@brackets"},{regex:/\{/,action:"@brackets"},{regex:/\}/,action:"@brackets"},{regex:/,\(/,action:"@brackets"},{regex:/,/,action:{token:"delimiter.comma"}},{regex:/;/,action:{token:"delimiter.semicolon"}},{regex:/@\(/,action:"@brackets"},{regex:/@\[/,action:"@brackets"},{regex:/@\{/,action:"@brackets"},{regex:/:/,action:{token:"@rematch",next:"@pop"}}],lexing_EXTCODE:[{regex:/^%}/,action:{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}},{regex:/[^%]+/,action:""}],lexing_DQUOTE:[{regex:/"/,action:{token:"string.quote",next:"@pop"}},{regex:/(\{\$)(@IDENTFST@IDENTRST*)(\})/,action:[{token:"string.escape"},{token:"identifier"},{token:"string.escape"}]},{regex:/\\$/,action:{token:"string.escape"}},{regex:/\\(@ESCHAR|[xX]@xdigit+|@digit+)/,action:{token:"string.escape"}},{regex:/[^\\"]+/,action:{token:"string"}}]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/powerquery/powerquery.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/powerquery/powerquery.js new file mode 100644 index 0000000000..eee02c521c --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/powerquery/powerquery.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/powerquery/powerquery",["require","exports"],(function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.language=t.conf=void 0,t.conf={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["[","]"],["(",")"],["{","}"]],autoClosingPairs:[{open:'"',close:'"',notIn:["string","comment","identifier"]},{open:"[",close:"]",notIn:["string","comment","identifier"]},{open:"(",close:")",notIn:["string","comment","identifier"]},{open:"{",close:"}",notIn:["string","comment","identifier"]}]},t.language={defaultToken:"",tokenPostfix:".pq",ignoreCase:!1,brackets:[{open:"[",close:"]",token:"delimiter.square"},{open:"{",close:"}",token:"delimiter.brackets"},{open:"(",close:")",token:"delimiter.parenthesis"}],operatorKeywords:["and","not","or"],keywords:["as","each","else","error","false","if","in","is","let","meta","otherwise","section","shared","then","true","try","type"],constructors:["#binary","#date","#datetime","#datetimezone","#duration","#table","#time"],constants:["#infinity","#nan","#sections","#shared"],typeKeywords:["action","any","anynonnull","none","null","logical","number","time","date","datetime","datetimezone","duration","text","binary","list","record","table","function"],builtinFunctions:["Access.Database","Action.Return","Action.Sequence","Action.Try","ActiveDirectory.Domains","AdoDotNet.DataSource","AdoDotNet.Query","AdobeAnalytics.Cubes","AnalysisServices.Database","AnalysisServices.Databases","AzureStorage.BlobContents","AzureStorage.Blobs","AzureStorage.Tables","Binary.Buffer","Binary.Combine","Binary.Compress","Binary.Decompress","Binary.End","Binary.From","Binary.FromList","Binary.FromText","Binary.InferContentType","Binary.Length","Binary.ToList","Binary.ToText","BinaryFormat.7BitEncodedSignedInteger","BinaryFormat.7BitEncodedUnsignedInteger","BinaryFormat.Binary","BinaryFormat.Byte","BinaryFormat.ByteOrder","BinaryFormat.Choice","BinaryFormat.Decimal","BinaryFormat.Double","BinaryFormat.Group","BinaryFormat.Length","BinaryFormat.List","BinaryFormat.Null","BinaryFormat.Record","BinaryFormat.SignedInteger16","BinaryFormat.SignedInteger32","BinaryFormat.SignedInteger64","BinaryFormat.Single","BinaryFormat.Text","BinaryFormat.Transform","BinaryFormat.UnsignedInteger16","BinaryFormat.UnsignedInteger32","BinaryFormat.UnsignedInteger64","Byte.From","Character.FromNumber","Character.ToNumber","Combiner.CombineTextByDelimiter","Combiner.CombineTextByEachDelimiter","Combiner.CombineTextByLengths","Combiner.CombineTextByPositions","Combiner.CombineTextByRanges","Comparer.Equals","Comparer.FromCulture","Comparer.Ordinal","Comparer.OrdinalIgnoreCase","Csv.Document","Cube.AddAndExpandDimensionColumn","Cube.AddMeasureColumn","Cube.ApplyParameter","Cube.AttributeMemberId","Cube.AttributeMemberProperty","Cube.CollapseAndRemoveColumns","Cube.Dimensions","Cube.DisplayFolders","Cube.Measures","Cube.Parameters","Cube.Properties","Cube.PropertyKey","Cube.ReplaceDimensions","Cube.Transform","Currency.From","DB2.Database","Date.AddDays","Date.AddMonths","Date.AddQuarters","Date.AddWeeks","Date.AddYears","Date.Day","Date.DayOfWeek","Date.DayOfWeekName","Date.DayOfYear","Date.DaysInMonth","Date.EndOfDay","Date.EndOfMonth","Date.EndOfQuarter","Date.EndOfWeek","Date.EndOfYear","Date.From","Date.FromText","Date.IsInCurrentDay","Date.IsInCurrentMonth","Date.IsInCurrentQuarter","Date.IsInCurrentWeek","Date.IsInCurrentYear","Date.IsInNextDay","Date.IsInNextMonth","Date.IsInNextNDays","Date.IsInNextNMonths","Date.IsInNextNQuarters","Date.IsInNextNWeeks","Date.IsInNextNYears","Date.IsInNextQuarter","Date.IsInNextWeek","Date.IsInNextYear","Date.IsInPreviousDay","Date.IsInPreviousMonth","Date.IsInPreviousNDays","Date.IsInPreviousNMonths","Date.IsInPreviousNQuarters","Date.IsInPreviousNWeeks","Date.IsInPreviousNYears","Date.IsInPreviousQuarter","Date.IsInPreviousWeek","Date.IsInPreviousYear","Date.IsInYearToDate","Date.IsLeapYear","Date.Month","Date.MonthName","Date.QuarterOfYear","Date.StartOfDay","Date.StartOfMonth","Date.StartOfQuarter","Date.StartOfWeek","Date.StartOfYear","Date.ToRecord","Date.ToText","Date.WeekOfMonth","Date.WeekOfYear","Date.Year","DateTime.AddZone","DateTime.Date","DateTime.FixedLocalNow","DateTime.From","DateTime.FromFileTime","DateTime.FromText","DateTime.IsInCurrentHour","DateTime.IsInCurrentMinute","DateTime.IsInCurrentSecond","DateTime.IsInNextHour","DateTime.IsInNextMinute","DateTime.IsInNextNHours","DateTime.IsInNextNMinutes","DateTime.IsInNextNSeconds","DateTime.IsInNextSecond","DateTime.IsInPreviousHour","DateTime.IsInPreviousMinute","DateTime.IsInPreviousNHours","DateTime.IsInPreviousNMinutes","DateTime.IsInPreviousNSeconds","DateTime.IsInPreviousSecond","DateTime.LocalNow","DateTime.Time","DateTime.ToRecord","DateTime.ToText","DateTimeZone.FixedLocalNow","DateTimeZone.FixedUtcNow","DateTimeZone.From","DateTimeZone.FromFileTime","DateTimeZone.FromText","DateTimeZone.LocalNow","DateTimeZone.RemoveZone","DateTimeZone.SwitchZone","DateTimeZone.ToLocal","DateTimeZone.ToRecord","DateTimeZone.ToText","DateTimeZone.ToUtc","DateTimeZone.UtcNow","DateTimeZone.ZoneHours","DateTimeZone.ZoneMinutes","Decimal.From","Diagnostics.ActivityId","Diagnostics.Trace","DirectQueryCapabilities.From","Double.From","Duration.Days","Duration.From","Duration.FromText","Duration.Hours","Duration.Minutes","Duration.Seconds","Duration.ToRecord","Duration.ToText","Duration.TotalDays","Duration.TotalHours","Duration.TotalMinutes","Duration.TotalSeconds","Embedded.Value","Error.Record","Excel.CurrentWorkbook","Excel.Workbook","Exchange.Contents","Expression.Constant","Expression.Evaluate","Expression.Identifier","Facebook.Graph","File.Contents","Folder.Contents","Folder.Files","Function.From","Function.Invoke","Function.InvokeAfter","Function.IsDataSource","GoogleAnalytics.Accounts","Guid.From","HdInsight.Containers","HdInsight.Contents","HdInsight.Files","Hdfs.Contents","Hdfs.Files","Informix.Database","Int16.From","Int32.From","Int64.From","Int8.From","ItemExpression.From","Json.Document","Json.FromValue","Lines.FromBinary","Lines.FromText","Lines.ToBinary","Lines.ToText","List.Accumulate","List.AllTrue","List.Alternate","List.AnyTrue","List.Average","List.Buffer","List.Combine","List.Contains","List.ContainsAll","List.ContainsAny","List.Count","List.Covariance","List.DateTimeZones","List.DateTimes","List.Dates","List.Difference","List.Distinct","List.Durations","List.FindText","List.First","List.FirstN","List.Generate","List.InsertRange","List.Intersect","List.IsDistinct","List.IsEmpty","List.Last","List.LastN","List.MatchesAll","List.MatchesAny","List.Max","List.MaxN","List.Median","List.Min","List.MinN","List.Mode","List.Modes","List.NonNullCount","List.Numbers","List.PositionOf","List.PositionOfAny","List.Positions","List.Product","List.Random","List.Range","List.RemoveFirstN","List.RemoveItems","List.RemoveLastN","List.RemoveMatchingItems","List.RemoveNulls","List.RemoveRange","List.Repeat","List.ReplaceMatchingItems","List.ReplaceRange","List.ReplaceValue","List.Reverse","List.Select","List.Single","List.SingleOrDefault","List.Skip","List.Sort","List.StandardDeviation","List.Sum","List.Times","List.Transform","List.TransformMany","List.Union","List.Zip","Logical.From","Logical.FromText","Logical.ToText","MQ.Queue","MySQL.Database","Number.Abs","Number.Acos","Number.Asin","Number.Atan","Number.Atan2","Number.BitwiseAnd","Number.BitwiseNot","Number.BitwiseOr","Number.BitwiseShiftLeft","Number.BitwiseShiftRight","Number.BitwiseXor","Number.Combinations","Number.Cos","Number.Cosh","Number.Exp","Number.Factorial","Number.From","Number.FromText","Number.IntegerDivide","Number.IsEven","Number.IsNaN","Number.IsOdd","Number.Ln","Number.Log","Number.Log10","Number.Mod","Number.Permutations","Number.Power","Number.Random","Number.RandomBetween","Number.Round","Number.RoundAwayFromZero","Number.RoundDown","Number.RoundTowardZero","Number.RoundUp","Number.Sign","Number.Sin","Number.Sinh","Number.Sqrt","Number.Tan","Number.Tanh","Number.ToText","OData.Feed","Odbc.DataSource","Odbc.Query","OleDb.DataSource","OleDb.Query","Oracle.Database","Percentage.From","PostgreSQL.Database","RData.FromBinary","Record.AddField","Record.Combine","Record.Field","Record.FieldCount","Record.FieldNames","Record.FieldOrDefault","Record.FieldValues","Record.FromList","Record.FromTable","Record.HasFields","Record.RemoveFields","Record.RenameFields","Record.ReorderFields","Record.SelectFields","Record.ToList","Record.ToTable","Record.TransformFields","Replacer.ReplaceText","Replacer.ReplaceValue","RowExpression.Column","RowExpression.From","Salesforce.Data","Salesforce.Reports","SapBusinessWarehouse.Cubes","SapHana.Database","SharePoint.Contents","SharePoint.Files","SharePoint.Tables","Single.From","Soda.Feed","Splitter.SplitByNothing","Splitter.SplitTextByAnyDelimiter","Splitter.SplitTextByDelimiter","Splitter.SplitTextByEachDelimiter","Splitter.SplitTextByLengths","Splitter.SplitTextByPositions","Splitter.SplitTextByRanges","Splitter.SplitTextByRepeatedLengths","Splitter.SplitTextByWhitespace","Sql.Database","Sql.Databases","SqlExpression.SchemaFrom","SqlExpression.ToExpression","Sybase.Database","Table.AddColumn","Table.AddIndexColumn","Table.AddJoinColumn","Table.AddKey","Table.AggregateTableColumn","Table.AlternateRows","Table.Buffer","Table.Column","Table.ColumnCount","Table.ColumnNames","Table.ColumnsOfType","Table.Combine","Table.CombineColumns","Table.Contains","Table.ContainsAll","Table.ContainsAny","Table.DemoteHeaders","Table.Distinct","Table.DuplicateColumn","Table.ExpandListColumn","Table.ExpandRecordColumn","Table.ExpandTableColumn","Table.FillDown","Table.FillUp","Table.FilterWithDataTable","Table.FindText","Table.First","Table.FirstN","Table.FirstValue","Table.FromColumns","Table.FromList","Table.FromPartitions","Table.FromRecords","Table.FromRows","Table.FromValue","Table.Group","Table.HasColumns","Table.InsertRows","Table.IsDistinct","Table.IsEmpty","Table.Join","Table.Keys","Table.Last","Table.LastN","Table.MatchesAllRows","Table.MatchesAnyRows","Table.Max","Table.MaxN","Table.Min","Table.MinN","Table.NestedJoin","Table.Partition","Table.PartitionValues","Table.Pivot","Table.PositionOf","Table.PositionOfAny","Table.PrefixColumns","Table.Profile","Table.PromoteHeaders","Table.Range","Table.RemoveColumns","Table.RemoveFirstN","Table.RemoveLastN","Table.RemoveMatchingRows","Table.RemoveRows","Table.RemoveRowsWithErrors","Table.RenameColumns","Table.ReorderColumns","Table.Repeat","Table.ReplaceErrorValues","Table.ReplaceKeys","Table.ReplaceMatchingRows","Table.ReplaceRelationshipIdentity","Table.ReplaceRows","Table.ReplaceValue","Table.ReverseRows","Table.RowCount","Table.Schema","Table.SelectColumns","Table.SelectRows","Table.SelectRowsWithErrors","Table.SingleRow","Table.Skip","Table.Sort","Table.SplitColumn","Table.ToColumns","Table.ToList","Table.ToRecords","Table.ToRows","Table.TransformColumnNames","Table.TransformColumnTypes","Table.TransformColumns","Table.TransformRows","Table.Transpose","Table.Unpivot","Table.UnpivotOtherColumns","Table.View","Table.ViewFunction","TableAction.DeleteRows","TableAction.InsertRows","TableAction.UpdateRows","Tables.GetRelationships","Teradata.Database","Text.AfterDelimiter","Text.At","Text.BeforeDelimiter","Text.BetweenDelimiters","Text.Clean","Text.Combine","Text.Contains","Text.End","Text.EndsWith","Text.Format","Text.From","Text.FromBinary","Text.Insert","Text.Length","Text.Lower","Text.Middle","Text.NewGuid","Text.PadEnd","Text.PadStart","Text.PositionOf","Text.PositionOfAny","Text.Proper","Text.Range","Text.Remove","Text.RemoveRange","Text.Repeat","Text.Replace","Text.ReplaceRange","Text.Select","Text.Split","Text.SplitAny","Text.Start","Text.StartsWith","Text.ToBinary","Text.ToList","Text.Trim","Text.TrimEnd","Text.TrimStart","Text.Upper","Time.EndOfHour","Time.From","Time.FromText","Time.Hour","Time.Minute","Time.Second","Time.StartOfHour","Time.ToRecord","Time.ToText","Type.AddTableKey","Type.ClosedRecord","Type.Facets","Type.ForFunction","Type.ForRecord","Type.FunctionParameters","Type.FunctionRequiredParameters","Type.FunctionReturn","Type.Is","Type.IsNullable","Type.IsOpenRecord","Type.ListItem","Type.NonNullable","Type.OpenRecord","Type.RecordFields","Type.ReplaceFacets","Type.ReplaceTableKeys","Type.TableColumn","Type.TableKeys","Type.TableRow","Type.TableSchema","Type.Union","Uri.BuildQueryString","Uri.Combine","Uri.EscapeDataString","Uri.Parts","Value.Add","Value.As","Value.Compare","Value.Divide","Value.Equals","Value.Firewall","Value.FromText","Value.Is","Value.Metadata","Value.Multiply","Value.NativeQuery","Value.NullableEquals","Value.RemoveMetadata","Value.ReplaceMetadata","Value.ReplaceType","Value.Subtract","Value.Type","ValueAction.NativeStatement","ValueAction.Replace","Variable.Value","Web.Contents","Web.Page","WebAction.Request","Xml.Document","Xml.Tables"],builtinConstants:["BinaryEncoding.Base64","BinaryEncoding.Hex","BinaryOccurrence.Optional","BinaryOccurrence.Repeating","BinaryOccurrence.Required","ByteOrder.BigEndian","ByteOrder.LittleEndian","Compression.Deflate","Compression.GZip","CsvStyle.QuoteAfterDelimiter","CsvStyle.QuoteAlways","Culture.Current","Day.Friday","Day.Monday","Day.Saturday","Day.Sunday","Day.Thursday","Day.Tuesday","Day.Wednesday","ExtraValues.Error","ExtraValues.Ignore","ExtraValues.List","GroupKind.Global","GroupKind.Local","JoinAlgorithm.Dynamic","JoinAlgorithm.LeftHash","JoinAlgorithm.LeftIndex","JoinAlgorithm.PairwiseHash","JoinAlgorithm.RightHash","JoinAlgorithm.RightIndex","JoinAlgorithm.SortMerge","JoinKind.FullOuter","JoinKind.Inner","JoinKind.LeftAnti","JoinKind.LeftOuter","JoinKind.RightAnti","JoinKind.RightOuter","JoinSide.Left","JoinSide.Right","MissingField.Error","MissingField.Ignore","MissingField.UseNull","Number.E","Number.Epsilon","Number.NaN","Number.NegativeInfinity","Number.PI","Number.PositiveInfinity","Occurrence.All","Occurrence.First","Occurrence.Last","Occurrence.Optional","Occurrence.Repeating","Occurrence.Required","Order.Ascending","Order.Descending","Precision.Decimal","Precision.Double","QuoteStyle.Csv","QuoteStyle.None","RelativePosition.FromEnd","RelativePosition.FromStart","RoundingMode.AwayFromZero","RoundingMode.Down","RoundingMode.ToEven","RoundingMode.TowardZero","RoundingMode.Up","SapHanaDistribution.All","SapHanaDistribution.Connection","SapHanaDistribution.Off","SapHanaDistribution.Statement","SapHanaRangeOperator.Equals","SapHanaRangeOperator.GreaterThan","SapHanaRangeOperator.GreaterThanOrEquals","SapHanaRangeOperator.LessThan","SapHanaRangeOperator.LessThanOrEquals","SapHanaRangeOperator.NotEquals","TextEncoding.Ascii","TextEncoding.BigEndianUnicode","TextEncoding.Unicode","TextEncoding.Utf16","TextEncoding.Utf8","TextEncoding.Windows","TraceLevel.Critical","TraceLevel.Error","TraceLevel.Information","TraceLevel.Verbose","TraceLevel.Warning","WebMethod.Delete","WebMethod.Get","WebMethod.Head","WebMethod.Patch","WebMethod.Post","WebMethod.Put"],builtinTypes:["Action.Type","Any.Type","Binary.Type","BinaryEncoding.Type","BinaryOccurrence.Type","Byte.Type","ByteOrder.Type","Character.Type","Compression.Type","CsvStyle.Type","Currency.Type","Date.Type","DateTime.Type","DateTimeZone.Type","Day.Type","Decimal.Type","Double.Type","Duration.Type","ExtraValues.Type","Function.Type","GroupKind.Type","Guid.Type","Int16.Type","Int32.Type","Int64.Type","Int8.Type","JoinAlgorithm.Type","JoinKind.Type","JoinSide.Type","List.Type","Logical.Type","MissingField.Type","None.Type","Null.Type","Number.Type","Occurrence.Type","Order.Type","Password.Type","Percentage.Type","Precision.Type","QuoteStyle.Type","Record.Type","RelativePosition.Type","RoundingMode.Type","SapHanaDistribution.Type","SapHanaRangeOperator.Type","Single.Type","Table.Type","Text.Type","TextEncoding.Type","Time.Type","TraceLevel.Type","Type.Type","Uri.Type","WebMethod.Type"],tokenizer:{root:[[/#"[\w \.]+"/,"identifier.quote"],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float"],[/0[xX][0-9a-fA-F]+/,"number.hex"],[/\d+([eE][\-+]?\d+)?/,"number"],[/(#?[a-z]+)\b/,{cases:{"@typeKeywords":"type","@keywords":"keyword","@constants":"constant","@constructors":"constructor","@operatorKeywords":"operators","@default":"identifier"}}],[/\b([A-Z][a-zA-Z0-9]+\.Type)\b/,{cases:{"@builtinTypes":"type","@default":"identifier"}}],[/\b([A-Z][a-zA-Z0-9]+\.[A-Z][a-zA-Z0-9]+)\b/,{cases:{"@builtinFunctions":"keyword.function","@builtinConstants":"constant","@default":"identifier"}}],[/\b([a-zA-Z_][\w\.]*)\b/,"identifier"],{include:"@whitespace"},{include:"@comments"},{include:"@strings"},[/[{}()\[\]]/,"@brackets"],[/([=\+<>\-\*&@\?\/!])|([<>]=)|(<>)|(=>)|(\.\.\.)|(\.\.)/,"operators"],[/[,;]/,"delimiter"]],whitespace:[[/\s+/,"white"]],comments:[["\\/\\*","comment","@comment"],["\\/\\/+.*","comment"]],comment:[["\\*\\/","comment","@pop"],[".","comment"]],strings:[['"',"string","@string"]],string:[['""',"string.escape"],['"',"string","@pop"],[".","string"]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/powershell/powershell.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/powershell/powershell.js new file mode 100644 index 0000000000..7505fc9005 --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/powershell/powershell.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/powershell/powershell",["require","exports"],(function(e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.language=n.conf=void 0,n.conf={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\#%\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"#",blockComment:["<#","#>"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"',notIn:["string"]},{open:"'",close:"'",notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*#region\\b"),end:new RegExp("^\\s*#endregion\\b")}}},n.language={defaultToken:"",ignoreCase:!0,tokenPostfix:".ps1",brackets:[{token:"delimiter.curly",open:"{",close:"}"},{token:"delimiter.square",open:"[",close:"]"},{token:"delimiter.parenthesis",open:"(",close:")"}],keywords:["begin","break","catch","class","continue","data","define","do","dynamicparam","else","elseif","end","exit","filter","finally","for","foreach","from","function","if","in","param","process","return","switch","throw","trap","try","until","using","var","while","workflow","parallel","sequence","inlinescript","configuration"],helpKeywords:/SYNOPSIS|DESCRIPTION|PARAMETER|EXAMPLE|INPUTS|OUTPUTS|NOTES|LINK|COMPONENT|ROLE|FUNCTIONALITY|FORWARDHELPTARGETNAME|FORWARDHELPCATEGORY|REMOTEHELPRUNSPACE|EXTERNALHELP/,symbols:/[=>/,"comment","@pop"],[/(\.)(@helpKeywords)(?!\w)/,{token:"comment.keyword.$2"}],[/[\.#]/,"comment"]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/pug/pug.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/pug/pug.js new file mode 100644 index 0000000000..8212279294 --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/pug/pug.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/pug/pug",["require","exports"],(function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.language=t.conf=void 0,t.conf={comments:{lineComment:"//"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:'"',close:'"',notIn:["string","comment"]},{open:"'",close:"'",notIn:["string","comment"]},{open:"{",close:"}",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]}],folding:{offSide:!0}},t.language={defaultToken:"",tokenPostfix:".pug",ignoreCase:!0,brackets:[{token:"delimiter.curly",open:"{",close:"}"},{token:"delimiter.array",open:"[",close:"]"},{token:"delimiter.parenthesis",open:"(",close:")"}],keywords:["append","block","case","default","doctype","each","else","extends","for","if","in","include","mixin","typeof","unless","var","when"],tags:["a","abbr","acronym","address","area","article","aside","audio","b","base","basefont","bdi","bdo","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","command","datalist","dd","del","details","dfn","div","dl","dt","em","embed","fieldset","figcaption","figure","font","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","keygen","kbd","label","li","link","map","mark","menu","meta","meter","nav","noframes","noscript","object","ol","optgroup","option","output","p","param","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strike","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","tracks","tt","u","ul","video","wbr"],symbols:/[\+\-\*\%\&\|\!\=\/\.\,\:]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/^(\s*)([a-zA-Z_-][\w-]*)/,{cases:{"$2@tags":{cases:{"@eos":["","tag"],"@default":["",{token:"tag",next:"@tag.$1"}]}},"$2@keywords":["",{token:"keyword.$2"}],"@default":["",""]}}],[/^(\s*)(#[a-zA-Z_-][\w-]*)/,{cases:{"@eos":["","tag.id"],"@default":["",{token:"tag.id",next:"@tag.$1"}]}}],[/^(\s*)(\.[a-zA-Z_-][\w-]*)/,{cases:{"@eos":["","tag.class"],"@default":["",{token:"tag.class",next:"@tag.$1"}]}}],[/^(\s*)(\|.*)$/,""],{include:"@whitespace"},[/[a-zA-Z_$][\w$]*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":""}}],[/[{}()\[\]]/,"@brackets"],[/@symbols/,"delimiter"],[/\d+\.\d+([eE][\-+]?\d+)?/,"number.float"],[/\d+/,"number"],[/"/,"string",'@string."'],[/'/,"string","@string.'"]],tag:[[/(\.)(\s*$)/,[{token:"delimiter",next:"@blockText.$S2."},""]],[/\s+/,{token:"",next:"@simpleText"}],[/#[a-zA-Z_-][\w-]*/,{cases:{"@eos":{token:"tag.id",next:"@pop"},"@default":"tag.id"}}],[/\.[a-zA-Z_-][\w-]*/,{cases:{"@eos":{token:"tag.class",next:"@pop"},"@default":"tag.class"}}],[/\(/,{token:"delimiter.parenthesis",next:"@attributeList"}]],simpleText:[[/[^#]+$/,{token:"",next:"@popall"}],[/[^#]+/,{token:""}],[/(#{)([^}]*)(})/,{cases:{"@eos":["interpolation.delimiter","interpolation",{token:"interpolation.delimiter",next:"@popall"}],"@default":["interpolation.delimiter","interpolation","interpolation.delimiter"]}}],[/#$/,{token:"",next:"@popall"}],[/#/,""]],attributeList:[[/\s+/,""],[/(\w+)(\s*=\s*)("|')/,["attribute.name","delimiter",{token:"attribute.value",next:"@value.$3"}]],[/\w+/,"attribute.name"],[/,/,{cases:{"@eos":{token:"attribute.delimiter",next:"@popall"},"@default":"attribute.delimiter"}}],[/\)$/,{token:"delimiter.parenthesis",next:"@popall"}],[/\)/,{token:"delimiter.parenthesis",next:"@pop"}]],whitespace:[[/^(\s*)(\/\/.*)$/,{token:"comment",next:"@blockText.$1.comment"}],[/[ \t\r\n]+/,""],[//,{token:"comment",next:"@pop"}],[//,"comment.html","@pop"],[/[^-]+/,"comment.content.html"],[/./,"comment.content.html"]],otherTag:[[/@[^@]/,{token:"@rematch",switchTo:"@razorInSimpleState.otherTag"}],[/\/?>/,"delimiter.html","@pop"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/]],script:[[/@[^@]/,{token:"@rematch",switchTo:"@razorInSimpleState.script"}],[/type/,"attribute.name","@scriptAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,["delimiter.html","tag.html",{token:"delimiter.html",next:"@pop"}]]],scriptAfterType:[[/@[^@]/,{token:"@rematch",switchTo:"@razorInSimpleState.scriptAfterType"}],[/=/,"delimiter","@scriptAfterTypeEquals"],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptAfterTypeEquals:[[/@[^@]/,{token:"@rematch",switchTo:"@razorInSimpleState.scriptAfterTypeEquals"}],[/"([^"]*)"/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptWithCustomType:[[/@[^@]/,{token:"@rematch",switchTo:"@razorInSimpleState.scriptWithCustomType.$S2"}],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptEmbedded:[[/@[^@]/,{token:"@rematch",switchTo:"@razorInEmbeddedState.scriptEmbedded.$S2",nextEmbedded:"@pop"}],[/<\/script/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}]],style:[[/@[^@]/,{token:"@rematch",switchTo:"@razorInSimpleState.style"}],[/type/,"attribute.name","@styleAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,["delimiter.html","tag.html",{token:"delimiter.html",next:"@pop"}]]],styleAfterType:[[/@[^@]/,{token:"@rematch",switchTo:"@razorInSimpleState.styleAfterType"}],[/=/,"delimiter","@styleAfterTypeEquals"],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleAfterTypeEquals:[[/@[^@]/,{token:"@rematch",switchTo:"@razorInSimpleState.styleAfterTypeEquals"}],[/"([^"]*)"/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleWithCustomType:[[/@[^@]/,{token:"@rematch",switchTo:"@razorInSimpleState.styleWithCustomType.$S2"}],[/>/,{token:"delimiter.html",next:"@styleEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleEmbedded:[[/@[^@]/,{token:"@rematch",switchTo:"@razorInEmbeddedState.styleEmbedded.$S2",nextEmbedded:"@pop"}],[/<\/style/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}]],razorInSimpleState:[[/@\*/,"comment.cs","@razorBlockCommentTopLevel"],[/@[{(]/,"metatag.cs","@razorRootTopLevel"],[/(@)(\s*[\w]+)/,["metatag.cs",{token:"identifier.cs",switchTo:"@$S2.$S3"}]],[/[})]/,{token:"metatag.cs",switchTo:"@$S2.$S3"}],[/\*@/,{token:"comment.cs",switchTo:"@$S2.$S3"}]],razorInEmbeddedState:[[/@\*/,"comment.cs","@razorBlockCommentTopLevel"],[/@[{(]/,"metatag.cs","@razorRootTopLevel"],[/(@)(\s*[\w]+)/,["metatag.cs",{token:"identifier.cs",switchTo:"@$S2.$S3",nextEmbedded:"$S3"}]],[/[})]/,{token:"metatag.cs",switchTo:"@$S2.$S3",nextEmbedded:"$S3"}],[/\*@/,{token:"comment.cs",switchTo:"@$S2.$S3",nextEmbedded:"$S3"}]],razorBlockCommentTopLevel:[[/\*@/,"@rematch","@pop"],[/[^*]+/,"comment.cs"],[/./,"comment.cs"]],razorBlockComment:[[/\*@/,"comment.cs","@pop"],[/[^*]+/,"comment.cs"],[/./,"comment.cs"]],razorRootTopLevel:[[/\{/,"delimiter.bracket.cs","@razorRoot"],[/\(/,"delimiter.parenthesis.cs","@razorRoot"],[/[})]/,"@rematch","@pop"],{include:"razorCommon"}],razorRoot:[[/\{/,"delimiter.bracket.cs","@razorRoot"],[/\(/,"delimiter.parenthesis.cs","@razorRoot"],[/\}/,"delimiter.bracket.cs","@pop"],[/\)/,"delimiter.parenthesis.cs","@pop"],{include:"razorCommon"}],razorCommon:[[/[a-zA-Z_]\w*/,{cases:{"@razorKeywords":{token:"keyword.cs"},"@default":"identifier.cs"}}],[/[\[\]]/,"delimiter.array.cs"],[/[ \t\r\n]+/],[/\/\/.*$/,"comment.cs"],[/@\*/,"comment.cs","@razorBlockComment"],[/"([^"]*)"/,"string.cs"],[/'([^']*)'/,"string.cs"],[/(<)(\w+)(\/>)/,["delimiter.html","tag.html","delimiter.html"]],[/(<)(\w+)(>)/,["delimiter.html","tag.html","delimiter.html"]],[/(<\/)(\w+)(>)/,["delimiter.html","tag.html","delimiter.html"]],[/[\+\-\*\%\&\|\^\~\!\=\<\>\/\?\;\:\.\,]/,"delimiter.cs"],[/\d*\d+[eE]([\-+]?\d+)?/,"number.float.cs"],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float.cs"],[/0[xX][0-9a-fA-F']*[0-9a-fA-F]/,"number.hex.cs"],[/0[0-7']*[0-7]/,"number.octal.cs"],[/0[bB][0-1']*[0-1]/,"number.binary.cs"],[/\d[\d']*/,"number.cs"],[/\d/,"number.cs"]]},razorKeywords:["abstract","as","async","await","base","bool","break","by","byte","case","catch","char","checked","class","const","continue","decimal","default","delegate","do","double","descending","explicit","event","extern","else","enum","false","finally","fixed","float","for","foreach","from","goto","group","if","implicit","in","int","interface","internal","into","is","lock","long","nameof","new","null","namespace","object","operator","out","override","orderby","params","private","protected","public","readonly","ref","return","switch","struct","sbyte","sealed","short","sizeof","stackalloc","static","string","select","this","throw","true","try","typeof","uint","ulong","unchecked","unsafe","ushort","using","var","virtual","volatile","void","when","while","where","yield","model","inject"],escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/redis/redis.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/redis/redis.js new file mode 100644 index 0000000000..64b62ae93b --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/redis/redis.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/redis/redis",["require","exports"],(function(E,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.language=e.conf=void 0,e.conf={brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},e.language={defaultToken:"",tokenPostfix:".redis",ignoreCase:!0,brackets:[{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"}],keywords:["APPEND","AUTH","BGREWRITEAOF","BGSAVE","BITCOUNT","BITFIELD","BITOP","BITPOS","BLPOP","BRPOP","BRPOPLPUSH","CLIENT","KILL","LIST","GETNAME","PAUSE","REPLY","SETNAME","CLUSTER","ADDSLOTS","COUNT-FAILURE-REPORTS","COUNTKEYSINSLOT","DELSLOTS","FAILOVER","FORGET","GETKEYSINSLOT","INFO","KEYSLOT","MEET","NODES","REPLICATE","RESET","SAVECONFIG","SET-CONFIG-EPOCH","SETSLOT","SLAVES","SLOTS","COMMAND","COUNT","GETKEYS","CONFIG","GET","REWRITE","SET","RESETSTAT","DBSIZE","DEBUG","OBJECT","SEGFAULT","DECR","DECRBY","DEL","DISCARD","DUMP","ECHO","EVAL","EVALSHA","EXEC","EXISTS","EXPIRE","EXPIREAT","FLUSHALL","FLUSHDB","GEOADD","GEOHASH","GEOPOS","GEODIST","GEORADIUS","GEORADIUSBYMEMBER","GETBIT","GETRANGE","GETSET","HDEL","HEXISTS","HGET","HGETALL","HINCRBY","HINCRBYFLOAT","HKEYS","HLEN","HMGET","HMSET","HSET","HSETNX","HSTRLEN","HVALS","INCR","INCRBY","INCRBYFLOAT","KEYS","LASTSAVE","LINDEX","LINSERT","LLEN","LPOP","LPUSH","LPUSHX","LRANGE","LREM","LSET","LTRIM","MGET","MIGRATE","MONITOR","MOVE","MSET","MSETNX","MULTI","PERSIST","PEXPIRE","PEXPIREAT","PFADD","PFCOUNT","PFMERGE","PING","PSETEX","PSUBSCRIBE","PUBSUB","PTTL","PUBLISH","PUNSUBSCRIBE","QUIT","RANDOMKEY","READONLY","READWRITE","RENAME","RENAMENX","RESTORE","ROLE","RPOP","RPOPLPUSH","RPUSH","RPUSHX","SADD","SAVE","SCARD","SCRIPT","FLUSH","LOAD","SDIFF","SDIFFSTORE","SELECT","SETBIT","SETEX","SETNX","SETRANGE","SHUTDOWN","SINTER","SINTERSTORE","SISMEMBER","SLAVEOF","SLOWLOG","SMEMBERS","SMOVE","SORT","SPOP","SRANDMEMBER","SREM","STRLEN","SUBSCRIBE","SUNION","SUNIONSTORE","SWAPDB","SYNC","TIME","TOUCH","TTL","TYPE","UNSUBSCRIBE","UNLINK","UNWATCH","WAIT","WATCH","ZADD","ZCARD","ZCOUNT","ZINCRBY","ZINTERSTORE","ZLEXCOUNT","ZRANGE","ZRANGEBYLEX","ZREVRANGEBYLEX","ZRANGEBYSCORE","ZRANK","ZREM","ZREMRANGEBYLEX","ZREMRANGEBYRANK","ZREMRANGEBYSCORE","ZREVRANGE","ZREVRANGEBYSCORE","ZREVRANK","ZSCORE","ZUNIONSTORE","SCAN","SSCAN","HSCAN","ZSCAN"],operators:[],builtinFunctions:[],builtinVariables:[],pseudoColumns:[],tokenizer:{root:[{include:"@whitespace"},{include:"@pseudoColumns"},{include:"@numbers"},{include:"@strings"},{include:"@scopes"},[/[;,.]/,"delimiter"],[/[()]/,"@brackets"],[/[\w@#$]+/,{cases:{"@keywords":"keyword","@operators":"operator","@builtinVariables":"predefined","@builtinFunctions":"predefined","@default":"identifier"}}],[/[<>=!%&+\-*/|~^]/,"operator"]],whitespace:[[/\s+/,"white"]],pseudoColumns:[[/[$][A-Za-z_][\w@#$]*/,{cases:{"@pseudoColumns":"predefined","@default":"identifier"}}]],numbers:[[/0[xX][0-9a-fA-F]*/,"number"],[/[$][+-]*\d*(\.\d*)?/,"number"],[/((\d+(\.\d*)?)|(\.\d+))([eE][\-+]?\d+)?/,"number"]],strings:[[/'/,{token:"string",next:"@string"}],[/"/,{token:"string.double",next:"@stringDouble"}]],string:[[/[^']+/,"string"],[/''/,"string"],[/'/,{token:"string",next:"@pop"}]],stringDouble:[[/[^"]+/,"string.double"],[/""/,"string.double"],[/"/,{token:"string.double",next:"@pop"}]],scopes:[]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/redshift/redshift.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/redshift/redshift.js new file mode 100644 index 0000000000..a9829cc2d8 --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/redshift/redshift.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/redshift/redshift",["require","exports"],(function(e,_){"use strict";Object.defineProperty(_,"__esModule",{value:!0}),_.language=_.conf=void 0,_.conf={comments:{lineComment:"--",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},_.language={defaultToken:"",tokenPostfix:".sql",ignoreCase:!0,brackets:[{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"}],keywords:["AES128","AES256","ALL","ALLOWOVERWRITE","ANALYSE","ANALYZE","AND","ANY","ARRAY","AS","ASC","AUTHORIZATION","BACKUP","BETWEEN","BINARY","BLANKSASNULL","BOTH","BY","BYTEDICT","BZIP2","CASE","CAST","CHECK","COLLATE","COLUMN","CONSTRAINT","CREATE","CREDENTIALS","CROSS","CURRENT_DATE","CURRENT_TIME","CURRENT_TIMESTAMP","CURRENT_USER","CURRENT_USER_ID","DEFAULT","DEFERRABLE","DEFLATE","DEFRAG","DELTA","DELTA32K","DESC","DISABLE","DISTINCT","DO","ELSE","EMPTYASNULL","ENABLE","ENCODE","ENCRYPT","ENCRYPTION","END","EXCEPT","EXPLICIT","FALSE","FOR","FOREIGN","FREEZE","FROM","FULL","GLOBALDICT256","GLOBALDICT64K","GRANT","GROUP","GZIP","HAVING","IDENTITY","IGNORE","ILIKE","IN","INITIALLY","INNER","INTERSECT","INTO","IS","ISNULL","JOIN","LEADING","LEFT","LIKE","LIMIT","LOCALTIME","LOCALTIMESTAMP","LUN","LUNS","LZO","LZOP","MINUS","MOSTLY13","MOSTLY32","MOSTLY8","NATURAL","NEW","NOT","NOTNULL","NULL","NULLS","OFF","OFFLINE","OFFSET","OID","OLD","ON","ONLY","OPEN","OR","ORDER","OUTER","OVERLAPS","PARALLEL","PARTITION","PERCENT","PERMISSIONS","PLACING","PRIMARY","RAW","READRATIO","RECOVER","REFERENCES","RESPECT","REJECTLOG","RESORT","RESTORE","RIGHT","SELECT","SESSION_USER","SIMILAR","SNAPSHOT","SOME","SYSDATE","SYSTEM","TABLE","TAG","TDES","TEXT255","TEXT32K","THEN","TIMESTAMP","TO","TOP","TRAILING","TRUE","TRUNCATECOLUMNS","UNION","UNIQUE","USER","USING","VERBOSE","WALLET","WHEN","WHERE","WITH","WITHOUT"],operators:["AND","BETWEEN","IN","LIKE","NOT","OR","IS","NULL","INTERSECT","UNION","INNER","JOIN","LEFT","OUTER","RIGHT"],builtinFunctions:["current_schema","current_schemas","has_database_privilege","has_schema_privilege","has_table_privilege","age","current_time","current_timestamp","localtime","isfinite","now","ascii","get_bit","get_byte","set_bit","set_byte","to_ascii","approximate percentile_disc","avg","count","listagg","max","median","min","percentile_cont","stddev_samp","stddev_pop","sum","var_samp","var_pop","bit_and","bit_or","bool_and","bool_or","cume_dist","first_value","lag","last_value","lead","nth_value","ratio_to_report","dense_rank","ntile","percent_rank","rank","row_number","case","coalesce","decode","greatest","least","nvl","nvl2","nullif","add_months","at time zone","convert_timezone","current_date","date_cmp","date_cmp_timestamp","date_cmp_timestamptz","date_part_year","dateadd","datediff","date_part","date_trunc","extract","getdate","interval_cmp","last_day","months_between","next_day","sysdate","timeofday","timestamp_cmp","timestamp_cmp_date","timestamp_cmp_timestamptz","timestamptz_cmp","timestamptz_cmp_date","timestamptz_cmp_timestamp","timezone","to_timestamp","trunc","abs","acos","asin","atan","atan2","cbrt","ceil","ceiling","checksum","cos","cot","degrees","dexp","dlog1","dlog10","exp","floor","ln","log","mod","pi","power","radians","random","round","sin","sign","sqrt","tan","to_hex","bpcharcmp","btrim","bttext_pattern_cmp","char_length","character_length","charindex","chr","concat","crc32","func_sha1","initcap","left and rights","len","length","lower","lpad and rpads","ltrim","md5","octet_length","position","quote_ident","quote_literal","regexp_count","regexp_instr","regexp_replace","regexp_substr","repeat","replace","replicate","reverse","rtrim","split_part","strpos","strtol","substring","textlen","translate","trim","upper","cast","convert","to_char","to_date","to_number","json_array_length","json_extract_array_element_text","json_extract_path_text","current_setting","pg_cancel_backend","pg_terminate_backend","set_config","current_database","current_user","current_user_id","pg_backend_pid","pg_last_copy_count","pg_last_copy_id","pg_last_query_id","pg_last_unload_count","session_user","slice_num","user","version","abbrev","acosd","any","area","array_agg","array_append","array_cat","array_dims","array_fill","array_length","array_lower","array_ndims","array_position","array_positions","array_prepend","array_remove","array_replace","array_to_json","array_to_string","array_to_tsvector","array_upper","asind","atan2d","atand","bit","bit_length","bound_box","box","brin_summarize_new_values","broadcast","cardinality","center","circle","clock_timestamp","col_description","concat_ws","convert_from","convert_to","corr","cosd","cotd","covar_pop","covar_samp","current_catalog","current_query","current_role","currval","cursor_to_xml","diameter","div","encode","enum_first","enum_last","enum_range","every","family","format","format_type","generate_series","generate_subscripts","get_current_ts_config","gin_clean_pending_list","grouping","has_any_column_privilege","has_column_privilege","has_foreign_data_wrapper_privilege","has_function_privilege","has_language_privilege","has_sequence_privilege","has_server_privilege","has_tablespace_privilege","has_type_privilege","height","host","hostmask","inet_client_addr","inet_client_port","inet_merge","inet_same_family","inet_server_addr","inet_server_port","isclosed","isempty","isopen","json_agg","json_object","json_object_agg","json_populate_record","json_populate_recordset","json_to_record","json_to_recordset","jsonb_agg","jsonb_object_agg","justify_days","justify_hours","justify_interval","lastval","left","line","localtimestamp","lower_inc","lower_inf","lpad","lseg","make_date","make_interval","make_time","make_timestamp","make_timestamptz","masklen","mode","netmask","network","nextval","npoints","num_nonnulls","num_nulls","numnode","obj_description","overlay","parse_ident","path","pclose","percentile_disc","pg_advisory_lock","pg_advisory_lock_shared","pg_advisory_unlock","pg_advisory_unlock_all","pg_advisory_unlock_shared","pg_advisory_xact_lock","pg_advisory_xact_lock_shared","pg_backup_start_time","pg_blocking_pids","pg_client_encoding","pg_collation_is_visible","pg_column_size","pg_conf_load_time","pg_control_checkpoint","pg_control_init","pg_control_recovery","pg_control_system","pg_conversion_is_visible","pg_create_logical_replication_slot","pg_create_physical_replication_slot","pg_create_restore_point","pg_current_xlog_flush_location","pg_current_xlog_insert_location","pg_current_xlog_location","pg_database_size","pg_describe_object","pg_drop_replication_slot","pg_export_snapshot","pg_filenode_relation","pg_function_is_visible","pg_get_constraintdef","pg_get_expr","pg_get_function_arguments","pg_get_function_identity_arguments","pg_get_function_result","pg_get_functiondef","pg_get_indexdef","pg_get_keywords","pg_get_object_address","pg_get_owned_sequence","pg_get_ruledef","pg_get_serial_sequence","pg_get_triggerdef","pg_get_userbyid","pg_get_viewdef","pg_has_role","pg_identify_object","pg_identify_object_as_address","pg_index_column_has_property","pg_index_has_property","pg_indexam_has_property","pg_indexes_size","pg_is_in_backup","pg_is_in_recovery","pg_is_other_temp_schema","pg_is_xlog_replay_paused","pg_last_committed_xact","pg_last_xact_replay_timestamp","pg_last_xlog_receive_location","pg_last_xlog_replay_location","pg_listening_channels","pg_logical_emit_message","pg_logical_slot_get_binary_changes","pg_logical_slot_get_changes","pg_logical_slot_peek_binary_changes","pg_logical_slot_peek_changes","pg_ls_dir","pg_my_temp_schema","pg_notification_queue_usage","pg_opclass_is_visible","pg_operator_is_visible","pg_opfamily_is_visible","pg_options_to_table","pg_postmaster_start_time","pg_read_binary_file","pg_read_file","pg_relation_filenode","pg_relation_filepath","pg_relation_size","pg_reload_conf","pg_replication_origin_create","pg_replication_origin_drop","pg_replication_origin_oid","pg_replication_origin_progress","pg_replication_origin_session_is_setup","pg_replication_origin_session_progress","pg_replication_origin_session_reset","pg_replication_origin_session_setup","pg_replication_origin_xact_reset","pg_replication_origin_xact_setup","pg_rotate_logfile","pg_size_bytes","pg_size_pretty","pg_sleep","pg_sleep_for","pg_sleep_until","pg_start_backup","pg_stat_file","pg_stop_backup","pg_switch_xlog","pg_table_is_visible","pg_table_size","pg_tablespace_databases","pg_tablespace_location","pg_tablespace_size","pg_total_relation_size","pg_trigger_depth","pg_try_advisory_lock","pg_try_advisory_lock_shared","pg_try_advisory_xact_lock","pg_try_advisory_xact_lock_shared","pg_ts_config_is_visible","pg_ts_dict_is_visible","pg_ts_parser_is_visible","pg_ts_template_is_visible","pg_type_is_visible","pg_typeof","pg_xact_commit_timestamp","pg_xlog_location_diff","pg_xlog_replay_pause","pg_xlog_replay_resume","pg_xlogfile_name","pg_xlogfile_name_offset","phraseto_tsquery","plainto_tsquery","point","polygon","popen","pqserverversion","query_to_xml","querytree","quote_nullable","radius","range_merge","regexp_matches","regexp_split_to_array","regexp_split_to_table","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","right","row_security_active","row_to_json","rpad","scale","set_masklen","setseed","setval","setweight","shobj_description","sind","sprintf","statement_timestamp","stddev","string_agg","string_to_array","strip","substr","table_to_xml","table_to_xml_and_xmlschema","tand","text","to_json","to_regclass","to_regnamespace","to_regoper","to_regoperator","to_regproc","to_regprocedure","to_regrole","to_regtype","to_tsquery","to_tsvector","transaction_timestamp","ts_debug","ts_delete","ts_filter","ts_headline","ts_lexize","ts_parse","ts_rank","ts_rank_cd","ts_rewrite","ts_stat","ts_token_type","tsquery_phrase","tsvector_to_array","tsvector_update_trigger","tsvector_update_trigger_column","txid_current","txid_current_snapshot","txid_snapshot_xip","txid_snapshot_xmax","txid_snapshot_xmin","txid_visible_in_snapshot","unnest","upper_inc","upper_inf","variance","width","width_bucket","xml_is_well_formed","xml_is_well_formed_content","xml_is_well_formed_document","xmlagg","xmlcomment","xmlconcat","xmlelement","xmlexists","xmlforest","xmlparse","xmlpi","xmlroot","xmlserialize","xpath","xpath_exists"],builtinVariables:[],pseudoColumns:[],tokenizer:{root:[{include:"@comments"},{include:"@whitespace"},{include:"@pseudoColumns"},{include:"@numbers"},{include:"@strings"},{include:"@complexIdentifiers"},{include:"@scopes"},[/[;,.]/,"delimiter"],[/[()]/,"@brackets"],[/[\w@#$]+/,{cases:{"@keywords":"keyword","@operators":"operator","@builtinVariables":"predefined","@builtinFunctions":"predefined","@default":"identifier"}}],[/[<>=!%&+\-*/|~^]/,"operator"]],whitespace:[[/\s+/,"white"]],comments:[[/--+.*/,"comment"],[/\/\*/,{token:"comment.quote",next:"@comment"}]],comment:[[/[^*/]+/,"comment"],[/\*\//,{token:"comment.quote",next:"@pop"}],[/./,"comment"]],pseudoColumns:[[/[$][A-Za-z_][\w@#$]*/,{cases:{"@pseudoColumns":"predefined","@default":"identifier"}}]],numbers:[[/0[xX][0-9a-fA-F]*/,"number"],[/[$][+-]*\d*(\.\d*)?/,"number"],[/((\d+(\.\d*)?)|(\.\d+))([eE][\-+]?\d+)?/,"number"]],strings:[[/'/,{token:"string",next:"@string"}]],string:[[/[^']+/,"string"],[/''/,"string"],[/'/,{token:"string",next:"@pop"}]],complexIdentifiers:[[/"/,{token:"identifier.quote",next:"@quotedIdentifier"}]],quotedIdentifier:[[/[^"]+/,"identifier"],[/""/,"identifier"],[/"/,{token:"identifier.quote",next:"@pop"}]],scopes:[]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/restructuredtext/restructuredtext.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/restructuredtext/restructuredtext.js new file mode 100644 index 0000000000..694d9a232c --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/restructuredtext/restructuredtext.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/restructuredtext/restructuredtext",["require","exports"],(function(e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.language=n.conf=void 0,n.conf={brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">",notIn:["string"]}],surroundingPairs:[{open:"(",close:")"},{open:"[",close:"]"},{open:"`",close:"`"}],folding:{markers:{start:new RegExp("^\\s*\x3c!--\\s*#?region\\b.*--\x3e"),end:new RegExp("^\\s*\x3c!--\\s*#?endregion\\b.*--\x3e")}}},n.language={defaultToken:"",tokenPostfix:".rst",control:/[\\`*_\[\]{}()#+\-\.!]/,escapes:/\\(?:@control)/,empty:["area","base","basefont","br","col","frame","hr","img","input","isindex","link","meta","param"],alphanumerics:/[A-Za-z0-9]/,alphanumericsplus:/[A-Za-z0-9-_+:.]/,simpleRefNameWithoutBq:/(?:@alphanumerics@alphanumericsplus*@alphanumerics)+|(?:@alphanumerics+)/,simpleRefName:/(?:`@simpleRefNameWithoutBq`|@simpleRefNameWithoutBq)/,phrase:/@simpleRefName(?:\s@simpleRefName)*/,citationName:/[A-Za-z][A-Za-z0-9-_.]*/,blockLiteralStart:/(?:[!"#$%&'()*+,-./:;<=>?@\[\]^_`{|}~]|[\s])/,precedingChars:/(?:[ -:/'"<([{])/,followingChars:/(?:[ -.,:;!?/'")\]}>]|$)/,punctuation:/(=|-|~|`|#|"|\^|\+|\*|:|\.|'|_|\+)/,tokenizer:{root:[[/^(@punctuation{3,}$){1,1}?/,"keyword"],[/^\s*([\*\-+‣•]|[a-zA-Z0-9]+\.|\([a-zA-Z0-9]+\)|[a-zA-Z0-9]+\))\s/,"keyword"],[/([ ]::)\s*$/,"keyword","@blankLineOfLiteralBlocks"],[/(::)\s*$/,"keyword","@blankLineOfLiteralBlocks"],{include:"@tables"},{include:"@explicitMarkupBlocks"},{include:"@inlineMarkup"}],explicitMarkupBlocks:[{include:"@citations"},{include:"@footnotes"},[/^(\.\.\s)(@simpleRefName)(::\s)(.*)$/,[{token:"",next:"subsequentLines"},"keyword","",""]],[/^(\.\.)(\s+)(_)(@simpleRefName)(:)(\s+)(.*)/,[{token:"",next:"hyperlinks"},"","","string.link","","","string.link"]],[/^((?:(?:\.\.)(?:\s+))?)(__)(:)(\s+)(.*)/,[{token:"",next:"subsequentLines"},"","","","string.link"]],[/^(__\s+)(.+)/,["","string.link"]],[/^(\.\.)( \|)([^| ]+[^|]*[^| ]*)(\| )(@simpleRefName)(:: .*)/,[{token:"",next:"subsequentLines"},"","string.link","","keyword",""],"@rawBlocks"],[/(\|)([^| ]+[^|]*[^| ]*)(\|_{0,2})/,["","string.link",""]],[/^(\.\.)([ ].*)$/,[{token:"",next:"@comments"},"comment"]]],inlineMarkup:[{include:"@citationsReference"},{include:"@footnotesReference"},[/(@simpleRefName)(_{1,2})/,["string.link",""]],[/(`)([^<`]+\s+)(<)(.*)(>)(`)(_)/,["","string.link","","string.link","","",""]],[/\*\*([^\\*]|\*(?!\*))+\*\*/,"strong"],[/\*[^*]+\*/,"emphasis"],[/(``)((?:[^`]|\`(?!`))+)(``)/,["","keyword",""]],[/(__\s+)(.+)/,["","keyword"]],[/(:)((?:@simpleRefNameWithoutBq)?)(:`)([^`]+)(`)/,["","keyword","","",""]],[/(`)([^`]+)(`:)((?:@simpleRefNameWithoutBq)?)(:)/,["","","","keyword",""]],[/(`)([^`]+)(`)/,""],[/(_`)(@phrase)(`)/,["","string.link",""]]],citations:[[/^(\.\.\s+\[)((?:@citationName))(\]\s+)(.*)/,[{token:"",next:"@subsequentLines"},"string.link","",""]]],citationsReference:[[/(\[)(@citationName)(\]_)/,["","string.link",""]]],footnotes:[[/^(\.\.\s+\[)((?:[0-9]+))(\]\s+.*)/,[{token:"",next:"@subsequentLines"},"string.link",""]],[/^(\.\.\s+\[)((?:#@simpleRefName?))(\]\s+)(.*)/,[{token:"",next:"@subsequentLines"},"string.link","",""]],[/^(\.\.\s+\[)((?:\*))(\]\s+)(.*)/,[{token:"",next:"@subsequentLines"},"string.link","",""]]],footnotesReference:[[/(\[)([0-9]+)(\])(_)/,["","string.link","",""]],[/(\[)(#@simpleRefName?)(\])(_)/,["","string.link","",""]],[/(\[)(\*)(\])(_)/,["","string.link","",""]]],blankLineOfLiteralBlocks:[[/^$/,"","@subsequentLinesOfLiteralBlocks"],[/^.*$/,"","@pop"]],subsequentLinesOfLiteralBlocks:[[/(@blockLiteralStart+)(.*)/,["keyword",""]],[/^(?!blockLiteralStart)/,"","@popall"]],subsequentLines:[[/^[\s]+.*/,""],[/^(?!\s)/,"","@pop"]],hyperlinks:[[/^[\s]+.*/,"string.link"],[/^(?!\s)/,"","@pop"]],comments:[[/^[\s]+.*/,"comment"],[/^(?!\s)/,"","@pop"]],tables:[[/\+-[+-]+/,"keyword"],[/\+=[+=]+/,"keyword"]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/ruby/ruby.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/ruby/ruby.js new file mode 100644 index 0000000000..1ed764a4c2 --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/ruby/ruby.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/ruby/ruby",["require","exports"],(function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.language=t.conf=void 0,t.conf={comments:{lineComment:"#",blockComment:["=begin","=end"]},brackets:[["(",")"],["{","}"],["[","]"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],indentationRules:{increaseIndentPattern:new RegExp("^\\s*((begin|class|(private|protected)\\s+def|def|else|elsif|ensure|for|if|module|rescue|unless|until|when|while|case)|([^#]*\\sdo\\b)|([^#]*=\\s*(case|if|unless)))\\b([^#\\{;]|(\"|'|/).*\\4)*(#.*)?$"),decreaseIndentPattern:new RegExp("^\\s*([}\\]]([,)]?\\s*(#|$)|\\.[a-zA-Z_]\\w*\\b)|(end|rescue|ensure|else|elsif|when)\\b)")}},t.language={tokenPostfix:".ruby",keywords:["__LINE__","__ENCODING__","__FILE__","BEGIN","END","alias","and","begin","break","case","class","def","defined?","do","else","elsif","end","ensure","for","false","if","in","module","next","nil","not","or","redo","rescue","retry","return","self","super","then","true","undef","unless","until","when","while","yield"],keywordops:["::","..","...","?",":","=>"],builtins:["require","public","private","include","extend","attr_reader","protected","private_class_method","protected_class_method","new"],declarations:["module","class","def","case","do","begin","for","if","while","until","unless"],linedecls:["def","case","do","begin","for","if","while","until","unless"],operators:["^","&","|","<=>","==","===","!~","=~",">",">=","<","<=","<<",">>","+","-","*","/","%","**","~","+@","-@","[]","[]=","`","+=","-=","*=","**=","/=","^=","%=","<<=",">>=","&=","&&=","||=","|="],brackets:[{open:"(",close:")",token:"delimiter.parenthesis"},{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"}],symbols:/[=>"}],[/%([qws])(@delim)/,{token:"string.$1.delim",switchTo:"@qstring.$1.$2.$2"}],[/%r\(/,{token:"regexp.delim",switchTo:"@pregexp.(.)"}],[/%r\[/,{token:"regexp.delim",switchTo:"@pregexp.[.]"}],[/%r\{/,{token:"regexp.delim",switchTo:"@pregexp.{.}"}],[/%r"}],[/%r(@delim)/,{token:"regexp.delim",switchTo:"@pregexp.$1.$1"}],[/%(x|W|Q?)\(/,{token:"string.$1.delim",switchTo:"@qqstring.$1.(.)"}],[/%(x|W|Q?)\[/,{token:"string.$1.delim",switchTo:"@qqstring.$1.[.]"}],[/%(x|W|Q?)\{/,{token:"string.$1.delim",switchTo:"@qqstring.$1.{.}"}],[/%(x|W|Q?)"}],[/%(x|W|Q?)(@delim)/,{token:"string.$1.delim",switchTo:"@qqstring.$1.$2.$2"}],[/%([rqwsxW]|Q?)./,{token:"invalid",next:"@pop"}],[/./,{token:"invalid",next:"@pop"}]],qstring:[[/\\$/,"string.$S2.escape"],[/\\./,"string.$S2.escape"],[/./,{cases:{"$#==$S4":{token:"string.$S2.delim",next:"@pop"},"$#==$S3":{token:"string.$S2.delim",next:"@push"},"@default":"string.$S2"}}]],qqstring:[[/#/,"string.$S2.escape","@interpolated"],{include:"@qstring"}],whitespace:[[/[ \t\r\n]+/,""],[/^\s*=begin\b/,"comment","@comment"],[/#.*$/,"comment"]],comment:[[/[^=]+/,"comment"],[/^\s*=begin\b/,"comment.invalid"],[/^\s*=end\b.*/,"comment","@pop"],[/[=]/,"comment"]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/rust/rust.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/rust/rust.js new file mode 100644 index 0000000000..c74e57ab3e --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/rust/rust.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/rust/rust",["require","exports"],(function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.language=t.conf=void 0,t.conf={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"[",close:"]"},{open:"{",close:"}"},{open:"(",close:")"},{open:"'",close:"'",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*#pragma\\s+region\\b"),end:new RegExp("^\\s*#pragma\\s+endregion\\b")}}},t.language={tokenPostfix:".rust",defaultToken:"invalid",keywords:["as","async","await","box","break","const","continue","crate","dyn","else","enum","extern","false","fn","for","if","impl","in","let","loop","match","mod","move","mut","pub","ref","return","self","static","struct","super","trait","true","try","type","unsafe","use","where","while","catch","default","union","static","abstract","alignof","become","do","final","macro","offsetof","override","priv","proc","pure","sizeof","typeof","unsized","virtual","yield"],typeKeywords:["Self","m32","m64","m128","f80","f16","f128","int","uint","float","char","bool","u8","u16","u32","u64","f32","f64","i8","i16","i32","i64","str","Option","Either","c_float","c_double","c_void","FILE","fpos_t","DIR","dirent","c_char","c_schar","c_uchar","c_short","c_ushort","c_int","c_uint","c_long","c_ulong","size_t","ptrdiff_t","clock_t","time_t","c_longlong","c_ulonglong","intptr_t","uintptr_t","off_t","dev_t","ino_t","pid_t","mode_t","ssize_t"],constants:["true","false","Some","None","Left","Right","Ok","Err"],supportConstants:["EXIT_FAILURE","EXIT_SUCCESS","RAND_MAX","EOF","SEEK_SET","SEEK_CUR","SEEK_END","_IOFBF","_IONBF","_IOLBF","BUFSIZ","FOPEN_MAX","FILENAME_MAX","L_tmpnam","TMP_MAX","O_RDONLY","O_WRONLY","O_RDWR","O_APPEND","O_CREAT","O_EXCL","O_TRUNC","S_IFIFO","S_IFCHR","S_IFBLK","S_IFDIR","S_IFREG","S_IFMT","S_IEXEC","S_IWRITE","S_IREAD","S_IRWXU","S_IXUSR","S_IWUSR","S_IRUSR","F_OK","R_OK","W_OK","X_OK","STDIN_FILENO","STDOUT_FILENO","STDERR_FILENO"],supportMacros:["format!","print!","println!","panic!","format_args!","unreachable!","write!","writeln!"],operators:["!","!=","%","%=","&","&=","&&","*","*=","+","+=","-","-=","->",".","..","...","/","/=",":",";","<<","<<=","<","<=","=","==","=>",">",">=",">>",">>=","@","^","^=","|","|=","||","_","?","#"],escapes:/\\([nrt0\"''\\]|x\h{2}|u\{\h{1,6}\})/,delimiters:/[,]/,symbols:/[\#\!\%\&\*\+\-\.\/\:\;\<\=\>\@\^\|_\?]+/,intSuffixes:/[iu](8|16|32|64|128|size)/,floatSuffixes:/f(32|64)/,tokenizer:{root:[[/[a-zA-Z][a-zA-Z0-9_]*!?|_[a-zA-Z0-9_]+/,{cases:{"@typeKeywords":"keyword.type","@keywords":"keyword","@supportConstants":"keyword","@supportMacros":"keyword","@constants":"keyword","@default":"identifier"}}],[/\$/,"identifier"],[/'[a-zA-Z_][a-zA-Z0-9_]*(?=[^\'])/,"identifier"],[/'\S'/,"string.byteliteral"],[/"/,{token:"string.quote",bracket:"@open",next:"@string"}],{include:"@numbers"},{include:"@whitespace"},[/@delimiters/,{cases:{"@keywords":"keyword","@default":"delimiter"}}],[/[{}()\[\]<>]/,"@brackets"],[/@symbols/,{cases:{"@operators":"operator","@default":""}}]],whitespace:[[/[ \t\r\n]+/,"white"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\/\*/,"comment","@push"],["\\*/","comment","@pop"],[/[\/*]/,"comment"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,{token:"string.quote",bracket:"@close",next:"@pop"}]],numbers:[[/(0o[0-7_]+)(@intSuffixes)?/,{token:"number"}],[/(0b[0-1_]+)(@intSuffixes)?/,{token:"number"}],[/[\d][\d_]*(\.[\d][\d_]*)?[eE][+-][\d_]+(@floatSuffixes)?/,{token:"number"}],[/\b(\d\.?[\d_]*)(@floatSuffixes)?\b/,{token:"number"}],[/(0x[\da-fA-F]+)_?(@intSuffixes)?/,{token:"number"}],[/[\d][\d_]*(@intSuffixes?)?/,{token:"number"}]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/sb/sb.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/sb/sb.js new file mode 100644 index 0000000000..5e2241e44a --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/sb/sb.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/sb/sb",["require","exports"],(function(e,o){"use strict";Object.defineProperty(o,"__esModule",{value:!0}),o.language=o.conf=void 0,o.conf={comments:{lineComment:"'"},brackets:[["(",")"],["[","]"],["If","EndIf"],["While","EndWhile"],["For","EndFor"],["Sub","EndSub"]],autoClosingPairs:[{open:'"',close:'"',notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]}]},o.language={defaultToken:"",tokenPostfix:".sb",ignoreCase:!0,brackets:[{token:"delimiter.array",open:"[",close:"]"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"keyword.tag-if",open:"If",close:"EndIf"},{token:"keyword.tag-while",open:"While",close:"EndWhile"},{token:"keyword.tag-for",open:"For",close:"EndFor"},{token:"keyword.tag-sub",open:"Sub",close:"EndSub"}],keywords:["Else","ElseIf","EndFor","EndIf","EndSub","EndWhile","For","Goto","If","Step","Sub","Then","To","While"],tagwords:["If","Sub","While","For"],operators:[">","<","<>","<=",">=","And","Or","+","-","*","/","="],identifier:/[a-zA-Z_][\w]*/,symbols:/[=><:+\-*\/%\.,]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[{include:"@whitespace"},[/(@identifier)(?=[.])/,"type"],[/@identifier/,{cases:{"@keywords":{token:"keyword.$0"},"@operators":"operator","@default":"variable.name"}}],[/([.])(@identifier)/,{cases:{$2:["delimiter","type.member"],"@default":""}}],[/\d*\.\d+/,"number.float"],[/\d+/,"number"],[/[()\[\]]/,"@brackets"],[/@symbols/,{cases:{"@operators":"operator","@default":"delimiter"}}],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string"]],whitespace:[[/[ \t\r\n]+/,""],[/(\').*$/,"comment"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"C?/,"string","@pop"]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/scala/scala.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/scala/scala.js new file mode 100644 index 0000000000..b75d85f540 --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/scala/scala.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/scala/scala",["require","exports"],(function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.language=t.conf=void 0,t.conf={wordPattern:/(unary_[@~!#%^&*()\-=+\\|:<>\/?]+)|([a-zA-Z_$][\w$]*?_=)|(`[^`]+`)|([a-zA-Z_$][\w$]*)/g,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*//\\s*(?:(?:#?region\\b)|(?:))")}}},t.language={tokenPostfix:".scala",keywords:["asInstanceOf","catch","class","classOf","def","do","else","extends","finally","for","foreach","forSome","if","import","isInstanceOf","macro","match","new","object","package","return","throw","trait","try","type","until","val","var","while","with","yield","given","enum","then"],softKeywords:["as","export","extension","end","derives","on"],constants:["true","false","null","this","super"],modifiers:["abstract","final","implicit","lazy","override","private","protected","sealed"],softModifiers:["inline","opaque","open","transparent","using"],name:/(?:[a-z_$][\w$]*|`[^`]+`)/,type:/(?:[A-Z][\w$]*)/,symbols:/[=>))/,["@brackets","white","variable"]],[/@name/,{cases:{"@keywords":"keyword","@softKeywords":"keyword","@modifiers":"keyword.modifier","@softModifiers":"keyword.modifier","@constants":{token:"constant",next:"@allowMethod"},"@default":{token:"identifier",next:"@allowMethod"}}}],[/@type/,"type","@allowMethod"],{include:"@whitespace"},[/@[a-zA-Z_$][\w$]*(?:\.[a-zA-Z_$][\w$]*)*/,"annotation"],[/[{(]/,"@brackets"],[/[})]/,"@brackets","@allowMethod"],[/\[/,"operator.square"],[/](?!\s*(?:va[rl]|def|type)\b)/,"operator.square","@allowMethod"],[/]/,"operator.square"],[/([=-]>|<-|>:|<:|:>|<%)(?=[\s\w()[\]{},\."'`])/,"keyword"],[/@symbols/,"operator"],[/[;,\.]/,"delimiter"],[/'[a-zA-Z$][\w$]*(?!')/,"attribute.name"],[/'[^\\']'/,"string","@allowMethod"],[/(')(@escapes)(')/,["string","string.escape",{token:"string",next:"@allowMethod"}]],[/'/,"string.invalid"]],import:[[/;/,"delimiter","@pop"],[/^|$/,"","@pop"],[/[ \t]+/,"white"],[/[\n\r]+/,"white","@pop"],[/\/\*/,"comment","@comment"],[/@name|@type/,"type"],[/[(){}]/,"@brackets"],[/[[\]]/,"operator.square"],[/[\.,]/,"delimiter"]],allowMethod:[[/^|$/,"","@pop"],[/[ \t]+/,"white"],[/[\n\r]+/,"white","@pop"],[/\/\*/,"comment","@comment"],[/(?==>[\s\w([{])/,"keyword","@pop"],[/(@name|@symbols)(?=[ \t]*[[({"'`]|[ \t]+(?:[+-]?\.?\d|\w))/,{cases:{"@keywords":{token:"keyword",next:"@pop"},"->|<-|>:|<:|<%":{token:"keyword",next:"@pop"},"@default":{token:"@rematch",next:"@pop"}}}],["","","@pop"]],comment:[[/[^\/*]+/,"comment"],[/\/\*/,"comment","@push"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],case:[[/\b_\*/,"key"],[/\b(_|true|false|null|this|super)\b/,"keyword","@allowMethod"],[/\bif\b|=>/,"keyword","@pop"],[/`[^`]+`/,"identifier","@allowMethod"],[/@name/,"variable","@allowMethod"],[/:::?|\||@(?![a-z_$])/,"keyword"],{include:"@root"}],vardef:[[/\b_\*/,"key"],[/\b(_|true|false|null|this|super)\b/,"keyword"],[/@name/,"variable"],[/:::?|\||@(?![a-z_$])/,"keyword"],[/=|:(?!:)/,"operator","@pop"],[/$/,"white","@pop"],{include:"@root"}],string:[[/[^\\"\n\r]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,{token:"string.quote",bracket:"@close",switchTo:"@allowMethod"}]],stringt:[[/[^\\"\n\r]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"(?=""")/,"string"],[/"""/,{token:"string.quote",bracket:"@close",switchTo:"@allowMethod"}],[/"/,"string"]],fstring:[[/@escapes/,"string.escape"],[/"/,{token:"string.quote",bracket:"@close",switchTo:"@allowMethod"}],[/\$\$/,"string"],[/(\$)([a-z_]\w*)/,["operator","identifier"]],[/\$\{/,"operator","@interp"],[/%%/,"string"],[/(%)([\-#+ 0,(])(\d+|\.\d+|\d+\.\d+)(@fstring_conv)/,["metatag","keyword.modifier","number","metatag"]],[/(%)(\d+|\.\d+|\d+\.\d+)(@fstring_conv)/,["metatag","number","metatag"]],[/(%)([\-#+ 0,(])(@fstring_conv)/,["metatag","keyword.modifier","metatag"]],[/(%)(@fstring_conv)/,["metatag","metatag"]],[/./,"string"]],fstringt:[[/@escapes/,"string.escape"],[/"(?=""")/,"string"],[/"""/,{token:"string.quote",bracket:"@close",switchTo:"@allowMethod"}],[/\$\$/,"string"],[/(\$)([a-z_]\w*)/,["operator","identifier"]],[/\$\{/,"operator","@interp"],[/%%/,"string"],[/(%)([\-#+ 0,(])(\d+|\.\d+|\d+\.\d+)(@fstring_conv)/,["metatag","keyword.modifier","number","metatag"]],[/(%)(\d+|\.\d+|\d+\.\d+)(@fstring_conv)/,["metatag","number","metatag"]],[/(%)([\-#+ 0,(])(@fstring_conv)/,["metatag","keyword.modifier","metatag"]],[/(%)(@fstring_conv)/,["metatag","metatag"]],[/./,"string"]],sstring:[[/@escapes/,"string.escape"],[/"/,{token:"string.quote",bracket:"@close",switchTo:"@allowMethod"}],[/\$\$/,"string"],[/(\$)([a-z_]\w*)/,["operator","identifier"]],[/\$\{/,"operator","@interp"],[/./,"string"]],sstringt:[[/@escapes/,"string.escape"],[/"(?=""")/,"string"],[/"""/,{token:"string.quote",bracket:"@close",switchTo:"@allowMethod"}],[/\$\$/,"string"],[/(\$)([a-z_]\w*)/,["operator","identifier"]],[/\$\{/,"operator","@interp"],[/./,"string"]],interp:[[/{/,"operator","@push"],[/}/,"operator","@pop"],{include:"@root"}],rawstring:[[/[^"]/,"string"],[/"/,{token:"string.quote",bracket:"@close",switchTo:"@allowMethod"}]],rawstringt:[[/[^"]/,"string"],[/"(?=""")/,"string"],[/"""/,{token:"string.quote",bracket:"@close",switchTo:"@allowMethod"}],[/"/,"string"]],whitespace:[[/[ \t\r\n]+/,"white"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/scheme/scheme.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/scheme/scheme.js new file mode 100644 index 0000000000..c93fe952ae --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/scheme/scheme.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/scheme/scheme",["require","exports"],(function(e,o){"use strict";Object.defineProperty(o,"__esModule",{value:!0}),o.language=o.conf=void 0,o.conf={comments:{lineComment:";",blockComment:["#|","|#"]},brackets:[["(",")"],["{","}"],["[","]"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}]},o.language={defaultToken:"",ignoreCase:!0,tokenPostfix:".scheme",brackets:[{open:"(",close:")",token:"delimiter.parenthesis"},{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"}],keywords:["case","do","let","loop","if","else","when","cons","car","cdr","cond","lambda","lambda*","syntax-rules","format","set!","quote","eval","append","list","list?","member?","load"],constants:["#t","#f"],operators:["eq?","eqv?","equal?","and","or","not","null?"],tokenizer:{root:[[/#[xXoObB][0-9a-fA-F]+/,"number.hex"],[/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?/,"number.float"],[/(?:\b(?:(define|define-syntax|define-macro))\b)(\s+)((?:\w|\-|\!|\?)*)/,["keyword","white","variable"]],{include:"@whitespace"},{include:"@strings"},[/[a-zA-Z_#][a-zA-Z0-9_\-\?\!\*]*/,{cases:{"@keywords":"keyword","@constants":"constant","@operators":"operators","@default":"identifier"}}]],comment:[[/[^\|#]+/,"comment"],[/#\|/,"comment","@push"],[/\|#/,"comment","@pop"],[/[\|#]/,"comment"]],whitespace:[[/[ \t\r\n]+/,"white"],[/#\|/,"comment","@comment"],[/;.*$/,"comment"]],strings:[[/"$/,"string","@popall"],[/"(?=.)/,"string","@multiLineString"]],multiLineString:[[/[^\\"]+$/,"string","@popall"],[/[^\\"]+/,"string"],[/\\./,"string.escape"],[/"/,"string","@popall"],[/\\$/,"string"]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/scss/scss.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/scss/scss.js new file mode 100644 index 0000000000..b8e8a5a910 --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/scss/scss.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/scss/scss",["require","exports"],(function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.language=t.conf=void 0,t.conf={wordPattern:/(#?-?\d*\.\d\w*%?)|([@$#!.:]?[\w-?]+%?)|[@#!.]/g,comments:{blockComment:["/*","*/"],lineComment:"//"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]},{open:"'",close:"'",notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*\\/\\*\\s*#region\\b\\s*(.*?)\\s*\\*\\/"),end:new RegExp("^\\s*\\/\\*\\s*#endregion\\b.*\\*\\/")}}},t.language={defaultToken:"",tokenPostfix:".scss",ws:"[ \t\n\r\f]*",identifier:"-?-?([a-zA-Z]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))([\\w\\-]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))*",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.bracket"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],tokenizer:{root:[{include:"@selector"}],selector:[{include:"@comments"},{include:"@import"},{include:"@variabledeclaration"},{include:"@warndebug"},["[@](include)",{token:"keyword",next:"@includedeclaration"}],["[@](keyframes|-webkit-keyframes|-moz-keyframes|-o-keyframes)",{token:"keyword",next:"@keyframedeclaration"}],["[@](page|content|font-face|-moz-document)",{token:"keyword"}],["[@](charset|namespace)",{token:"keyword",next:"@declarationbody"}],["[@](function)",{token:"keyword",next:"@functiondeclaration"}],["[@](mixin)",{token:"keyword",next:"@mixindeclaration"}],["url(\\-prefix)?\\(",{token:"meta",next:"@urldeclaration"}],{include:"@controlstatement"},{include:"@selectorname"},["[&\\*]","tag"],["[>\\+,]","delimiter"],["\\[",{token:"delimiter.bracket",next:"@selectorattribute"}],["{",{token:"delimiter.curly",next:"@selectorbody"}]],selectorbody:[["[*_]?@identifier@ws:(?=(\\s|\\d|[^{;}]*[;}]))","attribute.name","@rulevalue"],{include:"@selector"},["[@](extend)",{token:"keyword",next:"@extendbody"}],["[@](return)",{token:"keyword",next:"@declarationbody"}],["}",{token:"delimiter.curly",next:"@pop"}]],selectorname:[["#{",{token:"meta",next:"@variableinterpolation"}],["(\\.|#(?=[^{])|%|(@identifier)|:)+","tag"]],selectorattribute:[{include:"@term"},["]",{token:"delimiter.bracket",next:"@pop"}]],term:[{include:"@comments"},["url(\\-prefix)?\\(",{token:"meta",next:"@urldeclaration"}],{include:"@functioninvocation"},{include:"@numbers"},{include:"@strings"},{include:"@variablereference"},["(and\\b|or\\b|not\\b)","operator"],{include:"@name"},["([<>=\\+\\-\\*\\/\\^\\|\\~,])","operator"],[",","delimiter"],["!default","literal"],["\\(",{token:"delimiter.parenthesis",next:"@parenthizedterm"}]],rulevalue:[{include:"@term"},["!important","literal"],[";","delimiter","@pop"],["{",{token:"delimiter.curly",switchTo:"@nestedproperty"}],["(?=})",{token:"",next:"@pop"}]],nestedproperty:[["[*_]?@identifier@ws:","attribute.name","@rulevalue"],{include:"@comments"},["}",{token:"delimiter.curly",next:"@pop"}]],warndebug:[["[@](warn|debug)",{token:"keyword",next:"@declarationbody"}]],import:[["[@](import)",{token:"keyword",next:"@declarationbody"}]],variabledeclaration:[["\\$@identifier@ws:","variable.decl","@declarationbody"]],urldeclaration:[{include:"@strings"},["[^)\r\n]+","string"],["\\)",{token:"meta",next:"@pop"}]],parenthizedterm:[{include:"@term"},["\\)",{token:"delimiter.parenthesis",next:"@pop"}]],declarationbody:[{include:"@term"},[";","delimiter","@pop"],["(?=})",{token:"",next:"@pop"}]],extendbody:[{include:"@selectorname"},["!optional","literal"],[";","delimiter","@pop"],["(?=})",{token:"",next:"@pop"}]],variablereference:[["\\$@identifier","variable.ref"],["\\.\\.\\.","operator"],["#{",{token:"meta",next:"@variableinterpolation"}]],variableinterpolation:[{include:"@variablereference"},["}",{token:"meta",next:"@pop"}]],comments:[["\\/\\*","comment","@comment"],["\\/\\/+.*","comment"]],comment:[["\\*\\/","comment","@pop"],[".","comment"]],name:[["@identifier","attribute.value"]],numbers:[["(\\d*\\.)?\\d+([eE][\\-+]?\\d+)?",{token:"number",next:"@units"}],["#[0-9a-fA-F_]+(?!\\w)","number.hex"]],units:[["(em|ex|ch|rem|vmin|vmax|vw|vh|vm|cm|mm|in|px|pt|pc|deg|grad|rad|turn|s|ms|Hz|kHz|%)?","number","@pop"]],functiondeclaration:[["@identifier@ws\\(",{token:"meta",next:"@parameterdeclaration"}],["{",{token:"delimiter.curly",switchTo:"@functionbody"}]],mixindeclaration:[["@identifier@ws\\(",{token:"meta",next:"@parameterdeclaration"}],["@identifier","meta"],["{",{token:"delimiter.curly",switchTo:"@selectorbody"}]],parameterdeclaration:[["\\$@identifier@ws:","variable.decl"],["\\.\\.\\.","operator"],[",","delimiter"],{include:"@term"},["\\)",{token:"meta",next:"@pop"}]],includedeclaration:[{include:"@functioninvocation"},["@identifier","meta"],[";","delimiter","@pop"],["(?=})",{token:"",next:"@pop"}],["{",{token:"delimiter.curly",switchTo:"@selectorbody"}]],keyframedeclaration:[["@identifier","meta"],["{",{token:"delimiter.curly",switchTo:"@keyframebody"}]],keyframebody:[{include:"@term"},["{",{token:"delimiter.curly",next:"@selectorbody"}],["}",{token:"delimiter.curly",next:"@pop"}]],controlstatement:[["[@](if|else|for|while|each|media)",{token:"keyword.flow",next:"@controlstatementdeclaration"}]],controlstatementdeclaration:[["(in|from|through|if|to)\\b",{token:"keyword.flow"}],{include:"@term"},["{",{token:"delimiter.curly",switchTo:"@selectorbody"}]],functionbody:[["[@](return)",{token:"keyword"}],{include:"@variabledeclaration"},{include:"@term"},{include:"@controlstatement"},[";","delimiter"],["}",{token:"delimiter.curly",next:"@pop"}]],functioninvocation:[["@identifier\\(",{token:"meta",next:"@functionarguments"}]],functionarguments:[["\\$@identifier@ws:","attribute.name"],["[,]","delimiter"],{include:"@term"},["\\)",{token:"meta",next:"@pop"}]],strings:[['~?"',{token:"string.delimiter",next:"@stringenddoublequote"}],["~?'",{token:"string.delimiter",next:"@stringendquote"}]],stringenddoublequote:[["\\\\.","string"],['"',{token:"string.delimiter",next:"@pop"}],[".","string"]],stringendquote:[["\\\\.","string"],["'",{token:"string.delimiter",next:"@pop"}],[".","string"]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/shell/shell.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/shell/shell.js new file mode 100644 index 0000000000..84f7362236 --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/shell/shell.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/shell/shell",["require","exports"],(function(e,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.language=r.conf=void 0,r.conf={comments:{lineComment:"#"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"`",close:"`"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"`",close:"`"}]},r.language={defaultToken:"",ignoreCase:!0,tokenPostfix:".shell",brackets:[{token:"delimiter.bracket",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"}],keywords:["if","then","do","else","elif","while","until","for","in","esac","fi","fin","fil","done","exit","set","unset","export","function"],builtins:["ab","awk","bash","beep","cat","cc","cd","chown","chmod","chroot","clear","cp","curl","cut","diff","echo","find","gawk","gcc","get","git","grep","hg","kill","killall","ln","ls","make","mkdir","openssl","mv","nc","node","npm","ping","ps","restart","rm","rmdir","sed","service","sh","shopt","shred","source","sort","sleep","ssh","start","stop","su","sudo","svn","tee","telnet","top","touch","vi","vim","wall","wc","wget","who","write","yes","zsh"],symbols:/[=>"]],autoClosingPairs:[{open:'"',close:'"',notIn:["string","comment"]},{open:"{",close:"}",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]}]},e.language={defaultToken:"",tokenPostfix:".sol",brackets:[{token:"delimiter.curly",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"},{token:"delimiter.angle",open:"<",close:">"}],keywords:["pragma","solidity","contract","library","using","struct","function","modifier","constructor","address","string","bool","Int","Uint","Byte","Fixed","Ufixed","int","int8","int16","int24","int32","int40","int48","int56","int64","int72","int80","int88","int96","int104","int112","int120","int128","int136","int144","int152","int160","int168","int176","int184","int192","int200","int208","int216","int224","int232","int240","int248","int256","uint","uint8","uint16","uint24","uint32","uint40","uint48","uint56","uint64","uint72","uint80","uint88","uint96","uint104","uint112","uint120","uint128","uint136","uint144","uint152","uint160","uint168","uint176","uint184","uint192","uint200","uint208","uint216","uint224","uint232","uint240","uint248","uint256","byte","bytes","bytes1","bytes2","bytes3","bytes4","bytes5","bytes6","bytes7","bytes8","bytes9","bytes10","bytes11","bytes12","bytes13","bytes14","bytes15","bytes16","bytes17","bytes18","bytes19","bytes20","bytes21","bytes22","bytes23","bytes24","bytes25","bytes26","bytes27","bytes28","bytes29","bytes30","bytes31","bytes32","fixed","fixed0x8","fixed0x16","fixed0x24","fixed0x32","fixed0x40","fixed0x48","fixed0x56","fixed0x64","fixed0x72","fixed0x80","fixed0x88","fixed0x96","fixed0x104","fixed0x112","fixed0x120","fixed0x128","fixed0x136","fixed0x144","fixed0x152","fixed0x160","fixed0x168","fixed0x176","fixed0x184","fixed0x192","fixed0x200","fixed0x208","fixed0x216","fixed0x224","fixed0x232","fixed0x240","fixed0x248","fixed0x256","fixed8x8","fixed8x16","fixed8x24","fixed8x32","fixed8x40","fixed8x48","fixed8x56","fixed8x64","fixed8x72","fixed8x80","fixed8x88","fixed8x96","fixed8x104","fixed8x112","fixed8x120","fixed8x128","fixed8x136","fixed8x144","fixed8x152","fixed8x160","fixed8x168","fixed8x176","fixed8x184","fixed8x192","fixed8x200","fixed8x208","fixed8x216","fixed8x224","fixed8x232","fixed8x240","fixed8x248","fixed16x8","fixed16x16","fixed16x24","fixed16x32","fixed16x40","fixed16x48","fixed16x56","fixed16x64","fixed16x72","fixed16x80","fixed16x88","fixed16x96","fixed16x104","fixed16x112","fixed16x120","fixed16x128","fixed16x136","fixed16x144","fixed16x152","fixed16x160","fixed16x168","fixed16x176","fixed16x184","fixed16x192","fixed16x200","fixed16x208","fixed16x216","fixed16x224","fixed16x232","fixed16x240","fixed24x8","fixed24x16","fixed24x24","fixed24x32","fixed24x40","fixed24x48","fixed24x56","fixed24x64","fixed24x72","fixed24x80","fixed24x88","fixed24x96","fixed24x104","fixed24x112","fixed24x120","fixed24x128","fixed24x136","fixed24x144","fixed24x152","fixed24x160","fixed24x168","fixed24x176","fixed24x184","fixed24x192","fixed24x200","fixed24x208","fixed24x216","fixed24x224","fixed24x232","fixed32x8","fixed32x16","fixed32x24","fixed32x32","fixed32x40","fixed32x48","fixed32x56","fixed32x64","fixed32x72","fixed32x80","fixed32x88","fixed32x96","fixed32x104","fixed32x112","fixed32x120","fixed32x128","fixed32x136","fixed32x144","fixed32x152","fixed32x160","fixed32x168","fixed32x176","fixed32x184","fixed32x192","fixed32x200","fixed32x208","fixed32x216","fixed32x224","fixed40x8","fixed40x16","fixed40x24","fixed40x32","fixed40x40","fixed40x48","fixed40x56","fixed40x64","fixed40x72","fixed40x80","fixed40x88","fixed40x96","fixed40x104","fixed40x112","fixed40x120","fixed40x128","fixed40x136","fixed40x144","fixed40x152","fixed40x160","fixed40x168","fixed40x176","fixed40x184","fixed40x192","fixed40x200","fixed40x208","fixed40x216","fixed48x8","fixed48x16","fixed48x24","fixed48x32","fixed48x40","fixed48x48","fixed48x56","fixed48x64","fixed48x72","fixed48x80","fixed48x88","fixed48x96","fixed48x104","fixed48x112","fixed48x120","fixed48x128","fixed48x136","fixed48x144","fixed48x152","fixed48x160","fixed48x168","fixed48x176","fixed48x184","fixed48x192","fixed48x200","fixed48x208","fixed56x8","fixed56x16","fixed56x24","fixed56x32","fixed56x40","fixed56x48","fixed56x56","fixed56x64","fixed56x72","fixed56x80","fixed56x88","fixed56x96","fixed56x104","fixed56x112","fixed56x120","fixed56x128","fixed56x136","fixed56x144","fixed56x152","fixed56x160","fixed56x168","fixed56x176","fixed56x184","fixed56x192","fixed56x200","fixed64x8","fixed64x16","fixed64x24","fixed64x32","fixed64x40","fixed64x48","fixed64x56","fixed64x64","fixed64x72","fixed64x80","fixed64x88","fixed64x96","fixed64x104","fixed64x112","fixed64x120","fixed64x128","fixed64x136","fixed64x144","fixed64x152","fixed64x160","fixed64x168","fixed64x176","fixed64x184","fixed64x192","fixed72x8","fixed72x16","fixed72x24","fixed72x32","fixed72x40","fixed72x48","fixed72x56","fixed72x64","fixed72x72","fixed72x80","fixed72x88","fixed72x96","fixed72x104","fixed72x112","fixed72x120","fixed72x128","fixed72x136","fixed72x144","fixed72x152","fixed72x160","fixed72x168","fixed72x176","fixed72x184","fixed80x8","fixed80x16","fixed80x24","fixed80x32","fixed80x40","fixed80x48","fixed80x56","fixed80x64","fixed80x72","fixed80x80","fixed80x88","fixed80x96","fixed80x104","fixed80x112","fixed80x120","fixed80x128","fixed80x136","fixed80x144","fixed80x152","fixed80x160","fixed80x168","fixed80x176","fixed88x8","fixed88x16","fixed88x24","fixed88x32","fixed88x40","fixed88x48","fixed88x56","fixed88x64","fixed88x72","fixed88x80","fixed88x88","fixed88x96","fixed88x104","fixed88x112","fixed88x120","fixed88x128","fixed88x136","fixed88x144","fixed88x152","fixed88x160","fixed88x168","fixed96x8","fixed96x16","fixed96x24","fixed96x32","fixed96x40","fixed96x48","fixed96x56","fixed96x64","fixed96x72","fixed96x80","fixed96x88","fixed96x96","fixed96x104","fixed96x112","fixed96x120","fixed96x128","fixed96x136","fixed96x144","fixed96x152","fixed96x160","fixed104x8","fixed104x16","fixed104x24","fixed104x32","fixed104x40","fixed104x48","fixed104x56","fixed104x64","fixed104x72","fixed104x80","fixed104x88","fixed104x96","fixed104x104","fixed104x112","fixed104x120","fixed104x128","fixed104x136","fixed104x144","fixed104x152","fixed112x8","fixed112x16","fixed112x24","fixed112x32","fixed112x40","fixed112x48","fixed112x56","fixed112x64","fixed112x72","fixed112x80","fixed112x88","fixed112x96","fixed112x104","fixed112x112","fixed112x120","fixed112x128","fixed112x136","fixed112x144","fixed120x8","fixed120x16","fixed120x24","fixed120x32","fixed120x40","fixed120x48","fixed120x56","fixed120x64","fixed120x72","fixed120x80","fixed120x88","fixed120x96","fixed120x104","fixed120x112","fixed120x120","fixed120x128","fixed120x136","fixed128x8","fixed128x16","fixed128x24","fixed128x32","fixed128x40","fixed128x48","fixed128x56","fixed128x64","fixed128x72","fixed128x80","fixed128x88","fixed128x96","fixed128x104","fixed128x112","fixed128x120","fixed128x128","fixed136x8","fixed136x16","fixed136x24","fixed136x32","fixed136x40","fixed136x48","fixed136x56","fixed136x64","fixed136x72","fixed136x80","fixed136x88","fixed136x96","fixed136x104","fixed136x112","fixed136x120","fixed144x8","fixed144x16","fixed144x24","fixed144x32","fixed144x40","fixed144x48","fixed144x56","fixed144x64","fixed144x72","fixed144x80","fixed144x88","fixed144x96","fixed144x104","fixed144x112","fixed152x8","fixed152x16","fixed152x24","fixed152x32","fixed152x40","fixed152x48","fixed152x56","fixed152x64","fixed152x72","fixed152x80","fixed152x88","fixed152x96","fixed152x104","fixed160x8","fixed160x16","fixed160x24","fixed160x32","fixed160x40","fixed160x48","fixed160x56","fixed160x64","fixed160x72","fixed160x80","fixed160x88","fixed160x96","fixed168x8","fixed168x16","fixed168x24","fixed168x32","fixed168x40","fixed168x48","fixed168x56","fixed168x64","fixed168x72","fixed168x80","fixed168x88","fixed176x8","fixed176x16","fixed176x24","fixed176x32","fixed176x40","fixed176x48","fixed176x56","fixed176x64","fixed176x72","fixed176x80","fixed184x8","fixed184x16","fixed184x24","fixed184x32","fixed184x40","fixed184x48","fixed184x56","fixed184x64","fixed184x72","fixed192x8","fixed192x16","fixed192x24","fixed192x32","fixed192x40","fixed192x48","fixed192x56","fixed192x64","fixed200x8","fixed200x16","fixed200x24","fixed200x32","fixed200x40","fixed200x48","fixed200x56","fixed208x8","fixed208x16","fixed208x24","fixed208x32","fixed208x40","fixed208x48","fixed216x8","fixed216x16","fixed216x24","fixed216x32","fixed216x40","fixed224x8","fixed224x16","fixed224x24","fixed224x32","fixed232x8","fixed232x16","fixed232x24","fixed240x8","fixed240x16","fixed248x8","ufixed","ufixed0x8","ufixed0x16","ufixed0x24","ufixed0x32","ufixed0x40","ufixed0x48","ufixed0x56","ufixed0x64","ufixed0x72","ufixed0x80","ufixed0x88","ufixed0x96","ufixed0x104","ufixed0x112","ufixed0x120","ufixed0x128","ufixed0x136","ufixed0x144","ufixed0x152","ufixed0x160","ufixed0x168","ufixed0x176","ufixed0x184","ufixed0x192","ufixed0x200","ufixed0x208","ufixed0x216","ufixed0x224","ufixed0x232","ufixed0x240","ufixed0x248","ufixed0x256","ufixed8x8","ufixed8x16","ufixed8x24","ufixed8x32","ufixed8x40","ufixed8x48","ufixed8x56","ufixed8x64","ufixed8x72","ufixed8x80","ufixed8x88","ufixed8x96","ufixed8x104","ufixed8x112","ufixed8x120","ufixed8x128","ufixed8x136","ufixed8x144","ufixed8x152","ufixed8x160","ufixed8x168","ufixed8x176","ufixed8x184","ufixed8x192","ufixed8x200","ufixed8x208","ufixed8x216","ufixed8x224","ufixed8x232","ufixed8x240","ufixed8x248","ufixed16x8","ufixed16x16","ufixed16x24","ufixed16x32","ufixed16x40","ufixed16x48","ufixed16x56","ufixed16x64","ufixed16x72","ufixed16x80","ufixed16x88","ufixed16x96","ufixed16x104","ufixed16x112","ufixed16x120","ufixed16x128","ufixed16x136","ufixed16x144","ufixed16x152","ufixed16x160","ufixed16x168","ufixed16x176","ufixed16x184","ufixed16x192","ufixed16x200","ufixed16x208","ufixed16x216","ufixed16x224","ufixed16x232","ufixed16x240","ufixed24x8","ufixed24x16","ufixed24x24","ufixed24x32","ufixed24x40","ufixed24x48","ufixed24x56","ufixed24x64","ufixed24x72","ufixed24x80","ufixed24x88","ufixed24x96","ufixed24x104","ufixed24x112","ufixed24x120","ufixed24x128","ufixed24x136","ufixed24x144","ufixed24x152","ufixed24x160","ufixed24x168","ufixed24x176","ufixed24x184","ufixed24x192","ufixed24x200","ufixed24x208","ufixed24x216","ufixed24x224","ufixed24x232","ufixed32x8","ufixed32x16","ufixed32x24","ufixed32x32","ufixed32x40","ufixed32x48","ufixed32x56","ufixed32x64","ufixed32x72","ufixed32x80","ufixed32x88","ufixed32x96","ufixed32x104","ufixed32x112","ufixed32x120","ufixed32x128","ufixed32x136","ufixed32x144","ufixed32x152","ufixed32x160","ufixed32x168","ufixed32x176","ufixed32x184","ufixed32x192","ufixed32x200","ufixed32x208","ufixed32x216","ufixed32x224","ufixed40x8","ufixed40x16","ufixed40x24","ufixed40x32","ufixed40x40","ufixed40x48","ufixed40x56","ufixed40x64","ufixed40x72","ufixed40x80","ufixed40x88","ufixed40x96","ufixed40x104","ufixed40x112","ufixed40x120","ufixed40x128","ufixed40x136","ufixed40x144","ufixed40x152","ufixed40x160","ufixed40x168","ufixed40x176","ufixed40x184","ufixed40x192","ufixed40x200","ufixed40x208","ufixed40x216","ufixed48x8","ufixed48x16","ufixed48x24","ufixed48x32","ufixed48x40","ufixed48x48","ufixed48x56","ufixed48x64","ufixed48x72","ufixed48x80","ufixed48x88","ufixed48x96","ufixed48x104","ufixed48x112","ufixed48x120","ufixed48x128","ufixed48x136","ufixed48x144","ufixed48x152","ufixed48x160","ufixed48x168","ufixed48x176","ufixed48x184","ufixed48x192","ufixed48x200","ufixed48x208","ufixed56x8","ufixed56x16","ufixed56x24","ufixed56x32","ufixed56x40","ufixed56x48","ufixed56x56","ufixed56x64","ufixed56x72","ufixed56x80","ufixed56x88","ufixed56x96","ufixed56x104","ufixed56x112","ufixed56x120","ufixed56x128","ufixed56x136","ufixed56x144","ufixed56x152","ufixed56x160","ufixed56x168","ufixed56x176","ufixed56x184","ufixed56x192","ufixed56x200","ufixed64x8","ufixed64x16","ufixed64x24","ufixed64x32","ufixed64x40","ufixed64x48","ufixed64x56","ufixed64x64","ufixed64x72","ufixed64x80","ufixed64x88","ufixed64x96","ufixed64x104","ufixed64x112","ufixed64x120","ufixed64x128","ufixed64x136","ufixed64x144","ufixed64x152","ufixed64x160","ufixed64x168","ufixed64x176","ufixed64x184","ufixed64x192","ufixed72x8","ufixed72x16","ufixed72x24","ufixed72x32","ufixed72x40","ufixed72x48","ufixed72x56","ufixed72x64","ufixed72x72","ufixed72x80","ufixed72x88","ufixed72x96","ufixed72x104","ufixed72x112","ufixed72x120","ufixed72x128","ufixed72x136","ufixed72x144","ufixed72x152","ufixed72x160","ufixed72x168","ufixed72x176","ufixed72x184","ufixed80x8","ufixed80x16","ufixed80x24","ufixed80x32","ufixed80x40","ufixed80x48","ufixed80x56","ufixed80x64","ufixed80x72","ufixed80x80","ufixed80x88","ufixed80x96","ufixed80x104","ufixed80x112","ufixed80x120","ufixed80x128","ufixed80x136","ufixed80x144","ufixed80x152","ufixed80x160","ufixed80x168","ufixed80x176","ufixed88x8","ufixed88x16","ufixed88x24","ufixed88x32","ufixed88x40","ufixed88x48","ufixed88x56","ufixed88x64","ufixed88x72","ufixed88x80","ufixed88x88","ufixed88x96","ufixed88x104","ufixed88x112","ufixed88x120","ufixed88x128","ufixed88x136","ufixed88x144","ufixed88x152","ufixed88x160","ufixed88x168","ufixed96x8","ufixed96x16","ufixed96x24","ufixed96x32","ufixed96x40","ufixed96x48","ufixed96x56","ufixed96x64","ufixed96x72","ufixed96x80","ufixed96x88","ufixed96x96","ufixed96x104","ufixed96x112","ufixed96x120","ufixed96x128","ufixed96x136","ufixed96x144","ufixed96x152","ufixed96x160","ufixed104x8","ufixed104x16","ufixed104x24","ufixed104x32","ufixed104x40","ufixed104x48","ufixed104x56","ufixed104x64","ufixed104x72","ufixed104x80","ufixed104x88","ufixed104x96","ufixed104x104","ufixed104x112","ufixed104x120","ufixed104x128","ufixed104x136","ufixed104x144","ufixed104x152","ufixed112x8","ufixed112x16","ufixed112x24","ufixed112x32","ufixed112x40","ufixed112x48","ufixed112x56","ufixed112x64","ufixed112x72","ufixed112x80","ufixed112x88","ufixed112x96","ufixed112x104","ufixed112x112","ufixed112x120","ufixed112x128","ufixed112x136","ufixed112x144","ufixed120x8","ufixed120x16","ufixed120x24","ufixed120x32","ufixed120x40","ufixed120x48","ufixed120x56","ufixed120x64","ufixed120x72","ufixed120x80","ufixed120x88","ufixed120x96","ufixed120x104","ufixed120x112","ufixed120x120","ufixed120x128","ufixed120x136","ufixed128x8","ufixed128x16","ufixed128x24","ufixed128x32","ufixed128x40","ufixed128x48","ufixed128x56","ufixed128x64","ufixed128x72","ufixed128x80","ufixed128x88","ufixed128x96","ufixed128x104","ufixed128x112","ufixed128x120","ufixed128x128","ufixed136x8","ufixed136x16","ufixed136x24","ufixed136x32","ufixed136x40","ufixed136x48","ufixed136x56","ufixed136x64","ufixed136x72","ufixed136x80","ufixed136x88","ufixed136x96","ufixed136x104","ufixed136x112","ufixed136x120","ufixed144x8","ufixed144x16","ufixed144x24","ufixed144x32","ufixed144x40","ufixed144x48","ufixed144x56","ufixed144x64","ufixed144x72","ufixed144x80","ufixed144x88","ufixed144x96","ufixed144x104","ufixed144x112","ufixed152x8","ufixed152x16","ufixed152x24","ufixed152x32","ufixed152x40","ufixed152x48","ufixed152x56","ufixed152x64","ufixed152x72","ufixed152x80","ufixed152x88","ufixed152x96","ufixed152x104","ufixed160x8","ufixed160x16","ufixed160x24","ufixed160x32","ufixed160x40","ufixed160x48","ufixed160x56","ufixed160x64","ufixed160x72","ufixed160x80","ufixed160x88","ufixed160x96","ufixed168x8","ufixed168x16","ufixed168x24","ufixed168x32","ufixed168x40","ufixed168x48","ufixed168x56","ufixed168x64","ufixed168x72","ufixed168x80","ufixed168x88","ufixed176x8","ufixed176x16","ufixed176x24","ufixed176x32","ufixed176x40","ufixed176x48","ufixed176x56","ufixed176x64","ufixed176x72","ufixed176x80","ufixed184x8","ufixed184x16","ufixed184x24","ufixed184x32","ufixed184x40","ufixed184x48","ufixed184x56","ufixed184x64","ufixed184x72","ufixed192x8","ufixed192x16","ufixed192x24","ufixed192x32","ufixed192x40","ufixed192x48","ufixed192x56","ufixed192x64","ufixed200x8","ufixed200x16","ufixed200x24","ufixed200x32","ufixed200x40","ufixed200x48","ufixed200x56","ufixed208x8","ufixed208x16","ufixed208x24","ufixed208x32","ufixed208x40","ufixed208x48","ufixed216x8","ufixed216x16","ufixed216x24","ufixed216x32","ufixed216x40","ufixed224x8","ufixed224x16","ufixed224x24","ufixed224x32","ufixed232x8","ufixed232x16","ufixed232x24","ufixed240x8","ufixed240x16","ufixed248x8","event","enum","let","mapping","private","public","external","inherited","payable","true","false","var","import","constant","if","else","for","else","for","while","do","break","continue","throw","returns","return","suicide","new","is","this","super"],operators:["=",">","<","!","~","?",":","==","<=",">=","!=","&&","||","++","--","+","-","*","/","&","|","^","%","<<",">>",">>>","+=","-=","*=","/=","&=","|=","^=","%=","<<=",">>=",">>>="],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/\d*\d+[eE]([\-+]?\d+)?(@floatsuffix)/,"number.float"],[/\d*\.\d+([eE][\-+]?\d+)?(@floatsuffix)/,"number.float"],[/0[xX][0-9a-fA-F']*[0-9a-fA-F](@integersuffix)/,"number.hex"],[/0[0-7']*[0-7](@integersuffix)/,"number.octal"],[/0[bB][0-1']*[0-1](@integersuffix)/,"number.binary"],[/\d[\d']*\d(@integersuffix)/,"number"],[/\d(@integersuffix)/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string"],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@doccomment"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],doccomment:[[/[^\/*]+/,"comment.doc"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/sophia/sophia.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/sophia/sophia.js new file mode 100644 index 0000000000..1518e61aa3 --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/sophia/sophia.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/sophia/sophia",["require","exports"],(function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.language=t.conf=void 0,t.conf={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"],["<",">"]],autoClosingPairs:[{open:'"',close:'"',notIn:["string","comment"]},{open:"{",close:"}",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]}]},t.language={defaultToken:"",tokenPostfix:".aes",brackets:[{token:"delimiter.curly",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"},{token:"delimiter.angle",open:"<",close:">"}],keywords:["contract","library","entrypoint","function","stateful","state","hash","signature","tuple","list","address","string","bool","int","record","datatype","type","option","oracle","oracle_query","Call","Bits","Bytes","Oracle","String","Crypto","Address","Auth","Chain","None","Some","bits","bytes","event","let","map","private","public","true","false","var","if","else","throw"],operators:["=",">","<","!","~","?","::",":","==","<=",">=","!=","&&","||","++","--","+","-","*","/","&","|","^","%","<<",">>",">>>","+=","-=","*=","/=","&=","|=","^=","%=","<<=",">>=",">>>="],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/\d*\d+[eE]([\-+]?\d+)?(@floatsuffix)/,"number.float"],[/\d*\.\d+([eE][\-+]?\d+)?(@floatsuffix)/,"number.float"],[/0[xX][0-9a-fA-F']*[0-9a-fA-F](@integersuffix)/,"number.hex"],[/0[0-7']*[0-7](@integersuffix)/,"number.octal"],[/0[bB][0-1']*[0-1](@integersuffix)/,"number.binary"],[/\d[\d']*\d(@integersuffix)/,"number"],[/\d(@integersuffix)/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string"],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@doccomment"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],doccomment:[[/[^\/*]+/,"comment.doc"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/sql/sql.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/sql/sql.js new file mode 100644 index 0000000000..06ccffc882 --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/sql/sql.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/sql/sql",["require","exports"],(function(E,T){"use strict";Object.defineProperty(T,"__esModule",{value:!0}),T.language=T.conf=void 0,T.conf={comments:{lineComment:"--",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},T.language={defaultToken:"",tokenPostfix:".sql",ignoreCase:!0,brackets:[{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"}],keywords:["ABORT_AFTER_WAIT","ABSENT","ABSOLUTE","ACCENT_SENSITIVITY","ACTION","ACTIVATION","ACTIVE","ADD","ADDRESS","ADMIN","AES","AES_128","AES_192","AES_256","AFFINITY","AFTER","AGGREGATE","ALGORITHM","ALL_CONSTRAINTS","ALL_ERRORMSGS","ALL_INDEXES","ALL_LEVELS","ALL_SPARSE_COLUMNS","ALLOW_CONNECTIONS","ALLOW_MULTIPLE_EVENT_LOSS","ALLOW_PAGE_LOCKS","ALLOW_ROW_LOCKS","ALLOW_SINGLE_EVENT_LOSS","ALLOW_SNAPSHOT_ISOLATION","ALLOWED","ALTER","ANONYMOUS","ANSI_DEFAULTS","ANSI_NULL_DEFAULT","ANSI_NULL_DFLT_OFF","ANSI_NULL_DFLT_ON","ANSI_NULLS","ANSI_PADDING","ANSI_WARNINGS","APPEND","APPLICATION","APPLICATION_LOG","ARITHABORT","ARITHIGNORE","AS","ASC","ASSEMBLY","ASYMMETRIC","ASYNCHRONOUS_COMMIT","AT","ATOMIC","ATTACH","ATTACH_REBUILD_LOG","AUDIT","AUDIT_GUID","AUTHENTICATION","AUTHORIZATION","AUTO","AUTO_CLEANUP","AUTO_CLOSE","AUTO_CREATE_STATISTICS","AUTO_SHRINK","AUTO_UPDATE_STATISTICS","AUTO_UPDATE_STATISTICS_ASYNC","AUTOMATED_BACKUP_PREFERENCE","AUTOMATIC","AVAILABILITY","AVAILABILITY_MODE","BACKUP","BACKUP_PRIORITY","BASE64","BATCHSIZE","BEGIN","BEGIN_DIALOG","BIGINT","BINARY","BINDING","BIT","BLOCKERS","BLOCKSIZE","BOUNDING_BOX","BREAK","BROKER","BROKER_INSTANCE","BROWSE","BUCKET_COUNT","BUFFER","BUFFERCOUNT","BULK","BULK_LOGGED","BY","CACHE","CALL","CALLED","CALLER","CAP_CPU_PERCENT","CASCADE","CASE","CATALOG","CATCH","CELLS_PER_OBJECT","CERTIFICATE","CHANGE_RETENTION","CHANGE_TRACKING","CHANGES","CHAR","CHARACTER","CHECK","CHECK_CONSTRAINTS","CHECK_EXPIRATION","CHECK_POLICY","CHECKALLOC","CHECKCATALOG","CHECKCONSTRAINTS","CHECKDB","CHECKFILEGROUP","CHECKIDENT","CHECKPOINT","CHECKTABLE","CLASSIFIER_FUNCTION","CLEANTABLE","CLEANUP","CLEAR","CLOSE","CLUSTER","CLUSTERED","CODEPAGE","COLLATE","COLLECTION","COLUMN","COLUMN_SET","COLUMNS","COLUMNSTORE","COLUMNSTORE_ARCHIVE","COMMIT","COMMITTED","COMPATIBILITY_LEVEL","COMPRESSION","COMPUTE","CONCAT","CONCAT_NULL_YIELDS_NULL","CONFIGURATION","CONNECT","CONSTRAINT","CONTAINMENT","CONTENT","CONTEXT","CONTINUE","CONTINUE_AFTER_ERROR","CONTRACT","CONTRACT_NAME","CONTROL","CONVERSATION","COOKIE","COPY_ONLY","COUNTER","CPU","CREATE","CREATE_NEW","CREATION_DISPOSITION","CREDENTIAL","CRYPTOGRAPHIC","CUBE","CURRENT","CURRENT_DATE","CURSOR","CURSOR_CLOSE_ON_COMMIT","CURSOR_DEFAULT","CYCLE","DATA","DATA_COMPRESSION","DATA_PURITY","DATABASE","DATABASE_DEFAULT","DATABASE_MIRRORING","DATABASE_SNAPSHOT","DATAFILETYPE","DATE","DATE_CORRELATION_OPTIMIZATION","DATEFIRST","DATEFORMAT","DATETIME","DATETIME2","DATETIMEOFFSET","DAY","DAYOFYEAR","DAYS","DB_CHAINING","DBCC","DBREINDEX","DDL_DATABASE_LEVEL_EVENTS","DEADLOCK_PRIORITY","DEALLOCATE","DEC","DECIMAL","DECLARE","DECRYPTION","DEFAULT","DEFAULT_DATABASE","DEFAULT_FULLTEXT_LANGUAGE","DEFAULT_LANGUAGE","DEFAULT_SCHEMA","DEFINITION","DELAY","DELAYED_DURABILITY","DELETE","DELETED","DENSITY_VECTOR","DENY","DEPENDENTS","DES","DESC","DESCRIPTION","DESX","DHCP","DIAGNOSTICS","DIALOG","DIFFERENTIAL","DIRECTORY_NAME","DISABLE","DISABLE_BROKER","DISABLED","DISK","DISTINCT","DISTRIBUTED","DOCUMENT","DOUBLE","DROP","DROP_EXISTING","DROPCLEANBUFFERS","DUMP","DURABILITY","DYNAMIC","EDITION","ELEMENTS","ELSE","EMERGENCY","EMPTY","EMPTYFILE","ENABLE","ENABLE_BROKER","ENABLED","ENCRYPTION","END","ENDPOINT","ENDPOINT_URL","ERRLVL","ERROR","ERROR_BROKER_CONVERSATIONS","ERRORFILE","ESCAPE","ESTIMATEONLY","EVENT","EVENT_RETENTION_MODE","EXEC","EXECUTABLE","EXECUTE","EXIT","EXPAND","EXPIREDATE","EXPIRY_DATE","EXPLICIT","EXTENDED_LOGICAL_CHECKS","EXTENSION","EXTERNAL","EXTERNAL_ACCESS","FAIL_OPERATION","FAILOVER","FAILOVER_MODE","FAILURE_CONDITION_LEVEL","FALSE","FAN_IN","FAST","FAST_FORWARD","FETCH","FIELDTERMINATOR","FILE","FILEGROUP","FILEGROWTH","FILELISTONLY","FILENAME","FILEPATH","FILESTREAM","FILESTREAM_ON","FILETABLE_COLLATE_FILENAME","FILETABLE_DIRECTORY","FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME","FILETABLE_NAMESPACE","FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME","FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME","FILLFACTOR","FILTERING","FIRE_TRIGGERS","FIRST","FIRSTROW","FLOAT","FMTONLY","FOLLOWING","FOR","FORCE","FORCE_FAILOVER_ALLOW_DATA_LOSS","FORCE_SERVICE_ALLOW_DATA_LOSS","FORCED","FORCEPLAN","FORCESCAN","FORCESEEK","FOREIGN","FORMATFILE","FORMSOF","FORWARD_ONLY","FREE","FREEPROCCACHE","FREESESSIONCACHE","FREESYSTEMCACHE","FROM","FULL","FULLSCAN","FULLTEXT","FUNCTION","GB","GEOGRAPHY_AUTO_GRID","GEOGRAPHY_GRID","GEOMETRY_AUTO_GRID","GEOMETRY_GRID","GET","GLOBAL","GO","GOTO","GOVERNOR","GRANT","GRIDS","GROUP","GROUP_MAX_REQUESTS","HADR","HASH","HASHED","HAVING","HEADERONLY","HEALTH_CHECK_TIMEOUT","HELP","HIERARCHYID","HIGH","HINT","HISTOGRAM","HOLDLOCK","HONOR_BROKER_PRIORITY","HOUR","HOURS","IDENTITY","IDENTITY_INSERT","IDENTITY_VALUE","IDENTITYCOL","IF","IGNORE_CONSTRAINTS","IGNORE_DUP_KEY","IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX","IGNORE_TRIGGERS","IMAGE","IMMEDIATE","IMPERSONATE","IMPLICIT_TRANSACTIONS","IMPORTANCE","INCLUDE","INCREMENT","INCREMENTAL","INDEX","INDEXDEFRAG","INFINITE","INFLECTIONAL","INIT","INITIATOR","INPUT","INPUTBUFFER","INSENSITIVE","INSERT","INSERTED","INSTEAD","INT","INTEGER","INTO","IO","IP","ISABOUT","ISOLATION","JOB","KB","KEEP","KEEP_CDC","KEEP_NULLS","KEEP_REPLICATION","KEEPDEFAULTS","KEEPFIXED","KEEPIDENTITY","KEEPNULLS","KERBEROS","KEY","KEY_SOURCE","KEYS","KEYSET","KILL","KILOBYTES_PER_BATCH","LABELONLY","LANGUAGE","LAST","LASTROW","LEVEL","LEVEL_1","LEVEL_2","LEVEL_3","LEVEL_4","LIFETIME","LIMIT","LINENO","LIST","LISTENER","LISTENER_IP","LISTENER_PORT","LOAD","LOADHISTORY","LOB_COMPACTION","LOCAL","LOCAL_SERVICE_NAME","LOCK_ESCALATION","LOCK_TIMEOUT","LOGIN","LOGSPACE","LOOP","LOW","MANUAL","MARK","MARK_IN_USE_FOR_REMOVAL","MASTER","MAX_CPU_PERCENT","MAX_DISPATCH_LATENCY","MAX_DOP","MAX_DURATION","MAX_EVENT_SIZE","MAX_FILES","MAX_IOPS_PER_VOLUME","MAX_MEMORY","MAX_MEMORY_PERCENT","MAX_QUEUE_READERS","MAX_ROLLOVER_FILES","MAX_SIZE","MAXDOP","MAXERRORS","MAXLENGTH","MAXRECURSION","MAXSIZE","MAXTRANSFERSIZE","MAXVALUE","MB","MEDIADESCRIPTION","MEDIANAME","MEDIAPASSWORD","MEDIUM","MEMBER","MEMORY_OPTIMIZED","MEMORY_OPTIMIZED_DATA","MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT","MEMORY_PARTITION_MODE","MERGE","MESSAGE","MESSAGE_FORWARD_SIZE","MESSAGE_FORWARDING","MICROSECOND","MILLISECOND","MIN_CPU_PERCENT","MIN_IOPS_PER_VOLUME","MIN_MEMORY_PERCENT","MINUTE","MINUTES","MINVALUE","MIRROR","MIRROR_ADDRESS","MODIFY","MONEY","MONTH","MOVE","MULTI_USER","MUST_CHANGE","NAME","NANOSECOND","NATIONAL","NATIVE_COMPILATION","NCHAR","NEGOTIATE","NESTED_TRIGGERS","NEW_ACCOUNT","NEW_BROKER","NEW_PASSWORD","NEWNAME","NEXT","NO","NO_BROWSETABLE","NO_CHECKSUM","NO_COMPRESSION","NO_EVENT_LOSS","NO_INFOMSGS","NO_TRUNCATE","NO_WAIT","NOCHECK","NOCOUNT","NOEXEC","NOEXPAND","NOFORMAT","NOINDEX","NOINIT","NOLOCK","NON","NON_TRANSACTED_ACCESS","NONCLUSTERED","NONE","NORECOMPUTE","NORECOVERY","NORESEED","NORESET","NOREWIND","NORMAL","NOSKIP","NOTIFICATION","NOTRUNCATE","NOUNLOAD","NOWAIT","NTEXT","NTLM","NUMANODE","NUMERIC","NUMERIC_ROUNDABORT","NVARCHAR","OBJECT","OF","OFF","OFFLINE","OFFSET","OFFSETS","OLD_ACCOUNT","OLD_PASSWORD","ON","ON_FAILURE","ONLINE","ONLY","OPEN","OPEN_EXISTING","OPENTRAN","OPTIMISTIC","OPTIMIZE","OPTION","ORDER","OUT","OUTPUT","OUTPUTBUFFER","OVER","OVERRIDE","OWNER","OWNERSHIP","PAD_INDEX","PAGE","PAGE_VERIFY","PAGECOUNT","PAGLOCK","PARAMETERIZATION","PARSEONLY","PARTIAL","PARTITION","PARTITIONS","PARTNER","PASSWORD","PATH","PER_CPU","PER_NODE","PERCENT","PERMISSION_SET","PERSISTED","PHYSICAL_ONLY","PLAN","POISON_MESSAGE_HANDLING","POOL","POPULATION","PORT","PRECEDING","PRECISION","PRIMARY","PRIMARY_ROLE","PRINT","PRIOR","PRIORITY","PRIORITY_LEVEL","PRIVATE","PRIVILEGES","PROC","PROCCACHE","PROCEDURE","PROCEDURE_NAME","PROCESS","PROFILE","PROPERTY","PROPERTY_DESCRIPTION","PROPERTY_INT_ID","PROPERTY_SET_GUID","PROVIDER","PROVIDER_KEY_NAME","PUBLIC","PUT","QUARTER","QUERY","QUERY_GOVERNOR_COST_LIMIT","QUEUE","QUEUE_DELAY","QUOTED_IDENTIFIER","RAISERROR","RANGE","RAW","RC2","RC4","RC4_128","READ","READ_COMMITTED_SNAPSHOT","READ_ONLY","READ_ONLY_ROUTING_LIST","READ_ONLY_ROUTING_URL","READ_WRITE","READ_WRITE_FILEGROUPS","READCOMMITTED","READCOMMITTEDLOCK","READONLY","READPAST","READTEXT","READUNCOMMITTED","READWRITE","REAL","REBUILD","RECEIVE","RECOMPILE","RECONFIGURE","RECOVERY","RECURSIVE","RECURSIVE_TRIGGERS","REFERENCES","REGENERATE","RELATED_CONVERSATION","RELATED_CONVERSATION_GROUP","RELATIVE","REMOTE","REMOTE_PROC_TRANSACTIONS","REMOTE_SERVICE_NAME","REMOVE","REORGANIZE","REPAIR_ALLOW_DATA_LOSS","REPAIR_FAST","REPAIR_REBUILD","REPEATABLE","REPEATABLEREAD","REPLICA","REPLICATION","REQUEST_MAX_CPU_TIME_SEC","REQUEST_MAX_MEMORY_GRANT_PERCENT","REQUEST_MEMORY_GRANT_TIMEOUT_SEC","REQUIRED","RESAMPLE","RESEED","RESERVE_DISK_SPACE","RESET","RESOURCE","RESTART","RESTORE","RESTRICT","RESTRICTED_USER","RESULT","RESUME","RETAINDAYS","RETENTION","RETURN","RETURNS","REVERT","REVOKE","REWIND","REWINDONLY","ROBUST","ROLE","ROLLBACK","ROLLUP","ROOT","ROUTE","ROW","ROWCOUNT","ROWGUIDCOL","ROWLOCK","ROWS","ROWS_PER_BATCH","ROWTERMINATOR","ROWVERSION","RSA_1024","RSA_2048","RSA_512","RULE","SAFE","SAFETY","SAMPLE","SAVE","SCHEDULER","SCHEMA","SCHEMA_AND_DATA","SCHEMA_ONLY","SCHEMABINDING","SCHEME","SCROLL","SCROLL_LOCKS","SEARCH","SECOND","SECONDARY","SECONDARY_ONLY","SECONDARY_ROLE","SECONDS","SECRET","SECURITY_LOG","SECURITYAUDIT","SELECT","SELECTIVE","SELF","SEND","SENT","SEQUENCE","SERIALIZABLE","SERVER","SERVICE","SERVICE_BROKER","SERVICE_NAME","SESSION","SESSION_TIMEOUT","SET","SETS","SETUSER","SHOW_STATISTICS","SHOWCONTIG","SHOWPLAN","SHOWPLAN_ALL","SHOWPLAN_TEXT","SHOWPLAN_XML","SHRINKDATABASE","SHRINKFILE","SHUTDOWN","SID","SIGNATURE","SIMPLE","SINGLE_BLOB","SINGLE_CLOB","SINGLE_NCLOB","SINGLE_USER","SINGLETON","SIZE","SKIP","SMALLDATETIME","SMALLINT","SMALLMONEY","SNAPSHOT","SORT_IN_TEMPDB","SOURCE","SPARSE","SPATIAL","SPATIAL_WINDOW_MAX_CELLS","SPECIFICATION","SPLIT","SQL","SQL_VARIANT","SQLPERF","STANDBY","START","START_DATE","STARTED","STARTUP_STATE","STAT_HEADER","STATE","STATEMENT","STATIC","STATISTICAL_SEMANTICS","STATISTICS","STATISTICS_INCREMENTAL","STATISTICS_NORECOMPUTE","STATS","STATS_STREAM","STATUS","STATUSONLY","STOP","STOP_ON_ERROR","STOPAT","STOPATMARK","STOPBEFOREMARK","STOPLIST","STOPPED","SUBJECT","SUBSCRIPTION","SUPPORTED","SUSPEND","SWITCH","SYMMETRIC","SYNCHRONOUS_COMMIT","SYNONYM","SYSNAME","SYSTEM","TABLE","TABLERESULTS","TABLESAMPLE","TABLOCK","TABLOCKX","TAKE","TAPE","TARGET","TARGET_RECOVERY_TIME","TB","TCP","TEXT","TEXTIMAGE_ON","TEXTSIZE","THEN","THESAURUS","THROW","TIES","TIME","TIMEOUT","TIMER","TIMESTAMP","TINYINT","TO","TOP","TORN_PAGE_DETECTION","TRACEOFF","TRACEON","TRACESTATUS","TRACK_CAUSALITY","TRACK_COLUMNS_UPDATED","TRAN","TRANSACTION","TRANSFER","TRANSFORM_NOISE_WORDS","TRIGGER","TRIPLE_DES","TRIPLE_DES_3KEY","TRUE","TRUNCATE","TRUNCATEONLY","TRUSTWORTHY","TRY","TSQL","TWO_DIGIT_YEAR_CUTOFF","TYPE","TYPE_WARNING","UNBOUNDED","UNCHECKED","UNCOMMITTED","UNDEFINED","UNIQUE","UNIQUEIDENTIFIER","UNKNOWN","UNLIMITED","UNLOAD","UNSAFE","UPDATE","UPDATETEXT","UPDATEUSAGE","UPDLOCK","URL","USE","USED","USER","USEROPTIONS","USING","VALID_XML","VALIDATION","VALUE","VALUES","VARBINARY","VARCHAR","VARYING","VERIFYONLY","VERSION","VIEW","VIEW_METADATA","VIEWS","VISIBILITY","WAIT_AT_LOW_PRIORITY","WAITFOR","WEEK","WEIGHT","WELL_FORMED_XML","WHEN","WHERE","WHILE","WINDOWS","WITH","WITHIN","WITHOUT","WITNESS","WORK","WORKLOAD","WRITETEXT","XACT_ABORT","XLOCK","XMAX","XMIN","XML","XMLDATA","XMLNAMESPACES","XMLSCHEMA","XQUERY","XSINIL","YEAR","YMAX","YMIN"],operators:["ALL","AND","ANY","BETWEEN","EXISTS","IN","LIKE","NOT","OR","SOME","EXCEPT","INTERSECT","UNION","APPLY","CROSS","FULL","INNER","JOIN","LEFT","OUTER","RIGHT","CONTAINS","FREETEXT","IS","NULL","PIVOT","UNPIVOT","MATCHED"],builtinFunctions:["AVG","CHECKSUM_AGG","COUNT","COUNT_BIG","GROUPING","GROUPING_ID","MAX","MIN","SUM","STDEV","STDEVP","VAR","VARP","CUME_DIST","FIRST_VALUE","LAG","LAST_VALUE","LEAD","PERCENTILE_CONT","PERCENTILE_DISC","PERCENT_RANK","COLLATE","COLLATIONPROPERTY","TERTIARY_WEIGHTS","FEDERATION_FILTERING_VALUE","CAST","CONVERT","PARSE","TRY_CAST","TRY_CONVERT","TRY_PARSE","ASYMKEY_ID","ASYMKEYPROPERTY","CERTPROPERTY","CERT_ID","CRYPT_GEN_RANDOM","DECRYPTBYASYMKEY","DECRYPTBYCERT","DECRYPTBYKEY","DECRYPTBYKEYAUTOASYMKEY","DECRYPTBYKEYAUTOCERT","DECRYPTBYPASSPHRASE","ENCRYPTBYASYMKEY","ENCRYPTBYCERT","ENCRYPTBYKEY","ENCRYPTBYPASSPHRASE","HASHBYTES","IS_OBJECTSIGNED","KEY_GUID","KEY_ID","KEY_NAME","SIGNBYASYMKEY","SIGNBYCERT","SYMKEYPROPERTY","VERIFYSIGNEDBYCERT","VERIFYSIGNEDBYASYMKEY","CURSOR_STATUS","DATALENGTH","IDENT_CURRENT","IDENT_INCR","IDENT_SEED","IDENTITY","SQL_VARIANT_PROPERTY","CURRENT_TIMESTAMP","DATEADD","DATEDIFF","DATEFROMPARTS","DATENAME","DATEPART","DATETIME2FROMPARTS","DATETIMEFROMPARTS","DATETIMEOFFSETFROMPARTS","DAY","EOMONTH","GETDATE","GETUTCDATE","ISDATE","MONTH","SMALLDATETIMEFROMPARTS","SWITCHOFFSET","SYSDATETIME","SYSDATETIMEOFFSET","SYSUTCDATETIME","TIMEFROMPARTS","TODATETIMEOFFSET","YEAR","CHOOSE","COALESCE","IIF","NULLIF","ABS","ACOS","ASIN","ATAN","ATN2","CEILING","COS","COT","DEGREES","EXP","FLOOR","LOG","LOG10","PI","POWER","RADIANS","RAND","ROUND","SIGN","SIN","SQRT","SQUARE","TAN","APP_NAME","APPLOCK_MODE","APPLOCK_TEST","ASSEMBLYPROPERTY","COL_LENGTH","COL_NAME","COLUMNPROPERTY","DATABASE_PRINCIPAL_ID","DATABASEPROPERTYEX","DB_ID","DB_NAME","FILE_ID","FILE_IDEX","FILE_NAME","FILEGROUP_ID","FILEGROUP_NAME","FILEGROUPPROPERTY","FILEPROPERTY","FULLTEXTCATALOGPROPERTY","FULLTEXTSERVICEPROPERTY","INDEX_COL","INDEXKEY_PROPERTY","INDEXPROPERTY","OBJECT_DEFINITION","OBJECT_ID","OBJECT_NAME","OBJECT_SCHEMA_NAME","OBJECTPROPERTY","OBJECTPROPERTYEX","ORIGINAL_DB_NAME","PARSENAME","SCHEMA_ID","SCHEMA_NAME","SCOPE_IDENTITY","SERVERPROPERTY","STATS_DATE","TYPE_ID","TYPE_NAME","TYPEPROPERTY","DENSE_RANK","NTILE","RANK","ROW_NUMBER","PUBLISHINGSERVERNAME","OPENDATASOURCE","OPENQUERY","OPENROWSET","OPENXML","CERTENCODED","CERTPRIVATEKEY","CURRENT_USER","HAS_DBACCESS","HAS_PERMS_BY_NAME","IS_MEMBER","IS_ROLEMEMBER","IS_SRVROLEMEMBER","LOGINPROPERTY","ORIGINAL_LOGIN","PERMISSIONS","PWDENCRYPT","PWDCOMPARE","SESSION_USER","SESSIONPROPERTY","SUSER_ID","SUSER_NAME","SUSER_SID","SUSER_SNAME","SYSTEM_USER","USER","USER_ID","USER_NAME","ASCII","CHAR","CHARINDEX","CONCAT","DIFFERENCE","FORMAT","LEFT","LEN","LOWER","LTRIM","NCHAR","PATINDEX","QUOTENAME","REPLACE","REPLICATE","REVERSE","RIGHT","RTRIM","SOUNDEX","SPACE","STR","STUFF","SUBSTRING","UNICODE","UPPER","BINARY_CHECKSUM","CHECKSUM","CONNECTIONPROPERTY","CONTEXT_INFO","CURRENT_REQUEST_ID","ERROR_LINE","ERROR_NUMBER","ERROR_MESSAGE","ERROR_PROCEDURE","ERROR_SEVERITY","ERROR_STATE","FORMATMESSAGE","GETANSINULL","GET_FILESTREAM_TRANSACTION_CONTEXT","HOST_ID","HOST_NAME","ISNULL","ISNUMERIC","MIN_ACTIVE_ROWVERSION","NEWID","NEWSEQUENTIALID","ROWCOUNT_BIG","XACT_STATE","TEXTPTR","TEXTVALID","COLUMNS_UPDATED","EVENTDATA","TRIGGER_NESTLEVEL","UPDATE","CHANGETABLE","CHANGE_TRACKING_CONTEXT","CHANGE_TRACKING_CURRENT_VERSION","CHANGE_TRACKING_IS_COLUMN_IN_MASK","CHANGE_TRACKING_MIN_VALID_VERSION","CONTAINSTABLE","FREETEXTTABLE","SEMANTICKEYPHRASETABLE","SEMANTICSIMILARITYDETAILSTABLE","SEMANTICSIMILARITYTABLE","FILETABLEROOTPATH","GETFILENAMESPACEPATH","GETPATHLOCATOR","PATHNAME","GET_TRANSMISSION_STATUS"],builtinVariables:["@@DATEFIRST","@@DBTS","@@LANGID","@@LANGUAGE","@@LOCK_TIMEOUT","@@MAX_CONNECTIONS","@@MAX_PRECISION","@@NESTLEVEL","@@OPTIONS","@@REMSERVER","@@SERVERNAME","@@SERVICENAME","@@SPID","@@TEXTSIZE","@@VERSION","@@CURSOR_ROWS","@@FETCH_STATUS","@@DATEFIRST","@@PROCID","@@ERROR","@@IDENTITY","@@ROWCOUNT","@@TRANCOUNT","@@CONNECTIONS","@@CPU_BUSY","@@IDLE","@@IO_BUSY","@@PACKET_ERRORS","@@PACK_RECEIVED","@@PACK_SENT","@@TIMETICKS","@@TOTAL_ERRORS","@@TOTAL_READ","@@TOTAL_WRITE"],pseudoColumns:["$ACTION","$IDENTITY","$ROWGUID","$PARTITION"],tokenizer:{root:[{include:"@comments"},{include:"@whitespace"},{include:"@pseudoColumns"},{include:"@numbers"},{include:"@strings"},{include:"@complexIdentifiers"},{include:"@scopes"},[/[;,.]/,"delimiter"],[/[()]/,"@brackets"],[/[\w@#$]+/,{cases:{"@keywords":"keyword","@operators":"operator","@builtinVariables":"predefined","@builtinFunctions":"predefined","@default":"identifier"}}],[/[<>=!%&+\-*/|~^]/,"operator"]],whitespace:[[/\s+/,"white"]],comments:[[/--+.*/,"comment"],[/\/\*/,{token:"comment.quote",next:"@comment"}]],comment:[[/[^*/]+/,"comment"],[/\*\//,{token:"comment.quote",next:"@pop"}],[/./,"comment"]],pseudoColumns:[[/[$][A-Za-z_][\w@#$]*/,{cases:{"@pseudoColumns":"predefined","@default":"identifier"}}]],numbers:[[/0[xX][0-9a-fA-F]*/,"number"],[/[$][+-]*\d*(\.\d*)?/,"number"],[/((\d+(\.\d*)?)|(\.\d+))([eE][\-+]?\d+)?/,"number"]],strings:[[/N'/,{token:"string",next:"@string"}],[/'/,{token:"string",next:"@string"}]],string:[[/[^']+/,"string"],[/''/,"string"],[/'/,{token:"string",next:"@pop"}]],complexIdentifiers:[[/\[/,{token:"identifier.quote",next:"@bracketedIdentifier"}],[/"/,{token:"identifier.quote",next:"@quotedIdentifier"}]],bracketedIdentifier:[[/[^\]]+/,"identifier"],[/]]/,"identifier"],[/]/,{token:"identifier.quote",next:"@pop"}]],quotedIdentifier:[[/[^"]+/,"identifier"],[/""/,"identifier"],[/"/,{token:"identifier.quote",next:"@pop"}]],scopes:[[/BEGIN\s+(DISTRIBUTED\s+)?TRAN(SACTION)?\b/i,"keyword"],[/BEGIN\s+TRY\b/i,{token:"keyword.try"}],[/END\s+TRY\b/i,{token:"keyword.try"}],[/BEGIN\s+CATCH\b/i,{token:"keyword.catch"}],[/END\s+CATCH\b/i,{token:"keyword.catch"}],[/(BEGIN|CASE)\b/i,{token:"keyword.block"}],[/END\b/i,{token:"keyword.block"}],[/WHEN\b/i,{token:"keyword.choice"}],[/THEN\b/i,{token:"keyword.choice"}]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/st/st.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/st/st.js new file mode 100644 index 0000000000..ffb986ffb9 --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/st/st.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/st/st",["require","exports"],(function(e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.language=n.conf=void 0,n.conf={comments:{lineComment:"//",blockComment:["(*","*)"]},brackets:[["{","}"],["[","]"],["(",")"],["var","end_var"],["var_input","end_var"],["var_output","end_var"],["var_in_out","end_var"],["var_temp","end_var"],["var_global","end_var"],["var_access","end_var"],["var_external","end_var"],["type","end_type"],["struct","end_struct"],["program","end_program"],["function","end_function"],["function_block","end_function_block"],["action","end_action"],["step","end_step"],["initial_step","end_step"],["transaction","end_transaction"],["configuration","end_configuration"],["tcp","end_tcp"],["recource","end_recource"],["channel","end_channel"],["library","end_library"],["folder","end_folder"],["binaries","end_binaries"],["includes","end_includes"],["sources","end_sources"]],autoClosingPairs:[{open:"[",close:"]"},{open:"{",close:"}"},{open:"(",close:")"},{open:"/*",close:"*/"},{open:"'",close:"'",notIn:["string_sq"]},{open:'"',close:'"',notIn:["string_dq"]},{open:"var_input",close:"end_var"},{open:"var_output",close:"end_var"},{open:"var_in_out",close:"end_var"},{open:"var_temp",close:"end_var"},{open:"var_global",close:"end_var"},{open:"var_access",close:"end_var"},{open:"var_external",close:"end_var"},{open:"type",close:"end_type"},{open:"struct",close:"end_struct"},{open:"program",close:"end_program"},{open:"function",close:"end_function"},{open:"function_block",close:"end_function_block"},{open:"action",close:"end_action"},{open:"step",close:"end_step"},{open:"initial_step",close:"end_step"},{open:"transaction",close:"end_transaction"},{open:"configuration",close:"end_configuration"},{open:"tcp",close:"end_tcp"},{open:"recource",close:"end_recource"},{open:"channel",close:"end_channel"},{open:"library",close:"end_library"},{open:"folder",close:"end_folder"},{open:"binaries",close:"end_binaries"},{open:"includes",close:"end_includes"},{open:"sources",close:"end_sources"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"var",close:"end_var"},{open:"var_input",close:"end_var"},{open:"var_output",close:"end_var"},{open:"var_in_out",close:"end_var"},{open:"var_temp",close:"end_var"},{open:"var_global",close:"end_var"},{open:"var_access",close:"end_var"},{open:"var_external",close:"end_var"},{open:"type",close:"end_type"},{open:"struct",close:"end_struct"},{open:"program",close:"end_program"},{open:"function",close:"end_function"},{open:"function_block",close:"end_function_block"},{open:"action",close:"end_action"},{open:"step",close:"end_step"},{open:"initial_step",close:"end_step"},{open:"transaction",close:"end_transaction"},{open:"configuration",close:"end_configuration"},{open:"tcp",close:"end_tcp"},{open:"recource",close:"end_recource"},{open:"channel",close:"end_channel"},{open:"library",close:"end_library"},{open:"folder",close:"end_folder"},{open:"binaries",close:"end_binaries"},{open:"includes",close:"end_includes"},{open:"sources",close:"end_sources"}],folding:{markers:{start:new RegExp("^\\s*#pragma\\s+region\\b"),end:new RegExp("^\\s*#pragma\\s+endregion\\b")}}},n.language={defaultToken:"",tokenPostfix:".st",ignoreCase:!0,brackets:[{token:"delimiter.curly",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"}],keywords:["if","end_if","elsif","else","case","of","to","__try","__catch","__finally","do","with","by","while","repeat","end_while","end_repeat","end_case","for","end_for","task","retain","non_retain","constant","with","at","exit","return","interval","priority","address","port","on_channel","then","iec","file","uses","version","packagetype","displayname","copyright","summary","vendor","common_source","from","extends"],constant:["false","true","null"],defineKeywords:["var","var_input","var_output","var_in_out","var_temp","var_global","var_access","var_external","end_var","type","end_type","struct","end_struct","program","end_program","function","end_function","function_block","end_function_block","interface","end_interface","method","end_method","property","end_property","namespace","end_namespace","configuration","end_configuration","tcp","end_tcp","resource","end_resource","channel","end_channel","library","end_library","folder","end_folder","binaries","end_binaries","includes","end_includes","sources","end_sources","action","end_action","step","initial_step","end_step","transaction","end_transaction"],typeKeywords:["int","sint","dint","lint","usint","uint","udint","ulint","real","lreal","time","date","time_of_day","date_and_time","string","bool","byte","word","dword","array","pointer","lword"],operators:["=",">","<",":",":=","<=",">=","<>","&","+","-","*","**","MOD","^","or","and","not","xor","abs","acos","asin","atan","cos","exp","expt","ln","log","sin","sqrt","tan","sel","max","min","limit","mux","shl","shr","rol","ror","indexof","sizeof","adr","adrinst","bitadr","is_valid","ref","ref_to"],builtinVariables:[],builtinFunctions:["sr","rs","tp","ton","tof","eq","ge","le","lt","ne","round","trunc","ctd","Ñtu","ctud","r_trig","f_trig","move","concat","delete","find","insert","left","len","replace","right","rtc"],symbols:/[=>`?!+*\\\/]/,operatorstart:/[\/=\-+!*%<>&|^~?\u00A1-\u00A7\u00A9\u00AB\u00AC\u00AE\u00B0-\u00B1\u00B6\u00BB\u00BF\u00D7\u00F7\u2016-\u2017\u2020-\u2027\u2030-\u203E\u2041-\u2053\u2055-\u205E\u2190-\u23FF\u2500-\u2775\u2794-\u2BFF\u2E00-\u2E7F\u3001-\u3003\u3008-\u3030]/,operatorend:/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE00-\uFE0F\uFE20-\uFE2F\uE0100-\uE01EF]/,operators:/(@operatorstart)((@operatorstart)|(@operatorend))*/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[{include:"@whitespace"},{include:"@comment"},{include:"@attribute"},{include:"@literal"},{include:"@keyword"},{include:"@invokedmethod"},{include:"@symbol"}],whitespace:[[/\s+/,"white"],[/"""/,"string.quote","@endDblDocString"]],endDblDocString:[[/[^"]+/,"string"],[/\\"/,"string"],[/"""/,"string.quote","@popall"],[/"/,"string"]],symbol:[[/[{}()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/[.]/,"delimiter"],[/@operators/,"operator"],[/@symbols/,"operator"]],comment:[[/\/\/\/.*$/,"comment.doc"],[/\/\*\*/,"comment.doc","@commentdocbody"],[/\/\/.*$/,"comment"],[/\/\*/,"comment","@commentbody"]],commentdocbody:[[/\/\*/,"comment","@commentbody"],[/\*\//,"comment.doc","@pop"],[/\:[a-zA-Z]+\:/,"comment.doc.param"],[/./,"comment.doc"]],commentbody:[[/\/\*/,"comment","@commentbody"],[/\*\//,"comment","@pop"],[/./,"comment"]],attribute:[[/\@@identifier/,{cases:{"@attributes":"keyword.control","@default":""}}]],literal:[[/"/,{token:"string.quote",next:"@stringlit"}],[/0[b]([01]_?)+/,"number.binary"],[/0[o]([0-7]_?)+/,"number.octal"],[/0[x]([0-9a-fA-F]_?)+([pP][\-+](\d_?)+)?/,"number.hex"],[/(\d_?)*\.(\d_?)+([eE][\-+]?(\d_?)+)?/,"number.float"],[/(\d_?)+/,"number"]],stringlit:[[/\\\(/,{token:"operator",next:"@interpolatedexpression"}],[/@escapes/,"string"],[/\\./,"string.escape.invalid"],[/"/,{token:"string.quote",next:"@pop"}],[/./,"string"]],interpolatedexpression:[[/\(/,{token:"operator",next:"@interpolatedexpression"}],[/\)/,{token:"operator",next:"@pop"}],{include:"@literal"},{include:"@keyword"},{include:"@symbol"}],keyword:[[/`/,{token:"operator",next:"@escapedkeyword"}],[/@identifier/,{cases:{"@keywords":"keyword","[A-Z][a-zA-Z0-9$]*":"type.identifier","@default":"identifier"}}]],escapedkeyword:[[/`/,{token:"operator",next:"@pop"}],[/./,"identifier"]],invokedmethod:[[/([.])(@identifier)/,{cases:{$2:["delimeter","type.identifier"],"@default":""}}]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/systemverilog/systemverilog.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/systemverilog/systemverilog.js new file mode 100644 index 0000000000..1e107cd4ef --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/systemverilog/systemverilog.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/systemverilog/systemverilog",["require","exports"],(function(e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.language=n.conf=void 0,n.conf={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"],["begin","end"],["case","endcase"],["casex","endcase"],["casez","endcase"],["checker","endchecker"],["class","endclass"],["clocking","endclocking"],["config","endconfig"],["function","endfunction"],["generate","endgenerate"],["group","endgroup"],["interface","endinterface"],["module","endmodule"],["package","endpackage"],["primitive","endprimitive"],["program","endprogram"],["property","endproperty"],["specify","endspecify"],["sequence","endsequence"],["table","endtable"],["task","endtask"]],autoClosingPairs:[{open:"[",close:"]"},{open:"{",close:"}"},{open:"(",close:")"},{open:"'",close:"'",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{offSide:!1,markers:{start:new RegExp("^(?:\\s*|.*(?!\\/[\\/\\*])[^\\w])(?:begin|case(x|z)?|class|clocking|config|covergroup|function|generate|interface|module|package|primitive|property|program|sequence|specify|table|task)\\b"),end:new RegExp("^(?:\\s*|.*(?!\\/[\\/\\*])[^\\w])(?:end|endcase|endclass|endclocking|endconfig|endgroup|endfunction|endgenerate|endinterface|endmodule|endpackage|endprimitive|endproperty|endprogram|endsequence|endspecify|endtable|endtask)\\b")}}},n.language={defaultToken:"",tokenPostfix:".sv",brackets:[{token:"delimiter.curly",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"},{token:"delimiter.angle",open:"<",close:">"}],keywords:["accept_on","alias","always","always_comb","always_ff","always_latch","and","assert","assign","assume","automatic","before","begin","bind","bins","binsof","bit","break","buf","bufif0","bufif1","byte","case","casex","casez","cell","chandle","checker","class","clocking","cmos","config","const","constraint","context","continue","cover","covergroup","coverpoint","cross","deassign","default","defparam","design","disable","dist","do","edge","else","end","endcase","endchecker","endclass","endclocking","endconfig","endfunction","endgenerate","endgroup","endinterface","endmodule","endpackage","endprimitive","endprogram","endproperty","endspecify","endsequence","endtable","endtask","enum","event","eventually","expect","export","extends","extern","final","first_match","for","force","foreach","forever","fork","forkjoin","function","generate","genvar","global","highz0","highz1","if","iff","ifnone","ignore_bins","illegal_bins","implements","implies","import","incdir","include","initial","inout","input","inside","instance","int","integer","interconnect","interface","intersect","join","join_any","join_none","large","let","liblist","library","local","localparam","logic","longint","macromodule","matches","medium","modport","module","nand","negedge","nettype","new","nexttime","nmos","nor","noshowcancelled","not","notif0","notif1","null","or","output","package","packed","parameter","pmos","posedge","primitive","priority","program","property","protected","pull0","pull1","pulldown","pullup","pulsestyle_ondetect","pulsestyle_onevent","pure","rand","randc","randcase","randsequence","rcmos","real","realtime","ref","reg","reject_on","release","repeat","restrict","return","rnmos","rpmos","rtran","rtranif0","rtranif1","s_always","s_eventually","s_nexttime","s_until","s_until_with","scalared","sequence","shortint","shortreal","showcancelled","signed","small","soft","solve","specify","specparam","static","string","strong","strong0","strong1","struct","super","supply0","supply1","sync_accept_on","sync_reject_on","table","tagged","task","this","throughout","time","timeprecision","timeunit","tran","tranif0","tranif1","tri","tri0","tri1","triand","trior","trireg","type","typedef","union","unique","unique0","unsigned","until","until_with","untyped","use","uwire","var","vectored","virtual","void","wait","wait_order","wand","weak","weak0","weak1","while","wildcard","wire","with","within","wor","xnor","xor"],builtin_gates:["and","nand","nor","or","xor","xnor","buf","not","bufif0","bufif1","notif1","notif0","cmos","nmos","pmos","rcmos","rnmos","rpmos","tran","tranif1","tranif0","rtran","rtranif1","rtranif0"],operators:["=","+=","-=","*=","/=","%=","&=","|=","^=","<<=",">>+","<<<=",">>>=","?",":","+","-","!","~","&","~&","|","~|","^","~^","^~","+","-","*","/","%","==","!=","===","!==","==?","!=?","&&","||","**","<","<=",">",">=","&","|","^",">>","<<",">>>","<<<","++","--","->","<->","inside","dist","::","+:","-:","*>","&&&","|->","|=>","#=#"],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],{include:"@numbers"},[/[;,.]/,"delimiter"],{include:"@strings"}],identifier_or_keyword:[[/@identifier/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"identifier"}}]],numbers:[[/\d+?[\d_]*(?:\.[\d_]+)?[eE][\-+]?\d+/,"number.float"],[/\d+?[\d_]*\.[\d_]+(?:\s*@timeunits)?/,"number.float"],[/(?:\d+?[\d_]*\s*)?'[sS]?[dD]\s*[0-9xXzZ?]+?[0-9xXzZ?_]*/,"number"],[/(?:\d+?[\d_]*\s*)?'[sS]?[bB]\s*[0-1xXzZ?]+?[0-1xXzZ?_]*/,"number.binary"],[/(?:\d+?[\d_]*\s*)?'[sS]?[oO]\s*[0-7xXzZ?]+?[0-7xXzZ?_]*/,"number.octal"],[/(?:\d+?[\d_]*\s*)?'[sS]?[hH]\s*[0-9a-fA-FxXzZ?]+?[0-9a-fA-FxXzZ?_]*/,"number.hex"],[/1step/,"number"],[/[\dxXzZ]+?[\dxXzZ_]*(?:\s*@timeunits)?/,"number"],[/'[01xXzZ]+/,"number"]],module_instance:[{include:"@whitespace"},[/(#?)(\()/,["",{token:"@brackets",next:"@port_connection"}]],[/@identifier\s*[;={}\[\],]/,{token:"@rematch",next:"@pop"}],[/@symbols|[;={}\[\],]/,{token:"@rematch",next:"@pop"}],[/@identifier/,"type"],[/;/,"delimiter","@pop"]],port_connection:[{include:"@identifier_or_keyword"},{include:"@whitespace"},[/@systemcall/,"variable.predefined"],{include:"@numbers"},{include:"@strings"},[/[,]/,"delimiter"],[/\(/,"@brackets","@port_connection"],[/\)/,"@brackets","@pop"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],strings:[[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],include:[[/(\s*)(")([\w*\/*]*)(.\w*)(")/,["","string.include.identifier","string.include.identifier","string.include.identifier",{token:"string.include.identifier",next:"@pop"}]],[/(\s*)(<)([\w*\/*]*)(.\w*)(>)/,["","string.include.identifier","string.include.identifier","string.include.identifier",{token:"string.include.identifier",next:"@pop"}]]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/tcl/tcl.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/tcl/tcl.js new file mode 100644 index 0000000000..a00f67cdf8 --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/tcl/tcl.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/tcl/tcl",["require","exports"],(function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.language=t.conf=void 0,t.conf={brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},t.language={tokenPostfix:".tcl",specialFunctions:["set","unset","rename","variable","proc","coroutine","foreach","incr","append","lappend","linsert","lreplace"],mainFunctions:["if","then","elseif","else","case","switch","while","for","break","continue","return","package","namespace","catch","exit","eval","expr","uplevel","upvar"],builtinFunctions:["file","info","concat","join","lindex","list","llength","lrange","lsearch","lsort","split","array","parray","binary","format","regexp","regsub","scan","string","subst","dict","cd","clock","exec","glob","pid","pwd","close","eof","fblocked","fconfigure","fcopy","fileevent","flush","gets","open","puts","read","seek","socket","tell","interp","after","auto_execok","auto_load","auto_mkindex","auto_reset","bgerror","error","global","history","load","source","time","trace","unknown","unset","update","vwait","winfo","wm","bind","event","pack","place","grid","font","bell","clipboard","destroy","focus","grab","lower","option","raise","selection","send","tk","tkwait","tk_bisque","tk_focusNext","tk_focusPrev","tk_focusFollowsMouse","tk_popup","tk_setPalette"],symbols:/[=>\/\s]+)/g,comments:{blockComment:["{#","#}"]},brackets:[["{#","#}"],["{%","%}"],["{{","}}"],["(",")"],["[","]"],["\x3c!--","--\x3e"],["<",">"]],autoClosingPairs:[{open:"{# ",close:" #}"},{open:"{% ",close:" %}"},{open:"{{ ",close:" }}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:'"',close:'"'},{open:"'",close:"'"},{open:"<",close:">"}]},e.language={defaultToken:"",tokenPostfix:"",ignoreCase:!0,keywords:["apply","autoescape","block","deprecated","do","embed","extends","flush","for","from","if","import","include","macro","sandbox","set","use","verbatim","with","endapply","endautoescape","endblock","endembed","endfor","endif","endmacro","endsandbox","endset","endwith","true","false"],tokenizer:{root:[[/\s+/],[/{#/,"comment.twig","@commentState"],[/{%[-~]?/,"delimiter.twig","@blockState"],[/{{[-~]?/,"delimiter.twig","@variableState"],[/)/,["delimiter.html","tag.html","","delimiter.html"]],[/(<)(script)/,["delimiter.html",{token:"tag.html",next:"@script"}]],[/(<)(style)/,["delimiter.html",{token:"tag.html",next:"@style"}]],[/(<)((?:[\w\-]+:)?[\w\-]+)/,["delimiter.html",{token:"tag.html",next:"@otherTag"}]],[/(<\/)((?:[\w\-]+:)?[\w\-]+)/,["delimiter.html",{token:"tag.html",next:"@otherTag"}]],[/|>=|<=/,"operators.twig"],[/(starts with|ends with|matches)(\s+)/,["operators.twig",""]],[/(in)(\s+)/,["operators.twig",""]],[/(is)(\s+)/,["operators.twig",""]],[/\||~|:|\.{1,2}|\?{1,2}/,"operators.twig"],[/[^\W\d][\w]*/,{cases:{"@keywords":"keyword.twig","@default":"variable.twig"}}],[/\d+(\.\d+)?/,"number.twig"],[/\(|\)|\[|\]|{|}|,/,"delimiter.twig"],[/"([^#"\\]*(?:\\.[^#"\\]*)*)"|\'([^\'\\]*(?:\\.[^\'\\]*)*)\'/,"string.twig"],[/"/,"string.twig","@stringState"],[/=>/,"operators.twig"],[/=/,"operators.twig"]],doctype:[[/[^>]+/,"metatag.content.html"],[/>/,"metatag.html","@pop"]],comment:[[/-->/,"comment.html","@pop"],[/[^-]+/,"comment.content.html"],[/./,"comment.content.html"]],otherTag:[[/\/?>/,"delimiter.html","@pop"],[/"([^"]*)"/,"attribute.value.html"],[/'([^']*)'/,"attribute.value.html"],[/[\w\-]+/,"attribute.name.html"],[/=/,"delimiter.html"],[/[ \t\r\n]+/]],script:[[/type/,"attribute.name.html","@scriptAfterType"],[/"([^"]*)"/,"attribute.value.html"],[/'([^']*)'/,"attribute.value.html"],[/[\w\-]+/,"attribute.name.html"],[/=/,"delimiter.html"],[/>/,{token:"delimiter.html",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,["delimiter.html","tag.html",{token:"delimiter.html",next:"@pop"}]]],scriptAfterType:[[/=/,"delimiter.html","@scriptAfterTypeEquals"],[/>/,{token:"delimiter.html",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptAfterTypeEquals:[[/"([^"]*)"/,{token:"attribute.value.html",switchTo:"@scriptWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value.html",switchTo:"@scriptWithCustomType.$1"}],[/>/,{token:"delimiter.html",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptWithCustomType:[[/>/,{token:"delimiter.html",next:"@scriptEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value.html"],[/'([^']*)'/,"attribute.value.html"],[/[\w\-]+/,"attribute.name.html"],[/=/,"delimiter.html"],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptEmbedded:[[/<\/script/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/[^<]+/,""]],style:[[/type/,"attribute.name.html","@styleAfterType"],[/"([^"]*)"/,"attribute.value.html"],[/'([^']*)'/,"attribute.value.html"],[/[\w\-]+/,"attribute.name.html"],[/=/,"delimiter.html"],[/>/,{token:"delimiter.html",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,["delimiter.html","tag.html",{token:"delimiter.html",next:"@pop"}]]],styleAfterType:[[/=/,"delimiter.html","@styleAfterTypeEquals"],[/>/,{token:"delimiter.html",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleAfterTypeEquals:[[/"([^"]*)"/,{token:"attribute.value.html",switchTo:"@styleWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value.html",switchTo:"@styleWithCustomType.$1"}],[/>/,{token:"delimiter.html",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleWithCustomType:[[/>/,{token:"delimiter.html",next:"@styleEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value.html"],[/'([^']*)'/,"attribute.value.html"],[/[\w\-]+/,"attribute.name.html"],[/=/,"delimiter.html"],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleEmbedded:[[/<\/style/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/[^<]+/,""]]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/typescript/typescript.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/typescript/typescript.js new file mode 100644 index 0000000000..42ccd45cc0 --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/typescript/typescript.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/typescript/typescript",["require","exports","../fillers/monaco-editor-core"],(function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.language=t.conf=void 0,t.conf={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],onEnterRules:[{beforeText:/^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,afterText:/^\s*\*\/$/,action:{indentAction:n.languages.IndentAction.IndentOutdent,appendText:" * "}},{beforeText:/^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,action:{indentAction:n.languages.IndentAction.None,appendText:" * "}},{beforeText:/^(\t|(\ \ ))*\ \*(\ ([^\*]|\*(?!\/))*)?$/,action:{indentAction:n.languages.IndentAction.None,appendText:"* "}},{beforeText:/^(\t|(\ \ ))*\ \*\/\s*$/,action:{indentAction:n.languages.IndentAction.None,removeText:1}}],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"',notIn:["string"]},{open:"'",close:"'",notIn:["string","comment"]},{open:"`",close:"`",notIn:["string","comment"]},{open:"/**",close:" */",notIn:["string"]}],folding:{markers:{start:new RegExp("^\\s*//\\s*#?region\\b"),end:new RegExp("^\\s*//\\s*#?endregion\\b")}}},t.language={defaultToken:"invalid",tokenPostfix:".ts",keywords:["abstract","any","as","asserts","bigint","boolean","break","case","catch","class","continue","const","constructor","debugger","declare","default","delete","do","else","enum","export","extends","false","finally","for","from","function","get","if","implements","import","in","infer","instanceof","interface","is","keyof","let","module","namespace","never","new","null","number","object","package","private","protected","public","readonly","require","global","return","set","static","string","super","switch","symbol","this","throw","true","try","type","typeof","undefined","unique","unknown","var","void","while","with","yield","async","await","of"],operators:["<=",">=","==","!=","===","!==","=>","+","-","**","*","/","%","++","--","<<",">",">>>","&","|","^","!","~","&&","||","??","?",":","=","+=","-=","*=","**=","/=","%=","<<=",">>=",">>>=","&=","|=","^=","@"],symbols:/[=>](?!@symbols)/,"@brackets"],[/!(?=([^=]|$))/,"delimiter"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/(@digits)[eE]([\-+]?(@digits))?/,"number.float"],[/(@digits)\.(@digits)([eE][\-+]?(@digits))?/,"number.float"],[/0[xX](@hexdigits)n?/,"number.hex"],[/0[oO]?(@octaldigits)n?/,"number.octal"],[/0[bB](@binarydigits)n?/,"number.binary"],[/(@digits)n?/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string_double"],[/'/,"string","@string_single"],[/`/,"string","@string_backtick"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@jsdoc"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],jsdoc:[[/[^\/*]+/,"comment.doc"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],regexp:[[/(\{)(\d+(?:,\d*)?)(\})/,["regexp.escape.control","regexp.escape.control","regexp.escape.control"]],[/(\[)(\^?)(?=(?:[^\]\\\/]|\\.)+)/,["regexp.escape.control",{token:"regexp.escape.control",next:"@regexrange"}]],[/(\()(\?:|\?=|\?!)/,["regexp.escape.control","regexp.escape.control"]],[/[()]/,"regexp.escape.control"],[/@regexpctl/,"regexp.escape.control"],[/[^\\\/]/,"regexp"],[/@regexpesc/,"regexp.escape"],[/\\\./,"regexp.invalid"],[/(\/)([gimsuy]*)/,[{token:"regexp",bracket:"@close",next:"@pop"},"keyword.other"]]],regexrange:[[/-/,"regexp.escape.control"],[/\^/,"regexp.invalid"],[/@regexpesc/,"regexp.escape"],[/[^\]]/,"regexp"],[/\]/,{token:"regexp.escape.control",next:"@pop",bracket:"@close"}]],string_double:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],string_single:[[/[^\\']+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/'/,"string","@pop"]],string_backtick:[[/\$\{/,{token:"delimiter.bracket",next:"@bracketCounting"}],[/[^\\`$]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/`/,"string","@pop"]],bracketCounting:[[/\{/,"delimiter.bracket","@bracketCounting"],[/\}/,"delimiter.bracket","@pop"],{include:"common"}]}}})); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/vb/vb.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/vb/vb.js new file mode 100644 index 0000000000..e09b2f80dc --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/basic-languages/vb/vb.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-languages version: 2.3.0(57af10ae0184db4e0f7f9a92ff972629c39ccb53) + * Released under the MIT license + * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/vb/vb",["require","exports"],(function(e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.language=n.conf=void 0,n.conf={comments:{lineComment:"'",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"],["<",">"],["addhandler","end addhandler"],["class","end class"],["enum","end enum"],["event","end event"],["function","end function"],["get","end get"],["if","end if"],["interface","end interface"],["module","end module"],["namespace","end namespace"],["operator","end operator"],["property","end property"],["raiseevent","end raiseevent"],["removehandler","end removehandler"],["select","end select"],["set","end set"],["structure","end structure"],["sub","end sub"],["synclock","end synclock"],["try","end try"],["while","end while"],["with","end with"],["using","end using"],["do","loop"],["for","next"]],autoClosingPairs:[{open:"{",close:"}",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]},{open:"<",close:">",notIn:["string","comment"]}],folding:{markers:{start:new RegExp("^\\s*#Region\\b"),end:new RegExp("^\\s*#End Region\\b")}}},n.language={defaultToken:"",tokenPostfix:".vb",ignoreCase:!0,brackets:[{token:"delimiter.bracket",open:"{",close:"}"},{token:"delimiter.array",open:"[",close:"]"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.angle",open:"<",close:">"},{token:"keyword.tag-addhandler",open:"addhandler",close:"end addhandler"},{token:"keyword.tag-class",open:"class",close:"end class"},{token:"keyword.tag-enum",open:"enum",close:"end enum"},{token:"keyword.tag-event",open:"event",close:"end event"},{token:"keyword.tag-function",open:"function",close:"end function"},{token:"keyword.tag-get",open:"get",close:"end get"},{token:"keyword.tag-if",open:"if",close:"end if"},{token:"keyword.tag-interface",open:"interface",close:"end interface"},{token:"keyword.tag-module",open:"module",close:"end module"},{token:"keyword.tag-namespace",open:"namespace",close:"end namespace"},{token:"keyword.tag-operator",open:"operator",close:"end operator"},{token:"keyword.tag-property",open:"property",close:"end property"},{token:"keyword.tag-raiseevent",open:"raiseevent",close:"end raiseevent"},{token:"keyword.tag-removehandler",open:"removehandler",close:"end removehandler"},{token:"keyword.tag-select",open:"select",close:"end select"},{token:"keyword.tag-set",open:"set",close:"end set"},{token:"keyword.tag-structure",open:"structure",close:"end structure"},{token:"keyword.tag-sub",open:"sub",close:"end sub"},{token:"keyword.tag-synclock",open:"synclock",close:"end synclock"},{token:"keyword.tag-try",open:"try",close:"end try"},{token:"keyword.tag-while",open:"while",close:"end while"},{token:"keyword.tag-with",open:"with",close:"end with"},{token:"keyword.tag-using",open:"using",close:"end using"},{token:"keyword.tag-do",open:"do",close:"loop"},{token:"keyword.tag-for",open:"for",close:"next"}],keywords:["AddHandler","AddressOf","Alias","And","AndAlso","As","Async","Boolean","ByRef","Byte","ByVal","Call","Case","Catch","CBool","CByte","CChar","CDate","CDbl","CDec","Char","CInt","Class","CLng","CObj","Const","Continue","CSByte","CShort","CSng","CStr","CType","CUInt","CULng","CUShort","Date","Decimal","Declare","Default","Delegate","Dim","DirectCast","Do","Double","Each","Else","ElseIf","End","EndIf","Enum","Erase","Error","Event","Exit","False","Finally","For","Friend","Function","Get","GetType","GetXMLNamespace","Global","GoSub","GoTo","Handles","If","Implements","Imports","In","Inherits","Integer","Interface","Is","IsNot","Let","Lib","Like","Long","Loop","Me","Mod","Module","MustInherit","MustOverride","MyBase","MyClass","NameOf","Namespace","Narrowing","New","Next","Not","Nothing","NotInheritable","NotOverridable","Object","Of","On","Operator","Option","Optional","Or","OrElse","Out","Overloads","Overridable","Overrides","ParamArray","Partial","Private","Property","Protected","Public","RaiseEvent","ReadOnly","ReDim","RemoveHandler","Resume","Return","SByte","Select","Set","Shadows","Shared","Short","Single","Static","Step","Stop","String","Structure","Sub","SyncLock","Then","Throw","To","True","Try","TryCast","TypeOf","UInteger","ULong","UShort","Using","Variant","Wend","When","While","Widening","With","WithEvents","WriteOnly","Xor"],tagwords:["If","Sub","Select","Try","Class","Enum","Function","Get","Interface","Module","Namespace","Operator","Set","Structure","Using","While","With","Do","Loop","For","Next","Property","Continue","AddHandler","RemoveHandler","Event","RaiseEvent","SyncLock"],symbols:/[=>"]],autoClosingPairs:[{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'}],surroundingPairs:[{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'}],onEnterRules:[{beforeText:new RegExp("<([_:\\w][_:\\w-.\\d]*)([^/>]*(?!/)>)[^<]*$","i"),afterText:/^<\/([_:\w][_:\w-.\d]*)\s*>$/i,action:{indentAction:n.languages.IndentAction.IndentOutdent}},{beforeText:new RegExp("<(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$","i"),action:{indentAction:n.languages.IndentAction.Indent}}]},t.language={defaultToken:"",tokenPostfix:".xml",ignoreCase:!0,qualifiedName:/(?:[\w\.\-]+:)?[\w\.\-]+/,tokenizer:{root:[[/[^<&]+/,""],{include:"@whitespace"},[/(<)(@qualifiedName)/,[{token:"delimiter"},{token:"tag",next:"@tag"}]],[/(<\/)(@qualifiedName)(\s*)(>)/,[{token:"delimiter"},{token:"tag"},"",{token:"delimiter"}]],[/(<\?)(@qualifiedName)/,[{token:"delimiter"},{token:"metatag",next:"@tag"}]],[/(<\!)(@qualifiedName)/,[{token:"delimiter"},{token:"metatag",next:"@tag"}]],[/<\!\[CDATA\[/,{token:"delimiter.cdata",next:"@cdata"}],[/&\w+;/,"string.escape"]],cdata:[[/[^\]]+/,""],[/\]\]>/,{token:"delimiter.cdata",next:"@pop"}],[/\]/,""]],tag:[[/[ \t\r\n]+/,""],[/(@qualifiedName)(\s*=\s*)("[^"]*"|'[^']*')/,["attribute.name","","attribute.value"]],[/(@qualifiedName)(\s*=\s*)("[^">?\/]*|'[^'>?\/]*)(?=[\?\/]\>)/,["attribute.name","","attribute.value"]],[/(@qualifiedName)(\s*=\s*)("[^">]*|'[^'>]*)/,["attribute.name","","attribute.value"]],[/@qualifiedName/,"attribute.name"],[/\?>/,{token:"delimiter",next:"@pop"}],[/(\/)(>)/,[{token:"tag"},{token:"delimiter",next:"@pop"}]],[/>/,{token:"delimiter",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,""],[//,{token:"comment",next:"@pop"}],[/");y>=0&&(u.comment&&u.comment(a.substring(4,y)),a=a.substring(y+3),n=!1)}function _(){if(!!n){var y,L=a.indexOf("<");L>=0?(y=a.substring(0,L),a=a.substring(L)):(y=a,a=""),u.chars&&u.chars(y)}}function f(y,L,I,k){var E={},T=M(L),O=S.voids[T]||!!k;I.replace(g,A),O||r.push(T),u.start&&u.start(T,E,O);function A(B,F,D,R,W){D===void 0&&R===void 0&&W===void 0?E[F]=void 0:E[F]=N.decode(D||R||W||"")}}function v(y,L){var I,k=0,E=M(L);if(E)for(k=r.length-1;k>=0&&r[k]!==E;k--);if(k>=0){for(I=r.length-1;I>=k;I--)u.end&&u.end(r[I]);r.length=k}}}e.exports=s},{"./attributes":1,"./elements":3,"./lowercase":5,he:9}],8:[function(q,e,b){"use strict";var N=q("he"),M=q("./lowercase"),w=q("./attributes"),S=q("./elements");function C(d,g){var p,c,o=g||{};return l(),{start:a,end:u,chars:i};function s(h){d.push(h)}function a(h,m,_){var f=M(h);if(c.ignoring){n(f);return}if((o.allowedTags||[]).indexOf(f)===-1){n(f);return}if(o.filter&&!o.filter({tag:f,attrs:m})){n(f);return}s("<"),s(f),Object.keys(m).forEach(v),s(_?"/>":">");function v(y){var L=m[y],I=(o.allowedClasses||{})[f]||[],k=(o.allowedAttributes||{})[f]||[];k=k.concat((o.allowedAttributes||{})["*"]||[]);var E,T=M(y);T==="class"&&k.indexOf(T)===-1?(L=L.split(" ").filter(O).join(" ").trim(),E=L.length):E=k.indexOf(T)!==-1&&(w.uris[T]!==!0||r(L)),E&&(s(" "),s(y),typeof L=="string"&&(s('="'),s(N.encode(L)),s('"')));function O(A){return I&&I.indexOf(A)!==-1}}}function u(h){var m=M(h),_=(o.allowedTags||[]).indexOf(m)!==-1;_&&c.ignoring===!1?(s("")):t(m)}function r(h){var m=h[0];if(m==="#"||m==="/")return!0;var _=h.indexOf(":");if(_===-1)return!0;var f=h.indexOf("?");if(f!==-1&&_>f)return!0;var v=h.indexOf("#");if(v!==-1&&_>v)return!0;return o.allowedSchemes.some(y);function y(L){return h.indexOf(L+":")===0}}function i(h){c.ignoring===!1&&s(o.transformText?o.transformText(h):h)}function n(h){S.voids[h]||(c.ignoring===!1?c={ignoring:h,depth:1}:c.ignoring===h&&c.depth++)}function t(h){c.ignoring===h&&--c.depth<=0&&l()}function l(){c={ignoring:!1,depth:0}}}e.exports=C},{"./attributes":1,"./elements":3,"./lowercase":5,he:9}],9:[function(q,e,b){"use strict";var N={"&":"&","<":"<",">":">",'"':""","'":"'"},M={"&":"&","<":"<",">":">",""":'"',"'":"'"},w=/(&|<|>|"|')/g,S=/[&<>"']/g;function C(c){return N[c]}function d(c){return M[c]}function g(c){return c==null?"":String(c).replace(S,C)}function p(c){return c==null?"":String(c).replace(w,d)}g.options=p.options={},e.exports={encode:g,escape:g,decode:p,unescape:p,version:"1.0.0-browser"}},{}],10:[function(q,e,b){"use strict";function N(w){return w.reduce(M,{})}function M(w,S){return w[S]=!0,w}e.exports=N},{}]},{},[4]),define("vs/base/common/insane/insane",function(){return{insane:kt}}),define(Q[54],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Iterable=void 0;var b;(function(N){function M(h){return h&&typeof h=="object"&&typeof h[Symbol.iterator]=="function"}N.is=M;const w=Object.freeze([]);function S(){return w}N.empty=S;function*C(h){yield h}N.single=C;function d(h){return h||w}N.from=d;function g(h){return!h||h[Symbol.iterator]().next().done===!0}N.isEmpty=g;function p(h){return h[Symbol.iterator]().next().value}N.first=p;function c(h,m){for(const _ of h)if(m(_))return!0;return!1}N.some=c;function o(h,m){for(const _ of h)if(m(_))return _}N.find=o;function*s(h,m){for(const _ of h)m(_)&&(yield _)}N.filter=s;function*a(h,m){for(const _ of h)yield m(_)}N.map=a;function*u(...h){for(const m of h)for(const _ of m)yield _}N.concat=u;function*r(h){for(const m of h)for(const _ of m)yield _}N.concatNested=r;function i(h,m,_){let f=_;for(const v of h)f=m(f,v);return f}N.reduce=i;function*n(h,m,_=h.length){for(m<0&&(m+=h.length),_<0?_+=h.length:_>h.length&&(_=h.length);m<_;m++)yield h[m]}N.slice=n;function t(h,m=Number.POSITIVE_INFINITY){const _=[];if(m===0)return[_,h];const f=h[Symbol.iterator]();for(let v=0;vf===v){const f=h[Symbol.iterator](),v=m[Symbol.iterator]();for(;;){const y=f.next(),L=v.next();if(y.done!==L.done)return!1;if(y.done)return!0;if(!_(y.value,L.value))return!1}}N.equals=l})(b=e.Iterable||(e.Iterable={}))}),define(Q[39],J([0,1,12]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ResolvedKeybinding=e.ResolvedKeybindingPart=e.ChordKeybinding=e.SimpleKeybinding=e.createSimpleKeybinding=e.createKeybinding=e.KeyChord=e.KeyCodeUtils=void 0;class N{constructor(){this._keyCodeToStr=[],this._strToKeyCode=Object.create(null)}define(r,i){this._keyCodeToStr[r]=i,this._strToKeyCode[i.toLowerCase()]=r}keyCodeToStr(r){return this._keyCodeToStr[r]}strToKeyCode(r){return this._strToKeyCode[r.toLowerCase()]||0}}const M=new N,w=new N,S=new N;(function(){function u(r,i,n=i,t=n){M.define(r,i),w.define(r,n),S.define(r,t)}u(0,"unknown"),u(1,"Backspace"),u(2,"Tab"),u(3,"Enter"),u(4,"Shift"),u(5,"Ctrl"),u(6,"Alt"),u(7,"PauseBreak"),u(8,"CapsLock"),u(9,"Escape"),u(10,"Space"),u(11,"PageUp"),u(12,"PageDown"),u(13,"End"),u(14,"Home"),u(15,"LeftArrow","Left"),u(16,"UpArrow","Up"),u(17,"RightArrow","Right"),u(18,"DownArrow","Down"),u(19,"Insert"),u(20,"Delete"),u(21,"0"),u(22,"1"),u(23,"2"),u(24,"3"),u(25,"4"),u(26,"5"),u(27,"6"),u(28,"7"),u(29,"8"),u(30,"9"),u(31,"A"),u(32,"B"),u(33,"C"),u(34,"D"),u(35,"E"),u(36,"F"),u(37,"G"),u(38,"H"),u(39,"I"),u(40,"J"),u(41,"K"),u(42,"L"),u(43,"M"),u(44,"N"),u(45,"O"),u(46,"P"),u(47,"Q"),u(48,"R"),u(49,"S"),u(50,"T"),u(51,"U"),u(52,"V"),u(53,"W"),u(54,"X"),u(55,"Y"),u(56,"Z"),u(57,"Meta"),u(58,"ContextMenu"),u(59,"F1"),u(60,"F2"),u(61,"F3"),u(62,"F4"),u(63,"F5"),u(64,"F6"),u(65,"F7"),u(66,"F8"),u(67,"F9"),u(68,"F10"),u(69,"F11"),u(70,"F12"),u(71,"F13"),u(72,"F14"),u(73,"F15"),u(74,"F16"),u(75,"F17"),u(76,"F18"),u(77,"F19"),u(78,"NumLock"),u(79,"ScrollLock"),u(80,";",";","OEM_1"),u(81,"=","=","OEM_PLUS"),u(82,",",",","OEM_COMMA"),u(83,"-","-","OEM_MINUS"),u(84,".",".","OEM_PERIOD"),u(85,"/","/","OEM_2"),u(86,"`","`","OEM_3"),u(110,"ABNT_C1"),u(111,"ABNT_C2"),u(87,"[","[","OEM_4"),u(88,"\\","\\","OEM_5"),u(89,"]","]","OEM_6"),u(90,"'","'","OEM_7"),u(91,"OEM_8"),u(92,"OEM_102"),u(93,"NumPad0"),u(94,"NumPad1"),u(95,"NumPad2"),u(96,"NumPad3"),u(97,"NumPad4"),u(98,"NumPad5"),u(99,"NumPad6"),u(100,"NumPad7"),u(101,"NumPad8"),u(102,"NumPad9"),u(103,"NumPad_Multiply"),u(104,"NumPad_Add"),u(105,"NumPad_Separator"),u(106,"NumPad_Subtract"),u(107,"NumPad_Decimal"),u(108,"NumPad_Divide")})();var C;(function(u){function r(h){return M.keyCodeToStr(h)}u.toString=r;function i(h){return M.strToKeyCode(h)}u.fromString=i;function n(h){return w.keyCodeToStr(h)}u.toUserSettingsUS=n;function t(h){return S.keyCodeToStr(h)}u.toUserSettingsGeneral=t;function l(h){return w.strToKeyCode(h)||S.strToKeyCode(h)}u.fromUserSettings=l})(C=e.KeyCodeUtils||(e.KeyCodeUtils={}));function d(u,r){const i=(r&65535)<<16>>>0;return(u|i)>>>0}e.KeyChord=d;function g(u,r){if(u===0)return null;const i=(u&65535)>>>0,n=(u&4294901760)>>>16;return n!==0?new o([p(i,r),p(n,r)]):new o([p(i,r)])}e.createKeybinding=g;function p(u,r){const i=!!(u&2048),n=!!(u&256),t=r===2?n:i,l=!!(u&1024),h=!!(u&512),m=r===2?i:n,_=u&255;return new c(t,l,h,m,_)}e.createSimpleKeybinding=p;class c{constructor(r,i,n,t,l){this.ctrlKey=r,this.shiftKey=i,this.altKey=n,this.metaKey=t,this.keyCode=l}equals(r){return this.ctrlKey===r.ctrlKey&&this.shiftKey===r.shiftKey&&this.altKey===r.altKey&&this.metaKey===r.metaKey&&this.keyCode===r.keyCode}isModifierKey(){return this.keyCode===0||this.keyCode===5||this.keyCode===57||this.keyCode===6||this.keyCode===4}toChord(){return new o([this])}isDuplicateModifierCase(){return this.ctrlKey&&this.keyCode===5||this.shiftKey&&this.keyCode===4||this.altKey&&this.keyCode===6||this.metaKey&&this.keyCode===57}}e.SimpleKeybinding=c;class o{constructor(r){if(r.length===0)throw b.illegalArgument("parts");this.parts=r}}e.ChordKeybinding=o;class s{constructor(r,i,n,t,l,h){this.ctrlKey=r,this.shiftKey=i,this.altKey=n,this.metaKey=t,this.keyLabel=l,this.keyAriaLabel=h}}e.ResolvedKeybindingPart=s;class a{}e.ResolvedKeybinding=a}),define(Q[150],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Lazy=void 0;class b{constructor(M){this.executor=M,this._didRun=!1}getValue(){if(!this._didRun)try{this._value=this.executor()}catch(M){this._error=M}finally{this._didRun=!0}if(this._error)throw this._error;return this._value}get rawValue(){return this._value}}e.Lazy=b}),define(Q[2],J([0,1,54]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ImmortalReference=e.MutableDisposable=e.Disposable=e.DisposableStore=e.toDisposable=e.combinedDisposable=e.dispose=e.isDisposable=e.MultiDisposeError=e.trackDisposable=void 0;const N=!1;let M=null;if(N){const r="__is_disposable_tracked__";M=new class{trackDisposable(i){const n=new Error("Potentially leaked disposable").stack;setTimeout(()=>{i[r]||console.log(n)},3e3)}markTracked(i){if(i&&i!==s.None)try{i[r]=!0}catch(n){}}}}function w(r){!M||M.markTracked(r)}function S(r){return M&&M.trackDisposable(r),r}e.trackDisposable=S;class C extends Error{constructor(i){super(`Encountered errors while disposing of store. Errors: [${i.join(", ")}]`);this.errors=i}}e.MultiDisposeError=C;function d(r){return typeof r.dispose=="function"&&r.dispose.length===0}e.isDisposable=d;function g(r){if(b.Iterable.is(r)){let i=[];for(const n of r)if(n){w(n);try{n.dispose()}catch(t){i.push(t)}}if(i.length===1)throw i[0];if(i.length>1)throw new C(i);return Array.isArray(r)?[]:r}else if(r)return w(r),r.dispose(),r}e.dispose=g;function p(...r){return r.forEach(w),c(()=>g(r))}e.combinedDisposable=p;function c(r){const i=S({dispose:()=>{w(i),r()}});return i}e.toDisposable=c;class o{constructor(){this._toDispose=new Set,this._isDisposed=!1}dispose(){this._isDisposed||(w(this),this._isDisposed=!0,this.clear())}clear(){try{g(this._toDispose.values())}finally{this._toDispose.clear()}}add(i){if(!i)return i;if(i===this)throw new Error("Cannot register a disposable on itself!");return w(i),this._isDisposed?o.DISABLE_DISPOSED_WARNING||console.warn(new Error("Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!").stack):this._toDispose.add(i),i}}e.DisposableStore=o,o.DISABLE_DISPOSED_WARNING=!1;class s{constructor(){this._store=new o,S(this)}dispose(){w(this),this._store.dispose()}_register(i){if(i===this)throw new Error("Cannot register a disposable on itself!");return this._store.add(i)}}e.Disposable=s,s.None=Object.freeze({dispose(){}});class a{constructor(){this._isDisposed=!1,S(this)}get value(){return this._isDisposed?void 0:this._value}set value(i){var n;this._isDisposed||i===this._value||((n=this._value)===null||n===void 0||n.dispose(),i&&w(i),this._value=i)}clear(){this.value=void 0}dispose(){var i;this._isDisposed=!0,w(this),(i=this._value)===null||i===void 0||i.dispose(),this._value=void 0}}e.MutableDisposable=a;class u{constructor(i){this.object=i}dispose(){}}e.ImmortalReference=u}),define(Q[71],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.LinkedList=void 0;class b{constructor(w){this.element=w,this.next=b.Undefined,this.prev=b.Undefined}}b.Undefined=new b(void 0);class N{constructor(){this._first=b.Undefined,this._last=b.Undefined,this._size=0}get size(){return this._size}isEmpty(){return this._first===b.Undefined}clear(){this._first=b.Undefined,this._last=b.Undefined,this._size=0}unshift(w){return this._insert(w,!1)}push(w){return this._insert(w,!0)}_insert(w,S){const C=new b(w);if(this._first===b.Undefined)this._first=C,this._last=C;else if(S){const g=this._last;this._last=C,C.prev=g,g.next=C}else{const g=this._first;this._first=C,C.next=g,g.prev=C}this._size+=1;let d=!1;return()=>{d||(d=!0,this._remove(C))}}shift(){if(this._first!==b.Undefined){const w=this._first.element;return this._remove(this._first),w}}pop(){if(this._last!==b.Undefined){const w=this._last.element;return this._remove(this._last),w}}_remove(w){if(w.prev!==b.Undefined&&w.next!==b.Undefined){const S=w.prev;S.next=w.next,w.next.prev=S}else w.prev===b.Undefined&&w.next===b.Undefined?(this._first=b.Undefined,this._last=b.Undefined):w.next===b.Undefined?(this._last=this._last.prev,this._last.next=b.Undefined):w.prev===b.Undefined&&(this._first=this._first.next,this._first.prev=b.Undefined);this._size-=1}*[Symbol.iterator](){let w=this._first;for(;w!==b.Undefined;)yield w.element,w=w.next}}e.LinkedList=N}),function(q,e){typeof exports=="object"&&typeof module!="undefined"?module.exports=e():typeof define=="function"&&define.amd?define("vs/base/common/marked/marked",e):(q=typeof globalThis!="undefined"?globalThis:q||self,q.marked=e())}(this,function(){"use strict";function q(Se,we){for(var ye=0;yeSe.length)&&(we=Se.length);for(var ye=0,fe=new Array(we);ye=Se.length?{done:!0}:{done:!1,value:Se[fe++]}}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}return ye=Se[Symbol.iterator](),ye.next.bind(ye)}function w(Se){var we={exports:{}};return Se(we,we.exports),we.exports}var S=w(function(Se){function we(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}function ye(fe){Se.exports.defaults=fe}Se.exports={defaults:we(),getDefaults:we,changeDefaults:ye}}),C=/[&<>"']/,d=/[&<>"']/g,g=/[<>"']|&(?!#?\w+;)/,p=/[<>"']|&(?!#?\w+;)/g,c={"&":"&","<":"<",">":">",'"':""","'":"'"},o=function(we){return c[we]};function s(Se,we){if(we){if(C.test(Se))return Se.replace(d,o)}else if(g.test(Se))return Se.replace(p,o);return Se}var a=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;function u(Se){return Se.replace(a,function(we,ye){return ye=ye.toLowerCase(),ye==="colon"?":":ye.charAt(0)==="#"?ye.charAt(1)==="x"?String.fromCharCode(parseInt(ye.substring(2),16)):String.fromCharCode(+ye.substring(1)):""})}var r=/(^|[^\[])\^/g;function i(Se,we){Se=Se.source||Se,we=we||"";var ye={replace:function(de,ge){return ge=ge.source||ge,ge=ge.replace(r,"$1"),Se=Se.replace(de,ge),ye},getRegex:function(){return new RegExp(Se,we)}};return ye}var n=/[^\w:]/g,t=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function l(Se,we,ye){if(Se){var fe;try{fe=decodeURIComponent(u(ye)).replace(n,"").toLowerCase()}catch(de){return null}if(fe.indexOf("javascript:")===0||fe.indexOf("vbscript:")===0||fe.indexOf("data:")===0)return null}we&&!t.test(ye)&&(ye=v(we,ye));try{ye=encodeURI(ye).replace(/%25/g,"%")}catch(de){return null}return ye}var h={},m=/^[^:]+:\/*[^/]*$/,_=/^([^:]+:)[\s\S]*$/,f=/^([^:]+:\/*[^/]*)[\s\S]*$/;function v(Se,we){h[" "+Se]||(m.test(Se)?h[" "+Se]=Se+"/":h[" "+Se]=k(Se,"/",!0)),Se=h[" "+Se];var ye=Se.indexOf(":")===-1;return we.substring(0,2)==="//"?ye?we:Se.replace(_,"$1")+we:we.charAt(0)==="/"?ye?we:Se.replace(f,"$1")+we:Se+we}var y={exec:function(){}};function L(Se){for(var we=1,ye,fe;we=0&&ve[Ne]==="\\";)ke=!ke;return ke?"|":" |"}),fe=ye.split(/ \|/),de=0;if(fe.length>we)fe.splice(we);else for(;fe.length1;)we&1&&(ye+=Se),we>>=1,Se+=Se;return ye+Se}var A={escape:s,unescape:u,edit:i,cleanUrl:l,resolveUrl:v,noopTest:y,merge:L,splitCells:I,rtrim:k,findClosingBracket:E,checkSanitizeDeprecation:T,repeatString:O},B=S.defaults,F=A.rtrim,D=A.splitCells,R=A.escape,W=A.findClosingBracket;function x(Se,we,ye){var fe=we.href,de=we.title?R(we.title):null,ge=Se[1].replace(/\\([\[\]])/g,"$1");return Se[0].charAt(0)!=="!"?{type:"link",raw:ye,href:fe,title:de,text:ge}:{type:"image",raw:ye,href:fe,title:de,text:R(ge)}}function K(Se,we){var ye=Se.match(/^(\s+)(?:```)/);if(ye===null)return we;var fe=ye[1];return we.split(` +`).map(function(de){var ge=de.match(/^\s+/);if(ge===null)return de;var pe=ge[0];return pe.length>=fe.length?de.slice(fe.length):de}).join(` +`)}var Y=function(){function Se(ye){this.options=ye||B}var we=Se.prototype;return we.space=function(fe){var de=this.rules.block.newline.exec(fe);if(de)return de[0].length>1?{type:"space",raw:de[0]}:{raw:` +`}},we.code=function(fe){var de=this.rules.block.code.exec(fe);if(de){var ge=de[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:de[0],codeBlockStyle:"indented",text:this.options.pedantic?ge:F(ge,` +`)}}},we.fences=function(fe){var de=this.rules.block.fences.exec(fe);if(de){var ge=de[0],pe=K(ge,de[3]||"");return{type:"code",raw:ge,lang:de[2]?de[2].trim():de[2],text:pe}}},we.heading=function(fe){var de=this.rules.block.heading.exec(fe);if(de){var ge=de[2].trim();if(/#$/.test(ge)){var pe=F(ge,"#");(this.options.pedantic||!pe||/ $/.test(pe))&&(ge=pe.trim())}return{type:"heading",raw:de[0],depth:de[1].length,text:ge}}},we.nptable=function(fe){var de=this.rules.block.nptable.exec(fe);if(de){var ge={type:"table",header:D(de[1].replace(/^ *| *\| *$/g,"")),align:de[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:de[3]?de[3].replace(/\n$/,"").split(` +`):[],raw:de[0]};if(ge.header.length===ge.align.length){var pe=ge.align.length,ve;for(ve=0;ve ?/gm,"");return{type:"blockquote",raw:de[0],text:ge}}},we.list=function(fe){var de=this.rules.block.list.exec(fe);if(de){var ge=de[0],pe=de[2],ve=pe.length>1,ke={type:"list",raw:ge,ordered:ve,start:ve?+pe.slice(0,-1):"",loose:!1,items:[]},Ne=de[0].match(this.rules.block.item),Te=!1,Oe,Fe,Pe,xe,We,ze,Ke,Be,He=Ne.length;Pe=this.rules.block.listItemStart.exec(Ne[0]);for(var Ve=0;VePe[1].length:xe[1].length>Pe[0].length||xe[1].length>3){Ne.splice(Ve,2,Ne[Ve]+` +`+Ne[Ve+1]),Ve--,He--;continue}else(!this.options.pedantic||this.options.smartLists?xe[2][xe[2].length-1]!==pe[pe.length-1]:ve===(xe[2].length===1))&&(We=Ne.slice(Ve+1).join(` +`),ke.raw=ke.raw.substring(0,ke.raw.length-We.length),Ve=He-1);Pe=xe}Fe=Oe.length,Oe=Oe.replace(/^ *([*+-]|\d+[.)]) ?/,""),~Oe.indexOf(` + `)&&(Fe-=Oe.length,Oe=this.options.pedantic?Oe.replace(/^ {1,4}/gm,""):Oe.replace(new RegExp("^ {1,"+Fe+"}","gm"),"")),ze=Te||/\n\n(?!\s*$)/.test(Oe),Ve!==He-1&&(Te=Oe.charAt(Oe.length-1)===` +`,ze||(ze=Te)),ze&&(ke.loose=!0),this.options.gfm&&(Ke=/^\[[ xX]\] /.test(Oe),Be=void 0,Ke&&(Be=Oe[1]!==" ",Oe=Oe.replace(/^\[[ xX]\] +/,""))),ke.items.push({type:"list_item",raw:ge,task:Ke,checked:Be,loose:ze,text:Oe})}return ke}},we.html=function(fe){var de=this.rules.block.html.exec(fe);if(de)return{type:this.options.sanitize?"paragraph":"html",raw:de[0],pre:!this.options.sanitizer&&(de[1]==="pre"||de[1]==="script"||de[1]==="style"),text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(de[0]):R(de[0]):de[0]}},we.def=function(fe){var de=this.rules.block.def.exec(fe);if(de){de[3]&&(de[3]=de[3].substring(1,de[3].length-1));var ge=de[1].toLowerCase().replace(/\s+/g," ");return{tag:ge,raw:de[0],href:de[2],title:de[3]}}},we.table=function(fe){var de=this.rules.block.table.exec(fe);if(de){var ge={type:"table",header:D(de[1].replace(/^ *| *\| *$/g,"")),align:de[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:de[3]?de[3].replace(/\n$/,"").split(` +`):[]};if(ge.header.length===ge.align.length){ge.raw=de[0];var pe=ge.align.length,ve;for(ve=0;ve/i.test(pe[0])&&(de=!1),!ge&&/^<(pre|code|kbd|script)(\s|>)/i.test(pe[0])?ge=!0:ge&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(pe[0])&&(ge=!1),{type:this.options.sanitize?"text":"html",raw:pe[0],inLink:de,inRawBlock:ge,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(pe[0]):R(pe[0]):pe[0]}},we.link=function(fe){var de=this.rules.inline.link.exec(fe);if(de){var ge=de[2].trim();if(!this.options.pedantic&&/^$/.test(ge))return;var pe=F(ge.slice(0,-1),"\\");if((ge.length-pe.length)%2==0)return}else{var ve=W(de[2],"()");if(ve>-1){var ke=de[0].indexOf("!")===0?5:4,Ne=ke+de[1].length+ve;de[2]=de[2].substring(0,ve),de[0]=de[0].substring(0,Ne).trim(),de[3]=""}}var Te=de[2],Oe="";if(this.options.pedantic){var Fe=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(Te);Fe&&(Te=Fe[1],Oe=Fe[3])}else Oe=de[3]?de[3].slice(1,-1):"";return Te=Te.trim(),/^$/.test(ge)?Te=Te.slice(1):Te=Te.slice(1,-1)),x(de,{href:Te&&Te.replace(this.rules.inline._escapes,"$1"),title:Oe&&Oe.replace(this.rules.inline._escapes,"$1")},de[0])}},we.reflink=function(fe,de){var ge;if((ge=this.rules.inline.reflink.exec(fe))||(ge=this.rules.inline.nolink.exec(fe))){var pe=(ge[2]||ge[1]).replace(/\s+/g," ");if(pe=de[pe.toLowerCase()],!pe||!pe.href){var ve=ge[0].charAt(0);return{type:"text",raw:ve,text:ve}}return x(ge,pe,ge[0])}},we.emStrong=function(fe,de,ge){ge===void 0&&(ge="");var pe=this.rules.inline.emStrong.lDelim.exec(fe);if(!!pe&&!(pe[3]&&ge.match(/(?:[0-9A-Za-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08C7\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\u9FFC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7BF\uA7C2-\uA7CA\uA7F5-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF30-\uDF3B]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF2\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE96\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82C[\uDC00-\uDD1E\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDD\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])/))){var ve=pe[1]||pe[2]||"";if(!ve||ve&&(ge===""||this.rules.inline.punctuation.exec(ge))){var ke=pe[0].length-1,Ne,Te,Oe=ke,Fe=0,Pe=pe[0][0]==="*"?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(Pe.lastIndex=0,de=de.slice(-1*fe.length+ke);(pe=Pe.exec(de))!=null;)if(Ne=pe[1]||pe[2]||pe[3]||pe[4]||pe[5]||pe[6],!!Ne){if(Te=Ne.length,pe[3]||pe[4]){Oe+=Te;continue}else if((pe[5]||pe[6])&&ke%3&&!((ke+Te)%3)){Fe+=Te;continue}if(Oe-=Te,!(Oe>0)){if(Oe+Fe-Te<=0&&!de.slice(Pe.lastIndex).match(Pe)&&(Te=Math.min(Te,Te+Oe+Fe)),Math.min(ke,Te)%2)return{type:"em",raw:fe.slice(0,ke+pe.index+Te+1),text:fe.slice(1,ke+pe.index+Te)};if(Math.min(ke,Te)%2==0)return{type:"strong",raw:fe.slice(0,ke+pe.index+Te+1),text:fe.slice(2,ke+pe.index+Te-1)}}}}}},we.codespan=function(fe){var de=this.rules.inline.code.exec(fe);if(de){var ge=de[2].replace(/\n/g," "),pe=/[^ ]/.test(ge),ve=/^ /.test(ge)&&/ $/.test(ge);return pe&&ve&&(ge=ge.substring(1,ge.length-1)),ge=R(ge,!0),{type:"codespan",raw:de[0],text:ge}}},we.br=function(fe){var de=this.rules.inline.br.exec(fe);if(de)return{type:"br",raw:de[0]}},we.del=function(fe){var de=this.rules.inline.del.exec(fe);if(de)return{type:"del",raw:de[0],text:de[2]}},we.autolink=function(fe,de){var ge=this.rules.inline.autolink.exec(fe);if(ge){var pe,ve;return ge[2]==="@"?(pe=R(this.options.mangle?de(ge[1]):ge[1]),ve="mailto:"+pe):(pe=R(ge[1]),ve=pe),{type:"link",raw:ge[0],text:pe,href:ve,tokens:[{type:"text",raw:pe,text:pe}]}}},we.url=function(fe,de){var ge;if(ge=this.rules.inline.url.exec(fe)){var pe,ve;if(ge[2]==="@")pe=R(this.options.mangle?de(ge[0]):ge[0]),ve="mailto:"+pe;else{var ke;do ke=ge[0],ge[0]=this.rules.inline._backpedal.exec(ge[0])[0];while(ke!==ge[0]);pe=R(ge[0]),ge[1]==="www."?ve="http://"+pe:ve=pe}return{type:"link",raw:ge[0],text:pe,href:ve,tokens:[{type:"text",raw:pe,text:pe}]}}},we.inlineText=function(fe,de,ge){var pe=this.rules.inline.text.exec(fe);if(pe){var ve;return de?ve=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(pe[0]):R(pe[0]):pe[0]:ve=R(this.options.smartypants?ge(pe[0]):pe[0]),{type:"text",raw:pe[0],text:ve}}},Se}(),ee=A.noopTest,se=A.edit,ne=A.merge,le={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?! {0,3}bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,nptable:ee,table:ee,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html| +\n)[^\n]+)*)/,text:/^[^\n]+/};le._label=/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,le._title=/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/,le.def=se(le.def).replace("label",le._label).replace("title",le._title).getRegex(),le.bullet=/(?:[*+-]|\d{1,9}[.)])/,le.item=/^( *)(bull) ?[^\n]*(?:\n(?! *bull ?)[^\n]*)*/,le.item=se(le.item,"gm").replace(/bull/g,le.bullet).getRegex(),le.listItemStart=se(/^( *)(bull)/).replace("bull",le.bullet).getRegex(),le.list=se(le.list).replace(/bull/g,le.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+le.def.source+")").getRegex(),le._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",le._comment=/|$)/,le.html=se(le.html,"i").replace("comment",le._comment).replace("tag",le._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),le.paragraph=se(le._paragraph).replace("hr",le.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|!--)").replace("tag",le._tag).getRegex(),le.blockquote=se(le.blockquote).replace("paragraph",le.paragraph).getRegex(),le.normal=ne({},le),le.gfm=ne({},le.normal,{nptable:"^ *([^|\\n ].*\\|.*)\\n {0,3}([-:]+ *\\|[-| :]*)(?:\\n((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)",table:"^ *\\|(.+)\\n {0,3}\\|?( *[-:]+[-| :]*)(?:\\n *((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),le.gfm.nptable=se(le.gfm.nptable).replace("hr",le.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|!--)").replace("tag",le._tag).getRegex(),le.gfm.table=se(le.gfm.table).replace("hr",le.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|!--)").replace("tag",le._tag).getRegex(),le.pedantic=ne({},le.normal,{html:se(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",le._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:ee,paragraph:se(le.normal._paragraph).replace("hr",le.hr).replace("heading",` *#{1,6} *[^ +]`).replace("lheading",le.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});var X={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:ee,tag:"^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/\_\_[^_]*?\*[^_]*?\_\_|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,rDelimUnd:/\*\*[^*]*?\_[^*]*?\*\*|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:ee,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\?@\\[\\]`^{|}~",X.punctuation=se(X.punctuation).replace(/punctuation/g,X._punctuation).getRegex(),X.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,X.escapedEmSt=/\\\*|\\_/g,X._comment=se(le._comment).replace("(?:-->|$)","-->").getRegex(),X.emStrong.lDelim=se(X.emStrong.lDelim).replace(/punct/g,X._punctuation).getRegex(),X.emStrong.rDelimAst=se(X.emStrong.rDelimAst,"g").replace(/punct/g,X._punctuation).getRegex(),X.emStrong.rDelimUnd=se(X.emStrong.rDelimUnd,"g").replace(/punct/g,X._punctuation).getRegex(),X._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,X._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,X._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,X.autolink=se(X.autolink).replace("scheme",X._scheme).replace("email",X._email).getRegex(),X._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,X.tag=se(X.tag).replace("comment",X._comment).replace("attribute",X._attribute).getRegex(),X._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,X._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,X._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,X.link=se(X.link).replace("label",X._label).replace("href",X._href).replace("title",X._title).getRegex(),X.reflink=se(X.reflink).replace("label",X._label).getRegex(),X.reflinkSearch=se(X.reflinkSearch,"g").replace("reflink",X.reflink).replace("nolink",X.nolink).getRegex(),X.normal=ne({},X),X.pedantic=ne({},X.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:se(/^!?\[(label)\]\((.*?)\)/).replace("label",X._label).getRegex(),reflink:se(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",X._label).getRegex()}),X.gfm=ne({},X.normal,{escape:se(X.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\.5&&(fe="x"+fe.toString(16)),we+="&#"+fe+";";return we}var oe=function(){function Se(ye){this.tokens=[],this.tokens.links=Object.create(null),this.options=ye||P,this.options.tokenizer=this.options.tokenizer||new Y,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options;var fe={block:V.normal,inline:U.normal};this.options.pedantic?(fe.block=V.pedantic,fe.inline=U.pedantic):this.options.gfm&&(fe.block=V.gfm,this.options.breaks?fe.inline=U.breaks:fe.inline=U.gfm),this.tokenizer.rules=fe}Se.lex=function(fe,de){var ge=new Se(de);return ge.lex(fe)},Se.lexInline=function(fe,de){var ge=new Se(de);return ge.inlineTokens(fe)};var we=Se.prototype;return we.lex=function(fe){return fe=fe.replace(/\r\n|\r/g,` +`).replace(/\t/g," "),this.blockTokens(fe,this.tokens,!0),this.inline(this.tokens),this.tokens},we.blockTokens=function(fe,de,ge){de===void 0&&(de=[]),ge===void 0&&(ge=!0),this.options.pedantic&&(fe=fe.replace(/^ +$/gm,""));for(var pe,ve,ke,Ne;fe;){if(pe=this.tokenizer.space(fe)){fe=fe.substring(pe.raw.length),pe.type&&de.push(pe);continue}if(pe=this.tokenizer.code(fe)){fe=fe.substring(pe.raw.length),Ne=de[de.length-1],Ne&&Ne.type==="paragraph"?(Ne.raw+=` +`+pe.raw,Ne.text+=` +`+pe.text):de.push(pe);continue}if(pe=this.tokenizer.fences(fe)){fe=fe.substring(pe.raw.length),de.push(pe);continue}if(pe=this.tokenizer.heading(fe)){fe=fe.substring(pe.raw.length),de.push(pe);continue}if(pe=this.tokenizer.nptable(fe)){fe=fe.substring(pe.raw.length),de.push(pe);continue}if(pe=this.tokenizer.hr(fe)){fe=fe.substring(pe.raw.length),de.push(pe);continue}if(pe=this.tokenizer.blockquote(fe)){fe=fe.substring(pe.raw.length),pe.tokens=this.blockTokens(pe.text,[],ge),de.push(pe);continue}if(pe=this.tokenizer.list(fe)){for(fe=fe.substring(pe.raw.length),ke=pe.items.length,ve=0;ve0)for(;(Te=this.tokenizer.rules.inline.reflinkSearch.exec(Ne))!=null;)Pe.includes(Te[0].slice(Te[0].lastIndexOf("[")+1,-1))&&(Ne=Ne.slice(0,Te.index)+"["+H("a",Te[0].length-2)+"]"+Ne.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(Te=this.tokenizer.rules.inline.blockSkip.exec(Ne))!=null;)Ne=Ne.slice(0,Te.index)+"["+H("a",Te[0].length-2)+"]"+Ne.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;(Te=this.tokenizer.rules.inline.escapedEmSt.exec(Ne))!=null;)Ne=Ne.slice(0,Te.index)+"++"+Ne.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);for(;fe;){if(Oe||(Fe=""),Oe=!1,ve=this.tokenizer.escape(fe)){fe=fe.substring(ve.raw.length),de.push(ve);continue}if(ve=this.tokenizer.tag(fe,ge,pe)){fe=fe.substring(ve.raw.length),ge=ve.inLink,pe=ve.inRawBlock;var xe=de[de.length-1];xe&&ve.type==="text"&&xe.type==="text"?(xe.raw+=ve.raw,xe.text+=ve.text):de.push(ve);continue}if(ve=this.tokenizer.link(fe)){fe=fe.substring(ve.raw.length),ve.type==="link"&&(ve.tokens=this.inlineTokens(ve.text,[],!0,pe)),de.push(ve);continue}if(ve=this.tokenizer.reflink(fe,this.tokens.links)){fe=fe.substring(ve.raw.length);var We=de[de.length-1];ve.type==="link"?(ve.tokens=this.inlineTokens(ve.text,[],!0,pe),de.push(ve)):We&&ve.type==="text"&&We.type==="text"?(We.raw+=ve.raw,We.text+=ve.text):de.push(ve);continue}if(ve=this.tokenizer.emStrong(fe,Ne,Fe)){fe=fe.substring(ve.raw.length),ve.tokens=this.inlineTokens(ve.text,[],ge,pe),de.push(ve);continue}if(ve=this.tokenizer.codespan(fe)){fe=fe.substring(ve.raw.length),de.push(ve);continue}if(ve=this.tokenizer.br(fe)){fe=fe.substring(ve.raw.length),de.push(ve);continue}if(ve=this.tokenizer.del(fe)){fe=fe.substring(ve.raw.length),ve.tokens=this.inlineTokens(ve.text,[],ge,pe),de.push(ve);continue}if(ve=this.tokenizer.autolink(fe,ie)){fe=fe.substring(ve.raw.length),de.push(ve);continue}if(!ge&&(ve=this.tokenizer.url(fe,ie))){fe=fe.substring(ve.raw.length),de.push(ve);continue}if(ve=this.tokenizer.inlineText(fe,pe,$)){fe=fe.substring(ve.raw.length),ve.raw.slice(-1)!=="_"&&(Fe=ve.raw.slice(-1)),Oe=!0,ke=de[de.length-1],ke&&ke.type==="text"?(ke.raw+=ve.raw,ke.text+=ve.text):de.push(ve);continue}if(fe){var ze="Infinite loop on byte: "+fe.charCodeAt(0);if(this.options.silent){console.error(ze);break}else throw new Error(ze)}}return de},e(Se,null,[{key:"rules",get:function(){return{block:V,inline:U}}}]),Se}(),ae=S.defaults,G=A.cleanUrl,j=A.escape,te=function(){function Se(ye){this.options=ye||ae}var we=Se.prototype;return we.code=function(fe,de,ge){var pe=(de||"").match(/\S*/)[0];if(this.options.highlight){var ve=this.options.highlight(fe,pe);ve!=null&&ve!==fe&&(ge=!0,fe=ve)}return fe=fe.replace(/\n$/,"")+` +`,pe?'
'+(ge?fe:j(fe,!0))+`
+`:"
"+(ge?fe:j(fe,!0))+`
+`},we.blockquote=function(fe){return`
+`+fe+`
+`},we.html=function(fe){return fe},we.heading=function(fe,de,ge,pe){return this.options.headerIds?"'+fe+" +`:""+fe+" +`},we.hr=function(){return this.options.xhtml?`
+`:`
+`},we.list=function(fe,de,ge){var pe=de?"ol":"ul",ve=de&&ge!==1?' start="'+ge+'"':"";return"<"+pe+ve+`> +`+fe+" +`},we.listitem=function(fe){return"
  • "+fe+`
  • +`},we.checkbox=function(fe){return" "},we.paragraph=function(fe){return"

    "+fe+`

    +`},we.table=function(fe,de){return de&&(de=""+de+""),` + +`+fe+` +`+de+`
    +`},we.tablerow=function(fe){return` +`+fe+` +`},we.tablecell=function(fe,de){var ge=de.header?"th":"td",pe=de.align?"<"+ge+' align="'+de.align+'">':"<"+ge+">";return pe+fe+" +`},we.strong=function(fe){return""+fe+""},we.em=function(fe){return""+fe+""},we.codespan=function(fe){return""+fe+""},we.br=function(){return this.options.xhtml?"
    ":"
    "},we.del=function(fe){return""+fe+""},we.link=function(fe,de,ge){if(fe=G(this.options.sanitize,this.options.baseUrl,fe),fe===null)return ge;var pe='",pe},we.image=function(fe,de,ge){if(fe=G(this.options.sanitize,this.options.baseUrl,fe),fe===null)return ge;var pe=''+ge+'":">",pe},we.text=function(fe){return fe},Se}(),Z=function(){function Se(){}var we=Se.prototype;return we.strong=function(fe){return fe},we.em=function(fe){return fe},we.codespan=function(fe){return fe},we.del=function(fe){return fe},we.html=function(fe){return fe},we.text=function(fe){return fe},we.link=function(fe,de,ge){return""+ge},we.image=function(fe,de,ge){return""+ge},we.br=function(){return""},Se}(),ue=function(){function Se(){this.seen={}}var we=Se.prototype;return we.serialize=function(fe){return fe.toLowerCase().trim().replace(/<[!\/a-z].*?>/ig,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")},we.getNextSafeSlug=function(fe,de){var ge=fe,pe=0;if(this.seen.hasOwnProperty(ge)){pe=this.seen[fe];do pe++,ge=fe+"-"+pe;while(this.seen.hasOwnProperty(ge))}return de||(this.seen[fe]=pe,this.seen[ge]=0),ge},we.slug=function(fe,de){de===void 0&&(de={});var ge=this.serialize(fe);return this.getNextSafeSlug(ge,de.dryrun)},Se}(),he=S.defaults,re=A.unescape,ce=function(){function Se(ye){this.options=ye||he,this.options.renderer=this.options.renderer||new te,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new Z,this.slugger=new ue}Se.parse=function(fe,de){var ge=new Se(de);return ge.parse(fe)},Se.parseInline=function(fe,de){var ge=new Se(de);return ge.parseInline(fe)};var we=Se.prototype;return we.parse=function(fe,de){de===void 0&&(de=!0);var ge="",pe,ve,ke,Ne,Te,Oe,Fe,Pe,xe,We,ze,Ke,Be,He,Ve,Ue,Ye,je,Xe=fe.length;for(pe=0;pe0&&Ve.tokens[0].type==="text"?(Ve.tokens[0].text=je+" "+Ve.tokens[0].text,Ve.tokens[0].tokens&&Ve.tokens[0].tokens.length>0&&Ve.tokens[0].tokens[0].type==="text"&&(Ve.tokens[0].tokens[0].text=je+" "+Ve.tokens[0].tokens[0].text)):Ve.tokens.unshift({type:"text",text:je}):He+=je),He+=this.parse(Ve.tokens,Be),xe+=this.renderer.listitem(He,Ye,Ue);ge+=this.renderer.list(xe,ze,Ke);continue}case"html":{ge+=this.renderer.html(We.text);continue}case"paragraph":{ge+=this.renderer.paragraph(this.parseInline(We.tokens));continue}case"text":{for(xe=We.tokens?this.parseInline(We.tokens):We.text;pe+1An error occurred:

    "+be(ke.message+"",!0)+"
    ";throw ke}}Ee.options=Ee.setOptions=function(Se){return me(Ee.defaults,Se),De(Ee.defaults),Ee},Ee.getDefaults=Le,Ee.defaults=Re,Ee.use=function(Se){var we=me({},Se);if(Se.renderer&&function(){var fe=Ee.defaults.renderer||new te,de=function(ve){var ke=fe[ve];fe[ve]=function(){for(var Ne=arguments.length,Te=new Array(Ne),Oe=0;OeAn error occurred:

    "+be(fe.message+"",!0)+"
    ";throw fe}},Ee.Parser=ce,Ee.parser=ce.parse,Ee.Renderer=te,Ee.TextRenderer=Z,Ee.Lexer=oe,Ee.lexer=oe.lex,Ee.Tokenizer=Y,Ee.Slugger=ue,Ee.parse=Ee;var Ae=Ee;return Ae}),define(Q[278],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ArrayNavigator=void 0;class b{constructor(M,w=0,S=M.length,C=w-1){this.items=M,this.start=w,this.end=S,this.index=C}current(){return this.index===this.start-1||this.index===this.end?null:this.items[this.index]}next(){return this.index=Math.min(this.index+1,this.end),this.current()}previous(){return this.index=Math.max(this.index-1,this.start-1),this.current()}first(){return this.index=this.start,this.current()}last(){return this.index=this.end-1,this.current()}}e.ArrayNavigator=b}),define(Q[279],J([0,1,278]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.HistoryNavigator=void 0;class N{constructor(w=[],S=10){this._initialize(w),this._limit=S,this._onChange()}add(w){this._history.delete(w),this._history.add(w),this._onChange()}next(){return this._currentPosition()!==this._elements.length-1?this._navigator.next():null}previous(){return this._currentPosition()!==0?this._navigator.previous():null}current(){return this._navigator.current()}first(){return this._navigator.first()}last(){return this._navigator.last()}has(w){return this._history.has(w)}_onChange(){this._reduceToLimit();const w=this._elements;this._navigator=new b.ArrayNavigator(w,0,w.length,w.length)}_reduceToLimit(){const w=this._elements;w.length>this._limit&&this._initialize(w.slice(w.length-this._limit))}_currentPosition(){const w=this._navigator.current();return w?this._elements.indexOf(w):-1}_initialize(w){this._history=new Set;for(const S of w)this._history.add(S)}get _elements(){const w=[];return this._history.forEach(S=>w.push(S)),w}}e.HistoryNavigator=N}),define(Q[100],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MovingAverage=e.clamp=void 0;function b(M,w,S){return Math.min(Math.max(M,w),S)}e.clamp=b;class N{constructor(){this._n=1,this._val=0}update(w){return this._val=this._val+(w-this._val)/this._n,this._n+=1,this}get value(){return this._val}}e.MovingAverage=N}),define(Q[17],J([0,1]),function(q,e){"use strict";var b;Object.defineProperty(e,"__esModule",{value:!0}),e.isLittleEndian=e.OS=e.setImmediate=e.globals=e.userAgent=e.isIOS=e.isWeb=e.isNative=e.isLinux=e.isMacintosh=e.isWindows=e.isPreferringBrowserCodeLoad=e.browserCodeLoadingCacheStrategy=e.isElectronSandboxed=void 0;const N="en";let M=!1,w=!1,S=!1,C=!1,d=!1,g=!1,p=!1,c,o=N,s,a;const u=typeof self=="object"?self:typeof global=="object"?global:{};let r;typeof process!="undefined"?r=process:typeof u.vscode!="undefined"&&(r=u.vscode.process);const i=typeof((b=r==null?void 0:r.versions)===null||b===void 0?void 0:b.electron)=="string"&&r.type==="renderer";if(e.isElectronSandboxed=i&&(r==null?void 0:r.sandboxed),e.browserCodeLoadingCacheStrategy=(()=>{if(e.isElectronSandboxed)return"bypassHeatCheck";const m=r==null?void 0:r.env.ENABLE_VSCODE_BROWSER_CODE_LOADING;if(typeof m=="string")return m==="none"||m==="code"||m==="bypassHeatCheck"||m==="bypassHeatCheckAndEagerCompile"?m:"bypassHeatCheck"})(),e.isPreferringBrowserCodeLoad=typeof e.browserCodeLoadingCacheStrategy=="string",typeof navigator=="object"&&!i)a=navigator.userAgent,M=a.indexOf("Windows")>=0,w=a.indexOf("Macintosh")>=0,p=(a.indexOf("Macintosh")>=0||a.indexOf("iPad")>=0||a.indexOf("iPhone")>=0)&&!!navigator.maxTouchPoints&&navigator.maxTouchPoints>0,S=a.indexOf("Linux")>=0,g=!0,c=navigator.language,o=c;else if(typeof r=="object"){M=r.platform==="win32",w=r.platform==="darwin",S=r.platform==="linux",C=S&&!!r.env.SNAP&&!!r.env.SNAP_REVISION,c=N,o=N;const m=r.env.VSCODE_NLS_CONFIG;if(m)try{const _=JSON.parse(m),f=_.availableLanguages["*"];c=_.locale,o=f||N,s=_._translationsConfigFile}catch(_){}d=!0}else console.error("Unable to resolve platform.");let n=0;w?n=1:M?n=3:S&&(n=2),e.isWindows=M,e.isMacintosh=w,e.isLinux=S,e.isNative=d,e.isWeb=g,e.isIOS=p,e.userAgent=a,e.globals=u,e.setImmediate=function(){if(e.globals.setImmediate)return e.globals.setImmediate.bind(e.globals);if(typeof e.globals.postMessage=="function"&&!e.globals.importScripts){let f=[];e.globals.addEventListener("message",y=>{if(y.data&&y.data.vscodeSetImmediateId)for(let L=0,I=f.length;L{const L=++v;f.push({id:L,callback:y}),e.globals.postMessage({vscodeSetImmediateId:L},"*")}}if(r&&typeof r.nextTick=="function")return r.nextTick.bind(r);const _=Promise.resolve();return f=>_.then(f)}(),e.OS=w||p?2:M?1:3;let t=!0,l=!1;function h(){if(!l){l=!0;const m=new Uint8Array(2);m[0]=1,m[1]=2,t=new Uint16Array(m.buffer)[0]===(2<<8)+1}return t}e.isLittleEndian=h}),define(Q[280],J([0,1,17]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.platform=e.env=e.cwd=void 0;let N;typeof process!="undefined"?N=process:typeof b.globals.vscode!="undefined"?N={get platform(){return b.globals.vscode.process.platform},get env(){return b.globals.vscode.process.env},nextTick(M){return b.setImmediate(M)},cwd(){return b.globals.vscode.process.env.VSCODE_CWD||b.globals.vscode.process.execPath.substr(0,b.globals.vscode.process.execPath.lastIndexOf(b.globals.vscode.process.platform==="win32"?"\\":"/"))}}:N={get platform(){return b.isWindows?"win32":b.isMacintosh?"darwin":"linux"},nextTick(M){return b.setImmediate(M)},get env(){return Object.create(null)},cwd(){return"/"}},e.cwd=N.cwd,e.env=N.env,e.platform=N.platform}),define(Q[72],J([0,1,280]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.sep=e.extname=e.basename=e.dirname=e.relative=e.resolve=e.normalize=e.posix=e.win32=void 0;const N=65,M=97,w=90,S=122,C=46,d=47,g=92,p=58,c=63;class o extends Error{constructor(l,h,m){let _;typeof h=="string"&&h.indexOf("not ")===0?(_="must not be",h=h.replace(/^not /,"")):_="must be";const f=l.indexOf(".")!==-1?"property":"argument";let v=`The "${l}" ${f} ${_} of type ${h}`;v+=`. Received type ${typeof m}`,super(v),this.code="ERR_INVALID_ARG_TYPE"}}function s(t,l){if(typeof t!="string")throw new o(l,"string",t)}function a(t){return t===d||t===g}function u(t){return t===d}function r(t){return t>=N&&t<=w||t>=M&&t<=S}function i(t,l,h,m){let _="",f=0,v=-1,y=0,L=0;for(let I=0;I<=t.length;++I){if(I2){const k=_.lastIndexOf(h);k===-1?(_="",f=0):(_=_.slice(0,k),f=_.length-1-_.lastIndexOf(h)),v=I,y=0;continue}else if(_.length!==0){_="",f=0,v=I,y=0;continue}}l&&(_+=_.length>0?`${h}..`:"..",f=2)}else _.length>0?_+=`${h}${t.slice(v+1,I)}`:_=t.slice(v+1,I),f=I-v-1;v=I,y=0}else L===C&&y!==-1?++y:y=-1}return _}function n(t,l){if(l===null||typeof l!="object")throw new o("pathObject","Object",l);const h=l.dir||l.root,m=l.base||`${l.name||""}${l.ext||""}`;return h?h===l.root?`${h}${m}`:`${h}${t}${m}`:m}e.win32={resolve(...t){let l="",h="",m=!1;for(let _=t.length-1;_>=-1;_--){let f;if(_>=0){if(f=t[_],s(f,"path"),f.length===0)continue}else l.length===0?f=b.cwd():(f=b.env[`=${l}`]||b.cwd(),(f===void 0||f.slice(0,2).toLowerCase()!==l.toLowerCase()&&f.charCodeAt(2)===g)&&(f=`${l}\\`));const v=f.length;let y=0,L="",I=!1;const k=f.charCodeAt(0);if(v===1)a(k)&&(y=1,I=!0);else if(a(k))if(I=!0,a(f.charCodeAt(1))){let E=2,T=E;for(;E2&&a(f.charCodeAt(2))&&(I=!0,y=3));if(L.length>0)if(l.length>0){if(L.toLowerCase()!==l.toLowerCase())continue}else l=L;if(m){if(l.length>0)break}else if(h=`${f.slice(y)}\\${h}`,m=I,I&&l.length>0)break}return h=i(h,!m,"\\",a),m?`${l}\\${h}`:`${l}${h}`||"."},normalize(t){s(t,"path");const l=t.length;if(l===0)return".";let h=0,m,_=!1;const f=t.charCodeAt(0);if(l===1)return u(f)?"\\":t;if(a(f))if(_=!0,a(t.charCodeAt(1))){let y=2,L=y;for(;y2&&a(t.charCodeAt(2))&&(_=!0,h=3));let v=h0&&a(t.charCodeAt(l-1))&&(v+="\\"),m===void 0?_?`\\${v}`:v:_?`${m}\\${v}`:`${m}${v}`},isAbsolute(t){s(t,"path");const l=t.length;if(l===0)return!1;const h=t.charCodeAt(0);return a(h)||l>2&&r(h)&&t.charCodeAt(1)===p&&a(t.charCodeAt(2))},join(...t){if(t.length===0)return".";let l,h;for(let f=0;f0&&(l===void 0?l=h=v:l+=`\\${v}`)}if(l===void 0)return".";let m=!0,_=0;if(typeof h=="string"&&a(h.charCodeAt(0))){++_;const f=h.length;f>1&&a(h.charCodeAt(1))&&(++_,f>2&&(a(h.charCodeAt(2))?++_:m=!1))}if(m){for(;_=2&&(l=`\\${l.slice(_)}`)}return e.win32.normalize(l)},relative(t,l){if(s(t,"from"),s(l,"to"),t===l)return"";const h=e.win32.resolve(t),m=e.win32.resolve(l);if(h===m||(t=h.toLowerCase(),l=m.toLowerCase(),t===l))return"";let _=0;for(;__&&t.charCodeAt(f-1)===g;)f--;const v=f-_;let y=0;for(;yy&&l.charCodeAt(L-1)===g;)L--;const I=L-y,k=vk){if(l.charCodeAt(y+T)===g)return m.slice(y+T+1);if(T===2)return m.slice(y+T)}v>k&&(t.charCodeAt(_+T)===g?E=T:T===2&&(E=3)),E===-1&&(E=0)}let O="";for(T=_+E+1;T<=f;++T)(T===f||t.charCodeAt(T)===g)&&(O+=O.length===0?"..":"\\..");return y+=E,O.length>0?`${O}${m.slice(y,L)}`:(m.charCodeAt(y)===g&&++y,m.slice(y,L))},toNamespacedPath(t){if(typeof t!="string")return t;if(t.length===0)return"";const l=e.win32.resolve(t);if(l.length<=2)return t;if(l.charCodeAt(0)===g){if(l.charCodeAt(1)===g){const h=l.charCodeAt(2);if(h!==c&&h!==C)return`\\\\?\\UNC\\${l.slice(2)}`}}else if(r(l.charCodeAt(0))&&l.charCodeAt(1)===p&&l.charCodeAt(2)===g)return`\\\\?\\${l}`;return t},dirname(t){s(t,"path");const l=t.length;if(l===0)return".";let h=-1,m=0;const _=t.charCodeAt(0);if(l===1)return a(_)?t:".";if(a(_)){if(h=m=1,a(t.charCodeAt(1))){let y=2,L=y;for(;y2&&a(t.charCodeAt(2))?3:2,m=h);let f=-1,v=!0;for(let y=l-1;y>=m;--y)if(a(t.charCodeAt(y))){if(!v){f=y;break}}else v=!1;if(f===-1){if(h===-1)return".";f=h}return t.slice(0,f)},basename(t,l){l!==void 0&&s(l,"ext"),s(t,"path");let h=0,m=-1,_=!0,f;if(t.length>=2&&r(t.charCodeAt(0))&&t.charCodeAt(1)===p&&(h=2),l!==void 0&&l.length>0&&l.length<=t.length){if(l===t)return"";let v=l.length-1,y=-1;for(f=t.length-1;f>=h;--f){const L=t.charCodeAt(f);if(a(L)){if(!_){h=f+1;break}}else y===-1&&(_=!1,y=f+1),v>=0&&(L===l.charCodeAt(v)?--v==-1&&(m=f):(v=-1,m=y))}return h===m?m=y:m===-1&&(m=t.length),t.slice(h,m)}for(f=t.length-1;f>=h;--f)if(a(t.charCodeAt(f))){if(!_){h=f+1;break}}else m===-1&&(_=!1,m=f+1);return m===-1?"":t.slice(h,m)},extname(t){s(t,"path");let l=0,h=-1,m=0,_=-1,f=!0,v=0;t.length>=2&&t.charCodeAt(1)===p&&r(t.charCodeAt(0))&&(l=m=2);for(let y=t.length-1;y>=l;--y){const L=t.charCodeAt(y);if(a(L)){if(!f){m=y+1;break}continue}_===-1&&(f=!1,_=y+1),L===C?h===-1?h=y:v!==1&&(v=1):h!==-1&&(v=-1)}return h===-1||_===-1||v===0||v===1&&h===_-1&&h===m+1?"":t.slice(h,_)},format:n.bind(null,"\\"),parse(t){s(t,"path");const l={root:"",dir:"",base:"",ext:"",name:""};if(t.length===0)return l;const h=t.length;let m=0,_=t.charCodeAt(0);if(h===1)return a(_)?(l.root=l.dir=t,l):(l.base=l.name=t,l);if(a(_)){if(m=1,a(t.charCodeAt(1))){let E=2,T=E;for(;E0&&(l.root=t.slice(0,m));let f=-1,v=m,y=-1,L=!0,I=t.length-1,k=0;for(;I>=m;--I){if(_=t.charCodeAt(I),a(_)){if(!L){v=I+1;break}continue}y===-1&&(L=!1,y=I+1),_===C?f===-1?f=I:k!==1&&(k=1):f!==-1&&(k=-1)}return y!==-1&&(f===-1||k===0||k===1&&f===y-1&&f===v+1?l.base=l.name=t.slice(v,y):(l.name=t.slice(v,f),l.base=t.slice(v,y),l.ext=t.slice(f,y))),v>0&&v!==m?l.dir=t.slice(0,v-1):l.dir=l.root,l},sep:"\\",delimiter:";",win32:null,posix:null},e.posix={resolve(...t){let l="",h=!1;for(let m=t.length-1;m>=-1&&!h;m--){const _=m>=0?t[m]:b.cwd();s(_,"path"),_.length!==0&&(l=`${_}/${l}`,h=_.charCodeAt(0)===d)}return l=i(l,!h,"/",u),h?`/${l}`:l.length>0?l:"."},normalize(t){if(s(t,"path"),t.length===0)return".";const l=t.charCodeAt(0)===d,h=t.charCodeAt(t.length-1)===d;return t=i(t,!l,"/",u),t.length===0?l?"/":h?"./":".":(h&&(t+="/"),l?`/${t}`:t)},isAbsolute(t){return s(t,"path"),t.length>0&&t.charCodeAt(0)===d},join(...t){if(t.length===0)return".";let l;for(let h=0;h0&&(l===void 0?l=m:l+=`/${m}`)}return l===void 0?".":e.posix.normalize(l)},relative(t,l){if(s(t,"from"),s(l,"to"),t===l||(t=e.posix.resolve(t),l=e.posix.resolve(l),t===l))return"";const h=1,m=t.length,_=m-h,f=1,v=l.length-f,y=_y){if(l.charCodeAt(f+I)===d)return l.slice(f+I+1);if(I===0)return l.slice(f+I)}else _>y&&(t.charCodeAt(h+I)===d?L=I:I===0&&(L=0));let k="";for(I=h+L+1;I<=m;++I)(I===m||t.charCodeAt(I)===d)&&(k+=k.length===0?"..":"/..");return`${k}${l.slice(f+L)}`},toNamespacedPath(t){return t},dirname(t){if(s(t,"path"),t.length===0)return".";const l=t.charCodeAt(0)===d;let h=-1,m=!0;for(let _=t.length-1;_>=1;--_)if(t.charCodeAt(_)===d){if(!m){h=_;break}}else m=!1;return h===-1?l?"/":".":l&&h===1?"//":t.slice(0,h)},basename(t,l){l!==void 0&&s(l,"ext"),s(t,"path");let h=0,m=-1,_=!0,f;if(l!==void 0&&l.length>0&&l.length<=t.length){if(l===t)return"";let v=l.length-1,y=-1;for(f=t.length-1;f>=0;--f){const L=t.charCodeAt(f);if(L===d){if(!_){h=f+1;break}}else y===-1&&(_=!1,y=f+1),v>=0&&(L===l.charCodeAt(v)?--v==-1&&(m=f):(v=-1,m=y))}return h===m?m=y:m===-1&&(m=t.length),t.slice(h,m)}for(f=t.length-1;f>=0;--f)if(t.charCodeAt(f)===d){if(!_){h=f+1;break}}else m===-1&&(_=!1,m=f+1);return m===-1?"":t.slice(h,m)},extname(t){s(t,"path");let l=-1,h=0,m=-1,_=!0,f=0;for(let v=t.length-1;v>=0;--v){const y=t.charCodeAt(v);if(y===d){if(!_){h=v+1;break}continue}m===-1&&(_=!1,m=v+1),y===C?l===-1?l=v:f!==1&&(f=1):l!==-1&&(f=-1)}return l===-1||m===-1||f===0||f===1&&l===m-1&&l===h+1?"":t.slice(l,m)},format:n.bind(null,"/"),parse(t){s(t,"path");const l={root:"",dir:"",base:"",ext:"",name:""};if(t.length===0)return l;const h=t.charCodeAt(0)===d;let m;h?(l.root="/",m=1):m=0;let _=-1,f=0,v=-1,y=!0,L=t.length-1,I=0;for(;L>=m;--L){const k=t.charCodeAt(L);if(k===d){if(!y){f=L+1;break}continue}v===-1&&(y=!1,v=L+1),k===C?_===-1?_=L:I!==1&&(I=1):_!==-1&&(I=-1)}if(v!==-1){const k=f===0&&h?1:f;_===-1||I===0||I===1&&_===v-1&&_===f+1?l.base=l.name=t.slice(k,v):(l.name=t.slice(k,_),l.base=t.slice(k,v),l.ext=t.slice(_,v))}return f>0?l.dir=t.slice(0,f-1):h&&(l.dir="/"),l},sep:"/",delimiter:":",win32:null,posix:null},e.posix.win32=e.win32.win32=e.win32,e.posix.posix=e.win32.posix=e.posix,e.normalize=b.platform==="win32"?e.win32.normalize:e.posix.normalize,e.resolve=b.platform==="win32"?e.win32.resolve:e.posix.resolve,e.relative=b.platform==="win32"?e.win32.relative:e.posix.relative,e.dirname=b.platform==="win32"?e.win32.dirname:e.posix.dirname,e.basename=b.platform==="win32"?e.win32.basename:e.posix.basename,e.extname=b.platform==="win32"?e.win32.extname:e.posix.extname,e.sep=b.platform==="win32"?e.win32.sep:e.posix.sep}),define(Q[120],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Range=void 0;var b;(function(N){function M(d,g){if(d.start>=g.end||g.start>=d.end)return{start:0,end:0};const p=Math.max(d.start,g.start),c=Math.min(d.end,g.end);return c-p<=0?{start:0,end:0}:{start:p,end:c}}N.intersect=M;function w(d){return d.end-d.start<=0}N.isEmpty=w;function S(d,g){return!w(M(d,g))}N.intersects=S;function C(d,g){const p=[],c={start:d.start,end:Math.min(g.start,d.end)},o={start:Math.max(g.end,d.start),end:d.end};return w(c)||p.push(c),w(o)||p.push(o),p}N.relativeComplement=C})(b=e.Range||(e.Range={}))}),define(Q[281],J([0,1,120]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.RangeMap=e.consolidate=e.shift=e.groupIntersect=void 0;function N(d,g){const p=[];for(let c of g)if(!(d.start>=c.range.end)){if(d.endg.concat(p),[]))}class C{constructor(){this.groups=[],this._size=0}splice(g,p,c=[]){const o=c.length-p,s=N({start:0,end:g},this.groups),a=N({start:g+p,end:Number.POSITIVE_INFINITY},this.groups).map(r=>({range:M(r.range,o),size:r.size})),u=c.map((r,i)=>({range:{start:g+i,end:g+i+1},size:r.size}));this.groups=S(s,u,a),this._size=this.groups.reduce((r,i)=>r+i.size*(i.range.end-i.range.start),0)}get count(){const g=this.groups.length;return g?this.groups[g-1].range.end:0}get size(){return this._size}indexAt(g){if(g<0)return-1;let p=0,c=0;for(let o of this.groups){const s=o.range.end-o.range.start,a=c+s*o.size;if(gN.Disposable.None;function u(A){return(B,F=null,D)=>{let R=!1,W;return W=A(x=>{if(!R)return W?W.dispose():R=!0,B.call(F,x)},null,D),R&&W.dispose(),W}}a.once=u;function r(A,B){return m((F,D=null,R)=>A(W=>F.call(D,B(W)),null,R))}a.map=r;function i(A,B){return m((F,D=null,R)=>A(W=>{B(W),F.call(D,W)},null,R))}a.forEach=i;function n(A,B){return m((F,D=null,R)=>A(W=>B(W)&&F.call(D,W),null,R))}a.filter=n;function t(A){return A}a.signal=t;function l(...A){return(B,F=null,D)=>N.combinedDisposable(...A.map(R=>R(W=>B.call(F,W),null,D)))}a.any=l;function h(A,B,F){let D=F;return r(A,R=>(D=B(D,R),D))}a.reduce=h;function m(A){let B;const F=new p({onFirstListenerAdd(){B=A(F.fire,F)},onLastListenerRemove(){B.dispose()}});return F.event}a.snapshot=m;function _(A,B,F=100,D=!1,R){let W,x,K,Y=0;const ee=new p({leakWarningThreshold:R,onFirstListenerAdd(){W=A(se=>{Y++,x=B(x,se),D&&!K&&(ee.fire(x),x=void 0),clearTimeout(K),K=setTimeout(()=>{const ne=x;x=void 0,K=void 0,(!D||Y>1)&&ee.fire(ne),Y=0},F)})},onLastListenerRemove(){W.dispose()}});return ee.event}a.debounce=_;function f(A){const B=new Date().getTime();return r(u(A),F=>new Date().getTime()-B)}a.stopwatch=f;function v(A){let B=!0,F;return n(A,D=>{const R=B||D!==F;return B=!1,F=D,R})}a.latch=v;function y(A,B=!1,F=[]){let D=F.slice(),R=A(K=>{D?D.push(K):x.fire(K)});const W=()=>{D&&D.forEach(K=>x.fire(K)),D=null},x=new p({onFirstListenerAdd(){R||(R=A(K=>x.fire(K)))},onFirstListenerDidAdd(){D&&(B?setTimeout(W):W())},onLastListenerRemove(){R&&R.dispose(),R=null}});return x.event}a.buffer=y;class L{constructor(B){this.event=B}map(B){return new L(r(this.event,B))}forEach(B){return new L(i(this.event,B))}filter(B){return new L(n(this.event,B))}reduce(B,F){return new L(h(this.event,B,F))}latch(){return new L(v(this.event))}debounce(B,F=100,D=!1,R){return new L(_(this.event,B,F,D,R))}on(B,F,D){return this.event(B,F,D)}once(B,F,D){return u(this.event)(B,F,D)}}function I(A){return new L(A)}a.chain=I;function k(A,B,F=D=>D){const D=(...K)=>x.fire(F(...K)),R=()=>A.on(B,D),W=()=>A.removeListener(B,D),x=new p({onFirstListenerAdd:R,onLastListenerRemove:W});return x.event}a.fromNodeEventEmitter=k;function E(A,B,F=D=>D){const D=(...K)=>x.fire(F(...K)),R=()=>A.addEventListener(B,D),W=()=>A.removeEventListener(B,D),x=new p({onFirstListenerAdd:R,onLastListenerRemove:W});return x.event}a.fromDOMEventEmitter=E;function T(A){const B=new p;let F=!1;return A.then(void 0,()=>null).then(()=>{F?B.fire(void 0):setTimeout(()=>B.fire(void 0),0)}),F=!0,B.event}a.fromPromise=T;function O(A){return new Promise(B=>u(A)(B))}a.toPromise=O})(S=e.Event||(e.Event={}));class C{constructor(u){this._listenerCount=0,this._invocationCount=0,this._elapsedOverall=0,this._name=`${u}_${C._idPool++}`}start(u){this._stopWatch=new w.StopWatch(!0),this._listenerCount=u}stop(){if(this._stopWatch){const u=this._stopWatch.elapsed();this._elapsedOverall+=u,this._invocationCount+=1,console.info(`did FIRE ${this._name}: elapsed_ms: ${u.toFixed(5)}, listener: ${this._listenerCount} (elapsed_overall: ${this._elapsedOverall.toFixed(2)}, invocations: ${this._invocationCount})`),this._stopWatch=void 0}}}C._idPool=0;let d=-1;class g{constructor(u,r=Math.random().toString(18).slice(2,5)){this.customThreshold=u,this.name=r,this._warnCountdown=0}dispose(){this._stacks&&this._stacks.clear()}check(u){let r=d;if(typeof this.customThreshold=="number"&&(r=this.customThreshold),!(r<=0||u{const t=this._stacks.get(i)||0;this._stacks.set(i,t-1)}}}}class p{constructor(u){var r;this._disposed=!1,this._options=u,this._leakageMon=d>0?new g(this._options&&this._options.leakWarningThreshold):void 0,this._perfMon=((r=this._options)===null||r===void 0?void 0:r._profName)?new C(this._options._profName):void 0}get event(){return this._event||(this._event=(u,r,i)=>{var n;this._listeners||(this._listeners=new M.LinkedList);const t=this._listeners.isEmpty();t&&this._options&&this._options.onFirstListenerAdd&&this._options.onFirstListenerAdd(this);const l=this._listeners.push(r?[u,r]:u);t&&this._options&&this._options.onFirstListenerDidAdd&&this._options.onFirstListenerDidAdd(this),this._options&&this._options.onListenerDidAdd&&this._options.onListenerDidAdd(this,u,r);const h=(n=this._leakageMon)===null||n===void 0?void 0:n.check(this._listeners.size);let m;return m={dispose:()=>{h&&h(),m.dispose=p._noop,this._disposed||(l(),this._options&&this._options.onLastListenerRemove&&(this._listeners&&!this._listeners.isEmpty()||this._options.onLastListenerRemove(this)))}},i instanceof N.DisposableStore?i.add(m):Array.isArray(i)&&i.push(m),m}),this._event}fire(u){var r,i;if(this._listeners){this._deliveryQueue||(this._deliveryQueue=new M.LinkedList);for(let n of this._listeners)this._deliveryQueue.push([n,u]);for((r=this._perfMon)===null||r===void 0||r.start(this._deliveryQueue.size);this._deliveryQueue.size>0;){const[n,t]=this._deliveryQueue.shift();try{typeof n=="function"?n.call(void 0,t):n[0].call(n[1],t)}catch(l){b.onUnexpectedError(l)}}(i=this._perfMon)===null||i===void 0||i.stop()}}dispose(){var u,r,i;(u=this._listeners)===null||u===void 0||u.clear(),(r=this._deliveryQueue)===null||r===void 0||r.clear(),(i=this._leakageMon)===null||i===void 0||i.dispose(),this._disposed=!0}}e.Emitter=p,p._noop=function(){};class c extends p{constructor(u){super(u);this._isPaused=0,this._eventQueue=new M.LinkedList,this._mergeFn=u==null?void 0:u.merge}pause(){this._isPaused++}resume(){if(this._isPaused!==0&&--this._isPaused==0)if(this._mergeFn){const u=Array.from(this._eventQueue);this._eventQueue.clear(),super.fire(this._mergeFn(u))}else for(;!this._isPaused&&this._eventQueue.size!==0;)super.fire(this._eventQueue.shift())}fire(u){this._listeners&&(this._isPaused!==0?this._eventQueue.push(u):super.fire(u))}}e.PauseableEmitter=c;class o{constructor(){this.buffers=[]}wrapEvent(u){return(r,i,n)=>u(t=>{const l=this.buffers[this.buffers.length-1];l?l.push(()=>r.call(i,t)):r.call(i,t)},void 0,n)}bufferEvents(u){const r=[];this.buffers.push(r);const i=u();return this.buffers.pop(),r.forEach(n=>n()),i}}e.EventBufferer=o;class s{constructor(){this.listening=!1,this.inputEvent=S.None,this.inputEventListener=N.Disposable.None,this.emitter=new p({onFirstListenerDidAdd:()=>{this.listening=!0,this.inputEventListener=this.inputEvent(this.emitter.fire,this.emitter)},onLastListenerRemove:()=>{this.listening=!1,this.inputEventListener.dispose()}}),this.event=this.emitter.event}set input(u){this.inputEvent=u,this.listening&&(this.inputEventListener.dispose(),this.inputEventListener=u(this.emitter.fire,this.emitter))}dispose(){this.inputEventListener.dispose(),this.emitter.dispose()}}e.Relay=s}),define(Q[35],J([0,1,6]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.isStandalone=e.isAndroid=e.isElectron=e.isEdgeLegacyWebView=e.isIPad=e.isWebkitWebView=e.isSafari=e.isChrome=e.isWebKit=e.isFirefox=e.getPixelRatio=e.getZoomFactor=e.onDidChangeZoomLevel=e.getTimeSinceLastZoomLevelChanged=e.getZoomLevel=void 0;class N{constructor(){this._zoomLevel=0,this._lastZoomLevelChangeTime=0,this._onDidChangeZoomLevel=new b.Emitter,this.onDidChangeZoomLevel=this._onDidChangeZoomLevel.event,this._zoomFactor=1}getZoomLevel(){return this._zoomLevel}getTimeSinceLastZoomLevelChanged(){return Date.now()-this._lastZoomLevelChangeTime}getZoomFactor(){return this._zoomFactor}getPixelRatio(){let c=document.createElement("canvas").getContext("2d"),o=window.devicePixelRatio||1,s=c.webkitBackingStorePixelRatio||c.mozBackingStorePixelRatio||c.msBackingStorePixelRatio||c.oBackingStorePixelRatio||c.backingStorePixelRatio||1;return o/s}}N.INSTANCE=new N;function M(){return N.INSTANCE.getZoomLevel()}e.getZoomLevel=M;function w(){return N.INSTANCE.getTimeSinceLastZoomLevelChanged()}e.getTimeSinceLastZoomLevelChanged=w;function S(p){return N.INSTANCE.onDidChangeZoomLevel(p)}e.onDidChangeZoomLevel=S;function C(){return N.INSTANCE.getZoomFactor()}e.getZoomFactor=C;function d(){return N.INSTANCE.getPixelRatio()}e.getPixelRatio=d;const g=navigator.userAgent;e.isFirefox=g.indexOf("Firefox")>=0,e.isWebKit=g.indexOf("AppleWebKit")>=0,e.isChrome=g.indexOf("Chrome")>=0,e.isSafari=!e.isChrome&&g.indexOf("Safari")>=0,e.isWebkitWebView=!e.isChrome&&!e.isSafari&&e.isWebKit,e.isIPad=g.indexOf("iPad")>=0||e.isSafari&&navigator.maxTouchPoints>0,e.isEdgeLegacyWebView=g.indexOf("Edge/")>=0&&g.indexOf("WebView/")>=0,e.isElectron=g.indexOf("Electron/")>=0,e.isAndroid=g.indexOf("Android")>=0,e.isStandalone=window.matchMedia&&window.matchMedia("(display-mode: standalone)").matches}),define(Q[151],J([0,1,35,17]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.BrowserFeatures=void 0,e.BrowserFeatures={clipboard:{writeText:N.isNative||document.queryCommandSupported&&document.queryCommandSupported("copy")||!!(navigator&&navigator.clipboard&&navigator.clipboard.writeText),readText:N.isNative||!!(navigator&&navigator.clipboard&&navigator.clipboard.readText)},keyboard:(()=>N.isNative||b.isStandalone?0:navigator.keyboard||b.isSafari?1:2)(),touch:"ontouchstart"in window||navigator.maxTouchPoints>0||window.navigator.msMaxTouchPoints>0,pointerEvents:window.PointerEvent&&("ontouchstart"in window||window.navigator.maxTouchPoints>0||navigator.maxTouchPoints>0||window.navigator.msMaxTouchPoints>0)}}),define(Q[55],J([0,1,6]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.stop=e.stopEvent=e.domEvent=void 0;const N=(S,C,d)=>{const g=c=>p.fire(c),p=new b.Emitter({onFirstListenerAdd:()=>{S.addEventListener(C,g,d)},onLastListenerRemove:()=>{S.removeEventListener(C,g,d)}});return p.event};e.domEvent=N;function M(S){return S.preventDefault(),S.stopPropagation(),S}e.stopEvent=M;function w(S){return b.Event.map(S,M)}e.stop=w}),define(Q[56],J([0,1,35,39,17]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.StandardKeyboardEvent=void 0;let w=new Array(230),S=new Array(112);(function(){for(let a=0;a{l.token.onCancellationRequested(()=>{f(N.canceled())}),Promise.resolve(h).then(v=>{l.dispose(),_(v)},v=>{l.dispose(),f(v)})});return new class{cancel(){l.cancel()}then(_,f){return m.then(_,f)}catch(_){return this.then(void 0,_)}finally(_){return m.finally(_)}}}e.createCancelablePromise=S;function C(t,l,h){return Promise.race([t,new Promise(m=>l.onCancellationRequested(()=>m(h)))])}e.raceCancellation=C;class d{constructor(){this.activePromise=null,this.queuedPromise=null,this.queuedPromiseFactory=null}queue(l){if(this.activePromise){if(this.queuedPromiseFactory=l,!this.queuedPromise){const h=()=>{this.queuedPromise=null;const m=this.queue(this.queuedPromiseFactory);return this.queuedPromiseFactory=null,m};this.queuedPromise=new Promise(m=>{this.activePromise.then(h,h).then(m)})}return new Promise((h,m)=>{this.queuedPromise.then(h,m)})}return this.activePromise=l(),new Promise((h,m)=>{this.activePromise.then(_=>{this.activePromise=null,h(_)},_=>{this.activePromise=null,m(_)})})}}e.Throttler=d;class g{constructor(l){this.defaultDelay=l,this.timeout=null,this.completionPromise=null,this.doResolve=null,this.doReject=null,this.task=null}trigger(l,h=this.defaultDelay){return this.task=l,this.cancelTimeout(),this.completionPromise||(this.completionPromise=new Promise((m,_)=>{this.doResolve=m,this.doReject=_}).then(()=>{if(this.completionPromise=null,this.doResolve=null,this.task){const m=this.task;return this.task=null,m()}})),this.timeout=setTimeout(()=>{this.timeout=null,this.doResolve&&this.doResolve(null)},h),this.completionPromise}isTriggered(){return this.timeout!==null}cancel(){this.cancelTimeout(),this.completionPromise&&(this.doReject&&this.doReject(N.canceled()),this.completionPromise=null)}cancelTimeout(){this.timeout!==null&&(clearTimeout(this.timeout),this.timeout=null)}dispose(){this.cancelTimeout()}}e.Delayer=g;class p{constructor(l){this.delayer=new g(l),this.throttler=new d}trigger(l,h){return this.delayer.trigger(()=>this.throttler.queue(l),h)}cancel(){this.delayer.cancel()}dispose(){this.delayer.dispose()}}e.ThrottledDelayer=p;function c(t,l){return l?new Promise((h,m)=>{const _=setTimeout(h,t);l.onCancellationRequested(()=>{clearTimeout(_),m(N.canceled())})}):S(h=>c(t,h))}e.timeout=c;function o(t,l=0){const h=setTimeout(t,l);return M.toDisposable(()=>clearTimeout(h))}e.disposableTimeout=o;function s(t,l=m=>!!m,h=null){let m=0;const _=t.length,f=()=>{if(m>=_)return Promise.resolve(h);const v=t[m++];return Promise.resolve(v()).then(L=>l(L)?Promise.resolve(L):f())};return f()}e.first=s;class a{constructor(l,h){this._token=-1,typeof l=="function"&&typeof h=="number"&&this.setIfNotSet(l,h)}dispose(){this.cancel()}cancel(){this._token!==-1&&(clearTimeout(this._token),this._token=-1)}cancelAndSet(l,h){this.cancel(),this._token=setTimeout(()=>{this._token=-1,l()},h)}setIfNotSet(l,h){this._token===-1&&(this._token=setTimeout(()=>{this._token=-1,l()},h))}}e.TimeoutTimer=a;class u{constructor(){this._token=-1}dispose(){this.cancel()}cancel(){this._token!==-1&&(clearInterval(this._token),this._token=-1)}cancelAndSet(l,h){this.cancel(),this._token=setInterval(()=>{l()},h)}}e.IntervalTimer=u;class r{constructor(l,h){this.timeoutToken=-1,this.runner=l,this.timeout=h,this.timeoutHandler=this.onTimeout.bind(this)}dispose(){this.cancel(),this.runner=null}cancel(){this.isScheduled()&&(clearTimeout(this.timeoutToken),this.timeoutToken=-1)}schedule(l=this.timeout){this.cancel(),this.timeoutToken=setTimeout(this.timeoutHandler,l)}get delay(){return this.timeout}set delay(l){this.timeout=l}isScheduled(){return this.timeoutToken!==-1}onTimeout(){this.timeoutToken=-1,this.runner&&this.doRun()}doRun(){this.runner&&this.runner()}}e.RunOnceScheduler=r,function(){if(typeof requestIdleCallback!="function"||typeof cancelIdleCallback!="function"){const t=Object.freeze({didTimeout:!0,timeRemaining(){return 15}});e.runWhenIdle=l=>{const h=setTimeout(()=>l(t));let m=!1;return{dispose(){m||(m=!0,clearTimeout(h))}}}}else e.runWhenIdle=(t,l)=>{const h=requestIdleCallback(t,typeof l=="number"?{timeout:l}:void 0);let m=!1;return{dispose(){m||(m=!0,cancelIdleCallback(h))}}}}();class i{constructor(l){this._didRun=!1,this._executor=()=>{try{this._value=l()}catch(h){this._error=h}finally{this._didRun=!0}},this._handle=e.runWhenIdle(()=>this._executor())}dispose(){this._handle.dispose()}get value(){if(this._didRun||(this._handle.dispose(),this._executor()),this._error)throw this._error;return this._value}}e.IdleValue=i;var n;(function(t){function l(f){return Ie(this,void 0,void 0,function*(){return typeof Promise.allSettled=="function"?h(f):m(f)})}t.allSettled=l;function h(f){return Ie(this,void 0,void 0,function*(){return Promise.allSettled(f)})}function m(f){return Ie(this,void 0,void 0,function*(){return Promise.all(f.map(v=>v.then(y=>({status:"fulfilled",value:y}),y=>({status:"rejected",reason:y}))))})}function _(f){return Ie(this,void 0,void 0,function*(){let v;const y=yield Promise.all(f.map(L=>L.then(I=>I,I=>{v||(v=I)})));if(typeof v!="undefined")throw v;return y})}t.settled=_})(n=e.Promises||(e.Promises={}))}),define(Q[282],J([0,1,15,2]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ScrollbarVisibilityController=void 0;class M extends N.Disposable{constructor(S,C,d){super();this._visibility=S,this._visibleClassName=C,this._invisibleClassName=d,this._domNode=null,this._isVisible=!1,this._isNeeded=!1,this._shouldBeVisible=!1,this._revealTimer=this._register(new b.TimeoutTimer)}applyVisibilitySetting(S){return this._visibility===2?!1:this._visibility===3?!0:S}setShouldBeVisible(S){const C=this.applyVisibilitySetting(S);this._shouldBeVisible!==C&&(this._shouldBeVisible=C,this.ensureVisibility())}setIsNeeded(S){this._isNeeded!==S&&(this._isNeeded=S,this.ensureVisibility())}setDomNode(S){this._domNode=S,this._domNode.setClassName(this._invisibleClassName),this.setShouldBeVisible(!1)}ensureVisibility(){if(!this._isNeeded){this._hide(!1);return}this._shouldBeVisible?this._reveal():this._hide(!0)}_reveal(){this._isVisible||(this._isVisible=!0,this._revealTimer.setIfNotSet(()=>{this._domNode&&this._domNode.setClassName(this._visibleClassName)},0))}_hide(S){this._revealTimer.cancel(),!!this._isVisible&&(this._isVisible=!1,this._domNode&&this._domNode.setClassName(this._invisibleClassName+(S?" fade":"")))}}e.ScrollbarVisibilityController=M}),define(Q[27],J([0,1,6]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CSSIcon=e.Codicon=e.registerCodicon=e.iconRegistry=void 0;class N{constructor(){this._icons=new Map,this._onDidRegister=new b.Emitter}add(g){const p=this._icons.get(g.id);p?g.description?p.description=g.description:console.error(`Duplicate registration of codicon ${g.id}`):(this._icons.set(g.id,g),this._onDidRegister.fire(g))}get(g){return this._icons.get(g)}get all(){return this._icons.values()}get onDidRegister(){return this._onDidRegister.event}}const M=new N;e.iconRegistry=M;function w(d,g){return new S(d,g)}e.registerCodicon=w;class S{constructor(g,p,c){this.id=g,this.definition=p,this.description=c,M.add(this)}get classNames(){return"codicon codicon-"+this.id}get classNamesArray(){return["codicon","codicon-"+this.id]}get cssSelector(){return".codicon.codicon-"+this.id}}e.Codicon=S;var C;(function(d){d.iconNameSegment="[A-Za-z0-9]+",d.iconNameExpression="[A-Za-z0-9\\-]+",d.iconModifierExpression="~[A-Za-z]+";const g=new RegExp(`^(${d.iconNameExpression})(${d.iconModifierExpression})?$`);function p(s){if(s instanceof S)return["codicon","codicon-"+s.id];const a=g.exec(s.id);if(!a)return p(S.error);let[,u,r]=a;const i=["codicon","codicon-"+u];return r&&i.push("codicon-modifier-"+r.substr(1)),i}d.asClassNameArray=p;function c(s){return p(s).join(" ")}d.asClassName=c;function o(s){return"."+p(s).join(".")}d.asCSSSelector=o})(C=e.CSSIcon||(e.CSSIcon={})),function(d){d.add=new d("add",{fontCharacter:"\\ea60"}),d.plus=new d("plus",{fontCharacter:"\\ea60"}),d.gistNew=new d("gist-new",{fontCharacter:"\\ea60"}),d.repoCreate=new d("repo-create",{fontCharacter:"\\ea60"}),d.lightbulb=new d("lightbulb",{fontCharacter:"\\ea61"}),d.lightBulb=new d("light-bulb",{fontCharacter:"\\ea61"}),d.repo=new d("repo",{fontCharacter:"\\ea62"}),d.repoDelete=new d("repo-delete",{fontCharacter:"\\ea62"}),d.gistFork=new d("gist-fork",{fontCharacter:"\\ea63"}),d.repoForked=new d("repo-forked",{fontCharacter:"\\ea63"}),d.gitPullRequest=new d("git-pull-request",{fontCharacter:"\\ea64"}),d.gitPullRequestAbandoned=new d("git-pull-request-abandoned",{fontCharacter:"\\ea64"}),d.recordKeys=new d("record-keys",{fontCharacter:"\\ea65"}),d.keyboard=new d("keyboard",{fontCharacter:"\\ea65"}),d.tag=new d("tag",{fontCharacter:"\\ea66"}),d.tagAdd=new d("tag-add",{fontCharacter:"\\ea66"}),d.tagRemove=new d("tag-remove",{fontCharacter:"\\ea66"}),d.person=new d("person",{fontCharacter:"\\ea67"}),d.personAdd=new d("person-add",{fontCharacter:"\\ea67"}),d.personFollow=new d("person-follow",{fontCharacter:"\\ea67"}),d.personOutline=new d("person-outline",{fontCharacter:"\\ea67"}),d.personFilled=new d("person-filled",{fontCharacter:"\\ea67"}),d.gitBranch=new d("git-branch",{fontCharacter:"\\ea68"}),d.gitBranchCreate=new d("git-branch-create",{fontCharacter:"\\ea68"}),d.gitBranchDelete=new d("git-branch-delete",{fontCharacter:"\\ea68"}),d.sourceControl=new d("source-control",{fontCharacter:"\\ea68"}),d.mirror=new d("mirror",{fontCharacter:"\\ea69"}),d.mirrorPublic=new d("mirror-public",{fontCharacter:"\\ea69"}),d.star=new d("star",{fontCharacter:"\\ea6a"}),d.starAdd=new d("star-add",{fontCharacter:"\\ea6a"}),d.starDelete=new d("star-delete",{fontCharacter:"\\ea6a"}),d.starEmpty=new d("star-empty",{fontCharacter:"\\ea6a"}),d.comment=new d("comment",{fontCharacter:"\\ea6b"}),d.commentAdd=new d("comment-add",{fontCharacter:"\\ea6b"}),d.alert=new d("alert",{fontCharacter:"\\ea6c"}),d.warning=new d("warning",{fontCharacter:"\\ea6c"}),d.search=new d("search",{fontCharacter:"\\ea6d"}),d.searchSave=new d("search-save",{fontCharacter:"\\ea6d"}),d.logOut=new d("log-out",{fontCharacter:"\\ea6e"}),d.signOut=new d("sign-out",{fontCharacter:"\\ea6e"}),d.logIn=new d("log-in",{fontCharacter:"\\ea6f"}),d.signIn=new d("sign-in",{fontCharacter:"\\ea6f"}),d.eye=new d("eye",{fontCharacter:"\\ea70"}),d.eyeUnwatch=new d("eye-unwatch",{fontCharacter:"\\ea70"}),d.eyeWatch=new d("eye-watch",{fontCharacter:"\\ea70"}),d.circleFilled=new d("circle-filled",{fontCharacter:"\\ea71"}),d.primitiveDot=new d("primitive-dot",{fontCharacter:"\\ea71"}),d.closeDirty=new d("close-dirty",{fontCharacter:"\\ea71"}),d.debugBreakpoint=new d("debug-breakpoint",{fontCharacter:"\\ea71"}),d.debugBreakpointDisabled=new d("debug-breakpoint-disabled",{fontCharacter:"\\ea71"}),d.debugHint=new d("debug-hint",{fontCharacter:"\\ea71"}),d.primitiveSquare=new d("primitive-square",{fontCharacter:"\\ea72"}),d.edit=new d("edit",{fontCharacter:"\\ea73"}),d.pencil=new d("pencil",{fontCharacter:"\\ea73"}),d.info=new d("info",{fontCharacter:"\\ea74"}),d.issueOpened=new d("issue-opened",{fontCharacter:"\\ea74"}),d.gistPrivate=new d("gist-private",{fontCharacter:"\\ea75"}),d.gitForkPrivate=new d("git-fork-private",{fontCharacter:"\\ea75"}),d.lock=new d("lock",{fontCharacter:"\\ea75"}),d.mirrorPrivate=new d("mirror-private",{fontCharacter:"\\ea75"}),d.close=new d("close",{fontCharacter:"\\ea76"}),d.removeClose=new d("remove-close",{fontCharacter:"\\ea76"}),d.x=new d("x",{fontCharacter:"\\ea76"}),d.repoSync=new d("repo-sync",{fontCharacter:"\\ea77"}),d.sync=new d("sync",{fontCharacter:"\\ea77"}),d.clone=new d("clone",{fontCharacter:"\\ea78"}),d.desktopDownload=new d("desktop-download",{fontCharacter:"\\ea78"}),d.beaker=new d("beaker",{fontCharacter:"\\ea79"}),d.microscope=new d("microscope",{fontCharacter:"\\ea79"}),d.vm=new d("vm",{fontCharacter:"\\ea7a"}),d.deviceDesktop=new d("device-desktop",{fontCharacter:"\\ea7a"}),d.file=new d("file",{fontCharacter:"\\ea7b"}),d.fileText=new d("file-text",{fontCharacter:"\\ea7b"}),d.more=new d("more",{fontCharacter:"\\ea7c"}),d.ellipsis=new d("ellipsis",{fontCharacter:"\\ea7c"}),d.kebabHorizontal=new d("kebab-horizontal",{fontCharacter:"\\ea7c"}),d.mailReply=new d("mail-reply",{fontCharacter:"\\ea7d"}),d.reply=new d("reply",{fontCharacter:"\\ea7d"}),d.organization=new d("organization",{fontCharacter:"\\ea7e"}),d.organizationFilled=new d("organization-filled",{fontCharacter:"\\ea7e"}),d.organizationOutline=new d("organization-outline",{fontCharacter:"\\ea7e"}),d.newFile=new d("new-file",{fontCharacter:"\\ea7f"}),d.fileAdd=new d("file-add",{fontCharacter:"\\ea7f"}),d.newFolder=new d("new-folder",{fontCharacter:"\\ea80"}),d.fileDirectoryCreate=new d("file-directory-create",{fontCharacter:"\\ea80"}),d.trash=new d("trash",{fontCharacter:"\\ea81"}),d.trashcan=new d("trashcan",{fontCharacter:"\\ea81"}),d.history=new d("history",{fontCharacter:"\\ea82"}),d.clock=new d("clock",{fontCharacter:"\\ea82"}),d.folder=new d("folder",{fontCharacter:"\\ea83"}),d.fileDirectory=new d("file-directory",{fontCharacter:"\\ea83"}),d.symbolFolder=new d("symbol-folder",{fontCharacter:"\\ea83"}),d.logoGithub=new d("logo-github",{fontCharacter:"\\ea84"}),d.markGithub=new d("mark-github",{fontCharacter:"\\ea84"}),d.github=new d("github",{fontCharacter:"\\ea84"}),d.terminal=new d("terminal",{fontCharacter:"\\ea85"}),d.console=new d("console",{fontCharacter:"\\ea85"}),d.repl=new d("repl",{fontCharacter:"\\ea85"}),d.zap=new d("zap",{fontCharacter:"\\ea86"}),d.symbolEvent=new d("symbol-event",{fontCharacter:"\\ea86"}),d.error=new d("error",{fontCharacter:"\\ea87"}),d.stop=new d("stop",{fontCharacter:"\\ea87"}),d.variable=new d("variable",{fontCharacter:"\\ea88"}),d.symbolVariable=new d("symbol-variable",{fontCharacter:"\\ea88"}),d.array=new d("array",{fontCharacter:"\\ea8a"}),d.symbolArray=new d("symbol-array",{fontCharacter:"\\ea8a"}),d.symbolModule=new d("symbol-module",{fontCharacter:"\\ea8b"}),d.symbolPackage=new d("symbol-package",{fontCharacter:"\\ea8b"}),d.symbolNamespace=new d("symbol-namespace",{fontCharacter:"\\ea8b"}),d.symbolObject=new d("symbol-object",{fontCharacter:"\\ea8b"}),d.symbolMethod=new d("symbol-method",{fontCharacter:"\\ea8c"}),d.symbolFunction=new d("symbol-function",{fontCharacter:"\\ea8c"}),d.symbolConstructor=new d("symbol-constructor",{fontCharacter:"\\ea8c"}),d.symbolBoolean=new d("symbol-boolean",{fontCharacter:"\\ea8f"}),d.symbolNull=new d("symbol-null",{fontCharacter:"\\ea8f"}),d.symbolNumeric=new d("symbol-numeric",{fontCharacter:"\\ea90"}),d.symbolNumber=new d("symbol-number",{fontCharacter:"\\ea90"}),d.symbolStructure=new d("symbol-structure",{fontCharacter:"\\ea91"}),d.symbolStruct=new d("symbol-struct",{fontCharacter:"\\ea91"}),d.symbolParameter=new d("symbol-parameter",{fontCharacter:"\\ea92"}),d.symbolTypeParameter=new d("symbol-type-parameter",{fontCharacter:"\\ea92"}),d.symbolKey=new d("symbol-key",{fontCharacter:"\\ea93"}),d.symbolText=new d("symbol-text",{fontCharacter:"\\ea93"}),d.symbolReference=new d("symbol-reference",{fontCharacter:"\\ea94"}),d.goToFile=new d("go-to-file",{fontCharacter:"\\ea94"}),d.symbolEnum=new d("symbol-enum",{fontCharacter:"\\ea95"}),d.symbolValue=new d("symbol-value",{fontCharacter:"\\ea95"}),d.symbolRuler=new d("symbol-ruler",{fontCharacter:"\\ea96"}),d.symbolUnit=new d("symbol-unit",{fontCharacter:"\\ea96"}),d.activateBreakpoints=new d("activate-breakpoints",{fontCharacter:"\\ea97"}),d.archive=new d("archive",{fontCharacter:"\\ea98"}),d.arrowBoth=new d("arrow-both",{fontCharacter:"\\ea99"}),d.arrowDown=new d("arrow-down",{fontCharacter:"\\ea9a"}),d.arrowLeft=new d("arrow-left",{fontCharacter:"\\ea9b"}),d.arrowRight=new d("arrow-right",{fontCharacter:"\\ea9c"}),d.arrowSmallDown=new d("arrow-small-down",{fontCharacter:"\\ea9d"}),d.arrowSmallLeft=new d("arrow-small-left",{fontCharacter:"\\ea9e"}),d.arrowSmallRight=new d("arrow-small-right",{fontCharacter:"\\ea9f"}),d.arrowSmallUp=new d("arrow-small-up",{fontCharacter:"\\eaa0"}),d.arrowUp=new d("arrow-up",{fontCharacter:"\\eaa1"}),d.bell=new d("bell",{fontCharacter:"\\eaa2"}),d.bold=new d("bold",{fontCharacter:"\\eaa3"}),d.book=new d("book",{fontCharacter:"\\eaa4"}),d.bookmark=new d("bookmark",{fontCharacter:"\\eaa5"}),d.debugBreakpointConditionalUnverified=new d("debug-breakpoint-conditional-unverified",{fontCharacter:"\\eaa6"}),d.debugBreakpointConditional=new d("debug-breakpoint-conditional",{fontCharacter:"\\eaa7"}),d.debugBreakpointConditionalDisabled=new d("debug-breakpoint-conditional-disabled",{fontCharacter:"\\eaa7"}),d.debugBreakpointDataUnverified=new d("debug-breakpoint-data-unverified",{fontCharacter:"\\eaa8"}),d.debugBreakpointData=new d("debug-breakpoint-data",{fontCharacter:"\\eaa9"}),d.debugBreakpointDataDisabled=new d("debug-breakpoint-data-disabled",{fontCharacter:"\\eaa9"}),d.debugBreakpointLogUnverified=new d("debug-breakpoint-log-unverified",{fontCharacter:"\\eaaa"}),d.debugBreakpointLog=new d("debug-breakpoint-log",{fontCharacter:"\\eaab"}),d.debugBreakpointLogDisabled=new d("debug-breakpoint-log-disabled",{fontCharacter:"\\eaab"}),d.briefcase=new d("briefcase",{fontCharacter:"\\eaac"}),d.broadcast=new d("broadcast",{fontCharacter:"\\eaad"}),d.browser=new d("browser",{fontCharacter:"\\eaae"}),d.bug=new d("bug",{fontCharacter:"\\eaaf"}),d.calendar=new d("calendar",{fontCharacter:"\\eab0"}),d.caseSensitive=new d("case-sensitive",{fontCharacter:"\\eab1"}),d.check=new d("check",{fontCharacter:"\\eab2"}),d.checklist=new d("checklist",{fontCharacter:"\\eab3"}),d.chevronDown=new d("chevron-down",{fontCharacter:"\\eab4"}),d.chevronLeft=new d("chevron-left",{fontCharacter:"\\eab5"}),d.chevronRight=new d("chevron-right",{fontCharacter:"\\eab6"}),d.chevronUp=new d("chevron-up",{fontCharacter:"\\eab7"}),d.chromeClose=new d("chrome-close",{fontCharacter:"\\eab8"}),d.chromeMaximize=new d("chrome-maximize",{fontCharacter:"\\eab9"}),d.chromeMinimize=new d("chrome-minimize",{fontCharacter:"\\eaba"}),d.chromeRestore=new d("chrome-restore",{fontCharacter:"\\eabb"}),d.circleOutline=new d("circle-outline",{fontCharacter:"\\eabc"}),d.debugBreakpointUnverified=new d("debug-breakpoint-unverified",{fontCharacter:"\\eabc"}),d.circleSlash=new d("circle-slash",{fontCharacter:"\\eabd"}),d.circuitBoard=new d("circuit-board",{fontCharacter:"\\eabe"}),d.clearAll=new d("clear-all",{fontCharacter:"\\eabf"}),d.clippy=new d("clippy",{fontCharacter:"\\eac0"}),d.closeAll=new d("close-all",{fontCharacter:"\\eac1"}),d.cloudDownload=new d("cloud-download",{fontCharacter:"\\eac2"}),d.cloudUpload=new d("cloud-upload",{fontCharacter:"\\eac3"}),d.code=new d("code",{fontCharacter:"\\eac4"}),d.collapseAll=new d("collapse-all",{fontCharacter:"\\eac5"}),d.colorMode=new d("color-mode",{fontCharacter:"\\eac6"}),d.commentDiscussion=new d("comment-discussion",{fontCharacter:"\\eac7"}),d.compareChanges=new d("compare-changes",{fontCharacter:"\\eafd"}),d.creditCard=new d("credit-card",{fontCharacter:"\\eac9"}),d.dash=new d("dash",{fontCharacter:"\\eacc"}),d.dashboard=new d("dashboard",{fontCharacter:"\\eacd"}),d.database=new d("database",{fontCharacter:"\\eace"}),d.debugContinue=new d("debug-continue",{fontCharacter:"\\eacf"}),d.debugDisconnect=new d("debug-disconnect",{fontCharacter:"\\ead0"}),d.debugPause=new d("debug-pause",{fontCharacter:"\\ead1"}),d.debugRestart=new d("debug-restart",{fontCharacter:"\\ead2"}),d.debugStart=new d("debug-start",{fontCharacter:"\\ead3"}),d.debugStepInto=new d("debug-step-into",{fontCharacter:"\\ead4"}),d.debugStepOut=new d("debug-step-out",{fontCharacter:"\\ead5"}),d.debugStepOver=new d("debug-step-over",{fontCharacter:"\\ead6"}),d.debugStop=new d("debug-stop",{fontCharacter:"\\ead7"}),d.debug=new d("debug",{fontCharacter:"\\ead8"}),d.deviceCameraVideo=new d("device-camera-video",{fontCharacter:"\\ead9"}),d.deviceCamera=new d("device-camera",{fontCharacter:"\\eada"}),d.deviceMobile=new d("device-mobile",{fontCharacter:"\\eadb"}),d.diffAdded=new d("diff-added",{fontCharacter:"\\eadc"}),d.diffIgnored=new d("diff-ignored",{fontCharacter:"\\eadd"}),d.diffModified=new d("diff-modified",{fontCharacter:"\\eade"}),d.diffRemoved=new d("diff-removed",{fontCharacter:"\\eadf"}),d.diffRenamed=new d("diff-renamed",{fontCharacter:"\\eae0"}),d.diff=new d("diff",{fontCharacter:"\\eae1"}),d.discard=new d("discard",{fontCharacter:"\\eae2"}),d.editorLayout=new d("editor-layout",{fontCharacter:"\\eae3"}),d.emptyWindow=new d("empty-window",{fontCharacter:"\\eae4"}),d.exclude=new d("exclude",{fontCharacter:"\\eae5"}),d.extensions=new d("extensions",{fontCharacter:"\\eae6"}),d.eyeClosed=new d("eye-closed",{fontCharacter:"\\eae7"}),d.fileBinary=new d("file-binary",{fontCharacter:"\\eae8"}),d.fileCode=new d("file-code",{fontCharacter:"\\eae9"}),d.fileMedia=new d("file-media",{fontCharacter:"\\eaea"}),d.filePdf=new d("file-pdf",{fontCharacter:"\\eaeb"}),d.fileSubmodule=new d("file-submodule",{fontCharacter:"\\eaec"}),d.fileSymlinkDirectory=new d("file-symlink-directory",{fontCharacter:"\\eaed"}),d.fileSymlinkFile=new d("file-symlink-file",{fontCharacter:"\\eaee"}),d.fileZip=new d("file-zip",{fontCharacter:"\\eaef"}),d.files=new d("files",{fontCharacter:"\\eaf0"}),d.filter=new d("filter",{fontCharacter:"\\eaf1"}),d.flame=new d("flame",{fontCharacter:"\\eaf2"}),d.foldDown=new d("fold-down",{fontCharacter:"\\eaf3"}),d.foldUp=new d("fold-up",{fontCharacter:"\\eaf4"}),d.fold=new d("fold",{fontCharacter:"\\eaf5"}),d.folderActive=new d("folder-active",{fontCharacter:"\\eaf6"}),d.folderOpened=new d("folder-opened",{fontCharacter:"\\eaf7"}),d.gear=new d("gear",{fontCharacter:"\\eaf8"}),d.gift=new d("gift",{fontCharacter:"\\eaf9"}),d.gistSecret=new d("gist-secret",{fontCharacter:"\\eafa"}),d.gist=new d("gist",{fontCharacter:"\\eafb"}),d.gitCommit=new d("git-commit",{fontCharacter:"\\eafc"}),d.gitCompare=new d("git-compare",{fontCharacter:"\\eafd"}),d.gitMerge=new d("git-merge",{fontCharacter:"\\eafe"}),d.githubAction=new d("github-action",{fontCharacter:"\\eaff"}),d.githubAlt=new d("github-alt",{fontCharacter:"\\eb00"}),d.globe=new d("globe",{fontCharacter:"\\eb01"}),d.grabber=new d("grabber",{fontCharacter:"\\eb02"}),d.graph=new d("graph",{fontCharacter:"\\eb03"}),d.gripper=new d("gripper",{fontCharacter:"\\eb04"}),d.heart=new d("heart",{fontCharacter:"\\eb05"}),d.home=new d("home",{fontCharacter:"\\eb06"}),d.horizontalRule=new d("horizontal-rule",{fontCharacter:"\\eb07"}),d.hubot=new d("hubot",{fontCharacter:"\\eb08"}),d.inbox=new d("inbox",{fontCharacter:"\\eb09"}),d.issueClosed=new d("issue-closed",{fontCharacter:"\\eb0a"}),d.issueReopened=new d("issue-reopened",{fontCharacter:"\\eb0b"}),d.issues=new d("issues",{fontCharacter:"\\eb0c"}),d.italic=new d("italic",{fontCharacter:"\\eb0d"}),d.jersey=new d("jersey",{fontCharacter:"\\eb0e"}),d.json=new d("json",{fontCharacter:"\\eb0f"}),d.kebabVertical=new d("kebab-vertical",{fontCharacter:"\\eb10"}),d.key=new d("key",{fontCharacter:"\\eb11"}),d.law=new d("law",{fontCharacter:"\\eb12"}),d.lightbulbAutofix=new d("lightbulb-autofix",{fontCharacter:"\\eb13"}),d.linkExternal=new d("link-external",{fontCharacter:"\\eb14"}),d.link=new d("link",{fontCharacter:"\\eb15"}),d.listOrdered=new d("list-ordered",{fontCharacter:"\\eb16"}),d.listUnordered=new d("list-unordered",{fontCharacter:"\\eb17"}),d.liveShare=new d("live-share",{fontCharacter:"\\eb18"}),d.loading=new d("loading",{fontCharacter:"\\eb19"}),d.location=new d("location",{fontCharacter:"\\eb1a"}),d.mailRead=new d("mail-read",{fontCharacter:"\\eb1b"}),d.mail=new d("mail",{fontCharacter:"\\eb1c"}),d.markdown=new d("markdown",{fontCharacter:"\\eb1d"}),d.megaphone=new d("megaphone",{fontCharacter:"\\eb1e"}),d.mention=new d("mention",{fontCharacter:"\\eb1f"}),d.milestone=new d("milestone",{fontCharacter:"\\eb20"}),d.mortarBoard=new d("mortar-board",{fontCharacter:"\\eb21"}),d.move=new d("move",{fontCharacter:"\\eb22"}),d.multipleWindows=new d("multiple-windows",{fontCharacter:"\\eb23"}),d.mute=new d("mute",{fontCharacter:"\\eb24"}),d.noNewline=new d("no-newline",{fontCharacter:"\\eb25"}),d.note=new d("note",{fontCharacter:"\\eb26"}),d.octoface=new d("octoface",{fontCharacter:"\\eb27"}),d.openPreview=new d("open-preview",{fontCharacter:"\\eb28"}),d.package_=new d("package",{fontCharacter:"\\eb29"}),d.paintcan=new d("paintcan",{fontCharacter:"\\eb2a"}),d.pin=new d("pin",{fontCharacter:"\\eb2b"}),d.play=new d("play",{fontCharacter:"\\eb2c"}),d.run=new d("run",{fontCharacter:"\\eb2c"}),d.plug=new d("plug",{fontCharacter:"\\eb2d"}),d.preserveCase=new d("preserve-case",{fontCharacter:"\\eb2e"}),d.preview=new d("preview",{fontCharacter:"\\eb2f"}),d.project=new d("project",{fontCharacter:"\\eb30"}),d.pulse=new d("pulse",{fontCharacter:"\\eb31"}),d.question=new d("question",{fontCharacter:"\\eb32"}),d.quote=new d("quote",{fontCharacter:"\\eb33"}),d.radioTower=new d("radio-tower",{fontCharacter:"\\eb34"}),d.reactions=new d("reactions",{fontCharacter:"\\eb35"}),d.references=new d("references",{fontCharacter:"\\eb36"}),d.refresh=new d("refresh",{fontCharacter:"\\eb37"}),d.regex=new d("regex",{fontCharacter:"\\eb38"}),d.remoteExplorer=new d("remote-explorer",{fontCharacter:"\\eb39"}),d.remote=new d("remote",{fontCharacter:"\\eb3a"}),d.remove=new d("remove",{fontCharacter:"\\eb3b"}),d.replaceAll=new d("replace-all",{fontCharacter:"\\eb3c"}),d.replace=new d("replace",{fontCharacter:"\\eb3d"}),d.repoClone=new d("repo-clone",{fontCharacter:"\\eb3e"}),d.repoForcePush=new d("repo-force-push",{fontCharacter:"\\eb3f"}),d.repoPull=new d("repo-pull",{fontCharacter:"\\eb40"}),d.repoPush=new d("repo-push",{fontCharacter:"\\eb41"}),d.report=new d("report",{fontCharacter:"\\eb42"}),d.requestChanges=new d("request-changes",{fontCharacter:"\\eb43"}),d.rocket=new d("rocket",{fontCharacter:"\\eb44"}),d.rootFolderOpened=new d("root-folder-opened",{fontCharacter:"\\eb45"}),d.rootFolder=new d("root-folder",{fontCharacter:"\\eb46"}),d.rss=new d("rss",{fontCharacter:"\\eb47"}),d.ruby=new d("ruby",{fontCharacter:"\\eb48"}),d.saveAll=new d("save-all",{fontCharacter:"\\eb49"}),d.saveAs=new d("save-as",{fontCharacter:"\\eb4a"}),d.save=new d("save",{fontCharacter:"\\eb4b"}),d.screenFull=new d("screen-full",{fontCharacter:"\\eb4c"}),d.screenNormal=new d("screen-normal",{fontCharacter:"\\eb4d"}),d.searchStop=new d("search-stop",{fontCharacter:"\\eb4e"}),d.server=new d("server",{fontCharacter:"\\eb50"}),d.settingsGear=new d("settings-gear",{fontCharacter:"\\eb51"}),d.settings=new d("settings",{fontCharacter:"\\eb52"}),d.shield=new d("shield",{fontCharacter:"\\eb53"}),d.smiley=new d("smiley",{fontCharacter:"\\eb54"}),d.sortPrecedence=new d("sort-precedence",{fontCharacter:"\\eb55"}),d.splitHorizontal=new d("split-horizontal",{fontCharacter:"\\eb56"}),d.splitVertical=new d("split-vertical",{fontCharacter:"\\eb57"}),d.squirrel=new d("squirrel",{fontCharacter:"\\eb58"}),d.starFull=new d("star-full",{fontCharacter:"\\eb59"}),d.starHalf=new d("star-half",{fontCharacter:"\\eb5a"}),d.symbolClass=new d("symbol-class",{fontCharacter:"\\eb5b"}),d.symbolColor=new d("symbol-color",{fontCharacter:"\\eb5c"}),d.symbolConstant=new d("symbol-constant",{fontCharacter:"\\eb5d"}),d.symbolEnumMember=new d("symbol-enum-member",{fontCharacter:"\\eb5e"}),d.symbolField=new d("symbol-field",{fontCharacter:"\\eb5f"}),d.symbolFile=new d("symbol-file",{fontCharacter:"\\eb60"}),d.symbolInterface=new d("symbol-interface",{fontCharacter:"\\eb61"}),d.symbolKeyword=new d("symbol-keyword",{fontCharacter:"\\eb62"}),d.symbolMisc=new d("symbol-misc",{fontCharacter:"\\eb63"}),d.symbolOperator=new d("symbol-operator",{fontCharacter:"\\eb64"}),d.symbolProperty=new d("symbol-property",{fontCharacter:"\\eb65"}),d.wrench=new d("wrench",{fontCharacter:"\\eb65"}),d.wrenchSubaction=new d("wrench-subaction",{fontCharacter:"\\eb65"}),d.symbolSnippet=new d("symbol-snippet",{fontCharacter:"\\eb66"}),d.tasklist=new d("tasklist",{fontCharacter:"\\eb67"}),d.telescope=new d("telescope",{fontCharacter:"\\eb68"}),d.textSize=new d("text-size",{fontCharacter:"\\eb69"}),d.threeBars=new d("three-bars",{fontCharacter:"\\eb6a"}),d.thumbsdown=new d("thumbsdown",{fontCharacter:"\\eb6b"}),d.thumbsup=new d("thumbsup",{fontCharacter:"\\eb6c"}),d.tools=new d("tools",{fontCharacter:"\\eb6d"}),d.triangleDown=new d("triangle-down",{fontCharacter:"\\eb6e"}),d.triangleLeft=new d("triangle-left",{fontCharacter:"\\eb6f"}),d.triangleRight=new d("triangle-right",{fontCharacter:"\\eb70"}),d.triangleUp=new d("triangle-up",{fontCharacter:"\\eb71"}),d.twitter=new d("twitter",{fontCharacter:"\\eb72"}),d.unfold=new d("unfold",{fontCharacter:"\\eb73"}),d.unlock=new d("unlock",{fontCharacter:"\\eb74"}),d.unmute=new d("unmute",{fontCharacter:"\\eb75"}),d.unverified=new d("unverified",{fontCharacter:"\\eb76"}),d.verified=new d("verified",{fontCharacter:"\\eb77"}),d.versions=new d("versions",{fontCharacter:"\\eb78"}),d.vmActive=new d("vm-active",{fontCharacter:"\\eb79"}),d.vmOutline=new d("vm-outline",{fontCharacter:"\\eb7a"}),d.vmRunning=new d("vm-running",{fontCharacter:"\\eb7b"}),d.watch=new d("watch",{fontCharacter:"\\eb7c"}),d.whitespace=new d("whitespace",{fontCharacter:"\\eb7d"}),d.wholeWord=new d("whole-word",{fontCharacter:"\\eb7e"}),d.window=new d("window",{fontCharacter:"\\eb7f"}),d.wordWrap=new d("word-wrap",{fontCharacter:"\\eb80"}),d.zoomIn=new d("zoom-in",{fontCharacter:"\\eb81"}),d.zoomOut=new d("zoom-out",{fontCharacter:"\\eb82"}),d.listFilter=new d("list-filter",{fontCharacter:"\\eb83"}),d.listFlat=new d("list-flat",{fontCharacter:"\\eb84"}),d.listSelection=new d("list-selection",{fontCharacter:"\\eb85"}),d.selection=new d("selection",{fontCharacter:"\\eb85"}),d.listTree=new d("list-tree",{fontCharacter:"\\eb86"}),d.debugBreakpointFunctionUnverified=new d("debug-breakpoint-function-unverified",{fontCharacter:"\\eb87"}),d.debugBreakpointFunction=new d("debug-breakpoint-function",{fontCharacter:"\\eb88"}),d.debugBreakpointFunctionDisabled=new d("debug-breakpoint-function-disabled",{fontCharacter:"\\eb88"}),d.debugStackframeActive=new d("debug-stackframe-active",{fontCharacter:"\\eb89"}),d.debugStackframeDot=new d("debug-stackframe-dot",{fontCharacter:"\\eb8a"}),d.debugStackframe=new d("debug-stackframe",{fontCharacter:"\\eb8b"}),d.debugStackframeFocused=new d("debug-stackframe-focused",{fontCharacter:"\\eb8b"}),d.debugBreakpointUnsupported=new d("debug-breakpoint-unsupported",{fontCharacter:"\\eb8c"}),d.symbolString=new d("symbol-string",{fontCharacter:"\\eb8d"}),d.debugReverseContinue=new d("debug-reverse-continue",{fontCharacter:"\\eb8e"}),d.debugStepBack=new d("debug-step-back",{fontCharacter:"\\eb8f"}),d.debugRestartFrame=new d("debug-restart-frame",{fontCharacter:"\\eb90"}),d.callIncoming=new d("call-incoming",{fontCharacter:"\\eb92"}),d.callOutgoing=new d("call-outgoing",{fontCharacter:"\\eb93"}),d.menu=new d("menu",{fontCharacter:"\\eb94"}),d.expandAll=new d("expand-all",{fontCharacter:"\\eb95"}),d.feedback=new d("feedback",{fontCharacter:"\\eb96"}),d.groupByRefType=new d("group-by-ref-type",{fontCharacter:"\\eb97"}),d.ungroupByRefType=new d("ungroup-by-ref-type",{fontCharacter:"\\eb98"}),d.account=new d("account",{fontCharacter:"\\eb99"}),d.bellDot=new d("bell-dot",{fontCharacter:"\\eb9a"}),d.debugConsole=new d("debug-console",{fontCharacter:"\\eb9b"}),d.library=new d("library",{fontCharacter:"\\eb9c"}),d.output=new d("output",{fontCharacter:"\\eb9d"}),d.runAll=new d("run-all",{fontCharacter:"\\eb9e"}),d.syncIgnored=new d("sync-ignored",{fontCharacter:"\\eb9f"}),d.pinned=new d("pinned",{fontCharacter:"\\eba0"}),d.githubInverted=new d("github-inverted",{fontCharacter:"\\eba1"}),d.debugAlt=new d("debug-alt",{fontCharacter:"\\eb91"}),d.serverProcess=new d("server-process",{fontCharacter:"\\eba2"}),d.serverEnvironment=new d("server-environment",{fontCharacter:"\\eba3"}),d.pass=new d("pass",{fontCharacter:"\\eba4"}),d.stopCircle=new d("stop-circle",{fontCharacter:"\\eba5"}),d.playCircle=new d("play-circle",{fontCharacter:"\\eba6"}),d.record=new d("record",{fontCharacter:"\\eba7"}),d.debugAltSmall=new d("debug-alt-small",{fontCharacter:"\\eba8"}),d.vmConnect=new d("vm-connect",{fontCharacter:"\\eba9"}),d.cloud=new d("cloud",{fontCharacter:"\\ebaa"}),d.merge=new d("merge",{fontCharacter:"\\ebab"}),d.exportIcon=new d("export",{fontCharacter:"\\ebac"}),d.graphLeft=new d("graph-left",{fontCharacter:"\\ebad"}),d.magnet=new d("magnet",{fontCharacter:"\\ebae"}),d.notebook=new d("notebook",{fontCharacter:"\\ebaf"}),d.redo=new d("redo",{fontCharacter:"\\ebb0"}),d.checkAll=new d("check-all",{fontCharacter:"\\ebb1"}),d.pinnedDirty=new d("pinned-dirty",{fontCharacter:"\\ebb2"}),d.passFilled=new d("pass-filled",{fontCharacter:"\\ebb3"}),d.circleLargeFilled=new d("circle-large-filled",{fontCharacter:"\\ebb4"}),d.circleLargeOutline=new d("circle-large-outline",{fontCharacter:"\\ebb5"}),d.combine=new d("combine",{fontCharacter:"\\ebb6"}),d.gather=new d("gather",{fontCharacter:"\\ebb6"}),d.table=new d("table",{fontCharacter:"\\ebb7"}),d.variableGroup=new d("variable-group",{fontCharacter:"\\ebb8"}),d.typeHierarchy=new d("type-hierarchy",{fontCharacter:"\\ebb9"}),d.typeHierarchySub=new d("type-hierarchy-sub",{fontCharacter:"\\ebba"}),d.typeHierarchySuper=new d("type-hierarchy-super",{fontCharacter:"\\ebbb"}),d.gitPullRequestCreate=new d("git-pull-request-create",{fontCharacter:"\\ebbc"}),d.runAbove=new d("run-above",{fontCharacter:"\\ebbd"}),d.runBelow=new d("run-below",{fontCharacter:"\\ebbe"}),d.notebookTemplate=new d("notebook-template",{fontCharacter:"\\ebbf"}),d.debugRerun=new d("debug-rerun",{fontCharacter:"\\ebc0"}),d.dropDownButton=new d("drop-down-button",d.chevronDown.definition)}(S=e.Codicon||(e.Codicon={}))}),define(Q[197],J([0,1,27]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.treeItemLoadingIcon=e.treeFilterClearIcon=e.treeFilterOnTypeOffIcon=e.treeFilterOnTypeOnIcon=e.treeItemExpandedIcon=void 0,e.treeItemExpandedIcon=b.registerCodicon("tree-item-expanded",b.Codicon.chevronDown),e.treeFilterOnTypeOnIcon=b.registerCodicon("tree-filter-on-type-on",b.Codicon.listFilter),e.treeFilterOnTypeOffIcon=b.registerCodicon("tree-filter-on-type-off",b.Codicon.listSelection),e.treeFilterClearIcon=b.registerCodicon("tree-filter-clear",b.Codicon.close),e.treeItemLoadingIcon=b.registerCodicon("tree-item-loading",b.Codicon.loading)}),define(Q[283],J([0,1,15]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.compareByPrefix=e.compareAnything=e.compareFileNames=void 0;const N=new b.IdleValue(()=>{const C=new Intl.Collator(void 0,{numeric:!0,sensitivity:"base"});return{collator:C,collatorIsNumeric:C.resolvedOptions().numeric}});function M(C,d,g=!1){const p=C||"",c=d||"",o=N.value.collator.compare(p,c);return N.value.collatorIsNumeric&&o===0&&p!==c?pc.length)return 1}return 0}e.compareByPrefix=S}),define(Q[121],J([0,1,6,2]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SmoothScrollingOperation=e.SmoothScrollingUpdate=e.Scrollable=e.ScrollState=void 0;class M{constructor(s,a,u,r,i,n){s=s|0,a=a|0,u=u|0,r=r|0,i=i|0,n=n|0,this.rawScrollLeft=u,this.rawScrollTop=n,s<0&&(s=0),u+s>a&&(u=a-s),u<0&&(u=0),r<0&&(r=0),n+r>i&&(n=i-r),n<0&&(n=0),this.width=s,this.scrollWidth=a,this.scrollLeft=u,this.height=r,this.scrollHeight=i,this.scrollTop=n}equals(s){return this.rawScrollLeft===s.rawScrollLeft&&this.rawScrollTop===s.rawScrollTop&&this.width===s.width&&this.scrollWidth===s.scrollWidth&&this.scrollLeft===s.scrollLeft&&this.height===s.height&&this.scrollHeight===s.scrollHeight&&this.scrollTop===s.scrollTop}withScrollDimensions(s,a){return new M(typeof s.width!="undefined"?s.width:this.width,typeof s.scrollWidth!="undefined"?s.scrollWidth:this.scrollWidth,a?this.rawScrollLeft:this.scrollLeft,typeof s.height!="undefined"?s.height:this.height,typeof s.scrollHeight!="undefined"?s.scrollHeight:this.scrollHeight,a?this.rawScrollTop:this.scrollTop)}withScrollPosition(s){return new M(this.width,this.scrollWidth,typeof s.scrollLeft!="undefined"?s.scrollLeft:this.rawScrollLeft,this.height,this.scrollHeight,typeof s.scrollTop!="undefined"?s.scrollTop:this.rawScrollTop)}createScrollEvent(s,a){const u=this.width!==s.width,r=this.scrollWidth!==s.scrollWidth,i=this.scrollLeft!==s.scrollLeft,n=this.height!==s.height,t=this.scrollHeight!==s.scrollHeight,l=this.scrollTop!==s.scrollTop;return{inSmoothScrolling:a,oldWidth:s.width,oldScrollWidth:s.scrollWidth,oldScrollLeft:s.scrollLeft,width:this.width,scrollWidth:this.scrollWidth,scrollLeft:this.scrollLeft,oldHeight:s.height,oldScrollHeight:s.scrollHeight,oldScrollTop:s.scrollTop,height:this.height,scrollHeight:this.scrollHeight,scrollTop:this.scrollTop,widthChanged:u,scrollWidthChanged:r,scrollLeftChanged:i,heightChanged:n,scrollHeightChanged:t,scrollTopChanged:l}}}e.ScrollState=M;class w extends N.Disposable{constructor(s,a){super();this._onScroll=this._register(new b.Emitter),this.onScroll=this._onScroll.event,this._smoothScrollDuration=s,this._scheduleAtNextAnimationFrame=a,this._state=new M(0,0,0,0,0,0),this._smoothScrolling=null}dispose(){this._smoothScrolling&&(this._smoothScrolling.dispose(),this._smoothScrolling=null),super.dispose()}setSmoothScrollDuration(s){this._smoothScrollDuration=s}validateScrollPosition(s){return this._state.withScrollPosition(s)}getScrollDimensions(){return this._state}setScrollDimensions(s,a){const u=this._state.withScrollDimensions(s,a);this._setState(u,Boolean(this._smoothScrolling)),this._smoothScrolling&&this._smoothScrolling.acceptScrollDimensions(this._state)}getFutureScrollPosition(){return this._smoothScrolling?this._smoothScrolling.to:this._state}getCurrentScrollPosition(){return this._state}setScrollPositionNow(s){const a=this._state.withScrollPosition(s);this._smoothScrolling&&(this._smoothScrolling.dispose(),this._smoothScrolling=null),this._setState(a,!1)}setScrollPositionSmooth(s,a){if(this._smoothScrollDuration===0)return this.setScrollPositionNow(s);if(this._smoothScrolling){s={scrollLeft:typeof s.scrollLeft=="undefined"?this._smoothScrolling.to.scrollLeft:s.scrollLeft,scrollTop:typeof s.scrollTop=="undefined"?this._smoothScrolling.to.scrollTop:s.scrollTop};const u=this._state.withScrollPosition(s);if(this._smoothScrolling.to.scrollLeft===u.scrollLeft&&this._smoothScrolling.to.scrollTop===u.scrollTop)return;let r;a?r=new g(this._smoothScrolling.from,u,this._smoothScrolling.startTime,this._smoothScrolling.duration):r=this._smoothScrolling.combine(this._state,u,this._smoothScrollDuration),this._smoothScrolling.dispose(),this._smoothScrolling=r}else{const u=this._state.withScrollPosition(s);this._smoothScrolling=g.start(this._state,u,this._smoothScrollDuration)}this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame(()=>{!this._smoothScrolling||(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())})}_performSmoothScrolling(){if(!!this._smoothScrolling){const s=this._smoothScrolling.tick(),a=this._state.withScrollPosition(s);if(this._setState(a,!0),!!this._smoothScrolling){if(s.isDone){this._smoothScrolling.dispose(),this._smoothScrolling=null;return}this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame(()=>{!this._smoothScrolling||(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())})}}}_setState(s,a){const u=this._state;u.equals(s)||(this._state=s,this._onScroll.fire(this._state.createScrollEvent(u,a)))}}e.Scrollable=w;class S{constructor(s,a,u){this.scrollLeft=s,this.scrollTop=a,this.isDone=u}}e.SmoothScrollingUpdate=S;function C(o,s){const a=s-o;return function(u){return o+a*c(u)}}function d(o,s,a){return function(u){return u2.5*u){let i,n;return s=j.length?te:j[ue]})}e.format=M;function w(G){return G.replace(/[<>&]/g,function(j){switch(j){case"<":return"<";case">":return">";case"&":return"&";default:return j}})}e.escape=w;function S(G){return G.replace(/[\\\{\}\*\+\?\|\^\$\.\[\]\(\)]/g,"\\$&")}e.escapeRegExpCharacters=S;function C(G,j=" "){const te=d(G,j);return g(te,j)}e.trim=C;function d(G,j){if(!G||!j)return G;const te=j.length;if(te===0||G.length===0)return G;let Z=0;for(;G.indexOf(j,Z)===Z;)Z=Z+te;return G.substring(Z)}e.ltrim=d;function g(G,j){if(!G||!j)return G;const te=j.length,Z=G.length;if(te===0||Z===0)return G;let ue=Z,he=-1;for(;he=G.lastIndexOf(j,ue-1),!(he===-1||he+te!==ue);){if(he===0)return"";ue=he}return G.substring(0,ue)}e.rtrim=g;function p(G){return G.replace(/[\-\\\{\}\+\?\|\^\$\.\,\[\]\(\)\#\s]/g,"\\$&").replace(/[\*]/g,".*")}e.convertSimple2RegExpPattern=p;function c(G){return G.replace(/\*/g,"")}e.stripWildcards=c;function o(G,j,te={}){if(!G)throw new Error("Cannot create regex from empty string");j||(G=S(G)),te.wholeWord&&(/\B/.test(G.charAt(0))||(G="\\b"+G),/\B/.test(G.charAt(G.length-1))||(G=G+"\\b"));let Z="";return te.global&&(Z+="g"),te.matchCase||(Z+="i"),te.multiline&&(Z+="m"),te.unicode&&(Z+="u"),new RegExp(G,Z)}e.createRegExp=o;function s(G){return G.source==="^"||G.source==="^$"||G.source==="$"||G.source==="^\\s*$"?!1:!!(G.exec("")&&G.lastIndex===0)}e.regExpLeadsToEndlessLoop=s;function a(G){return(G.global?"g":"")+(G.ignoreCase?"i":"")+(G.multiline?"m":"")+(G.unicode?"u":"")}e.regExpFlags=a;function u(G){return G.split(/\r\n|\r|\n/)}e.splitLines=u;function r(G){for(let j=0,te=G.length;j=0;te--){const Z=G.charCodeAt(te);if(Z!==32&&Z!==9)return te}return-1}e.lastNonWhitespaceIndex=n;function t(G,j){return Gj?1:0}e.compare=t;function l(G,j,te=0,Z=G.length,ue=0,he=j.length){for(;teCe)return 1}const re=Z-te,ce=he-ue;return rece?1:0}e.compareSubstring=l;function h(G,j){return m(G,j,0,G.length,0,j.length)}e.compareIgnoreCase=h;function m(G,j,te=0,Z=G.length,ue=0,he=j.length){for(;tece?1:0}e.compareSubstringIgnoreCase=m;function _(G){return G>=97&&G<=122}e.isLowerAsciiLetter=_;function f(G){return G>=65&&G<=90}e.isUpperAsciiLetter=f;function v(G){return _(G)||f(G)}function y(G,j){return G.length===j.length&&L(G,j)}e.equalsIgnoreCase=y;function L(G,j,te=G.length){for(let Z=0;ZG.length?!1:L(G,j,te)}e.startsWithIgnoreCase=I;function k(G,j){let te,Z=Math.min(G.length,j.length);for(te=0;te1){const Z=G.charCodeAt(j-2);if(T(Z))return A(Z,te)}return te}function D(G,j){const te=oe.getInstance(),Z=j,ue=G.length,he=B(G,ue,j);j+=he>=65536?2:1;let re=te.getGraphemeBreakType(he);for(;j=65536?2:1,re=me}return j-Z}e.nextCharLength=D;function R(G,j){const te=oe.getInstance(),Z=j,ue=F(G,j);j-=ue>=65536?2:1;let he=te.getGraphemeBreakType(ue);for(;j>0;){const re=F(G,j),ce=te.getGraphemeBreakType(re);if(ie(ce,he))break;j-=re>=65536?2:1,he=ce}return Z-j}e.prevCharLength=R;function W(G){const j=G.byteLength,te=[];let Z=0;for(;Z=240&&Z+3>>0|(G[Z++]&63)<<12>>>0|(G[Z++]&63)<<6>>>0|(G[Z++]&63)<<0>>>0:ue>=224&&Z+2>>0|(G[Z++]&63)<<6>>>0|(G[Z++]&63)<<0>>>0:ue>=192&&Z+1>>0|(G[Z++]&63)<<0>>>0:he=G[Z++],he>=0&&he<=55295||he>=57344&&he<=65535)te.push(String.fromCharCode(he));else if(he>=65536&&he<=1114111){const re=he-65536,ce=55296+((re&1047552)>>>10),me=56320+((re&1023)>>>0);te.push(String.fromCharCode(ce)),te.push(String.fromCharCode(me))}else te.push(String.fromCharCode(65533))}return te.join("")}e.decodeUTF8=W;const x=/(?:[\u05BE\u05C0\u05C3\u05C6\u05D0-\u05F4\u0608\u060B\u060D\u061B-\u064A\u066D-\u066F\u0671-\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u0710\u0712-\u072F\u074D-\u07A5\u07B1-\u07EA\u07F4\u07F5\u07FA-\u0815\u081A\u0824\u0828\u0830-\u0858\u085E-\u08BD\u200F\uFB1D\uFB1F-\uFB28\uFB2A-\uFD3D\uFD50-\uFDFC\uFE70-\uFEFC]|\uD802[\uDC00-\uDD1B\uDD20-\uDE00\uDE10-\uDE33\uDE40-\uDEE4\uDEEB-\uDF35\uDF40-\uDFFF]|\uD803[\uDC00-\uDCFF]|\uD83A[\uDC00-\uDCCF\uDD00-\uDD43\uDD50-\uDFFF]|\uD83B[\uDC00-\uDEBB])/;function K(G){return x.test(G)}e.containsRTL=K;const Y=/(?:[\u231A\u231B\u23F0\u23F3\u2600-\u27BF\u2B50\u2B55]|\uD83C[\uDDE6-\uDDFF\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F\uDE80-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD00-\uDDFF\uDE70-\uDED6])/;function ee(G){return Y.test(G)}e.containsEmoji=ee;const se=/^[\t\n\r\x20-\x7E]*$/;function ne(G){return se.test(G)}e.isBasicASCII=ne,e.UNUSUAL_LINE_TERMINATORS=/[\u2028\u2029]/;function le(G){return e.UNUSUAL_LINE_TERMINATORS.test(G)}e.containsUnusualLineTerminators=le;function X(G){for(let j=0,te=G.length;j=11904&&G<=55215||G>=63744&&G<=64255||G>=65281&&G<=65374}e.isFullWidthCharacter=z;function P(G){return G>=127462&&G<=127487||G===8986||G===8987||G===9200||G===9203||G>=9728&&G<=10175||G===11088||G===11093||G>=127744&&G<=128591||G>=128640&&G<=128764||G>=128992&&G<=129003||G>=129280&&G<=129535||G>=129648&&G<=129750}e.isEmojiImprecise=P,e.UTF8_BOM_CHARACTER=String.fromCharCode(65279);function V(G){return!!(G&&G.length>0&&G.charCodeAt(0)===65279)}e.startsWithUTF8BOM=V;function U(G,j=!1){return G?(j&&(G=G.replace(/\\./g,"")),G.toLowerCase()!==G):!1}e.containsUppercaseCharacter=U;function H(G){const j=90-65+1;return G=G%(2*j),Gte[3*ue+1])ue=2*ue+1;else return te[3*ue+2];return 0}}oe._INSTANCE=null;function ae(){return JSON.parse("[0,0,0,51592,51592,11,44424,44424,11,72251,72254,5,7150,7150,7,48008,48008,11,55176,55176,11,128420,128420,14,3276,3277,5,9979,9980,14,46216,46216,11,49800,49800,11,53384,53384,11,70726,70726,5,122915,122916,5,129320,129327,14,2558,2558,5,5906,5908,5,9762,9763,14,43360,43388,8,45320,45320,11,47112,47112,11,48904,48904,11,50696,50696,11,52488,52488,11,54280,54280,11,70082,70083,1,71350,71350,7,73111,73111,5,127892,127893,14,128726,128727,14,129473,129474,14,2027,2035,5,2901,2902,5,3784,3789,5,6754,6754,5,8418,8420,5,9877,9877,14,11088,11088,14,44008,44008,5,44872,44872,11,45768,45768,11,46664,46664,11,47560,47560,11,48456,48456,11,49352,49352,11,50248,50248,11,51144,51144,11,52040,52040,11,52936,52936,11,53832,53832,11,54728,54728,11,69811,69814,5,70459,70460,5,71096,71099,7,71998,71998,5,72874,72880,5,119149,119149,7,127374,127374,14,128335,128335,14,128482,128482,14,128765,128767,14,129399,129400,14,129680,129685,14,1476,1477,5,2377,2380,7,2759,2760,5,3137,3140,7,3458,3459,7,4153,4154,5,6432,6434,5,6978,6978,5,7675,7679,5,9723,9726,14,9823,9823,14,9919,9923,14,10035,10036,14,42736,42737,5,43596,43596,5,44200,44200,11,44648,44648,11,45096,45096,11,45544,45544,11,45992,45992,11,46440,46440,11,46888,46888,11,47336,47336,11,47784,47784,11,48232,48232,11,48680,48680,11,49128,49128,11,49576,49576,11,50024,50024,11,50472,50472,11,50920,50920,11,51368,51368,11,51816,51816,11,52264,52264,11,52712,52712,11,53160,53160,11,53608,53608,11,54056,54056,11,54504,54504,11,54952,54952,11,68108,68111,5,69933,69940,5,70197,70197,7,70498,70499,7,70845,70845,5,71229,71229,5,71727,71735,5,72154,72155,5,72344,72345,5,73023,73029,5,94095,94098,5,121403,121452,5,126981,127182,14,127538,127546,14,127990,127990,14,128391,128391,14,128445,128449,14,128500,128505,14,128752,128752,14,129160,129167,14,129356,129356,14,129432,129442,14,129648,129651,14,129751,131069,14,173,173,4,1757,1757,1,2274,2274,1,2494,2494,5,2641,2641,5,2876,2876,5,3014,3016,7,3262,3262,7,3393,3396,5,3570,3571,7,3968,3972,5,4228,4228,7,6086,6086,5,6679,6680,5,6912,6915,5,7080,7081,5,7380,7392,5,8252,8252,14,9096,9096,14,9748,9749,14,9784,9786,14,9833,9850,14,9890,9894,14,9938,9938,14,9999,9999,14,10085,10087,14,12349,12349,14,43136,43137,7,43454,43456,7,43755,43755,7,44088,44088,11,44312,44312,11,44536,44536,11,44760,44760,11,44984,44984,11,45208,45208,11,45432,45432,11,45656,45656,11,45880,45880,11,46104,46104,11,46328,46328,11,46552,46552,11,46776,46776,11,47000,47000,11,47224,47224,11,47448,47448,11,47672,47672,11,47896,47896,11,48120,48120,11,48344,48344,11,48568,48568,11,48792,48792,11,49016,49016,11,49240,49240,11,49464,49464,11,49688,49688,11,49912,49912,11,50136,50136,11,50360,50360,11,50584,50584,11,50808,50808,11,51032,51032,11,51256,51256,11,51480,51480,11,51704,51704,11,51928,51928,11,52152,52152,11,52376,52376,11,52600,52600,11,52824,52824,11,53048,53048,11,53272,53272,11,53496,53496,11,53720,53720,11,53944,53944,11,54168,54168,11,54392,54392,11,54616,54616,11,54840,54840,11,55064,55064,11,65438,65439,5,69633,69633,5,69837,69837,1,70018,70018,7,70188,70190,7,70368,70370,7,70465,70468,7,70712,70719,5,70835,70840,5,70850,70851,5,71132,71133,5,71340,71340,7,71458,71461,5,71985,71989,7,72002,72002,7,72193,72202,5,72281,72283,5,72766,72766,7,72885,72886,5,73104,73105,5,92912,92916,5,113824,113827,4,119173,119179,5,121505,121519,5,125136,125142,5,127279,127279,14,127489,127490,14,127570,127743,14,127900,127901,14,128254,128254,14,128369,128370,14,128400,128400,14,128425,128432,14,128468,128475,14,128489,128494,14,128715,128720,14,128745,128745,14,128759,128760,14,129004,129023,14,129296,129304,14,129340,129342,14,129388,129392,14,129404,129407,14,129454,129455,14,129485,129487,14,129659,129663,14,129719,129727,14,917536,917631,5,13,13,2,1160,1161,5,1564,1564,4,1807,1807,1,2085,2087,5,2363,2363,7,2402,2403,5,2507,2508,7,2622,2624,7,2691,2691,7,2786,2787,5,2881,2884,5,3006,3006,5,3072,3072,5,3170,3171,5,3267,3268,7,3330,3331,7,3406,3406,1,3538,3540,5,3655,3662,5,3897,3897,5,4038,4038,5,4184,4185,5,4352,4447,8,6068,6069,5,6155,6157,5,6448,6449,7,6742,6742,5,6783,6783,5,6966,6970,5,7042,7042,7,7143,7143,7,7212,7219,5,7412,7412,5,8206,8207,4,8294,8303,4,8596,8601,14,9410,9410,14,9742,9742,14,9757,9757,14,9770,9770,14,9794,9794,14,9828,9828,14,9855,9855,14,9882,9882,14,9900,9903,14,9929,9933,14,9963,9967,14,9987,9988,14,10006,10006,14,10062,10062,14,10175,10175,14,11744,11775,5,42607,42607,5,43043,43044,7,43263,43263,5,43444,43445,7,43569,43570,5,43698,43700,5,43766,43766,5,44032,44032,11,44144,44144,11,44256,44256,11,44368,44368,11,44480,44480,11,44592,44592,11,44704,44704,11,44816,44816,11,44928,44928,11,45040,45040,11,45152,45152,11,45264,45264,11,45376,45376,11,45488,45488,11,45600,45600,11,45712,45712,11,45824,45824,11,45936,45936,11,46048,46048,11,46160,46160,11,46272,46272,11,46384,46384,11,46496,46496,11,46608,46608,11,46720,46720,11,46832,46832,11,46944,46944,11,47056,47056,11,47168,47168,11,47280,47280,11,47392,47392,11,47504,47504,11,47616,47616,11,47728,47728,11,47840,47840,11,47952,47952,11,48064,48064,11,48176,48176,11,48288,48288,11,48400,48400,11,48512,48512,11,48624,48624,11,48736,48736,11,48848,48848,11,48960,48960,11,49072,49072,11,49184,49184,11,49296,49296,11,49408,49408,11,49520,49520,11,49632,49632,11,49744,49744,11,49856,49856,11,49968,49968,11,50080,50080,11,50192,50192,11,50304,50304,11,50416,50416,11,50528,50528,11,50640,50640,11,50752,50752,11,50864,50864,11,50976,50976,11,51088,51088,11,51200,51200,11,51312,51312,11,51424,51424,11,51536,51536,11,51648,51648,11,51760,51760,11,51872,51872,11,51984,51984,11,52096,52096,11,52208,52208,11,52320,52320,11,52432,52432,11,52544,52544,11,52656,52656,11,52768,52768,11,52880,52880,11,52992,52992,11,53104,53104,11,53216,53216,11,53328,53328,11,53440,53440,11,53552,53552,11,53664,53664,11,53776,53776,11,53888,53888,11,54000,54000,11,54112,54112,11,54224,54224,11,54336,54336,11,54448,54448,11,54560,54560,11,54672,54672,11,54784,54784,11,54896,54896,11,55008,55008,11,55120,55120,11,64286,64286,5,66272,66272,5,68900,68903,5,69762,69762,7,69817,69818,5,69927,69931,5,70003,70003,5,70070,70078,5,70094,70094,7,70194,70195,7,70206,70206,5,70400,70401,5,70463,70463,7,70475,70477,7,70512,70516,5,70722,70724,5,70832,70832,5,70842,70842,5,70847,70848,5,71088,71089,7,71102,71102,7,71219,71226,5,71231,71232,5,71342,71343,7,71453,71455,5,71463,71467,5,71737,71738,5,71995,71996,5,72000,72000,7,72145,72147,7,72160,72160,5,72249,72249,7,72273,72278,5,72330,72342,5,72752,72758,5,72850,72871,5,72882,72883,5,73018,73018,5,73031,73031,5,73109,73109,5,73461,73462,7,94031,94031,5,94192,94193,7,119142,119142,7,119155,119162,4,119362,119364,5,121476,121476,5,122888,122904,5,123184,123190,5,126976,126979,14,127184,127231,14,127344,127345,14,127405,127461,14,127514,127514,14,127561,127567,14,127778,127779,14,127896,127896,14,127985,127986,14,127995,127999,5,128326,128328,14,128360,128366,14,128378,128378,14,128394,128397,14,128405,128406,14,128422,128423,14,128435,128443,14,128453,128464,14,128479,128480,14,128484,128487,14,128496,128498,14,128640,128709,14,128723,128724,14,128736,128741,14,128747,128748,14,128755,128755,14,128762,128762,14,128981,128991,14,129096,129103,14,129292,129292,14,129311,129311,14,129329,129330,14,129344,129349,14,129360,129374,14,129394,129394,14,129402,129402,14,129413,129425,14,129445,129450,14,129466,129471,14,129483,129483,14,129511,129535,14,129653,129655,14,129667,129670,14,129705,129711,14,129731,129743,14,917505,917505,4,917760,917999,5,10,10,3,127,159,4,768,879,5,1471,1471,5,1536,1541,1,1648,1648,5,1767,1768,5,1840,1866,5,2070,2073,5,2137,2139,5,2307,2307,7,2366,2368,7,2382,2383,7,2434,2435,7,2497,2500,5,2519,2519,5,2563,2563,7,2631,2632,5,2677,2677,5,2750,2752,7,2763,2764,7,2817,2817,5,2879,2879,5,2891,2892,7,2914,2915,5,3008,3008,5,3021,3021,5,3076,3076,5,3146,3149,5,3202,3203,7,3264,3265,7,3271,3272,7,3298,3299,5,3390,3390,5,3402,3404,7,3426,3427,5,3535,3535,5,3544,3550,7,3635,3635,7,3763,3763,7,3893,3893,5,3953,3966,5,3981,3991,5,4145,4145,7,4157,4158,5,4209,4212,5,4237,4237,5,4520,4607,10,5970,5971,5,6071,6077,5,6089,6099,5,6277,6278,5,6439,6440,5,6451,6456,7,6683,6683,5,6744,6750,5,6765,6770,7,6846,6846,5,6964,6964,5,6972,6972,5,7019,7027,5,7074,7077,5,7083,7085,5,7146,7148,7,7154,7155,7,7222,7223,5,7394,7400,5,7416,7417,5,8204,8204,5,8233,8233,4,8288,8292,4,8413,8416,5,8482,8482,14,8986,8987,14,9193,9203,14,9654,9654,14,9733,9733,14,9745,9745,14,9752,9752,14,9760,9760,14,9766,9766,14,9774,9775,14,9792,9792,14,9800,9811,14,9825,9826,14,9831,9831,14,9852,9853,14,9872,9873,14,9880,9880,14,9885,9887,14,9896,9897,14,9906,9916,14,9926,9927,14,9936,9936,14,9941,9960,14,9974,9974,14,9982,9985,14,9992,9997,14,10002,10002,14,10017,10017,14,10055,10055,14,10071,10071,14,10145,10145,14,11013,11015,14,11503,11505,5,12334,12335,5,12951,12951,14,42612,42621,5,43014,43014,5,43047,43047,7,43204,43205,5,43335,43345,5,43395,43395,7,43450,43451,7,43561,43566,5,43573,43574,5,43644,43644,5,43710,43711,5,43758,43759,7,44005,44005,5,44012,44012,7,44060,44060,11,44116,44116,11,44172,44172,11,44228,44228,11,44284,44284,11,44340,44340,11,44396,44396,11,44452,44452,11,44508,44508,11,44564,44564,11,44620,44620,11,44676,44676,11,44732,44732,11,44788,44788,11,44844,44844,11,44900,44900,11,44956,44956,11,45012,45012,11,45068,45068,11,45124,45124,11,45180,45180,11,45236,45236,11,45292,45292,11,45348,45348,11,45404,45404,11,45460,45460,11,45516,45516,11,45572,45572,11,45628,45628,11,45684,45684,11,45740,45740,11,45796,45796,11,45852,45852,11,45908,45908,11,45964,45964,11,46020,46020,11,46076,46076,11,46132,46132,11,46188,46188,11,46244,46244,11,46300,46300,11,46356,46356,11,46412,46412,11,46468,46468,11,46524,46524,11,46580,46580,11,46636,46636,11,46692,46692,11,46748,46748,11,46804,46804,11,46860,46860,11,46916,46916,11,46972,46972,11,47028,47028,11,47084,47084,11,47140,47140,11,47196,47196,11,47252,47252,11,47308,47308,11,47364,47364,11,47420,47420,11,47476,47476,11,47532,47532,11,47588,47588,11,47644,47644,11,47700,47700,11,47756,47756,11,47812,47812,11,47868,47868,11,47924,47924,11,47980,47980,11,48036,48036,11,48092,48092,11,48148,48148,11,48204,48204,11,48260,48260,11,48316,48316,11,48372,48372,11,48428,48428,11,48484,48484,11,48540,48540,11,48596,48596,11,48652,48652,11,48708,48708,11,48764,48764,11,48820,48820,11,48876,48876,11,48932,48932,11,48988,48988,11,49044,49044,11,49100,49100,11,49156,49156,11,49212,49212,11,49268,49268,11,49324,49324,11,49380,49380,11,49436,49436,11,49492,49492,11,49548,49548,11,49604,49604,11,49660,49660,11,49716,49716,11,49772,49772,11,49828,49828,11,49884,49884,11,49940,49940,11,49996,49996,11,50052,50052,11,50108,50108,11,50164,50164,11,50220,50220,11,50276,50276,11,50332,50332,11,50388,50388,11,50444,50444,11,50500,50500,11,50556,50556,11,50612,50612,11,50668,50668,11,50724,50724,11,50780,50780,11,50836,50836,11,50892,50892,11,50948,50948,11,51004,51004,11,51060,51060,11,51116,51116,11,51172,51172,11,51228,51228,11,51284,51284,11,51340,51340,11,51396,51396,11,51452,51452,11,51508,51508,11,51564,51564,11,51620,51620,11,51676,51676,11,51732,51732,11,51788,51788,11,51844,51844,11,51900,51900,11,51956,51956,11,52012,52012,11,52068,52068,11,52124,52124,11,52180,52180,11,52236,52236,11,52292,52292,11,52348,52348,11,52404,52404,11,52460,52460,11,52516,52516,11,52572,52572,11,52628,52628,11,52684,52684,11,52740,52740,11,52796,52796,11,52852,52852,11,52908,52908,11,52964,52964,11,53020,53020,11,53076,53076,11,53132,53132,11,53188,53188,11,53244,53244,11,53300,53300,11,53356,53356,11,53412,53412,11,53468,53468,11,53524,53524,11,53580,53580,11,53636,53636,11,53692,53692,11,53748,53748,11,53804,53804,11,53860,53860,11,53916,53916,11,53972,53972,11,54028,54028,11,54084,54084,11,54140,54140,11,54196,54196,11,54252,54252,11,54308,54308,11,54364,54364,11,54420,54420,11,54476,54476,11,54532,54532,11,54588,54588,11,54644,54644,11,54700,54700,11,54756,54756,11,54812,54812,11,54868,54868,11,54924,54924,11,54980,54980,11,55036,55036,11,55092,55092,11,55148,55148,11,55216,55238,9,65056,65071,5,65529,65531,4,68097,68099,5,68159,68159,5,69446,69456,5,69688,69702,5,69808,69810,7,69815,69816,7,69821,69821,1,69888,69890,5,69932,69932,7,69957,69958,7,70016,70017,5,70067,70069,7,70079,70080,7,70089,70092,5,70095,70095,5,70191,70193,5,70196,70196,5,70198,70199,5,70367,70367,5,70371,70378,5,70402,70403,7,70462,70462,5,70464,70464,5,70471,70472,7,70487,70487,5,70502,70508,5,70709,70711,7,70720,70721,7,70725,70725,7,70750,70750,5,70833,70834,7,70841,70841,7,70843,70844,7,70846,70846,7,70849,70849,7,71087,71087,5,71090,71093,5,71100,71101,5,71103,71104,5,71216,71218,7,71227,71228,7,71230,71230,7,71339,71339,5,71341,71341,5,71344,71349,5,71351,71351,5,71456,71457,7,71462,71462,7,71724,71726,7,71736,71736,7,71984,71984,5,71991,71992,7,71997,71997,7,71999,71999,1,72001,72001,1,72003,72003,5,72148,72151,5,72156,72159,7,72164,72164,7,72243,72248,5,72250,72250,1,72263,72263,5,72279,72280,7,72324,72329,1,72343,72343,7,72751,72751,7,72760,72765,5,72767,72767,5,72873,72873,7,72881,72881,7,72884,72884,7,73009,73014,5,73020,73021,5,73030,73030,1,73098,73102,7,73107,73108,7,73110,73110,7,73459,73460,5,78896,78904,4,92976,92982,5,94033,94087,7,94180,94180,5,113821,113822,5,119141,119141,5,119143,119145,5,119150,119154,5,119163,119170,5,119210,119213,5,121344,121398,5,121461,121461,5,121499,121503,5,122880,122886,5,122907,122913,5,122918,122922,5,123628,123631,5,125252,125258,5,126980,126980,14,127183,127183,14,127245,127247,14,127340,127343,14,127358,127359,14,127377,127386,14,127462,127487,6,127491,127503,14,127535,127535,14,127548,127551,14,127568,127569,14,127744,127777,14,127780,127891,14,127894,127895,14,127897,127899,14,127902,127984,14,127987,127989,14,127991,127994,14,128000,128253,14,128255,128317,14,128329,128334,14,128336,128359,14,128367,128368,14,128371,128377,14,128379,128390,14,128392,128393,14,128398,128399,14,128401,128404,14,128407,128419,14,128421,128421,14,128424,128424,14,128433,128434,14,128444,128444,14,128450,128452,14,128465,128467,14,128476,128478,14,128481,128481,14,128483,128483,14,128488,128488,14,128495,128495,14,128499,128499,14,128506,128591,14,128710,128714,14,128721,128722,14,128725,128725,14,128728,128735,14,128742,128744,14,128746,128746,14,128749,128751,14,128753,128754,14,128756,128758,14,128761,128761,14,128763,128764,14,128884,128895,14,128992,129003,14,129036,129039,14,129114,129119,14,129198,129279,14,129293,129295,14,129305,129310,14,129312,129319,14,129328,129328,14,129331,129338,14,129343,129343,14,129351,129355,14,129357,129359,14,129375,129387,14,129393,129393,14,129395,129398,14,129401,129401,14,129403,129403,14,129408,129412,14,129426,129431,14,129443,129444,14,129451,129453,14,129456,129465,14,129472,129472,14,129475,129482,14,129484,129484,14,129488,129510,14,129536,129647,14,129652,129652,14,129656,129658,14,129664,129666,14,129671,129679,14,129686,129704,14,129712,129718,14,129728,129730,14,129744,129750,14,917504,917504,4,917506,917535,4,917632,917759,4,918000,921599,4,0,9,4,11,12,4,14,31,4,169,169,14,174,174,14,1155,1159,5,1425,1469,5,1473,1474,5,1479,1479,5,1552,1562,5,1611,1631,5,1750,1756,5,1759,1764,5,1770,1773,5,1809,1809,5,1958,1968,5,2045,2045,5,2075,2083,5,2089,2093,5,2259,2273,5,2275,2306,5,2362,2362,5,2364,2364,5,2369,2376,5,2381,2381,5,2385,2391,5,2433,2433,5,2492,2492,5,2495,2496,7,2503,2504,7,2509,2509,5,2530,2531,5,2561,2562,5,2620,2620,5,2625,2626,5,2635,2637,5,2672,2673,5,2689,2690,5,2748,2748,5,2753,2757,5,2761,2761,7,2765,2765,5,2810,2815,5,2818,2819,7,2878,2878,5,2880,2880,7,2887,2888,7,2893,2893,5,2903,2903,5,2946,2946,5,3007,3007,7,3009,3010,7,3018,3020,7,3031,3031,5,3073,3075,7,3134,3136,5,3142,3144,5,3157,3158,5,3201,3201,5,3260,3260,5,3263,3263,5,3266,3266,5,3270,3270,5,3274,3275,7,3285,3286,5,3328,3329,5,3387,3388,5,3391,3392,7,3398,3400,7,3405,3405,5,3415,3415,5,3457,3457,5,3530,3530,5,3536,3537,7,3542,3542,5,3551,3551,5,3633,3633,5,3636,3642,5,3761,3761,5,3764,3772,5,3864,3865,5,3895,3895,5,3902,3903,7,3967,3967,7,3974,3975,5,3993,4028,5,4141,4144,5,4146,4151,5,4155,4156,7,4182,4183,7,4190,4192,5,4226,4226,5,4229,4230,5,4253,4253,5,4448,4519,9,4957,4959,5,5938,5940,5,6002,6003,5,6070,6070,7,6078,6085,7,6087,6088,7,6109,6109,5,6158,6158,4,6313,6313,5,6435,6438,7,6441,6443,7,6450,6450,5,6457,6459,5,6681,6682,7,6741,6741,7,6743,6743,7,6752,6752,5,6757,6764,5,6771,6780,5,6832,6845,5,6847,6848,5,6916,6916,7,6965,6965,5,6971,6971,7,6973,6977,7,6979,6980,7,7040,7041,5,7073,7073,7,7078,7079,7,7082,7082,7,7142,7142,5,7144,7145,5,7149,7149,5,7151,7153,5,7204,7211,7,7220,7221,7,7376,7378,5,7393,7393,7,7405,7405,5,7415,7415,7,7616,7673,5,8203,8203,4,8205,8205,13,8232,8232,4,8234,8238,4,8265,8265,14,8293,8293,4,8400,8412,5,8417,8417,5,8421,8432,5,8505,8505,14,8617,8618,14,9000,9000,14,9167,9167,14,9208,9210,14,9642,9643,14,9664,9664,14,9728,9732,14,9735,9741,14,9743,9744,14,9746,9746,14,9750,9751,14,9753,9756,14,9758,9759,14,9761,9761,14,9764,9765,14,9767,9769,14,9771,9773,14,9776,9783,14,9787,9791,14,9793,9793,14,9795,9799,14,9812,9822,14,9824,9824,14,9827,9827,14,9829,9830,14,9832,9832,14,9851,9851,14,9854,9854,14,9856,9861,14,9874,9876,14,9878,9879,14,9881,9881,14,9883,9884,14,9888,9889,14,9895,9895,14,9898,9899,14,9904,9905,14,9917,9918,14,9924,9925,14,9928,9928,14,9934,9935,14,9937,9937,14,9939,9940,14,9961,9962,14,9968,9973,14,9975,9978,14,9981,9981,14,9986,9986,14,9989,9989,14,9998,9998,14,10000,10001,14,10004,10004,14,10013,10013,14,10024,10024,14,10052,10052,14,10060,10060,14,10067,10069,14,10083,10084,14,10133,10135,14,10160,10160,14,10548,10549,14,11035,11036,14,11093,11093,14,11647,11647,5,12330,12333,5,12336,12336,14,12441,12442,5,12953,12953,14,42608,42610,5,42654,42655,5,43010,43010,5,43019,43019,5,43045,43046,5,43052,43052,5,43188,43203,7,43232,43249,5,43302,43309,5,43346,43347,7,43392,43394,5,43443,43443,5,43446,43449,5,43452,43453,5,43493,43493,5,43567,43568,7,43571,43572,7,43587,43587,5,43597,43597,7,43696,43696,5,43703,43704,5,43713,43713,5,43756,43757,5,43765,43765,7,44003,44004,7,44006,44007,7,44009,44010,7,44013,44013,5,44033,44059,12,44061,44087,12,44089,44115,12,44117,44143,12,44145,44171,12,44173,44199,12,44201,44227,12,44229,44255,12,44257,44283,12,44285,44311,12,44313,44339,12,44341,44367,12,44369,44395,12,44397,44423,12,44425,44451,12,44453,44479,12,44481,44507,12,44509,44535,12,44537,44563,12,44565,44591,12,44593,44619,12,44621,44647,12,44649,44675,12,44677,44703,12,44705,44731,12,44733,44759,12,44761,44787,12,44789,44815,12,44817,44843,12,44845,44871,12,44873,44899,12,44901,44927,12,44929,44955,12,44957,44983,12,44985,45011,12,45013,45039,12,45041,45067,12,45069,45095,12,45097,45123,12,45125,45151,12,45153,45179,12,45181,45207,12,45209,45235,12,45237,45263,12,45265,45291,12,45293,45319,12,45321,45347,12,45349,45375,12,45377,45403,12,45405,45431,12,45433,45459,12,45461,45487,12,45489,45515,12,45517,45543,12,45545,45571,12,45573,45599,12,45601,45627,12,45629,45655,12,45657,45683,12,45685,45711,12,45713,45739,12,45741,45767,12,45769,45795,12,45797,45823,12,45825,45851,12,45853,45879,12,45881,45907,12,45909,45935,12,45937,45963,12,45965,45991,12,45993,46019,12,46021,46047,12,46049,46075,12,46077,46103,12,46105,46131,12,46133,46159,12,46161,46187,12,46189,46215,12,46217,46243,12,46245,46271,12,46273,46299,12,46301,46327,12,46329,46355,12,46357,46383,12,46385,46411,12,46413,46439,12,46441,46467,12,46469,46495,12,46497,46523,12,46525,46551,12,46553,46579,12,46581,46607,12,46609,46635,12,46637,46663,12,46665,46691,12,46693,46719,12,46721,46747,12,46749,46775,12,46777,46803,12,46805,46831,12,46833,46859,12,46861,46887,12,46889,46915,12,46917,46943,12,46945,46971,12,46973,46999,12,47001,47027,12,47029,47055,12,47057,47083,12,47085,47111,12,47113,47139,12,47141,47167,12,47169,47195,12,47197,47223,12,47225,47251,12,47253,47279,12,47281,47307,12,47309,47335,12,47337,47363,12,47365,47391,12,47393,47419,12,47421,47447,12,47449,47475,12,47477,47503,12,47505,47531,12,47533,47559,12,47561,47587,12,47589,47615,12,47617,47643,12,47645,47671,12,47673,47699,12,47701,47727,12,47729,47755,12,47757,47783,12,47785,47811,12,47813,47839,12,47841,47867,12,47869,47895,12,47897,47923,12,47925,47951,12,47953,47979,12,47981,48007,12,48009,48035,12,48037,48063,12,48065,48091,12,48093,48119,12,48121,48147,12,48149,48175,12,48177,48203,12,48205,48231,12,48233,48259,12,48261,48287,12,48289,48315,12,48317,48343,12,48345,48371,12,48373,48399,12,48401,48427,12,48429,48455,12,48457,48483,12,48485,48511,12,48513,48539,12,48541,48567,12,48569,48595,12,48597,48623,12,48625,48651,12,48653,48679,12,48681,48707,12,48709,48735,12,48737,48763,12,48765,48791,12,48793,48819,12,48821,48847,12,48849,48875,12,48877,48903,12,48905,48931,12,48933,48959,12,48961,48987,12,48989,49015,12,49017,49043,12,49045,49071,12,49073,49099,12,49101,49127,12,49129,49155,12,49157,49183,12,49185,49211,12,49213,49239,12,49241,49267,12,49269,49295,12,49297,49323,12,49325,49351,12,49353,49379,12,49381,49407,12,49409,49435,12,49437,49463,12,49465,49491,12,49493,49519,12,49521,49547,12,49549,49575,12,49577,49603,12,49605,49631,12,49633,49659,12,49661,49687,12,49689,49715,12,49717,49743,12,49745,49771,12,49773,49799,12,49801,49827,12,49829,49855,12,49857,49883,12,49885,49911,12,49913,49939,12,49941,49967,12,49969,49995,12,49997,50023,12,50025,50051,12,50053,50079,12,50081,50107,12,50109,50135,12,50137,50163,12,50165,50191,12,50193,50219,12,50221,50247,12,50249,50275,12,50277,50303,12,50305,50331,12,50333,50359,12,50361,50387,12,50389,50415,12,50417,50443,12,50445,50471,12,50473,50499,12,50501,50527,12,50529,50555,12,50557,50583,12,50585,50611,12,50613,50639,12,50641,50667,12,50669,50695,12,50697,50723,12,50725,50751,12,50753,50779,12,50781,50807,12,50809,50835,12,50837,50863,12,50865,50891,12,50893,50919,12,50921,50947,12,50949,50975,12,50977,51003,12,51005,51031,12,51033,51059,12,51061,51087,12,51089,51115,12,51117,51143,12,51145,51171,12,51173,51199,12,51201,51227,12,51229,51255,12,51257,51283,12,51285,51311,12,51313,51339,12,51341,51367,12,51369,51395,12,51397,51423,12,51425,51451,12,51453,51479,12,51481,51507,12,51509,51535,12,51537,51563,12,51565,51591,12,51593,51619,12,51621,51647,12,51649,51675,12,51677,51703,12,51705,51731,12,51733,51759,12,51761,51787,12,51789,51815,12,51817,51843,12,51845,51871,12,51873,51899,12,51901,51927,12,51929,51955,12,51957,51983,12,51985,52011,12,52013,52039,12,52041,52067,12,52069,52095,12,52097,52123,12,52125,52151,12,52153,52179,12,52181,52207,12,52209,52235,12,52237,52263,12,52265,52291,12,52293,52319,12,52321,52347,12,52349,52375,12,52377,52403,12,52405,52431,12,52433,52459,12,52461,52487,12,52489,52515,12,52517,52543,12,52545,52571,12,52573,52599,12,52601,52627,12,52629,52655,12,52657,52683,12,52685,52711,12,52713,52739,12,52741,52767,12,52769,52795,12,52797,52823,12,52825,52851,12,52853,52879,12,52881,52907,12,52909,52935,12,52937,52963,12,52965,52991,12,52993,53019,12,53021,53047,12,53049,53075,12,53077,53103,12,53105,53131,12,53133,53159,12,53161,53187,12,53189,53215,12,53217,53243,12,53245,53271,12,53273,53299,12,53301,53327,12,53329,53355,12,53357,53383,12,53385,53411,12,53413,53439,12,53441,53467,12,53469,53495,12,53497,53523,12,53525,53551,12,53553,53579,12,53581,53607,12,53609,53635,12,53637,53663,12,53665,53691,12,53693,53719,12,53721,53747,12,53749,53775,12,53777,53803,12,53805,53831,12,53833,53859,12,53861,53887,12,53889,53915,12,53917,53943,12,53945,53971,12,53973,53999,12,54001,54027,12,54029,54055,12,54057,54083,12,54085,54111,12,54113,54139,12,54141,54167,12,54169,54195,12,54197,54223,12,54225,54251,12,54253,54279,12,54281,54307,12,54309,54335,12,54337,54363,12,54365,54391,12,54393,54419,12,54421,54447,12,54449,54475,12,54477,54503,12,54505,54531,12,54533,54559,12,54561,54587,12,54589,54615,12,54617,54643,12,54645,54671,12,54673,54699,12,54701,54727,12,54729,54755,12,54757,54783,12,54785,54811,12,54813,54839,12,54841,54867,12,54869,54895,12,54897,54923,12,54925,54951,12,54953,54979,12,54981,55007,12,55009,55035,12,55037,55063,12,55065,55091,12,55093,55119,12,55121,55147,12,55149,55175,12,55177,55203,12,55243,55291,10,65024,65039,5,65279,65279,4,65520,65528,4,66045,66045,5,66422,66426,5,68101,68102,5,68152,68154,5,68325,68326,5,69291,69292,5,69632,69632,7,69634,69634,7,69759,69761,5]")}}),define(Q[101],J([0,1,8]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.writeUInt8=e.readUInt8=e.writeUInt32BE=e.readUInt32BE=e.writeUInt16LE=e.readUInt16LE=e.VSBuffer=void 0;const N=typeof Buffer!="undefined",M=typeof TextDecoder!="undefined";let w;class S{constructor(a){this.buffer=a,this.byteLength=this.buffer.byteLength}static wrap(a){return N&&!Buffer.isBuffer(a)&&(a=Buffer.from(a.buffer,a.byteOffset,a.byteLength)),new S(a)}toString(){return N?this.buffer.toString():M?(w||(w=new TextDecoder),w.decode(this.buffer)):b.decodeUTF8(this.buffer)}}e.VSBuffer=S;function C(s,a){return s[a+0]<<0>>>0|s[a+1]<<8>>>0}e.readUInt16LE=C;function d(s,a,u){s[u+0]=a&255,a=a>>>8,s[u+1]=a&255}e.writeUInt16LE=d;function g(s,a){return s[a]*Math.pow(2,24)+s[a+1]*Math.pow(2,16)+s[a+2]*Math.pow(2,8)+s[a+3]}e.readUInt32BE=g;function p(s,a,u){s[u+3]=a,a=a>>>8,s[u+2]=a,a=a>>>8,s[u+1]=a,a=a>>>8,s[u]=a}e.writeUInt32BE=p;function c(s,a){return s[a]}e.readUInt8=c;function o(s,a,u){s[u]=a}e.writeUInt8=o}),define(Q[152],J([0,1,17,8,72]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hasDriveLetter=e.isRootOrDriveLetter=e.isWindowsDriveLetter=e.isEqualOrParent=e.toSlashes=void 0;function w(p){return p.replace(/[\\/]/g,M.posix.sep)}e.toSlashes=w;function S(p,c,o,s=M.sep){if(p===c)return!0;if(!p||!c||c.length>p.length)return!1;if(o){if(!N.startsWithIgnoreCase(p,c))return!1;if(c.length===p.length)return!0;let u=c.length;return c.charAt(c.length-1)===s&&u--,p.charAt(u)===s}return c.charAt(c.length-1)!==s&&(c+=s),p.indexOf(c)===0}e.isEqualOrParent=S;function C(p){return p>=65&&p<=90||p>=97&&p<=122}e.isWindowsDriveLetter=C;function d(p){const c=M.normalize(p);return b.isWindows?p.length>3?!1:g(c)&&(p.length===2||c.charCodeAt(2)===92):c===M.posix.sep}e.isRootOrDriveLetter=d;function g(p){return b.isWindows?C(p.charCodeAt(0))&&p.charCodeAt(1)===58:!1}e.hasDriveLetter=g}),define(Q[89],J([0,1,8]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.StringSHA1=e.toHexString=e.stringHash=e.doHash=e.hash=void 0;function N(u){return M(u,0)}e.hash=N;function M(u,r){switch(typeof u){case"object":return u===null?w(349,r):Array.isArray(u)?d(u,r):g(u,r);case"string":return C(u,r);case"boolean":return S(u,r);case"number":return w(u,r);case"undefined":return w(937,r);default:return w(617,r)}}e.doHash=M;function w(u,r){return(r<<5)-r+u|0}function S(u,r){return w(u?433:863,r)}function C(u,r){r=w(149417,r);for(let i=0,n=u.length;iM(n,i),r)}function g(u,r){return r=w(181387,r),Object.keys(u).sort().reduce((i,n)=>(i=C(n,i),M(u[n],i)),r)}function p(u,r,i=32){const n=i-r,t=~((1<>>n)>>>0}function c(u,r=0,i=u.byteLength,n=0){for(let t=0;ti.toString(16).padStart(2,"0")).join(""):o((u>>>0).toString(16),r/4)}e.toHexString=s;class a{constructor(){this._h0=1732584193,this._h1=4023233417,this._h2=2562383102,this._h3=271733878,this._h4=3285377520,this._buff=new Uint8Array(64+3),this._buffDV=new DataView(this._buff.buffer),this._buffLen=0,this._totalLen=0,this._leftoverHighSurrogate=0,this._finished=!1}update(r){const i=r.length;if(i!==0){const n=this._buff;let t=this._buffLen,l=this._leftoverHighSurrogate,h,m;for(l!==0?(h=l,m=-1,l=0):(h=r.charCodeAt(0),m=0);;){let _=h;if(b.isHighSurrogate(h))if(m+1>>6,r[i++]=128|(n&63)>>>0):n<65536?(r[i++]=224|(n&61440)>>>12,r[i++]=128|(n&4032)>>>6,r[i++]=128|(n&63)>>>0):(r[i++]=240|(n&1835008)>>>18,r[i++]=128|(n&258048)>>>12,r[i++]=128|(n&4032)>>>6,r[i++]=128|(n&63)>>>0),i>=64&&(this._step(),i-=64,this._totalLen+=64,r[0]=r[64+0],r[1]=r[64+1],r[2]=r[64+2]),i}digest(){return this._finished||(this._finished=!0,this._leftoverHighSurrogate&&(this._leftoverHighSurrogate=0,this._buffLen=this._push(this._buff,this._buffLen,65533)),this._totalLen+=this._buffLen,this._wrapUp()),s(this._h0)+s(this._h1)+s(this._h2)+s(this._h3)+s(this._h4)}_wrapUp(){this._buff[this._buffLen++]=128,c(this._buff,this._buffLen),this._buffLen>56&&(this._step(),c(this._buff));const r=8*this._totalLen;this._buffDV.setUint32(56,Math.floor(r/4294967296),!1),this._buffDV.setUint32(60,r%4294967296,!1),this._step()}_step(){const r=a._bigBlock32,i=this._buffDV;for(let y=0;y<64;y+=4)r.setUint32(y,i.getUint32(y,!1),!1);for(let y=64;y<320;y+=4)r.setUint32(y,p(r.getUint32(y-12,!1)^r.getUint32(y-32,!1)^r.getUint32(y-56,!1)^r.getUint32(y-64,!1),1),!1);let n=this._h0,t=this._h1,l=this._h2,h=this._h3,m=this._h4,_,f,v;for(let y=0;y<80;y++)y<20?(_=t&l|~t&h,f=1518500249):y<40?(_=t^l^h,f=1859775393):y<60?(_=t&l|t&h|l&h,f=2400959708):(_=t^l^h,f=3395469782),v=p(n,5)+_+m+f+r.getUint32(y*4,!1)&4294967295,m=h,h=l,l=p(t,30),t=n,n=v;this._h0=this._h0+n&4294967295,this._h1=this._h1+t&4294967295,this._h2=this._h2+l&4294967295,this._h3=this._h3+h&4294967295,this._h4=this._h4+m&4294967295}}e.StringSHA1=a,a._bigBlock32=new DataView(new ArrayBuffer(320))}),define(Q[153],J([0,1,277,89]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.LcsDiff=e.MyArray=e.Debug=e.stringDiff=e.StringDiffSequence=void 0;class M{constructor(c){this.source=c}getElements(){const c=this.source,o=new Int32Array(c.length);for(let s=0,a=c.length;s0||this.m_modifiedCount>0)&&this.m_changes.push(new b.DiffChange(this.m_originalStart,this.m_originalCount,this.m_modifiedStart,this.m_modifiedCount)),this.m_originalCount=0,this.m_modifiedCount=0,this.m_originalStart=1073741824,this.m_modifiedStart=1073741824}AddOriginalElement(c,o){this.m_originalStart=Math.min(this.m_originalStart,c),this.m_modifiedStart=Math.min(this.m_modifiedStart,o),this.m_originalCount++}AddModifiedElement(c,o){this.m_originalStart=Math.min(this.m_originalStart,c),this.m_modifiedStart=Math.min(this.m_modifiedStart,o),this.m_modifiedCount++}getChanges(){return(this.m_originalCount>0||this.m_modifiedCount>0)&&this.MarkNextChange(),this.m_changes}getReverseChanges(){return(this.m_originalCount>0||this.m_modifiedCount>0)&&this.MarkNextChange(),this.m_changes.reverse(),this.m_changes}}class g{constructor(c,o,s=null){this.ContinueProcessingPredicate=s;const[a,u,r]=g._getElements(c),[i,n,t]=g._getElements(o);this._hasStrings=r&&t,this._originalStringElements=a,this._originalElementsOrHash=u,this._modifiedStringElements=i,this._modifiedElementsOrHash=n,this.m_forwardHistory=[],this.m_reverseHistory=[]}static _isStringArray(c){return c.length>0&&typeof c[0]=="string"}static _getElements(c){const o=c.getElements();if(g._isStringArray(o)){const s=new Int32Array(o.length);for(let a=0,u=o.length;a=c&&a>=s&&this.ElementsAreEqual(o,a);)o--,a--;if(c>o||s>a){let h;return s<=a?(S.Assert(c===o+1,"originalStart should only be one more than originalEnd"),h=[new b.DiffChange(c,0,s,a-s+1)]):c<=o?(S.Assert(s===a+1,"modifiedStart should only be one more than modifiedEnd"),h=[new b.DiffChange(c,o-c+1,s,0)]):(S.Assert(c===o+1,"originalStart should only be one more than originalEnd"),S.Assert(s===a+1,"modifiedStart should only be one more than modifiedEnd"),h=[]),h}const r=[0],i=[0],n=this.ComputeRecursionPoint(c,o,s,a,r,i,u),t=r[0],l=i[0];if(n!==null)return n;if(!u[0]){const h=this.ComputeDiffRecursive(c,t,s,l,u);let m=[];return u[0]?m=[new b.DiffChange(t+1,o-(t+1)+1,l+1,a-(l+1)+1)]:m=this.ComputeDiffRecursive(t+1,o,l+1,a,u),this.ConcatenateChanges(h,m)}return[new b.DiffChange(c,o-c+1,s,a-s+1)]}WALKTRACE(c,o,s,a,u,r,i,n,t,l,h,m,_,f,v,y,L,I){let k=null,E=null,T=new d,O=o,A=s,B=_[0]-y[0]-a,F=-1073741824,D=this.m_forwardHistory.length-1;do{const R=B+c;R===O||R=0&&(t=this.m_forwardHistory[D],c=t[0],O=1,A=t.length-1)}while(--D>=-1);if(k=T.getReverseChanges(),I[0]){let R=_[0]+1,W=y[0]+1;if(k!==null&&k.length>0){const x=k[k.length-1];R=Math.max(R,x.getOriginalEnd()),W=Math.max(W,x.getModifiedEnd())}E=[new b.DiffChange(R,m-R+1,W,v-W+1)]}else{T=new d,O=r,A=i,B=_[0]-y[0]-n,F=1073741824,D=L?this.m_reverseHistory.length-1:this.m_reverseHistory.length-2;do{const R=B+u;R===O||R=l[R+1]?(h=l[R+1]-1,f=h-B-n,h>F&&T.MarkNextChange(),F=h+1,T.AddOriginalElement(h+1,f+1),B=R+1-u):(h=l[R-1],f=h-B-n,h>F&&T.MarkNextChange(),F=h,T.AddModifiedElement(h+1,f+1),B=R-1-u),D>=0&&(l=this.m_reverseHistory[D],u=l[0],O=1,A=l.length-1)}while(--D>=-1);E=T.getChanges()}return this.ConcatenateChanges(k,E)}ComputeRecursionPoint(c,o,s,a,u,r,i){let n=0,t=0,l=0,h=0,m=0,_=0;c--,s--,u[0]=0,r[0]=0,this.m_forwardHistory=[],this.m_reverseHistory=[];const f=o-c+(a-s),v=f+1,y=new Int32Array(v),L=new Int32Array(v),I=a-s,k=o-c,E=c-s,T=o-a,A=(k-I)%2==0;y[I]=c,L[k]=o,i[0]=!1;for(let B=1;B<=f/2+1;B++){let F=0,D=0;l=this.ClipDiagonalBound(I-B,B,I,v),h=this.ClipDiagonalBound(I+B,B,I,v);for(let W=l;W<=h;W+=2){W===l||WF+D&&(F=n,D=t),!A&&Math.abs(W-k)<=B-1&&n>=L[W])return u[0]=n,r[0]=t,x<=L[W]&&1447>0&&B<=1447+1?this.WALKTRACE(I,l,h,E,k,m,_,T,y,L,n,o,u,t,a,r,A,i):null}const R=(F-c+(D-s)-B)/2;if(this.ContinueProcessingPredicate!==null&&!this.ContinueProcessingPredicate(F,R))return i[0]=!0,u[0]=F,r[0]=D,R>0&&1447>0&&B<=1447+1?this.WALKTRACE(I,l,h,E,k,m,_,T,y,L,n,o,u,t,a,r,A,i):(c++,s++,[new b.DiffChange(c,o-c+1,s,a-s+1)]);m=this.ClipDiagonalBound(k-B,B,k,v),_=this.ClipDiagonalBound(k+B,B,k,v);for(let W=m;W<=_;W+=2){W===m||W<_&&L[W-1]>=L[W+1]?n=L[W+1]-1:n=L[W-1],t=n-(W-k)-T;const x=n;for(;n>c&&t>s&&this.ElementsAreEqual(n,t);)n--,t--;if(L[W]=n,A&&Math.abs(W-I)<=B&&n<=y[W])return u[0]=n,r[0]=t,x>=y[W]&&1447>0&&B<=1447+1?this.WALKTRACE(I,l,h,E,k,m,_,T,y,L,n,o,u,t,a,r,A,i):null}if(B<=1447){let W=new Int32Array(h-l+2);W[0]=I-l+1,C.Copy2(y,l,W,1,h-l+1),this.m_forwardHistory.push(W),W=new Int32Array(_-m+2),W[0]=k-m+1,C.Copy2(L,m,W,1,_-m+1),this.m_reverseHistory.push(W)}}return this.WALKTRACE(I,l,h,E,k,m,_,T,y,L,n,o,u,t,a,r,A,i)}PrettifyChanges(c){for(let o=0;o0,i=s.modifiedLength>0;for(;s.originalStart+s.originalLength=0;o--){const s=c[o];let a=0,u=0;if(o>0){const l=c[o-1];l.originalLength>0&&(a=l.originalStart+l.originalLength),l.modifiedLength>0&&(u=l.modifiedStart+l.modifiedLength)}const r=s.originalLength>0,i=s.modifiedLength>0;let n=0,t=this._boundaryScore(s.originalStart,s.originalLength,s.modifiedStart,s.modifiedLength);for(let l=1;;l++){const h=s.originalStart-l,m=s.modifiedStart-l;if(ht&&(t=_,n=l)}s.originalStart-=n,s.modifiedStart-=n}if(this._hasStrings)for(let o=1,s=c.length;o0&&_>n&&(n=_,t=h,l=m)}return n>0?[t,l]:null}_contiguousSequenceScore(c,o,s){let a=0;for(let u=0;u=this._originalElementsOrHash.length-1?!0:this._hasStrings&&/^\s*$/.test(this._originalStringElements[c])}_OriginalRegionIsBoundary(c,o){if(this._OriginalIsBoundary(c)||this._OriginalIsBoundary(c-1))return!0;if(o>0){const s=c+o;if(this._OriginalIsBoundary(s-1)||this._OriginalIsBoundary(s))return!0}return!1}_ModifiedIsBoundary(c){return c<=0||c>=this._modifiedElementsOrHash.length-1?!0:this._hasStrings&&/^\s*$/.test(this._modifiedStringElements[c])}_ModifiedRegionIsBoundary(c,o){if(this._ModifiedIsBoundary(c)||this._ModifiedIsBoundary(c-1))return!0;if(o>0){const s=c+o;if(this._ModifiedIsBoundary(s-1)||this._ModifiedIsBoundary(s))return!0}return!1}_boundaryScore(c,o,s,a){const u=this._OriginalRegionIsBoundary(c,o)?1:0,r=this._ModifiedRegionIsBoundary(s,a)?1:0;return u+r}ConcatenateChanges(c,o){let s=[];if(c.length===0||o.length===0)return o.length>0?o:c;if(this.ChangesOverlap(c[c.length-1],o[0],s)){const a=new Array(c.length+o.length-1);return C.Copy(c,0,a,0,c.length-1),a[c.length-1]=s[0],C.Copy(o,1,a,c.length,o.length-1),a}else{const a=new Array(c.length+o.length);return C.Copy(c,0,a,0,c.length),C.Copy(o,0,a,c.length,o.length),a}}ChangesOverlap(c,o,s){if(S.Assert(c.originalStart<=o.originalStart,"Left change is not less than or equal to right change"),S.Assert(c.modifiedStart<=o.modifiedStart,"Left change is not less than or equal to right change"),c.originalStart+c.originalLength>=o.originalStart||c.modifiedStart+c.modifiedLength>=o.modifiedStart){const a=c.originalStart;let u=c.originalLength;const r=c.modifiedStart;let i=c.modifiedLength;return c.originalStart+c.originalLength>=o.originalStart&&(u=o.originalStart+o.originalLength-c.originalStart),c.modifiedStart+c.modifiedLength>=o.modifiedStart&&(i=o.modifiedStart+o.modifiedLength-c.modifiedStart),s[0]=new b.DiffChange(a,u,r,i),!0}else return s[0]=null,!1}ClipDiagonalBound(c,o,s,a){if(c>=0&&ct.children.map(L=>o.getId(L.element).toString())},{getElements:()=>[...t.children.slice(0,h),...l,...t.children.slice(h+a)].map(L=>o.getId(L.element).toString())}).ComputeDiff(!1);if(m.quitEarly)return this.spliceSimple(s,a,l,r);const _=s.slice(0,-1),f=(L,I,k)=>{if(i>0)for(let E=0;Ek.originalStart-I.originalStart))f(v,y,v-(L.originalStart+L.originalLength)),v=L.originalStart,y=L.modifiedStart-h,this.spliceSimple([..._,v],L.originalLength,S.Iterable.slice(l,y,y+L.modifiedLength),r);f(v,y,v)}spliceSimple(o,s,a=S.Iterable.empty(),{onDidCreateNode:u,onDidDeleteNode:r}){const{parentNode:i,listIndex:n,revealed:t,visible:l}=this.getParentNodeWithListIndex(o),h=[],m=S.Iterable.map(a,A=>this.createTreeNode(A,i,i.visible?1:0,t,h,u)),_=o[o.length-1],f=i.children.length>0;let v=0;for(let A=_;A>=0&&AB+(F.visible?F.renderNodeCount:0),0);this._updateAncestorsRenderNodeCount(i,I-A),this.list.splice(n,A,h)}if(k.length>0&&r){const A=B=>{r(B),B.children.forEach(A)};k.forEach(A)}const T=i.children.length>0;f!==T&&this.setCollapsible(o.slice(0,-1),T),this._onDidSplice.fire({insertedNodes:y,deletedNodes:k});let O=i;for(;O;){if(O.visibility===2){this.refilter();break}O=O.parent}}rerender(o){if(o.length===0)throw new b.TreeError(this.user,"Invalid tree location");const{node:s,listIndex:a,revealed:u}=this.getTreeNodeWithListIndex(o);s.visible&&u&&this.list.splice(a,1,[s])}has(o){return this.hasTreeNode(o)}getListIndex(o){const{listIndex:s,visible:a,revealed:u}=this.getTreeNodeWithListIndex(o);return a&&u?s:-1}getListRenderCount(o){return this.getTreeNode(o).renderNodeCount}isCollapsible(o){return this.getTreeNode(o).collapsible}setCollapsible(o,s){const a=this.getTreeNode(o);typeof s=="undefined"&&(s=!a.collapsible);const u={collapsible:s};return this.eventBufferer.bufferEvents(()=>this._setCollapseState(o,u))}isCollapsed(o){return this.getTreeNode(o).collapsed}setCollapsed(o,s,a){const u=this.getTreeNode(o);typeof s=="undefined"&&(s=!u.collapsed);const r={collapsed:s,recursive:a||!1};return this.eventBufferer.bufferEvents(()=>this._setCollapseState(o,r))}_setCollapseState(o,s){const{node:a,listIndex:u,revealed:r}=this.getTreeNodeWithListIndex(o),i=this._setListNodeCollapseState(a,u,r,s);if(a!==this.root&&this.autoExpandSingleChildren&&i&&!g(s)&&a.collapsible&&!a.collapsed&&!s.recursive){let n=-1;for(let t=0;t-1){n=-1;break}else n=t;n>-1&&this._setCollapseState([...o,n],s)}return i}_setListNodeCollapseState(o,s,a,u){const r=this._setNodeCollapseState(o,u,!1);if(!a||!o.visible||!r)return r;const i=o.renderNodeCount,n=this.updateNodeAfterCollapseChange(o),t=i-(s===-1?0:1);return this.list.splice(s+1,t,n.slice(1)),r}_setNodeCollapseState(o,s,a){let u;if(o===this.root?u=!1:(g(s)?(u=o.collapsible!==s.collapsible,o.collapsible=s.collapsible):o.collapsible?(u=o.collapsed!==s.collapsed,o.collapsed=s.collapsed):u=!1,u&&this._onDidChangeCollapseState.fire({node:o,deep:a})),!g(s)&&s.recursive)for(const r of o.children)u=this._setNodeCollapseState(r,s,!0)||u;return u}expandTo(o){this.eventBufferer.bufferEvents(()=>{let s=this.getTreeNode(o);for(;s.parent;)s=s.parent,o=o.slice(0,o.length-1),s.collapsed&&this._setCollapseState(o,{collapsed:!1,recursive:!1})})}refilter(){const o=this.root.renderNodeCount,s=this.updateNodeAfterFilterChange(this.root);this.list.splice(0,o,s)}createTreeNode(o,s,a,u,r,i){const n={parent:s,element:o.element,children:[],depth:s.depth+1,visibleChildrenCount:0,visibleChildIndex:-1,collapsible:typeof o.collapsible=="boolean"?o.collapsible:typeof o.collapsed!="undefined",collapsed:typeof o.collapsed=="undefined"?this.collapseByDefault:o.collapsed,renderNodeCount:1,visibility:1,visible:!0,filterData:void 0},t=this._filterNode(n,a);n.visibility=t,u&&r.push(n);const l=o.children||S.Iterable.empty(),h=u&&t!==0&&!n.collapsed,m=S.Iterable.map(l,v=>this.createTreeNode(v,n,t,h,r,i));let _=0,f=1;for(const v of m)n.children.push(v),f+=v.renderNodeCount,v.visible&&(v.visibleChildIndex=_++);return n.collapsible=n.collapsible||n.children.length>0,n.visibleChildrenCount=_,n.visible=t===2?_>0:t===1,n.visible?n.collapsed||(n.renderNodeCount=f):(n.renderNodeCount=0,u&&r.pop()),i&&i(n),n}updateNodeAfterCollapseChange(o){const s=o.renderNodeCount,a=[];return this._updateNodeAfterCollapseChange(o,a),this._updateAncestorsRenderNodeCount(o.parent,a.length-s),a}_updateNodeAfterCollapseChange(o,s){if(o.visible===!1)return 0;if(s.push(o),o.renderNodeCount=1,!o.collapsed)for(const a of o.children)o.renderNodeCount+=this._updateNodeAfterCollapseChange(a,s);return this._onDidChangeRenderNodeCount.fire(o),o.renderNodeCount}updateNodeAfterFilterChange(o){const s=o.renderNodeCount,a=[];return this._updateNodeAfterFilterChange(o,o.visible?1:0,a),this._updateAncestorsRenderNodeCount(o.parent,a.length-s),a}_updateNodeAfterFilterChange(o,s,a,u=!0){let r;if(o!==this.root){if(r=this._filterNode(o,s),r===0)return o.visible=!1,o.renderNodeCount=0,!1;u&&a.push(o)}const i=a.length;o.renderNodeCount=o===this.root?0:1;let n=!1;if(!o.collapsed||r!==0){let t=0;for(const l of o.children)n=this._updateNodeAfterFilterChange(l,r,a,u&&!o.collapsed)||n,l.visible&&(l.visibleChildIndex=t++);o.visibleChildrenCount=t}else o.visibleChildrenCount=0;return o!==this.root&&(o.visible=r===2?n:r===1),o.visible?o.collapsed||(o.renderNodeCount+=a.length-i):(o.renderNodeCount=0,u&&a.pop()),this._onDidChangeRenderNodeCount.fire(o),o.visible}_updateAncestorsRenderNodeCount(o,s){if(s!==0)for(;o;)o.renderNodeCount+=s,this._onDidChangeRenderNodeCount.fire(o),o=o.parent}_filterNode(o,s){const a=this.filter?this.filter.filter(o.element,s):1;return typeof a=="boolean"?(o.filterData=void 0,a?1:0):C(a)?(o.filterData=a.data,d(a.visibility)):(o.filterData=void 0,d(a))}hasTreeNode(o,s=this.root){if(!o||o.length===0)return!0;const[a,...u]=o;return a<0||a>s.children.length?!1:this.hasTreeNode(u,s.children[a])}getTreeNode(o,s=this.root){if(!o||o.length===0)return s;const[a,...u]=o;if(a<0||a>s.children.length)throw new b.TreeError(this.user,"Invalid tree location");return this.getTreeNode(u,s.children[a])}getTreeNodeWithListIndex(o){if(o.length===0)return{node:this.root,listIndex:-1,revealed:!0,visible:!1};const{parentNode:s,listIndex:a,revealed:u,visible:r}=this.getParentNodeWithListIndex(o),i=o[o.length-1];if(i<0||i>s.children.length)throw new b.TreeError(this.user,"Invalid tree location");const n=s.children[i];return{node:n,listIndex:a,revealed:u,visible:r&&n.visible}}getParentNodeWithListIndex(o,s=this.root,a=0,u=!0,r=!0){const[i,...n]=o;if(i<0||i>s.children.length)throw new b.TreeError(this.user,"Invalid tree location");for(let t=0;t{var r;if(u.element!==null){const i=u;if(c.add(i.element),this.nodes.set(i.element,i),this.identityProvider){const n=this.identityProvider.getId(i.element).toString();o.add(n),this.nodesByIdentity.set(n,i)}(r=p.onDidCreateNode)===null||r===void 0||r.call(p,i)}},a=u=>{var r;if(u.element!==null){const i=u;if(c.has(i.element)||this.nodes.delete(i.element),this.identityProvider){const n=this.identityProvider.getId(i.element).toString();o.has(n)||this.nodesByIdentity.delete(n)}(r=p.onDidDeleteNode)===null||r===void 0||r.call(p,i)}};this.model.splice([...d,0],Number.MAX_VALUE,g,Object.assign(Object.assign({},p),{onDidCreateNode:s,onDidDeleteNode:a}))}preserveCollapseState(d=b.Iterable.empty()){return this.sorter&&(d=w.mergeSort([...d],this.sorter.compare.bind(this.sorter))),b.Iterable.map(d,g=>{let p=this.nodes.get(g.element);if(!p&&this.identityProvider){const s=this.identityProvider.getId(g.element).toString();p=this.nodesByIdentity.get(s)}if(!p)return Object.assign(Object.assign({},g),{children:this.preserveCollapseState(g.children)});const c=typeof g.collapsible=="boolean"?g.collapsible:p.collapsible,o=typeof g.collapsed!="undefined"?g.collapsed:p.collapsed;return Object.assign(Object.assign({},g),{collapsible:c,collapsed:o,children:this.preserveCollapseState(g.children)})})}rerender(d){const g=this.getElementLocation(d);this.model.rerender(g)}has(d){return this.nodes.has(d)}getListIndex(d){const g=this.getElementLocation(d);return this.model.getListIndex(g)}getListRenderCount(d){const g=this.getElementLocation(d);return this.model.getListRenderCount(g)}isCollapsible(d){const g=this.getElementLocation(d);return this.model.isCollapsible(g)}setCollapsible(d,g){const p=this.getElementLocation(d);return this.model.setCollapsible(p,g)}isCollapsed(d){const g=this.getElementLocation(d);return this.model.isCollapsed(g)}setCollapsed(d,g,p){const c=this.getElementLocation(d);return this.model.setCollapsed(c,g,p)}expandTo(d){const g=this.getElementLocation(d);this.model.expandTo(g)}refilter(){this.model.refilter()}getNode(d=null){if(d===null)return this.model.getNode(this.model.rootRef);const g=this.nodes.get(d);if(!g)throw new M.TreeError(this.user,`Tree element not found: ${d}`);return g}getNodeLocation(d){return d.element}getParentNodeLocation(d){if(d===null)throw new M.TreeError(this.user,"Invalid getParentNodeLocation call");const g=this.nodes.get(d);if(!g)throw new M.TreeError(this.user,`Tree element not found: ${d}`);const p=this.model.getNodeLocation(g),c=this.model.getParentNodeLocation(p);return this.model.getNode(c).element}getElementLocation(d){if(d===null)return[];const g=this.nodes.get(d);if(!g)throw new M.TreeError(this.user,`Tree element not found: ${d}`);return this.model.getNodeLocation(g)}}e.ObjectTreeModel=S}),define(Q[284],J([0,1,54,6,98,155]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CompressibleObjectTreeModel=e.DefaultElementMapper=e.CompressedObjectTreeModel=e.decompress=e.compress=void 0;function S(n){const t=[n.element],l=n.incompressible||!1;return{element:{elements:t,incompressible:l},children:b.Iterable.map(b.Iterable.from(n.children),S),collapsible:n.collapsible,collapsed:n.collapsed}}function C(n){const t=[n.element],l=n.incompressible||!1;let h,m;for(;[m,h]=b.Iterable.consume(b.Iterable.from(n.children),2),!(m.length!==1||m[0].incompressible);)n=m[0],t.push(n.element);return{element:{elements:t,incompressible:l},children:b.Iterable.map(b.Iterable.concat(m,h),C),collapsible:n.collapsible,collapsed:n.collapsed}}e.compress=C;function d(n,t=0){let l;return td(h,0)),t===0&&n.element.incompressible?{element:n.element.elements[t],children:l,incompressible:!0,collapsible:n.collapsible,collapsed:n.collapsed}:{element:n.element.elements[t],children:l,collapsible:n.collapsible,collapsed:n.collapsed}}function g(n){return d(n,0)}e.decompress=g;function p(n,t,l){return n.element===t?Object.assign(Object.assign({},n),{children:l}):Object.assign(Object.assign({},n),{children:b.Iterable.map(b.Iterable.from(n.children),h=>p(h,t,l))})}const c=n=>({getId(t){return t.elements.map(l=>n.getId(l).toString()).join("\0")}});class o{constructor(t,l,h={}){this.user=t,this.rootRef=null,this.nodes=new Map,this.model=new w.ObjectTreeModel(t,l,h),this.enabled=typeof h.compressionEnabled=="undefined"?!0:h.compressionEnabled,this.identityProvider=h.identityProvider}get onDidSplice(){return this.model.onDidSplice}get onDidChangeCollapseState(){return this.model.onDidChangeCollapseState}get onDidChangeRenderNodeCount(){return this.model.onDidChangeRenderNodeCount}setChildren(t,l=b.Iterable.empty(),h){const m=h.diffIdentityProvider&&c(h.diffIdentityProvider);if(t===null){const T=b.Iterable.map(l,this.enabled?C:S);this._setChildren(null,T,{diffIdentityProvider:m,diffDepth:Infinity});return}const _=this.nodes.get(t);if(!_)throw new Error("Unknown compressed tree node");const f=this.model.getNode(_),v=this.model.getParentNodeLocation(_),y=this.model.getNode(v),L=g(f),I=p(L,t,l),k=(this.enabled?C:S)(I),E=y.children.map(T=>T===f?k:T);this._setChildren(y.element,E,{diffIdentityProvider:m,diffDepth:f.depth-y.depth})}setCompressionEnabled(t){if(t!==this.enabled){this.enabled=t;const h=this.model.getNode().children,m=b.Iterable.map(h,g),_=b.Iterable.map(m,t?C:S);this._setChildren(null,_,{diffIdentityProvider:this.identityProvider,diffDepth:Infinity})}}_setChildren(t,l,h){const m=new Set,_=v=>{for(const y of v.element.elements)m.add(y),this.nodes.set(y,v.element)},f=v=>{for(const y of v.element.elements)m.has(y)||this.nodes.delete(y)};this.model.setChildren(t,l,Object.assign(Object.assign({},h),{onDidCreateNode:_,onDidDeleteNode:f}))}has(t){return this.nodes.has(t)}getListIndex(t){const l=this.getCompressedNode(t);return this.model.getListIndex(l)}getListRenderCount(t){const l=this.getCompressedNode(t);return this.model.getListRenderCount(l)}getNode(t){if(typeof t=="undefined")return this.model.getNode();const l=this.getCompressedNode(t);return this.model.getNode(l)}getNodeLocation(t){const l=this.model.getNodeLocation(t);return l===null?null:l.elements[l.elements.length-1]}getParentNodeLocation(t){const l=this.getCompressedNode(t),h=this.model.getParentNodeLocation(l);return h===null?null:h.elements[h.elements.length-1]}isCollapsible(t){const l=this.getCompressedNode(t);return this.model.isCollapsible(l)}setCollapsible(t,l){const h=this.getCompressedNode(t);return this.model.setCollapsible(h,l)}isCollapsed(t){const l=this.getCompressedNode(t);return this.model.isCollapsed(l)}setCollapsed(t,l,h){const m=this.getCompressedNode(t);return this.model.setCollapsed(m,l,h)}expandTo(t){const l=this.getCompressedNode(t);this.model.expandTo(l)}rerender(t){const l=this.getCompressedNode(t);this.model.rerender(l)}refilter(){this.model.refilter()}getCompressedNode(t){if(t===null)return null;const l=this.nodes.get(t);if(!l)throw new M.TreeError(this.user,`Tree element not found: ${t}`);return l}}e.CompressedObjectTreeModel=o;const s=n=>n[n.length-1];e.DefaultElementMapper=s;class a{constructor(t,l){this.unwrapper=t,this.node=l}get element(){return this.node.element===null?null:this.unwrapper(this.node.element)}get children(){return this.node.children.map(t=>new a(this.unwrapper,t))}get depth(){return this.node.depth}get visibleChildrenCount(){return this.node.visibleChildrenCount}get visibleChildIndex(){return this.node.visibleChildIndex}get collapsible(){return this.node.collapsible}get collapsed(){return this.node.collapsed}get visible(){return this.node.visible}get filterData(){return this.node.filterData}}function u(n,t){return{splice(l,h,m){t.splice(l,h,m.map(_=>n.map(_)))},updateElementHeight(l,h){t.updateElementHeight(l,h)}}}function r(n,t){return Object.assign(Object.assign({},t),{identityProvider:t.identityProvider&&{getId(l){return t.identityProvider.getId(n(l))}},sorter:t.sorter&&{compare(l,h){return t.sorter.compare(l.elements[0],h.elements[0])}},filter:t.filter&&{filter(l,h){return t.filter.filter(n(l),h)}}})}class i{constructor(t,l,h={}){this.rootRef=null,this.elementMapper=h.elementMapper||e.DefaultElementMapper;const m=_=>this.elementMapper(_.elements);this.nodeMapper=new M.WeakMapper(_=>new a(m,_)),this.model=new o(t,u(this.nodeMapper,l),r(m,h))}get onDidSplice(){return N.Event.map(this.model.onDidSplice,({insertedNodes:t,deletedNodes:l})=>({insertedNodes:t.map(h=>this.nodeMapper.map(h)),deletedNodes:l.map(h=>this.nodeMapper.map(h))}))}get onDidChangeCollapseState(){return N.Event.map(this.model.onDidChangeCollapseState,({node:t,deep:l})=>({node:this.nodeMapper.map(t),deep:l}))}get onDidChangeRenderNodeCount(){return N.Event.map(this.model.onDidChangeRenderNodeCount,t=>this.nodeMapper.map(t))}setChildren(t,l=b.Iterable.empty(),h={}){this.model.setChildren(t,l,h)}setCompressionEnabled(t){this.model.setCompressionEnabled(t)}has(t){return this.model.has(t)}getListIndex(t){return this.model.getListIndex(t)}getListRenderCount(t){return this.model.getListRenderCount(t)}getNode(t){return this.nodeMapper.map(this.model.getNode(t))}getNodeLocation(t){return t.element}getParentNodeLocation(t){return this.model.getParentNodeLocation(t)}isCollapsible(t){return this.model.isCollapsible(t)}setCollapsible(t,l){return this.model.setCollapsible(t,l)}isCollapsed(t){return this.model.isCollapsed(t)}setCollapsed(t,l,h){return this.model.setCollapsed(t,l,h)}expandTo(t){return this.model.expandTo(t)}rerender(t){return this.model.rerender(t)}refilter(){return this.model.refilter()}getCompressedTreeNode(t=null){return this.model.getNode(t)}}e.CompressibleObjectTreeModel=i}),define(Q[285],J([0,1,8]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.buildReplaceStringWithCasePreserved=void 0;function N(S,C){if(S&&S[0]!==""){const d=M(S,C,"-"),g=M(S,C,"_");return d&&!g?w(S,C,"-"):!d&&g?w(S,C,"_"):S[0].toUpperCase()===S[0]?C.toUpperCase():S[0].toLowerCase()===S[0]?C.toLowerCase():b.containsUppercaseCharacter(S[0][0])&&C.length>0?C[0].toUpperCase()+C.substr(1):C}else return C}e.buildReplaceStringWithCasePreserved=N;function M(S,C,d){return S[0].indexOf(d)!==-1&&C.indexOf(d)!==-1&&S[0].split(d).length===C.split(d).length}function w(S,C,d){const g=C.split(d),p=S[0].split(d);let c="";return g.forEach((o,s)=>{c+=N([p[s]],o)+d}),c.slice(0,-1)}}),define(Q[82],J([0,1,8]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var N;(function(M){M[M.Ignore=0]="Ignore",M[M.Info=1]="Info",M[M.Warning=2]="Warning",M[M.Error=3]="Error"})(N||(N={})),function(M){const w="error",S="warning",C="warn",d="info";function g(p){return p?b.equalsIgnoreCase(w,p)?M.Error:b.equalsIgnoreCase(S,p)||b.equalsIgnoreCase(C,p)?M.Warning:b.equalsIgnoreCase(d,p)?M.Info:M.Ignore:M.Ignore}M.fromValue=g}(N||(N={})),e.default=N}),define(Q[20],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.withNullAsUndefined=e.createProxyObject=e.getAllMethodNames=e.getAllPropertyNames=e.validateConstraint=e.validateConstraints=e.isFunction=e.assertIsDefined=e.assertType=e.isUndefinedOrNull=e.isUndefined=e.isBoolean=e.isNumber=e.isObject=e.isString=e.isArray=void 0;function b(n){return Array.isArray(n)}e.isArray=b;function N(n){return typeof n=="string"}e.isString=N;function M(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)&&!(n instanceof RegExp)&&!(n instanceof Date)}e.isObject=M;function w(n){return typeof n=="number"&&!isNaN(n)}e.isNumber=w;function S(n){return n===!0||n===!1}e.isBoolean=S;function C(n){return typeof n=="undefined"}e.isUndefined=C;function d(n){return C(n)||n===null}e.isUndefinedOrNull=d;function g(n,t){if(!n)throw new Error(t?`Unexpected type, expected '${t}'`:"Unexpected type")}e.assertType=g;function p(n){if(d(n))throw new Error("Assertion Failed: argument is undefined or null");return n}e.assertIsDefined=p;function c(n){return typeof n=="function"}e.isFunction=c;function o(n,t){const l=Math.min(n.length,t.length);for(let h=0;hfunction(){const _=Array.prototype.slice.call(arguments,0);return t(m,_)};let h={};for(const m of n)h[m]=l(m);return h}e.createProxyObject=r;function i(n){return n===null?void 0:n}e.withNullAsUndefined=i}),define(Q[40],J([0,1,20]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getOrDefault=e.equals=e.mixin=e.cloneAndChange=e.deepFreeze=e.deepClone=void 0;function N(c){if(!c||typeof c!="object"||c instanceof RegExp)return c;const o=Array.isArray(c)?[]:{};return Object.keys(c).forEach(s=>{c[s]&&typeof c[s]=="object"?o[s]=N(c[s]):o[s]=c[s]}),o}e.deepClone=N;function M(c){if(!c||typeof c!="object")return c;const o=[c];for(;o.length>0;){const s=o.shift();Object.freeze(s);for(const a in s)if(w.call(s,a)){const u=s[a];typeof u=="object"&&!Object.isFrozen(u)&&o.push(u)}}return c}e.deepFreeze=M;const w=Object.prototype.hasOwnProperty;function S(c,o){return C(c,o,new Set)}e.cloneAndChange=S;function C(c,o,s){if(b.isUndefinedOrNull(c))return c;const a=o(c);if(typeof a!="undefined")return a;if(b.isArray(c)){const u=[];for(const r of c)u.push(C(r,o,s));return u}if(b.isObject(c)){if(s.has(c))throw new Error("Cannot clone recursive data-structure");s.add(c);const u={};for(let r in c)w.call(c,r)&&(u[r]=C(c[r],o,s));return s.delete(c),u}return c}function d(c,o,s=!0){return b.isObject(c)?(b.isObject(o)&&Object.keys(o).forEach(a=>{a in c?s&&(b.isObject(c[a])&&b.isObject(o[a])?d(c[a],o[a],s):c[a]=o[a]):c[a]=o[a]}),c):o}e.mixin=d;function g(c,o){if(c===o)return!0;if(c==null||o===null||o===void 0||typeof c!=typeof o||typeof c!="object"||Array.isArray(c)!==Array.isArray(o))return!1;let s,a;if(Array.isArray(c)){if(c.length!==o.length)return!1;for(s=0;s255?255:M|0}e.toUint8=b;function N(M){return M<0?0:M>4294967295?4294967295:M|0}e.toUint32=N}),define(Q[24],J([0,1,17,72]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.uriToFsPath=e.URI=void 0;const M=/^\w[\w\d+.-]*$/,w=/^\//,S=/^\/\//;function C(f,v){if(!f.scheme&&v)throw new Error(`[UriError]: Scheme is missing: {scheme: "", authority: "${f.authority}", path: "${f.path}", query: "${f.query}", fragment: "${f.fragment}"}`);if(f.scheme&&!M.test(f.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if(f.path){if(f.authority){if(!w.test(f.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(S.test(f.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}}function d(f,v){return!f&&!v?"file":f}function g(f,v){switch(f){case"https":case"http":case"file":v?v[0]!==c&&(v=c+v):v=c;break}return v}const p="",c="/",o=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;class s{constructor(v,y,L,I,k,E=!1){typeof v=="object"?(this.scheme=v.scheme||p,this.authority=v.authority||p,this.path=v.path||p,this.query=v.query||p,this.fragment=v.fragment||p):(this.scheme=d(v,E),this.authority=y||p,this.path=g(this.scheme,L||p),this.query=I||p,this.fragment=k||p,C(this,E))}static isUri(v){return v instanceof s?!0:v?typeof v.authority=="string"&&typeof v.fragment=="string"&&typeof v.path=="string"&&typeof v.query=="string"&&typeof v.scheme=="string"&&typeof v.fsPath=="string"&&typeof v.with=="function"&&typeof v.toString=="function":!1}get fsPath(){return t(this,!1)}with(v){if(!v)return this;let{scheme:y,authority:L,path:I,query:k,fragment:E}=v;return y===void 0?y=this.scheme:y===null&&(y=p),L===void 0?L=this.authority:L===null&&(L=p),I===void 0?I=this.path:I===null&&(I=p),k===void 0?k=this.query:k===null&&(k=p),E===void 0?E=this.fragment:E===null&&(E=p),y===this.scheme&&L===this.authority&&I===this.path&&k===this.query&&E===this.fragment?this:new u(y,L,I,k,E)}static parse(v,y=!1){const L=o.exec(v);return L?new u(L[2]||p,_(L[4]||p),_(L[5]||p),_(L[7]||p),_(L[9]||p),y):new u(p,p,p,p,p)}static file(v){let y=p;if(b.isWindows&&(v=v.replace(/\\/g,c)),v[0]===c&&v[1]===c){const L=v.indexOf(c,2);L===-1?(y=v.substring(2),v=c):(y=v.substring(2,L),v=v.substring(L)||c)}return new u("file",y,v,p,p)}static from(v){return new u(v.scheme,v.authority,v.path,v.query,v.fragment)}static joinPath(v,...y){if(!v.path)throw new Error("[UriError]: cannot call joinPath on URI without path");let L;return b.isWindows&&v.scheme==="file"?L=s.file(N.win32.join(t(v,!0),...y)).path:L=N.posix.join(v.path,...y),v.with({path:L})}toString(v=!1){return l(this,v)}toJSON(){return this}static revive(v){if(v){if(v instanceof s)return v;{const y=new u(v);return y._formatted=v.external,y._fsPath=v._sep===a?v.fsPath:null,y}}else return v}}e.URI=s;const a=b.isWindows?1:void 0;class u extends s{constructor(){super(...arguments);this._formatted=null,this._fsPath=null}get fsPath(){return this._fsPath||(this._fsPath=t(this,!1)),this._fsPath}toString(v=!1){return v?l(this,!0):(this._formatted||(this._formatted=l(this,!1)),this._formatted)}toJSON(){const v={$mid:1};return this._fsPath&&(v.fsPath=this._fsPath,v._sep=a),this._formatted&&(v.external=this._formatted),this.path&&(v.path=this.path),this.scheme&&(v.scheme=this.scheme),this.authority&&(v.authority=this.authority),this.query&&(v.query=this.query),this.fragment&&(v.fragment=this.fragment),v}}const r={[58]:"%3A",[47]:"%2F",[63]:"%3F",[35]:"%23",[91]:"%5B",[93]:"%5D",[64]:"%40",[33]:"%21",[36]:"%24",[38]:"%26",[39]:"%27",[40]:"%28",[41]:"%29",[42]:"%2A",[43]:"%2B",[44]:"%2C",[59]:"%3B",[61]:"%3D",[32]:"%20"};function i(f,v){let y,L=-1;for(let I=0;I=97&&k<=122||k>=65&&k<=90||k>=48&&k<=57||k===45||k===46||k===95||k===126||v&&k===47)L!==-1&&(y+=encodeURIComponent(f.substring(L,I)),L=-1),y!==void 0&&(y+=f.charAt(I));else{y===void 0&&(y=f.substr(0,I));const E=r[k];E!==void 0?(L!==-1&&(y+=encodeURIComponent(f.substring(L,I)),L=-1),y+=E):L===-1&&(L=I)}}return L!==-1&&(y+=encodeURIComponent(f.substring(L))),y!==void 0?y:f}function n(f){let v;for(let y=0;y1&&f.scheme==="file"?y=`//${f.authority}${f.path}`:f.path.charCodeAt(0)===47&&(f.path.charCodeAt(1)>=65&&f.path.charCodeAt(1)<=90||f.path.charCodeAt(1)>=97&&f.path.charCodeAt(1)<=122)&&f.path.charCodeAt(2)===58?v?y=f.path.substr(1):y=f.path[1].toLowerCase()+f.path.substr(2):y=f.path,b.isWindows&&(y=y.replace(/\//g,"\\")),y}e.uriToFsPath=t;function l(f,v){const y=v?n:i;let L="",{scheme:I,authority:k,path:E,query:T,fragment:O}=f;if(I&&(L+=I,L+=":"),(k||I==="file")&&(L+=c,L+=c),k){let A=k.indexOf("@");if(A!==-1){const B=k.substr(0,A);k=k.substr(A+1),A=B.indexOf(":"),A===-1?L+=y(B,!1):(L+=y(B.substr(0,A),!1),L+=":",L+=y(B.substr(A+1),!1)),L+="@"}k=k.toLowerCase(),A=k.indexOf(":"),A===-1?L+=y(k,!1):(L+=y(k.substr(0,A),!1),L+=k.substr(A))}if(E){if(E.length>=3&&E.charCodeAt(0)===47&&E.charCodeAt(2)===58){const A=E.charCodeAt(1);A>=65&&A<=90&&(E=`/${String.fromCharCode(A+32)}:${E.substr(3)}`)}else if(E.length>=2&&E.charCodeAt(1)===58){const A=E.charCodeAt(0);A>=65&&A<=90&&(E=`${String.fromCharCode(A+32)}:${E.substr(2)}`)}L+=y(E,!0)}return T&&(L+="?",L+=y(T,!1)),O&&(L+="#",L+=v?O:i(O,!1)),L}function h(f){try{return decodeURIComponent(f)}catch(v){return f.length>3?f.substr(0,3)+h(f.substr(3)):f}}const m=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function _(f){return f.match(m)?f.replace(m,v=>h(v)):f}}),define(Q[51],J([0,1,24,8]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.LRUCache=e.LinkedMap=e.ResourceMap=e.TernarySearchTree=e.UriIterator=e.PathIterator=e.ConfigKeysIterator=e.StringIterator=void 0;class M{constructor(){this._value="",this._pos=0}reset(a){return this._value=a,this._pos=0,this}next(){return this._pos+=1,this}hasNext(){return this._pos!1){return new g(new C(a))}static forStrings(){return new g(new M)}static forConfigKeys(){return new g(new w)}clear(){this._root=void 0}set(a,u){const r=this._iter.reset(a);let i;for(this._root||(this._root=new d,this._root.segment=r.value()),i=this._root;;){const t=r.cmp(i.segment);if(t>0)i.left||(i.left=new d,i.left.segment=r.value()),i=i.left;else if(t<0)i.right||(i.right=new d,i.right.segment=r.value()),i=i.right;else if(r.hasNext())r.next(),i.mid||(i.mid=new d,i.mid.segment=r.value()),i=i.mid;else break}const n=i.value;return i.value=u,i.key=a,n}get(a){var u;return(u=this._getNode(a))===null||u===void 0?void 0:u.value}_getNode(a){const u=this._iter.reset(a);let r=this._root;for(;r;){const i=u.cmp(r.segment);if(i>0)r=r.left;else if(i<0)r=r.right;else if(u.hasNext())u.next(),r=r.mid;else break}return r}has(a){const u=this._getNode(a);return!((u==null?void 0:u.value)===void 0&&(u==null?void 0:u.mid)===void 0)}delete(a){return this._delete(a,!1)}deleteSuperstr(a){return this._delete(a,!0)}_delete(a,u){const r=this._iter.reset(a),i=[];let n=this._root;for(;n;){const t=r.cmp(n.segment);if(t>0)i.push([1,n]),n=n.left;else if(t<0)i.push([-1,n]),n=n.right;else if(r.hasNext())r.next(),i.push([0,n]),n=n.mid;else{for(u?(n.left=void 0,n.mid=void 0,n.right=void 0):n.value=void 0;i.length>0&&n.isEmpty();){let[l,h]=i.pop();switch(l){case 1:h.left=void 0;break;case 0:h.mid=void 0;break;case-1:h.right=void 0;break}n=h}break}}}findSubstr(a){const u=this._iter.reset(a);let r=this._root,i;for(;r;){const n=u.cmp(r.segment);if(n>0)r=r.left;else if(n<0)r=r.right;else if(u.hasNext())u.next(),i=r.value||i,r=r.mid;else break}return r&&r.value||i}findSuperstr(a){const u=this._iter.reset(a);let r=this._root;for(;r;){const i=u.cmp(r.segment);if(i>0)r=r.left;else if(i<0)r=r.right;else if(u.hasNext())u.next(),r=r.mid;else return r.mid?this._entries(r.mid):void 0}}forEach(a){for(const[u,r]of this)a(r,u)}*[Symbol.iterator](){yield*this._entries(this._root)}*_entries(a){a&&(yield*this._entries(a.left),a.value&&(yield[a.key,a.value]),yield*this._entries(a.mid),yield*this._entries(a.right))}}e.TernarySearchTree=g;class p{constructor(a,u){this[Symbol.toStringTag]="ResourceMap",a instanceof p?(this.map=new Map(a.map),this.toKey=u!=null?u:p.defaultToKey):(this.map=new Map,this.toKey=a!=null?a:p.defaultToKey)}set(a,u){return this.map.set(this.toKey(a),u),this}get(a){return this.map.get(this.toKey(a))}has(a){return this.map.has(this.toKey(a))}get size(){return this.map.size}clear(){this.map.clear()}delete(a){return this.map.delete(this.toKey(a))}forEach(a,u){typeof u!="undefined"&&(a=a.bind(u));for(let[r,i]of this.map)a(i,b.URI.parse(r),this)}values(){return this.map.values()}*keys(){for(let a of this.map.keys())yield b.URI.parse(a)}*entries(){for(let a of this.map.entries())yield[b.URI.parse(a[0]),a[1]]}*[Symbol.iterator](){for(let a of this.map)yield[b.URI.parse(a[0]),a[1]]}}e.ResourceMap=p,p.defaultToKey=s=>s.toString();class c{constructor(){this[Symbol.toStringTag]="LinkedMap",this._map=new Map,this._head=void 0,this._tail=void 0,this._size=0,this._state=0}clear(){this._map.clear(),this._head=void 0,this._tail=void 0,this._size=0,this._state++}isEmpty(){return!this._head&&!this._tail}get size(){return this._size}get first(){var a;return(a=this._head)===null||a===void 0?void 0:a.value}get last(){var a;return(a=this._tail)===null||a===void 0?void 0:a.value}has(a){return this._map.has(a)}get(a,u=0){const r=this._map.get(a);if(!!r)return u!==0&&this.touch(r,u),r.value}set(a,u,r=0){let i=this._map.get(a);if(i)i.value=u,r!==0&&this.touch(i,r);else{switch(i={key:a,value:u,next:void 0,previous:void 0},r){case 0:this.addItemLast(i);break;case 1:this.addItemFirst(i);break;case 2:this.addItemLast(i);break;default:this.addItemLast(i);break}this._map.set(a,i),this._size++}return this}delete(a){return!!this.remove(a)}remove(a){const u=this._map.get(a);if(!!u)return this._map.delete(a),this.removeItem(u),this._size--,u.value}shift(){if(!(!this._head&&!this._tail)){if(!this._head||!this._tail)throw new Error("Invalid list");const a=this._head;return this._map.delete(a.key),this.removeItem(a),this._size--,a.value}}forEach(a,u){const r=this._state;let i=this._head;for(;i;){if(u?a.bind(u)(i.value,i.key,this):a(i.value,i.key,this),this._state!==r)throw new Error("LinkedMap got modified during iteration.");i=i.next}}keys(){const a=this,u=this._state;let r=this._head;const i={[Symbol.iterator](){return i},next(){if(a._state!==u)throw new Error("LinkedMap got modified during iteration.");if(r){const n={value:r.key,done:!1};return r=r.next,n}else return{value:void 0,done:!0}}};return i}values(){const a=this,u=this._state;let r=this._head;const i={[Symbol.iterator](){return i},next(){if(a._state!==u)throw new Error("LinkedMap got modified during iteration.");if(r){const n={value:r.value,done:!1};return r=r.next,n}else return{value:void 0,done:!0}}};return i}entries(){const a=this,u=this._state;let r=this._head;const i={[Symbol.iterator](){return i},next(){if(a._state!==u)throw new Error("LinkedMap got modified during iteration.");if(r){const n={value:[r.key,r.value],done:!1};return r=r.next,n}else return{value:void 0,done:!0}}};return i}[Symbol.iterator](){return this.entries()}trimOld(a){if(!(a>=this.size)){if(a===0){this.clear();return}let u=this._head,r=this.size;for(;u&&r>a;)this._map.delete(u.key),u=u.next,r--;this._head=u,this._size=r,u&&(u.previous=void 0),this._state++}}addItemFirst(a){if(!this._head&&!this._tail)this._tail=a;else if(this._head)a.next=this._head,this._head.previous=a;else throw new Error("Invalid list");this._head=a,this._state++}addItemLast(a){if(!this._head&&!this._tail)this._head=a;else if(this._tail)a.previous=this._tail,this._tail.next=a;else throw new Error("Invalid list");this._tail=a,this._state++}removeItem(a){if(a===this._head&&a===this._tail)this._head=void 0,this._tail=void 0;else if(a===this._head){if(!a.next)throw new Error("Invalid list");a.next.previous=void 0,this._head=a.next}else if(a===this._tail){if(!a.previous)throw new Error("Invalid list");a.previous.next=void 0,this._tail=a.previous}else{const u=a.next,r=a.previous;if(!u||!r)throw new Error("Invalid list");u.previous=r,r.next=u}a.next=void 0,a.previous=void 0,this._state++}touch(a,u){if(!this._head||!this._tail)throw new Error("Invalid list");if(!(u!==1&&u!==2)){if(u===1){if(a===this._head)return;const r=a.next,i=a.previous;a===this._tail?(i.next=void 0,this._tail=i):(r.previous=i,i.next=r),a.previous=void 0,a.next=this._head,this._head.previous=a,this._head=a,this._state++}else if(u===2){if(a===this._tail)return;const r=a.next,i=a.previous;a===this._head?(r.previous=void 0,this._head=r):(r.previous=i,i.next=r),a.next=void 0,a.previous=this._tail,this._tail.next=a,this._tail=a,this._state++}}}toJSON(){const a=[];return this.forEach((u,r)=>{a.push([r,u])}),a}fromJSON(a){this.clear();for(const[u,r]of a)this.set(u,r)}}e.LinkedMap=c;class o extends c{constructor(a,u=1){super();this._limit=a,this._ratio=Math.min(Math.max(0,u),1)}get limit(){return this._limit}set limit(a){this._limit=a,this.checkTrim()}get(a,u=2){return super.get(a,u)}peek(a){return super.get(a,0)}set(a,u){return super.set(a,u,2),this.checkTrim(),this}checkTrim(){this.size>this._limit&&this.trimOld(Math.round(this._limit*this._ratio))}}e.LRUCache=o}),define(Q[66],J([0,1,51,8]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.fuzzyScoreGracefulAggressive=e.fuzzyScore=e.FuzzyScore=e.isPatternInWord=e.createMatches=e.anyScore=e.matchesFuzzy=e.matchesWords=e.matchesCamelCase=e.isUpper=e.matchesSubString=e.matchesContiguousSubString=e.matchesPrefix=e.or=void 0;function M(...G){return function(j,te){for(let Z=0,ue=G.length;Z0?[{start:0,end:j.length}]:[]:null}function S(G,j){const te=j.toLowerCase().indexOf(G.toLowerCase());return te===-1?null:[{start:te,end:te+G.length}]}e.matchesContiguousSubString=S;function C(G,j){return d(G.toLowerCase(),j.toLowerCase(),0,0)}e.matchesSubString=C;function d(G,j,te,Z){if(te===G.length)return[];if(Z===j.length)return null;if(G[te]===j[Z]){let ue=null;return(ue=d(G,j,te+1,Z+1))?i({start:Z,end:Z+1},ue):null}return d(G,j,te,Z+1)}function g(G){return 97<=G&&G<=122}function p(G){return 65<=G&&G<=90}e.isUpper=p;function c(G){return 48<=G&&G<=57}function o(G){return G===32||G===9||G===10||G===13}const s=new Set;"`~!@#$%^&*()-=+[{]}\\|;:'\",.<>/?".split("").forEach(G=>s.add(G.charCodeAt(0)));function a(G){return o(G)||s.has(G)}function u(G,j){return G===j||a(G)&&a(j)}function r(G){return g(G)||p(G)||c(G)}function i(G,j){return j.length===0?j=[G]:G.end===j[0].start?j[0].start=G.start:j.unshift(G),j}function n(G,j){for(let te=j;te0&&!r(G.charCodeAt(te-1)))return te}return G.length}function t(G,j,te,Z){if(te===G.length)return[];if(Z===j.length)return null;if(G[te]!==j[Z].toLowerCase())return null;{let ue=null,he=Z+1;for(ue=t(G,j,te+1,Z+1);!ue&&(he=n(j,he)).6}function m(G){const{upperPercent:j,lowerPercent:te,alphaPercent:Z,numericPercent:ue}=G;return te>.2&&j<.8&&Z>.6&&ue<.2}function _(G){let j=0,te=0,Z=0,ue=0;for(let he=0;he60)return null;const te=l(j);if(!m(te)){if(!h(te))return null;j=j.toLowerCase()}let Z=null,ue=0;for(G=G.toLowerCase();ue0&&a(G.charCodeAt(te-1)))return te;return G.length}const I=M(e.matchesPrefix,f,S),k=M(e.matchesPrefix,f,C),E=new b.LRUCache(1e4);function T(G,j,te=!1){if(typeof G!="string"||typeof j!="string")return null;let Z=E.get(G);Z||(Z=new RegExp(N.convertSimple2RegExpPattern(G),"i"),E.set(G,Z));const ue=Z.exec(j);return ue?[{start:ue.index,end:ue.index+ue[0].length}]:te?k(G,j):I(G,j)}e.matchesFuzzy=T;function O(G,j,te,Z,ue,he){const re=U(G,j,0,Z,ue,0,!0);if(re)return re;let ce=[],me=0,Ce=he;for(let be=0;be=0)me+=1,ce.unshift(Le),Ce=Le+1;else if(ce.length>0)break}return[me,he,...ce]}e.anyScore=O;function A(G){if(typeof G=="undefined")return[];const j=[],te=G[1];for(let Z=G.length-1;Z>1;Z--){const ue=G[Z]+te,he=j[j.length-1];he&&he.end===ue?he.end=ue+1:j.push({start:ue,end:ue+1})}return j}e.createMatches=A;const B=128;function F(){const G=[],j=[];for(let te=0;te<=B;te++)j[te]=0;for(let te=0;te<=B;te++)G.push(j.slice(0));return G}function D(G){const j=[];for(let te=0;te<=G;te++)j[te]=0;return j}const R=D(2*B),W=D(2*B),x=F(),K=F(),Y=F(),ee=!1;function se(G,j,te,Z,ue){function he(ce,me,Ce=" "){for(;ce.lengthhe(ce,3)).join("|")} +`;for(let ce=0;ce<=te;ce++)ce===0?re+=" |":re+=`${j[ce-1]}|`,re+=G[ce].slice(0,ue+1).map(me=>he(me.toString(),3)).join("|")+` +`;return re}function ne(G,j,te,Z){G=G.substr(j),te=te.substr(Z),console.log(se(K,G,G.length,te,te.length)),console.log(se(Y,G,G.length,te,te.length)),console.log(se(x,G,G.length,te,te.length))}function le(G,j){if(j<0||j>=G.length)return!1;const te=G.codePointAt(j);switch(te){case 95:case 45:case 46:case 32:case 47:case 92:case 39:case 34:case 58:case 36:case 60:case 40:case 91:return!0;case void 0:return!1;default:return!!N.isEmojiImprecise(te)}}function X(G,j){if(j<0||j>=G.length)return!1;switch(G.charCodeAt(j)){case 32:case 9:return!0;default:return!1}}function z(G,j,te){return j[G]!==te[G]}function P(G,j,te,Z,ue,he,re=!1){for(;jB?B:G.length,me=Z.length>B?B:Z.length;if(!(te>=ce||he>=me||ce-te>me-he)&&!!P(j,te,ce,ue,he,me,!0)){H(ce,me,te,he,j,ue);let Ce=1,be=1,Le=te,De=he;const Re=[!1];for(Ce=1,Le=te;Leye,Ne=ke?K[Ce][be-1]+(x[Ce][be-1]>0?-5:0):0,Te=De>ye+1&&x[Ce][be-1]>0,Oe=Te?K[Ce][be-2]+(x[Ce][be-2]>0?-5:0):0;if(Te&&(!ke||Oe>=Ne)&&(!pe||Oe>=ve))K[Ce][be]=Oe,Y[Ce][be]=3,x[Ce][be]=0;else if(ke&&(!pe||Ne>=ve))K[Ce][be]=Ne,Y[Ce][be]=2,x[Ce][be]=0;else if(pe)K[Ce][be]=ve,Y[Ce][be]=1,x[Ce][be]=x[Ce-1][be-1]+1;else throw new Error("not possible")}}if(ee&&ne(G,te,Z,he),!(!Re[0]&&!re)){Ce--,be--;const Ee=[K[Ce][be],he];let Ae=0,Se=0;for(;Ce>=1;){let ye=be;do{const fe=Y[Ce][ye];if(fe===3)ye=ye-2;else if(fe===2)ye=ye-1;else break}while(ye>=1);Ae>1&&j[te+Ce-1]===ue[he+be-1]&&!z(ye+he-1,Z,ue)&&Ae+1>x[Ce][ye]&&(ye=be),ye===be?Ae++:Ae=1,Se||(Se=ye),Ce--,be=ye-1,Ee.push(be)}me===ce&&(Ee[0]+=2);const we=Se-ce;return Ee[0]-=we,Ee}}}e.fuzzyScore=U;function H(G,j,te,Z,ue,he){let re=G-1,ce=j-1;for(;re>=te&&ce>=Z;)ue[re]===he[ce]&&(W[re]=ce,re--),ce--}function $(G,j,te,Z,ue,he,re,ce,me,Ce,be){if(j[te]!==he[re])return Number.MIN_SAFE_INTEGER;let Le=1,De=!1;return re===te-Z?Le=G[te]===ue[re]?7:5:z(re,ue,he)&&(re===0||!z(re-1,ue,he))?(Le=G[te]===ue[re]?7:5,De=!0):le(he,re)&&(re===0||!le(he,re-1))?Le=5:(le(he,re-1)||X(he,re-1))&&(Le=5,De=!0),Le>1&&te===Z&&(be[0]=!0),De||(De=z(re,ue,he)||le(he,re-1)||X(he,re-1)),te===Z?re>me&&(Le-=De?3:5):Ce?Le+=De?2:0:Le+=De?0:1,re+1===ce&&(Le-=De?3:5),Le}function ie(G,j,te,Z,ue,he,re){return oe(G,j,te,Z,ue,he,!0,re)}e.fuzzyScoreGracefulAggressive=ie;function oe(G,j,te,Z,ue,he,re,ce){let me=U(G,j,te,Z,ue,he,ce);if(me&&!re)return me;if(G.length>=3){const Ce=Math.min(7,G.length-1);for(let be=te+1;beme[0])&&(me=De))}}}return me}function ae(G,j){if(!(j+1>=G.length)){const te=G[j],Z=G[j+1];if(te!==Z)return G.slice(0,j)+Z+te+G.slice(j+2)}}}),define(Q[286],J([0,1,66,72,17,8]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.pieceToQuery=e.prepareQuery=e.scoreFuzzy2=void 0;const S=[void 0,[]];function C(r,i,n=0,t=0){const l=i;return l.values&&l.values.length>1?d(r,l.values,n,t):g(r,i,n,t)}e.scoreFuzzy2=C;function d(r,i,n,t){let l=0;const h=[];for(const m of i){const[_,f]=g(r,m,n,t);if(typeof _!="number")return S;l+=_,h.push(...f)}return[l,p(h)]}function g(r,i,n,t){const l=b.fuzzyScore(i.original,i.originalLowercase,n,r,r.toLowerCase(),t,!0);return l?[l[0],b.createMatches(l)]:S}function p(r){const i=r.sort((l,h)=>l.start-h.start),n=[];let t;for(const l of i)!t||!c(t,l)?(t=l,n.push(l)):(t.start=Math.min(t.start,l.start),t.end=Math.max(t.end,l.end));return n}function c(r,i){return!(r.end=0;let m;const _=r.split(o);if(_.length>1)for(const f of _){const{pathNormalized:v,normalized:y,normalizedLowercase:L}=a(f);y&&(m||(m=[]),m.push({original:f,originalLowercase:f.toLowerCase(),pathNormalized:v,normalized:y,normalizedLowercase:L}))}return{original:r,originalLowercase:i,pathNormalized:n,normalized:t,normalizedLowercase:l,values:m,containsPathSeparator:h}}e.prepareQuery=s;function a(r){let i;M.isWindows?i=r.replace(/\//g,N.sep):i=r.replace(/\\/g,N.sep);const n=w.stripWildcards(i).replace(/\s/g,"");return{pathNormalized:i,normalized:n,normalizedLowercase:n.toLowerCase()}}function u(r){return Array.isArray(r)?s(r.map(i=>i.original).join(o)):s(r.original)}e.pieceToQuery=u}),define(Q[198],J([0,1,8,152,72,51,15]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.isRelativePattern=e.parse=e.match=e.splitGlobAware=void 0;const C="**",d="/",g="[/\\\\]",p="[^/\\\\]",c=/\//g;function o(R){switch(R){case 0:return"";case 1:return`${p}*?`;default:return`(?:${g}|${p}+${g}|${g}${p}+)*?`}}function s(R,W){if(!R)return[];const x=[];let K=!1,Y=!1,ee="";for(const se of R){switch(se){case W:if(!K&&!Y){x.push(ee),ee="";continue}break;case"{":K=!0;break;case"}":K=!1;break;case"[":Y=!0;break;case"]":Y=!1;break}ee+=se}return ee&&x.push(ee),x}e.splitGlobAware=s;function a(R){if(!R)return"";let W="";const x=s(R,d);if(x.every(K=>K===C))W=".*";else{let K=!1;x.forEach((Y,ee)=>{if(Y===C){K||(W+=o(2),K=!0);return}let se=!1,ne="",le=!1,X="";for(const z of Y){if(z!=="}"&&se){ne+=z;continue}if(le&&(z!=="]"||!X)){let P;z==="-"?P=z:(z==="^"||z==="!")&&!X?P="^":z===d?P="":P=b.escapeRegExpCharacters(z),X+=P;continue}switch(z){case"{":se=!0;continue;case"[":le=!0;continue;case"}":W+=`(?:${s(ne,",").map(U=>a(U)).join("|")})`,se=!1,ne="";break;case"]":W+="["+X+"]",le=!1,X="";break;case"?":W+=p;continue;case"*":W+=o(1);continue;default:W+=b.escapeRegExpCharacters(z)}}eef(ne,W)).filter(ne=>ne!==_),R),K=x.length;if(!K)return _;if(K===1)return x[0];const Y=function(ne,le){for(let X=0,z=x.length;X!!ne.allBasenames);ee&&(Y.allBasenames=ee.allBasenames);const se=x.reduce((ne,le)=>le.allPaths?ne.concat(le.allPaths):ne,[]);return se.length&&(Y.allPaths=se),Y}function k(R,W,x){const K=M.sep===M.posix.sep,Y=K?R:R.replace(c,M.sep),ee=M.sep+Y,se=M.posix.sep+R,ne=x?function(le,X){return typeof le=="string"&&(le===Y||le.endsWith(ee)||!K&&(le===R||le.endsWith(se)))?W:null}:function(le,X){return typeof le=="string"&&(le===Y||!K&&le===R)?W:null};return ne.allPaths=[(x?"*/":"./")+R],ne}function E(R){try{const W=new RegExp(`^${a(R)}$`);return function(x){return W.lastIndex=0,typeof x=="string"&&W.test(x)?R:null}}catch(W){return _}}function T(R,W,x){return!R||typeof W!="string"?!1:O(R)(W,void 0,x)}e.match=T;function O(R,W={}){if(!R)return m;if(typeof R=="string"||A(R)){const x=f(R,W);if(x===_)return m;const K=function(Y,ee){return!!x(Y,ee)};return x.allBasenames&&(K.allBasenames=x.allBasenames),x.allPaths&&(K.allPaths=x.allPaths),K}return B(R,W)}e.parse=O;function A(R){const W=R;return W&&typeof W.base=="string"&&typeof W.pattern=="string"}e.isRelativePattern=A;function B(R,W){const x=D(Object.getOwnPropertyNames(R).map(ne=>F(ne,R[ne],W)).filter(ne=>ne!==_)),K=x.length;if(!K)return _;if(!x.some(ne=>!!ne.requiresSiblings)){if(K===1)return x[0];const ne=function(z,P){for(let V=0,U=x.length;V!!z.allBasenames);le&&(ne.allBasenames=le.allBasenames);const X=x.reduce((z,P)=>P.allPaths?z.concat(P.allPaths):z,[]);return X.length&&(ne.allPaths=X),ne}const Y=function(ne,le,X){let z;for(let P=0,V=x.length;P!!ne.allBasenames);ee&&(Y.allBasenames=ee.allBasenames);const se=x.reduce((ne,le)=>le.allPaths?ne.concat(le.allPaths):ne,[]);return se.length&&(Y.allPaths=se),Y}function F(R,W,x){if(W===!1)return _;const K=f(R,x);if(K===_)return _;if(typeof W=="boolean")return K;if(W){const Y=W.when;if(typeof Y=="string"){const ee=(se,ne,le,X)=>{if(!X||!K(se,ne))return null;const z=Y.replace("$(basename)",le),P=X(z);return S.isThenable(P)?P.then(V=>V?R:null):P?R:null};return ee.requiresSiblings=!0,ee}}return K}function D(R,W){const x=R.filter(ne=>!!ne.basenames);if(x.length<2)return R;const K=x.reduce((ne,le)=>{const X=le.basenames;return X?ne.concat(X):ne},[]);let Y;if(W){Y=[];for(let ne=0,le=K.length;ne{const X=le.patterns;return X?ne.concat(X):ne},[]);const ee=function(ne,le){if(typeof ne!="string")return null;if(!le){let z;for(z=ne.length;z>0;z--){const P=ne.charCodeAt(z-1);if(P===47||P===92)break}le=ne.substr(z)}const X=K.indexOf(le);return X!==-1?Y[X]:null};ee.basenames=K,ee.patterns=Y,ee.allBasenames=K;const se=R.filter(ne=>!ne.basenames);return se.push(ee),se}}),define(Q[102],J([0,1,27,66,8]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.matchesFuzzyIconAware=e.parseLabelWithIcons=e.stripIcons=e.markdownEscapeEscapedIcons=e.escapeIcons=e.iconStartMarker=void 0,e.iconStartMarker="$(";const w=new RegExp(`\\$\\(${b.CSSIcon.iconNameExpression}(?:${b.CSSIcon.iconModifierExpression})?\\)`,"g"),S=new RegExp(`(\\\\)?${w.source}`,"g");function C(u){return u.replace(S,(r,i)=>i?r:`\\${r}`)}e.escapeIcons=C;const d=new RegExp(`\\\\${w.source}`,"g");function g(u){return u.replace(d,r=>`\\${r}`)}e.markdownEscapeEscapedIcons=g;const p=new RegExp(`(\\s)?(\\\\)?${w.source}(\\s)?`,"g");function c(u){return u.indexOf(e.iconStartMarker)===-1?u:u.replace(p,(r,i,n,t)=>n?r:i||t||"")}e.stripIcons=c;function o(u){const r=u.indexOf(e.iconStartMarker);return r===-1?{text:u}:s(u,r)}e.parseLabelWithIcons=o;function s(u,r){const i=[];let n="";function t(L){if(L){n+=L;for(const I of L)i.push(m)}}let l=-1,h="",m=0,_,f,v=r;const y=u.length;for(t(u.substr(0,r));v" ".repeat(i.length)).replace(/^>/gm,"\\>").replace(/\n/g,u===1?`\\ +`:` + +`),this}appendMarkdown(a){return this.value+=a,this}appendCodeblock(a,u){return this.value+="\n```",this.value+=a,this.value+=` +`,this.value+=u,this.value+="\n```\n",this}}e.MarkdownString=w;function S(s){return C(s)?!s.value:Array.isArray(s)?s.every(S):!0}e.isEmptyMarkdownString=S;function C(s){return s instanceof w?!0:s&&typeof s=="object"?typeof s.value=="string"&&(typeof s.isTrusted=="boolean"||s.isTrusted===void 0)&&(typeof s.supportThemeIcons=="boolean"||s.supportThemeIcons===void 0):!1}e.isMarkdownString=C;function d(s,a){return!s&&!a?!0:!s||!a?!1:Array.isArray(s)&&Array.isArray(a)?b.equals(s,a,g):C(s)&&C(a)?g(s,a):!1}e.markedStringsEquals=d;function g(s,a){return s===a?!0:!s||!a?!1:s.value===a.value&&s.isTrusted===a.isTrusted&&s.supportThemeIcons===a.supportThemeIcons}function p(s){return s.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")}e.escapeMarkdownSyntaxTokens=p;function c(s){return s&&s.replace(/\\([\\`*_{}[\]()#+\-.!])/g,"$1")}e.removeMarkdownEscapes=c;function o(s){const a=[],u=s.split("|").map(i=>i.trim());s=u[0];const r=u[1];if(r){const i=/height=(\d+)/.exec(r),n=/width=(\d+)/.exec(r),t=i?i[1]:"",l=n?n[1]:"",h=isFinite(parseInt(l)),m=isFinite(parseInt(t));h&&a.push(`width="${l}"`),m&&a.push(`height="${t}"`)}return{href:s,dimensions:a}}e.parseHrefAndDimensions=o}),define(Q[199],J([0,1,101,24]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.revive=e.parse=void 0;function M(S){let C=JSON.parse(S);return C=w(C),C}e.parse=M;function w(S,C=0){if(!S||C>200)return S;if(typeof S=="object"){switch(S.$mid){case 1:return N.URI.revive(S);case 2:return new RegExp(S.source,S.flags)}if(S instanceof b.VSBuffer||S instanceof Uint8Array)return S;if(Array.isArray(S))for(let d=0;d{let ve=pe.relatedTarget;for(;ve&&ve!==de;)ve=ve.parentNode;ve!==de&&ge(pe)})}e.addDisposableNonBubblingMouseOutListener=_;function f(de,ge){return r(de,"pointerout",pe=>{let ve=pe.relatedTarget;for(;ve&&ve!==de;)ve=ve.parentNode;ve!==de&&ge(pe)})}e.addDisposableNonBubblingPointerOutListener=f;let v=null;function y(de){if(!v){const ge=pe=>setTimeout(()=>pe(new Date().getTime()),0);v=self.requestAnimationFrame||self.msRequestAnimationFrame||self.webkitRequestAnimationFrame||self.mozRequestAnimationFrame||self.oRequestAnimationFrame||ge}return v.call(self,de)}class L{constructor(ge,pe=0){this._runner=ge,this.priority=pe,this._canceled=!1}dispose(){this._canceled=!0}execute(){if(!this._canceled)try{this._runner()}catch(ge){C.onUnexpectedError(ge)}}static sort(ge,pe){return pe.priority-ge.priority}}(function(){let de=[],ge=null,pe=!1,ve=!1,ke=()=>{for(pe=!1,ge=de,de=[],ve=!0;ge.length>0;)ge.sort(L.sort),ge.shift().execute();ve=!1};e.scheduleAtNextAnimationFrame=(Ne,Te=0)=>{let Oe=new L(Ne,Te);return de.push(Oe),pe||(pe=!0,y(ke)),Oe},e.runAtThisOrScheduleAtNextAnimationFrame=(Ne,Te)=>{if(ve){let Oe=new L(Ne,Te);return ge.push(Oe),Oe}else return e.scheduleAtNextAnimationFrame(Ne,Te)}})();const I=8,k=function(de,ge){return ge};class E extends g.Disposable{constructor(ge,pe,ve,ke=k,Ne=I){super();let Te=null,Oe=0,Fe=this._register(new S.TimeoutTimer),Pe=()=>{Oe=new Date().getTime(),ve(Te),Te=null};this._register(r(ge,pe,xe=>{Te=ke(Te,xe);let We=new Date().getTime()-Oe;We>=Ne?(Fe.cancel(),Pe()):Fe.setIfNotSet(Pe,Ne-We)}))}}function T(de,ge,pe,ve,ke){return new E(de,ge,pe,ve,ke)}e.addDisposableThrottledListener=T;function O(de){return document.defaultView.getComputedStyle(de,null)}e.getComputedStyle=O;function A(de){if(de!==document.body)return new F(de.clientWidth,de.clientHeight);if(p.isIOS&&window.visualViewport){const ge=window.visualViewport.width,pe=window.visualViewport.height-(b.isStandalone?20+4:0);return new F(ge,pe)}if(window.innerWidth&&window.innerHeight)return new F(window.innerWidth,window.innerHeight);if(document.body&&document.body.clientWidth&&document.body.clientHeight)return new F(document.body.clientWidth,document.body.clientHeight);if(document.documentElement&&document.documentElement.clientWidth&&document.documentElement.clientHeight)return new F(document.documentElement.clientWidth,document.documentElement.clientHeight);throw new Error("Unable to figure out browser width and height")}e.getClientArea=A;class B{static convertToPixels(ge,pe){return parseFloat(pe)||0}static getDimension(ge,pe,ve){let ke=O(ge),Ne="0";return ke&&(ke.getPropertyValue?Ne=ke.getPropertyValue(pe):Ne=ke.getAttribute(ve)),B.convertToPixels(ge,Ne)}static getBorderLeftWidth(ge){return B.getDimension(ge,"border-left-width","borderLeftWidth")}static getBorderRightWidth(ge){return B.getDimension(ge,"border-right-width","borderRightWidth")}static getBorderTopWidth(ge){return B.getDimension(ge,"border-top-width","borderTopWidth")}static getBorderBottomWidth(ge){return B.getDimension(ge,"border-bottom-width","borderBottomWidth")}static getPaddingLeft(ge){return B.getDimension(ge,"padding-left","paddingLeft")}static getPaddingRight(ge){return B.getDimension(ge,"padding-right","paddingRight")}static getPaddingTop(ge){return B.getDimension(ge,"padding-top","paddingTop")}static getPaddingBottom(ge){return B.getDimension(ge,"padding-bottom","paddingBottom")}static getMarginLeft(ge){return B.getDimension(ge,"margin-left","marginLeft")}static getMarginTop(ge){return B.getDimension(ge,"margin-top","marginTop")}static getMarginRight(ge){return B.getDimension(ge,"margin-right","marginRight")}static getMarginBottom(ge){return B.getDimension(ge,"margin-bottom","marginBottom")}}class F{constructor(ge,pe){this.width=ge,this.height=pe}with(ge=this.width,pe=this.height){return ge!==this.width||pe!==this.height?new F(ge,pe):this}static is(ge){return typeof ge=="object"&&typeof ge.height=="number"&&typeof ge.width=="number"}static lift(ge){return ge instanceof F?ge:new F(ge.width,ge.height)}static equals(ge,pe){return ge===pe?!0:!ge||!pe?!1:ge.width===pe.width&&ge.height===pe.height}}e.Dimension=F;function D(de){let ge=de.offsetParent,pe=de.offsetTop,ve=de.offsetLeft;for(;(de=de.parentNode)!==null&&de!==document.body&&de!==document.documentElement;){pe-=de.scrollTop;const ke=X(de)?null:O(de);ke&&(ve-=ke.direction!=="rtl"?de.scrollLeft:-de.scrollLeft),de===ge&&(ve+=B.getBorderLeftWidth(de),pe+=B.getBorderTopWidth(de),pe+=de.offsetTop,ve+=de.offsetLeft,ge=de.offsetParent)}return{left:ve,top:pe}}e.getTopLeftOffset=D;function R(de,ge,pe){typeof ge=="number"&&(de.style.width=`${ge}px`),typeof pe=="number"&&(de.style.height=`${pe}px`)}e.size=R;function W(de){let ge=de.getBoundingClientRect();return{left:ge.left+e.StandardWindow.scrollX,top:ge.top+e.StandardWindow.scrollY,width:ge.width,height:ge.height}}e.getDomNodePagePosition=W,e.StandardWindow=new class{get scrollX(){return typeof window.scrollX=="number"?window.scrollX:document.body.scrollLeft+document.documentElement.scrollLeft}get scrollY(){return typeof window.scrollY=="number"?window.scrollY:document.body.scrollTop+document.documentElement.scrollTop}};function x(de){let ge=B.getMarginLeft(de)+B.getMarginRight(de);return de.offsetWidth+ge}e.getTotalWidth=x;function K(de){let ge=B.getBorderLeftWidth(de)+B.getBorderRightWidth(de),pe=B.getPaddingLeft(de)+B.getPaddingRight(de);return de.offsetWidth-ge-pe}e.getContentWidth=K;function Y(de){let ge=B.getBorderTopWidth(de)+B.getBorderBottomWidth(de),pe=B.getPaddingTop(de)+B.getPaddingBottom(de);return de.offsetHeight-ge-pe}e.getContentHeight=Y;function ee(de){let ge=B.getMarginTop(de)+B.getMarginBottom(de);return de.offsetHeight+ge}e.getTotalHeight=ee;function se(de,ge){for(;de;){if(de===ge)return!0;de=de.parentNode}return!1}e.isAncestor=se;function ne(de,ge,pe){for(;de&&de.nodeType===de.ELEMENT_NODE;){if(de.classList.contains(ge))return de;if(pe){if(typeof pe=="string"){if(de.classList.contains(pe))return null}else if(de===pe)return null}de=de.parentNode}return null}e.findParentWithClass=ne;function le(de,ge,pe){return!!ne(de,ge,pe)}e.hasParentWithClass=le;function X(de){return de&&!!de.host&&!!de.mode}e.isShadowRoot=X;function z(de){return!!P(de)}e.isInShadowDOM=z;function P(de){for(;de.parentNode;){if(de===document.body)return null;de=de.parentNode}return X(de)?de:null}e.getShadowRoot=P;function V(){let de=document.activeElement;for(;de==null?void 0:de.shadowRoot;)de=de.shadowRoot.activeElement;return de}e.getActiveElement=V;function U(de=document.getElementsByTagName("head")[0]){let ge=document.createElement("style");return ge.type="text/css",ge.media="screen",de.appendChild(ge),ge}e.createStyleSheet=U;let H=null;function $(){return H||(H=U()),H}function ie(de){var ge,pe;return((ge=de==null?void 0:de.sheet)===null||ge===void 0?void 0:ge.rules)?de.sheet.rules:((pe=de==null?void 0:de.sheet)===null||pe===void 0?void 0:pe.cssRules)?de.sheet.cssRules:[]}function oe(de,ge,pe=$()){!pe||!ge||pe.sheet.insertRule(de+"{"+ge+"}",0)}e.createCSSRule=oe;function ae(de,ge=$()){if(!!ge){let pe=ie(ge),ve=[];for(let ke=0;ke=0;ke--)ge.sheet.deleteRule(ve[ke])}}e.removeCSSRulesContainingSelector=ae;function G(de){return typeof HTMLElement=="object"?de instanceof HTMLElement:de&&typeof de=="object"&&de.nodeType===1&&typeof de.nodeName=="string"}e.isHTMLElement=G,e.EventType={CLICK:"click",AUXCLICK:"auxclick",DBLCLICK:"dblclick",MOUSE_UP:"mouseup",MOUSE_DOWN:"mousedown",MOUSE_OVER:"mouseover",MOUSE_MOVE:"mousemove",MOUSE_OUT:"mouseout",MOUSE_ENTER:"mouseenter",MOUSE_LEAVE:"mouseleave",MOUSE_WHEEL:"wheel",POINTER_UP:"pointerup",POINTER_DOWN:"pointerdown",POINTER_MOVE:"pointermove",CONTEXT_MENU:"contextmenu",WHEEL:"wheel",KEY_DOWN:"keydown",KEY_PRESS:"keypress",KEY_UP:"keyup",LOAD:"load",BEFORE_UNLOAD:"beforeunload",UNLOAD:"unload",ABORT:"abort",ERROR:"error",RESIZE:"resize",SCROLL:"scroll",FULLSCREEN_CHANGE:"fullscreenchange",WK_FULLSCREEN_CHANGE:"webkitfullscreenchange",SELECT:"select",CHANGE:"change",SUBMIT:"submit",RESET:"reset",FOCUS:"focus",FOCUS_IN:"focusin",FOCUS_OUT:"focusout",BLUR:"blur",INPUT:"input",STORAGE:"storage",DRAG_START:"dragstart",DRAG:"drag",DRAG_ENTER:"dragenter",DRAG_LEAVE:"dragleave",DRAG_OVER:"dragover",DROP:"drop",DRAG_END:"dragend",ANIMATION_START:b.isWebKit?"webkitAnimationStart":"animationstart",ANIMATION_END:b.isWebKit?"webkitAnimationEnd":"animationend",ANIMATION_ITERATION:b.isWebKit?"webkitAnimationIteration":"animationiteration"},e.EventHelper={stop:function(de,ge){de.preventDefault?de.preventDefault():de.returnValue=!1,ge&&(de.stopPropagation?de.stopPropagation():de.cancelBubble=!0)}};function j(de){let ge=[];for(let pe=0;de&&de.nodeType===de.ELEMENT_NODE;pe++)ge[pe]=de.scrollTop,de=de.parentNode;return ge}e.saveParentsScrollTop=j;function te(de,ge){for(let pe=0;de&&de.nodeType===de.ELEMENT_NODE;pe++)de.scrollTop!==ge[pe]&&(de.scrollTop=ge[pe]),de=de.parentNode}e.restoreParentsScrollTop=te;class Z extends g.Disposable{constructor(ge){super();this._onDidFocus=this._register(new d.Emitter),this.onDidFocus=this._onDidFocus.event,this._onDidBlur=this._register(new d.Emitter),this.onDidBlur=this._onDidBlur.event;let pe=se(document.activeElement,ge),ve=!1;const ke=()=>{ve=!1,pe||(pe=!0,this._onDidFocus.fire())},Ne=()=>{pe&&(ve=!0,window.setTimeout(()=>{ve&&(ve=!1,pe=!1,this._onDidBlur.fire())},0))};this._refreshStateHandler=()=>{se(document.activeElement,ge)!==pe&&(pe?Ne():ke())},this._register(N.domEvent(ge,e.EventType.FOCUS,!0)(ke)),this._register(N.domEvent(ge,e.EventType.BLUR,!0)(Ne))}}function ue(de){return new Z(de)}e.trackFocus=ue;function he(de,...ge){if(de.append(...ge),ge.length===1&&typeof ge[0]!="string")return ge[0]}e.append=he;function re(de,...ge){de.innerText="",he(de,...ge)}e.reset=re;const ce=/([\w\-]+)?(#([\w\-]+))?((\.([\w\-]+))*)/;var me;(function(de){de.HTML="http://www.w3.org/1999/xhtml",de.SVG="http://www.w3.org/2000/svg"})(me=e.Namespace||(e.Namespace={}));function Ce(de,ge,pe,...ve){let ke=ce.exec(ge);if(!ke)throw new Error("Bad use of emmet");pe=Object.assign({},pe||{});let Ne=ke[1]||"div",Te;return de!==me.HTML?Te=document.createElementNS(de,Ne):Te=document.createElement(Ne),ke[3]&&(Te.id=ke[3]),ke[4]&&(Te.className=ke[4].replace(/\./g," ").trim()),Object.keys(pe).forEach(Oe=>{const Fe=pe[Oe];typeof Fe!="undefined"&&(/^on\w+$/.test(Oe)?Te[Oe]=Fe:Oe==="selected"?Fe&&Te.setAttribute(Oe,"true"):Te.setAttribute(Oe,Fe))}),Te.append(...ve),Te}function be(de,ge,...pe){return Ce(me.HTML,de,ge,...pe)}e.$=be,be.SVG=function(de,ge,...pe){return Ce(me.SVG,de,ge,...pe)};function Le(...de){for(let ge of de)ge.style.display="",ge.removeAttribute("aria-hidden")}e.show=Le;function De(...de){for(let ge of de)ge.style.display="none",ge.setAttribute("aria-hidden","true")}e.hide=De;function Re(de){return Array.prototype.slice.call(document.getElementsByTagName(de),0)}e.getElementsByTagName=Re;function Ee(de){const ge=window.devicePixelRatio*de;return Math.max(1,Math.floor(ge))/window.devicePixelRatio}e.computeScreenAwareSize=Ee;function Ae(de){if(b.isElectron||b.isEdgeLegacyWebView)window.open(de);else{let ge=window.open();ge&&(ge.opener=null,ge.location.href=de)}}e.windowOpenNoOpener=Ae;function Se(de){const ge=()=>{de(),pe=e.scheduleAtNextAnimationFrame(ge)};let pe=e.scheduleAtNextAnimationFrame(ge);return g.toDisposable(()=>pe.dispose())}e.animate=Se,c.RemoteAuthorities.setPreferredWebSchema(/^https:/.test(window.location.href)?"https":"http");function we(de){return de?`url('${c.FileAccess.asBrowserUri(de).toString(!0).replace(/'/g,"%27")}')`:"url('')"}e.asCSSUrl=we;function ye(de){return`'${de.replace(/'/g,"%27")}'`}e.asCSSPropertyValue=ye;class fe extends d.Emitter{constructor(){super();this._subscriptions=new g.DisposableStore,this._keyStatus={altKey:!1,shiftKey:!1,ctrlKey:!1,metaKey:!1},this._subscriptions.add(N.domEvent(window,"keydown",!0)(ge=>{const pe=new M.StandardKeyboardEvent(ge);if(!(pe.keyCode===6&&ge.repeat)){if(ge.altKey&&!this._keyStatus.altKey)this._keyStatus.lastKeyPressed="alt";else if(ge.ctrlKey&&!this._keyStatus.ctrlKey)this._keyStatus.lastKeyPressed="ctrl";else if(ge.metaKey&&!this._keyStatus.metaKey)this._keyStatus.lastKeyPressed="meta";else if(ge.shiftKey&&!this._keyStatus.shiftKey)this._keyStatus.lastKeyPressed="shift";else if(pe.keyCode!==6)this._keyStatus.lastKeyPressed=void 0;else return;this._keyStatus.altKey=ge.altKey,this._keyStatus.ctrlKey=ge.ctrlKey,this._keyStatus.metaKey=ge.metaKey,this._keyStatus.shiftKey=ge.shiftKey,this._keyStatus.lastKeyPressed&&(this._keyStatus.event=ge,this.fire(this._keyStatus))}})),this._subscriptions.add(N.domEvent(window,"keyup",!0)(ge=>{!ge.altKey&&this._keyStatus.altKey?this._keyStatus.lastKeyReleased="alt":!ge.ctrlKey&&this._keyStatus.ctrlKey?this._keyStatus.lastKeyReleased="ctrl":!ge.metaKey&&this._keyStatus.metaKey?this._keyStatus.lastKeyReleased="meta":!ge.shiftKey&&this._keyStatus.shiftKey?this._keyStatus.lastKeyReleased="shift":this._keyStatus.lastKeyReleased=void 0,this._keyStatus.lastKeyPressed!==this._keyStatus.lastKeyReleased&&(this._keyStatus.lastKeyPressed=void 0),this._keyStatus.altKey=ge.altKey,this._keyStatus.ctrlKey=ge.ctrlKey,this._keyStatus.metaKey=ge.metaKey,this._keyStatus.shiftKey=ge.shiftKey,this._keyStatus.lastKeyReleased&&(this._keyStatus.event=ge,this.fire(this._keyStatus))})),this._subscriptions.add(N.domEvent(document.body,"mousedown",!0)(ge=>{this._keyStatus.lastKeyPressed=void 0})),this._subscriptions.add(N.domEvent(document.body,"mouseup",!0)(ge=>{this._keyStatus.lastKeyPressed=void 0})),this._subscriptions.add(N.domEvent(document.body,"mousemove",!0)(ge=>{ge.buttons&&(this._keyStatus.lastKeyPressed=void 0)})),this._subscriptions.add(N.domEvent(window,"blur")(ge=>{this.resetKeyStatus()}))}get keyStatus(){return this._keyStatus}resetKeyStatus(){this.doResetKeyStatus(),this.fire(this._keyStatus)}doResetKeyStatus(){this._keyStatus={altKey:!1,shiftKey:!1,ctrlKey:!1,metaKey:!1}}static getInstance(){return fe.instance||(fe.instance=new fe),fe.instance}dispose(){super.dispose(),this._subscriptions.dispose()}}e.ModifierKeyEmitter=fe}),define(Q[156],J([0,1,7]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.createElement=e.renderFormattedText=e.renderText=void 0;function N(c,o={}){const s=w(o);return s.textContent=c,s}e.renderText=N;function M(c,o={}){const s=w(o);return C(s,d(c),o.actionHandler),s}e.renderFormattedText=M;function w(c){const o=c.inline?"span":"div",s=document.createElement(o);return c.className&&(s.className=c.className),s}e.createElement=w;class S{constructor(o){this.source=o,this.index=0}eos(){return this.index>=this.source.length}next(){const o=this.peek();return this.advance(),o}peek(){return this.source[this.index]}advance(){this.index++}}function C(c,o,s){let a;if(o.type===2)a=document.createTextNode(o.content||"");else if(o.type===3)a=document.createElement("b");else if(o.type===4)a=document.createElement("i");else if(o.type===5&&s){const u=document.createElement("a");u.href="#",s.disposeables.add(b.addStandardDisposableListener(u,"click",r=>{s.callback(String(o.index),r)})),a=u}else o.type===7?a=document.createElement("br"):o.type===1&&(a=c);a&&c!==a&&c.appendChild(a),a&&Array.isArray(o.children)&&o.children.forEach(u=>{C(a,u,s)})}function d(c){const o={type:1,children:[]};let s=0,a=o;const u=[],r=new S(c);for(;!r.eos();){let i=r.next();const n=i==="\\"&&p(r.peek())!==0;if(n&&(i=r.next()),!n&&g(i)&&i===r.peek()){r.advance(),a.type===2&&(a=u.pop());const t=p(i);if(a.type===t||a.type===5&&t===6)a=u.pop();else{const l={type:t,children:[]};t===5&&(l.index=s,s++),a.children.push(l),u.push(a),a=l}}else if(i===` +`)a.type===2&&(a=u.pop()),a.children.push({type:7});else if(a.type!==2){const t={type:2,content:i};a.children.push(t),u.push(a),a=t}else a.content+=i}return a.type===2&&(a=u.pop()),u.length,o}function g(c){return p(c)!==0}function p(c){switch(c){case"*":return 3;case"_":return 4;case"[":return 5;case"]":return 6;default:return 0}}}),define(Q[90],J([0,1,7,193,50,2]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.GlobalMouseMoveMonitor=e.standardMouseMoveMerger=void 0;function S(d,g){let p=new M.StandardMouseEvent(g);return p.preventDefault(),{leftButton:p.leftButton,buttons:p.buttons,posx:p.posx,posy:p.posy}}e.standardMouseMoveMerger=S;class C{constructor(){this._hooks=new w.DisposableStore,this._mouseMoveEventMerger=null,this._mouseMoveCallback=null,this._onStopCallback=null}dispose(){this.stopMonitoring(!1),this._hooks.dispose()}stopMonitoring(g,p){if(!!this.isMonitoring()){this._hooks.clear(),this._mouseMoveEventMerger=null,this._mouseMoveCallback=null;const c=this._onStopCallback;this._onStopCallback=null,g&&c&&c(p)}}isMonitoring(){return!!this._mouseMoveEventMerger}startMonitoring(g,p,c,o,s){if(!this.isMonitoring()){this._mouseMoveEventMerger=c,this._mouseMoveCallback=o,this._onStopCallback=s;const a=N.IframeUtils.getSameOriginWindowChain(),u="mousemove",r="mouseup",i=a.map(t=>t.window.document),n=b.getShadowRoot(g);n&&i.unshift(n);for(const t of i)this._hooks.add(b.addDisposableThrottledListener(t,u,l=>{if(l.buttons!==p){this.stopMonitoring(!0);return}this._mouseMoveCallback(l)},(l,h)=>this._mouseMoveEventMerger(l,h))),this._hooks.add(b.addDisposableListener(t,r,l=>this.stopMonitoring(!0)));if(N.IframeUtils.hasDifferentOriginAncestor()){let t=a[a.length-1];this._hooks.add(b.addDisposableListener(t.window.document,"mouseout",l=>{new M.StandardMouseEvent(l).target.tagName.toLowerCase()==="html"&&this.stopMonitoring(!0)})),this._hooks.add(b.addDisposableListener(t.window.document,"mouseover",l=>{new M.StandardMouseEvent(l).target.tagName.toLowerCase()==="html"&&this.stopMonitoring(!0)})),this._hooks.add(b.addDisposableListener(t.window.document.body,"mouseleave",l=>{this.stopMonitoring(!0)}))}}}}e.GlobalMouseMoveMonitor=C});var Me=this&&this.__decorate||function(q,e,b,N){var M=arguments.length,w=M<3?e:N===null?N=Object.getOwnPropertyDescriptor(e,b):N,S;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")w=Reflect.decorate(q,e,b,N);else for(var C=q.length-1;C>=0;C--)(S=q[C])&&(w=(M<3?S(w):M>3?S(e,b,w):S(e,b))||w);return M>3&&w&&Object.defineProperty(e,b,w),w};define(Q[60],J([0,1,19,2,7,99]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Gesture=e.EventType=void 0;var S;(function(d){d.Tap="-monaco-gesturetap",d.Change="-monaco-gesturechange",d.Start="-monaco-gesturestart",d.End="-monaco-gesturesend",d.Contextmenu="-monaco-gesturecontextmenu"})(S=e.EventType||(e.EventType={}));class C extends N.Disposable{constructor(){super();this.dispatched=!1,this.activeTouches={},this.handle=null,this.targets=[],this.ignoreTargets=[],this._lastSetTapCountTime=0,this._register(M.addDisposableListener(document,"touchstart",g=>this.onTouchStart(g),{passive:!1})),this._register(M.addDisposableListener(document,"touchend",g=>this.onTouchEnd(g))),this._register(M.addDisposableListener(document,"touchmove",g=>this.onTouchMove(g),{passive:!1}))}static addTarget(g){return C.isTouchDevice()?(C.INSTANCE||(C.INSTANCE=new C),C.INSTANCE.targets.push(g),{dispose:()=>{C.INSTANCE.targets=C.INSTANCE.targets.filter(p=>p!==g)}}):N.Disposable.None}static ignoreTarget(g){return C.isTouchDevice()?(C.INSTANCE||(C.INSTANCE=new C),C.INSTANCE.ignoreTargets.push(g),{dispose:()=>{C.INSTANCE.ignoreTargets=C.INSTANCE.ignoreTargets.filter(p=>p!==g)}}):N.Disposable.None}static isTouchDevice(){return"ontouchstart"in window||navigator.maxTouchPoints>0||window.navigator.msMaxTouchPoints>0}dispose(){this.handle&&(this.handle.dispose(),this.handle=null),super.dispose()}onTouchStart(g){let p=Date.now();this.handle&&(this.handle.dispose(),this.handle=null);for(let c=0,o=g.targetTouches.length;c=C.HOLD_DELAY&&Math.abs(u.initialPageX-b.tail(u.rollingPageX))<30&&Math.abs(u.initialPageY-b.tail(u.rollingPageY))<30){let i=this.newGestureEvent(S.Contextmenu,u.initialTarget);i.pageX=b.tail(u.rollingPageX),i.pageY=b.tail(u.rollingPageY),this.dispatchEvent(i)}else if(c===1){let i=b.tail(u.rollingPageX),n=b.tail(u.rollingPageY),t=b.tail(u.rollingTimestamps)-u.rollingTimestamps[0],l=i-u.rollingPageX[0],h=n-u.rollingPageY[0];const m=this.targets.filter(_=>u.initialTarget instanceof Node&&_.contains(u.initialTarget));this.inertia(m,p,Math.abs(l)/t,l>0?1:-1,i,Math.abs(h)/t,h>0?1:-1,n)}this.dispatchEvent(this.newGestureEvent(S.End,u.initialTarget)),delete this.activeTouches[a.identifier]}this.dispatched&&(g.preventDefault(),g.stopPropagation(),this.dispatched=!1)}newGestureEvent(g,p){let c=document.createEvent("CustomEvent");return c.initEvent(g,!1,!0),c.initialTarget=p,c.tapCount=0,c}dispatchEvent(g){if(g.type===S.Tap){const p=new Date().getTime();let c=0;p-this._lastSetTapCountTime>C.CLEAR_TAP_COUNT_TIME?c=1:c=2,this._lastSetTapCountTime=p,g.tapCount=c}else(g.type===S.Change||g.type===S.Contextmenu)&&(this._lastSetTapCountTime=0);for(let p=0;p{g.initialTarget instanceof Node&&p.contains(g.initialTarget)&&(p.dispatchEvent(g),this.dispatched=!0)})}inertia(g,p,c,o,s,a,u,r){this.handle=M.scheduleAtNextAnimationFrame(()=>{let i=Date.now(),n=i-p,t=0,l=0,h=!0;c+=C.SCROLL_FRICTION*n,a+=C.SCROLL_FRICTION*n,c>0&&(h=!1,t=o*c*n),a>0&&(h=!1,l=u*a*n);let m=this.newGestureEvent(S.Change);m.translationX=t,m.translationY=l,g.forEach(_=>_.dispatchEvent(m)),h||this.inertia(g,i,c,o,s+t,a,u,r+l)})}onTouchMove(g){let p=Date.now();for(let c=0,o=g.changedTouches.length;c3&&(a.rollingPageX.shift(),a.rollingPageY.shift(),a.rollingTimestamps.shift()),a.rollingPageX.push(s.pageX),a.rollingPageY.push(s.pageY),a.rollingTimestamps.push(p)}this.dispatched&&(g.preventDefault(),g.stopPropagation(),this.dispatched=!1)}}C.SCROLL_FRICTION=-.005,C.HOLD_DELAY=700,C.CLEAR_TAP_COUNT_TIME=400,Me([w.memoize],C,"isTouchDevice",null),e.Gesture=C}),define(Q[103],J([0,1,7,27]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.renderIcon=e.renderLabelWithIcons=void 0;const M=new RegExp(`(\\\\)?\\$\\((${N.CSSIcon.iconNameExpression}(?:${N.CSSIcon.iconModifierExpression})?)\\)`,"g");function w(C){const d=new Array;let g,p=0,c=0;for(;(g=M.exec(C))!==null;){c=g.index||0,d.push(C.substring(p,c)),p=(g.index||0)+g[0].length;const[,o,s]=g;d.push(o?`$(${s})`:S({id:s}))}return p{p=c===`\r +`?-1:0,o+=g;for(const s of d)s.end<=o||(s.start>=o&&(s.start+=p),s.end>=o&&(s.end+=p));return g+=p,"\u23CE"})}}e.HighlightedLabel=w}),define(Q[287],J([0,1,7]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.RowCache=void 0;function N(w){try{w.parentElement&&w.parentElement.removeChild(w)}catch(S){}}class M{constructor(S){this.renderers=S,this.cache=new Map}alloc(S){let C=this.getTemplateCache(S).pop();if(!C){const d=b.$(".monaco-list-row"),p=this.getRenderer(S).renderTemplate(d);C={domNode:d,templateId:S,templateData:p}}return C}release(S){!S||this.releaseRow(S)}releaseRow(S){const{domNode:C,templateId:d}=S;C&&(C.classList.remove("scrolling"),N(C)),this.getTemplateCache(d).push(S)}getTemplateCache(S){let C=this.cache.get(S);return C||(C=[],this.cache.set(S,C)),C}dispose(){this.cache.forEach((S,C)=>{for(const d of S)this.getRenderer(C).disposeTemplate(d.templateData),d.templateData=null}),this.cache.clear()}getRenderer(S){const C=this.renderers.get(S);if(!C)throw new Error(`No renderer found for ${S}`);return C}}e.RowCache=M}),define(Q[52],J([0,1,7,56,50,2,60]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Widget=void 0;class C extends w.Disposable{onclick(g,p){this._register(b.addDisposableListener(g,b.EventType.CLICK,c=>p(new M.StandardMouseEvent(c))))}onmousedown(g,p){this._register(b.addDisposableListener(g,b.EventType.MOUSE_DOWN,c=>p(new M.StandardMouseEvent(c))))}onmouseover(g,p){this._register(b.addDisposableListener(g,b.EventType.MOUSE_OVER,c=>p(new M.StandardMouseEvent(c))))}onnonbubblingmouseout(g,p){this._register(b.addDisposableNonBubblingMouseOutListener(g,c=>p(new M.StandardMouseEvent(c))))}onkeydown(g,p){this._register(b.addDisposableListener(g,b.EventType.KEY_DOWN,c=>p(new N.StandardKeyboardEvent(c))))}onkeyup(g,p){this._register(b.addDisposableListener(g,b.EventType.KEY_UP,c=>p(new N.StandardKeyboardEvent(c))))}oninput(g,p){this._register(b.addDisposableListener(g,b.EventType.INPUT,p))}onblur(g,p){this._register(b.addDisposableListener(g,b.EventType.BLUR,p))}onfocus(g,p){this._register(b.addDisposableListener(g,b.EventType.FOCUS,p))}ignoreGesture(g){S.Gesture.ignoreTarget(g)}}e.Widget=C}),define(Q[158],J([0,1,90,52,15]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ScrollbarArrow=e.ARROW_IMG_SIZE=void 0,e.ARROW_IMG_SIZE=11;class w extends N.Widget{constructor(C){super();this._onActivate=C.onActivate,this.bgDomNode=document.createElement("div"),this.bgDomNode.className="arrow-background",this.bgDomNode.style.position="absolute",this.bgDomNode.style.width=C.bgWidth+"px",this.bgDomNode.style.height=C.bgHeight+"px",typeof C.top!="undefined"&&(this.bgDomNode.style.top="0px"),typeof C.left!="undefined"&&(this.bgDomNode.style.left="0px"),typeof C.bottom!="undefined"&&(this.bgDomNode.style.bottom="0px"),typeof C.right!="undefined"&&(this.bgDomNode.style.right="0px"),this.domNode=document.createElement("div"),this.domNode.className=C.className,this.domNode.classList.add(...C.icon.classNamesArray),this.domNode.style.position="absolute",this.domNode.style.width=e.ARROW_IMG_SIZE+"px",this.domNode.style.height=e.ARROW_IMG_SIZE+"px",typeof C.top!="undefined"&&(this.domNode.style.top=C.top+"px"),typeof C.left!="undefined"&&(this.domNode.style.left=C.left+"px"),typeof C.bottom!="undefined"&&(this.domNode.style.bottom=C.bottom+"px"),typeof C.right!="undefined"&&(this.domNode.style.right=C.right+"px"),this._mouseMoveMonitor=this._register(new b.GlobalMouseMoveMonitor),this.onmousedown(this.bgDomNode,d=>this._arrowMouseDown(d)),this.onmousedown(this.domNode,d=>this._arrowMouseDown(d)),this._mousedownRepeatTimer=this._register(new M.IntervalTimer),this._mousedownScheduleRepeatTimer=this._register(new M.TimeoutTimer)}_arrowMouseDown(C){const d=()=>{this._mousedownRepeatTimer.cancelAndSet(()=>this._onActivate(),1e3/24)};this._onActivate(),this._mousedownRepeatTimer.cancel(),this._mousedownScheduleRepeatTimer.cancelAndSet(d,200),this._mouseMoveMonitor.startMonitoring(C.target,C.buttons,b.standardMouseMoveMerger,g=>{},()=>{this._mousedownRepeatTimer.cancel(),this._mousedownScheduleRepeatTimer.cancel()}),C.preventDefault()}}e.ScrollbarArrow=w}),define(Q[200],J([0,1,7,30,90,158,282,52,17]),function(q,e,b,N,M,w,S,C,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractScrollbar=void 0;const g=140;class p extends C.Widget{constructor(o){super();this._lazyRender=o.lazyRender,this._host=o.host,this._scrollable=o.scrollable,this._scrollByPage=o.scrollByPage,this._scrollbarState=o.scrollbarState,this._visibilityController=this._register(new S.ScrollbarVisibilityController(o.visibility,"visible scrollbar "+o.extraScrollbarClassName,"invisible scrollbar "+o.extraScrollbarClassName)),this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._mouseMoveMonitor=this._register(new M.GlobalMouseMoveMonitor),this._shouldRender=!0,this.domNode=N.createFastDomNode(document.createElement("div")),this.domNode.setAttribute("role","presentation"),this.domNode.setAttribute("aria-hidden","true"),this._visibilityController.setDomNode(this.domNode),this.domNode.setPosition("absolute"),this.onmousedown(this.domNode.domNode,s=>this._domNodeMouseDown(s))}_createArrow(o){const s=this._register(new w.ScrollbarArrow(o));this.domNode.domNode.appendChild(s.bgDomNode),this.domNode.domNode.appendChild(s.domNode)}_createSlider(o,s,a,u){this.slider=N.createFastDomNode(document.createElement("div")),this.slider.setClassName("slider"),this.slider.setPosition("absolute"),this.slider.setTop(o),this.slider.setLeft(s),typeof a=="number"&&this.slider.setWidth(a),typeof u=="number"&&this.slider.setHeight(u),this.slider.setLayerHinting(!0),this.slider.setContain("strict"),this.domNode.domNode.appendChild(this.slider.domNode),this.onmousedown(this.slider.domNode,r=>{r.leftButton&&(r.preventDefault(),this._sliderMouseDown(r,()=>{}))}),this.onclick(this.slider.domNode,r=>{r.leftButton&&r.stopPropagation()})}_onElementSize(o){return this._scrollbarState.setVisibleSize(o)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_onElementScrollSize(o){return this._scrollbarState.setScrollSize(o)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_onElementScrollPosition(o){return this._scrollbarState.setScrollPosition(o)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}beginReveal(){this._visibilityController.setShouldBeVisible(!0)}beginHide(){this._visibilityController.setShouldBeVisible(!1)}render(){!this._shouldRender||(this._shouldRender=!1,this._renderDomNode(this._scrollbarState.getRectangleLargeSize(),this._scrollbarState.getRectangleSmallSize()),this._updateSlider(this._scrollbarState.getSliderSize(),this._scrollbarState.getArrowSize()+this._scrollbarState.getSliderPosition()))}_domNodeMouseDown(o){o.target===this.domNode.domNode&&this._onMouseDown(o)}delegateMouseDown(o){const s=this.domNode.domNode.getClientRects()[0].top,a=s+this._scrollbarState.getSliderPosition(),u=s+this._scrollbarState.getSliderPosition()+this._scrollbarState.getSliderSize(),r=this._sliderMousePosition(o);a<=r&&r<=u?o.leftButton&&(o.preventDefault(),this._sliderMouseDown(o,()=>{})):this._onMouseDown(o)}_onMouseDown(o){let s,a;if(o.target===this.domNode.domNode&&typeof o.browserEvent.offsetX=="number"&&typeof o.browserEvent.offsetY=="number")s=o.browserEvent.offsetX,a=o.browserEvent.offsetY;else{const r=b.getDomNodePagePosition(this.domNode.domNode);s=o.posx-r.left,a=o.posy-r.top}const u=this._mouseDownRelativePosition(s,a);this._setDesiredScrollPositionNow(this._scrollByPage?this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(u):this._scrollbarState.getDesiredScrollPositionFromOffset(u)),o.leftButton&&(o.preventDefault(),this._sliderMouseDown(o,()=>{}))}_sliderMouseDown(o,s){const a=this._sliderMousePosition(o),u=this._sliderOrthogonalMousePosition(o),r=this._scrollbarState.clone();this.slider.toggleClassName("active",!0),this._mouseMoveMonitor.startMonitoring(o.target,o.buttons,M.standardMouseMoveMerger,i=>{const n=this._sliderOrthogonalMousePosition(i),t=Math.abs(n-u);if(d.isWindows&&t>g){this._setDesiredScrollPositionNow(r.getScrollPosition());return}const h=this._sliderMousePosition(i)-a;this._setDesiredScrollPositionNow(r.getDesiredScrollPositionFromDelta(h))},()=>{this.slider.toggleClassName("active",!1),this._host.onDragEnd(),s()}),this._host.onDragStart()}_setDesiredScrollPositionNow(o){const s={};this.writeScrollPosition(s,o),this._scrollable.setScrollPositionNow(s)}updateScrollbarSize(o){this._updateScrollbarSize(o),this._scrollbarState.setScrollbarSize(o),this._shouldRender=!0,this._lazyRender||this.render()}isNeeded(){return this._scrollbarState.isNeeded()}}e.AbstractScrollbar=p}),define(Q[288],J([0,1,50,200,158,194,27]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.HorizontalScrollbar=void 0;const C=S.registerCodicon("scrollbar-button-left",S.Codicon.triangleLeft),d=S.registerCodicon("scrollbar-button-right",S.Codicon.triangleRight);class g extends N.AbstractScrollbar{constructor(c,o,s){const a=c.getScrollDimensions(),u=c.getCurrentScrollPosition();super({lazyRender:o.lazyRender,host:s,scrollbarState:new w.ScrollbarState(o.horizontalHasArrows?o.arrowSize:0,o.horizontal===2?0:o.horizontalScrollbarSize,o.vertical===2?0:o.verticalScrollbarSize,a.width,a.scrollWidth,u.scrollLeft),visibility:o.horizontal,extraScrollbarClassName:"horizontal",scrollable:c,scrollByPage:o.scrollByPage});if(o.horizontalHasArrows){const r=(o.arrowSize-M.ARROW_IMG_SIZE)/2,i=(o.horizontalScrollbarSize-M.ARROW_IMG_SIZE)/2;this._createArrow({className:"scra",icon:C,top:i,left:r,bottom:void 0,right:void 0,bgWidth:o.arrowSize,bgHeight:o.horizontalScrollbarSize,onActivate:()=>this._host.onMouseWheel(new b.StandardWheelEvent(null,1,0))}),this._createArrow({className:"scra",icon:d,top:i,left:void 0,bottom:void 0,right:r,bgWidth:o.arrowSize,bgHeight:o.horizontalScrollbarSize,onActivate:()=>this._host.onMouseWheel(new b.StandardWheelEvent(null,-1,0))})}this._createSlider(Math.floor((o.horizontalScrollbarSize-o.horizontalSliderSize)/2),0,void 0,o.horizontalSliderSize)}_updateSlider(c,o){this.slider.setWidth(c),this.slider.setLeft(o)}_renderDomNode(c,o){this.domNode.setWidth(c),this.domNode.setHeight(o),this.domNode.setLeft(0),this.domNode.setBottom(0)}onDidScroll(c){return this._shouldRender=this._onElementScrollSize(c.scrollWidth)||this._shouldRender,this._shouldRender=this._onElementScrollPosition(c.scrollLeft)||this._shouldRender,this._shouldRender=this._onElementSize(c.width)||this._shouldRender,this._shouldRender}_mouseDownRelativePosition(c,o){return c}_sliderMousePosition(c){return c.posx}_sliderOrthogonalMousePosition(c){return c.posy}_updateScrollbarSize(c){this.slider.setHeight(c)}writeScrollPosition(c,o){c.scrollLeft=o}}e.HorizontalScrollbar=g}),define(Q[289],J([0,1,50,200,158,194,27]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.VerticalScrollbar=void 0;const C=S.registerCodicon("scrollbar-button-up",S.Codicon.triangleUp),d=S.registerCodicon("scrollbar-button-down",S.Codicon.triangleDown);class g extends N.AbstractScrollbar{constructor(c,o,s){const a=c.getScrollDimensions(),u=c.getCurrentScrollPosition();super({lazyRender:o.lazyRender,host:s,scrollbarState:new w.ScrollbarState(o.verticalHasArrows?o.arrowSize:0,o.vertical===2?0:o.verticalScrollbarSize,0,a.height,a.scrollHeight,u.scrollTop),visibility:o.vertical,extraScrollbarClassName:"vertical",scrollable:c,scrollByPage:o.scrollByPage});if(o.verticalHasArrows){const r=(o.arrowSize-M.ARROW_IMG_SIZE)/2,i=(o.verticalScrollbarSize-M.ARROW_IMG_SIZE)/2;this._createArrow({className:"scra",icon:C,top:r,left:i,bottom:void 0,right:void 0,bgWidth:o.verticalScrollbarSize,bgHeight:o.arrowSize,onActivate:()=>this._host.onMouseWheel(new b.StandardWheelEvent(null,0,1))}),this._createArrow({className:"scra",icon:d,top:void 0,left:i,bottom:r,right:void 0,bgWidth:o.verticalScrollbarSize,bgHeight:o.arrowSize,onActivate:()=>this._host.onMouseWheel(new b.StandardWheelEvent(null,0,-1))})}this._createSlider(0,Math.floor((o.verticalScrollbarSize-o.verticalSliderSize)/2),o.verticalSliderSize,void 0)}_updateSlider(c,o){this.slider.setHeight(c),this.slider.setTop(o)}_renderDomNode(c,o){this.domNode.setWidth(o),this.domNode.setHeight(c),this.domNode.setRight(0),this.domNode.setTop(0)}onDidScroll(c){return this._shouldRender=this._onElementScrollSize(c.scrollHeight)||this._shouldRender,this._shouldRender=this._onElementScrollPosition(c.scrollTop)||this._shouldRender,this._shouldRender=this._onElementSize(c.height)||this._shouldRender,this._shouldRender}_mouseDownRelativePosition(c,o){return o}_sliderMousePosition(c){return c.posy}_sliderOrthogonalMousePosition(c){return c.posx}_updateScrollbarSize(c){this.slider.setWidth(c)}writeScrollPosition(c,o){c.scrollTop=o}}e.VerticalScrollbar=g}),define(Q[44],J([0,1,152,72,24,8,43]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DataUri=e.resolvePath=e.normalizePath=e.joinPath=e.dirname=e.basename=e.basenameOrAuthority=e.isEqual=e.extUri=e.ExtUri=e.originalFSPath=void 0;function C(p){return M.uriToFsPath(p,!0)}e.originalFSPath=C;class d{constructor(c){this._ignorePathCasing=c}compare(c,o,s=!1){return c===o?0:w.compare(this.getComparisonKey(c,s),this.getComparisonKey(o,s))}isEqual(c,o,s=!1){return c===o?!0:!c||!o?!1:this.getComparisonKey(c,s)===this.getComparisonKey(o,s)}getComparisonKey(c,o=!1){return c.with({path:this._ignorePathCasing(c)?c.path.toLowerCase():void 0,fragment:o?null:void 0}).toString()}joinPath(c,...o){return M.URI.joinPath(c,...o)}basenameOrAuthority(c){return e.basename(c)||c.authority}basename(c){return N.posix.basename(c.path)}dirname(c){if(c.path.length===0)return c;let o;return c.scheme===S.Schemas.file?o=M.URI.file(N.dirname(C(c))).path:(o=N.posix.dirname(c.path),c.authority&&o.length&&o.charCodeAt(0)!==47&&(console.error(`dirname("${c.toString})) resulted in a relative path`),o="/")),c.with({path:o})}normalizePath(c){if(!c.path.length)return c;let o;return c.scheme===S.Schemas.file?o=M.URI.file(N.normalize(C(c))).path:o=N.posix.normalize(c.path),c.with({path:o})}resolvePath(c,o){if(c.scheme===S.Schemas.file){const s=M.URI.file(N.resolve(C(c),o));return c.with({authority:s.authority,path:s.path})}return o.indexOf("/")===-1&&(o=b.toSlashes(o),/^[a-zA-Z]:(\/|$)/.test(o)&&(o="/"+o)),c.with({path:N.posix.resolve(c.path,o)})}}e.ExtUri=d,e.extUri=new d(()=>!1),e.isEqual=e.extUri.isEqual.bind(e.extUri),e.basenameOrAuthority=e.extUri.basenameOrAuthority.bind(e.extUri),e.basename=e.extUri.basename.bind(e.extUri),e.dirname=e.extUri.dirname.bind(e.extUri),e.joinPath=e.extUri.joinPath.bind(e.extUri),e.normalizePath=e.extUri.normalizePath.bind(e.extUri),e.resolvePath=e.extUri.resolvePath.bind(e.extUri);var g;(function(p){p.META_DATA_LABEL="label",p.META_DATA_DESCRIPTION="description",p.META_DATA_SIZE="size",p.META_DATA_MIME="mime";function c(o){const s=new Map;o.path.substring(o.path.indexOf(";")+1,o.path.lastIndexOf(";")).split(";").forEach(r=>{const[i,n]=r.split(":");i&&n&&s.set(i,n)});const u=o.path.substring(0,o.path.indexOf(";"));return u&&s.set(p.META_DATA_MIME,u),s}p.parseMetaData=c})(g=e.DataUri||(e.DataUri={}))}),define(Q[290],J([0,1,7,156,12,73,119,684,685,199,40,8,24,43,102,44,50,103,6,55]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t){"use strict";var l;Object.defineProperty(e,"__esModule",{value:!0}),e.renderMarkdown=void 0;const h=(l=window.trustedTypes)===null||l===void 0?void 0:l.createPolicy("insane",{createHTML(v,y){return d.insane(v,y)}});function m(v,y={},L={}){var I;const k=N.createElement(y),E=function(R){let W;try{W=g.parse(decodeURIComponent(R))}catch(x){}return W?(W=p.cloneAndChange(W,x=>{if(v.uris&&v.uris[x])return o.URI.revive(v.uris[x])}),encodeURIComponent(JSON.stringify(W))):R},T=function(R,W){const x=v.uris&&v.uris[R];if(!x)return R;let K=o.URI.revive(x);return o.URI.parse(R).toString()===K.toString()?R:W?s.FileAccess.asBrowserUri(K).toString(!0):(K.query&&(K=K.with({query:E(K.query)})),K.toString())};let O;const A=new Promise(R=>O=R),B=new C.Renderer;B.image=(R,W,x)=>{let K=[],Y=[];if(R){({href:R,dimensions:K}=w.parseHrefAndDimensions(R)),R=T(R,!0);try{const ee=o.URI.parse(R);y.baseUrl&&ee.scheme===s.Schemas.file&&(R=u.resolvePath(y.baseUrl,R).toString())}catch(ee){}Y.push(`src="${R}"`)}return x&&Y.push(`alt="${x}"`),W&&Y.push(`title="${W}"`),K.length&&(Y=Y.concat(K)),""},B.link=(R,W,x)=>(R===x&&(x=w.removeMarkdownEscapes(x)),R=T(R,!1),y.baseUrl&&(/^\w[\w\d+.-]*:/.test(R)||(R=u.resolvePath(y.baseUrl,R).toString())),W=w.removeMarkdownEscapes(W),R=w.removeMarkdownEscapes(R),!R||R.match(/^data:|javascript:/i)||R.match(/^command:/i)&&!v.isTrusted||R.match(/^command:(\/\/\/)?_workbench\.downloadResource/i)?x:(R=R.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'"),`
    ${x}`)),B.paragraph=R=>(v.supportThemeIcons&&(R=i.renderLabelWithIcons(R).map(x=>typeof x=="string"?x:x.outerHTML).join("")),`

    ${R}

    `),y.codeBlockRenderer&&(B.code=(R,W)=>{const x=y.codeBlockRenderer(W,R),K=S.defaultGenerator.nextId(),Y=Promise.all([x,A]).then(ee=>{const se=k.querySelector(`div[data-code="${K}"]`);se&&b.reset(se,ee[0])}).catch(ee=>{});return y.asyncRenderCallback&&Y.then(y.asyncRenderCallback),`
    ${c.escape(R)}
    `}),y.actionHandler&&y.actionHandler.disposeables.add(n.Event.any(t.domEvent(k,"click"),t.domEvent(k,"auxclick"))(R=>{const W=new r.StandardMouseEvent(R);if(!(!W.leftButton&&!W.middleButton)){let x=W.target;if(!(x.tagName!=="A"&&(x=x.parentElement,!x||x.tagName!=="A")))try{const K=x.dataset.href;K&&y.actionHandler.callback(K,W)}catch(K){M.onUnexpectedError(K)}finally{W.preventDefault()}}})),L.sanitizer=R=>(v.isTrusted?R.match(/^(]+>)|(<\/\s*span>)$/):void 0)?R:"",L.sanitize=!0,L.silent=!0,L.renderer=B;let F=(I=v.value)!==null&&I!==void 0?I:"";F.length>1e5&&(F=`${F.substr(0,1e5)}\u2026`),v.supportThemeIcons&&(F=a.markdownEscapeEscapedIcons(F));const D=C.parse(F,L);if(k.innerHTML=_(v,D),O(),y.asyncRenderCallback)for(const R of k.getElementsByTagName("img")){const W=b.addDisposableListener(R,"load",()=>{W.dispose(),y.asyncRenderCallback()})}return k}e.renderMarkdown=m;function _(v,y){var L;const I=f(v);return(L=h==null?void 0:h.createHTML(y,I))!==null&&L!==void 0?L:d.insane(y,I)}function f(v){const y=[s.Schemas.http,s.Schemas.https,s.Schemas.mailto,s.Schemas.data,s.Schemas.file,s.Schemas.vscodeRemote,s.Schemas.vscodeRemoteResource];return v.isTrusted&&y.push(s.Schemas.command),{allowedSchemes:y,allowedTags:["ul","li","p","code","blockquote","ol","h1","h2","h3","h4","h5","h6","hr","em","pre","table","thead","tbody","tr","th","td","div","del","a","strong","br","img","span"],allowedAttributes:{a:["href","name","target","data-href"],img:["src","title","alt","width","height"],div:["class","data-code"],span:["class","style"],th:["align"],td:["align"]},filter(L){return L.tag==="span"&&v.isTrusted?L.attrs.style&&Object.keys(L.attrs).length===1?!!L.attrs.style.match(/^(color\:#[0-9a-fA-F]+;)?(background-color\:#[0-9a-fA-F]+;)?$/):L.attrs.class?!!L.attrs.class.match(/^codicon codicon-[a-z\-]+( codicon-modifier-[a-z\-]+)?$/):!1:!0}}}}),define(Q[159],J([0,1,24,43,17,44,152]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.normalizeDriveLetter=e.getBaseLabel=void 0;function C(g){if(!!g){typeof g=="string"&&(g=b.URI.file(g));const p=w.basename(g)||(g.scheme===N.Schemas.file?g.fsPath:g.path);return M.isWindows&&S.isRootOrDriveLetter(p)?d(p):p}}e.getBaseLabel=C;function d(g){return S.hasDriveLetter(g)?g.charAt(0).toUpperCase()+g.slice(1):g}e.normalizeDriveLetter=d}),define(Q[291],J([0,1,72,8,198,43,44]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.guessMimeTypes=e.registerTextMime=e.MIME_UNKNOWN=e.MIME_TEXT=void 0,e.MIME_TEXT="text/plain",e.MIME_UNKNOWN="application/unknown";let C=[],d=[],g=[];function p(u,r=!1){const i=c(u);C.push(i),i.userConfigured?g.push(i):d.push(i),r&&!i.userConfigured&&C.forEach(n=>{n.mime===i.mime||n.userConfigured||(i.extension&&n.extension===i.extension&&console.warn(`Overwriting extension <<${i.extension}>> to now point to mime <<${i.mime}>>`),i.filename&&n.filename===i.filename&&console.warn(`Overwriting filename <<${i.filename}>> to now point to mime <<${i.mime}>>`),i.filepattern&&n.filepattern===i.filepattern&&console.warn(`Overwriting filepattern <<${i.filepattern}>> to now point to mime <<${i.mime}>>`),i.firstline&&n.firstline===i.firstline&&console.warn(`Overwriting firstline <<${i.firstline}>> to now point to mime <<${i.mime}>>`))})}e.registerTextMime=p;function c(u){return{id:u.id,mime:u.mime,filename:u.filename,extension:u.extension,filepattern:u.filepattern,firstline:u.firstline,userConfigured:u.userConfigured,filenameLowercase:u.filename?u.filename.toLowerCase():void 0,extensionLowercase:u.extension?u.extension.toLowerCase():void 0,filepatternLowercase:u.filepattern?u.filepattern.toLowerCase():void 0,filepatternOnPath:u.filepattern?u.filepattern.indexOf(b.posix.sep)>=0:!1}}function o(u,r){let i;if(u)switch(u.scheme){case w.Schemas.file:i=u.fsPath;break;case w.Schemas.data:i=S.DataUri.parseMetaData(u).get(S.DataUri.META_DATA_LABEL);break;default:i=u.path}if(!i)return[e.MIME_UNKNOWN];i=i.toLowerCase();const n=b.basename(i),t=s(i,n,g);if(t)return[t,e.MIME_TEXT];const l=s(i,n,d);if(l)return[l,e.MIME_TEXT];if(r){const h=a(r);if(h)return[h,e.MIME_TEXT]}return[e.MIME_UNKNOWN]}e.guessMimeTypes=o;function s(u,r,i){let n=null,t=null,l=null;for(let h=i.length-1;h>=0;h--){const m=i[h];if(r===m.filenameLowercase){n=m;break}if(m.filepattern&&(!t||m.filepattern.length>t.filepattern.length)){const _=m.filepatternOnPath?u:r;M.match(m.filepatternLowercase,_)&&(t=m)}m.extension&&(!l||m.extension.length>l.extension.length)&&r.endsWith(m.extensionLowercase)&&(l=m)}return n?n.mime:t?t.mime:l?l.mime:null}function a(u){if(N.startsWithUTF8BOM(u)&&(u=u.substr(1)),u.length>0)for(let r=C.length-1;r>=0;r--){const i=C[r];if(!!i.firstline){const n=u.match(i.firstline);if(n&&n.length>0)return i.mime}}return null}}),define(Q[292],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.generateUuid=void 0;const b=new Uint8Array(16),N=[];for(let S=0;S<256;S++)N.push(S.toString(16).padStart(2,"0"));let M;typeof crypto=="object"&&typeof crypto.getRandomValues=="function"?M=crypto.getRandomValues.bind(crypto):M=function(S){for(let C=0;C{this._pendingReplies[r]={resolve:i,reject:n},this._send({vsWorker:this._workerId,req:r,method:a,args:u})})}handleMessage(a){!a||!a.vsWorker||this._workerId!==-1&&a.vsWorker!==this._workerId||this._handleMessage(a)}_handleMessage(a){if(a.seq){let n=a;if(!this._pendingReplies[n.seq]){console.warn("Got reply to unknown seq");return}let t=this._pendingReplies[n.seq];if(delete this._pendingReplies[n.seq],n.err){let l=n.err;n.err.$isError&&(l=new Error,l.name=n.err.name,l.message=n.err.message,l.stack=n.err.stack),t.reject(l);return}t.resolve(n.res);return}let u=a,r=u.req;this._handler.handleMessage(u.method,u.args).then(n=>{this._send({vsWorker:this._workerId,seq:r,res:n,err:void 0})},n=>{n.detail instanceof Error&&(n.detail=b.transformErrorForSerialization(n.detail)),this._send({vsWorker:this._workerId,seq:r,res:void 0,err:b.transformErrorForSerialization(n)})})}_send(a){let u=[];if(a.req){const r=a;for(let i=0;i{this._protocol.handleMessage(h)},h=>{i&&i(h)})),this._protocol=new g({sendMessage:(h,m)=>{this._worker.postMessage(h,m)},handleMessage:(h,m)=>{if(typeof r[h]!="function")return Promise.reject(new Error("Missing method "+h+" on main thread host."));try{return Promise.resolve(r[h].apply(r,m))}catch(_){return Promise.reject(_)}}}),this._protocol.setWorkerId(this._worker.getId());let n=null;typeof self.require!="undefined"&&typeof self.require.getConfig=="function"?n=self.require.getConfig():typeof self.requirejs!="undefined"&&(n=self.requirejs.s.contexts._.config);const t=w.getAllMethodNames(r);this._onModuleLoaded=this._protocol.sendMessage(S,[this._worker.getId(),JSON.parse(JSON.stringify(n)),u,t]);const l=(h,m)=>this._request(h,m);this._lazyProxy=new Promise((h,m)=>{i=m,this._onModuleLoaded.then(_=>{h(w.createProxyObject(_,l))},_=>{m(_),this._onError("Worker failed to load "+u,_)})})}getProxyObject(){return this._lazyProxy}_request(a,u){return new Promise((r,i)=>{this._onModuleLoaded.then(()=>{this._protocol.sendMessage(a,u).then(r,i)},i)})}_onError(a,u){console.error(a),console.info(u)}}e.SimpleWorkerClient=p;class c{constructor(a,u){this._requestHandlerFactory=u,this._requestHandler=null,this._protocol=new g({sendMessage:(r,i)=>{a(r,i)},handleMessage:(r,i)=>this._handleMessage(r,i)})}onmessage(a){this._protocol.handleMessage(a)}_handleMessage(a,u){if(a===S)return this.initialize(u[0],u[1],u[2],u[3]);if(!this._requestHandler||typeof this._requestHandler[a]!="function")return Promise.reject(new Error("Missing requestHandler or method: "+a));try{return Promise.resolve(this._requestHandler[a].apply(this._requestHandler,u))}catch(r){return Promise.reject(r)}}initialize(a,u,r,i){this._protocol.setWorkerId(a);const n=(l,h)=>this._protocol.sendMessage(l,h),t=w.createProxyObject(i,n);return this._requestHandlerFactory?(this._requestHandler=this._requestHandlerFactory(t),Promise.resolve(w.getAllMethodNames(this._requestHandler))):(u&&(typeof u.baseUrl!="undefined"&&delete u.baseUrl,typeof u.paths!="undefined"&&typeof u.paths.vs!="undefined"&&delete u.paths.vs,typeof u.trustedTypesPolicy!==void 0&&delete u.trustedTypesPolicy,u.catchError=!0,self.require.config(u)),new Promise((l,h)=>{self.require([r],m=>{if(this._requestHandler=m.create(t),!this._requestHandler){h(new Error("No RequestHandler!"));return}l(w.getAllMethodNames(this._requestHandler))},h)}))}}e.SimpleWorkerServer=c;function o(s){return new c(s,null)}e.create=o}),define(Q[202],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ItemActivation=e.NO_KEY_MODS=void 0,e.NO_KEY_MODS={ctrlCmd:!1,alt:!1};var b;(function(N){N[N.NONE=0]="NONE",N[N.FIRST=1]="FIRST",N[N.SECOND=2]="SECOND",N[N.LAST=3]="LAST"})(b=e.ItemActivation||(e.ItemActivation={}))}),define(Q[293],J([0,1,2,6,15,20]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InMemoryStorageDatabase=e.Storage=void 0;var S;(function(g){g[g.None=0]="None",g[g.Initialized=1]="Initialized",g[g.Closed=2]="Closed"})(S||(S={}));class C extends b.Disposable{constructor(p,c=Object.create(null)){super();this.database=p,this.options=c,this._onDidChangeStorage=this._register(new N.Emitter),this.onDidChangeStorage=this._onDidChangeStorage.event,this.state=S.None,this.cache=new Map,this.flushDelayer=new M.ThrottledDelayer(C.DEFAULT_FLUSH_DELAY),this.pendingDeletes=new Set,this.pendingInserts=new Map,this.whenFlushedCallbacks=[],this.registerListeners()}registerListeners(){this._register(this.database.onDidChangeItemsExternal(p=>this.onDidChangeItemsExternal(p)))}onDidChangeItemsExternal(p){var c,o;(c=p.changed)===null||c===void 0||c.forEach((s,a)=>this.accept(a,s)),(o=p.deleted)===null||o===void 0||o.forEach(s=>this.accept(s,void 0))}accept(p,c){if(this.state!==S.Closed){let o=!1;w.isUndefinedOrNull(c)?o=this.cache.delete(p):this.cache.get(p)!==c&&(this.cache.set(p,c),o=!0),o&&this._onDidChangeStorage.fire(p)}}get(p,c){const o=this.cache.get(p);return w.isUndefinedOrNull(o)?c:o}getBoolean(p,c){const o=this.get(p);return w.isUndefinedOrNull(o)?c:o==="true"}getNumber(p,c){const o=this.get(p);return w.isUndefinedOrNull(o)?c:parseInt(o,10)}set(p,c){return Ie(this,void 0,void 0,function*(){if(this.state!==S.Closed){if(w.isUndefinedOrNull(c))return this.delete(p);const o=String(c);if(this.cache.get(p)!==o)return this.cache.set(p,o),this.pendingInserts.set(p,o),this.pendingDeletes.delete(p),this._onDidChangeStorage.fire(p),this.flushDelayer.trigger(()=>this.flushPending())}})}delete(p){return Ie(this,void 0,void 0,function*(){if(this.state!==S.Closed&&!!this.cache.delete(p))return this.pendingDeletes.has(p)||this.pendingDeletes.add(p),this.pendingInserts.delete(p),this._onDidChangeStorage.fire(p),this.flushDelayer.trigger(()=>this.flushPending())})}get hasPending(){return this.pendingInserts.size>0||this.pendingDeletes.size>0}flushPending(){return Ie(this,void 0,void 0,function*(){if(!!this.hasPending){const p={insert:this.pendingInserts,delete:this.pendingDeletes};return this.pendingDeletes=new Set,this.pendingInserts=new Map,this.database.updateItems(p).finally(()=>{var c;if(!this.hasPending)for(;this.whenFlushedCallbacks.length;)(c=this.whenFlushedCallbacks.pop())===null||c===void 0||c()})}})}dispose(){this.flushDelayer.cancel(),this.flushDelayer.dispose(),super.dispose()}}e.Storage=C,C.DEFAULT_FLUSH_DELAY=100;class d{constructor(){this.onDidChangeItemsExternal=N.Event.None,this.items=new Map}updateItems(p){return Ie(this,void 0,void 0,function*(){p.insert&&p.insert.forEach((c,o)=>this.items.set(o,c)),p.delete&&p.delete.forEach(c=>this.items.delete(c))})}}e.InMemoryStorageDatabase=d}),define(Q[294],J([0,1,17,201]),function(q,e,b,N){"use strict";var M;Object.defineProperty(e,"__esModule",{value:!0}),e.DefaultWorkerFactory=e.getWorkerBootstrapUrl=void 0;const w=(M=window.trustedTypes)===null||M===void 0?void 0:M.createPolicy("defaultWorkerFactory",{createScriptURL:c=>c});function S(c,o){if(b.globals.MonacoEnvironment){if(typeof b.globals.MonacoEnvironment.getWorker=="function")return b.globals.MonacoEnvironment.getWorker(c,o);if(typeof b.globals.MonacoEnvironment.getWorkerUrl=="function"){const s=b.globals.MonacoEnvironment.getWorkerUrl(c,o);return new Worker(w?w.createScriptURL(s):s,{name:o})}}if(typeof q=="function"){const s=q.toUrl("./"+c),a=C(s,o);return new Worker(w?w.createScriptURL(a):a,{name:o})}throw new Error("You must define a function MonacoEnvironment.getWorkerUrl or MonacoEnvironment.getWorker")}function C(c,o,s=!1){if(s||/^((http:)|(https:)|(file:))/.test(c)){const a=String(window.location),u=a.substr(0,a.length-window.location.hash.length-window.location.search.length-window.location.pathname.length);if(s||c.substring(0,u.length)!==u){const r="vs/base/worker/defaultWorkerFactory.js",i=q.toUrl(r).slice(0,-r.length),n=`/*${o}*/self.MonacoEnvironment={baseUrl: '${i}'};importScripts('${c}');/*${o}*/`;if(s)return`data:text/javascript;charset=utf-8,${encodeURIComponent(n)}`;const t=new Blob([n],{type:"application/javascript"});return URL.createObjectURL(t)}}return c+"#"+o}e.getWorkerBootstrapUrl=C;function d(c){return typeof c.then=="function"}class g{constructor(o,s,a,u,r){this.id=s;const i=S("workerMain.js",a);d(i)?this.worker=i:this.worker=Promise.resolve(i),this.postMessage(o,[]),this.worker.then(n=>{n.onmessage=function(t){u(t.data)},n.onmessageerror=r,typeof n.addEventListener=="function"&&n.addEventListener("error",r)})}getId(){return this.id}postMessage(o,s){this.worker&&this.worker.then(a=>a.postMessage(o,s))}dispose(){this.worker&&this.worker.then(o=>o.terminate()),this.worker=null}}class p{constructor(o){this._label=o,this._webWorkerFailedBeforeError=!1}create(o,s,a){let u=++p.LAST_WORKER_ID;if(this._webWorkerFailedBeforeError)throw this._webWorkerFailedBeforeError;return new g(o,u,this._label||"anonymous"+u,s,r=>{N.logOnceWebWorkerWarning(r),this._webWorkerFailedBeforeError=r,a(r)})}}e.DefaultWorkerFactory=p,p.LAST_WORKER_ID=0}),define(Q[203],J([10]),{}),define(Q[295],J([10]),{}),define(Q[47],J([0,1,17,7,295]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.status=e.alert=e.setARIAContainer=void 0;const M=2e4;let w,S,C,d,g;function p(a){w=document.createElement("div"),w.className="monaco-aria-container";const u=()=>{const i=document.createElement("div");return i.className="monaco-alert",i.setAttribute("role","alert"),i.setAttribute("aria-atomic","true"),w.appendChild(i),i};S=u(),C=u();const r=()=>{const i=document.createElement("div");return i.className="monaco-status",i.setAttribute("role","complementary"),i.setAttribute("aria-live","polite"),i.setAttribute("aria-atomic","true"),w.appendChild(i),i};d=r(),g=r(),a.appendChild(w)}e.setARIAContainer=p;function c(a){!w||(S.textContent!==a?(N.clearNode(C),s(S,a)):(N.clearNode(S),s(C,a)))}e.alert=c;function o(a){!w||(b.isMacintosh?c(a):d.textContent!==a?(N.clearNode(g),s(d,a)):(N.clearNode(d),s(g,a)))}e.status=o;function s(a,u){N.clearNode(a),u.length>M&&(u=u.substr(0,M)),a.textContent=u,a.style.visibility="hidden",a.style.visibility="visible"}}),define(Q[296],J([10]),{}),define(Q[297],J([0,1,56,29,40,6,2,60,103,7,296]),function(q,e,b,N,M,w,S,C,d,g){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Button=void 0;const p={buttonBackground:N.Color.fromHex("#0E639C"),buttonHoverBackground:N.Color.fromHex("#006BB3"),buttonForeground:N.Color.white};class c extends S.Disposable{constructor(s,a){super();this._onDidClick=this._register(new w.Emitter),this.options=a||Object.create(null),M.mixin(this.options,p,!1),this.buttonForeground=this.options.buttonForeground,this.buttonBackground=this.options.buttonBackground,this.buttonHoverBackground=this.options.buttonHoverBackground,this.buttonSecondaryForeground=this.options.buttonSecondaryForeground,this.buttonSecondaryBackground=this.options.buttonSecondaryBackground,this.buttonSecondaryHoverBackground=this.options.buttonSecondaryHoverBackground,this.buttonBorder=this.options.buttonBorder,this._element=document.createElement("a"),this._element.classList.add("monaco-button"),this._element.tabIndex=0,this._element.setAttribute("role","button"),s.appendChild(this._element),this._register(C.Gesture.addTarget(this._element)),[g.EventType.CLICK,C.EventType.Tap].forEach(u=>{this._register(g.addDisposableListener(this._element,u,r=>{if(!this.enabled){g.EventHelper.stop(r);return}this._onDidClick.fire(r)}))}),this._register(g.addDisposableListener(this._element,g.EventType.KEY_DOWN,u=>{const r=new b.StandardKeyboardEvent(u);let i=!1;this.enabled&&(r.equals(3)||r.equals(10))?(this._onDidClick.fire(u),i=!0):r.equals(9)&&(this._element.blur(),i=!0),i&&g.EventHelper.stop(r,!0)})),this._register(g.addDisposableListener(this._element,g.EventType.MOUSE_OVER,u=>{this._element.classList.contains("disabled")||this.setHoverBackground()})),this._register(g.addDisposableListener(this._element,g.EventType.MOUSE_OUT,u=>{this.applyStyles()})),this.focusTracker=this._register(g.trackFocus(this._element)),this._register(this.focusTracker.onDidFocus(()=>this.setHoverBackground())),this._register(this.focusTracker.onDidBlur(()=>this.applyStyles())),this.applyStyles()}get onDidClick(){return this._onDidClick.event}setHoverBackground(){let s;this.options.secondary?s=this.buttonSecondaryHoverBackground?this.buttonSecondaryHoverBackground.toString():null:s=this.buttonHoverBackground?this.buttonHoverBackground.toString():null,s&&(this._element.style.backgroundColor=s)}style(s){this.buttonForeground=s.buttonForeground,this.buttonBackground=s.buttonBackground,this.buttonHoverBackground=s.buttonHoverBackground,this.buttonSecondaryForeground=s.buttonSecondaryForeground,this.buttonSecondaryBackground=s.buttonSecondaryBackground,this.buttonSecondaryHoverBackground=s.buttonSecondaryHoverBackground,this.buttonBorder=s.buttonBorder,this.applyStyles()}applyStyles(){if(this._element){let s,a;this.options.secondary?(a=this.buttonSecondaryForeground?this.buttonSecondaryForeground.toString():"",s=this.buttonSecondaryBackground?this.buttonSecondaryBackground.toString():""):(a=this.buttonForeground?this.buttonForeground.toString():"",s=this.buttonBackground?this.buttonBackground.toString():"");const u=this.buttonBorder?this.buttonBorder.toString():"";this._element.style.color=a,this._element.style.backgroundColor=s,this._element.style.borderWidth=u?"1px":"",this._element.style.borderStyle=u?"solid":"",this._element.style.borderColor=u}}get element(){return this._element}set label(s){this._element.classList.add("monaco-text-button"),this.options.supportIcons?g.reset(this._element,...d.renderLabelWithIcons(s)):this._element.textContent=s,typeof this.options.title=="string"?this._element.title=this.options.title:this.options.title&&(this._element.title=s)}set enabled(s){s?(this._element.classList.remove("disabled"),this._element.setAttribute("aria-disabled",String(!1)),this._element.tabIndex=0):(this._element.classList.add("disabled"),this._element.setAttribute("aria-disabled",String(!0)))}get enabled(){return!this._element.classList.contains("disabled")}}e.Button=c}),define(Q[298],J([10]),{}),define(Q[160],J([0,1,52,29,6,27,298]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Checkbox=void 0;const S={inputActiveOptionBorder:N.Color.fromHex("#007ACC00"),inputActiveOptionForeground:N.Color.fromHex("#FFFFFF"),inputActiveOptionBackground:N.Color.fromHex("#0E639C50")};class C extends b.Widget{constructor(g){super();this._onChange=this._register(new M.Emitter),this.onChange=this._onChange.event,this._onKeyDown=this._register(new M.Emitter),this.onKeyDown=this._onKeyDown.event,this._opts=Object.assign(Object.assign({},S),g),this._checked=this._opts.isChecked;const p=["monaco-custom-checkbox"];this._opts.icon&&p.push(...w.CSSIcon.asClassNameArray(this._opts.icon)),this._opts.actionClassName&&p.push(...this._opts.actionClassName.split(" ")),this._checked&&p.push("checked"),this.domNode=document.createElement("div"),this.domNode.title=this._opts.title,this.domNode.classList.add(...p),this._opts.notFocusable||(this.domNode.tabIndex=0),this.domNode.setAttribute("role","checkbox"),this.domNode.setAttribute("aria-checked",String(this._checked)),this.domNode.setAttribute("aria-label",this._opts.title),this.applyStyles(),this.onclick(this.domNode,c=>{this.checked=!this._checked,this._onChange.fire(!1),c.preventDefault()}),this.ignoreGesture(this.domNode),this.onkeydown(this.domNode,c=>{if(c.keyCode===10||c.keyCode===3){this.checked=!this._checked,this._onChange.fire(!0),c.preventDefault();return}this._onKeyDown.fire(c)})}get enabled(){return this.domNode.getAttribute("aria-disabled")!=="true"}focus(){this.domNode.focus()}get checked(){return this._checked}set checked(g){this._checked=g,this.domNode.setAttribute("aria-checked",String(this._checked)),this.domNode.classList.toggle("checked",this._checked),this.applyStyles()}width(){return 2+2+2+16}style(g){g.inputActiveOptionBorder&&(this._opts.inputActiveOptionBorder=g.inputActiveOptionBorder),g.inputActiveOptionForeground&&(this._opts.inputActiveOptionForeground=g.inputActiveOptionForeground),g.inputActiveOptionBackground&&(this._opts.inputActiveOptionBackground=g.inputActiveOptionBackground),this.applyStyles()}applyStyles(){this.domNode&&(this.domNode.style.borderColor=this._checked&&this._opts.inputActiveOptionBorder?this._opts.inputActiveOptionBorder.toString():"transparent",this.domNode.style.color=this._checked&&this._opts.inputActiveOptionForeground?this._opts.inputActiveOptionForeground.toString():"inherit",this.domNode.style.backgroundColor=this._checked&&this._opts.inputActiveOptionBackground?this._opts.inputActiveOptionBackground.toString():"transparent")}enable(){this.domNode.setAttribute("aria-disabled",String(!1))}disable(){this.domNode.setAttribute("aria-disabled",String(!0))}}e.Checkbox=C}),define(Q[299],J([10]),{}),define(Q[300],J([10]),{}),define(Q[123],J([0,1,27,299,300]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.formatRule=void 0;function N(M){let w=M.definition;for(;w instanceof b.Codicon;)w=w.definition;return`.codicon-${M.id}:before { content: '${w.fontCharacter}'; }`}e.formatRule=N}),define(Q[301],J([10]),{}),define(Q[204],J([0,1,7,17,2,120,151,301]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ContextView=e.layout=e.LayoutAnchorMode=void 0;var C;(function(c){c[c.AVOID=0]="AVOID",c[c.ALIGN=1]="ALIGN"})(C=e.LayoutAnchorMode||(e.LayoutAnchorMode={}));function d(c,o,s){const a=s.mode===C.ALIGN?s.offset:s.offset+s.size,u=s.mode===C.ALIGN?s.offset+s.size:s.offset;return s.position===0?o<=c-a?a:o<=u?u-o:Math.max(c-o,0):o<=u?u-o:o<=c-a?a:0}e.layout=d;class g extends M.Disposable{constructor(o,s){super();this.container=null,this.delegate=null,this.toDisposeOnClean=M.Disposable.None,this.toDisposeOnSetContainer=M.Disposable.None,this.shadowRoot=null,this.shadowRootHostElement=null,this.view=b.$(".context-view"),this.useFixedPosition=!1,this.useShadowDOM=!1,b.hide(this.view),this.setContainer(o,s),this._register(M.toDisposable(()=>this.setContainer(null,1)))}setContainer(o,s){var a;if(this.container&&(this.toDisposeOnSetContainer.dispose(),this.shadowRoot?(this.shadowRoot.removeChild(this.view),this.shadowRoot=null,(a=this.shadowRootHostElement)===null||a===void 0||a.remove(),this.shadowRootHostElement=null):this.container.removeChild(this.view),this.container=null),o){if(this.container=o,this.useFixedPosition=s!==1,this.useShadowDOM=s===3,this.useShadowDOM){this.shadowRootHostElement=b.$(".shadow-root-host"),this.container.appendChild(this.shadowRootHostElement),this.shadowRoot=this.shadowRootHostElement.attachShadow({mode:"open"});const r=document.createElement("style");r.textContent=p,this.shadowRoot.appendChild(r),this.shadowRoot.appendChild(this.view),this.shadowRoot.appendChild(b.$("slot"))}else this.container.appendChild(this.view);const u=new M.DisposableStore;g.BUBBLE_UP_EVENTS.forEach(r=>{u.add(b.addStandardDisposableListener(this.container,r,i=>{this.onDOMEvent(i,!1)}))}),g.BUBBLE_DOWN_EVENTS.forEach(r=>{u.add(b.addStandardDisposableListener(this.container,r,i=>{this.onDOMEvent(i,!0)},!0))}),this.toDisposeOnSetContainer=u}}show(o){this.isVisible()&&this.hide(),b.clearNode(this.view),this.view.className="context-view",this.view.style.top="0px",this.view.style.left="0px",this.view.style.zIndex="2500",this.view.style.position=this.useFixedPosition?"fixed":"absolute",b.show(this.view),this.toDisposeOnClean=o.render(this.view)||M.Disposable.None,this.delegate=o,this.doLayout(),this.delegate.focus&&this.delegate.focus()}getViewElement(){return this.view}layout(){if(!!this.isVisible()){if(this.delegate.canRelayout===!1&&!(N.isIOS&&S.BrowserFeatures.pointerEvents)){this.hide();return}this.delegate.layout&&this.delegate.layout(),this.doLayout()}}doLayout(){if(!!this.isVisible()){let o=this.delegate.getAnchor(),s;if(b.isHTMLElement(o)){let m=b.getDomNodePagePosition(o);s={top:m.top,left:m.left,width:m.width,height:m.height}}else s={top:o.y,left:o.x,width:o.width||1,height:o.height||2};const a=b.getTotalWidth(this.view),u=b.getTotalHeight(this.view),r=this.delegate.anchorPosition||0,i=this.delegate.anchorAlignment||0,n=this.delegate.anchorAxisAlignment||0;let t,l;if(n===0){const m={offset:s.top-window.pageYOffset,size:s.height,position:r===0?0:1},_={offset:s.left,size:s.width,position:i===0?0:1,mode:C.ALIGN};t=d(window.innerHeight,u,m)+window.pageYOffset,w.Range.intersects({start:t,end:t+u},{start:m.offset,end:m.offset+m.size})&&(_.mode=C.AVOID),l=d(window.innerWidth,a,_)}else{const m={offset:s.left,size:s.width,position:i===0?0:1},_={offset:s.top,size:s.height,position:r===0?0:1,mode:C.ALIGN};l=d(window.innerWidth,a,m),w.Range.intersects({start:l,end:l+a},{start:m.offset,end:m.offset+m.size})&&(_.mode=C.AVOID),t=d(window.innerHeight,u,_)+window.pageYOffset}this.view.classList.remove("top","bottom","left","right"),this.view.classList.add(r===0?"bottom":"top"),this.view.classList.add(i===0?"left":"right"),this.view.classList.toggle("fixed",this.useFixedPosition);const h=b.getDomNodePagePosition(this.container);this.view.style.top=`${t-(this.useFixedPosition?b.getDomNodePagePosition(this.view).top:h.top)}px`,this.view.style.left=`${l-(this.useFixedPosition?b.getDomNodePagePosition(this.view).left:h.left)}px`,this.view.style.width="initial"}}hide(o){const s=this.delegate;this.delegate=null,(s==null?void 0:s.onHide)&&s.onHide(o),this.toDisposeOnClean.dispose(),b.hide(this.view)}isVisible(){return!!this.delegate}onDOMEvent(o,s){this.delegate&&(this.delegate.onDOMEvent?this.delegate.onDOMEvent(o,document.activeElement):s&&!b.isAncestor(o.target,this.container)&&this.hide())}dispose(){this.hide(),super.dispose()}}e.ContextView=g,g.BUBBLE_UP_EVENTS=["click","keydown","focus","blur"],g.BUBBLE_DOWN_EVENTS=["click"];let p=` + :host { + all: initial; /* 1st rule so subsequent properties are reset. */ + } + + @font-face { + font-family: "codicon"; + src: url("./codicon.ttf?5d4d76ab2ce5108968ad644d591a16a6") format("truetype"); + } + + .codicon[class*='codicon-'] { + font: normal normal normal 16px/1 codicon; + display: inline-block; + text-decoration: none; + text-rendering: auto; + text-align: center; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + } + + :host { + font-family: -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", "HelveticaNeue-Light", system-ui, "Ubuntu", "Droid Sans", sans-serif; + } + + :host-context(.mac) { font-family: -apple-system, BlinkMacSystemFont, sans-serif; } + :host-context(.mac:lang(zh-Hans)) { font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", sans-serif; } + :host-context(.mac:lang(zh-Hant)) { font-family: -apple-system, BlinkMacSystemFont, "PingFang TC", sans-serif; } + :host-context(.mac:lang(ja)) { font-family: -apple-system, BlinkMacSystemFont, "Hiragino Kaku Gothic Pro", sans-serif; } + :host-context(.mac:lang(ko)) { font-family: -apple-system, BlinkMacSystemFont, "Nanum Gothic", "Apple SD Gothic Neo", "AppleGothic", sans-serif; } + + :host-context(.windows) { font-family: "Segoe WPC", "Segoe UI", sans-serif; } + :host-context(.windows:lang(zh-Hans)) { font-family: "Segoe WPC", "Segoe UI", "Microsoft YaHei", sans-serif; } + :host-context(.windows:lang(zh-Hant)) { font-family: "Segoe WPC", "Segoe UI", "Microsoft Jhenghei", sans-serif; } + :host-context(.windows:lang(ja)) { font-family: "Segoe WPC", "Segoe UI", "Yu Gothic UI", "Meiryo UI", sans-serif; } + :host-context(.windows:lang(ko)) { font-family: "Segoe WPC", "Segoe UI", "Malgun Gothic", "Dotom", sans-serif; } + + :host-context(.linux) { font-family: system-ui, "Ubuntu", "Droid Sans", sans-serif; } + :host-context(.linux:lang(zh-Hans)) { font-family: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans SC", "Source Han Sans CN", "Source Han Sans", sans-serif; } + :host-context(.linux:lang(zh-Hant)) { font-family: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans TC", "Source Han Sans TW", "Source Han Sans", sans-serif; } + :host-context(.linux:lang(ja)) { font-family: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans J", "Source Han Sans JP", "Source Han Sans", sans-serif; } + :host-context(.linux:lang(ko)) { font-family: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans K", "Source Han Sans JR", "Source Han Sans", "UnDotum", "FBaekmuk Gulim", sans-serif; } +`}),define(Q[302],J([10]),{}),define(Q[205],J([0,1,7,8,29,40,302]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CountBadge=void 0;const S={badgeBackground:M.Color.fromHex("#4D4D4D"),badgeForeground:M.Color.fromHex("#FFFFFF")};class C{constructor(g,p){this.count=0,this.options=p||Object.create(null),w.mixin(this.options,S,!1),this.badgeBackground=this.options.badgeBackground,this.badgeForeground=this.options.badgeForeground,this.badgeBorder=this.options.badgeBorder,this.element=b.append(g,b.$(".monaco-count-badge")),this.countFormat=this.options.countFormat||"{0}",this.titleFormat=this.options.titleFormat||"",this.setCount(this.options.count||0)}setCount(g){this.count=g,this.render()}setTitleFormat(g){this.titleFormat=g,this.render()}render(){this.element.textContent=N.format(this.countFormat,this.count),this.element.title=N.format(this.titleFormat,this.count),this.applyStyles()}style(g){this.badgeBackground=g.badgeBackground,this.badgeForeground=g.badgeForeground,this.badgeBorder=g.badgeBorder,this.applyStyles()}applyStyles(){if(this.element){const g=this.badgeBackground?this.badgeBackground.toString():"",p=this.badgeForeground?this.badgeForeground.toString():"",c=this.badgeBorder?this.badgeBorder.toString():"";this.element.style.backgroundColor=g,this.element.style.color=p,this.element.style.borderWidth=c?"1px":"",this.element.style.borderStyle=c?"solid":"",this.element.style.borderColor=c}}}e.CountBadge=C}),define(Q[206],J([10]),{}),define(Q[207],J([10]),{}),define(Q[303],J([10]),{}),define(Q[304],J([10]),{}),define(Q[305],J([10]),{}),define(Q[306],J([10]),{}),define(Q[208],J([10]),{}),define(Q[307],J([10]),{}),define(Q[124],J([0,1,307]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MOUSE_CURSOR_TEXT_CSS_CLASS_NAME=void 0,e.MOUSE_CURSOR_TEXT_CSS_CLASS_NAME="monaco-mouse-cursor-text"}),define(Q[308],J([10]),{}),define(Q[309],J([0,1,2,29,40,7,15,308]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ProgressBar=void 0;const C="done",d="active",g="infinite",p="discrete",c={progressBarBackground:N.Color.fromHex("#0E70C0")};class o extends b.Disposable{constructor(a,u){super();this.options=u||Object.create(null),M.mixin(this.options,c,!1),this.workedVal=0,this.progressBarBackground=this.options.progressBarBackground,this._register(this.showDelayedScheduler=new S.RunOnceScheduler(()=>w.show(this.element),0)),this.create(a)}create(a){this.element=document.createElement("div"),this.element.classList.add("monaco-progress-container"),this.element.setAttribute("role","progressbar"),this.element.setAttribute("aria-valuemin","0"),a.appendChild(this.element),this.bit=document.createElement("div"),this.bit.classList.add("progress-bit"),this.element.appendChild(this.bit),this.applyStyles()}off(){this.bit.style.width="inherit",this.bit.style.opacity="1",this.element.classList.remove(d,g,p),this.workedVal=0,this.totalWork=void 0}stop(){return this.doDone(!1)}doDone(a){return this.element.classList.add(C),this.element.classList.contains(g)?(this.bit.style.opacity="0",a?setTimeout(()=>this.off(),200):this.off()):(this.bit.style.width="inherit",a?setTimeout(()=>this.off(),200):this.off()),this}infinite(){return this.bit.style.width="2%",this.bit.style.opacity="1",this.element.classList.remove(p,C),this.element.classList.add(d,g),this}getContainer(){return this.element}style(a){this.progressBarBackground=a.progressBarBackground,this.applyStyles()}applyStyles(){if(this.bit){const a=this.progressBarBackground?this.progressBarBackground.toString():"";this.bit.style.backgroundColor=a}}}e.ProgressBar=o}),define(Q[310],J([10]),{}),define(Q[104],J([0,1,2,17,20,60,50,6,7,55,15,310]),function(q,e,b,N,M,w,S,C,d,g,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Sash=e.OrthogonalEdge=void 0;let c=!1;var o;(function(r){r.North="north",r.South="south",r.East="east",r.West="west"})(o=e.OrthogonalEdge||(e.OrthogonalEdge={}));let s=4;const a=new C.Emitter;class u extends b.Disposable{constructor(i,n,t){super();this.hoverDelayer=this._register(new p.Delayer(300)),this._state=3,this._onDidEnablementChange=this._register(new C.Emitter),this.onDidEnablementChange=this._onDidEnablementChange.event,this._onDidStart=this._register(new C.Emitter),this.onDidStart=this._onDidStart.event,this._onDidChange=this._register(new C.Emitter),this.onDidChange=this._onDidChange.event,this._onDidReset=this._register(new C.Emitter),this.onDidReset=this._onDidReset.event,this._onDidEnd=this._register(new C.Emitter),this.onDidEnd=this._onDidEnd.event,this.linkedSash=void 0,this.orthogonalStartSashDisposables=this._register(new b.DisposableStore),this.orthogonalStartDragHandleDisposables=this._register(new b.DisposableStore),this.orthogonalEndSashDisposables=this._register(new b.DisposableStore),this.orthogonalEndDragHandleDisposables=this._register(new b.DisposableStore),this.el=d.append(i,d.$(".monaco-sash")),t.orthogonalEdge&&this.el.classList.add(`orthogonal-edge-${t.orthogonalEdge}`),N.isMacintosh&&this.el.classList.add("mac"),this._register(g.domEvent(this.el,"mousedown")(this.onMouseDown,this)),this._register(g.domEvent(this.el,"dblclick")(this.onMouseDoubleClick,this)),this._register(g.domEvent(this.el,"mouseenter")(()=>u.onMouseEnter(this))),this._register(g.domEvent(this.el,"mouseleave")(()=>u.onMouseLeave(this))),this._register(w.Gesture.addTarget(this.el)),this._register(g.domEvent(this.el,w.EventType.Start)(this.onTouchStart,this)),typeof t.size=="number"?(this.size=t.size,t.orientation===0?this.el.style.width=`${this.size}px`:this.el.style.height=`${this.size}px`):(this.size=s,this._register(a.event(l=>{this.size=l,this.layout()}))),this.hidden=!1,this.layoutProvider=n,this.orthogonalStartSash=t.orthogonalStartSash,this.orthogonalEndSash=t.orthogonalEndSash,this.orientation=t.orientation||0,this.orientation===1?(this.el.classList.add("horizontal"),this.el.classList.remove("vertical")):(this.el.classList.remove("horizontal"),this.el.classList.add("vertical")),this.el.classList.toggle("debug",c),this.layout()}get state(){return this._state}set state(i){this._state!==i&&(this.el.classList.toggle("disabled",i===0),this.el.classList.toggle("minimum",i===1),this.el.classList.toggle("maximum",i===2),this._state=i,this._onDidEnablementChange.fire(i))}get orthogonalStartSash(){return this._orthogonalStartSash}set orthogonalStartSash(i){if(this.orthogonalStartDragHandleDisposables.clear(),this.orthogonalStartSashDisposables.clear(),i){const n=t=>{this.orthogonalStartDragHandleDisposables.clear(),t!==0&&(this._orthogonalStartDragHandle=d.append(this.el,d.$(".orthogonal-drag-handle.start")),this.orthogonalStartDragHandleDisposables.add(b.toDisposable(()=>this._orthogonalStartDragHandle.remove())),g.domEvent(this._orthogonalStartDragHandle,"mouseenter")(()=>u.onMouseEnter(i),void 0,this.orthogonalStartDragHandleDisposables),g.domEvent(this._orthogonalStartDragHandle,"mouseleave")(()=>u.onMouseLeave(i),void 0,this.orthogonalStartDragHandleDisposables))};this.orthogonalStartSashDisposables.add(i.onDidEnablementChange(n,this)),n(i.state)}this._orthogonalStartSash=i}get orthogonalEndSash(){return this._orthogonalEndSash}set orthogonalEndSash(i){if(this.orthogonalEndDragHandleDisposables.clear(),this.orthogonalEndSashDisposables.clear(),i){const n=t=>{this.orthogonalEndDragHandleDisposables.clear(),t!==0&&(this._orthogonalEndDragHandle=d.append(this.el,d.$(".orthogonal-drag-handle.end")),this.orthogonalEndDragHandleDisposables.add(b.toDisposable(()=>this._orthogonalEndDragHandle.remove())),g.domEvent(this._orthogonalEndDragHandle,"mouseenter")(()=>u.onMouseEnter(i),void 0,this.orthogonalEndDragHandleDisposables),g.domEvent(this._orthogonalEndDragHandle,"mouseleave")(()=>u.onMouseLeave(i),void 0,this.orthogonalEndDragHandleDisposables))};this.orthogonalEndSashDisposables.add(i.onDidEnablementChange(n,this)),n(i.state)}this._orthogonalEndSash=i}onMouseDown(i){d.EventHelper.stop(i,!1);let n=!1;if(!i.__orthogonalSashEvent){const E=this.getOrthogonalSash(i);E&&(n=!0,i.__orthogonalSashEvent=!0,E.onMouseDown(i))}if(this.linkedSash&&!i.__linkedSashEvent&&(i.__linkedSashEvent=!0,this.linkedSash.onMouseDown(i)),!!this.state){const t=[...d.getElementsByTagName("iframe"),...d.getElementsByTagName("webview")];for(const E of t)E.style.pointerEvents="none";const l=new S.StandardMouseEvent(i),h=l.posx,m=l.posy,_=l.altKey,f={startX:h,currentX:h,startY:m,currentY:m,altKey:_};this.el.classList.add("active"),this._onDidStart.fire(f);const v=d.createStyleSheet(this.el),y=()=>{let E="";n?E="all-scroll":this.orientation===1?this.state===1?E="s-resize":this.state===2?E="n-resize":E=N.isMacintosh?"row-resize":"ns-resize":this.state===1?E="e-resize":this.state===2?E="w-resize":E=N.isMacintosh?"col-resize":"ew-resize",v.textContent=`* { cursor: ${E} !important; }`},L=new b.DisposableStore;y(),n||this.onDidEnablementChange(y,null,L);const I=E=>{d.EventHelper.stop(E,!1);const T=new S.StandardMouseEvent(E),O={startX:h,currentX:T.posx,startY:m,currentY:T.posy,altKey:_};this._onDidChange.fire(O)},k=E=>{d.EventHelper.stop(E,!1),this.el.removeChild(v),this.el.classList.remove("active"),this._onDidEnd.fire(),L.dispose();for(const T of t)T.style.pointerEvents="auto"};g.domEvent(window,"mousemove")(I,null,L),g.domEvent(window,"mouseup")(k,null,L)}}onMouseDoubleClick(i){const n=this.getOrthogonalSash(i);n&&n._onDidReset.fire(),this.linkedSash&&this.linkedSash._onDidReset.fire(),this._onDidReset.fire()}onTouchStart(i){d.EventHelper.stop(i);const n=[],t=i.pageX,l=i.pageY,h=i.altKey;this._onDidStart.fire({startX:t,currentX:t,startY:l,currentY:l,altKey:h}),n.push(d.addDisposableListener(this.el,w.EventType.Change,m=>{M.isNumber(m.pageX)&&M.isNumber(m.pageY)&&this._onDidChange.fire({startX:t,currentX:m.pageX,startY:l,currentY:m.pageY,altKey:h})})),n.push(d.addDisposableListener(this.el,w.EventType.End,()=>{this._onDidEnd.fire(),b.dispose(n)}))}static onMouseEnter(i,n=!1){i.el.classList.contains("active")?(i.hoverDelayer.cancel(),i.el.classList.add("hover")):i.hoverDelayer.trigger(()=>i.el.classList.add("hover")),!n&&i.linkedSash&&u.onMouseEnter(i.linkedSash,!0)}static onMouseLeave(i,n=!1){i.hoverDelayer.cancel(),i.el.classList.remove("hover"),!n&&i.linkedSash&&u.onMouseLeave(i.linkedSash,!0)}layout(){if(this.orientation===0){const i=this.layoutProvider;this.el.style.left=i.getVerticalSashLeft(this)-this.size/2+"px",i.getVerticalSashTop&&(this.el.style.top=i.getVerticalSashTop(this)+"px"),i.getVerticalSashHeight&&(this.el.style.height=i.getVerticalSashHeight(this)+"px")}else{const i=this.layoutProvider;this.el.style.top=i.getHorizontalSashTop(this)-this.size/2+"px",i.getHorizontalSashLeft&&(this.el.style.left=i.getHorizontalSashLeft(this)+"px"),i.getHorizontalSashWidth&&(this.el.style.width=i.getHorizontalSashWidth(this)+"px")}}hide(){this.hidden=!0,this.el.style.display="none",this.el.setAttribute("aria-hidden","true")}getOrthogonalSash(i){if(!(!i.target||!(i.target instanceof HTMLElement))&&i.target.classList.contains("orthogonal-drag-handle"))return i.target.classList.contains("start")?this.orthogonalStartSash:this.orthogonalEndSash}dispose(){super.dispose(),this.el.remove()}}e.Sash=u}),define(Q[311],J([10]),{}),define(Q[61],J([0,1,7,30,50,288,289,52,15,6,2,17,121,35,311]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DomScrollableElement=e.SmoothScrollableElement=e.ScrollableElement=e.AbstractScrollableElement=e.MouseWheelClassifier=void 0;const a=500,u=50,r=!0;class i{constructor(v,y,L){this.timestamp=v,this.deltaX=y,this.deltaY=L,this.score=0}}class n{constructor(){this._capacity=5,this._memory=[],this._front=-1,this._rear=-1}isPhysicalMouseWheel(){if(this._front===-1&&this._rear===-1)return!1;let v=1,y=0,L=1,I=this._rear;do{const k=I===this._front?v:Math.pow(2,-L);if(v-=k,y+=this._memory[I].score*k,I===this._front)break;I=(this._capacity+I-1)%this._capacity,L++}while(!0);return y<=.5}accept(v,y,L){const I=new i(v,y,L);I.score=this._computeScore(I),this._front===-1&&this._rear===-1?(this._memory[0]=I,this._front=0,this._rear=0):(this._rear=(this._rear+1)%this._capacity,this._rear===this._front&&(this._front=(this._front+1)%this._capacity),this._memory[this._rear]=I)}_computeScore(v){if(Math.abs(v.deltaX)>0&&Math.abs(v.deltaY)>0)return 1;let y=.5;const L=this._front===-1&&this._rear===-1?null:this._memory[this._rear];return(!this._isAlmostInt(v.deltaX)||!this._isAlmostInt(v.deltaY))&&(y+=.25),Math.min(Math.max(y,0),1)}_isAlmostInt(v){return Math.abs(Math.round(v)-v)<.01}}e.MouseWheelClassifier=n,n.INSTANCE=new n;class t extends C.Widget{constructor(v,y,L){super();this._onScroll=this._register(new g.Emitter),this.onScroll=this._onScroll.event,this._onWillScroll=this._register(new g.Emitter),v.style.overflow="hidden",this._options=_(y),this._scrollable=L,this._register(this._scrollable.onScroll(k=>{this._onWillScroll.fire(k),this._onDidScroll(k),this._onScroll.fire(k)}));const I={onMouseWheel:k=>this._onMouseWheel(k),onDragStart:()=>this._onDragStart(),onDragEnd:()=>this._onDragEnd()};this._verticalScrollbar=this._register(new S.VerticalScrollbar(this._scrollable,this._options,I)),this._horizontalScrollbar=this._register(new w.HorizontalScrollbar(this._scrollable,this._options,I)),this._domNode=document.createElement("div"),this._domNode.className="monaco-scrollable-element "+this._options.className,this._domNode.setAttribute("role","presentation"),this._domNode.style.position="relative",this._domNode.style.overflow="hidden",this._domNode.appendChild(v),this._domNode.appendChild(this._horizontalScrollbar.domNode.domNode),this._domNode.appendChild(this._verticalScrollbar.domNode.domNode),this._options.useShadows?(this._leftShadowDomNode=N.createFastDomNode(document.createElement("div")),this._leftShadowDomNode.setClassName("shadow"),this._domNode.appendChild(this._leftShadowDomNode.domNode),this._topShadowDomNode=N.createFastDomNode(document.createElement("div")),this._topShadowDomNode.setClassName("shadow"),this._domNode.appendChild(this._topShadowDomNode.domNode),this._topLeftShadowDomNode=N.createFastDomNode(document.createElement("div")),this._topLeftShadowDomNode.setClassName("shadow top-left-corner"),this._domNode.appendChild(this._topLeftShadowDomNode.domNode)):(this._leftShadowDomNode=null,this._topShadowDomNode=null,this._topLeftShadowDomNode=null),this._listenOnDomNode=this._options.listenOnDomNode||this._domNode,this._mouseWheelToDispose=[],this._setListeningToMouseWheel(this._options.handleMouseWheel),this.onmouseover(this._listenOnDomNode,k=>this._onMouseOver(k)),this.onnonbubblingmouseout(this._listenOnDomNode,k=>this._onMouseOut(k)),this._hideTimeout=this._register(new d.TimeoutTimer),this._isDragging=!1,this._mouseIsOver=!1,this._shouldRender=!0,this._revealOnScroll=!0}dispose(){this._mouseWheelToDispose=p.dispose(this._mouseWheelToDispose),super.dispose()}getDomNode(){return this._domNode}getOverviewRulerLayoutInfo(){return{parent:this._domNode,insertBefore:this._verticalScrollbar.domNode.domNode}}delegateVerticalScrollbarMouseDown(v){this._verticalScrollbar.delegateMouseDown(v)}getScrollDimensions(){return this._scrollable.getScrollDimensions()}setScrollDimensions(v){this._scrollable.setScrollDimensions(v,!1)}updateClassName(v){this._options.className=v,c.isMacintosh&&(this._options.className+=" mac"),this._domNode.className="monaco-scrollable-element "+this._options.className}updateOptions(v){typeof v.handleMouseWheel!="undefined"&&(this._options.handleMouseWheel=v.handleMouseWheel,this._setListeningToMouseWheel(this._options.handleMouseWheel)),typeof v.mouseWheelScrollSensitivity!="undefined"&&(this._options.mouseWheelScrollSensitivity=v.mouseWheelScrollSensitivity),typeof v.fastScrollSensitivity!="undefined"&&(this._options.fastScrollSensitivity=v.fastScrollSensitivity),typeof v.scrollPredominantAxis!="undefined"&&(this._options.scrollPredominantAxis=v.scrollPredominantAxis),typeof v.horizontalScrollbarSize!="undefined"&&this._horizontalScrollbar.updateScrollbarSize(v.horizontalScrollbarSize),this._options.lazyRender||this._render()}_setListeningToMouseWheel(v){if(this._mouseWheelToDispose.length>0!==v&&(this._mouseWheelToDispose=p.dispose(this._mouseWheelToDispose),v)){const L=I=>{this._onMouseWheel(new M.StandardWheelEvent(I))};this._mouseWheelToDispose.push(b.addDisposableListener(this._listenOnDomNode,b.EventType.MOUSE_WHEEL,L,{passive:!1}))}}_onMouseWheel(v){const y=n.INSTANCE;if(r){const k=window.devicePixelRatio/s.getZoomFactor();c.isWindows||c.isLinux?y.accept(Date.now(),v.deltaX/k,v.deltaY/k):y.accept(Date.now(),v.deltaX,v.deltaY)}let L=!1;if(v.deltaY||v.deltaX){let k=v.deltaY*this._options.mouseWheelScrollSensitivity,E=v.deltaX*this._options.mouseWheelScrollSensitivity;this._options.scrollPredominantAxis&&(Math.abs(k)>=Math.abs(E)?E=0:k=0),this._options.flipAxes&&([k,E]=[E,k]);const T=!c.isMacintosh&&v.browserEvent&&v.browserEvent.shiftKey;(this._options.scrollYToX||T)&&!E&&(E=k,k=0),v.browserEvent&&v.browserEvent.altKey&&(E=E*this._options.fastScrollSensitivity,k=k*this._options.fastScrollSensitivity);const O=this._scrollable.getFutureScrollPosition();let A={};if(k){const B=O.scrollTop-u*k;this._verticalScrollbar.writeScrollPosition(A,B)}if(E){const B=O.scrollLeft-u*E;this._horizontalScrollbar.writeScrollPosition(A,B)}A=this._scrollable.validateScrollPosition(A),(O.scrollLeft!==A.scrollLeft||O.scrollTop!==A.scrollTop)&&(r&&this._options.mouseWheelSmoothScroll&&y.isPhysicalMouseWheel()?this._scrollable.setScrollPositionSmooth(A):this._scrollable.setScrollPositionNow(A),L=!0)}let I=L;!I&&this._options.alwaysConsumeMouseWheel&&(I=!0),!I&&this._options.consumeMouseWheelIfScrollbarIsNeeded&&(this._verticalScrollbar.isNeeded()||this._horizontalScrollbar.isNeeded())&&(I=!0),I&&(v.preventDefault(),v.stopPropagation())}_onDidScroll(v){this._shouldRender=this._horizontalScrollbar.onDidScroll(v)||this._shouldRender,this._shouldRender=this._verticalScrollbar.onDidScroll(v)||this._shouldRender,this._options.useShadows&&(this._shouldRender=!0),this._revealOnScroll&&this._reveal(),this._options.lazyRender||this._render()}renderNow(){if(!this._options.lazyRender)throw new Error("Please use `lazyRender` together with `renderNow`!");this._render()}_render(){if(!!this._shouldRender&&(this._shouldRender=!1,this._horizontalScrollbar.render(),this._verticalScrollbar.render(),this._options.useShadows)){const v=this._scrollable.getCurrentScrollPosition(),y=v.scrollTop>0,L=v.scrollLeft>0;this._leftShadowDomNode.setClassName("shadow"+(L?" left":"")),this._topShadowDomNode.setClassName("shadow"+(y?" top":"")),this._topLeftShadowDomNode.setClassName("shadow top-left-corner"+(y?" top":"")+(L?" left":""))}}_onDragStart(){this._isDragging=!0,this._reveal()}_onDragEnd(){this._isDragging=!1,this._hide()}_onMouseOut(v){this._mouseIsOver=!1,this._hide()}_onMouseOver(v){this._mouseIsOver=!0,this._reveal()}_reveal(){this._verticalScrollbar.beginReveal(),this._horizontalScrollbar.beginReveal(),this._scheduleHide()}_hide(){!this._mouseIsOver&&!this._isDragging&&(this._verticalScrollbar.beginHide(),this._horizontalScrollbar.beginHide())}_scheduleHide(){!this._mouseIsOver&&!this._isDragging&&this._hideTimeout.cancelAndSet(()=>this._hide(),a)}}e.AbstractScrollableElement=t;class l extends t{constructor(v,y){y=y||{},y.mouseWheelSmoothScroll=!1;const L=new o.Scrollable(0,I=>b.scheduleAtNextAnimationFrame(I));super(v,y,L);this._register(L)}setScrollPosition(v){this._scrollable.setScrollPositionNow(v)}}e.ScrollableElement=l;class h extends t{constructor(v,y,L){super(v,y,L)}setScrollPosition(v){v.reuseAnimation?this._scrollable.setScrollPositionSmooth(v,v.reuseAnimation):this._scrollable.setScrollPositionNow(v)}getScrollPosition(){return this._scrollable.getCurrentScrollPosition()}}e.SmoothScrollableElement=h;class m extends l{constructor(v,y){super(v,y);this._element=v,this.onScroll(L=>{L.scrollTopChanged&&(this._element.scrollTop=L.scrollTop),L.scrollLeftChanged&&(this._element.scrollLeft=L.scrollLeft)}),this.scanDomNode()}scanDomNode(){this.setScrollDimensions({width:this._element.clientWidth,scrollWidth:this._element.scrollWidth,height:this._element.clientHeight,scrollHeight:this._element.scrollHeight}),this.setScrollPosition({scrollLeft:this._element.scrollLeft,scrollTop:this._element.scrollTop})}}e.DomScrollableElement=m;function _(f){const v={lazyRender:typeof f.lazyRender!="undefined"?f.lazyRender:!1,className:typeof f.className!="undefined"?f.className:"",useShadows:typeof f.useShadows!="undefined"?f.useShadows:!0,handleMouseWheel:typeof f.handleMouseWheel!="undefined"?f.handleMouseWheel:!0,flipAxes:typeof f.flipAxes!="undefined"?f.flipAxes:!1,consumeMouseWheelIfScrollbarIsNeeded:typeof f.consumeMouseWheelIfScrollbarIsNeeded!="undefined"?f.consumeMouseWheelIfScrollbarIsNeeded:!1,alwaysConsumeMouseWheel:typeof f.alwaysConsumeMouseWheel!="undefined"?f.alwaysConsumeMouseWheel:!1,scrollYToX:typeof f.scrollYToX!="undefined"?f.scrollYToX:!1,mouseWheelScrollSensitivity:typeof f.mouseWheelScrollSensitivity!="undefined"?f.mouseWheelScrollSensitivity:1,fastScrollSensitivity:typeof f.fastScrollSensitivity!="undefined"?f.fastScrollSensitivity:5,scrollPredominantAxis:typeof f.scrollPredominantAxis!="undefined"?f.scrollPredominantAxis:!0,mouseWheelSmoothScroll:typeof f.mouseWheelSmoothScroll!="undefined"?f.mouseWheelSmoothScroll:!0,arrowSize:typeof f.arrowSize!="undefined"?f.arrowSize:11,listenOnDomNode:typeof f.listenOnDomNode!="undefined"?f.listenOnDomNode:null,horizontal:typeof f.horizontal!="undefined"?f.horizontal:1,horizontalScrollbarSize:typeof f.horizontalScrollbarSize!="undefined"?f.horizontalScrollbarSize:10,horizontalSliderSize:typeof f.horizontalSliderSize!="undefined"?f.horizontalSliderSize:0,horizontalHasArrows:typeof f.horizontalHasArrows!="undefined"?f.horizontalHasArrows:!1,vertical:typeof f.vertical!="undefined"?f.vertical:1,verticalScrollbarSize:typeof f.verticalScrollbarSize!="undefined"?f.verticalScrollbarSize:10,verticalHasArrows:typeof f.verticalHasArrows!="undefined"?f.verticalHasArrows:!1,verticalSliderSize:typeof f.verticalSliderSize!="undefined"?f.verticalSliderSize:0,scrollByPage:typeof f.scrollByPage!="undefined"?f.scrollByPage:!1};return v.horizontalSliderSize=typeof f.horizontalSliderSize!="undefined"?f.horizontalSliderSize:v.horizontalScrollbarSize,v.verticalSliderSize=typeof f.verticalSliderSize!="undefined"?f.verticalSliderSize:v.verticalScrollbarSize,c.isMacintosh&&(v.className+=" mac"),v}}),define(Q[209],J([0,1,7,2,61,303]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.renderHoverAction=e.HoverWidget=void 0;const w=b.$;class S extends N.Disposable{constructor(){super();this.containerDomNode=document.createElement("div"),this.containerDomNode.className="monaco-hover",this.containerDomNode.tabIndex=0,this.containerDomNode.setAttribute("role","tooltip"),this.contentsDomNode=document.createElement("div"),this.contentsDomNode.className="monaco-hover-content",this._scrollbar=this._register(new M.DomScrollableElement(this.contentsDomNode,{consumeMouseWheelIfScrollbarIsNeeded:!0})),this.containerDomNode.appendChild(this._scrollbar.getDomNode())}onContentsChanged(){this._scrollbar.scanDomNode()}}e.HoverWidget=S;function C(d,g,p){const c=b.append(d,w("div.action-container")),o=b.append(c,w("a.action"));o.setAttribute("href","#"),o.setAttribute("role","button"),g.iconClass&&b.append(o,w(`span.icon.${g.iconClass}`));const s=b.append(o,w("span"));return s.textContent=p?`${g.label} (${p})`:g.label,b.addDisposableListener(c,b.EventType.CLICK,a=>{a.stopPropagation(),a.preventDefault(),g.run(c)})}e.renderHoverAction=C}),define(Q[161],J([0,1,40,2,60,6,55,61,121,281,287,99,120,19,149,15,35,7]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ListView=e.NativeDragAndDropData=e.ExternalElementsDragAndDropData=e.ElementsDragAndDropData=void 0;const n={useShadows:!0,verticalScrollMode:1,setRowLineHeight:!0,setRowHeight:!0,supportDynamicHeights:!1,dnd:{getDragElements(v){return[v]},getDragURI(){return null},onDragStart(){},onDragOver(){return!1},drop(){}},horizontalScrolling:!1,transformOptimization:!0,alwaysConsumeMouseWheel:!0};class t{constructor(y){this.elements=y}update(){}getData(){return this.elements}}e.ElementsDragAndDropData=t;class l{constructor(y){this.elements=y}update(){}getData(){return this.elements}}e.ExternalElementsDragAndDropData=l;class h{constructor(){this.types=[],this.files=[]}update(y){if(y.types&&this.types.splice(0,this.types.length,...y.types),y.files){this.files.splice(0,this.files.length);for(let L=0;Lk,(y==null?void 0:y.getPosInSet)?this.getPosInSet=y.getPosInSet.bind(y):this.getPosInSet=(L,I)=>I+1,(y==null?void 0:y.getRole)?this.getRole=y.getRole.bind(y):this.getRole=L=>"listitem",(y==null?void 0:y.isChecked)?this.isChecked=y.isChecked.bind(y):this.isChecked=L=>{}}}class f{constructor(y,L,I,k=n){if(this.virtualDelegate=L,this.domId=`list_id_${++f.InstanceCount}`,this.renderers=new Map,this.renderWidth=0,this._scrollHeight=0,this.scrollableElementUpdateDisposable=null,this.scrollableElementWidthDelayer=new u.Delayer(50),this.splicing=!1,this.dragOverAnimationStopDisposable=N.Disposable.None,this.dragOverMouseY=0,this.canDrop=!1,this.currentDragFeedbackDisposable=N.Disposable.None,this.onDragLeaveTimeout=N.Disposable.None,this.disposables=new N.DisposableStore,this._onDidChangeContentHeight=new w.Emitter,this._horizontalScrolling=!1,k.horizontalScrolling&&k.supportDynamicHeights)throw new Error("Horizontal scrolling and dynamic heights not supported simultaneously");this.items=[],this.itemId=0,this.rangeMap=new g.RangeMap;for(const T of I)this.renderers.set(T.templateId,T);this.cache=this.disposables.add(new p.RowCache(this.renderers)),this.lastRenderTop=0,this.lastRenderHeight=0,this.domNode=document.createElement("div"),this.domNode.className="monaco-list",this.domNode.classList.add(this.domId),this.domNode.tabIndex=0,this.domNode.classList.toggle("mouse-support",typeof k.mouseSupport=="boolean"?k.mouseSupport:!0),this._horizontalScrolling=b.getOrDefault(k,T=>T.horizontalScrolling,n.horizontalScrolling),this.domNode.classList.toggle("horizontal-scrolling",this._horizontalScrolling),this.additionalScrollHeight=typeof k.additionalScrollHeight=="undefined"?0:k.additionalScrollHeight,this.accessibilityProvider=new _(k.accessibilityProvider),this.rowsContainer=document.createElement("div"),this.rowsContainer.className="monaco-list-rows",b.getOrDefault(k,T=>T.transformOptimization,n.transformOptimization)&&(this.rowsContainer.style.transform="translate3d(0px, 0px, 0px)"),this.disposables.add(M.Gesture.addTarget(this.rowsContainer)),this.scrollable=new d.Scrollable(b.getOrDefault(k,T=>T.smoothScrolling,!1)?125:0,T=>i.scheduleAtNextAnimationFrame(T)),this.scrollableElement=this.disposables.add(new C.SmoothScrollableElement(this.rowsContainer,{alwaysConsumeMouseWheel:b.getOrDefault(k,T=>T.alwaysConsumeMouseWheel,n.alwaysConsumeMouseWheel),horizontal:1,vertical:b.getOrDefault(k,T=>T.verticalScrollMode,n.verticalScrollMode),useShadows:b.getOrDefault(k,T=>T.useShadows,n.useShadows)},this.scrollable)),this.domNode.appendChild(this.scrollableElement.getDomNode()),y.appendChild(this.domNode),this.scrollableElement.onScroll(this.onScroll,this,this.disposables),S.domEvent(this.rowsContainer,M.EventType.Change)(this.onTouchChange,this,this.disposables),S.domEvent(this.scrollableElement.getDomNode(),"scroll")(T=>T.target.scrollTop=0,null,this.disposables),w.Event.map(S.domEvent(this.domNode,"dragover"),T=>this.toDragEvent(T))(this.onDragOver,this,this.disposables),w.Event.map(S.domEvent(this.domNode,"drop"),T=>this.toDragEvent(T))(this.onDrop,this,this.disposables),S.domEvent(this.domNode,"dragleave")(this.onDragLeave,this,this.disposables),S.domEvent(window,"dragend")(this.onDragEnd,this,this.disposables),this.setRowLineHeight=b.getOrDefault(k,T=>T.setRowLineHeight,n.setRowLineHeight),this.setRowHeight=b.getOrDefault(k,T=>T.setRowHeight,n.setRowHeight),this.supportDynamicHeights=b.getOrDefault(k,T=>T.supportDynamicHeights,n.supportDynamicHeights),this.dnd=b.getOrDefault(k,T=>T.dnd,n.dnd),this.layout()}get contentHeight(){return this.rangeMap.size}get horizontalScrolling(){return this._horizontalScrolling}set horizontalScrolling(y){if(y!==this._horizontalScrolling){if(y&&this.supportDynamicHeights)throw new Error("Horizontal scrolling and dynamic heights not supported simultaneously");if(this._horizontalScrolling=y,this.domNode.classList.toggle("horizontal-scrolling",this._horizontalScrolling),this._horizontalScrolling){for(const L of this.items)this.measureItemWidth(L);this.updateScrollWidth(),this.scrollableElement.setScrollDimensions({width:i.getContentWidth(this.domNode)}),this.rowsContainer.style.width=`${Math.max(this.scrollWidth||0,this.renderWidth)}px`}else this.scrollableElementWidthDelayer.cancel(),this.scrollableElement.setScrollDimensions({width:this.renderWidth,scrollWidth:this.renderWidth}),this.rowsContainer.style.width=""}}updateOptions(y){y.additionalScrollHeight!==void 0&&(this.additionalScrollHeight=y.additionalScrollHeight),y.smoothScrolling!==void 0&&this.scrollable.setSmoothScrollDuration(y.smoothScrolling?125:0),y.horizontalScrolling!==void 0&&(this.horizontalScrolling=y.horizontalScrolling)}splice(y,L,I=[]){if(this.splicing)throw new Error("Can't run recursive splices.");this.splicing=!0;try{return this._splice(y,L,I)}finally{this.splicing=!1,this._onDidChangeContentHeight.fire(this.contentHeight)}}_splice(y,L,I=[]){const k=this.getRenderRange(this.lastRenderTop,this.lastRenderHeight),E={start:y,end:y+L},T=o.Range.intersect(k,E),O=new Map;for(let z=T.start;z({id:String(this.itemId++),element:z,templateId:this.virtualDelegate.getTemplateId(z),size:this.virtualDelegate.getHeight(z),width:void 0,hasDynamicHeight:!!this.virtualDelegate.hasDynamicHeight&&this.virtualDelegate.hasDynamicHeight(z),lastDynamicHeightWidth:void 0,row:null,uri:void 0,dropTarget:!1,dragStartDisposable:N.Disposable.None}));let R;y===0&&L>=this.items.length?(this.rangeMap=new g.RangeMap,this.rangeMap.splice(0,0,D),R=this.items,this.items=D):(this.rangeMap.splice(y,L,D),R=this.items.splice(y,L,...D));const W=I.length-L,x=this.getRenderRange(this.lastRenderTop,this.lastRenderHeight),K=g.shift(B,W),Y=o.Range.intersect(x,K);for(let z=Y.start;zg.shift(z,W)),le=[{start:y,end:y+I.length},...se].map(z=>o.Range.intersect(x,z)),X=this.getNextToLastElement(le);for(const z of le)for(let P=z.start;Pz.element)}eventuallyUpdateScrollDimensions(){this._scrollHeight=this.contentHeight,this.rowsContainer.style.height=`${this._scrollHeight}px`,this.scrollableElementUpdateDisposable||(this.scrollableElementUpdateDisposable=i.scheduleAtNextAnimationFrame(()=>{this.scrollableElement.setScrollDimensions({scrollHeight:this.scrollHeight}),this.updateScrollWidth(),this.scrollableElementUpdateDisposable=null}))}eventuallyUpdateScrollWidth(){if(!this.horizontalScrolling){this.scrollableElementWidthDelayer.cancel();return}this.scrollableElementWidthDelayer.trigger(()=>this.updateScrollWidth())}updateScrollWidth(){if(!!this.horizontalScrolling){let y=0;for(const L of this.items)typeof L.width!="undefined"&&(y=Math.max(y,L.width));this.scrollWidth=y,this.scrollableElement.setScrollDimensions({scrollWidth:y===0?0:y+10})}}rerender(){if(!!this.supportDynamicHeights){for(const y of this.items)y.lastDynamicHeightWidth=void 0;this._rerender(this.lastRenderTop,this.lastRenderHeight)}}get length(){return this.items.length}get renderHeight(){return this.scrollableElement.getScrollDimensions().height}element(y){return this.items[y].element}domElement(y){const L=this.items[y].row;return L&&L.domNode}elementHeight(y){return this.items[y].size}elementTop(y){return this.rangeMap.positionAt(y)}indexAt(y){return this.rangeMap.indexAt(y)}indexAfter(y){return this.rangeMap.indexAfter(y)}layout(y,L){let I={height:typeof y=="number"?y:i.getContentHeight(this.domNode)};this.scrollableElementUpdateDisposable&&(this.scrollableElementUpdateDisposable.dispose(),this.scrollableElementUpdateDisposable=null,I.scrollHeight=this.scrollHeight),this.scrollableElement.setScrollDimensions(I),typeof L!="undefined"&&(this.renderWidth=L,this.supportDynamicHeights&&this._rerender(this.scrollTop,this.renderHeight),this.horizontalScrolling&&this.scrollableElement.setScrollDimensions({width:typeof L=="number"?L:i.getContentWidth(this.domNode)}))}render(y,L,I,k,E,T=!1){const O=this.getRenderRange(L,I),A=o.Range.relativeComplement(O,y),B=o.Range.relativeComplement(y,O),F=this.getNextToLastElement(A);if(T){const D=o.Range.intersect(y,O);for(let R=D.start;Rthis.onDragStart(k.element,A,F))}this.horizontalScrolling&&(this.measureItemWidth(k),this.eventuallyUpdateScrollWidth())}measureItemWidth(y){if(!(!y.row||!y.row.domNode)){y.row.domNode.style.width=r.isFirefox?"-moz-fit-content":"fit-content",y.width=i.getContentWidth(y.row.domNode);const L=window.getComputedStyle(y.row.domNode);L.paddingLeft&&(y.width+=parseFloat(L.paddingLeft)),L.paddingRight&&(y.width+=parseFloat(L.paddingRight)),y.row.domNode.style.width=""}}updateItemInDOM(y,L){y.row.domNode.style.top=`${this.elementTop(L)}px`,this.setRowHeight&&(y.row.domNode.style.height=`${y.size}px`),this.setRowLineHeight&&(y.row.domNode.style.lineHeight=`${y.size}px`),y.row.domNode.setAttribute("data-index",`${L}`),y.row.domNode.setAttribute("data-last-element",L===this.length-1?"true":"false"),y.row.domNode.setAttribute("aria-setsize",String(this.accessibilityProvider.getSetSize(y.element,L,this.length))),y.row.domNode.setAttribute("aria-posinset",String(this.accessibilityProvider.getPosInSet(y.element,L))),y.row.domNode.setAttribute("id",this.getElementDomId(L)),y.row.domNode.classList.toggle("drop-target",y.dropTarget)}removeItemFromDOM(y){const L=this.items[y];if(L.dragStartDisposable.dispose(),L.row){const I=this.renderers.get(L.templateId);I&&I.disposeElement&&I.disposeElement(L.element,y,L.row.templateData,L.size),this.cache.release(L.row),L.row=null}this.horizontalScrolling&&this.eventuallyUpdateScrollWidth()}getScrollTop(){return this.scrollableElement.getScrollPosition().scrollTop}setScrollTop(y,L){this.scrollableElementUpdateDisposable&&(this.scrollableElementUpdateDisposable.dispose(),this.scrollableElementUpdateDisposable=null,this.scrollableElement.setScrollDimensions({scrollHeight:this.scrollHeight})),this.scrollableElement.setScrollPosition({scrollTop:y,reuseAnimation:L})}get scrollTop(){return this.getScrollTop()}set scrollTop(y){this.setScrollTop(y)}get scrollHeight(){return this._scrollHeight+(this.horizontalScrolling?10:0)+this.additionalScrollHeight}get onMouseClick(){return w.Event.map(S.domEvent(this.domNode,"click"),y=>this.toMouseEvent(y))}get onMouseDblClick(){return w.Event.map(S.domEvent(this.domNode,"dblclick"),y=>this.toMouseEvent(y))}get onMouseMiddleClick(){return w.Event.filter(w.Event.map(S.domEvent(this.domNode,"auxclick"),y=>this.toMouseEvent(y)),y=>y.browserEvent.button===1)}get onMouseDown(){return w.Event.map(S.domEvent(this.domNode,"mousedown"),y=>this.toMouseEvent(y))}get onContextMenu(){return w.Event.map(S.domEvent(this.domNode,"contextmenu"),y=>this.toMouseEvent(y))}get onTouchStart(){return w.Event.map(S.domEvent(this.domNode,"touchstart"),y=>this.toTouchEvent(y))}get onTap(){return w.Event.map(S.domEvent(this.rowsContainer,M.EventType.Tap),y=>this.toGestureEvent(y))}toMouseEvent(y){const L=this.getItemIndexFromEventTarget(y.target||null),I=typeof L=="undefined"?void 0:this.items[L],k=I&&I.element;return{browserEvent:y,index:L,element:k}}toTouchEvent(y){const L=this.getItemIndexFromEventTarget(y.target||null),I=typeof L=="undefined"?void 0:this.items[L],k=I&&I.element;return{browserEvent:y,index:L,element:k}}toGestureEvent(y){const L=this.getItemIndexFromEventTarget(y.initialTarget||null),I=typeof L=="undefined"?void 0:this.items[L],k=I&&I.element;return{browserEvent:y,index:L,element:k}}toDragEvent(y){const L=this.getItemIndexFromEventTarget(y.target||null),I=typeof L=="undefined"?void 0:this.items[L],k=I&&I.element;return{browserEvent:y,index:L,element:k}}onScroll(y){try{const L=this.getRenderRange(this.lastRenderTop,this.lastRenderHeight);this.render(L,y.scrollTop,y.height,y.scrollLeft,y.scrollWidth),this.supportDynamicHeights&&this._rerender(y.scrollTop,y.height,y.inSmoothScrolling)}catch(L){throw console.error("Got bad scroll event:",y),L}}onTouchChange(y){y.preventDefault(),y.stopPropagation(),this.scrollTop-=y.translationY}onDragStart(y,L,I){if(!!I.dataTransfer){const k=this.dnd.getDragElements(y);if(I.dataTransfer.effectAllowed="copyMove",I.dataTransfer.setData(a.DataTransfers.RESOURCES,JSON.stringify([L])),I.dataTransfer.setDragImage){let E;this.dnd.getDragLabel&&(E=this.dnd.getDragLabel(k,I)),typeof E=="undefined"&&(E=String(k.length));const T=i.$(".monaco-drag-image");T.textContent=E,document.body.appendChild(T),I.dataTransfer.setDragImage(T,-10,-10),setTimeout(()=>document.body.removeChild(T),0)}this.currentDragData=new t(k),a.StaticDND.CurrentDragAndDropData=new l(k),this.dnd.onDragStart&&this.dnd.onDragStart(this.currentDragData,I)}}onDragOver(y){if(y.browserEvent.preventDefault(),this.onDragLeaveTimeout.dispose(),a.StaticDND.CurrentDragAndDropData&&a.StaticDND.CurrentDragAndDropData.getData()==="vscode-ui"||(this.setupDragAndDropScrollTopAnimation(y.browserEvent),!y.browserEvent.dataTransfer))return!1;if(!this.currentDragData)if(a.StaticDND.CurrentDragAndDropData)this.currentDragData=a.StaticDND.CurrentDragAndDropData;else{if(!y.browserEvent.dataTransfer.types)return!1;this.currentDragData=new h}const L=this.dnd.onDragOver(this.currentDragData,y.element,y.index,y.browserEvent);if(this.canDrop=typeof L=="boolean"?L:L.accept,!this.canDrop)return this.currentDragFeedback=void 0,this.currentDragFeedbackDisposable.dispose(),!1;y.browserEvent.dataTransfer.dropEffect=typeof L!="boolean"&&L.effect===0?"copy":"move";let I;if(typeof L!="boolean"&&L.feedback?I=L.feedback:typeof y.index=="undefined"?I=[-1]:I=[y.index],I=s.distinct(I).filter(k=>k>=-1&&kk-E),I=I[0]===-1?[-1]:I,m(this.currentDragFeedback,I))return!0;if(this.currentDragFeedback=I,this.currentDragFeedbackDisposable.dispose(),I[0]===-1)this.domNode.classList.add("drop-target"),this.rowsContainer.classList.add("drop-target"),this.currentDragFeedbackDisposable=N.toDisposable(()=>{this.domNode.classList.remove("drop-target"),this.rowsContainer.classList.remove("drop-target")});else{for(const k of I){const E=this.items[k];E.dropTarget=!0,E.row&&E.row.domNode.classList.add("drop-target")}this.currentDragFeedbackDisposable=N.toDisposable(()=>{for(const k of I){const E=this.items[k];E.dropTarget=!1,E.row&&E.row.domNode.classList.remove("drop-target")}})}return!0}onDragLeave(){this.onDragLeaveTimeout.dispose(),this.onDragLeaveTimeout=u.disposableTimeout(()=>this.clearDragOverFeedback(),100)}onDrop(y){if(!!this.canDrop){const L=this.currentDragData;this.teardownDragAndDropScrollTopAnimation(),this.clearDragOverFeedback(),this.currentDragData=void 0,a.StaticDND.CurrentDragAndDropData=void 0,!(!L||!y.browserEvent.dataTransfer)&&(y.browserEvent.preventDefault(),L.update(y.browserEvent.dataTransfer),this.dnd.drop(L,y.element,y.index,y.browserEvent))}}onDragEnd(y){this.canDrop=!1,this.teardownDragAndDropScrollTopAnimation(),this.clearDragOverFeedback(),this.currentDragData=void 0,a.StaticDND.CurrentDragAndDropData=void 0,this.dnd.onDragEnd&&this.dnd.onDragEnd(y)}clearDragOverFeedback(){this.currentDragFeedback=void 0,this.currentDragFeedbackDisposable.dispose(),this.currentDragFeedbackDisposable=N.Disposable.None}setupDragAndDropScrollTopAnimation(y){if(!this.dragOverAnimationDisposable){const L=i.getTopLeftOffset(this.domNode).top;this.dragOverAnimationDisposable=i.animate(this.animateDragAndDropScrollTop.bind(this,L))}this.dragOverAnimationStopDisposable.dispose(),this.dragOverAnimationStopDisposable=u.disposableTimeout(()=>{this.dragOverAnimationDisposable&&(this.dragOverAnimationDisposable.dispose(),this.dragOverAnimationDisposable=void 0)},1e3),this.dragOverMouseY=y.pageY}animateDragAndDropScrollTop(y){if(this.dragOverMouseY!==void 0){const L=this.dragOverMouseY-y,I=this.renderHeight-35;L<35?this.scrollTop+=Math.max(-14,Math.floor(.3*(L-35))):L>I&&(this.scrollTop+=Math.min(14,Math.floor(.3*(L-I))))}}teardownDragAndDropScrollTopAnimation(){this.dragOverAnimationStopDisposable.dispose(),this.dragOverAnimationDisposable&&(this.dragOverAnimationDisposable.dispose(),this.dragOverAnimationDisposable=void 0)}getItemIndexFromEventTarget(y){const L=this.scrollableElement.getDomNode();let I=y;for(;I instanceof HTMLElement&&I!==this.rowsContainer&&L.contains(I);){const k=I.getAttribute("data-index");if(k){const E=Number(k);if(!isNaN(E))return E}I=I.parentElement}}getRenderRange(y,L){return{start:this.rangeMap.indexAt(y),end:this.rangeMap.indexAfter(y+L-1)}}_rerender(y,L,I){const k=this.getRenderRange(y,L);let E,T;y===this.elementTop(k.start)?(E=k.start,T=0):k.end-k.start>1&&(E=k.start+1,T=this.elementTop(E)-y);let O=0;for(;;){const A=this.getRenderRange(y,L);let B=!1;for(let F=A.start;FH.templateData===V);if(U>=0){const H=this.renderedElements[U];this.trait.unrender(V),H.index=P}else{const H={index:P,templateData:V};this.renderedElements.push(H)}this.trait.renderIndex(P,V)}splice(z,P,V){const U=[];for(const H of this.renderedElements)H.index=z+P&&U.push({index:H.index+V-P,templateData:H.templateData});this.renderedElements=U}renderIndexes(z){for(const{index:P,templateData:V}of this.renderedElements)z.indexOf(P)>-1&&this.trait.renderIndex(P,V)}disposeTemplate(z){const P=this.renderedElements.findIndex(V=>V.templateData===z);P<0||this.renderedElements.splice(P,1)}}class h{constructor(z){this._trait=z,this.indexes=[],this.sortedIndexes=[],this._onChange=new g.Emitter,this.onChange=this._onChange.event}get trait(){return this._trait}get renderer(){return new l(this)}splice(z,P,V){const U=V.length-P,H=z+P,$=[...this.sortedIndexes.filter(ie=>ieie?oe+z:-1).filter(ie=>ie!==-1),...this.sortedIndexes.filter(ie=>ie>=H).map(ie=>ie+U)];this.renderer.splice(z,P,V.length),this._set($,$)}renderIndex(z,P){P.classList.toggle(this._trait,this.contains(z))}unrender(z){z.classList.remove(this._trait)}set(z,P){return this._set(z,[...z].sort(Y),P)}_set(z,P,V){const U=this.indexes,H=this.sortedIndexes;this.indexes=z,this.sortedIndexes=P;const $=x(H,z);return this.renderer.renderIndexes($),this._onChange.fire({indexes:z,browserEvent:V}),U}get(){return this.indexes}contains(z){return M.binarySearch(this.sortedIndexes,z,Y)>=0}dispose(){b.dispose(this._onChange)}}Me([w.memoize],h.prototype,"renderer",null);class m extends h{constructor(z){super("selected");this.setAriaSelected=z}renderIndex(z,P){super.renderIndex(z,P),this.setAriaSelected&&(this.contains(z)?P.setAttribute("aria-selected","true"):P.setAttribute("aria-selected","false"))}}class _{constructor(z,P,V){this.trait=z,this.view=P,this.identityProvider=V}splice(z,P,V){if(!this.identityProvider)return this.trait.splice(z,P,V.map(()=>!1));const U=this.trait.get().map($=>this.identityProvider.getId(this.view.element($)).toString()),H=V.map($=>U.indexOf(this.identityProvider.getId($).toString())>-1);this.trait.splice(z,P,H)}}function f(X){return X.tagName==="INPUT"||X.tagName==="TEXTAREA"}e.isInputElement=f;function v(X){return X.classList.contains("monaco-editor")?!0:X.classList.contains("monaco-list")||!X.parentElement?!1:v(X.parentElement)}e.isMonacoEditor=v;class y{constructor(z,P,V){this.list=z,this.view=P,this.disposables=new b.DisposableStore;const U=V.multipleSelectionSupport!==!1,H=g.Event.chain(p.domEvent(P.domNode,"keydown")).filter($=>!f($.target)).map($=>new d.StandardKeyboardEvent($));H.filter($=>$.keyCode===3).on(this.onEnter,this,this.disposables),H.filter($=>$.keyCode===16).on(this.onUpArrow,this,this.disposables),H.filter($=>$.keyCode===18).on(this.onDownArrow,this,this.disposables),H.filter($=>$.keyCode===11).on(this.onPageUpArrow,this,this.disposables),H.filter($=>$.keyCode===12).on(this.onPageDownArrow,this,this.disposables),H.filter($=>$.keyCode===9).on(this.onEscape,this,this.disposables),U&&H.filter($=>(S.isMacintosh?$.metaKey:$.ctrlKey)&&$.keyCode===31).on(this.onCtrlA,this,this.disposables)}onEnter(z){z.preventDefault(),z.stopPropagation(),this.list.setSelection(this.list.getFocus(),z.browserEvent)}onUpArrow(z){z.preventDefault(),z.stopPropagation(),this.list.focusPrevious(1,!1,z.browserEvent),this.list.reveal(this.list.getFocus()[0]),this.view.domNode.focus()}onDownArrow(z){z.preventDefault(),z.stopPropagation(),this.list.focusNext(1,!1,z.browserEvent),this.list.reveal(this.list.getFocus()[0]),this.view.domNode.focus()}onPageUpArrow(z){z.preventDefault(),z.stopPropagation(),this.list.focusPreviousPage(z.browserEvent),this.list.reveal(this.list.getFocus()[0]),this.view.domNode.focus()}onPageDownArrow(z){z.preventDefault(),z.stopPropagation(),this.list.focusNextPage(z.browserEvent),this.list.reveal(this.list.getFocus()[0]),this.view.domNode.focus()}onCtrlA(z){z.preventDefault(),z.stopPropagation(),this.list.setSelection(M.range(this.list.length),z.browserEvent),this.view.domNode.focus()}onEscape(z){this.list.getSelection().length&&(z.preventDefault(),z.stopPropagation(),this.list.setSelection([],z.browserEvent),this.view.domNode.focus())}dispose(){this.disposables.dispose()}}var L;(function(X){X[X.Idle=0]="Idle",X[X.Typing=1]="Typing"})(L||(L={})),e.DefaultKeyboardNavigationDelegate=new class{mightProducePrintableCharacter(X){return X.ctrlKey||X.metaKey||X.altKey?!1:X.keyCode>=31&&X.keyCode<=56||X.keyCode>=21&&X.keyCode<=30||X.keyCode>=93&&X.keyCode<=102||X.keyCode>=80&&X.keyCode<=90}};class I{constructor(z,P,V,U){this.list=z,this.view=P,this.keyboardNavigationLabelProvider=V,this.delegate=U,this.enabled=!1,this.state=L.Idle,this.automaticKeyboardNavigation=!0,this.triggered=!1,this.previouslyFocused=-1,this.enabledDisposables=new b.DisposableStore,this.disposables=new b.DisposableStore,this.updateOptions(z.options)}updateOptions(z){(typeof z.enableKeyboardNavigation=="undefined"?!0:!!z.enableKeyboardNavigation)?this.enable():this.disable(),typeof z.automaticKeyboardNavigation!="undefined"&&(this.automaticKeyboardNavigation=z.automaticKeyboardNavigation)}enable(){if(!this.enabled){const z=g.Event.chain(p.domEvent(this.view.domNode,"keydown")).filter(U=>!f(U.target)).filter(()=>this.automaticKeyboardNavigation||this.triggered).map(U=>new d.StandardKeyboardEvent(U)).filter(U=>this.delegate.mightProducePrintableCharacter(U)).forEach(U=>{U.stopPropagation(),U.preventDefault()}).map(U=>U.browserEvent.key).event,P=g.Event.debounce(z,()=>null,800);g.Event.reduce(g.Event.any(z,P),(U,H)=>H===null?null:(U||"")+H)(this.onInput,this,this.enabledDisposables),P(this.onClear,this,this.enabledDisposables),this.enabled=!0,this.triggered=!1}}disable(){!this.enabled||(this.enabledDisposables.clear(),this.enabled=!1,this.triggered=!1)}onClear(){var z;const P=this.list.getFocus();if(P.length>0&&P[0]===this.previouslyFocused){const V=(z=this.list.options.accessibilityProvider)===null||z===void 0?void 0:z.getAriaLabel(this.list.element(P[0]));V&&n.alert(V)}this.previouslyFocused=-1}onInput(z){if(!z){this.state=L.Idle,this.triggered=!1;return}const P=this.list.getFocus(),V=P.length>0?P[0]:0,U=this.state===L.Idle?1:0;this.state=L.Typing;for(let H=0;H!f(U.target)).map(U=>new d.StandardKeyboardEvent(U)).filter(U=>U.keyCode===2&&!U.ctrlKey&&!U.metaKey&&!U.shiftKey&&!U.altKey).on(this.onTab,this,this.disposables)}onTab(z){if(z.target===this.view.domNode){const P=this.list.getFocus();if(P.length!==0){const V=this.view.domElement(P[0]);if(!!V){const U=V.querySelector("[tabIndex]");if(!(!U||!(U instanceof HTMLElement)||U.tabIndex===-1)){const H=window.getComputedStyle(U);H.visibility==="hidden"||H.display==="none"||(z.preventDefault(),z.stopPropagation(),U.focus())}}}}}dispose(){this.disposables.dispose()}}function E(X){return S.isMacintosh?X.browserEvent.metaKey:X.browserEvent.ctrlKey}e.isSelectionSingleChangeEvent=E;function T(X){return X.browserEvent.shiftKey}e.isSelectionRangeChangeEvent=T;function O(X){return X instanceof MouseEvent&&X.button===2}const A={isSelectionSingleChangeEvent:E,isSelectionRangeChangeEvent:T};class B{constructor(z){this.list=z,this.disposables=new b.DisposableStore,this._onPointer=new g.Emitter,this.onPointer=this._onPointer.event,this.multipleSelectionSupport=z.options.multipleSelectionSupport!==!1,this.multipleSelectionSupport&&(this.multipleSelectionController=z.options.multipleSelectionController||A),this.mouseSupport=typeof z.options.mouseSupport=="undefined"||!!z.options.mouseSupport,this.mouseSupport&&(z.onMouseDown(this.onMouseDown,this,this.disposables),z.onContextMenu(this.onContextMenu,this,this.disposables),z.onMouseDblClick(this.onDoubleClick,this,this.disposables),z.onTouchStart(this.onMouseDown,this,this.disposables),this.disposables.add(C.Gesture.addTarget(z.getHTMLElement()))),g.Event.any(z.onMouseClick,z.onMouseMiddleClick,z.onTap)(this.onViewPointer,this,this.disposables)}isSelectionSingleChangeEvent(z){return this.multipleSelectionController?this.multipleSelectionController.isSelectionSingleChangeEvent(z):S.isMacintosh?z.browserEvent.metaKey:z.browserEvent.ctrlKey}isSelectionRangeChangeEvent(z){return this.multipleSelectionController?this.multipleSelectionController.isSelectionRangeChangeEvent(z):z.browserEvent.shiftKey}isSelectionChangeEvent(z){return this.isSelectionSingleChangeEvent(z)||this.isSelectionRangeChangeEvent(z)}onMouseDown(z){v(z.browserEvent.target)||document.activeElement!==z.browserEvent.target&&this.list.domFocus()}onContextMenu(z){if(!v(z.browserEvent.target)){const P=typeof z.index=="undefined"?[]:[z.index];this.list.setFocus(P,z.browserEvent)}}onViewPointer(z){if(!!this.mouseSupport&&!(f(z.browserEvent.target)||v(z.browserEvent.target))){let P=this.list.getFocus()[0];const V=this.list.getSelection();P=P===void 0?V[0]:P;const U=z.index;if(typeof U=="undefined"){this.list.setFocus([],z.browserEvent),this.list.setSelection([],z.browserEvent);return}if(this.multipleSelectionSupport&&this.isSelectionRangeChangeEvent(z))return this.changeSelection(z,P);if(this.multipleSelectionSupport&&this.isSelectionChangeEvent(z))return this.changeSelection(z,P);this.list.setFocus([U],z.browserEvent),O(z.browserEvent)||this.list.setSelection([U],z.browserEvent),this._onPointer.fire(z)}}onDoubleClick(z){if(!(f(z.browserEvent.target)||v(z.browserEvent.target))&&!(this.multipleSelectionSupport&&this.isSelectionChangeEvent(z))){const P=this.list.getFocus();this.list.setSelection(P,z.browserEvent)}}changeSelection(z,P){const V=z.index;if(this.isSelectionRangeChangeEvent(z)&&P!==void 0){const U=Math.min(P,V),H=Math.max(P,V),$=M.range(U,H+1),ie=this.list.getSelection(),oe=W(x(ie,[P]),P);if(oe.length===0)return;const ae=x($,K(ie,oe));this.list.setSelection(ae,z.browserEvent)}else if(this.isSelectionSingleChangeEvent(z)){const U=this.list.getSelection(),H=U.filter($=>$!==V);this.list.setFocus([V]),U.length===H.length?this.list.setSelection([...H,V],z.browserEvent):this.list.setSelection(H,z.browserEvent)}}dispose(){this.disposables.dispose()}}e.MouseController=B;class F{constructor(z,P){this.styleElement=z,this.selectorSuffix=P}style(z){const P=this.selectorSuffix&&`.${this.selectorSuffix}`,V=[];z.listBackground&&(z.listBackground.isOpaque()?V.push(`.monaco-list${P} .monaco-list-rows { background: ${z.listBackground}; }`):S.isMacintosh||console.warn(`List with id '${this.selectorSuffix}' was styled with a non-opaque background color. This will break sub-pixel antialiasing.`)),z.listFocusBackground&&(V.push(`.monaco-list${P}:focus .monaco-list-row.focused { background-color: ${z.listFocusBackground}; }`),V.push(`.monaco-list${P}:focus .monaco-list-row.focused:hover { background-color: ${z.listFocusBackground}; }`)),z.listFocusForeground&&V.push(`.monaco-list${P}:focus .monaco-list-row.focused { color: ${z.listFocusForeground}; }`),z.listActiveSelectionBackground&&(V.push(`.monaco-list${P}:focus .monaco-list-row.selected { background-color: ${z.listActiveSelectionBackground}; }`),V.push(`.monaco-list${P}:focus .monaco-list-row.selected:hover { background-color: ${z.listActiveSelectionBackground}; }`)),z.listActiveSelectionForeground&&V.push(`.monaco-list${P}:focus .monaco-list-row.selected { color: ${z.listActiveSelectionForeground}; }`),z.listFocusAndSelectionBackground&&V.push(` + .monaco-drag-image, + .monaco-list${P}:focus .monaco-list-row.selected.focused { background-color: ${z.listFocusAndSelectionBackground}; } + `),z.listFocusAndSelectionForeground&&V.push(` + .monaco-drag-image, + .monaco-list${P}:focus .monaco-list-row.selected.focused { color: ${z.listFocusAndSelectionForeground}; } + `),z.listInactiveFocusForeground&&(V.push(`.monaco-list${P} .monaco-list-row.focused { color: ${z.listInactiveFocusForeground}; }`),V.push(`.monaco-list${P} .monaco-list-row.focused:hover { color: ${z.listInactiveFocusForeground}; }`)),z.listInactiveFocusBackground&&(V.push(`.monaco-list${P} .monaco-list-row.focused { background-color: ${z.listInactiveFocusBackground}; }`),V.push(`.monaco-list${P} .monaco-list-row.focused:hover { background-color: ${z.listInactiveFocusBackground}; }`)),z.listInactiveSelectionBackground&&(V.push(`.monaco-list${P} .monaco-list-row.selected { background-color: ${z.listInactiveSelectionBackground}; }`),V.push(`.monaco-list${P} .monaco-list-row.selected:hover { background-color: ${z.listInactiveSelectionBackground}; }`)),z.listInactiveSelectionForeground&&V.push(`.monaco-list${P} .monaco-list-row.selected { color: ${z.listInactiveSelectionForeground}; }`),z.listHoverBackground&&V.push(`.monaco-list${P}:not(.drop-target) .monaco-list-row:hover:not(.selected):not(.focused) { background-color: ${z.listHoverBackground}; }`),z.listHoverForeground&&V.push(`.monaco-list${P} .monaco-list-row:hover:not(.selected):not(.focused) { color: ${z.listHoverForeground}; }`),z.listSelectionOutline&&V.push(`.monaco-list${P} .monaco-list-row.selected { outline: 1px dotted ${z.listSelectionOutline}; outline-offset: -1px; }`),z.listFocusOutline&&V.push(` + .monaco-drag-image, + .monaco-list${P}:focus .monaco-list-row.focused { outline: 1px solid ${z.listFocusOutline}; outline-offset: -1px; } + `),z.listInactiveFocusOutline&&V.push(`.monaco-list${P} .monaco-list-row.focused { outline: 1px dotted ${z.listInactiveFocusOutline}; outline-offset: -1px; }`),z.listHoverOutline&&V.push(`.monaco-list${P} .monaco-list-row:hover { outline: 1px dashed ${z.listHoverOutline}; outline-offset: -1px; }`),z.listDropBackground&&V.push(` + .monaco-list${P}.drop-target, + .monaco-list${P} .monaco-list-rows.drop-target, + .monaco-list${P} .monaco-list-row.drop-target { background-color: ${z.listDropBackground} !important; color: inherit !important; } + `),z.listFilterWidgetBackground&&V.push(`.monaco-list-type-filter { background-color: ${z.listFilterWidgetBackground} }`),z.listFilterWidgetOutline&&V.push(`.monaco-list-type-filter { border: 1px solid ${z.listFilterWidgetOutline}; }`),z.listFilterWidgetNoMatchesOutline&&V.push(`.monaco-list-type-filter.no-matches { border: 1px solid ${z.listFilterWidgetNoMatchesOutline}; }`),z.listMatchesShadow&&V.push(`.monaco-list-type-filter { box-shadow: 1px 1px 1px ${z.listMatchesShadow}; }`),z.tableColumnsBorder&&V.push(` + .monaco-table:hover > .monaco-split-view2, + .monaco-table:hover > .monaco-split-view2 .monaco-sash.vertical::before { + border-color: ${z.tableColumnsBorder}; + }`),this.styleElement.textContent=V.join(` +`)}}e.DefaultStyleController=F;const D={listFocusBackground:s.Color.fromHex("#7FB0D0"),listActiveSelectionBackground:s.Color.fromHex("#0E639C"),listActiveSelectionForeground:s.Color.fromHex("#FFFFFF"),listFocusAndSelectionBackground:s.Color.fromHex("#094771"),listFocusAndSelectionForeground:s.Color.fromHex("#FFFFFF"),listInactiveSelectionBackground:s.Color.fromHex("#3F3F46"),listHoverBackground:s.Color.fromHex("#2A2D2E"),listDropBackground:s.Color.fromHex("#383B3D"),treeIndentGuidesStroke:s.Color.fromHex("#a9a9a9"),tableColumnsBorder:s.Color.fromHex("#cccccc").transparent(.2)},R={keyboardSupport:!0,mouseSupport:!0,multipleSelectionSupport:!0,dnd:{getDragURI(){return null},onDragStart(){},onDragOver(){return!1},drop(){}}};function W(X,z){const P=X.indexOf(z);if(P===-1)return[];const V=[];let U=P-1;for(;U>=0&&X[U]===z-(P-U);)V.push(X[U--]);for(V.reverse(),U=P;U=X.length)P.push(z[U++]);else if(U>=z.length)P.push(X[V++]);else if(X[V]===z[U]){P.push(X[V]),V++,U++;continue}else X[V]=X.length)P.push(z[U++]);else if(U>=z.length)P.push(X[V++]);else if(X[V]===z[U]){V++,U++;continue}else X[V]X-z;class ee{constructor(z,P){this._templateId=z,this.renderers=P}get templateId(){return this._templateId}renderTemplate(z){return this.renderers.map(P=>P.renderTemplate(z))}renderElement(z,P,V,U){let H=0;for(const $ of this.renderers)$.renderElement(z,P,V[H++],U)}disposeElement(z,P,V,U){let H=0;for(const $ of this.renderers)$.disposeElement&&$.disposeElement(z,P,V[H],U),H+=1}disposeTemplate(z){let P=0;for(const V of this.renderers)V.disposeTemplate(z[P++])}}class se{constructor(z){this.accessibilityProvider=z,this.templateId="a18n"}renderTemplate(z){return z}renderElement(z,P,V){const U=this.accessibilityProvider.getAriaLabel(z);U?V.setAttribute("aria-label",U):V.removeAttribute("aria-label");const H=this.accessibilityProvider.getAriaLevel&&this.accessibilityProvider.getAriaLevel(z);typeof H=="number"?V.setAttribute("aria-level",`${H}`):V.removeAttribute("aria-level")}disposeTemplate(z){}}class ne{constructor(z,P){this.list=z,this.dnd=P}getDragElements(z){const P=this.list.getSelectedElements();return P.indexOf(z)>-1?P:[z]}getDragURI(z){return this.dnd.getDragURI(z)}getDragLabel(z,P){if(this.dnd.getDragLabel)return this.dnd.getDragLabel(z,P)}onDragStart(z,P){this.dnd.onDragStart&&this.dnd.onDragStart(z,P)}onDragOver(z,P,V,U){return this.dnd.onDragOver(z,P,V,U)}onDragEnd(z){this.dnd.onDragEnd&&this.dnd.onDragEnd(z)}drop(z,P,V,U){this.dnd.drop(z,P,V,U)}}class le{constructor(z,P,V,U,H=R){var $;this.user=z,this._options=H,this.eventBufferer=new g.EventBufferer,this._ariaLabel="",this.disposables=new b.DisposableStore,this._onDidDispose=new g.Emitter,this.onDidDispose=this._onDidDispose.event;const ie=this._options.accessibilityProvider&&this._options.accessibilityProvider.getWidgetRole?($=this._options.accessibilityProvider)===null||$===void 0?void 0:$.getWidgetRole():"list";this.selection=new m(ie!=="listbox"),this.focus=new h("focused"),a.mixin(H,D,!1);const oe=[this.focus.renderer,this.selection.renderer];this.accessibilityProvider=H.accessibilityProvider,this.accessibilityProvider&&(oe.push(new se(this.accessibilityProvider)),this.accessibilityProvider.onDidChangeActiveDescendant&&this.accessibilityProvider.onDidChangeActiveDescendant(this.onDidChangeActiveDescendant,this,this.disposables)),U=U.map(G=>new ee(G.templateId,[...oe,G]));const ae=Object.assign(Object.assign({},H),{dnd:H.dnd&&new ne(this,H.dnd)});if(this.view=new o.ListView(P,V,U,ae),this.view.domNode.setAttribute("role",ie),H.styleController)this.styleController=H.styleController(this.view.domId);else{const G=t.createStyleSheet(this.view.domNode);this.styleController=new F(G,this.view.domId)}if(this.spliceable=new u.CombinedSpliceable([new _(this.focus,this.view,H.identityProvider),new _(this.selection,this.view,H.identityProvider),this.view]),this.disposables.add(this.focus),this.disposables.add(this.selection),this.disposables.add(this.view),this.disposables.add(this._onDidDispose),this.onDidFocus=g.Event.map(p.domEvent(this.view.domNode,"focus",!0),()=>null),this.onDidBlur=g.Event.map(p.domEvent(this.view.domNode,"blur",!0),()=>null),this.disposables.add(new k(this,this.view)),typeof H.keyboardSupport!="boolean"||H.keyboardSupport){const G=new y(this,this.view,H);this.disposables.add(G)}if(H.keyboardNavigationLabelProvider){const G=H.keyboardNavigationDelegate||e.DefaultKeyboardNavigationDelegate;this.typeLabelController=new I(this,this.view,H.keyboardNavigationLabelProvider,G),this.disposables.add(this.typeLabelController)}this.mouseController=this.createMouseController(H),this.disposables.add(this.mouseController),this.onDidChangeFocus(this._onFocusChange,this,this.disposables),this.onDidChangeSelection(this._onSelectionChange,this,this.disposables),this.accessibilityProvider&&(this.ariaLabel=this.accessibilityProvider.getWidgetAriaLabel()),H.multipleSelectionSupport&&this.view.domNode.setAttribute("aria-multiselectable","true")}get onDidChangeFocus(){return g.Event.map(this.eventBufferer.wrapEvent(this.focus.onChange),z=>this.toListEvent(z))}get onDidChangeSelection(){return g.Event.map(this.eventBufferer.wrapEvent(this.selection.onChange),z=>this.toListEvent(z))}get domId(){return this.view.domId}get onMouseClick(){return this.view.onMouseClick}get onMouseDblClick(){return this.view.onMouseDblClick}get onMouseMiddleClick(){return this.view.onMouseMiddleClick}get onPointer(){return this.mouseController.onPointer}get onMouseDown(){return this.view.onMouseDown}get onTouchStart(){return this.view.onTouchStart}get onTap(){return this.view.onTap}get onContextMenu(){let z=!1;const P=g.Event.chain(p.domEvent(this.view.domNode,"keydown")).map(H=>new d.StandardKeyboardEvent(H)).filter(H=>z=H.keyCode===58||H.shiftKey&&H.keyCode===68).map(p.stopEvent).filter(()=>!1).event,V=g.Event.chain(p.domEvent(this.view.domNode,"keyup")).forEach(()=>z=!1).map(H=>new d.StandardKeyboardEvent(H)).filter(H=>H.keyCode===58||H.shiftKey&&H.keyCode===68).map(p.stopEvent).map(({browserEvent:H})=>{const $=this.getFocus(),ie=$.length?$[0]:void 0,oe=typeof ie!="undefined"?this.view.element(ie):void 0,ae=typeof ie!="undefined"?this.view.domElement(ie):this.view.domNode;return{index:ie,element:oe,anchor:ae,browserEvent:H}}).event,U=g.Event.chain(this.view.onContextMenu).filter(H=>!z).map(({element:H,index:$,browserEvent:ie})=>({element:H,index:$,anchor:{x:ie.clientX+1,y:ie.clientY},browserEvent:ie})).event;return g.Event.any(P,V,U)}get onKeyDown(){return p.domEvent(this.view.domNode,"keydown")}createMouseController(z){return new B(this)}updateOptions(z={}){this._options=Object.assign(Object.assign({},this._options),z),this.typeLabelController&&this.typeLabelController.updateOptions(this._options),this.view.updateOptions(z)}get options(){return this._options}splice(z,P,V=[]){if(z<0||z>this.view.length)throw new c.ListError(this.user,`Invalid start index: ${z}`);if(P<0)throw new c.ListError(this.user,`Invalid delete count: ${P}`);P===0&&V.length===0||this.eventBufferer.bufferEvents(()=>this.spliceable.splice(z,P,V))}rerender(){this.view.rerender()}element(z){return this.view.element(z)}get length(){return this.view.length}get contentHeight(){return this.view.contentHeight}get scrollTop(){return this.view.getScrollTop()}set scrollTop(z){this.view.setScrollTop(z)}get ariaLabel(){return this._ariaLabel}set ariaLabel(z){this._ariaLabel=z,this.view.domNode.setAttribute("aria-label",z)}domFocus(){this.view.domNode.focus({preventScroll:!0})}layout(z,P){this.view.layout(z,P)}setSelection(z,P){for(const V of z)if(V<0||V>=this.length)throw new c.ListError(this.user,`Invalid index ${V}`);this.selection.set(z,P)}getSelection(){return this.selection.get()}getSelectedElements(){return this.getSelection().map(z=>this.view.element(z))}setFocus(z,P){for(const V of z)if(V<0||V>=this.length)throw new c.ListError(this.user,`Invalid index ${V}`);this.focus.set(z,P)}focusNext(z=1,P=!1,V,U){if(this.length!==0){const H=this.focus.get(),$=this.findNextIndex(H.length>0?H[0]+z:0,P,U);$>-1&&this.setFocus([$],V)}}focusPrevious(z=1,P=!1,V,U){if(this.length!==0){const H=this.focus.get(),$=this.findPreviousIndex(H.length>0?H[0]-z:0,P,U);$>-1&&this.setFocus([$],V)}}focusNextPage(z,P){let V=this.view.indexAt(this.view.getScrollTop()+this.view.renderHeight);V=V===0?0:V-1;const U=this.view.element(V),H=this.getFocusedElements()[0];if(H!==U){const $=this.findPreviousIndex(V,!1,P);$>-1&&H!==this.view.element($)?this.setFocus([$],z):this.setFocus([V],z)}else{const $=this.view.getScrollTop();this.view.setScrollTop($+this.view.renderHeight-this.view.elementHeight(V)),this.view.getScrollTop()!==$&&(this.setFocus([]),setTimeout(()=>this.focusNextPage(z,P),0))}}focusPreviousPage(z,P){let V;const U=this.view.getScrollTop();U===0?V=this.view.indexAt(U):V=this.view.indexAfter(U-1);const H=this.view.element(V),$=this.getFocusedElements()[0];if($!==H){const ie=this.findNextIndex(V,!1,P);ie>-1&&$!==this.view.element(ie)?this.setFocus([ie],z):this.setFocus([V],z)}else{const ie=U;this.view.setScrollTop(U-this.view.renderHeight),this.view.getScrollTop()!==ie&&(this.setFocus([]),setTimeout(()=>this.focusPreviousPage(z,P),0))}}focusLast(z,P){if(this.length!==0){const V=this.findPreviousIndex(this.length-1,!1,P);V>-1&&this.setFocus([V],z)}}focusFirst(z,P){this.focusNth(0,z,P)}focusNth(z,P,V){if(this.length!==0){const U=this.findNextIndex(z,!1,V);U>-1&&this.setFocus([U],P)}}findNextIndex(z,P=!1,V){for(let U=0;U=this.length&&!P)return-1;if(z=z%this.length,!V||V(this.element(z)))return z;z++}return-1}findPreviousIndex(z,P=!1,V){for(let U=0;Uthis.view.element(z))}reveal(z,P){if(z<0||z>=this.length)throw new c.ListError(this.user,`Invalid index ${z}`);const V=this.view.getScrollTop(),U=this.view.elementTop(z),H=this.view.elementHeight(z);if(N.isNumber(P)){const $=H-this.view.renderHeight;this.view.setScrollTop($*r.clamp(P,0,1)+U)}else{const $=U+H,ie=V+this.view.renderHeight;U=ie||(U=ie&&this.view.setScrollTop($-this.view.renderHeight))}}getRelativeTop(z){if(z<0||z>=this.length)throw new c.ListError(this.user,`Invalid index ${z}`);const P=this.view.getScrollTop(),V=this.view.elementTop(z),U=this.view.elementHeight(z);if(VP+this.view.renderHeight)return null;const H=U-this.view.renderHeight;return Math.abs((P-V)/H)}getHTMLElement(){return this.view.domNode}style(z){this.styleController.style(z)}toListEvent({indexes:z,browserEvent:P}){return{indexes:z,elements:z.map(V=>this.view.element(V)),browserEvent:P}}_onFocusChange(){const z=this.focus.get();this.view.domNode.classList.toggle("element-focused",z.length>0),this.onDidChangeActiveDescendant()}onDidChangeActiveDescendant(){var z;const P=this.focus.get();if(P.length>0){let V;((z=this.accessibilityProvider)===null||z===void 0?void 0:z.getActiveDescendantId)&&(V=this.accessibilityProvider.getActiveDescendantId(this.view.element(P[0]))),this.view.domNode.setAttribute("aria-activedescendant",V||this.view.getElementDomId(P[0]))}else this.view.domNode.removeAttribute("aria-activedescendant")}_onSelectionChange(){const z=this.selection.get();this.view.domNode.classList.toggle("selection-none",z.length===0),this.view.domNode.classList.toggle("selection-single",z.length===1),this.view.domNode.classList.toggle("selection-multiple",z.length>1)}dispose(){this._onDidDispose.fire(),this.disposables.dispose(),this._onDidDispose.dispose()}}Me([w.memoize],le.prototype,"onDidChangeFocus",null),Me([w.memoize],le.prototype,"onDidChangeSelection",null),Me([w.memoize],le.prototype,"onContextMenu",null),e.List=le}),define(Q[312],J([0,1,2,19,105,6,23,208]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.PagedList=void 0;class C{constructor(o,s){this.renderer=o,this.modelProvider=s}get templateId(){return this.renderer.templateId}renderTemplate(o){return{data:this.renderer.renderTemplate(o),disposable:b.Disposable.None}}renderElement(o,s,a,u){if(a.disposable&&a.disposable.dispose(),!!a.data){const r=this.modelProvider();if(r.isResolved(o))return this.renderer.renderElement(r.get(o),o,a.data,u);const i=new S.CancellationTokenSource,n=r.resolve(o,i.token);a.disposable={dispose:()=>i.cancel()},this.renderer.renderPlaceholder(o,a.data),n.then(t=>this.renderer.renderElement(t,o,a.data,u))}}disposeTemplate(o){o.disposable&&(o.disposable.dispose(),o.disposable=void 0),o.data&&(this.renderer.disposeTemplate(o.data),o.data=void 0)}}class d{constructor(o,s){this.modelProvider=o,this.accessibilityProvider=s}getWidgetAriaLabel(){return this.accessibilityProvider.getWidgetAriaLabel()}getAriaLabel(o){const s=this.modelProvider();return s.isResolved(o)?this.accessibilityProvider.getAriaLabel(s.get(o)):null}}function g(c,o){return Object.assign(Object.assign({},o),{accessibilityProvider:o.accessibilityProvider&&new d(c,o.accessibilityProvider)})}class p{constructor(o,s,a,u,r={}){const i=()=>this.model,n=u.map(t=>new C(t,i));this.list=new M.List(o,s,a,n,g(i,r))}updateOptions(o){this.list.updateOptions(o)}getHTMLElement(){return this.list.getHTMLElement()}get onDidFocus(){return this.list.onDidFocus}get onDidDispose(){return this.list.onDidDispose}get onMouseDblClick(){return w.Event.map(this.list.onMouseDblClick,({element:o,index:s,browserEvent:a})=>({element:o===void 0?void 0:this._model.get(o),index:s,browserEvent:a}))}get onPointer(){return w.Event.map(this.list.onPointer,({element:o,index:s,browserEvent:a})=>({element:o===void 0?void 0:this._model.get(o),index:s,browserEvent:a}))}get onDidChangeFocus(){return w.Event.map(this.list.onDidChangeFocus,({elements:o,indexes:s,browserEvent:a})=>({elements:o.map(u=>this._model.get(u)),indexes:s,browserEvent:a}))}get onDidChangeSelection(){return w.Event.map(this.list.onDidChangeSelection,({elements:o,indexes:s,browserEvent:a})=>({elements:o.map(u=>this._model.get(u)),indexes:s,browserEvent:a}))}get model(){return this._model}set model(o){this._model=o,this.list.splice(0,this.list.length,N.range(o.length))}getFocus(){return this.list.getFocus()}setSelection(o,s){this.list.setSelection(o,s)}getSelection(){return this.list.getSelection()}getSelectedElements(){return this.getSelection().map(o=>this.model.get(o))}style(o){this.list.style(o)}dispose(){this.list.dispose()}}e.PagedList=p}),define(Q[313],J([10]),{}),define(Q[210],J([0,1,2,6,20,100,19,104,29,55,7,61,121,313]),function(q,e,b,N,M,w,S,C,d,g,p,c,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SplitView=e.Sizing=void 0;const s={separatorBorder:d.Color.transparent};class a{constructor(h,m,_,f){this.container=h,this.view=m,this.disposable=f,this._cachedVisibleSize=void 0,typeof _=="number"?(this._size=_,this._cachedVisibleSize=void 0,h.classList.add("visible")):(this._size=0,this._cachedVisibleSize=_.cachedVisibleSize)}set size(h){this._size=h}get size(){return this._size}get visible(){return typeof this._cachedVisibleSize=="undefined"}setVisible(h,m){h!==this.visible&&(h?(this.size=w.clamp(this._cachedVisibleSize,this.viewMinimumSize,this.viewMaximumSize),this._cachedVisibleSize=void 0):(this._cachedVisibleSize=typeof m=="number"?m:this.size,this.size=0),this.container.classList.toggle("visible",h),this.view.setVisible&&this.view.setVisible(h))}get minimumSize(){return this.visible?this.view.minimumSize:0}get viewMinimumSize(){return this.view.minimumSize}get maximumSize(){return this.visible?this.view.maximumSize:0}get viewMaximumSize(){return this.view.maximumSize}get priority(){return this.view.priority}get snap(){return!!this.view.snap}set enabled(h){this.container.style.pointerEvents=h?"":"none"}layout(h,m){this.layoutContainer(h),this.view.layout(this.size,h,m)}dispose(){return this.disposable.dispose(),this.view}}class u extends a{layoutContainer(h){this.container.style.top=`${h}px`,this.container.style.height=`${this.size}px`}}class r extends a{layoutContainer(h){this.container.style.left=`${h}px`,this.container.style.width=`${this.size}px`}}var i;(function(l){l[l.Idle=0]="Idle",l[l.Busy=1]="Busy"})(i||(i={}));var n;(function(l){l.Distribute={type:"distribute"};function h(_){return{type:"split",index:_}}l.Split=h;function m(_){return{type:"invisible",cachedVisibleSize:_}}l.Invisible=m})(n=e.Sizing||(e.Sizing={}));class t extends b.Disposable{constructor(h,m={}){var _,f;super();this.size=0,this.contentSize=0,this.proportions=void 0,this.viewItems=[],this.sashItems=[],this.state=i.Idle,this._onDidSashChange=this._register(new N.Emitter),this.onDidSashChange=this._onDidSashChange.event,this._onDidSashReset=this._register(new N.Emitter),this._startSnappingEnabled=!0,this._endSnappingEnabled=!0,this.orientation=M.isUndefined(m.orientation)?0:m.orientation,this.inverseAltBehavior=!!m.inverseAltBehavior,this.proportionalLayout=M.isUndefined(m.proportionalLayout)?!0:!!m.proportionalLayout,this.getSashOrthogonalSize=m.getSashOrthogonalSize,this.el=document.createElement("div"),this.el.classList.add("monaco-split-view2"),this.el.classList.add(this.orientation===0?"vertical":"horizontal"),h.appendChild(this.el),this.sashContainer=p.append(this.el,p.$(".sash-container")),this.viewContainer=p.$(".split-view-container"),this.scrollable=new o.Scrollable(125,p.scheduleAtNextAnimationFrame),this.scrollableElement=this._register(new c.SmoothScrollableElement(this.viewContainer,{vertical:this.orientation===0?(_=m.scrollbarVisibility)!==null&&_!==void 0?_:1:2,horizontal:this.orientation===1?(f=m.scrollbarVisibility)!==null&&f!==void 0?f:1:2},this.scrollable)),this._register(this.scrollableElement.onScroll(v=>{this.viewContainer.scrollTop=v.scrollTop,this.viewContainer.scrollLeft=v.scrollLeft})),p.append(this.el,this.scrollableElement.getDomNode()),this.style(m.styles||s),m.descriptor&&(this.size=m.descriptor.size,m.descriptor.views.forEach((v,y)=>{const L=M.isUndefined(v.visible)||v.visible?v.size:{type:"invisible",cachedVisibleSize:v.size},I=v.view;this.doAddView(I,L,y,!0)}),this.contentSize=this.viewItems.reduce((v,y)=>v+y.size,0),this.saveProportions())}get orthogonalStartSash(){return this._orthogonalStartSash}set orthogonalStartSash(h){for(const m of this.sashItems)m.sash.orthogonalStartSash=h;this._orthogonalStartSash=h}get orthogonalEndSash(){return this._orthogonalEndSash}set orthogonalEndSash(h){for(const m of this.sashItems)m.sash.orthogonalEndSash=h;this._orthogonalEndSash=h}get startSnappingEnabled(){return this._startSnappingEnabled}set startSnappingEnabled(h){this._startSnappingEnabled!==h&&(this._startSnappingEnabled=h,this.updateSashEnablement())}get endSnappingEnabled(){return this._endSnappingEnabled}set endSnappingEnabled(h){this._endSnappingEnabled!==h&&(this._endSnappingEnabled=h,this.updateSashEnablement())}style(h){h.separatorBorder.isTransparent()?(this.el.classList.remove("separator-border"),this.el.style.removeProperty("--separator-border")):(this.el.classList.add("separator-border"),this.el.style.setProperty("--separator-border",h.separatorBorder.toString()))}addView(h,m,_=this.viewItems.length,f){this.doAddView(h,m,_,f)}layout(h,m){const _=Math.max(this.size,this.contentSize);if(this.size=h,this.layoutContext=m,this.proportions)for(let f=0;fthis.viewItems[L].priority===1),y=f.filter(L=>this.viewItems[L].priority===2);this.resize(this.viewItems.length-1,h-_,void 0,v,y)}this.distributeEmptySpace(),this.layoutViews()}saveProportions(){this.proportionalLayout&&this.contentSize>0&&(this.proportions=this.viewItems.map(h=>h.size/this.contentSize))}onSashStart({sash:h,start:m,alt:_}){for(const L of this.viewItems)L.enabled=!1;const f=this.sashItems.findIndex(L=>L.sash===h),v=b.combinedDisposable(g.domEvent(document.body,"keydown")(L=>y(this.sashDragState.current,L.altKey)),g.domEvent(document.body,"keyup")(()=>y(this.sashDragState.current,!1))),y=(L,I)=>{const k=this.viewItems.map(B=>B.size);let E=Number.NEGATIVE_INFINITY,T=Number.POSITIVE_INFINITY;if(this.inverseAltBehavior&&(I=!I),I)if(f===this.sashItems.length-1){const F=this.viewItems[f];E=(F.minimumSize-F.size)/2,T=(F.maximumSize-F.size)/2}else{const F=this.viewItems[f+1];E=(F.size-F.maximumSize)/2,T=(F.size-F.minimumSize)/2}let O,A;if(!I){const B=S.range(f,-1),F=S.range(f+1,this.viewItems.length),D=B.reduce((ne,le)=>ne+(this.viewItems[le].minimumSize-k[le]),0),R=B.reduce((ne,le)=>ne+(this.viewItems[le].viewMaximumSize-k[le]),0),W=F.length===0?Number.POSITIVE_INFINITY:F.reduce((ne,le)=>ne+(k[le]-this.viewItems[le].minimumSize),0),x=F.length===0?Number.NEGATIVE_INFINITY:F.reduce((ne,le)=>ne+(k[le]-this.viewItems[le].viewMaximumSize),0),K=Math.max(D,x),Y=Math.min(W,R),ee=this.findFirstSnapIndex(B),se=this.findFirstSnapIndex(F);if(typeof ee=="number"){const ne=this.viewItems[ee],le=Math.floor(ne.viewMinimumSize/2);O={index:ee,limitDelta:ne.visible?K-le:K+le,size:ne.size}}if(typeof se=="number"){const ne=this.viewItems[se],le=Math.floor(ne.viewMinimumSize/2);A={index:se,limitDelta:ne.visible?Y+le:Y-le,size:ne.size}}}this.sashDragState={start:L,current:L,index:f,sizes:k,minDelta:E,maxDelta:T,alt:I,snapBefore:O,snapAfter:A,disposable:v}};y(m,_)}onSashChange({current:h}){const{index:m,start:_,sizes:f,alt:v,minDelta:y,maxDelta:L,snapBefore:I,snapAfter:k}=this.sashDragState;this.sashDragState.current=h;const E=h-_,T=this.resize(m,E,f,void 0,void 0,y,L,I,k);if(v){const O=m===this.sashItems.length-1,A=this.viewItems.map(x=>x.size),B=O?m:m+1,F=this.viewItems[B],D=F.size-F.maximumSize,R=F.size-F.minimumSize,W=O?m-1:m+1;this.resize(W,-T,A,void 0,void 0,D,R)}this.distributeEmptySpace(),this.layoutViews()}onSashEnd(h){this._onDidSashChange.fire(h),this.sashDragState.disposable.dispose(),this.saveProportions();for(const m of this.viewItems)m.enabled=!0}onViewChange(h,m){const _=this.viewItems.indexOf(h);_<0||_>=this.viewItems.length||(m=typeof m=="number"?m:h.size,m=w.clamp(m,h.minimumSize,h.maximumSize),this.inverseAltBehavior&&_>0?(this.resize(_-1,Math.floor((h.size-m)/2)),this.distributeEmptySpace(),this.layoutViews()):(h.size=m,this.relayout([_],void 0)))}resizeView(h,m){if(this.state!==i.Idle)throw new Error("Cant modify splitview");if(this.state=i.Busy,!(h<0||h>=this.viewItems.length)){const _=S.range(this.viewItems.length).filter(L=>L!==h),f=[..._.filter(L=>this.viewItems[L].priority===1),h],v=_.filter(L=>this.viewItems[L].priority===2),y=this.viewItems[h];m=Math.round(m),m=w.clamp(m,y.minimumSize,Math.min(y.maximumSize,this.size)),y.size=m,this.relayout(f,v),this.state=i.Idle}}distributeViewSizes(){const h=[];let m=0;for(const L of this.viewItems)L.maximumSize-L.minimumSize>0&&(h.push(L),m+=L.size);const _=Math.floor(m/h.length);for(const L of h)L.size=w.clamp(_,L.minimumSize,L.maximumSize);const f=S.range(this.viewItems.length),v=f.filter(L=>this.viewItems[L].priority===1),y=f.filter(L=>this.viewItems[L].priority===2);this.relayout(v,y)}getViewSize(h){return h<0||h>=this.viewItems.length?-1:this.viewItems[h].size}doAddView(h,m,_=this.viewItems.length,f){if(this.state!==i.Idle)throw new Error("Cant modify splitview");this.state=i.Busy;const v=p.$(".split-view-view");_===this.viewItems.length?this.viewContainer.appendChild(v):this.viewContainer.insertBefore(v,this.viewContainer.children.item(_));const y=h.onDidChange(O=>this.onViewChange(E,O)),L=b.toDisposable(()=>this.viewContainer.removeChild(v)),I=b.combinedDisposable(y,L);let k;typeof m=="number"?k=m:m.type==="split"?k=this.getViewSize(m.index)/2:m.type==="invisible"?k={cachedVisibleSize:m.cachedVisibleSize}:k=h.minimumSize;const E=this.orientation===0?new u(v,h,k,I):new r(v,h,k,I);if(this.viewItems.splice(_,0,E),this.viewItems.length>1){let O={orthogonalStartSash:this.orthogonalStartSash,orthogonalEndSash:this.orthogonalEndSash};const A=this.orientation===0?new C.Sash(this.sashContainer,{getHorizontalSashTop:ne=>this.getSashPosition(ne),getHorizontalSashWidth:this.getSashOrthogonalSize},Object.assign(Object.assign({},O),{orientation:1})):new C.Sash(this.sashContainer,{getVerticalSashLeft:ne=>this.getSashPosition(ne),getVerticalSashHeight:this.getSashOrthogonalSize},Object.assign(Object.assign({},O),{orientation:0})),B=this.orientation===0?ne=>({sash:A,start:ne.startY,current:ne.currentY,alt:ne.altKey}):ne=>({sash:A,start:ne.startX,current:ne.currentX,alt:ne.altKey}),D=N.Event.map(A.onDidStart,B)(this.onSashStart,this),W=N.Event.map(A.onDidChange,B)(this.onSashChange,this),K=N.Event.map(A.onDidEnd,()=>this.sashItems.findIndex(ne=>ne.sash===A))(this.onSashEnd,this),Y=A.onDidReset(()=>{const ne=this.sashItems.findIndex(V=>V.sash===A),le=S.range(ne,-1),X=S.range(ne+1,this.viewItems.length),z=this.findFirstSnapIndex(le),P=this.findFirstSnapIndex(X);typeof z=="number"&&!this.viewItems[z].visible||typeof P=="number"&&!this.viewItems[P].visible||this._onDidSashReset.fire(ne)}),ee=b.combinedDisposable(D,W,K,Y,A),se={sash:A,disposable:ee};this.sashItems.splice(_-1,0,se)}v.appendChild(h.element);let T;typeof m!="number"&&m.type==="split"&&(T=[m.index]),f||this.relayout([_],T),this.state=i.Idle,!f&&typeof m!="number"&&m.type==="distribute"&&this.distributeViewSizes()}relayout(h,m){const _=this.viewItems.reduce((f,v)=>f+v.size,0);this.resize(this.viewItems.length-1,this.size-_,void 0,h,m),this.distributeEmptySpace(),this.layoutViews(),this.saveProportions()}resize(h,m,_=this.viewItems.map(E=>E.size),f,v,y=Number.NEGATIVE_INFINITY,L=Number.POSITIVE_INFINITY,I,k){if(h<0||h>=this.viewItems.length)return 0;const E=S.range(h,-1),T=S.range(h+1,this.viewItems.length);if(v)for(const se of v)S.pushToStart(E,se),S.pushToStart(T,se);if(f)for(const se of f)S.pushToEnd(E,se),S.pushToEnd(T,se);const O=E.map(se=>this.viewItems[se]),A=E.map(se=>_[se]),B=T.map(se=>this.viewItems[se]),F=T.map(se=>_[se]),D=E.reduce((se,ne)=>se+(this.viewItems[ne].minimumSize-_[ne]),0),R=E.reduce((se,ne)=>se+(this.viewItems[ne].maximumSize-_[ne]),0),W=T.length===0?Number.POSITIVE_INFINITY:T.reduce((se,ne)=>se+(_[ne]-this.viewItems[ne].minimumSize),0),x=T.length===0?Number.NEGATIVE_INFINITY:T.reduce((se,ne)=>se+(_[ne]-this.viewItems[ne].maximumSize),0),K=Math.max(D,x,y),Y=Math.min(W,R,L);let ee=!1;if(I){const se=this.viewItems[I.index],ne=m>=I.limitDelta;ee=ne!==se.visible,se.setVisible(ne,I.size)}if(!ee&&k){const se=this.viewItems[k.index],ne=mL+I.size,0);let _=this.size-m;const f=S.range(this.viewItems.length-1,-1),v=f.filter(L=>this.viewItems[L].priority===1),y=f.filter(L=>this.viewItems[L].priority===2);for(const L of y)S.pushToStart(f,L);for(const L of v)S.pushToEnd(f,L);typeof h=="number"&&S.pushToEnd(f,h);for(let L=0;_!==0&&Lm+_.size,0);let h=0;for(const m of this.viewItems)m.layout(h,this.layoutContext),h+=m.size;this.sashItems.forEach(m=>m.sash.layout()),this.updateSashEnablement(),this.updateScrollableElement()}updateScrollableElement(){this.orientation===0?this.scrollableElement.setScrollDimensions({height:this.size,scrollHeight:this.contentSize}):this.scrollableElement.setScrollDimensions({width:this.size,scrollWidth:this.contentSize})}updateSashEnablement(){let h=!1;const m=this.viewItems.map(I=>h=I.size-I.minimumSize>0||h);h=!1;const _=this.viewItems.map(I=>h=I.maximumSize-I.size>0||h),f=[...this.viewItems].reverse();h=!1;const v=f.map(I=>h=I.size-I.minimumSize>0||h).reverse();h=!1;const y=f.map(I=>h=I.maximumSize-I.size>0||h).reverse();let L=0;for(let I=0;I0||this.startSnappingEnabled)?k.state=1:W&&m[I]&&(L0)return;if(!_.visible&&_.snap)return m}}dispose(){super.dispose(),this.viewItems.forEach(h=>h.dispose()),this.viewItems=[],this.sashItems.forEach(h=>h.disposable.dispose()),this.sashItems=[]}}e.SplitView=t}),define(Q[314],J([10]),{}),define(Q[315],J([0,1,105,7,210,6,314]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Table=void 0;class S{constructor(c,o,s){this.columns=c,this.getColumnSize=s,this.templateId=S.TemplateId,this.renderedTemplates=new Set;const a=new Map(o.map(u=>[u.templateId,u]));this.renderers=[];for(const u of c){const r=a.get(u.templateId);if(!r)throw new Error(`Table cell renderer for template id ${u.templateId} not found.`);this.renderers.push(r)}}renderTemplate(c){const o=N.append(c,N.$(".monaco-table-tr")),s=[],a=[];for(let r=0;rnew d(l,h)),n={size:i.reduce((l,h)=>l+h.column.weight,0),views:i.map(l=>({size:l.column.weight,view:l}))};this.splitview=new M.SplitView(this.domNode,{orientation:1,scrollbarVisibility:2,getSashOrthogonalSize:()=>this.cachedHeight,descriptor:n}),this.splitview.el.style.height=`${s.headerRowHeight}px`,this.splitview.el.style.lineHeight=`${s.headerRowHeight}px`;const t=new S(a,u,l=>this.splitview.getViewSize(l));this.list=new b.List(c,this.domNode,C(s),[t],r),this.columnLayoutDisposable=w.Event.any(...i.map(l=>l.onDidLayout))(([l,h])=>t.layoutColumn(l,h)),this.styleElement=N.createStyleSheet(this.domNode),this.style({})}get onDidChangeFocus(){return this.list.onDidChangeFocus}get onDidChangeSelection(){return this.list.onDidChangeSelection}get onMouseDblClick(){return this.list.onMouseDblClick}get onPointer(){return this.list.onPointer}get onDidFocus(){return this.list.onDidFocus}get onDidDispose(){return this.list.onDidDispose}updateOptions(c){this.list.updateOptions(c)}splice(c,o,s=[]){this.list.splice(c,o,s)}getHTMLElement(){return this.domNode}style(c){const o=[];o.push(`.monaco-table.${this.domId} > .monaco-split-view2 .monaco-sash.vertical::before { + top: ${this.virtualDelegate.headerRowHeight+1}px; + height: calc(100% - ${this.virtualDelegate.headerRowHeight}px); + }`),this.styleElement.textContent=o.join(` +`),this.list.style(c)}getSelectedElements(){return this.list.getSelectedElements()}setSelection(c,o){this.list.setSelection(c,o)}getSelection(){return this.list.getSelection()}getFocus(){return this.list.getFocus()}dispose(){this.splitview.dispose(),this.list.dispose(),this.columnLayoutDisposable.dispose()}}e.Table=g,g.InstanceCount=0}),define(Q[316],J([10]),{}),define(Q[125],J([10]),{}),define(Q[211],J([0,1,7,119,125]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getIconClass=void 0;const M={},w=new N.IdGenerator("quick-input-button-icon-");function S(C){if(!!C){let d;const g=C.dark.toString();return M[g]?d=M[g]:(d=w.nextId(),b.createCSSRule(`.${d}`,`background-image: ${b.asCSSUrl(C.light||C.dark)}`),b.createCSSRule(`.vs-dark .${d}, .hc-black .${d}`,`background-image: ${b.asCSSUrl(C.dark)}`),M[g]=d),d}}e.getIconClass=S}),define(Q[317],J([10]),{}),define(Q[318],J([10]),{}),define(Q[319],J([10]),{}),define(Q[320],J([10]),{}),define(Q[321],J([10]),{}),define(Q[322],J([10]),{}),define(Q[323],J([10]),{}),define(Q[324],J([10]),{}),define(Q[325],J([10]),{}),define(Q[326],J([10]),{}),define(Q[327],J([10]),{}),define(Q[328],J([10]),{}),define(Q[329],J([10]),{}),define(Q[330],J([10]),{}),define(Q[331],J([10]),{}),define(Q[332],J([10]),{}),define(Q[333],J([10]),{}),define(Q[334],J([10]),{}),define(Q[335],J([10]),{}),define(Q[336],J([10]),{}),define(Q[337],J([10]),{}),define(Q[338],J([10]),{}),define(Q[339],J([10]),{}),define(Q[340],J([10]),{}),define(Q[341],J([10]),{}),define(Q[342],J([10]),{}),define(Q[343],J([10]),{}),define(Q[344],J([10]),{}),define(Q[345],J([10]),{}),define(Q[346],J([10]),{}),define(Q[347],J([10]),{}),define(Q[348],J([10]),{}),define(Q[349],J([10]),{}),define(Q[350],J([10]),{}),define(Q[351],J([10]),{}),define(Q[352],J([10]),{}),define(Q[353],J([10]),{}),define(Q[354],J([10]),{}),define(Q[355],J([10]),{}),define(Q[356],J([10]),{}),define(Q[357],J([10]),{}),define(Q[358],J([10]),{}),define(Q[359],J([10]),{}),define(Q[360],J([10]),{}),define(Q[361],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.readCharWidths=e.CharWidthRequest=void 0;class b{constructor(S,C){this.chr=S,this.type=C,this.width=0}fulfill(S){this.width=S}}e.CharWidthRequest=b;class N{constructor(S,C){this._bareFontInfo=S,this._requests=C,this._container=null,this._testElements=null}read(){this._createDomElements(),document.body.appendChild(this._container),this._readFromDomElements(),document.body.removeChild(this._container),this._container=null,this._testElements=null}_createDomElements(){const S=document.createElement("div");S.style.position="absolute",S.style.top="-50000px",S.style.width="50000px";const C=document.createElement("div");C.style.fontFamily=this._bareFontInfo.getMassagedFontFamily(),C.style.fontWeight=this._bareFontInfo.fontWeight,C.style.fontSize=this._bareFontInfo.fontSize+"px",C.style.fontFeatureSettings=this._bareFontInfo.fontFeatureSettings,C.style.lineHeight=this._bareFontInfo.lineHeight+"px",C.style.letterSpacing=this._bareFontInfo.letterSpacing+"px",S.appendChild(C);const d=document.createElement("div");d.style.fontFamily=this._bareFontInfo.getMassagedFontFamily(),d.style.fontWeight="bold",d.style.fontSize=this._bareFontInfo.fontSize+"px",d.style.fontFeatureSettings=this._bareFontInfo.fontFeatureSettings,d.style.lineHeight=this._bareFontInfo.lineHeight+"px",d.style.letterSpacing=this._bareFontInfo.letterSpacing+"px",S.appendChild(d);const g=document.createElement("div");g.style.fontFamily=this._bareFontInfo.getMassagedFontFamily(),g.style.fontWeight=this._bareFontInfo.fontWeight,g.style.fontSize=this._bareFontInfo.fontSize+"px",g.style.fontFeatureSettings=this._bareFontInfo.fontFeatureSettings,g.style.lineHeight=this._bareFontInfo.lineHeight+"px",g.style.letterSpacing=this._bareFontInfo.letterSpacing+"px",g.style.fontStyle="italic",S.appendChild(g);const p=[];for(const c of this._requests){let o;c.type===0&&(o=C),c.type===2&&(o=d),c.type===1&&(o=g),o.appendChild(document.createElement("br"));const s=document.createElement("span");N._render(s,c),o.appendChild(s),p.push(s)}this._container=S,this._testElements=p}static _render(S,C){if(C.chr===" "){let d="\xA0";for(let g=0;g<8;g++)d+=d;S.innerText=d}else{let d=C.chr;for(let g=0;g<8;g++)d+=d;S.textContent=d}}_readFromDomElements(){for(let S=0,C=this._requests.length;S{w&&w[0]&&w[0].contentRect?this.observe({width:w[0].contentRect.width,height:w[0].contentRect.height}):this.observe()}),this.resizeObserver.observe(this.referenceDomElement)):this.measureReferenceDomElementToken===-1&&(this.measureReferenceDomElementToken=setInterval(()=>this.observe(),100))}stopObserving(){this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null),this.measureReferenceDomElementToken!==-1&&(clearInterval(this.measureReferenceDomElementToken),this.measureReferenceDomElementToken=-1)}observe(w){this.measureReferenceDomElement(!0,w)}measureReferenceDomElement(w,S){let C=0,d=0;S?(C=S.width,d=S.height):this.referenceDomElement&&(C=this.referenceDomElement.clientWidth,d=this.referenceDomElement.clientHeight),C=Math.max(5,C),d=Math.max(5,d),(this.width!==C||this.height!==d)&&(this.width=C,this.height=d,w&&this.changeCallback())}}e.ElementSizeObserver=N}),define(Q[162],J([0,1,7,90,50,2]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.GlobalEditorMouseMoveMonitor=e.EditorPointerEventFactory=e.EditorMouseEventFactory=e.EditorMouseEvent=e.createEditorPagePosition=e.EditorPagePosition=e.ClientCoordinates=e.PageCoordinates=void 0;class S{constructor(u,r){this.x=u,this.y=r}toClientCoordinates(){return new C(this.x-b.StandardWindow.scrollX,this.y-b.StandardWindow.scrollY)}}e.PageCoordinates=S;class C{constructor(u,r){this.clientX=u,this.clientY=r}toPageCoordinates(){return new S(this.clientX+b.StandardWindow.scrollX,this.clientY+b.StandardWindow.scrollY)}}e.ClientCoordinates=C;class d{constructor(u,r,i,n){this.x=u,this.y=r,this.width=i,this.height=n}}e.EditorPagePosition=d;function g(a){const u=b.getDomNodePagePosition(a);return new d(u.left,u.top,u.width,u.height)}e.createEditorPagePosition=g;class p extends M.StandardMouseEvent{constructor(u,r){super(u);this.pos=new S(this.posx,this.posy),this.editorPos=g(r)}}e.EditorMouseEvent=p;class c{constructor(u){this._editorViewDomNode=u}_create(u){return new p(u,this._editorViewDomNode)}onContextMenu(u,r){return b.addDisposableListener(u,"contextmenu",i=>{r(this._create(i))})}onMouseUp(u,r){return b.addDisposableListener(u,"mouseup",i=>{r(this._create(i))})}onMouseDown(u,r){return b.addDisposableListener(u,"mousedown",i=>{r(this._create(i))})}onMouseLeave(u,r){return b.addDisposableNonBubblingMouseOutListener(u,i=>{r(this._create(i))})}onMouseMoveThrottled(u,r,i,n){const t=(l,h)=>i(l,this._create(h));return b.addDisposableThrottledListener(u,"mousemove",r,t,n)}}e.EditorMouseEventFactory=c;class o{constructor(u){this._editorViewDomNode=u}_create(u){return new p(u,this._editorViewDomNode)}onPointerUp(u,r){return b.addDisposableListener(u,"pointerup",i=>{r(this._create(i))})}onPointerDown(u,r){return b.addDisposableListener(u,"pointerdown",i=>{r(this._create(i))})}onPointerLeave(u,r){return b.addDisposableNonBubblingPointerOutListener(u,i=>{r(this._create(i))})}onPointerMoveThrottled(u,r,i,n){const t=(l,h)=>i(l,this._create(h));return b.addDisposableThrottledListener(u,"pointermove",r,t,n)}}e.EditorPointerEventFactory=o;class s extends w.Disposable{constructor(u){super();this._editorViewDomNode=u,this._globalMouseMoveMonitor=this._register(new N.GlobalMouseMoveMonitor),this._keydownListener=null}startMonitoring(u,r,i,n,t){this._keydownListener=b.addStandardDisposableListener(document,"keydown",h=>{h.toKeybinding().isModifierKey()||this._globalMouseMoveMonitor.stopMonitoring(!0,h.browserEvent)},!0);const l=(h,m)=>i(h,new p(m,this._editorViewDomNode));this._globalMouseMoveMonitor.startMonitoring(u,r,l,n,h=>{this._keydownListener.dispose(),t(h)})}stopMonitoring(){this._globalMouseMoveMonitor.stopMonitoring(!0)}}e.GlobalEditorMouseMoveMonitor=s}),define(Q[362],J([0,1,6,2]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractCodeEditorService=void 0;class M extends N.Disposable{constructor(){super();this._onCodeEditorAdd=this._register(new b.Emitter),this.onCodeEditorAdd=this._onCodeEditorAdd.event,this._onCodeEditorRemove=this._register(new b.Emitter),this.onCodeEditorRemove=this._onCodeEditorRemove.event,this._onDiffEditorAdd=this._register(new b.Emitter),this._onDiffEditorRemove=this._register(new b.Emitter),this._onDecorationTypeRegistered=this._register(new b.Emitter),this._modelProperties=new Map,this._codeEditors=Object.create(null),this._diffEditors=Object.create(null)}addCodeEditor(S){this._codeEditors[S.getId()]=S,this._onCodeEditorAdd.fire(S)}removeCodeEditor(S){delete this._codeEditors[S.getId()]&&this._onCodeEditorRemove.fire(S)}listCodeEditors(){return Object.keys(this._codeEditors).map(S=>this._codeEditors[S])}addDiffEditor(S){this._diffEditors[S.getId()]=S,this._onDiffEditorAdd.fire(S)}removeDiffEditor(S){delete this._diffEditors[S.getId()]&&this._onDiffEditorRemove.fire(S)}listDiffEditors(){return Object.keys(this._diffEditors).map(S=>this._diffEditors[S])}getFocusedCodeEditor(){let S=null;const C=this.listCodeEditors();for(const d of C){if(d.hasTextFocus())return d;d.hasWidgetFocus()&&(S=d)}return S}setModelProperty(S,C,d){const g=S.toString();let p;this._modelProperties.has(g)?p=this._modelProperties.get(g):(p=new Map,this._modelProperties.set(g,p)),p.set(C,d)}getModelProperty(S,C){const d=S.toString();if(this._modelProperties.has(d))return this._modelProperties.get(d).get(C)}}e.AbstractCodeEditorService=M}),define(Q[213],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getCharIndex=e.allCharCodes=void 0,e.allCharCodes=(()=>{const N=[];for(let M=32;M<=126;M++)N.push(M);return N.push(65533),N})();const b=(N,M)=>(N-=32,N<0||N>96?M<=2?(N+96)%96:96-1:N);e.getCharIndex=b}),define(Q[363],J([0,1,213,122]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MinimapCharRenderer=void 0;class M{constructor(S,C){this.scale=C,this.charDataNormal=M.soften(S,12/15),this.charDataLight=M.soften(S,50/60)}static soften(S,C){let d=new Uint8ClampedArray(S.length);for(let g=0,p=S.length;gS.width||d+i>S.height){console.warn("bad render request outside image data");return}const n=s?this.charDataLight:this.charDataNormal,t=b.getCharIndex(g,o),l=S.width*4,h=c.r,m=c.g,_=c.b,f=p.r-h,v=p.g-m,y=p.b-_,L=S.data;let I=t*u*r,k=d*l+C*4;for(let E=0;ES.width||d+u>S.height){console.warn("bad render request outside image data");return}const r=S.width*4,i=.5,n=p.r,t=p.g,l=p.b,h=g.r-n,m=g.g-t,_=g.b-l,f=n+h*i,v=t+m*i,y=l+_*i,L=S.data;let I=d*r+C*4;for(let k=0;k{const S=new Uint8ClampedArray(w.length/2);for(let C=0;C>1]=N[w[C]]<<4|N[w[C+1]]&15;return S};e.prebakedMiniMaps={1:b.once(()=>M("0000511D6300CF609C709645A78432005642574171487021003C451900274D35D762755E8B629C5BA856AF57BA649530C167D1512A272A3F6038604460398526BCA2A968DB6F8957C768BE5FBE2FB467CF5D8D5B795DC7625B5DFF50DE64C466DB2FC47CD860A65E9A2EB96CB54CE06DA763AB2EA26860524D3763536601005116008177A8705E53AB738E6A982F88BAA35B5F5B626D9C636B449B737E5B7B678598869A662F6B5B8542706C704C80736A607578685B70594A49715A4522E792")),2:b.once(()=>M("000000000000000055394F383D2800008B8B1F210002000081B1CBCBCC820000847AAF6B9AAF2119BE08B8881AD60000A44FD07DCCF107015338130C00000000385972265F390B406E2437634B4B48031B12B8A0847000001E15B29A402F0000000000004B33460B00007A752C2A0000000000004D3900000084394B82013400ABA5CFC7AD9C0302A45A3E5A98AB000089A43382D97900008BA54AA087A70A0248A6A7AE6DBE0000BF6F94987EA40A01A06DCFA7A7A9030496C32F77891D0000A99FB1A0AFA80603B29AB9CA75930D010C0948354D3900000C0948354F37460D0028BE673D8400000000AF9D7B6E00002B007AA8933400007AA642675C2700007984CFB9C3985B768772A8A6B7B20000CAAECAAFC4B700009F94A6009F840009D09F9BA4CA9C0000CC8FC76DC87F0000C991C472A2000000A894A48CA7B501079BA2C9C69BA20000B19A5D3FA89000005CA6009DA2960901B0A7F0669FB200009D009E00B7890000DAD0F5D092820000D294D4C48BD10000B5A7A4A3B1A50402CAB6CBA6A2000000B5A7A4A3B1A8044FCDADD19D9CB00000B7778F7B8AAE0803C9AB5D3F5D3F00009EA09EA0BAB006039EA0989A8C7900009B9EF4D6B7C00000A9A7816CACA80000ABAC84705D3F000096DA635CDC8C00006F486F266F263D4784006124097B00374F6D2D6D2D6D4A3A95872322000000030000000000008D8939130000000000002E22A5C9CBC70600AB25C0B5C9B400061A2DB04CA67001082AA6BEBEBFC606002321DACBC19E03087AA08B6768380000282FBAC0B8CA7A88AD25BBA5A29900004C396C5894A6000040485A6E356E9442A32CD17EADA70000B4237923628600003E2DE9C1D7B500002F25BBA5A2990000231DB6AFB4A804023025C0B5CAB588062B2CBDBEC0C706882435A75CA20000002326BD6A82A908048B4B9A5A668000002423A09CB4BB060025259C9D8A7900001C1FCAB2C7C700002A2A9387ABA200002626A4A47D6E9D14333163A0C87500004B6F9C2D643A257049364936493647358A34438355497F1A0000A24C1D590000D38DFFBDD4CD3126"))}}),define(Q[365],J([0,1,363,213,364,122]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MinimapCharRendererFactory=void 0;class S{static create(d,g){if(this.lastCreated&&d===this.lastCreated.scale&&g===this.lastFontFamily)return this.lastCreated;let p;return M.prebakedMiniMaps[d]?p=new b.MinimapCharRenderer(M.prebakedMiniMaps[d](),d):p=S.createFromSampleData(S.createSampleData(g).data,d),this.lastFontFamily=g,this.lastCreated=p,p}static createSampleData(d){const g=document.createElement("canvas"),p=g.getContext("2d");g.style.height=`${16}px`,g.height=16,g.width=96*10,g.style.width=96*10+"px",p.fillStyle="#ffffff",p.font=`bold ${16}px ${d}`,p.textBaseline="middle";let c=0;for(const o of N.allCharCodes)p.fillText(String.fromCharCode(o),c,16/2),c+=10;return p.getImageData(0,0,96*10,16)}static createFromSampleData(d,g){const p=16*10*4*96;if(d.length!==p)throw new Error("Unexpected source in MinimapCharRenderer");let c=S._downsample(d,g);return new b.MinimapCharRenderer(c,g)}static _downsampleChar(d,g,p,c,o){const s=1*o,a=2*o;let u=c,r=0;for(let i=0;i0){const r=255/u;for(let i=0;i=0&&S<256?this._asciiMap[S]=d:this._map.set(S,d)}get(S){return S>=0&&S<256?this._asciiMap[S]:this._map.get(S)||this._defaultValue}}e.CharacterClassifier=N;class M{constructor(){this._actual=new N(0)}add(S){this._actual.set(S,1)}has(S){return this._actual.get(S)===1}}e.CharacterSet=M}),define(Q[106],J([0,1,91]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getMapForWordSeparators=e.WordCharacterClassifier=void 0;class N extends b.CharacterClassifier{constructor(S){super(0);for(let C=0,d=S.length;C(S.hasOwnProperty(C)||(S[C]=w(C)),S[C])}e.getMapForWordSeparators=M(w=>new N(w))}),define(Q[14],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Position=void 0;class b{constructor(M,w){this.lineNumber=M,this.column=w}with(M=this.lineNumber,w=this.column){return M===this.lineNumber&&w===this.column?this:new b(M,w)}delta(M=0,w=0){return this.with(this.lineNumber+M,this.column+w)}equals(M){return b.equals(this,M)}static equals(M,w){return!M&&!w?!0:!!M&&!!w&&M.lineNumber===w.lineNumber&&M.column===w.column}isBefore(M){return b.isBefore(this,M)}static isBefore(M,w){return M.lineNumberC||w===C&&S>d?(this.startLineNumber=C,this.startColumn=d,this.endLineNumber=w,this.endColumn=S):(this.startLineNumber=w,this.startColumn=S,this.endLineNumber=C,this.endColumn=d)}isEmpty(){return N.isEmpty(this)}static isEmpty(w){return w.startLineNumber===w.endLineNumber&&w.startColumn===w.endColumn}containsPosition(w){return N.containsPosition(this,w)}static containsPosition(w,S){return!(S.lineNumberw.endLineNumber||S.lineNumber===w.startLineNumber&&S.columnw.endColumn)}containsRange(w){return N.containsRange(this,w)}static containsRange(w,S){return!(S.startLineNumberw.endLineNumber||S.endLineNumber>w.endLineNumber||S.startLineNumber===w.startLineNumber&&S.startColumnw.endColumn)}strictContainsRange(w){return N.strictContainsRange(this,w)}static strictContainsRange(w,S){return!(S.startLineNumberw.endLineNumber||S.endLineNumber>w.endLineNumber||S.startLineNumber===w.startLineNumber&&S.startColumn<=w.startColumn||S.endLineNumber===w.endLineNumber&&S.endColumn>=w.endColumn)}plusRange(w){return N.plusRange(this,w)}static plusRange(w,S){let C,d,g,p;return S.startLineNumberw.endLineNumber?(g=S.endLineNumber,p=S.endColumn):S.endLineNumber===w.endLineNumber?(g=S.endLineNumber,p=Math.max(S.endColumn,w.endColumn)):(g=w.endLineNumber,p=w.endColumn),new N(C,d,g,p)}intersectRanges(w){return N.intersectRanges(this,w)}static intersectRanges(w,S){let C=w.startLineNumber,d=w.startColumn,g=w.endLineNumber,p=w.endColumn,c=S.startLineNumber,o=S.startColumn,s=S.endLineNumber,a=S.endColumn;return Cs?(g=s,p=a):g===s&&(p=Math.min(p,a)),C>g||C===g&&d>p?null:new N(C,d,g,p)}equalsRange(w){return N.equalsRange(this,w)}static equalsRange(w,S){return!!w&&!!S&&w.startLineNumber===S.startLineNumber&&w.startColumn===S.startColumn&&w.endLineNumber===S.endLineNumber&&w.endColumn===S.endColumn}getEndPosition(){return N.getEndPosition(this)}static getEndPosition(w){return new b.Position(w.endLineNumber,w.endColumn)}getStartPosition(){return N.getStartPosition(this)}static getStartPosition(w){return new b.Position(w.startLineNumber,w.startColumn)}toString(){return"["+this.startLineNumber+","+this.startColumn+" -> "+this.endLineNumber+","+this.endColumn+"]"}setEndPosition(w,S){return new N(this.startLineNumber,this.startColumn,w,S)}setStartPosition(w,S){return new N(w,S,this.endLineNumber,this.endColumn)}collapseToStart(){return N.collapseToStart(this)}static collapseToStart(w){return new N(w.startLineNumber,w.startColumn,w.startLineNumber,w.startColumn)}static fromPositions(w,S=w){return new N(w.lineNumber,w.column,S.lineNumber,S.column)}static lift(w){return w?new N(w.startLineNumber,w.startColumn,w.endLineNumber,w.endColumn):null}static isIRange(w){return w&&typeof w.startLineNumber=="number"&&typeof w.startColumn=="number"&&typeof w.endLineNumber=="number"&&typeof w.endColumn=="number"}static areIntersectingOrTouching(w,S){return!(w.endLineNumberw.startLineNumber}}e.Range=N}),define(Q[214],J([0,1,8,14,3]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.PagedScreenReaderStrategy=e.TextAreaState=e._debugComposition=void 0,e._debugComposition=!1;class w{constructor(d,g,p,c,o){this.value=d,this.selectionStart=g,this.selectionEnd=p,this.selectionStartPosition=c,this.selectionEndPosition=o}toString(){return"[ <"+this.value+">, selectionStart: "+this.selectionStart+", selectionEnd: "+this.selectionEnd+"]"}static readFromTextArea(d){return new w(d.getValue(),d.getSelectionStart(),d.getSelectionEnd(),null,null)}collapseSelection(){return new w(this.value,this.value.length,this.value.length,null,null)}writeToTextArea(d,g,p){e._debugComposition&&console.log("writeToTextArea "+d+": "+this.toString()),g.setValue(d,this.value),p&&g.setSelectionRange(d,this.selectionStart,this.selectionEnd)}deduceEditorPosition(d){if(d<=this.selectionStart){const c=this.value.substring(d,this.selectionStart);return this._finishDeduceEditorPosition(this.selectionStartPosition,c,-1)}if(d>=this.selectionEnd){const c=this.value.substring(this.selectionEnd,d);return this._finishDeduceEditorPosition(this.selectionEndPosition,c,1)}const g=this.value.substring(this.selectionStart,d);if(g.indexOf(String.fromCharCode(8230))===-1)return this._finishDeduceEditorPosition(this.selectionStartPosition,g,1);const p=this.value.substring(d,this.selectionEnd);return this._finishDeduceEditorPosition(this.selectionEndPosition,p,-1)}_finishDeduceEditorPosition(d,g,p){let c=0,o=-1;for(;(o=g.indexOf(` +`,o+1))!==-1;)c++;return[d,p*g.length,c]}static selectedText(d){return new w(d,0,d.length,null,null)}static deduceInput(d,g,p){if(!d)return{text:"",replacePrevCharCnt:0,replaceNextCharCnt:0,positionDelta:0};e._debugComposition&&(console.log("------------------------deduceInput"),console.log("PREVIOUS STATE: "+d.toString()),console.log("CURRENT STATE: "+g.toString()));let c=d.value,o=d.selectionStart,s=d.selectionEnd,a=g.value,u=g.selectionStart,r=g.selectionEnd;const i=c.substring(s),n=a.substring(r),t=b.commonSuffixLength(i,n);a=a.substring(0,a.length-t),c=c.substring(0,c.length-t);const l=c.substring(0,o),h=a.substring(0,u),m=b.commonPrefixLength(l,h);if(a=a.substring(m),c=c.substring(m),u-=m,o-=m,r-=m,s-=m,e._debugComposition&&(console.log("AFTER DIFFING PREVIOUS STATE: <"+c+">, selectionStart: "+o+", selectionEnd: "+s),console.log("AFTER DIFFING CURRENT STATE: <"+a+">, selectionStart: "+u+", selectionEnd: "+r)),p&&u===r&&c.length>0){let f=null;if(u===a.length?a.startsWith(c)&&(f=a.substring(c.length)):a.endsWith(c)&&(f=a.substring(0,a.length-c.length)),f!==null&&f.length>0&&(/\uFE0F/.test(f)||b.containsEmoji(f)))return{text:f,replacePrevCharCnt:0,replaceNextCharCnt:0,positionDelta:0}}if(u===r){if(c===a&&o===0&&s===c.length&&u===a.length&&a.indexOf(` +`)===-1&&b.containsFullWidthCharacter(a))return{text:"",replacePrevCharCnt:0,replaceNextCharCnt:0,positionDelta:0};const f=l.length-m;return e._debugComposition&&console.log("REMOVE PREVIOUS: "+(l.length-m)+" chars"),{text:a,replacePrevCharCnt:f,replaceNextCharCnt:0,positionDelta:0}}const _=s-o;return{text:a,replacePrevCharCnt:_,replaceNextCharCnt:0,positionDelta:0}}static deduceAndroidCompositionInput(d,g){if(!d)return{text:"",replacePrevCharCnt:0,replaceNextCharCnt:0,positionDelta:0};if(e._debugComposition&&(console.log("------------------------deduceAndroidCompositionInput"),console.log("PREVIOUS STATE: "+d.toString()),console.log("CURRENT STATE: "+g.toString())),d.value===g.value)return{text:"",replacePrevCharCnt:0,replaceNextCharCnt:0,positionDelta:g.selectionEnd-d.selectionEnd};const p=Math.min(b.commonPrefixLength(d.value,g.value),d.selectionEnd),c=Math.min(b.commonSuffixLength(d.value,g.value),d.value.length-d.selectionEnd),o=d.value.substring(p,d.value.length-c),s=g.value.substring(p,g.value.length-c),a=d.selectionStart-p,u=d.selectionEnd-p,r=g.selectionStart-p,i=g.selectionEnd-p;return e._debugComposition&&(console.log("AFTER DIFFING PREVIOUS STATE: <"+o+">, selectionStart: "+a+", selectionEnd: "+u),console.log("AFTER DIFFING CURRENT STATE: <"+s+">, selectionStart: "+r+", selectionEnd: "+i)),{text:s,replacePrevCharCnt:u,replaceNextCharCnt:o.length-u,positionDelta:i-s.length}}}e.TextAreaState=w,w.EMPTY=new w("",0,0,null,null);class S{static _getPageOfLine(d,g){return Math.floor((d-1)/g)}static _getRangeForPage(d,g){const p=d*g,c=p+1,o=p+g;return new M.Range(c,1,o+1,1)}static fromEditorSelection(d,g,p,c,o){const s=S._getPageOfLine(p.startLineNumber,c),a=S._getRangeForPage(s,c),u=S._getPageOfLine(p.endLineNumber,c),r=S._getRangeForPage(u,c),i=a.intersectRanges(new M.Range(1,1,p.startLineNumber,p.startColumn));let n=g.getValueInRange(i,1);const t=g.getLineCount(),l=g.getLineMaxColumn(t),h=r.intersectRanges(new M.Range(p.endLineNumber,p.endColumn,t,l));let m=g.getValueInRange(h,1),_;if(s===u||s+1===u)_=g.getValueInRange(p,1);else{const f=a.intersectRanges(p),v=r.intersectRanges(p);_=g.getValueInRange(f,1)+String.fromCharCode(8230)+g.getValueInRange(v,1)}if(o){const f=500;n.length>f&&(n=n.substring(n.length-f,n.length)),m.length>f&&(m=m.substring(0,f)),_.length>2*f&&(_=_.substring(0,f)+String.fromCharCode(8230)+_.substring(_.length-f,_.length))}return new w(n+_+m,n.length,n.length+_.length,new N.Position(p.startLineNumber,p.startColumn),new N.Position(p.endLineNumber,p.endColumn))}}e.PagedScreenReaderStrategy=S}),define(Q[215],J([0,1,195,6,2,40,3]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DiffNavigator=void 0;const C={followsCaret:!0,ignoreCharChanges:!0,alwaysRevealFirst:!0};class d extends M.Disposable{constructor(p,c={}){super();this._onDidUpdate=this._register(new N.Emitter),this._editor=p,this._options=w.mixin(c,C,!1),this.disposed=!1,this.nextIdx=-1,this.ranges=[],this.ignoreSelectionChange=!1,this.revealFirst=Boolean(this._options.alwaysRevealFirst),this._register(this._editor.onDidDispose(()=>this.dispose())),this._register(this._editor.onDidUpdateDiff(()=>this._onDiffUpdated())),this._options.followsCaret&&this._register(this._editor.getModifiedEditor().onDidChangeCursorPosition(o=>{this.ignoreSelectionChange||(this.nextIdx=-1)})),this._options.alwaysRevealFirst&&this._register(this._editor.getModifiedEditor().onDidChangeModel(o=>{this.revealFirst=!0})),this._init()}_init(){!!this._editor.getLineChanges()}_onDiffUpdated(){this._init(),this._compute(this._editor.getLineChanges()),this.revealFirst&&this._editor.getLineChanges()!==null&&(this.revealFirst=!1,this.nextIdx=-1,this.next(1))}_compute(p){this.ranges=[],p&&p.forEach(c=>{!this._options.ignoreCharChanges&&c.charChanges?c.charChanges.forEach(o=>{this.ranges.push({rhs:!0,range:new S.Range(o.modifiedStartLineNumber,o.modifiedStartColumn,o.modifiedEndLineNumber,o.modifiedEndColumn)})}):this.ranges.push({rhs:!0,range:new S.Range(c.modifiedStartLineNumber,1,c.modifiedStartLineNumber,1)})}),this.ranges.sort((c,o)=>c.range.getStartPosition().isBeforeOrEqual(o.range.getStartPosition())?-1:o.range.getStartPosition().isBeforeOrEqual(c.range.getStartPosition())?1:0),this._onDidUpdate.fire(this)}_initIdx(p){let c=!1,o=this._editor.getPosition();if(!o){this.nextIdx=0;return}for(let s=0,a=this.ranges.length;s=this.ranges.length&&(this.nextIdx=0)):(this.nextIdx-=1,this.nextIdx<0&&(this.nextIdx=this.ranges.length-1));let o=this.ranges[this.nextIdx];this.ignoreSelectionChange=!0;try{let s=o.range.getStartPosition();this._editor.setPosition(s),this._editor.revealPositionInCenter(s,c)}finally{this.ignoreSelectionChange=!1}}}canNavigate(){return this.ranges&&this.ranges.length>0}next(p=0){this._move(!0,p)}previous(p=0){this._move(!1,p)}dispose(){super.dispose(),this.ranges=[],this.disposed=!0}}e.DiffNavigator=d}),define(Q[62],J([0,1,3]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.EditOperation=void 0;class N{static insert(w,S){return{range:new b.Range(w.lineNumber,w.column,w.lineNumber,w.column),text:S,forceMoveMarkers:!0}}static delete(w){return{range:w,text:null}}static replace(w,S){return{range:w,text:S}}static replaceMove(w,S){return{range:w,text:S,forceMoveMarkers:!0}}}e.EditOperation=N}),define(Q[366],J([0,1,8,62,3]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.trimTrailingWhitespace=e.TrimTrailingWhitespaceCommand=void 0;class w{constructor(d,g){this._selection=d,this._cursors=g,this._selectionId=null}getEditOperations(d,g){let p=S(d,this._cursors);for(let c=0,o=p.length;cs.lineNumber===a.lineNumber?s.column-a.column:s.lineNumber-a.lineNumber);for(let s=d.length-2;s>=0;s--)d[s].lineNumber===d[s+1].lineNumber&&d.splice(s,1);let g=[],p=0,c=0,o=d.length;for(let s=1,a=C.getLineCount();s<=a;s++){let u=C.getLineContent(s),r=u.length+1,i=0;if(!(c255?255:M|0}}e.RGBA8=b,b.Empty=new b(0,0,0,0)}),define(Q[21],J([0,1,14,3]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Selection=void 0;class M extends N.Range{constructor(S,C,d,g){super(S,C,d,g);this.selectionStartLineNumber=S,this.selectionStartColumn=C,this.positionLineNumber=d,this.positionColumn=g}toString(){return"["+this.selectionStartLineNumber+","+this.selectionStartColumn+" -> "+this.positionLineNumber+","+this.positionColumn+"]"}equalsSelection(S){return M.selectionsEqual(this,S)}static selectionsEqual(S,C){return S.selectionStartLineNumber===C.selectionStartLineNumber&&S.selectionStartColumn===C.selectionStartColumn&&S.positionLineNumber===C.positionLineNumber&&S.positionColumn===C.positionColumn}getDirection(){return this.selectionStartLineNumber===this.startLineNumber&&this.selectionStartColumn===this.startColumn?0:1}setEndPosition(S,C){return this.getDirection()===0?new M(this.startLineNumber,this.startColumn,S,C):new M(S,C,this.startLineNumber,this.startColumn)}getPosition(){return new b.Position(this.positionLineNumber,this.positionColumn)}setStartPosition(S,C){return this.getDirection()===0?new M(S,C,this.endLineNumber,this.endColumn):new M(this.endLineNumber,this.endColumn,S,C)}static fromPositions(S,C=S){return new M(S.lineNumber,S.column,C.lineNumber,C.column)}static liftSelection(S){return new M(S.selectionStartLineNumber,S.selectionStartColumn,S.positionLineNumber,S.positionColumn)}static selectionsArrEqual(S,C){if(S&&!C||!S&&C)return!1;if(!S&&!C)return!0;if(S.length!==C.length)return!1;for(let d=0,g=S.length;dthis._onCut.fire(),0)),this._asyncFocusGainWriteScreenReaderContent=this._register(new M.RunOnceScheduler(()=>this.writeScreenReaderContent("asyncFocusGain"),0)),this._textAreaState=g.TextAreaState.EMPTY,this._selectionChangeListener=null,this.writeScreenReaderContent("ctor"),this._hasFocus=!1,this._isDoingComposition=!1,this._nextCommand=0;let l=null;this._register(N.addStandardDisposableListener(t.domNode,"keydown",f=>{(f.keyCode===109||this._isDoingComposition&&f.keyCode===1)&&f.stopPropagation(),f.equals(9)&&f.preventDefault(),l=f,this._onKeyDown.fire(f)})),this._register(N.addStandardDisposableListener(t.domNode,"keyup",f=>{this._onKeyUp.fire(f)})),this._register(N.addDisposableListener(t.domNode,"compositionstart",f=>{if(g._debugComposition&&console.log("[compositionstart]",f),!this._isDoingComposition){if(this._isDoingComposition=!0,C.isMacintosh&&this._textAreaState.selectionStart===this._textAreaState.selectionEnd&&this._textAreaState.selectionStart>0&&this._textAreaState.value.substr(this._textAreaState.selectionStart-1,1)===f.data&&(l&&l.equals(109)&&(l.code==="ArrowRight"||l.code==="ArrowLeft")||b.isFirefox)){g._debugComposition&&console.log("[compositionstart] Handling long press case on macOS + arrow key or Firefox",f),this._textAreaState=new g.TextAreaState(this._textAreaState.value,this._textAreaState.selectionStart-1,this._textAreaState.selectionEnd,this._textAreaState.selectionStartPosition?new p.Position(this._textAreaState.selectionStartPosition.lineNumber,this._textAreaState.selectionStartPosition.column-1):null,this._textAreaState.selectionEndPosition),this._onCompositionStart.fire({revealDeltaColumns:-1});return}if(b.isAndroid){this._onCompositionStart.fire({revealDeltaColumns:-this._textAreaState.selectionStart});return}this._setAndWriteTextAreaState("compositionstart",g.TextAreaState.EMPTY),this._onCompositionStart.fire({revealDeltaColumns:0})}}));const h=f=>{const v=this._textAreaState,y=g.TextAreaState.readFromTextArea(this._textArea);return[y,g.TextAreaState.deduceInput(v,y,f)]},m=()=>{const f=this._textAreaState,v=g.TextAreaState.readFromTextArea(this._textArea);return[v,g.TextAreaState.deduceAndroidCompositionInput(f,v)]},_=f=>{const v=this._textAreaState,y=g.TextAreaState.selectedText(f),L={text:y.value,replacePrevCharCnt:v.selectionEnd-v.selectionStart,replaceNextCharCnt:0,positionDelta:0};return[y,L]};this._register(N.addDisposableListener(t.domNode,"compositionupdate",f=>{if(g._debugComposition&&console.log("[compositionupdate]",f),b.isAndroid){const[L,I]=m();this._textAreaState=L,this._onType.fire(I),this._onCompositionUpdate.fire(f);return}const[v,y]=_(f.data||"");this._textAreaState=v,this._onType.fire(y),this._onCompositionUpdate.fire(f)})),this._register(N.addDisposableListener(t.domNode,"compositionend",f=>{if(g._debugComposition&&console.log("[compositionend]",f),!!this._isDoingComposition){if(this._isDoingComposition=!1,b.isAndroid){const[L,I]=m();this._textAreaState=L,this._onType.fire(I),this._onCompositionEnd.fire();return}const[v,y]=_(f.data||"");this._textAreaState=v,this._onType.fire(y),(b.isChrome||b.isFirefox)&&(this._textAreaState=g.TextAreaState.readFromTextArea(this._textArea)),this._onCompositionEnd.fire()}})),this._register(N.addDisposableListener(t.domNode,"input",()=>{if(this._textArea.setIgnoreSelectionChangeTime("received input event"),!this._isDoingComposition){const[f,v]=h(C.isMacintosh);v.replacePrevCharCnt===0&&v.text.length===1&&d.isHighSurrogate(v.text.charCodeAt(0))||(this._textAreaState=f,this._nextCommand===0?(v.text!==""||v.replacePrevCharCnt!==0)&&this._onType.fire(v):((v.text!==""||v.replacePrevCharCnt!==0)&&this._firePaste(v.text,null),this._nextCommand=0))}})),this._register(N.addDisposableListener(t.domNode,"cut",f=>{this._textArea.setIgnoreSelectionChangeTime("received cut event"),this._ensureClipboardGetsEditorSelection(f),this._asyncTriggerCut.schedule()})),this._register(N.addDisposableListener(t.domNode,"copy",f=>{this._ensureClipboardGetsEditorSelection(f)})),this._register(N.addDisposableListener(t.domNode,"paste",f=>{if(this._textArea.setIgnoreSelectionChangeTime("received paste event"),u.canUseTextData(f)){const[v,y]=u.getTextData(f);v!==""&&this._firePaste(v,y)}else this._textArea.getSelectionStart()!==this._textArea.getSelectionEnd()&&this._setAndWriteTextAreaState("paste",g.TextAreaState.EMPTY),this._nextCommand=1})),this._register(N.addDisposableListener(t.domNode,"focus",()=>{const f=this._hasFocus;this._setHasFocus(!0),b.isSafari&&!f&&this._hasFocus&&this._asyncFocusGainWriteScreenReaderContent.schedule()})),this._register(N.addDisposableListener(t.domNode,"blur",()=>{this._isDoingComposition&&(this._isDoingComposition=!1,this.writeScreenReaderContent("blurWithoutCompositionEnd"),this._onCompositionEnd.fire()),this._setHasFocus(!1)})),this._register(N.addDisposableListener(t.domNode,o.Tap,()=>{b.isAndroid&&this._isDoingComposition&&(this._isDoingComposition=!1,this.writeScreenReaderContent("tapWithoutCompositionEnd"),this._onCompositionEnd.fire())}))}_installSelectionChangeListener(){let n=0;return N.addDisposableListener(document,"selectionchange",t=>{if(!!this._hasFocus&&!this._isDoingComposition&&!!b.isChrome){const l=Date.now(),h=l-n;if(n=l,!(h<5)){const m=l-this._textArea.getIgnoreSelectionChangeTime();if(this._textArea.resetSelectionChangeTime(),!(m<100)&&!(!this._textAreaState.selectionStartPosition||!this._textAreaState.selectionEndPosition)){const _=this._textArea.getValue();if(this._textAreaState.value===_){const f=this._textArea.getSelectionStart(),v=this._textArea.getSelectionEnd();if(!(this._textAreaState.selectionStart===f&&this._textAreaState.selectionEnd===v)){const y=this._textAreaState.deduceEditorPosition(f),L=this._host.deduceModelPosition(y[0],y[1],y[2]),I=this._textAreaState.deduceEditorPosition(v),k=this._host.deduceModelPosition(I[0],I[1],I[2]),E=new c.Selection(L.lineNumber,L.column,k.lineNumber,k.column);this._onSelectionChangeRequest.fire(E)}}}}}})}dispose(){super.dispose(),this._selectionChangeListener&&(this._selectionChangeListener.dispose(),this._selectionChangeListener=null)}focusTextArea(){this._setHasFocus(!0),this.refreshFocusState()}isFocused(){return this._hasFocus}refreshFocusState(){const n=N.getShadowRoot(this.textArea.domNode);n?this._setHasFocus(n.activeElement===this.textArea.domNode):N.isInDOM(this.textArea.domNode)?this._setHasFocus(document.activeElement===this.textArea.domNode):this._setHasFocus(!1)}_setHasFocus(n){this._hasFocus!==n&&(this._hasFocus=n,this._selectionChangeListener&&(this._selectionChangeListener.dispose(),this._selectionChangeListener=null),this._hasFocus&&(this._selectionChangeListener=this._installSelectionChangeListener()),this._hasFocus&&this.writeScreenReaderContent("focusgain"),this._hasFocus?this._onFocus.fire():this._onBlur.fire())}_setAndWriteTextAreaState(n,t){this._hasFocus||(t=t.collapseSelection()),t.writeToTextArea(n,this._textArea,this._hasFocus),this._textAreaState=t}writeScreenReaderContent(n){this._isDoingComposition||this._setAndWriteTextAreaState(n,this._host.getScreenReaderContent(this._textAreaState))}_ensureClipboardGetsEditorSelection(n){const t=this._host.getDataToCopy(u.canUseTextData(n)),l={version:1,isFromEmptySelection:t.isFromEmptySelection,multicursorText:t.multicursorText,mode:t.mode};if(s.INSTANCE.set(b.isFirefox?t.text.replace(/\r\n/g,` +`):t.text,l),!u.canUseTextData(n)){this._setAndWriteTextAreaState("copy or cut",g.TextAreaState.selectedText(t.text));return}u.setTextData(n,t.text,t.html,l)}_firePaste(n,t){t||(t=s.INSTANCE.get(n)),this._onPaste.fire({text:n,metadata:t})}}e.TextAreaInput=a;class u{static canUseTextData(n){return!!(n.clipboardData||window.clipboardData)}static getTextData(n){if(n.clipboardData){n.preventDefault();const t=n.clipboardData.getData("text/plain");let l=null;const h=n.clipboardData.getData("vscode-editor-data");if(typeof h=="string")try{l=JSON.parse(h),l.version!==1&&(l=null)}catch(m){}return[t,l]}if(window.clipboardData)return n.preventDefault(),[window.clipboardData.getData("Text"),null];throw new Error("ClipboardEventUtils.getTextData: Cannot use text data!")}static setTextData(n,t,l,h){if(n.clipboardData){n.clipboardData.setData("text/plain",t),typeof l=="string"&&n.clipboardData.setData("text/html",l),n.clipboardData.setData("vscode-editor-data",JSON.stringify(h)),n.preventDefault();return}if(window.clipboardData){window.clipboardData.setData("Text",t),n.preventDefault();return}throw new Error("ClipboardEventUtils.setTextData: Cannot use text data!")}}class r extends S.Disposable{constructor(n){super();this._actual=n,this._ignoreSelectionChangeTime=0}setIgnoreSelectionChangeTime(n){this._ignoreSelectionChangeTime=Date.now()}getIgnoreSelectionChangeTime(){return this._ignoreSelectionChangeTime}resetSelectionChangeTime(){this._ignoreSelectionChangeTime=0}getValue(){return this._actual.domNode.value}setValue(n,t){const l=this._actual.domNode;l.value!==t&&(this.setIgnoreSelectionChangeTime("setValue"),l.value=t)}getSelectionStart(){return this._actual.domNode.selectionDirection==="backward"?this._actual.domNode.selectionEnd:this._actual.domNode.selectionStart}getSelectionEnd(){return this._actual.domNode.selectionDirection==="backward"?this._actual.domNode.selectionStart:this._actual.domNode.selectionEnd}setSelectionRange(n,t,l){const h=this._actual.domNode;let m=null;const _=N.getShadowRoot(h);_?m=_.activeElement:m=document.activeElement;const f=m===h,v=h.selectionStart,y=h.selectionEnd;if(f&&v===t&&y===l){b.isFirefox&&window.parent!==window&&h.focus();return}if(f){this.setIgnoreSelectionChangeTime("setSelectionRange"),h.setSelectionRange(t,l),b.isFirefox&&window.parent!==window&&h.focus();return}try{const L=N.saveParentsScrollTop(h);this.setIgnoreSelectionChangeTime("setSelectionRange"),h.focus(),h.setSelectionRange(t,l),N.restoreParentsScrollTop(h,L)}catch(L){}}}}),define(Q[92],J([0,1,21]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ReplaceCommandThatPreservesSelection=e.ReplaceCommandWithOffsetCursorState=e.ReplaceCommandWithoutChangingPosition=e.ReplaceCommandThatSelectsText=e.ReplaceCommand=void 0;class N{constructor(g,p,c=!1){this._range=g,this._text=p,this.insertsAutoWhitespace=c}getEditOperations(g,p){p.addTrackedEditOperation(this._range,this._text)}computeCursorState(g,p){let o=p.getInverseEditOperations()[0].range;return new b.Selection(o.endLineNumber,o.endColumn,o.endLineNumber,o.endColumn)}}e.ReplaceCommand=N;class M{constructor(g,p){this._range=g,this._text=p}getEditOperations(g,p){p.addTrackedEditOperation(this._range,this._text)}computeCursorState(g,p){const o=p.getInverseEditOperations()[0].range;return new b.Selection(o.startLineNumber,o.startColumn,o.endLineNumber,o.endColumn)}}e.ReplaceCommandThatSelectsText=M;class w{constructor(g,p,c=!1){this._range=g,this._text=p,this.insertsAutoWhitespace=c}getEditOperations(g,p){p.addTrackedEditOperation(this._range,this._text)}computeCursorState(g,p){let o=p.getInverseEditOperations()[0].range;return new b.Selection(o.startLineNumber,o.startColumn,o.startLineNumber,o.startColumn)}}e.ReplaceCommandWithoutChangingPosition=w;class S{constructor(g,p,c,o,s=!1){this._range=g,this._text=p,this._columnDeltaOffset=o,this._lineNumberDeltaOffset=c,this.insertsAutoWhitespace=s}getEditOperations(g,p){p.addTrackedEditOperation(this._range,this._text)}computeCursorState(g,p){let o=p.getInverseEditOperations()[0].range;return new b.Selection(o.endLineNumber+this._lineNumberDeltaOffset,o.endColumn+this._columnDeltaOffset,o.endLineNumber+this._lineNumberDeltaOffset,o.endColumn+this._columnDeltaOffset)}}e.ReplaceCommandWithOffsetCursorState=S;class C{constructor(g,p,c,o=!1){this._range=g,this._text=p,this._initialSelection=c,this._forceMoveMarkers=o,this._selectionId=null}getEditOperations(g,p){p.addTrackedEditOperation(this._range,this._text,this._forceMoveMarkers),this._selectionId=p.trackSelection(this._initialSelection)}computeCursorState(g,p){return p.getTrackedSelection(this._selectionId)}}e.ReplaceCommandThatPreservesSelection=C}),define(Q[367],J([0,1,3,21]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SurroundSelectionCommand=void 0;class M{constructor(S,C,d){this._range=S,this._charBeforeSelection=C,this._charAfterSelection=d}getEditOperations(S,C){C.addTrackedEditOperation(new b.Range(this._range.startLineNumber,this._range.startColumn,this._range.startLineNumber,this._range.startColumn),this._charBeforeSelection),C.addTrackedEditOperation(new b.Range(this._range.endLineNumber,this._range.endColumn,this._range.endLineNumber,this._range.endColumn),this._charAfterSelection)}computeCursorState(S,C){let d=C.getInverseEditOperations(),g=d[0].range,p=d[1].range;return new N.Selection(g.endLineNumber,g.endColumn,p.endLineNumber,p.endColumn-this._charAfterSelection.length)}}e.SurroundSelectionCommand=M}),define(Q[93],J([0,1,8,17,101]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.decodeUTF16LE=e.createStringBuilder=e.hasTextDecoder=e.getPlatformTextDecoder=void 0;let w;function S(){return w||(w=new TextDecoder(N.isLittleEndian()?"UTF-16LE":"UTF-16BE")),w}e.getPlatformTextDecoder=S,e.hasTextDecoder=typeof TextDecoder!="undefined",e.hasTextDecoder?(e.createStringBuilder=c=>new g(c),e.decodeUTF16LE=C):(e.createStringBuilder=c=>new p,e.decodeUTF16LE=d);function C(c,o,s){const a=new Uint16Array(c.buffer,o,s);return S().decode(a)}function d(c,o,s){let a=[],u=0;for(let r=0;r=this._capacity){this._flushBuffer(),this._completedStrings[this._completedStrings.length]=o;return}for(let a=0;a=this._lines.length)throw new Error("Illegal value for lineNumber");return this._lines[p]}onLinesDeleted(g,p){if(this.getCount()===0)return null;const c=this.getStartLineNumber(),o=this.getEndLineNumber();if(po)return null;let s=0,a=0;for(let r=c;r<=o;r++){const i=r-this._rendLineNumberStart;g<=r&&r<=p&&(a===0?(s=i,a=1):a++)}if(g=c&&a<=o&&(this._lines[a-this._rendLineNumberStart].onContentChanged(),s=!0);return s}onLinesInserted(g,p){if(this.getCount()===0)return null;const c=p-g+1,o=this.getStartLineNumber(),s=this.getEndLineNumber();if(g<=o)return this._rendLineNumberStart+=c,null;if(g>s)return null;if(c+g>s)return this._lines.splice(g-this._rendLineNumberStart,s-g+1);const a=[];for(let t=0;tc)){const r=Math.max(p,u.fromLineNumber),i=Math.min(c,u.toLineNumber);for(let n=r;n<=i;n++){const t=n-this._rendLineNumberStart;this._lines[t].onTokensChanged(),o=!0}}}return o}}e.RenderedLinesCollection=w;class S{constructor(g){this._host=g,this.domNode=this._createDomNode(),this._linesCollection=new w(()=>this._host.createVisibleLine())}_createDomNode(){const g=b.createFastDomNode(document.createElement("div"));return g.setClassName("view-layer"),g.setPosition("absolute"),g.domNode.setAttribute("role","presentation"),g.domNode.setAttribute("aria-hidden","true"),g}onConfigurationChanged(g){return!!g.hasChanged(124)}onFlushed(g){return this._linesCollection.flush(),!0}onLinesChanged(g){return this._linesCollection.onLinesChanged(g.fromLineNumber,g.toLineNumber)}onLinesDeleted(g){const p=this._linesCollection.onLinesDeleted(g.fromLineNumber,g.toLineNumber);if(p)for(let c=0,o=p.length;cp){const a=p,u=Math.min(c,s.rendLineNumberStart-1);a<=u&&(this._insertLinesBefore(s,a,u,o,p),s.linesLength+=u-a+1)}else if(s.rendLineNumberStart0&&(this._removeLinesBefore(s,a),s.linesLength-=a)}if(s.rendLineNumberStart=p,s.rendLineNumberStart+s.linesLength-1c){const a=Math.max(0,c-s.rendLineNumberStart+1),r=s.linesLength-1-a+1;r>0&&(this._removeLinesAfter(s,r),s.linesLength-=r)}return this._finishRendering(s,!1,o),s}_renderUntouchedLines(g,p,c,o,s){const a=g.rendLineNumberStart,u=g.lines;for(let r=p;r<=c;r++){const i=a+r;u[r].layoutLine(i,o[i-s])}}_insertLinesBefore(g,p,c,o,s){const a=[];let u=0;for(let r=p;r<=c;r++)a[u++]=this.host.createVisibleLine();g.lines=a.concat(g.lines)}_removeLinesBefore(g,p){for(let c=0;c=0;u--){const r=g.lines[u];o[u]&&(r.setDomNode(a),a=a.previousSibling)}}_finishRenderingInvalidLines(g,p,c){const o=document.createElement("div");C._ttPolicy&&(p=C._ttPolicy.createHTML(p)),o.innerHTML=p;for(let s=0;sd}),C._sb=N.createStringBuilder(1e5)}),define(Q[127],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TokenizationResult2=e.TokenizationResult=e.Token=void 0;class b{constructor(S,C,d){this.offset=S|0,this.type=C,this.language=d}toString(){return"("+this.offset+", "+this.type+")"}}e.Token=b;class N{constructor(S,C){this.tokens=S,this.endState=C}}e.TokenizationResult=N;class M{constructor(S,C){this.tokens=S,this.endState=C}}e.TokenizationResult2=M}),define(Q[368],J([0,1,153,8]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DiffComputer=void 0;const M=3;function w(u,r,i,n){return new b.LcsDiff(u,r,i).ComputeDiff(n)}class S{constructor(r){const i=[],n=[];for(let t=0,l=r.length;t0&&i.originalLength<20&&i.modifiedLength>0&&i.modifiedLength<20&&l()){const I=n.createCharSequence(r,i.originalStart,i.originalStart+i.originalLength-1),k=t.createCharSequence(r,i.modifiedStart,i.modifiedStart+i.modifiedLength-1);let E=w(I,k,l,!0).changes;m&&(E=g(E)),L=[];for(let T=0,O=E.length;T1&&E>1;){const T=L.charCodeAt(k-2),O=I.charCodeAt(E-2);if(T!==O)break;k--,E--}(k>1||E>1)&&this._pushTrimWhitespaceCharChange(t,l+1,1,k,h+1,1,E)}{let k=s(L,1),E=s(I,1);const T=L.length+1,O=I.length+1;for(;k!0;const r=Date.now();return()=>Date.now()-r0&&o>0)&&!(s>0&&a>0)){let u=Math.abs(o-a),r=Math.abs(c-s);if(u===0){g.spacesDiff=r,r>0&&0<=s-1&&s-10?g++:v>1&&p++,N(c,o,h,f,r),!(r.looksLikeAlignment&&!(C&&S===r.spacesDiff)))){let L=r.spacesDiff;L<=a&&u[L]++,c=h,o=f}}let i=C;g!==p&&(i=g{let h=u[l];h>t&&(t=h,n=l)}),n===4&&u[4]>0&&u[2]>0&&u[2]>=u[4]/2&&(n=2)}return{insertSpaces:i,tabSize:n}}e.guessIndentation=M}),define(Q[370],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.intervalCompare=e.recomputeMaxEnd=e.nodeAcceptEdit=e.IntervalTree=e.SENTINEL=e.IntervalNode=e.getNodeIsInOverviewRuler=e.getNodeColor=void 0;function b(D){return(D.metadata&1)>>>0}e.getNodeColor=b;function N(D,R){D.metadata=D.metadata&254|R<<0}function M(D){return(D.metadata&2)>>>1==1}function w(D,R){D.metadata=D.metadata&253|(R?1:0)<<1}function S(D){return(D.metadata&4)>>>2==1}function C(D,R){D.metadata=D.metadata&251|(R?1:0)<<2}function d(D){return(D.metadata&8)>>>3==1}e.getNodeIsInOverviewRuler=d;function g(D,R){D.metadata=D.metadata&247|(R?1:0)<<3}function p(D){return(D.metadata&48)>>>4}function c(D,R){D.metadata=D.metadata&207|R<<4}function o(D){return(D.metadata&64)>>>6==1}function s(D,R){D.metadata=D.metadata&191|(R?1:0)<<6}class a{constructor(R,W,x){this.metadata=0,this.parent=this,this.left=this,this.right=this,N(this,1),this.start=W,this.end=x,this.delta=0,this.maxEnd=x,this.id=R,this.ownerId=0,this.options=null,C(this,!1),c(this,1),g(this,!1),s(this,!1),this.cachedVersionId=0,this.cachedAbsoluteStart=W,this.cachedAbsoluteEnd=x,this.range=null,w(this,!1)}reset(R,W,x,K){this.start=W,this.end=x,this.maxEnd=x,this.cachedVersionId=R,this.cachedAbsoluteStart=W,this.cachedAbsoluteEnd=x,this.range=K}setOptions(R){this.options=R;let W=this.options.className;C(this,W==="squiggly-error"||W==="squiggly-warning"||W==="squiggly-info"),c(this,this.options.stickiness),g(this,!!(this.options.overviewRuler&&this.options.overviewRuler.color)),s(this,this.options.collapseOnReplaceEdit)}setCachedOffsets(R,W,x){this.cachedVersionId!==x&&(this.range=null),this.cachedVersionId=x,this.cachedAbsoluteStart=R,this.cachedAbsoluteEnd=W}detach(){this.parent=null,this.left=null,this.right=null}}e.IntervalNode=a,e.SENTINEL=new a(null,0,0),e.SENTINEL.parent=e.SENTINEL,e.SENTINEL.left=e.SENTINEL,e.SENTINEL.right=e.SENTINEL,N(e.SENTINEL,0);class u{constructor(){this.root=e.SENTINEL,this.requestNormalizeDelta=!1}intervalSearch(R,W,x,K,Y){return this.root===e.SENTINEL?[]:f(this,R,W,x,K,Y)}search(R,W,x){return this.root===e.SENTINEL?[]:_(this,R,W,x)}collectNodesFromOwner(R){return h(this,R)}collectNodesPostOrder(){return m(this)}insert(R){v(this,R),this._normalizeDeltaIfNecessary()}delete(R){L(this,R),this._normalizeDeltaIfNecessary()}resolveNode(R,W){const x=R;let K=0;for(;R!==this.root;)R===R.parent.right&&(K+=R.parent.delta),R=R.parent;const Y=x.start+K,ee=x.end+K;x.setCachedOffsets(Y,ee,W)}acceptReplace(R,W,x,K){const Y=t(this,R,R+W);for(let ee=0,se=Y.length;eeW||x===1?!1:x===2?!0:R}function n(D,R,W,x,K){const Y=p(D),ee=Y===0||Y===2,se=Y===1||Y===2,ne=W-R,le=x,X=Math.min(ne,le),z=D.start;let P=!1;const V=D.end;let U=!1;R<=z&&V<=W&&o(D)&&(D.start=R,P=!0,D.end=R,U=!0);{const $=K?1:ne>0?2:0;!P&&i(z,ee,R,$)&&(P=!0),!U&&i(V,se,R,$)&&(U=!0)}if(X>0&&!K){const $=ne>le?2:0;!P&&i(z,ee,R+X,$)&&(P=!0),!U&&i(V,se,R+X,$)&&(U=!0)}{const $=K?1:0;!P&&i(z,ee,W,$)&&(D.start=R+le,P=!0),!U&&i(V,se,W,$)&&(D.end=R+le,U=!0)}const H=le-ne;P||(D.start=Math.max(0,z+H)),U||(D.end=Math.max(0,V+H)),D.start>D.end&&(D.end=D.start)}e.nodeAcceptEdit=n;function t(D,R,W){let x=D.root,K=0,Y=0,ee=0,se=0,ne=[],le=0;for(;x!==e.SENTINEL;){if(M(x)){w(x.left,!1),w(x.right,!1),x===x.parent.right&&(K-=x.parent.delta),x=x.parent;continue}if(!M(x.left)){if(Y=K+x.maxEnd,YW){w(x,!0);continue}if(se=K+x.end,se>=R&&(x.setCachedOffsets(ee,se,0),ne[le++]=x),w(x,!0),x.right!==e.SENTINEL&&!M(x.right)){K+=x.delta,x=x.right;continue}}return w(D.root,!1),ne}function l(D,R,W,x){let K=D.root,Y=0,ee=0,se=0;const ne=x-(W-R);for(;K!==e.SENTINEL;){if(M(K)){w(K.left,!1),w(K.right,!1),K===K.parent.right&&(Y-=K.parent.delta),A(K),K=K.parent;continue}if(!M(K.left)){if(ee=Y+K.maxEnd,eeW){K.start+=ne,K.end+=ne,K.delta+=ne,(K.delta<-1073741824||K.delta>1073741824)&&(D.requestNormalizeDelta=!0),w(K,!0);continue}if(w(K,!0),K.right!==e.SENTINEL&&!M(K.right)){Y+=K.delta,K=K.right;continue}}w(D.root,!1)}function h(D,R){let W=D.root,x=[],K=0;for(;W!==e.SENTINEL;){if(M(W)){w(W.left,!1),w(W.right,!1),W=W.parent;continue}if(W.left!==e.SENTINEL&&!M(W.left)){W=W.left;continue}if(W.ownerId===R&&(x[K++]=W),w(W,!0),W.right!==e.SENTINEL&&!M(W.right)){W=W.right;continue}}return w(D.root,!1),x}function m(D){let R=D.root,W=[],x=0;for(;R!==e.SENTINEL;){if(M(R)){w(R.left,!1),w(R.right,!1),R=R.parent;continue}if(R.left!==e.SENTINEL&&!M(R.left)){R=R.left;continue}if(R.right!==e.SENTINEL&&!M(R.right)){R=R.right;continue}W[x++]=R,w(R,!0)}return w(D.root,!1),W}function _(D,R,W,x){let K=D.root,Y=0,ee=0,se=0,ne=[],le=0;for(;K!==e.SENTINEL;){if(M(K)){w(K.left,!1),w(K.right,!1),K===K.parent.right&&(Y-=K.parent.delta),K=K.parent;continue}if(K.left!==e.SENTINEL&&!M(K.left)){K=K.left;continue}ee=Y+K.start,se=Y+K.end,K.setCachedOffsets(ee,se,x);let X=!0;if(R&&K.ownerId&&K.ownerId!==R&&(X=!1),W&&S(K)&&(X=!1),X&&(ne[le++]=K),w(K,!0),K.right!==e.SENTINEL&&!M(K.right)){Y+=K.delta,K=K.right;continue}}return w(D.root,!1),ne}function f(D,R,W,x,K,Y){let ee=D.root,se=0,ne=0,le=0,X=0,z=[],P=0;for(;ee!==e.SENTINEL;){if(M(ee)){w(ee.left,!1),w(ee.right,!1),ee===ee.parent.right&&(se-=ee.parent.delta),ee=ee.parent;continue}if(!M(ee.left)){if(ne=se+ee.maxEnd,neW){w(ee,!0);continue}if(X=se+ee.end,X>=R){ee.setCachedOffsets(le,X,Y);let V=!0;x&&ee.ownerId&&ee.ownerId!==x&&(V=!1),K&&S(ee)&&(V=!1),V&&(z[P++]=ee)}if(w(ee,!0),ee.right!==e.SENTINEL&&!M(ee.right)){se+=ee.delta,ee=ee.right;continue}}return w(D.root,!1),z}function v(D,R){if(D.root===e.SENTINEL)return R.parent=e.SENTINEL,R.left=e.SENTINEL,R.right=e.SENTINEL,N(R,0),D.root=R,D.root;y(D,R),B(R.parent);let W=R;for(;W!==D.root&&b(W.parent)===1;)if(W.parent===W.parent.parent.left){const x=W.parent.parent.right;b(x)===1?(N(W.parent,0),N(x,0),N(W.parent.parent,1),W=W.parent.parent):(W===W.parent.right&&(W=W.parent,E(D,W)),N(W.parent,0),N(W.parent.parent,1),T(D,W.parent.parent))}else{const x=W.parent.parent.left;b(x)===1?(N(W.parent,0),N(x,0),N(W.parent.parent,1),W=W.parent.parent):(W===W.parent.left&&(W=W.parent,T(D,W)),N(W.parent,0),N(W.parent.parent,1),E(D,W.parent.parent))}return N(D.root,0),R}function y(D,R){let W=0,x=D.root;const K=R.start,Y=R.end;for(;;)if(F(K,Y,x.start+W,x.end+W)<0)if(x.left===e.SENTINEL){R.start-=W,R.end-=W,R.maxEnd-=W,x.left=R;break}else x=x.left;else if(x.right===e.SENTINEL){R.start-=W+x.delta,R.end-=W+x.delta,R.maxEnd-=W+x.delta,x.right=R;break}else W+=x.delta,x=x.right;R.parent=x,R.left=e.SENTINEL,R.right=e.SENTINEL,N(R,1)}function L(D,R){let W,x;if(R.left===e.SENTINEL?(W=R.right,x=R,W.delta+=R.delta,(W.delta<-1073741824||W.delta>1073741824)&&(D.requestNormalizeDelta=!0),W.start+=R.delta,W.end+=R.delta):R.right===e.SENTINEL?(W=R.left,x=R):(x=I(R.right),W=x.right,W.start+=x.delta,W.end+=x.delta,W.delta+=x.delta,(W.delta<-1073741824||W.delta>1073741824)&&(D.requestNormalizeDelta=!0),x.start+=R.delta,x.end+=R.delta,x.delta=R.delta,(x.delta<-1073741824||x.delta>1073741824)&&(D.requestNormalizeDelta=!0)),x===D.root){D.root=W,N(W,0),R.detach(),k(),A(W),D.root.parent=e.SENTINEL;return}let K=b(x)===1;if(x===x.parent.left?x.parent.left=W:x.parent.right=W,x===R?W.parent=x.parent:(x.parent===R?W.parent=x:W.parent=x.parent,x.left=R.left,x.right=R.right,x.parent=R.parent,N(x,b(R)),R===D.root?D.root=x:R===R.parent.left?R.parent.left=x:R.parent.right=x,x.left!==e.SENTINEL&&(x.left.parent=x),x.right!==e.SENTINEL&&(x.right.parent=x)),R.detach(),K){B(W.parent),x!==R&&(B(x),B(x.parent)),k();return}B(W),B(W.parent),x!==R&&(B(x),B(x.parent));let Y;for(;W!==D.root&&b(W)===0;)W===W.parent.left?(Y=W.parent.right,b(Y)===1&&(N(Y,0),N(W.parent,1),E(D,W.parent),Y=W.parent.right),b(Y.left)===0&&b(Y.right)===0?(N(Y,1),W=W.parent):(b(Y.right)===0&&(N(Y.left,0),N(Y,1),T(D,Y),Y=W.parent.right),N(Y,b(W.parent)),N(W.parent,0),N(Y.right,0),E(D,W.parent),W=D.root)):(Y=W.parent.left,b(Y)===1&&(N(Y,0),N(W.parent,1),T(D,W.parent),Y=W.parent.left),b(Y.left)===0&&b(Y.right)===0?(N(Y,1),W=W.parent):(b(Y.left)===0&&(N(Y.right,0),N(Y,1),E(D,Y),Y=W.parent.left),N(Y,b(W.parent)),N(W.parent,0),N(Y.left,0),T(D,W.parent),W=D.root));N(W,0),k()}function I(D){for(;D.left!==e.SENTINEL;)D=D.left;return D}function k(){e.SENTINEL.parent=e.SENTINEL,e.SENTINEL.delta=0,e.SENTINEL.start=0,e.SENTINEL.end=0}function E(D,R){const W=R.right;W.delta+=R.delta,(W.delta<-1073741824||W.delta>1073741824)&&(D.requestNormalizeDelta=!0),W.start+=R.delta,W.end+=R.delta,R.right=W.left,W.left!==e.SENTINEL&&(W.left.parent=R),W.parent=R.parent,R.parent===e.SENTINEL?D.root=W:R===R.parent.left?R.parent.left=W:R.parent.right=W,W.left=R,R.parent=W,A(R),A(W)}function T(D,R){const W=R.left;R.delta-=W.delta,(R.delta<-1073741824||R.delta>1073741824)&&(D.requestNormalizeDelta=!0),R.start-=W.delta,R.end-=W.delta,R.left=W.right,W.right!==e.SENTINEL&&(W.right.parent=R),W.parent=R.parent,R.parent===e.SENTINEL?D.root=W:R===R.parent.right?R.parent.right=W:R.parent.left=W,W.right=R,R.parent=W,A(R),A(W)}function O(D){let R=D.end;if(D.left!==e.SENTINEL){const W=D.left.maxEnd;W>R&&(R=W)}if(D.right!==e.SENTINEL){const W=D.right.maxEnd+D.delta;W>R&&(R=W)}return R}function A(D){D.maxEnd=O(D)}e.recomputeMaxEnd=A;function B(D){for(;D!==e.SENTINEL;){const R=O(D);if(D.maxEnd===R)return;D.maxEnd=R,D=D.parent}}function F(D,R,W,x){return D===W?R-x:D-W}e.intervalCompare=F}),define(Q[371],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.recomputeTreeMetadata=e.updateTreeMetadata=e.fixInsert=e.rbDelete=e.rightRotate=e.leftRotate=e.resetSentinel=e.calculateLF=e.calculateSize=e.righttest=e.leftest=e.SENTINEL=e.TreeNode=void 0;class b{constructor(u,r){this.piece=u,this.color=r,this.size_left=0,this.lf_left=0,this.parent=this,this.left=this,this.right=this}next(){if(this.right!==e.SENTINEL)return N(this.right);let u=this;for(;u.parent!==e.SENTINEL&&u.parent.left!==u;)u=u.parent;return u.parent===e.SENTINEL?e.SENTINEL:u.parent}prev(){if(this.left!==e.SENTINEL)return M(this.left);let u=this;for(;u.parent!==e.SENTINEL&&u.parent.right!==u;)u=u.parent;return u.parent===e.SENTINEL?e.SENTINEL:u.parent}detach(){this.parent=null,this.left=null,this.right=null}}e.TreeNode=b,e.SENTINEL=new b(null,0),e.SENTINEL.parent=e.SENTINEL,e.SENTINEL.left=e.SENTINEL,e.SENTINEL.right=e.SENTINEL,e.SENTINEL.color=0;function N(a){for(;a.left!==e.SENTINEL;)a=a.left;return a}e.leftest=N;function M(a){for(;a.right!==e.SENTINEL;)a=a.right;return a}e.righttest=M;function w(a){return a===e.SENTINEL?0:a.size_left+a.piece.length+w(a.right)}e.calculateSize=w;function S(a){return a===e.SENTINEL?0:a.lf_left+a.piece.lineFeedCnt+S(a.right)}e.calculateLF=S;function C(){e.SENTINEL.parent=e.SENTINEL}e.resetSentinel=C;function d(a,u){let r=u.right;r.size_left+=u.size_left+(u.piece?u.piece.length:0),r.lf_left+=u.lf_left+(u.piece?u.piece.lineFeedCnt:0),u.right=r.left,r.left!==e.SENTINEL&&(r.left.parent=u),r.parent=u.parent,u.parent===e.SENTINEL?a.root=r:u.parent.left===u?u.parent.left=r:u.parent.right=r,r.left=u,u.parent=r}e.leftRotate=d;function g(a,u){let r=u.left;u.left=r.right,r.right!==e.SENTINEL&&(r.right.parent=u),r.parent=u.parent,u.size_left-=r.size_left+(r.piece?r.piece.length:0),u.lf_left-=r.lf_left+(r.piece?r.piece.lineFeedCnt:0),u.parent===e.SENTINEL?a.root=r:u===u.parent.right?u.parent.right=r:u.parent.left=r,r.right=u,u.parent=r}e.rightRotate=g;function p(a,u){let r,i;if(u.left===e.SENTINEL?(i=u,r=i.right):u.right===e.SENTINEL?(i=u,r=i.left):(i=N(u.right),r=i.right),i===a.root){a.root=r,r.color=0,u.detach(),C(),a.root.parent=e.SENTINEL;return}let n=i.color===1;if(i===i.parent.left?i.parent.left=r:i.parent.right=r,i===u?(r.parent=i.parent,s(a,r)):(i.parent===u?r.parent=i:r.parent=i.parent,s(a,r),i.left=u.left,i.right=u.right,i.parent=u.parent,i.color=u.color,u===a.root?a.root=i:u===u.parent.left?u.parent.left=i:u.parent.right=i,i.left!==e.SENTINEL&&(i.left.parent=i),i.right!==e.SENTINEL&&(i.right.parent=i),i.size_left=u.size_left,i.lf_left=u.lf_left,s(a,i)),u.detach(),r.parent.left===r){let l=w(r),h=S(r);if(l!==r.parent.size_left||h!==r.parent.lf_left){let m=l-r.parent.size_left,_=h-r.parent.lf_left;r.parent.size_left=l,r.parent.lf_left=h,o(a,r.parent,m,_)}}if(s(a,r.parent),n){C();return}let t;for(;r!==a.root&&r.color===0;)r===r.parent.left?(t=r.parent.right,t.color===1&&(t.color=0,r.parent.color=1,d(a,r.parent),t=r.parent.right),t.left.color===0&&t.right.color===0?(t.color=1,r=r.parent):(t.right.color===0&&(t.left.color=0,t.color=1,g(a,t),t=r.parent.right),t.color=r.parent.color,r.parent.color=0,t.right.color=0,d(a,r.parent),r=a.root)):(t=r.parent.left,t.color===1&&(t.color=0,r.parent.color=1,g(a,r.parent),t=r.parent.left),t.left.color===0&&t.right.color===0?(t.color=1,r=r.parent):(t.left.color===0&&(t.right.color=0,t.color=1,d(a,t),t=r.parent.left),t.color=r.parent.color,r.parent.color=0,t.left.color=0,g(a,r.parent),r=a.root));r.color=0,C()}e.rbDelete=p;function c(a,u){for(s(a,u);u!==a.root&&u.parent.color===1;)if(u.parent===u.parent.parent.left){const r=u.parent.parent.right;r.color===1?(u.parent.color=0,r.color=0,u.parent.parent.color=1,u=u.parent.parent):(u===u.parent.right&&(u=u.parent,d(a,u)),u.parent.color=0,u.parent.parent.color=1,g(a,u.parent.parent))}else{const r=u.parent.parent.left;r.color===1?(u.parent.color=0,r.color=0,u.parent.parent.color=1,u=u.parent.parent):(u===u.parent.left&&(u=u.parent,g(a,u)),u.parent.color=0,u.parent.parent.color=1,d(a,u.parent.parent))}a.root.color=0}e.fixInsert=c;function o(a,u,r,i){for(;u!==a.root&&u!==e.SENTINEL;)u.parent.left===u&&(u.parent.size_left+=r,u.parent.lf_left+=i),u=u.parent}e.updateTreeMetadata=o;function s(a,u){let r=0,i=0;if(u!==a.root){if(r===0){for(;u!==a.root&&u===u.parent.right;)u=u.parent;if(u===a.root)return;u=u.parent,r=w(u.left)-u.size_left,i=S(u.left)-u.lf_left,u.size_left+=r,u.lf_left+=i}for(;u!==a.root&&(r!==0||i!==0);)u.parent.left===u&&(u.parent.size_left+=r,u.parent.lf_left+=i),u=u.parent}}e.recomputeTreeMetadata=s}),define(Q[218],J([0,1,101,93]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.compressConsecutiveTextChanges=e.TextChange=void 0;function M(d){return d.replace(/\n/g,"\\n").replace(/\r/g,"\\r")}class w{constructor(g,p,c,o){this.oldPosition=g,this.oldText=p,this.newPosition=c,this.newText=o}get oldLength(){return this.oldText.length}get oldEnd(){return this.oldPosition+this.oldText.length}get newLength(){return this.newText.length}get newEnd(){return this.newPosition+this.newText.length}toString(){return this.oldText.length===0?`(insert@${this.oldPosition} "${M(this.newText)}")`:this.newText.length===0?`(delete@${this.oldPosition} "${M(this.oldText)}")`:`(replace@${this.oldPosition} "${M(this.oldText)}" with "${M(this.newText)}")`}static _writeStringSize(g){return 4+2*g.length}static _writeString(g,p,c){const o=p.length;b.writeUInt32BE(g,o,c),c+=4;for(let s=0;s=0;let l=null;try{l=b.createRegExp(this.searchString,this.isRegex,{matchCase:this.matchCase,wholeWord:!1,multiline:t,global:!0,unicode:!0})}catch(m){return null}if(!l)return null;let h=!this.isRegex&&!t;return h&&this.searchString.toLowerCase()!==this.searchString.toUpperCase()&&(h=this.matchCase),new p(l,this.wordSeparators?N.getMapForWordSeparators(this.wordSeparators):null,h?this.searchString:null)}}e.SearchParams=d;function g(n){if(!n||n.length===0)return!1;for(let t=0,l=n.length;t=l)break;const m=n.charCodeAt(t);if(m===110||m===114||m===87||m===119)return!0}return!1}e.isMultilineRegexSource=g;class p{constructor(t,l,h){this.regex=t,this.wordSeparators=l,this.simpleSearch=h}}e.SearchData=p;function c(n,t,l){if(!l)return new S.FindMatch(n,null);let h=[];for(let m=0,_=t.length;m<_;m++)h[m]=t[m];return new S.FindMatch(n,h)}e.createFindMatch=c;class o{constructor(t){let l=[],h=0;for(let m=0,_=t.length;m<_;m++)t.charCodeAt(m)===10&&(l[h++]=m);this._lineFeedsOffsets=l}findLineFeedCountBeforeOffset(t){const l=this._lineFeedsOffsets;let h=0,m=l.length-1;if(m===-1||t<=l[0])return 0;for(;h>0);l[_]>=t?m=_-1:l[_+1]>=t?(h=_,m=_):h=_+1}return h+1}}class s{static findMatches(t,l,h,m,_){const f=l.parseSearchRequest();return f?f.regex.multiline?this._doFindMatchesMultiline(t,h,new i(f.wordSeparators,f.regex),m,_):this._doFindMatchesLineByLine(t,h,f,m,_):[]}static _getMultilineMatchRange(t,l,h,m,_,f){let v,y=0;m?(y=m.findLineFeedCountBeforeOffset(_),v=l+_+y):v=l+_;let L;if(m){let T=m.findLineFeedCountBeforeOffset(_+f.length)-y;L=v+f.length+T}else L=v+f.length;const I=t.getPositionAt(v),k=t.getPositionAt(L);return new w.Range(I.lineNumber,I.column,k.lineNumber,k.column)}static _doFindMatchesMultiline(t,l,h,m,_){const f=t.getOffsetAt(l.getStartPosition()),v=t.getValueInRange(l,1),y=t.getEOL()===`\r +`?new o(v):null,L=[];let I=0,k;for(h.reset(0);k=h.next(v);)if(L[I++]=c(this._getMultilineMatchRange(t,f,v,y,k.index,k[0]),k,m),I>=_)return L;return L}static _doFindMatchesLineByLine(t,l,h,m,_){const f=[];let v=0;if(l.startLineNumber===l.endLineNumber){const L=t.getLineContent(l.startLineNumber).substring(l.startColumn-1,l.endColumn-1);return v=this._findMatchesInLine(h,L,l.startLineNumber,l.startColumn-1,v,f,m,_),f}const y=t.getLineContent(l.startLineNumber).substring(l.startColumn-1);v=this._findMatchesInLine(h,y,l.startLineNumber,l.startColumn-1,v,f,m,_);for(let L=l.startLineNumber+1;L=y))return _;return _}const I=new i(t.wordSeparators,t.regex);let k;I.reset(0);do if(k=I.next(l),k&&(f[_++]=c(new w.Range(h,k.index+1+m,h,k.index+1+k[0].length+m),k,v),_>=y))return _;while(k);return _}static findNextMatch(t,l,h,m){const _=l.parseSearchRequest();if(!_)return null;const f=new i(_.wordSeparators,_.regex);return _.regex.multiline?this._doFindNextMatchMultiline(t,h,f,m):this._doFindNextMatchLineByLine(t,h,f,m)}static _doFindNextMatchMultiline(t,l,h,m){const _=new M.Position(l.lineNumber,1),f=t.getOffsetAt(_),v=t.getLineCount(),y=t.getValueInRange(new w.Range(_.lineNumber,_.column,v,t.getLineMaxColumn(v)),1),L=t.getEOL()===`\r +`?new o(y):null;h.reset(l.column-1);let I=h.next(y);return I?c(this._getMultilineMatchRange(t,f,y,L,I.index,I[0]),I,m):l.lineNumber!==1||l.column!==1?this._doFindNextMatchMultiline(t,new M.Position(1,1),h,m):null}static _doFindNextMatchLineByLine(t,l,h,m){const _=t.getLineCount(),f=l.lineNumber,v=t.getLineContent(f),y=this._findFirstMatchInLine(h,v,f,l.column,m);if(y)return y;for(let L=1;L<=_;L++){const I=(f+L-1)%_,k=t.getLineContent(I+1),E=this._findFirstMatchInLine(h,k,I+1,1,m);if(E)return E}return null}static _findFirstMatchInLine(t,l,h,m,_){t.reset(m-1);const f=t.next(l);return f?c(new w.Range(h,f.index+1,h,f.index+1+f[0].length),f,_):null}static findPreviousMatch(t,l,h,m){const _=l.parseSearchRequest();if(!_)return null;const f=new i(_.wordSeparators,_.regex);return _.regex.multiline?this._doFindPreviousMatchMultiline(t,h,f,m):this._doFindPreviousMatchLineByLine(t,h,f,m)}static _doFindPreviousMatchMultiline(t,l,h,m){const _=this._doFindMatchesMultiline(t,new w.Range(1,1,l.lineNumber,l.column),h,m,10*C);if(_.length>0)return _[_.length-1];const f=t.getLineCount();return l.lineNumber!==f||l.column!==t.getLineMaxColumn(f)?this._doFindPreviousMatchMultiline(t,new M.Position(f,t.getLineMaxColumn(f)),h,m):null}static _doFindPreviousMatchLineByLine(t,l,h,m){const _=t.getLineCount(),f=l.lineNumber,v=t.getLineContent(f).substring(0,l.column-1),y=this._findLastMatchInLine(h,v,f,m);if(y)return y;for(let L=1;L<=_;L++){const I=(_+f-L-1)%_,k=t.getLineContent(I+1),E=this._findLastMatchInLine(h,k,I+1,m);if(E)return E}return null}static _findLastMatchInLine(t,l,h,m){let _=null,f;for(t.reset(0);f=t.next(l);)_=c(new w.Range(h,f.index+1,h,f.index+1+f[0].length),f,m);return _}}e.TextModelSearch=s;function a(n,t,l,h,m){if(h===0)return!0;const _=t.charCodeAt(h-1);if(n.get(_)!==0||_===13||_===10)return!0;if(m>0){const f=t.charCodeAt(h);if(n.get(f)!==0)return!0}return!1}function u(n,t,l,h,m){if(h+m===l)return!0;const _=t.charCodeAt(h+m);if(n.get(_)!==0||_===13||_===10)return!0;if(m>0){const f=t.charCodeAt(h+m-1);if(n.get(f)!==0)return!0}return!1}function r(n,t,l,h,m){return a(n,t,l,h,m)&&u(n,t,l,h,m)}e.isValidMatch=r;class i{constructor(t,l){this._wordSeparators=t,this._searchRegex=l,this._prevMatchStartIndex=-1,this._prevMatchLength=0}reset(t){this._searchRegex.lastIndex=t,this._prevMatchStartIndex=-1,this._prevMatchLength=0}next(t){const l=t.length;let h;do{if(this._prevMatchStartIndex+this._prevMatchLength===l||(h=this._searchRegex.exec(t),!h))return null;const m=h.index,_=h[0].length;if(m===this._prevMatchStartIndex&&_===this._prevMatchLength){if(_===0){b.getNextCodePoint(t,l,this._searchRegex.lastIndex)>65535?this._searchRegex.lastIndex+=2:this._searchRegex.lastIndex+=1;continue}return null}if(this._prevMatchStartIndex=m,this._prevMatchLength=_,!this._wordSeparators||r(this._wordSeparators,t,l,m,_))return h}while(h);return null}}e.Searcher=i}),define(Q[219],J([0,1,14,3,53,371,166]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.PieceTreeBase=e.StringBuffer=e.Piece=e.createLineStarts=e.createLineStartsFast=e.LineStarts=e.createUintArray=e.AverageBufferSize=void 0,e.AverageBufferSize=65535;function C(r){let i;return r[r.length-1]<65536?i=new Uint16Array(r.length):i=new Uint32Array(r.length),i.set(r,0),i}e.createUintArray=C;class d{constructor(i,n,t,l,h){this.lineStarts=i,this.cr=n,this.lf=t,this.crlf=l,this.isBasicASCII=h}}e.LineStarts=d;function g(r,i=!0){let n=[0],t=1;for(let l=0,h=r.length;l126)&&(m=!1)}const _=new d(C(r),t,l,h,m);return r.length=0,_}e.createLineStarts=p;class c{constructor(i,n,t,l,h){this.bufferIndex=i,this.start=n,this.end=t,this.lineFeedCnt=l,this.length=h}}e.Piece=c;class o{constructor(i,n){this.buffer=i,this.lineStarts=n}}e.StringBuffer=o;class s{constructor(i,n){this._pieces=[],this._tree=i,this._BOM=n,this._index=0,i.root!==w.SENTINEL&&i.iterate(i.root,t=>(t!==w.SENTINEL&&this._pieces.push(t.piece),!0))}read(){return this._pieces.length===0?this._index===0?(this._index++,this._BOM):null:this._index>this._pieces.length-1?null:this._index===0?this._BOM+this._tree.getPieceContent(this._pieces[this._index++]):this._tree.getPieceContent(this._pieces[this._index++])}}class a{constructor(i){this._limit=i,this._cache=[]}get(i){for(let n=this._cache.length-1;n>=0;n--){let t=this._cache[n];if(t.nodeStartOffset<=i&&t.nodeStartOffset+t.node.piece.length>=i)return t}return null}get2(i){for(let n=this._cache.length-1;n>=0;n--){let t=this._cache[n];if(t.nodeStartLineNumber&&t.nodeStartLineNumber=i)return t}return null}set(i){this._cache.length>=this._limit&&this._cache.shift(),this._cache.push(i)}validate(i){let n=!1,t=this._cache;for(let l=0;l=i){t[l]=null,n=!0;continue}}if(n){let l=[];for(const h of t)h!==null&&l.push(h);this._cache=l}}}class u{constructor(i,n,t){this.create(i,n,t)}create(i,n,t){this._buffers=[new o("",[0])],this._lastChangeBufferPos={line:0,column:0},this.root=w.SENTINEL,this._lineCnt=1,this._length=0,this._EOL=n,this._EOLLength=n.length,this._EOLNormalized=t;let l=null;for(let h=0,m=i.length;h0){i[h].lineStarts||(i[h].lineStarts=g(i[h].buffer));let _=new c(h+1,{line:0,column:0},{line:i[h].lineStarts.length-1,column:i[h].buffer.length-i[h].lineStarts[i[h].lineStarts.length-1]},i[h].lineStarts.length-1,i[h].buffer.length);this._buffers.push(i[h]),l=this.rbInsertRight(l,_)}this._searchCache=new a(1),this._lastVisitedLine={lineNumber:0,value:""},this.computeBufferMetadata()}normalizeEOL(i){let n=e.AverageBufferSize,t=n-Math.floor(n/3),l=t*2,h="",m=0,_=[];if(this.iterate(this.root,f=>{let v=this.getNodeContent(f),y=v.length;if(m<=t||m+y0){let f=h.replace(/\r\n|\r|\n/g,i);_.push(new o(f,g(f)))}this.create(_,i,!0)}getEOL(){return this._EOL}setEOL(i){this._EOL=i,this._EOLLength=this._EOL.length,this.normalizeEOL(i)}createSnapshot(i){return new s(this,i)}getOffsetAt(i,n){let t=0,l=this.root;for(;l!==w.SENTINEL;)if(l.left!==w.SENTINEL&&l.lf_left+1>=i)l=l.left;else{if(l.lf_left+l.piece.lineFeedCnt+1>=i)return t+=l.size_left,t+=this.getAccumulatedValue(l,i-l.lf_left-2)+n-1;i-=l.lf_left+l.piece.lineFeedCnt,t+=l.size_left+l.piece.length,l=l.right}return t}getPositionAt(i){i=Math.floor(i),i=Math.max(0,i);let n=this.root,t=0,l=i;for(;n!==w.SENTINEL;)if(n.size_left!==0&&n.size_left>=i)n=n.left;else if(n.size_left+n.piece.length>=i){let h=this.getIndexOf(n,i-n.size_left);if(t+=n.lf_left+h.index,h.index===0){let m=this.getOffsetAt(t+1,1),_=l-m;return new b.Position(t+1,_+1)}return new b.Position(t+1,h.remainder+1)}else if(i-=n.size_left+n.piece.length,t+=n.lf_left+n.piece.lineFeedCnt,n.right===w.SENTINEL){let h=this.getOffsetAt(t+1,1),m=l-i-h;return new b.Position(t+1,m+1)}else n=n.right;return new b.Position(1,1)}getValueInRange(i,n){if(i.startLineNumber===i.endLineNumber&&i.startColumn===i.endColumn)return"";let t=this.nodeAt2(i.startLineNumber,i.startColumn),l=this.nodeAt2(i.endLineNumber,i.endColumn),h=this.getValueInRange2(t,l);return n?n!==this._EOL||!this._EOLNormalized?h.replace(/\r\n|\r|\n/g,n):n===this.getEOL()&&this._EOLNormalized?h:h.replace(/\r\n|\r|\n/g,n):h}getValueInRange2(i,n){if(i.node===n.node){let _=i.node,f=this._buffers[_.piece.bufferIndex].buffer,v=this.offsetInBuffer(_.piece.bufferIndex,_.piece.start);return f.substring(v+i.remainder,v+n.remainder)}let t=i.node,l=this._buffers[t.piece.bufferIndex].buffer,h=this.offsetInBuffer(t.piece.bufferIndex,t.piece.start),m=l.substring(h+i.remainder,h+t.piece.length);for(t=t.next();t!==w.SENTINEL;){let _=this._buffers[t.piece.bufferIndex].buffer,f=this.offsetInBuffer(t.piece.bufferIndex,t.piece.start);if(t===n.node){m+=_.substring(f,f+n.remainder);break}else m+=_.substr(f,t.piece.length);t=t.next()}return m}getLinesContent(){let i=[],n=0,t="",l=!1;return this.iterate(this.root,h=>{if(h===w.SENTINEL)return!0;const m=h.piece;let _=m.length;if(_===0)return!0;const f=this._buffers[m.bufferIndex].buffer,v=this._buffers[m.bufferIndex].lineStarts,y=m.start.line,L=m.end.line;let I=v[y]+m.start.column;if(l&&(f.charCodeAt(I)===10&&(I++,_--),i[n++]=t,t="",l=!1,_===0))return!0;if(y===L)return!this._EOLNormalized&&f.charCodeAt(I+_-1)===13?(l=!0,t+=f.substr(I,_-1)):t+=f.substr(I,_),!0;t+=this._EOLNormalized?f.substring(I,Math.max(I,v[y+1]-this._EOLLength)):f.substring(I,v[y+1]).replace(/(\r\n|\r|\n)$/,""),i[n++]=t;for(let k=y+1;kD+E,n.reset(0)):(B=I.buffer,F=D=>D,n.reset(E));do if(O=n.next(B),O){if(F(O.index)>=T)return y;this.positionInBuffer(i,F(O.index)-k,A);let D=this.getLineFeedCnt(i.piece.bufferIndex,h,A),R=A.line===h.line?A.column-h.column+l:A.column+1,W=R+O[0].length;if(L[y++]=S.createFindMatch(new N.Range(t+D,R,t+D,W),O,f),F(O.index)+O[0].length>=T||y>=v)return y}while(O);return y}findMatchesLineByLine(i,n,t,l){const h=[];let m=0;const _=new S.Searcher(n.wordSeparators,n.regex);let f=this.nodeAt2(i.startLineNumber,i.startColumn);if(f===null)return[];let v=this.nodeAt2(i.endLineNumber,i.endColumn);if(v===null)return[];let y=this.positionInBuffer(f.node,f.remainder),L=this.positionInBuffer(v.node,v.remainder);if(f.node===v.node)return this.findMatchesInNode(f.node,_,i.startLineNumber,i.startColumn,y,L,n,t,l,m,h),h;let I=i.startLineNumber,k=f.node;for(;k!==v.node;){let T=this.getLineFeedCnt(k.piece.bufferIndex,y,k.piece.end);if(T>=1){let A=this._buffers[k.piece.bufferIndex].lineStarts,B=this.offsetInBuffer(k.piece.bufferIndex,k.piece.start),F=A[y.line+T],D=I===i.startLineNumber?i.startColumn:1;if(m=this.findMatchesInNode(k,_,I,D,y,this.positionInBuffer(k,F-B),n,t,l,m,h),m>=l)return h;I+=T}let O=I===i.startLineNumber?i.startColumn-1:0;if(I===i.endLineNumber){const A=this.getLineContent(I).substring(O,i.endColumn-1);return m=this._findMatchesInLine(n,_,A,i.endLineNumber,O,m,h,t,l),h}if(m=this._findMatchesInLine(n,_,this.getLineContent(I).substr(O),I,O,m,h,t,l),m>=l)return h;I++,f=this.nodeAt2(I,1),k=f.node,y=this.positionInBuffer(f.node,f.remainder)}if(I===i.endLineNumber){let T=I===i.startLineNumber?i.startColumn-1:0;const O=this.getLineContent(I).substring(T,i.endColumn-1);return m=this._findMatchesInLine(n,_,O,i.endLineNumber,T,m,h,t,l),h}let E=I===i.startLineNumber?i.startColumn:1;return m=this.findMatchesInNode(v.node,_,I,E,y,L,n,t,l,m,h),h}_findMatchesInLine(i,n,t,l,h,m,_,f,v){const y=i.wordSeparators;if(!f&&i.simpleSearch){const I=i.simpleSearch,k=I.length,E=t.length;let T=-k;for(;(T=t.indexOf(I,T+k))!==-1;)if((!y||S.isValidMatch(y,t,E,T,k))&&(_[m++]=new M.FindMatch(new N.Range(l,T+1+h,l,T+1+k+h),null),m>=v))return m;return m}let L;n.reset(0);do if(L=n.next(t),L&&(_[m++]=S.createFindMatch(new N.Range(l,L.index+1+h,l,L.index+1+L[0].length+h),L,f),m>=v))return m;while(L);return m}insert(i,n,t=!1){if(this._EOLNormalized=this._EOLNormalized&&t,this._lastVisitedLine.lineNumber=0,this._lastVisitedLine.value="",this.root!==w.SENTINEL){let{node:l,remainder:h,nodeStartOffset:m}=this.nodeAt(i),_=l.piece,f=_.bufferIndex,v=this.positionInBuffer(l,h);if(l.piece.bufferIndex===0&&_.end.line===this._lastChangeBufferPos.line&&_.end.column===this._lastChangeBufferPos.column&&m+_.length===i&&n.lengthi){let y=[],L=new c(_.bufferIndex,v,_.end,this.getLineFeedCnt(_.bufferIndex,v,_.end),this.offsetInBuffer(f,_.end)-this.offsetInBuffer(f,v));if(this.shouldCheckCRLF()&&this.endWithCR(n)&&this.nodeCharCodeAt(l,h)===10){let T={line:L.start.line+1,column:0};L=new c(L.bufferIndex,T,L.end,this.getLineFeedCnt(L.bufferIndex,T,L.end),L.length-1),n+=` +`}if(this.shouldCheckCRLF()&&this.startWithLF(n))if(this.nodeCharCodeAt(l,h-1)===13){let T=this.positionInBuffer(l,h-1);this.deleteNodeTail(l,T),n="\r"+n,l.piece.length===0&&y.push(l)}else this.deleteNodeTail(l,v);else this.deleteNodeTail(l,v);let I=this.createNewPieces(n);L.length>0&&this.rbInsertRight(l,L);let k=l;for(let E=0;E=0;m--)h=this.rbInsertLeft(h,l[m]);this.validateCRLFWithPrevNode(h),this.deleteNodes(t)}insertContentToNodeRight(i,n){this.adjustCarriageReturnFromNext(i,n)&&(i+=` +`);let t=this.createNewPieces(i),l=this.rbInsertRight(n,t[0]),h=l;for(let m=1;m=I)v=L+1;else break;return t?(t.line=L,t.column=f-k,null):{line:L,column:f-k}}getLineFeedCnt(i,n,t){if(t.column===0)return t.line-n.line;let l=this._buffers[i].lineStarts;if(t.line===l.length-1)return t.line-n.line;let h=l[t.line+1],m=l[t.line]+t.column;if(h>m+1)return t.line-n.line;let _=m-1;return this._buffers[i].buffer.charCodeAt(_)===13?t.line-n.line+1:t.line-n.line}offsetInBuffer(i,n){return this._buffers[i].lineStarts[n.line]+n.column}deleteNodes(i){for(let n=0;ne.AverageBufferSize){let y=[];for(;i.length>e.AverageBufferSize;){const I=i.charCodeAt(e.AverageBufferSize-1);let k;I===13||I>=55296&&I<=56319?(k=i.substring(0,e.AverageBufferSize-1),i=i.substring(e.AverageBufferSize-1)):(k=i.substring(0,e.AverageBufferSize),i=i.substring(e.AverageBufferSize));let E=g(k);y.push(new c(this._buffers.length,{line:0,column:0},{line:E.length-1,column:k.length-E[E.length-1]},E.length-1,k.length)),this._buffers.push(new o(k,E))}let L=g(i);return y.push(new c(this._buffers.length,{line:0,column:0},{line:L.length-1,column:i.length-L[L.length-1]},L.length-1,i.length)),this._buffers.push(new o(i,L)),y}let n=this._buffers[0].buffer.length;const t=g(i,!1);let l=this._lastChangeBufferPos;if(this._buffers[0].lineStarts[this._buffers[0].lineStarts.length-1]===n&&n!==0&&this.startWithLF(i)&&this.endWithCR(this._buffers[0].buffer)){this._lastChangeBufferPos={line:this._lastChangeBufferPos.line,column:this._lastChangeBufferPos.column+1},l=this._lastChangeBufferPos;for(let y=0;y=i-1)t=t.left;else if(t.lf_left+t.piece.lineFeedCnt>i-1){let f=this.getAccumulatedValue(t,i-t.lf_left-2),v=this.getAccumulatedValue(t,i-t.lf_left-1),y=this._buffers[t.piece.bufferIndex].buffer,L=this.offsetInBuffer(t.piece.bufferIndex,t.piece.start);return m+=t.size_left,this._searchCache.set({node:t,nodeStartOffset:m,nodeStartLineNumber:_-(i-1-t.lf_left)}),y.substring(L+f,L+v-n)}else if(t.lf_left+t.piece.lineFeedCnt===i-1){let f=this.getAccumulatedValue(t,i-t.lf_left-2),v=this._buffers[t.piece.bufferIndex].buffer,y=this.offsetInBuffer(t.piece.bufferIndex,t.piece.start);l=v.substring(y+f,y+t.piece.length);break}else i-=t.lf_left+t.piece.lineFeedCnt,m+=t.size_left+t.piece.length,t=t.right}for(t=t.next();t!==w.SENTINEL;){let m=this._buffers[t.piece.bufferIndex].buffer;if(t.piece.lineFeedCnt>0){let _=this.getAccumulatedValue(t,0),f=this.offsetInBuffer(t.piece.bufferIndex,t.piece.start);return l+=m.substring(f,f+_-n),l}else{let _=this.offsetInBuffer(t.piece.bufferIndex,t.piece.start);l+=m.substr(_,t.piece.length)}t=t.next()}return l}computeBufferMetadata(){let i=this.root,n=1,t=0;for(;i!==w.SENTINEL;)n+=i.lf_left+i.piece.lineFeedCnt,t+=i.size_left+i.piece.length,i=i.right;this._lineCnt=n,this._length=t,this._searchCache.validate(this._length)}getIndexOf(i,n){let t=i.piece,l=this.positionInBuffer(i,n),h=l.line-t.start.line;if(this.offsetInBuffer(t.bufferIndex,t.end)-this.offsetInBuffer(t.bufferIndex,t.start)===n){let m=this.getLineFeedCnt(i.piece.bufferIndex,t.start,l);if(m!==h)return{index:m,remainder:0}}return{index:h,remainder:l.column}}getAccumulatedValue(i,n){if(n<0)return 0;let t=i.piece,l=this._buffers[t.bufferIndex].lineStarts,h=t.start.line+n+1;return h>t.end.line?l[t.end.line]+t.end.column-l[t.start.line]-t.start.column:l[h]-l[t.start.line]-t.start.column}deleteNodeTail(i,n){const t=i.piece,l=t.lineFeedCnt,h=this.offsetInBuffer(t.bufferIndex,t.end),m=n,_=this.offsetInBuffer(t.bufferIndex,m),f=this.getLineFeedCnt(t.bufferIndex,t.start,m),v=f-l,y=_-h,L=t.length+y;i.piece=new c(t.bufferIndex,t.start,m,f,L),w.updateTreeMetadata(this,i,y,v)}deleteNodeHead(i,n){const t=i.piece,l=t.lineFeedCnt,h=this.offsetInBuffer(t.bufferIndex,t.start),m=n,_=this.getLineFeedCnt(t.bufferIndex,m,t.end),f=this.offsetInBuffer(t.bufferIndex,m),v=_-l,y=h-f,L=t.length+y;i.piece=new c(t.bufferIndex,m,t.end,_,L),w.updateTreeMetadata(this,i,y,v)}shrinkNode(i,n,t){const l=i.piece,h=l.start,m=l.end,_=l.length,f=l.lineFeedCnt,v=n,y=this.getLineFeedCnt(l.bufferIndex,l.start,v),L=this.offsetInBuffer(l.bufferIndex,n)-this.offsetInBuffer(l.bufferIndex,h);i.piece=new c(l.bufferIndex,l.start,v,y,L),w.updateTreeMetadata(this,i,L-_,y-f);let I=new c(l.bufferIndex,t,m,this.getLineFeedCnt(l.bufferIndex,t,m),this.offsetInBuffer(l.bufferIndex,m)-this.offsetInBuffer(l.bufferIndex,t)),k=this.rbInsertRight(i,I);this.validateCRLFWithPrevNode(k)}appendToNode(i,n){this.adjustCarriageReturnFromNext(n,i)&&(n+=` +`);const t=this.shouldCheckCRLF()&&this.startWithLF(n)&&this.endWithCR(i),l=this._buffers[0].buffer.length;this._buffers[0].buffer+=n;const h=g(n,!1);for(let k=0;ki)n=n.left;else if(n.size_left+n.piece.length>=i){l+=n.size_left;let h={node:n,remainder:i-n.size_left,nodeStartOffset:l};return this._searchCache.set(h),h}else i-=n.size_left+n.piece.length,l+=n.size_left+n.piece.length,n=n.right;return null}nodeAt2(i,n){let t=this.root,l=0;for(;t!==w.SENTINEL;)if(t.left!==w.SENTINEL&&t.lf_left>=i-1)t=t.left;else if(t.lf_left+t.piece.lineFeedCnt>i-1){let h=this.getAccumulatedValue(t,i-t.lf_left-2),m=this.getAccumulatedValue(t,i-t.lf_left-1);return l+=t.size_left,{node:t,remainder:Math.min(h+n-1,m),nodeStartOffset:l}}else if(t.lf_left+t.piece.lineFeedCnt===i-1){let h=this.getAccumulatedValue(t,i-t.lf_left-2);if(h+n-1<=t.piece.length)return{node:t,remainder:h+n-1,nodeStartOffset:l};n-=t.piece.length-h;break}else i-=t.lf_left+t.piece.lineFeedCnt,l+=t.size_left+t.piece.length,t=t.right;for(t=t.next();t!==w.SENTINEL;){if(t.piece.lineFeedCnt>0){let h=this.getAccumulatedValue(t,0),m=this.offsetOfNode(t);return{node:t,remainder:Math.min(n-1,h),nodeStartOffset:m}}else if(t.piece.length>=n-1){let h=this.offsetOfNode(t);return{node:t,remainder:n-1,nodeStartOffset:h}}else n-=t.piece.length;t=t.next()}return null}nodeCharCodeAt(i,n){if(i.piece.lineFeedCnt<1)return-1;let t=this._buffers[i.piece.bufferIndex],l=this.offsetInBuffer(i.piece.bufferIndex,i.piece.start)+n;return t.buffer.charCodeAt(l)}offsetOfNode(i){if(!i)return 0;let n=i.size_left;for(;i!==this.root;)i.parent.right===i&&(n+=i.parent.size_left+i.parent.piece.length),i=i.parent;return n}shouldCheckCRLF(){return!(this._EOLNormalized&&this._EOL===` +`)}startWithLF(i){if(typeof i=="string")return i.charCodeAt(0)===10;if(i===w.SENTINEL||i.piece.lineFeedCnt===0)return!1;let n=i.piece,t=this._buffers[n.bufferIndex].lineStarts,l=n.start.line,h=t[l]+n.start.column;return l===t.length-1||t[l+1]>h+1?!1:this._buffers[n.bufferIndex].buffer.charCodeAt(h)===10}endWithCR(i){return typeof i=="string"?i.charCodeAt(i.length-1)===13:i===w.SENTINEL||i.piece.lineFeedCnt===0?!1:this.nodeCharCodeAt(i,i.piece.length-1)===13}validateCRLFWithPrevNode(i){if(this.shouldCheckCRLF()&&this.startWithLF(i)){let n=i.prev();this.endWithCR(n)&&this.fixCRLF(n,i)}}validateCRLFWithNextNode(i){if(this.shouldCheckCRLF()&&this.endWithCR(i)){let n=i.next();this.startWithLF(n)&&this.fixCRLF(i,n)}}fixCRLF(i,n){let t=[],l=this._buffers[i.piece.bufferIndex].lineStarts,h;i.piece.end.column===0?h={line:i.piece.end.line-1,column:l[i.piece.end.line]-l[i.piece.end.line-1]-1}:h={line:i.piece.end.line,column:i.piece.end.column-1};const m=i.piece.length-1,_=i.piece.lineFeedCnt-1;i.piece=new c(i.piece.bufferIndex,i.piece.start,h,_,m),w.updateTreeMetadata(this,i,-1,-1),i.piece.length===0&&t.push(i);let f={line:n.piece.start.line+1,column:0};const v=n.piece.length-1,y=this.getLineFeedCnt(n.piece.bufferIndex,f,n.piece.end);n.piece=new c(n.piece.bufferIndex,f,n.piece.end,y,v),w.updateTreeMetadata(this,n,-1,-1),n.piece.length===0&&t.push(n);let L=this.createNewPieces(`\r +`);this.rbInsertRight(i,L[0]);for(let I=0;I/?";function b(C=""){let d="(-?\\d*\\.\\d\\w*)|([^";for(const g of e.USUAL_WORD_SEPARATORS)C.indexOf(g)>=0||(d+="\\"+g);return d+="\\s]+)",new RegExp(d,"g")}e.DEFAULT_WORD_REGEXP=b();function N(C){let d=e.DEFAULT_WORD_REGEXP;if(C&&C instanceof RegExp)if(C.global)d=C;else{let g="g";C.ignoreCase&&(g+="i"),C.multiline&&(g+="m"),C.unicode&&(g+="u"),d=new RegExp(C.source,g)}return d.lastIndex=0,d}e.ensureValidWordDefinition=N;const M={maxLen:1e3,windowSize:15,timeBudget:150};function w(C,d,g,p,c=M){if(g.length>c.maxLen){let r=C-c.maxLen/2;return r<0?r=0:p+=r,g=g.substring(r,C+c.maxLen/2),w(C,d,g,p,c)}const o=Date.now(),s=C-1-p;let a=-1,u=null;for(let r=1;!(Date.now()-o>=c.timeBudget);r++){const i=s-c.windowSize*r;d.lastIndex=Math.max(0,i);const n=S(d,g,s,a);if(!n&&u||(u=n,i<=0))break;a=i}if(u){let r={word:u[0],startColumn:p+1+u.index,endColumn:p+1+u.index+u[0].length};return d.lastIndex=0,r}return null}e.getWordAtText=w;function S(C,d,g,p){let c;for(;c=C.exec(d);){const o=c.index||0;if(o<=g&&C.lastIndex>=g)return c;if(p>0&&o>p)return null}return null}}),define(Q[373],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.FrankensteinMode=void 0;class b{constructor(M){this._languageIdentifier=M}getId(){return this._languageIdentifier.language}}e.FrankensteinMode=b}),define(Q[109],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AutoClosingPairs=e.StandardAutoClosingPairConditional=e.IndentAction=void 0;var b;(function(S){S[S.None=0]="None",S[S.Indent=1]="Indent",S[S.IndentOutdent=2]="IndentOutdent",S[S.Outdent=3]="Outdent"})(b=e.IndentAction||(e.IndentAction={}));class N{constructor(C){if(this.open=C.open,this.close=C.close,this._standardTokenMask=0,Array.isArray(C.notIn))for(let d=0,g=C.notIn.length;dg&&(g=c)}return g}else{if(typeof w=="string")return d?w==="*"?5:w===C?10:0:0;if(w){const{language:g,pattern:p,scheme:c,hasAccessToAllModels:o}=w;if(!d&&!o)return 0;let s=0;if(c)if(c===S.scheme)s=10;else if(c==="*")s=5;else return 0;if(g)if(g===C)s=10;else if(g==="*")s=Math.max(s,5);else return 0;if(p){let a;if(typeof p=="string"?a=p:a=Object.assign(Object.assign({},p),{base:N.normalize(p.base)}),a===S.fsPath||b.match(a,S.fsPath))s=10;else return 0}return s}else return 0}}e.score=M}),define(Q[375],J([0,1,91]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.computeLinks=e.LinkComputer=e.StateMachine=e.Uint8Matrix=void 0;class N{constructor(o,s,a){const u=new Uint8Array(o*s);for(let r=0,i=o*s;rs&&(s=t),n>a&&(a=n),l>a&&(a=l)}s++,a++;let u=new N(a,s,0);for(let r=0,i=o.length;r=this._maxCharCode?0:this._states.get(o,s)}}e.StateMachine=M;let w=null;function S(){return w===null&&(w=new M([[1,104,2],[1,72,2],[1,102,6],[1,70,6],[2,116,3],[2,84,3],[3,116,4],[3,84,4],[4,112,5],[4,80,5],[5,115,9],[5,83,9],[5,58,10],[6,105,7],[6,73,7],[7,108,8],[7,76,8],[8,101,9],[8,69,9],[9,58,10],[10,47,11],[11,47,12]])),w}let C=null;function d(){if(C===null){C=new b.CharacterClassifier(0);const c=` <>'"\u3001\u3002\uFF61\uFF64\uFF0C\uFF0E\uFF1A\uFF1B\u2018\u201C\u3008\u300A\u300C\u300E\u3010\u3014\uFF08\uFF3B\uFF5B\uFF62\uFF63\uFF5D\uFF3D\uFF09\u3015\u3011\u300F\u300D\u300B\u3009\u201D\u2019\uFF40\uFF5E\u2026`;for(let s=0;su);if(u>0){const n=s.charCodeAt(u-1),t=s.charCodeAt(i);(n===40&&t===41||n===91&&t===93||n===123&&t===125)&&i--}return{range:{startLineNumber:a,startColumn:u+1,endLineNumber:a,endColumn:i+2},url:s.substring(u,i+1)}}static computeLinks(o,s=S()){const a=d();let u=[];for(let r=1,i=o.getLineCount();r<=i;r++){const n=o.getLineContent(r),t=n.length;let l=0,h=0,m=0,_=1,f=!1,v=!1,y=!1,L=!1;for(;l0&&w.getLanguageId(c-1)===g;)c--;return new N(w,g,c,p+1,w.getStartOffset(c),w.getEndOffset(p))}e.createScopedLineTokens=b;class N{constructor(S,C,d,g,p,c){this._actual=S,this.languageId=C,this._firstTokenIndex=d,this._lastTokenIndex=g,this.firstCharOffset=p,this._lastCharOffset=c}getLineContent(){return this._actual.getLineContent().substring(this.firstCharOffset,this._lastCharOffset)}getActualLineContentBefore(S){return this._actual.getLineContent().substring(0,this.firstCharOffset+S)}getTokenCount(){return this._lastTokenIndex-this._firstTokenIndex}findTokenIndexAtOffset(S){return this._actual.findTokenIndexAtOffset(S+this.firstCharOffset)-this._firstTokenIndex}getStandardTokenType(S){return this._actual.getStandardTokenType(S+this._firstTokenIndex)}}e.ScopedLineTokens=N;function M(w){return(w&7)!=0}e.ignoreBracketsInToken=M}),define(Q[376],J([0,1,109]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CharacterPairSupport=void 0;class N{constructor(w){if(w.autoClosingPairs?this._autoClosingPairs=w.autoClosingPairs.map(S=>new b.StandardAutoClosingPairConditional(S)):w.brackets?this._autoClosingPairs=w.brackets.map(S=>new b.StandardAutoClosingPairConditional({open:S[0],close:S[1]})):this._autoClosingPairs=[],w.__electricCharacterSupport&&w.__electricCharacterSupport.docComment){const S=w.__electricCharacterSupport.docComment;this._autoClosingPairs.push(new b.StandardAutoClosingPairConditional({open:S.open,close:S.close||""}))}this._autoCloseBefore=typeof w.autoCloseBefore=="string"?w.autoCloseBefore:N.DEFAULT_AUTOCLOSE_BEFORE_LANGUAGE_DEFINED,this._surroundingPairs=w.surroundingPairs||this._autoClosingPairs}getAutoClosingPairs(){return this._autoClosingPairs}getAutoCloseBeforeSet(){return this._autoCloseBefore}static shouldAutoClosePair(w,S,C){if(S.getTokenCount()===0)return!0;const d=S.findTokenIndexAtOffset(C-2),g=S.getStandardTokenType(d);return w.isOK(g)}getSurroundingPairs(){return this._surroundingPairs}}e.CharacterPairSupport=N,N.DEFAULT_AUTOCLOSE_BEFORE_LANGUAGE_DEFINED=`;:.,=}])> + `}),define(Q[377],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IndentRulesSupport=void 0;function b(M){return M.global&&(M.lastIndex=0),!0}class N{constructor(w){this._indentationRules=w}shouldIncrease(w){return!!(this._indentationRules&&this._indentationRules.increaseIndentPattern&&b(this._indentationRules.increaseIndentPattern)&&this._indentationRules.increaseIndentPattern.test(w))}shouldDecrease(w){return!!(this._indentationRules&&this._indentationRules.decreaseIndentPattern&&b(this._indentationRules.decreaseIndentPattern)&&this._indentationRules.decreaseIndentPattern.test(w))}shouldIndentNextLine(w){return!!(this._indentationRules&&this._indentationRules.indentNextLinePattern&&b(this._indentationRules.indentNextLinePattern)&&this._indentationRules.indentNextLinePattern.test(w))}shouldIgnore(w){return!!(this._indentationRules&&this._indentationRules.unIndentedLinePattern&&b(this._indentationRules.unIndentedLinePattern)&&this._indentationRules.unIndentedLinePattern.test(w))}getIndentMetadata(w){let S=0;return this.shouldIncrease(w)&&(S+=1),this.shouldDecrease(w)&&(S+=2),this.shouldIndentNextLine(w)&&(S+=4),this.shouldIgnore(w)&&(S+=8),S}}e.IndentRulesSupport=N}),define(Q[378],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.BasicInplaceReplace=void 0;class b{constructor(){this._defaultValueSet=[["true","false"],["True","False"],["Private","Public","Friend","ReadOnly","Partial","Protected","WriteOnly"],["public","protected","private"]]}navigateValueSet(M,w,S,C,d){if(M&&w){let g=this.doNavigateValueSet(w,d);if(g)return{range:M,value:g}}if(S&&C){let g=this.doNavigateValueSet(C,d);if(g)return{range:S,value:g}}return null}doNavigateValueSet(M,w){let S=this.numberReplace(M,w);return S!==null?S:this.textReplace(M,w)}numberReplace(M,w){let S=Math.pow(10,M.length-(M.lastIndexOf(".")+1)),C=Number(M),d=parseFloat(M);return!isNaN(C)&&!isNaN(d)&&C===d?C===0&&!w?null:(C=Math.floor(C*S),C+=w?S:-S,String(C/S)):null}textReplace(M,w){return this.valueSetsReplace(this._defaultValueSet,M,w)}valueSetsReplace(M,w,S){let C=null;for(let d=0,g=M.length;C===null&&d=0?(C+=S?1:-1,C<0?C=M.length-1:C%=M.length,M[C]):null}}e.BasicInplaceReplace=b,b.INSTANCE=new b}),define(Q[379],J([0,1,12,8,109]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.OnEnterSupport=void 0;class w{constructor(C){C=C||{},C.brackets=C.brackets||[["(",")"],["{","}"],["[","]"]],this._brackets=[],C.brackets.forEach(d=>{const g=w._createOpenBracketRegExp(d[0]),p=w._createCloseBracketRegExp(d[1]);g&&p&&this._brackets.push({open:d[0],openRegExp:g,close:d[1],closeRegExp:p})}),this._regExpRules=C.onEnterRules||[]}onEnter(C,d,g,p){if(C>=3)for(let c=0,o=this._regExpRules.length;cu.reg?u.reg.test(u.text):!0))return s.action}if(C>=2&&g.length>0&&p.length>0)for(let c=0,o=this._brackets.length;c=2&&g.length>0){for(let c=0,o=this._brackets.length;c[v[0].toLowerCase(),v[1].toLowerCase()]);const h=[];for(let v=0;v{const[L,I]=v,[k,E]=y;return L===k||L===E||I===k||I===E},_=(v,y)=>{const L=Math.min(v,y),I=Math.max(v,y);for(let k=0;k0&&f.push({open:y,close:L})}return f}class C{constructor(l,h){const m=S(h);this.brackets=m.map((_,f)=>new w(l,f,_.open,_.close,c(_.open,_.close,m,f),o(_.open,_.close,m,f))),this.forwardRegex=s(this.brackets),this.reversedRegex=a(this.brackets),this.textIsBracket={},this.textIsOpenBracket={},this.maxBracketLength=0;for(const _ of this.brackets){for(const f of _.open)this.textIsBracket[f]=_,this.textIsOpenBracket[f]=!0,this.maxBracketLength=Math.max(this.maxBracketLength,f.length);for(const f of _.close)this.textIsBracket[f]=_,this.textIsOpenBracket[f]=!1,this.maxBracketLength=Math.max(this.maxBracketLength,f.length)}}}e.RichEditBrackets=C;function d(t,l,h,m){for(let _=0,f=l.length;_=0&&m.push(y);for(const y of v.close)y.indexOf(t)>=0&&m.push(y)}}function g(t,l){return t.length-l.length}function p(t){if(t.length<=1)return t;const l=[],h=new Set;for(const m of t)h.has(m)||(l.push(m),h.add(m));return l}function c(t,l,h,m){let _=[];_=_.concat(t),_=_.concat(l);for(let f=0,v=_.length;f=0;v--)_[f++]=m.charCodeAt(v);return N.getPlatformTextDecoder().decode(_)}else{let _=[],f=0;for(let v=m.length-1;v>=0;v--)_[f++]=m.charAt(v);return _.join("")}}let l=null,h=null;return function(_){return l!==_&&(l=_,h=t(l)),h}}();class n{static _findPrevBracketInText(l,h,m,_){let f=m.match(l);if(!f)return null;let v=m.length-(f.index||0),y=f[0].length,L=_+v;return new M.Range(h,L-y+1,h,L+1)}static findPrevBracketInRange(l,h,m,_,f){const y=i(m).substring(m.length-f,m.length-_);return this._findPrevBracketInText(l,h,y,_)}static findNextBracketInText(l,h,m,_){let f=m.match(l);if(!f)return null;let v=f.index||0,y=f[0].length;if(y===0)return null;let L=_+v;return new M.Range(h,L+1,h,L+1+y)}static findNextBracketInRange(l,h,m,_,f){const v=m.substring(_,f);return this.findNextBracketInText(l,h,v,_)}}e.BracketsUtils=n}),define(Q[380],J([0,1,167,168]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.BracketElectricCharacterSupport=void 0;class M{constructor(S){this._richEditBrackets=S}getElectricCharacters(){let S=[];if(this._richEditBrackets)for(const C of this._richEditBrackets.brackets)for(const d of C.close){const g=d.charAt(d.length-1);S.push(g)}return S=S.filter((C,d,g)=>g.indexOf(C)===d),S}onElectricCharacter(S,C,d){if(!this._richEditBrackets||this._richEditBrackets.brackets.length===0)return null;const g=C.findTokenIndexAtOffset(d-1);if(b.ignoreBracketsInToken(C.getStandardTokenType(g)))return null;const p=this._richEditBrackets.reversedRegex,c=C.getLineContent().substring(0,d-1)+S,o=N.BracketsUtils.findPrevBracketInRange(p,1,c,0,c.length);if(!o)return null;const s=c.substring(o.startColumn-1,o.endColumn-1).toLowerCase();if(this._richEditBrackets.textIsOpenBracket[s])return null;const u=C.getActualLineContentBefore(o.startColumn-1);return/^\s*$/.test(u)?{matchOpenBracket:s}:null}}e.BracketElectricCharacterSupport=M}),define(Q[41],J([0,1,6,2,8,128,109,167,376,380,377,379,168]),function(q,e,b,N,M,w,S,C,d,g,p,c,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.LanguageConfigurationRegistry=e.LanguageConfigurationRegistryImpl=e.LanguageConfigurationChangeEvent=e.RichEditSupport=void 0;class s{constructor(t,l){this._languageIdentifier=t,this._brackets=null,this._electricCharacter=null,this._conf=l,this._onEnterSupport=this._conf.brackets||this._conf.indentationRules||this._conf.onEnterRules?new c.OnEnterSupport(this._conf):null,this.comments=s._handleComments(this._conf),this.characterPair=new d.CharacterPairSupport(this._conf),this.wordDefinition=this._conf.wordPattern||w.DEFAULT_WORD_REGEXP,this.indentationRules=this._conf.indentationRules,this._conf.indentationRules?this.indentRulesSupport=new p.IndentRulesSupport(this._conf.indentationRules):this.indentRulesSupport=null,this.foldingRules=this._conf.folding||{}}get brackets(){return!this._brackets&&this._conf.brackets&&(this._brackets=new o.RichEditBrackets(this._languageIdentifier,this._conf.brackets)),this._brackets}get electricCharacter(){return this._electricCharacter||(this._electricCharacter=new g.BracketElectricCharacterSupport(this.brackets)),this._electricCharacter}onEnter(t,l,h,m){return this._onEnterSupport?this._onEnterSupport.onEnter(t,l,h,m):null}static _handleComments(t){let l=t.comments;if(!l)return null;let h={};if(l.lineComment&&(h.lineCommentToken=l.lineComment),l.blockComment){let[m,_]=l.blockComment;h.blockCommentStartToken=m,h.blockCommentEndToken=_}return h}}e.RichEditSupport=s;class a{constructor(t){this.languageIdentifier=t}}e.LanguageConfigurationChangeEvent=a;class u{constructor(t,l,h){this.configuration=t,this.priority=l,this.order=h}static cmp(t,l){return t.priority===l.priority?t.order-l.order:t.priority-l.priority}}class r{constructor(t){this.languageIdentifier=t,this._resolved=null,this._entries=[],this._order=0,this._resolved=null}register(t,l){const h=new u(t,l,++this._order);return this._entries.push(h),this._resolved=null,N.toDisposable(()=>{for(let m=0;m{_.dispose(),this._onDidChange.fire(new a(t))})}_getRichEditSupport(t){const l=this._entries2.get(t);return l?l.getRichEditSupport():null}getIndentationRules(t){const l=this._getRichEditSupport(t);return l&&l.indentationRules||null}_getElectricCharacterSupport(t){let l=this._getRichEditSupport(t);return l&&l.electricCharacter||null}getElectricCharacters(t){let l=this._getElectricCharacterSupport(t);return l?l.getElectricCharacters():[]}onElectricCharacter(t,l,h){let m=C.createScopedLineTokens(l,h-1),_=this._getElectricCharacterSupport(m.languageId);return _?_.onElectricCharacter(t,m,h-m.firstCharOffset):null}getComments(t){let l=this._getRichEditSupport(t);return l&&l.comments||null}_getCharacterPairSupport(t){let l=this._getRichEditSupport(t);return l&&l.characterPair||null}getAutoClosingPairs(t){const l=this._getCharacterPairSupport(t);return new S.AutoClosingPairs(l?l.getAutoClosingPairs():[])}getAutoCloseBeforeSet(t){let l=this._getCharacterPairSupport(t);return l?l.getAutoCloseBeforeSet():d.CharacterPairSupport.DEFAULT_AUTOCLOSE_BEFORE_LANGUAGE_DEFINED}getSurroundingPairs(t){let l=this._getCharacterPairSupport(t);return l?l.getSurroundingPairs():[]}shouldAutoClosePair(t,l,h){const m=C.createScopedLineTokens(l,h-1);return d.CharacterPairSupport.shouldAutoClosePair(t,m,h-m.firstCharOffset)}getWordDefinition(t){let l=this._getRichEditSupport(t);return l?w.ensureValidWordDefinition(l.wordDefinition||null):w.ensureValidWordDefinition(null)}getFoldingRules(t){let l=this._getRichEditSupport(t);return l?l.foldingRules:{}}getIndentRulesSupport(t){let l=this._getRichEditSupport(t);return l&&l.indentRulesSupport||null}getPrecedingValidLine(t,l,h){let m=t.getLanguageIdAtPosition(l,0);if(l>1){let _,f=-1;for(_=l-1;_>=1;_--){if(t.getLanguageIdAtPosition(_,0)!==m)return f;let v=t.getLineContent(_);if(h.shouldIgnore(v)||/^\s+$/.test(v)||v===""){f=_;continue}return _}}return-1}getInheritIndentForLine(t,l,h,m=!0){if(t<4)return null;const _=this.getIndentRulesSupport(l.getLanguageIdentifier().id);if(!_)return null;if(h<=1)return{indentation:"",action:null};const f=this.getPrecedingValidLine(l,h,_);if(f<0)return null;if(f<1)return{indentation:"",action:null};const v=l.getLineContent(f);if(_.shouldIncrease(v)||_.shouldIndentNextLine(v))return{indentation:M.getLeadingWhitespace(v),action:S.IndentAction.Indent,line:f};if(_.shouldDecrease(v))return{indentation:M.getLeadingWhitespace(v),action:null,line:f};{if(f===1)return{indentation:M.getLeadingWhitespace(l.getLineContent(f)),action:null,line:f};const y=f-1,L=_.getIndentMetadata(l.getLineContent(y));if(!(L&(1|2))&&L&4){let I=0;for(let k=y-1;k>0;k--)if(!_.shouldIndentNextLine(l.getLineContent(k))){I=k;break}return{indentation:M.getLeadingWhitespace(l.getLineContent(I+1)),action:null,line:I+1}}if(m)return{indentation:M.getLeadingWhitespace(l.getLineContent(f)),action:null,line:f};for(let I=f;I>0;I--){const k=l.getLineContent(I);if(_.shouldIncrease(k))return{indentation:M.getLeadingWhitespace(k),action:S.IndentAction.Indent,line:I};if(_.shouldIndentNextLine(k)){let E=0;for(let T=I-1;T>0;T--)if(!_.shouldIndentNextLine(l.getLineContent(I))){E=T;break}return{indentation:M.getLeadingWhitespace(l.getLineContent(E+1)),action:null,line:E+1}}else if(_.shouldDecrease(k))return{indentation:M.getLeadingWhitespace(k),action:null,line:I}}return{indentation:M.getLeadingWhitespace(l.getLineContent(1)),action:null,line:1}}}getGoodIndentForLine(t,l,h,m,_){if(t<4)return null;const f=this._getRichEditSupport(h);if(!f)return null;const v=this.getIndentRulesSupport(h);if(!v)return null;const y=this.getInheritIndentForLine(t,l,m),L=l.getLineContent(m);if(y){const I=y.line;if(I!==void 0){const k=f.onEnter(t,"",l.getLineContent(I),"");if(k){let E=M.getLeadingWhitespace(l.getLineContent(I));return k.removeText&&(E=E.substring(0,E.length-k.removeText)),k.indentAction===S.IndentAction.Indent||k.indentAction===S.IndentAction.IndentOutdent?E=_.shiftIndent(E):k.indentAction===S.IndentAction.Outdent&&(E=_.unshiftIndent(E)),v.shouldDecrease(L)&&(E=_.unshiftIndent(E)),k.appendText&&(E+=k.appendText),M.getLeadingWhitespace(E)}}return v.shouldDecrease(L)?y.action===S.IndentAction.Indent?y.indentation:_.unshiftIndent(y.indentation):y.action===S.IndentAction.Indent?_.shiftIndent(y.indentation):y.indentation}return null}getIndentForEnter(t,l,h,m){if(t<4)return null;l.forceTokenization(h.startLineNumber);const _=l.getLineTokens(h.startLineNumber),f=C.createScopedLineTokens(_,h.startColumn-1),v=f.getLineContent();let y=!1,L;f.firstCharOffset>0&&_.getLanguageId(0)!==f.languageId?(y=!0,L=v.substr(0,h.startColumn-1-f.firstCharOffset)):L=_.getLineContent().substring(0,h.startColumn-1);let I;h.isEmpty()?I=v.substr(h.startColumn-1-f.firstCharOffset):I=this.getScopedLineTokens(l,h.endLineNumber,h.endColumn).getLineContent().substr(h.endColumn-1-f.firstCharOffset);const k=this.getIndentRulesSupport(f.languageId);if(!k)return null;const E=L,T=M.getLeadingWhitespace(L),O={getLineTokens:D=>l.getLineTokens(D),getLanguageIdentifier:()=>l.getLanguageIdentifier(),getLanguageIdAtPosition:(D,R)=>l.getLanguageIdAtPosition(D,R),getLineContent:D=>D===h.startLineNumber?E:l.getLineContent(D)},A=M.getLeadingWhitespace(_.getLineContent()),B=this.getInheritIndentForLine(t,O,h.startLineNumber+1);if(!B){const D=y?A:T;return{beforeEnter:D,afterEnter:D}}let F=y?A:B.indentation;return B.action===S.IndentAction.Indent&&(F=m.shiftIndent(F)),k.shouldDecrease(I)&&(F=m.unshiftIndent(F)),{beforeEnter:y?A:T,afterEnter:F}}getIndentActionForType(t,l,h,m,_){if(t<4)return null;const f=this.getScopedLineTokens(l,h.startLineNumber,h.startColumn);if(f.firstCharOffset)return null;const v=this.getIndentRulesSupport(f.languageId);if(!v)return null;const y=f.getLineContent(),L=y.substr(0,h.startColumn-1-f.firstCharOffset);let I;if(h.isEmpty()?I=y.substr(h.startColumn-1-f.firstCharOffset):I=this.getScopedLineTokens(l,h.endLineNumber,h.endColumn).getLineContent().substr(h.endColumn-1-f.firstCharOffset),!v.shouldDecrease(L+I)&&v.shouldDecrease(L+m+I)){const k=this.getInheritIndentForLine(t,l,h.startLineNumber,!1);if(!k)return null;let E=k.indentation;return k.action!==S.IndentAction.Indent&&(E=_.unshiftIndent(E)),E}return null}getIndentMetadata(t,l){const h=this.getIndentRulesSupport(t.getLanguageIdentifier().id);return!h||l<1||l>t.getLineCount()?null:h.getIndentMetadata(t.getLineContent(l))}getEnterAction(t,l,h){const m=this.getScopedLineTokens(l,h.startLineNumber,h.startColumn),_=this._getRichEditSupport(m.languageId);if(!_)return null;const f=m.getLineContent(),v=f.substr(0,h.startColumn-1-m.firstCharOffset);let y;h.isEmpty()?y=f.substr(h.startColumn-1-m.firstCharOffset):y=this.getScopedLineTokens(l,h.endLineNumber,h.endColumn).getLineContent().substr(h.endColumn-1-m.firstCharOffset);let L="";if(h.startLineNumber>1&&m.firstCharOffset===0){const A=this.getScopedLineTokens(l,h.startLineNumber-1);A.languageId===m.languageId&&(L=A.getLineContent())}const I=_.onEnter(t,L,v,y);if(!I)return null;const k=I.indentAction;let E=I.appendText;const T=I.removeText||0;E?k===S.IndentAction.Indent&&(E=" "+E):k===S.IndentAction.Indent||k===S.IndentAction.IndentOutdent?E=" ":E="";let O=this.getIndentationAtPosition(l,h.startLineNumber,h.startColumn);return T&&(O=O.substring(0,O.length-T)),{indentAction:k,appendText:E,removeText:T,indentation:O}}getIndentationAtPosition(t,l,h){const m=t.getLineContent(l);let _=M.getLeadingWhitespace(m);return _.length>h-1&&(_=_.substring(0,h-1)),_}getScopedLineTokens(t,l,h){t.forceTokenization(l);const m=t.getLineTokens(l),_=typeof h=="undefined"?t.getLineMaxColumn(l)-1:h-1;return C.createScopedLineTokens(m,_)}getBracketsSupport(t){const l=this._getRichEditSupport(t);return l&&l.brackets||null}}e.LanguageConfigurationRegistryImpl=i,e.LanguageConfigurationRegistry=new i}),define(Q[381],J([0,1,29]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.generateTokensCSSForColorMap=e.ThemeTrieElement=e.ThemeTrieElementRule=e.strcmp=e.toStandardTokenType=e.TokenTheme=e.ColorMap=e.parseTokenTheme=e.ParsedTokenThemeRule=void 0;class N{constructor(r,i,n,t,l){this.token=r,this.index=i,this.fontStyle=n,this.foreground=t,this.background=l}}e.ParsedTokenThemeRule=N;function M(u){if(!u||!Array.isArray(u))return[];let r=[],i=0;for(let n=0,t=u.length;n{let L=c(v.token,y.token);return L!==0?L:v.index-y.index});let i=0,n="000000",t="ffffff";for(;u.length>=1&&u[0].token==="";){let v=u.shift();v.fontStyle!==-1&&(i=v.fontStyle),v.foreground!==null&&(n=v.foreground),v.background!==null&&(t=v.background)}let l=new C;for(let v of r)l.getId(v);let h=l.getId(n),m=l.getId(t),_=new o(i,h,m),f=new s(_);for(let v=0,y=u.length;v>>0,this._cache.set(i,n)}return(n|r<<0)>>>0}}e.TokenTheme=d;const g=/\b(comment|string|regex|regexp)\b/;function p(u){let r=u.match(g);if(!r)return 0;switch(r[1]){case"comment":return 1;case"string":return 2;case"regex":return 4;case"regexp":return 4}throw new Error("Unexpected match for standard token type!")}e.toStandardTokenType=p;function c(u,r){return ur?1:0}e.strcmp=c;class o{constructor(r,i,n){this._fontStyle=r,this._foreground=i,this._background=n,this.metadata=(this._fontStyle<<11|this._foreground<<14|this._background<<23)>>>0}clone(){return new o(this._fontStyle,this._foreground,this._background)}acceptOverwrite(r,i,n){r!==-1&&(this._fontStyle=r),i!==0&&(this._foreground=i),n!==0&&(this._background=n),this.metadata=(this._fontStyle<<11|this._foreground<<14|this._background<<23)>>>0}}e.ThemeTrieElementRule=o;class s{constructor(r){this._mainRule=r,this._children=new Map}match(r){if(r==="")return this._mainRule;let i=r.indexOf("."),n,t;i===-1?(n=r,t=""):(n=r.substring(0,i),t=r.substring(i+1));let l=this._children.get(n);return typeof l!="undefined"?l.match(t):this._mainRule}insert(r,i,n,t){if(r===""){this._mainRule.acceptOverwrite(i,n,t);return}let l=r.indexOf("."),h,m;l===-1?(h=r,m=""):(h=r.substring(0,l),m=r.substring(l+1));let _=this._children.get(h);typeof _=="undefined"&&(_=new s(this._mainRule.clone()),this._children.set(h,_)),_.insert(m,i,n,t)}}e.ThemeTrieElement=s;function a(u){let r=[];for(let i=1,n=u.length;i{this._map.get(S)===C&&(this._map.delete(S),this.fire([S]))})}registerPromise(S,C){let d=null,g=!1;return this._promises.set(S,C.then(p=>{this._promises.delete(S),!(g||!p)&&(d=this.register(S,p))})),N.toDisposable(()=>{g=!0,d&&d.dispose()})}getPromise(S){const C=this.get(S);if(C)return Promise.resolve(C);const d=this._promises.get(S);return d?d.then(g=>this.get(S)):null}get(S){return this._map.get(S)||null}setColorMap(S){this._colorMap=S,this._onDidChange.fire({changedLanguages:Array.from(this._map.keys()),changedColorMap:!0})}getColorMap(){return this._colorMap}getDefaultBackground(){return this._colorMap&&this._colorMap.length>2?this._colorMap[2]:null}}e.TokenizationRegistryImpl=M}),define(Q[383],J([0,1,101,17]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.encodeSemanticTokensDto=void 0;function M(d){for(let g=0,p=d.length;gd&&(n=d-t);const l=u.color;let h=this._color2Id[l];h||(h=++this._lastAssignedId,this._color2Id[l]=h,this._id2Color[h]=l);const m=new b(n-t,n+t,h);u.setColorZone(m),o.push(m)}return this._colorZonesInvalid=!1,o.sort(b.compare),o}}e.OverviewZoneManager=M}),define(Q[110],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.VisibleRanges=e.HorizontalPosition=e.HorizontalRange=e.LineVisibleRanges=e.RenderingContext=e.RestrictedRenderingContext=void 0;class b{constructor(g,p){this._viewLayout=g,this.viewportData=p,this.scrollWidth=this._viewLayout.getScrollWidth(),this.scrollHeight=this._viewLayout.getScrollHeight(),this.visibleRange=this.viewportData.visibleRange,this.bigNumbersDelta=this.viewportData.bigNumbersDelta;const c=this._viewLayout.getCurrentViewport();this.scrollTop=c.top,this.scrollLeft=c.left,this.viewportWidth=c.width,this.viewportHeight=c.height}getScrolledTopFromAbsoluteTop(g){return g-this.scrollTop}getVerticalOffsetForLineNumber(g){return this._viewLayout.getVerticalOffsetForLineNumber(g)}getDecorationsInViewport(){return this.viewportData.getDecorationsInViewport()}}e.RestrictedRenderingContext=b;class N extends b{constructor(g,p,c){super(g,p);this._viewLines=c}linesVisibleRangesForRange(g,p){return this._viewLines.linesVisibleRangesForRange(g,p)}visibleRangeForPosition(g){return this._viewLines.visibleRangeForPosition(g)}}e.RenderingContext=N;class M{constructor(g,p,c){this.outsideRenderedLine=g,this.lineNumber=p,this.ranges=c}}e.LineVisibleRanges=M;class w{constructor(g,p){this.left=Math.round(g),this.width=Math.round(p)}toString(){return`[${this.left},${this.width}]`}}e.HorizontalRange=w;class S{constructor(g,p){this.outsideRenderedLine=g,this.left=Math.round(p)}}e.HorizontalPosition=S;class C{constructor(g,p){this.outsideRenderedLine=g,this.ranges=p}}e.VisibleRanges=C}),define(Q[384],J([0,1,110]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.RangeUtil=void 0;class N{constructor(S,C){this.left=S,this.width=C}toString(){return`[${this.left},${this.width}]`}static compare(S,C){return S.left-C.left}}class M{static _createRange(){return this._handyReadyRange||(this._handyReadyRange=document.createRange()),this._handyReadyRange}static _detachRange(S,C){S.selectNodeContents(C)}static _readClientRects(S,C,d,g,p){const c=this._createRange();try{return c.setStart(S,C),c.setEnd(d,g),c.getClientRects()}catch(o){return null}finally{this._detachRange(c,p)}}static _mergeAdjacentRanges(S){if(S.length===1)return[new b.HorizontalRange(S[0].left,S[0].width)];S.sort(N.compare);let C=[],d=0,g=S[0].left,p=S[0].width;for(let c=1,o=S.length;c=a?p=Math.max(p,a+u-g):(C[d++]=new b.HorizontalRange(g,p),g=a,p=u)}return C[d++]=new b.HorizontalRange(g,p),C}static _createHorizontalRangesFromClientRects(S,C){if(!S||S.length===0)return null;const d=[];for(let g=0,p=S.length;ga)return null;if(C=Math.min(a,Math.max(s,C)),g=Math.min(a,Math.max(s,g)),C===g&&d===p&&d===0){const n=S.children[C].getClientRects();return this._createHorizontalRangesFromClientRects(n,c)}C!==g&&g>0&&p===0&&(g--,p=1073741824);let u=S.children[C].firstChild,r=S.children[g].firstChild;if((!u||!r)&&(!u&&d===0&&C>0&&(u=S.children[C-1].firstChild,d=1073741824),!r&&p===0&&g>0&&(r=S.children[g-1].firstChild,p=1073741824)),!u||!r)return null;d=Math.min(u.textContent.length,Math.max(0,d)),p=Math.min(r.textContent.length,Math.max(0,p));const i=this._readClientRects(u,d,r,p,o);return this._createHorizontalRangesFromClientRects(i,c)}}e.RangeUtil=M}),define(Q[385],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ViewContext=e.EditorTheme=void 0;class b{constructor(w){this._theme=w}get type(){return this._theme.type}update(w){this._theme=w}getColor(w){return this._theme.getColor(w)}}e.EditorTheme=b;class N{constructor(w,S,C){this.configuration=w,this.theme=new b(S),this.model=C,this.viewLayout=C.viewLayout}addEventHandler(w){this.model.addViewEventHandler(w)}removeEventHandler(w){this.model.removeViewEventHandler(w)}}e.ViewContext=N}),define(Q[170],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ViewZonesChangedEvent=e.ViewTokensColorsChangedEvent=e.ViewTokensChangedEvent=e.ViewThemeChangedEvent=e.ViewScrollChangedEvent=e.ViewRevealRangeRequestEvent=e.ViewLinesInsertedEvent=e.ViewLinesDeletedEvent=e.ViewLinesChangedEvent=e.ViewLineMappingChangedEvent=e.ViewLanguageConfigurationEvent=e.ViewFocusChangedEvent=e.ViewFlushedEvent=e.ViewDecorationsChangedEvent=e.ViewCursorStateChangedEvent=e.ViewConfigurationChangedEvent=e.ViewCompositionEndEvent=e.ViewCompositionStartEvent=void 0;class b{constructor(){this.type=0}}e.ViewCompositionStartEvent=b;class N{constructor(){this.type=1}}e.ViewCompositionEndEvent=N;class M{constructor(h){this.type=2,this._source=h}hasChanged(h){return this._source.hasChanged(h)}}e.ViewConfigurationChangedEvent=M;class w{constructor(h,m){this.type=3,this.selections=h,this.modelSelections=m}}e.ViewCursorStateChangedEvent=w;class S{constructor(h){this.type=4,h?(this.affectsMinimap=h.affectsMinimap,this.affectsOverviewRuler=h.affectsOverviewRuler):(this.affectsMinimap=!0,this.affectsOverviewRuler=!0)}}e.ViewDecorationsChangedEvent=S;class C{constructor(){this.type=5}}e.ViewFlushedEvent=C;class d{constructor(h){this.type=6,this.isFocused=h}}e.ViewFocusChangedEvent=d;class g{constructor(){this.type=7}}e.ViewLanguageConfigurationEvent=g;class p{constructor(){this.type=8}}e.ViewLineMappingChangedEvent=p;class c{constructor(h,m){this.type=9,this.fromLineNumber=h,this.toLineNumber=m}}e.ViewLinesChangedEvent=c;class o{constructor(h,m){this.type=10,this.fromLineNumber=h,this.toLineNumber=m}}e.ViewLinesDeletedEvent=o;class s{constructor(h,m){this.type=11,this.fromLineNumber=h,this.toLineNumber=m}}e.ViewLinesInsertedEvent=s;class a{constructor(h,m,_,f,v,y){this.type=12,this.source=h,this.range=m,this.selections=_,this.verticalType=f,this.revealHorizontal=v,this.scrollType=y}}e.ViewRevealRangeRequestEvent=a;class u{constructor(h){this.type=13,this.scrollWidth=h.scrollWidth,this.scrollLeft=h.scrollLeft,this.scrollHeight=h.scrollHeight,this.scrollTop=h.scrollTop,this.scrollWidthChanged=h.scrollWidthChanged,this.scrollLeftChanged=h.scrollLeftChanged,this.scrollHeightChanged=h.scrollHeightChanged,this.scrollTopChanged=h.scrollTopChanged}}e.ViewScrollChangedEvent=u;class r{constructor(){this.type=14}}e.ViewThemeChangedEvent=r;class i{constructor(h){this.type=15,this.ranges=h}}e.ViewTokensChangedEvent=i;class n{constructor(){this.type=16}}e.ViewTokensColorsChangedEvent=n;class t{constructor(){this.type=17}}e.ViewZonesChangedEvent=t}),define(Q[171],J([0,1,8]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.LineDecorationsNormalizer=e.DecorationSegment=e.LineDecoration=void 0;class N{constructor(d,g,p,c){this.startColumn=d,this.endColumn=g,this.className=p,this.type=c}static _equals(d,g){return d.startColumn===g.startColumn&&d.endColumn===g.endColumn&&d.className===g.className&&d.type===g.type}static equalsArr(d,g){const p=d.length,c=g.length;if(p!==c)return!1;for(let o=0;o=o||(a[u++]=new N(Math.max(1,r.startColumn-c+1),Math.min(s+1,r.endColumn-c+1),r.className,r.type));return a}static filter(d,g,p,c){if(d.length===0)return[];let o=[],s=0;for(let a=0,u=d.length;ag)&&!(i.isEmpty()&&(r.type===0||r.type===3))){const n=i.startLineNumber===g?i.startColumn:p,t=i.endLineNumber===g?i.endColumn:c;o[s++]=new N(n,t,r.inlineClassName,r.type)}}return o}static _typeCompare(d,g){const p=[2,0,1,3];return p[d]-p[g]}static compare(d,g){if(d.startColumn===g.startColumn){if(d.endColumn===g.endColumn){const p=N._typeCompare(d.type,g.type);return p===0?d.classNameg.className?1:0:p}return d.endColumn-g.endColumn}return d.startColumn-g.startColumn}}e.LineDecoration=N;class M{constructor(d,g,p,c){this.startOffset=d,this.endOffset=g,this.className=p,this.metadata=c}}e.DecorationSegment=M;class w{constructor(){this.stopOffsets=[],this.classNames=[],this.metadata=[],this.count=0}static _metadata(d){let g=0;for(let p=0,c=d.length;p0&&this.stopOffsets[0]0&&g=d){this.stopOffsets.splice(c,0,d),this.classNames.splice(c,0,g),this.metadata.splice(c,0,p);break}this.count++}}class S{static normalize(d,g){if(g.length===0)return[];let p=[];const c=new w;let o=0;for(let s=0,a=g.length;s1){const m=d.charCodeAt(r-2);b.isHighSurrogate(m)&&r--}if(i>1){const m=d.charCodeAt(i-2);b.isHighSurrogate(m)&&i--}const l=r-1,h=i-2;o=c.consumeLowerThan(l,o,p),c.count===0&&(o=l),c.insert(h,n,t)}return c.consumeLowerThan(1073741824,o,p),p}}e.LineDecorationsNormalizer=S}),define(Q[386],J([0,1,8]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.LinesLayout=e.EditorWhitespace=void 0;class N{constructor(){this._hasPending=!1,this._inserts=[],this._changes=[],this._removes=[]}insert(C){this._hasPending=!0,this._inserts.push(C)}change(C){this._hasPending=!0,this._changes.push(C)}remove(C){this._hasPending=!0,this._removes.push(C)}mustCommit(){return this._hasPending}commit(C){if(!!this._hasPending){const d=this._inserts,g=this._changes,p=this._removes;this._hasPending=!1,this._inserts=[],this._changes=[],this._removes=[],C._commitPendingChanges(d,g,p)}}}class M{constructor(C,d,g,p,c){this.id=C,this.afterLineNumber=d,this.ordinal=g,this.height=p,this.minWidth=c,this.prefixSum=0}}e.EditorWhitespace=M;class w{constructor(C,d,g,p){this._instanceId=b.singleLetterHash(++w.INSTANCE_COUNT),this._pendingChanges=new N,this._lastWhitespaceId=0,this._arr=[],this._prefixSumValidIndex=-1,this._minWidth=-1,this._lineCount=C,this._lineHeight=d,this._paddingTop=g,this._paddingBottom=p}static findInsertionIndex(C,d,g){let p=0,c=C.length;for(;p>>1;d===C[o].afterLineNumber?g{d=!0,p=p|0,c=c|0,o=o|0,s=s|0;const a=this._instanceId+ ++this._lastWhitespaceId;return this._pendingChanges.insert(new M(a,p,c,o,s)),a},changeOneWhitespace:(p,c,o)=>{d=!0,c=c|0,o=o|0,this._pendingChanges.change({id:p,newAfterLineNumber:c,newHeight:o})},removeWhitespace:p=>{d=!0,this._pendingChanges.remove({id:p})}})}finally{this._pendingChanges.commit(this)}return d}_commitPendingChanges(C,d,g){if((C.length>0||g.length>0)&&(this._minWidth=-1),C.length+d.length+g.length<=1){for(const a of C)this._insertWhitespace(a);for(const a of d)this._changeOneWhitespace(a.id,a.newAfterLineNumber,a.newHeight);for(const a of g){const u=this._findWhitespaceIndex(a.id);u!==-1&&this._removeWhitespace(u)}return}const p=new Set;for(const a of g)p.add(a.id);const c=new Map;for(const a of d)c.set(a.id,a);const o=a=>{let u=[];for(const r of a)if(!p.has(r.id)){if(c.has(r.id)){const i=c.get(r.id);r.afterLineNumber=i.newAfterLineNumber,r.height=i.newHeight}u.push(r)}return u},s=o(this._arr).concat(o(C));s.sort((a,u)=>a.afterLineNumber===u.afterLineNumber?a.ordinal-u.ordinal:a.afterLineNumber-u.afterLineNumber),this._arr=s,this._prefixSumValidIndex=-1}_checkPendingChanges(){this._pendingChanges.mustCommit()&&this._pendingChanges.commit(this)}_insertWhitespace(C){const d=w.findInsertionIndex(this._arr,C.afterLineNumber,C.ordinal);this._arr.splice(d,0,C),this._prefixSumValidIndex=Math.min(this._prefixSumValidIndex,d-1)}_findWhitespaceIndex(C){const d=this._arr;for(let g=0,p=d.length;gd&&(this._arr[g].afterLineNumber-=d-C+1)}}onLinesInserted(C,d){this._checkPendingChanges(),C=C|0,d=d|0,this._lineCount+=d-C+1;for(let g=0,p=this._arr.length;g=d.length||d[s+1].afterLineNumber>=C)return s;g=s+1|0}else p=s-1|0}return-1}_findFirstWhitespaceAfterLineNumber(C){C=C|0;const g=this._findLastWhitespaceBeforeLineNumber(C)+1;return g1?d=this._lineHeight*(C-1):d=0;const g=this.getWhitespaceAccumulatedHeightBeforeLineNumber(C);return d+g+this._paddingTop}getWhitespaceMinWidth(){if(this._checkPendingChanges(),this._minWidth===-1){let C=0;for(let d=0,g=this._arr.length;dd}isInTopPadding(C){return this._paddingTop===0?!1:(this._checkPendingChanges(),C=d-this._paddingBottom}getLineNumberAtOrAfterVerticalOffset(C){if(this._checkPendingChanges(),C=C|0,C<0)return 1;const d=this._lineCount|0,g=this._lineHeight;let p=1,c=d;for(;p=s+g)p=o+1;else{if(C>=s)return o;c=o}}return p>d?d:p}getLinesViewportData(C,d){this._checkPendingChanges(),C=C|0,d=d|0;const g=this._lineHeight,p=this.getLineNumberAtOrAfterVerticalOffset(C)|0,c=this.getVerticalOffsetForLineNumber(p)|0;let o=this._lineCount|0,s=this.getFirstWhitespaceIndexAfterLineNumber(p)|0;const a=this.getWhitespacesCount()|0;let u,r;s===-1?(s=a,r=o+1,u=0):(r=this.getAfterLineNumberForWhitespaceIndex(s)|0,u=this.getHeightForWhitespaceIndex(s)|0);let i=c,n=i;const t=5e5;let l=0;c>=t&&(l=Math.floor(c/t)*t,l=Math.floor(l/g)*g,n-=l);const h=[],m=C+(d-C)/2;let _=-1;for(let L=p;L<=o;L++){if(_===-1){const I=i,k=i+g;(I<=m&&mm)&&(_=L)}for(i+=g,h[L-p]=n,n+=g;r===L;)n+=u,i+=u,s++,s>=a?r=o+1:(r=this.getAfterLineNumberForWhitespaceIndex(s)|0,u=this.getHeightForWhitespaceIndex(s)|0);if(i>=d){o=L;break}}_===-1&&(_=o);const f=this.getVerticalOffsetForLineNumber(o)|0;let v=p,y=o;return vd&&y--,{bigNumbersDelta:l,startLineNumber:p,endLineNumber:o,relativeVerticalOffset:h,centeredLineNumber:_,completelyVisibleStartLineNumber:v,completelyVisibleEndLineNumber:y}}getVerticalOffsetForWhitespaceIndex(C){this._checkPendingChanges(),C=C|0;const d=this.getAfterLineNumberForWhitespaceIndex(C);let g;d>=1?g=this._lineHeight*d:g=0;let p;return C>0?p=this.getWhitespacesAccumulatedHeight(C-1):p=0,g+p+this._paddingTop}getWhitespaceIndexAtOrAfterVerticallOffset(C){this._checkPendingChanges(),C=C|0;let d=0,g=this.getWhitespacesCount()-1;if(g<0)return-1;const p=this.getVerticalOffsetForWhitespaceIndex(g),c=this.getHeightForWhitespaceIndex(g);if(C>=p+c)return-1;for(;d=s+a)d=o+1;else{if(C>=s)return o;g=o}}return d}getWhitespaceAtVerticalOffset(C){this._checkPendingChanges(),C=C|0;const d=this.getWhitespaceIndexAtOrAfterVerticallOffset(C);if(d<0||d>=this.getWhitespacesCount())return null;const g=this.getVerticalOffsetForWhitespaceIndex(d);if(g>C)return null;const p=this.getHeightForWhitespaceIndex(d),c=this.getIdForWhitespaceIndex(d),o=this.getAfterLineNumberForWhitespaceIndex(d);return{id:c,afterLineNumber:o,verticalOffset:g,height:p}}getWhitespaceViewportData(C,d){this._checkPendingChanges(),C=C|0,d=d|0;const g=this.getWhitespaceIndexAtOrAfterVerticallOffset(C),p=this.getWhitespacesCount()-1;if(g<0)return[];let c=[];for(let o=g;o<=p;o++){const s=this.getVerticalOffsetForWhitespaceIndex(o),a=this.getHeightForWhitespaceIndex(o);if(s>=d)break;c.push({id:this.getIdForWhitespaceIndex(o),afterLineNumber:this.getAfterLineNumberForWhitespaceIndex(o),verticalOffset:s,height:a})}return c}getWhitespaces(){return this._checkPendingChanges(),this._arr.slice(0)}getWhitespacesCount(){return this._checkPendingChanges(),this._arr.length}getIdForWhitespaceIndex(C){return this._checkPendingChanges(),C=C|0,this._arr[C].id}getAfterLineNumberForWhitespaceIndex(C){return this._checkPendingChanges(),C=C|0,this._arr[C].afterLineNumber}getHeightForWhitespaceIndex(C){return this._checkPendingChanges(),C=C|0,this._arr[C].height}}e.LinesLayout=w,w.INSTANCE_COUNT=0}),define(Q[129],J([0,1,8,93,171]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.renderViewLine2=e.RenderLineOutput2=e.renderViewLine=e.RenderLineOutput=e.CharacterMapping=e.RenderLineInput=e.LineRange=void 0;class w{constructor(h,m,_){this.endIndex=h,this.type=m,this.metadata=_}isWhitespace(){return!!(this.metadata&1)}}class S{constructor(h,m){this.startOffset=h,this.endOffset=m}equals(h){return this.startOffset===h.startOffset&&this.endOffset===h.endOffset}}e.LineRange=S;class C{constructor(h,m,_,f,v,y,L,I,k,E,T,O,A,B,F,D,R,W,x){this.useMonospaceOptimizations=h,this.canUseHalfwidthRightwardsArrow=m,this.lineContent=_,this.continuesWithWrappedLine=f,this.isBasicASCII=v,this.containsRTL=y,this.fauxIndentLength=L,this.lineTokens=I,this.lineDecorations=k.sort(M.LineDecoration.compare),this.tabSize=E,this.startVisibleColumn=T,this.spaceWidth=O,this.stopRenderingLineAfter=F,this.renderWhitespace=D==="all"?4:D==="boundary"?1:D==="selection"?2:D==="trailing"?3:0,this.renderControlCharacters=R,this.fontLigatures=W,this.selectionsOnLine=x&&x.sort((ee,se)=>ee.startOffset>>16}static getCharIndex(h){return(h&65535)>>>0}setPartData(h,m,_,f){let v=(m<<16|_<<0)>>>0;this._data[h]=v,this._absoluteOffsets[h]=f+_}getAbsoluteOffsets(){return this._absoluteOffsets}charOffsetToPartData(h){return this.length===0?0:h<0?this._data[0]:h>=this.length?this._data[this.length-1]:this._data[h]}partDataToCharOffset(h,m,_){if(this.length===0)return 0;let f=(h<<16|_<<0)>>>0,v=0,y=this.length-1;for(;v+1>>1,D=this._data[F];if(D===f)return F;D>f?y=F:v=F}if(v===y)return v;let L=this._data[v],I=this._data[y];if(L===f)return v;if(I===f)return y;let k=d.getPartIndex(L),E=d.getCharIndex(L),T=d.getPartIndex(I),O;k!==T?O=m:O=d.getCharIndex(I);let A=_-E,B=O-_;return A<=B?v:y}}e.CharacterMapping=d;class g{constructor(h,m,_){this.characterMapping=h,this.containsRTL=m,this.containsForeignElements=_}}e.RenderLineOutput=g;function p(l,h){if(l.lineContent.length===0){let m=0,_="";if(l.lineDecorations.length>0){const f=[],v=[];for(let y=0,L=l.lineDecorations.length;y0?``:"",L=v.length>0?``:"";_=`${y}${L}`}}return h.appendASCIIString(_),new g(new d(0,0),!1,m)}return t(a(l),h)}e.renderViewLine=p;class c{constructor(h,m,_,f){this.characterMapping=h,this.html=m,this.containsRTL=_,this.containsForeignElements=f}}e.RenderLineOutput2=c;function o(l){let h=N.createStringBuilder(1e4),m=p(l,h);return new c(m.characterMapping,h.build(),m.containsRTL,m.containsForeignElements)}e.renderViewLine2=o;class s{constructor(h,m,_,f,v,y,L,I,k,E,T,O,A,B,F){this.fontIsMonospace=h,this.canUseHalfwidthRightwardsArrow=m,this.lineContent=_,this.len=f,this.isOverflowing=v,this.parts=y,this.containsForeignElements=L,this.fauxIndentLength=I,this.tabSize=k,this.startVisibleColumn=E,this.containsRTL=T,this.spaceWidth=O,this.renderSpaceCharCode=A,this.renderWhitespace=B,this.renderControlCharacters=F}}function a(l){const h=l.lineContent;let m,_;l.stopRenderingLineAfter!==-1&&l.stopRenderingLineAfter0){for(let y=0,L=l.lineDecorations.length;y0&&(_[f++]=new w(h,"",0));for(let v=0,y=l.getCount();v=m){_[f++]=new w(m,I,0);break}_[f++]=new w(L,I,0)}}return _}function r(l,h,m){let _=0,f=[],v=0;if(m)for(let y=0,L=h.length;y=50&&(f[v++]=new w(O+1,E,T),A=O+1,O=-1);A!==k&&(f[v++]=new w(k,E,T))}else f[v++]=I;_=k}else for(let y=0,L=h.length;y50){const T=I.type,O=I.metadata,A=Math.ceil(E/50);for(let B=1;B=ne.endOffset&&(se++,ne=k&&k[se]);let V;if(zY)V=!0;else if(P===9)V=!0;else if(P===32)if(E)if(ee)V=!0;else{const U=z+1z),V&&T&&(V=x||z>Y),ee){if(!V||!I&&le>=y){if(O){const U=B>0?A[B-1].endIndex:v;for(let H=U+1;H<=z;H++)A[B++]=new w(H,"mtkw",1)}else A[B++]=new w(z,"mtkw",1);le=le%y}}else(z===R||V&&z>v)&&(A[B++]=new w(z,D,0),le=le%y);for(P===9?le=y:b.isFullWidthCharacter(P)?le+=2:le++,ee=V;z===R;)F++,F0?h.charCodeAt(m-1):0,P=m>1?h.charCodeAt(m-2):0;z===32&&P!==32&&P!==9||(X=!0)}else X=!0;if(X)if(O){const z=B>0?A[B-1].endIndex:v;for(let P=z+1;P<=m;P++)A[B++]=new w(P,"mtkw",1)}else A[B++]=new w(m,"mtkw",1);else A[B++]=new w(m,D,0);return A}function n(l,h,m,_){_.sort(M.LineDecoration.compare);const f=M.LineDecorationsNormalizer.normalize(l,_),v=f.length;let y=0,L=[],I=0,k=0;for(let T=0,O=m.length;Tk&&(k=R.startOffset,L[I++]=new w(k,F,D)),R.endOffset+1<=B)k=R.endOffset+1,L[I++]=new w(k,F+" "+R.className,D|R.metadata),y++;else{k=B,L[I++]=new w(k,F+" "+R.className,D|R.metadata);break}}B>k&&(k=B,L[I++]=new w(k,F,D))}const E=m[m.length-1].endIndex;if(y'):h.appendASCIIString("");for(let ne=0,le=I.length;ne=k&&(oe+=G)}}for(U&&(h.appendASCIIString(' style="width:'),h.appendASCIIString(String(A*$)),h.appendASCIIString('px"')),h.appendASCII(62);W1?h.write1(8594):h.write1(65515);for(let ae=2;ae<=oe;ae++)h.write1(160)}else oe=1,h.write1(B);K+=oe,W>=k&&(x+=oe)}ee=$}else{let $=0;for(h.appendASCII(62);W=k&&(x+=ae)}ee=$}H?Y++:Y=0,h.appendASCIIString("")}return R.setPartData(y,I.length-1,K,se),L&&h.appendASCIIString(""),h.appendASCIIString(""),new g(R,O,f)}}),define(Q[387],J([0,1,3]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ViewportData=void 0;class N{constructor(w,S,C,d){this.selections=w,this.startLineNumber=S.startLineNumber|0,this.endLineNumber=S.endLineNumber|0,this.relativeVerticalOffset=S.relativeVerticalOffset,this.bigNumbersDelta=S.bigNumbersDelta|0,this.whitespaceViewportData=C,this._model=d,this.visibleRange=new b.Range(S.startLineNumber,this._model.getLineMinColumn(S.startLineNumber),S.endLineNumber,this._model.getLineMaxColumn(S.endLineNumber))}getViewLineRenderingData(w){return this._model.getViewLineRenderingData(this.visibleRange,w)}getDecorationsInViewport(){return this._model.getDecorationsInViewport(this.visibleRange)}}e.ViewportData=N}),define(Q[222],J([0,1,122]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.PrefixSumComputer=e.PrefixSumIndexOfResult=void 0;class N{constructor(S,C){this.index=S,this.remainder=C}}e.PrefixSumIndexOfResult=N;class M{constructor(S){this.values=S,this.prefixSum=new Uint32Array(S.length),this.prefixSumValidIndex=new Int32Array(1),this.prefixSumValidIndex[0]=-1}insertValues(S,C){S=b.toUint32(S);const d=this.values,g=this.prefixSum,p=C.length;return p===0?!1:(this.values=new Uint32Array(d.length+p),this.values.set(d.subarray(0,S),0),this.values.set(d.subarray(S),S+p),this.values.set(C,S),S-1=0&&this.prefixSum.set(g.subarray(0,this.prefixSumValidIndex[0]+1)),!0)}changeValue(S,C){return S=b.toUint32(S),C=b.toUint32(C),this.values[S]===C?!1:(this.values[S]=C,S-1=d.length)return!1;let p=d.length-S;return C>=p&&(C=p),C===0?!1:(this.values=new Uint32Array(d.length-C),this.values.set(d.subarray(0,S),0),this.values.set(d.subarray(S+C),S),this.prefixSum=new Uint32Array(this.values.length),S-1=0&&this.prefixSum.set(g.subarray(0,this.prefixSumValidIndex[0]+1)),!0)}getTotalValue(){return this.values.length===0?0:this._getAccumulatedValue(this.values.length-1)}getAccumulatedValue(S){return S<0?0:(S=b.toUint32(S),this._getAccumulatedValue(S))}_getAccumulatedValue(S){if(S<=this.prefixSumValidIndex[0])return this.prefixSum[S];let C=this.prefixSumValidIndex[0]+1;C===0&&(this.prefixSum[0]=this.values[0],C++),S>=this.values.length&&(S=this.values.length-1);for(let d=C;d<=S;d++)this.prefixSum[d]=this.prefixSum[d-1]+this.values[d];return this.prefixSumValidIndex[0]=Math.max(this.prefixSumValidIndex[0],S),this.prefixSum[S]}getIndexOf(S){S=Math.floor(S),this.getTotalValue();let C=0,d=this.values.length-1,g=0,p=0,c=0;for(;C<=d;)if(g=C+(d-C)/2|0,p=this.prefixSum[g],c=p-this.values[g],S=p)C=g+1;else break;return new N(g,S-c)}}e.PrefixSumComputer=M}),define(Q[388],J([0,1,8,14,222]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MirrorTextModel=void 0;class w{constructor(C,d,g,p){this._uri=C,this._lines=d,this._eol=g,this._versionId=p,this._lineStarts=null,this._cachedTextValue=null}dispose(){this._lines.length=0}getText(){return this._cachedTextValue===null&&(this._cachedTextValue=this._lines.join(this._eol)),this._cachedTextValue}onEvents(C){C.eol&&C.eol!==this._eol&&(this._eol=C.eol,this._lineStarts=null);const d=C.changes;for(const g of d)this._acceptDeleteRange(g.range),this._acceptInsertText(new N.Position(g.range.startLineNumber,g.range.startColumn),g.text);this._versionId=C.versionId,this._cachedTextValue=null}_ensureLineStarts(){if(!this._lineStarts){const C=this._eol.length,d=this._lines.length,g=new Uint32Array(d);for(let p=0;pthis._lines.length)h=this._lines.length,m=this._lines[h-1].length+1,_=!0;else{let f=this._lines[h-1].length+1;m<1?(m=1,_=!0):m>f&&(m=f,_=!0)}return _?{lineNumber:h,column:m}:l}}class i{constructor(l,h){this._host=l,this._models=Object.create(null),this._foreignModuleFactory=h,this._foreignModule=null}dispose(){this._models=Object.create(null)}_getModel(l){return this._models[l]}_getModels(){let l=[];return Object.keys(this._models).forEach(h=>l.push(this._models[h])),l}acceptNewModel(l){this._models[l.url]=new r(w.URI.parse(l.url),l.lines,l.EOL,l.versionId)}acceptModelChanged(l,h){!this._models[l]||this._models[l].onEvents(h)}acceptRemovedModel(l){!this._models[l]||delete this._models[l]}computeDiff(l,h,m,_){return Ie(this,void 0,void 0,function*(){const f=this._getModel(l),v=this._getModel(h);if(!f||!v)return null;const y=f.getLinesContent(),L=v.getLinesContent(),k=new d.DiffComputer(y,L,{shouldComputeCharChanges:!0,shouldPostProcessCharChanges:!0,shouldIgnoreTrimWhitespace:m,shouldMakePrettyDiff:!0,maxComputationTime:_}).computeDiff(),E=k.changes.length>0?!1:this._modelsAreIdentical(f,v);return{quitEarly:k.quitEarly,identical:E,changes:k.changes}})}_modelsAreIdentical(l,h){const m=l.getLineCount(),_=h.getLineCount();if(m!==_)return!1;for(let f=1;f<=m;f++){const v=l.getLineContent(f),y=h.getLineContent(f);if(v!==y)return!1}return!0}computeMoreMinimalEdits(l,h){return Ie(this,void 0,void 0,function*(){const m=this._getModel(l);if(!m)return h;const _=[];let f;h=b.mergeSort(h,(v,y)=>{if(v.range&&y.range)return C.Range.compareRangesUsingStarts(v.range,y.range);let L=v.range?0:1,I=y.range?0:1;return L-I});for(let{range:v,text:y,eol:L}of h)if(typeof L=="number"&&(f=L),!(C.Range.isEmpty(v)&&!y)){const I=m.getValueInRange(v);if(y=y.replace(/\r\n|\n|\r/g,m.eol),I!==y){if(Math.max(y.length,I.length)>i._diffLimit){_.push({range:v,text:y});continue}const k=N.stringDiff(I,y,!1),E=m.offsetAt(C.Range.lift(v).getStartPosition());for(const T of k){const O=m.positionAt(E+T.originalStart),A=m.positionAt(E+T.originalStart+T.originalLength),B={text:y.substr(T.modifiedStart,T.modifiedLength),range:{startLineNumber:O.lineNumber,startColumn:O.column,endLineNumber:A.lineNumber,endColumn:A.column}};m.getValueInRange(B.range)!==B.text&&_.push(B)}}}return typeof f=="number"&&_.push({eol:f,text:"",range:{startLineNumber:0,startColumn:0,endLineNumber:0,endColumn:0}}),_})}computeLinks(l){return Ie(this,void 0,void 0,function*(){let h=this._getModel(l);return h?c.computeLinks(h):null})}textualSuggest(l,h,m,_){return Ie(this,void 0,void 0,function*(){const f=new u.StopWatch(!0),v=new RegExp(m,_),y=new Set;e:for(let L of l){const I=this._getModel(L);if(!!I){for(let k of I.words(v))if(!(k===h||!isNaN(Number(k)))&&(y.add(k),y.size>i._suggestionsLimit))break e}}return{words:Array.from(y),duration:f.elapsed()}})}computeWordRanges(l,h,m,_){return Ie(this,void 0,void 0,function*(){let f=this._getModel(l);if(!f)return Object.create(null);const v=new RegExp(m,_),y=Object.create(null);for(let L=h.startLineNumber;Lthis._host.fhr(y,L);let v={host:a.createProxyObject(m,_),getMirrorModels:()=>this._getModels()};return this._foreignModuleFactory?(this._foreignModule=this._foreignModuleFactory(v,h),Promise.resolve(a.getAllMethodNames(this._foreignModule))):new Promise((y,L)=>{q([l],I=>{this._foreignModule=I.create(v,h),y(a.getAllMethodNames(this._foreignModule))},L)})}fmr(l,h){if(!this._foreignModule||typeof this._foreignModule[l]!="function")return Promise.reject(new Error("Missing requestHandler or method: "+l));try{return Promise.resolve(this._foreignModule[l].apply(this._foreignModule,h))}catch(m){return Promise.reject(m)}}}e.EditorSimpleWorker=i,i._diffLimit=1e5,i._suggestionsLimit=1e4;function n(t){return new i(t,null)}e.create=n,typeof importScripts=="function"&&(M.globals.monaco=s.createMonacoBaseAPI())}),define(Q[111],J([0,1,2]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ViewEventHandler=void 0;class N extends b.Disposable{constructor(){super();this._shouldRender=!0}shouldRender(){return this._shouldRender}forceShouldRender(){this._shouldRender=!0}setShouldRender(){this._shouldRender=!0}onDidRender(){this._shouldRender=!1}onCompositionStart(w){return!1}onCompositionEnd(w){return!1}onConfigurationChanged(w){return!1}onCursorStateChanged(w){return!1}onDecorationsChanged(w){return!1}onFlushed(w){return!1}onFocusChanged(w){return!1}onLanguageConfigurationChanged(w){return!1}onLineMappingChanged(w){return!1}onLinesChanged(w){return!1}onLinesDeleted(w){return!1}onLinesInserted(w){return!1}onRevealRangeRequest(w){return!1}onScrollChanged(w){return!1}onThemeChanged(w){return!1}onTokensChanged(w){return!1}onTokensColorsChanged(w){return!1}onZonesChanged(w){return!1}handleEvents(w){let S=!1;for(let C=0,d=w.length;C=s,h=i,m=n>=s;let _=p.left,f=c.left;return _+o>a.scrollLeft+a.viewportWidth&&(_=a.scrollLeft+a.viewportWidth-o),f+o>a.scrollLeft+a.viewportWidth&&(f=a.scrollLeft+a.viewportWidth-o),_u){const i=r-(u-s);r-=i,o-=i}if(r=v,I=t+s<=l.height-y;return this._fixedOverflowWidgets?{fitsAbove:L,aboveTop:Math.max(n,v),aboveLeft:m,fitsBelow:I,belowTop:t,belowLeft:f}:{fitsAbove:L,aboveTop:u,aboveLeft:h,fitsBelow:I,belowTop:r,belowLeft:_}}_prepareRenderWidgetAtExactPositionOverflowing(p){return new w(p.top,p.left+this._contentLeft)}_getTopAndBottomLeft(p){if(!this._viewRange)return[null,null];const c=p.linesVisibleRangesForRange(this._viewRange,!1);if(!c||c.length===0)return[null,null];let o=c[0],s=c[0];for(const l of c)l.lineNumbers.lineNumber&&(s=l);let a=1073741824;for(const l of o.ranges)l.leftp.endLineNumber||this.domNode.setMaxWidth(this._maxWidth)}prepareRender(p){this._renderData=this._prepareRenderWidget(p)}render(p){if(!this._renderData){this._isVisible&&(this.domNode.removeAttribute("monaco-visible-content-widget"),this._isVisible=!1,this.domNode.setVisibility("hidden")),typeof this._actual.afterRender=="function"&&d(this._actual.afterRender,this._actual,null);return}this.allowEditorOverflow?(this.domNode.setTop(this._renderData.coordinate.top),this.domNode.setLeft(this._renderData.coordinate.left)):(this.domNode.setTop(this._renderData.coordinate.top+p.scrollTop-p.bigNumbersDelta),this.domNode.setLeft(this._renderData.coordinate.left)),this._isVisible||(this.domNode.setVisibility("inherit"),this.domNode.setAttribute("monaco-visible-content-widget","true"),this._isVisible=!0),typeof this._actual.afterRender=="function"&&d(this._actual.afterRender,this._actual,this._renderData.position)}}function d(g,p,...c){try{return g.call(p,...c)}catch(o){return null}}}),define(Q[391],J([0,1,94,3,110,319]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DecorationsOverlay=void 0;class w extends b.DynamicViewOverlay{constructor(C){super();this._context=C;const d=this._context.configuration.options;this._lineHeight=d.get(53),this._typicalHalfwidthCharacterWidth=d.get(38).typicalHalfwidthCharacterWidth,this._renderResult=null,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),this._renderResult=null,super.dispose()}onConfigurationChanged(C){const d=this._context.configuration.options;return this._lineHeight=d.get(53),this._typicalHalfwidthCharacterWidth=d.get(38).typicalHalfwidthCharacterWidth,!0}onDecorationsChanged(C){return!0}onFlushed(C){return!0}onLinesChanged(C){return!0}onLinesDeleted(C){return!0}onLinesInserted(C){return!0}onScrollChanged(C){return C.scrollTopChanged||C.scrollWidthChanged}onZonesChanged(C){return!0}prepareRender(C){const d=C.getDecorationsInViewport();let g=[],p=0;for(let a=0,u=d.length;a{if(a.options.zIndexu.options.zIndex)return 1;const r=a.options.className,i=u.options.className;return ri?1:N.Range.compareRangesUsingStarts(a.range,u.range)});const c=C.visibleRange.startLineNumber,o=C.visibleRange.endLineNumber,s=[];for(let a=c;a<=o;a++){const u=a-c;s[u]=""}this._renderWholeLineDecorations(C,g,s),this._renderNormalDecorations(C,g,s),this._renderResult=s}_renderWholeLineDecorations(C,d,g){const p=String(this._lineHeight),c=C.visibleRange.startLineNumber,o=C.visibleRange.endLineNumber;for(let s=0,a=d.length;s',i=Math.max(u.range.startLineNumber,c),n=Math.min(u.range.endLineNumber,o);for(let t=i;t<=n;t++){const l=t-c;g[l]+=r}}}}_renderNormalDecorations(C,d,g){const p=String(this._lineHeight),c=C.visibleRange.startLineNumber;let o=null,s=!1,a=null;for(let u=0,r=d.length;u';s[n]+=m}}}}render(C,d){if(!this._renderResult)return"";const g=d-C;return g<0||g>=this._renderResult.length?"":this._renderResult[g]}}e.DecorationsOverlay=w}),define(Q[172],J([0,1,94,320]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.GlyphMarginOverlay=e.DedupOverlay=e.DecorationToRender=void 0;class N{constructor(C,d,g){this.startLineNumber=+C,this.endLineNumber=+d,this.className=String(g)}}e.DecorationToRender=N;class M extends b.DynamicViewOverlay{_render(C,d,g){const p=[];for(let s=C;s<=d;s++){const a=s-C;p[a]=[]}if(g.length===0)return p;g.sort((s,a)=>s.className===a.className?s.startLineNumber===a.startLineNumber?s.endLineNumber-a.endLineNumber:s.startLineNumber-a.startLineNumber:s.className',u=[];for(let r=d;r<=g;r++){const i=r-d,n=p[i];n.length===0?u[i]="":u[i]='
    =this._renderResult.length?"":this._renderResult[g]}}e.GlyphMarginOverlay=w}),define(Q[392],J([0,1,172,324]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.LinesDecorationsOverlay=void 0;class N extends b.DedupOverlay{constructor(w){super();this._context=w;const C=this._context.configuration.options.get(124);this._decorationsLeft=C.decorationsLeft,this._decorationsWidth=C.decorationsWidth,this._renderResult=null,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),this._renderResult=null,super.dispose()}onConfigurationChanged(w){const C=this._context.configuration.options.get(124);return this._decorationsLeft=C.decorationsLeft,this._decorationsWidth=C.decorationsWidth,!0}onDecorationsChanged(w){return!0}onFlushed(w){return!0}onLinesChanged(w){return!0}onLinesDeleted(w){return!0}onLinesInserted(w){return!0}onScrollChanged(w){return w.scrollTopChanged}onZonesChanged(w){return!0}_getDecorations(w){const S=w.getDecorationsInViewport();let C=[],d=0;for(let g=0,p=S.length;g
    ',o=[];for(let s=S;s<=C;s++){const a=s-S,u=d[a];let r="";for(let i=0,n=u.length;i';g[c]=s}this._renderResult=g}render(w,S){return this._renderResult?this._renderResult[S-w]:""}}e.MarginViewLineDecorationsOverlay=N}),define(Q[394],J([0,1,30,45,327]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ViewOverlayWidgets=void 0;class M extends N.ViewPart{constructor(S){super(S);const d=this._context.configuration.options.get(124);this._widgets={},this._verticalScrollbarWidth=d.verticalScrollbarWidth,this._minimapWidth=d.minimap.minimapWidth,this._horizontalScrollbarHeight=d.horizontalScrollbarHeight,this._editorHeight=d.height,this._editorWidth=d.width,this._domNode=b.createFastDomNode(document.createElement("div")),N.PartFingerprints.write(this._domNode,4),this._domNode.setClassName("overlayWidgets")}dispose(){super.dispose(),this._widgets={}}getDomNode(){return this._domNode}onConfigurationChanged(S){const d=this._context.configuration.options.get(124);return this._verticalScrollbarWidth=d.verticalScrollbarWidth,this._minimapWidth=d.minimap.minimapWidth,this._horizontalScrollbarHeight=d.horizontalScrollbarHeight,this._editorHeight=d.height,this._editorWidth=d.width,!0}addWidget(S){const C=b.createFastDomNode(S.getDomNode());this._widgets[S.getId()]={widget:S,preference:null,domNode:C},C.setPosition("absolute"),C.setAttribute("widgetId",S.getId()),this._domNode.appendChild(C),this.setShouldRender()}setWidgetPosition(S,C){const d=this._widgets[S.getId()];return d.preference===C?!1:(d.preference=C,this.setShouldRender(),!0)}removeWidget(S){const C=S.getId();if(this._widgets.hasOwnProperty(C)){const g=this._widgets[C].domNode.domNode;delete this._widgets[C],g.parentNode.removeChild(g),this.setShouldRender()}}_renderWidget(S){const C=S.domNode;if(S.preference===null){C.unsetTop();return}if(S.preference===0)C.setTop(0),C.setRight(2*this._verticalScrollbarWidth+this._minimapWidth);else if(S.preference===1){const d=C.domNode.clientHeight;C.setTop(this._editorHeight-d-2*this._horizontalScrollbarHeight),C.setRight(2*this._verticalScrollbarWidth+this._minimapWidth)}else S.preference===2&&(C.setTop(0),C.domNode.style.right="50%")}prepareRender(S){}render(S){this._domNode.setWidth(this._editorWidth);const C=Object.keys(this._widgets);for(let d=0,g=C.length;dthis._context.viewLayout.getVerticalOffsetForLineNumber(p)),this._zoneManager.setDOMWidth(0),this._zoneManager.setDOMHeight(0),this._zoneManager.setOuterHeight(this._context.viewLayout.getScrollHeight()),this._zoneManager.setLineHeight(g.get(53)),this._zoneManager.setPixelRatio(g.get(122)),this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),super.dispose()}onConfigurationChanged(C){const d=this._context.configuration.options;return C.hasChanged(53)&&(this._zoneManager.setLineHeight(d.get(53)),this._render()),C.hasChanged(122)&&(this._zoneManager.setPixelRatio(d.get(122)),this._domNode.setWidth(this._zoneManager.getDOMWidth()),this._domNode.setHeight(this._zoneManager.getDOMHeight()),this._domNode.domNode.width=this._zoneManager.getCanvasWidth(),this._domNode.domNode.height=this._zoneManager.getCanvasHeight(),this._render()),!0}onFlushed(C){return this._render(),!0}onScrollChanged(C){return C.scrollHeightChanged&&(this._zoneManager.setOuterHeight(C.scrollHeight),this._render()),!0}onZonesChanged(C){return this._render(),!0}getDomNode(){return this._domNode.domNode}setLayout(C){this._domNode.setTop(C.top),this._domNode.setRight(C.right);let d=!1;d=this._zoneManager.setDOMWidth(C.width)||d,d=this._zoneManager.setDOMHeight(C.height)||d,d&&(this._domNode.setWidth(this._zoneManager.getDOMWidth()),this._domNode.setHeight(this._zoneManager.getDOMHeight()),this._domNode.domNode.width=this._zoneManager.getCanvasWidth(),this._domNode.domNode.height=this._zoneManager.getCanvasHeight(),this._render())}setZones(C){this._zoneManager.setZones(C),this._render()}_render(){if(this._zoneManager.getOuterHeight()===0)return!1;const C=this._zoneManager.getCanvasWidth(),d=this._zoneManager.getCanvasHeight(),g=this._zoneManager.resolveColorZones(),p=this._zoneManager.getId2Color(),c=this._domNode.domNode.getContext("2d");return c.clearRect(0,0,C,d),g.length>0&&this._renderOneLane(c,g,p,C),!0}_renderOneLane(C,d,g,p){let c=0,o=0,s=0;for(const a of d){const u=a.colorId,r=a.from,i=a.to;u!==c?(C.fillRect(0,o,p,s-o),c=u,C.fillStyle=g[c],o=r,s=i):s>=r?s=Math.max(s,i):(C.fillRect(0,o,p,s-o),o=r,s=i)}C.fillRect(0,o,p,s-o)}}e.OverviewRuler=w}),define(Q[396],J([0,1,30,12,45,14]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ViewZones=void 0;const S=()=>{throw new Error("Invalid change accessor")};class C extends M.ViewPart{constructor(p){super(p);const c=this._context.configuration.options,o=c.get(124);this._lineHeight=c.get(53),this._contentWidth=o.contentWidth,this._contentLeft=o.contentLeft,this.domNode=b.createFastDomNode(document.createElement("div")),this.domNode.setClassName("view-zones"),this.domNode.setPosition("absolute"),this.domNode.setAttribute("role","presentation"),this.domNode.setAttribute("aria-hidden","true"),this.marginDomNode=b.createFastDomNode(document.createElement("div")),this.marginDomNode.setClassName("margin-view-zones"),this.marginDomNode.setPosition("absolute"),this.marginDomNode.setAttribute("role","presentation"),this.marginDomNode.setAttribute("aria-hidden","true"),this._zones={}}dispose(){super.dispose(),this._zones={}}_recomputeWhitespacesProps(){const p=this._context.viewLayout.getWhitespaces(),c=new Map;for(const s of p)c.set(s.id,s);let o=!1;return this._context.model.changeWhitespace(s=>{const a=Object.keys(this._zones);for(let u=0,r=a.length;u{const s={addZone:a=>(c=!0,this._addZone(o,a)),removeZone:a=>{!a||(c=this._removeZone(o,a)||c)},layoutZone:a=>{!a||(c=this._layoutZone(o,a)||c)}};d(p,s),s.addZone=S,s.removeZone=S,s.layoutZone=S}),c}_addZone(p,c){const o=this._computeWhitespaceProps(c),a={whitespaceId:p.insertWhitespace(o.afterViewLineNumber,this._getZoneOrdinal(c),o.heightInPx,o.minWidthInPx),delegate:c,isVisible:!1,domNode:b.createFastDomNode(c.domNode),marginDomNode:c.marginDomNode?b.createFastDomNode(c.marginDomNode):null};return this._safeCallOnComputedHeight(a.delegate,o.heightInPx),a.domNode.setPosition("absolute"),a.domNode.domNode.style.width="100%",a.domNode.setDisplay("none"),a.domNode.setAttribute("monaco-view-zone",a.whitespaceId),this.domNode.appendChild(a.domNode),a.marginDomNode&&(a.marginDomNode.setPosition("absolute"),a.marginDomNode.domNode.style.width="100%",a.marginDomNode.setDisplay("none"),a.marginDomNode.setAttribute("monaco-view-zone",a.whitespaceId),this.marginDomNode.appendChild(a.marginDomNode)),this._zones[a.whitespaceId]=a,this.setShouldRender(),a.whitespaceId}_removeZone(p,c){if(this._zones.hasOwnProperty(c)){const o=this._zones[c];return delete this._zones[c],p.removeWhitespace(o.whitespaceId),o.domNode.removeAttribute("monaco-visible-view-zone"),o.domNode.removeAttribute("monaco-view-zone"),o.domNode.domNode.parentNode.removeChild(o.domNode.domNode),o.marginDomNode&&(o.marginDomNode.removeAttribute("monaco-visible-view-zone"),o.marginDomNode.removeAttribute("monaco-view-zone"),o.marginDomNode.domNode.parentNode.removeChild(o.marginDomNode.domNode)),this.setShouldRender(),!0}return!1}_layoutZone(p,c){if(this._zones.hasOwnProperty(c)){const o=this._zones[c],s=this._computeWhitespaceProps(o.delegate);return p.changeOneWhitespace(o.whitespaceId,s.afterViewLineNumber,s.heightInPx),this._safeCallOnComputedHeight(o.delegate,s.heightInPx),this.setShouldRender(),!0}return!1}shouldSuppressMouseDownOnViewZone(p){if(this._zones.hasOwnProperty(p)){const c=this._zones[p];return Boolean(c.delegate.suppressMouseDown)}return!1}_heightInPixels(p){return typeof p.heightInPx=="number"?p.heightInPx:typeof p.heightInLines=="number"?this._lineHeight*p.heightInLines:this._lineHeight}_minWidthInPixels(p){return typeof p.minWidthInPx=="number"?p.minWidthInPx:0}_safeCallOnComputedHeight(p,c){if(typeof p.onComputedHeight=="function")try{p.onComputedHeight(c)}catch(o){N.onUnexpectedError(o)}}_safeCallOnDomNodeTop(p,c){if(typeof p.onDomNodeTop=="function")try{p.onDomNodeTop(c)}catch(o){N.onUnexpectedError(o)}}prepareRender(p){}render(p){const c=p.viewportData.whitespaceViewportData,o={};let s=!1;for(let u=0,r=c.length;u0?o[r-1]:0,s=n)a=r+1;else break}return new M(r,s-i)}}e.LineBreakData=w;class S{constructor(o,s){this.tabSize=o,this.data=s}}e.MinimapLinesRenderingData=S;class C{constructor(o,s,a,u,r,i){this.content=o,this.continuesWithWrappedLine=s,this.minColumn=a,this.maxColumn=u,this.startVisibleColumn=r,this.tokens=i}}e.ViewLineData=C;class d{constructor(o,s,a,u,r,i,n,t,l,h){this.minColumn=o,this.maxColumn=s,this.content=a,this.continuesWithWrappedLine=u,this.isBasicASCII=d.isBasicASCII(a,i),this.containsRTL=d.containsRTL(a,this.isBasicASCII,r),this.tokens=n,this.inlineDecorations=t,this.tabSize=l,this.startVisibleColumn=h}static isBasicASCII(o,s){return s?b.isBasicASCII(o):!0}static containsRTL(o,s,a){return!s&&a?b.containsRTL(o):!1}}e.ViewLineRenderingData=d;class g{constructor(o,s,a){this.range=o,this.inlineClassName=s,this.type=a}}e.InlineDecoration=g;class p{constructor(o,s){this.range=o,this.options=s}}e.ViewModelDecoration=p}),define(Q[397],J([0,1,8,91,63]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MonospaceLineBreaksComputerFactory=void 0;class w extends N.CharacterClassifier{constructor(r,i){super(0);for(let n=0;n=0&&r<256?this._asciiMap[r]:r>=12352&&r<=12543||r>=13312&&r<=19903||r>=19968&&r<=40959?3:this._map.get(r)||this._defaultValue}}let S=[],C=[];class d{constructor(r,i){this.classifier=new w(r,i)}static create(r){return new d(r.get(113),r.get(112))}createLineBreaksComputer(r,i,n,t){i=i|0,n=+n;let l=[],h=[];return{addRequest:(m,_)=>{l.push(m),h.push(_)},finalize:()=>{const m=r.typicalFullwidthCharacterWidth/r.typicalHalfwidthCharacterWidth;let _=[];for(let f=0,v=l.length;f=0){let F=Math.abs(f[B]-O);for(;B+1=F)break;F=D,B++}}for(;BF&&(F=E,D=T);let R=0,W=0,x=0,K=0;if(D<=O){let ee=D,se=F===0?0:i.charCodeAt(F-1),ne=F===0?0:u.get(se),le=!0;for(let X=F;XE&&s(se,ne,P,V)&&(R=z,W=ee),ee+=U,ee>O){z>E?(x=z,K=ee-U):(x=X+1,K=ee),ee-W>y&&(R=0),le=!1;break}se=P,ne=V}if(le){k>0&&(L[k]=_[_.length-1],I[k]=f[_.length-1],k++);break}}if(R===0){let ee=D,se=i.charCodeAt(F),ne=u.get(se),le=!1;for(let X=F-1;X>=E;X--){const z=X+1,P=i.charCodeAt(X);if(P===9){le=!0;break}let V,U;if(b.isLowSurrogate(P)?(X--,V=0,U=2):(V=u.get(P),U=b.isFullWidthCharacter(P)?l:1),ee<=O){if(x===0&&(x=z,K=ee),ee<=O-y)break;if(s(P,V,se,ne)){R=z,W=ee;break}}ee-=U,se=P,ne=V}if(R!==0){const X=y-(K-W);if(X<=n){const z=i.charCodeAt(x);let P;b.isHighSurrogate(z)?P=2:P=c(z,K,n,l),X-P<0&&(R=0)}}if(le){B--;continue}}if(R===0&&(R=x,W=K),R<=E){const ee=i.charCodeAt(E);b.isHighSurrogate(ee)?(R=E+2,W=T+2):(R=E+1,W=T+c(ee,T,n,l))}for(E=R,L[k]=R,T=W,I[k]=W,k++,O=W+y;B<0||B=Y)break;Y=ee,B++}}return k===0?null:(L.length=k,I.length=k,S=r.breakOffsets,C=r.breakOffsetsVisibleColumn,r.breakOffsets=L,r.breakOffsetsVisibleColumn=I,r.wrappedTextIndentLength=v,r)}function p(u,r,i,n,t,l){if(n===-1)return null;const h=r.length;if(h<=1)return null;const m=a(r,i,n,t,l),_=n-m;let f=[],v=[],y=0,L=0,I=0,k=n,E=r.charCodeAt(0),T=u.get(E),O=c(E,0,i,t),A=1;b.isHighSurrogate(E)&&(O+=1,E=r.charCodeAt(1),T=u.get(E),A++);for(let B=A;Bk&&((L===0||O-I>_)&&(L=F,I=O-W),f[y]=L,v[y]=I,y++,k=I+_,L=0),E=D,T=R}return y===0?null:(f[y]=h,v[y]=O,new M.LineBreakData(f,v,m))}function c(u,r,i,n){return u===9?i-r%i:b.isFullWidthCharacter(u)||u<32?n:1}function o(u,r){return r-u%r}function s(u,r,i,n){return i!==32&&(r===2||r===3&&n!==2||n===1||n===3&&r!==1)}function a(u,r,i,n,t){let l=0;if(t!==0){const h=b.firstNonWhitespaceIndex(u);if(h!==-1){for(let _=0;_i&&(l=0)}}return l}}),define(Q[173],J([0,1,6,2]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ReadOnlyEditAttemptEvent=e.CursorStateChangedEvent=e.ViewZonesChangedEvent=e.ScrollChangedEvent=e.FocusChangedEvent=e.ContentSizeChangedEvent=e.ViewModelEventsCollector=e.ViewModelEventDispatcher=void 0;class M extends N.Disposable{constructor(){super();this._onEvent=this._register(new b.Emitter),this.onEvent=this._onEvent.event,this._eventHandlers=[],this._viewEventQueue=null,this._isConsumingViewEventQueue=!1,this._collector=null,this._collectorCnt=0,this._outgoingEvents=[]}emitOutgoingEvent(s){this._addOutgoingEvent(s),this._emitOugoingEvents()}_addOutgoingEvent(s){for(let a=0,u=this._outgoingEvents.length;a0;){if(this._collector||this._isConsumingViewEventQueue)return;const s=this._outgoingEvents.shift();s.isNoOp()||this._onEvent.fire(s)}}addViewEventHandler(s){for(let a=0,u=this._eventHandlers.length;a0&&this._emitMany(a)}this._emitOugoingEvents()}emitSingleViewEvent(s){try{this.beginEmitViewEvents().emitViewEvent(s)}finally{this.endEmitViewEvents()}}_emitMany(s){this._viewEventQueue?this._viewEventQueue=this._viewEventQueue.concat(s):this._viewEventQueue=s,this._isConsumingViewEventQueue||this._consumeViewEventQueue()}_consumeViewEventQueue(){try{this._isConsumingViewEventQueue=!0,this._doConsumeQueue()}finally{this._isConsumingViewEventQueue=!1}}_doConsumeQueue(){for(;this._viewEventQueue;){const s=this._viewEventQueue;this._viewEventQueue=null;const a=this._eventHandlers.slice(0);for(const u of a)u.handleEvents(s)}}}e.ViewModelEventDispatcher=M;class w{constructor(){this.viewEvents=[],this.outgoingEvents=[]}emitViewEvent(s){this.viewEvents.push(s)}emitOutgoingEvent(s){this.outgoingEvents.push(s)}}e.ViewModelEventsCollector=w;class S{constructor(s,a,u,r){this.kind=0,this._oldContentWidth=s,this._oldContentHeight=a,this.contentWidth=u,this.contentHeight=r,this.contentWidthChanged=this._oldContentWidth!==this.contentWidth,this.contentHeightChanged=this._oldContentHeight!==this.contentHeight}isNoOp(){return!this.contentWidthChanged&&!this.contentHeightChanged}merge(s){return s.kind!==0?this:new S(this._oldContentWidth,this._oldContentHeight,s.contentWidth,s.contentHeight)}}e.ContentSizeChangedEvent=S;class C{constructor(s,a){this.kind=1,this.oldHasFocus=s,this.hasFocus=a}isNoOp(){return this.oldHasFocus===this.hasFocus}merge(s){return s.kind!==1?this:new C(this.oldHasFocus,s.hasFocus)}}e.FocusChangedEvent=C;class d{constructor(s,a,u,r,i,n,t,l){this.kind=2,this._oldScrollWidth=s,this._oldScrollLeft=a,this._oldScrollHeight=u,this._oldScrollTop=r,this.scrollWidth=i,this.scrollLeft=n,this.scrollHeight=t,this.scrollTop=l,this.scrollWidthChanged=this._oldScrollWidth!==this.scrollWidth,this.scrollLeftChanged=this._oldScrollLeft!==this.scrollLeft,this.scrollHeightChanged=this._oldScrollHeight!==this.scrollHeight,this.scrollTopChanged=this._oldScrollTop!==this.scrollTop}isNoOp(){return!this.scrollWidthChanged&&!this.scrollLeftChanged&&!this.scrollHeightChanged&&!this.scrollTopChanged}merge(s){return s.kind!==2?this:new d(this._oldScrollWidth,this._oldScrollLeft,this._oldScrollHeight,this._oldScrollTop,s.scrollWidth,s.scrollLeft,s.scrollHeight,s.scrollTop)}}e.ScrollChangedEvent=d;class g{constructor(){this.kind=3}isNoOp(){return!1}merge(s){return this}}e.ViewZonesChangedEvent=g;class p{constructor(s,a,u,r,i,n,t){this.kind=5,this.oldSelections=s,this.selections=a,this.oldModelVersionId=u,this.modelVersionId=r,this.source=i,this.reason=n,this.reachedMaxCursorCount=t}static _selectionsAreEqual(s,a){if(!s&&!a)return!0;if(!s||!a)return!1;const u=s.length,r=a.length;if(u!==r)return!1;for(let i=0;i=a?0:r.horizontalScrollbarSize}_getContentHeight(s,a,u){const r=this._configuration.options;let i=this._linesLayout.getLinesTotalHeight();return r.get(89)?i+=Math.max(0,a-r.get(53)-r.get(69).bottom):i+=this._getHorizontalScrollbarHeight(s,u),i}_updateHeight(){const s=this._scrollable.getScrollDimensions(),a=s.width,u=s.height,r=s.contentWidth;this._scrollable.setScrollDimensions(new g(a,s.contentWidth,u,this._getContentHeight(a,u,r)))}getCurrentViewport(){const s=this._scrollable.getScrollDimensions(),a=this._scrollable.getCurrentScrollPosition();return new S.Viewport(a.scrollTop,a.scrollLeft,s.width,s.height)}getFutureViewport(){const s=this._scrollable.getScrollDimensions(),a=this._scrollable.getFutureScrollPosition();return new S.Viewport(a.scrollTop,a.scrollLeft,s.width,s.height)}_computeContentWidth(s){const a=this._configuration.options,u=a.get(125),r=a.get(38);if(u.isViewportWrapping){const i=a.get(124),n=a.get(59);return s>i.contentWidth+r.typicalHalfwidthCharacterWidth&&n.enabled&&n.side==="right"?s+i.verticalScrollbarWidth:s}else{const i=a.get(88)*r.typicalHalfwidthCharacterWidth,n=this._linesLayout.getWhitespaceMinWidth();return Math.max(s+i,n)}}setMaxLineWidth(s){const a=this._scrollable.getScrollDimensions();this._scrollable.setScrollDimensions(new g(a.width,this._computeContentWidth(s),a.height,a.contentHeight)),this._updateHeight()}saveState(){const s=this._scrollable.getFutureScrollPosition();let a=s.scrollTop,u=this._linesLayout.getLineNumberAtOrAfterVerticalOffset(a),r=this._linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(u);return{scrollTop:a,scrollTopWithoutViewZones:a-r,scrollLeft:s.scrollLeft}}changeWhitespace(s){const a=this._linesLayout.changeWhitespace(s);return a&&this.onHeightMaybeChanged(),a}getVerticalOffsetForLineNumber(s){return this._linesLayout.getVerticalOffsetForLineNumber(s)}isAfterLines(s){return this._linesLayout.isAfterLines(s)}isInTopPadding(s){return this._linesLayout.isInTopPadding(s)}isInBottomPadding(s){return this._linesLayout.isInBottomPadding(s)}getLineNumberAtVerticalOffset(s){return this._linesLayout.getLineNumberAtOrAfterVerticalOffset(s)}getWhitespaceAtVerticalOffset(s){return this._linesLayout.getWhitespaceAtVerticalOffset(s)}getLinesViewportData(){const s=this.getCurrentViewport();return this._linesLayout.getLinesViewportData(s.top,s.top+s.height)}getLinesViewportDataAtScrollTop(s){const a=this._scrollable.getScrollDimensions();return s+a.height>a.scrollHeight&&(s=a.scrollHeight-a.height),s<0&&(s=0),this._linesLayout.getLinesViewportData(s,s+a.height)}getWhitespaceViewportData(){const s=this.getCurrentViewport();return this._linesLayout.getWhitespaceViewportData(s.top,s.top+s.height)}getWhitespaces(){return this._linesLayout.getWhitespaces()}getContentWidth(){return this._scrollable.getScrollDimensions().contentWidth}getScrollWidth(){return this._scrollable.getScrollDimensions().scrollWidth}getContentHeight(){return this._scrollable.getScrollDimensions().contentHeight}getScrollHeight(){return this._scrollable.getScrollDimensions().scrollHeight}getCurrentScrollLeft(){return this._scrollable.getCurrentScrollPosition().scrollLeft}getCurrentScrollTop(){return this._scrollable.getCurrentScrollPosition().scrollTop}validateScrollPosition(s){return this._scrollable.validateScrollPosition(s)}setScrollPosition(s,a){a===1?this._scrollable.setScrollPositionNow(s):this._scrollable.setScrollPositionSmooth(s)}deltaScrollNow(s,a){const u=this._scrollable.getCurrentScrollPosition();this._scrollable.setScrollPositionNow({scrollLeft:u.scrollLeft+s,scrollTop:u.scrollTop+a})}}e.ViewLayout=c}),define(Q[399],J([0,1,3,21]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MoveCaretCommand=void 0;class M{constructor(S,C){this._selection=S,this._isMovingLeft=C}getEditOperations(S,C){if(!(this._selection.startLineNumber!==this._selection.endLineNumber||this._selection.isEmpty())){const d=this._selection.startLineNumber,g=this._selection.startColumn,p=this._selection.endColumn;if(!(this._isMovingLeft&&g===1)&&!(!this._isMovingLeft&&p===S.getLineMaxColumn(d)))if(this._isMovingLeft){const c=new b.Range(d,g-1,d,g),o=S.getValueInRange(c);C.addEditOperation(c,null),C.addEditOperation(new b.Range(d,p,d,p),o)}else{const c=new b.Range(d,p,d,p+1),o=S.getValueInRange(c);C.addEditOperation(c,null),C.addEditOperation(new b.Range(d,g,d,g),o)}}}computeCursorState(S,C){return this._isMovingLeft?new N.Selection(this._selection.startLineNumber,this._selection.startColumn-1,this._selection.endLineNumber,this._selection.endColumn-1):new N.Selection(this._selection.startLineNumber,this._selection.startColumn+1,this._selection.endLineNumber,this._selection.endColumn+1)}}e.MoveCaretCommand=M}),define(Q[130],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CodeActionCommandArgs=e.filtersAction=e.mayIncludeActionsOfKind=e.CodeActionKind=void 0;class b{constructor(d){this.value=d}equals(d){return this.value===d.value}contains(d){return this.equals(d)||this.value===""||d.value.startsWith(this.value+b.sep)}intersects(d){return this.contains(d)||d.contains(this)}append(d){return new b(this.value+b.sep+d)}}e.CodeActionKind=b,b.sep=".",b.None=new b("@@none@@"),b.Empty=new b(""),b.QuickFix=new b("quickfix"),b.Refactor=new b("refactor"),b.Source=new b("source"),b.SourceOrganizeImports=b.Source.append("organizeImports"),b.SourceFixAll=b.Source.append("fixAll");function N(C,d){return!(C.include&&!C.include.intersects(d)||C.excludes&&C.excludes.some(g=>w(d,g,C.include))||!C.includeSourceActions&&b.Source.contains(d))}e.mayIncludeActionsOfKind=N;function M(C,d){const g=d.kind?new b(d.kind):void 0;return!(C.include&&(!g||!C.include.contains(g))||C.excludes&&g&&C.excludes.some(p=>w(g,p,C.include))||!C.includeSourceActions&&g&&b.Source.contains(g)||C.onlyIncludePreferredActions&&!d.isPreferred)}e.filtersAction=M;function w(C,d,g){return!(!d.contains(C)||g&&d.contains(g))}class S{constructor(d,g,p){this.kind=d,this.apply=g,this.preferred=p}static fromUser(d,g){return!d||typeof d!="object"?new S(g.kind,g.apply,!1):new S(S.getKindFromUser(d,g.kind),S.getApplyFromUser(d,g.apply),S.getPreferredUser(d))}static getApplyFromUser(d,g){switch(typeof d.apply=="string"?d.apply.toLowerCase():""){case"first":return"first";case"never":return"never";case"ifsingle":return"ifSingle";default:return g}}static getKindFromUser(d,g){return typeof d.kind=="string"?new b(d.kind):g}static getPreferredUser(d){return typeof d.preferred=="boolean"?d.preferred:!1}}e.CodeActionCommandArgs=S}),define(Q[400],J([0,1,6]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ColorPickerModel=void 0;class N{constructor(w,S,C){this.presentationIndex=C,this._onColorFlushed=new b.Emitter,this.onColorFlushed=this._onColorFlushed.event,this._onDidChangeColor=new b.Emitter,this.onDidChangeColor=this._onDidChangeColor.event,this._onDidChangePresentation=new b.Emitter,this.onDidChangePresentation=this._onDidChangePresentation.event,this.originalColor=w,this._color=w,this._colorPresentations=S}get color(){return this._color}set color(w){this._color.equals(w)||(this._color=w,this._onDidChangeColor.fire(w))}get presentation(){return this.colorPresentations[this.presentationIndex]}get colorPresentations(){return this._colorPresentations}set colorPresentations(w){this._colorPresentations=w,this.presentationIndex>w.length-1&&(this.presentationIndex=0),this._onDidChangePresentation.fire(this.presentation)}selectNextColorPresentation(){this.presentationIndex=(this.presentationIndex+1)%this.colorPresentations.length,this.flushColor(),this._onDidChangePresentation.fire(this.presentation)}guessColorPresentation(w,S){for(let C=0;Cs)return!1;for(let a=0;a=65&&u<=90&&u+32===r)&&!(r>=65&&r<=90&&r+32===u))return!1}return!0}_createOperationsForBlockComment(g,p,c,o,s,a){const u=g.startLineNumber,r=g.startColumn,i=g.endLineNumber,n=g.endColumn,t=s.getLineContent(u),l=s.getLineContent(i);let h=t.lastIndexOf(p,r-1+p.length),m=l.indexOf(c,n-1-c.length);if(h!==-1&&m!==-1)if(u===i)t.substring(h+p.length,m).indexOf(c)>=0&&(h=-1,m=-1);else{const f=t.substring(h+p.length),v=l.substring(0,m);(f.indexOf(c)>=0||v.indexOf(c)>=0)&&(h=-1,m=-1)}let _;h!==-1&&m!==-1?(o&&h+p.length0&&l.charCodeAt(m-1)===32&&(c=" "+c,m-=1),_=C._createRemoveBlockCommentOperations(new M.Range(u,h+p.length+1,i,m+1),p,c)):(_=C._createAddBlockCommentOperations(g,p,c,this._insertSpace),this._usedEndToken=_.length===1?c:null);for(const f of _)a.addTrackedEditOperation(f.range,f.text)}static _createRemoveBlockCommentOperations(g,p,c){let o=[];return M.Range.isEmpty(g)?o.push(b.EditOperation.delete(new M.Range(g.startLineNumber,g.startColumn-p.length,g.endLineNumber,g.endColumn+c.length))):(o.push(b.EditOperation.delete(new M.Range(g.startLineNumber,g.startColumn-p.length,g.startLineNumber,g.startColumn))),o.push(b.EditOperation.delete(new M.Range(g.endLineNumber,g.endColumn,g.endLineNumber,g.endColumn+c.length)))),o}static _createAddBlockCommentOperations(g,p,c,o){let s=[];return M.Range.isEmpty(g)?s.push(b.EditOperation.replace(new M.Range(g.startLineNumber,g.startColumn,g.endLineNumber,g.endColumn),p+" "+c)):(s.push(b.EditOperation.insert(new N.Position(g.startLineNumber,g.startColumn),p+(o?" ":""))),s.push(b.EditOperation.insert(new N.Position(g.endLineNumber,g.endColumn),(o?" ":"")+c))),s}getEditOperations(g,p){const c=this._selection.startLineNumber,o=this._selection.startColumn;g.tokenizeIfCheap(c);const s=g.getLanguageIdAtPosition(c,o),a=S.LanguageConfigurationRegistry.getComments(s);!a||!a.blockCommentStartToken||!a.blockCommentEndToken||this._createOperationsForBlockComment(this._selection,a.blockCommentStartToken,a.blockCommentEndToken,this._insertSpace,g,p)}computeCursorState(g,p){const c=p.getInverseEditOperations();if(c.length===2){const o=c[0],s=c[1];return new w.Selection(o.range.endLineNumber,o.range.endColumn,s.range.startLineNumber,s.range.startColumn)}else{const o=c[0].range,s=this._usedEndToken?-this._usedEndToken.length-1:0;return new w.Selection(o.endLineNumber,o.endColumn+s,o.endLineNumber,o.endColumn+s)}}}e.BlockCommentCommand=C}),define(Q[401],J([0,1,8,62,14,3,21,41,224]),function(q,e,b,N,M,w,S,C,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.LineCommentCommand=void 0;class g{constructor(c,o,s,a,u,r){this._selection=c,this._tabSize=o,this._type=s,this._insertSpace=a,this._selectionId=null,this._deltaColumn=0,this._moveEndPositionDown=!1,this._ignoreEmptyLines=u,this._ignoreFirstLine=r||!1}static _gatherPreflightCommentStrings(c,o,s){c.tokenizeIfCheap(o);const a=c.getLanguageIdAtPosition(o,1),u=C.LanguageConfigurationRegistry.getComments(a),r=u?u.lineCommentToken:null;if(!r)return null;let i=[];for(let n=0,t=s-o+1;nu?o[n].commentStrOffset=r-1:o[n].commentStrOffset=r}}}e.LineCommentCommand=g}),define(Q[402],J([0,1,21,3]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DragAndDropCommand=void 0;class M{constructor(S,C,d){this.selection=S,this.targetPosition=C,this.copy=d,this.targetSelection=null}getEditOperations(S,C){let d=S.getValueInRange(this.selection);if(this.copy||C.addEditOperation(this.selection,null),C.addEditOperation(new N.Range(this.targetPosition.lineNumber,this.targetPosition.column,this.targetPosition.lineNumber,this.targetPosition.column),d),this.selection.containsPosition(this.targetPosition)&&!(this.copy&&(this.selection.getEndPosition().equals(this.targetPosition)||this.selection.getStartPosition().equals(this.targetPosition)))){this.targetSelection=this.selection;return}if(this.copy){this.targetSelection=new b.Selection(this.targetPosition.lineNumber,this.targetPosition.column,this.selection.endLineNumber-this.selection.startLineNumber+this.targetPosition.lineNumber,this.selection.startLineNumber===this.selection.endLineNumber?this.targetPosition.column+this.selection.endColumn-this.selection.startColumn:this.selection.endColumn);return}if(this.targetPosition.lineNumber>this.selection.endLineNumber){this.targetSelection=new b.Selection(this.targetPosition.lineNumber-this.selection.endLineNumber+this.selection.startLineNumber,this.targetPosition.column,this.targetPosition.lineNumber,this.selection.startLineNumber===this.selection.endLineNumber?this.targetPosition.column+this.selection.endColumn-this.selection.startColumn:this.selection.endColumn);return}if(this.targetPosition.lineNumber0){let C=[];for(let p=0;pb.Range.compareRangesUsingStarts(p.range,c.range));let d=[],g=C[0];for(let p=1;p0){let i=[],n=u.caseOps.length,t=0;for(let l=0,h=r.length;l=n){i.push(r.slice(l));break}switch(u.caseOps[t]){case"U":i.push(r[l].toUpperCase());break;case"u":i.push(r[l].toUpperCase()),t++;break;case"L":i.push(r[l].toLowerCase());break;case"l":i.push(r[l].toLowerCase()),t++;break;default:i.push(r[l])}}r=i.join("")}o+=r}return o}static _substitute(p,c){if(c===null)return"";if(p===0)return c[0];let o="";for(;p>0;){if(p=s)break;let u=g.charCodeAt(o);switch(u){case 92:c.emitUnchanged(o-1),c.emitStatic("\\",o+1);break;case 110:c.emitUnchanged(o-1),c.emitStatic(` +`,o+1);break;case 116:c.emitUnchanged(o-1),c.emitStatic(" ",o+1);break;case 117:case 85:case 108:case 76:c.emitUnchanged(o-1),c.emitStatic("",o+1),p.push(String.fromCharCode(u));break}continue}if(a===36){if(o++,o>=s)break;let u=g.charCodeAt(o);if(u===36){c.emitUnchanged(o-1),c.emitStatic("$",o+1);continue}if(u===48||u===38){c.emitUnchanged(o-1),c.emitMatchIndex(0,o+1,p),p.length=0;continue}if(49<=u&&u<=57){let r=u-48;if(o+1e.MAX_FOLDING_REGIONS)throw new Error("invalid startIndexes or endIndexes size");this._startIndexes=S,this._endIndexes=C,this._collapseStates=new Uint32Array(Math.ceil(S.length/32)),this._types=d,this._parentsComputed=!1}ensureParentIndices(){if(!this._parentsComputed){this._parentsComputed=!0;let S=[],C=(d,g)=>{let p=S[S.length-1];return this.getStartLineNumber(p)<=d&&this.getEndLineNumber(p)>=g};for(let d=0,g=this._startIndexes.length;de.MAX_LINE_NUMBER||c>e.MAX_LINE_NUMBER)throw new Error("startLineNumber or endLineNumber must not exceed "+e.MAX_LINE_NUMBER);for(;S.length>0&&!C(p,c);)S.pop();let o=S.length>0?S[S.length-1]:-1;S.push(d),this._startIndexes[d]=p+((o&255)<<24),this._endIndexes[d]=c+((o&65280)<<16)}}}get length(){return this._startIndexes.length}getStartLineNumber(S){return this._startIndexes[S]&e.MAX_LINE_NUMBER}getEndLineNumber(S){return this._endIndexes[S]&e.MAX_LINE_NUMBER}getType(S){return this._types?this._types[S]:void 0}hasTypes(){return!!this._types}isCollapsed(S){let C=S/32|0,d=S%32;return(this._collapseStates[C]&1<>>24)+((this._endIndexes[S]&b)>>>16);return C===e.MAX_FOLDING_REGIONS?-1:C}contains(S,C){return this.getStartLineNumber(S)<=C&&this.getEndLineNumber(S)>=C}findIndex(S){let C=0,d=this._startIndexes.length;if(d===0)return-1;for(;C=0){if(this.getEndLineNumber(C)>=S)return C;for(C=this.getParentIndex(C);C!==-1;){if(this.contains(C,S))return C;C=this.getParentIndex(C)}}return-1}toString(){let S=[];for(let C=0;C=this.endLineNumber}containsLine(S){return this.startLineNumber<=S&&S<=this.endLineNumber}}e.FoldingRegion=M}),define(Q[405],J([0,1,6,174]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.setCollapseStateForType=e.setCollapseStateForMatchingLines=e.setCollapseStateAtLevel=e.setCollapseStateUp=e.setCollapseStateLevelsUp=e.setCollapseStateLevelsDown=e.toggleCollapseState=e.FoldingModel=void 0;class M{constructor(s,a){this._updateEventEmitter=new b.Emitter,this.onDidChange=this._updateEventEmitter.event,this._textModel=s,this._decorationProvider=a,this._regions=new N.FoldingRegions(new Uint32Array(0),new Uint32Array(0)),this._editorDecorationIds=[],this._isInitialized=!1}get regions(){return this._regions}get textModel(){return this._textModel}get isInitialized(){return this._isInitialized}toggleCollapseState(s){if(!!s.length){s=s.sort((u,r)=>u.regionIndex-r.regionIndex);const a={};this._decorationProvider.changeDecorations(u=>{let r=0,i=-1,n=-1;const t=l=>{for(;rn&&(n=h),r++}};for(let l of s){let h=l.regionIndex,m=this._editorDecorationIds[h];if(m&&!a[m]){a[m]=!0,t(h);let _=!this._regions.isCollapsed(h);this._regions.setCollapsed(h,_),i=Math.max(i,this._regions.getEndLineNumber(h))}}t(this._regions.length)}),this._updateEventEmitter.fire({model:this,collapseStateChanged:s})}}update(s,a=[]){let u=[],r=(_,f)=>{for(let v of a)if(_{const v=s.getStartLineNumber(_),y=s.getEndLineNumber(_);f&&r(v,y)&&(f=!1),s.setCollapsed(_,f);const L=this._textModel.getLineMaxColumn(v),I={startLineNumber:v,startColumn:Math.max(L-1,1),endLineNumber:v,endColumn:L};u.push({range:I,options:this._decorationProvider.getDecorationOption(f,y<=i)}),f&&y>i&&(i=y)},t=0,l=()=>{for(;t=v)n(h,f===v),h++;else break}}m=l()}for(;h0)return s}applyMemento(s){if(!!Array.isArray(s)){let a=[];for(let u of s){let r=this.getRegionAtLine(u.startLineNumber);r&&!r.isCollapsed&&a.push(r)}this.toggleCollapseState(a)}}dispose(){this._decorationProvider.deltaDecorations(this._editorDecorationIds,[])}getAllRegionsAtLine(s,a){let u=[];if(this._regions){let r=this._regions.findRange(s),i=1;for(;r>=0;){let n=this._regions.toRegion(r);(!a||a(n,i))&&u.push(n),i++,r=n.parentIndex}}return u}getRegionAtLine(s){if(this._regions){let a=this._regions.findRange(s);if(a>=0)return this._regions.toRegion(a)}return null}getRegionsInside(s,a){let u=[],r=s?s.regionIndex+1:0,i=s?s.endLineNumber:Number.MAX_VALUE;if(a&&a.length===2){const n=[];for(let t=r,l=this._regions.length;t0&&!h.containedBy(n[n.length-1]);)n.pop();n.push(h),a(h,n.length)&&u.push(h)}else break}}else for(let n=r,t=this._regions.length;n1){let t=o.getRegionsInside(i,(l,h)=>l.isCollapsed!==n&&h0)for(let i of u){let n=o.getRegionAtLine(i);if(n&&(n.isCollapsed!==s&&r.push(n),a>1)){let t=o.getRegionsInside(n,(l,h)=>l.isCollapsed!==s&&hn.isCollapsed!==s&&tt.isCollapsed!==s&&l<=a);r.push(...n)}o.toggleCollapseState(r)}e.setCollapseStateLevelsUp=C;function d(o,s,a){let u=[];for(let r of a){let i=o.getAllRegionsAtLine(r,n=>n.isCollapsed!==s);i.length>0&&u.push(i[0])}o.toggleCollapseState(u)}e.setCollapseStateUp=d;function g(o,s,a,u){let r=(n,t)=>t===s&&n.isCollapsed!==a&&!u.some(l=>n.containsLine(l)),i=o.getRegionsInside(null,r);o.toggleCollapseState(i)}e.setCollapseStateAtLevel=g;function p(o,s,a){let u=o.textModel,r=o.regions,i=[];for(let n=r.length-1;n>=0;n--)if(a!==r.isCollapsed(n)){let t=r.getStartLineNumber(n);s.test(u.getLineContent(t))&&i.push(r.toRegion(n))}o.toggleCollapseState(i)}e.setCollapseStateForMatchingLines=p;function c(o,s,a){let u=o.regions,r=[];for(let i=u.length-1;i>=0;i--)a!==u.isCollapsed(i)&&s===u.getType(i)&&r.push(u.toRegion(i));o.toggleCollapseState(r)}e.setCollapseStateForType=c}),define(Q[406],J([0,1,6,3,19]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.HiddenRangeModel=void 0;class w{constructor(g){this._updateEventEmitter=new b.Emitter,this._foldingModel=g,this._foldingModelListener=g.onDidChange(p=>this.updateHiddenRanges()),this._hiddenRanges=[],g.regions.length&&this.updateHiddenRanges()}get onDidChange(){return this._updateEventEmitter.event}get hiddenRanges(){return this._hiddenRanges}updateHiddenRanges(){let g=!1,p=[],c=0,o=0,s=Number.MAX_VALUE,a=-1,u=this._foldingModel.regions;for(;c({startLineNumber:g.startLineNumber-1,endLineNumber:g.endLineNumber}))}applyHiddenRanges(g){this._hiddenRanges=g,this._updateEventEmitter.fire(g)}hasRanges(){return this._hiddenRanges.length>0}isHidden(g){return C(this._hiddenRanges,g)!==null}adjustSelections(g){let p=!1,c=this._foldingModel.textModel,o=null,s=a=>((!o||!S(a,o))&&(o=C(this._hiddenRanges,a)),o?o.startLineNumber-1:null);for(let a=0,u=g.length;a0&&(this._hiddenRanges=[],this._updateEventEmitter.fire(this._hiddenRanges)),this._foldingModelListener&&(this._foldingModelListener.dispose(),this._foldingModelListener=null)}}e.HiddenRangeModel=w;function S(d,g){return d>=g.startLineNumber&&d<=g.endLineNumber}function C(d,g){let p=M.findFirstInSorted(d,c=>g=0&&d[p].endLineNumber>=g?d[p]:null}}),define(Q[225],J([0,1,12,174,2]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.sanitizeRanges=e.RangesCollector=e.SyntaxRangeProvider=e.ID_SYNTAX_PROVIDER=void 0;const w=5e3,S={};e.ID_SYNTAX_PROVIDER="syntax";class C{constructor(o,s,a,u=w){this.editorModel=o,this.providers=s,this.limit=u,this.id=e.ID_SYNTAX_PROVIDER;for(const r of s)typeof r.onDidChange=="function"&&(this.disposables||(this.disposables=new M.DisposableStore),this.disposables.add(r.onDidChange(a)))}compute(o){return d(this.providers,this.editorModel,o).then(s=>s?p(s,this.limit):null)}dispose(){var o;(o=this.disposables)===null||o===void 0||o.dispose()}}e.SyntaxRangeProvider=C;function d(c,o,s){let a=null,u=c.map((r,i)=>Promise.resolve(r.provideFoldingRanges(o,S,s)).then(n=>{if(!s.isCancellationRequested&&Array.isArray(n)){Array.isArray(a)||(a=[]);let t=o.getLineCount();for(let l of n)l.start>0&&l.end>l.start&&l.end<=t&&a.push({start:l.start,end:l.end,rank:i,kind:l.kind})}},b.onUnexpectedExternalError));return Promise.all(u).then(r=>a)}class g{constructor(o){this._startIndexes=[],this._endIndexes=[],this._nestingLevels=[],this._nestingLevelCounts=[],this._types=[],this._length=0,this._foldingRangesLimit=o}add(o,s,a,u){if(!(o>N.MAX_LINE_NUMBER||s>N.MAX_LINE_NUMBER)){let r=this._length;this._startIndexes[r]=o,this._endIndexes[r]=s,this._nestingLevels[r]=u,this._types[r]=a,this._length++,u<30&&(this._nestingLevelCounts[u]=(this._nestingLevelCounts[u]||0)+1)}}toIndentRanges(){if(this._length<=this._foldingRangesLimit){let o=new Uint32Array(this._length),s=new Uint32Array(this._length);for(let a=0;athis._foldingRangesLimit){s=i;break}o+=n}}let a=new Uint32Array(this._foldingRangesLimit),u=new Uint32Array(this._foldingRangesLimit),r=[];for(let i=0,n=0;i{let t=i.start-n.start;return t===0&&(t=i.rank-n.rank),t}),a=new g(o),u,r=[];for(let i of s)if(!u)u=i,a.add(i.start,i.end,i.kind&&i.kind.value,r.length);else if(i.start>u.start)if(i.end<=u.end)r.push(u),u=i,a.add(i.start,i.end,i.kind&&i.kind.value,r.length);else{if(i.start>u.end){do u=r.pop();while(u&&i.start>u.end);u&&r.push(u),u=i}a.add(i.start,i.end,i.kind&&i.kind.value,r.length)}return a.toIndentRanges()}e.sanitizeRanges=p}),define(Q[407],J([0,1,225]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InitializingRangeProvider=e.ID_INIT_PROVIDER=void 0,e.ID_INIT_PROVIDER="init";class N{constructor(w,S,C,d){if(this.editorModel=w,this.id=e.ID_INIT_PROVIDER,S.length){let g=p=>({range:{startLineNumber:p.startLineNumber,startColumn:0,endLineNumber:p.endLineNumber,endColumn:w.getLineLength(p.endLineNumber)},options:{stickiness:1}});this.decorationIds=w.deltaDecorations([],S.map(g)),this.timeout=setTimeout(C,d)}}dispose(){this.decorationIds&&(this.editorModel.deltaDecorations(this.decorationIds,[]),this.decorationIds=void 0),typeof this.timeout=="number"&&(clearTimeout(this.timeout),this.timeout=void 0)}compute(w){let S=[];if(this.decorationIds)for(let C of this.decorationIds){let d=this.editorModel.getDecorationRange(C);d&&S.push({start:d.startLineNumber,end:d.endLineNumber,rank:1})}return Promise.resolve(b.sanitizeRanges(S,Number.MAX_VALUE))}}e.InitializingRangeProvider=N}),define(Q[226],J([0,1,62,3]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.FormattingEdit=void 0;class M{static _handleEolEdits(S,C){let d,g=[];for(let p of C)typeof p.eol=="number"&&(d=p.eol),p.range&&typeof p.text=="string"&&g.push(p);return typeof d=="number"&&S.hasModel()&&S.getModel().pushEOL(d),g}static _isFullModelReplaceEdit(S,C){if(!S.hasModel())return!1;const d=S.getModel(),g=d.validateRange(C.range);return d.getFullModelRange().equalsRange(g)}static execute(S,C,d){d&&S.pushUndoStop();const g=M._handleEolEdits(S,C);g.length===1&&M._isFullModelReplaceEdit(S,g[0])?S.executeEdits("formatEditsCommand",g.map(p=>b.EditOperation.replace(N.Range.lift(p.range),p.text))):S.executeEdits("formatEditsCommand",g.map(p=>b.EditOperation.replaceMove(N.Range.lift(p.range),p.text))),d&&S.pushUndoStop()}}e.FormattingEdit=M}),define(Q[227],J([0,1,2,6,17]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ClickLinkGesture=e.ClickLinkOptions=e.ClickLinkKeyboardEvent=e.ClickLinkMouseEvent=void 0;function w(c,o){return!!c[o]}class S{constructor(o,s){this.target=o.target,this.hasTriggerModifier=w(o.event,s.triggerModifier),this.hasSideBySideModifier=w(o.event,s.triggerSideBySideModifier),this.isNoneOrSingleMouseDown=o.event.detail<=1}}e.ClickLinkMouseEvent=S;class C{constructor(o,s){this.keyCodeIsTriggerKey=o.keyCode===s.triggerKey,this.keyCodeIsSideBySideKey=o.keyCode===s.triggerSideBySideKey,this.hasTriggerModifier=w(o,s.triggerModifier)}}e.ClickLinkKeyboardEvent=C;class d{constructor(o,s,a,u){this.triggerKey=o,this.triggerModifier=s,this.triggerSideBySideKey=a,this.triggerSideBySideModifier=u}equals(o){return this.triggerKey===o.triggerKey&&this.triggerModifier===o.triggerModifier&&this.triggerSideBySideKey===o.triggerSideBySideKey&&this.triggerSideBySideModifier===o.triggerSideBySideModifier}}e.ClickLinkOptions=d;function g(c){return c==="altKey"?M.isMacintosh?new d(57,"metaKey",6,"altKey"):new d(5,"ctrlKey",6,"altKey"):M.isMacintosh?new d(6,"altKey",57,"metaKey"):new d(6,"altKey",5,"ctrlKey")}class p extends b.Disposable{constructor(o){super();this._onMouseMoveOrRelevantKeyDown=this._register(new N.Emitter),this.onMouseMoveOrRelevantKeyDown=this._onMouseMoveOrRelevantKeyDown.event,this._onExecute=this._register(new N.Emitter),this.onExecute=this._onExecute.event,this._onCancel=this._register(new N.Emitter),this.onCancel=this._onCancel.event,this._editor=o,this._opts=g(this._editor.getOption(64)),this._lastMouseMoveEvent=null,this._hasTriggerKeyOnMouseDown=!1,this._lineNumberOnMouseDown=0,this._register(this._editor.onDidChangeConfiguration(s=>{if(s.hasChanged(64)){const a=g(this._editor.getOption(64));if(this._opts.equals(a))return;this._opts=a,this._lastMouseMoveEvent=null,this._hasTriggerKeyOnMouseDown=!1,this._lineNumberOnMouseDown=0,this._onCancel.fire()}})),this._register(this._editor.onMouseMove(s=>this._onEditorMouseMove(new S(s,this._opts)))),this._register(this._editor.onMouseDown(s=>this._onEditorMouseDown(new S(s,this._opts)))),this._register(this._editor.onMouseUp(s=>this._onEditorMouseUp(new S(s,this._opts)))),this._register(this._editor.onKeyDown(s=>this._onEditorKeyDown(new C(s,this._opts)))),this._register(this._editor.onKeyUp(s=>this._onEditorKeyUp(new C(s,this._opts)))),this._register(this._editor.onMouseDrag(()=>this._resetHandler())),this._register(this._editor.onDidChangeCursorSelection(s=>this._onDidChangeCursorSelection(s))),this._register(this._editor.onDidChangeModel(s=>this._resetHandler())),this._register(this._editor.onDidChangeModelContent(()=>this._resetHandler())),this._register(this._editor.onDidScrollChange(s=>{(s.scrollTopChanged||s.scrollLeftChanged)&&this._resetHandler()}))}_onDidChangeCursorSelection(o){o.selection&&o.selection.startColumn!==o.selection.endColumn&&this._resetHandler()}_onEditorMouseMove(o){this._lastMouseMoveEvent=o,this._onMouseMoveOrRelevantKeyDown.fire([o,null])}_onEditorMouseDown(o){this._hasTriggerKeyOnMouseDown=o.hasTriggerModifier,this._lineNumberOnMouseDown=o.target.position?o.target.position.lineNumber:0}_onEditorMouseUp(o){const s=o.target.position?o.target.position.lineNumber:0;this._hasTriggerKeyOnMouseDown&&this._lineNumberOnMouseDown&&this._lineNumberOnMouseDown===s&&this._onExecute.fire(o)}_onEditorKeyDown(o){this._lastMouseMoveEvent&&(o.keyCodeIsTriggerKey||o.keyCodeIsSideBySideKey&&o.hasTriggerModifier)?this._onMouseMoveOrRelevantKeyDown.fire([this._lastMouseMoveEvent,o]):o.hasTriggerModifier&&this._onCancel.fire()}_onEditorKeyUp(o){o.keyCodeIsTriggerKey&&this._onCancel.fire()}_resetHandler(){this._lastMouseMoveEvent=null,this._hasTriggerKeyOnMouseDown=!1,this._onCancel.fire()}}e.ClickLinkGesture=p}),define(Q[228],J([0,1,15,12]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.HoverOperation=void 0;class M{constructor(S,C,d,g,p){this._computer=S,this._state=0,this._hoverTime=p,this._firstWaitScheduler=new b.RunOnceScheduler(()=>this._triggerAsyncComputation(),0),this._secondWaitScheduler=new b.RunOnceScheduler(()=>this._triggerSyncComputation(),0),this._loadingMessageScheduler=new b.RunOnceScheduler(()=>this._showLoadingMessage(),0),this._asyncComputationPromise=null,this._asyncComputationPromiseDone=!1,this._completeCallback=C,this._errorCallback=d,this._progressCallback=g}setHoverTime(S){this._hoverTime=S}_firstWaitTime(){return this._hoverTime/2}_secondWaitTime(){return this._hoverTime/2}_loadingMessageTime(){return 3*this._hoverTime}_triggerAsyncComputation(){this._state=2,this._secondWaitScheduler.schedule(this._secondWaitTime()),this._computer.computeAsync?(this._asyncComputationPromiseDone=!1,this._asyncComputationPromise=b.createCancelablePromise(S=>this._computer.computeAsync(S)),this._asyncComputationPromise.then(S=>{this._asyncComputationPromiseDone=!0,this._withAsyncResult(S)},S=>this._onError(S))):this._asyncComputationPromiseDone=!0}_triggerSyncComputation(){this._computer.computeSync&&this._computer.onResult(this._computer.computeSync(),!0),this._asyncComputationPromiseDone?(this._state=0,this._onComplete(this._computer.getResult())):(this._state=3,this._onProgress(this._computer.getResult()))}_showLoadingMessage(){this._state===3&&this._onProgress(this._computer.getResultWithLoadingMessage())}_withAsyncResult(S){S&&this._computer.onResult(S,!1),this._state===3&&(this._state=0,this._onComplete(this._computer.getResult()))}_onComplete(S){this._completeCallback(S)}_onError(S){this._errorCallback?this._errorCallback(S):N.onUnexpectedError(S)}_onProgress(S){this._progressCallback(S)}start(S){if(S===0)this._state===0&&(this._state=1,this._firstWaitScheduler.schedule(this._firstWaitTime()),this._loadingMessageScheduler.schedule(this._loadingMessageTime()));else switch(this._state){case 0:this._triggerAsyncComputation(),this._secondWaitScheduler.cancel(),this._triggerSyncComputation();break;case 2:this._secondWaitScheduler.cancel(),this._triggerSyncComputation();break}}cancel(){this._loadingMessageScheduler.cancel(),this._state===1&&this._firstWaitScheduler.cancel(),this._state===2&&(this._secondWaitScheduler.cancel(),this._asyncComputationPromise&&(this._asyncComputationPromise.cancel(),this._asyncComputationPromise=null)),this._state===3&&this._asyncComputationPromise&&(this._asyncComputationPromise.cancel(),this._asyncComputationPromise=null),this._state=0}}e.HoverOperation=M}),define(Q[408],J([0,1,52]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.GlyphHoverWidget=void 0;class N extends b.Widget{constructor(w,S){super();this._id=w,this._editor=S,this._isVisible=!1,this._domNode=document.createElement("div"),this._domNode.className="monaco-hover hidden",this._domNode.setAttribute("aria-hidden","true"),this._domNode.setAttribute("role","tooltip"),this._showAtLineNumber=-1,this._register(this._editor.onDidChangeConfiguration(C=>{C.hasChanged(38)&&this.updateFont()})),this._editor.addOverlayWidget(this)}get isVisible(){return this._isVisible}set isVisible(w){this._isVisible=w,this._domNode.classList.toggle("hidden",!this._isVisible)}getId(){return this._id}getDomNode(){return this._domNode}showAt(w){this._showAtLineNumber=w,this.isVisible||(this.isVisible=!0);const S=this._editor.getLayoutInfo(),C=this._editor.getTopForLineNumber(this._showAtLineNumber),d=this._editor.getScrollTop(),g=this._editor.getOption(53),p=this._domNode.clientHeight,c=C-d-(p-g)/2;this._domNode.style.left=`${S.glyphMarginLeft+S.glyphMarginWidth}px`,this._domNode.style.top=`${Math.max(Math.round(c),0)}px`}hide(){!this.isVisible||(this.isVisible=!1)}getPosition(){return null}dispose(){this._editor.removeOverlayWidget(this),super.dispose()}updateFont(){const w=Array.prototype.slice.call(this._domNode.getElementsByTagName("code")),S=Array.prototype.slice.call(this._domNode.getElementsByClassName("code"));[...w,...S].forEach(C=>this._editor.applyFontInfo(C))}updateContents(w){this._domNode.textContent="",this._domNode.appendChild(w),this.updateFont()}}e.GlyphHoverWidget=N}),define(Q[409],J([0,1,21]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InPlaceReplaceCommand=void 0;class N{constructor(w,S,C){this._editRange=w,this._originalSelection=S,this._text=C}getEditOperations(w,S){S.addTrackedEditOperation(this._editRange,this._text)}computeCursorState(w,S){const d=S.getInverseEditOperations()[0].range;return this._originalSelection.isEmpty()?new b.Selection(d.endLineNumber,Math.min(this._originalSelection.positionColumn,d.endColumn),d.endLineNumber,Math.min(this._originalSelection.positionColumn,d.endColumn)):new b.Selection(d.endLineNumber,d.endColumn-this._text.length,d.endLineNumber,d.endColumn)}}e.InPlaceReplaceCommand=N}),define(Q[229],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.generateIndent=e.getSpaceCnt=void 0;function b(M,w){let S=0;for(let C=0;C=c)return null;let o=[];for(let a=p;a<=c;a++)o.push(C.getLineContent(a));let s=o.slice(0);return s.sort(M.getCollator().compare),g===!0&&(s=s.reverse()),{startLineNumber:p,endLineNumber:c,before:o,after:s}}function S(C,d,g){let p=w(C,d,g);return p?b.EditOperation.replace(new N.Range(p.startLineNumber,1,p.endLineNumber,C.getLineMaxColumn(p.endLineNumber)),p.after.join(` +`)):null}}),define(Q[230],J([0,1,14,3,71]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.BracketSelectionRangeProvider=void 0;class w{provideSelectionRanges(C,d){return Ie(this,void 0,void 0,function*(){const g=[];for(const p of d){const c=[];g.push(c);const o=new Map;yield new Promise(s=>w._bracketsRightYield(s,0,C,p,o)),yield new Promise(s=>w._bracketsLeftYield(s,0,C,p,o,c))}return g})}static _bracketsRightYield(C,d,g,p,c){const o=new Map,s=Date.now();for(;;){if(d>=w._maxRounds){C();break}if(!p){C();break}let a=g.findNextBracket(p);if(!a){C();break}if(Date.now()-s>w._maxDuration){setTimeout(()=>w._bracketsRightYield(C,d+1,g,p,c));break}const r=a.close[0];if(a.isOpen){let i=o.has(r)?o.get(r):0;o.set(r,i+1)}else{let i=o.has(r)?o.get(r):0;if(i-=1,o.set(r,Math.max(0,i)),i<0){let n=c.get(r);n||(n=new M.LinkedList,c.set(r,n)),n.push(a.range)}}p=a.range.getEndPosition()}}static _bracketsLeftYield(C,d,g,p,c,o){const s=new Map,a=Date.now();for(;;){if(d>=w._maxRounds&&c.size===0){C();break}if(!p){C();break}let u=g.findPrevBracket(p);if(!u){C();break}if(Date.now()-a>w._maxDuration){setTimeout(()=>w._bracketsLeftYield(C,d+1,g,p,c,o));break}const i=u.close[0];if(u.isOpen){let n=s.has(i)?s.get(i):0;if(n-=1,s.set(i,Math.max(0,n)),n<0){let t=c.get(i);if(t){let l=t.shift();t.size===0&&c.delete(i);const h=N.Range.fromPositions(u.range.getEndPosition(),l.getStartPosition()),m=N.Range.fromPositions(u.range.getStartPosition(),l.getEndPosition());o.push({range:h}),o.push({range:m}),w._addBracketLeading(g,m,o)}}}else{let n=s.has(i)?s.get(i):0;s.set(i,n+1)}p=u.range.getStartPosition()}}static _addBracketLeading(C,d,g){if(d.startLineNumber!==d.endLineNumber){const p=d.startLineNumber,c=C.getLineFirstNonWhitespaceColumn(p);c!==0&&c!==d.startColumn&&(g.push({range:N.Range.fromPositions(new b.Position(p,c),d.getEndPosition())}),g.push({range:N.Range.fromPositions(new b.Position(p,1),d.getEndPosition())}));const o=p-1;if(o>0){const s=C.getLineFirstNonWhitespaceColumn(o);s===d.startColumn&&s!==C.getLineLastNonWhitespaceColumn(o)&&(g.push({range:N.Range.fromPositions(new b.Position(o,s),d.getEndPosition())}),g.push({range:N.Range.fromPositions(new b.Position(o,1),d.getEndPosition())}))}}}}e.BracketSelectionRangeProvider=w,w._maxDuration=30,w._maxRounds=2}),define(Q[412],J([0,1,3,8]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.WordSelectionRangeProvider=void 0;class M{provideSelectionRanges(S,C){const d=[];for(const g of C){const p=[];d.push(p),this._addInWordRanges(p,S,g),this._addWordRanges(p,S,g),this._addWhitespaceLine(p,S,g),p.push({range:S.getFullModelRange()})}return d}_addInWordRanges(S,C,d){const g=C.getWordAtPosition(d);if(!!g){let{word:p,startColumn:c}=g,o=d.column-c,s=o,a=o,u=0;for(;s>=0;s--){let r=p.charCodeAt(s);if(s!==o&&(r===95||r===45))break;if(N.isLowerAsciiLetter(r)&&N.isUpperAsciiLetter(u))break;u=r}for(s+=1;a0&&C.getLineFirstNonWhitespaceColumn(d.lineNumber)===0&&C.getLineLastNonWhitespaceColumn(d.lineNumber)===0&&S.push({range:new b.Range(d.lineNumber,1,d.lineNumber,C.getLineMaxColumn(d.lineNumber))})}}e.WordSelectionRangeProvider=M}),define(Q[131],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SnippetParser=e.TextmateSnippet=e.Variable=e.FormatString=e.Transform=e.Choice=e.Placeholder=e.TransformableMarker=e.Text=e.Marker=e.Scanner=void 0;class b{constructor(){this.value="",this.pos=0}static isDigitCharacter(u){return u>=48&&u<=57}static isVariableCharacter(u){return u===95||u>=97&&u<=122||u>=65&&u<=90}text(u){this.value=u,this.pos=0}tokenText(u){return this.value.substr(u.pos,u.len)}next(){if(this.pos>=this.value.length)return{type:14,pos:this.pos,len:0};let u=this.pos,r=0,i=this.value.charCodeAt(u),n;if(n=b._table[i],typeof n=="number")return this.pos+=1,{type:n,pos:u,len:1};if(b.isDigitCharacter(i)){n=8;do r+=1,i=this.value.charCodeAt(u+r);while(b.isDigitCharacter(i));return this.pos+=r,{type:n,pos:u,len:r}}if(b.isVariableCharacter(i)){n=9;do i=this.value.charCodeAt(u+ ++r);while(b.isVariableCharacter(i)||b.isDigitCharacter(i));return this.pos+=r,{type:n,pos:u,len:r}}n=10;do r+=1,i=this.value.charCodeAt(u+r);while(!isNaN(i)&&typeof b._table[i]=="undefined"&&!b.isDigitCharacter(i)&&!b.isVariableCharacter(i));return this.pos+=r,{type:n,pos:u,len:r}}}e.Scanner=b,b._table={[36]:0,[58]:1,[44]:2,[123]:3,[125]:4,[92]:5,[47]:6,[124]:7,[43]:11,[45]:12,[63]:13};class N{constructor(){this._children=[]}appendChild(u){return u instanceof M&&this._children[this._children.length-1]instanceof M?this._children[this._children.length-1].value+=u.value:(u.parent=this,this._children.push(u)),this}replace(u,r){const{parent:i}=u,n=i.children.indexOf(u),t=i.children.slice(0);t.splice(n,1,...r),i._children=t,function l(h,m){for(const _ of h)_.parent=m,l(_.children,_)}(r,i)}get children(){return this._children}get snippet(){let u=this;for(;;){if(!u)return;if(u instanceof o)return u;u=u.parent}}toString(){return this.children.reduce((u,r)=>u+r.toString(),"")}len(){return 0}}e.Marker=N;class M extends N{constructor(u){super();this.value=u}toString(){return this.value}len(){return this.value.length}clone(){return new M(this.value)}}e.Text=M;class w extends N{}e.TransformableMarker=w;class S extends w{constructor(u){super();this.index=u}static compareByIndex(u,r){return u.index===r.index?0:u.isFinalTabstop?1:r.isFinalTabstop||u.indexr.index?1:0}get isFinalTabstop(){return this.index===0}get choice(){return this._children.length===1&&this._children[0]instanceof C?this._children[0]:void 0}clone(){let u=new S(this.index);return this.transform&&(u.transform=this.transform.clone()),u._children=this.children.map(r=>r.clone()),u}}e.Placeholder=S;class C extends N{constructor(){super(...arguments);this.options=[]}appendChild(u){return u instanceof M&&(u.parent=this,this.options.push(u)),this}toString(){return this.options[0].value}len(){return this.options[0].len()}clone(){let u=new C;return this.options.forEach(u.appendChild,u),u}}e.Choice=C;class d extends N{constructor(){super(...arguments);this.regexp=new RegExp("")}resolve(u){const r=this;let i=!1,n=u.replace(this.regexp,function(){return i=!0,r._replace(Array.prototype.slice.call(arguments,0,-2))});return!i&&this._children.some(t=>t instanceof g&&Boolean(t.elseValue))&&(n=this._replace([])),n}_replace(u){let r="";for(const i of this._children)if(i instanceof g){let n=u[i.index]||"";n=i.resolve(n),r+=n}else r+=i.toString();return r}toString(){return""}clone(){let u=new d;return u.regexp=new RegExp(this.regexp.source,""+(this.regexp.ignoreCase?"i":"")+(this.regexp.global?"g":"")),u._children=this.children.map(r=>r.clone()),u}}e.Transform=d;class g extends N{constructor(u,r,i,n){super();this.index=u,this.shorthandName=r,this.ifValue=i,this.elseValue=n}resolve(u){return this.shorthandName==="upcase"?u?u.toLocaleUpperCase():"":this.shorthandName==="downcase"?u?u.toLocaleLowerCase():"":this.shorthandName==="capitalize"?u?u[0].toLocaleUpperCase()+u.substr(1):"":this.shorthandName==="pascalcase"?u?this._toPascalCase(u):"":Boolean(u)&&typeof this.ifValue=="string"?this.ifValue:!Boolean(u)&&typeof this.elseValue=="string"?this.elseValue:u||""}_toPascalCase(u){const r=u.match(/[a-z]+/gi);return r?r.map(function(i){return i.charAt(0).toUpperCase()+i.substr(1).toLowerCase()}).join(""):u}clone(){return new g(this.index,this.shorthandName,this.ifValue,this.elseValue)}}e.FormatString=g;class p extends w{constructor(u){super();this.name=u}resolve(u){let r=u.resolve(this);return this.transform&&(r=this.transform.resolve(r||"")),r!==void 0?(this._children=[new M(r)],!0):!1}clone(){const u=new p(this.name);return this.transform&&(u.transform=this.transform.clone()),u._children=this.children.map(r=>r.clone()),u}}e.Variable=p;function c(a,u){const r=[...a];for(;r.length>0;){const i=r.shift();if(!u(i))break;r.unshift(...i.children)}}class o extends N{get placeholderInfo(){if(!this._placeholders){let u=[],r;this.walk(function(i){return i instanceof S&&(u.push(i),r=!r||r.indexn===u?(i=!0,!1):(r+=n.len(),!0)),i?r:-1}fullLen(u){let r=0;return c([u],i=>(r+=i.len(),!0)),r}enclosingPlaceholders(u){let r=[],{parent:i}=u;for(;i;)i instanceof S&&r.push(i),i=i.parent;return r}resolveVariables(u){return this.walk(r=>(r instanceof p&&r.resolve(u)&&(this._placeholders=void 0),!0)),this}appendChild(u){return this._placeholders=void 0,super.appendChild(u)}replace(u,r){return this._placeholders=void 0,super.replace(u,r)}clone(){let u=new o;return this._children=this.children.map(r=>r.clone()),u}walk(u){c(this.children,u)}}e.TextmateSnippet=o;class s{constructor(){this._scanner=new b,this._token={type:14,pos:0,len:0}}static escape(u){return u.replace(/\$|}|\\/g,"\\$&")}static guessNeedsClipboard(u){return/\${?CLIPBOARD/.test(u)}parse(u,r,i){this._scanner.text(u),this._token=this._scanner.next();const n=new o;for(;this._parse(n););const t=new Map,l=[];let h=0;n.walk(m=>(m instanceof S&&(h+=1,m.isFinalTabstop?t.set(0,void 0):!t.has(m.index)&&m.children.length>0?t.set(m.index,m.children):l.push(m)),!0));for(const m of l){const _=t.get(m.index);if(_){const f=new S(m.index);f.transform=m.transform;for(const v of _)f.appendChild(v.clone());n.replace(m,[f])}}return i||(i=h>0&&r),!t.has(0)&&i&&n.appendChild(new S(0)),n}_accept(u,r){if(u===void 0||this._token.type===u){let i=r?this._scanner.tokenText(this._token):!0;return this._token=this._scanner.next(),i}return!1}_backTo(u){return this._scanner.pos=u.pos+u.len,this._token=u,!1}_until(u){const r=this._token;for(;this._token.type!==u;){if(this._token.type===14)return!1;if(this._token.type===5){const n=this._scanner.next();if(n.type!==0&&n.type!==4&&n.type!==5)return!1}this._token=this._scanner.next()}const i=this._scanner.value.substring(r.pos,this._token.pos).replace(/\\(\$|}|\\)/g,"$1");return this._token=this._scanner.next(),i}_parse(u){return this._parseEscaped(u)||this._parseTabstopOrVariableName(u)||this._parseComplexPlaceholder(u)||this._parseComplexVariable(u)||this._parseAnything(u)}_parseEscaped(u){let r;return(r=this._accept(5,!0))?(r=this._accept(0,!0)||this._accept(4,!0)||this._accept(5,!0)||r,u.appendChild(new M(r)),!0):!1}_parseTabstopOrVariableName(u){let r;const i=this._token;return this._accept(0)&&(r=this._accept(9,!0)||this._accept(8,!0))?(u.appendChild(/^\d+$/.test(r)?new S(Number(r)):new p(r)),!0):this._backTo(i)}_parseComplexPlaceholder(u){let r;const i=this._token;if(!(this._accept(0)&&this._accept(3)&&(r=this._accept(8,!0))))return this._backTo(i);const t=new S(Number(r));if(this._accept(1))for(;;){if(this._accept(4))return u.appendChild(t),!0;if(!this._parse(t))return u.appendChild(new M("${"+r+":")),t.children.forEach(u.appendChild,u),!0}else if(t.index>0&&this._accept(7)){const l=new C;for(;;){if(this._parseChoiceElement(l)){if(this._accept(2))continue;if(this._accept(7)&&(t.appendChild(l),this._accept(4)))return u.appendChild(t),!0}return this._backTo(i),!1}}else return this._accept(6)?this._parseTransform(t)?(u.appendChild(t),!0):(this._backTo(i),!1):this._accept(4)?(u.appendChild(t),!0):this._backTo(i)}_parseChoiceElement(u){const r=this._token,i=[];for(;!(this._token.type===2||this._token.type===7);){let n;if((n=this._accept(5,!0))?n=this._accept(2,!0)||this._accept(7,!0)||this._accept(5,!0)||n:n=this._accept(void 0,!0),!n)return this._backTo(r),!1;i.push(n)}return i.length===0?(this._backTo(r),!1):(u.appendChild(new M(i.join(""))),!0)}_parseComplexVariable(u){let r;const i=this._token;if(!(this._accept(0)&&this._accept(3)&&(r=this._accept(9,!0))))return this._backTo(i);const t=new p(r);if(this._accept(1))for(;;){if(this._accept(4))return u.appendChild(t),!0;if(!this._parse(t))return u.appendChild(new M("${"+r+":")),t.children.forEach(u.appendChild,u),!0}else return this._accept(6)?this._parseTransform(t)?(u.appendChild(t),!0):(this._backTo(i),!1):this._accept(4)?(u.appendChild(t),!0):this._backTo(i)}_parseTransform(u){let r=new d,i="",n="";for(;!this._accept(6);){let t;if(t=this._accept(5,!0)){t=this._accept(6,!0)||t,i+=t;continue}if(this._token.type!==14){i+=this._accept(void 0,!0);continue}return!1}for(;!this._accept(6);){let t;if(t=this._accept(5,!0)){t=this._accept(5,!0)||this._accept(6,!0)||t,r.appendChild(new M(t));continue}if(!(this._parseFormatString(r)||this._parseAnything(r)))return!1}for(;!this._accept(4);){if(this._token.type!==14){n+=this._accept(void 0,!0);continue}return!1}try{r.regexp=new RegExp(i,n)}catch(t){return!1}return u.transform=r,!0}_parseFormatString(u){const r=this._token;if(!this._accept(0))return!1;let i=!1;this._accept(3)&&(i=!0);let n=this._accept(8,!0);if(n)if(i){if(this._accept(4))return u.appendChild(new g(Number(n))),!0;if(!this._accept(1))return this._backTo(r),!1}else return u.appendChild(new g(Number(n))),!0;else return this._backTo(r),!1;if(this._accept(6)){let t=this._accept(9,!0);return!t||!this._accept(4)?(this._backTo(r),!1):(u.appendChild(new g(Number(n),t)),!0)}else if(this._accept(11)){let t=this._until(4);if(t)return u.appendChild(new g(Number(n),void 0,t,void 0)),!0}else if(this._accept(12)){let t=this._until(4);if(t)return u.appendChild(new g(Number(n),void 0,void 0,t)),!0}else if(this._accept(13)){let t=this._until(1);if(t){let l=this._until(4);if(l)return u.appendChild(new g(Number(n),void 0,t,l)),!0}}else{let t=this._until(4);if(t)return u.appendChild(new g(Number(n),void 0,void 0,t)),!0}return this._backTo(r),!1}_parseAnything(u){return this._token.type!==14?(u.appendChild(new M(this._scanner.tokenText(this._token))),this._accept(void 0),!0):!1}}e.SnippetParser=s}),define(Q[413],J([0,1,66,8,19]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CompletionModel=e.LineContext=void 0;class w{constructor(d,g){this.leadingLineContent=d,this.characterCountDelta=g}}e.LineContext=w;class S{constructor(d,g,p,c,o,s,a){this.clipboardText=a,this._snippetCompareFn=S._compareCompletionItems,this._items=d,this._column=g,this._wordDistance=c,this._options=o,this._refilterKind=1,this._lineContext=p,s==="top"?this._snippetCompareFn=S._compareCompletionItemsSnippetsUp:s==="bottom"&&(this._snippetCompareFn=S._compareCompletionItemsSnippetsDown)}get lineContext(){return this._lineContext}set lineContext(d){(this._lineContext.leadingLineContent!==d.leadingLineContent||this._lineContext.characterCountDelta!==d.characterCountDelta)&&(this._refilterKind=this._lineContext.characterCountDelta2e3?b.fuzzyScore:b.fuzzyScoreGracefulAggressive;for(let r=0;r=t)i.score=b.FuzzyScore.Default;else if(typeof i.completion.filterText=="string"){let m=u(c,o,h,i.completion.filterText,i.filterTextLow,0,!1);if(!m)continue;N.compareIgnoreCase(i.completion.filterText,l)===0?i.score=m:(i.score=b.anyScore(c,o,h,l,i.labelLow,0),i.score[0]=m[0])}else{let m=u(c,o,h,l,i.labelLow,0,!1);if(!m)continue;i.score=m}}i.idx=r,i.distance=this._wordDistance.distance(i.position,i.completion),a.push(i),d.push(l.length)}}this._filteredItems=a.sort(this._snippetCompareFn),this._refilterKind=0,this._stats={pLabelLen:d.length?M.quickSelect(d.length-.85,d,(r,i)=>r-i):0}}static _compareCompletionItems(d,g){return d.score[0]>g.score[0]?-1:d.score[0]g.distance?1:d.idxg.idx?1:0}static _compareCompletionItemsSnippetsDown(d,g){if(d.completion.kind!==g.completion.kind){if(d.completion.kind===27)return 1;if(g.completion.kind===27)return-1}return S._compareCompletionItems(d,g)}static _compareCompletionItemsSnippetsUp(d,g){if(d.completion.kind!==g.completion.kind){if(d.completion.kind===27)return-1;if(g.completion.kind===27)return 1}return S._compareCompletionItems(d,g)}}e.CompletionModel=S}),define(Q[231],J([0,1,6,2,7,104]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ResizableHTMLElement=void 0;class S{constructor(){this._onDidWillResize=new b.Emitter,this.onDidWillResize=this._onDidWillResize.event,this._onDidResize=new b.Emitter,this.onDidResize=this._onDidResize.event,this._sashListener=new N.DisposableStore,this._size=new M.Dimension(0,0),this._minSize=new M.Dimension(0,0),this._maxSize=new M.Dimension(Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER),this.domNode=document.createElement("div"),this._eastSash=new w.Sash(this.domNode,{getVerticalSashLeft:()=>this._size.width},{orientation:0}),this._westSash=new w.Sash(this.domNode,{getVerticalSashLeft:()=>0},{orientation:0}),this._northSash=new w.Sash(this.domNode,{getHorizontalSashTop:()=>0},{orientation:1,orthogonalEdge:w.OrthogonalEdge.North}),this._southSash=new w.Sash(this.domNode,{getHorizontalSashTop:()=>this._size.height},{orientation:1,orthogonalEdge:w.OrthogonalEdge.South}),this._northSash.orthogonalStartSash=this._westSash,this._northSash.orthogonalEndSash=this._eastSash,this._southSash.orthogonalStartSash=this._westSash,this._southSash.orthogonalEndSash=this._eastSash;let d,g=0,p=0;this._sashListener.add(b.Event.any(this._northSash.onDidStart,this._eastSash.onDidStart,this._southSash.onDidStart,this._westSash.onDidStart)(()=>{d===void 0&&(this._onDidWillResize.fire(),d=this._size,g=0,p=0)})),this._sashListener.add(b.Event.any(this._northSash.onDidEnd,this._eastSash.onDidEnd,this._southSash.onDidEnd,this._westSash.onDidEnd)(()=>{d!==void 0&&(d=void 0,g=0,p=0,this._onDidResize.fire({dimension:this._size,done:!0}))})),this._sashListener.add(this._eastSash.onDidChange(c=>{d&&(p=c.currentX-c.startX,this.layout(d.height+g,d.width+p),this._onDidResize.fire({dimension:this._size,done:!1,east:!0}))})),this._sashListener.add(this._westSash.onDidChange(c=>{d&&(p=-(c.currentX-c.startX),this.layout(d.height+g,d.width+p),this._onDidResize.fire({dimension:this._size,done:!1,west:!0}))})),this._sashListener.add(this._northSash.onDidChange(c=>{d&&(g=-(c.currentY-c.startY),this.layout(d.height+g,d.width+p),this._onDidResize.fire({dimension:this._size,done:!1,north:!0}))})),this._sashListener.add(this._southSash.onDidChange(c=>{d&&(g=c.currentY-c.startY,this.layout(d.height+g,d.width+p),this._onDidResize.fire({dimension:this._size,done:!1,south:!0}))})),this._sashListener.add(b.Event.any(this._eastSash.onDidReset,this._westSash.onDidReset)(c=>{this._preferredSize&&(this.layout(this._size.height,this._preferredSize.width),this._onDidResize.fire({dimension:this._size,done:!0}))})),this._sashListener.add(b.Event.any(this._northSash.onDidReset,this._southSash.onDidReset)(c=>{this._preferredSize&&(this.layout(this._preferredSize.height,this._size.width),this._onDidResize.fire({dimension:this._size,done:!0}))}))}dispose(){this._northSash.dispose(),this._southSash.dispose(),this._eastSash.dispose(),this._westSash.dispose(),this._sashListener.dispose(),this.domNode.remove()}enableSashes(d,g,p,c){this._northSash.state=d?3:0,this._eastSash.state=g?3:0,this._southSash.state=p?3:0,this._westSash.state=c?3:0}layout(d=this.size.height,g=this.size.width){const{height:p,width:c}=this._minSize,{height:o,width:s}=this._maxSize;d=Math.max(p,Math.min(o,d)),g=Math.max(c,Math.min(s,g));const a=new M.Dimension(g,d);M.Dimension.equals(a,this._size)||(this.domNode.style.height=d+"px",this.domNode.style.width=g+"px",this._size=a,this._northSash.layout(),this._eastSash.layout(),this._southSash.layout(),this._westSash.layout())}get size(){return this._size}set maxSize(d){this._maxSize=d}get maxSize(){return this._maxSize}set minSize(d){this._minSize=d}get minSize(){return this._minSize}set preferredSize(d){this._preferredSize=d}get preferredSize(){return this._preferredSize}}e.ResizableHTMLElement=S}),define(Q[414],J([0,1,19,2,91]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CommitCharacterController=void 0;class w{constructor(C,d,g){this._disposables=new N.DisposableStore,this._disposables.add(d.onDidShow(()=>this._onItem(d.getFocusedItem()))),this._disposables.add(d.onDidFocus(this._onItem,this)),this._disposables.add(d.onDidHide(this.reset,this)),this._disposables.add(C.onWillType(p=>{if(this._active&&!d.isFrozen()){const c=p.charCodeAt(p.length-1);this._active.acceptCharacters.has(c)&&C.getOption(0)&&g(this._active.item)}}))}_onItem(C){if(!C||!b.isNonEmptyArray(C.item.completion.commitCharacters)){this.reset();return}if(!(this._active&&this._active.item.item===C.item)){const d=new M.CharacterSet;for(const g of C.item.completion.commitCharacters)g.length>0&&d.add(g.charCodeAt(0));this._active={acceptCharacters:d,item:C}}}reset(){this._active=void 0}dispose(){this._disposables.dispose()}}e.CommitCharacterController=w}),define(Q[415],J([0,1,2]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.OvertypingCapturer=void 0;class N{constructor(w,S){this._disposables=new b.DisposableStore,this._lastOvertyped=[],this._empty=!0,this._disposables.add(w.onWillType(()=>{if(!!this._empty&&!!w.hasModel()){const C=w.getSelections(),d=C.length;let g=!1;for(let c=0;cN._maxSelectionLength)return;this._lastOvertyped[c]={value:p.getValueInRange(o),multiline:o.startLineNumber!==o.endLineNumber}}this._empty=!1}}})),this._disposables.add(S.onDidCancel(C=>{!this._empty&&!C.retrigger&&(this._empty=!0)}))}getLastOvertypedInfo(w){if(!this._empty&&w>=0&&w=0?i[n]:i[Math.max(0,~n-1)],l=c.length;for(const h of c){if(!N.Range.containsRange(h.range,t))break;l-=1}return l}}})}}e.WordDistance=w,w.None=new class extends w{distance(){return 0}}}),define(Q[232],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.stateExists=e.findRules=e.substituteMatches=e.createError=e.log=e.sanitize=e.fixCase=e.empty=e.isIAction=e.isString=e.isFuzzyAction=e.isFuzzyActionArr=void 0;function b(a){return Array.isArray(a)}e.isFuzzyActionArr=b;function N(a){return!b(a)}e.isFuzzyAction=N;function M(a){return typeof a=="string"}e.isString=M;function w(a){return!M(a)}e.isIAction=w;function S(a){return!a}e.empty=S;function C(a,u){return a.ignoreCase&&u?u.toLowerCase():u}e.fixCase=C;function d(a){return a.replace(/[&<>'"_]/g,"-")}e.sanitize=d;function g(a,u){console.log(`${a.languageId}: ${u}`)}e.log=g;function p(a,u){return new Error(`${a.languageId}: ${u}`)}e.createError=p;function c(a,u,r,i,n){const t=/\$((\$)|(#)|(\d\d?)|[sS](\d\d?)|@(\w+))/g;let l=null;return u.replace(t,function(h,m,_,f,v,y,L,I,k){return S(_)?S(f)?!S(v)&&v0;){const i=a.tokenizer[r];if(i)return i;const n=r.lastIndexOf(".");n<0?r=null:r=r.substr(0,n)}return null}e.findRules=o;function s(a,u){let r=u;for(;r&&r.length>0;){if(a.stateNames[r])return!0;const n=r.lastIndexOf(".");n<0?r=null:r=r.substr(0,n)}return!1}e.stateExists=s}),define(Q[417],J([0,1,232]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.compile=void 0;function N(a,u){if(!u||!Array.isArray(u))return!1;for(const r of u)if(!a(r))return!1;return!0}function M(a,u){return typeof a=="boolean"?a:u}function w(a,u){return typeof a=="string"?a:u}function S(a){const u={};for(const r of a)u[r]=!0;return u}function C(a,u=!1){u&&(a=a.map(function(i){return i.toLowerCase()}));const r=S(a);return u?function(i){return r[i.toLowerCase()]!==void 0&&r.hasOwnProperty(i.toLowerCase())}:function(i){return r[i]!==void 0&&r.hasOwnProperty(i)}}function d(a,u){let r=0,i;do i=!1,u=u.replace(/(.|^)@(\w+)/g,function(t,l,h){if(l==="@")return t;i=!0;let m="";if(typeof a[h]=="string")m=a[h];else if(a[h]&&a[h]instanceof RegExp)m=a[h].source;else throw a[h]===void 0?b.createError(a,"language definition does not contain attribute '"+h+"', used at: "+u):b.createError(a,"attribute reference '"+h+"' must be a string, used at: "+u);return l+(b.empty(m)?"":"(?:"+m+")")}),r++;while(i&&r<5);u=u.replace(/@@/g,"@");let n=(a.ignoreCase?"i":"")+(a.unicode?"u":"");return new RegExp(u,n)}function g(a,u,r,i){if(i<0)return a;if(i=100){i=i-100;let n=r.split(".");if(n.unshift(r),i=0&&(i.tokenSubst=!0),typeof r.bracket=="string")if(r.bracket==="@open")i.bracket=1;else if(r.bracket==="@close")i.bracket=-1;else throw b.createError(a,"a 'bracket' attribute must be either '@open' or '@close', in rule: "+u);if(r.next){if(typeof r.next!="string")throw b.createError(a,"the next state must be a string value in rule: "+u);{let n=r.next;if(!/^(@pop|@push|@popall)$/.test(n)&&(n[0]==="@"&&(n=n.substr(1)),n.indexOf("$")<0&&!b.stateExists(a,b.substituteMatches(a,n,"",[],""))))throw b.createError(a,"the next state '"+r.next+"' is not defined in rule: "+u);i.next=n}}return typeof r.goBack=="number"&&(i.goBack=r.goBack),typeof r.switchTo=="string"&&(i.switchTo=r.switchTo),typeof r.log=="string"&&(i.log=r.log),typeof r.nextEmbedded=="string"&&(i.nextEmbedded=r.nextEmbedded,a.usesEmbedded=!0),i}}else if(Array.isArray(r)){let i=[];for(let n=0,t=r.length;n0&&i[0]==="^",this.name=this.name+": "+i,this.regex=d(u,"^(?:"+(this.matchOnlyAtLineStart?i.substr(1):i)+")")}setAction(u,r){this.action=c(u,this.name,r)}}function s(a,u){if(!u||typeof u!="object")throw new Error("Monarch: expecting a language definition object");let r={};r.languageId=a,r.includeLF=M(u.includeLF,!1),r.noThrow=!1,r.maxStack=100,r.start=typeof u.start=="string"?u.start:null,r.ignoreCase=M(u.ignoreCase,!1),r.unicode=M(u.unicode,!1),r.tokenPostfix=w(u.tokenPostfix,"."+r.languageId),r.defaultToken=w(u.defaultToken,"source"),r.usesEmbedded=!1;let i=u;i.languageId=a,i.includeLF=r.includeLF,i.ignoreCase=r.ignoreCase,i.unicode=r.unicode,i.noThrow=r.noThrow,i.usesEmbedded=r.usesEmbedded,i.stateNames=u.tokenizer,i.defaultToken=r.defaultToken;function n(l,h,m){for(const _ of m){let f=_.include;if(f){if(typeof f!="string")throw b.createError(r,"an 'include' attribute must be a string at: "+l);if(f[0]==="@"&&(f=f.substr(1)),!u.tokenizer[f])throw b.createError(r,"include target '"+f+"' is not defined at: "+l);n(l+"."+f,h,u.tokenizer[f])}else{const v=new o(l);if(Array.isArray(_)&&_.length>=1&&_.length<=3)if(v.setRegex(i,_[0]),_.length>=3)if(typeof _[1]=="string")v.setAction(i,{token:_[1],next:_[2]});else if(typeof _[1]=="object"){const y=_[1];y.next=_[2],v.setAction(i,y)}else throw b.createError(r,"a next state as the last element of a rule can only be given if the action is either an object or a string, at: "+l);else v.setAction(i,_[1]);else{if(!_.regex)throw b.createError(r,"a rule must either be an array, or an object with a 'regex' or 'include' field at: "+l);_.name&&typeof _.name=="string"&&(v.name=_.name),_.matchOnlyAtStart&&(v.matchOnlyAtLineStart=M(_.matchOnlyAtLineStart,!1)),v.setRegex(i,_.regex),v.setAction(i,_.action)}h.push(v)}}}if(!u.tokenizer||typeof u.tokenizer!="object")throw b.createError(r,"a language definition must define the 'tokenizer' attribute as an object");r.tokenizer=[];for(let l in u.tokenizer)if(u.tokenizer.hasOwnProperty(l)){r.start||(r.start=l);const h=u.tokenizer[l];r.tokenizer[l]=new Array,n("tokenizer."+l,r.tokenizer[l],h)}if(r.usesEmbedded=i.usesEmbedded,u.brackets){if(!Array.isArray(u.brackets))throw b.createError(r,"the 'brackets' attribute must be defined as an array")}else u.brackets=[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}];let t=[];for(let l of u.brackets){let h=l;if(h&&Array.isArray(h)&&h.length===3&&(h={token:h[2],open:h[0],close:h[1]}),h.open===h.close)throw b.createError(r,"open and close brackets in a 'brackets' attribute must be different: "+h.open+` + hint: use the 'bracket' attribute if matching on equal brackets is required.`);if(typeof h.open=="string"&&typeof h.token=="string"&&typeof h.close=="string")t.push({token:h.token+r.tokenPostfix,open:b.fixCase(r,h.open),close:b.fixCase(r,h.close)});else throw b.createError(r,"every element in the 'brackets' array must be a '{open,close,token}' object or array")}return r.brackets=t,r.noThrow=!0,r}e.compile=s}),define(Q[418],J([4,5]),function(q,e){return q.create("vs/base/browser/ui/actionbar/actionViewItems",e)}),define(Q[419],J([4,5]),function(q,e){return q.create("vs/base/browser/ui/findinput/findInput",e)}),define(Q[420],J([4,5]),function(q,e){return q.create("vs/base/browser/ui/findinput/findInputCheckboxes",e)}),define(Q[233],J([0,1,160,420,27]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.RegexCheckbox=e.WholeWordsCheckbox=e.CaseSensitiveCheckbox=void 0;const w=N.localize(0,null),S=N.localize(1,null),C=N.localize(2,null);class d extends b.Checkbox{constructor(o){super({icon:M.Codicon.caseSensitive,title:w+o.appendTitle,isChecked:o.isChecked,inputActiveOptionBorder:o.inputActiveOptionBorder,inputActiveOptionForeground:o.inputActiveOptionForeground,inputActiveOptionBackground:o.inputActiveOptionBackground})}}e.CaseSensitiveCheckbox=d;class g extends b.Checkbox{constructor(o){super({icon:M.Codicon.wholeWord,title:S+o.appendTitle,isChecked:o.isChecked,inputActiveOptionBorder:o.inputActiveOptionBorder,inputActiveOptionForeground:o.inputActiveOptionForeground,inputActiveOptionBackground:o.inputActiveOptionBackground})}}e.WholeWordsCheckbox=g;class p extends b.Checkbox{constructor(o){super({icon:M.Codicon.regex,title:C+o.appendTitle,isChecked:o.isChecked,inputActiveOptionBorder:o.inputActiveOptionBorder,inputActiveOptionForeground:o.inputActiveOptionForeground,inputActiveOptionBackground:o.inputActiveOptionBackground})}}e.RegexCheckbox=p}),define(Q[421],J([4,5]),function(q,e){return q.create("vs/base/browser/ui/findinput/replaceInput",e)}),define(Q[422],J([4,5]),function(q,e){return q.create("vs/base/browser/ui/iconLabel/iconLabel",e)}),define(Q[175],J([0,1,7,157,2,120,40,17,20,55,422,23,304]),function(q,e,b,N,M,w,S,C,d,g,p,c){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IconLabel=void 0;class o{constructor(n){this._element=n}get element(){return this._element}set textContent(n){this.disposed||n===this._textContent||(this._textContent=n,this._element.textContent=n)}set className(n){this.disposed||n===this._className||(this._className=n,this._element.className=n)}set empty(n){this.disposed||n===this._empty||(this._empty=n,this._element.style.marginLeft=n?"0":"")}dispose(){this.disposed=!0}}class s extends M.Disposable{constructor(n,t){super();this.hoverDelegate=void 0,this.customHovers=new Map,this.domNode=this._register(new o(b.append(n,b.$(".monaco-icon-label")))),this.labelContainer=b.append(this.domNode.element,b.$(".monaco-icon-label-container"));const l=b.append(this.labelContainer,b.$("span.monaco-icon-name-container"));this.descriptionContainer=this._register(new o(b.append(this.labelContainer,b.$("span.monaco-icon-description-container")))),(t==null?void 0:t.supportHighlights)?this.nameNode=new r(l,!!t.supportIcons):this.nameNode=new a(l),(t==null?void 0:t.supportDescriptionHighlights)?this.descriptionNodeFactory=()=>new N.HighlightedLabel(b.append(this.descriptionContainer.element,b.$("span.label-description")),!!t.supportIcons):this.descriptionNodeFactory=()=>this._register(new o(b.append(this.descriptionContainer.element,b.$("span.label-description")))),(t==null?void 0:t.hoverDelegate)&&(this.hoverDelegate=t.hoverDelegate)}setLabel(n,t,l){const h=["monaco-icon-label"];l&&(l.extraClasses&&h.push(...l.extraClasses),l.italic&&h.push("italic"),l.strikethrough&&h.push("strikethrough")),this.domNode.className=h.join(" "),this.setupHover(this.labelContainer,l==null?void 0:l.title),this.nameNode.setLabel(n,l),(t||this.descriptionNode)&&(this.descriptionNode||(this.descriptionNode=this.descriptionNodeFactory()),this.descriptionNode instanceof N.HighlightedLabel?(this.descriptionNode.set(t||"",l?l.descriptionMatches:void 0),this.setupHover(this.descriptionNode.element,l==null?void 0:l.descriptionTitle)):(this.descriptionNode.textContent=t||"",this.setupHover(this.descriptionNode.element,(l==null?void 0:l.descriptionTitle)||""),this.descriptionNode.empty=!t))}setupHover(n,t){const l=this.customHovers.get(n);if(l&&(l.dispose(),this.customHovers.delete(n)),!t){n.removeAttribute("title");return}return this.hoverDelegate?this.setupCustomHover(this.hoverDelegate,n,t):this.setupNativeHover(n,t)}static adjustXAndShowCustomHover(n,t,l,h){if(n&&h)return t!==void 0&&(n.target.x=t+10),l.showHover(n)}getTooltipForCustom(n){if(d.isString(n))return()=>Ie(this,void 0,void 0,function*(){return n});if(d.isFunction(n.markdown))return n.markdown;{const t=n.markdown;return()=>Ie(this,void 0,void 0,function*(){return t})}}setupCustomHover(n,t,l){t.setAttribute("title",""),t.removeAttribute("title");let h=this.getTooltipForCustom(l);const m=C.isMacintosh?1500:500;let _,f,v=!1,y,L;function I(E){if(!v){y=new c.CancellationTokenSource;function T(D){(D.type===b.EventType.MOUSE_DOWN||D.fromElement===t)&&(L==null||L.dispose(),L=void 0,v=!1,_=void 0,y.dispose(!0),O.dispose(),A.dispose())}const O=g.domEvent(t,b.EventType.MOUSE_LEAVE,!0)(T.bind(t)),A=g.domEvent(t,b.EventType.MOUSE_DOWN,!0)(T.bind(t));v=!0;function B(D){f=D.x}const F=g.domEvent(t,b.EventType.MOUSE_MOVE,!0)(B.bind(t));setTimeout(()=>Ie(this,void 0,void 0,function*(){var D;if(v&&h&&!_){const R={targetElements:[this],dispose:()=>{}};_={text:p.localize(0,null),target:R,anchorPosition:0},L=s.adjustXAndShowCustomHover(_,f,n,v);const W=(D=yield h(y.token))!==null&&D!==void 0?D:d.isString(l)?void 0:l.markdownNotSupportedFallback;W?(_={text:W,target:R,anchorPosition:0},L=s.adjustXAndShowCustomHover(_,f,n,v)):L&&(L.dispose(),L=void 0)}F.dispose()}),m)}}const k=this._register(g.domEvent(t,b.EventType.MOUSE_OVER,!0)(I.bind(t)));this.customHovers.set(t,k)}setupNativeHover(n,t){let l="";d.isString(t)?l=t:(t==null?void 0:t.markdownNotSupportedFallback)&&(l=t.markdownNotSupportedFallback),n.title=l}}e.IconLabel=s;class a{constructor(n){this.container=n,this.label=void 0,this.singleLabel=void 0}setLabel(n,t){if(!(this.label===n&&S.equals(this.options,t)))if(this.label=n,this.options=t,typeof n=="string")this.singleLabel||(this.container.innerText="",this.container.classList.remove("multiple"),this.singleLabel=b.append(this.container,b.$("a.label-name",{id:t==null?void 0:t.domId}))),this.singleLabel.textContent=n;else{this.container.innerText="",this.container.classList.add("multiple"),this.singleLabel=void 0;for(let l=0;l{const m={start:l,end:l+h.length},_=t.map(f=>w.Range.intersect(m,f)).filter(f=>!w.Range.isEmpty(f)).map(({start:f,end:v})=>({start:f-l,end:v-l}));return l=m.end+n.length,_})}}class r{constructor(n,t){this.container=n,this.supportIcons=t,this.label=void 0,this.singleLabel=void 0}setLabel(n,t){if(!(this.label===n&&S.equals(this.options,t)))if(this.label=n,this.options=t,typeof n=="string")this.singleLabel||(this.container.innerText="",this.container.classList.remove("multiple"),this.singleLabel=new N.HighlightedLabel(b.append(this.container,b.$("a.label-name",{id:t==null?void 0:t.domId})),this.supportIcons)),this.singleLabel.set(n,t==null?void 0:t.matches,void 0,t==null?void 0:t.labelEscapeNewLines);else{this.container.innerText="",this.container.classList.add("multiple"),this.singleLabel=void 0;const l=(t==null?void 0:t.separator)||"/",h=u(n,l,t==null?void 0:t.matches);for(let m=0;mW.element));this.data=R}}function h(D){return D instanceof p.ElementsDragAndDropData?new l(D):D}class m{constructor(R,W){this.modelProvider=R,this.dnd=W,this.autoExpandDisposable=b.Disposable.None}getDragURI(R){return this.dnd.getDragURI(R.element)}getDragLabel(R,W){if(this.dnd.getDragLabel)return this.dnd.getDragLabel(R.map(x=>x.element),W)}onDragStart(R,W){this.dnd.onDragStart&&this.dnd.onDragStart(h(R),W)}onDragOver(R,W,x,K,Y=!0){const ee=this.dnd.onDragOver(h(R),W&&W.element,x,K),se=this.autoExpandNode!==W;if(se&&(this.autoExpandDisposable.dispose(),this.autoExpandNode=W),typeof W=="undefined")return ee;if(se&&typeof ee!="boolean"&&ee.autoExpand&&(this.autoExpandDisposable=u.disposableTimeout(()=>{const P=this.modelProvider(),V=P.getNodeLocation(W);P.isCollapsed(V)&&P.setCollapsed(V,!1),this.autoExpandNode=void 0},500)),typeof ee=="boolean"||!ee.accept||typeof ee.bubble=="undefined"||ee.feedback){if(!Y){const P=typeof ee=="boolean"?ee:ee.accept,V=typeof ee=="boolean"?void 0:ee.effect;return{accept:P,effect:V,feedback:[x]}}return ee}if(ee.bubble===1){const P=this.modelProvider(),V=P.getNodeLocation(W),U=P.getParentNodeLocation(V),H=P.getNode(U),$=U&&P.getListIndex(U);return this.onDragOver(R,H,$,K,!1)}const ne=this.modelProvider(),le=ne.getNodeLocation(W),X=ne.getListIndex(le),z=ne.getListRenderCount(le);return Object.assign(Object.assign({},ee),{feedback:g.range(X,X+z)})}drop(R,W,x,K){this.autoExpandDisposable.dispose(),this.autoExpandNode=void 0,this.dnd.drop(h(R),W&&W.element,x,K)}onDragEnd(R){this.dnd.onDragEnd&&this.dnd.onDragEnd(R)}}function _(D,R){return R&&Object.assign(Object.assign({},R),{identityProvider:R.identityProvider&&{getId(W){return R.identityProvider.getId(W.element)}},dnd:R.dnd&&new m(D,R.dnd),multipleSelectionController:R.multipleSelectionController&&{isSelectionSingleChangeEvent(W){return R.multipleSelectionController.isSelectionSingleChangeEvent(Object.assign(Object.assign({},W),{element:W.element}))},isSelectionRangeChangeEvent(W){return R.multipleSelectionController.isSelectionRangeChangeEvent(Object.assign(Object.assign({},W),{element:W.element}))}},accessibilityProvider:R.accessibilityProvider&&Object.assign(Object.assign({},R.accessibilityProvider),{getSetSize(W){const x=D(),K=x.getNodeLocation(W),Y=x.getParentNodeLocation(K);return x.getNode(Y).visibleChildrenCount},getPosInSet(W){return W.visibleChildIndex+1},isChecked:R.accessibilityProvider&&R.accessibilityProvider.isChecked?W=>R.accessibilityProvider.isChecked(W.element):void 0,getRole:R.accessibilityProvider&&R.accessibilityProvider.getRole?W=>R.accessibilityProvider.getRole(W.element):()=>"treeitem",getAriaLabel(W){return R.accessibilityProvider.getAriaLabel(W.element)},getWidgetAriaLabel(){return R.accessibilityProvider.getWidgetAriaLabel()},getWidgetRole:R.accessibilityProvider&&R.accessibilityProvider.getWidgetRole?()=>R.accessibilityProvider.getWidgetRole():()=>"tree",getAriaLevel:R.accessibilityProvider&&R.accessibilityProvider.getAriaLevel?W=>R.accessibilityProvider.getAriaLevel(W.element):W=>W.depth,getActiveDescendantId:R.accessibilityProvider.getActiveDescendantId&&(W=>R.accessibilityProvider.getActiveDescendantId(W.element))}),keyboardNavigationLabelProvider:R.keyboardNavigationLabelProvider&&Object.assign(Object.assign({},R.keyboardNavigationLabelProvider),{getKeyboardNavigationLabel(W){return R.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(W.element)}}),enableKeyboardNavigation:R.simpleKeyboardNavigation})}class f{constructor(R){this.delegate=R}getHeight(R){return this.delegate.getHeight(R.element)}getTemplateId(R){return this.delegate.getTemplateId(R.element)}hasDynamicHeight(R){return!!this.delegate.hasDynamicHeight&&this.delegate.hasDynamicHeight(R.element)}setDynamicHeight(R,W){this.delegate.setDynamicHeight&&this.delegate.setDynamicHeight(R.element,W)}}e.ComposedTreeDelegate=f;var v;(function(D){D.None="none",D.OnHover="onHover",D.Always="always"})(v=e.RenderIndentGuides||(e.RenderIndentGuides={}));class y{constructor(R,W=[]){this._elements=W,this.onDidChange=w.Event.forEach(R,x=>this._elements=x)}get elements(){return this._elements}}class L{constructor(R,W,x,K,Y={}){this.renderer=R,this.modelProvider=W,this.activeNodes=K,this.renderedElements=new Map,this.renderedNodes=new Map,this.indent=L.DefaultIndent,this.hideTwistiesOfChildlessElements=!1,this.shouldRenderIndentGuides=!1,this.renderedIndentGuides=new n.SetMap,this.activeIndentNodes=new Set,this.indentGuidesDisposable=b.Disposable.None,this.disposables=new b.DisposableStore,this.templateId=R.templateId,this.updateOptions(Y),w.Event.map(x,ee=>ee.node)(this.onDidChangeNodeTwistieState,this,this.disposables),R.onDidChangeTwistieState&&R.onDidChangeTwistieState(this.onDidChangeTwistieState,this,this.disposables)}updateOptions(R={}){if(typeof R.indent!="undefined"&&(this.indent=i.clamp(R.indent,0,40)),typeof R.renderIndentGuides!="undefined"){const W=R.renderIndentGuides!==v.None;if(W!==this.shouldRenderIndentGuides&&(this.shouldRenderIndentGuides=W,this.indentGuidesDisposable.dispose(),W)){const x=new b.DisposableStore;this.activeNodes.onDidChange(this._onDidChangeActiveNodes,this,x),this.indentGuidesDisposable=x,this._onDidChangeActiveNodes(this.activeNodes.elements)}}typeof R.hideTwistiesOfChildlessElements!="undefined"&&(this.hideTwistiesOfChildlessElements=R.hideTwistiesOfChildlessElements)}renderTemplate(R){const W=M.append(R,M.$(".monaco-tl-row")),x=M.append(W,M.$(".monaco-tl-indent")),K=M.append(W,M.$(".monaco-tl-twistie")),Y=M.append(W,M.$(".monaco-tl-contents")),ee=this.renderer.renderTemplate(Y);return{container:R,indent:x,twistie:K,indentGuidesDisposable:b.Disposable.None,templateData:ee}}renderElement(R,W,x,K){typeof K=="number"&&(this.renderedNodes.set(R,{templateData:x,height:K}),this.renderedElements.set(R.element,R));const Y=L.DefaultIndent+(R.depth-1)*this.indent;x.twistie.style.paddingLeft=`${Y}px`,x.indent.style.width=`${Y+this.indent-16}px`,this.renderTwistie(R,x),typeof K=="number"&&this.renderIndentGuides(R,x),this.renderer.renderElement(R,W,x.templateData,K)}disposeElement(R,W,x,K){x.indentGuidesDisposable.dispose(),this.renderer.disposeElement&&this.renderer.disposeElement(R,W,x.templateData,K),typeof K=="number"&&(this.renderedNodes.delete(R),this.renderedElements.delete(R.element))}disposeTemplate(R){this.renderer.disposeTemplate(R.templateData)}onDidChangeTwistieState(R){const W=this.renderedElements.get(R);!W||this.onDidChangeNodeTwistieState(W)}onDidChangeNodeTwistieState(R){const W=this.renderedNodes.get(R);!W||(this.renderTwistie(R,W.templateData),this._onDidChangeActiveNodes(this.activeNodes.elements),this.renderIndentGuides(R,W.templateData))}renderTwistie(R,W){W.twistie.classList.remove(...t.treeItemExpandedIcon.classNamesArray);let x=!1;this.renderer.renderTwistie&&(x=this.renderer.renderTwistie(R.element,W.twistie)),R.collapsible&&(!this.hideTwistiesOfChildlessElements||R.visibleChildrenCount>0)?(x||W.twistie.classList.add(...t.treeItemExpandedIcon.classNamesArray),W.twistie.classList.add("collapsible"),W.twistie.classList.toggle("collapsed",R.collapsed)):W.twistie.classList.remove("collapsible","collapsed"),R.collapsible?W.container.setAttribute("aria-expanded",String(!R.collapsed)):W.container.removeAttribute("aria-expanded")}renderIndentGuides(R,W){if(M.clearNode(W.indent),W.indentGuidesDisposable.dispose(),!!this.shouldRenderIndentGuides){const x=new b.DisposableStore,K=this.modelProvider();let Y=R;for(;;){const ee=K.getNodeLocation(Y),se=K.getParentNodeLocation(ee);if(!se)break;const ne=K.getNode(se),le=M.$(".indent-guide",{style:`width: ${this.indent}px`});this.activeIndentNodes.has(ne)&&le.classList.add("active"),W.indent.childElementCount===0?W.indent.appendChild(le):W.indent.insertBefore(le,W.indent.firstElementChild),this.renderedIndentGuides.add(ne,le),x.add(b.toDisposable(()=>this.renderedIndentGuides.delete(ne,le))),Y=ne}W.indentGuidesDisposable=x}}_onDidChangeActiveNodes(R){if(!!this.shouldRenderIndentGuides){const W=new Set,x=this.modelProvider();R.forEach(K=>{const Y=x.getNodeLocation(K);try{const ee=x.getParentNodeLocation(Y);K.collapsible&&K.children.length>0&&!K.collapsed?W.add(K):ee&&W.add(x.getNode(ee))}catch(ee){}}),this.activeIndentNodes.forEach(K=>{W.has(K)||this.renderedIndentGuides.forEach(K,Y=>Y.classList.remove("active"))}),W.forEach(K=>{this.activeIndentNodes.has(K)||this.renderedIndentGuides.forEach(K,Y=>Y.classList.add("active"))}),this.activeIndentNodes=W}}dispose(){this.renderedNodes.clear(),this.renderedElements.clear(),this.indentGuidesDisposable.dispose(),b.dispose(this.disposables)}}L.DefaultIndent=8;class I{constructor(R,W,x){this.tree=R,this.keyboardNavigationLabelProvider=W,this._filter=x,this._totalCount=0,this._matchCount=0,this._pattern="",this._lowercasePattern="",this.disposables=new b.DisposableStore,R.onWillRefilter(this.reset,this,this.disposables)}get totalCount(){return this._totalCount}get matchCount(){return this._matchCount}set pattern(R){this._pattern=R,this._lowercasePattern=R.toLowerCase()}filter(R,W){if(this._filter){const Y=this._filter.filter(R,W);if(this.tree.options.simpleKeyboardNavigation)return Y;let ee;if(typeof Y=="boolean"?ee=Y?1:0:s.isFilterResult(Y)?ee=s.getVisibleState(Y.visibility):ee=Y,ee===0)return!1}if(this._totalCount++,this.tree.options.simpleKeyboardNavigation||!this._pattern)return this._matchCount++,{data:o.FuzzyScore.Default,visibility:!0};const x=this.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(R),K=Array.isArray(x)?x:[x];for(const Y of K){const ee=Y&&Y.toString();if(typeof ee=="undefined")return{data:o.FuzzyScore.Default,visibility:!0};const se=o.fuzzyScore(this._pattern,this._lowercasePattern,0,ee,ee.toLowerCase(),0,!0);if(se)return this._matchCount++,K.length===1?{data:se,visibility:!0}:{data:{label:ee,score:se},visibility:!0}}return this.tree.options.filterOnType?2:{data:o.FuzzyScore.Default,visibility:!0}}reset(){this._totalCount=0,this._matchCount=0}dispose(){b.dispose(this.disposables)}}class k{constructor(R,W,x,K,Y){this.tree=R,this.view=x,this.filter=K,this.keyboardNavigationDelegate=Y,this._enabled=!1,this._pattern="",this._empty=!1,this._onDidChangeEmptyState=new w.Emitter,this.positionClassName="ne",this.automaticKeyboardNavigation=!0,this.triggered=!1,this._onDidChangePattern=new w.Emitter,this.enabledDisposables=new b.DisposableStore,this.disposables=new b.DisposableStore,this.domNode=M.$(`.monaco-list-type-filter.${this.positionClassName}`),this.domNode.draggable=!0,c.domEvent(this.domNode,"dragstart")(this.onDragStart,this,this.disposables),this.messageDomNode=M.append(x.getHTMLElement(),M.$(".monaco-list-type-filter-message")),this.labelDomNode=M.append(this.domNode,M.$("span.label"));const ee=M.append(this.domNode,M.$(".controls"));this._filterOnType=!!R.options.filterOnType,this.filterOnTypeDomNode=M.append(ee,M.$("input.filter")),this.filterOnTypeDomNode.type="checkbox",this.filterOnTypeDomNode.checked=this._filterOnType,this.filterOnTypeDomNode.tabIndex=-1,this.updateFilterOnTypeTitleAndIcon(),c.domEvent(this.filterOnTypeDomNode,"input")(this.onDidChangeFilterOnType,this,this.disposables),this.clearDomNode=M.append(ee,M.$("button.clear"+t.treeFilterClearIcon.cssSelector)),this.clearDomNode.tabIndex=-1,this.clearDomNode.title=a.localize(0,null),this.keyboardNavigationEventFilter=R.options.keyboardNavigationEventFilter,W.onDidSplice(this.onDidSpliceModel,this,this.disposables),this.updateOptions(R.options)}get enabled(){return this._enabled}get pattern(){return this._pattern}get filterOnType(){return this._filterOnType}updateOptions(R){R.simpleKeyboardNavigation?this.disable():this.enable(),typeof R.filterOnType!="undefined"&&(this._filterOnType=!!R.filterOnType,this.filterOnTypeDomNode.checked=this._filterOnType),typeof R.automaticKeyboardNavigation!="undefined"&&(this.automaticKeyboardNavigation=R.automaticKeyboardNavigation),this.tree.refilter(),this.render(),this.automaticKeyboardNavigation||this.onEventOrInput("")}enable(){if(!this._enabled){const R=w.Event.chain(c.domEvent(this.view.getHTMLElement(),"keydown")).filter(x=>!N.isInputElement(x.target)||x.target===this.filterOnTypeDomNode).filter(x=>x.key!=="Dead"&&!/^Media/.test(x.key)).map(x=>new S.StandardKeyboardEvent(x)).filter(this.keyboardNavigationEventFilter||(()=>!0)).filter(()=>this.automaticKeyboardNavigation||this.triggered).filter(x=>this.keyboardNavigationDelegate.mightProducePrintableCharacter(x)&&!(x.keyCode===18||x.keyCode===16||x.keyCode===15||x.keyCode===17)||(this.pattern.length>0||this.triggered)&&(x.keyCode===9||x.keyCode===1)&&!x.altKey&&!x.ctrlKey&&!x.metaKey||x.keyCode===1&&(r.isMacintosh?x.altKey&&!x.metaKey:x.ctrlKey)&&!x.shiftKey).forEach(x=>{x.stopPropagation(),x.preventDefault()}).event,W=c.domEvent(this.clearDomNode,"click");w.Event.chain(w.Event.any(R,W)).event(this.onEventOrInput,this,this.enabledDisposables),this.filter.pattern="",this.tree.refilter(),this.render(),this._enabled=!0,this.triggered=!1}}disable(){!this._enabled||(this.domNode.remove(),this.enabledDisposables.clear(),this.tree.refilter(),this.render(),this._enabled=!1,this.triggered=!1)}onEventOrInput(R){typeof R=="string"?this.onInput(R):R instanceof MouseEvent||R.keyCode===9||R.keyCode===1&&(r.isMacintosh?R.altKey:R.ctrlKey)?this.onInput(""):R.keyCode===1?this.onInput(this.pattern.length===0?"":this.pattern.substr(0,this.pattern.length-1)):this.onInput(this.pattern+R.browserEvent.key)}onInput(R){const W=this.view.getHTMLElement();R&&!this.domNode.parentElement?W.append(this.domNode):!R&&this.domNode.parentElement&&(this.domNode.remove(),this.tree.domFocus()),this._pattern=R,this._onDidChangePattern.fire(R),this.filter.pattern=R,this.tree.refilter(),R&&this.tree.focusNext(0,!0,void 0,K=>!o.FuzzyScore.isDefault(K.filterData));const x=this.tree.getFocus();if(x.length>0){const K=x[0];this.tree.getRelativeTop(K)===null&&this.tree.reveal(K,.5)}this.render(),R||(this.triggered=!1)}onDragStart(){const R=this.view.getHTMLElement(),{left:W}=M.getDomNodePagePosition(R),x=R.clientWidth,K=x/2,Y=this.domNode.clientWidth,ee=new b.DisposableStore;let se=this.positionClassName;const ne=()=>{switch(se){case"nw":this.domNode.style.top="4px",this.domNode.style.left="4px";break;case"ne":this.domNode.style.top="4px",this.domNode.style.left=`${x-Y-6}px`;break}},le=z=>{z.preventDefault();const P=z.clientX-W;z.dataTransfer&&(z.dataTransfer.dropEffect="none"),P{this.positionClassName=se,this.domNode.className=`monaco-list-type-filter ${this.positionClassName}`,this.domNode.style.top="",this.domNode.style.left="",b.dispose(ee)};ne(),this.domNode.classList.remove(se),this.domNode.classList.add("dragging"),ee.add(b.toDisposable(()=>this.domNode.classList.remove("dragging"))),c.domEvent(document,"dragover")(le,null,ee),c.domEvent(this.domNode,"dragend")(X,null,ee),d.StaticDND.CurrentDragAndDropData=new d.DragAndDropData("vscode-ui"),ee.add(b.toDisposable(()=>d.StaticDND.CurrentDragAndDropData=void 0))}onDidSpliceModel(){!this._enabled||this.pattern.length===0||(this.tree.refilter(),this.render())}onDidChangeFilterOnType(){this.tree.updateOptions({filterOnType:this.filterOnTypeDomNode.checked}),this.tree.refilter(),this.tree.domFocus(),this.render(),this.updateFilterOnTypeTitleAndIcon()}updateFilterOnTypeTitleAndIcon(){this.filterOnType?(this.filterOnTypeDomNode.classList.remove(...t.treeFilterOnTypeOffIcon.classNamesArray),this.filterOnTypeDomNode.classList.add(...t.treeFilterOnTypeOnIcon.classNamesArray),this.filterOnTypeDomNode.title=a.localize(1,null)):(this.filterOnTypeDomNode.classList.remove(...t.treeFilterOnTypeOnIcon.classNamesArray),this.filterOnTypeDomNode.classList.add(...t.treeFilterOnTypeOffIcon.classNamesArray),this.filterOnTypeDomNode.title=a.localize(2,null))}render(){const R=this.filter.totalCount>0&&this.filter.matchCount===0;this.pattern&&this.tree.options.filterOnType&&R?(this.messageDomNode.textContent=a.localize(3,null),this._empty=!0):(this.messageDomNode.innerText="",this._empty=!1),this.domNode.classList.toggle("no-matches",R),this.domNode.title=a.localize(4,null,this.filter.matchCount,this.filter.totalCount),this.labelDomNode.textContent=this.pattern.length>16?"\u2026"+this.pattern.substr(this.pattern.length-16):this.pattern,this._onDidChangeEmptyState.fire(this._empty)}shouldAllowFocus(R){return!this.enabled||!this.pattern||this.filterOnType||this.filter.totalCount>0&&this.filter.matchCount<=1?!0:!o.FuzzyScore.isDefault(R.filterData)}dispose(){this._enabled&&(this.domNode.remove(),this.enabledDisposables.dispose(),this._enabled=!1,this.triggered=!1),this._onDidChangePattern.dispose(),b.dispose(this.disposables)}}function E(D){let R=C.TreeMouseEventTarget.Unknown;return M.hasParentWithClass(D.browserEvent.target,"monaco-tl-twistie","monaco-tl-row")?R=C.TreeMouseEventTarget.Twistie:M.hasParentWithClass(D.browserEvent.target,"monaco-tl-contents","monaco-tl-row")&&(R=C.TreeMouseEventTarget.Element),{browserEvent:D.browserEvent,element:D.element?D.element.element:null,target:R}}function T(D,R){R(D),D.children.forEach(W=>T(W,R))}class O{constructor(R){this.identityProvider=R,this.nodes=[],this._onDidChange=new w.Emitter,this.onDidChange=this._onDidChange.event}get nodeSet(){return this._nodeSet||(this._nodeSet=this.createNodeSet()),this._nodeSet}set(R,W){var x;!((x=W)===null||x===void 0?void 0:x.__forceEvent)&&g.equals(this.nodes,R)||this._set(R,!1,W)}_set(R,W,x){if(this.nodes=[...R],this.elements=void 0,this._nodeSet=void 0,!W){const K=this;this._onDidChange.fire({get elements(){return K.get()},browserEvent:x})}}get(){return this.elements||(this.elements=this.nodes.map(R=>R.element)),[...this.elements]}getNodes(){return this.nodes}has(R){return this.nodeSet.has(R)}onDidModelSplice({insertedNodes:R,deletedNodes:W}){if(!this.identityProvider){const ne=this.createNodeSet(),le=X=>ne.delete(X);W.forEach(X=>T(X,le)),this.set([...ne.values()]);return}const x=new Set,K=ne=>x.add(this.identityProvider.getId(ne.element).toString());W.forEach(ne=>T(ne,K));const Y=new Map,ee=ne=>Y.set(this.identityProvider.getId(ne.element).toString(),ne);R.forEach(ne=>T(ne,ee));const se=[];for(const ne of this.nodes){const le=this.identityProvider.getId(ne.element).toString();if(!x.has(le))se.push(ne);else{const z=Y.get(le);z&&se.push(z)}}this._set(se,!0)}createNodeSet(){const R=new Set;for(const W of this.nodes)R.add(W);return R}}class A extends N.MouseController{constructor(R,W){super(R);this.tree=W}onViewPointer(R){if(!(N.isInputElement(R.browserEvent.target)||N.isMonacoEditor(R.browserEvent.target))){const W=R.element;if(!W)return super.onViewPointer(R);if(this.isSelectionRangeChangeEvent(R)||this.isSelectionSingleChangeEvent(R))return super.onViewPointer(R);const x=R.browserEvent.target,K=x.classList.contains("monaco-tl-twistie")||x.classList.contains("monaco-icon-label")&&x.classList.contains("folder-icon")&&R.browserEvent.offsetX<16;let Y=!1;if(typeof this.tree.expandOnlyOnTwistieClick=="function"?Y=this.tree.expandOnlyOnTwistieClick(W.element):Y=!!this.tree.expandOnlyOnTwistieClick,Y&&!K&&R.browserEvent.detail!==2)return super.onViewPointer(R);if(!this.tree.expandOnDoubleClick&&R.browserEvent.detail===2)return super.onViewPointer(R);if(W.collapsible){const ee=this.tree.model,se=ee.getNodeLocation(W),ne=R.browserEvent.altKey;if(this.tree.setFocus([se]),ee.setCollapsed(se,void 0,ne),Y&&K)return}super.onViewPointer(R)}}onDoubleClick(R){R.browserEvent.target.classList.contains("monaco-tl-twistie")||!this.tree.expandOnDoubleClick||super.onDoubleClick(R)}}class B extends N.List{constructor(R,W,x,K,Y,ee,se){super(R,W,x,K,se);this.focusTrait=Y,this.selectionTrait=ee}createMouseController(R){return new A(this,R.tree)}splice(R,W,x=[]){if(super.splice(R,W,x),x.length!==0){const K=[],Y=[];x.forEach((ee,se)=>{this.focusTrait.has(ee)&&K.push(R+se),this.selectionTrait.has(ee)&&Y.push(R+se)}),K.length>0&&super.setFocus(g.distinctES6([...super.getFocus(),...K])),Y.length>0&&super.setSelection(g.distinctES6([...super.getSelection(),...Y]))}}setFocus(R,W,x=!1){super.setFocus(R,W),x||this.focusTrait.set(R.map(K=>this.element(K)),W)}setSelection(R,W,x=!1){super.setSelection(R,W),x||this.selectionTrait.set(R.map(K=>this.element(K)),W)}}class F{constructor(R,W,x,K,Y={}){this._options=Y,this.eventBufferer=new w.EventBufferer,this.disposables=new b.DisposableStore,this._onWillRefilter=new w.Emitter,this.onWillRefilter=this._onWillRefilter.event,this._onDidUpdateOptions=new w.Emitter;const ee=new f(x),se=new w.Relay,ne=new w.Relay,le=new y(ne.event);this.renderers=K.map(P=>new L(P,()=>this.model,se.event,le,Y));for(let P of this.renderers)this.disposables.add(P);let X;Y.keyboardNavigationLabelProvider&&(X=new I(this,Y.keyboardNavigationLabelProvider,Y.filter),Y=Object.assign(Object.assign({},Y),{filter:X}),this.disposables.add(X)),this.focus=new O(Y.identityProvider),this.selection=new O(Y.identityProvider),this.view=new B(R,W,ee,this.renderers,this.focus,this.selection,Object.assign(Object.assign({},_(()=>this.model,Y)),{tree:this})),this.model=this.createModel(R,this.view,Y),se.input=this.model.onDidChangeCollapseState;const z=w.Event.forEach(this.model.onDidSplice,P=>{this.eventBufferer.bufferEvents(()=>{this.focus.onDidModelSplice(P),this.selection.onDidModelSplice(P)})});if(z(()=>null,null,this.disposables),ne.input=w.Event.chain(w.Event.any(z,this.focus.onDidChange,this.selection.onDidChange)).debounce(()=>null,0).map(()=>{const P=new Set;for(const V of this.focus.getNodes())P.add(V);for(const V of this.selection.getNodes())P.add(V);return[...P.values()]}).event,Y.keyboardSupport!==!1){const P=w.Event.chain(this.view.onKeyDown).filter(V=>!N.isInputElement(V.target)).map(V=>new S.StandardKeyboardEvent(V));P.filter(V=>V.keyCode===15).on(this.onLeftArrow,this,this.disposables),P.filter(V=>V.keyCode===17).on(this.onRightArrow,this,this.disposables),P.filter(V=>V.keyCode===10).on(this.onSpace,this,this.disposables)}if(Y.keyboardNavigationLabelProvider){const P=Y.keyboardNavigationDelegate||N.DefaultKeyboardNavigationDelegate;this.typeFilterController=new k(this,this.model,this.view,X,P),this.focusNavigationFilter=V=>this.typeFilterController.shouldAllowFocus(V),this.disposables.add(this.typeFilterController)}this.styleElement=M.createStyleSheet(this.view.getHTMLElement()),this.getHTMLElement().classList.toggle("always",this._options.renderIndentGuides===v.Always)}get onDidChangeFocus(){return this.eventBufferer.wrapEvent(this.focus.onDidChange)}get onDidChangeSelection(){return this.eventBufferer.wrapEvent(this.selection.onDidChange)}get onMouseDblClick(){return w.Event.map(this.view.onMouseDblClick,E)}get onPointer(){return w.Event.map(this.view.onPointer,E)}get onDidFocus(){return this.view.onDidFocus}get onDidChangeCollapseState(){return this.model.onDidChangeCollapseState}get expandOnDoubleClick(){return typeof this._options.expandOnDoubleClick=="undefined"?!0:this._options.expandOnDoubleClick}get expandOnlyOnTwistieClick(){return typeof this._options.expandOnlyOnTwistieClick=="undefined"?!0:this._options.expandOnlyOnTwistieClick}get onDidDispose(){return this.view.onDidDispose}updateOptions(R={}){this._options=Object.assign(Object.assign({},this._options),R);for(const W of this.renderers)W.updateOptions(R);this.view.updateOptions({enableKeyboardNavigation:this._options.simpleKeyboardNavigation,automaticKeyboardNavigation:this._options.automaticKeyboardNavigation,smoothScrolling:this._options.smoothScrolling,horizontalScrolling:this._options.horizontalScrolling}),this.typeFilterController&&this.typeFilterController.updateOptions(this._options),this._onDidUpdateOptions.fire(this._options),this.getHTMLElement().classList.toggle("always",this._options.renderIndentGuides===v.Always)}get options(){return this._options}getHTMLElement(){return this.view.getHTMLElement()}get scrollTop(){return this.view.scrollTop}set scrollTop(R){this.view.scrollTop=R}domFocus(){this.view.domFocus()}layout(R,W){this.view.layout(R,W)}style(R){const W=`.${this.view.domId}`,x=[];R.treeIndentGuidesStroke&&(x.push(`.monaco-list${W}:hover .monaco-tl-indent > .indent-guide, .monaco-list${W}.always .monaco-tl-indent > .indent-guide { border-color: ${R.treeIndentGuidesStroke.transparent(.4)}; }`),x.push(`.monaco-list${W} .monaco-tl-indent > .indent-guide.active { border-color: ${R.treeIndentGuidesStroke}; }`)),this.styleElement.textContent=x.join(` +`),this.view.style(R)}collapse(R,W=!1){return this.model.setCollapsed(R,!0,W)}expand(R,W=!1){return this.model.setCollapsed(R,!1,W)}isCollapsible(R){return this.model.isCollapsible(R)}setCollapsible(R,W){return this.model.setCollapsible(R,W)}isCollapsed(R){return this.model.isCollapsed(R)}refilter(){this._onWillRefilter.fire(void 0),this.model.refilter()}setSelection(R,W){const x=R.map(Y=>this.model.getNode(Y));this.selection.set(x,W);const K=R.map(Y=>this.model.getListIndex(Y)).filter(Y=>Y>-1);this.view.setSelection(K,W,!0)}getSelection(){return this.selection.get()}setFocus(R,W){const x=R.map(Y=>this.model.getNode(Y));this.focus.set(x,W);const K=R.map(Y=>this.model.getListIndex(Y)).filter(Y=>Y>-1);this.view.setFocus(K,W,!0)}focusNext(R=1,W=!1,x,K=this.focusNavigationFilter){this.view.focusNext(R,W,x,K)}getFocus(){return this.focus.get()}reveal(R,W){this.model.expandTo(R);const x=this.model.getListIndex(R);x!==-1&&this.view.reveal(x,W)}getRelativeTop(R){const W=this.model.getListIndex(R);return W===-1?null:this.view.getRelativeTop(W)}onLeftArrow(R){R.preventDefault(),R.stopPropagation();const W=this.view.getFocusedElements();if(W.length!==0){const x=W[0],K=this.model.getNodeLocation(x);if(!this.model.setCollapsed(K,!0)){const ee=this.model.getParentNodeLocation(K);if(!ee)return;const se=this.model.getListIndex(ee);this.view.reveal(se),this.view.setFocus([se])}}}onRightArrow(R){R.preventDefault(),R.stopPropagation();const W=this.view.getFocusedElements();if(W.length!==0){const x=W[0],K=this.model.getNodeLocation(x);if(!this.model.setCollapsed(K,!1)){if(!x.children.some(ne=>ne.visible))return;const[ee]=this.view.getFocus(),se=ee+1;this.view.reveal(se),this.view.setFocus([se])}}}onSpace(R){R.preventDefault(),R.stopPropagation();const W=this.view.getFocusedElements();if(W.length!==0){const x=W[0],K=this.model.getNodeLocation(x),Y=R.browserEvent.altKey;this.model.setCollapsed(K,void 0,Y)}}dispose(){b.dispose(this.disposables),this.view.dispose()}}e.AbstractTree=F}),define(Q[427],J([0,1,176,155]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DataTree=void 0;class M extends b.AbstractTree{constructor(S,C,d,g,p,c={}){super(S,C,d,g,c);this.user=S,this.dataSource=p,this.identityProvider=c.identityProvider}createModel(S,C,d){return new N.ObjectTreeModel(S,C,d)}}e.DataTree=M}),define(Q[234],J([0,1,54,176,155,284,99]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CompressibleObjectTree=e.ObjectTree=void 0;class C extends N.AbstractTree{constructor(o,s,a,u,r={}){super(o,s,a,u,r)}get onDidChangeCollapseState(){return this.model.onDidChangeCollapseState}setChildren(o,s=b.Iterable.empty(),a){this.model.setChildren(o,s,a)}rerender(o){if(o===void 0){this.view.rerender();return}this.model.rerender(o)}hasElement(o){return this.model.has(o)}createModel(o,s,a){return new M.ObjectTreeModel(o,s,a)}}e.ObjectTree=C;class d{constructor(o,s){this._compressedTreeNodeProvider=o,this.renderer=s,this.templateId=s.templateId,s.onDidChangeTwistieState&&(this.onDidChangeTwistieState=s.onDidChangeTwistieState)}get compressedTreeNodeProvider(){return this._compressedTreeNodeProvider()}renderTemplate(o){const s=this.renderer.renderTemplate(o);return{compressedTreeNode:void 0,data:s}}renderElement(o,s,a,u){const r=this.compressedTreeNodeProvider.getCompressedTreeNode(o.element);r.element.elements.length===1?(a.compressedTreeNode=void 0,this.renderer.renderElement(o,s,a.data,u)):(a.compressedTreeNode=r,this.renderer.renderCompressedElements(r,s,a.data,u))}disposeElement(o,s,a,u){a.compressedTreeNode?this.renderer.disposeCompressedElements&&this.renderer.disposeCompressedElements(a.compressedTreeNode,s,a.data,u):this.renderer.disposeElement&&this.renderer.disposeElement(o,s,a.data,u)}disposeTemplate(o){this.renderer.disposeTemplate(o.data)}renderTwistie(o,s){return this.renderer.renderTwistie?this.renderer.renderTwistie(o,s):!1}}Me([S.memoize],d.prototype,"compressedTreeNodeProvider",null);function g(c,o){return o&&Object.assign(Object.assign({},o),{keyboardNavigationLabelProvider:o.keyboardNavigationLabelProvider&&{getKeyboardNavigationLabel(s){let a;try{a=c().getCompressedTreeNode(s)}catch(u){return o.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(s)}return a.element.elements.length===1?o.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(s):o.keyboardNavigationLabelProvider.getCompressedNodeKeyboardNavigationLabel(a.element.elements)}}})}class p extends C{constructor(o,s,a,u,r={}){const i=()=>this,n=u.map(t=>new d(i,t));super(o,s,a,n,g(i,r))}setChildren(o,s=b.Iterable.empty(),a){this.model.setChildren(o,s,a)}createModel(o,s,a){return new w.CompressibleObjectTreeModel(o,s,a)}updateOptions(o={}){super.updateOptions(o),typeof o.compressionEnabled!="undefined"&&this.model.setCompressionEnabled(o.compressionEnabled)}getCompressedTreeNode(o=null){return this.model.getCompressedTreeNode(o)}}e.CompressibleObjectTree=p}),define(Q[428],J([0,1,176,234,98,2,6,15,54,161,12,154,197]),function(q,e,b,N,M,w,S,C,d,g,p,c,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CompressibleAsyncDataTree=e.AsyncDataTree=void 0;function s(T){return Object.assign(Object.assign({},T),{children:[],refreshPromise:void 0,stale:!0,slow:!1,collapsedByDefault:void 0})}function a(T,O){return O.parent?O.parent===T?!0:a(T,O.parent):!1}function u(T,O){return T===O||a(T,O)||a(O,T)}class r{constructor(O){this.node=O}get element(){return this.node.element.element}get children(){return this.node.children.map(O=>new r(O))}get depth(){return this.node.depth}get visibleChildrenCount(){return this.node.visibleChildrenCount}get visibleChildIndex(){return this.node.visibleChildIndex}get collapsible(){return this.node.collapsible}get collapsed(){return this.node.collapsed}get visible(){return this.node.visible}get filterData(){return this.node.filterData}}class i{constructor(O,A,B){this.renderer=O,this.nodeMapper=A,this.onDidChangeTwistieState=B,this.renderedNodes=new Map,this.templateId=O.templateId}renderTemplate(O){return{templateData:this.renderer.renderTemplate(O)}}renderElement(O,A,B,F){this.renderer.renderElement(this.nodeMapper.map(O),A,B.templateData,F)}renderTwistie(O,A){return O.slow?(A.classList.add(...o.treeItemLoadingIcon.classNamesArray),!0):(A.classList.remove(...o.treeItemLoadingIcon.classNamesArray),!1)}disposeElement(O,A,B,F){this.renderer.disposeElement&&this.renderer.disposeElement(this.nodeMapper.map(O),A,B.templateData,F)}disposeTemplate(O){this.renderer.disposeTemplate(O.templateData)}dispose(){this.renderedNodes.clear()}}function n(T){return{browserEvent:T.browserEvent,elements:T.elements.map(O=>O.element)}}function t(T){return{browserEvent:T.browserEvent,element:T.element&&T.element.element,target:T.target}}class l extends g.ElementsDragAndDropData{constructor(O){super(O.elements.map(A=>A.element));this.data=O}}function h(T){return T instanceof g.ElementsDragAndDropData?new l(T):T}class m{constructor(O){this.dnd=O}getDragURI(O){return this.dnd.getDragURI(O.element)}getDragLabel(O,A){if(this.dnd.getDragLabel)return this.dnd.getDragLabel(O.map(B=>B.element),A)}onDragStart(O,A){this.dnd.onDragStart&&this.dnd.onDragStart(h(O),A)}onDragOver(O,A,B,F,D=!0){return this.dnd.onDragOver(h(O),A&&A.element,B,F)}drop(O,A,B,F){this.dnd.drop(h(O),A&&A.element,B,F)}onDragEnd(O){this.dnd.onDragEnd&&this.dnd.onDragEnd(O)}}function _(T){return T&&Object.assign(Object.assign({},T),{collapseByDefault:!0,identityProvider:T.identityProvider&&{getId(O){return T.identityProvider.getId(O.element)}},dnd:T.dnd&&new m(T.dnd),multipleSelectionController:T.multipleSelectionController&&{isSelectionSingleChangeEvent(O){return T.multipleSelectionController.isSelectionSingleChangeEvent(Object.assign(Object.assign({},O),{element:O.element}))},isSelectionRangeChangeEvent(O){return T.multipleSelectionController.isSelectionRangeChangeEvent(Object.assign(Object.assign({},O),{element:O.element}))}},accessibilityProvider:T.accessibilityProvider&&Object.assign(Object.assign({},T.accessibilityProvider),{getPosInSet:void 0,getSetSize:void 0,getRole:T.accessibilityProvider.getRole?O=>T.accessibilityProvider.getRole(O.element):()=>"treeitem",isChecked:T.accessibilityProvider.isChecked?O=>{var A;return!!((A=T.accessibilityProvider)===null||A===void 0?void 0:A.isChecked(O.element))}:void 0,getAriaLabel(O){return T.accessibilityProvider.getAriaLabel(O.element)},getWidgetAriaLabel(){return T.accessibilityProvider.getWidgetAriaLabel()},getWidgetRole:T.accessibilityProvider.getWidgetRole?()=>T.accessibilityProvider.getWidgetRole():()=>"tree",getAriaLevel:T.accessibilityProvider.getAriaLevel&&(O=>T.accessibilityProvider.getAriaLevel(O.element)),getActiveDescendantId:T.accessibilityProvider.getActiveDescendantId&&(O=>T.accessibilityProvider.getActiveDescendantId(O.element))}),filter:T.filter&&{filter(O,A){return T.filter.filter(O.element,A)}},keyboardNavigationLabelProvider:T.keyboardNavigationLabelProvider&&Object.assign(Object.assign({},T.keyboardNavigationLabelProvider),{getKeyboardNavigationLabel(O){return T.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(O.element)}}),sorter:void 0,expandOnlyOnTwistieClick:typeof T.expandOnlyOnTwistieClick=="undefined"?void 0:typeof T.expandOnlyOnTwistieClick!="function"?T.expandOnlyOnTwistieClick:O=>T.expandOnlyOnTwistieClick(O.element),additionalScrollHeight:T.additionalScrollHeight})}function f(T,O){O(T),T.children.forEach(A=>f(A,O))}class v{constructor(O,A,B,F,D,R={}){this.user=O,this.dataSource=D,this.nodes=new Map,this.subTreeRefreshPromises=new Map,this.refreshPromises=new Map,this._onDidRender=new S.Emitter,this._onDidChangeNodeSlowState=new S.Emitter,this.nodeMapper=new M.WeakMapper(W=>new r(W)),this.disposables=new w.DisposableStore,this.identityProvider=R.identityProvider,this.autoExpandSingleChildren=typeof R.autoExpandSingleChildren=="undefined"?!1:R.autoExpandSingleChildren,this.sorter=R.sorter,this.collapseByDefault=R.collapseByDefault,this.tree=this.createTree(O,A,B,F,R),this.root=s({element:void 0,parent:null,hasChildren:!0}),this.identityProvider&&(this.root=Object.assign(Object.assign({},this.root),{id:null})),this.nodes.set(null,this.root),this.tree.onDidChangeCollapseState(this._onDidChangeCollapseState,this,this.disposables)}get onDidChangeFocus(){return S.Event.map(this.tree.onDidChangeFocus,n)}get onDidChangeSelection(){return S.Event.map(this.tree.onDidChangeSelection,n)}get onMouseDblClick(){return S.Event.map(this.tree.onMouseDblClick,t)}get onPointer(){return S.Event.map(this.tree.onPointer,t)}get onDidFocus(){return this.tree.onDidFocus}get onDidDispose(){return this.tree.onDidDispose}createTree(O,A,B,F,D){const R=new b.ComposedTreeDelegate(B),W=F.map(K=>new i(K,this.nodeMapper,this._onDidChangeNodeSlowState.event)),x=_(D)||{};return new N.ObjectTree(O,A,R,W,x)}updateOptions(O={}){this.tree.updateOptions(O)}getHTMLElement(){return this.tree.getHTMLElement()}get scrollTop(){return this.tree.scrollTop}set scrollTop(O){this.tree.scrollTop=O}domFocus(){this.tree.domFocus()}layout(O,A){this.tree.layout(O,A)}style(O){this.tree.style(O)}getInput(){return this.root.element}setInput(O,A){return Ie(this,void 0,void 0,function*(){this.refreshPromises.forEach(F=>F.cancel()),this.refreshPromises.clear(),this.root.element=O;const B=A&&{viewState:A,focus:[],selection:[]};yield this._updateChildren(O,!0,!1,B),B&&(this.tree.setFocus(B.focus),this.tree.setSelection(B.selection)),A&&typeof A.scrollTop=="number"&&(this.scrollTop=A.scrollTop)})}_updateChildren(O=this.root.element,A=!0,B=!1,F,D){return Ie(this,void 0,void 0,function*(){if(typeof this.root.element=="undefined")throw new M.TreeError(this.user,"Tree input not set");this.root.refreshPromise&&(yield this.root.refreshPromise,yield S.Event.toPromise(this._onDidRender.event));const R=this.getDataNode(O);if(yield this.refreshAndRenderNode(R,A,F,D),B)try{this.tree.rerender(R)}catch(W){}})}rerender(O){if(O===void 0||O===this.root.element){this.tree.rerender();return}const A=this.getDataNode(O);this.tree.rerender(A)}collapse(O,A=!1){const B=this.getDataNode(O);return this.tree.collapse(B===this.root?null:B,A)}expand(O,A=!1){return Ie(this,void 0,void 0,function*(){if(typeof this.root.element=="undefined")throw new M.TreeError(this.user,"Tree input not set");this.root.refreshPromise&&(yield this.root.refreshPromise,yield S.Event.toPromise(this._onDidRender.event));const B=this.getDataNode(O);if(this.tree.hasElement(B)&&!this.tree.isCollapsible(B)||(B.refreshPromise&&(yield this.root.refreshPromise,yield S.Event.toPromise(this._onDidRender.event)),B!==this.root&&!B.refreshPromise&&!this.tree.isCollapsed(B)))return!1;const F=this.tree.expand(B===this.root?null:B,A);return B.refreshPromise&&(yield this.root.refreshPromise,yield S.Event.toPromise(this._onDidRender.event)),F})}setSelection(O,A){const B=O.map(F=>this.getDataNode(F));this.tree.setSelection(B,A)}getSelection(){return this.tree.getSelection().map(A=>A.element)}setFocus(O,A){const B=O.map(F=>this.getDataNode(F));this.tree.setFocus(B,A)}getFocus(){return this.tree.getFocus().map(A=>A.element)}reveal(O,A){this.tree.reveal(this.getDataNode(O),A)}getDataNode(O){const A=this.nodes.get(O===this.root.element?null:O);if(!A)throw new M.TreeError(this.user,`Data tree node not found: ${O}`);return A}refreshAndRenderNode(O,A,B,F){return Ie(this,void 0,void 0,function*(){yield this.refreshNode(O,A,B),this.render(O,B,F)})}refreshNode(O,A,B){return Ie(this,void 0,void 0,function*(){let F;return this.subTreeRefreshPromises.forEach((D,R)=>{!F&&u(R,O)&&(F=D.then(()=>this.refreshNode(O,A,B)))}),F||this.doRefreshSubTree(O,A,B)})}doRefreshSubTree(O,A,B){return Ie(this,void 0,void 0,function*(){let F;O.refreshPromise=new Promise(D=>F=D),this.subTreeRefreshPromises.set(O,O.refreshPromise),O.refreshPromise.finally(()=>{O.refreshPromise=void 0,this.subTreeRefreshPromises.delete(O)});try{const D=yield this.doRefreshNode(O,A,B);O.stale=!1,yield C.Promises.settled(D.map(R=>this.doRefreshSubTree(R,A,B)))}finally{F()}})}doRefreshNode(O,A,B){return Ie(this,void 0,void 0,function*(){O.hasChildren=!!this.dataSource.hasChildren(O.element);let F;if(!O.hasChildren)F=Promise.resolve(d.Iterable.empty());else{const D=C.timeout(800);D.then(()=>{O.slow=!0,this._onDidChangeNodeSlowState.fire(O)},R=>null),F=this.doGetChildren(O).finally(()=>D.cancel())}try{const D=yield F;return this.setChildren(O,D,A,B)}catch(D){if(O!==this.root&&this.tree.hasElement(O)&&this.tree.collapse(O),p.isPromiseCanceledError(D))return[];throw D}finally{O.slow&&(O.slow=!1,this._onDidChangeNodeSlowState.fire(O))}})}doGetChildren(O){let A=this.refreshPromises.get(O);return A||(A=C.createCancelablePromise(()=>Ie(this,void 0,void 0,function*(){const B=yield this.dataSource.getChildren(O.element);return this.processChildren(B)})),this.refreshPromises.set(O,A),A.finally(()=>{this.refreshPromises.delete(O)}))}_onDidChangeCollapseState({node:O,deep:A}){O.element!==null&&!O.collapsed&&O.element.stale&&(A?this.collapse(O.element.element):this.refreshAndRenderNode(O.element,!1).catch(p.onUnexpectedError))}setChildren(O,A,B,F){const D=[...A];if(O.children.length===0&&D.length===0)return[];const R=new Map,W=new Map;for(const Y of O.children)if(R.set(Y.element,Y),this.identityProvider){const ee=this.tree.isCollapsed(Y);W.set(Y.id,{node:Y,collapsed:ee})}const x=[],K=D.map(Y=>{const ee=!!this.dataSource.hasChildren(Y);if(!this.identityProvider){const X=s({element:Y,parent:O,hasChildren:ee});return ee&&this.collapseByDefault&&!this.collapseByDefault(Y)&&(X.collapsedByDefault=!1,x.push(X)),X}const se=this.identityProvider.getId(Y).toString(),ne=W.get(se);if(ne){const X=ne.node;return R.delete(X.element),this.nodes.delete(X.element),this.nodes.set(Y,X),X.element=Y,X.hasChildren=ee,B?ne.collapsed?(X.children.forEach(z=>f(z,P=>this.nodes.delete(P.element))),X.children.splice(0,X.children.length),X.stale=!0):x.push(X):ee&&this.collapseByDefault&&!this.collapseByDefault(Y)&&(X.collapsedByDefault=!1,x.push(X)),X}const le=s({element:Y,parent:O,id:se,hasChildren:ee});return F&&F.viewState.focus&&F.viewState.focus.indexOf(se)>-1&&F.focus.push(le),F&&F.viewState.selection&&F.viewState.selection.indexOf(se)>-1&&F.selection.push(le),F&&F.viewState.expanded&&F.viewState.expanded.indexOf(se)>-1?x.push(le):ee&&this.collapseByDefault&&!this.collapseByDefault(Y)&&(le.collapsedByDefault=!1,x.push(le)),le});for(const Y of R.values())f(Y,ee=>this.nodes.delete(ee.element));for(const Y of K)this.nodes.set(Y.element,Y);return O.children.splice(0,O.children.length,...K),O!==this.root&&this.autoExpandSingleChildren&&K.length===1&&x.length===0&&(K[0].collapsedByDefault=!1,x.push(K[0])),x}render(O,A,B){const F=O.children.map(R=>this.asTreeElement(R,A)),D=B&&Object.assign(Object.assign({},B),{diffIdentityProvider:B.diffIdentityProvider&&{getId(R){return B.diffIdentityProvider.getId(R.element)}}});this.tree.setChildren(O===this.root?null:O,F,D),O!==this.root&&this.tree.setCollapsible(O,O.hasChildren),this._onDidRender.fire()}asTreeElement(O,A){if(O.stale)return{element:O,collapsible:O.hasChildren,collapsed:!0};let B;return A&&A.viewState.expanded&&O.id&&A.viewState.expanded.indexOf(O.id)>-1?B=!1:B=O.collapsedByDefault,O.collapsedByDefault=void 0,{element:O,children:O.hasChildren?d.Iterable.map(O.children,F=>this.asTreeElement(F,A)):[],collapsible:O.hasChildren,collapsed:B}}processChildren(O){return this.sorter&&(O=[...O].sort(this.sorter.compare.bind(this.sorter))),O}dispose(){this.disposables.dispose()}}e.AsyncDataTree=v;class y{constructor(O){this.node=O}get element(){return{elements:this.node.element.elements.map(O=>O.element),incompressible:this.node.element.incompressible}}get children(){return this.node.children.map(O=>new y(O))}get depth(){return this.node.depth}get visibleChildrenCount(){return this.node.visibleChildrenCount}get visibleChildIndex(){return this.node.visibleChildIndex}get collapsible(){return this.node.collapsible}get collapsed(){return this.node.collapsed}get visible(){return this.node.visible}get filterData(){return this.node.filterData}}class L{constructor(O,A,B,F){this.renderer=O,this.nodeMapper=A,this.compressibleNodeMapperProvider=B,this.onDidChangeTwistieState=F,this.renderedNodes=new Map,this.disposables=[],this.templateId=O.templateId}renderTemplate(O){return{templateData:this.renderer.renderTemplate(O)}}renderElement(O,A,B,F){this.renderer.renderElement(this.nodeMapper.map(O),A,B.templateData,F)}renderCompressedElements(O,A,B,F){this.renderer.renderCompressedElements(this.compressibleNodeMapperProvider().map(O),A,B.templateData,F)}renderTwistie(O,A){return O.slow?(A.classList.add(...o.treeItemLoadingIcon.classNamesArray),!0):(A.classList.remove(...o.treeItemLoadingIcon.classNamesArray),!1)}disposeElement(O,A,B,F){this.renderer.disposeElement&&this.renderer.disposeElement(this.nodeMapper.map(O),A,B.templateData,F)}disposeCompressedElements(O,A,B,F){this.renderer.disposeCompressedElements&&this.renderer.disposeCompressedElements(this.compressibleNodeMapperProvider().map(O),A,B.templateData,F)}disposeTemplate(O){this.renderer.disposeTemplate(O.templateData)}dispose(){this.renderedNodes.clear(),this.disposables=w.dispose(this.disposables)}}function I(T){const O=T&&_(T);return O&&Object.assign(Object.assign({},O),{keyboardNavigationLabelProvider:O.keyboardNavigationLabelProvider&&Object.assign(Object.assign({},O.keyboardNavigationLabelProvider),{getCompressedNodeKeyboardNavigationLabel(A){return T.keyboardNavigationLabelProvider.getCompressedNodeKeyboardNavigationLabel(A.map(B=>B.element))}})})}class k extends v{constructor(O,A,B,F,D,R,W={}){super(O,A,B,D,R,W);this.compressionDelegate=F,this.compressibleNodeMapper=new M.WeakMapper(x=>new y(x)),this.filter=W.filter}createTree(O,A,B,F,D){const R=new b.ComposedTreeDelegate(B),W=F.map(K=>new L(K,this.nodeMapper,()=>this.compressibleNodeMapper,this._onDidChangeNodeSlowState.event)),x=I(D)||{};return new N.CompressibleObjectTree(O,A,R,W,x)}asTreeElement(O,A){return Object.assign({incompressible:this.compressionDelegate.isIncompressible(O.element)},super.asTreeElement(O,A))}updateOptions(O={}){this.tree.updateOptions(O)}render(O,A){if(!this.identityProvider)return super.render(O,A);const B=se=>this.identityProvider.getId(se).toString(),F=se=>{const ne=new Set;for(const le of se){const X=this.tree.getCompressedTreeNode(le===this.root?null:le);if(!!X.element)for(const z of X.element.elements)ne.add(B(z.element))}return ne},D=F(this.tree.getSelection()),R=F(this.tree.getFocus());super.render(O,A);const W=this.getSelection();let x=!1;const K=this.getFocus();let Y=!1;const ee=se=>{const ne=se.element;if(ne)for(let le=0;le{const B=this.filter.filter(A,1),F=E(B);if(F===2)throw new Error("Recursive tree visibility not supported in async data compressed trees");return F===1})),super.processChildren(O)}}e.CompressibleAsyncDataTree=k;function E(T){return typeof T=="boolean"?T?1:0:c.isFilterResult(T)?c.getVisibleState(T.visibility):c.getVisibleState(T)}}),define(Q[429],J([4,5]),function(q,e){return q.create("vs/base/common/actions",e)}),define(Q[48],J([0,1,429,2,6]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.EmptySubmenuAction=e.SubmenuAction=e.Separator=e.ActionRunner=e.Action=void 0;class w extends N.Disposable{constructor(c,o="",s="",a=!0,u){super();this._onDidChange=this._register(new M.Emitter),this.onDidChange=this._onDidChange.event,this._enabled=!0,this._checked=!1,this._id=c,this._label=o,this._cssClass=s,this._enabled=a,this._actionCallback=u}get id(){return this._id}get label(){return this._label}set label(c){this._setLabel(c)}_setLabel(c){this._label!==c&&(this._label=c,this._onDidChange.fire({label:c}))}get tooltip(){return this._tooltip||""}set tooltip(c){this._setTooltip(c)}_setTooltip(c){this._tooltip!==c&&(this._tooltip=c,this._onDidChange.fire({tooltip:c}))}get class(){return this._cssClass}set class(c){this._setClass(c)}_setClass(c){this._cssClass!==c&&(this._cssClass=c,this._onDidChange.fire({class:c}))}get enabled(){return this._enabled}set enabled(c){this._setEnabled(c)}_setEnabled(c){this._enabled!==c&&(this._enabled=c,this._onDidChange.fire({enabled:c}))}get checked(){return this._checked}set checked(c){this._setChecked(c)}_setChecked(c){this._checked!==c&&(this._checked=c,this._onDidChange.fire({checked:c}))}run(c,o){return this._actionCallback?this._actionCallback(c):Promise.resolve(!0)}}e.Action=w;class S extends N.Disposable{constructor(){super(...arguments);this._onBeforeRun=this._register(new M.Emitter),this.onBeforeRun=this._onBeforeRun.event,this._onDidRun=this._register(new M.Emitter),this.onDidRun=this._onDidRun.event}run(c,o){return Ie(this,void 0,void 0,function*(){if(!c.enabled)return Promise.resolve(null);this._onBeforeRun.fire({action:c});try{const s=yield this.runAction(c,o);this._onDidRun.fire({action:c,result:s})}catch(s){this._onDidRun.fire({action:c,error:s})}})}runAction(c,o){const s=o?c.run(o):c.run();return Promise.resolve(s)}}e.ActionRunner=S;class C extends w{constructor(c){super(C.ID,c,c?"separator text":"separator");this.checked=!1,this.enabled=!1}}e.Separator=C,C.ID="vs.actions.separator";class d{constructor(c,o,s,a){this.tooltip="",this.enabled=!0,this.checked=!1,this.id=c,this.label=o,this.class=a,this._actions=s}dispose(){}get actions(){return this._actions}run(){return Ie(this,void 0,void 0,function*(){})}}e.SubmenuAction=d;class g extends w{constructor(){super(g.ID,b.localize(0,null),void 0,!1)}}e.EmptySubmenuAction=g,g.ID="vs.actions.empty"}),define(Q[112],J([0,1,17,418,2,48,20,60,149,35,7,203]),function(q,e,b,N,M,w,S,C,d,g,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ActionViewItem=e.BaseActionViewItem=void 0;class c extends M.Disposable{constructor(a,u,r={}){super();this.options=r,this._context=a||this,this._action=u,u instanceof w.Action&&this._register(u.onDidChange(i=>{!this.element||this.handleActionChangeEvent(i)}))}handleActionChangeEvent(a){a.enabled!==void 0&&this.updateEnabled(),a.checked!==void 0&&this.updateChecked(),a.class!==void 0&&this.updateClass(),a.label!==void 0&&(this.updateLabel(),this.updateTooltip()),a.tooltip!==void 0&&this.updateTooltip()}get actionRunner(){return this._actionRunner||(this._actionRunner=this._register(new w.ActionRunner)),this._actionRunner}set actionRunner(a){this._actionRunner=a}getAction(){return this._action}isEnabled(){return this._action.enabled}setActionContext(a){this._context=a}render(a){const u=this.element=a;this._register(C.Gesture.addTarget(a));const r=this.options&&this.options.draggable;r&&(a.draggable=!0,g.isFirefox&&this._register(p.addDisposableListener(a,p.EventType.DRAG_START,i=>{var n;return(n=i.dataTransfer)===null||n===void 0?void 0:n.setData(d.DataTransfers.TEXT,this._action.label)}))),this._register(p.addDisposableListener(u,C.EventType.Tap,i=>this.onClick(i))),this._register(p.addDisposableListener(u,p.EventType.MOUSE_DOWN,i=>{r||p.EventHelper.stop(i,!0),this._action.enabled&&i.button===0&&u.classList.add("active")})),b.isMacintosh&&this._register(p.addDisposableListener(u,p.EventType.CONTEXT_MENU,i=>{i.button===0&&i.ctrlKey===!0&&this.onClick(i)})),this._register(p.addDisposableListener(u,p.EventType.CLICK,i=>{p.EventHelper.stop(i,!0),this.options&&this.options.isMenu||b.setImmediate(()=>this.onClick(i))})),this._register(p.addDisposableListener(u,p.EventType.DBLCLICK,i=>{p.EventHelper.stop(i,!0)})),[p.EventType.MOUSE_UP,p.EventType.MOUSE_OUT].forEach(i=>{this._register(p.addDisposableListener(u,i,n=>{p.EventHelper.stop(n),u.classList.remove("active")}))})}onClick(a){var u;p.EventHelper.stop(a,!0);const r=S.isUndefinedOrNull(this._context)?((u=this.options)===null||u===void 0?void 0:u.useEventAsContext)?a:void 0:this._context;this.actionRunner.run(this._action,r)}focus(){this.element&&(this.element.tabIndex=0,this.element.focus(),this.element.classList.add("focused"))}blur(){this.element&&(this.element.blur(),this.element.tabIndex=-1,this.element.classList.remove("focused"))}setFocusable(a){this.element&&(this.element.tabIndex=a?0:-1)}get trapsArrowNavigation(){return!1}updateEnabled(){}updateLabel(){}updateTooltip(){}updateClass(){}updateChecked(){}dispose(){this.element&&(this.element.remove(),this.element=void 0),super.dispose()}}e.BaseActionViewItem=c;class o extends c{constructor(a,u,r={}){super(a,u,r);this.options=r,this.options.icon=r.icon!==void 0?r.icon:!1,this.options.label=r.label!==void 0?r.label:!0,this.cssClass=""}render(a){super.render(a),this.element&&(this.label=p.append(this.element,p.$("a.action-label"))),this.label&&(this._action.id===w.Separator.ID?this.label.setAttribute("role","presentation"):this.options.isMenu?this.label.setAttribute("role","menuitem"):this.label.setAttribute("role","button")),this.options.label&&this.options.keybinding&&this.element&&(p.append(this.element,p.$("span.keybinding")).textContent=this.options.keybinding),this.updateClass(),this.updateLabel(),this.updateTooltip(),this.updateEnabled(),this.updateChecked()}focus(){this.label&&(this.label.tabIndex=0,this.label.focus())}blur(){this.label&&(this.label.tabIndex=-1)}setFocusable(a){this.label&&(this.label.tabIndex=a?0:-1)}updateLabel(){this.options.label&&this.label&&(this.label.textContent=this.getAction().label)}updateTooltip(){let a=null;this.getAction().tooltip?a=this.getAction().tooltip:!this.options.label&&this.getAction().label&&this.options.icon&&(a=this.getAction().label,this.options.keybinding&&(a=N.localize(0,null,a,this.options.keybinding))),a&&this.label&&(this.label.title=a)}updateClass(){this.cssClass&&this.label&&this.label.classList.remove(...this.cssClass.split(" ")),this.options.icon?(this.cssClass=this.getAction().class,this.label&&(this.label.classList.add("codicon"),this.cssClass&&this.label.classList.add(...this.cssClass.split(" "))),this.updateEnabled()):this.label&&this.label.classList.remove("codicon")}updateEnabled(){this.getAction().enabled?(this.label&&(this.label.removeAttribute("aria-disabled"),this.label.classList.remove("disabled")),this.element&&this.element.classList.remove("disabled")):(this.label&&(this.label.setAttribute("aria-disabled","true"),this.label.classList.add("disabled")),this.element&&this.element.classList.add("disabled"))}updateChecked(){this.label&&(this.getAction().checked?this.label.classList.add("checked"):this.label.classList.remove("checked"))}}e.ActionViewItem=o}),define(Q[83],J([0,1,2,48,7,20,56,6,112,203]),function(q,e,b,N,M,w,S,C,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ActionBar=void 0;class g extends b.Disposable{constructor(c,o={}){var s,a,u,r,i,n;super();this.triggerKeyDown=!1,this.focusable=!0,this._onDidBlur=this._register(new C.Emitter),this.onDidBlur=this._onDidBlur.event,this._onDidCancel=this._register(new C.Emitter({onFirstListenerAdd:()=>this.cancelHasListener=!0})),this.onDidCancel=this._onDidCancel.event,this.cancelHasListener=!1,this._onDidRun=this._register(new C.Emitter),this.onDidRun=this._onDidRun.event,this._onBeforeRun=this._register(new C.Emitter),this.onBeforeRun=this._onBeforeRun.event,this.options=o,this._context=(s=o.context)!==null&&s!==void 0?s:null,this._orientation=(a=this.options.orientation)!==null&&a!==void 0?a:0,this._triggerKeys={keyDown:(r=(u=this.options.triggerKeys)===null||u===void 0?void 0:u.keyDown)!==null&&r!==void 0?r:!1,keys:(n=(i=this.options.triggerKeys)===null||i===void 0?void 0:i.keys)!==null&&n!==void 0?n:[3,10]},this.options.actionRunner?this._actionRunner=this.options.actionRunner:(this._actionRunner=new N.ActionRunner,this._register(this._actionRunner)),this._register(this._actionRunner.onDidRun(h=>this._onDidRun.fire(h))),this._register(this._actionRunner.onBeforeRun(h=>this._onBeforeRun.fire(h))),this._actionIds=[],this.viewItems=[],this.focusedItem=void 0,this.domNode=document.createElement("div"),this.domNode.className="monaco-action-bar",o.animated!==!1&&this.domNode.classList.add("animated");let t,l;switch(this._orientation){case 0:t=[15],l=[17];break;case 1:t=[17],l=[15],this.domNode.className+=" reverse";break;case 2:t=[16],l=[18],this.domNode.className+=" vertical";break;case 3:t=[18],l=[16],this.domNode.className+=" vertical reverse";break}this._register(M.addDisposableListener(this.domNode,M.EventType.KEY_DOWN,h=>{const m=new S.StandardKeyboardEvent(h);let _=!0;const f=typeof this.focusedItem=="number"?this.viewItems[this.focusedItem]:void 0;t&&(m.equals(t[0])||m.equals(t[1]))?_=this.focusPrevious():l&&(m.equals(l[0])||m.equals(l[1]))?_=this.focusNext():m.equals(9)&&this.cancelHasListener?this._onDidCancel.fire():m.equals(2)&&f instanceof d.BaseActionViewItem&&f.trapsArrowNavigation?this.focusNext():this.isTriggerKeyEvent(m)?this._triggerKeys.keyDown?this.doTrigger(m):this.triggerKeyDown=!0:_=!1,_&&(m.preventDefault(),m.stopPropagation())})),this._register(M.addDisposableListener(this.domNode,M.EventType.KEY_UP,h=>{const m=new S.StandardKeyboardEvent(h);this.isTriggerKeyEvent(m)?(!this._triggerKeys.keyDown&&this.triggerKeyDown&&(this.triggerKeyDown=!1,this.doTrigger(m)),m.preventDefault(),m.stopPropagation()):(m.equals(2)||m.equals(1024|2))&&this.updateFocusedItem()})),this.focusTracker=this._register(M.trackFocus(this.domNode)),this._register(this.focusTracker.onDidBlur(()=>{(M.getActiveElement()===this.domNode||!M.isAncestor(M.getActiveElement(),this.domNode))&&(this._onDidBlur.fire(),this.focusedItem=void 0,this.triggerKeyDown=!1)})),this._register(this.focusTracker.onDidFocus(()=>this.updateFocusedItem())),this.actionsList=document.createElement("ul"),this.actionsList.className="actions-container",this.actionsList.setAttribute("role","toolbar"),this.options.ariaLabel&&this.actionsList.setAttribute("aria-label",this.options.ariaLabel),this.domNode.appendChild(this.actionsList),c.appendChild(this.domNode)}isTriggerKeyEvent(c){let o=!1;return this._triggerKeys.keys.forEach(s=>{o=o||c.equals(s)}),o}updateFocusedItem(){for(let c=0;co.setActionContext(c))}get actionRunner(){return this._actionRunner}set actionRunner(c){c&&(this._actionRunner=c,this.viewItems.forEach(o=>o.actionRunner=c))}getContainer(){return this.domNode}push(c,o={}){const s=Array.isArray(c)?c:[c];let a=w.isNumber(o.index)?o.index:null;s.forEach(u=>{const r=document.createElement("li");r.className="action-item",r.setAttribute("role","presentation"),this.options.allowContextMenu||this._register(M.addDisposableListener(r,M.EventType.CONTEXT_MENU,n=>{M.EventHelper.stop(n,!0)}));let i;this.options.actionViewItemProvider&&(i=this.options.actionViewItemProvider(u)),i||(i=new d.ActionViewItem(this.context,u,o)),i.actionRunner=this._actionRunner,i.setActionContext(this.context),i.render(r),this.focusable&&i instanceof d.BaseActionViewItem&&this.viewItems.length===0&&i.setFocusable(!0),a===null||a<0||a>=this.actionsList.children.length?(this.actionsList.appendChild(r),this.viewItems.push(i),this._actionIds.push(u.id)):(this.actionsList.insertBefore(r,this.actionsList.children[a]),this.viewItems.splice(a,0,i),this._actionIds.splice(a,0,u.id),a++)}),typeof this.focusedItem=="number"&&this.focus(this.focusedItem)}clear(){b.dispose(this.viewItems),this.viewItems=[],this._actionIds=[],M.clearNode(this.actionsList)}focus(c){let o=!1,s;if(c===void 0?o=!0:typeof c=="number"?s=c:typeof c=="boolean"&&(o=c),o&&typeof this.focusedItem=="undefined"){const a=this.viewItems.findIndex(u=>u.isEnabled());this.focusedItem=a===-1?void 0:a,this.updateFocus()}else s!==void 0&&(this.focusedItem=s),this.updateFocus()}focusNext(){typeof this.focusedItem=="undefined"&&(this.focusedItem=this.viewItems.length-1);const c=this.focusedItem;let o;do{if(this.options.preventLoopNavigation&&this.focusedItem+1>=this.viewItems.length)return this.focusedItem=c,!1;this.focusedItem=(this.focusedItem+1)%this.viewItems.length,o=this.viewItems[this.focusedItem]}while(this.focusedItem!==c&&this.options.focusOnlyEnabledItems&&!o.isEnabled());return this.updateFocus(),!0}focusPrevious(){typeof this.focusedItem=="undefined"&&(this.focusedItem=0);const c=this.focusedItem;let o;do{if(this.focusedItem=this.focusedItem-1,this.focusedItem<0){if(this.options.preventLoopNavigation)return this.focusedItem=c,!1;this.focusedItem=this.viewItems.length-1}o=this.viewItems[this.focusedItem]}while(this.focusedItem!==c&&this.options.focusOnlyEnabledItems&&!o.isEnabled());return this.updateFocus(!0),!0}updateFocus(c,o){typeof this.focusedItem=="undefined"&&this.actionsList.focus({preventScroll:o});for(let s=0;s(a.textContent=c.label||"",null));for(const a of[M.EventType.CLICK,M.EventType.MOUSE_DOWN,b.EventType.Tap])this._register(M.addDisposableListener(this.element,a,u=>M.EventHelper.stop(u,!0)));for(const a of[M.EventType.MOUSE_DOWN,b.EventType.Tap])this._register(M.addDisposableListener(this._label,a,u=>{u instanceof MouseEvent&&u.detail>1||(this.visible?this.hide():this.show())}));this._register(M.addDisposableListener(this._label,M.EventType.KEY_UP,a=>{const u=new w.StandardKeyboardEvent(a);(u.equals(3)||u.equals(10))&&(M.EventHelper.stop(a,!0),this.visible?this.hide():this.show())}));const s=o(this._label);s&&this._register(s),this._register(b.Gesture.addTarget(this._label))}get element(){return this._element}show(){this.visible||(this.visible=!0,this._onDidChangeVisibility.fire(!0))}hide(){this.visible&&(this.visible=!1,this._onDidChangeVisibility.fire(!1))}dispose(){super.dispose(),this.hide(),this.boxContainer&&(this.boxContainer.remove(),this.boxContainer=void 0),this.contents&&(this.contents.remove(),this.contents=void 0),this._label&&(this._label.remove(),this._label=void 0)}}e.BaseDropdown=C;class d extends C{constructor(p,c){super(p,c);this._actions=[],this._contextMenuProvider=c.contextMenuProvider,this.actions=c.actions||[],this.actionProvider=c.actionProvider,this.menuClassName=c.menuClassName||"",this.menuAsChild=!!c.menuAsChild}set menuOptions(p){this._menuOptions=p}get menuOptions(){return this._menuOptions}get actions(){return this.actionProvider?this.actionProvider.getActions():this._actions}set actions(p){this._actions=p}show(){super.show(),this.element.classList.add("active"),this._contextMenuProvider.showContextMenu({getAnchor:()=>this.element,getActions:()=>this.actions,getActionsContext:()=>this.menuOptions?this.menuOptions.context:null,getActionViewItem:p=>this.menuOptions&&this.menuOptions.actionViewItemProvider?this.menuOptions.actionViewItemProvider(p):void 0,getKeyBinding:p=>this.menuOptions&&this.menuOptions.getKeyBinding?this.menuOptions.getKeyBinding(p):void 0,getMenuClassName:()=>this.menuClassName,onHide:()=>this.onHide(),actionRunner:this.menuOptions?this.menuOptions.actionRunner:void 0,anchorAlignment:this.menuOptions?this.menuOptions.anchorAlignment:0,domForShadowRoot:this.menuAsChild?this.element:void 0})}hide(){super.hide()}onHide(){this.hide(),this.element.classList.remove("active")}}e.DropdownMenu=d}),define(Q[431],J([0,1,7,6,112,430,206]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DropdownMenuActionViewItem=void 0;class S extends M.BaseActionViewItem{constructor(d,g,p,c={}){super(null,d,c);this.options=c,this.actionItem=null,this._onDidChangeVisibility=this._register(new N.Emitter),this.menuActionsOrProvider=g,this.contextMenuProvider=p,this.options.actionRunner&&(this.actionRunner=this.options.actionRunner)}render(d){this.actionItem=d;const g=o=>{this.element=b.append(o,b.$("a.action-label"));let s=[];return typeof this.options.classNames=="string"?s=this.options.classNames.split(/\s+/g).filter(a=>!!a):this.options.classNames&&(s=this.options.classNames),s.find(a=>a==="icon")||s.push("codicon"),this.element.classList.add(...s),this.element.setAttribute("role","button"),this.element.setAttribute("aria-haspopup","true"),this.element.setAttribute("aria-expanded","false"),this.element.title=this._action.label||"",null},p=Array.isArray(this.menuActionsOrProvider),c={contextMenuProvider:this.contextMenuProvider,labelRenderer:g,menuAsChild:this.options.menuAsChild,actions:p?this.menuActionsOrProvider:void 0,actionProvider:p?void 0:this.menuActionsOrProvider};if(this.dropdownMenu=this._register(new w.DropdownMenu(d,c)),this._register(this.dropdownMenu.onDidChangeVisibility(o=>{var s;(s=this.element)===null||s===void 0||s.setAttribute("aria-expanded",`${o}`),this._onDidChangeVisibility.fire(o)})),this.dropdownMenu.menuOptions={actionViewItemProvider:this.options.actionViewItemProvider,actionRunner:this.actionRunner,getKeyBinding:this.options.keybindingProvider,context:this._context},this.options.anchorAlignmentProvider){const o=this;this.dropdownMenu.menuOptions=Object.assign(Object.assign({},this.dropdownMenu.menuOptions),{get anchorAlignment(){return o.options.anchorAlignmentProvider()}})}this.updateEnabled()}setActionContext(d){super.setActionContext(d),this.dropdownMenu&&(this.dropdownMenu.menuOptions?this.dropdownMenu.menuOptions.context=d:this.dropdownMenu.menuOptions={context:d})}updateEnabled(){var d,g;const p=!this.getAction().enabled;(d=this.actionItem)===null||d===void 0||d.classList.toggle("disabled",p),(g=this.element)===null||g===void 0||g.classList.toggle("disabled",p)}}e.DropdownMenuActionViewItem=S}),define(Q[177],J([0,1,423,7,156,47,83,6,52,29,40,279,61,55,305]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.HistoryInputBox=e.InputBox=void 0;const a=N.$,u={inputBackground:g.Color.fromHex("#3C3C3C"),inputForeground:g.Color.fromHex("#CCCCCC"),inputValidationInfoBorder:g.Color.fromHex("#55AAFF"),inputValidationInfoBackground:g.Color.fromHex("#063B49"),inputValidationWarningBorder:g.Color.fromHex("#B89500"),inputValidationWarningBackground:g.Color.fromHex("#352A05"),inputValidationErrorBorder:g.Color.fromHex("#BE1100"),inputValidationErrorBackground:g.Color.fromHex("#5A1D1D")};class r extends d.Widget{constructor(t,l,h){super();this.state="idle",this.maxHeight=Number.POSITIVE_INFINITY,this._onDidChange=this._register(new C.Emitter),this.onDidChange=this._onDidChange.event,this._onDidHeightChange=this._register(new C.Emitter),this.onDidHeightChange=this._onDidHeightChange.event,this.contextViewProvider=l,this.options=h||Object.create(null),p.mixin(this.options,u,!1),this.message=null,this.placeholder=this.options.placeholder||"",this.ariaLabel=this.options.ariaLabel||"",this.inputBackground=this.options.inputBackground,this.inputForeground=this.options.inputForeground,this.inputBorder=this.options.inputBorder,this.inputValidationInfoBorder=this.options.inputValidationInfoBorder,this.inputValidationInfoBackground=this.options.inputValidationInfoBackground,this.inputValidationInfoForeground=this.options.inputValidationInfoForeground,this.inputValidationWarningBorder=this.options.inputValidationWarningBorder,this.inputValidationWarningBackground=this.options.inputValidationWarningBackground,this.inputValidationWarningForeground=this.options.inputValidationWarningForeground,this.inputValidationErrorBorder=this.options.inputValidationErrorBorder,this.inputValidationErrorBackground=this.options.inputValidationErrorBackground,this.inputValidationErrorForeground=this.options.inputValidationErrorForeground,this.options.validationOptions&&(this.validation=this.options.validationOptions.validation),this.element=N.append(t,a(".monaco-inputbox.idle"));let m=this.options.flexibleHeight?"textarea":"input",_=N.append(this.element,a(".ibwrapper"));if(this.input=N.append(_,a(m+".input.empty")),this.input.setAttribute("autocorrect","off"),this.input.setAttribute("autocapitalize","off"),this.input.setAttribute("spellcheck","false"),this.onfocus(this.input,()=>this.element.classList.add("synthetic-focus")),this.onblur(this.input,()=>this.element.classList.remove("synthetic-focus")),this.options.flexibleHeight){this.maxHeight=typeof this.options.flexibleMaxHeight=="number"?this.options.flexibleMaxHeight:Number.POSITIVE_INFINITY,this.mirror=N.append(_,a("div.mirror")),this.mirror.innerText="\xA0",this.scrollableElement=new o.ScrollableElement(this.element,{vertical:1}),this.options.flexibleWidth&&(this.input.setAttribute("wrap","off"),this.mirror.style.whiteSpace="pre",this.mirror.style.wordWrap="initial"),N.append(t,this.scrollableElement.getDomNode()),this._register(this.scrollableElement),this._register(this.scrollableElement.onScroll(v=>this.input.scrollTop=v.scrollTop));const f=C.Event.filter(s.domEvent(document,"selectionchange"),()=>{const v=document.getSelection();return(v==null?void 0:v.anchorNode)===_});this._register(f(this.updateScrollDimensions,this)),this._register(this.onDidHeightChange(this.updateScrollDimensions,this))}else this.input.type=this.options.type||"text",this.input.setAttribute("wrap","off");this.ariaLabel&&this.input.setAttribute("aria-label",this.ariaLabel),this.placeholder&&this.setPlaceHolder(this.placeholder),this.oninput(this.input,()=>this.onValueChange()),this.onblur(this.input,()=>this.onBlur()),this.onfocus(this.input,()=>this.onFocus()),this.ignoreGesture(this.input),setTimeout(()=>this.updateMirror(),0),this.options.actions&&(this.actionbar=this._register(new S.ActionBar(this.element)),this.actionbar.push(this.options.actions,{icon:!0,label:!1})),this.applyStyles()}onBlur(){this._hideMessage()}onFocus(){this._showMessage()}setPlaceHolder(t){this.placeholder=t,this.input.setAttribute("placeholder",t),this.input.title=t}setAriaLabel(t){this.ariaLabel=t,t?this.input.setAttribute("aria-label",this.ariaLabel):this.input.removeAttribute("aria-label")}getAriaLabel(){return this.ariaLabel}get inputElement(){return this.input}get value(){return this.input.value}set value(t){this.input.value!==t&&(this.input.value=t,this.onValueChange())}get height(){return typeof this.cachedHeight=="number"?this.cachedHeight:N.getTotalHeight(this.element)}focus(){this.input.focus()}blur(){this.input.blur()}hasFocus(){return document.activeElement===this.input}select(t=null){this.input.select(),t&&(this.input.setSelectionRange(t.start,t.end),t.end===this.input.value.length&&(this.input.scrollLeft=this.input.scrollWidth))}isSelectionAtEnd(){return this.input.selectionEnd===this.input.value.length&&this.input.selectionStart===this.input.selectionEnd}enable(){this.input.removeAttribute("disabled")}disable(){this.blur(),this.input.disabled=!0,this._hideMessage()}get width(){return N.getTotalWidth(this.input)}set width(t){if(this.options.flexibleHeight&&this.options.flexibleWidth){let l=0;if(this.mirror){const h=parseFloat(this.mirror.style.paddingLeft||"")||0,m=parseFloat(this.mirror.style.paddingRight||"")||0;l=h+m}this.input.style.width=t-l+"px"}else this.input.style.width=t+"px";this.mirror&&(this.mirror.style.width=t+"px")}set paddingRight(t){this.options.flexibleHeight&&this.options.flexibleWidth?this.input.style.width=`calc(100% - ${t}px)`:this.input.style.paddingRight=t+"px",this.mirror&&(this.mirror.style.paddingRight=t+"px")}updateScrollDimensions(){if(!(typeof this.cachedContentHeight!="number"||typeof this.cachedHeight!="number"||!this.scrollableElement)){const t=this.cachedContentHeight,l=this.cachedHeight,h=this.input.scrollTop;this.scrollableElement.setScrollDimensions({scrollHeight:t,height:l}),this.scrollableElement.setScrollPosition({scrollTop:h})}}showMessage(t,l){this.message=t,this.element.classList.remove("idle"),this.element.classList.remove("info"),this.element.classList.remove("warning"),this.element.classList.remove("error"),this.element.classList.add(this.classForType(t.type));const h=this.stylesForType(this.message.type);this.element.style.border=h.border?`1px solid ${h.border}`:"",(this.hasFocus()||l)&&this._showMessage()}hideMessage(){this.message=null,this.element.classList.remove("info"),this.element.classList.remove("warning"),this.element.classList.remove("error"),this.element.classList.add("idle"),this._hideMessage(),this.applyStyles()}validate(){let t=null;return this.validation&&(t=this.validation(this.value),t?(this.inputElement.setAttribute("aria-invalid","true"),this.showMessage(t)):this.inputElement.hasAttribute("aria-invalid")&&(this.inputElement.removeAttribute("aria-invalid"),this.hideMessage())),t==null?void 0:t.type}stylesForType(t){switch(t){case 1:return{border:this.inputValidationInfoBorder,background:this.inputValidationInfoBackground,foreground:this.inputValidationInfoForeground};case 2:return{border:this.inputValidationWarningBorder,background:this.inputValidationWarningBackground,foreground:this.inputValidationWarningForeground};default:return{border:this.inputValidationErrorBorder,background:this.inputValidationErrorBackground,foreground:this.inputValidationErrorForeground}}}classForType(t){switch(t){case 1:return"info";case 2:return"warning";default:return"error"}}_showMessage(){if(!(!this.contextViewProvider||!this.message)){let t,l=()=>t.style.width=N.getTotalWidth(this.element)+"px";this.contextViewProvider.showContextView({getAnchor:()=>this.element,anchorAlignment:1,render:m=>{if(!this.message)return null;t=N.append(m,a(".monaco-inputbox-container")),l();const _={inline:!0,className:"monaco-inputbox-message"},f=this.message.formatContent?M.renderFormattedText(this.message.content,_):M.renderText(this.message.content,_);f.classList.add(this.classForType(this.message.type));const v=this.stylesForType(this.message.type);return f.style.backgroundColor=v.background?v.background.toString():"",f.style.color=v.foreground?v.foreground.toString():"",f.style.border=v.border?`1px solid ${v.border}`:"",N.append(t,f),null},onHide:()=>{this.state="closed"},layout:l});let h;this.message.type===3?h=b.localize(0,null,this.message.content):this.message.type===2?h=b.localize(1,null,this.message.content):h=b.localize(2,null,this.message.content),w.alert(h),this.state="open"}}_hideMessage(){!this.contextViewProvider||(this.state==="open"&&this.contextViewProvider.hideContextView(),this.state="idle")}onValueChange(){this._onDidChange.fire(this.value),this.validate(),this.updateMirror(),this.input.classList.toggle("empty",!this.value),this.state==="open"&&this.contextViewProvider&&this.contextViewProvider.layout()}updateMirror(){if(!!this.mirror){const t=this.value,h=t.charCodeAt(t.length-1)===10?" ":"";t+h?this.mirror.textContent=t+h:this.mirror.innerText="\xA0",this.layout()}}style(t){this.inputBackground=t.inputBackground,this.inputForeground=t.inputForeground,this.inputBorder=t.inputBorder,this.inputValidationInfoBackground=t.inputValidationInfoBackground,this.inputValidationInfoForeground=t.inputValidationInfoForeground,this.inputValidationInfoBorder=t.inputValidationInfoBorder,this.inputValidationWarningBackground=t.inputValidationWarningBackground,this.inputValidationWarningForeground=t.inputValidationWarningForeground,this.inputValidationWarningBorder=t.inputValidationWarningBorder,this.inputValidationErrorBackground=t.inputValidationErrorBackground,this.inputValidationErrorForeground=t.inputValidationErrorForeground,this.inputValidationErrorBorder=t.inputValidationErrorBorder,this.applyStyles()}applyStyles(){const t=this.inputBackground?this.inputBackground.toString():"",l=this.inputForeground?this.inputForeground.toString():"",h=this.inputBorder?this.inputBorder.toString():"";this.element.style.backgroundColor=t,this.element.style.color=l,this.input.style.backgroundColor="inherit",this.input.style.color=l,this.element.style.borderWidth=h?"1px":"",this.element.style.borderStyle=h?"solid":"",this.element.style.borderColor=h}layout(){if(!!this.mirror){const t=this.cachedContentHeight;this.cachedContentHeight=N.getTotalHeight(this.mirror),t!==this.cachedContentHeight&&(this.cachedHeight=Math.min(this.cachedContentHeight,this.maxHeight),this.input.style.height=this.cachedHeight+"px",this._onDidHeightChange.fire(this.cachedContentHeight))}}insertAtCursor(t){const l=this.inputElement,h=l.selectionStart,m=l.selectionEnd,_=l.value;h!==null&&m!==null&&(this.value=_.substr(0,h)+t+_.substr(m),l.setSelectionRange(h+1,h+1),this.layout())}dispose(){this._hideMessage(),this.message=null,this.actionbar&&this.actionbar.dispose(),super.dispose()}}e.InputBox=r;class i extends r{constructor(t,l,h){super(t,l,h);this.history=new c.HistoryNavigator(h.history,100)}addToHistory(){this.value&&this.value!==this.getCurrentValue()&&this.history.add(this.value)}showNextValue(){this.history.has(this.value)||this.addToHistory();let t=this.getNextValue();t&&(t=t===this.value?this.getNextValue():t),t&&(this.value=t,w.status(this.value))}showPreviousValue(){this.history.has(this.value)||this.addToHistory();let t=this.getPreviousValue();t&&(t=t===this.value?this.getPreviousValue():t),t&&(this.value=t,w.status(this.value))}getCurrentValue(){let t=this.history.current();return t||(t=this.history.last(),this.history.next()),t}getPreviousValue(){return this.history.previous()||this.history.first()}getNextValue(){return this.history.next()||this.history.last()}}e.HistoryInputBox=i}),define(Q[432],J([0,1,419,7,177,52,6,233,207]),function(q,e,b,N,M,w,S,C){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.FindInput=void 0;const d=b.localize(0,null);class g extends w.Widget{constructor(c,o,s,a){super();this._showOptionButtons=s,this.fixFocusOnOptionClickEnabled=!0,this._onDidOptionChange=this._register(new S.Emitter),this.onDidOptionChange=this._onDidOptionChange.event,this._onKeyDown=this._register(new S.Emitter),this.onKeyDown=this._onKeyDown.event,this._onMouseDown=this._register(new S.Emitter),this.onMouseDown=this._onMouseDown.event,this._onInput=this._register(new S.Emitter),this._onKeyUp=this._register(new S.Emitter),this._onCaseSensitiveKeyDown=this._register(new S.Emitter),this.onCaseSensitiveKeyDown=this._onCaseSensitiveKeyDown.event,this._onRegexKeyDown=this._register(new S.Emitter),this.onRegexKeyDown=this._onRegexKeyDown.event,this._lastHighlightFindOptions=0,this.contextViewProvider=o,this.placeholder=a.placeholder||"",this.validation=a.validation,this.label=a.label||d,this.inputActiveOptionBorder=a.inputActiveOptionBorder,this.inputActiveOptionForeground=a.inputActiveOptionForeground,this.inputActiveOptionBackground=a.inputActiveOptionBackground,this.inputBackground=a.inputBackground,this.inputForeground=a.inputForeground,this.inputBorder=a.inputBorder,this.inputValidationInfoBorder=a.inputValidationInfoBorder,this.inputValidationInfoBackground=a.inputValidationInfoBackground,this.inputValidationInfoForeground=a.inputValidationInfoForeground,this.inputValidationWarningBorder=a.inputValidationWarningBorder,this.inputValidationWarningBackground=a.inputValidationWarningBackground,this.inputValidationWarningForeground=a.inputValidationWarningForeground,this.inputValidationErrorBorder=a.inputValidationErrorBorder,this.inputValidationErrorBackground=a.inputValidationErrorBackground,this.inputValidationErrorForeground=a.inputValidationErrorForeground;const u=a.appendCaseSensitiveLabel||"",r=a.appendWholeWordsLabel||"",i=a.appendRegexLabel||"",n=a.history||[],t=!!a.flexibleHeight,l=!!a.flexibleWidth,h=a.flexibleMaxHeight;this.domNode=document.createElement("div"),this.domNode.classList.add("monaco-findInput"),this.inputBox=this._register(new M.HistoryInputBox(this.domNode,this.contextViewProvider,{placeholder:this.placeholder||"",ariaLabel:this.label||"",validationOptions:{validation:this.validation},inputBackground:this.inputBackground,inputForeground:this.inputForeground,inputBorder:this.inputBorder,inputValidationInfoBackground:this.inputValidationInfoBackground,inputValidationInfoForeground:this.inputValidationInfoForeground,inputValidationInfoBorder:this.inputValidationInfoBorder,inputValidationWarningBackground:this.inputValidationWarningBackground,inputValidationWarningForeground:this.inputValidationWarningForeground,inputValidationWarningBorder:this.inputValidationWarningBorder,inputValidationErrorBackground:this.inputValidationErrorBackground,inputValidationErrorForeground:this.inputValidationErrorForeground,inputValidationErrorBorder:this.inputValidationErrorBorder,history:n,flexibleHeight:t,flexibleWidth:l,flexibleMaxHeight:h})),this.regex=this._register(new C.RegexCheckbox({appendTitle:i,isChecked:!1,inputActiveOptionBorder:this.inputActiveOptionBorder,inputActiveOptionForeground:this.inputActiveOptionForeground,inputActiveOptionBackground:this.inputActiveOptionBackground})),this._register(this.regex.onChange(f=>{this._onDidOptionChange.fire(f),!f&&this.fixFocusOnOptionClickEnabled&&this.inputBox.focus(),this.validate()})),this._register(this.regex.onKeyDown(f=>{this._onRegexKeyDown.fire(f)})),this.wholeWords=this._register(new C.WholeWordsCheckbox({appendTitle:r,isChecked:!1,inputActiveOptionBorder:this.inputActiveOptionBorder,inputActiveOptionForeground:this.inputActiveOptionForeground,inputActiveOptionBackground:this.inputActiveOptionBackground})),this._register(this.wholeWords.onChange(f=>{this._onDidOptionChange.fire(f),!f&&this.fixFocusOnOptionClickEnabled&&this.inputBox.focus(),this.validate()})),this.caseSensitive=this._register(new C.CaseSensitiveCheckbox({appendTitle:u,isChecked:!1,inputActiveOptionBorder:this.inputActiveOptionBorder,inputActiveOptionForeground:this.inputActiveOptionForeground,inputActiveOptionBackground:this.inputActiveOptionBackground})),this._register(this.caseSensitive.onChange(f=>{this._onDidOptionChange.fire(f),!f&&this.fixFocusOnOptionClickEnabled&&this.inputBox.focus(),this.validate()})),this._register(this.caseSensitive.onKeyDown(f=>{this._onCaseSensitiveKeyDown.fire(f)})),this._showOptionButtons&&(this.inputBox.paddingRight=this.caseSensitive.width()+this.wholeWords.width()+this.regex.width());let m=[this.caseSensitive.domNode,this.wholeWords.domNode,this.regex.domNode];this.onkeydown(this.domNode,f=>{if(f.equals(15)||f.equals(17)||f.equals(9)){let v=m.indexOf(document.activeElement);if(v>=0){let y=-1;f.equals(17)?y=(v+1)%m.length:f.equals(15)&&(v===0?y=m.length-1:y=v-1),f.equals(9)?(m[v].blur(),this.inputBox.focus()):y>=0&&m[y].focus(),N.EventHelper.stop(f,!0)}}});let _=document.createElement("div");_.className="controls",_.style.display=this._showOptionButtons?"block":"none",_.appendChild(this.caseSensitive.domNode),_.appendChild(this.wholeWords.domNode),_.appendChild(this.regex.domNode),this.domNode.appendChild(_),c&&c.appendChild(this.domNode),this.onkeydown(this.inputBox.inputElement,f=>this._onKeyDown.fire(f)),this.onkeyup(this.inputBox.inputElement,f=>this._onKeyUp.fire(f)),this.oninput(this.inputBox.inputElement,f=>this._onInput.fire()),this.onmousedown(this.inputBox.inputElement,f=>this._onMouseDown.fire(f))}enable(){this.domNode.classList.remove("disabled"),this.inputBox.enable(),this.regex.enable(),this.wholeWords.enable(),this.caseSensitive.enable()}disable(){this.domNode.classList.add("disabled"),this.inputBox.disable(),this.regex.disable(),this.wholeWords.disable(),this.caseSensitive.disable()}setFocusInputOnOptionClick(c){this.fixFocusOnOptionClickEnabled=c}setEnabled(c){c?this.enable():this.disable()}getValue(){return this.inputBox.value}setValue(c){this.inputBox.value!==c&&(this.inputBox.value=c)}style(c){this.inputActiveOptionBorder=c.inputActiveOptionBorder,this.inputActiveOptionForeground=c.inputActiveOptionForeground,this.inputActiveOptionBackground=c.inputActiveOptionBackground,this.inputBackground=c.inputBackground,this.inputForeground=c.inputForeground,this.inputBorder=c.inputBorder,this.inputValidationInfoBackground=c.inputValidationInfoBackground,this.inputValidationInfoForeground=c.inputValidationInfoForeground,this.inputValidationInfoBorder=c.inputValidationInfoBorder,this.inputValidationWarningBackground=c.inputValidationWarningBackground,this.inputValidationWarningForeground=c.inputValidationWarningForeground,this.inputValidationWarningBorder=c.inputValidationWarningBorder,this.inputValidationErrorBackground=c.inputValidationErrorBackground,this.inputValidationErrorForeground=c.inputValidationErrorForeground,this.inputValidationErrorBorder=c.inputValidationErrorBorder,this.applyStyles()}applyStyles(){if(this.domNode){const c={inputActiveOptionBorder:this.inputActiveOptionBorder,inputActiveOptionForeground:this.inputActiveOptionForeground,inputActiveOptionBackground:this.inputActiveOptionBackground};this.regex.style(c),this.wholeWords.style(c),this.caseSensitive.style(c);const o={inputBackground:this.inputBackground,inputForeground:this.inputForeground,inputBorder:this.inputBorder,inputValidationInfoBackground:this.inputValidationInfoBackground,inputValidationInfoForeground:this.inputValidationInfoForeground,inputValidationInfoBorder:this.inputValidationInfoBorder,inputValidationWarningBackground:this.inputValidationWarningBackground,inputValidationWarningForeground:this.inputValidationWarningForeground,inputValidationWarningBorder:this.inputValidationWarningBorder,inputValidationErrorBackground:this.inputValidationErrorBackground,inputValidationErrorForeground:this.inputValidationErrorForeground,inputValidationErrorBorder:this.inputValidationErrorBorder};this.inputBox.style(o)}}select(){this.inputBox.select()}focus(){this.inputBox.focus()}getCaseSensitive(){return this.caseSensitive.checked}setCaseSensitive(c){this.caseSensitive.checked=c}getWholeWords(){return this.wholeWords.checked}setWholeWords(c){this.wholeWords.checked=c}getRegex(){return this.regex.checked}setRegex(c){this.regex.checked=c,this.validate()}focusOnCaseSensitive(){this.caseSensitive.focus()}highlightFindOptions(){this.domNode.classList.remove("highlight-"+this._lastHighlightFindOptions),this._lastHighlightFindOptions=1-this._lastHighlightFindOptions,this.domNode.classList.add("highlight-"+this._lastHighlightFindOptions)}validate(){this.inputBox.validate()}clearMessage(){this.inputBox.hideMessage()}}e.FindInput=g}),define(Q[433],J([0,1,421,7,177,52,6,160,27,207]),function(q,e,b,N,M,w,S,C,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ReplaceInput=e.PreserveCaseCheckbox=void 0;const g=b.localize(0,null),p=b.localize(1,null);class c extends C.Checkbox{constructor(a){super({icon:d.Codicon.preserveCase,title:p+a.appendTitle,isChecked:a.isChecked,inputActiveOptionBorder:a.inputActiveOptionBorder,inputActiveOptionForeground:a.inputActiveOptionForeground,inputActiveOptionBackground:a.inputActiveOptionBackground})}}e.PreserveCaseCheckbox=c;class o extends w.Widget{constructor(a,u,r,i){super();this._showOptionButtons=r,this.fixFocusOnOptionClickEnabled=!0,this.cachedOptionsWidth=0,this._onDidOptionChange=this._register(new S.Emitter),this.onDidOptionChange=this._onDidOptionChange.event,this._onKeyDown=this._register(new S.Emitter),this.onKeyDown=this._onKeyDown.event,this._onMouseDown=this._register(new S.Emitter),this._onInput=this._register(new S.Emitter),this._onKeyUp=this._register(new S.Emitter),this._onPreserveCaseKeyDown=this._register(new S.Emitter),this.onPreserveCaseKeyDown=this._onPreserveCaseKeyDown.event,this.contextViewProvider=u,this.placeholder=i.placeholder||"",this.validation=i.validation,this.label=i.label||g,this.inputActiveOptionBorder=i.inputActiveOptionBorder,this.inputActiveOptionForeground=i.inputActiveOptionForeground,this.inputActiveOptionBackground=i.inputActiveOptionBackground,this.inputBackground=i.inputBackground,this.inputForeground=i.inputForeground,this.inputBorder=i.inputBorder,this.inputValidationInfoBorder=i.inputValidationInfoBorder,this.inputValidationInfoBackground=i.inputValidationInfoBackground,this.inputValidationInfoForeground=i.inputValidationInfoForeground,this.inputValidationWarningBorder=i.inputValidationWarningBorder,this.inputValidationWarningBackground=i.inputValidationWarningBackground,this.inputValidationWarningForeground=i.inputValidationWarningForeground,this.inputValidationErrorBorder=i.inputValidationErrorBorder,this.inputValidationErrorBackground=i.inputValidationErrorBackground,this.inputValidationErrorForeground=i.inputValidationErrorForeground;const n=i.appendPreserveCaseLabel||"",t=i.history||[],l=!!i.flexibleHeight,h=!!i.flexibleWidth,m=i.flexibleMaxHeight;this.domNode=document.createElement("div"),this.domNode.classList.add("monaco-findInput"),this.inputBox=this._register(new M.HistoryInputBox(this.domNode,this.contextViewProvider,{ariaLabel:this.label||"",placeholder:this.placeholder||"",validationOptions:{validation:this.validation},inputBackground:this.inputBackground,inputForeground:this.inputForeground,inputBorder:this.inputBorder,inputValidationInfoBackground:this.inputValidationInfoBackground,inputValidationInfoForeground:this.inputValidationInfoForeground,inputValidationInfoBorder:this.inputValidationInfoBorder,inputValidationWarningBackground:this.inputValidationWarningBackground,inputValidationWarningForeground:this.inputValidationWarningForeground,inputValidationWarningBorder:this.inputValidationWarningBorder,inputValidationErrorBackground:this.inputValidationErrorBackground,inputValidationErrorForeground:this.inputValidationErrorForeground,inputValidationErrorBorder:this.inputValidationErrorBorder,history:t,flexibleHeight:l,flexibleWidth:h,flexibleMaxHeight:m})),this.preserveCase=this._register(new c({appendTitle:n,isChecked:!1,inputActiveOptionBorder:this.inputActiveOptionBorder,inputActiveOptionForeground:this.inputActiveOptionForeground,inputActiveOptionBackground:this.inputActiveOptionBackground})),this._register(this.preserveCase.onChange(v=>{this._onDidOptionChange.fire(v),!v&&this.fixFocusOnOptionClickEnabled&&this.inputBox.focus(),this.validate()})),this._register(this.preserveCase.onKeyDown(v=>{this._onPreserveCaseKeyDown.fire(v)})),this._showOptionButtons?this.cachedOptionsWidth=this.preserveCase.width():this.cachedOptionsWidth=0;let _=[this.preserveCase.domNode];this.onkeydown(this.domNode,v=>{if(v.equals(15)||v.equals(17)||v.equals(9)){let y=_.indexOf(document.activeElement);if(y>=0){let L=-1;v.equals(17)?L=(y+1)%_.length:v.equals(15)&&(y===0?L=_.length-1:L=y-1),v.equals(9)?(_[y].blur(),this.inputBox.focus()):L>=0&&_[L].focus(),N.EventHelper.stop(v,!0)}}});let f=document.createElement("div");f.className="controls",f.style.display=this._showOptionButtons?"block":"none",f.appendChild(this.preserveCase.domNode),this.domNode.appendChild(f),a&&a.appendChild(this.domNode),this.onkeydown(this.inputBox.inputElement,v=>this._onKeyDown.fire(v)),this.onkeyup(this.inputBox.inputElement,v=>this._onKeyUp.fire(v)),this.oninput(this.inputBox.inputElement,v=>this._onInput.fire()),this.onmousedown(this.inputBox.inputElement,v=>this._onMouseDown.fire(v))}enable(){this.domNode.classList.remove("disabled"),this.inputBox.enable(),this.preserveCase.enable()}disable(){this.domNode.classList.add("disabled"),this.inputBox.disable(),this.preserveCase.disable()}setEnabled(a){a?this.enable():this.disable()}style(a){this.inputActiveOptionBorder=a.inputActiveOptionBorder,this.inputActiveOptionForeground=a.inputActiveOptionForeground,this.inputActiveOptionBackground=a.inputActiveOptionBackground,this.inputBackground=a.inputBackground,this.inputForeground=a.inputForeground,this.inputBorder=a.inputBorder,this.inputValidationInfoBackground=a.inputValidationInfoBackground,this.inputValidationInfoForeground=a.inputValidationInfoForeground,this.inputValidationInfoBorder=a.inputValidationInfoBorder,this.inputValidationWarningBackground=a.inputValidationWarningBackground,this.inputValidationWarningForeground=a.inputValidationWarningForeground,this.inputValidationWarningBorder=a.inputValidationWarningBorder,this.inputValidationErrorBackground=a.inputValidationErrorBackground,this.inputValidationErrorForeground=a.inputValidationErrorForeground,this.inputValidationErrorBorder=a.inputValidationErrorBorder,this.applyStyles()}applyStyles(){if(this.domNode){const a={inputActiveOptionBorder:this.inputActiveOptionBorder,inputActiveOptionForeground:this.inputActiveOptionForeground,inputActiveOptionBackground:this.inputActiveOptionBackground};this.preserveCase.style(a);const u={inputBackground:this.inputBackground,inputForeground:this.inputForeground,inputBorder:this.inputBorder,inputValidationInfoBackground:this.inputValidationInfoBackground,inputValidationInfoForeground:this.inputValidationInfoForeground,inputValidationInfoBorder:this.inputValidationInfoBorder,inputValidationWarningBackground:this.inputValidationWarningBackground,inputValidationWarningForeground:this.inputValidationWarningForeground,inputValidationWarningBorder:this.inputValidationWarningBorder,inputValidationErrorBackground:this.inputValidationErrorBackground,inputValidationErrorForeground:this.inputValidationErrorForeground,inputValidationErrorBorder:this.inputValidationErrorBorder};this.inputBox.style(u)}}select(){this.inputBox.select()}focus(){this.inputBox.focus()}getPreserveCase(){return this.preserveCase.checked}setPreserveCase(a){this.preserveCase.checked=a}focusOnPreserve(){this.preserveCase.focus()}validate(){this.inputBox&&this.inputBox.validate()}set width(a){this.inputBox.paddingRight=this.cachedOptionsWidth,this.inputBox.width=a,this.domNode.style.width=a+"px"}dispose(){super.dispose()}}e.ReplaceInput=o}),define(Q[434],J([0,1,425,8,48,83,7,56,15,2,61,204,17,27,112,123,35,50,102]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.cleanMnemonic=e.Menu=e.Direction=e.MENU_ESCAPED_MNEMONIC_REGEX=e.MENU_MNEMONIC_REGEX=void 0,e.MENU_MNEMONIC_REGEX=/\(&([^\s&])\)|(^|[^&])&([^\s&])/,e.MENU_ESCAPED_MNEMONIC_REGEX=/(&)?(&)([^\s&])/g;const t=s.registerCodicon("menu-selection",s.Codicon.check),l=s.registerCodicon("menu-submenu",s.Codicon.chevronRight);var h;(function(I){I[I.Right=0]="Right",I[I.Left=1]="Left"})(h=e.Direction||(e.Direction={}));class m extends w.ActionBar{constructor(k,E,T={}){k.classList.add("monaco-menu-container"),k.setAttribute("role","presentation");const O=document.createElement("div");O.classList.add("monaco-menu"),O.setAttribute("role","presentation"),super(O,{orientation:2,actionViewItemProvider:F=>this.doGetActionViewItem(F,T,A),context:T.context,actionRunner:T.actionRunner,ariaLabel:T.ariaLabel,focusOnlyEnabledItems:!0,triggerKeys:{keys:[3,...o.isMacintosh||o.isLinux?[10]:[]],keyDown:!0}}),this.menuElement=O,this.actionsList.setAttribute("role","menu"),this.actionsList.tabIndex=0,this.menuDisposables=this._register(new g.DisposableStore),this.initializeStyleSheet(k),S.addDisposableListener(O,S.EventType.KEY_DOWN,F=>{new C.StandardKeyboardEvent(F).equals(2)&&F.preventDefault()}),T.enableMnemonics&&this.menuDisposables.add(S.addDisposableListener(O,S.EventType.KEY_DOWN,F=>{const D=F.key.toLocaleLowerCase();if(this.mnemonics.has(D)){S.EventHelper.stop(F,!0);const R=this.mnemonics.get(D);if(R.length===1&&(R[0]instanceof f&&R[0].container&&this.focusItemByElement(R[0].container),R[0].onClick(F)),R.length>1){const W=R.shift();W&&W.container&&(this.focusItemByElement(W.container),R.push(W)),this.mnemonics.set(D,R)}}})),o.isLinux&&this._register(S.addDisposableListener(O,S.EventType.KEY_DOWN,F=>{const D=new C.StandardKeyboardEvent(F);D.equals(14)||D.equals(11)?(this.focusedItem=this.viewItems.length-1,this.focusNext(),S.EventHelper.stop(F,!0)):(D.equals(13)||D.equals(12))&&(this.focusedItem=0,this.focusPrevious(),S.EventHelper.stop(F,!0))})),this._register(S.addDisposableListener(this.domNode,S.EventType.MOUSE_OUT,F=>{let D=F.relatedTarget;S.isAncestor(D,this.domNode)||(this.focusedItem=void 0,this.updateFocus(),F.stopPropagation())})),this._register(S.addDisposableListener(this.actionsList,S.EventType.MOUSE_OVER,F=>{let D=F.target;if(!(!D||!S.isAncestor(D,this.actionsList)||D===this.actionsList)){for(;D.parentElement!==this.actionsList&&D.parentElement!==null;)D=D.parentElement;if(D.classList.contains("action-item")){const R=this.focusedItem;this.setFocusedItem(D),R!==this.focusedItem&&this.updateFocus()}}}));let A={parent:this};this.mnemonics=new Map,this.scrollableElement=this._register(new p.DomScrollableElement(O,{alwaysConsumeMouseWheel:!0,horizontal:2,vertical:3,verticalScrollbarSize:7,handleMouseWheel:!0,useShadows:!0}));const B=this.scrollableElement.getDomNode();B.style.position="",this._register(S.addDisposableListener(B,S.EventType.MOUSE_UP,F=>{F.preventDefault()})),O.style.maxHeight=`${Math.max(10,window.innerHeight-k.getBoundingClientRect().top-35)}px`,E=E.filter(F=>{var D;return((D=T.submenuIds)===null||D===void 0?void 0:D.has(F.id))?(console.warn(`Found submenu cycle: ${F.id}`),!1):!0}),this.push(E,{icon:!0,label:!0,isMenu:!0}),k.appendChild(this.scrollableElement.getDomNode()),this.scrollableElement.scanDomNode(),this.viewItems.filter(F=>!(F instanceof v)).forEach((F,D,R)=>{F.updatePositionInSet(D+1,R.length)})}initializeStyleSheet(k){S.isInShadowDOM(k)?(this.styleSheet=S.createStyleSheet(k),this.styleSheet.textContent=L):(m.globalStyleSheet||(m.globalStyleSheet=S.createStyleSheet(),m.globalStyleSheet.textContent=L),this.styleSheet=m.globalStyleSheet)}style(k){const E=this.getContainer(),T=k.foregroundColor?`${k.foregroundColor}`:"",O=k.backgroundColor?`${k.backgroundColor}`:"",A=k.borderColor?`1px solid ${k.borderColor}`:"",B=k.shadowColor?`0 2px 4px ${k.shadowColor}`:"";E.style.border=A,this.domNode.style.color=T,this.domNode.style.backgroundColor=O,E.style.boxShadow=B,this.viewItems&&this.viewItems.forEach(F=>{(F instanceof _||F instanceof v)&&F.style(k)})}getContainer(){return this.scrollableElement.getDomNode()}get onScroll(){return this.scrollableElement.onScroll}focusItemByElement(k){const E=this.focusedItem;this.setFocusedItem(k),E!==this.focusedItem&&this.updateFocus()}setFocusedItem(k){for(let E=0;E{!this.element||(this._register(S.addDisposableListener(this.element,S.EventType.MOUSE_UP,O=>{if(S.EventHelper.stop(O,!0),r.isFirefox){if(new i.StandardMouseEvent(O).rightButton)return;this.onClick(O)}else setTimeout(()=>{this.onClick(O)},0)})),this._register(S.addDisposableListener(this.element,S.EventType.CONTEXT_MENU,O=>{S.EventHelper.stop(O,!0)})))},100),this._register(this.runOnceToEnableMouseUp)}render(k){super.render(k),!!this.element&&(this.container=k,this.item=S.append(this.element,S.$("a.action-menu-item")),this._action.id===M.Separator.ID?this.item.setAttribute("role","presentation"):(this.item.setAttribute("role","menuitem"),this.mnemonic&&this.item.setAttribute("aria-keyshortcuts",`${this.mnemonic}`)),this.check=S.append(this.item,S.$("span.menu-item-check"+t.cssSelector)),this.check.setAttribute("role","none"),this.label=S.append(this.item,S.$("span.action-label")),this.options.label&&this.options.keybinding&&(S.append(this.item,S.$("span.keybinding")).textContent=this.options.keybinding),this.runOnceToEnableMouseUp.schedule(),this.updateClass(),this.updateLabel(),this.updateTooltip(),this.updateEnabled(),this.updateChecked())}blur(){super.blur(),this.applyStyle()}focus(){super.focus(),this.item&&this.item.focus(),this.applyStyle()}updatePositionInSet(k,E){this.item&&(this.item.setAttribute("aria-posinset",`${k}`),this.item.setAttribute("aria-setsize",`${E}`))}updateLabel(){if(!!this.label&&this.options.label){S.clearNode(this.label);let k=n.stripIcons(this.getAction().label);if(k){const E=y(k);this.options.enableMnemonics||(k=E),this.label.setAttribute("aria-label",E.replace(/&&/g,"&"));const T=e.MENU_MNEMONIC_REGEX.exec(k);if(T){k=N.escape(k),e.MENU_ESCAPED_MNEMONIC_REGEX.lastIndex=0;let O=e.MENU_ESCAPED_MNEMONIC_REGEX.exec(k);for(;O&&O[1];)O=e.MENU_ESCAPED_MNEMONIC_REGEX.exec(k);const A=B=>B.replace(/&&/g,"&");O?this.label.append(N.ltrim(A(k.substr(0,O.index))," "),S.$("u",{"aria-hidden":"true"},O[3]),N.rtrim(A(k.substr(O.index+O[0].length))," ")):this.label.innerText=A(k).trim(),this.item&&this.item.setAttribute("aria-keyshortcuts",(T[1]?T[1]:T[3]).toLocaleLowerCase())}else this.label.innerText=k.replace(/&&/g,"&").trim()}}}updateTooltip(){let k=null;this.getAction().tooltip?k=this.getAction().tooltip:!this.options.label&&this.getAction().label&&this.options.icon&&(k=this.getAction().label,this.options.keybinding&&(k=b.localize(0,null,k,this.options.keybinding))),k&&this.item&&(this.item.title=k)}updateClass(){this.cssClass&&this.item&&this.item.classList.remove(...this.cssClass.split(" ")),this.options.icon&&this.label?(this.cssClass=this.getAction().class||"",this.label.classList.add("icon"),this.cssClass&&this.label.classList.add(...this.cssClass.split(" ")),this.updateEnabled()):this.label&&this.label.classList.remove("icon")}updateEnabled(){this.getAction().enabled?(this.element&&(this.element.classList.remove("disabled"),this.element.removeAttribute("aria-disabled")),this.item&&(this.item.classList.remove("disabled"),this.item.removeAttribute("aria-disabled"),this.item.tabIndex=0)):(this.element&&(this.element.classList.add("disabled"),this.element.setAttribute("aria-disabled","true")),this.item&&(this.item.classList.add("disabled"),this.item.setAttribute("aria-disabled","true")))}updateChecked(){!this.item||(this.getAction().checked?(this.item.classList.add("checked"),this.item.setAttribute("role","menuitemcheckbox"),this.item.setAttribute("aria-checked","true")):(this.item.classList.remove("checked"),this.item.setAttribute("role","menuitem"),this.item.setAttribute("aria-checked","false")))}getMnemonic(){return this.mnemonic}applyStyle(){if(!!this.menuStyle){const k=this.element&&this.element.classList.contains("focused"),E=k&&this.menuStyle.selectionForegroundColor?this.menuStyle.selectionForegroundColor:this.menuStyle.foregroundColor,T=k&&this.menuStyle.selectionBackgroundColor?this.menuStyle.selectionBackgroundColor:void 0,O=k&&this.menuStyle.selectionBorderColor?`thin solid ${this.menuStyle.selectionBorderColor}`:"";this.item&&(this.item.style.color=E?E.toString():"",this.item.style.backgroundColor=T?T.toString():""),this.check&&(this.check.style.color=E?E.toString():""),this.container&&(this.container.style.border=O)}}style(k){this.menuStyle=k,this.applyStyle()}}class f extends _{constructor(k,E,T,O){super(k,k,O);this.submenuActions=E,this.parentData=T,this.submenuOptions=O,this.mysubmenu=null,this.submenuDisposables=this._register(new g.DisposableStore),this.mouseOver=!1,this.expandDirection=O&&O.expandDirection!==void 0?O.expandDirection:h.Right,this.showScheduler=new d.RunOnceScheduler(()=>{this.mouseOver&&(this.cleanupExistingSubmenu(!1),this.createSubmenu(!1))},250),this.hideScheduler=new d.RunOnceScheduler(()=>{this.element&&!S.isAncestor(S.getActiveElement(),this.element)&&this.parentData.submenu===this.mysubmenu&&(this.parentData.parent.focus(!1),this.cleanupExistingSubmenu(!0))},750)}render(k){super.render(k),!!this.element&&(this.item&&(this.item.classList.add("monaco-submenu-item"),this.item.tabIndex=0,this.item.setAttribute("aria-haspopup","true"),this.updateAriaExpanded("false"),this.submenuIndicator=S.append(this.item,S.$("span.submenu-indicator"+l.cssSelector)),this.submenuIndicator.setAttribute("aria-hidden","true")),this._register(S.addDisposableListener(this.element,S.EventType.KEY_UP,E=>{let T=new C.StandardKeyboardEvent(E);(T.equals(17)||T.equals(3))&&(S.EventHelper.stop(E,!0),this.createSubmenu(!0))})),this._register(S.addDisposableListener(this.element,S.EventType.KEY_DOWN,E=>{let T=new C.StandardKeyboardEvent(E);S.getActiveElement()===this.item&&(T.equals(17)||T.equals(3))&&S.EventHelper.stop(E,!0)})),this._register(S.addDisposableListener(this.element,S.EventType.MOUSE_OVER,E=>{this.mouseOver||(this.mouseOver=!0,this.showScheduler.schedule())})),this._register(S.addDisposableListener(this.element,S.EventType.MOUSE_LEAVE,E=>{this.mouseOver=!1})),this._register(S.addDisposableListener(this.element,S.EventType.FOCUS_OUT,E=>{this.element&&!S.isAncestor(S.getActiveElement(),this.element)&&this.hideScheduler.schedule()})),this._register(this.parentData.parent.onScroll(()=>{this.parentData.parent.focus(!1),this.cleanupExistingSubmenu(!1)})))}updateEnabled(){}onClick(k){S.EventHelper.stop(k,!0),this.cleanupExistingSubmenu(!1),this.createSubmenu(!0)}cleanupExistingSubmenu(k){if(this.parentData.submenu&&(k||this.parentData.submenu!==this.mysubmenu)){try{this.parentData.submenu.dispose()}catch(E){}this.parentData.submenu=void 0,this.updateAriaExpanded("false"),this.submenuContainer&&(this.submenuDisposables.clear(),this.submenuContainer=void 0)}}calculateSubmenuMenuLayout(k,E,T,O){const A={top:0,left:0};return A.left=c.layout(k.width,E.width,{position:O===h.Right?0:1,offset:T.left,size:T.width}),A.left>=T.left&&A.left{new C.StandardKeyboardEvent(R).equals(15)&&(S.EventHelper.stop(R,!0),this.parentData.parent.focus(),this.cleanupExistingSubmenu(!0))})),this.submenuDisposables.add(S.addDisposableListener(this.submenuContainer,S.EventType.KEY_DOWN,R=>{new C.StandardKeyboardEvent(R).equals(15)&&S.EventHelper.stop(R,!0)})),this.submenuDisposables.add(this.parentData.submenu.onDidCancel(()=>{this.parentData.parent.focus(),this.cleanupExistingSubmenu(!0)})),this.parentData.submenu.focus(k),this.mysubmenu=this.parentData.submenu}}updateAriaExpanded(k){var E;this.item&&((E=this.item)===null||E===void 0||E.setAttribute("aria-expanded",k))}applyStyle(){if(super.applyStyle(),!!this.menuStyle){const E=this.element&&this.element.classList.contains("focused")&&this.menuStyle.selectionForegroundColor?this.menuStyle.selectionForegroundColor:this.menuStyle.foregroundColor;this.submenuIndicator&&(this.submenuIndicator.style.color=E?`${E}`:""),this.parentData.submenu&&this.parentData.submenu.style(this.menuStyle)}}dispose(){super.dispose(),this.hideScheduler.dispose(),this.mysubmenu&&(this.mysubmenu.dispose(),this.mysubmenu=null),this.submenuContainer&&(this.submenuContainer=void 0)}}class v extends a.ActionViewItem{style(k){this.label&&(this.label.style.borderBottomColor=k.separatorColor?`${k.separatorColor}`:"")}}function y(I){const k=e.MENU_MNEMONIC_REGEX,E=k.exec(I);if(!E)return I;const T=!E[1];return I.replace(k,T?"$2$3":"").trim()}e.cleanMnemonic=y;let L=` +.monaco-menu { + font-size: 13px; + +} + +${u.formatRule(t)} +${u.formatRule(l)} + +.monaco-menu .monaco-action-bar { + text-align: right; + overflow: hidden; + white-space: nowrap; +} + +.monaco-menu .monaco-action-bar .actions-container { + display: flex; + margin: 0 auto; + padding: 0; + width: 100%; + justify-content: flex-end; +} + +.monaco-menu .monaco-action-bar.vertical .actions-container { + display: inline-block; +} + +.monaco-menu .monaco-action-bar.reverse .actions-container { + flex-direction: row-reverse; +} + +.monaco-menu .monaco-action-bar .action-item { + cursor: pointer; + display: inline-block; + transition: transform 50ms ease; + position: relative; /* DO NOT REMOVE - this is the key to preventing the ghosting icon bug in Chrome 42 */ +} + +.monaco-menu .monaco-action-bar .action-item.disabled { + cursor: default; +} + +.monaco-menu .monaco-action-bar.animated .action-item.active { + transform: scale(1.272019649, 1.272019649); /* 1.272019649 = \u221A\u03C6 */ +} + +.monaco-menu .monaco-action-bar .action-item .icon, +.monaco-menu .monaco-action-bar .action-item .codicon { + display: inline-block; +} + +.monaco-menu .monaco-action-bar .action-item .codicon { + display: flex; + align-items: center; +} + +.monaco-menu .monaco-action-bar .action-label { + font-size: 11px; + margin-right: 4px; +} + +.monaco-menu .monaco-action-bar .action-item.disabled .action-label, +.monaco-menu .monaco-action-bar .action-item.disabled .action-label:hover { + opacity: 0.4; +} + +/* Vertical actions */ + +.monaco-menu .monaco-action-bar.vertical { + text-align: left; +} + +.monaco-menu .monaco-action-bar.vertical .action-item { + display: block; +} + +.monaco-menu .monaco-action-bar.vertical .action-label.separator { + display: block; + border-bottom: 1px solid #bbb; + padding-top: 1px; + margin-left: .8em; + margin-right: .8em; +} + +.monaco-menu .secondary-actions .monaco-action-bar .action-label { + margin-left: 6px; +} + +/* Action Items */ +.monaco-menu .monaco-action-bar .action-item.select-container { + overflow: hidden; /* somehow the dropdown overflows its container, we prevent it here to not push */ + flex: 1; + max-width: 170px; + min-width: 60px; + display: flex; + align-items: center; + justify-content: center; + margin-right: 10px; +} + +.monaco-menu .monaco-action-bar.vertical { + margin-left: 0; + overflow: visible; +} + +.monaco-menu .monaco-action-bar.vertical .actions-container { + display: block; +} + +.monaco-menu .monaco-action-bar.vertical .action-item { + padding: 0; + transform: none; + display: flex; +} + +.monaco-menu .monaco-action-bar.vertical .action-item.active { + transform: none; +} + +.monaco-menu .monaco-action-bar.vertical .action-menu-item { + flex: 1 1 auto; + display: flex; + height: 2em; + align-items: center; + position: relative; +} + +.monaco-menu .monaco-action-bar.vertical .action-label { + flex: 1 1 auto; + text-decoration: none; + padding: 0 1em; + background: none; + font-size: 12px; + line-height: 1; +} + +.monaco-menu .monaco-action-bar.vertical .keybinding, +.monaco-menu .monaco-action-bar.vertical .submenu-indicator { + display: inline-block; + flex: 2 1 auto; + padding: 0 1em; + text-align: right; + font-size: 12px; + line-height: 1; +} + +.monaco-menu .monaco-action-bar.vertical .submenu-indicator { + height: 100%; +} + +.monaco-menu .monaco-action-bar.vertical .submenu-indicator.codicon { + font-size: 16px !important; + display: flex; + align-items: center; +} + +.monaco-menu .monaco-action-bar.vertical .submenu-indicator.codicon::before { + margin-left: auto; + margin-right: -20px; +} + +.monaco-menu .monaco-action-bar.vertical .action-item.disabled .keybinding, +.monaco-menu .monaco-action-bar.vertical .action-item.disabled .submenu-indicator { + opacity: 0.4; +} + +.monaco-menu .monaco-action-bar.vertical .action-label:not(.separator) { + display: inline-block; + box-sizing: border-box; + margin: 0; +} + +.monaco-menu .monaco-action-bar.vertical .action-item { + position: static; + overflow: visible; +} + +.monaco-menu .monaco-action-bar.vertical .action-item .monaco-submenu { + position: absolute; +} + +.monaco-menu .monaco-action-bar.vertical .action-label.separator { + padding: 0.5em 0 0 0; + margin-bottom: 0.5em; + width: 100%; + height: 0px !important; + margin-left: .8em !important; + margin-right: .8em !important; +} + +.monaco-menu .monaco-action-bar.vertical .action-label.separator.text { + padding: 0.7em 1em 0.1em 1em; + font-weight: bold; + opacity: 1; +} + +.monaco-menu .monaco-action-bar.vertical .action-label:hover { + color: inherit; +} + +.monaco-menu .monaco-action-bar.vertical .menu-item-check { + position: absolute; + visibility: hidden; + width: 1em; + height: 100%; +} + +.monaco-menu .monaco-action-bar.vertical .action-menu-item.checked .menu-item-check { + visibility: visible; + display: flex; + align-items: center; + justify-content: center; +} + +/* Context Menu */ + +.context-view.monaco-menu-container { + outline: 0; + border: none; + animation: fadeIn 0.083s linear; + -webkit-app-region: no-drag; +} + +.context-view.monaco-menu-container :focus, +.context-view.monaco-menu-container .monaco-action-bar.vertical:focus, +.context-view.monaco-menu-container .monaco-action-bar.vertical :focus { + outline: 0; +} + +.monaco-menu .monaco-action-bar.vertical .action-item { + border: thin solid transparent; /* prevents jumping behaviour on hover or focus */ +} + + +/* High Contrast Theming */ +:host-context(.hc-black) .context-view.monaco-menu-container { + box-shadow: none; +} + +:host-context(.hc-black) .monaco-menu .monaco-action-bar.vertical .action-item.focused { + background: none; +} + +/* Vertical Action Bar Styles */ + +.monaco-menu .monaco-action-bar.vertical { + padding: .5em 0; +} + +.monaco-menu .monaco-action-bar.vertical .action-menu-item { + height: 1.8em; +} + +.monaco-menu .monaco-action-bar.vertical .action-label:not(.separator), +.monaco-menu .monaco-action-bar.vertical .keybinding { + font-size: inherit; + padding: 0 2em; +} + +.monaco-menu .monaco-action-bar.vertical .menu-item-check { + font-size: inherit; + width: 2em; +} + +.monaco-menu .monaco-action-bar.vertical .action-label.separator { + font-size: inherit; + padding: 0.2em 0 0 0; + margin-bottom: 0.2em; +} + +:host-context(.linux) .monaco-menu .monaco-action-bar.vertical .action-label.separator { + margin-left: 0; + margin-right: 0; +} + +.monaco-menu .monaco-action-bar.vertical .submenu-indicator { + font-size: 60%; + padding: 0 1.8em; +} + +:host-context(.linux) .monaco-menu .monaco-action-bar.vertical .submenu-indicator { + height: 100%; + mask-size: 10px 10px; + -webkit-mask-size: 10px 10px; +} + +.monaco-menu .action-item { + cursor: default; +} + +/* Arrows */ +.monaco-scrollable-element > .scrollbar > .scra { + cursor: pointer; + font-size: 11px !important; +} + +.monaco-scrollable-element > .visible { + opacity: 1; + + /* Background rule added for IE9 - to allow clicks on dom node */ + background:rgba(0,0,0,0); + + transition: opacity 100ms linear; +} +.monaco-scrollable-element > .invisible { + opacity: 0; + pointer-events: none; +} +.monaco-scrollable-element > .invisible.fade { + transition: opacity 800ms linear; +} + +/* Scrollable Content Inset Shadow */ +.monaco-scrollable-element > .shadow { + position: absolute; + display: none; +} +.monaco-scrollable-element > .shadow.top { + display: block; + top: 0; + left: 3px; + height: 3px; + width: 100%; + box-shadow: #DDD 0 6px 6px -6px inset; +} +.monaco-scrollable-element > .shadow.left { + display: block; + top: 3px; + left: 0; + height: 100%; + width: 3px; + box-shadow: #DDD 6px 0 6px -6px inset; +} +.monaco-scrollable-element > .shadow.top-left-corner { + display: block; + top: 0; + left: 0; + height: 3px; + width: 3px; +} +.monaco-scrollable-element > .shadow.top.left { + box-shadow: #DDD 6px 6px 6px -6px inset; +} + +/* ---------- Default Style ---------- */ + +:host-context(.vs) .monaco-scrollable-element > .scrollbar > .slider { + background: rgba(100, 100, 100, .4); +} +:host-context(.vs-dark) .monaco-scrollable-element > .scrollbar > .slider { + background: rgba(121, 121, 121, .4); +} +:host-context(.hc-black) .monaco-scrollable-element > .scrollbar > .slider { + background: rgba(111, 195, 223, .6); +} + +.monaco-scrollable-element > .scrollbar > .slider:hover { + background: rgba(100, 100, 100, .7); +} +:host-context(.hc-black) .monaco-scrollable-element > .scrollbar > .slider:hover { + background: rgba(111, 195, 223, .8); +} + +.monaco-scrollable-element > .scrollbar > .slider.active { + background: rgba(0, 0, 0, .6); +} +:host-context(.vs-dark) .monaco-scrollable-element > .scrollbar > .slider.active { + background: rgba(191, 191, 191, .4); +} +:host-context(.hc-black) .monaco-scrollable-element > .scrollbar > .slider.active { + background: rgba(111, 195, 223, 1); +} + +:host-context(.vs-dark) .monaco-scrollable-element .shadow.top { + box-shadow: none; +} + +:host-context(.vs-dark) .monaco-scrollable-element .shadow.left { + box-shadow: #000 6px 0 6px -6px inset; +} + +:host-context(.vs-dark) .monaco-scrollable-element .shadow.top.left { + box-shadow: #000 6px 6px 6px -6px inset; +} + +:host-context(.hc-black) .monaco-scrollable-element .shadow.top { + box-shadow: none; +} + +:host-context(.hc-black) .monaco-scrollable-element .shadow.left { + box-shadow: none; +} + +:host-context(.hc-black) .monaco-scrollable-element .shadow.top.left { + box-shadow: none; +} +`}),define(Q[435],J([0,1,7,177,2,56,82,50,125]),function(q,e,b,N,M,w,S,C){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.QuickInputBox=void 0;const d=b.$;class g extends M.Disposable{constructor(c){super();this.parent=c,this.onKeyDown=o=>b.addDisposableListener(this.inputBox.inputElement,b.EventType.KEY_DOWN,s=>{o(new w.StandardKeyboardEvent(s))}),this.onMouseDown=o=>b.addDisposableListener(this.inputBox.inputElement,b.EventType.MOUSE_DOWN,s=>{o(new C.StandardMouseEvent(s))}),this.onDidChange=o=>this.inputBox.onDidChange(o),this.container=b.append(this.parent,d(".quick-input-box")),this.inputBox=this._register(new N.InputBox(this.container,void 0))}get value(){return this.inputBox.value}set value(c){this.inputBox.value=c}select(c=null){this.inputBox.select(c)}isSelectionAtEnd(){return this.inputBox.isSelectionAtEnd()}get placeholder(){return this.inputBox.inputElement.getAttribute("placeholder")||""}set placeholder(c){this.inputBox.setPlaceHolder(c)}get ariaLabel(){return this.inputBox.getAriaLabel()}set ariaLabel(c){this.inputBox.setAriaLabel(c)}get password(){return this.inputBox.inputElement.type==="password"}set password(c){this.inputBox.inputElement.type=c?"password":"text"}setAttribute(c,o){this.inputBox.inputElement.setAttribute(c,o)}removeAttribute(c){this.inputBox.inputElement.removeAttribute(c)}showDecoration(c){c===S.default.Ignore?this.inputBox.hideMessage():this.inputBox.showMessage({type:c===S.default.Info?1:c===S.default.Warning?2:3,content:""})}stylesForType(c){return this.inputBox.stylesForType(c===S.default.Info?1:c===S.default.Warning?2:3)}setFocus(){this.inputBox.focus()}layout(){this.inputBox.layout()}style(c){this.inputBox.style(c)}}e.QuickInputBox=g}),define(Q[436],J([4,5]),function(q,e){return q.create("vs/base/common/errorMessage",e)}),define(Q[437],J([0,1,436,20,19]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.toErrorMessage=void 0;function w(g,p){return p&&(g.stack||g.stacktrace)?b.localize(0,null,C(g),S(g.stack)||S(g.stacktrace)):C(g)}function S(g){return Array.isArray(g)?g.join(` +`):g}function C(g){return typeof g.code=="string"&&typeof g.errno=="number"&&typeof g.syscall=="string"?b.localize(1,null,g.message):g.message||b.localize(2,null)}function d(g=null,p=!1){if(!g)return b.localize(3,null);if(Array.isArray(g)){const c=M.coalesce(g),o=d(c[0],p);return c.length>1?b.localize(4,null,o,c.length):o}if(N.isString(g))return g;if(g.detail){const c=g.detail;if(c.error)return w(c.error,p);if(c.exception)return w(c.exception,p)}return g.stack?w(g,p):g.message?g.message:b.localize(5,null)}e.toErrorMessage=d}),define(Q[438],J([4,5]),function(q,e){return q.create("vs/base/common/keybindingLabels",e)}),define(Q[235],J([0,1,438]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AriaLabelProvider=e.UILabelProvider=e.ModifierLabelProvider=void 0;class N{constructor(S,C,d=C){this.modifierLabels=[null],this.modifierLabels[2]=S,this.modifierLabels[1]=C,this.modifierLabels[3]=d}toLabel(S,C,d){if(C.length===0)return null;const g=[];for(let p=0,c=C.length;p{k.checkbox.offsetParent||D.preventDefault()})),k.checkbox=b.append(E,t("input.quick-input-list-checkbox")),k.checkbox.type="checkbox",k.toDisposeTemplate.push(b.addStandardDisposableListener(k.checkbox,b.EventType.CHANGE,D=>{k.element.checked=k.checkbox.checked}));const T=b.append(E,t(".quick-input-list-rows")),O=b.append(T,t(".quick-input-list-row")),A=b.append(T,t(".quick-input-list-row"));k.label=new d.IconLabel(O,{supportHighlights:!0,supportDescriptionHighlights:!0,supportIcons:!0});const B=b.append(O,t(".quick-input-list-entry-keybinding"));k.keybinding=new i.KeybindingLabel(B,o.OS);const F=b.append(A,t(".quick-input-list-label-meta"));return k.detail=new g.HighlightedLabel(F,!0),k.separator=b.append(k.entry,t(".quick-input-list-separator")),k.actionBar=new s.ActionBar(k.entry),k.actionBar.domNode.classList.add("quick-input-list-entry-action-bar"),k.toDisposeTemplate.push(k.actionBar),k}renderElement(I,k,E){E.toDisposeElement=N.dispose(E.toDisposeElement),E.element=I,E.checkbox.checked=I.checked,E.toDisposeElement.push(I.onChecked(D=>E.checkbox.checked=D));const{labelHighlights:T,descriptionHighlights:O,detailHighlights:A}=I,B=Object.create(null);B.matches=T||[],B.descriptionTitle=I.saneDescription,B.descriptionMatches=O||[],B.extraClasses=I.item.iconClasses,B.italic=I.item.italic,B.strikethrough=I.item.strikethrough,E.label.setLabel(I.saneLabel,I.saneDescription,B),E.keybinding.set(I.item.keybinding),E.detail.set(I.saneDetail,A),I.separator&&I.separator.label?(E.separator.textContent=I.separator.label,E.separator.style.display=""):E.separator.style.display="none",E.entry.classList.toggle("quick-input-list-separator-border",!!I.separator),E.actionBar.clear();const F=I.item.buttons;F&&F.length?(E.actionBar.push(F.map((D,R)=>{let W=D.iconClass||(D.iconPath?u.getIconClass(D.iconPath):void 0);D.alwaysVisible&&(W=W?`${W} always-visible`:"always-visible");const x=new a.Action(`id-${R}`,"",W,!0,()=>Ie(this,void 0,void 0,function*(){I.fireButtonTriggered({button:D,item:I.item})}));return x.tooltip=D.tooltip||"",x}),{icon:!0,label:!1}),E.entry.classList.add("has-actions")):E.entry.classList.remove("has-actions")}disposeElement(I,k,E){E.toDisposeElement=N.dispose(E.toDisposeElement)}disposeTemplate(I){I.toDisposeElement=N.dispose(I.toDisposeElement),I.toDisposeTemplate=N.dispose(I.toDisposeTemplate)}}h.ID="listelement";class m{getHeight(I){return I.saneDetail?44:22}getTemplateId(I){return h.ID}}var _;(function(L){L[L.First=1]="First",L[L.Second=2]="Second",L[L.Last=3]="Last",L[L.Next=4]="Next",L[L.Previous=5]="Previous",L[L.NextPage=6]="NextPage",L[L.PreviousPage=7]="PreviousPage"})(_=e.QuickInputListFocus||(e.QuickInputListFocus={}));class f{constructor(I,k,E){this.parent=I,this.inputElements=[],this.elements=[],this.elementsToIndexes=new Map,this.matchOnDescription=!1,this.matchOnDetail=!1,this.matchOnLabel=!0,this.matchOnMeta=!0,this.sortByLabel=!0,this._onChangedAllVisibleChecked=new S.Emitter,this.onChangedAllVisibleChecked=this._onChangedAllVisibleChecked.event,this._onChangedCheckedCount=new S.Emitter,this.onChangedCheckedCount=this._onChangedCheckedCount.event,this._onChangedVisibleCount=new S.Emitter,this.onChangedVisibleCount=this._onChangedVisibleCount.event,this._onChangedCheckedElements=new S.Emitter,this.onChangedCheckedElements=this._onChangedCheckedElements.event,this._onButtonTriggered=new S.Emitter,this.onButtonTriggered=this._onButtonTriggered.event,this._onKeyDown=new S.Emitter,this.onKeyDown=this._onKeyDown.event,this._onLeave=new S.Emitter,this.onLeave=this._onLeave.event,this._fireCheckedEvents=!0,this.elementDisposables=[],this.disposables=[],this.id=k,this.container=b.append(this.parent,t(".quick-input-list"));const T=new m,O=new y;this.list=E.createList("QuickInput",this.container,T,[new h],{identityProvider:{getId:A=>A.saneLabel},setRowLineHeight:!1,multipleSelectionSupport:!1,horizontalScrolling:!1,accessibilityProvider:O}),this.list.getHTMLElement().id=k,this.disposables.push(this.list),this.disposables.push(this.list.onKeyDown(A=>{const B=new C.StandardKeyboardEvent(A);switch(B.keyCode){case 10:this.toggleCheckbox();break;case 31:(o.isMacintosh?A.metaKey:A.ctrlKey)&&this.list.setFocus(c.range(this.list.length));break;case 16:const F=this.list.getFocus();F.length===1&&F[0]===0&&this._onLeave.fire();break;case 18:const D=this.list.getFocus();D.length===1&&D[0]===this.list.length-1&&this._onLeave.fire();break}this._onKeyDown.fire(B)})),this.disposables.push(this.list.onMouseDown(A=>{A.browserEvent.button!==2&&A.browserEvent.preventDefault()})),this.disposables.push(b.addDisposableListener(this.container,b.EventType.CLICK,A=>{(A.x||A.y)&&this._onLeave.fire()})),this.disposables.push(this.list.onMouseMiddleClick(A=>{this._onLeave.fire()})),this.disposables.push(this.list.onContextMenu(A=>{typeof A.index=="number"&&(A.browserEvent.preventDefault(),this.list.setSelection([A.index]))})),this.disposables.push(this._onChangedAllVisibleChecked,this._onChangedCheckedCount,this._onChangedVisibleCount,this._onChangedCheckedElements,this._onButtonTriggered,this._onLeave,this._onKeyDown)}get onDidChangeFocus(){return S.Event.map(this.list.onDidChangeFocus,I=>I.elements.map(k=>k.item))}get onDidChangeSelection(){return S.Event.map(this.list.onDidChangeSelection,I=>({items:I.elements.map(k=>k.item),event:I.browserEvent}))}getAllVisibleChecked(){return this.allVisibleChecked(this.elements,!1)}allVisibleChecked(I,k=!0){for(let E=0,T=I.length;E{k.hidden||(k.checked=I)})}finally{this._fireCheckedEvents=!0,this.fireCheckedEvents()}}setElements(I){this.elementDisposables=N.dispose(this.elementDisposables);const k=E=>this.fireButtonTriggered(E);this.inputElements=I,this.elements=I.reduce((E,T,O)=>{var A,B,F;if(T.type!=="separator"){const D=O&&I[O-1],R=T.label&&T.label.replace(/\r?\n/g," "),W=T.meta&&T.meta.replace(/\r?\n/g," "),x=T.description&&T.description.replace(/\r?\n/g," "),K=T.detail&&T.detail.replace(/\r?\n/g," "),Y=T.ariaLabel||[R,x,K].map(ee=>ee&&M.parseLabelWithIcons(ee).text).filter(ee=>!!ee).join(", ");E.push(new l({index:O,item:T,saneLabel:R,saneMeta:W,saneAriaLabel:Y,saneDescription:x,saneDetail:K,labelHighlights:(A=T.highlights)===null||A===void 0?void 0:A.label,descriptionHighlights:(B=T.highlights)===null||B===void 0?void 0:B.description,detailHighlights:(F=T.highlights)===null||F===void 0?void 0:F.detail,checked:!1,separator:D&&D.type==="separator"?D:void 0,fireButtonTriggered:k}))}return E},[]),this.elementDisposables.push(...this.elements),this.elementDisposables.push(...this.elements.map(E=>E.onChecked(()=>this.fireCheckedEvents()))),this.elementsToIndexes=this.elements.reduce((E,T,O)=>(E.set(T.item,O),E),new Map),this.list.splice(0,this.list.length),this.list.splice(0,this.list.length,this.elements),this._onChangedVisibleCount.fire(this.elements.length)}getFocusedElements(){return this.list.getFocusedElements().map(I=>I.item)}setFocusedElements(I){if(this.list.setFocus(I.filter(k=>this.elementsToIndexes.has(k)).map(k=>this.elementsToIndexes.get(k))),I.length>0){const k=this.list.getFocus()[0];typeof k=="number"&&this.list.reveal(k)}}getActiveDescendant(){return this.list.getHTMLElement().getAttribute("aria-activedescendant")}setSelectedElements(I){this.list.setSelection(I.filter(k=>this.elementsToIndexes.has(k)).map(k=>this.elementsToIndexes.get(k)))}getCheckedElements(){return this.elements.filter(I=>I.checked).map(I=>I.item)}setCheckedElements(I){try{this._fireCheckedEvents=!1;const k=new Set;for(const E of I)k.add(E);for(const E of this.elements)E.checked=k.has(E.item)}finally{this._fireCheckedEvents=!0,this.fireCheckedEvents()}}set enabled(I){this.list.getHTMLElement().style.pointerEvents=I?"":"none"}focus(I){if(!!this.list.length){switch(I===_.Next&&this.list.getFocus()[0]===this.list.length-1&&(I=_.First),I===_.Previous&&this.list.getFocus()[0]===0&&(I=_.Last),I===_.Second&&this.list.length<2&&(I=_.First),I){case _.First:this.list.focusFirst();break;case _.Second:this.list.focusNth(1);break;case _.Last:this.list.focusLast();break;case _.Next:this.list.focusNext();break;case _.Previous:this.list.focusPrevious();break;case _.NextPage:this.list.focusNextPage();break;case _.PreviousPage:this.list.focusPreviousPage();break}const k=this.list.getFocus()[0];typeof k=="number"&&this.list.reveal(k)}}clearFocus(){this.list.setFocus([])}domFocus(){this.list.domFocus()}layout(I){this.list.getHTMLElement().style.maxHeight=I?`calc(${Math.floor(I/44)*44}px)`:"",this.list.layout()}filter(I){if(!(this.sortByLabel||this.matchOnLabel||this.matchOnDescription||this.matchOnDetail))return this.list.layout(),!1;I=I.trim(),!I||!(this.matchOnLabel||this.matchOnDescription||this.matchOnDetail)?this.elements.forEach(E=>{E.labelHighlights=void 0,E.descriptionHighlights=void 0,E.detailHighlights=void 0,E.hidden=!1;const T=E.index&&this.inputElements[E.index-1];E.separator=T&&T.type==="separator"?T:void 0}):this.elements.forEach(E=>{const T=this.matchOnLabel?r.withNullAsUndefined(M.matchesFuzzyIconAware(I,M.parseLabelWithIcons(E.saneLabel))):void 0,O=this.matchOnDescription?r.withNullAsUndefined(M.matchesFuzzyIconAware(I,M.parseLabelWithIcons(E.saneDescription||""))):void 0,A=this.matchOnDetail?r.withNullAsUndefined(M.matchesFuzzyIconAware(I,M.parseLabelWithIcons(E.saneDetail||""))):void 0,B=this.matchOnMeta?r.withNullAsUndefined(M.matchesFuzzyIconAware(I,M.parseLabelWithIcons(E.saneMeta||""))):void 0;T||O||A||B?(E.labelHighlights=T,E.descriptionHighlights=O,E.detailHighlights=A,E.hidden=!1):(E.labelHighlights=void 0,E.descriptionHighlights=void 0,E.detailHighlights=void 0,E.hidden=!E.item.alwaysShow),E.separator=void 0});const k=this.elements.filter(E=>!E.hidden);if(this.sortByLabel&&I){const E=I.toLowerCase();k.sort((T,O)=>v(T,O,E))}return this.elementsToIndexes=k.reduce((E,T,O)=>(E.set(T.item,O),E),new Map),this.list.splice(0,this.list.length,k),this.list.setFocus([]),this.list.layout(),this._onChangedAllVisibleChecked.fire(this.getAllVisibleChecked()),this._onChangedVisibleCount.fire(k.length),!0}toggleCheckbox(){try{this._fireCheckedEvents=!1;const I=this.list.getFocusedElements(),k=this.allVisibleChecked(I);for(const E of I)E.checked=!k}finally{this._fireCheckedEvents=!0,this.fireCheckedEvents()}}display(I){this.container.style.display=I?"":"none"}isDisplayed(){return this.container.style.display!=="none"}dispose(){this.elementDisposables=N.dispose(this.elementDisposables),this.disposables=N.dispose(this.disposables)}fireCheckedEvents(){this._fireCheckedEvents&&(this._onChangedAllVisibleChecked.fire(this.getAllVisibleChecked()),this._onChangedCheckedCount.fire(this.getCheckedCount()),this._onChangedCheckedElements.fire(this.getCheckedElements()))}fireButtonTriggered(I){this._onButtonTriggered.fire(I)}style(I){this.list.style(I)}}Me([p.memoize],f.prototype,"onDidChangeFocus",null),Me([p.memoize],f.prototype,"onDidChangeSelection",null),e.QuickInputList=f;function v(L,I,k){const E=L.labelHighlights||[],T=I.labelHighlights||[];return E.length&&!T.length?-1:!E.length&&T.length?1:E.length===0&&T.length===0?0:w.compareAnything(L.saneLabel,I.saneLabel,k)}class y{getWidgetAriaLabel(){return n.localize(0,null)}getAriaLabel(I){return I.saneAriaLabel}getWidgetRole(){return"listbox"}getRole(){return"option"}}}),define(Q[443],J([0,1,202,7,23,442,435,56,440,205,309,6,297,2,82,83,48,19,15,211,27,8,103,125]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l,h,m){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.QuickInputController=void 0;const _=N.$,v={iconClass:l.registerCodicon("quick-input-back",l.Codicon.arrowLeft).classNames,tooltip:d.localize(0,null),handle:-1};class y extends s.Disposable{constructor(E){super();this.ui=E,this.visible=!1,this._enabled=!0,this._busy=!1,this._ignoreFocusOut=!1,this._buttons=[],this.buttonsUpdated=!1,this.onDidTriggerButtonEmitter=this._register(new c.Emitter),this.onDidHideEmitter=this._register(new c.Emitter),this.onDisposeEmitter=this._register(new c.Emitter),this.visibleDisposables=this._register(new s.DisposableStore),this.onDidHide=this.onDidHideEmitter.event}get title(){return this._title}set title(E){this._title=E,this.update()}get description(){return this._description}set description(E){this._description=E,this.update()}get step(){return this._steps}set step(E){this._steps=E,this.update()}get totalSteps(){return this._totalSteps}set totalSteps(E){this._totalSteps=E,this.update()}get enabled(){return this._enabled}set enabled(E){this._enabled=E,this.update()}get contextKey(){return this._contextKey}set contextKey(E){this._contextKey=E,this.update()}get busy(){return this._busy}set busy(E){this._busy=E,this.update()}get ignoreFocusOut(){return this._ignoreFocusOut}set ignoreFocusOut(E){this._ignoreFocusOut=E,this.update()}get buttons(){return this._buttons}set buttons(E){this._buttons=E,this.buttonsUpdated=!0,this.update()}show(){this.visible||(this.visibleDisposables.add(this.ui.onDidTriggerButton(E=>{this.buttons.indexOf(E)!==-1&&this.onDidTriggerButtonEmitter.fire(E)})),this.ui.show(this),this.visible=!0,this.update())}hide(){!this.visible||this.ui.hide()}didHide(){this.visible=!1,this.visibleDisposables.clear(),this.onDidHideEmitter.fire()}update(){if(!!this.visible){const E=this.getTitle();E&&this.ui.title.textContent!==E?this.ui.title.textContent=E:!E&&this.ui.title.innerHTML!==" "&&(this.ui.title.innerText="\xA0;");const T=this.getDescription();if(this.ui.description1.textContent!==T&&(this.ui.description1.textContent=T),this.ui.description2.textContent!==T&&(this.ui.description2.textContent=T),this.busy&&!this.busyDelay&&(this.busyDelay=new n.TimeoutTimer,this.busyDelay.setIfNotSet(()=>{this.visible&&this.ui.progressBar.infinite()},800)),!this.busy&&this.busyDelay&&(this.ui.progressBar.stop(),this.busyDelay.cancel(),this.busyDelay=void 0),this.buttonsUpdated){this.buttonsUpdated=!1,this.ui.leftActionBar.clear();const O=this.buttons.filter(B=>B===v);this.ui.leftActionBar.push(O.map((B,F)=>{const D=new r.Action(`id-${F}`,"",B.iconClass||t.getIconClass(B.iconPath),!0,()=>Ie(this,void 0,void 0,function*(){this.onDidTriggerButtonEmitter.fire(B)}));return D.tooltip=B.tooltip||"",D}),{icon:!0,label:!1}),this.ui.rightActionBar.clear();const A=this.buttons.filter(B=>B!==v);this.ui.rightActionBar.push(A.map((B,F)=>{const D=new r.Action(`id-${F}`,"",B.iconClass||t.getIconClass(B.iconPath),!0,()=>Ie(this,void 0,void 0,function*(){this.onDidTriggerButtonEmitter.fire(B)}));return D.tooltip=B.tooltip||"",D}),{icon:!0,label:!1})}this.ui.ignoreFocusOut=this.ignoreFocusOut,this.ui.setEnabled(this.enabled),this.ui.setContextKey(this.contextKey)}}getTitle(){return this.title&&this.step?`${this.title} (${this.getSteps()})`:this.title?this.title:this.step?this.getSteps():""}getDescription(){return this.description||""}getSteps(){return this.step&&this.totalSteps?d.localize(1,null,this.step,this.totalSteps):this.step?String(this.step):""}showMessageDecoration(E){if(this.ui.inputBox.showDecoration(E),E===a.default.Error){const T=this.ui.inputBox.stylesForType(E);this.ui.message.style.color=T.foreground?`${T.foreground}`:"",this.ui.message.style.backgroundColor=T.background?`${T.background}`:"",this.ui.message.style.border=T.border?`1px solid ${T.border}`:"",this.ui.message.style.paddingBottom="4px"}else this.ui.message.style.color="",this.ui.message.style.backgroundColor="",this.ui.message.style.border="",this.ui.message.style.paddingBottom=""}dispose(){this.hide(),this.onDisposeEmitter.fire(),super.dispose()}}class L extends y{constructor(){super(...arguments);this._value="",this.onDidChangeValueEmitter=this._register(new c.Emitter),this.onDidAcceptEmitter=this._register(new c.Emitter),this.onDidCustomEmitter=this._register(new c.Emitter),this._items=[],this.itemsUpdated=!1,this._canSelectMany=!1,this._canAcceptInBackground=!1,this._matchOnDescription=!1,this._matchOnDetail=!1,this._matchOnLabel=!0,this._sortByLabel=!0,this._autoFocusOnList=!0,this._itemActivation=this.ui.isScreenReaderOptimized()?b.ItemActivation.NONE:b.ItemActivation.FIRST,this._activeItems=[],this.activeItemsUpdated=!1,this.activeItemsToConfirm=[],this.onDidChangeActiveEmitter=this._register(new c.Emitter),this._selectedItems=[],this.selectedItemsUpdated=!1,this.selectedItemsToConfirm=[],this.onDidChangeSelectionEmitter=this._register(new c.Emitter),this.onDidTriggerItemButtonEmitter=this._register(new c.Emitter),this.valueSelectionUpdated=!0,this._ok="default",this._customButton=!1,this.filterValue=E=>E,this.onDidChangeValue=this.onDidChangeValueEmitter.event,this.onDidAccept=this.onDidAcceptEmitter.event,this.onDidChangeActive=this.onDidChangeActiveEmitter.event,this.onDidChangeSelection=this.onDidChangeSelectionEmitter.event,this.onDidTriggerItemButton=this.onDidTriggerItemButtonEmitter.event}get quickNavigate(){return this._quickNavigate}set quickNavigate(E){this._quickNavigate=E,this.update()}get value(){return this._value}set value(E){this._value=E||"",this.update()}set ariaLabel(E){this._ariaLabel=E,this.update()}get ariaLabel(){return this._ariaLabel}get placeholder(){return this._placeholder}set placeholder(E){this._placeholder=E,this.update()}get items(){return this._items}set items(E){this._items=E,this.itemsUpdated=!0,this.update()}get canSelectMany(){return this._canSelectMany}set canSelectMany(E){this._canSelectMany=E,this.update()}get canAcceptInBackground(){return this._canAcceptInBackground}set canAcceptInBackground(E){this._canAcceptInBackground=E}get matchOnDescription(){return this._matchOnDescription}set matchOnDescription(E){this._matchOnDescription=E,this.update()}get matchOnDetail(){return this._matchOnDetail}set matchOnDetail(E){this._matchOnDetail=E,this.update()}get matchOnLabel(){return this._matchOnLabel}set matchOnLabel(E){this._matchOnLabel=E,this.update()}get sortByLabel(){return this._sortByLabel}set sortByLabel(E){this._sortByLabel=E,this.update()}get autoFocusOnList(){return this._autoFocusOnList}set autoFocusOnList(E){this._autoFocusOnList=E,this.update()}get itemActivation(){return this._itemActivation}set itemActivation(E){this._itemActivation=E}get activeItems(){return this._activeItems}set activeItems(E){this._activeItems=E,this.activeItemsUpdated=!0,this.update()}get selectedItems(){return this._selectedItems}set selectedItems(E){this._selectedItems=E,this.selectedItemsUpdated=!0,this.update()}get keyMods(){return this._quickNavigate?b.NO_KEY_MODS:this.ui.keyMods}set valueSelection(E){this._valueSelection=E,this.valueSelectionUpdated=!0,this.update()}get validationMessage(){return this._validationMessage}set validationMessage(E){this._validationMessage=E,this.update()}get customButton(){return this._customButton}set customButton(E){this._customButton=E,this.update()}get customLabel(){return this._customButtonLabel}set customLabel(E){this._customButtonLabel=E,this.update()}get customHover(){return this._customButtonHover}set customHover(E){this._customButtonHover=E,this.update()}get ok(){return this._ok}set ok(E){this._ok=E,this.update()}get hideInput(){return!!this._hideInput}set hideInput(E){this._hideInput=E,this.update()}trySelectFirst(){this.autoFocusOnList&&(this.canSelectMany||this.ui.list.focus(w.QuickInputListFocus.First))}show(){this.visible||(this.visibleDisposables.add(this.ui.inputBox.onDidChange(E=>{E!==this.value&&(this._value=E,this.ui.list.filter(this.filterValue(this.ui.inputBox.value))&&this.trySelectFirst(),this.onDidChangeValueEmitter.fire(E))})),this.visibleDisposables.add(this.ui.inputBox.onMouseDown(E=>{this.autoFocusOnList||this.ui.list.clearFocus()})),this.visibleDisposables.add((this._hideInput?this.ui.list:this.ui.inputBox).onKeyDown(E=>{switch(E.keyCode){case 18:this.ui.list.focus(w.QuickInputListFocus.Next),this.canSelectMany&&this.ui.list.domFocus(),N.EventHelper.stop(E,!0);break;case 16:this.ui.list.getFocusedElements().length?this.ui.list.focus(w.QuickInputListFocus.Previous):this.ui.list.focus(w.QuickInputListFocus.Last),this.canSelectMany&&this.ui.list.domFocus(),N.EventHelper.stop(E,!0);break;case 12:this.ui.list.focus(w.QuickInputListFocus.NextPage),this.canSelectMany&&this.ui.list.domFocus(),N.EventHelper.stop(E,!0);break;case 11:this.ui.list.focus(w.QuickInputListFocus.PreviousPage),this.canSelectMany&&this.ui.list.domFocus(),N.EventHelper.stop(E,!0);break;case 17:if(!this._canAcceptInBackground||!this.ui.inputBox.isSelectionAtEnd())return;this.activeItems[0]&&(this._selectedItems=[this.activeItems[0]],this.onDidChangeSelectionEmitter.fire(this.selectedItems),this.onDidAcceptEmitter.fire({inBackground:!0}));break;case 14:(E.ctrlKey||E.metaKey)&&!E.shiftKey&&!E.altKey&&(this.ui.list.focus(w.QuickInputListFocus.First),N.EventHelper.stop(E,!0));break;case 13:(E.ctrlKey||E.metaKey)&&!E.shiftKey&&!E.altKey&&(this.ui.list.focus(w.QuickInputListFocus.Last),N.EventHelper.stop(E,!0));break}})),this.visibleDisposables.add(this.ui.onDidAccept(()=>{!this.canSelectMany&&this.activeItems[0]&&(this._selectedItems=[this.activeItems[0]],this.onDidChangeSelectionEmitter.fire(this.selectedItems)),this.onDidAcceptEmitter.fire({inBackground:!1})})),this.visibleDisposables.add(this.ui.onDidCustom(()=>{this.onDidCustomEmitter.fire()})),this.visibleDisposables.add(this.ui.list.onDidChangeFocus(E=>{this.activeItemsUpdated||this.activeItemsToConfirm!==this._activeItems&&i.equals(E,this._activeItems,(T,O)=>T===O)||(this._activeItems=E,this.onDidChangeActiveEmitter.fire(E))})),this.visibleDisposables.add(this.ui.list.onDidChangeSelection(({items:E,event:T})=>{if(this.canSelectMany){E.length&&this.ui.list.setSelectedElements([]);return}this.selectedItemsToConfirm!==this._selectedItems&&i.equals(E,this._selectedItems,(O,A)=>O===A)||(this._selectedItems=E,this.onDidChangeSelectionEmitter.fire(E),E.length&&this.onDidAcceptEmitter.fire({inBackground:T instanceof MouseEvent&&T.button===1}))})),this.visibleDisposables.add(this.ui.list.onChangedCheckedElements(E=>{!this.canSelectMany||this.selectedItemsToConfirm!==this._selectedItems&&i.equals(E,this._selectedItems,(T,O)=>T===O)||(this._selectedItems=E,this.onDidChangeSelectionEmitter.fire(E))})),this.visibleDisposables.add(this.ui.list.onButtonTriggered(E=>this.onDidTriggerItemButtonEmitter.fire(E))),this.visibleDisposables.add(this.registerQuickNavigation()),this.valueSelectionUpdated=!0),super.show()}registerQuickNavigation(){return N.addDisposableListener(this.ui.container,N.EventType.KEY_UP,E=>{if(!(this.canSelectMany||!this._quickNavigate)){const T=new C.StandardKeyboardEvent(E),O=T.keyCode;this._quickNavigate.keybindings.some(F=>{const[D,R]=F.getParts();return R?!1:D.shiftKey&&O===4?!(T.ctrlKey||T.altKey||T.metaKey):!!(D.altKey&&O===6||D.ctrlKey&&O===5||D.metaKey&&O===57)})&&(this.activeItems[0]&&(this._selectedItems=[this.activeItems[0]],this.onDidChangeSelectionEmitter.fire(this.selectedItems),this.onDidAcceptEmitter.fire({inBackground:!1})),this._quickNavigate=void 0)}})}update(){if(!!this.visible){let E=!1,T=!1;!!this._hideInput&&this._items.length>0&&(this.ui.isScreenReaderOptimized()?T=!0:E=!0),this.ui.container.classList.toggle("hidden-input",E&&!this.description);const O={title:!!this.title||!!this.step||!!this.buttons.length,description:!!this.description,checkAll:this.canSelectMany&&!this._hideCheckAll,checkBox:this.canSelectMany,inputBox:!E,progressBar:!E,visibleCount:!0,count:this.canSelectMany,ok:this.ok==="default"?this.canSelectMany:this.ok,list:!0,message:!!this.validationMessage,customButton:this.customButton};if(this.ui.setVisibilities(O),super.update(),this.ui.inputBox.value!==this.value&&(this.ui.inputBox.value=this.value),this.valueSelectionUpdated&&(this.valueSelectionUpdated=!1,this.ui.inputBox.select(this._valueSelection&&{start:this._valueSelection[0],end:this._valueSelection[1]})),this.ui.inputBox.placeholder!==(this.placeholder||"")&&(this.ui.inputBox.placeholder=this.placeholder||""),T)this.ui.inputBox.ariaLabel="";else{const B=this.ariaLabel||this.placeholder||L.DEFAULT_ARIA_LABEL;this.ui.inputBox.ariaLabel!==B&&(this.ui.inputBox.ariaLabel=B)}if(this.ui.list.matchOnDescription=this.matchOnDescription,this.ui.list.matchOnDetail=this.matchOnDetail,this.ui.list.matchOnLabel=this.matchOnLabel,this.ui.list.sortByLabel=this.sortByLabel,this.itemsUpdated)switch(this.itemsUpdated=!1,this.ui.list.setElements(this.items),this.ui.list.filter(this.filterValue(this.ui.inputBox.value)),this.ui.checkAll.checked=this.ui.list.getAllVisibleChecked(),this.ui.visibleCount.setCount(this.ui.list.getVisibleCount()),this.ui.count.setCount(this.ui.list.getCheckedCount()),this._itemActivation){case b.ItemActivation.NONE:this._itemActivation=b.ItemActivation.FIRST;break;case b.ItemActivation.SECOND:this.ui.list.focus(w.QuickInputListFocus.Second),this._itemActivation=b.ItemActivation.FIRST;break;case b.ItemActivation.LAST:this.ui.list.focus(w.QuickInputListFocus.Last),this._itemActivation=b.ItemActivation.FIRST;break;default:this.trySelectFirst();break}this.ui.container.classList.contains("show-checkboxes")!==!!this.canSelectMany&&(this.canSelectMany?this.ui.list.clearFocus():this.trySelectFirst()),this.activeItemsUpdated&&(this.activeItemsUpdated=!1,this.activeItemsToConfirm=this._activeItems,this.ui.list.setFocusedElements(this.activeItems),this.activeItemsToConfirm===this._activeItems&&(this.activeItemsToConfirm=null)),this.selectedItemsUpdated&&(this.selectedItemsUpdated=!1,this.selectedItemsToConfirm=this._selectedItems,this.canSelectMany?this.ui.list.setCheckedElements(this.selectedItems):this.ui.list.setSelectedElements(this.selectedItems),this.selectedItemsToConfirm===this._selectedItems&&(this.selectedItemsToConfirm=null));const A=this.validationMessage||"";this._lastValidationMessage!==A&&(this._lastValidationMessage=A,N.reset(this.ui.message,...m.renderLabelWithIcons(h.escape(A))),this.showMessageDecoration(this.validationMessage?a.default.Error:a.default.Ignore)),this.ui.customButton.label=this.customLabel||"",this.ui.customButton.element.title=this.customHover||"",this.ui.setComboboxAccessibility(!0),O.inputBox||(this.ui.list.domFocus(),this.canSelectMany&&this.ui.list.focus(w.QuickInputListFocus.First))}}}L.DEFAULT_ARIA_LABEL=d.localize(2,null);class I extends s.Disposable{constructor(E){super();this.options=E,this.comboboxAccessibility=!1,this.enabled=!0,this.onDidAcceptEmitter=this._register(new c.Emitter),this.onDidCustomEmitter=this._register(new c.Emitter),this.onDidTriggerButtonEmitter=this._register(new c.Emitter),this.keyMods={ctrlCmd:!1,alt:!1},this.controller=null,this.onShowEmitter=this._register(new c.Emitter),this.onShow=this.onShowEmitter.event,this.onHideEmitter=this._register(new c.Emitter),this.onHide=this.onHideEmitter.event,this.idPrefix=E.idPrefix,this.parentElement=E.container,this.styles=E.styles,this.registerKeyModsListeners()}registerKeyModsListeners(){const E=T=>{this.keyMods.ctrlCmd=T.ctrlKey||T.metaKey,this.keyMods.alt=T.altKey};this._register(N.addDisposableListener(window,N.EventType.KEY_DOWN,E,!0)),this._register(N.addDisposableListener(window,N.EventType.KEY_UP,E,!0)),this._register(N.addDisposableListener(window,N.EventType.MOUSE_DOWN,E,!0))}getUI(){if(this.ui)return this.ui;const E=N.append(this.parentElement,_(".quick-input-widget.show-file-icons"));E.tabIndex=-1,E.style.display="none";const T=N.createStyleSheet(E),O=N.append(E,_(".quick-input-titlebar")),A=this._register(new u.ActionBar(O));A.domNode.classList.add("quick-input-left-action-bar");const B=N.append(O,_(".quick-input-title")),F=this._register(new u.ActionBar(O));F.domNode.classList.add("quick-input-right-action-bar");const D=N.append(E,_(".quick-input-description")),R=N.append(E,_(".quick-input-header")),W=N.append(R,_("input.quick-input-check-all"));W.type="checkbox",this._register(N.addStandardDisposableListener(W,N.EventType.CHANGE,ae=>{const G=W.checked;ie.setAllVisibleChecked(G)})),this._register(N.addDisposableListener(W,N.EventType.CLICK,ae=>{(ae.x||ae.y)&&ee.setFocus()}));const x=N.append(R,_(".quick-input-description")),K=N.append(R,_(".quick-input-and-message")),Y=N.append(K,_(".quick-input-filter")),ee=this._register(new S.QuickInputBox(Y));ee.setAttribute("aria-describedby",`${this.idPrefix}message`);const se=N.append(Y,_(".quick-input-visible-count"));se.setAttribute("aria-live","polite"),se.setAttribute("aria-atomic","true");const ne=new g.CountBadge(se,{countFormat:d.localize(3,null)}),le=N.append(Y,_(".quick-input-count"));le.setAttribute("aria-live","polite");const X=new g.CountBadge(le,{countFormat:d.localize(4,null)}),z=N.append(R,_(".quick-input-action")),P=new o.Button(z);P.label=d.localize(5,null),this._register(P.onDidClick(ae=>{this.onDidAcceptEmitter.fire()}));const V=N.append(R,_(".quick-input-action")),U=new o.Button(V);U.label=d.localize(6,null),this._register(U.onDidClick(ae=>{this.onDidCustomEmitter.fire()}));const H=N.append(K,_(`#${this.idPrefix}message.quick-input-message`)),$=new p.ProgressBar(E);$.getContainer().classList.add("quick-input-progress");const ie=this._register(new w.QuickInputList(E,this.idPrefix+"list",this.options));this._register(ie.onChangedAllVisibleChecked(ae=>{W.checked=ae})),this._register(ie.onChangedVisibleCount(ae=>{ne.setCount(ae)})),this._register(ie.onChangedCheckedCount(ae=>{X.setCount(ae)})),this._register(ie.onLeave(()=>{setTimeout(()=>{ee.setFocus(),this.controller instanceof L&&this.controller.canSelectMany&&ie.clearFocus()},0)})),this._register(ie.onDidChangeFocus(()=>{this.comboboxAccessibility&&this.getUI().inputBox.setAttribute("aria-activedescendant",this.getUI().list.getActiveDescendant()||"")}));const oe=N.trackFocus(E);return this._register(oe),this._register(N.addDisposableListener(E,N.EventType.FOCUS,ae=>{this.previousFocusElement=ae.relatedTarget instanceof HTMLElement?ae.relatedTarget:void 0},!0)),this._register(oe.onDidBlur(()=>{!this.getUI().ignoreFocusOut&&!this.options.ignoreFocusOut()&&this.hide(),this.previousFocusElement=void 0})),this._register(N.addDisposableListener(E,N.EventType.FOCUS,ae=>{ee.setFocus()})),this._register(N.addDisposableListener(E,N.EventType.KEY_DOWN,ae=>{const G=new C.StandardKeyboardEvent(ae);switch(G.keyCode){case 3:N.EventHelper.stop(ae,!0),this.onDidAcceptEmitter.fire();break;case 9:N.EventHelper.stop(ae,!0),this.hide();break;case 2:if(!G.altKey&&!G.ctrlKey&&!G.metaKey){const j=[".action-label.codicon"];E.classList.contains("show-checkboxes")?j.push("input"):j.push("input[type=text]"),this.getUI().list.isDisplayed()&&j.push(".monaco-list");const te=E.querySelectorAll(j.join(", "));G.shiftKey&&G.target===te[0]?(N.EventHelper.stop(ae,!0),te[te.length-1].focus()):!G.shiftKey&&G.target===te[te.length-1]&&(N.EventHelper.stop(ae,!0),te[0].focus())}break}})),this.ui={container:E,styleSheet:T,leftActionBar:A,titleBar:O,title:B,description1:D,description2:x,rightActionBar:F,checkAll:W,filterContainer:Y,inputBox:ee,visibleCountContainer:se,visibleCount:ne,countContainer:le,count:X,okContainer:z,ok:P,message:H,customButtonContainer:V,customButton:U,progressBar:$,list:ie,onDidAccept:this.onDidAcceptEmitter.event,onDidCustom:this.onDidCustomEmitter.event,onDidTriggerButton:this.onDidTriggerButtonEmitter.event,ignoreFocusOut:!1,keyMods:this.keyMods,isScreenReaderOptimized:()=>this.options.isScreenReaderOptimized(),show:ae=>this.show(ae),hide:()=>this.hide(),setVisibilities:ae=>this.setVisibilities(ae),setComboboxAccessibility:ae=>this.setComboboxAccessibility(ae),setEnabled:ae=>this.setEnabled(ae),setContextKey:ae=>this.options.setContextKey(ae)},this.updateStyles(),this.ui}pick(E,T={},O=M.CancellationToken.None){return new Promise((A,B)=>{let F=x=>{F=A,T.onKeyMods&&T.onKeyMods(D.keyMods),A(x)};if(O.isCancellationRequested){F(void 0);return}const D=this.createQuickPick();let R;const W=[D,D.onDidAccept(()=>{if(D.canSelectMany)F(D.selectedItems.slice()),D.hide();else{const x=D.activeItems[0];x&&(F(x),D.hide())}}),D.onDidChangeActive(x=>{const K=x[0];K&&T.onDidFocus&&T.onDidFocus(K)}),D.onDidChangeSelection(x=>{if(!D.canSelectMany){const K=x[0];K&&(F(K),D.hide())}}),D.onDidTriggerItemButton(x=>T.onDidTriggerItemButton&&T.onDidTriggerItemButton(Object.assign(Object.assign({},x),{removeItem:()=>{const K=D.items.indexOf(x.item);if(K!==-1){const Y=D.items.slice();Y.splice(K,1),D.items=Y}}}))),D.onDidChangeValue(x=>{R&&!x&&(D.activeItems.length!==1||D.activeItems[0]!==R)&&(D.activeItems=[R])}),O.onCancellationRequested(()=>{D.hide()}),D.onDidHide(()=>{s.dispose(W),F(void 0)})];D.canSelectMany=!!T.canPickMany,D.placeholder=T.placeHolder,D.ignoreFocusOut=!!T.ignoreFocusLost,D.matchOnDescription=!!T.matchOnDescription,D.matchOnDetail=!!T.matchOnDetail,D.matchOnLabel=T.matchOnLabel===void 0||T.matchOnLabel,D.autoFocusOnList=T.autoFocusOnList===void 0||T.autoFocusOnList,D.quickNavigate=T.quickNavigate,D.contextKey=T.contextKey,D.busy=!0,Promise.all([E,T.activeItem]).then(([x,K])=>{R=K,D.busy=!1,D.items=x,D.canSelectMany&&(D.selectedItems=x.filter(Y=>Y.type!=="separator"&&Y.picked)),R&&(D.activeItems=[R])}),D.show(),Promise.resolve(E).then(void 0,x=>{B(x),D.hide()})})}createQuickPick(){const E=this.getUI();return new L(E)}show(E){const T=this.getUI();this.onShowEmitter.fire();const O=this.controller;this.controller=E,O&&O.didHide(),this.setEnabled(!0),T.leftActionBar.clear(),T.title.textContent="",T.description1.textContent="",T.description2.textContent="",T.rightActionBar.clear(),T.checkAll.checked=!1,T.inputBox.placeholder="",T.inputBox.password=!1,T.inputBox.showDecoration(a.default.Ignore),T.visibleCount.setCount(0),T.count.setCount(0),N.reset(T.message),T.progressBar.stop(),T.list.setElements([]),T.list.matchOnDescription=!1,T.list.matchOnDetail=!1,T.list.matchOnLabel=!0,T.list.sortByLabel=!0,T.ignoreFocusOut=!1,this.setComboboxAccessibility(!1),T.inputBox.ariaLabel="";const A=this.options.backKeybindingLabel();v.tooltip=A?d.localize(7,null,A):d.localize(8,null),T.container.style.display="",this.updateLayout(),T.inputBox.setFocus()}setVisibilities(E){const T=this.getUI();T.title.style.display=E.title?"":"none",T.description1.style.display=E.description&&(E.inputBox||E.checkAll)?"":"none",T.description2.style.display=E.description&&!(E.inputBox||E.checkAll)?"":"none",T.checkAll.style.display=E.checkAll?"":"none",T.filterContainer.style.display=E.inputBox?"":"none",T.visibleCountContainer.style.display=E.visibleCount?"":"none",T.countContainer.style.display=E.count?"":"none",T.okContainer.style.display=E.ok?"":"none",T.customButtonContainer.style.display=E.customButton?"":"none",T.message.style.display=E.message?"":"none",T.progressBar.getContainer().style.display=E.progressBar?"":"none",T.list.display(!!E.list),T.container.classList[E.checkBox?"add":"remove"]("show-checkboxes"),this.updateLayout()}setComboboxAccessibility(E){if(E!==this.comboboxAccessibility){const T=this.getUI();this.comboboxAccessibility=E,this.comboboxAccessibility?(T.inputBox.setAttribute("role","combobox"),T.inputBox.setAttribute("aria-haspopup","true"),T.inputBox.setAttribute("aria-autocomplete","list"),T.inputBox.setAttribute("aria-activedescendant",T.list.getActiveDescendant()||"")):(T.inputBox.removeAttribute("role"),T.inputBox.removeAttribute("aria-haspopup"),T.inputBox.removeAttribute("aria-autocomplete"),T.inputBox.removeAttribute("aria-activedescendant"))}}setEnabled(E){if(E!==this.enabled){this.enabled=E;for(const T of this.getUI().leftActionBar.viewItems)T.getAction().enabled=E;for(const T of this.getUI().rightActionBar.viewItems)T.getAction().enabled=E;this.getUI().checkAll.disabled=!E,this.getUI().ok.enabled=E,this.getUI().list.enabled=E}}hide(){var E;const T=this.controller;if(T){const O=!((E=this.ui)===null||E===void 0?void 0:E.container.contains(document.activeElement));this.controller=null,this.onHideEmitter.fire(),this.getUI().container.style.display="none",O||(this.previousFocusElement&&this.previousFocusElement.offsetParent?(this.previousFocusElement.focus(),this.previousFocusElement=void 0):this.options.returnFocus()),T.didHide()}}layout(E,T){this.dimension=E,this.titleBarOffset=T,this.updateLayout()}updateLayout(){if(this.ui){this.ui.container.style.top=`${this.titleBarOffset}px`;const E=this.ui.container.style,T=Math.min(this.dimension.width*.62,I.MAX_WIDTH);E.width=T+"px",E.marginLeft="-"+T/2+"px",this.ui.inputBox.layout(),this.ui.list.layout(this.dimension&&this.dimension.height*.4)}}applyStyles(E){this.styles=E,this.updateStyles()}updateStyles(){if(this.ui){const{quickInputTitleBackground:E,quickInputBackground:T,quickInputForeground:O,contrastBorder:A,widgetShadow:B}=this.styles.widget;this.ui.titleBar.style.backgroundColor=E?E.toString():"",this.ui.container.style.backgroundColor=T?T.toString():"",this.ui.container.style.color=O?O.toString():"",this.ui.container.style.border=A?`1px solid ${A}`:"",this.ui.container.style.boxShadow=B?`0 0 8px 2px ${B}`:"",this.ui.inputBox.style(this.styles.inputBox),this.ui.count.style(this.styles.countBadge),this.ui.ok.style(this.styles.button),this.ui.customButton.style(this.styles.button),this.ui.progressBar.style(this.styles.progressBar),this.ui.list.style(this.styles.list);const F=[];this.styles.list.pickerGroupBorder&&F.push(`.quick-input-list .quick-input-list-entry { border-top-color: ${this.styles.list.pickerGroupBorder}; }`),this.styles.list.pickerGroupForeground&&F.push(`.quick-input-list .quick-input-list-separator { color: ${this.styles.list.pickerGroupForeground}; }`);const D=F.join(` +`);D!==this.ui.styleSheet.textContent&&(this.ui.styleSheet.textContent=D)}}}e.QuickInputController=I,I.MAX_WIDTH=600}),define(Q[444],J([4,5]),function(q,e){return q.create("vs/editor/browser/controller/coreCommands",e)}),define(Q[445],J([4,5]),function(q,e){return q.create("vs/editor/browser/controller/textAreaHandler",e)}),define(Q[446],J([4,5]),function(q,e){return q.create("vs/editor/browser/core/keybindingCancellation",e)}),define(Q[447],J([4,5]),function(q,e){return q.create("vs/editor/browser/editorExtensions",e)}),define(Q[448],J([4,5]),function(q,e){return q.create("vs/editor/browser/widget/codeEditorWidget",e)}),define(Q[449],J([4,5]),function(q,e){return q.create("vs/editor/browser/widget/diffEditorWidget",e)}),define(Q[450],J([4,5]),function(q,e){return q.create("vs/editor/browser/widget/diffReview",e)}),define(Q[451],J([4,5]),function(q,e){return q.create("vs/editor/browser/widget/inlineDiffMargin",e)}),define(Q[452],J([0,1,451,7,48,2,3,27]),function(q,e,b,N,M,w,S,C){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InlineDiffMargin=void 0;class d extends w.Disposable{constructor(p,c,o,s,a,u){super();this._viewZoneId=p,this._marginDomNode=c,this.editor=o,this.diff=s,this._contextMenuService=a,this._clipboardService=u,this._visibility=!1,this._marginDomNode.style.zIndex="10",this._diffActions=document.createElement("div"),this._diffActions.className=C.Codicon.lightBulb.classNames+" lightbulb-glyph",this._diffActions.style.position="absolute";const r=o.getOption(53),i=o.getModel().getEOL();this._diffActions.style.right="0px",this._diffActions.style.visibility="hidden",this._diffActions.style.height=`${r}px`,this._diffActions.style.lineHeight=`${r}px`,this._marginDomNode.appendChild(this._diffActions);const n=[];n.push(new M.Action("diff.clipboard.copyDeletedContent",s.originalEndLineNumber>s.modifiedStartLineNumber?b.localize(0,null):b.localize(1,null),void 0,!0,()=>Ie(this,void 0,void 0,function*(){const _=new S.Range(s.originalStartLineNumber,1,s.originalEndLineNumber+1,1),f=s.originalModel.getValueInRange(_);yield this._clipboardService.writeText(f)})));let t=0,l;s.originalEndLineNumber>s.modifiedStartLineNumber&&(l=new M.Action("diff.clipboard.copyDeletedLineContent",b.localize(2,null,s.originalStartLineNumber),void 0,!0,()=>Ie(this,void 0,void 0,function*(){const _=s.originalModel.getLineContent(s.originalStartLineNumber+t);yield this._clipboardService.writeText(_)})),n.push(l)),o.getOption(75)||n.push(new M.Action("diff.inline.revertChange",b.localize(3,null),void 0,!0,()=>Ie(this,void 0,void 0,function*(){const _=new S.Range(s.originalStartLineNumber,1,s.originalEndLineNumber,s.originalModel.getLineMaxColumn(s.originalEndLineNumber)),f=s.originalModel.getValueInRange(_);if(s.modifiedEndLineNumber===0){const v=o.getModel().getLineMaxColumn(s.modifiedStartLineNumber);o.executeEdits("diffEditor",[{range:new S.Range(s.modifiedStartLineNumber,v,s.modifiedStartLineNumber,v),text:i+f}])}else{const v=o.getModel().getLineMaxColumn(s.modifiedEndLineNumber);o.executeEdits("diffEditor",[{range:new S.Range(s.modifiedStartLineNumber,1,s.modifiedEndLineNumber,v),text:f}])}})));const m=(_,f)=>{this._contextMenuService.showContextMenu({getAnchor:()=>({x:_,y:f}),getActions:()=>(l&&(l.label=b.localize(4,null,s.originalStartLineNumber+t)),n),autoSelectFirstItem:!0})};this._register(N.addStandardDisposableListener(this._diffActions,"mousedown",_=>{const{top:f,height:v}=N.getDomNodePagePosition(this._diffActions);let y=Math.floor(r/3);_.preventDefault(),m(_.posx,f+v+y)})),this._register(o.onMouseMove(_=>{_.target.type===8||_.target.type===5?_.target.detail.viewZoneId===this._viewZoneId?(this.visibility=!0,t=this._updateLightBulbPosition(this._marginDomNode,_.event.browserEvent.y,r)):this.visibility=!1:this.visibility=!1})),this._register(o.onMouseDown(_=>{!_.event.rightButton||(_.target.type===8||_.target.type===5)&&_.target.detail.viewZoneId===this._viewZoneId&&(_.event.preventDefault(),t=this._updateLightBulbPosition(this._marginDomNode,_.event.browserEvent.y,r),m(_.event.posx,_.event.posy+r))}))}get visibility(){return this._visibility}set visibility(p){this._visibility!==p&&(this._visibility=p,p?this._diffActions.style.visibility="visible":this._diffActions.style.visibility="hidden")}_updateLightBulbPosition(p,c,o){const{top:s}=N.getDomNodePagePosition(p),a=c-s,u=Math.floor(a/o),r=u*o;if(this._diffActions.style.top=`${r}px`,this.diff.viewLineCounts){let i=0;for(let n=0;nhe?he:Z}static float(Z,ue){if(typeof Z=="number")return Z;if(typeof Z=="undefined")return ue;const he=parseFloat(Z);return isNaN(he)?ue:he}validate(Z){return this.validationFn(a.float(Z,this.defaultValue))}}class u extends p{static string(Z,ue){return typeof Z!="string"?ue:Z}constructor(Z,ue,he,re=void 0){typeof re!="undefined"&&(re.type="string",re.default=he),super(Z,ue,he,re)}validate(Z){return u.string(Z,this.defaultValue)}}function r(te,Z,ue){return typeof te!="string"||ue.indexOf(te)===-1?Z:te}e.stringSet=r;class i extends p{constructor(Z,ue,he,re,ce=void 0){typeof ce!="undefined"&&(ce.type="string",ce.enum=re,ce.default=he),super(Z,ue,he,ce),this._allowedValues=re}validate(Z){return r(Z,this.defaultValue,this._allowedValues)}}class n extends d{constructor(Z,ue,he,re,ce,me,Ce=void 0){typeof Ce!="undefined"&&(Ce.type="string",Ce.enum=ce,Ce.default=re),super(Z,ue,he,Ce),this._allowedValues=ce,this._convert=me}validate(Z){return typeof Z!="string"?this.defaultValue:this._allowedValues.indexOf(Z)===-1?this.defaultValue:this._convert(Z)}}function t(te){switch(te){case"none":return 0;case"keep":return 1;case"brackets":return 2;case"advanced":return 3;case"full":return 4}}class l extends d{constructor(){super(2,"accessibilitySupport",0,{type:"string",enum:["auto","on","off"],enumDescriptions:[b.localize(0,null),b.localize(1,null),b.localize(2,null)],default:"auto",description:b.localize(3,null)})}validate(Z){switch(Z){case"auto":return 0;case"off":return 1;case"on":return 2}return this.defaultValue}compute(Z,ue,he){return he===0?Z.accessibilitySupport:he}}class h extends d{constructor(){const Z={insertSpace:!0,ignoreEmptyLines:!0};super(16,"comments",Z,{"editor.comments.insertSpace":{type:"boolean",default:Z.insertSpace,description:b.localize(4,null)},"editor.comments.ignoreEmptyLines":{type:"boolean",default:Z.ignoreEmptyLines,description:b.localize(5,null)}})}validate(Z){if(!Z||typeof Z!="object")return this.defaultValue;const ue=Z;return{insertSpace:c(ue.insertSpace,this.defaultValue.insertSpace),ignoreEmptyLines:c(ue.ignoreEmptyLines,this.defaultValue.ignoreEmptyLines)}}}function m(te){switch(te){case"blink":return 1;case"smooth":return 2;case"phase":return 3;case"expand":return 4;case"solid":return 5}}var _;(function(te){te[te.Line=1]="Line",te[te.Block=2]="Block",te[te.Underline=3]="Underline",te[te.LineThin=4]="LineThin",te[te.BlockOutline=5]="BlockOutline",te[te.UnderlineThin=6]="UnderlineThin"})(_=e.TextEditorCursorStyle||(e.TextEditorCursorStyle={}));function f(te){switch(te){case"line":return _.Line;case"block":return _.Block;case"underline":return _.Underline;case"line-thin":return _.LineThin;case"block-outline":return _.BlockOutline;case"underline-thin":return _.UnderlineThin}}class v extends g{constructor(){super(121,[60,29])}compute(Z,ue,he){const re=["monaco-editor"];return ue.get(29)&&re.push(ue.get(29)),Z.extraEditorClassName&&re.push(Z.extraEditorClassName),ue.get(60)==="default"?re.push("mouse-default"):ue.get(60)==="copy"&&re.push("mouse-copy"),ue.get(95)&&re.push("showUnused"),ue.get(119)&&re.push("showDeprecated"),re.join(" ")}}class y extends o{constructor(){super(28,"emptySelectionClipboard",!0,{description:b.localize(6,null)})}compute(Z,ue,he){return he&&Z.emptySelectionClipboard}}class L extends d{constructor(){const Z={cursorMoveOnType:!0,seedSearchStringFromSelection:!0,autoFindInSelection:"never",globalFindClipboard:!1,addExtraSpaceOnTop:!0,loop:!0};super(31,"find",Z,{"editor.find.cursorMoveOnType":{type:"boolean",default:Z.cursorMoveOnType,description:b.localize(7,null)},"editor.find.seedSearchStringFromSelection":{type:"boolean",default:Z.seedSearchStringFromSelection,description:b.localize(8,null)},"editor.find.autoFindInSelection":{type:"string",enum:["never","always","multiline"],default:Z.autoFindInSelection,enumDescriptions:[b.localize(9,null),b.localize(10,null),b.localize(11,null)],description:b.localize(12,null)},"editor.find.globalFindClipboard":{type:"boolean",default:Z.globalFindClipboard,description:b.localize(13,null),included:N.isMacintosh},"editor.find.addExtraSpaceOnTop":{type:"boolean",default:Z.addExtraSpaceOnTop,description:b.localize(14,null)},"editor.find.loop":{type:"boolean",default:Z.loop,description:b.localize(15,null)}})}validate(Z){if(!Z||typeof Z!="object")return this.defaultValue;const ue=Z;return{cursorMoveOnType:c(ue.cursorMoveOnType,this.defaultValue.cursorMoveOnType),seedSearchStringFromSelection:c(ue.seedSearchStringFromSelection,this.defaultValue.seedSearchStringFromSelection),autoFindInSelection:typeof Z.autoFindInSelection=="boolean"?Z.autoFindInSelection?"always":"never":r(ue.autoFindInSelection,this.defaultValue.autoFindInSelection,["never","always","multiline"]),globalFindClipboard:c(ue.globalFindClipboard,this.defaultValue.globalFindClipboard),addExtraSpaceOnTop:c(ue.addExtraSpaceOnTop,this.defaultValue.addExtraSpaceOnTop),loop:c(ue.loop,this.defaultValue.loop)}}}class I extends d{constructor(){super(39,"fontLigatures",I.OFF,{anyOf:[{type:"boolean",description:b.localize(16,null)},{type:"string",description:b.localize(17,null)}],description:b.localize(18,null),default:!1})}validate(Z){return typeof Z=="undefined"?this.defaultValue:typeof Z=="string"?Z==="false"?I.OFF:Z==="true"?I.ON:Z:Boolean(Z)?I.ON:I.OFF}}e.EditorFontLigatures=I,I.OFF='"liga" off, "calt" off',I.ON='"liga" on, "calt" on';class k extends g{constructor(){super(38)}compute(Z,ue,he){return Z.fontInfo}}class E extends p{constructor(){super(40,"fontSize",e.EDITOR_FONT_DEFAULTS.fontSize,{type:"number",minimum:6,maximum:100,default:e.EDITOR_FONT_DEFAULTS.fontSize,description:b.localize(19,null)})}validate(Z){let ue=a.float(Z,this.defaultValue);return ue===0?e.EDITOR_FONT_DEFAULTS.fontSize:a.clamp(ue,6,100)}compute(Z,ue,he){return Z.fontInfo.fontSize}}class T extends d{constructor(){super(41,"fontWeight",e.EDITOR_FONT_DEFAULTS.fontWeight,{anyOf:[{type:"number",minimum:T.MINIMUM_VALUE,maximum:T.MAXIMUM_VALUE,errorMessage:b.localize(20,null)},{type:"string",pattern:"^(normal|bold|1000|[1-9][0-9]{0,2})$"},{enum:T.SUGGESTION_VALUES}],default:e.EDITOR_FONT_DEFAULTS.fontWeight,description:b.localize(21,null)})}validate(Z){return Z==="normal"||Z==="bold"?Z:String(s.clampedInt(Z,e.EDITOR_FONT_DEFAULTS.fontWeight,T.MINIMUM_VALUE,T.MAXIMUM_VALUE))}}T.SUGGESTION_VALUES=["normal","bold","100","200","300","400","500","600","700","800","900"],T.MINIMUM_VALUE=1,T.MAXIMUM_VALUE=1e3;class O extends d{constructor(){const Z={multiple:"peek",multipleDefinitions:"peek",multipleTypeDefinitions:"peek",multipleDeclarations:"peek",multipleImplementations:"peek",multipleReferences:"peek",alternativeDefinitionCommand:"editor.action.goToReferences",alternativeTypeDefinitionCommand:"editor.action.goToReferences",alternativeDeclarationCommand:"editor.action.goToReferences",alternativeImplementationCommand:"",alternativeReferenceCommand:""},ue={type:"string",enum:["peek","gotoAndPeek","goto"],default:Z.multiple,enumDescriptions:[b.localize(22,null),b.localize(23,null),b.localize(24,null)]};super(45,"gotoLocation",Z,{"editor.gotoLocation.multiple":{deprecationMessage:b.localize(25,null)},"editor.gotoLocation.multipleDefinitions":Object.assign({description:b.localize(26,null)},ue),"editor.gotoLocation.multipleTypeDefinitions":Object.assign({description:b.localize(27,null)},ue),"editor.gotoLocation.multipleDeclarations":Object.assign({description:b.localize(28,null)},ue),"editor.gotoLocation.multipleImplementations":Object.assign({description:b.localize(29,null)},ue),"editor.gotoLocation.multipleReferences":Object.assign({description:b.localize(30,null)},ue),"editor.gotoLocation.alternativeDefinitionCommand":{type:"string",default:Z.alternativeDefinitionCommand,description:b.localize(31,null)},"editor.gotoLocation.alternativeTypeDefinitionCommand":{type:"string",default:Z.alternativeTypeDefinitionCommand,description:b.localize(32,null)},"editor.gotoLocation.alternativeDeclarationCommand":{type:"string",default:Z.alternativeDeclarationCommand,description:b.localize(33,null)},"editor.gotoLocation.alternativeImplementationCommand":{type:"string",default:Z.alternativeImplementationCommand,description:b.localize(34,null)},"editor.gotoLocation.alternativeReferenceCommand":{type:"string",default:Z.alternativeReferenceCommand,description:b.localize(35,null)}})}validate(Z){var ue,he,re,ce,me;if(!Z||typeof Z!="object")return this.defaultValue;const Ce=Z;return{multiple:r(Ce.multiple,this.defaultValue.multiple,["peek","gotoAndPeek","goto"]),multipleDefinitions:(ue=Ce.multipleDefinitions)!==null&&ue!==void 0?ue:r(Ce.multipleDefinitions,"peek",["peek","gotoAndPeek","goto"]),multipleTypeDefinitions:(he=Ce.multipleTypeDefinitions)!==null&&he!==void 0?he:r(Ce.multipleTypeDefinitions,"peek",["peek","gotoAndPeek","goto"]),multipleDeclarations:(re=Ce.multipleDeclarations)!==null&&re!==void 0?re:r(Ce.multipleDeclarations,"peek",["peek","gotoAndPeek","goto"]),multipleImplementations:(ce=Ce.multipleImplementations)!==null&&ce!==void 0?ce:r(Ce.multipleImplementations,"peek",["peek","gotoAndPeek","goto"]),multipleReferences:(me=Ce.multipleReferences)!==null&&me!==void 0?me:r(Ce.multipleReferences,"peek",["peek","gotoAndPeek","goto"]),alternativeDefinitionCommand:u.string(Ce.alternativeDefinitionCommand,this.defaultValue.alternativeDefinitionCommand),alternativeTypeDefinitionCommand:u.string(Ce.alternativeTypeDefinitionCommand,this.defaultValue.alternativeTypeDefinitionCommand),alternativeDeclarationCommand:u.string(Ce.alternativeDeclarationCommand,this.defaultValue.alternativeDeclarationCommand),alternativeImplementationCommand:u.string(Ce.alternativeImplementationCommand,this.defaultValue.alternativeImplementationCommand),alternativeReferenceCommand:u.string(Ce.alternativeReferenceCommand,this.defaultValue.alternativeReferenceCommand)}}}class A extends d{constructor(){const Z={enabled:!0,delay:300,sticky:!0};super(48,"hover",Z,{"editor.hover.enabled":{type:"boolean",default:Z.enabled,description:b.localize(36,null)},"editor.hover.delay":{type:"number",default:Z.delay,description:b.localize(37,null)},"editor.hover.sticky":{type:"boolean",default:Z.sticky,description:b.localize(38,null)}})}validate(Z){if(!Z||typeof Z!="object")return this.defaultValue;const ue=Z;return{enabled:c(ue.enabled,this.defaultValue.enabled),delay:s.clampedInt(ue.delay,this.defaultValue.delay,0,1e4),sticky:c(ue.sticky,this.defaultValue.sticky)}}}class B extends g{constructor(){super(124,[44,52,33,59,87,54,55,89,111,114,115,116,2])}compute(Z,ue,he){return B.computeLayout(ue,{memory:Z.memory,outerWidth:Z.outerWidth,outerHeight:Z.outerHeight,isDominatedByLongLines:Z.isDominatedByLongLines,lineHeight:Z.fontInfo.lineHeight,viewLineCount:Z.viewLineCount,lineNumbersDigitCount:Z.lineNumbersDigitCount,typicalHalfwidthCharacterWidth:Z.fontInfo.typicalHalfwidthCharacterWidth,maxDigitWidth:Z.fontInfo.maxDigitWidth,pixelRatio:Z.pixelRatio})}static computeContainedMinimapLineCount(Z){const ue=Z.height/Z.lineHeight,he=Z.scrollBeyondLastLine?ue-1:0,re=(Z.viewLineCount+he)/(Z.pixelRatio*Z.height),ce=Math.floor(Z.viewLineCount/re);return{typicalViewportLineCount:ue,extraLinesBeyondLastLine:he,desiredRatio:re,minimapLineCount:ce}}static _computeMinimapLayout(Z,ue){const he=Z.outerWidth,re=Z.outerHeight,ce=Z.pixelRatio;if(!Z.minimap.enabled)return{renderMinimap:0,minimapLeft:0,minimapWidth:0,minimapHeightIsEditorHeight:!1,minimapIsSampling:!1,minimapScale:1,minimapLineHeight:1,minimapCanvasInnerWidth:0,minimapCanvasInnerHeight:Math.floor(ce*re),minimapCanvasOuterWidth:0,minimapCanvasOuterHeight:re};const me=ue.stableMinimapLayoutInput,Ce=me&&Z.outerHeight===me.outerHeight&&Z.lineHeight===me.lineHeight&&Z.typicalHalfwidthCharacterWidth===me.typicalHalfwidthCharacterWidth&&Z.pixelRatio===me.pixelRatio&&Z.scrollBeyondLastLine===me.scrollBeyondLastLine&&Z.minimap.enabled===me.minimap.enabled&&Z.minimap.side===me.minimap.side&&Z.minimap.size===me.minimap.size&&Z.minimap.showSlider===me.minimap.showSlider&&Z.minimap.renderCharacters===me.minimap.renderCharacters&&Z.minimap.maxColumn===me.minimap.maxColumn&&Z.minimap.scale===me.minimap.scale&&Z.verticalScrollbarWidth===me.verticalScrollbarWidth&&Z.isViewportWrapping===me.isViewportWrapping,be=Z.lineHeight,Le=Z.typicalHalfwidthCharacterWidth,De=Z.scrollBeyondLastLine,Re=Z.minimap.renderCharacters;let Ee=ce>=2?Math.round(Z.minimap.scale*2):Z.minimap.scale;const Ae=Z.minimap.maxColumn,Se=Z.minimap.size,we=Z.minimap.side,ye=Z.verticalScrollbarWidth,fe=Z.viewLineCount,de=Z.remainingWidth,ge=Z.isViewportWrapping,pe=Re?2:3;let ve=Math.floor(ce*re);const ke=ve/ce;let Ne=!1,Te=!1,Oe=pe*Ee,Fe=Ee/ce,Pe=1;if(Se==="fill"||Se==="fit"){const{typicalViewportLineCount:Ve,extraLinesBeyondLastLine:Ue,desiredRatio:Ye,minimapLineCount:je}=B.computeContainedMinimapLineCount({viewLineCount:fe,scrollBeyondLastLine:De,height:re,lineHeight:be,pixelRatio:ce});if(fe/je>1)Ne=!0,Te=!0,Ee=1,Oe=1,Fe=Ee/ce;else{let $e=!1,Ze=Ee+1;if(Se==="fit"){const Qe=Math.ceil((fe+Ue)*Oe);ge&&Ce&&de<=ue.stableFitRemainingWidth?($e=!0,Ze=ue.stableFitMaxMinimapScale):($e=Qe>ve,ge&&$e?(ue.stableMinimapLayoutInput=Z,ue.stableFitRemainingWidth=de):(ue.stableMinimapLayoutInput=null,ue.stableFitRemainingWidth=0))}if(Se==="fill"||$e){Ne=!0;const Qe=Ee;Oe=Math.min(be*ce,Math.max(1,Math.floor(1/Ye))),Ee=Math.min(Ze,Math.max(1,Math.floor(Oe/pe))),Ee>Qe&&(Pe=Math.min(2,Ee/Qe)),Fe=Ee/ce/Pe,ve=Math.ceil(Math.max(Ve,fe+Ue)*Oe),ge&&$e&&(ue.stableFitMaxMinimapScale=Ee)}}}const xe=Math.floor(Ae*Fe),We=Math.min(xe,Math.max(0,Math.floor((de-ye-2)*Fe/(Le+Fe)))+e.MINIMAP_GUTTER_WIDTH);let ze=Math.floor(ce*We);const Ke=ze/ce;ze=Math.floor(ze*Pe);const Be=Re?1:2,He=we==="left"?0:he-We-ye;return{renderMinimap:Be,minimapLeft:He,minimapWidth:We,minimapHeightIsEditorHeight:Ne,minimapIsSampling:Te,minimapScale:Ee,minimapLineHeight:Oe,minimapCanvasInnerWidth:ze,minimapCanvasInnerHeight:ve,minimapCanvasOuterWidth:Ke,minimapCanvasOuterHeight:ke}}static computeLayout(Z,ue){const he=ue.outerWidth|0,re=ue.outerHeight|0,ce=ue.lineHeight|0,me=ue.lineNumbersDigitCount|0,Ce=ue.typicalHalfwidthCharacterWidth,be=ue.maxDigitWidth,Le=ue.pixelRatio,De=ue.viewLineCount,Re=Z.get(116),Ee=Re==="inherit"?Z.get(115):Re,Ae=Ee==="inherit"?Z.get(111):Ee,Se=Z.get(114),we=Z.get(2),ye=ue.isDominatedByLongLines,fe=Z.get(44),de=Z.get(54).renderType!==0,ge=Z.get(55),pe=Z.get(89),ve=Z.get(59),ke=Z.get(87),Ne=ke.verticalScrollbarSize,Te=ke.verticalHasArrows,Oe=ke.arrowSize,Fe=ke.horizontalScrollbarSize,Pe=Z.get(52),xe=Z.get(33);let We;if(typeof Pe=="string"&&/^\d+(\.\d+)?ch$/.test(Pe)){const nt=parseFloat(Pe.substr(0,Pe.length-2));We=s.clampedInt(nt*Ce,0,0,1e3)}else We=s.clampedInt(Pe,0,0,1e3);xe&&(We+=16);let ze=0;if(de){const nt=Math.max(me,ge);ze=Math.round(nt*be)}let Ke=0;fe&&(Ke=ce);let Be=0,He=Be+Ke,Ve=He+ze,Ue=Ve+We;const Ye=he-Ke-ze-We;let je=!1,Xe=!1,$e=-1;we!==2&&(Ee==="inherit"&&ye?(je=!0,Xe=!0):Ae==="on"||Ae==="bounded"?Xe=!0:Ae==="wordWrapColumn"&&($e=Se));const Ze=B._computeMinimapLayout({outerWidth:he,outerHeight:re,lineHeight:ce,typicalHalfwidthCharacterWidth:Ce,pixelRatio:Le,scrollBeyondLastLine:pe,minimap:ve,verticalScrollbarWidth:Ne,viewLineCount:De,remainingWidth:Ye,isViewportWrapping:Xe},ue.memory||new C);Ze.renderMinimap!==0&&Ze.minimapLeft===0&&(Be+=Ze.minimapWidth,He+=Ze.minimapWidth,Ve+=Ze.minimapWidth,Ue+=Ze.minimapWidth);const Qe=Ye-Ze.minimapWidth,it=Math.max(1,Math.floor((Qe-Ne-2)/Ce)),Je=Te?Oe:0;return Xe&&($e=Math.max(1,it),Ae==="bounded"&&($e=Math.min($e,Se))),{width:he,height:re,glyphMarginLeft:Be,glyphMarginWidth:Ke,lineNumbersLeft:He,lineNumbersWidth:ze,decorationsLeft:Ve,decorationsWidth:We,contentLeft:Ue,contentWidth:Qe,minimap:Ze,viewportColumn:it,isWordWrapMinified:je,isViewportWrapping:Xe,wrappingColumn:$e,verticalScrollbarWidth:Ne,horizontalScrollbarHeight:Fe,overviewRuler:{top:Je,width:Ne,height:re-2*Je,right:0}}}}e.EditorLayoutInfoComputer=B;class F extends d{constructor(){const Z={enabled:!0};super(51,"lightbulb",Z,{"editor.lightbulb.enabled":{type:"boolean",default:Z.enabled,description:b.localize(39,null)}})}validate(Z){return!Z||typeof Z!="object"?this.defaultValue:{enabled:c(Z.enabled,this.defaultValue.enabled)}}}class D extends d{constructor(){const Z={enabled:!0,fontSize:0,fontFamily:e.EDITOR_FONT_DEFAULTS.fontFamily};super(120,"inlineHints",Z,{"editor.inlineHints.enabled":{type:"boolean",default:Z.enabled,description:b.localize(40,null)},"editor.inlineHints.fontSize":{type:"number",default:Z.fontSize,description:b.localize(41,null)},"editor.inlineHints.fontFamily":{type:"string",default:Z.fontFamily,description:b.localize(42,null)}})}validate(Z){if(!Z||typeof Z!="object")return this.defaultValue;const ue=Z;return{enabled:c(ue.enabled,this.defaultValue.enabled),fontSize:s.clampedInt(ue.fontSize,this.defaultValue.fontSize,0,100),fontFamily:u.string(ue.fontFamily,this.defaultValue.fontFamily)}}}class R extends s{constructor(){super(53,"lineHeight",e.EDITOR_FONT_DEFAULTS.lineHeight,0,150,{description:b.localize(43,null)})}compute(Z,ue,he){return Z.fontInfo.lineHeight}}class W extends d{constructor(){const Z={enabled:!0,size:"proportional",side:"right",showSlider:"mouseover",renderCharacters:!0,maxColumn:120,scale:1};super(59,"minimap",Z,{"editor.minimap.enabled":{type:"boolean",default:Z.enabled,description:b.localize(44,null)},"editor.minimap.size":{type:"string",enum:["proportional","fill","fit"],enumDescriptions:[b.localize(45,null),b.localize(46,null),b.localize(47,null)],default:Z.size,description:b.localize(48,null)},"editor.minimap.side":{type:"string",enum:["left","right"],default:Z.side,description:b.localize(49,null)},"editor.minimap.showSlider":{type:"string",enum:["always","mouseover"],default:Z.showSlider,description:b.localize(50,null)},"editor.minimap.scale":{type:"number",default:Z.scale,minimum:1,maximum:3,enum:[1,2,3],description:b.localize(51,null)},"editor.minimap.renderCharacters":{type:"boolean",default:Z.renderCharacters,description:b.localize(52,null)},"editor.minimap.maxColumn":{type:"number",default:Z.maxColumn,description:b.localize(53,null)}})}validate(Z){if(!Z||typeof Z!="object")return this.defaultValue;const ue=Z;return{enabled:c(ue.enabled,this.defaultValue.enabled),size:r(ue.size,this.defaultValue.size,["proportional","fill","fit"]),side:r(ue.side,this.defaultValue.side,["right","left"]),showSlider:r(ue.showSlider,this.defaultValue.showSlider,["always","mouseover"]),renderCharacters:c(ue.renderCharacters,this.defaultValue.renderCharacters),scale:s.clampedInt(ue.scale,1,1,3),maxColumn:s.clampedInt(ue.maxColumn,this.defaultValue.maxColumn,1,1e4)}}}function x(te){return te==="ctrlCmd"?N.isMacintosh?"metaKey":"ctrlKey":"altKey"}class K extends d{constructor(){super(69,"padding",{top:0,bottom:0},{"editor.padding.top":{type:"number",default:0,minimum:0,maximum:1e3,description:b.localize(54,null)},"editor.padding.bottom":{type:"number",default:0,minimum:0,maximum:1e3,description:b.localize(55,null)}})}validate(Z){if(!Z||typeof Z!="object")return this.defaultValue;const ue=Z;return{top:s.clampedInt(ue.top,0,0,1e3),bottom:s.clampedInt(ue.bottom,0,0,1e3)}}}class Y extends d{constructor(){const Z={enabled:!0,cycle:!1};super(70,"parameterHints",Z,{"editor.parameterHints.enabled":{type:"boolean",default:Z.enabled,description:b.localize(56,null)},"editor.parameterHints.cycle":{type:"boolean",default:Z.cycle,description:b.localize(57,null)}})}validate(Z){if(!Z||typeof Z!="object")return this.defaultValue;const ue=Z;return{enabled:c(ue.enabled,this.defaultValue.enabled),cycle:c(ue.cycle,this.defaultValue.cycle)}}}class ee extends g{constructor(){super(122)}compute(Z,ue,he){return Z.pixelRatio}}class se extends d{constructor(){const Z={other:!0,comments:!1,strings:!1};super(73,"quickSuggestions",Z,{anyOf:[{type:"boolean"},{type:"object",properties:{strings:{type:"boolean",default:Z.strings,description:b.localize(58,null)},comments:{type:"boolean",default:Z.comments,description:b.localize(59,null)},other:{type:"boolean",default:Z.other,description:b.localize(60,null)}}}],default:Z,description:b.localize(61,null)});this.defaultValue=Z}validate(Z){if(typeof Z=="boolean")return Z;if(Z&&typeof Z=="object"){const ue=Z,he={other:c(ue.other,this.defaultValue.other),comments:c(ue.comments,this.defaultValue.comments),strings:c(ue.strings,this.defaultValue.strings)};return he.other&&he.comments&&he.strings?!0:!he.other&&!he.comments&&!he.strings?!1:he}return this.defaultValue}}class ne extends d{constructor(){super(54,"lineNumbers",{renderType:1,renderFn:null},{type:"string",enum:["off","on","relative","interval"],enumDescriptions:[b.localize(62,null),b.localize(63,null),b.localize(64,null),b.localize(65,null)],default:"on",description:b.localize(66,null)})}validate(Z){let ue=this.defaultValue.renderType,he=this.defaultValue.renderFn;return typeof Z!="undefined"&&(typeof Z=="function"?(ue=4,he=Z):Z==="interval"?ue=3:Z==="relative"?ue=2:Z==="on"?ue=1:ue=0),{renderType:ue,renderFn:he}}}function le(te){const Z=te.get(82);return Z==="editable"?te.get(75):Z!=="on"}e.filterValidationDecorations=le;class X extends d{constructor(){const Z=[],ue={type:"number",description:b.localize(67,null)};super(86,"rulers",Z,{type:"array",items:{anyOf:[ue,{type:["object"],properties:{column:ue,color:{type:"string",description:b.localize(68,null),format:"color-hex"}}}]},default:Z,description:b.localize(69,null)})}validate(Z){if(Array.isArray(Z)){let ue=[];for(let he of Z)if(typeof he=="number")ue.push({column:s.clampedInt(he,0,0,1e4),color:null});else if(he&&typeof he=="object"){const re=he;ue.push({column:s.clampedInt(re.column,0,0,1e4),color:re.color})}return ue.sort((he,re)=>he.column-re.column),ue}return this.defaultValue}}function z(te,Z){if(typeof te!="string")return Z;switch(te){case"hidden":return 2;case"visible":return 3;default:return 1}}class P extends d{constructor(){super(87,"scrollbar",{vertical:1,horizontal:1,arrowSize:11,useShadows:!0,verticalHasArrows:!1,horizontalHasArrows:!1,horizontalScrollbarSize:12,horizontalSliderSize:12,verticalScrollbarSize:14,verticalSliderSize:14,handleMouseWheel:!0,alwaysConsumeMouseWheel:!0,scrollByPage:!1})}validate(Z){if(!Z||typeof Z!="object")return this.defaultValue;const ue=Z,he=s.clampedInt(ue.horizontalScrollbarSize,this.defaultValue.horizontalScrollbarSize,0,1e3),re=s.clampedInt(ue.verticalScrollbarSize,this.defaultValue.verticalScrollbarSize,0,1e3);return{arrowSize:s.clampedInt(ue.arrowSize,this.defaultValue.arrowSize,0,1e3),vertical:z(ue.vertical,this.defaultValue.vertical),horizontal:z(ue.horizontal,this.defaultValue.horizontal),useShadows:c(ue.useShadows,this.defaultValue.useShadows),verticalHasArrows:c(ue.verticalHasArrows,this.defaultValue.verticalHasArrows),horizontalHasArrows:c(ue.horizontalHasArrows,this.defaultValue.horizontalHasArrows),handleMouseWheel:c(ue.handleMouseWheel,this.defaultValue.handleMouseWheel),alwaysConsumeMouseWheel:c(ue.alwaysConsumeMouseWheel,this.defaultValue.alwaysConsumeMouseWheel),horizontalScrollbarSize:he,horizontalSliderSize:s.clampedInt(ue.horizontalSliderSize,he,0,1e3),verticalScrollbarSize:re,verticalSliderSize:s.clampedInt(ue.verticalSliderSize,re,0,1e3),scrollByPage:c(ue.scrollByPage,this.defaultValue.scrollByPage)}}}class V extends d{constructor(){const Z={insertMode:"insert",filterGraceful:!0,snippetsPreventQuickSuggestions:!0,localityBonus:!1,shareSuggestSelections:!1,showIcons:!0,showStatusBar:!1,showInlineDetails:!0,showMethods:!0,showFunctions:!0,showConstructors:!0,showFields:!0,showVariables:!0,showClasses:!0,showStructs:!0,showInterfaces:!0,showModules:!0,showProperties:!0,showEvents:!0,showOperators:!0,showUnits:!0,showValues:!0,showConstants:!0,showEnums:!0,showEnumMembers:!0,showKeywords:!0,showWords:!0,showColors:!0,showFiles:!0,showReferences:!0,showFolders:!0,showTypeParameters:!0,showSnippets:!0,showUsers:!0,showIssues:!0};super(101,"suggest",Z,{"editor.suggest.insertMode":{type:"string",enum:["insert","replace"],enumDescriptions:[b.localize(70,null),b.localize(71,null)],default:Z.insertMode,description:b.localize(72,null)},"editor.suggest.filterGraceful":{type:"boolean",default:Z.filterGraceful,description:b.localize(73,null)},"editor.suggest.localityBonus":{type:"boolean",default:Z.localityBonus,description:b.localize(74,null)},"editor.suggest.shareSuggestSelections":{type:"boolean",default:Z.shareSuggestSelections,markdownDescription:b.localize(75,null)},"editor.suggest.snippetsPreventQuickSuggestions":{type:"boolean",default:Z.snippetsPreventQuickSuggestions,description:b.localize(76,null)},"editor.suggest.showIcons":{type:"boolean",default:Z.showIcons,description:b.localize(77,null)},"editor.suggest.showStatusBar":{type:"boolean",default:Z.showStatusBar,description:b.localize(78,null)},"editor.suggest.showInlineDetails":{type:"boolean",default:Z.showInlineDetails,description:b.localize(79,null)},"editor.suggest.maxVisibleSuggestions":{type:"number",deprecationMessage:b.localize(80,null)},"editor.suggest.filteredTypes":{type:"object",deprecationMessage:b.localize(81,null)},"editor.suggest.showMethods":{type:"boolean",default:!0,markdownDescription:b.localize(82,null)},"editor.suggest.showFunctions":{type:"boolean",default:!0,markdownDescription:b.localize(83,null)},"editor.suggest.showConstructors":{type:"boolean",default:!0,markdownDescription:b.localize(84,null)},"editor.suggest.showFields":{type:"boolean",default:!0,markdownDescription:b.localize(85,null)},"editor.suggest.showVariables":{type:"boolean",default:!0,markdownDescription:b.localize(86,null)},"editor.suggest.showClasses":{type:"boolean",default:!0,markdownDescription:b.localize(87,null)},"editor.suggest.showStructs":{type:"boolean",default:!0,markdownDescription:b.localize(88,null)},"editor.suggest.showInterfaces":{type:"boolean",default:!0,markdownDescription:b.localize(89,null)},"editor.suggest.showModules":{type:"boolean",default:!0,markdownDescription:b.localize(90,null)},"editor.suggest.showProperties":{type:"boolean",default:!0,markdownDescription:b.localize(91,null)},"editor.suggest.showEvents":{type:"boolean",default:!0,markdownDescription:b.localize(92,null)},"editor.suggest.showOperators":{type:"boolean",default:!0,markdownDescription:b.localize(93,null)},"editor.suggest.showUnits":{type:"boolean",default:!0,markdownDescription:b.localize(94,null)},"editor.suggest.showValues":{type:"boolean",default:!0,markdownDescription:b.localize(95,null)},"editor.suggest.showConstants":{type:"boolean",default:!0,markdownDescription:b.localize(96,null)},"editor.suggest.showEnums":{type:"boolean",default:!0,markdownDescription:b.localize(97,null)},"editor.suggest.showEnumMembers":{type:"boolean",default:!0,markdownDescription:b.localize(98,null)},"editor.suggest.showKeywords":{type:"boolean",default:!0,markdownDescription:b.localize(99,null)},"editor.suggest.showWords":{type:"boolean",default:!0,markdownDescription:b.localize(100,null)},"editor.suggest.showColors":{type:"boolean",default:!0,markdownDescription:b.localize(101,null)},"editor.suggest.showFiles":{type:"boolean",default:!0,markdownDescription:b.localize(102,null)},"editor.suggest.showReferences":{type:"boolean",default:!0,markdownDescription:b.localize(103,null)},"editor.suggest.showCustomcolors":{type:"boolean",default:!0,markdownDescription:b.localize(104,null)},"editor.suggest.showFolders":{type:"boolean",default:!0,markdownDescription:b.localize(105,null)},"editor.suggest.showTypeParameters":{type:"boolean",default:!0,markdownDescription:b.localize(106,null)},"editor.suggest.showSnippets":{type:"boolean",default:!0,markdownDescription:b.localize(107,null)},"editor.suggest.showUsers":{type:"boolean",default:!0,markdownDescription:b.localize(108,null)},"editor.suggest.showIssues":{type:"boolean",default:!0,markdownDescription:b.localize(109,null)}})}validate(Z){if(!Z||typeof Z!="object")return this.defaultValue;const ue=Z;return{insertMode:r(ue.insertMode,this.defaultValue.insertMode,["insert","replace"]),filterGraceful:c(ue.filterGraceful,this.defaultValue.filterGraceful),snippetsPreventQuickSuggestions:c(ue.snippetsPreventQuickSuggestions,this.defaultValue.filterGraceful),localityBonus:c(ue.localityBonus,this.defaultValue.localityBonus),shareSuggestSelections:c(ue.shareSuggestSelections,this.defaultValue.shareSuggestSelections),showIcons:c(ue.showIcons,this.defaultValue.showIcons),showStatusBar:c(ue.showStatusBar,this.defaultValue.showStatusBar),showInlineDetails:c(ue.showInlineDetails,this.defaultValue.showInlineDetails),showMethods:c(ue.showMethods,this.defaultValue.showMethods),showFunctions:c(ue.showFunctions,this.defaultValue.showFunctions),showConstructors:c(ue.showConstructors,this.defaultValue.showConstructors),showFields:c(ue.showFields,this.defaultValue.showFields),showVariables:c(ue.showVariables,this.defaultValue.showVariables),showClasses:c(ue.showClasses,this.defaultValue.showClasses),showStructs:c(ue.showStructs,this.defaultValue.showStructs),showInterfaces:c(ue.showInterfaces,this.defaultValue.showInterfaces),showModules:c(ue.showModules,this.defaultValue.showModules),showProperties:c(ue.showProperties,this.defaultValue.showProperties),showEvents:c(ue.showEvents,this.defaultValue.showEvents),showOperators:c(ue.showOperators,this.defaultValue.showOperators),showUnits:c(ue.showUnits,this.defaultValue.showUnits),showValues:c(ue.showValues,this.defaultValue.showValues),showConstants:c(ue.showConstants,this.defaultValue.showConstants),showEnums:c(ue.showEnums,this.defaultValue.showEnums),showEnumMembers:c(ue.showEnumMembers,this.defaultValue.showEnumMembers),showKeywords:c(ue.showKeywords,this.defaultValue.showKeywords),showWords:c(ue.showWords,this.defaultValue.showWords),showColors:c(ue.showColors,this.defaultValue.showColors),showFiles:c(ue.showFiles,this.defaultValue.showFiles),showReferences:c(ue.showReferences,this.defaultValue.showReferences),showFolders:c(ue.showFolders,this.defaultValue.showFolders),showTypeParameters:c(ue.showTypeParameters,this.defaultValue.showTypeParameters),showSnippets:c(ue.showSnippets,this.defaultValue.showSnippets),showUsers:c(ue.showUsers,this.defaultValue.showUsers),showIssues:c(ue.showIssues,this.defaultValue.showIssues)}}}class U extends d{constructor(){super(97,"smartSelect",{selectLeadingAndTrailingWhitespace:!0},{"editor.smartSelect.selectLeadingAndTrailingWhitespace":{description:b.localize(110,null),default:!0,type:"boolean"}})}validate(Z){return!Z||typeof Z!="object"?this.defaultValue:{selectLeadingAndTrailingWhitespace:c(Z.selectLeadingAndTrailingWhitespace,this.defaultValue.selectLeadingAndTrailingWhitespace)}}}class H extends g{constructor(){super(123,[75])}compute(Z,ue,he){return ue.get(75)?!0:Z.tabFocusMode}}function $(te){switch(te){case"none":return 0;case"same":return 1;case"indent":return 2;case"deepIndent":return 3}}class ie extends g{constructor(){super(125,[124])}compute(Z,ue,he){const re=ue.get(124);return{isDominatedByLongLines:Z.isDominatedByLongLines,isWordWrapMinified:re.isWordWrapMinified,isViewportWrapping:re.isViewportWrapping,wrappingColumn:re.wrappingColumn}}}const oe="Consolas, 'Courier New', monospace",ae="Menlo, Monaco, 'Courier New', monospace",G="'Droid Sans Mono', 'monospace', monospace, 'Droid Sans Fallback'";e.EDITOR_FONT_DEFAULTS={fontFamily:N.isMacintosh?ae:N.isLinux?G:oe,fontWeight:"normal",fontSize:N.isMacintosh?12:14,lineHeight:0,letterSpacing:0},e.EDITOR_MODEL_DEFAULTS={tabSize:4,indentSize:4,insertSpaces:!0,detectIndentation:!0,trimAutoWhitespace:!0,largeFileOptimizations:!0},e.editorOptionsRegistry=[];function j(te){return e.editorOptionsRegistry[te.id]=te,te}e.EditorOptions={acceptSuggestionOnCommitCharacter:j(new o(0,"acceptSuggestionOnCommitCharacter",!0,{markdownDescription:b.localize(111,null)})),acceptSuggestionOnEnter:j(new i(1,"acceptSuggestionOnEnter","on",["on","smart","off"],{markdownEnumDescriptions:["",b.localize(112,null),""],markdownDescription:b.localize(113,null)})),accessibilitySupport:j(new l),accessibilityPageSize:j(new s(3,"accessibilityPageSize",10,1,1073741824,{description:b.localize(114,null)})),ariaLabel:j(new u(4,"ariaLabel",b.localize(115,null))),autoClosingBrackets:j(new i(5,"autoClosingBrackets","languageDefined",["always","languageDefined","beforeWhitespace","never"],{enumDescriptions:["",b.localize(116,null),b.localize(117,null),""],description:b.localize(118,null)})),autoClosingOvertype:j(new i(6,"autoClosingOvertype","auto",["always","auto","never"],{enumDescriptions:["",b.localize(119,null),""],description:b.localize(120,null)})),autoClosingQuotes:j(new i(7,"autoClosingQuotes","languageDefined",["always","languageDefined","beforeWhitespace","never"],{enumDescriptions:["",b.localize(121,null),b.localize(122,null),""],description:b.localize(123,null)})),autoIndent:j(new n(8,"autoIndent",4,"full",["none","keep","brackets","advanced","full"],t,{enumDescriptions:[b.localize(124,null),b.localize(125,null),b.localize(126,null),b.localize(127,null),b.localize(128,null)],description:b.localize(129,null)})),automaticLayout:j(new o(9,"automaticLayout",!1)),autoSurround:j(new i(10,"autoSurround","languageDefined",["languageDefined","quotes","brackets","never"],{enumDescriptions:[b.localize(130,null),b.localize(131,null),b.localize(132,null),""],description:b.localize(133,null)})),stickyTabStops:j(new o(99,"stickyTabStops",!1,{description:b.localize(134,null)})),codeLens:j(new o(11,"codeLens",!0,{description:b.localize(135,null)})),codeLensFontFamily:j(new u(12,"codeLensFontFamily","",{description:b.localize(136,null)})),codeLensFontSize:j(new s(13,"codeLensFontSize",0,0,100,{type:"number",default:0,minimum:0,maximum:100,description:b.localize(137,null)})),colorDecorators:j(new o(14,"colorDecorators",!0,{description:b.localize(138,null)})),columnSelection:j(new o(15,"columnSelection",!1,{description:b.localize(139,null)})),comments:j(new h),contextmenu:j(new o(17,"contextmenu",!0)),copyWithSyntaxHighlighting:j(new o(18,"copyWithSyntaxHighlighting",!0,{description:b.localize(140,null)})),cursorBlinking:j(new n(19,"cursorBlinking",1,"blink",["blink","smooth","phase","expand","solid"],m,{description:b.localize(141,null)})),cursorSmoothCaretAnimation:j(new o(20,"cursorSmoothCaretAnimation",!1,{description:b.localize(142,null)})),cursorStyle:j(new n(21,"cursorStyle",_.Line,"line",["line","block","underline","line-thin","block-outline","underline-thin"],f,{description:b.localize(143,null)})),cursorSurroundingLines:j(new s(22,"cursorSurroundingLines",0,0,1073741824,{description:b.localize(144,null)})),cursorSurroundingLinesStyle:j(new i(23,"cursorSurroundingLinesStyle","default",["default","all"],{enumDescriptions:[b.localize(145,null),b.localize(146,null)],description:b.localize(147,null)})),cursorWidth:j(new s(24,"cursorWidth",0,0,1073741824,{markdownDescription:b.localize(148,null)})),disableLayerHinting:j(new o(25,"disableLayerHinting",!1)),disableMonospaceOptimizations:j(new o(26,"disableMonospaceOptimizations",!1)),dragAndDrop:j(new o(27,"dragAndDrop",!0,{description:b.localize(149,null)})),emptySelectionClipboard:j(new y),extraEditorClassName:j(new u(29,"extraEditorClassName","")),fastScrollSensitivity:j(new a(30,"fastScrollSensitivity",5,te=>te<=0?5:te,{markdownDescription:b.localize(150,null)})),find:j(new L),fixedOverflowWidgets:j(new o(32,"fixedOverflowWidgets",!1)),folding:j(new o(33,"folding",!0,{description:b.localize(151,null)})),foldingStrategy:j(new i(34,"foldingStrategy","auto",["auto","indentation"],{enumDescriptions:[b.localize(152,null),b.localize(153,null)],description:b.localize(154,null)})),foldingHighlight:j(new o(35,"foldingHighlight",!0,{description:b.localize(155,null)})),unfoldOnClickAfterEndOfLine:j(new o(36,"unfoldOnClickAfterEndOfLine",!1,{description:b.localize(156,null)})),fontFamily:j(new u(37,"fontFamily",e.EDITOR_FONT_DEFAULTS.fontFamily,{description:b.localize(157,null)})),fontInfo:j(new k),fontLigatures2:j(new I),fontSize:j(new E),fontWeight:j(new T),formatOnPaste:j(new o(42,"formatOnPaste",!1,{description:b.localize(158,null)})),formatOnType:j(new o(43,"formatOnType",!1,{description:b.localize(159,null)})),glyphMargin:j(new o(44,"glyphMargin",!0,{description:b.localize(160,null)})),gotoLocation:j(new O),hideCursorInOverviewRuler:j(new o(46,"hideCursorInOverviewRuler",!1,{description:b.localize(161,null)})),highlightActiveIndentGuide:j(new o(47,"highlightActiveIndentGuide",!0,{description:b.localize(162,null)})),hover:j(new A),inDiffEditor:j(new o(49,"inDiffEditor",!1)),letterSpacing:j(new a(50,"letterSpacing",e.EDITOR_FONT_DEFAULTS.letterSpacing,te=>a.clamp(te,-5,20),{description:b.localize(163,null)})),lightbulb:j(new F),lineDecorationsWidth:j(new p(52,"lineDecorationsWidth",10)),lineHeight:j(new R),lineNumbers:j(new ne),lineNumbersMinChars:j(new s(55,"lineNumbersMinChars",5,1,300)),linkedEditing:j(new o(56,"linkedEditing",!1,{description:b.localize(164,null)})),links:j(new o(57,"links",!0,{description:b.localize(165,null)})),matchBrackets:j(new i(58,"matchBrackets","always",["always","near","never"],{description:b.localize(166,null)})),minimap:j(new W),mouseStyle:j(new i(60,"mouseStyle","text",["text","default","copy"])),mouseWheelScrollSensitivity:j(new a(61,"mouseWheelScrollSensitivity",1,te=>te===0?1:te,{markdownDescription:b.localize(167,null)})),mouseWheelZoom:j(new o(62,"mouseWheelZoom",!1,{markdownDescription:b.localize(168,null)})),multiCursorMergeOverlapping:j(new o(63,"multiCursorMergeOverlapping",!0,{description:b.localize(169,null)})),multiCursorModifier:j(new n(64,"multiCursorModifier","altKey","alt",["ctrlCmd","alt"],x,{markdownEnumDescriptions:[b.localize(170,null),b.localize(171,null)],markdownDescription:b.localize(172,null)})),multiCursorPaste:j(new i(65,"multiCursorPaste","spread",["spread","full"],{markdownEnumDescriptions:[b.localize(173,null),b.localize(174,null)],markdownDescription:b.localize(175,null)})),occurrencesHighlight:j(new o(66,"occurrencesHighlight",!0,{description:b.localize(176,null)})),overviewRulerBorder:j(new o(67,"overviewRulerBorder",!0,{description:b.localize(177,null)})),overviewRulerLanes:j(new s(68,"overviewRulerLanes",3,0,3)),padding:j(new K),parameterHints:j(new Y),peekWidgetDefaultFocus:j(new i(71,"peekWidgetDefaultFocus","tree",["tree","editor"],{enumDescriptions:[b.localize(178,null),b.localize(179,null)],description:b.localize(180,null)})),definitionLinkOpensInPeek:j(new o(72,"definitionLinkOpensInPeek",!1,{description:b.localize(181,null)})),quickSuggestions:j(new se),quickSuggestionsDelay:j(new s(74,"quickSuggestionsDelay",10,0,1073741824,{description:b.localize(182,null)})),readOnly:j(new o(75,"readOnly",!1)),renameOnType:j(new o(76,"renameOnType",!1,{description:b.localize(183,null),markdownDeprecationMessage:b.localize(184,null)})),renderControlCharacters:j(new o(77,"renderControlCharacters",!1,{description:b.localize(185,null)})),renderIndentGuides:j(new o(78,"renderIndentGuides",!0,{description:b.localize(186,null)})),renderFinalNewline:j(new o(79,"renderFinalNewline",!0,{description:b.localize(187,null)})),renderLineHighlight:j(new i(80,"renderLineHighlight","line",["none","gutter","line","all"],{enumDescriptions:["","","",b.localize(188,null)],description:b.localize(189,null)})),renderLineHighlightOnlyWhenFocus:j(new o(81,"renderLineHighlightOnlyWhenFocus",!1,{description:b.localize(190,null)})),renderValidationDecorations:j(new i(82,"renderValidationDecorations","editable",["editable","on","off"])),renderWhitespace:j(new i(83,"renderWhitespace","selection",["none","boundary","selection","trailing","all"],{enumDescriptions:["",b.localize(191,null),b.localize(192,null),b.localize(193,null),""],description:b.localize(194,null)})),revealHorizontalRightPadding:j(new s(84,"revealHorizontalRightPadding",30,0,1e3)),roundedSelection:j(new o(85,"roundedSelection",!0,{description:b.localize(195,null)})),rulers:j(new X),scrollbar:j(new P),scrollBeyondLastColumn:j(new s(88,"scrollBeyondLastColumn",5,0,1073741824,{description:b.localize(196,null)})),scrollBeyondLastLine:j(new o(89,"scrollBeyondLastLine",!0,{description:b.localize(197,null)})),scrollPredominantAxis:j(new o(90,"scrollPredominantAxis",!0,{description:b.localize(198,null)})),selectionClipboard:j(new o(91,"selectionClipboard",!0,{description:b.localize(199,null),included:N.isLinux})),selectionHighlight:j(new o(92,"selectionHighlight",!0,{description:b.localize(200,null)})),selectOnLineNumbers:j(new o(93,"selectOnLineNumbers",!0)),showFoldingControls:j(new i(94,"showFoldingControls","mouseover",["always","mouseover"],{enumDescriptions:[b.localize(201,null),b.localize(202,null)],description:b.localize(203,null)})),showUnused:j(new o(95,"showUnused",!0,{description:b.localize(204,null)})),showDeprecated:j(new o(119,"showDeprecated",!0,{description:b.localize(205,null)})),inlineHints:j(new D),snippetSuggestions:j(new i(96,"snippetSuggestions","inline",["top","bottom","inline","none"],{enumDescriptions:[b.localize(206,null),b.localize(207,null),b.localize(208,null),b.localize(209,null)],description:b.localize(210,null)})),smartSelect:j(new U),smoothScrolling:j(new o(98,"smoothScrolling",!1,{description:b.localize(211,null)})),stopRenderingLineAfter:j(new s(100,"stopRenderingLineAfter",1e4,-1,1073741824)),suggest:j(new V),suggestFontSize:j(new s(102,"suggestFontSize",0,0,1e3,{markdownDescription:b.localize(212,null)})),suggestLineHeight:j(new s(103,"suggestLineHeight",0,0,1e3,{markdownDescription:b.localize(213,null)})),suggestOnTriggerCharacters:j(new o(104,"suggestOnTriggerCharacters",!0,{description:b.localize(214,null)})),suggestSelection:j(new i(105,"suggestSelection","recentlyUsed",["first","recentlyUsed","recentlyUsedByPrefix"],{markdownEnumDescriptions:[b.localize(215,null),b.localize(216,null),b.localize(217,null)],description:b.localize(218,null)})),tabCompletion:j(new i(106,"tabCompletion","off",["on","off","onlySnippets"],{enumDescriptions:[b.localize(219,null),b.localize(220,null),b.localize(221,null)],description:b.localize(222,null)})),tabIndex:j(new s(107,"tabIndex",0,-1,1073741824)),unusualLineTerminators:j(new i(108,"unusualLineTerminators","prompt",["auto","off","prompt"],{enumDescriptions:[b.localize(223,null),b.localize(224,null),b.localize(225,null)],description:b.localize(226,null)})),useTabStops:j(new o(109,"useTabStops",!0,{description:b.localize(227,null)})),wordSeparators:j(new u(110,"wordSeparators",M.USUAL_WORD_SEPARATORS,{description:b.localize(228,null)})),wordWrap:j(new i(111,"wordWrap","off",["off","on","wordWrapColumn","bounded"],{markdownEnumDescriptions:[b.localize(229,null),b.localize(230,null),b.localize(231,null),b.localize(232,null)],description:b.localize(233,null)})),wordWrapBreakAfterCharacters:j(new u(112,"wordWrapBreakAfterCharacters"," })]?|/&.,;\xA2\xB0\u2032\u2033\u2030\u2103\u3001\u3002\uFF61\uFF64\uFFE0\uFF0C\uFF0E\uFF1A\uFF1B\uFF1F\uFF01\uFF05\u30FB\uFF65\u309D\u309E\u30FD\u30FE\u30FC\u30A1\u30A3\u30A5\u30A7\u30A9\u30C3\u30E3\u30E5\u30E7\u30EE\u30F5\u30F6\u3041\u3043\u3045\u3047\u3049\u3063\u3083\u3085\u3087\u308E\u3095\u3096\u31F0\u31F1\u31F2\u31F3\u31F4\u31F5\u31F6\u31F7\u31F8\u31F9\u31FA\u31FB\u31FC\u31FD\u31FE\u31FF\u3005\u303B\uFF67\uFF68\uFF69\uFF6A\uFF6B\uFF6C\uFF6D\uFF6E\uFF6F\uFF70\u201D\u3009\u300B\u300D\u300F\u3011\u3015\uFF09\uFF3D\uFF5D\uFF63")),wordWrapBreakBeforeCharacters:j(new u(113,"wordWrapBreakBeforeCharacters","([{\u2018\u201C\u3008\u300A\u300C\u300E\u3010\u3014\uFF08\uFF3B\uFF5B\uFF62\xA3\xA5\uFF04\uFFE1\uFFE5+\uFF0B")),wordWrapColumn:j(new s(114,"wordWrapColumn",80,1,1073741824,{markdownDescription:b.localize(234,null)})),wordWrapOverride1:j(new i(115,"wordWrapOverride1","inherit",["off","on","inherit"])),wordWrapOverride2:j(new i(116,"wordWrapOverride2","inherit",["off","on","inherit"])),wrappingIndent:j(new n(117,"wrappingIndent",1,"same",["none","same","indent","deepIndent"],$,{enumDescriptions:[b.localize(235,null),b.localize(236,null),b.localize(237,null),b.localize(238,null)],description:b.localize(239,null)})),wrappingStrategy:j(new i(118,"wrappingStrategy","simple",["simple","advanced"],{enumDescriptions:[b.localize(240,null),b.localize(241,null)],description:b.localize(242,null)})),editorClassName:j(new v),pixelRatio:j(new ee),tabFocusMode:j(new H),layoutInfo:j(new B),wrappingInfo:j(new ie)}}),define(Q[455],J([0,1,14,3,63,38]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ViewModelDecorations=void 0;class S{constructor(d,g,p,c,o){this.editorId=d,this.model=g,this.configuration=p,this._linesCollection=c,this._coordinatesConverter=o,this._decorationsCache=Object.create(null),this._cachedModelDecorationsResolver=null,this._cachedModelDecorationsResolverViewRange=null}_clearCachedModelDecorationsResolver(){this._cachedModelDecorationsResolver=null,this._cachedModelDecorationsResolverViewRange=null}dispose(){this._decorationsCache=Object.create(null),this._clearCachedModelDecorationsResolver()}reset(){this._decorationsCache=Object.create(null),this._clearCachedModelDecorationsResolver()}onModelDecorationsChanged(){this._decorationsCache=Object.create(null),this._clearCachedModelDecorationsResolver()}onLineMappingChanged(){this._decorationsCache=Object.create(null),this._clearCachedModelDecorationsResolver()}_getOrCreateViewModelDecoration(d){const g=d.id;let p=this._decorationsCache[g];if(!p){const c=d.range,o=d.options;let s;if(o.isWholeLine){const a=this._coordinatesConverter.convertModelPositionToViewPosition(new b.Position(c.startLineNumber,1)),u=this._coordinatesConverter.convertModelPositionToViewPosition(new b.Position(c.endLineNumber,this.model.getLineMaxColumn(c.endLineNumber)));s=new N.Range(a.lineNumber,a.column,u.lineNumber,u.column)}else s=this._coordinatesConverter.convertModelRangeToViewRange(c);p=new M.ViewModelDecoration(s,o),this._decorationsCache[g]=p}return p}getDecorationsViewportData(d){let g=this._cachedModelDecorationsResolver!==null;return g=g&&d.equalsRange(this._cachedModelDecorationsResolverViewRange),g||(this._cachedModelDecorationsResolver=this._getDecorationsViewportData(d),this._cachedModelDecorationsResolverViewRange=d),this._cachedModelDecorationsResolver}_getDecorationsViewportData(d){const g=this._linesCollection.getDecorationsInRange(d,this.editorId,w.filterValidationDecorations(this.configuration.options)),p=d.startLineNumber,c=d.endLineNumber;let o=[],s=0,a=[];for(let u=p;u<=c;u++)a[u-p]=[];for(let u=0,r=g.length;u0&&(this.changes=S.compressConsecutiveTextChanges(this.changes,n)),this.afterEOL=t,this.afterVersionId=l,this.afterCursorState=h}static _writeSelectionsSize(i){return 4+4*4*(i?i.length:0)}static _writeSelections(i,n,t){if(C.writeUInt32BE(i,n?n.length:0,t),t+=4,n)for(const l of n)C.writeUInt32BE(i,l.selectionStartLineNumber,t),t+=4,C.writeUInt32BE(i,l.selectionStartColumn,t),t+=4,C.writeUInt32BE(i,l.positionLineNumber,t),t+=4,C.writeUInt32BE(i,l.positionColumn,t),t+=4;return t}static _readSelections(i,n,t){const l=C.readUInt32BE(i,n);n+=4;for(let h=0;hn.toString()).join(", ")}matchesResource(i){return(w.URI.isUri(this.model)?this.model:this.model.uri).toString()===i.toString()}setModel(i){this.model=i}canAppend(i){return this.model===i&&this._data instanceof p}append(i,n,t,l,h){this._data instanceof p&&this._data.append(i,n,t,l,h)}close(){this._data instanceof p&&(this._data=this._data.serialize())}open(){this._data instanceof p||(this._data=p.deserialize(this._data))}undo(){if(w.URI.isUri(this.model))throw new Error("Invalid SingleModelEditStackElement");this._data instanceof p&&(this._data=this._data.serialize());const i=p.deserialize(this._data);this.model._applyUndo(i.changes,i.beforeEOL,i.beforeVersionId,i.beforeCursorState)}redo(){if(w.URI.isUri(this.model))throw new Error("Invalid SingleModelEditStackElement");this._data instanceof p&&(this._data=this._data.serialize());const i=p.deserialize(this._data);this.model._applyRedo(i.changes,i.afterEOL,i.afterVersionId,i.afterCursorState)}heapSize(){return this._data instanceof p&&(this._data=this._data.serialize()),this._data.byteLength+168}}e.SingleModelEditStackElement=c;class o{constructor(i,n){this.type=1,this.label=i,this._isOpen=!0,this._editStackElementsArr=n.slice(0),this._editStackElementsMap=new Map;for(const t of this._editStackElementsArr){const l=g(t.resource);this._editStackElementsMap.set(l,t)}this._delegate=null}get resources(){return this._editStackElementsArr.map(i=>i.resource)}prepareUndoRedo(){if(this._delegate)return this._delegate.prepareUndoRedo(this)}matchesResource(i){const n=g(i);return this._editStackElementsMap.has(n)}setModel(i){const n=g(w.URI.isUri(i)?i:i.uri);this._editStackElementsMap.has(n)&&this._editStackElementsMap.get(n).setModel(i)}canAppend(i){if(!this._isOpen)return!1;const n=g(i.uri);return this._editStackElementsMap.has(n)?this._editStackElementsMap.get(n).canAppend(i):!1}append(i,n,t,l,h){const m=g(i.uri);this._editStackElementsMap.get(m).append(i,n,t,l,h)}close(){this._isOpen=!1}open(){}undo(){this._isOpen=!1;for(const i of this._editStackElementsArr)i.undo()}redo(){for(const i of this._editStackElementsArr)i.redo()}heapSize(i){const n=g(i);return this._editStackElementsMap.has(n)?this._editStackElementsMap.get(n).heapSize():0}split(){return this._editStackElementsArr}toString(){let i=[];for(const n of this._editStackElementsArr)i.push(`${d.basename(n.resource)}: ${n}`);return`{${i.join(", ")}}`}}e.MultiModelEditStackElement=o;function s(r){return r.getEOL()===` +`?0:1}function a(r){return r?r instanceof c||r instanceof o:!1}e.isEditStackElement=a;class u{constructor(i,n){this._model=i,this._undoRedoService=n}pushStackElement(){const i=this._undoRedoService.getLastElement(this._model.uri);a(i)&&i.close()}popStackElement(){const i=this._undoRedoService.getLastElement(this._model.uri);a(i)&&i.open()}clear(){this._undoRedoService.removeElements(this._model.uri)}_getOrCreateEditStackElement(i){const n=this._undoRedoService.getLastElement(this._model.uri);if(a(n)&&n.canAppend(this._model))return n;const t=new c(this._model,i);return this._undoRedoService.pushElement(t),t}pushEOL(i){const n=this._getOrCreateEditStackElement(null);this._model.setEOL(i),n.append(this._model,[],s(this._model),this._model.getAlternativeVersionId(),null)}pushEditOperation(i,n,t){const l=this._getOrCreateEditStackElement(i),h=this._model.applyEdits(n,!0),m=u._computeCursorState(t,h),_=h.map((f,v)=>({index:v,textChange:f.textChange}));return _.sort((f,v)=>f.textChange.oldPosition===v.textChange.oldPosition?f.index-v.index:f.textChange.oldPosition-v.textChange.oldPosition),l.append(this._model,_.map(f=>f.textChange),s(this._model),this._model.getAlternativeVersionId(),m),m}static _computeCursorState(i,n){try{return i?i(n):null}catch(t){return N.onUnexpectedError(t),null}}}e.EditStack=u}),define(Q[458],J([4,5]),function(q,e){return q.create("vs/editor/common/modes/modesRegistry",e)}),define(Q[459],J([4,5]),function(q,e){return q.create("vs/editor/common/standaloneStrings",e)}),define(Q[64],J([0,1,459]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SimpleServicesNLS=e.ToggleHighContrastNLS=e.StandaloneCodeEditorNLS=e.QuickOutlineNLS=e.QuickCommandNLS=e.QuickHelpNLS=e.GoToLineNLS=e.InspectTokensNLS=e.AccessibilityHelpNLS=void 0;var N;(function(o){o.noSelection=b.localize(0,null),o.singleSelectionRange=b.localize(1,null),o.singleSelection=b.localize(2,null),o.multiSelectionRange=b.localize(3,null),o.multiSelection=b.localize(4,null),o.emergencyConfOn=b.localize(5,null),o.openingDocs=b.localize(6,null),o.readonlyDiffEditor=b.localize(7,null),o.editableDiffEditor=b.localize(8,null),o.readonlyEditor=b.localize(9,null),o.editableEditor=b.localize(10,null),o.changeConfigToOnMac=b.localize(11,null),o.changeConfigToOnWinLinux=b.localize(12,null),o.auto_on=b.localize(13,null),o.auto_off=b.localize(14,null),o.tabFocusModeOnMsg=b.localize(15,null),o.tabFocusModeOnMsgNoKb=b.localize(16,null),o.tabFocusModeOffMsg=b.localize(17,null),o.tabFocusModeOffMsgNoKb=b.localize(18,null),o.openDocMac=b.localize(19,null),o.openDocWinLinux=b.localize(20,null),o.outroMsg=b.localize(21,null),o.showAccessibilityHelpAction=b.localize(22,null)})(N=e.AccessibilityHelpNLS||(e.AccessibilityHelpNLS={}));var M;(function(o){o.inspectTokensAction=b.localize(23,null)})(M=e.InspectTokensNLS||(e.InspectTokensNLS={}));var w;(function(o){o.gotoLineActionLabel=b.localize(24,null)})(w=e.GoToLineNLS||(e.GoToLineNLS={}));var S;(function(o){o.helpQuickAccessActionLabel=b.localize(25,null)})(S=e.QuickHelpNLS||(e.QuickHelpNLS={}));var C;(function(o){o.quickCommandActionLabel=b.localize(26,null),o.quickCommandHelp=b.localize(27,null)})(C=e.QuickCommandNLS||(e.QuickCommandNLS={}));var d;(function(o){o.quickOutlineActionLabel=b.localize(28,null),o.quickOutlineByCategoryActionLabel=b.localize(29,null)})(d=e.QuickOutlineNLS||(e.QuickOutlineNLS={}));var g;(function(o){o.editorViewAccessibleLabel=b.localize(30,null),o.accessibilityHelpMessage=b.localize(31,null)})(g=e.StandaloneCodeEditorNLS||(e.StandaloneCodeEditorNLS={}));var p;(function(o){o.toggleHighContrast=b.localize(32,null)})(p=e.ToggleHighContrastNLS||(e.ToggleHighContrastNLS={}));var c;(function(o){o.bulkEditServiceSummary=b.localize(33,null)})(c=e.SimpleServicesNLS||(e.SimpleServicesNLS={}))}),define(Q[460],J([4,5]),function(q,e){return q.create("vs/editor/common/view/editorColorRegistry",e)}),define(Q[461],J([4,5]),function(q,e){return q.create("vs/editor/contrib/anchorSelect/anchorSelect",e)}),define(Q[462],J([4,5]),function(q,e){return q.create("vs/editor/contrib/bracketMatching/bracketMatching",e)}),define(Q[463],J([4,5]),function(q,e){return q.create("vs/editor/contrib/caretOperations/caretOperations",e)}),define(Q[464],J([4,5]),function(q,e){return q.create("vs/editor/contrib/caretOperations/transpose",e)}),define(Q[465],J([4,5]),function(q,e){return q.create("vs/editor/contrib/clipboard/clipboard",e)}),define(Q[466],J([4,5]),function(q,e){return q.create("vs/editor/contrib/codeAction/codeActionCommands",e)}),define(Q[467],J([4,5]),function(q,e){return q.create("vs/editor/contrib/codeAction/lightBulbWidget",e)}),define(Q[468],J([4,5]),function(q,e){return q.create("vs/editor/contrib/codelens/codelensController",e)}),define(Q[469],J([4,5]),function(q,e){return q.create("vs/editor/contrib/comment/comment",e)}),define(Q[470],J([4,5]),function(q,e){return q.create("vs/editor/contrib/contextmenu/contextmenu",e)}),define(Q[471],J([4,5]),function(q,e){return q.create("vs/editor/contrib/cursorUndo/cursorUndo",e)}),define(Q[472],J([4,5]),function(q,e){return q.create("vs/editor/contrib/find/findController",e)}),define(Q[473],J([4,5]),function(q,e){return q.create("vs/editor/contrib/find/findWidget",e)}),define(Q[474],J([4,5]),function(q,e){return q.create("vs/editor/contrib/folding/folding",e)}),define(Q[475],J([4,5]),function(q,e){return q.create("vs/editor/contrib/folding/foldingDecorations",e)}),define(Q[476],J([4,5]),function(q,e){return q.create("vs/editor/contrib/fontZoom/fontZoom",e)}),define(Q[477],J([4,5]),function(q,e){return q.create("vs/editor/contrib/format/format",e)}),define(Q[478],J([4,5]),function(q,e){return q.create("vs/editor/contrib/format/formatActions",e)}),define(Q[479],J([4,5]),function(q,e){return q.create("vs/editor/contrib/gotoError/gotoError",e)}),define(Q[480],J([4,5]),function(q,e){return q.create("vs/editor/contrib/gotoError/gotoErrorWidget",e)}),define(Q[481],J([4,5]),function(q,e){return q.create("vs/editor/contrib/gotoSymbol/goToCommands",e)}),define(Q[482],J([4,5]),function(q,e){return q.create("vs/editor/contrib/gotoSymbol/link/goToDefinitionAtPosition",e)}),define(Q[483],J([4,5]),function(q,e){return q.create("vs/editor/contrib/gotoSymbol/peek/referencesController",e)}),define(Q[484],J([4,5]),function(q,e){return q.create("vs/editor/contrib/gotoSymbol/peek/referencesTree",e)}),define(Q[485],J([4,5]),function(q,e){return q.create("vs/editor/contrib/gotoSymbol/peek/referencesWidget",e)}),define(Q[486],J([4,5]),function(q,e){return q.create("vs/editor/contrib/gotoSymbol/referencesModel",e)}),define(Q[132],J([0,1,486,6,44,2,8,119,3,51,12]),function(q,e,b,N,M,w,S,C,d,g,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ReferencesModel=e.FileReferences=e.FilePreview=e.OneReference=void 0;class c{constructor(r,i,n,t,l){this.isProviderFirst=r,this.parent=i,this.uri=n,this._range=t,this._rangeCallback=l,this.id=C.defaultGenerator.nextId()}get range(){return this._range}set range(r){this._range=r,this._rangeCallback(this)}get ariaMessage(){var r;const i=(r=this.parent.getPreview(this))===null||r===void 0?void 0:r.preview(this.range);return i?b.localize(1,null,M.basename(this.uri),this.range.startLineNumber,this.range.startColumn,i.value):b.localize(0,null,M.basename(this.uri),this.range.startLineNumber,this.range.startColumn)}}e.OneReference=c;class o{constructor(r){this._modelReference=r}dispose(){this._modelReference.dispose()}preview(r,i=8){const n=this._modelReference.object.textEditorModel;if(!!n){const{startLineNumber:t,startColumn:l,endLineNumber:h,endColumn:m}=r,_=n.getWordUntilPosition({lineNumber:t,column:l-i}),f=new d.Range(t,_.startColumn,t,l),v=new d.Range(h,m,h,1073741824),y=n.getValueInRange(f).replace(/^\s+/,""),L=n.getValueInRange(r),I=n.getValueInRange(v).replace(/\s+$/,"");return{value:y+L+I,highlight:{start:y.length,end:y.length+L.length}}}}}e.FilePreview=o;class s{constructor(r,i){this.parent=r,this.uri=i,this.children=[],this._previews=new g.ResourceMap}dispose(){w.dispose(this._previews.values()),this._previews.clear()}getPreview(r){return this._previews.get(r.uri)}get ariaMessage(){const r=this.children.length;return r===1?b.localize(2,null,M.basename(this.uri),this.uri.fsPath):b.localize(3,null,r,M.basename(this.uri),this.uri.fsPath)}resolve(r){return Ie(this,void 0,void 0,function*(){if(this._previews.size!==0)return this;for(let i of this.children)if(!this._previews.has(i.uri))try{const n=yield r.createModelReference(i.uri);this._previews.set(i.uri,new o(n))}catch(n){p.onUnexpectedError(n)}return this})}}e.FileReferences=s;class a{constructor(r,i){this.groups=[],this.references=[],this._onDidChangeReferenceRange=new N.Emitter,this.onDidChangeReferenceRange=this._onDidChangeReferenceRange.event,this._links=r,this._title=i;const[n]=r;r.sort(a._compareReferences);let t;for(let l of r)if((!t||!M.extUri.isEqual(t.uri,l.uri,!0))&&(t=new s(this,l.uri),this.groups.push(t)),t.children.length===0||a._compareReferences(l,t.children[t.children.length-1])!==0){const h=new c(n===l,t,l.uri,l.targetSelectionRange||l.range,m=>this._onDidChangeReferenceRange.fire(m));this.references.push(h),t.children.push(h)}}dispose(){w.dispose(this.groups),this._onDidChangeReferenceRange.dispose(),this.groups.length=0}clone(){return new a(this._links,this._title)}get title(){return this._title}get isEmpty(){return this.groups.length===0}get ariaMessage(){return this.isEmpty?b.localize(4,null):this.references.length===1?b.localize(5,null,this.references[0].uri.fsPath):this.groups.length===1?b.localize(6,null,this.references.length,this.groups[0].uri.fsPath):b.localize(7,null,this.references.length,this.groups.length)}nextOrPreviousReference(r,i){let{parent:n}=r,t=n.children.indexOf(r),l=n.children.length,h=n.parent.groups.length;return h===1||i&&t+10?(i?t=(t+1)%l:t=(t+l-1)%l,n.children[t]):(t=n.parent.groups.indexOf(n),i?(t=(t+1)%h,n.parent.groups[t].children[0]):(t=(t+h-1)%h,n.parent.groups[t].children[n.parent.groups[t].children.length-1]))}nearestReference(r,i){const n=this.references.map((t,l)=>({idx:l,prefixLen:S.commonPrefixLength(t.uri.toString(),r.toString()),offsetDist:Math.abs(t.range.startLineNumber-i.lineNumber)*100+Math.abs(t.range.startColumn-i.column)})).sort((t,l)=>t.prefixLen>l.prefixLen?-1:t.prefixLenl.offsetDist?1:0)[0];if(n)return this.references[n.idx]}referenceAt(r,i){for(const n of this.references)if(n.uri.toString()===r.toString()&&d.Range.containsPosition(n.range,i))return n}firstReference(){for(const r of this.references)if(r.isProviderFirst)return r;return this.references[0]}static _compareReferences(r,i){return M.extUri.compare(r.uri,i.uri)||d.Range.compareRangesUsingStarts(r.range,i.range)}}e.ReferencesModel=a}),define(Q[487],J([4,5]),function(q,e){return q.create("vs/editor/contrib/gotoSymbol/symbolNavigation",e)}),define(Q[488],J([4,5]),function(q,e){return q.create("vs/editor/contrib/hover/hover",e)}),define(Q[489],J([4,5]),function(q,e){return q.create("vs/editor/contrib/hover/markdownHoverParticipant",e)}),define(Q[490],J([4,5]),function(q,e){return q.create("vs/editor/contrib/hover/markerHoverParticipant",e)}),define(Q[491],J([4,5]),function(q,e){return q.create("vs/editor/contrib/inPlaceReplace/inPlaceReplace",e)}),define(Q[492],J([4,5]),function(q,e){return q.create("vs/editor/contrib/indentation/indentation",e)}),define(Q[493],J([4,5]),function(q,e){return q.create("vs/editor/contrib/linesOperations/linesOperations",e)}),define(Q[494],J([4,5]),function(q,e){return q.create("vs/editor/contrib/linkedEditing/linkedEditing",e)}),define(Q[495],J([4,5]),function(q,e){return q.create("vs/editor/contrib/links/links",e)}),define(Q[496],J([4,5]),function(q,e){return q.create("vs/editor/contrib/message/messageController",e)}),define(Q[497],J([4,5]),function(q,e){return q.create("vs/editor/contrib/multicursor/multicursor",e)}),define(Q[498],J([4,5]),function(q,e){return q.create("vs/editor/contrib/parameterHints/parameterHints",e)}),define(Q[499],J([4,5]),function(q,e){return q.create("vs/editor/contrib/parameterHints/parameterHintsWidget",e)}),define(Q[500],J([4,5]),function(q,e){return q.create("vs/editor/contrib/peekView/peekView",e)}),define(Q[501],J([4,5]),function(q,e){return q.create("vs/editor/contrib/quickAccess/gotoLineQuickAccess",e)}),define(Q[502],J([4,5]),function(q,e){return q.create("vs/editor/contrib/quickAccess/gotoSymbolQuickAccess",e)}),define(Q[503],J([4,5]),function(q,e){return q.create("vs/editor/contrib/rename/rename",e)}),define(Q[504],J([4,5]),function(q,e){return q.create("vs/editor/contrib/rename/renameInputField",e)}),define(Q[505],J([4,5]),function(q,e){return q.create("vs/editor/contrib/smartSelect/smartSelect",e)}),define(Q[506],J([4,5]),function(q,e){return q.create("vs/editor/contrib/snippet/snippetVariables",e)}),define(Q[507],J([4,5]),function(q,e){return q.create("vs/editor/contrib/suggest/suggestController",e)}),define(Q[508],J([4,5]),function(q,e){return q.create("vs/editor/contrib/suggest/suggestWidget",e)}),define(Q[509],J([4,5]),function(q,e){return q.create("vs/editor/contrib/suggest/suggestWidgetDetails",e)}),define(Q[510],J([4,5]),function(q,e){return q.create("vs/editor/contrib/suggest/suggestWidgetRenderer",e)}),define(Q[511],J([4,5]),function(q,e){return q.create("vs/editor/contrib/suggest/suggestWidgetStatus",e)}),define(Q[512],J([4,5]),function(q,e){return q.create("vs/editor/contrib/symbolIcons/symbolIcons",e)}),define(Q[513],J([4,5]),function(q,e){return q.create("vs/editor/contrib/toggleTabFocusMode/toggleTabFocusMode",e)}),define(Q[514],J([4,5]),function(q,e){return q.create("vs/editor/contrib/tokenization/tokenization",e)}),define(Q[515],J([4,5]),function(q,e){return q.create("vs/editor/contrib/unusualLineTerminators/unusualLineTerminators",e)}),define(Q[516],J([4,5]),function(q,e){return q.create("vs/editor/contrib/wordHighlighter/wordHighlighter",e)}),define(Q[517],J([4,5]),function(q,e){return q.create("vs/editor/contrib/wordOperations/wordOperations",e)}),define(Q[518],J([4,5]),function(q,e){return q.create("vs/platform/actions/browser/menuEntryActionViewItem",e)}),define(Q[519],J([4,5]),function(q,e){return q.create("vs/platform/configuration/common/configurationRegistry",e)}),define(Q[520],J([4,5]),function(q,e){return q.create("vs/platform/contextkey/browser/contextKeyService",e)}),define(Q[521],J([4,5]),function(q,e){return q.create("vs/platform/contextkey/common/contextkeys",e)}),define(Q[522],J([4,5]),function(q,e){return q.create("vs/platform/keybinding/common/abstractKeybindingService",e)}),define(Q[523],J([4,5]),function(q,e){return q.create("vs/platform/list/browser/listService",e)}),define(Q[524],J([4,5]),function(q,e){return q.create("vs/platform/markers/common/markers",e)}),define(Q[525],J([4,5]),function(q,e){return q.create("vs/platform/quickinput/browser/commandsQuickAccess",e)}),define(Q[526],J([4,5]),function(q,e){return q.create("vs/platform/quickinput/browser/helpQuickAccess",e)}),define(Q[527],J([4,5]),function(q,e){return q.create("vs/platform/theme/common/colorRegistry",e)}),define(Q[528],J([4,5]),function(q,e){return q.create("vs/platform/theme/common/iconRegistry",e)}),define(Q[529],J([4,5]),function(q,e){return q.create("vs/platform/undoRedo/common/undoRedoService",e)}),define(Q[530],J([0,1,7]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.BrowserClipboardService=void 0;class N{constructor(){this.mapTextToType=new Map,this.findText=""}writeText(w,S){return Ie(this,void 0,void 0,function*(){if(S){this.mapTextToType.set(S,w);return}try{return yield navigator.clipboard.writeText(w)}catch(g){console.error(g)}const C=document.activeElement,d=document.body.appendChild(b.$("textarea",{"aria-hidden":!0}));d.style.height="1px",d.style.width="1px",d.style.position="absolute",d.value=w,d.focus(),d.select(),document.execCommand("copy"),C instanceof HTMLElement&&C.focus(),document.body.removeChild(d)})}readText(w){return Ie(this,void 0,void 0,function*(){if(w)return this.mapTextToType.get(w)||"";try{return yield navigator.clipboard.readText()}catch(S){return console.error(S),""}})}readFindText(){return Ie(this,void 0,void 0,function*(){return this.findText})}writeFindText(w){return Ie(this,void 0,void 0,function*(){this.findText=w})}}e.BrowserClipboardService=N}),define(Q[531],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.EditorOpenContext=void 0;var b;(function(N){N[N.API=0]="API",N[N.USER=1]="USER"})(b=e.EditorOpenContext||(e.EditorOpenContext={}))}),define(Q[532],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ExtensionIdentifier=void 0;class b{constructor(M){this.value=M,this._lower=M.toLowerCase()}static toKey(M){return typeof M=="string"?M.toLowerCase():M._lower}}e.ExtensionIdentifier=b}),define(Q[237],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.FileKind=void 0;var b;(function(N){N[N.FILE=0]="FILE",N[N.FOLDER=1]="FOLDER",N[N.ROOT_FOLDER=2]="ROOT_FOLDER"})(b=e.FileKind||(e.FileKind={}))}),define(Q[238],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SyncDescriptor=void 0;class b{constructor(M,w=[],S=!1){this.ctor=M,this.staticArguments=w,this.supportsDelayedInstantiation=S}}e.SyncDescriptor=b}),define(Q[74],J([0,1,238]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getSingletonServiceDescriptors=e.registerSingleton=void 0;const N=[];function M(S,C,d){C instanceof b.SyncDescriptor||(C=new b.SyncDescriptor(C,[],d)),N.push([S,C])}e.registerSingleton=M;function w(){return N}e.getSingletonServiceDescriptors=w}),define(Q[533],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Graph=e.Node=void 0;class b{constructor(w){this.incoming=new Map,this.outgoing=new Map,this.data=w}}e.Node=b;class N{constructor(w){this._hashFn=w,this._nodes=new Map}roots(){const w=[];for(let S of this._nodes.values())S.outgoing.size===0&&w.push(S);return w}insertEdge(w,S){const C=this.lookupOrInsertNode(w),d=this.lookupOrInsertNode(S);C.outgoing.set(this._hashFn(S),d),d.incoming.set(this._hashFn(w),C)}removeNode(w){const S=this._hashFn(w);this._nodes.delete(S);for(let C of this._nodes.values())C.outgoing.delete(S),C.incoming.delete(S)}lookupOrInsertNode(w){const S=this._hashFn(w);let C=this._nodes.get(S);return C||(C=new b(w),this._nodes.set(S,C)),C}isEmpty(){return this._nodes.size===0}toString(){let w=[];for(let[S,C]of this._nodes)w.push(`${S}, (incoming)[${[...C.incoming.keys()].join(", ")}], (outgoing)[${[...C.outgoing.keys()].join(",")}]`);return w.join(` +`)}}e.Graph=N}),define(Q[9],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.optional=e.createDecorator=e.IInstantiationService=e._util=void 0;var b;(function(S){S.serviceIds=new Map,S.DI_TARGET="$di$target",S.DI_DEPENDENCIES="$di$dependencies";function C(d){return d[S.DI_DEPENDENCIES]||[]}S.getServiceDependencies=C})(b=e._util||(e._util={})),e.IInstantiationService=M("instantiationService");function N(S,C,d,g){C[b.DI_TARGET]===C?C[b.DI_DEPENDENCIES].push({id:S,index:d,optional:g}):(C[b.DI_DEPENDENCIES]=[{id:S,index:d,optional:g}],C[b.DI_TARGET]=C)}function M(S){if(b.serviceIds.has(S))return b.serviceIds.get(S);const C=function(d,g,p){if(arguments.length!==3)throw new Error("@IServiceName-decorator can only be used to decorate a parameter");N(C,d,p,!1)};return C.toString=()=>S,b.serviceIds.set(S,C),C}e.createDecorator=M;function w(S){return function(C,d,g){if(arguments.length!==3)throw new Error("@optional-decorator can only be used to decorate a parameter");N(S,C,g,!0)}}e.optional=w}),define(Q[133],J([0,1,9,24,20]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ResourceFileEdit=e.ResourceTextEdit=e.ResourceEdit=e.IBulkEditService=void 0,e.IBulkEditService=b.createDecorator("IWorkspaceEditService");function w(p){return M.isObject(p)&&(Boolean(p.newUri)||Boolean(p.oldUri))}function S(p){return M.isObject(p)&&N.URI.isUri(p.resource)&&M.isObject(p.edit)}class C{constructor(c){this.metadata=c}static convert(c){return c.edits.map(o=>{if(S(o))return new d(o.resource,o.edit,o.modelVersionId,o.metadata);if(w(o))return new g(o.oldUri,o.newUri,o.options,o.metadata);throw new Error("Unsupported edit")})}}e.ResourceEdit=C;class d extends C{constructor(c,o,s,a){super(a);this.resource=c,this.textEdit=o,this.versionId=s,this.metadata=a}}e.ResourceTextEdit=d;class g extends C{constructor(c,o,s,a){super(a);this.oldResource=c,this.newResource=o,this.options=s,this.metadata=a}}e.ResourceFileEdit=g}),define(Q[28],J([0,1,9]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ICodeEditorService=void 0,e.ICodeEditorService=b.createDecorator("codeEditorService")}),define(Q[75],J([0,1,9]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IEditorWorkerService=e.ID_EDITOR_WORKER_SERVICE=void 0,e.ID_EDITOR_WORKER_SERVICE="editorWorkerService",e.IEditorWorkerService=b.createDecorator(e.ID_EDITOR_WORKER_SERVICE)}),define(Q[178],J([0,1,9]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IMarkerDecorationsService=void 0,e.IMarkerDecorationsService=b.createDecorator("markerDecorationsService")}),define(Q[57],J([0,1,9]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IModeService=void 0,e.IModeService=b.createDecorator("modeService")}),define(Q[36],J([0,1,9]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.shouldSynchronizeModel=e.IModelService=void 0,e.IModelService=b.createDecorator("modelService");function N(M){return!M.isTooLargeForSyncing()&&!M.isForSimpleWidget}e.shouldSynchronizeModel=N}),define(Q[134],J([0,1,6,89,2,51,100,374,36]),function(q,e,b,N,M,w,S,C,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.LanguageFeatureRequestDelays=e.LanguageFeatureRegistry=void 0;function g(o){return typeof o=="string"?!1:Array.isArray(o)?o.every(g):!!o.exclusive}class p{constructor(){this._clock=0,this._entries=[],this._onDidChange=new b.Emitter}get onDidChange(){return this._onDidChange.event}register(s,a){let u={selector:s,provider:a,_score:-1,_time:this._clock++};return this._entries.push(u),this._lastCandidate=void 0,this._onDidChange.fire(this._entries.length),M.toDisposable(()=>{if(u){let r=this._entries.indexOf(u);r>=0&&(this._entries.splice(r,1),this._lastCandidate=void 0,this._onDidChange.fire(this._entries.length),u=void 0)}})}has(s){return this.all(s).length>0}all(s){if(!s)return[];this._updateScores(s);const a=[];for(let u of this._entries)u._score>0&&a.push(u.provider);return a}ordered(s){const a=[];return this._orderedForEach(s,u=>a.push(u.provider)),a}orderedGroups(s){const a=[];let u,r;return this._orderedForEach(s,i=>{u&&r===i._score?u.push(i.provider):(r=i._score,u=[i.provider],a.push(u))}),a}_orderedForEach(s,a){if(!!s){this._updateScores(s);for(const u of this._entries)u._score>0&&a(u)}}_updateScores(s){let a={uri:s.uri.toString(),language:s.getLanguageIdentifier().language};if(!(this._lastCandidate&&this._lastCandidate.language===a.language&&this._lastCandidate.uri===a.uri)){this._lastCandidate=a;for(let u of this._entries)if(u._score=C.score(u.selector,s.uri,s.getLanguageIdentifier().language,d.shouldSynchronizeModel(s)),g(u.selector)&&u._score>0){for(let r of this._entries)r._score=0;u._score=1e3;break}this._entries.sort(p._compareByScoreAndTime)}}static _compareByScoreAndTime(s,a){return s._scorea._score?-1:s._timea._time?-1:0}}e.LanguageFeatureRegistry=p;class c{constructor(s,a,u=Number.MAX_SAFE_INTEGER){this._registry=s,this.min=a,this.max=u,this._cache=new w.LRUCache(50,.7)}_key(s){return s.id+N.hash(this._registry.all(s))}_clamp(s){return s===void 0?this.min:Math.min(this.max,Math.max(this.min,Math.floor(s*1.3)))}get(s){const a=this._key(s),u=this._cache.get(a);return this._clamp(u==null?void 0:u.value)}update(s,a){const u=this._key(s);let r=this._cache.get(u);return r||(r=new S.MovingAverage,this._cache.set(u,r)),r.update(a),this.get(s)}}e.LanguageFeatureRequestDelays=c}),define(Q[18],J([0,1,24,3,134,382,27]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TokenizationRegistry=e.DocumentRangeSemanticTokensProviderRegistry=e.DocumentSemanticTokensProviderRegistry=e.FoldingRangeProviderRegistry=e.SelectionRangeRegistry=e.ColorProviderRegistry=e.LinkProviderRegistry=e.OnTypeFormattingEditProviderRegistry=e.DocumentRangeFormattingEditProviderRegistry=e.DocumentFormattingEditProviderRegistry=e.CodeActionProviderRegistry=e.InlineHintsProviderRegistry=e.CodeLensProviderRegistry=e.TypeDefinitionProviderRegistry=e.ImplementationProviderRegistry=e.DeclarationProviderRegistry=e.DefinitionProviderRegistry=e.LinkedEditingRangeProviderRegistry=e.DocumentHighlightProviderRegistry=e.DocumentSymbolProviderRegistry=e.HoverProviderRegistry=e.SignatureHelpProviderRegistry=e.CompletionProviderRegistry=e.RenameProviderRegistry=e.ReferenceProviderRegistry=e.InlineHintKind=e.FoldingRangeKind=e.SymbolKinds=e.isLocationLink=e.DocumentHighlightKind=e.SignatureHelpTriggerKind=e.completionKindFromString=e.completionKindToCssClass=e.TokenMetadata=e.LanguageIdentifier=void 0;class C{constructor(r,i){this.language=r,this.id=i}}e.LanguageIdentifier=C;class d{static getLanguageId(r){return(r&255)>>>0}static getTokenType(r){return(r&1792)>>>8}static getFontStyle(r){return(r&14336)>>>11}static getForeground(r){return(r&8372224)>>>14}static getBackground(r){return(r&4286578688)>>>23}static getClassNameFromMetadata(r){let i=this.getForeground(r),n="mtk"+i,t=this.getFontStyle(r);return t&1&&(n+=" mtki"),t&2&&(n+=" mtkb"),t&4&&(n+=" mtku"),n}static getInlineStyleFromMetadata(r,i){const n=this.getForeground(r),t=this.getFontStyle(r);let l=`color: ${i[n]};`;return t&1&&(l+="font-style: italic;"),t&2&&(l+="font-weight: bold;"),t&4&&(l+="text-decoration: underline;"),l}}e.TokenMetadata=d,e.completionKindToCssClass=function(){let u=Object.create(null);return u[0]="symbol-method",u[1]="symbol-function",u[2]="symbol-constructor",u[3]="symbol-field",u[4]="symbol-variable",u[5]="symbol-class",u[6]="symbol-struct",u[7]="symbol-interface",u[8]="symbol-module",u[9]="symbol-property",u[10]="symbol-event",u[11]="symbol-operator",u[12]="symbol-unit",u[13]="symbol-value",u[14]="symbol-constant",u[15]="symbol-enum",u[16]="symbol-enum-member",u[17]="symbol-keyword",u[27]="symbol-snippet",u[18]="symbol-text",u[19]="symbol-color",u[20]="symbol-file",u[21]="symbol-reference",u[22]="symbol-customcolor",u[23]="symbol-folder",u[24]="symbol-type-parameter",u[25]="account",u[26]="issues",function(r){const i=u[r];let n=i&&S.iconRegistry.get(i);return n||(console.info("No codicon found for CompletionItemKind "+r),n=S.Codicon.symbolProperty),n.classNames}}(),e.completionKindFromString=function(){let u=Object.create(null);return u.method=0,u.function=1,u.constructor=2,u.field=3,u.variable=4,u.class=5,u.struct=6,u.interface=7,u.module=8,u.property=9,u.event=10,u.operator=11,u.unit=12,u.value=13,u.constant=14,u.enum=15,u["enum-member"]=16,u.enumMember=16,u.keyword=17,u.snippet=27,u.text=18,u.color=19,u.file=20,u.reference=21,u.customcolor=22,u.folder=23,u["type-parameter"]=24,u.typeParameter=24,u.account=25,u.issue=26,function(r,i){let n=u[r];return typeof n=="undefined"&&!i&&(n=9),n}}();var g;(function(u){u[u.Invoke=1]="Invoke",u[u.TriggerCharacter=2]="TriggerCharacter",u[u.ContentChange=3]="ContentChange"})(g=e.SignatureHelpTriggerKind||(e.SignatureHelpTriggerKind={}));var p;(function(u){u[u.Text=0]="Text",u[u.Read=1]="Read",u[u.Write=2]="Write"})(p=e.DocumentHighlightKind||(e.DocumentHighlightKind={}));function c(u){return u&&b.URI.isUri(u.uri)&&N.Range.isIRange(u.range)&&(N.Range.isIRange(u.originSelectionRange)||N.Range.isIRange(u.targetSelectionRange))}e.isLocationLink=c;var o;(function(u){const r=new Map;r.set("file",0),r.set("module",1),r.set("namespace",2),r.set("package",3),r.set("class",4),r.set("method",5),r.set("property",6),r.set("field",7),r.set("constructor",8),r.set("enum",9),r.set("interface",10),r.set("function",11),r.set("variable",12),r.set("constant",13),r.set("string",14),r.set("number",15),r.set("boolean",16),r.set("array",17),r.set("object",18),r.set("key",19),r.set("null",20),r.set("enum-member",21),r.set("struct",22),r.set("event",23),r.set("operator",24),r.set("type-parameter",25);const i=new Map;i.set(0,"file"),i.set(1,"module"),i.set(2,"namespace"),i.set(3,"package"),i.set(4,"class"),i.set(5,"method"),i.set(6,"property"),i.set(7,"field"),i.set(8,"constructor"),i.set(9,"enum"),i.set(10,"interface"),i.set(11,"function"),i.set(12,"variable"),i.set(13,"constant"),i.set(14,"string"),i.set(15,"number"),i.set(16,"boolean"),i.set(17,"array"),i.set(18,"object"),i.set(19,"key"),i.set(20,"null"),i.set(21,"enum-member"),i.set(22,"struct"),i.set(23,"event"),i.set(24,"operator"),i.set(25,"type-parameter");function n(h){return r.get(h)}u.fromString=n;function t(h){return i.get(h)}u.toString=t;function l(h,m){const _=i.get(h);let f=_&&S.iconRegistry.get("symbol-"+_);return f||(console.info("No codicon found for SymbolKind "+h),f=S.Codicon.symbolProperty),`${m?"inline":"block"} ${f.classNames}`}u.toCssClassName=l})(o=e.SymbolKinds||(e.SymbolKinds={}));class s{constructor(r){this.value=r}}e.FoldingRangeKind=s,s.Comment=new s("comment"),s.Imports=new s("imports"),s.Region=new s("region");var a;(function(u){u[u.Other=0]="Other",u[u.Type=1]="Type",u[u.Parameter=2]="Parameter"})(a=e.InlineHintKind||(e.InlineHintKind={})),e.ReferenceProviderRegistry=new M.LanguageFeatureRegistry,e.RenameProviderRegistry=new M.LanguageFeatureRegistry,e.CompletionProviderRegistry=new M.LanguageFeatureRegistry,e.SignatureHelpProviderRegistry=new M.LanguageFeatureRegistry,e.HoverProviderRegistry=new M.LanguageFeatureRegistry,e.DocumentSymbolProviderRegistry=new M.LanguageFeatureRegistry,e.DocumentHighlightProviderRegistry=new M.LanguageFeatureRegistry,e.LinkedEditingRangeProviderRegistry=new M.LanguageFeatureRegistry,e.DefinitionProviderRegistry=new M.LanguageFeatureRegistry,e.DeclarationProviderRegistry=new M.LanguageFeatureRegistry,e.ImplementationProviderRegistry=new M.LanguageFeatureRegistry,e.TypeDefinitionProviderRegistry=new M.LanguageFeatureRegistry,e.CodeLensProviderRegistry=new M.LanguageFeatureRegistry,e.InlineHintsProviderRegistry=new M.LanguageFeatureRegistry,e.CodeActionProviderRegistry=new M.LanguageFeatureRegistry,e.DocumentFormattingEditProviderRegistry=new M.LanguageFeatureRegistry,e.DocumentRangeFormattingEditProviderRegistry=new M.LanguageFeatureRegistry,e.OnTypeFormattingEditProviderRegistry=new M.LanguageFeatureRegistry,e.LinkProviderRegistry=new M.LanguageFeatureRegistry,e.ColorProviderRegistry=new M.LanguageFeatureRegistry,e.SelectionRangeRegistry=new M.LanguageFeatureRegistry,e.FoldingRangeProviderRegistry=new M.LanguageFeatureRegistry,e.DocumentSemanticTokensProviderRegistry=new M.LanguageFeatureRegistry,e.DocumentRangeSemanticTokensProviderRegistry=new M.LanguageFeatureRegistry,e.TokenizationRegistry=new w.TokenizationRegistryImpl}),define(Q[113],J([0,1,18]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SlicedLineTokens=e.LineTokens=void 0;class N{constructor(S,C){this._tokens=S,this._tokensCount=this._tokens.length>>>1,this._text=C}equals(S){return S instanceof N?this.slicedEquals(S,0,this._tokensCount):!1}slicedEquals(S,C,d){if(this._text!==S._text||this._tokensCount!==S._tokensCount)return!1;const g=C<<1,p=g+(d<<1);for(let c=g;c0?this._tokens[S-1<<1]:0}getMetadata(S){return this._tokens[(S<<1)+1]}getLanguageId(S){const C=this._tokens[(S<<1)+1];return b.TokenMetadata.getLanguageId(C)}getStandardTokenType(S){const C=this._tokens[(S<<1)+1];return b.TokenMetadata.getTokenType(C)}getForeground(S){const C=this._tokens[(S<<1)+1];return b.TokenMetadata.getForeground(C)}getClassName(S){const C=this._tokens[(S<<1)+1];return b.TokenMetadata.getClassNameFromMetadata(C)}getInlineStyle(S,C){const d=this._tokens[(S<<1)+1];return b.TokenMetadata.getInlineStyleFromMetadata(d,C)}getEndOffset(S){return this._tokens[S<<1]}findTokenIndexAtOffset(S){return N.findIndexInTokensArray(this._tokens,S)}inflate(){return this}sliceAndInflate(S,C,d){return new M(this,S,C,d)}static convertToEndOffset(S,C){const g=(S.length>>>1)-1;for(let p=0;p>>1)-1;for(;dC&&(g=p)}return d}}e.LineTokens=N;class M{constructor(S,C,d,g){this._source=S,this._startOffset=C,this._endOffset=d,this._deltaOffset=g,this._firstTokenIndex=S.findTokenIndexAtOffset(C),this._tokensCount=0;for(let p=this._firstTokenIndex,c=S.getCount();p=d);p++)this._tokensCount++}equals(S){return S instanceof M?this._startOffset===S._startOffset&&this._endOffset===S._endOffset&&this._deltaOffset===S._deltaOffset&&this._source.slicedEquals(S._source,this._firstTokenIndex,this._tokensCount):!1}getCount(){return this._tokensCount}getForeground(S){return this._source.getForeground(this._firstTokenIndex+S)}getEndOffset(S){const C=this._source.getEndOffset(this._firstTokenIndex+S);return Math.min(this._endOffset,C)-this._startOffset+this._deltaOffset}getClassName(S){return this._source.getClassName(this._firstTokenIndex+S)}getInlineStyle(S,C){return this._source.getInlineStyle(this._firstTokenIndex+S,C)}findTokenIndexAtOffset(S){return this._source.findTokenIndexAtOffset(S+this._startOffset-this._deltaOffset)-this._firstTokenIndex}}e.SlicedLineTokens=M}),define(Q[135],J([0,1,19,113,14,3,18]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TokensStore=e.TokensStore2=e.MultilineTokens=e.MultilineTokens2=e.LineTokens2=e.SparseEncodedTokens=e.MultilineTokensBuilder=e.countEOL=void 0;function C(n){let t=0,l=0,h=0,m=0;for(let _=0,f=n.length;_>>0}const g=new Uint32Array(0).buffer;class p{constructor(){this.tokens=[]}add(t,l){if(this.tokens.length>0){const h=this.tokens[this.tokens.length-1];if(h.startLineNumber+h.tokens.length-1+1===t){h.tokens.push(l);return}}this.tokens.push(new a(t,[l]))}}e.MultilineTokensBuilder=p;class c{constructor(t){this._tokens=t,this._tokenCount=t.length/4}toString(t){let l=[];for(let h=0;ht)h=m-1;else{let f=m;for(;f>l&&this._getDeltaLine(f-1)===t;)f--;let v=m;for(;vt||E===t&&O>=l)&&(Et||O===t&&B>=l){if(O_?A-=_-h:A=h;else if(T===l&&O===h)if(T===m&&A>_)A-=_-h;else{I=!0;continue}else if(T_)T===l?(O=h,A=O+(A-_)):(O=0,A=O+(A-_));else{I=!0;continue}else if(T>m){if(y===0&&!I){L=v;break}T-=y}else if(T===m&&O>=_)t&&T===0&&(O+=t,A+=t),T-=y,O-=_-h,A-=_-h;else throw new Error("Not possible!");const F=4*L;f[F]=T,f[F+1]=O,f[F+2]=A,f[F+3]=B,L++}this._tokenCount=L}acceptInsertText(t,l,h,m,_,f){const v=h===0&&m===1&&(f>=48&&f<=57||f>=65&&f<=90||f>=97&&f<=122),y=this._tokens,L=this._tokenCount;for(let I=0;I0?l.charCodeAt(0):0)}acceptEdit(t,l,h,m,_){this._acceptDeleteRange(t),this._acceptInsertText(new M.Position(t.startLineNumber,t.startColumn),l,h,m,_),this._updateEndLineNumber()}_acceptDeleteRange(t){if(!(t.startLineNumber===t.endLineNumber&&t.startColumn===t.endColumn)){const l=t.startLineNumber-this.startLineNumber,h=t.endLineNumber-this.startLineNumber;if(h<0){const _=h-l;this.startLineNumber-=_;return}const m=this.tokens.getMaxDeltaLine();if(!(l>=m+1)){if(l<0&&h>=m+1){this.startLineNumber=0,this.tokens.clear();return}if(l<0){const _=-l;this.startLineNumber-=_,this.tokens.acceptDeleteRange(t.startColumn-1,0,0,h,t.endColumn-1)}else this.tokens.acceptDeleteRange(0,l,t.startColumn-1,h,t.endColumn-1)}}}_acceptInsertText(t,l,h,m,_){if(!(l===0&&h===0)){const f=t.lineNumber-this.startLineNumber;if(f<0){this.startLineNumber+=l;return}const v=this.tokens.getMaxDeltaLine();f>=v+1||this.tokens.acceptInsertText(f,t.column-1,l,h,m,_)}}}e.MultilineTokens2=s;class a{constructor(t,l){this.startLineNumber=t,this.tokens=l}}e.MultilineTokens=a;function u(n){return n instanceof Uint32Array?n:new Uint32Array(n)}class r{constructor(){this._pieces=[],this._isComplete=!1}flush(){this._pieces=[],this._isComplete=!1}isEmpty(){return this._pieces.length===0}set(t,l){this._pieces=t||[],this._isComplete=l}setPartial(t,l){let h=t;if(l.length>0){const _=l[0].getRange(),f=l[l.length-1].getRange();if(!_||!f)return t;h=t.plusRange(_).plusRange(f)}let m=null;for(let _=0,f=this._pieces.length;_h.endLineNumber){m=m||{index:_};break}if(v.removeTokens(h),v.isEmpty()){this._pieces.splice(_,1),_--,f--;continue}if(!(v.endLineNumberh.endLineNumber){m=m||{index:_};continue}const[y,L]=v.split(h);if(y.isEmpty()){m=m||{index:_};continue}L.isEmpty()||(this._pieces.splice(_,1,y,L),_++,f++,m=m||{index:_})}}}return m=m||{index:this._pieces.length},l.length>0&&(this._pieces=b.arrayInsert(this._pieces,m.index,l)),h}isComplete(){return this._isComplete}addSemanticTokens(t,l){const h=this._pieces;if(h.length===0)return l;const m=r._findFirstPieceWithLine(h,t),_=h[m].getLineTokens(t);if(!_)return l;const f=l.getCount(),v=_.getCount();let y=0,L=[],I=0,k=0;const E=(T,O)=>{T!==k&&(k=T,L[I++]=T,L[I++]=O)};for(let T=0;T>>0,D=~F>>>0;for(;yl)m=_-1;else{for(;_>h&&t[_-1].startLineNumber<=l&&l<=t[_-1].endLineNumber;)_--;return _}}return h}acceptEdit(t,l,h,m,_){for(const f of this._pieces)f.acceptEdit(t,l,h,m,_)}}e.TokensStore2=r;class i{constructor(){this._lineTokens=[],this._len=0}flush(){this._lineTokens=[],this._len=0}getTokens(t,l,h){let m=null;if(l1&&(_=S.TokenMetadata.getLanguageId(m[1])!==t),!_)return g}if(!m||m.length===0){const _=new Uint32Array(2);return _[0]=l,_[1]=d(t),_.buffer}return m[m.length-2]=l,m.byteOffset===0&&m.byteLength===m.buffer.byteLength?m.buffer:m}_ensureLine(t){for(;t>=this._len;)this._lineTokens[this._len]=null,this._len++}_deleteLines(t,l){l!==0&&(t+l>this._len&&(l=this._len-t),this._lineTokens.splice(t,l),this._len-=l)}_insertLines(t,l){if(l!==0){let h=[];for(let m=0;m=this._len)){if(t.startLineNumber===t.endLineNumber){if(t.startColumn===t.endColumn)return;this._lineTokens[l]=i._delete(this._lineTokens[l],t.startColumn-1,t.endColumn-1);return}this._lineTokens[l]=i._deleteEnding(this._lineTokens[l],t.startColumn-1);const h=t.endLineNumber-1;let m=null;h=this._len)){if(l===0){this._lineTokens[m]=i._insert(this._lineTokens[m],t.column-1,h);return}this._lineTokens[m]=i._deleteEnding(this._lineTokens[m],t.column-1),this._lineTokens[m]=i._insert(this._lineTokens[m],t.column-1,h),this._insertLines(t.lineNumber,l)}}}static _deleteBeginning(t,l){return t===null||t===g?t:i._delete(t,0,l)}static _deleteEnding(t,l){if(t===null||t===g)return t;const h=u(t),m=h[h.length-2];return i._delete(t,l,m)}static _delete(t,l,h){if(t===null||t===g||l===h)return t;const m=u(t),_=m.length>>>1;if(l===0&&m[m.length-2]===h)return g;const f=N.LineTokens.findIndexInTokensArray(m,l),v=f>0?m[f-1<<1]:0,y=m[f<<1];if(hI&&(m[L++]=O,m[L++]=m[(T<<1)+1],I=O)}if(L===m.length)return t;let E=new Uint32Array(L);return E.set(m.subarray(0,L),0),E.buffer}static _append(t,l){if(l===g)return t;if(t===g)return l;if(t===null)return t;if(l===null)return null;const h=u(t),m=u(l),_=m.length>>>1;let f=new Uint32Array(h.length+m.length);f.set(h,0);let v=h.length;const y=h[h.length-2];for(let L=0;L<_;L++)f[v++]=m[L<<1]+y,f[v++]=m[(L<<1)+1];return f.buffer}static _insert(t,l,h){if(t===null||t===g)return t;const m=u(t),_=m.length>>>1;let f=N.LineTokens.findIndexInTokensArray(m,l);f>0&&m[f-1<<1]===l&&f--;for(let v=f;v<_;v++)m[v<<1]+=h;return t}}e.TokensStore=i}),define(Q[239],J([0,1,6,8,3,53,219,135,218,2]),function(q,e,b,N,M,w,S,C,d,g){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.PieceTreeTextBuffer=void 0;class p extends g.Disposable{constructor(o,s,a,u,r,i,n){super();this._onDidChangeContent=this._register(new b.Emitter),this._BOM=s,this._mightContainNonBasicASCII=!i,this._mightContainRTL=u,this._mightContainUnusualLineTerminators=r,this._pieceTree=new S.PieceTreeBase(o,a,n)}mightContainRTL(){return this._mightContainRTL}mightContainUnusualLineTerminators(){return this._mightContainUnusualLineTerminators}resetMightContainUnusualLineTerminators(){this._mightContainUnusualLineTerminators=!1}mightContainNonBasicASCII(){return this._mightContainNonBasicASCII}getBOM(){return this._BOM}getEOL(){return this._pieceTree.getEOL()}createSnapshot(o){return this._pieceTree.createSnapshot(o?this._BOM:"")}getOffsetAt(o,s){return this._pieceTree.getOffsetAt(o,s)}getPositionAt(o){return this._pieceTree.getPositionAt(o)}getRangeAt(o,s){let a=o+s;const u=this.getPositionAt(o),r=this.getPositionAt(a);return new M.Range(u.lineNumber,u.column,r.lineNumber,r.column)}getValueInRange(o,s=0){if(o.isEmpty())return"";const a=this._getEndOfLine(s);return this._pieceTree.getValueInRange(o,a)}getValueLengthInRange(o,s=0){if(o.isEmpty())return 0;if(o.startLineNumber===o.endLineNumber)return o.endColumn-o.startColumn;let a=this.getOffsetAt(o.startLineNumber,o.startColumn);return this.getOffsetAt(o.endLineNumber,o.endColumn)-a}getCharacterCountInRange(o,s=0){if(this._mightContainNonBasicASCII){let a=0;const u=o.startLineNumber,r=o.endLineNumber;for(let i=u;i<=r;i++){const n=this.getLineContent(i),t=i===u?o.startColumn-1:0,l=i===r?o.endColumn-1:n.length;for(let h=t;hL.sortIndex-I.sortIndex)}this._mightContainRTL=u,this._mightContainUnusualLineTerminators=r,this._mightContainNonBasicASCII=i;const f=this._doApplyEdits(t);let v=null;if(s&&m.length>0){m.sort((y,L)=>L.lineNumber-y.lineNumber),v=[];for(let y=0,L=m.length;y0&&m[y-1].lineNumber===I)){let k=m[y].oldContent,E=this.getLineContent(I);E.length===0||E===k||N.firstNonWhitespaceIndex(E)!==-1||v.push(I)}}}return this._onDidChangeContent.fire(),new w.ApplyEditsResult(_,f,v)}_reduceOperations(o){return o.length<1e3?o:[this._toSingleEditOperation(o)]}_toSingleEditOperation(o){let s=!1;const a=o[0].range,u=o[o.length-1].range,r=new M.Range(a.startLineNumber,a.startColumn,u.endLineNumber,u.endColumn);let i=a.startLineNumber,n=a.startColumn;const t=[];for(let f=0,v=o.length;f0&&t.push(y.text),i=L.endLineNumber,n=L.endColumn}const l=t.join(""),[h,m,_]=C.countEOL(l);return{sortIndex:0,identifier:o[0].identifier,range:r,rangeOffset:this.getOffsetAt(r.startLineNumber,r.startColumn),rangeLength:this.getValueLengthInRange(r,0),text:l,eolCount:h,firstLineLength:m,lastLineLength:_,forceMoveMarkers:s,isAutoWhitespaceEdit:!1}}_doApplyEdits(o){o.sort(p._sortOpsDescending);let s=[];for(let a=0;a0){const _=t.eolCount+1;_===1?m=new M.Range(l,h,l,h+t.firstLineLength):m=new M.Range(l,h,l+_-1,t.lastLineLength+1)}else m=new M.Range(l,h,l,h);a=m.endLineNumber,u=m.endColumn,s.push(m),r=t}return s}static _sortOpsAscending(o,s){let a=M.Range.compareRangesUsingEnds(o.range,s.range);return a===0?o.sortIndex-s.sortIndex:a}static _sortOpsDescending(o,s){let a=M.Range.compareRangesUsingEnds(o.range,s.range);return a===0?s.sortIndex-o.sortIndex:-a}}e.PieceTreeTextBuffer=p}),define(Q[534],J([0,1,8,219,239]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.PieceTreeTextBufferBuilder=e.PieceTreeTextBufferFactory=void 0;class w{constructor(d,g,p,c,o,s,a,u,r){this._chunks=d,this._bom=g,this._cr=p,this._lf=c,this._crlf=o,this._containsRTL=s,this._containsUnusualLineTerminators=a,this._isBasicASCII=u,this._normalizeEOL=r}_getEOL(d){const g=this._cr+this._lf+this._crlf,p=this._cr+this._crlf;return g===0?d===1?` +`:`\r +`:p>g/2?`\r +`:` +`}create(d){const g=this._getEOL(d);let p=this._chunks;if(this._normalizeEOL&&(g===`\r +`&&(this._cr>0||this._lf>0)||g===` +`&&(this._cr>0||this._crlf>0)))for(let o=0,s=p.length;o=55296&&g<=56319?(this._acceptChunk1(d.substr(0,d.length-1),!1),this._hasPreviousChar=!0,this._previousChar=g):(this._acceptChunk1(d,!1),this._hasPreviousChar=!1,this._previousChar=g)}}_acceptChunk1(d,g){!g&&d.length===0||(this._hasPreviousChar?this._acceptChunk2(String.fromCharCode(this._previousChar)+d):this._acceptChunk2(d))}_acceptChunk2(d){const g=N.createLineStarts(this._tmpLineStarts,d);this.chunks.push(new N.StringBuffer(d,g.lineStarts)),this.cr+=g.cr,this.lf+=g.lf,this.crlf+=g.crlf,this.isBasicASCII&&(this.isBasicASCII=g.isBasicASCII),!this.isBasicASCII&&!this.containsRTL&&(this.containsRTL=b.containsRTL(d)),!this.isBasicASCII&&!this.containsUnusualLineTerminators&&(this.containsUnusualLineTerminators=b.containsUnusualLineTerminators(d))}finish(d=!0){return this._finish(),new w(this.chunks,this.BOM,this.cr,this.lf,this.crlf,this.containsRTL,this.containsUnusualLineTerminators,this.isBasicASCII,d)}_finish(){if(this.chunks.length===0&&this._acceptChunk1("",!0),this._hasPreviousChar){this._hasPreviousChar=!1;let d=this.chunks[this.chunks.length-1];d.buffer+=String.fromCharCode(this._previousChar);let g=N.createLineStartsFast(d.buffer);d.lineStarts=g,this._previousChar===13&&this.cr++}}}e.PieceTreeTextBufferBuilder=S}),define(Q[76],J([0,1,127,18]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.nullTokenize2=e.nullTokenize=e.NULL_LANGUAGE_IDENTIFIER=e.NULL_MODE_ID=e.NULL_STATE=void 0;class M{clone(){return this}equals(d){return this===d}}e.NULL_STATE=new M,e.NULL_MODE_ID="vs.editor.nullMode",e.NULL_LANGUAGE_IDENTIFIER=new N.LanguageIdentifier(e.NULL_MODE_ID,0);function w(C,d,g,p){return new b.TokenizationResult([new b.Token(p,"",C)],g)}e.nullTokenize=w;function S(C,d,g,p){let c=new Uint32Array(2);return c[0]=p,c[1]=(C<<0|0<<8|0<<11|1<<14|2<<23)>>>0,new b.TokenizationResult2(c,g===null?e.NULL_STATE:g)}e.nullTokenize2=S}),define(Q[535],J([0,1,19,12,113,14,18,76,2,81,135,17]),function(q,e,b,N,M,w,S,C,d,g,p,c){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TextModelTokenization=e.TokenizationStateStore=void 0;class o{constructor(){this._beginState=[],this._valid=[],this._len=0,this._invalidLineStartIndex=0}_reset(i){this._beginState=[],this._valid=[],this._len=0,this._invalidLineStartIndex=0,i&&this._setBeginState(0,i)}flush(i){this._reset(i)}get invalidLineStartIndex(){return this._invalidLineStartIndex}_invalidateLine(i){i=this._len;)this._beginState[this._len]=null,this._valid[this._len]=!1,this._len++}_deleteLines(i,n){n!==0&&(i+n>this._len&&(n=this._len-i),this._beginState.splice(i,n),this._valid.splice(i,n),this._len-=n)}_insertLines(i,n){if(n!==0){let t=[],l=[];for(let h=0;h=0;m--)this._invalidateLine(i.startLineNumber+m-1);this._acceptDeleteRange(i),this._acceptInsertText(new w.Position(i.startLineNumber,i.startColumn),n)}_acceptDeleteRange(i){i.startLineNumber-1>=this._len||this._deleteLines(i.startLineNumber,i.endLineNumber-i.startLineNumber)}_acceptInsertText(i,n){i.lineNumber-1>=this._len||this._insertLines(i.lineNumber,n)}}e.TokenizationStateStore=o;class s extends d.Disposable{constructor(i){super();this._isDisposed=!1,this._textModel=i,this._tokenizationStateStore=new o,this._tokenizationSupport=null,this._register(S.TokenizationRegistry.onDidChange(n=>{const t=this._textModel.getLanguageIdentifier();n.changedLanguages.indexOf(t.language)!==-1&&(this._resetTokenizationState(),this._textModel.clearTokens())})),this._register(this._textModel.onDidChangeRawContentFast(n=>{if(n.containsEvent(1)){this._resetTokenizationState();return}})),this._register(this._textModel.onDidChangeContentFast(n=>{for(let t=0,l=n.changes.length;t{this._beginBackgroundTokenization()})),this._register(this._textModel.onDidChangeLanguage(()=>{this._resetTokenizationState(),this._textModel.clearTokens()})),this._resetTokenizationState()}dispose(){this._isDisposed=!0,super.dispose()}_resetTokenizationState(){const[i,n]=a(this._textModel);this._tokenizationSupport=i,this._tokenizationStateStore.flush(n),this._beginBackgroundTokenization()}_beginBackgroundTokenization(){this._textModel.isAttachedToEditor()&&this._hasLinesToTokenize()&&c.setImmediate(()=>{this._isDisposed||this._revalidateTokensNow()})}_revalidateTokensNow(i=this._textModel.getLineCount()){const n=1,t=new p.MultilineTokensBuilder,l=g.StopWatch.create(!1);for(;this._hasLinesToTokenize()&&!(l.elapsed()>n||this._tokenizeOneInvalidLine(t)>=i););this._beginBackgroundTokenization(),this._textModel.setTokens(t.tokens)}tokenizeViewport(i,n){const t=new p.MultilineTokensBuilder;this._tokenizeViewport(t,i,n),this._textModel.setTokens(t.tokens)}reset(){this._resetTokenizationState(),this._textModel.clearTokens()}forceTokenization(i){const n=new p.MultilineTokensBuilder;this._updateTokensUntilLine(n,i),this._textModel.setTokens(n.tokens)}isCheapToTokenize(i){if(!this._tokenizationSupport)return!0;const n=this._tokenizationStateStore.invalidLineStartIndex+1;return i>n?!1:i0&&v>=1;v--){let y=this._textModel.getLineFirstNonWhitespaceColumn(v);if(y!==0&&y=0;v--)f=u(_,this._tokenizationSupport,h[v],!1,f).endState;for(let v=n;v<=t;v++){let y=this._textModel.getLineContent(v),L=u(_,this._tokenizationSupport,y,!0,f);i.add(v,L.tokens),this._tokenizationStateStore.setFakeTokens(v-1),f=L.endState}}}}e.TextModelTokenization=s;function a(r){const i=r.getLanguageIdentifier();let n=r.isTooLargeForTokenization()?null:S.TokenizationRegistry.get(i.language),t=null;if(n)try{t=n.getInitialState()}catch(l){N.onUnexpectedError(l),n=null}return[n,t]}function u(r,i,n,t,l){let h=null;if(i)try{h=i.tokenize2(n,t,l.clone(),0)}catch(m){N.onUnexpectedError(m)}return h||(h=C.nullTokenize2(r.id,n,l,0)),M.LineTokens.convertToEndOffset(h.tokens,n.length),h}}),define(Q[31],J([0,1,12,6,2,8,24,38,14,3,21,53,236,369,370,534,372,166,535,128,41,76,167,168,135,29,239]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l,h,m,_,f,v,y){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DidChangeContentEmitter=e.DidChangeDecorationsEmitter=e.ModelDecorationOptions=e.ModelDecorationMinimapOptions=e.ModelDecorationOverviewRulerOptions=e.TextModel=e.LONG_LINE_BOUNDARY=e.createTextBuffer=e.createTextBufferFactory=void 0;function L(){return new u.PieceTreeTextBufferBuilder}function I(z){const P=L();return P.acceptChunk(z),P.finish()}e.createTextBufferFactory=I;function k(z,P){return(typeof z=="string"?I(z):z).create(P)}e.createTextBuffer=k;let E=0;const T=999;e.LONG_LINE_BOUNDARY=1e4;class O{constructor(P){this._source=P,this._eos=!1}read(){if(this._eos)return null;let P=[],V=0,U=0;do{let H=this._source.read();if(H===null)return this._eos=!0,V===0?null:P.join("");if(H.length>0&&(P[V++]=H,U+=H.length),U>=64*1024)return P.join("")}while(!0)}}const A=()=>{throw new Error("Invalid change accessor")};class B{constructor(){this._searchCanceledBrand=void 0}}B.INSTANCE=new B;function F(z){return z instanceof B?null:z}class D extends M.Disposable{constructor(P,V,U,H=null,$){super();this._onWillDispose=this._register(new N.Emitter),this.onWillDispose=this._onWillDispose.event,this._onDidChangeDecorations=this._register(new le),this.onDidChangeDecorations=this._onDidChangeDecorations.event,this._onDidChangeLanguage=this._register(new N.Emitter),this.onDidChangeLanguage=this._onDidChangeLanguage.event,this._onDidChangeLanguageConfiguration=this._register(new N.Emitter),this.onDidChangeLanguageConfiguration=this._onDidChangeLanguageConfiguration.event,this._onDidChangeTokens=this._register(new N.Emitter),this.onDidChangeTokens=this._onDidChangeTokens.event,this._onDidChangeOptions=this._register(new N.Emitter),this.onDidChangeOptions=this._onDidChangeOptions.event,this._onDidChangeAttached=this._register(new N.Emitter),this.onDidChangeAttached=this._onDidChangeAttached.event,this._eventEmitter=this._register(new X),E++,this.id="$model"+E,this.isForSimpleWidget=V.isForSimpleWidget,typeof H=="undefined"||H===null?this._associatedResource=S.URI.parse("inmemory://model/"+E):this._associatedResource=H,this._undoRedoService=$,this._attachedEditorCount=0;const{textBuffer:ie,disposable:oe}=k(P,V.defaultEOL);this._buffer=ie,this._bufferDisposable=oe,this._options=D.resolveOptions(this._buffer,V);const ae=this._buffer.getLineCount(),G=this._buffer.getValueLengthInRange(new g.Range(1,1,ae,this._buffer.getLineLength(ae)+1),0);V.largeFileOptimizations?this._isTooLargeForTokenization=G>D.LARGE_FILE_SIZE_THRESHOLD||ae>D.LARGE_FILE_LINE_COUNT_THRESHOLD:this._isTooLargeForTokenization=!1,this._isTooLargeForSyncing=G>D.MODEL_SYNC_LIMIT,this._versionId=1,this._alternativeVersionId=1,this._initialUndoRedoSnapshot=null,this._isDisposed=!1,this._isDisposing=!1,this._languageIdentifier=U||h.NULL_LANGUAGE_IDENTIFIER,this._languageRegistryListener=l.LanguageConfigurationRegistry.onDidChange(j=>{j.languageIdentifier.id===this._languageIdentifier.id&&this._onDidChangeLanguageConfiguration.fire({})}),this._instanceId=w.singleLetterHash(E),this._lastDecorationId=0,this._decorations=Object.create(null),this._decorationsTree=new R,this._commandManager=new o.EditStack(this,$),this._isUndoing=!1,this._isRedoing=!1,this._trimAutoWhitespaceLines=null,this._tokens=new f.TokensStore,this._tokens2=new f.TokensStore2,this._tokenization=new n.TextModelTokenization(this)}static resolveOptions(P,V){if(V.detectIndentation){const U=s.guessIndentation(P,V.tabSize,V.insertSpaces);return new c.TextModelResolvedOptions({tabSize:U.tabSize,indentSize:U.tabSize,insertSpaces:U.insertSpaces,trimAutoWhitespace:V.trimAutoWhitespace,defaultEOL:V.defaultEOL})}return new c.TextModelResolvedOptions({tabSize:V.tabSize,indentSize:V.indentSize,insertSpaces:V.insertSpaces,trimAutoWhitespace:V.trimAutoWhitespace,defaultEOL:V.defaultEOL})}onDidChangeRawContentFast(P){return this._eventEmitter.fastEvent(V=>P(V.rawContentChangedEvent))}onDidChangeContentFast(P){return this._eventEmitter.fastEvent(V=>P(V.contentChangedEvent))}onDidChangeContent(P){return this._eventEmitter.slowEvent(V=>P(V.contentChangedEvent))}dispose(){this._isDisposing=!0,this._onWillDispose.fire(),this._languageRegistryListener.dispose(),this._tokenization.dispose(),this._isDisposed=!0,super.dispose(),this._bufferDisposable.dispose(),this._isDisposing=!1;const P=new y.PieceTreeTextBuffer([],"",` +`,!1,!1,!0,!0);P.dispose(),this._buffer=P}_assertNotDisposed(){if(this._isDisposed)throw new Error("Model is disposed!")}_emitContentChangedEvent(P,V){this._isDisposing||this._eventEmitter.fire(new r.InternalModelContentChangeEvent(P,V))}setValue(P){if(this._assertNotDisposed(),P!==null){const{textBuffer:V,disposable:U}=k(P,this._options.defaultEOL);this._setValueFromTextBuffer(V,U)}}_createContentChanged2(P,V,U,H,$,ie,oe){return{changes:[{range:P,rangeOffset:V,rangeLength:U,text:H}],eol:this._buffer.getEOL(),versionId:this.getVersionId(),isUndoing:$,isRedoing:ie,isFlush:oe}}_setValueFromTextBuffer(P,V){this._assertNotDisposed();const U=this.getFullModelRange(),H=this.getValueLengthInRange(U),$=this.getLineCount(),ie=this.getLineMaxColumn($);this._buffer=P,this._bufferDisposable.dispose(),this._bufferDisposable=V,this._increaseVersionId(),this._tokens.flush(),this._tokens2.flush(),this._decorations=Object.create(null),this._decorationsTree=new R,this._commandManager.clear(),this._trimAutoWhitespaceLines=null,this._emitContentChangedEvent(new r.ModelRawContentChangedEvent([new r.ModelRawFlush],this._versionId,!1,!1),this._createContentChanged2(new g.Range(1,1,$,ie),0,H,this.getValue(),!1,!1,!0))}setEOL(P){this._assertNotDisposed();const V=P===1?`\r +`:` +`;if(this._buffer.getEOL()!==V){const U=this.getFullModelRange(),H=this.getValueLengthInRange(U),$=this.getLineCount(),ie=this.getLineMaxColumn($);this._onBeforeEOLChange(),this._buffer.setEOL(V),this._increaseVersionId(),this._onAfterEOLChange(),this._emitContentChangedEvent(new r.ModelRawContentChangedEvent([new r.ModelRawEOLChanged],this._versionId,!1,!1),this._createContentChanged2(new g.Range(1,1,$,ie),0,H,this.getValue(),!1,!1,!1))}}_onBeforeEOLChange(){const P=this.getVersionId(),V=this._decorationsTree.search(0,!1,!1,P);this._ensureNodesHaveRanges(V)}_onAfterEOLChange(){const P=this.getVersionId(),V=this._decorationsTree.collectNodesPostOrder();for(let U=0,H=V.length;U0}getAttachedEditorCount(){return this._attachedEditorCount}isTooLargeForSyncing(){return this._isTooLargeForSyncing}isTooLargeForTokenization(){return this._isTooLargeForTokenization}isDisposed(){return this._isDisposed}isDominatedByLongLines(){if(this._assertNotDisposed(),this.isTooLargeForTokenization())return!1;let P=0,V=0;const U=this._buffer.getLineCount();for(let H=1;H<=U;H++){const $=this._buffer.getLineLength(H);$>=e.LONG_LINE_BOUNDARY?V+=$:P+=$}return V>P}get uri(){return this._associatedResource}getOptions(){return this._assertNotDisposed(),this._options}getFormattingOptions(){return{tabSize:this._options.indentSize,insertSpaces:this._options.insertSpaces}}updateOptions(P){this._assertNotDisposed();let V=typeof P.tabSize!="undefined"?P.tabSize:this._options.tabSize,U=typeof P.indentSize!="undefined"?P.indentSize:this._options.indentSize,H=typeof P.insertSpaces!="undefined"?P.insertSpaces:this._options.insertSpaces,$=typeof P.trimAutoWhitespace!="undefined"?P.trimAutoWhitespace:this._options.trimAutoWhitespace,ie=new c.TextModelResolvedOptions({tabSize:V,indentSize:U,insertSpaces:H,defaultEOL:this._options.defaultEOL,trimAutoWhitespace:$});if(!this._options.equals(ie)){let oe=this._options.createChangeEvent(ie);this._options=ie,this._onDidChangeOptions.fire(oe)}}detectIndentation(P,V){this._assertNotDisposed();let U=s.guessIndentation(this._buffer,V,P);this.updateOptions({insertSpaces:U.insertSpaces,tabSize:U.tabSize,indentSize:U.tabSize})}static _normalizeIndentationFromWhitespace(P,V,U){let H=0;for(let ie=0;ie({range:U.range,text:null})),()=>null)}mightContainNonBasicASCII(){return this._buffer.mightContainNonBasicASCII()}getAlternativeVersionId(){return this._assertNotDisposed(),this._alternativeVersionId}getInitialUndoRedoSnapshot(){return this._assertNotDisposed(),this._initialUndoRedoSnapshot}getOffsetAt(P){this._assertNotDisposed();let V=this._validatePosition(P.lineNumber,P.column,0);return this._buffer.getOffsetAt(V.lineNumber,V.column)}getPositionAt(P){this._assertNotDisposed();let V=Math.min(this._buffer.getLength(),Math.max(0,P));return this._buffer.getPositionAt(V)}_increaseVersionId(){this._versionId=this._versionId+1,this._alternativeVersionId=this._versionId}_overwriteVersionId(P){this._versionId=P}_overwriteAlternativeVersionId(P){this._alternativeVersionId=P}_overwriteInitialUndoRedoSnapshot(P){this._initialUndoRedoSnapshot=P}getValue(P,V=!1){this._assertNotDisposed();const U=this.getFullModelRange(),H=this.getValueInRange(U,P);return V?this._buffer.getBOM()+H:H}createSnapshot(P=!1){return new O(this._buffer.createSnapshot(P))}getValueLength(P,V=!1){this._assertNotDisposed();const U=this.getFullModelRange(),H=this.getValueLengthInRange(U,P);return V?this._buffer.getBOM().length+H:H}getValueInRange(P,V=0){return this._assertNotDisposed(),this._buffer.getValueInRange(this.validateRange(P),V)}getValueLengthInRange(P,V=0){return this._assertNotDisposed(),this._buffer.getValueLengthInRange(this.validateRange(P),V)}getCharacterCountInRange(P,V=0){return this._assertNotDisposed(),this._buffer.getCharacterCountInRange(this.validateRange(P),V)}getLineCount(){return this._assertNotDisposed(),this._buffer.getLineCount()}getLineContent(P){if(this._assertNotDisposed(),P<1||P>this.getLineCount())throw new Error("Illegal value for lineNumber");return this._buffer.getLineContent(P)}getLineLength(P){if(this._assertNotDisposed(),P<1||P>this.getLineCount())throw new Error("Illegal value for lineNumber");return this._buffer.getLineLength(P)}getLinesContent(){return this._assertNotDisposed(),this._buffer.getLinesContent()}getEOL(){return this._assertNotDisposed(),this._buffer.getEOL()}getEndOfLineSequence(){return this._assertNotDisposed(),this._buffer.getEOL()===` +`?0:1}getLineMinColumn(P){return this._assertNotDisposed(),1}getLineMaxColumn(P){if(this._assertNotDisposed(),P<1||P>this.getLineCount())throw new Error("Illegal value for lineNumber");return this._buffer.getLineLength(P)+1}getLineFirstNonWhitespaceColumn(P){if(this._assertNotDisposed(),P<1||P>this.getLineCount())throw new Error("Illegal value for lineNumber");return this._buffer.getLineFirstNonWhitespaceColumn(P)}getLineLastNonWhitespaceColumn(P){if(this._assertNotDisposed(),P<1||P>this.getLineCount())throw new Error("Illegal value for lineNumber");return this._buffer.getLineLastNonWhitespaceColumn(P)}_validateRangeRelaxedNoAllocations(P){const V=this._buffer.getLineCount(),U=P.startLineNumber,H=P.startColumn;let $,ie;if(U<1)$=1,ie=1;else if(U>V)$=V,ie=this.getLineMaxColumn($);else if($=U|0,H<=1)ie=1;else{const te=this.getLineMaxColumn($);H>=te?ie=te:ie=H|0}const oe=P.endLineNumber,ae=P.endColumn;let G,j;if(oe<1)G=1,j=1;else if(oe>V)G=V,j=this.getLineMaxColumn(G);else if(G=oe|0,ae<=1)j=1;else{const te=this.getLineMaxColumn(G);ae>=te?j=te:j=ae|0}return U===$&&H===ie&&oe===G&&ae===j&&P instanceof g.Range&&!(P instanceof p.Selection)?P:new g.Range($,ie,G,j)}_isValidPosition(P,V,U){if(typeof P!="number"||typeof V!="number"||isNaN(P)||isNaN(V)||P<1||V<1||(P|0)!==P||(V|0)!==V)return!1;const H=this._buffer.getLineCount();if(P>H)return!1;if(V===1)return!0;const $=this.getLineMaxColumn(P);if(V>$)return!1;if(U===1){const ie=this._buffer.getLineCharCode(P,V-2);if(w.isHighSurrogate(ie))return!1}return!0}_validatePosition(P,V,U){const H=Math.floor(typeof P=="number"&&!isNaN(P)?P:1),$=Math.floor(typeof V=="number"&&!isNaN(V)?V:1),ie=this._buffer.getLineCount();if(H<1)return new d.Position(1,1);if(H>ie)return new d.Position(ie,this.getLineMaxColumn(ie));if($<=1)return new d.Position(H,1);const oe=this.getLineMaxColumn(H);if($>=oe)return new d.Position(H,oe);if(U===1){const ae=this._buffer.getLineCharCode(H,$-2);if(w.isHighSurrogate(ae))return new d.Position(H,$-1)}return new d.Position(H,$)}validatePosition(P){const V=1;return this._assertNotDisposed(),P instanceof d.Position&&this._isValidPosition(P.lineNumber,P.column,V)?P:this._validatePosition(P.lineNumber,P.column,V)}_isValidRange(P,V){const U=P.startLineNumber,H=P.startColumn,$=P.endLineNumber,ie=P.endColumn;if(!this._isValidPosition(U,H,0)||!this._isValidPosition($,ie,0))return!1;if(V===1){const oe=H>1?this._buffer.getLineCharCode(U,H-2):0,ae=ie>1&&ie<=this._buffer.getLineLength($)?this._buffer.getLineCharCode($,ie-2):0,G=w.isHighSurrogate(oe),j=w.isHighSurrogate(ae);return!G&&!j}return!0}validateRange(P){const V=1;if(this._assertNotDisposed(),P instanceof g.Range&&!(P instanceof p.Selection)&&this._isValidRange(P,V))return P;const U=this._validatePosition(P.startLineNumber,P.startColumn,0),H=this._validatePosition(P.endLineNumber,P.endColumn,0),$=U.lineNumber,ie=U.column,oe=H.lineNumber,ae=H.column;if(V===1){const G=ie>1?this._buffer.getLineCharCode($,ie-2):0,j=ae>1&&ae<=this._buffer.getLineLength(oe)?this._buffer.getLineCharCode(oe,ae-2):0,te=w.isHighSurrogate(G),Z=w.isHighSurrogate(j);return!te&&!Z?new g.Range($,ie,oe,ae):$===oe&&ie===ae?new g.Range($,ie-1,oe,ae-1):te&&Z?new g.Range($,ie-1,oe,ae+1):te?new g.Range($,ie-1,oe,ae):new g.Range($,ie,oe,ae+1)}return new g.Range($,ie,oe,ae)}modifyPosition(P,V){this._assertNotDisposed();let U=this.getOffsetAt(P)+V;return this.getPositionAt(Math.min(this._buffer.getLength(),Math.max(0,U)))}getFullModelRange(){this._assertNotDisposed();const P=this.getLineCount();return new g.Range(1,1,P,this.getLineMaxColumn(P))}findMatchesLineByLine(P,V,U,H){return this._buffer.findMatchesLineByLine(P,V,U,H)}findMatches(P,V,U,H,$,ie,oe=T){this._assertNotDisposed();let ae=null;V!==null&&(Array.isArray(V)||(V=[V]),V.every(te=>g.Range.isIRange(te))&&(ae=V.map(te=>this.validateRange(te)))),ae===null&&(ae=[this.getFullModelRange()]),ae=ae.sort((te,Z)=>te.startLineNumber-Z.startLineNumber||te.startColumn-Z.startColumn);const G=[];G.push(ae.reduce((te,Z)=>g.Range.areIntersecting(te,Z)?te.plusRange(Z):(G.push(te),Z)));let j;if(!U&&P.indexOf(` +`)<0){const Z=new i.SearchParams(P,U,H,$).parseSearchRequest();if(!Z)return[];j=ue=>this.findMatchesLineByLine(ue,Z,ie,oe)}else j=te=>i.TextModelSearch.findMatches(this,new i.SearchParams(P,U,H,$),te,ie,oe);return G.map(j).reduce((te,Z)=>te.concat(Z),[])}findNextMatch(P,V,U,H,$,ie){this._assertNotDisposed();const oe=this.validatePosition(V);if(!U&&P.indexOf(` +`)<0){const G=new i.SearchParams(P,U,H,$).parseSearchRequest();if(!G)return null;const j=this.getLineCount();let te=new g.Range(oe.lineNumber,oe.column,j,this.getLineMaxColumn(j)),Z=this.findMatchesLineByLine(te,G,ie,1);return i.TextModelSearch.findNextMatch(this,new i.SearchParams(P,U,H,$),oe,ie),Z.length>0||(te=new g.Range(1,1,oe.lineNumber,this.getLineMaxColumn(oe.lineNumber)),Z=this.findMatchesLineByLine(te,G,ie,1),Z.length>0)?Z[0]:null}return i.TextModelSearch.findNextMatch(this,new i.SearchParams(P,U,H,$),oe,ie)}findPreviousMatch(P,V,U,H,$,ie){this._assertNotDisposed();const oe=this.validatePosition(V);return i.TextModelSearch.findPreviousMatch(this,new i.SearchParams(P,U,H,$),oe,ie)}pushStackElement(){this._commandManager.pushStackElement()}popStackElement(){this._commandManager.popStackElement()}pushEOL(P){if((this.getEOL()===` +`?0:1)!==P)try{this._onDidChangeDecorations.beginDeferredEmit(),this._eventEmitter.beginDeferredEmit(),this._initialUndoRedoSnapshot===null&&(this._initialUndoRedoSnapshot=this._undoRedoService.createSnapshot(this.uri)),this._commandManager.pushEOL(P)}finally{this._eventEmitter.endDeferredEmit(),this._onDidChangeDecorations.endDeferredEmit()}}_validateEditOperation(P){return P instanceof c.ValidAnnotatedEditOperation?P:new c.ValidAnnotatedEditOperation(P.identifier||null,this.validateRange(P.range),P.text,P.forceMoveMarkers||!1,P.isAutoWhitespaceEdit||!1,P._isTracked||!1)}_validateEditOperations(P){const V=[];for(let U=0,H=P.length;U({range:this.validateRange(ie.range),text:ie.text})),$=!0;if(P)for(let ie=0,oe=P.length;ieae.endLineNumber,he=ae.startLineNumber>Z.endLineNumber;if(!ue&&!he){G=!0;break}}if(!G){$=!1;break}}if($)for(let ie=0,oe=this._trimAutoWhitespaceLines.length;ieue.endLineNumber)&&!(ae===ue.startLineNumber&&ue.startColumn===G&&ue.isEmpty()&&he&&he.length>0&&he.charAt(0)===` +`)&&!(ae===ue.startLineNumber&&ue.startColumn===1&&ue.isEmpty()&&he&&he.length>0&&he.charAt(he.length-1)===` +`)){j=!1;break}}if(j){const te=new g.Range(ae,1,ae,G);V.push(new c.ValidAnnotatedEditOperation(null,te,null,!1,!1,!1))}}this._trimAutoWhitespaceLines=null}return this._initialUndoRedoSnapshot===null&&(this._initialUndoRedoSnapshot=this._undoRedoService.createSnapshot(this.uri)),this._commandManager.pushEditOperation(P,V,U)}_applyUndo(P,V,U,H){const $=P.map(ie=>{const oe=this.getPositionAt(ie.newPosition),ae=this.getPositionAt(ie.newEnd);return{range:new g.Range(oe.lineNumber,oe.column,ae.lineNumber,ae.column),text:ie.oldText}});this._applyUndoRedoEdits($,V,!0,!1,U,H)}_applyRedo(P,V,U,H){const $=P.map(ie=>{const oe=this.getPositionAt(ie.oldPosition),ae=this.getPositionAt(ie.oldEnd);return{range:new g.Range(oe.lineNumber,oe.column,ae.lineNumber,ae.column),text:ie.newText}});this._applyUndoRedoEdits($,V,!1,!0,U,H)}_applyUndoRedoEdits(P,V,U,H,$,ie){try{this._onDidChangeDecorations.beginDeferredEmit(),this._eventEmitter.beginDeferredEmit(),this._isUndoing=U,this._isRedoing=H,this.applyEdits(P,!1),this.setEOL(V),this._overwriteAlternativeVersionId($)}finally{this._isUndoing=!1,this._isRedoing=!1,this._eventEmitter.endDeferredEmit(ie),this._onDidChangeDecorations.endDeferredEmit()}}applyEdits(P,V=!1){try{this._onDidChangeDecorations.beginDeferredEmit(),this._eventEmitter.beginDeferredEmit();const U=this._validateEditOperations(P);return this._doApplyEdits(U,V)}finally{this._eventEmitter.endDeferredEmit(),this._onDidChangeDecorations.endDeferredEmit()}}_doApplyEdits(P,V){const U=this._buffer.getLineCount(),H=this._buffer.applyEdits(P,this._options.trimAutoWhitespace,V),$=this._buffer.getLineCount(),ie=H.changes;if(this._trimAutoWhitespaceLines=H.trimAutoWhitespaceLineNumbers,ie.length!==0){let oe=[],ae=U;for(let G=0,j=ie.length;G0?te.text.charCodeAt(0):0),this._onDidChangeDecorations.fire(),this._decorationsTree.acceptReplace(te.rangeOffset,te.rangeLength,te.text.length,te.forceMoveMarkers);const re=te.range.startLineNumber,ce=te.range.endLineNumber,me=ce-re,Ce=Z,be=Math.min(me,Ce),Le=Ce-me;for(let De=be;De>=0;De--){const Re=re+De,Ee=$-ae-Le+Re;oe.push(new r.ModelRawLineChanged(Re,this.getLineContent(Ee)))}if(bethis._deltaDecorationsImpl(P,[],[{range:$,options:ie}])[0],changeDecoration:($,ie)=>{this._changeDecorationImpl($,ie)},changeDecorationOptions:($,ie)=>{this._changeDecorationOptionsImpl($,ne(ie))},removeDecoration:$=>{this._deltaDecorationsImpl(P,[$],[])},deltaDecorations:($,ie)=>$.length===0&&ie.length===0?[]:this._deltaDecorationsImpl(P,$,ie)},H=null;try{H=V(U)}catch($){b.onUnexpectedError($)}return U.addDecoration=A,U.changeDecoration=A,U.changeDecorationOptions=A,U.removeDecoration=A,U.deltaDecorations=A,H}deltaDecorations(P,V,U=0){if(this._assertNotDisposed(),P||(P=[]),P.length===0&&V.length===0)return[];try{return this._onDidChangeDecorations.beginDeferredEmit(),this._deltaDecorationsImpl(U,P,V)}finally{this._onDidChangeDecorations.endDeferredEmit()}}_getTrackedRange(P){return this.getDecorationRange(P)}_setTrackedRange(P,V,U){const H=P?this._decorations[P]:null;if(!H)return V?this._deltaDecorationsImpl(0,[],[{range:V,options:se[U]}])[0]:null;if(!V)return this._decorationsTree.delete(H),delete this._decorations[H.id],null;const $=this._validateRangeRelaxedNoAllocations(V),ie=this._buffer.getOffsetAt($.startLineNumber,$.startColumn),oe=this._buffer.getOffsetAt($.endLineNumber,$.endColumn);return this._decorationsTree.delete(H),H.reset(this.getVersionId(),ie,oe,$),H.setOptions(se[U]),this._decorationsTree.insert(H),H.id}removeAllDecorationsWithOwnerId(P){if(!this._isDisposed){const V=this._decorationsTree.collectNodesFromOwner(P);for(let U=0,H=V.length;Uthis.getLineCount()?[]:this.getLinesDecorations(P,P,V,U)}getLinesDecorations(P,V,U=0,H=!1){let $=this.getLineCount(),ie=Math.min($,Math.max(1,P)),oe=Math.min($,Math.max(1,V)),ae=this.getLineMaxColumn(oe);return this._getDecorationsInRange(new g.Range(ie,1,oe,ae),U,H)}getDecorationsInRange(P,V=0,U=!1){let H=this.validateRange(P);return this._getDecorationsInRange(H,V,U)}getOverviewRulerDecorations(P=0,V=!1){const U=this.getVersionId(),H=this._decorationsTree.search(P,V,!0,U);return this._ensureNodesHaveRanges(H)}getAllDecorations(P=0,V=!1){const U=this.getVersionId(),H=this._decorationsTree.search(P,V,!1,U);return this._ensureNodesHaveRanges(H)}_getDecorationsInRange(P,V,U){const H=this._buffer.getOffsetAt(P.startLineNumber,P.startColumn),$=this._buffer.getOffsetAt(P.endLineNumber,P.endColumn),ie=this.getVersionId(),oe=this._decorationsTree.intervalSearch(H,$,V,U,ie);return this._ensureNodesHaveRanges(oe)}_ensureNodesHaveRanges(P){for(let V=0,U=P.length;V0&&this._emitModelTokensChangedEvent({tokenizationSupportChanged:!1,semanticTokensApplied:!1,ranges:V})}}setSemanticTokens(P,V){this._tokens2.set(P,V),this._emitModelTokensChangedEvent({tokenizationSupportChanged:!1,semanticTokensApplied:P!==null,ranges:[{fromLineNumber:1,toLineNumber:this.getLineCount()}]})}hasCompleteSemanticTokens(){return this._tokens2.isComplete()}hasSomeSemanticTokens(){return!this._tokens2.isEmpty()}setPartialSemanticTokens(P,V){if(!this.hasCompleteSemanticTokens()){const U=this._tokens2.setPartial(P,V);this._emitModelTokensChangedEvent({tokenizationSupportChanged:!1,semanticTokensApplied:!0,ranges:[{fromLineNumber:U.startLineNumber,toLineNumber:U.endLineNumber}]})}}tokenizeViewport(P,V){P=Math.max(1,P),V=Math.min(this._buffer.getLineCount(),V),this._tokenization.tokenizeViewport(P,V)}clearTokens(){this._tokens.flush(),this._emitModelTokensChangedEvent({tokenizationSupportChanged:!0,semanticTokensApplied:!1,ranges:[{fromLineNumber:1,toLineNumber:this._buffer.getLineCount()}]})}_emitModelTokensChangedEvent(P){this._isDisposing||this._onDidChangeTokens.fire(P)}resetTokenization(){this._tokenization.reset()}forceTokenization(P){if(P<1||P>this.getLineCount())throw new Error("Illegal value for lineNumber");this._tokenization.forceTokenization(P)}isCheapToTokenize(P){return this._tokenization.isCheapToTokenize(P)}tokenizeIfCheap(P){this.isCheapToTokenize(P)&&this.forceTokenization(P)}getLineTokens(P){if(P<1||P>this.getLineCount())throw new Error("Illegal value for lineNumber");return this._getLineTokens(P)}_getLineTokens(P){const V=this.getLineContent(P),U=this._tokens.getTokens(this._languageIdentifier.id,P-1,V);return this._tokens2.addSemanticTokens(P,U)}getLanguageIdentifier(){return this._languageIdentifier}getModeId(){return this._languageIdentifier.language}setMode(P){if(this._languageIdentifier.id!==P.id){let V={oldLanguage:this._languageIdentifier.language,newLanguage:P.language};this._languageIdentifier=P,this._onDidChangeLanguage.fire(V),this._onDidChangeLanguageConfiguration.fire({})}}getLanguageIdAtPosition(P,V){const U=this.validatePosition(new d.Position(P,V)),H=this.getLineTokens(U.lineNumber);return H.getLanguageId(H.findTokenIndexAtOffset(U.column-1))}getWordAtPosition(P){this._assertNotDisposed();const V=this.validatePosition(P),U=this.getLineContent(V.lineNumber),H=this._getLineTokens(V.lineNumber),$=H.findTokenIndexAtOffset(V.column-1),[ie,oe]=D._findLanguageBoundaries(H,$),ae=t.getWordAtText(V.column,l.LanguageConfigurationRegistry.getWordDefinition(H.getLanguageId($)),U.substring(ie,oe),ie);if(ae&&ae.startColumn<=P.column&&P.column<=ae.endColumn)return ae;if($>0&&ie===V.column-1){const[G,j]=D._findLanguageBoundaries(H,$-1),te=t.getWordAtText(V.column,l.LanguageConfigurationRegistry.getWordDefinition(H.getLanguageId($-1)),U.substring(G,j),G);if(te&&te.startColumn<=P.column&&P.column<=te.endColumn)return te}return null}static _findLanguageBoundaries(P,V){const U=P.getLanguageId(V);let H=0;for(let ie=V;ie>=0&&P.getLanguageId(ie)===U;ie--)H=P.getStartOffset(ie);let $=P.getLineContent().length;for(let ie=V,oe=P.getCount();ie=0;te--){const Z=U.getEndOffset(te);if(Z<=ae)break;m.ignoreBracketsInToken(U.getStandardTokenType(te))&&(ae=Z)}const G=Math.min($.length,P.column-1+oe.maxBracketLength);let j=null;for(;;){const te=_.BracketsUtils.findNextBracketInRange(oe.forwardRegex,V,$,ae,G);if(!te)break;if(te.startColumn<=P.column&&P.column<=te.endColumn){const Z=$.substring(te.startColumn-1,te.endColumn-1).toLowerCase(),ue=this._matchFoundBracket(te,oe.textIsBracket[Z],oe.textIsOpenBracket[Z],null);if(ue){if(ue instanceof B)return null;j=ue}}ae=te.endColumn-1}if(j)return j}if(ie>0&&U.getStartOffset(ie)===P.column-1){const ae=ie-1,G=l.LanguageConfigurationRegistry.getBracketsSupport(U.getLanguageId(ae));if(G&&!m.ignoreBracketsInToken(U.getStandardTokenType(ae))){const j=Math.max(0,P.column-1-G.maxBracketLength);let te=Math.min($.length,P.column-1+G.maxBracketLength);for(let ue=ae+1;ue=te)break;m.ignoreBracketsInToken(U.getStandardTokenType(ue))&&(te=he)}const Z=_.BracketsUtils.findPrevBracketInRange(G.reversedRegex,V,$,j,te);if(Z&&Z.startColumn<=P.column&&P.column<=Z.endColumn){const ue=$.substring(Z.startColumn-1,Z.endColumn-1).toLowerCase(),he=this._matchFoundBracket(Z,G.textIsBracket[ue],G.textIsOpenBracket[ue],null);if(he)return he instanceof B?null:he}}}return null}_matchFoundBracket(P,V,U,H){if(!V)return null;const $=U?this._findMatchingBracketDown(V,P.getEndPosition(),H):this._findMatchingBracketUp(V,P.getStartPosition(),H);return $?$ instanceof B?$:[P,$]:null}_findMatchingBracketUp(P,V,U){const H=P.languageIdentifier.id,$=P.reversedRegex;let ie=-1,oe=0;const ae=(G,j,te,Z)=>{for(;;){if(U&&++oe%100==0&&!U())return B.INSTANCE;const ue=_.BracketsUtils.findPrevBracketInRange($,G,j,te,Z);if(!ue)break;const he=j.substring(ue.startColumn-1,ue.endColumn-1).toLowerCase();if(P.isOpen(he)?ie++:P.isClose(he)&&ie--,ie===0)return ue;Z=ue.startColumn-1}return null};for(let G=V.lineNumber;G>=1;G--){const j=this._getLineTokens(G),te=j.getCount(),Z=this._buffer.getLineContent(G);let ue=te-1,he=Z.length,re=Z.length;G===V.lineNumber&&(ue=j.findTokenIndexAtOffset(V.column-1),he=V.column-1,re=V.column-1);let ce=!0;for(;ue>=0;ue--){const me=j.getLanguageId(ue)===H&&!m.ignoreBracketsInToken(j.getStandardTokenType(ue));if(me)ce?he=j.getStartOffset(ue):(he=j.getStartOffset(ue),re=j.getEndOffset(ue));else if(ce&&he!==re){const Ce=ae(G,Z,he,re);if(Ce)return Ce}ce=me}if(ce&&he!==re){const me=ae(G,Z,he,re);if(me)return me}}return null}_findMatchingBracketDown(P,V,U){const H=P.languageIdentifier.id,$=P.forwardRegex;let ie=1,oe=0;const ae=(j,te,Z,ue)=>{for(;;){if(U&&++oe%100==0&&!U())return B.INSTANCE;const he=_.BracketsUtils.findNextBracketInRange($,j,te,Z,ue);if(!he)break;const re=te.substring(he.startColumn-1,he.endColumn-1).toLowerCase();if(P.isOpen(re)?ie++:P.isClose(re)&&ie--,ie===0)return he;Z=he.endColumn-1}return null},G=this.getLineCount();for(let j=V.lineNumber;j<=G;j++){const te=this._getLineTokens(j),Z=te.getCount(),ue=this._buffer.getLineContent(j);let he=0,re=0,ce=0;j===V.lineNumber&&(he=te.findTokenIndexAtOffset(V.column-1),re=V.column-1,ce=V.column-1);let me=!0;for(;he=1;$--){const ie=this._getLineTokens($),oe=ie.getCount(),ae=this._buffer.getLineContent($);let G=oe-1,j=ae.length,te=ae.length;if($===V.lineNumber){G=ie.findTokenIndexAtOffset(V.column-1),j=V.column-1,te=V.column-1;const ue=ie.getLanguageId(G);U!==ue&&(U=ue,H=l.LanguageConfigurationRegistry.getBracketsSupport(U))}let Z=!0;for(;G>=0;G--){const ue=ie.getLanguageId(G);if(U!==ue){if(H&&Z&&j!==te){const re=_.BracketsUtils.findPrevBracketInRange(H.reversedRegex,$,ae,j,te);if(re)return this._toFoundBracket(H,re);Z=!1}U=ue,H=l.LanguageConfigurationRegistry.getBracketsSupport(U)}const he=!!H&&!m.ignoreBracketsInToken(ie.getStandardTokenType(G));if(he)Z?j=ie.getStartOffset(G):(j=ie.getStartOffset(G),te=ie.getEndOffset(G));else if(H&&Z&&j!==te){const re=_.BracketsUtils.findPrevBracketInRange(H.reversedRegex,$,ae,j,te);if(re)return this._toFoundBracket(H,re)}Z=he}if(H&&Z&&j!==te){const ue=_.BracketsUtils.findPrevBracketInRange(H.reversedRegex,$,ae,j,te);if(ue)return this._toFoundBracket(H,ue)}}return null}findNextBracket(P){const V=this.validatePosition(P),U=this.getLineCount();let H=-1,$=null;for(let ie=V.lineNumber;ie<=U;ie++){const oe=this._getLineTokens(ie),ae=oe.getCount(),G=this._buffer.getLineContent(ie);let j=0,te=0,Z=0;if(ie===V.lineNumber){j=oe.findTokenIndexAtOffset(V.column-1),te=V.column-1,Z=V.column-1;const he=oe.getLanguageId(j);H!==he&&(H=he,$=l.LanguageConfigurationRegistry.getBracketsSupport(H))}let ue=!0;for(;jDate.now()-ue<=V}const H=this.validatePosition(P),$=this.getLineCount(),ie=new Map;let oe=[];const ae=(ue,he)=>{if(!ie.has(ue)){let re=[];for(let ce=0,me=he?he.brackets.length:0;ce{for(;;){if(U&&++G%100==0&&!U())return B.INSTANCE;const Ce=_.BracketsUtils.findNextBracketInRange(ue.forwardRegex,he,re,ce,me);if(!Ce)break;const be=re.substring(Ce.startColumn-1,Ce.endColumn-1).toLowerCase(),Le=ue.textIsBracket[be];if(Le&&(Le.isOpen(be)?oe[Le.index]++:Le.isClose(be)&&oe[Le.index]--,oe[Le.index]===-1))return this._matchFoundBracket(Ce,Le,!1,U);ce=Ce.endColumn-1}return null};let te=-1,Z=null;for(let ue=H.lineNumber;ue<=$;ue++){const he=this._getLineTokens(ue),re=he.getCount(),ce=this._buffer.getLineContent(ue);let me=0,Ce=0,be=0;if(ue===H.lineNumber){me=he.findTokenIndexAtOffset(H.column-1),Ce=H.column-1,be=H.column-1;const De=he.getLanguageId(me);te!==De&&(te=De,Z=l.LanguageConfigurationRegistry.getBracketsSupport(te),ae(te,Z))}let Le=!0;for(;meH)throw new Error("Illegal value for lineNumber");const $=l.LanguageConfigurationRegistry.getFoldingRules(this._languageIdentifier.id),ie=Boolean($&&$.offSide);let oe=-2,ae=-1,G=-2,j=-1;const te=Ee=>{if(oe!==-1&&(oe===-2||oe>Ee-1)){oe=-1,ae=-1;for(let Ae=Ee-2;Ae>=0;Ae--){let Se=this._computeIndentLevel(Ae);if(Se>=0){oe=Ae,ae=Se;break}}}if(G===-2){G=-1,j=-1;for(let Ae=Ee;Ae=0){G=Ae,j=Se;break}}}};let Z=-2,ue=-1,he=-2,re=-1;const ce=Ee=>{if(Z===-2){Z=-1,ue=-1;for(let Ae=Ee-2;Ae>=0;Ae--){let Se=this._computeIndentLevel(Ae);if(Se>=0){Z=Ae,ue=Se;break}}}if(he!==-1&&(he===-2||he=0){he=Ae,re=Se;break}}}};let me=0,Ce=!0,be=0,Le=!0,De=0,Re=0;for(let Ee=0;Ce||Le;Ee++){const Ae=P-Ee,Se=P+Ee;Ee>1&&(Ae<1||Ae1&&(Se>H||Se>U)&&(Le=!1),Ee>5e4&&(Ce=!1,Le=!1);let we=-1;if(Ce){const fe=this._computeIndentLevel(Ae-1);fe>=0?(G=Ae-1,j=fe,we=Math.ceil(fe/this._options.indentSize)):(te(Ae),we=this._getIndentLevelForWhitespaceLine(ie,ae,j))}let ye=-1;if(Le){const fe=this._computeIndentLevel(Se-1);fe>=0?(Z=Se-1,ue=fe,ye=Math.ceil(fe/this._options.indentSize)):(ce(Se),ye=this._getIndentLevelForWhitespaceLine(ie,ue,re))}if(Ee===0){Re=we;continue}if(Ee===1){if(Se<=H&&ye>=0&&Re+1===ye){Ce=!1,me=Se,be=Se,De=ye;continue}if(Ae>=1&&we>=0&&we-1===Re){Le=!1,me=Ae,be=Ae,De=we;continue}if(me=P,be=P,De=Re,De===0)return{startLineNumber:me,endLineNumber:be,indent:De}}Ce&&(we>=De?me=Ae:Ce=!1),Le&&(ye>=De?be=Se:Le=!1)}return{startLineNumber:me,endLineNumber:be,indent:De}}getLinesIndentGuides(P,V){this._assertNotDisposed();const U=this.getLineCount();if(P<1||P>U)throw new Error("Illegal value for startLineNumber");if(V<1||V>U)throw new Error("Illegal value for endLineNumber");const H=l.LanguageConfigurationRegistry.getFoldingRules(this._languageIdentifier.id),$=Boolean(H&&H.offSide);let ie=new Array(V-P+1),oe=-2,ae=-1,G=-2,j=-1;for(let te=P;te<=V;te++){let Z=te-P;const ue=this._computeIndentLevel(te-1);if(ue>=0){oe=te-1,ae=ue,ie[Z]=Math.ceil(ue/this._options.indentSize);continue}if(oe===-2){oe=-1,ae=-1;for(let he=te-2;he>=0;he--){let re=this._computeIndentLevel(he);if(re>=0){oe=he,ae=re;break}}}if(G!==-1&&(G===-2||G=0){G=he,j=re;break}}}ie[Z]=this._getIndentLevelForWhitespaceLine($,ae,j)}return ie}_getIndentLevelForWhitespaceLine(P,V,U){return V===-1||U===-1?0:V0){this._deferredEvent?this._deferredEvent=this._deferredEvent.merge(P):this._deferredEvent=P;return}this._fastEmitter.fire(P),this._slowEmitter.fire(P)}}e.DidChangeContentEmitter=X}),define(Q[42],J([0,1,12,8,14,3,21,31,41]),function(q,e,b,N,M,w,S,C,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.isQuote=e.CursorColumns=e.EditOperationResult=e.CursorState=e.PartialViewCursorState=e.PartialModelCursorState=e.CursorContext=e.SingleCursorState=e.CursorConfiguration=void 0;const g=()=>!0,p=()=>!1,c=h=>h===" "||h===" ";class o{constructor(m,_,f){this._languageIdentifier=m;const v=f.options,y=v.get(124);this.readOnly=v.get(75),this.tabSize=_.tabSize,this.indentSize=_.indentSize,this.insertSpaces=_.insertSpaces,this.stickyTabStops=v.get(99),this.lineHeight=v.get(53),this.pageSize=Math.max(1,Math.floor(y.height/this.lineHeight)-2),this.useTabStops=v.get(109),this.wordSeparators=v.get(110),this.emptySelectionClipboard=v.get(28),this.copyWithSyntaxHighlighting=v.get(18),this.multiCursorMergeOverlapping=v.get(63),this.multiCursorPaste=v.get(65),this.autoClosingBrackets=v.get(5),this.autoClosingQuotes=v.get(7),this.autoClosingOvertype=v.get(6),this.autoSurround=v.get(10),this.autoIndent=v.get(8),this.surroundingPairs={},this._electricChars=null,this.shouldAutoCloseBefore={quote:o._getShouldAutoClose(m,this.autoClosingQuotes),bracket:o._getShouldAutoClose(m,this.autoClosingBrackets)},this.autoClosingPairs=d.LanguageConfigurationRegistry.getAutoClosingPairs(m.id);let L=o._getSurroundingPairs(m);if(L)for(const I of L)this.surroundingPairs[I.open]=I.close}static shouldRecreate(m){return m.hasChanged(124)||m.hasChanged(110)||m.hasChanged(28)||m.hasChanged(63)||m.hasChanged(65)||m.hasChanged(5)||m.hasChanged(7)||m.hasChanged(6)||m.hasChanged(10)||m.hasChanged(109)||m.hasChanged(53)||m.hasChanged(75)}get electricChars(){if(!this._electricChars){this._electricChars={};let m=o._getElectricCharacters(this._languageIdentifier);if(m)for(const _ of m)this._electricChars[_]=!0}return this._electricChars}normalizeIndentation(m){return C.TextModel.normalizeIndentation(m,this.indentSize,this.insertSpaces)}static _getElectricCharacters(m){try{return d.LanguageConfigurationRegistry.getElectricCharacters(m.id)}catch(_){return b.onUnexpectedError(_),null}}static _getShouldAutoClose(m,_){switch(_){case"beforeWhitespace":return c;case"languageDefined":return o._getLanguageDefinedShouldAutoClose(m);case"always":return g;case"never":return p}}static _getLanguageDefinedShouldAutoClose(m){try{const _=d.LanguageConfigurationRegistry.getAutoCloseBeforeSet(m.id);return f=>_.indexOf(f)!==-1}catch(_){return b.onUnexpectedError(_),p}}static _getSurroundingPairs(m){try{return d.LanguageConfigurationRegistry.getSurroundingPairs(m.id)}catch(_){return b.onUnexpectedError(_),null}}}e.CursorConfiguration=o;class s{constructor(m,_,f,v){this.selectionStart=m,this.selectionStartLeftoverVisibleColumns=_,this.position=f,this.leftoverVisibleColumns=v,this.selection=s._computeSelection(this.selectionStart,this.position)}equals(m){return this.selectionStartLeftoverVisibleColumns===m.selectionStartLeftoverVisibleColumns&&this.leftoverVisibleColumns===m.leftoverVisibleColumns&&this.position.equals(m.position)&&this.selectionStart.equalsRange(m.selectionStart)}hasSelection(){return!this.selection.isEmpty()||!this.selectionStart.isEmpty()}move(m,_,f,v){return m?new s(this.selectionStart,this.selectionStartLeftoverVisibleColumns,new M.Position(_,f),v):new s(new w.Range(_,f,_,f),v,new M.Position(_,f),v)}static _computeSelection(m,_){let f,v,y,L;return m.isEmpty()?(f=m.startLineNumber,v=m.startColumn,y=_.lineNumber,L=_.column):_.isBeforeOrEqual(m.getStartPosition())?(f=m.endLineNumber,v=m.endColumn,y=_.lineNumber,L=_.column):(f=m.startLineNumber,v=m.startColumn,y=_.lineNumber,L=_.column),new S.Selection(f,v,y,L)}}e.SingleCursorState=s;class a{constructor(m,_,f){this.model=m,this.coordinatesConverter=_,this.cursorConfig=f}}e.CursorContext=a;class u{constructor(m){this.modelState=m,this.viewState=null}}e.PartialModelCursorState=u;class r{constructor(m){this.modelState=null,this.viewState=m}}e.PartialViewCursorState=r;class i{constructor(m,_){this.modelState=m,this.viewState=_}static fromModelState(m){return new u(m)}static fromViewState(m){return new r(m)}static fromModelSelection(m){const _=m.selectionStartLineNumber,f=m.selectionStartColumn,v=m.positionLineNumber,y=m.positionColumn,L=new s(new w.Range(_,f,_,f),0,new M.Position(v,y),0);return i.fromModelState(L)}static fromModelSelections(m){let _=[];for(let f=0,v=m.length;f=65536?2:1,k===9)L=t.nextRenderTabStop(L,f);else{let E=N.getGraphemeBreakType(k);for(;I=65536?2:1,E=O}N.isFullWidthCharacter(k)||N.isEmojiImprecise(k)?L=L+2:L=L+1}}return L}static visibleColumnFromColumn2(m,_,f){return this.visibleColumnFromColumn(_.getLineContent(f.lineNumber),f.column,m.tabSize)}static columnFromVisibleColumn(m,_,f){if(_<=0)return 1;const v=m.length;let y=0,L=1,I=0;for(;I=65536?2:1;let E;if(k===9)E=t.nextRenderTabStop(y,f);else{let O=N.getGraphemeBreakType(k);for(;I=65536?2:1,O=B}N.isFullWidthCharacter(k)||N.isEmojiImprecise(k)?E=y+2:E=y+1}const T=I+1;if(E>=_){const O=_-y;return E-_I?I:y}static nextRenderTabStop(m,_){return m+_-m%_}static nextIndentTabStop(m,_){return m+_-m%_}static prevRenderTabStop(m,_){return m-1-(m-1)%_}static prevIndentTabStop(m,_){return m-1-(m-1)%_}}e.CursorColumns=t;function l(h){return h==="'"||h==='"'||h==="`"}e.isQuote=l}),define(Q[179],J([0,1,8,42,3,21,41]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ShiftCommand=e.cachedStringRepeat=void 0;const C=Object.create(null);function d(p,c){C[p]||(C[p]=["",p]);const o=C[p];for(let s=o.length;s<=c;s++)o[s]=o[s-1]+p;return o[c]}e.cachedStringRepeat=d;class g{constructor(c,o){this._opts=o,this._selection=c,this._selectionId=null,this._useLastEditRangeForCursorEndPosition=!1,this._selectionStartColumnStaysPut=!1}static unshiftIndent(c,o,s,a,u){const r=N.CursorColumns.visibleColumnFromColumn(c,o,s);if(u){const i=d(" ",a),t=N.CursorColumns.prevIndentTabStop(r,a)/a;return d(i,t)}else{const i=" ",t=N.CursorColumns.prevRenderTabStop(r,s)/s;return d(i,t)}}static shiftIndent(c,o,s,a,u){const r=N.CursorColumns.visibleColumnFromColumn(c,o,s);if(u){const i=d(" ",a),t=N.CursorColumns.nextIndentTabStop(r,a)/a;return d(i,t)}else{const i=" ",t=N.CursorColumns.nextRenderTabStop(r,s)/s;return d(i,t)}}_addEditOperation(c,o,s){this._useLastEditRangeForCursorEndPosition?c.addTrackedEditOperation(o,s):c.addEditOperation(o,s)}getEditOperations(c,o){const s=this._selection.startLineNumber;let a=this._selection.endLineNumber;this._selection.endColumn===1&&s!==a&&(a=a-1);const{tabSize:u,indentSize:r,insertSpaces:i}=this._opts,n=s===a;if(this._opts.useTabStops){this._selection.isEmpty()&&/^\s*$/.test(c.getLineContent(s))&&(this._useLastEditRangeForCursorEndPosition=!0);let t=0,l=0;for(let h=s;h<=a;h++,t=l){l=0;let m=c.getLineContent(h),_=b.firstNonWhitespaceIndex(m);if(!(this._opts.isUnshift&&(m.length===0||_===0))&&!(!n&&!this._opts.isUnshift&&m.length===0)){if(_===-1&&(_=m.length),h>1&&N.CursorColumns.visibleColumnFromColumn(m,_+1,u)%r!=0&&c.isCheapToTokenize(h-1)){let y=S.LanguageConfigurationRegistry.getEnterAction(this._opts.autoIndent,c,new M.Range(h-1,c.getLineMaxColumn(h-1),h-1,c.getLineMaxColumn(h-1)));if(y){if(l=t,y.appendText)for(let L=0,I=y.appendText.length;Lc,u=p>o,r=po||_p||m1&&p--,w.columnSelect(C,d,g.fromViewLineNumber,g.fromViewVisualColumn,g.toViewLineNumber,p)}static columnSelectRight(C,d,g){let p=0;const c=Math.min(g.fromViewLineNumber,g.toViewLineNumber),o=Math.max(g.fromViewLineNumber,g.toViewLineNumber);for(let a=c;a<=o;a++){const u=d.getLineMaxColumn(a),r=b.CursorColumns.visibleColumnFromColumn2(C,d,new N.Position(a,u));p=Math.max(p,r)}let s=g.toViewVisualColumn;return sp.getLineMinColumn(c)?o=o-w.prevCharLength(p.getLineContent(c),o-1):c>1&&(c=c-1,o=p.getLineMaxColumn(c)),new N.Position(c,o)}static leftPositionAtomicSoftTabs(p,c,o,s){const a=p.getLineMinColumn(c),u=p.getLineContent(c),r=S.AtomicTabMoveOperations.atomicPosition(u,o-1,s,0);return r===-1||r+1n?(o=n,r?s=c.getLineMaxColumn(o):s=Math.min(c.getLineMaxColumn(o),s)):s=b.CursorColumns.columnFromVisibleColumn2(p,c,o,i),t?a=0:a=i-b.CursorColumns.visibleColumnFromColumn(c.getLineContent(o),s,p.tabSize),new C(o,s,a)}static moveDown(p,c,o,s,a){let u,r;o.hasSelection()&&!s?(u=o.selection.endLineNumber,r=o.selection.endColumn):(u=o.position.lineNumber,r=o.position.column);let i=d.down(p,c,u,r,o.leftoverVisibleColumns,a,!0);return o.move(s,i.lineNumber,i.column,i.leftoverVisibleColumns)}static translateDown(p,c,o){let s=o.selection,a=d.down(p,c,s.selectionStartLineNumber,s.selectionStartColumn,o.selectionStartLeftoverVisibleColumns,1,!1),u=d.down(p,c,s.positionLineNumber,s.positionColumn,o.leftoverVisibleColumns,1,!1);return new b.SingleCursorState(new M.Range(a.lineNumber,a.column,a.lineNumber,a.column),a.leftoverVisibleColumns,new N.Position(u.lineNumber,u.column),u.leftoverVisibleColumns)}static up(p,c,o,s,a,u,r){const i=b.CursorColumns.visibleColumnFromColumn(c.getLineContent(o),s,p.tabSize)+a,n=o===1&&s===1;return o=o-u,o<1?(o=1,r?s=c.getLineMinColumn(o):s=Math.min(c.getLineMaxColumn(o),s)):s=b.CursorColumns.columnFromVisibleColumn2(p,c,o,i),n?a=0:a=i-b.CursorColumns.visibleColumnFromColumn(c.getLineContent(o),s,p.tabSize),new C(o,s,a)}static moveUp(p,c,o,s,a){let u,r;o.hasSelection()&&!s?(u=o.selection.startLineNumber,r=o.selection.startColumn):(u=o.position.lineNumber,r=o.position.column);let i=d.up(p,c,u,r,o.leftoverVisibleColumns,a,!0);return o.move(s,i.lineNumber,i.column,i.leftoverVisibleColumns)}static translateUp(p,c,o){let s=o.selection,a=d.up(p,c,s.selectionStartLineNumber,s.selectionStartColumn,o.selectionStartLeftoverVisibleColumns,1,!1),u=d.up(p,c,s.positionLineNumber,s.positionColumn,o.leftoverVisibleColumns,1,!1);return new b.SingleCursorState(new M.Range(a.lineNumber,a.column,a.lineNumber,a.column),a.leftoverVisibleColumns,new N.Position(u.lineNumber,u.column),u.leftoverVisibleColumns)}static _isBlankLine(p,c){return p.getLineFirstNonWhitespaceColumn(c)===0}static moveToPrevBlankLine(p,c,o,s){let a=o.position.lineNumber;for(;a>1&&this._isBlankLine(c,a);)a--;for(;a>1&&!this._isBlankLine(c,a);)a--;return o.move(s,a,c.getLineMinColumn(a),0)}static moveToNextBlankLine(p,c,o,s){const a=c.getLineCount();let u=o.position.lineNumber;for(;u=n.length+1)return!1;const t=n.charAt(i.column-2),l=c.get(t);if(!l)return!1;if(M.isQuote(t)){if(p==="never")return!1}else if(g==="never")return!1;const h=n.charAt(i.column-1);let m=!1;for(const _ of l)_.open===t&&_.close===h&&(m=!0);if(!m)return!1}return!0}static _runAutoClosingPairDelete(g,p,c){let o=[];for(let s=0,a=c.length;s1){let l=c.getLineContent(t.lineNumber),h=b.firstNonWhitespaceIndex(l),m=h===-1?l.length+1:h+1;if(t.column<=m){let _=M.CursorColumns.visibleColumnFromColumn2(p,c,t),f=M.CursorColumns.prevIndentTabStop(_,p.indentSize),v=M.CursorColumns.columnFromVisibleColumn2(p,c,t.lineNumber,f);n=new S.Range(t.lineNumber,v,t.lineNumber,t.column)}else n=new S.Range(t.lineNumber,t.column-1,t.lineNumber,t.column)}else{let l=w.MoveOperations.left(p,c,t.lineNumber,t.column);n=new S.Range(l.lineNumber,l.column,t.lineNumber,t.column)}}if(n.isEmpty()){s[u]=null;continue}n.startLineNumber!==n.endLineNumber&&(a=!0),s[u]=new N.ReplaceCommand(n,"")}return[a,s]}static cut(g,p,c){let o=[];for(let s=0,a=c.length;s1?(i=r.lineNumber-1,n=p.getLineMaxColumn(r.lineNumber-1),t=r.lineNumber,l=p.getLineMaxColumn(r.lineNumber)):(i=r.lineNumber,n=1,t=r.lineNumber,l=p.getLineMaxColumn(r.lineNumber));let h=new S.Range(i,n,t,l);h.isEmpty()?o[s]=null:o[s]=new N.ReplaceCommand(h,"")}else o[s]=null;else o[s]=new N.ReplaceCommand(u,"")}return new M.EditOperationResult(0,o,{shouldPushStackElementBefore:!0,shouldPushStackElementAfter:!0})}}e.DeleteOperations=C}),define(Q[182],J([0,1,12,8,92,179,367,42,106,3,21,109,41]),function(q,e,b,N,M,w,S,C,d,g,p,c,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TypeWithAutoClosingCommand=e.TypeOperations=void 0;class s{static indent(r,i,n){if(i===null||n===null)return[];let t=[];for(let l=0,h=n.length;l1){let m;for(m=n-1;m>=1;m--){const v=i.getLineContent(m);if(N.lastNonWhitespaceIndex(v)>=0)break}if(m<1)return null;const _=i.getLineMaxColumn(m),f=o.LanguageConfigurationRegistry.getEnterAction(r.autoIndent,i,new g.Range(m,_,m,_));f&&(l=f.indentation+f.appendText)}return t&&(t===c.IndentAction.Indent&&(l=s.shiftIndent(r,l)),t===c.IndentAction.Outdent&&(l=s.unshiftIndent(r,l)),l=r.normalizeIndentation(l)),l||null}static _replaceJumpToNextIndent(r,i,n,t){let l="",h=n.getStartPosition();if(r.insertSpaces){let m=C.CursorColumns.visibleColumnFromColumn2(r,i,h),_=r.indentSize,f=_-m%_;for(let v=0;vthis._compositionType(n,v,l,h,m,_));return new C.EditOperationResult(1,f,{shouldPushStackElementBefore:r!==1,shouldPushStackElementAfter:!1})}static _compositionType(r,i,n,t,l,h){if(!i.isEmpty())return null;const m=i.getPosition(),_=Math.max(1,m.column-t),f=Math.min(r.getLineMaxColumn(m.lineNumber),m.column+l),v=new g.Range(m.lineNumber,_,m.lineNumber,f);return r.getValueInRange(v)===n&&h===0?null:new M.ReplaceCommandWithOffsetCursorState(v,n,0,h)}static _typeCommand(r,i,n){return n?new M.ReplaceCommandWithoutChangingPosition(r,i,!0):new M.ReplaceCommand(r,i,!0)}static _enter(r,i,n,t){if(r.autoIndent===0)return s._typeCommand(t,` +`,n);if(!i.isCheapToTokenize(t.getStartPosition().lineNumber)||r.autoIndent===1){let _=i.getLineContent(t.startLineNumber),f=N.getLeadingWhitespace(_).substring(0,t.startColumn-1);return s._typeCommand(t,` +`+r.normalizeIndentation(f),n)}const l=o.LanguageConfigurationRegistry.getEnterAction(r.autoIndent,i,t);if(l){if(l.indentAction===c.IndentAction.None)return s._typeCommand(t,` +`+r.normalizeIndentation(l.indentation+l.appendText),n);if(l.indentAction===c.IndentAction.Indent)return s._typeCommand(t,` +`+r.normalizeIndentation(l.indentation+l.appendText),n);if(l.indentAction===c.IndentAction.IndentOutdent){const _=r.normalizeIndentation(l.indentation),f=r.normalizeIndentation(l.indentation+l.appendText),v=` +`+f+` +`+_;return n?new M.ReplaceCommandWithoutChangingPosition(t,v,!0):new M.ReplaceCommandWithOffsetCursorState(t,v,-1,f.length-_.length,!0)}else if(l.indentAction===c.IndentAction.Outdent){const _=s.unshiftIndent(r,l.indentation);return s._typeCommand(t,` +`+r.normalizeIndentation(_+l.appendText),n)}}const h=i.getLineContent(t.startLineNumber),m=N.getLeadingWhitespace(h).substring(0,t.startColumn-1);if(r.autoIndent>=4){const _=o.LanguageConfigurationRegistry.getIndentForEnter(r.autoIndent,i,t,{unshiftIndent:f=>s.unshiftIndent(r,f),shiftIndent:f=>s.shiftIndent(r,f),normalizeIndentation:f=>r.normalizeIndentation(f)});if(_){let f=C.CursorColumns.visibleColumnFromColumn2(r,i,t.getEndPosition());const v=t.endColumn,y=i.getLineContent(t.endLineNumber),L=N.firstNonWhitespaceIndex(y);if(L>=0?t=t.setEndPosition(t.endLineNumber,Math.max(t.endColumn,L+1)):t=t.setEndPosition(t.endLineNumber,i.getLineMaxColumn(t.endLineNumber)),n)return new M.ReplaceCommandWithoutChangingPosition(t,` +`+r.normalizeIndentation(_.afterEnter),!0);{let I=0;return v<=L+1&&(r.insertSpaces||(f=Math.ceil(f/r.indentSize)),I=Math.min(f+1-r.normalizeIndentation(_.afterEnter).length-1,0)),new M.ReplaceCommandWithOffsetCursorState(t,` +`+r.normalizeIndentation(_.afterEnter),0,I,!0)}}}return s._typeCommand(t,` +`+r.normalizeIndentation(m),n)}static _isAutoIndentType(r,i,n){if(r.autoIndent<4)return!1;for(let t=0,l=n.length;ts.shiftIndent(r,m),unshiftIndent:m=>s.unshiftIndent(r,m)});if(h===null)return null;if(h!==r.normalizeIndentation(l)){const m=i.getLineFirstNonWhitespaceColumn(n.startLineNumber);return m===0?s._typeCommand(new g.Range(n.startLineNumber,1,n.endLineNumber,n.endColumn),r.normalizeIndentation(h)+t,!1):s._typeCommand(new g.Range(n.startLineNumber,1,n.endLineNumber,n.endColumn),r.normalizeIndentation(h)+i.getLineContent(n.startLineNumber).substring(m-1,n.startColumn-1)+t,!1)}return null}static _isAutoClosingOvertype(r,i,n,t,l){if(r.autoClosingOvertype==="never"||!r.autoClosingPairs.autoClosingPairsCloseSingleChar.has(l))return!1;for(let h=0,m=n.length;h2?v.charCodeAt(f.column-2):0)===92&&L)return!1;if(r.autoClosingOvertype==="auto"){let k=!1;for(let E=0,T=t.length;Ei.startsWith(_.open)),m=l.some(_=>i.startsWith(_.close));return!h&&m}static _findAutoClosingPairOpen(r,i,n,t){const l=r.autoClosingPairs.autoClosingPairsOpenByEnd.get(t);if(!l)return null;let h=null;for(const m of l)if(h===null||m.open.length>h.open.length){let _=!0;for(const f of n)if(i.getValueInRange(new g.Range(f.lineNumber,f.column-m.open.length+1,f.lineNumber,f.column))+t!==m.open){_=!1;break}_&&(h=m)}return h}static _findSubAutoClosingPairClose(r,i){if(i.open.length<=1)return"";const n=i.close.charAt(i.close.length-1),t=r.autoClosingPairs.autoClosingPairsCloseByEnd.get(n)||[];let l=null;for(const h of t)h.open!==i.open&&i.open.includes(h.open)&&i.close.endsWith(h.close)&&(!l||h.open.length>l.open.length)&&(l=h);return l?l.close:""}static _getAutoClosingPairClose(r,i,n,t,l){const h=C.isQuote(t),m=h?r.autoClosingQuotes:r.autoClosingBrackets;if(m==="never")return null;const _=this._findAutoClosingPairOpen(r,i,n.map(L=>L.getPosition()),t);if(!_)return null;const f=this._findSubAutoClosingPairClose(r,_);let v=!0;const y=h?r.shouldAutoCloseBefore.quote:r.shouldAutoCloseBefore.bracket;for(let L=0,I=n.length;LE.column-1){const F=T.charAt(E.column-1);if(!s._isBeforeClosingBrace(r,O)&&!y(F))return null}if(!i.isCheapToTokenize(E.lineNumber))return null;if(_.open.length===1&&h&&m!=="always"){const F=d.getMapForWordSeparators(r.wordSeparators);if(l&&E.column>1&&F.get(T.charCodeAt(E.column-2))===0||!l&&E.column>2&&F.get(T.charCodeAt(E.column-3))===0)return null}i.forceTokenization(E.lineNumber);const A=i.getLineTokens(E.lineNumber);let B=!1;try{B=o.LanguageConfigurationRegistry.shouldAutoClosePair(_,A,l?E.column:E.column-1)}catch(F){b.onUnexpectedError(F)}if(!B)return null}return v?_.close.substring(0,_.close.length-f.length):_.close}static _runAutoClosingOpenCharType(r,i,n,t,l,h,m){let _=[];for(let f=0,v=t.length;fnew M.ReplaceCommand(new g.Range(v.positionLineNumber,v.positionColumn,v.positionLineNumber,v.positionColumn+1),"",!1));return new C.EditOperationResult(1,f,{shouldPushStackElementBefore:!0,shouldPushStackElementAfter:!1})}const _=this._getAutoClosingPairClose(i,n,l,m,!1);return _!==null?this._runAutoClosingOpenCharType(r,i,n,l,m,!1,_):null}static typeWithInterceptors(r,i,n,t,l,h,m){if(!r&&m===` +`){let v=[];for(let y=0,L=l.length;y=0;r--){let i=o.charCodeAt(r),n=s.get(i);if(n===0){if(u===2)return this._createWord(o,u,n,r+1,this._findEndOfWord(o,s,u,r+1));u=1}else if(n===2){if(u===1)return this._createWord(o,u,n,r+1,this._findEndOfWord(o,s,u,r+1));u=2}else if(n===1&&u!==0)return this._createWord(o,u,n,r+1,this._findEndOfWord(o,s,u,r+1))}return u!==0?this._createWord(o,u,1,0,this._findEndOfWord(o,s,u,0)):null}static _findEndOfWord(o,s,a,u){let r=o.length;for(let i=u;i=0;r--){let i=o.charCodeAt(r),n=s.get(i);if(n===1||a===1&&n===2||a===2&&n===0)return r+1}return 0}static moveWordLeft(o,s,a,u){let r=a.lineNumber,i=a.column;i===1&&r>1&&(r=r-1,i=s.getLineMaxColumn(r));let n=d._findPreviousWordOnLine(o,s,new S.Position(r,i));if(u===0)return new S.Position(r,n?n.start+1:1);if(u===1)return n&&n.wordType===2&&n.end-n.start==1&&n.nextCharClass===0&&(n=d._findPreviousWordOnLine(o,s,new S.Position(r,n.start+1))),new S.Position(r,n?n.start+1:1);if(u===3){for(;n&&n.wordType===2;)n=d._findPreviousWordOnLine(o,s,new S.Position(r,n.start+1));return new S.Position(r,n?n.start+1:1)}return n&&i<=n.end+1&&(n=d._findPreviousWordOnLine(o,s,new S.Position(r,n.start+1))),new S.Position(r,n?n.end+1:1)}static _moveWordPartLeft(o,s){const a=s.lineNumber,u=o.getLineMaxColumn(a);if(s.column===1)return a>1?new S.Position(a-1,o.getLineMaxColumn(a-1)):s;const r=o.getLineContent(a);for(let i=s.column-1;i>1;i--){const n=r.charCodeAt(i-2),t=r.charCodeAt(i-1);if(n===95&&t!==95)return new S.Position(a,i);if(b.isLowerAsciiLetter(n)&&b.isUpperAsciiLetter(t))return new S.Position(a,i);if(b.isUpperAsciiLetter(n)&&b.isUpperAsciiLetter(t)&&i+1=t.start+1&&(t=d._findNextWordOnLine(o,s,new S.Position(r,t.end+1))),t?i=t.start+1:i=s.getLineMaxColumn(r);return new S.Position(r,i)}static _moveWordPartRight(o,s){const a=s.lineNumber,u=o.getLineMaxColumn(a);if(s.column===u)return a1?l=1:(t--,l=u.getLineMaxColumn(t)):(h&&l<=h.end+1&&(h=d._findPreviousWordOnLine(a,u,new S.Position(t,h.start+1))),h?l=h.end+1:l>1?l=1:(t--,l=u.getLineMaxColumn(t))),new C.Range(t,l,n.lineNumber,n.column)}static deleteInsideWord(o,s,a){if(!a.isEmpty())return a;const u=new S.Position(a.positionLineNumber,a.positionColumn);let r=this._deleteInsideWordWhitespace(s,u);return r||this._deleteInsideWordDetermineDeleteRange(o,s,u)}static _charAtIsWhitespace(o,s){const a=o.charCodeAt(s);return a===32||a===9}static _deleteInsideWordWhitespace(o,s){const a=o.getLineContent(s.lineNumber),u=a.length;if(u===0)return null;let r=Math.max(s.column-2,0);if(!this._charAtIsWhitespace(a,r))return null;let i=Math.min(s.column-1,u-1);if(!this._charAtIsWhitespace(a,i))return null;for(;r>0&&this._charAtIsWhitespace(a,r-1);)r--;for(;i+11?new C.Range(a.lineNumber-1,s.getLineMaxColumn(a.lineNumber-1),a.lineNumber,1):a.lineNumberm.start+1<=a.column&&a.column<=m.end+1,n=(m,_)=>(m=Math.min(m,a.column),_=Math.max(_,a.column),new C.Range(a.lineNumber,m,a.lineNumber,_)),t=m=>{let _=m.start+1,f=m.end+1,v=!1;for(;f-11&&this._charAtIsWhitespace(u,_-2);)_--;return n(_,f)},l=d._findPreviousWordOnLine(o,s,a);if(l&&i(l))return t(l);const h=d._findNextWordOnLine(o,s,a);return h&&i(h)?t(h):l&&h?n(l.end+1,h.start+1):l?n(l.start+1,l.end+1):h?n(h.start+1,h.end+1):n(1,r+1)}static _deleteWordPartLeft(o,s){if(!s.isEmpty())return s;const a=s.getPosition(),u=d._moveWordPartLeft(o,a);return new C.Range(a.lineNumber,a.column,u.lineNumber,u.column)}static _findFirstNonWhitespaceChar(o,s){let a=o.length;for(let u=s;u=_.start+1&&(_=d._findNextWordOnLine(a,u,new S.Position(t,_.end+1))),_?l=_.start+1:lBoolean(o))}}),define(Q[241],J([0,1,20,42,180,136,14,3]),function(q,e,b,N,M,w,S,C){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CursorMove=e.CursorMoveCommands=void 0;class d{static addCursorDown(c,o,s){let a=[],u=0;for(let r=0,i=o.length;rt&&(l=t,h=c.model.getLineMaxColumn(l)),N.CursorState.fromModelState(new N.SingleCursorState(new C.Range(r.lineNumber,1,l,h),0,new S.Position(l,h),0))}const n=o.modelState.selectionStart.getStartPosition().lineNumber;if(r.lineNumbern){const t=c.getLineCount();let l=i.lineNumber+1,h=1;return l>t&&(l=t,h=c.getLineMaxColumn(l)),N.CursorState.fromViewState(o.viewState.move(o.modelState.hasSelection(),l,h,0))}else{const t=o.modelState.selectionStart.getEndPosition();return N.CursorState.fromModelState(o.modelState.move(o.modelState.hasSelection(),t.lineNumber,t.column,0))}}static word(c,o,s,a){const u=c.model.validatePosition(a);return N.CursorState.fromModelState(w.WordOperations.word(c.cursorConfig,c.model,o.modelState,s,u))}static cancelSelection(c,o){if(!o.modelState.hasSelection())return new N.CursorState(o.modelState,o.viewState);const s=o.viewState.position.lineNumber,a=o.viewState.position.column;return N.CursorState.fromViewState(new N.SingleCursorState(new C.Range(s,a,s,a),0,new S.Position(s,a),0))}static moveTo(c,o,s,a,u){const r=c.model.validatePosition(a),i=u?c.coordinatesConverter.validateViewPosition(new S.Position(u.lineNumber,u.column),r):c.coordinatesConverter.convertModelPositionToViewPosition(r);return N.CursorState.fromViewState(o.viewState.move(s,i.lineNumber,i.column,0))}static simpleMove(c,o,s,a,u,r){switch(s){case 0:return r===4?this._moveHalfLineLeft(c,o,a):this._moveLeft(c,o,a,u);case 1:return r===4?this._moveHalfLineRight(c,o,a):this._moveRight(c,o,a,u);case 2:return r===2?this._moveUpByViewLines(c,o,a,u):this._moveUpByModelLines(c,o,a,u);case 3:return r===2?this._moveDownByViewLines(c,o,a,u):this._moveDownByModelLines(c,o,a,u);case 4:return r===2?o.map(i=>N.CursorState.fromViewState(M.MoveOperations.moveToPrevBlankLine(c.cursorConfig,c,i.viewState,a))):o.map(i=>N.CursorState.fromModelState(M.MoveOperations.moveToPrevBlankLine(c.cursorConfig,c.model,i.modelState,a)));case 5:return r===2?o.map(i=>N.CursorState.fromViewState(M.MoveOperations.moveToNextBlankLine(c.cursorConfig,c,i.viewState,a))):o.map(i=>N.CursorState.fromModelState(M.MoveOperations.moveToNextBlankLine(c.cursorConfig,c.model,i.modelState,a)));case 6:return this._moveToViewMinColumn(c,o,a);case 7:return this._moveToViewFirstNonWhitespaceColumn(c,o,a);case 8:return this._moveToViewCenterColumn(c,o,a);case 9:return this._moveToViewMaxColumn(c,o,a);case 10:return this._moveToViewLastNonWhitespaceColumn(c,o,a);default:return null}}static viewportMove(c,o,s,a,u){const r=c.getCompletelyVisibleViewRange(),i=c.coordinatesConverter.convertViewRangeToModelRange(r);switch(s){case 11:{const n=this._firstLineNumberInRange(c.model,i,u),t=c.model.getLineFirstNonWhitespaceColumn(n);return[this._moveToModelPosition(c,o[0],a,n,t)]}case 13:{const n=this._lastLineNumberInRange(c.model,i,u),t=c.model.getLineFirstNonWhitespaceColumn(n);return[this._moveToModelPosition(c,o[0],a,n,t)]}case 12:{const n=Math.round((i.startLineNumber+i.endLineNumber)/2),t=c.model.getLineFirstNonWhitespaceColumn(n);return[this._moveToModelPosition(c,o[0],a,n,t)]}case 14:{let n=[];for(let t=0,l=o.length;ts.endLineNumber-1&&(u=s.endLineNumber-1),u1;let r=[];for(let i=0,n=o.length;i1;let r=[];for(let i=0,n=o.length;ig){let p=d-g;for(let c=0;c=C+1&&this.lastAddedCursorIndex--,this.secondaryCursors[C].dispose(this.context),this.secondaryCursors.splice(C,1)}_getAll(){let C=[];C[0]=this.primaryCursor;for(let d=0,g=this.secondaryCursors.length;dg.selection.startLineNumber===p.selection.startLineNumber?g.selection.startColumn-p.selection.startColumn:g.selection.startLineNumber-p.selection.startLineNumber);for(let g=0;gi&&h.index--;C.splice(i,1),d.splice(r,1),this._removeSecondaryCursor(i-1),g--}}}}}}e.CursorCollection=w}),define(Q[242],J([0,1,12,8,538,42,181,182,3,21,170,2,173]),function(q,e,b,N,M,w,S,C,d,g,p,c,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Cursor=e.CursorModelState=void 0;class s{constructor(n,t){this.modelVersionId=n.getVersionId(),this.cursorState=t.getCursorStates()}equals(n){if(!n||this.modelVersionId!==n.modelVersionId||this.cursorState.length!==n.cursorState.length)return!1;for(let t=0,l=this.cursorState.length;t=t.length||!t[l].strictContainsRange(n[l]))return!1;return!0}}class u extends c.Disposable{constructor(n,t,l,h){super();this._model=n,this._knownModelVersionId=this._model.getVersionId(),this._viewModel=t,this._coordinatesConverter=l,this.context=new w.CursorContext(this._model,this._coordinatesConverter,h),this._cursors=new M.CursorCollection(this.context),this._hasFocus=!1,this._isHandling=!1,this._isDoingComposition=!1,this._selectionsWhenCompositionStarted=null,this._columnSelectData=null,this._autoClosedActions=[],this._prevEditOperationType=0}dispose(){this._cursors.dispose(),this._autoClosedActions=c.dispose(this._autoClosedActions),super.dispose()}updateConfiguration(n){this.context=new w.CursorContext(this._model,this._coordinatesConverter,n),this._cursors.updateContext(this.context)}onLineMappingChanged(n){this._knownModelVersionId===this._model.getVersionId()&&this.setStates(n,"viewModel",0,this.getCursorStates())}setHasFocus(n){this._hasFocus=n}_validateAutoClosedActions(){if(this._autoClosedActions.length>0){let n=this._cursors.getSelections();for(let t=0;tu.MAX_CURSOR_COUNT&&(h=h.slice(0,u.MAX_CURSOR_COUNT),m=!0);const _=new s(this._model,this);return this._cursors.setStates(h),this._cursors.normalize(),this._columnSelectData=null,this._validateAutoClosedActions(),this._emitStateChangedIfNecessary(n,t,l,_,m)}setCursorColumnSelectData(n){this._columnSelectData=n}revealPrimary(n,t,l,h){const m=this._cursors.getViewPositions();if(m.length>1){this._emitCursorRevealRange(n,t,null,this._cursors.getViewSelections(),0,l,h);return}else{const _=m[0],f=new d.Range(_.lineNumber,_.column,_.lineNumber,_.column);this._emitCursorRevealRange(n,t,f,null,0,l,h)}}_revealPrimaryCursor(n,t,l,h,m){const _=this._cursors.getViewPositions();if(_.length>1)this._emitCursorRevealRange(n,t,null,this._cursors.getViewSelections(),l,h,m);else{const f=_[0],v=new d.Range(f.lineNumber,f.column,f.lineNumber,f.column);this._emitCursorRevealRange(n,t,v,null,l,h,m)}}_emitCursorRevealRange(n,t,l,h,m,_,f){n.emitViewEvent(new p.ViewRevealRangeRequestEvent(t,l,h,m,_,f))}saveState(){let n=[];const t=this._cursors.getSelections();for(let l=0,h=t.length;l0){const h=w.CursorState.fromModelSelections(t.resultingSelection);this.setStates(n,"modelChange",t.isUndoing?5:t.isRedoing?6:2,h)&&this._revealPrimaryCursor(n,"modelChange",0,!0,0)}else{const h=this._cursors.readSelectionFromMarkers();this.setStates(n,"modelChange",2,w.CursorState.fromModelSelections(h))}}}getSelection(){return this._cursors.getPrimaryCursor().modelState.selection}getTopMostViewPosition(){return this._cursors.getTopMostViewPosition()}getBottomMostViewPosition(){return this._cursors.getBottomMostViewPosition()}getCursorColumnSelectData(){if(this._columnSelectData)return this._columnSelectData;const n=this._cursors.getPrimaryCursor(),t=n.viewState.selectionStart.getStartPosition(),l=n.viewState.position;return{isReal:!1,fromViewLineNumber:t.lineNumber,fromViewVisualColumn:w.CursorColumns.visibleColumnFromColumn2(this.context.cursorConfig,this._viewModel,t),toViewLineNumber:l.lineNumber,toViewVisualColumn:w.CursorColumns.visibleColumnFromColumn2(this.context.cursorConfig,this._viewModel,l)}}getSelections(){return this._cursors.getSelections()}setSelections(n,t,l,h){this.setStates(n,t,h,w.CursorState.fromModelSelections(l))}getPrevEditOperationType(){return this._prevEditOperationType}setPrevEditOperationType(n){this._prevEditOperationType=n}_pushAutoClosedAction(n,t){let l=[],h=[];for(let f=0,v=n.length;f0&&this._pushAutoClosedAction(l,h),this._prevEditOperationType=n.type}n.shouldPushStackElementAfter&&this._model.pushStackElement()}}_interpretCommandResult(n){(!n||n.length===0)&&(n=this._cursors.readSelectionFromMarkers()),this._columnSelectData=null,this._cursors.setSelections(n),this._cursors.normalize()}_emitStateChangedIfNecessary(n,t,l,h,m){const _=new s(this._model,this);if(_.equals(h))return!1;const f=this._cursors.getSelections(),v=this._cursors.getViewSelections();if(n.emitViewEvent(new p.ViewCursorStateChangedEvent(v,f)),!h||h.cursorState.length!==_.cursorState.length||_.cursorState.some((y,L)=>!y.modelState.equals(h.cursorState[L].modelState))){const y=h?h.cursorState.map(I=>I.modelState.selection):null,L=h?h.modelVersionId:0;n.emitOutgoingEvent(new o.CursorStateChangedEvent(y,f,L,_.modelVersionId,t||"keyboard",l,m))}return!0}_findAutoClosingPairs(n){if(!n.length)return null;let t=[];for(let l=0,h=n.length;l=0)return null;const _=m.text.match(/([)\]}>'"`])([^)\]}>'"`]*)$/);if(!_)return null;const f=_[1],v=this.context.cursorConfig.autoClosingPairs.autoClosingPairsCloseSingleChar.get(f);if(!v||v.length!==1)return null;const y=v[0].open,L=m.text.length-_[2].length-1,I=m.text.lastIndexOf(y,L-1);if(I===-1)return null;t.push([I,L])}return t}executeEdits(n,t,l,h){let m=null;t==="snippet"&&(m=this._findAutoClosingPairs(l)),m&&(l[0]._isTracked=!0);let _=[],f=[];const v=this._model.pushEditOperations(this.getSelections(),l,y=>{if(m)for(let I=0,k=m.length;I0&&this._pushAutoClosedAction(_,f)}_executeEdit(n,t,l,h=0){if(!this.context.cursorConfig.readOnly){const m=new s(this._model,this);this._cursors.stopTrackingSelections(),this._isHandling=!0;try{this._cursors.ensureValidState(),n()}catch(_){b.onUnexpectedError(_)}this._isHandling=!1,this._cursors.startTrackingSelections(),this._validateAutoClosedActions(),this._emitStateChangedIfNecessary(t,l,h,m,!1)&&this._revealPrimaryCursor(t,l,0,!0,0)}}setIsDoingComposition(n){this._isDoingComposition=n}startComposition(n){this._selectionsWhenCompositionStarted=this.getSelections().slice(0)}endComposition(n,t){this._executeEdit(()=>{if(t==="keyboard"){const l=a.getAllAutoClosedCharacters(this._autoClosedActions);this._executeEditOperation(C.TypeOperations.compositionEndWithInterceptors(this._prevEditOperationType,this.context.cursorConfig,this._model,this._selectionsWhenCompositionStarted,this.getSelections(),l)),this._selectionsWhenCompositionStarted=null}},n,t)}type(n,t,l){this._executeEdit(()=>{if(l==="keyboard"){const h=t.length;let m=0;for(;m{const y=v.getPosition();return new g.Selection(y.lineNumber,y.column+m,y.lineNumber,y.column+m)});this.setSelections(n,_,f,0)}return}this._executeEdit(()=>{this._executeEditOperation(C.TypeOperations.compositionType(this._prevEditOperationType,this.context.cursorConfig,this._model,this.getSelections(),t,l,h,m))},n,_)}paste(n,t,l,h,m){this._executeEdit(()=>{this._executeEditOperation(C.TypeOperations.paste(this.context.cursorConfig,this._model,this.getSelections(),t,l,h||[]))},n,m,4)}cut(n,t){this._executeEdit(()=>{this._executeEditOperation(S.DeleteOperations.cut(this.context.cursorConfig,this._model,this.getSelections()))},n,t)}executeCommand(n,t,l){this._executeEdit(()=>{this._cursors.killSecondaryCursors(),this._executeEditOperation(new w.EditOperationResult(0,[t],{shouldPushStackElementBefore:!1,shouldPushStackElementAfter:!1}))},n,l)}executeCommands(n,t,l){this._executeEdit(()=>{this._executeEditOperation(new w.EditOperationResult(0,t,{shouldPushStackElementBefore:!1,shouldPushStackElementAfter:!1}))},n,l)}}e.Cursor=u,u.MAX_CURSOR_COUNT=1e4;class r{static executeCommands(n,t,l){const h={model:n,selectionsBefore:t,trackedRanges:[],trackedRangesDirection:[]},m=this._innerExecuteCommands(h,l);for(let _=0,f=h.trackedRanges.length;_0&&(_[0]._isTracked=!0);let f=n.model.pushEditOperations(n.selectionsBefore,_,y=>{let L=[];for(let E=0;EE.identifier.minor-T.identifier.minor;let k=[];for(let E=0;E0?(L[E].sort(I),k[E]=t[E].computeCursorState(n.model,{getInverseEditOperations:()=>L[E],getTrackedSelection:T=>{const O=parseInt(T,10),A=n.model._getTrackedRange(n.trackedRanges[O]);return n.trackedRangesDirection[O]===0?new g.Selection(A.startLineNumber,A.startColumn,A.endLineNumber,A.endColumn):new g.Selection(A.endLineNumber,A.endColumn,A.startLineNumber,A.startColumn)}})):k[E]=n.selectionsBefore[E];return k});f||(f=n.selectionsBefore);let v=[];for(let y in m)m.hasOwnProperty(y)&&v.push(parseInt(y,10));v.sort((y,L)=>L-y);for(const y of v)f.splice(y,1);return f}static _arrayIsEmpty(n){for(let t=0,l=n.length;t{d.Range.isEmpty(I)&&k===""||h.push({identifier:{major:t,minor:m++},range:I,text:k,forceMoveMarkers:E,isAutoWhitespaceEdit:l.insertsAutoWhitespace})};let f=!1;const L={addEditOperation:_,addTrackedEditOperation:(I,k,E)=>{f=!0,_(I,k,E)},trackSelection:(I,k)=>{const E=g.Selection.liftSelection(I);let T;if(E.isEmpty())if(typeof k=="boolean")k?T=2:T=3;else{const B=n.model.getLineMaxColumn(E.startLineNumber);E.startColumn===B?T=2:T=3}else T=1;const O=n.trackedRanges.length,A=n.model._setTrackedRange(null,E,T);return n.trackedRanges[O]=A,n.trackedRangesDirection[O]=E.getDirection(),O.toString()}};try{l.getEditOperations(n.model,L)}catch(I){return b.onUnexpectedError(I),{operations:[],hadTrackedEditOperation:!1}}return{operations:h,hadTrackedEditOperation:f}}static _getLoserCursorMap(n){n=n.slice(0),n.sort((l,h)=>-d.Range.compareRangesUsingEnds(l.range,h.range));let t={};for(let l=1;lm.identifier.major?_=h.identifier.major:_=m.identifier.major,t[_.toString()]=!0;for(let f=0;f0&&l--}}return t}}}),define(Q[243],J([0,1,8,113,76]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.tokenizeLineToHTML=e.tokenizeToString=void 0;const w={getInitialState:()=>M.NULL_STATE,tokenize2:(g,p,c,o)=>M.nullTokenize2(0,g,c,o)};function S(g,p=w){return d(g,p||w)}e.tokenizeToString=S;function C(g,p,c,o,s,a,u){let r="
    ",i=o,n=0;for(let t=0,l=p.getCount();t0;)m+=u?" ":" ",f--;break;case 60:m+="<";break;case 62:m+=">";break;case 38:m+="&";break;case 0:m+="�";break;case 65279:case 8232:case 8233:case 133:m+="\uFFFD";break;case 13:m+="​";break;case 32:m+=u?" ":" ";break;default:m+=String.fromCharCode(_)}}if(r+=`${m}`,h>s||i>=s)break}}return r+="
    ",r}e.tokenizeLineToHTML=C;function d(g,p){let c='
    ',o=b.splitLines(g),s=p.getInitialState();for(let a=0,u=o.length;a0&&(c+="
    ");let i=p.tokenize2(r,!0,s,0);N.LineTokens.convertToEndOffset(i.tokens,r.length);let t=new N.LineTokens(i.tokens,r).inflate(),l=0;for(let h=0,m=t.getCount();h${b.escape(r.substring(l,f))}`,l=f}s=i.endState}return c+="
    ",c}}),define(Q[67],J([0,1,9]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ITextModelService=void 0,e.ITextModelService=b.createDecorator("textModelService")}),define(Q[137],J([0,1,9]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ITextResourcePropertiesService=e.ITextResourceConfigurationService=void 0,e.ITextResourceConfigurationService=b.createDecorator("textResourceConfigurationService"),e.ITextResourcePropertiesService=b.createDecorator("textResourcePropertiesService")}),define(Q[244],J([0,1,6,216,18]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MinimapTokensColorTracker=void 0;class w{constructor(){this._onDidChange=new b.Emitter,this.onDidChange=this._onDidChange.event,this._updateColorMap(),M.TokenizationRegistry.onDidChange(C=>{C.changedColorMap&&this._updateColorMap()})}static getInstance(){return this._INSTANCE||(this._INSTANCE=new w),this._INSTANCE}_updateColorMap(){const C=M.TokenizationRegistry.getColorMap();if(!C){this._colors=[N.RGBA8.Empty],this._backgroundIsLight=!0;return}this._colors=[N.RGBA8.Empty];for(let g=1;g=.5,this._onDidChange.fire(void 0)}getColor(C){return(C<1||C>=this._colors.length)&&(C=2),this._colors[C]}backgroundIsLight(){return this._backgroundIsLight}}e.MinimapTokensColorTracker=w,w._INSTANCE=null}),define(Q[539],J([0,1,19,14,3,31,170,222,63]),function(q,e,b,N,M,w,S,C,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IdentityLinesCollection=e.IdentityCoordinatesConverter=e.SplitLine=e.SplitLinesCollection=e.CoordinatesConverter=void 0;class g{constructor(_){this._lines=_}convertViewPositionToModelPosition(_){return this._lines.convertViewPositionToModelPosition(_.lineNumber,_.column)}convertViewRangeToModelRange(_){return this._lines.convertViewRangeToModelRange(_)}validateViewPosition(_,f){return this._lines.validateViewPosition(_.lineNumber,_.column,f)}validateViewRange(_,f){return this._lines.validateViewRange(_,f)}convertModelPositionToViewPosition(_){return this._lines.convertModelPositionToViewPosition(_.lineNumber,_.column)}convertModelRangeToViewRange(_){return this._lines.convertModelRangeToViewRange(_)}modelPositionIsVisible(_){return this._lines.modelPositionIsVisible(_.lineNumber,_.column)}getModelLineViewLineCount(_){return this._lines.getModelLineViewLineCount(_)}}e.CoordinatesConverter=g;class p{constructor(_){this._counts=_,this._isValid=!1,this._validEndIndex=-1,this._modelToView=[],this._viewToModel=[]}_invalidate(_){this._isValid=!1,this._validEndIndex=Math.min(this._validEndIndex,_-1)}_ensureValid(){if(!this._isValid){for(let _=this._validEndIndex+1,f=this._counts.length;_0?this._modelToView[_-1]:0;this._modelToView[_]=y+v;for(let L=0;L0?this._modelToView[f-1]:0;return new C.PrefixSumIndexOfResult(f,_-v)}}class c{constructor(_,f,v,y,L,I,k,E){this.model=_,this._validModelVersionId=-1,this._domLineBreaksComputerFactory=f,this._monospaceLineBreaksComputerFactory=v,this.fontInfo=y,this.tabSize=L,this.wrappingStrategy=I,this.wrappingColumn=k,this.wrappingIndent=E,this._constructLines(!0,null)}dispose(){this.hiddenAreasIds=this.model.deltaDecorations(this.hiddenAreasIds,[])}createCoordinatesConverter(){return new g(this)}_constructLines(_,f){this.lines=[],_&&(this.hiddenAreasIds=[]);let v=this.model.getLinesContent();const y=v.length,L=this.createLineBreaksComputer();for(let F=0;Fthis.model.getDecorationRange(F)).sort(M.Range.compareRangesUsingStarts),T=1,O=0,A=-1,B=A+1=T&&D<=O,W=n(I[F],!R);k[F]=W.getViewLineCount(),this.lines[F]=W}this._validModelVersionId=this.model.getVersionId(),this.prefixSumComputer=new p(k)}getHiddenAreas(){return this.hiddenAreasIds.map(_=>this.model.getDecorationRange(_))}_reduceRanges(_){if(_.length===0)return[];let f=_.map(I=>this.model.validateRange(I)).sort(M.Range.compareRangesUsingStarts),v=[],y=f[0].startLineNumber,L=f[0].endLineNumber;for(let I=1,k=f.length;IL+1?(v.push(new M.Range(y,1,L,1)),y=E.startLineNumber,L=E.endLineNumber):E.endLineNumber>L&&(L=E.endLineNumber)}return v.push(new M.Range(y,1,L,1)),v}setHiddenAreas(_){let f=this._reduceRanges(_),v=this.hiddenAreasIds.map(A=>this.model.getDecorationRange(A)).sort(M.Range.compareRangesUsingStarts);if(f.length===v.length){let A=!1;for(let B=0;B=I&&B<=k?this.lines[A].isVisible()&&(this.lines[A]=this.lines[A].setVisible(!1),F=!0):(O=!0,this.lines[A].isVisible()||(this.lines[A]=this.lines[A].setVisible(!0),F=!0)),F){let D=this.lines[A].getViewLineCount();this.prefixSumComputer.changeValue(A,D)}}return O||this.setHiddenAreas([]),!0}modelPositionIsVisible(_,f){return _<1||_>this.lines.length?!1:this.lines[_-1].isVisible()}getModelLineViewLineCount(_){return _<1||_>this.lines.length?1:this.lines[_-1].getViewLineCount()}setTabSize(_){return this.tabSize===_?!1:(this.tabSize=_,this._constructLines(!1,null),!0)}setWrappingSettings(_,f,v,y){const L=this.fontInfo.equals(_),I=this.wrappingStrategy===f,k=this.wrappingColumn===v,E=this.wrappingIndent===y;if(L&&I&&k&&E)return!1;const T=L&&I&&!k&&E;this.fontInfo=_,this.wrappingStrategy=f,this.wrappingColumn=v,this.wrappingIndent=y;let O=null;if(T){O=[];for(let A=0,B=this.lines.length;A2&&!this.lines[f-2].isVisible();let I=f===1?1:this.prefixSumComputer.getAccumulatedValue(f-2)+1,k=0,E=[],T=[];for(let O=0,A=y.length;OE?(O=f===1?1:this.prefixSumComputer.getAccumulatedValue(f-2)+1,A=O+E-1,D=A+1,R=D+(L-E)-1,T=!0):Lf?f:_|0}getActiveIndentGuide(_,f,v){_=this._toValidViewLineNumber(_),f=this._toValidViewLineNumber(f),v=this._toValidViewLineNumber(v);const y=this.convertViewPositionToModelPosition(_,this.getViewLineMinColumn(_)),L=this.convertViewPositionToModelPosition(f,this.getViewLineMinColumn(f)),I=this.convertViewPositionToModelPosition(v,this.getViewLineMinColumn(v)),k=this.model.getActiveIndentGuide(y.lineNumber,L.lineNumber,I.lineNumber),E=this.convertModelPositionToViewPosition(k.startLineNumber,1),T=this.convertModelPositionToViewPosition(k.endLineNumber,this.model.getLineMaxColumn(k.endLineNumber));return{startLineNumber:E.lineNumber,endLineNumber:T.lineNumber,indent:k.indent}}getViewLinesIndentGuides(_,f){_=this._toValidViewLineNumber(_),f=this._toValidViewLineNumber(f);const v=this.convertViewPositionToModelPosition(_,this.getViewLineMinColumn(_)),y=this.convertViewPositionToModelPosition(f,this.getViewLineMaxColumn(f));let L=[],I=[],k=[];const E=v.lineNumber-1,T=y.lineNumber-1;let O=null;for(let D=E;D<=T;D++){const R=this.lines[D];if(R.isVisible()){let W=R.getViewLineNumberOfModelPosition(0,D===E?v.column:1),x=R.getViewLineNumberOfModelPosition(0,this.model.getLineMaxColumn(D+1)),K=x-W+1,Y=0;K>1&&R.getViewLineMinColumn(this.model,D+1,x)===1&&(Y=W===0?1:2),I.push(K),k.push(Y),O===null&&(O=new N.Position(D+1,0))}else O!==null&&(L=L.concat(this.model.getLinesIndentGuides(O.lineNumber,D)),O=null)}O!==null&&(L=L.concat(this.model.getLinesIndentGuides(O.lineNumber,y.lineNumber)),O=null);const A=f-_+1;let B=new Array(A),F=0;for(let D=0,R=L.length;Df&&(D=!0,F=f-L+1);let R=B+F;if(A.getViewLinesData(this.model,T+1,B,R,L-_,v,E),L+=F,D)break}}return E}validateViewPosition(_,f,v){_=this._toValidViewLineNumber(_);let y=this.prefixSumComputer.getIndexOf(_-1),L=y.index,I=y.remainder,k=this.lines[L],E=k.getViewLineMinColumn(this.model,L+1,I),T=k.getViewLineMaxColumn(this.model,L+1,I);fT&&(f=T);let O=k.getModelColumnOfViewPosition(I,f);return this.model.validatePosition(new N.Position(L+1,O)).equals(v)?new N.Position(_,f):this.convertModelPositionToViewPosition(v.lineNumber,v.column)}validateViewRange(_,f){const v=this.validateViewPosition(_.startLineNumber,_.startColumn,f.getStartPosition()),y=this.validateViewPosition(_.endLineNumber,_.endColumn,f.getEndPosition());return new M.Range(v.lineNumber,v.column,y.lineNumber,y.column)}convertViewPositionToModelPosition(_,f){_=this._toValidViewLineNumber(_);let v=this.prefixSumComputer.getIndexOf(_-1),y=v.index,L=v.remainder,I=this.lines[y].getModelColumnOfViewPosition(L,f);return this.model.validatePosition(new N.Position(y+1,I))}convertViewRangeToModelRange(_){const f=this.convertViewPositionToModelPosition(_.startLineNumber,_.startColumn),v=this.convertViewPositionToModelPosition(_.endLineNumber,_.endColumn);return new M.Range(f.lineNumber,f.column,v.lineNumber,v.column)}convertModelPositionToViewPosition(_,f){const v=this.model.validatePosition(new N.Position(_,f)),y=v.lineNumber,L=v.column;let I=y-1,k=!1;for(;I>0&&!this.lines[I].isVisible();)I--,k=!0;if(I===0&&!this.lines[I].isVisible())return new N.Position(1,1);const E=1+(I===0?0:this.prefixSumComputer.getAccumulatedValue(I-1));let T;return k?T=this.lines[I].getViewPositionOfModelPosition(E,this.model.getLineMaxColumn(I+1)):T=this.lines[y-1].getViewPositionOfModelPosition(E,L),T}convertModelRangeToViewRange(_){let f=this.convertModelPositionToViewPosition(_.startLineNumber,_.startColumn),v=this.convertModelPositionToViewPosition(_.endLineNumber,_.endColumn);return _.startLineNumber===_.endLineNumber&&f.lineNumber!==v.lineNumber&&v.column===this.getViewLineMinColumn(v.lineNumber)?new M.Range(f.lineNumber,f.column,v.lineNumber-1,this.getViewLineMaxColumn(v.lineNumber-1)):new M.Range(f.lineNumber,f.column,v.lineNumber,v.column)}_getViewLineNumberForModelPosition(_,f){let v=_-1;if(this.lines[v].isVisible()){const L=1+(v===0?0:this.prefixSumComputer.getAccumulatedValue(v-1));return this.lines[v].getViewLineNumberOfModelPosition(L,f)}for(;v>0&&!this.lines[v].isVisible();)v--;if(v===0&&!this.lines[v].isVisible())return 1;const y=1+(v===0?0:this.prefixSumComputer.getAccumulatedValue(v-1));return this.lines[v].getViewLineNumberOfModelPosition(y,this.model.getLineMaxColumn(v+1))}getAllOverviewRulerDecorations(_,f,v){const y=this.model.getOverviewRulerDecorations(_,f),L=new h;for(const I of y){const k=I.options.overviewRuler,E=k?k.position:0;if(E!==0){const T=k.getColor(v),O=this._getViewLineNumberForModelPosition(I.range.startLineNumber,I.range.startColumn),A=this._getViewLineNumberForModelPosition(I.range.endLineNumber,I.range.endColumn);L.accept(T,O,A,E)}}return L.result}getDecorationsInRange(_,f,v){const y=this.convertViewPositionToModelPosition(_.startLineNumber,_.startColumn),L=this.convertViewPositionToModelPosition(_.endLineNumber,_.endColumn);if(L.lineNumber-y.lineNumber<=_.endLineNumber-_.startLineNumber)return this.model.getDecorationsInRange(new M.Range(y.lineNumber,1,L.lineNumber,L.column),f,v);let I=[];const k=y.lineNumber-1,E=L.lineNumber-1;let T=null;for(let F=k;F<=E;F++)if(this.lines[F].isVisible())T===null&&(T=new N.Position(F+1,F===k?y.column:1));else if(T!==null){const R=this.model.getLineMaxColumn(F);I=I.concat(this.model.getDecorationsInRange(new M.Range(T.lineNumber,T.column,F,R),f,v)),T=null}T!==null&&(I=I.concat(this.model.getDecorationsInRange(new M.Range(T.lineNumber,T.column,L.lineNumber,L.column),f,v)),T=null),I.sort((F,D)=>{const R=M.Range.compareRangesUsingStarts(F.range,D.range);return R===0?F.idD.id?1:0:R});let O=[],A=0,B=null;for(const F of I){const D=F.id;B!==D&&(B=D,O[A++]=F)}return O}}e.SplitLinesCollection=c;class o{constructor(){}isVisible(){return!0}setVisible(_){return _?this:s.INSTANCE}getLineBreakData(){return null}getViewLineCount(){return 1}getViewLineContent(_,f,v){return _.getLineContent(f)}getViewLineLength(_,f,v){return _.getLineLength(f)}getViewLineMinColumn(_,f,v){return _.getLineMinColumn(f)}getViewLineMaxColumn(_,f,v){return _.getLineMaxColumn(f)}getViewLineData(_,f,v){let y=_.getLineTokens(f),L=y.getLineContent();return new d.ViewLineData(L,!1,1,L.length+1,0,y.inflate())}getViewLinesData(_,f,v,y,L,I,k){if(!I[L]){k[L]=null;return}k[L]=this.getViewLineData(_,f,0)}getModelColumnOfViewPosition(_,f){return f}getViewPositionOfModelPosition(_,f){return new N.Position(_,f)}getViewLineNumberOfModelPosition(_,f){return _}}o.INSTANCE=new o;class s{constructor(){}isVisible(){return!1}setVisible(_){return _?o.INSTANCE:this}getLineBreakData(){return null}getViewLineCount(){return 0}getViewLineContent(_,f,v){throw new Error("Not supported")}getViewLineLength(_,f,v){throw new Error("Not supported")}getViewLineMinColumn(_,f,v){throw new Error("Not supported")}getViewLineMaxColumn(_,f,v){throw new Error("Not supported")}getViewLineData(_,f,v){throw new Error("Not supported")}getViewLinesData(_,f,v,y,L,I,k){throw new Error("Not supported")}getModelColumnOfViewPosition(_,f){throw new Error("Not supported")}getViewPositionOfModelPosition(_,f){throw new Error("Not supported")}getViewLineNumberOfModelPosition(_,f){throw new Error("Not supported")}}s.INSTANCE=new s;class a{constructor(_,f){this._lineBreakData=_,this._isVisible=f}isVisible(){return this._isVisible}setVisible(_){return this._isVisible=_,this}getLineBreakData(){return this._lineBreakData}getViewLineCount(){return this._isVisible?this._lineBreakData.breakOffsets.length:0}getInputStartOffsetOfOutputLineIndex(_){return d.LineBreakData.getInputOffsetOfOutputPosition(this._lineBreakData.breakOffsets,_,0)}getInputEndOffsetOfOutputLineIndex(_,f,v){return v+1===this._lineBreakData.breakOffsets.length?_.getLineMaxColumn(f)-1:d.LineBreakData.getInputOffsetOfOutputPosition(this._lineBreakData.breakOffsets,v+1,0)}getViewLineContent(_,f,v){if(!this._isVisible)throw new Error("Not supported");let y=this.getInputStartOffsetOfOutputLineIndex(v),L=this.getInputEndOffsetOfOutputLineIndex(_,f,v),I=_.getValueInRange({startLineNumber:f,startColumn:y+1,endLineNumber:f,endColumn:L+1});return v>0&&(I=r(this._lineBreakData.wrappedTextIndentLength)+I),I}getViewLineLength(_,f,v){if(!this._isVisible)throw new Error("Not supported");let y=this.getInputStartOffsetOfOutputLineIndex(v),I=this.getInputEndOffsetOfOutputLineIndex(_,f,v)-y;return v>0&&(I=this._lineBreakData.wrappedTextIndentLength+I),I}getViewLineMinColumn(_,f,v){if(!this._isVisible)throw new Error("Not supported");return v>0?this._lineBreakData.wrappedTextIndentLength+1:1}getViewLineMaxColumn(_,f,v){if(!this._isVisible)throw new Error("Not supported");return this.getViewLineContent(_,f,v).length+1}getViewLineData(_,f,v){if(!this._isVisible)throw new Error("Not supported");let y=this.getInputStartOffsetOfOutputLineIndex(v),L=this.getInputEndOffsetOfOutputLineIndex(_,f,v),I=_.getValueInRange({startLineNumber:f,startColumn:y+1,endLineNumber:f,endColumn:L+1});v>0&&(I=r(this._lineBreakData.wrappedTextIndentLength)+I);let k=v>0?this._lineBreakData.wrappedTextIndentLength+1:1,E=I.length+1,T=v+10&&(O=this._lineBreakData.wrappedTextIndentLength);let A=_.getLineTokens(f);const B=v===0?0:this._lineBreakData.breakOffsetsVisibleColumn[v-1];return new d.ViewLineData(I,T,k,E,B,A.sliceAndInflate(y,L,O))}getViewLinesData(_,f,v,y,L,I,k){if(!this._isVisible)throw new Error("Not supported");for(let E=v;E0&&(v0&&(L+=this._lineBreakData.wrappedTextIndentLength),new N.Position(_+y,L)}getViewLineNumberOfModelPosition(_,f){if(!this._isVisible)throw new Error("Not supported");const v=d.LineBreakData.getOutputPositionOfInputOffset(this._lineBreakData.breakOffsets,f-1);return _+v.outputLineIndex}}e.SplitLine=a;let u=[""];function r(m){if(m>=u.length)for(let _=1;_<=m;_++)u[_]=i(_);return u[m]}function i(m){return new Array(m+1).join(" ")}function n(m,_){return m===null?_?o.INSTANCE:s.INSTANCE:new a(m,_)}class t{constructor(_){this._lines=_}_validPosition(_){return this._lines.model.validatePosition(_)}_validRange(_){return this._lines.model.validateRange(_)}convertViewPositionToModelPosition(_){return this._validPosition(_)}convertViewRangeToModelRange(_){return this._validRange(_)}validateViewPosition(_,f){return this._validPosition(f)}validateViewRange(_,f){return this._validRange(f)}convertModelPositionToViewPosition(_){return this._validPosition(_)}convertModelRangeToViewRange(_){return this._validRange(_)}modelPositionIsVisible(_){const f=this._lines.model.getLineCount();return!(_.lineNumber<1||_.lineNumber>f)}getModelLineViewLineCount(_){return 1}}e.IdentityCoordinatesConverter=t;class l{constructor(_){this.model=_}dispose(){}createCoordinatesConverter(){return new t(this)}getHiddenAreas(){return[]}setHiddenAreas(_){return!1}setTabSize(_){return!1}setWrappingSettings(_,f,v,y){return!1}createLineBreaksComputer(){let _=[];return{addRequest:(f,v)=>{_.push(null)},finalize:()=>_}}onModelFlushed(){}onModelLinesDeleted(_,f,v){return new S.ViewLinesDeletedEvent(f,v)}onModelLinesInserted(_,f,v,y){return new S.ViewLinesInsertedEvent(f,v)}onModelLineChanged(_,f,v){return[!1,new S.ViewLinesChangedEvent(f,f),null,null]}acceptVersionId(_){}getViewLineCount(){return this.model.getLineCount()}getActiveIndentGuide(_,f,v){return{startLineNumber:_,endLineNumber:_,indent:0}}getViewLinesIndentGuides(_,f){const v=f-_+1;let y=new Array(v);for(let L=0;L=f){v>k&&(L[L.length-1]=v);return}L.push(y,f,v)}else this.result[_]=[y,f,v]}}}),define(Q[540],J([0,1,29,2,8,38,14,3,18,243,244,170,398,539,63,455,15,17,242,42,173]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ViewModel=void 0;const h=!0;class m extends N.Disposable{constructor(f,v,y,L,I,k){super();if(this._editorId=f,this._configuration=v,this.model=y,this._eventDispatcher=new l.ViewModelEventDispatcher,this.onEvent=this._eventDispatcher.onEvent,this.cursorConfig=new t.CursorConfiguration(this.model.getLanguageIdentifier(),this.model.getOptions(),this._configuration),this._tokenizeViewportSoon=this._register(new r.RunOnceScheduler(()=>this.tokenizeViewport(),50)),this._updateConfigurationViewLineCount=this._register(new r.RunOnceScheduler(()=>this._updateConfigurationViewLineCountNow(),0)),this._hasFocus=!1,this._viewportStartLine=-1,this._viewportStartLineTrackedRange=null,this._viewportStartLineDelta=0,h&&this.model.isTooLargeForTokenization())this._lines=new s.IdentityLinesCollection(this.model);else{const E=this._configuration.options,T=E.get(38),O=E.get(118),A=E.get(125),B=E.get(117);this._lines=new s.SplitLinesCollection(this.model,L,I,T,this.model.getOptions().tabSize,O,A.wrappingColumn,B)}this.coordinatesConverter=this._lines.createCoordinatesConverter(),this._cursor=this._register(new n.Cursor(y,this,this.coordinatesConverter,this.cursorConfig)),this.viewLayout=this._register(new o.ViewLayout(this._configuration,this.getLineCount(),k)),this._register(this.viewLayout.onDidScroll(E=>{E.scrollTopChanged&&this._tokenizeViewportSoon.schedule(),this._eventDispatcher.emitSingleViewEvent(new c.ViewScrollChangedEvent(E)),this._eventDispatcher.emitOutgoingEvent(new l.ScrollChangedEvent(E.oldScrollWidth,E.oldScrollLeft,E.oldScrollHeight,E.oldScrollTop,E.scrollWidth,E.scrollLeft,E.scrollHeight,E.scrollTop))})),this._register(this.viewLayout.onDidContentSizeChange(E=>{this._eventDispatcher.emitOutgoingEvent(E)})),this._decorations=new u.ViewModelDecorations(this._editorId,this.model,this._configuration,this._lines,this.coordinatesConverter),this._registerModelEvents(),this._register(this._configuration.onDidChangeFast(E=>{try{const T=this._eventDispatcher.beginEmitViewEvents();this._onConfigurationChanged(T,E)}finally{this._eventDispatcher.endEmitViewEvents()}})),this._register(p.MinimapTokensColorTracker.getInstance().onDidChange(()=>{this._eventDispatcher.emitSingleViewEvent(new c.ViewTokensColorsChangedEvent)})),this._updateConfigurationViewLineCountNow()}dispose(){super.dispose(),this._decorations.dispose(),this._lines.dispose(),this.invalidateMinimapColorCache(),this._viewportStartLineTrackedRange=this.model._setTrackedRange(this._viewportStartLineTrackedRange,null,1),this._eventDispatcher.dispose()}createLineBreaksComputer(){return this._lines.createLineBreaksComputer()}addViewEventHandler(f){this._eventDispatcher.addViewEventHandler(f)}removeViewEventHandler(f){this._eventDispatcher.removeViewEventHandler(f)}_updateConfigurationViewLineCountNow(){this._configuration.setViewLineCount(this._lines.getViewLineCount())}tokenizeViewport(){const f=this.viewLayout.getLinesViewportData(),v=this.coordinatesConverter.convertViewPositionToModelPosition(new S.Position(f.startLineNumber,1)),y=this.coordinatesConverter.convertViewPositionToModelPosition(new S.Position(f.endLineNumber,1));this.model.tokenizeViewport(v.lineNumber,y.lineNumber)}setHasFocus(f){this._hasFocus=f,this._cursor.setHasFocus(f),this._eventDispatcher.emitSingleViewEvent(new c.ViewFocusChangedEvent(f)),this._eventDispatcher.emitOutgoingEvent(new l.FocusChangedEvent(!f,f))}onCompositionStart(){this._eventDispatcher.emitSingleViewEvent(new c.ViewCompositionStartEvent)}onCompositionEnd(){this._eventDispatcher.emitSingleViewEvent(new c.ViewCompositionEndEvent)}onDidColorThemeChange(){this._eventDispatcher.emitSingleViewEvent(new c.ViewThemeChangedEvent)}_onConfigurationChanged(f,v){let y=null;if(this._viewportStartLine!==-1){let A=new S.Position(this._viewportStartLine,this.getLineMinColumn(this._viewportStartLine));y=this.coordinatesConverter.convertViewPositionToModelPosition(A)}let L=!1;const I=this._configuration.options,k=I.get(38),E=I.get(118),T=I.get(125),O=I.get(117);if(this._lines.setWrappingSettings(k,E,T.wrappingColumn,O)&&(f.emitViewEvent(new c.ViewFlushedEvent),f.emitViewEvent(new c.ViewLineMappingChangedEvent),f.emitViewEvent(new c.ViewDecorationsChangedEvent(null)),this._cursor.onLineMappingChanged(f),this._decorations.onLineMappingChanged(),this.viewLayout.onFlushed(this.getLineCount()),this.viewLayout.getCurrentScrollTop()!==0&&(L=!0),this._updateConfigurationViewLineCount.schedule()),v.hasChanged(75)&&(this._decorations.reset(),f.emitViewEvent(new c.ViewDecorationsChangedEvent(null))),f.emitViewEvent(new c.ViewConfigurationChangedEvent(v)),this.viewLayout.onConfigurationChanged(v),L&&y){const A=this.coordinatesConverter.convertModelPositionToViewPosition(y),B=this.viewLayout.getVerticalOffsetForLineNumber(A.lineNumber);this.viewLayout.setScrollPosition({scrollTop:B+this._viewportStartLineDelta},1)}t.CursorConfiguration.shouldRecreate(v)&&(this.cursorConfig=new t.CursorConfiguration(this.model.getLanguageIdentifier(),this.model.getOptions(),this._configuration),this._cursor.updateConfiguration(this.cursorConfig))}_registerModelEvents(){this._register(this.model.onDidChangeRawContentFast(f=>{try{const v=this._eventDispatcher.beginEmitViewEvents();let y=!1,L=!1;const I=f.changes,k=f.versionId,E=this._lines.createLineBreaksComputer();for(const A of I)switch(A.changeType){case 4:{for(const B of A.detail)E.addRequest(B,null);break}case 2:{E.addRequest(A.detail,null);break}}const T=E.finalize();let O=0;for(const A of I)switch(A.changeType){case 1:{this._lines.onModelFlushed(),v.emitViewEvent(new c.ViewFlushedEvent),this._decorations.reset(),this.viewLayout.onFlushed(this.getLineCount()),y=!0;break}case 3:{const B=this._lines.onModelLinesDeleted(k,A.fromLineNumber,A.toLineNumber);B!==null&&(v.emitViewEvent(B),this.viewLayout.onLinesDeleted(B.fromLineNumber,B.toLineNumber)),y=!0;break}case 4:{const B=T.slice(O,O+A.detail.length);O+=A.detail.length;const F=this._lines.onModelLinesInserted(k,A.fromLineNumber,A.toLineNumber,B);F!==null&&(v.emitViewEvent(F),this.viewLayout.onLinesInserted(F.fromLineNumber,F.toLineNumber)),y=!0;break}case 2:{const B=T[O];O++;const[F,D,R,W]=this._lines.onModelLineChanged(k,A.lineNumber,B);L=F,D&&v.emitViewEvent(D),R&&(v.emitViewEvent(R),this.viewLayout.onLinesInserted(R.fromLineNumber,R.toLineNumber)),W&&(v.emitViewEvent(W),this.viewLayout.onLinesDeleted(W.fromLineNumber,W.toLineNumber));break}case 5:break}this._lines.acceptVersionId(k),this.viewLayout.onHeightMaybeChanged(),!y&&L&&(v.emitViewEvent(new c.ViewLineMappingChangedEvent),v.emitViewEvent(new c.ViewDecorationsChangedEvent(null)),this._cursor.onLineMappingChanged(v),this._decorations.onLineMappingChanged())}finally{this._eventDispatcher.endEmitViewEvents()}if(this._viewportStartLine=-1,this._configuration.setMaxLineNumber(this.model.getLineCount()),this._updateConfigurationViewLineCountNow(),!this._hasFocus&&this.model.getAttachedEditorCount()>=2&&this._viewportStartLineTrackedRange){const v=this.model._getTrackedRange(this._viewportStartLineTrackedRange);if(v){const y=this.coordinatesConverter.convertModelPositionToViewPosition(v.getStartPosition()),L=this.viewLayout.getVerticalOffsetForLineNumber(y.lineNumber);this.viewLayout.setScrollPosition({scrollTop:L+this._viewportStartLineDelta},1)}}try{const v=this._eventDispatcher.beginEmitViewEvents();this._cursor.onModelContentChanged(v,f)}finally{this._eventDispatcher.endEmitViewEvents()}})),this._register(this.model.onDidChangeTokens(f=>{let v=[];for(let y=0,L=f.ranges.length;y{this._eventDispatcher.emitSingleViewEvent(new c.ViewLanguageConfigurationEvent),this.cursorConfig=new t.CursorConfiguration(this.model.getLanguageIdentifier(),this.model.getOptions(),this._configuration),this._cursor.updateConfiguration(this.cursorConfig)})),this._register(this.model.onDidChangeLanguage(f=>{this.cursorConfig=new t.CursorConfiguration(this.model.getLanguageIdentifier(),this.model.getOptions(),this._configuration),this._cursor.updateConfiguration(this.cursorConfig)})),this._register(this.model.onDidChangeOptions(f=>{if(this._lines.setTabSize(this.model.getOptions().tabSize)){try{const v=this._eventDispatcher.beginEmitViewEvents();v.emitViewEvent(new c.ViewFlushedEvent),v.emitViewEvent(new c.ViewLineMappingChangedEvent),v.emitViewEvent(new c.ViewDecorationsChangedEvent(null)),this._cursor.onLineMappingChanged(v),this._decorations.onLineMappingChanged(),this.viewLayout.onFlushed(this.getLineCount())}finally{this._eventDispatcher.endEmitViewEvents()}this._updateConfigurationViewLineCount.schedule()}this.cursorConfig=new t.CursorConfiguration(this.model.getLanguageIdentifier(),this.model.getOptions(),this._configuration),this._cursor.updateConfiguration(this.cursorConfig)})),this._register(this.model.onDidChangeDecorations(f=>{this._decorations.onModelDecorationsChanged(),this._eventDispatcher.emitSingleViewEvent(new c.ViewDecorationsChangedEvent(f))}))}setHiddenAreas(f){try{const v=this._eventDispatcher.beginEmitViewEvents();this._lines.setHiddenAreas(f)&&(v.emitViewEvent(new c.ViewFlushedEvent),v.emitViewEvent(new c.ViewLineMappingChangedEvent),v.emitViewEvent(new c.ViewDecorationsChangedEvent(null)),this._cursor.onLineMappingChanged(v),this._decorations.onLineMappingChanged(),this.viewLayout.onFlushed(this.getLineCount()),this.viewLayout.onHeightMaybeChanged())}finally{this._eventDispatcher.endEmitViewEvents()}this._updateConfigurationViewLineCount.schedule()}getVisibleRangesPlusViewportAboveBelow(){const f=this._configuration.options.get(124),v=this._configuration.options.get(53),y=Math.max(20,Math.round(f.height/v)),L=this.viewLayout.getLinesViewportData(),I=Math.max(1,L.completelyVisibleStartLineNumber-y),k=Math.min(this.getLineCount(),L.completelyVisibleEndLineNumber+y);return this._toModelVisibleRanges(new C.Range(I,this.getLineMinColumn(I),k,this.getLineMaxColumn(k)))}getVisibleRanges(){const f=this.getCompletelyVisibleViewRange();return this._toModelVisibleRanges(f)}_toModelVisibleRanges(f){const v=this.coordinatesConverter.convertViewRangeToModelRange(f),y=this._lines.getHiddenAreas();if(y.length===0)return[v];let L=[],I=0,k=v.startLineNumber,E=v.startColumn,T=v.endLineNumber,O=v.endColumn;for(let A=0,B=y.length;AT||(kA.startLineNumber);let O="";for(let A=0;A0&&T[A-1]===T[A]||(O+=this.model.getLineContent(T[A])+L);return O}if(I&&v){let T=[],O=0;for(const A of f){const B=A.startLineNumber;A.isEmpty()?B!==O&&T.push(this.model.getLineContent(B)):T.push(this.model.getValueInRange(A,y?2:0)),O=B}return T.length===1?T[0]:T}let E=[];for(const T of f)T.isEmpty()||E.push(this.model.getValueInRange(T,y?2:0));return E.length===1?E[0]:E}getRichTextToCopy(f,v){const y=this.model.getLanguageIdentifier();if(y.id===1||f.length!==1)return null;let L=f[0];if(L.isEmpty()){if(!v)return null;const T=L.startLineNumber;L=new C.Range(T,this.model.getLineMinColumn(T),T,this.model.getLineMaxColumn(T))}const I=this._configuration.options.get(38),k=this._getColorMap(),E=I.fontFamily===w.EDITOR_FONT_DEFAULTS.fontFamily?I.fontFamily:`'${I.fontFamily}', ${w.EDITOR_FONT_DEFAULTS.fontFamily}`;return{mode:y.language,html:`
    `+this._getHTMLToCopy(L,k)+"
    "}}_getHTMLToCopy(f,v){const y=f.startLineNumber,L=f.startColumn,I=f.endLineNumber,k=f.endColumn,E=this.getTabSize();let T="";for(let O=y;O<=I;O++){const A=this.model.getLineTokens(O),B=A.getLineContent(),F=O===y?L-1:0,D=O===I?k-1:B.length;B===""?T+="
    ":T+=g.tokenizeLineToHTML(B,A.inflate(),v,F,D,E,i.isWindows)}return T}_getColorMap(){let f=d.TokenizationRegistry.getColorMap(),v=["#000000"];if(f)for(let y=1,L=f.length;ythis._cursor.setStates(L,f,v,y))}getCursorColumnSelectData(){return this._cursor.getCursorColumnSelectData()}setCursorColumnSelectData(f){this._cursor.setCursorColumnSelectData(f)}getPrevEditOperationType(){return this._cursor.getPrevEditOperationType()}setPrevEditOperationType(f){this._cursor.setPrevEditOperationType(f)}getSelection(){return this._cursor.getSelection()}getSelections(){return this._cursor.getSelections()}getPosition(){return this._cursor.getPrimaryCursorState().modelState.position}setSelections(f,v,y=0){this._withViewEventsCollector(L=>this._cursor.setSelections(L,f,v,y))}saveCursorState(){return this._cursor.saveState()}restoreCursorState(f){this._withViewEventsCollector(v=>this._cursor.restoreState(v,f))}_executeCursorEdit(f){if(this._cursor.context.cursorConfig.readOnly){this._eventDispatcher.emitOutgoingEvent(new l.ReadOnlyEditAttemptEvent);return}this._withViewEventsCollector(f)}executeEdits(f,v,y){this._executeCursorEdit(L=>this._cursor.executeEdits(L,f,v,y))}startComposition(){this._cursor.setIsDoingComposition(!0),this._executeCursorEdit(f=>this._cursor.startComposition(f))}endComposition(f){this._cursor.setIsDoingComposition(!1),this._executeCursorEdit(v=>this._cursor.endComposition(v,f))}type(f,v){this._executeCursorEdit(y=>this._cursor.type(y,f,v))}compositionType(f,v,y,L,I){this._executeCursorEdit(k=>this._cursor.compositionType(k,f,v,y,L,I))}paste(f,v,y,L){this._executeCursorEdit(I=>this._cursor.paste(I,f,v,y,L))}cut(f){this._executeCursorEdit(v=>this._cursor.cut(v,f))}executeCommand(f,v){this._executeCursorEdit(y=>this._cursor.executeCommand(y,f,v))}executeCommands(f,v){this._executeCursorEdit(y=>this._cursor.executeCommands(y,f,v))}revealPrimaryCursor(f,v){this._withViewEventsCollector(y=>this._cursor.revealPrimary(y,f,v,0))}revealTopMostCursor(f){const v=this._cursor.getTopMostViewPosition(),y=new C.Range(v.lineNumber,v.column,v.lineNumber,v.column);this._withViewEventsCollector(L=>L.emitViewEvent(new c.ViewRevealRangeRequestEvent(f,y,null,0,!0,0)))}revealBottomMostCursor(f){const v=this._cursor.getBottomMostViewPosition(),y=new C.Range(v.lineNumber,v.column,v.lineNumber,v.column);this._withViewEventsCollector(L=>L.emitViewEvent(new c.ViewRevealRangeRequestEvent(f,y,null,0,!0,0)))}revealRange(f,v,y,L,I){this._withViewEventsCollector(k=>k.emitViewEvent(new c.ViewRevealRangeRequestEvent(f,y,null,L,v,I)))}getVerticalOffsetForLineNumber(f){return this.viewLayout.getVerticalOffsetForLineNumber(f)}getScrollTop(){return this.viewLayout.getCurrentScrollTop()}setScrollTop(f,v){this.viewLayout.setScrollPosition({scrollTop:f},v)}setScrollPosition(f,v){this.viewLayout.setScrollPosition(f,v)}deltaScrollNow(f,v){this.viewLayout.deltaScrollNow(f,v)}changeWhitespace(f){this.viewLayout.changeWhitespace(f)&&(this._eventDispatcher.emitSingleViewEvent(new c.ViewZonesChangedEvent),this._eventDispatcher.emitOutgoingEvent(new l.ViewZonesChangedEvent))}setMaxLineWidth(f){this.viewLayout.setMaxLineWidth(f)}_withViewEventsCollector(f){try{const v=this._eventDispatcher.beginEmitViewEvents();f(v)}finally{this._eventDispatcher.endEmitViewEvents()}}}e.ViewModel=m}),define(Q[245],J([0,1,19,23,12,51,3,18,54,134]),function(q,e,b,N,M,w,S,C,d,g){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.OutlineModel=e.OutlineGroup=e.OutlineElement=e.TreeElement=void 0;class p{remove(){this.parent&&this.parent.children.delete(this.id)}static findId(u,r){let i;typeof u=="string"?i=`${r.id}/${u}`:(i=`${r.id}/${u.name}`,r.children.get(i)!==void 0&&(i=`${r.id}/${u.name}_${u.range.startLineNumber}_${u.range.startColumn}`));let n=i;for(let t=0;r.children.get(n)!==void 0;t++)n=`${i}_${t}`;return n}static empty(u){return u.children.size===0}}e.TreeElement=p;class c extends p{constructor(u,r,i){super();this.id=u,this.parent=r,this.symbol=i,this.children=new Map}}e.OutlineElement=c;class o extends p{constructor(u,r,i,n){super();this.id=u,this.parent=r,this.label=i,this.order=n,this.children=new Map}}e.OutlineGroup=o;class s extends p{constructor(u){super();this.uri=u,this.id="root",this.parent=void 0,this._groups=new Map,this.children=new Map,this.id="root",this.parent=void 0}static create(u,r){let i=this._keys.for(u,!0),n=s._requests.get(i);if(!n){let t=new N.CancellationTokenSource;n={promiseCnt:0,source:t,promise:s._create(u,t.token),model:void 0},s._requests.set(i,n);const l=Date.now();n.promise.then(()=>{this._requestDurations.update(u,Date.now()-l)})}return n.model?Promise.resolve(n.model):(n.promiseCnt+=1,r.onCancellationRequested(()=>{--n.promiseCnt==0&&(n.source.cancel(),s._requests.delete(i))}),new Promise((t,l)=>{n.promise.then(h=>{n.model=h,t(h)},h=>{s._requests.delete(i),l(h)})}))}static _create(u,r){const i=new N.CancellationTokenSource(r),n=new s(u.uri),t=C.DocumentSymbolProviderRegistry.ordered(u),l=t.map((m,_)=>{var f;let v=p.findId(`provider_${_}`,n),y=new o(v,n,(f=m.displayName)!==null&&f!==void 0?f:"Unknown Outline Provider",_);return Promise.resolve(m.provideDocumentSymbols(u,i.token)).then(L=>{for(const I of L||[])s._makeOutlineElement(I,y);return y},L=>(M.onUnexpectedExternalError(L),y)).then(L=>{p.empty(L)?L.remove():n._groups.set(v,L)})}),h=C.DocumentSymbolProviderRegistry.onDidChange(()=>{const m=C.DocumentSymbolProviderRegistry.ordered(u);b.equals(m,t)||i.cancel()});return Promise.all(l).then(()=>i.token.isCancellationRequested&&!r.isCancellationRequested?s._create(u,r):n._compact()).finally(()=>{h.dispose()})}static _makeOutlineElement(u,r){let i=p.findId(u,r),n=new c(i,r,u);if(u.children)for(const t of u.children)s._makeOutlineElement(t,n);r.children.set(n.id,n)}_compact(){let u=0;for(const[r,i]of this._groups)i.children.size===0?this._groups.delete(r):u+=1;if(u!==1)this.children=this._groups;else{let r=d.Iterable.first(this._groups.values());for(let[,i]of r.children)i.parent=this,this.children.set(i.id,i)}return this}getTopLevelSymbols(){const u=[];for(const r of this.children.values())r instanceof c?u.push(r.symbol):u.push(...d.Iterable.map(r.children.values(),i=>i.symbol));return u.sort((r,i)=>S.Range.compareRangesUsingStarts(r.range,i.range))}asListOfDocumentSymbols(){const u=this.getTopLevelSymbols(),r=[];return s._flattenDocumentSymbols(r,u,""),r.sort((i,n)=>S.Range.compareRangesUsingStarts(i.range,n.range))}static _flattenDocumentSymbols(u,r,i){for(const n of r)u.push({kind:n.kind,tags:n.tags,name:n.name,detail:n.detail,containerName:n.containerName||i,range:n.range,selectionRange:n.selectionRange,children:void 0}),n.children&&s._flattenDocumentSymbols(u,n.children,n.name)}}e.OutlineModel=s,s._requestDurations=new g.LanguageFeatureRequestDelays(C.DocumentSymbolProviderRegistry,350),s._requests=new w.LRUCache(9,.75),s._keys=new class{constructor(){this._counter=1,this._data=new WeakMap}for(a,u){return`${a.id}/${u?a.getVersionId():""}/${this._hash(C.DocumentSymbolProviderRegistry.all(a))}`}_hash(a){let u="";for(const r of a){let i=this._data.get(r);typeof i=="undefined"&&(i=this._counter++,this._data.set(r,i)),u+=i}return u}}}),define(Q[541],J([0,1,174,31,41]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.computeRanges=e.RangesCollector=e.IndentRangeProvider=e.ID_INDENT_PROVIDER=void 0;const w=5e3;e.ID_INDENT_PROVIDER="indent";class S{constructor(p){this.editorModel=p,this.id=e.ID_INDENT_PROVIDER}dispose(){}compute(p){let c=M.LanguageConfigurationRegistry.getFoldingRules(this.editorModel.getLanguageIdentifier().id),o=c&&!!c.offSide,s=c&&c.markers;return Promise.resolve(d(this.editorModel,o,s))}}e.IndentRangeProvider=S;class C{constructor(p){this._startIndexes=[],this._endIndexes=[],this._indentOccurrences=[],this._length=0,this._foldingRangesLimit=p}insertFirst(p,c,o){if(!(p>b.MAX_LINE_NUMBER||c>b.MAX_LINE_NUMBER)){let s=this._length;this._startIndexes[s]=p,this._endIndexes[s]=c,this._length++,o<1e3&&(this._indentOccurrences[o]=(this._indentOccurrences[o]||0)+1)}}toIndentRanges(p){if(this._length<=this._foldingRangesLimit){let c=new Uint32Array(this._length),o=new Uint32Array(this._length);for(let s=this._length-1,a=0;s>=0;s--,a++)c[a]=this._startIndexes[s],o[a]=this._endIndexes[s];return new b.FoldingRegions(c,o)}else{let c=0,o=this._indentOccurrences.length;for(let r=0;rthis._foldingRangesLimit){o=r;break}c+=i}}const s=p.getOptions().tabSize;let a=new Uint32Array(this._foldingRangesLimit),u=new Uint32Array(this._foldingRangesLimit);for(let r=this._length-1,i=0;r>=0;r--){let n=this._startIndexes[r],t=p.getLineContent(n),l=N.TextModel.computeIndentLevel(t,s);(l0;n--){let t=g.getLineContent(n),l=N.TextModel.computeIndentLevel(t,s),h=r[r.length-1];if(l===-1){p&&(h.endAbove=n);continue}let m;if(u&&(m=t.match(u)))if(m[1]){let _=r.length-1;for(;_>0&&r[_].indent!==-2;)_--;if(_>0){r.length=_+1,h=r[_],a.insertFirst(n,h.line,l),h.line=n,h.indent=l,h.endAbove=n;continue}}else{r.push({indent:-2,endAbove:n,line:n});continue}if(h.indent>l){do r.pop(),h=r[r.length-1];while(h.indent>l);let _=h.endAbove-1;_-n>=1&&a.insertFirst(n,_,l)}h.indent===l?h.endAbove=n:r.push({indent:l,endAbove:n,line:n})}return a.toIndentRanges(g)}e.computeRanges=d}),define(Q[542],J([0,1,8,179,3,21,109,41,229]),function(q,e,b,N,M,w,S,C,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MoveLinesCommand=void 0;class g{constructor(c,o,s){this._selection=c,this._isMovingDown=o,this._autoIndent=s,this._selectionId=null,this._moveEndLineSelectionShrink=!1}getEditOperations(c,o){let s=c.getLineCount();if(this._isMovingDown&&this._selection.endLineNumber===s){this._selectionId=o.trackSelection(this._selection);return}if(!this._isMovingDown&&this._selection.startLineNumber===1){this._selectionId=o.trackSelection(this._selection);return}this._moveEndPositionDown=!1;let a=this._selection;a.startLineNumberc.getLineTokens(l),getLanguageIdentifier:()=>c.getLanguageIdentifier(),getLanguageIdAtPosition:(l,h)=>c.getLanguageIdAtPosition(l,h),getLineContent:null};if(a.startLineNumber===a.endLineNumber&&c.getLineMaxColumn(a.startLineNumber)===1){let l=a.startLineNumber,h=this._isMovingDown?l+1:l-1;c.getLineMaxColumn(h)===1?o.addEditOperation(new M.Range(1,1,1,1),null):(o.addEditOperation(new M.Range(l,1,l,1),c.getLineContent(h)),o.addEditOperation(new M.Range(h,1,h,c.getLineMaxColumn(h)),null)),a=new w.Selection(h,1,h,1)}else{let l,h;if(this._isMovingDown){l=a.endLineNumber+1,h=c.getLineContent(l),o.addEditOperation(new M.Range(l-1,c.getLineMaxColumn(l-1),l,c.getLineMaxColumn(l)),null);let m=h;if(this.shouldAutoIndent(c,a)){let _=this.matchEnterRule(c,n,u,l,a.startLineNumber-1);if(_!==null){let v=b.getLeadingWhitespace(c.getLineContent(l)),y=_+d.getSpaceCnt(v,u);m=d.generateIndent(y,u,i)+this.trimLeft(h)}else{t.getLineContent=y=>y===a.startLineNumber?c.getLineContent(l):c.getLineContent(y);let v=C.LanguageConfigurationRegistry.getGoodIndentForLine(this._autoIndent,t,c.getLanguageIdAtPosition(l,1),a.startLineNumber,n);if(v!==null){let y=b.getLeadingWhitespace(c.getLineContent(l)),L=d.getSpaceCnt(v,u),I=d.getSpaceCnt(y,u);L!==I&&(m=d.generateIndent(L,u,i)+this.trimLeft(h))}}o.addEditOperation(new M.Range(a.startLineNumber,1,a.startLineNumber,1),m+` +`);let f=this.matchEnterRuleMovingDown(c,n,u,a.startLineNumber,l,m);if(f!==null)f!==0&&this.getIndentEditsOfMovingBlock(c,o,a,u,i,f);else{t.getLineContent=y=>y===a.startLineNumber?m:y>=a.startLineNumber+1&&y<=a.endLineNumber+1?c.getLineContent(y-1):c.getLineContent(y);let v=C.LanguageConfigurationRegistry.getGoodIndentForLine(this._autoIndent,t,c.getLanguageIdAtPosition(l,1),a.startLineNumber+1,n);if(v!==null){const y=b.getLeadingWhitespace(c.getLineContent(a.startLineNumber)),L=d.getSpaceCnt(v,u),I=d.getSpaceCnt(y,u);if(L!==I){const k=L-I;this.getIndentEditsOfMovingBlock(c,o,a,u,i,k)}}}}else o.addEditOperation(new M.Range(a.startLineNumber,1,a.startLineNumber,1),m+` +`)}else if(l=a.startLineNumber-1,h=c.getLineContent(l),o.addEditOperation(new M.Range(l,1,l+1,1),null),o.addEditOperation(new M.Range(a.endLineNumber,c.getLineMaxColumn(a.endLineNumber),a.endLineNumber,c.getLineMaxColumn(a.endLineNumber)),` +`+h),this.shouldAutoIndent(c,a)){t.getLineContent=_=>_===l?c.getLineContent(a.startLineNumber):c.getLineContent(_);let m=this.matchEnterRule(c,n,u,a.startLineNumber,a.startLineNumber-2);if(m!==null)m!==0&&this.getIndentEditsOfMovingBlock(c,o,a,u,i,m);else{let _=C.LanguageConfigurationRegistry.getGoodIndentForLine(this._autoIndent,t,c.getLanguageIdAtPosition(a.startLineNumber,1),l,n);if(_!==null){let f=b.getLeadingWhitespace(c.getLineContent(a.startLineNumber)),v=d.getSpaceCnt(_,u),y=d.getSpaceCnt(f,u);if(v!==y){let L=v-y;this.getIndentEditsOfMovingBlock(c,o,a,u,i,L)}}}}}this._selectionId=o.trackSelection(a)}buildIndentConverter(c,o,s){return{shiftIndent:a=>N.ShiftCommand.shiftIndent(a,a.length+1,c,o,s),unshiftIndent:a=>N.ShiftCommand.unshiftIndent(a,a.length+1,c,o,s)}}parseEnterResult(c,o,s,a,u){if(u){let r=u.indentation;u.indentAction===S.IndentAction.None||u.indentAction===S.IndentAction.Indent?r=u.indentation+u.appendText:u.indentAction===S.IndentAction.IndentOutdent?r=u.indentation:u.indentAction===S.IndentAction.Outdent&&(r=o.unshiftIndent(u.indentation)+u.appendText);let i=c.getLineContent(a);if(this.trimLeft(i).indexOf(this.trimLeft(r))>=0){let n=b.getLeadingWhitespace(c.getLineContent(a)),t=b.getLeadingWhitespace(r),l=C.LanguageConfigurationRegistry.getIndentMetadata(c,a);l!==null&&l&2&&(t=o.unshiftIndent(t));let h=d.getSpaceCnt(t,s),m=d.getSpaceCnt(n,s);return h-m}}return null}matchEnterRuleMovingDown(c,o,s,a,u,r){if(b.lastNonWhitespaceIndex(r)>=0){let i=c.getLineMaxColumn(u),n=C.LanguageConfigurationRegistry.getEnterAction(this._autoIndent,c,new M.Range(u,i,u,i));return this.parseEnterResult(c,o,s,a,n)}else{let i=a-1;for(;i>=1;){let l=c.getLineContent(i);if(b.lastNonWhitespaceIndex(l)>=0)break;i--}if(i<1||a>c.getLineCount())return null;let n=c.getLineMaxColumn(i),t=C.LanguageConfigurationRegistry.getEnterAction(this._autoIndent,c,new M.Range(i,n,i,n));return this.parseEnterResult(c,o,s,a,t)}}matchEnterRule(c,o,s,a,u,r){let i=u;for(;i>=1;){let l;if(i===u&&r!==void 0?l=r:l=c.getLineContent(i),b.lastNonWhitespaceIndex(l)>=0)break;i--}if(i<1||a>c.getLineCount())return null;let n=c.getLineMaxColumn(i),t=C.LanguageConfigurationRegistry.getEnterAction(this._autoIndent,c,new M.Range(i,n,i,n));return this.parseEnterResult(c,o,s,a,t)}trimLeft(c){return c.replace(/^\s+/,"")}shouldAutoIndent(c,o){if(this._autoIndent<4||!c.isCheapToTokenize(o.startLineNumber))return!1;let s=c.getLanguageIdAtPosition(o.startLineNumber,1),a=c.getLanguageIdAtPosition(o.endLineNumber,1);return!(s!==a||C.LanguageConfigurationRegistry.getIndentRulesSupport(s)===null)}getIndentEditsOfMovingBlock(c,o,s,a,u,r){for(let i=s.startLineNumber;i<=s.endLineNumber;i++){let n=c.getLineContent(i),t=b.getLeadingWhitespace(n),h=d.getSpaceCnt(t,a)+r,m=d.generateIndent(h,a,u);m!==t&&(o.addEditOperation(new M.Range(i,1,i,t.length+1),m),i===s.endLineNumber&&s.endColumn<=t.length+1&&m===""&&(this._moveEndLineSelectionShrink=!0))}}computeCursorState(c,o){let s=o.getTrackedSelection(this._selectionId);return this._moveEndPositionDown&&(s=s.setEndPosition(s.endLineNumber+1,1)),this._moveEndLineSelectionShrink&&s.startLineNumber{const h=this._getWidth(l);this.domNode.style.width=h+"px",this.domNode.style.left=this._getLeft(l)+"px",this._onWidth(h)}))}dispose(){this._overlayWidget&&(this.editor.removeOverlayWidget(this._overlayWidget),this._overlayWidget=null),this._viewZone&&this.editor.changeViewZones(n=>{this._viewZone&&n.removeZone(this._viewZone.id),this._viewZone=null}),this.editor.deltaDecorations(this._positionMarkerId,[]),this._positionMarkerId=[],this._disposables.dispose()}create(){this.domNode.classList.add("zone-widget"),this.options.className&&this.domNode.classList.add(this.options.className),this.container=document.createElement("div"),this.container.classList.add("zone-widget-container"),this.domNode.appendChild(this.container),this.options.showArrow&&(this._arrow=new u(this.editor),this._disposables.add(this._arrow)),this._fillContainer(this.container),this._initSash(),this._applyStyles()}style(n){n.frameColor&&(this.options.frameColor=n.frameColor),n.arrowColor&&(this.options.arrowColor=n.arrowColor),this._applyStyles()}_applyStyles(){if(this.container&&this.options.frameColor){let n=this.options.frameColor.toString();this.container.style.borderTopColor=n,this.container.style.borderBottomColor=n}if(this._arrow&&this.options.arrowColor){let n=this.options.arrowColor.toString();this._arrow.color=n}}_getWidth(n){return n.width-n.minimap.minimapWidth-n.verticalScrollbarWidth}_getLeft(n){return n.minimap.minimapWidth>0&&n.minimap.minimapLeft===0?n.minimap.minimapWidth:0}_onViewZoneTop(n){this.domNode.style.top=n+"px"}_onViewZoneHeight(n){if(this.domNode.style.height=`${n}px`,this.container){let t=n-this._decoratingElementsHeight();this.container.style.height=`${t}px`;const l=this.editor.getLayoutInfo();this._doLayout(t,this._getWidth(l))}this._resizeSash&&this._resizeSash.layout()}get position(){const[n]=this._positionMarkerId;if(!!n){const t=this.editor.getModel();if(!!t){const l=t.getDecorationRange(n);if(!!l)return l.getStartPosition()}}}show(n,t){const l=d.Range.isIRange(n)?d.Range.lift(n):d.Range.fromPositions(n);this._isShowing=!0,this._showImpl(l,t),this._isShowing=!1,this._positionMarkerId=this.editor.deltaDecorations(this._positionMarkerId,[{range:l,options:g.ModelDecorationOptions.EMPTY}])}hide(){this._viewZone&&(this.editor.changeViewZones(n=>{this._viewZone&&n.removeZone(this._viewZone.id)}),this._viewZone=null),this._overlayWidget&&(this.editor.removeOverlayWidget(this._overlayWidget),this._overlayWidget=null),this._arrow&&this._arrow.hide()}_decoratingElementsHeight(){let n=this.editor.getOption(53),t=0;if(this.options.showArrow){let l=Math.round(n/3);t+=2*l}if(this.options.showFrame){let l=Math.round(n/9);t+=2*l}return t}_showImpl(n,t){const l=n.getStartPosition(),h=this.editor.getLayoutInfo(),m=this._getWidth(h);this.domNode.style.width=`${m}px`,this.domNode.style.left=this._getLeft(h)+"px";const _=document.createElement("div");_.style.overflow="hidden";const f=this.editor.getOption(53),v=Math.max(12,this.editor.getLayoutInfo().height/f*.8);t=Math.min(t,v);let y=0,L=0;if(this._arrow&&this.options.showArrow&&(y=Math.round(f/3),this._arrow.height=y,this._arrow.show(l)),this.options.showFrame&&(L=Math.round(f/9)),this.editor.changeViewZones(E=>{this._viewZone&&E.removeZone(this._viewZone.id),this._overlayWidget&&(this.editor.removeOverlayWidget(this._overlayWidget),this._overlayWidget=null),this.domNode.style.top="-1000px",this._viewZone=new s(_,l.lineNumber,l.column,t,T=>this._onViewZoneTop(T),T=>this._onViewZoneHeight(T)),this._viewZone.id=E.addZone(this._viewZone),this._overlayWidget=new a(o+this._viewZone.id,this.domNode),this.editor.addOverlayWidget(this._overlayWidget)}),this.container&&this.options.showFrame){const E=this.options.frameWidth?this.options.frameWidth:L;this.container.style.borderTopWidth=E+"px",this.container.style.borderBottomWidth=E+"px"}let I=t*f-this._decoratingElementsHeight();this.container&&(this.container.style.top=y+"px",this.container.style.height=I+"px",this.container.style.overflow="hidden"),this._doLayout(I,m),this.options.keepEditorSelection||this.editor.setSelection(n);const k=this.editor.getModel();if(k){const E=n.endLineNumber+1;E<=k.getLineCount()?this.revealLine(E,!1):this.revealLine(k.getLineCount(),!0)}}revealLine(n,t){t?this.editor.revealLineInCenter(n,0):this.editor.revealLine(n,0)}setCssClass(n,t){!this.container||(t&&this.container.classList.remove(t),this.container.classList.add(n))}_onWidth(n){}_doLayout(n,t){}_relayout(n){this._viewZone&&this._viewZone.heightInLines!==n&&this.editor.changeViewZones(t=>{this._viewZone&&(this._viewZone.heightInLines=n,t.layoutZone(this._viewZone.id))})}_initSash(){if(!this._resizeSash){this._resizeSash=this._disposables.add(new N.Sash(this.domNode,this,{orientation:1})),this.options.isResizeable||(this._resizeSash.hide(),this._resizeSash.state=0);let n;this._disposables.add(this._resizeSash.onDidStart(t=>{this._viewZone&&(n={startY:t.startY,heightInLines:this._viewZone.heightInLines})})),this._disposables.add(this._resizeSash.onDidEnd(()=>{n=void 0})),this._disposables.add(this._resizeSash.onDidChange(t=>{if(n){let l=(t.currentY-n.startY)/this.editor.getOption(53),h=l<0?Math.ceil(l):Math.floor(l),m=n.heightInLines+h;m>5&&m<35&&this._relayout(m)}}))}}getHorizontalSashLeft(){return 0}getHorizontalSashTop(){return(this.domNode.style.height===null?0:parseInt(this.domNode.style.height))-this._decoratingElementsHeight()/2}getHorizontalSashWidth(){const n=this.editor.getLayoutInfo();return n.width-n.minimap.minimapWidth}}e.ZoneWidget=r}),define(Q[246],J([0,1,127,18,76,232]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.createTokenizationSupport=e.MonarchTokenizer=void 0;const S=5;class C{constructor(n){this._maxCacheDepth=n,this._entries=Object.create(null)}static create(n,t){return this._INSTANCE.create(n,t)}create(n,t){if(n!==null&&n.depth>=this._maxCacheDepth)return new d(n,t);let l=d.getStackElementId(n);l.length>0&&(l+="|"),l+=t;let h=this._entries[l];return h||(h=new d(n,t),this._entries[l]=h,h)}}C._INSTANCE=new C(S);class d{constructor(n,t){this.parent=n,this.state=t,this.depth=(this.parent?this.parent.depth:0)+1}static getStackElementId(n){let t="";for(;n!==null;)t.length>0&&(t+="|"),t+=n.state,n=n.parent;return t}static _equals(n,t){for(;n!==null&&t!==null;){if(n===t)return!0;if(n.state!==t.state)return!1;n=n.parent,t=t.parent}return n===null&&t===null}equals(n){return d._equals(this,n)}push(n){return C.create(this,n)}pop(){return this.parent}popall(){let n=this;for(;n.parent;)n=n.parent;return n}switchTo(n){return C.create(this.parent,n)}}class g{constructor(n,t){this.modeId=n,this.state=t}equals(n){return this.modeId===n.modeId&&this.state.equals(n.state)}clone(){return this.state.clone()===this.state?this:new g(this.modeId,this.state)}}class p{constructor(n){this._maxCacheDepth=n,this._entries=Object.create(null)}static create(n,t){return this._INSTANCE.create(n,t)}create(n,t){if(t!==null)return new c(n,t);if(n!==null&&n.depth>=this._maxCacheDepth)return new c(n,t);let l=d.getStackElementId(n),h=this._entries[l];return h||(h=new c(n,null),this._entries[l]=h,h)}}p._INSTANCE=new p(S);class c{constructor(n,t){this.stack=n,this.embeddedModeData=t}clone(){return(this.embeddedModeData?this.embeddedModeData.clone():null)===this.embeddedModeData?this:p.create(this.stack,this.embeddedModeData)}equals(n){return!(n instanceof c)||!this.stack.equals(n.stack)?!1:this.embeddedModeData===null&&n.embeddedModeData===null?!0:this.embeddedModeData===null||n.embeddedModeData===null?!1:this.embeddedModeData.equals(n.embeddedModeData)}}class o{constructor(){this._tokens=[],this._language=null,this._lastTokenType=null,this._lastTokenLanguage=null}enterMode(n,t){this._language=t}emit(n,t){this._lastTokenType===t&&this._lastTokenLanguage===this._language||(this._lastTokenType=t,this._lastTokenLanguage=this._language,this._tokens.push(new b.Token(n,t,this._language)))}nestedModeTokenize(n,t,l,h){const m=l.modeId,_=l.state,f=N.TokenizationRegistry.get(m);if(!f)return this.enterMode(h,m),this.emit(h,""),_;let v=f.tokenize(n,t,_,h);return this._tokens=this._tokens.concat(v.tokens),this._lastTokenType=null,this._lastTokenLanguage=null,this._language=null,v.endState}finalize(n){return new b.TokenizationResult(this._tokens,n)}}class s{constructor(n,t){this._modeService=n,this._theme=t,this._prependTokens=null,this._tokens=[],this._currentLanguageId=0,this._lastTokenMetadata=0}enterMode(n,t){this._currentLanguageId=this._modeService.getLanguageIdentifier(t).id}emit(n,t){let l=this._theme.match(this._currentLanguageId,t);this._lastTokenMetadata!==l&&(this._lastTokenMetadata=l,this._tokens.push(n),this._tokens.push(l))}static _merge(n,t,l){let h=n!==null?n.length:0,m=t.length,_=l!==null?l.length:0;if(h===0&&m===0&&_===0)return new Uint32Array(0);if(h===0&&m===0)return l;if(m===0&&_===0)return n;let f=new Uint32Array(h+m+_);n!==null&&f.set(n);for(let v=0;v{if(!m){let f=!1;for(let v=0,y=_.changedLanguages.length;v{})}}getInitialState(){let n=C.create(null,this._lexer.start);return p.create(n,null)}tokenize(n,t,l,h){let m=new o,_=this._tokenize(n,t,l,h,m);return m.finalize(_)}tokenize2(n,t,l,h){let m=new s(this._modeService,this._standaloneThemeService.getColorTheme().tokenTheme),_=this._tokenize(n,t,l,h,m);return m.finalize(_)}_tokenize(n,t,l,h,m){return l.embeddedModeData?this._nestedTokenize(n,t,l,h,m):this._myTokenize(n,t,l,h,m)}_findLeavingNestedModeOffset(n,t){let l=this._lexer.tokenizer[t.stack.state];if(!l&&(l=w.findRules(this._lexer,t.stack.state),!l))throw w.createError(this._lexer,"tokenizer state is not defined: "+t.stack.state);let h=-1,m=!1;for(const _ of l)if(!(!w.isIAction(_.action)||_.action.nextEmbedded!=="@pop")){m=!0;let f=_.regex,v=_.regex.source;if(v.substr(0,4)==="^(?:"&&v.substr(v.length-1,1)===")"){let L=(f.ignoreCase?"i":"")+(f.unicode?"u":"");f=new RegExp(v.substr(4,v.length-5),L)}let y=n.search(f);y===-1||y!==0&&_.matchOnlyAtLineStart||(h===-1||y0&&m.nestedModeTokenize(f,!1,l.embeddedModeData,h);let v=n.substring(_);return this._myTokenize(v,t,l,h+_,m)}_safeRuleName(n){return n?n.name:"(unknown)"}_myTokenize(n,t,l,h,m){m.enterMode(h,this._modeId);const _=n.length,f=t&&this._lexer.includeLF?n+` +`:n,v=f.length;let y=l.embeddedModeData,L=l.stack,I=0,k=null,E=!0;for(;E||I=v)break;E=!1;let ee=this._lexer.tokenizer[B];if(!ee&&(ee=w.findRules(this._lexer,B),!ee))throw w.createError(this._lexer,"tokenizer state is not defined: "+B);let se=f.substr(I);for(const ne of ee)if((I===0||!ne.matchOnlyAtLineStart)&&(F=se.match(ne.regex),F)){D=F[0],R=ne.action;break}}if(F||(F=[""],D=""),R||(I=this._lexer.maxStack)throw w.createError(this._lexer,"maximum tokenizer stack size reached: ["+L.state+","+L.parent.state+",...]");L=L.push(B)}else if(R.next==="@pop"){if(L.depth<=1)throw w.createError(this._lexer,"trying to pop an empty stack in rule: "+this._safeRuleName(W));L=L.pop()}else if(R.next==="@popall")L=L.popall();else{let ee=w.substituteMatches(this._lexer,R.next,D,F,B);if(ee[0]==="@"&&(ee=ee.substr(1)),w.findRules(this._lexer,ee))L=L.push(ee);else throw w.createError(this._lexer,"trying to set a next state '"+ee+"' that is undefined in rule: "+this._safeRuleName(W))}}R.log&&typeof R.log=="string"&&w.log(this._lexer,this._lexer.languageId+": "+w.substituteMatches(this._lexer,R.log,D,F,B))}if(K===null)throw w.createError(this._lexer,"lexer rule has no well-defined action in rule: "+this._safeRuleName(W));const Y=ee=>{let se=this._modeService.getModeIdForLanguageName(ee);se&&(ee=se);const ne=this._getNestedEmbeddedModeData(ee);if(I0)throw w.createError(this._lexer,"groups cannot be nested: "+this._safeRuleName(W));if(F.length!==K.length+1)throw w.createError(this._lexer,"matched number of groups does not match the number of actions in rule: "+this._safeRuleName(W));let ee=0;for(let se=1;seu});class c{static colorizeElement(r,i,n,t){t=t||{};let l=t.theme||"vs",h=t.mimeType||n.getAttribute("lang")||n.getAttribute("data-lang");if(!h)return console.error("Mode not detected"),Promise.resolve();r.setTheme(l);let m=n.firstChild?n.firstChild.nodeValue:"";n.className+=" "+l;let _=f=>{var v;const y=(v=p==null?void 0:p.createHTML(f))!==null&&v!==void 0?v:f;n.innerHTML=y};return this.colorize(i,m||"",h,t).then(_,f=>console.error(f))}static colorize(r,i,n,t){let l=4;t&&typeof t.tabSize=="number"&&(l=t.tabSize),N.startsWithUTF8BOM(i)&&(i=i.substr(1));let h=N.splitLines(i),m=r.getModeId(n);if(!m)return Promise.resolve(s(h,l));r.triggerMode(m);const _=w.TokenizationRegistry.get(m);if(_)return o(h,l,_);const f=w.TokenizationRegistry.getPromise(m);return f?new Promise((v,y)=>{f.then(L=>{o(h,l,L).then(v,y)},y)}):new Promise((v,y)=>{let L=null,I=null;const k=()=>{L&&(L.dispose(),L=null),I&&(I.dispose(),I=null);const E=w.TokenizationRegistry.get(m);if(E){o(h,l,E).then(v,y);return}v(s(h,l))};I=new b.TimeoutTimer,I.cancelAndSet(k,500),L=w.TokenizationRegistry.onDidChange(E=>{E.changedLanguages.indexOf(m)>=0&&k()})})}static colorizeLine(r,i,n,t,l=4){const h=C.ViewLineRenderingData.isBasicASCII(r,i),m=C.ViewLineRenderingData.containsRTL(r,h,n);return S.renderViewLine2(new S.RenderLineInput(!1,!0,r,!1,h,m,0,t,[],l,0,0,0,0,-1,"none",!1,!1,null)).html}static colorizeModelLine(r,i,n=4){let t=r.getLineContent(i);r.forceTokenization(i);let h=r.getLineTokens(i).inflate();return this.colorizeLine(t,r.mightContainNonBasicASCII(),r.mightContainRTL(),h,n)}}e.Colorizer=c;function o(u,r,i){return new Promise((n,t)=>{const l=()=>{const h=a(u,r,i);if(i instanceof d.MonarchTokenizer){const m=i.getLoadStatus();if(m.loaded===!1){m.promise.then(l,t);return}}n(h)};l()})}function s(u,r){let i=[];const n=(0<<11|1<<14|2<<23)>>>0,t=new Uint32Array(2);t[0]=0,t[1]=n;for(let l=0,h=u.length;l")}return i.join("")}function a(u,r,i){let n=[],t=i.getInitialState();for(let l=0,h=u.length;l"),t=_.endState}return n.join("")}}),define(Q[114],J([0,1,9]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IStandaloneThemeService=void 0,e.IStandaloneThemeService=b.createDecorator("themeService")}),define(Q[84],J([0,1,9]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IClipboardService=void 0,e.IClipboardService=b.createDecorator("clipboardService")}),define(Q[26],J([0,1,2,20,9,6,71,54]),function(q,e,b,N,M,w,S,C){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CommandsRegistry=e.ICommandService=void 0,e.ICommandService=M.createDecorator("commandService"),e.CommandsRegistry=new class{constructor(){this._commands=new Map,this._onDidRegisterCommand=new w.Emitter,this.onDidRegisterCommand=this._onDidRegisterCommand.event}registerCommand(d,g){if(!d)throw new Error("invalid command");if(typeof d=="string"){if(!g)throw new Error("invalid command");return this.registerCommand({id:d,handler:g})}if(d.description){const a=[];for(let r of d.description.args)a.push(r.constraint);const u=d.handler;d.handler=function(r,...i){return N.validateConstraints(i,a),u(r,...i)}}const{id:p}=d;let c=this._commands.get(p);c||(c=new S.LinkedList,this._commands.set(p,c));let o=c.unshift(d),s=b.toDisposable(()=>{o();const a=this._commands.get(p);(a==null?void 0:a.isEmpty())&&this._commands.delete(p)});return this._onDidRegisterCommand.fire(p),s}registerCommandAlias(d,g){return e.CommandsRegistry.registerCommand(d,(p,...c)=>p.get(e.ICommandService).executeCommand(g,...c))}getCommand(d){const g=this._commands.get(d);if(!(!g||g.isEmpty()))return C.Iterable.first(g)}getCommands(){const d=new Map;for(const g of this._commands.keys()){const p=this.getCommand(g);p&&d.set(g,p)}return d}}}),define(Q[247],J([0,1,23,12,24,18,36,26,20,383,3]),function(q,e,b,N,M,w,S,C,d,g,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getDocumentRangeSemanticTokensProvider=e.getDocumentSemanticTokens=e.isSemanticTokensEdits=e.isSemanticTokens=void 0;function c(r){return r&&!!r.data}e.isSemanticTokens=c;function o(r){return r&&Array.isArray(r.edits)}e.isSemanticTokensEdits=o;function s(r,i,n){const t=a(r);return t?{provider:t,request:Promise.resolve(t.provideDocumentSemanticTokens(r,i,n))}:null}e.getDocumentSemanticTokens=s;function a(r){const i=w.DocumentSemanticTokensProviderRegistry.ordered(r);return i.length>0?i[0]:null}function u(r){const i=w.DocumentRangeSemanticTokensProviderRegistry.ordered(r);return i.length>0?i[0]:null}e.getDocumentRangeSemanticTokensProvider=u,C.CommandsRegistry.registerCommand("_provideDocumentSemanticTokensLegend",(r,...i)=>Ie(void 0,void 0,void 0,function*(){const[n]=i;d.assertType(n instanceof M.URI);const t=r.get(S.IModelService).getModel(n);if(!!t){const l=a(t);return l?l.getLegend():r.get(C.ICommandService).executeCommand("_provideDocumentRangeSemanticTokensLegend",n)}})),C.CommandsRegistry.registerCommand("_provideDocumentSemanticTokens",(r,...i)=>Ie(void 0,void 0,void 0,function*(){const[n]=i;d.assertType(n instanceof M.URI);const t=r.get(S.IModelService).getModel(n);if(!!t){const l=s(t,null,b.CancellationToken.None);if(!l)return r.get(C.ICommandService).executeCommand("_provideDocumentRangeSemanticTokens",n,t.getFullModelRange());const{provider:h,request:m}=l;let _;try{_=yield m}catch(v){N.onUnexpectedExternalError(v);return}if(!(!_||!c(_))){const f=g.encodeSemanticTokensDto({id:0,type:"full",data:_.data});return _.resultId&&h.releaseDocumentSemanticTokens(_.resultId),f}}})),C.CommandsRegistry.registerCommand("_provideDocumentRangeSemanticTokensLegend",(r,...i)=>Ie(void 0,void 0,void 0,function*(){const[n]=i;d.assertType(n instanceof M.URI);const t=r.get(S.IModelService).getModel(n);if(!!t){const l=u(t);if(!!l)return l.getLegend()}})),C.CommandsRegistry.registerCommand("_provideDocumentRangeSemanticTokens",(r,...i)=>Ie(void 0,void 0,void 0,function*(){const[n,t]=i;d.assertType(n instanceof M.URI),d.assertType(p.Range.isIRange(t));const l=r.get(S.IModelService).getModel(n);if(!!l){const h=u(l);if(!!h){let m;try{m=yield h.provideDocumentRangeSemanticTokens(l,p.Range.lift(t),b.CancellationToken.None)}catch(_){N.onUnexpectedExternalError(_);return}if(!(!m||!c(m)))return g.encodeSemanticTokensDto({id:0,type:"full",data:m.data})}}}))}),define(Q[248],J([0,1,19,23,12,24,18,36,2,26,20]),function(q,e,b,N,M,w,S,C,d,g,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getCodeLensModel=e.CodeLensModel=void 0;class c{constructor(){this.lenses=[],this._disposables=new d.DisposableStore}dispose(){this._disposables.dispose()}add(a,u){this._disposables.add(a);for(const r of a.lenses)this.lenses.push({symbol:r,provider:u})}}e.CodeLensModel=c;function o(s,a){return Ie(this,void 0,void 0,function*(){const u=S.CodeLensProviderRegistry.ordered(s),r=new Map,i=new c,n=u.map((t,l)=>Ie(this,void 0,void 0,function*(){r.set(t,l);try{const h=yield Promise.resolve(t.provideCodeLenses(s,a));h&&i.add(h,t)}catch(h){M.onUnexpectedExternalError(h)}}));return yield Promise.all(n),i.lenses=b.mergeSort(i.lenses,(t,l)=>t.symbol.range.startLineNumberl.symbol.range.startLineNumber?1:r.get(t.provider)r.get(l.provider)?1:t.symbol.range.startColumnl.symbol.range.startColumn?1:0),i})}e.getCodeLensModel=o,g.CommandsRegistry.registerCommand("_executeCodeLensProvider",function(s,...a){let[u,r]=a;p.assertType(w.URI.isUri(u)),p.assertType(typeof r=="number"||!r);const i=s.get(C.IModelService).getModel(u);if(!i)throw M.illegalArgument();const n=[],t=new d.DisposableStore;return o(i,N.CancellationToken.None).then(l=>{t.add(l);let h=[];for(const m of l.lenses)r==null||Boolean(m.symbol.command)?n.push(m.symbol):r-- >0&&m.provider.resolveCodeLens&&h.push(Promise.resolve(m.provider.resolveCodeLens(i,m.symbol,N.CancellationToken.None)).then(_=>n.push(_||m.symbol)));return Promise.all(h)}).then(()=>n).finally(()=>{setTimeout(()=>t.dispose(),100)})})}),define(Q[249],J([0,1,23,12,24,3,18,36,26]),function(q,e,b,N,M,w,S,C,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getColorPresentations=e.getColors=void 0;function g(c,o){const s=[],u=S.ColorProviderRegistry.ordered(c).reverse().map(r=>Promise.resolve(r.provideDocumentColors(c,o)).then(i=>{if(Array.isArray(i))for(let n of i)s.push({colorInfo:n,provider:r})}));return Promise.all(u).then(()=>s)}e.getColors=g;function p(c,o,s,a){return Promise.resolve(s.provideColorPresentations(c,o,a))}e.getColorPresentations=p,d.CommandsRegistry.registerCommand("_executeDocumentColorProvider",function(c,...o){const[s]=o;if(!(s instanceof M.URI))throw N.illegalArgument();const a=c.get(C.IModelService).getModel(s);if(!a)throw N.illegalArgument();const u=[],i=S.ColorProviderRegistry.ordered(a).reverse().map(n=>Promise.resolve(n.provideDocumentColors(a,b.CancellationToken.None)).then(t=>{if(Array.isArray(t))for(let l of t)u.push({range:l.range,color:[l.color.red,l.color.green,l.color.blue,l.color.alpha]})}));return Promise.all(i).then(()=>u)}),d.CommandsRegistry.registerCommand("_executeColorPresentationProvider",function(c,...o){const[s,a]=o,{uri:u,range:r}=a;if(!(u instanceof M.URI)||!Array.isArray(s)||s.length!==4||!w.Range.isIRange(r))throw N.illegalArgument();const[i,n,t,l]=s,h=c.get(C.IModelService).getModel(u);if(!h)throw N.illegalArgument();const m={range:r,color:{red:i,green:n,blue:t,alpha:l}},_=[],v=S.ColorProviderRegistry.ordered(h).reverse().map(y=>Promise.resolve(y.provideColorPresentations(h,m,b.CancellationToken.None)).then(L=>{Array.isArray(L)&&_.push(...L)}));return Promise.all(v).then(()=>_)})}),define(Q[545],J([0,1,24,36,23,67,245,26,20]),function(q,e,b,N,M,w,S,C,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getDocumentSymbols=void 0;function g(p,c,o){return Ie(this,void 0,void 0,function*(){const s=yield S.OutlineModel.create(p,o);return c?s.asListOfDocumentSymbols():s.getTopLevelSymbols()})}e.getDocumentSymbols=g,C.CommandsRegistry.registerCommand("_executeDocumentSymbolProvider",function(p,...c){return Ie(this,void 0,void 0,function*(){const[o]=c;d.assertType(b.URI.isUri(o));const s=p.get(N.IModelService).getModel(o);if(s)return g(s,!1,M.CancellationToken.None);const a=yield p.get(w.ITextModelService).createModelReference(o);try{return yield g(a.object.textEditorModel,!1,M.CancellationToken.None)}finally{a.dispose()}})})}),define(Q[546],J([0,1,23,12,24,3,18,36,26,2,19,20]),function(q,e,b,N,M,w,S,C,d,g,p,c){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getLinks=e.LinksList=e.Link=void 0;class o{constructor(r,i){this._link=r,this._provider=i}toJSON(){return{range:this.range,url:this.url,tooltip:this.tooltip}}get range(){return this._link.range}get url(){return this._link.url}get tooltip(){return this._link.tooltip}resolve(r){return Ie(this,void 0,void 0,function*(){return this._link.url?this._link.url:typeof this._provider.resolveLink=="function"?Promise.resolve(this._provider.resolveLink(this._link,r)).then(i=>(this._link=i||this._link,this._link.url?this.resolve(r):Promise.reject(new Error("missing")))):Promise.reject(new Error("missing"))})}}e.Link=o;class s{constructor(r){this._disposables=new g.DisposableStore;let i=[];for(const[n,t]of r){const l=n.links.map(h=>new o(h,t));i=s._union(i,l),g.isDisposable(n)&&this._disposables.add(n)}this.links=i}dispose(){this._disposables.dispose(),this.links.length=0}static _union(r,i){let n=[],t,l,h,m;for(t=0,h=0,l=r.length,m=i.length;tPromise.resolve(t.provideLinks(u,r)).then(h=>{h&&(i[l]=[h,t])},N.onUnexpectedExternalError));return Promise.all(n).then(()=>{const t=new s(p.coalesce(i));return r.isCancellationRequested?(t.dispose(),new s([])):t})}e.getLinks=a,d.CommandsRegistry.registerCommand("_executeLinkProvider",(u,...r)=>Ie(void 0,void 0,void 0,function*(){let[i,n]=r;c.assertType(i instanceof M.URI),typeof n!="number"&&(n=0);const t=u.get(C.IModelService).getModel(i);if(!t)return[];const l=yield a(t,b.CancellationToken.None);if(!l)return[];for(let m=0;m=0),S.set("isFirefox",w.indexOf("Firefox")>=0),S.set("isChrome",w.indexOf("Chrome")>=0),S.set("isSafari",w.indexOf("Safari")>=0),S.set("isIPad",w.indexOf("iPad")>=0);const C=Object.prototype.hasOwnProperty;class d{static has(E){return o.create(E)}static equals(E,T){return s.create(E,T)}static regex(E,T){return m.create(E,T)}static not(E){return i.create(E)}static and(...E){return f.create(E)}static or(...E){return v.create(E)}static deserialize(E,T=!1){if(!!E)return this._deserializeOrExpression(E,T)}static _deserializeOrExpression(E,T){let O=E.split("||");return v.create(O.map(A=>this._deserializeAndExpression(A,T)))}static _deserializeAndExpression(E,T){let O=E.split("&&");return f.create(O.map(A=>this._deserializeOne(A,T)))}static _deserializeOne(E,T){if(E=E.trim(),E.indexOf("!=")>=0){let O=E.split("!=");return r.create(O[0].trim(),this._deserializeValue(O[1],T))}if(E.indexOf("==")>=0){let O=E.split("==");return s.create(O[0].trim(),this._deserializeValue(O[1],T))}if(E.indexOf("=~")>=0){let O=E.split("=~");return m.create(O[0].trim(),this._deserializeRegexValue(O[1],T))}if(E.indexOf(" in ")>=0){let O=E.split(" in ");return a.create(O[0].trim(),O[1].trim())}if(/^[^<=>]+>=[^<=>]+$/.test(E)){const O=E.split(">=");return t.create(O[0].trim(),O[1].trim())}if(/^[^<=>]+>[^<=>]+$/.test(E)){const O=E.split(">");return n.create(O[0].trim(),O[1].trim())}if(/^[^<=>]+<=[^<=>]+$/.test(E)){const O=E.split("<=");return h.create(O[0].trim(),O[1].trim())}if(/^[^<=>]+<[^<=>]+$/.test(E)){const O=E.split("<");return l.create(O[0].trim(),O[1].trim())}return/^\!\s*/.test(E)?i.create(E.substr(1).trim()):o.create(E)}static _deserializeValue(E,T){if(E=E.trim(),E==="true")return!0;if(E==="false")return!1;let O=/^'([^']*)'$/.exec(E);return O?O[1].trim():E}static _deserializeRegexValue(E,T){if(b.isFalsyOrWhitespace(E)){if(T)throw new Error("missing regexp-value for =~-expression");return console.warn("missing regexp-value for =~-expression"),null}let O=E.indexOf("/"),A=E.lastIndexOf("/");if(O===A||O<0){if(T)throw new Error(`bad regexp-value '${E}', missing /-enclosure`);return console.warn(`bad regexp-value '${E}', missing /-enclosure`),null}let B=E.slice(O+1,A),F=E[A+1]==="i"?"i":"";try{return new RegExp(B,F)}catch(D){if(T)throw new Error(`bad regexp-value '${E}', parse error: ${D}`);return console.warn(`bad regexp-value '${E}', parse error: ${D}`),null}}}e.ContextKeyExpr=d;function g(k,E){return k.cmp(E)}class p{constructor(){this.type=0}cmp(E){return this.type-E.type}equals(E){return E.type===this.type}evaluate(E){return!1}serialize(){return"false"}keys(){return[]}negate(){return c.INSTANCE}}e.ContextKeyFalseExpr=p,p.INSTANCE=new p;class c{constructor(){this.type=1}cmp(E){return this.type-E.type}equals(E){return E.type===this.type}evaluate(E){return!0}serialize(){return"true"}keys(){return[]}negate(){return p.INSTANCE}}e.ContextKeyTrueExpr=c,c.INSTANCE=new c;class o{constructor(E){this.key=E,this.type=2}static create(E){const T=S.get(E);return typeof T=="boolean"?T?c.INSTANCE:p.INSTANCE:new o(E)}cmp(E){return E.type!==this.type?this.type-E.type:L(this.key,E.key)}equals(E){return E.type===this.type?this.key===E.key:!1}evaluate(E){return!!E.getValue(this.key)}serialize(){return this.key}keys(){return[this.key]}negate(){return i.create(this.key)}}e.ContextKeyDefinedExpr=o;class s{constructor(E,T){this.key=E,this.value=T,this.type=4}static create(E,T){if(typeof T=="boolean")return T?o.create(E):i.create(E);const O=S.get(E);return typeof O=="boolean"?T===(O?"true":"false")?c.INSTANCE:p.INSTANCE:new s(E,T)}cmp(E){return E.type!==this.type?this.type-E.type:I(this.key,this.value,E.key,E.value)}equals(E){return E.type===this.type?this.key===E.key&&this.value===E.value:!1}evaluate(E){return E.getValue(this.key)==this.value}serialize(){return`${this.key} == '${this.value}'`}keys(){return[this.key]}negate(){return r.create(this.key,this.value)}}e.ContextKeyEqualsExpr=s;class a{constructor(E,T){this.key=E,this.valueKey=T,this.type=10}static create(E,T){return new a(E,T)}cmp(E){return E.type!==this.type?this.type-E.type:I(this.key,this.valueKey,E.key,E.valueKey)}equals(E){return E.type===this.type?this.key===E.key&&this.valueKey===E.valueKey:!1}evaluate(E){const T=E.getValue(this.valueKey),O=E.getValue(this.key);return Array.isArray(T)?T.indexOf(O)>=0:typeof O=="string"&&typeof T=="object"&&T!==null?C.call(T,O):!1}serialize(){return`${this.key} in '${this.valueKey}'`}keys(){return[this.key,this.valueKey]}negate(){return u.create(this)}}e.ContextKeyInExpr=a;class u{constructor(E){this._actual=E,this.type=11}static create(E){return new u(E)}cmp(E){return E.type!==this.type?this.type-E.type:this._actual.cmp(E._actual)}equals(E){return E.type===this.type?this._actual.equals(E._actual):!1}evaluate(E){return!this._actual.evaluate(E)}serialize(){throw new Error("Method not implemented.")}keys(){return this._actual.keys()}negate(){return this._actual}}e.ContextKeyNotInExpr=u;class r{constructor(E,T){this.key=E,this.value=T,this.type=5}static create(E,T){if(typeof T=="boolean")return T?i.create(E):o.create(E);const O=S.get(E);return typeof O=="boolean"?T===(O?"true":"false")?p.INSTANCE:c.INSTANCE:new r(E,T)}cmp(E){return E.type!==this.type?this.type-E.type:I(this.key,this.value,E.key,E.value)}equals(E){return E.type===this.type?this.key===E.key&&this.value===E.value:!1}evaluate(E){return E.getValue(this.key)!=this.value}serialize(){return`${this.key} != '${this.value}'`}keys(){return[this.key]}negate(){return s.create(this.key,this.value)}}e.ContextKeyNotEqualsExpr=r;class i{constructor(E){this.key=E,this.type=3}static create(E){const T=S.get(E);return typeof T=="boolean"?T?p.INSTANCE:c.INSTANCE:new i(E)}cmp(E){return E.type!==this.type?this.type-E.type:L(this.key,E.key)}equals(E){return E.type===this.type?this.key===E.key:!1}evaluate(E){return!E.getValue(this.key)}serialize(){return`!${this.key}`}keys(){return[this.key]}negate(){return o.create(this.key)}}e.ContextKeyNotExpr=i;class n{constructor(E,T){this.key=E,this.value=T,this.type=12}static create(E,T){return new n(E,T)}cmp(E){return E.type!==this.type?this.type-E.type:I(this.key,this.value,E.key,E.value)}equals(E){return E.type===this.type?this.key===E.key&&this.value===E.value:!1}evaluate(E){return parseFloat(E.getValue(this.key))>parseFloat(this.value)}serialize(){return`${this.key} > ${this.value}`}keys(){return[this.key]}negate(){return h.create(this.key,this.value)}}e.ContextKeyGreaterExpr=n;class t{constructor(E,T){this.key=E,this.value=T,this.type=13}static create(E,T){return new t(E,T)}cmp(E){return E.type!==this.type?this.type-E.type:I(this.key,this.value,E.key,E.value)}equals(E){return E.type===this.type?this.key===E.key&&this.value===E.value:!1}evaluate(E){return parseFloat(E.getValue(this.key))>=parseFloat(this.value)}serialize(){return`${this.key} >= ${this.value}`}keys(){return[this.key]}negate(){return l.create(this.key,this.value)}}e.ContextKeyGreaterEqualsExpr=t;class l{constructor(E,T){this.key=E,this.value=T,this.type=14}static create(E,T){return new l(E,T)}cmp(E){return E.type!==this.type?this.type-E.type:I(this.key,this.value,E.key,E.value)}equals(E){return E.type===this.type?this.key===E.key&&this.value===E.value:!1}evaluate(E){return parseFloat(E.getValue(this.key))E.key)return 1;const T=this.regexp?this.regexp.source:"",O=E.regexp?E.regexp.source:"";return TO?1:0}equals(E){if(E.type===this.type){const T=this.regexp?this.regexp.source:"",O=E.regexp?E.regexp.source:"";return this.key===E.key&&T===O}return!1}evaluate(E){let T=E.getValue(this.key);return this.regexp?this.regexp.test(T):!1}serialize(){const E=this.regexp?`/${this.regexp.source}/${this.regexp.ignoreCase?"i":""}`:"/invalid/";return`${this.key} =~ ${E}`}keys(){return[this.key]}negate(){return _.create(this)}}e.ContextKeyRegexExpr=m;class _{constructor(E){this._actual=E,this.type=8}static create(E){return new _(E)}cmp(E){return E.type!==this.type?this.type-E.type:this._actual.cmp(E._actual)}equals(E){return E.type===this.type?this._actual.equals(E._actual):!1}evaluate(E){return!this._actual.evaluate(E)}serialize(){throw new Error("Method not implemented.")}keys(){return this._actual.keys()}negate(){return this._actual}}e.ContextKeyNotRegexExpr=_;class f{constructor(E){this.expr=E,this.type=6}static create(E){return f._normalizeArr(E)}cmp(E){if(E.type!==this.type)return this.type-E.type;if(this.expr.lengthE.expr.length)return 1;for(let T=0,O=this.expr.length;T1;){const A=T[T.length-1];if(A.type!==9)break;T.pop();const B=T.pop(),F=v.create(A.expr.map(D=>f.create([D,B])));F&&(T.push(F),T.sort(g))}return T.length===1?T[0]:new f(T)}}serialize(){return this.expr.map(E=>E.serialize()).join(" && ")}keys(){const E=[];for(let T of this.expr)E.push(...T.keys());return E}negate(){let E=[];for(let T of this.expr)E.push(T.negate());return v.create(E)}}e.ContextKeyAndExpr=f;class v{constructor(E){this.expr=E,this.type=9}static create(E){const T=v._normalizeArr(E);if(T.length!==0)return T.length===1?T[0]:new v(T)}cmp(E){if(E.type!==this.type)return this.type-E.type;if(this.expr.lengthE.expr.length)return 1;for(let T=0,O=this.expr.length;TE.serialize()).join(" || ")}keys(){const E=[];for(let T of this.expr)E.push(...T.keys());return E}negate(){let E=[];for(let O of this.expr)E.push(O.negate());const T=O=>O.type===9?O.expr:[O];for(;E.length>1;){const O=E.shift(),A=E.shift(),B=[];for(const F of T(O))for(const D of T(A))B.push(d.and(F,D));E.unshift(d.or(...B))}return E[0]}}e.ContextKeyOrExpr=v;class y extends o{constructor(E,T,O){super(E);this.key=E,this._defaultValue=T,typeof O=="object"?y._info.push(Object.assign(Object.assign({},O),{key:E})):O!==!0&&y._info.push({key:E,description:O,type:T!=null?typeof T:void 0})}static all(){return y._info.values()}bindTo(E){return E.createKey(this.key,this._defaultValue)}getValue(E){return E.getContextKeyValue(this.key)}toNegated(){return d.not(this.key)}isEqualTo(E){return d.equals(this.key,E)}}e.RawContextKey=y,y._info=[],e.IContextKeyService=N.createDecorator("contextKeyService"),e.SET_CONTEXT_COMMAND_ID="setContext";function L(k,E){return kE?1:0}function I(k,E,T,O){return kT?1:EO?1:0}}),define(Q[25],J([0,1,456,16]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.EditorContextKeys=void 0;var M;(function(w){w.editorSimpleInput=new N.RawContextKey("editorSimpleInput",!1,!0),w.editorTextFocus=new N.RawContextKey("editorTextFocus",!1,b.localize(0,null)),w.focus=new N.RawContextKey("editorFocus",!1,b.localize(1,null)),w.textInputFocus=new N.RawContextKey("textInputFocus",!1,b.localize(2,null)),w.readOnly=new N.RawContextKey("editorReadonly",!1,b.localize(3,null)),w.inDiffEditor=new N.RawContextKey("inDiffEditor",!1,b.localize(4,null)),w.columnSelection=new N.RawContextKey("editorColumnSelection",!1,b.localize(5,null)),w.writable=w.readOnly.toNegated(),w.hasNonEmptySelection=new N.RawContextKey("editorHasSelection",!1,b.localize(6,null)),w.hasOnlyEmptySelection=w.hasNonEmptySelection.toNegated(),w.hasMultipleSelections=new N.RawContextKey("editorHasMultipleSelections",!1,b.localize(7,null)),w.hasSingleSelection=w.hasMultipleSelections.toNegated(),w.tabMovesFocus=new N.RawContextKey("editorTabMovesFocus",!1,b.localize(8,null)),w.tabDoesNotMoveFocus=w.tabMovesFocus.toNegated(),w.isInWalkThroughSnippet=new N.RawContextKey("isInEmbeddedEditor",!1,!0),w.canUndo=new N.RawContextKey("canUndo",!1,!0),w.canRedo=new N.RawContextKey("canRedo",!1,!0),w.hoverVisible=new N.RawContextKey("editorHoverVisible",!1,b.localize(9,null)),w.inCompositeEditor=new N.RawContextKey("inCompositeEditor",void 0,b.localize(10,null)),w.notInCompositeEditor=w.inCompositeEditor.toNegated(),w.languageId=new N.RawContextKey("editorLangId","",b.localize(11,null)),w.hasCompletionItemProvider=new N.RawContextKey("editorHasCompletionItemProvider",!1,b.localize(12,null)),w.hasCodeActionsProvider=new N.RawContextKey("editorHasCodeActionsProvider",!1,b.localize(13,null)),w.hasCodeLensProvider=new N.RawContextKey("editorHasCodeLensProvider",!1,b.localize(14,null)),w.hasDefinitionProvider=new N.RawContextKey("editorHasDefinitionProvider",!1,b.localize(15,null)),w.hasDeclarationProvider=new N.RawContextKey("editorHasDeclarationProvider",!1,b.localize(16,null)),w.hasImplementationProvider=new N.RawContextKey("editorHasImplementationProvider",!1,b.localize(17,null)),w.hasTypeDefinitionProvider=new N.RawContextKey("editorHasTypeDefinitionProvider",!1,b.localize(18,null)),w.hasHoverProvider=new N.RawContextKey("editorHasHoverProvider",!1,b.localize(19,null)),w.hasDocumentHighlightProvider=new N.RawContextKey("editorHasDocumentHighlightProvider",!1,b.localize(20,null)),w.hasDocumentSymbolProvider=new N.RawContextKey("editorHasDocumentSymbolProvider",!1,b.localize(21,null)),w.hasReferenceProvider=new N.RawContextKey("editorHasReferenceProvider",!1,b.localize(22,null)),w.hasRenameProvider=new N.RawContextKey("editorHasRenameProvider",!1,b.localize(23,null)),w.hasSignatureHelpProvider=new N.RawContextKey("editorHasSignatureHelpProvider",!1,b.localize(24,null)),w.hasInlineHintsProvider=new N.RawContextKey("editorHasInlineHintsProvider",!1,b.localize(25,null)),w.hasDocumentFormattingProvider=new N.RawContextKey("editorHasDocumentFormattingProvider",!1,b.localize(26,null)),w.hasDocumentSelectionFormattingProvider=new N.RawContextKey("editorHasDocumentSelectionFormattingProvider",!1,b.localize(27,null)),w.hasMultipleDocumentFormattingProvider=new N.RawContextKey("editorHasMultipleDocumentFormattingProvider",!1,b.localize(28,null)),w.hasMultipleDocumentSelectionFormattingProvider=new N.RawContextKey("editorHasMultipleDocumentSelectionFormattingProvider",!1,b.localize(29,null))})(M=e.EditorContextKeys||(e.EditorContextKeys={}))}),define(Q[183],J([0,1,12,14,18,16,23,26,24,20,67]),function(q,e,b,N,M,w,S,C,d,g,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.provideSignatureHelp=e.Context=void 0,e.Context={Visible:new w.RawContextKey("parameterHintsVisible",!1),MultipleSignatures:new w.RawContextKey("parameterHintsMultipleSignatures",!1)};function c(o,s,a,u){return Ie(this,void 0,void 0,function*(){const r=M.SignatureHelpProviderRegistry.ordered(o);for(const i of r)try{const n=yield i.provideSignatureHelp(o,s,u,a);if(n)return n}catch(n){b.onUnexpectedExternalError(n)}})}e.provideSignatureHelp=c,C.CommandsRegistry.registerCommand("_executeSignatureHelpProvider",(o,...s)=>Ie(void 0,void 0,void 0,function*(){const[a,u,r]=s;g.assertType(d.URI.isUri(a)),g.assertType(N.Position.isIPosition(u)),g.assertType(typeof r=="string"||!r);const i=yield o.get(p.ITextModelService).createModelReference(a);try{const n=yield c(i.object.textEditorModel,N.Position.lift(u),{triggerKind:M.SignatureHelpTriggerKind.Invoke,isRetrigger:!1,triggerCharacter:r},S.CancellationToken.None);return n?(setTimeout(()=>n.dispose(),0),n.value):void 0}finally{i.dispose()}}))}),define(Q[547],J([0,1,15,12,6,2,91,18,183]),function(q,e,b,N,M,w,S,C,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ParameterHintsModel=void 0;var g;(function(o){o.Default={type:0};class s{constructor(r,i){this.request=r,this.previouslyActiveHints=i,this.type=2}}o.Pending=s;class a{constructor(r){this.hints=r,this.type=1}}o.Active=a})(g||(g={}));class p extends w.Disposable{constructor(s,a=p.DEFAULT_DELAY){super();this._onChangedHints=this._register(new M.Emitter),this.onChangedHints=this._onChangedHints.event,this.triggerOnType=!1,this._state=g.Default,this._pendingTriggers=[],this._lastSignatureHelpResult=this._register(new w.MutableDisposable),this.triggerChars=new S.CharacterSet,this.retriggerChars=new S.CharacterSet,this.triggerId=0,this.editor=s,this.throttledDelayer=new b.Delayer(a),this._register(this.editor.onDidChangeConfiguration(()=>this.onEditorConfigurationChange())),this._register(this.editor.onDidChangeModel(u=>this.onModelChanged())),this._register(this.editor.onDidChangeModelLanguage(u=>this.onModelChanged())),this._register(this.editor.onDidChangeCursorSelection(u=>this.onCursorChange(u))),this._register(this.editor.onDidChangeModelContent(u=>this.onModelContentChange())),this._register(C.SignatureHelpProviderRegistry.onDidChange(this.onModelChanged,this)),this._register(this.editor.onDidType(u=>this.onDidType(u))),this.onEditorConfigurationChange(),this.onModelChanged()}get state(){return this._state}set state(s){this._state.type===2&&this._state.request.cancel(),this._state=s}cancel(s=!1){this.state=g.Default,this.throttledDelayer.cancel(),s||this._onChangedHints.fire(void 0)}trigger(s,a){const u=this.editor.getModel();if(!(!u||!C.SignatureHelpProviderRegistry.has(u))){const r=++this.triggerId;this._pendingTriggers.push(s),this.throttledDelayer.trigger(()=>this.doTrigger(r),a).catch(N.onUnexpectedError)}}next(){if(this.state.type===1){const s=this.state.hints.signatures.length,a=this.state.hints.activeSignature,u=a%s==s-1,r=this.editor.getOption(70).cycle;if((s<2||u)&&!r){this.cancel();return}this.updateActiveSignature(u&&r?0:a+1)}}previous(){if(this.state.type===1){const s=this.state.hints.signatures.length,a=this.state.hints.activeSignature,u=a===0,r=this.editor.getOption(70).cycle;if((s<2||u)&&!r){this.cancel();return}this.updateActiveSignature(u&&r?s-1:a-1)}}updateActiveSignature(s){this.state.type===1&&(this.state=new g.Active(Object.assign(Object.assign({},this.state.hints),{activeSignature:s})),this._onChangedHints.fire(this.state.hints))}doTrigger(s){return Ie(this,void 0,void 0,function*(){const a=this.state.type===1||this.state.type===2,u=this.getLastActiveHints();if(this.cancel(!0),this._pendingTriggers.length===0)return!1;const r=this._pendingTriggers.reduce(c);this._pendingTriggers=[];const i={triggerKind:r.triggerKind,triggerCharacter:r.triggerCharacter,isRetrigger:a,activeSignatureHelp:u};if(!this.editor.hasModel())return!1;const n=this.editor.getModel(),t=this.editor.getPosition();this.state=new g.Pending(b.createCancelablePromise(l=>d.provideSignatureHelp(n,t,i,l)),u);try{const l=yield this.state.request;return s!==this.triggerId?(l==null||l.dispose(),!1):!l||!l.value.signatures||l.value.signatures.length===0?(l==null||l.dispose(),this._lastSignatureHelpResult.clear(),this.cancel(),!1):(this.state=new g.Active(l.value),this._lastSignatureHelpResult.value=l,this._onChangedHints.fire(this.state.hints),!0)}catch(l){return s===this.triggerId&&(this.state=g.Default),N.onUnexpectedError(l),!1}})}getLastActiveHints(){switch(this.state.type){case 1:return this.state.hints;case 2:return this.state.previouslyActiveHints;default:return}}get isTriggered(){return this.state.type===1||this.state.type===2||this.throttledDelayer.isTriggered()}onModelChanged(){this.cancel(),this.triggerChars=new S.CharacterSet,this.retriggerChars=new S.CharacterSet;const s=this.editor.getModel();if(!!s)for(const a of C.SignatureHelpProviderRegistry.ordered(s)){for(const u of a.signatureHelpTriggerCharacters||[])this.triggerChars.add(u.charCodeAt(0)),this.retriggerChars.add(u.charCodeAt(0));for(const u of a.signatureHelpRetriggerCharacters||[])this.retriggerChars.add(u.charCodeAt(0))}}onDidType(s){if(!!this.triggerOnType){const a=s.length-1,u=s.charCodeAt(a);(this.triggerChars.has(u)||this.isTriggered&&this.retriggerChars.has(u))&&this.trigger({triggerKind:C.SignatureHelpTriggerKind.TriggerCharacter,triggerCharacter:s.charAt(a)})}}onCursorChange(s){s.source==="mouse"?this.cancel():this.isTriggered&&this.trigger({triggerKind:C.SignatureHelpTriggerKind.ContentChange})}onModelContentChange(){this.isTriggered&&this.trigger({triggerKind:C.SignatureHelpTriggerKind.ContentChange})}onEditorConfigurationChange(){this.triggerOnType=this.editor.getOption(70).enabled,this.triggerOnType||this.cancel()}dispose(){this.cancel(!0),super.dispose()}}e.ParameterHintsModel=p,p.DEFAULT_DELAY=120;function c(o,s){switch(s.triggerKind){case C.SignatureHelpTriggerKind.Invoke:return s;case C.SignatureHelpTriggerKind.ContentChange:return o;case C.SignatureHelpTriggerKind.TriggerCharacter:default:return s}}});var _e=this&&this.__param||function(q,e){return function(b,N){e(b,N,q)}};define(Q[548],J([0,1,16]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SuggestAlternatives=void 0;let N=class at{constructor(w,S){this._editor=w,this._index=0,this._ckOtherSuggestions=at.OtherSuggestions.bindTo(S)}dispose(){this.reset()}reset(){var w;this._ckOtherSuggestions.reset(),(w=this._listener)===null||w===void 0||w.dispose(),this._model=void 0,this._acceptNext=void 0,this._ignore=!1}set({model:w,index:S},C){if(w.items.length===0){this.reset();return}if(at._moveIndex(!0,w,S)===S){this.reset();return}this._acceptNext=C,this._model=w,this._index=S,this._listener=this._editor.onDidChangeCursorPosition(()=>{this._ignore||this.reset()}),this._ckOtherSuggestions.set(!0)}static _moveIndex(w,S,C){let d=C;for(;d=(d+S.items.length+(w?1:-1))%S.items.length,!(d===C||!S.items[d].completion.additionalTextEdits););return d}next(){this._move(!0)}prev(){this._move(!1)}_move(w){if(!!this._model)try{this._ignore=!0,this._index=at._moveIndex(w,this._model,this._index),this._acceptNext({index:this._index,item:this._model.items[this._index],model:this._model})}finally{this._ignore=!1}}};N.OtherSuggestions=new b.RawContextKey("hasOtherSuggestions",!1),N=Me([_e(1,b.IContextKeyService)],N),e.SuggestAlternatives=N}),define(Q[549],J([0,1,16]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.WordContextKey=void 0;let N=class Mt{constructor(w,S){this._editor=w,this._enabled=!1,this._ckAtEnd=Mt.AtEnd.bindTo(S),this._configListener=this._editor.onDidChangeConfiguration(C=>C.hasChanged(106)&&this._update()),this._update()}dispose(){var w;this._configListener.dispose(),(w=this._selectionListener)===null||w===void 0||w.dispose(),this._ckAtEnd.reset()}_update(){const w=this._editor.getOption(106)==="on";if(this._enabled!==w)if(this._enabled=w,this._enabled){const S=()=>{if(!this._editor.hasModel()){this._ckAtEnd.set(!1);return}const C=this._editor.getModel(),d=this._editor.getSelection(),g=C.getWordAtPosition(d.getStartPosition());if(!g){this._ckAtEnd.set(!1);return}this._ckAtEnd.set(g.endColumn===d.getStartPosition().column)};this._selectionListener=this._editor.onDidChangeCursorSelection(S),S()}else this._selectionListener&&(this._ckAtEnd.reset(),this._selectionListener.dispose(),this._selectionListener=void 0)}};N.AtEnd=new b.RawContextKey("atEndOfWord",!1),N=Me([_e(1,b.IContextKeyService)],N),e.WordContextKey=N}),define(Q[65],J([0,1,9,16]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CONTEXT_ACCESSIBILITY_MODE_ENABLED=e.IAccessibilityService=void 0,e.IAccessibilityService=b.createDecorator("accessibilityService"),e.CONTEXT_ACCESSIBILITY_MODE_ENABLED=new N.RawContextKey("accessibilityModeEnabled",!1)}),define(Q[250],J([0,1,521,16,17]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InputFocusedContextKey=e.IsWindowsContext=void 0,e.IsWindowsContext=new N.RawContextKey("isWindows",M.isWindows,b.localize(0,null)),e.InputFocusedContextKey="inputFocus"}),define(Q[68],J([0,1,9]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IContextMenuService=e.IContextViewService=void 0,e.IContextViewService=b.createDecorator("contextViewService"),e.IContextMenuService=b.createDecorator("contextMenuService")}),define(Q[184],J([0,1,9]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IDialogService=void 0,e.IDialogService=b.createDecorator("dialogService")}),define(Q[138],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ServiceCollection=void 0;class b{constructor(...M){this._entries=new Map;for(let[w,S]of M)this.set(w,S)}set(M,w){const S=this._entries.get(M);return this._entries.set(M,w),S}has(M){return this._entries.has(M)}get(M){return this._entries.get(M)}}e.ServiceCollection=b}),define(Q[550],J([0,1,12,533,238,9,138,15]),function(q,e,b,N,M,w,S,C){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InstantiationService=void 0;const d=!1;class g extends Error{constructor(s){super("cyclic dependency between services");this.message=s.toString()}}class p{constructor(s=new S.ServiceCollection,a=!1,u){this._activeInstantiations=new Set,this._services=s,this._strict=a,this._parent=u,this._services.set(w.IInstantiationService,this)}createChild(s){return new p(s,this._strict,this)}invokeFunction(s,...a){let u=c.traceInvocation(s),r=!1;try{return s({get:(n,t)=>{if(r)throw b.illegalState("service accessor is only valid during the invocation of its target method");const l=this._getOrCreateServiceInstance(n,u);if(!l&&t!==w.optional)throw new Error(`[invokeFunction] unknown service '${n}'`);return l}},...a)}finally{r=!0,u.stop()}}createInstance(s,...a){let u,r;return s instanceof M.SyncDescriptor?(u=c.traceCreation(s.ctor),r=this._createInstance(s.ctor,s.staticArguments.concat(a),u)):(u=c.traceCreation(s),r=this._createInstance(s,a,u)),u.stop(),r}_createInstance(s,a=[],u){let r=w._util.getServiceDependencies(s).sort((t,l)=>t.index-l.index),i=[];for(const t of r){let l=this._getOrCreateServiceInstance(t.id,u);if(!l&&this._strict&&!t.optional)throw new Error(`[createInstance] ${s.name} depends on UNKNOWN service ${t.id}.`);i.push(l)}let n=r.length>0?r[0].index:a.length;if(a.length!==n){console.warn(`[createInstance] First service dependency of ${s.name} at position ${n+1} conflicts with ${a.length} static arguments`);let t=n-a.length;t>0?a=a.concat(new Array(t)):a=a.slice(0,n)}return new s(...[...a,...i])}_setServiceInstance(s,a){if(this._services.get(s)instanceof M.SyncDescriptor)this._services.set(s,a);else if(this._parent)this._parent._setServiceInstance(s,a);else throw new Error("illegalState - setting UNKNOWN service instance")}_getServiceInstanceOrDescriptor(s){let a=this._services.get(s);return!a&&this._parent?this._parent._getServiceInstanceOrDescriptor(s):a}_getOrCreateServiceInstance(s,a){let u=this._getServiceInstanceOrDescriptor(s);return u instanceof M.SyncDescriptor?this._safeCreateAndCacheServiceInstance(s,u,a.branch(s,!0)):(a.branch(s,!1),u)}_safeCreateAndCacheServiceInstance(s,a,u){if(this._activeInstantiations.has(s))throw new Error(`illegal state - RECURSIVELY instantiating service '${s}'`);this._activeInstantiations.add(s);try{return this._createAndCacheServiceInstance(s,a,u)}finally{this._activeInstantiations.delete(s)}}_createAndCacheServiceInstance(s,a,u){const r=new N.Graph(t=>t.id.toString());let i=0;const n=[{id:s,desc:a,_trace:u}];for(;n.length;){const t=n.pop();if(r.lookupOrInsertNode(t),i++>1e3)throw new g(r);for(let l of w._util.getServiceDependencies(t.desc.ctor)){let h=this._getServiceInstanceOrDescriptor(l.id);if(!h&&!l.optional&&console.warn(`[createInstance] ${s} depends on ${l.id} which is NOT registered.`),h instanceof M.SyncDescriptor){const m={id:l.id,desc:h,_trace:t._trace.branch(l.id,!0)};r.insertEdge(t,m),n.push(m)}}}for(;;){const t=r.roots();if(t.length===0){if(!r.isEmpty())throw new g(r);break}for(const{data:l}of t){if(this._getServiceInstanceOrDescriptor(l.id)instanceof M.SyncDescriptor){const m=this._createServiceInstanceWithOwner(l.id,l.desc.ctor,l.desc.staticArguments,l.desc.supportsDelayedInstantiation,l._trace);this._setServiceInstance(l.id,m)}r.removeNode(l)}}return this._getServiceInstanceOrDescriptor(s)}_createServiceInstanceWithOwner(s,a,u=[],r,i){if(this._services.get(s)instanceof M.SyncDescriptor)return this._createServiceInstance(a,u,r,i);if(this._parent)return this._parent._createServiceInstanceWithOwner(s,a,u,r,i);throw new Error(`illegalState - creating UNKNOWN service instance ${a.name}`)}_createServiceInstance(s,a=[],u,r){if(u){const i=new C.IdleValue(()=>this._createInstance(s,a,r));return new Proxy(Object.create(null),{get(n,t){if(t in n)return n[t];let l=i.value,h=l[t];return typeof h!="function"||(h=h.bind(l),n[t]=h),h},set(n,t,l){return i.value[t]=l,!0}})}else return this._createInstance(s,a,r)}}e.InstantiationService=p;class c{constructor(s,a){this.type=s,this.name=a,this._start=Date.now(),this._dep=[]}static traceInvocation(s){return d?new c(1,s.name||s.toString().substring(0,42).replace(/\n/g,"")):c._None}static traceCreation(s){return d?new c(0,s.name):c._None}branch(s,a){let u=new c(2,s.toString());return this._dep.push([s,a,u]),u}stop(){let s=Date.now()-this._start;c._totals+=s;let a=!1;function u(i,n){let t=[],l=new Array(i+1).join(" ");for(const[h,m,_]of n._dep)if(m&&_){a=!0,t.push(`${l}CREATES -> ${h}`);let f=u(i+1,_);f&&t.push(f)}else t.push(`${l}uses -> ${h}`);return t.join(` +`)}let r=[`${this.type===0?"CREATE":"CALL"} ${this.name}`,`${u(1,this)}`,`DONE, took ${s.toFixed(2)}ms (grand total ${c._totals.toFixed(2)}ms)`];(s>2||a)&&console.log(r.join(` +`))}}c._None=new class extends c{constructor(){super(-1,null)}stop(){}branch(){return this}},c._totals=0}),define(Q[551],J([0,1,522,15,6,2]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractKeybindingService=void 0;class S extends w.Disposable{constructor(d,g,p,c,o){super();this._contextKeyService=d,this._commandService=g,this._telemetryService=p,this._notificationService=c,this._logService=o,this._onDidUpdateKeybindings=this._register(new M.Emitter),this._currentChord=null,this._currentChordChecker=new N.IntervalTimer,this._currentChordStatusMessage=null,this._currentSingleModifier=null,this._currentSingleModifierClearTimeout=new N.TimeoutTimer,this._logging=!1}get onDidUpdateKeybindings(){return this._onDidUpdateKeybindings?this._onDidUpdateKeybindings.event:M.Event.None}dispose(){super.dispose()}_log(d){this._logging&&this._logService.info(`[KeybindingService]: ${d}`)}getKeybindings(){return this._getResolver().getKeybindings()}lookupKeybinding(d){const g=this._getResolver().lookupPrimaryKeybinding(d);if(!!g)return g.resolvedKeybinding}dispatchEvent(d,g){return this._dispatch(d,g)}softDispatch(d,g){const p=this.resolveKeyboardEvent(d);if(p.isChord())return console.warn("Unexpected keyboard event mapped to a chord"),null;const[c]=p.getDispatchParts();if(c===null)return null;const o=this._contextKeyService.getContext(g),s=this._currentChord?this._currentChord.keypress:null;return this._getResolver().resolve(o,s,c)}_enterChordMode(d,g){this._currentChord={keypress:d,label:g},this._currentChordStatusMessage=this._notificationService.status(b.localize(0,null,g));const p=Date.now();this._currentChordChecker.cancelAndSet(()=>{if(!this._documentHasFocus()){this._leaveChordMode();return}Date.now()-p>5e3&&this._leaveChordMode()},500)}_leaveChordMode(){this._currentChordStatusMessage&&(this._currentChordStatusMessage.dispose(),this._currentChordStatusMessage=null),this._currentChordChecker.cancel(),this._currentChord=null}_dispatch(d,g){return this._doDispatch(this.resolveKeyboardEvent(d),g,!1)}_singleModifierDispatch(d,g){const p=this.resolveKeyboardEvent(d),[c]=p.getSingleModifierDispatchParts();return c!==null&&this._currentSingleModifier===null?(this._log(`+ Storing single modifier for possible chord ${c}.`),this._currentSingleModifier=c,this._currentSingleModifierClearTimeout.cancelAndSet(()=>{this._log("+ Clearing single modifier due to 300ms elapsed."),this._currentSingleModifier=null},300),!1):c!==null&&c===this._currentSingleModifier?(this._log(`/ Dispatching single modifier chord ${c} ${c}`),this._currentSingleModifierClearTimeout.cancel(),this._currentSingleModifier=null,this._doDispatch(p,g,!0)):(this._currentSingleModifierClearTimeout.cancel(),this._currentSingleModifier=null,!1)}_doDispatch(d,g,p=!1){let c=!1;if(d.isChord())return console.warn("Unexpected keyboard event mapped to a chord"),!1;let o=null,s=null;if(p){const[i]=d.getSingleModifierDispatchParts();o=i,s=i}else[o]=d.getDispatchParts(),s=this._currentChord?this._currentChord.keypress:null;if(o===null)return this._log("\\ Keyboard event cannot be dispatched in keydown phase."),c;const a=this._contextKeyService.getContext(g),u=d.getLabel(),r=this._getResolver().resolve(a,s,o);return this._logService.trace("KeybindingService#dispatch",u,r==null?void 0:r.commandId),r&&r.enterChord?(c=!0,this._enterChordMode(o,u),c):(this._currentChord&&(!r||!r.commandId)&&(this._notificationService.status(b.localize(1,null,this._currentChord.label,u),{hideAfter:10*1e3}),c=!0),this._leaveChordMode(),r&&r.commandId&&(r.bubble||(c=!0),typeof r.commandArgs=="undefined"?this._commandService.executeCommand(r.commandId).then(void 0,i=>this._notificationService.warn(i)):this._commandService.executeCommand(r.commandId,r.commandArgs).then(void 0,i=>this._notificationService.warn(i)),this._telemetryService.publicLog2("workbenchActionExecuted",{id:r.commandId,from:"keybinding"})),c)}mightProducePrintableCharacter(d){return d.ctrlKey||d.metaKey?!1:d.keyCode>=31&&d.keyCode<=56||d.keyCode>=21&&d.keyCode<=30}}e.AbstractKeybindingService=S}),define(Q[552],J([0,1,12,235,39]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.BaseResolvedKeybinding=void 0;class w extends M.ResolvedKeybinding{constructor(C,d){super();if(d.length===0)throw b.illegalArgument("parts");this._os=C,this._parts=d}getLabel(){return N.UILabelProvider.toLabel(this._os,this._parts,C=>this._getLabel(C))}getAriaLabel(){return N.AriaLabelProvider.toLabel(this._os,this._parts,C=>this._getAriaLabel(C))}isChord(){return this._parts.length>1}getParts(){return this._parts.map(C=>this._getPart(C))}_getPart(C){return new M.ResolvedKeybindingPart(C.ctrlKey,C.shiftKey,C.altKey,C.metaKey,this._getLabel(C),this._getAriaLabel(C))}getDispatchParts(){return this._parts.map(C=>this._getDispatchPart(C))}getSingleModifierDispatchParts(){return this._parts.map(C=>this._getSingleModifierDispatchPart(C))}}e.BaseResolvedKeybinding=w}),define(Q[37],J([0,1,9]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IKeybindingService=void 0,e.IKeybindingService=b.createDecorator("keybindingService")}),define(Q[251],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.KeybindingResolver=void 0;class b{constructor(S,C,d){this._log=d,this._defaultKeybindings=S,this._defaultBoundCommands=new Map;for(let g=0,p=S.length;g=0;a--)this._isTargetedForRemoval(S[a],c,o,p,s)&&S.splice(a,1)}return S.concat(d)}_addKeyPress(S,C){const d=this._map.get(S);if(typeof d=="undefined"){this._map.set(S,[C]),this._addToLookupMap(C);return}for(let g=d.length-1;g>=0;g--){let p=d[g];if(p.command!==C.command){const c=p.keypressParts.length>1,o=C.keypressParts.length>1;c&&o&&p.keypressParts[1]!==C.keypressParts[1]||b.whenIsEntirelyIncluded(p.when,C.when)&&this._removeFromLookupMap(p)}}d.push(C),this._addToLookupMap(C)}_addToLookupMap(S){if(!!S.command){let C=this._lookupMap.get(S.command);typeof C=="undefined"?(C=[S],this._lookupMap.set(S.command,C)):C.push(S)}}_removeFromLookupMap(S){if(!!S.command){let C=this._lookupMap.get(S.command);if(typeof C!="undefined"){for(let d=0,g=C.length;dc.type===9?c.expr:[c];let p=g(d).concat(g(C));for(let c=0;c1&&p.keypressParts[1]!==null?(this._log(`\\ From ${g.length} keybinding entries, matched chord, when: ${N(p.when)}, source: ${M(p)}.`),{enterChord:!0,leaveChord:!1,commandId:null,commandArgs:null,bubble:!1}):(this._log(`\\ From ${g.length} keybinding entries, matched ${p.command}, when: ${N(p.when)}, source: ${M(p)}.`),{enterChord:!1,leaveChord:p.keypressParts.length>1,commandId:p.command,commandArgs:p.commandArgs,bubble:p.bubble}):(this._log(`\\ From ${g.length} keybinding entries, no when clauses matched the context.`),null)}_findCommand(S,C){for(let d=C.length-1;d>=0;d--){let g=C[d];if(!!b.contextMatchesRules(S,g.when))return g}return null}static contextMatchesRules(S,C){return C?C.evaluate(S):!0}}e.KeybindingResolver=b;function N(w){return w?`${w.serialize()}`:"no when condition"}function M(w){return w.extensionId?w.isBuiltinExtension?`built-in extension ${w.extensionId}`:`user extension ${w.extensionId}`:w.isDefault?"built-in":"user"}}),define(Q[553],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.removeElementsAfterNulls=e.ResolvedKeybindingItem=void 0;class b{constructor(w,S,C,d,g,p,c){this.resolvedKeybinding=w,this.keypressParts=w?N(w.getDispatchParts()):[],w&&this.keypressParts.length===0&&(this.keypressParts=N(w.getSingleModifierDispatchParts())),this.bubble=S?S.charCodeAt(0)===94:!1,this.command=this.bubble?S.substr(1):S,this.commandArgs=C,this.when=d,this.isDefault=g,this.extensionId=p,this.isBuiltinExtension=c}}e.ResolvedKeybindingItem=b;function N(M){let w=[];for(let S=0,C=M.length;Sthis.layout()))}setContainer(C,d){this.contextView.setContainer(C,d||1)}showContextView(C,d,g){d?d!==this.container&&(this.container=d,this.setContainer(d,g?3:2)):this.container!==this.layoutService.container&&(this.container=this.layoutService.container,this.setContainer(this.container,1)),this.contextView.show(C);const p=N.toDisposable(()=>{this.currentViewDisposable===p&&this.hideContextView()});return this.currentViewDisposable=p,p}getContextViewElement(){return this.contextView.getViewElement()}layout(){this.contextView.layout()}hideContextView(C){this.contextView.hide(C)}};w=Me([_e(0,M.ILayoutService)],w),e.ContextViewService=w}),define(Q[77],J([0,1,9,2,6]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.LogService=e.ConsoleLogger=e.AbstractLogger=e.DEFAULT_LOG_LEVEL=e.LogLevel=e.ILogService=void 0,e.ILogService=b.createDecorator("logService");var w;(function(g){g[g.Trace=0]="Trace",g[g.Debug=1]="Debug",g[g.Info=2]="Info",g[g.Warning=3]="Warning",g[g.Error=4]="Error",g[g.Critical=5]="Critical",g[g.Off=6]="Off"})(w=e.LogLevel||(e.LogLevel={})),e.DEFAULT_LOG_LEVEL=w.Info;class S extends N.Disposable{constructor(){super(...arguments);this.level=e.DEFAULT_LOG_LEVEL,this._onDidChangeLogLevel=this._register(new M.Emitter)}setLevel(p){this.level!==p&&(this.level=p,this._onDidChangeLogLevel.fire(this.level))}getLevel(){return this.level}}e.AbstractLogger=S;class C extends S{constructor(p=e.DEFAULT_LOG_LEVEL){super();this.setLevel(p)}trace(p,...c){this.getLevel()<=w.Trace&&console.log("%cTRACE","color: #888",p,...c)}debug(p,...c){this.getLevel()<=w.Debug&&console.log("%cDEBUG","background: #eee; color: #888",p,...c)}info(p,...c){this.getLevel()<=w.Info&&console.log("%c INFO","color: #33f",p,...c)}error(p,...c){this.getLevel()<=w.Error&&console.log("%c ERR","color: #f33",p,...c)}dispose(){}}e.ConsoleLogger=C;class d extends N.Disposable{constructor(p){super();this.logger=p,this._register(p)}getLevel(){return this.logger.getLevel()}trace(p,...c){this.logger.trace(p,...c)}debug(p,...c){this.logger.debug(p,...c)}info(p,...c){this.logger.info(p,...c)}error(p,...c){this.logger.error(p,...c)}}e.LogService=d}),define(Q[252],J([0,1,15,2,201,294,3,18,41,389,36,137,8,19,77,81,12]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.EditorWorkerClient=e.EditorWorkerHost=e.EditorWorkerServiceImpl=void 0;const i=60*1e3,n=5*60*1e3;function t(L,I){let k=L.getModel(I);return!(!k||k.isTooLargeForSyncing())}let l=class extends N.Disposable{constructor(I,k,E){super();this._modelService=I,this._workerManager=this._register(new m(this._modelService)),this._logService=E,this._register(C.LinkProviderRegistry.register("*",{provideLinks:(T,O)=>t(this._modelService,T.uri)?this._workerManager.withWorker().then(A=>A.computeLinks(T.uri)).then(A=>A&&{links:A}):Promise.resolve({links:[]})})),this._register(C.CompletionProviderRegistry.register("*",new h(this._workerManager,k,this._modelService)))}dispose(){super.dispose()}canComputeDiff(I,k){return t(this._modelService,I)&&t(this._modelService,k)}computeDiff(I,k,E,T){return this._workerManager.withWorker().then(O=>O.computeDiff(I,k,E,T))}computeMoreMinimalEdits(I,k){if(s.isNonEmptyArray(k)){if(!t(this._modelService,I))return Promise.resolve(k);const E=u.StopWatch.create(!0),T=this._workerManager.withWorker().then(O=>O.computeMoreMinimalEdits(I,k));return T.finally(()=>this._logService.trace("FORMAT#computeMoreMinimalEdits",I.toString(!0),E.elapsed())),Promise.race([T,b.timeout(1e3).then(()=>k)])}else return Promise.resolve(void 0)}canNavigateValueSet(I){return t(this._modelService,I)}navigateValueSet(I,k,E){return this._workerManager.withWorker().then(T=>T.navigateValueSet(I,k,E))}canComputeWordRanges(I){return t(this._modelService,I)}computeWordRanges(I,k){return this._workerManager.withWorker().then(E=>E.computeWordRanges(I,k))}};l=Me([_e(0,p.IModelService),_e(1,c.ITextResourceConfigurationService),_e(2,a.ILogService)],l),e.EditorWorkerServiceImpl=l;class h{constructor(I,k,E){this._debugDisplayName="wordbasedCompletions",this._workerManager=I,this._configurationService=k,this._modelService=E}provideCompletionItems(I,k){return Ie(this,void 0,void 0,function*(){const E=this._configurationService.getValue(I.uri,k,"editor");if(!!E.wordBasedSuggestions){const T=[];if(E.wordBasedSuggestionsMode==="currentDocument")t(this._modelService,I.uri)&&T.push(I.uri);else for(const W of this._modelService.getModels())!t(this._modelService,W.uri)||(W===I?T.unshift(W.uri):(E.wordBasedSuggestionsMode==="allDocuments"||W.getLanguageIdentifier().id===I.getLanguageIdentifier().id)&&T.push(W.uri));if(T.length!==0){const O=d.LanguageConfigurationRegistry.getWordDefinition(I.getLanguageIdentifier().id),A=I.getWordAtPosition(k),B=A?new S.Range(k.lineNumber,A.startColumn,k.lineNumber,A.endColumn):S.Range.fromPositions(k),F=B.setEndPosition(k.lineNumber,k.column),R=yield(yield this._workerManager.withWorker()).textualSuggest(T,A==null?void 0:A.word,O);if(!!R)return{duration:R.duration,suggestions:R.words.map(W=>({kind:18,label:W,insertText:W,range:{insert:F,replace:B}}))}}}})}}class m extends N.Disposable{constructor(I){super();this._modelService=I,this._editorWorkerClient=null,this._lastWorkerUsedTime=new Date().getTime(),this._register(new b.IntervalTimer).cancelAndSet(()=>this._checkStopIdleWorker(),Math.round(n/2)),this._register(this._modelService.onModelRemoved(E=>this._checkStopEmptyWorker()))}dispose(){this._editorWorkerClient&&(this._editorWorkerClient.dispose(),this._editorWorkerClient=null),super.dispose()}_checkStopEmptyWorker(){!this._editorWorkerClient||this._modelService.getModels().length===0&&(this._editorWorkerClient.dispose(),this._editorWorkerClient=null)}_checkStopIdleWorker(){!this._editorWorkerClient||new Date().getTime()-this._lastWorkerUsedTime>n&&(this._editorWorkerClient.dispose(),this._editorWorkerClient=null)}withWorker(){return this._lastWorkerUsedTime=new Date().getTime(),this._editorWorkerClient||(this._editorWorkerClient=new y(this._modelService,!1,"editorWorkerService")),Promise.resolve(this._editorWorkerClient)}}class _ extends N.Disposable{constructor(I,k,E){super();if(this._syncedModels=Object.create(null),this._syncedModelsLastUsedTime=Object.create(null),this._proxy=I,this._modelService=k,!E){let T=new b.IntervalTimer;T.cancelAndSet(()=>this._checkStopModelSync(),Math.round(i/2)),this._register(T)}}dispose(){for(let I in this._syncedModels)N.dispose(this._syncedModels[I]);this._syncedModels=Object.create(null),this._syncedModelsLastUsedTime=Object.create(null),super.dispose()}ensureSyncedResources(I){for(const k of I){let E=k.toString();this._syncedModels[E]||this._beginModelSync(k),this._syncedModels[E]&&(this._syncedModelsLastUsedTime[E]=new Date().getTime())}}_checkStopModelSync(){let I=new Date().getTime(),k=[];for(let E in this._syncedModelsLastUsedTime)I-this._syncedModelsLastUsedTime[E]>i&&k.push(E);for(const E of k)this._stopModelSync(E)}_beginModelSync(I){let k=this._modelService.getModel(I);if(!!k&&!k.isTooLargeForSyncing()){let E=I.toString();this._proxy.acceptNewModel({url:k.uri.toString(),lines:k.getLinesContent(),EOL:k.getEOL(),versionId:k.getVersionId()});const T=new N.DisposableStore;T.add(k.onDidChangeContent(O=>{this._proxy.acceptModelChanged(E.toString(),O)})),T.add(k.onWillDispose(()=>{this._stopModelSync(E)})),T.add(N.toDisposable(()=>{this._proxy.acceptRemovedModel(E)})),this._syncedModels[E]=T}}_stopModelSync(I){let k=this._syncedModels[I];delete this._syncedModels[I],delete this._syncedModelsLastUsedTime[I],N.dispose(k)}}class f{constructor(I){this._instance=I,this._proxyObj=Promise.resolve(this._instance)}dispose(){this._instance.dispose()}getProxyObject(){return this._proxyObj}}class v{constructor(I){this._workerClient=I}fhr(I,k){return this._workerClient.fhr(I,k)}}e.EditorWorkerHost=v;class y extends N.Disposable{constructor(I,k,E){super();this._disposed=!1,this._modelService=I,this._keepIdleModels=k,this._workerFactory=new w.DefaultWorkerFactory(E),this._worker=null,this._modelManager=null}fhr(I,k){throw new Error("Not implemented!")}_getOrCreateWorker(){if(!this._worker)try{this._worker=this._register(new M.SimpleWorkerClient(this._workerFactory,"vs/editor/common/services/editorSimpleWorker",new v(this)))}catch(I){M.logOnceWebWorkerWarning(I),this._worker=new f(new g.EditorSimpleWorker(new v(this),null))}return this._worker}_getProxy(){return this._getOrCreateWorker().getProxyObject().then(void 0,I=>(M.logOnceWebWorkerWarning(I),this._worker=new f(new g.EditorSimpleWorker(new v(this),null)),this._getOrCreateWorker().getProxyObject()))}_getOrCreateModelManager(I){return this._modelManager||(this._modelManager=this._register(new _(I,this._modelService,this._keepIdleModels))),this._modelManager}_withSyncedResources(I){return this._disposed?Promise.reject(r.canceled()):this._getProxy().then(k=>(this._getOrCreateModelManager(k).ensureSyncedResources(I),k))}computeDiff(I,k,E,T){return this._withSyncedResources([I,k]).then(O=>O.computeDiff(I.toString(),k.toString(),E,T))}computeMoreMinimalEdits(I,k){return this._withSyncedResources([I]).then(E=>E.computeMoreMinimalEdits(I.toString(),k))}computeLinks(I){return this._withSyncedResources([I]).then(k=>k.computeLinks(I.toString()))}textualSuggest(I,k,E){return Ie(this,void 0,void 0,function*(){const T=yield this._withSyncedResources(I),O=E.source,A=o.regExpFlags(E);return T.textualSuggest(I.map(B=>B.toString()),k,O,A)})}computeWordRanges(I,k){return this._withSyncedResources([I]).then(E=>{let T=this._modelService.getModel(I);if(!T)return Promise.resolve(null);let O=d.LanguageConfigurationRegistry.getWordDefinition(T.getLanguageIdentifier().id),A=O.source,B=o.regExpFlags(O);return E.computeWordRanges(I.toString(),k,A,B)})}navigateValueSet(I,k,E){return this._withSyncedResources([I]).then(T=>{let O=this._modelService.getModel(I);if(!O)return null;let A=d.LanguageConfigurationRegistry.getWordDefinition(O.getLanguageIdentifier().id),B=A.source,F=o.regExpFlags(A);return T.navigateValueSet(I.toString(),k,E,B,F)})}dispose(){super.dispose(),this._disposed=!0}}e.EditorWorkerClient=y}),define(Q[253],J([0,1,18,77,135]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.toMultilineTokens2=e.SemanticTokensProviderStyling=void 0;class w{constructor(p,c,o){this._legend=p,this._themeService=c,this._logService=o,this._hashTable=new d,this._hasWarnedOverlappingTokens=!1}getMetadata(p,c,o){const s=this._hashTable.get(p,c,o.id);let a;if(s)a=s.metadata,this._logService.getLevel()===N.LogLevel.Trace&&this._logService.trace(`SemanticTokensProviderStyling [CACHED] ${p} / ${c}: foreground ${b.TokenMetadata.getForeground(a)}, fontStyle ${b.TokenMetadata.getFontStyle(a).toString(2)}`);else{let u=this._legend.tokenTypes[p];const r=[];if(u){let i=c;for(let t=0;i>0&&t>1;i>0&&this._logService.getLevel()===N.LogLevel.Trace&&(this._logService.trace(`SemanticTokensProviderStyling: unknown token modifier index: ${c.toString(2)} for legend: ${JSON.stringify(this._legend.tokenModifiers)}`),r.push("not-in-legend"));const n=this._themeService.getColorTheme().getTokenStyleMetadata(u,r,o.language);typeof n=="undefined"?a=2147483647:(a=0,typeof n.italic!="undefined"&&(a|=(n.italic?1:0)<<11|1),typeof n.bold!="undefined"&&(a|=(n.bold?2:0)<<11|2),typeof n.underline!="undefined"&&(a|=(n.underline?4:0)<<11|4),n.foreground&&(a|=n.foreground<<14|8),a===0&&(a=2147483647))}else this._logService.getLevel()===N.LogLevel.Trace&&this._logService.trace(`SemanticTokensProviderStyling: unknown token type index: ${p} for legend: ${JSON.stringify(this._legend.tokenTypes)}`),a=2147483647,u="not-in-legend";this._hashTable.add(p,c,o.id,a),this._logService.getLevel()===N.LogLevel.Trace&&this._logService.trace(`SemanticTokensProviderStyling ${p} (${u}) / ${c} (${r.join(" ")}): foreground ${b.TokenMetadata.getForeground(a)}, fontStyle ${b.TokenMetadata.getFontStyle(a).toString(2)}`)}return a}warnOverlappingSemanticTokens(p,c){this._hasWarnedOverlappingTokens||(this._hasWarnedOverlappingTokens=!0,console.warn(`Overlapping semantic tokens detected at lineNumber ${p}, column ${c}`))}}e.SemanticTokensProviderStyling=w;function S(g,p,c){const o=g.data,s=g.data.length/5|0,a=Math.max(Math.ceil(s/1024),400),u=[];let r=0,i=1,n=0;for(;rt&&o[5*I]===0;)I--;if(I-1===t){let k=l;for(;k+1O&&(p.warnOverlappingSemanticTokens(T,O+1),v=this._growCount){const a=this._elements;this._currentLengthIndex++,this._currentLength=d._SIZES[this._currentLengthIndex],this._growCount=Math.round(this._currentLengthIndex+1{const d=this._foreignModuleHost?N.getAllMethodNames(this._foreignModuleHost):[];return C.loadForeignModule(this._foreignModuleId,this._foreignModuleCreateData,d).then(g=>{this._foreignModuleCreateData=null;const p=(s,a)=>C.fmr(s,a),c=(s,a)=>function(){const u=Array.prototype.slice.call(arguments,0);return a(s,u)};let o={};for(const s of g)o[s]=c(s,p);return o})})),this._foreignProxy}getProxy(){return this._getForeignProxy()}withSyncedResources(C){return this._withSyncedResources(C).then(d=>this.getProxy())}}}),define(Q[85],J([0,1,9,524,82]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IMarkerService=e.IMarkerData=e.MarkerSeverity=void 0;var w;(function(C){C[C.Hint=1]="Hint",C[C.Info=2]="Info",C[C.Warning=4]="Warning",C[C.Error=8]="Error"})(w=e.MarkerSeverity||(e.MarkerSeverity={})),function(C){function d(s,a){return a-s}C.compare=d;const g=Object.create(null);g[C.Error]=N.localize(0,null),g[C.Warning]=N.localize(1,null),g[C.Info]=N.localize(2,null);function p(s){return g[s]||""}C.toString=p;function c(s){switch(s){case M.default.Error:return C.Error;case M.default.Warning:return C.Warning;case M.default.Info:return C.Info;case M.default.Ignore:return C.Hint}}C.fromSeverity=c;function o(s){switch(s){case C.Error:return M.default.Error;case C.Warning:return M.default.Warning;case C.Info:return M.default.Info;case C.Hint:return M.default.Ignore}}C.toSeverity=o}(w=e.MarkerSeverity||(e.MarkerSeverity={}));var S;(function(C){const d="";function g(c){return p(c,!0)}C.makeKey=g;function p(c,o){let s=[d];return c.source?s.push(c.source.replace("\xA6","\\\xA6")):s.push(d),c.code?typeof c.code=="string"?s.push(c.code.replace("\xA6","\\\xA6")):s.push(c.code.value.replace("\xA6","\\\xA6")):s.push(d),c.severity!==void 0&&c.severity!==null?s.push(w.toString(c.severity)):s.push(d),c.message&&o?s.push(c.message.replace("\xA6","\\\xA6")):s.push(d),c.startLineNumber!==void 0&&c.startLineNumber!==null?s.push(c.startLineNumber.toString()):s.push(d),c.startColumn!==void 0&&c.startColumn!==null?s.push(c.startColumn.toString()):s.push(d),c.endLineNumber!==void 0&&c.endLineNumber!==null?s.push(c.endLineNumber.toString()):s.push(d),c.endColumn!==void 0&&c.endColumn!==null?s.push(c.endColumn.toString()):s.push(d),s.push(d),s.join("\xA6")}C.makeKeyOptionalMessage=p})(S=e.IMarkerData||(e.IMarkerData={})),e.IMarkerService=b.createDecorator("markerService")}),define(Q[557],J([0,1,85,24,6,2,3,8,19,9,74,71]),function(q,e,b,N,M,w,S,C,d,g,p,c){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IMarkerNavigationService=e.MarkerList=e.MarkerCoordinate=void 0;class o{constructor(r,i,n){this.marker=r,this.index=i,this.total=n}}e.MarkerCoordinate=o;let s=class Tt{constructor(r,i){this._markerService=i,this._onDidChange=new M.Emitter,this.onDidChange=this._onDidChange.event,this._dispoables=new w.DisposableStore,this._markers=[],this._nextIdx=-1,N.URI.isUri(r)?this._resourceFilter=t=>t.toString()===r.toString():r&&(this._resourceFilter=r);const n=()=>{this._markers=this._markerService.read({resource:N.URI.isUri(r)?r:void 0,severities:b.MarkerSeverity.Error|b.MarkerSeverity.Warning|b.MarkerSeverity.Info}),typeof r=="function"&&(this._markers=this._markers.filter(t=>this._resourceFilter(t.resource))),this._markers.sort(Tt._compareMarker)};n(),this._dispoables.add(i.onMarkerChanged(t=>{(!this._resourceFilter||t.some(l=>this._resourceFilter(l)))&&(n(),this._nextIdx=-1,this._onDidChange.fire())}))}dispose(){this._dispoables.dispose(),this._onDidChange.dispose()}matches(r){return!this._resourceFilter&&!r?!0:!this._resourceFilter||!r?!1:this._resourceFilter(r)}get selected(){const r=this._markers[this._nextIdx];return r&&new o(r,this._nextIdx+1,this._markers.length)}_initIdx(r,i,n){let t=!1,l=this._markers.findIndex(h=>h.resource.toString()===r.uri.toString());l<0&&(l=d.binarySearch(this._markers,{resource:r.uri},(h,m)=>C.compare(h.resource.toString(),m.resource.toString())),l<0&&(l=~l));for(let h=l;ht.resource.toString()===r.toString());if(!(n<0)){for(;nn[1])}}class p{constructor(s){this.errors=0,this.infos=0,this.warnings=0,this.unknowns=0,this._data=new C.ResourceMap,this._service=s,this._subscription=s.onMarkerChanged(this._update,this)}dispose(){this._subscription.dispose()}_update(s){for(const a of s){const u=this._data.get(a);u&&this._substract(u);const r=this._resourceStats(a);this._add(r),this._data.set(a,r)}}_resourceStats(s){const a={errors:0,warnings:0,infos:0,unknowns:0};if(s.scheme===N.Schemas.inMemory||s.scheme===N.Schemas.walkThrough||s.scheme===N.Schemas.walkThroughSnippet)return a;for(const{severity:u}of this._service.read({resource:s}))u===S.MarkerSeverity.Error?a.errors+=1:u===S.MarkerSeverity.Warning?a.warnings+=1:u===S.MarkerSeverity.Info?a.infos+=1:a.unknowns+=1;return a}_substract(s){this.errors-=s.errors,this.warnings-=s.warnings,this.infos-=s.infos,this.unknowns-=s.unknowns}_add(s){this.errors+=s.errors,this.warnings+=s.warnings,this.infos+=s.infos,this.unknowns+=s.unknowns}}class c{constructor(){this._onMarkerChanged=new w.Emitter,this.onMarkerChanged=w.Event.debounce(this._onMarkerChanged.event,c._debouncer,0),this._data=new g,this._stats=new p(this)}dispose(){this._stats.dispose(),this._onMarkerChanged.dispose()}remove(s,a){for(const u of a||[])this.changeOne(s,u,[])}changeOne(s,a,u){if(b.isFalsyOrEmpty(u))this._data.delete(a,s)&&this._onMarkerChanged.fire([a]);else{const r=[];for(const i of u){const n=c._toMarker(s,a,i);n&&r.push(n)}this._data.set(a,s,r),this._onMarkerChanged.fire([a])}}static _toMarker(s,a,u){let{code:r,severity:i,message:n,source:t,startLineNumber:l,startColumn:h,endLineNumber:m,endColumn:_,relatedInformation:f,tags:v}=u;if(!!n)return l=l>0?l:1,h=h>0?h:1,m=m>=l?m:l,_=_>0?_:h,{resource:a,owner:s,code:r,severity:i,message:n,source:t,startLineNumber:l,startColumn:h,endLineNumber:m,endColumn:_,relatedInformation:f,tags:v}}read(s=Object.create(null)){let{owner:a,resource:u,severities:r,take:i}=s;if((!i||i<0)&&(i=-1),a&&u){const n=this._data.get(u,a);if(n){const t=[];for(const l of n)if(c._accept(l,r)){const h=t.push(l);if(i>0&&h===i)break}return t}else return[]}else if(!a&&!u){const n=[];for(let t of this._data.values())for(let l of t)if(c._accept(l,r)){const h=n.push(l);if(i>0&&h===i)return n}return n}else{const n=this._data.values(u!=null?u:a),t=[];for(const l of n)for(const h of l)if(c._accept(h,r)){const m=t.push(h);if(i>0&&m===i)return t}return t}}static _accept(s,a){return a===void 0||(a&s.severity)===s.severity}static _debouncer(s,a){s||(c._dedupeMap=new C.ResourceMap,s=[]);for(const u of a)c._dedupeMap.has(u)||(c._dedupeMap.set(u,!0),s.push(u));return s}}e.MarkerService=c}),define(Q[32],J([0,1,82,9]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.NoOpNotification=e.INotificationService=e.Severity=void 0,e.Severity=b.default,e.INotificationService=N.createDecorator("notificationService");class M{}e.NoOpNotification=M}),define(Q[58],J([0,1,2,8,24,9]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.matchesScheme=e.NullOpenerService=e.IOpenerService=void 0,e.IOpenerService=w.createDecorator("openerService"),e.NullOpenerService=Object.freeze({_serviceBrand:void 0,registerOpener(){return b.Disposable.None},registerValidator(){return b.Disposable.None},registerExternalUriResolver(){return b.Disposable.None},setDefaultExternalOpener(){},registerExternalOpener(){return b.Disposable.None},open(){return Ie(this,void 0,void 0,function*(){return!1})},resolveExternalUri(C){return Ie(this,void 0,void 0,function*(){return{resolved:C,dispose(){}}})}});function S(C,d){return M.URI.isUri(C)?N.equalsIgnoreCase(C.scheme,d):N.startsWithIgnoreCase(C,d+":")}e.matchesScheme=S}),define(Q[140],J([0,1,290,58,57,12,243,6,2,18]),function(q,e,b,N,M,w,S,C,d,g){"use strict";var p;Object.defineProperty(e,"__esModule",{value:!0}),e.MarkdownRenderer=void 0;let c=class Rt{constructor(s,a,u){this._options=s,this._modeService=a,this._openerService=u,this._onDidRenderAsync=new C.Emitter,this.onDidRenderAsync=this._onDidRenderAsync.event}dispose(){this._onDidRenderAsync.dispose()}render(s,a,u){const r=new d.DisposableStore;let i;return s?i=b.renderMarkdown(s,Object.assign(Object.assign({},this._getRenderOptions(r)),a),u):i=document.createElement("span"),{element:i,dispose:()=>r.dispose()}}_getRenderOptions(s){return{baseUrl:this._options.baseUrl,codeBlockRenderer:(a,u)=>Ie(this,void 0,void 0,function*(){var r,i,n,t;let l;a?l=this._modeService.getModeIdForLanguageName(a):this._options.editor&&(l=(r=this._options.editor.getModel())===null||r===void 0?void 0:r.getLanguageIdentifier().language),l||(l="plaintext"),this._modeService.triggerMode(l);const h=(i=yield g.TokenizationRegistry.getPromise(l))!==null&&i!==void 0?i:void 0,m=document.createElement("span");m.innerHTML=(t=(n=Rt._ttpTokenizer)===null||n===void 0?void 0:n.createHTML(u,h))!==null&&t!==void 0?t:S.tokenizeToString(u,h);let _=this._options.codeBlockFontFamily;return this._options.editor&&(_=this._options.editor.getOption(38).fontFamily),_&&(m.style.fontFamily=_),m}),asyncRenderCallback:()=>this._onDidRenderAsync.fire(),actionHandler:{callback:a=>this._openerService.open(a,{fromUserGesture:!0,allowContributedOpeners:!0}).catch(w.onUnexpectedError),disposeables:s}}}};c._ttpTokenizer=(p=window.trustedTypes)===null||p===void 0?void 0:p.createPolicy("tokenizeToString",{createHTML(o,s){return S.tokenizeToString(o,s)}}),c=Me([_e(1,M.IModeService),_e(2,N.IOpenerService)],c),e.MarkdownRenderer=c}),define(Q[559],J([0,1,7,23,71,51,199,43,44,24,28,26,531,58]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.OpenerService=void 0;let a=class{constructor(n){this._commandService=n}open(n){return Ie(this,void 0,void 0,function*(){if(!s.matchesScheme(n,C.Schemas.command))return!1;typeof n=="string"&&(n=g.URI.parse(n));let t=[];try{t=S.parse(decodeURIComponent(n.query))}catch(l){try{t=S.parse(n.query)}catch(h){}}return Array.isArray(t)||(t=[t]),yield this._commandService.executeCommand(n.path,...t),!0})}};a=Me([_e(0,c.ICommandService)],a);let u=class{constructor(n){this._editorService=n}open(n,t){return Ie(this,void 0,void 0,function*(){typeof n=="string"&&(n=g.URI.parse(n));let l;const h=/^L?(\d+)(?:,(\d+))?/.exec(n.fragment);return h&&(l={startLineNumber:parseInt(h[1]),startColumn:h[2]?parseInt(h[2]):1},n=n.with({fragment:""})),n.scheme===C.Schemas.file&&(n=d.normalizePath(n)),yield this._editorService.openCodeEditor({resource:n,options:Object.assign({selection:l,context:(t==null?void 0:t.fromUserGesture)?o.EditorOpenContext.USER:o.EditorOpenContext.API},t==null?void 0:t.editorOptions)},this._editorService.getFocusedCodeEditor(),t==null?void 0:t.openToSide),!0})}};u=Me([_e(0,p.ICodeEditorService)],u);let r=class{constructor(n,t){this._openers=new M.LinkedList,this._validators=new M.LinkedList,this._resolvers=new M.LinkedList,this._resolvedUriTargets=new w.ResourceMap(l=>l.with({path:null,fragment:null,query:null}).toString()),this._externalOpeners=new M.LinkedList,this._defaultExternalOpener={openExternal:l=>Ie(this,void 0,void 0,function*(){return s.matchesScheme(l,C.Schemas.http)||s.matchesScheme(l,C.Schemas.https)?b.windowOpenNoOpener(l):window.location.href=l,!0})},this._openers.push({open:(l,h)=>Ie(this,void 0,void 0,function*(){return(h==null?void 0:h.openExternal)||s.matchesScheme(l,C.Schemas.mailto)||s.matchesScheme(l,C.Schemas.http)||s.matchesScheme(l,C.Schemas.https)?(yield this._doOpenExternal(l,h),!0):!1})}),this._openers.push(new a(t)),this._openers.push(new u(n))}registerOpener(n){return{dispose:this._openers.unshift(n)}}registerValidator(n){return{dispose:this._validators.push(n)}}registerExternalUriResolver(n){return{dispose:this._resolvers.push(n)}}setDefaultExternalOpener(n){this._defaultExternalOpener=n}registerExternalOpener(n){return{dispose:this._externalOpeners.push(n)}}open(n,t){var l;return Ie(this,void 0,void 0,function*(){const h=typeof n=="string"?g.URI.parse(n):n,m=(l=this._resolvedUriTargets.get(h))!==null&&l!==void 0?l:h;for(const _ of this._validators)if(!(yield _.shouldOpen(m)))return!1;for(const _ of this._openers)if(yield _.open(n,t))return!0;return!1})}resolveExternalUri(n,t){return Ie(this,void 0,void 0,function*(){for(const l of this._resolvers){const h=yield l.resolveExternalUri(n,t);if(h)return this._resolvedUriTargets.has(h.resolved)||this._resolvedUriTargets.set(h.resolved,n),h}return{resolved:n,dispose:()=>{}}})}_doOpenExternal(n,t){return Ie(this,void 0,void 0,function*(){const l=typeof n=="string"?g.URI.parse(n):n,{resolved:h}=yield this.resolveExternalUri(l,t);let m;if(typeof n=="string"&&l.toString()===h.toString()?m=n:m=encodeURI(h.toString(!0)),t==null?void 0:t.allowContributedOpeners){const _=typeof(t==null?void 0:t.allowContributedOpeners)=="string"?t==null?void 0:t.allowContributedOpeners:void 0;for(const f of this._externalOpeners)if(yield f.openExternal(m,{sourceUri:l,preferredOpenerId:_},N.CancellationToken.None))return!0}return this._defaultExternalOpener.openExternal(m,{sourceUri:l},N.CancellationToken.None)})}dispose(){this._validators.clear()}};r=Me([_e(0,p.ICodeEditorService),_e(1,c.ICommandService)],r),e.OpenerService=r}),define(Q[560],J([0,1,7,73,2,228,408,140,58,19]),function(q,e,b,N,M,w,S,C,d,g){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ModesGlyphHoverWidget=void 0;class p{constructor(s){this._editor=s,this._lineNumber=-1,this._result=[]}setLineNumber(s){this._lineNumber=s,this._result=[]}clearResult(){this._result=[]}computeSync(){const s=r=>({value:r}),a=this._editor.getLineDecorations(this._lineNumber),u=[];if(!a)return u;for(const r of a)if(!!r.options.glyphMarginClassName){const i=r.options.glyphMarginHoverMessage;!i||N.isEmptyMarkdownString(i)||u.push(...g.asArray(i).map(s))}return u}onResult(s,a){this._result=this._result.concat(s)}getResult(){return this._result}getResultWithLoadingMessage(){return this.getResult()}}class c extends S.GlyphHoverWidget{constructor(s,a,u=d.NullOpenerService){super(c.ID,s);this._renderDisposeables=this._register(new M.DisposableStore),this._messages=[],this._lastLineNumber=-1,this._markdownRenderer=this._register(new C.MarkdownRenderer({editor:this._editor},a,u)),this._computer=new p(this._editor),this._hoverOperation=new w.HoverOperation(this._computer,r=>this._withResult(r),void 0,r=>this._withResult(r),300)}dispose(){this._hoverOperation.cancel(),super.dispose()}onModelDecorationsChanged(){this.isVisible&&(this._hoverOperation.cancel(),this._computer.clearResult(),this._hoverOperation.start(0))}startShowingAt(s){this._lastLineNumber!==s&&(this._hoverOperation.cancel(),this.hide(),this._lastLineNumber=s,this._computer.setLineNumber(s),this._hoverOperation.start(0))}hide(){this._lastLineNumber=-1,this._hoverOperation.cancel(),super.hide()}_withResult(s){this._messages=s,this._messages.length>0?this._renderMessages(this._lastLineNumber,this._messages):this.hide()}_renderMessages(s,a){this._renderDisposeables.clear();const u=document.createDocumentFragment();for(const r of a){const i=this._markdownRenderer.render(r.value);this._renderDisposeables.add(i),u.appendChild(b.$("div.hover-row",void 0,i.element))}this.updateContents(u),this.showAt(s)}}e.ModesGlyphHoverWidget=c,c.ID="editor.contrib.modesGlyphHoverWidget"}),define(Q[254],J([0,1,509,2,7,61,140,73,27,6,231,9]),function(q,e,b,N,M,w,S,C,d,g,p,c){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SuggestDetailsOverlay=e.SuggestDetailsWidget=e.canExpandCompletionItem=void 0;function o(u){return!!u&&Boolean(u.completion.documentation||u.completion.detail&&u.completion.detail!==u.completion.label)}e.canExpandCompletionItem=o;let s=class{constructor(r,i){this._editor=r,this._onDidClose=new g.Emitter,this.onDidClose=this._onDidClose.event,this._onDidChangeContents=new g.Emitter,this.onDidChangeContents=this._onDidChangeContents.event,this._disposables=new N.DisposableStore,this._renderDisposeable=new N.DisposableStore,this._borderWidth=1,this._size=new M.Dimension(330,0),this.domNode=M.$(".suggest-details"),this.domNode.classList.add("no-docs"),this._markdownRenderer=i.createInstance(S.MarkdownRenderer,{editor:r}),this._body=M.$(".body"),this._scrollbar=new w.DomScrollableElement(this._body,{}),M.append(this.domNode,this._scrollbar.getDomNode()),this._disposables.add(this._scrollbar),this._header=M.append(this._body,M.$(".header")),this._close=M.append(this._header,M.$("span"+d.Codicon.close.cssSelector)),this._close.title=b.localize(0,null),this._type=M.append(this._header,M.$("p.type")),this._docs=M.append(this._body,M.$("p.docs")),this._configureFont(),this._disposables.add(this._editor.onDidChangeConfiguration(n=>{n.hasChanged(38)&&this._configureFont()}))}dispose(){this._disposables.dispose(),this._renderDisposeable.dispose()}_configureFont(){const r=this._editor.getOptions(),i=r.get(38),n=i.fontFamily,t=r.get(102)||i.fontSize,l=r.get(103)||i.lineHeight,h=i.fontWeight,m=`${t}px`,_=`${l}px`;this.domNode.style.fontSize=m,this.domNode.style.lineHeight=_,this.domNode.style.fontWeight=h,this.domNode.style.fontFeatureSettings=i.fontFeatureSettings,this._type.style.fontFamily=n,this._close.style.height=_,this._close.style.width=_}getLayoutInfo(){const r=this._editor.getOption(103)||this._editor.getOption(38).lineHeight,i=this._borderWidth,n=i*2;return{lineHeight:r,borderWidth:i,borderHeight:n,verticalPadding:22,horizontalPadding:14}}renderLoading(){this._type.textContent=b.localize(1,null),this._docs.textContent="",this.domNode.classList.remove("no-docs","no-type"),this.layout(this.size.width,this.getLayoutInfo().lineHeight*2),this._onDidChangeContents.fire(this)}renderItem(r,i){var n;this._renderDisposeable.clear();let{detail:t,documentation:l}=r.completion;if(i){let h="";h+=`score: ${r.score[0]}${r.word?`, compared '${r.completion.filterText&&r.completion.filterText+" (filterText)"||typeof r.completion.label=="string"?r.completion.label:r.completion.label.name}' with '${r.word}'`:" (no prefix)"} +`,h+=`distance: ${r.distance}, see localityBonus-setting +`,h+=`index: ${r.idx}, based on ${r.completion.sortText&&`sortText: "${r.completion.sortText}"`||"label"} +`,h+=`commit characters: ${(n=r.completion.commitCharacters)===null||n===void 0?void 0:n.join("")} +`,l=new C.MarkdownString().appendCodeblock("empty",h),t=`Provider: ${r.provider._debugDisplayName}`}if(!i&&!o(r)){this.clearContents();return}if(this.domNode.classList.remove("no-docs","no-type"),t){const h=t.length>1e5?`${t.substr(0,1e5)}\u2026`:t;this._type.textContent=h,this._type.title=h,M.show(this._type),this._type.classList.toggle("auto-wrap",!/\r?\n^\s+/gmi.test(h))}else M.clearNode(this._type),this._type.title="",M.hide(this._type),this.domNode.classList.add("no-type");if(M.clearNode(this._docs),typeof l=="string")this._docs.classList.remove("markdown-docs"),this._docs.textContent=l;else if(l){this._docs.classList.add("markdown-docs"),M.clearNode(this._docs);const h=this._markdownRenderer.render(l);this._docs.appendChild(h.element),this._renderDisposeable.add(h),this._renderDisposeable.add(this._markdownRenderer.onDidRenderAsync(()=>{this.layout(this._size.width,this._type.clientHeight+this._docs.clientHeight),this._onDidChangeContents.fire(this)}))}this.domNode.style.userSelect="text",this.domNode.tabIndex=-1,this._close.onmousedown=h=>{h.preventDefault(),h.stopPropagation()},this._close.onclick=h=>{h.preventDefault(),h.stopPropagation(),this._onDidClose.fire()},this._body.scrollTop=0,this.layout(this._size.width,this._type.clientHeight+this._docs.clientHeight),this._onDidChangeContents.fire(this)}clearContents(){this.domNode.classList.add("no-docs"),this._type.textContent="",this._docs.textContent=""}get size(){return this._size}layout(r,i){const n=new M.Dimension(r,i);M.Dimension.equals(n,this._size)||(this._size=n,M.size(this.domNode,r,i)),this._scrollbar.scanDomNode()}scrollDown(r=8){this._body.scrollTop+=r}scrollUp(r=8){this._body.scrollTop-=r}scrollTop(){this._body.scrollTop=0}scrollBottom(){this._body.scrollTop=this._body.scrollHeight}pageDown(){this.scrollDown(80)}pageUp(){this.scrollUp(80)}set borderWidth(r){this._borderWidth=r}get borderWidth(){return this._borderWidth}};s=Me([_e(1,c.IInstantiationService)],s),e.SuggestDetailsWidget=s;class a{constructor(r,i){this.widget=r,this._editor=i,this._disposables=new N.DisposableStore,this._added=!1,this._resizable=new p.ResizableHTMLElement,this._resizable.domNode.classList.add("suggest-details-container"),this._resizable.domNode.appendChild(r.domNode),this._resizable.enableSashes(!1,!0,!0,!1);let n,t,l=0,h=0;this._disposables.add(this._resizable.onDidWillResize(()=>{n=this._topLeft,t=this._resizable.size})),this._disposables.add(this._resizable.onDidResize(m=>{if(n&&t){this.widget.layout(m.dimension.width,m.dimension.height);let _=!1;m.west&&(h=t.width-m.dimension.width,_=!0),m.north&&(l=t.height-m.dimension.height,_=!0),_&&this._applyTopLeft({top:n.top+l,left:n.left+h})}m.done&&(n=void 0,t=void 0,l=0,h=0,this._userSize=m.dimension)})),this._disposables.add(this.widget.onDidChangeContents(()=>{var m;this._anchorBox&&this._placeAtAnchor(this._anchorBox,(m=this._userSize)!==null&&m!==void 0?m:this.widget.size)}))}dispose(){this._disposables.dispose(),this.hide()}getId(){return"suggest.details"}getDomNode(){return this._resizable.domNode}getPosition(){return null}show(){this._added||(this._editor.addOverlayWidget(this),this.getDomNode().style.position="fixed",this._added=!0)}hide(r=!1){this._added&&(this._editor.removeOverlayWidget(this),this._added=!1,this._anchorBox=void 0,this._topLeft=void 0),r&&(this._userSize=void 0,this.widget.clearContents())}placeAtAnchor(r){var i;const n=M.getDomNodePagePosition(r);this._anchorBox=n,this._placeAtAnchor(this._anchorBox,(i=this._userSize)!==null&&i!==void 0?i:this.widget.size)}_placeAtAnchor(r,i){const n=M.getClientArea(document.body),t=this.widget.getLayoutInfo();let l,h,m=new M.Dimension(220,2*t.lineHeight),_=0,f=r.top,v=r.top+r.height-t.borderHeight,y,L,I=n.width-(r.left+r.width+t.borderWidth+t.horizontalPadding);_=-t.borderWidth+r.left+r.width,L=!0,l=new M.Dimension(I,n.height-r.top-t.borderHeight-t.verticalPadding),h=l.with(void 0,r.top+r.height-t.borderHeight-t.verticalPadding),i.width>I&&(r.left>I&&(I=r.left-t.borderWidth-t.horizontalPadding,L=!1,_=Math.max(t.horizontalPadding,r.left-i.width-t.borderWidth),l=l.with(I),h=l.with(void 0,h.height)),r.width>I*1.3&&n.height-(r.top+r.height)>r.height&&(I=r.width,_=r.left,f=-t.borderWidth+r.top+r.height,l=new M.Dimension(r.width-t.borderHeight,n.height-r.top-r.height-t.verticalPadding),h=l.with(void 0,r.top-t.verticalPadding),m=m.with(l.width)));let k=i.height,E=Math.max(l.height,h.height);k>E&&(k=E);let T;k<=l.height?(y=!0,T=l):(y=!1,T=h),this._applyTopLeft({left:_,top:y?f:v-k}),this.getDomNode().style.position="fixed",this._resizable.enableSashes(!y,L,y,!L),this._resizable.minSize=m,this._resizable.maxSize=T,this._resizable.layout(k,Math.min(T.width,i.width)),this.widget.layout(this._resizable.size.width,this._resizable.size.height)}_applyTopLeft(r){this._topLeft=r,this.getDomNode().style.left=`${this._topLeft.left}px`,this.getDomNode().style.top=`${this._topLeft.top}px`}}e.SuggestDetailsOverlay=a}),define(Q[59],J([0,1,9]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IEditorProgressService=e.Progress=void 0;class N{constructor(w){this.callback=w}report(w){this._value=w,this.callback(this._value)}}e.Progress=N,N.None=Object.freeze({report(){}}),e.IEditorProgressService=b.createDecorator("editorProgressService")}),define(Q[561],J([0,1,23,2,15]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.PickerQuickAccessProvider=e.TriggerAction=void 0;var w;(function(g){g[g.NO_ACTION=0]="NO_ACTION",g[g.CLOSE_PICKER=1]="CLOSE_PICKER",g[g.REFRESH_PICKER=2]="REFRESH_PICKER",g[g.REMOVE_ITEM=3]="REMOVE_ITEM"})(w=e.TriggerAction||(e.TriggerAction={}));function S(g){const p=g;return Array.isArray(p.items)}function C(g){const p=g;return!!p.picks&&p.additionalPicks instanceof Promise}class d extends N.Disposable{constructor(p,c){super();this.prefix=p,this.options=c}provide(p,c){var o;const s=new N.DisposableStore;p.canAcceptInBackground=!!((o=this.options)===null||o===void 0?void 0:o.canAcceptInBackground),p.matchOnLabel=p.matchOnDescription=p.matchOnDetail=p.sortByLabel=!1;let a;const u=s.add(new N.MutableDisposable),r=()=>Ie(this,void 0,void 0,function*(){const i=u.value=new N.DisposableStore;a==null||a.dispose(!0),p.busy=!1,a=new b.CancellationTokenSource(c);const n=a.token,t=p.value.substr(this.prefix.length).trim(),l=this.getPicks(t,i,n),h=(m,_)=>{var f;let v,y;if(S(m)?(v=m.items,y=m.active):v=m,v.length===0){if(_)return!1;t.length>0&&((f=this.options)===null||f===void 0?void 0:f.noResultsPick)&&(v=[this.options.noResultsPick])}return p.items=v,y&&(p.activeItems=[y]),!0};if(l!==null)if(C(l)){let m=!1,_=!1;yield Promise.all([(()=>Ie(this,void 0,void 0,function*(){yield M.timeout(d.FAST_PICKS_RACE_DELAY),!n.isCancellationRequested&&(_||(m=h(l.picks,!0)))}))(),(()=>Ie(this,void 0,void 0,function*(){p.busy=!0;try{const f=yield l.additionalPicks;if(n.isCancellationRequested)return;let v,y;S(l.picks)?(v=l.picks.items,y=l.picks.active):v=l.picks;let L,I;if(S(f)?(L=f.items,I=f.active):L=f,L.length>0||!m){let k;if(!y&&!I){const E=p.activeItems[0];E&&v.indexOf(E)!==-1&&(k=E)}h({items:[...v,...L],active:y||I||k})}}finally{n.isCancellationRequested||(p.busy=!1),_=!0}}))()])}else if(!(l instanceof Promise))h(l);else{p.busy=!0;try{const m=yield l;if(n.isCancellationRequested)return;h(m)}finally{n.isCancellationRequested||(p.busy=!1)}}});return s.add(p.onDidChangeValue(()=>r())),r(),s.add(p.onDidAccept(i=>{const[n]=p.selectedItems;typeof(n==null?void 0:n.accept)=="function"&&(i.inBackground||p.hide(),n.accept(p.keyMods,i))})),s.add(p.onDidTriggerItemButton(({button:i,item:n})=>Ie(this,void 0,void 0,function*(){var t,l;if(typeof n.trigger=="function"){const h=(l=(t=n.buttons)===null||t===void 0?void 0:t.indexOf(i))!==null&&l!==void 0?l:-1;if(h>=0){const m=n.trigger(h,p.keyMods),_=typeof m=="number"?m:yield m;if(c.isCancellationRequested)return;switch(_){case w.NO_ACTION:break;case w.CLOSE_PICKER:p.hide();break;case w.REFRESH_PICKER:r();break;case w.REMOVE_ITEM:const f=p.items.indexOf(n);if(f!==-1){const v=p.items.slice();v.splice(f,1),p.items=v}break}}}}))),s}}e.PickerQuickAccessProvider=d,d.FAST_PICKS_RACE_DELAY=200});var mt=this&&this.__createBinding||(Object.create?function(q,e,b,N){N===void 0&&(N=b),Object.defineProperty(q,N,{enumerable:!0,get:function(){return e[b]}})}:function(q,e,b,N){N===void 0&&(N=b),q[N]=e[b]}),pt=this&&this.__exportStar||function(q,e){for(var b in q)b!=="default"&&!Object.prototype.hasOwnProperty.call(e,b)&&mt(e,q,b)};define(Q[78],J([0,1,9,202]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IQuickInputService=void 0,pt(N,e),e.IQuickInputService=b.createDecorator("quickInputService")}),define(Q[33],J([0,1,20,195]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Registry=void 0;class M{constructor(){this.data=new Map}add(S,C){N.ok(b.isString(S)),N.ok(b.isObject(C)),N.ok(!this.data.has(S),"There is already an extension with this id"),this.data.set(S,C)}as(S){return this.data.get(S)||null}}e.Registry=new M}),define(Q[141],J([0,1,458,6,18,41,33]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.PLAINTEXT_LANGUAGE_IDENTIFIER=e.PLAINTEXT_EXTENSION=e.PLAINTEXT_MODE_ID=e.ModesRegistry=e.EditorModesRegistry=e.Extensions=void 0,e.Extensions={ModesRegistry:"editor.modesRegistry"};class C{constructor(){this._onDidChangeLanguages=new N.Emitter,this.onDidChangeLanguages=this._onDidChangeLanguages.event,this._languages=[],this._dynamicLanguages=[]}registerLanguage(g){return this._languages.push(g),this._onDidChangeLanguages.fire(void 0),{dispose:()=>{for(let p=0,c=this._languages.length;p"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"`",close:"`"}],folding:{offSide:!0}},0)}),define(Q[562],J([0,1,43,44,141,237]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.cssEscape=e.detectModeId=e.getIconClasses=void 0;function S(g,p,c,o){const s=o===w.FileKind.ROOT_FOLDER?["rootfolder-icon"]:o===w.FileKind.FOLDER?["folder-icon"]:["file-icon"];if(c){let a;if(c.scheme===b.Schemas.data?a=N.DataUri.parseMetaData(c).get(N.DataUri.META_DATA_LABEL):a=d(N.basenameOrAuthority(c).toLowerCase()),o===w.FileKind.FOLDER)s.push(`${a}-name-folder-icon`);else{if(a){if(s.push(`${a}-name-file-icon`),a.length<=255){const r=a.split(".");for(let i=1;i0&&C.charAt(C.length-1)==="#"?C.substring(0,C.length-1):C}class w{constructor(){this._onDidChangeSchema=new N.Emitter,this.schemasById={}}registerSchema(d,g){this.schemasById[M(d)]=g,this._onDidChangeSchema.fire(d)}notifySchemaChanged(d){this._onDidChangeSchema.fire(d)}}const S=new w;b.Registry.add(e.Extensions.JSONContribution,S)}),define(Q[95],J([0,1,519,6,33,20,185]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.validateProperty=e.getDefaultValue=e.overrideIdentifierFromKey=e.OVERRIDE_PROPERTY_PATTERN=e.resourceLanguageSettingsSchemaId=e.resourceSettings=e.windowSettings=e.machineOverridableSettings=e.machineSettings=e.applicationSettings=e.allSettings=e.Extensions=void 0,e.Extensions={Configuration:"base.contributions.configuration"},e.allSettings={properties:{},patternProperties:{}},e.applicationSettings={properties:{},patternProperties:{}},e.machineSettings={properties:{},patternProperties:{}},e.machineOverridableSettings={properties:{},patternProperties:{}},e.windowSettings={properties:{},patternProperties:{}},e.resourceSettings={properties:{},patternProperties:{}},e.resourceLanguageSettingsSchemaId="vscode://schemas/settings/resourceLanguage";const C=M.Registry.as(S.Extensions.JSONContribution);class d{constructor(){this.overrideIdentifiers=new Set,this._onDidSchemaChange=new N.Emitter,this._onDidUpdateConfiguration=new N.Emitter,this.defaultValues={},this.defaultLanguageConfigurationOverridesNode={id:"defaultOverrides",title:b.localize(0,null),properties:{}},this.configurationContributors=[this.defaultLanguageConfigurationOverridesNode],this.resourceLanguageSettingsSchema={properties:{},patternProperties:{},additionalProperties:!1,errorMessage:"Unknown editor configuration setting",allowTrailingCommas:!0,allowComments:!0},this.configurationProperties={},this.excludedConfigurationProperties={},C.registerSchema(e.resourceLanguageSettingsSchemaId,this.resourceLanguageSettingsSchema)}registerConfiguration(u,r=!0){this.registerConfigurations([u],r)}registerConfigurations(u,r=!0){const i=[];u.forEach(n=>{i.push(...this.validateAndRegisterProperties(n,r)),this.configurationContributors.push(n),this.registerJSONConfiguration(n)}),C.registerSchema(e.resourceLanguageSettingsSchemaId,this.resourceLanguageSettingsSchema),this._onDidSchemaChange.fire(),this._onDidUpdateConfiguration.fire(i)}registerOverrideIdentifiers(u){for(const r of u)this.overrideIdentifiers.add(r);this.updateOverridePropertyPatternKey()}validateAndRegisterProperties(u,r=!0,i=3){i=w.isUndefinedOrNull(u.scope)?i:u.scope;let n=[],t=u.properties;if(t)for(let h in t){if(r&&s(h)){delete t[h];continue}const m=t[h];if(this.updatePropertyDefaultValue(h,m),e.OVERRIDE_PROPERTY_PATTERN.test(h)?m.scope=void 0:m.scope=w.isUndefinedOrNull(m.scope)?i:m.scope,t[h].hasOwnProperty("included")&&!t[h].included){this.excludedConfigurationProperties[h]=t[h],delete t[h];continue}else this.configurationProperties[h]=t[h];!t[h].deprecationMessage&&t[h].markdownDeprecationMessage&&(t[h].deprecationMessage=t[h].markdownDeprecationMessage),n.push(h)}let l=u.allOf;if(l)for(let h of l)n.push(...this.validateAndRegisterProperties(h,r,i));return n}getConfigurationProperties(){return this.configurationProperties}registerJSONConfiguration(u){const r=i=>{let n=i.properties;if(n)for(const l in n)this.updateSchema(l,n[l]);let t=i.allOf;t&&t.forEach(r)};r(u)}updateSchema(u,r){switch(e.allSettings.properties[u]=r,r.scope){case 1:e.applicationSettings.properties[u]=r;break;case 2:e.machineSettings.properties[u]=r;break;case 6:e.machineOverridableSettings.properties[u]=r;break;case 3:e.windowSettings.properties[u]=r;break;case 4:e.resourceSettings.properties[u]=r;break;case 5:e.resourceSettings.properties[u]=r,this.resourceLanguageSettingsSchema.properties[u]=r;break}}updateOverridePropertyPatternKey(){for(const u of this.overrideIdentifiers.values()){const r=`[${u}]`,i={type:"object",description:b.localize(1,null),errorMessage:b.localize(2,null),$ref:e.resourceLanguageSettingsSchemaId};this.updatePropertyDefaultValue(r,i),e.allSettings.properties[r]=i,e.applicationSettings.properties[r]=i,e.machineSettings.properties[r]=i,e.machineOverridableSettings.properties[r]=i,e.windowSettings.properties[r]=i,e.resourceSettings.properties[r]=i}this._onDidSchemaChange.fire()}updatePropertyDefaultValue(u,r){let i=this.defaultValues[u];w.isUndefined(i)&&(i=r.default),w.isUndefined(i)&&(i=c(r.type)),r.default=i}}const g="\\[.*\\]$";e.OVERRIDE_PROPERTY_PATTERN=new RegExp(g);function p(a){return a.substring(1,a.length-1)}e.overrideIdentifierFromKey=p;function c(a){switch(Array.isArray(a)?a[0]:a){case"boolean":return!1;case"integer":case"number":return 0;case"string":return"";case"array":return[];case"object":return{};default:return null}}e.getDefaultValue=c;const o=new d;M.Registry.add(e.Extensions.Configuration,o);function s(a){return a.trim()?e.OVERRIDE_PROPERTY_PATTERN.test(a)?b.localize(4,null,a):o.getConfigurationProperties()[a]!==void 0?b.localize(5,null,a):null:b.localize(3,null)}e.validateProperty=s}),define(Q[186],J([0,1,453,6,2,40,19,38,126,163,95,33,196]),function(q,e,b,N,M,w,S,C,d,g,p,c,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.isDiffEditorConfigurationKey=e.isEditorConfigurationKey=e.editorConfigurationBaseNode=e.CommonEditorConfiguration=e.ComputedEditorOptions=e.TabFocus=void 0,e.TabFocus=new class{constructor(){this._tabFocus=!1,this._onDidChangeTabFocus=new N.Emitter,this.onDidChangeTabFocus=this._onDidChangeTabFocus.event}getTabFocusMode(){return this._tabFocus}setTabFocusMode(L){this._tabFocus!==L&&(this._tabFocus=L,this._onDidChangeTabFocus.fire(this._tabFocus))}};const s=Object.hasOwnProperty;class a{constructor(){this._values=[]}_read(I){return this._values[I]}get(I){return this._values[I]}_write(I,k){this._values[I]=k}}e.ComputedEditorOptions=a;class u{constructor(){this._values=[]}_read(I){return this._values[I]}_write(I,k){this._values[I]=k}}class r{static readOptions(I){const k=I,E=new u;for(const T of C.editorOptionsRegistry){const O=T.name==="_never_"?void 0:k[T.name];E._write(T.id,O)}return E}static validateOptions(I){const k=new C.ValidatedEditorOptions;for(const E of C.editorOptionsRegistry)k._write(E.id,E.validate(I._read(E.id)));return k}static computeOptions(I,k){const E=new a;for(const T of C.editorOptionsRegistry)E._write(T.id,T.compute(k,E,I._read(T.id)));return E}static _deepEquals(I,k){if(typeof I!="object"||typeof k!="object")return I===k;if(Array.isArray(I)||Array.isArray(k))return Array.isArray(I)&&Array.isArray(k)?S.equals(I,k):!1;for(let E in I)if(!r._deepEquals(I[E],k[E]))return!1;return!0}static checkEquals(I,k){const E=[];let T=!1;for(const O of C.editorOptionsRegistry){const A=!r._deepEquals(I._read(O.id),k._read(O.id));E[O.id]=A,A&&(T=!0)}return T?new C.ConfigurationChangedEvent(E):null}}function i(L){const I=L.wordWrap;I===!0?L.wordWrap="on":I===!1&&(L.wordWrap="off");const k=L.lineNumbers;k===!0?L.lineNumbers="on":k===!1&&(L.lineNumbers="off"),L.autoClosingBrackets===!1&&(L.autoClosingBrackets="never",L.autoClosingQuotes="never",L.autoSurround="never"),L.cursorBlinking==="visible"&&(L.cursorBlinking="solid");const O=L.renderWhitespace;O===!0?L.renderWhitespace="boundary":O===!1&&(L.renderWhitespace="none");const A=L.renderLineHighlight;A===!0?L.renderLineHighlight="line":A===!1&&(L.renderLineHighlight="none");const B=L.acceptSuggestionOnEnter;B===!0?L.acceptSuggestionOnEnter="on":B===!1&&(L.acceptSuggestionOnEnter="off");const F=L.tabCompletion;F===!1?L.tabCompletion="off":F===!0&&(L.tabCompletion="onlySnippets");const D=L.suggest;if(D&&typeof D.filteredTypes=="object"&&D.filteredTypes){const Y={};Y.method="showMethods",Y.function="showFunctions",Y.constructor="showConstructors",Y.field="showFields",Y.variable="showVariables",Y.class="showClasses",Y.struct="showStructs",Y.interface="showInterfaces",Y.module="showModules",Y.property="showProperties",Y.event="showEvents",Y.operator="showOperators",Y.unit="showUnits",Y.value="showValues",Y.constant="showConstants",Y.enum="showEnums",Y.enumMember="showEnumMembers",Y.keyword="showKeywords",Y.text="showWords",Y.color="showColors",Y.file="showFiles",Y.reference="showReferences",Y.folder="showFolders",Y.typeParameter="showTypeParameters",Y.snippet="showSnippets",o.forEach(Y,ee=>{const se=D.filteredTypes[ee.key];se===!1&&(D[ee.value]=se)})}const R=L.hover;R===!0?L.hover={enabled:!0}:R===!1&&(L.hover={enabled:!1});const W=L.parameterHints;W===!0?L.parameterHints={enabled:!0}:W===!1&&(L.parameterHints={enabled:!1});const x=L.autoIndent;x===!0?L.autoIndent="full":x===!1&&(L.autoIndent="advanced");const K=L.matchBrackets;K===!0?L.matchBrackets="always":K===!1&&(L.matchBrackets="never")}function n(L){const I=w.deepClone(L);return i(I),I}class t extends M.Disposable{constructor(I,k){super();this._onDidChange=this._register(new N.Emitter),this.onDidChange=this._onDidChange.event,this._onDidChangeFast=this._register(new N.Emitter),this.onDidChangeFast=this._onDidChangeFast.event,this.isSimpleWidget=I,this._isDominatedByLongLines=!1,this._computeOptionsMemory=new C.ComputeOptionsMemory,this._viewLineCount=1,this._lineNumbersDigitCount=1,this._rawOptions=n(k),this._readOptions=r.readOptions(this._rawOptions),this._validatedOptions=r.validateOptions(this._readOptions),this._register(d.EditorZoom.onDidChangeZoomLevel(E=>this._recomputeOptions())),this._register(e.TabFocus.onDidChangeTabFocus(E=>this._recomputeOptions()))}observeReferenceElement(I){}updatePixelRatio(){}_recomputeOptions(){const I=this.options,k=this._computeInternalOptions();if(!I)this.options=k;else{const E=r.checkEquals(I,k);if(E===null)return;this.options=k,this._onDidChangeFast.fire(E),this._onDidChange.fire(E)}}getRawOptions(){return this._rawOptions}_computeInternalOptions(){const I=this._getEnvConfiguration(),k=g.BareFontInfo.createFromValidatedSettings(this._validatedOptions,I.zoomLevel,I.pixelRatio,this.isSimpleWidget),E={memory:this._computeOptionsMemory,outerWidth:I.outerWidth,outerHeight:I.outerHeight,fontInfo:this.readConfiguration(k),extraEditorClassName:I.extraEditorClassName,isDominatedByLongLines:this._isDominatedByLongLines,viewLineCount:this._viewLineCount,lineNumbersDigitCount:this._lineNumbersDigitCount,emptySelectionClipboard:I.emptySelectionClipboard,pixelRatio:I.pixelRatio,tabFocusMode:e.TabFocus.getTabFocusMode(),accessibilitySupport:I.accessibilitySupport};return r.computeOptions(this._validatedOptions,E)}static _subsetEquals(I,k){for(const E in k)if(s.call(k,E)){const T=k[E],O=I[E];if(O===T)continue;if(Array.isArray(O)&&Array.isArray(T)){if(!S.equals(O,T))return!1;continue}if(O&&typeof O=="object"&&T&&typeof T=="object"){if(!this._subsetEquals(O,T))return!1;continue}return!1}return!0}updateOptions(I){if(typeof I!="undefined"){const k=n(I);t._subsetEquals(this._rawOptions,k)||(this._rawOptions=w.mixin(this._rawOptions,k||{}),this._readOptions=r.readOptions(this._rawOptions),this._validatedOptions=r.validateOptions(this._readOptions),this._recomputeOptions())}}setIsDominatedByLongLines(I){this._isDominatedByLongLines=I,this._recomputeOptions()}setMaxLineNumber(I){const k=t._digitCount(I);this._lineNumbersDigitCount!==k&&(this._lineNumbersDigitCount=k,this._recomputeOptions())}setViewLineCount(I){this._viewLineCount!==I&&(this._viewLineCount=I,this._recomputeOptions())}static _digitCount(I){let k=0;for(;I;)I=Math.floor(I/10),k++;return k||1}}e.CommonEditorConfiguration=t,e.editorConfigurationBaseNode=Object.freeze({id:"editor",order:5,type:"object",title:b.localize(0,null),scope:5});const l=c.Registry.as(p.Extensions.Configuration),h=Object.assign(Object.assign({},e.editorConfigurationBaseNode),{properties:{"editor.tabSize":{type:"number",default:C.EDITOR_MODEL_DEFAULTS.tabSize,minimum:1,markdownDescription:b.localize(1,null)},"editor.insertSpaces":{type:"boolean",default:C.EDITOR_MODEL_DEFAULTS.insertSpaces,markdownDescription:b.localize(2,null)},"editor.detectIndentation":{type:"boolean",default:C.EDITOR_MODEL_DEFAULTS.detectIndentation,markdownDescription:b.localize(3,null)},"editor.trimAutoWhitespace":{type:"boolean",default:C.EDITOR_MODEL_DEFAULTS.trimAutoWhitespace,description:b.localize(4,null)},"editor.largeFileOptimizations":{type:"boolean",default:C.EDITOR_MODEL_DEFAULTS.largeFileOptimizations,description:b.localize(5,null)},"editor.wordBasedSuggestions":{type:"boolean",default:!0,description:b.localize(6,null)},"editor.wordBasedSuggestionsMode":{enum:["currentDocument","matchingDocuments","allDocuments"],default:"matchingDocuments",enumDescriptions:[b.localize(7,null),b.localize(8,null),b.localize(9,null)],description:b.localize(10,null)},"editor.semanticHighlighting.enabled":{enum:[!0,!1,"configuredByTheme"],enumDescriptions:[b.localize(11,null),b.localize(12,null),b.localize(13,null)],default:"configuredByTheme",description:b.localize(14,null)},"editor.stablePeek":{type:"boolean",default:!1,markdownDescription:b.localize(15,null)},"editor.maxTokenizationLineLength":{type:"integer",default:2e4,description:b.localize(16,null)},"diffEditor.maxComputationTime":{type:"number",default:5e3,description:b.localize(17,null)},"diffEditor.renderSideBySide":{type:"boolean",default:!0,description:b.localize(18,null)},"diffEditor.ignoreTrimWhitespace":{type:"boolean",default:!0,description:b.localize(19,null)},"diffEditor.renderIndicators":{type:"boolean",default:!0,description:b.localize(20,null)},"diffEditor.codeLens":{type:"boolean",default:!1,description:b.localize(21,null)},"diffEditor.wordWrap":{type:"string",enum:["off","on","inherit"],default:"inherit",markdownEnumDescriptions:[b.localize(22,null),b.localize(23,null),b.localize(24,null)]}}});function m(L){return typeof L.type!="undefined"||typeof L.anyOf!="undefined"}for(const L of C.editorOptionsRegistry){const I=L.schema;if(typeof I!="undefined")if(m(I))h.properties[`editor.${L.name}`]=I;else for(let k in I)s.call(I,k)&&(h.properties[k]=I[k])}let _=null;function f(){return _===null&&(_=Object.create(null),Object.keys(h.properties).forEach(L=>{_[L]=!0})),_}function v(L){return f()[`editor.${L}`]||!1}e.isEditorConfigurationKey=v;function y(L){return f()[`diffEditor.${L}`]||!1}e.isDiffEditorConfigurationKey=y,l.registerConfiguration(h)}),define(Q[69],J([0,1,35,6,2,17,361,212,186,38,163]),function(q,e,b,N,M,w,S,C,d,g,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Configuration=e.clearAllFontInfos=void 0;class c{constructor(){this._keys=Object.create(null),this._values=Object.create(null)}has(r){const i=r.getId();return!!this._values[i]}get(r){const i=r.getId();return this._values[i]}put(r,i){const n=r.getId();this._keys[n]=r,this._values[n]=i}remove(r){const i=r.getId();delete this._keys[i],delete this._values[i]}getValues(){return Object.keys(this._keys).map(r=>this._values[r])}}function o(){s.INSTANCE.clearCache()}e.clearAllFontInfos=o;class s extends M.Disposable{constructor(){super();this._onDidChange=this._register(new N.Emitter),this.onDidChange=this._onDidChange.event,this._cache=new c,this._evictUntrustedReadingsTimeout=-1}dispose(){this._evictUntrustedReadingsTimeout!==-1&&(clearTimeout(this._evictUntrustedReadingsTimeout),this._evictUntrustedReadingsTimeout=-1),super.dispose()}clearCache(){this._cache=new c,this._onDidChange.fire()}_writeToCache(r,i){this._cache.put(r,i),!i.isTrusted&&this._evictUntrustedReadingsTimeout===-1&&(this._evictUntrustedReadingsTimeout=setTimeout(()=>{this._evictUntrustedReadingsTimeout=-1,this._evictUntrustedReadings()},5e3))}_evictUntrustedReadings(){const r=this._cache.getValues();let i=!1;for(const n of r)n.isTrusted||(i=!0,this._cache.remove(n));i&&this._onDidChange.fire()}readConfiguration(r){if(!this._cache.has(r)){let i=s._actualReadConfiguration(r);(i.typicalHalfwidthCharacterWidth<=2||i.typicalFullwidthCharacterWidth<=2||i.spaceWidth<=2||i.maxDigitWidth<=2)&&(i=new p.FontInfo({zoomLevel:b.getZoomLevel(),pixelRatio:b.getPixelRatio(),fontFamily:i.fontFamily,fontWeight:i.fontWeight,fontSize:i.fontSize,fontFeatureSettings:i.fontFeatureSettings,lineHeight:i.lineHeight,letterSpacing:i.letterSpacing,isMonospace:i.isMonospace,typicalHalfwidthCharacterWidth:Math.max(i.typicalHalfwidthCharacterWidth,5),typicalFullwidthCharacterWidth:Math.max(i.typicalFullwidthCharacterWidth,5),canUseHalfwidthRightwardsArrow:i.canUseHalfwidthRightwardsArrow,spaceWidth:Math.max(i.spaceWidth,5),middotWidth:Math.max(i.middotWidth,5),wsmiddotWidth:Math.max(i.wsmiddotWidth,5),maxDigitWidth:Math.max(i.maxDigitWidth,5)},!1)),this._writeToCache(r,i)}return this._cache.get(r)}static createRequest(r,i,n,t){const l=new S.CharWidthRequest(r,i);return n.push(l),t&&t.push(l),l}static _actualReadConfiguration(r){const i=[],n=[],t=this.createRequest("n",0,i,n),l=this.createRequest("\uFF4D",0,i,null),h=this.createRequest(" ",0,i,n),m=this.createRequest("0",0,i,n),_=this.createRequest("1",0,i,n),f=this.createRequest("2",0,i,n),v=this.createRequest("3",0,i,n),y=this.createRequest("4",0,i,n),L=this.createRequest("5",0,i,n),I=this.createRequest("6",0,i,n),k=this.createRequest("7",0,i,n),E=this.createRequest("8",0,i,n),T=this.createRequest("9",0,i,n),O=this.createRequest("\u2192",0,i,n),A=this.createRequest("\uFFEB",0,i,null),B=this.createRequest("\xB7",0,i,n),F=this.createRequest(String.fromCharCode(11825),0,i,null);this.createRequest("|",0,i,n),this.createRequest("/",0,i,n),this.createRequest("-",0,i,n),this.createRequest("_",0,i,n),this.createRequest("i",0,i,n),this.createRequest("l",0,i,n),this.createRequest("m",0,i,n),this.createRequest("|",1,i,n),this.createRequest("_",1,i,n),this.createRequest("i",1,i,n),this.createRequest("l",1,i,n),this.createRequest("m",1,i,n),this.createRequest("n",1,i,n),this.createRequest("|",2,i,n),this.createRequest("_",2,i,n),this.createRequest("i",2,i,n),this.createRequest("l",2,i,n),this.createRequest("m",2,i,n),this.createRequest("n",2,i,n),S.readCharWidths(r,i);const D=Math.max(m.width,_.width,f.width,v.width,y.width,L.width,I.width,k.width,E.width,T.width);let R=r.fontFeatureSettings===g.EditorFontLigatures.OFF;const W=n[0].width;for(let Y=1,ee=n.length;R&&Y.001){R=!1;break}}let x=!0;R&&A.width!==W&&(x=!1),A.width>O.width&&(x=!1);const K=b.getTimeSinceLastZoomLevelChanged()>2e3;return new p.FontInfo({zoomLevel:b.getZoomLevel(),pixelRatio:b.getPixelRatio(),fontFamily:r.fontFamily,fontWeight:r.fontWeight,fontSize:r.fontSize,fontFeatureSettings:r.fontFeatureSettings,lineHeight:r.lineHeight,letterSpacing:r.letterSpacing,isMonospace:R,typicalHalfwidthCharacterWidth:t.width,typicalFullwidthCharacterWidth:l.width,canUseHalfwidthRightwardsArrow:x,spaceWidth:h.width,middotWidth:B.width,wsmiddotWidth:F.width,maxDigitWidth:D},K)}}s.INSTANCE=new s;class a extends d.CommonEditorConfiguration{constructor(r,i,n=null,t){super(r,i);this.accessibilityService=t,this._elementSizeObserver=this._register(new C.ElementSizeObserver(n,i.dimension,()=>this._recomputeOptions())),this._register(s.INSTANCE.onDidChange(()=>this._recomputeOptions())),this._validatedOptions.get(9)&&this._elementSizeObserver.startObserving(),this._register(b.onDidChangeZoomLevel(l=>this._recomputeOptions())),this._register(this.accessibilityService.onDidChangeScreenReaderOptimized(()=>this._recomputeOptions())),this._recomputeOptions()}static applyFontInfoSlow(r,i){r.style.fontFamily=i.getMassagedFontFamily(),r.style.fontWeight=i.fontWeight,r.style.fontSize=i.fontSize+"px",r.style.fontFeatureSettings=i.fontFeatureSettings,r.style.lineHeight=i.lineHeight+"px",r.style.letterSpacing=i.letterSpacing+"px"}static applyFontInfo(r,i){r.setFontFamily(i.getMassagedFontFamily()),r.setFontWeight(i.fontWeight),r.setFontSize(i.fontSize),r.setFontFeatureSettings(i.fontFeatureSettings),r.setLineHeight(i.lineHeight),r.setLetterSpacing(i.letterSpacing)}observeReferenceElement(r){this._elementSizeObserver.observe(r)}updatePixelRatio(){this._recomputeOptions()}static _getExtraEditorClassName(){let r="";return!b.isSafari&&!b.isWebkitWebView&&(r+="no-user-select "),b.isSafari&&(r+="no-minimap-shadow "),w.isMacintosh&&(r+="mac "),r}_getEnvConfiguration(){return{extraEditorClassName:a._getExtraEditorClassName(),outerWidth:this._elementSizeObserver.getWidth(),outerHeight:this._elementSizeObserver.getHeight(),emptySelectionClipboard:b.isWebKit||b.isFirefox,pixelRatio:b.getPixelRatio(),zoomLevel:b.getZoomLevel(),accessibilitySupport:this.accessibilityService.isScreenReaderOptimized()?2:this.accessibilityService.getAccessibilitySupport()}}readConfiguration(r){return s.INSTANCE.readConfiguration(r)}}e.Configuration=a}),define(Q[563],J([0,1,93,8,69,63]),function(q,e,b,N,M,w){"use strict";var S;Object.defineProperty(e,"__esModule",{value:!0}),e.DOMLineBreaksComputerFactory=void 0;const C=(S=window.trustedTypes)===null||S===void 0?void 0:S.createPolicy("domLineBreaksComputer",{createHTML:a=>a});class d{static create(){return new d}constructor(){}createLineBreaksComputer(u,r,i,n){r=r|0,i=+i;let t=[];return{addRequest:(l,h)=>{t.push(l)},finalize:()=>g(t,u,r,i,n)}}}e.DOMLineBreaksComputerFactory=d;function g(a,u,r,i,n){var t;if(i===-1){const A=[];for(let B=0,F=a.length;Bl?(F=0,D=0):R=l-K}const W=B.substr(F),x=p(W,D,r,R,m);_[A]=F,f[A]=D,v[A]=W,y[A]=x[0],L[A]=x[1]}const I=m.build(),k=(t=C==null?void 0:C.createHTML(I))!==null&&t!==void 0?t:I;h.innerHTML=k,h.style.position="absolute",h.style.top="10000",h.style.wordWrap="break-word",document.body.appendChild(h);let E=document.createRange();const T=Array.prototype.slice.call(h.children,0);let O=[];for(let A=0;A');const t=a.length;let l=u,h=0,m=[],_=[],f=0");for(let v=0;v"),m[v]=h,_[v]=l;const y=f;f=v+1"),m[a.length]=h,_[a.length]=l,n.appendASCIIString(""),[m,_]}function c(a,u,r,i){if(r.length<=1)return null;const n=Array.prototype.slice.call(u.children,0),t=[];try{o(a,n,i,0,null,r.length-1,null,t)}catch(l){return console.log(l),null}return t.length===0?null:(t.push(r.length),t)}function o(a,u,r,i,n,t,l,h){if(i!==t&&(n=n||s(a,u,r[i],r[i+1]),l=l||s(a,u,r[t],r[t+1]),!(Math.abs(n[0].top-l[0].top)<=.1))){if(i+1===t){h.push(t);return}const m=i+(t-i)/2|0,_=s(a,u,r[m],r[m+1]);o(a,u,r,i,n,m,_,h),o(a,u,r,m,_,t,l,h)}}function s(a,u,r,i){return a.setStart(u[r/16384|0].firstChild,r%16384),a.setEnd(u[i/16384|0].firstChild,i%16384),a.getClientRects()}}),define(Q[564],J([0,1,30,69,165,45]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MarginViewOverlays=e.ContentViewOverlays=e.ViewOverlayLine=e.ViewOverlays=void 0;class S extends w.ViewPart{constructor(c){super(c);this._visibleLines=new M.VisibleLinesCollection(this),this.domNode=this._visibleLines.domNode,this._dynamicOverlays=[],this._isFocused=!1,this.domNode.setClassName("view-overlays")}shouldRender(){if(super.shouldRender())return!0;for(let c=0,o=this._dynamicOverlays.length;cs.shouldRender());for(let s=0,a=o.length;s'),a.appendASCIIString(u),a.appendASCIIString(""),!0)}layoutLine(c,o){this._domNode&&(this._domNode.setTop(o),this._domNode.setHeight(this._lineHeight))}}e.ViewOverlayLine=C;class d extends S{constructor(c){super(c);const s=this._context.configuration.options.get(124);this._contentWidth=s.contentWidth,this.domNode.setHeight(0)}onConfigurationChanged(c){const s=this._context.configuration.options.get(124);return this._contentWidth=s.contentWidth,super.onConfigurationChanged(c)||!0}onScrollChanged(c){return super.onScrollChanged(c)||c.scrollWidthChanged}_viewOverlaysRender(c){super._viewOverlaysRender(c),this.domNode.setWidth(Math.max(c.scrollWidth,this._contentWidth))}}e.ContentViewOverlays=d;class g extends S{constructor(c){super(c);const o=this._context.configuration.options,s=o.get(124);this._contentLeft=s.contentLeft,this.domNode.setClassName("margin-view-overlays"),this.domNode.setWidth(1),N.Configuration.applyFontInfo(this.domNode,o.get(38))}onConfigurationChanged(c){const o=this._context.configuration.options;N.Configuration.applyFontInfo(this.domNode,o.get(38));const s=o.get(124);return this._contentLeft=s.contentLeft,super.onConfigurationChanged(c)||!0}onScrollChanged(c){return super.onScrollChanged(c)||c.scrollHeightChanged}_viewOverlaysRender(c){super._viewOverlaysRender(c);const o=Math.min(c.scrollHeight,1e6);this.domNode.setHeight(o),this.domNode.setWidth(this._contentLeft)}}e.MarginViewOverlays=g}),define(Q[565],J([0,1,7,30,8,69,38,14,3,124]),function(q,e,b,N,M,w,S,C,d,g){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ViewCursor=void 0;class p{constructor(s,a,u,r,i,n){this.top=s,this.left=a,this.width=u,this.height=r,this.textContent=i,this.textContentClassName=n}}class c{constructor(s){this._context=s;const a=this._context.configuration.options,u=a.get(38);this._cursorStyle=a.get(21),this._lineHeight=a.get(53),this._typicalHalfwidthCharacterWidth=u.typicalHalfwidthCharacterWidth,this._lineCursorWidth=Math.min(a.get(24),this._typicalHalfwidthCharacterWidth),this._isVisible=!0,this._domNode=N.createFastDomNode(document.createElement("div")),this._domNode.setClassName(`cursor ${g.MOUSE_CURSOR_TEXT_CSS_CLASS_NAME}`),this._domNode.setHeight(this._lineHeight),this._domNode.setTop(0),this._domNode.setLeft(0),w.Configuration.applyFontInfo(this._domNode,u),this._domNode.setDisplay("none"),this._position=new C.Position(1,1),this._lastRenderedContent="",this._renderData=null}getDomNode(){return this._domNode}getPosition(){return this._position}show(){this._isVisible||(this._domNode.setVisibility("inherit"),this._isVisible=!0)}hide(){this._isVisible&&(this._domNode.setVisibility("hidden"),this._isVisible=!1)}onConfigurationChanged(s){const a=this._context.configuration.options,u=a.get(38);return this._cursorStyle=a.get(21),this._lineHeight=a.get(53),this._typicalHalfwidthCharacterWidth=u.typicalHalfwidthCharacterWidth,this._lineCursorWidth=Math.min(a.get(24),this._typicalHalfwidthCharacterWidth),w.Configuration.applyFontInfo(this._domNode,u),!0}onCursorPositionChanged(s){return this._position=s,!0}_prepareRender(s){let a="";if(this._cursorStyle===S.TextEditorCursorStyle.Line||this._cursorStyle===S.TextEditorCursorStyle.LineThin){const f=s.visibleRangeForPosition(this._position);if(!f||f.outsideRenderedLine)return null;let v;if(this._cursorStyle===S.TextEditorCursorStyle.Line){if(v=b.computeScreenAwareSize(this._lineCursorWidth>0?this._lineCursorWidth:2),v>2){const I=this._context.model.getLineContent(this._position.lineNumber),k=M.nextCharLength(I,this._position.column-1);a=I.substr(this._position.column-1,k)}}else v=b.computeScreenAwareSize(1);let y=f.left;v>=2&&y>=1&&(y-=1);const L=s.getVerticalOffsetForLineNumber(this._position.lineNumber)-s.bigNumbersDelta;return new p(L,y,v,this._lineHeight,a,"")}const u=this._context.model.getLineContent(this._position.lineNumber),r=M.nextCharLength(u,this._position.column-1),i=s.linesVisibleRangesForRange(new d.Range(this._position.lineNumber,this._position.column,this._position.lineNumber,this._position.column+r),!1);if(!i||i.length===0)return null;const n=i[0];if(n.outsideRenderedLine||n.ranges.length===0)return null;const t=n.ranges[0],l=t.width<1?this._typicalHalfwidthCharacterWidth:t.width;let h="";if(this._cursorStyle===S.TextEditorCursorStyle.Block){const f=this._context.model.getViewLineData(this._position.lineNumber);a=u.substr(this._position.column-1,r);const v=f.tokens.findTokenIndexAtOffset(this._position.column-1);h=f.tokens.getClassName(v)}let m=s.getVerticalOffsetForLineNumber(this._position.lineNumber)-s.bigNumbersDelta,_=this._lineHeight;return(this._cursorStyle===S.TextEditorCursorStyle.Underline||this._cursorStyle===S.TextEditorCursorStyle.UnderlineThin)&&(m+=this._lineHeight-2,_=2),new p(m,t.left,l,_,a,h)}prepareRender(s){this._renderData=this._prepareRender(s)}render(s){return this._renderData?(this._lastRenderedContent!==this._renderData.textContent&&(this._lastRenderedContent=this._renderData.textContent,this._domNode.domNode.textContent=this._lastRenderedContent),this._domNode.setClassName(`cursor ${g.MOUSE_CURSOR_TEXT_CSS_CLASS_NAME} ${this._renderData.textContentClassName}`),this._domNode.setDisplay("block"),this._domNode.setTop(this._renderData.top),this._domNode.setLeft(this._renderData.left),this._domNode.setWidth(this._renderData.width),this._domNode.setLineHeight(this._renderData.height),this._domNode.setHeight(this._renderData.height),{domNode:this._domNode.domNode,position:this._position,contentLeft:this._renderData.left,height:this._renderData.height,width:2}):(this._domNode.setDisplay("none"),null)}}e.ViewCursor=c}),define(Q[566],J([0,1,12,6,2,291,8,18,141,76,95,33]),function(q,e,b,N,M,w,S,C,d,g,p,c){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.LanguagesRegistry=void 0;const o=Object.prototype.hasOwnProperty;class s extends M.Disposable{constructor(u=!0,r=!1){super();this._onDidChange=this._register(new N.Emitter),this.onDidChange=this._onDidChange.event,this._warnOnOverwrite=r,this._nextLanguageId2=1,this._languageIdToLanguage=[],this._languageToLanguageId=Object.create(null),this._languages={},this._mimeTypesMap={},this._nameMap={},this._lowercaseNameMap={},u&&(this._initializeFromRegistry(),this._register(d.ModesRegistry.onDidChangeLanguages(i=>this._initializeFromRegistry())))}_initializeFromRegistry(){this._languages={},this._mimeTypesMap={},this._nameMap={},this._lowercaseNameMap={};const u=d.ModesRegistry.getLanguages();this._registerLanguages(u)}_registerLanguages(u){for(const r of u)this._registerLanguage(r);this._mimeTypesMap={},this._nameMap={},this._lowercaseNameMap={},Object.keys(this._languages).forEach(r=>{let i=this._languages[r];i.name&&(this._nameMap[i.name]=i.identifier),i.aliases.forEach(n=>{this._lowercaseNameMap[n.toLowerCase()]=i.identifier}),i.mimetypes.forEach(n=>{this._mimeTypesMap[n]=i.identifier})}),c.Registry.as(p.Extensions.Configuration).registerOverrideIdentifiers(d.ModesRegistry.getLanguages().map(r=>r.id)),this._onDidChange.fire()}_getLanguageId(u){if(this._languageToLanguageId[u])return this._languageToLanguageId[u];const r=this._nextLanguageId2++;return this._languageIdToLanguage[r]=u,this._languageToLanguageId[u]=r,r}_registerLanguage(u){const r=u.id;let i;if(o.call(this._languages,r))i=this._languages[r];else{const n=this._getLanguageId(r);i={identifier:new C.LanguageIdentifier(r,n),name:null,mimetypes:[],aliases:[],extensions:[],filenames:[],configurationFiles:[]},this._languages[r]=i}this._mergeLanguage(i,u)}_mergeLanguage(u,r){const i=r.id;let n=null;if(Array.isArray(r.mimetypes)&&r.mimetypes.length>0&&(u.mimetypes.push(...r.mimetypes),n=r.mimetypes[0]),n||(n=`text/x-${i}`,u.mimetypes.push(n)),Array.isArray(r.extensions)){r.configuration?u.extensions=r.extensions.concat(u.extensions):u.extensions=u.extensions.concat(r.extensions);for(let h of r.extensions)w.registerTextMime({id:i,mime:n,extension:h},this._warnOnOverwrite)}if(Array.isArray(r.filenames))for(let h of r.filenames)w.registerTextMime({id:i,mime:n,filename:h},this._warnOnOverwrite),u.filenames.push(h);if(Array.isArray(r.filenamePatterns))for(let h of r.filenamePatterns)w.registerTextMime({id:i,mime:n,filepattern:h},this._warnOnOverwrite);if(typeof r.firstLine=="string"&&r.firstLine.length>0){let h=r.firstLine;h.charAt(0)!=="^"&&(h="^"+h);try{let m=new RegExp(h);S.regExpLeadsToEndlessLoop(m)||w.registerTextMime({id:i,mime:n,firstline:m},this._warnOnOverwrite)}catch(m){b.onUnexpectedError(m)}}u.aliases.push(i);let t=null;if(typeof r.aliases!="undefined"&&Array.isArray(r.aliases)&&(r.aliases.length===0?t=[null]:t=r.aliases),t!==null)for(const h of t)!h||h.length===0||u.aliases.push(h);let l=t!==null&&t.length>0;if(!(l&&t[0]===null)){let h=(l?t[0]:null)||i;(l||!u.name)&&(u.name=h)}r.configuration&&u.configurationFiles.push(r.configuration)}isRegisteredMode(u){return o.call(this._mimeTypesMap,u)?!0:o.call(this._languages,u)}getModeIdForLanguageNameLowercase(u){return o.call(this._lowercaseNameMap,u)?this._lowercaseNameMap[u].language:null}extractModeIds(u){return u?u.split(",").map(r=>r.trim()).map(r=>o.call(this._mimeTypesMap,r)?this._mimeTypesMap[r].language:r).filter(r=>o.call(this._languages,r)):[]}getLanguageIdentifier(u){if(u===g.NULL_MODE_ID||u===0)return g.NULL_LANGUAGE_IDENTIFIER;let r;if(typeof u=="string")r=u;else if(r=this._languageIdToLanguage[u],!r)return null;return o.call(this._languages,r)?this._languages[r].identifier:null}getModeIdsFromFilepathOrFirstLine(u,r){if(!u&&!r)return[];let i=w.guessMimeTypes(u,r);return this.extractModeIds(i.join(","))}}e.LanguagesRegistry=s}),define(Q[567],J([0,1,6,2,373,76,566,19]),function(q,e,b,N,M,w,S,C){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ModeServiceImpl=void 0;class d extends N.Disposable{constructor(c,o){super();this._onDidChange=this._register(new b.Emitter),this.onDidChange=this._onDidChange.event,this._selector=o,this.languageIdentifier=this._selector(),this._register(c(()=>this._evaluate()))}_evaluate(){let c=this._selector();c.id!==this.languageIdentifier.id&&(this.languageIdentifier=c,this._onDidChange.fire(this.languageIdentifier))}}class g extends N.Disposable{constructor(c=!1){super();this._onDidCreateMode=this._register(new b.Emitter),this.onDidCreateMode=this._onDidCreateMode.event,this._onLanguagesMaybeChanged=this._register(new b.Emitter),this.onLanguagesMaybeChanged=this._onLanguagesMaybeChanged.event,this._instantiatedModes={},this._registry=this._register(new S.LanguagesRegistry(!0,c)),this._register(this._registry.onDidChange(()=>this._onLanguagesMaybeChanged.fire()))}isRegisteredMode(c){return this._registry.isRegisteredMode(c)}getModeIdForLanguageName(c){return this._registry.getModeIdForLanguageNameLowercase(c)}getModeIdByFilepathOrFirstLine(c,o){const s=this._registry.getModeIdsFromFilepathOrFirstLine(c,o);return C.firstOrDefault(s,null)}getModeId(c){const o=this._registry.extractModeIds(c);return C.firstOrDefault(o,null)}getLanguageIdentifier(c){return this._registry.getLanguageIdentifier(c)}create(c){return new d(this.onLanguagesMaybeChanged,()=>{const o=this.getModeId(c);return this._createModeAndGetLanguageIdentifier(o)})}createByFilepathOrFirstLine(c,o){return new d(this.onLanguagesMaybeChanged,()=>{const s=this.getModeIdByFilepathOrFirstLine(c,o);return this._createModeAndGetLanguageIdentifier(s)})}_createModeAndGetLanguageIdentifier(c){const o=this.getLanguageIdentifier(c||"plaintext")||w.NULL_LANGUAGE_IDENTIFIER;return this._getOrCreateMode(o.language),o}triggerMode(c){const o=this.getModeId(c);this._getOrCreateMode(o||"plaintext")}_getOrCreateMode(c){if(!this._instantiatedModes.hasOwnProperty(c)){let o=this.getLanguageIdentifier(c)||w.NULL_LANGUAGE_IDENTIFIER;this._instantiatedModes[c]=new M.FrankensteinMode(o),this._onDidCreateMode.fire(this._instantiatedModes[c])}return this._instantiatedModes[c]}}e.ModeServiceImpl=g}),define(Q[46],J([0,1,33,9,95]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getDefaultValues=e.getConfigurationKeys=e.getConfigurationValue=e.removeFromValueTree=e.addToValueTree=e.toValuesTree=e.IConfigurationService=void 0,e.IConfigurationService=N.createDecorator("configurationService");function w(o,s){const a=Object.create(null);for(let u in o)S(a,u,o[u],s);return a}e.toValuesTree=w;function S(o,s,a,u){const r=s.split("."),i=r.pop();let n=o;for(let t=0;tconsole.error(`Conflict in default settings: ${r}`))}return o}e.getDefaultValues=c}),define(Q[568],J([0,1,2,65,6,16,46]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AccessibilityService=void 0;let C=class extends b.Disposable{constructor(g,p){super();this._contextKeyService=g,this._configurationService=p,this._accessibilitySupport=0,this._onDidChangeScreenReaderOptimized=new M.Emitter,this._accessibilityModeEnabledContext=N.CONTEXT_ACCESSIBILITY_MODE_ENABLED.bindTo(this._contextKeyService);const c=()=>this._accessibilityModeEnabledContext.set(this.isScreenReaderOptimized());this._register(this._configurationService.onDidChangeConfiguration(o=>{o.affectsConfiguration("editor.accessibilitySupport")&&(c(),this._onDidChangeScreenReaderOptimized.fire())})),c(),this.onDidChangeScreenReaderOptimized(()=>c())}get onDidChangeScreenReaderOptimized(){return this._onDidChangeScreenReaderOptimized.event}isScreenReaderOptimized(){const g=this._configurationService.getValue("editor.accessibilitySupport");return g==="on"||g==="auto"&&this._accessibilitySupport===2}getAccessibilitySupport(){return this._accessibilitySupport}};C=Me([_e(0,w.IContextKeyService),_e(1,S.IConfigurationService)],C),e.AccessibilityService=C}),define(Q[569],J([0,1,51,19,20,40,24,95,46]),function(q,e,b,N,M,w,S,C,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ConfigurationChangeEvent=e.Configuration=e.DefaultConfigurationModel=e.ConfigurationModel=void 0;class g{constructor(a={},u=[],r=[]){this._contents=a,this._keys=u,this._overrides=r,this.isFrozen=!1}get contents(){return this.checkAndFreeze(this._contents)}get overrides(){return this.checkAndFreeze(this._overrides)}get keys(){return this.checkAndFreeze(this._keys)}isEmpty(){return this._keys.length===0&&Object.keys(this._contents).length===0&&this._overrides.length===0}getValue(a){return a?d.getConfigurationValue(this.contents,a):this.contents}override(a){const u=this.getContentsForOverrideIdentifer(a);if(!u||typeof u!="object"||!Object.keys(u).length)return this;let r={};for(const i of N.distinct([...Object.keys(this.contents),...Object.keys(u)])){let n=this.contents[i],t=u[i];t&&(typeof n=="object"&&typeof t=="object"?(n=w.deepClone(n),this.mergeContents(n,t)):n=t),r[i]=n}return new g(r,this.keys,this.overrides)}merge(...a){const u=w.deepClone(this.contents),r=w.deepClone(this.overrides),i=[...this.keys];for(const n of a){this.mergeContents(u,n.contents);for(const t of n.overrides){const[l]=r.filter(h=>N.equals(h.identifiers,t.identifiers));l?this.mergeContents(l.contents,t.contents):r.push(w.deepClone(t))}for(const t of n.keys)i.indexOf(t)===-1&&i.push(t)}return new g(u,i,r)}freeze(){return this.isFrozen=!0,this}mergeContents(a,u){for(const r of Object.keys(u)){if(r in a&&M.isObject(a[r])&&M.isObject(u[r])){this.mergeContents(a[r],u[r]);continue}a[r]=w.deepClone(u[r])}}checkAndFreeze(a){return this.isFrozen&&!Object.isFrozen(a)?w.deepFreeze(a):a}getContentsForOverrideIdentifer(a){for(const u of this.overrides)if(u.identifiers.indexOf(a)!==-1)return u.contents;return null}toJSON(){return{contents:this.contents,overrides:this.overrides,keys:this.keys}}setValue(a,u){this.addKey(a),d.addToValueTree(this.contents,a,u,r=>{throw new Error(r)})}removeValue(a){this.removeKey(a)&&d.removeFromValueTree(this.contents,a)}addKey(a){let u=this.keys.length;for(let r=0;rconsole.error(`Conflict in default settings file: ${n}`))});super(a,u,r)}}e.DefaultConfigurationModel=p;class c{constructor(a,u,r=new g,i=new g,n=new b.ResourceMap,t=new g,l=new b.ResourceMap,h=!0){this._defaultConfiguration=a,this._localUserConfiguration=u,this._remoteUserConfiguration=r,this._workspaceConfiguration=i,this._folderConfigurations=n,this._memoryConfiguration=t,this._memoryConfigurationByResource=l,this._freeze=h,this._workspaceConsolidatedConfiguration=null,this._foldersConsolidatedConfigurations=new b.ResourceMap,this._userConfiguration=null}getValue(a,u,r){return this.getConsolidateConfigurationModel(u,r).getValue(a)}updateValue(a,u,r={}){let i;r.resource?(i=this._memoryConfigurationByResource.get(r.resource),i||(i=new g,this._memoryConfigurationByResource.set(r.resource,i))):i=this._memoryConfiguration,u===void 0?i.removeValue(a):i.setValue(a,u),r.resource||(this._workspaceConsolidatedConfiguration=null)}get userConfiguration(){return this._userConfiguration||(this._userConfiguration=this._remoteUserConfiguration.isEmpty()?this._localUserConfiguration:this._localUserConfiguration.merge(this._remoteUserConfiguration),this._freeze&&this._userConfiguration.freeze()),this._userConfiguration}getConsolidateConfigurationModel(a,u){let r=this.getConsolidatedConfigurationModelForResource(a,u);return a.overrideIdentifier?r.override(a.overrideIdentifier):r}getConsolidatedConfigurationModelForResource({resource:a},u){let r=this.getWorkspaceConsolidatedConfiguration();if(u&&a){const i=u.getFolder(a);i&&(r=this.getFolderConsolidatedConfiguration(i.uri)||r);const n=this._memoryConfigurationByResource.get(a);n&&(r=r.merge(n))}return r}getWorkspaceConsolidatedConfiguration(){return this._workspaceConsolidatedConfiguration||(this._workspaceConsolidatedConfiguration=this._defaultConfiguration.merge(this.userConfiguration,this._workspaceConfiguration,this._memoryConfiguration),this._freeze&&(this._workspaceConfiguration=this._workspaceConfiguration.freeze())),this._workspaceConsolidatedConfiguration}getFolderConsolidatedConfiguration(a){let u=this._foldersConsolidatedConfigurations.get(a);if(!u){const r=this.getWorkspaceConsolidatedConfiguration(),i=this._folderConfigurations.get(a);i?(u=r.merge(i),this._freeze&&(u=u.freeze()),this._foldersConsolidatedConfigurations.set(a,u)):u=r}return u}toData(){return{defaults:{contents:this._defaultConfiguration.contents,overrides:this._defaultConfiguration.overrides,keys:this._defaultConfiguration.keys},user:{contents:this.userConfiguration.contents,overrides:this.userConfiguration.overrides,keys:this.userConfiguration.keys},workspace:{contents:this._workspaceConfiguration.contents,overrides:this._workspaceConfiguration.overrides,keys:this._workspaceConfiguration.keys},folders:[...this._folderConfigurations.keys()].reduce((a,u)=>{const{contents:r,overrides:i,keys:n}=this._folderConfigurations.get(u);return a.push([u,{contents:r,overrides:i,keys:n}]),a},[])}}static parse(a){const u=this.parseConfigurationModel(a.defaults),r=this.parseConfigurationModel(a.user),i=this.parseConfigurationModel(a.workspace),n=a.folders.reduce((t,l)=>(t.set(S.URI.revive(l[0]),this.parseConfigurationModel(l[1])),t),new b.ResourceMap);return new c(u,r,new g,i,n,new g,new b.ResourceMap,!1)}static parseConfigurationModel(a){return new g(a.contents,a.keys,a.overrides).freeze()}}e.Configuration=c;class o{constructor(a,u,r,i){this.change=a,this.previous=u,this.currentConfiguraiton=r,this.currentWorkspace=i,this._previousConfiguration=void 0;const n=new Set;a.keys.forEach(l=>n.add(l)),a.overrides.forEach(([,l])=>l.forEach(h=>n.add(h))),this.affectedKeys=[...n.values()];const t=new g;this.affectedKeys.forEach(l=>t.setValue(l,{})),this.affectedKeysTree=t.contents}get previousConfiguration(){return!this._previousConfiguration&&this.previous&&(this._previousConfiguration=c.parse(this.previous.data)),this._previousConfiguration}affectsConfiguration(a,u){var r;if(this.doesAffectedKeysTreeContains(this.affectedKeysTree,a)){if(u){const i=this.previousConfiguration?this.previousConfiguration.getValue(a,u,(r=this.previous)===null||r===void 0?void 0:r.workspace):void 0,n=this.currentConfiguraiton.getValue(a,u,this.currentWorkspace);return!w.equals(i,n)}return!0}return!1}doesAffectedKeysTreeContains(a,u){let r=d.toValuesTree({[u]:!0},()=>{}),i;for(;typeof r=="object"&&(i=Object.keys(r)[0]);){if(a=a[i],!a)return!1;r=r[i]}return!0}}e.ConfigurationChangeEvent=o}),define(Q[570],J([0,1,6,54,2,51,520,26,46,16,251]),function(q,e,b,N,M,w,S,C,d,g,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ContextKeyService=e.AbstractContextKeyService=e.Context=void 0;const c="data-keybinding-context";class o{constructor(f,v){this._id=f,this._parent=v,this._value=Object.create(null),this._value._contextId=f}setValue(f,v){return this._value[f]!==v?(this._value[f]=v,!0):!1}removeValue(f){return f in this._value?(delete this._value[f],!0):!1}getValue(f){const v=this._value[f];return typeof v=="undefined"&&this._parent?this._parent.getValue(f):v}}e.Context=o;class s extends o{constructor(){super(-1,null)}setValue(f,v){return!1}removeValue(f){return!1}getValue(f){}}s.INSTANCE=new s;class a extends o{constructor(f,v,y){super(f,null);this._configurationService=v,this._values=w.TernarySearchTree.forConfigKeys(),this._listener=this._configurationService.onDidChangeConfiguration(L=>{if(L.source===6){const I=Array.from(N.Iterable.map(this._values,([k])=>k));this._values.clear(),y.fire(new i(I))}else{const I=[];for(const k of L.affectedKeys){const E=`config.${k}`,T=this._values.findSuperstr(E);T!==void 0&&(I.push(...N.Iterable.map(T,([O])=>O)),this._values.deleteSuperstr(E)),this._values.has(E)&&(I.push(E),this._values.delete(E))}y.fire(new i(I))}})}dispose(){this._listener.dispose()}getValue(f){if(f.indexOf(a._keyPrefix)!==0)return super.getValue(f);if(this._values.has(f))return this._values.get(f);const v=f.substr(a._keyPrefix.length),y=this._configurationService.getValue(v);let L;switch(typeof y){case"number":case"boolean":case"string":L=y;break;default:Array.isArray(y)?L=JSON.stringify(y):L=y}return this._values.set(f,L),L}setValue(f,v){return super.setValue(f,v)}removeValue(f){return super.removeValue(f)}}a._keyPrefix="config.";class u{constructor(f,v,y){this._service=f,this._key=v,this._defaultValue=y,this.reset()}set(f){this._service.setContext(this._key,f)}reset(){typeof this._defaultValue=="undefined"?this._service.removeContext(this._key):this._service.setContext(this._key,this._defaultValue)}get(){return this._service.getContextKeyValue(this._key)}}class r{constructor(f){this.key=f}affectsSome(f){return f.has(this.key)}}class i{constructor(f){this.keys=f}affectsSome(f){for(const v of this.keys)if(f.has(v))return!0;return!1}}class n{constructor(f){this.events=f}affectsSome(f){for(const v of this.events)if(v.affectsSome(f))return!0;return!1}}class t{constructor(f){this._onDidChangeContext=new b.PauseableEmitter({merge:v=>new n(v)}),this.onDidChangeContext=this._onDidChangeContext.event,this._isDisposed=!1,this._myContextId=f}createKey(f,v){if(this._isDisposed)throw new Error("AbstractContextKeyService has been disposed");return new u(this,f,v)}bufferChangeEvents(f){this._onDidChangeContext.pause();try{f()}finally{this._onDidChangeContext.resume()}}createScoped(f){if(this._isDisposed)throw new Error("AbstractContextKeyService has been disposed");return new h(this,f)}contextMatchesRules(f){if(this._isDisposed)throw new Error("AbstractContextKeyService has been disposed");const v=this.getContextValuesContainer(this._myContextId);return p.KeybindingResolver.contextMatchesRules(v,f)}getContextKeyValue(f){if(!this._isDisposed)return this.getContextValuesContainer(this._myContextId).getValue(f)}setContext(f,v){if(!this._isDisposed){const y=this.getContextValuesContainer(this._myContextId);!y||y.setValue(f,v)&&this._onDidChangeContext.fire(new r(f))}}removeContext(f){this._isDisposed||this.getContextValuesContainer(this._myContextId).removeValue(f)&&this._onDidChangeContext.fire(new r(f))}getContext(f){return this._isDisposed?s.INSTANCE:this.getContextValuesContainer(m(f))}}e.AbstractContextKeyService=t;let l=class extends t{constructor(f){super(0);this._contexts=new Map,this._toDispose=new M.DisposableStore,this._lastContextId=0;const v=new a(this._myContextId,f,this._onDidChangeContext);this._contexts.set(this._myContextId,v),this._toDispose.add(v)}dispose(){this._onDidChangeContext.dispose(),this._isDisposed=!0,this._toDispose.dispose()}getContextValuesContainer(f){return this._isDisposed?s.INSTANCE:this._contexts.get(f)||s.INSTANCE}createChildContext(f=this._myContextId){if(this._isDisposed)throw new Error("ContextKeyService has been disposed");let v=++this._lastContextId;return this._contexts.set(v,new o(v,this.getContextValuesContainer(f))),v}disposeContext(f){this._isDisposed||this._contexts.delete(f)}};l=Me([_e(0,d.IConfigurationService)],l),e.ContextKeyService=l;class h extends t{constructor(f,v){super(f.createChildContext());if(this._parentChangeListener=new M.MutableDisposable,this._parent=f,this._updateParentChangeListener(),this._domNode=v,this._domNode.hasAttribute(c)){let y="";this._domNode.classList&&(y=Array.from(this._domNode.classList.values()).join(", ")),console.error(`Element already has context attribute${y?": "+y:""}`)}this._domNode.setAttribute(c,String(this._myContextId))}_updateParentChangeListener(){this._parentChangeListener.value=this._parent.onDidChangeContext(this._onDidChangeContext.fire,this._onDidChangeContext)}dispose(){this._isDisposed||(this._onDidChangeContext.dispose(),this._parent.disposeContext(this._myContextId),this._parentChangeListener.dispose(),this._domNode.removeAttribute(c),this._isDisposed=!0)}getContextValuesContainer(f){return this._isDisposed?s.INSTANCE:this._parent.getContextValuesContainer(f)}createChildContext(f=this._myContextId){if(this._isDisposed)throw new Error("ScopedContextKeyService has been disposed");return this._parent.createChildContext(f)}disposeContext(f){this._isDisposed||this._parent.disposeContext(f)}}function m(_){for(;_;){if(_.hasAttribute(c)){const f=_.getAttribute(c);return f?parseInt(f,10):NaN}_=_.parentElement}return 0}C.CommandsRegistry.registerCommand(g.SET_CONTEXT_COMMAND_ID,function(_,f,v){_.get(g.IContextKeyService).createKey(String(f),v)}),C.CommandsRegistry.registerCommand({id:"getContextKeyInfo",handler(){return[...g.RawContextKey.all()].sort((_,f)=>_.key.localeCompare(f.key))},description:{description:S.localize(0,null),args:[]}}),C.CommandsRegistry.registerCommand("_generateContextKeyInfo",function(){const _=[],f=new Set;for(let v of g.RawContextKey.all())f.has(v.key)||(f.add(v.key),_.push(v));_.sort((v,y)=>v.key.localeCompare(y.key)),console.log(JSON.stringify(_,void 0,2))})}),define(Q[86],J([0,1,39,17,26,33]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Extensions=e.KeybindingsRegistry=void 0;class S{constructor(){this._coreKeybindings=[],this._extensionKeybindings=[],this._cachedMergedKeybindings=null}static bindToCurrentPlatform(g){if(N.OS===1){if(g&&g.win)return g.win}else if(N.OS===2){if(g&&g.mac)return g.mac}else if(g&&g.linux)return g.linux;return g}registerKeybindingRule(g){const p=S.bindToCurrentPlatform(g);if(p&&p.primary){const c=b.createKeybinding(p.primary,N.OS);c&&this._registerDefaultKeybinding(c,g.id,g.args,g.weight,0,g.when)}if(p&&Array.isArray(p.secondary))for(let c=0,o=p.secondary.length;c=21&&g<=30||g>=31&&g<=56?!0:g===80||g===81||g===82||g===83||g===84||g===85||g===86||g===110||g===111||g===87||g===88||g===89||g===90||g===91||g===92}_assertNoCtrlAlt(g,p){g.ctrlKey&&g.altKey&&!g.metaKey&&S._mightProduceChar(g.keyCode)&&console.warn("Ctrl+Alt+ keybindings should not be used by default under Windows. Offender: ",g," for ",p)}_registerDefaultKeybinding(g,p,c,o,s,a){N.OS===1&&this._assertNoCtrlAlt(g.parts[0],p),this._coreKeybindings.push({keybinding:g,command:p,commandArgs:c,when:a,weight1:o,weight2:s,extensionId:null,isBuiltinExtension:!1}),this._cachedMergedKeybindings=null}getDefaultKeybindings(){return this._cachedMergedKeybindings||(this._cachedMergedKeybindings=[].concat(this._coreKeybindings).concat(this._extensionKeybindings),this._cachedMergedKeybindings.sort(C)),this._cachedMergedKeybindings.slice(0)}}e.KeybindingsRegistry=new S,e.Extensions={EditorModes:"platform.keybindingsRegistry"},w.Registry.add(e.Extensions.EditorModes,e.KeybindingsRegistry);function C(d,g){return d.weight1!==g.weight1?d.weight1-g.weight1:d.commandg.command?1:d.weight2-g.weight2}}),define(Q[571],J([0,1,16,432,86,433]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ContextScopedReplaceInput=e.ContextScopedFindInput=e.createAndBindHistoryNavigationWidgetScopedContextKeyService=e.HistoryNavigationEnablementContext=e.HistoryNavigationWidgetContext=void 0,e.HistoryNavigationWidgetContext="historyNavigationWidget",e.HistoryNavigationEnablementContext="historyNavigationEnabled";function S(o,s,a){new b.RawContextKey(a,s).bindTo(o)}function C(o,s){return o.createScoped(s.target)}function d(o,s){return o.getContext(document.activeElement).getValue(s)}function g(o,s){const a=C(o,s);S(a,s,e.HistoryNavigationWidgetContext);const u=new b.RawContextKey(e.HistoryNavigationEnablementContext,!0).bindTo(a);return{scopedContextKeyService:a,historyNavigationEnablement:u}}e.createAndBindHistoryNavigationWidgetScopedContextKeyService=g;let p=class extends N.FindInput{constructor(s,a,u,r,i=!1){super(s,a,i,u);this._register(g(r,{target:this.inputBox.element,historyNavigator:this.inputBox}).scopedContextKeyService)}};p=Me([_e(3,b.IContextKeyService)],p),e.ContextScopedFindInput=p;let c=class extends w.ReplaceInput{constructor(s,a,u,r,i=!1){super(s,a,i,u);this._register(g(r,{target:this.inputBox.element,historyNavigator:this.inputBox}).scopedContextKeyService)}};c=Me([_e(3,b.IContextKeyService)],c),e.ContextScopedReplaceInput=c,M.KeybindingsRegistry.registerCommandAndKeybindingRule({id:"history.showPrevious",weight:200,when:b.ContextKeyExpr.and(b.ContextKeyExpr.has(e.HistoryNavigationWidgetContext),b.ContextKeyExpr.equals(e.HistoryNavigationEnablementContext,!0)),primary:16,secondary:[512|16],handler:(o,s)=>{const a=d(o.get(b.IContextKeyService),e.HistoryNavigationWidgetContext);a&&a.historyNavigator.showPreviousValue()}}),M.KeybindingsRegistry.registerCommandAndKeybindingRule({id:"history.showNext",weight:200,when:b.ContextKeyExpr.and(b.ContextKeyExpr.has(e.HistoryNavigationWidgetContext),b.ContextKeyExpr.equals(e.HistoryNavigationEnablementContext,!0)),primary:18,secondary:[512|18],handler:(o,s)=>{const a=d(o.get(b.IContextKeyService),e.HistoryNavigationWidgetContext);a&&a.historyNavigator.showNextValue()}})}),define(Q[96],J([0,1,33,19,2]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.QuickAccessRegistry=e.Extensions=e.DefaultQuickAccessFilterValue=void 0;var w;(function(C){C[C.PRESERVE=0]="PRESERVE",C[C.LAST=1]="LAST"})(w=e.DefaultQuickAccessFilterValue||(e.DefaultQuickAccessFilterValue={})),e.Extensions={Quickaccess:"workbench.contributions.quickaccess"};class S{constructor(){this.providers=[],this.defaultProvider=void 0}registerQuickAccessProvider(d){return d.prefix.length===0?this.defaultProvider=d:this.providers.push(d),this.providers.sort((g,p)=>p.prefix.length-g.prefix.length),M.toDisposable(()=>{this.providers.splice(this.providers.indexOf(d),1),this.defaultProvider===d&&(this.defaultProvider=void 0)})}getQuickAccessProviders(){return N.coalesce([this.defaultProvider,...this.providers])}getQuickAccessProvider(d){return d&&this.providers.find(p=>d.startsWith(p.prefix))||void 0||this.defaultProvider}}e.QuickAccessRegistry=S,b.Registry.add(e.Extensions.Quickaccess,new S)}),define(Q[572],J([0,1,78,96,33,526,2]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.HelpQuickAccessProvider=void 0;let C=class lt{constructor(g){this.quickInputService=g,this.registry=M.Registry.as(N.Extensions.Quickaccess)}provide(g){const p=new S.DisposableStore;p.add(g.onDidAccept(()=>{const[s]=g.selectedItems;s&&this.quickInputService.quickAccess.show(s.prefix,{preserveValue:!0})})),p.add(g.onDidChangeValue(s=>{const a=this.registry.getQuickAccessProvider(s.substr(lt.PREFIX.length));a&&a.prefix&&a.prefix!==lt.PREFIX&&this.quickInputService.quickAccess.show(a.prefix,{preserveValue:!0})}));const{editorProviders:c,globalProviders:o}=this.getQuickAccessProviders();return g.items=c.length===0||o.length===0?[...c.length===0?o:c]:[{label:w.localize(0,null),type:"separator"},...o,{label:w.localize(1,null),type:"separator"},...c],p}getQuickAccessProviders(){const g=[],p=[];for(const c of this.registry.getQuickAccessProviders().sort((o,s)=>o.prefix.localeCompare(s.prefix)))if(c.prefix!==lt.PREFIX)for(const o of c.helpEntries){const s=o.prefix||c.prefix,a=s||"\u2026";(o.needsEditor?p:g).push({prefix:s,label:a,ariaLabel:w.localize(2,null,a,o.description),description:o.description})}return{editorProviders:p,globalProviders:g}}};C.PREFIX="?",C=Me([_e(0,b.IQuickInputService)],C),e.HelpQuickAccessProvider=C}),define(Q[573],J([0,1,33,96,64,572]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),b.Registry.as(N.Extensions.Quickaccess).registerQuickAccessProvider({ctor:w.HelpQuickAccessProvider,prefix:"",helpEntries:[{description:M.QuickHelpNLS.helpQuickAccessActionLabel,needsEditor:!0}]})}),define(Q[574],J([0,1,78,2,96,33,23,9,88]),function(q,e,b,N,M,w,S,C,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.QuickAccessController=void 0;let g=class extends N.Disposable{constructor(c,o){super();this.quickInputService=c,this.instantiationService=o,this.registry=w.Registry.as(M.Extensions.Quickaccess),this.mapProviderToDescriptor=new Map,this.lastAcceptedPickerValues=new Map,this.visibleQuickAccess=void 0}show(c="",o){var s;const[a,u]=this.getOrInstantiateProvider(c),r=this.visibleQuickAccess,i=r==null?void 0:r.descriptor;if(r&&u&&i===u){c!==u.prefix&&!(o==null?void 0:o.preserveValue)&&(r.picker.value=c),this.adjustValueSelection(r.picker,u,o);return}if(u&&!(o==null?void 0:o.preserveValue)){let h;if(r&&i&&i!==u){const m=r.value.substr(i.prefix.length);m&&(h=`${u.prefix}${m}`)}if(!h){const m=a==null?void 0:a.defaultFilterValue;m===M.DefaultQuickAccessFilterValue.LAST?h=this.lastAcceptedPickerValues.get(u):typeof m=="string"&&(h=`${u.prefix}${m}`)}typeof h=="string"&&(c=h)}const n=new N.DisposableStore,t=n.add(this.quickInputService.createQuickPick());t.value=c,this.adjustValueSelection(t,u,o),t.placeholder=u==null?void 0:u.placeholder,t.quickNavigate=o==null?void 0:o.quickNavigateConfiguration,t.hideInput=!!t.quickNavigate&&!r,(typeof(o==null?void 0:o.itemActivation)=="number"||(o==null?void 0:o.quickNavigateConfiguration))&&(t.itemActivation=(s=o==null?void 0:o.itemActivation)!==null&&s!==void 0?s:b.ItemActivation.SECOND),t.contextKey=u==null?void 0:u.contextKey,t.filterValue=h=>h.substring(u?u.prefix.length:0),(u==null?void 0:u.placeholder)&&(t.ariaLabel=u==null?void 0:u.placeholder);const l=this.registerPickerListeners(t,a,u,c,n);a&&n.add(a.provide(t,l)),t.show()}adjustValueSelection(c,o,s){var a;let u;(s==null?void 0:s.preserveValue)?u=[c.value.length,c.value.length]:u=[(a=o==null?void 0:o.prefix.length)!==null&&a!==void 0?a:0,c.value.length],c.valueSelection=u}registerPickerListeners(c,o,s,a,u){const r=this.visibleQuickAccess={picker:c,descriptor:s,value:a};u.add(N.toDisposable(()=>{r===this.visibleQuickAccess&&(this.visibleQuickAccess=void 0)})),u.add(c.onDidChangeValue(n=>{const[t]=this.getOrInstantiateProvider(n);t!==o?this.show(n,{preserveValue:!0}):r.value=n})),s&&u.add(c.onDidAccept(()=>{this.lastAcceptedPickerValues.set(s,c.value)}));const i=u.add(new S.CancellationTokenSource);return d.once(c.onDidHide)(()=>{c.selectedItems.length===0&&i.cancel(),u.dispose()}),i.token}getOrInstantiateProvider(c){const o=this.registry.getQuickAccessProvider(c);if(!o)return[void 0,void 0];let s=this.mapProviderToDescriptor.get(o);return s||(s=this.instantiationService.createInstance(o.ctor),this.mapProviderToDescriptor.set(o,s)),[s,o]}};g=Me([_e(0,b.IQuickInputService),_e(1,C.IInstantiationService)],g),e.QuickAccessController=g}),define(Q[79],J([0,1,9,6,2,20,293]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InMemoryStorageService=e.AbstractStorageService=e.WillSaveStateReason=e.IStorageService=void 0;const C="__$__targetStorageMarker";e.IStorageService=b.createDecorator("storageService");var d;(function(c){c[c.NONE=0]="NONE",c[c.SHUTDOWN=1]="SHUTDOWN"})(d=e.WillSaveStateReason||(e.WillSaveStateReason={}));class g extends M.Disposable{constructor(o={flushInterval:g.DEFAULT_FLUSH_INTERVAL}){super();this.options=o,this._onDidChangeValue=this._register(new N.PauseableEmitter),this._onDidChangeTarget=this._register(new N.PauseableEmitter),this._onWillSaveState=this._register(new N.Emitter),this.onWillSaveState=this._onWillSaveState.event,this._workspaceKeyTargets=void 0,this._globalKeyTargets=void 0}emitDidChangeValue(o,s){s===C?(o===0?this._globalKeyTargets=void 0:o===1&&(this._workspaceKeyTargets=void 0),this._onDidChangeTarget.fire({scope:o})):this._onDidChangeValue.fire({scope:o,key:s,target:this.getKeyTargets(o)[s]})}get(o,s,a){var u;return(u=this.getStorage(s))===null||u===void 0?void 0:u.get(o,a)}getBoolean(o,s,a){var u;return(u=this.getStorage(s))===null||u===void 0?void 0:u.getBoolean(o,a)}getNumber(o,s,a){var u;return(u=this.getStorage(s))===null||u===void 0?void 0:u.getNumber(o,a)}store(o,s,a,u){if(w.isUndefinedOrNull(s)){this.remove(o,a);return}this.withPausedEmitters(()=>{var r;this.updateKeyTarget(o,a,u),(r=this.getStorage(a))===null||r===void 0||r.set(o,s)})}remove(o,s){this.withPausedEmitters(()=>{var a;this.updateKeyTarget(o,s,void 0),(a=this.getStorage(s))===null||a===void 0||a.delete(o)})}withPausedEmitters(o){this._onDidChangeValue.pause(),this._onDidChangeTarget.pause();try{o()}finally{this._onDidChangeValue.resume(),this._onDidChangeTarget.resume()}}updateKeyTarget(o,s,a){var u,r;const i=this.getKeyTargets(s);typeof a=="number"?i[o]!==a&&(i[o]=a,(u=this.getStorage(s))===null||u===void 0||u.set(C,JSON.stringify(i))):typeof i[o]=="number"&&(delete i[o],(r=this.getStorage(s))===null||r===void 0||r.set(C,JSON.stringify(i)))}get workspaceKeyTargets(){return this._workspaceKeyTargets||(this._workspaceKeyTargets=this.loadKeyTargets(1)),this._workspaceKeyTargets}get globalKeyTargets(){return this._globalKeyTargets||(this._globalKeyTargets=this.loadKeyTargets(0)),this._globalKeyTargets}getKeyTargets(o){return o===0?this.globalKeyTargets:this.workspaceKeyTargets}loadKeyTargets(o){const s=this.get(C,o);if(s)try{return JSON.parse(s)}catch(a){}return Object.create(null)}}e.AbstractStorageService=g,g.DEFAULT_FLUSH_INTERVAL=60*1e3;class p extends g{constructor(){super();this.globalStorage=new S.Storage(new S.InMemoryStorageDatabase),this.workspaceStorage=new S.Storage(new S.InMemoryStorageDatabase),this._register(this.workspaceStorage.onDidChangeStorage(o=>this.emitDidChangeValue(1,o))),this._register(this.globalStorage.onDidChangeStorage(o=>this.emitDidChangeValue(0,o)))}getStorage(o){return o===0?this.globalStorage:this.workspaceStorage}}e.InMemoryStorageService=p}),define(Q[575],J([0,1,9,74,248,51,79,3,15,88]),function(q,e,b,N,M,w,S,C,d,g){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CodeLensCache=e.ICodeLensCache=void 0,e.ICodeLensCache=b.createDecorator("ICodeLensCache");class p{constructor(s,a){this.lineCount=s,this.data=a}}let c=class{constructor(s){this._fakeProvider=new class{provideCodeLenses(){throw new Error("not supported")}},this._cache=new w.LRUCache(20,.75);const a="codelens/cache";d.runWhenIdle(()=>s.remove(a,1));const u="codelens/cache2",r=s.get(u,1,"{}");this._deserialize(r),g.once(s.onWillSaveState)(i=>{i.reason===S.WillSaveStateReason.SHUTDOWN&&s.store(u,this._serialize(),1,1)})}put(s,a){const u=a.lenses.map(n=>{var t;return{range:n.symbol.range,command:n.symbol.command&&{id:"",title:(t=n.symbol.command)===null||t===void 0?void 0:t.title}}}),r=new M.CodeLensModel;r.add({lenses:u,dispose:()=>{}},this._fakeProvider);const i=new p(s.getLineCount(),r);this._cache.set(s.uri.toString(),i)}get(s){const a=this._cache.get(s.uri.toString());return a&&a.lineCount===s.getLineCount()?a.data:void 0}delete(s){this._cache.delete(s.uri.toString())}_serialize(){const s=Object.create(null);for(const[a,u]of this._cache){const r=new Set;for(const i of u.data.lenses)r.add(i.symbol.range.startLineNumber);s[a]={lineCount:u.lineCount,lines:[...r.values()]}}return JSON.stringify(s)}_deserialize(s){try{const a=JSON.parse(s);for(const u in a){const r=a[u],i=[];for(const t of r.lines)i.push({range:new C.Range(t,1,t,11)});const n=new M.CodeLensModel;n.add({lenses:i,dispose(){}},this._fakeProvider),this._cache.set(u,new p(r.lineCount,n))}}catch(a){}}};c=Me([_e(0,S.IStorageService)],c),e.CodeLensCache=c,N.registerSingleton(e.ICodeLensCache,c)}),define(Q[576],J([0,1,51,79,18,2,15,9,46,74,57]),function(q,e,b,N,M,w,S,C,d,g,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ISuggestMemoryService=e.SuggestMemoryService=e.PrefixMemory=e.LRUMemory=e.NoMemory=e.Memory=void 0;class c{constructor(i){this.name=i}select(i,n,t){if(t.length===0)return 0;let l=t[0].score[0];for(let h=0;hf&&L.type===t[v].completion.kind&&L.insertText===t[v].completion.insertText&&(f=L.touch,_=v),t[v].completion.preselect&&m===-1)return m=v}return _!==-1?_:m!==-1?m:0}toJSON(){return this._cache.toJSON()}fromJSON(i){this._cache.clear();let n=0;for(const[t,l]of i)l.touch=n,l.type=typeof l.type=="number"?l.type:M.completionKindFromString(l.type),this._cache.set(t,l);this._seq=this._cache.size}}e.LRUMemory=s;class a extends c{constructor(){super("recentlyUsedByPrefix");this._trie=b.TernarySearchTree.forStrings(),this._seq=0}memorize(i,n,t){const{word:l}=i.getWordUntilPosition(n),h=`${i.getLanguageIdentifier().language}/${l}`;this._trie.set(h,{type:t.completion.kind,insertText:t.completion.insertText,touch:this._seq++})}select(i,n,t){let{word:l}=i.getWordUntilPosition(n);if(!l)return super.select(i,n,t);let h=`${i.getLanguageIdentifier().language}/${l}`,m=this._trie.get(h);if(m||(m=this._trie.findSubstr(h)),m)for(let _=0;_i.push([t,n])),i.sort((n,t)=>-(n[1].touch-t[1].touch)).forEach((n,t)=>n[1].touch=t),i.slice(0,200)}fromJSON(i){if(this._trie.clear(),i.length>0){this._seq=i[0][1].touch+1;for(const[n,t]of i)t.type=typeof t.type=="number"?t.type:M.completionKindFromString(t.type),this._trie.set(n,t)}}}e.PrefixMemory=a;let u=class dt{constructor(i,n,t){this._storageService=i,this._modeService=n,this._configService=t,this._disposables=new w.DisposableStore,this._persistSoon=new S.RunOnceScheduler(()=>this._saveState(),500),this._disposables.add(i.onWillSaveState(l=>{l.reason===N.WillSaveStateReason.SHUTDOWN&&this._saveState()}))}dispose(){this._disposables.dispose(),this._persistSoon.dispose()}memorize(i,n,t){this._withStrategy(i,n).memorize(i,n,t),this._persistSoon.schedule()}select(i,n,t){return this._withStrategy(i,n).select(i,n,t)}_withStrategy(i,n){var t,l;const h=this._configService.getValue("editor.suggestSelection",{overrideIdentifier:(t=this._modeService.getLanguageIdentifier(i.getLanguageIdAtPosition(n.lineNumber,n.column)))===null||t===void 0?void 0:t.language,resource:i.uri});if(((l=this._strategy)===null||l===void 0?void 0:l.name)!==h){this._saveState();const m=dt._strategyCtors.get(h)||o;this._strategy=new m;try{const f=this._configService.getValue("editor.suggest.shareSuggestSelections")?0:1,v=this._storageService.get(`${dt._storagePrefix}/${h}`,f);v&&this._strategy.fromJSON(JSON.parse(v))}catch(_){}}return this._strategy}_saveState(){if(this._strategy){const n=this._configService.getValue("editor.suggest.shareSuggestSelections")?0:1,t=JSON.stringify(this._strategy);this._storageService.store(`${dt._storagePrefix}/${this._strategy.name}`,t,n,1)}}};u._strategyCtors=new Map([["recentlyUsedByPrefix",a],["recentlyUsed",s],["first",o]]),u._storagePrefix="suggest/memories",u=Me([_e(0,N.IStorageService),_e(1,p.IModeService),_e(2,d.IConfigurationService)],u),e.SuggestMemoryService=u,e.ISuggestMemoryService=C.createDecorator("ISuggestMemories"),g.registerSingleton(e.ISuggestMemoryService,u,!0)}),define(Q[87],J([0,1,9]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ITelemetryService=void 0,e.ITelemetryService=b.createDecorator("telemetryService")}),define(Q[577],J([0,1,525,561,2,66,20,51,79,46,9,37,26,87,12,32,437]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CommandsHistory=e.AbstractCommandsQuickAccessProvider=void 0;let i=class ut extends N.PickerQuickAccessProvider{constructor(l,h,m,_,f,v){super(ut.PREFIX,l);this.options=l,this.instantiationService=h,this.keybindingService=m,this.commandService=_,this.telemetryService=f,this.notificationService=v,this.commandsHistory=this._register(this.instantiationService.createInstance(n))}getPicks(l,h,m){return Ie(this,void 0,void 0,function*(){const _=yield this.getCommandPicks(h,m);if(m.isCancellationRequested)return[];const f=[];for(const I of _){const k=S.withNullAsUndefined(ut.WORD_FILTER(l,I.label)),E=I.commandAlias?S.withNullAsUndefined(ut.WORD_FILTER(l,I.commandAlias)):void 0;k||E?(I.highlights={label:k,detail:this.options.showAlias?E:void 0},f.push(I)):l===I.commandId&&f.push(I)}const v=new Map;for(const I of f){const k=v.get(I.label);k?(I.description=I.commandId,k.description=k.commandId):v.set(I.label,I)}f.sort((I,k)=>{const E=this.commandsHistory.peek(I.commandId),T=this.commandsHistory.peek(k.commandId);return E&&T?E>T?-1:1:E?-1:T?1:I.label.localeCompare(k.label)});const y=[];let L=!1;for(let I=0;IIe(this,void 0,void 0,function*(){this.commandsHistory.push(k.commandId),this.telemetryService.publicLog2("workbenchActionExecuted",{id:k.commandId,from:"quick open"});try{yield this.commandService.executeCommand(k.commandId)}catch(O){a.isPromiseCanceledError(O)||this.notificationService.error(b.localize(3,null,k.label,r.toErrorMessage(O)))}})}))}return y})}};i.PREFIX=">",i.WORD_FILTER=w.or(w.matchesPrefix,w.matchesWords,w.matchesContiguousSubString),i=Me([_e(1,p.IInstantiationService),_e(2,c.IKeybindingService),_e(3,o.ICommandService),_e(4,s.ITelemetryService),_e(5,u.INotificationService)],i),e.AbstractCommandsQuickAccessProvider=i;let n=class qe extends M.Disposable{constructor(l,h){super();this.storageService=l,this.configurationService=h,this.configuredCommandsHistoryLength=0,this.updateConfiguration(),this.load(),this.registerListeners()}registerListeners(){this._register(this.configurationService.onDidChangeConfiguration(()=>this.updateConfiguration()))}updateConfiguration(){this.configuredCommandsHistoryLength=qe.getConfiguredCommandHistoryLength(this.configurationService),qe.cache&&qe.cache.limit!==this.configuredCommandsHistoryLength&&(qe.cache.limit=this.configuredCommandsHistoryLength,qe.saveState(this.storageService))}load(){const l=this.storageService.get(qe.PREF_KEY_CACHE,0);let h;if(l)try{h=JSON.parse(l)}catch(_){}const m=qe.cache=new C.LRUCache(this.configuredCommandsHistoryLength,1);if(h){let _;h.usesLRU?_=h.entries:_=h.entries.sort((f,v)=>f.value-v.value),_.forEach(f=>m.set(f.key,f.value))}qe.counter=this.storageService.getNumber(qe.PREF_KEY_COUNTER,0,qe.counter)}push(l){!qe.cache||(qe.cache.set(l,qe.counter++),qe.saveState(this.storageService))}peek(l){var h;return(h=qe.cache)===null||h===void 0?void 0:h.peek(l)}static saveState(l){if(!!qe.cache){const h={usesLRU:!0,entries:[]};qe.cache.forEach((m,_)=>h.entries.push({key:_,value:m})),l.store(qe.PREF_KEY_CACHE,JSON.stringify(h),0,0),l.store(qe.PREF_KEY_COUNTER,qe.counter,0,0)}}static getConfiguredCommandHistoryLength(l){var h,m;const f=(m=(h=l.getValue().workbench)===null||h===void 0?void 0:h.commandPalette)===null||m===void 0?void 0:m.history;return typeof f=="number"?f:qe.DEFAULT_COMMANDS_HISTORY_LENGTH}};n.DEFAULT_COMMANDS_HISTORY_LENGTH=50,n.PREF_KEY_CACHE="commandPalette.mru.cache",n.PREF_KEY_COUNTER="commandPalette.mru.counter",n.counter=1,n=Me([_e(0,d.IStorageService),_e(1,g.IConfigurationService)],n),e.CommandsHistory=n}),define(Q[578],J([0,1,577,102]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractEditorCommandsQuickAccessProvider=void 0;class M extends b.AbstractCommandsQuickAccessProvider{constructor(S,C,d,g,p,c){super(S,C,d,g,p,c)}getCodeEditorCommandPicks(){const S=this.activeTextEditorControl;if(!S)return[];const C=[];for(const d of S.getSupportedActions())C.push({commandId:d.id,commandAlias:d.alias,label:N.stripIcons(d.label)||d.id});return C}}e.AbstractEditorCommandsQuickAccessProvider=M}),define(Q[22],J([0,1,33,29,6,527,185,15]),function(q,e,b,N,M,w,S,C){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.workbenchColorsSchemaId=e.resolveColorValue=e.oneOf=e.transparent=e.lighten=e.darken=e.problemsInfoIconForeground=e.problemsWarningIconForeground=e.problemsErrorIconForeground=e.minimapSliderActiveBackground=e.minimapSliderHoverBackground=e.minimapSliderBackground=e.minimapBackground=e.minimapWarning=e.minimapError=e.minimapSelection=e.minimapFindMatch=e.overviewRulerSelectionHighlightForeground=e.overviewRulerFindMatchForeground=e.snippetFinalTabstopHighlightBorder=e.snippetFinalTabstopHighlightBackground=e.snippetTabstopHighlightBorder=e.snippetTabstopHighlightBackground=e.menuSeparatorBackground=e.menuSelectionBorder=e.menuSelectionBackground=e.menuSelectionForeground=e.menuBackground=e.menuForeground=e.menuBorder=e.tableColumnsBorder=e.treeIndentGuidesStroke=e.listFilterWidgetNoMatchesOutline=e.listFilterWidgetOutline=e.listFilterWidgetBackground=e.listHighlightForeground=e.listDropBackground=e.listHoverForeground=e.listHoverBackground=e.listInactiveFocusOutline=e.listInactiveFocusBackground=e.listInactiveSelectionForeground=e.listInactiveSelectionBackground=e.listActiveSelectionForeground=e.listActiveSelectionBackground=e.listFocusOutline=e.listFocusForeground=e.listFocusBackground=e.diffDiagonalFill=e.diffBorder=e.diffRemovedOutline=e.diffInsertedOutline=e.diffRemoved=e.diffInserted=e.defaultRemoveColor=e.defaultInsertColor=e.editorLightBulbAutoFixForeground=e.editorLightBulbForeground=e.editorInlineHintBackground=e.editorInlineHintForeground=e.editorActiveLinkForeground=e.editorHoverStatusBarBackground=e.editorHoverBorder=e.editorHoverForeground=e.editorHoverBackground=e.editorHoverHighlight=e.editorFindRangeHighlightBorder=e.editorFindMatchHighlightBorder=e.editorFindMatchBorder=e.editorFindRangeHighlight=e.editorFindMatchHighlight=e.editorFindMatch=e.editorSelectionHighlightBorder=e.editorSelectionHighlight=e.editorInactiveSelection=e.editorSelectionForeground=e.editorSelectionBackground=e.pickerGroupBorder=e.pickerGroupForeground=e.quickInputListFocusBackground=e.quickInputTitleBackground=e.quickInputForeground=e.quickInputBackground=e.editorWidgetResizeBorder=e.editorWidgetBorder=e.editorWidgetForeground=e.editorWidgetBackground=e.editorForeground=e.editorBackground=e.editorHintBorder=e.editorHintForeground=e.editorInfoBorder=e.editorInfoForeground=e.editorInfoBackground=e.editorWarningBorder=e.editorWarningForeground=e.editorWarningBackground=e.editorErrorBorder=e.editorErrorForeground=e.editorErrorBackground=e.progressBarBackground=e.scrollbarSliderActiveBackground=e.scrollbarSliderHoverBackground=e.scrollbarSliderBackground=e.scrollbarShadow=e.badgeForeground=e.badgeBackground=e.buttonHoverBackground=e.buttonBackground=e.buttonForeground=e.selectForeground=e.selectBackground=e.inputValidationErrorBorder=e.inputValidationErrorForeground=e.inputValidationErrorBackground=e.inputValidationWarningBorder=e.inputValidationWarningForeground=e.inputValidationWarningBackground=e.inputValidationInfoBorder=e.inputValidationInfoForeground=e.inputValidationInfoBackground=e.inputActiveOptionForeground=e.inputActiveOptionBackground=e.inputActiveOptionBorder=e.inputBorder=e.inputForeground=e.inputBackground=e.widgetShadow=e.textCodeBlockBackground=e.textLinkForeground=e.activeContrastBorder=e.contrastBorder=e.focusBorder=e.iconForeground=e.errorForeground=e.foreground=e.registerColor=e.Extensions=void 0,e.Extensions={ColorContribution:"base.contributions.colors"};class d{constructor(){this._onDidChangeSchema=new M.Emitter,this.onDidChangeSchema=this._onDidChangeSchema.event,this.colorSchema={type:"object",properties:{}},this.colorReferenceSchema={type:"string",enum:[],enumDescriptions:[]},this.colorsById={}}registerColor(l,h,m,_=!1,f){let v={id:l,description:m,defaults:h,needsTransparency:_,deprecationMessage:f};this.colorsById[l]=v;let y={type:"string",description:m,format:"color-hex",defaultSnippets:[{body:"${1:#ff0000}"}]};return f&&(y.deprecationMessage=f),this.colorSchema.properties[l]=y,this.colorReferenceSchema.enum.push(l),this.colorReferenceSchema.enumDescriptions.push(m),this._onDidChangeSchema.fire(),l}resolveDefaultColor(l,h){const m=this.colorsById[l];if(m&&m.defaults){const _=m.defaults[h.type];return r(_,h)}}getColorSchema(){return this.colorSchema}toString(){let l=(h,m)=>{let _=h.indexOf(".")===-1?0:1,f=m.indexOf(".")===-1?0:1;return _!==f?_-f:h.localeCompare(m)};return Object.keys(this.colorsById).sort(l).map(h=>`- \`${h}\`: ${this.colorsById[h].description}`).join(` +`)}}const g=new d;b.Registry.add(e.Extensions.ColorContribution,g);function p(t,l,h,m,_){return g.registerColor(t,l,h,m,_)}e.registerColor=p,e.foreground=p("foreground",{dark:"#CCCCCC",light:"#616161",hc:"#FFFFFF"},w.localize(0,null)),e.errorForeground=p("errorForeground",{dark:"#F48771",light:"#A1260D",hc:"#F48771"},w.localize(1,null)),e.iconForeground=p("icon.foreground",{dark:"#C5C5C5",light:"#424242",hc:"#FFFFFF"},w.localize(2,null)),e.focusBorder=p("focusBorder",{dark:"#007FD4",light:"#0090F1",hc:"#F38518"},w.localize(3,null)),e.contrastBorder=p("contrastBorder",{light:null,dark:null,hc:"#6FC3DF"},w.localize(4,null)),e.activeContrastBorder=p("contrastActiveBorder",{light:null,dark:null,hc:e.focusBorder},w.localize(5,null)),e.textLinkForeground=p("textLink.foreground",{light:"#006AB1",dark:"#3794FF",hc:"#3794FF"},w.localize(6,null)),e.textCodeBlockBackground=p("textCodeBlock.background",{light:"#dcdcdc66",dark:"#0a0a0a66",hc:N.Color.black},w.localize(7,null)),e.widgetShadow=p("widget.shadow",{dark:s(N.Color.black,.36),light:s(N.Color.black,.16),hc:null},w.localize(8,null)),e.inputBackground=p("input.background",{dark:"#3C3C3C",light:N.Color.white,hc:N.Color.black},w.localize(9,null)),e.inputForeground=p("input.foreground",{dark:e.foreground,light:e.foreground,hc:e.foreground},w.localize(10,null)),e.inputBorder=p("input.border",{dark:null,light:null,hc:e.contrastBorder},w.localize(11,null)),e.inputActiveOptionBorder=p("inputOption.activeBorder",{dark:"#007ACC00",light:"#007ACC00",hc:e.contrastBorder},w.localize(12,null)),e.inputActiveOptionBackground=p("inputOption.activeBackground",{dark:s(e.focusBorder,.4),light:s(e.focusBorder,.2),hc:N.Color.transparent},w.localize(13,null)),e.inputActiveOptionForeground=p("inputOption.activeForeground",{dark:N.Color.white,light:N.Color.black,hc:null},w.localize(14,null)),e.inputValidationInfoBackground=p("inputValidation.infoBackground",{dark:"#063B49",light:"#D6ECF2",hc:N.Color.black},w.localize(15,null)),e.inputValidationInfoForeground=p("inputValidation.infoForeground",{dark:null,light:null,hc:null},w.localize(16,null)),e.inputValidationInfoBorder=p("inputValidation.infoBorder",{dark:"#007acc",light:"#007acc",hc:e.contrastBorder},w.localize(17,null)),e.inputValidationWarningBackground=p("inputValidation.warningBackground",{dark:"#352A05",light:"#F6F5D2",hc:N.Color.black},w.localize(18,null)),e.inputValidationWarningForeground=p("inputValidation.warningForeground",{dark:null,light:null,hc:null},w.localize(19,null)),e.inputValidationWarningBorder=p("inputValidation.warningBorder",{dark:"#B89500",light:"#B89500",hc:e.contrastBorder},w.localize(20,null)),e.inputValidationErrorBackground=p("inputValidation.errorBackground",{dark:"#5A1D1D",light:"#F2DEDE",hc:N.Color.black},w.localize(21,null)),e.inputValidationErrorForeground=p("inputValidation.errorForeground",{dark:null,light:null,hc:null},w.localize(22,null)),e.inputValidationErrorBorder=p("inputValidation.errorBorder",{dark:"#BE1100",light:"#BE1100",hc:e.contrastBorder},w.localize(23,null)),e.selectBackground=p("dropdown.background",{dark:"#3C3C3C",light:N.Color.white,hc:N.Color.black},w.localize(24,null)),e.selectForeground=p("dropdown.foreground",{dark:"#F0F0F0",light:null,hc:N.Color.white},w.localize(25,null)),e.buttonForeground=p("button.foreground",{dark:N.Color.white,light:N.Color.white,hc:N.Color.white},w.localize(26,null)),e.buttonBackground=p("button.background",{dark:"#0E639C",light:"#007ACC",hc:null},w.localize(27,null)),e.buttonHoverBackground=p("button.hoverBackground",{dark:o(e.buttonBackground,.2),light:c(e.buttonBackground,.2),hc:null},w.localize(28,null)),e.badgeBackground=p("badge.background",{dark:"#4D4D4D",light:"#C4C4C4",hc:N.Color.black},w.localize(29,null)),e.badgeForeground=p("badge.foreground",{dark:N.Color.white,light:"#333",hc:N.Color.white},w.localize(30,null)),e.scrollbarShadow=p("scrollbar.shadow",{dark:"#000000",light:"#DDDDDD",hc:null},w.localize(31,null)),e.scrollbarSliderBackground=p("scrollbarSlider.background",{dark:N.Color.fromHex("#797979").transparent(.4),light:N.Color.fromHex("#646464").transparent(.4),hc:s(e.contrastBorder,.6)},w.localize(32,null)),e.scrollbarSliderHoverBackground=p("scrollbarSlider.hoverBackground",{dark:N.Color.fromHex("#646464").transparent(.7),light:N.Color.fromHex("#646464").transparent(.7),hc:s(e.contrastBorder,.8)},w.localize(33,null)),e.scrollbarSliderActiveBackground=p("scrollbarSlider.activeBackground",{dark:N.Color.fromHex("#BFBFBF").transparent(.4),light:N.Color.fromHex("#000000").transparent(.6),hc:e.contrastBorder},w.localize(34,null)),e.progressBarBackground=p("progressBar.background",{dark:N.Color.fromHex("#0E70C0"),light:N.Color.fromHex("#0E70C0"),hc:e.contrastBorder},w.localize(35,null)),e.editorErrorBackground=p("editorError.background",{dark:null,light:null,hc:null},w.localize(36,null),!0),e.editorErrorForeground=p("editorError.foreground",{dark:"#F48771",light:"#E51400",hc:null},w.localize(37,null)),e.editorErrorBorder=p("editorError.border",{dark:null,light:null,hc:N.Color.fromHex("#E47777").transparent(.8)},w.localize(38,null)),e.editorWarningBackground=p("editorWarning.background",{dark:null,light:null,hc:null},w.localize(39,null),!0),e.editorWarningForeground=p("editorWarning.foreground",{dark:"#CCA700",light:"#BF8803",hc:null},w.localize(40,null)),e.editorWarningBorder=p("editorWarning.border",{dark:null,light:null,hc:N.Color.fromHex("#FFCC00").transparent(.8)},w.localize(41,null)),e.editorInfoBackground=p("editorInfo.background",{dark:null,light:null,hc:null},w.localize(42,null),!0),e.editorInfoForeground=p("editorInfo.foreground",{dark:"#75BEFF",light:"#75BEFF",hc:null},w.localize(43,null)),e.editorInfoBorder=p("editorInfo.border",{dark:null,light:null,hc:N.Color.fromHex("#75BEFF").transparent(.8)},w.localize(44,null)),e.editorHintForeground=p("editorHint.foreground",{dark:N.Color.fromHex("#eeeeee").transparent(.7),light:"#6c6c6c",hc:null},w.localize(45,null)),e.editorHintBorder=p("editorHint.border",{dark:null,light:null,hc:N.Color.fromHex("#eeeeee").transparent(.8)},w.localize(46,null)),e.editorBackground=p("editor.background",{light:"#fffffe",dark:"#1E1E1E",hc:N.Color.black},w.localize(47,null)),e.editorForeground=p("editor.foreground",{light:"#333333",dark:"#BBBBBB",hc:N.Color.white},w.localize(48,null)),e.editorWidgetBackground=p("editorWidget.background",{dark:"#252526",light:"#F3F3F3",hc:"#0C141F"},w.localize(49,null)),e.editorWidgetForeground=p("editorWidget.foreground",{dark:e.foreground,light:e.foreground,hc:e.foreground},w.localize(50,null)),e.editorWidgetBorder=p("editorWidget.border",{dark:"#454545",light:"#C8C8C8",hc:e.contrastBorder},w.localize(51,null)),e.editorWidgetResizeBorder=p("editorWidget.resizeBorder",{light:null,dark:null,hc:null},w.localize(52,null)),e.quickInputBackground=p("quickInput.background",{dark:e.editorWidgetBackground,light:e.editorWidgetBackground,hc:e.editorWidgetBackground},w.localize(53,null)),e.quickInputForeground=p("quickInput.foreground",{dark:e.editorWidgetForeground,light:e.editorWidgetForeground,hc:e.editorWidgetForeground},w.localize(54,null)),e.quickInputTitleBackground=p("quickInputTitle.background",{dark:new N.Color(new N.RGBA(255,255,255,.105)),light:new N.Color(new N.RGBA(0,0,0,.06)),hc:"#000000"},w.localize(55,null)),e.quickInputListFocusBackground=p("quickInput.list.focusBackground",{dark:"#062F4A",light:"#D6EBFF",hc:null},w.localize(56,null)),e.pickerGroupForeground=p("pickerGroup.foreground",{dark:"#3794FF",light:"#0066BF",hc:N.Color.white},w.localize(57,null)),e.pickerGroupBorder=p("pickerGroup.border",{dark:"#3F3F46",light:"#CCCEDB",hc:N.Color.white},w.localize(58,null)),e.editorSelectionBackground=p("editor.selectionBackground",{light:"#ADD6FF",dark:"#264F78",hc:"#f3f518"},w.localize(59,null)),e.editorSelectionForeground=p("editor.selectionForeground",{light:null,dark:null,hc:"#000000"},w.localize(60,null)),e.editorInactiveSelection=p("editor.inactiveSelectionBackground",{light:s(e.editorSelectionBackground,.5),dark:s(e.editorSelectionBackground,.5),hc:s(e.editorSelectionBackground,.5)},w.localize(61,null),!0),e.editorSelectionHighlight=p("editor.selectionHighlightBackground",{light:u(e.editorSelectionBackground,e.editorBackground,.3,.6),dark:u(e.editorSelectionBackground,e.editorBackground,.3,.6),hc:null},w.localize(62,null),!0),e.editorSelectionHighlightBorder=p("editor.selectionHighlightBorder",{light:null,dark:null,hc:e.activeContrastBorder},w.localize(63,null)),e.editorFindMatch=p("editor.findMatchBackground",{light:"#A8AC94",dark:"#515C6A",hc:null},w.localize(64,null)),e.editorFindMatchHighlight=p("editor.findMatchHighlightBackground",{light:"#EA5C0055",dark:"#EA5C0055",hc:null},w.localize(65,null),!0),e.editorFindRangeHighlight=p("editor.findRangeHighlightBackground",{dark:"#3a3d4166",light:"#b4b4b44d",hc:null},w.localize(66,null),!0),e.editorFindMatchBorder=p("editor.findMatchBorder",{light:null,dark:null,hc:e.activeContrastBorder},w.localize(67,null)),e.editorFindMatchHighlightBorder=p("editor.findMatchHighlightBorder",{light:null,dark:null,hc:e.activeContrastBorder},w.localize(68,null)),e.editorFindRangeHighlightBorder=p("editor.findRangeHighlightBorder",{dark:null,light:null,hc:s(e.activeContrastBorder,.4)},w.localize(69,null),!0),e.editorHoverHighlight=p("editor.hoverHighlightBackground",{light:"#ADD6FF26",dark:"#264f7840",hc:"#ADD6FF26"},w.localize(70,null),!0),e.editorHoverBackground=p("editorHoverWidget.background",{light:e.editorWidgetBackground,dark:e.editorWidgetBackground,hc:e.editorWidgetBackground},w.localize(71,null)),e.editorHoverForeground=p("editorHoverWidget.foreground",{light:e.editorWidgetForeground,dark:e.editorWidgetForeground,hc:e.editorWidgetForeground},w.localize(72,null)),e.editorHoverBorder=p("editorHoverWidget.border",{light:e.editorWidgetBorder,dark:e.editorWidgetBorder,hc:e.editorWidgetBorder},w.localize(73,null)),e.editorHoverStatusBarBackground=p("editorHoverWidget.statusBarBackground",{dark:o(e.editorHoverBackground,.2),light:c(e.editorHoverBackground,.05),hc:e.editorWidgetBackground},w.localize(74,null)),e.editorActiveLinkForeground=p("editorLink.activeForeground",{dark:"#4E94CE",light:N.Color.blue,hc:N.Color.cyan},w.localize(75,null)),e.editorInlineHintForeground=p("editorInlineHint.foreground",{dark:e.editorWidgetBackground,light:e.editorWidgetForeground,hc:e.editorWidgetBackground},w.localize(76,null)),e.editorInlineHintBackground=p("editorInlineHint.background",{dark:e.editorWidgetForeground,light:e.editorWidgetBackground,hc:e.editorWidgetForeground},w.localize(77,null)),e.editorLightBulbForeground=p("editorLightBulb.foreground",{dark:"#FFCC00",light:"#DDB100",hc:"#FFCC00"},w.localize(78,null)),e.editorLightBulbAutoFixForeground=p("editorLightBulbAutoFix.foreground",{dark:"#75BEFF",light:"#007ACC",hc:"#75BEFF"},w.localize(79,null)),e.defaultInsertColor=new N.Color(new N.RGBA(155,185,85,.2)),e.defaultRemoveColor=new N.Color(new N.RGBA(255,0,0,.2)),e.diffInserted=p("diffEditor.insertedTextBackground",{dark:e.defaultInsertColor,light:e.defaultInsertColor,hc:null},w.localize(80,null),!0),e.diffRemoved=p("diffEditor.removedTextBackground",{dark:e.defaultRemoveColor,light:e.defaultRemoveColor,hc:null},w.localize(81,null),!0),e.diffInsertedOutline=p("diffEditor.insertedTextBorder",{dark:null,light:null,hc:"#33ff2eff"},w.localize(82,null)),e.diffRemovedOutline=p("diffEditor.removedTextBorder",{dark:null,light:null,hc:"#FF008F"},w.localize(83,null)),e.diffBorder=p("diffEditor.border",{dark:null,light:null,hc:e.contrastBorder},w.localize(84,null)),e.diffDiagonalFill=p("diffEditor.diagonalFill",{dark:"#cccccc33",light:"#22222233",hc:null},w.localize(85,null)),e.listFocusBackground=p("list.focusBackground",{dark:null,light:null,hc:null},w.localize(86,null)),e.listFocusForeground=p("list.focusForeground",{dark:null,light:null,hc:null},w.localize(87,null)),e.listFocusOutline=p("list.focusOutline",{dark:e.focusBorder,light:e.focusBorder,hc:e.activeContrastBorder},w.localize(88,null)),e.listActiveSelectionBackground=p("list.activeSelectionBackground",{dark:"#094771",light:"#0060C0",hc:null},w.localize(89,null)),e.listActiveSelectionForeground=p("list.activeSelectionForeground",{dark:N.Color.white,light:N.Color.white,hc:null},w.localize(90,null)),e.listInactiveSelectionBackground=p("list.inactiveSelectionBackground",{dark:"#37373D",light:"#E4E6F1",hc:null},w.localize(91,null)),e.listInactiveSelectionForeground=p("list.inactiveSelectionForeground",{dark:null,light:null,hc:null},w.localize(92,null)),e.listInactiveFocusBackground=p("list.inactiveFocusBackground",{dark:null,light:null,hc:null},w.localize(93,null)),e.listInactiveFocusOutline=p("list.inactiveFocusOutline",{dark:null,light:null,hc:null},w.localize(94,null)),e.listHoverBackground=p("list.hoverBackground",{dark:"#2A2D2E",light:"#F0F0F0",hc:null},w.localize(95,null)),e.listHoverForeground=p("list.hoverForeground",{dark:null,light:null,hc:null},w.localize(96,null)),e.listDropBackground=p("list.dropBackground",{dark:e.listFocusBackground,light:e.listFocusBackground,hc:null},w.localize(97,null)),e.listHighlightForeground=p("list.highlightForeground",{dark:"#0097fb",light:"#0066BF",hc:e.focusBorder},w.localize(98,null)),e.listFilterWidgetBackground=p("listFilterWidget.background",{light:"#efc1ad",dark:"#653723",hc:N.Color.black},w.localize(99,null)),e.listFilterWidgetOutline=p("listFilterWidget.outline",{dark:N.Color.transparent,light:N.Color.transparent,hc:"#f38518"},w.localize(100,null)),e.listFilterWidgetNoMatchesOutline=p("listFilterWidget.noMatchesOutline",{dark:"#BE1100",light:"#BE1100",hc:e.contrastBorder},w.localize(101,null)),e.treeIndentGuidesStroke=p("tree.indentGuidesStroke",{dark:"#585858",light:"#a9a9a9",hc:"#a9a9a9"},w.localize(102,null)),e.tableColumnsBorder=p("tree.tableColumnsBorder",{dark:"#CCCCCC20",light:"#61616120",hc:null},w.localize(103,null)),e.menuBorder=p("menu.border",{dark:null,light:null,hc:e.contrastBorder},w.localize(104,null)),e.menuForeground=p("menu.foreground",{dark:e.selectForeground,light:e.foreground,hc:e.selectForeground},w.localize(105,null)),e.menuBackground=p("menu.background",{dark:e.selectBackground,light:e.selectBackground,hc:e.selectBackground},w.localize(106,null)),e.menuSelectionForeground=p("menu.selectionForeground",{dark:e.listActiveSelectionForeground,light:e.listActiveSelectionForeground,hc:e.listActiveSelectionForeground},w.localize(107,null)),e.menuSelectionBackground=p("menu.selectionBackground",{dark:e.listActiveSelectionBackground,light:e.listActiveSelectionBackground,hc:e.listActiveSelectionBackground},w.localize(108,null)),e.menuSelectionBorder=p("menu.selectionBorder",{dark:null,light:null,hc:e.activeContrastBorder},w.localize(109,null)),e.menuSeparatorBackground=p("menu.separatorBackground",{dark:"#BBBBBB",light:"#888888",hc:e.contrastBorder},w.localize(110,null)),e.snippetTabstopHighlightBackground=p("editor.snippetTabstopHighlightBackground",{dark:new N.Color(new N.RGBA(124,124,124,.3)),light:new N.Color(new N.RGBA(10,50,100,.2)),hc:new N.Color(new N.RGBA(124,124,124,.3))},w.localize(111,null)),e.snippetTabstopHighlightBorder=p("editor.snippetTabstopHighlightBorder",{dark:null,light:null,hc:null},w.localize(112,null)),e.snippetFinalTabstopHighlightBackground=p("editor.snippetFinalTabstopHighlightBackground",{dark:null,light:null,hc:null},w.localize(113,null)),e.snippetFinalTabstopHighlightBorder=p("editor.snippetFinalTabstopHighlightBorder",{dark:"#525252",light:new N.Color(new N.RGBA(10,50,100,.5)),hc:"#525252"},w.localize(114,null)),e.overviewRulerFindMatchForeground=p("editorOverviewRuler.findMatchForeground",{dark:"#d186167e",light:"#d186167e",hc:"#AB5A00"},w.localize(115,null),!0),e.overviewRulerSelectionHighlightForeground=p("editorOverviewRuler.selectionHighlightForeground",{dark:"#A0A0A0CC",light:"#A0A0A0CC",hc:"#A0A0A0CC"},w.localize(116,null),!0),e.minimapFindMatch=p("minimap.findMatchHighlight",{light:"#d18616",dark:"#d18616",hc:"#AB5A00"},w.localize(117,null),!0),e.minimapSelection=p("minimap.selectionHighlight",{light:"#ADD6FF",dark:"#264F78",hc:"#ffffff"},w.localize(118,null),!0),e.minimapError=p("minimap.errorHighlight",{dark:new N.Color(new N.RGBA(255,18,18,.7)),light:new N.Color(new N.RGBA(255,18,18,.7)),hc:new N.Color(new N.RGBA(255,50,50,1))},w.localize(119,null)),e.minimapWarning=p("minimap.warningHighlight",{dark:e.editorWarningForeground,light:e.editorWarningForeground,hc:e.editorWarningBorder},w.localize(120,null)),e.minimapBackground=p("minimap.background",{dark:null,light:null,hc:null},w.localize(121,null)),e.minimapSliderBackground=p("minimapSlider.background",{light:s(e.scrollbarSliderBackground,.5),dark:s(e.scrollbarSliderBackground,.5),hc:s(e.scrollbarSliderBackground,.5)},w.localize(122,null)),e.minimapSliderHoverBackground=p("minimapSlider.hoverBackground",{light:s(e.scrollbarSliderHoverBackground,.5),dark:s(e.scrollbarSliderHoverBackground,.5),hc:s(e.scrollbarSliderHoverBackground,.5)},w.localize(123,null)),e.minimapSliderActiveBackground=p("minimapSlider.activeBackground",{light:s(e.scrollbarSliderActiveBackground,.5),dark:s(e.scrollbarSliderActiveBackground,.5),hc:s(e.scrollbarSliderActiveBackground,.5)},w.localize(124,null)),e.problemsErrorIconForeground=p("problemsErrorIcon.foreground",{dark:e.editorErrorForeground,light:e.editorErrorForeground,hc:e.editorErrorForeground},w.localize(125,null)),e.problemsWarningIconForeground=p("problemsWarningIcon.foreground",{dark:e.editorWarningForeground,light:e.editorWarningForeground,hc:e.editorWarningForeground},w.localize(126,null)),e.problemsInfoIconForeground=p("problemsInfoIcon.foreground",{dark:e.editorInfoForeground,light:e.editorInfoForeground,hc:e.editorInfoForeground},w.localize(127,null));function c(t,l){return h=>{let m=r(t,h);if(m)return m.darken(l)}}e.darken=c;function o(t,l){return h=>{let m=r(t,h);if(m)return m.lighten(l)}}e.lighten=o;function s(t,l){return h=>{let m=r(t,h);if(m)return m.transparent(l)}}e.transparent=s;function a(...t){return l=>{for(let h of t){let m=r(h,l);if(m)return m}}}e.oneOf=a;function u(t,l,h,m){return _=>{let f=r(t,_);if(f){let v=r(l,_);return v?f.isDarkerThan(v)?N.Color.getLighterColor(f,v,h).transparent(m):N.Color.getDarkerColor(f,v,h).transparent(m):f.transparent(h*m)}}}function r(t,l){if(t!==null){if(typeof t=="string")return t[0]==="#"?N.Color.fromHex(t):l.getColor(t);if(t instanceof N.Color)return t;if(typeof t=="function")return t(l)}}e.resolveColorValue=r,e.workbenchColorsSchemaId="vscode://schemas/workbench-colors";let i=b.Registry.as(S.Extensions.JSONContribution);i.registerSchema(e.workbenchColorsSchemaId,g.getColorSchema());const n=new C.RunOnceScheduler(()=>i.notifySchemaChanged(e.workbenchColorsSchemaId),200);g.onDidChangeSchema(()=>{n.isScheduled()||n.schedule()})}),define(Q[116],J([0,1,22]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.attachMenuStyler=e.defaultMenuStyles=e.defaultListStyles=e.attachListStyler=e.attachBadgeStyler=e.attachStyler=e.computeStyles=void 0;function N(d,g){const p=Object.create(null);for(let c in g){const o=g[c];o&&(p[c]=b.resolveColorValue(o,d))}return p}e.computeStyles=N;function M(d,g,p){function c(o){const s=N(d.getColorTheme(),g);typeof p=="function"?p(s):p.style(s)}return c(d.getColorTheme()),d.onDidColorThemeChange(c)}e.attachStyler=M;function w(d,g,p){return M(g,{badgeBackground:p&&p.badgeBackground||b.badgeBackground,badgeForeground:p&&p.badgeForeground||b.badgeForeground,badgeBorder:b.contrastBorder},d)}e.attachBadgeStyler=w;function S(d,g,p){return M(g,Object.assign(Object.assign({},e.defaultListStyles),p||{}),d)}e.attachListStyler=S,e.defaultListStyles={listFocusBackground:b.listFocusBackground,listFocusForeground:b.listFocusForeground,listFocusOutline:b.listFocusOutline,listActiveSelectionBackground:b.listActiveSelectionBackground,listActiveSelectionForeground:b.listActiveSelectionForeground,listFocusAndSelectionBackground:b.listActiveSelectionBackground,listFocusAndSelectionForeground:b.listActiveSelectionForeground,listInactiveSelectionBackground:b.listInactiveSelectionBackground,listInactiveSelectionForeground:b.listInactiveSelectionForeground,listInactiveFocusBackground:b.listInactiveFocusBackground,listInactiveFocusOutline:b.listInactiveFocusOutline,listHoverBackground:b.listHoverBackground,listHoverForeground:b.listHoverForeground,listDropBackground:b.listDropBackground,listSelectionOutline:b.activeContrastBorder,listHoverOutline:b.activeContrastBorder,listFilterWidgetBackground:b.listFilterWidgetBackground,listFilterWidgetOutline:b.listFilterWidgetOutline,listFilterWidgetNoMatchesOutline:b.listFilterWidgetNoMatchesOutline,listMatchesShadow:b.widgetShadow,treeIndentGuidesStroke:b.treeIndentGuidesStroke,tableColumnsBorder:b.tableColumnsBorder},e.defaultMenuStyles={shadowColor:b.widgetShadow,borderColor:b.menuBorder,foregroundColor:b.menuForeground,backgroundColor:b.menuBackground,selectionForegroundColor:b.menuSelectionForeground,selectionBackgroundColor:b.menuSelectionBackground,selectionBorderColor:b.menuSelectionBorder,separatorColor:b.menuSeparatorBackground};function C(d,g,p){return M(g,Object.assign(Object.assign({},e.defaultMenuStyles),p),d)}e.attachMenuStyler=C}),define(Q[579],J([0,1,48,2,434,7,116,55,50,360]),function(q,e,b,N,M,w,S,C,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ContextMenuHandler=void 0;class g{constructor(c,o,s,a,u){this.contextViewService=c,this.telemetryService=o,this.notificationService=s,this.keybindingService=a,this.themeService=u,this.focusToReturn=null,this.block=null,this.options={blockMouse:!0}}configure(c){this.options=c}showContextMenu(c){const o=c.getActions();if(!!o.length){this.focusToReturn=document.activeElement;let s,a=w.isHTMLElement(c.domForShadowRoot)?c.domForShadowRoot:void 0;this.contextViewService.showContextView({getAnchor:()=>c.getAnchor(),canRelayout:!1,anchorAlignment:c.anchorAlignment,anchorAxisAlignment:c.anchorAxisAlignment,render:u=>{let r=c.getMenuClassName?c.getMenuClassName():"";r&&(u.className+=" "+r),this.options.blockMouse&&(this.block=u.appendChild(w.$(".context-view-block")),this.block.style.position="fixed",this.block.style.cursor="initial",this.block.style.left="0",this.block.style.top="0",this.block.style.width="100%",this.block.style.height="100%",this.block.style.zIndex="-1",C.domEvent(this.block,w.EventType.MOUSE_DOWN)(t=>t.stopPropagation()));const i=new N.DisposableStore,n=c.actionRunner||new b.ActionRunner;return n.onBeforeRun(this.onActionRun,this,i),n.onDidRun(this.onDidActionRun,this,i),s=new M.Menu(u,o,{actionViewItemProvider:c.getActionViewItem,context:c.getActionsContext?c.getActionsContext():null,actionRunner:n,getKeyBinding:c.getKeyBinding?c.getKeyBinding:t=>this.keybindingService.lookupKeybinding(t.id)}),i.add(S.attachMenuStyler(s,this.themeService)),s.onDidCancel(()=>this.contextViewService.hideContextView(!0),null,i),s.onDidBlur(()=>this.contextViewService.hideContextView(!0),null,i),C.domEvent(window,w.EventType.BLUR)(()=>{this.contextViewService.hideContextView(!0)},null,i),C.domEvent(window,w.EventType.MOUSE_DOWN)(t=>{if(!t.defaultPrevented){let l=new d.StandardMouseEvent(t),h=l.target;if(!l.rightButton){for(;h;){if(h===u)return;h=h.parentElement}this.contextViewService.hideContextView(!0)}}},null,i),N.combinedDisposable(i,s)},focus:()=>{s&&s.focus(!!c.autoSelectFirstItem)},onHide:u=>{c.onHide&&c.onHide(!!u),this.block&&(this.block.remove(),this.block=null),this.focusToReturn&&this.focusToReturn.focus()}},a,!!a)}}onActionRun(c){this.telemetryService&&this.telemetryService.publicLog2("workbenchActionExecuted",{id:c.action.id,from:"contextMenu"}),this.contextViewService.hideContextView(!1),this.focusToReturn&&this.focusToReturn.focus()}onDidActionRun(c){c.error&&this.notificationService.error(c.error)}}e.ContextMenuHandler=g}),define(Q[97],J([0,1]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ColorScheme=void 0;var b;(function(N){N.DARK="dark",N.LIGHT="light",N.HIGH_CONTRAST="hc"})(b=e.ColorScheme||(e.ColorScheme={}))}),define(Q[255],J([0,1,35,30,17,384,110,171,129,97,38]),function(q,e,b,N,M,w,S,C,d,g,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ViewLine=e.ViewLineOptions=e.DomReadingContext=void 0;const c=function(){return M.isNative?!0:!(M.isLinux||b.isFirefox||b.isSafari)}();let o=!0;class s{constructor(_,f){this._domNode=_,this._clientRectDeltaLeft=0,this._clientRectDeltaLeftRead=!1,this.endNode=f}get clientRectDeltaLeft(){return this._clientRectDeltaLeftRead||(this._clientRectDeltaLeftRead=!0,this._clientRectDeltaLeft=this._domNode.getBoundingClientRect().left),this._clientRectDeltaLeft}}e.DomReadingContext=s;class a{constructor(_,f){this.themeType=f;const v=_.options,y=v.get(38);this.renderWhitespace=v.get(83),this.renderControlCharacters=v.get(77),this.spaceWidth=y.spaceWidth,this.middotWidth=y.middotWidth,this.wsmiddotWidth=y.wsmiddotWidth,this.useMonospaceOptimizations=y.isMonospace&&!v.get(26),this.canUseHalfwidthRightwardsArrow=y.canUseHalfwidthRightwardsArrow,this.lineHeight=v.get(53),this.stopRenderingLineAfter=v.get(100),this.fontLigatures=v.get(39)}equals(_){return this.themeType===_.themeType&&this.renderWhitespace===_.renderWhitespace&&this.renderControlCharacters===_.renderControlCharacters&&this.spaceWidth===_.spaceWidth&&this.middotWidth===_.middotWidth&&this.wsmiddotWidth===_.wsmiddotWidth&&this.useMonospaceOptimizations===_.useMonospaceOptimizations&&this.canUseHalfwidthRightwardsArrow===_.canUseHalfwidthRightwardsArrow&&this.lineHeight===_.lineHeight&&this.stopRenderingLineAfter===_.stopRenderingLineAfter&&this.fontLigatures===_.fontLigatures}}e.ViewLineOptions=a;class u{constructor(_){this._options=_,this._isMaybeInvalid=!0,this._renderedViewLine=null}getDomNode(){return this._renderedViewLine&&this._renderedViewLine.domNode?this._renderedViewLine.domNode.domNode:null}setDomNode(_){if(this._renderedViewLine)this._renderedViewLine.domNode=N.createFastDomNode(_);else throw new Error("I have no rendered view line to set the dom node to...")}onContentChanged(){this._isMaybeInvalid=!0}onTokensChanged(){this._isMaybeInvalid=!0}onDecorationsChanged(){this._isMaybeInvalid=!0}onOptionsChanged(_){this._isMaybeInvalid=!0,this._options=_}onSelectionChanged(){return this._options.themeType===g.ColorScheme.HIGH_CONTRAST||this._options.renderWhitespace==="selection"?(this._isMaybeInvalid=!0,!0):!1}renderLine(_,f,v,y){if(this._isMaybeInvalid===!1)return!1;this._isMaybeInvalid=!1;const L=v.getViewLineRenderingData(_),I=this._options,k=C.LineDecoration.filter(L.inlineDecorations,_,L.minColumn,L.maxColumn);let E=null;if(I.themeType===g.ColorScheme.HIGH_CONTRAST||this._options.renderWhitespace==="selection"){const B=v.selections;for(const F of B)if(!(F.endLineNumber<_||F.startLineNumber>_)){const D=F.startLineNumber===_?F.startColumn:L.minColumn,R=F.endLineNumber===_?F.endColumn:L.maxColumn;D');const O=d.renderViewLine(T,y);y.appendASCIIString("");let A=null;return o&&c&&L.isBasicASCII&&I.useMonospaceOptimizations&&O.containsForeignElements===0&&L.content.length<300&&T.lineTokens.getCount()<100&&(A=new r(this._renderedViewLine?this._renderedViewLine.domNode:null,T,O.characterMapping)),A||(A=t(this._renderedViewLine?this._renderedViewLine.domNode:null,T,O.characterMapping,O.containsRTL,O.containsForeignElements)),this._renderedViewLine=A,!0}layoutLine(_,f){this._renderedViewLine&&this._renderedViewLine.domNode&&(this._renderedViewLine.domNode.setTop(f),this._renderedViewLine.domNode.setHeight(this._options.lineHeight))}getWidth(){return this._renderedViewLine?this._renderedViewLine.getWidth():0}getWidthIsFast(){return this._renderedViewLine?this._renderedViewLine.getWidthIsFast():!0}needsMonospaceFontCheck(){return this._renderedViewLine?this._renderedViewLine instanceof r:!1}monospaceAssumptionsAreValid(){return this._renderedViewLine&&this._renderedViewLine instanceof r?this._renderedViewLine.monospaceAssumptionsAreValid():o}onMonospaceAssumptionsInvalidated(){this._renderedViewLine&&this._renderedViewLine instanceof r&&(this._renderedViewLine=this._renderedViewLine.toSlowRenderedLine())}getVisibleRangesForRange(_,f,v){if(!this._renderedViewLine)return null;_=_|0,f=f|0,_=Math.min(this._renderedViewLine.input.lineContent.length+1,Math.max(1,_)),f=Math.min(this._renderedViewLine.input.lineContent.length+1,Math.max(1,f));const y=this._renderedViewLine.input.stopRenderingLineAfter|0;let L=!1;y!==-1&&_>y+1&&f>y+1&&(L=!0),y!==-1&&_>y+1&&(_=y+1),y!==-1&&f>y+1&&(f=y+1);const I=this._renderedViewLine.getVisibleRangesForRange(_,f,v);return I&&I.length>0?new S.VisibleRanges(L,I):null}getColumnOfNodeOffset(_,f,v){return this._renderedViewLine?this._renderedViewLine.getColumnOfNodeOffset(_,f,v):1}}e.ViewLine=u,u.CLASS_NAME="view-line";class r{constructor(_,f,v){this.domNode=_,this.input=f,this._characterMapping=v,this._charWidth=f.spaceWidth}getWidth(){return this._getCharPosition(this._characterMapping.length)}getWidthIsFast(){return!0}monospaceAssumptionsAreValid(){if(!this.domNode)return o;const _=this.getWidth(),f=this.domNode.domNode.firstChild.offsetWidth;return Math.abs(_-f)>=2&&(console.warn("monospace assumptions have been violated, therefore disabling monospace optimizations!"),o=!1),o}toSlowRenderedLine(){return t(this.domNode,this.input,this._characterMapping,!1,0)}getVisibleRangesForRange(_,f,v){const y=this._getCharPosition(_),L=this._getCharPosition(f);return[new S.HorizontalRange(y,L-y)]}_getCharPosition(_){const f=this._characterMapping.getAbsoluteOffsets();return f.length===0?0:Math.round(this._charWidth*f[_-1])}getColumnOfNodeOffset(_,f,v){const y=f.textContent.length;let L=-1;for(;f;)f=f.previousSibling,L++;return this._characterMapping.partDataToCharOffset(L,y,v)+1}}class i{constructor(_,f,v,y,L){if(this.domNode=_,this.input=f,this._characterMapping=v,this._isWhitespaceOnly=/^\s*$/.test(f.lineContent),this._containsForeignElements=L,this._cachedWidth=-1,this._pixelOffsetCache=null,!y||this._characterMapping.length===0){this._pixelOffsetCache=new Int32Array(Math.max(2,this._characterMapping.length+1));for(let I=0,k=this._characterMapping.length;I<=k;I++)this._pixelOffsetCache[I]=-1}}_getReadingTarget(_){return _.domNode.firstChild}getWidth(){return this.domNode?(this._cachedWidth===-1&&(this._cachedWidth=this._getReadingTarget(this.domNode).offsetWidth),this._cachedWidth):0}getWidthIsFast(){return this._cachedWidth!==-1}getVisibleRangesForRange(_,f,v){if(!this.domNode)return null;if(this._pixelOffsetCache!==null){const y=this._readPixelOffset(this.domNode,_,v);if(y===-1)return null;const L=this._readPixelOffset(this.domNode,f,v);return L===-1?null:[new S.HorizontalRange(y,L-y)]}return this._readVisibleRangesForRange(this.domNode,_,f,v)}_readVisibleRangesForRange(_,f,v,y){if(f===v){const L=this._readPixelOffset(_,f,y);return L===-1?null:[new S.HorizontalRange(L,0)]}else return this._readRawVisibleRangesForRange(_,f,v,y)}_readPixelOffset(_,f,v){if(this._characterMapping.length===0){if(this._containsForeignElements===0||this._containsForeignElements===2)return 0;if(this._containsForeignElements===1)return this.getWidth();const y=this._getReadingTarget(_);return y.firstChild?y.firstChild.offsetWidth:0}if(this._pixelOffsetCache!==null){const y=this._pixelOffsetCache[f];if(y!==-1)return y;const L=this._actualReadPixelOffset(_,f,v);return this._pixelOffsetCache[f]=L,L}return this._actualReadPixelOffset(_,f,v)}_actualReadPixelOffset(_,f,v){if(this._characterMapping.length===0){const T=w.RangeUtil.readHorizontalRanges(this._getReadingTarget(_),0,0,0,0,v.clientRectDeltaLeft,v.endNode);return!T||T.length===0?-1:T[0].left}if(f===this._characterMapping.length&&this._isWhitespaceOnly&&this._containsForeignElements===0)return this.getWidth();const y=this._characterMapping.charOffsetToPartData(f-1),L=d.CharacterMapping.getPartIndex(y),I=d.CharacterMapping.getCharIndex(y),k=w.RangeUtil.readHorizontalRanges(this._getReadingTarget(_),L,I,L,I,v.clientRectDeltaLeft,v.endNode);if(!k||k.length===0)return-1;const E=k[0].left;if(this.input.isBasicASCII){const T=this._characterMapping.getAbsoluteOffsets(),O=Math.round(this.input.spaceWidth*T[f-1]);if(Math.abs(O-E)<=1)return O}return E}_readRawVisibleRangesForRange(_,f,v,y){if(f===1&&v===this._characterMapping.length)return[new S.HorizontalRange(0,this.getWidth())];const L=this._characterMapping.charOffsetToPartData(f-1),I=d.CharacterMapping.getPartIndex(L),k=d.CharacterMapping.getCharIndex(L),E=this._characterMapping.charOffsetToPartData(v-1),T=d.CharacterMapping.getPartIndex(E),O=d.CharacterMapping.getCharIndex(E);return w.RangeUtil.readHorizontalRanges(this._getReadingTarget(_),I,k,T,O,y.clientRectDeltaLeft,y.endNode)}getColumnOfNodeOffset(_,f,v){const y=f.textContent.length;let L=-1;for(;f;)f=f.previousSibling,L++;return this._characterMapping.partDataToCharOffset(L,y,v)+1}}class n extends i{_readVisibleRangesForRange(_,f,v,y){const L=super._readVisibleRangesForRange(_,f,v,y);if(!L||L.length===0||f===v||f===1&&v===this._characterMapping.length)return L;if(!this.input.containsRTL){const I=this._readPixelOffset(_,v,y);if(I!==-1){const k=L[L.length-1];k.left=4&&m[0]===3&&m[3]===7}static isStrictChildOfViewLines(m){return m.length>4&&m[0]===3&&m[3]===7}static isChildOfScrollableElement(m){return m.length>=2&&m[0]===3&&m[1]===5}static isChildOfMinimap(m){return m.length>=2&&m[0]===3&&m[1]===8}static isChildOfContentWidgets(m){return m.length>=4&&m[0]===3&&m[3]===1}static isChildOfOverflowingContentWidgets(m){return m.length>=1&&m[0]===2}static isChildOfOverlayWidgets(m){return m.length>=2&&m[0]===3&&m[1]===4}}class s{constructor(m,_,f){this.model=m.model;const v=m.configuration.options;this.layoutInfo=v.get(124),this.viewDomNode=_.viewDomNode,this.lineHeight=v.get(53),this.stickyTabStops=v.get(99),this.typicalHalfwidthCharacterWidth=v.get(38).typicalHalfwidthCharacterWidth,this.lastRenderData=f,this._context=m,this._viewHelper=_}getZoneAtCoord(m){return s.getZoneAtCoord(this._context,m)}static getZoneAtCoord(m,_){const f=m.viewLayout.getWhitespaceAtVerticalOffset(_);if(f){const v=f.verticalOffset+f.height/2,y=m.model.getLineCount();let L=null,I,k=null;return f.afterLineNumber!==y&&(k=new w.Position(f.afterLineNumber+1,1)),f.afterLineNumber>0&&(L=new w.Position(f.afterLineNumber,m.model.getLineMaxColumn(f.afterLineNumber))),k===null?I=L:L===null?I=k:_=m.layoutInfo.glyphMarginLeft,this.isInContentArea=!this.isInMarginArea,this.mouseColumn=Math.max(0,n._getMouseColumn(this.mouseContentHorizontalOffset,m.typicalHalfwidthCharacterWidth))}}class u extends a{constructor(m,_,f,v){super(m,_,f);this._ctx=m,v?(this.target=v,this.targetPath=N.PartFingerprints.collect(v,m.viewDomNode)):(this.target=null,this.targetPath=new Uint8Array(0))}toString(){return`pos(${this.pos.x},${this.pos.y}), editorPos(${this.editorPos.x},${this.editorPos.y}), mouseVerticalOffset: ${this.mouseVerticalOffset}, mouseContentHorizontalOffset: ${this.mouseContentHorizontalOffset} + target: ${this.target?this.target.outerHTML:null}`}fulfill(m,_=null,f=null,v=null){let y=this.mouseColumn;return _&&_.columnL.contentLeft+L.width)){const I=m.getVerticalOffsetForLineNumber(L.position.lineNumber);if(I<=y&&y<=I+L.height)return _.fulfill(6,L.position)}}return null}static _hitTestViewZone(m,_){const f=m.getZoneAtCoord(_.mouseVerticalOffset);if(f){const v=_.isInContentArea?8:5;return _.fulfill(v,f.position,null,f)}return null}static _hitTestTextArea(m,_){return o.isTextArea(_.targetPath)?m.lastRenderData.lastTextareaPosition?_.fulfill(6,m.lastRenderData.lastTextareaPosition):_.fulfill(1,m.lastRenderData.lastTextareaPosition):null}static _hitTestMargin(m,_){if(_.isInMarginArea){const f=m.getFullLineRangeAtCoord(_.mouseVerticalOffset),v=f.range.getStartPosition();let y=Math.abs(_.pos.x-_.editorPos.x);const L={isAfterLines:f.isAfterLines,glyphMarginLeft:m.layoutInfo.glyphMarginLeft,glyphMarginWidth:m.layoutInfo.glyphMarginWidth,lineNumbersWidth:m.layoutInfo.lineNumbersWidth,offsetX:y};return y-=m.layoutInfo.glyphMarginLeft,y<=m.layoutInfo.glyphMarginWidth?_.fulfill(2,v,f.range,L):(y-=m.layoutInfo.glyphMarginWidth,y<=m.layoutInfo.lineNumbersWidth?_.fulfill(3,v,f.range,L):(y-=m.layoutInfo.lineNumbersWidth,_.fulfill(4,v,f.range,L)))}return null}static _hitTestViewLines(m,_,f){if(!o.isChildOfViewLines(_.targetPath))return null;if(m.isInTopPadding(_.mouseVerticalOffset))return _.fulfill(7,new w.Position(1,1),void 0,r);if(m.isAfterLines(_.mouseVerticalOffset)||m.isInBottomPadding(_.mouseVerticalOffset)){const y=m.model.getLineCount(),L=m.model.getLineMaxColumn(y);return _.fulfill(7,new w.Position(y,L),void 0,r)}if(f){if(o.isStrictChildOfViewLines(_.targetPath)){const y=m.getLineNumberAtVerticalOffset(_.mouseVerticalOffset);if(m.model.getLineLength(y)===0){const I=m.getLineWidth(y),k=i(_.mouseContentHorizontalOffset-I);return _.fulfill(7,new w.Position(y,1),void 0,k)}const L=m.getLineWidth(y);if(_.mouseContentHorizontalOffset>=L){const I=i(_.mouseContentHorizontalOffset-L),k=new w.Position(y,m.model.getLineMaxColumn(y));return _.fulfill(7,k,void 0,I)}}return _.fulfill(0)}const v=n._doHitTest(m,_);return v.position?n.createMouseTargetFromHitTestPosition(m,_,v.position.lineNumber,v.position.column):this._createMouseTarget(m,_.withTarget(v.hitTarget),!0)}static _hitTestMinimap(m,_){if(o.isChildOfMinimap(_.targetPath)){const f=m.getLineNumberAtVerticalOffset(_.mouseVerticalOffset),v=m.model.getLineMaxColumn(f);return _.fulfill(11,new w.Position(f,v))}return null}static _hitTestScrollbarSlider(m,_){if(o.isChildOfScrollableElement(_.targetPath)&&_.target&&_.target.nodeType===1){const f=_.target.className;if(f&&/\b(slider|scrollbar)\b/.test(f)){const v=m.getLineNumberAtVerticalOffset(_.mouseVerticalOffset),y=m.model.getLineMaxColumn(v);return _.fulfill(11,new w.Position(v,y))}}return null}static _hitTestScrollbar(m,_){if(o.isChildOfScrollableElement(_.targetPath)){const f=m.getLineNumberAtVerticalOffset(_.mouseVerticalOffset),v=m.model.getLineMaxColumn(f);return _.fulfill(11,new w.Position(f,v))}return null}getMouseColumn(m,_){const f=this._context.configuration.options,v=f.get(124),y=this._context.viewLayout.getCurrentScrollLeft()+_.x-m.x-v.contentLeft;return n._getMouseColumn(y,f.get(38).typicalHalfwidthCharacterWidth)}static _getMouseColumn(m,_){return m<0?1:Math.round(m/_)+1}static createMouseTargetFromHitTestPosition(m,_,f,v){const y=new w.Position(f,v),L=m.getLineWidth(f);if(_.mouseContentHorizontalOffset>L){const O=i(_.mouseContentHorizontalOffset-L);return _.fulfill(7,y,void 0,O)}const I=m.visibleRangeForPosition(f,v);if(!I)return _.fulfill(0,y);const k=I.left;if(_.mouseContentHorizontalOffset===k)return _.fulfill(6,y);const E=[];if(E.push({offset:I.left,column:v}),v>1){const O=m.visibleRangeForPosition(f,v-1);O&&E.push({offset:O.left,column:v-1})}const T=m.model.getLineMaxColumn(f);if(vO.offset-A.offset);for(let O=1;O=_.editorPos.y+m.layoutInfo.height&&(L=_.editorPos.y+m.layoutInfo.height-1);const I=new b.PageCoordinates(_.pos.x,L),k=this._actualDoHitTestWithCaretRangeFromPoint(m,I.toClientCoordinates());return k.position?k:this._actualDoHitTestWithCaretRangeFromPoint(m,_.pos.toClientCoordinates())}static _actualDoHitTestWithCaretRangeFromPoint(m,_){const f=d.getShadowRoot(m.viewDomNode);let v;if(f?typeof f.caretRangeFromPoint=="undefined"?v=t(f,_.clientX,_.clientY):v=f.caretRangeFromPoint(_.clientX,_.clientY):v=document.caretRangeFromPoint(_.clientX,_.clientY),!v||!v.startContainer)return{position:null,hitTarget:null};const y=v.startContainer;let L=null;if(y.nodeType===y.TEXT_NODE){const I=y.parentNode,k=I?I.parentNode:null,E=k?k.parentNode:null;if((E&&E.nodeType===E.ELEMENT_NODE?E.className:null)===M.ViewLine.CLASS_NAME)return{position:m.getPositionFromDOMInfo(I,v.startOffset),hitTarget:null};L=y.parentNode}else if(y.nodeType===y.ELEMENT_NODE){const I=y.parentNode,k=I?I.parentNode:null;if((k&&k.nodeType===k.ELEMENT_NODE?k.className:null)===M.ViewLine.CLASS_NAME)return{position:m.getPositionFromDOMInfo(y,y.textContent.length),hitTarget:null};L=y}return{position:null,hitTarget:L}}static _doHitTestWithCaretPositionFromPoint(m,_){const f=document.caretPositionFromPoint(_.clientX,_.clientY);if(f.offsetNode.nodeType===f.offsetNode.TEXT_NODE){const v=f.offsetNode.parentNode,y=v?v.parentNode:null,L=y?y.parentNode:null;return(L&&L.nodeType===L.ELEMENT_NODE?L.className:null)===M.ViewLine.CLASS_NAME?{position:m.getPositionFromDOMInfo(f.offsetNode.parentNode,f.offset),hitTarget:null}:{position:null,hitTarget:f.offsetNode.parentNode}}if(f.offsetNode.nodeType===f.offsetNode.ELEMENT_NODE){const v=f.offsetNode.parentNode,y=v&&v.nodeType===v.ELEMENT_NODE?v.className:null,L=v?v.parentNode:null,I=L&&L.nodeType===L.ELEMENT_NODE?L.className:null;if(y===M.ViewLine.CLASS_NAME){const k=f.offsetNode.childNodes[Math.min(f.offset,f.offsetNode.childNodes.length-1)];if(k)return{position:m.getPositionFromDOMInfo(k,0),hitTarget:null}}else if(I===M.ViewLine.CLASS_NAME)return{position:m.getPositionFromDOMInfo(f.offsetNode,0),hitTarget:null}}return{position:null,hitTarget:f.offsetNode}}static _snapToSoftTabBoundary(m,_){const f=_.getLineContent(m.lineNumber),{tabSize:v}=_.getTextModelOptions(),y=g.AtomicTabMoveOperations.atomicPosition(f,m.column-1,v,2);return y!==-1?new w.Position(m.lineNumber,y+1):m}static _doHitTest(m,_){let f;return typeof document.caretRangeFromPoint=="function"?f=this._doHitTestWithCaretRangeFromPoint(m,_):document.caretPositionFromPoint?f=this._doHitTestWithCaretPositionFromPoint(m,_.pos.toClientCoordinates()):f={position:null,hitTarget:null},f.position&&m.stickyTabStops&&(f.position=this._snapToSoftTabBoundary(f.position,m.model)),f}}e.MouseTargetFactory=n;function t(h,m,_){const f=document.createRange();let v=h.elementFromPoint(m,_);if(v!==null){for(;v&&v.firstChild&&v.firstChild.nodeType!==v.firstChild.TEXT_NODE&&v.lastChild&&v.lastChild.firstChild;)v=v.lastChild;const y=v.getBoundingClientRect(),L=window.getComputedStyle(v,null).getPropertyValue("font"),I=v.innerText;let k=y.left,E=0,T;if(m>y.left+y.width)E=I.length;else{const O=l.getInstance();for(let A=0;Athis._createMouseTarget(_,f),_=>this._getMouseColumn(_))),this.lastMouseLeaveTime=-1,this._height=this._context.configuration.options.get(124).height;const h=new d.EditorMouseEventFactory(this.viewHelper.viewDomNode);this._register(h.onContextMenu(this.viewHelper.viewDomNode,_=>this._onContextMenu(_,!0))),this._register(h.onMouseMoveThrottled(this.viewHelper.viewDomNode,_=>this._onMouseMove(_),s(this.mouseTargetFactory),a.MOUSE_MOVE_MINIMUM_TIME)),this._register(h.onMouseUp(this.viewHelper.viewDomNode,_=>this._onMouseUp(_))),this._register(h.onMouseLeave(this.viewHelper.viewDomNode,_=>this._onMouseLeave(_))),this._register(h.onMouseDown(this.viewHelper.viewDomNode,_=>this._onMouseDown(_)));const m=_=>{if(this.viewController.emitMouseWheel(_),!!this._context.configuration.options.get(62)){const f=new N.StandardWheelEvent(_);if(S.isMacintosh?(_.metaKey||_.ctrlKey)&&!_.shiftKey&&!_.altKey:_.ctrlKey&&!_.metaKey&&!_.shiftKey&&!_.altKey){const y=g.EditorZoom.getZoomLevel(),L=f.deltaY>0?1:-1;g.EditorZoom.setZoomLevel(y+L),f.preventDefault(),f.stopPropagation()}}};this._register(b.addDisposableListener(this.viewHelper.viewDomNode,b.EventType.MOUSE_WHEEL,m,{capture:!0,passive:!1})),this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),super.dispose()}onConfigurationChanged(n){if(n.hasChanged(124)){const t=this._context.configuration.options.get(124).height;this._height!==t&&(this._height=t,this._mouseDownOperation.onHeightChanged())}return!1}onCursorStateChanged(n){return this._mouseDownOperation.onCursorStateChanged(n),!1}onFocusChanged(n){return!1}onScrollChanged(n){return this._mouseDownOperation.onScrollChanged(),!1}getTargetAtClientPoint(n,t){const h=new d.ClientCoordinates(n,t).toPageCoordinates(),m=d.createEditorPagePosition(this.viewHelper.viewDomNode);return h.ym.y+m.height||h.xm.x+m.width?null:this.mouseTargetFactory.createMouseTarget(this.viewHelper.getLastRenderData(),m,h,null)}_createMouseTarget(n,t){return this.mouseTargetFactory.createMouseTarget(this.viewHelper.getLastRenderData(),n.editorPos,n.pos,t?n.target:null)}_getMouseColumn(n){return this.mouseTargetFactory.getMouseColumn(n.editorPos,n.pos)}_onContextMenu(n,t){this.viewController.emitContextMenu({event:n,target:this._createMouseTarget(n,t)})}_onMouseMove(n){this._mouseDownOperation.isActive()||n.timestamp{n.preventDefault(),this.viewHelper.focusTextArea()};if(y&&(l||m&&_))L(),this._mouseDownOperation.start(t.type,n);else if(h)n.preventDefault();else if(f){const I=t.detail;this.viewHelper.shouldSuppressMouseDownOnViewZone(I.viewZoneId)&&(L(),this._mouseDownOperation.start(t.type,n),n.preventDefault())}else v&&this.viewHelper.shouldSuppressMouseDownOnWidget(t.detail)&&(L(),n.preventDefault());this.viewController.emitMouseDown({event:n,target:t})}}e.MouseHandler=a,a.MOUSE_MOVE_MINIMUM_TIME=100;class u extends w.Disposable{constructor(n,t,l,h,m){super();this._context=n,this._viewController=t,this._viewHelper=l,this._createMouseTarget=h,this._getMouseColumn=m,this._mouseMoveMonitor=this._register(new d.GlobalEditorMouseMoveMonitor(this._viewHelper.viewDomNode)),this._onScrollTimeout=this._register(new M.TimeoutTimer),this._mouseState=new r,this._currentSelection=new c.Selection(1,1,1,1),this._isActive=!1,this._lastMouseEvent=null}dispose(){super.dispose()}isActive(){return this._isActive}_onMouseDownThenMove(n){this._lastMouseEvent=n,this._mouseState.setModifiers(n);const t=this._findMousePosition(n,!0);!t||(this._mouseState.isDragAndDrop?this._viewController.emitMouseDrag({event:n,target:t}):this._dispatchMouse(t,!0))}start(n,t){this._lastMouseEvent=t,this._mouseState.setStartedOnLineNumbers(n===3),this._mouseState.setStartButtons(t),this._mouseState.setModifiers(t);const l=this._findMousePosition(t,!0);if(!(!l||!l.position)){this._mouseState.trySetCount(t.detail,l.position),t.detail=this._mouseState.count;const h=this._context.configuration.options;if(!h.get(75)&&h.get(27)&&!h.get(15)&&!this._mouseState.altKey&&t.detail<2&&!this._isActive&&!this._currentSelection.isEmpty()&&l.type===6&&l.position&&this._currentSelection.containsPosition(l.position)){this._mouseState.isDragAndDrop=!0,this._isActive=!0,this._mouseMoveMonitor.startMonitoring(t.target,t.buttons,s(null),m=>this._onMouseDownThenMove(m),m=>{const _=this._findMousePosition(this._lastMouseEvent,!0);m&&m instanceof KeyboardEvent?this._viewController.emitMouseDropCanceled():this._viewController.emitMouseDrop({event:this._lastMouseEvent,target:_?this._createMouseTarget(this._lastMouseEvent,!0):null}),this._stop()});return}this._mouseState.isDragAndDrop=!1,this._dispatchMouse(l,t.shiftKey),this._isActive||(this._isActive=!0,this._mouseMoveMonitor.startMonitoring(t.target,t.buttons,s(null),m=>this._onMouseDownThenMove(m),()=>this._stop()))}}_stop(){this._isActive=!1,this._onScrollTimeout.cancel()}onHeightChanged(){this._mouseMoveMonitor.stopMonitoring()}onScrollChanged(){!this._isActive||this._onScrollTimeout.setIfNotSet(()=>{if(!!this._lastMouseEvent){const n=this._findMousePosition(this._lastMouseEvent,!1);!n||this._mouseState.isDragAndDrop||this._dispatchMouse(n,!0)}},10)}onCursorStateChanged(n){this._currentSelection=n.selections[0]}_getPositionOutsideEditor(n){const t=n.editorPos,l=this._context.model,h=this._context.viewLayout,m=this._getMouseColumn(n);if(n.posyt.y+t.height){const f=h.getCurrentScrollTop()+(n.posy-t.y),v=C.HitTestContext.getZoneAtCoord(this._context,f);if(v){const L=this._helpPositionJumpOverViewZone(v);if(L)return new C.MouseTarget(null,13,m,L)}const y=h.getLineNumberAtVerticalOffset(f);return new C.MouseTarget(null,13,m,new p.Position(y,l.getLineMaxColumn(y)))}const _=h.getLineNumberAtVerticalOffset(h.getCurrentScrollTop()+(n.posy-t.y));return n.posxt.x+t.width?new C.MouseTarget(null,13,m,new p.Position(_,l.getLineMaxColumn(_))):null}_findMousePosition(n,t){const l=this._getPositionOutsideEditor(n);if(l)return l;const h=this._createMouseTarget(n,t);if(!h.position)return null;if(h.type===8||h.type===5){const _=this._helpPositionJumpOverViewZone(h.detail);if(_)return new C.MouseTarget(h.element,h.type,h.mouseColumn,_,null,h.detail)}return h}_helpPositionJumpOverViewZone(n){const t=new p.Position(this._currentSelection.selectionStartLineNumber,this._currentSelection.selectionStartColumn),l=n.positionBefore,h=n.positionAfter;return l&&h?l.isBefore(t)?l:h:null}_dispatchMouse(n,t){!n.position||this._viewController.dispatchMouse({position:n.position,mouseColumn:n.mouseColumn,startedOnLineNumbers:this._mouseState.startedOnLineNumbers,inSelectionMode:t,mouseDownCount:this._mouseState.count,altKey:this._mouseState.altKey,ctrlKey:this._mouseState.ctrlKey,metaKey:this._mouseState.metaKey,shiftKey:this._mouseState.shiftKey,leftButton:this._mouseState.leftButton,middleButton:this._mouseState.middleButton})}}class r{constructor(){this._altKey=!1,this._ctrlKey=!1,this._metaKey=!1,this._shiftKey=!1,this._leftButton=!1,this._middleButton=!1,this._startedOnLineNumbers=!1,this._lastMouseDownPosition=null,this._lastMouseDownPositionEqualCount=0,this._lastMouseDownCount=0,this._lastSetMouseDownCountTime=0,this.isDragAndDrop=!1}get altKey(){return this._altKey}get ctrlKey(){return this._ctrlKey}get metaKey(){return this._metaKey}get shiftKey(){return this._shiftKey}get leftButton(){return this._leftButton}get middleButton(){return this._middleButton}get startedOnLineNumbers(){return this._startedOnLineNumbers}get count(){return this._lastMouseDownCount}setModifiers(n){this._altKey=n.altKey,this._ctrlKey=n.ctrlKey,this._metaKey=n.metaKey,this._shiftKey=n.shiftKey}setStartButtons(n){this._leftButton=n.leftButton,this._middleButton=n.middleButton}setStartedOnLineNumbers(n){this._startedOnLineNumbers=n}trySetCount(n,t){const l=new Date().getTime();l-this._lastSetMouseDownCountTime>r.CLEAR_MOUSE_DOWN_COUNT_TIME&&(n=1),this._lastSetMouseDownCountTime=l,n>this._lastMouseDownCount+1&&(n=this._lastMouseDownCount+1),this._lastMouseDownPosition&&this._lastMouseDownPosition.equals(t)?this._lastMouseDownPositionEqualCount++:this._lastMouseDownPositionEqualCount=1,this._lastMouseDownPosition=t,this._lastMouseDownCount=Math.min(n,this._lastMouseDownPositionEqualCount)}}r.CLEAR_MOUSE_DOWN_COUNT_TIME=400}),define(Q[581],J([0,1,7,17,60,2,580,162,151,164]),function(q,e,b,N,M,w,S,C,d,g){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.PointerHandler=e.PointerEventHandler=void 0;class p extends S.MouseHandler{constructor(a,u,r){super(a,u,r);this._register(M.Gesture.addTarget(this.viewHelper.linesContentDomNode)),this._register(b.addDisposableListener(this.viewHelper.linesContentDomNode,M.EventType.Tap,n=>this.onTap(n))),this._register(b.addDisposableListener(this.viewHelper.linesContentDomNode,M.EventType.Change,n=>this.onChange(n))),this._register(b.addDisposableListener(this.viewHelper.linesContentDomNode,M.EventType.Contextmenu,n=>this._onContextMenu(new C.EditorMouseEvent(n,this.viewHelper.viewDomNode),!1))),this._lastPointerType="mouse",this._register(b.addDisposableListener(this.viewHelper.linesContentDomNode,"pointerdown",n=>{const t=n.pointerType;if(t==="mouse"){this._lastPointerType="mouse";return}else t==="touch"?this._lastPointerType="touch":this._lastPointerType="pen"}));const i=new C.EditorPointerEventFactory(this.viewHelper.viewDomNode);this._register(i.onPointerMoveThrottled(this.viewHelper.viewDomNode,n=>this._onMouseMove(n),S.createMouseMoveEventMerger(this.mouseTargetFactory),S.MouseHandler.MOUSE_MOVE_MINIMUM_TIME)),this._register(i.onPointerUp(this.viewHelper.viewDomNode,n=>this._onMouseUp(n))),this._register(i.onPointerLeave(this.viewHelper.viewDomNode,n=>this._onMouseLeave(n))),this._register(i.onPointerDown(this.viewHelper.viewDomNode,n=>this._onMouseDown(n)))}onTap(a){if(!(!a.initialTarget||!this.viewHelper.linesContentDomNode.contains(a.initialTarget))){a.preventDefault(),this.viewHelper.focusTextArea();const u=this._createMouseTarget(new C.EditorMouseEvent(a,this.viewHelper.viewDomNode),!1);u.position&&this.viewController.dispatchMouse({position:u.position,mouseColumn:u.position.column,startedOnLineNumbers:!1,mouseDownCount:a.tapCount,inSelectionMode:!1,altKey:!1,ctrlKey:!1,metaKey:!1,shiftKey:!1,leftButton:!1,middleButton:!1})}}onChange(a){this._lastPointerType==="touch"&&this._context.model.deltaScrollNow(-a.translationX,-a.translationY)}_onMouseDown(a){a.browserEvent.pointerType!=="touch"&&super._onMouseDown(a)}}e.PointerEventHandler=p;class c extends S.MouseHandler{constructor(a,u,r){super(a,u,r);this._register(M.Gesture.addTarget(this.viewHelper.linesContentDomNode)),this._register(b.addDisposableListener(this.viewHelper.linesContentDomNode,M.EventType.Tap,i=>this.onTap(i))),this._register(b.addDisposableListener(this.viewHelper.linesContentDomNode,M.EventType.Change,i=>this.onChange(i))),this._register(b.addDisposableListener(this.viewHelper.linesContentDomNode,M.EventType.Contextmenu,i=>this._onContextMenu(new C.EditorMouseEvent(i,this.viewHelper.viewDomNode),!1)))}onTap(a){a.preventDefault(),this.viewHelper.focusTextArea();const u=this._createMouseTarget(new C.EditorMouseEvent(a,this.viewHelper.viewDomNode),!1);if(u.position){const r=document.createEvent("CustomEvent");r.initEvent(g.TextAreaSyntethicEvents.Tap,!1,!0),this.viewHelper.dispatchTextAreaEvent(r),this.viewController.moveTo(u.position)}}onChange(a){this._context.model.deltaScrollNow(-a.translationX,-a.translationY)}}class o extends w.Disposable{constructor(a,u,r){super();N.isIOS&&d.BrowserFeatures.pointerEvents?this.handler=this._register(new p(a,u,r)):window.TouchEvent?this.handler=this._register(new c(a,u,r)):this.handler=this._register(new S.MouseHandler(a,u,r))}getTargetAtClientPoint(a,u){return this.handler.getTargetAtClientPoint(a,u)}}e.PointerHandler=o}),define(Q[256],J([0,1,187]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ViewUserInputEvents=void 0;class N{constructor(S){this.onKeyDown=null,this.onKeyUp=null,this.onContextMenu=null,this.onMouseMove=null,this.onMouseLeave=null,this.onMouseDown=null,this.onMouseUp=null,this.onMouseDrag=null,this.onMouseDrop=null,this.onMouseDropCanceled=null,this.onMouseWheel=null,this._coordinatesConverter=S}emitKeyDown(S){this.onKeyDown&&this.onKeyDown(S)}emitKeyUp(S){this.onKeyUp&&this.onKeyUp(S)}emitContextMenu(S){this.onContextMenu&&this.onContextMenu(this._convertViewToModelMouseEvent(S))}emitMouseMove(S){this.onMouseMove&&this.onMouseMove(this._convertViewToModelMouseEvent(S))}emitMouseLeave(S){this.onMouseLeave&&this.onMouseLeave(this._convertViewToModelMouseEvent(S))}emitMouseDown(S){this.onMouseDown&&this.onMouseDown(this._convertViewToModelMouseEvent(S))}emitMouseUp(S){this.onMouseUp&&this.onMouseUp(this._convertViewToModelMouseEvent(S))}emitMouseDrag(S){this.onMouseDrag&&this.onMouseDrag(this._convertViewToModelMouseEvent(S))}emitMouseDrop(S){this.onMouseDrop&&this.onMouseDrop(this._convertViewToModelMouseEvent(S))}emitMouseDropCanceled(){this.onMouseDropCanceled&&this.onMouseDropCanceled()}emitMouseWheel(S){this.onMouseWheel&&this.onMouseWheel(S)}_convertViewToModelMouseEvent(S){return S.target?{event:S.event,target:this._convertViewToModelMouseTarget(S.target)}:S}_convertViewToModelMouseTarget(S){return N.convertViewToModelMouseTarget(S,this._coordinatesConverter)}static convertViewToModelMouseTarget(S,C){return new M(S.element,S.type,S.mouseColumn,S.position?C.convertViewPositionToModelPosition(S.position):null,S.range?C.convertViewRangeToModelRange(S.range):null,S.detail)}}e.ViewUserInputEvents=N;class M{constructor(S,C,d,g,p,c){this.element=S,this.type=C,this.mouseColumn=d,this.position=g,this.range=p,this.detail=c}toString(){return b.MouseTarget.toString(this)}}}),define(Q[582],J([0,1,17,15,69,165,45,255,14,3,110,124,323]),function(q,e,b,N,M,w,S,C,d,g,p,c){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ViewLines=void 0;class o{constructor(){this._currentVisibleRange=new g.Range(1,1,1,1)}getCurrentVisibleRange(){return this._currentVisibleRange}setCurrentVisibleRange(i){this._currentVisibleRange=i}}class s{constructor(i,n,t,l,h,m){this.lineNumber=i,this.startColumn=n,this.endColumn=t,this.startScrollTop=l,this.stopScrollTop=h,this.scrollType=m,this.type="range",this.minLineNumber=i,this.maxLineNumber=i}}class a{constructor(i,n,t,l){this.selections=i,this.startScrollTop=n,this.stopScrollTop=t,this.scrollType=l,this.type="selections";let h=i[0].startLineNumber,m=i[0].endLineNumber;for(let _=1,f=i.length;_{this._updateLineWidthsSlow()},200),this._asyncCheckMonospaceFontAssumptions=new N.RunOnceScheduler(()=>{this._checkMonospaceFontAssumptions()},2e3),this._lastRenderedData=new o,this._horizontalRevealRequest=null}dispose(){this._asyncUpdateLineWidths.dispose(),this._asyncCheckMonospaceFontAssumptions.dispose(),super.dispose()}getDomNode(){return this.domNode}createVisibleLine(){return new C.ViewLine(this._viewLineOptions)}onConfigurationChanged(i){this._visibleLines.onConfigurationChanged(i),i.hasChanged(125)&&(this._maxLineWidth=0);const n=this._context.configuration.options,t=n.get(38),l=n.get(125);return this._lineHeight=n.get(53),this._typicalHalfwidthCharacterWidth=t.typicalHalfwidthCharacterWidth,this._isViewportWrapping=l.isViewportWrapping,this._revealHorizontalRightPadding=n.get(84),this._cursorSurroundingLines=n.get(22),this._cursorSurroundingLinesStyle=n.get(23),this._canUseLayerHinting=!n.get(25),M.Configuration.applyFontInfo(this.domNode,t),this._onOptionsMaybeChanged(),i.hasChanged(124)&&(this._maxLineWidth=0),!0}_onOptionsMaybeChanged(){const i=this._context.configuration,n=new C.ViewLineOptions(i,this._context.theme.type);if(!this._viewLineOptions.equals(n)){this._viewLineOptions=n;const t=this._visibleLines.getStartLineNumber(),l=this._visibleLines.getEndLineNumber();for(let h=t;h<=l;h++)this._visibleLines.getVisibleLine(h).onOptionsChanged(this._viewLineOptions);return!0}return!1}onCursorStateChanged(i){const n=this._visibleLines.getStartLineNumber(),t=this._visibleLines.getEndLineNumber();let l=!1;for(let h=n;h<=t;h++)l=this._visibleLines.getVisibleLine(h).onSelectionChanged()||l;return l}onDecorationsChanged(i){{const n=this._visibleLines.getStartLineNumber(),t=this._visibleLines.getEndLineNumber();for(let l=n;l<=t;l++)this._visibleLines.getVisibleLine(l).onDecorationsChanged()}return!0}onFlushed(i){const n=this._visibleLines.onFlushed(i);return this._maxLineWidth=0,n}onLinesChanged(i){return this._visibleLines.onLinesChanged(i)}onLinesDeleted(i){return this._visibleLines.onLinesDeleted(i)}onLinesInserted(i){return this._visibleLines.onLinesInserted(i)}onRevealRangeRequest(i){const n=this._computeScrollTopToRevealRange(this._context.viewLayout.getFutureViewport(),i.source,i.range,i.selections,i.verticalType);if(n===-1)return!1;let t=this._context.viewLayout.validateScrollPosition({scrollTop:n});i.revealHorizontal?i.range&&i.range.startLineNumber!==i.range.endLineNumber?t={scrollTop:t.scrollTop,scrollLeft:0}:i.range?this._horizontalRevealRequest=new s(i.range.startLineNumber,i.range.startColumn,i.range.endColumn,this._context.viewLayout.getCurrentScrollTop(),t.scrollTop,i.scrollType):i.selections&&i.selections.length>0&&(this._horizontalRevealRequest=new a(i.selections,this._context.viewLayout.getCurrentScrollTop(),t.scrollTop,i.scrollType)):this._horizontalRevealRequest=null;const h=Math.abs(this._context.viewLayout.getCurrentScrollTop()-t.scrollTop)<=this._lineHeight?1:i.scrollType;return this._context.model.setScrollPosition(t,h),!0}onScrollChanged(i){if(this._horizontalRevealRequest&&i.scrollLeftChanged&&(this._horizontalRevealRequest=null),this._horizontalRevealRequest&&i.scrollTopChanged){const n=Math.min(this._horizontalRevealRequest.startScrollTop,this._horizontalRevealRequest.stopScrollTop),t=Math.max(this._horizontalRevealRequest.startScrollTop,this._horizontalRevealRequest.stopScrollTop);(i.scrollTopt)&&(this._horizontalRevealRequest=null)}return this.domNode.setWidth(i.scrollWidth),this._visibleLines.onScrollChanged(i)||!0}onTokensChanged(i){return this._visibleLines.onTokensChanged(i)}onZonesChanged(i){return this._context.model.setMaxLineWidth(this._maxLineWidth),this._visibleLines.onZonesChanged(i)}onThemeChanged(i){return this._onOptionsMaybeChanged()}getPositionFromDOMInfo(i,n){const t=this._getViewLineDomNode(i);if(t===null)return null;const l=this._getLineNumberFor(t);if(l===-1||l<1||l>this._context.model.getLineCount())return null;if(this._context.model.getLineMaxColumn(l)===1)return new d.Position(l,1);const h=this._visibleLines.getStartLineNumber(),m=this._visibleLines.getEndLineNumber();if(lm)return null;let _=this._visibleLines.getVisibleLine(l).getColumnOfNodeOffset(l,i,n);const f=this._context.model.getLineMinColumn(l);return _t?-1:this._visibleLines.getVisibleLine(i).getWidth()}linesVisibleRangesForRange(i,n){if(this.shouldRender())return null;const t=i.endLineNumber,l=g.Range.intersectRanges(i,this._lastRenderedData.getCurrentVisibleRange());if(!l)return null;let h=[],m=0;const _=new C.DomReadingContext(this.domNode.domNode,this._textRangeRestingSpot);let f=0;n&&(f=this._context.model.coordinatesConverter.convertViewPositionToModelPosition(new d.Position(l.startLineNumber,1)).lineNumber);const v=this._visibleLines.getStartLineNumber(),y=this._visibleLines.getEndLineNumber();for(let L=l.startLineNumber;L<=l.endLineNumber;L++)if(!(Ly)){const I=L===l.startLineNumber?l.startColumn:1,k=L===l.endLineNumber?l.endColumn:this._context.model.getLineMaxColumn(L),E=this._visibleLines.getVisibleLine(L).getVisibleRangesForRange(I,k,_);if(!!E){if(n&&Lthis._visibleLines.getEndLineNumber()?null:this._visibleLines.getVisibleLine(i).getVisibleRangesForRange(n,t,new C.DomReadingContext(this.domNode.domNode,this._textRangeRestingSpot))}visibleRangeForPosition(i){const n=this._visibleRangesForLineRange(i.lineNumber,i.column,i.column);return n?new p.HorizontalPosition(n.outsideRenderedLine,n.ranges[0].left):null}updateLineWidths(){this._updateLineWidths(!1)}_updateLineWidthsFast(){return this._updateLineWidths(!0)}_updateLineWidthsSlow(){this._updateLineWidths(!1)}_updateLineWidths(i){const n=this._visibleLines.getStartLineNumber(),t=this._visibleLines.getEndLineNumber();let l=1,h=!0;for(let m=n;m<=t;m++){const _=this._visibleLines.getVisibleLine(m);if(i&&!_.getWidthIsFast()){h=!1;continue}l=Math.max(l,_.getWidth())}return h&&n===1&&t===this._context.model.getLineCount()&&(this._maxLineWidth=0),this._ensureMaxLineWidth(l),h}_checkMonospaceFontAssumptions(){let i=-1,n=-1;const t=this._visibleLines.getStartLineNumber(),l=this._visibleLines.getEndLineNumber();for(let h=t;h<=l;h++){const m=this._visibleLines.getVisibleLine(h);if(m.needsMonospaceFontCheck()){const _=m.getWidth();_>n&&(n=_,i=h)}}if(i!==-1&&!this._visibleLines.getVisibleLine(i).monospaceAssumptionsAreValid())for(let h=t;h<=l;h++)this._visibleLines.getVisibleLine(h).onMonospaceAssumptionsInvalidated()}prepareRender(){throw new Error("Not supported")}render(){throw new Error("Not supported")}renderText(i){if(this._visibleLines.renderLines(i),this._lastRenderedData.setCurrentVisibleRange(i.visibleRange),this.domNode.setWidth(this._context.viewLayout.getScrollWidth()),this.domNode.setHeight(Math.min(this._context.viewLayout.getScrollHeight(),1e6)),this._horizontalRevealRequest){const t=this._horizontalRevealRequest;if(i.startLineNumber<=t.minLineNumber&&t.maxLineNumber<=i.endLineNumber){this._horizontalRevealRequest=null,this.onDidRender();const l=this._computeScrollLeftToReveal(t);l&&(this._isViewportWrapping||this._ensureMaxLineWidth(l.maxHorizontalOffset),this._context.model.setScrollPosition({scrollLeft:l.scrollLeft},t.scrollType))}}if(this._updateLineWidthsFast()||this._asyncUpdateLineWidths.schedule(),b.isLinux&&!this._asyncCheckMonospaceFontAssumptions.isScheduled()){const t=this._visibleLines.getStartLineNumber(),l=this._visibleLines.getEndLineNumber();for(let h=t;h<=l;h++)if(this._visibleLines.getVisibleLine(h).needsMonospaceFontCheck()){this._asyncCheckMonospaceFontAssumptions.schedule();break}}this._linesContent.setLayerHinting(this._canUseLayerHinting),this._linesContent.setContain("strict");const n=this._context.viewLayout.getCurrentScrollTop()-i.bigNumbersDelta;this._linesContent.setTop(-n),this._linesContent.setLeft(-this._context.viewLayout.getCurrentScrollLeft())}_ensureMaxLineWidth(i){const n=Math.ceil(i);this._maxLineWidth0){let E=l[0].startLineNumber,T=l[0].endLineNumber;for(let O=1,A=l.length;O_){if(!v)return-1;k=y}else if(h===5||h===6)if(h===6&&m<=y&&L<=f)k=m;else{const E=Math.max(5*this._lineHeight,_*.2),T=y-E,O=L-_;k=Math.max(O,T)}else if(h===1||h===2)if(h===2&&m<=y&&L<=f)k=m;else{const E=(y+L)/2;k=Math.max(0,E-_/2)}else k=this._computeMinimumScrolling(m,f,y,L,h===3,h===4);return k}_computeScrollLeftToReveal(i){const n=this._context.viewLayout.getCurrentViewport(),t=n.left,l=t+n.width;let h=1073741824,m=0;if(i.type==="range"){const f=this._visibleRangesForLineRange(i.lineNumber,i.startColumn,i.endColumn);if(!f)return null;for(const v of f.ranges)h=Math.min(h,v.left),m=Math.max(m,v.left+v.width)}else for(const f of i.selections){if(f.startLineNumber!==f.endLineNumber)return null;const v=this._visibleRangesForLineRange(f.startLineNumber,f.startColumn,f.endColumn);if(!v)return null;for(const y of v.ranges)h=Math.min(h,y.left),m=Math.max(m,y.left+y.width)}return h=Math.max(0,h-u.HORIZONTAL_EXTRA_PX),m+=this._revealHorizontalRightPadding,i.type==="selections"&&m-h>n.width?null:{scrollLeft:this._computeMinimumScrolling(t,l,h,m),maxHorizontalOffset:m}}_computeMinimumScrolling(i,n,t,l,h,m){i=i|0,n=n|0,t=t|0,l=l|0,h=!!h,m=!!m;const _=n-i;if(l-t<_){if(h)return t;if(m)return Math.max(0,l-_);if(tn)return Math.max(0,l-_)}else return t;return i}}e.ViewLines=u,u.HORIZONTAL_EXTRA_PX=30}),define(Q[11],J([0,1,9,2,33,6,97,27]),function(q,e,b,N,M,w,S,C){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Themable=e.registerThemingParticipant=e.Extensions=e.getThemeTypeSelector=e.ThemeIcon=e.themeColorFromId=e.ThemeColor=e.IThemeService=void 0,e.IThemeService=b.createDecorator("themeService");var d;(function(r){function i(n){return n&&typeof n=="object"&&typeof n.id=="string"}r.isThemeColor=i})(d=e.ThemeColor||(e.ThemeColor={}));function g(r){return{id:r}}e.themeColorFromId=g;var p;(function(r){function i(m){return m&&typeof m=="object"&&typeof m.id=="string"&&(typeof m.color=="undefined"||d.isThemeColor(m.color))}r.isThemeIcon=i;const n=new RegExp(`^\\$\\((${C.CSSIcon.iconNameExpression}(?:${C.CSSIcon.iconModifierExpression})?)\\)$`);function t(m){const _=n.exec(m);if(!!_){let[,f]=_;return{id:f}}}r.fromString=t;function l(m,_){let f=m.id;const v=f.lastIndexOf("~");return v!==-1&&(f=f.substring(0,v)),_&&(f=`${f}~${_}`),{id:f}}r.modify=l;function h(m,_){var f,v;return m.id===_.id&&((f=m.color)===null||f===void 0?void 0:f.id)===((v=_.color)===null||v===void 0?void 0:v.id)}r.isEqual=h,r.asClassNameArray=C.CSSIcon.asClassNameArray,r.asClassName=C.CSSIcon.asClassName,r.asCSSSelector=C.CSSIcon.asCSSSelector})(p=e.ThemeIcon||(e.ThemeIcon={}));function c(r){switch(r){case S.ColorScheme.DARK:return"vs-dark";case S.ColorScheme.HIGH_CONTRAST:return"hc-black";default:return"vs"}}e.getThemeTypeSelector=c,e.Extensions={ThemingContribution:"base.contributions.theming"};class o{constructor(){this.themingParticipants=[],this.themingParticipants=[],this.onThemingParticipantAddedEmitter=new w.Emitter}onColorThemeChange(i){return this.themingParticipants.push(i),this.onThemingParticipantAddedEmitter.fire(i),N.toDisposable(()=>{const n=this.themingParticipants.indexOf(i);this.themingParticipants.splice(n,1)})}getThemingParticipants(){return this.themingParticipants}}let s=new o;M.Registry.add(e.Extensions.ThemingContribution,s);function a(r){return s.onColorThemeChange(r)}e.registerThemingParticipant=a;class u extends N.Disposable{constructor(i){super();this.themeService=i,this.theme=i.getColorTheme(),this._register(this.themeService.onDidColorThemeChange(n=>this.onThemeChange(n)))}onThemeChange(i){this.theme=i,this.updateStyles()}updateStyles(){}}e.Themable=u}),define(Q[583],J([0,1,7,2,8,24,362,107,53,11]),function(q,e,b,N,M,w,S,C,d,g){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DecorationTypeOptionsProvider=e.DecorationSubTypeOptionsProvider=e.CodeEditorServiceImpl=e.GlobalStyleSheet=e.RefCountedStyleSheet=void 0;class p{constructor(t,l,h){this._parent=t,this._editorId=l,this._styleSheet=h,this._refCount=0}ref(){this._refCount++}unref(){var t;this._refCount--,this._refCount===0&&((t=this._styleSheet.parentNode)===null||t===void 0||t.removeChild(this._styleSheet),this._parent._removeEditorStyleSheets(this._editorId))}insertRule(t,l){this._styleSheet.sheet.insertRule(t,l)}removeRulesContainingSelector(t){b.removeCSSRulesContainingSelector(t,this._styleSheet)}}e.RefCountedStyleSheet=p;class c{constructor(t){this._styleSheet=t}ref(){}unref(){}insertRule(t,l){this._styleSheet.sheet.insertRule(t,l)}removeRulesContainingSelector(t){b.removeCSSRulesContainingSelector(t,this._styleSheet)}}e.GlobalStyleSheet=c;let o=class extends S.AbstractCodeEditorService{constructor(t,l){super();this._decorationOptionProviders=new Map,this._editorStyleSheets=new Map,this._globalStyleSheet=t||null,this._themeService=l}_getOrCreateGlobalStyleSheet(){return this._globalStyleSheet||(this._globalStyleSheet=new c(b.createStyleSheet())),this._globalStyleSheet}_getOrCreateStyleSheet(t){if(!t)return this._getOrCreateGlobalStyleSheet();const l=t.getContainerDomNode();if(!b.isInShadowDOM(l))return this._getOrCreateGlobalStyleSheet();const h=t.getId();if(!this._editorStyleSheets.has(h)){const m=new p(this,h,b.createStyleSheet(l));this._editorStyleSheets.set(h,m)}return this._editorStyleSheets.get(h)}_removeEditorStyleSheets(t){this._editorStyleSheets.delete(t)}registerDecorationType(t,l,h,m){let _=this._decorationOptionProviders.get(t);if(!_){const f=this._getOrCreateStyleSheet(m),v={styleSheet:f,key:t,parentTypeKey:h,options:l||Object.create(null)};h?_=new s(this._themeService,f,v):_=new a(this._themeService,f,v),this._decorationOptionProviders.set(t,_),this._onDecorationTypeRegistered.fire(t)}_.refCount++}removeDecorationType(t){const l=this._decorationOptionProviders.get(t);l&&(l.refCount--,l.refCount<=0&&(this._decorationOptionProviders.delete(t),l.dispose(),this.listCodeEditors().forEach(h=>h.removeDecorations(t))))}resolveDecorationOptions(t,l){const h=this._decorationOptionProviders.get(t);if(!h)throw new Error("Unknown decoration type key: "+t);return h.getOptions(this,l)}};o=Me([_e(1,g.IThemeService)],o),e.CodeEditorServiceImpl=o;class s{constructor(t,l,h){this._styleSheet=l,this._styleSheet.ref(),this._parentTypeKey=h.parentTypeKey,this.refCount=0,this._beforeContentRules=new r(3,h,t),this._afterContentRules=new r(4,h,t)}getOptions(t,l){const h=t.resolveDecorationOptions(this._parentTypeKey,!0);return this._beforeContentRules&&(h.beforeContentClassName=this._beforeContentRules.className),this._afterContentRules&&(h.afterContentClassName=this._afterContentRules.className),h}dispose(){this._beforeContentRules&&(this._beforeContentRules.dispose(),this._beforeContentRules=null),this._afterContentRules&&(this._afterContentRules.dispose(),this._afterContentRules=null),this._styleSheet.unref()}}e.DecorationSubTypeOptionsProvider=s;class a{constructor(t,l,h){this._disposables=new N.DisposableStore,this._styleSheet=l,this._styleSheet.ref(),this.refCount=0;const m=I=>{const k=new r(I,h,t);if(this._disposables.add(k),k.hasContent)return k.className},_=I=>{const k=new r(I,h,t);return this._disposables.add(k),k.hasContent?{className:k.className,hasLetterSpacing:k.hasLetterSpacing}:null};this.className=m(0);const f=_(1);f&&(this.inlineClassName=f.className,this.inlineClassNameAffectsLetterSpacing=f.hasLetterSpacing),this.beforeContentClassName=m(3),this.afterContentClassName=m(4),this.glyphMarginClassName=m(2);const v=h.options;this.isWholeLine=Boolean(v.isWholeLine),this.stickiness=v.rangeBehavior;const y=v.light&&v.light.overviewRulerColor||v.overviewRulerColor,L=v.dark&&v.dark.overviewRulerColor||v.overviewRulerColor;(typeof y!="undefined"||typeof L!="undefined")&&(this.overviewRuler={color:y||L,darkColor:L||y,position:v.overviewRulerLane||d.OverviewRulerLane.Center})}getOptions(t,l){return l?{inlineClassName:this.inlineClassName,beforeContentClassName:this.beforeContentClassName,afterContentClassName:this.afterContentClassName,className:this.className,glyphMarginClassName:this.glyphMarginClassName,isWholeLine:this.isWholeLine,overviewRuler:this.overviewRuler,stickiness:this.stickiness}:this}dispose(){this._disposables.dispose(),this._styleSheet.unref()}}e.DecorationTypeOptionsProvider=a;const u={color:"color:{0} !important;",opacity:"opacity:{0};",backgroundColor:"background-color:{0};",outline:"outline:{0};",outlineColor:"outline-color:{0};",outlineStyle:"outline-style:{0};",outlineWidth:"outline-width:{0};",border:"border:{0};",borderColor:"border-color:{0};",borderRadius:"border-radius:{0};",borderSpacing:"border-spacing:{0};",borderStyle:"border-style:{0};",borderWidth:"border-width:{0};",fontStyle:"font-style:{0};",fontWeight:"font-weight:{0};",fontSize:"font-size:{0};",fontFamily:"font-family:{0};",textDecoration:"text-decoration:{0};",cursor:"cursor:{0};",letterSpacing:"letter-spacing:{0};",gutterIconPath:"background:{0} center center no-repeat;",gutterIconSize:"background-size:{0};",contentText:"content:'{0}';",contentIconPath:"content:{0};",margin:"margin:{0};",padding:"padding:{0};",width:"width:{0};",height:"height:{0};"};class r{constructor(t,l,h){this._theme=h.getColorTheme(),this._ruleType=t,this._providerArgs=l,this._usesThemeColors=!1,this._hasContent=!1,this._hasLetterSpacing=!1;let m=i.getClassName(this._providerArgs.key,t);this._providerArgs.parentTypeKey&&(m=m+" "+i.getClassName(this._providerArgs.parentTypeKey,t)),this._className=m,this._unThemedSelector=i.getSelector(this._providerArgs.key,this._providerArgs.parentTypeKey,t),this._buildCSS(),this._usesThemeColors?this._themeListener=h.onDidColorThemeChange(_=>{this._theme=h.getColorTheme(),this._removeCSS(),this._buildCSS()}):this._themeListener=null}dispose(){this._hasContent&&(this._removeCSS(),this._hasContent=!1),this._themeListener&&(this._themeListener.dispose(),this._themeListener=null)}get hasContent(){return this._hasContent}get hasLetterSpacing(){return this._hasLetterSpacing}get className(){return this._className}_buildCSS(){const t=this._providerArgs.options;let l,h,m;switch(this._ruleType){case 0:l=this.getCSSTextForModelDecorationClassName(t),h=this.getCSSTextForModelDecorationClassName(t.light),m=this.getCSSTextForModelDecorationClassName(t.dark);break;case 1:l=this.getCSSTextForModelDecorationInlineClassName(t),h=this.getCSSTextForModelDecorationInlineClassName(t.light),m=this.getCSSTextForModelDecorationInlineClassName(t.dark);break;case 2:l=this.getCSSTextForModelDecorationGlyphMarginClassName(t),h=this.getCSSTextForModelDecorationGlyphMarginClassName(t.light),m=this.getCSSTextForModelDecorationGlyphMarginClassName(t.dark);break;case 3:l=this.getCSSTextForModelDecorationContentClassName(t.before),h=this.getCSSTextForModelDecorationContentClassName(t.light&&t.light.before),m=this.getCSSTextForModelDecorationContentClassName(t.dark&&t.dark.before);break;case 4:l=this.getCSSTextForModelDecorationContentClassName(t.after),h=this.getCSSTextForModelDecorationContentClassName(t.light&&t.light.after),m=this.getCSSTextForModelDecorationContentClassName(t.dark&&t.dark.after);break;default:throw new Error("Unknown rule type: "+this._ruleType)}const _=this._providerArgs.styleSheet;let f=!1;l.length>0&&(_.insertRule(`${this._unThemedSelector} {${l}}`,0),f=!0),h.length>0&&(_.insertRule(`.vs${this._unThemedSelector} {${h}}`,0),f=!0),m.length>0&&(_.insertRule(`.vs-dark${this._unThemedSelector}, .hc-black${this._unThemedSelector} {${m}}`,0),f=!0),this._hasContent=f}_removeCSS(){this._providerArgs.styleSheet.removeRulesContainingSelector(this._unThemedSelector)}getCSSTextForModelDecorationClassName(t){if(!t)return"";const l=[];return this.collectCSSText(t,["backgroundColor"],l),this.collectCSSText(t,["outline","outlineColor","outlineStyle","outlineWidth"],l),this.collectBorderSettingsCSSText(t,l),l.join("")}getCSSTextForModelDecorationInlineClassName(t){if(!t)return"";const l=[];return this.collectCSSText(t,["fontStyle","fontWeight","textDecoration","cursor","color","opacity","letterSpacing"],l),t.letterSpacing&&(this._hasLetterSpacing=!0),l.join("")}getCSSTextForModelDecorationContentClassName(t){if(!t)return"";const l=[];if(typeof t!="undefined"){if(this.collectBorderSettingsCSSText(t,l),typeof t.contentIconPath!="undefined"&&l.push(M.format(u.contentIconPath,b.asCSSUrl(w.URI.revive(t.contentIconPath)))),typeof t.contentText=="string"){const m=t.contentText.match(/^.*$/m)[0].replace(/['\\]/g,"\\$&");l.push(M.format(u.contentText,m))}this.collectCSSText(t,["fontStyle","fontWeight","fontSize","fontFamily","textDecoration","color","opacity","backgroundColor","margin","padding"],l),this.collectCSSText(t,["width","height"],l)&&l.push("display:inline-block;")}return l.join("")}getCSSTextForModelDecorationGlyphMarginClassName(t){if(!t)return"";const l=[];return typeof t.gutterIconPath!="undefined"&&(l.push(M.format(u.gutterIconPath,b.asCSSUrl(w.URI.revive(t.gutterIconPath)))),typeof t.gutterIconSize!="undefined"&&l.push(M.format(u.gutterIconSize,t.gutterIconSize))),l.join("")}collectBorderSettingsCSSText(t,l){return this.collectCSSText(t,["border","borderColor","borderRadius","borderSpacing","borderStyle","borderWidth"],l)?(l.push(M.format("box-sizing: border-box;")),!0):!1}collectCSSText(t,l,h){const m=h.length;for(let _ of l){const f=this.resolveValue(t[_]);typeof f=="string"&&h.push(M.format(u[_],f))}return h.length!==m}resolveValue(t){if(C.isThemeColor(t)){this._usesThemeColors=!0;const l=this._theme.getColor(t.id);return l?l.toString():"transparent"}return t}}class i{static getClassName(t,l){return"ced-"+t+"-"+l}static getSelector(t,l,h){let m=".monaco-editor ."+this.getClassName(t,h);return l&&(m=m+"."+this.getClassName(l,h)),h===3?m+="::before":h===4&&(m+="::after"),m}}}),define(Q[584],J([0,1,7,30,61,45,11]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.EditorScrollbar=void 0;class C extends w.ViewPart{constructor(g,p,c,o){super(g);const s=this._context.configuration.options,a=s.get(87),u=s.get(61),r=s.get(30),i=s.get(90),n={listenOnDomNode:c.domNode,className:"editor-scrollable "+S.getThemeTypeSelector(g.theme.type),useShadows:!1,lazyRender:!0,vertical:a.vertical,horizontal:a.horizontal,verticalHasArrows:a.verticalHasArrows,horizontalHasArrows:a.horizontalHasArrows,verticalScrollbarSize:a.verticalScrollbarSize,verticalSliderSize:a.verticalSliderSize,horizontalScrollbarSize:a.horizontalScrollbarSize,horizontalSliderSize:a.horizontalSliderSize,handleMouseWheel:a.handleMouseWheel,alwaysConsumeMouseWheel:a.alwaysConsumeMouseWheel,arrowSize:a.arrowSize,mouseWheelScrollSensitivity:u,fastScrollSensitivity:r,scrollPredominantAxis:i,scrollByPage:a.scrollByPage};this.scrollbar=this._register(new M.SmoothScrollableElement(p.domNode,n,this._context.viewLayout.getScrollable())),w.PartFingerprints.write(this.scrollbar.getDomNode(),5),this.scrollbarDomNode=N.createFastDomNode(this.scrollbar.getDomNode()),this.scrollbarDomNode.setPosition("absolute"),this._setLayout();const t=(l,h,m)=>{const _={};if(h){const f=l.scrollTop;f&&(_.scrollTop=this._context.viewLayout.getCurrentScrollTop()+f,l.scrollTop=0)}if(m){const f=l.scrollLeft;f&&(_.scrollLeft=this._context.viewLayout.getCurrentScrollLeft()+f,l.scrollLeft=0)}this._context.model.setScrollPosition(_,1)};this._register(b.addDisposableListener(c.domNode,"scroll",l=>t(c.domNode,!0,!0))),this._register(b.addDisposableListener(p.domNode,"scroll",l=>t(p.domNode,!0,!1))),this._register(b.addDisposableListener(o.domNode,"scroll",l=>t(o.domNode,!0,!1))),this._register(b.addDisposableListener(this.scrollbarDomNode.domNode,"scroll",l=>t(this.scrollbarDomNode.domNode,!0,!1)))}dispose(){super.dispose()}_setLayout(){const g=this._context.configuration.options,p=g.get(124);this.scrollbarDomNode.setLeft(p.contentLeft),g.get(59).side==="right"?this.scrollbarDomNode.setWidth(p.contentWidth+p.minimap.minimapWidth):this.scrollbarDomNode.setWidth(p.contentWidth),this.scrollbarDomNode.setHeight(p.height)}getOverviewRulerLayoutInfo(){return this.scrollbar.getOverviewRulerLayoutInfo()}getDomNode(){return this.scrollbarDomNode}delegateVerticalScrollbarMouseDown(g){this.scrollbar.delegateVerticalScrollbarMouseDown(g)}onConfigurationChanged(g){if(g.hasChanged(87)||g.hasChanged(61)||g.hasChanged(30)){const p=this._context.configuration.options,c=p.get(87),o=p.get(61),s=p.get(30),a=p.get(90),u={handleMouseWheel:c.handleMouseWheel,mouseWheelScrollSensitivity:o,fastScrollSensitivity:s,scrollPredominantAxis:a};this.scrollbar.updateOptions(u)}return g.hasChanged(124)&&this._setLayout(),!0}onScrollChanged(g){return!0}onThemeChanged(g){return this.scrollbar.updateClassName("editor-scrollable "+S.getThemeTypeSelector(this._context.theme.type)),!0}prepareRender(g){}render(g){this.scrollbar.renderNow()}}e.EditorScrollbar=C}),define(Q[585],J([0,1,7,30,90,2,17,8,165,45,38,3,216,244,63,22,11,21,60,365,53,88,326]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l,h){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Minimap=void 0;const m=140,_=2;class f{constructor(A,B,F){const D=A.options,R=D.get(122),W=D.get(124),x=W.minimap,K=D.get(38),Y=D.get(59);this.renderMinimap=x.renderMinimap,this.size=Y.size,this.minimapHeightIsEditorHeight=x.minimapHeightIsEditorHeight,this.scrollBeyondLastLine=D.get(89),this.showSlider=Y.showSlider,this.pixelRatio=R,this.typicalHalfwidthCharacterWidth=K.typicalHalfwidthCharacterWidth,this.lineHeight=D.get(53),this.minimapLeft=x.minimapLeft,this.minimapWidth=x.minimapWidth,this.minimapHeight=W.height,this.canvasInnerWidth=x.minimapCanvasInnerWidth,this.canvasInnerHeight=x.minimapCanvasInnerHeight,this.canvasOuterWidth=x.minimapCanvasOuterWidth,this.canvasOuterHeight=x.minimapCanvasOuterHeight,this.isSampling=x.minimapIsSampling,this.editorHeight=W.height,this.fontScale=x.minimapScale,this.minimapLineHeight=x.minimapLineHeight,this.minimapCharWidth=1*this.fontScale,this.charRenderer=h.once(()=>t.MinimapCharRendererFactory.create(this.fontScale,K.fontFamily)),this.backgroundColor=f._getMinimapBackground(B,F)}static _getMinimapBackground(A,B){const F=A.getColor(u.minimapBackground);return F?new o.RGBA8(F.rgba.r,F.rgba.g,F.rgba.b,F.rgba.a):B.getColor(2)}equals(A){return this.renderMinimap===A.renderMinimap&&this.size===A.size&&this.minimapHeightIsEditorHeight===A.minimapHeightIsEditorHeight&&this.scrollBeyondLastLine===A.scrollBeyondLastLine&&this.showSlider===A.showSlider&&this.pixelRatio===A.pixelRatio&&this.typicalHalfwidthCharacterWidth===A.typicalHalfwidthCharacterWidth&&this.lineHeight===A.lineHeight&&this.minimapLeft===A.minimapLeft&&this.minimapWidth===A.minimapWidth&&this.minimapHeight===A.minimapHeight&&this.canvasInnerWidth===A.canvasInnerWidth&&this.canvasInnerHeight===A.canvasInnerHeight&&this.canvasOuterWidth===A.canvasOuterWidth&&this.canvasOuterHeight===A.canvasOuterHeight&&this.isSampling===A.isSampling&&this.editorHeight===A.editorHeight&&this.fontScale===A.fontScale&&this.minimapLineHeight===A.minimapLineHeight&&this.minimapCharWidth===A.minimapCharWidth&&this.backgroundColor&&this.backgroundColor.equals(A.backgroundColor)}}class v{constructor(A,B,F,D,R,W,x,K){this.scrollTop=A,this.scrollHeight=B,this.sliderNeeded=F,this._computedSliderRatio=D,this.sliderTop=R,this.sliderHeight=W,this.startLineNumber=x,this.endLineNumber=K}getDesiredScrollTopFromDelta(A){return Math.round(this.scrollTop+A/this._computedSliderRatio)}getDesiredScrollTopFromTouchLocation(A){return Math.round((A-this.sliderHeight/2)/this._computedSliderRatio)}static create(A,B,F,D,R,W,x,K,Y,ee,se){const ne=A.pixelRatio,le=A.minimapLineHeight,X=Math.floor(A.canvasInnerHeight/le),z=A.lineHeight;if(A.minimapHeightIsEditorHeight){const ie=K*A.lineHeight+(A.scrollBeyondLastLine?R-A.lineHeight:0),oe=Math.max(1,Math.floor(R*R/ie)),ae=Math.max(0,A.minimapHeight-oe),G=ae/(ee-R),j=Y*G,te=ae>0,Z=Math.floor(A.canvasInnerHeight/A.minimapLineHeight);return new v(Y,ee,te,G,j,oe,1,Math.min(x,Z))}let P;if(W&&F!==x){const ie=F-B+1;P=Math.floor(ie*le/ne)}else{const ie=R/z;P=Math.floor(ie*le/ne)}let V;A.scrollBeyondLastLine?V=(x-1)*le/ne:V=Math.max(0,x*le/ne-P),V=Math.min(A.minimapHeight-P,V);const U=V/(ee-R),H=Y*U;let $=0;if(A.scrollBeyondLastLine&&($=R/z-1),X>=x+$){const ie=1,oe=x,ae=V>0;return new v(Y,ee,ae,U,H,P,ie,oe)}else{let ie=Math.max(1,Math.floor(B-H*ne/le));se&&se.scrollHeight===ee&&(se.scrollTop>Y&&(ie=Math.min(ie,se.startLineNumber)),se.scrollTopy.INVALID),this._renderedLines._set(A.startLineNumber,F)}linesEquals(A){if(!this.scrollEquals(A))return!1;const F=this._renderedLines._get().lines;for(let D=0,R=F.length;D1){for(let $=0,ie=x-1;$0&&this.minimapLines[F-1]>=A;)F--;let D=this.modelLineToMinimapLine(B)-1;for(;D+1B)return null}return[F+1,D+1]}decorationLineRangeToMinimapLineRange(A,B){let F=this.modelLineToMinimapLine(A),D=this.modelLineToMinimapLine(B);return A!==B&&D===F&&(D===this.minimapLines.length?F>1&&F--:D++),[F,D]}onLinesDeleted(A){const B=A.toLineNumber-A.fromLineNumber+1;let F=this.minimapLines.length,D=0;for(let R=this.minimapLines.length-1;R>=0&&!(this.minimapLines[R]=0&&!(this.minimapLines[F]0,scrollWidth:A.scrollWidth,scrollHeight:A.scrollHeight,viewportStartLineNumber:B,viewportEndLineNumber:F,viewportStartLineNumberVerticalOffset:A.getVerticalOffsetForLineNumber(B),scrollTop:A.scrollTop,scrollLeft:A.scrollLeft,viewportWidth:A.viewportWidth,viewportHeight:A.viewportHeight};this._actual.render(D)}_recreateLineSampling(){this._minimapSelections=null;const A=Boolean(this._samplingState),[B,F]=k.compute(this.options,this._context.model.getLineCount(),this._samplingState);if(this._samplingState=B,A&&this._samplingState)for(const D of F)switch(D.type){case"deleted":this._actual.onLinesDeleted(D.deleteFromLineNumber,D.deleteToLineNumber);break;case"inserted":this._actual.onLinesInserted(D.insertFromLineNumber,D.insertToLineNumber);break;case"flush":this._actual.onFlushed();break}}getLineCount(){return this._samplingState?this._samplingState.minimapLines.length:this._context.model.getLineCount()}getRealLineCount(){return this._context.model.getLineCount()}getLineContent(A){return this._samplingState?this._context.model.getLineContent(this._samplingState.minimapLines[A-1]):this._context.model.getLineContent(A)}getMinimapLinesRenderingData(A,B,F){if(this._samplingState){let D=[];for(let R=0,W=B-A+1;R{if(F.preventDefault(),this._model.options.renderMinimap!==0&&!!this._lastRenderData){if(this._model.options.size!=="proportional"){if(F.leftButton&&this._lastRenderData){const Y=b.getDomNodePagePosition(this._slider.domNode),ee=Y.top+Y.height/2;this._startSliderDragging(F.buttons,F.posx,ee,F.posy,this._lastRenderData.renderedLayout)}return}const R=this._model.options.minimapLineHeight,W=this._model.options.canvasInnerHeight/this._model.options.canvasOuterHeight*F.browserEvent.offsetY;let K=Math.floor(W/R)+this._lastRenderData.renderedLayout.startLineNumber;K=Math.min(K,this._model.getLineCount()),this._model.revealLineNumber(K)}}),this._sliderMouseMoveMonitor=new M.GlobalMouseMoveMonitor,this._sliderMouseDownListener=b.addStandardDisposableListener(this._slider.domNode,"mousedown",F=>{F.preventDefault(),F.stopPropagation(),F.leftButton&&this._lastRenderData&&this._startSliderDragging(F.buttons,F.posx,F.posy,F.posy,this._lastRenderData.renderedLayout)}),this._gestureDisposable=n.Gesture.addTarget(this._domNode.domNode),this._sliderTouchStartListener=b.addDisposableListener(this._domNode.domNode,n.EventType.Start,F=>{F.preventDefault(),F.stopPropagation(),this._lastRenderData&&(this._slider.toggleClassName("active",!0),this._gestureInProgress=!0,this.scrollDueToTouchEvent(F))},{passive:!1}),this._sliderTouchMoveListener=b.addDisposableListener(this._domNode.domNode,n.EventType.Change,F=>{F.preventDefault(),F.stopPropagation(),this._lastRenderData&&this._gestureInProgress&&this.scrollDueToTouchEvent(F)},{passive:!1}),this._sliderTouchEndListener=b.addStandardDisposableListener(this._domNode.domNode,n.EventType.End,F=>{F.preventDefault(),F.stopPropagation(),this._gestureInProgress=!1,this._slider.toggleClassName("active",!1)})}_startSliderDragging(A,B,F,D,R){this._slider.toggleClassName("active",!0);const W=(x,K)=>{const Y=Math.abs(K-B);if(S.isWindows&&Y>m){this._model.setScrollTop(R.scrollTop);return}const ee=x-F;this._model.setScrollTop(R.getDesiredScrollTopFromDelta(ee))};D!==F&&W(D,B),this._sliderMouseMoveMonitor.startMonitoring(this._slider.domNode,A,M.standardMouseMoveMerger,x=>W(x.posy,x.posx),()=>{this._slider.toggleClassName("active",!1)})}scrollDueToTouchEvent(A){const B=this._domNode.domNode.getBoundingClientRect().top,F=this._lastRenderData.renderedLayout.getDesiredScrollTopFromTouchLocation(A.pageY-B);this._model.setScrollTop(F)}dispose(){this._mouseDownListener.dispose(),this._sliderMouseMoveMonitor.dispose(),this._sliderMouseDownListener.dispose(),this._gestureDisposable.dispose(),this._sliderTouchStartListener.dispose(),this._sliderTouchMoveListener.dispose(),this._sliderTouchEndListener.dispose(),super.dispose()}_getMinimapDomNodeClassName(){return this._model.options.showSlider==="always"?"minimap slider-always":"minimap slider-mouseover"}getDomNode(){return this._domNode}_applyLayout(){this._domNode.setLeft(this._model.options.minimapLeft),this._domNode.setWidth(this._model.options.minimapWidth),this._domNode.setHeight(this._model.options.minimapHeight),this._shadow.setHeight(this._model.options.minimapHeight),this._canvas.setWidth(this._model.options.canvasOuterWidth),this._canvas.setHeight(this._model.options.canvasOuterHeight),this._canvas.domNode.width=this._model.options.canvasInnerWidth,this._canvas.domNode.height=this._model.options.canvasInnerHeight,this._decorationsCanvas.setWidth(this._model.options.canvasOuterWidth),this._decorationsCanvas.setHeight(this._model.options.canvasOuterHeight),this._decorationsCanvas.domNode.width=this._model.options.canvasInnerWidth,this._decorationsCanvas.domNode.height=this._model.options.canvasInnerHeight,this._slider.setWidth(this._model.options.minimapWidth)}_getBuffer(){return this._buffers||this._model.options.canvasInnerWidth>0&&this._model.options.canvasInnerHeight>0&&(this._buffers=new I(this._canvas.domNode.getContext("2d"),this._model.options.canvasInnerWidth,this._model.options.canvasInnerHeight,this._model.options.backgroundColor)),this._buffers?this._buffers.getBuffer():null}onDidChangeOptions(){this._lastRenderData=null,this._buffers=null,this._applyLayout(),this._domNode.setClassName(this._getMinimapDomNodeClassName())}onSelectionChanged(){return this._renderDecorations=!0,!0}onDecorationsChanged(){return this._renderDecorations=!0,!0}onFlushed(){return this._lastRenderData=null,!0}onLinesChanged(A,B){return this._lastRenderData?this._lastRenderData.onLinesChanged(A,B):!1}onLinesDeleted(A,B){return this._lastRenderData&&this._lastRenderData.onLinesDeleted(A,B),!0}onLinesInserted(A,B){return this._lastRenderData&&this._lastRenderData.onLinesInserted(A,B),!0}onScrollChanged(){return this._renderDecorations=!0,!0}onThemeChanged(){return this._selectionColor=this._theme.getColor(u.minimapSelection),this._renderDecorations=!0,!0}onTokensChanged(A){return this._lastRenderData?this._lastRenderData.onTokensChanged(A):!1}onTokensColorsChanged(){return this._lastRenderData=null,this._buffers=null,!0}onZonesChanged(){return this._lastRenderData=null,!0}render(A){if(this._model.options.renderMinimap===0){this._shadow.setClassName("minimap-shadow-hidden"),this._sliderHorizontal.setWidth(0),this._sliderHorizontal.setHeight(0);return}A.scrollLeft+A.viewportWidth>=A.scrollWidth?this._shadow.setClassName("minimap-shadow-hidden"):this._shadow.setClassName("minimap-shadow-visible");const F=v.create(this._model.options,A.viewportStartLineNumber,A.viewportEndLineNumber,A.viewportStartLineNumberVerticalOffset,A.viewportHeight,A.viewportContainsWhitespaceGaps,this._model.getLineCount(),this._model.getRealLineCount(),A.scrollTop,A.scrollHeight,this._lastRenderData?this._lastRenderData.renderedLayout:null);this._slider.setDisplay(F.sliderNeeded?"block":"none"),this._slider.setTop(F.sliderTop),this._slider.setHeight(F.sliderHeight);const D=A.scrollLeft/this._model.options.typicalHalfwidthCharacterWidth,R=Math.min(this._model.options.minimapWidth,Math.round(D*this._model.options.minimapCharWidth/this._model.options.pixelRatio));this._sliderHorizontal.setLeft(R),this._sliderHorizontal.setWidth(this._model.options.minimapWidth-R),this._sliderHorizontal.setTop(0),this._sliderHorizontal.setHeight(F.sliderHeight),this.renderDecorations(F),this._lastRenderData=this.renderLines(F)}renderDecorations(A){if(this._renderDecorations){this._renderDecorations=!1;const B=this._model.getSelections(),F=this._model.getMinimapDecorationsInViewport(A.startLineNumber,A.endLineNumber),{canvasInnerWidth:D,canvasInnerHeight:R}=this._model.options,W=this._model.options.minimapLineHeight,x=this._model.options.minimapCharWidth,K=this._model.getOptions().tabSize,Y=this._decorationsCanvas.domNode.getContext("2d");Y.clearRect(0,0,D,R);const ee=new Map;for(let se=0;sethis._model.options.canvasInnerHeight)){let ne=B.get(W);const le=!ne;if(!ne){const $=this._model.getLineContent(W);ne=[p.MINIMAP_GUTTER_WIDTH];for(let ie=1;ie<$.length+1;ie++){const oe=$.charCodeAt(ie-1),ae=oe===9?Y*ee:C.isFullWidthCharacter(oe)?2*ee:ee;ne[ie]=ne[ie-1]+ae}B.set(W,ne)}const{startColumn:X,endColumn:z,startLineNumber:P,endLineNumber:V}=F,U=P===W?ne[X-1]:p.MINIMAP_GUTTER_WIDTH,H=V>W?ne.length-1:z-1;if(H>0){const $=ne[H]-U||2;this.renderDecoration(A,D,U,se,$,x)}le&&this.renderLineHighlight(A,D,se,x)}}renderLineHighlight(A,B,F,D){A.fillStyle=B&&B.transparent(.5).toString()||"",A.fillRect(p.MINIMAP_GUTTER_WIDTH,F,A.canvas.width,D)}renderDecoration(A,B,F,D,R,W){A.fillStyle=B&&B.toString()||"",A.fillRect(F,D,R,W)}renderLines(A){const B=A.startLineNumber,F=A.endLineNumber,D=this._model.options.minimapLineHeight;if(this._lastRenderData&&this._lastRenderData.linesEquals(A)){const Z=this._lastRenderData._get();return new L(A,Z.imageData,Z.lines)}const R=this._getBuffer();if(!R)return null;let[W,x,K]=T._renderUntouchedLines(R,B,F,D,this._lastRenderData);const Y=this._model.getMinimapLinesRenderingData(B,F,K),ee=this._model.getOptions().tabSize,se=this._model.options.backgroundColor,ne=this._model.tokensColorTracker,le=ne.backgroundIsLight(),X=this._model.options.renderMinimap,z=this._model.options.charRenderer(),P=this._model.options.fontScale,V=this._model.options.minimapCharWidth,H=(X===1?2:2+1)*P,$=D>H?Math.floor((D-H)/2):0;let ie=0;const oe=[];for(let Z=0,ue=F-B+1;Z=0&&teP)return;const te=X.charCodeAt(H);if(te===9){const Z=ee-(H+$)%ee;$+=Z-1,U+=Z*R}else if(te===32)U+=R;else{const Z=C.isFullWidthCharacter(te)?2:1;for(let ue=0;ueP)return}}}}}r.registerThemingParticipant((O,A)=>{const B=O.getColor(u.minimapBackground);B&&A.addRule(`.monaco-editor .minimap > canvas { opacity: ${B.rgba.a}; will-change: opacity; }`);const F=O.getColor(u.minimapSliderBackground);F&&A.addRule(`.monaco-editor .minimap-slider .minimap-slider-horizontal { background: ${F}; }`);const D=O.getColor(u.minimapSliderHoverBackground);D&&A.addRule(`.monaco-editor .minimap-slider:hover .minimap-slider-horizontal { background: ${D}; }`);const R=O.getColor(u.minimapSliderActiveBackground);R&&A.addRule(`.monaco-editor .minimap-slider.active .minimap-slider-horizontal { background: ${R}; }`);const W=O.getColor(u.scrollbarShadow);W&&A.addRule(`.monaco-editor .minimap-shadow-visible { box-shadow: ${W} -6px 0 6px -6px inset; }`)})}),define(Q[586],J([0,1,30,45,22,11,329]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ScrollDecorationViewPart=void 0;class S extends N.ViewPart{constructor(d){super(d);this._scrollTop=0,this._width=0,this._updateWidth(),this._shouldShow=!1;const p=this._context.configuration.options.get(87);this._useShadows=p.useShadows,this._domNode=b.createFastDomNode(document.createElement("div")),this._domNode.setAttribute("role","presentation"),this._domNode.setAttribute("aria-hidden","true")}dispose(){super.dispose()}_updateShouldShow(){const d=this._useShadows&&this._scrollTop>0;return this._shouldShow!==d?(this._shouldShow=d,!0):!1}getDomNode(){return this._domNode}_updateWidth(){const g=this._context.configuration.options.get(124);g.minimap.renderMinimap===0||g.minimap.minimapWidth>0&&g.minimap.minimapLeft===0?this._width=g.width:this._width=g.width-g.minimap.minimapWidth-g.verticalScrollbarWidth}onConfigurationChanged(d){const p=this._context.configuration.options.get(87);return this._useShadows=p.useShadows,this._updateWidth(),this._updateShouldShow(),!0}onScrollChanged(d){return this._scrollTop=d.scrollTop,this._updateShouldShow()}prepareRender(d){}render(d){this._domNode.setWidth(this._width),this._domNode.setClassName(this._shouldShow?"scroll-decoration":"")}}e.ScrollDecorationViewPart=S,w.registerThemingParticipant((C,d)=>{const g=C.getColor(M.scrollbarShadow);g&&d.addRule(`.monaco-editor .scroll-decoration { box-shadow: ${g} 0 6px 6px -6px inset; }`)})}),define(Q[587],J([0,1,94,22,11,330]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SelectionsOverlay=void 0;class w{constructor(o){this.left=o.left,this.width=o.width,this.startStyle=null,this.endStyle=null}}class S{constructor(o,s){this.lineNumber=o,this.ranges=s}}function C(c){return new w(c)}function d(c){return new S(c.lineNumber,c.ranges.map(C))}class g extends b.DynamicViewOverlay{constructor(o){super();this._previousFrameVisibleRangesWithStyle=[],this._context=o;const s=this._context.configuration.options;this._lineHeight=s.get(53),this._roundedSelection=s.get(85),this._typicalHalfwidthCharacterWidth=s.get(38).typicalHalfwidthCharacterWidth,this._selections=[],this._renderResult=null,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),this._renderResult=null,super.dispose()}onConfigurationChanged(o){const s=this._context.configuration.options;return this._lineHeight=s.get(53),this._roundedSelection=s.get(85),this._typicalHalfwidthCharacterWidth=s.get(38).typicalHalfwidthCharacterWidth,!0}onCursorStateChanged(o){return this._selections=o.selections.slice(0),!0}onDecorationsChanged(o){return!0}onFlushed(o){return!0}onLinesChanged(o){return!0}onLinesDeleted(o){return!0}onLinesInserted(o){return!0}onScrollChanged(o){return o.scrollTopChanged}onZonesChanged(o){return!0}_visibleRangesHaveGaps(o){for(let s=0,a=o.length;s1)return!0;return!1}_enrichVisibleRangesWithStyle(o,s,a){const u=this._typicalHalfwidthCharacterWidth/4;let r=null,i=null;if(a&&a.length>0&&s.length>0){const n=s[0].lineNumber;if(n===o.startLineNumber)for(let l=0;!r&&l=0;l--)a[l].lineNumber===t&&(i=a[l].ranges[0]);r&&!r.startStyle&&(r=null),i&&!i.startStyle&&(i=null)}for(let n=0,t=s.length;n0){const v=s[n-1].ranges[0].left,y=s[n-1].ranges[0].left+s[n-1].ranges[0].width;p(h-v)v&&(_.top=1),p(m-y)'}_actualRenderOneSelection(o,s,a,u){if(u.length!==0){const r=!!u[0].ranges[0].startStyle,i=this._lineHeight.toString(),n=(this._lineHeight-1).toString(),t=u[0].lineNumber,l=u[u.length-1].lineNumber;for(let h=0,m=u.length;h1,l)}this._previousFrameVisibleRangesWithStyle=r,this._renderResult=s.map(([i,n])=>i+n)}render(o,s){if(!this._renderResult)return"";const a=s-o;return a<0||a>=this._renderResult.length?"":this._renderResult[a]}}e.SelectionsOverlay=g,g.SELECTION_CLASS_NAME="selected-text",g.SELECTION_TOP_LEFT="top-left-radius",g.SELECTION_BOTTOM_LEFT="bottom-left-radius",g.SELECTION_TOP_RIGHT="top-right-radius",g.SELECTION_BOTTOM_RIGHT="bottom-right-radius",g.EDITOR_BACKGROUND_CLASS_NAME="monaco-editor-background",g.ROUNDED_PIECE_WIDTH=10,M.registerThemingParticipant((c,o)=>{const s=c.getColor(N.editorSelectionBackground);s&&o.addRule(`.monaco-editor .focused .selected-text { background-color: ${s}; }`);const a=c.getColor(N.editorInactiveSelection);a&&o.addRule(`.monaco-editor .selected-text { background-color: ${a}; }`);const u=c.getColor(N.editorSelectionForeground);u&&!u.isTransparent()&&o.addRule(`.monaco-editor .view-line span.inline-selected-text { color: ${u}; }`)});function p(c){return c<0?-c:c}}),define(Q[49],J([0,1,460,29,22,11]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.overviewRulerInfo=e.overviewRulerWarning=e.overviewRulerError=e.overviewRulerRangeHighlight=e.editorUnnecessaryCodeOpacity=e.editorUnnecessaryCodeBorder=e.editorGutter=e.editorOverviewRulerBackground=e.editorOverviewRulerBorder=e.editorBracketMatchBorder=e.editorBracketMatchBackground=e.editorCodeLensForeground=e.editorRuler=e.editorActiveLineNumber=e.editorLineNumbers=e.editorActiveIndentGuides=e.editorIndentGuides=e.editorWhitespaces=e.editorCursorBackground=e.editorCursorForeground=e.editorSymbolHighlightBorder=e.editorSymbolHighlight=e.editorRangeHighlightBorder=e.editorRangeHighlight=e.editorLineHighlightBorder=e.editorLineHighlight=void 0,e.editorLineHighlight=M.registerColor("editor.lineHighlightBackground",{dark:null,light:null,hc:null},b.localize(0,null)),e.editorLineHighlightBorder=M.registerColor("editor.lineHighlightBorder",{dark:"#282828",light:"#eeeeee",hc:"#f38518"},b.localize(1,null)),e.editorRangeHighlight=M.registerColor("editor.rangeHighlightBackground",{dark:"#ffffff0b",light:"#fdff0033",hc:null},b.localize(2,null),!0),e.editorRangeHighlightBorder=M.registerColor("editor.rangeHighlightBorder",{dark:null,light:null,hc:M.activeContrastBorder},b.localize(3,null),!0),e.editorSymbolHighlight=M.registerColor("editor.symbolHighlightBackground",{dark:M.editorFindMatchHighlight,light:M.editorFindMatchHighlight,hc:null},b.localize(4,null),!0),e.editorSymbolHighlightBorder=M.registerColor("editor.symbolHighlightBorder",{dark:null,light:null,hc:M.activeContrastBorder},b.localize(5,null),!0),e.editorCursorForeground=M.registerColor("editorCursor.foreground",{dark:"#AEAFAD",light:N.Color.black,hc:N.Color.white},b.localize(6,null)),e.editorCursorBackground=M.registerColor("editorCursor.background",null,b.localize(7,null)),e.editorWhitespaces=M.registerColor("editorWhitespace.foreground",{dark:"#e3e4e229",light:"#33333333",hc:"#e3e4e229"},b.localize(8,null)),e.editorIndentGuides=M.registerColor("editorIndentGuide.background",{dark:e.editorWhitespaces,light:e.editorWhitespaces,hc:e.editorWhitespaces},b.localize(9,null)),e.editorActiveIndentGuides=M.registerColor("editorIndentGuide.activeBackground",{dark:e.editorWhitespaces,light:e.editorWhitespaces,hc:e.editorWhitespaces},b.localize(10,null)),e.editorLineNumbers=M.registerColor("editorLineNumber.foreground",{dark:"#858585",light:"#237893",hc:N.Color.white},b.localize(11,null));const S=M.registerColor("editorActiveLineNumber.foreground",{dark:"#c6c6c6",light:"#0B216F",hc:M.activeContrastBorder},b.localize(12,null),!1,b.localize(13,null));e.editorActiveLineNumber=M.registerColor("editorLineNumber.activeForeground",{dark:S,light:S,hc:S},b.localize(14,null)),e.editorRuler=M.registerColor("editorRuler.foreground",{dark:"#5A5A5A",light:N.Color.lightgrey,hc:N.Color.white},b.localize(15,null)),e.editorCodeLensForeground=M.registerColor("editorCodeLens.foreground",{dark:"#999999",light:"#999999",hc:"#999999"},b.localize(16,null)),e.editorBracketMatchBackground=M.registerColor("editorBracketMatch.background",{dark:"#0064001a",light:"#0064001a",hc:"#0064001a"},b.localize(17,null)),e.editorBracketMatchBorder=M.registerColor("editorBracketMatch.border",{dark:"#888",light:"#B9B9B9",hc:M.contrastBorder},b.localize(18,null)),e.editorOverviewRulerBorder=M.registerColor("editorOverviewRuler.border",{dark:"#7f7f7f4d",light:"#7f7f7f4d",hc:"#7f7f7f4d"},b.localize(19,null)),e.editorOverviewRulerBackground=M.registerColor("editorOverviewRuler.background",null,b.localize(20,null)),e.editorGutter=M.registerColor("editorGutter.background",{dark:M.editorBackground,light:M.editorBackground,hc:M.editorBackground},b.localize(21,null)),e.editorUnnecessaryCodeBorder=M.registerColor("editorUnnecessaryCode.border",{dark:null,light:null,hc:N.Color.fromHex("#fff").transparent(.8)},b.localize(22,null)),e.editorUnnecessaryCodeOpacity=M.registerColor("editorUnnecessaryCode.opacity",{dark:N.Color.fromHex("#000a"),light:N.Color.fromHex("#0007"),hc:null},b.localize(23,null));const C=new N.Color(new N.RGBA(0,122,204,.6));e.overviewRulerRangeHighlight=M.registerColor("editorOverviewRuler.rangeHighlightForeground",{dark:C,light:C,hc:C},b.localize(24,null),!0),e.overviewRulerError=M.registerColor("editorOverviewRuler.errorForeground",{dark:new N.Color(new N.RGBA(255,18,18,.7)),light:new N.Color(new N.RGBA(255,18,18,.7)),hc:new N.Color(new N.RGBA(255,50,50,1))},b.localize(25,null)),e.overviewRulerWarning=M.registerColor("editorOverviewRuler.warningForeground",{dark:M.editorWarningForeground,light:M.editorWarningForeground,hc:M.editorWarningBorder},b.localize(26,null)),e.overviewRulerInfo=M.registerColor("editorOverviewRuler.infoForeground",{dark:M.editorInfoForeground,light:M.editorInfoForeground,hc:M.editorInfoBorder},b.localize(27,null)),w.registerThemingParticipant((d,g)=>{const p=d.getColor(M.editorBackground);p&&g.addRule(`.monaco-editor, .monaco-editor-background, .monaco-editor .inputarea.ime-input { background-color: ${p}; }`);const c=d.getColor(M.editorForeground);c&&g.addRule(`.monaco-editor, .monaco-editor .inputarea.ime-input { color: ${c}; }`);const o=d.getColor(e.editorGutter);o&&g.addRule(`.monaco-editor .margin { background-color: ${o}; }`);const s=d.getColor(e.editorRangeHighlight);s&&g.addRule(`.monaco-editor .rangeHighlight { background-color: ${s}; }`);const a=d.getColor(e.editorRangeHighlightBorder);a&&g.addRule(`.monaco-editor .rangeHighlight { border: 1px ${d.type==="hc"?"dotted":"solid"} ${a}; }`);const u=d.getColor(e.editorSymbolHighlight);u&&g.addRule(`.monaco-editor .symbolHighlight { background-color: ${u}; }`);const r=d.getColor(e.editorSymbolHighlightBorder);r&&g.addRule(`.monaco-editor .symbolHighlight { border: 1px ${d.type==="hc"?"dotted":"solid"} ${r}; }`);const i=d.getColor(e.editorWhitespaces);i&&(g.addRule(`.monaco-editor .mtkw { color: ${i} !important; }`),g.addRule(`.monaco-editor .mtkz { color: ${i} !important; }`))})}),define(Q[588],J([0,1,94,49,19,11,21,318]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CurrentLineMarginHighlightOverlay=e.CurrentLineHighlightOverlay=e.AbstractLineHighlightOverlay=void 0;let C=!0;class d extends b.DynamicViewOverlay{constructor(o){super();this._context=o;const s=this._context.configuration.options,a=s.get(124);this._lineHeight=s.get(53),this._renderLineHighlight=s.get(80),this._renderLineHighlightOnlyWhenFocus=s.get(81),this._contentLeft=a.contentLeft,this._contentWidth=a.contentWidth,this._selectionIsEmpty=!0,this._focused=!1,this._cursorLineNumbers=[1],this._selections=[new S.Selection(1,1,1,1)],this._renderData=null,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),super.dispose()}_readFromSelections(){let o=!1;const s=C?this._selections.slice(0,1):this._selections,a=s.map(r=>r.positionLineNumber);a.sort((r,i)=>r-i),M.equals(this._cursorLineNumbers,a)||(this._cursorLineNumbers=a,o=!0);const u=s.every(r=>r.isEmpty());return this._selectionIsEmpty!==u&&(this._selectionIsEmpty=u,o=!0),o}onThemeChanged(o){return this._readFromSelections()}onConfigurationChanged(o){const s=this._context.configuration.options,a=s.get(124);return this._lineHeight=s.get(53),this._renderLineHighlight=s.get(80),this._renderLineHighlightOnlyWhenFocus=s.get(81),this._contentLeft=a.contentLeft,this._contentWidth=a.contentWidth,!0}onCursorStateChanged(o){return this._selections=o.selections,this._readFromSelections()}onFlushed(o){return!0}onLinesDeleted(o){return!0}onLinesInserted(o){return!0}onScrollChanged(o){return o.scrollWidthChanged||o.scrollTopChanged}onZonesChanged(o){return!0}onFocusChanged(o){return this._renderLineHighlightOnlyWhenFocus?(this._focused=o.isFocused,!0):!1}prepareRender(o){if(!this._shouldRenderThis()){this._renderData=null;return}const s=this._renderOne(o),a=o.visibleRange.startLineNumber,u=o.visibleRange.endLineNumber,r=this._cursorLineNumbers.length;let i=0;const n=[];for(let t=a;t<=u;t++){const l=t-a;for(;i=this._renderData.length?"":this._renderData[a]}}e.AbstractLineHighlightOverlay=d;class g extends d{_renderOne(o){return`
    `}_shouldRenderThis(){return(this._renderLineHighlight==="line"||this._renderLineHighlight==="all")&&this._selectionIsEmpty&&(!this._renderLineHighlightOnlyWhenFocus||this._focused)}_shouldRenderOther(){return(this._renderLineHighlight==="gutter"||this._renderLineHighlight==="all")&&(!this._renderLineHighlightOnlyWhenFocus||this._focused)}}e.CurrentLineHighlightOverlay=g;class p extends d{_renderOne(o){return`
    `}_shouldRenderMargin(){return(this._renderLineHighlight==="gutter"||this._renderLineHighlight==="all")&&(!this._renderLineHighlightOnlyWhenFocus||this._focused)}_shouldRenderThis(){return!0}_shouldRenderOther(){return(this._renderLineHighlight==="line"||this._renderLineHighlight==="all")&&this._selectionIsEmpty&&(!this._renderLineHighlightOnlyWhenFocus||this._focused)}}e.CurrentLineMarginHighlightOverlay=p,w.registerThemingParticipant((c,o)=>{C=!1;const s=c.getColor(N.editorLineHighlight);if(s&&(o.addRule(`.monaco-editor .view-overlays .current-line { background-color: ${s}; }`),o.addRule(`.monaco-editor .margin-view-overlays .current-line-margin { background-color: ${s}; border: none; }`)),!s||s.isTransparent()||c.defines(N.editorLineHighlightBorder)){const a=c.getColor(N.editorLineHighlightBorder);a&&(C=!0,o.addRule(`.monaco-editor .view-overlays .current-line { border: 2px solid ${a}; }`),o.addRule(`.monaco-editor .margin-view-overlays .current-line-margin { border: 2px solid ${a}; }`),c.type==="hc"&&(o.addRule(".monaco-editor .view-overlays .current-line { border-width: 1px; }"),o.addRule(".monaco-editor .margin-view-overlays .current-line-margin { border-width: 1px; }")))}})}),define(Q[589],J([0,1,94,14,49,11,321]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IndentGuidesOverlay=void 0;class S extends b.DynamicViewOverlay{constructor(d){super();this._context=d,this._primaryLineNumber=0;const g=this._context.configuration.options,p=g.get(125),c=g.get(38);this._lineHeight=g.get(53),this._spaceWidth=c.spaceWidth,this._enabled=g.get(78),this._activeIndentEnabled=g.get(47),this._maxIndentLeft=p.wrappingColumn===-1?-1:p.wrappingColumn*c.typicalHalfwidthCharacterWidth,this._renderResult=null,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),this._renderResult=null,super.dispose()}onConfigurationChanged(d){const g=this._context.configuration.options,p=g.get(125),c=g.get(38);return this._lineHeight=g.get(53),this._spaceWidth=c.spaceWidth,this._enabled=g.get(78),this._activeIndentEnabled=g.get(47),this._maxIndentLeft=p.wrappingColumn===-1?-1:p.wrappingColumn*c.typicalHalfwidthCharacterWidth,!0}onCursorStateChanged(d){const g=d.selections[0],p=g.isEmpty()?g.positionLineNumber:0;return this._primaryLineNumber!==p?(this._primaryLineNumber=p,!0):!1}onDecorationsChanged(d){return!0}onFlushed(d){return!0}onLinesChanged(d){return!0}onLinesDeleted(d){return!0}onLinesInserted(d){return!0}onScrollChanged(d){return d.scrollTopChanged}onZonesChanged(d){return!0}onLanguageConfigurationChanged(d){return!0}prepareRender(d){if(!this._enabled){this._renderResult=null;return}const g=d.visibleRange.startLineNumber,p=d.visibleRange.endLineNumber,{indentSize:c}=this._context.model.getTextModelOptions(),o=c*this._spaceWidth,s=d.scrollWidth,a=this._lineHeight,u=this._context.model.getLinesIndentGuides(g,p);let r=0,i=0,n=0;if(this._activeIndentEnabled&&this._primaryLineNumber){const l=this._context.model.getActiveIndentGuide(this._primaryLineNumber,g,p);r=l.startLineNumber,i=l.endLineNumber,n=l.indent}const t=[];for(let l=g;l<=p;l++){const h=r<=l&&l<=i,m=l-g,_=u[m];let f="";if(_>=1){const v=d.visibleRangeForPosition(new N.Position(l,1));let y=v?v.left:0;for(let L=1;L<=_&&(f+=`
    `,y+=o,!(y>s||this._maxIndentLeft>0&&y>this._maxIndentLeft));L++);}t[m]=f}this._renderResult=t}render(d,g){if(!this._renderResult)return"";const p=g-d;return p<0||p>=this._renderResult.length?"":this._renderResult[p]}}e.IndentGuidesOverlay=S,w.registerThemingParticipant((C,d)=>{const g=C.getColor(M.editorIndentGuides);g&&d.addRule(`.monaco-editor .lines-content .cigr { box-shadow: 1px 0 0 0 ${g} inset; }`);const p=C.getColor(M.editorActiveIndentGuides)||g;p&&d.addRule(`.monaco-editor .lines-content .cigra { box-shadow: 1px 0 0 0 ${p} inset; }`)})}),define(Q[257],J([0,1,17,94,14,49,11,322]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.LineNumbersOverlay=void 0;class C extends N.DynamicViewOverlay{constructor(g){super();this._context=g,this._readConfig(),this._lastCursorModelPosition=new M.Position(1,1),this._renderResult=null,this._activeLineNumber=1,this._context.addEventHandler(this)}_readConfig(){const g=this._context.configuration.options;this._lineHeight=g.get(53);const p=g.get(54);this._renderLineNumbers=p.renderType,this._renderCustomLineNumbers=p.renderFn,this._renderFinalNewline=g.get(79);const c=g.get(124);this._lineNumbersLeft=c.lineNumbersLeft,this._lineNumbersWidth=c.lineNumbersWidth}dispose(){this._context.removeEventHandler(this),this._renderResult=null,super.dispose()}onConfigurationChanged(g){return this._readConfig(),!0}onCursorStateChanged(g){const p=g.selections[0].getPosition();this._lastCursorModelPosition=this._context.model.coordinatesConverter.convertViewPositionToModelPosition(p);let c=!1;return this._activeLineNumber!==p.lineNumber&&(this._activeLineNumber=p.lineNumber,c=!0),(this._renderLineNumbers===2||this._renderLineNumbers===3)&&(c=!0),c}onFlushed(g){return!0}onLinesChanged(g){return!0}onLinesDeleted(g){return!0}onLinesInserted(g){return!0}onScrollChanged(g){return g.scrollTopChanged}onZonesChanged(g){return!0}_getLineRenderLineNumber(g){const p=this._context.model.coordinatesConverter.convertViewPositionToModelPosition(new M.Position(g,1));if(p.column!==1)return"";const c=p.lineNumber;if(this._renderCustomLineNumbers)return this._renderCustomLineNumbers(c);if(this._renderLineNumbers===2){const o=Math.abs(this._lastCursorModelPosition.lineNumber-c);return o===0?''+c+"":String(o)}return this._renderLineNumbers===3?this._lastCursorModelPosition.lineNumber===c||c%10==0?String(c):"":String(c)}prepareRender(g){if(this._renderLineNumbers===0){this._renderResult=null;return}const p=b.isLinux?this._lineHeight%2==0?" lh-even":" lh-odd":"",c=g.visibleRange.startLineNumber,o=g.visibleRange.endLineNumber,s='
    ',a=this._context.model.getLineCount(),u=[];for(let r=c;r<=o;r++){const i=r-c;if(!this._renderFinalNewline&&r===a&&this._context.model.getLineLength(r)===0){u[i]="";continue}const n=this._getLineRenderLineNumber(r);n?r===this._activeLineNumber?u[i]='
    '+n+"
    ":u[i]=s+n+"
    ":u[i]=""}this._renderResult=u}render(g,p){if(!this._renderResult)return"";const c=p-g;return c<0||c>=this._renderResult.length?"":this._renderResult[c]}}e.LineNumbersOverlay=C,C.CLASS_NAME="line-numbers",S.registerThemingParticipant((d,g)=>{const p=d.getColor(w.editorLineNumbers);p&&g.addRule(`.monaco-editor .line-numbers { color: ${p}; }`);const c=d.getColor(w.editorActiveLineNumber);c&&g.addRule(`.monaco-editor .line-numbers.active-line-number { color: ${c}; }`)})}),define(Q[590],J([0,1,445,35,30,17,8,69,164,214,45,257,223,38,106,14,3,21,124,317]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TextAreaHandler=void 0;class t{constructor(y,L,I){this.top=y,this.left=L,this.width=I}setWidth(y){return new t(this.top,this.left,y)}}const l=N.isFirefox;class h extends p.ViewPart{constructor(y,L,I){super(y);this._primaryCursorPosition=new u.Position(1,1),this._primaryCursorVisibleRange=null,this._viewController=L,this._viewHelper=I,this._scrollLeft=0,this._scrollTop=0;const k=this._context.configuration.options,E=k.get(124);this._setAccessibilityOptions(k),this._contentLeft=E.contentLeft,this._contentWidth=E.contentWidth,this._contentHeight=E.height,this._fontInfo=k.get(38),this._lineHeight=k.get(53),this._emptySelectionClipboard=k.get(28),this._copyWithSyntaxHighlighting=k.get(18),this._visibleTextArea=null,this._selections=[new i.Selection(1,1,1,1)],this._modelSelections=[new i.Selection(1,1,1,1)],this._lastRenderPosition=null,this.textArea=M.createFastDomNode(document.createElement("textarea")),p.PartFingerprints.write(this.textArea,6),this.textArea.setClassName(`inputarea ${n.MOUSE_CURSOR_TEXT_CSS_CLASS_NAME}`),this.textArea.setAttribute("wrap","off"),this.textArea.setAttribute("autocorrect","off"),this.textArea.setAttribute("autocapitalize","off"),this.textArea.setAttribute("autocomplete","off"),this.textArea.setAttribute("spellcheck","false"),this.textArea.setAttribute("aria-label",this._getAriaLabel(k)),this.textArea.setAttribute("tabindex",String(k.get(107))),this.textArea.setAttribute("role","textbox"),this.textArea.setAttribute("aria-roledescription",b.localize(0,null)),this.textArea.setAttribute("aria-multiline","true"),this.textArea.setAttribute("aria-haspopup","false"),this.textArea.setAttribute("aria-autocomplete","both"),w.isWeb&&k.get(75)&&this.textArea.setAttribute("readonly","true"),this.textAreaCover=M.createFastDomNode(document.createElement("div")),this.textAreaCover.setPosition("absolute");const T={getLineCount:()=>this._context.model.getLineCount(),getLineMaxColumn:A=>this._context.model.getLineMaxColumn(A),getValueInRange:(A,B)=>this._context.model.getValueInRange(A,B)},O={getDataToCopy:A=>{const B=this._context.model.getPlainTextToCopy(this._modelSelections,this._emptySelectionClipboard,w.isWindows),F=this._context.model.getEOL(),D=this._emptySelectionClipboard&&this._modelSelections.length===1&&this._modelSelections[0].isEmpty(),R=Array.isArray(B)?B:null,W=Array.isArray(B)?B.join(F):B;let x,K=null;if(A&&(d.CopyOptions.forceCopyWithSyntaxHighlighting||this._copyWithSyntaxHighlighting&&W.length<65536)){const Y=this._context.model.getRichTextToCopy(this._modelSelections,this._emptySelectionClipboard);Y&&(x=Y.html,K=Y.mode)}return{isFromEmptySelection:D,multicursorText:R,text:W,html:x,mode:K}},getScreenReaderContent:A=>{if(this._accessibilitySupport===1){if(w.isMacintosh){const B=this._selections[0];if(B.isEmpty()){const F=B.getStartPosition();let D=this._getWordBeforePosition(F);if(D.length===0&&(D=this._getCharacterBeforePosition(F)),D.length>0)return new g.TextAreaState(D,D.length,D.length,F,F)}}return g.TextAreaState.EMPTY}if(N.isAndroid){const B=this._selections[0];if(B.isEmpty()){const F=B.getStartPosition(),[D,R]=this._getAndroidWordAtPosition(F);if(D.length>0)return new g.TextAreaState(D,R,R,F,F)}return g.TextAreaState.EMPTY}return g.PagedScreenReaderStrategy.fromEditorSelection(A,T,this._selections[0],this._accessibilityPageSize,this._accessibilitySupport===0)},deduceModelPosition:(A,B,F)=>this._context.model.deduceModelPositionRelativeToViewPosition(A,B,F)};this._textAreaInput=this._register(new d.TextAreaInput(O,this.textArea)),this._register(this._textAreaInput.onKeyDown(A=>{this._viewController.emitKeyDown(A)})),this._register(this._textAreaInput.onKeyUp(A=>{this._viewController.emitKeyUp(A)})),this._register(this._textAreaInput.onPaste(A=>{let B=!1,F=null,D=null;A.metadata&&(B=this._emptySelectionClipboard&&!!A.metadata.isFromEmptySelection,F=typeof A.metadata.multicursorText!="undefined"?A.metadata.multicursorText:null,D=A.metadata.mode),this._viewController.paste(A.text,B,F,D)})),this._register(this._textAreaInput.onCut(()=>{this._viewController.cut()})),this._register(this._textAreaInput.onType(A=>{A.replacePrevCharCnt||A.replaceNextCharCnt||A.positionDelta?(g._debugComposition&&console.log(` => compositionType: <<${A.text}>>, ${A.replacePrevCharCnt}, ${A.replaceNextCharCnt}, ${A.positionDelta}`),this._viewController.compositionType(A.text,A.replacePrevCharCnt,A.replaceNextCharCnt,A.positionDelta)):(g._debugComposition&&console.log(` => type: <<${A.text}>>`),this._viewController.type(A.text))})),this._register(this._textAreaInput.onSelectionChangeRequest(A=>{this._viewController.setSelection(A)})),this._register(this._textAreaInput.onCompositionStart(A=>{const B=this._selections[0].startLineNumber,F=this._selections[0].startColumn+A.revealDeltaColumns;this._context.model.revealRange("keyboard",!0,new r.Range(B,F,B,F),0,1);const D=this._viewHelper.visibleRangeForPositionRelativeToEditor(B,F);D&&(this._visibleTextArea=new t(this._context.viewLayout.getVerticalOffsetForLineNumber(B),D.left,l?0:1),this._render()),this.textArea.setClassName(`inputarea ${n.MOUSE_CURSOR_TEXT_CSS_CLASS_NAME} ime-input`),this._viewController.compositionStart(),this._context.model.onCompositionStart()})),this._register(this._textAreaInput.onCompositionUpdate(A=>{!this._visibleTextArea||(this._visibleTextArea=this._visibleTextArea.setWidth(m(A.data,this._fontInfo)),this._render())})),this._register(this._textAreaInput.onCompositionEnd(()=>{this._visibleTextArea=null,this._render(),this.textArea.setClassName(`inputarea ${n.MOUSE_CURSOR_TEXT_CSS_CLASS_NAME}`),this._viewController.compositionEnd(),this._context.model.onCompositionEnd()})),this._register(this._textAreaInput.onFocus(()=>{this._context.model.setHasFocus(!0)})),this._register(this._textAreaInput.onBlur(()=>{this._context.model.setHasFocus(!1)}))}dispose(){super.dispose()}_getAndroidWordAtPosition(y){const L='`~!@#$%^&*()-=+[{]}\\|;:",.<>/?',I=this._context.model.getLineContent(y.lineNumber),k=a.getMapForWordSeparators(L);let E=!0,T=y.column,O=!0,A=y.column,B=0;for(;B<50&&(E||O);){if(E&&T<=1&&(E=!1),E){const F=I.charCodeAt(T-2);k.get(F)!==0?E=!1:T--}if(O&&A>I.length&&(O=!1),O){const F=I.charCodeAt(A-1);k.get(F)!==0?O=!1:A++}B++}return[I.substring(T-1,A-1),y.column-T]}_getWordBeforePosition(y){const L=this._context.model.getLineContent(y.lineNumber),I=a.getMapForWordSeparators(this._context.configuration.options.get(110));let k=y.column,E=0;for(;k>1;){const T=L.charCodeAt(k-2);if(I.get(T)!==0||E>50)return L.substring(k-1,y.column-1);E++,k--}return L.substring(0,y.column-1)}_getCharacterBeforePosition(y){if(y.column>1){const I=this._context.model.getLineContent(y.lineNumber).charAt(y.column-2);if(!S.isHighSurrogate(I.charCodeAt(0)))return I}return""}_getAriaLabel(y){return y.get(2)===1?b.localize(1,null,w.isLinux?"Shift+Alt+F1":"Alt+F1"):y.get(4)}_setAccessibilityOptions(y){this._accessibilitySupport=y.get(2);const L=y.get(3);this._accessibilitySupport===2&&L===s.EditorOptions.accessibilityPageSize.defaultValue?this._accessibilityPageSize=100:this._accessibilityPageSize=L}onConfigurationChanged(y){const L=this._context.configuration.options,I=L.get(124);return this._setAccessibilityOptions(L),this._contentLeft=I.contentLeft,this._contentWidth=I.contentWidth,this._contentHeight=I.height,this._fontInfo=L.get(38),this._lineHeight=L.get(53),this._emptySelectionClipboard=L.get(28),this._copyWithSyntaxHighlighting=L.get(18),this.textArea.setAttribute("aria-label",this._getAriaLabel(L)),this.textArea.setAttribute("tabindex",String(L.get(107))),w.isWeb&&y.hasChanged(75)&&(L.get(75)?this.textArea.setAttribute("readonly","true"):this.textArea.removeAttribute("readonly")),y.hasChanged(2)&&this._textAreaInput.writeScreenReaderContent("strategy changed"),!0}onCursorStateChanged(y){return this._selections=y.selections.slice(0),this._modelSelections=y.modelSelections.slice(0),this._textAreaInput.writeScreenReaderContent("selection changed"),!0}onDecorationsChanged(y){return!0}onFlushed(y){return!0}onLinesChanged(y){return!0}onLinesDeleted(y){return!0}onLinesInserted(y){return!0}onScrollChanged(y){return this._scrollLeft=y.scrollLeft,this._scrollTop=y.scrollTop,!0}onZonesChanged(y){return!0}isFocused(){return this._textAreaInput.isFocused()}focusTextArea(){this._textAreaInput.focusTextArea()}getLastRenderData(){return this._lastRenderPosition}setAriaOptions(y){y.activeDescendant?(this.textArea.setAttribute("aria-haspopup","true"),this.textArea.setAttribute("aria-autocomplete","list"),this.textArea.setAttribute("aria-activedescendant",y.activeDescendant)):(this.textArea.setAttribute("aria-haspopup","false"),this.textArea.setAttribute("aria-autocomplete","both"),this.textArea.removeAttribute("aria-activedescendant")),y.role&&this.textArea.setAttribute("role",y.role)}prepareRender(y){this._primaryCursorPosition=new u.Position(this._selections[0].positionLineNumber,this._selections[0].positionColumn),this._primaryCursorVisibleRange=y.visibleRangeForPosition(this._primaryCursorPosition)}render(y){this._textAreaInput.writeScreenReaderContent("render"),this._render()}_render(){if(this._visibleTextArea){this._renderInsideEditor(null,this._visibleTextArea.top-this._scrollTop,this._contentLeft+this._visibleTextArea.left-this._scrollLeft,this._visibleTextArea.width,this._lineHeight);return}if(!this._primaryCursorVisibleRange){this._renderAtTopLeft();return}const y=this._contentLeft+this._primaryCursorVisibleRange.left-this._scrollLeft;if(ythis._contentLeft+this._contentWidth){this._renderAtTopLeft();return}const L=this._context.viewLayout.getVerticalOffsetForLineNumber(this._selections[0].positionLineNumber)-this._scrollTop;if(L<0||L>this._contentHeight){this._renderAtTopLeft();return}if(w.isMacintosh){this._renderInsideEditor(this._primaryCursorPosition,L,y,l?0:1,this._lineHeight);return}this._renderInsideEditor(this._primaryCursorPosition,L,y,l?0:1,l?0:1)}_renderInsideEditor(y,L,I,k,E){this._lastRenderPosition=y;const T=this.textArea,O=this.textAreaCover;C.Configuration.applyFontInfo(T,this._fontInfo),T.setTop(L),T.setLeft(I),T.setWidth(k),T.setHeight(E),O.setTop(0),O.setLeft(0),O.setWidth(0),O.setHeight(0)}_renderAtTopLeft(){this._lastRenderPosition=null;const y=this.textArea,L=this.textAreaCover;if(C.Configuration.applyFontInfo(y,this._fontInfo),y.setTop(0),y.setLeft(0),L.setTop(0),L.setLeft(0),l){y.setWidth(0),y.setHeight(0),L.setWidth(0),L.setHeight(0);return}y.setWidth(1),y.setHeight(1),L.setWidth(1),L.setHeight(1);const I=this._context.configuration.options;I.get(44)?L.setClassName("monaco-editor-background textAreaCover "+o.Margin.OUTER_CLASS_NAME):I.get(54).renderType!==0?L.setClassName("monaco-editor-background textAreaCover "+c.LineNumbersOverlay.CLASS_NAME):L.setClassName("monaco-editor-background textAreaCover")}}e.TextAreaHandler=h;function m(v,y){const I=document.createElement("canvas").getContext("2d");I.font=_(y);const k=I.measureText(v);return N.isFirefox?k.width+2:k.width}function _(v){return f("normal",v.fontWeight,v.fontSize,v.lineHeight,v.fontFamily)}function f(v,y,L,I,k){return`${v} normal ${y} ${L}px / ${I}px ${k}`}}),define(Q[591],J([0,1,30,29,45,14,18,49]),function(q,e,b,N,M,w,S,C){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DecorationsOverviewRuler=void 0;class d{constructor(c,o){const s=c.options;this.lineHeight=s.get(53),this.pixelRatio=s.get(122),this.overviewRulerLanes=s.get(68),this.renderBorder=s.get(67);const a=o.getColor(C.editorOverviewRulerBorder);this.borderColor=a?a.toString():null,this.hideCursor=s.get(46);const u=o.getColor(C.editorCursorForeground);this.cursorColor=u?u.transparent(.7).toString():null,this.themeType=o.type;const r=s.get(59),i=r.enabled,n=r.side,t=i?o.getColor(C.editorOverviewRulerBackground)||S.TokenizationRegistry.getDefaultBackground():null;t===null||n==="left"?this.backgroundColor=null:this.backgroundColor=N.Color.Format.CSS.formatHex(t);const h=s.get(124).overviewRuler;this.top=h.top,this.right=h.right,this.domWidth=h.width,this.domHeight=h.height,this.overviewRulerLanes===0?(this.canvasWidth=0,this.canvasHeight=0):(this.canvasWidth=this.domWidth*this.pixelRatio|0,this.canvasHeight=this.domHeight*this.pixelRatio|0);const[m,_]=this._initLanes(1,this.canvasWidth,this.overviewRulerLanes);this.x=m,this.w=_}_initLanes(c,o,s){const a=o-c;if(s>=3){const u=Math.floor(a/3),r=Math.floor(a/3),i=a-u-r,n=c,t=n+u,l=n+u+i;return[[0,n,t,n,l,n,t,n],[0,u,i,u+i,r,u+i+r,i+r,u+i+r]]}else if(s===2){const u=Math.floor(a/2),r=a-u,i=c,n=i+u;return[[0,i,i,i,n,i,i,i],[0,u,u,u,r,u+r,u+r,u+r]]}else{const u=c,r=a;return[[0,u,u,u,u,u,u,u],[0,r,r,r,r,r,r,r]]}}equals(c){return this.lineHeight===c.lineHeight&&this.pixelRatio===c.pixelRatio&&this.overviewRulerLanes===c.overviewRulerLanes&&this.renderBorder===c.renderBorder&&this.borderColor===c.borderColor&&this.hideCursor===c.hideCursor&&this.cursorColor===c.cursorColor&&this.themeType===c.themeType&&this.backgroundColor===c.backgroundColor&&this.top===c.top&&this.right===c.right&&this.domWidth===c.domWidth&&this.domHeight===c.domHeight&&this.canvasWidth===c.canvasWidth&&this.canvasHeight===c.canvasHeight}}class g extends M.ViewPart{constructor(c){super(c);this._domNode=b.createFastDomNode(document.createElement("canvas")),this._domNode.setClassName("decorationsOverviewRuler"),this._domNode.setPosition("absolute"),this._domNode.setLayerHinting(!0),this._domNode.setContain("strict"),this._domNode.setAttribute("aria-hidden","true"),this._updateSettings(!1),this._tokensColorTrackerListener=S.TokenizationRegistry.onDidChange(o=>{o.changedColorMap&&this._updateSettings(!0)}),this._cursorPositions=[]}dispose(){super.dispose(),this._tokensColorTrackerListener.dispose()}_updateSettings(c){const o=new d(this._context.configuration,this._context.theme);return this._settings&&this._settings.equals(o)?!1:(this._settings=o,this._domNode.setTop(this._settings.top),this._domNode.setRight(this._settings.right),this._domNode.setWidth(this._settings.domWidth),this._domNode.setHeight(this._settings.domHeight),this._domNode.domNode.width=this._settings.canvasWidth,this._domNode.domNode.height=this._settings.canvasHeight,c&&this._render(),!0)}onConfigurationChanged(c){return this._updateSettings(!1)}onCursorStateChanged(c){this._cursorPositions=[];for(let o=0,s=c.selections.length;oo&&(x=o-t),D=x-t,R=x+t}D>E+1||A!==I?(T!==0&&l.fillRect(h[I],k,m[I],E-k),I=A,k=D,E=R):R>E&&(E=R)}l.fillRect(h[I],k,m[I],E-k)}if(!this._settings.hideCursor&&this._settings.cursorColor){const f=2*this._settings.pixelRatio|0,v=f/2|0,y=this._settings.x[7],L=this._settings.w[7];l.fillStyle=this._settings.cursorColor;let I=-100,k=-100;for(let E=0,T=this._cursorPositions.length;Eo&&(A=o-v);const B=A-v,F=B+f;B>k+1?(E!==0&&l.fillRect(y,I,L,k-I),I=B,k=F):F>k&&(k=F)}l.fillRect(y,I,L,k-I)}this._settings.renderBorder&&this._settings.borderColor&&this._settings.overviewRulerLanes>0&&(l.beginPath(),l.lineWidth=1,l.strokeStyle=this._settings.borderColor,l.moveTo(0,0),l.lineTo(0,o),l.stroke(),l.moveTo(0,0),l.lineTo(c,0),l.stroke())}}e.DecorationsOverviewRuler=g}),define(Q[592],J([0,1,30,45,49,11,328]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Rulers=void 0;class S extends N.ViewPart{constructor(d){super(d);this.domNode=b.createFastDomNode(document.createElement("div")),this.domNode.setAttribute("role","presentation"),this.domNode.setAttribute("aria-hidden","true"),this.domNode.setClassName("view-rulers"),this._renderedRulers=[];const g=this._context.configuration.options;this._rulers=g.get(86),this._typicalHalfwidthCharacterWidth=g.get(38).typicalHalfwidthCharacterWidth}dispose(){super.dispose()}onConfigurationChanged(d){const g=this._context.configuration.options;return this._rulers=g.get(86),this._typicalHalfwidthCharacterWidth=g.get(38).typicalHalfwidthCharacterWidth,!0}onScrollChanged(d){return d.scrollHeightChanged}prepareRender(d){}_ensureRulersCount(){const d=this._renderedRulers.length,g=this._rulers.length;if(d!==g){if(d0;){const a=b.createFastDomNode(document.createElement("div"));a.setClassName("view-ruler"),a.setWidth(o),this.domNode.appendChild(a),this._renderedRulers.push(a),s--}return}let p=d-g;for(;p>0;){const c=this._renderedRulers.pop();this.domNode.removeChild(c),p--}}}render(d){this._ensureRulersCount();for(let g=0,p=this._rulers.length;g{const g=C.getColor(M.editorRuler);g&&d.addRule(`.monaco-editor .view-ruler { box-shadow: 1px 0 0 0 ${g} inset; }`)})}),define(Q[593],J([0,1,30,15,45,565,38,49,11,331]),function(q,e,b,N,M,w,S,C,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ViewCursors=void 0;class g extends M.ViewPart{constructor(c){super(c);const o=this._context.configuration.options;this._readOnly=o.get(75),this._cursorBlinking=o.get(19),this._cursorStyle=o.get(21),this._cursorSmoothCaretAnimation=o.get(20),this._selectionIsEmpty=!0,this._isComposingInput=!1,this._isVisible=!1,this._primaryCursor=new w.ViewCursor(this._context),this._secondaryCursors=[],this._renderData=[],this._domNode=b.createFastDomNode(document.createElement("div")),this._domNode.setAttribute("role","presentation"),this._domNode.setAttribute("aria-hidden","true"),this._updateDomClassName(),this._domNode.appendChild(this._primaryCursor.getDomNode()),this._startCursorBlinkAnimation=new N.TimeoutTimer,this._cursorFlatBlinkInterval=new N.IntervalTimer,this._blinkingEnabled=!1,this._editorHasFocus=!1,this._updateBlinking()}dispose(){super.dispose(),this._startCursorBlinkAnimation.dispose(),this._cursorFlatBlinkInterval.dispose()}getDomNode(){return this._domNode}onCompositionStart(c){return this._isComposingInput=!0,this._updateBlinking(),!0}onCompositionEnd(c){return this._isComposingInput=!1,this._updateBlinking(),!0}onConfigurationChanged(c){const o=this._context.configuration.options;this._readOnly=o.get(75),this._cursorBlinking=o.get(19),this._cursorStyle=o.get(21),this._cursorSmoothCaretAnimation=o.get(20),this._updateBlinking(),this._updateDomClassName(),this._primaryCursor.onConfigurationChanged(c);for(let s=0,a=this._secondaryCursors.length;so.length){const s=this._secondaryCursors.length-o.length;for(let a=0;a{for(let a=0,u=c.ranges.length;a{this._isVisible?this._hide():this._show()},g.BLINK_INTERVAL):this._startCursorBlinkAnimation.setIfNotSet(()=>{this._blinkingEnabled=!0,this._updateDomClassName()},g.BLINK_INTERVAL))}_updateDomClassName(){this._domNode.setClassName(this._getClassName())}_getClassName(){let c="cursors-layer";switch(this._selectionIsEmpty||(c+=" has-selection"),this._cursorStyle){case S.TextEditorCursorStyle.Line:c+=" cursor-line-style";break;case S.TextEditorCursorStyle.Block:c+=" cursor-block-style";break;case S.TextEditorCursorStyle.Underline:c+=" cursor-underline-style";break;case S.TextEditorCursorStyle.LineThin:c+=" cursor-line-thin-style";break;case S.TextEditorCursorStyle.BlockOutline:c+=" cursor-block-outline-style";break;case S.TextEditorCursorStyle.UnderlineThin:c+=" cursor-underline-thin-style";break;default:c+=" cursor-line-style"}if(this._blinkingEnabled)switch(this._getCursorBlinking()){case 1:c+=" cursor-blink";break;case 2:c+=" cursor-smooth";break;case 3:c+=" cursor-phase";break;case 4:c+=" cursor-expand";break;case 5:c+=" cursor-solid";break;default:c+=" cursor-solid"}else c+=" cursor-solid";return this._cursorSmoothCaretAnimation&&(c+=" cursor-smooth-caret-animation"),c}_show(){this._primaryCursor.show();for(let c=0,o=this._secondaryCursors.length;c{const o=p.getColor(C.editorCursorForeground);if(o){let s=p.getColor(C.editorCursorBackground);s||(s=o.opposite()),c.addRule(`.monaco-editor .cursors-layer .cursor { background-color: ${o}; border-color: ${o}; color: ${s}; }`),p.type==="hc"&&c.addRule(`.monaco-editor .cursors-layer.has-selection .cursor { border-left: 1px solid ${s}; border-right: 1px solid ${s}; }`)}})}),define(Q[594],J([0,1,85,2,53,11,49,36,3,43,6,22]),function(q,e,b,N,M,w,S,C,d,g,p,c){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MarkerDecorationsService=void 0;function o(u){return u.toString()}class s extends N.Disposable{constructor(r){super();this.model=r,this._markersData=new Map,this._register(N.toDisposable(()=>{this.model.deltaDecorations([...this._markersData.keys()],[]),this._markersData.clear()}))}update(r,i){const n=[...this._markersData.keys()];this._markersData.clear();const t=this.model.deltaDecorations(n,i);for(let l=0;lthis._onModelAdded(n)),this._register(r.onModelAdded(this._onModelAdded,this)),this._register(r.onModelRemoved(this._onModelRemoved,this)),this._register(this._markerService.onMarkerChanged(this._handleMarkerChange,this))}dispose(){super.dispose(),this._markerDecorations.forEach(r=>r.dispose()),this._markerDecorations.clear()}getMarker(r,i){const n=this._markerDecorations.get(o(r));return n&&n.getMarker(i)||null}_handleMarkerChange(r){r.forEach(i=>{const n=this._markerDecorations.get(o(i));n&&this._updateDecorations(n)})}_onModelAdded(r){const i=new s(r);this._markerDecorations.set(o(r.uri),i),this._updateDecorations(i)}_onModelRemoved(r){const i=this._markerDecorations.get(o(r.uri));i&&(i.dispose(),this._markerDecorations.delete(o(r.uri))),(r.uri.scheme===g.Schemas.inMemory||r.uri.scheme===g.Schemas.internal||r.uri.scheme===g.Schemas.vscode)&&this._markerService&&this._markerService.read({resource:r.uri}).map(n=>n.owner).forEach(n=>this._markerService.remove(n,[r.uri]))}_updateDecorations(r){const i=this._markerService.read({resource:r.model.uri,take:500});let n=i.map(t=>({range:this._createDecorationRange(r.model,t),options:this._createDecorationOption(t)}));r.update(i,n)&&this._onDidChangeMarker.fire(r.model)}_createDecorationRange(r,i){let n=d.Range.lift(i);if(i.severity===b.MarkerSeverity.Hint&&!this._hasMarkerTag(i,1)&&!this._hasMarkerTag(i,2)&&(n=n.setEndPosition(n.startLineNumber,n.startColumn+2)),n=r.validateRange(n),n.isEmpty()){let t=r.getWordAtPosition(n.getStartPosition());if(t)n=new d.Range(n.startLineNumber,t.startColumn,n.endLineNumber,t.endColumn);else{let l=r.getLineLastNonWhitespaceColumn(n.startLineNumber)||r.getLineMaxColumn(n.startLineNumber);l===1||(n.endColumn>=l?n=new d.Range(n.startLineNumber,l-1,n.endLineNumber,l):n=new d.Range(n.startLineNumber,n.startColumn,n.endLineNumber,n.endColumn+1))}}else if(i.endColumn===Number.MAX_VALUE&&i.startColumn===1&&n.startLineNumber===n.endLineNumber){let t=r.getLineFirstNonWhitespaceColumn(i.startLineNumber);t=0:!1}};a=Me([_e(0,C.IModelService),_e(1,b.IMarkerService)],a),e.MarkerDecorationsService=a}),define(Q[595],J([0,1,7,90,6,2,31,467,37,11,22,60,27,337]),function(q,e,b,N,M,w,S,C,d,g,p,c,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.LightBulbWidget=void 0;var s;(function(u){u.Hidden={type:0};class r{constructor(n,t,l,h){this.actions=n,this.trigger=t,this.editorPosition=l,this.widgetPosition=h,this.type=1}}u.Showing=r})(s||(s={}));let a=class At extends w.Disposable{constructor(r,i,n,t){super();this._editor=r,this._quickFixActionId=i,this._preferredFixActionId=n,this._keybindingService=t,this._onClick=this._register(new M.Emitter),this.onClick=this._onClick.event,this._state=s.Hidden,this._domNode=document.createElement("div"),this._domNode.className=o.Codicon.lightBulb.classNames,this._editor.addContentWidget(this),this._register(this._editor.onDidChangeModelContent(l=>{const h=this._editor.getModel();(this.state.type!==1||!h||this.state.editorPosition.lineNumber>=h.getLineCount())&&this.hide()})),c.Gesture.ignoreTarget(this._domNode),this._register(b.addStandardDisposableGenericMouseDownListner(this._domNode,l=>{if(this.state.type===1){this._editor.focus(),l.preventDefault();const{top:h,height:m}=b.getDomNodePagePosition(this._domNode),_=this._editor.getOption(53);let f=Math.floor(_/3);this.state.widgetPosition.position!==null&&this.state.widgetPosition.position.lineNumber{if((l.buttons&1)==1){this.hide();const h=new N.GlobalMouseMoveMonitor;h.startMonitoring(l.target,l.buttons,N.standardMouseMoveMerger,()=>{},()=>{h.dispose()})}})),this._register(this._editor.onDidChangeConfiguration(l=>{l.hasChanged(51)&&!this._editor.getOption(51).enabled&&this.hide()})),this._updateLightBulbTitleAndIcon(),this._register(this._keybindingService.onDidUpdateKeybindings(this._updateLightBulbTitleAndIcon,this))}dispose(){super.dispose(),this._editor.removeContentWidget(this)}getId(){return"LightBulbWidget"}getDomNode(){return this._domNode}getPosition(){return this._state.type===1?this._state.widgetPosition:null}update(r,i,n){if(r.validActions.length<=0)return this.hide();const t=this._editor.getOptions();if(!t.get(51).enabled)return this.hide();const l=this._editor.getModel();if(!l)return this.hide();const{lineNumber:h,column:m}=l.validatePosition(n),_=l.getOptions().tabSize,f=t.get(38),v=l.getLineContent(h),y=S.TextModel.computeIndentLevel(v,_),L=f.spaceWidth*y>22,I=E=>E>2&&this._editor.getTopForLineNumber(E)===this._editor.getTopForLineNumber(E-1);let k=h;if(!L){if(h>1&&!I(h-1))k-=1;else if(!I(h+1))k+=1;else if(m*f.spaceWidth<22)return this.hide()}this.state=new s.Showing(r,i,n,{position:{lineNumber:k,column:1},preference:At._posPref}),this._editor.layoutContentWidget(this)}hide(){this.state=s.Hidden,this._editor.layoutContentWidget(this)}get state(){return this._state}set state(r){this._state=r,this._updateLightBulbTitleAndIcon()}_updateLightBulbTitleAndIcon(){if(this.state.type===1&&this.state.actions.hasAutoFix){this._domNode.classList.remove(...o.Codicon.lightBulb.classNamesArray),this._domNode.classList.add(...o.Codicon.lightbulbAutofix.classNamesArray);const i=this._keybindingService.lookupKeybinding(this._preferredFixActionId);if(i){this.title=C.localize(0,null,i.getLabel());return}}this._domNode.classList.remove(...o.Codicon.lightbulbAutofix.classNamesArray),this._domNode.classList.add(...o.Codicon.lightBulb.classNamesArray);const r=this._keybindingService.lookupKeybinding(this._quickFixActionId);r?this.title=C.localize(1,null,r.getLabel()):this.title=C.localize(2,null)}set title(r){this._domNode.title=r}};a._posPref=[0],a=Me([_e(3,d.IKeybindingService)],a),e.LightBulbWidget=a,g.registerThemingParticipant((u,r)=>{var i;const n=(i=u.getColor(p.editorBackground))===null||i===void 0?void 0:i.transparent(.7),t=u.getColor(p.editorLightBulbForeground);t&&r.addRule(` + .monaco-editor .contentWidgets ${o.Codicon.lightBulb.cssSelector} { + color: ${t}; + background-color: ${n}; + }`);const l=u.getColor(p.editorLightBulbAutoFixForeground);l&&r.addRule(` + .monaco-editor .contentWidgets ${o.Codicon.lightbulbAutofix.cssSelector} { + color: ${l}; + background-color: ${n}; + }`)})}),define(Q[596],J([0,1,7,3,31,49,22,11,103,338]),function(q,e,b,N,M,w,S,C,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CodeLensWidget=e.CodeLensHelper=void 0;class g{constructor(a,u,r){this.afterLineNumber=a,this.heightInPx=u,this._onHeight=r,this.suppressMouseDown=!0,this.domNode=document.createElement("div")}onComputedHeight(a){this._lastHeight===void 0?this._lastHeight=a:this._lastHeight!==a&&(this._lastHeight=a,this._onHeight())}}class p{constructor(a,u,r){this.allowEditorOverflow=!1,this.suppressMouseDown=!0,this._commands=new Map,this._isEmpty=!0,this._editor=a,this._id=`codelens.widget-${p._idPool++}`,this.updatePosition(r),this._domNode=document.createElement("span"),this._domNode.className=`codelens-decoration ${u}`}withCommands(a,u){this._commands.clear();let r=[],i=!1;for(let n=0;n{_.symbol.command&&m.push(_.symbol),i.addDecoration({range:_.symbol.range,options:M.ModelDecorationOptions.EMPTY},v=>this._decorationIds[f]=v),h?h=N.Range.plusRange(h,_.symbol.range):h=N.Range.lift(_.symbol.range)}),this._viewZone=new g(h.startLineNumber-1,t,l),this._viewZoneId=n.addZone(this._viewZone),m.length>0&&(this._createContentWidgetIfNecessary(),this._contentWidget.withCommands(m,!1))}_createContentWidgetIfNecessary(){this._contentWidget?this._editor.layoutContentWidget(this._contentWidget):(this._contentWidget=new p(this._editor,this._className,this._viewZone.afterLineNumber+1),this._editor.addContentWidget(this._contentWidget))}dispose(a,u){this._decorationIds.forEach(a.removeDecoration,a),this._decorationIds=[],u&&u.removeZone(this._viewZoneId),this._contentWidget&&(this._editor.removeContentWidget(this._contentWidget),this._contentWidget=void 0),this._isDisposed=!0}isDisposed(){return this._isDisposed}isValid(){return this._decorationIds.some((a,u)=>{const r=this._editor.getModel().getDecorationRange(a),i=this._data[u].symbol;return!!(r&&N.Range.isEmpty(i.range)===r.isEmpty())})}updateCodeLensSymbols(a,u){this._decorationIds.forEach(u.removeDecoration,u),this._decorationIds=[],this._data=a,this._data.forEach((r,i)=>{u.addDecoration({range:r.symbol.range,options:M.ModelDecorationOptions.EMPTY},n=>this._decorationIds[i]=n)})}updateHeight(a,u){this._viewZone.heightInPx=a,u.layoutZone(this._viewZoneId),this._contentWidget&&this._editor.layoutContentWidget(this._contentWidget)}computeIfNecessary(a){if(!this._viewZone.domNode.hasAttribute("monaco-visible-view-zone"))return null;for(let u=0;u{const u=s.getColor(w.editorCodeLensForeground);u&&(a.addRule(`.monaco-editor .codelens-decoration { color: ${u}; }`),a.addRule(`.monaco-editor .codelens-decoration .codicon { color: ${u}; }`));const r=s.getColor(S.editorActiveLinkForeground);r&&(a.addRule(`.monaco-editor .codelens-decoration > a:hover { color: ${r} !important; }`),a.addRule(`.monaco-editor .codelens-decoration > a:hover .codicon { color: ${r} !important; }`))})}),define(Q[597],J([0,1,35,7,90,52,29,6,2,22,11,339]),function(q,e,b,N,M,w,S,C,d,g,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ColorPickerWidget=e.ColorPickerBody=e.ColorPickerHeader=void 0;const c=N.$;class o extends d.Disposable{constructor(l,h,m){super();this.model=h,this.domNode=c(".colorpicker-header"),N.append(l,this.domNode),this.pickedColorNode=N.append(this.domNode,c(".picked-color"));const _=N.append(this.domNode,c(".original-color"));_.style.backgroundColor=S.Color.Format.CSS.format(this.model.originalColor)||"",this.backgroundColor=m.getColorTheme().getColor(g.editorHoverBackground)||S.Color.white,this._register(p.registerThemingParticipant((f,v)=>{this.backgroundColor=f.getColor(g.editorHoverBackground)||S.Color.white})),this._register(N.addDisposableListener(this.pickedColorNode,N.EventType.CLICK,()=>this.model.selectNextColorPresentation())),this._register(N.addDisposableListener(_,N.EventType.CLICK,()=>{this.model.color=this.model.originalColor,this.model.flushColor()})),this._register(h.onDidChangeColor(this.onDidChangeColor,this)),this._register(h.onDidChangePresentation(this.onDidChangePresentation,this)),this.pickedColorNode.style.backgroundColor=S.Color.Format.CSS.format(h.color)||"",this.pickedColorNode.classList.toggle("light",h.color.rgba.a<.5?this.backgroundColor.isLighter():h.color.isLighter())}onDidChangeColor(l){this.pickedColorNode.style.backgroundColor=S.Color.Format.CSS.format(l)||"",this.pickedColorNode.classList.toggle("light",l.rgba.a<.5?this.backgroundColor.isLighter():l.isLighter()),this.onDidChangePresentation()}onDidChangePresentation(){this.pickedColorNode.textContent=this.model.presentation?this.model.presentation.label:""}}e.ColorPickerHeader=o;class s extends d.Disposable{constructor(l,h,m){super();this.model=h,this.pixelRatio=m,this.domNode=c(".colorpicker-body"),N.append(l,this.domNode),this.saturationBox=new a(this.domNode,this.model,this.pixelRatio),this._register(this.saturationBox),this._register(this.saturationBox.onDidChange(this.onDidSaturationValueChange,this)),this._register(this.saturationBox.onColorFlushed(this.flushColor,this)),this.opacityStrip=new r(this.domNode,this.model),this._register(this.opacityStrip),this._register(this.opacityStrip.onDidChange(this.onDidOpacityChange,this)),this._register(this.opacityStrip.onColorFlushed(this.flushColor,this)),this.hueStrip=new i(this.domNode,this.model),this._register(this.hueStrip),this._register(this.hueStrip.onDidChange(this.onDidHueChange,this)),this._register(this.hueStrip.onColorFlushed(this.flushColor,this))}flushColor(){this.model.flushColor()}onDidSaturationValueChange({s:l,v:h}){const m=this.model.color.hsva;this.model.color=new S.Color(new S.HSVA(m.h,l,h,m.a))}onDidOpacityChange(l){const h=this.model.color.hsva;this.model.color=new S.Color(new S.HSVA(h.h,h.s,h.v,l))}onDidHueChange(l){const h=this.model.color.hsva,m=(1-l)*360;this.model.color=new S.Color(new S.HSVA(m===360?0:m,h.s,h.v,h.a))}layout(){this.saturationBox.layout(),this.opacityStrip.layout(),this.hueStrip.layout()}}e.ColorPickerBody=s;class a extends d.Disposable{constructor(l,h,m){super();this.model=h,this.pixelRatio=m,this._onDidChange=new C.Emitter,this.onDidChange=this._onDidChange.event,this._onColorFlushed=new C.Emitter,this.onColorFlushed=this._onColorFlushed.event,this.domNode=c(".saturation-wrap"),N.append(l,this.domNode),this.canvas=document.createElement("canvas"),this.canvas.className="saturation-box",N.append(this.domNode,this.canvas),this.selection=c(".saturation-selection"),N.append(this.domNode,this.selection),this.layout(),this._register(N.addDisposableGenericMouseDownListner(this.domNode,_=>this.onMouseDown(_))),this._register(this.model.onDidChangeColor(this.onDidChangeColor,this)),this.monitor=null}onMouseDown(l){this.monitor=this._register(new M.GlobalMouseMoveMonitor);const h=N.getDomNodePagePosition(this.domNode);l.target!==this.selection&&this.onDidChangePosition(l.offsetX,l.offsetY),this.monitor.startMonitoring(l.target,l.buttons,M.standardMouseMoveMerger,_=>this.onDidChangePosition(_.posx-h.left,_.posy-h.top),()=>null);const m=N.addDisposableGenericMouseUpListner(document,()=>{this._onColorFlushed.fire(),m.dispose(),this.monitor&&(this.monitor.stopMonitoring(!0),this.monitor=null)},!0)}onDidChangePosition(l,h){const m=Math.max(0,Math.min(1,l/this.width)),_=Math.max(0,Math.min(1,1-h/this.height));this.paintSelection(m,_),this._onDidChange.fire({s:m,v:_})}layout(){this.width=this.domNode.offsetWidth,this.height=this.domNode.offsetHeight,this.canvas.width=this.width*this.pixelRatio,this.canvas.height=this.height*this.pixelRatio,this.paint();const l=this.model.color.hsva;this.paintSelection(l.s,l.v)}paint(){const l=this.model.color.hsva,h=new S.Color(new S.HSVA(l.h,1,1,1)),m=this.canvas.getContext("2d"),_=m.createLinearGradient(0,0,this.canvas.width,0);_.addColorStop(0,"rgba(255, 255, 255, 1)"),_.addColorStop(.5,"rgba(255, 255, 255, 0.5)"),_.addColorStop(1,"rgba(255, 255, 255, 0)");const f=m.createLinearGradient(0,0,0,this.canvas.height);f.addColorStop(0,"rgba(0, 0, 0, 0)"),f.addColorStop(1,"rgba(0, 0, 0, 1)"),m.rect(0,0,this.canvas.width,this.canvas.height),m.fillStyle=S.Color.Format.CSS.format(h),m.fill(),m.fillStyle=_,m.fill(),m.fillStyle=f,m.fill()}paintSelection(l,h){this.selection.style.left=`${l*this.width}px`,this.selection.style.top=`${this.height-h*this.height}px`}onDidChangeColor(){this.monitor&&this.monitor.isMonitoring()||this.paint()}}class u extends d.Disposable{constructor(l,h){super();this.model=h,this._onDidChange=new C.Emitter,this.onDidChange=this._onDidChange.event,this._onColorFlushed=new C.Emitter,this.onColorFlushed=this._onColorFlushed.event,this.domNode=N.append(l,c(".strip")),this.overlay=N.append(this.domNode,c(".overlay")),this.slider=N.append(this.domNode,c(".slider")),this.slider.style.top="0px",this._register(N.addDisposableGenericMouseDownListner(this.domNode,m=>this.onMouseDown(m))),this.layout()}layout(){this.height=this.domNode.offsetHeight-this.slider.offsetHeight;const l=this.getValue(this.model.color);this.updateSliderPosition(l)}onMouseDown(l){const h=this._register(new M.GlobalMouseMoveMonitor),m=N.getDomNodePagePosition(this.domNode);this.domNode.classList.add("grabbing"),l.target!==this.slider&&this.onDidChangeTop(l.offsetY),h.startMonitoring(l.target,l.buttons,M.standardMouseMoveMerger,f=>this.onDidChangeTop(f.posy-m.top),()=>null);const _=N.addDisposableGenericMouseUpListner(document,()=>{this._onColorFlushed.fire(),_.dispose(),h.stopMonitoring(!0),this.domNode.classList.remove("grabbing")},!0)}onDidChangeTop(l){const h=Math.max(0,Math.min(1,1-l/this.height));this.updateSliderPosition(h),this._onDidChange.fire(h)}updateSliderPosition(l){this.slider.style.top=`${(1-l)*this.height}px`}}class r extends u{constructor(l,h){super(l,h);this.domNode.classList.add("opacity-strip"),this._register(h.onDidChangeColor(this.onDidChangeColor,this)),this.onDidChangeColor(this.model.color)}onDidChangeColor(l){const{r:h,g:m,b:_}=l.rgba,f=new S.Color(new S.RGBA(h,m,_,1)),v=new S.Color(new S.RGBA(h,m,_,0));this.overlay.style.background=`linear-gradient(to bottom, ${f} 0%, ${v} 100%)`}getValue(l){return l.hsva.a}}class i extends u{constructor(l,h){super(l,h);this.domNode.classList.add("hue-strip")}getValue(l){return 1-l.hsva.h/360}}class n extends w.Widget{constructor(l,h,m,_){super();this.model=h,this.pixelRatio=m,this._register(b.onDidChangeZoomLevel(()=>this.layout()));const f=c(".colorpicker-widget");l.appendChild(f);const v=new o(f,this.model,_);this.body=new s(f,this.model,this.pixelRatio),this._register(v),this._register(this.body)}layout(){this.body.layout()}}e.ColorPickerWidget=n}),define(Q[598],J([0,1,3,53,31,22,11]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.FindDecorations=void 0;class C{constructor(g){this._editor=g,this._decorations=[],this._overviewRulerApproximateDecorations=[],this._findScopeDecorationIds=[],this._rangeHighlightDecorationId=null,this._highlightedDecorationId=null,this._startPosition=this._editor.getPosition()}dispose(){this._editor.deltaDecorations(this._allDecorations(),[]),this._decorations=[],this._overviewRulerApproximateDecorations=[],this._findScopeDecorationIds=[],this._rangeHighlightDecorationId=null,this._highlightedDecorationId=null}reset(){this._decorations=[],this._overviewRulerApproximateDecorations=[],this._findScopeDecorationIds=[],this._rangeHighlightDecorationId=null,this._highlightedDecorationId=null}getCount(){return this._decorations.length}getFindScope(){return this._findScopeDecorationIds[0]?this._editor.getModel().getDecorationRange(this._findScopeDecorationIds[0]):null}getFindScopes(){if(this._findScopeDecorationIds.length){const g=this._findScopeDecorationIds.map(p=>this._editor.getModel().getDecorationRange(p)).filter(p=>!!p);if(g.length)return g}return null}getStartPosition(){return this._startPosition}setStartPosition(g){this._startPosition=g,this.setCurrentFindMatch(null)}_getDecorationIndex(g){const p=this._decorations.indexOf(g);return p>=0?p+1:1}getCurrentMatchesPosition(g){let p=this._editor.getModel().getDecorationsInRange(g);for(const c of p){const o=c.options;if(o===C._FIND_MATCH_DECORATION||o===C._CURRENT_FIND_MATCH_DECORATION)return this._getDecorationIndex(c.id)}return 0}setCurrentFindMatch(g){let p=null,c=0;if(g)for(let o=0,s=this._decorations.length;o{if(this._highlightedDecorationId!==null&&(o.changeDecorationOptions(this._highlightedDecorationId,C._FIND_MATCH_DECORATION),this._highlightedDecorationId=null),p!==null&&(this._highlightedDecorationId=p,o.changeDecorationOptions(this._highlightedDecorationId,C._CURRENT_FIND_MATCH_DECORATION)),this._rangeHighlightDecorationId!==null&&(o.removeDecoration(this._rangeHighlightDecorationId),this._rangeHighlightDecorationId=null),p!==null){let s=this._editor.getModel().getDecorationRange(p);if(s.startLineNumber!==s.endLineNumber&&s.endColumn===1){let a=s.endLineNumber-1,u=this._editor.getModel().getLineMaxColumn(a);s=new b.Range(s.startLineNumber,s.startColumn,a,u)}this._rangeHighlightDecorationId=o.addDecoration(s,C._RANGE_HIGHLIGHT_DECORATION)}}),c}set(g,p){this._editor.changeDecorations(c=>{let o=C._FIND_MATCH_DECORATION,s=[];if(g.length>1e3){o=C._FIND_MATCH_NO_OVERVIEW_DECORATION;const u=this._editor.getModel().getLineCount(),i=this._editor.getLayoutInfo().height/u,n=Math.max(2,Math.ceil(3/i));let t=g[0].range.startLineNumber,l=g[0].range.endLineNumber;for(let h=1,m=g.length;h=_.startLineNumber?_.endLineNumber>l&&(l=_.endLineNumber):(s.push({range:new b.Range(t,1,l,1),options:C._FIND_MATCH_ONLY_OVERVIEW_DECORATION}),t=_.startLineNumber,l=_.endLineNumber)}s.push({range:new b.Range(t,1,l,1),options:C._FIND_MATCH_ONLY_OVERVIEW_DECORATION})}let a=new Array(g.length);for(let u=0,r=g.length;uc.removeDecoration(u)),this._findScopeDecorationIds=[]),(p==null?void 0:p.length)&&(this._findScopeDecorationIds=p.map(u=>c.addDecoration(u,C._FIND_SCOPE_DECORATION)))})}matchBeforePosition(g){if(this._decorations.length===0)return null;for(let p=this._decorations.length-1;p>=0;p--){let c=this._decorations[p],o=this._editor.getModel().getDecorationRange(c);if(!(!o||o.endLineNumber>g.lineNumber)){if(o.endLineNumberg.column))return o}}return this._editor.getModel().getDecorationRange(this._decorations[this._decorations.length-1])}matchAfterPosition(g){if(this._decorations.length===0)return null;for(let p=0,c=this._decorations.length;pg.lineNumber)return s;if(!(s.startColumnthis.research(!1),100),this._toDispose.add(this._updateDecorationsScheduler),this._toDispose.add(this._editor.onDidChangeCursorPosition(t=>{(t.reason===3||t.reason===5||t.reason===6)&&this._decorations.setStartPosition(this._editor.getPosition())})),this._ignoreModelContentChanged=!1,this._toDispose.add(this._editor.onDidChangeModelContent(t=>{this._ignoreModelContentChanged||(t.isFlush&&this._decorations.reset(),this._decorations.setStartPosition(this._editor.getPosition()),this._updateDecorationsScheduler.schedule())})),this._toDispose.add(this._state.onFindReplaceStateChange(t=>this._onStateChanged(t))),this.research(!1,this._state.searchScope)}dispose(){this._isDisposed=!0,N.dispose(this._startSearchingTimer),this._toDispose.dispose()}_onStateChanged(i){this._isDisposed||!this._editor.hasModel()||(i.searchString||i.isReplaceRevealed||i.isRegex||i.wholeWord||i.matchCase||i.searchScope)&&(this._editor.getModel().isTooLargeForSyncing()?(this._startSearchingTimer.cancel(),this._startSearchingTimer.setIfNotSet(()=>{i.searchScope?this.research(i.moveCursor,this._state.searchScope):this.research(i.moveCursor)},a)):i.searchScope?this.research(i.moveCursor,this._state.searchScope):this.research(i.moveCursor))}static _getSearchRange(i,n){return n||i.getFullModelRange()}research(i,n){let t=null;typeof n!="undefined"?n!==null&&(Array.isArray(n)?t=n:t=[n]):t=this._decorations.getFindScopes(),t!==null&&(t=t.map(_=>{if(_.startLineNumber!==_.endLineNumber){let f=_.endLineNumber;return _.endColumn===1&&(f=f-1),new S.Range(_.startLineNumber,1,f,this._editor.getModel().getLineMaxColumn(f))}return _}));let l=this._findMatches(t,!1,e.MATCHES_LIMIT);this._decorations.set(l,t);const h=this._editor.getSelection();let m=this._decorations.getCurrentMatchesPosition(h);if(m===0&&l.length>0){const _=s.findFirstInSorted(l.map(f=>f.range),f=>S.Range.compareRangesUsingStarts(f,h)>=0);m=_>0?_-1+1:m}this._state.changeMatchInfo(m,this._decorations.getCount(),void 0),i&&this._editor.getOption(31).cursorMoveOnType&&this._moveToNextMatch(this._decorations.getStartPosition())}_hasMatches(){return this._state.matchesCount>0}_cannotFind(){if(!this._hasMatches()){let i=this._decorations.getFindScope();return i&&this._editor.revealRangeInCenterIfOutsideViewport(i,0),!0}return!1}_setCurrentFindMatch(i){let n=this._decorations.setCurrentFindMatch(i);this._state.changeMatchInfo(n,this._decorations.getCount(),i),this._editor.setSelection(i),this._editor.revealRangeInCenterIfOutsideViewport(i,0)}_prevSearchPosition(i){let n=this._state.isRegex&&(this._state.searchString.indexOf("^")>=0||this._state.searchString.indexOf("$")>=0),{lineNumber:t,column:l}=i,h=this._editor.getModel();return n||l===1?(t===1?t=h.getLineCount():t--,l=h.getLineMaxColumn(t)):l--,new w.Position(t,l)}_moveToPrevMatch(i,n=!1){if(!this._state.canNavigateBack()){const y=this._decorations.matchAfterPosition(i);y&&this._setCurrentFindMatch(y);return}if(this._decorations.getCount()=0||this._state.searchString.indexOf("$")>=0),{lineNumber:t,column:l}=i,h=this._editor.getModel();return n||l===h.getLineMaxColumn(t)?(t===h.getLineCount()?t=1:t++,l=1):l++,new w.Position(t,l)}_moveToNextMatch(i){if(!this._state.canNavigateForward()){const t=this._decorations.matchBeforePosition(i);t&&this._setCurrentFindMatch(t);return}if(this._decorations.getCount()u._getSearchRange(this._editor.getModel(),h));return this._editor.getModel().findMatches(this._state.searchString,l,this._state.isRegex,this._state.matchCase,this._state.wholeWord?this._editor.getOption(110):null,n,t)}replaceAll(){if(!!this._hasMatches()){const i=this._decorations.getFindScopes();i===null&&this._state.matchesCount>=e.MATCHES_LIMIT?this._largeReplaceAll():this._regularReplaceAll(i),this.research(!1)}}_largeReplaceAll(){const n=new d.SearchParams(this._state.searchString,this._state.isRegex,this._state.matchCase,this._state.wholeWord?this._editor.getOption(110):null).parseSearchRequest();if(!!n){let t=n.regex;if(!t.multiline){let L="mu";t.ignoreCase&&(L+="i"),t.global&&(L+="g"),t=new RegExp(t.source,L)}const l=this._editor.getModel(),h=l.getValue(1),m=l.getFullModelRange(),_=this._getReplacePattern();let f;const v=this._state.preserveCase;_.hasReplacementPatterns||v?f=h.replace(t,function(){return _.buildReplaceString(arguments,v)}):f=h.replace(t,_.buildReplaceString(null,v));let y=new M.ReplaceCommandThatPreservesSelection(m,f,this._editor.getSelection());this._executeEditorCommand("replaceAll",y)}}_regularReplaceAll(i){const n=this._getReplacePattern();let t=this._findMatches(i,n.hasReplacementPatterns||this._state.preserveCase,1073741824),l=[];for(let m=0,_=t.length;m<_;m++)l[m]=n.buildReplaceString(t[m].matches,this._state.preserveCase);let h=new p.ReplaceAllCommand(this._editor.getSelection(),t.map(m=>m.range),l);this._executeEditorCommand("replaceAll",h)}selectAllMatches(){if(!!this._hasMatches()){let i=this._decorations.getFindScopes(),t=this._findMatches(i,!1,1073741824).map(h=>new C.Selection(h.range.startLineNumber,h.range.startColumn,h.range.endLineNumber,h.range.endColumn)),l=this._editor.getSelection();for(let h=0,m=t.length;hthis._hide(),2e3)),this._isVisible=!1,this._editor=c,this._state=o,this._keybindingService=s,this._domNode=document.createElement("div"),this._domNode.className="findOptionsWidget",this._domNode.style.display="none",this._domNode.style.top="10px",this._domNode.setAttribute("role","presentation"),this._domNode.setAttribute("aria-hidden","true");const u=a.getColorTheme().getColor(C.inputActiveOptionBorder),r=a.getColorTheme().getColor(C.inputActiveOptionForeground),i=a.getColorTheme().getColor(C.inputActiveOptionBackground);this.caseSensitive=this._register(new N.CaseSensitiveCheckbox({appendTitle:this._keybindingLabelFor(S.FIND_IDS.ToggleCaseSensitiveCommand),isChecked:this._state.matchCase,inputActiveOptionBorder:u,inputActiveOptionForeground:r,inputActiveOptionBackground:i})),this._domNode.appendChild(this.caseSensitive.domNode),this._register(this.caseSensitive.onChange(()=>{this._state.change({matchCase:this.caseSensitive.checked},!1)})),this.wholeWords=this._register(new N.WholeWordsCheckbox({appendTitle:this._keybindingLabelFor(S.FIND_IDS.ToggleWholeWordCommand),isChecked:this._state.wholeWord,inputActiveOptionBorder:u,inputActiveOptionForeground:r,inputActiveOptionBackground:i})),this._domNode.appendChild(this.wholeWords.domNode),this._register(this.wholeWords.onChange(()=>{this._state.change({wholeWord:this.wholeWords.checked},!1)})),this.regex=this._register(new N.RegexCheckbox({appendTitle:this._keybindingLabelFor(S.FIND_IDS.ToggleRegexCommand),isChecked:this._state.isRegex,inputActiveOptionBorder:u,inputActiveOptionForeground:r,inputActiveOptionBackground:i})),this._domNode.appendChild(this.regex.domNode),this._register(this.regex.onChange(()=>{this._state.change({isRegex:this.regex.checked},!1)})),this._editor.addOverlayWidget(this),this._register(this._state.onFindReplaceStateChange(n=>{let t=!1;n.isRegex&&(this.regex.checked=this._state.isRegex,t=!0),n.wholeWord&&(this.wholeWords.checked=this._state.wholeWord,t=!0),n.matchCase&&(this.caseSensitive.checked=this._state.matchCase,t=!0),!this._state.isRevealed&&t&&this._revealTemporarily()})),this._register(b.addDisposableNonBubblingMouseOutListener(this._domNode,n=>this._onMouseOut())),this._register(b.addDisposableListener(this._domNode,"mouseover",n=>this._onMouseOver())),this._applyTheme(a.getColorTheme()),this._register(a.onDidColorThemeChange(this._applyTheme.bind(this)))}_keybindingLabelFor(c){let o=this._keybindingService.lookupKeybinding(c);return o?` (${o.getLabel()})`:""}dispose(){this._editor.removeOverlayWidget(this),super.dispose()}getId(){return g.ID}getDomNode(){return this._domNode}getPosition(){return{preference:0}}highlightFindOptions(){this._revealTemporarily()}_revealTemporarily(){this._show(),this._hideSoon.schedule()}_onMouseOut(){this._hideSoon.schedule()}_onMouseOver(){this._hideSoon.cancel()}_show(){this._isVisible||(this._isVisible=!0,this._domNode.style.display="block")}_hide(){!this._isVisible||(this._isVisible=!1,this._domNode.style.display="none")}_applyTheme(c){let o={inputActiveOptionBorder:c.getColor(C.inputActiveOptionBorder),inputActiveOptionForeground:c.getColor(C.inputActiveOptionForeground),inputActiveOptionBackground:c.getColor(C.inputActiveOptionBackground)};this.caseSensitive.style(o),this.wholeWords.style(o),this.regex.style(o)}}e.FindOptionsWidget=g,g.ID="editor.contrib.findOptionsWidget",d.registerThemingParticipant((p,c)=>{const o=p.getColor(C.editorWidgetBackground);o&&c.addRule(`.monaco-editor .findOptionsWidget { background-color: ${o}; }`);const s=p.getColor(C.editorWidgetForeground);s&&c.addRule(`.monaco-editor .findOptionsWidget { color: ${s}; }`);const a=p.getColor(C.widgetShadow);a&&c.addRule(`.monaco-editor .findOptionsWidget { box-shadow: 0 0 8px 2px ${a}; }`);const u=p.getColor(C.contrastBorder);u&&c.addRule(`.monaco-editor .findOptionsWidget { border: 2px solid ${u}; }`)})}),define(Q[600],J([0,1,6,2,3,142]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.FindReplaceState=void 0;function S(d,g){return d===1?!0:d===2?!1:g}class C extends N.Disposable{constructor(){super();this._onFindReplaceStateChange=this._register(new b.Emitter),this.onFindReplaceStateChange=this._onFindReplaceStateChange.event,this._searchString="",this._replaceString="",this._isRevealed=!1,this._isReplaceRevealed=!1,this._isRegex=!1,this._isRegexOverride=0,this._wholeWord=!1,this._wholeWordOverride=0,this._matchCase=!1,this._matchCaseOverride=0,this._preserveCase=!1,this._preserveCaseOverride=0,this._searchScope=null,this._matchesPosition=0,this._matchesCount=0,this._currentMatch=null,this._loop=!0}get searchString(){return this._searchString}get replaceString(){return this._replaceString}get isRevealed(){return this._isRevealed}get isReplaceRevealed(){return this._isReplaceRevealed}get isRegex(){return S(this._isRegexOverride,this._isRegex)}get wholeWord(){return S(this._wholeWordOverride,this._wholeWord)}get matchCase(){return S(this._matchCaseOverride,this._matchCase)}get preserveCase(){return S(this._preserveCaseOverride,this._preserveCase)}get actualIsRegex(){return this._isRegex}get actualWholeWord(){return this._wholeWord}get actualMatchCase(){return this._matchCase}get actualPreserveCase(){return this._preserveCase}get searchScope(){return this._searchScope}get matchesPosition(){return this._matchesPosition}get matchesCount(){return this._matchesCount}get currentMatch(){return this._currentMatch}changeMatchInfo(g,p,c){let o={moveCursor:!1,updateHistory:!1,searchString:!1,replaceString:!1,isRevealed:!1,isReplaceRevealed:!1,isRegex:!1,wholeWord:!1,matchCase:!1,preserveCase:!1,searchScope:!1,matchesPosition:!1,matchesCount:!1,currentMatch:!1,loop:!1},s=!1;p===0&&(g=0),g>p&&(g=p),this._matchesPosition!==g&&(this._matchesPosition=g,o.matchesPosition=!0,s=!0),this._matchesCount!==p&&(this._matchesCount=p,o.matchesCount=!0,s=!0),typeof c!="undefined"&&(M.Range.equalsRange(this._currentMatch,c)||(this._currentMatch=c,o.currentMatch=!0,s=!0)),s&&this._onFindReplaceStateChange.fire(o)}change(g,p,c=!0){var o;let s={moveCursor:p,updateHistory:c,searchString:!1,replaceString:!1,isRevealed:!1,isReplaceRevealed:!1,isRegex:!1,wholeWord:!1,matchCase:!1,preserveCase:!1,searchScope:!1,matchesPosition:!1,matchesCount:!1,currentMatch:!1,loop:!1},a=!1;const u=this.isRegex,r=this.wholeWord,i=this.matchCase,n=this.preserveCase;typeof g.searchString!="undefined"&&this._searchString!==g.searchString&&(this._searchString=g.searchString,s.searchString=!0,a=!0),typeof g.replaceString!="undefined"&&this._replaceString!==g.replaceString&&(this._replaceString=g.replaceString,s.replaceString=!0,a=!0),typeof g.isRevealed!="undefined"&&this._isRevealed!==g.isRevealed&&(this._isRevealed=g.isRevealed,s.isRevealed=!0,a=!0),typeof g.isReplaceRevealed!="undefined"&&this._isReplaceRevealed!==g.isReplaceRevealed&&(this._isReplaceRevealed=g.isReplaceRevealed,s.isReplaceRevealed=!0,a=!0),typeof g.isRegex!="undefined"&&(this._isRegex=g.isRegex),typeof g.wholeWord!="undefined"&&(this._wholeWord=g.wholeWord),typeof g.matchCase!="undefined"&&(this._matchCase=g.matchCase),typeof g.preserveCase!="undefined"&&(this._preserveCase=g.preserveCase),typeof g.searchScope!="undefined"&&(((o=g.searchScope)===null||o===void 0?void 0:o.every(t=>{var l;return(l=this._searchScope)===null||l===void 0?void 0:l.some(h=>!M.Range.equalsRange(h,t))}))||(this._searchScope=g.searchScope,s.searchScope=!0,a=!0)),typeof g.loop!="undefined"&&this._loop!==g.loop&&(this._loop=g.loop,s.loop=!0,a=!0),this._isRegexOverride=typeof g.isRegexOverride!="undefined"?g.isRegexOverride:0,this._wholeWordOverride=typeof g.wholeWordOverride!="undefined"?g.wholeWordOverride:0,this._matchCaseOverride=typeof g.matchCaseOverride!="undefined"?g.matchCaseOverride:0,this._preserveCaseOverride=typeof g.preserveCaseOverride!="undefined"?g.preserveCaseOverride:0,u!==this.isRegex&&(a=!0,s.isRegex=!0),r!==this.wholeWord&&(a=!0,s.wholeWord=!0),i!==this.matchCase&&(a=!0,s.matchCase=!0),n!==this.preserveCase&&(a=!0,s.preserveCase=!0),a&&this._onFindReplaceStateChange.fire(s)}canNavigateBack(){return this.canNavigateInLoop()||this.matchesPosition!==1}canNavigateForward(){return this.canNavigateInLoop()||this.matchesPosition=w.MATCHES_LIMIT}}e.FindReplaceState=C}),define(Q[601],J([0,1,132,67,175,205,115,11,116,7,484,159,44,2,9,37,66,157]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AccessibilityProvider=e.OneReferenceRenderer=e.FileReferencesRenderer=e.IdentityProvider=e.StringRepresentationProvider=e.Delegate=e.DataSource=void 0;let n=class{constructor(I){this._resolverService=I}hasChildren(I){return I instanceof b.ReferencesModel||I instanceof b.FileReferences}getChildren(I){if(I instanceof b.ReferencesModel)return I.groups;if(I instanceof b.FileReferences)return I.resolve(this._resolverService).then(k=>k.children);throw new Error("bad tree")}};n=Me([_e(0,N.ITextModelService)],n),e.DataSource=n;class t{getHeight(){return 23}getTemplateId(I){return I instanceof b.FileReferences?_.id:v.id}}e.Delegate=t;let l=class{constructor(I){this._keybindingService=I}getKeyboardNavigationLabel(I){var k;if(I instanceof b.OneReference){const E=(k=I.parent.getPreview(I))===null||k===void 0?void 0:k.preview(I.range);if(E)return E.value}return o.basename(I.uri)}};l=Me([_e(0,u.IKeybindingService)],l),e.StringRepresentationProvider=l;class h{getId(I){return I instanceof b.OneReference?I.id:I.uri}}e.IdentityProvider=h;let m=class extends s.Disposable{constructor(I,k,E){super();this._uriLabel=k;const T=document.createElement("div");T.classList.add("reference-file"),this.file=this._register(new M.IconLabel(T,{supportHighlights:!0})),this.badge=new w.CountBadge(g.append(T,g.$(".count"))),this._register(d.attachBadgeStyler(this.badge,E)),I.appendChild(T)}set(I,k){let E=o.dirname(I.uri);this.file.setLabel(c.getBaseLabel(I.uri),this._uriLabel.getUriLabel(E,{relative:!0}),{title:this._uriLabel.getUriLabel(I.uri),matches:k});const T=I.children.length;this.badge.setCount(T),T>1?this.badge.setTitleFormat(p.localize(0,null,T)):this.badge.setTitleFormat(p.localize(1,null,T))}};m=Me([_e(1,S.ILabelService),_e(2,C.IThemeService)],m);let _=class Ot{constructor(I){this._instantiationService=I,this.templateId=Ot.id}renderTemplate(I){return this._instantiationService.createInstance(m,I)}renderElement(I,k,E){E.set(I.element,r.createMatches(I.filterData))}disposeTemplate(I){I.dispose()}};_.id="FileReferencesRenderer",_=Me([_e(0,a.IInstantiationService)],_),e.FileReferencesRenderer=_;class f{constructor(I){this.label=new i.HighlightedLabel(I,!1)}set(I,k){var E;const T=(E=I.parent.getPreview(I))===null||E===void 0?void 0:E.preview(I.range);if(!T||!T.value)this.label.set(`${o.basename(I.uri)}:${I.range.startLineNumber+1}:${I.range.startColumn+1}`);else{const{value:O,highlight:A}=T;k&&!r.FuzzyScore.isDefault(k)?(this.label.element.classList.toggle("referenceMatch",!1),this.label.set(O,r.createMatches(k))):(this.label.element.classList.toggle("referenceMatch",!0),this.label.set(O,[A]))}}}class v{constructor(){this.templateId=v.id}renderTemplate(I){return new f(I)}renderElement(I,k,E){E.set(I.element,I.filterData)}disposeTemplate(){}}e.OneReferenceRenderer=v,v.id="OneReferenceRenderer";class y{getWidgetAriaLabel(){return p.localize(2,null)}getAriaLabel(I){return I.ariaMessage}}e.AccessibilityProvider=y}),define(Q[258],J([0,1,53,11,49,2,108,20,88]),function(q,e,b,N,M,w,S,C,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractEditorNavigationQuickAccessProvider=void 0;class g{constructor(c){this.options=c,this.rangeHighlightDecorationId=void 0}provide(c,o){var s;const a=new w.DisposableStore;c.canAcceptInBackground=!!((s=this.options)===null||s===void 0?void 0:s.canAcceptInBackground),c.matchOnLabel=c.matchOnDescription=c.matchOnDetail=c.sortByLabel=!1;const u=a.add(new w.MutableDisposable);return u.value=this.doProvide(c,o),a.add(this.onDidActiveTextEditorControlChange(()=>{u.value=void 0,u.value=this.doProvide(c,o)})),a}doProvide(c,o){const s=new w.DisposableStore,a=this.activeTextEditorControl;if(a&&this.canProvideWithTextEditor(a)){const u={editor:a},r=S.getCodeEditor(a);if(r){let i=C.withNullAsUndefined(a.saveViewState());s.add(r.onDidChangeCursorPosition(()=>{i=C.withNullAsUndefined(a.saveViewState())})),u.restoreViewState=()=>{i&&a===this.activeTextEditorControl&&a.restoreViewState(i)},s.add(d.once(o.onCancellationRequested)(()=>{var n;return(n=u.restoreViewState)===null||n===void 0?void 0:n.call(u)}))}s.add(w.toDisposable(()=>this.clearDecorations(a))),s.add(this.provideWithTextEditor(u,c,o))}else s.add(this.provideWithoutTextEditor(c,o));return s}canProvideWithTextEditor(c){return!0}gotoLocation({editor:c},o){c.setSelection(o.range),c.revealRangeInCenter(o.range,0),o.preserveFocus||c.focus()}getModel(c){var o;return S.isDiffEditor(c)?(o=c.getModel())===null||o===void 0?void 0:o.modified:c.getModel()}addDecorations(c,o){c.changeDecorations(s=>{const a=[];this.rangeHighlightDecorationId&&(a.push(this.rangeHighlightDecorationId.overviewRulerDecorationId),a.push(this.rangeHighlightDecorationId.rangeHighlightId),this.rangeHighlightDecorationId=void 0);const u=[{range:o,options:{className:"rangeHighlight",isWholeLine:!0}},{range:o,options:{overviewRuler:{color:N.themeColorFromId(M.overviewRulerRangeHighlight),position:b.OverviewRulerLane.Full}}}],[r,i]=s.deltaDecorations(a,u);this.rangeHighlightDecorationId={rangeHighlightId:r,overviewRulerDecorationId:i}})}clearDecorations(c){const o=this.rangeHighlightDecorationId;o&&(c.changeDecorations(s=>{s.deltaDecorations([o.overviewRulerDecorationId,o.rangeHighlightId],[])}),this.rangeHighlightDecorationId=void 0)}}e.AbstractEditorNavigationQuickAccessProvider=g}),define(Q[602],J([0,1,501,2,258,108]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractGotoLineQuickAccessProvider=void 0;class S extends M.AbstractEditorNavigationQuickAccessProvider{constructor(){super({canAcceptInBackground:!0})}provideWithoutTextEditor(d){const g=b.localize(0,null);return d.items=[{label:g}],d.ariaLabel=g,N.Disposable.None}provideWithTextEditor(d,g,p){const c=d.editor,o=new N.DisposableStore;o.add(g.onDidAccept(u=>{const[r]=g.selectedItems;if(r){if(!this.isValidLineNumber(c,r.lineNumber))return;this.gotoLocation(d,{range:this.toRange(r.lineNumber,r.column),keyMods:g.keyMods,preserveFocus:u.inBackground}),u.inBackground||g.hide()}}));const s=()=>{const u=this.parsePosition(c,g.value.trim().substr(S.PREFIX.length)),r=this.getPickLabel(c,u.lineNumber,u.column);if(g.items=[{lineNumber:u.lineNumber,column:u.column,label:r}],g.ariaLabel=r,!this.isValidLineNumber(c,u.lineNumber)){this.clearDecorations(c);return}const i=this.toRange(u.lineNumber,u.column);c.revealRangeInCenter(i,0),this.addDecorations(c,i)};s(),o.add(g.onDidChangeValue(()=>s()));const a=w.getCodeEditor(c);return a&&a.getOptions().get(54).renderType===2&&(a.updateOptions({lineNumbers:"on"}),o.add(N.toDisposable(()=>a.updateOptions({lineNumbers:"relative"})))),o}toRange(d=1,g=1){return{startLineNumber:d,startColumn:g,endLineNumber:d,endColumn:g}}parsePosition(d,g){const p=g.split(/,|:|#/).map(o=>parseInt(o,10)).filter(o=>!isNaN(o)),c=this.lineCount(d)+1;return{lineNumber:p[0]>0?p[0]:c+p[0],column:p[1]}}getPickLabel(d,g,p){if(this.isValidLineNumber(d,g))return this.isValidColumn(d,g,p)?b.localize(1,null,g,p):b.localize(2,null,g);const c=d.getPosition()||{lineNumber:1,column:1},o=this.lineCount(d);return o>1?b.localize(3,null,c.lineNumber,c.column,o):b.localize(4,null,c.lineNumber,c.column)}isValidLineNumber(d,g){return!g||typeof g!="number"?!1:g>0&&g<=this.lineCount(d)}isValidColumn(d,g,p){if(!p||typeof p!="number")return!1;const c=this.getModel(d);if(!c)return!1;const o={lineNumber:g,column:p};return c.validatePosition(o).equals(o)}lineCount(d){var g,p;return(p=(g=this.getModel(d))===null||g===void 0?void 0:g.getLineCount())!==null&&p!==void 0?p:0}}e.AbstractGotoLineQuickAccessProvider=S,S.PREFIX=":"}),define(Q[603],J([0,1,502,23,2,3,258,18,245,8,286,27]),function(q,e,b,N,M,w,S,C,d,g,p,c){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractGotoSymbolQuickAccessProvider=void 0;class o extends S.AbstractEditorNavigationQuickAccessProvider{constructor(r=Object.create(null)){super(r);this.options=r,r.canAcceptInBackground=!0}provideWithoutTextEditor(r){return this.provideLabelPick(r,b.localize(0,null)),M.Disposable.None}provideWithTextEditor(r,i,n){const t=r.editor,l=this.getModel(t);return l?C.DocumentSymbolProviderRegistry.has(l)?this.doProvideWithEditorSymbols(r,l,i,n):this.doProvideWithoutEditorSymbols(r,l,i,n):M.Disposable.None}doProvideWithoutEditorSymbols(r,i,n,t){const l=new M.DisposableStore;return this.provideLabelPick(n,b.localize(1,null)),(()=>Ie(this,void 0,void 0,function*(){!(yield this.waitForLanguageSymbolRegistry(i,l))||t.isCancellationRequested||l.add(this.doProvideWithEditorSymbols(r,i,n,t))}))(),l}provideLabelPick(r,i){r.items=[{label:i,index:0,kind:14}],r.ariaLabel=i}waitForLanguageSymbolRegistry(r,i){return Ie(this,void 0,void 0,function*(){if(C.DocumentSymbolProviderRegistry.has(r))return!0;let n;const t=new Promise(h=>n=h),l=i.add(C.DocumentSymbolProviderRegistry.onDidChange(()=>{C.DocumentSymbolProviderRegistry.has(r)&&(l.dispose(),n(!0))}));return i.add(M.toDisposable(()=>n(!1))),t})}doProvideWithEditorSymbols(r,i,n,t){const l=r.editor,h=new M.DisposableStore;h.add(n.onDidAccept(y=>{const[L]=n.selectedItems;L&&L.range&&(this.gotoLocation(r,{range:L.range.selection,keyMods:n.keyMods,preserveFocus:y.inBackground}),y.inBackground||n.hide())})),h.add(n.onDidTriggerItemButton(({item:y})=>{y&&y.range&&(this.gotoLocation(r,{range:y.range.selection,keyMods:n.keyMods,forceSideBySide:!0}),n.hide())}));const m=this.getDocumentSymbols(i,t);let _;const f=()=>Ie(this,void 0,void 0,function*(){_==null||_.dispose(!0),n.busy=!1,_=new N.CancellationTokenSource(t),n.busy=!0;try{const y=p.prepareQuery(n.value.substr(o.PREFIX.length).trim()),L=yield this.doGetSymbolPicks(m,y,void 0,_.token);if(t.isCancellationRequested)return;L.length>0?n.items=L:y.original.length>0?this.provideLabelPick(n,b.localize(2,null)):this.provideLabelPick(n,b.localize(3,null))}finally{t.isCancellationRequested||(n.busy=!1)}});h.add(n.onDidChangeValue(()=>f())),f();let v=!0;return h.add(n.onDidChangeActive(()=>{const[y]=n.activeItems;if(y&&y.range){if(v){v=!1;return}l.revealRangeInCenter(y.range.selection,0),this.addDecorations(l,y.range.decoration)}})),h}doGetSymbolPicks(r,i,n,t){return Ie(this,void 0,void 0,function*(){const l=yield r;if(t.isCancellationRequested)return[];const h=i.original.indexOf(o.SCOPE_PREFIX)===0,m=h?1:0;let _,f;i.values&&i.values.length>1?(_=p.pieceToQuery(i.values[0]),f=p.pieceToQuery(i.values.slice(1))):_=i;const v=[];for(let k=0;km){let K=!1;if(_!==i&&([F,D]=p.scoreFuzzy2(O,Object.assign(Object.assign({},i),{values:void 0}),m,A),typeof F=="number"&&(K=!0)),typeof F!="number"&&([F,D]=p.scoreFuzzy2(O,_,m,A),typeof F!="number"))continue;if(!K&&f){if(B&&f.original.length>0&&([R,W]=p.scoreFuzzy2(B,f)),typeof R!="number")continue;typeof F=="number"&&(F+=R)}}const x=E.tags&&E.tags.indexOf(1)>=0;v.push({index:k,kind:E.kind,score:F,label:O,ariaLabel:T,description:B,highlights:x?void 0:{label:D,description:W},range:{selection:w.Range.collapseToStart(E.selectionRange),decoration:E.range},strikethrough:x,buttons:(()=>{var K,Y;const ee=((K=this.options)===null||K===void 0?void 0:K.openSideBySideDirection)?(Y=this.options)===null||Y===void 0?void 0:Y.openSideBySideDirection():void 0;if(!!ee)return[{iconClass:ee==="right"?c.Codicon.splitHorizontal.classNames:c.Codicon.splitVertical.classNames,tooltip:ee==="right"?b.localize(4,null):b.localize(5,null)}]})()})}const y=v.sort((k,E)=>h?this.compareByKindAndScore(k,E):this.compareByScore(k,E));let L=[];if(h){let k,E,T=0;function I(){E&&typeof k=="number"&&T>0&&(E.label=g.format(a[k]||s,T))}for(const O of y)k!==O.kind?(I(),k=O.kind,T=1,E={type:"separator"},L.push(E)):T++,L.push(O);I()}else y.length>0&&(L=[{label:b.localize(6,null,v.length),type:"separator"},...y]);return L})}compareByScore(r,i){if(typeof r.score!="number"&&typeof i.score=="number")return 1;if(typeof r.score=="number"&&typeof i.score!="number")return-1;if(typeof r.score=="number"&&typeof i.score=="number"){if(r.score>i.score)return-1;if(r.scorei.index?1:0}compareByKindAndScore(r,i){const n=a[r.kind]||s,t=a[i.kind]||s,l=n.localeCompare(t);return l===0?this.compareByScore(r,i):l}getDocumentSymbols(r,i){return Ie(this,void 0,void 0,function*(){const n=yield d.OutlineModel.create(r,i);return i.isCancellationRequested?[]:n.asListOfDocumentSymbols()})}}e.AbstractGotoSymbolQuickAccessProvider=o,o.PREFIX="@",o.SCOPE_PREFIX=":",o.PREFIX_BY_CATEGORY=`${o.PREFIX}${o.SCOPE_PREFIX}`;const s=b.localize(7,null),a={[5]:b.localize(8,null),[11]:b.localize(9,null),[8]:b.localize(10,null),[12]:b.localize(11,null),[4]:b.localize(12,null),[22]:b.localize(13,null),[23]:b.localize(14,null),[24]:b.localize(15,null),[10]:b.localize(16,null),[2]:b.localize(17,null),[3]:b.localize(18,null),[25]:b.localize(19,null),[1]:b.localize(20,null),[6]:b.localize(21,null),[9]:b.localize(22,null),[21]:b.localize(23,null),[14]:b.localize(24,null),[0]:b.localize(25,null),[17]:b.localize(26,null),[15]:b.localize(27,null),[16]:b.localize(28,null),[18]:b.localize(29,null),[19]:b.localize(30,null),[7]:b.localize(31,null),[13]:b.localize(32,null)}}),define(Q[604],J([0,1,2,14,504,16,22,11,37,350]),function(q,e,b,N,M,w,S,C,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.RenameInputField=e.CONTEXT_RENAME_INPUT_VISIBLE=void 0,e.CONTEXT_RENAME_INPUT_VISIBLE=new w.RawContextKey("renameInputVisible",!1);let g=class{constructor(c,o,s,a,u){this._editor=c,this._acceptKeybindings=o,this._themeService=s,this._keybindingService=a,this._disposables=new b.DisposableStore,this.allowEditorOverflow=!0,this._visibleContextKey=e.CONTEXT_RENAME_INPUT_VISIBLE.bindTo(u),this._editor.addContentWidget(this),this._disposables.add(this._editor.onDidChangeConfiguration(r=>{r.hasChanged(38)&&this._updateFont()})),this._disposables.add(s.onDidColorThemeChange(this._updateStyles,this))}dispose(){this._disposables.dispose(),this._editor.removeContentWidget(this)}getId(){return"__renameInputWidget"}getDomNode(){if(!this._domNode){this._domNode=document.createElement("div"),this._domNode.className="monaco-editor rename-box",this._input=document.createElement("input"),this._input.className="rename-input",this._input.type="text",this._input.setAttribute("aria-label",M.localize(0,null)),this._domNode.appendChild(this._input),this._label=document.createElement("div"),this._label.className="rename-label",this._domNode.appendChild(this._label);const c=()=>{var o,s;const[a,u]=this._acceptKeybindings;this._keybindingService.lookupKeybinding(a),this._label.innerText=M.localize(1,null,(o=this._keybindingService.lookupKeybinding(a))===null||o===void 0?void 0:o.getLabel(),(s=this._keybindingService.lookupKeybinding(u))===null||s===void 0?void 0:s.getLabel())};c(),this._disposables.add(this._keybindingService.onDidUpdateKeybindings(c)),this._updateFont(),this._updateStyles(this._themeService.getColorTheme())}return this._domNode}_updateStyles(c){var o,s,a,u;if(!(!this._input||!this._domNode)){const r=c.getColor(S.widgetShadow);this._domNode.style.backgroundColor=String((o=c.getColor(S.editorWidgetBackground))!==null&&o!==void 0?o:""),this._domNode.style.boxShadow=r?` 0 0 8px 2px ${r}`:"",this._domNode.style.color=String((s=c.getColor(S.inputForeground))!==null&&s!==void 0?s:""),this._input.style.backgroundColor=String((a=c.getColor(S.inputBackground))!==null&&a!==void 0?a:"");const i=c.getColor(S.inputBorder);this._input.style.borderWidth=i?"1px":"0px",this._input.style.borderStyle=i?"solid":"none",this._input.style.borderColor=(u=i==null?void 0:i.toString())!==null&&u!==void 0?u:"none"}}_updateFont(){if(!(!this._input||!this._label)){const c=this._editor.getOption(38);this._input.style.fontFamily=c.fontFamily,this._input.style.fontWeight=c.fontWeight,this._input.style.fontSize=`${c.fontSize}px`,this._label.style.fontSize=`${c.fontSize*.8}px`}}getPosition(){return this._visible?{position:this._position,preference:[2,1]}:null}afterRender(c){c||this.cancelInput(!0)}acceptInput(c){this._currentAcceptInput&&this._currentAcceptInput(c)}cancelInput(c){this._currentCancelInput&&this._currentCancelInput(c)}getInput(c,o,s,a,u,r){this._domNode.classList.toggle("preview",u),this._position=new N.Position(c.startLineNumber,c.startColumn),this._input.value=o,this._input.setAttribute("selectionStart",s.toString()),this._input.setAttribute("selectionEnd",a.toString()),this._input.size=Math.max((c.endColumn-c.startColumn)*1.1,20);const i=new b.DisposableStore;return new Promise(n=>{this._currentCancelInput=t=>(this._currentAcceptInput=void 0,this._currentCancelInput=void 0,n(t),!0),this._currentAcceptInput=t=>{if(this._input.value.trim().length===0||this._input.value===o){this.cancelInput(!0);return}this._currentAcceptInput=void 0,this._currentCancelInput=void 0,n({newName:this._input.value,wantsPreview:u&&t})},r.onCancellationRequested(()=>this.cancelInput(!0)),i.add(this._editor.onDidBlurEditorWidget(()=>this.cancelInput(!1))),this._show()}).finally(()=>{i.dispose(),this._hide()})}_show(){this._editor.revealLineInCenterIfOutsideViewport(this._position.lineNumber,0),this._visible=!0,this._visibleContextKey.set(!0),this._editor.layoutContentWidget(this),setTimeout(()=>{this._input.focus(),this._input.setSelectionRange(parseInt(this._input.getAttribute("selectionStart")),parseInt(this._input.getAttribute("selectionEnd")))},100)}_hide(){this._visible=!1,this._visibleContextKey.reset(),this._editor.layoutContentWidget(this)}};g=Me([_e(2,C.IThemeService),_e(3,d.IKeybindingService),_e(4,w.IContextKeyService)],g),e.RenameInputField=g}),define(Q[259],J([0,1,512,11,22,27]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SYMBOL_ICON_VARIABLE_FOREGROUND=e.SYMBOL_ICON_UNIT_FOREGROUND=e.SYMBOL_ICON_TYPEPARAMETER_FOREGROUND=e.SYMBOL_ICON_TEXT_FOREGROUND=e.SYMBOL_ICON_STRUCT_FOREGROUND=e.SYMBOL_ICON_STRING_FOREGROUND=e.SYMBOL_ICON_SNIPPET_FOREGROUND=e.SYMBOL_ICON_REFERENCE_FOREGROUND=e.SYMBOL_ICON_PROPERTY_FOREGROUND=e.SYMBOL_ICON_PACKAGE_FOREGROUND=e.SYMBOL_ICON_OPERATOR_FOREGROUND=e.SYMBOL_ICON_OBJECT_FOREGROUND=e.SYMBOL_ICON_NUMBER_FOREGROUND=e.SYMBOL_ICON_NULL_FOREGROUND=e.SYMBOL_ICON_NAMESPACE_FOREGROUND=e.SYMBOL_ICON_MODULE_FOREGROUND=e.SYMBOL_ICON_METHOD_FOREGROUND=e.SYMBOL_ICON_KEYWORD_FOREGROUND=e.SYMBOL_ICON_KEY_FOREGROUND=e.SYMBOL_ICON_INTERFACE_FOREGROUND=e.SYMBOL_ICON_FUNCTION_FOREGROUND=e.SYMBOL_ICON_FOLDER_FOREGROUND=e.SYMBOL_ICON_FILE_FOREGROUND=e.SYMBOL_ICON_FIELD_FOREGROUND=e.SYMBOL_ICON_EVENT_FOREGROUND=e.SYMBOL_ICON_ENUMERATOR_MEMBER_FOREGROUND=e.SYMBOL_ICON_ENUMERATOR_FOREGROUND=e.SYMBOL_ICON_CONSTRUCTOR_FOREGROUND=e.SYMBOL_ICON_CONSTANT_FOREGROUND=e.SYMBOL_ICON_COLOR_FOREGROUND=e.SYMBOL_ICON_CLASS_FOREGROUND=e.SYMBOL_ICON_BOOLEAN_FOREGROUND=e.SYMBOL_ICON_ARRAY_FOREGROUND=void 0,e.SYMBOL_ICON_ARRAY_FOREGROUND=M.registerColor("symbolIcon.arrayForeground",{dark:M.foreground,light:M.foreground,hc:M.foreground},b.localize(0,null)),e.SYMBOL_ICON_BOOLEAN_FOREGROUND=M.registerColor("symbolIcon.booleanForeground",{dark:M.foreground,light:M.foreground,hc:M.foreground},b.localize(1,null)),e.SYMBOL_ICON_CLASS_FOREGROUND=M.registerColor("symbolIcon.classForeground",{dark:"#EE9D28",light:"#D67E00",hc:"#EE9D28"},b.localize(2,null)),e.SYMBOL_ICON_COLOR_FOREGROUND=M.registerColor("symbolIcon.colorForeground",{dark:M.foreground,light:M.foreground,hc:M.foreground},b.localize(3,null)),e.SYMBOL_ICON_CONSTANT_FOREGROUND=M.registerColor("symbolIcon.constantForeground",{dark:M.foreground,light:M.foreground,hc:M.foreground},b.localize(4,null)),e.SYMBOL_ICON_CONSTRUCTOR_FOREGROUND=M.registerColor("symbolIcon.constructorForeground",{dark:"#B180D7",light:"#652D90",hc:"#B180D7"},b.localize(5,null)),e.SYMBOL_ICON_ENUMERATOR_FOREGROUND=M.registerColor("symbolIcon.enumeratorForeground",{dark:"#EE9D28",light:"#D67E00",hc:"#EE9D28"},b.localize(6,null)),e.SYMBOL_ICON_ENUMERATOR_MEMBER_FOREGROUND=M.registerColor("symbolIcon.enumeratorMemberForeground",{dark:"#75BEFF",light:"#007ACC",hc:"#75BEFF"},b.localize(7,null)),e.SYMBOL_ICON_EVENT_FOREGROUND=M.registerColor("symbolIcon.eventForeground",{dark:"#EE9D28",light:"#D67E00",hc:"#EE9D28"},b.localize(8,null)),e.SYMBOL_ICON_FIELD_FOREGROUND=M.registerColor("symbolIcon.fieldForeground",{dark:"#75BEFF",light:"#007ACC",hc:"#75BEFF"},b.localize(9,null)),e.SYMBOL_ICON_FILE_FOREGROUND=M.registerColor("symbolIcon.fileForeground",{dark:M.foreground,light:M.foreground,hc:M.foreground},b.localize(10,null)),e.SYMBOL_ICON_FOLDER_FOREGROUND=M.registerColor("symbolIcon.folderForeground",{dark:M.foreground,light:M.foreground,hc:M.foreground},b.localize(11,null)),e.SYMBOL_ICON_FUNCTION_FOREGROUND=M.registerColor("symbolIcon.functionForeground",{dark:"#B180D7",light:"#652D90",hc:"#B180D7"},b.localize(12,null)),e.SYMBOL_ICON_INTERFACE_FOREGROUND=M.registerColor("symbolIcon.interfaceForeground",{dark:"#75BEFF",light:"#007ACC",hc:"#75BEFF"},b.localize(13,null)),e.SYMBOL_ICON_KEY_FOREGROUND=M.registerColor("symbolIcon.keyForeground",{dark:M.foreground,light:M.foreground,hc:M.foreground},b.localize(14,null)),e.SYMBOL_ICON_KEYWORD_FOREGROUND=M.registerColor("symbolIcon.keywordForeground",{dark:M.foreground,light:M.foreground,hc:M.foreground},b.localize(15,null)),e.SYMBOL_ICON_METHOD_FOREGROUND=M.registerColor("symbolIcon.methodForeground",{dark:"#B180D7",light:"#652D90",hc:"#B180D7"},b.localize(16,null)),e.SYMBOL_ICON_MODULE_FOREGROUND=M.registerColor("symbolIcon.moduleForeground",{dark:M.foreground,light:M.foreground,hc:M.foreground},b.localize(17,null)),e.SYMBOL_ICON_NAMESPACE_FOREGROUND=M.registerColor("symbolIcon.namespaceForeground",{dark:M.foreground,light:M.foreground,hc:M.foreground},b.localize(18,null)),e.SYMBOL_ICON_NULL_FOREGROUND=M.registerColor("symbolIcon.nullForeground",{dark:M.foreground,light:M.foreground,hc:M.foreground},b.localize(19,null)),e.SYMBOL_ICON_NUMBER_FOREGROUND=M.registerColor("symbolIcon.numberForeground",{dark:M.foreground,light:M.foreground,hc:M.foreground},b.localize(20,null)),e.SYMBOL_ICON_OBJECT_FOREGROUND=M.registerColor("symbolIcon.objectForeground",{dark:M.foreground,light:M.foreground,hc:M.foreground},b.localize(21,null)),e.SYMBOL_ICON_OPERATOR_FOREGROUND=M.registerColor("symbolIcon.operatorForeground",{dark:M.foreground,light:M.foreground,hc:M.foreground},b.localize(22,null)),e.SYMBOL_ICON_PACKAGE_FOREGROUND=M.registerColor("symbolIcon.packageForeground",{dark:M.foreground,light:M.foreground,hc:M.foreground},b.localize(23,null)),e.SYMBOL_ICON_PROPERTY_FOREGROUND=M.registerColor("symbolIcon.propertyForeground",{dark:M.foreground,light:M.foreground,hc:M.foreground},b.localize(24,null)),e.SYMBOL_ICON_REFERENCE_FOREGROUND=M.registerColor("symbolIcon.referenceForeground",{dark:M.foreground,light:M.foreground,hc:M.foreground},b.localize(25,null)),e.SYMBOL_ICON_SNIPPET_FOREGROUND=M.registerColor("symbolIcon.snippetForeground",{dark:M.foreground,light:M.foreground,hc:M.foreground},b.localize(26,null)),e.SYMBOL_ICON_STRING_FOREGROUND=M.registerColor("symbolIcon.stringForeground",{dark:M.foreground,light:M.foreground,hc:M.foreground},b.localize(27,null)),e.SYMBOL_ICON_STRUCT_FOREGROUND=M.registerColor("symbolIcon.structForeground",{dark:M.foreground,light:M.foreground,hc:M.foreground},b.localize(28,null)),e.SYMBOL_ICON_TEXT_FOREGROUND=M.registerColor("symbolIcon.textForeground",{dark:M.foreground,light:M.foreground,hc:M.foreground},b.localize(29,null)),e.SYMBOL_ICON_TYPEPARAMETER_FOREGROUND=M.registerColor("symbolIcon.typeParameterForeground",{dark:M.foreground,light:M.foreground,hc:M.foreground},b.localize(30,null)),e.SYMBOL_ICON_UNIT_FOREGROUND=M.registerColor("symbolIcon.unitForeground",{dark:M.foreground,light:M.foreground,hc:M.foreground},b.localize(31,null)),e.SYMBOL_ICON_VARIABLE_FOREGROUND=M.registerColor("symbolIcon.variableForeground",{dark:"#75BEFF",light:"#007ACC",hc:"#75BEFF"},b.localize(32,null)),N.registerThemingParticipant((S,C)=>{const d=S.getColor(e.SYMBOL_ICON_ARRAY_FOREGROUND);d&&C.addRule(`${w.Codicon.symbolArray.cssSelector} { color: ${d}; }`);const g=S.getColor(e.SYMBOL_ICON_BOOLEAN_FOREGROUND);g&&C.addRule(`${w.Codicon.symbolBoolean.cssSelector} { color: ${g}; }`);const p=S.getColor(e.SYMBOL_ICON_CLASS_FOREGROUND);p&&C.addRule(`${w.Codicon.symbolClass.cssSelector} { color: ${p}; }`);const c=S.getColor(e.SYMBOL_ICON_METHOD_FOREGROUND);c&&C.addRule(`${w.Codicon.symbolMethod.cssSelector} { color: ${c}; }`);const o=S.getColor(e.SYMBOL_ICON_COLOR_FOREGROUND);o&&C.addRule(`${w.Codicon.symbolColor.cssSelector} { color: ${o}; }`);const s=S.getColor(e.SYMBOL_ICON_CONSTANT_FOREGROUND);s&&C.addRule(`${w.Codicon.symbolConstant.cssSelector} { color: ${s}; }`);const a=S.getColor(e.SYMBOL_ICON_CONSTRUCTOR_FOREGROUND);a&&C.addRule(`${w.Codicon.symbolConstructor.cssSelector} { color: ${a}; }`);const u=S.getColor(e.SYMBOL_ICON_ENUMERATOR_FOREGROUND);u&&C.addRule(` + ${w.Codicon.symbolValue.cssSelector},${w.Codicon.symbolEnum.cssSelector} { color: ${u}; }`);const r=S.getColor(e.SYMBOL_ICON_ENUMERATOR_MEMBER_FOREGROUND);r&&C.addRule(`${w.Codicon.symbolEnumMember.cssSelector} { color: ${r}; }`);const i=S.getColor(e.SYMBOL_ICON_EVENT_FOREGROUND);i&&C.addRule(`${w.Codicon.symbolEvent.cssSelector} { color: ${i}; }`);const n=S.getColor(e.SYMBOL_ICON_FIELD_FOREGROUND);n&&C.addRule(`${w.Codicon.symbolField.cssSelector} { color: ${n}; }`);const t=S.getColor(e.SYMBOL_ICON_FILE_FOREGROUND);t&&C.addRule(`${w.Codicon.symbolFile.cssSelector} { color: ${t}; }`);const l=S.getColor(e.SYMBOL_ICON_FOLDER_FOREGROUND);l&&C.addRule(`${w.Codicon.symbolFolder.cssSelector} { color: ${l}; }`);const h=S.getColor(e.SYMBOL_ICON_FUNCTION_FOREGROUND);h&&C.addRule(`${w.Codicon.symbolFunction.cssSelector} { color: ${h}; }`);const m=S.getColor(e.SYMBOL_ICON_INTERFACE_FOREGROUND);m&&C.addRule(`${w.Codicon.symbolInterface.cssSelector} { color: ${m}; }`);const _=S.getColor(e.SYMBOL_ICON_KEY_FOREGROUND);_&&C.addRule(`${w.Codicon.symbolKey.cssSelector} { color: ${_}; }`);const f=S.getColor(e.SYMBOL_ICON_KEYWORD_FOREGROUND);f&&C.addRule(`${w.Codicon.symbolKeyword.cssSelector} { color: ${f}; }`);const v=S.getColor(e.SYMBOL_ICON_MODULE_FOREGROUND);v&&C.addRule(`${w.Codicon.symbolModule.cssSelector} { color: ${v}; }`);const y=S.getColor(e.SYMBOL_ICON_NAMESPACE_FOREGROUND);y&&C.addRule(`${w.Codicon.symbolNamespace.cssSelector} { color: ${y}; }`);const L=S.getColor(e.SYMBOL_ICON_NULL_FOREGROUND);L&&C.addRule(`${w.Codicon.symbolNull.cssSelector} { color: ${L}; }`);const I=S.getColor(e.SYMBOL_ICON_NUMBER_FOREGROUND);I&&C.addRule(`${w.Codicon.symbolNumber.cssSelector} { color: ${I}; }`);const k=S.getColor(e.SYMBOL_ICON_OBJECT_FOREGROUND);k&&C.addRule(`${w.Codicon.symbolObject.cssSelector} { color: ${k}; }`);const E=S.getColor(e.SYMBOL_ICON_OPERATOR_FOREGROUND);E&&C.addRule(`${w.Codicon.symbolOperator.cssSelector} { color: ${E}; }`);const T=S.getColor(e.SYMBOL_ICON_PACKAGE_FOREGROUND);T&&C.addRule(`${w.Codicon.symbolPackage.cssSelector} { color: ${T}; }`);const O=S.getColor(e.SYMBOL_ICON_PROPERTY_FOREGROUND);O&&C.addRule(`${w.Codicon.symbolProperty.cssSelector} { color: ${O}; }`);const A=S.getColor(e.SYMBOL_ICON_REFERENCE_FOREGROUND);A&&C.addRule(`${w.Codicon.symbolReference.cssSelector} { color: ${A}; }`);const B=S.getColor(e.SYMBOL_ICON_SNIPPET_FOREGROUND);B&&C.addRule(`${w.Codicon.symbolSnippet.cssSelector} { color: ${B}; }`);const F=S.getColor(e.SYMBOL_ICON_STRING_FOREGROUND);F&&C.addRule(`${w.Codicon.symbolString.cssSelector} { color: ${F}; }`);const D=S.getColor(e.SYMBOL_ICON_STRUCT_FOREGROUND);D&&C.addRule(`${w.Codicon.symbolStruct.cssSelector} { color: ${D}; }`);const R=S.getColor(e.SYMBOL_ICON_TEXT_FOREGROUND);R&&C.addRule(`${w.Codicon.symbolText.cssSelector} { color: ${R}; }`);const W=S.getColor(e.SYMBOL_ICON_TYPEPARAMETER_FOREGROUND);W&&C.addRule(`${w.Codicon.symbolTypeParameter.cssSelector} { color: ${W}; }`);const x=S.getColor(e.SYMBOL_ICON_UNIT_FOREGROUND);x&&C.addRule(`${w.Codicon.symbolUnit.cssSelector} { color: ${x}; }`);const K=S.getColor(e.SYMBOL_ICON_VARIABLE_FOREGROUND);K&&C.addRule(`${w.Codicon.symbolVariable.cssSelector} { color: ${K}; }`)})}),define(Q[605],J([0,1,7,43,583,16,11]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.StandaloneCodeEditorServiceImpl=void 0;let C=class extends M.CodeEditorServiceImpl{constructor(g,p,c){super(g,c);this.onCodeEditorAdd(()=>this._checkContextKey()),this.onCodeEditorRemove(()=>this._checkContextKey()),this._editorIsOpen=p.createKey("editorIsOpen",!1)}_checkContextKey(){let g=!1;for(const p of this.listCodeEditors())if(!p.isSimpleWidget){g=!0;break}this._editorIsOpen.set(g)}getActiveCodeEditor(){return null}openCodeEditor(g,p,c){return p?Promise.resolve(this.doOpenEditor(p,g)):Promise.resolve(null)}doOpenEditor(g,p){if(!this.findModel(g,p.resource)){if(p.resource){const s=p.resource.scheme;if(s===N.Schemas.http||s===N.Schemas.https)return b.windowOpenNoOpener(p.resource.toString()),g}return null}const o=p.options?p.options.selection:null;if(o)if(typeof o.endLineNumber=="number"&&typeof o.endColumn=="number")g.setSelection(o),g.revealRangeInCenter(o,1);else{const s={lineNumber:o.startLineNumber,column:o.startColumn};g.setPosition(s),g.revealPositionInCenter(s,1)}return g}findModel(g,p){const c=g.getModel();return c&&c.uri.toString()!==p.toString()?null:c}};C=Me([_e(1,w.IContextKeyService),_e(2,S.IThemeService)],C),e.StandaloneCodeEditorServiceImpl=C}),define(Q[606],J([0,1,49,22]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hc_black=e.vs_dark=e.vs=void 0,e.vs={base:"vs",inherit:!1,rules:[{token:"",foreground:"000000",background:"fffffe"},{token:"invalid",foreground:"cd3131"},{token:"emphasis",fontStyle:"italic"},{token:"strong",fontStyle:"bold"},{token:"variable",foreground:"001188"},{token:"variable.predefined",foreground:"4864AA"},{token:"constant",foreground:"dd0000"},{token:"comment",foreground:"008000"},{token:"number",foreground:"098658"},{token:"number.hex",foreground:"3030c0"},{token:"regexp",foreground:"800000"},{token:"annotation",foreground:"808080"},{token:"type",foreground:"008080"},{token:"delimiter",foreground:"000000"},{token:"delimiter.html",foreground:"383838"},{token:"delimiter.xml",foreground:"0000FF"},{token:"tag",foreground:"800000"},{token:"tag.id.pug",foreground:"4F76AC"},{token:"tag.class.pug",foreground:"4F76AC"},{token:"meta.scss",foreground:"800000"},{token:"metatag",foreground:"e00000"},{token:"metatag.content.html",foreground:"FF0000"},{token:"metatag.html",foreground:"808080"},{token:"metatag.xml",foreground:"808080"},{token:"metatag.php",fontStyle:"bold"},{token:"key",foreground:"863B00"},{token:"string.key.json",foreground:"A31515"},{token:"string.value.json",foreground:"0451A5"},{token:"attribute.name",foreground:"FF0000"},{token:"attribute.value",foreground:"0451A5"},{token:"attribute.value.number",foreground:"098658"},{token:"attribute.value.unit",foreground:"098658"},{token:"attribute.value.html",foreground:"0000FF"},{token:"attribute.value.xml",foreground:"0000FF"},{token:"string",foreground:"A31515"},{token:"string.html",foreground:"0000FF"},{token:"string.sql",foreground:"FF0000"},{token:"string.yaml",foreground:"0451A5"},{token:"keyword",foreground:"0000FF"},{token:"keyword.json",foreground:"0451A5"},{token:"keyword.flow",foreground:"AF00DB"},{token:"keyword.flow.scss",foreground:"0000FF"},{token:"operator.scss",foreground:"666666"},{token:"operator.sql",foreground:"778899"},{token:"operator.swift",foreground:"666666"},{token:"predefined.sql",foreground:"C700C7"}],colors:{[N.editorBackground]:"#FFFFFE",[N.editorForeground]:"#000000",[N.editorInactiveSelection]:"#E5EBF1",[b.editorIndentGuides]:"#D3D3D3",[b.editorActiveIndentGuides]:"#939393",[N.editorSelectionHighlight]:"#ADD6FF4D"}},e.vs_dark={base:"vs-dark",inherit:!1,rules:[{token:"",foreground:"D4D4D4",background:"1E1E1E"},{token:"invalid",foreground:"f44747"},{token:"emphasis",fontStyle:"italic"},{token:"strong",fontStyle:"bold"},{token:"variable",foreground:"74B0DF"},{token:"variable.predefined",foreground:"4864AA"},{token:"variable.parameter",foreground:"9CDCFE"},{token:"constant",foreground:"569CD6"},{token:"comment",foreground:"608B4E"},{token:"number",foreground:"B5CEA8"},{token:"number.hex",foreground:"5BB498"},{token:"regexp",foreground:"B46695"},{token:"annotation",foreground:"cc6666"},{token:"type",foreground:"3DC9B0"},{token:"delimiter",foreground:"DCDCDC"},{token:"delimiter.html",foreground:"808080"},{token:"delimiter.xml",foreground:"808080"},{token:"tag",foreground:"569CD6"},{token:"tag.id.pug",foreground:"4F76AC"},{token:"tag.class.pug",foreground:"4F76AC"},{token:"meta.scss",foreground:"A79873"},{token:"meta.tag",foreground:"CE9178"},{token:"metatag",foreground:"DD6A6F"},{token:"metatag.content.html",foreground:"9CDCFE"},{token:"metatag.html",foreground:"569CD6"},{token:"metatag.xml",foreground:"569CD6"},{token:"metatag.php",fontStyle:"bold"},{token:"key",foreground:"9CDCFE"},{token:"string.key.json",foreground:"9CDCFE"},{token:"string.value.json",foreground:"CE9178"},{token:"attribute.name",foreground:"9CDCFE"},{token:"attribute.value",foreground:"CE9178"},{token:"attribute.value.number.css",foreground:"B5CEA8"},{token:"attribute.value.unit.css",foreground:"B5CEA8"},{token:"attribute.value.hex.css",foreground:"D4D4D4"},{token:"string",foreground:"CE9178"},{token:"string.sql",foreground:"FF0000"},{token:"keyword",foreground:"569CD6"},{token:"keyword.flow",foreground:"C586C0"},{token:"keyword.json",foreground:"CE9178"},{token:"keyword.flow.scss",foreground:"569CD6"},{token:"operator.scss",foreground:"909090"},{token:"operator.sql",foreground:"778899"},{token:"operator.swift",foreground:"909090"},{token:"predefined.sql",foreground:"FF00FF"}],colors:{[N.editorBackground]:"#1E1E1E",[N.editorForeground]:"#D4D4D4",[N.editorInactiveSelection]:"#3A3D41",[b.editorIndentGuides]:"#404040",[b.editorActiveIndentGuides]:"#707070",[N.editorSelectionHighlight]:"#ADD6FF26"}},e.hc_black={base:"hc-black",inherit:!1,rules:[{token:"",foreground:"FFFFFF",background:"000000"},{token:"invalid",foreground:"f44747"},{token:"emphasis",fontStyle:"italic"},{token:"strong",fontStyle:"bold"},{token:"variable",foreground:"1AEBFF"},{token:"variable.parameter",foreground:"9CDCFE"},{token:"constant",foreground:"569CD6"},{token:"comment",foreground:"608B4E"},{token:"number",foreground:"FFFFFF"},{token:"regexp",foreground:"C0C0C0"},{token:"annotation",foreground:"569CD6"},{token:"type",foreground:"3DC9B0"},{token:"delimiter",foreground:"FFFF00"},{token:"delimiter.html",foreground:"FFFF00"},{token:"tag",foreground:"569CD6"},{token:"tag.id.pug",foreground:"4F76AC"},{token:"tag.class.pug",foreground:"4F76AC"},{token:"meta",foreground:"D4D4D4"},{token:"meta.tag",foreground:"CE9178"},{token:"metatag",foreground:"569CD6"},{token:"metatag.content.html",foreground:"1AEBFF"},{token:"metatag.html",foreground:"569CD6"},{token:"metatag.xml",foreground:"569CD6"},{token:"metatag.php",fontStyle:"bold"},{token:"key",foreground:"9CDCFE"},{token:"string.key",foreground:"9CDCFE"},{token:"string.value",foreground:"CE9178"},{token:"attribute.name",foreground:"569CD6"},{token:"attribute.value",foreground:"3FF23F"},{token:"string",foreground:"CE9178"},{token:"string.sql",foreground:"FF0000"},{token:"keyword",foreground:"569CD6"},{token:"keyword.flow",foreground:"C586C0"},{token:"operator.sql",foreground:"778899"},{token:"operator.swift",foreground:"909090"},{token:"predefined.sql",foreground:"FF00FF"}],colors:{[N.editorBackground]:"#000000",[N.editorForeground]:"#FFFFFF",[b.editorIndentGuides]:"#FFFFFF",[b.editorActiveIndentGuides]:"#FFFFFF"}}}),define(Q[34],J([0,1,48,9,16,26,2,6,11,54,71,27]),function(q,e,b,N,M,w,S,C,d,g,p,c){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MenuItemAction=e.SubmenuItemAction=e.MenuRegistry=e.IMenuService=e.MenuId=e.isIMenuItem=void 0;function o(r){return r.command!==void 0}e.isIMenuItem=o;class s{constructor(i){this.id=s._idPool++,this._debugName=i}}e.MenuId=s,s._idPool=0,s.CommandPalette=new s("CommandPalette"),s.EditorContext=new s("EditorContext"),s.EditorContextPeek=new s("EditorContextPeek"),s.MenubarEditMenu=new s("MenubarEditMenu"),s.MenubarGoMenu=new s("MenubarGoMenu"),s.MenubarSelectionMenu=new s("MenubarSelectionMenu"),e.IMenuService=N.createDecorator("menuService"),e.MenuRegistry=new class{constructor(){this._commands=new Map,this._menuItems=new Map,this._onDidChangeMenu=new C.Emitter,this.onDidChangeMenu=this._onDidChangeMenu.event,this._commandPaletteChangeEvent={has:r=>r===s.CommandPalette}}addCommand(r){return this.addCommands(g.Iterable.single(r))}addCommands(r){for(const i of r)this._commands.set(i.id,i);return this._onDidChangeMenu.fire(this._commandPaletteChangeEvent),S.toDisposable(()=>{let i=!1;for(const n of r)i=this._commands.delete(n.id)||i;i&&this._onDidChangeMenu.fire(this._commandPaletteChangeEvent)})}getCommand(r){return this._commands.get(r)}getCommands(){const r=new Map;return this._commands.forEach((i,n)=>r.set(n,i)),r}appendMenuItem(r,i){return this.appendMenuItems(g.Iterable.single({id:r,item:i}))}appendMenuItems(r){const i=new Set,n=new p.LinkedList;for(const{id:t,item:l}of r){let h=this._menuItems.get(t);h||(h=new p.LinkedList,this._menuItems.set(t,h)),n.push(h.push(l)),i.add(t)}return this._onDidChangeMenu.fire(i),S.toDisposable(()=>{if(n.size>0){for(let t of n)t();this._onDidChangeMenu.fire(i),n.clear()}})}getMenuItems(r){let i;return this._menuItems.has(r)?i=[...this._menuItems.get(r)]:i=[],r===s.CommandPalette&&this._appendImplicitItems(i),i}_appendImplicitItems(r){const i=new Set;for(const n of r)o(n)&&(i.add(n.command.id),n.alt&&i.add(n.alt.id));this._commands.forEach((n,t)=>{i.has(t)||r.push({command:n})})}};class a extends b.SubmenuAction{constructor(i,n,t,l){super(`submenuitem.${i.submenu.id}`,typeof i.title=="string"?i.title:i.title.value,[],"submenu");this.item=i,this._menuService=n,this._contextKeyService=t,this._options=l}get actions(){const i=[],n=this._menuService.createMenu(this.item.submenu,this._contextKeyService),t=n.getActions(this._options);n.dispose();for(const[,l]of t)l.length>0&&(i.push(...l),i.push(new b.Separator));return i.length&&i.pop(),i}}e.SubmenuItemAction=a;let u=class Pt{constructor(i,n,t,l,h){var m;if(this._commandService=h,this.id=i.id,this.label=typeof i.title=="string"?i.title:i.title.value,this.tooltip=(m=i.tooltip)!==null&&m!==void 0?m:"",this.enabled=!i.precondition||l.contextMatchesRules(i.precondition),this.checked=!1,i.toggled){const _=i.toggled.condition?i.toggled:{condition:i.toggled};this.checked=l.contextMatchesRules(_.condition),this.checked&&_.tooltip&&(this.tooltip=typeof _.tooltip=="string"?_.tooltip:_.tooltip.value)}this.item=i,this.alt=n?new Pt(n,void 0,t,l,h):void 0,this._options=t,d.ThemeIcon.isThemeIcon(i.icon)&&(this.class=c.CSSIcon.asClassName(i.icon))}dispose(){}run(...i){var n,t;let l=[];return((n=this._options)===null||n===void 0?void 0:n.arg)&&(l=[...l,this._options.arg]),((t=this._options)===null||t===void 0?void 0:t.shouldForwardArgs)&&(l=[...l,...i]),this._commandService.executeCommand(this.id,...l)}};u=Me([_e(3,M.IContextKeyService),_e(4,w.ICommandService)],u),e.MenuItemAction=u}),define(Q[13],J([0,1,447,24,28,14,36,67,34,26,16,86,33,87,20]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SelectAllCommand=e.RedoCommand=e.UndoCommand=e.EditorExtensionsRegistry=e.registerEditorContribution=e.registerInstantiatedEditorAction=e.registerMultiEditorAction=e.registerEditorAction=e.registerEditorCommand=e.registerModelCommand=e.registerModelAndPositionCommand=e.MultiEditorAction=e.EditorAction=e.EditorCommand=e.ProxyCommand=e.MultiCommand=e.Command=void 0;class u{constructor(A){this.id=A.id,this.precondition=A.precondition,this._kbOpts=A.kbOpts,this._menuOpts=A.menuOpts,this._description=A.description}register(){if(Array.isArray(this._menuOpts)?this._menuOpts.forEach(this._registerMenuItem,this):this._menuOpts&&this._registerMenuItem(this._menuOpts),this._kbOpts){let A=this._kbOpts.kbExpr;this.precondition&&(A?A=p.ContextKeyExpr.and(A,this.precondition):A=this.precondition),c.KeybindingsRegistry.registerCommandAndKeybindingRule({id:this.id,handler:(B,F)=>this.runCommand(B,F),weight:this._kbOpts.weight,args:this._kbOpts.args,when:A,primary:this._kbOpts.primary,secondary:this._kbOpts.secondary,win:this._kbOpts.win,linux:this._kbOpts.linux,mac:this._kbOpts.mac,description:this._description})}else g.CommandsRegistry.registerCommand({id:this.id,handler:(A,B)=>this.runCommand(A,B),description:this._description})}_registerMenuItem(A){d.MenuRegistry.appendMenuItem(A.menuId,{group:A.group,command:{id:this.id,title:A.title,icon:A.icon,precondition:this.precondition},when:A.when,order:A.order})}}e.Command=u;class r extends u{constructor(){super(...arguments);this._implementations=[]}addImplementation(A,B){return this._implementations.push([A,B]),this._implementations.sort((F,D)=>D[0]-F[0]),{dispose:()=>{for(let F=0;F{if(!!R.get(p.IContextKeyService).contextMatchesRules(a.withNullAsUndefined(this.precondition)))return this.runEditorCommand(R,D,B)})}}e.EditorCommand=n;class t extends n{constructor(A){super(t.convertOptions(A));this.label=A.label,this.alias=A.alias}static convertOptions(A){let B;Array.isArray(A.menuOpts)?B=A.menuOpts:A.menuOpts?B=[A.menuOpts]:B=[];function F(D){return D.menuId||(D.menuId=d.MenuId.EditorContext),D.title||(D.title=A.label),D.when=p.ContextKeyExpr.and(A.precondition,D.when),D}return Array.isArray(A.contextMenuOpts)?B.push(...A.contextMenuOpts.map(F)):A.contextMenuOpts&&B.push(F(A.contextMenuOpts)),A.menuOpts=B,A}runEditorCommand(A,B,F){return this.reportTelemetry(A,B),this.run(A,B,F||{})}reportTelemetry(A,B){A.get(s.ITelemetryService).publicLog2("editorActionInvoked",{name:this.label,id:this.id})}}e.EditorAction=t;class l extends t{constructor(){super(...arguments);this._implementations=[]}addImplementation(A,B){return this._implementations.push([A,B]),this._implementations.sort((F,D)=>D[0]-F[0]),{dispose:()=>{for(let F=0;Fnew Promise((K,Y)=>{try{const ee=A(x.object.textEditorModel,w.Position.lift(R),F.slice(2));K(ee)}catch(ee){Y(ee)}}).finally(()=>{x.dispose()}))})}e.registerModelAndPositionCommand=h;function m(O,A){g.CommandsRegistry.registerCommand(O,function(B,...F){const[D]=F;a.assertType(N.URI.isUri(D));const R=B.get(S.IModelService).getModel(D);return R?A(R,...F.slice(1)):B.get(C.ITextModelService).createModelReference(D).then(W=>new Promise((x,K)=>{try{const Y=A(W.object.textEditorModel,F.slice(1));x(Y)}catch(Y){K(Y)}}).finally(()=>{W.dispose()}))})}e.registerModelCommand=m;function _(O){return E.INSTANCE.registerEditorCommand(O),O}e.registerEditorCommand=_;function f(O){const A=new O;return E.INSTANCE.registerEditorAction(A),A}e.registerEditorAction=f;function v(O){return E.INSTANCE.registerEditorAction(O),O}e.registerMultiEditorAction=v;function y(O){E.INSTANCE.registerEditorAction(O)}e.registerInstantiatedEditorAction=y;function L(O,A){E.INSTANCE.registerEditorContribution(O,A)}e.registerEditorContribution=L;var I;(function(O){function A(W){return E.INSTANCE.getEditorCommand(W)}O.getEditorCommand=A;function B(){return E.INSTANCE.getEditorActions()}O.getEditorActions=B;function F(){return E.INSTANCE.getEditorContributions()}O.getEditorContributions=F;function D(W){return E.INSTANCE.getEditorContributions().filter(x=>W.indexOf(x.id)>=0)}O.getSomeEditorContributions=D;function R(){return E.INSTANCE.getDiffEditorContributions()}O.getDiffEditorContributions=R})(I=e.EditorExtensionsRegistry||(e.EditorExtensionsRegistry={}));const k={EditorCommonContributions:"editor.contributions"};class E{constructor(){this.editorContributions=[],this.diffEditorContributions=[],this.editorActions=[],this.editorCommands=Object.create(null)}registerEditorContribution(A,B){this.editorContributions.push({id:A,ctor:B})}getEditorContributions(){return this.editorContributions.slice(0)}getDiffEditorContributions(){return this.diffEditorContributions.slice(0)}registerEditorAction(A){A.register(),this.editorActions.push(A)}getEditorActions(){return this.editorActions.slice(0)}registerEditorCommand(A){A.register(),this.editorCommands[A.id]=A}getEditorCommand(A){return this.editorCommands[A]||null}}E.INSTANCE=new E,o.Registry.add(k.EditorCommonContributions,E.INSTANCE);function T(O){return O.register(),O}e.UndoCommand=T(new r({id:"undo",precondition:void 0,kbOpts:{weight:0,primary:2048|56},menuOpts:[{menuId:d.MenuId.MenubarEditMenu,group:"1_do",title:b.localize(0,null),order:1},{menuId:d.MenuId.CommandPalette,group:"",title:b.localize(1,null),order:1}]})),T(new i(e.UndoCommand,{id:"default:undo",precondition:void 0})),e.RedoCommand=T(new r({id:"redo",precondition:void 0,kbOpts:{weight:0,primary:2048|55,secondary:[2048|1024|56],mac:{primary:2048|1024|56}},menuOpts:[{menuId:d.MenuId.MenubarEditMenu,group:"1_do",title:b.localize(2,null),order:2},{menuId:d.MenuId.CommandPalette,group:"",title:b.localize(3,null),order:1}]})),T(new i(e.RedoCommand,{id:"default:redo",precondition:void 0})),e.SelectAllCommand=T(new r({id:"editor.action.selectAll",precondition:void 0,kbOpts:{weight:0,kbExpr:null,primary:2048|31},menuOpts:[{menuId:d.MenuId.MenubarSelectionMenu,group:"1_basic",title:b.localize(4,null),order:1},{menuId:d.MenuId.CommandPalette,group:"",title:b.localize(5,null),order:1}]}))}),define(Q[188],J([0,1,444,35,20,13,28,536,42,181,241,182,14,3,25,16,86]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CoreEditingCommands=e.CoreNavigationCommands=e.RevealLine_=e.EditorScroll_=e.CoreEditorCommand=void 0;const i=0;class n extends w.EditorCommand{runEditorCommand(E,T,O){const A=T._getViewModel();!A||this.runCoreEditorCommand(A,O||{})}}e.CoreEditorCommand=n;var t;(function(k){const E=function(O){if(!M.isObject(O))return!1;const A=O;return!(!M.isString(A.to)||!M.isUndefined(A.by)&&!M.isString(A.by)||!M.isUndefined(A.value)&&!M.isNumber(A.value)||!M.isUndefined(A.revealCursor)&&!M.isBoolean(A.revealCursor))};k.description={description:"Scroll editor in the given direction",args:[{name:"Editor scroll argument object",description:"Property-value pairs that can be passed through this argument:\n * 'to': A mandatory direction value.\n ```\n 'up', 'down'\n ```\n * 'by': Unit to move. Default is computed based on 'to' value.\n ```\n 'line', 'wrappedLine', 'page', 'halfPage'\n ```\n * 'value': Number of units to move. Default is '1'.\n * 'revealCursor': If 'true' reveals the cursor if it is outside view port.\n ",constraint:E,schema:{type:"object",required:["to"],properties:{to:{type:"string",enum:["up","down"]},by:{type:"string",enum:["line","wrappedLine","page","halfPage"]},value:{type:"number",default:1},revealCursor:{type:"boolean"}}}}]},k.RawDirection={Up:"up",Down:"down"},k.RawUnit={Line:"line",WrappedLine:"wrappedLine",Page:"page",HalfPage:"halfPage"};function T(O){let A;switch(O.to){case k.RawDirection.Up:A=1;break;case k.RawDirection.Down:A=2;break;default:return null}let B;switch(O.by){case k.RawUnit.Line:B=1;break;case k.RawUnit.WrappedLine:B=2;break;case k.RawUnit.Page:B=3;break;case k.RawUnit.HalfPage:B=4;break;default:B=2}const F=Math.floor(O.value||1),D=!!O.revealCursor;return{direction:A,unit:B,value:F,revealCursor:D,select:!!O.select}}k.parse=T})(t=e.EditorScroll_||(e.EditorScroll_={}));var l;(function(k){const E=function(T){if(!M.isObject(T))return!1;const O=T;return!(!M.isNumber(O.lineNumber)&&!M.isString(O.lineNumber)||!M.isUndefined(O.at)&&!M.isString(O.at))};k.description={description:"Reveal the given line at the given logical position",args:[{name:"Reveal line argument object",description:"Property-value pairs that can be passed through this argument:\n * 'lineNumber': A mandatory line number value.\n * 'at': Logical position at which line has to be revealed.\n ```\n 'top', 'center', 'bottom'\n ```\n ",constraint:E,schema:{type:"object",required:["lineNumber"],properties:{lineNumber:{type:["number","string"]},at:{type:"string",enum:["top","center","bottom"]}}}}]},k.RawAtArgument={Top:"top",Center:"center",Bottom:"bottom"}})(l=e.RevealLine_||(e.RevealLine_={}));class h{constructor(E){E.addImplementation(1e4,(T,O)=>{const A=T.get(S.ICodeEditorService).getFocusedCodeEditor();return A&&A.hasTextFocus()?this._runEditorCommand(T,A,O):!1}),E.addImplementation(1e3,(T,O)=>{const A=document.activeElement;return A&&["input","textarea"].indexOf(A.tagName.toLowerCase())>=0?(this.runDOMCommand(),!0):!1}),E.addImplementation(0,(T,O)=>{const A=T.get(S.ICodeEditorService).getActiveCodeEditor();return A?(A.focus(),this._runEditorCommand(T,A,O)):!1})}_runEditorCommand(E,T,O){const A=this.runEditorCommand(E,T,O);return A||!0}}var m;(function(k){class E extends n{constructor(z){super(z);this._inSelectionMode=z.inSelectionMode}runCoreEditorCommand(z,P){z.model.pushStackElement(),z.setCursorStates(P.source,3,[p.CursorMoveCommands.moveTo(z,z.getPrimaryCursorState(),this._inSelectionMode,P.position,P.viewPosition)]),z.revealPrimaryCursor(P.source,!0)}}k.MoveTo=w.registerEditorCommand(new E({id:"_moveTo",inSelectionMode:!1,precondition:void 0})),k.MoveToSelect=w.registerEditorCommand(new E({id:"_moveToSelect",inSelectionMode:!0,precondition:void 0}));class T extends n{runCoreEditorCommand(z,P){z.model.pushStackElement();const V=this._getColumnSelectResult(z,z.getPrimaryCursorState(),z.getCursorColumnSelectData(),P);z.setCursorStates(P.source,3,V.viewStates.map(U=>d.CursorState.fromViewState(U))),z.setCursorColumnSelectData({isReal:!0,fromViewLineNumber:V.fromLineNumber,fromViewVisualColumn:V.fromVisualColumn,toViewLineNumber:V.toLineNumber,toViewVisualColumn:V.toVisualColumn}),V.reversed?z.revealTopMostCursor(P.source):z.revealBottomMostCursor(P.source)}}k.ColumnSelect=w.registerEditorCommand(new class extends T{constructor(){super({id:"columnSelect",precondition:void 0})}_getColumnSelectResult(X,z,P,V){const U=X.model.validatePosition(V.position),H=X.coordinatesConverter.validateViewPosition(new o.Position(V.viewPosition.lineNumber,V.viewPosition.column),U);let $=V.doColumnSelect?P.fromViewLineNumber:H.lineNumber,ie=V.doColumnSelect?P.fromViewVisualColumn:V.mouseColumn-1;return C.ColumnSelection.columnSelect(X.cursorConfig,X,$,ie,H.lineNumber,V.mouseColumn-1)}}),k.CursorColumnSelectLeft=w.registerEditorCommand(new class extends T{constructor(){super({id:"cursorColumnSelectLeft",precondition:void 0,kbOpts:{weight:i,kbExpr:a.EditorContextKeys.textInputFocus,primary:2048|1024|512|15,linux:{primary:0}}})}_getColumnSelectResult(X,z,P,V){return C.ColumnSelection.columnSelectLeft(X.cursorConfig,X,P)}}),k.CursorColumnSelectRight=w.registerEditorCommand(new class extends T{constructor(){super({id:"cursorColumnSelectRight",precondition:void 0,kbOpts:{weight:i,kbExpr:a.EditorContextKeys.textInputFocus,primary:2048|1024|512|17,linux:{primary:0}}})}_getColumnSelectResult(X,z,P,V){return C.ColumnSelection.columnSelectRight(X.cursorConfig,X,P)}});class O extends T{constructor(z){super(z);this._isPaged=z.isPaged}_getColumnSelectResult(z,P,V,U){return C.ColumnSelection.columnSelectUp(z.cursorConfig,z,V,this._isPaged)}}k.CursorColumnSelectUp=w.registerEditorCommand(new O({isPaged:!1,id:"cursorColumnSelectUp",precondition:void 0,kbOpts:{weight:i,kbExpr:a.EditorContextKeys.textInputFocus,primary:2048|1024|512|16,linux:{primary:0}}})),k.CursorColumnSelectPageUp=w.registerEditorCommand(new O({isPaged:!0,id:"cursorColumnSelectPageUp",precondition:void 0,kbOpts:{weight:i,kbExpr:a.EditorContextKeys.textInputFocus,primary:2048|1024|512|11,linux:{primary:0}}}));class A extends T{constructor(z){super(z);this._isPaged=z.isPaged}_getColumnSelectResult(z,P,V,U){return C.ColumnSelection.columnSelectDown(z.cursorConfig,z,V,this._isPaged)}}k.CursorColumnSelectDown=w.registerEditorCommand(new A({isPaged:!1,id:"cursorColumnSelectDown",precondition:void 0,kbOpts:{weight:i,kbExpr:a.EditorContextKeys.textInputFocus,primary:2048|1024|512|18,linux:{primary:0}}})),k.CursorColumnSelectPageDown=w.registerEditorCommand(new A({isPaged:!0,id:"cursorColumnSelectPageDown",precondition:void 0,kbOpts:{weight:i,kbExpr:a.EditorContextKeys.textInputFocus,primary:2048|1024|512|12,linux:{primary:0}}}));class B extends n{constructor(){super({id:"cursorMove",precondition:void 0,description:p.CursorMove.description})}runCoreEditorCommand(z,P){const V=p.CursorMove.parse(P);!V||this._runCursorMove(z,P.source,V)}_runCursorMove(z,P,V){z.model.pushStackElement(),z.setCursorStates(P,3,B._move(z,z.getCursorStates(),V)),z.revealPrimaryCursor(P,!0)}static _move(z,P,V){const U=V.select,H=V.value;switch(V.direction){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:return p.CursorMoveCommands.simpleMove(z,P,V.direction,U,H,V.unit);case 11:case 13:case 12:case 14:return p.CursorMoveCommands.viewportMove(z,P,V.direction,U,H);default:return null}}}k.CursorMoveImpl=B,k.CursorMove=w.registerEditorCommand(new B);class F extends n{constructor(z){super(z);this._staticArgs=z.args}runCoreEditorCommand(z,P){let V=this._staticArgs;this._staticArgs.value===-1&&(V={direction:this._staticArgs.direction,unit:this._staticArgs.unit,select:this._staticArgs.select,value:z.cursorConfig.pageSize}),z.model.pushStackElement(),z.setCursorStates(P.source,3,p.CursorMoveCommands.simpleMove(z,z.getCursorStates(),V.direction,V.select,V.value,V.unit)),z.revealPrimaryCursor(P.source,!0)}}k.CursorLeft=w.registerEditorCommand(new F({args:{direction:0,unit:0,select:!1,value:1},id:"cursorLeft",precondition:void 0,kbOpts:{weight:i,kbExpr:a.EditorContextKeys.textInputFocus,primary:15,mac:{primary:15,secondary:[256|32]}}})),k.CursorLeftSelect=w.registerEditorCommand(new F({args:{direction:0,unit:0,select:!0,value:1},id:"cursorLeftSelect",precondition:void 0,kbOpts:{weight:i,kbExpr:a.EditorContextKeys.textInputFocus,primary:1024|15}})),k.CursorRight=w.registerEditorCommand(new F({args:{direction:1,unit:0,select:!1,value:1},id:"cursorRight",precondition:void 0,kbOpts:{weight:i,kbExpr:a.EditorContextKeys.textInputFocus,primary:17,mac:{primary:17,secondary:[256|36]}}})),k.CursorRightSelect=w.registerEditorCommand(new F({args:{direction:1,unit:0,select:!0,value:1},id:"cursorRightSelect",precondition:void 0,kbOpts:{weight:i,kbExpr:a.EditorContextKeys.textInputFocus,primary:1024|17}})),k.CursorUp=w.registerEditorCommand(new F({args:{direction:2,unit:2,select:!1,value:1},id:"cursorUp",precondition:void 0,kbOpts:{weight:i,kbExpr:a.EditorContextKeys.textInputFocus,primary:16,mac:{primary:16,secondary:[256|46]}}})),k.CursorUpSelect=w.registerEditorCommand(new F({args:{direction:2,unit:2,select:!0,value:1},id:"cursorUpSelect",precondition:void 0,kbOpts:{weight:i,kbExpr:a.EditorContextKeys.textInputFocus,primary:1024|16,secondary:[2048|1024|16],mac:{primary:1024|16},linux:{primary:1024|16}}})),k.CursorPageUp=w.registerEditorCommand(new F({args:{direction:2,unit:2,select:!1,value:-1},id:"cursorPageUp",precondition:void 0,kbOpts:{weight:i,kbExpr:a.EditorContextKeys.textInputFocus,primary:11}})),k.CursorPageUpSelect=w.registerEditorCommand(new F({args:{direction:2,unit:2,select:!0,value:-1},id:"cursorPageUpSelect",precondition:void 0,kbOpts:{weight:i,kbExpr:a.EditorContextKeys.textInputFocus,primary:1024|11}})),k.CursorDown=w.registerEditorCommand(new F({args:{direction:3,unit:2,select:!1,value:1},id:"cursorDown",precondition:void 0,kbOpts:{weight:i,kbExpr:a.EditorContextKeys.textInputFocus,primary:18,mac:{primary:18,secondary:[256|44]}}})),k.CursorDownSelect=w.registerEditorCommand(new F({args:{direction:3,unit:2,select:!0,value:1},id:"cursorDownSelect",precondition:void 0,kbOpts:{weight:i,kbExpr:a.EditorContextKeys.textInputFocus,primary:1024|18,secondary:[2048|1024|18],mac:{primary:1024|18},linux:{primary:1024|18}}})),k.CursorPageDown=w.registerEditorCommand(new F({args:{direction:3,unit:2,select:!1,value:-1},id:"cursorPageDown",precondition:void 0,kbOpts:{weight:i,kbExpr:a.EditorContextKeys.textInputFocus,primary:12}})),k.CursorPageDownSelect=w.registerEditorCommand(new F({args:{direction:3,unit:2,select:!0,value:-1},id:"cursorPageDownSelect",precondition:void 0,kbOpts:{weight:i,kbExpr:a.EditorContextKeys.textInputFocus,primary:1024|12}})),k.CreateCursor=w.registerEditorCommand(new class extends n{constructor(){super({id:"createCursor",precondition:void 0})}runCoreEditorCommand(X,z){let P;z.wholeLine?P=p.CursorMoveCommands.line(X,X.getPrimaryCursorState(),!1,z.position,z.viewPosition):P=p.CursorMoveCommands.moveTo(X,X.getPrimaryCursorState(),!1,z.position,z.viewPosition);const V=X.getCursorStates();if(V.length>1){const U=P.modelState?P.modelState.position:null,H=P.viewState?P.viewState.position:null;for(let $=0,ie=V.length;$H&&(U=H);const $=new s.Range(U,1,U,X.model.getLineMaxColumn(U));let ie=0;if(P.at)switch(P.at){case l.RawAtArgument.Top:ie=3;break;case l.RawAtArgument.Center:ie=1;break;case l.RawAtArgument.Bottom:ie=4;break;default:break}const oe=X.coordinatesConverter.convertModelRangeToViewRange($);X.revealRange(z.source,!1,oe,ie,0)}}),k.SelectAll=new class extends h{constructor(){super(w.SelectAllCommand)}runDOMCommand(){N.isFirefox&&(document.activeElement.focus(),document.activeElement.select()),document.execCommand("selectAll")}runEditorCommand(X,z,P){const V=z._getViewModel();!V||this.runCoreEditorCommand(V,P)}runCoreEditorCommand(X,z){X.model.pushStackElement(),X.setCursorStates("keyboard",3,[p.CursorMoveCommands.selectAll(X,X.getPrimaryCursorState())])}},k.SetSelection=w.registerEditorCommand(new class extends n{constructor(){super({id:"setSelection",precondition:void 0})}runCoreEditorCommand(X,z){X.model.pushStackElement(),X.setCursorStates(z.source,3,[d.CursorState.fromModelSelection(z.selection)])}})})(m=e.CoreNavigationCommands||(e.CoreNavigationCommands={}));const _=u.ContextKeyExpr.and(a.EditorContextKeys.textInputFocus,a.EditorContextKeys.columnSelection);function f(k,E){r.KeybindingsRegistry.registerKeybindingRule({id:k,primary:E,when:_,weight:i+1})}f(m.CursorColumnSelectLeft.id,1024|15),f(m.CursorColumnSelectRight.id,1024|17),f(m.CursorColumnSelectUp.id,1024|16),f(m.CursorColumnSelectPageUp.id,1024|11),f(m.CursorColumnSelectDown.id,1024|18),f(m.CursorColumnSelectPageDown.id,1024|12);function v(k){return k.register(),k}var y;(function(k){class E extends w.EditorCommand{runEditorCommand(O,A,B){const F=A._getViewModel();!F||this.runCoreEditingCommand(A,F,B||{})}}k.CoreEditingCommand=E,k.LineBreakInsert=w.registerEditorCommand(new class extends E{constructor(){super({id:"lineBreakInsert",precondition:a.EditorContextKeys.writable,kbOpts:{weight:i,kbExpr:a.EditorContextKeys.textInputFocus,primary:0,mac:{primary:256|45}}})}runCoreEditingCommand(T,O,A){T.pushUndoStop(),T.executeCommands(this.id,c.TypeOperations.lineBreakInsert(O.cursorConfig,O.model,O.getCursorStates().map(B=>B.modelState.selection)))}}),k.Outdent=w.registerEditorCommand(new class extends E{constructor(){super({id:"outdent",precondition:a.EditorContextKeys.writable,kbOpts:{weight:i,kbExpr:u.ContextKeyExpr.and(a.EditorContextKeys.editorTextFocus,a.EditorContextKeys.tabDoesNotMoveFocus),primary:1024|2}})}runCoreEditingCommand(T,O,A){T.pushUndoStop(),T.executeCommands(this.id,c.TypeOperations.outdent(O.cursorConfig,O.model,O.getCursorStates().map(B=>B.modelState.selection))),T.pushUndoStop()}}),k.Tab=w.registerEditorCommand(new class extends E{constructor(){super({id:"tab",precondition:a.EditorContextKeys.writable,kbOpts:{weight:i,kbExpr:u.ContextKeyExpr.and(a.EditorContextKeys.editorTextFocus,a.EditorContextKeys.tabDoesNotMoveFocus),primary:2}})}runCoreEditingCommand(T,O,A){T.pushUndoStop(),T.executeCommands(this.id,c.TypeOperations.tab(O.cursorConfig,O.model,O.getCursorStates().map(B=>B.modelState.selection))),T.pushUndoStop()}}),k.DeleteLeft=w.registerEditorCommand(new class extends E{constructor(){super({id:"deleteLeft",precondition:void 0,kbOpts:{weight:i,kbExpr:a.EditorContextKeys.textInputFocus,primary:1,secondary:[1024|1],mac:{primary:1,secondary:[1024|1,256|38,256|1]}}})}runCoreEditingCommand(T,O,A){const[B,F]=g.DeleteOperations.deleteLeft(O.getPrevEditOperationType(),O.cursorConfig,O.model,O.getCursorStates().map(D=>D.modelState.selection));B&&T.pushUndoStop(),T.executeCommands(this.id,F),O.setPrevEditOperationType(2)}}),k.DeleteRight=w.registerEditorCommand(new class extends E{constructor(){super({id:"deleteRight",precondition:void 0,kbOpts:{weight:i,kbExpr:a.EditorContextKeys.textInputFocus,primary:20,mac:{primary:20,secondary:[256|34,256|20]}}})}runCoreEditingCommand(T,O,A){const[B,F]=g.DeleteOperations.deleteRight(O.getPrevEditOperationType(),O.cursorConfig,O.model,O.getCursorStates().map(D=>D.modelState.selection));B&&T.pushUndoStop(),T.executeCommands(this.id,F),O.setPrevEditOperationType(3)}}),k.Undo=new class extends h{constructor(){super(w.UndoCommand)}runDOMCommand(){document.execCommand("undo")}runEditorCommand(T,O,A){if(!(!O.hasModel()||O.getOption(75)===!0))return O.getModel().undo()}},k.Redo=new class extends h{constructor(){super(w.RedoCommand)}runDOMCommand(){document.execCommand("redo")}runEditorCommand(T,O,A){if(!(!O.hasModel()||O.getOption(75)===!0))return O.getModel().redo()}}})(y=e.CoreEditingCommands||(e.CoreEditingCommands={}));class L extends w.Command{constructor(E,T,O){super({id:E,precondition:void 0,description:O});this._handlerId=T}runCommand(E,T){const O=E.get(S.ICodeEditorService).getFocusedCodeEditor();!O||O.trigger("keyboard",this._handlerId,T)}}function I(k,E){v(new L("default:"+k,k)),v(new L(k,k,E))}I("type",{description:"Type",args:[{name:"args",schema:{type:"object",required:["text"],properties:{text:{type:"string"}}}}]}),I("replacePreviousChar"),I("compositionType"),I("compositionStart"),I("compositionEnd"),I("paste"),I("cut")}),define(Q[607],J([0,1,13,16,23,71,9,74,446]),function(q,e,b,N,M,w,S,C,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.EditorKeybindingCancellationTokenSource=void 0;const g=S.createDecorator("IEditorCancelService"),p=new N.RawContextKey("cancellableOperation",!1,d.localize(0,null));C.registerSingleton(g,class{constructor(){this._tokens=new WeakMap}add(o,s){let a=this._tokens.get(o);a||(a=o.invokeWithinContext(r=>{const i=p.bindTo(r.get(N.IContextKeyService)),n=new w.LinkedList;return{key:i,tokens:n}}),this._tokens.set(o,a));let u;return a.key.set(!0),u=a.tokens.push(s),()=>{u&&(u(),a.key.set(!a.tokens.isEmpty()),u=void 0)}}cancel(o){const s=this._tokens.get(o);if(!!s){const a=s.tokens.pop();a&&(a.cancel(),s.key.set(!s.tokens.isEmpty()))}}},!0);class c extends M.CancellationTokenSource{constructor(s,a){super(a);this.editor=s,this._unregister=s.invokeWithinContext(u=>u.get(g).add(s,this))}dispose(){this._unregister(),super.dispose()}}e.EditorKeybindingCancellationTokenSource=c,b.registerEditorCommand(new class extends b.EditorCommand{constructor(){super({id:"editor.cancelOperation",kbOpts:{weight:100,primary:9},precondition:p})}runEditorCommand(o,s){o.get(g).cancel(s)}})}),define(Q[70],J([0,1,8,3,23,2,607]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.StableEditorScrollState=e.TextModelCancellationTokenSource=e.EditorStateCancellationTokenSource=e.EditorState=void 0;class C{constructor(o,s){if(this.flags=s,(this.flags&1)!=0){const a=o.getModel();this.modelVersionId=a?b.format("{0}#{1}",a.uri.toString(),a.getVersionId()):null}else this.modelVersionId=null;(this.flags&4)!=0?this.position=o.getPosition():this.position=null,(this.flags&2)!=0?this.selection=o.getSelection():this.selection=null,(this.flags&8)!=0?(this.scrollLeft=o.getScrollLeft(),this.scrollTop=o.getScrollTop()):(this.scrollLeft=-1,this.scrollTop=-1)}_equals(o){if(!(o instanceof C))return!1;const s=o;return!(this.modelVersionId!==s.modelVersionId||this.scrollLeft!==s.scrollLeft||this.scrollTop!==s.scrollTop||!this.position&&s.position||this.position&&!s.position||this.position&&s.position&&!this.position.equals(s.position)||!this.selection&&s.selection||this.selection&&!s.selection||this.selection&&s.selection&&!this.selection.equalsRange(s.selection))}validate(o){return this._equals(new C(o,this.flags))}}e.EditorState=C;class d extends S.EditorKeybindingCancellationTokenSource{constructor(o,s,a,u){super(o,u);this.editor=o,this._listener=new w.DisposableStore,s&4&&this._listener.add(o.onDidChangeCursorPosition(r=>{(!a||!N.Range.containsPosition(a,r.position))&&this.cancel()})),s&2&&this._listener.add(o.onDidChangeCursorSelection(r=>{(!a||!N.Range.containsRange(a,r.selection))&&this.cancel()})),s&8&&this._listener.add(o.onDidScrollChange(r=>this.cancel())),s&1&&(this._listener.add(o.onDidChangeModel(r=>this.cancel())),this._listener.add(o.onDidChangeModelContent(r=>this.cancel())))}dispose(){this._listener.dispose(),super.dispose()}}e.EditorStateCancellationTokenSource=d;class g extends M.CancellationTokenSource{constructor(o,s){super(s);this._listener=o.onDidChangeContent(()=>this.cancel())}dispose(){this._listener.dispose(),super.dispose()}}e.TextModelCancellationTokenSource=g;class p{constructor(o,s,a){this._visiblePosition=o,this._visiblePositionScrollDelta=s,this._cursorPosition=a}static capture(o){let s=null,a=0;if(o.getScrollTop()!==0){const u=o.getVisibleRanges();if(u.length>0){s=u[0].getStartPosition();const r=o.getTopForPosition(s.lineNumber,s.column);a=o.getScrollTop()-r}}return new p(s,a,o.getPosition())}restore(o){if(this._visiblePosition){const s=o.getTopForPosition(this._visiblePosition.lineNumber,this._visiblePosition.column);o.setScrollTop(s+this._visiblePositionScrollDelta)}}restoreRelativeVerticalPositionOfCursor(o){const s=o.getPosition();if(!(!this._cursorPosition||!s)){const a=o.getTopForLineNumber(s.lineNumber)-o.getTopForLineNumber(this._cursorPosition.lineNumber);o.setScrollTop(o.getScrollTop()+a)}}}e.StableEditorScrollState=p}),define(Q[608],J([0,1,178,13]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MarkerDecorationsContribution=void 0;let M=class{constructor(S,C){}dispose(){}};M.ID="editor.contrib.markerDecorations",M=Me([_e(1,b.IMarkerDecorationsService)],M),e.MarkerDecorationsContribution=M,N.registerEditorContribution(M.ID,M)}),define(Q[609],J([0,1,188,14,17]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ViewController=void 0;class w{constructor(C,d,g,p){this.configuration=C,this.viewModel=d,this.userInputEvents=g,this.commandDelegate=p}paste(C,d,g,p){this.commandDelegate.paste(C,d,g,p)}type(C){this.commandDelegate.type(C)}compositionType(C,d,g,p){this.commandDelegate.compositionType(C,d,g,p)}compositionStart(){this.commandDelegate.startComposition()}compositionEnd(){this.commandDelegate.endComposition()}cut(){this.commandDelegate.cut()}setSelection(C){b.CoreNavigationCommands.SetSelection.runCoreEditorCommand(this.viewModel,{source:"keyboard",selection:C})}_validateViewColumn(C){const d=this.viewModel.getLineMinColumn(C.lineNumber);return C.column=4?this._selectAll():C.mouseDownCount===3?this._hasMulticursorModifier(C)?C.inSelectionMode?this._lastCursorLineSelectDrag(C.position):this._lastCursorLineSelect(C.position):C.inSelectionMode?this._lineSelectDrag(C.position):this._lineSelect(C.position):C.mouseDownCount===2?this._hasMulticursorModifier(C)?this._lastCursorWordSelect(C.position):C.inSelectionMode?this._wordSelectDrag(C.position):this._wordSelect(C.position):this._hasMulticursorModifier(C)?this._hasNonMulticursorModifier(C)||(C.shiftKey?this._columnSelect(C.position,C.mouseColumn,!0):C.inSelectionMode?this._lastCursorMoveToSelect(C.position):this._createCursor(C.position,!1)):C.inSelectionMode?C.altKey?this._columnSelect(C.position,C.mouseColumn,!0):p?this._columnSelect(C.position,C.mouseColumn,!0):this._moveToSelect(C.position):this.moveTo(C.position)}_usualArgs(C){return C=this._validateViewColumn(C),{source:"mouse",position:this._convertViewToModelPosition(C),viewPosition:C}}moveTo(C){b.CoreNavigationCommands.MoveTo.runCoreEditorCommand(this.viewModel,this._usualArgs(C))}_moveToSelect(C){b.CoreNavigationCommands.MoveToSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(C))}_columnSelect(C,d,g){C=this._validateViewColumn(C),b.CoreNavigationCommands.ColumnSelect.runCoreEditorCommand(this.viewModel,{source:"mouse",position:this._convertViewToModelPosition(C),viewPosition:C,mouseColumn:d,doColumnSelect:g})}_createCursor(C,d){C=this._validateViewColumn(C),b.CoreNavigationCommands.CreateCursor.runCoreEditorCommand(this.viewModel,{source:"mouse",position:this._convertViewToModelPosition(C),viewPosition:C,wholeLine:d})}_lastCursorMoveToSelect(C){b.CoreNavigationCommands.LastCursorMoveToSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(C))}_wordSelect(C){b.CoreNavigationCommands.WordSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(C))}_wordSelectDrag(C){b.CoreNavigationCommands.WordSelectDrag.runCoreEditorCommand(this.viewModel,this._usualArgs(C))}_lastCursorWordSelect(C){b.CoreNavigationCommands.LastCursorWordSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(C))}_lineSelect(C){b.CoreNavigationCommands.LineSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(C))}_lineSelectDrag(C){b.CoreNavigationCommands.LineSelectDrag.runCoreEditorCommand(this.viewModel,this._usualArgs(C))}_lastCursorLineSelect(C){b.CoreNavigationCommands.LastCursorLineSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(C))}_lastCursorLineSelectDrag(C){b.CoreNavigationCommands.LastCursorLineSelectDrag.runCoreEditorCommand(this.viewModel,this._usualArgs(C))}_selectAll(){b.CoreNavigationCommands.SelectAll.runCoreEditorCommand(this.viewModel,{source:"mouse"})}_convertViewToModelPosition(C){return this.viewModel.coordinatesConverter.convertViewPositionToModelPosition(C)}emitKeyDown(C){this.userInputEvents.emitKeyDown(C)}emitKeyUp(C){this.userInputEvents.emitKeyUp(C)}emitContextMenu(C){this.userInputEvents.emitContextMenu(C)}emitMouseMove(C){this.userInputEvents.emitMouseMove(C)}emitMouseLeave(C){this.userInputEvents.emitMouseLeave(C)}emitMouseUp(C){this.userInputEvents.emitMouseUp(C)}emitMouseDown(C){this.userInputEvents.emitMouseDown(C)}emitMouseDrag(C){this.userInputEvents.emitMouseDrag(C)}emitMouseDrop(C){this.userInputEvents.emitMouseDrop(C)}emitMouseDropCanceled(){this.userInputEvents.emitMouseDropCanceled()}emitMouseWheel(C){this.userInputEvents.emitMouseWheel(C)}}e.ViewController=w}),define(Q[610],J([0,1,7,35,21,30,12,581,590,609,256,564,45,390,588,391,584,172,589,257,582,392,223,393,585,394,591,395,592,586,587,593,396,14,3,110,385,387,111,11,187]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l,h,m,_,f,v,y,L,I,k,E,T,O,A,B,F,D,R,W,x,K){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.View=void 0;class Y extends W.ViewEventHandler{constructor(ne,le,X,z,P,V){super();this._selections=[new M.Selection(1,1,1,1)],this._renderAnimationFrame=null;const U=new g.ViewController(le,z,P,ne);this._context=new D.ViewContext(le,X.getColorTheme(),z),this._configPixelRatio=this._configPixelRatio=this._context.configuration.options.get(122),this._context.addEventHandler(this),this._register(X.onDidColorThemeChange(te=>{this._context.theme.update(te),this._context.model.onDidColorThemeChange(),this.render(!0,!1)})),this._viewParts=[],this._textAreaHandler=new d.TextAreaHandler(this._context,U,this._createTextAreaHandlerHelper()),this._viewParts.push(this._textAreaHandler),this._linesContent=w.createFastDomNode(document.createElement("div")),this._linesContent.setClassName("lines-content monaco-editor-background"),this._linesContent.setPosition("absolute"),this.domNode=w.createFastDomNode(document.createElement("div")),this.domNode.setClassName(this._getEditorClassName()),this.domNode.setAttribute("role","code"),this._overflowGuardContainer=w.createFastDomNode(document.createElement("div")),o.PartFingerprints.write(this._overflowGuardContainer,3),this._overflowGuardContainer.setClassName("overflow-guard"),this._scrollbar=new r.EditorScrollbar(this._context,this._linesContent,this.domNode,this._overflowGuardContainer),this._viewParts.push(this._scrollbar),this._viewLines=new l.ViewLines(this._context,this._linesContent),this._viewZones=new O.ViewZones(this._context),this._viewParts.push(this._viewZones);const H=new y.DecorationsOverviewRuler(this._context);this._viewParts.push(H);const $=new k.ScrollDecorationViewPart(this._context);this._viewParts.push($);const ie=new c.ContentViewOverlays(this._context);this._viewParts.push(ie),ie.addDynamicOverlay(new a.CurrentLineHighlightOverlay(this._context)),ie.addDynamicOverlay(new E.SelectionsOverlay(this._context)),ie.addDynamicOverlay(new n.IndentGuidesOverlay(this._context)),ie.addDynamicOverlay(new u.DecorationsOverlay(this._context));const oe=new c.MarginViewOverlays(this._context);this._viewParts.push(oe),oe.addDynamicOverlay(new a.CurrentLineMarginHighlightOverlay(this._context)),oe.addDynamicOverlay(new i.GlyphMarginOverlay(this._context)),oe.addDynamicOverlay(new _.MarginViewLineDecorationsOverlay(this._context)),oe.addDynamicOverlay(new h.LinesDecorationsOverlay(this._context)),oe.addDynamicOverlay(new t.LineNumbersOverlay(this._context));const ae=new m.Margin(this._context);ae.getDomNode().appendChild(this._viewZones.marginDomNode),ae.getDomNode().appendChild(oe.getDomNode()),this._viewParts.push(ae),this._contentWidgets=new s.ViewContentWidgets(this._context,this.domNode),this._viewParts.push(this._contentWidgets),this._viewCursors=new T.ViewCursors(this._context),this._viewParts.push(this._viewCursors),this._overlayWidgets=new v.ViewOverlayWidgets(this._context),this._viewParts.push(this._overlayWidgets);const G=new I.Rulers(this._context);this._viewParts.push(G);const j=new f.Minimap(this._context);if(this._viewParts.push(j),H){const te=this._scrollbar.getOverviewRulerLayoutInfo();te.parent.insertBefore(H.getDomNode(),te.insertBefore)}this._linesContent.appendChild(ie.getDomNode()),this._linesContent.appendChild(G.domNode),this._linesContent.appendChild(this._viewZones.domNode),this._linesContent.appendChild(this._viewLines.getDomNode()),this._linesContent.appendChild(this._contentWidgets.domNode),this._linesContent.appendChild(this._viewCursors.getDomNode()),this._overflowGuardContainer.appendChild(ae.getDomNode()),this._overflowGuardContainer.appendChild(this._scrollbar.getDomNode()),this._overflowGuardContainer.appendChild($.getDomNode()),this._overflowGuardContainer.appendChild(this._textAreaHandler.textArea),this._overflowGuardContainer.appendChild(this._textAreaHandler.textAreaCover),this._overflowGuardContainer.appendChild(this._overlayWidgets.getDomNode()),this._overflowGuardContainer.appendChild(j.getDomNode()),this.domNode.appendChild(this._overflowGuardContainer),V?V.appendChild(this._contentWidgets.overflowingContentWidgetsDomNode.domNode):this.domNode.appendChild(this._contentWidgets.overflowingContentWidgetsDomNode),this._applyLayout(),this._pointerHandler=this._register(new C.PointerHandler(this._context,U,this._createPointerHandlerHelper()))}_flushAccumulatedAndRenderNow(){this._renderNow()}_createPointerHandlerHelper(){return{viewDomNode:this.domNode.domNode,linesContentDomNode:this._linesContent.domNode,focusTextArea:()=>{this.focus()},dispatchTextAreaEvent:ne=>{this._textAreaHandler.textArea.domNode.dispatchEvent(ne)},getLastRenderData:()=>{const ne=this._viewCursors.getLastRenderData()||[],le=this._textAreaHandler.getLastRenderData();return new K.PointerHandlerLastRenderData(ne,le)},shouldSuppressMouseDownOnViewZone:ne=>this._viewZones.shouldSuppressMouseDownOnViewZone(ne),shouldSuppressMouseDownOnWidget:ne=>this._contentWidgets.shouldSuppressMouseDownOnWidget(ne),getPositionFromDOMInfo:(ne,le)=>(this._flushAccumulatedAndRenderNow(),this._viewLines.getPositionFromDOMInfo(ne,le)),visibleRangeForPosition:(ne,le)=>(this._flushAccumulatedAndRenderNow(),this._viewLines.visibleRangeForPosition(new A.Position(ne,le))),getLineWidth:ne=>(this._flushAccumulatedAndRenderNow(),this._viewLines.getLineWidth(ne))}}_createTextAreaHandlerHelper(){return{visibleRangeForPositionRelativeToEditor:(ne,le)=>(this._flushAccumulatedAndRenderNow(),this._viewLines.visibleRangeForPosition(new A.Position(ne,le)))}}_applyLayout(){const le=this._context.configuration.options.get(124);this.domNode.setWidth(le.width),this.domNode.setHeight(le.height),this._overflowGuardContainer.setWidth(le.width),this._overflowGuardContainer.setHeight(le.height),this._linesContent.setWidth(1e6),this._linesContent.setHeight(1e6)}_getEditorClassName(){const ne=this._textAreaHandler.isFocused()?" focused":"";return this._context.configuration.options.get(121)+" "+x.getThemeTypeSelector(this._context.theme.type)+ne}handleEvents(ne){super.handleEvents(ne),this._scheduleRender()}onConfigurationChanged(ne){return this._configPixelRatio=this._context.configuration.options.get(122),this.domNode.setClassName(this._getEditorClassName()),this._applyLayout(),!1}onCursorStateChanged(ne){return this._selections=ne.selections,!1}onFocusChanged(ne){return this.domNode.setClassName(this._getEditorClassName()),!1}onThemeChanged(ne){return this.domNode.setClassName(this._getEditorClassName()),!1}dispose(){this._renderAnimationFrame!==null&&(this._renderAnimationFrame.dispose(),this._renderAnimationFrame=null),this._contentWidgets.overflowingContentWidgetsDomNode.domNode.remove(),this._context.removeEventHandler(this),this._viewLines.dispose();for(const ne of this._viewParts)ne.dispose();super.dispose()}_scheduleRender(){this._renderAnimationFrame===null&&(this._renderAnimationFrame=b.runAtThisOrScheduleAtNextAnimationFrame(this._onRenderScheduled.bind(this),100))}_onRenderScheduled(){this._renderAnimationFrame=null,this._flushAccumulatedAndRenderNow()}_renderNow(){ee(()=>this._actualRender())}_getViewPartsToRender(){let ne=[],le=0;for(const X of this._viewParts)X.shouldRender()&&(ne[le++]=X);return ne}_actualRender(){if(!!b.isInDOM(this.domNode.domNode)){let ne=this._getViewPartsToRender();if(!(!this._viewLines.shouldRender()&&ne.length===0)){const le=this._context.viewLayout.getLinesViewportData();this._context.model.setViewport(le.startLineNumber,le.endLineNumber,le.centeredLineNumber);const X=new R.ViewportData(this._selections,le,this._context.viewLayout.getWhitespaceViewportData(),this._context.model);this._contentWidgets.shouldRender()&&this._contentWidgets.onBeforeRender(X),this._viewLines.shouldRender()&&(this._viewLines.renderText(X),this._viewLines.onDidRender(),ne=this._getViewPartsToRender());const z=new F.RenderingContext(this._context.viewLayout,X,this._viewLines);for(const P of ne)P.prepareRender(z);for(const P of ne)P.render(z),P.onDidRender();Math.abs(N.getPixelRatio()-this._configPixelRatio)>.001&&this._context.configuration.updatePixelRatio()}}}delegateVerticalScrollbarMouseDown(ne){this._scrollbar.delegateVerticalScrollbarMouseDown(ne)}restoreState(ne){this._context.model.setScrollPosition({scrollTop:ne.scrollTop},1),this._context.model.tokenizeViewport(),this._renderNow(),this._viewLines.updateLineWidths(),this._context.model.setScrollPosition({scrollLeft:ne.scrollLeft},1)}getOffsetForColumn(ne,le){const X=this._context.model.validateModelPosition({lineNumber:ne,column:le}),z=this._context.model.coordinatesConverter.convertModelPositionToViewPosition(X);this._flushAccumulatedAndRenderNow();const P=this._viewLines.visibleRangeForPosition(new A.Position(z.lineNumber,z.column));return P?P.left:-1}getTargetAtClientPoint(ne,le){const X=this._pointerHandler.getTargetAtClientPoint(ne,le);return X?p.ViewUserInputEvents.convertViewToModelMouseTarget(X,this._context.model.coordinatesConverter):null}createOverviewRuler(ne){return new L.OverviewRuler(this._context,ne)}change(ne){this._viewZones.changeViewZones(ne),this._scheduleRender()}render(ne,le){if(le){this._viewLines.forceShouldRender();for(const X of this._viewParts)X.forceShouldRender()}ne?this._flushAccumulatedAndRenderNow():this._scheduleRender()}focus(){this._textAreaHandler.focusTextArea()}isFocused(){return this._textAreaHandler.isFocused()}setAriaOptions(ne){this._textAreaHandler.setAriaOptions(ne)}addContentWidget(ne){this._contentWidgets.addWidget(ne.widget),this.layoutContentWidget(ne),this._scheduleRender()}layoutContentWidget(ne){let le=ne.position&&ne.position.range||null;if(le===null){const z=ne.position?ne.position.position:null;z!==null&&(le=new B.Range(z.lineNumber,z.column,z.lineNumber,z.column))}const X=ne.position?ne.position.preference:null;this._contentWidgets.setWidgetPosition(ne.widget,le,X),this._scheduleRender()}removeContentWidget(ne){this._contentWidgets.removeWidget(ne.widget),this._scheduleRender()}addOverlayWidget(ne){this._overlayWidgets.addWidget(ne.widget),this.layoutOverlayWidget(ne),this._scheduleRender()}layoutOverlayWidget(ne){const le=ne.position?ne.position.preference:null;this._overlayWidgets.setWidgetPosition(ne.widget,le)&&this._scheduleRender()}removeOverlayWidget(ne){this._overlayWidgets.removeWidget(ne.widget),this._scheduleRender()}}e.View=Y;function ee(se){try{return se()}catch(ne){S.onUnexpectedError(ne)}}}),define(Q[143],J([0,1,448,7,12,6,2,43,69,13,28,610,256,38,242,42,14,3,21,217,107,25,18,49,22,540,26,16,9,138,32,11,65,20,397,563,136,608,334]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l,h,m,_,f,v,y,L,I,k,E,T,O,A,B,F,D){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.EditorModeContext=e.BooleanEventEmitter=e.CodeEditorWidget=void 0;let R=0;class W{constructor(H,$,ie,oe,ae){this.model=H,this.viewModel=$,this.view=ie,this.hasRealView=oe,this.listenersToRemove=ae}dispose(){S.dispose(this.listenersToRemove),this.model.onBeforeDetached(),this.hasRealView&&this.view.dispose(),this.viewModel.dispose()}}let x=class ct extends S.Disposable{constructor(H,$,ie,oe,ae,G,j,te,Z,ue){super();this._onDidDispose=this._register(new w.Emitter),this.onDidDispose=this._onDidDispose.event,this._onDidChangeModelContent=this._register(new w.Emitter),this.onDidChangeModelContent=this._onDidChangeModelContent.event,this._onDidChangeModelLanguage=this._register(new w.Emitter),this.onDidChangeModelLanguage=this._onDidChangeModelLanguage.event,this._onDidChangeModelLanguageConfiguration=this._register(new w.Emitter),this.onDidChangeModelLanguageConfiguration=this._onDidChangeModelLanguageConfiguration.event,this._onDidChangeModelOptions=this._register(new w.Emitter),this.onDidChangeModelOptions=this._onDidChangeModelOptions.event,this._onDidChangeModelDecorations=this._register(new w.Emitter),this.onDidChangeModelDecorations=this._onDidChangeModelDecorations.event,this._onDidChangeConfiguration=this._register(new w.Emitter),this.onDidChangeConfiguration=this._onDidChangeConfiguration.event,this._onDidChangeModel=this._register(new w.Emitter),this.onDidChangeModel=this._onDidChangeModel.event,this._onDidChangeCursorPosition=this._register(new w.Emitter),this.onDidChangeCursorPosition=this._onDidChangeCursorPosition.event,this._onDidChangeCursorSelection=this._register(new w.Emitter),this.onDidChangeCursorSelection=this._onDidChangeCursorSelection.event,this._onDidAttemptReadOnlyEdit=this._register(new w.Emitter),this.onDidAttemptReadOnlyEdit=this._onDidAttemptReadOnlyEdit.event,this._onDidLayoutChange=this._register(new w.Emitter),this.onDidLayoutChange=this._onDidLayoutChange.event,this._editorTextFocus=this._register(new K),this.onDidFocusEditorText=this._editorTextFocus.onDidChangeToTrue,this.onDidBlurEditorText=this._editorTextFocus.onDidChangeToFalse,this._editorWidgetFocus=this._register(new K),this.onDidFocusEditorWidget=this._editorWidgetFocus.onDidChangeToTrue,this.onDidBlurEditorWidget=this._editorWidgetFocus.onDidChangeToFalse,this._onWillType=this._register(new w.Emitter),this.onWillType=this._onWillType.event,this._onDidType=this._register(new w.Emitter),this.onDidType=this._onDidType.event,this._onDidCompositionStart=this._register(new w.Emitter),this.onDidCompositionStart=this._onDidCompositionStart.event,this._onDidCompositionEnd=this._register(new w.Emitter),this.onDidCompositionEnd=this._onDidCompositionEnd.event,this._onDidPaste=this._register(new w.Emitter),this.onDidPaste=this._onDidPaste.event,this._onMouseUp=this._register(new w.Emitter),this.onMouseUp=this._onMouseUp.event,this._onMouseDown=this._register(new w.Emitter),this.onMouseDown=this._onMouseDown.event,this._onMouseDrag=this._register(new w.Emitter),this.onMouseDrag=this._onMouseDrag.event,this._onMouseDrop=this._register(new w.Emitter),this.onMouseDrop=this._onMouseDrop.event,this._onMouseDropCanceled=this._register(new w.Emitter),this.onMouseDropCanceled=this._onMouseDropCanceled.event,this._onContextMenu=this._register(new w.Emitter),this.onContextMenu=this._onContextMenu.event,this._onMouseMove=this._register(new w.Emitter),this.onMouseMove=this._onMouseMove.event,this._onMouseLeave=this._register(new w.Emitter),this.onMouseLeave=this._onMouseLeave.event,this._onMouseWheel=this._register(new w.Emitter),this.onMouseWheel=this._onMouseWheel.event,this._onKeyUp=this._register(new w.Emitter),this.onKeyUp=this._onKeyUp.event,this._onKeyDown=this._register(new w.Emitter),this.onKeyDown=this._onKeyDown.event,this._onDidContentSizeChange=this._register(new w.Emitter),this.onDidContentSizeChange=this._onDidContentSizeChange.event,this._onDidScrollChange=this._register(new w.Emitter),this.onDidScrollChange=this._onDidScrollChange.event,this._onDidChangeViewZones=this._register(new w.Emitter),this.onDidChangeViewZones=this._onDidChangeViewZones.event;const he=Object.assign({},$);this._domElement=H,this._overflowWidgetsDomNode=he.overflowWidgetsDomNode,delete he.overflowWidgetsDomNode,this._id=++R,this._decorationTypeKeysToIds={},this._decorationTypeSubtypes={},this.isSimpleWidget=ie.isSimpleWidget||!1,this._telemetryData=ie.telemetryData,this._configuration=this._register(this._createConfiguration(he,ue)),this._register(this._configuration.onDidChange(ce=>{this._onDidChangeConfiguration.fire(ce);const me=this._configuration.options;if(ce.hasChanged(124)){const Ce=me.get(124);this._onDidLayoutChange.fire(Ce)}})),this._contextKeyService=this._register(j.createScoped(this._domElement)),this._notificationService=Z,this._codeEditorService=ae,this._commandService=G,this._themeService=te,this._register(new Y(this,this._contextKeyService)),this._register(new ee(this,this._contextKeyService)),this._instantiationService=oe.createChild(new k.ServiceCollection([L.IContextKeyService,this._contextKeyService])),this._modelData=null,this._contributions={},this._actions={},this._focusTracker=new se(H),this._focusTracker.onChange(()=>{this._editorWidgetFocus.setValue(this._focusTracker.hasFocus())}),this._contentWidgets={},this._overlayWidgets={};let re;Array.isArray(ie.contributions)?re=ie.contributions:re=g.EditorExtensionsRegistry.getEditorContributions();for(const ce of re)try{const me=this._instantiationService.createInstance(ce.ctor,this);this._contributions[ce.id]=me}catch(me){M.onUnexpectedError(me)}g.EditorExtensionsRegistry.getEditorActions().forEach(ce=>{const me=new t.InternalEditorAction(ce.id,ce.label,ce.alias,A.withNullAsUndefined(ce.precondition),()=>this._instantiationService.invokeFunction(Ce=>Promise.resolve(ce.runEditorCommand(Ce,this,null))),this._contextKeyService);this._actions[me.id]=me}),this._codeEditorService.addCodeEditor(this)}_createConfiguration(H,$){return new d.Configuration(this.isSimpleWidget,H,this._domElement,$)}getId(){return this.getEditorType()+":"+this._id}getEditorType(){return l.EditorType.ICodeEditor}dispose(){this._codeEditorService.removeCodeEditor(this),this._focusTracker.dispose();const H=Object.keys(this._contributions);for(let $=0,ie=H.length;$i.Range.lift($)))}getVisibleColumnFromPosition(H){if(!this._modelData)return H.column;const $=this._modelData.model.validatePosition(H),ie=this._modelData.model.getOptions().tabSize;return u.CursorColumns.visibleColumnFromColumn(this._modelData.model.getLineContent($.lineNumber),$.column,ie)+1}getPosition(){return this._modelData?this._modelData.viewModel.getPosition():null}setPosition(H){if(!!this._modelData){if(!r.Position.isIPosition(H))throw new Error("Invalid arguments");this._modelData.viewModel.setSelections("api",[{selectionStartLineNumber:H.lineNumber,selectionStartColumn:H.column,positionLineNumber:H.lineNumber,positionColumn:H.column}])}}_sendRevealRange(H,$,ie,oe){if(!!this._modelData){if(!i.Range.isIRange(H))throw new Error("Invalid arguments");const ae=this._modelData.model.validateRange(H),G=this._modelData.viewModel.coordinatesConverter.convertModelRangeToViewRange(ae);this._modelData.viewModel.revealRange("api",ie,G,$,oe)}}revealLine(H,$=0){this._revealLine(H,0,$)}revealLineInCenter(H,$=0){this._revealLine(H,1,$)}revealLineInCenterIfOutsideViewport(H,$=0){this._revealLine(H,2,$)}revealLineNearTop(H,$=0){this._revealLine(H,5,$)}_revealLine(H,$,ie){if(typeof H!="number")throw new Error("Invalid arguments");this._sendRevealRange(new i.Range(H,1,H,1),$,!1,ie)}revealPosition(H,$=0){this._revealPosition(H,0,!0,$)}revealPositionInCenter(H,$=0){this._revealPosition(H,1,!0,$)}revealPositionInCenterIfOutsideViewport(H,$=0){this._revealPosition(H,2,!0,$)}revealPositionNearTop(H,$=0){this._revealPosition(H,5,!0,$)}_revealPosition(H,$,ie,oe){if(!r.Position.isIPosition(H))throw new Error("Invalid arguments");this._sendRevealRange(new i.Range(H.lineNumber,H.column,H.lineNumber,H.column),$,ie,oe)}getSelection(){return this._modelData?this._modelData.viewModel.getSelection():null}getSelections(){return this._modelData?this._modelData.viewModel.getSelections():null}setSelection(H){const $=n.Selection.isISelection(H),ie=i.Range.isIRange(H);if(!$&&!ie)throw new Error("Invalid arguments");if($)this._setSelectionImpl(H);else if(ie){const oe={selectionStartLineNumber:H.startLineNumber,selectionStartColumn:H.startColumn,positionLineNumber:H.endLineNumber,positionColumn:H.endColumn};this._setSelectionImpl(oe)}}_setSelectionImpl(H){if(!!this._modelData){const $=new n.Selection(H.selectionStartLineNumber,H.selectionStartColumn,H.positionLineNumber,H.positionColumn);this._modelData.viewModel.setSelections("api",[$])}}revealLines(H,$,ie=0){this._revealLines(H,$,0,ie)}revealLinesInCenter(H,$,ie=0){this._revealLines(H,$,1,ie)}revealLinesInCenterIfOutsideViewport(H,$,ie=0){this._revealLines(H,$,2,ie)}revealLinesNearTop(H,$,ie=0){this._revealLines(H,$,5,ie)}_revealLines(H,$,ie,oe){if(typeof H!="number"||typeof $!="number")throw new Error("Invalid arguments");this._sendRevealRange(new i.Range(H,1,$,1),ie,!1,oe)}revealRange(H,$=0,ie=!1,oe=!0){this._revealRange(H,ie?1:0,oe,$)}revealRangeInCenter(H,$=0){this._revealRange(H,1,!0,$)}revealRangeInCenterIfOutsideViewport(H,$=0){this._revealRange(H,2,!0,$)}revealRangeNearTop(H,$=0){this._revealRange(H,5,!0,$)}revealRangeNearTopIfOutsideViewport(H,$=0){this._revealRange(H,6,!0,$)}revealRangeAtTop(H,$=0){this._revealRange(H,3,!0,$)}_revealRange(H,$,ie,oe){if(!i.Range.isIRange(H))throw new Error("Invalid arguments");this._sendRevealRange(i.Range.lift(H),$,ie,oe)}setSelections(H,$="api",ie=0){if(!!this._modelData){if(!H||H.length===0)throw new Error("Invalid arguments");for(let oe=0,ae=H.length;oe$.isSupported()),H}getAction(H){return this._actions[H]||null}trigger(H,$,ie){switch(ie=ie||{},$){case"compositionStart":this._startComposition();return;case"compositionEnd":this._endComposition(H);return;case"type":{const ae=ie;this._type(H,ae.text||"");return}case"replacePreviousChar":{const ae=ie;this._compositionType(H,ae.text||"",ae.replaceCharCnt||0,0,0);return}case"compositionType":{const ae=ie;this._compositionType(H,ae.text||"",ae.replacePrevCharCnt||0,ae.replaceNextCharCnt||0,ae.positionDelta||0);return}case"paste":{const ae=ie;this._paste(H,ae.text||"",ae.pasteOnNewLine||!1,ae.multicursorText||null,ae.mode||null);return}case"cut":this._cut(H);return}const oe=this.getAction($);if(oe){Promise.resolve(oe.run()).then(void 0,M.onUnexpectedError);return}!this._modelData||this._triggerEditorCommand(H,$,ie)||this._commandService.executeCommand($,ie)}_startComposition(){!this._modelData||(this._modelData.viewModel.startComposition(),this._onDidCompositionStart.fire())}_endComposition(H){!this._modelData||(this._modelData.viewModel.endComposition(H),this._onDidCompositionEnd.fire())}_type(H,$){!this._modelData||$.length===0||(H==="keyboard"&&this._onWillType.fire($),this._modelData.viewModel.type($,H),H==="keyboard"&&this._onDidType.fire($))}_compositionType(H,$,ie,oe,ae){!this._modelData||this._modelData.viewModel.compositionType($,ie,oe,ae,H)}_paste(H,$,ie,oe,ae){if(!(!this._modelData||$.length===0)){const G=this._modelData.viewModel.getSelection().getStartPosition();this._modelData.viewModel.paste($,ie,oe,H);const j=this._modelData.viewModel.getSelection().getStartPosition();H==="keyboard"&&this._onDidPaste.fire({range:new i.Range(G.lineNumber,G.column,j.lineNumber,j.column),mode:ae})}}_cut(H){!this._modelData||this._modelData.viewModel.cut(H)}_triggerEditorCommand(H,$,ie){const oe=g.EditorExtensionsRegistry.getEditorCommand($);return oe?(ie=ie||{},ie.source=H,this._instantiationService.invokeFunction(ae=>{Promise.resolve(oe.runEditorCommand(ae,this,ie)).then(void 0,M.onUnexpectedError)}),!0):!1}_getViewModel(){return this._modelData?this._modelData.viewModel:null}pushUndoStop(){return!this._modelData||this._configuration.options.get(75)?!1:(this._modelData.model.pushStackElement(),!0)}popUndoStop(){return!this._modelData||this._configuration.options.get(75)?!1:(this._modelData.model.popStackElement(),!0)}executeEdits(H,$,ie){if(!this._modelData||this._configuration.options.get(75))return!1;let oe;return ie?Array.isArray(ie)?oe=()=>ie:oe=ie:oe=()=>null,this._modelData.viewModel.executeEdits(H,$,oe),!0}executeCommand(H,$){!this._modelData||this._modelData.viewModel.executeCommand($,H)}executeCommands(H,$){!this._modelData||this._modelData.viewModel.executeCommands($,H)}changeDecorations(H){return this._modelData?this._modelData.model.changeDecorations(H,this._id):null}getLineDecorations(H){return this._modelData?this._modelData.model.getLineDecorations(H,this._id,s.filterValidationDecorations(this._configuration.options)):null}deltaDecorations(H,$){return this._modelData?H.length===0&&$.length===0?H:this._modelData.model.deltaDecorations(H,$,this._id):[]}removeDecorations(H){const $=this._decorationTypeKeysToIds[H];$&&this.deltaDecorations($,[]),this._decorationTypeKeysToIds.hasOwnProperty(H)&&delete this._decorationTypeKeysToIds[H],this._decorationTypeSubtypes.hasOwnProperty(H)&&delete this._decorationTypeSubtypes[H]}getLayoutInfo(){return this._configuration.options.get(124)}createOverviewRuler(H){return!this._modelData||!this._modelData.hasRealView?null:this._modelData.view.createOverviewRuler(H)}getContainerDomNode(){return this._domElement}getDomNode(){return!this._modelData||!this._modelData.hasRealView?null:this._modelData.view.domNode.domNode}delegateVerticalScrollbarMouseDown(H){!this._modelData||!this._modelData.hasRealView||this._modelData.view.delegateVerticalScrollbarMouseDown(H)}layout(H){this._configuration.observeReferenceElement(H),this.render()}focus(){!this._modelData||!this._modelData.hasRealView||this._modelData.view.focus()}hasTextFocus(){return!this._modelData||!this._modelData.hasRealView?!1:this._modelData.view.isFocused()}hasWidgetFocus(){return this._focusTracker&&this._focusTracker.hasFocus()}addContentWidget(H){const $={widget:H,position:H.getPosition()};this._contentWidgets.hasOwnProperty(H.getId())&&console.warn("Overwriting a content widget with the same id."),this._contentWidgets[H.getId()]=$,this._modelData&&this._modelData.hasRealView&&this._modelData.view.addContentWidget($)}layoutContentWidget(H){const $=H.getId();if(this._contentWidgets.hasOwnProperty($)){const ie=this._contentWidgets[$];ie.position=H.getPosition(),this._modelData&&this._modelData.hasRealView&&this._modelData.view.layoutContentWidget(ie)}}removeContentWidget(H){const $=H.getId();if(this._contentWidgets.hasOwnProperty($)){const ie=this._contentWidgets[$];delete this._contentWidgets[$],this._modelData&&this._modelData.hasRealView&&this._modelData.view.removeContentWidget(ie)}}addOverlayWidget(H){const $={widget:H,position:H.getPosition()};this._overlayWidgets.hasOwnProperty(H.getId())&&console.warn("Overwriting an overlay widget with the same id."),this._overlayWidgets[H.getId()]=$,this._modelData&&this._modelData.hasRealView&&this._modelData.view.addOverlayWidget($)}layoutOverlayWidget(H){const $=H.getId();if(this._overlayWidgets.hasOwnProperty($)){const ie=this._overlayWidgets[$];ie.position=H.getPosition(),this._modelData&&this._modelData.hasRealView&&this._modelData.view.layoutOverlayWidget(ie)}}removeOverlayWidget(H){const $=H.getId();if(this._overlayWidgets.hasOwnProperty($)){const ie=this._overlayWidgets[$];delete this._overlayWidgets[$],this._modelData&&this._modelData.hasRealView&&this._modelData.view.removeOverlayWidget(ie)}}changeViewZones(H){!this._modelData||!this._modelData.hasRealView||this._modelData.view.change(H)}getTargetAtClientPoint(H,$){return!this._modelData||!this._modelData.hasRealView?null:this._modelData.view.getTargetAtClientPoint(H,$)}getScrolledVisiblePosition(H){if(!this._modelData||!this._modelData.hasRealView)return null;const $=this._modelData.model.validatePosition(H),ie=this._configuration.options,oe=ie.get(124),ae=ct._getVerticalOffsetForPosition(this._modelData,$.lineNumber,$.column)-this.getScrollTop(),G=this._modelData.view.getOffsetForColumn($.lineNumber,$.column)+oe.glyphMarginWidth+oe.lineNumbersWidth+oe.decorationsWidth-this.getScrollLeft();return{top:ae,left:G,height:ie.get(53)}}getOffsetForColumn(H,$){return!this._modelData||!this._modelData.hasRealView?-1:this._modelData.view.getOffsetForColumn(H,$)}render(H=!1){!this._modelData||!this._modelData.hasRealView||this._modelData.view.render(!0,H)}setAriaOptions(H){!this._modelData||!this._modelData.hasRealView||this._modelData.view.setAriaOptions(H)}applyFontInfo(H){d.Configuration.applyFontInfoSlow(H,this._configuration.options.get(38))}_attachModel(H){if(!H){this._modelData=null;return}const $=[];this._domElement.setAttribute("data-mode-id",H.getLanguageIdentifier().language),this._configuration.setIsDominatedByLongLines(H.isDominatedByLongLines()),this._configuration.setMaxLineNumber(H.getLineCount()),H.onBeforeAttached();const ie=new v.ViewModel(this._id,this._configuration,H,F.DOMLineBreaksComputerFactory.create(),B.MonospaceLineBreaksComputerFactory.create(this._configuration.options),G=>N.scheduleAtNextAnimationFrame(G));$.push(H.onDidChangeDecorations(G=>this._onDidChangeModelDecorations.fire(G))),$.push(H.onDidChangeLanguage(G=>{this._domElement.setAttribute("data-mode-id",H.getLanguageIdentifier().language),this._onDidChangeModelLanguage.fire(G)})),$.push(H.onDidChangeLanguageConfiguration(G=>this._onDidChangeModelLanguageConfiguration.fire(G))),$.push(H.onDidChangeContent(G=>this._onDidChangeModelContent.fire(G))),$.push(H.onDidChangeOptions(G=>this._onDidChangeModelOptions.fire(G))),$.push(H.onWillDispose(()=>this.setModel(null))),$.push(ie.onEvent(G=>{switch(G.kind){case 0:this._onDidContentSizeChange.fire(G);break;case 1:this._editorTextFocus.setValue(G.hasFocus);break;case 2:this._onDidScrollChange.fire(G);break;case 3:this._onDidChangeViewZones.fire();break;case 4:this._onDidAttemptReadOnlyEdit.fire();break;case 5:{G.reachedMaxCursorCount&&this._notificationService.warn(b.localize(0,null,a.Cursor.MAX_CURSOR_COUNT));const j=[];for(let ue=0,he=G.selections.length;ue{this._paste("keyboard",ae,G,j,te)},type:ae=>{this._type("keyboard",ae)},compositionType:(ae,G,j,te)=>{this._compositionType("keyboard",ae,G,j,te)},startComposition:()=>{this._startComposition()},endComposition:()=>{this._endComposition("keyboard")},cut:()=>{this._cut("keyboard")}}:$={paste:(ae,G,j,te)=>{const Z={text:ae,pasteOnNewLine:G,multicursorText:j,mode:te};this._commandService.executeCommand("paste",Z)},type:ae=>{const G={text:ae};this._commandService.executeCommand("type",G)},compositionType:(ae,G,j,te)=>{if(j||te){const Z={text:ae,replacePrevCharCnt:G,replaceNextCharCnt:j,positionDelta:te};this._commandService.executeCommand("compositionType",Z)}else{const Z={text:ae,replaceCharCnt:G};this._commandService.executeCommand("replacePreviousChar",Z)}},startComposition:()=>{this._commandService.executeCommand("compositionStart",{})},endComposition:()=>{this._commandService.executeCommand("compositionEnd",{})},cut:()=>{this._commandService.executeCommand("cut",{})}};const ie=new o.ViewUserInputEvents(H.coordinatesConverter);return ie.onKeyDown=ae=>this._onKeyDown.fire(ae),ie.onKeyUp=ae=>this._onKeyUp.fire(ae),ie.onContextMenu=ae=>this._onContextMenu.fire(ae),ie.onMouseMove=ae=>this._onMouseMove.fire(ae),ie.onMouseLeave=ae=>this._onMouseLeave.fire(ae),ie.onMouseDown=ae=>this._onMouseDown.fire(ae),ie.onMouseUp=ae=>this._onMouseUp.fire(ae),ie.onMouseDrag=ae=>this._onMouseDrag.fire(ae),ie.onMouseDrop=ae=>this._onMouseDrop.fire(ae),ie.onMouseDropCanceled=ae=>this._onMouseDropCanceled.fire(ae),ie.onMouseWheel=ae=>this._onMouseWheel.fire(ae),[new c.View($,this._configuration,this._themeService,H,ie,this._overflowWidgetsDomNode),!0]}_postDetachModelCleanup(H){H&&H.removeAllDecorationsWithOwnerId(this._id)}_detachModel(){if(!this._modelData)return null;const H=this._modelData.model,$=this._modelData.hasRealView?this._modelData.view.domNode.domNode:null;return this._modelData.dispose(),this._modelData=null,this._domElement.removeAttribute("data-mode-id"),$&&this._domElement.contains($)&&this._domElement.removeChild($),H}_removeDecorationType(H){this._codeEditorService.removeDecorationType(H)}hasModel(){return this._modelData!==null}};x=Me([_e(3,I.IInstantiationService),_e(4,p.ICodeEditorService),_e(5,y.ICommandService),_e(6,L.IContextKeyService),_e(7,T.IThemeService),_e(8,E.INotificationService),_e(9,O.IAccessibilityService)],x),e.CodeEditorWidget=x;class K extends S.Disposable{constructor(){super();this._onDidChangeToTrue=this._register(new w.Emitter),this.onDidChangeToTrue=this._onDidChangeToTrue.event,this._onDidChangeToFalse=this._register(new w.Emitter),this.onDidChangeToFalse=this._onDidChangeToFalse.event,this._value=0}setValue(H){const $=H?2:1;this._value!==$&&(this._value=$,this._value===2?this._onDidChangeToTrue.fire():this._value===1&&this._onDidChangeToFalse.fire())}}e.BooleanEventEmitter=K;class Y extends S.Disposable{constructor(H,$){super();this._editor=H,$.createKey("editorId",H.getId()),this._editorSimpleInput=h.EditorContextKeys.editorSimpleInput.bindTo($),this._editorFocus=h.EditorContextKeys.focus.bindTo($),this._textInputFocus=h.EditorContextKeys.textInputFocus.bindTo($),this._editorTextFocus=h.EditorContextKeys.editorTextFocus.bindTo($),this._editorTabMovesFocus=h.EditorContextKeys.tabMovesFocus.bindTo($),this._editorReadonly=h.EditorContextKeys.readOnly.bindTo($),this._inDiffEditor=h.EditorContextKeys.inDiffEditor.bindTo($),this._editorColumnSelection=h.EditorContextKeys.columnSelection.bindTo($),this._hasMultipleSelections=h.EditorContextKeys.hasMultipleSelections.bindTo($),this._hasNonEmptySelection=h.EditorContextKeys.hasNonEmptySelection.bindTo($),this._canUndo=h.EditorContextKeys.canUndo.bindTo($),this._canRedo=h.EditorContextKeys.canRedo.bindTo($),this._register(this._editor.onDidChangeConfiguration(()=>this._updateFromConfig())),this._register(this._editor.onDidChangeCursorSelection(()=>this._updateFromSelection())),this._register(this._editor.onDidFocusEditorWidget(()=>this._updateFromFocus())),this._register(this._editor.onDidBlurEditorWidget(()=>this._updateFromFocus())),this._register(this._editor.onDidFocusEditorText(()=>this._updateFromFocus())),this._register(this._editor.onDidBlurEditorText(()=>this._updateFromFocus())),this._register(this._editor.onDidChangeModel(()=>this._updateFromModel())),this._register(this._editor.onDidChangeConfiguration(()=>this._updateFromModel())),this._updateFromConfig(),this._updateFromSelection(),this._updateFromFocus(),this._updateFromModel(),this._editorSimpleInput.set(this._editor.isSimpleWidget)}_updateFromConfig(){const H=this._editor.getOptions();this._editorTabMovesFocus.set(H.get(123)),this._editorReadonly.set(H.get(75)),this._inDiffEditor.set(H.get(49)),this._editorColumnSelection.set(H.get(15))}_updateFromSelection(){const H=this._editor.getSelections();H?(this._hasMultipleSelections.set(H.length>1),this._hasNonEmptySelection.set(H.some($=>!$.isEmpty()))):(this._hasMultipleSelections.reset(),this._hasNonEmptySelection.reset())}_updateFromFocus(){this._editorFocus.set(this._editor.hasWidgetFocus()&&!this._editor.isSimpleWidget),this._editorTextFocus.set(this._editor.hasTextFocus()&&!this._editor.isSimpleWidget),this._textInputFocus.set(this._editor.hasTextFocus())}_updateFromModel(){const H=this._editor.getModel();this._canUndo.set(Boolean(H&&H.canUndo())),this._canRedo.set(Boolean(H&&H.canRedo()))}}class ee extends S.Disposable{constructor(H,$){super();this._editor=H,this._contextKeyService=$,this._langId=h.EditorContextKeys.languageId.bindTo($),this._hasCompletionItemProvider=h.EditorContextKeys.hasCompletionItemProvider.bindTo($),this._hasCodeActionsProvider=h.EditorContextKeys.hasCodeActionsProvider.bindTo($),this._hasCodeLensProvider=h.EditorContextKeys.hasCodeLensProvider.bindTo($),this._hasDefinitionProvider=h.EditorContextKeys.hasDefinitionProvider.bindTo($),this._hasDeclarationProvider=h.EditorContextKeys.hasDeclarationProvider.bindTo($),this._hasImplementationProvider=h.EditorContextKeys.hasImplementationProvider.bindTo($),this._hasTypeDefinitionProvider=h.EditorContextKeys.hasTypeDefinitionProvider.bindTo($),this._hasHoverProvider=h.EditorContextKeys.hasHoverProvider.bindTo($),this._hasDocumentHighlightProvider=h.EditorContextKeys.hasDocumentHighlightProvider.bindTo($),this._hasDocumentSymbolProvider=h.EditorContextKeys.hasDocumentSymbolProvider.bindTo($),this._hasReferenceProvider=h.EditorContextKeys.hasReferenceProvider.bindTo($),this._hasRenameProvider=h.EditorContextKeys.hasRenameProvider.bindTo($),this._hasSignatureHelpProvider=h.EditorContextKeys.hasSignatureHelpProvider.bindTo($),this._hasInlineHintsProvider=h.EditorContextKeys.hasInlineHintsProvider.bindTo($),this._hasDocumentFormattingProvider=h.EditorContextKeys.hasDocumentFormattingProvider.bindTo($),this._hasDocumentSelectionFormattingProvider=h.EditorContextKeys.hasDocumentSelectionFormattingProvider.bindTo($),this._hasMultipleDocumentFormattingProvider=h.EditorContextKeys.hasMultipleDocumentFormattingProvider.bindTo($),this._hasMultipleDocumentSelectionFormattingProvider=h.EditorContextKeys.hasMultipleDocumentSelectionFormattingProvider.bindTo($),this._isInWalkThrough=h.EditorContextKeys.isInWalkThroughSnippet.bindTo($);const ie=()=>this._update();this._register(H.onDidChangeModel(ie)),this._register(H.onDidChangeModelLanguage(ie)),this._register(m.CompletionProviderRegistry.onDidChange(ie)),this._register(m.CodeActionProviderRegistry.onDidChange(ie)),this._register(m.CodeLensProviderRegistry.onDidChange(ie)),this._register(m.DefinitionProviderRegistry.onDidChange(ie)),this._register(m.DeclarationProviderRegistry.onDidChange(ie)),this._register(m.ImplementationProviderRegistry.onDidChange(ie)),this._register(m.TypeDefinitionProviderRegistry.onDidChange(ie)),this._register(m.HoverProviderRegistry.onDidChange(ie)),this._register(m.DocumentHighlightProviderRegistry.onDidChange(ie)),this._register(m.DocumentSymbolProviderRegistry.onDidChange(ie)),this._register(m.ReferenceProviderRegistry.onDidChange(ie)),this._register(m.RenameProviderRegistry.onDidChange(ie)),this._register(m.DocumentFormattingEditProviderRegistry.onDidChange(ie)),this._register(m.DocumentRangeFormattingEditProviderRegistry.onDidChange(ie)),this._register(m.SignatureHelpProviderRegistry.onDidChange(ie)),this._register(m.InlineHintsProviderRegistry.onDidChange(ie)),ie()}dispose(){super.dispose()}reset(){this._contextKeyService.bufferChangeEvents(()=>{this._langId.reset(),this._hasCompletionItemProvider.reset(),this._hasCodeActionsProvider.reset(),this._hasCodeLensProvider.reset(),this._hasDefinitionProvider.reset(),this._hasDeclarationProvider.reset(),this._hasImplementationProvider.reset(),this._hasTypeDefinitionProvider.reset(),this._hasHoverProvider.reset(),this._hasDocumentHighlightProvider.reset(),this._hasDocumentSymbolProvider.reset(),this._hasReferenceProvider.reset(),this._hasRenameProvider.reset(),this._hasDocumentFormattingProvider.reset(),this._hasDocumentSelectionFormattingProvider.reset(),this._hasSignatureHelpProvider.reset(),this._isInWalkThrough.reset()})}_update(){const H=this._editor.getModel();if(!H){this.reset();return}this._contextKeyService.bufferChangeEvents(()=>{this._langId.set(H.getLanguageIdentifier().language),this._hasCompletionItemProvider.set(m.CompletionProviderRegistry.has(H)),this._hasCodeActionsProvider.set(m.CodeActionProviderRegistry.has(H)),this._hasCodeLensProvider.set(m.CodeLensProviderRegistry.has(H)),this._hasDefinitionProvider.set(m.DefinitionProviderRegistry.has(H)),this._hasDeclarationProvider.set(m.DeclarationProviderRegistry.has(H)),this._hasImplementationProvider.set(m.ImplementationProviderRegistry.has(H)),this._hasTypeDefinitionProvider.set(m.TypeDefinitionProviderRegistry.has(H)),this._hasHoverProvider.set(m.HoverProviderRegistry.has(H)),this._hasDocumentHighlightProvider.set(m.DocumentHighlightProviderRegistry.has(H)),this._hasDocumentSymbolProvider.set(m.DocumentSymbolProviderRegistry.has(H)),this._hasReferenceProvider.set(m.ReferenceProviderRegistry.has(H)),this._hasRenameProvider.set(m.RenameProviderRegistry.has(H)),this._hasSignatureHelpProvider.set(m.SignatureHelpProviderRegistry.has(H)),this._hasInlineHintsProvider.set(m.InlineHintsProviderRegistry.has(H)),this._hasDocumentFormattingProvider.set(m.DocumentFormattingEditProviderRegistry.has(H)||m.DocumentRangeFormattingEditProviderRegistry.has(H)),this._hasDocumentSelectionFormattingProvider.set(m.DocumentRangeFormattingEditProviderRegistry.has(H)),this._hasMultipleDocumentFormattingProvider.set(m.DocumentFormattingEditProviderRegistry.all(H).length+m.DocumentRangeFormattingEditProviderRegistry.all(H).length>1),this._hasMultipleDocumentSelectionFormattingProvider.set(m.DocumentRangeFormattingEditProviderRegistry.all(H).length>1),this._isInWalkThrough.set(H.uri.scheme===C.Schemas.walkThroughSnippet)})}}e.EditorModeContext=ee;class se extends S.Disposable{constructor(H){super();this._onChange=this._register(new w.Emitter),this.onChange=this._onChange.event,this._hasFocus=!1,this._domFocusTracker=this._register(N.trackFocus(H)),this._register(this._domFocusTracker.onDidFocus(()=>{this._hasFocus=!0,this._onChange.fire(void 0)})),this._register(this._domFocusTracker.onDidBlur(()=>{this._hasFocus=!1,this._onChange.fire(void 0)}))}hasFocus(){return this._hasFocus}}const ne=encodeURIComponent("");function X(U){return ne+encodeURIComponent(U.toString())+le}const z=encodeURIComponent('');function V(U){return z+encodeURIComponent(U.toString())+P}T.registerThemingParticipant((U,H)=>{const $=U.getColor(f.editorErrorBorder);$&&H.addRule(`.monaco-editor .squiggly-error { border-bottom: 4px double ${$}; }`);const ie=U.getColor(f.editorErrorForeground);ie&&H.addRule(`.monaco-editor .squiggly-error { background: url("data:image/svg+xml,${X(ie)}") repeat-x bottom left; }`);const oe=U.getColor(f.editorErrorBackground);oe&&H.addRule(`.monaco-editor .squiggly-error::before { display: block; content: ''; width: 100%; height: 100%; background: ${oe}; }`);const ae=U.getColor(f.editorWarningBorder);ae&&H.addRule(`.monaco-editor .squiggly-warning { border-bottom: 4px double ${ae}; }`);const G=U.getColor(f.editorWarningForeground);G&&H.addRule(`.monaco-editor .squiggly-warning { background: url("data:image/svg+xml,${X(G)}") repeat-x bottom left; }`);const j=U.getColor(f.editorWarningBackground);j&&H.addRule(`.monaco-editor .squiggly-warning::before { display: block; content: ''; width: 100%; height: 100%; background: ${j}; }`);const te=U.getColor(f.editorInfoBorder);te&&H.addRule(`.monaco-editor .squiggly-info { border-bottom: 4px double ${te}; }`);const Z=U.getColor(f.editorInfoForeground);Z&&H.addRule(`.monaco-editor .squiggly-info { background: url("data:image/svg+xml,${X(Z)}") repeat-x bottom left; }`);const ue=U.getColor(f.editorInfoBackground);ue&&H.addRule(`.monaco-editor .squiggly-info::before { display: block; content: ''; width: 100%; height: 100%; background: ${ue}; }`);const he=U.getColor(f.editorHintBorder);he&&H.addRule(`.monaco-editor .squiggly-hint { border-bottom: 2px dotted ${he}; }`);const re=U.getColor(f.editorHintForeground);re&&H.addRule(`.monaco-editor .squiggly-hint { background: url("data:image/svg+xml,${V(re)}") no-repeat bottom left; }`);const ce=U.getColor(_.editorUnnecessaryCodeOpacity);ce&&H.addRule(`.monaco-editor.showUnused .squiggly-inline-unnecessary { opacity: ${ce.rgba.a}; }`);const me=U.getColor(_.editorUnnecessaryCodeBorder);me&&H.addRule(`.monaco-editor.showUnused .squiggly-unnecessary { border-bottom: 2px dashed ${me}; }`);const Ce=U.getColor(f.editorForeground)||"inherit";H.addRule(`.monaco-editor.showDeprecated .squiggly-inline-deprecated { text-decoration: line-through; text-decoration-color: ${Ce}}`)})}),define(Q[144],J([0,1,40,28,143,26,16,9,32,11,65]),function(q,e,b,N,M,w,S,C,d,g,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.EmbeddedCodeEditorWidget=void 0;let c=class extends M.CodeEditorWidget{constructor(s,a,u,r,i,n,t,l,h,m){super(s,Object.assign(Object.assign({},u.getRawOptions()),{overflowWidgetsDomNode:u.getOverflowWidgetsDomNode()}),{},r,i,n,t,l,h,m);this._parentEditor=u,this._overwriteOptions=a,super.updateOptions(this._overwriteOptions),this._register(u.onDidChangeConfiguration(_=>this._onParentConfigurationChanged(_)))}getParentEditor(){return this._parentEditor}_onParentConfigurationChanged(s){super.updateOptions(this._parentEditor.getRawOptions()),super.updateOptions(this._overwriteOptions)}updateOptions(s){b.mixin(this._overwriteOptions,s,!0),super.updateOptions(this._overwriteOptions)}};c=Me([_e(3,C.IInstantiationService),_e(4,N.ICodeEditorService),_e(5,w.ICommandService),_e(6,S.IContextKeyService),_e(7,g.IThemeService),_e(8,d.INotificationService),_e(9,p.IAccessibilityService)],c),e.EmbeddedCodeEditorWidget=c}),define(Q[611],J([0,1,13,461,25,21,39,16,73,47,335]),function(q,e,b,N,M,w,S,C,d,g){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SelectionAnchorSet=void 0,e.SelectionAnchorSet=new C.RawContextKey("selectionAnchorSet",!1);let p=class Ft{constructor(r,i){this.editor=r,this.selectionAnchorSetContextKey=e.SelectionAnchorSet.bindTo(i),this.modelChangeListener=r.onDidChangeModel(()=>this.selectionAnchorSetContextKey.reset())}static get(r){return r.getContribution(Ft.ID)}setSelectionAnchor(){if(this.editor.hasModel()){const r=this.editor.getPosition(),i=this.decorationId?[this.decorationId]:[],n=this.editor.deltaDecorations(i,[{range:w.Selection.fromPositions(r,r),options:{stickiness:1,hoverMessage:new d.MarkdownString().appendText(N.localize(0,null)),className:"selection-anchor"}}]);this.decorationId=n[0],this.selectionAnchorSetContextKey.set(!!this.decorationId),g.alert(N.localize(1,null,r.lineNumber,r.column))}}goToSelectionAnchor(){if(this.editor.hasModel()&&this.decorationId){const r=this.editor.getModel().getDecorationRange(this.decorationId);r&&this.editor.setPosition(r.getStartPosition())}}selectFromAnchorToCursor(){if(this.editor.hasModel()&&this.decorationId){const r=this.editor.getModel().getDecorationRange(this.decorationId);if(r){const i=this.editor.getPosition();this.editor.setSelection(w.Selection.fromPositions(r.getStartPosition(),i)),this.cancelSelectionAnchor()}}}cancelSelectionAnchor(){this.decorationId&&(this.editor.deltaDecorations([this.decorationId],[]),this.decorationId=void 0,this.selectionAnchorSetContextKey.set(!1))}dispose(){this.cancelSelectionAnchor(),this.modelChangeListener.dispose()}};p.ID="editor.contrib.selectionAnchorController",p=Me([_e(1,C.IContextKeyService)],p);class c extends b.EditorAction{constructor(){super({id:"editor.action.setSelectionAnchor",label:N.localize(2,null),alias:"Set Selection Anchor",precondition:void 0,kbOpts:{kbExpr:M.EditorContextKeys.editorTextFocus,primary:S.KeyChord(2048|41,2048|32),weight:100}})}run(r,i){return Ie(this,void 0,void 0,function*(){p.get(i).setSelectionAnchor()})}}class o extends b.EditorAction{constructor(){super({id:"editor.action.goToSelectionAnchor",label:N.localize(3,null),alias:"Go to Selection Anchor",precondition:e.SelectionAnchorSet})}run(r,i){return Ie(this,void 0,void 0,function*(){p.get(i).goToSelectionAnchor()})}}class s extends b.EditorAction{constructor(){super({id:"editor.action.selectFromAnchorToCursor",label:N.localize(4,null),alias:"Select from Anchor to Cursor",precondition:e.SelectionAnchorSet,kbOpts:{kbExpr:M.EditorContextKeys.editorTextFocus,primary:S.KeyChord(2048|41,2048|41),weight:100}})}run(r,i){return Ie(this,void 0,void 0,function*(){p.get(i).selectFromAnchorToCursor()})}}class a extends b.EditorAction{constructor(){super({id:"editor.action.cancelSelectionAnchor",label:N.localize(5,null),alias:"Cancel Selection Anchor",precondition:e.SelectionAnchorSet,kbOpts:{kbExpr:M.EditorContextKeys.editorTextFocus,primary:9,weight:100}})}run(r,i){return Ie(this,void 0,void 0,function*(){p.get(i).cancelSelectionAnchor()})}}b.registerEditorContribution(p.ID,p),b.registerEditorAction(c),b.registerEditorAction(o),b.registerEditorAction(s),b.registerEditorAction(a)}),define(Q[612],J([0,1,462,15,2,13,14,3,21,25,53,31,49,22,11,34,336]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.BracketMatchingController=void 0;const r=s.registerColor("editorOverviewRuler.bracketMatchForeground",{dark:"#A0A0A0",light:"#A0A0A0",hc:"#A0A0A0"},b.localize(0,null));class i extends w.EditorAction{constructor(){super({id:"editor.action.jumpToBracket",label:b.localize(1,null),alias:"Go to Bracket",precondition:void 0,kbOpts:{kbExpr:g.EditorContextKeys.editorTextFocus,primary:2048|1024|88,weight:100}})}run(m,_){let f=l.get(_);!f||f.jumpToBracket()}}class n extends w.EditorAction{constructor(){super({id:"editor.action.selectToBracket",label:b.localize(2,null),alias:"Select to Bracket",precondition:void 0,description:{description:"Select to Bracket",args:[{name:"args",schema:{type:"object",properties:{selectBrackets:{type:"boolean",default:!0}}}}]}})}run(m,_,f){const v=l.get(_);if(!!v){let y=!0;f&&f.selectBrackets===!1&&(y=!1),v.selectToBracket(y)}}}class t{constructor(m,_,f){this.position=m,this.brackets=_,this.options=f}}class l extends M.Disposable{constructor(m){super();this._editor=m,this._lastBracketsData=[],this._lastVersionId=0,this._decorations=[],this._updateBracketsSoon=this._register(new N.RunOnceScheduler(()=>this._updateBrackets(),50)),this._matchBrackets=this._editor.getOption(58),this._updateBracketsSoon.schedule(),this._register(m.onDidChangeCursorPosition(_=>{this._matchBrackets!=="never"&&this._updateBracketsSoon.schedule()})),this._register(m.onDidChangeModelContent(_=>{this._updateBracketsSoon.schedule()})),this._register(m.onDidChangeModel(_=>{this._lastBracketsData=[],this._decorations=[],this._updateBracketsSoon.schedule()})),this._register(m.onDidChangeModelLanguageConfiguration(_=>{this._lastBracketsData=[],this._updateBracketsSoon.schedule()})),this._register(m.onDidChangeConfiguration(_=>{_.hasChanged(58)&&(this._matchBrackets=this._editor.getOption(58),this._decorations=this._editor.deltaDecorations(this._decorations,[]),this._lastBracketsData=[],this._lastVersionId=0,this._updateBracketsSoon.schedule())}))}static get(m){return m.getContribution(l.ID)}jumpToBracket(){if(!!this._editor.hasModel()){const m=this._editor.getModel(),_=this._editor.getSelections().map(f=>{const v=f.getStartPosition(),y=m.matchBracket(v);let L=null;if(y)y[0].containsPosition(v)?L=y[1].getStartPosition():y[1].containsPosition(v)&&(L=y[0].getStartPosition());else{const I=m.findEnclosingBrackets(v);if(I)L=I[0].getStartPosition();else{const k=m.findNextBracket(v);k&&k.range&&(L=k.range.getStartPosition())}}return L?new d.Selection(L.lineNumber,L.column,L.lineNumber,L.column):new d.Selection(v.lineNumber,v.column,v.lineNumber,v.column)});this._editor.setSelections(_),this._editor.revealRange(_[0])}}selectToBracket(m){if(!!this._editor.hasModel()){const _=this._editor.getModel(),f=[];this._editor.getSelections().forEach(v=>{const y=v.getStartPosition();let L=_.matchBracket(y);if(!L&&(L=_.findEnclosingBrackets(y),!L)){const E=_.findNextBracket(y);E&&E.range&&(L=_.matchBracket(E.range.getStartPosition()))}let I=null,k=null;if(L){L.sort(C.Range.compareRangesUsingStarts);const[E,T]=L;I=m?E.getStartPosition():E.getEndPosition(),k=m?T.getEndPosition():T.getStartPosition()}I&&k&&f.push(new d.Selection(I.lineNumber,I.column,k.lineNumber,k.column))}),f.length>0&&(this._editor.setSelections(f),this._editor.revealRange(f[0]))}}_updateBrackets(){if(this._matchBrackets!=="never"){this._recomputeBrackets();let m=[],_=0;for(const f of this._lastBracketsData){let v=f.brackets;v&&(m[_++]={range:v[0],options:f.options},m[_++]={range:v[1],options:f.options})}this._decorations=this._editor.deltaDecorations(this._decorations,m)}}_recomputeBrackets(){if(!this._editor.hasModel()){this._lastBracketsData=[],this._lastVersionId=0;return}const m=this._editor.getSelections();if(m.length>100){this._lastBracketsData=[],this._lastVersionId=0;return}const _=this._editor.getModel(),f=_.getVersionId();let v=[];this._lastVersionId===f&&(v=this._lastBracketsData);let y=[],L=0;for(let O=0,A=m.length;O1&&y.sort(S.Position.compare);let I=[],k=0,E=0,T=v.length;for(let O=0,A=y.length;O{const _=h.getColor(o.editorBracketMatchBackground);_&&m.addRule(`.monaco-editor .bracket-match { background-color: ${_}; }`);const f=h.getColor(o.editorBracketMatchBorder);f&&m.addRule(`.monaco-editor .bracket-match { border: 1px solid ${f}; }`)}),u.MenuRegistry.appendMenuItem(u.MenuId.MenubarGoMenu,{group:"5_infile_nav",command:{id:"editor.action.jumpToBracket",title:b.localize(3,null)},order:2})}),define(Q[613],J([0,1,463,13,25,399]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0});class S extends N.EditorAction{constructor(p,c){super(c);this.left=p}run(p,c){if(!!c.hasModel()){let o=[],s=c.getSelections();for(const a of s)o.push(new w.MoveCaretCommand(a,this.left));c.pushUndoStop(),c.executeCommands(this.id,o),c.pushUndoStop()}}}class C extends S{constructor(){super(!0,{id:"editor.action.moveCarretLeftAction",label:b.localize(0,null),alias:"Move Selected Text Left",precondition:M.EditorContextKeys.writable})}}class d extends S{constructor(){super(!1,{id:"editor.action.moveCarretRightAction",label:b.localize(1,null),alias:"Move Selected Text Right",precondition:M.EditorContextKeys.writable})}}N.registerEditorAction(C),N.registerEditorAction(d)}),define(Q[614],J([0,1,464,13,92,3,25,180]),function(q,e,b,N,M,w,S,C){"use strict";Object.defineProperty(e,"__esModule",{value:!0});class d extends N.EditorAction{constructor(){super({id:"editor.action.transposeLetters",label:b.localize(0,null),alias:"Transpose Letters",precondition:S.EditorContextKeys.writable,kbOpts:{kbExpr:S.EditorContextKeys.textInputFocus,primary:0,mac:{primary:256|50},weight:100}})}run(p,c){if(!!c.hasModel()){let o=c.getModel(),s=[],a=c.getSelections();for(let u of a)if(!!u.isEmpty()){let r=u.startLineNumber,i=u.startColumn,n=o.getLineMaxColumn(r);if(!(r===1&&(i===1||i===2&&n===2))){let t=i===n?u.getPosition():C.MoveOperations.rightPosition(o,u.getPosition().lineNumber,u.getPosition().column),l=C.MoveOperations.leftPosition(o,t.lineNumber,t.column),h=C.MoveOperations.leftPosition(o,l.lineNumber,l.column),m=o.getValueInRange(w.Range.fromPositions(h,l)),_=o.getValueInRange(w.Range.fromPositions(l,t)),f=w.Range.fromPositions(h,t);s.push(new M.ReplaceCommand(f,_+m))}}s.length>0&&(c.pushUndoStop(),c.executeCommands(this.id,s),c.pushUndoStop())}}}N.registerEditorAction(d)}),define(Q[615],J([0,1,465,35,17,164,13,28,25,34,84]),function(q,e,b,N,M,w,S,C,d,g,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.PasteAction=e.CopyAction=e.CutAction=void 0;const c="9_cutcopypaste",o=M.isNative||document.queryCommandSupported("cut"),s=M.isNative||document.queryCommandSupported("copy"),a=typeof navigator.clipboard=="undefined"||N.isFirefox?document.queryCommandSupported("paste"):!0;function u(n){return n.register(),n}e.CutAction=o?u(new S.MultiCommand({id:"editor.action.clipboardCutAction",precondition:void 0,kbOpts:M.isNative?{primary:2048|54,win:{primary:2048|54,secondary:[1024|20]},weight:100}:void 0,menuOpts:[{menuId:g.MenuId.MenubarEditMenu,group:"2_ccp",title:b.localize(0,null),order:1},{menuId:g.MenuId.EditorContext,group:c,title:b.localize(1,null),when:d.EditorContextKeys.writable,order:1},{menuId:g.MenuId.CommandPalette,group:"",title:b.localize(2,null),order:1}]})):void 0,e.CopyAction=s?u(new S.MultiCommand({id:"editor.action.clipboardCopyAction",precondition:void 0,kbOpts:M.isNative?{primary:2048|33,win:{primary:2048|33,secondary:[2048|19]},weight:100}:void 0,menuOpts:[{menuId:g.MenuId.MenubarEditMenu,group:"2_ccp",title:b.localize(3,null),order:2},{menuId:g.MenuId.EditorContext,group:c,title:b.localize(4,null),order:2},{menuId:g.MenuId.CommandPalette,group:"",title:b.localize(5,null),order:1}]})):void 0,e.PasteAction=a?u(new S.MultiCommand({id:"editor.action.clipboardPasteAction",precondition:void 0,kbOpts:M.isNative?{primary:2048|52,win:{primary:2048|52,secondary:[1024|19]},linux:{primary:2048|52,secondary:[1024|19]},weight:100}:void 0,menuOpts:[{menuId:g.MenuId.MenubarEditMenu,group:"2_ccp",title:b.localize(6,null),order:3},{menuId:g.MenuId.EditorContext,group:c,title:b.localize(7,null),when:d.EditorContextKeys.writable,order:3},{menuId:g.MenuId.CommandPalette,group:"",title:b.localize(8,null),order:1}]})):void 0;class r extends S.EditorAction{constructor(){super({id:"editor.action.clipboardCopyWithSyntaxHighlightingAction",label:b.localize(9,null),alias:"Copy With Syntax Highlighting",precondition:void 0,kbOpts:{kbExpr:d.EditorContextKeys.textInputFocus,primary:0,weight:100}})}run(t,l){!l.hasModel()||!l.getOption(28)&&l.getSelection().isEmpty()||(w.CopyOptions.forceCopyWithSyntaxHighlighting=!0,l.focus(),document.execCommand("copy"),w.CopyOptions.forceCopyWithSyntaxHighlighting=!1)}}function i(n,t){!n||(n.addImplementation(1e4,(l,h)=>{const m=l.get(C.ICodeEditorService).getFocusedCodeEditor();if(m&&m.hasTextFocus()){const _=m.getOption(28),f=m.getSelection();return f&&f.isEmpty()&&!_||document.execCommand(t),!0}return!1}),n.addImplementation(0,(l,h)=>(document.execCommand(t),!0)))}i(e.CutAction,"cut"),i(e.CopyAction,"copy"),e.PasteAction&&(e.PasteAction.addImplementation(1e4,(n,t)=>{const l=n.get(C.ICodeEditorService),h=n.get(p.IClipboardService),m=l.getFocusedCodeEditor();return m&&m.hasTextFocus()?(!document.execCommand("paste")&&M.isWeb&&(()=>Ie(void 0,void 0,void 0,function*(){const f=yield h.readText();if(f!==""){const v=w.InMemoryClipboardMetadataManager.INSTANCE.get(f);let y=!1,L=null,I=null;v&&(y=m.getOption(28)&&!!v.isFromEmptySelection,L=typeof v.multicursorText!="undefined"?v.multicursorText:null,I=v.mode),m.trigger("keyboard","paste",{text:f,pasteOnNewLine:y,multicursorText:L,mode:I})}}))(),!0):!1}),e.PasteAction.addImplementation(0,(n,t)=>(document.execCommand("paste"),!0))),s&&S.registerEditorAction(r)}),define(Q[145],J([0,1,19,23,12,2,24,70,3,21,18,36,130,59,26]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getCodeActions=e.CodeActionItem=e.fixAllCommandId=e.organizeImportsCommandId=e.sourceActionCommandId=e.refactorCommandId=e.codeActionCommandId=void 0,e.codeActionCommandId="editor.action.codeAction",e.refactorCommandId="editor.action.refactor",e.sourceActionCommandId="editor.action.sourceAction",e.organizeImportsCommandId="editor.action.organizeImports",e.fixAllCommandId="editor.action.fixAll";class u{constructor(m,_){this.action=m,this.provider=_}resolve(m){var _;return Ie(this,void 0,void 0,function*(){if(((_=this.provider)===null||_===void 0?void 0:_.resolveCodeAction)&&!this.action.edit){let f;try{f=yield this.provider.resolveCodeAction(this.action,m)}catch(v){M.onUnexpectedExternalError(v)}f&&(this.action.edit=f.edit)}return this})}}e.CodeActionItem=u;class r extends w.Disposable{constructor(m,_,f){super();this.documentation=_,this._register(f),this.allActions=b.mergeSort([...m],r.codeActionsComparator),this.validActions=this.allActions.filter(({action:v})=>!v.disabled)}static codeActionsComparator({action:m},{action:_}){return m.isPreferred&&!_.isPreferred?-1:!m.isPreferred&&_.isPreferred?1:b.isNonEmptyArray(m.diagnostics)?b.isNonEmptyArray(_.diagnostics)?m.diagnostics[0].message.localeCompare(_.diagnostics[0].message):-1:b.isNonEmptyArray(_.diagnostics)?1:0}get hasAutoFix(){return this.validActions.some(({action:m})=>!!m.kind&&o.CodeActionKind.QuickFix.contains(new o.CodeActionKind(m.kind))&&!!m.isPreferred)}}const i={actions:[],documentation:void 0};function n(h,m,_,f,v){var y;const L=_.filter||{},I={only:(y=L.include)===null||y===void 0?void 0:y.value,trigger:_.type},k=new C.TextModelCancellationTokenSource(h,v),E=t(h,L),T=new w.DisposableStore,O=E.map(B=>Ie(this,void 0,void 0,function*(){try{f.report(B);const F=yield B.provideCodeActions(h,m,I,k.token);if(F&&T.add(F),k.token.isCancellationRequested)return i;const D=((F==null?void 0:F.actions)||[]).filter(W=>W&&o.filtersAction(L,W)),R=l(B,D,L.include);return{actions:D.map(W=>new u(W,B)),documentation:R}}catch(F){if(M.isPromiseCanceledError(F))throw F;return M.onUnexpectedExternalError(F),i}})),A=p.CodeActionProviderRegistry.onDidChange(()=>{const B=p.CodeActionProviderRegistry.all(h);b.equals(B,E)||k.cancel()});return Promise.all(O).then(B=>{const F=b.flatten(B.map(R=>R.actions)),D=b.coalesce(B.map(R=>R.documentation));return new r(F,D,T)}).finally(()=>{A.dispose(),k.dispose()})}e.getCodeActions=n;function t(h,m){return p.CodeActionProviderRegistry.all(h).filter(_=>_.providedCodeActionKinds?_.providedCodeActionKinds.some(f=>o.mayIncludeActionsOfKind(m,new o.CodeActionKind(f))):!0)}function l(h,m,_){if(!!h.documentation){const f=h.documentation.map(v=>({kind:new o.CodeActionKind(v.kind),command:v.command}));if(_){let v;for(const y of f)y.kind.contains(_)&&(v?v.kind.contains(y.kind)&&(v=y):v=y);if(v)return v==null?void 0:v.command}for(const v of m)if(!!v.kind){for(const y of f)if(y.kind.contains(new o.CodeActionKind(v.kind)))return y.command}}}a.CommandsRegistry.registerCommand("_executeCodeActionProvider",function(h,m,_,f,v){return Ie(this,void 0,void 0,function*(){if(!(m instanceof S.URI))throw M.illegalArgument();const y=h.get(c.IModelService).getModel(m);if(!y)throw M.illegalArgument();const L=g.Selection.isISelection(_)?g.Selection.liftSelection(_):d.Range.isIRange(_)?y.validateRange(_):void 0;if(!L)throw M.illegalArgument();const I=typeof f=="string"?new o.CodeActionKind(f):void 0,k=yield n(y,L,{type:2,filter:{includeSourceActions:!0,include:I}},s.Progress.None,N.CancellationToken.None),E=[],T=Math.min(k.validActions.length,typeof v=="number"?v:0);for(let O=0;OO.action)}finally{setTimeout(()=>k.dispose(),100)}})})}),define(Q[616],J([0,1,7,48,12,150,2,14,18,145,130,68,37]),function(q,e,b,N,M,w,S,C,d,g,p,c,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CodeActionKeybindingResolver=e.CodeActionMenu=void 0;class s extends N.Action{constructor(n,t){super(n.command?n.command.id:n.title,a(n.title),void 0,!n.disabled,t);this.action=n}}function a(i){return i.replace(/\r\n|\r|\n/g," ")}let u=class extends S.Disposable{constructor(n,t,l,h){super();this._editor=n,this._delegate=t,this._contextMenuService=l,this._visible=!1,this._showingActions=this._register(new S.MutableDisposable),this._keybindingResolver=new r({getKeybindings:()=>h.getKeybindings()})}get isVisible(){return this._visible}show(n,t,l,h){return Ie(this,void 0,void 0,function*(){const m=h.includeDisabledActions?t.allActions:t.validActions;if(!m.length){this._visible=!1;return}if(!this._editor.getDomNode())throw this._visible=!1,M.canceled();this._visible=!0,this._showingActions.value=t;const _=this.getMenuActions(n,m,t.documentation),f=C.Position.isIPosition(l)?this._toCoords(l):l||{x:0,y:0},v=this._keybindingResolver.getResolver();this._contextMenuService.showContextMenu({domForShadowRoot:this._editor.getDomNode(),getAnchor:()=>f,getActions:()=>_,onHide:()=>{this._visible=!1,this._editor.focus()},autoSelectFirstItem:!0,getKeyBinding:y=>y instanceof s?v(y.action):void 0})})}getMenuActions(n,t,l){var h,m;const _=L=>new s(L.action,()=>this._delegate.onSelectCodeAction(L)),f=t.map(_),v=[...l],y=this._editor.getModel();if(y&&f.length)for(const L of d.CodeActionProviderRegistry.all(y))L._getAdditionalMenuItems&&v.push(...L._getAdditionalMenuItems({trigger:n.type,only:(m=(h=n.filter)===null||h===void 0?void 0:h.include)===null||m===void 0?void 0:m.value},t.map(I=>I.action)));return v.length&&f.push(new N.Separator,...v.map(L=>_(new g.CodeActionItem({title:L.title,command:L},void 0)))),f}_toCoords(n){if(!this._editor.hasModel())return{x:0,y:0};this._editor.revealPosition(n,1),this._editor.render();const t=this._editor.getScrolledVisiblePosition(n),l=b.getDomNodePagePosition(this._editor.getDomNode()),h=l.left+t.left,m=l.top+t.top+t.height;return{x:h,y:m}}};u=Me([_e(2,c.IContextMenuService),_e(3,o.IKeybindingService)],u),e.CodeActionMenu=u;class r{constructor(n){this._keybindingProvider=n}getResolver(){const n=new w.Lazy(()=>this._keybindingProvider.getKeybindings().filter(t=>r.codeActionCommands.indexOf(t.command)>=0).filter(t=>t.resolvedKeybinding).map(t=>{let l=t.commandArgs;return t.command===g.organizeImportsCommandId?l={kind:p.CodeActionKind.SourceOrganizeImports.value}:t.command===g.fixAllCommandId&&(l={kind:p.CodeActionKind.SourceFixAll.value}),Object.assign({resolvedKeybinding:t.resolvedKeybinding},p.CodeActionCommandArgs.fromUser(l,{kind:p.CodeActionKind.None,apply:"never"}))}));return t=>{if(t.kind){const l=this.bestKeybindingForCodeAction(t,n.getValue());return l==null?void 0:l.resolvedKeybinding}}}bestKeybindingForCodeAction(n,t){if(!!n.kind){const l=new p.CodeActionKind(n.kind);return t.filter(h=>h.kind.contains(l)).filter(h=>h.preferred?n.isPreferred:!0).reduceRight((h,m)=>h?h.kind.contains(m.kind)?m:h:m,void 0)}}}e.CodeActionKeybindingResolver=r,r.codeActionCommands=[g.refactorCommandId,g.codeActionCommandId,g.sourceActionCommandId,g.organizeImportsCommandId,g.fixAllCommandId]});var tt=this&&this.__classPrivateFieldGet||function(q,e){if(!e.has(q))throw new TypeError("attempted to get private field on non-instance");return e.get(q)},_t=this&&this.__classPrivateFieldSet||function(q,e,b){if(!e.has(q))throw new TypeError("attempted to set private field on non-instance");return e.set(q,b),b};define(Q[617],J([0,1,15,12,6,2,44,3,18,16,59,145]),function(q,e,b,N,M,w,S,C,d,g,p,c){"use strict";var o;Object.defineProperty(e,"__esModule",{value:!0}),e.CodeActionModel=e.CodeActionsState=e.SUPPORTED_CODE_ACTIONS=void 0,e.SUPPORTED_CODE_ACTIONS=new g.RawContextKey("supportedCodeAction","");class s extends w.Disposable{constructor(n,t,l,h=250){super();this._editor=n,this._markerService=t,this._signalChange=l,this._delay=h,this._autoTriggerTimer=this._register(new b.TimeoutTimer),this._register(this._markerService.onMarkerChanged(m=>this._onMarkerChanges(m))),this._register(this._editor.onDidChangeCursorPosition(()=>this._onCursorChange()))}trigger(n){const t=this._getRangeOfSelectionUnlessWhitespaceEnclosed(n);return this._createEventAndSignalChange(n,t)}_onMarkerChanges(n){const t=this._editor.getModel();!t||n.some(l=>S.isEqual(l,t.uri))&&this._autoTriggerTimer.cancelAndSet(()=>{this.trigger({type:1})},this._delay)}_onCursorChange(){this._autoTriggerTimer.cancelAndSet(()=>{this.trigger({type:1})},this._delay)}_getRangeOfMarker(n){const t=this._editor.getModel();if(!!t)for(const l of this._markerService.read({resource:t.uri})){const h=t.validateRange(l);if(C.Range.intersectRanges(h,n))return C.Range.lift(h)}}_getRangeOfSelectionUnlessWhitespaceEnclosed(n){if(!!this._editor.hasModel()){const t=this._editor.getModel(),l=this._editor.getSelection();if(l.isEmpty()&&n.type===1){const{lineNumber:h,column:m}=l.getPosition(),_=t.getLineContent(h);if(_.length===0)return;if(m===1){if(/\s/.test(_[0]))return}else if(m===t.getLineMaxColumn(h)){if(/\s/.test(_[_.length-1]))return}else if(/\s/.test(_[m-2])&&/\s/.test(_[m-1]))return}return l}}_createEventAndSignalChange(n,t){const l=this._editor.getModel();if(!t||!l){this._signalChange(void 0);return}const h=this._getRangeOfMarker(t),m=h?h.getStartPosition():t.getStartPosition(),_={trigger:n,selection:t,position:m};return this._signalChange(_),_}}var a;(function(i){i.Empty={type:0};class n{constructor(l,h,m,_){this.trigger=l,this.rangeOrSelection=h,this.position=m,this._cancellablePromise=_,this.type=1,this.actions=_.catch(f=>{if(N.isPromiseCanceledError(f))return u;throw f})}cancel(){this._cancellablePromise.cancel()}}i.Triggered=n})(a=e.CodeActionsState||(e.CodeActionsState={}));const u={allActions:[],validActions:[],dispose:()=>{},documentation:[],hasAutoFix:!1};class r extends w.Disposable{constructor(n,t,l,h){super();this._editor=n,this._markerService=t,this._progressService=h,this._codeActionOracle=this._register(new w.MutableDisposable),this._state=a.Empty,this._onDidChangeState=this._register(new M.Emitter),this.onDidChangeState=this._onDidChangeState.event,o.set(this,!1),this._supportedCodeActions=e.SUPPORTED_CODE_ACTIONS.bindTo(l),this._register(this._editor.onDidChangeModel(()=>this._update())),this._register(this._editor.onDidChangeModelLanguage(()=>this._update())),this._register(d.CodeActionProviderRegistry.onDidChange(()=>this._update())),this._update()}dispose(){tt(this,o)||(_t(this,o,!0),super.dispose(),this.setState(a.Empty,!0))}_update(){if(!tt(this,o)){this._codeActionOracle.value=void 0,this.setState(a.Empty);const n=this._editor.getModel();if(n&&d.CodeActionProviderRegistry.has(n)&&!this._editor.getOption(75)){const t=[];for(const l of d.CodeActionProviderRegistry.all(n))Array.isArray(l.providedCodeActionKinds)&&t.push(...l.providedCodeActionKinds);this._supportedCodeActions.set(t.join(" ")),this._codeActionOracle.value=new s(this._editor,this._markerService,l=>{var h;if(!l){this.setState(a.Empty);return}const m=b.createCancelablePromise(_=>c.getCodeActions(n,l.selection,l.trigger,p.Progress.None,_));l.trigger.type===2&&((h=this._progressService)===null||h===void 0||h.showWhile(m,250)),this.setState(new a.Triggered(l.trigger,l.selection,l.position,m))},void 0),this._codeActionOracle.value.trigger({type:1})}else this._supportedCodeActions.reset()}}trigger(n){this._codeActionOracle.value&&this._codeActionOracle.value.trigger(n)}setState(n,t){n!==this._state&&(this._state.type===1&&this._state.cancel(),this._state=n,!t&&!tt(this,o)&&this._onDidChangeState.fire(n))}}e.CodeActionModel=r,o=new WeakMap}),define(Q[618],J([0,1,15,12,2,70,13,18,248,596,26,32,575,7,89,78,468,25,134]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CodeLensContribution=void 0;let t=class{constructor(h,m,_,f){this._editor=h,this._commandService=m,this._notificationService=_,this._codeLensCache=f,this._disposables=new M.DisposableStore,this._localToDispose=new M.DisposableStore,this._lenses=[],this._getCodeLensModelDelays=new n.LanguageFeatureRequestDelays(C.CodeLensProviderRegistry,250,2500),this._oldCodeLensModels=new M.DisposableStore,this._resolveCodeLensesDelays=new n.LanguageFeatureRequestDelays(C.CodeLensProviderRegistry,250,2500),this._resolveCodeLensesScheduler=new b.RunOnceScheduler(()=>this._resolveCodeLensesInViewport(),this._resolveCodeLensesDelays.min),this._disposables.add(this._editor.onDidChangeModel(()=>this._onModelChange())),this._disposables.add(this._editor.onDidChangeModelLanguage(()=>this._onModelChange())),this._disposables.add(this._editor.onDidChangeConfiguration(v=>{(v.hasChanged(38)||v.hasChanged(13)||v.hasChanged(12))&&this._updateLensStyle(),v.hasChanged(11)&&this._onModelChange()})),this._disposables.add(C.CodeLensProviderRegistry.onDidChange(this._onModelChange,this)),this._onModelChange(),this._styleClassName="_"+a.hash(this._editor.getId()).toString(16),this._styleElement=s.createStyleSheet(s.isInShadowDOM(this._editor.getContainerDomNode())?this._editor.getContainerDomNode():void 0),this._updateLensStyle()}dispose(){var h;this._localDispose(),this._disposables.dispose(),this._oldCodeLensModels.dispose(),(h=this._currentCodeLensModel)===null||h===void 0||h.dispose(),this._styleElement.remove()}_getLayoutInfo(){let h=this._editor.getOption(13),m;return!h||h<5?(h=this._editor.getOption(40)*.9|0,m=this._editor.getOption(53)):m=h*Math.max(1.3,this._editor.getOption(53)/this._editor.getOption(40))|0,{codeLensHeight:m,fontSize:h}}_updateLensStyle(){const{codeLensHeight:h,fontSize:m}=this._getLayoutInfo(),_=this._editor.getOption(12),f=this._editor.getOption(38),v=`--codelens-font-family${this._styleClassName}`;let y=` + .monaco-editor .codelens-decoration.${this._styleClassName} { line-height: ${h}px; font-size: ${m}px; padding-right: ${Math.round(m*.5)}px; font-feature-settings: ${f.fontFeatureSettings} } + .monaco-editor .codelens-decoration.${this._styleClassName} span.codicon { line-height: ${h}px; font-size: ${m}px; } + `;_&&(y+=`.monaco-editor .codelens-decoration.${this._styleClassName} { font-family: var(${v})}`),this._styleElement.textContent=y,this._editor.getContainerDomNode().style.setProperty(v,_!=null?_:"inherit"),this._editor.changeViewZones(L=>{for(let I of this._lenses)I.updateHeight(h,L)})}_localDispose(){var h,m,_;(h=this._getCodeLensModelPromise)===null||h===void 0||h.cancel(),this._getCodeLensModelPromise=void 0,(m=this._resolveCodeLensesPromise)===null||m===void 0||m.cancel(),this._resolveCodeLensesPromise=void 0,this._localToDispose.clear(),this._oldCodeLensModels.clear(),(_=this._currentCodeLensModel)===null||_===void 0||_.dispose()}_onModelChange(){this._localDispose();const h=this._editor.getModel();if(!!h&&!!this._editor.getOption(11)){const m=this._codeLensCache.get(h);if(m&&this._renderCodeLensSymbols(m),!C.CodeLensProviderRegistry.has(h)){m&&this._localToDispose.add(b.disposableTimeout(()=>{const f=this._codeLensCache.get(h);m===f&&(this._codeLensCache.delete(h),this._onModelChange())},30*1e3));return}for(const f of C.CodeLensProviderRegistry.all(h))if(typeof f.onDidChange=="function"){let v=f.onDidChange(()=>_.schedule());this._localToDispose.add(v)}const _=new b.RunOnceScheduler(()=>{var f;const v=Date.now();(f=this._getCodeLensModelPromise)===null||f===void 0||f.cancel(),this._getCodeLensModelPromise=b.createCancelablePromise(y=>d.getCodeLensModel(h,y)),this._getCodeLensModelPromise.then(y=>{this._currentCodeLensModel&&this._oldCodeLensModels.add(this._currentCodeLensModel),this._currentCodeLensModel=y,this._codeLensCache.put(h,y);const L=this._getCodeLensModelDelays.update(h,Date.now()-v);_.delay=L,this._renderCodeLensSymbols(y),this._resolveCodeLensesInViewport()},N.onUnexpectedError)},this._getCodeLensModelDelays.get(h));this._localToDispose.add(_),this._localToDispose.add(M.toDisposable(()=>this._resolveCodeLensesScheduler.cancel())),this._localToDispose.add(this._editor.onDidChangeModelContent(()=>{this._editor.changeDecorations(f=>{this._editor.changeViewZones(v=>{let y=[],L=-1;this._lenses.forEach(k=>{!k.isValid()||L===k.getLineNumber()?y.push(k):(k.update(v),L=k.getLineNumber())});let I=new g.CodeLensHelper;y.forEach(k=>{k.dispose(I,v),this._lenses.splice(this._lenses.indexOf(k),1)}),I.commit(f)})}),_.schedule()})),this._localToDispose.add(this._editor.onDidFocusEditorWidget(()=>{_.schedule()})),this._localToDispose.add(this._editor.onDidScrollChange(f=>{f.scrollTopChanged&&this._lenses.length>0&&this._resolveCodeLensesInViewportSoon()})),this._localToDispose.add(this._editor.onDidLayoutChange(()=>{this._resolveCodeLensesInViewportSoon()})),this._localToDispose.add(M.toDisposable(()=>{if(this._editor.getModel()){const f=w.StableEditorScrollState.capture(this._editor);this._editor.changeDecorations(v=>{this._editor.changeViewZones(y=>{this._disposeAllLenses(v,y)})}),f.restore(this._editor)}else this._disposeAllLenses(void 0,void 0)})),this._localToDispose.add(this._editor.onMouseDown(f=>{if(f.target.type===9){let v=f.target.element;if((v==null?void 0:v.tagName)==="SPAN"&&(v=v.parentElement),(v==null?void 0:v.tagName)==="A")for(const y of this._lenses){let L=y.getCommand(v);if(L){this._commandService.executeCommand(L.id,...L.arguments||[]).catch(I=>this._notificationService.error(I));break}}}})),_.schedule()}}_disposeAllLenses(h,m){const _=new g.CodeLensHelper;for(const f of this._lenses)f.dispose(_,m);h&&_.commit(h),this._lenses.length=0}_renderCodeLensSymbols(h){if(!!this._editor.hasModel()){let m=this._editor.getModel().getLineCount(),_=[],f;for(let L of h.lenses){let I=L.symbol.range.startLineNumber;I<1||I>m||(f&&f[f.length-1].symbol.range.startLineNumber===I?f.push(L):(f=[L],_.push(f)))}const v=w.StableEditorScrollState.capture(this._editor),y=this._getLayoutInfo();this._editor.changeDecorations(L=>{this._editor.changeViewZones(I=>{const k=new g.CodeLensHelper;let E=0,T=0;for(;T<_.length&&Ethis._resolveCodeLensesInViewportSoon())),E++,T++)}for(;Ethis._resolveCodeLensesInViewportSoon())),T++;k.commit(L)})}),v.restore(this._editor)}}_resolveCodeLensesInViewportSoon(){this._editor.getModel()&&this._resolveCodeLensesScheduler.schedule()}_resolveCodeLensesInViewport(){var h;(h=this._resolveCodeLensesPromise)===null||h===void 0||h.cancel(),this._resolveCodeLensesPromise=void 0;const m=this._editor.getModel();if(!!m){const _=[],f=[];if(this._lenses.forEach(L=>{const I=L.computeIfNecessary(m);I&&(_.push(I),f.push(L))}),_.length!==0){const v=Date.now(),y=b.createCancelablePromise(L=>{const I=_.map((k,E)=>{const T=new Array(k.length),O=k.map((A,B)=>!A.symbol.command&&typeof A.provider.resolveCodeLens=="function"?Promise.resolve(A.provider.resolveCodeLens(m,A.symbol,L)).then(F=>{T[B]=F},N.onUnexpectedExternalError):(T[B]=A.symbol,Promise.resolve(void 0)));return Promise.all(O).then(()=>{!L.isCancellationRequested&&!f[E].isDisposed()&&f[E].updateCommands(T)})});return Promise.all(I)});this._resolveCodeLensesPromise=y,this._resolveCodeLensesPromise.then(()=>{const L=this._resolveCodeLensesDelays.update(m,Date.now()-v);this._resolveCodeLensesScheduler.delay=L,this._currentCodeLensModel&&this._codeLensCache.put(m,this._currentCodeLensModel),this._oldCodeLensModels.clear(),y===this._resolveCodeLensesPromise&&(this._resolveCodeLensesPromise=void 0)},L=>{N.onUnexpectedError(L),y===this._resolveCodeLensesPromise&&(this._resolveCodeLensesPromise=void 0)})}}}getLenses(){return this._lenses}};t.ID="css.editor.codeLens",t=Me([_e(1,p.ICommandService),_e(2,c.INotificationService),_e(3,o.ICodeLensCache)],t),e.CodeLensContribution=t,S.registerEditorContribution(t.ID,t),S.registerEditorAction(class extends S.EditorAction{constructor(){super({id:"codelens.showLensesInCurrentLine",precondition:i.EditorContextKeys.hasCodeLensProvider,label:r.localize(0,null),alias:"Show CodeLens Commands For Current Line"})}run(h,m){return Ie(this,void 0,void 0,function*(){if(!!m.hasModel()){const _=h.get(u.IQuickInputService),f=h.get(p.ICommandService),v=h.get(c.INotificationService),y=m.getSelection().positionLineNumber,L=m.getContribution(t.ID),I=[];for(let E of L.getLenses())if(E.getLineNumber()===y)for(let T of E.getItems()){const{command:O}=T.symbol;O&&I.push({label:O.title,command:O})}if(I.length!==0){const k=yield _.pick(I,{canPickMany:!1});if(!!k)try{yield f.executeCommand(k.command.id,...k.command.arguments||[])}catch(E){v.error(E)}}}})}})}),define(Q[260],J([0,1,15,29,12,89,2,13,28,3,31,18,249,46]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ColorDetector=void 0;const a=500;let u=class Wt extends S.Disposable{constructor(i,n,t){super();this._editor=i,this._codeEditorService=n,this._configurationService=t,this._localToDispose=this._register(new S.DisposableStore),this._decorationsIds=[],this._colorDatas=new Map,this._colorDecoratorIds=[],this._decorationsTypes=new Set,this._register(i.onDidChangeModel(()=>{this._isEnabled=this.isEnabled(),this.onModelChanged()})),this._register(i.onDidChangeModelLanguage(()=>this.onModelChanged())),this._register(c.ColorProviderRegistry.onDidChange(()=>this.onModelChanged())),this._register(i.onDidChangeConfiguration(()=>{let l=this._isEnabled;this._isEnabled=this.isEnabled(),l!==this._isEnabled&&(this._isEnabled?this.onModelChanged():this.removeAllDecorations())})),this._timeoutTimer=null,this._computePromise=null,this._isEnabled=this.isEnabled(),this.onModelChanged()}isEnabled(){const i=this._editor.getModel();if(!i)return!1;const n=i.getLanguageIdentifier(),t=this._configurationService.getValue(n.language);if(t){const l=t.colorDecorators;if(l&&l.enable!==void 0&&!l.enable)return l.enable}return this._editor.getOption(14)}static get(i){return i.getContribution(this.ID)}dispose(){this.stop(),this.removeAllDecorations(),super.dispose()}onModelChanged(){if(this.stop(),!!this._isEnabled){const i=this._editor.getModel();!i||!c.ColorProviderRegistry.has(i)||(this._localToDispose.add(this._editor.onDidChangeModelContent(()=>{this._timeoutTimer||(this._timeoutTimer=new b.TimeoutTimer,this._timeoutTimer.cancelAndSet(()=>{this._timeoutTimer=null,this.beginCompute()},Wt.RECOMPUTE_TIME))})),this.beginCompute())}}beginCompute(){this._computePromise=b.createCancelablePromise(i=>{const n=this._editor.getModel();return n?o.getColors(n,i):Promise.resolve([])}),this._computePromise.then(i=>{this.updateDecorations(i),this.updateColorDecorators(i),this._computePromise=null},M.onUnexpectedError)}stop(){this._timeoutTimer&&(this._timeoutTimer.cancel(),this._timeoutTimer=null),this._computePromise&&(this._computePromise.cancel(),this._computePromise=null),this._localToDispose.clear()}updateDecorations(i){const n=i.map(t=>({range:{startLineNumber:t.colorInfo.range.startLineNumber,startColumn:t.colorInfo.range.startColumn,endLineNumber:t.colorInfo.range.endLineNumber,endColumn:t.colorInfo.range.endColumn},options:p.ModelDecorationOptions.EMPTY}));this._decorationsIds=this._editor.deltaDecorations(this._decorationsIds,n),this._colorDatas=new Map,this._decorationsIds.forEach((t,l)=>this._colorDatas.set(t,i[l]))}updateColorDecorators(i){let n=[],t={};for(let l=0;l{t[l]||this._codeEditorService.removeDecorationType(l)}),this._colorDecoratorIds=this._editor.deltaDecorations(this._colorDecoratorIds,n)}removeAllDecorations(){this._decorationsIds=this._editor.deltaDecorations(this._decorationsIds,[]),this._colorDecoratorIds=this._editor.deltaDecorations(this._colorDecoratorIds,[]),this._decorationsTypes.forEach(i=>{this._codeEditorService.removeDecorationType(i)})}getColorData(i){const n=this._editor.getModel();if(!n)return null;const t=n.getDecorationsInRange(g.Range.fromPositions(i,i)).filter(l=>this._colorDatas.has(l.id));return t.length===0?null:this._colorDatas.get(t[0].id)}};u.ID="editor.contrib.colorDetector",u.RECOMPUTE_TIME=1e3,u=Me([_e(1,d.ICodeEditorService),_e(2,s.IConfigurationService)],u),e.ColorDetector=u,C.registerEditorContribution(u.ID,u)}),define(Q[619],J([0,1,469,39,13,3,25,224,401,34]),function(q,e,b,N,M,w,S,C,d,g){"use strict";Object.defineProperty(e,"__esModule",{value:!0});class p extends M.EditorAction{constructor(r,i){super(i);this._type=r}run(r,i){if(!!i.hasModel()){const n=i.getModel(),t=[],l=n.getOptions(),h=i.getOption(16),m=i.getSelections().map((f,v)=>({selection:f,index:v,ignoreFirstLine:!1}));m.sort((f,v)=>w.Range.compareRangesUsingStarts(f.selection,v.selection));let _=m[0];for(let f=1;fthis._onContextMenu(m))),this._toDispose.add(this._editor.onMouseWheel(m=>{if(this._contextMenuIsBeingShownCount>0){const _=this._contextViewService.getContextViewElement(),f=m.srcElement;f.shadowRoot&&N.getShadowRoot(_)===f.shadowRoot||this._contextViewService.hideContextView()}})),this._toDispose.add(this._editor.onKeyDown(m=>{m.keyCode===58&&(m.preventDefault(),m.stopPropagation(),this.showContextMenu())}))}static get(r){return r.getContribution(Bt.ID)}_onContextMenu(r){if(!!this._editor.hasModel()){if(!this._editor.getOption(17)){this._editor.focus(),r.target.position&&!this._editor.getSelection().containsPosition(r.target.position)&&this._editor.setPosition(r.target.position);return}if(r.target.type!==12&&(r.event.preventDefault(),!(r.target.type!==6&&r.target.type!==7&&r.target.type!==1))){if(this._editor.focus(),r.target.position){let n=!1;for(const t of this._editor.getSelections())if(t.containsPosition(r.target.position)){n=!0;break}n||this._editor.setPosition(r.target.position)}let i=null;r.target.type!==1&&(i={x:r.event.posx-1,width:2,y:r.event.posy-1,height:2}),this.showContextMenu(i)}}}showContextMenu(r){if(!!this._editor.getOption(17)&&!!this._editor.hasModel()){if(!this._contextMenuService){this._editor.focus();return}const i=this._getMenuActions(this._editor.getModel(),d.MenuId.EditorContext);i.length>0&&this._doShowContextMenu(i,r)}}_getMenuActions(r,i){const n=[],t=this._menuService.createMenu(i,this._contextKeyService),l=t.getActions({arg:r.uri});t.dispose();for(let h of l){const[,m]=h;let _=0;for(const f of m)if(f instanceof d.SubmenuItemAction){const v=this._getMenuActions(r,f.item.submenu);v.length>0&&(n.push(new M.SubmenuAction(f.id,f.label,v)),_++)}else n.push(f),_++;_&&n.push(new M.Separator)}return n.length&&n.pop(),n}_doShowContextMenu(r,i=null){if(!!this._editor.hasModel()){const n=this._editor.getOption(48);if(this._editor.updateOptions({hover:{enabled:!1}}),!i){this._editor.revealPosition(this._editor.getPosition(),1),this._editor.render();const t=this._editor.getScrolledVisiblePosition(this._editor.getPosition()),l=N.getDomNodePagePosition(this._editor.getDomNode()),h=l.left+t.left,m=l.top+t.top+t.height;i={x:h,y:m}}this._contextMenuIsBeingShownCount++,this._contextMenuService.showContextMenu({domForShadowRoot:this._editor.getDomNode(),getAnchor:()=>i,getActions:()=>r,getActionViewItem:t=>{const l=this._keybindingFor(t);if(l)return new o.ActionViewItem(t,t,{label:!0,keybinding:l.getLabel(),isMenu:!0});const h=t;return typeof h.getActionViewItem=="function"?h.getActionViewItem():new o.ActionViewItem(t,t,{icon:!0,label:!0,isMenu:!0})},getKeyBinding:t=>this._keybindingFor(t),onHide:t=>{this._contextMenuIsBeingShownCount--,this._editor.focus(),this._editor.updateOptions({hover:n})}})}}_keybindingFor(r){return this._keybindingService.lookupKeybinding(r.id)}dispose(){this._contextMenuIsBeingShownCount>0&&this._contextViewService.hideContextView(),this._toDispose.dispose()}};s.ID="editor.contrib.contextmenu",s=Me([_e(1,p.IContextMenuService),_e(2,p.IContextViewService),_e(3,g.IContextKeyService),_e(4,c.IKeybindingService),_e(5,d.IMenuService)],s),e.ContextMenuController=s;class a extends S.EditorAction{constructor(){super({id:"editor.action.showContextMenu",label:b.localize(0,null),alias:"Show Editor Context Menu",precondition:void 0,kbOpts:{kbExpr:C.EditorContextKeys.textInputFocus,primary:1024|68,weight:100}})}run(r,i){s.get(i).showContextMenu()}}S.registerEditorContribution(s.ID,s),S.registerEditorAction(a)}),define(Q[621],J([0,1,471,2,13,25]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CursorRedo=e.CursorUndo=e.CursorUndoRedoController=void 0;class S{constructor(o){this.selections=o}equals(o){const s=this.selections.length,a=o.selections.length;if(s!==a)return!1;for(let u=0;u{this._undoStack=[],this._redoStack=[]})),this._register(o.onDidChangeModelContent(s=>{this._undoStack=[],this._redoStack=[]})),this._register(o.onDidChangeCursorSelection(s=>{if(!this._isCursorUndoRedo&&!!s.oldSelections&&s.oldModelVersionId===s.modelVersionId){const a=new S(s.oldSelections);this._undoStack.length>0&&this._undoStack[this._undoStack.length-1].cursorState.equals(a)||(this._undoStack.push(new C(a,o.getScrollTop(),o.getScrollLeft())),this._redoStack=[],this._undoStack.length>50&&this._undoStack.shift())}}))}static get(o){return o.getContribution(d.ID)}cursorUndo(){!this._editor.hasModel()||this._undoStack.length===0||(this._redoStack.push(new C(new S(this._editor.getSelections()),this._editor.getScrollTop(),this._editor.getScrollLeft())),this._applyState(this._undoStack.pop()))}cursorRedo(){!this._editor.hasModel()||this._redoStack.length===0||(this._undoStack.push(new C(new S(this._editor.getSelections()),this._editor.getScrollTop(),this._editor.getScrollLeft())),this._applyState(this._redoStack.pop()))}_applyState(o){this._isCursorUndoRedo=!0,this._editor.setSelections(o.cursorState.selections),this._editor.setScrollPosition({scrollTop:o.scrollTop,scrollLeft:o.scrollLeft}),this._isCursorUndoRedo=!1}}e.CursorUndoRedoController=d,d.ID="editor.contrib.cursorUndoRedoController";class g extends M.EditorAction{constructor(){super({id:"cursorUndo",label:b.localize(0,null),alias:"Cursor Undo",precondition:void 0,kbOpts:{kbExpr:w.EditorContextKeys.textInputFocus,primary:2048|51,weight:100}})}run(o,s,a){d.get(s).cursorUndo()}}e.CursorUndo=g;class p extends M.EditorAction{constructor(){super({id:"cursorRedo",label:b.localize(1,null),alias:"Cursor Redo",precondition:void 0})}run(o,s,a){d.get(s).cursorRedo()}}e.CursorRedo=p,M.registerEditorContribution(d.ID,d),M.registerEditorAction(g),M.registerEditorAction(p)}),define(Q[622],J([0,1,2,17,13,14,3,21,402,31,340]),function(q,e,b,N,M,w,S,C,d,g){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DragAndDropController=void 0;function p(o){return N.isMacintosh?o.altKey:o.ctrlKey}class c extends b.Disposable{constructor(s){super();this._editor=s,this._register(this._editor.onMouseDown(a=>this._onEditorMouseDown(a))),this._register(this._editor.onMouseUp(a=>this._onEditorMouseUp(a))),this._register(this._editor.onMouseDrag(a=>this._onEditorMouseDrag(a))),this._register(this._editor.onMouseDrop(a=>this._onEditorMouseDrop(a))),this._register(this._editor.onMouseDropCanceled(()=>this._onEditorMouseDropCanceled())),this._register(this._editor.onKeyDown(a=>this.onEditorKeyDown(a))),this._register(this._editor.onKeyUp(a=>this.onEditorKeyUp(a))),this._register(this._editor.onDidBlurEditorWidget(()=>this.onEditorBlur())),this._register(this._editor.onDidBlurEditorText(()=>this.onEditorBlur())),this._dndDecorationIds=[],this._mouseDown=!1,this._modifierPressed=!1,this._dragSelection=null}onEditorBlur(){this._removeDecoration(),this._dragSelection=null,this._mouseDown=!1,this._modifierPressed=!1}onEditorKeyDown(s){!this._editor.getOption(27)||this._editor.getOption(15)||(p(s)&&(this._modifierPressed=!0),this._mouseDown&&p(s)&&this._editor.updateOptions({mouseStyle:"copy"}))}onEditorKeyUp(s){!this._editor.getOption(27)||this._editor.getOption(15)||(p(s)&&(this._modifierPressed=!1),this._mouseDown&&s.keyCode===c.TRIGGER_KEY_VALUE&&this._editor.updateOptions({mouseStyle:"default"}))}_onEditorMouseDown(s){this._mouseDown=!0}_onEditorMouseUp(s){this._mouseDown=!1,this._editor.updateOptions({mouseStyle:"text"})}_onEditorMouseDrag(s){let a=s.target;if(this._dragSelection===null){let r=(this._editor.getSelections()||[]).filter(i=>a.position&&i.containsPosition(a.position));if(r.length===1)this._dragSelection=r[0];else return}p(s.event)?this._editor.updateOptions({mouseStyle:"copy"}):this._editor.updateOptions({mouseStyle:"default"}),a.position&&(this._dragSelection.containsPosition(a.position)?this._removeDecoration():this.showAt(a.position))}_onEditorMouseDropCanceled(){this._editor.updateOptions({mouseStyle:"text"}),this._removeDecoration(),this._dragSelection=null,this._mouseDown=!1}_onEditorMouseDrop(s){if(s.target&&(this._hitContent(s.target)||this._hitMargin(s.target))&&s.target.position){let a=new w.Position(s.target.position.lineNumber,s.target.position.column);if(this._dragSelection===null){let u=null;if(s.event.shiftKey){let r=this._editor.getSelection();if(r){const{selectionStartLineNumber:i,selectionStartColumn:n}=r;u=[new C.Selection(i,n,a.lineNumber,a.column)]}}else u=(this._editor.getSelections()||[]).map(r=>r.containsPosition(a)?new C.Selection(a.lineNumber,a.column,a.lineNumber,a.column):r);this._editor.setSelections(u||[],"mouse",3)}else(!this._dragSelection.containsPosition(a)||(p(s.event)||this._modifierPressed)&&(this._dragSelection.getEndPosition().equals(a)||this._dragSelection.getStartPosition().equals(a)))&&(this._editor.pushUndoStop(),this._editor.executeCommand(c.ID,new d.DragAndDropCommand(this._dragSelection,a,p(s.event)||this._modifierPressed)),this._editor.pushUndoStop())}this._editor.updateOptions({mouseStyle:"text"}),this._removeDecoration(),this._dragSelection=null,this._mouseDown=!1}showAt(s){let a=[{range:new S.Range(s.lineNumber,s.column,s.lineNumber,s.column),options:c._DECORATION_OPTIONS}];this._dndDecorationIds=this._editor.deltaDecorations(this._dndDecorationIds,a),this._editor.revealPosition(s,1)}_removeDecoration(){this._dndDecorationIds=this._editor.deltaDecorations(this._dndDecorationIds,[])}_hitContent(s){return s.type===6||s.type===7}_hitMargin(s){return s.type===2||s.type===3||s.type===4}dispose(){this._removeDecoration(),this._dragSelection=null,this._mouseDown=!1,this._modifierPressed=!1,super.dispose()}}e.DragAndDropController=c,c.ID="editor.contrib.dragAndDrop",c.TRIGGER_KEY_VALUE=N.isMacintosh?6:5,c._DECORATION_OPTIONS=g.ModelDecorationOptions.register({className:"dnd-target"}),M.registerEditorContribution(c.ID,c)}),define(Q[623],J([0,1,476,13,126]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0});class w extends N.EditorAction{constructor(){super({id:"editor.action.fontZoomIn",label:b.localize(0,null),alias:"Editor Font Zoom In",precondition:void 0})}run(g,p){M.EditorZoom.setZoomLevel(M.EditorZoom.getZoomLevel()+1)}}class S extends N.EditorAction{constructor(){super({id:"editor.action.fontZoomOut",label:b.localize(1,null),alias:"Editor Font Zoom Out",precondition:void 0})}run(g,p){M.EditorZoom.setZoomLevel(M.EditorZoom.getZoomLevel()-1)}}class C extends N.EditorAction{constructor(){super({id:"editor.action.fontZoomReset",label:b.localize(2,null),alias:"Editor Font Zoom Reset",precondition:void 0})}run(g,p){M.EditorZoom.setZoomLevel(0)}}N.registerEditorAction(w),N.registerEditorAction(S),N.registerEditorAction(C)}),define(Q[261],J([0,1,47,19,23,12,24,70,108,14,3,21,18,75,36,226,477,532,9,71,26,20,54]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l,h,m){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getOnTypeFormattingEdits=e.getDocumentFormattingEditsUntilResult=e.getDocumentRangeFormattingEditsUntilResult=e.formatDocumentWithProvider=e.formatDocumentWithSelectedProvider=e.formatDocumentRangesWithProvider=e.formatDocumentRangesWithSelectedProvider=e.FormattingConflicts=e.getRealAndSyntheticDocumentFormattersOrdered=e.alertFormattingEdits=void 0;function _(A){if(A=A.filter(R=>R.range),!!A.length){let{range:B}=A[0];for(let R=1;R0&&p.Range.areIntersectingOrTouching(Y[ee-1],ne)?Y[ee-1]=p.Range.fromPositions(Y[ee-1].getStartPosition(),ne.getEndPosition()):ee=Y.push(ne);const se=[];for(let ne of Y)try{const le=yield B.provideDocumentRangeFormattingEdits(x,ne,x.getFormattingOptions(),K.token),X=yield W.computeMoreMinimalEdits(x.uri,le);if(X&&se.push(...X),K.token.isCancellationRequested)return!0}finally{K.dispose()}if(se.length===0)return!1;if(d.isCodeEditor(F))u.FormattingEdit.execute(F,se,!0),_(se),F.revealPositionInCenterIfOutsideViewport(F.getPosition(),1);else{const[{range:ne}]=se,le=new c.Selection(ne.startLineNumber,ne.startColumn,ne.endLineNumber,ne.endColumn);x.pushEditOperations([le],se.map(X=>({text:X.text,range:p.Range.lift(X.range),forceMoveMarkers:!0})),X=>{for(const{range:z}of X)if(p.Range.areIntersectingOrTouching(z,le))return[new c.Selection(z.startLineNumber,z.startColumn,z.endLineNumber,z.endColumn)];return null})}return!0})}e.formatDocumentRangesWithProvider=L;function I(A,B,F,D,R){return Ie(this,void 0,void 0,function*(){const W=A.get(n.IInstantiationService),x=d.isCodeEditor(B)?B.getModel():B,K=f(x),Y=yield v.select(K,x,F);Y&&(D.report(Y),yield W.invokeFunction(k,Y,B,F,R))})}e.formatDocumentWithSelectedProvider=I;function k(A,B,F,D,R){return Ie(this,void 0,void 0,function*(){const W=A.get(s.IEditorWorkerService);let x,K;d.isCodeEditor(F)?(x=F.getModel(),K=new C.EditorStateCancellationTokenSource(F,1|4,void 0,R)):(x=F,K=new C.TextModelCancellationTokenSource(F,R));let Y;try{const ee=yield B.provideDocumentFormattingEdits(x,x.getFormattingOptions(),K.token);if(Y=yield W.computeMoreMinimalEdits(x.uri,ee),K.token.isCancellationRequested)return!0}finally{K.dispose()}if(!Y||Y.length===0)return!1;if(d.isCodeEditor(F))u.FormattingEdit.execute(F,Y,D!==2),D!==2&&(_(Y),F.revealPositionInCenterIfOutsideViewport(F.getPosition(),1));else{const[{range:ee}]=Y,se=new c.Selection(ee.startLineNumber,ee.startColumn,ee.endLineNumber,ee.endColumn);x.pushEditOperations([se],Y.map(ne=>({text:ne.text,range:p.Range.lift(ne.range),forceMoveMarkers:!0})),ne=>{for(const{range:le}of ne)if(p.Range.areIntersectingOrTouching(le,se))return[new c.Selection(le.startLineNumber,le.startColumn,le.endLineNumber,le.endColumn)];return null})}return!0})}e.formatDocumentWithProvider=k;function E(A,B,F,D,R){return Ie(this,void 0,void 0,function*(){const W=o.DocumentRangeFormattingEditProviderRegistry.ordered(B);for(const x of W){let K=yield Promise.resolve(x.provideDocumentRangeFormattingEdits(B,F,D,R)).catch(w.onUnexpectedExternalError);if(N.isNonEmptyArray(K))return yield A.computeMoreMinimalEdits(B.uri,K)}})}e.getDocumentRangeFormattingEditsUntilResult=E;function T(A,B,F,D){return Ie(this,void 0,void 0,function*(){const R=f(B);for(const W of R){let x=yield Promise.resolve(W.provideDocumentFormattingEdits(B,F,D)).catch(w.onUnexpectedExternalError);if(N.isNonEmptyArray(x))return yield A.computeMoreMinimalEdits(B.uri,x)}})}e.getDocumentFormattingEditsUntilResult=T;function O(A,B,F,D,R){const W=o.OnTypeFormattingEditProviderRegistry.ordered(B);return W.length===0||W[0].autoFormatTriggerCharacters.indexOf(D)<0?Promise.resolve(void 0):Promise.resolve(W[0].provideOnTypeFormattingEdits(B,F,D,R,M.CancellationToken.None)).catch(w.onUnexpectedExternalError).then(x=>A.computeMoreMinimalEdits(B.uri,x))}e.getOnTypeFormattingEdits=O,l.CommandsRegistry.registerCommand("_executeFormatRangeProvider",function(A,...B){const[F,D,R]=B;h.assertType(S.URI.isUri(F)),h.assertType(p.Range.isIRange(D));const W=A.get(a.IModelService).getModel(F);if(!W)throw w.illegalArgument("resource");return E(A.get(s.IEditorWorkerService),W,p.Range.lift(D),R,M.CancellationToken.None)}),l.CommandsRegistry.registerCommand("_executeFormatDocumentProvider",function(A,...B){const[F,D]=B;h.assertType(S.URI.isUri(F));const R=A.get(a.IModelService).getModel(F);if(!R)throw w.illegalArgument("resource");return T(A.get(s.IEditorWorkerService),R,D,M.CancellationToken.None)}),l.CommandsRegistry.registerCommand("_executeFormatOnTypeProvider",function(A,...B){const[F,D,R,W]=B;h.assertType(S.URI.isUri(F)),h.assertType(g.Position.isIPosition(D)),h.assertType(typeof R=="string");const x=A.get(a.IModelService).getModel(F);if(!x)throw w.illegalArgument("resource");return O(A.get(s.IEditorWorkerService),x,g.Position.lift(D),R,W)})}),define(Q[624],J([0,1,19,23,39,2,13,28,91,3,25,18,75,261,226,478,26,16,9,12,59]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l){"use strict";Object.defineProperty(e,"__esModule",{value:!0});let h=class{constructor(y,L){this._workerService=L,this._callOnDispose=new w.DisposableStore,this._callOnModel=new w.DisposableStore,this._editor=y,this._callOnDispose.add(y.onDidChangeConfiguration(()=>this._update())),this._callOnDispose.add(y.onDidChangeModel(()=>this._update())),this._callOnDispose.add(y.onDidChangeModelLanguage(()=>this._update())),this._callOnDispose.add(c.OnTypeFormattingEditProviderRegistry.onDidChange(this._update,this))}dispose(){this._callOnDispose.dispose(),this._callOnModel.dispose()}_update(){if(this._callOnModel.clear(),!!this._editor.getOption(43)&&!!this._editor.hasModel()){const y=this._editor.getModel(),[L]=c.OnTypeFormattingEditProviderRegistry.ordered(y);if(!(!L||!L.autoFormatTriggerCharacters)){let I=new d.CharacterSet;for(let k of L.autoFormatTriggerCharacters)I.add(k.charCodeAt(0));this._callOnModel.add(this._editor.onDidType(k=>{let E=k.charCodeAt(k.length-1);I.has(E)&&this._trigger(String.fromCharCode(E))}))}}}_trigger(y){if(!!this._editor.hasModel()&&!(this._editor.getSelections().length>1)){const L=this._editor.getModel(),I=this._editor.getPosition();let k=!1;const E=this._editor.onDidChangeModelContent(T=>{if(T.isFlush){k=!0,E.dispose();return}for(let O=0,A=T.changes.length;O{E.dispose(),!k&&b.isNonEmptyArray(T)&&(a.FormattingEdit.execute(this._editor,T,!0),s.alertFormattingEdits(T))},T=>{throw E.dispose(),T})}}};h.ID="editor.contrib.autoFormat",h=Me([_e(1,o.IEditorWorkerService)],h);let m=class{constructor(y,L){this.editor=y,this._instantiationService=L,this._callOnDispose=new w.DisposableStore,this._callOnModel=new w.DisposableStore,this._callOnDispose.add(y.onDidChangeConfiguration(()=>this._update())),this._callOnDispose.add(y.onDidChangeModel(()=>this._update())),this._callOnDispose.add(y.onDidChangeModelLanguage(()=>this._update())),this._callOnDispose.add(c.DocumentRangeFormattingEditProviderRegistry.onDidChange(this._update,this))}dispose(){this._callOnDispose.dispose(),this._callOnModel.dispose()}_update(){this._callOnModel.clear(),!!this.editor.getOption(42)&&(!this.editor.hasModel()||!c.DocumentRangeFormattingEditProviderRegistry.has(this.editor.getModel())||this._callOnModel.add(this.editor.onDidPaste(({range:y})=>this._trigger(y))))}_trigger(y){!this.editor.hasModel()||this.editor.getSelections().length>1||this._instantiationService.invokeFunction(s.formatDocumentRangesWithSelectedProvider,this.editor,y,2,l.Progress.None,N.CancellationToken.None).catch(t.onUnexpectedError)}};m.ID="editor.contrib.formatOnPaste",m=Me([_e(1,n.IInstantiationService)],m);class _ extends S.EditorAction{constructor(){super({id:"editor.action.formatDocument",label:u.localize(0,null),alias:"Format Document",precondition:i.ContextKeyExpr.and(p.EditorContextKeys.notInCompositeEditor,p.EditorContextKeys.writable,p.EditorContextKeys.hasDocumentFormattingProvider),kbOpts:{kbExpr:p.EditorContextKeys.editorTextFocus,primary:1024|512|36,linux:{primary:2048|1024|39},weight:100},contextMenuOpts:{group:"1_modification",order:1.3}})}run(y,L){return Ie(this,void 0,void 0,function*(){if(L.hasModel()){const I=y.get(n.IInstantiationService);yield y.get(l.IEditorProgressService).showWhile(I.invokeFunction(s.formatDocumentWithSelectedProvider,L,1,l.Progress.None,N.CancellationToken.None),250)}})}}class f extends S.EditorAction{constructor(){super({id:"editor.action.formatSelection",label:u.localize(1,null),alias:"Format Selection",precondition:i.ContextKeyExpr.and(p.EditorContextKeys.writable,p.EditorContextKeys.hasDocumentSelectionFormattingProvider),kbOpts:{kbExpr:p.EditorContextKeys.editorTextFocus,primary:M.KeyChord(2048|41,2048|36),weight:100},contextMenuOpts:{when:p.EditorContextKeys.hasNonEmptySelection,group:"1_modification",order:1.31}})}run(y,L){return Ie(this,void 0,void 0,function*(){if(!!L.hasModel()){const I=y.get(n.IInstantiationService),k=L.getModel(),E=L.getSelections().map(O=>O.isEmpty()?new g.Range(O.startLineNumber,1,O.startLineNumber,k.getLineMaxColumn(O.startLineNumber)):O);yield y.get(l.IEditorProgressService).showWhile(I.invokeFunction(s.formatDocumentRangesWithSelectedProvider,L,E,1,l.Progress.None,N.CancellationToken.None),250)}})}}S.registerEditorContribution(h.ID,h),S.registerEditorContribution(m.ID,m),S.registerEditorAction(_),S.registerEditorAction(f),r.CommandsRegistry.registerCommand("editor.action.format",v=>Ie(void 0,void 0,void 0,function*(){const y=v.get(C.ICodeEditorService).getFocusedCodeEditor();if(!(!y||!y.hasModel())){const L=v.get(r.ICommandService);y.getSelection().isEmpty()?yield L.executeCommand("editor.action.formatDocument"):yield L.executeCommand("editor.action.formatSelection")}}))}),define(Q[262],J([0,1,23,12,13,18]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getReferencesAtPosition=e.getTypeDefinitionsAtPosition=e.getImplementationsAtPosition=e.getDeclarationsAtPosition=e.getDefinitionsAtPosition=void 0;function S(o,s,a,u){const i=a.ordered(o).map(n=>Promise.resolve(u(n,o,s)).then(void 0,t=>{N.onUnexpectedExternalError(t)}));return Promise.all(i).then(n=>{const t=[];for(let l of n)Array.isArray(l)?t.push(...l):l&&t.push(l);return t})}function C(o,s,a){return S(o,s,w.DefinitionProviderRegistry,(u,r,i)=>u.provideDefinition(r,i,a))}e.getDefinitionsAtPosition=C;function d(o,s,a){return S(o,s,w.DeclarationProviderRegistry,(u,r,i)=>u.provideDeclaration(r,i,a))}e.getDeclarationsAtPosition=d;function g(o,s,a){return S(o,s,w.ImplementationProviderRegistry,(u,r,i)=>u.provideImplementation(r,i,a))}e.getImplementationsAtPosition=g;function p(o,s,a){return S(o,s,w.TypeDefinitionProviderRegistry,(u,r,i)=>u.provideTypeDefinition(r,i,a))}e.getTypeDefinitionsAtPosition=p;function c(o,s,a,u){return S(o,s,w.ReferenceProviderRegistry,(r,i,n)=>Ie(this,void 0,void 0,function*(){const t=yield r.provideReferences(i,n,{includeDeclaration:!0},u);if(!a||!t||t.length!==2)return t;const l=yield r.provideReferences(i,n,{includeDeclaration:!1},u);return l&&l.length===1?l:t}))}e.getReferencesAtPosition=c,M.registerModelAndPositionCommand("_executeDefinitionProvider",(o,s)=>C(o,s,b.CancellationToken.None)),M.registerModelAndPositionCommand("_executeDeclarationProvider",(o,s)=>d(o,s,b.CancellationToken.None)),M.registerModelAndPositionCommand("_executeImplementationProvider",(o,s)=>g(o,s,b.CancellationToken.None)),M.registerModelAndPositionCommand("_executeTypeDefinitionProvider",(o,s)=>p(o,s,b.CancellationToken.None)),M.registerModelAndPositionCommand("_executeReferenceProvider",(o,s)=>c(o,s,!1,b.CancellationToken.None))}),define(Q[625],J([0,1,16,9,74,86,13,28,3,2,6,487,37,32,44]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ISymbolNavigationService=e.ctxHasSymbols=void 0,e.ctxHasSymbols=new b.RawContextKey("hasSymbols",!1),e.ISymbolNavigationService=N.createDecorator("ISymbolNavigationService");let u=class{constructor(n,t,l,h){this._editorService=t,this._notificationService=l,this._keybindingService=h,this._currentModel=void 0,this._currentIdx=-1,this._ignoreEditorChange=!1,this._ctxHasSymbols=e.ctxHasSymbols.bindTo(n)}reset(){var n,t;this._ctxHasSymbols.reset(),(n=this._currentState)===null||n===void 0||n.dispose(),(t=this._currentMessage)===null||t===void 0||t.dispose(),this._currentModel=void 0,this._currentIdx=-1}put(n){const t=n.parent.parent;if(t.references.length<=1){this.reset();return}this._currentModel=t,this._currentIdx=t.references.indexOf(n),this._ctxHasSymbols.set(!0),this._showMessage();const l=new r(this._editorService),h=l.onDidChange(m=>{if(!this._ignoreEditorChange){const _=this._editorService.getActiveCodeEditor();if(!!_){const f=_.getModel(),v=_.getPosition();if(!(!f||!v)){let y=!1,L=!1;for(const I of t.references)if(a.isEqual(I.uri,f.uri))y=!0,L=L||d.Range.containsPosition(I.range,v);else if(y)break;(!y||!L)&&this.reset()}}}});this._currentState=g.combinedDisposable(l,h)}revealNext(n){if(!this._currentModel)return Promise.resolve();this._currentIdx+=1,this._currentIdx%=this._currentModel.references.length;const t=this._currentModel.references[this._currentIdx];return this._showMessage(),this._ignoreEditorChange=!0,this._editorService.openCodeEditor({resource:t.uri,options:{selection:d.Range.collapseToStart(t.range),selectionRevealType:3}},n).finally(()=>{this._ignoreEditorChange=!1})}_showMessage(){var n;(n=this._currentMessage)===null||n===void 0||n.dispose();const t=this._keybindingService.lookupKeybinding("editor.gotoNextSymbolFromResult"),l=t?c.localize(0,null,this._currentIdx+1,this._currentModel.references.length,t.getLabel()):c.localize(1,null,this._currentIdx+1,this._currentModel.references.length);this._currentMessage=this._notificationService.status(l)}};u=Me([_e(0,b.IContextKeyService),_e(1,C.ICodeEditorService),_e(2,s.INotificationService),_e(3,o.IKeybindingService)],u),M.registerSingleton(e.ISymbolNavigationService,u,!0),S.registerEditorCommand(new class extends S.EditorCommand{constructor(){super({id:"editor.gotoNextSymbolFromResult",precondition:e.ctxHasSymbols,kbOpts:{weight:100,primary:70}})}runEditorCommand(i,n){return i.get(e.ISymbolNavigationService).revealNext(n)}}),w.KeybindingsRegistry.registerCommandAndKeybindingRule({id:"editor.gotoNextSymbolFromResult.cancel",weight:100,when:e.ctxHasSymbols,primary:9,handler(i){i.get(e.ISymbolNavigationService).reset()}});let r=class{constructor(n){this._listener=new Map,this._disposables=new g.DisposableStore,this._onDidChange=new p.Emitter,this.onDidChange=this._onDidChange.event,this._disposables.add(n.onCodeEditorRemove(this._onDidRemoveEditor,this)),this._disposables.add(n.onCodeEditorAdd(this._onDidAddEditor,this)),n.listCodeEditors().forEach(this._onDidAddEditor,this)}dispose(){this._disposables.dispose(),this._onDidChange.dispose(),g.dispose(this._listener.values())}_onDidAddEditor(n){this._listener.set(n,g.combinedDisposable(n.onDidChangeCursorPosition(t=>this._onDidChange.fire({editor:n})),n.onDidChangeModelContent(t=>this._onDidChange.fire({editor:n}))))}_onDidRemoveEditor(n){var t;(t=this._listener.get(n))===null||t===void 0||t.dispose(),this._listener.delete(n)}};r=Me([_e(0,C.ICodeEditorService)],r)}),define(Q[626],J([0,1,19,23,12,13,18]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getHover=void 0;function C(g,p,c){const s=S.HoverProviderRegistry.ordered(g).map(a=>Promise.resolve(a.provideHover(g,p,c)).then(u=>u&&d(u)?u:void 0,u=>{M.onUnexpectedExternalError(u)}));return Promise.all(s).then(b.coalesce)}e.getHover=C,w.registerModelAndPositionCommand("_executeHoverProvider",(g,p)=>C(g,p,N.CancellationToken.None));function d(g){const p=typeof g.range!="undefined",c=typeof g.contents!="undefined"&&g.contents&&g.contents.length>0;return p&&c}}),define(Q[627],J([0,1,489,7,73,2,3,140,19,58,57,18,626,14]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MarkdownHoverParticipant=e.MarkdownHover=void 0;const a=N.$;class u{constructor(n,t){this.range=n,this.contents=t}equals(n){return n instanceof u?M.markedStringsEquals(this.contents,n.contents):!1}}e.MarkdownHover=u;let r=class{constructor(n,t,l,h){this._editor=n,this._hover=t,this._modeService=l,this._openerService=h}createLoadingMessage(n){return new u(n,[new M.MarkdownString().appendText(b.localize(0,null))])}computeSync(n,t){if(!this._editor.hasModel())return[];const l=this._editor.getModel(),h=n.startLineNumber,m=l.getLineMaxColumn(h),_=[];for(const f of t){const v=f.range.startLineNumber===h?f.range.startColumn:1,y=f.range.endLineNumber===h?f.range.endColumn:m,L=f.options.hoverMessage;if(!(!L||M.isEmptyMarkdownString(L))){const I=new S.Range(n.startLineNumber,v,n.startLineNumber,y);_.push(new u(I,d.asArray(L)))}}return _}computeAsync(n,t){return Ie(this,void 0,void 0,function*(){if(!this._editor.hasModel()||!n)return Promise.resolve([]);const l=this._editor.getModel();if(!c.HoverProviderRegistry.has(l))return Promise.resolve([]);const h=yield o.getHover(l,new s.Position(n.startLineNumber,n.startColumn),t),m=[];for(const _ of h)if(!M.isEmptyMarkdownString(_.contents)){const f=_.range?S.Range.lift(_.range):n;m.push(new u(f,_.contents))}return m})}renderHoverParts(n,t){const l=new w.DisposableStore;for(const h of n)for(const m of h.contents)if(!M.isEmptyMarkdownString(m)){const _=a("div.hover-row.markdown-hover"),f=N.append(_,a("div.hover-contents")),v=l.add(new C.MarkdownRenderer({editor:this._editor},this._modeService,this._openerService));l.add(v.onDidRenderAsync(()=>{f.className="hover-contents code-hover-contents",this._hover.onContentsChanged()}));const y=l.add(v.render(m));f.appendChild(y.element),t.appendChild(_)}return l}};r=Me([_e(2,p.IModeService),_e(3,g.IOpenerService)],r),e.MarkdownHoverParticipant=r}),define(Q[628],J([0,1,491,3,21,25,13,75,409,70,11,49,31,15,12]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});let u=class Ct{constructor(t,l){this.decorationIds=[],this.editor=t,this.editorWorkerService=l}static get(t){return t.getContribution(Ct.ID)}dispose(){}run(t,l){this.currentRequest&&this.currentRequest.cancel();const h=this.editor.getSelection(),m=this.editor.getModel();if(!(!m||!h)){let _=h;if(_.startLineNumber===_.endLineNumber){const f=new g.EditorState(this.editor,1|4),v=m.uri;return this.editorWorkerService.canNavigateValueSet(v)?(this.currentRequest=s.createCancelablePromise(y=>this.editorWorkerService.navigateValueSet(v,_,l)),this.currentRequest.then(y=>{if(!(!y||!y.range||!y.value)&&!!f.validate(this.editor)){let L=N.Range.lift(y.range),I=y.range,k=y.value.length-(_.endColumn-_.startColumn);I={startLineNumber:I.startLineNumber,startColumn:I.startColumn,endLineNumber:I.endLineNumber,endColumn:I.startColumn+y.value.length},k>1&&(_=new M.Selection(_.startLineNumber,_.startColumn,_.endLineNumber,_.endColumn+k-1));const E=new d.InPlaceReplaceCommand(L,_,y.value);this.editor.pushUndoStop(),this.editor.executeCommand(t,E),this.editor.pushUndoStop(),this.decorationIds=this.editor.deltaDecorations(this.decorationIds,[{range:I,options:Ct.DECORATION}]),this.decorationRemover&&this.decorationRemover.cancel(),this.decorationRemover=s.timeout(350),this.decorationRemover.then(()=>this.decorationIds=this.editor.deltaDecorations(this.decorationIds,[])).catch(a.onUnexpectedError)}}).catch(a.onUnexpectedError)):Promise.resolve(void 0)}}}};u.ID="editor.contrib.inPlaceReplaceController",u.DECORATION=o.ModelDecorationOptions.register({className:"valueSetReplacement"}),u=Me([_e(1,C.IEditorWorkerService)],u);class r extends S.EditorAction{constructor(){super({id:"editor.action.inPlaceReplace.up",label:b.localize(0,null),alias:"Replace with Previous Value",precondition:w.EditorContextKeys.writable,kbOpts:{kbExpr:w.EditorContextKeys.editorTextFocus,primary:2048|1024|82,weight:100}})}run(t,l){const h=u.get(l);return h?h.run(this.id,!0):Promise.resolve(void 0)}}class i extends S.EditorAction{constructor(){super({id:"editor.action.inPlaceReplace.down",label:b.localize(1,null),alias:"Replace with Next Value",precondition:w.EditorContextKeys.writable,kbOpts:{kbExpr:w.EditorContextKeys.editorTextFocus,primary:2048|1024|84,weight:100}})}run(t,l){const h=u.get(l);return h?h.run(this.id,!1):Promise.resolve(void 0)}}S.registerEditorContribution(u.ID,u),S.registerEditorAction(r),S.registerEditorAction(i),p.registerThemingParticipant((n,t)=>{const l=n.getColor(c.editorBracketMatchBorder);l&&t.addRule(`.monaco-editor.vs .valueSetReplacement { outline: solid 2px ${l}; }`)})}),define(Q[629],J([0,1,492,2,8,13,179,62,3,21,25,31,41,36,229,78]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IndentationToTabsCommand=e.IndentationToSpacesCommand=e.AutoIndentOnPaste=e.AutoIndentOnPasteCommand=e.ReindentSelectedLinesAction=e.ReindentLinesAction=e.DetectIndentation=e.IndentUsingSpaces=e.IndentUsingTabs=e.ChangeIndentationSizeAction=e.IndentationToTabsAction=e.IndentationToSpacesAction=e.getReindentEditOperations=void 0;function r(E,T,O,A){if(E.getLineCount()===1&&E.getLineMaxColumn(1)===1)return[];let B=o.LanguageConfigurationRegistry.getIndentationRules(E.getLanguageIdentifier().id);if(!B)return[];for(O=Math.min(O,E.getLineCount());T<=O&&B.unIndentedLinePattern;){let le=E.getLineContent(T);if(!B.unIndentedLinePattern.test(le))break;T++}if(T>O-1)return[];const{tabSize:F,indentSize:D,insertSpaces:R}=E.getOptions(),W=(le,X)=>(X=X||1,S.ShiftCommand.shiftIndent(le,le.length+X,F,D,R)),x=(le,X)=>(X=X||1,S.ShiftCommand.unshiftIndent(le,le.length+X,F,D,R));let K=[],Y,ee=E.getLineContent(T),se=ee;if(A!=null){Y=A;let le=M.getLeadingWhitespace(ee);se=Y+ee.substring(le.length),B.decreaseIndentPattern&&B.decreaseIndentPattern.test(se)&&(Y=x(Y),se=Y+ee.substring(le.length)),ee!==se&&K.push(C.EditOperation.replaceMove(new g.Selection(T,1,T,le.length+1),c.TextModel.normalizeIndentation(Y,D,R)))}else Y=M.getLeadingWhitespace(ee);let ne=Y;B.increaseIndentPattern&&B.increaseIndentPattern.test(se)?(ne=W(ne),Y=W(Y)):B.indentNextLinePattern&&B.indentNextLinePattern.test(se)&&(ne=W(ne)),T++;for(let le=T;le<=O;le++){let X=E.getLineContent(le),z=M.getLeadingWhitespace(X),P=ne+X.substring(z.length);B.decreaseIndentPattern&&B.decreaseIndentPattern.test(P)&&(ne=x(ne),Y=x(Y)),z!==ne&&K.push(C.EditOperation.replaceMove(new g.Selection(le,1,le,z.length+1),c.TextModel.normalizeIndentation(ne,D,R))),!(B.unIndentedLinePattern&&B.unIndentedLinePattern.test(X))&&(B.increaseIndentPattern&&B.increaseIndentPattern.test(P)?(Y=W(Y),ne=Y):B.indentNextLinePattern&&B.indentNextLinePattern.test(P)?ne=W(ne):ne=Y)}return K}e.getReindentEditOperations=r;class i extends w.EditorAction{constructor(){super({id:i.ID,label:b.localize(0,null),alias:"Convert Indentation to Spaces",precondition:p.EditorContextKeys.writable})}run(T,O){let A=O.getModel();if(!!A){let B=A.getOptions(),F=O.getSelection();if(!!F){const D=new I(F,B.tabSize);O.pushUndoStop(),O.executeCommands(this.id,[D]),O.pushUndoStop(),A.updateOptions({insertSpaces:!0})}}}}e.IndentationToSpacesAction=i,i.ID="editor.action.indentationToSpaces";class n extends w.EditorAction{constructor(){super({id:n.ID,label:b.localize(1,null),alias:"Convert Indentation to Tabs",precondition:p.EditorContextKeys.writable})}run(T,O){let A=O.getModel();if(!!A){let B=A.getOptions(),F=O.getSelection();if(!!F){const D=new k(F,B.tabSize);O.pushUndoStop(),O.executeCommands(this.id,[D]),O.pushUndoStop(),A.updateOptions({insertSpaces:!1})}}}}e.IndentationToTabsAction=n,n.ID="editor.action.indentationToTabs";class t extends w.EditorAction{constructor(T,O){super(O);this.insertSpaces=T}run(T,O){const A=T.get(u.IQuickInputService),B=T.get(s.IModelService);let F=O.getModel();if(!!F){let D=B.getCreationOptions(F.getLanguageIdentifier().language,F.uri,F.isForSimpleWidget);const R=[1,2,3,4,5,6,7,8].map(x=>({id:x.toString(),label:x.toString(),description:x===D.tabSize?b.localize(2,null):void 0})),W=Math.min(F.getOptions().tabSize-1,7);setTimeout(()=>{A.pick(R,{placeHolder:b.localize(3,null),activeItem:R[W]}).then(x=>{x&&F&&!F.isDisposed()&&F.updateOptions({tabSize:parseInt(x.label,10),insertSpaces:this.insertSpaces})})},50)}}}e.ChangeIndentationSizeAction=t;class l extends t{constructor(){super(!1,{id:l.ID,label:b.localize(4,null),alias:"Indent Using Tabs",precondition:void 0})}}e.IndentUsingTabs=l,l.ID="editor.action.indentUsingTabs";class h extends t{constructor(){super(!0,{id:h.ID,label:b.localize(5,null),alias:"Indent Using Spaces",precondition:void 0})}}e.IndentUsingSpaces=h,h.ID="editor.action.indentUsingSpaces";class m extends w.EditorAction{constructor(){super({id:m.ID,label:b.localize(6,null),alias:"Detect Indentation from Content",precondition:void 0})}run(T,O){const A=T.get(s.IModelService);let B=O.getModel();if(!!B){let F=A.getCreationOptions(B.getLanguageIdentifier().language,B.uri,B.isForSimpleWidget);B.detectIndentation(F.insertSpaces,F.tabSize)}}}e.DetectIndentation=m,m.ID="editor.action.detectIndentation";class _ extends w.EditorAction{constructor(){super({id:"editor.action.reindentlines",label:b.localize(7,null),alias:"Reindent Lines",precondition:p.EditorContextKeys.writable})}run(T,O){let A=O.getModel();if(!!A){let B=r(A,1,A.getLineCount());B.length>0&&(O.pushUndoStop(),O.executeEdits(this.id,B),O.pushUndoStop())}}}e.ReindentLinesAction=_;class f extends w.EditorAction{constructor(){super({id:"editor.action.reindentselectedlines",label:b.localize(8,null),alias:"Reindent Selected Lines",precondition:p.EditorContextKeys.writable})}run(T,O){let A=O.getModel();if(!!A){let B=O.getSelections();if(B!==null){let F=[];for(let D of B){let R=D.startLineNumber,W=D.endLineNumber;if(R!==W&&D.endColumn===1&&W--,R===1){if(R===W)continue}else R--;let x=r(A,R,W);F.push(...x)}F.length>0&&(O.pushUndoStop(),O.executeEdits(this.id,F),O.pushUndoStop())}}}}e.ReindentSelectedLinesAction=f;class v{constructor(T,O){this._initialSelection=O,this._edits=[],this._selectionId=null;for(let A of T)A.range&&typeof A.text=="string"&&this._edits.push(A)}getEditOperations(T,O){for(let B of this._edits)O.addEditOperation(d.Range.lift(B.range),B.text);let A=!1;Array.isArray(this._edits)&&this._edits.length===1&&this._initialSelection.isEmpty()&&(this._edits[0].range.startColumn===this._initialSelection.endColumn&&this._edits[0].range.startLineNumber===this._initialSelection.endLineNumber?(A=!0,this._selectionId=O.trackSelection(this._initialSelection,!0)):this._edits[0].range.endColumn===this._initialSelection.startColumn&&this._edits[0].range.endLineNumber===this._initialSelection.startLineNumber&&(A=!0,this._selectionId=O.trackSelection(this._initialSelection,!1))),A||(this._selectionId=O.trackSelection(this._initialSelection))}computeCursorState(T,O){return O.getTrackedSelection(this._selectionId)}}e.AutoIndentOnPasteCommand=v;class y{constructor(T){this.callOnDispose=new N.DisposableStore,this.callOnModel=new N.DisposableStore,this.editor=T,this.callOnDispose.add(T.onDidChangeConfiguration(()=>this.update())),this.callOnDispose.add(T.onDidChangeModel(()=>this.update())),this.callOnDispose.add(T.onDidChangeModelLanguage(()=>this.update()))}update(){this.callOnModel.clear(),!(this.editor.getOption(8)<4||this.editor.getOption(42))&&(!this.editor.hasModel()||this.callOnModel.add(this.editor.onDidPaste(({range:T})=>{this.trigger(T)})))}trigger(T){let O=this.editor.getSelections();if(!(O===null||O.length>1)){const A=this.editor.getModel();if(!!A&&!!A.isCheapToTokenize(T.getStartPosition().lineNumber)){const B=this.editor.getOption(8),{tabSize:F,indentSize:D,insertSpaces:R}=A.getOptions();let W=[],x={shiftIndent:se=>S.ShiftCommand.shiftIndent(se,se.length+1,F,D,R),unshiftIndent:se=>S.ShiftCommand.unshiftIndent(se,se.length+1,F,D,R)},K=T.startLineNumber;for(;K<=T.endLineNumber;){if(this.shouldIgnoreLine(A,K)){K++;continue}break}if(!(K>T.endLineNumber)){let Y=A.getLineContent(K);if(!/\S/.test(Y.substring(0,T.startColumn-1))){let se=o.LanguageConfigurationRegistry.getGoodIndentForLine(B,A,A.getLanguageIdentifier().id,K,x);if(se!==null){let ne=M.getLeadingWhitespace(Y),le=a.getSpaceCnt(se,F),X=a.getSpaceCnt(ne,F);if(le!==X){let z=a.generateIndent(le,F,R);W.push({range:new d.Range(K,1,K,ne.length+1),text:z}),Y=z+Y.substr(ne.length)}else{let z=o.LanguageConfigurationRegistry.getIndentMetadata(A,K);if(z===0||z===8)return}}}const ee=K;for(;KA.getLineTokens(le),getLanguageIdentifier:()=>A.getLanguageIdentifier(),getLanguageIdAtPosition:(le,X)=>A.getLanguageIdAtPosition(le,X),getLineContent:le=>le===ee?Y:A.getLineContent(le)},ne=o.LanguageConfigurationRegistry.getGoodIndentForLine(B,se,A.getLanguageIdentifier().id,K+1,x);if(ne!==null){let le=a.getSpaceCnt(ne,F),X=a.getSpaceCnt(M.getLeadingWhitespace(A.getLineContent(K+1)),F);if(le!==X){let z=le-X;for(let P=K+1;P<=T.endLineNumber;P++){let V=A.getLineContent(P),U=M.getLeadingWhitespace(V),$=a.getSpaceCnt(U,F)+z,ie=a.generateIndent($,F,R);ie!==U&&W.push({range:new d.Range(P,1,P,U.length+1),text:ie})}}}}if(W.length>0){this.editor.pushUndoStop();let se=new v(W,this.editor.getSelection());this.editor.executeCommand("autoIndentOnPaste",se),this.editor.pushUndoStop()}}}}}shouldIgnoreLine(T,O){T.forceTokenization(O);let A=T.getLineFirstNonWhitespaceColumn(O);if(A===0)return!0;let B=T.getLineTokens(O);if(B.getCount()>0){let F=B.findTokenIndexAtOffset(A);if(F>=0&&B.getStandardTokenType(F)===1)return!0}return!1}dispose(){this.callOnDispose.dispose(),this.callOnModel.dispose()}}e.AutoIndentOnPaste=y,y.ID="editor.contrib.autoIndentOnPaste";function L(E,T,O,A){if(!(E.getLineCount()===1&&E.getLineMaxColumn(1)===1)){let B="";for(let D=0;Df.map(E=>Promise.resolve(k.provideInlineHints(_,E,v)).then(T=>{T&&y.push({list:T,provider:k})},T=>{N.onUnexpectedExternalError(T)}))));return yield Promise.all(I),y})}e.getInlineHints=h;let m=class{constructor(f,v,y){this._editor=f,this._codeEditorService=v,this._themeService=y,this._disposables=new w.DisposableStore,this._sessionDisposables=new w.DisposableStore,this._getInlineHintsDelays=new a.LanguageFeatureRequestDelays(d.InlineHintsProviderRegistry,250,2500),this._decorationsTypeIds=[],this._decorationIds=[],this._disposables.add(d.InlineHintsProviderRegistry.onDidChange(()=>this._update())),this._disposables.add(y.onDidColorThemeChange(()=>this._update())),this._disposables.add(f.onDidChangeModel(()=>this._update())),this._disposables.add(f.onDidChangeModelLanguage(()=>this._update())),this._disposables.add(f.onDidChangeConfiguration(L=>{L.hasChanged(120)&&this._update()})),this._update()}dispose(){this._sessionDisposables.dispose(),this._removeAllDecorations(),this._disposables.dispose()}_update(){if(this._sessionDisposables.clear(),!this._editor.getOption(120).enabled){this._removeAllDecorations();return}const f=this._editor.getModel();if(!f||!d.InlineHintsProviderRegistry.has(f)){this._removeAllDecorations();return}const v=new b.RunOnceScheduler(()=>Ie(this,void 0,void 0,function*(){const L=Date.now(),I=new c.CancellationTokenSource;this._sessionDisposables.add(w.toDisposable(()=>I.dispose(!0)));const k=this._editor.getVisibleRangesPlusViewportAboveBelow(),E=yield h(f,k,I.token),T=this._getInlineHintsDelays.update(f,Date.now()-L);v.delay=T,this._updateHintsDecorators(E)}),this._getInlineHintsDelays.get(f));this._sessionDisposables.add(v),this._sessionDisposables.add(this._editor.onDidChangeModelContent(()=>v.schedule())),this._disposables.add(this._editor.onDidScrollChange(()=>v.schedule())),v.schedule();const y=new w.DisposableStore;this._sessionDisposables.add(y);for(const L of d.InlineHintsProviderRegistry.all(f))typeof L.onDidChangeInlineHints=="function"&&y.add(L.onDidChangeInlineHints(()=>v.schedule()))}_updateHintsDecorators(f){const{fontSize:v,fontFamily:y}=this._getLayoutInfo(),L=this._themeService.getColorTheme().getColor(p.editorInlineHintBackground),I=this._themeService.getColorTheme().getColor(p.editorInlineHintForeground),k=[],E=[];for(const{list:T}of f)for(let O=0;Ov)&&(y=v*.9|0);const L=f.fontFamily;return{fontSize:y,fontFamily:L}}_removeAllDecorations(){this._decorationIds=this._editor.deltaDecorations(this._decorationIds,[]),this._decorationsTypeIds.forEach(this._codeEditorService.removeDecorationType,this._codeEditorService),this._decorationsTypeIds=[]}};m.ID="editor.contrib.InlineHints",m=Me([_e(1,C.ICodeEditorService),_e(2,o.IThemeService)],m),e.InlineHintsController=m,S.registerEditorContribution(m.ID,m),r.CommandsRegistry.registerCommand("_executeInlineHintProvider",(_,...f)=>Ie(void 0,void 0,void 0,function*(){const[v,y]=f;n.assertType(i.URI.isUri(v)),n.assertType(s.Range.isIRange(y));const L=yield _.get(t.ITextModelService).createModelReference(v);try{const I=yield h(L.object.textEditorModel,[s.Range.lift(y)],c.CancellationToken.None);return g.flatten(I.map(k=>k.list)).sort((k,E)=>s.Range.compareRangesUsingStarts(k.range,E.range))}finally{L.dispose()}}))}),define(Q[631],J([0,1,493,39,188,13,92,366,182,62,14,3,21,25,410,542,411,34]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SnakeCaseAction=e.TitleCaseAction=e.LowerCaseAction=e.UpperCaseAction=e.AbstractCaseAction=e.TransposeAction=e.JoinLinesAction=e.DeleteAllRightAction=e.DeleteAllLeftAction=e.AbstractDeleteAllToBoundaryAction=e.InsertLineAfterAction=e.InsertLineBeforeAction=e.IndentLinesAction=e.DeleteLinesAction=e.TrimTrailingWhitespaceAction=e.SortLinesDescendingAction=e.SortLinesAscendingAction=e.AbstractSortLinesAction=e.DuplicateSelectionAction=void 0;class n extends w.EditorAction{constructor(le,X){super(X);this.down=le}run(le,X){if(!!X.hasModel()){const z=X.getSelections().map((U,H)=>({selection:U,index:H,ignore:!1}));z.sort((U,H)=>c.Range.compareRangesUsingStarts(U.selection,H.selection));let P=z[0];for(let U=1;Unew p.Position(H.positionLineNumber,H.positionColumn)));let V=X.getSelection();if(V!==null){let U=new C.TrimTrailingWhitespaceCommand(V,P);X.pushUndoStop(),X.executeCommands(this.id,[U]),X.pushUndoStop()}}}e.TrimTrailingWhitespaceAction=I,I.ID="editor.action.trimTrailingWhitespace";class k extends w.EditorAction{constructor(){super({id:"editor.action.deleteLines",label:b.localize(13,null),alias:"Delete Line",precondition:s.EditorContextKeys.writable,kbOpts:{kbExpr:s.EditorContextKeys.textInputFocus,primary:2048|1024|41,weight:100}})}run(le,X){if(!!X.hasModel()){let z=this._getLinesToRemove(X),P=X.getModel();if(!(P.getLineCount()===1&&P.getLineMaxColumn(1)===1)){let V=0,U=[],H=[];for(let $=0,ie=z.length;$1&&(ae-=1,j=P.getLineMaxColumn(ae)),U.push(g.EditOperation.replace(new o.Selection(ae,j,G,te),"")),H.push(new o.Selection(ae-V,oe.positionColumn,ae-V,oe.positionColumn)),V+=oe.endLineNumber-oe.startLineNumber+1}X.pushUndoStop(),X.executeEdits(this.id,U,H),X.pushUndoStop()}}}_getLinesToRemove(le){let X=le.getSelections().map(V=>{let U=V.endLineNumber;return V.startLineNumberV.startLineNumber===U.startLineNumber?V.endLineNumber-U.endLineNumber:V.startLineNumber-U.startLineNumber);let z=[],P=X[0];for(let V=1;V=X[V].startLineNumber?P.endLineNumber=X[V].endLineNumber:(z.push(P),P=X[V]);return z.push(P),z}}e.DeleteLinesAction=k;class E extends w.EditorAction{constructor(){super({id:"editor.action.indentLines",label:b.localize(14,null),alias:"Indent Line",precondition:s.EditorContextKeys.writable,kbOpts:{kbExpr:s.EditorContextKeys.editorTextFocus,primary:2048|89,weight:100}})}run(le,X){const z=X._getViewModel();!z||(X.pushUndoStop(),X.executeCommands(this.id,d.TypeOperations.indent(z.cursorConfig,X.getModel(),X.getSelections())),X.pushUndoStop())}}e.IndentLinesAction=E;class T extends w.EditorAction{constructor(){super({id:"editor.action.outdentLines",label:b.localize(15,null),alias:"Outdent Line",precondition:s.EditorContextKeys.writable,kbOpts:{kbExpr:s.EditorContextKeys.editorTextFocus,primary:2048|87,weight:100}})}run(le,X){M.CoreEditingCommands.Outdent.runEditorCommand(le,X,null)}}class O extends w.EditorAction{constructor(){super({id:"editor.action.insertLineBefore",label:b.localize(16,null),alias:"Insert Line Above",precondition:s.EditorContextKeys.writable,kbOpts:{kbExpr:s.EditorContextKeys.editorTextFocus,primary:2048|1024|3,weight:100}})}run(le,X){const z=X._getViewModel();!z||(X.pushUndoStop(),X.executeCommands(this.id,d.TypeOperations.lineInsertBefore(z.cursorConfig,X.getModel(),X.getSelections())))}}e.InsertLineBeforeAction=O;class A extends w.EditorAction{constructor(){super({id:"editor.action.insertLineAfter",label:b.localize(17,null),alias:"Insert Line Below",precondition:s.EditorContextKeys.writable,kbOpts:{kbExpr:s.EditorContextKeys.editorTextFocus,primary:2048|3,weight:100}})}run(le,X){const z=X._getViewModel();!z||(X.pushUndoStop(),X.executeCommands(this.id,d.TypeOperations.lineInsertAfter(z.cursorConfig,X.getModel(),X.getSelections())))}}e.InsertLineAfterAction=A;class B extends w.EditorAction{run(le,X){if(!!X.hasModel()){const z=X.getSelection();let P=this._getRangesToDelete(X),V=[];for(let $=0,ie=P.length-1;$g.EditOperation.replace($,""));X.pushUndoStop(),X.executeEdits(this.id,H,U),X.pushUndoStop()}}}e.AbstractDeleteAllToBoundaryAction=B;class F extends B{constructor(){super({id:"deleteAllLeft",label:b.localize(18,null),alias:"Delete All Left",precondition:s.EditorContextKeys.writable,kbOpts:{kbExpr:s.EditorContextKeys.textInputFocus,primary:0,mac:{primary:2048|1},weight:100}})}_getEndCursorState(le,X){let z=null,P=[],V=0;return X.forEach(U=>{let H;if(U.endColumn===1&&V>0){let $=U.startLineNumber-V;H=new o.Selection($,U.startColumn,$,U.startColumn)}else H=new o.Selection(U.startLineNumber,U.startColumn,U.startLineNumber,U.startColumn);V+=U.endLineNumber-U.startLineNumber,U.intersectRanges(le)?z=H:P.push(H)}),z&&P.unshift(z),P}_getRangesToDelete(le){let X=le.getSelections();if(X===null)return[];let z=X,P=le.getModel();return P===null?[]:(z.sort(c.Range.compareRangesUsingStarts),z=z.map(V=>{if(V.isEmpty())if(V.startColumn===1){let U=Math.max(1,V.startLineNumber-1),H=V.startLineNumber===1?1:P.getLineContent(U).length+1;return new c.Range(U,H,V.startLineNumber,1)}else return new c.Range(V.startLineNumber,1,V.startLineNumber,V.startColumn);else return new c.Range(V.startLineNumber,1,V.endLineNumber,V.endColumn)}),z)}}e.DeleteAllLeftAction=F;class D extends B{constructor(){super({id:"deleteAllRight",label:b.localize(19,null),alias:"Delete All Right",precondition:s.EditorContextKeys.writable,kbOpts:{kbExpr:s.EditorContextKeys.textInputFocus,primary:0,mac:{primary:256|41,secondary:[2048|20]},weight:100}})}_getEndCursorState(le,X){let z=null,P=[];for(let V=0,U=X.length,H=0;V{if(V.isEmpty()){const U=X.getLineMaxColumn(V.startLineNumber);return V.startColumn===U?new c.Range(V.startLineNumber,V.startColumn,V.startLineNumber+1,1):new c.Range(V.startLineNumber,V.startColumn,V.startLineNumber,U)}return V});return P.sort(c.Range.compareRangesUsingStarts),P}}e.DeleteAllRightAction=D;class R extends w.EditorAction{constructor(){super({id:"editor.action.joinLines",label:b.localize(20,null),alias:"Join Lines",precondition:s.EditorContextKeys.writable,kbOpts:{kbExpr:s.EditorContextKeys.editorTextFocus,primary:0,mac:{primary:256|40},weight:100}})}run(le,X){let z=X.getSelections();if(z!==null){let P=X.getSelection();if(P!==null){z.sort(c.Range.compareRangesUsingStarts);let V=[],U=z.reduce((G,j)=>G.isEmpty()?G.endLineNumber===j.startLineNumber?(P.equalsSelection(G)&&(P=j),j):j.startLineNumber>G.endLineNumber+1?(V.push(G),j):new o.Selection(G.startLineNumber,G.startColumn,j.endLineNumber,j.endColumn):j.startLineNumber>G.endLineNumber?(V.push(G),j):new o.Selection(G.startLineNumber,G.startColumn,j.endLineNumber,j.endColumn));V.push(U);let H=X.getModel();if(H!==null){let $=[],ie=[],oe=P,ae=0;for(let G=0,j=V.length;G=1){let Ee=!0;Ce===""&&(Ee=!1),Ee&&(Ce.charAt(Ce.length-1)===" "||Ce.charAt(Ce.length-1)===" ")&&(Ee=!1,Ce=Ce.replace(/[\s\uFEFF\xA0]+$/g," "));let Ae=De.substr(Re-1);Ce+=(Ee?" ":"")+Ae,Ee?he=Ae.length+1:he=Ae.length}else he=0}let be=new c.Range(Z,ue,re,ce);if(!be.isEmpty()){let Le;te.isEmpty()?($.push(g.EditOperation.replace(be,Ce)),Le=new o.Selection(be.startLineNumber-ae,Ce.length-he+1,Z-ae,Ce.length-he+1)):te.startLineNumber===te.endLineNumber?($.push(g.EditOperation.replace(be,Ce)),Le=new o.Selection(te.startLineNumber-ae,te.startColumn,te.endLineNumber-ae,te.endColumn)):($.push(g.EditOperation.replace(be,Ce)),Le=new o.Selection(te.startLineNumber-ae,te.startColumn,te.startLineNumber-ae,Ce.length-me)),c.Range.intersectRanges(be,P)!==null?oe=Le:ie.push(Le)}ae+=be.endLineNumber-be.startLineNumber}ie.unshift(oe),X.pushUndoStop(),X.executeEdits(this.id,$,ie),X.pushUndoStop()}}}}}e.JoinLinesAction=R;class W extends w.EditorAction{constructor(){super({id:"editor.action.transpose",label:b.localize(21,null),alias:"Transpose characters around the cursor",precondition:s.EditorContextKeys.writable})}run(le,X){let z=X.getSelections();if(z!==null){let P=X.getModel();if(P!==null){let V=[];for(let U=0,H=z.length;U=oe){if(ie.lineNumber===P.getLineCount())continue;let ae=new c.Range(ie.lineNumber,Math.max(1,ie.column-1),ie.lineNumber+1,1),G=P.getValueInRange(ae).split("").reverse().join("");V.push(new S.ReplaceCommand(new o.Selection(ie.lineNumber,Math.max(1,ie.column-1),ie.lineNumber+1,1),G))}else{let ae=new c.Range(ie.lineNumber,Math.max(1,ie.column-1),ie.lineNumber,ie.column+1),G=P.getValueInRange(ae).split("").reverse().join("");V.push(new S.ReplaceCommandThatPreservesSelection(ae,G,new o.Selection(ie.lineNumber,ie.column+1,ie.lineNumber,ie.column+1)))}}}X.pushUndoStop(),X.executeCommands(this.id,V),X.pushUndoStop()}}}}e.TransposeAction=W;class x extends w.EditorAction{run(le,X){const z=X.getSelections();if(z!==null){const P=X.getModel();if(P!==null){const V=X.getOption(110),U=[];for(const H of z)if(H.isEmpty()){const $=H.getStartPosition(),ie=X.getConfiguredWordAtPosition($);if(!ie)continue;const oe=new c.Range($.lineNumber,ie.startColumn,$.lineNumber,ie.endColumn),ae=P.getValueInRange(oe);U.push(g.EditOperation.replace(oe,this._modifyText(ae,V)))}else{const $=P.getValueInRange(H);U.push(g.EditOperation.replace(H,this._modifyText($,V)))}X.pushUndoStop(),X.executeEdits(this.id,U),X.pushUndoStop()}}}}e.AbstractCaseAction=x;class K extends x{constructor(){super({id:"editor.action.transformToUppercase",label:b.localize(22,null),alias:"Transform to Uppercase",precondition:s.EditorContextKeys.writable})}_modifyText(le,X){return le.toLocaleUpperCase()}}e.UpperCaseAction=K;class Y extends x{constructor(){super({id:"editor.action.transformToLowercase",label:b.localize(23,null),alias:"Transform to Lowercase",precondition:s.EditorContextKeys.writable})}_modifyText(le,X){return le.toLocaleLowerCase()}}e.LowerCaseAction=Y;class ee extends x{constructor(){super({id:"editor.action.transformToTitlecase",label:b.localize(24,null),alias:"Transform to Title Case",precondition:s.EditorContextKeys.writable})}_modifyText(le,X){const P=(`\r + `+X).split("");let V="",U=!0;for(let H=0;H=0?(U=!0,V+=$):U?(U=!1,V+=$.toLocaleUpperCase()):V+=$.toLocaleLowerCase()}return V}}e.TitleCaseAction=ee;class se extends x{constructor(){super({id:"editor.action.transformToSnakecase",label:b.localize(25,null),alias:"Transform to Snake Case",precondition:s.EditorContextKeys.writable})}_modifyText(le,X){return le.replace(/(\p{Ll})(\p{Lu})/gmu,"$1_$2").replace(/([^\b_])(\p{Lu})(\p{Ll})/gmu,"$1_$2$3").toLocaleLowerCase()}}e.SnakeCaseAction=se,w.registerEditorAction(t),w.registerEditorAction(l),w.registerEditorAction(h),w.registerEditorAction(_),w.registerEditorAction(f),w.registerEditorAction(y),w.registerEditorAction(L),w.registerEditorAction(I),w.registerEditorAction(k),w.registerEditorAction(E),w.registerEditorAction(T),w.registerEditorAction(O),w.registerEditorAction(A),w.registerEditorAction(F),w.registerEditorAction(D),w.registerEditorAction(R),w.registerEditorAction(W),w.registerEditorAction(K),w.registerEditorAction(Y),w.registerEditorAction(ee),w.registerEditorAction(se)}),define(Q[632],J([0,1,494,13,19,2,14,23,3,18,15,31,16,25,24,28,12,8,22,11,29,41]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l,h){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.editorLinkedEditingBackground=e.LinkedEditingAction=e.LinkedEditingContribution=e.CONTEXT_ONTYPE_RENAME_INPUT_VISIBLE=void 0,e.CONTEXT_ONTYPE_RENAME_INPUT_VISIBLE=new o.RawContextKey("LinkedEditingInputVisible",!1);const m="linked-editing-decoration";let _=class vt extends w.Disposable{constructor(I,k){super();this._debounceDuration=200,this._localToDispose=this._register(new w.DisposableStore),this._editor=I,this._enabled=!1,this._visibleContextKey=e.CONTEXT_ONTYPE_RENAME_INPUT_VISIBLE.bindTo(k),this._currentDecorations=[],this._languageWordPattern=null,this._currentWordPattern=null,this._ignoreChangeEvent=!1,this._localToDispose=this._register(new w.DisposableStore),this._rangeUpdateTriggerPromise=null,this._rangeSyncTriggerPromise=null,this._currentRequest=null,this._currentRequestPosition=null,this._currentRequestModelVersion=null,this._register(this._editor.onDidChangeModel(()=>this.reinitialize())),this._register(this._editor.onDidChangeConfiguration(E=>{(E.hasChanged(56)||E.hasChanged(76))&&this.reinitialize()})),this._register(g.LinkedEditingRangeProviderRegistry.onDidChange(()=>this.reinitialize())),this._register(this._editor.onDidChangeModelLanguage(()=>this.reinitialize())),this.reinitialize()}static get(I){return I.getContribution(vt.ID)}reinitialize(){const I=this._editor.getModel(),k=I!==null&&(this._editor.getOption(56)||this._editor.getOption(76))&&g.LinkedEditingRangeProviderRegistry.has(I);if(k!==this._enabled&&(this._enabled=k,this.clearRanges(),this._localToDispose.clear(),!(!k||I===null))){this._languageWordPattern=h.LanguageConfigurationRegistry.getWordDefinition(I.getLanguageIdentifier().id),this._localToDispose.add(I.onDidChangeLanguageConfiguration(()=>{this._languageWordPattern=h.LanguageConfigurationRegistry.getWordDefinition(I.getLanguageIdentifier().id)}));const E=new p.Delayer(this._debounceDuration),T=()=>{this._rangeUpdateTriggerPromise=E.trigger(()=>this.updateRanges(),this._debounceDuration)},O=new p.Delayer(0),A=B=>{this._rangeSyncTriggerPromise=O.trigger(()=>this._syncRanges(B))};this._localToDispose.add(this._editor.onDidChangeCursorPosition(()=>{T()})),this._localToDispose.add(this._editor.onDidChangeModelContent(B=>{if(!this._ignoreChangeEvent&&this._currentDecorations.length>0){const F=I.getDecorationRange(this._currentDecorations[0]);if(F&&B.changes.every(D=>F.intersectRanges(D.range))){A(this._currentDecorations);return}}T()})),this._localToDispose.add({dispose:()=>{E.cancel(),O.cancel()}}),this.updateRanges()}}_syncRanges(I){if(!(!this._editor.hasModel()||I!==this._currentDecorations||I.length===0)){const k=this._editor.getModel(),E=k.getDecorationRange(I[0]);if(!E||E.startLineNumber!==E.endLineNumber)return this.clearRanges();const T=k.getValueInRange(E);if(this._currentWordPattern){const A=T.match(this._currentWordPattern);if((A?A[0].length:0)!==T.length)return this.clearRanges()}let O=[];for(let A=1,B=I.length;A1){this.clearRanges();return}const E=this._editor.getModel(),T=E.getVersionId();if(this._currentRequestPosition&&this._currentRequestModelVersion===T){if(k.equals(this._currentRequestPosition))return;if(this._currentDecorations&&this._currentDecorations.length>0){const A=E.getDecorationRange(this._currentDecorations[0]);if(A&&A.containsPosition(k))return}}this._currentRequestPosition=k,this._currentRequestModelVersion=T;const O=p.createCancelablePromise(A=>Ie(this,void 0,void 0,function*(){try{const B=yield y(E,k,A);if(O!==this._currentRequest||(this._currentRequest=null,T!==E.getVersionId()))return;let F=[];(B==null?void 0:B.ranges)&&(F=B.ranges),this._currentWordPattern=(B==null?void 0:B.wordPattern)||this._languageWordPattern;let D=!1;for(let W=0,x=F.length;W({range:W,options:vt.DECORATION}));this._visibleContextKey.set(!0),this._currentDecorations=this._editor.deltaDecorations(this._currentDecorations,R)}catch(B){r.isPromiseCanceledError(B)||r.onUnexpectedError(B),(this._currentRequest===O||!this._currentRequest)&&this.clearRanges()}}));return this._currentRequest=O,O})}};_.ID="editor.contrib.linkedEditing",_.DECORATION=c.ModelDecorationOptions.register({stickiness:0,className:m}),_=Me([_e(1,o.IContextKeyService)],_),e.LinkedEditingContribution=_;class f extends N.EditorAction{constructor(){super({id:"editor.action.linkedEditing",label:b.localize(0,null),alias:"Start Linked Editing",precondition:o.ContextKeyExpr.and(s.EditorContextKeys.writable,s.EditorContextKeys.hasRenameProvider),kbOpts:{kbExpr:s.EditorContextKeys.editorTextFocus,primary:2048|1024|60,weight:100}})}runCommand(I,k){const E=I.get(u.ICodeEditorService),[T,O]=Array.isArray(k)&&k||[void 0,void 0];return a.URI.isUri(T)&&S.Position.isIPosition(O)?E.openCodeEditor({resource:T},E.getActiveCodeEditor()).then(A=>{!A||(A.setPosition(O),A.invokeWithinContext(B=>(this.reportTelemetry(B,A),this.run(B,A))))},r.onUnexpectedError):super.runCommand(I,k)}run(I,k){const E=_.get(k);return E?Promise.resolve(E.updateRanges(!0)):Promise.resolve()}}e.LinkedEditingAction=f;const v=N.EditorCommand.bindToContribution(_.get);N.registerEditorCommand(new v({id:"cancelLinkedEditingInput",precondition:e.CONTEXT_ONTYPE_RENAME_INPUT_VISIBLE,handler:L=>L.clearRanges(),kbOpts:{kbExpr:s.EditorContextKeys.editorTextFocus,weight:100+99,primary:9,secondary:[1024|9]}}));function y(L,I,k){const E=g.LinkedEditingRangeProviderRegistry.ordered(L);return p.first(E.map(T=>()=>Ie(this,void 0,void 0,function*(){try{return yield T.provideLinkedEditingRanges(L,I,k)}catch(O){r.onUnexpectedExternalError(O);return}})),T=>!!T&&M.isNonEmptyArray(T==null?void 0:T.ranges))}e.editorLinkedEditingBackground=n.registerColor("editor.linkedEditingBackground",{dark:l.Color.fromHex("#f00").transparent(.3),light:l.Color.fromHex("#f00").transparent(.3),hc:l.Color.fromHex("#f00").transparent(.3)},b.localize(1,null)),t.registerThemingParticipant((L,I)=>{const k=L.getColor(e.editorLinkedEditingBackground);k&&I.addRule(`.monaco-editor .${m} { background: ${k}; border-left-color: ${k}; }`)}),N.registerModelAndPositionCommand("_executeLinkedEditingProvider",(L,I)=>y(L,I,C.CancellationToken.None)),N.registerEditorContribution(_.ID,_),N.registerEditorAction(f)}),define(Q[633],J([0,1,495,15,23,12,73,2,17,13,31,18,227,546,32,58,22,11,24,43,44,346]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.LinkDetector=void 0;function h(y,L){const I=y.url&&/^command:/i.test(y.url.toString()),k=y.tooltip?y.tooltip:I?b.localize(0,null):b.localize(1,null),E=L?d.isMacintosh?b.localize(2,null):b.localize(3,null):d.isMacintosh?b.localize(4,null):b.localize(5,null);if(y.url){let T="";if(/^command:/i.test(y.url.toString())){const A=y.url.toString().match(/^command:([^?#]+)/);if(A){const B=A[1];T=` "${b.localize(6,null,B)}"`}}return new S.MarkdownString("",!0).appendMarkdown(`[${k}](${y.url.toString(!0)}${T}) (${E})`)}else return new S.MarkdownString().appendText(`${k} (${E})`)}const m={general:p.ModelDecorationOptions.register({stickiness:1,collapseOnReplaceEdit:!0,inlineClassName:"detected-link"}),active:p.ModelDecorationOptions.register({stickiness:1,collapseOnReplaceEdit:!0,inlineClassName:"detected-link-active"})};class _{constructor(L,I){this.link=L,this.decorationId=I}static decoration(L,I){return{range:L.range,options:_._getOptions(L,I,!1)}}static _getOptions(L,I,k){const E=Object.assign({},k?m.active:m.general);return E.hoverMessage=h(L,I),E}activate(L,I){L.changeDecorationOptions(this.decorationId,_._getOptions(this.link,I,!0))}deactivate(L,I){L.changeDecorationOptions(this.decorationId,_._getOptions(this.link,I,!1))}}let f=class bt{constructor(L,I,k){this.listenersToRemove=new C.DisposableStore,this.editor=L,this.openerService=I,this.notificationService=k;let E=new o.ClickLinkGesture(L);this.listenersToRemove.add(E),this.listenersToRemove.add(E.onMouseMoveOrRelevantKeyDown(([T,O])=>{this._onEditorMouseMove(T,O)})),this.listenersToRemove.add(E.onExecute(T=>{this.onEditorMouseUp(T)})),this.listenersToRemove.add(E.onCancel(T=>{this.cleanUpActiveLinkDecoration()})),this.enabled=L.getOption(57),this.listenersToRemove.add(L.onDidChangeConfiguration(T=>{const O=L.getOption(57);this.enabled!==O&&(this.enabled=O,this.updateDecorations([]),this.stop(),this.beginCompute())})),this.listenersToRemove.add(L.onDidChangeModelContent(T=>this.onChange())),this.listenersToRemove.add(L.onDidChangeModel(T=>this.onModelChanged())),this.listenersToRemove.add(L.onDidChangeModelLanguage(T=>this.onModelModeChanged())),this.listenersToRemove.add(c.LinkProviderRegistry.onDidChange(T=>this.onModelModeChanged())),this.timeout=new N.TimeoutTimer,this.computePromise=null,this.activeLinksList=null,this.currentOccurrences={},this.activeLinkDecorationId=null,this.beginCompute()}static get(L){return L.getContribution(bt.ID)}onModelChanged(){this.currentOccurrences={},this.activeLinkDecorationId=null,this.stop(),this.beginCompute()}onModelModeChanged(){this.stop(),this.beginCompute()}onChange(){this.timeout.setIfNotSet(()=>this.beginCompute(),bt.RECOMPUTE_TIME)}beginCompute(){return Ie(this,void 0,void 0,function*(){if(!(!this.editor.hasModel()||!this.enabled)){const L=this.editor.getModel();if(!!c.LinkProviderRegistry.has(L)){this.activeLinksList&&(this.activeLinksList.dispose(),this.activeLinksList=null),this.computePromise=N.createCancelablePromise(I=>s.getLinks(L,I));try{this.activeLinksList=yield this.computePromise,this.updateDecorations(this.activeLinksList.links)}catch(I){w.onUnexpectedError(I)}finally{this.computePromise=null}}}})}updateDecorations(L){const I=this.editor.getOption(64)==="altKey";let k=[],E=Object.keys(this.currentOccurrences);for(let A=0,B=E.length;A{E.activate(T,k),this.activeLinkDecorationId=E.decorationId})}else this.cleanUpActiveLinkDecoration()}cleanUpActiveLinkDecoration(){const L=this.editor.getOption(64)==="altKey";if(this.activeLinkDecorationId){const I=this.currentOccurrences[this.activeLinkDecorationId];I&&this.editor.changeDecorations(k=>{I.deactivate(k,L)}),this.activeLinkDecorationId=null}}onEditorMouseUp(L){if(!!this.isEnabled(L)){const I=this.getLinkOccurrence(L.target.position);!I||this.openLinkOccurrence(I,L.hasSideBySideModifier,!0)}}openLinkOccurrence(L,I,k=!1){if(!!this.openerService){const{link:E}=L;E.resolve(M.CancellationToken.None).then(T=>{if(typeof T=="string"&&this.editor.hasModel()){const O=this.editor.getModel().uri;if(O.scheme===t.Schemas.file&&T.startsWith(`${t.Schemas.file}:`)){const A=n.URI.parse(T);if(A.scheme===t.Schemas.file){const B=l.originalFSPath(A);let F=null;B.startsWith("/./")?F=`.${B.substr(1)}`:B.startsWith("//./")&&(F=`.${B.substr(2)}`),F&&(T=l.joinPath(O,F))}}}return this.openerService.open(T,{openToSide:I,fromUserGesture:k,allowContributedOpeners:!0})},T=>{const O=T instanceof Error?T.message:T;O==="invalid"?this.notificationService.warn(b.localize(7,null,E.url.toString())):O==="missing"?this.notificationService.warn(b.localize(8,null)):w.onUnexpectedError(T)})}}getLinkOccurrence(L){if(!this.editor.hasModel()||!L)return null;const I=this.editor.getModel().getDecorationsInRange({startLineNumber:L.lineNumber,startColumn:L.column,endLineNumber:L.lineNumber,endColumn:L.column},0,!0);for(const k of I){const E=this.currentOccurrences[k.id];if(E)return E}return null}isEnabled(L,I){return Boolean(L.target.type===6&&(L.hasTriggerModifier||I&&I.keyCodeIsTriggerKey))}stop(){var L;this.timeout.cancel(),this.activeLinksList&&((L=this.activeLinksList)===null||L===void 0||L.dispose(),this.activeLinksList=null),this.computePromise&&(this.computePromise.cancel(),this.computePromise=null)}dispose(){this.listenersToRemove.dispose(),this.stop(),this.timeout.dispose()}};f.ID="editor.linkDetector",f.RECOMPUTE_TIME=1e3,f=Me([_e(1,u.IOpenerService),_e(2,a.INotificationService)],f),e.LinkDetector=f;class v extends g.EditorAction{constructor(){super({id:"editor.action.openLink",label:b.localize(9,null),alias:"Open Link",precondition:void 0})}run(L,I){let k=f.get(I);if(!!k&&!!I.hasModel()){let E=I.getSelections();for(let T of E){let O=k.getLinkOccurrence(T.getEndPosition());O&&k.openLinkOccurrence(O,!1)}}}}g.registerEditorContribution(f.ID,f),g.registerEditorAction(v),i.registerThemingParticipant((y,L)=>{const I=y.getColor(r.editorActiveLinkForeground);I&&L.addRule(`.monaco-editor .detected-link-active { color: ${I} !important; }`)})}),define(Q[146],J([0,1,496,15,2,47,3,13,16,11,22,97,347]),function(q,e,b,N,M,w,S,C,d,g,p,c){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MessageController=void 0;let o=class St{constructor(r,i){this._messageWidget=new M.MutableDisposable,this._messageListeners=new M.DisposableStore,this._editor=r,this._visible=St.MESSAGE_VISIBLE.bindTo(i),this._editorListener=this._editor.onDidAttemptReadOnlyEdit(()=>this._onDidAttemptReadOnlyEdit())}static get(r){return r.getContribution(St.ID)}dispose(){this._editorListener.dispose(),this._messageListeners.dispose(),this._messageWidget.dispose(),this._visible.reset()}showMessage(r,i){w.alert(r),this._visible.set(!0),this._messageWidget.clear(),this._messageListeners.clear(),this._messageWidget.value=new a(this._editor,i,r),this._messageListeners.add(this._editor.onDidBlurEditorText(()=>this.closeMessage())),this._messageListeners.add(this._editor.onDidChangeCursorPosition(()=>this.closeMessage())),this._messageListeners.add(this._editor.onDidDispose(()=>this.closeMessage())),this._messageListeners.add(this._editor.onDidChangeModel(()=>this.closeMessage())),this._messageListeners.add(new N.TimeoutTimer(()=>this.closeMessage(),3e3));let n;this._messageListeners.add(this._editor.onMouseMove(t=>{!t.target.position||(n?n.containsPosition(t.target.position)||this.closeMessage():n=new S.Range(i.lineNumber-3,1,t.target.position.lineNumber+3,1))}))}closeMessage(){this._visible.reset(),this._messageListeners.clear(),this._messageWidget.value&&this._messageListeners.add(a.fadeOut(this._messageWidget.value))}_onDidAttemptReadOnlyEdit(){this._editor.hasModel()&&this.showMessage(b.localize(1,null),this._editor.getPosition())}};o.ID="editor.contrib.messageController",o.MESSAGE_VISIBLE=new d.RawContextKey("messageVisible",!1,b.localize(0,null)),o=Me([_e(1,d.IContextKeyService)],o),e.MessageController=o;const s=C.EditorCommand.bindToContribution(o.get);C.registerEditorCommand(new s({id:"leaveEditorMessage",precondition:o.MESSAGE_VISIBLE,handler:u=>u.closeMessage(),kbOpts:{weight:100+30,primary:9}}));class a{constructor(r,{lineNumber:i,column:n},t){this.allowEditorOverflow=!0,this.suppressMouseDown=!1,this._editor=r,this._editor.revealLinesInCenterIfOutsideViewport(i,i,0),this._position={lineNumber:i,column:n-1},this._domNode=document.createElement("div"),this._domNode.classList.add("monaco-editor-overlaymessage");const l=document.createElement("div");l.classList.add("anchor","top"),this._domNode.appendChild(l);const h=document.createElement("div");h.classList.add("message"),h.textContent=t,this._domNode.appendChild(h);const m=document.createElement("div");m.classList.add("anchor","below"),this._domNode.appendChild(m),this._editor.addContentWidget(this),this._domNode.classList.add("fadeIn")}static fadeOut(r){let i;const n=()=>{r.dispose(),clearTimeout(i),r.getDomNode().removeEventListener("animationend",n)};return i=setTimeout(n,110),r.getDomNode().addEventListener("animationend",n),r.getDomNode().classList.add("fadeOut"),{dispose:n}}dispose(){this._editor.removeContentWidget(this)}getId(){return"messageoverlay"}getDomNode(){return this._domNode}getPosition(){return{position:this._position,preference:[1,2]}}afterRender(r){this._domNode.classList.toggle("below",r===2)}}C.registerEditorContribution(o.ID,o),g.registerThemingParticipant((u,r)=>{const i=u.getColor(p.inputValidationInfoBorder);if(i){let l=u.type===c.ColorScheme.HIGH_CONTRAST?2:1;r.addRule(`.monaco-editor .monaco-editor-overlaymessage .anchor.below { border-top-color: ${i}; }`),r.addRule(`.monaco-editor .monaco-editor-overlaymessage .anchor.top { border-bottom-color: ${i}; }`),r.addRule(`.monaco-editor .monaco-editor-overlaymessage .message { border: ${l}px solid ${i}; }`)}const n=u.getColor(p.inputValidationInfoBackground);n&&r.addRule(`.monaco-editor .monaco-editor-overlaymessage .message { background-color: ${n}; }`);const t=u.getColor(p.inputValidationInfoForeground);t&&r.addRule(`.monaco-editor .monaco-editor-overlaymessage .message { color: ${t}; }`)})});var _t=this&&this.__classPrivateFieldSet||function(q,e,b){if(!e.has(q))throw new TypeError("attempted to set private field on non-instance");return e.set(q,b),b},tt=this&&this.__classPrivateFieldGet||function(q,e){if(!e.has(q))throw new TypeError("attempted to get private field on non-instance");return e.get(q)};define(Q[634],J([0,1,12,150,2,146,9,616,595]),function(q,e,b,N,M,w,S,C,d){"use strict";var g;Object.defineProperty(e,"__esModule",{value:!0}),e.CodeActionUi=void 0;let p=class extends M.Disposable{constructor(o,s,a,u,r){super();this._editor=o,this.delegate=u,this._activeCodeActions=this._register(new M.MutableDisposable),g.set(this,!1),this._codeActionWidget=new N.Lazy(()=>this._register(r.createInstance(C.CodeActionMenu,this._editor,{onSelectCodeAction:i=>Ie(this,void 0,void 0,function*(){this.delegate.applyCodeAction(i,!0)})}))),this._lightBulbWidget=new N.Lazy(()=>{const i=this._register(r.createInstance(d.LightBulbWidget,this._editor,s,a));return this._register(i.onClick(n=>this.showCodeActionList(n.trigger,n.actions,n,{includeDisabledActions:!1}))),i})}dispose(){_t(this,g,!0),super.dispose()}update(o){var s,a,u;return Ie(this,void 0,void 0,function*(){if(o.type!==1){(s=this._lightBulbWidget.rawValue)===null||s===void 0||s.hide();return}let r;try{r=yield o.actions}catch(i){b.onUnexpectedError(i);return}if(!tt(this,g))if(this._lightBulbWidget.getValue().update(r,o.trigger,o.position),o.trigger.type===2){if((a=o.trigger.filter)===null||a===void 0?void 0:a.include){const n=this.tryGetValidActionToApply(o.trigger,r);if(n){try{yield this.delegate.applyCodeAction(n,!1)}finally{r.dispose()}return}if(o.trigger.context){const t=this.getInvalidActionThatWouldHaveBeenApplied(o.trigger,r);if(t&&t.action.disabled){w.MessageController.get(this._editor).showMessage(t.action.disabled,o.trigger.context.position),r.dispose();return}}}const i=!!((u=o.trigger.filter)===null||u===void 0?void 0:u.include);if(o.trigger.context&&(!r.allActions.length||!i&&!r.validActions.length)){w.MessageController.get(this._editor).showMessage(o.trigger.context.notAvailableMessage,o.trigger.context.position),this._activeCodeActions.value=r,r.dispose();return}this._activeCodeActions.value=r,this._codeActionWidget.getValue().show(o.trigger,r,o.position,{includeDisabledActions:i})}else this._codeActionWidget.getValue().isVisible?r.dispose():this._activeCodeActions.value=r})}getInvalidActionThatWouldHaveBeenApplied(o,s){if(!!s.allActions.length&&(o.autoApply==="first"&&s.validActions.length===0||o.autoApply==="ifSingle"&&s.allActions.length===1))return s.allActions.find(({action:a})=>a.disabled)}tryGetValidActionToApply(o,s){if(!!s.validActions.length&&(o.autoApply==="first"&&s.validActions.length>0||o.autoApply==="ifSingle"&&s.validActions.length===1))return s.validActions[0]}showCodeActionList(o,s,a,u){return Ie(this,void 0,void 0,function*(){this._codeActionWidget.getValue().show(o,s,a,u)})}};g=new WeakMap,p=Me([_e(4,S.IInstantiationService)],p),e.CodeActionUi=p}),define(Q[263],J([0,1,23,150,2,8,13,133,25,145,634,146,466,26,16,9,85,32,59,87,617,130]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l,h){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AutoFixAction=e.FixAllAction=e.OrganizeImportsAction=e.SourceAction=e.RefactorAction=e.CodeActionCommand=e.QuickFixAction=e.applyCodeAction=e.QuickFixController=void 0;function m(F){return a.ContextKeyExpr.regex(l.SUPPORTED_CODE_ACTIONS.keys()[0],new RegExp("(\\s|^)"+w.escapeRegExpCharacters(F.value)+"\\b"))}const _={type:"object",defaultSnippets:[{body:{kind:""}}],properties:{kind:{type:"string",description:o.localize(0,null)},apply:{type:"string",description:o.localize(1,null),default:"ifSingle",enum:["first","ifSingle","never"],enumDescriptions:[o.localize(2,null),o.localize(3,null),o.localize(4,null)]},preferred:{type:"boolean",default:!1,description:o.localize(5,null)}}};let f=class xt extends M.Disposable{constructor(D,R,W,x,K){super();this._instantiationService=K,this._editor=D,this._model=this._register(new l.CodeActionModel(this._editor,R,W,x)),this._register(this._model.onDidChangeState(Y=>this.update(Y))),this._ui=new N.Lazy(()=>this._register(new p.CodeActionUi(D,I.Id,B.Id,{applyCodeAction:(Y,ee)=>Ie(this,void 0,void 0,function*(){try{yield this._applyCodeAction(Y)}finally{ee&&this._trigger({type:1,filter:{}})}})},this._instantiationService)))}static get(D){return D.getContribution(xt.ID)}update(D){this._ui.getValue().update(D)}showCodeActions(D,R,W){return this._ui.getValue().showCodeActionList(D,R,W,{includeDisabledActions:!1})}manualTriggerAtCurrentPosition(D,R,W){if(!!this._editor.hasModel()){c.MessageController.get(this._editor).closeMessage();const x=this._editor.getPosition();this._trigger({type:2,filter:R,autoApply:W,context:{notAvailableMessage:D,position:x}})}}_trigger(D){return this._model.trigger(D)}_applyCodeAction(D){return this._instantiationService.invokeFunction(v,D,this._editor)}};f.ID="editor.contrib.quickFixController",f=Me([_e(1,r.IMarkerService),_e(2,a.IContextKeyService),_e(3,n.IEditorProgressService),_e(4,u.IInstantiationService)],f),e.QuickFixController=f;function v(F,D,R){return Ie(this,void 0,void 0,function*(){const W=F.get(C.IBulkEditService),x=F.get(s.ICommandService),K=F.get(t.ITelemetryService),Y=F.get(i.INotificationService);if(K.publicLog2("codeAction.applyCodeAction",{codeActionTitle:D.action.title,codeActionKind:D.action.kind,codeActionIsPreferred:!!D.action.isPreferred}),yield D.resolve(b.CancellationToken.None),D.action.edit&&(yield W.apply(C.ResourceEdit.convert(D.action.edit),{editor:R,label:D.action.title})),D.action.command)try{yield x.executeCommand(D.action.command.id,...D.action.command.arguments||[])}catch(ee){const se=y(ee);Y.error(typeof se=="string"?se:o.localize(6,null))}})}e.applyCodeAction=v;function y(F){return typeof F=="string"?F:F instanceof Error&&typeof F.message=="string"?F.message:void 0}function L(F,D,R,W){if(F.hasModel()){const x=f.get(F);x&&x.manualTriggerAtCurrentPosition(D,R,W)}}class I extends S.EditorAction{constructor(){super({id:I.Id,label:o.localize(7,null),alias:"Quick Fix...",precondition:a.ContextKeyExpr.and(d.EditorContextKeys.writable,d.EditorContextKeys.hasCodeActionsProvider),kbOpts:{kbExpr:d.EditorContextKeys.editorTextFocus,primary:2048|84,weight:100}})}run(D,R){return L(R,o.localize(8,null),void 0,void 0)}}e.QuickFixAction=I,I.Id="editor.action.quickFix";class k extends S.EditorCommand{constructor(){super({id:g.codeActionCommandId,precondition:a.ContextKeyExpr.and(d.EditorContextKeys.writable,d.EditorContextKeys.hasCodeActionsProvider),description:{description:"Trigger a code action",args:[{name:"args",schema:_}]}})}runEditorCommand(D,R,W){const x=h.CodeActionCommandArgs.fromUser(W,{kind:h.CodeActionKind.Empty,apply:"ifSingle"});return L(R,typeof(W==null?void 0:W.kind)=="string"?x.preferred?o.localize(9,null,W.kind):o.localize(10,null,W.kind):x.preferred?o.localize(11,null):o.localize(12,null),{include:x.kind,includeSourceActions:!0,onlyIncludePreferredActions:x.preferred},x.apply)}}e.CodeActionCommand=k;class E extends S.EditorAction{constructor(){super({id:g.refactorCommandId,label:o.localize(13,null),alias:"Refactor...",precondition:a.ContextKeyExpr.and(d.EditorContextKeys.writable,d.EditorContextKeys.hasCodeActionsProvider),kbOpts:{kbExpr:d.EditorContextKeys.editorTextFocus,primary:2048|1024|48,mac:{primary:256|1024|48},weight:100},contextMenuOpts:{group:"1_modification",order:2,when:a.ContextKeyExpr.and(d.EditorContextKeys.writable,m(h.CodeActionKind.Refactor))},description:{description:"Refactor...",args:[{name:"args",schema:_}]}})}run(D,R,W){const x=h.CodeActionCommandArgs.fromUser(W,{kind:h.CodeActionKind.Refactor,apply:"never"});return L(R,typeof(W==null?void 0:W.kind)=="string"?x.preferred?o.localize(14,null,W.kind):o.localize(15,null,W.kind):x.preferred?o.localize(16,null):o.localize(17,null),{include:h.CodeActionKind.Refactor.contains(x.kind)?x.kind:h.CodeActionKind.None,onlyIncludePreferredActions:x.preferred},x.apply)}}e.RefactorAction=E;class T extends S.EditorAction{constructor(){super({id:g.sourceActionCommandId,label:o.localize(18,null),alias:"Source Action...",precondition:a.ContextKeyExpr.and(d.EditorContextKeys.writable,d.EditorContextKeys.hasCodeActionsProvider),contextMenuOpts:{group:"1_modification",order:2.1,when:a.ContextKeyExpr.and(d.EditorContextKeys.writable,m(h.CodeActionKind.Source))},description:{description:"Source Action...",args:[{name:"args",schema:_}]}})}run(D,R,W){const x=h.CodeActionCommandArgs.fromUser(W,{kind:h.CodeActionKind.Source,apply:"never"});return L(R,typeof(W==null?void 0:W.kind)=="string"?x.preferred?o.localize(19,null,W.kind):o.localize(20,null,W.kind):x.preferred?o.localize(21,null):o.localize(22,null),{include:h.CodeActionKind.Source.contains(x.kind)?x.kind:h.CodeActionKind.None,includeSourceActions:!0,onlyIncludePreferredActions:x.preferred},x.apply)}}e.SourceAction=T;class O extends S.EditorAction{constructor(){super({id:g.organizeImportsCommandId,label:o.localize(23,null),alias:"Organize Imports",precondition:a.ContextKeyExpr.and(d.EditorContextKeys.writable,m(h.CodeActionKind.SourceOrganizeImports)),kbOpts:{kbExpr:d.EditorContextKeys.editorTextFocus,primary:1024|512|45,weight:100}})}run(D,R){return L(R,o.localize(24,null),{include:h.CodeActionKind.SourceOrganizeImports,includeSourceActions:!0},"ifSingle")}}e.OrganizeImportsAction=O;class A extends S.EditorAction{constructor(){super({id:g.fixAllCommandId,label:o.localize(25,null),alias:"Fix All",precondition:a.ContextKeyExpr.and(d.EditorContextKeys.writable,m(h.CodeActionKind.SourceFixAll))})}run(D,R){return L(R,o.localize(26,null),{include:h.CodeActionKind.SourceFixAll,includeSourceActions:!0},"ifSingle")}}e.FixAllAction=A;class B extends S.EditorAction{constructor(){super({id:B.Id,label:o.localize(27,null),alias:"Auto Fix...",precondition:a.ContextKeyExpr.and(d.EditorContextKeys.writable,m(h.CodeActionKind.QuickFix)),kbOpts:{kbExpr:d.EditorContextKeys.editorTextFocus,primary:512|1024|84,mac:{primary:2048|512|84},weight:100}})}run(D,R){return L(R,o.localize(28,null),{include:h.CodeActionKind.QuickFix,onlyIncludePreferredActions:!0},"ifSingle")}}e.AutoFixAction=B,B.Id="editor.action.autoFix"}),define(Q[635],J([0,1,13,263]),function(q,e,b,N){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),b.registerEditorContribution(N.QuickFixController.ID,N.QuickFixController),b.registerEditorAction(N.QuickFixAction),b.registerEditorAction(N.RefactorAction),b.registerEditorAction(N.SourceAction),b.registerEditorAction(N.OrganizeImportsAction),b.registerEditorAction(N.AutoFixAction),b.registerEditorAction(N.FixAllAction),b.registerEditorCommand(new N.CodeActionCommand)}),define(Q[636],J([0,1,503,12,16,59,13,25,604,18,14,47,3,146,70,32,133,24,28,23,2,15,77,9,33,95,137,20]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l,h,m,_,f,v,y,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.RenameAction=e.rename=void 0;class I{constructor(B,F){this.model=B,this.position=F,this._providerRenameIdx=0,this._providers=g.RenameProviderRegistry.ordered(B)}hasProvider(){return this._providers.length>0}resolveRenameLocation(B){return Ie(this,void 0,void 0,function*(){const F=[];for(this._providerRenameIdx=0;this._providerRenameIdx0?F.join(` +`):void 0}:{range:o.Range.fromPositions(this.position),text:"",rejectReason:F.length>0?F.join(` +`):void 0}})}provideRenameEdits(B,F){return Ie(this,void 0,void 0,function*(){return this._provideRenameEdits(B,this._providerRenameIdx,[],F)})}_provideRenameEdits(B,F,D,R){return Ie(this,void 0,void 0,function*(){const W=this._providers[F];if(!W)return{edits:[],rejectReason:D.join(` +`)};const x=yield W.provideRenameEdits(this.model,this.position,B,R);if(x){if(x.rejectReason)return this._provideRenameEdits(B,F+1,D.concat(x.rejectReason),R)}else return this._provideRenameEdits(B,F+1,D.concat(b.localize(0,null)),R);return x})}}function k(A,B,F){return Ie(this,void 0,void 0,function*(){const D=new I(A,B),R=yield D.resolveRenameLocation(t.CancellationToken.None);return(R==null?void 0:R.rejectReason)?{edits:[],rejectReason:R.rejectReason}:D.provideRenameEdits(F,t.CancellationToken.None)})}e.rename=k;let E=class Vt{constructor(B,F,D,R,W,x,K){this.editor=B,this._instaService=F,this._notificationService=D,this._bulkEditService=R,this._progressService=W,this._logService=x,this._configService=K,this._dispoableStore=new l.DisposableStore,this._cts=new t.CancellationTokenSource,this._renameInputField=this._dispoableStore.add(new h.IdleValue(()=>this._dispoableStore.add(this._instaService.createInstance(d.RenameInputField,this.editor,["acceptRenameInput","acceptRenameInputWithPreview"]))))}static get(B){return B.getContribution(Vt.ID)}dispose(){this._dispoableStore.dispose(),this._cts.dispose(!0)}run(){return Ie(this,void 0,void 0,function*(){if(this._cts.dispose(!0),!!this.editor.hasModel()){const B=this.editor.getPosition(),F=new I(this.editor.getModel(),B);if(!!F.hasProvider()){this._cts=new a.EditorStateCancellationTokenSource(this.editor,4|1);let D;try{const se=F.resolveRenameLocation(this._cts.token);this._progressService.showWhile(se,250),D=yield se}catch(se){s.MessageController.get(this.editor).showMessage(se||b.localize(1,null),B);return}if(!!D){if(D.rejectReason){s.MessageController.get(this.editor).showMessage(D.rejectReason,B);return}if(!this._cts.token.isCancellationRequested){this._cts.dispose(),this._cts=new a.EditorStateCancellationTokenSource(this.editor,4|1,D.range);let R=this.editor.getSelection(),W=0,x=D.text.length;!o.Range.isEmpty(R)&&!o.Range.spansMultipleLines(R)&&o.Range.containsRange(D.range,R)&&(W=Math.max(0,R.startColumn-D.range.startColumn),x=Math.min(D.range.endColumn,R.endColumn)-D.range.startColumn);const K=this._bulkEditService.hasPreviewHandler()&&this._configService.getValue(this.editor.getModel().uri,"editor.rename.enablePreview"),Y=yield this._renameInputField.value.getInput(D.range,D.text,W,x,K,this._cts.token);if(typeof Y=="boolean"){Y&&this.editor.focus();return}this.editor.focus();const ee=h.raceCancellation(F.provideRenameEdits(Y.newName,this._cts.token),this._cts.token).then(se=>Ie(this,void 0,void 0,function*(){if(!(!se||!this.editor.hasModel())){if(se.rejectReason){this._notificationService.info(se.rejectReason);return}this._bulkEditService.apply(r.ResourceEdit.convert(se),{editor:this.editor,showPreview:Y.wantsPreview,label:b.localize(2,null,D==null?void 0:D.text),quotableLabel:b.localize(3,null,D==null?void 0:D.text)}).then(ne=>{ne.ariaSummary&&c.alert(b.localize(4,null,D.text,Y.newName,ne.ariaSummary))}).catch(ne=>{this._notificationService.error(b.localize(5,null)),this._logService.error(ne)})}}),se=>{this._notificationService.error(b.localize(6,null)),this._logService.error(se)});return this._progressService.showWhile(ee,250),ee}}}}})}acceptRenameInput(B){this._renameInputField.value.acceptInput(B)}cancelRenameInput(){this._renameInputField.value.cancelInput(!0)}};E.ID="editor.contrib.renameController",E=Me([_e(1,_.IInstantiationService),_e(2,u.INotificationService),_e(3,r.IBulkEditService),_e(4,w.IEditorProgressService),_e(5,m.ILogService),_e(6,y.ITextResourceConfigurationService)],E);class T extends S.EditorAction{constructor(){super({id:"editor.action.rename",label:b.localize(7,null),alias:"Rename Symbol",precondition:M.ContextKeyExpr.and(C.EditorContextKeys.writable,C.EditorContextKeys.hasRenameProvider),kbOpts:{kbExpr:C.EditorContextKeys.editorTextFocus,primary:60,weight:100},contextMenuOpts:{group:"1_modification",order:1.1}})}runCommand(B,F){const D=B.get(n.ICodeEditorService),[R,W]=Array.isArray(F)&&F||[void 0,void 0];return i.URI.isUri(R)&&p.Position.isIPosition(W)?D.openCodeEditor({resource:R},D.getActiveCodeEditor()).then(x=>{!x||(x.setPosition(W),x.invokeWithinContext(K=>(this.reportTelemetry(K,x),this.run(K,x))))},N.onUnexpectedError):super.runCommand(B,F)}run(B,F){const D=E.get(F);return D?D.run():Promise.resolve()}}e.RenameAction=T,S.registerEditorContribution(E.ID,E),S.registerEditorAction(T);const O=S.EditorCommand.bindToContribution(E.get);S.registerEditorCommand(new O({id:"acceptRenameInput",precondition:d.CONTEXT_RENAME_INPUT_VISIBLE,handler:A=>A.acceptRenameInput(!1),kbOpts:{weight:100+99,kbExpr:C.EditorContextKeys.focus,primary:3}})),S.registerEditorCommand(new O({id:"acceptRenameInputWithPreview",precondition:M.ContextKeyExpr.and(d.CONTEXT_RENAME_INPUT_VISIBLE,M.ContextKeyExpr.has("config.editor.rename.enablePreview")),handler:A=>A.acceptRenameInput(!0),kbOpts:{weight:100+99,kbExpr:C.EditorContextKeys.focus,primary:1024+3}})),S.registerEditorCommand(new O({id:"cancelRenameInput",precondition:d.CONTEXT_RENAME_INPUT_VISIBLE,handler:A=>A.cancelRenameInput(),kbOpts:{weight:100+99,kbExpr:C.EditorContextKeys.focus,primary:9,secondary:[1024|9]}})),S.registerModelAndPositionCommand("_executeDocumentRenameProvider",function(A,B,...F){const[D]=F;return L.assertType(typeof D=="string"),k(A,B,D)}),f.Registry.as(v.Extensions.Configuration).registerConfiguration({id:"editor",properties:{"editor.rename.enablePreview":{scope:5,description:b.localize(8,null),default:!0,type:"boolean"}}})}),define(Q[637],J([0,1,19,23,13,14,3,21,25,18,505,34,412,230,26,12]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.provideSelectionRanges=void 0;class r{constructor(_,f){this.index=_,this.ranges=f}mov(_){let f=this.index+(_?1:-1);if(f<0||f>=this.ranges.length)return this;const v=new r(f,this.ranges);return v.ranges[f].equalsRange(this.ranges[this.index])?v.mov(_):v}}class i{constructor(_){this._editor=_,this._ignoreSelection=!1}static get(_){return _.getContribution(i.ID)}dispose(){var _;(_=this._selectionListener)===null||_===void 0||_.dispose()}run(_){return Ie(this,void 0,void 0,function*(){if(!!this._editor.hasModel()){const f=this._editor.getSelections(),v=this._editor.getModel();if(!!g.SelectionRangeRegistry.has(v)&&(this._state||(yield h(v,f.map(L=>L.getPosition()),this._editor.getOption(97),N.CancellationToken.None).then(L=>{var I;if(!(!b.isNonEmptyArray(L)||L.length!==f.length)&&!(!this._editor.hasModel()||!b.equals(this._editor.getSelections(),f,(k,E)=>k.equalsSelection(E)))){for(let k=0;kE.containsPosition(f[k].getStartPosition())&&E.containsPosition(f[k].getEndPosition())),L[k].unshift(f[k]);this._state=L.map(k=>new r(0,k)),(I=this._selectionListener)===null||I===void 0||I.dispose(),this._selectionListener=this._editor.onDidChangeCursorPosition(()=>{var k;this._ignoreSelection||((k=this._selectionListener)===null||k===void 0||k.dispose(),this._state=void 0)})}})),!!this._state)){this._state=this._state.map(L=>L.mov(_));const y=this._state.map(L=>C.Selection.fromPositions(L.ranges[L.index].getStartPosition(),L.ranges[L.index].getEndPosition()));this._ignoreSelection=!0;try{this._editor.setSelections(y)}finally{this._ignoreSelection=!1}}}})}}i.ID="editor.contrib.smartSelectController";class n extends M.EditorAction{constructor(_,f){super(f);this._forward=_}run(_,f){return Ie(this,void 0,void 0,function*(){let v=i.get(f);v&&(yield v.run(this._forward))})}}class t extends n{constructor(){super(!0,{id:"editor.action.smartSelect.expand",label:p.localize(0,null),alias:"Expand Selection",precondition:void 0,kbOpts:{kbExpr:d.EditorContextKeys.editorTextFocus,primary:1024|512|17,mac:{primary:2048|256|1024|17,secondary:[256|1024|17]},weight:100},menuOpts:{menuId:c.MenuId.MenubarSelectionMenu,group:"1_basic",title:p.localize(1,null),order:2}})}}a.CommandsRegistry.registerCommandAlias("editor.action.smartSelect.grow","editor.action.smartSelect.expand");class l extends n{constructor(){super(!1,{id:"editor.action.smartSelect.shrink",label:p.localize(2,null),alias:"Shrink Selection",precondition:void 0,kbOpts:{kbExpr:d.EditorContextKeys.editorTextFocus,primary:1024|512|15,mac:{primary:2048|256|1024|15,secondary:[256|1024|15]},weight:100},menuOpts:{menuId:c.MenuId.MenubarSelectionMenu,group:"1_basic",title:p.localize(3,null),order:3}})}}M.registerEditorContribution(i.ID,i),M.registerEditorAction(t),M.registerEditorAction(l),g.SelectionRangeRegistry.register("*",new o.WordSelectionRangeProvider);function h(m,_,f,v){return Ie(this,void 0,void 0,function*(){const y=g.SelectionRangeRegistry.all(m);y.length===1&&y.unshift(new s.BracketSelectionRangeProvider);let L=[],I=[];for(const k of y)L.push(Promise.resolve(k.provideSelectionRanges(m,_,v)).then(E=>{if(b.isNonEmptyArray(E)&&E.length===_.length)for(let T=0;T<_.length;T++){I[T]||(I[T]=[]);for(const O of E[T])S.Range.isIRange(O.range)&&S.Range.containsPosition(O.range,_[T])&&I[T].push(S.Range.lift(O.range))}},u.onUnexpectedExternalError));return yield Promise.all(L),I.map(k=>{if(k.length===0)return[];k.sort((A,B)=>w.Position.isBefore(A.getStartPosition(),B.getStartPosition())?1:w.Position.isBefore(B.getStartPosition(),A.getStartPosition())||w.Position.isBefore(A.getEndPosition(),B.getEndPosition())?-1:w.Position.isBefore(B.getEndPosition(),A.getEndPosition())?1:0);let E=[],T;for(const A of k)(!T||S.Range.containsRange(A,T)&&!S.Range.equalsRange(A,T))&&(E.push(A),T=A);if(!f.selectLeadingAndTrailingWhitespace)return E;let O=[E[0]];for(let A=1;A{this._resolveCache=void 0,this._isResolved=!1});this._resolveCache=Promise.resolve(this.provider.resolveCompletionItem(this.completion,T)).then(A=>{Object.assign(this.completion,A),this._isResolved=!0,O.dispose()},A=>{b.isPromiseCanceledError(A)&&(this._resolveCache=void 0,this._isResolved=!1)})}return this._resolveCache})}}e.CompletionItem=i;class n{constructor(T=2,O=new Set,A=new Set){this.snippetSortOrder=T,this.kindFilter=O,this.providerFilter=A}}e.CompletionOptions=n,n.default=new n;let t;function l(){return t}e.getSnippetSuggestSupport=l;class h{constructor(T,O,A,B){this.items=T,this.needsClipboard=O,this.durations=A,this.disposable=B}}e.CompletionItemModel=h;function m(E,T,O=n.default,A={triggerKind:0},B=S.CancellationToken.None){return Ie(this,void 0,void 0,function*(){const F=new o.StopWatch(!0);T=T.clone();const D=E.getWordAtPosition(T),R=D?new C.Range(T.lineNumber,D.startColumn,T.lineNumber,D.endColumn):C.Range.fromPositions(T),W={replace:R,insert:R.setEndPosition(T.lineNumber,T.column)},x=[],K=new g.DisposableStore,Y=[];let ee=!1;const se=(le,X,z)=>{var P,V;if(!!X){for(let U of X.suggestions)O.kindFilter.has(U.kind)||(U.range||(U.range=W),U.sortText||(U.sortText=typeof U.label=="string"?U.label:U.label.name),!ee&&U.insertTextRules&&U.insertTextRules&4&&(ee=c.SnippetParser.guessNeedsClipboard(U.insertText)),x.push(new i(T,U,X,le)));g.isDisposable(X)&&K.add(X),Y.push({providerName:(P=le._debugDisplayName)!==null&&P!==void 0?P:"unkown_provider",elapsedProvider:(V=X.duration)!==null&&V!==void 0?V:-1,elapsedOverall:z.elapsed()})}},ne=(()=>Ie(this,void 0,void 0,function*(){if(!(!t||O.kindFilter.has(27))&&!(O.providerFilter.size>0&&!O.providerFilter.has(t))){const le=new o.StopWatch(!0),X=yield t.provideCompletionItems(E,T,A,B);se(t,X,le)}}))();for(let le of N.CompletionProviderRegistry.orderedGroups(E)){let X=x.length;if(yield Promise.all(le.map(z=>Ie(this,void 0,void 0,function*(){if(!(O.providerFilter.size>0&&!O.providerFilter.has(z)))try{const P=new o.StopWatch(!0),V=yield z.provideCompletionItems(E,T,A,B);se(z,V,P)}catch(P){b.onUnexpectedExternalError(P)}}))),X!==x.length||B.isCancellationRequested)break}return yield ne,B.isCancellationRequested?(K.dispose(),Promise.reject(b.canceled())):new h(x.sort(L(O.snippetSortOrder)),ee,{entries:Y,elapsed:F.elapsed()},K)})}e.provideSuggestionItems=m;function _(E,T){if(E.sortTextLow&&T.sortTextLow){if(E.sortTextLowT.sortTextLow)return 1}return E.completion.labelT.completion.label?1:E.completion.kind-T.completion.kind}function f(E,T){if(E.completion.kind!==T.completion.kind){if(E.completion.kind===27)return-1;if(T.completion.kind===27)return 1}return _(E,T)}function v(E,T){if(E.completion.kind!==T.completion.kind){if(E.completion.kind===27)return 1;if(T.completion.kind===27)return-1}return _(E,T)}const y=new Map;y.set(0,f),y.set(2,v),y.set(1,_);function L(E){return y.get(E)}e.getSuggestionComparator=L,s.CommandsRegistry.registerCommand("_executeCompletionItemProvider",(E,...T)=>Ie(void 0,void 0,void 0,function*(){const[O,A,B,F]=T;a.assertType(u.URI.isUri(O)),a.assertType(M.Position.isIPosition(A)),a.assertType(typeof B=="string"||!B),a.assertType(typeof F=="number"||!F);const D=yield E.get(r.ITextModelService).createModelReference(O);try{const R={incomplete:!1,suggestions:[]},W=[],x=yield m(D.object.textEditorModel,M.Position.lift(A),void 0,{triggerCharacter:B,triggerKind:B?1:0});for(const K of x.items)W.length<(F!=null?F:0)&&W.push(K.resolve(S.CancellationToken.None)),R.incomplete=R.incomplete||K.container.incomplete,R.suggestions.push(K.completion);try{return yield Promise.all(W),R}finally{setTimeout(()=>x.disposable.dispose(),100)}}finally{D.dispose()}}));const I=new class{constructor(){this.onlyOnceSuggestions=[]}provideCompletionItems(){let T={suggestions:this.onlyOnceSuggestions.slice(0)};return this.onlyOnceSuggestions.length=0,T}};N.CompletionProviderRegistry.register("*",I);function k(E,T){setTimeout(()=>{I.onlyOnceSuggestions.push(...T),E.getContribution("editor.contrib.suggestController").triggerSuggest(new Set().add(I))},0)}e.showSimpleSuggestions=k}),define(Q[264],J([0,1,513,47,13,186]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ToggleTabFocusModeAction=void 0;class S extends M.EditorAction{constructor(){super({id:S.ID,label:b.localize(0,null),alias:"Toggle Tab Key Moves Focus",precondition:void 0,kbOpts:{kbExpr:null,primary:2048|43,mac:{primary:256|1024|43},weight:100}})}run(d,g){const c=!w.TabFocus.getTabFocusMode();w.TabFocus.setTabFocusMode(c),c?N.alert(b.localize(1,null)):N.alert(b.localize(2,null))}}e.ToggleTabFocusModeAction=S,S.ID="editor.action.toggleTabFocusMode",M.registerEditorAction(S)}),define(Q[638],J([0,1,514,13,81]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0});class w extends N.EditorAction{constructor(){super({id:"editor.action.forceRetokenize",label:b.localize(0,null),alias:"Developer: Force Retokenize",precondition:void 0})}run(C,d){if(!!d.hasModel()){const g=d.getModel();g.resetTokenization();const p=new M.StopWatch(!0);g.forceTokenization(g.getLineCount()),p.stop(),console.log(`tokenization took ${p.elapsed()}`)}}}N.registerEditorAction(w)}),define(Q[639],J([0,1,515,2,13,28,184]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const C="ignoreUnusualLineTerminators";function d(c,o,s){c.setModelProperty(o.uri,C,s)}function g(c,o){return c.getModelProperty(o.uri,C)}let p=class extends N.Disposable{constructor(o,s,a){super();this._editor=o,this._dialogService=s,this._codeEditorService=a,this._config=this._editor.getOption(108),this._register(this._editor.onDidChangeConfiguration(u=>{u.hasChanged(108)&&(this._config=this._editor.getOption(108),this._checkForUnusualLineTerminators())})),this._register(this._editor.onDidChangeModel(()=>{this._checkForUnusualLineTerminators()})),this._register(this._editor.onDidChangeModelContent(u=>{u.isUndoing||this._checkForUnusualLineTerminators()}))}_checkForUnusualLineTerminators(){return Ie(this,void 0,void 0,function*(){if(this._config!=="off"&&!!this._editor.hasModel()){const o=this._editor.getModel();if(!!o.mightContainUnusualLineTerminators()&&g(this._codeEditorService,o)!==!0&&!this._editor.getOption(75)){if(this._config==="auto"){o.removeUnusualLineTerminators(this._editor.getSelections());return}if(!(yield this._dialogService.confirm({title:b.localize(0,null),message:b.localize(1,null),detail:b.localize(2,null),primaryButton:b.localize(3,null),secondaryButton:b.localize(4,null)})).confirmed){d(this._codeEditorService,o,!0);return}o.removeUnusualLineTerminators(this._editor.getSelections())}}})}};p.ID="editor.contrib.unusualLineTerminatorsDetector",p=Me([_e(1,S.IDialogService),_e(2,w.ICodeEditorService)],p),M.registerEditorContribution(p.ID,p)}),define(Q[640],J([0,1,516,19,15,23,12,2,13,3,25,53,31,18,16,22,11,47]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getOccurrencesAtPosition=void 0;const n=u.registerColor("editor.wordHighlightBackground",{dark:"#575757B8",light:"#57575740",hc:null},b.localize(0,null),!0),t=u.registerColor("editor.wordHighlightStrongBackground",{dark:"#004972B8",light:"#0e639c40",hc:null},b.localize(1,null),!0),l=u.registerColor("editor.wordHighlightBorder",{light:null,dark:null,hc:u.activeContrastBorder},b.localize(2,null)),h=u.registerColor("editor.wordHighlightStrongBorder",{light:null,dark:null,hc:u.activeContrastBorder},b.localize(3,null)),m=u.registerColor("editorOverviewRuler.wordHighlightForeground",{dark:"#A0A0A0CC",light:"#A0A0A0CC",hc:"#A0A0A0CC"},b.localize(4,null),!0),_=u.registerColor("editorOverviewRuler.wordHighlightStrongForeground",{dark:"#C0A0C0CC",light:"#C0A0C0CC",hc:"#C0A0C0CC"},b.localize(5,null),!0),f=new a.RawContextKey("hasWordHighlights",!1);function v(D,R,W){const x=s.DocumentHighlightProviderRegistry.ordered(D);return M.first(x.map(K=>()=>Promise.resolve(K.provideDocumentHighlights(D,R,W)).then(void 0,S.onUnexpectedExternalError)),N.isNonEmptyArray)}e.getOccurrencesAtPosition=v;class y{constructor(R,W,x){this._wordRange=this._getCurrentWordRange(R,W),this.result=M.createCancelablePromise(K=>this._compute(R,W,x,K))}_getCurrentWordRange(R,W){const x=R.getWordAtPosition(W.getPosition());return x?new g.Range(W.startLineNumber,x.startColumn,W.startLineNumber,x.endColumn):null}isValid(R,W,x){const K=W.startLineNumber,Y=W.startColumn,ee=W.endColumn,se=this._getCurrentWordRange(R,W);let ne=Boolean(this._wordRange&&this._wordRange.equalsRange(se));for(let le=0,X=x.length;!ne&&le=ee&&(ne=!0)}return ne}cancel(){this.result.cancel()}}class L extends y{_compute(R,W,x,K){return v(R,W.getPosition(),K).then(Y=>Y||[])}}class I extends y{constructor(R,W,x){super(R,W,x);this._selectionIsEmpty=W.isEmpty()}_compute(R,W,x,K){return M.timeout(250,K).then(()=>{if(!W.isEmpty())return[];const Y=R.getWordAtPosition(W.getPosition());return!Y||Y.word.length>1e3?[]:R.findMatches(Y.word,!0,!1,!0,x,!1).map(se=>({range:se.range,kind:s.DocumentHighlightKind.Text}))})}isValid(R,W,x){const K=W.isEmpty();return this._selectionIsEmpty!==K?!1:super.isValid(R,W,x)}}function k(D,R,W){return s.DocumentHighlightProviderRegistry.has(D)?new L(D,R,W):new I(D,R,W)}d.registerModelAndPositionCommand("_executeDocumentHighlights",(D,R)=>v(D,R,w.CancellationToken.None));class E{constructor(R,W){this.toUnhook=new C.DisposableStore,this.workerRequestTokenId=0,this.workerRequestCompleted=!1,this.workerRequestValue=[],this.lastCursorPositionChangeTime=0,this.renderDecorationsTimer=-1,this.editor=R,this._hasWordHighlights=f.bindTo(W),this._ignorePositionChangeEvent=!1,this.occurrencesHighlight=this.editor.getOption(66),this.model=this.editor.getModel(),this.toUnhook.add(R.onDidChangeCursorPosition(x=>{this._ignorePositionChangeEvent||!this.occurrencesHighlight||this._onPositionChanged(x)})),this.toUnhook.add(R.onDidChangeModelContent(x=>{this._stopAll()})),this.toUnhook.add(R.onDidChangeConfiguration(x=>{let K=this.editor.getOption(66);this.occurrencesHighlight!==K&&(this.occurrencesHighlight=K,this._stopAll())})),this._decorationIds=[],this.workerRequestTokenId=0,this.workerRequest=null,this.workerRequestCompleted=!1,this.lastCursorPositionChangeTime=0,this.renderDecorationsTimer=-1}hasDecorations(){return this._decorationIds.length>0}restore(){!this.occurrencesHighlight||this._run()}_getSortedHighlights(){return N.coalesce(this._decorationIds.map(R=>this.model.getDecorationRange(R)).sort(g.Range.compareRangesUsingStarts))}moveNext(){let R=this._getSortedHighlights(),x=(R.findIndex(Y=>Y.containsPosition(this.editor.getPosition()))+1)%R.length,K=R[x];try{this._ignorePositionChangeEvent=!0,this.editor.setPosition(K.getStartPosition()),this.editor.revealRangeInCenterIfOutsideViewport(K);const Y=this._getWord();if(Y){const ee=this.editor.getModel().getLineContent(K.startLineNumber);i.alert(`${ee}, ${x+1} of ${R.length} for '${Y.word}'`)}}finally{this._ignorePositionChangeEvent=!1}}moveBack(){let R=this._getSortedHighlights(),x=(R.findIndex(Y=>Y.containsPosition(this.editor.getPosition()))-1+R.length)%R.length,K=R[x];try{this._ignorePositionChangeEvent=!0,this.editor.setPosition(K.getStartPosition()),this.editor.revealRangeInCenterIfOutsideViewport(K);const Y=this._getWord();if(Y){const ee=this.editor.getModel().getLineContent(K.startLineNumber);i.alert(`${ee}, ${x+1} of ${R.length} for '${Y.word}'`)}}finally{this._ignorePositionChangeEvent=!1}}_removeDecorations(){this._decorationIds.length>0&&(this._decorationIds=this.editor.deltaDecorations(this._decorationIds,[]),this._hasWordHighlights.set(!1))}_stopAll(){this._removeDecorations(),this.renderDecorationsTimer!==-1&&(clearTimeout(this.renderDecorationsTimer),this.renderDecorationsTimer=-1),this.workerRequest!==null&&(this.workerRequest.cancel(),this.workerRequest=null),this.workerRequestCompleted||(this.workerRequestTokenId++,this.workerRequestCompleted=!0)}_onPositionChanged(R){if(!this.occurrencesHighlight){this._stopAll();return}if(R.reason!==3){this._stopAll();return}this._run()}_getWord(){let R=this.editor.getSelection(),W=R.startLineNumber,x=R.startColumn;return this.model.getWordAtPosition({lineNumber:W,column:x})}_run(){let R=this.editor.getSelection();if(R.startLineNumber!==R.endLineNumber){this._stopAll();return}let W=R.startColumn,x=R.endColumn;const K=this._getWord();if(!K||K.startColumn>W||K.endColumn{ee===this.workerRequestTokenId&&(this.workerRequestCompleted=!0,this.workerRequestValue=se||[],this._beginRenderDecorations())},S.onUnexpectedError)}}_beginRenderDecorations(){let R=new Date().getTime(),W=this.lastCursorPositionChangeTime+250;R>=W?(this.renderDecorationsTimer=-1,this.renderDecorations()):this.renderDecorationsTimer=setTimeout(()=>{this.renderDecorations()},W-R)}renderDecorations(){this.renderDecorationsTimer=-1;let R=[];for(const W of this.workerRequestValue)W.range&&R.push({range:W.range,options:E._getDecorationOptions(W.kind)});this._decorationIds=this.editor.deltaDecorations(this._decorationIds,R),this._hasWordHighlights.set(this.hasDecorations())}static _getDecorationOptions(R){return R===s.DocumentHighlightKind.Write?this._WRITE_OPTIONS:R===s.DocumentHighlightKind.Text?this._TEXT_OPTIONS:this._REGULAR_OPTIONS}dispose(){this._stopAll(),this.toUnhook.dispose()}}E._WRITE_OPTIONS=o.ModelDecorationOptions.register({stickiness:1,className:"wordHighlightStrong",overviewRuler:{color:r.themeColorFromId(_),position:c.OverviewRulerLane.Center}}),E._TEXT_OPTIONS=o.ModelDecorationOptions.register({stickiness:1,className:"selectionHighlight",overviewRuler:{color:r.themeColorFromId(u.overviewRulerSelectionHighlightForeground),position:c.OverviewRulerLane.Center}}),E._REGULAR_OPTIONS=o.ModelDecorationOptions.register({stickiness:1,className:"wordHighlight",overviewRuler:{color:r.themeColorFromId(m),position:c.OverviewRulerLane.Center}});let T=class zt extends C.Disposable{constructor(R,W){super();this.wordHighlighter=null;const x=()=>{R.hasModel()&&(this.wordHighlighter=new E(R,W))};this._register(R.onDidChangeModel(K=>{this.wordHighlighter&&(this.wordHighlighter.dispose(),this.wordHighlighter=null),x()})),x()}static get(R){return R.getContribution(zt.ID)}saveViewState(){return!!(this.wordHighlighter&&this.wordHighlighter.hasDecorations())}moveNext(){this.wordHighlighter&&this.wordHighlighter.moveNext()}moveBack(){this.wordHighlighter&&this.wordHighlighter.moveBack()}restoreViewState(R){this.wordHighlighter&&R&&this.wordHighlighter.restore()}dispose(){this.wordHighlighter&&(this.wordHighlighter.dispose(),this.wordHighlighter=null),super.dispose()}};T.ID="editor.contrib.wordHighlighter",T=Me([_e(1,a.IContextKeyService)],T);class O extends d.EditorAction{constructor(R,W){super(W);this._isNext=R}run(R,W){const x=T.get(W);!x||(this._isNext?x.moveNext():x.moveBack())}}class A extends O{constructor(){super(!0,{id:"editor.action.wordHighlight.next",label:b.localize(6,null),alias:"Go to Next Symbol Highlight",precondition:f,kbOpts:{kbExpr:p.EditorContextKeys.editorTextFocus,primary:65,weight:100}})}}class B extends O{constructor(){super(!1,{id:"editor.action.wordHighlight.prev",label:b.localize(7,null),alias:"Go to Previous Symbol Highlight",precondition:f,kbOpts:{kbExpr:p.EditorContextKeys.editorTextFocus,primary:1024|65,weight:100}})}}class F extends d.EditorAction{constructor(){super({id:"editor.action.wordHighlight.trigger",label:b.localize(8,null),alias:"Trigger Symbol Highlight",precondition:f.toNegated(),kbOpts:{kbExpr:p.EditorContextKeys.editorTextFocus,primary:0,weight:100}})}run(R,W,x){const K=T.get(W);!K||K.restoreViewState(!0)}}d.registerEditorContribution(T.ID,T),d.registerEditorAction(A),d.registerEditorAction(B),d.registerEditorAction(F),r.registerThemingParticipant((D,R)=>{const W=D.getColor(u.editorSelectionHighlight);W&&(R.addRule(`.monaco-editor .focused .selectionHighlight { background-color: ${W}; }`),R.addRule(`.monaco-editor .selectionHighlight { background-color: ${W.transparent(.5)}; }`));const x=D.getColor(n);x&&R.addRule(`.monaco-editor .wordHighlight { background-color: ${x}; }`);const K=D.getColor(t);K&&R.addRule(`.monaco-editor .wordHighlightStrong { background-color: ${K}; }`);const Y=D.getColor(u.editorSelectionHighlightBorder);Y&&R.addRule(`.monaco-editor .selectionHighlight { border: 1px ${D.type==="hc"?"dotted":"solid"} ${Y}; box-sizing: border-box; }`);const ee=D.getColor(l);ee&&R.addRule(`.monaco-editor .wordHighlight { border: 1px ${D.type==="hc"?"dashed":"solid"} ${ee}; box-sizing: border-box; }`);const se=D.getColor(h);se&&R.addRule(`.monaco-editor .wordHighlightStrong { border: 1px ${D.type==="hc"?"dashed":"solid"} ${se}; box-sizing: border-box; }`)})}),define(Q[265],J([0,1,517,13,92,42,136,106,14,3,21,25,65,16,38,41,250]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DeleteInsideWord=e.DeleteWordRight=e.DeleteWordEndRight=e.DeleteWordStartRight=e.DeleteWordLeft=e.DeleteWordEndLeft=e.DeleteWordStartLeft=e.DeleteWordRightCommand=e.DeleteWordLeftCommand=e.DeleteWordCommand=e.CursorWordAccessibilityRightSelect=e.CursorWordAccessibilityRight=e.CursorWordRightSelect=e.CursorWordEndRightSelect=e.CursorWordStartRightSelect=e.CursorWordRight=e.CursorWordEndRight=e.CursorWordStartRight=e.CursorWordAccessibilityLeftSelect=e.CursorWordAccessibilityLeft=e.CursorWordLeftSelect=e.CursorWordEndLeftSelect=e.CursorWordStartLeftSelect=e.CursorWordLeft=e.CursorWordEndLeft=e.CursorWordStartLeft=e.WordRightCommand=e.WordLeftCommand=e.MoveWordCommand=void 0;class i extends N.EditorCommand{constructor(z){super(z);this._inSelectionMode=z.inSelectionMode,this._wordNavigationType=z.wordNavigationType}runEditorCommand(z,P,V){if(!!P.hasModel()){const U=C.getMapForWordSeparators(P.getOption(110)),H=P.getModel(),ie=P.getSelections().map(oe=>{const ae=new d.Position(oe.positionLineNumber,oe.positionColumn),G=this._move(U,H,ae,this._wordNavigationType);return this._moveTo(oe,G,this._inSelectionMode)});if(H.pushStackElement(),P._getViewModel().setCursorStates("moveWordCommand",3,ie.map(oe=>w.CursorState.fromModelSelection(oe))),ie.length===1){const oe=new d.Position(ie[0].positionLineNumber,ie[0].positionColumn);P.revealPosition(oe,0)}}}_moveTo(z,P,V){return V?new p.Selection(z.selectionStartLineNumber,z.selectionStartColumn,P.lineNumber,P.column):new p.Selection(P.lineNumber,P.column,P.lineNumber,P.column)}}e.MoveWordCommand=i;class n extends i{_move(z,P,V,U){return S.WordOperations.moveWordLeft(z,P,V,U)}}e.WordLeftCommand=n;class t extends i{_move(z,P,V,U){return S.WordOperations.moveWordRight(z,P,V,U)}}e.WordRightCommand=t;class l extends n{constructor(){super({inSelectionMode:!1,wordNavigationType:0,id:"cursorWordStartLeft",precondition:void 0})}}e.CursorWordStartLeft=l;class h extends n{constructor(){super({inSelectionMode:!1,wordNavigationType:2,id:"cursorWordEndLeft",precondition:void 0})}}e.CursorWordEndLeft=h;class m extends n{constructor(){var z;super({inSelectionMode:!1,wordNavigationType:1,id:"cursorWordLeft",precondition:void 0,kbOpts:{kbExpr:s.ContextKeyExpr.and(c.EditorContextKeys.textInputFocus,(z=s.ContextKeyExpr.and(o.CONTEXT_ACCESSIBILITY_MODE_ENABLED,r.IsWindowsContext))===null||z===void 0?void 0:z.negate()),primary:2048|15,mac:{primary:512|15},weight:100}})}}e.CursorWordLeft=m;class _ extends n{constructor(){super({inSelectionMode:!0,wordNavigationType:0,id:"cursorWordStartLeftSelect",precondition:void 0})}}e.CursorWordStartLeftSelect=_;class f extends n{constructor(){super({inSelectionMode:!0,wordNavigationType:2,id:"cursorWordEndLeftSelect",precondition:void 0})}}e.CursorWordEndLeftSelect=f;class v extends n{constructor(){var z;super({inSelectionMode:!0,wordNavigationType:1,id:"cursorWordLeftSelect",precondition:void 0,kbOpts:{kbExpr:s.ContextKeyExpr.and(c.EditorContextKeys.textInputFocus,(z=s.ContextKeyExpr.and(o.CONTEXT_ACCESSIBILITY_MODE_ENABLED,r.IsWindowsContext))===null||z===void 0?void 0:z.negate()),primary:2048|1024|15,mac:{primary:512|1024|15},weight:100}})}}e.CursorWordLeftSelect=v;class y extends n{constructor(){super({inSelectionMode:!1,wordNavigationType:3,id:"cursorWordAccessibilityLeft",precondition:void 0})}_move(z,P,V,U){return super._move(C.getMapForWordSeparators(a.EditorOptions.wordSeparators.defaultValue),P,V,U)}}e.CursorWordAccessibilityLeft=y;class L extends n{constructor(){super({inSelectionMode:!0,wordNavigationType:3,id:"cursorWordAccessibilityLeftSelect",precondition:void 0})}_move(z,P,V,U){return super._move(C.getMapForWordSeparators(a.EditorOptions.wordSeparators.defaultValue),P,V,U)}}e.CursorWordAccessibilityLeftSelect=L;class I extends t{constructor(){super({inSelectionMode:!1,wordNavigationType:0,id:"cursorWordStartRight",precondition:void 0})}}e.CursorWordStartRight=I;class k extends t{constructor(){var z;super({inSelectionMode:!1,wordNavigationType:2,id:"cursorWordEndRight",precondition:void 0,kbOpts:{kbExpr:s.ContextKeyExpr.and(c.EditorContextKeys.textInputFocus,(z=s.ContextKeyExpr.and(o.CONTEXT_ACCESSIBILITY_MODE_ENABLED,r.IsWindowsContext))===null||z===void 0?void 0:z.negate()),primary:2048|17,mac:{primary:512|17},weight:100}})}}e.CursorWordEndRight=k;class E extends t{constructor(){super({inSelectionMode:!1,wordNavigationType:2,id:"cursorWordRight",precondition:void 0})}}e.CursorWordRight=E;class T extends t{constructor(){super({inSelectionMode:!0,wordNavigationType:0,id:"cursorWordStartRightSelect",precondition:void 0})}}e.CursorWordStartRightSelect=T;class O extends t{constructor(){var z;super({inSelectionMode:!0,wordNavigationType:2,id:"cursorWordEndRightSelect",precondition:void 0,kbOpts:{kbExpr:s.ContextKeyExpr.and(c.EditorContextKeys.textInputFocus,(z=s.ContextKeyExpr.and(o.CONTEXT_ACCESSIBILITY_MODE_ENABLED,r.IsWindowsContext))===null||z===void 0?void 0:z.negate()),primary:2048|1024|17,mac:{primary:512|1024|17},weight:100}})}}e.CursorWordEndRightSelect=O;class A extends t{constructor(){super({inSelectionMode:!0,wordNavigationType:2,id:"cursorWordRightSelect",precondition:void 0})}}e.CursorWordRightSelect=A;class B extends t{constructor(){super({inSelectionMode:!1,wordNavigationType:3,id:"cursorWordAccessibilityRight",precondition:void 0})}_move(z,P,V,U){return super._move(C.getMapForWordSeparators(a.EditorOptions.wordSeparators.defaultValue),P,V,U)}}e.CursorWordAccessibilityRight=B;class F extends t{constructor(){super({inSelectionMode:!0,wordNavigationType:3,id:"cursorWordAccessibilityRightSelect",precondition:void 0})}_move(z,P,V,U){return super._move(C.getMapForWordSeparators(a.EditorOptions.wordSeparators.defaultValue),P,V,U)}}e.CursorWordAccessibilityRightSelect=F;class D extends N.EditorCommand{constructor(z){super(z);this._whitespaceHeuristics=z.whitespaceHeuristics,this._wordNavigationType=z.wordNavigationType}runEditorCommand(z,P,V){if(!!P.hasModel()){const U=C.getMapForWordSeparators(P.getOption(110)),H=P.getModel(),$=P.getSelections(),ie=P.getOption(5),oe=P.getOption(7),ae=u.LanguageConfigurationRegistry.getAutoClosingPairs(H.getLanguageIdentifier().id),G=$.map(j=>{const te=this._delete({wordSeparators:U,model:H,selection:j,whitespaceHeuristics:this._whitespaceHeuristics,autoClosingBrackets:ie,autoClosingQuotes:oe,autoClosingPairs:ae},this._wordNavigationType);return new M.ReplaceCommand(te,"")});P.pushUndoStop(),P.executeCommands(this.id,G),P.pushUndoStop()}}}e.DeleteWordCommand=D;class R extends D{_delete(z,P){let V=S.WordOperations.deleteWordLeft(z,P);return V||new g.Range(1,1,1,1)}}e.DeleteWordLeftCommand=R;class W extends D{_delete(z,P){let V=S.WordOperations.deleteWordRight(z,P);if(V)return V;const U=z.model.getLineCount(),H=z.model.getLineMaxColumn(U);return new g.Range(U,H,U,H)}}e.DeleteWordRightCommand=W;class x extends R{constructor(){super({whitespaceHeuristics:!1,wordNavigationType:0,id:"deleteWordStartLeft",precondition:c.EditorContextKeys.writable})}}e.DeleteWordStartLeft=x;class K extends R{constructor(){super({whitespaceHeuristics:!1,wordNavigationType:2,id:"deleteWordEndLeft",precondition:c.EditorContextKeys.writable})}}e.DeleteWordEndLeft=K;class Y extends R{constructor(){super({whitespaceHeuristics:!0,wordNavigationType:0,id:"deleteWordLeft",precondition:c.EditorContextKeys.writable,kbOpts:{kbExpr:c.EditorContextKeys.textInputFocus,primary:2048|1,mac:{primary:512|1},weight:100}})}}e.DeleteWordLeft=Y;class ee extends W{constructor(){super({whitespaceHeuristics:!1,wordNavigationType:0,id:"deleteWordStartRight",precondition:c.EditorContextKeys.writable})}}e.DeleteWordStartRight=ee;class se extends W{constructor(){super({whitespaceHeuristics:!1,wordNavigationType:2,id:"deleteWordEndRight",precondition:c.EditorContextKeys.writable})}}e.DeleteWordEndRight=se;class ne extends W{constructor(){super({whitespaceHeuristics:!0,wordNavigationType:2,id:"deleteWordRight",precondition:c.EditorContextKeys.writable,kbOpts:{kbExpr:c.EditorContextKeys.textInputFocus,primary:2048|20,mac:{primary:512|20},weight:100}})}}e.DeleteWordRight=ne;class le extends N.EditorAction{constructor(){super({id:"deleteInsideWord",precondition:c.EditorContextKeys.writable,label:b.localize(0,null),alias:"Delete Word"})}run(z,P,V){if(!!P.hasModel()){const U=C.getMapForWordSeparators(P.getOption(110)),H=P.getModel(),ie=P.getSelections().map(oe=>{const ae=S.WordOperations.deleteInsideWord(U,H,oe);return new M.ReplaceCommand(ae,"")});P.pushUndoStop(),P.executeCommands(this.id,ie),P.pushUndoStop()}}}e.DeleteInsideWord=le,N.registerEditorCommand(new l),N.registerEditorCommand(new h),N.registerEditorCommand(new m),N.registerEditorCommand(new _),N.registerEditorCommand(new f),N.registerEditorCommand(new v),N.registerEditorCommand(new I),N.registerEditorCommand(new k),N.registerEditorCommand(new E),N.registerEditorCommand(new T),N.registerEditorCommand(new O),N.registerEditorCommand(new A),N.registerEditorCommand(new y),N.registerEditorCommand(new L),N.registerEditorCommand(new B),N.registerEditorCommand(new F),N.registerEditorCommand(new x),N.registerEditorCommand(new K),N.registerEditorCommand(new Y),N.registerEditorCommand(new ee),N.registerEditorCommand(new se),N.registerEditorCommand(new ne),N.registerEditorAction(le)}),define(Q[641],J([0,1,13,136,3,25,265,26]),function(q,e,b,N,M,w,S,C){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CursorWordPartRightSelect=e.CursorWordPartRight=e.WordPartRightCommand=e.CursorWordPartLeftSelect=e.CursorWordPartLeft=e.WordPartLeftCommand=e.DeleteWordPartRight=e.DeleteWordPartLeft=void 0;class d extends S.DeleteWordCommand{constructor(){super({whitespaceHeuristics:!0,wordNavigationType:0,id:"deleteWordPartLeft",precondition:w.EditorContextKeys.writable,kbOpts:{kbExpr:w.EditorContextKeys.textInputFocus,primary:0,mac:{primary:256|512|1},weight:100}})}_delete(i,n){let t=N.WordPartOperations.deleteWordPartLeft(i);return t||new M.Range(1,1,1,1)}}e.DeleteWordPartLeft=d;class g extends S.DeleteWordCommand{constructor(){super({whitespaceHeuristics:!0,wordNavigationType:2,id:"deleteWordPartRight",precondition:w.EditorContextKeys.writable,kbOpts:{kbExpr:w.EditorContextKeys.textInputFocus,primary:0,mac:{primary:256|512|20},weight:100}})}_delete(i,n){let t=N.WordPartOperations.deleteWordPartRight(i);if(t)return t;const l=i.model.getLineCount(),h=i.model.getLineMaxColumn(l);return new M.Range(l,h,l,h)}}e.DeleteWordPartRight=g;class p extends S.MoveWordCommand{_move(i,n,t,l){return N.WordPartOperations.moveWordPartLeft(i,n,t)}}e.WordPartLeftCommand=p;class c extends p{constructor(){super({inSelectionMode:!1,wordNavigationType:0,id:"cursorWordPartLeft",precondition:void 0,kbOpts:{kbExpr:w.EditorContextKeys.textInputFocus,primary:0,mac:{primary:256|512|15},weight:100}})}}e.CursorWordPartLeft=c,C.CommandsRegistry.registerCommandAlias("cursorWordPartStartLeft","cursorWordPartLeft");class o extends p{constructor(){super({inSelectionMode:!0,wordNavigationType:0,id:"cursorWordPartLeftSelect",precondition:void 0,kbOpts:{kbExpr:w.EditorContextKeys.textInputFocus,primary:0,mac:{primary:256|512|1024|15},weight:100}})}}e.CursorWordPartLeftSelect=o,C.CommandsRegistry.registerCommandAlias("cursorWordPartStartLeftSelect","cursorWordPartLeftSelect");class s extends S.MoveWordCommand{_move(i,n,t,l){return N.WordPartOperations.moveWordPartRight(i,n,t)}}e.WordPartRightCommand=s;class a extends s{constructor(){super({inSelectionMode:!1,wordNavigationType:2,id:"cursorWordPartRight",precondition:void 0,kbOpts:{kbExpr:w.EditorContextKeys.textInputFocus,primary:0,mac:{primary:256|512|17},weight:100}})}}e.CursorWordPartRight=a;class u extends s{constructor(){super({inSelectionMode:!0,wordNavigationType:2,id:"cursorWordPartRightSelect",precondition:void 0,kbOpts:{kbExpr:w.EditorContextKeys.textInputFocus,primary:0,mac:{primary:256|512|1024|17},weight:100}})}}e.CursorWordPartRightSelect=u,b.registerEditorCommand(new d),b.registerEditorCommand(new g),b.registerEditorCommand(new c),b.registerEditorCommand(new o),b.registerEditorCommand(new a),b.registerEditorCommand(new u)}),define(Q[642],J([0,1,7,30,156,47,52,2,17,8,24,13,25,264,16,9,37,58,22,11,64,354]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const h=new a.RawContextKey("accessibilityHelpWidgetVisible",!1);let m=class Ht extends C.Disposable{constructor(I,k){super();this._editor=I,this._widget=this._register(k.createInstance(f,this._editor))}static get(I){return I.getContribution(Ht.ID)}show(){this._widget.show()}hide(){this._widget.hide()}};m.ID="editor.contrib.accessibilityHelpController",m=Me([_e(1,u.IInstantiationService)],m);function _(L,I){return!L||L.length===0?l.AccessibilityHelpNLS.noSelection:L.length===1?I?g.format(l.AccessibilityHelpNLS.singleSelectionRange,L[0].positionLineNumber,L[0].positionColumn,I):g.format(l.AccessibilityHelpNLS.singleSelection,L[0].positionLineNumber,L[0].positionColumn):I?g.format(l.AccessibilityHelpNLS.multiSelectionRange,L.length,I):L.length>0?g.format(l.AccessibilityHelpNLS.multiSelection,L.length):""}let f=class ht extends S.Widget{constructor(I,k,E,T){super();this._contextKeyService=k,this._keybindingService=E,this._openerService=T,this._editor=I,this._isVisibleKey=h.bindTo(this._contextKeyService),this._domNode=N.createFastDomNode(document.createElement("div")),this._domNode.setClassName("accessibilityHelpWidget"),this._domNode.setDisplay("none"),this._domNode.setAttribute("role","dialog"),this._domNode.setAttribute("aria-hidden","true"),this._contentDomNode=N.createFastDomNode(document.createElement("div")),this._contentDomNode.setAttribute("role","document"),this._domNode.appendChild(this._contentDomNode),this._isVisible=!1,this._register(this._editor.onDidLayoutChange(()=>{this._isVisible&&this._layout()})),this._register(b.addStandardDisposableListener(this._contentDomNode.domNode,"keydown",O=>{if(!!this._isVisible&&(O.equals(2048|35)&&(w.alert(l.AccessibilityHelpNLS.emergencyConfOn),this._editor.updateOptions({accessibilitySupport:"on"}),b.clearNode(this._contentDomNode.domNode),this._buildContent(),this._contentDomNode.domNode.focus(),O.preventDefault(),O.stopPropagation()),O.equals(2048|38))){w.alert(l.AccessibilityHelpNLS.openingDocs);let A=this._editor.getRawOptions().accessibilityHelpUrl;typeof A=="undefined"&&(A="https://go.microsoft.com/fwlink/?linkid=852450"),this._openerService.open(p.URI.parse(A)),O.preventDefault(),O.stopPropagation()}})),this.onblur(this._contentDomNode.domNode,()=>{this.hide()}),this._editor.addOverlayWidget(this)}dispose(){this._editor.removeOverlayWidget(this),super.dispose()}getId(){return ht.ID}getDomNode(){return this._domNode.domNode}getPosition(){return{preference:null}}show(){this._isVisible||(this._isVisible=!0,this._isVisibleKey.set(!0),this._layout(),this._domNode.setDisplay("block"),this._domNode.setAttribute("aria-hidden","false"),this._contentDomNode.domNode.tabIndex=0,this._buildContent(),this._contentDomNode.domNode.focus())}_descriptionForCommand(I,k,E){let T=this._keybindingService.lookupKeybinding(I);return T?g.format(k,T.getAriaLabel()):g.format(E,I)}_buildContent(){const I=this._editor.getOptions(),k=this._editor.getSelections();let E=0;if(k){const B=this._editor.getModel();B&&k.forEach(F=>{E+=B.getValueLengthInRange(F)})}let T=_(k,E);I.get(49)?I.get(75)?T+=l.AccessibilityHelpNLS.readonlyDiffEditor:T+=l.AccessibilityHelpNLS.editableDiffEditor:I.get(75)?T+=l.AccessibilityHelpNLS.readonlyEditor:T+=l.AccessibilityHelpNLS.editableEditor;const O=d.isMacintosh?l.AccessibilityHelpNLS.changeConfigToOnMac:l.AccessibilityHelpNLS.changeConfigToOnWinLinux;switch(I.get(2)){case 0:T+=` + + - `+O;break;case 2:T+=` + + - `+l.AccessibilityHelpNLS.auto_on;break;case 1:T+=` + + - `+l.AccessibilityHelpNLS.auto_off,T+=" "+O;break}I.get(123)?T+=` + + - `+this._descriptionForCommand(s.ToggleTabFocusModeAction.ID,l.AccessibilityHelpNLS.tabFocusModeOnMsg,l.AccessibilityHelpNLS.tabFocusModeOnMsgNoKb):T+=` + + - `+this._descriptionForCommand(s.ToggleTabFocusModeAction.ID,l.AccessibilityHelpNLS.tabFocusModeOffMsg,l.AccessibilityHelpNLS.tabFocusModeOffMsgNoKb);const A=d.isMacintosh?l.AccessibilityHelpNLS.openDocMac:l.AccessibilityHelpNLS.openDocWinLinux;T+=` + + - `+A,T+=` + +`+l.AccessibilityHelpNLS.outroMsg,this._contentDomNode.domNode.appendChild(M.renderFormattedText(T)),this._contentDomNode.domNode.setAttribute("aria-label",T)}hide(){!this._isVisible||(this._isVisible=!1,this._isVisibleKey.reset(),this._domNode.setDisplay("none"),this._domNode.setAttribute("aria-hidden","true"),this._contentDomNode.domNode.tabIndex=-1,b.clearNode(this._contentDomNode.domNode),this._editor.focus())}_layout(){let I=this._editor.getLayoutInfo(),k=Math.max(5,Math.min(ht.WIDTH,I.width-40)),E=Math.max(5,Math.min(ht.HEIGHT,I.height-40));this._domNode.setWidth(k),this._domNode.setHeight(E);let T=Math.round((I.height-E)/2);this._domNode.setTop(T);let O=Math.round((I.width-k)/2);this._domNode.setLeft(O)}};f.ID="editor.contrib.accessibilityHelpWidget",f.WIDTH=500,f.HEIGHT=300,f=Me([_e(1,a.IContextKeyService),_e(2,r.IKeybindingService),_e(3,i.IOpenerService)],f);class v extends c.EditorAction{constructor(){super({id:"editor.action.showAccessibilityHelp",label:l.AccessibilityHelpNLS.showAccessibilityHelpAction,alias:"Show Accessibility Help",precondition:void 0,kbOpts:{primary:512|59,weight:100,linux:{primary:512|1024|59,secondary:[512|59]}}})}run(I,k){let E=m.get(k);E&&E.show()}}c.registerEditorContribution(m.ID,m),c.registerEditorAction(v);const y=c.EditorCommand.bindToContribution(m.get);c.registerEditorCommand(new y({id:"closeAccessibilityHelp",precondition:h,handler:L=>L.hide(),kbOpts:{weight:100+100,kbExpr:o.EditorContextKeys.focus,primary:9,secondary:[1024|9]}})),t.registerThemingParticipant((L,I)=>{const k=L.getColor(n.editorWidgetBackground);k&&I.addRule(`.monaco-editor .accessibilityHelpWidget { background-color: ${k}; }`);const E=L.getColor(n.editorWidgetForeground);E&&I.addRule(`.monaco-editor .accessibilityHelpWidget { color: ${E}; }`);const T=L.getColor(n.widgetShadow);T&&I.addRule(`.monaco-editor .accessibilityHelpWidget { box-shadow: 0 2px 8px ${T}; }`);const O=L.getColor(n.contrastBorder);O&&I.addRule(`.monaco-editor .accessibilityHelpWidget { border: 2px solid ${O}; }`)})}),define(Q[643],J([0,1,35,7,2,13,355]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IPadShowKeyboard=void 0;class S extends M.Disposable{constructor(g){super();this.editor=g,this.widget=null,b.isIPad&&(this._register(g.onDidChangeConfiguration(()=>this.update())),this.update())}update(){const g=!this.editor.getOption(75);!this.widget&&g?this.widget=new C(this.editor):this.widget&&!g&&(this.widget.dispose(),this.widget=null)}dispose(){super.dispose(),this.widget&&(this.widget.dispose(),this.widget=null)}}e.IPadShowKeyboard=S,S.ID="editor.contrib.iPadShowKeyboard";class C extends M.Disposable{constructor(g){super();this.editor=g,this._domNode=document.createElement("textarea"),this._domNode.className="iPadShowKeyboard",this._register(N.addDisposableListener(this._domNode,"touchstart",p=>{this.editor.focus()})),this._register(N.addDisposableListener(this._domNode,"focus",p=>{this.editor.focus()})),this.editor.addOverlayWidget(this)}dispose(){this.editor.removeOverlayWidget(this),super.dispose()}getId(){return C.ID}getDomNode(){return this._domNode}getPosition(){return{preference:1}}}C.ID="editor.contrib.ShowKeyboardWidget",w.registerEditorContribution(S.ID,S)}),define(Q[644],J([0,1,7,29,2,13,18,76,57,114,22,11,64,97,356]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0});let a=class Ut extends M.Disposable{constructor(l,h,m){super();this._editor=l,this._modeService=m,this._widget=null,this._register(this._editor.onDidChangeModel(_=>this.stop())),this._register(this._editor.onDidChangeModelLanguage(_=>this.stop())),this._register(S.TokenizationRegistry.onDidChange(_=>this.stop())),this._register(this._editor.onKeyUp(_=>_.keyCode===9&&this.stop()))}static get(l){return l.getContribution(Ut.ID)}dispose(){this.stop(),super.dispose()}launch(){this._widget||!this._editor.hasModel()||(this._widget=new n(this._editor,this._modeService))}stop(){this._widget&&(this._widget.dispose(),this._widget=null)}};a.ID="editor.contrib.inspectTokens",a=Me([_e(1,g.IStandaloneThemeService),_e(2,d.IModeService)],a);class u extends w.EditorAction{constructor(){super({id:"editor.action.inspectTokens",label:o.InspectTokensNLS.inspectTokensAction,alias:"Developer: Inspect Tokens",precondition:void 0})}run(l,h){let m=a.get(h);m&&m.launch()}}function r(t){let l="";for(let h=0,m=t.length;hC.NULL_STATE,tokenize:(h,m,_,f)=>C.nullTokenize(t.language,h,_,f),tokenize2:(h,m,_,f)=>C.nullTokenize2(t.id,h,_,f)}}class n extends M.Disposable{constructor(l,h){super();this.allowEditorOverflow=!0,this._editor=l,this._modeService=h,this._model=this._editor.getModel(),this._domNode=document.createElement("div"),this._domNode.className="tokens-inspect-widget",this._tokenizationSupport=i(this._model.getLanguageIdentifier()),this._compute(this._editor.getPosition()),this._register(this._editor.onDidChangeCursorPosition(m=>this._compute(this._editor.getPosition()))),this._editor.addContentWidget(this)}dispose(){this._editor.removeContentWidget(this),super.dispose()}getId(){return n._ID}_compute(l){let h=this._getTokensAtLine(l.lineNumber),m=0;for(let L=h.tokens1.length-1;L>=0;L--){let I=h.tokens1[L];if(l.column-1>=I.offset){m=L;break}}let _=0;for(let L=h.tokens2.length>>>1;L>=0;L--)if(l.column-1>=h.tokens2[L<<1]){_=L;break}let f=this._model.getLineContent(l.lineNumber),v="";if(m{const h=t.getColor(p.editorHoverBorder);if(h){let f=t.type===s.ColorScheme.HIGH_CONTRAST?2:1;l.addRule(`.monaco-editor .tokens-inspect-widget { border: ${f}px solid ${h}; }`),l.addRule(`.monaco-editor .tokens-inspect-widget .tokens-inspect-separator { background-color: ${h}; }`)}const m=t.getColor(p.editorHoverBackground);m&&l.addRule(`.monaco-editor .tokens-inspect-widget { background-color: ${m}; }`);const _=t.getColor(p.editorHoverForeground);_&&l.addRule(`.monaco-editor .tokens-inspect-widget { color: ${_}; }`)})}),define(Q[645],J([0,1,33,96,64,28,578,20,9,37,26,87,32,13,25,78]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.GotoLineAction=e.StandaloneCommandsQuickAccessProvider=void 0;let r=class extends S.AbstractEditorCommandsQuickAccessProvider{constructor(t,l,h,m,_,f){super({showAlias:!1},t,h,m,_,f);this.codeEditorService=l}get activeTextEditorControl(){return C.withNullAsUndefined(this.codeEditorService.getFocusedCodeEditor())}getCommandPicks(){return Ie(this,void 0,void 0,function*(){return this.getCodeEditorCommandPicks()})}};r=Me([_e(0,d.IInstantiationService),_e(1,w.ICodeEditorService),_e(2,g.IKeybindingService),_e(3,p.ICommandService),_e(4,c.ITelemetryService),_e(5,o.INotificationService)],r),e.StandaloneCommandsQuickAccessProvider=r,b.Registry.as(N.Extensions.Quickaccess).registerQuickAccessProvider({ctor:r,prefix:r.PREFIX,helpEntries:[{description:M.QuickCommandNLS.quickCommandHelp,needsEditor:!0}]});class i extends s.EditorAction{constructor(){super({id:"editor.action.quickCommand",label:M.QuickCommandNLS.quickCommandActionLabel,alias:"Command Palette",precondition:void 0,kbOpts:{kbExpr:a.EditorContextKeys.focus,primary:59,weight:100},contextMenuOpts:{group:"z_commands",order:1}})}run(t){t.get(u.IQuickInputService).quickAccess.show(r.PREFIX)}}e.GotoLineAction=i,s.registerEditorAction(i)}),define(Q[646],J([0,1,602,33,96,28,20,64,6,13,25,78]),function(q,e,b,N,M,w,S,C,d,g,p,c){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.GotoLineAction=e.StandaloneGotoLineQuickAccessProvider=void 0;let o=class extends b.AbstractGotoLineQuickAccessProvider{constructor(u){super();this.editorService=u,this.onDidActiveTextEditorControlChange=d.Event.None}get activeTextEditorControl(){return S.withNullAsUndefined(this.editorService.getFocusedCodeEditor())}};o=Me([_e(0,w.ICodeEditorService)],o),e.StandaloneGotoLineQuickAccessProvider=o,N.Registry.as(M.Extensions.Quickaccess).registerQuickAccessProvider({ctor:o,prefix:o.PREFIX,helpEntries:[{description:C.GoToLineNLS.gotoLineActionLabel,needsEditor:!0}]});class s extends g.EditorAction{constructor(){super({id:"editor.action.gotoLine",label:C.GoToLineNLS.gotoLineActionLabel,alias:"Go to Line/Column...",precondition:void 0,kbOpts:{kbExpr:p.EditorContextKeys.focus,primary:2048|37,mac:{primary:256|37},weight:100}})}run(u){u.get(c.IQuickInputService).quickAccess.show(o.PREFIX)}}e.GotoLineAction=s,g.registerEditorAction(s)}),define(Q[647],J([0,1,603,33,96,28,20,64,6,13,25,78,123,259]),function(q,e,b,N,M,w,S,C,d,g,p,c){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.GotoLineAction=e.StandaloneGotoSymbolQuickAccessProvider=void 0;let o=class extends b.AbstractGotoSymbolQuickAccessProvider{constructor(u){super();this.editorService=u,this.onDidActiveTextEditorControlChange=d.Event.None}get activeTextEditorControl(){return S.withNullAsUndefined(this.editorService.getFocusedCodeEditor())}};o=Me([_e(0,w.ICodeEditorService)],o),e.StandaloneGotoSymbolQuickAccessProvider=o,N.Registry.as(M.Extensions.Quickaccess).registerQuickAccessProvider({ctor:o,prefix:b.AbstractGotoSymbolQuickAccessProvider.PREFIX,helpEntries:[{description:C.QuickOutlineNLS.quickOutlineActionLabel,prefix:b.AbstractGotoSymbolQuickAccessProvider.PREFIX,needsEditor:!0},{description:C.QuickOutlineNLS.quickOutlineByCategoryActionLabel,prefix:b.AbstractGotoSymbolQuickAccessProvider.PREFIX_BY_CATEGORY,needsEditor:!0}]});class s extends g.EditorAction{constructor(){super({id:"editor.action.quickOutline",label:C.QuickOutlineNLS.quickOutlineActionLabel,alias:"Go to Symbol...",precondition:p.EditorContextKeys.hasDocumentSymbolProvider,kbOpts:{kbExpr:p.EditorContextKeys.focus,primary:2048|1024|45,weight:100},contextMenuOpts:{group:"navigation",order:3}})}run(u){u.get(c.IQuickInputService).quickAccess.show(b.AbstractGotoSymbolQuickAccessProvider.PREFIX)}}e.GotoLineAction=s,g.registerEditorAction(s)}),define(Q[648],J([0,1,13,114,64]),function(q,e,b,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0});class w extends b.EditorAction{constructor(){super({id:"editor.action.toggleHighContrast",label:M.ToggleHighContrastNLS.toggleHighContrast,alias:"Toggle High Contrast Theme",precondition:void 0});this._originalThemeName=null}run(C,d){const g=C.get(N.IStandaloneThemeService);this._originalThemeName?(g.setTheme(this._originalThemeName),this._originalThemeName=null):(this._originalThemeName=g.getColorTheme().themeName,g.setTheme("hc-black"))}}b.registerEditorAction(w)}),define(Q[189],J([0,1,7,55,48,2,518,34,68,37,32,11,112,431,17,359]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.createActionViewItem=e.SubmenuEntryActionViewItem=e.MenuEntryActionViewItem=e.createAndFillInActionBarActions=void 0;function u(h,m,_,f,v,y){const L=h.getActions(m);return i(L,_,!1,f,v,y),r(L)}e.createAndFillInActionBarActions=u;function r(h){const m=new w.DisposableStore;for(const[,_]of h)for(const f of _)m.add(f);return m}function i(h,m,_,f=L=>L==="navigation",v=Number.MAX_SAFE_INTEGER,y=()=>!1){let L,I;Array.isArray(m)?(L=m,I=m):(L=m.primary,I=m.secondary);const k=new Set;for(const[E,T]of h){let O;f(E)?O=L:(O=I,O.length>0&&O.push(new M.Separator));for(let A of T){_&&(A=A instanceof C.MenuItemAction&&A.alt?A.alt:A);const B=O.push(A);A instanceof M.SubmenuAction&&k.add({group:E,action:A,index:B-1})}}for(const{group:E,action:T,index:O}of k){const A=f(E)?L:I,B=T.actions;(B.length<=1||A.length+B.length-2<=v)&&y(T,E,A.length)&&A.splice(O,1,...B)}if(L!==I&&L.length>v){const E=L.splice(v,L.length-v);I.unshift(...E,new M.Separator)}}let n=class extends o.ActionViewItem{constructor(m,_,f){super(void 0,m,{icon:!!(m.class||m.item.icon),label:!m.class&&!m.item.icon});this._action=m,this._keybindingService=_,this._notificationService=f,this._wantsAltCommand=!1,this._itemClassDispose=this._register(new w.MutableDisposable),this._altKey=b.ModifierKeyEmitter.getInstance()}get _commandAction(){return this._wantsAltCommand&&this._action.alt||this._action}onClick(m){m.preventDefault(),m.stopPropagation(),this.actionRunner.run(this._commandAction,this._context).catch(_=>this._notificationService.error(_))}render(m){super.render(m),m.classList.add("menu-entry"),this._updateItemClass(this._action.item);let _=!1,f=this._altKey.keyStatus.altKey||(a.isWindows||a.isLinux)&&this._altKey.keyStatus.shiftKey;const v=()=>{const y=_&&f;y!==this._wantsAltCommand&&(this._wantsAltCommand=y,this.updateLabel(),this.updateTooltip(),this.updateClass())};this._action.alt&&this._register(this._altKey.event(y=>{f=y.altKey||(a.isWindows||a.isLinux)&&y.shiftKey,v()})),this._register(N.domEvent(m,"mouseleave")(y=>{_=!1,v()})),this._register(N.domEvent(m,"mouseenter")(y=>{_=!0,v()}))}updateLabel(){this.options.label&&this.label&&(this.label.textContent=this._commandAction.label)}updateTooltip(){if(this.label){const m=this._keybindingService.lookupKeybinding(this._commandAction.id),_=m&&m.getLabel(),f=this._commandAction.tooltip||this._commandAction.label;this.label.title=_?S.localize(0,null,f,_):f}}updateClass(){this.options.icon&&(this._commandAction!==this._action?this._action.alt&&this._updateItemClass(this._action.alt.item):this._action.alt&&this._updateItemClass(this._action.item))}_updateItemClass(m){var _;this._itemClassDispose.value=void 0;const{element:f,label:v}=this;if(!(!f||!v)){const y=this._commandAction.checked&&((_=m.toggled)===null||_===void 0?void 0:_.icon)?m.toggled.icon:m.icon;if(!!y)if(c.ThemeIcon.isThemeIcon(y)){const L=c.ThemeIcon.asClassName(y);v.classList.add(...L.split(" ")),this._itemClassDispose.value=w.toDisposable(()=>{v.classList.remove(...L.split(" "))})}else y.light&&v.style.setProperty("--menu-entry-icon-light",b.asCSSUrl(y.light)),y.dark&&v.style.setProperty("--menu-entry-icon-dark",b.asCSSUrl(y.dark)),v.classList.add("icon"),this._itemClassDispose.value=w.toDisposable(()=>{v.classList.remove("icon"),v.style.removeProperty("--menu-entry-icon-light"),v.style.removeProperty("--menu-entry-icon-dark")})}}};n=Me([_e(1,g.IKeybindingService),_e(2,p.INotificationService)],n),e.MenuEntryActionViewItem=n;let t=class extends s.DropdownMenuActionViewItem{constructor(m,_){super(m,{getActions:()=>m.actions},_,{menuAsChild:!0,classNames:c.ThemeIcon.isThemeIcon(m.item.icon)?c.ThemeIcon.asClassName(m.item.icon):void 0})}render(m){if(super.render(m),this.element){m.classList.add("menu-entry");const{icon:_}=this._action.item;_&&!c.ThemeIcon.isThemeIcon(_)&&(this.element.classList.add("icon"),_.light&&this.element.style.setProperty("--menu-entry-icon-light",b.asCSSUrl(_.light)),_.dark&&this.element.style.setProperty("--menu-entry-icon-dark",b.asCSSUrl(_.dark)))}}};t=Me([_e(1,d.IContextMenuService)],t),e.SubmenuEntryActionViewItem=t;function l(h,m){return m instanceof C.MenuItemAction?h.createInstance(n,m):m instanceof C.SubmenuItemAction?h.createInstance(t,m):void 0}e.createActionViewItem=l}),define(Q[118],J([0,1,7,83,48,29,6,40,28,144,543,500,16,9,74,13,22,27,189,349]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.peekViewEditorMatchHighlightBorder=e.peekViewEditorMatchHighlight=e.peekViewResultsMatchHighlight=e.peekViewEditorGutterBackground=e.peekViewEditorBackground=e.peekViewResultsSelectionForeground=e.peekViewResultsSelectionBackground=e.peekViewResultsFileForeground=e.peekViewResultsMatchForeground=e.peekViewResultsBackground=e.peekViewBorder=e.peekViewTitleInfoForeground=e.peekViewTitleForeground=e.peekViewTitleBackground=e.PeekViewWidget=e.getOuterEditor=e.PeekContext=e.IPeekViewService=void 0,e.IPeekViewService=s.createDecorator("IPeekViewService"),a.registerSingleton(e.IPeekViewService,class{constructor(){this._widgets=new Map}addExclusiveWidget(f,v){const y=this._widgets.get(f);y&&(y.listener.dispose(),y.widget.dispose());const L=()=>{const I=this._widgets.get(f);I&&I.widget===v&&(I.listener.dispose(),this._widgets.delete(f))};this._widgets.set(f,{widget:v,listener:v.onDidClose(L)})}});var t;(function(f){f.inPeekEditor=new o.RawContextKey("inReferenceSearchEditor",!0),f.notInPeekEditor=f.inPeekEditor.toNegated()})(t=e.PeekContext||(e.PeekContext={}));let l=class{constructor(v,y){v instanceof g.EmbeddedCodeEditorWidget&&t.inPeekEditor.bindTo(y)}dispose(){}};l.ID="editor.contrib.referenceController",l=Me([_e(1,o.IContextKeyService)],l),u.registerEditorContribution(l.ID,l);function h(f){let v=f.get(d.ICodeEditorService).getFocusedCodeEditor();return v instanceof g.EmbeddedCodeEditorWidget?v.getParentEditor():v}e.getOuterEditor=h;const m={headerBackgroundColor:w.Color.white,primaryHeadingColor:w.Color.fromHex("#333333"),secondaryHeadingColor:w.Color.fromHex("#6c6c6cb3")};let _=class extends p.ZoneWidget{constructor(v,y,L){super(v,y);this.instantiationService=L,this._onDidClose=new S.Emitter,this.onDidClose=this._onDidClose.event,C.mixin(this.options,m,!1)}dispose(){this.disposed||(this.disposed=!0,super.dispose(),this._onDidClose.fire(this))}style(v){let y=this.options;v.headerBackgroundColor&&(y.headerBackgroundColor=v.headerBackgroundColor),v.primaryHeadingColor&&(y.primaryHeadingColor=v.primaryHeadingColor),v.secondaryHeadingColor&&(y.secondaryHeadingColor=v.secondaryHeadingColor),super.style(v)}_applyStyles(){super._applyStyles();let v=this.options;this._headElement&&v.headerBackgroundColor&&(this._headElement.style.backgroundColor=v.headerBackgroundColor.toString()),this._primaryHeading&&v.primaryHeadingColor&&(this._primaryHeading.style.color=v.primaryHeadingColor.toString()),this._secondaryHeading&&v.secondaryHeadingColor&&(this._secondaryHeading.style.color=v.secondaryHeadingColor.toString()),this._bodyElement&&v.frameColor&&(this._bodyElement.style.borderColor=v.frameColor.toString())}_fillContainer(v){this.setCssClass("peekview-widget"),this._headElement=b.$(".head"),this._bodyElement=b.$(".body"),this._fillHead(this._headElement),this._fillBody(this._bodyElement),v.appendChild(this._headElement),v.appendChild(this._bodyElement)}_fillHead(v,y){const L=b.$(".peekview-title");b.append(this._headElement,L),b.addStandardDisposableListener(L,"click",E=>this._onTitleClick(E)),this._fillTitleIcon(L),this._primaryHeading=b.$("span.filename"),this._secondaryHeading=b.$("span.dirname"),this._metaHeading=b.$("span.meta"),b.append(L,this._primaryHeading,this._secondaryHeading,this._metaHeading);const I=b.$(".peekview-actions");b.append(this._headElement,I);const k=this._getActionBarOptions();this._actionbarWidget=new N.ActionBar(I,k),this._disposables.add(this._actionbarWidget),y||this._actionbarWidget.push(new M.Action("peekview.close",c.localize(0,null),i.Codicon.close.classNames,!0,()=>(this.dispose(),Promise.resolve())),{label:!1,icon:!0})}_fillTitleIcon(v){}_getActionBarOptions(){return{actionViewItemProvider:n.createActionViewItem.bind(void 0,this.instantiationService),orientation:0}}_onTitleClick(v){}setTitle(v,y){this._primaryHeading&&this._secondaryHeading&&(this._primaryHeading.innerText=v,this._primaryHeading.setAttribute("aria-label",v),y?this._secondaryHeading.innerText=y:b.clearNode(this._secondaryHeading))}setMetaTitle(v){this._metaHeading&&(v?(this._metaHeading.innerText=v,b.show(this._metaHeading)):b.hide(this._metaHeading))}_doLayout(v,y){if(!this._isShowing&&v<0){this.dispose();return}const L=Math.ceil(this.editor.getOption(53)*1.2),I=Math.round(v-(L+2));this._doLayoutHead(L,y),this._doLayoutBody(I,y)}_doLayoutHead(v,y){this._headElement&&(this._headElement.style.height=`${v}px`,this._headElement.style.lineHeight=this._headElement.style.height)}_doLayoutBody(v,y){this._bodyElement&&(this._bodyElement.style.height=`${v}px`)}};_=Me([_e(2,s.IInstantiationService)],_),e.PeekViewWidget=_,e.peekViewTitleBackground=r.registerColor("peekViewTitle.background",{dark:"#1E1E1E",light:"#FFFFFF",hc:"#0C141F"},c.localize(1,null)),e.peekViewTitleForeground=r.registerColor("peekViewTitleLabel.foreground",{dark:"#FFFFFF",light:"#333333",hc:"#FFFFFF"},c.localize(2,null)),e.peekViewTitleInfoForeground=r.registerColor("peekViewTitleDescription.foreground",{dark:"#ccccccb3",light:"#616161e6",hc:"#FFFFFF99"},c.localize(3,null)),e.peekViewBorder=r.registerColor("peekView.border",{dark:"#007acc",light:"#007acc",hc:r.contrastBorder},c.localize(4,null)),e.peekViewResultsBackground=r.registerColor("peekViewResult.background",{dark:"#252526",light:"#F3F3F3",hc:w.Color.black},c.localize(5,null)),e.peekViewResultsMatchForeground=r.registerColor("peekViewResult.lineForeground",{dark:"#bbbbbb",light:"#646465",hc:w.Color.white},c.localize(6,null)),e.peekViewResultsFileForeground=r.registerColor("peekViewResult.fileForeground",{dark:w.Color.white,light:"#1E1E1E",hc:w.Color.white},c.localize(7,null)),e.peekViewResultsSelectionBackground=r.registerColor("peekViewResult.selectionBackground",{dark:"#3399ff33",light:"#3399ff33",hc:null},c.localize(8,null)),e.peekViewResultsSelectionForeground=r.registerColor("peekViewResult.selectionForeground",{dark:w.Color.white,light:"#6C6C6C",hc:w.Color.white},c.localize(9,null)),e.peekViewEditorBackground=r.registerColor("peekViewEditor.background",{dark:"#001F33",light:"#F2F8FC",hc:w.Color.black},c.localize(10,null)),e.peekViewEditorGutterBackground=r.registerColor("peekViewEditorGutter.background",{dark:e.peekViewEditorBackground,light:e.peekViewEditorBackground,hc:e.peekViewEditorBackground},c.localize(11,null)),e.peekViewResultsMatchHighlight=r.registerColor("peekViewResult.matchHighlightBackground",{dark:"#ea5c004d",light:"#ea5c004d",hc:null},c.localize(12,null)),e.peekViewEditorMatchHighlight=r.registerColor("peekViewEditor.matchHighlightBackground",{dark:"#ff8f0099",light:"#f5d802de",hc:null},c.localize(13,null)),e.peekViewEditorMatchHighlightBorder=r.registerColor("peekViewEditor.matchHighlightBorder",{dark:null,light:null,hc:r.activeContrastBorder},c.localize(14,null))}),define(Q[649],J([0,1,7,83,2,117,511,189,34,16,9]),function(q,e,b,N,M,w,S,C,d,g,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SuggestWidgetStatus=void 0;class c extends C.MenuEntryActionViewItem{updateLabel(){const a=this._keybindingService.lookupKeybinding(this._action.id);if(!a)return super.updateLabel();this.label&&(this.label.textContent=S.localize(0,null,this._action.label,c.symbolPrintEnter(a)))}static symbolPrintEnter(a){var u;return(u=a.getLabel())===null||u===void 0?void 0:u.replace(/\benter\b/gi,"\u23CE")}}let o=class{constructor(a,u,r,i){this._menuService=r,this._contextKeyService=i,this._menuDisposables=new M.DisposableStore,this.element=b.append(a,b.$(".suggest-status-bar"));const n=t=>t instanceof d.MenuItemAction?u.createInstance(c,t):void 0;this._leftActions=new N.ActionBar(this.element,{actionViewItemProvider:n}),this._rightActions=new N.ActionBar(this.element,{actionViewItemProvider:n}),this._leftActions.domNode.classList.add("left"),this._rightActions.domNode.classList.add("right")}dispose(){this._menuDisposables.dispose(),this.element.remove()}show(){const a=this._menuService.createMenu(w.suggestWidgetStatusbarMenu,this._contextKeyService),u=()=>{const r=[],i=[];for(let[n,t]of a.getActions())n==="left"?r.push(...t):i.push(...t);this._leftActions.clear(),this._leftActions.push(r),this._rightActions.clear(),this._rightActions.push(i)};this._menuDisposables.add(a.onDidChange(()=>u())),this._menuDisposables.add(a)}hide(){this._menuDisposables.clear()}};o=Me([_e(1,p.IInstantiationService),_e(2,d.IMenuService),_e(3,g.IContextKeyService)],o),e.SuggestWidgetStatus=o}),define(Q[650],J([0,1,15,6,2,34,26,16]),function(q,e,b,N,M,w,S,C){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MenuService=void 0;let d=class{constructor(c){this._commandService=c}createMenu(c,o,s=!1){return new g(c,s,this._commandService,o,this)}};d=Me([_e(0,S.ICommandService)],d),e.MenuService=d;let g=class et{constructor(c,o,s,a,u){this._id=c,this._fireEventsForSubmenuChanges=o,this._commandService=s,this._contextKeyService=a,this._menuService=u,this._dispoables=new M.DisposableStore,this._onDidChange=new N.Emitter,this.onDidChange=this._onDidChange.event,this._menuGroups=[],this._contextKeys=new Set,this._build();const r=new b.RunOnceScheduler(()=>this._build(),50);this._dispoables.add(r),this._dispoables.add(w.MenuRegistry.onDidChangeMenu(n=>{n.has(c)&&r.schedule()}));const i=new b.RunOnceScheduler(()=>this._onDidChange.fire(this),50);this._dispoables.add(i),this._dispoables.add(a.onDidChangeContext(n=>{n.affectsSome(this._contextKeys)&&i.schedule()}))}dispose(){this._dispoables.dispose(),this._onDidChange.dispose()}_build(){this._menuGroups.length=0,this._contextKeys.clear();const c=w.MenuRegistry.getMenuItems(this._id);let o;c.sort(et._compareMenuItems);for(let s of c){const a=s.group||"";(!o||o[0]!==a)&&(o=[a,[]],this._menuGroups.push(o)),o[1].push(s),this._collectContextKeys(s)}this._onDidChange.fire(this)}_collectContextKeys(c){if(et._fillInKbExprKeys(c.when,this._contextKeys),w.isIMenuItem(c)){if(c.command.precondition&&et._fillInKbExprKeys(c.command.precondition,this._contextKeys),c.command.toggled){const o=c.command.toggled.condition||c.command.toggled;et._fillInKbExprKeys(o,this._contextKeys)}}else this._fireEventsForSubmenuChanges&&w.MenuRegistry.getMenuItems(c.submenu).forEach(this._collectContextKeys,this)}getActions(c){const o=[];for(let s of this._menuGroups){const[a,u]=s,r=[];for(const i of u)if(this._contextKeyService.contextMatchesRules(i.when)){const n=w.isIMenuItem(i)?new w.MenuItemAction(i.command,i.alt,c,this._contextKeyService,this._commandService):new w.SubmenuItemAction(i,this._menuService,this._contextKeyService,c);r.push(n)}r.length>0&&o.push([a,r])}return o}static _fillInKbExprKeys(c,o){if(c)for(let s of c.keys())o.add(s)}static _compareMenuItems(c,o){let s=c.group,a=o.group;if(s!==a){if(s){if(!a)return-1}else return 1;if(s==="navigation")return-1;if(a==="navigation")return 1;let i=s.localeCompare(a);if(i!==0)return i}let u=c.order||0,r=o.order||0;return ur?1:et._compareTitles(w.isIMenuItem(c)?c.command.title:c.title,w.isIMenuItem(o)?o.command.title:o.title)}static _compareTitles(c,o){const s=typeof c=="string"?c:c.original,a=typeof o=="string"?o:o.original;return s.localeCompare(a)}};g=Me([_e(2,S.ICommandService),_e(3,C.IContextKeyService),_e(4,w.IMenuService)],g)}),define(Q[651],J([0,1,579,68,87,32,11,37,2,7]),function(q,e,b,N,M,w,S,C,d,g){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ContextMenuService=void 0;let p=class extends d.Disposable{constructor(o,s,a,u,r){super();this.contextMenuHandler=new b.ContextMenuHandler(a,o,s,u,r)}configure(o){this.contextMenuHandler.configure(o)}showContextMenu(o){this.contextMenuHandler.showContextMenu(o),g.ModifierKeyEmitter.getInstance().resetKeyStatus()}};p=Me([_e(0,M.ITelemetryService),_e(1,w.INotificationService),_e(2,N.IContextViewService),_e(3,C.IKeybindingService),_e(4,S.IThemeService)],p),e.ContextMenuService=p}),define(Q[147],J([0,1,7,312,105,6,2,523,46,95,16,9,37,33,116,11,250,234,428,427,65,315]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l,h){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.WorkbenchCompressibleAsyncDataTree=e.WorkbenchAsyncDataTree=e.WorkbenchDataTree=e.WorkbenchCompressibleObjectTree=e.WorkbenchObjectTree=e.WorkbenchTable=e.WorkbenchPagedList=e.WorkbenchList=e.didBindWorkbenchListAutomaticKeyboardNavigation=e.WorkbenchListAutomaticKeyboardNavigation=e.WorkbenchListAutomaticKeyboardNavigationKey=e.WorkbenchListSupportsKeyboardNavigation=e.WorkbenchListMultiSelection=e.WorkbenchListDoubleSelection=e.WorkbenchListHasSelectionOrFocus=e.WorkbenchListFocusContextKey=e.WorkbenchListSupportsMultiSelectContextKey=e.ListService=e.IListService=void 0,e.IListService=c.createDecorator("listService");let m=class{constructor(oe){this._themeService=oe,this.disposables=new S.DisposableStore,this.lists=[],this._lastFocusedWidget=void 0,this._hasCreatedStyleController=!1}get lastFocusedList(){return this._lastFocusedWidget}register(oe,ae){if(!this._hasCreatedStyleController){this._hasCreatedStyleController=!0;const j=new M.DefaultStyleController(b.createStyleSheet(),"");this.disposables.add(a.attachListStyler(j,this._themeService))}if(this.lists.some(j=>j.widget===oe))throw new Error("Cannot register the same widget multiple times");const G={widget:oe,extraContextKeys:ae};return this.lists.push(G),oe.getHTMLElement()===document.activeElement&&(this._lastFocusedWidget=oe),S.combinedDisposable(oe.onDidFocus(()=>this._lastFocusedWidget=oe),S.toDisposable(()=>this.lists.splice(this.lists.indexOf(G),1)),oe.onDidDispose(()=>{this.lists=this.lists.filter(j=>j!==G),this._lastFocusedWidget===oe&&(this._lastFocusedWidget=void 0)}))}dispose(){this.disposables.dispose()}};m=Me([_e(0,u.IThemeService)],m),e.ListService=m;const _=new p.RawContextKey("listFocus",!0);e.WorkbenchListSupportsMultiSelectContextKey=new p.RawContextKey("listSupportsMultiselect",!0),e.WorkbenchListFocusContextKey=p.ContextKeyExpr.and(_,p.ContextKeyExpr.not(r.InputFocusedContextKey)),e.WorkbenchListHasSelectionOrFocus=new p.RawContextKey("listHasSelectionOrFocus",!1),e.WorkbenchListDoubleSelection=new p.RawContextKey("listDoubleSelection",!1),e.WorkbenchListMultiSelection=new p.RawContextKey("listMultiSelection",!1),e.WorkbenchListSupportsKeyboardNavigation=new p.RawContextKey("listSupportsKeyboardNavigation",!0),e.WorkbenchListAutomaticKeyboardNavigationKey="listAutomaticKeyboardNavigation",e.WorkbenchListAutomaticKeyboardNavigation=new p.RawContextKey(e.WorkbenchListAutomaticKeyboardNavigationKey,!0),e.didBindWorkbenchListAutomaticKeyboardNavigation=!1;function f(ie,oe){const ae=ie.createScoped(oe.getHTMLElement());return _.bindTo(ae),ae}const v="workbench.list.multiSelectModifier",y="workbench.list.openMode",L="workbench.list.horizontalScrolling",I="workbench.list.keyboardNavigation",k="workbench.list.automaticKeyboardNavigation",E="workbench.tree.indent",T="workbench.tree.renderIndentGuides",O="workbench.list.smoothScrolling",A="workbench.tree.expandMode";function B(ie){return ie.getValue(v)==="alt"}class F extends S.Disposable{constructor(oe){super();this.configurationService=oe,this.useAltAsMultipleSelectionModifier=B(oe),this.registerListeners()}registerListeners(){this._register(this.configurationService.onDidChangeConfiguration(oe=>{oe.affectsConfiguration(v)&&(this.useAltAsMultipleSelectionModifier=B(this.configurationService))}))}isSelectionSingleChangeEvent(oe){return this.useAltAsMultipleSelectionModifier?oe.browserEvent.altKey:M.isSelectionSingleChangeEvent(oe)}isSelectionRangeChangeEvent(oe){return M.isSelectionRangeChangeEvent(oe)}}function D(ie,oe,ae){const G=new S.DisposableStore,j=Object.assign({},ie);if(ie.multipleSelectionSupport!==!1&&!ie.multipleSelectionController){const te=new F(oe);j.multipleSelectionController=te,G.add(te)}return j.keyboardNavigationDelegate={mightProducePrintableCharacter(te){return ae.mightProducePrintableCharacter(te)}},j.smoothScrolling=oe.getValue(O),[j,G]}let R=class extends M.List{constructor(oe,ae,G,j,te,Z,ue,he,re,ce){const me=typeof te.horizontalScrolling!="undefined"?te.horizontalScrolling:re.getValue(L),[Ce,be]=D(te,re,ce);super(oe,ae,G,j,Object.assign(Object.assign(Object.assign({keyboardSupport:!1},a.computeStyles(he.getColorTheme(),a.defaultListStyles)),Ce),{horizontalScrolling:me}));this.disposables.add(be),this.contextKeyService=f(Z,this),this.themeService=he,e.WorkbenchListSupportsMultiSelectContextKey.bindTo(this.contextKeyService).set(te.multipleSelectionSupport!==!1),this.listHasSelectionOrFocus=e.WorkbenchListHasSelectionOrFocus.bindTo(this.contextKeyService),this.listDoubleSelection=e.WorkbenchListDoubleSelection.bindTo(this.contextKeyService),this.listMultiSelection=e.WorkbenchListMultiSelection.bindTo(this.contextKeyService),this.horizontalScrolling=te.horizontalScrolling,this._useAltAsMultipleSelectionModifier=B(re),this.disposables.add(this.contextKeyService),this.disposables.add(ue.register(this)),te.overrideStyles&&this.updateStyles(te.overrideStyles),this.disposables.add(this.onDidChangeSelection(()=>{const De=this.getSelection(),Re=this.getFocus();this.contextKeyService.bufferChangeEvents(()=>{this.listHasSelectionOrFocus.set(De.length>0||Re.length>0),this.listMultiSelection.set(De.length>1),this.listDoubleSelection.set(De.length===2)})})),this.disposables.add(this.onDidChangeFocus(()=>{const De=this.getSelection(),Re=this.getFocus();this.listHasSelectionOrFocus.set(De.length>0||Re.length>0)})),this.disposables.add(re.onDidChangeConfiguration(De=>{De.affectsConfiguration(v)&&(this._useAltAsMultipleSelectionModifier=B(re));let Re={};if(De.affectsConfiguration(L)&&this.horizontalScrolling===void 0){const Ee=re.getValue(L);Re=Object.assign(Object.assign({},Re),{horizontalScrolling:Ee})}if(De.affectsConfiguration(O)){const Ee=re.getValue(O);Re=Object.assign(Object.assign({},Re),{smoothScrolling:Ee})}Object.keys(Re).length>0&&this.updateOptions(Re)})),this.navigator=new Y(this,Object.assign({configurationService:re},te)),this.disposables.add(this.navigator)}updateOptions(oe){super.updateOptions(oe),oe.overrideStyles&&this.updateStyles(oe.overrideStyles)}updateStyles(oe){var ae;(ae=this._styler)===null||ae===void 0||ae.dispose(),this._styler=a.attachListStyler(this,this.themeService,oe)}dispose(){var oe;(oe=this._styler)===null||oe===void 0||oe.dispose(),super.dispose()}};R=Me([_e(5,p.IContextKeyService),_e(6,e.IListService),_e(7,u.IThemeService),_e(8,d.IConfigurationService),_e(9,o.IKeybindingService)],R),e.WorkbenchList=R;let W=class extends N.PagedList{constructor(oe,ae,G,j,te,Z,ue,he,re,ce){const me=typeof te.horizontalScrolling!="undefined"?te.horizontalScrolling:re.getValue(L),[Ce,be]=D(te,re,ce);super(oe,ae,G,j,Object.assign(Object.assign(Object.assign({keyboardSupport:!1},a.computeStyles(he.getColorTheme(),a.defaultListStyles)),Ce),{horizontalScrolling:me}));this.disposables=new S.DisposableStore,this.disposables.add(be),this.contextKeyService=f(Z,this),this.themeService=he,this.horizontalScrolling=te.horizontalScrolling,e.WorkbenchListSupportsMultiSelectContextKey.bindTo(this.contextKeyService).set(te.multipleSelectionSupport!==!1),this._useAltAsMultipleSelectionModifier=B(re),this.disposables.add(this.contextKeyService),this.disposables.add(ue.register(this)),te.overrideStyles&&this.updateStyles(te.overrideStyles),te.overrideStyles&&this.disposables.add(a.attachListStyler(this,he,te.overrideStyles)),this.disposables.add(re.onDidChangeConfiguration(De=>{De.affectsConfiguration(v)&&(this._useAltAsMultipleSelectionModifier=B(re));let Re={};if(De.affectsConfiguration(L)&&this.horizontalScrolling===void 0){const Ee=re.getValue(L);Re=Object.assign(Object.assign({},Re),{horizontalScrolling:Ee})}if(De.affectsConfiguration(O)){const Ee=re.getValue(O);Re=Object.assign(Object.assign({},Re),{smoothScrolling:Ee})}Object.keys(Re).length>0&&this.updateOptions(Re)})),this.navigator=new Y(this,Object.assign({configurationService:re},te)),this.disposables.add(this.navigator)}updateOptions(oe){super.updateOptions(oe),oe.overrideStyles&&this.updateStyles(oe.overrideStyles)}updateStyles(oe){var ae;(ae=this._styler)===null||ae===void 0||ae.dispose(),this._styler=a.attachListStyler(this,this.themeService,oe)}dispose(){var oe;(oe=this._styler)===null||oe===void 0||oe.dispose(),this.disposables.dispose(),super.dispose()}};W=Me([_e(5,p.IContextKeyService),_e(6,e.IListService),_e(7,u.IThemeService),_e(8,d.IConfigurationService),_e(9,o.IKeybindingService)],W),e.WorkbenchPagedList=W;let x=class extends h.Table{constructor(oe,ae,G,j,te,Z,ue,he,re,ce,me){const Ce=typeof Z.horizontalScrolling!="undefined"?Z.horizontalScrolling:ce.getValue(L),[be,Le]=D(Z,ce,me);super(oe,ae,G,j,te,Object.assign(Object.assign(Object.assign({keyboardSupport:!1},a.computeStyles(re.getColorTheme(),a.defaultListStyles)),be),{horizontalScrolling:Ce}));this.disposables=new S.DisposableStore,this.disposables.add(Le),this.contextKeyService=f(ue,this),this.themeService=re,e.WorkbenchListSupportsMultiSelectContextKey.bindTo(this.contextKeyService).set(Z.multipleSelectionSupport!==!1),this.listHasSelectionOrFocus=e.WorkbenchListHasSelectionOrFocus.bindTo(this.contextKeyService),this.listDoubleSelection=e.WorkbenchListDoubleSelection.bindTo(this.contextKeyService),this.listMultiSelection=e.WorkbenchListMultiSelection.bindTo(this.contextKeyService),this.horizontalScrolling=Z.horizontalScrolling,this._useAltAsMultipleSelectionModifier=B(ce),this.disposables.add(this.contextKeyService),this.disposables.add(he.register(this)),Z.overrideStyles&&this.updateStyles(Z.overrideStyles),this.disposables.add(this.onDidChangeSelection(()=>{const Re=this.getSelection(),Ee=this.getFocus();this.contextKeyService.bufferChangeEvents(()=>{this.listHasSelectionOrFocus.set(Re.length>0||Ee.length>0),this.listMultiSelection.set(Re.length>1),this.listDoubleSelection.set(Re.length===2)})})),this.disposables.add(this.onDidChangeFocus(()=>{const Re=this.getSelection(),Ee=this.getFocus();this.listHasSelectionOrFocus.set(Re.length>0||Ee.length>0)})),this.disposables.add(ce.onDidChangeConfiguration(Re=>{Re.affectsConfiguration(v)&&(this._useAltAsMultipleSelectionModifier=B(ce));let Ee={};if(Re.affectsConfiguration(L)&&this.horizontalScrolling===void 0){const Ae=ce.getValue(L);Ee=Object.assign(Object.assign({},Ee),{horizontalScrolling:Ae})}if(Re.affectsConfiguration(O)){const Ae=ce.getValue(O);Ee=Object.assign(Object.assign({},Ee),{smoothScrolling:Ae})}Object.keys(Ee).length>0&&this.updateOptions(Ee)})),this.navigator=new ee(this,Object.assign({configurationService:ce},Z)),this.disposables.add(this.navigator)}updateOptions(oe){super.updateOptions(oe),oe.overrideStyles&&this.updateStyles(oe.overrideStyles)}updateStyles(oe){var ae;(ae=this._styler)===null||ae===void 0||ae.dispose(),this._styler=a.attachListStyler(this,this.themeService,oe)}dispose(){var oe;(oe=this._styler)===null||oe===void 0||oe.dispose(),this.disposables.dispose(),super.dispose()}};x=Me([_e(6,p.IContextKeyService),_e(7,e.IListService),_e(8,u.IThemeService),_e(9,d.IConfigurationService),_e(10,o.IKeybindingService)],x),e.WorkbenchTable=x;class K extends S.Disposable{constructor(oe,ae){var G,j;super();this.widget=oe,this._onDidOpen=this._register(new w.Emitter),this.onDidOpen=this._onDidOpen.event,this.openOnFocus=(G=ae==null?void 0:ae.openOnFocus)!==null&&G!==void 0?G:!1,this._register(w.Event.filter(this.widget.onDidChangeSelection,te=>te.browserEvent instanceof KeyboardEvent)(te=>this.onSelectionFromKeyboard(te))),this._register(this.widget.onPointer(te=>this.onPointer(te.element,te.browserEvent))),this._register(this.widget.onMouseDblClick(te=>this.onMouseDblClick(te.element,te.browserEvent))),this.openOnFocus&&this._register(w.Event.filter(this.widget.onDidChangeFocus,te=>te.browserEvent instanceof KeyboardEvent)(te=>this.onFocusFromKeyboard(te))),typeof(ae==null?void 0:ae.openOnSingleClick)!="boolean"&&(ae==null?void 0:ae.configurationService)?(this.openOnSingleClick=(ae==null?void 0:ae.configurationService.getValue(y))!=="doubleClick",this._register(ae==null?void 0:ae.configurationService.onDidChangeConfiguration(()=>{this.openOnSingleClick=(ae==null?void 0:ae.configurationService.getValue(y))!=="doubleClick"}))):this.openOnSingleClick=(j=ae==null?void 0:ae.openOnSingleClick)!==null&&j!==void 0?j:!0}onFocusFromKeyboard(oe){const ae=this.widget.getFocus();this.widget.setSelection(ae,oe.browserEvent);const G=oe.browserEvent,j=typeof G.preserveFocus=="boolean"?G.preserveFocus:!0,te=typeof G.pinned=="boolean"?G.pinned:!j,Z=!1;this._open(this.getSelectedElement(),j,te,Z,oe.browserEvent)}onSelectionFromKeyboard(oe){if(oe.elements.length===1){const ae=oe.browserEvent,G=typeof ae.preserveFocus=="boolean"?ae.preserveFocus:!0,j=typeof ae.pinned=="boolean"?ae.pinned:!G,te=!1;this._open(this.getSelectedElement(),G,j,te,oe.browserEvent)}}onPointer(oe,ae){if(!!this.openOnSingleClick&&ae.detail!==2){const j=ae.button===1,te=!0,Z=j,ue=ae.ctrlKey||ae.metaKey||ae.altKey;this._open(oe,te,Z,ue,ae)}}onMouseDblClick(oe,ae){if(!!ae){const G=!1,j=!0,te=ae.ctrlKey||ae.metaKey||ae.altKey;this._open(oe,G,j,te,ae)}}_open(oe,ae,G,j,te){!oe||this._onDidOpen.fire({editorOptions:{preserveFocus:ae,pinned:G,revealIfVisible:!0},sideBySide:j,element:oe,browserEvent:te})}}class Y extends K{constructor(oe,ae){super(oe,ae);this.widget=oe}getSelectedElement(){return this.widget.getSelectedElements()[0]}}class ee extends K{constructor(oe,ae){super(oe,ae);this.widget=oe}getSelectedElement(){return this.widget.getSelectedElements()[0]}}class se extends K{constructor(oe,ae){super(oe,ae);this.widget=oe}getSelectedElement(){var oe;return(oe=this.widget.getSelection()[0])!==null&&oe!==void 0?oe:void 0}}function ne(ie,oe){let ae=!1;return G=>{if(ae)return ae=!1,!1;const j=oe.softDispatch(G,ie);return j&&j.enterChord?(ae=!0,!1):(ae=!1,!0)}}let le=class extends i.ObjectTree{constructor(oe,ae,G,j,te,Z,ue,he,re,ce,me){const{options:Ce,getAutomaticKeyboardNavigation:be,disposable:Le}=U(ae,te,Z,re,ce,me);super(oe,ae,G,j,Ce);this.disposables.add(Le),this.internals=new H(this,te,be,te.overrideStyles,Z,ue,he,re,me),this.disposables.add(this.internals)}};le=Me([_e(5,p.IContextKeyService),_e(6,e.IListService),_e(7,u.IThemeService),_e(8,d.IConfigurationService),_e(9,o.IKeybindingService),_e(10,l.IAccessibilityService)],le),e.WorkbenchObjectTree=le;let X=class extends i.CompressibleObjectTree{constructor(oe,ae,G,j,te,Z,ue,he,re,ce,me){const{options:Ce,getAutomaticKeyboardNavigation:be,disposable:Le}=U(ae,te,Z,re,ce,me);super(oe,ae,G,j,Ce);this.disposables.add(Le),this.internals=new H(this,te,be,te.overrideStyles,Z,ue,he,re,me),this.disposables.add(this.internals)}updateOptions(oe={}){super.updateOptions(oe),oe.overrideStyles&&this.internals.updateStyleOverrides(oe.overrideStyles)}};X=Me([_e(5,p.IContextKeyService),_e(6,e.IListService),_e(7,u.IThemeService),_e(8,d.IConfigurationService),_e(9,o.IKeybindingService),_e(10,l.IAccessibilityService)],X),e.WorkbenchCompressibleObjectTree=X;let z=class extends t.DataTree{constructor(oe,ae,G,j,te,Z,ue,he,re,ce,me,Ce){const{options:be,getAutomaticKeyboardNavigation:Le,disposable:De}=U(ae,Z,ue,ce,me,Ce);super(oe,ae,G,j,te,be);this.disposables.add(De),this.internals=new H(this,Z,Le,Z.overrideStyles,ue,he,re,ce,Ce),this.disposables.add(this.internals)}updateOptions(oe={}){super.updateOptions(oe),oe.overrideStyles&&this.internals.updateStyleOverrides(oe.overrideStyles)}};z=Me([_e(6,p.IContextKeyService),_e(7,e.IListService),_e(8,u.IThemeService),_e(9,d.IConfigurationService),_e(10,o.IKeybindingService),_e(11,l.IAccessibilityService)],z),e.WorkbenchDataTree=z;let P=class extends n.AsyncDataTree{constructor(oe,ae,G,j,te,Z,ue,he,re,ce,me,Ce){const{options:be,getAutomaticKeyboardNavigation:Le,disposable:De}=U(ae,Z,ue,ce,me,Ce);super(oe,ae,G,j,te,be);this.disposables.add(De),this.internals=new H(this,Z,Le,Z.overrideStyles,ue,he,re,ce,Ce),this.disposables.add(this.internals)}get onDidOpen(){return this.internals.onDidOpen}updateOptions(oe={}){super.updateOptions(oe),oe.overrideStyles&&this.internals.updateStyleOverrides(oe.overrideStyles)}};P=Me([_e(6,p.IContextKeyService),_e(7,e.IListService),_e(8,u.IThemeService),_e(9,d.IConfigurationService),_e(10,o.IKeybindingService),_e(11,l.IAccessibilityService)],P),e.WorkbenchAsyncDataTree=P;let V=class extends n.CompressibleAsyncDataTree{constructor(oe,ae,G,j,te,Z,ue,he,re,ce,me,Ce,be){const{options:Le,getAutomaticKeyboardNavigation:De,disposable:Re}=U(ae,ue,he,me,Ce,be);super(oe,ae,G,j,te,Z,Le);this.disposables.add(Re),this.internals=new H(this,ue,De,ue.overrideStyles,he,re,ce,me,be),this.disposables.add(this.internals)}};V=Me([_e(7,p.IContextKeyService),_e(8,e.IListService),_e(9,u.IThemeService),_e(10,d.IConfigurationService),_e(11,o.IKeybindingService),_e(12,l.IAccessibilityService)],V),e.WorkbenchCompressibleAsyncDataTree=V;function U(ie,oe,ae,G,j,te){var Z;e.WorkbenchListSupportsKeyboardNavigation.bindTo(ae),e.didBindWorkbenchListAutomaticKeyboardNavigation||(e.WorkbenchListAutomaticKeyboardNavigation.bindTo(ae),e.didBindWorkbenchListAutomaticKeyboardNavigation=!0);const ue=()=>{let Le=ae.getContextKeyValue(e.WorkbenchListAutomaticKeyboardNavigationKey);return Le&&(Le=G.getValue(k)),Le},he=te.isScreenReaderOptimized(),re=oe.simpleKeyboardNavigation||he?"simple":G.getValue(I),ce=oe.horizontalScrolling!==void 0?oe.horizontalScrolling:G.getValue(L),[me,Ce]=D(oe,G,j),be=oe.additionalScrollHeight;return{getAutomaticKeyboardNavigation:ue,disposable:Ce,options:Object.assign(Object.assign({keyboardSupport:!1},me),{indent:G.getValue(E),renderIndentGuides:G.getValue(T),smoothScrolling:G.getValue(O),automaticKeyboardNavigation:ue(),simpleKeyboardNavigation:re==="simple",filterOnType:re==="filter",horizontalScrolling:ce,keyboardNavigationEventFilter:ne(ie,j),additionalScrollHeight:be,hideTwistiesOfChildlessElements:oe.hideTwistiesOfChildlessElements,expandOnlyOnTwistieClick:(Z=oe.expandOnlyOnTwistieClick)!==null&&Z!==void 0?Z:G.getValue(A)==="doubleClick"})}}let H=class{constructor(oe,ae,G,j,te,Z,ue,he,re){this.tree=oe,this.themeService=ue,this.disposables=[],this.contextKeyService=f(te,oe),e.WorkbenchListSupportsMultiSelectContextKey.bindTo(this.contextKeyService).set(ae.multipleSelectionSupport!==!1),this.hasSelectionOrFocus=e.WorkbenchListHasSelectionOrFocus.bindTo(this.contextKeyService),this.hasDoubleSelection=e.WorkbenchListDoubleSelection.bindTo(this.contextKeyService),this.hasMultiSelection=e.WorkbenchListMultiSelection.bindTo(this.contextKeyService),this._useAltAsMultipleSelectionModifier=B(he);const me=new Set;me.add(e.WorkbenchListAutomaticKeyboardNavigationKey);const Ce=()=>{const Le=re.isScreenReaderOptimized()?"simple":he.getValue(I);oe.updateOptions({simpleKeyboardNavigation:Le==="simple",filterOnType:Le==="filter"})};this.updateStyleOverrides(j),this.disposables.push(this.contextKeyService,Z.register(oe),oe.onDidChangeSelection(()=>{const be=oe.getSelection(),Le=oe.getFocus();this.contextKeyService.bufferChangeEvents(()=>{this.hasSelectionOrFocus.set(be.length>0||Le.length>0),this.hasMultiSelection.set(be.length>1),this.hasDoubleSelection.set(be.length===2)})}),oe.onDidChangeFocus(()=>{const be=oe.getSelection(),Le=oe.getFocus();this.hasSelectionOrFocus.set(be.length>0||Le.length>0)}),he.onDidChangeConfiguration(be=>{let Le={};if(be.affectsConfiguration(v)&&(this._useAltAsMultipleSelectionModifier=B(he)),be.affectsConfiguration(E)){const De=he.getValue(E);Le=Object.assign(Object.assign({},Le),{indent:De})}if(be.affectsConfiguration(T)){const De=he.getValue(T);Le=Object.assign(Object.assign({},Le),{renderIndentGuides:De})}if(be.affectsConfiguration(O)){const De=he.getValue(O);Le=Object.assign(Object.assign({},Le),{smoothScrolling:De})}if(be.affectsConfiguration(I)&&Ce(),be.affectsConfiguration(k)&&(Le=Object.assign(Object.assign({},Le),{automaticKeyboardNavigation:G()})),be.affectsConfiguration(L)&&ae.horizontalScrolling===void 0){const De=he.getValue(L);Le=Object.assign(Object.assign({},Le),{horizontalScrolling:De})}be.affectsConfiguration(A)&&ae.expandOnlyOnTwistieClick===void 0&&(Le=Object.assign(Object.assign({},Le),{expandOnlyOnTwistieClick:he.getValue(A)==="doubleClick"})),Object.keys(Le).length>0&&oe.updateOptions(Le)}),this.contextKeyService.onDidChangeContext(be=>{be.affectsSome(me)&&oe.updateOptions({automaticKeyboardNavigation:G()})}),re.onDidChangeScreenReaderOptimized(()=>Ce())),this.navigator=new se(oe,Object.assign({configurationService:he},ae)),this.disposables.push(this.navigator)}get onDidOpen(){return this.navigator.onDidOpen}updateStyleOverrides(oe){S.dispose(this.styler),this.styler=oe?a.attachListStyler(this.tree,this.themeService,oe):S.Disposable.None}dispose(){this.disposables=S.dispose(this.disposables),S.dispose(this.styler),this.styler=void 0}};H=Me([_e(4,p.IContextKeyService),_e(5,e.IListService),_e(6,u.IThemeService),_e(7,d.IConfigurationService),_e(8,l.IAccessibilityService)],H),s.Registry.as(g.Extensions.Configuration).registerConfiguration({id:"workbench",order:7,title:C.localize(0,null),type:"object",properties:{[v]:{type:"string",enum:["ctrlCmd","alt"],enumDescriptions:[C.localize(1,null),C.localize(2,null)],default:"ctrlCmd",description:C.localize(3,null)},[y]:{type:"string",enum:["singleClick","doubleClick"],default:"singleClick",description:C.localize(4,null)},[L]:{type:"boolean",default:!1,description:C.localize(5,null)},[E]:{type:"number",default:8,minimum:0,maximum:40,description:C.localize(6,null)},[T]:{type:"string",enum:["none","onHover","always"],default:"onHover",description:C.localize(7,null)},[O]:{type:"boolean",default:!1,description:C.localize(8,null)},[I]:{type:"string",enum:["simple","highlight","filter"],enumDescriptions:[C.localize(9,null),C.localize(10,null),C.localize(11,null)],default:"highlight",description:C.localize(12,null)},[k]:{type:"boolean",default:!0,markdownDescription:C.localize(13,null)},[A]:{type:"string",enum:["singleClick","doubleClick"],default:"singleClick",description:C.localize(14,null)}}})}),define(Q[652],J([0,1,139,9,11,22,23,116,16,65,443,147,574]),function(q,e,b,N,M,w,S,C,d,g,p,c,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.QuickInputService=void 0;let s=class extends M.Themable{constructor(u,r,i,n,t){super(i);this.instantiationService=u,this.contextKeyService=r,this.accessibilityService=n,this.layoutService=t,this.contexts=new Map}get controller(){return this._controller||(this._controller=this._register(this.createController())),this._controller}get quickAccess(){return this._quickAccess||(this._quickAccess=this._register(this.instantiationService.createInstance(o.QuickAccessController))),this._quickAccess}createController(u=this.layoutService,r){var i,n;const t={idPrefix:"quickInput_",container:u.container,ignoreFocusOut:()=>!1,isScreenReaderOptimized:()=>this.accessibilityService.isScreenReaderOptimized(),backKeybindingLabel:()=>{},setContextKey:h=>this.setContextKey(h),returnFocus:()=>u.focus(),createList:(h,m,_,f,v)=>this.instantiationService.createInstance(c.WorkbenchList,h,m,_,f,v),styles:this.computeStyles()},l=this._register(new p.QuickInputController(Object.assign(Object.assign({},t),r)));return l.layout(u.dimension,(n=(i=u.offset)===null||i===void 0?void 0:i.top)!==null&&n!==void 0?n:0),this._register(u.onDidLayout(h=>{var m,_;return l.layout(h,(_=(m=u.offset)===null||m===void 0?void 0:m.top)!==null&&_!==void 0?_:0)})),this._register(l.onShow(()=>this.resetContextKeys())),this._register(l.onHide(()=>this.resetContextKeys())),l}setContextKey(u){let r;u&&(r=this.contexts.get(u),r||(r=new d.RawContextKey(u,!1).bindTo(this.contextKeyService),this.contexts.set(u,r))),!(r&&r.get())&&(this.resetContextKeys(),r&&r.set(!0))}resetContextKeys(){this.contexts.forEach(u=>{u.get()&&u.reset()})}pick(u,r={},i=S.CancellationToken.None){return this.controller.pick(u,r,i)}createQuickPick(){return this.controller.createQuickPick()}updateStyles(){this.controller.applyStyles(this.computeStyles())}computeStyles(){return{widget:Object.assign({},C.computeStyles(this.theme,{quickInputBackground:w.quickInputBackground,quickInputForeground:w.quickInputForeground,quickInputTitleBackground:w.quickInputTitleBackground,contrastBorder:w.contrastBorder,widgetShadow:w.widgetShadow})),inputBox:C.computeStyles(this.theme,{inputForeground:w.inputForeground,inputBackground:w.inputBackground,inputBorder:w.inputBorder,inputValidationInfoBackground:w.inputValidationInfoBackground,inputValidationInfoForeground:w.inputValidationInfoForeground,inputValidationInfoBorder:w.inputValidationInfoBorder,inputValidationWarningBackground:w.inputValidationWarningBackground,inputValidationWarningForeground:w.inputValidationWarningForeground,inputValidationWarningBorder:w.inputValidationWarningBorder,inputValidationErrorBackground:w.inputValidationErrorBackground,inputValidationErrorForeground:w.inputValidationErrorForeground,inputValidationErrorBorder:w.inputValidationErrorBorder}),countBadge:C.computeStyles(this.theme,{badgeBackground:w.badgeBackground,badgeForeground:w.badgeForeground,badgeBorder:w.contrastBorder}),button:C.computeStyles(this.theme,{buttonForeground:w.buttonForeground,buttonBackground:w.buttonBackground,buttonHoverBackground:w.buttonHoverBackground,buttonBorder:w.contrastBorder}),progressBar:C.computeStyles(this.theme,{progressBarBackground:w.progressBarBackground}),list:C.computeStyles(this.theme,{listBackground:w.quickInputBackground,listInactiveFocusForeground:w.listFocusForeground,listInactiveFocusBackground:w.quickInputListFocusBackground,listFocusOutline:w.activeContrastBorder,listInactiveFocusOutline:w.activeContrastBorder,pickerGroupBorder:w.pickerGroupBorder,pickerGroupForeground:w.pickerGroupForeground})}}};s=Me([_e(0,N.IInstantiationService),_e(1,d.IContextKeyService),_e(2,M.IThemeService),_e(3,g.IAccessibilityService),_e(4,b.ILayoutService)],s),e.QuickInputService=s}),define(Q[653],J([0,1,13,11,23,9,16,65,139,28,652,88,357]),function(q,e,b,N,M,w,S,C,d,g,p,c){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.QuickInputEditorWidget=e.QuickInputEditorContribution=e.StandaloneQuickInputServiceImpl=e.EditorScopedQuickInputServiceImpl=void 0;let o=class extends p.QuickInputService{constructor(i,n,t,l,h,m){super(n,t,l,h,m);this.host=void 0;const _=a.get(i);this.host={_serviceBrand:void 0,get container(){return _.widget.getDomNode()},get dimension(){return i.getLayoutInfo()},get onDidLayout(){return i.onDidLayoutChange},focus:()=>i.focus()}}createController(){return super.createController(this.host)}};o=Me([_e(1,w.IInstantiationService),_e(2,S.IContextKeyService),_e(3,N.IThemeService),_e(4,C.IAccessibilityService),_e(5,d.ILayoutService)],o),e.EditorScopedQuickInputServiceImpl=o;let s=class{constructor(i,n){this.instantiationService=i,this.codeEditorService=n,this.mapEditorToService=new Map}get activeService(){const i=this.codeEditorService.getFocusedCodeEditor();if(!i)throw new Error("Quick input service needs a focused editor to work.");let n=this.mapEditorToService.get(i);if(!n){const t=n=this.instantiationService.createInstance(o,i);this.mapEditorToService.set(i,n),c.once(i.onDidDispose)(()=>{t.dispose(),this.mapEditorToService.delete(i)})}return n}get quickAccess(){return this.activeService.quickAccess}pick(i,n={},t=M.CancellationToken.None){return this.activeService.pick(i,n,t)}createQuickPick(){return this.activeService.createQuickPick()}};s=Me([_e(0,w.IInstantiationService),_e(1,g.ICodeEditorService)],s),e.StandaloneQuickInputServiceImpl=s;class a{constructor(i){this.editor=i,this.widget=new u(this.editor)}static get(i){return i.getContribution(a.ID)}dispose(){this.widget.dispose()}}e.QuickInputEditorContribution=a,a.ID="editor.controller.quickInput";class u{constructor(i){this.codeEditor=i,this.domNode=document.createElement("div"),this.codeEditor.addOverlayWidget(this)}getId(){return u.ID}getDomNode(){return this.domNode}getPosition(){return{preference:2}}dispose(){this.codeEditor.removeOverlayWidget(this)}}e.QuickInputEditorWidget=u,u.ID="editor.contrib.quickInputWidget",b.registerEditorContribution(a.ID,a)}),define(Q[654],J([0,1,82,11,22,27]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SeverityIcon=void 0;var S;(function(C){function d(g){switch(g){case b.default.Ignore:return"severity-ignore "+w.Codicon.info.classNames;case b.default.Info:return w.Codicon.info.classNames;case b.default.Warning:return w.Codicon.warning.classNames;case b.default.Error:return w.Codicon.error.classNames;default:return""}}C.className=d})(S=e.SeverityIcon||(e.SeverityIcon={})),N.registerThemingParticipant((C,d)=>{const g=C.getColor(M.problemsErrorIconForeground);if(g){const o=w.Codicon.error.cssSelector;d.addRule(` + .monaco-editor .zone-widget ${o}, + .markers-panel .marker-icon${o}, + .extensions-viewlet > .extensions ${o} { + color: ${g}; + } + `)}const p=C.getColor(M.problemsWarningIconForeground);if(p){const o=w.Codicon.warning.cssSelector;d.addRule(` + .monaco-editor .zone-widget ${o}, + .markers-panel .marker-icon${o}, + .extensions-viewlet > .extensions ${o}, + .extension-editor ${o} { + color: ${p}; + } + `)}const c=C.getColor(M.problemsInfoIconForeground);if(c){const o=w.Codicon.info.cssSelector;d.addRule(` + .monaco-editor .zone-widget ${o}, + .markers-panel .marker-icon${o}, + .extensions-viewlet > .extensions ${o}, + .extension-editor ${o} { + color: ${c}; + } + `)}})}),define(Q[655],J([0,1,480,7,2,85,3,22,11,29,61,159,19,6,118,44,654,58,34,16,189,9,8,115,343]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l,h,m,_){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.editorMarkerNavigationBackground=e.editorMarkerNavigationInfo=e.editorMarkerNavigationWarning=e.editorMarkerNavigationError=e.MarkerNavigationWidget=void 0;class f{constructor(E,T,O,A,B){this._openerService=A,this._labelService=B,this._lines=0,this._longestLineLength=0,this._relatedDiagnostics=new WeakMap,this._disposables=new M.DisposableStore,this._editor=T;const F=document.createElement("div");F.className="descriptioncontainer",this._messageBlock=document.createElement("div"),this._messageBlock.classList.add("message"),this._messageBlock.setAttribute("aria-live","assertive"),this._messageBlock.setAttribute("role","alert"),F.appendChild(this._messageBlock),this._relatedBlock=document.createElement("div"),F.appendChild(this._relatedBlock),this._disposables.add(N.addStandardDisposableListener(this._relatedBlock,"click",D=>{D.preventDefault();const R=this._relatedDiagnostics.get(D.target);R&&O(R)})),this._scrollable=new p.ScrollableElement(F,{horizontal:1,vertical:1,useShadows:!1,horizontalScrollbarSize:3,verticalScrollbarSize:3}),E.appendChild(this._scrollable.getDomNode()),this._disposables.add(this._scrollable.onScroll(D=>{F.style.left=`-${D.scrollLeft}px`,F.style.top=`-${D.scrollTop}px`})),this._disposables.add(this._scrollable)}dispose(){M.dispose(this._disposables)}update(E){const{source:T,message:O,relatedInformation:A,code:B}=E;let F=((T==null?void 0:T.length)||0)+"()".length;B&&(typeof B=="string"?F+=B.length:F+=B.value.length);const D=m.splitLines(O);this._lines=D.length,this._longestLineLength=0;for(const Y of D)this._longestLineLength=Math.max(Y.length+F,this._longestLineLength);N.clearNode(this._messageBlock),this._messageBlock.setAttribute("aria-label",this.getAriaLabel(E)),this._editor.applyFontInfo(this._messageBlock);let R=this._messageBlock;for(const Y of D)R=document.createElement("div"),R.innerText=Y,Y===""&&(R.style.height=this._messageBlock.style.lineHeight),this._messageBlock.appendChild(R);if(T||B){const Y=document.createElement("span");if(Y.classList.add("details"),R.appendChild(Y),T){const ee=document.createElement("span");ee.innerText=T,ee.classList.add("source"),Y.appendChild(ee)}if(B)if(typeof B=="string"){const ee=document.createElement("span");ee.innerText=`(${B})`,ee.classList.add("code"),Y.appendChild(ee)}else{this._codeLink=N.$("a.code-link"),this._codeLink.setAttribute("href",`${B.target.toString()}`),this._codeLink.onclick=se=>{this._openerService.open(B.target),se.preventDefault(),se.stopPropagation()};const ee=N.append(this._codeLink,N.$("span"));ee.innerText=B.value,Y.appendChild(this._codeLink)}}if(N.clearNode(this._relatedBlock),this._editor.applyFontInfo(this._relatedBlock),o.isNonEmptyArray(A)){const Y=this._relatedBlock.appendChild(document.createElement("div"));Y.style.paddingTop=`${Math.floor(this._editor.getOption(53)*.66)}px`,this._lines+=1;for(const ee of A){let se=document.createElement("div"),ne=document.createElement("a");ne.classList.add("filename"),ne.innerText=`${c.getBaseLabel(ee.resource)}(${ee.startLineNumber}, ${ee.startColumn}): `,ne.title=this._labelService.getUriLabel(ee.resource),this._relatedDiagnostics.set(ne,ee);let le=document.createElement("span");le.innerText=ee.message,se.appendChild(ne),se.appendChild(le),this._lines+=1,Y.appendChild(se)}}const W=this._editor.getOption(38),x=Math.ceil(W.typicalFullwidthCharacterWidth*this._longestLineLength*.75),K=W.lineHeight*this._lines;this._scrollable.setScrollDimensions({scrollWidth:x,scrollHeight:K})}layout(E,T){this._scrollable.getDomNode().style.height=`${E}px`,this._scrollable.getDomNode().style.width=`${T}px`,this._scrollable.setScrollDimensions({width:T,height:E})}getHeightInLines(){return Math.min(17,this._lines)}getAriaLabel(E){let T="";switch(E.severity){case w.MarkerSeverity.Error:T=b.localize(0,null);break;case w.MarkerSeverity.Warning:T=b.localize(1,null);break;case w.MarkerSeverity.Info:T=b.localize(2,null);break;case w.MarkerSeverity.Hint:T=b.localize(3,null);break}let O=b.localize(4,null,T,E.startLineNumber+":"+E.startColumn);const A=this._editor.getModel();return A&&E.startLineNumber<=A.getLineCount()&&E.startLineNumber>=1&&(O=`${A.getLineContent(E.startLineNumber)}, ${O}`),O}}let v=class Kt extends a.PeekViewWidget{constructor(E,T,O,A,B,F,D){super(E,{showArrow:!0,showFrame:!0,isAccessible:!0},B);this._themeService=T,this._openerService=O,this._menuService=A,this._contextKeyService=F,this._labelService=D,this._callOnDispose=new M.DisposableStore,this._onDidSelectRelatedInformation=new s.Emitter,this.onDidSelectRelatedInformation=this._onDidSelectRelatedInformation.event,this._severity=w.MarkerSeverity.Warning,this._backgroundColor=g.Color.white,this._applyTheme(T.getColorTheme()),this._callOnDispose.add(T.onDidColorThemeChange(this._applyTheme.bind(this))),this.create()}_applyTheme(E){this._backgroundColor=E.getColor(e.editorMarkerNavigationBackground);let T=e.editorMarkerNavigationError;this._severity===w.MarkerSeverity.Warning?T=e.editorMarkerNavigationWarning:this._severity===w.MarkerSeverity.Info&&(T=e.editorMarkerNavigationInfo);const O=E.getColor(T);this.style({arrowColor:O,frameColor:O,headerBackgroundColor:this._backgroundColor,primaryHeadingColor:E.getColor(a.peekViewTitleForeground),secondaryHeadingColor:E.getColor(a.peekViewTitleInfoForeground)})}_applyStyles(){this._parentContainer&&(this._parentContainer.style.backgroundColor=this._backgroundColor?this._backgroundColor.toString():""),super._applyStyles()}dispose(){this._callOnDispose.dispose(),super.dispose()}_fillHead(E){super._fillHead(E),this._disposables.add(this._actionbarWidget.actionRunner.onBeforeRun(A=>this.editor.focus()));const T=[],O=this._menuService.createMenu(Kt.TitleMenu,this._contextKeyService);l.createAndFillInActionBarActions(O,void 0,T),this._actionbarWidget.push(T,{label:!1,icon:!0,index:0}),O.dispose()}_fillTitleIcon(E){this._icon=N.append(E,N.$(""))}_fillBody(E){this._parentContainer=E,E.classList.add("marker-widget"),this._parentContainer.tabIndex=0,this._parentContainer.setAttribute("role","tooltip"),this._container=document.createElement("div"),E.appendChild(this._container),this._message=new f(this._container,this.editor,T=>this._onDidSelectRelatedInformation.fire(T),this._openerService,this._labelService),this._disposables.add(this._message)}show(){throw new Error("call showAtMarker")}showAtMarker(E,T,O){this._container.classList.remove("stale"),this._message.update(E),this._severity=E.severity,this._applyTheme(this._themeService.getColorTheme());let A=S.Range.lift(E);const B=this.editor.getPosition();let F=B&&A.containsPosition(B)?B:A.getStartPosition();super.show(F,this.computeRequiredHeight());const D=this.editor.getModel();if(D){const R=O>1?b.localize(5,null,T,O):b.localize(6,null,T,O);this.setTitle(u.basename(D.uri),R)}this._icon.className=`codicon ${r.SeverityIcon.className(w.MarkerSeverity.toSeverity(this._severity))}`,this.editor.revealPositionNearTop(F,0),this.editor.focus()}updateMarker(E){this._container.classList.remove("stale"),this._message.update(E)}showStale(){this._container.classList.add("stale"),this._relayout()}_doLayoutBody(E,T){super._doLayoutBody(E,T),this._heightInPixel=E,this._message.layout(E,T),this._container.style.height=`${E}px`}_onWidth(E){this._message.layout(this._heightInPixel,E)}_relayout(){super._relayout(this.computeRequiredHeight())}computeRequiredHeight(){return 3+this._message.getHeightInLines()}};v.TitleMenu=new n.MenuId("gotoErrorTitleMenu"),v=Me([_e(1,d.IThemeService),_e(2,i.IOpenerService),_e(3,n.IMenuService),_e(4,h.IInstantiationService),_e(5,t.IContextKeyService),_e(6,_.ILabelService)],v),e.MarkerNavigationWidget=v;let y=C.oneOf(C.editorErrorForeground,C.editorErrorBorder),L=C.oneOf(C.editorWarningForeground,C.editorWarningBorder),I=C.oneOf(C.editorInfoForeground,C.editorInfoBorder);e.editorMarkerNavigationError=C.registerColor("editorMarkerNavigationError.background",{dark:y,light:y,hc:y},b.localize(7,null)),e.editorMarkerNavigationWarning=C.registerColor("editorMarkerNavigationWarning.background",{dark:L,light:L,hc:L},b.localize(8,null)),e.editorMarkerNavigationInfo=C.registerColor("editorMarkerNavigationInfo.background",{dark:I,light:I,hc:I},b.localize(9,null)),e.editorMarkerNavigationBackground=C.registerColor("editorMarkerNavigation.background",{dark:"#2D2D30",light:g.Color.white,hc:"#0C141F"},b.localize(10,null)),d.registerThemingParticipant((k,E)=>{const T=k.getColor(C.textLinkForeground);T&&(E.addRule(`.monaco-editor .marker-widget a { color: ${T}; }`),E.addRule(`.monaco-editor .marker-widget a.code-link span:hover { color: ${T}; }`))})}),define(Q[80],J([0,1,33,11,6,528,185,15,27]),function(q,e,b,N,M,w,S,C,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.widgetClose=e.iconsSchemaId=e.getIconRegistry=e.registerIcon=e.Extensions=void 0,e.Extensions={IconContribution:"base.contributions.icons"};class g{constructor(){this._onDidChange=new M.Emitter,this.onDidChange=this._onDidChange.event,this.iconSchema={definitions:{icons:{type:"object",properties:{fontId:{type:"string",description:w.localize(0,null)},fontCharacter:{type:"string",description:w.localize(1,null)}},additionalProperties:!1,defaultSnippets:[{body:{fontCharacter:"\\\\e030"}}]}},type:"object",properties:{}},this.iconReferenceSchema={type:"string",pattern:`^${d.CSSIcon.iconNameExpression}$`,enum:[],enumDescriptions:[]},this.iconsById={},this.iconFontsById={}}registerIcon(i,n,t,l){const h=this.iconsById[i];if(h){if(t&&!h.description){h.description=t,this.iconSchema.properties[i].markdownDescription=`${t} $(${i})`;const f=this.iconReferenceSchema.enum.indexOf(i);f!==-1&&(this.iconReferenceSchema.enumDescriptions[f]=t),this._onDidChange.fire()}return h}let m={id:i,description:t,defaults:n,deprecationMessage:l};this.iconsById[i]=m;let _={$ref:"#/definitions/icons"};return l&&(_.deprecationMessage=l),t&&(_.markdownDescription=`${t}: $(${i})`),this.iconSchema.properties[i]=_,this.iconReferenceSchema.enum.push(i),this.iconReferenceSchema.enumDescriptions.push(t||""),this._onDidChange.fire(),{id:i}}getIcons(){return Object.keys(this.iconsById).map(i=>this.iconsById[i])}getIcon(i){return this.iconsById[i]}getIconSchema(){return this.iconSchema}getIconFont(i){return this.iconFontsById[i]}toString(){const i=(h,m)=>h.id.localeCompare(m.id),n=h=>{for(;N.ThemeIcon.isThemeIcon(h.defaults);)h=this.iconsById[h.defaults.id];return`codicon codicon-${h?h.id:""}`};let t=[];t.push("| preview | identifier | default codicon ID | description"),t.push("| ----------- | --------------------------------- | --------------------------------- | --------------------------------- |");const l=Object.keys(this.iconsById).map(h=>this.iconsById[h]);for(const h of l.filter(m=>!!m.description).sort(i))t.push(`||${h.id}|${N.ThemeIcon.isThemeIcon(h.defaults)?h.defaults.id:h.id}|${h.description||""}|`);t.push("| preview | identifier "),t.push("| ----------- | --------------------------------- |");for(const h of l.filter(m=>!N.ThemeIcon.isThemeIcon(m.defaults)).sort(i))t.push(`||${h.id}|`);return t.join(` +`)}}const p=new g;b.Registry.add(e.Extensions.IconContribution,p);function c(r,i,n,t){return p.registerIcon(r,i,n,t)}e.registerIcon=c;function o(){return p}e.getIconRegistry=o;function s(){for(const r of d.iconRegistry.all)p.registerIcon(r.id,r.definition,r.description);d.iconRegistry.onDidRegister(r=>p.registerIcon(r.id,r.definition,r.description))}s(),e.iconsSchemaId="vscode://schemas/icons";let a=b.Registry.as(S.Extensions.JSONContribution);a.registerSchema(e.iconsSchemaId,p.getIconSchema());const u=new C.RunOnceScheduler(()=>a.notifySchemaChanged(e.iconsSchemaId),200);p.onDidChange(()=>{u.isScheduled()||u.schedule()}),e.widgetClose=c("widget-close",d.Codicon.close,w.localize(2,null))}),define(Q[656],J([0,1,450,7,30,83,61,48,2,69,13,28,38,113,14,49,129,63,16,22,11,27,80,333]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l,h,m){"use strict";var _;Object.defineProperty(e,"__esModule",{value:!0}),e.DiffReview=void 0;const f=3;class v{constructor(F,D,R,W){this.originalLineStart=F,this.originalLineEnd=D,this.modifiedLineStart=R,this.modifiedLineEnd=W}getType(){return this.originalLineStart===0?1:this.modifiedLineStart===0?2:0}}class y{constructor(F){this.entries=F}}const L=m.registerIcon("diff-review-insert",h.Codicon.add,b.localize(0,null)),I=m.registerIcon("diff-review-remove",h.Codicon.remove,b.localize(1,null)),k=m.registerIcon("diff-review-close",h.Codicon.close,b.localize(2,null));class E extends d.Disposable{constructor(F){super();this._width=0,this._diffEditor=F,this._isVisible=!1,this.shadow=M.createFastDomNode(document.createElement("div")),this.shadow.setClassName("diff-review-shadow"),this.actionBarContainer=M.createFastDomNode(document.createElement("div")),this.actionBarContainer.setClassName("diff-review-actions"),this._actionBar=this._register(new w.ActionBar(this.actionBarContainer.domNode)),this._actionBar.push(new C.Action("diffreview.close",b.localize(3,null),"close-diff-review "+l.ThemeIcon.asClassName(k),!0,()=>(this.hide(),Promise.resolve(null))),{label:!1,icon:!0}),this.domNode=M.createFastDomNode(document.createElement("div")),this.domNode.setClassName("diff-review monaco-editor-background"),this._content=M.createFastDomNode(document.createElement("div")),this._content.setClassName("diff-review-content"),this._content.setAttribute("role","code"),this.scrollbar=this._register(new S.DomScrollableElement(this._content.domNode,{})),this.domNode.domNode.appendChild(this.scrollbar.getDomNode()),this._register(F.onDidUpdateDiff(()=>{!this._isVisible||(this._diffs=this._compute(),this._render())})),this._register(F.getModifiedEditor().onDidChangeCursorPosition(()=>{!this._isVisible||this._render()})),this._register(N.addStandardDisposableListener(this.domNode.domNode,"click",D=>{D.preventDefault();let R=N.findParentWithClass(D.target,"diff-review-row");R&&this._goToRow(R)})),this._register(N.addStandardDisposableListener(this.domNode.domNode,"keydown",D=>{(D.equals(18)||D.equals(2048|18)||D.equals(512|18))&&(D.preventDefault(),this._goToRow(this._getNextRow())),(D.equals(16)||D.equals(2048|16)||D.equals(512|16))&&(D.preventDefault(),this._goToRow(this._getPrevRow())),(D.equals(9)||D.equals(2048|9)||D.equals(512|9)||D.equals(1024|9))&&(D.preventDefault(),this.hide()),(D.equals(10)||D.equals(3))&&(D.preventDefault(),this.accept())})),this._diffs=[],this._currentDiff=null}prev(){let F=0;if(this._isVisible||(this._diffs=this._compute()),this._isVisible){let R=-1;for(let W=0,x=this._diffs.length;W0){const te=F[se-1];te.originalEndLineNumber===0?oe=te.originalStartLineNumber+1:oe=te.originalEndLineNumber+1,te.modifiedEndLineNumber===0?ae=te.modifiedStartLineNumber+1:ae=te.modifiedEndLineNumber+1}let G=$-f+1,j=ie-f+1;if(Goe){const te=oe-G;G=G+te,j=j+te}if(j>ae){const te=ae-j;G=G+te,j=j+te}U[H++]=new v($,G,ie,j)}W[x++]=new y(U)}let K=W[0].entries,Y=[],ee=0;for(let se=1,ne=W.length;sele)&&(le=he),re!==0&&(X===0||rez)&&(z=ce)}let P=document.createElement("div");P.className="diff-review-row";let V=document.createElement("div");V.className="diff-review-cell diff-review-summary";const U=le-ne+1,H=z-X+1;V.appendChild(document.createTextNode(`${Y+1}/${this._diffs.length}: @@ -${ne},${U} +${X},${H} @@`)),P.setAttribute("data-line",String(X));const $=j=>j===0?b.localize(4,null):j===1?b.localize(5,null):b.localize(6,null,j),ie=$(U),oe=$(H);P.setAttribute("aria-label",b.localize(7,null,Y+1,this._diffs.length,ne,ie,X,oe)),P.appendChild(V),P.setAttribute("role","listitem"),se.appendChild(P);const ae=D.get(53);let G=X;for(let j=0,te=ee.length;j>>0,ee=new Uint32Array(2);ee[0]=x.length,ee[1]=Y;const se=new s.LineTokens(ee,x),ne=i.ViewLineRenderingData.isBasicASCII(x,F.mightContainNonBasicASCII()),le=i.ViewLineRenderingData.containsRTL(x,ne,F.mightContainRTL());return r.renderViewLine2(new r.RenderLineInput(K.isMonospace&&!D.get(26),K.canUseHalfwidthRightwardsArrow,x,!1,ne,le,0,se,[],R,0,K.spaceWidth,K.middotWidth,K.wsmiddotWidth,D.get(100),D.get(83),D.get(77),D.get(39)!==o.EditorFontLigatures.OFF,null)).html}}e.DiffReview=E,E._ttPolicy=(_=window.trustedTypes)===null||_===void 0?void 0:_.createPolicy("diffReview",{createHTML:B=>B}),l.registerThemingParticipant((B,F)=>{const D=B.getColor(u.editorLineNumbers);D&&F.addRule(`.monaco-diff-editor .diff-review-line-number { color: ${D}; }`);const R=B.getColor(t.scrollbarShadow);R&&F.addRule(`.monaco-diff-editor .diff-review-shadow { box-shadow: ${R} 0 -6px 6px -6px inset; }`)});class T extends p.EditorAction{constructor(){super({id:"editor.action.diffReview.next",label:b.localize(13,null),alias:"Go to Next Difference",precondition:n.ContextKeyExpr.has("isInDiffEditor"),kbOpts:{kbExpr:null,primary:65,weight:100}})}run(F,D){const R=A(F);R&&R.diffReviewNext()}}class O extends p.EditorAction{constructor(){super({id:"editor.action.diffReview.prev",label:b.localize(14,null),alias:"Go to Previous Difference",precondition:n.ContextKeyExpr.has("isInDiffEditor"),kbOpts:{kbExpr:null,primary:1024|65,weight:100}})}run(F,D){const R=A(F);R&&R.diffReviewPrev()}}function A(B){const F=B.get(c.ICodeEditorService),D=F.listDiffEditors(),R=F.getActiveCodeEditor();if(!R)return null;for(let W=0,x=D.length;W!this._zonesMap[String(ce.id)])}clean(re){this._zones.length>0&&re.changeViewZones(ce=>{for(const me of this._zones)ce.removeZone(me)}),this._zones=[],this._zonesMap={},this._decorations=re.deltaDecorations(this._decorations,[])}apply(re,ce,me,Ce){const be=Ce?p.StableEditorScrollState.capture(re):null;re.changeViewZones(Le=>{for(const De of this._zones)Le.removeZone(De);for(const De of this._inlineDiffMargins)De.dispose();this._zones=[],this._zonesMap={},this._inlineDiffMargins=[];for(let De=0,Re=me.zones.length;Dehe});let X=class Ge extends d.Disposable{constructor(re,ce,me,Ce,be,Le,De,Re,Ee,Ae,Se,we){super();this._editorProgressService=we,this._onDidDispose=this._register(new C.Emitter),this.onDidDispose=this._onDidDispose.event,this._onDidUpdateDiff=this._register(new C.Emitter),this.onDidUpdateDiff=this._onDidUpdateDiff.event,this._onDidContentSizeChange=this._register(new C.Emitter),this._lastOriginalWarning=null,this._lastModifiedWarning=null,this._editorWorkerService=be,this._codeEditorService=Re,this._contextKeyService=this._register(Le.createScoped(re)),this._instantiationService=De.createChild(new y.ServiceCollection([f.IContextKeyService,this._contextKeyService])),this._contextKeyService.createKey("isInDiffEditor",!0),this._themeService=Ee,this._notificationService=Ae,this._id=++ee,this._state=0,this._updatingDiffProgress=null,this._domElement=re,ce=ce||{},this._renderSideBySide=!0,typeof ce.renderSideBySide!="undefined"&&(this._renderSideBySide=ce.renderSideBySide),this._maxComputationTime=5e3,typeof ce.maxComputationTime!="undefined"&&(this._maxComputationTime=ce.maxComputationTime),this._ignoreTrimWhitespace=!0,typeof ce.ignoreTrimWhitespace!="undefined"&&(this._ignoreTrimWhitespace=ce.ignoreTrimWhitespace),this._renderIndicators=!0,typeof ce.renderIndicators!="undefined"&&(this._renderIndicators=ce.renderIndicators),this._originalIsEditable=a.boolean(ce.originalEditable,!1),this._diffCodeLens=a.boolean(ce.diffCodeLens,!1),this._diffWordWrap=G(ce.diffWordWrap,"inherit"),typeof ce.isInEmbeddedEditor!="undefined"?this._contextKeyService.createKey("isInEmbeddedDiffEditor",ce.isInEmbeddedEditor):this._contextKeyService.createKey("isInEmbeddedDiffEditor",!1),this._renderOverviewRuler=!0,typeof ce.renderOverviewRuler!="undefined"&&(this._renderOverviewRuler=Boolean(ce.renderOverviewRuler)),this._updateDecorationsRunner=this._register(new S.RunOnceScheduler(()=>this._updateDecorations(),0)),this._containerDomElement=document.createElement("div"),this._containerDomElement.className=Ge._getClassName(this._themeService.getColorTheme(),this._renderSideBySide),this._containerDomElement.style.position="relative",this._containerDomElement.style.height="100%",this._domElement.appendChild(this._containerDomElement),this._overviewViewportDomElement=M.createFastDomNode(document.createElement("div")),this._overviewViewportDomElement.setClassName("diffViewport"),this._overviewViewportDomElement.setPosition("absolute"),this._overviewDomElement=document.createElement("div"),this._overviewDomElement.className="diffOverview",this._overviewDomElement.style.position="absolute",this._overviewDomElement.appendChild(this._overviewViewportDomElement.domNode),this._register(N.addStandardDisposableListener(this._overviewDomElement,"mousedown",fe=>{this._modifiedEditor.delegateVerticalScrollbarMouseDown(fe)})),this._renderOverviewRuler&&this._containerDomElement.appendChild(this._overviewDomElement),this._originalDomNode=document.createElement("div"),this._originalDomNode.className="editor original",this._originalDomNode.style.position="absolute",this._originalDomNode.style.height="100%",this._containerDomElement.appendChild(this._originalDomNode),this._modifiedDomNode=document.createElement("div"),this._modifiedDomNode.className="editor modified",this._modifiedDomNode.style.position="absolute",this._modifiedDomNode.style.height="100%",this._containerDomElement.appendChild(this._modifiedDomNode),this._beginUpdateDecorationsTimeout=-1,this._currentlyChangingViewZones=!1,this._diffComputationToken=0,this._originalEditorState=new Y(Se,Ce),this._modifiedEditorState=new Y(Se,Ce),this._isVisible=!0,this._isHandlingScrollEvent=!1,this._elementSizeObserver=this._register(new D.ElementSizeObserver(this._containerDomElement,ce.dimension,()=>this._onDidContainerSizeChanged())),ce.automaticLayout&&this._elementSizeObserver.startObserving(),this._diffComputationResult=null,this._originalEditor=this._createLeftHandSideEditor(ce,me.originalEditor||{}),this._modifiedEditor=this._createRightHandSideEditor(ce,me.modifiedEditor||{}),this._originalOverviewRuler=null,this._modifiedOverviewRuler=null,this._reviewPane=new s.DiffReview(this),this._containerDomElement.appendChild(this._reviewPane.domNode.domNode),this._containerDomElement.appendChild(this._reviewPane.shadow.domNode),this._containerDomElement.appendChild(this._reviewPane.actionBarContainer.domNode),this._enableSplitViewResizing=!0,typeof ce.enableSplitViewResizing!="undefined"&&(this._enableSplitViewResizing=ce.enableSplitViewResizing),this._renderSideBySide?this._setStrategy(new $(this._createDataSource(),this._enableSplitViewResizing)):this._setStrategy(new oe(this._createDataSource(),this._enableSplitViewResizing)),this._register(Ee.onDidColorThemeChange(fe=>{this._strategy&&this._strategy.applyColors(fe)&&this._updateDecorationsRunner.schedule(),this._containerDomElement.className=Ge._getClassName(this._themeService.getColorTheme(),this._renderSideBySide)}));const ye=A.EditorExtensionsRegistry.getDiffEditorContributions();for(const fe of ye)try{this._register(De.createInstance(fe.ctor,this))}catch(de){B.onUnexpectedError(de)}this._codeEditorService.addDiffEditor(this)}_setState(re){this._state!==re&&(this._state=re,this._updatingDiffProgress&&(this._updatingDiffProgress.done(),this._updatingDiffProgress=null),this._state===1&&(this._updatingDiffProgress=this._editorProgressService.show(!0,1e3)))}diffReviewNext(){this._reviewPane.next()}diffReviewPrev(){this._reviewPane.prev()}static _getClassName(re,ce){let me="monaco-diff-editor monaco-editor-background ";return ce&&(me+="side-by-side "),me+=k.getThemeTypeSelector(re.type),me}_recreateOverviewRulers(){!this._renderOverviewRuler||(this._originalOverviewRuler&&(this._overviewDomElement.removeChild(this._originalOverviewRuler.getDomNode()),this._originalOverviewRuler.dispose()),this._originalEditor.hasModel()&&(this._originalOverviewRuler=this._originalEditor.createOverviewRuler("original diffOverviewRuler"),this._overviewDomElement.appendChild(this._originalOverviewRuler.getDomNode())),this._modifiedOverviewRuler&&(this._overviewDomElement.removeChild(this._modifiedOverviewRuler.getDomNode()),this._modifiedOverviewRuler.dispose()),this._modifiedEditor.hasModel()&&(this._modifiedOverviewRuler=this._modifiedEditor.createOverviewRuler("modified diffOverviewRuler"),this._overviewDomElement.appendChild(this._modifiedOverviewRuler.getDomNode())),this._layoutOverviewRulers())}_createLeftHandSideEditor(re,ce){const me=this._createInnerEditor(this._instantiationService,this._originalDomNode,this._adjustOptionsForLeftHandSide(re),ce);this._register(me.onDidScrollChange(be=>{this._isHandlingScrollEvent||!be.scrollTopChanged&&!be.scrollLeftChanged&&!be.scrollHeightChanged||(this._isHandlingScrollEvent=!0,this._modifiedEditor.setScrollPosition({scrollLeft:be.scrollLeft,scrollTop:be.scrollTop}),this._isHandlingScrollEvent=!1,this._layoutOverviewViewport())})),this._register(me.onDidChangeViewZones(()=>{this._onViewZonesChanged()})),this._register(me.onDidChangeConfiguration(be=>{!me.getModel()||(be.hasChanged(38)&&this._updateDecorationsRunner.schedule(),be.hasChanged(125)&&(this._updateDecorationsRunner.cancel(),this._updateDecorations()))})),this._register(me.onDidChangeModelContent(()=>{this._isVisible&&this._beginUpdateDecorationsSoon()}));const Ce=this._contextKeyService.createKey("isInDiffLeftEditor",me.hasWidgetFocus());return this._register(me.onDidFocusEditorWidget(()=>Ce.set(!0))),this._register(me.onDidBlurEditorWidget(()=>Ce.set(!1))),this._register(me.onDidContentSizeChange(be=>{const Le=this._originalEditor.getContentWidth()+this._modifiedEditor.getContentWidth()+Ge.ONE_OVERVIEW_WIDTH,De=Math.max(this._modifiedEditor.getContentHeight(),this._originalEditor.getContentHeight());this._onDidContentSizeChange.fire({contentHeight:De,contentWidth:Le,contentHeightChanged:be.contentHeightChanged,contentWidthChanged:be.contentWidthChanged})})),me}_createRightHandSideEditor(re,ce){const me=this._createInnerEditor(this._instantiationService,this._modifiedDomNode,this._adjustOptionsForRightHandSide(re),ce);this._register(me.onDidScrollChange(be=>{this._isHandlingScrollEvent||!be.scrollTopChanged&&!be.scrollLeftChanged&&!be.scrollHeightChanged||(this._isHandlingScrollEvent=!0,this._originalEditor.setScrollPosition({scrollLeft:be.scrollLeft,scrollTop:be.scrollTop}),this._isHandlingScrollEvent=!1,this._layoutOverviewViewport())})),this._register(me.onDidChangeViewZones(()=>{this._onViewZonesChanged()})),this._register(me.onDidChangeConfiguration(be=>{!me.getModel()||(be.hasChanged(38)&&this._updateDecorationsRunner.schedule(),be.hasChanged(125)&&(this._updateDecorationsRunner.cancel(),this._updateDecorations()))})),this._register(me.onDidChangeModelContent(()=>{this._isVisible&&this._beginUpdateDecorationsSoon()})),this._register(me.onDidChangeModelOptions(be=>{be.tabSize&&this._updateDecorationsRunner.schedule()}));const Ce=this._contextKeyService.createKey("isInDiffRightEditor",me.hasWidgetFocus());return this._register(me.onDidFocusEditorWidget(()=>Ce.set(!0))),this._register(me.onDidBlurEditorWidget(()=>Ce.set(!1))),this._register(me.onDidContentSizeChange(be=>{const Le=this._originalEditor.getContentWidth()+this._modifiedEditor.getContentWidth()+Ge.ONE_OVERVIEW_WIDTH,De=Math.max(this._modifiedEditor.getContentHeight(),this._originalEditor.getContentHeight());this._onDidContentSizeChange.fire({contentHeight:De,contentWidth:Le,contentHeightChanged:be.contentHeightChanged,contentWidthChanged:be.contentWidthChanged})})),me}_createInnerEditor(re,ce,me,Ce){return re.createInstance(o.CodeEditorWidget,ce,me,Ce)}dispose(){this._codeEditorService.removeDiffEditor(this),this._beginUpdateDecorationsTimeout!==-1&&(window.clearTimeout(this._beginUpdateDecorationsTimeout),this._beginUpdateDecorationsTimeout=-1),this._cleanViewZonesAndDecorations(),this._originalOverviewRuler&&(this._overviewDomElement.removeChild(this._originalOverviewRuler.getDomNode()),this._originalOverviewRuler.dispose()),this._modifiedOverviewRuler&&(this._overviewDomElement.removeChild(this._modifiedOverviewRuler.getDomNode()),this._modifiedOverviewRuler.dispose()),this._overviewDomElement.removeChild(this._overviewViewportDomElement.domNode),this._renderOverviewRuler&&this._containerDomElement.removeChild(this._overviewDomElement),this._containerDomElement.removeChild(this._originalDomNode),this._originalEditor.dispose(),this._containerDomElement.removeChild(this._modifiedDomNode),this._modifiedEditor.dispose(),this._strategy.dispose(),this._containerDomElement.removeChild(this._reviewPane.domNode.domNode),this._containerDomElement.removeChild(this._reviewPane.shadow.domNode),this._containerDomElement.removeChild(this._reviewPane.actionBarContainer.domNode),this._reviewPane.dispose(),this._domElement.removeChild(this._containerDomElement),this._onDidDispose.fire(),super.dispose()}getId(){return this.getEditorType()+":"+this._id}getEditorType(){return i.EditorType.IDiffEditor}getLineChanges(){return this._diffComputationResult?this._diffComputationResult.changes:null}getOriginalEditor(){return this._originalEditor}getModifiedEditor(){return this._modifiedEditor}updateOptions(re){let ce=!1;typeof re.renderSideBySide!="undefined"&&this._renderSideBySide!==re.renderSideBySide&&(this._renderSideBySide=re.renderSideBySide,ce=!0),typeof re.maxComputationTime!="undefined"&&(this._maxComputationTime=re.maxComputationTime,this._isVisible&&this._beginUpdateDecorationsSoon());let me=!1;typeof re.ignoreTrimWhitespace!="undefined"&&this._ignoreTrimWhitespace!==re.ignoreTrimWhitespace&&(this._ignoreTrimWhitespace=re.ignoreTrimWhitespace,me=!0),typeof re.renderIndicators!="undefined"&&this._renderIndicators!==re.renderIndicators&&(this._renderIndicators=re.renderIndicators,me=!0),me&&this._beginUpdateDecorations(),this._originalIsEditable=a.boolean(re.originalEditable,this._originalIsEditable),this._diffCodeLens=a.boolean(re.diffCodeLens,this._diffCodeLens),this._diffWordWrap=G(re.diffWordWrap,this._diffWordWrap),this._modifiedEditor.updateOptions(this._adjustOptionsForRightHandSide(re)),this._originalEditor.updateOptions(this._adjustOptionsForLeftHandSide(re)),typeof re.enableSplitViewResizing!="undefined"&&(this._enableSplitViewResizing=re.enableSplitViewResizing),this._strategy.setEnableSplitViewResizing(this._enableSplitViewResizing),ce&&(this._renderSideBySide?this._setStrategy(new $(this._createDataSource(),this._enableSplitViewResizing)):this._setStrategy(new oe(this._createDataSource(),this._enableSplitViewResizing)),this._containerDomElement.className=Ge._getClassName(this._themeService.getColorTheme(),this._renderSideBySide)),typeof re.renderOverviewRuler!="undefined"&&this._renderOverviewRuler!==re.renderOverviewRuler&&(this._renderOverviewRuler=re.renderOverviewRuler,this._renderOverviewRuler?this._containerDomElement.appendChild(this._overviewDomElement):this._containerDomElement.removeChild(this._overviewDomElement))}getModel(){return{original:this._originalEditor.getModel(),modified:this._modifiedEditor.getModel()}}setModel(re){if(re&&(!re.original||!re.modified))throw new Error(re.original?"DiffEditorWidget.setModel: Modified model is null":"DiffEditorWidget.setModel: Original model is null");this._cleanViewZonesAndDecorations(),this._originalEditor.setModel(re?re.original:null),this._modifiedEditor.setModel(re?re.modified:null),this._updateDecorationsRunner.cancel(),re&&(this._originalEditor.setScrollTop(0),this._modifiedEditor.setScrollTop(0)),this._diffComputationResult=null,this._diffComputationToken++,this._setState(0),re&&(this._recreateOverviewRulers(),this._beginUpdateDecorations()),this._layoutOverviewViewport()}getDomNode(){return this._domElement}getVisibleColumnFromPosition(re){return this._modifiedEditor.getVisibleColumnFromPosition(re)}getPosition(){return this._modifiedEditor.getPosition()}setPosition(re){this._modifiedEditor.setPosition(re)}revealLine(re,ce=0){this._modifiedEditor.revealLine(re,ce)}revealLineInCenter(re,ce=0){this._modifiedEditor.revealLineInCenter(re,ce)}revealLineInCenterIfOutsideViewport(re,ce=0){this._modifiedEditor.revealLineInCenterIfOutsideViewport(re,ce)}revealLineNearTop(re,ce=0){this._modifiedEditor.revealLineNearTop(re,ce)}revealPosition(re,ce=0){this._modifiedEditor.revealPosition(re,ce)}revealPositionInCenter(re,ce=0){this._modifiedEditor.revealPositionInCenter(re,ce)}revealPositionInCenterIfOutsideViewport(re,ce=0){this._modifiedEditor.revealPositionInCenterIfOutsideViewport(re,ce)}revealPositionNearTop(re,ce=0){this._modifiedEditor.revealPositionNearTop(re,ce)}getSelection(){return this._modifiedEditor.getSelection()}getSelections(){return this._modifiedEditor.getSelections()}setSelection(re){this._modifiedEditor.setSelection(re)}setSelections(re){this._modifiedEditor.setSelections(re)}revealLines(re,ce,me=0){this._modifiedEditor.revealLines(re,ce,me)}revealLinesInCenter(re,ce,me=0){this._modifiedEditor.revealLinesInCenter(re,ce,me)}revealLinesInCenterIfOutsideViewport(re,ce,me=0){this._modifiedEditor.revealLinesInCenterIfOutsideViewport(re,ce,me)}revealLinesNearTop(re,ce,me=0){this._modifiedEditor.revealLinesNearTop(re,ce,me)}revealRange(re,ce=0,me=!1,Ce=!0){this._modifiedEditor.revealRange(re,ce,me,Ce)}revealRangeInCenter(re,ce=0){this._modifiedEditor.revealRangeInCenter(re,ce)}revealRangeInCenterIfOutsideViewport(re,ce=0){this._modifiedEditor.revealRangeInCenterIfOutsideViewport(re,ce)}revealRangeNearTop(re,ce=0){this._modifiedEditor.revealRangeNearTop(re,ce)}revealRangeNearTopIfOutsideViewport(re,ce=0){this._modifiedEditor.revealRangeNearTopIfOutsideViewport(re,ce)}revealRangeAtTop(re,ce=0){this._modifiedEditor.revealRangeAtTop(re,ce)}getSupportedActions(){return this._modifiedEditor.getSupportedActions()}saveViewState(){const re=this._originalEditor.saveViewState(),ce=this._modifiedEditor.saveViewState();return{original:re,modified:ce}}restoreViewState(re){if(re&&re.original&&re.modified){const ce=re;this._originalEditor.restoreViewState(ce.original),this._modifiedEditor.restoreViewState(ce.modified)}}layout(re){this._elementSizeObserver.observe(re)}focus(){this._modifiedEditor.focus()}hasTextFocus(){return this._originalEditor.hasTextFocus()||this._modifiedEditor.hasTextFocus()}trigger(re,ce,me){this._modifiedEditor.trigger(re,ce,me)}changeDecorations(re){return this._modifiedEditor.changeDecorations(re)}_onDidContainerSizeChanged(){this._doLayout()}_getReviewHeight(){return this._reviewPane.isVisible()?this._elementSizeObserver.getHeight():0}_layoutOverviewRulers(){if(!!this._renderOverviewRuler&&!(!this._originalOverviewRuler||!this._modifiedOverviewRuler)){const re=this._elementSizeObserver.getHeight(),ce=this._getReviewHeight(),me=Ge.ENTIRE_DIFF_OVERVIEW_WIDTH-2*Ge.ONE_OVERVIEW_WIDTH;this._modifiedEditor.getLayoutInfo()&&(this._originalOverviewRuler.setLayout({top:0,width:Ge.ONE_OVERVIEW_WIDTH,right:me+Ge.ONE_OVERVIEW_WIDTH,height:re-ce}),this._modifiedOverviewRuler.setLayout({top:0,right:0,width:Ge.ONE_OVERVIEW_WIDTH,height:re-ce}))}}_onViewZonesChanged(){this._currentlyChangingViewZones||this._updateDecorationsRunner.schedule()}_beginUpdateDecorationsSoon(){this._beginUpdateDecorationsTimeout!==-1&&(window.clearTimeout(this._beginUpdateDecorationsTimeout),this._beginUpdateDecorationsTimeout=-1),this._beginUpdateDecorationsTimeout=window.setTimeout(()=>this._beginUpdateDecorations(),Ge.UPDATE_DIFF_DECORATIONS_DELAY)}static _equals(re,ce){return!re&&!ce?!0:!re||!ce?!1:re.toString()===ce.toString()}_beginUpdateDecorations(){this._beginUpdateDecorationsTimeout=-1;const re=this._originalEditor.getModel(),ce=this._modifiedEditor.getModel();if(!(!re||!ce)){this._diffComputationToken++;const me=this._diffComputationToken;if(this._setState(1),!this._editorWorkerService.canComputeDiff(re.uri,ce.uri)){(!Ge._equals(re.uri,this._lastOriginalWarning)||!Ge._equals(ce.uri,this._lastModifiedWarning))&&(this._lastOriginalWarning=re.uri,this._lastModifiedWarning=ce.uri,this._notificationService.warn(b.localize(2,null)));return}this._editorWorkerService.computeDiff(re.uri,ce.uri,this._ignoreTrimWhitespace,this._maxComputationTime).then(Ce=>{me===this._diffComputationToken&&re===this._originalEditor.getModel()&&ce===this._modifiedEditor.getModel()&&(this._setState(2),this._diffComputationResult=Ce,this._updateDecorationsRunner.schedule(),this._onDidUpdateDiff.fire())},Ce=>{me===this._diffComputationToken&&re===this._originalEditor.getModel()&&ce===this._modifiedEditor.getModel()&&(this._setState(2),this._diffComputationResult=null,this._updateDecorationsRunner.schedule())})}}_cleanViewZonesAndDecorations(){this._originalEditorState.clean(this._originalEditor),this._modifiedEditorState.clean(this._modifiedEditor)}_updateDecorations(){if(!(!this._originalEditor.getModel()||!this._modifiedEditor.getModel())){const re=this._diffComputationResult?this._diffComputationResult.changes:[],ce=this._originalEditorState.getForeignViewZones(this._originalEditor.getWhitespaces()),me=this._modifiedEditorState.getForeignViewZones(this._modifiedEditor.getWhitespaces()),Ce=this._strategy.getEditorsDiffDecorations(re,this._ignoreTrimWhitespace,this._renderIndicators,ce,me);try{this._currentlyChangingViewZones=!0,this._originalEditorState.apply(this._originalEditor,this._originalOverviewRuler,Ce.original,!1),this._modifiedEditorState.apply(this._modifiedEditor,this._modifiedOverviewRuler,Ce.modified,!0)}finally{this._currentlyChangingViewZones=!1}}}_adjustOptionsForSubEditor(re){const ce=Object.assign({},re);return ce.inDiffEditor=!0,ce.automaticLayout=!1,ce.scrollbar=Object.assign({},ce.scrollbar||{}),ce.scrollbar.vertical="visible",ce.folding=!1,ce.codeLens=this._diffCodeLens,ce.fixedOverflowWidgets=!0,ce.minimap=Object.assign({},ce.minimap||{}),ce.minimap.enabled=!1,ce}_adjustOptionsForLeftHandSide(re){const ce=this._adjustOptionsForSubEditor(re);return this._renderSideBySide?ce.wordWrapOverride1=this._diffWordWrap:ce.wordWrapOverride1="off",re.originalAriaLabel&&(ce.ariaLabel=re.originalAriaLabel),ce.readOnly=!this._originalIsEditable,ce.extraEditorClassName="original-in-monaco-diff-editor",Object.assign(Object.assign({},ce),{dimension:{height:0,width:0}})}_adjustOptionsForRightHandSide(re){const ce=this._adjustOptionsForSubEditor(re);return re.modifiedAriaLabel&&(ce.ariaLabel=re.modifiedAriaLabel),ce.wordWrapOverride1=this._diffWordWrap,ce.revealHorizontalRightPadding=a.EditorOptions.revealHorizontalRightPadding.defaultValue+Ge.ENTIRE_DIFF_OVERVIEW_WIDTH,ce.scrollbar.verticalHasArrows=!1,ce.extraEditorClassName="modified-in-monaco-diff-editor",Object.assign(Object.assign({},ce),{dimension:{height:0,width:0}})}doLayout(){this._elementSizeObserver.observe(),this._doLayout()}_doLayout(){const re=this._elementSizeObserver.getWidth(),ce=this._elementSizeObserver.getHeight(),me=this._getReviewHeight(),Ce=this._strategy.layout();this._originalDomNode.style.width=Ce+"px",this._originalDomNode.style.left="0px",this._modifiedDomNode.style.width=re-Ce+"px",this._modifiedDomNode.style.left=Ce+"px",this._overviewDomElement.style.top="0px",this._overviewDomElement.style.height=ce-me+"px",this._overviewDomElement.style.width=Ge.ENTIRE_DIFF_OVERVIEW_WIDTH+"px",this._overviewDomElement.style.left=re-Ge.ENTIRE_DIFF_OVERVIEW_WIDTH+"px",this._overviewViewportDomElement.setWidth(Ge.ENTIRE_DIFF_OVERVIEW_WIDTH),this._overviewViewportDomElement.setHeight(30),this._originalEditor.layout({width:Ce,height:ce-me}),this._modifiedEditor.layout({width:re-Ce-(this._renderOverviewRuler?Ge.ENTIRE_DIFF_OVERVIEW_WIDTH:0),height:ce-me}),(this._originalOverviewRuler||this._modifiedOverviewRuler)&&this._layoutOverviewRulers(),this._reviewPane.layout(ce-me,re,me),this._layoutOverviewViewport()}_layoutOverviewViewport(){const re=this._computeOverviewViewport();re?(this._overviewViewportDomElement.setTop(re.top),this._overviewViewportDomElement.setHeight(re.height)):(this._overviewViewportDomElement.setTop(0),this._overviewViewportDomElement.setHeight(0))}_computeOverviewViewport(){const re=this._modifiedEditor.getLayoutInfo();if(!re)return null;const ce=this._modifiedEditor.getScrollTop(),me=this._modifiedEditor.getScrollHeight(),Ce=Math.max(0,re.height),be=Math.max(0,Ce-2*0),Le=me>0?be/me:0,De=Math.max(0,Math.floor(re.height*Le)),Re=Math.floor(ce*Le);return{height:De,top:Re}}_createDataSource(){return{getWidth:()=>this._elementSizeObserver.getWidth(),getHeight:()=>this._elementSizeObserver.getHeight()-this._getReviewHeight(),getOptions:()=>({renderOverviewRuler:this._renderOverviewRuler}),getContainerDomNode:()=>this._containerDomElement,relayoutEditors:()=>{this._doLayout()},getOriginalEditor:()=>this._originalEditor,getModifiedEditor:()=>this._modifiedEditor}}_setStrategy(re){this._strategy&&this._strategy.dispose(),this._strategy=re,re.applyColors(this._themeService.getColorTheme()),this._diffComputationResult&&this._updateDecorations(),this._doLayout()}_getLineChangeAtOrBeforeLineNumber(re,ce){const me=this._diffComputationResult?this._diffComputationResult.changes:[];if(me.length===0||re=Re?Ce=Le+1:(Ce=Le,be=Le)}return me[Ce]}_getEquivalentLineForOriginalLineNumber(re){const ce=this._getLineChangeAtOrBeforeLineNumber(re,Re=>Re.originalStartLineNumber);if(!ce)return re;const me=ce.originalStartLineNumber+(ce.originalEndLineNumber>0?-1:0),Ce=ce.modifiedStartLineNumber+(ce.modifiedEndLineNumber>0?-1:0),be=ce.originalEndLineNumber>0?ce.originalEndLineNumber-ce.originalStartLineNumber+1:0,Le=ce.modifiedEndLineNumber>0?ce.modifiedEndLineNumber-ce.modifiedStartLineNumber+1:0,De=re-me;return De<=be?Ce+Math.min(De,Le):Ce+Le-be+De}_getEquivalentLineForModifiedLineNumber(re){const ce=this._getLineChangeAtOrBeforeLineNumber(re,Re=>Re.modifiedStartLineNumber);if(!ce)return re;const me=ce.originalStartLineNumber+(ce.originalEndLineNumber>0?-1:0),Ce=ce.modifiedStartLineNumber+(ce.modifiedEndLineNumber>0?-1:0),be=ce.originalEndLineNumber>0?ce.originalEndLineNumber-ce.originalStartLineNumber+1:0,Le=ce.modifiedEndLineNumber>0?ce.modifiedEndLineNumber-ce.modifiedStartLineNumber+1:0,De=re-Ce;return De<=Le?me+Math.min(De,be):me+be-Le+De}getDiffLineInformationForOriginal(re){return this._diffComputationResult?{equivalentLineNumber:this._getEquivalentLineForOriginalLineNumber(re)}:null}getDiffLineInformationForModified(re){return this._diffComputationResult?{equivalentLineNumber:this._getEquivalentLineForModifiedLineNumber(re)}:null}};X.ONE_OVERVIEW_WIDTH=15,X.ENTIRE_DIFF_OVERVIEW_WIDTH=30,X.UPDATE_DIFF_DECORATIONS_DELAY=200,X=Me([_e(3,O.IClipboardService),_e(4,t.IEditorWorkerService),_e(5,f.IContextKeyService),_e(6,v.IInstantiationService),_e(7,c.ICodeEditorService),_e(8,k.IThemeService),_e(9,L.INotificationService),_e(10,E.IContextMenuService),_e(11,F.IEditorProgressService)],X),e.DiffEditorWidget=X;class z extends d.Disposable{constructor(re){super();this._dataSource=re,this._insertColor=null,this._removeColor=null}applyColors(re){const ce=(re.getColor(I.diffInserted)||I.defaultInsertColor).transparent(2),me=(re.getColor(I.diffRemoved)||I.defaultRemoveColor).transparent(2),Ce=!ce.equals(this._insertColor)||!me.equals(this._removeColor);return this._insertColor=ce,this._removeColor=me,Ce}getEditorsDiffDecorations(re,ce,me,Ce,be){be=be.sort((Ee,Ae)=>Ee.afterLineNumber-Ae.afterLineNumber),Ce=Ce.sort((Ee,Ae)=>Ee.afterLineNumber-Ae.afterLineNumber);const Le=this._getViewZones(re,Ce,be,me),De=this._getOriginalEditorDecorations(re,ce,me),Re=this._getModifiedEditorDecorations(re,ce,me);return{original:{decorations:De.decorations,overviewZones:De.overviewZones,zones:Le.original},modified:{decorations:Re.decorations,overviewZones:Re.overviewZones,zones:Le.modified}}}}class P{constructor(re){this._source=re,this._index=-1,this.current=null,this.advance()}advance(){this._index++,this._indexOe.afterLineNumber-Fe.afterLineNumber,pe=(Oe,Fe)=>{if(Fe.domNode===null&&Oe.length>0){const Pe=Oe[Oe.length-1];if(Pe.afterLineNumber===Fe.afterLineNumber&&Pe.domNode===null){Pe.heightInLines+=Fe.heightInLines;return}}Oe.push(Fe)},ve=new P(this._modifiedForeignVZ),ke=new P(this._originalForeignVZ);let Ne=1,Te=1;for(let Oe=0,Fe=this._lineChanges.length;Oe<=Fe;Oe++){const Pe=Oe0?-1:0),ye=Pe.modifiedStartLineNumber+(Pe.modifiedEndLineNumber>0?-1:0),Se=Pe.originalEndLineNumber>0?V._getViewLineCount(this._originalEditor,Pe.originalStartLineNumber,Pe.originalEndLineNumber):0,Ae=Pe.modifiedEndLineNumber>0?V._getViewLineCount(this._modifiedEditor,Pe.modifiedStartLineNumber,Pe.modifiedEndLineNumber):0,fe=Math.max(Pe.originalStartLineNumber,Pe.originalEndLineNumber),de=Math.max(Pe.modifiedStartLineNumber,Pe.modifiedEndLineNumber)):(we+=1e7+Se,ye+=1e7+Ae,fe=we,de=ye);let xe=[],We=[];if(be){let Be;Pe?Pe.originalEndLineNumber>0?Be=Pe.originalStartLineNumber-Ne:Be=Pe.modifiedStartLineNumber-Te:Be=Le.getLineCount()-Ne;for(let He=0;Heje&&We.push({afterLineNumber:Ue,heightInLines:Ye-je,domNode:null,marginDomNode:null})}Pe&&(Ne=(Pe.originalEndLineNumber>0?Pe.originalEndLineNumber:Pe.originalStartLineNumber)+1,Te=(Pe.modifiedEndLineNumber>0?Pe.modifiedEndLineNumber:Pe.modifiedStartLineNumber)+1)}for(;ve.current&&ve.current.afterLineNumber<=de;){let Be;ve.current.afterLineNumber<=ye?Be=we-ye+ve.current.afterLineNumber:Be=fe;let He=null;Pe&&Pe.modifiedStartLineNumber<=ve.current.afterLineNumber&&ve.current.afterLineNumber<=Pe.modifiedEndLineNumber&&(He=this._createOriginalMarginDomNodeForModifiedForeignViewZoneInAddedRegion()),xe.push({afterLineNumber:Be,heightInLines:ve.current.height/ce,domNode:null,marginDomNode:He}),ve.advance()}for(;ke.current&&ke.current.afterLineNumber<=fe;){let Be;ke.current.afterLineNumber<=we?Be=ye-we+ke.current.afterLineNumber:Be=de,We.push({afterLineNumber:Be,heightInLines:ke.current.height/re,domNode:null}),ke.advance()}if(Pe!==null&&j(Pe)){const Be=this._produceOriginalFromDiff(Pe,Se,Ae);Be&&xe.push(Be)}if(Pe!==null&&te(Pe)){const Be=this._produceModifiedFromDiff(Pe,Se,Ae);Be&&We.push(Be)}let ze=0,Ke=0;for(xe=xe.sort(ge),We=We.sort(ge);ze=He.heightInLines?(Be.heightInLines-=He.heightInLines,Ke++):(He.heightInLines-=Be.heightInLines,ze++)}for(;ze(ce.domNode||(ce.domNode=Z()),ce))}}function U(he,re,ce,me,Ce){return{range:new u.Range(he,re,ce,me),options:Ce}}const H={charDelete:n.ModelDecorationOptions.register({className:"char-delete"}),charDeleteWholeLine:n.ModelDecorationOptions.register({className:"char-delete",isWholeLine:!0}),charInsert:n.ModelDecorationOptions.register({className:"char-insert"}),charInsertWholeLine:n.ModelDecorationOptions.register({className:"char-insert",isWholeLine:!0}),lineInsert:n.ModelDecorationOptions.register({className:"line-insert",marginClassName:"line-insert",isWholeLine:!0}),lineInsertWithSign:n.ModelDecorationOptions.register({className:"line-insert",linesDecorationsClassName:"insert-sign "+k.ThemeIcon.asClassName(se),marginClassName:"line-insert",isWholeLine:!0}),lineDelete:n.ModelDecorationOptions.register({className:"line-delete",marginClassName:"line-delete",isWholeLine:!0}),lineDeleteWithSign:n.ModelDecorationOptions.register({className:"line-delete",linesDecorationsClassName:"delete-sign "+k.ThemeIcon.asClassName(ne),marginClassName:"line-delete",isWholeLine:!0}),lineDeleteMargin:n.ModelDecorationOptions.register({marginClassName:"line-delete"})};class $ extends z{constructor(re,ce){super(re);this._disableSash=ce===!1,this._sashRatio=null,this._sashPosition=null,this._startSashPosition=null,this._sash=this._register(new w.Sash(this._dataSource.getContainerDomNode(),this,{orientation:0})),this._disableSash&&(this._sash.state=0),this._sash.onDidStart(()=>this._onSashDragStart()),this._sash.onDidChange(me=>this._onSashDrag(me)),this._sash.onDidEnd(()=>this._onSashDragEnd()),this._sash.onDidReset(()=>this._onSashReset())}setEnableSplitViewResizing(re){const ce=re===!1;this._disableSash!==ce&&(this._disableSash=ce,this._sash.state=this._disableSash?0:3)}layout(re=this._sashRatio){const me=this._dataSource.getWidth()-(this._dataSource.getOptions().renderOverviewRuler?X.ENTIRE_DIFF_OVERVIEW_WIDTH:0);let Ce=Math.floor((re||.5)*me);const be=Math.floor(.5*me);return Ce=this._disableSash?be:Ce||be,me>$.MINIMUM_EDITOR_WIDTH*2?(Ce<$.MINIMUM_EDITOR_WIDTH&&(Ce=$.MINIMUM_EDITOR_WIDTH),Ce>me-$.MINIMUM_EDITOR_WIDTH&&(Ce=me-$.MINIMUM_EDITOR_WIDTH)):Ce=be,this._sashPosition!==Ce&&(this._sashPosition=Ce,this._sash.layout()),this._sashPosition}_onSashDragStart(){this._startSashPosition=this._sashPosition}_onSashDrag(re){const me=this._dataSource.getWidth()-(this._dataSource.getOptions().renderOverviewRuler?X.ENTIRE_DIFF_OVERVIEW_WIDTH:0),Ce=this.layout((this._startSashPosition+(re.currentX-re.startX))/me);this._sashRatio=Ce/me,this._dataSource.relayoutEditors()}_onSashDragEnd(){this._sash.layout()}_onSashReset(){this._sashRatio=.5,this._dataSource.relayoutEditors(),this._sash.layout()}getVerticalSashTop(re){return 0}getVerticalSashLeft(re){return this._sashPosition}getVerticalSashHeight(re){return this._dataSource.getHeight()}_getViewZones(re,ce,me){const Ce=this._dataSource.getOriginalEditor(),be=this._dataSource.getModifiedEditor();return new ie(re,ce,me,Ce,be).getViewZones()}_getOriginalEditorDecorations(re,ce,me){const Ce=this._dataSource.getOriginalEditor(),be=String(this._removeColor),Le={decorations:[],overviewZones:[]},De=Ce.getModel(),Re=Ce._getViewModel();for(const Ee of re)if(te(Ee)){Le.decorations.push({range:new u.Range(Ee.originalStartLineNumber,1,Ee.originalEndLineNumber,1073741824),options:me?H.lineDeleteWithSign:H.lineDelete}),(!j(Ee)||!Ee.charChanges)&&Le.decorations.push(U(Ee.originalStartLineNumber,1,Ee.originalEndLineNumber,1073741824,H.charDeleteWholeLine));const Ae=ue(De,Re,Ee.originalStartLineNumber,Ee.originalEndLineNumber);if(Le.overviewZones.push(new l.OverviewRulerZone(Ae.startLineNumber,Ae.endLineNumber,be)),Ee.charChanges){for(const Se of Ee.charChanges)if(te(Se))if(ce)for(let we=Se.originalStartLineNumber;we<=Se.originalEndLineNumber;we++){let ye,fe;we===Se.originalStartLineNumber?ye=Se.originalStartColumn:ye=De.getLineFirstNonWhitespaceColumn(we),we===Se.originalEndLineNumber?fe=Se.originalEndColumn:fe=De.getLineLastNonWhitespaceColumn(we),Le.decorations.push(U(we,ye,we,fe,H.charDelete))}else Le.decorations.push(U(Se.originalStartLineNumber,Se.originalStartColumn,Se.originalEndLineNumber,Se.originalEndColumn,H.charDelete))}}return Le}_getModifiedEditorDecorations(re,ce,me){const Ce=this._dataSource.getModifiedEditor(),be=String(this._insertColor),Le={decorations:[],overviewZones:[]},De=Ce.getModel(),Re=Ce._getViewModel();for(const Ee of re)if(j(Ee)){Le.decorations.push({range:new u.Range(Ee.modifiedStartLineNumber,1,Ee.modifiedEndLineNumber,1073741824),options:me?H.lineInsertWithSign:H.lineInsert}),(!te(Ee)||!Ee.charChanges)&&Le.decorations.push(U(Ee.modifiedStartLineNumber,1,Ee.modifiedEndLineNumber,1073741824,H.charInsertWholeLine));const Ae=ue(De,Re,Ee.modifiedStartLineNumber,Ee.modifiedEndLineNumber);if(Le.overviewZones.push(new l.OverviewRulerZone(Ae.startLineNumber,Ae.endLineNumber,be)),Ee.charChanges){for(const Se of Ee.charChanges)if(j(Se))if(ce)for(let we=Se.modifiedStartLineNumber;we<=Se.modifiedEndLineNumber;we++){let ye,fe;we===Se.modifiedStartLineNumber?ye=Se.modifiedStartColumn:ye=De.getLineFirstNonWhitespaceColumn(we),we===Se.modifiedEndLineNumber?fe=Se.modifiedEndColumn:fe=De.getLineLastNonWhitespaceColumn(we),Le.decorations.push(U(we,ye,we,fe,H.charInsert))}else Le.decorations.push(U(Se.modifiedStartLineNumber,Se.modifiedStartColumn,Se.modifiedEndLineNumber,Se.modifiedEndColumn,H.charInsert))}}return Le}}$.MINIMUM_EDITOR_WIDTH=100;class ie extends V{constructor(re,ce,me,Ce,be){super(re,ce,me,Ce,be)}_createOriginalMarginDomNodeForModifiedForeignViewZoneInAddedRegion(){return null}_produceOriginalFromDiff(re,ce,me){return me>ce?{afterLineNumber:Math.max(re.originalStartLineNumber,re.originalEndLineNumber),heightInLines:me-ce,domNode:null}:null}_produceModifiedFromDiff(re,ce,me){return ce>me?{afterLineNumber:Math.max(re.modifiedStartLineNumber,re.modifiedEndLineNumber),heightInLines:ce-me,domNode:null}:null}}class oe extends z{constructor(re,ce){super(re);this._decorationsLeft=re.getOriginalEditor().getLayoutInfo().decorationsLeft,this._register(re.getOriginalEditor().onDidLayoutChange(me=>{this._decorationsLeft!==me.decorationsLeft&&(this._decorationsLeft=me.decorationsLeft,re.relayoutEditors())}))}setEnableSplitViewResizing(re){}_getViewZones(re,ce,me,Ce){const be=this._dataSource.getOriginalEditor(),Le=this._dataSource.getModifiedEditor();return new ae(re,ce,me,be,Le,Ce).getViewZones()}_getOriginalEditorDecorations(re,ce,me){const Ce=String(this._removeColor),be={decorations:[],overviewZones:[]},Le=this._dataSource.getOriginalEditor(),De=Le.getModel(),Re=Le._getViewModel();for(const Ee of re)if(te(Ee)){be.decorations.push({range:new u.Range(Ee.originalStartLineNumber,1,Ee.originalEndLineNumber,1073741824),options:H.lineDeleteMargin});const Ae=ue(De,Re,Ee.originalStartLineNumber,Ee.originalEndLineNumber);be.overviewZones.push(new l.OverviewRulerZone(Ae.startLineNumber,Ae.endLineNumber,Ce))}return be}_getModifiedEditorDecorations(re,ce,me){const Ce=this._dataSource.getModifiedEditor(),be=String(this._insertColor),Le={decorations:[],overviewZones:[]},De=Ce.getModel(),Re=Ce._getViewModel();for(const Ee of re)if(j(Ee)){Le.decorations.push({range:new u.Range(Ee.modifiedStartLineNumber,1,Ee.modifiedEndLineNumber,1073741824),options:me?H.lineInsertWithSign:H.lineInsert});const Ae=ue(De,Re,Ee.modifiedStartLineNumber,Ee.modifiedEndLineNumber);if(Le.overviewZones.push(new l.OverviewRulerZone(Ae.startLineNumber,Ae.endLineNumber,be)),Ee.charChanges){for(const Se of Ee.charChanges)if(j(Se))if(ce)for(let we=Se.modifiedStartLineNumber;we<=Se.modifiedEndLineNumber;we++){let ye,fe;we===Se.modifiedStartLineNumber?ye=Se.modifiedStartColumn:ye=De.getLineFirstNonWhitespaceColumn(we),we===Se.modifiedEndLineNumber?fe=Se.modifiedEndColumn:fe=De.getLineLastNonWhitespaceColumn(we),Le.decorations.push(U(we,ye,we,fe,H.charInsert))}else Le.decorations.push(U(Se.modifiedStartLineNumber,Se.modifiedStartColumn,Se.modifiedEndLineNumber,Se.modifiedEndColumn,H.charInsert))}else Le.decorations.push(U(Ee.modifiedStartLineNumber,1,Ee.modifiedEndLineNumber,1073741824,H.charInsertWholeLine))}return Le}layout(){return Math.max(5,this._decorationsLeft)}}class ae extends V{constructor(re,ce,me,Ce,be,Le){super(re,ce,me,Ce,be);this._originalModel=Ce.getModel(),this._renderIndicators=Le,this._pendingLineChange=[],this._pendingViewZones=[],this._lineBreaksComputer=this._modifiedEditor._getViewModel().createLineBreaksComputer()}getViewZones(){const re=super.getViewZones();return this._finalize(re),re}_createOriginalMarginDomNodeForModifiedForeignViewZoneInAddedRegion(){const re=document.createElement("div");return re.className="inline-added-margin-view-zone",re}_produceOriginalFromDiff(re,ce,me){const Ce=document.createElement("div");return Ce.className="inline-added-margin-view-zone",{afterLineNumber:Math.max(re.originalStartLineNumber,re.originalEndLineNumber),heightInLines:me,domNode:document.createElement("div"),marginDomNode:Ce}}_produceModifiedFromDiff(re,ce,me){const Ce=document.createElement("div");Ce.className=`view-lines line-delete ${W.MOUSE_CURSOR_TEXT_CSS_CLASS_NAME}`;const be=document.createElement("div");be.className="inline-deleted-margin-view-zone";const Le={shouldNotShrink:!0,afterLineNumber:re.modifiedEndLineNumber===0?re.modifiedStartLineNumber:re.modifiedStartLineNumber-1,heightInLines:ce,minWidthInPx:0,domNode:Ce,marginDomNode:be,diff:{originalStartLineNumber:re.originalStartLineNumber,originalEndLineNumber:re.originalEndLineNumber,modifiedStartLineNumber:re.modifiedStartLineNumber,modifiedEndLineNumber:re.modifiedEndLineNumber,originalModel:this._originalModel,viewLineCounts:null}};for(let De=re.originalStartLineNumber;De<=re.originalEndLineNumber;De++)this._lineBreaksComputer.addRequest(this._originalModel.getLineContent(De),null);return this._pendingLineChange.push(re),this._pendingViewZones.push(Le),Le}_finalize(re){const ce=this._modifiedEditor.getOptions(),me=this._modifiedEditor.getModel().getOptions().tabSize,Ce=ce.get(38),be=ce.get(26),Le=Ce.typicalHalfwidthCharacterWidth,De=ce.get(88),Re=this._originalModel.mightContainNonBasicASCII(),Ee=this._originalModel.mightContainRTL(),Ae=ce.get(53),we=ce.get(124).decorationsWidth,ye=ce.get(100),fe=ce.get(83),de=ce.get(77),ge=ce.get(39),pe=this._lineBreaksComputer.finalize();let ve=0;for(let ke=0;ke0,We=r.createStringBuilder(1e4);let ze=0,Ke=0,Be=null;for(let Ue=Ne.originalStartLineNumber;Ue<=Ne.originalEndLineNumber;Ue++){const Ye=Ue-Ne.originalStartLineNumber,je=this._originalModel.getLineTokens(Ue),Xe=je.getLineContent(),$e=pe[ve++],Ze=h.LineDecoration.filter(Pe,Ue,1,Xe.length+1);if($e){let Qe=0;for(const Je of $e.breakOffsets){const nt=je.sliceAndInflate(Qe,Je,0),si=Xe.substring(Qe,Je);ze=Math.max(ze,this._renderOriginalLine(Ke++,si,nt,h.LineDecoration.extractWrapped(Ze,Qe,Je),xe,Re,Ee,Ce,be,Ae,we,ye,fe,de,ge,me,We,Fe)),Qe=Je}for(Be||(Be=[]);Be.lengthke.afterLineNumber-Ne.afterLineNumber)}_renderOriginalLine(re,ce,me,Ce,be,Le,De,Re,Ee,Ae,Se,we,ye,fe,de,ge,pe,ve){pe.appendASCIIString('
    ');const ke=_.ViewLineRenderingData.isBasicASCII(ce,Le),Ne=_.ViewLineRenderingData.containsRTL(ce,ke,De),Te=m.renderViewLine(new m.RenderLineInput(Re.isMonospace&&!Ee,Re.canUseHalfwidthRightwardsArrow,ce,!1,ke,Ne,0,me,Ce,ge,0,Re.spaceWidth,Re.middotWidth,Re.wsmiddotWidth,we,ye,fe,de!==a.EditorFontLigatures.OFF,null),pe);if(pe.appendASCIIString("
    "),this._renderIndicators){const Fe=document.createElement("div");Fe.className=`delete-sign ${k.ThemeIcon.asClassName(ne)}`,Fe.setAttribute("style",`position:absolute;top:${re*Ae}px;width:${Se}px;height:${Ae}px;right:0;`),ve.appendChild(Fe)}const Oe=Te.characterMapping.getAbsoluteOffsets();return Oe.length>0?Oe[Oe.length-1]:0}}function G(he,re){return a.stringSet(he,re,["off","on","inherit"])}function j(he){return he.modifiedEndLineNumber>0}function te(he){return he.originalEndLineNumber>0}function Z(){const he=document.createElement("div");return he.className="diagonal-fill",he}function ue(he,re,ce,me){const Ce=he.getLineCount();return ce=Math.min(Ce,Math.max(1,ce)),me=Math.min(Ce,Math.max(1,me)),re.coordinatesConverter.convertModelRangeToViewRange(new u.Range(ce,he.getLineMinColumn(ce),me,he.getLineMaxColumn(me)))}k.registerThemingParticipant((he,re)=>{const ce=he.getColor(I.diffInserted);ce&&(re.addRule(`.monaco-editor .line-insert, .monaco-editor .char-insert { background-color: ${ce}; }`),re.addRule(`.monaco-diff-editor .line-insert, .monaco-diff-editor .char-insert { background-color: ${ce}; }`),re.addRule(`.monaco-editor .inline-added-margin-view-zone { background-color: ${ce}; }`));const me=he.getColor(I.diffRemoved);me&&(re.addRule(`.monaco-editor .line-delete, .monaco-editor .char-delete { background-color: ${me}; }`),re.addRule(`.monaco-diff-editor .line-delete, .monaco-diff-editor .char-delete { background-color: ${me}; }`),re.addRule(`.monaco-editor .inline-deleted-margin-view-zone { background-color: ${me}; }`));const Ce=he.getColor(I.diffInsertedOutline);Ce&&re.addRule(`.monaco-editor .line-insert, .monaco-editor .char-insert { border: 1px ${he.type==="hc"?"dashed":"solid"} ${Ce}; }`);const be=he.getColor(I.diffRemovedOutline);be&&re.addRule(`.monaco-editor .line-delete, .monaco-editor .char-delete { border: 1px ${he.type==="hc"?"dashed":"solid"} ${be}; }`);const Le=he.getColor(I.scrollbarShadow);Le&&re.addRule(`.monaco-diff-editor.side-by-side .editor.modified { box-shadow: -6px 0 5px -5px ${Le}; }`);const De=he.getColor(I.diffBorder);De&&re.addRule(`.monaco-diff-editor.side-by-side .editor.modified { border-left: 1px solid ${De}; }`);const Re=he.getColor(I.scrollbarSliderBackground);Re&&re.addRule(` + .monaco-diff-editor .diffViewport { + background: ${Re}; + } + `);const Ee=he.getColor(I.scrollbarSliderHoverBackground);Ee&&re.addRule(` + .monaco-diff-editor .diffViewport:hover { + background: ${Ee}; + } + `);const Ae=he.getColor(I.scrollbarSliderActiveBackground);Ae&&re.addRule(` + .monaco-diff-editor .diffViewport:active { + background: ${Ae}; + } + `);const Se=he.getColor(I.diffDiagonalFill);re.addRule(` + .monaco-editor .diagonal-fill { + background-image: linear-gradient( + -45deg, + ${Se} 12.5%, + #0000 12.5%, #0000 50%, + ${Se} 50%, ${Se} 62.5%, + #0000 62.5%, #0000 100% + ); + background-size: 8px 8px; + } + `)})}),define(Q[657],J([0,1,473,7,47,160,104,52,15,12,2,17,8,3,142,22,11,571,27,80,341]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SimpleButton=e.FindWidget=e.FindWidgetViewZone=e.findNextMatchIcon=e.findPreviousMatchIcon=e.findReplaceAllIcon=e.findReplaceIcon=void 0;const l=t.registerIcon("find-selection",n.Codicon.selection,b.localize(0,null)),h=t.registerIcon("find-collapsed",n.Codicon.chevronRight,b.localize(1,null)),m=t.registerIcon("find-expanded",n.Codicon.chevronDown,b.localize(2,null));e.findReplaceIcon=t.registerIcon("find-replace",n.Codicon.replace,b.localize(3,null)),e.findReplaceAllIcon=t.registerIcon("find-replace-all",n.Codicon.replaceAll,b.localize(4,null)),e.findPreviousMatchIcon=t.registerIcon("find-previous-match",n.Codicon.arrowUp,b.localize(5,null)),e.findNextMatchIcon=t.registerIcon("find-next-match",n.Codicon.arrowDown,b.localize(6,null));const _=b.localize(7,null),f=b.localize(8,null),v=b.localize(9,null),y=b.localize(10,null),L=b.localize(11,null),I=b.localize(12,null),k=b.localize(13,null),E=b.localize(14,null),T=b.localize(15,null),O=b.localize(16,null),A=b.localize(17,null),B=b.localize(18,null,a.MATCHES_LIMIT),F=b.localize(19,null),D=b.localize(20,null),R=419,x=275-54;let K=69;const Y=33,ee="ctrlEnterReplaceAll.windows.donotask",se=c.isMacintosh?256:2048;class ne{constructor(U){this.afterLineNumber=U,this.heightInPx=Y,this.suppressMouseDown=!1,this.domNode=document.createElement("div"),this.domNode.className="dock-find-viewzone"}}e.FindWidgetViewZone=ne;function le(V,U,H){const $=!!U.match(/\n/);if(H&&$&&H.selectionStart>0){V.stopPropagation();return}}function X(V,U,H){const $=!!U.match(/\n/);if(H&&$&&H.selectionEndthis._updateHistoryDelayer.cancel())),this._register(this._state.onFindReplaceStateChange(Z=>this._onStateChanged(Z))),this._buildDomNode(),this._updateButtons(),this._tryUpdateWidgetWidth(),this._findInput.inputBox.layout(),this._register(this._codeEditor.onDidChangeConfiguration(Z=>{if(Z.hasChanged(75)&&(this._codeEditor.getOption(75)&&this._state.change({isReplaceRevealed:!1},!1),this._updateButtons()),Z.hasChanged(124)&&this._tryUpdateWidgetWidth(),Z.hasChanged(2)&&this.updateAccessibilitySupport(),Z.hasChanged(31)){const ue=this._codeEditor.getOption(31).addExtraSpaceOnTop;ue&&!this._viewZone&&(this._viewZone=new ne(0),this._showViewZone()),!ue&&this._viewZone&&this._removeViewZone()}})),this.updateAccessibilitySupport(),this._register(this._codeEditor.onDidChangeCursorSelection(()=>{this._isVisible&&this._updateToggleSelectionFindButton()})),this._register(this._codeEditor.onDidFocusEditorWidget(()=>Ie(this,void 0,void 0,function*(){if(this._isVisible){let Z=yield this._controller.getGlobalBufferTerm();Z&&Z!==this._state.searchString&&(this._state.change({searchString:Z},!1),this._findInput.select())}}))),this._findInputFocused=a.CONTEXT_FIND_INPUT_FOCUSED.bindTo(ae),this._findFocusTracker=this._register(N.trackFocus(this._findInput.inputBox.inputElement)),this._register(this._findFocusTracker.onDidFocus(()=>{this._findInputFocused.set(!0),this._updateSearchScope()})),this._register(this._findFocusTracker.onDidBlur(()=>{this._findInputFocused.set(!1)})),this._replaceInputFocused=a.CONTEXT_REPLACE_INPUT_FOCUSED.bindTo(ae),this._replaceFocusTracker=this._register(N.trackFocus(this._replaceInput.inputBox.inputElement)),this._register(this._replaceFocusTracker.onDidFocus(()=>{this._replaceInputFocused.set(!0),this._updateSearchScope()})),this._register(this._replaceFocusTracker.onDidBlur(()=>{this._replaceInputFocused.set(!1)})),this._codeEditor.addOverlayWidget(this),this._codeEditor.getOption(31).addExtraSpaceOnTop&&(this._viewZone=new ne(0)),this._applyTheme(G.getColorTheme()),this._register(G.onDidColorThemeChange(this._applyTheme.bind(this))),this._register(this._codeEditor.onDidChangeModel(()=>{!this._isVisible||(this._viewZoneId=void 0)})),this._register(this._codeEditor.onDidScrollChange(Z=>{if(Z.scrollTopChanged){this._layoutViewZone();return}setTimeout(()=>{this._layoutViewZone()},0)}))}getId(){return z.ID}getDomNode(){return this._domNode}getPosition(){return this._isVisible?{preference:0}:null}_onStateChanged(U){if(U.searchString){try{this._ignoreChangeEvent=!0,this._findInput.setValue(this._state.searchString)}finally{this._ignoreChangeEvent=!1}this._updateButtons()}if(U.replaceString&&(this._replaceInput.inputBox.value=this._state.replaceString),U.isRevealed&&(this._state.isRevealed?this._reveal():this._hide(!0)),U.isReplaceRevealed&&(this._state.isReplaceRevealed?!this._codeEditor.getOption(75)&&!this._isReplaceVisible&&(this._isReplaceVisible=!0,this._replaceInput.width=N.getTotalWidth(this._findInput.domNode),this._updateButtons(),this._replaceInput.inputBox.layout()):this._isReplaceVisible&&(this._isReplaceVisible=!1,this._updateButtons())),(U.isRevealed||U.isReplaceRevealed)&&(this._state.isRevealed||this._state.isReplaceRevealed)&&this._tryUpdateHeight()&&this._showViewZone(),U.isRegex&&this._findInput.setRegex(this._state.isRegex),U.wholeWord&&this._findInput.setWholeWords(this._state.wholeWord),U.matchCase&&this._findInput.setCaseSensitive(this._state.matchCase),U.preserveCase&&this._replaceInput.setPreserveCase(this._state.preserveCase),U.searchScope&&(this._state.searchScope?this._toggleSelectionFind.checked=!0:this._toggleSelectionFind.checked=!1,this._updateToggleSelectionFindButton()),U.searchString||U.matchesCount||U.matchesPosition){let H=this._state.searchString.length>0&&this._state.matchesCount===0;this._domNode.classList.toggle("no-results",H),this._updateMatchesCount(),this._updateButtons()}(U.searchString||U.currentMatch)&&this._layoutViewZone(),U.updateHistory&&this._delayedUpdateHistory(),U.loop&&this._updateButtons()}_delayedUpdateHistory(){this._updateHistoryDelayer.trigger(this._updateHistory.bind(this)).then(void 0,g.onUnexpectedError)}_updateHistory(){this._state.searchString&&this._findInput.inputBox.addToHistory(),this._state.replaceString&&this._replaceInput.inputBox.addToHistory()}_updateMatchesCount(){this._matchesCount.style.minWidth=K+"px",this._state.matchesCount>=a.MATCHES_LIMIT?this._matchesCount.title=B:this._matchesCount.title="",this._matchesCount.firstChild&&this._matchesCount.removeChild(this._matchesCount.firstChild);let U;if(this._state.matchesCount>0){let H=String(this._state.matchesCount);this._state.matchesCount>=a.MATCHES_LIMIT&&(H+="+");let $=String(this._state.matchesPosition);$==="0"&&($="?"),U=o.format(F,$,H)}else U=D;this._matchesCount.appendChild(document.createTextNode(U)),M.alert(this._getAriaLabel(U,this._state.currentMatch,this._state.searchString)),K=Math.max(K,this._matchesCount.clientWidth)}_getAriaLabel(U,H,$){if(U===D)return $===""?b.localize(21,null,U):b.localize(22,null,U,$);if(H){const ie=b.localize(23,null,U,$,H.startLineNumber+":"+H.startColumn),oe=this._codeEditor.getModel();return oe&&H.startLineNumber<=oe.getLineCount()&&H.startLineNumber>=1?`${oe.getLineContent(H.startLineNumber)}, ${ie}`:ie}return b.localize(24,null,U,$)}_updateToggleSelectionFindButton(){let U=this._codeEditor.getSelection(),H=U?U.startLineNumber!==U.endLineNumber||U.startColumn!==U.endColumn:!1,$=this._toggleSelectionFind.checked;this._isVisible&&($||H)?this._toggleSelectionFind.enable():this._toggleSelectionFind.disable()}_updateButtons(){this._findInput.setEnabled(this._isVisible),this._replaceInput.setEnabled(this._isVisible&&this._isReplaceVisible),this._updateToggleSelectionFindButton(),this._closeBtn.setEnabled(this._isVisible);let U=this._state.searchString.length>0,H=!!this._state.matchesCount;this._prevBtn.setEnabled(this._isVisible&&U&&H&&this._state.canNavigateBack()),this._nextBtn.setEnabled(this._isVisible&&U&&H&&this._state.canNavigateForward()),this._replaceBtn.setEnabled(this._isVisible&&this._isReplaceVisible&&U),this._replaceAllBtn.setEnabled(this._isVisible&&this._isReplaceVisible&&U),this._domNode.classList.toggle("replaceToggled",this._isReplaceVisible),this._toggleReplaceBtn.setExpanded(this._isReplaceVisible);let $=!this._codeEditor.getOption(75);this._toggleReplaceBtn.setEnabled(this._isVisible&&$)}_reveal(){if(this._revealTimeouts.forEach(U=>{clearTimeout(U)}),this._revealTimeouts=[],!this._isVisible){this._isVisible=!0;const U=this._codeEditor.getSelection();switch(this._codeEditor.getOption(31).autoFindInSelection){case"always":this._toggleSelectionFind.checked=!0;break;case"never":this._toggleSelectionFind.checked=!1;break;case"multiline":const $=!!U&&U.startLineNumber!==U.endLineNumber;this._toggleSelectionFind.checked=$;break;default:break}this._tryUpdateWidgetWidth(),this._updateButtons(),this._revealTimeouts.push(setTimeout(()=>{this._domNode.classList.add("visible"),this._domNode.setAttribute("aria-hidden","false")},0)),this._revealTimeouts.push(setTimeout(()=>{this._findInput.validate()},200)),this._codeEditor.layoutOverlayWidget(this);let H=!0;if(this._codeEditor.getOption(31).seedSearchStringFromSelection&&U){const $=this._codeEditor.getDomNode();if($){const ie=N.getDomNodePagePosition($),oe=this._codeEditor.getScrolledVisiblePosition(U.getStartPosition()),ae=ie.left+(oe?oe.left:0),G=oe?oe.top:0;if(this._viewZone&&GU.startLineNumber&&(H=!1);const j=N.getTopLeftOffset(this._domNode).left;ae>j&&(H=!1);const te=this._codeEditor.getScrolledVisiblePosition(U.getEndPosition());ie.left+(te?te.left:0)>j&&(H=!1)}}}this._showViewZone(H)}}_hide(U){this._revealTimeouts.forEach(H=>{clearTimeout(H)}),this._revealTimeouts=[],this._isVisible&&(this._isVisible=!1,this._updateButtons(),this._domNode.classList.remove("visible"),this._domNode.setAttribute("aria-hidden","true"),this._findInput.clearMessage(),U&&this._codeEditor.focus(),this._codeEditor.layoutOverlayWidget(this),this._removeViewZone())}_layoutViewZone(U){if(!this._codeEditor.getOption(31).addExtraSpaceOnTop){this._removeViewZone();return}if(!!this._isVisible){const $=this._viewZone;this._viewZoneId!==void 0||!$||this._codeEditor.changeViewZones(ie=>{$.heightInPx=this._getHeight(),this._viewZoneId=ie.addZone($),this._codeEditor.setScrollTop(U||this._codeEditor.getScrollTop()+$.heightInPx)})}}_showViewZone(U=!0){if(!!this._isVisible&&!!this._codeEditor.getOption(31).addExtraSpaceOnTop){this._viewZone===void 0&&(this._viewZone=new ne(0));const $=this._viewZone;this._codeEditor.changeViewZones(ie=>{if(this._viewZoneId!==void 0){const oe=this._getHeight();if(oe===$.heightInPx)return;let ae=oe-$.heightInPx;$.heightInPx=oe,ie.layoutZone(this._viewZoneId),U&&this._codeEditor.setScrollTop(this._codeEditor.getScrollTop()+ae);return}else{let oe=this._getHeight();if(oe-=this._codeEditor.getOption(69).top,oe<=0)return;$.heightInPx=oe,this._viewZoneId=ie.addZone($),U&&this._codeEditor.setScrollTop(this._codeEditor.getScrollTop()+oe)}})}}_removeViewZone(){this._codeEditor.changeViewZones(U=>{this._viewZoneId!==void 0&&(U.removeZone(this._viewZoneId),this._viewZoneId=void 0,this._viewZone&&(this._codeEditor.setScrollTop(this._codeEditor.getScrollTop()-this._viewZone.heightInPx),this._viewZone=void 0))})}_applyTheme(U){let H={inputActiveOptionBorder:U.getColor(u.inputActiveOptionBorder),inputActiveOptionBackground:U.getColor(u.inputActiveOptionBackground),inputActiveOptionForeground:U.getColor(u.inputActiveOptionForeground),inputBackground:U.getColor(u.inputBackground),inputForeground:U.getColor(u.inputForeground),inputBorder:U.getColor(u.inputBorder),inputValidationInfoBackground:U.getColor(u.inputValidationInfoBackground),inputValidationInfoForeground:U.getColor(u.inputValidationInfoForeground),inputValidationInfoBorder:U.getColor(u.inputValidationInfoBorder),inputValidationWarningBackground:U.getColor(u.inputValidationWarningBackground),inputValidationWarningForeground:U.getColor(u.inputValidationWarningForeground),inputValidationWarningBorder:U.getColor(u.inputValidationWarningBorder),inputValidationErrorBackground:U.getColor(u.inputValidationErrorBackground),inputValidationErrorForeground:U.getColor(u.inputValidationErrorForeground),inputValidationErrorBorder:U.getColor(u.inputValidationErrorBorder)};this._findInput.style(H),this._replaceInput.style(H),this._toggleSelectionFind.style(H)}_tryUpdateWidgetWidth(){if(!!this._isVisible&&!!N.isInDOM(this._domNode)){const U=this._codeEditor.getLayoutInfo();if(U.contentWidth<=0){this._domNode.classList.add("hiddenEditor");return}else this._domNode.classList.contains("hiddenEditor")&&this._domNode.classList.remove("hiddenEditor");const $=U.width,ie=U.minimap.minimapWidth;let oe=!1,ae=!1,G=!1;if(this._resized&&N.getTotalWidth(this._domNode)>R){this._domNode.style.maxWidth=`${$-28-ie-15}px`,this._replaceInput.width=N.getTotalWidth(this._findInput.domNode);return}if(R+28+ie>=$&&(ae=!0),R+28+ie-K>=$&&(G=!0),R+28+ie-K>=$+50&&(oe=!0),this._domNode.classList.toggle("collapsed-find-widget",oe),this._domNode.classList.toggle("narrow-find-widget",G),this._domNode.classList.toggle("reduced-find-widget",ae),!G&&!oe&&(this._domNode.style.maxWidth=`${$-28-ie-15}px`),this._resized){this._findInput.inputBox.layout();let j=this._findInput.inputBox.element.clientWidth;j>0&&(this._replaceInput.width=j)}else this._isReplaceVisible&&(this._replaceInput.width=N.getTotalWidth(this._findInput.domNode))}}_getHeight(){let U=0;return U+=4,U+=this._findInput.inputBox.height+2,this._isReplaceVisible&&(U+=4,U+=this._replaceInput.inputBox.height+2),U+=4,U}_tryUpdateHeight(){const U=this._getHeight();return this._cachedHeight!==null&&this._cachedHeight===U?!1:(this._cachedHeight=U,this._domNode.style.height=`${U}px`,!0)}focusFindInput(){this._findInput.select(),this._findInput.focus()}focusReplaceInput(){this._replaceInput.select(),this._replaceInput.focus()}highlightFindOptions(){this._findInput.highlightFindOptions()}_updateSearchScope(){if(!!this._codeEditor.hasModel()&&this._toggleSelectionFind.checked){let U=this._codeEditor.getSelections();U.map(H=>{H.endColumn===1&&H.endLineNumber>H.startLineNumber&&(H=H.setEndPosition(H.endLineNumber-1,this._codeEditor.getModel().getLineMaxColumn(H.endLineNumber-1)));const $=this._state.currentMatch;return H.startLineNumber!==H.endLineNumber&&!s.Range.equalsRange(H,$)?H:null}).filter(H=>!!H),U.length&&this._state.change({searchScope:U},!0)}}_onFindInputMouseDown(U){U.middleButton&&U.stopPropagation()}_onFindInputKeyDown(U){if(U.equals(se|3)){this._findInput.inputBox.insertAtCursor(` +`),U.preventDefault();return}if(U.equals(2)){this._isReplaceVisible?this._replaceInput.focus():this._findInput.focusOnCaseSensitive(),U.preventDefault();return}if(U.equals(2048|18)){this._codeEditor.focus(),U.preventDefault();return}if(U.equals(16))return le(U,this._findInput.getValue(),this._findInput.domNode.querySelector("textarea"));if(U.equals(18))return X(U,this._findInput.getValue(),this._findInput.domNode.querySelector("textarea"))}_onReplaceInputKeyDown(U){if(U.equals(se|3)){c.isWindows&&c.isNative&&!this._ctrlEnterReplaceAllWarningPrompted&&(this._notificationService.info(b.localize(25,null)),this._ctrlEnterReplaceAllWarningPrompted=!0,this._storageService.store(ee,!0,0,0)),this._replaceInput.inputBox.insertAtCursor(` +`),U.preventDefault();return}if(U.equals(2)){this._findInput.focusOnCaseSensitive(),U.preventDefault();return}if(U.equals(1024|2)){this._findInput.focus(),U.preventDefault();return}if(U.equals(2048|18)){this._codeEditor.focus(),U.preventDefault();return}if(U.equals(16))return le(U,this._replaceInput.inputBox.value,this._replaceInput.inputBox.element.querySelector("textarea"));if(U.equals(18))return X(U,this._replaceInput.inputBox.value,this._replaceInput.inputBox.element.querySelector("textarea"))}getVerticalSashLeft(U){return 0}_keybindingLabelFor(U){let H=this._keybindingService.lookupKeybinding(U);return H?` (${H.getLabel()})`:""}_buildDomNode(){const U=!0,H=!0;this._findInput=this._register(new i.ContextScopedFindInput(null,this._contextViewProvider,{width:x,label:_,placeholder:f,appendCaseSensitiveLabel:this._keybindingLabelFor(a.FIND_IDS.ToggleCaseSensitiveCommand),appendWholeWordsLabel:this._keybindingLabelFor(a.FIND_IDS.ToggleWholeWordCommand),appendRegexLabel:this._keybindingLabelFor(a.FIND_IDS.ToggleRegexCommand),validation:j=>{if(j.length===0||!this._findInput.getRegex())return null;try{return new RegExp(j,"gu"),null}catch(te){return{content:te.message}}},flexibleHeight:U,flexibleWidth:H,flexibleMaxHeight:118},this._contextKeyService,!0)),this._findInput.setRegex(!!this._state.isRegex),this._findInput.setCaseSensitive(!!this._state.matchCase),this._findInput.setWholeWords(!!this._state.wholeWord),this._register(this._findInput.onKeyDown(j=>this._onFindInputKeyDown(j))),this._register(this._findInput.inputBox.onDidChange(()=>{this._ignoreChangeEvent||this._state.change({searchString:this._findInput.getValue()},!0)})),this._register(this._findInput.onDidOptionChange(()=>{this._state.change({isRegex:this._findInput.getRegex(),wholeWord:this._findInput.getWholeWords(),matchCase:this._findInput.getCaseSensitive()},!0)})),this._register(this._findInput.onCaseSensitiveKeyDown(j=>{j.equals(1024|2)&&this._isReplaceVisible&&(this._replaceInput.focus(),j.preventDefault())})),this._register(this._findInput.onRegexKeyDown(j=>{j.equals(2)&&this._isReplaceVisible&&(this._replaceInput.focusOnPreserve(),j.preventDefault())})),this._register(this._findInput.inputBox.onDidHeightChange(j=>{this._tryUpdateHeight()&&this._showViewZone()})),c.isLinux&&this._register(this._findInput.onMouseDown(j=>this._onFindInputMouseDown(j))),this._matchesCount=document.createElement("div"),this._matchesCount.className="matchesCount",this._updateMatchesCount(),this._prevBtn=this._register(new P({label:v+this._keybindingLabelFor(a.FIND_IDS.PreviousMatchFindAction),icon:e.findPreviousMatchIcon,onTrigger:()=>{this._codeEditor.getAction(a.FIND_IDS.PreviousMatchFindAction).run().then(void 0,g.onUnexpectedError)}})),this._nextBtn=this._register(new P({label:y+this._keybindingLabelFor(a.FIND_IDS.NextMatchFindAction),icon:e.findNextMatchIcon,onTrigger:()=>{this._codeEditor.getAction(a.FIND_IDS.NextMatchFindAction).run().then(void 0,g.onUnexpectedError)}}));let $=document.createElement("div");$.className="find-part",$.appendChild(this._findInput.domNode);const ie=document.createElement("div");ie.className="find-actions",$.appendChild(ie),ie.appendChild(this._matchesCount),ie.appendChild(this._prevBtn.domNode),ie.appendChild(this._nextBtn.domNode),this._toggleSelectionFind=this._register(new w.Checkbox({icon:l,title:L+this._keybindingLabelFor(a.FIND_IDS.ToggleSearchScopeCommand),isChecked:!1})),this._register(this._toggleSelectionFind.onChange(()=>{if(this._toggleSelectionFind.checked){if(this._codeEditor.hasModel()){let j=this._codeEditor.getSelections();j.map(te=>(te.endColumn===1&&te.endLineNumber>te.startLineNumber&&(te=te.setEndPosition(te.endLineNumber-1,this._codeEditor.getModel().getLineMaxColumn(te.endLineNumber-1))),te.isEmpty()?null:te)).filter(te=>!!te),j.length&&this._state.change({searchScope:j},!0)}}else this._state.change({searchScope:null},!0)})),ie.appendChild(this._toggleSelectionFind.domNode),this._closeBtn=this._register(new P({label:I+this._keybindingLabelFor(a.FIND_IDS.CloseFindWidgetCommand),icon:t.widgetClose,onTrigger:()=>{this._state.change({isRevealed:!1,searchScope:null},!1)},onKeyDown:j=>{j.equals(2)&&this._isReplaceVisible&&(this._replaceBtn.isEnabled()?this._replaceBtn.focus():this._codeEditor.focus(),j.preventDefault())}})),ie.appendChild(this._closeBtn.domNode),this._replaceInput=this._register(new i.ContextScopedReplaceInput(null,void 0,{label:k,placeholder:E,appendPreserveCaseLabel:this._keybindingLabelFor(a.FIND_IDS.TogglePreserveCaseCommand),history:[],flexibleHeight:U,flexibleWidth:H,flexibleMaxHeight:118},this._contextKeyService,!0)),this._replaceInput.setPreserveCase(!!this._state.preserveCase),this._register(this._replaceInput.onKeyDown(j=>this._onReplaceInputKeyDown(j))),this._register(this._replaceInput.inputBox.onDidChange(()=>{this._state.change({replaceString:this._replaceInput.inputBox.value},!1)})),this._register(this._replaceInput.inputBox.onDidHeightChange(j=>{this._isReplaceVisible&&this._tryUpdateHeight()&&this._showViewZone()})),this._register(this._replaceInput.onDidOptionChange(()=>{this._state.change({preserveCase:this._replaceInput.getPreserveCase()},!0)})),this._register(this._replaceInput.onPreserveCaseKeyDown(j=>{j.equals(2)&&(this._prevBtn.isEnabled()?this._prevBtn.focus():this._nextBtn.isEnabled()?this._nextBtn.focus():this._toggleSelectionFind.enabled?this._toggleSelectionFind.focus():this._closeBtn.isEnabled()&&this._closeBtn.focus(),j.preventDefault())})),this._replaceBtn=this._register(new P({label:T+this._keybindingLabelFor(a.FIND_IDS.ReplaceOneAction),icon:e.findReplaceIcon,onTrigger:()=>{this._controller.replace()},onKeyDown:j=>{j.equals(1024|2)&&(this._closeBtn.focus(),j.preventDefault())}})),this._replaceAllBtn=this._register(new P({label:O+this._keybindingLabelFor(a.FIND_IDS.ReplaceAllAction),icon:e.findReplaceAllIcon,onTrigger:()=>{this._controller.replaceAll()}}));let oe=document.createElement("div");oe.className="replace-part",oe.appendChild(this._replaceInput.domNode);const ae=document.createElement("div");ae.className="replace-actions",oe.appendChild(ae),ae.appendChild(this._replaceBtn.domNode),ae.appendChild(this._replaceAllBtn.domNode),this._toggleReplaceBtn=this._register(new P({label:A,className:"codicon toggle left",onTrigger:()=>{this._state.change({isReplaceRevealed:!this._isReplaceVisible},!1),this._isReplaceVisible&&(this._replaceInput.width=N.getTotalWidth(this._findInput.domNode),this._replaceInput.inputBox.layout()),this._showViewZone()}})),this._toggleReplaceBtn.setExpanded(this._isReplaceVisible),this._domNode=document.createElement("div"),this._domNode.className="editor-widget find-widget",this._domNode.setAttribute("aria-hidden","true"),this._domNode.style.width=`${R}px`,this._domNode.appendChild(this._toggleReplaceBtn.domNode),this._domNode.appendChild($),this._domNode.appendChild(oe),this._resizeSash=new S.Sash(this._domNode,this,{orientation:0,size:2}),this._resized=!1;let G=R;this._register(this._resizeSash.onDidStart(()=>{G=N.getTotalWidth(this._domNode)})),this._register(this._resizeSash.onDidChange(j=>{this._resized=!0;let te=G+j.startX-j.currentX;if(!(teZ||(this._domNode.style.width=`${te}px`,this._isReplaceVisible&&(this._replaceInput.width=N.getTotalWidth(this._findInput.domNode)),this._findInput.inputBox.layout(),this._tryUpdateHeight())}})),this._register(this._resizeSash.onDidReset(()=>{const j=N.getTotalWidth(this._domNode);if(!(j{this._opts.onTrigger(),$.preventDefault()}),this.onkeydown(this._domNode,$=>{if($.equals(10)||$.equals(3)){this._opts.onTrigger(),$.preventDefault();return}this._opts.onKeyDown&&this._opts.onKeyDown($)})}get domNode(){return this._domNode}isEnabled(){return this._domNode.tabIndex>=0}focus(){this._domNode.focus()}setEnabled(U){this._domNode.classList.toggle("disabled",!U),this._domNode.setAttribute("aria-disabled",String(!U)),this._domNode.tabIndex=U?0:-1}setExpanded(U){this._domNode.setAttribute("aria-expanded",String(!!U)),U?(this._domNode.classList.remove(...r.ThemeIcon.asClassNameArray(h)),this._domNode.classList.add(...r.ThemeIcon.asClassNameArray(m))):(this._domNode.classList.remove(...r.ThemeIcon.asClassNameArray(m)),this._domNode.classList.add(...r.ThemeIcon.asClassNameArray(h)))}}e.SimpleButton=P,r.registerThemingParticipant((V,U)=>{const H=(re,ce)=>{ce&&U.addRule(`.monaco-editor ${re} { background-color: ${ce}; }`)};H(".findMatch",V.getColor(u.editorFindMatchHighlight)),H(".currentFindMatch",V.getColor(u.editorFindMatch)),H(".findScope",V.getColor(u.editorFindRangeHighlight));const $=V.getColor(u.editorWidgetBackground);H(".find-widget",$);const ie=V.getColor(u.widgetShadow);ie&&U.addRule(`.monaco-editor .find-widget { box-shadow: 0 0 8px 2px ${ie}; }`);const oe=V.getColor(u.editorFindMatchHighlightBorder);oe&&U.addRule(`.monaco-editor .findMatch { border: 1px ${V.type==="hc"?"dotted":"solid"} ${oe}; box-sizing: border-box; }`);const ae=V.getColor(u.editorFindMatchBorder);ae&&U.addRule(`.monaco-editor .currentFindMatch { border: 2px solid ${ae}; padding: 1px; box-sizing: border-box; }`);const G=V.getColor(u.editorFindRangeHighlightBorder);G&&U.addRule(`.monaco-editor .findScope { border: 1px ${V.type==="hc"?"dashed":"solid"} ${G}; }`);const j=V.getColor(u.contrastBorder);j&&U.addRule(`.monaco-editor .find-widget { border: 1px solid ${j}; }`);const te=V.getColor(u.editorWidgetForeground);te&&U.addRule(`.monaco-editor .find-widget { color: ${te}; }`);const Z=V.getColor(u.errorForeground);Z&&U.addRule(`.monaco-editor .find-widget.no-results .matchesCount { color: ${Z}; }`);const ue=V.getColor(u.editorWidgetResizeBorder);if(ue)U.addRule(`.monaco-editor .find-widget .monaco-sash { background-color: ${ue}; }`);else{const re=V.getColor(u.editorWidgetBorder);re&&U.addRule(`.monaco-editor .find-widget .monaco-sash { background-color: ${re}; }`)}const he=V.getColor(u.focusBorder);he&&U.addRule(`.monaco-editor .find-widget .monaco-inputbox.synthetic-focus { outline-color: ${he}; }`)})}),define(Q[267],J([0,1,472,15,2,8,13,25,142,599,600,657,34,84,16,68,37,79,11,32,28]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.StartFindReplaceAction=e.PreviousSelectionMatchFindAction=e.NextSelectionMatchFindAction=e.SelectionMatchFindAction=e.PreviousMatchFindAction2=e.PreviousMatchFindAction=e.NextMatchFindAction2=e.NextMatchFindAction=e.MatchFindAction=e.StartFindWithSelectionAction=e.StartFindAction=e.FindController=e.CommonFindController=e.getSelectionSearchString=void 0;const h=524288;function m(F,D="single"){if(!F.hasModel())return null;const R=F.getSelection();if(D==="single"&&R.startLineNumber===R.endLineNumber||D==="multiple"){if(R.isEmpty()){const W=F.getConfiguredWordAtPosition(R.getStartPosition());if(W)return W.word}else if(F.getModel().getValueLengthInRange(R)this._onStateChanged(K))),this._model=null,this._register(this._editor.onDidChangeModel(()=>{let K=this._editor.getModel()&&this._state.isRevealed;this.disposeModel(),this._state.change({searchScope:null,matchCase:this._storageService.getBoolean("editor.matchCase",1,!1),wholeWord:this._storageService.getBoolean("editor.wholeWord",1,!1),isRegex:this._storageService.getBoolean("editor.isRegex",1,!1),preserveCase:this._storageService.getBoolean("editor.preserveCase",1,!1)},!1),K&&this._start({forceRevealReplace:!1,seedSearchStringFromSelection:"none",seedSearchStringFromGlobalClipboard:!1,shouldFocus:0,shouldAnimate:!1,updateSearchScope:!1,loop:this._editor.getOption(31).loop})}))}get editor(){return this._editor}static get(D){return D.getContribution(qt.ID)}dispose(){this.disposeModel(),super.dispose()}disposeModel(){this._model&&(this._model.dispose(),this._model=null)}_onStateChanged(D){this.saveQueryState(D),D.isRevealed&&(this._state.isRevealed?this._findWidgetVisible.set(!0):(this._findWidgetVisible.reset(),this.disposeModel())),D.searchString&&this.setGlobalBufferTerm(this._state.searchString)}saveQueryState(D){D.isRegex&&this._storageService.store("editor.isRegex",this._state.actualIsRegex,1,0),D.wholeWord&&this._storageService.store("editor.wholeWord",this._state.actualWholeWord,1,0),D.matchCase&&this._storageService.store("editor.matchCase",this._state.actualMatchCase,1,0),D.preserveCase&&this._storageService.store("editor.preserveCase",this._state.actualPreserveCase,1,0)}loadQueryState(){this._state.change({matchCase:this._storageService.getBoolean("editor.matchCase",1,this._state.matchCase),wholeWord:this._storageService.getBoolean("editor.wholeWord",1,this._state.wholeWord),isRegex:this._storageService.getBoolean("editor.isRegex",1,this._state.isRegex),preserveCase:this._storageService.getBoolean("editor.preserveCase",1,this._state.preserveCase)},!1)}isFindInputFocused(){return!!d.CONTEXT_FIND_INPUT_FOCUSED.getValue(this._contextKeyService)}getState(){return this._state}closeFindWidget(){this._state.change({isRevealed:!1,searchScope:null},!1),this._editor.focus()}toggleCaseSensitive(){this._state.change({matchCase:!this._state.matchCase},!1),this._state.isRevealed||this.highlightFindOptions()}toggleWholeWords(){this._state.change({wholeWord:!this._state.wholeWord},!1),this._state.isRevealed||this.highlightFindOptions()}toggleRegex(){this._state.change({isRegex:!this._state.isRegex},!1),this._state.isRevealed||this.highlightFindOptions()}togglePreserveCase(){this._state.change({preserveCase:!this._state.preserveCase},!1),this._state.isRevealed||this.highlightFindOptions()}toggleSearchScope(){if(this._state.searchScope)this._state.change({searchScope:null},!0);else if(this._editor.hasModel()){let D=this._editor.getSelections();D.map(R=>(R.endColumn===1&&R.endLineNumber>R.startLineNumber&&(R=R.setEndPosition(R.endLineNumber-1,this._editor.getModel().getLineMaxColumn(R.endLineNumber-1))),R.isEmpty()?null:R)).filter(R=>!!R),D.length&&this._state.change({searchScope:D},!0)}}setSearchString(D){this._state.isRegex&&(D=w.escapeRegExpCharacters(D)),this._state.change({searchString:D},!1)}highlightFindOptions(D=!1){}_start(D){return Ie(this,void 0,void 0,function*(){if(this.disposeModel(),!!this._editor.hasModel()){let R={isRevealed:!0};if(D.seedSearchStringFromSelection==="single"){let W=m(this._editor,D.seedSearchStringFromSelection);W&&(this._state.isRegex?R.searchString=w.escapeRegExpCharacters(W):R.searchString=W)}else if(D.seedSearchStringFromSelection==="multiple"&&!D.updateSearchScope){let W=m(this._editor,D.seedSearchStringFromSelection);W&&(R.searchString=W)}if(!R.searchString&&D.seedSearchStringFromGlobalClipboard){let W=yield this.getGlobalBufferTerm();if(!this._editor.hasModel())return;W&&(R.searchString=W)}if(D.forceRevealReplace?R.isReplaceRevealed=!0:this._findWidgetVisible.get()||(R.isReplaceRevealed=!1),D.updateSearchScope){let W=this._editor.getSelections();W.some(x=>!x.isEmpty())&&(R.searchScope=W)}R.loop=D.loop,this._state.change(R,!1),this._model||(this._model=new d.FindModelBoundToEditorModel(this._editor,this._state))}})}start(D){return this._start(D)}moveToNextMatch(){return this._model?(this._model.moveToNextMatch(),!0):!1}moveToPrevMatch(){return this._model?(this._model.moveToPrevMatch(),!0):!1}replace(){return this._model?(this._model.replace(),!0):!1}replaceAll(){return this._model?(this._model.replaceAll(),!0):!1}selectAllMatches(){return this._model?(this._model.selectAllMatches(),this._editor.focus(),!0):!1}getGlobalBufferTerm(){return Ie(this,void 0,void 0,function*(){return this._editor.getOption(31).globalFindClipboard&&this._editor.hasModel()&&!this._editor.getModel().isTooLargeForSyncing()?this._clipboardService.readFindText():""})}setGlobalBufferTerm(D){this._editor.getOption(31).globalFindClipboard&&this._editor.hasModel()&&!this._editor.getModel().isTooLargeForSyncing()&&this._clipboardService.writeFindText(D)}};_.ID="editor.contrib.findController",_=Me([_e(1,a.IContextKeyService),_e(2,i.IStorageService),_e(3,s.IClipboardService)],_),e.CommonFindController=_;let f=class extends _{constructor(D,R,W,x,K,Y,ee,se){super(D,W,ee,se);this._contextViewService=R,this._keybindingService=x,this._themeService=K,this._notificationService=Y,this._widget=null,this._findOptionsWidget=null}_start(D){const R=Object.create(null,{_start:{get:()=>super._start}});return Ie(this,void 0,void 0,function*(){this._widget||this._createFindWidget();const W=this._editor.getSelection();let x=!1;switch(this._editor.getOption(31).autoFindInSelection){case"always":x=!0;break;case"never":x=!1;break;case"multiline":x=!!W&&W.startLineNumber!==W.endLineNumber;break;default:break}D.updateSearchScope=x,yield R._start.call(this,D),this._widget&&(D.shouldFocus===2?this._widget.focusReplaceInput():D.shouldFocus===1&&this._widget.focusFindInput())})}highlightFindOptions(D=!1){this._widget||this._createFindWidget(),this._state.isRevealed&&!D?this._widget.highlightFindOptions():this._findOptionsWidget.highlightFindOptions()}_createFindWidget(){this._widget=this._register(new c.FindWidget(this._editor,this,this._state,this._contextViewService,this._keybindingService,this._contextKeyService,this._themeService,this._storageService,this._notificationService)),this._findOptionsWidget=this._register(new g.FindOptionsWidget(this._editor,this._state,this._keybindingService,this._themeService))}};f=Me([_e(1,u.IContextViewService),_e(2,a.IContextKeyService),_e(3,r.IKeybindingService),_e(4,n.IThemeService),_e(5,t.INotificationService),_e(6,i.IStorageService),_e(7,s.IClipboardService)],f),e.FindController=f,e.StartFindAction=S.registerMultiEditorAction(new S.MultiEditorAction({id:d.FIND_IDS.StartFindAction,label:b.localize(0,null),alias:"Find",precondition:a.ContextKeyExpr.or(C.EditorContextKeys.focus,a.ContextKeyExpr.has("editorIsOpen")),kbOpts:{kbExpr:null,primary:2048|36,weight:100},menuOpts:{menuId:o.MenuId.MenubarEditMenu,group:"3_find",title:b.localize(1,null),order:1}})),e.StartFindAction.addImplementation(0,(F,D)=>{const R=F.get(l.ICodeEditorService),W=R.getFocusedCodeEditor()||R.getActiveCodeEditor();if(!W)return!1;const x=_.get(W);return x?x.start({forceRevealReplace:!1,seedSearchStringFromSelection:W.getOption(31).seedSearchStringFromSelection?"single":"none",seedSearchStringFromGlobalClipboard:W.getOption(31).globalFindClipboard,shouldFocus:1,shouldAnimate:!0,updateSearchScope:!1,loop:W.getOption(31).loop}):!1});class v extends S.EditorAction{constructor(){super({id:d.FIND_IDS.StartFindWithSelection,label:b.localize(2,null),alias:"Find With Selection",precondition:void 0,kbOpts:{kbExpr:null,primary:0,mac:{primary:2048|35},weight:100}})}run(D,R){return Ie(this,void 0,void 0,function*(){let W=_.get(R);W&&(yield W.start({forceRevealReplace:!1,seedSearchStringFromSelection:"multiple",seedSearchStringFromGlobalClipboard:!1,shouldFocus:0,shouldAnimate:!0,updateSearchScope:!1,loop:R.getOption(31).loop}),W.setGlobalBufferTerm(W.getState().searchString))})}}e.StartFindWithSelectionAction=v;class y extends S.EditorAction{run(D,R){return Ie(this,void 0,void 0,function*(){let W=_.get(R);W&&!this._run(W)&&(yield W.start({forceRevealReplace:!1,seedSearchStringFromSelection:W.getState().searchString.length===0&&R.getOption(31).seedSearchStringFromSelection?"single":"none",seedSearchStringFromGlobalClipboard:!0,shouldFocus:0,shouldAnimate:!0,updateSearchScope:!1,loop:R.getOption(31).loop}),this._run(W))})}}e.MatchFindAction=y;class L extends y{constructor(){super({id:d.FIND_IDS.NextMatchFindAction,label:b.localize(3,null),alias:"Find Next",precondition:void 0,kbOpts:{kbExpr:C.EditorContextKeys.focus,primary:61,mac:{primary:2048|37,secondary:[61]},weight:100}})}_run(D){return D.moveToNextMatch()?(D.editor.pushUndoStop(),!0):!1}}e.NextMatchFindAction=L;class I extends y{constructor(){super({id:d.FIND_IDS.NextMatchFindAction,label:b.localize(4,null),alias:"Find Next",precondition:void 0,kbOpts:{kbExpr:a.ContextKeyExpr.and(C.EditorContextKeys.focus,d.CONTEXT_FIND_INPUT_FOCUSED),primary:3,weight:100}})}_run(D){return D.moveToNextMatch()?(D.editor.pushUndoStop(),!0):!1}}e.NextMatchFindAction2=I;class k extends y{constructor(){super({id:d.FIND_IDS.PreviousMatchFindAction,label:b.localize(5,null),alias:"Find Previous",precondition:void 0,kbOpts:{kbExpr:C.EditorContextKeys.focus,primary:1024|61,mac:{primary:2048|1024|37,secondary:[1024|61]},weight:100}})}_run(D){return D.moveToPrevMatch()}}e.PreviousMatchFindAction=k;class E extends y{constructor(){super({id:d.FIND_IDS.PreviousMatchFindAction,label:b.localize(6,null),alias:"Find Previous",precondition:void 0,kbOpts:{kbExpr:a.ContextKeyExpr.and(C.EditorContextKeys.focus,d.CONTEXT_FIND_INPUT_FOCUSED),primary:1024|3,weight:100}})}_run(D){return D.moveToPrevMatch()}}e.PreviousMatchFindAction2=E;class T extends S.EditorAction{run(D,R){return Ie(this,void 0,void 0,function*(){let W=_.get(R);if(!!W){let x=m(R);x&&W.setSearchString(x),this._run(W)||(yield W.start({forceRevealReplace:!1,seedSearchStringFromSelection:R.getOption(31).seedSearchStringFromSelection?"single":"none",seedSearchStringFromGlobalClipboard:!1,shouldFocus:0,shouldAnimate:!0,updateSearchScope:!1,loop:R.getOption(31).loop}),this._run(W))}})}}e.SelectionMatchFindAction=T;class O extends T{constructor(){super({id:d.FIND_IDS.NextSelectionMatchFindAction,label:b.localize(7,null),alias:"Find Next Selection",precondition:void 0,kbOpts:{kbExpr:C.EditorContextKeys.focus,primary:2048|61,weight:100}})}_run(D){return D.moveToNextMatch()}}e.NextSelectionMatchFindAction=O;class A extends T{constructor(){super({id:d.FIND_IDS.PreviousSelectionMatchFindAction,label:b.localize(8,null),alias:"Find Previous Selection",precondition:void 0,kbOpts:{kbExpr:C.EditorContextKeys.focus,primary:2048|1024|61,weight:100}})}_run(D){return D.moveToPrevMatch()}}e.PreviousSelectionMatchFindAction=A,e.StartFindReplaceAction=S.registerMultiEditorAction(new S.MultiEditorAction({id:d.FIND_IDS.StartFindReplaceAction,label:b.localize(9,null),alias:"Replace",precondition:a.ContextKeyExpr.or(C.EditorContextKeys.focus,a.ContextKeyExpr.has("editorIsOpen")),kbOpts:{kbExpr:null,primary:2048|38,mac:{primary:2048|512|36},weight:100},menuOpts:{menuId:o.MenuId.MenubarEditMenu,group:"3_find",title:b.localize(10,null),order:2}})),e.StartFindReplaceAction.addImplementation(0,(F,D)=>{const R=F.get(l.ICodeEditorService),W=R.getFocusedCodeEditor()||R.getActiveCodeEditor();if(!W||!W.hasModel()||W.getOption(75))return!1;const x=_.get(W);if(!x)return!1;const K=W.getSelection(),Y=x.isFindInputFocused(),ee=!K.isEmpty()&&K.startLineNumber===K.endLineNumber&&W.getOption(31).seedSearchStringFromSelection&&!Y,se=Y||ee?2:1;return x.start({forceRevealReplace:!0,seedSearchStringFromSelection:ee?"single":"none",seedSearchStringFromGlobalClipboard:W.getOption(31).seedSearchStringFromSelection,shouldFocus:se,shouldAnimate:!0,updateSearchScope:!1,loop:W.getOption(31).loop})}),S.registerEditorContribution(_.ID,f),S.registerEditorAction(v),S.registerEditorAction(L),S.registerEditorAction(I),S.registerEditorAction(k),S.registerEditorAction(E),S.registerEditorAction(O),S.registerEditorAction(A);const B=S.EditorCommand.bindToContribution(_.get);S.registerEditorCommand(new B({id:d.FIND_IDS.CloseFindWidgetCommand,precondition:d.CONTEXT_FIND_WIDGET_VISIBLE,handler:F=>F.closeFindWidget(),kbOpts:{weight:100+5,kbExpr:a.ContextKeyExpr.and(C.EditorContextKeys.focus,a.ContextKeyExpr.not("isComposing")),primary:9,secondary:[1024|9]}})),S.registerEditorCommand(new B({id:d.FIND_IDS.ToggleCaseSensitiveCommand,precondition:void 0,handler:F=>F.toggleCaseSensitive(),kbOpts:{weight:100+5,kbExpr:C.EditorContextKeys.focus,primary:d.ToggleCaseSensitiveKeybinding.primary,mac:d.ToggleCaseSensitiveKeybinding.mac,win:d.ToggleCaseSensitiveKeybinding.win,linux:d.ToggleCaseSensitiveKeybinding.linux}})),S.registerEditorCommand(new B({id:d.FIND_IDS.ToggleWholeWordCommand,precondition:void 0,handler:F=>F.toggleWholeWords(),kbOpts:{weight:100+5,kbExpr:C.EditorContextKeys.focus,primary:d.ToggleWholeWordKeybinding.primary,mac:d.ToggleWholeWordKeybinding.mac,win:d.ToggleWholeWordKeybinding.win,linux:d.ToggleWholeWordKeybinding.linux}})),S.registerEditorCommand(new B({id:d.FIND_IDS.ToggleRegexCommand,precondition:void 0,handler:F=>F.toggleRegex(),kbOpts:{weight:100+5,kbExpr:C.EditorContextKeys.focus,primary:d.ToggleRegexKeybinding.primary,mac:d.ToggleRegexKeybinding.mac,win:d.ToggleRegexKeybinding.win,linux:d.ToggleRegexKeybinding.linux}})),S.registerEditorCommand(new B({id:d.FIND_IDS.ToggleSearchScopeCommand,precondition:void 0,handler:F=>F.toggleSearchScope(),kbOpts:{weight:100+5,kbExpr:C.EditorContextKeys.focus,primary:d.ToggleSearchScopeKeybinding.primary,mac:d.ToggleSearchScopeKeybinding.mac,win:d.ToggleSearchScopeKeybinding.win,linux:d.ToggleSearchScopeKeybinding.linux}})),S.registerEditorCommand(new B({id:d.FIND_IDS.TogglePreserveCaseCommand,precondition:void 0,handler:F=>F.togglePreserveCase(),kbOpts:{weight:100+5,kbExpr:C.EditorContextKeys.focus,primary:d.TogglePreserveCaseKeybinding.primary,mac:d.TogglePreserveCaseKeybinding.mac,win:d.TogglePreserveCaseKeybinding.win,linux:d.TogglePreserveCaseKeybinding.linux}})),S.registerEditorCommand(new B({id:d.FIND_IDS.ReplaceOneAction,precondition:d.CONTEXT_FIND_WIDGET_VISIBLE,handler:F=>F.replace(),kbOpts:{weight:100+5,kbExpr:C.EditorContextKeys.focus,primary:2048|1024|22}})),S.registerEditorCommand(new B({id:d.FIND_IDS.ReplaceOneAction,precondition:d.CONTEXT_FIND_WIDGET_VISIBLE,handler:F=>F.replace(),kbOpts:{weight:100+5,kbExpr:a.ContextKeyExpr.and(C.EditorContextKeys.focus,d.CONTEXT_REPLACE_INPUT_FOCUSED),primary:3}})),S.registerEditorCommand(new B({id:d.FIND_IDS.ReplaceAllAction,precondition:d.CONTEXT_FIND_WIDGET_VISIBLE,handler:F=>F.replaceAll(),kbOpts:{weight:100+5,kbExpr:C.EditorContextKeys.focus,primary:2048|512|3}})),S.registerEditorCommand(new B({id:d.FIND_IDS.ReplaceAllAction,precondition:d.CONTEXT_FIND_WIDGET_VISIBLE,handler:F=>F.replaceAll(),kbOpts:{weight:100+5,kbExpr:a.ContextKeyExpr.and(C.EditorContextKeys.focus,d.CONTEXT_REPLACE_INPUT_FOCUSED),primary:void 0,mac:{primary:2048|3}}})),S.registerEditorCommand(new B({id:d.FIND_IDS.SelectAllMatchesAction,precondition:d.CONTEXT_FIND_WIDGET_VISIBLE,handler:F=>F.selectAllMatches(),kbOpts:{weight:100+5,kbExpr:C.EditorContextKeys.focus,primary:512|3}}))}),define(Q[658],J([0,1,31,27,475,80,11]),function(q,e,b,N,M,w,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.FoldingDecorationProvider=e.foldingCollapsedIcon=e.foldingExpandedIcon=void 0,e.foldingExpandedIcon=w.registerIcon("folding-expanded",N.Codicon.chevronDown,M.localize(0,null)),e.foldingCollapsedIcon=w.registerIcon("folding-collapsed",N.Codicon.chevronRight,M.localize(1,null));class C{constructor(g){this.editor=g,this.autoHideFoldingControls=!0,this.showFoldingHighlights=!0}getDecorationOption(g,p){return p?C.HIDDEN_RANGE_DECORATION:g?this.showFoldingHighlights?C.COLLAPSED_HIGHLIGHTED_VISUAL_DECORATION:C.COLLAPSED_VISUAL_DECORATION:this.autoHideFoldingControls?C.EXPANDED_AUTO_HIDE_VISUAL_DECORATION:C.EXPANDED_VISUAL_DECORATION}deltaDecorations(g,p){return this.editor.deltaDecorations(g,p)}changeDecorations(g){return this.editor.changeDecorations(g)}}e.FoldingDecorationProvider=C,C.COLLAPSED_VISUAL_DECORATION=b.ModelDecorationOptions.register({stickiness:1,afterContentClassName:"inline-folded",isWholeLine:!0,firstLineDecorationClassName:S.ThemeIcon.asClassName(e.foldingCollapsedIcon)}),C.COLLAPSED_HIGHLIGHTED_VISUAL_DECORATION=b.ModelDecorationOptions.register({stickiness:1,afterContentClassName:"inline-folded",className:"folded-background",isWholeLine:!0,firstLineDecorationClassName:S.ThemeIcon.asClassName(e.foldingCollapsedIcon)}),C.EXPANDED_AUTO_HIDE_VISUAL_DECORATION=b.ModelDecorationOptions.register({stickiness:1,isWholeLine:!0,firstLineDecorationClassName:S.ThemeIcon.asClassName(e.foldingExpandedIcon)}),C.EXPANDED_VISUAL_DECORATION=b.ModelDecorationOptions.register({stickiness:1,isWholeLine:!0,firstLineDecorationClassName:"alwaysShowFoldIcons "+S.ThemeIcon.asClassName(e.foldingExpandedIcon)}),C.HIDDEN_RANGE_DECORATION=b.ModelDecorationOptions.register({stickiness:1})}),define(Q[659],J([0,1,474,20,8,15,39,2,13,405,658,25,406,41,541,18,225,407,12,16,11,22,342]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l,h){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.editorFoldForeground=e.foldBackgroundBackground=e.FoldingController=void 0;const m=new t.RawContextKey("foldingEnabled",!1);let _=class $t extends C.Disposable{constructor(W,x){super();this.contextKeyService=x,this.localToDispose=this._register(new C.DisposableStore),this.editor=W;const K=this.editor.getOptions();this._isEnabled=K.get(33),this._useFoldingProviders=K.get(34)!=="indentation",this._unfoldOnClickAfterEndOfLine=K.get(36),this._restoringViewState=!1,this.foldingModel=null,this.hiddenRangeModel=null,this.rangeProvider=null,this.foldingRegionPromise=null,this.foldingStateMemento=null,this.foldingModelPromise=null,this.updateScheduler=null,this.cursorChangedScheduler=null,this.mouseDownInfo=null,this.foldingDecorationProvider=new p.FoldingDecorationProvider(W),this.foldingDecorationProvider.autoHideFoldingControls=K.get(94)==="mouseover",this.foldingDecorationProvider.showFoldingHighlights=K.get(35),this.foldingEnabled=m.bindTo(this.contextKeyService),this.foldingEnabled.set(this._isEnabled),this._register(this.editor.onDidChangeModel(()=>this.onModelChanged())),this._register(this.editor.onDidChangeConfiguration(Y=>{if(Y.hasChanged(33)&&(this._isEnabled=this.editor.getOptions().get(33),this.foldingEnabled.set(this._isEnabled),this.onModelChanged()),Y.hasChanged(94)||Y.hasChanged(35)){const ee=this.editor.getOptions();this.foldingDecorationProvider.autoHideFoldingControls=ee.get(94)==="mouseover",this.foldingDecorationProvider.showFoldingHighlights=ee.get(35),this.onModelContentChanged()}Y.hasChanged(34)&&(this._useFoldingProviders=this.editor.getOptions().get(34)!=="indentation",this.onFoldingStrategyChanged()),Y.hasChanged(36)&&(this._unfoldOnClickAfterEndOfLine=this.editor.getOptions().get(36))})),this.onModelChanged()}static get(W){return W.getContribution($t.ID)}saveViewState(){let W=this.editor.getModel();if(!W||!this._isEnabled||W.isTooLargeForTokenization())return{};if(this.foldingModel){let x=this.foldingModel.isInitialized?this.foldingModel.getMemento():this.hiddenRangeModel.getMemento(),K=this.rangeProvider?this.rangeProvider.id:void 0;return{collapsedRegions:x,lineCount:W.getLineCount(),provider:K}}}restoreViewState(W){let x=this.editor.getModel();if(!(!x||!this._isEnabled||x.isTooLargeForTokenization()||!this.hiddenRangeModel)&&!(!W||!W.collapsedRegions||W.lineCount!==x.getLineCount())){(W.provider===r.ID_SYNTAX_PROVIDER||W.provider===i.ID_INIT_PROVIDER)&&(this.foldingStateMemento=W);const K=W.collapsedRegions;if(this.hiddenRangeModel.applyMemento(K)){const Y=this.getFoldingModel();Y&&Y.then(ee=>{if(ee){this._restoringViewState=!0;try{ee.applyMemento(K)}finally{this._restoringViewState=!1}}}).then(void 0,n.onUnexpectedError)}}}onModelChanged(){this.localToDispose.clear();let W=this.editor.getModel();!this._isEnabled||!W||W.isTooLargeForTokenization()||(this.foldingModel=new g.FoldingModel(W,this.foldingDecorationProvider),this.localToDispose.add(this.foldingModel),this.hiddenRangeModel=new o.HiddenRangeModel(this.foldingModel),this.localToDispose.add(this.hiddenRangeModel),this.localToDispose.add(this.hiddenRangeModel.onDidChange(x=>this.onHiddenRangesChanges(x))),this.updateScheduler=new w.Delayer(200),this.cursorChangedScheduler=new w.RunOnceScheduler(()=>this.revealCursor(),200),this.localToDispose.add(this.cursorChangedScheduler),this.localToDispose.add(u.FoldingRangeProviderRegistry.onDidChange(()=>this.onFoldingStrategyChanged())),this.localToDispose.add(this.editor.onDidChangeModelLanguageConfiguration(()=>this.onFoldingStrategyChanged())),this.localToDispose.add(this.editor.onDidChangeModelContent(()=>this.onModelContentChanged())),this.localToDispose.add(this.editor.onDidChangeCursorPosition(()=>this.onCursorPositionChanged())),this.localToDispose.add(this.editor.onMouseDown(x=>this.onEditorMouseDown(x))),this.localToDispose.add(this.editor.onMouseUp(x=>this.onEditorMouseUp(x))),this.localToDispose.add({dispose:()=>{this.foldingRegionPromise&&(this.foldingRegionPromise.cancel(),this.foldingRegionPromise=null),this.updateScheduler&&this.updateScheduler.cancel(),this.updateScheduler=null,this.foldingModel=null,this.foldingModelPromise=null,this.hiddenRangeModel=null,this.cursorChangedScheduler=null,this.foldingStateMemento=null,this.rangeProvider&&this.rangeProvider.dispose(),this.rangeProvider=null}}),this.onModelContentChanged())}onFoldingStrategyChanged(){this.rangeProvider&&this.rangeProvider.dispose(),this.rangeProvider=null,this.onModelContentChanged()}getRangeProvider(W){if(this.rangeProvider)return this.rangeProvider;if(this.rangeProvider=new a.IndentRangeProvider(W),this._useFoldingProviders&&this.foldingModel){let x=u.FoldingRangeProviderRegistry.ordered(this.foldingModel.textModel);if(x.length===0&&this.foldingStateMemento&&this.foldingStateMemento.collapsedRegions)return this.rangeProvider=new i.InitializingRangeProvider(W,this.foldingStateMemento.collapsedRegions,()=>{this.foldingStateMemento=null,this.onFoldingStrategyChanged()},3e4);x.length>0&&(this.rangeProvider=new r.SyntaxRangeProvider(W,x,()=>this.onModelContentChanged()))}return this.foldingStateMemento=null,this.rangeProvider}getFoldingModel(){return this.foldingModelPromise}onModelContentChanged(){this.updateScheduler&&(this.foldingRegionPromise&&(this.foldingRegionPromise.cancel(),this.foldingRegionPromise=null),this.foldingModelPromise=this.updateScheduler.trigger(()=>{const W=this.foldingModel;if(!W)return null;let x=this.foldingRegionPromise=w.createCancelablePromise(K=>this.getRangeProvider(W.textModel).compute(K));return x.then(K=>{if(K&&x===this.foldingRegionPromise){let Y=this.editor.getSelections(),ee=Y?Y.map(se=>se.startLineNumber):[];W.update(K,ee)}return W})}).then(void 0,W=>(n.onUnexpectedError(W),null)))}onHiddenRangesChanges(W){if(this.hiddenRangeModel&&W.length&&!this._restoringViewState){let x=this.editor.getSelections();x&&this.hiddenRangeModel.adjustSelections(x)&&this.editor.setSelections(x)}this.editor.setHiddenAreas(W)}onCursorPositionChanged(){this.hiddenRangeModel&&this.hiddenRangeModel.hasRanges()&&this.cursorChangedScheduler.schedule()}revealCursor(){const W=this.getFoldingModel();!W||W.then(x=>{if(x){let K=this.editor.getSelections();if(K&&K.length>0){let Y=[];for(let ee of K){let se=ee.selectionStartLineNumber;this.hiddenRangeModel&&this.hiddenRangeModel.isHidden(se)&&Y.push(...x.getAllRegionsAtLine(se,ne=>ne.isCollapsed&&se>ne.startLineNumber))}Y.length&&(x.toggleCollapseState(Y),this.reveal(K[0].getPosition()))}}}).then(void 0,n.onUnexpectedError)}onEditorMouseDown(W){if(this.mouseDownInfo=null,!(!this.hiddenRangeModel||!W.target||!W.target.range)&&!(!W.event.leftButton&&!W.event.middleButton)){const x=W.target.range;let K=!1;switch(W.target.type){case 4:const Y=W.target.detail,ee=W.target.element.offsetLeft;if(Y.offsetX-ee<5)return;K=!0;break;case 7:{if(this._unfoldOnClickAfterEndOfLine&&this.hiddenRangeModel.hasRanges()&&!W.target.detail.isAfterLines)break;return}case 6:{if(this.hiddenRangeModel.hasRanges()){let ne=this.editor.getModel();if(ne&&x.startColumn===ne.getLineMaxColumn(x.startLineNumber))break}return}default:return}this.mouseDownInfo={lineNumber:x.startLineNumber,iconClicked:K}}}onEditorMouseUp(W){const x=this.getFoldingModel();if(!(!x||!this.mouseDownInfo||!W.target)){let K=this.mouseDownInfo.lineNumber,Y=this.mouseDownInfo.iconClicked,ee=W.target.range;if(!(!ee||ee.startLineNumber!==K)){if(Y){if(W.target.type!==4)return}else{let se=this.editor.getModel();if(!se||ee.startColumn!==se.getLineMaxColumn(K))return}x.then(se=>{if(se){let ne=se.getRegionAtLine(K);if(ne&&ne.startLineNumber===K){let le=ne.isCollapsed;if(Y||le){let X=[],z=W.event.middleButton||W.event.shiftKey;if(z)for(const P of se.getRegionsInside(ne))P.isCollapsed===le&&X.push(P);(le||!z||X.length===0)&&X.push(ne),se.toggleCollapseState(X),this.reveal({lineNumber:K,column:1})}}}}).then(void 0,n.onUnexpectedError)}}}reveal(W){this.editor.revealPositionInCenterIfOutsideViewport(W,0)}};_.ID="editor.contrib.folding",_=Me([_e(1,t.IContextKeyService)],_),e.FoldingController=_;class f extends d.EditorAction{runEditorCommand(W,x,K){let Y=_.get(x);if(!!Y){let ee=Y.getFoldingModel();if(ee)return this.reportTelemetry(W,x),ee.then(se=>{if(se){this.invoke(Y,se,x,K);const ne=x.getSelection();ne&&Y.reveal(ne.getStartPosition())}})}}getSelectedLines(W){let x=W.getSelections();return x?x.map(K=>K.startLineNumber):[]}getLineNumbers(W,x){return W&&W.selectionLines?W.selectionLines.map(K=>K+1):this.getSelectedLines(x)}run(W,x){}}function v(R){if(!N.isUndefined(R)){if(!N.isObject(R))return!1;const W=R;if(!N.isUndefined(W.levels)&&!N.isNumber(W.levels)||!N.isUndefined(W.direction)&&!N.isString(W.direction)||!N.isUndefined(W.selectionLines)&&(!N.isArray(W.selectionLines)||!W.selectionLines.every(N.isNumber)))return!1}return!0}class y extends f{constructor(){super({id:"editor.unfold",label:b.localize(0,null),alias:"Unfold",precondition:m,kbOpts:{kbExpr:c.EditorContextKeys.editorTextFocus,primary:2048|1024|89,mac:{primary:2048|512|89},weight:100},description:{description:"Unfold the content in the editor",args:[{name:"Unfold editor argument",description:`Property-value pairs that can be passed through this argument: + * 'levels': Number of levels to unfold. If not set, defaults to 1. + * 'direction': If 'up', unfold given number of levels up otherwise unfolds down. + * 'selectionLines': The start lines (0-based) of the editor selections to apply the unfold action to. If not set, the active selection(s) will be used. + `,constraint:v,schema:{type:"object",properties:{levels:{type:"number",default:1},direction:{type:"string",enum:["up","down"],default:"down"},selectionLines:{type:"array",items:{type:"number"}}}}}]}})}invoke(W,x,K,Y){let ee=Y&&Y.levels||1,se=this.getLineNumbers(Y,K);Y&&Y.direction==="up"?g.setCollapseStateLevelsUp(x,!1,ee,se):g.setCollapseStateLevelsDown(x,!1,ee,se)}}class L extends f{constructor(){super({id:"editor.unfoldRecursively",label:b.localize(1,null),alias:"Unfold Recursively",precondition:m,kbOpts:{kbExpr:c.EditorContextKeys.editorTextFocus,primary:S.KeyChord(2048|41,2048|89),weight:100}})}invoke(W,x,K,Y){g.setCollapseStateLevelsDown(x,!1,Number.MAX_VALUE,this.getSelectedLines(K))}}class I extends f{constructor(){super({id:"editor.fold",label:b.localize(2,null),alias:"Fold",precondition:m,kbOpts:{kbExpr:c.EditorContextKeys.editorTextFocus,primary:2048|1024|87,mac:{primary:2048|512|87},weight:100},description:{description:"Fold the content in the editor",args:[{name:"Fold editor argument",description:`Property-value pairs that can be passed through this argument: + * 'levels': Number of levels to fold. + * 'direction': If 'up', folds given number of levels up otherwise folds down. + * 'selectionLines': The start lines (0-based) of the editor selections to apply the fold action to. If not set, the active selection(s) will be used. + If no levels or direction is set, folds the region at the locations or if already collapsed, the first uncollapsed parent instead. + `,constraint:v,schema:{type:"object",properties:{levels:{type:"number"},direction:{type:"string",enum:["up","down"]},selectionLines:{type:"array",items:{type:"number"}}}}}]}})}invoke(W,x,K,Y){let ee=this.getLineNumbers(Y,K);const se=Y&&Y.levels,ne=Y&&Y.direction;typeof se!="number"&&typeof ne!="string"?g.setCollapseStateUp(x,!0,ee):ne==="up"?g.setCollapseStateLevelsUp(x,!0,se||1,ee):g.setCollapseStateLevelsDown(x,!0,se||1,ee)}}class k extends f{constructor(){super({id:"editor.toggleFold",label:b.localize(3,null),alias:"Toggle Fold",precondition:m,kbOpts:{kbExpr:c.EditorContextKeys.editorTextFocus,primary:S.KeyChord(2048|41,2048|42),weight:100}})}invoke(W,x,K){let Y=this.getSelectedLines(K);g.toggleCollapseState(x,1,Y)}}class E extends f{constructor(){super({id:"editor.foldRecursively",label:b.localize(4,null),alias:"Fold Recursively",precondition:m,kbOpts:{kbExpr:c.EditorContextKeys.editorTextFocus,primary:S.KeyChord(2048|41,2048|87),weight:100}})}invoke(W,x,K){let Y=this.getSelectedLines(K);g.setCollapseStateLevelsDown(x,!0,Number.MAX_VALUE,Y)}}class T extends f{constructor(){super({id:"editor.foldAllBlockComments",label:b.localize(5,null),alias:"Fold All Block Comments",precondition:m,kbOpts:{kbExpr:c.EditorContextKeys.editorTextFocus,primary:S.KeyChord(2048|41,2048|85),weight:100}})}invoke(W,x,K){if(x.regions.hasTypes())g.setCollapseStateForType(x,u.FoldingRangeKind.Comment.value,!0);else{const Y=K.getModel();if(!Y)return;let ee=s.LanguageConfigurationRegistry.getComments(Y.getLanguageIdentifier().id);if(ee&&ee.blockCommentStartToken){let se=new RegExp("^\\s*"+M.escapeRegExpCharacters(ee.blockCommentStartToken));g.setCollapseStateForMatchingLines(x,se,!0)}}}}class O extends f{constructor(){super({id:"editor.foldAllMarkerRegions",label:b.localize(6,null),alias:"Fold All Regions",precondition:m,kbOpts:{kbExpr:c.EditorContextKeys.editorTextFocus,primary:S.KeyChord(2048|41,2048|29),weight:100}})}invoke(W,x,K){if(x.regions.hasTypes())g.setCollapseStateForType(x,u.FoldingRangeKind.Region.value,!0);else{const Y=K.getModel();if(!Y)return;let ee=s.LanguageConfigurationRegistry.getFoldingRules(Y.getLanguageIdentifier().id);if(ee&&ee.markers&&ee.markers.start){let se=new RegExp(ee.markers.start);g.setCollapseStateForMatchingLines(x,se,!0)}}}}class A extends f{constructor(){super({id:"editor.unfoldAllMarkerRegions",label:b.localize(7,null),alias:"Unfold All Regions",precondition:m,kbOpts:{kbExpr:c.EditorContextKeys.editorTextFocus,primary:S.KeyChord(2048|41,2048|30),weight:100}})}invoke(W,x,K){if(x.regions.hasTypes())g.setCollapseStateForType(x,u.FoldingRangeKind.Region.value,!1);else{const Y=K.getModel();if(!Y)return;let ee=s.LanguageConfigurationRegistry.getFoldingRules(Y.getLanguageIdentifier().id);if(ee&&ee.markers&&ee.markers.start){let se=new RegExp(ee.markers.start);g.setCollapseStateForMatchingLines(x,se,!1)}}}}class B extends f{constructor(){super({id:"editor.foldAll",label:b.localize(8,null),alias:"Fold All",precondition:m,kbOpts:{kbExpr:c.EditorContextKeys.editorTextFocus,primary:S.KeyChord(2048|41,2048|21),weight:100}})}invoke(W,x,K){g.setCollapseStateLevelsDown(x,!0)}}class F extends f{constructor(){super({id:"editor.unfoldAll",label:b.localize(9,null),alias:"Unfold All",precondition:m,kbOpts:{kbExpr:c.EditorContextKeys.editorTextFocus,primary:S.KeyChord(2048|41,2048|40),weight:100}})}invoke(W,x,K){g.setCollapseStateLevelsDown(x,!1)}}class D extends f{getFoldingLevel(){return parseInt(this.id.substr(D.ID_PREFIX.length))}invoke(W,x,K){g.setCollapseStateAtLevel(x,this.getFoldingLevel(),!0,this.getSelectedLines(K))}}D.ID_PREFIX="editor.foldLevel",D.ID=R=>D.ID_PREFIX+R,d.registerEditorContribution(_.ID,_),d.registerEditorAction(y),d.registerEditorAction(L),d.registerEditorAction(I),d.registerEditorAction(E),d.registerEditorAction(B),d.registerEditorAction(F),d.registerEditorAction(T),d.registerEditorAction(O),d.registerEditorAction(A),d.registerEditorAction(k);for(let R=1;R<=7;R++)d.registerInstantiatedEditorAction(new D({id:D.ID(R),label:b.localize(10,null,R),alias:`Fold Level ${R}`,precondition:m,kbOpts:{kbExpr:c.EditorContextKeys.editorTextFocus,primary:S.KeyChord(2048|41,2048|21+R),weight:100}}));e.foldBackgroundBackground=h.registerColor("editor.foldBackground",{light:h.transparent(h.editorSelectionBackground,.3),dark:h.transparent(h.editorSelectionBackground,.3),hc:null},b.localize(11,null),!0),e.editorFoldForeground=h.registerColor("editorGutter.foldingControlForeground",{dark:h.iconForeground,light:h.iconForeground,hc:h.iconForeground},b.localize(12,null)),l.registerThemingParticipant((R,W)=>{const x=R.getColor(e.foldBackgroundBackground);x&&W.addRule(`.monaco-editor .folded-background { background-color: ${x}; }`);const K=R.getColor(e.editorFoldForeground);K&&W.addRule(` + .monaco-editor .cldr${l.ThemeIcon.asCSSSelector(p.foldingExpandedIcon)}, + .monaco-editor .cldr${l.ThemeIcon.asCSSSelector(p.foldingCollapsedIcon)} { + color: ${K} !important; + } + `)})}),define(Q[268],J([0,1,479,2,16,14,3,13,25,655,28,34,27,9,557,80]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.NextMarkerAction=e.MarkerController=void 0;let r=class gt{constructor(v,y,L,I,k){this._markerNavigationService=y,this._contextKeyService=L,this._editorService=I,this._instantiationService=k,this._sessionDispoables=new N.DisposableStore,this._editor=v,this._widgetVisible=m.bindTo(this._contextKeyService)}static get(v){return v.getContribution(gt.ID)}dispose(){this._cleanUp(),this._sessionDispoables.dispose()}_cleanUp(){this._widgetVisible.reset(),this._sessionDispoables.clear(),this._widget=void 0,this._model=void 0}_getOrCreateModel(v){if(this._model&&this._model.matches(v))return this._model;let y=!1;return this._model&&(y=!0,this._cleanUp()),this._model=this._markerNavigationService.getMarkerList(v),y&&this._model.move(!0,this._editor.getModel(),this._editor.getPosition()),this._widget=this._instantiationService.createInstance(g.MarkerNavigationWidget,this._editor),this._widget.onDidClose(()=>this.close(),this,this._sessionDispoables),this._widgetVisible.set(!0),this._sessionDispoables.add(this._model),this._sessionDispoables.add(this._widget),this._sessionDispoables.add(this._editor.onDidChangeCursorPosition(L=>{var I,k,E;(!((I=this._model)===null||I===void 0?void 0:I.selected)||!S.Range.containsPosition((k=this._model)===null||k===void 0?void 0:k.selected.marker,L.position))&&((E=this._model)===null||E===void 0||E.resetIndex())})),this._sessionDispoables.add(this._model.onDidChange(()=>{if(!(!this._widget||!this._widget.position||!this._model)){const L=this._model.find(this._editor.getModel().uri,this._widget.position);L?this._widget.updateMarker(L.marker):this._widget.showStale()}})),this._sessionDispoables.add(this._widget.onDidSelectRelatedInformation(L=>{this._editorService.openCodeEditor({resource:L.resource,options:{pinned:!0,revealIfOpened:!0,selection:S.Range.lift(L).collapseToStart()}},this._editor),this.close(!1)})),this._sessionDispoables.add(this._editor.onDidChangeModel(()=>this._cleanUp())),this._model}close(v=!0){this._cleanUp(),v&&this._editor.focus()}showAtMarker(v){if(this._editor.hasModel()){const y=this._getOrCreateModel(this._editor.getModel().uri);y.resetIndex(),y.move(!0,this._editor.getModel(),new w.Position(v.startLineNumber,v.startColumn)),y.selected&&this._widget.showAtMarker(y.selected.marker,y.selected.index,y.selected.total)}}nagivate(v,y){return Ie(this,void 0,void 0,function*(){if(this._editor.hasModel()){const L=this._getOrCreateModel(y?void 0:this._editor.getModel().uri);if(L.move(v,this._editor.getModel(),this._editor.getPosition()),!L.selected)return;if(L.selected.marker.resource.toString()!==this._editor.getModel().uri.toString()){this._cleanUp();const I=yield this._editorService.openCodeEditor({resource:L.selected.marker.resource,options:{pinned:!1,revealIfOpened:!0,selectionRevealType:2,selection:L.selected.marker}},this._editor);I&&(gt.get(I).close(),gt.get(I).nagivate(v,y))}else this._widget.showAtMarker(L.selected.marker,L.selected.index,L.selected.total)}})}};r.ID="editor.contrib.markerController",r=Me([_e(1,a.IMarkerNavigationService),_e(2,M.IContextKeyService),_e(3,p.ICodeEditorService),_e(4,s.IInstantiationService)],r),e.MarkerController=r;class i extends C.EditorAction{constructor(v,y,L){super(L);this._next=v,this._multiFile=y}run(v,y){return Ie(this,void 0,void 0,function*(){y.hasModel()&&r.get(y).nagivate(this._next,this._multiFile)})}}class n extends i{constructor(){super(!0,!1,{id:n.ID,label:n.LABEL,alias:"Go to Next Problem (Error, Warning, Info)",precondition:void 0,kbOpts:{kbExpr:d.EditorContextKeys.focus,primary:512|66,weight:100},menuOpts:{menuId:g.MarkerNavigationWidget.TitleMenu,title:n.LABEL,icon:u.registerIcon("marker-navigation-next",o.Codicon.chevronDown,b.localize(1,null)),group:"navigation",order:1}})}}e.NextMarkerAction=n,n.ID="editor.action.marker.next",n.LABEL=b.localize(0,null);class t extends i{constructor(){super(!1,!1,{id:t.ID,label:t.LABEL,alias:"Go to Previous Problem (Error, Warning, Info)",precondition:void 0,kbOpts:{kbExpr:d.EditorContextKeys.focus,primary:1024|512|66,weight:100},menuOpts:{menuId:g.MarkerNavigationWidget.TitleMenu,title:n.LABEL,icon:u.registerIcon("marker-navigation-previous",o.Codicon.chevronUp,b.localize(3,null)),group:"navigation",order:2}})}}t.ID="editor.action.marker.prev",t.LABEL=b.localize(2,null);class l extends i{constructor(){super(!0,!0,{id:"editor.action.marker.nextInFiles",label:b.localize(4,null),alias:"Go to Next Problem in Files (Error, Warning, Info)",precondition:void 0,kbOpts:{kbExpr:d.EditorContextKeys.focus,primary:66,weight:100},menuOpts:{menuId:c.MenuId.MenubarGoMenu,title:b.localize(5,null),group:"6_problem_nav",order:1}})}}class h extends i{constructor(){super(!1,!0,{id:"editor.action.marker.prevInFiles",label:b.localize(6,null),alias:"Go to Previous Problem in Files (Error, Warning, Info)",precondition:void 0,kbOpts:{kbExpr:d.EditorContextKeys.focus,primary:1024|66,weight:100},menuOpts:{menuId:c.MenuId.MenubarGoMenu,title:b.localize(7,null),group:"6_problem_nav",order:2}})}}C.registerEditorContribution(r.ID,r),C.registerEditorAction(n),C.registerEditorAction(t),C.registerEditorAction(l),C.registerEditorAction(h);const m=new M.RawContextKey("markersNavigationVisible",!1),_=C.EditorCommand.bindToContribution(r.get);C.registerEditorCommand(new _({id:"closeMarkersNavigation",precondition:m,handler:f=>f.close(),kbOpts:{weight:100+50,kbExpr:d.EditorContextKeys.focus,primary:9,secondary:[1024|9]}}))}),define(Q[660],J([0,1,490,7,2,3,19,85,44,178,12,58,268,37,15,145,263,130,59,209]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MarkerHoverParticipant=e.MarkerHover=void 0;const l=N.$;class h{constructor(v,y){this.range=v,this.marker=y}equals(v){return v instanceof h?C.IMarkerData.makeKey(this.marker)===C.IMarkerData.makeKey(v.marker):!1}}e.MarkerHover=h;const m={type:2,filter:{include:i.CodeActionKind.QuickFix}};let _=class{constructor(v,y,L,I,k){this._editor=v,this._hover=y,this._markerDecorationsService=L,this._keybindingService=I,this._openerService=k,this.recentMarkerCodeActionsInfo=void 0}computeSync(v,y){if(!this._editor.hasModel())return[];const L=this._editor.getModel(),I=v.startLineNumber,k=L.getLineMaxColumn(I),E=[];for(const T of y){const O=T.range.startLineNumber===I?T.range.startColumn:1,A=T.range.endLineNumber===I?T.range.endColumn:k,B=this._markerDecorationsService.getMarker(L.uri,T);if(!!B){const F=new w.Range(v.startLineNumber,O,v.startLineNumber,A);E.push(new h(F,B))}}return E}renderHoverParts(v,y){if(!v.length)return M.Disposable.None;const L=new M.DisposableStore;v.forEach(k=>y.appendChild(this.renderMarkerHover(k,L)));const I=v.length===1?v[0]:v.sort((k,E)=>C.MarkerSeverity.compare(k.marker.severity,E.marker.severity))[0];return y.appendChild(this.renderMarkerStatusbar(I,L)),L}renderMarkerHover(v,y){const L=l("div.hover-row"),I=N.append(L,l("div.marker.hover-contents")),{source:k,message:E,code:T,relatedInformation:O}=v.marker;this._editor.applyFontInfo(I);const A=N.append(I,l("span"));if(A.style.whiteSpace="pre-wrap",A.innerText=E,k||T)if(T&&typeof T!="string"){const B=l("span");if(k){const W=N.append(B,l("span"));W.innerText=k}const F=N.append(B,l("a.code-link"));F.setAttribute("href",T.target.toString()),y.add(N.addDisposableListener(F,"click",W=>{this._openerService.open(T.target),W.preventDefault(),W.stopPropagation()}));const D=N.append(F,l("span"));D.innerText=T.value;const R=N.append(I,B);R.style.opacity="0.6",R.style.paddingLeft="6px"}else{const B=N.append(I,l("span"));B.style.opacity="0.6",B.style.paddingLeft="6px",B.innerText=k&&T?`${k}(${T})`:k||`(${T})`}if(S.isNonEmptyArray(O))for(const{message:B,resource:F,startLineNumber:D,startColumn:R}of O){const W=N.append(I,l("div"));W.style.marginTop="8px";const x=N.append(W,l("a"));x.innerText=`${d.basename(F)}(${D}, ${R}): `,x.style.cursor="pointer",y.add(N.addDisposableListener(x,"click",Y=>{Y.stopPropagation(),Y.preventDefault(),this._openerService&&this._openerService.open(F,{fromUserGesture:!0,editorOptions:{selection:{startLineNumber:D,startColumn:R}}}).catch(p.onUnexpectedError)}));const K=N.append(W,l("span"));K.innerText=B,this._editor.applyFontInfo(K)}return L}renderMarkerStatusbar(v,y){const L=l("div.hover-row.status-bar"),I=N.append(L,l("div.actions"));if((v.marker.severity===C.MarkerSeverity.Error||v.marker.severity===C.MarkerSeverity.Warning||v.marker.severity===C.MarkerSeverity.Info)&&y.add(this.renderAction(I,{label:b.localize(0,null),commandId:o.NextMarkerAction.ID,run:()=>{this._hover.hide(),o.MarkerController.get(this._editor).showAtMarker(v.marker),this._editor.focus()}})),!this._editor.getOption(75)){const k=N.append(I,l("div"));this.recentMarkerCodeActionsInfo&&(C.IMarkerData.makeKey(this.recentMarkerCodeActionsInfo.marker)===C.IMarkerData.makeKey(v.marker)?this.recentMarkerCodeActionsInfo.hasCodeActions||(k.textContent=b.localize(1,null)):this.recentMarkerCodeActionsInfo=void 0);const E=this.recentMarkerCodeActionsInfo&&!this.recentMarkerCodeActionsInfo.hasCodeActions?M.Disposable.None:y.add(a.disposableTimeout(()=>k.textContent=b.localize(2,null),200));k.textContent||(k.textContent=String.fromCharCode(160));const T=this.getCodeActions(v.marker);y.add(M.toDisposable(()=>T.cancel())),T.then(O=>{if(E.dispose(),this.recentMarkerCodeActionsInfo={marker:v.marker,hasCodeActions:O.validActions.length>0},!this.recentMarkerCodeActionsInfo.hasCodeActions){O.dispose(),k.textContent=b.localize(3,null);return}k.style.display="none";let A=!1;y.add(M.toDisposable(()=>{A||O.dispose()})),y.add(this.renderAction(I,{label:b.localize(4,null),commandId:r.QuickFixAction.Id,run:B=>{A=!0;const F=r.QuickFixController.get(this._editor),D=N.getDomNodePagePosition(B);this._hover.hide(),F.showCodeActions(m,O,{x:D.left+6,y:D.top+D.height+6})}}))})}return L}renderAction(v,y){const L=this._keybindingService.lookupKeybinding(y.commandId),I=L?L.getLabel():null;return t.renderHoverAction(v,y,I)}getCodeActions(v){return a.createCancelablePromise(y=>u.getCodeActions(this._editor.getModel(),new w.Range(v.startLineNumber,v.startColumn,v.endLineNumber,v.endColumn),m,n.Progress.None,y))}};_=Me([_e(2,g.IMarkerDecorationsService),_e(3,s.IKeybindingService),_e(4,c.IOpenerService)],_),e.MarkerHoverParticipant=_}),define(Q[661],J([0,1,7,23,29,2,14,3,31,18,249,260,400,597,228,11,19,22,52,209,660,627]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l,h){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ModesContentHoverWidget=void 0;class m{constructor(I,k,E){this.range=I,this.color=k,this.provider=E}equals(I){return!1}}class _{constructor(I,k){this.owner=I,this.data=k}}class f{constructor(I,k,E){this._markerHoverParticipant=k,this._markdownHoverParticipant=E,this._editor=I,this._result=[],this._range=null}setRange(I){this._range=I,this._result=[]}clearResult(){this._result=[]}computeAsync(I){return Ie(this,void 0,void 0,function*(){return!this._editor.hasModel()||!this._range?Promise.resolve([]):(yield this._markdownHoverParticipant.computeAsync(this._range,I)).map(E=>new _(this._markdownHoverParticipant,E))})}computeSync(){if(!this._editor.hasModel()||!this._range)return[];const I=this._editor.getModel(),k=this._range,E=k.startLineNumber;if(E>this._editor.getModel().getLineCount())return[];const T=I.getLineMaxColumn(E),O=this._editor.getLineDecorations(E).filter(R=>{if(R.options.isWholeLine)return!0;const W=R.range.startLineNumber===E?R.range.startColumn:1,x=R.range.endLineNumber===E?R.range.endColumn:T;return!(W>k.startColumn||k.endColumn>x)});let A=[];const B=c.ColorDetector.get(this._editor);for(const R of O){const W=B.getColorData(R.range.getStartPosition());if(W){const{color:x,range:K}=W.colorInfo;A.push(new _(null,new m(C.Range.lift(K),x,W.provider)));break}}const F=this._markdownHoverParticipant.computeSync(this._range,O);A=A.concat(F.map(R=>new _(this._markdownHoverParticipant,R)));const D=this._markerHoverParticipant.computeSync(this._range,O);return A=A.concat(D.map(R=>new _(this._markerHoverParticipant,R))),r.coalesce(A)}onResult(I,k){k?this._result=I.concat(this._result):this._result=this._result.concat(I)}getResult(){return this._result.slice(0)}getResultWithLoadingMessage(){if(this._range){const I=new _(this._markdownHoverParticipant,this._markdownHoverParticipant.createLoadingMessage(this._range));return this._result.slice(0).concat([I])}return this._result.slice(0)}}class v extends n.Widget{constructor(I,k,E,T){super();this._hoverVisibleKey=k,this._themeService=T,this.allowEditorOverflow=!0,this._markerHoverParticipant=E.createInstance(l.MarkerHoverParticipant,I,this),this._markdownHoverParticipant=E.createInstance(h.MarkdownHoverParticipant,I,this),this._hover=this._register(new t.HoverWidget),this._id=v.ID,this._editor=I,this._isVisible=!1,this._stoleFocus=!1,this._renderDisposable=null,this.onkeydown(this._hover.containerDomNode,O=>{O.equals(9)&&this.hide()}),this._register(this._editor.onDidChangeConfiguration(O=>{O.hasChanged(38)&&this._updateFont()})),this._editor.onDidLayoutChange(()=>this.layout()),this.layout(),this._editor.addContentWidget(this),this._showAtPosition=null,this._showAtRange=null,this._stoleFocus=!1,this._messages=[],this._lastRange=null,this._computer=new f(this._editor,this._markerHoverParticipant,this._markdownHoverParticipant),this._highlightDecorations=[],this._isChangingDecorations=!1,this._shouldFocus=!1,this._colorPicker=null,this._hoverOperation=new a.HoverOperation(this._computer,O=>this._withResult(O,!0),null,O=>this._withResult(O,!1),this._editor.getOption(48).delay),this._register(b.addStandardDisposableListener(this.getDomNode(),b.EventType.FOCUS,()=>{this._colorPicker&&this.getDomNode().classList.add("colorpicker-hover")})),this._register(b.addStandardDisposableListener(this.getDomNode(),b.EventType.BLUR,()=>{this.getDomNode().classList.remove("colorpicker-hover")})),this._register(I.onDidChangeConfiguration(()=>{this._hoverOperation.setHoverTime(this._editor.getOption(48).delay)})),this._register(g.TokenizationRegistry.onDidChange(()=>{this._isVisible&&this._lastRange&&this._messages.length>0&&(this._messages=this._messages.map(O=>{var A,B;if(O.data instanceof m&&!!((A=this._lastRange)===null||A===void 0?void 0:A.intersectRanges(O.data.range))&&((B=this._colorPicker)===null||B===void 0?void 0:B.model.color)){const F=this._colorPicker.model.color,D={red:F.rgba.r/255,green:F.rgba.g/255,blue:F.rgba.b/255,alpha:F.rgba.a};return new _(O.owner,new m(O.data.range,D,O.data.provider))}else return O}),this._hover.contentsDomNode.textContent="",this._renderMessages(this._lastRange,this._messages))}))}dispose(){this._hoverOperation.cancel(),this._editor.removeContentWidget(this),super.dispose()}getId(){return this._id}getDomNode(){return this._hover.containerDomNode}showAt(I,k,E){this._showAtPosition=I,this._showAtRange=k,this._hoverVisibleKey.set(!0),this._isVisible=!0,this._hover.containerDomNode.classList.toggle("hidden",!this._isVisible),this._editor.layoutContentWidget(this),this._editor.render(),this._stoleFocus=E,E&&this._hover.containerDomNode.focus()}getPosition(){return this._isVisible?{position:this._showAtPosition,range:this._showAtRange,preference:[1,2]}:null}_updateFont(){Array.prototype.slice.call(this._hover.contentsDomNode.getElementsByClassName("code")).forEach(k=>this._editor.applyFontInfo(k))}_updateContents(I){this._hover.contentsDomNode.textContent="",this._hover.contentsDomNode.appendChild(I),this._updateFont(),this._editor.layoutContentWidget(this),this._hover.onContentsChanged()}layout(){const I=Math.max(this._editor.getLayoutInfo().height/4,250),{fontSize:k,lineHeight:E}=this._editor.getOption(38);this._hover.contentsDomNode.style.fontSize=`${k}px`,this._hover.contentsDomNode.style.lineHeight=`${E}px`,this._hover.contentsDomNode.style.maxHeight=`${I}px`,this._hover.contentsDomNode.style.maxWidth=`${Math.max(this._editor.getLayoutInfo().width*.66,500)}px`}onModelDecorationsChanged(){this._isChangingDecorations||this._isVisible&&(this._hoverOperation.cancel(),this._computer.clearResult(),this._colorPicker||this._hoverOperation.start(0))}startShowingAt(I,k,E){if(!(this._lastRange&&this._lastRange.equalsRange(I))){if(this._hoverOperation.cancel(),this._isVisible)if(!this._showAtPosition||this._showAtPosition.lineNumber!==I.startLineNumber)this.hide();else{let T=[];for(let O=0,A=this._messages.length;O=I.endColumn&&T.push(B)}if(T.length>0){if(y(T,this._messages))return;this._renderMessages(I,T)}else this.hide()}this._lastRange=I,this._computer.setRange(I),this._shouldFocus=E,this._hoverOperation.start(k)}}hide(){this._lastRange=null,this._hoverOperation.cancel(),this._isVisible&&(setTimeout(()=>{this._isVisible||this._hoverVisibleKey.set(!1)},0),this._isVisible=!1,this._hover.containerDomNode.classList.toggle("hidden",!this._isVisible),this._editor.layoutContentWidget(this),this._stoleFocus&&this._editor.focus()),this._isChangingDecorations=!0,this._highlightDecorations=this._editor.deltaDecorations(this._highlightDecorations,[]),this._isChangingDecorations=!1,this._renderDisposable&&(this._renderDisposable.dispose(),this._renderDisposable=null),this._colorPicker=null}isColorPickerVisible(){return!!this._colorPicker}onContentsChanged(){this._hover.onContentsChanged()}_withResult(I,k){this._messages=I,this._lastRange&&this._messages.length>0?this._renderMessages(this._lastRange,this._messages):k&&this.hide()}_renderMessages(I,k){this._renderDisposable&&(this._renderDisposable.dispose(),this._renderDisposable=null),this._colorPicker=null;let E=1073741824,T=k[0].data.range?C.Range.lift(k[0].data.range):null,O=document.createDocumentFragment(),A=!1;const B=new w.DisposableStore,F=[],D=[];k.forEach(R=>{const W=R.data;if(!!W.range)if(E=Math.min(E,W.range.startColumn),T=T?C.Range.plusRange(T,W.range):C.Range.lift(W.range),W instanceof m){A=!0;const{red:x,green:K,blue:Y,alpha:ee}=W.color,se=new M.RGBA(Math.round(x*255),Math.round(K*255),Math.round(Y*255),ee),ne=new M.Color(se);if(!this._editor.hasModel())return;const le=this._editor.getModel();let X=new C.Range(W.range.startLineNumber,W.range.startColumn,W.range.endLineNumber,W.range.endColumn),z={range:W.range,color:W.color};const P=new o.ColorPickerModel(ne,[],0),V=new s.ColorPickerWidget(O,P,this._editor.getOption(122),this._themeService);p.getColorPresentations(le,z,W.provider,N.CancellationToken.None).then(U=>{if(P.colorPresentations=U||[],!!this._editor.hasModel()){const H=this._editor.getModel().getValueInRange(W.range);P.guessColorPresentation(ne,H);const $=()=>{let G,j;if(P.presentation.textEdit){G=[P.presentation.textEdit],j=new C.Range(P.presentation.textEdit.range.startLineNumber,P.presentation.textEdit.range.startColumn,P.presentation.textEdit.range.endLineNumber,P.presentation.textEdit.range.endColumn);const te=this._editor.getModel()._setTrackedRange(null,j,3);this._editor.pushUndoStop(),this._editor.executeEdits("colorpicker",G),j=this._editor.getModel()._getTrackedRange(te)||j}else G=[{identifier:null,range:X,text:P.presentation.label,forceMoveMarkers:!1}],j=X.setEndPosition(X.endLineNumber,X.startColumn+P.presentation.label.length),this._editor.pushUndoStop(),this._editor.executeEdits("colorpicker",G);P.presentation.additionalTextEdits&&(G=[...P.presentation.additionalTextEdits],this._editor.executeEdits("colorpicker",G),this.hide()),this._editor.pushUndoStop(),X=j},ie=G=>p.getColorPresentations(le,{range:X,color:{red:G.rgba.r/255,green:G.rgba.g/255,blue:G.rgba.b/255,alpha:G.rgba.a}},W.provider,N.CancellationToken.None).then(j=>{P.colorPresentations=j||[]}),oe=P.onColorFlushed(G=>{ie(G).then($)}),ae=P.onDidChangeColor(ie);this._colorPicker=V,this.showAt(X.getStartPosition(),X,this._shouldFocus),this._updateContents(O),this._colorPicker.layout(),this._renderDisposable=w.combinedDisposable(oe,ae,V,B)}})}else W instanceof l.MarkerHover?F.push(W):W instanceof h.MarkdownHover&&D.push(W)}),D.length>0&&B.add(this._markdownHoverParticipant.renderHoverParts(D,O)),F.length&&B.add(this._markerHoverParticipant.renderHoverParts(F,O)),this._renderDisposable=B,!A&&O.hasChildNodes()&&(this.showAt(new S.Position(I.startLineNumber,E),T,this._shouldFocus),this._updateContents(O)),this._isChangingDecorations=!0,this._highlightDecorations=this._editor.deltaDecorations(this._highlightDecorations,T?[{range:T,options:v._DECORATION_OPTIONS}]:[]),this._isChangingDecorations=!1}}e.ModesContentHoverWidget=v,v.ID="editor.contrib.modesContentHoverWidget",v._DECORATION_OPTIONS=d.ModelDecorationOptions.register({className:"hoverHighlight"});function y(L,I){if(L.length!==I.length)return!1;for(let k=0;k{const k=L.getColor(i.textLinkForeground);k&&I.addRule(`.monaco-hover .hover-contents a.code-link span:hover { color: ${k}; }`)})}),define(Q[662],J([0,1,497,15,39,2,13,241,3,21,25,53,31,18,267,34,22,11,16]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SelectionHighlighter=e.CompatChangeAll=e.SelectHighlightsAction=e.MoveSelectionToPreviousFindMatchAction=e.MoveSelectionToNextFindMatchAction=e.AddSelectionToPreviousFindMatchAction=e.AddSelectionToNextFindMatchAction=e.MultiCursorSelectionControllerAction=e.MultiCursorSelectionController=e.MultiCursorSession=e.MultiCursorSessionResult=e.InsertCursorBelow=e.InsertCursorAbove=void 0;class t extends S.EditorAction{constructor(){super({id:"editor.action.insertCursorAbove",label:b.localize(0,null),alias:"Add Cursor Above",precondition:void 0,kbOpts:{kbExpr:p.EditorContextKeys.editorTextFocus,primary:2048|512|16,linux:{primary:1024|512|16,secondary:[2048|1024|16]},weight:100},menuOpts:{menuId:u.MenuId.MenubarSelectionMenu,group:"3_multi",title:b.localize(1,null),order:2}})}run(x,K,Y){if(!!K.hasModel()){const ee=Y&&Y.logicalLine===!0,se=K._getViewModel();se.cursorConfig.readOnly||(se.pushStackElement(),se.setCursorStates(Y.source,3,C.CursorMoveCommands.addCursorUp(se,se.getCursorStates(),ee)),se.revealTopMostCursor(Y.source))}}}e.InsertCursorAbove=t;class l extends S.EditorAction{constructor(){super({id:"editor.action.insertCursorBelow",label:b.localize(2,null),alias:"Add Cursor Below",precondition:void 0,kbOpts:{kbExpr:p.EditorContextKeys.editorTextFocus,primary:2048|512|18,linux:{primary:1024|512|18,secondary:[2048|1024|18]},weight:100},menuOpts:{menuId:u.MenuId.MenubarSelectionMenu,group:"3_multi",title:b.localize(3,null),order:3}})}run(x,K,Y){if(!!K.hasModel()){const ee=Y&&Y.logicalLine===!0,se=K._getViewModel();se.cursorConfig.readOnly||(se.pushStackElement(),se.setCursorStates(Y.source,3,C.CursorMoveCommands.addCursorDown(se,se.getCursorStates(),ee)),se.revealBottomMostCursor(Y.source))}}}e.InsertCursorBelow=l;class h extends S.EditorAction{constructor(){super({id:"editor.action.insertCursorAtEndOfEachLineSelected",label:b.localize(4,null),alias:"Add Cursors to Line Ends",precondition:void 0,kbOpts:{kbExpr:p.EditorContextKeys.editorTextFocus,primary:1024|512|39,weight:100},menuOpts:{menuId:u.MenuId.MenubarSelectionMenu,group:"3_multi",title:b.localize(5,null),order:4}})}getCursorsForSelection(x,K,Y){if(!x.isEmpty()){for(let ee=x.startLineNumber;ee1&&Y.push(new g.Selection(x.endLineNumber,x.endColumn,x.endLineNumber,x.endColumn))}}run(x,K){if(!!K.hasModel()){const Y=K.getModel(),ee=K.getSelections();let se=[];ee.forEach(ne=>this.getCursorsForSelection(ne,Y,se)),se.length>0&&K.setSelections(se)}}}class m extends S.EditorAction{constructor(){super({id:"editor.action.addCursorsToBottom",label:b.localize(6,null),alias:"Add Cursors To Bottom",precondition:void 0})}run(x,K){if(!!K.hasModel()){const Y=K.getSelections(),ee=K.getModel().getLineCount();let se=[];for(let ne=Y[0].startLineNumber;ne<=ee;ne++)se.push(new g.Selection(ne,Y[0].startColumn,ne,Y[0].endColumn));se.length>0&&K.setSelections(se)}}}class _ extends S.EditorAction{constructor(){super({id:"editor.action.addCursorsToTop",label:b.localize(7,null),alias:"Add Cursors To Top",precondition:void 0})}run(x,K){if(!!K.hasModel()){const Y=K.getSelections();let ee=[];for(let se=Y[0].startLineNumber;se>=1;se--)ee.push(new g.Selection(se,Y[0].startColumn,se,Y[0].endColumn));ee.length>0&&K.setSelections(ee)}}}class f{constructor(x,K,Y){this.selections=x,this.revealRange=K,this.revealScrollType=Y}}e.MultiCursorSessionResult=f;class v{constructor(x,K,Y,ee,se,ne,le){this._editor=x,this.findController=K,this.isDisconnectedFromFindController=Y,this.searchText=ee,this.wholeWord=se,this.matchCase=ne,this.currentMatch=le}static create(x,K){if(!x.hasModel())return null;const Y=K.getState();if(!x.hasTextFocus()&&Y.isRevealed&&Y.searchString.length>0)return new v(x,K,!1,Y.searchString,Y.wholeWord,Y.matchCase,null);let ee=!1,se,ne;const le=x.getSelections();le.length===1&&le[0].isEmpty()?(ee=!0,se=!0,ne=!0):(se=Y.wholeWord,ne=Y.matchCase);const X=x.getSelection();let z,P=null;if(X.isEmpty()){const V=x.getConfiguredWordAtPosition(X.getStartPosition());if(!V)return null;z=V.word,P=new g.Selection(X.startLineNumber,V.startColumn,X.startLineNumber,V.endColumn)}else z=x.getModel().getValueInRange(X).replace(/\r\n/g,` +`);return new v(x,K,ee,z,se,ne,P)}addSelectionToNextFindMatch(){if(!this._editor.hasModel())return null;const x=this._getNextMatch();if(!x)return null;const K=this._editor.getSelections();return new f(K.concat(x),x,0)}moveSelectionToNextFindMatch(){if(!this._editor.hasModel())return null;const x=this._getNextMatch();if(!x)return null;const K=this._editor.getSelections();return new f(K.slice(0,K.length-1).concat(x),x,0)}_getNextMatch(){if(!this._editor.hasModel())return null;if(this.currentMatch){const ee=this.currentMatch;return this.currentMatch=null,ee}this.findController.highlightFindOptions();const x=this._editor.getSelections(),K=x[x.length-1],Y=this._editor.getModel().findNextMatch(this.searchText,K.getEndPosition(),!1,this.matchCase,this.wholeWord?this._editor.getOption(110):null,!1);return Y?new g.Selection(Y.range.startLineNumber,Y.range.startColumn,Y.range.endLineNumber,Y.range.endColumn):null}addSelectionToPreviousFindMatch(){if(!this._editor.hasModel())return null;const x=this._getPreviousMatch();if(!x)return null;const K=this._editor.getSelections();return new f(K.concat(x),x,0)}moveSelectionToPreviousFindMatch(){if(!this._editor.hasModel())return null;const x=this._getPreviousMatch();if(!x)return null;const K=this._editor.getSelections();return new f(K.slice(0,K.length-1).concat(x),x,0)}_getPreviousMatch(){if(!this._editor.hasModel())return null;if(this.currentMatch){const ee=this.currentMatch;return this.currentMatch=null,ee}this.findController.highlightFindOptions();const x=this._editor.getSelections(),K=x[x.length-1],Y=this._editor.getModel().findPreviousMatch(this.searchText,K.getStartPosition(),!1,this.matchCase,this.wholeWord?this._editor.getOption(110):null,!1);return Y?new g.Selection(Y.range.startLineNumber,Y.range.startColumn,Y.range.endLineNumber,Y.range.endColumn):null}selectAll(){return this._editor.hasModel()?(this.findController.highlightFindOptions(),this._editor.getModel().findMatches(this.searchText,!0,!1,this.matchCase,this.wholeWord?this._editor.getOption(110):null,!1,1073741824)):[]}}e.MultiCursorSession=v;class y extends w.Disposable{constructor(x){super();this._sessionDispose=this._register(new w.DisposableStore),this._editor=x,this._ignoreSelectionChange=!1,this._session=null}static get(x){return x.getContribution(y.ID)}dispose(){this._endSession(),super.dispose()}_beginSessionIfNeeded(x){if(!this._session){const K=v.create(this._editor,x);if(!K)return;this._session=K;const Y={searchString:this._session.searchText};this._session.isDisconnectedFromFindController&&(Y.wholeWordOverride=1,Y.matchCaseOverride=1,Y.isRegexOverride=2),x.getState().change(Y,!1),this._sessionDispose.add(this._editor.onDidChangeCursorSelection(ee=>{this._ignoreSelectionChange||this._endSession()})),this._sessionDispose.add(this._editor.onDidBlurEditorText(()=>{this._endSession()})),this._sessionDispose.add(x.getState().onFindReplaceStateChange(ee=>{(ee.matchCase||ee.wholeWord)&&this._endSession()}))}}_endSession(){if(this._sessionDispose.clear(),this._session&&this._session.isDisconnectedFromFindController){const x={wholeWordOverride:0,matchCaseOverride:0,isRegexOverride:0};this._session.findController.getState().change(x,!1)}this._session=null}_setSelections(x){this._ignoreSelectionChange=!0,this._editor.setSelections(x),this._ignoreSelectionChange=!1}_expandEmptyToWord(x,K){if(!K.isEmpty())return K;const Y=this._editor.getConfiguredWordAtPosition(K.getStartPosition());return Y?new g.Selection(K.startLineNumber,Y.startColumn,K.startLineNumber,Y.endColumn):K}_applySessionResult(x){!x||(this._setSelections(x.selections),x.revealRange&&this._editor.revealRangeInCenterIfOutsideViewport(x.revealRange,x.revealScrollType))}getSession(x){return this._session}addSelectionToNextFindMatch(x){if(!!this._editor.hasModel()){if(!this._session){const K=this._editor.getSelections();if(K.length>1){const ee=x.getState().matchCase;if(!D(this._editor.getModel(),K,ee)){const ne=this._editor.getModel();let le=[];for(let X=0,z=K.length;X0&&Y.isRegex)K=this._editor.getModel().findMatches(Y.searchString,!0,Y.isRegex,Y.matchCase,Y.wholeWord?this._editor.getOption(110):null,!1,1073741824);else{if(this._beginSessionIfNeeded(x),!this._session)return;K=this._session.selectAll()}if(Y.searchScope){const ee=Y.searchScope;let se=[];K.forEach(ne=>{ee.forEach(le=>{ne.range.endLineNumber<=le.endLineNumber&&ne.range.startLineNumber>=le.startLineNumber&&se.push(ne)})}),K=se}if(K.length>0){const ee=this._editor.getSelection();for(let se=0,ne=K.length;senew g.Selection(se.range.startLineNumber,se.range.startColumn,se.range.endLineNumber,se.range.endColumn)))}}}}e.MultiCursorSelectionController=y,y.ID="editor.contrib.multiCursorController";class L extends S.EditorAction{run(x,K){const Y=y.get(K);if(!!Y){const ee=a.CommonFindController.get(K);!ee||this._run(Y,ee)}}}e.MultiCursorSelectionControllerAction=L;class I extends L{constructor(){super({id:"editor.action.addSelectionToNextFindMatch",label:b.localize(8,null),alias:"Add Selection To Next Find Match",precondition:void 0,kbOpts:{kbExpr:p.EditorContextKeys.focus,primary:2048|34,weight:100},menuOpts:{menuId:u.MenuId.MenubarSelectionMenu,group:"3_multi",title:b.localize(9,null),order:5}})}_run(x,K){x.addSelectionToNextFindMatch(K)}}e.AddSelectionToNextFindMatchAction=I;class k extends L{constructor(){super({id:"editor.action.addSelectionToPreviousFindMatch",label:b.localize(10,null),alias:"Add Selection To Previous Find Match",precondition:void 0,menuOpts:{menuId:u.MenuId.MenubarSelectionMenu,group:"3_multi",title:b.localize(11,null),order:6}})}_run(x,K){x.addSelectionToPreviousFindMatch(K)}}e.AddSelectionToPreviousFindMatchAction=k;class E extends L{constructor(){super({id:"editor.action.moveSelectionToNextFindMatch",label:b.localize(12,null),alias:"Move Last Selection To Next Find Match",precondition:void 0,kbOpts:{kbExpr:p.EditorContextKeys.focus,primary:M.KeyChord(2048|41,2048|34),weight:100}})}_run(x,K){x.moveSelectionToNextFindMatch(K)}}e.MoveSelectionToNextFindMatchAction=E;class T extends L{constructor(){super({id:"editor.action.moveSelectionToPreviousFindMatch",label:b.localize(13,null),alias:"Move Last Selection To Previous Find Match",precondition:void 0})}_run(x,K){x.moveSelectionToPreviousFindMatch(K)}}e.MoveSelectionToPreviousFindMatchAction=T;class O extends L{constructor(){super({id:"editor.action.selectHighlights",label:b.localize(14,null),alias:"Select All Occurrences of Find Match",precondition:void 0,kbOpts:{kbExpr:p.EditorContextKeys.focus,primary:2048|1024|42,weight:100},menuOpts:{menuId:u.MenuId.MenubarSelectionMenu,group:"3_multi",title:b.localize(15,null),order:7}})}_run(x,K){x.selectAll(K)}}e.SelectHighlightsAction=O;class A extends L{constructor(){super({id:"editor.action.changeAll",label:b.localize(16,null),alias:"Change All Occurrences",precondition:n.ContextKeyExpr.and(p.EditorContextKeys.writable,p.EditorContextKeys.editorTextFocus),kbOpts:{kbExpr:p.EditorContextKeys.editorTextFocus,primary:2048|60,weight:100},contextMenuOpts:{group:"1_modification",order:1.2}})}_run(x,K){x.selectAll(K)}}e.CompatChangeAll=A;class B{constructor(x,K,Y,ee){this.searchText=x,this.matchCase=K,this.wordSeparators=Y,this.modelVersionId=ee}static softEquals(x,K){return!x&&!K?!0:!x||!K?!1:x.searchText===K.searchText&&x.matchCase===K.matchCase&&x.wordSeparators===K.wordSeparators&&x.modelVersionId===K.modelVersionId}}class F extends w.Disposable{constructor(x){super();this.editor=x,this._isEnabled=x.getOption(92),this.decorations=[],this.updateSoon=this._register(new N.RunOnceScheduler(()=>this._update(),300)),this.state=null,this._register(x.onDidChangeConfiguration(K=>{this._isEnabled=x.getOption(92)})),this._register(x.onDidChangeCursorSelection(K=>{!this._isEnabled||(K.selection.isEmpty()?K.reason===3?(this.state&&this._setState(null),this.updateSoon.schedule()):this._setState(null):this._update())})),this._register(x.onDidChangeModel(K=>{this._setState(null)})),this._register(x.onDidChangeModelContent(K=>{this._isEnabled&&this.updateSoon.schedule()})),this._register(a.CommonFindController.get(x).getState().onFindReplaceStateChange(K=>{this._update()}))}_update(){this._setState(F._createState(this._isEnabled,this.editor))}static _createState(x,K){if(!x||!K.hasModel())return null;const Y=K.getSelection();if(Y.startLineNumber!==Y.endLineNumber)return null;const ee=y.get(K);if(!ee)return null;const se=a.CommonFindController.get(K);if(!se)return null;let ne=ee.getSession(se);if(!ne){const z=K.getSelections();if(z.length>1){const V=se.getState().matchCase;if(!D(K.getModel(),z,V))return null}ne=v.create(K,se)}if(!ne||ne.currentMatch||/^[ \t]+$/.test(ne.searchText)||ne.searchText.length>200)return null;const le=se.getState(),X=le.matchCase;if(le.isRevealed){let z=le.searchString;X||(z=z.toLowerCase());let P=ne.searchText;if(X||(P=P.toLowerCase()),z===P&&ne.matchCase===le.matchCase&&ne.wholeWord===le.wholeWord&&!le.isRegex)return null}return new B(ne.searchText,ne.matchCase,ne.wholeWord?K.getOption(110):null,K.getModel().getVersionId())}_setState(x){if(B.softEquals(this.state,x)){this.state=x;return}if(this.state=x,!this.state){this.decorations=this.editor.deltaDecorations(this.decorations,[]);return}if(!!this.editor.hasModel()){const K=this.editor.getModel();if(!K.isTooLargeForTokenization()){const Y=s.DocumentHighlightProviderRegistry.has(K)&&this.editor.getOption(66);let ee=K.findMatches(this.state.searchText,!0,!1,this.state.matchCase,this.state.wordSeparators,!1).map(X=>X.range);ee.sort(d.Range.compareRangesUsingStarts);let se=this.editor.getSelections();se.sort(d.Range.compareRangesUsingStarts);let ne=[];for(let X=0,z=0,P=ee.length,V=se.length;X=V)ne.push(U),X++;else{const H=d.Range.compareRangesUsingStarts(U,se[z]);H<0?((se[z].isEmpty()||!d.Range.areIntersecting(U,se[z]))&&ne.push(U),X++):(H>0||X++,z++)}}const le=ne.map(X=>({range:X,options:Y?F._SELECTION_HIGHLIGHT:F._SELECTION_HIGHLIGHT_OVERVIEW}));this.decorations=this.editor.deltaDecorations(this.decorations,le)}}}dispose(){this._setState(null),super.dispose()}}e.SelectionHighlighter=F,F.ID="editor.contrib.selectionHighlighter",F._SELECTION_HIGHLIGHT_OVERVIEW=o.ModelDecorationOptions.register({stickiness:1,className:"selectionHighlight",overviewRuler:{color:i.themeColorFromId(r.overviewRulerSelectionHighlightForeground),position:c.OverviewRulerLane.Center}}),F._SELECTION_HIGHLIGHT=o.ModelDecorationOptions.register({stickiness:1,className:"selectionHighlight"});function D(W,x,K){const Y=R(W,x[0],!K);for(let ee=1,se=x.length;ee{T?(this.show(),this.render(T)):this.hide()}))}createParamaterHintDOMNodes(){const L=m(".editor-widget.parameter-hints-widget"),I=b.append(L,m(".phwrapper"));I.tabIndex=-1;const k=b.append(I,m(".controls")),E=b.append(k,m(".button"+u.ThemeIcon.asCSSSelector(f))),T=b.append(k,m(".overloads")),O=b.append(k,m(".button"+u.ThemeIcon.asCSSSelector(_))),A=N.stop(N.domEvent(E,"click"));this._register(A(this.previous,this));const B=N.stop(N.domEvent(O,"click"));this._register(B(this.next,this));const F=m(".body"),D=new w.DomScrollableElement(F,{});this._register(D),I.appendChild(D.getDomNode());const R=b.append(F,m(".signature")),W=b.append(F,m(".docs"));L.style.userSelect="text",this.domNodes={element:L,signature:R,overloads:T,docs:W,scrollbar:D},this.editor.addContentWidget(this),this.hide(),this._register(this.editor.onDidChangeCursorSelection(K=>{this.visible&&this.editor.layoutContentWidget(this)}));const x=()=>{if(!!this.domNodes){const K=this.editor.getOption(38);this.domNodes.element.style.fontSize=`${K.fontSize}px`}};x(),this._register(S.Event.chain(this.editor.onDidChangeConfiguration.bind(this.editor)).filter(K=>K.hasChanged(38)).on(x,null)),this._register(this.editor.onDidLayoutChange(K=>this.updateMaxHeight())),this.updateMaxHeight()}show(){this.visible||(this.domNodes||this.createParamaterHintDOMNodes(),this.keyVisible.set(!0),this.visible=!0,setTimeout(()=>{this.domNodes&&this.domNodes.element.classList.add("visible")},100),this.editor.layoutContentWidget(this))}hide(){this.renderDisposeables.clear(),!!this.visible&&(this.keyVisible.reset(),this.visible=!1,this.announcedLabel=null,this.domNodes&&this.domNodes.element.classList.remove("visible"),this.editor.layoutContentWidget(this))}getPosition(){return this.visible?{position:this.editor.getPosition(),preference:[1,2]}:null}render(L){var I;if(this.renderDisposeables.clear(),!!this.domNodes){const k=L.signatures.length>1;this.domNodes.element.classList.toggle("multiple",k),this.keyMultipleSignatures.set(k),this.domNodes.signature.innerText="",this.domNodes.docs.innerText="";const E=L.signatures[L.activeSignature];if(!!E){const T=b.append(this.domNodes.signature,m(".code")),O=this.editor.getOption(38);T.style.fontSize=`${O.fontSize}px`,T.style.fontFamily=O.fontFamily;const A=E.parameters.length>0,B=(I=E.activeParameter)!==null&&I!==void 0?I:L.activeParameter;if(A)this.renderParameters(T,E,B);else{const R=b.append(T,m("span"));R.textContent=E.label}const F=E.parameters[B];if(F==null?void 0:F.documentation){const R=m("span.documentation");if(typeof F.documentation=="string")R.textContent=F.documentation;else{const W=this.renderMarkdownDocs(F.documentation);R.appendChild(W.element)}b.append(this.domNodes.docs,m("p",{},R))}if(E.documentation!==void 0)if(typeof E.documentation=="string")b.append(this.domNodes.docs,m("p",{},E.documentation));else{const R=this.renderMarkdownDocs(E.documentation);b.append(this.domNodes.docs,R.element)}const D=this.hasDocs(E,F);if(this.domNodes.signature.classList.toggle("has-docs",D),this.domNodes.docs.classList.toggle("empty",!D),this.domNodes.overloads.textContent=String(L.activeSignature+1).padStart(L.signatures.length.toString().length,"0")+"/"+L.signatures.length,F){const R=this.getParameterLabel(E,B);this.announcedLabel!==R&&(M.alert(c.localize(2,null,R)),this.announcedLabel=R)}this.editor.layoutContentWidget(this),this.domNodes.scrollbar.scanDomNode()}}}renderMarkdownDocs(L){const I=this.renderDisposeables.add(this.markdownRenderer.render(L,{asyncRenderCallback:()=>{var k;(k=this.domNodes)===null||k===void 0||k.scrollbar.scanDomNode()}}));return I.element.classList.add("markdown-docs"),I}hasDocs(L,I){return!!(I&&typeof I.documentation=="string"&&t.assertIsDefined(I.documentation).length>0||I&&typeof I.documentation=="object"&&t.assertIsDefined(I.documentation).value.length>0||L.documentation&&typeof L.documentation=="string"&&t.assertIsDefined(L.documentation).length>0||L.documentation&&typeof L.documentation=="object"&&t.assertIsDefined(L.documentation.value).length>0)}renderParameters(L,I,k){const[E,T]=this.getParameterLabelOffsets(I,k),O=document.createElement("span");O.textContent=I.label.substring(0,E);const A=document.createElement("span");A.textContent=I.label.substring(E,T),A.className="parameter active";const B=document.createElement("span");B.textContent=I.label.substring(T),b.append(L,O,A,B)}getParameterLabel(L,I){const k=L.parameters[I];return Array.isArray(k.label)?L.label.substring(k.label[0],k.label[1]):k.label}getParameterLabelOffsets(L,I){const k=L.parameters[I];if(k){if(Array.isArray(k.label))return k.label;if(k.label.length){const E=new RegExp(`(\\W|^)${i.escapeRegExpCharacters(k.label)}(?=\\W|$)`,"g");E.test(L.label);const T=E.lastIndex-k.label.length;return T>=0?[T,E.lastIndex]:[0,0]}else return[0,0]}else return[0,0]}next(){this.editor.focus(),this.model.next()}previous(){this.editor.focus(),this.model.previous()}cancel(){this.model.cancel()}getDomNode(){return this.domNodes||this.createParamaterHintDOMNodes(),this.domNodes.element}getId(){return jt.ID}trigger(L){this.model.trigger(L,0)}updateMaxHeight(){if(!!this.domNodes){const I=`${Math.max(this.editor.getLayoutInfo().height/4,250)}px`;this.domNodes.element.style.maxHeight=I;const k=this.domNodes.element.getElementsByClassName("phwrapper");k.length&&(k[0].style.maxHeight=I)}}};v.ID="editor.widget.parameterHintsWidget",v=Me([_e(1,o.IContextKeyService),_e(2,s.IOpenerService),_e(3,d.IModeService)],v),e.ParameterHintsWidget=v,u.registerThemingParticipant((y,L)=>{const I=y.getColor(a.editorHoverBorder);if(I){const A=y.type===l.ColorScheme.HIGH_CONTRAST?2:1;L.addRule(`.monaco-editor .parameter-hints-widget { border: ${A}px solid ${I}; }`),L.addRule(`.monaco-editor .parameter-hints-widget.multiple .body { border-left: 1px solid ${I.transparent(.5)}; }`),L.addRule(`.monaco-editor .parameter-hints-widget .signature.has-docs { border-bottom: 1px solid ${I.transparent(.5)}; }`)}const k=y.getColor(a.editorHoverBackground);k&&L.addRule(`.monaco-editor .parameter-hints-widget { background-color: ${k}; }`);const E=y.getColor(a.textLinkForeground);E&&L.addRule(`.monaco-editor .parameter-hints-widget a { color: ${E}; }`);const T=y.getColor(a.editorHoverForeground);T&&L.addRule(`.monaco-editor .parameter-hints-widget { color: ${T}; }`);const O=y.getColor(a.textCodeBlockBackground);O&&L.addRule(`.monaco-editor .parameter-hints-widget code { background-color: ${O}; }`)})}),define(Q[664],J([0,1,498,2,9,25,16,13,663,183,18]),function(q,e,b,N,M,w,S,C,d,g,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TriggerParameterHintsAction=void 0;let c=class Gt extends N.Disposable{constructor(r,i){super();this.editor=r,this.widget=this._register(i.createInstance(d.ParameterHintsWidget,this.editor))}static get(r){return r.getContribution(Gt.ID)}cancel(){this.widget.cancel()}previous(){this.widget.previous()}next(){this.widget.next()}trigger(r){this.widget.trigger(r)}};c.ID="editor.controller.parameterHints",c=Me([_e(1,M.IInstantiationService)],c);class o extends C.EditorAction{constructor(){super({id:"editor.action.triggerParameterHints",label:b.localize(0,null),alias:"Trigger Parameter Hints",precondition:w.EditorContextKeys.hasSignatureHelpProvider,kbOpts:{kbExpr:w.EditorContextKeys.editorTextFocus,primary:2048|1024|10,weight:100}})}run(r,i){const n=c.get(i);n&&n.trigger({triggerKind:p.SignatureHelpTriggerKind.Invoke})}}e.TriggerParameterHintsAction=o,C.registerEditorContribution(c.ID,c),C.registerEditorAction(o);const s=100+75,a=C.EditorCommand.bindToContribution(c.get);C.registerEditorCommand(new a({id:"closeParameterHints",precondition:g.Context.Visible,handler:u=>u.cancel(),kbOpts:{weight:s,kbExpr:w.EditorContextKeys.focus,primary:9,secondary:[1024|9]}})),C.registerEditorCommand(new a({id:"showPrevParameterHint",precondition:S.ContextKeyExpr.and(g.Context.Visible,g.Context.MultipleSignatures),handler:u=>u.previous(),kbOpts:{weight:s,kbExpr:w.EditorContextKeys.focus,primary:16,secondary:[512|16],mac:{primary:16,secondary:[512|16,256|46]}}})),C.registerEditorCommand(new a({id:"showNextParameterHint",precondition:S.ContextKeyExpr.and(g.Context.Visible,g.Context.MultipleSignatures),handler:u=>u.next(),kbOpts:{weight:s,kbExpr:w.EditorContextKeys.focus,primary:18,secondary:[512|18],mac:{primary:18,secondary:[512|18,256|44]}}}))}),define(Q[665],J([0,1,510,66,2,7,11,57,18,175,562,36,24,237,19,254,27,6,80]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n){"use strict";var t;Object.defineProperty(e,"__esModule",{value:!0}),e.ItemRenderer=e.suggestMoreInfoIcon=e.getAriaId=void 0;function l(_){return`suggest-aria-id:${_}`}e.getAriaId=l,e.suggestMoreInfoIcon=n.registerIcon("suggest-more-info",r.Codicon.chevronRight,b.localize(0,null));const h=new(t=class ft{extract(f,v){if(f.textLabel.match(ft._regexStrict))return v[0]=f.textLabel,!0;if(f.completion.detail&&f.completion.detail.match(ft._regexStrict))return v[0]=f.completion.detail,!0;if(typeof f.completion.documentation=="string"){const y=ft._regexRelaxed.exec(f.completion.documentation);if(y&&(y.index===0||y.index+y[0].length===f.completion.documentation.length))return v[0]=y[0],!0}return!1}},t._regexRelaxed=/(#([\da-fA-F]{3}){1,2}|(rgb|hsl)a\(\s*(\d{1,3}%?\s*,\s*){3}(1|0?\.\d+)\)|(rgb|hsl)\(\s*\d{1,3}%?(\s*,\s*\d{1,3}%?){2}\s*\))/,t._regexStrict=new RegExp(`^${t._regexRelaxed.source}$`,"i"),t);let m=class{constructor(f,v,y,L){this._editor=f,this._modelService=v,this._modeService=y,this._themeService=L,this._onDidToggleDetails=new i.Emitter,this.onDidToggleDetails=this._onDidToggleDetails.event,this.templateId="suggestion"}dispose(){this._onDidToggleDetails.dispose()}renderTemplate(f){const v=Object.create(null);v.disposables=new M.DisposableStore,v.root=f,v.root.classList.add("show-file-icons"),v.icon=w.append(f,w.$(".icon")),v.colorspan=w.append(v.icon,w.$("span.colorspan"));const y=w.append(f,w.$(".contents")),L=w.append(y,w.$(".main"));v.iconContainer=w.append(L,w.$(".icon-label.codicon")),v.left=w.append(L,w.$("span.left")),v.right=w.append(L,w.$("span.right")),v.iconLabel=new g.IconLabel(v.left,{supportHighlights:!0,supportIcons:!0}),v.disposables.add(v.iconLabel),v.parametersLabel=w.append(v.left,w.$("span.signature-label")),v.qualifierLabel=w.append(v.left,w.$("span.qualifier-label")),v.detailsLabel=w.append(v.right,w.$("span.details-label")),v.readMore=w.append(v.right,w.$("span.readMore"+S.ThemeIcon.asCSSSelector(e.suggestMoreInfoIcon))),v.readMore.title=b.localize(1,null);const I=()=>{const k=this._editor.getOptions(),E=k.get(38),T=E.fontFamily,O=E.fontFeatureSettings,A=k.get(102)||E.fontSize,B=k.get(103)||E.lineHeight,F=E.fontWeight,D=`${A}px`,R=`${B}px`;v.root.style.fontSize=D,v.root.style.fontWeight=F,L.style.fontFamily=T,L.style.fontFeatureSettings=O,L.style.lineHeight=R,v.icon.style.height=R,v.icon.style.width=R,v.readMore.style.height=R,v.readMore.style.width=R};return I(),v.disposables.add(this._editor.onDidChangeConfiguration(k=>{(k.hasChanged(38)||k.hasChanged(102)||k.hasChanged(103))&&I()})),v}renderElement(f,v,y){var L,I,k;const{completion:E}=f,T=typeof E.label=="string"?E.label:E.label.name;y.root.id=l(v),y.colorspan.style.backgroundColor="";const O={labelEscapeNewLines:!0,matches:N.createMatches(f.score)};let A=[];if(E.kind===19&&h.extract(f,A))y.icon.className="icon customcolor",y.iconContainer.className="icon hide",y.colorspan.style.backgroundColor=A[0];else if(E.kind===20&&this._themeService.getFileIconTheme().hasFileIcons){y.icon.className="icon hide",y.iconContainer.className="icon hide";const B=p.getIconClasses(this._modelService,this._modeService,o.URI.from({scheme:"fake",path:T}),s.FileKind.FILE),F=p.getIconClasses(this._modelService,this._modeService,o.URI.from({scheme:"fake",path:E.detail}),s.FileKind.FILE);O.extraClasses=B.length>F.length?B:F}else E.kind===23&&this._themeService.getFileIconTheme().hasFolderIcons?(y.icon.className="icon hide",y.iconContainer.className="icon hide",O.extraClasses=a.flatten([p.getIconClasses(this._modelService,this._modeService,o.URI.from({scheme:"fake",path:T}),s.FileKind.FOLDER),p.getIconClasses(this._modelService,this._modeService,o.URI.from({scheme:"fake",path:E.detail}),s.FileKind.FOLDER)])):(y.icon.className="icon hide",y.iconContainer.className="",y.iconContainer.classList.add("suggest-icon",...d.completionKindToCssClass(E.kind).split(" ")));E.tags&&E.tags.indexOf(1)>=0&&(O.extraClasses=(O.extraClasses||[]).concat(["deprecated"]),O.matches=[]),y.iconLabel.setLabel(T,void 0,O),typeof E.label=="string"?(y.parametersLabel.textContent="",y.qualifierLabel.textContent="",y.detailsLabel.textContent=(E.detail||"").replace(/\n.*$/m,""),y.root.classList.add("string-label"),y.root.title=""):(y.parametersLabel.textContent=(E.label.parameters||"").replace(/\n.*$/m,""),y.qualifierLabel.textContent=(E.label.qualifier||"").replace(/\n.*$/m,""),y.detailsLabel.textContent=(E.label.type||"").replace(/\n.*$/m,""),y.root.classList.remove("string-label"),y.root.title=`${T}${(L=E.label.parameters)!==null&&L!==void 0?L:""} ${(I=E.label.qualifier)!==null&&I!==void 0?I:""} ${(k=E.label.type)!==null&&k!==void 0?k:""}`),this._editor.getOption(101).showInlineDetails?w.show(y.detailsLabel):w.hide(y.detailsLabel),u.canExpandCompletionItem(f)?(y.right.classList.add("can-expand-details"),w.show(y.readMore),y.readMore.onmousedown=B=>{B.stopPropagation(),B.preventDefault()},y.readMore.onclick=B=>{B.stopPropagation(),B.preventDefault(),this._onDidToggleDetails.fire()}):(y.right.classList.remove("can-expand-details"),w.hide(y.readMore),y.readMore.onmousedown=null,y.readMore.onclick=null)}disposeTemplate(f){f.disposables.dispose()}};m=Me([_e(1,c.IModelService),_e(2,C.IModeService),_e(3,S.IThemeService)],m),e.ItemRenderer=m}),define(Q[666],J([0,1,508,8,7,6,12,2,105,16,117,116,11,22,79,15,9,254,649,665,231,144,100,352,123,259]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l,h,m){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SuggestContentWidget=e.SuggestWidget=e.editorSuggestWidgetHighlightForeground=e.editorSuggestWidgetSelectedBackground=e.editorSuggestWidgetForeground=e.editorSuggestWidgetBorder=e.editorSuggestWidgetBackground=void 0,e.editorSuggestWidgetBackground=s.registerColor("editorSuggestWidget.background",{dark:s.editorWidgetBackground,light:s.editorWidgetBackground,hc:s.editorWidgetBackground},b.localize(0,null)),e.editorSuggestWidgetBorder=s.registerColor("editorSuggestWidget.border",{dark:s.editorWidgetBorder,light:s.editorWidgetBorder,hc:s.editorWidgetBorder},b.localize(1,null)),e.editorSuggestWidgetForeground=s.registerColor("editorSuggestWidget.foreground",{dark:s.editorForeground,light:s.editorForeground,hc:s.editorForeground},b.localize(2,null)),e.editorSuggestWidgetSelectedBackground=s.registerColor("editorSuggestWidget.selectedBackground",{dark:s.quickInputListFocusBackground,light:s.quickInputListFocusBackground,hc:s.quickInputListFocusBackground},b.localize(3,null)),e.editorSuggestWidgetHighlightForeground=s.registerColor("editorSuggestWidget.highlightForeground",{dark:s.listHighlightForeground,light:s.listHighlightForeground,hc:s.listHighlightForeground},b.localize(4,null));class _{constructor(L,I){this._service=L,this._key=`suggestWidget.size/${I.getEditorType()}/${I instanceof h.EmbeddedCodeEditorWidget}`}restore(){var L;const I=(L=this._service.get(this._key,0))!==null&&L!==void 0?L:"";try{const k=JSON.parse(I);if(M.Dimension.is(k))return M.Dimension.lift(k)}catch(k){}}store(L){this._service.store(this._key,JSON.stringify(L),0,1)}reset(){this._service.remove(this._key,0)}}let f=class wt{constructor(L,I,k,E,T){this.editor=L,this._storageService=I,this._state=0,this._isAuto=!1,this._ignoreFocusEvents=!1,this._explainMode=!1,this._showTimeout=new u.TimeoutTimer,this._disposables=new C.DisposableStore,this._onDidSelect=new w.Emitter,this._onDidFocus=new w.Emitter,this._onDidHide=new w.Emitter,this._onDidShow=new w.Emitter,this.onDidSelect=this._onDidSelect.event,this.onDidFocus=this._onDidFocus.event,this.onDidHide=this._onDidHide.event,this.onDidShow=this._onDidShow.event,this._onDetailsKeydown=new w.Emitter,this.onDetailsKeyDown=this._onDetailsKeydown.event,this.element=new l.ResizableHTMLElement,this.element.domNode.classList.add("editor-widget","suggest-widget"),this._contentWidget=new v(this,L),this._persistedSize=new _(I,L);class O{constructor(x,K,Y=!1,ee=!1){this.persistedSize=x,this.currentSize=K,this.persistHeight=Y,this.persistWidth=ee}}let A;this._disposables.add(this.element.onDidWillResize(()=>{this._contentWidget.lockPreference(),A=new O(this._persistedSize.restore(),this.element.size)})),this._disposables.add(this.element.onDidResize(W=>{var x,K,Y,ee;if(this._resize(W.dimension.width,W.dimension.height),A&&(A.persistHeight=A.persistHeight||!!W.north||!!W.south,A.persistWidth=A.persistWidth||!!W.east||!!W.west),!!W.done){if(A){const{itemHeight:se,defaultSize:ne}=this.getLayoutInfo(),le=Math.round(se/2);let{width:X,height:z}=this.element.size;(!A.persistHeight||Math.abs(A.currentSize.height-z)<=le)&&(z=(K=(x=A.persistedSize)===null||x===void 0?void 0:x.height)!==null&&K!==void 0?K:ne.height),(!A.persistWidth||Math.abs(A.currentSize.width-X)<=le)&&(X=(ee=(Y=A.persistedSize)===null||Y===void 0?void 0:Y.width)!==null&&ee!==void 0?ee:ne.width),this._persistedSize.store(new M.Dimension(X,z))}this._contentWidget.unlockPreference(),A=void 0}})),this._messageElement=M.append(this.element.domNode,M.$(".message")),this._listElement=M.append(this.element.domNode,M.$(".tree"));const B=T.createInstance(i.SuggestDetailsWidget,this.editor);B.onDidClose(this.toggleDetails,this,this._disposables),this._details=new i.SuggestDetailsOverlay(B,this.editor);const F=()=>this.element.domNode.classList.toggle("no-icons",!this.editor.getOption(101).showIcons);F();const D=T.createInstance(t.ItemRenderer,this.editor);this._disposables.add(D),this._disposables.add(D.onDidToggleDetails(()=>this.toggleDetails())),this._list=new d.List("SuggestWidget",this._listElement,{getHeight:W=>this.getLayoutInfo().itemHeight,getTemplateId:W=>"suggestion"},[D],{alwaysConsumeMouseWheel:!0,useShadows:!1,mouseSupport:!1,accessibilityProvider:{getRole:()=>"option",getAriaLabel:W=>{const x=typeof W.completion.label=="string"?W.completion.label:W.completion.label.name;if(W.isResolved&&this._isDetailsVisible()){const{documentation:K,detail:Y}=W.completion,ee=N.format("{0}{1}",Y||"",K?typeof K=="string"?K:K.value:"");return b.localize(7,null,x,ee)}else return x},getWidgetAriaLabel:()=>b.localize(8,null),getWidgetRole:()=>"listbox"}}),this._status=T.createInstance(n.SuggestWidgetStatus,this.element.domNode);const R=()=>this.element.domNode.classList.toggle("with-status-bar",this.editor.getOption(101).showStatusBar);R(),this._disposables.add(c.attachListStyler(this._list,E,{listInactiveFocusBackground:e.editorSuggestWidgetSelectedBackground,listInactiveFocusOutline:s.activeContrastBorder})),this._disposables.add(E.onDidColorThemeChange(W=>this._onThemeChange(W))),this._onThemeChange(E.getColorTheme()),this._disposables.add(this._list.onMouseDown(W=>this._onListMouseDownOrTap(W))),this._disposables.add(this._list.onTap(W=>this._onListMouseDownOrTap(W))),this._disposables.add(this._list.onDidChangeSelection(W=>this._onListSelection(W))),this._disposables.add(this._list.onDidChangeFocus(W=>this._onListFocus(W))),this._disposables.add(this.editor.onDidChangeCursorSelection(()=>this._onCursorSelectionChanged())),this._disposables.add(this.editor.onDidChangeConfiguration(W=>{W.hasChanged(101)&&(R(),F())})),this._ctxSuggestWidgetVisible=p.Context.Visible.bindTo(k),this._ctxSuggestWidgetDetailsVisible=p.Context.DetailsVisible.bindTo(k),this._ctxSuggestWidgetMultipleSuggestions=p.Context.MultipleSuggestions.bindTo(k),this._disposables.add(M.addStandardDisposableListener(this._details.widget.domNode,"keydown",W=>{this._onDetailsKeydown.fire(W)})),this._disposables.add(this.editor.onMouseDown(W=>this._onEditorMouseDown(W)))}dispose(){var L;this._details.widget.dispose(),this._details.dispose(),this._list.dispose(),this._status.dispose(),this._disposables.dispose(),(L=this._loadingTimeout)===null||L===void 0||L.dispose(),this._showTimeout.dispose(),this._contentWidget.dispose(),this.element.dispose()}_onEditorMouseDown(L){this._details.widget.domNode.contains(L.target.element)?this._details.widget.domNode.focus():this.element.domNode.contains(L.target.element)&&this.editor.focus()}_onCursorSelectionChanged(){this._state!==0&&this._contentWidget.layout()}_onListMouseDownOrTap(L){typeof L.element=="undefined"||typeof L.index=="undefined"||(L.browserEvent.preventDefault(),L.browserEvent.stopPropagation(),this._select(L.element,L.index))}_onListSelection(L){L.elements.length&&this._select(L.elements[0],L.indexes[0])}_select(L,I){const k=this._completionModel;k&&(this._onDidSelect.fire({item:L,index:I,model:k}),this.editor.focus())}_onThemeChange(L){const I=L.getColor(e.editorSuggestWidgetBackground);I&&(this.element.domNode.style.backgroundColor=I.toString(),this._messageElement.style.backgroundColor=I.toString(),this._details.widget.domNode.style.backgroundColor=I.toString());const k=L.getColor(e.editorSuggestWidgetBorder);k&&(this.element.domNode.style.borderColor=k.toString(),this._messageElement.style.borderColor=k.toString(),this._status.element.style.borderTopColor=k.toString(),this._details.widget.domNode.style.borderColor=k.toString(),this._detailsBorderColor=k.toString());const E=L.getColor(s.focusBorder);E&&(this._detailsFocusBorderColor=E.toString()),this._details.widget.borderWidth=L.type==="hc"?2:1}_onListFocus(L){var I;if(!this._ignoreFocusEvents){if(!L.elements.length){this._currentSuggestionDetails&&(this._currentSuggestionDetails.cancel(),this._currentSuggestionDetails=void 0,this._focusedItem=void 0),this.editor.setAriaOptions({activeDescendant:void 0});return}if(!!this._completionModel){const k=L.elements[0],E=L.indexes[0];k!==this._focusedItem&&((I=this._currentSuggestionDetails)===null||I===void 0||I.cancel(),this._currentSuggestionDetails=void 0,this._focusedItem=k,this._list.reveal(E),this._currentSuggestionDetails=u.createCancelablePromise(T=>Ie(this,void 0,void 0,function*(){const O=u.disposableTimeout(()=>{this._isDetailsVisible()&&this.showDetails(!0)},250);T.onCancellationRequested(()=>O.dispose());const A=yield k.resolve(T);return O.dispose(),A})),this._currentSuggestionDetails.then(()=>{E>=this._list.length||k!==this._list.element(E)||(this._ignoreFocusEvents=!0,this._list.splice(E,1,[k]),this._list.setFocus([E]),this._ignoreFocusEvents=!1,this._isDetailsVisible()?this.showDetails(!1):this.element.domNode.classList.remove("docs-side"),this.editor.setAriaOptions({activeDescendant:t.getAriaId(E)}))}).catch(S.onUnexpectedError)),this._onDidFocus.fire({item:k,index:E,model:this._completionModel})}}}_setState(L){if(this._state!==L)switch(this._state=L,this.element.domNode.classList.toggle("frozen",L===4),this.element.domNode.classList.remove("message"),L){case 0:M.hide(this._messageElement,this._listElement,this._status.element),this._details.hide(!0),this._status.hide(),this._contentWidget.hide(),this._ctxSuggestWidgetVisible.reset(),this._ctxSuggestWidgetMultipleSuggestions.reset(),this.element.domNode.classList.remove("visible"),this._list.splice(0,this._list.length),this._focusedItem=void 0,this._cappedHeight=void 0,this._explainMode=!1;break;case 1:this.element.domNode.classList.add("message"),this._messageElement.textContent=wt.LOADING_MESSAGE,M.hide(this._listElement,this._status.element),M.show(this._messageElement),this._details.hide(),this._show(),this._focusedItem=void 0;break;case 2:this.element.domNode.classList.add("message"),this._messageElement.textContent=wt.NO_SUGGESTIONS_MESSAGE,M.hide(this._listElement,this._status.element),M.show(this._messageElement),this._details.hide(),this._show(),this._focusedItem=void 0;break;case 3:M.hide(this._messageElement),M.show(this._listElement,this._status.element),this._show();break;case 4:M.hide(this._messageElement),M.show(this._listElement,this._status.element),this._show();break;case 5:M.hide(this._messageElement),M.show(this._listElement,this._status.element),this._details.show(),this._show();break}}_show(){this._status.show(),this._contentWidget.show(),this._layout(this._persistedSize.restore()),this._ctxSuggestWidgetVisible.set(!0),this._showTimeout.cancelAndSet(()=>{this.element.domNode.classList.add("visible"),this._onDidShow.fire(this)},100)}showTriggered(L,I){this._state===0&&(this._contentWidget.setPosition(this.editor.getPosition()),this._isAuto=!!L,this._isAuto||(this._loadingTimeout=u.disposableTimeout(()=>this._setState(1),I)))}showSuggestions(L,I,k,E){var T,O;if(this._contentWidget.setPosition(this.editor.getPosition()),(T=this._loadingTimeout)===null||T===void 0||T.dispose(),(O=this._currentSuggestionDetails)===null||O===void 0||O.cancel(),this._currentSuggestionDetails=void 0,this._completionModel!==L&&(this._completionModel=L),k&&this._state!==2&&this._state!==0){this._setState(4);return}const A=this._completionModel.items.length,B=A===0;if(this._ctxSuggestWidgetMultipleSuggestions.set(A>1),B){this._setState(E?0:2),this._completionModel=void 0;return}this._focusedItem=void 0,this._list.splice(0,this._list.length,this._completionModel.items),this._setState(k?4:3),this._list.reveal(I,0),this._list.setFocus([I]),this._layout(this.element.size),this._detailsBorderColor&&(this._details.widget.domNode.style.borderColor=this._detailsBorderColor)}selectNextPage(){switch(this._state){case 0:return!1;case 5:return this._details.widget.pageDown(),!0;case 1:return!this._isAuto;default:return this._list.focusNextPage(),!0}}selectNext(){switch(this._state){case 0:return!1;case 1:return!this._isAuto;default:return this._list.focusNext(1,!0),!0}}selectLast(){switch(this._state){case 0:return!1;case 5:return this._details.widget.scrollBottom(),!0;case 1:return!this._isAuto;default:return this._list.focusLast(),!0}}selectPreviousPage(){switch(this._state){case 0:return!1;case 5:return this._details.widget.pageUp(),!0;case 1:return!this._isAuto;default:return this._list.focusPreviousPage(),!0}}selectPrevious(){switch(this._state){case 0:return!1;case 1:return!this._isAuto;default:return this._list.focusPrevious(1,!0),!1}}selectFirst(){switch(this._state){case 0:return!1;case 5:return this._details.widget.scrollTop(),!0;case 1:return!this._isAuto;default:return this._list.focusFirst(),!0}}getFocusedItem(){if(this._state!==0&&this._state!==2&&this._state!==1&&this._completionModel)return{item:this._list.getFocusedElements()[0],index:this._list.getFocus()[0],model:this._completionModel}}toggleDetailsFocus(){this._state===5?(this._setState(3),this._detailsBorderColor&&(this._details.widget.domNode.style.borderColor=this._detailsBorderColor)):this._state===3&&this._isDetailsVisible()&&(this._setState(5),this._detailsFocusBorderColor&&(this._details.widget.domNode.style.borderColor=this._detailsFocusBorderColor))}toggleDetails(){this._isDetailsVisible()?(this._ctxSuggestWidgetDetailsVisible.set(!1),this._setDetailsVisible(!1),this._details.hide(),this.element.domNode.classList.remove("shows-details")):i.canExpandCompletionItem(this._list.getFocusedElements()[0])&&(this._state===3||this._state===5||this._state===4)&&(this._ctxSuggestWidgetDetailsVisible.set(!0),this._setDetailsVisible(!0),this.showDetails(!1))}showDetails(L){this._details.show(),L?this._details.widget.renderLoading():this._details.widget.renderItem(this._list.getFocusedElements()[0],this._explainMode),this._positionDetails(),this.editor.focus(),this.element.domNode.classList.add("shows-details")}toggleExplainMode(){this._list.getFocusedElements()[0]&&this._isDetailsVisible()&&(this._explainMode=!this._explainMode,this.showDetails(!1))}resetPersistedSize(){this._persistedSize.reset()}hideWidget(){var L;(L=this._loadingTimeout)===null||L===void 0||L.dispose(),this._setState(0),this._onDidHide.fire(this);const I=this._persistedSize.restore(),k=Math.ceil(this.getLayoutInfo().itemHeight*4.3);I&&I.heightF&&(B=F);const D=this._completionModel?this._completionModel.stats.pLabelLen*O.typicalHalfwidthCharacterWidth:B,R=O.statusBarHeight+this._list.contentHeight+O.borderHeight,W=O.itemHeight+O.statusBarHeight,x=M.getDomNodePagePosition(this.editor.getDomNode()),K=this.editor.getScrolledVisiblePosition(this.editor.getPosition()),Y=x.top+K.top+K.height,ee=Math.min(T.height-Y-O.verticalPadding,R),se=Math.min(x.top+K.top-O.verticalPadding,R);let ne=Math.min(Math.max(se,ee)+O.borderHeight,R);A===((I=this._cappedHeight)===null||I===void 0?void 0:I.capped)&&(A=this._cappedHeight.wanted),Ane&&(A=ne),A>ee?(this._contentWidget.setPreference(1),this.element.enableSashes(!0,!0,!1,!1),ne=se):(this._contentWidget.setPreference(2),this.element.enableSashes(!1,!0,!0,!1),ne=ee),this.element.preferredSize=new M.Dimension(D,O.defaultSize.height),this.element.maxSize=new M.Dimension(F,ne),this.element.minSize=new M.Dimension(220,W),this._cappedHeight=A===R?{wanted:(E=(k=this._cappedHeight)===null||k===void 0?void 0:k.wanted)!==null&&E!==void 0?E:L.height,capped:A}:void 0}this._resize(B,A)}}_resize(L,I){const{width:k,height:E}=this.element.maxSize;L=Math.min(k,L),I=Math.min(E,I);const{statusBarHeight:T}=this.getLayoutInfo();this._list.layout(I-T,L),this._listElement.style.height=`${I-T}px`,this.element.layout(I,L),this._contentWidget.layout(),this._positionDetails()}_positionDetails(){this._isDetailsVisible()&&this._details.placeAtAnchor(this.element.domNode)}getLayoutInfo(){const L=this.editor.getOption(38),I=m.clamp(this.editor.getOption(103)||L.lineHeight,8,1e3),k=!this.editor.getOption(101).showStatusBar||this._state===2||this._state===1?0:I,E=this._details.widget.borderWidth,T=2*E;return{itemHeight:I,statusBarHeight:k,borderWidth:E,borderHeight:T,typicalHalfwidthCharacterWidth:L.typicalHalfwidthCharacterWidth,verticalPadding:22,horizontalPadding:14,defaultSize:new M.Dimension(430,k+12*I+T)}}_isDetailsVisible(){return this._storageService.getBoolean("expandSuggestionDocs",0,!1)}_setDetailsVisible(L){this._storageService.store("expandSuggestionDocs",L,0,0)}};f.LOADING_MESSAGE=b.localize(5,null),f.NO_SUGGESTIONS_MESSAGE=b.localize(6,null),f=Me([_e(1,a.IStorageService),_e(2,g.IContextKeyService),_e(3,o.IThemeService),_e(4,r.IInstantiationService)],f),e.SuggestWidget=f;class v{constructor(L,I){this._widget=L,this._editor=I,this.allowEditorOverflow=!0,this.suppressMouseDown=!1,this._preferenceLocked=!1,this._added=!1,this._hidden=!1}dispose(){this._added&&(this._added=!1,this._editor.removeContentWidget(this))}getId(){return"editor.widget.suggestWidget"}getDomNode(){return this._widget.element.domNode}show(){this._hidden=!1,this._added||(this._added=!0,this._editor.addContentWidget(this))}hide(){this._hidden||(this._hidden=!0,this.layout())}layout(){this._editor.layoutContentWidget(this)}getPosition(){return this._hidden||!this._position||!this._preference?null:{position:this._position,preference:[this._preference]}}beforeRender(){const{height:L,width:I}=this._widget.element.size,{borderWidth:k,horizontalPadding:E}=this._widget.getLayoutInfo();return new M.Dimension(I+2*k+E,L+2*k)}afterRender(L){this._widget._afterRender(L)}setPreference(L){this._preferenceLocked||(this._preference=L)}lockPreference(){this._preferenceLocked=!0}unlockPreference(){this._preferenceLocked=!1}setPosition(L){this._position=L}}e.SuggestContentWidget=v,o.registerThemingParticipant((y,L)=>{const I=y.getColor(e.editorSuggestWidgetHighlightForeground);I&&L.addRule(`.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-highlighted-label .highlight { color: ${I}; }`);const k=y.getColor(e.editorSuggestWidgetForeground);k&&L.addRule(`.monaco-editor .suggest-widget, .monaco-editor .suggest-details { color: ${k}; }`);const E=y.getColor(s.textLinkForeground);E&&L.addRule(`.monaco-editor .suggest-details a { color: ${E}; }`);const T=y.getColor(s.textCodeBlockBackground);T&&L.addRule(`.monaco-editor .suggest-details code { background-color: ${T}; }`)})}),define(Q[667],J([0,1,11,80,7,6]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getIconsStyleSheet=void 0;function S(){const C=new w.Emitter,d=N.getIconRegistry();return d.onDidChange(()=>C.fire()),{onDidChange:C.event,getCSS(){const g={},p=o=>{let s=o.defaults;for(;b.ThemeIcon.isThemeIcon(s);){const u=d.getIcon(s.id);if(!u)return;s=u.defaults}const a=s.fontId;if(a){const u=d.getIconFont(a);if(u)return g[a]=u,`.codicon-${o.id}:before { content: '${s.fontCharacter}'; font-family: ${M.asCSSPropertyValue(a)}; }`}return`.codicon-${o.id}:before { content: '${s.fontCharacter}'; }`},c=[];for(let o of d.getIcons()){const s=p(o);s&&c.push(s)}for(let o in g){const a=g[o].definition.src.map(u=>`${M.asCSSUrl(u.location)} format('${u.format}')`).join(", ");c.push(`@font-face { src: ${a}; font-family: ${M.asCSSPropertyValue(o)}; }`)}return c.join(` +`)}}}e.getIconsStyleSheet=S}),define(Q[668],J([0,1,7,29,6,18,381,606,33,22,11,2,97,667]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.StandaloneThemeServiceImpl=void 0;const a="vs",u="vs-dark",r="hc-black",i=d.Registry.as(g.Extensions.ColorContribution),n=d.Registry.as(p.Extensions.ThemingContribution);class t{constructor(v,y){this.semanticHighlighting=!1,this.themeData=y;let L=y.base;v.length>0?(l(v)?this.id=v:this.id=L+" "+v,this.themeName=v):(this.id=L,this.themeName=L),this.colors=null,this.defaultColors=Object.create(null),this._tokenTheme=null}get base(){return this.themeData.base}notifyBaseUpdated(){this.themeData.inherit&&(this.colors=null,this._tokenTheme=null)}getColors(){if(!this.colors){const v=new Map;for(let y in this.themeData.colors)v.set(y,N.Color.fromHex(this.themeData.colors[y]));if(this.themeData.inherit){let y=h(this.themeData.base);for(let L in y.colors)v.has(L)||v.set(L,N.Color.fromHex(y.colors[L]))}this.colors=v}return this.colors}getColor(v,y){const L=this.getColors().get(v);if(L)return L;if(y!==!1)return this.getDefault(v)}getDefault(v){let y=this.defaultColors[v];return y||(y=i.resolveDefaultColor(v,this),this.defaultColors[v]=y,y)}defines(v){return Object.prototype.hasOwnProperty.call(this.getColors(),v)}get type(){switch(this.base){case a:return o.ColorScheme.LIGHT;case r:return o.ColorScheme.HIGH_CONTRAST;default:return o.ColorScheme.DARK}}get tokenTheme(){if(!this._tokenTheme){let v=[],y=[];if(this.themeData.inherit){let L=h(this.themeData.base);v=L.rules,L.encodedTokensColors&&(y=L.encodedTokensColors)}v=v.concat(this.themeData.rules),this.themeData.encodedTokensColors&&(y=this.themeData.encodedTokensColors),this._tokenTheme=S.TokenTheme.createFromRawTokenTheme(v,y)}return this._tokenTheme}getTokenStyleMetadata(v,y,L){const k=this.tokenTheme._match([v].concat(y).join(".")).metadata,E=w.TokenMetadata.getForeground(k),T=w.TokenMetadata.getFontStyle(k);return{foreground:E,italic:Boolean(T&1),bold:Boolean(T&2),underline:Boolean(T&4)}}}function l(f){return f===a||f===u||f===r}function h(f){switch(f){case a:return C.vs;case u:return C.vs_dark;case r:return C.hc_black}}function m(f){let v=h(f);return new t(f,v)}class _ extends c.Disposable{constructor(){super();this._onColorThemeChange=this._register(new M.Emitter),this.onDidColorThemeChange=this._onColorThemeChange.event,this._environment=Object.create(null),this._autoDetectHighContrast=!0,this._knownThemes=new Map,this._knownThemes.set(a,m(a)),this._knownThemes.set(u,m(u)),this._knownThemes.set(r,m(r));const v=s.getIconsStyleSheet();this._codiconCSS=v.getCSS(),this._themeCSS="",this._allCSS=`${this._codiconCSS} +${this._themeCSS}`,this._globalStyleElement=null,this._styleElements=[],this._colorMapOverride=null,this.setTheme(a),v.onDidChange(()=>{this._codiconCSS=v.getCSS(),this._updateCSS()}),window.matchMedia("(forced-colors: active)").addEventListener("change",()=>{this._updateActualTheme()})}registerEditorContainer(v){return b.isInShadowDOM(v)?this._registerShadowDomContainer(v):this._registerRegularEditorContainer()}_registerRegularEditorContainer(){return this._globalStyleElement||(this._globalStyleElement=b.createStyleSheet(),this._globalStyleElement.className="monaco-colors",this._globalStyleElement.textContent=this._allCSS,this._styleElements.push(this._globalStyleElement)),c.Disposable.None}_registerShadowDomContainer(v){const y=b.createStyleSheet(v);return y.className="monaco-colors",y.textContent=this._allCSS,this._styleElements.push(y),{dispose:()=>{for(let L=0;L{L.base===v&&L.notifyBaseUpdated()}),this._theme.themeName===v&&this.setTheme(v)}getColorTheme(){return this._theme}setColorMapOverride(v){this._colorMapOverride=v,this._updateThemeOrColorMap()}setTheme(v){let y;this._knownThemes.has(v)?y=this._knownThemes.get(v):y=this._knownThemes.get(a),this._desiredTheme=y,this._updateActualTheme()}_updateActualTheme(){const v=this._autoDetectHighContrast&&window.matchMedia("(forced-colors: active)").matches?this._knownThemes.get(r):this._desiredTheme;this._theme!==v&&(this._theme=v,this._updateThemeOrColorMap())}setAutoDetectHighContrast(v){this._autoDetectHighContrast=v,this._updateActualTheme()}_updateThemeOrColorMap(){let v=[],y={},L={addRule:k=>{y[k]||(v.push(k),y[k]=!0)}};n.getThemingParticipants().forEach(k=>k(this._theme,L,this._environment));const I=this._colorMapOverride||this._theme.tokenTheme.getColorMap();L.addRule(S.generateTokensCSSForColorMap(I)),this._themeCSS=v.join(` +`),this._updateCSS(),w.TokenizationRegistry.setColorMap(I),this._onColorThemeChange.fire(this._theme)}_updateCSS(){this._allCSS=`${this._codiconCSS} +${this._themeCSS}`,this._styleElements.forEach(v=>v.textContent=this._allCSS)}getFileIconTheme(){return{hasFileIcons:!1,hasFolderIcons:!1,hidesExplorerArrows:!1}}}e.StandaloneThemeServiceImpl=_}),define(Q[148],J([0,1,9]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UndoRedoSource=e.UndoRedoGroup=e.ResourceEditStackSnapshot=e.IUndoRedoService=void 0,e.IUndoRedoService=b.createDecorator("undoRedoService");class N{constructor(C,d){this.resource=C,this.elements=d}}e.ResourceEditStackSnapshot=N;class M{constructor(){this.id=M._ID++,this.order=1}nextOrder(){return this.id===0?0:this.order++}}e.UndoRedoGroup=M,M._ID=0,M.None=new M;class w{constructor(){this.id=w._ID++,this.order=1}nextOrder(){return this.id===0?0:this.order++}}e.UndoRedoSource=w,w._ID=0,w.None=new w}),define(Q[269],J([0,1,6,2,17,12,38,31,18,141,137,46,15,23,11,77,148,89,236,43,253,247]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l,h){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ModelSemanticColoring=e.isSemanticColoringEnabled=e.SEMANTIC_HIGHLIGHTING_SETTING_ID=e.ModelServiceImpl=void 0;function m(B){return B.toString()}function _(B){const F=new i.StringSHA1,D=B.createSnapshot();let R;for(;R=D.read();)F.update(R);return F.digest()}class f{constructor(F,D,R){this._modelEventListeners=new N.DisposableStore,this.model=F,this._languageSelection=null,this._languageSelectionListener=null,this._modelEventListeners.add(F.onWillDispose(()=>D(F))),this._modelEventListeners.add(F.onDidChangeLanguage(W=>R(F,W)))}_disposeLanguageSelection(){this._languageSelectionListener&&(this._languageSelectionListener.dispose(),this._languageSelectionListener=null),this._languageSelection&&(this._languageSelection.dispose(),this._languageSelection=null)}dispose(){this._modelEventListeners.dispose(),this._disposeLanguageSelection()}setLanguage(F){this._disposeLanguageSelection(),this._languageSelection=F,this._languageSelectionListener=this._languageSelection.onDidChange(()=>this.model.setMode(F.languageIdentifier)),this.model.setMode(F.languageIdentifier)}}const v=M.isLinux||M.isMacintosh?1:2;class y{constructor(F,D,R,W,x,K,Y,ee){this.uri=F,this.initialUndoRedoSnapshot=D,this.time=R,this.sharesUndoRedoStack=W,this.heapSize=x,this.sha1=K,this.versionId=Y,this.alternativeVersionId=ee}}function L(B){return B.scheme===t.Schemas.file||B.scheme===t.Schemas.vscodeRemote||B.scheme===t.Schemas.userData||B.scheme==="fake-fs"}let I=class st extends N.Disposable{constructor(F,D,R,W,x){super();this._configurationService=F,this._resourcePropertiesService=D,this._themeService=R,this._logService=W,this._undoRedoService=x,this._onModelAdded=this._register(new b.Emitter),this.onModelAdded=this._onModelAdded.event,this._onModelRemoved=this._register(new b.Emitter),this.onModelRemoved=this._onModelRemoved.event,this._onModelModeChanged=this._register(new b.Emitter),this.onModelModeChanged=this._onModelModeChanged.event,this._modelCreationOptionsByLanguageAndResource=Object.create(null),this._models={},this._disposedModels=new Map,this._disposedModelsHeapSize=0,this._semanticStyling=this._register(new T(this._themeService,this._logService)),this._register(this._configurationService.onDidChangeConfiguration(()=>this._updateModelOptions())),this._updateModelOptions(),this._register(new E(this,this._themeService,this._configurationService,this._semanticStyling))}static _readModelOptions(F,D){let R=S.EDITOR_MODEL_DEFAULTS.tabSize;if(F.editor&&typeof F.editor.tabSize!="undefined"){const le=parseInt(F.editor.tabSize,10);isNaN(le)||(R=le),R<1&&(R=1)}let W=R;if(F.editor&&typeof F.editor.indentSize!="undefined"&&F.editor.indentSize!=="tabSize"){const le=parseInt(F.editor.indentSize,10);isNaN(le)||(W=le),W<1&&(W=1)}let x=S.EDITOR_MODEL_DEFAULTS.insertSpaces;F.editor&&typeof F.editor.insertSpaces!="undefined"&&(x=F.editor.insertSpaces==="false"?!1:Boolean(F.editor.insertSpaces));let K=v;const Y=F.eol;Y===`\r +`?K=2:Y===` +`&&(K=1);let ee=S.EDITOR_MODEL_DEFAULTS.trimAutoWhitespace;F.editor&&typeof F.editor.trimAutoWhitespace!="undefined"&&(ee=F.editor.trimAutoWhitespace==="false"?!1:Boolean(F.editor.trimAutoWhitespace));let se=S.EDITOR_MODEL_DEFAULTS.detectIndentation;F.editor&&typeof F.editor.detectIndentation!="undefined"&&(se=F.editor.detectIndentation==="false"?!1:Boolean(F.editor.detectIndentation));let ne=S.EDITOR_MODEL_DEFAULTS.largeFileOptimizations;return F.editor&&typeof F.editor.largeFileOptimizations!="undefined"&&(ne=F.editor.largeFileOptimizations==="false"?!1:Boolean(F.editor.largeFileOptimizations)),{isForSimpleWidget:D,tabSize:R,indentSize:W,insertSpaces:x,detectIndentation:se,defaultEOL:K,trimAutoWhitespace:ee,largeFileOptimizations:ne}}_getEOL(F,D){if(F)return this._resourcePropertiesService.getEOL(F,D);const R=this._configurationService.getValue("files.eol",{overrideIdentifier:D});return R&&R!=="auto"?R:M.OS===3||M.OS===2?` +`:`\r +`}_shouldRestoreUndoStack(){const F=this._configurationService.getValue("files.restoreUndoStack");return typeof F=="boolean"?F:!0}getCreationOptions(F,D,R){let W=this._modelCreationOptionsByLanguageAndResource[F+D];if(!W){const x=this._configurationService.getValue("editor",{overrideIdentifier:F,resource:D}),K=this._getEOL(D,F);W=st._readModelOptions({editor:x,eol:K},R),this._modelCreationOptionsByLanguageAndResource[F+D]=W}return W}_updateModelOptions(){const F=this._modelCreationOptionsByLanguageAndResource;this._modelCreationOptionsByLanguageAndResource=Object.create(null);const D=Object.keys(this._models);for(let R=0,W=D.length;RF){const D=[];for(this._disposedModels.forEach(R=>{R.sharesUndoRedoStack||D.push(R)}),D.sort((R,W)=>R.time-W.time);D.length>0&&this._disposedModelsHeapSize>F;){const R=D.shift();this._removeDisposedModel(R.uri),R.initialUndoRedoSnapshot!==null&&this._undoRedoService.restoreSnapshot(R.initialUndoRedoSnapshot)}}}_createModelData(F,D,R,W){const x=this.getCreationOptions(D.language,R,W),K=new C.TextModel(F,x,D,R,this._undoRedoService);if(R&&this._disposedModels.has(m(R))){const se=this._removeDisposedModel(R),ne=this._undoRedoService.getElements(R),le=_(K)===se.sha1;if(le||se.sharesUndoRedoStack){for(const X of ne.past)n.isEditStackElement(X)&&X.matchesResource(R)&&X.setModel(K);for(const X of ne.future)n.isEditStackElement(X)&&X.matchesResource(R)&&X.setModel(K);this._undoRedoService.setElementsValidFlag(R,!0,X=>n.isEditStackElement(X)&&X.matchesResource(R)),le&&(K._overwriteVersionId(se.versionId),K._overwriteAlternativeVersionId(se.alternativeVersionId),K._overwriteInitialUndoRedoSnapshot(se.initialUndoRedoSnapshot))}else se.initialUndoRedoSnapshot!==null&&this._undoRedoService.restoreSnapshot(se.initialUndoRedoSnapshot)}const Y=m(K.uri);if(this._models[Y])throw new Error("ModelService: Cannot add model because it already exists!");const ee=new f(K,se=>this._onWillDispose(se),(se,ne)=>this._onDidChangeLanguage(se,ne));return this._models[Y]=ee,ee}createModel(F,D,R,W=!1){let x;return D?(x=this._createModelData(F,D.languageIdentifier,R,W),this.setMode(x.model,D)):x=this._createModelData(F,g.PLAINTEXT_LANGUAGE_IDENTIFIER,R,W),this._onModelAdded.fire(x.model),x.model}setMode(F,D){if(!!D){const R=this._models[m(F.uri)];!R||R.setLanguage(D)}}getModels(){const F=[],D=Object.keys(this._models);for(let R=0,W=D.length;R0||ee.future.length>0){for(const se of ee.past)n.isEditStackElement(se)&&se.matchesResource(F.uri)&&(x=!0,K+=se.heapSize(F.uri),se.setModel(F.uri));for(const se of ee.future)n.isEditStackElement(se)&&se.matchesResource(F.uri)&&(x=!0,K+=se.heapSize(F.uri),se.setModel(F.uri))}}const Y=st.MAX_MEMORY_FOR_CLOSED_FILES_UNDO_STACK;if(x)if(!W&&K>Y){const ee=R.model.getInitialUndoRedoSnapshot();ee!==null&&this._undoRedoService.restoreSnapshot(ee)}else this._ensureDisposedModelsHeapSize(Y-K),this._undoRedoService.setElementsValidFlag(F.uri,!1,ee=>n.isEditStackElement(ee)&&ee.matchesResource(F.uri)),this._insertDisposedModel(new y(F.uri,R.model.getInitialUndoRedoSnapshot(),Date.now(),W,K,_(F),F.getVersionId(),F.getAlternativeVersionId()));else if(!W){const ee=R.model.getInitialUndoRedoSnapshot();ee!==null&&this._undoRedoService.restoreSnapshot(ee)}delete this._models[D],R.dispose(),delete this._modelCreationOptionsByLanguageAndResource[F.getLanguageIdentifier().language+F.uri],this._onModelRemoved.fire(F)}_onDidChangeLanguage(F,D){const R=D.oldLanguage,W=F.getLanguageIdentifier().language,x=this.getCreationOptions(R,F.uri,F.isForSimpleWidget),K=this.getCreationOptions(W,F.uri,F.isForSimpleWidget);st._setModelOptionsForModel(F,K,x),this._onModelModeChanged.fire({model:F,oldModeId:R})}};I.MAX_MEMORY_FOR_CLOSED_FILES_UNDO_STACK=20*1024*1024,I=Me([_e(0,c.IConfigurationService),_e(1,p.ITextResourcePropertiesService),_e(2,a.IThemeService),_e(3,u.ILogService),_e(4,r.IUndoRedoService)],I),e.ModelServiceImpl=I,e.SEMANTIC_HIGHLIGHTING_SETTING_ID="editor.semanticHighlighting";function k(B,F,D){var R;const W=(R=D.getValue(e.SEMANTIC_HIGHLIGHTING_SETTING_ID,{overrideIdentifier:B.getLanguageIdentifier().language,resource:B.uri}))===null||R===void 0?void 0:R.enabled;return typeof W=="boolean"?W:F.getColorTheme().semanticHighlighting}e.isSemanticColoringEnabled=k;class E extends N.Disposable{constructor(F,D,R,W){super();this._watchers=Object.create(null),this._semanticStyling=W;const x=ee=>{this._watchers[ee.uri.toString()]=new A(ee,D,this._semanticStyling)},K=(ee,se)=>{se.dispose(),delete this._watchers[ee.uri.toString()]},Y=()=>{for(let ee of F.getModels()){const se=this._watchers[ee.uri.toString()];k(ee,D,R)?se||x(ee):se&&K(ee,se)}};this._register(F.onModelAdded(ee=>{k(ee,D,R)&&x(ee)})),this._register(F.onModelRemoved(ee=>{const se=this._watchers[ee.uri.toString()];se&&K(ee,se)})),this._register(R.onDidChangeConfiguration(ee=>{ee.affectsConfiguration(e.SEMANTIC_HIGHLIGHTING_SETTING_ID)&&Y()})),this._register(D.onDidColorThemeChange(Y))}}class T extends N.Disposable{constructor(F,D){super();this._themeService=F,this._logService=D,this._caches=new WeakMap,this._register(this._themeService.onDidColorThemeChange(()=>{this._caches=new WeakMap}))}get(F){return this._caches.has(F)||this._caches.set(F,new l.SemanticTokensProviderStyling(F.getLegend(),this._themeService,this._logService)),this._caches.get(F)}}class O{constructor(F,D,R){this._provider=F,this.resultId=D,this.data=R}dispose(){this._provider.releaseDocumentSemanticTokens(this.resultId)}}class A extends N.Disposable{constructor(F,D,R){super();this._isDisposed=!1,this._model=F,this._semanticStyling=R,this._fetchDocumentSemanticTokens=this._register(new o.RunOnceScheduler(()=>this._fetchDocumentSemanticTokensNow(),A.FETCH_DOCUMENT_SEMANTIC_TOKENS_DELAY)),this._currentDocumentResponse=null,this._currentDocumentRequestCancellationTokenSource=null,this._documentProvidersChangeListeners=[],this._register(this._model.onDidChangeContent(()=>{this._fetchDocumentSemanticTokens.isScheduled()||this._fetchDocumentSemanticTokens.schedule()}));const W=()=>{N.dispose(this._documentProvidersChangeListeners),this._documentProvidersChangeListeners=[];for(const x of d.DocumentSemanticTokensProviderRegistry.all(F))typeof x.onDidChange=="function"&&this._documentProvidersChangeListeners.push(x.onDidChange(()=>this._fetchDocumentSemanticTokens.schedule(0)))};W(),this._register(d.DocumentSemanticTokensProviderRegistry.onDidChange(()=>{W(),this._fetchDocumentSemanticTokens.schedule()})),this._register(D.onDidColorThemeChange(x=>{this._setDocumentSemanticTokens(null,null,null,[]),this._fetchDocumentSemanticTokens.schedule()})),this._fetchDocumentSemanticTokens.schedule(0)}dispose(){this._currentDocumentResponse&&(this._currentDocumentResponse.dispose(),this._currentDocumentResponse=null),this._currentDocumentRequestCancellationTokenSource&&(this._currentDocumentRequestCancellationTokenSource.cancel(),this._currentDocumentRequestCancellationTokenSource=null),this._setDocumentSemanticTokens(null,null,null,[]),this._isDisposed=!0,super.dispose()}_fetchDocumentSemanticTokensNow(){if(!this._currentDocumentRequestCancellationTokenSource){const F=new s.CancellationTokenSource,D=this._currentDocumentResponse&&this._currentDocumentResponse.resultId||null,R=h.getDocumentSemanticTokens(this._model,D,F.token);if(!R){this._currentDocumentResponse&&this._model.setSemanticTokens(null,!1);return}const{provider:W,request:x}=R;this._currentDocumentRequestCancellationTokenSource=F;const K=[],Y=this._model.onDidChangeContent(se=>{K.push(se)}),ee=this._semanticStyling.get(W);x.then(se=>{this._currentDocumentRequestCancellationTokenSource=null,Y.dispose(),this._setDocumentSemanticTokens(W,se||null,ee,K)},se=>{se&&(w.isPromiseCanceledError(se)||typeof se.message=="string"&&se.message.indexOf("busy")!==-1)||w.onUnexpectedError(se),this._currentDocumentRequestCancellationTokenSource=null,Y.dispose(),K.length>0&&(this._fetchDocumentSemanticTokens.isScheduled()||this._fetchDocumentSemanticTokens.schedule())})}}static _copy(F,D,R,W,x){for(let K=0;K{W.length>0&&!this._fetchDocumentSemanticTokens.isScheduled()&&this._fetchDocumentSemanticTokens.schedule()};if(this._currentDocumentResponse&&(this._currentDocumentResponse.dispose(),this._currentDocumentResponse=null),this._isDisposed){F&&D&&F.releaseDocumentSemanticTokens(D.resultId);return}if(!F||!R){this._model.setSemanticTokens(null,!1);return}if(!D){this._model.setSemanticTokens(null,!0),K();return}if(h.isSemanticTokensEdits(D)){if(!x){this._model.setSemanticTokens(null,!0);return}if(D.edits.length===0)D={resultId:D.resultId,data:x.data};else{let Y=0;for(const X of D.edits)Y+=(X.data?X.data.length:0)-X.deleteCount;const ee=x.data,se=new Uint32Array(ee.length+Y);let ne=ee.length,le=se.length;for(let X=D.edits.length-1;X>=0;X--){const z=D.edits[X],P=ne-(z.start+z.deleteCount);P>0&&(A._copy(ee,ne-P,se,le-P,P),le-=P),z.data&&(A._copy(z.data,0,se,le-z.data.length,z.data.length),le-=z.data.length),ne=z.start}ne>0&&A._copy(ee,0,se,0,ne),D={resultId:D.resultId,data:se}}}if(h.isSemanticTokens(D)){this._currentDocumentResponse=new O(F,D.resultId,D.data);const Y=l.toMultilineTokens2(D,R,this._model.getLanguageIdentifier());if(W.length>0)for(const ee of W)for(const se of Y)for(const ne of ee.changes)se.applyEdit(ne.range,ne.text);this._model.setSemanticTokens(Y,!0)}else this._model.setSemanticTokens(null,!0);K()}}e.ModelSemanticColoring=A,A.FETCH_DOCUMENT_SEMANTIC_TOKENS_DELAY=300}),define(Q[669],J([0,1,7,29,6,2,43,44,144,3,31,67,601,485,9,115,147,22,11,118,132,210,148,37,345]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l,h,m,_){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ReferenceWidget=e.LayoutData=void 0;class f{constructor(k,E){this._editor=k,this._model=E,this._decorations=new Map,this._decorationIgnoreSet=new Set,this._callOnDispose=new w.DisposableStore,this._callOnModelChange=new w.DisposableStore,this._callOnDispose.add(this._editor.onDidChangeModel(()=>this._onModelChanged())),this._onModelChanged()}dispose(){this._callOnModelChange.dispose(),this._callOnDispose.dispose(),this.removeDecorations()}_onModelChanged(){this._callOnModelChange.clear();const k=this._editor.getModel();if(!!k){for(let E of this._model.references)if(E.uri.toString()===k.uri.toString()){this._addDecorations(E.parent);return}}}_addDecorations(k){if(!!this._editor.hasModel()){this._callOnModelChange.add(this._editor.getModel().onDidChangeDecorations(()=>this._onDecorationChanged()));const E=[],T=[];for(let A=0,B=k.children.length;A{A.equals(9)&&(this._keybindingService.dispatchEvent(A,A.target),A.stopPropagation())},!0)),this._tree=this._instantiationService.createInstance(y,"ReferencesWidget",this._treeContainer,new o.Delegate,[this._instantiationService.createInstance(o.FileReferencesRenderer),this._instantiationService.createInstance(o.OneReferenceRenderer)],this._instantiationService.createInstance(o.DataSource),T),this._splitView.addView({onDidChange:M.Event.None,element:this._previewContainer,minimumSize:200,maximumSize:Number.MAX_VALUE,layout:A=>{this._preview.layout({height:this._dim.height,width:A})}},h.Sizing.Distribute),this._splitView.addView({onDidChange:M.Event.None,element:this._treeContainer,minimumSize:100,maximumSize:Number.MAX_VALUE,layout:A=>{this._treeContainer.style.height=`${this._dim.height}px`,this._treeContainer.style.width=`${A}px`,this._tree.layout(this._dim.height,A)}},h.Sizing.Distribute),this._disposables.add(this._splitView.onDidSashChange(()=>{this._dim.width&&(this.layoutData.ratio=this._splitView.getViewSize(0)/this._dim.width)},void 0));let O=(A,B)=>{A instanceof l.OneReference&&(B==="show"&&this._revealReference(A,!1),this._onDidSelectReference.fire({element:A,kind:B,source:"tree"}))};this._tree.onDidOpen(A=>{A.sideBySide?O(A.element,"side"):A.editorOptions.pinned?O(A.element,"goto"):O(A.element,"show")}),b.hide(this._treeContainer)}_onWidth(k){this._dim&&this._doLayoutBody(this._dim.height,k)}_doLayoutBody(k,E){super._doLayoutBody(k,E),this._dim=new b.Dimension(E,k),this.layoutData.heightInLines=this._viewZone?this._viewZone.heightInLines:this.layoutData.heightInLines,this._splitView.layout(E),this._splitView.resizeView(0,E*this.layoutData.ratio)}setSelection(k){return this._revealReference(k,!0).then(()=>{!this._model||(this._tree.setSelection([k]),this._tree.setFocus([k]))})}setModel(k){return this._disposeOnNewModel.clear(),this._model=k,this._model?this._onNewModel():Promise.resolve()}_onNewModel(){return this._model?this._model.isEmpty?(this.setTitle(""),this._messageContainer.innerText=s.localize(1,null),b.show(this._messageContainer),Promise.resolve(void 0)):(b.hide(this._messageContainer),this._decorationsManager=new f(this._preview,this._model),this._disposeOnNewModel.add(this._decorationsManager),this._disposeOnNewModel.add(this._model.onDidChangeReferenceRange(k=>this._tree.rerender(k))),this._disposeOnNewModel.add(this._preview.onMouseDown(k=>{const{event:E,target:T}=k;if(E.detail===2){const O=this._getFocusedReference();!O||this._onDidSelectReference.fire({element:{uri:O.uri,range:T.range},kind:E.ctrlKey||E.metaKey||E.altKey?"side":"open",source:"editor"})}})),this.container.classList.add("results-loaded"),b.show(this._treeContainer),b.show(this._previewContainer),this._splitView.layout(this._dim.width),this.focusOnReferenceTree(),this._tree.setInput(this._model.groups.length===1?this._model.groups[0]:this._model)):Promise.resolve(void 0)}_getFocusedReference(){const[k]=this._tree.getFocus();if(k instanceof l.OneReference)return k;if(k instanceof l.FileReferences&&k.children.length>0)return k.children[0]}revealReference(k){return Ie(this,void 0,void 0,function*(){yield this._revealReference(k,!1),this._onDidSelectReference.fire({element:k,kind:"goto",source:"tree"})})}_revealReference(k,E){return Ie(this,void 0,void 0,function*(){if(this._revealedReference!==k){this._revealedReference=k,k.uri.scheme!==S.Schemas.inMemory?this.setTitle(C.basenameOrAuthority(k.uri),this._uriLabel.getUriLabel(C.dirname(k.uri))):this.setTitle(s.localize(2,null));const T=this._textModelResolverService.createModelReference(k.uri);this._tree.getInput()===k.parent?this._tree.reveal(k):(E&&this._tree.reveal(k.parent),yield this._tree.expand(k.parent),this._tree.reveal(k));const O=yield T;if(!this._model){O.dispose();return}w.dispose(this._previewModelReference);const A=O.object;if(A){const B=this._preview.getModel()===A.textEditorModel?0:1,F=g.Range.lift(k.range).collapseToStart();this._previewModelReference=O,this._preview.setModel(A.textEditorModel),this._preview.setSelection(F),this._preview.revealRangeInCenter(F,B)}else this._preview.setModel(this._previewNotAvailableMessage),O.dispose()}})}};L=Me([_e(3,n.IThemeService),_e(4,c.ITextModelService),_e(5,a.IInstantiationService),_e(6,t.IPeekViewService),_e(7,u.ILabelService),_e(8,m.IUndoRedoService),_e(9,_.IKeybindingService)],L),e.ReferenceWidget=L,n.registerThemingParticipant((I,k)=>{const E=I.getColor(t.peekViewResultsMatchHighlight);E&&k.addRule(`.monaco-editor .reference-zone-widget .ref-tree .referenceMatch .highlight { background-color: ${E}; }`);const T=I.getColor(t.peekViewEditorMatchHighlight);T&&k.addRule(`.monaco-editor .reference-zone-widget .preview .reference-decoration { background-color: ${T}; }`);const O=I.getColor(t.peekViewEditorMatchHighlightBorder);O&&k.addRule(`.monaco-editor .reference-zone-widget .preview .reference-decoration { border: 2px solid ${O}; box-sizing: border-box; }`);const A=I.getColor(i.activeContrastBorder);A&&k.addRule(`.monaco-editor .reference-zone-widget .ref-tree .referenceMatch .highlight { border: 1px dotted ${A}; box-sizing: border-box; }`);const B=I.getColor(t.peekViewResultsBackground);B&&k.addRule(`.monaco-editor .reference-zone-widget .ref-tree { background-color: ${B}; }`);const F=I.getColor(t.peekViewResultsMatchForeground);F&&k.addRule(`.monaco-editor .reference-zone-widget .ref-tree { color: ${F}; }`);const D=I.getColor(t.peekViewResultsFileForeground);D&&k.addRule(`.monaco-editor .reference-zone-widget .ref-tree .reference-file { color: ${D}; }`);const R=I.getColor(t.peekViewResultsSelectionBackground);R&&k.addRule(`.monaco-editor .reference-zone-widget .ref-tree .monaco-list:focus .monaco-list-rows > .monaco-list-row.selected:not(.highlighted) { background-color: ${R}; }`);const W=I.getColor(t.peekViewResultsSelectionForeground);W&&k.addRule(`.monaco-editor .reference-zone-widget .ref-tree .monaco-list:focus .monaco-list-rows > .monaco-list-row.selected:not(.highlighted) { color: ${W} !important; }`);const x=I.getColor(t.peekViewEditorBackground);x&&k.addRule(`.monaco-editor .reference-zone-widget .preview .monaco-editor .monaco-editor-background,.monaco-editor .reference-zone-widget .preview .monaco-editor .inputarea.ime-input { background-color: ${x};}`);const K=I.getColor(t.peekViewEditorGutterBackground);K&&k.addRule(`.monaco-editor .reference-zone-widget .preview .monaco-editor .margin { background-color: ${K};}`)})}),define(Q[270],J([0,1,483,12,2,28,9,16,46,79,132,669,3,14,32,15,118,147,86,39,26]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ReferencesController=e.ctxReferenceSearchVisible=void 0,e.ctxReferenceSearchVisible=new C.RawContextKey("referenceSearchVisible",!1);let h=class yt{constructor(f,v,y,L,I,k,E,T){this._defaultTreeKeyboardSupport=f,this._editor=v,this._editorService=L,this._notificationService=I,this._instantiationService=k,this._storageService=E,this._configurationService=T,this._disposables=new M.DisposableStore,this._requestIdPool=0,this._ignoreModelChangeEvent=!1,this._referenceSearchVisible=e.ctxReferenceSearchVisible.bindTo(y)}static get(f){return f.getContribution(yt.ID)}dispose(){var f,v;this._referenceSearchVisible.reset(),this._disposables.dispose(),(f=this._widget)===null||f===void 0||f.dispose(),(v=this._model)===null||v===void 0||v.dispose(),this._widget=void 0,this._model=void 0}toggleWidget(f,v,y){let L;if(this._widget&&(L=this._widget.position),this.closeWidget(),!(!!L&&f.containsPosition(L))){this._peekMode=y,this._referenceSearchVisible.set(!0),this._disposables.add(this._editor.onDidChangeModelLanguage(()=>{this.closeWidget()})),this._disposables.add(this._editor.onDidChangeModel(()=>{this._ignoreModelChangeEvent||this.closeWidget()}));const I="peekViewLayout",k=c.LayoutData.fromJSON(this._storageService.get(I,0,"{}"));this._widget=this._instantiationService.createInstance(c.ReferenceWidget,this._editor,this._defaultTreeKeyboardSupport,k),this._widget.setTitle(b.localize(0,null)),this._widget.show(f),this._disposables.add(this._widget.onDidClose(()=>{v.cancel(),this._widget&&(this._storageService.store(I,JSON.stringify(this._widget.layoutData),0,1),this._widget=void 0),this.closeWidget()})),this._disposables.add(this._widget.onDidSelectReference(T=>{let{element:O,kind:A}=T;if(!!O)switch(A){case"open":(T.source!=="editor"||!this._configurationService.getValue("editor.stablePeek"))&&this.openReference(O,!1,!1);break;case"side":this.openReference(O,!0,!1);break;case"goto":y?this._gotoReference(O):this.openReference(O,!1,!0);break}}));const E=++this._requestIdPool;v.then(T=>{var O;if(E!==this._requestIdPool||!this._widget){T.dispose();return}return(O=this._model)===null||O===void 0||O.dispose(),this._model=T,this._widget.setModel(this._model).then(()=>{if(this._widget&&this._model&&this._editor.hasModel()){this._model.isEmpty?this._widget.setMetaTitle(""):this._widget.setMetaTitle(b.localize(1,null,this._model.title,this._model.references.length));let A=this._editor.getModel().uri,B=new s.Position(f.startLineNumber,f.startColumn),F=this._model.nearestReference(A,B);if(F)return this._widget.setSelection(F).then(()=>{this._widget&&this._editor.getOption(71)==="editor"&&this._widget.focusOnPreviewEditor()})}})},T=>{this._notificationService.error(T)})}}changeFocusBetweenPreviewAndReferences(){!this._widget||(this._widget.isPreviewEditorFocused()?this._widget.focusOnReferenceTree():this._widget.focusOnPreviewEditor())}goToNextOrPreviousReference(f){return Ie(this,void 0,void 0,function*(){if(!(!this._editor.hasModel()||!this._model||!this._widget)){const v=this._widget.position;if(!!v){const y=this._model.nearestReference(this._editor.getModel().uri,v);if(!!y){const L=this._model.nextOrPreviousReference(y,f),I=this._editor.hasTextFocus(),k=this._widget.isPreviewEditorFocused();yield this._widget.setSelection(L),yield this._gotoReference(L),I?this._editor.focus():this._widget&&k&&this._widget.focusOnPreviewEditor()}}}})}revealReference(f){return Ie(this,void 0,void 0,function*(){!this._editor.hasModel()||!this._model||!this._widget||(yield this._widget.revealReference(f))})}closeWidget(f=!0){var v,y;(v=this._widget)===null||v===void 0||v.dispose(),(y=this._model)===null||y===void 0||y.dispose(),this._referenceSearchVisible.reset(),this._disposables.clear(),this._widget=void 0,this._model=void 0,f&&this._editor.focus(),this._requestIdPool+=1}_gotoReference(f){this._widget&&this._widget.hide(),this._ignoreModelChangeEvent=!0;const v=o.Range.lift(f.range).collapseToStart();return this._editorService.openCodeEditor({resource:f.uri,options:{selection:v}},this._editor).then(y=>{var L;if(this._ignoreModelChangeEvent=!1,!y||!this._widget){this.closeWidget();return}if(this._editor===y)this._widget.show(v),this._widget.focusOnReferenceTree();else{const I=yt.get(y),k=this._model.clone();this.closeWidget(),y.focus(),I.toggleWidget(v,u.createCancelablePromise(E=>Promise.resolve(k)),(L=this._peekMode)!==null&&L!==void 0?L:!1)}},y=>{this._ignoreModelChangeEvent=!1,N.onUnexpectedError(y)})}openReference(f,v,y){v||this.closeWidget();const{uri:L,range:I}=f;this._editorService.openCodeEditor({resource:L,options:{selection:I,pinned:y}},this._editor,v)}};h.ID="editor.contrib.referencesController",h=Me([_e(2,C.IContextKeyService),_e(3,w.ICodeEditorService),_e(4,a.INotificationService),_e(5,S.IInstantiationService),_e(6,g.IStorageService),_e(7,d.IConfigurationService)],h),e.ReferencesController=h;function m(_,f){const v=r.getOuterEditor(_);if(!!v){let y=h.get(v);y&&f(y)}}n.KeybindingsRegistry.registerCommandAndKeybindingRule({id:"togglePeekWidgetFocus",weight:100,primary:t.KeyChord(2048|41,60),when:C.ContextKeyExpr.or(e.ctxReferenceSearchVisible,r.PeekContext.inPeekEditor),handler(_){m(_,f=>{f.changeFocusBetweenPreviewAndReferences()})}}),n.KeybindingsRegistry.registerCommandAndKeybindingRule({id:"goToNextReference",weight:100-10,primary:62,secondary:[70],when:C.ContextKeyExpr.or(e.ctxReferenceSearchVisible,r.PeekContext.inPeekEditor),handler(_){m(_,f=>{f.goToNextOrPreviousReference(!0)})}}),n.KeybindingsRegistry.registerCommandAndKeybindingRule({id:"goToPreviousReference",weight:100-10,primary:1024|62,secondary:[1024|70],when:C.ContextKeyExpr.or(e.ctxReferenceSearchVisible,r.PeekContext.inPeekEditor),handler(_){m(_,f=>{f.goToNextOrPreviousReference(!1)})}}),l.CommandsRegistry.registerCommandAlias("goToNextReferenceFromEmbeddedEditor","goToNextReference"),l.CommandsRegistry.registerCommandAlias("goToPreviousReferenceFromEmbeddedEditor","goToPreviousReference"),l.CommandsRegistry.registerCommandAlias("closeReferenceSearchEditor","closeReferenceSearch"),l.CommandsRegistry.registerCommand("closeReferenceSearch",_=>m(_,f=>f.closeWidget())),n.KeybindingsRegistry.registerKeybindingRule({id:"closeReferenceSearch",weight:100-101,primary:9,secondary:[1024|9],when:C.ContextKeyExpr.and(r.PeekContext.inPeekEditor,C.ContextKeyExpr.not("config.editor.stablePeek"))}),n.KeybindingsRegistry.registerKeybindingRule({id:"closeReferenceSearch",weight:200+50,primary:9,secondary:[1024|9],when:C.ContextKeyExpr.and(e.ctxReferenceSearchVisible,C.ContextKeyExpr.not("config.editor.stablePeek"))}),n.KeybindingsRegistry.registerCommandAndKeybindingRule({id:"revealReference",weight:200,primary:3,mac:{primary:3,secondary:[2048|18]},when:C.ContextKeyExpr.and(e.ctxReferenceSearchVisible,i.WorkbenchListFocusContextKey),handler(_){var f;const y=(f=_.get(i.IListService).lastFocusedList)===null||f===void 0?void 0:f.getFocus();Array.isArray(y)&&y[0]instanceof p.OneReference&&m(_,L=>L.revealReference(y[0]))}}),n.KeybindingsRegistry.registerCommandAndKeybindingRule({id:"openReferenceToSide",weight:100,primary:2048|3,mac:{primary:256|3},when:C.ContextKeyExpr.and(e.ctxReferenceSearchVisible,i.WorkbenchListFocusContextKey),handler(_){var f;const y=(f=_.get(i.IListService).lastFocusedList)===null||f===void 0?void 0:f.getFocus();Array.isArray(y)&&y[0]instanceof p.OneReference&&m(_,L=>L.openReference(y[0],!0,!0))}}),l.CommandsRegistry.registerCommand("openReference",_=>{var f;const y=(f=_.get(i.IListService).lastFocusedList)===null||f===void 0?void 0:f.getFocus();Array.isArray(y)&&y[0]instanceof p.OneReference&&m(_,L=>L.openReference(y[0],!1,!0))})}),define(Q[271],J([0,1,47,15,39,17,108,13,28,14,3,25,18,146,118,270,132,481,34,16,32,59,262,26,70,625,35,24,9,20,144]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l,h,m,_,f,v,y,L,I,k,E){"use strict";var T,O,A,B,F,D,R,W;Object.defineProperty(e,"__esModule",{value:!0}),e.DefinitionAction=void 0,n.MenuRegistry.appendMenuItem(n.MenuId.EditorContext,{submenu:n.MenuId.EditorContextPeek,title:i.localize(0,null),group:"navigation",order:100});class x extends C.EditorAction{constructor(P,V){super(V);this._configuration=P}run(P,V){if(!V.hasModel())return Promise.resolve(void 0);const U=P.get(l.INotificationService),H=P.get(d.ICodeEditorService),$=P.get(h.IEditorProgressService),ie=P.get(v.ISymbolNavigationService),oe=V.getModel(),ae=V.getPosition(),G=new f.EditorStateCancellationTokenSource(V,1|4),j=N.raceCancellation(this._getLocationModel(oe,ae,G.token),G.token).then(te=>Ie(this,void 0,void 0,function*(){if(!(!te||G.token.isCancellationRequested)){b.alert(te.ariaMessage);let Z;if(te.referenceAt(oe.uri,ae)){const he=this._getAlternativeCommand(V);he!==this.id&&(Z=V.getAction(he))}const ue=te.references.length;if(ue===0){if(!this._configuration.muteMessage){const he=oe.getWordAtPosition(ae);s.MessageController.get(V).showMessage(this._getNoResultFoundMessage(he),ae)}}else if(ue===1&&Z)Z.run();else return this._onResult(H,ie,V,te)}}),te=>{U.error(te)}).finally(()=>{G.dispose()});return $.showWhile(j,250),j}_onResult(P,V,U,H){return Ie(this,void 0,void 0,function*(){const $=this._getGoToPreference(U);if(!(U instanceof E.EmbeddedCodeEditorWidget)&&(this._configuration.openInPeek||$==="peek"&&H.references.length>1))this._openInPeek(U,H);else{const ie=H.firstReference(),oe=H.references.length>1&&$==="gotoAndPeek",ae=yield this._openReference(U,P,ie,this._configuration.openToSide,!oe);oe&&ae?this._openInPeek(ae,H):H.dispose(),$==="goto"&&V.put(ie)}})}_openReference(P,V,U,H,$){return Ie(this,void 0,void 0,function*(){let ie;if(o.isLocationLink(U)&&(ie=U.targetSelectionRange),ie||(ie=U.range),!!ie){const oe=yield V.openCodeEditor({resource:U.uri,options:{selection:p.Range.collapseToStart(ie),selectionRevealType:3}},P,H);if(!!oe){if($){const ae=oe.getModel(),G=oe.deltaDecorations([],[{range:ie,options:{className:"symbolHighlight"}}]);setTimeout(()=>{oe.getModel()===ae&&oe.deltaDecorations(G,[])},350)}return oe}}})}_openInPeek(P,V){let U=u.ReferencesController.get(P);U&&P.hasModel()?U.toggleWidget(P.getSelection(),N.createCancelablePromise(H=>Promise.resolve(V)),this._configuration.openInPeek):V.dispose()}}class K extends x{_getLocationModel(P,V,U){return Ie(this,void 0,void 0,function*(){return new r.ReferencesModel(yield m.getDefinitionsAtPosition(P,V,U),i.localize(1,null))})}_getNoResultFoundMessage(P){return P&&P.word?i.localize(2,null,P.word):i.localize(3,null)}_getAlternativeCommand(P){return P.getOption(45).alternativeDefinitionCommand}_getGoToPreference(P){return P.getOption(45).multipleDefinitions}}e.DefinitionAction=K;const Y=w.isWeb&&!y.isStandalone?2048|70:70;C.registerEditorAction((T=class Lt extends K{constructor(){super({openToSide:!1,openInPeek:!1,muteMessage:!1},{id:Lt.id,label:i.localize(4,null),alias:"Go to Definition",precondition:t.ContextKeyExpr.and(c.EditorContextKeys.hasDefinitionProvider,c.EditorContextKeys.isInWalkThroughSnippet.toNegated()),kbOpts:{kbExpr:c.EditorContextKeys.editorTextFocus,primary:Y,weight:100},contextMenuOpts:{group:"navigation",order:1.1},menuOpts:{menuId:n.MenuId.MenubarGoMenu,group:"4_symbol_nav",order:2,title:i.localize(5,null)}});_.CommandsRegistry.registerCommandAlias("editor.action.goToDeclaration",Lt.id)}},T.id="editor.action.revealDefinition",T)),C.registerEditorAction((O=class Et extends K{constructor(){super({openToSide:!0,openInPeek:!1,muteMessage:!1},{id:Et.id,label:i.localize(6,null),alias:"Open Definition to the Side",precondition:t.ContextKeyExpr.and(c.EditorContextKeys.hasDefinitionProvider,c.EditorContextKeys.isInWalkThroughSnippet.toNegated()),kbOpts:{kbExpr:c.EditorContextKeys.editorTextFocus,primary:M.KeyChord(2048|41,Y),weight:100}});_.CommandsRegistry.registerCommandAlias("editor.action.openDeclarationToTheSide",Et.id)}},O.id="editor.action.revealDefinitionAside",O)),C.registerEditorAction((A=class Dt extends K{constructor(){super({openToSide:!1,openInPeek:!0,muteMessage:!1},{id:Dt.id,label:i.localize(7,null),alias:"Peek Definition",precondition:t.ContextKeyExpr.and(c.EditorContextKeys.hasDefinitionProvider,a.PeekContext.notInPeekEditor,c.EditorContextKeys.isInWalkThroughSnippet.toNegated()),kbOpts:{kbExpr:c.EditorContextKeys.editorTextFocus,primary:512|70,linux:{primary:2048|1024|68},weight:100},contextMenuOpts:{menuId:n.MenuId.EditorContextPeek,group:"peek",order:2}});_.CommandsRegistry.registerCommandAlias("editor.action.previewDeclaration",Dt.id)}},A.id="editor.action.peekDefinition",A));class ee extends x{_getLocationModel(P,V,U){return Ie(this,void 0,void 0,function*(){return new r.ReferencesModel(yield m.getDeclarationsAtPosition(P,V,U),i.localize(8,null))})}_getNoResultFoundMessage(P){return P&&P.word?i.localize(9,null,P.word):i.localize(10,null)}_getAlternativeCommand(P){return P.getOption(45).alternativeDeclarationCommand}_getGoToPreference(P){return P.getOption(45).multipleDeclarations}}C.registerEditorAction((B=class Yt extends ee{constructor(){super({openToSide:!1,openInPeek:!1,muteMessage:!1},{id:Yt.id,label:i.localize(11,null),alias:"Go to Declaration",precondition:t.ContextKeyExpr.and(c.EditorContextKeys.hasDeclarationProvider,c.EditorContextKeys.isInWalkThroughSnippet.toNegated()),contextMenuOpts:{group:"navigation",order:1.3},menuOpts:{menuId:n.MenuId.MenubarGoMenu,group:"4_symbol_nav",order:3,title:i.localize(12,null)}})}_getNoResultFoundMessage(P){return P&&P.word?i.localize(13,null,P.word):i.localize(14,null)}},B.id="editor.action.revealDeclaration",B)),C.registerEditorAction(class extends ee{constructor(){super({openToSide:!1,openInPeek:!0,muteMessage:!1},{id:"editor.action.peekDeclaration",label:i.localize(15,null),alias:"Peek Declaration",precondition:t.ContextKeyExpr.and(c.EditorContextKeys.hasDeclarationProvider,a.PeekContext.notInPeekEditor,c.EditorContextKeys.isInWalkThroughSnippet.toNegated()),contextMenuOpts:{menuId:n.MenuId.EditorContextPeek,group:"peek",order:3}})}});class se extends x{_getLocationModel(P,V,U){return Ie(this,void 0,void 0,function*(){return new r.ReferencesModel(yield m.getTypeDefinitionsAtPosition(P,V,U),i.localize(16,null))})}_getNoResultFoundMessage(P){return P&&P.word?i.localize(17,null,P.word):i.localize(18,null)}_getAlternativeCommand(P){return P.getOption(45).alternativeTypeDefinitionCommand}_getGoToPreference(P){return P.getOption(45).multipleTypeDefinitions}}C.registerEditorAction((F=class Zt extends se{constructor(){super({openToSide:!1,openInPeek:!1,muteMessage:!1},{id:Zt.ID,label:i.localize(19,null),alias:"Go to Type Definition",precondition:t.ContextKeyExpr.and(c.EditorContextKeys.hasTypeDefinitionProvider,c.EditorContextKeys.isInWalkThroughSnippet.toNegated()),kbOpts:{kbExpr:c.EditorContextKeys.editorTextFocus,primary:0,weight:100},contextMenuOpts:{group:"navigation",order:1.4},menuOpts:{menuId:n.MenuId.MenubarGoMenu,group:"4_symbol_nav",order:3,title:i.localize(20,null)}})}},F.ID="editor.action.goToTypeDefinition",F)),C.registerEditorAction((D=class Xt extends se{constructor(){super({openToSide:!1,openInPeek:!0,muteMessage:!1},{id:Xt.ID,label:i.localize(21,null),alias:"Peek Type Definition",precondition:t.ContextKeyExpr.and(c.EditorContextKeys.hasTypeDefinitionProvider,a.PeekContext.notInPeekEditor,c.EditorContextKeys.isInWalkThroughSnippet.toNegated()),contextMenuOpts:{menuId:n.MenuId.EditorContextPeek,group:"peek",order:4}})}},D.ID="editor.action.peekTypeDefinition",D));class ne extends x{_getLocationModel(P,V,U){return Ie(this,void 0,void 0,function*(){return new r.ReferencesModel(yield m.getImplementationsAtPosition(P,V,U),i.localize(22,null))})}_getNoResultFoundMessage(P){return P&&P.word?i.localize(23,null,P.word):i.localize(24,null)}_getAlternativeCommand(P){return P.getOption(45).alternativeImplementationCommand}_getGoToPreference(P){return P.getOption(45).multipleImplementations}}C.registerEditorAction((R=class Qt extends ne{constructor(){super({openToSide:!1,openInPeek:!1,muteMessage:!1},{id:Qt.ID,label:i.localize(25,null),alias:"Go to Implementations",precondition:t.ContextKeyExpr.and(c.EditorContextKeys.hasImplementationProvider,c.EditorContextKeys.isInWalkThroughSnippet.toNegated()),kbOpts:{kbExpr:c.EditorContextKeys.editorTextFocus,primary:2048|70,weight:100},menuOpts:{menuId:n.MenuId.MenubarGoMenu,group:"4_symbol_nav",order:4,title:i.localize(26,null)},contextMenuOpts:{group:"navigation",order:1.45}})}},R.ID="editor.action.goToImplementation",R)),C.registerEditorAction((W=class Jt extends ne{constructor(){super({openToSide:!1,openInPeek:!0,muteMessage:!1},{id:Jt.ID,label:i.localize(27,null),alias:"Peek Implementations",precondition:t.ContextKeyExpr.and(c.EditorContextKeys.hasImplementationProvider,a.PeekContext.notInPeekEditor,c.EditorContextKeys.isInWalkThroughSnippet.toNegated()),kbOpts:{kbExpr:c.EditorContextKeys.editorTextFocus,primary:2048|1024|70,weight:100},contextMenuOpts:{menuId:n.MenuId.EditorContextPeek,group:"peek",order:5}})}},W.ID="editor.action.peekImplementation",W));class le extends x{_getNoResultFoundMessage(P){return P?i.localize(28,null,P.word):i.localize(29,null)}_getAlternativeCommand(P){return P.getOption(45).alternativeReferenceCommand}_getGoToPreference(P){return P.getOption(45).multipleReferences}}C.registerEditorAction(class extends le{constructor(){super({openToSide:!1,openInPeek:!1,muteMessage:!1},{id:"editor.action.goToReferences",label:i.localize(30,null),alias:"Go to References",precondition:t.ContextKeyExpr.and(c.EditorContextKeys.hasReferenceProvider,a.PeekContext.notInPeekEditor,c.EditorContextKeys.isInWalkThroughSnippet.toNegated()),kbOpts:{kbExpr:c.EditorContextKeys.editorTextFocus,primary:1024|70,weight:100},contextMenuOpts:{group:"navigation",order:1.45},menuOpts:{menuId:n.MenuId.MenubarGoMenu,group:"4_symbol_nav",order:5,title:i.localize(31,null)}})}_getLocationModel(P,V,U){return Ie(this,void 0,void 0,function*(){return new r.ReferencesModel(yield m.getReferencesAtPosition(P,V,!0,U),i.localize(32,null))})}}),C.registerEditorAction(class extends le{constructor(){super({openToSide:!1,openInPeek:!0,muteMessage:!1},{id:"editor.action.referenceSearch.trigger",label:i.localize(33,null),alias:"Peek References",precondition:t.ContextKeyExpr.and(c.EditorContextKeys.hasReferenceProvider,a.PeekContext.notInPeekEditor,c.EditorContextKeys.isInWalkThroughSnippet.toNegated()),contextMenuOpts:{menuId:n.MenuId.EditorContextPeek,group:"peek",order:6}})}_getLocationModel(P,V,U){return Ie(this,void 0,void 0,function*(){return new r.ReferencesModel(yield m.getReferencesAtPosition(P,V,!1,U),i.localize(34,null))})}});class X extends x{constructor(P,V,U){super(P,{id:"editor.action.goToLocation",label:i.localize(35,null),alias:"Go To Any Symbol",precondition:t.ContextKeyExpr.and(a.PeekContext.notInPeekEditor,c.EditorContextKeys.isInWalkThroughSnippet.toNegated())});this._references=V,this._gotoMultipleBehaviour=U}_getLocationModel(P,V,U){return Ie(this,void 0,void 0,function*(){return new r.ReferencesModel(this._references,i.localize(36,null))})}_getNoResultFoundMessage(P){return P&&i.localize(37,null,P.word)||""}_getGoToPreference(P){var V;return(V=this._gotoMultipleBehaviour)!==null&&V!==void 0?V:P.getOption(45).multipleReferences}_getAlternativeCommand(){return""}}_.CommandsRegistry.registerCommand({id:"editor.action.goToLocations",description:{description:"Go to locations from a position in a file",args:[{name:"uri",description:"The text document in which to start",constraint:L.URI},{name:"position",description:"The position at which to start",constraint:g.Position.isIPosition},{name:"locations",description:"An array of locations.",constraint:Array},{name:"multiple",description:"Define what to do when having multiple results, either `peek`, `gotoAndPeek`, or `goto"},{name:"noResultsMessage",description:"Human readable message that shows when locations is empty."}]},handler:(z,P,V,U,H,$,ie)=>Ie(void 0,void 0,void 0,function*(){k.assertType(L.URI.isUri(P)),k.assertType(g.Position.isIPosition(V)),k.assertType(Array.isArray(U)),k.assertType(typeof H=="undefined"||typeof H=="string"),k.assertType(typeof ie=="undefined"||typeof ie=="boolean");const oe=z.get(d.ICodeEditorService),ae=yield oe.openCodeEditor({resource:P},oe.getFocusedCodeEditor());if(S.isCodeEditor(ae))return ae.setPosition(V),ae.revealPositionInCenterIfOutsideViewport(V,0),ae.invokeWithinContext(G=>{const j=new class extends X{_getNoResultFoundMessage(te){return $||super._getNoResultFoundMessage(te)}}({muteMessage:!Boolean($),openInPeek:Boolean(ie),openToSide:!1},U,H);G.get(I.IInstantiationService).invokeFunction(j.run.bind(j),ae)})})}),_.CommandsRegistry.registerCommand({id:"editor.action.peekLocations",description:{description:"Peek locations from a position in a file",args:[{name:"uri",description:"The text document in which to start",constraint:L.URI},{name:"position",description:"The position at which to start",constraint:g.Position.isIPosition},{name:"locations",description:"An array of locations.",constraint:Array},{name:"multiple",description:"Define what to do when having multiple results, either `peek`, `gotoAndPeek`, or `goto"}]},handler:(z,P,V,U,H)=>Ie(void 0,void 0,void 0,function*(){z.get(_.ICommandService).executeCommand("editor.action.goToLocations",P,V,U,H,void 0,!0)})}),_.CommandsRegistry.registerCommand({id:"editor.action.findReferences",handler:(z,P,V)=>{k.assertType(L.URI.isUri(P)),k.assertType(g.Position.isIPosition(V));const U=z.get(d.ICodeEditorService);return U.openCodeEditor({resource:P},U.getFocusedCodeEditor()).then(H=>{if(!(!S.isCodeEditor(H)||!H.hasModel())){const $=u.ReferencesController.get(H);if(!!$){const ie=N.createCancelablePromise(ae=>m.getReferencesAtPosition(H.getModel(),g.Position.lift(V),!1,ae).then(G=>new r.ReferencesModel(G,i.localize(38,null)))),oe=new p.Range(V.lineNumber,V.column,V.lineNumber,V.column);return Promise.resolve($.toggleWidget(oe,ie,!1))}}})}}),_.CommandsRegistry.registerCommandAlias("editor.action.showReferences","editor.action.peekLocations")}),define(Q[272],J([0,1,482,15,12,73,57,3,18,13,262,2,67,11,22,70,271,227,14,20,118,16,344]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l,h){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.GotoDefinitionAtPositionEditorContribution=void 0;let m=class rt{constructor(f,v,y){this.textModelResolverService=v,this.modeService=y,this.toUnhook=new c.DisposableStore,this.toUnhookForKeyboard=new c.DisposableStore,this.linkDecorations=[],this.currentWordAtPosition=null,this.previousPromise=null,this.editor=f;let L=new i.ClickLinkGesture(f);this.toUnhook.add(L),this.toUnhook.add(L.onMouseMoveOrRelevantKeyDown(([I,k])=>{this.startFindDefinitionFromMouse(I,t.withNullAsUndefined(k))})),this.toUnhook.add(L.onExecute(I=>{this.isEnabled(I)&&this.gotoDefinition(I.target.position,I.hasSideBySideModifier).then(()=>{this.removeLinkDecorations()},k=>{this.removeLinkDecorations(),M.onUnexpectedError(k)})})),this.toUnhook.add(L.onCancel(()=>{this.removeLinkDecorations(),this.currentWordAtPosition=null}))}static get(f){return f.getContribution(rt.ID)}startFindDefinitionFromCursor(f){return this.startFindDefinition(f).then(()=>{this.toUnhookForKeyboard.add(this.editor.onDidChangeCursorPosition(()=>{this.currentWordAtPosition=null,this.removeLinkDecorations(),this.toUnhookForKeyboard.clear()})),this.toUnhookForKeyboard.add(this.editor.onKeyDown(v=>{v&&(this.currentWordAtPosition=null,this.removeLinkDecorations(),this.toUnhookForKeyboard.clear())}))})}startFindDefinitionFromMouse(f,v){if(!(f.target.type===9&&this.linkDecorations.length>0)){if(!this.editor.hasModel()||!this.isEnabled(f,v)){this.currentWordAtPosition=null,this.removeLinkDecorations();return}const y=f.target.position;this.startFindDefinition(y)}}startFindDefinition(f){var v;this.toUnhookForKeyboard.clear();const y=f?(v=this.editor.getModel())===null||v===void 0?void 0:v.getWordAtPosition(f):null;if(!y)return this.currentWordAtPosition=null,this.removeLinkDecorations(),Promise.resolve(0);if(this.currentWordAtPosition&&this.currentWordAtPosition.startColumn===y.startColumn&&this.currentWordAtPosition.endColumn===y.endColumn&&this.currentWordAtPosition.word===y.word)return Promise.resolve(0);this.currentWordAtPosition=y;let L=new u.EditorState(this.editor,4|1|2|8);return this.previousPromise&&(this.previousPromise.cancel(),this.previousPromise=null),this.previousPromise=N.createCancelablePromise(I=>this.findDefinition(f,I)),this.previousPromise.then(I=>{if(!I||!I.length||!L.validate(this.editor)){this.removeLinkDecorations();return}if(I.length>1)this.addDecoration(new C.Range(f.lineNumber,y.startColumn,f.lineNumber,y.endColumn),new w.MarkdownString().appendText(b.localize(0,null,I.length)));else{let k=I[0];if(!k.uri)return;this.textModelResolverService.createModelReference(k.uri).then(E=>{if(!E.object||!E.object.textEditorModel){E.dispose();return}const{object:{textEditorModel:T}}=E,{startLineNumber:O}=k.range;if(O<1||O>T.getLineCount()){E.dispose();return}const A=this.getPreviewValue(T,O,k);let B;k.originSelectionRange?B=C.Range.lift(k.originSelectionRange):B=new C.Range(f.lineNumber,y.startColumn,f.lineNumber,y.endColumn);const F=this.modeService.getModeIdByFilepathOrFirstLine(T.uri);this.addDecoration(B,new w.MarkdownString().appendCodeblock(F||"",A)),E.dispose()})}}).then(void 0,M.onUnexpectedError)}getPreviewValue(f,v,y){let L=y.targetSelectionRange?y.range:this.getPreviewRangeBasedOnBrackets(f,v);return L.endLineNumber-L.startLineNumber>=rt.MAX_SOURCE_PREVIEW_LINES&&(L=this.getPreviewRangeBasedOnIndentation(f,v)),this.stripIndentationFromPreviewRange(f,v,L)}stripIndentationFromPreviewRange(f,v,y){let I=f.getLineFirstNonWhitespaceColumn(v);for(let E=v+1;Ey)return new C.Range(v,1,y+1,1);k=f.findNextBracket(new n.Position(T,O))}return new C.Range(v,1,y+1,1)}addDecoration(f,v){const y={range:f,options:{inlineClassName:"goto-definition-link",hoverMessage:v}};this.linkDecorations=this.editor.deltaDecorations(this.linkDecorations,[y])}removeLinkDecorations(){this.linkDecorations.length>0&&(this.linkDecorations=this.editor.deltaDecorations(this.linkDecorations,[]))}isEnabled(f,v){return this.editor.hasModel()&&f.isNoneOrSingleMouseDown&&f.target.type===6&&(f.hasTriggerModifier||(v?v.keyCodeIsTriggerKey:!1))&&d.DefinitionProviderRegistry.has(this.editor.getModel())}findDefinition(f,v){const y=this.editor.getModel();return y?p.getDefinitionsAtPosition(y,f,v):Promise.resolve(null)}gotoDefinition(f,v){return this.editor.setPosition(f),this.editor.invokeWithinContext(y=>{const L=!v&&this.editor.getOption(72)&&!this.isInPeekEditor(y);return new r.DefinitionAction({openToSide:v,openInPeek:L,muteMessage:!0},{alias:"",label:"",id:"",precondition:void 0}).run(y,this.editor)})}isInPeekEditor(f){const v=f.get(h.IContextKeyService);return l.PeekContext.inPeekEditor.getValue(v)}dispose(){this.toUnhook.dispose()}};m.ID="editor.contrib.gotodefinitionatposition",m.MAX_SOURCE_PREVIEW_LINES=8,m=Me([_e(1,o.ITextModelService),_e(2,S.IModeService)],m),e.GotoDefinitionAtPositionEditorContribution=m,g.registerEditorContribution(m.ID,m),s.registerThemingParticipant((_,f)=>{const v=_.getColor(a.editorActiveLinkForeground);v&&f.addRule(`.monaco-editor .goto-definition-link { color: ${v} !important; }`)})}),define(Q[273],J([0,1,488,39,2,13,3,25,57,661,560,58,22,11,272,16,9]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ModesHoverController=void 0;let i=class ei{constructor(h,m,_,f,v,y){this._editor=h,this._instantiationService=m,this._openerService=_,this._modeService=f,this._themeService=v,this._toUnhook=new M.DisposableStore,this._isMouseDown=!1,this._hoverClicked=!1,this._contentWidget=null,this._glyphWidget=null,this._hookEvents(),this._didChangeConfigurationHandler=this._editor.onDidChangeConfiguration(L=>{L.hasChanged(48)&&(this._unhookEvents(),this._hookEvents())}),this._hoverVisibleKey=C.EditorContextKeys.hoverVisible.bindTo(y)}static get(h){return h.getContribution(ei.ID)}_hookEvents(){const h=()=>this._hideWidgets(),m=this._editor.getOption(48);this._isHoverEnabled=m.enabled,this._isHoverSticky=m.sticky,this._isHoverEnabled?(this._toUnhook.add(this._editor.onMouseDown(_=>this._onEditorMouseDown(_))),this._toUnhook.add(this._editor.onMouseUp(_=>this._onEditorMouseUp(_))),this._toUnhook.add(this._editor.onMouseMove(_=>this._onEditorMouseMove(_))),this._toUnhook.add(this._editor.onKeyDown(_=>this._onKeyDown(_))),this._toUnhook.add(this._editor.onDidChangeModelDecorations(()=>this._onModelDecorationsChanged()))):(this._toUnhook.add(this._editor.onMouseMove(_=>this._onEditorMouseMove(_))),this._toUnhook.add(this._editor.onKeyDown(_=>this._onKeyDown(_)))),this._toUnhook.add(this._editor.onMouseLeave(h)),this._toUnhook.add(this._editor.onDidChangeModel(h)),this._toUnhook.add(this._editor.onDidScrollChange(_=>this._onEditorScrollChanged(_)))}_unhookEvents(){this._toUnhook.clear()}_onModelDecorationsChanged(){var h,m;(h=this._contentWidget)===null||h===void 0||h.onModelDecorationsChanged(),(m=this._glyphWidget)===null||m===void 0||m.onModelDecorationsChanged()}_onEditorScrollChanged(h){(h.scrollTopChanged||h.scrollLeftChanged)&&this._hideWidgets()}_onEditorMouseDown(h){this._isMouseDown=!0;const m=h.target.type;if(m===9&&h.target.detail===g.ModesContentHoverWidget.ID){this._hoverClicked=!0;return}m===12&&h.target.detail===p.ModesGlyphHoverWidget.ID||(m!==12&&h.target.detail!==p.ModesGlyphHoverWidget.ID&&(this._hoverClicked=!1),this._hideWidgets())}_onEditorMouseUp(h){this._isMouseDown=!1}_onEditorMouseMove(h){var m,_,f,v,y,L;let I=h.target.type;if(!(this._isMouseDown&&this._hoverClicked)&&!(this._isHoverSticky&&I===9&&h.target.detail===g.ModesContentHoverWidget.ID)&&!(this._isHoverSticky&&!((_=(m=h.event.browserEvent.view)===null||m===void 0?void 0:m.getSelection())===null||_===void 0?void 0:_.isCollapsed))&&!(!this._isHoverSticky&&I===9&&h.target.detail===g.ModesContentHoverWidget.ID&&((f=this._contentWidget)===null||f===void 0?void 0:f.isColorPickerVisible()))&&!(this._isHoverSticky&&I===12&&h.target.detail===p.ModesGlyphHoverWidget.ID)){if(I===7){const k=this._editor.getOption(38).typicalHalfwidthCharacterWidth/2,E=h.target.detail;E&&!E.isAfterLines&&typeof E.horizontalDistanceToText=="number"&&E.horizontalDistanceToTextT.startsWith("ced-colorBox"))&&h.target.range.endColumn-h.target.range.startColumn==1?new S.Range(h.target.range.startLineNumber,h.target.range.startColumn+1,h.target.range.endLineNumber,h.target.range.endColumn+1):h.target.range;this._contentWidget||(this._contentWidget=new g.ModesContentHoverWidget(this._editor,this._hoverVisibleKey,this._instantiationService,this._themeService)),this._contentWidget.startShowingAt(E,0,!1)}}else I===2?((L=this._contentWidget)===null||L===void 0||L.hide(),this._isHoverEnabled&&h.target.position&&(this._glyphWidget||(this._glyphWidget=new p.ModesGlyphHoverWidget(this._editor,this._modeService,this._openerService)),this._glyphWidget.startShowingAt(h.target.position.lineNumber))):this._hideWidgets()}}_onKeyDown(h){h.keyCode!==5&&h.keyCode!==6&&h.keyCode!==57&&h.keyCode!==4&&this._hideWidgets()}_hideWidgets(){var h,m,_;this._isMouseDown&&this._hoverClicked&&((h=this._contentWidget)===null||h===void 0?void 0:h.isColorPickerVisible())||(this._hoverClicked=!1,(m=this._glyphWidget)===null||m===void 0||m.hide(),(_=this._contentWidget)===null||_===void 0||_.hide())}isColorPickerVisible(){var h;return((h=this._contentWidget)===null||h===void 0?void 0:h.isColorPickerVisible())||!1}showContentHover(h,m,_){this._contentWidget||(this._contentWidget=new g.ModesContentHoverWidget(this._editor,this._hoverVisibleKey,this._instantiationService,this._themeService)),this._contentWidget.startShowingAt(h,m,_)}dispose(){var h,m;this._unhookEvents(),this._toUnhook.dispose(),this._didChangeConfigurationHandler.dispose(),(h=this._glyphWidget)===null||h===void 0||h.dispose(),(m=this._contentWidget)===null||m===void 0||m.dispose()}};i.ID="editor.contrib.hover",i=Me([_e(1,r.IInstantiationService),_e(2,c.IOpenerService),_e(3,d.IModeService),_e(4,s.IThemeService),_e(5,u.IContextKeyService)],i),e.ModesHoverController=i;class n extends w.EditorAction{constructor(){super({id:"editor.action.showHover",label:b.localize(0,null),alias:"Show Hover",precondition:void 0,kbOpts:{kbExpr:C.EditorContextKeys.editorTextFocus,primary:N.KeyChord(2048|41,2048|39),weight:100}})}run(h,m){if(!!m.hasModel()){let _=i.get(m);if(!!_){const f=m.getPosition(),v=new S.Range(f.lineNumber,f.column,f.lineNumber,f.column),y=m.getOption(2)===2;_.showContentHover(v,1,y)}}}}class t extends w.EditorAction{constructor(){super({id:"editor.action.showDefinitionPreviewHover",label:b.localize(1,null),alias:"Show Definition Preview Hover",precondition:void 0})}run(h,m){let _=i.get(m);if(!!_){const f=m.getPosition();if(!!f){const v=new S.Range(f.lineNumber,f.column,f.lineNumber,f.column),L=a.GotoDefinitionAtPositionEditorContribution.get(m).startFindDefinitionFromCursor(f);L?L.then(()=>{_.showContentHover(v,1,!0)}):_.showContentHover(v,1,!0)}}}}w.registerEditorContribution(i.ID,i),w.registerEditorAction(n),w.registerEditorAction(t),s.registerThemingParticipant((l,h)=>{const m=l.getColor(o.editorHoverHighlight);m&&h.addRule(`.monaco-editor .hoverHighlight { background-color: ${m}; }`);const _=l.getColor(o.editorHoverBackground);_&&h.addRule(`.monaco-editor .monaco-hover { background-color: ${_}; }`);const f=l.getColor(o.editorHoverBorder);f&&(h.addRule(`.monaco-editor .monaco-hover { border: 1px solid ${f}; }`),h.addRule(`.monaco-editor .monaco-hover .hover-row:not(:first-child):not(:empty) { border-top: 1px solid ${f.transparent(.5)}; }`),h.addRule(`.monaco-editor .monaco-hover hr { border-top: 1px solid ${f.transparent(.5)}; }`),h.addRule(`.monaco-editor .monaco-hover hr { border-bottom: 0px solid ${f.transparent(.5)}; }`));const v=l.getColor(o.textLinkForeground);v&&h.addRule(`.monaco-editor .monaco-hover a { color: ${v}; }`);const y=l.getColor(o.editorHoverForeground);y&&h.addRule(`.monaco-editor .monaco-hover { color: ${y}; }`);const L=l.getColor(o.editorHoverStatusBarBackground);L&&h.addRule(`.monaco-editor .monaco-hover .hover-row .actions { background-color: ${L}; }`);const I=l.getColor(o.textCodeBlockBackground);I&&h.addRule(`.monaco-editor .monaco-hover code { background-color: ${I}; }`)})}),define(Q[670],J([0,1,2,13,273,3,260]),function(q,e,b,N,M,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ColorContribution=void 0;class S extends b.Disposable{constructor(d){super();this._editor=d,this._register(d.onMouseDown(g=>this.onMouseDown(g)))}dispose(){super.dispose()}onMouseDown(d){var g;if(d.target.type===6&&!![...((g=d.target.element)===null||g===void 0?void 0:g.classList.values())||[]].find(s=>s.startsWith("ced-colorBox"))&&!!d.target.range){const o=this._editor.getContribution(M.ModesHoverController.ID);if(!o.isColorPickerVisible()){const s=new w.Range(d.target.range.startLineNumber,d.target.range.startColumn+1,d.target.range.endLineNumber,d.target.range.endColumn+1);o.showContentHover(s,0,!1)}}}}e.ColorContribution=S,S.ID="editor.contrib.colorContribution",N.registerEditorContribution(S.ID,S)}),define(Q[671],J([0,1,15,2,13,18,36,253,11,46,269,247]),function(q,e,b,N,M,w,S,C,d,g,p,c){"use strict";Object.defineProperty(e,"__esModule",{value:!0});let o=class extends N.Disposable{constructor(a,u,r,i){super();this._modelService=u,this._themeService=r,this._configurationService=i,this._editor=a,this._tokenizeViewport=new b.RunOnceScheduler(()=>this._tokenizeViewportNow(),100),this._outstandingRequests=[],this._register(this._editor.onDidScrollChange(()=>{this._tokenizeViewport.schedule()})),this._register(this._editor.onDidChangeModel(()=>{this._cancelAll(),this._tokenizeViewport.schedule()})),this._register(this._editor.onDidChangeModelContent(n=>{this._cancelAll(),this._tokenizeViewport.schedule()})),this._register(w.DocumentRangeSemanticTokensProviderRegistry.onDidChange(()=>{this._cancelAll(),this._tokenizeViewport.schedule()})),this._register(this._configurationService.onDidChangeConfiguration(n=>{n.affectsConfiguration(p.SEMANTIC_HIGHLIGHTING_SETTING_ID)&&(this._cancelAll(),this._tokenizeViewport.schedule())})),this._register(this._themeService.onDidColorThemeChange(()=>{this._cancelAll(),this._tokenizeViewport.schedule()}))}_cancelAll(){for(const a of this._outstandingRequests)a.cancel();this._outstandingRequests=[]}_removeOutstandingRequest(a){for(let u=0,r=this._outstandingRequests.length;uthis._requestRange(a,n,u,r)))}}}_requestRange(a,u,r,i){const n=a.getVersionId(),t=b.createCancelablePromise(l=>Promise.resolve(r.provideDocumentRangeSemanticTokens(a,u,l)));return t.then(l=>{!l||a.isDisposed()||a.getVersionId()!==n||a.setPartialSemanticTokens(u,C.toMultilineTokens2(l,i,a.getLanguageIdentifier()))}).then(()=>this._removeOutstandingRequest(t),()=>this._removeOutstandingRequest(t)),t}};o.ID="editor.contrib.viewportSemanticTokens",o=Me([_e(1,S.IModelService),_e(2,d.IThemeService),_e(3,g.IConfigurationService)],o),M.registerEditorContribution(o.ID,o)}),define(Q[672],J([0,1,13,28,270,46,16,9,32,79]),function(q,e,b,N,M,w,S,C,d,g){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.StandaloneReferencesController=void 0;let p=class extends M.ReferencesController{constructor(o,s,a,u,r,i,n){super(!0,o,s,a,u,r,i,n)}};p=Me([_e(1,S.IContextKeyService),_e(2,N.ICodeEditorService),_e(3,d.INotificationService),_e(4,C.IInstantiationService),_e(5,g.IStorageService),_e(6,w.IConfigurationService)],p),e.StandaloneReferencesController=p,b.registerEditorContribution(M.ReferencesController.ID,p)}),define(Q[673],J([0,1,529,148,12,74,184,82,43,32,2]),function(q,e,b,N,M,w,S,C,d,g,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UndoRedoService=void 0;const c=!1;function o(_){return _.scheme===d.Schemas.file?_.fsPath:_.path}let s=0;class a{constructor(f,v,y,L,I,k,E){this.id=++s,this.type=0,this.actual=f,this.label=f.label,this.confirmBeforeUndo=f.confirmBeforeUndo||!1,this.resourceLabel=v,this.strResource=y,this.resourceLabels=[this.resourceLabel],this.strResources=[this.strResource],this.groupId=L,this.groupOrder=I,this.sourceId=k,this.sourceOrder=E,this.isValid=!0}setValid(f){this.isValid=f}toString(){return`[id:${this.id}] [group:${this.groupId}] [${this.isValid?" VALID":"INVALID"}] ${this.actual.constructor.name} - ${this.actual}`}}class u{constructor(f,v){this.resourceLabel=f,this.reason=v}}class r{constructor(){this.elements=new Map}createMessage(){const f=[],v=[];for(const[,L]of this.elements)(L.reason===0?f:v).push(L.resourceLabel);let y=[];return f.length>0&&y.push(b.localize(0,null,f.join(", "))),v.length>0&&y.push(b.localize(1,null,v.join(", "))),y.join(` +`)}get size(){return this.elements.size}has(f){return this.elements.has(f)}set(f,v){this.elements.set(f,v)}delete(f){return this.elements.delete(f)}}class i{constructor(f,v,y,L,I,k,E){this.id=++s,this.type=1,this.actual=f,this.label=f.label,this.confirmBeforeUndo=f.confirmBeforeUndo||!1,this.resourceLabels=v,this.strResources=y,this.groupId=L,this.groupOrder=I,this.sourceId=k,this.sourceOrder=E,this.removedResources=null,this.invalidatedResources=null}canSplit(){return typeof this.actual.split=="function"}removeResource(f,v,y){this.removedResources||(this.removedResources=new r),this.removedResources.has(v)||this.removedResources.set(v,new u(f,y))}setValid(f,v,y){y?this.invalidatedResources&&(this.invalidatedResources.delete(v),this.invalidatedResources.size===0&&(this.invalidatedResources=null)):(this.invalidatedResources||(this.invalidatedResources=new r),this.invalidatedResources.has(v)||this.invalidatedResources.set(v,new u(f,0)))}toString(){return`[id:${this.id}] [group:${this.groupId}] [${this.invalidatedResources?"INVALID":" VALID"}] ${this.actual.constructor.name} - ${this.actual}`}}class n{constructor(f,v){this.resourceLabel=f,this.strResource=v,this._past=[],this._future=[],this.locked=!1,this.versionId=1}dispose(){for(const f of this._past)f.type===1&&f.removeResource(this.resourceLabel,this.strResource,0);for(const f of this._future)f.type===1&&f.removeResource(this.resourceLabel,this.strResource,0);this.versionId++}toString(){let f=[];f.push(`* ${this.strResource}:`);for(let v=0;v=0;v--)f.push(` * [REDO] ${this._future[v]}`);return f.join(` +`)}flushAllElements(){this._past=[],this._future=[],this.versionId++}_setElementValidFlag(f,v){f.type===1?f.setValid(this.resourceLabel,this.strResource,v):f.setValid(v)}setElementsValidFlag(f,v){for(const y of this._past)v(y.actual)&&this._setElementValidFlag(y,f);for(const y of this._future)v(y.actual)&&this._setElementValidFlag(y,f)}pushElement(f){for(const v of this._future)v.type===1&&v.removeResource(this.resourceLabel,this.strResource,1);this._future=[],this._past.push(f),this.versionId++}createSnapshot(f){const v=[];for(let y=0,L=this._past.length;y=0;y--)v.push(this._future[y].id);return new N.ResourceEditStackSnapshot(f,v)}restoreSnapshot(f){const v=f.elements.length;let y=!0,L=0,I=-1;for(let E=0,T=this._past.length;E=v||O.id!==f.elements[L])&&(y=!1,I=0),!y&&O.type===1&&O.removeResource(this.resourceLabel,this.strResource,0)}let k=-1;for(let E=this._future.length-1;E>=0;E--,L++){const T=this._future[E];y&&(L>=v||T.id!==f.elements[L])&&(y=!1,k=E),!y&&T.type===1&&T.removeResource(this.resourceLabel,this.strResource,0)}I!==-1&&(this._past=this._past.slice(0,I)),k!==-1&&(this._future=this._future.slice(k+1)),this.versionId++}getElements(){const f=[],v=[];for(const y of this._past)f.push(y.actual);for(const y of this._future)v.push(y.actual);return{past:f,future:v}}getClosestPastElement(){return this._past.length===0?null:this._past[this._past.length-1]}getSecondClosestPastElement(){return this._past.length<2?null:this._past[this._past.length-2]}getClosestFutureElement(){return this._future.length===0?null:this._future[this._future.length-1]}hasPastElements(){return this._past.length>0}hasFutureElements(){return this._future.length>0}splitPastWorkspaceElement(f,v){for(let y=this._past.length-1;y>=0;y--)if(this._past[y]===f){v.has(this.strResource)?this._past[y]=v.get(this.strResource):this._past.splice(y,1);break}this.versionId++}splitFutureWorkspaceElement(f,v){for(let y=this._future.length-1;y>=0;y--)if(this._future[y]===f){v.has(this.strResource)?this._future[y]=v.get(this.strResource):this._future.splice(y,1);break}this.versionId++}moveBackward(f){this._past.pop(),this._future.push(f),this.versionId++}moveForward(f){this._future.pop(),this._past.push(f),this.versionId++}}class t{constructor(f){this.editStacks=f,this._versionIds=[];for(let v=0,y=this.editStacks.length;vv.sourceOrder)&&(v=k,y=L)}return[v,y]}canUndo(f){if(f instanceof N.UndoRedoSource){const[,y]=this._findClosestUndoElementWithSource(f.id);return!!y}const v=this.getUriComparisonKey(f);return this._editStacks.has(v)?this._editStacks.get(v).hasPastElements():!1}_onError(f,v){M.onUnexpectedError(f);for(const y of v.strResources)this.removeElements(y);this._notificationService.error(f)}_acquireLocks(f){for(const v of f.editStacks)if(v.locked)throw new Error("Cannot acquire edit stack lock");for(const v of f.editStacks)v.locked=!0;return()=>{for(const v of f.editStacks)v.locked=!1}}_safeInvokeWithLocks(f,v,y,L,I){const k=this._acquireLocks(y);let E;try{E=v()}catch(T){return k(),L.dispose(),this._onError(T,f)}return E?E.then(()=>(k(),L.dispose(),I()),T=>(k(),L.dispose(),this._onError(T,f))):(k(),L.dispose(),I())}_invokeWorkspacePrepare(f){return Ie(this,void 0,void 0,function*(){if(typeof f.actual.prepareUndoRedo=="undefined")return p.Disposable.None;const v=f.actual.prepareUndoRedo();return typeof v=="undefined"?p.Disposable.None:v})}_invokeResourcePrepare(f,v){if(f.actual.type!==1||typeof f.actual.prepareUndoRedo=="undefined")return v(p.Disposable.None);const y=f.actual.prepareUndoRedo();return y?p.isDisposable(y)?v(y):y.then(L=>v(L)):v(p.Disposable.None)}_getAffectedEditStacks(f){const v=[];for(const y of f.strResources)v.push(this._editStacks.get(y)||l);return new t(v)}_tryToSplitAndUndo(f,v,y,L){if(v.canSplit())return this._splitPastWorkspaceElement(v,y),this._notificationService.info(L),new m(this._undo(f,0,!0));for(const I of v.strResources)this.removeElements(I);return this._notificationService.info(L),new m}_checkWorkspaceUndo(f,v,y,L){if(v.removedResources)return this._tryToSplitAndUndo(f,v,v.removedResources,b.localize(2,null,v.label,v.removedResources.createMessage()));if(L&&v.invalidatedResources)return this._tryToSplitAndUndo(f,v,v.invalidatedResources,b.localize(3,null,v.label,v.invalidatedResources.createMessage()));const I=[];for(const E of y.editStacks)E.getClosestPastElement()!==v&&I.push(E.resourceLabel);if(I.length>0)return this._tryToSplitAndUndo(f,v,null,b.localize(4,null,v.label,I.join(", ")));const k=[];for(const E of y.editStacks)E.locked&&k.push(E.resourceLabel);return k.length>0?this._tryToSplitAndUndo(f,v,null,b.localize(5,null,v.label,k.join(", "))):y.isValid()?null:this._tryToSplitAndUndo(f,v,null,b.localize(6,null,v.label))}_workspaceUndo(f,v,y){const L=this._getAffectedEditStacks(v),I=this._checkWorkspaceUndo(f,v,L,!1);return I?I.returnValue:this._confirmAndExecuteWorkspaceUndo(f,v,L,y)}_isPartOfUndoGroup(f){if(!f.groupId)return!1;for(const[,v]of this._editStacks){const y=v.getClosestPastElement();if(!!y){if(y===f){const L=v.getSecondClosestPastElement();if(L&&L.groupId===f.groupId)return!0}if(y.groupId===f.groupId)return!0}}return!1}_confirmAndExecuteWorkspaceUndo(f,v,y,L){return Ie(this,void 0,void 0,function*(){if(v.canSplit()&&!this._isPartOfUndoGroup(v)){const E=yield this._dialogService.show(C.default.Info,b.localize(7,null,v.label),[b.localize(8,null,y.editStacks.length),b.localize(9,null),b.localize(10,null)],{cancelId:2});if(E.choice===2)return;if(E.choice===1)return this._splitPastWorkspaceElement(v,null),this._undo(f,0,!0);const T=this._checkWorkspaceUndo(f,v,y,!1);if(T)return T.returnValue;L=!0}let I;try{I=yield this._invokeWorkspacePrepare(v)}catch(E){return this._onError(E,v)}const k=this._checkWorkspaceUndo(f,v,y,!0);if(k)return I.dispose(),k.returnValue;for(const E of y.editStacks)E.moveBackward(v);return this._safeInvokeWithLocks(v,()=>v.actual.undo(),y,I,()=>this._continueUndoInGroup(v.groupId,L))})}_resourceUndo(f,v,y){if(!v.isValid){f.flushAllElements();return}if(f.locked){const L=b.localize(11,null,v.label);this._notificationService.info(L);return}return this._invokeResourcePrepare(v,L=>(f.moveBackward(v),this._safeInvokeWithLocks(v,()=>v.actual.undo(),new t([f]),L,()=>this._continueUndoInGroup(v.groupId,y))))}_findClosestUndoElementInGroup(f){if(!f)return[null,null];let v=null,y=null;for(const[L,I]of this._editStacks){const k=I.getClosestPastElement();!k||k.groupId===f&&(!v||k.groupOrder>v.groupOrder)&&(v=k,y=L)}return[v,y]}_continueUndoInGroup(f,v){if(!!f){const[,y]=this._findClosestUndoElementInGroup(f);if(y)return this._undo(y,0,v)}}undo(f){if(f instanceof N.UndoRedoSource){const[,v]=this._findClosestUndoElementWithSource(f.id);return v?this._undo(v,f.id,!1):void 0}return typeof f=="string"?this._undo(f,0,!1):this._undo(this.getUriComparisonKey(f),0,!1)}_undo(f,v=0,y){if(!!this._editStacks.has(f)){const L=this._editStacks.get(f),I=L.getClosestPastElement();if(!!I){if(I.groupId){const[E,T]=this._findClosestUndoElementInGroup(I.groupId);if(I!==E&&T)return this._undo(T,v,y)}if((I.sourceId!==v||I.confirmBeforeUndo)&&!y)return this._confirmAndContinueUndo(f,v,I);try{return I.type===1?this._workspaceUndo(f,I,y):this._resourceUndo(L,I,y)}finally{c&&this._print("undo")}}}}_confirmAndContinueUndo(f,v,y){return Ie(this,void 0,void 0,function*(){if((yield this._dialogService.show(C.default.Info,b.localize(12,null,y.label),[b.localize(13,null),b.localize(14,null)],{cancelId:1})).choice!==1)return this._undo(f,v,!0)})}_findClosestRedoElementWithSource(f){if(!f)return[null,null];let v=null,y=null;for(const[L,I]of this._editStacks){const k=I.getClosestFutureElement();!k||k.sourceId===f&&(!v||k.sourceOrder0)return this._tryToSplitAndRedo(f,v,null,b.localize(17,null,v.label,I.join(", ")));const k=[];for(const E of y.editStacks)E.locked&&k.push(E.resourceLabel);return k.length>0?this._tryToSplitAndRedo(f,v,null,b.localize(18,null,v.label,k.join(", "))):y.isValid()?null:this._tryToSplitAndRedo(f,v,null,b.localize(19,null,v.label))}_workspaceRedo(f,v){const y=this._getAffectedEditStacks(v),L=this._checkWorkspaceRedo(f,v,y,!1);return L?L.returnValue:this._executeWorkspaceRedo(f,v,y)}_executeWorkspaceRedo(f,v,y){return Ie(this,void 0,void 0,function*(){let L;try{L=yield this._invokeWorkspacePrepare(v)}catch(k){return this._onError(k,v)}const I=this._checkWorkspaceRedo(f,v,y,!0);if(I)return L.dispose(),I.returnValue;for(const k of y.editStacks)k.moveForward(v);return this._safeInvokeWithLocks(v,()=>v.actual.redo(),y,L,()=>this._continueRedoInGroup(v.groupId))})}_resourceRedo(f,v){if(!v.isValid){f.flushAllElements();return}if(f.locked){const y=b.localize(20,null,v.label);this._notificationService.info(y);return}return this._invokeResourcePrepare(v,y=>(f.moveForward(v),this._safeInvokeWithLocks(v,()=>v.actual.redo(),new t([f]),y,()=>this._continueRedoInGroup(v.groupId))))}_findClosestRedoElementInGroup(f){if(!f)return[null,null];let v=null,y=null;for(const[L,I]of this._editStacks){const k=I.getClosestFutureElement();!k||k.groupId===f&&(!v||k.groupOrderthis.findModel(U,P),U=>this.findModel(U.getOriginalEditor(),P)||this.findModel(U.getModifiedEditor(),P))),V?Promise.resolve(new C.ImmortalReference(new k(V))):Promise.reject(new Error("Model not found"))}findModel(P,V){let U=this.modelService.getModel(V);return U&&U.uri.toString()!==V.toString()?null:U}};T=Me([_e(0,i.IModelService)],T),e.SimpleEditorModelResolverService=T;class O{show(){return O.NULL_PROGRESS_RUNNER}showWhile(P,V){return Ie(this,void 0,void 0,function*(){yield P})}}e.SimpleEditorProgressService=O,O.NULL_PROGRESS_RUNNER={done:()=>{},total:()=>{},worked:()=>{}};class A{confirm(P){return this.doConfirm(P).then(V=>({confirmed:V,checkboxChecked:!1}))}doConfirm(P){let V=P.message;return P.detail&&(V=V+` + +`+P.detail),Promise.resolve(window.confirm(V))}show(P,V,U,H){return Promise.resolve({choice:0})}}e.SimpleDialogService=A;class B{info(P){return this.notify({severity:g.default.Info,message:P})}warn(P){return this.notify({severity:g.default.Warning,message:P})}error(P){return this.notify({severity:g.default.Error,message:P})}notify(P){switch(P.severity){case g.default.Error:console.error(P.message);break;case g.default.Warning:console.warn(P.message);break;default:console.log(P.message);break}return B.NO_OP}status(P,V){return C.Disposable.None}}e.SimpleNotificationService=B,B.NO_OP=new y.NoOpNotification;class F{constructor(P){this._onWillExecuteCommand=new w.Emitter,this._onDidExecuteCommand=new w.Emitter,this._instantiationService=P}executeCommand(P,...V){const U=n.CommandsRegistry.getCommand(P);if(!U)return Promise.reject(new Error(`command '${P}' not found`));try{this._onWillExecuteCommand.fire({commandId:P,args:V});const H=this._instantiationService.invokeFunction.apply(this._instantiationService,[U.handler,...V]);return this._onDidExecuteCommand.fire({commandId:P,args:V}),Promise.resolve(H)}catch(H){return Promise.reject(H)}}}e.StandaloneCommandService=F;class D extends h.AbstractKeybindingService{constructor(P,V,U,H,$,ie){super(P,V,U,H,$);this._cachedResolver=null,this._dynamicKeybindings=[],this._register(N.addDisposableListener(ie,N.EventType.KEY_DOWN,oe=>{const ae=new M.StandardKeyboardEvent(oe);this._dispatch(ae,ae.target)&&(ae.preventDefault(),ae.stopPropagation())})),this._register(N.addDisposableListener(window,N.EventType.KEY_UP,oe=>{const ae=new M.StandardKeyboardEvent(oe);this._singleModifierDispatch(ae,ae.target)&&ae.preventDefault()}))}addDynamicKeybinding(P,V,U,H){const $=S.createKeybinding(V,d.OS),ie=new C.DisposableStore;return $&&(this._dynamicKeybindings.push({keybinding:$,command:P,when:H,weight1:1e3,weight2:0,extensionId:null,isBuiltinExtension:!1}),ie.add(C.toDisposable(()=>{for(let oe=0;oethis._log(U))}return this._cachedResolver}_documentHasFocus(){return document.hasFocus()}_toNormalizedKeybindingItems(P,V){let U=[],H=0;for(const $ of P){const ie=$.when||void 0,oe=$.keybinding;if(!oe)U[H++]=new f.ResolvedKeybindingItem(void 0,$.command,$.commandArgs,ie,V,null,!1);else{const ae=this.resolveKeybinding(oe);for(const G of ae)U[H++]=new f.ResolvedKeybindingItem(G,$.command,$.commandArgs,ie,V,null,!1)}}return U}resolveKeybinding(P){return[new v.USLayoutResolvedKeybinding(P,d.OS)]}resolveKeyboardEvent(P){let V=new S.SimpleKeybinding(P.ctrlKey,P.shiftKey,P.altKey,P.metaKey,P.keyCode).toChord();return new v.USLayoutResolvedKeybinding(V,d.OS)}}e.StandaloneKeybindingService=D;function R(z){return z&&typeof z=="object"&&(!z.overrideIdentifier||typeof z.overrideIdentifier=="string")&&(!z.resource||z.resource instanceof p.URI)}class W{constructor(){this._onDidChangeConfiguration=new w.Emitter,this.onDidChangeConfiguration=this._onDidChangeConfiguration.event,this._configuration=new l.Configuration(new l.DefaultConfigurationModel,new l.ConfigurationModel)}getValue(P,V){const U=typeof P=="string"?P:void 0,H=R(P)?P:R(V)?V:{};return this._configuration.getValue(U,H,void 0)}updateValues(P){const V={data:this._configuration.toData()};let U=[];for(const H of P){const[$,ie]=H;this.getValue($)!==ie&&(this._configuration.updateValue($,ie),U.push($))}if(U.length>0){const H=new l.ConfigurationChangeEvent({keys:U,overrides:[]},V,this._configuration);H.source=7,H.sourceConfig=null,this._onDidChangeConfiguration.fire(H)}return Promise.resolve()}}e.SimpleConfigurationService=W;class x{constructor(P){this.configurationService=P,this._onDidChangeConfiguration=new w.Emitter,this.configurationService.onDidChangeConfiguration(V=>{this._onDidChangeConfiguration.fire({affectedKeys:V.affectedKeys,affectsConfiguration:(U,H)=>V.affectsConfiguration(H)})})}getValue(P,V,U){const $=(u.Position.isIPosition(V)?V:null)?typeof U=="string"?U:void 0:typeof V=="string"?V:void 0;return typeof $=="undefined"?this.configurationService.getValue():this.configurationService.getValue($)}}e.SimpleResourceConfigurationService=x;let K=class{constructor(P){this.configurationService=P}getEOL(P,V){const U=this.configurationService.getValue("files.eol",{overrideIdentifier:V,resource:P});return U&&U!=="auto"?U:d.isLinux||d.isMacintosh?` +`:`\r +`}};K=Me([_e(0,t.IConfigurationService)],K),e.SimpleResourcePropertiesService=K;class Y{publicLog(P,V){return Promise.resolve(void 0)}publicLog2(P,V){return this.publicLog(P,V)}}e.StandaloneTelemetryService=Y;class ee{constructor(){const P=p.URI.from({scheme:ee.SCHEME,authority:"model",path:"/"});this.workspace={id:"4064f6ec-cb38-4ad0-af64-ee6467e63c82",folders:[new L.WorkspaceFolder({uri:P,name:"",index:0})]}}getWorkspace(){return this.workspace}}e.SimpleWorkspaceContextService=ee,ee.SCHEME="inmemory";function se(z,P,V){if(!!P&&z instanceof W){let U=[];Object.keys(P).forEach(H=>{s.isEditorConfigurationKey(H)&&U.push([`editor.${H}`,P[H]]),V&&s.isDiffEditorConfigurationKey(H)&&U.push([`diffEditor.${H}`,P[H]])}),U.length>0&&z.updateValues(U)}}e.updateConfigurationService=se;class ne{constructor(P){this._modelService=P}hasPreviewHandler(){return!1}apply(P,V){return Ie(this,void 0,void 0,function*(){const U=new Map;for(let ie of P){if(!(ie instanceof o.ResourceTextEdit))throw new Error("bad edit - only text edits are supported");const oe=this._modelService.getModel(ie.resource);if(!oe)throw new Error("bad edit - model not found");if(typeof ie.versionId=="number"&&oe.getVersionId()!==ie.versionId)throw new Error("bad state - model changed in the meantime");let ae=U.get(oe);ae||(ae=[],U.set(oe,ae)),ae.push(a.EditOperation.replaceMove(r.Range.lift(ie.textEdit.range),ie.textEdit.text))}let H=0,$=0;for(const[ie,oe]of U)ie.pushStackElement(),ie.pushEditOperations([],oe,()=>[]),ie.pushStackElement(),$+=1,H+=oe.length;return{ariaSummary:b.format(I.SimpleServicesNLS.bulkEditServiceSummary,H,$)}})}}e.SimpleBulkEditService=ne;class le{getUriLabel(P,V){return P.scheme==="file"?P.fsPath:P.path}}e.SimpleUriLabelService=le;class X{constructor(P,V){this._codeEditorService=P,this._container=V,this.onDidLayout=w.Event.None}get dimension(){return this._dimension||(this._dimension=N.getClientArea(window.document.body)),this._dimension}get container(){return this._container}focus(){var P;(P=this._codeEditorService.getFocusedCodeEditor())===null||P===void 0||P.focus()}}e.SimpleLayoutService=X}),define(Q[674],J([0,1,47,2,28,143,266,217,75,191,114,34,26,46,16,68,9,37,32,11,65,64,84,59,36,57]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l,h,m,_,f,v){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.createTextModel=e.StandaloneDiffEditor=e.StandaloneEditor=e.StandaloneCodeEditor=void 0;let y=0,L=!1;function I(){L||(L=!0,b.setARIAContainer(document.body))}let k=class extends w.CodeEditorWidget{constructor(F,D,R,W,x,K,Y,ee,se,ne){const le=Object.assign({},D);le.ariaLabel=le.ariaLabel||h.StandaloneCodeEditorNLS.editorViewAccessibleLabel,le.ariaLabel=le.ariaLabel+";"+h.StandaloneCodeEditorNLS.accessibilityHelpMessage,super(F,le,{},R,W,x,K,ee,se,ne),Y instanceof g.StandaloneKeybindingService?this._standaloneKeybindingService=Y:this._standaloneKeybindingService=null,I()}addCommand(F,D,R){if(!this._standaloneKeybindingService)return console.warn("Cannot add command because the editor is configured with an unrecognized KeybindingService"),null;let W="DYNAMIC_"+ ++y,x=a.ContextKeyExpr.deserialize(R);return this._standaloneKeybindingService.addDynamicKeybinding(W,F,D,x),W}createContextKey(F,D){return this._contextKeyService.createKey(F,D)}addAction(F){if(typeof F.id!="string"||typeof F.label!="string"||typeof F.run!="function")throw new Error("Invalid action descriptor, `id`, `label` and `run` are required properties!");if(!this._standaloneKeybindingService)return console.warn("Cannot add keybinding because the editor is configured with an unrecognized KeybindingService"),N.Disposable.None;const D=F.id,R=F.label,W=a.ContextKeyExpr.and(a.ContextKeyExpr.equals("editorId",this.getId()),a.ContextKeyExpr.deserialize(F.precondition)),x=F.keybindings,K=a.ContextKeyExpr.and(W,a.ContextKeyExpr.deserialize(F.keybindingContext)),Y=F.contextMenuGroupId||null,ee=F.contextMenuOrder||0,se=(z,...P)=>Promise.resolve(F.run(this,...P)),ne=new N.DisposableStore,le=this.getId()+":"+D;if(ne.add(o.CommandsRegistry.registerCommand(le,se)),Y){let z={command:{id:le,title:R},when:W,group:Y,order:ee};ne.add(c.MenuRegistry.appendMenuItem(c.MenuId.EditorContext,z))}if(Array.isArray(x))for(const z of x)ne.add(this._standaloneKeybindingService.addDynamicKeybinding(le,z,se,K));let X=new C.InternalEditorAction(le,R,R,W,se,this._contextKeyService);return this._actions[D]=X,ne.add(N.toDisposable(()=>{delete this._actions[D]})),ne}};k=Me([_e(2,r.IInstantiationService),_e(3,M.ICodeEditorService),_e(4,o.ICommandService),_e(5,a.IContextKeyService),_e(6,i.IKeybindingService),_e(7,t.IThemeService),_e(8,n.INotificationService),_e(9,l.IAccessibilityService)],k),e.StandaloneCodeEditor=k;let E=class extends k{constructor(F,D,R,W,x,K,Y,ee,se,ne,le,X,z,P,V){const U=Object.assign({},D);g.updateConfigurationService(X,U,!1);const H=ne.registerEditorContainer(F);typeof U.theme=="string"&&ne.setTheme(U.theme),typeof U.autoDetectHighContrast!="undefined"&&ne.setAutoDetectHighContrast(Boolean(U.autoDetectHighContrast));let $=U.model;delete U.model,super(F,U,W,x,K,Y,ee,ne,le,z),this._contextViewService=se,this._configurationService=X,this._standaloneThemeService=ne,this._register(R),this._register(H);let ie;if(typeof $=="undefined"?(ie=O(P,V,U.value||"",U.language||"text/plain",void 0),this._ownsModel=!0):(ie=$,this._ownsModel=!1),this._attachModel(ie),ie){let oe={oldModelUrl:null,newModelUrl:ie.uri};this._onDidChangeModel.fire(oe)}}dispose(){super.dispose()}updateOptions(F){g.updateConfigurationService(this._configurationService,F,!1),typeof F.theme=="string"&&this._standaloneThemeService.setTheme(F.theme),typeof F.autoDetectHighContrast!="undefined"&&this._standaloneThemeService.setAutoDetectHighContrast(Boolean(F.autoDetectHighContrast)),super.updateOptions(F)}_attachModel(F){super._attachModel(F),this._modelData&&this._contextViewService.setContainer(this._modelData.view.domNode.domNode)}_postDetachModelCleanup(F){super._postDetachModelCleanup(F),F&&this._ownsModel&&(F.dispose(),this._ownsModel=!1)}};E=Me([_e(3,r.IInstantiationService),_e(4,M.ICodeEditorService),_e(5,o.ICommandService),_e(6,a.IContextKeyService),_e(7,i.IKeybindingService),_e(8,u.IContextViewService),_e(9,p.IStandaloneThemeService),_e(10,n.INotificationService),_e(11,s.IConfigurationService),_e(12,l.IAccessibilityService),_e(13,f.IModelService),_e(14,v.IModeService)],E),e.StandaloneEditor=E;let T=class extends S.DiffEditorWidget{constructor(F,D,R,W,x,K,Y,ee,se,ne,le,X,z,P,V){const U=Object.assign({},D);g.updateConfigurationService(X,U,!0);const H=ne.registerEditorContainer(F);typeof U.theme=="string"&&ne.setTheme(U.theme),typeof U.autoDetectHighContrast!="undefined"&&ne.setAutoDetectHighContrast(Boolean(U.autoDetectHighContrast)),super(F,U,{},V,ee,x,W,se,ne,le,z,P),this._contextViewService=Y,this._configurationService=X,this._standaloneThemeService=ne,this._register(R),this._register(H),this._contextViewService.setContainer(this._containerDomElement)}dispose(){super.dispose()}updateOptions(F){g.updateConfigurationService(this._configurationService,F,!0),typeof F.theme=="string"&&this._standaloneThemeService.setTheme(F.theme),typeof F.autoDetectHighContrast!="undefined"&&this._standaloneThemeService.setAutoDetectHighContrast(Boolean(F.autoDetectHighContrast)),super.updateOptions(F)}_createInnerEditor(F,D,R){return F.createInstance(k,D,R)}getOriginalEditor(){return super.getOriginalEditor()}getModifiedEditor(){return super.getModifiedEditor()}addCommand(F,D,R){return this.getModifiedEditor().addCommand(F,D,R)}createContextKey(F,D){return this.getModifiedEditor().createContextKey(F,D)}addAction(F){return this.getModifiedEditor().addAction(F)}};T=Me([_e(3,r.IInstantiationService),_e(4,a.IContextKeyService),_e(5,i.IKeybindingService),_e(6,u.IContextViewService),_e(7,d.IEditorWorkerService),_e(8,M.ICodeEditorService),_e(9,p.IStandaloneThemeService),_e(10,n.INotificationService),_e(11,s.IConfigurationService),_e(12,u.IContextMenuService),_e(13,_.IEditorProgressService),_e(14,m.IClipboardService)],T),e.StandaloneDiffEditor=T;function O(B,F,D,R,W){if(D=D||"",!R){const x=D.indexOf(` +`);let K=D;return x!==-1&&(K=D.substring(0,x)),A(B,D,F.createByFilepathOrFirstLine(W||null,K),W)}return A(B,D,F.create(R),W)}e.createTextModel=O;function A(B,F,D,R){return B.createModel(F,D,R)}}),define(Q[274],J([0,1,2,133,28,75,252,57,567,36,269,137,191,605,668,114,34,26,46,570,16,651,68,555,184,9,550,138,37,115,147,77,558,85,32,59,79,87,11,190,650,178,594,65,139,74,568,84,530,148,673,653,78]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l,h,m,_,f,v,y,L,I,k,E,T,O,A,B,F,D,R,W,x,K,Y,ee,se,ne,le,X,z,P,V,U,H,$){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DynamicStandaloneServices=e.StaticServices=void 0;var ie;(function(ae){const G=new L.ServiceCollection;class j{constructor(ce,me){this._serviceId=ce,this._factory=me,this._value=null}get id(){return this._serviceId}get(ce){if(!this._value){if(ce&&(this._value=ce[this._serviceId.toString()]),this._value||(this._value=this._factory(ce)),!this._value)throw new Error("Service "+this._serviceId+" is missing!");G.set(this._serviceId,this._value)}return this._value}}ae.LazyStaticService=j;let te=[];function Z(re,ce){let me=new j(re,ce);return te.push(me),me}function ue(re){let ce=new L.ServiceCollection;for(const[Ce,be]of le.getSingletonServiceDescriptors())ce.set(Ce,be);for(let Ce in re)re.hasOwnProperty(Ce)&&ce.set(v.createDecorator(Ce),re[Ce]);te.forEach(Ce=>ce.set(Ce.id,Ce.get(re)));let me=new y.InstantiationService(ce,!0);return ce.set(v.IInstantiationService,me),[ce,me]}ae.init=ue,ae.instantiationService=Z(v.IInstantiationService,()=>new y.InstantiationService(G,!0));const he=new o.SimpleConfigurationService;ae.configurationService=Z(n.IConfigurationService,()=>he),ae.resourceConfigurationService=Z(c.ITextResourceConfigurationService,()=>new o.SimpleResourceConfigurationService(he)),ae.resourcePropertiesService=Z(c.ITextResourcePropertiesService,()=>new o.SimpleResourcePropertiesService(he)),ae.contextService=Z(x.IWorkspaceContextService,()=>new o.SimpleWorkspaceContextService),ae.labelService=Z(k.ILabelService,()=>new o.SimpleUriLabelService),ae.telemetryService=Z(R.ITelemetryService,()=>new o.StandaloneTelemetryService),ae.dialogService=Z(f.IDialogService,()=>new o.SimpleDialogService),ae.notificationService=Z(B.INotificationService,()=>new o.SimpleNotificationService),ae.markerService=Z(A.IMarkerService,()=>new O.MarkerService),ae.modeService=Z(C.IModeService,re=>new d.ModeServiceImpl),ae.standaloneThemeService=Z(u.IStandaloneThemeService,()=>new a.StandaloneThemeServiceImpl),ae.logService=Z(T.ILogService,()=>new T.LogService(new T.ConsoleLogger)),ae.undoRedoService=Z(V.IUndoRedoService,re=>new U.UndoRedoService(ae.dialogService.get(re),ae.notificationService.get(re))),ae.modelService=Z(g.IModelService,re=>new p.ModelServiceImpl(ae.configurationService.get(re),ae.resourcePropertiesService.get(re),ae.standaloneThemeService.get(re),ae.logService.get(re),ae.undoRedoService.get(re))),ae.markerDecorationsService=Z(Y.IMarkerDecorationsService,re=>new ee.MarkerDecorationsService(ae.modelService.get(re),ae.markerService.get(re))),ae.contextKeyService=Z(l.IContextKeyService,re=>new t.ContextKeyService(ae.configurationService.get(re))),ae.codeEditorService=Z(M.ICodeEditorService,re=>new s.StandaloneCodeEditorServiceImpl(null,ae.contextKeyService.get(re),ae.standaloneThemeService.get(re))),ae.editorProgressService=Z(F.IEditorProgressService,()=>new o.SimpleEditorProgressService),ae.storageService=Z(D.IStorageService,()=>new D.InMemoryStorageService),ae.editorWorkerService=Z(w.IEditorWorkerService,re=>new S.EditorWorkerServiceImpl(ae.modelService.get(re),ae.resourceConfigurationService.get(re),ae.logService.get(re)))})(ie=e.StaticServices||(e.StaticServices={}));class oe extends b.Disposable{constructor(G,j){super();const[te,Z]=ie.init(j);this._serviceCollection=te,this._instantiationService=Z;const ue=this.get(n.IConfigurationService),he=this.get(B.INotificationService),re=this.get(R.ITelemetryService),ce=this.get(W.IThemeService),me=this.get(T.ILogService),Ce=this.get(l.IContextKeyService);let be=(Ae,Se)=>{let we=null;return j&&(we=j[Ae.toString()]),we||(we=Se()),this._serviceCollection.set(Ae,we),we};be(se.IAccessibilityService,()=>new X.AccessibilityService(Ce,ue)),be(E.IListService,()=>new E.ListService(ce));let Le=be(i.ICommandService,()=>new o.StandaloneCommandService(this._instantiationService)),De=be(I.IKeybindingService,()=>this._register(new o.StandaloneKeybindingService(Ce,Le,re,he,me,G))),Re=be(ne.ILayoutService,()=>new o.SimpleLayoutService(ie.codeEditorService.get(M.ICodeEditorService),G));be($.IQuickInputService,()=>new H.StandaloneQuickInputServiceImpl(Z,ie.codeEditorService.get(M.ICodeEditorService)));let Ee=be(m.IContextViewService,()=>this._register(new _.ContextViewService(Re)));be(z.IClipboardService,()=>new P.BrowserClipboardService),be(m.IContextMenuService,()=>{const Ae=new h.ContextMenuService(re,he,Ee,De,ce);return Ae.configure({blockMouse:!1}),this._register(Ae)}),be(r.IMenuService,()=>new K.MenuService(Le)),be(N.IBulkEditService,()=>new o.SimpleBulkEditService(ie.modelService.get(g.IModelService)))}get(G){let j=this._serviceCollection.get(G);if(!j)throw new Error("Missing service "+G);return j}set(G,j){this._serviceCollection.set(G,j)}has(G){return this._serviceCollection.has(G)}}e.DynamicStandaloneServices=oe}),define(Q[675],J([0,1,28,559,215,38,163,107,53,18,76,75,57,67,556,169,544,191,674,274,114,26,46,16,68,9,37,32,58,65,69,59,84,8,36,358]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l,h,m,_,f,v,y,L,I,k,E,T,O,A,B){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.createMonacoEditorAPI=e.registerCommand=e.remeasureFonts=e.setTheme=e.defineTheme=e.tokenize=e.colorizeModelLine=e.colorize=e.colorizeElement=e.createWebWorker=e.onDidChangeModelLanguage=e.onWillDisposeModel=e.onDidCreateModel=e.getModels=e.getModel=e.onDidChangeMarkers=e.getModelMarkers=e.setModelMarkers=e.setModelLanguage=e.createModel=e.createDiffNavigator=e.createDiffEditor=e.onDidCreateEditor=e.create=void 0;function F(he,re,ce){let me=new t.DynamicStandaloneServices(he,re),Ce=null;me.has(s.ITextModelService)||(Ce=new i.SimpleEditorModelResolverService(t.StaticServices.modelService.get()),me.set(s.ITextModelService,Ce)),me.has(I.IOpenerService)||me.set(I.IOpenerService,new N.OpenerService(me.get(b.ICodeEditorService),me.get(h.ICommandService)));let be=ce(me);return Ce&&Ce.setEditor(be),be}function D(he,re,ce){return F(he,ce||{},me=>new n.StandaloneEditor(he,re,me,me.get(v.IInstantiationService),me.get(b.ICodeEditorService),me.get(h.ICommandService),me.get(_.IContextKeyService),me.get(y.IKeybindingService),me.get(f.IContextViewService),me.get(l.IStandaloneThemeService),me.get(L.INotificationService),me.get(m.IConfigurationService),me.get(k.IAccessibilityService),me.get(B.IModelService),me.get(o.IModeService)))}e.create=D;function R(he){return t.StaticServices.codeEditorService.get().onCodeEditorAdd(re=>{he(re)})}e.onDidCreateEditor=R;function W(he,re,ce){return F(he,ce||{},me=>new n.StandaloneDiffEditor(he,re,me,me.get(v.IInstantiationService),me.get(_.IContextKeyService),me.get(y.IKeybindingService),me.get(f.IContextViewService),me.get(c.IEditorWorkerService),me.get(b.ICodeEditorService),me.get(l.IStandaloneThemeService),me.get(L.INotificationService),me.get(m.IConfigurationService),me.get(f.IContextMenuService),me.get(T.IEditorProgressService),me.get(O.IClipboardService)))}e.createDiffEditor=W;function x(he,re){return new M.DiffNavigator(he,re)}e.createDiffNavigator=x;function K(he,re,ce){return n.createTextModel(t.StaticServices.modelService.get(),t.StaticServices.modeService.get(),he,re,ce)}e.createModel=K;function Y(he,re){t.StaticServices.modelService.get().setMode(he,t.StaticServices.modeService.get().create(re))}e.setModelLanguage=Y;function ee(he,re,ce){he&&t.StaticServices.markerService.get().changeOne(re,he.uri,ce)}e.setModelMarkers=ee;function se(he){return t.StaticServices.markerService.get().read(he)}e.getModelMarkers=se;function ne(he){return t.StaticServices.markerService.get().onMarkerChanged(he)}e.onDidChangeMarkers=ne;function le(he){return t.StaticServices.modelService.get().getModel(he)}e.getModel=le;function X(){return t.StaticServices.modelService.get().getModels()}e.getModels=X;function z(he){return t.StaticServices.modelService.get().onModelAdded(he)}e.onDidCreateModel=z;function P(he){return t.StaticServices.modelService.get().onModelRemoved(he)}e.onWillDisposeModel=P;function V(he){return t.StaticServices.modelService.get().onModelModeChanged(re=>{he({model:re.model,oldLanguage:re.oldModeId})})}e.onDidChangeModelLanguage=V;function U(he){return a.createWebWorker(t.StaticServices.modelService.get(),he)}e.createWebWorker=U;function H(he,re){const ce=t.StaticServices.standaloneThemeService.get();return ce.registerEditorContainer(he),r.Colorizer.colorizeElement(ce,t.StaticServices.modeService.get(),he,re)}e.colorizeElement=H;function $(he,re,ce){return t.StaticServices.standaloneThemeService.get().registerEditorContainer(document.body),r.Colorizer.colorize(t.StaticServices.modeService.get(),he,re,ce)}e.colorize=$;function ie(he,re,ce=4){return t.StaticServices.standaloneThemeService.get().registerEditorContainer(document.body),r.Colorizer.colorizeModelLine(he,re,ce)}e.colorizeModelLine=ie;function oe(he){let re=g.TokenizationRegistry.get(he);return re||{getInitialState:()=>p.NULL_STATE,tokenize:(ce,me,Ce,be)=>p.nullTokenize(he,ce,Ce,be)}}function ae(he,re){t.StaticServices.modeService.get().triggerMode(re);let me=oe(re),Ce=A.splitLines(he),be=[],Le=me.getInitialState();for(let De=0,Re=Ce.length;De{H.getId()===P&&(U.dispose(),V())});return U}e.onLanguage=u;function r(P,V){let U=g.StaticServices.modeService.get().getLanguageIdentifier(P);if(!U)throw new Error(`Cannot set configuration for unknown language ${P}`);return S.LanguageConfigurationRegistry.register(U,V,100)}e.setLanguageConfiguration=r;class i{constructor(V,U){this._languageIdentifier=V,this._actual=U}getInitialState(){return this._actual.getInitialState()}tokenize(V,U,H,$){if(typeof this._actual.tokenize=="function")return n.adaptTokenize(this._languageIdentifier.language,this._actual,V,H,$);throw new Error("Not supported!")}tokenize2(V,U,H){let $=this._actual.tokenizeEncoded(V,H);return new M.TokenizationResult2($.tokens,$.endState)}}e.EncodedTokenizationSupport2Adapter=i;class n{constructor(V,U,H){this._standaloneThemeService=V,this._languageIdentifier=U,this._actual=H}getInitialState(){return this._actual.getInitialState()}static _toClassicTokens(V,U,H){let $=[],ie=0;for(let oe=0,ae=V.length;oe0&&ie[oe-1]===ue)){let he=Z.startIndex;j===0?he=0:het($)?new i(U,$):new n(g.StaticServices.standaloneThemeService.get(),U,$);return l(V)?w.TokenizationRegistry.registerPromise(P,V.then($=>H($))):w.TokenizationRegistry.register(P,H(V))}e.setTokensProvider=m;function _(P,V){const U=H=>c.createTokenizationSupport(g.StaticServices.modeService.get(),g.StaticServices.standaloneThemeService.get(),P,p.compile(P,H));return l(V)?w.TokenizationRegistry.registerPromise(P,V.then(H=>U(H))):w.TokenizationRegistry.register(P,U(V))}e.setMonarchTokensProvider=_;function f(P,V){return w.ReferenceProviderRegistry.register(P,V)}e.registerReferenceProvider=f;function v(P,V){return w.RenameProviderRegistry.register(P,V)}e.registerRenameProvider=v;function y(P,V){return w.SignatureHelpProviderRegistry.register(P,V)}e.registerSignatureHelpProvider=y;function L(P,V){return w.HoverProviderRegistry.register(P,{provideHover:(U,H,$)=>{let ie=U.getWordAtPosition(H);return Promise.resolve(V.provideHover(U,H,$)).then(oe=>{if(!!oe)return!oe.range&&ie&&(oe.range=new N.Range(H.lineNumber,ie.startColumn,H.lineNumber,ie.endColumn)),oe.range||(oe.range=new N.Range(H.lineNumber,H.column,H.lineNumber,H.column)),oe})}})}e.registerHoverProvider=L;function I(P,V){return w.DocumentSymbolProviderRegistry.register(P,V)}e.registerDocumentSymbolProvider=I;function k(P,V){return w.DocumentHighlightProviderRegistry.register(P,V)}e.registerDocumentHighlightProvider=k;function E(P,V){return w.LinkedEditingRangeProviderRegistry.register(P,V)}e.registerLinkedEditingRangeProvider=E;function T(P,V){return w.DefinitionProviderRegistry.register(P,V)}e.registerDefinitionProvider=T;function O(P,V){return w.ImplementationProviderRegistry.register(P,V)}e.registerImplementationProvider=O;function A(P,V){return w.TypeDefinitionProviderRegistry.register(P,V)}e.registerTypeDefinitionProvider=A;function B(P,V){return w.CodeLensProviderRegistry.register(P,V)}e.registerCodeLensProvider=B;function F(P,V){return w.CodeActionProviderRegistry.register(P,{provideCodeActions:(U,H,$,ie)=>{let oe=g.StaticServices.markerService.get().read({resource:U.uri}).filter(ae=>N.Range.areIntersectingOrTouching(ae,H));return V.provideCodeActions(U,H,{markers:oe,only:$.only},ie)}})}e.registerCodeActionProvider=F;function D(P,V){return w.DocumentFormattingEditProviderRegistry.register(P,V)}e.registerDocumentFormattingEditProvider=D;function R(P,V){return w.DocumentRangeFormattingEditProviderRegistry.register(P,V)}e.registerDocumentRangeFormattingEditProvider=R;function W(P,V){return w.OnTypeFormattingEditProviderRegistry.register(P,V)}e.registerOnTypeFormattingEditProvider=W;function x(P,V){return w.LinkProviderRegistry.register(P,V)}e.registerLinkProvider=x;function K(P,V){return w.CompletionProviderRegistry.register(P,V)}e.registerCompletionItemProvider=K;function Y(P,V){return w.ColorProviderRegistry.register(P,V)}e.registerColorProvider=Y;function ee(P,V){return w.FoldingRangeProviderRegistry.register(P,V)}e.registerFoldingRangeProvider=ee;function se(P,V){return w.DeclarationProviderRegistry.register(P,V)}e.registerDeclarationProvider=se;function ne(P,V){return w.SelectionRangeRegistry.register(P,V)}e.registerSelectionRangeProvider=ne;function le(P,V){return w.DocumentSemanticTokensProviderRegistry.register(P,V)}e.registerDocumentSemanticTokensProvider=le;function X(P,V){return w.DocumentRangeSemanticTokensProviderRegistry.register(P,V)}e.registerDocumentRangeSemanticTokensProvider=X;function z(){return{register:o,getLanguages:s,onLanguage:u,getEncodedLanguageId:a,setLanguageConfiguration:r,setColorMap:h,setTokensProvider:m,setMonarchTokensProvider:_,registerReferenceProvider:f,registerRenameProvider:v,registerCompletionItemProvider:K,registerSignatureHelpProvider:y,registerHoverProvider:L,registerDocumentSymbolProvider:I,registerDocumentHighlightProvider:k,registerLinkedEditingRangeProvider:E,registerDefinitionProvider:T,registerImplementationProvider:O,registerTypeDefinitionProvider:A,registerCodeLensProvider:B,registerCodeActionProvider:F,registerDocumentFormattingEditProvider:D,registerDocumentRangeFormattingEditProvider:R,registerOnTypeFormattingEditProvider:W,registerLinkProvider:x,registerColorProvider:Y,registerFoldingRangeProvider:ee,registerDeclarationProvider:se,registerSelectionRangeProvider:ne,registerDocumentSemanticTokensProvider:le,registerDocumentRangeSemanticTokensProvider:X,DocumentHighlightKind:d.DocumentHighlightKind,CompletionItemKind:d.CompletionItemKind,CompletionItemTag:d.CompletionItemTag,CompletionItemInsertTextRule:d.CompletionItemInsertTextRule,SymbolKind:d.SymbolKind,SymbolTag:d.SymbolTag,IndentAction:d.IndentAction,CompletionTriggerKind:d.CompletionTriggerKind,SignatureHelpTriggerKind:d.SignatureHelpTriggerKind,InlineHintKind:d.InlineHintKind,FoldingRangeKind:w.FoldingRangeKind}}e.createMonacoLanguagesAPI=z}),define(Q[677],J([0,1,38,220,675,676,17,261]),function(q,e,b,N,M,w,S,C){"use strict";var d;Object.defineProperty(e,"__esModule",{value:!0}),e.languages=e.editor=e.Token=e.Uri=e.MarkerTag=e.MarkerSeverity=e.SelectionDirection=e.Selection=e.Range=e.Position=e.KeyMod=e.KeyCode=e.Emitter=e.CancellationTokenSource=void 0,b.EditorOptions.wrappingIndent.defaultValue=0,b.EditorOptions.glyphMargin.defaultValue=!1,b.EditorOptions.autoIndent.defaultValue=3,b.EditorOptions.overviewRulerLanes.defaultValue=2,C.FormattingConflicts.setFormatterSelector((p,c,o)=>Promise.resolve(p[0]));const g=N.createMonacoBaseAPI();g.editor=M.createMonacoEditorAPI(),g.languages=w.createMonacoLanguagesAPI(),e.CancellationTokenSource=g.CancellationTokenSource,e.Emitter=g.Emitter,e.KeyCode=g.KeyCode,e.KeyMod=g.KeyMod,e.Position=g.Position,e.Range=g.Range,e.Selection=g.Selection,e.SelectionDirection=g.SelectionDirection,e.MarkerSeverity=g.MarkerSeverity,e.MarkerTag=g.MarkerTag,e.Uri=g.Uri,e.Token=g.Token,e.editor=g.editor,e.languages=g.languages,(((d=S.globals.MonacoEnvironment)===null||d===void 0?void 0:d.globalAPI)||typeof define=="function"&&define.amd)&&(self.monaco=g),typeof self.require!="undefined"&&typeof self.require.config=="function"&&self.require.config({ignoreDuplicateModules:["vscode-languageserver-types","vscode-languageserver-types/main","vscode-languageserver-textdocument","vscode-languageserver-textdocument/main","vscode-nls","vscode-nls/vscode-nls","jsonc-parser","jsonc-parser/main","vscode-uri","vscode-uri/index","vs/basic-languages/typescript/typescript"]})}),define(Q[678],J([0,1,24]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.toWorkspaceIdentifier=e.isSingleFolderWorkspaceIdentifier=e.WORKSPACE_EXTENSION=void 0,e.WORKSPACE_EXTENSION="code-workspace";function N(w){const S=w;return typeof(S==null?void 0:S.id)=="string"&&b.URI.isUri(S.uri)}e.isSingleFolderWorkspaceIdentifier=N;function M(w){if(w.configuration)return{id:w.id,configPath:w.configuration};if(w.folders.length===1)return{id:w.id,uri:w.folders[0].uri}}e.toWorkspaceIdentifier=M}),define(Q[679],J([0,1,506,72,44,131,41,8,678,159,292]),function(q,e,b,N,M,w,S,C,d,g,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.RandomBasedVariableResolver=e.WorkspaceBasedVariableResolver=e.TimeBasedVariableResolver=e.CommentBasedVariableResolver=e.ClipboardBasedVariableResolver=e.ModelBasedVariableResolver=e.SelectionBasedVariableResolver=e.CompositeSnippetVariableResolver=void 0;class c{constructor(l){this._delegates=l}resolve(l){for(const h of this._delegates){let m=h.resolve(l);if(m!==void 0)return m}}}e.CompositeSnippetVariableResolver=c;class o{constructor(l,h,m,_){this._model=l,this._selection=h,this._selectionIdx=m,this._overtypingCapturer=_}resolve(l){const{name:h}=l;if(h==="SELECTION"||h==="TM_SELECTED_TEXT"){let m=this._model.getValueInRange(this._selection)||void 0,_=this._selection.startLineNumber!==this._selection.endLineNumber;if(!m&&this._overtypingCapturer){const f=this._overtypingCapturer.getLastOvertypedInfo(this._selectionIdx);f&&(m=f.value,_=f.multiline)}if(m&&_&&l.snippet){const f=this._model.getLineContent(this._selection.startLineNumber),v=C.getLeadingWhitespace(f,0,this._selection.startColumn-1);let y=v;l.snippet.walk(I=>I===l?!1:(I instanceof w.Text&&(y=C.getLeadingWhitespace(C.splitLines(I.value).pop())),!0));const L=C.commonPrefixLength(y,v);m=m.replace(/(\r\n|\r|\n)(.*)/g,(I,k,E)=>`${k}${y.substr(L)}${E}`)}return m}else{if(h==="TM_CURRENT_LINE")return this._model.getLineContent(this._selection.positionLineNumber);if(h==="TM_CURRENT_WORD"){const m=this._model.getWordAtPosition({lineNumber:this._selection.positionLineNumber,column:this._selection.positionColumn});return m&&m.word||void 0}else{if(h==="TM_LINE_INDEX")return String(this._selection.positionLineNumber-1);if(h==="TM_LINE_NUMBER")return String(this._selection.positionLineNumber)}}}}e.SelectionBasedVariableResolver=o;class s{constructor(l,h){this._labelService=l,this._model=h}resolve(l){const{name:h}=l;if(h==="TM_FILENAME")return N.basename(this._model.uri.fsPath);if(h==="TM_FILENAME_BASE"){const m=N.basename(this._model.uri.fsPath),_=m.lastIndexOf(".");return _<=0?m:m.slice(0,_)}else{if(h==="TM_DIRECTORY"&&this._labelService)return N.dirname(this._model.uri.fsPath)==="."?"":this._labelService.getUriLabel(M.dirname(this._model.uri));if(h==="TM_FILEPATH"&&this._labelService)return this._labelService.getUriLabel(this._model.uri);if(h==="RELATIVE_FILEPATH"&&this._labelService)return this._labelService.getUriLabel(this._model.uri,{relative:!0,noPrefix:!0})}}}e.ModelBasedVariableResolver=s;class a{constructor(l,h,m,_){this._readClipboardText=l,this._selectionIdx=h,this._selectionCount=m,this._spread=_}resolve(l){if(l.name==="CLIPBOARD"){const h=this._readClipboardText();if(!!h){if(this._spread){const m=h.split(/\r\n|\n|\r/).filter(_=>!C.isFalsyOrWhitespace(_));if(m.length===this._selectionCount)return m[this._selectionIdx]}return h}}}}e.ClipboardBasedVariableResolver=a;class u{constructor(l,h){this._model=l,this._selection=h}resolve(l){const{name:h}=l,m=this._model.getLanguageIdAtPosition(this._selection.selectionStartLineNumber,this._selection.selectionStartColumn),_=S.LanguageConfigurationRegistry.getComments(m);if(!!_){if(h==="LINE_COMMENT")return _.lineCommentToken||void 0;if(h==="BLOCK_COMMENT_START")return _.blockCommentStartToken||void 0;if(h==="BLOCK_COMMENT_END")return _.blockCommentEndToken||void 0}}}e.CommentBasedVariableResolver=u;class r{resolve(l){const{name:h}=l;if(h==="CURRENT_YEAR")return String(new Date().getFullYear());if(h==="CURRENT_YEAR_SHORT")return String(new Date().getFullYear()).slice(-2);if(h==="CURRENT_MONTH")return String(new Date().getMonth().valueOf()+1).padStart(2,"0");if(h==="CURRENT_DATE")return String(new Date().getDate().valueOf()).padStart(2,"0");if(h==="CURRENT_HOUR")return String(new Date().getHours().valueOf()).padStart(2,"0");if(h==="CURRENT_MINUTE")return String(new Date().getMinutes().valueOf()).padStart(2,"0");if(h==="CURRENT_SECOND")return String(new Date().getSeconds().valueOf()).padStart(2,"0");if(h==="CURRENT_DAY_NAME")return r.dayNames[new Date().getDay()];if(h==="CURRENT_DAY_NAME_SHORT")return r.dayNamesShort[new Date().getDay()];if(h==="CURRENT_MONTH_NAME")return r.monthNames[new Date().getMonth()];if(h==="CURRENT_MONTH_NAME_SHORT")return r.monthNamesShort[new Date().getMonth()];if(h==="CURRENT_SECONDS_UNIX")return String(Math.floor(Date.now()/1e3))}}e.TimeBasedVariableResolver=r,r.dayNames=[b.localize(0,null),b.localize(1,null),b.localize(2,null),b.localize(3,null),b.localize(4,null),b.localize(5,null),b.localize(6,null)],r.dayNamesShort=[b.localize(7,null),b.localize(8,null),b.localize(9,null),b.localize(10,null),b.localize(11,null),b.localize(12,null),b.localize(13,null)],r.monthNames=[b.localize(14,null),b.localize(15,null),b.localize(16,null),b.localize(17,null),b.localize(18,null),b.localize(19,null),b.localize(20,null),b.localize(21,null),b.localize(22,null),b.localize(23,null),b.localize(24,null),b.localize(25,null)],r.monthNamesShort=[b.localize(26,null),b.localize(27,null),b.localize(28,null),b.localize(29,null),b.localize(30,null),b.localize(31,null),b.localize(32,null),b.localize(33,null),b.localize(34,null),b.localize(35,null),b.localize(36,null),b.localize(37,null)];class i{constructor(l){this._workspaceService=l}resolve(l){if(!!this._workspaceService){const h=d.toWorkspaceIdentifier(this._workspaceService.getWorkspace());if(!!h){if(l.name==="WORKSPACE_NAME")return this._resolveWorkspaceName(h);if(l.name==="WORKSPACE_FOLDER")return this._resoveWorkspacePath(h)}}}_resolveWorkspaceName(l){if(d.isSingleFolderWorkspaceIdentifier(l))return N.basename(l.uri.path);let h=N.basename(l.configPath.path);return h.endsWith(d.WORKSPACE_EXTENSION)&&(h=h.substr(0,h.length-d.WORKSPACE_EXTENSION.length-1)),h}_resoveWorkspacePath(l){if(d.isSingleFolderWorkspaceIdentifier(l))return g.normalizeDriveLetter(l.uri.fsPath);let h=N.basename(l.configPath.path),m=l.configPath.fsPath;return m.endsWith(h)&&(m=m.substr(0,m.length-h.length-1)),m?g.normalizeDriveLetter(m):"/"}}e.WorkspaceBasedVariableResolver=i;class n{resolve(l){const{name:h}=l;if(h==="RANDOM")return Math.random().toString().slice(-6);if(h==="RANDOM_HEX")return Math.random().toString(16).slice(-6);if(h==="UUID")return p.generateUuid()}}e.RandomBasedVariableResolver=n}),define(Q[680],J([0,1,19,2,8,62,3,21,31,190,9,131,679,11,22,115,351]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SnippetSession=e.OneSnippet=void 0,s.registerThemingParticipant((t,l)=>{function h(m){const _=t.getColor(m);return _?_.toString():"transparent"}l.addRule(`.monaco-editor .snippet-placeholder { background-color: ${h(a.snippetTabstopHighlightBackground)}; outline-color: ${h(a.snippetTabstopHighlightBorder)}; }`),l.addRule(`.monaco-editor .finish-snippet-placeholder { background-color: ${h(a.snippetFinalTabstopHighlightBackground)}; outline-color: ${h(a.snippetFinalTabstopHighlightBorder)}; }`)});class r{constructor(l,h,m,_){this._editor=l,this._snippet=h,this._offset=m,this._snippetLineLeadingWhitespace=_,this._nestingLevel=1,this._placeholderGroups=b.groupBy(h.placeholders,c.Placeholder.compareByIndex),this._placeholderGroupsIdx=-1}dispose(){this._placeholderDecorations&&this._editor.deltaDecorations([...this._placeholderDecorations.values()],[]),this._placeholderGroups.length=0}_initDecorations(){if(!this._placeholderDecorations){this._placeholderDecorations=new Map;const l=this._editor.getModel();this._editor.changeDecorations(h=>{for(const m of this._snippet.placeholders){const _=this._snippet.offset(m),f=this._snippet.fullLen(m),v=S.Range.fromPositions(l.getPositionAt(this._offset+_),l.getPositionAt(this._offset+_+f)),y=m.isFinalTabstop?r._decor.inactiveFinal:r._decor.inactive,L=h.addDecoration(v,y);this._placeholderDecorations.set(m,L)}})}}move(l){if(!this._editor.hasModel())return[];if(this._initDecorations(),this._placeholderGroupsIdx>=0){let _=[];for(const f of this._placeholderGroups[this._placeholderGroupsIdx])if(f.transform){const v=this._placeholderDecorations.get(f),y=this._editor.getModel().getDecorationRange(v),L=this._editor.getModel().getValueInRange(y),I=f.transform.resolve(L).split(/\r\n|\r|\n/);for(let k=1;k0&&this._editor.executeEdits("snippet.placeholderTransform",_)}let h=!1;l===!0&&this._placeholderGroupsIdx0&&(this._placeholderGroupsIdx-=1,h=!0);const m=this._editor.getModel().changeDecorations(_=>{const f=new Set,v=[];for(const y of this._placeholderGroups[this._placeholderGroupsIdx]){const L=this._placeholderDecorations.get(y),I=this._editor.getModel().getDecorationRange(L);v.push(new C.Selection(I.startLineNumber,I.startColumn,I.endLineNumber,I.endColumn)),h=h&&this._hasPlaceholderBeenCollapsed(y),_.changeDecorationOptions(L,y.isFinalTabstop?r._decor.activeFinal:r._decor.active),f.add(y);for(const k of this._snippet.enclosingPlaceholders(y)){const E=this._placeholderDecorations.get(k);_.changeDecorationOptions(E,k.isFinalTabstop?r._decor.activeFinal:r._decor.active),f.add(k)}}for(const[y,L]of this._placeholderDecorations)f.has(y)||_.changeDecorationOptions(L,y.isFinalTabstop?r._decor.inactiveFinal:r._decor.inactive);return v});return h?this.move(l):m!=null?m:[]}_hasPlaceholderBeenCollapsed(l){let h=l;for(;h;){if(h instanceof c.Placeholder){const m=this._placeholderDecorations.get(h);if(this._editor.getModel().getDecorationRange(m).isEmpty()&&h.toString().length>0)return!0}h=h.parent}return!1}get isAtFirstPlaceholder(){return this._placeholderGroupsIdx<=0||this._placeholderGroups.length===0}get isAtLastPlaceholder(){return this._placeholderGroupsIdx===this._placeholderGroups.length-1}get hasPlaceholder(){return this._snippet.placeholders.length>0}computePossibleSelections(){const l=new Map;for(const h of this._placeholderGroups){let m;for(const _ of h){if(_.isFinalTabstop)break;m||(m=[],l.set(_.index,m));const f=this._placeholderDecorations.get(_),v=this._editor.getModel().getDecorationRange(f);if(!v){l.delete(_.index);break}m.push(v)}}return l}get choice(){return this._placeholderGroups[this._placeholderGroupsIdx][0].choice}merge(l){const h=this._editor.getModel();this._nestingLevel*=10,this._editor.changeDecorations(m=>{for(const _ of this._placeholderGroups[this._placeholderGroupsIdx]){const f=l.shift();console.assert(!f._placeholderDecorations);const v=f._snippet.placeholderInfo.last.index;for(const L of f._snippet.placeholderInfo.all)L.isFinalTabstop?L.index=_.index+(v+1)/this._nestingLevel:L.index=_.index+L.index/this._nestingLevel;this._snippet.replace(_,f._snippet.children);const y=this._placeholderDecorations.get(_);m.removeDecoration(y),this._placeholderDecorations.delete(_);for(const L of f._snippet.placeholders){const I=f._snippet.offset(L),k=f._snippet.fullLen(L),E=S.Range.fromPositions(h.getPositionAt(f._offset+I),h.getPositionAt(f._offset+I+k)),T=m.addDecoration(E,r._decor.inactive);this._placeholderDecorations.set(L,T)}}this._placeholderGroups=b.groupBy(this._snippet.placeholders,c.Placeholder.compareByIndex)})}}e.OneSnippet=r,r._decor={active:d.ModelDecorationOptions.register({stickiness:0,className:"snippet-placeholder"}),inactive:d.ModelDecorationOptions.register({stickiness:1,className:"snippet-placeholder"}),activeFinal:d.ModelDecorationOptions.register({stickiness:1,className:"finish-snippet-placeholder"}),inactiveFinal:d.ModelDecorationOptions.register({stickiness:1,className:"finish-snippet-placeholder"})};const i={overwriteBefore:0,overwriteAfter:0,adjustWhitespace:!0,clipboardText:void 0,overtypingCapturer:void 0};class n{constructor(l,h,m=i){this._templateMerges=[],this._snippets=[],this._editor=l,this._template=h,this._options=m}static adjustWhitespace(l,h,m,_,f){const v=l.getLineContent(h.lineNumber),y=M.getLeadingWhitespace(v,0,h.column-1);let L;return m.walk(I=>{if(!(I instanceof c.Text)||I.parent instanceof c.Choice)return!0;const k=I.value.split(/\r\n|\r|\n/);if(_){const T=m.offset(I);if(T===0)k[0]=l.normalizeIndentation(k[0]);else{L=L!=null?L:m.toString();let O=L.charCodeAt(T-1);(O===10||O===13)&&(k[0]=l.normalizeIndentation(y+k[0]))}for(let O=1;Ox.get(g.IWorkspaceContextService,p.optional)),O=l.invokeWithinContext(x=>new o.ModelBasedVariableResolver(x.get(u.ILabelService,p.optional),E)),A=()=>y;let B=0,F=E.getValueInRange(n.adjustSelection(E,l.getSelection(),m,0)),D=E.getValueInRange(n.adjustSelection(E,l.getSelection(),0,_)),R=E.getLineFirstNonWhitespaceColumn(l.getSelection().positionLineNumber);const W=l.getSelections().map((x,K)=>({selection:x,idx:K})).sort((x,K)=>S.Range.compareRangesUsingStarts(x.selection,K.selection));for(const{selection:x,idx:K}of W){let Y=n.adjustSelection(E,x,m,0),ee=n.adjustSelection(E,x,0,_);F!==E.getValueInRange(Y)&&(Y=x),D!==E.getValueInRange(ee)&&(ee=x);const se=x.setStartPosition(Y.startLineNumber,Y.startColumn).setEndPosition(ee.endLineNumber,ee.endColumn),ne=new c.SnippetParser().parse(h,!0,f),le=se.getStartPosition(),X=n.adjustWhitespace(E,le,ne,v||K>0&&R!==E.getLineFirstNonWhitespaceColumn(x.positionLineNumber),!0);ne.resolveVariables(new o.CompositeSnippetVariableResolver([O,new o.ClipboardBasedVariableResolver(A,K,W.length,l.getOption(65)==="spread"),new o.SelectionBasedVariableResolver(E,x,K,L),new o.CommentBasedVariableResolver(E,x),new o.TimeBasedVariableResolver,new o.WorkspaceBasedVariableResolver(T),new o.RandomBasedVariableResolver]));const z=E.getOffsetAt(le)+B;B+=ne.toString().length-E.getValueLengthInRange(se),I[K]=w.EditOperation.replace(se,ne.toString()),I[K].identifier={major:K,minor:0},k[K]=new r(l,ne,z,X)}return{edits:I,snippets:k}}dispose(){N.dispose(this._snippets)}_logInfo(){return`template="${this._template}", merged_templates="${this._templateMerges.join(" -> ")}"`}insert(){if(!!this._editor.hasModel()){const{edits:l,snippets:h}=n.createEditsAndSnippets(this._editor,this._template,this._options.overwriteBefore,this._options.overwriteAfter,!1,this._options.adjustWhitespace,this._options.clipboardText,this._options.overtypingCapturer);this._snippets=h,this._editor.executeEdits("snippet",l,m=>this._snippets[0].hasPlaceholder?this._move(!0):m.filter(_=>!!_.identifier).map(_=>C.Selection.fromPositions(_.range.getEndPosition()))),this._editor.revealRange(this._editor.getSelections()[0])}}merge(l,h=i){if(!!this._editor.hasModel()){this._templateMerges.push([this._snippets[0]._nestingLevel,this._snippets[0]._placeholderGroupsIdx,l]);const{edits:m,snippets:_}=n.createEditsAndSnippets(this._editor,l,h.overwriteBefore,h.overwriteAfter,!0,h.adjustWhitespace,h.clipboardText,h.overtypingCapturer);this._editor.executeEdits("snippet",m,f=>{for(const v of this._snippets)v.merge(_);return console.assert(_.length===0),this._snippets[0].hasPlaceholder?this._move(void 0):f.filter(v=>!!v.identifier).map(v=>C.Selection.fromPositions(v.range.getEndPosition()))})}}next(){const l=this._move(!0);this._editor.setSelections(l),this._editor.revealPositionInCenterIfOutsideViewport(l[0].getPosition())}prev(){const l=this._move(!1);this._editor.setSelections(l),this._editor.revealPositionInCenterIfOutsideViewport(l[0].getPosition())}_move(l){const h=[];for(const m of this._snippets){const _=m.move(l);h.push(..._)}return h}get isAtFirstPlaceholder(){return this._snippets[0].isAtFirstPlaceholder}get isAtLastPlaceholder(){return this._snippets[0].isAtLastPlaceholder}get hasPlaceholder(){return this._snippets[0].hasPlaceholder}get choice(){return this._snippets[0].choice}isSelectionWithinPlaceholders(){if(!this.hasPlaceholder)return!1;const l=this._editor.getSelections();if(l.length{f.push(..._.get(v))})}l.sort(S.Range.compareRangesUsingStarts);for(let[m,_]of h){if(_.length!==l.length){h.delete(m);continue}_.sort(S.Range.compareRangesUsingStarts);for(let f=0;f<_.length;f++)if(!_[f].containsRange(l[f])){h.delete(m);continue}}return h.size>0}}e.SnippetSession=n}),define(Q[192],J([0,1,2,13,3,21,25,117,16,77,680]),function(q,e,b,N,M,w,S,C,d,g,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SnippetController2=void 0;const c={overwriteBefore:0,overwriteAfter:0,undoStopBefore:!0,undoStopAfter:!0,adjustWhitespace:!0,clipboardText:void 0,overtypingCapturer:void 0};let o=class ot{constructor(u,r,i){this._editor=u,this._logService=r,this._snippetListener=new b.DisposableStore,this._modelVersionId=-1,this._inSnippet=ot.InSnippetMode.bindTo(i),this._hasNextTabstop=ot.HasNextTabstop.bindTo(i),this._hasPrevTabstop=ot.HasPrevTabstop.bindTo(i)}static get(u){return u.getContribution(ot.ID)}dispose(){var u;this._inSnippet.reset(),this._hasPrevTabstop.reset(),this._hasNextTabstop.reset(),(u=this._session)===null||u===void 0||u.dispose(),this._snippetListener.dispose()}insert(u,r){try{this._doInsert(u,typeof r=="undefined"?c:Object.assign(Object.assign({},c),r))}catch(i){this.cancel(),this._logService.error(i),this._logService.error("snippet_error"),this._logService.error("insert_template=",u),this._logService.error("existing_template=",this._session?this._session._logInfo():"")}}_doInsert(u,r){!this._editor.hasModel()||(this._snippetListener.clear(),r.undoStopBefore&&this._editor.getModel().pushStackElement(),this._session?this._session.merge(u,r):(this._modelVersionId=this._editor.getModel().getAlternativeVersionId(),this._session=new p.SnippetSession(this._editor,u,r),this._session.insert()),r.undoStopAfter&&this._editor.getModel().pushStackElement(),this._updateState(),this._snippetListener.add(this._editor.onDidChangeModelContent(i=>i.isFlush&&this.cancel())),this._snippetListener.add(this._editor.onDidChangeModel(()=>this.cancel())),this._snippetListener.add(this._editor.onDidChangeCursorSelection(()=>this._updateState())))}_updateState(){if(!(!this._session||!this._editor.hasModel())){if(this._modelVersionId===this._editor.getModel().getAlternativeVersionId())return this.cancel();if(!this._session.hasPlaceholder)return this.cancel();if(this._session.isAtLastPlaceholder||!this._session.isSelectionWithinPlaceholders())return this.cancel();this._inSnippet.set(!0),this._hasPrevTabstop.set(!this._session.isAtFirstPlaceholder),this._hasNextTabstop.set(!this._session.isAtLastPlaceholder),this._handleChoice()}}_handleChoice(){if(!this._session||!this._editor.hasModel()){this._currentChoice=void 0;return}const{choice:u}=this._session;if(!u){this._currentChoice=void 0;return}if(this._currentChoice!==u){this._currentChoice=u,this._editor.setSelections(this._editor.getSelections().map(i=>w.Selection.fromPositions(i.getStartPosition())));const[r]=u.options;C.showSimpleSuggestions(this._editor,u.options.map((i,n)=>({kind:13,label:i.value,insertText:i.value,sortText:"a".repeat(n+1),range:M.Range.fromPositions(this._editor.getPosition(),this._editor.getPosition().delta(0,r.value.length))})))}}finish(){for(;this._inSnippet.get();)this.next()}cancel(u=!1){var r;this._inSnippet.reset(),this._hasPrevTabstop.reset(),this._hasNextTabstop.reset(),this._snippetListener.clear(),(r=this._session)===null||r===void 0||r.dispose(),this._session=void 0,this._modelVersionId=-1,u&&this._editor.setSelections([this._editor.getSelection()])}prev(){this._session&&this._session.prev(),this._updateState()}next(){this._session&&this._session.next(),this._updateState()}isInSnippet(){return Boolean(this._inSnippet.get())}};o.ID="snippetController2",o.InSnippetMode=new d.RawContextKey("inSnippetMode",!1),o.HasNextTabstop=new d.RawContextKey("hasNextTabstop",!1),o.HasPrevTabstop=new d.RawContextKey("hasPrevTabstop",!1),o=Me([_e(1,g.ILogService),_e(2,d.IContextKeyService)],o),e.SnippetController2=o,N.registerEditorContribution(o.ID,o);const s=N.EditorCommand.bindToContribution(o.get);N.registerEditorCommand(new s({id:"jumpToNextSnippetPlaceholder",precondition:d.ContextKeyExpr.and(o.InSnippetMode,o.HasNextTabstop),handler:a=>a.next(),kbOpts:{weight:100+30,kbExpr:S.EditorContextKeys.editorTextFocus,primary:2}})),N.registerEditorCommand(new s({id:"jumpToPrevSnippetPlaceholder",precondition:d.ContextKeyExpr.and(o.InSnippetMode,o.HasPrevTabstop),handler:a=>a.prev(),kbOpts:{weight:100+30,kbExpr:S.EditorContextKeys.editorTextFocus,primary:1024|2}})),N.registerEditorCommand(new s({id:"leaveSnippet",precondition:o.InSnippetMode,handler:a=>a.cancel(!0),kbOpts:{weight:100+30,kbExpr:S.EditorContextKeys.editorTextFocus,primary:9,secondary:[1024|9]}})),N.registerEditorCommand(new s({id:"acceptSnippet",precondition:o.InSnippetMode,handler:a=>a.finish()}))}),define(Q[681],J([0,1,15,12,6,2,21,18,413,117,192,23,75,416,8,84,87,77]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SuggestModel=e.LineContext=void 0;class n{constructor(h,m,_,f){this.leadingLineContent=h.getLineContent(m.lineNumber).substr(0,m.column-1),this.leadingWord=h.getWordUntilPosition(m),this.lineNumber=m.lineNumber,this.column=m.column,this.auto=_,this.shy=f}static shouldAutoTrigger(h){if(!h.hasModel())return!1;const m=h.getModel(),_=h.getPosition();m.tokenizeIfCheap(_.lineNumber);const f=m.getWordAtPosition(_);return!(!f||f.endColumn!==_.column||!isNaN(Number(f.word)))}}e.LineContext=n;let t=class ti{constructor(h,m,_,f,v){this._editor=h,this._editorWorkerService=m,this._clipboardService=_,this._telemetryService=f,this._logService=v,this._toDispose=new w.DisposableStore,this._quickSuggestDelay=10,this._triggerCharacterListener=new w.DisposableStore,this._triggerQuickSuggest=new b.TimeoutTimer,this._state=0,this._completionDisposables=new w.DisposableStore,this._onDidCancel=new M.Emitter,this._onDidTrigger=new M.Emitter,this._onDidSuggest=new M.Emitter,this.onDidCancel=this._onDidCancel.event,this.onDidTrigger=this._onDidTrigger.event,this.onDidSuggest=this._onDidSuggest.event,this._telemetryGate=0,this._currentSelection=this._editor.getSelection()||new S.Selection(1,1,1,1),this._toDispose.add(this._editor.onDidChangeModel(()=>{this._updateTriggerCharacters(),this.cancel()})),this._toDispose.add(this._editor.onDidChangeModelLanguage(()=>{this._updateTriggerCharacters(),this.cancel()})),this._toDispose.add(this._editor.onDidChangeConfiguration(()=>{this._updateTriggerCharacters(),this._updateQuickSuggest()})),this._toDispose.add(C.CompletionProviderRegistry.onDidChange(()=>{this._updateTriggerCharacters(),this._updateActiveSuggestSession()})),this._toDispose.add(this._editor.onDidChangeCursorSelection(L=>{this._onCursorChange(L)}));let y=!1;this._toDispose.add(this._editor.onDidCompositionStart(()=>{y=!0})),this._toDispose.add(this._editor.onDidCompositionEnd(()=>{y=!1,this._refilterCompletionItems()})),this._toDispose.add(this._editor.onDidChangeModelContent(()=>{y||this._refilterCompletionItems()})),this._updateTriggerCharacters(),this._updateQuickSuggest()}dispose(){w.dispose(this._triggerCharacterListener),w.dispose([this._onDidCancel,this._onDidSuggest,this._onDidTrigger,this._triggerQuickSuggest]),this._toDispose.dispose(),this._completionDisposables.dispose(),this.cancel()}_updateQuickSuggest(){this._quickSuggestDelay=this._editor.getOption(74),(isNaN(this._quickSuggestDelay)||!this._quickSuggestDelay&&this._quickSuggestDelay!==0||this._quickSuggestDelay<0)&&(this._quickSuggestDelay=10)}_updateTriggerCharacters(){if(this._triggerCharacterListener.clear(),!(this._editor.getOption(75)||!this._editor.hasModel()||!this._editor.getOption(104))){const h=new Map;for(const _ of C.CompletionProviderRegistry.all(this._editor.getModel()))for(const f of _.triggerCharacters||[]){let v=h.get(f);v||(v=new Set,v.add(g.getSnippetSuggestSupport()),h.set(f,v)),v.add(_)}const m=_=>{if(!_){const y=this._editor.getPosition();_=this._editor.getModel().getLineContent(y.lineNumber).substr(0,y.column-1)}let f="";a.isLowSurrogate(_.charCodeAt(_.length-1))?a.isHighSurrogate(_.charCodeAt(_.length-2))&&(f=_.substr(_.length-2)):f=_.charAt(_.length-1);const v=h.get(f);if(v){const y=this._completionModel?{items:this._completionModel.adopt(v),clipboardText:this._completionModel.clipboardText}:void 0;this.trigger({auto:!0,shy:!1,triggerCharacter:f},Boolean(this._completionModel),v,y)}};this._triggerCharacterListener.add(this._editor.onDidType(m)),this._triggerCharacterListener.add(this._editor.onDidCompositionEnd(m))}}get state(){return this._state}cancel(h=!1){var m;this._state!==0&&(this._triggerQuickSuggest.cancel(),(m=this._requestToken)===null||m===void 0||m.cancel(),this._requestToken=void 0,this._state=0,this._completionModel=void 0,this._context=void 0,this._onDidCancel.fire({retrigger:h}))}clear(){this._completionDisposables.clear()}_updateActiveSuggestSession(){this._state!==0&&(!this._editor.hasModel()||!C.CompletionProviderRegistry.has(this._editor.getModel())?this.cancel():this.trigger({auto:this._state===2,shy:!1},!0))}_onCursorChange(h){if(!!this._editor.hasModel()){const m=this._editor.getModel(),_=this._currentSelection;if(this._currentSelection=this._editor.getSelection(),!h.selection.isEmpty()||h.reason!==0&&h.reason!==3||h.source!=="keyboard"&&h.source!=="deleteLeft"){this.cancel();return}if(!!C.CompletionProviderRegistry.has(m))if(this._state===0&&h.reason===0){if(this._editor.getOption(73)===!1||!_.containsRange(this._currentSelection)&&!_.getEndPosition().isBeforeOrEqual(this._currentSelection.getPosition())||this._editor.getOption(101).snippetsPreventQuickSuggestions&&p.SnippetController2.get(this._editor).isInSnippet())return;this.cancel(),this._triggerQuickSuggest.cancelAndSet(()=>{if(this._state===0&&!!n.shouldAutoTrigger(this._editor)&&!!this._editor.hasModel()){const f=this._editor.getModel(),v=this._editor.getPosition(),y=this._editor.getOption(73);if(y!==!1){if(y!==!0){f.tokenizeIfCheap(v.lineNumber);const L=f.getLineTokens(v.lineNumber),I=L.getStandardTokenType(L.findTokenIndexAtOffset(Math.max(v.column-1-1,0)));if(!(y.other&&I===0||y.comments&&I===1||y.strings&&I===2))return}this.trigger({auto:!0,shy:!1})}}},this._quickSuggestDelay)}else this._state!==0&&h.reason===3&&this._refilterCompletionItems()}}_refilterCompletionItems(){Promise.resolve().then(()=>{if(this._state!==0&&!!this._editor.hasModel()){const h=this._editor.getModel(),m=this._editor.getPosition(),_=new n(h,m,this._state===2,!1);this._onNewContext(_)}})}trigger(h,m=!1,_,f){var v;if(!!this._editor.hasModel()){const y=this._editor.getModel(),L=h.auto,I=new n(y,this._editor.getPosition(),L,h.shy);this.cancel(m),this._state=L?2:1,this._onDidTrigger.fire({auto:L,shy:h.shy,position:this._editor.getPosition()}),this._context=I;let k={triggerKind:(v=h.triggerKind)!==null&&v!==void 0?v:0};h.triggerCharacter&&(k={triggerKind:1,triggerCharacter:h.triggerCharacter}),this._requestToken=new c.CancellationTokenSource;const E=this._editor.getOption(96);let T=1;switch(E){case"top":T=0;break;case"bottom":T=2;break}const O=ti._createItemKindFilter(this._editor),A=s.WordDistance.create(this._editorWorkerService,this._editor),B=g.provideSuggestionItems(y,this._editor.getPosition(),new g.CompletionOptions(T,O,_),k,this._requestToken.token);Promise.all([B,A]).then(([F,D])=>Ie(this,void 0,void 0,function*(){var R;if((R=this._requestToken)===null||R===void 0||R.dispose(),!!this._editor.hasModel()){let W=f==null?void 0:f.clipboardText;if(!W&&F.needsClipboard&&(W=yield this._clipboardService.readText()),this._state!==0){const x=this._editor.getModel();let K=F.items;if(f){const ee=g.getSuggestionComparator(T);K=K.concat(f.items).sort(ee)}const Y=new n(x,this._editor.getPosition(),L,h.shy);this._completionModel=new d.CompletionModel(K,this._context.column,{leadingLineContent:Y.leadingLineContent,characterCountDelta:Y.column-this._context.column},D,this._editor.getOption(101),this._editor.getOption(96),W),this._completionDisposables.add(F.disposable),this._onNewContext(Y),this._reportDurationsTelemetry(F.durations)}}})).catch(N.onUnexpectedError)}}_reportDurationsTelemetry(h){this._telemetryGate++%230==0&&setTimeout(()=>{this._telemetryService.publicLog2("suggest.durations.json",{data:JSON.stringify(h)}),this._logService.debug("suggest.durations.json",h)})}static _createItemKindFilter(h){const m=new Set;h.getOption(96)==="none"&&m.add(27);const f=h.getOption(101);return f.showMethods||m.add(0),f.showFunctions||m.add(1),f.showConstructors||m.add(2),f.showFields||m.add(3),f.showVariables||m.add(4),f.showClasses||m.add(5),f.showStructs||m.add(6),f.showInterfaces||m.add(7),f.showModules||m.add(8),f.showProperties||m.add(9),f.showEvents||m.add(10),f.showOperators||m.add(11),f.showUnits||m.add(12),f.showValues||m.add(13),f.showConstants||m.add(14),f.showEnums||m.add(15),f.showEnumMembers||m.add(16),f.showKeywords||m.add(17),f.showWords||m.add(18),f.showColors||m.add(19),f.showFiles||m.add(20),f.showReferences||m.add(21),f.showColors||m.add(22),f.showFolders||m.add(23),f.showTypeParameters||m.add(24),f.showSnippets||m.add(27),f.showUsers||m.add(25),f.showIssues||m.add(26),m}_onNewContext(h){if(!!this._context){if(h.lineNumber!==this._context.lineNumber){this.cancel();return}if(a.getLeadingWhitespace(h.leadingLineContent)!==a.getLeadingWhitespace(this._context.leadingLineContent)){this.cancel();return}if(h.columnthis._context.leadingWord.startColumn){const m=new Set(C.CompletionProviderRegistry.all(this._editor.getModel()));for(let f of this._completionModel.allProvider)m.delete(f);const _=this._completionModel.adopt(new Set);this.trigger({auto:this._context.auto,shy:!1},!0,m,{items:_,clipboardText:this._completionModel.clipboardText});return}if(h.column>this._context.column&&this._completionModel.incomplete.size>0&&h.leadingWord.word.length!==0){const{incomplete:m}=this._completionModel,_=this._completionModel.adopt(m);this.trigger({auto:this._state===2,shy:!1,triggerKind:2},!0,m,{items:_,clipboardText:this._completionModel.clipboardText})}else{let m=this._completionModel.lineContext,_=!1;if(this._completionModel.lineContext={leadingLineContent:h.leadingLineContent,characterCountDelta:h.column-this._context.column},this._completionModel.items.length===0){if(n.shouldAutoTrigger(this._editor)&&this._context.leadingWord.endColumn0,_&&h.leadingWord.word.length===0){this.cancel();return}}this._onDidSuggest.fire({completionModel:this._completionModel,auto:this._context.auto,shy:this._context.shy,isFrozen:_})}}}}};t=Me([_e(1,o.IEditorWorkerService),_e(2,u.IClipboardService),_e(3,r.ITelemetryService),_e(4,i.ILogService)],t),e.SuggestModel=t}),define(Q[682],J([0,1,47,19,12,39,2,70,13,62,3,25,192,131,576,507,26,16,9,86,117,548,681,666,549,6,15,20,414,415,14,17,34,23,77,81]),function(q,e,b,N,M,w,S,C,d,g,p,c,o,s,a,u,r,i,n,t,l,h,m,_,f,v,y,L,I,k,E,T,O,A,B,F){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TriggerSuggestAction=e.SuggestController=void 0;let D=!1;class R{constructor(se,ne){if(this._model=se,this._position=ne,se.getLineMaxColumn(ne.lineNumber)!==ne.column){const X=se.getOffsetAt(ne),z=se.getPositionAt(X+1);this._marker=se.deltaDecorations([],[{range:p.Range.fromPositions(ne,z),options:{stickiness:1}}])}}dispose(){this._marker&&!this._model.isDisposed()&&this._model.deltaDecorations(this._marker,[])}delta(se){if(this._model.isDisposed()||this._position.lineNumber!==se.lineNumber)return 0;if(this._marker){const ne=this._model.getDecorationRange(this._marker[0]);return this._model.getOffsetAt(ne.getStartPosition())-this._model.getOffsetAt(se)}else return this._model.getLineMaxColumn(se.lineNumber)-se.column}}let W=class ii{constructor(se,ne,le,X,z,P){this._memoryService=ne,this._commandService=le,this._contextKeyService=X,this._instantiationService=z,this._logService=P,this._lineSuffix=new S.MutableDisposable,this._toDispose=new S.DisposableStore,this.editor=se,this.model=z.createInstance(m.SuggestModel,this.editor);const V=l.Context.InsertMode.bindTo(X);V.set(se.getOption(101).insertMode),this.model.onDidTrigger(()=>V.set(se.getOption(101).insertMode)),this.widget=this._toDispose.add(new y.IdleValue(()=>{const $=this._instantiationService.createInstance(_.SuggestWidget,this.editor);this._toDispose.add($),this._toDispose.add($.onDidSelect(j=>this._insertSuggestion(j,0),this));const ie=new I.CommitCharacterController(this.editor,$,j=>this._insertSuggestion(j,2));this._toDispose.add(ie),this._toDispose.add(this.model.onDidSuggest(j=>{j.completionModel.items.length===0&&ie.reset()}));const oe=l.Context.MakesTextEdit.bindTo(this._contextKeyService),ae=l.Context.HasInsertAndReplaceRange.bindTo(this._contextKeyService),G=l.Context.CanResolve.bindTo(this._contextKeyService);return this._toDispose.add(S.toDisposable(()=>{oe.reset(),ae.reset(),G.reset()})),this._toDispose.add($.onDidFocus(({item:j})=>{const te=this.editor.getPosition(),Z=j.editStart.column,ue=te.column;let he=!0;this.editor.getOption(1)==="smart"&&this.model.state===2&&!j.completion.command&&!j.completion.additionalTextEdits&&!(j.completion.insertTextRules&4)&&ue-Z===j.completion.insertText.length&&(he=this.editor.getModel().getValueInRange({startLineNumber:te.lineNumber,startColumn:Z,endLineNumber:te.lineNumber,endColumn:ue})!==j.completion.insertText),oe.set(he),ae.set(!E.Position.equals(j.editInsertEnd,j.editReplaceEnd)),G.set(Boolean(j.provider.resolveCompletionItem)||Boolean(j.completion.documentation)||j.completion.detail!==j.completion.label)})),this._toDispose.add($.onDetailsKeyDown(j=>{if(j.toKeybinding().equals(new w.SimpleKeybinding(!0,!1,!1,!1,33))||T.isMacintosh&&j.toKeybinding().equals(new w.SimpleKeybinding(!1,!1,!1,!0,33))){j.stopPropagation();return}j.toKeybinding().isModifierKey()||this.editor.focus()})),$})),this._overtypingCapturer=this._toDispose.add(new y.IdleValue(()=>this._toDispose.add(new k.OvertypingCapturer(this.editor,this.model)))),this._alternatives=this._toDispose.add(new y.IdleValue(()=>this._toDispose.add(new h.SuggestAlternatives(this.editor,this._contextKeyService)))),this._toDispose.add(z.createInstance(f.WordContextKey,se)),this._toDispose.add(this.model.onDidTrigger($=>{this.widget.value.showTriggered($.auto,$.shy?250:50),this._lineSuffix.value=new R(this.editor.getModel(),$.position)})),this._toDispose.add(this.model.onDidSuggest($=>{if(!$.shy){let ie=this._memoryService.select(this.editor.getModel(),this.editor.getPosition(),$.completionModel.items);this.widget.value.showSuggestions($.completionModel,ie,$.isFrozen,$.auto)}})),this._toDispose.add(this.model.onDidCancel($=>{$.retrigger||this.widget.value.hideWidget()})),this._toDispose.add(this.editor.onDidBlurEditorWidget(()=>{D||(this.model.cancel(),this.model.clear())}));let U=l.Context.AcceptSuggestionsOnEnter.bindTo(X),H=()=>{const $=this.editor.getOption(1);U.set($==="on"||$==="smart")};this._toDispose.add(this.editor.onDidChangeConfiguration(()=>H())),H()}static get(se){return se.getContribution(ii.ID)}dispose(){this._alternatives.dispose(),this._toDispose.dispose(),this.widget.dispose(),this.model.dispose(),this._lineSuffix.dispose()}_insertSuggestion(se,ne){if(!se||!se.item){this._alternatives.value.reset(),this.model.cancel(),this.model.clear();return}if(!!this.editor.hasModel()){const le=this.editor.getModel(),X=le.getAlternativeVersionId(),{item:z}=se,P=[],V=new A.CancellationTokenSource;ne&1||this.editor.pushUndoStop();const U=this.getOverwriteInfo(z,Boolean(ne&8));if(this._memoryService.memorize(le,this.editor.getPosition(),z),Array.isArray(z.completion.additionalTextEdits)){const $=C.StableEditorScrollState.capture(this.editor);this.editor.executeEdits("suggestController.additionalTextEdits.sync",z.completion.additionalTextEdits.map(ie=>g.EditOperation.replace(p.Range.lift(ie.range),ie.text))),$.restoreRelativeVerticalPositionOfCursor(this.editor)}else if(!z.isResolved){const $=new F.StopWatch(!0);let ie;const oe=le.onDidChangeContent(te=>{if(te.isFlush){V.cancel(),oe.dispose();return}for(let Z of te.changes){const ue=p.Range.getEndPosition(Z.range);(!ie||E.Position.isBefore(ue,ie))&&(ie=ue)}});let ae=ne;ne|=2;let G=!1,j=this.editor.onWillType(()=>{j.dispose(),G=!0,ae&2||this.editor.pushUndoStop()});P.push(z.resolve(V.token).then(()=>{if(!z.completion.additionalTextEdits||V.token.isCancellationRequested||ie&&z.completion.additionalTextEdits.some(Z=>E.Position.isBefore(ie,p.Range.getStartPosition(Z.range))))return!1;G&&this.editor.pushUndoStop();const te=C.StableEditorScrollState.capture(this.editor);return this.editor.executeEdits("suggestController.additionalTextEdits.async",z.completion.additionalTextEdits.map(Z=>g.EditOperation.replace(p.Range.lift(Z.range),Z.text))),te.restoreRelativeVerticalPositionOfCursor(this.editor),(G||!(ae&2))&&this.editor.pushUndoStop(),!0}).then(te=>{this._logService.trace("[suggest] async resolving of edits DONE (ms, applied?)",$.elapsed(),te),oe.dispose(),j.dispose()}))}let{insertText:H}=z.completion;z.completion.insertTextRules&4||(H=s.SnippetParser.escape(H)),o.SnippetController2.get(this.editor).insert(H,{overwriteBefore:U.overwriteBefore,overwriteAfter:U.overwriteAfter,undoStopBefore:!1,undoStopAfter:!1,adjustWhitespace:!(z.completion.insertTextRules&1),clipboardText:se.model.clipboardText,overtypingCapturer:this._overtypingCapturer.value}),ne&2||this.editor.pushUndoStop(),z.completion.command?z.completion.command.id===x.id?this.model.trigger({auto:!0,shy:!1},!0):(P.push(this._commandService.executeCommand(z.completion.command.id,...z.completion.command.arguments?[...z.completion.command.arguments]:[]).catch(M.onUnexpectedError)),this.model.cancel()):this.model.cancel(),ne&4&&this._alternatives.value.set(se,$=>{for(V.cancel();le.canUndo();){X!==le.getAlternativeVersionId()&&le.undo(),this._insertSuggestion($,1|2|(ne&8?8:0));break}}),this._alertCompletionItem(z),Promise.all(P).finally(()=>{this.model.clear(),V.dispose()})}}getOverwriteInfo(se,ne){L.assertType(this.editor.hasModel());let le=this.editor.getOption(101).insertMode==="replace";ne&&(le=!le);const X=se.position.column-se.editStart.column,z=(le?se.editReplaceEnd.column:se.editInsertEnd.column)-se.position.column,P=this.editor.getPosition().column-se.position.column,V=this._lineSuffix.value?this._lineSuffix.value.delta(this.editor.getPosition()):0;return{overwriteBefore:X+P,overwriteAfter:z+V}}_alertCompletionItem({completion:se}){const ne=typeof se.label=="string"?se.label:se.label.name;if(N.isNonEmptyArray(se.additionalTextEdits)){let le=u.localize(0,null,ne,se.additionalTextEdits.length);b.alert(le)}}triggerSuggest(se){this.editor.hasModel()&&(this.model.trigger({auto:!1,shy:!1},!1,se),this.editor.revealLine(this.editor.getPosition().lineNumber,0),this.editor.focus())}triggerSuggestAndAcceptBest(se){if(!!this.editor.hasModel()){const ne=this.editor.getPosition(),le=()=>{ne.equals(this.editor.getPosition())&&this._commandService.executeCommand(se.fallback)},X=z=>{if(z.completion.insertTextRules&4||z.completion.additionalTextEdits)return!0;const P=this.editor.getPosition(),V=z.editStart.column,U=P.column;return U-V!==z.completion.insertText.length?!0:this.editor.getModel().getValueInRange({startLineNumber:P.lineNumber,startColumn:V,endLineNumber:P.lineNumber,endColumn:U})!==z.completion.insertText};v.Event.once(this.model.onDidTrigger)(z=>{let P=[];v.Event.any(this.model.onDidTrigger,this.model.onDidCancel)(()=>{S.dispose(P),le()},void 0,P),this.model.onDidSuggest(({completionModel:V})=>{if(S.dispose(P),V.items.length===0){le();return}const U=this._memoryService.select(this.editor.getModel(),this.editor.getPosition(),V.items),H=V.items[U];if(!X(H)){le();return}this.editor.pushUndoStop(),this._insertSuggestion({index:U,item:H,model:V},4|1|2)},void 0,P)}),this.model.trigger({auto:!1,shy:!0}),this.editor.revealLine(ne.lineNumber,0),this.editor.focus()}}acceptSelectedSuggestion(se,ne){const le=this.widget.value.getFocusedItem();let X=0;se&&(X|=4),ne&&(X|=8),this._insertSuggestion(le,X)}acceptNextSuggestion(){this._alternatives.value.next()}acceptPrevSuggestion(){this._alternatives.value.prev()}cancelSuggestWidget(){this.model.cancel(),this.model.clear(),this.widget.value.hideWidget()}selectNextSuggestion(){this.widget.value.selectNext()}selectNextPageSuggestion(){this.widget.value.selectNextPage()}selectLastSuggestion(){this.widget.value.selectLast()}selectPrevSuggestion(){this.widget.value.selectPrevious()}selectPrevPageSuggestion(){this.widget.value.selectPreviousPage()}selectFirstSuggestion(){this.widget.value.selectFirst()}toggleSuggestionDetails(){this.widget.value.toggleDetails()}toggleExplainMode(){this.widget.value.toggleExplainMode()}toggleSuggestionFocus(){this.widget.value.toggleDetailsFocus()}resetWidgetSize(){this.widget.value.resetPersistedSize()}};W.ID="editor.contrib.suggestController",W=Me([_e(1,a.ISuggestMemoryService),_e(2,r.ICommandService),_e(3,i.IContextKeyService),_e(4,n.IInstantiationService),_e(5,B.ILogService)],W),e.SuggestController=W;class x extends d.EditorAction{constructor(){super({id:x.id,label:u.localize(1,null),alias:"Trigger Suggest",precondition:i.ContextKeyExpr.and(c.EditorContextKeys.writable,c.EditorContextKeys.hasCompletionItemProvider),kbOpts:{kbExpr:c.EditorContextKeys.textInputFocus,primary:2048|10,secondary:[2048|39],mac:{primary:256|10,secondary:[512|9,2048|39]},weight:100}})}run(se,ne){const le=W.get(ne);!le||le.triggerSuggest()}}e.TriggerSuggestAction=x,x.id="editor.action.triggerSuggest",d.registerEditorContribution(W.ID,W),d.registerEditorAction(x);const K=100+90,Y=d.EditorCommand.bindToContribution(W.get);d.registerEditorCommand(new Y({id:"acceptSelectedSuggestion",precondition:l.Context.Visible,handler(ee){ee.acceptSelectedSuggestion(!0,!1)}})),t.KeybindingsRegistry.registerKeybindingRule({id:"acceptSelectedSuggestion",when:i.ContextKeyExpr.and(l.Context.Visible,c.EditorContextKeys.textInputFocus),primary:2,weight:K}),t.KeybindingsRegistry.registerKeybindingRule({id:"acceptSelectedSuggestion",when:i.ContextKeyExpr.and(l.Context.Visible,c.EditorContextKeys.textInputFocus,l.Context.AcceptSuggestionsOnEnter,l.Context.MakesTextEdit),primary:3,weight:K}),O.MenuRegistry.appendMenuItem(l.suggestWidgetStatusbarMenu,{command:{id:"acceptSelectedSuggestion",title:u.localize(2,null)},group:"left",order:1,when:l.Context.HasInsertAndReplaceRange.toNegated()}),O.MenuRegistry.appendMenuItem(l.suggestWidgetStatusbarMenu,{command:{id:"acceptSelectedSuggestion",title:u.localize(3,null)},group:"left",order:1,when:i.ContextKeyExpr.and(l.Context.HasInsertAndReplaceRange,l.Context.InsertMode.isEqualTo("insert"))}),O.MenuRegistry.appendMenuItem(l.suggestWidgetStatusbarMenu,{command:{id:"acceptSelectedSuggestion",title:u.localize(4,null)},group:"left",order:1,when:i.ContextKeyExpr.and(l.Context.HasInsertAndReplaceRange,l.Context.InsertMode.isEqualTo("replace"))}),d.registerEditorCommand(new Y({id:"acceptAlternativeSelectedSuggestion",precondition:i.ContextKeyExpr.and(l.Context.Visible,c.EditorContextKeys.textInputFocus),kbOpts:{weight:K,kbExpr:c.EditorContextKeys.textInputFocus,primary:1024|3,secondary:[1024|2]},handler(ee){ee.acceptSelectedSuggestion(!1,!0)},menuOpts:[{menuId:l.suggestWidgetStatusbarMenu,group:"left",order:2,when:i.ContextKeyExpr.and(l.Context.HasInsertAndReplaceRange,l.Context.InsertMode.isEqualTo("insert")),title:u.localize(5,null)},{menuId:l.suggestWidgetStatusbarMenu,group:"left",order:2,when:i.ContextKeyExpr.and(l.Context.HasInsertAndReplaceRange,l.Context.InsertMode.isEqualTo("replace")),title:u.localize(6,null)}]})),r.CommandsRegistry.registerCommandAlias("acceptSelectedSuggestionOnEnter","acceptSelectedSuggestion"),d.registerEditorCommand(new Y({id:"hideSuggestWidget",precondition:l.Context.Visible,handler:ee=>ee.cancelSuggestWidget(),kbOpts:{weight:K,kbExpr:c.EditorContextKeys.textInputFocus,primary:9,secondary:[1024|9]}})),d.registerEditorCommand(new Y({id:"selectNextSuggestion",precondition:i.ContextKeyExpr.and(l.Context.Visible,l.Context.MultipleSuggestions),handler:ee=>ee.selectNextSuggestion(),kbOpts:{weight:K,kbExpr:c.EditorContextKeys.textInputFocus,primary:18,secondary:[2048|18],mac:{primary:18,secondary:[2048|18,256|44]}}})),d.registerEditorCommand(new Y({id:"selectNextPageSuggestion",precondition:i.ContextKeyExpr.and(l.Context.Visible,l.Context.MultipleSuggestions),handler:ee=>ee.selectNextPageSuggestion(),kbOpts:{weight:K,kbExpr:c.EditorContextKeys.textInputFocus,primary:12,secondary:[2048|12]}})),d.registerEditorCommand(new Y({id:"selectLastSuggestion",precondition:i.ContextKeyExpr.and(l.Context.Visible,l.Context.MultipleSuggestions),handler:ee=>ee.selectLastSuggestion()})),d.registerEditorCommand(new Y({id:"selectPrevSuggestion",precondition:i.ContextKeyExpr.and(l.Context.Visible,l.Context.MultipleSuggestions),handler:ee=>ee.selectPrevSuggestion(),kbOpts:{weight:K,kbExpr:c.EditorContextKeys.textInputFocus,primary:16,secondary:[2048|16],mac:{primary:16,secondary:[2048|16,256|46]}}})),d.registerEditorCommand(new Y({id:"selectPrevPageSuggestion",precondition:i.ContextKeyExpr.and(l.Context.Visible,l.Context.MultipleSuggestions),handler:ee=>ee.selectPrevPageSuggestion(),kbOpts:{weight:K,kbExpr:c.EditorContextKeys.textInputFocus,primary:11,secondary:[2048|11]}})),d.registerEditorCommand(new Y({id:"selectFirstSuggestion",precondition:i.ContextKeyExpr.and(l.Context.Visible,l.Context.MultipleSuggestions),handler:ee=>ee.selectFirstSuggestion()})),d.registerEditorCommand(new Y({id:"toggleSuggestionDetails",precondition:l.Context.Visible,handler:ee=>ee.toggleSuggestionDetails(),kbOpts:{weight:K,kbExpr:c.EditorContextKeys.textInputFocus,primary:2048|10,mac:{primary:256|10}},menuOpts:[{menuId:l.suggestWidgetStatusbarMenu,group:"right",order:1,when:i.ContextKeyExpr.and(l.Context.DetailsVisible,l.Context.CanResolve),title:u.localize(7,null)},{menuId:l.suggestWidgetStatusbarMenu,group:"right",order:1,when:i.ContextKeyExpr.and(l.Context.DetailsVisible.toNegated(),l.Context.CanResolve),title:u.localize(8,null)}]})),d.registerEditorCommand(new Y({id:"toggleExplainMode",precondition:l.Context.Visible,handler:ee=>ee.toggleExplainMode(),kbOpts:{weight:100,primary:2048|85}})),d.registerEditorCommand(new Y({id:"toggleSuggestionFocus",precondition:l.Context.Visible,handler:ee=>ee.toggleSuggestionFocus(),kbOpts:{weight:K,kbExpr:c.EditorContextKeys.textInputFocus,primary:2048|512|10,mac:{primary:256|512|10}}})),d.registerEditorCommand(new Y({id:"insertBestCompletion",precondition:i.ContextKeyExpr.and(c.EditorContextKeys.textInputFocus,i.ContextKeyExpr.equals("config.editor.tabCompletion","on"),f.WordContextKey.AtEnd,l.Context.Visible.toNegated(),h.SuggestAlternatives.OtherSuggestions.toNegated(),o.SnippetController2.InSnippetMode.toNegated()),handler:(ee,se)=>{ee.triggerSuggestAndAcceptBest(L.isObject(se)?Object.assign({fallback:"tab"},se):{fallback:"tab"})},kbOpts:{weight:K,primary:2}})),d.registerEditorCommand(new Y({id:"insertNextSuggestion",precondition:i.ContextKeyExpr.and(c.EditorContextKeys.textInputFocus,i.ContextKeyExpr.equals("config.editor.tabCompletion","on"),h.SuggestAlternatives.OtherSuggestions,l.Context.Visible.toNegated(),o.SnippetController2.InSnippetMode.toNegated()),handler:ee=>ee.acceptNextSuggestion(),kbOpts:{weight:K,kbExpr:c.EditorContextKeys.textInputFocus,primary:2}})),d.registerEditorCommand(new Y({id:"insertPrevSuggestion",precondition:i.ContextKeyExpr.and(c.EditorContextKeys.textInputFocus,i.ContextKeyExpr.equals("config.editor.tabCompletion","on"),h.SuggestAlternatives.OtherSuggestions,l.Context.Visible.toNegated(),o.SnippetController2.InSnippetMode.toNegated()),handler:ee=>ee.acceptPrevSuggestion(),kbOpts:{weight:K,kbExpr:c.EditorContextKeys.textInputFocus,primary:1024|2}})),d.registerEditorAction(class extends d.EditorAction{constructor(){super({id:"editor.action.resetSuggestSize",label:u.localize(9,null),alias:"Reset Suggest Widget Size",precondition:void 0})}run(ee,se){W.get(se).resetWidgetSize()}})}),define(Q[683],J([0,1,188,143,266,215,611,612,613,614,615,635,618,670,619,620,621,622,267,659,623,624,545,271,272,268,273,629,630,628,631,632,633,662,664,636,637,192,682,638,264,639,671,640,265,641,64,123]),function(q,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0})});var mt=this&&this.__createBinding||(Object.create?function(q,e,b,N){N===void 0&&(N=b),Object.defineProperty(q,N,{enumerable:!0,get:function(){return e[b]}})}:function(q,e,b,N){N===void 0&&(N=b),q[N]=e[b]}),pt=this&&this.__exportStar||function(q,e){for(var b in q)b!=="default"&&!Object.prototype.hasOwnProperty.call(e,b)&&mt(e,q,b)};define(Q[686],J([0,1,677,683,642,643,644,573,646,647,645,672,648]),function(q,e,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),pt(b,e)})}).call(this); + + +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-typescript version: 4.3.1(d4e91e07d8144e428885c93029b3d3cbf1994c33) + * Released under the MIT license + * https://github.com/Microsoft/monaco-typescript/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/language/typescript/lib/typescriptServicesMetadata",["require","exports"],(function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.typescriptVersion=void 0,e.typescriptVersion="4.2.3"})),define("vs/language/typescript/fillers/monaco-editor-core",['vs/editor/editor.api'],(function(){return self.monaco})),define("vs/language/typescript/monaco.contribution",["require","exports","./lib/typescriptServicesMetadata","./fillers/monaco-editor-core"],(function(t,e,i,n){"use strict";var r,o,s,a,c;Object.defineProperty(e,"__esModule",{value:!0}),e.getJavaScriptWorker=e.getTypeScriptWorker=e.javascriptDefaults=e.typescriptDefaults=e.typescriptVersion=e.ModuleResolutionKind=e.ScriptTarget=e.NewLineKind=e.JsxEmit=e.ModuleKind=void 0,function(t){t[t.None=0]="None",t[t.CommonJS=1]="CommonJS",t[t.AMD=2]="AMD",t[t.UMD=3]="UMD",t[t.System=4]="System",t[t.ES2015=5]="ES2015",t[t.ESNext=99]="ESNext"}(r=e.ModuleKind||(e.ModuleKind={})),function(t){t[t.None=0]="None",t[t.Preserve=1]="Preserve",t[t.React=2]="React",t[t.ReactNative=3]="ReactNative",t[t.ReactJSX=4]="ReactJSX",t[t.ReactJSXDev=5]="ReactJSXDev"}(o=e.JsxEmit||(e.JsxEmit={})),function(t){t[t.CarriageReturnLineFeed=0]="CarriageReturnLineFeed",t[t.LineFeed=1]="LineFeed"}(s=e.NewLineKind||(e.NewLineKind={})),function(t){t[t.ES3=0]="ES3",t[t.ES5=1]="ES5",t[t.ES2015=2]="ES2015",t[t.ES2016=3]="ES2016",t[t.ES2017=4]="ES2017",t[t.ES2018=5]="ES2018",t[t.ES2019=6]="ES2019",t[t.ES2020=7]="ES2020",t[t.ESNext=99]="ESNext",t[t.JSON=100]="JSON",t[t.Latest=99]="Latest"}(a=e.ScriptTarget||(e.ScriptTarget={})),function(t){t[t.Classic=1]="Classic",t[t.NodeJs=2]="NodeJs"}(c=e.ModuleResolutionKind||(e.ModuleResolutionKind={}));var p=function(){function t(t,e,i){this._onDidChange=new n.Emitter,this._onDidExtraLibsChange=new n.Emitter,this._extraLibs=Object.create(null),this._removedExtraLibs=Object.create(null),this._eagerModelSync=!1,this.setCompilerOptions(t),this.setDiagnosticsOptions(e),this.setWorkerOptions(i),this._onDidExtraLibsChangeTimeout=-1}return Object.defineProperty(t.prototype,"onDidChange",{get:function(){return this._onDidChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onDidExtraLibsChange",{get:function(){return this._onDidExtraLibsChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"workerOptions",{get:function(){return this._workerOptions},enumerable:!1,configurable:!0}),t.prototype.getExtraLibs=function(){return this._extraLibs},t.prototype.addExtraLib=function(t,e){var i,n=this;if(i=void 0===e?"ts:extralib-"+Math.random().toString(36).substring(2,15):e,this._extraLibs[i]&&this._extraLibs[i].content===t)return{dispose:function(){}};var r=1;return this._removedExtraLibs[i]&&(r=this._removedExtraLibs[i]+1),this._extraLibs[i]&&(r=this._extraLibs[i].version+1),this._extraLibs[i]={content:t,version:r},this._fireOnDidExtraLibsChangeSoon(),{dispose:function(){var t=n._extraLibs[i];t&&t.version===r&&(delete n._extraLibs[i],n._removedExtraLibs[i]=r,n._fireOnDidExtraLibsChangeSoon())}}},t.prototype.setExtraLibs=function(t){for(var e in this._extraLibs)this._removedExtraLibs[e]=this._extraLibs[e].version;if(this._extraLibs=Object.create(null),t&&t.length>0)for(var i=0,n=t;i console.log", weil "log" vor Kurzem abgeschlossen wurde.','W\xE4hlen Sie Vorschl\xE4ge basierend auf fr\xFCheren Pr\xE4fixen aus, die diese Vorschl\xE4ge abgeschlossen haben, z.B. "co -> console" und "con ->" const".',"Steuert, wie Vorschl\xE4ge bei Anzeige der Vorschlagsliste vorab ausgew\xE4hlt werden.","Die Tab-Vervollst\xE4ndigung f\xFCgt den passendsten Vorschlag ein, wenn auf Tab gedr\xFCckt wird.","Tab-Vervollst\xE4ndigungen deaktivieren.",'Codeausschnitte per Tab vervollst\xE4ndigen, wenn die Pr\xE4fixe \xFCbereinstimmen. Funktioniert am besten, wenn "quickSuggestions" deaktiviert sind.',"Tab-Vervollst\xE4ndigungen aktivieren.","Ungew\xF6hnliche Zeilenabschlusszeichen werden automatisch entfernt.","Ungew\xF6hnliche Zeilenabschlusszeichen werden ignoriert.","Zum Entfernen ungew\xF6hnlicher Zeilenabschlusszeichen wird eine Eingabeaufforderung angezeigt.","Entfernen Sie un\xFCbliche Zeilenabschlusszeichen, die Probleme verursachen k\xF6nnen.","Das Einf\xFCgen und L\xF6schen von Leerzeichen erfolgt nach Tabstopps.","Zeichen, die als Worttrennzeichen verwendet werden, wenn wortbezogene Navigationen oder Vorg\xE4nge ausgef\xFChrt werden.","Zeilenumbr\xFCche erfolgen nie.","Der Zeilenumbruch erfolgt an der Breite des Anzeigebereichs.",'Der Zeilenumbruch erfolgt bei "#editor.wordWrapColumn#".','Der Zeilenumbruch erfolgt beim Mindestanzeigebereich und "#editor.wordWrapColumn".',"Steuert, wie der Zeilenumbruch durchgef\xFChrt werden soll.",'Steuert die umschlie\xDFende Spalte des Editors, wenn "#editor.wordWrap#" den Wert "wordWrapColumn" oder "bounded" aufweist.',"Kein Einzug. Umbrochene Zeilen beginnen bei Spalte 1.","Umbrochene Zeilen erhalten den gleichen Einzug wie das \xFCbergeordnete Element.","Umbrochene Zeilen erhalten + 1 Einzug auf das \xFCbergeordnete Element.","Umgebrochene Zeilen werden im Vergleich zum \xFCbergeordneten Element +2 einger\xFCckt.","Steuert die Einr\xFCckung der umbrochenen Zeilen.","Es wird angenommen, dass alle Zeichen gleich breit sind. Dies ist ein schneller Algorithmus, der f\xFCr Festbreitenschriftarten und bestimmte Alphabete (wie dem lateinischen), bei denen die Glyphen gleich breit sind, korrekt funktioniert.","Delegiert die Berechnung von Umbruchpunkten an den Browser. Dies ist ein langsamer Algorithmus, der bei gro\xDFen Dateien Code Freezes verursachen kann, aber in allen F\xE4llen korrekt funktioniert.","Steuert den Algorithmus, der Umbruchpunkte berechnet."],"vs/editor/common/editorContextKeys":["Gibt an, ob der Editor-Text den Fokus besitzt (Cursor blinkt).","Gibt an, ob der Editor oder ein Editor-Widget den Fokus besitzt (z.\xA0B. ob der Fokus sich im Suchwidget befindet).","Gibt an, ob ein Editor oder eine Rich-Text-Eingabe den Fokus besitzt (Cursor blinkt).","Gibt an, ob der Editor schreibgesch\xFCtzt ist.","Gibt an, ob der Kontext ein Diff-Editor ist.",'Gibt an, ob "editor.columnSelection" aktiviert ist.',"Gibt an, ob im Editor Text ausgew\xE4hlt ist.","Gibt an, ob der Editor \xFCber Mehrfachauswahl verf\xFCgt.","Gibt an, ob die TAB-TASTE den Fokus aus dem Editor verschiebt.","Gibt an, ob Hover im Editor sichtbar ist.","Gibt an, ob der Editor Bestandteil eines gr\xF6\xDFeren Editors ist (z.\xA0B. Notebooks).","Der Sprachbezeichner des Editors.","Gibt an, ob der Editor \xFCber einen Vervollst\xE4ndigungselementanbieter verf\xFCgt.","Gibt an, ob der Editor \xFCber einen Codeaktionsanbieter verf\xFCgt.","Gibt an, ob der Editor \xFCber einen CodeLens-Anbieter verf\xFCgt.","Gibt an, ob der Editor \xFCber einen Definitionsanbieter verf\xFCgt.","Gibt an, ob der Editor \xFCber einen Deklarationsanbieter verf\xFCgt.","Gibt an, ob der Editor \xFCber einen Implementierungsanbieter verf\xFCgt.","Gibt an, ob der Editor \xFCber einen Typdefinitionsanbieter verf\xFCgt.","Gibt an, ob der Editor \xFCber einen Hoveranbieter verf\xFCgt.","Gibt an, ob der Editor \xFCber einen Dokumenthervorhebungsanbieter verf\xFCgt.","Gibt an, ob der Editor \xFCber einen Dokumentsymbolanbieter verf\xFCgt.","Gibt an, ob der Editor \xFCber einen Verweisanbieter verf\xFCgt.","Gibt an, ob der Editor \xFCber einen Umbenennungsanbieter verf\xFCgt.","Gibt an, ob der Editor \xFCber einen Signaturhilfeanbieter verf\xFCgt.","Gibt an, ob der Editor \xFCber einen Inlinehinweisanbieter verf\xFCgt.","Gibt an, ob der Editor \xFCber einen Dokumentformatierungsanbieter verf\xFCgt.","Gibt an, ob der Editor \xFCber einen Anbieter f\xFCr Dokumentauswahlformatierung verf\xFCgt.","Gibt an, ob der Editor \xFCber mehrere Dokumentformatierungsanbieter verf\xFCgt.","Gibt an, ob der Editor \xFCber mehrere Anbieter f\xFCr Dokumentauswahlformatierung verf\xFCgt."],"vs/editor/common/model/editStack":["Eingabe"],"vs/editor/common/modes/modesRegistry":["Nur-Text"],"vs/editor/common/standaloneStrings":["Keine Auswahl","Zeile {0}, Spalte {1} ({2} ausgew\xE4hlt)","Zeile {0}, Spalte {1}","{0} Auswahlen ({1} Zeichen ausgew\xE4hlt)","{0} Auswahlen",'Die Einstellung "accessibilitySupport" wird jetzt in "on" ge\xE4ndert.',"Die Dokumentationsseite zur Barrierefreiheit des Editors wird ge\xF6ffnet."," in einem schreibgesch\xFCtzten Bereich eines Diff-Editors."," in einem Bereich eines Diff-Editors."," in einem schreibgesch\xFCtzten Code-Editor"," in einem Code-Editor","Dr\xFCcken Sie BEFEHLSTASTE + E, um den Editor f\xFCr eine optimierte Verwendung mit Sprachausgabe zu konfigurieren.","Dr\xFCcken Sie STRG + E, um den Editor f\xFCr eine optimierte Verwendung mit Sprachausgabe zu konfigurieren.","Der Editor ist auf eine optimale Verwendung mit Sprachausgabe konfiguriert.","Der Editor ist so konfiguriert, dass er nie auf die Verwendung mit Sprachausgabe hin optimiert wird. Dies ist zu diesem Zeitpunkt nicht der Fall.","Durch Dr\xFCcken der TAB-TASTE im aktuellen Editor wird der Fokus in das n\xE4chste Element verschoben, das den Fokus erhalten kann. Schalten Sie dieses Verhalten um, indem Sie {0} dr\xFCcken.","Durch Dr\xFCcken der TAB-TASTE im aktuellen Editor wird der Fokus in das n\xE4chste Element verschoben, das den Fokus erhalten kann. Der {0}-Befehl kann zurzeit nicht durch eine Tastenzuordnung ausgel\xF6st werden.","Durch Dr\xFCcken der TAB-TASTE im aktuellen Editor wird das Tabstoppzeichen eingef\xFCgt. Schalten Sie dieses Verhalten um, indem Sie {0} dr\xFCcken.","Durch Dr\xFCcken der TAB-TASTE im aktuellen Editor wird das Tabstoppzeichen eingef\xFCgt. Der {0}-Befehl kann zurzeit nicht durch eine Tastenzuordnung ausgel\xF6st werden.","Dr\xFCcken Sie BEFEHLSTASTE + H, um ein Browserfenster mit weiteren Informationen zur Barrierefreiheit des Editors zu \xF6ffnen.","Dr\xFCcken Sie STRG + H, um ein Browserfenster mit weiteren Informationen zur Barrierefreiheit des Editors zu \xF6ffnen.","Sie k\xF6nnen diese QuickInfo schlie\xDFen und durch Dr\xFCcken von ESC oder UMSCHALT+ESC zum Editor zur\xFCckkehren.","Hilfe zur Barrierefreiheit anzeigen","Entwickler: Token \xFCberpr\xFCfen","Gehe zu Zeile/Spalte...","Alle Anbieter f\xFCr den Schnellzugriff anzeigen","Befehlspalette","Befehle anzeigen und ausf\xFChren","Gehe zu Symbol...","Gehe zu Symbol nach Kategorie...","Editor-Inhalt","Dr\xFCcken Sie ALT + F1, um die Barrierefreiheitsoptionen aufzurufen.","Zu Design mit hohem Kontrast umschalten","{0} Bearbeitungen in {1} Dateien durchgef\xFChrt"],"vs/editor/common/view/editorColorRegistry":["Hintergrundfarbe zur Hervorhebung der Zeile an der Cursorposition.","Hintergrundfarbe f\xFCr den Rahmen um die Zeile an der Cursorposition.","Hintergrundfarbe der markierten Bereiche, wie z.B. Quick Open oder die Suche. Die Farbe darf nicht deckend sein, weil sie sonst die zugrunde liegenden Dekorationen verdeckt.","Hintergrundfarbe f\xFCr den Rahmen um hervorgehobene Bereiche.",'Hintergrundfarbe des hervorgehobenen Symbols, z. B. "Gehe zu Definition" oder "Gehe zu n\xE4chster/vorheriger". Die Farbe darf nicht undurchsichtig sein, um zugrunde liegende Dekorationen nicht zu verbergen.',"Hintergrundfarbe des Rahmens um hervorgehobene Symbole","Farbe des Cursors im Editor.","Hintergrundfarbe vom Editor-Cursor. Erlaubt die Anpassung der Farbe von einem Zeichen, welches von einem Block-Cursor \xFCberdeckt wird.","Farbe der Leerzeichen im Editor.","Farbe der F\xFChrungslinien f\xFCr Einz\xFCge im Editor.","Farbe der F\xFChrungslinien f\xFCr Einz\xFCge im aktiven Editor.","Zeilennummernfarbe im Editor.","Zeilennummernfarbe der aktiven Editorzeile.",'Die ID ist veraltet. Verwenden Sie stattdessen "editorLineNumber.activeForeground".',"Zeilennummernfarbe der aktiven Editorzeile.","Farbe des Editor-Lineals.","Vordergrundfarbe der CodeLens-Links im Editor","Hintergrundfarbe f\xFCr zusammengeh\xF6rige Klammern","Farbe f\xFCr zusammengeh\xF6rige Klammern","Farbe des Rahmens f\xFCr das \xDCbersicht-Lineal.","Hintergrundfarbe des \xDCbersichtslineals im Editor. Wird nur verwendet, wenn die Minimap aktiviert ist und auf der rechten Seite des Editors platziert wird.","Hintergrundfarbe der Editorleiste. Die Leiste enth\xE4lt die Glyphenr\xE4nder und die Zeilennummern.","Rahmenfarbe unn\xF6tigen (nicht genutzten) Quellcodes im Editor.",'Deckkraft des unn\xF6tigen (nicht genutzten) Quellcodes im Editor. "#000000c0" rendert z.B. den Code mit einer Deckkraft von 75%. Verwenden Sie f\xFCr Designs mit hohem Kontrast das Farbdesign "editorUnnecessaryCode.border", um unn\xF6tigen Code zu unterstreichen statt ihn abzublenden.',"\xDCbersichtslinealmarkerfarbe f\xFCr das Hervorheben von Bereichen. Die Farbe darf nicht deckend sein, weil sie sonst die zugrunde liegenden Dekorationen verdeckt.","\xDCbersichtslineal-Markierungsfarbe f\xFCr Fehler.","\xDCbersichtslineal-Markierungsfarbe f\xFCr Warnungen.","\xDCbersichtslineal-Markierungsfarbe f\xFCr Informationen."],"vs/editor/contrib/anchorSelect/anchorSelect":["Auswahlanker",'Anker festgelegt bei "{0}:{1}"',"Auswahlanker festlegen","Zu Auswahlanker wechseln","Auswahl von Anker zu Cursor","Auswahlanker abbrechen"],"vs/editor/contrib/bracketMatching/bracketMatching":["\xDCbersichtslineal-Markierungsfarbe f\xFCr zusammengeh\xF6rige Klammern.","Gehe zu Klammer","Ausw\xE4hlen bis Klammer","Gehe zu &&Klammer"],"vs/editor/contrib/caretOperations/caretOperations":["Ausgew\xE4hlten Text nach links verschieben","Ausgew\xE4hlten Text nach rechts verschieben"],"vs/editor/contrib/caretOperations/transpose":["Buchstaben austauschen"],"vs/editor/contrib/clipboard/clipboard":["&&Ausschneiden","Ausschneiden","Ausschneiden","&&Kopieren","Kopieren","Kopieren","&&Einf\xFCgen","Einf\xFCgen","Einf\xFCgen","Mit Syntaxhervorhebung kopieren"],"vs/editor/contrib/codeAction/codeActionCommands":["Art der auszuf\xFChrenden Codeaktion","Legt fest, wann die zur\xFCckgegebenen Aktionen angewendet werden","Die erste zur\xFCckgegebene Codeaktion immer anwenden","Die erste zur\xFCckgegebene Codeaktion anwenden, wenn nur eine vorhanden ist","Zur\xFCckgegebene Codeaktionen nicht anwenden","Legt fest, ob nur bevorzugte Codeaktionen zur\xFCckgegeben werden sollen","Beim Anwenden der Code-Aktion ist ein unbekannter Fehler aufgetreten","Schnelle Problembehebung ...","Keine Codeaktionen verf\xFCgbar",'Keine bevorzugten Codeaktionen f\xFCr "{0}" verf\xFCgbar','Keine Codeaktionen f\xFCr "{0}" verf\xFCgbar',"Keine bevorzugten Codeaktionen verf\xFCgbar","Keine Codeaktionen verf\xFCgbar","Refactoring durchf\xFChren...",'Keine bevorzugten Refactorings f\xFCr "{0}" verf\xFCgbar','Keine Refactorings f\xFCr "{0}" verf\xFCgbar',"Keine bevorzugten Refactorings verf\xFCgbar","Keine Refactorings verf\xFCgbar","Quellaktion...",'Keine bevorzugten Quellaktionen f\xFCr "{0}" verf\xFCgbar','Keine Quellaktionen f\xFCr "{0}" verf\xFCgbar',"Keine bevorzugten Quellaktionen verf\xFCgbar","Keine Quellaktionen verf\xFCgbar","Importe organisieren","Keine Aktion zum Organisieren von Importen verf\xFCgbar","Alle korrigieren",'Aktion "Alle korrigieren" nicht verf\xFCgbar',"Automatisch korrigieren...","Keine automatischen Korrekturen verf\xFCgbar"],"vs/editor/contrib/codeAction/lightBulbWidget":["Fixes anzeigen. Bevorzugter Fix verf\xFCgbar ({0})","Korrekturen anzeigen ({0})","Korrekturen anzeigen"],"vs/editor/contrib/codelens/codelensController":["CodeLens-Befehle f\xFCr aktuelle Zeile anzeigen"],"vs/editor/contrib/comment/comment":["Zeilenkommentar umschalten","Zeilenkommen&&tar umschalten","Zeilenkommentar hinzuf\xFCgen","Zeilenkommentar entfernen","Blockkommentar umschalten","&&Blockkommentar umschalten"],"vs/editor/contrib/contextmenu/contextmenu":["Editor-Kontextmen\xFC anzeigen"],"vs/editor/contrib/cursorUndo/cursorUndo":["Mit Cursor r\xFCckg\xE4ngig machen","Wiederholen mit Cursor"],"vs/editor/contrib/find/findController":["Suchen","&&Suchen","Mit Auswahl suchen","Weitersuchen","Weitersuchen","Vorheriges Element suchen","Vorheriges Element suchen","N\xE4chste Auswahl suchen","Vorherige Auswahl suchen","Ersetzen","&&Ersetzen"],"vs/editor/contrib/find/findWidget":['Symbol f\xFCr "In Auswahl suchen" im Editor-Such-Widget.',"Symbol f\xFCr die Anzeige, dass das Editor-Such-Widget zugeklappt wurde.","Symbol f\xFCr die Anzeige, dass das Editor-Such-Widget aufgeklappt wurde.",'Symbol f\xFCr "Ersetzen" im Editor-Such-Widget.','Symbol f\xFCr "Alle ersetzen" im Editor-Such-Widget.','Symbol f\xFCr "Vorheriges Element suchen" im Editor-Such-Widget.','Symbol f\xFCr "N\xE4chstes Element suchen" im Editor-Such-Widget.',"Suchen","Suchen","Vorheriger Treffer","N\xE4chste \xDCbereinstimmung","In Auswahl suchen","Schlie\xDFen","Ersetzen","Ersetzen","Ersetzen","Alle ersetzen","Ersetzen-Modus wechseln","Nur die ersten {0} Ergebnisse wurden hervorgehoben, aber alle Suchoperationen werden auf dem gesamten Text durchgef\xFChrt.","{0} von {1}","Keine Ergebnisse","{0} gefunden",'{0} f\xFCr "{1}" gefunden','{0} f\xFCr "{1}" gefunden, bei {2}','{0} f\xFCr "{1}" gefunden','STRG+EINGABE f\xFCgt jetzt einen Zeilenumbruch ein, statt alles zu ersetzen. Sie k\xF6nnen die Tastenzuordnung f\xFCr "editor.action.replaceAll" \xE4ndern, um dieses Verhalten au\xDFer Kraft zu setzen.'],"vs/editor/contrib/folding/folding":["Auffalten","Faltung rekursiv aufheben","Falten","Einklappung umschalten","Rekursiv falten","Alle Blockkommentare falten","Alle Regionen falten","Alle Regionen auffalten","Alle falten","Alle auffalten","Faltebene {0}","Hintergrundfarbe hinter gefalteten Bereichen. Die Farbe darf nicht deckend sein, sodass zugrunde liegende Dekorationen nicht ausgeblendet werden.","Farbe des Faltsteuerelements im Editor-Bundsteg."],"vs/editor/contrib/folding/foldingDecorations":["Symbol f\xFCr aufgeklappte Bereiche im Editor-Glyphenrand.","Symbol f\xFCr zugeklappte Bereiche im Editor-Glyphenrand."],"vs/editor/contrib/fontZoom/fontZoom":["Editorschriftart vergr\xF6\xDFern","Editorschriftart verkleinern","Editor Schriftart Vergr\xF6\xDFerung zur\xFCcksetzen"],"vs/editor/contrib/format/format":["1 Formatierung in Zeile {0} vorgenommen","{0} Formatierungen in Zeile {1} vorgenommen","1 Formatierung zwischen Zeilen {0} und {1} vorgenommen","{0} Formatierungen zwischen Zeilen {1} und {2} vorgenommen"],"vs/editor/contrib/format/formatActions":["Dokument formatieren","Auswahl formatieren"],"vs/editor/contrib/gotoError/gotoError":["Gehe zu n\xE4chstem Problem (Fehler, Warnung, Information)","Symbol f\xFCr den Marker zum Wechseln zum n\xE4chsten Element.","Gehe zu vorigem Problem (Fehler, Warnung, Information)","Symbol f\xFCr den Marker zum Wechseln zum vorherigen Element.","Gehe zu dem n\xE4chsten Problem in den Dateien (Fehler, Warnung, Info)","N\xE4chstes &&Problem","Gehe zu dem vorherigen Problem in den Dateien (Fehler, Warnung, Info)","Vorheriges &&Problem"],"vs/editor/contrib/gotoError/gotoErrorWidget":["Fehler","Warnung","Info","Hinweis","{0} bei {1}. ","{0} von {1} Problemen","{0} von {1} Problemen","Editormarkierung: Farbe bei Fehler des Navigationswidgets.","Editormarkierung: Farbe bei Warnung des Navigationswidgets.","Editormarkierung: Farbe bei Information des Navigationswidgets.","Editormarkierung: Hintergrund des Navigationswidgets."],"vs/editor/contrib/gotoSymbol/goToCommands":["Vorschau","Definitionen",'Keine Definition gefunden f\xFCr "{0}".',"Keine Definition gefunden","Gehe zu Definition","Gehe &&zu Definition","Definition an der Seite \xF6ffnen","Definition einsehen","Deklarationen",'Keine Deklaration f\xFCr "{0}" gefunden.',"Keine Deklaration gefunden.","Zur Deklaration wechseln","Gehe zu &&Deklaration",'Keine Deklaration f\xFCr "{0}" gefunden.',"Keine Deklaration gefunden.","Vorschau f\xFCr Deklaration anzeigen","Typdefinitionen",'Keine Typendefinition gefunden f\xFCr "{0}"',"Keine Typendefinition gefunden","Zur Typdefinition wechseln","Zur &&Typdefinition wechseln","Vorschau der Typdefinition anzeigen","Implementierungen",'Keine Implementierung gefunden f\xFCr "{0}"',"Keine Implementierung gefunden","Gehe zu Implementierungen","Gehe zu &&Implementierungen","Vorschau f\xFCr Implementierungen anzeigen",'F\xFCr "{0}" wurden keine Verweise gefunden.',"Keine Referenzen gefunden","Gehe zu Verweisen","Gehe zu &&Verweisen","Verweise","Vorschau f\xFCr Verweise anzeigen","Verweise","Gehe zu beliebigem Symbol","Speicherorte",'Keine Ergebnisse f\xFCr "{0}"',"Verweise"],"vs/editor/contrib/gotoSymbol/link/goToDefinitionAtPosition":["Klicken Sie, um {0} Definitionen anzuzeigen."],"vs/editor/contrib/gotoSymbol/peek/referencesController":["Wird geladen...","{0} ({1})"],"vs/editor/contrib/gotoSymbol/peek/referencesTree":["{0} Verweise","{0} Verweis","Verweise"],"vs/editor/contrib/gotoSymbol/peek/referencesWidget":["Keine Vorschau verf\xFCgbar.","Keine Ergebnisse","Verweise"],"vs/editor/contrib/gotoSymbol/referencesModel":["Symbol in {0} in Zeile {1}, Spalte {2}",'Symbol in "{0}" in Zeile {1}, Spalte {2}, {3}',"1 Symbol in {0}, vollst\xE4ndiger Pfad {1}","{0} Symbole in {1}, vollst\xE4ndiger Pfad {2}","Es wurden keine Ergebnisse gefunden.","1 Symbol in {0} gefunden","{0} Symbole in {1} gefunden","{0} Symbole in {1} Dateien gefunden"],"vs/editor/contrib/gotoSymbol/symbolNavigation":["Symbol {0} von {1}, {2} f\xFCr n\xE4chstes","Symbol {0} von {1}"],"vs/editor/contrib/hover/hover":["Hovern anzeigen","Definitionsvorschauhover anzeigen"],"vs/editor/contrib/hover/markdownHoverParticipant":["Wird geladen..."],"vs/editor/contrib/hover/markerHoverParticipant":["Problem anzeigen","Keine Schnellkorrekturen verf\xFCgbar","Es wird nach Schnellkorrekturen gesucht...","Keine Schnellkorrekturen verf\xFCgbar","Schnelle Problembehebung ..."],"vs/editor/contrib/inPlaceReplace/inPlaceReplace":["Durch vorherigen Wert ersetzen","Durch n\xE4chsten Wert ersetzen"],"vs/editor/contrib/indentation/indentation":["Einzug in Leerzeichen konvertieren","Einzug in Tabstopps konvertieren","Konfigurierte Tabulatorgr\xF6\xDFe","Tabulatorgr\xF6\xDFe f\xFCr aktuelle Datei ausw\xE4hlen","Einzug mithilfe von Tabstopps","Einzug mithilfe von Leerzeichen","Einzug aus Inhalt erkennen","Neuen Einzug f\xFCr Zeilen festlegen","Gew\xE4hlte Zeilen zur\xFCckziehen"],"vs/editor/contrib/linesOperations/linesOperations":["Zeile nach oben kopieren","Zeile nach oben &&kopieren","Zeile nach unten kopieren","Zeile nach unten ko&&pieren","Auswahl duplizieren","&&Auswahl duplizieren","Zeile nach oben verschieben","Zeile nach oben &&verschieben","Zeile nach unten verschieben","Zeile nach &&unten verschieben","Zeilen aufsteigend sortieren","Zeilen absteigend sortieren","Nachgestelltes Leerzeichen k\xFCrzen","Zeile l\xF6schen","Zeileneinzug","Zeile ausr\xFCcken","Zeile oben einf\xFCgen","Zeile unten einf\xFCgen","Alle \xFCbrigen l\xF6schen","Alle rechts l\xF6schen","Zeilen verkn\xFCpfen","Zeichen um den Cursor herum transponieren","In Gro\xDFbuchstaben umwandeln","In Kleinbuchstaben umwandeln","In gro\xDFe Anfangsbuchstaben umwandeln","In Snake Case umwandeln"],"vs/editor/contrib/linkedEditing/linkedEditing":["Verkn\xFCpfte Bearbeitung starten","Hintergrundfarbe, wenn der Editor automatisch nach Typ umbenennt."],"vs/editor/contrib/links/links":["Befehl ausf\xFChren","Link folgen","BEFEHL + Klicken","STRG + Klicken","OPTION + Klicken","alt + klicken",'F\xFChren Sie den Befehl "{0}" aus.',"Fehler beim \xD6ffnen dieses Links, weil er nicht wohlgeformt ist: {0}","Fehler beim \xD6ffnen dieses Links, weil das Ziel fehlt.","Link \xF6ffnen"],"vs/editor/contrib/message/messageController":["Gibt an, ob der Editor zurzeit eine Inlinenachricht anzeigt.","Ein Bearbeiten ist im schreibgesch\xFCtzten Editor nicht m\xF6glich"],"vs/editor/contrib/multicursor/multicursor":["Cursor oberhalb hinzuf\xFCgen","Cursor oberh&&alb hinzuf\xFCgen","Cursor unterhalb hinzuf\xFCgen","Cursor unterhal&&b hinzuf\xFCgen","Cursor an Zeilenenden hinzuf\xFCgen","C&&ursor an Zeilenenden hinzuf\xFCgen","Cursor am Ende hinzuf\xFCgen","Cursor am Anfang hinzuf\xFCgen","Auswahl zur n\xE4chsten \xDCbereinstimmungssuche hinzuf\xFCgen","&&N\xE4chstes Vorkommen hinzuf\xFCgen","Letzte Auswahl zu vorheriger \xDCbereinstimmungssuche hinzuf\xFCgen","Vo&&rheriges Vorkommen hinzuf\xFCgen","Letzte Auswahl in n\xE4chste \xDCbereinstimmungssuche verschieben","Letzte Auswahl in vorherige \xDCbereinstimmungssuche verschieben","Alle Vorkommen ausw\xE4hlen und \xDCbereinstimmung suchen","Alle V&&orkommen ausw\xE4hlen","Alle Vorkommen \xE4ndern"],"vs/editor/contrib/parameterHints/parameterHints":["Parameterhinweise ausl\xF6sen"],"vs/editor/contrib/parameterHints/parameterHintsWidget":["Symbol f\xFCr die Anzeige des n\xE4chsten Parameterhinweises.","Symbol f\xFCr die Anzeige des vorherigen Parameterhinweises.","{0}, Hinweis"],"vs/editor/contrib/peekView/peekView":["Schlie\xDFen","Hintergrundfarbe des Titelbereichs der Peek-Ansicht.","Farbe des Titels in der Peek-Ansicht.","Farbe der Titelinformationen in der Peek-Ansicht.","Farbe der Peek-Ansichtsr\xE4nder und des Pfeils.","Hintergrundfarbe der Ergebnisliste in der Peek-Ansicht.","Vordergrundfarbe f\xFCr Zeilenknoten in der Ergebnisliste der Peek-Ansicht.","Vordergrundfarbe f\xFCr Dateiknoten in der Ergebnisliste der Peek-Ansicht.","Hintergrundfarbe des ausgew\xE4hlten Eintrags in der Ergebnisliste der Peek-Ansicht.","Vordergrundfarbe des ausgew\xE4hlten Eintrags in der Ergebnisliste der Peek-Ansicht.","Hintergrundfarbe des Peek-Editors.","Hintergrundfarbe der Leiste im Peek-Editor.","Farbe f\xFCr \xDCbereinstimmungsmarkierungen in der Ergebnisliste der Peek-Ansicht.","Farbe f\xFCr \xDCbereinstimmungsmarkierungen im Peek-Editor.","Rahmen f\xFCr \xDCbereinstimmungsmarkierungen im Peek-Editor."],"vs/editor/contrib/quickAccess/gotoLineQuickAccess":["\xD6ffnen Sie zuerst einen Text-Editor, um zu einer Zeile zu wechseln.","Wechseln Sie zu Zeile {0} und Spalte {1}.","Zu Zeile {0} wechseln.","Aktuelle Zeile: {0}, Zeichen: {1}. Geben Sie eine Zeilennummer zwischen 1 und {2} ein, zu der Sie navigieren m\xF6chten.","Aktuelle Zeile: {0}, Zeichen: {1}. Geben Sie eine Zeilennummer ein, zu der Sie navigieren m\xF6chten."],"vs/editor/contrib/quickAccess/gotoSymbolQuickAccess":["\xD6ffnen Sie zun\xE4chst einen Text-Editor mit Symbolinformationen, um zu einem Symbol zu navigieren.","Der aktive Text-Editor stellt keine Symbolinformationen bereit.","Keine \xFCbereinstimmenden Editorsymbole.","Keine Editorsymbole.","An der Seite \xF6ffnen","Unten \xF6ffnen","Symbole ({0})","Eigenschaften ({0})","Methoden ({0})","Funktionen ({0})","Konstruktoren ({0})","Variablen ({0})","Klassen ({0})","Strukturen ({0})","Ereignisse ({0})","Operatoren ({0})","Schnittstellen ({0})","Namespaces ({0})","Pakete ({0})","Typparameter ({0})","Module ({0})","Eigenschaften ({0})","Enumerationen ({0})","Enumerationsmember ({0})","Zeichenfolgen ({0})","Dateien ({0})","Arrays ({0})","Zahlen ({0})","Boolesche Werte ({0})","Objekte ({0})","Schl\xFCssel ({0})","Felder ({0})","Konstanten ({0})"],"vs/editor/contrib/rename/rename":["Kein Ergebnis.","Ein unbekannter Fehler ist beim Aufl\xF6sen der Umbenennung eines Ortes aufgetreten.",'"{0}" wird umbenannt.',"{0} wird umbenannt.",'"{0}" erfolgreich in "{1}" umbenannt. Zusammenfassung: {2}',"Die rename-Funktion konnte die \xC4nderungen nicht anwenden.","Die rename-Funktion konnte die \xC4nderungen nicht berechnen.","Symbol umbenennen","M\xF6glichkeit aktivieren/deaktivieren, \xC4nderungen vor dem Umbenennen als Vorschau anzeigen zu lassen"],"vs/editor/contrib/rename/renameInputField":["Benennen Sie die Eingabe um. Geben Sie einen neuen Namen ein, und dr\xFCcken Sie die EINGABETASTE, um den Commit auszuf\xFChren.","{0} zur Umbenennung, {1} zur Vorschau"],"vs/editor/contrib/smartSelect/smartSelect":["Auswahl aufklappen","Auswahl &&erweitern","Markierung verkleinern","Au&&swahl verkleinern"],"vs/editor/contrib/snippet/snippetVariables":["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","So","Mo","Di","Mi","Do","Fr","Sa","Januar","Februar","M\xE4rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember","Jan","Feb","M\xE4r","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],"vs/editor/contrib/suggest/suggestController":['Das Akzeptieren von "{0}" ergab {1} zus\xE4tzliche Bearbeitungen.',"Vorschlag ausl\xF6sen","Einf\xFCgen","Einf\xFCgen","Ersetzen","Ersetzen","Einf\xFCgen","weniger anzeigen","mehr anzeigen","Gr\xF6\xDFe des Vorschlagswidgets zur\xFCcksetzen"],"vs/editor/contrib/suggest/suggestWidget":["Hintergrundfarbe des Vorschlagswidgets.","Rahmenfarbe des Vorschlagswidgets.","Vordergrundfarbe des Vorschlagswidgets.","Hintergrundfarbe des ausgew\xE4hlten Eintrags im Vorschlagswidget.","Farbe der Trefferhervorhebung im Vorschlagswidget.","Wird geladen...","Keine Vorschl\xE4ge.","{0}, Dokumente: {1}","Vorschlagen"],"vs/editor/contrib/suggest/suggestWidgetDetails":["Schlie\xDFen","Wird geladen..."],"vs/editor/contrib/suggest/suggestWidgetRenderer":["Symbol f\xFCr weitere Informationen im Vorschlags-Widget.","Weitere Informationen"],"vs/editor/contrib/suggest/suggestWidgetStatus":["{0} ({1})"],"vs/editor/contrib/symbolIcons/symbolIcons":["Die Vordergrundfarbe f\xFCr Arraysymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr boolesche Symbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr Klassensymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr Farbsymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr konstante Symbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr Konstruktorsymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr Enumeratorsymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr Enumeratormembersymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr Ereignissymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr Feldsymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr Dateisymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr Ordnersymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr Funktionssymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr Schnittstellensymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr Schl\xFCsselsymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr Schl\xFCsselwortsymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr Methodensymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr Modulsymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr Namespacesymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr NULL-Symbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr Zahlensymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr Objektsymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr Operatorsymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr Paketsymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr Eigenschaftensymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr Referenzsymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr Codeausschnittsymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr Zeichenfolgensymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr Struktursymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr Textsymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr Typparametersymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr Einheitensymbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt.","Die Vordergrundfarbe f\xFCr variable Symbole. Diese Symbole werden in den Widgets f\xFCr Gliederung, Breadcrumbs und Vorschl\xE4ge angezeigt."],"vs/editor/contrib/toggleTabFocusMode/toggleTabFocusMode":["TAB-Umschalttaste verschiebt Fokus","Beim Dr\xFCcken auf Tab wird der Fokus jetzt auf das n\xE4chste fokussierbare Element verschoben","Beim Dr\xFCcken von Tab wird jetzt das Tabulator-Zeichen eingef\xFCgt"],"vs/editor/contrib/tokenization/tokenization":["Entwickler: Force Retokenize"],"vs/editor/contrib/unusualLineTerminators/unusualLineTerminators":["Ungew\xF6hnliche Zeilentrennzeichen","Ungew\xF6hnliche Zeilentrennzeichen erkannt",`Diese Datei enth\xE4lt mindestens ein ung\xFCltiges Zeilenabschlusszeichen, z.\xA0B. Zeilentrennzeichen (LS) oder Absatztrennzeichen (PS).\r +\r +Es wird empfohlen, diese Zeichen aus der Datei zu entfernen. Die betreffende Einstellung kann \xFCber "editor.unusualLineTerminators" konfiguriert werden.`,"Diese Datei korrigieren","Problem f\xFCr diese Datei ignorieren"],"vs/editor/contrib/wordHighlighter/wordHighlighter":["Hintergrundfarbe eines Symbols beim Lesezugriff, z.B. beim Lesen einer Variablen. Die Farbe darf nicht deckend sein, damit sie nicht die zugrunde liegenden Dekorationen verdeckt.","Hintergrundfarbe eines Symbols bei Schreibzugriff, z.B. beim Schreiben in eine Variable. Die Farbe darf nicht deckend sein, weil sie sonst die zugrunde liegenden Dekorationen verdeckt.","Randfarbe eines Symbols beim Lesezugriff, wie etwa beim Lesen einer Variablen.","Randfarbe eines Symbols beim Schreibzugriff, wie etwa beim Schreiben einer Variablen.","\xDCbersichtslinealmarkerfarbd f\xFCr das Hervorheben von Symbolen. Die Farbe darf nicht deckend sein, weil sie sonst die zugrunde liegenden Dekorationen verdeckt.","\xDCbersichtslinealmarkerfarbe f\xFCr Symbolhervorhebungen bei Schreibzugriff. Die Farbe darf nicht deckend sein, weil sie sonst die zugrunde liegenden Dekorationen verdeckt.","Gehe zur n\xE4chsten Symbolhervorhebungen","Gehe zur vorherigen Symbolhervorhebungen","Symbol-Hervorhebung ein-/ausschalten"],"vs/editor/contrib/wordOperations/wordOperations":["Wort l\xF6schen"],"vs/platform/actions/browser/menuEntryActionViewItem":["{0} ({1})"],"vs/platform/configuration/common/configurationRegistry":["Au\xDFerkraftsetzungen f\xFCr die Standardsprachkonfiguration","Zu \xFCberschreibende Editor-Einstellungen f\xFCr eine Sprache konfigurieren.","Diese Einstellung unterst\xFCtzt keine sprachspezifische Konfiguration.","Eine leere Eigenschaft kann nicht registriert werden.",'"{0}" kann nicht registriert werden. Stimmt mit dem Eigenschaftsmuster "\\\\[.*\\\\]$" zum Beschreiben sprachspezifischer Editor-Einstellungen \xFCberein. Verwenden Sie den Beitrag "configurationDefaults".','{0}" kann nicht registriert werden. Diese Eigenschaft ist bereits registriert.'],"vs/platform/contextkey/browser/contextKeyService":["Ein Befehl, der Informationen zu Kontextschl\xFCsseln zur\xFCckgibt"],"vs/platform/contextkey/common/contextkeys":["Gibt an, ob Windows als Betriebssystem verwendet wird."],"vs/platform/keybinding/common/abstractKeybindingService":["({0}) wurde gedr\xFCckt. Es wird auf die zweite Taste in der Kombination gewartet...","Die Tastenkombination ({0}, {1}) ist kein Befehl."],"vs/platform/list/browser/listService":["Workbench","Ist unter Windows und Linux der STRG-Taste und unter macOS der Befehlstaste zugeordnet.","Ist unter Windows und Linux der ALT-Taste und unter macOS der Wahltaste zugeordnet.",'Der Modifizierer zum Hinzuf\xFCgen eines Elements in B\xE4umen und Listen zu einer Mehrfachauswahl mit der Maus (zum Beispiel im Explorer, in ge\xF6ffneten Editoren und in der SCM-Ansicht). Die Mausbewegung "Seitlich \xF6ffnen" wird \u2013 sofern unterst\xFCtzt \u2013 so angepasst, dass kein Konflikt mit dem Modifizierer f\xFCr Mehrfachauswahl entsteht.',"Steuert, wie Elemente in Strukturen und Listen mithilfe der Maus ge\xF6ffnet werden (sofern unterst\xFCtzt). Bei \xFCbergeordneten Elementen, deren untergeordnete Elemente sich in Strukturen befinden, steuert diese Einstellung, ob ein Einfachklick oder ein Doppelklick das \xFCbergeordnete Elemente erweitert. Beachten Sie, dass einige Strukturen und Listen diese Einstellung ggf. ignorieren, wenn sie nicht zutrifft.","Steuert, ob Listen und Strukturen ein horizontales Scrollen in der Workbench unterst\xFCtzen. Warnung: Das Aktivieren dieser Einstellung kann sich auf die Leistung auswirken.","Steuert den Struktureinzug in Pixeln.","Steuert, ob die Struktur Einzugsf\xFChrungslinien rendern soll.","Steuert, ob Listen und Strukturen einen optimierten Bildlauf verwenden.","Bei der einfachen Tastaturnavigation werden Elemente in den Fokus genommen, die mit der Tastatureingabe \xFCbereinstimmen. Die \xDCbereinstimmungen gelten nur f\xFCr Pr\xE4fixe.","Hervorheben von Tastaturnavigationshervorgebungselemente, die mit der Tastatureingabe \xFCbereinstimmen. Beim nach oben und nach unten Navigieren werden nur die hervorgehobenen Elemente durchlaufen.","Durch das Filtern der Tastaturnavigation werden alle Elemente herausgefiltert und ausgeblendet, die nicht mit der Tastatureingabe \xFCbereinstimmen.",'Steuert die Tastaturnavigation in Listen und Strukturen in der Workbench. Kann "simple" (einfach), "highlight" (hervorheben) und "filter" (filtern) sein.','Legt fest, ob die Tastaturnavigation in Listen und Strukturen automatisch durch Eingaben ausgel\xF6st wird. Wenn der Wert auf "false" festgelegt ist, wird die Tastaturnavigation nur ausgel\xF6st, wenn der Befehl "list.toggleKeyboardNavigation" ausgef\xFChrt wird. Diesem Befehl k\xF6nnen Sie eine Tastenkombination zuweisen.',"Steuert, wie Strukturordner beim Klicken auf die Ordnernamen erweitert werden. Beachten Sie, dass einige Strukturen und Listen diese Einstellung ggf. ignorieren, wenn sie nicht zutrifft."],"vs/platform/markers/common/markers":["Fehler","Warnung","Info"],"vs/platform/quickinput/browser/commandsQuickAccess":["{0}, {1}","zuletzt verwendet","andere Befehle","Der Befehl {0} hat einen Fehler ausgel\xF6st ({1})."],"vs/platform/quickinput/browser/helpQuickAccess":["Globale Befehle","Editor-Befehle","{0}, {1}"],"vs/platform/theme/common/colorRegistry":["Allgemeine Vordergrundfarbe. Diese Farbe wird nur verwendet, wenn sie nicht durch eine Komponente \xFCberschrieben wird.","Allgemeine Vordergrundfarbe f\xFCr Fehlermeldungen. Diese Farbe wird nur verwendet, wenn sie nicht durch eine Komponente \xFCberschrieben wird.","Die f\xFCr Symbole in der Workbench verwendete Standardfarbe.","Allgemeine Rahmenfarbe f\xFCr fokussierte Elemente. Diese Farbe wird nur verwendet, wenn sie nicht durch eine Komponente \xFCberschrieben wird.","Ein zus\xE4tzlicher Rahmen um Elemente, mit dem diese von anderen getrennt werden, um einen gr\xF6\xDFeren Kontrast zu erreichen.","Ein zus\xE4tzlicher Rahmen um aktive Elemente, mit dem diese von anderen getrennt werden, um einen gr\xF6\xDFeren Kontrast zu erreichen.","Vordergrundfarbe f\xFCr Links im Text.","Hintergrundfarbe f\xFCr Codebl\xF6cke im Text.","Schattenfarbe von Widgets wie zum Beispiel Suchen/Ersetzen innerhalb des Editors.","Hintergrund f\xFCr Eingabefeld.","Vordergrund f\xFCr Eingabefeld.","Rahmen f\xFCr Eingabefeld.","Rahmenfarbe f\xFCr aktivierte Optionen in Eingabefeldern.","Hintergrundfarbe f\xFCr aktivierte Optionen in Eingabefeldern.","Vordergrundfarbe f\xFCr aktivierte Optionen in Eingabefeldern.","Hintergrundfarbe bei der Eingabevalidierung f\xFCr den Schweregrad der Information.","Vordergrundfarbe bei der Eingabevalidierung f\xFCr den Schweregrad der Information.","Rahmenfarbe bei der Eingabevalidierung f\xFCr den Schweregrad der Information.","Hintergrundfarbe bei der Eingabevalidierung f\xFCr den Schweregrad der Warnung.","Vordergrundfarbe bei der Eingabevalidierung f\xFCr den Schweregrad der Warnung.","Rahmenfarbe bei der Eingabevalidierung f\xFCr den Schweregrad der Warnung.","Hintergrundfarbe bei der Eingabevalidierung f\xFCr den Schweregrad des Fehlers.","Vordergrundfarbe bei der Eingabevalidierung f\xFCr den Schweregrad des Fehlers.","Rahmenfarbe bei der Eingabevalidierung f\xFCr den Schweregrad des Fehlers.","Hintergrund f\xFCr Dropdown.","Vordergrund f\xFCr Dropdown.","Vordergrundfarbe der Schaltfl\xE4che.","Hintergrundfarbe der Schaltfl\xE4che.","Hintergrundfarbe der Schaltfl\xE4che, wenn darauf gezeigt wird.","Hintergrundfarbe f\xFCr Badge. Badges sind kurze Info-Texte, z.B. f\xFCr Anzahl Suchergebnisse.","Vordergrundfarbe f\xFCr Badge. Badges sind kurze Info-Texte, z.B. f\xFCr Anzahl Suchergebnisse.","Schatten der Scrollleiste, um anzuzeigen, dass die Ansicht gescrollt wird.","Hintergrundfarbe vom Scrollbar-Schieber","Hintergrundfarbe des Schiebereglers, wenn darauf gezeigt wird.","Hintergrundfarbe des Schiebereglers, wenn darauf geklickt wird.","Hintergrundfarbe des Fortschrittbalkens, der f\xFCr zeitintensive Vorg\xE4nge angezeigt werden kann.","Hintergrundfarbe f\xFCr Fehlertext im Editor. Die Farbe darf nicht deckend sein, weil sie sonst die zugrunde liegenden Dekorationen verdeckt.","Vordergrundfarbe von Fehlerunterstreichungen im Editor.","Randfarbe von Fehlerfeldern im Editor.","Hintergrundfarbe f\xFCr Warnungstext im Editor. Die Farbe darf nicht deckend sein, weil sie sonst die zugrunde liegenden Dekorationen verdeckt.","Vordergrundfarbe von Warnungsunterstreichungen im Editor.","Randfarbe der Warnfelder im Editor.","Hintergrundfarbe f\xFCr Infotext im Editor. Die Farbe darf nicht deckend sein, weil sie sonst die zugrunde liegenden Dekorationen verdeckt.","Vordergrundfarbe von Informationsunterstreichungen im Editor.","Randfarbe der Infofelder im Editor.","Vordergrundfarbe der Hinweisunterstreichungen im Editor.","Randfarbe der Hinweisfelder im Editor.","Hintergrundfarbe des Editors.","Standardvordergrundfarbe des Editors.","Hintergrundfarbe von Editor-Widgets wie zum Beispiel Suchen/Ersetzen.","Vordergrundfarbe f\xFCr Editorwidgets wie Suchen/Ersetzen.","Rahmenfarbe von Editorwigdets. Die Farbe wird nur verwendet, wenn f\xFCr das Widget ein Rahmen verwendet wird und die Farbe nicht von einem Widget \xFCberschrieben wird.","Rahmenfarbe der Gr\xF6\xDFenanpassungsleiste von Editorwigdets. Die Farbe wird nur verwendet, wenn f\xFCr das Widget ein Gr\xF6\xDFenanpassungsrahmen verwendet wird und die Farbe nicht von einem Widget au\xDFer Kraft gesetzt wird.","Schnellauswahl der Hintergrundfarbe. Im Widget f\xFCr die Schnellauswahl sind Auswahlelemente wie die Befehlspalette enthalten.","Vordergrundfarbe der Schnellauswahl. Im Widget f\xFCr die Schnellauswahl sind Auswahlelemente wie die Befehlspalette enthalten.","Hintergrundfarbe f\xFCr den Titel der Schnellauswahl. Im Widget f\xFCr die Schnellauswahl sind Auswahlelemente wie die Befehlspalette enthalten.","Die Hintergrundfarbe der Schnellauswahl f\xFCr das fokussierte Element.","Schnellauswahlfarbe f\xFCr das Gruppieren von Bezeichnungen.","Schnellauswahlfarbe f\xFCr das Gruppieren von Rahmen.","Farbe der Editor-Auswahl.","Farbe des gew\xE4hlten Text f\xFCr einen hohen Kontrast","Die Farbe der Auswahl befindet sich in einem inaktiven Editor. Die Farbe darf nicht deckend sein, weil sie sonst die zugrunde liegende Dekorationen verdeckt.","Farbe f\xFCr Bereiche mit dem gleichen Inhalt wie die Auswahl. Die Farbe darf nicht deckend sein, weil sie sonst die zugrunde liegenden Dekorationen verdeckt.","Randfarbe f\xFCr Bereiche, deren Inhalt der Auswahl entspricht.","Farbe des aktuellen Suchergebnisses.","Farbe der anderen Suchergebnisse. Die Farbe darf nicht deckend sein, weil sie sonst die zugrunde liegenden Dekorationen verdeckt.","Farbe des Bereichs, der die Suche eingrenzt. Die Farbe darf nicht deckend sein, damit sie nicht die zugrunde liegenden Dekorationen verdeckt.","Randfarbe des aktuellen Suchergebnisses.","Randfarbe der anderen Suchtreffer.","Rahmenfarbe des Bereichs, der die Suche eingrenzt. Die Farbe darf nicht deckend sein, weil sie sonst die zugrunde liegenden Dekorationen verdeckt.","Hervorhebung unterhalb des Worts, f\xFCr das ein Hoverelement angezeigt wird. Die Farbe darf nicht deckend sein, weil sie sonst die zugrunde liegenden Dekorationen verdeckt.","Hintergrundfarbe des Editor-Mauszeigers.","Vordergrundfarbe des Editor-Mauszeigers","Rahmenfarbe des Editor-Mauszeigers.","Hintergrundfarbe der Hoverstatusleiste des Editors.","Farbe der aktiven Links.","Vordergrundfarbe f\xFCr Inlinehinweise","Hintergrundfarbe f\xFCr Inlinehinweise",'Die f\xFCr das Aktionssymbol "Gl\xFChbirne" verwendete Farbe.','Die f\xFCr das Aktionssymbol "Automatische Gl\xFChbirnenkorrektur" verwendete Farbe.',"Hintergrundfarbe f\xFCr eingef\xFCgten Text. Die Farbe darf nicht deckend sein, weil sie sonst die zugrunde liegenden Dekorationen verdeckt.","Hintergrundfarbe f\xFCr Text, der entfernt wurde. Die Farbe darf nicht deckend sein, weil sie sonst die zugrunde liegenden Dekorationen verdeckt.","Konturfarbe f\xFCr eingef\xFCgten Text.","Konturfarbe f\xFCr entfernten Text.","Die Rahmenfarbe zwischen zwei Text-Editoren.","Farbe der diagonalen F\xFCllung des Vergleichs-Editors. Die diagonale F\xFCllung wird in Ansichten mit parallelem Vergleich verwendet.","Hintergrundfarbe der Liste/Struktur f\xFCr das fokussierte Element, wenn die Liste/Struktur aktiv ist. Eine aktive Liste/Struktur hat Tastaturfokus, eine inaktive hingegen nicht.","Vordergrundfarbe der Liste/Struktur f\xFCr das fokussierte Element, wenn die Liste/Struktur aktiv ist. Eine aktive Liste/Struktur hat Tastaturfokus, eine inaktive hingegen nicht.","Konturfarbe der Liste/Struktur f\xFCr das fokussierte Element, wenn die Liste/Struktur aktiv ist. Eine aktive Liste/Struktur hat Tastaturfokus, eine inaktive hingegen nicht.","Hintergrundfarbe der Liste/Struktur f\xFCr das ausgew\xE4hlte Element, wenn die Liste/Struktur aktiv ist. Eine aktive Liste/Struktur hat Tastaturfokus, eine inaktive hingegen nicht.","Vordergrundfarbe der Liste/Struktur f\xFCr das ausgew\xE4hlte Element, wenn die Liste/Struktur aktiv ist. Eine aktive Liste/Struktur hat Tastaturfokus, eine inaktive hingegen nicht.","Hintergrundfarbe der Liste/Struktur f\xFCr das ausgew\xE4hlte Element, wenn die Liste/Struktur inaktiv ist. Eine aktive Liste/Struktur hat Tastaturfokus, eine inaktive hingegen nicht.","Vordergrundfarbe der Liste/Struktur f\xFCr das ausgew\xE4hlte Element, wenn die Liste/Baumstruktur inaktiv ist. Eine aktive Liste/Baumstruktur hat Tastaturfokus, eine inaktive hingegen nicht.","Hintergrundfarbe der Liste/Struktur f\xFCr das fokussierte Element, wenn die Liste/Struktur inaktiv ist. Eine aktive Liste/Struktur hat Tastaturfokus, eine inaktive hingegen nicht.","Konturfarbe der Liste/Struktur f\xFCr das fokussierte Element, wenn die Liste/Struktur inaktiv ist. Eine aktive Liste/Struktur hat Tastaturfokus, eine inaktive hingegen nicht.","Hintergrund der Liste/Struktur, wenn mit der Maus auf Elemente gezeigt wird.","Vordergrund der Liste/Struktur, wenn mit der Maus auf Elemente gezeigt wird.","Drag & Drop-Hintergrund der Liste/Struktur, wenn Elemente mithilfe der Maus verschoben werden.","Vordergrundfarbe der Liste/Struktur zur Trefferhervorhebung beim Suchen innerhalb der Liste/Struktur.","Hintergrundfarbe des Typfilterwidgets in Listen und Strukturen.","Konturfarbe des Typfilterwidgets in Listen und Strukturen.","Konturfarbe des Typfilterwidgets in Listen und Strukturen, wenn es keine \xDCbereinstimmungen gibt.","Strukturstrichfarbe f\xFCr die Einzugsf\xFChrungslinien.","Strukturstrichfarbe f\xFCr die Einzugsf\xFChrungslinien.","Rahmenfarbe von Men\xFCs.","Vordergrundfarbe von Men\xFCelementen.","Hintergrundfarbe von Men\xFCelementen.","Vordergrundfarbe des ausgew\xE4hlten Men\xFCelements im Men\xFC.","Hintergrundfarbe des ausgew\xE4hlten Men\xFCelements im Men\xFC.","Rahmenfarbe des ausgew\xE4hlten Men\xFCelements im Men\xFC.","Farbe eines Trenner-Men\xFCelements in Men\xFCs.","Hervorhebungs-Hintergrundfarbe eines Codeausschnitt-Tabstopps.","Hervorhebungs-Rahmenfarbe eines Codeausschnitt-Tabstopps.","Hervorhebungs-Hintergrundfarbe des letzten Tabstopps eines Codeausschnitts.","Rahmenfarbe zur Hervorhebung des letzten Tabstopps eines Codeausschnitts.","\xDCbersichtslinealmarkerfarbe f\xFCr das Suchen von \xDCbereinstimmungen. Die Farbe darf nicht deckend sein, weil sie sonst die zugrunde liegenden Dekorationen verdeckt.","\xDCbersichtslinealmarkerfarbe f\xFCr das Hervorheben der Auswahl. Die Farbe darf nicht deckend sein, weil sie sonst die zugrunde liegenden Dekorationen verdeckt.","Minimap-Markerfarbe f\xFCr gefundene \xDCbereinstimmungen.","Minimap-Markerfarbe f\xFCr die Editorauswahl.","Minimapmarkerfarbe f\xFCr Fehler","Minimapmarkerfarbe f\xFCr Warnungen","Hintergrundfarbe der Minimap.","Hintergrundfarbe des Minimap-Schiebereglers.","Hintergrundfarbe des Minimap-Schiebereglers beim Daraufzeigen.","Hintergrundfarbe des Minimap-Schiebereglers, wenn darauf geklickt wird.","Die Farbe, die f\xFCr das Problemfehlersymbol verwendet wird.","Die Farbe, die f\xFCr das Problemwarnsymbol verwendet wird.","Die Farbe, die f\xFCr das Probleminfosymbol verwendet wird."],"vs/platform/theme/common/iconRegistry":["Die ID der zu verwendenden Schriftart. Sofern nicht festgelegt, wird die zuerst definierte Schriftart verwendet.","Das der Symboldefinition zugeordnete Schriftzeichen.","Symbol f\xFCr Aktion zum Schlie\xDFen in Widgets"],"vs/platform/undoRedo/common/undoRedoService":["Die folgenden Dateien wurden geschlossen und auf dem Datentr\xE4ger ge\xE4ndert: {0}.","Die folgenden Dateien wurden auf inkompatible Weise ge\xE4ndert: {0}.",'"{0}" konnte nicht f\xFCr alle Dateien r\xFCckg\xE4ngig gemacht werden. {1}','"{0}" konnte nicht f\xFCr alle Dateien r\xFCckg\xE4ngig gemacht werden. {1}','"{0}" konnte nicht f\xFCr alle Dateien r\xFCckg\xE4ngig gemacht werden, da \xC4nderungen an {1} vorgenommen wurden.','"{0}" konnte nicht f\xFCr alle Dateien r\xFCckg\xE4ngig gemacht werden, weil bereits ein Vorgang zum R\xFCckg\xE4ngigmachen oder Wiederholen f\xFCr "{1}" durchgef\xFChrt wird.','"{0}" konnte nicht f\xFCr alle Dateien r\xFCckg\xE4ngig gemacht werden, weil in der Zwischenzeit bereits ein Vorgang zum R\xFCckg\xE4ngigmachen oder Wiederholen durchgef\xFChrt wurde.','M\xF6chten Sie "{0}" f\xFCr alle Dateien r\xFCckg\xE4ngig machen?',"In {0} Dateien r\xFCckg\xE4ngig machen","Datei r\xFCckg\xE4ngig machen","Abbrechen",'"{0}" konnte nicht r\xFCckg\xE4ngig gemacht werden, weil bereits ein Vorgang zum R\xFCckg\xE4ngigmachen oder Wiederholen durchgef\xFChrt wird.','M\xF6chten Sie "{0}" r\xFCckg\xE4ngig machen?',"R\xFCckg\xE4ngig machen","Abbrechen",'"{0}" konnte nicht in allen Dateien wiederholt werden. {1}','"{0}" konnte nicht in allen Dateien wiederholt werden. {1}','"{0}" konnte nicht in allen Dateien wiederholt werden, da \xC4nderungen an {1} vorgenommen wurden.','"{0}" konnte nicht f\xFCr alle Dateien wiederholt werden, weil bereits ein Vorgang zum R\xFCckg\xE4ngigmachen oder Wiederholen f\xFCr "{1}" durchgef\xFChrt wird.','"{0}" konnte nicht f\xFCr alle Dateien wiederholt werden, weil in der Zwischenzeit bereits ein Vorgang zum R\xFCckg\xE4ngigmachen oder Wiederholen durchgef\xFChrt wurde.','"{0}" konnte nicht wiederholt werden, weil bereits ein Vorgang zum R\xFCckg\xE4ngigmachen oder Wiederholen durchgef\xFChrt wird.']}); diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/editor/editor.main.nls.es.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/editor/editor.main.nls.es.js new file mode 100644 index 0000000000..d71fd7d7da --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/editor/editor.main.nls.es.js @@ -0,0 +1,8 @@ +/*!----------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Version: 0.23.0(82e8ea39fc101d639262435542c7d43bc20d8aa2) + * Released under the MIT license + * https://github.com/microsoft/vscode/blob/main/LICENSE.txt + *-----------------------------------------------------------*/define("vs/editor/editor.main.nls.es",{"vs/base/browser/ui/actionbar/actionViewItems":["{0} ({1})"],"vs/base/browser/ui/findinput/findInput":["entrada"],"vs/base/browser/ui/findinput/findInputCheckboxes":["Coincidir may\xFAsculas y min\xFAsculas","Solo palabras completas","Usar expresi\xF3n regular"],"vs/base/browser/ui/findinput/replaceInput":["entrada","Conservar may/min"],"vs/base/browser/ui/iconLabel/iconLabel":["Cargando..."],"vs/base/browser/ui/inputbox/inputBox":["Error: {0}","Advertencia: {0}","Informaci\xF3n: {0}"],"vs/base/browser/ui/keybindingLabel/keybindingLabel":["Sin enlazar"],"vs/base/browser/ui/menu/menu":["{0} ({1})"],"vs/base/browser/ui/tree/abstractTree":["Borrar","Desactivar filtro en tipo","Activar filtro en el tipo","No se encontraron elementos","{0} de {1} elementos coincidentes"],"vs/base/common/actions":["(vac\xEDo)"],"vs/base/common/errorMessage":["{0}: {1}","Error del sistema ({0})","Se ha producido un error desconocido. Consulte el registro para obtener m\xE1s detalles.","Se ha producido un error desconocido. Consulte el registro para obtener m\xE1s detalles.","{0} ({1} errores en total)","Se ha producido un error desconocido. Consulte el registro para obtener m\xE1s detalles."],"vs/base/common/keybindingLabels":["Ctrl","May\xFAs","Alt","Windows","Ctrl","May\xFAs","Alt","Super","Control","May\xFAs","Alt","Comando","Control","May\xFAs","Alt","Windows","Control","May\xFAs","Alt","Super"],"vs/base/parts/quickinput/browser/quickInput":["Atr\xE1s","{0}/{1}","Escriba para restringir los resultados.","{0} resultados","{0} seleccionados","Aceptar","Personalizado","Atr\xE1s ({0})","Atr\xE1s"],"vs/base/parts/quickinput/browser/quickInputList":["Entrada r\xE1pida"],"vs/editor/browser/controller/coreCommands":["Anclar al final incluso cuando se vayan a l\xEDneas m\xE1s largas","Anclar al final incluso cuando se vayan a l\xEDneas m\xE1s largas"],"vs/editor/browser/controller/textAreaHandler":["editor","El editor no es accesible en este momento. Pulse {0} para ver las opciones."],"vs/editor/browser/core/keybindingCancellation":['Indica si el editor ejecuta una operaci\xF3n que se puede cancelar como, por ejemplo, "Inspeccionar referencias"'],"vs/editor/browser/editorExtensions":["&&Deshacer","Deshacer","&&Rehacer","Rehacer","&&Seleccionar todo","Seleccionar todo"],"vs/editor/browser/widget/codeEditorWidget":["El n\xFAmero de cursores se ha limitado a {0}."],"vs/editor/browser/widget/diffEditorWidget":["Decoraci\xF3n de l\xEDnea para las inserciones en el editor de diferencias.","Decoraci\xF3n de l\xEDnea para las eliminaciones en el editor de diferencias.","Los archivos no se pueden comparar porque uno de ellos es demasiado grande."],"vs/editor/browser/widget/diffReview":['Icono para "Insertar" en la revisi\xF3n de diferencias.','Icono para "Quitar" en la revisi\xF3n de diferencias.','Icono para "Cerrar" en la revisi\xF3n de diferencias.',"Cerrar","no se han cambiado l\xEDneas","1 l\xEDnea cambiada","{0} l\xEDneas cambiadas","Diferencia {0} de {1}: l\xEDnea original {2}, {3}, l\xEDnea modificada {4}, {5}","vac\xEDo","{0} l\xEDnea sin cambios {1}","{0} l\xEDnea original {1} l\xEDnea modificada {2}","+ {0} l\xEDnea modificada {1}","- {0} l\xEDnea original {1}","Ir a la siguiente diferencia","Ir a la diferencia anterior"],"vs/editor/browser/widget/inlineDiffMargin":["Copiar l\xEDneas eliminadas","Copiar l\xEDnea eliminada","Copiar la l\xEDnea eliminada ({0})","Revertir este cambio","Copiar la l\xEDnea eliminada ({0})"],"vs/editor/common/config/commonEditorConfig":["Editor",'El n\xFAmero de espacios a los que equivale una tabulaci\xF3n. Este valor se invalida en funci\xF3n del contenido del archivo cuando "#editor.detectIndentation#" est\xE1 activado.','Insertar espacios al presionar "TAB". Este valor se invalida en funci\xF3n del contenido del archivo cuando "#editor.detectIndentation#" est\xE1 activado. ','Controla si "#editor.tabSize#" y "#editor.insertSpaces#" se detectar\xE1n autom\xE1ticamente al abrir un archivo en funci\xF3n del contenido de este.',"Quitar el espacio en blanco final autoinsertado.","Manejo especial para archivos grandes para desactivar ciertas funciones de memoria intensiva.","Habilita sugerencias basadas en palabras.","Sugerir palabras solo del documento activo.","Sugerir palabras de todos los documentos abiertos del mismo idioma.","Sugerir palabras de todos los documentos abiertos.","Controla de qu\xE9 documentos se calculan las finalizaciones basadas en palabras.","El resaltado sem\xE1ntico est\xE1 habilitado para todos los temas de color.","El resaltado sem\xE1ntico est\xE1 deshabilitado para todos los temas de color.",'El resaltado sem\xE1ntico est\xE1 configurado con el valor "semanticHighlighting" del tema de color actual.',"Controla si se muestra semanticHighlighting para los idiomas que lo admiten.",'Mantiene abiertos los editores interactivos, incluso al hacer doble clic en su contenido o presionar "Escape".',"Las lineas por encima de esta longitud no se tokenizar\xE1n por razones de rendimiento.","Tiempo de espera en milisegundos despu\xE9s del cual se cancela el c\xE1lculo de diferencias. Utilice 0 para no usar tiempo de espera.","Controla si el editor de diferencias muestra las diferencias en paralelo o alineadas.","Cuando est\xE1 habilitado, el editor de diferencias omite los cambios en los espacios en blanco iniciales o finales.","Controla si el editor de diferencias muestra los indicadores +/- para los cambios agregados o quitados.","Controla si el editor muestra CodeLens.","Las l\xEDneas no se ajustar\xE1n nunca.","Las l\xEDneas se ajustar\xE1n en el ancho de la ventanilla.",'Las l\xEDneas se ajustar\xE1n en funci\xF3n de la configuraci\xF3n de "#editor.wordWrap#".'],"vs/editor/common/config/editorOptions":["El editor usar\xE1 API de plataforma para detectar cu\xE1ndo est\xE1 conectado un lector de pantalla.","El editor se optimizar\xE1 de forma permanente para su uso con un lector de pantalla. El ajuste de l\xEDneas se deshabilitar\xE1.","El editor nunca se optimizar\xE1 para su uso con un lector de pantalla.","Controla si el editor se debe ejecutar en un modo optimizado para lectores de pantalla. Si se activa, se deshabilitar\xE1 el ajuste de l\xEDneas.","Controla si se inserta un car\xE1cter de espacio al comentar.","Controla si las l\xEDneas vac\xEDas deben ignorarse con la opci\xF3n de alternar, agregar o quitar acciones para los comentarios de l\xEDnea.","Controla si al copiar sin selecci\xF3n se copia la l\xEDnea actual.","Controla si el cursor debe saltar para buscar coincidencias mientras se escribe.","Controla si la cadena de b\xFAsqueda del widget de b\xFAsqueda se inicializa desde la selecci\xF3n del editor.","No activar nunca Buscar en la selecci\xF3n autom\xE1ticamente (predeterminado)","Activar siempre autom\xE1ticamente Buscar en la selecci\xF3n","Active Buscar en la selecci\xF3n autom\xE1ticamente cuando se seleccionen varias l\xEDneas de contenido.","Controla la condici\xF3n para activar la b\xFAsqueda en la selecci\xF3n de forma autom\xE1tica.","Controla si el widget de b\xFAsqueda debe leer o modificar el Portapapeles de b\xFAsqueda compartido en macOS.","Controla si Encontrar widget debe agregar m\xE1s l\xEDneas en la parte superior del editor. Si es true, puede desplazarse m\xE1s all\xE1 de la primera l\xEDnea cuando Encontrar widget est\xE1 visible.","Controla si la b\xFAsqueda se reinicia autom\xE1ticamente desde el principio (o el final) cuando no se encuentran m\xE1s coincidencias.",'Habilita o deshabilita las ligaduras tipogr\xE1ficas (caracter\xEDsticas de fuente "calt" y "liga"). C\xE1mbielo a una cadena para el control espec\xEDfico de la propiedad de CSS "font-feature-settings".','Propiedad de CSS "font-feature-settings" expl\xEDcita. En su lugar, puede pasarse un valor booleano si solo es necesario activar o desactivar las ligaduras.','Configura las ligaduras tipogr\xE1ficas o las caracter\xEDsticas de fuente. Puede ser un valor booleano para habilitar o deshabilitar las ligaduras o bien una cadena para el valor de la propiedad "font-feature-settings" de CSS.',"Controla el tama\xF1o de fuente en p\xEDxeles.",'Solo se permiten las palabras clave "normal" y "negrita" o los n\xFAmeros entre 1 y 1000.','Controla el grosor de la fuente. Acepta las palabras clave "normal" y "negrita" o los n\xFAmeros entre 1 y 1000.',"Mostrar vista de inspecci\xF3n de los resultados (predeterminado)","Ir al resultado principal y mostrar una vista de inspecci\xF3n","Vaya al resultado principal y habilite la navegaci\xF3n sin peek para otros",'Esta configuraci\xF3n est\xE1 en desuso. Use configuraciones separadas como "editor.editor.gotoLocation.multipleDefinitions" o "editor.editor.gotoLocation.multipleImplementations" en su lugar.','Controla el comportamiento del comando "Ir a definici\xF3n" cuando existen varias ubicaciones de destino.','Controla el comportamiento del comando "Ir a definici\xF3n de tipo" cuando existen varias ubicaciones de destino.','Controla el comportamiento del comando "Ir a declaraci\xF3n" cuando existen varias ubicaciones de destino.','Controla el comportamiento del comando "Ir a implementaciones" cuando existen varias ubicaciones de destino.','Controla el comportamiento del comando "Ir a referencias" cuando existen varias ubicaciones de destino.','Identificador de comando alternativo que se ejecuta cuando el resultado de "Ir a definici\xF3n" es la ubicaci\xF3n actual.','Id. de comando alternativo que se est\xE1 ejecutando cuando el resultado de "Ir a definici\xF3n de tipo" es la ubicaci\xF3n actual.','Id. de comando alternativo que se est\xE1 ejecutando cuando el resultado de "Ir a declaraci\xF3n" es la ubicaci\xF3n actual.','Id. de comando alternativo que se est\xE1 ejecutando cuando el resultado de "Ir a implementaci\xF3n" es la ubicaci\xF3n actual.','Identificador de comando alternativo que se ejecuta cuando el resultado de "Ir a referencia" es la ubicaci\xF3n actual.',"Controla si se muestra la informaci\xF3n al mantener el puntero sobre un elemento.","Controla el retardo en milisegundos despu\xE9s del cual se muestra la informaci\xF3n al mantener el puntero sobre un elemento.","Controla si la informaci\xF3n que aparece al mantener el puntero sobre un elemento permanece visible al mover el mouse sobre este.","Habilita la bombilla de acci\xF3n de c\xF3digo en el editor.","Habilita las sugerencias insertadas en el editor.",'Controla el tama\xF1o de fuente de las sugerencias insertadas en el editor. Cuando se establece en "0", se usa el 90\xA0% de "#editor.fontSize#".',"Controla la familia de fuentes de las sugerencias insertadas en el editor.","Controla la altura de l\xEDnea. Usa 0 para utilizar la altura del tama\xF1o de fuente.","Controla si se muestra el minimapa.","El minimapa tiene el mismo tama\xF1o que el contenido del editor (y podr\xEDa desplazarse).","El minimapa se estirar\xE1 o reducir\xE1 seg\xFAn sea necesario para ocupar la altura del editor (sin desplazamiento).","El minimapa se reducir\xE1 seg\xFAn sea necesario para no ser nunca m\xE1s grande que el editor (sin desplazamiento).","Controla el tama\xF1o del minimapa.","Controla en qu\xE9 lado se muestra el minimapa.","Controla cu\xE1ndo se muestra el control deslizante del minimapa.","Escala del contenido dibujado en el minimapa: 1, 2 o 3.","Represente los caracteres reales en una l\xEDnea, por oposici\xF3n a los bloques de color.","Limite el ancho del minimapa para representar como mucho un n\xFAmero de columnas determinado.","Controla la cantidad de espacio entre el borde superior del editor y la primera l\xEDnea.","Controla el espacio entre el borde inferior del editor y la \xFAltima l\xEDnea.","Habilita un elemento emergente que muestra documentaci\xF3n de los par\xE1metros e informaci\xF3n de los tipos mientras escribe.","Controla si el men\xFA de sugerencias de par\xE1metros se cicla o se cierra al llegar al final de la lista.","Habilita sugerencias r\xE1pidas en las cadenas.","Habilita sugerencias r\xE1pidas en los comentarios.","Habilita sugerencias r\xE1pidas fuera de las cadenas y los comentarios.","Controla si deben mostrarse sugerencias autom\xE1ticamente mientras se escribe.","Los n\xFAmeros de l\xEDnea no se muestran.","Los n\xFAmeros de l\xEDnea se muestran como un n\xFAmero absoluto.","Los n\xFAmeros de l\xEDnea se muestran como distancia en l\xEDneas a la posici\xF3n del cursor.","Los n\xFAmeros de l\xEDnea se muestran cada 10 l\xEDneas.","Controla la visualizaci\xF3n de los n\xFAmeros de l\xEDnea.","N\xFAmero de caracteres monoespaciales en los que se representar\xE1 esta regla del editor.","Color de esta regla del editor.","Muestra reglas verticales despu\xE9s de un cierto n\xFAmero de caracteres monoespaciados. Usa m\xFAltiples valores para mostrar m\xFAltiples reglas. Si la matriz est\xE1 vac\xEDa, no se muestran reglas.","Inserte la sugerencia sin sobrescribir el texto a la derecha del cursor.","Inserte la sugerencia y sobrescriba el texto a la derecha del cursor.","Controla si las palabras se sobrescriben al aceptar la finalizaci\xF3n. Tenga en cuenta que esto depende de las extensiones que participan en esta caracter\xEDstica.","Controla si el filtrado y la ordenaci\xF3n de sugerencias se tienen en cuenta para los errores ortogr\xE1ficos peque\xF1os.","Controla si la ordenaci\xF3n de palabras mejora lo que aparece cerca del cursor.",'Controla si las selecciones de sugerencias recordadas se comparten entre m\xFAltiples \xE1reas de trabajo y ventanas (necesita "#editor.suggestSelection#").',"Controla si un fragmento de c\xF3digo activo impide sugerencias r\xE1pidas.","Controla si mostrar u ocultar iconos en sugerencias.","Controla la visibilidad de la barra de estado en la parte inferior del widget de sugerencias.","Controla si los detalles de sugerencia se muestran incorporados con la etiqueta o solo en el widget de detalles.","La configuraci\xF3n est\xE1 en desuso. Ahora puede cambiarse el tama\xF1o del widget de sugerencias.",'Esta configuraci\xF3n est\xE1 en desuso. Use configuraciones separadas como "editor.suggest.showKeyword" o "editor.suggest.showSnippets" en su lugar.','Cuando est\xE1 habilitado, IntelliSense muestra sugerencias de tipo "method".','Cuando est\xE1 habilitado, IntelliSense muestra sugerencias de "funci\xF3n".','Cuando est\xE1 habilitado, IntelliSense muestra sugerencias de tipo "constructor".','Cuando est\xE1 habilitado, IntelliSense muestra sugerencias de tipo "field".','Cuando est\xE1 habilitado, IntelliSense muestra sugerencias de tipo "variable".','Cuando est\xE1 habilitado, IntelliSense muestra sugerencias de tipo "class".','Cuando est\xE1 habilitado, IntelliSense muestra sugerencias de tipo "struct".','Cuando est\xE1 habilitado, IntelliSense muestra sugerencias de tipo "interface".','Cuando est\xE1 habilitado, IntelliSense muestra sugerencias de tipo "module".','Cuando est\xE1 habilitado, IntelliSense muestra sugerencias de tipo "property".','Cuando est\xE1 habilitado, IntelliSense muestra sugerencias de tipo "event".','Cuando est\xE1 habilitado, IntelliSense muestra sugerencias de tipo "operator".','Cuando est\xE1 habilitado, IntelliSense muestra sugerencias de tipo "unit".','Cuando est\xE1 habilitado, IntelliSense muestra sugerencias de "value".','Cuando est\xE1 habilitado, IntelliSense muestra sugerencias de tipo "constant".','Cuando est\xE1 habilitado, IntelliSense muestra sugerencias de tipo "enum".','Cuando est\xE1 habilitado, IntelliSense muestra sugerencias de tipo "enumMember".','Cuando est\xE1 habilitado, IntelliSense muestra sugerencias de tipo "keyword".','Si est\xE1 habilitado, IntelliSense muestra sugerencias de tipo "text".','Cuando est\xE1 habilitado, IntelliSense muestra sugerencias de "color".','Cuando est\xE1 habilitado, IntelliSense muestra sugerencias de tipo "file".','Cuando est\xE1 habilitado, IntelliSense muestra sugerencias de tipo "reference".','Cuando est\xE1 habilitado, IntelliSense muestra sugerencias de tipo "customcolor".','Si est\xE1 habilitado, IntelliSense muestra sugerencias de tipo "folder".','Cuando est\xE1 habilitado, IntelliSense muestra sugerencias de tipo "typeParameter".','Cuando est\xE1 habilitado, IntelliSense muestra sugerencias de tipo "snippet".',"Cuando est\xE1 habilitado, IntelliSense muestra sugerencias del usuario.","Cuando est\xE1 habilitado IntelliSense muestra sugerencias para problemas.","Indica si los espacios en blanco iniciales y finales deben seleccionarse siempre.",'Controla si se deben aceptar sugerencias en los caracteres de confirmaci\xF3n. Por ejemplo, en Javascript, el punto y coma (";") puede ser un car\xE1cter de confirmaci\xF3n que acepta una sugerencia y escribe ese car\xE1cter.','Aceptar solo una sugerencia con "Entrar" cuando realiza un cambio textual.','Controla si las sugerencias deben aceptarse con "Entrar", adem\xE1s de "TAB". Ayuda a evitar la ambig\xFCedad entre insertar nuevas l\xEDneas o aceptar sugerencias.',"Controla el n\xFAmero de l\xEDneas en el editor que puede leer un lector de pantalla. Advertencia: Esto puede afectar al rendimiento de n\xFAmeros superiores al predeterminado.","Contenido del editor","Utilizar las configuraciones del lenguaje para determinar cu\xE1ndo cerrar los corchetes autom\xE1ticamente.","Cerrar autom\xE1ticamente los corchetes cuando el cursor est\xE9 a la izquierda de un espacio en blanco.","Controla si el editor debe cerrar autom\xE1ticamente los corchetes despu\xE9s de que el usuario agregue un corchete de apertura.","Escriba en las comillas o los corchetes solo si se insertaron autom\xE1ticamente.","Controla si el editor debe escribir entre comillas o corchetes.","Utilizar las configuraciones del lenguaje para determinar cu\xE1ndo cerrar las comillas autom\xE1ticamente. ","Cerrar autom\xE1ticamente las comillas cuando el cursor est\xE9 a la izquierda de un espacio en blanco. ","Controla si el editor debe cerrar autom\xE1ticamente las comillas despu\xE9s de que el usuario agrega uma comilla de apertura.","El editor no insertar\xE1 la sangr\xEDa autom\xE1ticamente.","El editor mantendr\xE1 la sangr\xEDa de la l\xEDnea actual.","El editor respetar\xE1 la sangr\xEDa de la l\xEDnea actual y los corchetes definidos por el idioma.","El editor mantendr\xE1 la sangr\xEDa de la l\xEDnea actual, respetar\xE1 los corchetes definidos por el idioma e invocar\xE1 onEnterRules especiales definidos por idiomas.","El editor respetar\xE1 la sangr\xEDa de la l\xEDnea actual, los corchetes definidos por idiomas y las reglas indentationRules definidas por idiomas, adem\xE1s de invocar reglas onEnterRules especiales.","Controla si el editor debe ajustar autom\xE1ticamente la sangr\xEDa mientras los usuarios escriben, pegan, mueven o sangran l\xEDneas.","Use las configuraciones de idioma para determinar cu\xE1ndo delimitar las selecciones autom\xE1ticamente.","Envolver con comillas, pero no con corchetes.","Envolver con corchetes, pero no con comillas.","Controla si el editor debe rodear autom\xE1ticamente las selecciones al escribir comillas o corchetes.","Emule el comportamiento de selecci\xF3n de los caracteres de tabulaci\xF3n al usar espacios para la sangr\xEDa. La selecci\xF3n se aplicar\xE1 a las tabulaciones.","Controla si el editor muestra CodeLens.","Controla la familia de fuentes para CodeLens.",'Controla el tama\xF1o de fuente de CodeLens en p\xEDxeles. Cuando se establece en "0", se usa el 90\xA0% de "#editor.fontSize#".',"Controla si el editor debe representar el Selector de colores y los elementos Decorator de color en l\xEDnea.","Habilite que la selecci\xF3n con el mouse y las teclas est\xE9 realizando la selecci\xF3n de columnas.","Controla si el resaltado de sintaxis debe ser copiado al portapapeles.","Controla el estilo de animaci\xF3n del cursor.","Controla si la animaci\xF3n suave del cursor debe estar habilitada.","Controla el estilo del cursor.",'Controla el n\xFAmero m\xEDnimo de l\xEDneas iniciales y finales visibles que rodean al cursor. En algunos otros editores, se conoce como "scrollOff" o "scrollOffset".','Solo se aplica "cursorSurroundingLines" cuando se desencadena mediante el teclado o la API.','"cursorSurroundingLines" se aplica siempre.','Controla cuando se debe aplicar "cursorSurroundingLines".','Controla el ancho del cursor cuando "#editor.cursorStyle#" se establece en "line".',"Controla si el editor debe permitir mover las selecciones mediante arrastrar y colocar.",'Multiplicador de la velocidad de desplazamiento al presionar "Alt".',"Controla si el editor tiene el plegado de c\xF3digo habilitado.","Utilice una estrategia de plegado espec\xEDfica del idioma, si est\xE1 disponible, de lo contrario la basada en sangr\xEDa.","Utilice la estrategia de plegado basada en sangr\xEDa.","Controla la estrategia para calcular rangos de plegado.","Controla si el editor debe destacar los rangos plegados.","Controla si al hacer clic en el contenido vac\xEDo despu\xE9s de una l\xEDnea plegada se desplegar\xE1 la l\xEDnea.","Controla la familia de fuentes.","Controla si el editor debe dar formato autom\xE1ticamente al contenido pegado. Debe haber disponible un formateador capaz de aplicar formato a un rango dentro de un documento. ","Controla si el editor debe dar formato a la l\xEDnea autom\xE1ticamente despu\xE9s de escribirla.","Controla si el editor debe representar el margen de glifo vertical. El margen de glifo se usa, principalmente, para depuraci\xF3n.","Controla si el cursor debe ocultarse en la regla de informaci\xF3n general.","Controla si el editor debe resaltar la gu\xEDa de sangr\xEDa activa.","Controla el espacio entre letras en p\xEDxeles.","Controla si el editor tiene habilitada la edici\xF3n vinculada. Dependiendo del lenguaje, los s\xEDmbolos relacionados (por ejemplo, las etiquetas HTML) se actualizan durante la edici\xF3n.","Controla si el editor debe detectar v\xEDnculos y hacerlos interactivos.","Resaltar par\xE9ntesis coincidentes.",'Se usar\xE1 un multiplicador en los eventos de desplazamiento de la rueda del mouse "deltaX" y "deltaY". ','Ampliar la fuente del editor cuando se use la rueda del mouse mientras se presiona "Ctrl".',"Combinar varios cursores cuando se solapan.",'Se asigna a "Control" en Windows y Linux y a "Comando" en macOS.','Se asigna a "Alt" en Windows y Linux y a "Opci\xF3n" en macOS.',"El modificador que se usar\xE1 para agregar varios cursores con el mouse. Los gestos del mouse Ir a definici\xF3n y Abrir v\xEDnculo se adaptar\xE1n de modo que no entren en conflicto con el modificador multicursor. [M\xE1s informaci\xF3n](https://code.visualstudio.com/docs/editor/codebasics#_multicursor-modifier).","Cada cursor pega una \xFAnica l\xEDnea del texto.","Cada cursor pega el texto completo.","Controla el pegado cuando el recuento de l\xEDneas del texto pegado coincide con el recuento de cursores.","Controla si el editor debe resaltar las apariciones de s\xEDmbolos sem\xE1nticos.","Controla si debe dibujarse un borde alrededor de la regla de informaci\xF3n general.","Enfocar el \xE1rbol al abrir la inspecci\xF3n","Enfocar el editor al abrir la inspecci\xF3n","Controla si se debe enfocar el editor en l\xEDnea o el \xE1rbol en el widget de vista.","Controla si el gesto del mouse Ir a definici\xF3n siempre abre el widget interactivo.","Controla el retraso, en milisegundos, tras el cual aparecer\xE1n sugerencias r\xE1pidas.","Controla si el editor cambia el nombre autom\xE1ticamente en el tipo.",'En desuso. Utilice "editor.linkedEditing" en su lugar.',"Controla si el editor debe representar caracteres de control.","Controla si el editor debe representar gu\xEDas de sangr\xEDa.","Representar el n\xFAmero de la \xFAltima l\xEDnea cuando el archivo termina con un salto de l\xEDnea.","Resalta el medianil y la l\xEDnea actual.","Controla c\xF3mo debe representar el editor el resaltado de l\xEDnea actual.","Controla si el editor debe representar el resaltado de la l\xEDnea actual solo cuando el editor est\xE1 enfocado","Representa caracteres de espacio en blanco, excepto los espacios individuales entre palabras.","Represente los caracteres de espacio en blanco solo en el texto seleccionado.","Representar solo los caracteres de espacio en blanco al final","Controla la forma en que el editor debe representar los caracteres de espacio en blanco.","Controla si las selecciones deber\xEDan tener las esquinas redondeadas.","Controla el n\xFAmero de caracteres adicionales a partir del cual el editor se desplazar\xE1 horizontalmente.","Controla si el editor seguir\xE1 haciendo scroll despu\xE9s de la \xFAltima l\xEDnea.","Despl\xE1cese solo a lo largo del eje predominante cuando se desplace vertical y horizontalmente al mismo tiempo. Evita la deriva horizontal cuando se desplaza verticalmente en un trackpad.","Controla si el portapapeles principal de Linux debe admitirse.","Controla si el editor debe destacar las coincidencias similares a la selecci\xF3n.","Mostrar siempre los controles de plegado.","Mostrar solo los controles de plegado cuando el mouse est\xE1 sobre el medianil.","Controla cu\xE1ndo se muestran los controles de plegado en el medianil.","Controla el fundido de salida del c\xF3digo no usado.","Controla las variables en desuso tachadas.","Mostrar sugerencias de fragmentos de c\xF3digo por encima de otras sugerencias.","Mostrar sugerencias de fragmentos de c\xF3digo por debajo de otras sugerencias.","Mostrar sugerencias de fragmentos de c\xF3digo con otras sugerencias.","No mostrar sugerencias de fragmentos de c\xF3digo.","Controla si se muestran los fragmentos de c\xF3digo con otras sugerencias y c\xF3mo se ordenan.","Controla si el editor se desplazar\xE1 con una animaci\xF3n.","Tama\xF1o de la fuente para el widget de sugerencias. Cuando se establece a `0`, se utilizar\xE1 el valor `#editor.fontSize#`.",'Altura de la l\xEDnea del widget de sugerencias. Cuando se establece en "0", se usa el valor "#editor.lineHeight#". El valor m\xEDnimo es 8.',"Controla si deben aparecer sugerencias de forma autom\xE1tica al escribir caracteres desencadenadores.","Seleccionar siempre la primera sugerencia.",'Seleccione sugerencias recientes a menos que al escribir m\xE1s se seleccione una, por ejemplo, "console.| -> console.log" porque "log" se ha completado recientemente.','Seleccione sugerencias basadas en prefijos anteriores que han completado esas sugerencias, por ejemplo, "co -> console" y "con -> const".',"Controla c\xF3mo se preseleccionan las sugerencias cuando se muestra la lista,","La pesta\xF1a se completar\xE1 insertando la mejor sugerencia de coincidencia encontrada al presionar la pesta\xF1a","Deshabilitar los complementos para pesta\xF1as.","La pesta\xF1a se completa con fragmentos de c\xF3digo cuando su prefijo coincide. Funciona mejor cuando las 'quickSuggestions' no est\xE1n habilitadas.","Habilita completar pesta\xF1as.","Los terminadores de l\xEDnea no habituales se quitan autom\xE1ticamente.","Los terminadores de l\xEDnea no habituales se omiten.","Advertencia de terminadores de l\xEDnea inusuales que se quitar\xE1n.","Quite los terminadores de l\xEDnea inusuales que podr\xEDan provocar problemas.","La inserci\xF3n y eliminaci\xF3n del espacio en blanco sigue a las tabulaciones.","Caracteres que se usar\xE1n como separadores de palabras al realizar operaciones o navegaciones relacionadas con palabras.","Las l\xEDneas no se ajustar\xE1n nunca.","Las l\xEDneas se ajustar\xE1n en el ancho de la ventanilla.",'Las l\xEDneas se ajustar\xE1n al valor de "#editor.wordWrapColumn#". ','Las l\xEDneas se ajustar\xE1n al valor que sea inferior: el tama\xF1o de la ventanilla o el valor de "#editor.wordWrapColumn#".',"Controla c\xF3mo deben ajustarse las l\xEDneas.",'Controla la columna de ajuste del editor cuando "#editor.wordWrap#" es "wordWrapColumn" o "bounded".',"No hay sangr\xEDa. Las l\xEDneas ajustadas comienzan en la columna 1.","A las l\xEDneas ajustadas se les aplica la misma sangr\xEDa que al elemento primario.","A las l\xEDneas ajustadas se les aplica una sangr\xEDa de +1 respecto al elemento primario.","A las l\xEDneas ajustadas se les aplica una sangr\xEDa de +2 respecto al elemento primario.","Controla la sangr\xEDa de las l\xEDneas ajustadas.","Se supone que todos los caracteres son del mismo ancho. Este es un algoritmo r\xE1pido que funciona correctamente para fuentes monoespaciales y ciertos scripts (como caracteres latinos) donde los glifos tienen el mismo ancho.","Delega el c\xE1lculo de puntos de ajuste en el explorador. Es un algoritmo lento, que podr\xEDa causar bloqueos para archivos grandes, pero funciona correctamente en todos los casos.","Controla el algoritmo que calcula los puntos de ajuste."],"vs/editor/common/editorContextKeys":["Si el texto del editor tiene el foco (el cursor parpadea)","Si el editor o un widget del editor tiene el foco (por ejemplo, el foco est\xE1 en el widget de b\xFAsqueda)","Si un editor o una entrada de texto enriquecido tienen el foco (el cursor parpadea)","Si el editor es de solo lectura","Si el contexto es un editor de diferencias",'Si "editor.columnSelection" se ha habilitado',"Si el editor tiene texto seleccionado","Si el editor tiene varias selecciones",'Si "Tabulaci\xF3n" mover\xE1 el foco fuera del editor',"Si el mantenimiento del puntero del editor es visible","Si el editor forma parte de otro m\xE1s grande (por ejemplo, blocs de notas)","Identificador de idioma del editor","Si el editor tiene un proveedor de elementos de finalizaci\xF3n","Si el editor tiene un proveedor de acciones de c\xF3digo","Si el editor tiene un proveedor de CodeLens","Si el editor tiene un proveedor de definiciones","Si el editor tiene un proveedor de declaraciones","Si el editor tiene un proveedor de implementaci\xF3n","Si el editor tiene un proveedor de definiciones de tipo","Si el editor tiene un proveedor de contenido con mantenimiento del puntero","Si el editor tiene un proveedor de resaltado de documentos","Si el editor tiene un proveedor de s\xEDmbolos de documentos","Si el editor tiene un proveedor de referencia","Si el editor tiene un proveedor de cambio de nombre","Si el editor tiene un proveedor de ayuda de signatura","Si el editor tiene un proveedor de sugerencias insertadas","Si el editor tiene un proveedor de formatos de documento","Si el editor tiene un proveedor de formatos de selecci\xF3n de documentos","Si el editor tiene varios proveedores de formatos del documento","Si el editor tiene varios proveedores de formato de la selecci\xF3n de documentos"],"vs/editor/common/model/editStack":["Escribiendo"],"vs/editor/common/modes/modesRegistry":["Texto sin formato"],"vs/editor/common/standaloneStrings":["Sin selecci\xF3n","L\xEDnea {0}, columna {1} ({2} seleccionadas)","L\xEDnea {0}, columna {1}","{0} selecciones ({1} caracteres seleccionados)","{0} selecciones",'Se cambiar\xE1 ahora el valor "accessibilitySupport" a "activado".',"Se abrir\xE1 ahora la p\xE1gina de documentaci\xF3n de accesibilidad del editor.","en un panel de solo lectura de un editor de diferencias.","en un panel de un editor de diferencias.","en un editor de c\xF3digo de solo lectura"," en un editor de c\xF3digo","Para configurar el editor de forma que se optimice su uso con un lector de pantalla, presione ahora Comando+E.","Para configurar el editor de forma que se optimice su uso con un lector de pantalla, presione ahora Control+E.","El editor est\xE1 configurado para optimizarse para su uso con un lector de pantalla.","El editor est\xE1 configurado para que no se optimice nunca su uso con un lector de pantalla, que en este momento no es el caso.","Al presionar TAB en el editor actual, el foco se mueve al siguiente elemento activable. Presione {0} para activar o desactivar este comportamiento.","Al presionar TAB en el editor actual, el foco se mueve al siguiente elemento activable. El comando {0} no se puede desencadenar actualmente mediante un enlace de teclado.","Al presionar TAB en el editor actual, se insertar\xE1 el car\xE1cter de tabulaci\xF3n. Presione {0} para activar o desactivar este comportamiento.","Al presionar TAB en el editor actual, se insertar\xE1 el car\xE1cter de tabulaci\xF3n. El comando {0} no se puede desencadenar actualmente mediante un enlace de teclado.","Presione ahora Comando+H para abrir una ventana del explorador con m\xE1s informaci\xF3n relacionada con la accesibilidad del editor.","Presione ahora Control+H para abrir una ventana del explorador con m\xE1s informaci\xF3n relacionada con la accesibilidad del editor.","Para descartar esta informaci\xF3n sobre herramientas y volver al editor, presione Esc o May\xFAs+Escape.","Mostrar ayuda de accesibilidad","Desarrollador: inspeccionar tokens","Vaya a L\xEDnea/Columna...","Mostrar todos los proveedores de acceso r\xE1pido","Paleta de comandos","Mostrar y ejecutar comandos","Ir a s\xEDmbolo...","Ir a s\xEDmbolo por categor\xEDa...","Contenido del editor","Presione Alt+F1 para ver las opciones de accesibilidad.","Alternar tema de contraste alto","{0} ediciones realizadas en {1} archivos"],"vs/editor/common/view/editorColorRegistry":["Color de fondo para la l\xEDnea resaltada en la posici\xF3n del cursor.","Color de fondo del borde alrededor de la l\xEDnea en la posici\xF3n del cursor.","Color de fondo de rangos resaltados, como en abrir r\xE1pido y encontrar caracter\xEDsticas. El color no debe ser opaco para no ocultar decoraciones subyacentes.","Color de fondo del borde alrededor de los intervalos resaltados.","Color de fondo del s\xEDmbolo destacado, como Ir a definici\xF3n o Ir al siguiente/anterior s\xEDmbolo. El color no debe ser opaco para no ocultar la decoraci\xF3n subyacente.","Color de fondo del borde alrededor de los s\xEDmbolos resaltados.","Color del cursor del editor.","Color de fondo del cursor de edici\xF3n. Permite personalizar el color del caracter solapado por el bloque del cursor.","Color de los caracteres de espacio en blanco del editor.","Color de las gu\xEDas de sangr\xEDa del editor.","Color de las gu\xEDas de sangr\xEDa activas del editor.","Color de n\xFAmeros de l\xEDnea del editor.","Color del n\xFAmero de l\xEDnea activa en el editor","ID es obsoleto. Usar en lugar 'editorLineNumber.activeForeground'. ","Color del n\xFAmero de l\xEDnea activa en el editor","Color de las reglas del editor","Color principal de lentes de c\xF3digo en el editor","Color de fondo tras corchetes coincidentes","Color de bloques con corchetes coincidentes","Color del borde de la regla de visi\xF3n general.","Color de fondo de la regla de informaci\xF3n general del editor. Solo se usa cuando el minimapa est\xE1 habilitado y est\xE1 ubicado en el lado derecho del editor.","Color de fondo del margen del editor. Este espacio contiene los m\xE1rgenes de glifos y los n\xFAmeros de l\xEDnea.","Color del borde de c\xF3digo fuente innecesario (sin usar) en el editor.",`Opacidad de c\xF3digo fuente innecesario (sin usar) en el editor. Por ejemplo, "#000000c0" representar\xE1 el c\xF3digo con un 75 % de opacidad. Para temas de alto contraste, utilice el color del tema 'editorUnnecessaryCode.border' para resaltar el c\xF3digo innecesario en vez de atenuarlo.`,"Color de marcador de regla general para los destacados de rango. El color no debe ser opaco para no ocultar las decoraciones subyacentes.","Color de marcador de regla de informaci\xF3n general para errores. ","Color de marcador de regla de informaci\xF3n general para advertencias.","Color de marcador de regla de informaci\xF3n general para mensajes informativos. "],"vs/editor/contrib/anchorSelect/anchorSelect":["Delimitador de la selecci\xF3n","Delimitador establecido en {0}:{1}","Establecer el delimitador de la selecci\xF3n","Ir al delimitador de la selecci\xF3n","Seleccionar desde el delimitador hasta el cursor","Cancelar el delimitador de la selecci\xF3n"],"vs/editor/contrib/bracketMatching/bracketMatching":["Resumen color de marcador de regla para corchetes.","Ir al corchete","Seleccionar para corchete","Ir al &&corchete"],"vs/editor/contrib/caretOperations/caretOperations":["Mover el texto seleccionado a la izquierda","Mover el texto seleccionado a la derecha"],"vs/editor/contrib/caretOperations/transpose":["Transponer letras"],"vs/editor/contrib/clipboard/clipboard":["Cor&&tar","Cortar","Cortar","&&Copiar","Copiar","Copiar","&&Pegar","Pegar","Pegar","Copiar con resaltado de sintaxis"],"vs/editor/contrib/codeAction/codeActionCommands":["Tipo de la acci\xF3n de c\xF3digo que se va a ejecutar.","Controla cu\xE1ndo se aplican las acciones devueltas.","Aplicar siempre la primera acci\xF3n de c\xF3digo devuelto.","Aplicar la primera acci\xF3n de c\xF3digo devuelta si solo hay una.","No aplique las acciones de c\xF3digo devuelto.","Controla si solo se deben devolver las acciones de c\xF3digo preferidas.","Se ha producido un error desconocido al aplicar la acci\xF3n de c\xF3digo","Correcci\xF3n R\xE1pida","No hay acciones de c\xF3digo disponibles",'No hay acciones de c\xF3digo preferidas para "{0}" disponibles','No hay ninguna acci\xF3n de c\xF3digo para "{0}" disponible.',"No hay acciones de c\xF3digo preferidas disponibles","No hay acciones de c\xF3digo disponibles","Refactorizar...",'No hay refactorizaciones preferidas de "{0}" disponibles','No hay refactorizaciones de "{0}" disponibles',"No hay ninguna refactorizaci\xF3n favorita disponible.","No hay refactorizaciones disponibles","Acci\xF3n de Origen...",'No hay acciones de origen preferidas para "{0}" disponibles','No hay ninguna acci\xF3n de origen para "{0}" disponible.',"No hay ninguna acci\xF3n de origen favorita disponible.","No hay acciones de origen disponibles","Organizar Importaciones","No hay acciones de importaci\xF3n disponibles","Corregir todo","No est\xE1 disponible la acci\xF3n de corregir todo","Corregir autom\xE1ticamente...","No hay autocorrecciones disponibles"],"vs/editor/contrib/codeAction/lightBulbWidget":["Mostrar correcciones. Soluci\xF3n preferida disponible ({0})","Mostrar correcciones ({0})","Mostrar correcciones"],"vs/editor/contrib/codelens/codelensController":["Mostrar comandos de lente de c\xF3digo para la l\xEDnea actual"],"vs/editor/contrib/comment/comment":["Alternar comentario de l\xEDnea","&&Alternar comentario de l\xEDnea","Agregar comentario de l\xEDnea","Quitar comentario de l\xEDnea","Alternar comentario de bloque","Alternar &&bloque de comentario"],"vs/editor/contrib/contextmenu/contextmenu":["Mostrar men\xFA contextual del editor"],"vs/editor/contrib/cursorUndo/cursorUndo":["Cursor Deshacer","Cursor Rehacer"],"vs/editor/contrib/find/findController":["Buscar","&&Buscar","Buscar con selecci\xF3n","Buscar siguiente","Buscar siguiente","Buscar anterior","Buscar anterior","Buscar selecci\xF3n siguiente","Buscar selecci\xF3n anterior","Reemplazar","&&Reemplazar"],"vs/editor/contrib/find/findWidget":['Icono para "Buscar en selecci\xF3n" en el widget de b\xFAsqueda del editor.',"Icono para indicar que el widget de b\xFAsqueda del editor est\xE1 contra\xEDdo.","Icono para indicar que el widget de b\xFAsqueda del editor est\xE1 expandido.",'Icono para "Reemplazar" en el widget de b\xFAsqueda del editor.','Icono para "Reemplazar todo" en el widget de b\xFAsqueda del editor.','Icono para "Buscar anterior" en el widget de b\xFAsqueda del editor.','Icono para "Buscar siguiente" en el widget de b\xFAsqueda del editor.',"Buscar","Buscar","Coincidencia anterior","Pr\xF3xima coincidencia","Buscar en selecci\xF3n","Cerrar","Reemplazar","Reemplazar","Reemplazar","Reemplazar todo","Alternar modo de reemplazar","S\xF3lo los primeros {0} resultados son resaltados, pero todas las operaciones de b\xFAsqueda trabajan en todo el texto.","{0} de {1}","No hay resultados","Encontrados: {0}",'{0} encontrado para "{1}"','{0} encontrado para "{1}", en {2}','{0} encontrado para "{1}"',"Ctrl+Entrar ahora inserta un salto de l\xEDnea en lugar de reemplazar todo. Puede modificar el enlace de claves para editor.action.replaceAll para invalidar este comportamiento."],"vs/editor/contrib/folding/folding":["Desplegar","Desplegar de forma recursiva","Plegar","Alternar plegado","Plegar de forma recursiva","Cerrar todos los comentarios de bloque","Plegar todas las regiones","Desplegar Todas las Regiones","Plegar todo","Desplegar todo","Nivel de plegamiento {0}","Color de fondo detr\xE1s de los rangos plegados. El color no debe ser opaco para no ocultar las decoraciones subyacentes.","Color del control plegable en el medianil del editor."],"vs/editor/contrib/folding/foldingDecorations":["Icono de rangos expandidos en el margen de glifo del editor.","Icono de rangos contra\xEDdos en el margen de glifo del editor."],"vs/editor/contrib/fontZoom/fontZoom":["Acercarse a la tipograf\xEDa del editor","Alejarse de la tipograf\xEDa del editor","Restablecer alejamiento de la tipograf\xEDa del editor"],"vs/editor/contrib/format/format":["1 edici\xF3n de formato en la l\xEDnea {0}","{0} ediciones de formato en la l\xEDnea {1}","1 edici\xF3n de formato entre las l\xEDneas {0} y {1}","{0} ediciones de formato entre las l\xEDneas {1} y {2}"],"vs/editor/contrib/format/formatActions":["Dar formato al documento","Dar formato a la selecci\xF3n"],"vs/editor/contrib/gotoError/gotoError":["Ir al siguiente problema (Error, Advertencia, Informaci\xF3n)","Icono para ir al marcador siguiente.","Ir al problema anterior (Error, Advertencia, Informaci\xF3n)","Icono para ir al marcador anterior.","Ir al siguiente problema en Archivos (Error, Advertencia, Informaci\xF3n)","Siguiente &&problema","Ir al problema anterior en Archivos (Error, Advertencia, Informaci\xF3n)","Anterior &&problema"],"vs/editor/contrib/gotoError/gotoErrorWidget":["Error","Advertencia","Informaci\xF3n","Sugerencia","{0} en {1}. ","{0} de {1} problemas","{0} de {1} problema","Color de los errores del widget de navegaci\xF3n de marcadores del editor.","Color de las advertencias del widget de navegaci\xF3n de marcadores del editor.","Color del widget informativo marcador de navegaci\xF3n en el editor.","Fondo del widget de navegaci\xF3n de marcadores del editor."],"vs/editor/contrib/gotoSymbol/goToCommands":["Ver","Definiciones",'No se encontr\xF3 ninguna definici\xF3n para "{0}"',"No se encontr\xF3 ninguna definici\xF3n","Ir a definici\xF3n","Ir a &&definici\xF3n","Abrir definici\xF3n en el lateral","Ver la definici\xF3n sin salir","Declaraciones","No se encontr\xF3 ninguna definici\xF3n para '{0}'","No se encontr\xF3 ninguna declaraci\xF3n","Ir a Definici\xF3n","Ir a &&Declaraci\xF3n","No se encontr\xF3 ninguna definici\xF3n para '{0}'","No se encontr\xF3 ninguna declaraci\xF3n","Inspeccionar Definici\xF3n","Definiciones de tipo",'No se encontr\xF3 ninguna definici\xF3n de tipo para "{0}"',"No se encontr\xF3 ninguna definici\xF3n de tipo","Ir a la definici\xF3n de tipo","Ir a la definici\xF3n de &&tipo","Inspeccionar definici\xF3n de tipo","Implementaciones",'No se encontr\xF3 ninguna implementaci\xF3n para "{0}"',"No se encontr\xF3 ninguna implementaci\xF3n","Ir a Implementaciones","Ir a &&Implementaciones","Inspeccionar implementaciones",'No se ha encontrado ninguna referencia para "{0}".',"No se encontraron referencias","Ir a Referencias","Ir a &&Referencias","Referencias","Inspeccionar Referencias","Referencias","Ir a cualquier s\xEDmbolo","Ubicaciones",'No hay resultados para "{0}"',"Referencias"],"vs/editor/contrib/gotoSymbol/link/goToDefinitionAtPosition":["Haga clic para mostrar {0} definiciones."],"vs/editor/contrib/gotoSymbol/peek/referencesController":["Cargando...","{0} ({1})"],"vs/editor/contrib/gotoSymbol/peek/referencesTree":["{0} referencias","{0} referencia","Referencias"],"vs/editor/contrib/gotoSymbol/peek/referencesWidget":["vista previa no disponible","No hay resultados","Referencias"],"vs/editor/contrib/gotoSymbol/referencesModel":["s\xEDmbolo en {0} linea {1} en la columna {2}","s\xEDmbolo en {0} l\xEDnea {1} en la columna {2}, {3}","1 s\xEDmbolo en {0}, ruta de acceso completa {1}","{0} s\xEDmbolos en {1}, ruta de acceso completa {2}","No se encontraron resultados","Encontr\xF3 1 s\xEDmbolo en {0}","Encontr\xF3 {0} s\xEDmbolos en {1}","Encontr\xF3 {0} s\xEDmbolos en {1} archivos"],"vs/editor/contrib/gotoSymbol/symbolNavigation":["S\xEDmbolo {0} de {1}, {2} para el siguiente","S\xEDmbolo {0} de {1}"],"vs/editor/contrib/hover/hover":["Mostrar al mantener el puntero","Mostrar vista previa de la definici\xF3n que aparece al mover el puntero"],"vs/editor/contrib/hover/markdownHoverParticipant":["Cargando..."],"vs/editor/contrib/hover/markerHoverParticipant":["Ver el problema","No hay correcciones r\xE1pidas disponibles","Buscando correcciones r\xE1pidas...","No hay correcciones r\xE1pidas disponibles","Correcci\xF3n R\xE1pida"],"vs/editor/contrib/inPlaceReplace/inPlaceReplace":["Reemplazar con el valor anterior","Reemplazar con el valor siguiente"],"vs/editor/contrib/indentation/indentation":["Convertir sangr\xEDa en espacios","Convertir sangr\xEDa en tabulaciones","Tama\xF1o de tabulaci\xF3n configurado","Seleccionar tama\xF1o de tabulaci\xF3n para el archivo actual","Aplicar sangr\xEDa con tabulaciones","Aplicar sangr\xEDa con espacios","Detectar sangr\xEDa del contenido","Volver a aplicar sangr\xEDa a l\xEDneas","Volver a aplicar sangr\xEDa a l\xEDneas seleccionadas"],"vs/editor/contrib/linesOperations/linesOperations":["Copiar l\xEDnea arriba","&&Copiar l\xEDnea arriba","Copiar l\xEDnea abajo","Co&&piar l\xEDnea abajo","Selecci\xF3n duplicada","&&Duplicar selecci\xF3n","Mover l\xEDnea hacia arriba","Mo&&ver l\xEDnea arriba","Mover l\xEDnea hacia abajo","Mover &&l\xEDnea abajo","Ordenar l\xEDneas en orden ascendente","Ordenar l\xEDneas en orden descendente","Recortar espacio final","Eliminar l\xEDnea","Sangr\xEDa de l\xEDnea","Anular sangr\xEDa de l\xEDnea","Insertar l\xEDnea arriba","Insertar l\xEDnea debajo","Eliminar todo a la izquierda","Eliminar todo lo que est\xE1 a la derecha","Unir l\xEDneas","Transponer caracteres alrededor del cursor","Transformar a may\xFAsculas","Transformar a min\xFAsculas","Transformar en Title Case","Transformar en Snake Case"],"vs/editor/contrib/linkedEditing/linkedEditing":["Iniciar edici\xF3n vinculada","Color de fondo cuando el editor cambia el nombre autom\xE1ticamente al escribir."],"vs/editor/contrib/links/links":["Ejecutar comando","Seguir v\xEDnculo","cmd + clic","ctrl + clic","opci\xF3n + clic","alt + clic","Ejecutar el comando {0}","No se pudo abrir este v\xEDnculo porque no tiene un formato correcto: {0}","No se pudo abrir este v\xEDnculo porque falta el destino.","Abrir v\xEDnculo"],"vs/editor/contrib/message/messageController":["Indica si el editor muestra actualmente un mensaje insertado","No se puede editar en un editor de s\xF3lo lectura"],"vs/editor/contrib/multicursor/multicursor":["Agregar cursor arriba","&&Agregar cursor arriba","Agregar cursor debajo","A&&gregar cursor abajo","A\xF1adir cursores a finales de l\xEDnea","Agregar c&&ursores a extremos de l\xEDnea","A\xF1adir cursores a la parte inferior","A\xF1adir cursores a la parte superior","Agregar selecci\xF3n hasta la siguiente coincidencia de b\xFAsqueda","Agregar &&siguiente repetici\xF3n","Agregar selecci\xF3n hasta la anterior coincidencia de b\xFAsqueda","Agregar r&&epetici\xF3n anterior","Mover \xFAltima selecci\xF3n hasta la siguiente coincidencia de b\xFAsqueda","Mover \xFAltima selecci\xF3n hasta la anterior coincidencia de b\xFAsqueda","Seleccionar todas las repeticiones de coincidencia de b\xFAsqueda","Seleccionar todas las &&repeticiones","Cambiar todas las ocurrencias"],"vs/editor/contrib/parameterHints/parameterHints":["Sugerencias para par\xE1metros Trigger"],"vs/editor/contrib/parameterHints/parameterHintsWidget":["Icono para mostrar la sugerencia de par\xE1metro siguiente.","Icono para mostrar la sugerencia de par\xE1metro anterior.","{0}, sugerencia"],"vs/editor/contrib/peekView/peekView":["Cerrar","Color de fondo del \xE1rea de t\xEDtulo de la vista de inspecci\xF3n.","Color del t\xEDtulo de la vista de inpecci\xF3n.","Color de la informaci\xF3n del t\xEDtulo de la vista de inspecci\xF3n.","Color de los bordes y la flecha de la vista de inspecci\xF3n.","Color de fondo de la lista de resultados de vista de inspecci\xF3n.","Color de primer plano de los nodos de inspecci\xF3n en la lista de resultados.","Color de primer plano de los archivos de inspecci\xF3n en la lista de resultados.","Color de fondo de la entrada seleccionada en la lista de resultados de vista de inspecci\xF3n.","Color de primer plano de la entrada seleccionada en la lista de resultados de vista de inspecci\xF3n.","Color de fondo del editor de vista de inspecci\xF3n.","Color de fondo del margen en el editor de vista de inspecci\xF3n.","Buscar coincidencia con el color de resaltado de la lista de resultados de vista de inspecci\xF3n.","Buscar coincidencia del color de resultado del editor de vista de inspecci\xF3n.","Hacer coincidir el borde resaltado en el editor de vista previa."],"vs/editor/contrib/quickAccess/gotoLineQuickAccess":["Abra primero un editor de texto para ir a una l\xEDnea.","Vaya a la l\xEDnea {0} y a la columna {1}.","Ir a la l\xEDnea {0}.","L\xEDnea actual: {0}, Car\xE1cter: {1}. Escriba un n\xFAmero de l\xEDnea entre 1 y {2} a los que navegar.","L\xEDnea actual: {0}, Car\xE1cter: {1}. Escriba un n\xFAmero de l\xEDnea al que navegar."],"vs/editor/contrib/quickAccess/gotoSymbolQuickAccess":["Para ir a un s\xEDmbolo, primero abra un editor de texto con informaci\xF3n de s\xEDmbolo.","El editor de texto activo no proporciona informaci\xF3n de s\xEDmbolos.","No hay ning\xFAn s\xEDmbolo del editor coincidente.","No hay s\xEDmbolos del editor.","Abrir en el lateral","Abrir en la parte inferior","s\xEDmbolos ({0})","propiedades ({0})","m\xE9todos ({0})","funciones ({0})","constructores ({0})","variables ({0})","clases ({0})","estructuras ({0})","eventos ({0})","operadores ({0})","interfaces ({0})","espacios de nombres ({0})","paquetes ({0})","par\xE1metros de tipo ({0})","m\xF3dulos ({0})","propiedades ({0})","enumeraciones ({0})","miembros de enumeraci\xF3n ({0})","cadenas ({0})","archivos ({0})","matrices ({0})","n\xFAmeros ({0})","booleanos ({0})","objetos ({0})","claves ({0})","campos ({0})","constantes ({0})"],"vs/editor/contrib/rename/rename":["No hay ning\xFAn resultado.","Error desconocido al resolver el cambio de nombre de la ubicaci\xF3n",'Cambiando el nombre de "{0}"',"Cambiar el nombre de {0}","Nombre cambiado correctamente de '{0}' a '{1}'. Resumen: {2}","No se pudo cambiar el nombre a las ediciones de aplicaci\xF3n","No se pudo cambiar el nombre de las ediciones de c\xE1lculo","Cambiar el nombre del s\xEDmbolo","Activar/desactivar la capacidad de previsualizar los cambios antes de cambiar el nombre"],"vs/editor/contrib/rename/renameInputField":["Cambie el nombre de la entrada. Escriba el nuevo nombre y presione Entrar para confirmar.","{0} para cambiar de nombre, {1} para obtener una vista previa"],"vs/editor/contrib/smartSelect/smartSelect":["Expandir selecci\xF3n","&&Expandir selecci\xF3n","Reducir la selecci\xF3n","&&Reducir selecci\xF3n"],"vs/editor/contrib/snippet/snippetVariables":["Domingo","Lunes","Martes","Mi\xE9rcoles","Jueves","Viernes","S\xE1bado","Dom","Lun","Mar","Mi\xE9","Jue","Vie","S\xE1b","Enero","Febrero","Marzo","Abril","May","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre","Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],"vs/editor/contrib/suggest/suggestController":['Aceptando "{0}" ediciones adicionales de {1} realizadas',"Sugerencias para Trigger","Insertar","Insertar","Reemplazar","Reemplazar","Insertar","mostrar menos","mostrar m\xE1s","Restablecer tama\xF1o del widget de sugerencias"],"vs/editor/contrib/suggest/suggestWidget":["Color de fondo del widget sugerido.","Color de borde del widget sugerido.","Color de primer plano del widget sugerido.","Color de fondo de la entrada seleccionada del widget sugerido.","Color del resaltado coincidido en el widget sugerido.","Cargando...","No hay sugerencias.","{0}, documentos: {1}","Sugerir"],"vs/editor/contrib/suggest/suggestWidgetDetails":["Cerrar","Cargando..."],"vs/editor/contrib/suggest/suggestWidgetRenderer":["Icono para obtener m\xE1s informaci\xF3n en el widget de sugerencias.","Leer m\xE1s"],"vs/editor/contrib/suggest/suggestWidgetStatus":["{0} ({1})"],"vs/editor/contrib/symbolIcons/symbolIcons":["Color de primer plano de los s\xEDmbolos de matriz. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos booleanos. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos de clase. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos de color. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos constantes. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos de constructor. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos de enumerador. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos de miembro del enumerador. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos de evento. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos de campo. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos de archivo. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos de carpeta. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos de funci\xF3n. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos de interfaz. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos de claves. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos de palabra clave. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos de m\xE9todo. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos de m\xF3dulo. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos de espacio de nombres. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos nulos. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano para los s\xEDmbolos num\xE9ricos. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos de objeto. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano para los s\xEDmbolos del operador. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos de paquete. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos de propiedad. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos de referencia. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos de fragmento de c\xF3digo. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos de cadena. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos de estructura. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos de texto. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano para los s\xEDmbolos de par\xE1metro de tipo. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos de unidad. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias.","Color de primer plano de los s\xEDmbolos variables. Estos s\xEDmbolos aparecen en el contorno, la ruta de navegaci\xF3n y el widget de sugerencias."],"vs/editor/contrib/toggleTabFocusMode/toggleTabFocusMode":["Alternar tecla de tabulaci\xF3n para mover el punto de atenci\xF3n","Presionando la pesta\xF1a ahora mover\xE1 el foco al siguiente elemento enfocable.","Presionando la pesta\xF1a ahora insertar\xE1 el car\xE1cter de tabulaci\xF3n"],"vs/editor/contrib/tokenization/tokenization":["Desarrollador: forzar nueva aplicaci\xF3n de token"],"vs/editor/contrib/unusualLineTerminators/unusualLineTerminators":["Terminadores de l\xEDnea inusuales","Se han detectado terminadores de l\xEDnea inusuales",`Este archivo contiene uno o varios caracteres de terminador de l\xEDnea inusuales, como Separador de l\xEDneas (LS) o Separador de p\xE1rrafos (PS).\r +\r +Se recomienda quitarlos del archivo. Se puede configurar a trav\xE9s de "editor.unusualLineTerminators".`,"Corregir este archivo","Ignorar problema para este archivo"],"vs/editor/contrib/wordHighlighter/wordHighlighter":["Color de fondo de un s\xEDmbolo durante el acceso de lectura, como la lectura de una variable. El color no debe ser opaco para no ocultar decoraciones subyacentes.","Color de fondo de un s\xEDmbolo durante el acceso de escritura, como escribir en una variable. El color no debe ser opaco para no ocultar las decoraciones subyacentes.","Color de fondo de un s\xEDmbolo durante el acceso de lectura; por ejemplo, cuando se lee una variable.","Color de fondo de un s\xEDmbolo durante el acceso de escritura; por ejemplo, cuando se escribe una variable.","Color del marcador de regla general para destacados de s\xEDmbolos. El color no debe ser opaco para no ocultar decoraciones subyacentes.","Color de marcador de regla general para destacados de s\xEDmbolos de acceso de escritura. El color no debe ser opaco para no ocultar las decoraciones subyacentes.","Ir al siguiente s\xEDmbolo destacado","Ir al s\xEDmbolo destacado anterior","Desencadenar los s\xEDmbolos destacados"],"vs/editor/contrib/wordOperations/wordOperations":["Eliminar palabra"],"vs/platform/actions/browser/menuEntryActionViewItem":["{0} ({1})"],"vs/platform/configuration/common/configurationRegistry":["La configuraci\xF3n del lenguaje predeterminada se reemplaza","Establecer los valores de configuraci\xF3n que se reemplazar\xE1n para un lenguaje.","Esta configuraci\xF3n no admite la configuraci\xF3n por idioma.","No se puede registrar una propiedad vac\xEDa.",`No se puede registrar "{0}". Coincide con el patr\xF3n de propiedad '\\\\[.*\\\\]$' para describir la configuraci\xF3n del editor espec\xEDfica del lenguaje. Utilice la contribuci\xF3n "configurationDefaults".`,'No se puede registrar "{0}". Esta propiedad ya est\xE1 registrada.'],"vs/platform/contextkey/browser/contextKeyService":["Comando que devuelve informaci\xF3n sobre las claves de contexto"],"vs/platform/contextkey/common/contextkeys":["Si el sistema operativo es Windows"],"vs/platform/keybinding/common/abstractKeybindingService":["Se presion\xF3 ({0}). Esperando la siguiente tecla...","La combinaci\xF3n de claves ({0}, {1}) no es un comando."],"vs/platform/list/browser/listService":["\xC1rea de trabajo",'Se asigna a "Control" en Windows y Linux y a "Comando" en macOS.','Se asigna a "Alt" en Windows y Linux y a "Opci\xF3n" en macOS.',"El modificador que se utilizar\xE1 para agregar un elemento en los \xE1rboles y listas para una selecci\xF3n m\xFAltiple con el rat\xF3n (por ejemplo en el explorador, abiertos editores y vista de scm). Los gestos de rat\xF3n 'Abrir hacia' - si est\xE1n soportados - se adaptar\xE1n de forma tal que no tenga conflicto con el modificador m\xFAltiple.","Controla c\xF3mo abrir elementos en los \xE1rboles y las listas mediante el mouse (si se admite). Tenga en cuenta que algunos \xE1rboles y listas pueden optar por ignorar esta configuraci\xF3n si no es aplicable.","Controla si las listas y los \xE1rboles admiten el desplazamiento horizontal en el \xE1rea de trabajo. Advertencia: La activaci\xF3n de esta configuraci\xF3n repercute en el rendimiento.","Controla la sangr\xEDa de \xE1rbol en p\xEDxeles.","Controla si el \xE1rbol debe representar gu\xEDas de sangr\xEDa.","Controla si las listas y los \xE1rboles tienen un desplazamiento suave.","La navegaci\xF3n simple del teclado se centra en elementos que coinciden con la entrada del teclado. El emparejamiento se hace solo en prefijos.","Destacar la navegaci\xF3n del teclado resalta los elementos que coinciden con la entrada del teclado. M\xE1s arriba y abajo la navegaci\xF3n atravesar\xE1 solo los elementos destacados.","La navegaci\xF3n mediante el teclado de filtro filtrar\xE1 y ocultar\xE1 todos los elementos que no coincidan con la entrada del teclado.","Controla el estilo de navegaci\xF3n del teclado para listas y \xE1rboles en el \xE1rea de trabajo. Puede ser simple, resaltar y filtrar.",'Controla si la navegaci\xF3n del teclado en listas y \xE1rboles se activa autom\xE1ticamente simplemente escribiendo. Si se establece en "false", la navegaci\xF3n con el teclado solo se activa al ejecutar el comando "list.toggleKeyboardNavigation", para el cual puede asignar un m\xE9todo abreviado de teclado.',"Controla c\xF3mo se expanden las carpetas de \xE1rbol al hacer clic en sus nombres. Tenga en cuenta que algunos \xE1rboles y listas pueden optar por omitir esta configuraci\xF3n si no es aplicable."],"vs/platform/markers/common/markers":["Error","Advertencia","Informaci\xF3n"],"vs/platform/quickinput/browser/commandsQuickAccess":["{0}, {1}","usado recientemente","otros comandos",'El comando "{0}" dio lugar a un error ({1})'],"vs/platform/quickinput/browser/helpQuickAccess":["comandos globales","comandos del editor","{0}, {1}"],"vs/platform/theme/common/colorRegistry":["Color de primer plano general. Este color solo se usa si un componente no lo invalida.","Color de primer plano general para los mensajes de erroe. Este color solo se usa si un componente no lo invalida.","El color predeterminado para los iconos en el \xE1rea de trabajo.","Color de borde de los elementos con foco. Este color solo se usa si un componente no lo invalida.","Un borde adicional alrededor de los elementos para separarlos unos de otros y as\xED mejorar el contraste.","Un borde adicional alrededor de los elementos activos para separarlos unos de otros y as\xED mejorar el contraste.","Color de primer plano para los v\xEDnculos en el texto.","Color de fondo para los bloques de c\xF3digo en el texto.","Color de sombra de los widgets dentro del editor, como buscar/reemplazar","Fondo de cuadro de entrada.","Primer plano de cuadro de entrada.","Borde de cuadro de entrada.","Color de borde de opciones activadas en campos de entrada.","Color de fondo de las opciones activadas en los campos de entrada.","Color de primer plano de las opciones activadas en los campos de entrada.","Color de fondo de validaci\xF3n de entrada para gravedad de informaci\xF3n.","Color de primer plano de validaci\xF3n de entrada para informaci\xF3n de gravedad.","Color de borde de validaci\xF3n de entrada para gravedad de informaci\xF3n.","Color de fondo de validaci\xF3n de entrada para gravedad de advertencia.","Color de primer plano de validaci\xF3n de entrada para informaci\xF3n de advertencia.","Color de borde de validaci\xF3n de entrada para gravedad de advertencia.","Color de fondo de validaci\xF3n de entrada para gravedad de error.","Color de primer plano de validaci\xF3n de entrada para informaci\xF3n de error.","Color de borde de valdaci\xF3n de entrada para gravedad de error.","Fondo de lista desplegable.","Primer plano de lista desplegable.","Color de primer plano del bot\xF3n.","Color de fondo del bot\xF3n.","Color de fondo del bot\xF3n al mantener el puntero.","Color de fondo de la insignia. Las insignias son peque\xF1as etiquetas de informaci\xF3n, por ejemplo los resultados de un n\xFAmero de resultados.","Color de primer plano de la insignia. Las insignias son peque\xF1as etiquetas de informaci\xF3n, por ejemplo los resultados de un n\xFAmero de resultados.","Sombra de la barra de desplazamiento indica que la vista se ha despazado.","Color de fondo de control deslizante de barra de desplazamiento.","Color de fondo de barra de desplazamiento cursor cuando se pasar sobre el control.","Color de fondo de la barra de desplazamiento al hacer clic.","Color de fondo para la barra de progreso que se puede mostrar para las operaciones de larga duraci\xF3n.","Color de fondo del texto de error del editor. El color no debe ser opaco para no ocultar las decoraciones subyacentes.","Color de primer plano de squigglies de error en el editor.","Color del borde de los cuadros de error en el editor.","Color de fondo del texto de advertencia del editor. El color no debe ser opaco para no ocultar las decoraciones subyacentes.","Color de primer plano de squigglies de advertencia en el editor.","Color del borde de los cuadros de advertencia en el editor.","Color de fondo del texto de informaci\xF3n del editor. El color no debe ser opaco para no ocultar las decoraciones subyacentes.","Color de primer plano de los subrayados ondulados informativos en el editor.","Color del borde de los cuadros de informaci\xF3n en el editor.","Color de primer plano de pista squigglies en el editor.","Color del borde de los cuadros de sugerencia en el editor.","Color de fondo del editor.","Color de primer plano predeterminado del editor.","Color de fondo del editor de widgets como buscar/reemplazar","Color de primer plano de los widgets del editor, como buscar y reemplazar.","Color de borde de los widgets del editor. El color solo se usa si el widget elige tener un borde y no invalida el color.","Color del borde de la barra de cambio de tama\xF1o de los widgets del editor. El color se utiliza solo si el widget elige tener un borde de cambio de tama\xF1o y si un widget no invalida el color.","Color de fondo del selector r\xE1pido. El widget del selector r\xE1pido es el contenedor para selectores como la paleta de comandos.","Color de primer plano del selector r\xE1pido. El widget del selector r\xE1pido es el contenedor para selectores como la paleta de comandos.","Color de fondo del t\xEDtulo del selector r\xE1pido. El widget del selector r\xE1pido es el contenedor para selectores como la paleta de comandos.","Color de fondo del selector r\xE1pido para el elemento con el foco.","Selector de color r\xE1pido para la agrupaci\xF3n de etiquetas.","Selector de color r\xE1pido para la agrupaci\xF3n de bordes.","Color de la selecci\xF3n del editor.","Color del texto seleccionado para alto contraste.","Color de la selecci\xF3n en un editor inactivo. El color no debe ser opaco para no ocultar decoraciones subyacentes.","Color en las regiones con el mismo contenido que la selecci\xF3n. El color no debe ser opaco para no ocultar decoraciones subyacentes.","Color de borde de las regiones con el mismo contenido que la selecci\xF3n.","Color de la coincidencia de b\xFAsqueda actual.","Color de los otros resultados de la b\xFAsqueda. El color no debe ser opaco para no ocultar las decoraciones subyacentes.","Color de la gama que limita la b\xFAsqueda. El color no debe ser opaco para no ocultar decoraciones subyacentes.","Color de borde de la coincidencia de b\xFAsqueda actual.","Color de borde de otra b\xFAsqueda que coincide.","Color del borde de la gama que limita la b\xFAsqueda. El color no debe ser opaco para no ocultar las decoraciones subyacentes.","Destacar debajo de la palabra para la que se muestra un mensaje al mantener el mouse. El color no debe ser opaco para no ocultar decoraciones subyacentes.","Color de fondo al mantener el puntero en el editor.","Color de primer plano al mantener el puntero en el editor.","Color del borde al mantener el puntero en el editor.","Color de fondo de la barra de estado al mantener el puntero en el editor.","Color de los v\xEDnculos activos.","Color de primer plano de las sugerencias insertadas","Color de fondo de las sugerencias insertadas","El color utilizado para el icono de bombilla de acciones.","El color utilizado para el icono de la bombilla de acciones de correcci\xF3n autom\xE1tica.","Color de fondo para el texto que se insert\xF3. El color no debe ser opaco para no ocultar las decoraciones subyacentes.","Color de fondo para el texto que se elimin\xF3. El color no debe ser opaco para no ocultar decoraciones subyacentes.","Color de contorno para el texto insertado.","Color de contorno para el texto quitado.","Color del borde entre ambos editores de texto.","Color de relleno diagonal del editor de diferencias. El relleno diagonal se usa en las vistas de diferencias en paralelo.","Color de fondo de la lista o el \xE1rbol del elemento con el foco cuando la lista o el \xE1rbol est\xE1n activos. Una lista o un \xE1rbol tienen el foco del teclado cuando est\xE1n activos, cuando est\xE1n inactivos no.","Color de primer plano de la lista o el \xE1rbol del elemento con el foco cuando la lista o el \xE1rbol est\xE1n activos. Una lista o un \xE1rbol tienen el foco del teclado cuando est\xE1n activos, cuando est\xE1n inactivos no.","Color de contorno de la lista o el \xE1rbol del elemento con el foco cuando la lista o el \xE1rbol est\xE1n activos. Una lista o un \xE1rbol tienen el foco del teclado cuando est\xE1n activos, pero no cuando est\xE1n inactivos.","Color de fondo de la lista o el \xE1rbol del elemento seleccionado cuando la lista o el \xE1rbol est\xE1n activos. Una lista o un \xE1rbol tienen el foco del teclado cuando est\xE1n activos, cuando est\xE1n inactivos no.","Color de primer plano de la lista o el \xE1rbol del elemento seleccionado cuando la lista o el \xE1rbol est\xE1n activos. Una lista o un \xE1rbol tienen el foco del teclado cuando est\xE1n activos, cuando est\xE1n inactivos no.","Color de fondo de la lista o el \xE1rbol del elemento seleccionado cuando la lista o el \xE1rbol est\xE1n inactivos. Una lista o un \xE1rbol tienen el foco del teclado cuando est\xE1n activos, cuando est\xE1n inactivos no.","Color de primer plano de la lista o el \xE1rbol del elemento con el foco cuando la lista o el \xE1rbol esta inactiva. Una lista o un \xE1rbol tiene el foco del teclado cuando est\xE1 activo, cuando esta inactiva no.","Color de fondo de la lista o el \xE1rbol del elemento con el foco cuando la lista o el \xE1rbol est\xE1n inactivos. Una lista o un \xE1rbol tienen el foco del teclado cuando est\xE1n activos, pero no cuando est\xE1n inactivos.","Color de contorno de la lista o el \xE1rbol del elemento con el foco cuando la lista o el \xE1rbol est\xE1n inactivos. Una lista o un \xE1rbol tienen el foco del teclado cuando est\xE1n activos, pero no cuando est\xE1n inactivos.","Fondo de la lista o el \xE1rbol al mantener el mouse sobre los elementos.","Color de primer plano de la lista o el \xE1rbol al pasar por encima de los elementos con el rat\xF3n.","Fondo de arrastrar y colocar la lista o el \xE1rbol al mover los elementos con el mouse.","Color de primer plano de la lista o el \xE1rbol de las coincidencias resaltadas al buscar dentro de la lista o el \xE1bol.","Color de fondo del widget de filtro de tipo en listas y \xE1rboles.","Color de contorno del widget de filtro de tipo en listas y \xE1rboles.","Color de contorno del widget de filtro de tipo en listas y \xE1rboles, cuando no hay coincidencias.","Color de trazo de \xE1rbol para las gu\xEDas de sangr\xEDa.","Color de trazo de \xE1rbol para las gu\xEDas de sangr\xEDa.","Color del borde de los men\xFAs.","Color de primer plano de los elementos de men\xFA.","Color de fondo de los elementos de men\xFA.","Color de primer plano del menu para el elemento del men\xFA seleccionado.","Color de fondo del menu para el elemento del men\xFA seleccionado.","Color del borde del elemento seleccionado en los men\xFAs.","Color del separador del menu para un elemento del men\xFA.","Resaltado del color de fondo para una ficha de un fragmento de c\xF3digo.","Resaltado del color del borde para una ficha de un fragmento de c\xF3digo.","Resaltado del color de fondo para la \xFAltima ficha de un fragmento de c\xF3digo.","Resaltado del color del borde para la \xFAltima tabulaci\xF3n de un fragmento de c\xF3digo.","Color del marcador de regla general para buscar actualizaciones. El color no debe ser opaco para no ocultar las decoraciones subyacentes.","Color del marcador de la regla general para los destacados de la selecci\xF3n. El color no debe ser opaco para no ocultar las decoraciones subyacentes.","Color de marcador de minimapa para coincidencias de b\xFAsqueda.","Color del marcador de minimapa para la selecci\xF3n del editor.","Color del marcador de minimapa para errores.","Color del marcador de minimapa para advertencias.","Color de fondo del minimapa.","Color de fondo del deslizador del minimapa.","Color de fondo del deslizador del minimapa al pasar el puntero.","Color de fondo del deslizador de minimapa al hacer clic en \xE9l.","Color utilizado para el icono de error de problemas.","Color utilizado para el icono de advertencia de problemas.","Color utilizado para el icono de informaci\xF3n de problemas."],"vs/platform/theme/common/iconRegistry":["Identificador de la fuente que se va a usar. Si no se establece, se usa la fuente definida en primer lugar.","Car\xE1cter de fuente asociado a la definici\xF3n del icono.","Icono de la acci\xF3n de cierre en los widgets."],"vs/platform/undoRedo/common/undoRedoService":["Se han cerrado los siguientes archivos y se han modificado en el disco: {0}.","Los siguientes archivos se han modificado de forma incompatible: {0}.",'No se pudo deshacer "{0}" en todos los archivos. {1}','No se pudo deshacer "{0}" en todos los archivos. {1}','No se pudo deshacer "{0}" en todos los archivos porque se realizaron cambios en {1}','No se pudo deshacer "{0}" en todos los archivos porque ya hay una operaci\xF3n de deshacer o rehacer en ejecuci\xF3n en {1}','No se pudo deshacer "{0}" en todos los archivos porque se produjo una operaci\xF3n de deshacer o rehacer mientras tanto','\xBFDesea deshacer "{0}" en todos los archivos?',"Deshacer en {0} archivos","Deshacer este archivo","Cancelar",'No se pudo deshacer "{0}" porque ya hay una operaci\xF3n de deshacer o rehacer en ejecuci\xF3n.','\xBFQuiere deshacer "{0}"?',"Deshacer","Cancelar",'No se pudo rehacer "{0}" en todos los archivos. {1}','No se pudo rehacer "{0}" en todos los archivos. {1}','No se pudo volver a hacer "{0}" en todos los archivos porque se realizaron cambios en {1}','No se pudo rehacer "{0}" en todos los archivos porque ya hay una operaci\xF3n de deshacer o rehacer en ejecuci\xF3n en {1}','No se pudo rehacer "{0}" en todos los archivos porque se produjo una operaci\xF3n de deshacer o rehacer mientras tanto','No se pudo rehacer "{0}" porque ya hay una operaci\xF3n de deshacer o rehacer en ejecuci\xF3n.']}); diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/editor/editor.main.nls.fr.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/editor/editor.main.nls.fr.js new file mode 100644 index 0000000000..d16d576406 --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/editor/editor.main.nls.fr.js @@ -0,0 +1,8 @@ +/*!----------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Version: 0.23.0(82e8ea39fc101d639262435542c7d43bc20d8aa2) + * Released under the MIT license + * https://github.com/microsoft/vscode/blob/main/LICENSE.txt + *-----------------------------------------------------------*/define("vs/editor/editor.main.nls.fr",{"vs/base/browser/ui/actionbar/actionViewItems":["{0} ({1})"],"vs/base/browser/ui/findinput/findInput":["entr\xE9e"],"vs/base/browser/ui/findinput/findInputCheckboxes":["Respecter la casse","Mot entier","Utiliser une expression r\xE9guli\xE8re"],"vs/base/browser/ui/findinput/replaceInput":["entr\xE9e","Pr\xE9server la casse"],"vs/base/browser/ui/iconLabel/iconLabel":["Chargement..."],"vs/base/browser/ui/inputbox/inputBox":["Erreur\xA0: {0}","Avertissement\xA0: {0}","Info\xA0: {0}"],"vs/base/browser/ui/keybindingLabel/keybindingLabel":["Ind\xE9pendant"],"vs/base/browser/ui/menu/menu":["{0} ({1})"],"vs/base/browser/ui/tree/abstractTree":["Effacer","D\xE9sactiver le filtre sur le type","Activer le filtre sur le type","Aucun \xE9l\xE9ment","{0}\xA0\xE9l\xE9ments sur {1} correspondants"],"vs/base/common/actions":["(vide)"],"vs/base/common/errorMessage":["{0}: {1}","Une erreur syst\xE8me s'est produite ({0})","Une erreur inconnue s\u2019est produite. Veuillez consulter le journal pour plus de d\xE9tails.","Une erreur inconnue s\u2019est produite. Veuillez consulter le journal pour plus de d\xE9tails.","{0} ({1}\xA0erreurs au total)","Une erreur inconnue s\u2019est produite. Veuillez consulter le journal pour plus de d\xE9tails."],"vs/base/common/keybindingLabels":["Ctrl","Maj","Alt","Windows","Ctrl","Maj","Alt","Super","Contr\xF4le","Maj","Alt","Commande","Contr\xF4le","Maj","Alt","Windows","Contr\xF4le","Maj","Alt","Super"],"vs/base/parts/quickinput/browser/quickInput":["Pr\xE9c\xE9dent","{0}/{1}","Taper pour affiner les r\xE9sultats.","{0}\xA0r\xE9sultats","{0} S\xE9lectionn\xE9s","OK","Personnalis\xE9","Pr\xE9c\xE9dent ({0})","Pr\xE9c\xE9dent"],"vs/base/parts/quickinput/browser/quickInputList":["Entr\xE9e rapide"],"vs/editor/browser/controller/coreCommands":["Aligner par rapport \xE0 la fin m\xEAme en cas de passage \xE0 des lignes plus longues","Aligner par rapport \xE0 la fin m\xEAme en cas de passage \xE0 des lignes plus longues"],"vs/editor/browser/controller/textAreaHandler":["\xE9diteur","L'\xE9diteur n'est pas accessible pour le moment. Appuyez sur {0} pour voir les options."],"vs/editor/browser/core/keybindingCancellation":["Indique si l'\xE9diteur ex\xE9cute une op\xE9ration annulable, par exemple 'Avoir un aper\xE7u des r\xE9f\xE9rences'"],"vs/editor/browser/editorExtensions":["Ann&&uler","Annuler","&&R\xE9tablir","R\xE9tablir","&&S\xE9lectionner tout","Tout s\xE9lectionner"],"vs/editor/browser/widget/codeEditorWidget":["Le nombre de curseurs a \xE9t\xE9 limit\xE9 \xE0\xA0{0}."],"vs/editor/browser/widget/diffEditorWidget":["\xC9l\xE9ment d\xE9coratif de ligne pour les insertions dans l'\xE9diteur de diff\xE9rences.","\xC9l\xE9ment d\xE9coratif de ligne pour les suppressions dans l'\xE9diteur de diff\xE9rences.","Impossible de comparer les fichiers car l'un d'eux est trop volumineux."],"vs/editor/browser/widget/diffReview":["Ic\xF4ne de l'option Ins\xE9rer dans la revue des diff\xE9rences.","Ic\xF4ne de l'option Supprimer dans la revue des diff\xE9rences.","Ic\xF4ne de l'option Fermer dans la revue des diff\xE9rences.","Fermer","aucune ligne chang\xE9e","1\xA0ligne chang\xE9e","{0}\xA0lignes chang\xE9es","Diff\xE9rence\xA0{0} sur\xA0{1}\xA0: ligne d'origine {2}, {3}, ligne modifi\xE9e {4}, {5}","vide","{0} ligne inchang\xE9e {1}","{0}\xA0ligne d'origine {1}\xA0ligne modifi\xE9e {2}","+ {0}\xA0ligne modifi\xE9e {1}","- {0} ligne d'origine {1}","Acc\xE9der \xE0 la diff\xE9rence suivante","Acc\xE9der la diff\xE9rence pr\xE9c\xE9dente"],"vs/editor/browser/widget/inlineDiffMargin":["Copier les lignes supprim\xE9es","Copier la ligne supprim\xE9e","Copier la ligne supprim\xE9e ({0})","Annuler la modification","Copier la ligne supprim\xE9e ({0})"],"vs/editor/common/config/commonEditorConfig":["\xC9diteur","Le nombre d'espaces auxquels une tabulation est \xE9gale. Ce param\xE8tre est substitu\xE9 bas\xE9 sur le contenu du fichier lorsque `#editor.detectIndentation#` est \xE0 'on'.","Espaces ins\xE9r\xE9s quand vous appuyez sur la touche Tab. Ce param\xE8tre est remplac\xE9 en fonction du contenu du fichier quand '#editor.detectIndentation#' est activ\xE9.","Contr\xF4le si '#editor.tabSize#' et '#editor.insertSpaces#' sont automatiquement d\xE9tect\xE9s lors de l\u2019ouverture d\u2019un fichier en fonction de son contenu.","Supprimer l'espace blanc de fin ins\xE9r\xE9 automatiquement.","Traitement sp\xE9cial des fichiers volumineux pour d\xE9sactiver certaines fonctionnalit\xE9s utilisant beaucoup de m\xE9moire.","Contr\xF4le si la saisie semi-automatique doit \xEAtre calcul\xE9e en fonction des mots pr\xE9sents dans le document.","Sugg\xE8re uniquement des mots dans le document actif.","Sugg\xE8re des mots dans tous les documents ouverts du m\xEAme langage.","Sugg\xE8re des mots dans tous les documents ouverts.","Contr\xF4le la fa\xE7on dont sont calcul\xE9es les compl\xE9tions bas\xE9es sur des mots dans les documents.","Coloration s\xE9mantique activ\xE9e pour tous les th\xE8mes de couleur.","Coloration s\xE9mantique d\xE9sactiv\xE9e pour tous les th\xE8mes de couleur.","La coloration s\xE9mantique est configur\xE9e par le param\xE8tre 'semanticHighlighting' du th\xE8me de couleur actuel.","Contr\xF4le si semanticHighlighting est affich\xE9 pour les langages qui le prennent en charge.","Garder les \xE9diteurs d'aper\xE7u ouverts m\xEAme si l'utilisateur double-clique sur son contenu ou appuie sur la touche \xC9chap. ","Les lignes plus longues que cette valeur ne sont pas tokenis\xE9es pour des raisons de performances","D\xE9lai d'expiration en millisecondes avant annulation du calcul de diff. Utilisez\xA00 pour supprimer le d\xE9lai d'expiration.","Contr\xF4le si l'\xE9diteur de diff\xE9rences affiche les diff\xE9rences en mode c\xF4te \xE0 c\xF4te ou inline.","Quand il est activ\xE9, l'\xE9diteur de diff\xE9rences ignore les changements d'espace blanc de d\xE9but ou de fin.","Contr\xF4le si l'\xE9diteur de diff\xE9rences affiche les indicateurs +/- pour les changements ajout\xE9s/supprim\xE9s .","Contr\xF4le si l'\xE9diteur affiche CodeLens.","Le retour automatique \xE0 la ligne n'est jamais effectu\xE9.","Le retour automatique \xE0 la ligne s'effectue en fonction de la largeur de la fen\xEAtre d'affichage.","Le retour automatique \xE0 la ligne d\xE9pend du param\xE8tre '#editor.wordWrap#'."],"vs/editor/common/config/editorOptions":["L'\xE9diteur utilise les API de la plateforme pour d\xE9tecter si un lecteur d'\xE9cran est attach\xE9.","L'\xE9diteur est optimis\xE9 en permanence pour les lecteurs d'\xE9cran. Le retour automatique \xE0 la ligne est d\xE9sactiv\xE9.","L'\xE9diteur n'est jamais optimis\xE9 pour une utilisation avec un lecteur d'\xE9cran.","Contr\xF4le si l'\xE9diteur doit s'ex\xE9cuter dans un mode optimis\xE9 pour les lecteurs d'\xE9cran. Si la valeur est on, le retour automatique \xE0 la ligne est d\xE9sactiv\xE9.","Contr\xF4le si un espace est ins\xE9r\xE9 pour les commentaires.","Contr\xF4le si les lignes vides doivent \xEAtre ignor\xE9es avec des actions d'activation/de d\xE9sactivation, d'ajout ou de suppression des commentaires de ligne.","Contr\xF4le si la copie sans s\xE9lection permet de copier la ligne actuelle.","Contr\xF4le si le curseur doit sauter pour rechercher les correspondances lors de la saisie.","D\xE9termine si la cha\xEEne de recherche dans le Widget Recherche est initialis\xE9e avec la s\xE9lection de l\u2019\xE9diteur.","Ne jamais activer Rechercher automatiquement dans la s\xE9lection (par d\xE9faut)","Toujours activer Rechercher automatiquement dans la s\xE9lection","Activez Rechercher automatiquement dans la s\xE9lection quand plusieurs lignes de contenu sont s\xE9lectionn\xE9es.","Contr\xF4le la condition d'activation automatique de la recherche dans la s\xE9lection.","D\xE9termine si le Widget Recherche devrait lire ou modifier le presse-papiers de recherche partag\xE9 sur macOS.","Contr\xF4le si le widget Recherche doit ajouter des lignes suppl\xE9mentaires en haut de l'\xE9diteur. Quand la valeur est true, vous pouvez faire d\xE9filer au-del\xE0 de la premi\xE8re ligne si le widget Recherche est visible.","Contr\xF4le si la recherche red\xE9marre automatiquement depuis le d\xE9but (ou la fin) quand il n'existe aucune autre correspondance.","Active/d\xE9sactive les ligatures de police (fonctionnalit\xE9s de police 'calt' et 'liga'). Remplacez ceci par une cha\xEEne pour contr\xF4ler de mani\xE8re pr\xE9cise la propri\xE9t\xE9 CSS 'font-feature-settings'.","Propri\xE9t\xE9 CSS 'font-feature-settings' explicite. Vous pouvez passer une valeur bool\xE9enne \xE0 la place si vous devez uniquement activer/d\xE9sactiver les ligatures.","Configure les ligatures de police ou les fonctionnalit\xE9s de police. Il peut s'agir d'une valeur bool\xE9enne permettant d'activer/de d\xE9sactiver les ligatures, ou d'une cha\xEEne correspondant \xE0 la valeur de la propri\xE9t\xE9 CSS 'font-feature-settings'.","Contr\xF4le la taille de police en pixels.",'Seuls les mots cl\xE9s "normal" et "bold", ou les nombres compris entre\xA01 et\xA01\xA0000 sont autoris\xE9s.',`Contr\xF4le l'\xE9paisseur de police. Accepte les mots cl\xE9s "normal" et "bold", ou les nombres compris entre\xA01 et\xA01\xA0000.`,"Montrer l'aper\xE7u des r\xE9sultats (par d\xE9faut)","Acc\xE9der au r\xE9sultat principal et montrer un aper\xE7u","Acc\xE9der au r\xE9sultat principal et activer l'acc\xE8s sans aper\xE7u pour les autres","Ce param\xE8tre est d\xE9pr\xE9ci\xE9, utilisez des param\xE8tres distincts comme 'editor.editor.gotoLocation.multipleDefinitions' ou 'editor.editor.gotoLocation.multipleImplementations' \xE0 la place.","Contr\xF4le le comportement de la commande 'Atteindre la d\xE9finition' quand plusieurs emplacements cibles existent.","Contr\xF4le le comportement de la commande 'Atteindre la d\xE9finition de type' quand plusieurs emplacements cibles existent.","Contr\xF4le le comportement de la commande 'Atteindre la d\xE9claration' quand plusieurs emplacements cibles existent.","Contr\xF4le le comportement de la commande 'Atteindre les impl\xE9mentations' quand plusieurs emplacements cibles existent.","Contr\xF4le le comportement de la commande 'Atteindre les r\xE9f\xE9rences' quand plusieurs emplacements cibles existent.","ID de commande alternatif ex\xE9cut\xE9 quand le r\xE9sultat de 'Atteindre la d\xE9finition' est l'emplacement actuel.","ID de commande alternatif ex\xE9cut\xE9 quand le r\xE9sultat de 'Atteindre la d\xE9finition de type' est l'emplacement actuel.","ID de commande alternatif ex\xE9cut\xE9 quand le r\xE9sultat de 'Atteindre la d\xE9claration' est l'emplacement actuel.","ID de commande alternatif ex\xE9cut\xE9 quand le r\xE9sultat de 'Atteindre l'impl\xE9mentation' est l'emplacement actuel.","ID de commande alternatif ex\xE9cut\xE9 quand le r\xE9sultat de 'Atteindre la r\xE9f\xE9rence' est l'emplacement actuel.","Contr\xF4le si le pointage est affich\xE9.","Contr\xF4le le d\xE9lai en millisecondes, apr\xE8s lequel le survol est affich\xE9.","Contr\xF4le si le pointage doit rester visible quand la souris est d\xE9plac\xE9e au-dessus.","Active l\u2019ampoule d\u2019action de code dans l\u2019\xE9diteur.","Active les indicateurs inline dans l'\xE9diteur.","Contr\xF4le la taille de police des indicateurs inline dans l'\xE9diteur. Quand la valeur est '0', 90\xA0% de '#editor.fontSize#' est utilis\xE9.","Contr\xF4le la famille de polices des indicateurs inline dans l'\xE9diteur.","Contr\xF4le la hauteur de ligne. Utilisez 0 pour calculer la hauteur de ligne de la taille de la police.","Contr\xF4le si la minimap est affich\xE9e.","Le minimap a la m\xEAme taille que le contenu de l'\xE9diteur (d\xE9filement possible).","Le minimap s'agrandit ou se r\xE9duit selon les besoins pour remplir la hauteur de l'\xE9diteur (pas de d\xE9filement).","Le minimap est r\xE9duit si n\xE9cessaire pour ne jamais d\xE9passer la taille de l'\xE9diteur (pas de d\xE9filement).","Contr\xF4le la taille du minimap.","Contr\xF4le le c\xF4t\xE9 o\xF9 afficher la minimap.","Contr\xF4le quand afficher le curseur du minimap.","\xC9chelle du contenu dessin\xE9 dans le minimap\xA0: 1, 2\xA0ou\xA03.","Afficher les caract\xE8res r\xE9els sur une ligne par opposition aux blocs de couleur.","Limiter la largeur de la minimap pour afficher au plus un certain nombre de colonnes.","Contr\xF4le la quantit\xE9 d\u2019espace entre le bord sup\xE9rieur de l\u2019\xE9diteur et la premi\xE8re ligne.","Contr\xF4le la quantit\xE9 d'espace entre le bord inf\xE9rieur de l'\xE9diteur et la derni\xE8re ligne.","Active une fen\xEAtre contextuelle qui affiche de la documentation sur les param\xE8tres et des informations sur les types \xE0 mesure que vous tapez.","D\xE9termine si le menu de suggestions de param\xE8tres se ferme ou reviens au d\xE9but lorsque la fin de la liste est atteinte.","Activez les suggestions rapides dans les cha\xEEnes.","Activez les suggestions rapides dans les commentaires.","Activez les suggestions rapides en dehors des cha\xEEnes et des commentaires.","Contr\xF4le si les suggestions doivent appara\xEEtre automatiquement pendant la saisie.","Les num\xE9ros de ligne ne sont pas affich\xE9s.","Les num\xE9ros de ligne sont affich\xE9s en nombre absolu.","Les num\xE9ros de ligne sont affich\xE9s sous la forme de distance en lignes \xE0 la position du curseur.","Les num\xE9ros de ligne sont affich\xE9s toutes les 10 lignes.","Contr\xF4le l'affichage des num\xE9ros de ligne.","Nombre de caract\xE8res monospace auxquels cette r\xE8gle d'\xE9diteur effectue le rendu.","Couleur de cette r\xE8gle d'\xE9diteur.","Rendre les r\xE8gles verticales apr\xE8s un certain nombre de caract\xE8res \xE0 espacement fixe. Utiliser plusieurs valeurs pour plusieurs r\xE8gles. Aucune r\xE8gle n'est dessin\xE9e si le tableau est vide.","Ins\xE9rez une suggestion sans remplacer le texte \xE0 droite du curseur.","Ins\xE9rez une suggestion et remplacez le texte \xE0 droite du curseur.","Contr\xF4le si les mots sont remplac\xE9s en cas d'acceptation de la saisie semi-automatique. Notez que cela d\xE9pend des extensions adh\xE9rant \xE0 cette fonctionnalit\xE9.","D\xE9termine si le filtre et le tri des suggestions doivent prendre en compte les fautes de frappes mineures.","Contr\xF4le si le tri favorise trier les mots qui apparaissent pr\xE8s du curseur.","Contr\xF4le si les s\xE9lections de suggestion m\xE9moris\xE9es sont partag\xE9es entre plusieurs espaces de travail et fen\xEAtres (n\xE9cessite '#editor.suggestSelection#').","Contr\xF4le si un extrait de code actif emp\xEAche les suggestions rapides.","Contr\xF4le s'il faut montrer ou masquer les ic\xF4nes dans les suggestions.","Contr\xF4le la visibilit\xE9 de la barre d'\xE9tat en bas du widget de suggestion.","D\xE9termine si les d\xE9tails du widget de suggestion sont inclus dans l'\xE9tiquette ou uniquement dans le widget de d\xE9tails","Ce param\xE8tre est d\xE9pr\xE9ci\xE9. Le widget de suggestion peut d\xE9sormais \xEAtre redimensionn\xE9.","Ce param\xE8tre est d\xE9pr\xE9ci\xE9, veuillez utiliser des param\xE8tres distincts comme 'editor.suggest.showKeywords' ou 'editor.suggest.showSnippets' \xE0 la place.","Si activ\xE9, IntelliSense montre des suggestions de type 'method'.","Si activ\xE9, IntelliSense montre des suggestions de type 'function'.","Si activ\xE9, IntelliSense montre des suggestions de type 'constructor'.","Si activ\xE9, IntelliSense montre des suggestions de type 'field'.","Si activ\xE9, IntelliSense montre des suggestions de type 'variable'.","Si activ\xE9, IntelliSense montre des suggestions de type 'class'.","Si activ\xE9, IntelliSense montre des suggestions de type 'struct'.","Si activ\xE9, IntelliSense montre des suggestions de type 'interface'.","Si activ\xE9, IntelliSense montre des suggestions de type 'module'.","Si activ\xE9, IntelliSense montre des suggestions de type 'property'.","Si activ\xE9, IntelliSense montre des suggestions de type 'event'.","Si activ\xE9, IntelliSense montre des suggestions de type 'operator'.","Si activ\xE9, IntelliSense montre des suggestions de type 'unit'.","Si activ\xE9, IntelliSense montre des suggestions de type 'value'.","Si activ\xE9, IntelliSense montre des suggestions de type 'constant'.","Si activ\xE9, IntelliSense montre des suggestions de type 'enum'.","Si activ\xE9, IntelliSense montre des suggestions de type 'enumMember'.","Si activ\xE9, IntelliSense montre des suggestions de type 'keyword'.","Si activ\xE9, IntelliSense montre des suggestions de type 'text'.","Si activ\xE9, IntelliSense montre des suggestions de type 'color'.","Si activ\xE9, IntelliSense montre des suggestions de type 'file'.","Si activ\xE9, IntelliSense montre des suggestions de type 'reference'.","Si activ\xE9, IntelliSense montre des suggestions de type 'customcolor'.","Si activ\xE9, IntelliSense montre des suggestions de type 'folder'.","Si activ\xE9, IntelliSense montre des suggestions de type 'typeParameter'.","Si activ\xE9, IntelliSense montre des suggestions de type 'snippet'.","Si activ\xE9, IntelliSense montre des suggestions de type 'utilisateur'.","Si activ\xE9, IntelliSense montre des suggestions de type 'probl\xE8mes'.","Indique si les espaces blancs de d\xE9but et de fin doivent toujours \xEAtre s\xE9lectionn\xE9s.","Contr\xF4le si les suggestions doivent \xEAtre accept\xE9es sur les caract\xE8res de validation. Par exemple, en JavaScript, le point-virgule (`;`) peut \xEAtre un caract\xE8re de validation qui accepte une suggestion et tape ce caract\xE8re.","Accepter uniquement une suggestion avec 'Entr\xE9e' quand elle effectue une modification textuelle.","Contr\xF4le si les suggestions sont accept\xE9es apr\xE8s appui sur 'Entr\xE9e', en plus de 'Tab'. Permet d\u2019\xE9viter toute ambigu\xEFt\xE9 entre l\u2019insertion de nouvelles lignes et l'acceptation de suggestions.","Contr\xF4le le nombre de lignes dans l'\xE9diteur qui peuvent \xEAtre lues par un lecteur d'\xE9cran. Avertissement : Ce param\xE8tre a une incidence sur les performances quand le nombre est sup\xE9rieur \xE0 la valeur par d\xE9faut.","Contenu de l'\xE9diteur","Utilisez les configurations de langage pour d\xE9terminer quand fermer automatiquement les parenth\xE8ses.","Fermer automatiquement les parenth\xE8ses uniquement lorsque le curseur est \xE0 gauche de l\u2019espace.","Contr\xF4le si l\u2019\xE9diteur doit fermer automatiquement les parenth\xE8ses quand l\u2019utilisateur ajoute une parenth\xE8se ouvrante.","Tapez avant les guillemets ou les crochets fermants uniquement s'ils sont automatiquement ins\xE9r\xE9s.","Contr\xF4le si l'\xE9diteur doit taper avant les guillemets ou crochets fermants.","Utilisez les configurations de langage pour d\xE9terminer quand fermer automatiquement les guillemets.","Fermer automatiquement les guillemets uniquement lorsque le curseur est \xE0 gauche de l\u2019espace.","Contr\xF4le si l\u2019\xE9diteur doit fermer automatiquement les guillemets apr\xE8s que l\u2019utilisateur ajoute un guillemet ouvrant.","L'\xE9diteur n'ins\xE8re pas de retrait automatiquement.","L'\xE9diteur conserve le retrait de la ligne actuelle.","L'\xE9diteur conserve le retrait de la ligne actuelle et honore les crochets d\xE9finis par le langage.","L'\xE9diteur conserve le retrait de la ligne actuelle, honore les crochets d\xE9finis par le langage et appelle des objets onEnterRules sp\xE9ciaux d\xE9finis par les langages.","L'\xE9diteur conserve le retrait de la ligne actuelle, honore les crochets d\xE9finis par le langage, appelle des objets onEnterRules sp\xE9ciaux d\xE9finis par les langages et honore les objets indentationRules d\xE9finis par les langages.","Contr\xF4le si l'\xE9diteur doit ajuster automatiquement le retrait quand les utilisateurs tapent, collent, d\xE9placent ou mettent en retrait des lignes.","Utilisez les configurations de langue pour d\xE9terminer quand entourer automatiquement les s\xE9lections.","Entourez avec des guillemets et non des crochets.","Entourez avec des crochets et non des guillemets.","Contr\xF4le si l'\xE9diteur doit automatiquement entourer les s\xE9lections quand l'utilisateur tape des guillemets ou des crochets.","\xC9mule le comportement des tabulations pour la s\xE9lection quand des espaces sont utilis\xE9s \xE0 des fins de mise en retrait. La s\xE9lection respecte les taquets de tabulation.","Contr\xF4le si l'\xE9diteur affiche CodeLens.","Contr\xF4le la famille de polices pour CodeLens.","Contr\xF4le la taille de police en pixels pour CodeLens. Quand la valeur est '0', 90\xA0% de '#editor.fontSize#' est utilis\xE9.","Contr\xF4le si l'\xE9diteur doit afficher les \xE9l\xE9ments d\xE9coratifs de couleurs inline et le s\xE9lecteur de couleurs.","Autoriser l'utilisation de la souris et des touches pour s\xE9lectionner des colonnes.","Contr\xF4le si la coloration syntaxique doit \xEAtre copi\xE9e dans le presse-papiers.","Contr\xF4ler le style d\u2019animation du curseur.","Contr\xF4le si l'animation du point d'insertion doit \xEAtre activ\xE9e.","Contr\xF4le le style du curseur.","Contr\xF4le le nombre minimal de lignes de d\xE9but et de fin visibles autour du curseur. \xC9galement appel\xE9 'scrollOff' ou 'scrollOffset' dans d'autres \xE9diteurs.","'cursorSurroundingLines' est appliqu\xE9 seulement s'il est d\xE9clench\xE9 via le clavier ou une API.","'cursorSurroundingLines' est toujours appliqu\xE9.","Contr\xF4le quand 'cursorSurroundingLines' doit \xEAtre appliqu\xE9.","D\xE9termine la largeur du curseur lorsque `#editor.cursorStyle#` est \xE0 `line`.","Contr\xF4le si l\u2019\xE9diteur autorise le d\xE9placement de s\xE9lections par glisser-d\xE9placer.","Multiplicateur de vitesse de d\xE9filement quand vous appuyez sur 'Alt'.","Contr\xF4le si l'\xE9diteur a le pliage de code activ\xE9.","Utilisez une strat\xE9gie de pliage propre \xE0 la langue, si disponible, sinon utilisez la strat\xE9gie bas\xE9e sur le retrait.","Utilisez la strat\xE9gie de pliage bas\xE9e sur le retrait.","Contr\xF4le la strat\xE9gie de calcul des plages de pliage.","Contr\xF4le si l'\xE9diteur doit mettre en \xE9vidence les plages pli\xE9es.","Contr\xF4le si le fait de cliquer sur le contenu vide apr\xE8s une ligne pli\xE9e d\xE9plie la ligne.","Contr\xF4le la famille de polices.","D\xE9termine si l\u2019\xE9diteur doit automatiquement mettre en forme le contenu coll\xE9. Un formateur doit \xEAtre disponible et \xEAtre capable de mettre en forme une plage dans un document.","Contr\xF4le si l\u2019\xE9diteur doit mettre automatiquement en forme la ligne apr\xE8s la saisie.","Contr\xF4le si l'\xE9diteur doit afficher la marge de glyphes verticale. La marge de glyphes sert principalement au d\xE9bogage.","Contr\xF4le si le curseur doit \xEAtre masqu\xE9 dans la r\xE8gle de la vue d\u2019ensemble.","Contr\xF4le si l\u2019\xE9diteur doit mettre en surbrillance le guide de mise en retrait actif.","Contr\xF4le l'espacement des lettres en pixels.","Contr\xF4le si la modification li\xE9e est activ\xE9e dans l'\xE9diteur. En fonction du langage, les symboles associ\xE9s, par exemple les balises HTML, sont mis \xE0 jour durant le processus de modification.","Contr\xF4le si l\u2019\xE9diteur doit d\xE9tecter les liens et les rendre cliquables.","Mettez en surbrillance les crochets correspondants.","Un multiplicateur \xE0 utiliser sur les `deltaX` et `deltaY` des \xE9v\xE9nements de d\xE9filement de roulette de souris.","Faire un zoom sur la police de l'\xE9diteur quand l'utilisateur fait tourner la roulette de la souris tout en maintenant la touche 'Ctrl' enfonc\xE9e.","Fusionnez plusieurs curseurs quand ils se chevauchent.","Mappe vers 'Contr\xF4le' dans Windows et Linux, et vers 'Commande' dans macOS.","Mappe vers 'Alt' dans Windows et Linux, et vers 'Option' dans macOS.","Le modificateur \xE0 utiliser pour ajouter plusieurs curseurs avec la souris. Les gestes de souris Atteindre la d\xE9finition et Ouvrir le lien s'adapteront tels qu\u2019ils n\u2019entrent pas en conflit avec le modificateur multicursor. [Lire la suite] (https://code.visualstudio.com/docs/editor/codebasics#_multicursor-modifier).","Chaque curseur colle une seule ligne de texte.","Chaque curseur colle le texte en entier.","Contr\xF4le le collage quand le nombre de lignes du texte coll\xE9 correspond au nombre de curseurs.","Contr\xF4le si l'\xE9diteur doit mettre en surbrillance les occurrences de symboles s\xE9mantiques.","Contr\xF4le si une bordure doit \xEAtre dessin\xE9e autour de la r\xE8gle de la vue d'ensemble.","Focus sur l'arborescence \xE0 l'ouverture de l'aper\xE7u","Placer le focus sur l'\xE9diteur \xE0 l'ouverture de l'aper\xE7u","Contr\xF4le s'il faut mettre le focus sur l'\xE9diteur inline ou sur l'arborescence dans le widget d'aper\xE7u.","Contr\xF4le si le geste de souris Acc\xE9der \xE0 la d\xE9finition ouvre toujours le widget d'aper\xE7u.","Contr\xF4le le d\xE9lai en millisecondes apr\xE8s lequel des suggestions rapides sont affich\xE9es.","Contr\xF4le si l'\xE9diteur renomme automatiquement selon le type.","D\xE9pr\xE9ci\xE9. Utilisez 'editor.linkedEditing' \xE0 la place.","Contr\xF4le si l\u2019\xE9diteur doit afficher les caract\xE8res de contr\xF4le.","Contr\xF4le si l\u2019\xE9diteur doit afficher les guides de mise en retrait.","Affichez le dernier num\xE9ro de ligne quand le fichier se termine par un saut de ligne.","Met en surbrillance la goutti\xE8re et la ligne actuelle.","Contr\xF4le la fa\xE7on dont l\u2019\xE9diteur doit afficher la mise en surbrillance de la ligne actuelle.","Contr\xF4le si l'\xE9diteur doit afficher la mise en surbrillance de la ligne actuelle seulement quand l'\xE9diteur a le focus","Affiche les espaces blancs \xE0 l'exception des espaces uniques entre les mots.","Afficher les espaces blancs uniquement sur le texte s\xE9lectionn\xE9.","Afficher uniquement les caract\xE8res correspondant aux espaces blancs de fin","Contr\xF4le la fa\xE7on dont l\u2019\xE9diteur doit restituer les caract\xE8res espaces.","Contr\xF4le si les s\xE9lections doivent avoir des angles arrondis.","Contr\xF4le le nombre de caract\xE8res suppl\xE9mentaires, au-del\xE0 duquel l\u2019\xE9diteur d\xE9file horizontalement.","Contr\xF4le si l\u2019\xE9diteur d\xE9file au-del\xE0 de la derni\xE8re ligne.","Faites d\xE9filer uniquement le long de l'axe pr\xE9dominant quand le d\xE9filement est \xE0 la fois vertical et horizontal. Emp\xEAche la d\xE9rive horizontale en cas de d\xE9filement vertical sur un pav\xE9 tactile.","Contr\xF4le si le presse-papiers principal Linux doit \xEAtre pris en charge.","Contr\xF4le si l'\xE9diteur doit mettre en surbrillance les correspondances similaires \xE0 la s\xE9lection.","Affichez toujours les contr\xF4les de pliage.","Affichez uniquement les contr\xF4les de pliage quand la souris est au-dessus de la reliure.","Contr\xF4le quand afficher les contr\xF4les de pliage sur la reliure.","Contr\xF4le la disparition du code inutile.","Contr\xF4le les variables d\xE9pr\xE9ci\xE9es barr\xE9es.","Afficher des suggestions d\u2019extraits au-dessus d\u2019autres suggestions.","Afficher des suggestions d\u2019extraits en-dessous d\u2019autres suggestions.","Afficher des suggestions d\u2019extraits avec d\u2019autres suggestions.","Ne pas afficher de suggestions d\u2019extrait de code.","Contr\xF4le si les extraits de code s'affichent en m\xEAme temps que d'autres suggestions, ainsi que leur mode de tri.","Contr\xF4le si l'\xE9diteur d\xE9file en utilisant une animation.","Taille de la police pour le widget de suggestion. Lorsque la valeur est \xE0 `0`, la valeur de `#editor.fontSize` est utilis\xE9e.","Hauteur de ligne du widget de suggestion. Quand la valeur est '0', la valeur de '#editor.lineHeight#' est utilis\xE9e. La valeur minimale est\xA08.","Contr\xF4le si les suggestions devraient automatiquement s\u2019afficher lorsque vous tapez les caract\xE8res de d\xE9clencheur.","S\xE9lectionnez toujours la premi\xE8re suggestion.","S\xE9lectionnez les suggestions r\xE9centes sauf si une entr\xE9e ult\xE9rieure en a s\xE9lectionn\xE9 une, par ex., 'console.| -> console.log', car 'log' a \xE9t\xE9 effectu\xE9 r\xE9cemment.","S\xE9lectionnez des suggestions en fonction des pr\xE9fixes pr\xE9c\xE9dents qui ont compl\xE9t\xE9 ces suggestions, par ex., 'co -> console' et 'con -> const'.","Contr\xF4le comment les suggestions sont pr\xE9-s\xE9lectionn\xE9s lors de l\u2019affichage de la liste de suggestion.","La compl\xE9tion par tabulation ins\xE9rera la meilleure suggestion lorsque vous appuyez sur tab.","D\xE9sactiver les compl\xE9tions par tabulation.","Compl\xE9ter les extraits de code par tabulation lorsque leur pr\xE9fixe correspond. Fonctionne mieux quand les 'quickSuggestions' ne sont pas activ\xE9es.","Active les compl\xE9tions par tabulation","Les marques de fin de ligne inhabituelles sont automatiquement supprim\xE9es.","Les marques de fin de ligne inhabituelles sont ignor\xE9es.","Les marques de fin de ligne inhabituelles demandent \xE0 \xEAtre supprim\xE9es.","Supprimez les marques de fin de ligne inhabituelles susceptibles de causer des probl\xE8mes.","L'insertion et la suppression des espaces blancs suit les taquets de tabulation.","Caract\xE8res utilis\xE9s comme s\xE9parateurs de mots durant la navigation ou les op\xE9rations bas\xE9es sur les mots","Le retour automatique \xE0 la ligne n'est jamais effectu\xE9.","Le retour automatique \xE0 la ligne s'effectue en fonction de la largeur de la fen\xEAtre d'affichage.","Les lignes seront termin\xE9es \xE0 `#editor.wordWrapColumn#`.","Les lignes seront termin\xE9es au minimum du viewport et `#editor.wordWrapColumn#`.","Contr\xF4le comment les lignes doivent \xEAtre limit\xE9es.","Contr\xF4le la colonne de terminaison de l\u2019\xE9diteur lorsque `#editor.wordWrap#` est \xE0 `wordWrapColumn` ou `bounded`.","Aucune mise en retrait. Les lignes envelopp\xE9es commencent \xE0 la colonne 1.","Les lignes envelopp\xE9es obtiennent la m\xEAme mise en retrait que le parent.","Les lignes justifi\xE9es obtiennent une mise en retrait +1 vers le parent.","Les lignes justifi\xE9es obtiennent une mise en retrait +2 vers le parent. ","Contr\xF4le la mise en retrait des lignes justifi\xE9es.","Suppose que tous les caract\xE8res ont la m\xEAme largeur. Il s'agit d'un algorithme rapide qui fonctionne correctement pour les polices \xE0 espacement fixe et certains scripts (comme les caract\xE8res latins) o\xF9 les glyphes ont la m\xEAme largeur.","D\xE9l\xE8gue le calcul des points de wrapping au navigateur. Il s'agit d'un algorithme lent qui peut provoquer le gel des grands fichiers, mais qui fonctionne correctement dans tous les cas.","Contr\xF4le l'algorithme qui calcule les points de wrapping."],"vs/editor/common/editorContextKeys":["Indique si le texte de l'\xE9diteur a le focus (le curseur clignote)","Indique si l'\xE9diteur ou un widget de l'\xE9diteur a le focus (par exemple, le focus se trouve sur le widget de recherche)","Indique si un \xE9diteur ou une entr\xE9e de texte mis en forme a le focus (le curseur clignote)","Indique si l'\xE9diteur est en lecture seule","Indique si le contexte est celui d'un \xE9diteur de diff\xE9rences","Indique si 'editor.columnSelection' est activ\xE9","Indique si du texte est s\xE9lectionn\xE9 dans l'\xE9diteur","Indique si l'\xE9diteur a plusieurs s\xE9lections","Indique si la touche Tab permet de d\xE9placer le focus hors de l'\xE9diteur","Indique si le pointage de l'\xE9diteur est visible","Indique si l'\xE9diteur fait partie d'un \xE9diteur plus important (par exemple Notebooks)","Identificateur de langage de l'\xE9diteur","Indique si l'\xE9diteur a un fournisseur d'\xE9l\xE9ments de compl\xE9tion","Indique si l'\xE9diteur a un fournisseur d'actions de code","Indique si l'\xE9diteur a un fournisseur d'informations CodeLens","Indique si l'\xE9diteur a un fournisseur de d\xE9finitions","Indique si l'\xE9diteur a un fournisseur de d\xE9clarations","Indique si l'\xE9diteur a un fournisseur d'impl\xE9mentation","Indique si l'\xE9diteur a un fournisseur de d\xE9finitions de type","Indique si l'\xE9diteur a un fournisseur de pointage","Indique si l'\xE9diteur a un fournisseur de mise en surbrillance pour les documents","Indique si l'\xE9diteur a un fournisseur de symboles pour les documents","Indique si l'\xE9diteur a un fournisseur de r\xE9f\xE9rence","Indique si l'\xE9diteur a un fournisseur de renommage","Indique si l'\xE9diteur a un fournisseur d'aide sur les signatures","Indique si l'\xE9diteur a un fournisseur d'indicateurs inline","Indique si l'\xE9diteur a un fournisseur de mise en forme pour les documents","Indique si l'\xE9diteur a un fournisseur de mise en forme de s\xE9lection pour les documents","Indique si l'\xE9diteur a plusieurs fournisseurs de mise en forme pour les documents","Indique si l'\xE9diteur a plusieurs fournisseurs de mise en forme de s\xE9lection pour les documents"],"vs/editor/common/model/editStack":["Frappe en cours"],"vs/editor/common/modes/modesRegistry":["Texte brut"],"vs/editor/common/standaloneStrings":["Aucune s\xE9lection","Ligne {0}, colonne {1} ({2} s\xE9lectionn\xE9)","Ligne {0}, colonne {1}","{0} s\xE9lections ({1} caract\xE8res s\xE9lectionn\xE9s)","{0} s\xE9lections","Remplacement du param\xE8tre 'accessibilitySupport' par 'on'.","Ouverture de la page de documentation sur l'accessibilit\xE9 de l'\xE9diteur.","dans un volet en lecture seule d'un \xE9diteur de diff\xE9rences.","dans un volet d'un \xE9diteur de diff\xE9rences."," dans un \xE9diteur de code en lecture seule"," dans un \xE9diteur de code","Pour configurer l'\xE9diteur de mani\xE8re \xE0 \xEAtre optimis\xE9 en cas d'utilisation d'un lecteur d'\xE9cran, appuyez sur Commande+E maintenant.","Pour configurer l'\xE9diteur de mani\xE8re \xE0 \xEAtre optimis\xE9 en cas d'utilisation d'un lecteur d'\xE9cran, appuyez sur Contr\xF4le+E maintenant.","L'\xE9diteur est configur\xE9 pour \xEAtre optimis\xE9 en cas d'utilisation avec un lecteur d'\xE9cran.","L'\xE9diteur est configur\xE9 pour ne jamais \xEAtre optimis\xE9 en cas d'utilisation avec un lecteur d'\xE9cran, ce qui n'est pas le cas pour le moment.","Appuyez sur Tab dans l'\xE9diteur pour d\xE9placer le focus vers le prochain \xE9l\xE9ment pouvant \xEAtre d\xE9sign\xE9 comme \xE9l\xE9ment actif. Activez ou d\xE9sactivez ce comportement en appuyant sur {0}.","Appuyez sur Tab dans l'\xE9diteur pour d\xE9placer le focus vers le prochain \xE9l\xE9ment pouvant \xEAtre d\xE9sign\xE9 comme \xE9l\xE9ment actif. La commande {0} ne peut pas \xEAtre d\xE9clench\xE9e par une combinaison de touches.","Appuyez sur Tab dans l'\xE9diteur pour ins\xE9rer le caract\xE8re de tabulation. Activez ou d\xE9sactivez ce comportement en appuyant sur {0}.","Appuyez sur Tab dans l'\xE9diteur pour ins\xE9rer le caract\xE8re de tabulation. La commande {0} ne peut pas \xEAtre d\xE9clench\xE9e par une combinaison de touches.","Appuyez sur Commande+H maintenant pour ouvrir une fen\xEAtre de navigateur avec plus d'informations sur l'accessibilit\xE9 de l'\xE9diteur.","Appuyez sur Contr\xF4le+H maintenant pour ouvrir une fen\xEAtre de navigateur avec plus d'informations sur l'accessibilit\xE9 de l'\xE9diteur.","Vous pouvez masquer cette info-bulle et revenir \xE0 l'\xE9diteur en appuyant sur \xC9chap ou Maj+\xC9chap.","Afficher l'aide sur l'accessibilit\xE9","D\xE9veloppeur\xA0: Inspecter les jetons","Acc\xE9der \xE0 la ligne/colonne...","Afficher tous les fournisseurs d'acc\xE8s rapide","Palette de commandes","Commandes d'affichage et d'ex\xE9cution","Acc\xE9der au symbole...","Acc\xE9der au symbole par cat\xE9gorie...","Contenu de l'\xE9diteur","Appuyez sur Alt+F1 pour voir les options d'accessibilit\xE9.","Activer/d\xE9sactiver le th\xE8me \xE0 contraste \xE9lev\xE9","{0} modifications dans {1} fichiers"],"vs/editor/common/view/editorColorRegistry":["Couleur d'arri\xE8re-plan de la mise en surbrillance de la ligne \xE0 la position du curseur.","Couleur d'arri\xE8re-plan de la bordure autour de la ligne \xE0 la position du curseur.","Couleur d'arri\xE8re-plan des plages mises en surbrillance, comme par les fonctionnalit\xE9s de recherche et Quick Open. La couleur ne doit pas \xEAtre opaque pour ne pas masquer les ornements sous-jacents.","Couleur d'arri\xE8re-plan de la bordure autour des plages mises en surbrillance.","Couleur d'arri\xE8re-plan du symbole mis en surbrillance, comme le symbole Atteindre la d\xE9finition ou Suivant/Pr\xE9c\xE9dent. La couleur ne doit pas \xEAtre opaque pour ne pas masquer les d\xE9corations sous-jacentes.","Couleur d'arri\xE8re-plan de la bordure autour des symboles mis en surbrillance.","Couleur du curseur de l'\xE9diteur.","La couleur de fond du curseur de l'\xE9diteur. Permet de personnaliser la couleur d'un caract\xE8re survol\xE9 par un curseur de bloc.","Couleur des espaces blancs dans l'\xE9diteur.","Couleur des rep\xE8res de retrait de l'\xE9diteur.","Couleur des guides d'indentation de l'\xE9diteur actif","Couleur des num\xE9ros de ligne de l'\xE9diteur.","Couleur des num\xE9ros de lignes actives de l'\xE9diteur","L\u2019ID est d\xE9pr\xE9ci\xE9. Utilisez \xE0 la place 'editorLineNumber.activeForeground'.","Couleur des num\xE9ros de lignes actives de l'\xE9diteur","Couleur des r\xE8gles de l'\xE9diteur","Couleur pour les indicateurs CodeLens","Couleur d'arri\xE8re-plan pour les accolades associ\xE9es","Couleur pour le contour des accolades associ\xE9es","Couleur de la bordure de la r\xE8gle d'aper\xE7u.","Couleur d'arri\xE8re-plan de la r\xE8gle d'aper\xE7u de l'\xE9diteur. Utilis\xE9e uniquement quand la minimap est activ\xE9e et plac\xE9e sur le c\xF4t\xE9 droit de l'\xE9diteur.","Couleur de fond pour la bordure de l'\xE9diteur. La bordure contient les marges pour les symboles et les num\xE9ros de ligne.","Couleur de bordure du code source inutile (non utilis\xE9) dans l'\xE9diteur.","Opacit\xE9 du code source inutile (non utilis\xE9) dans l'\xE9diteur. Par exemple, '#000000c0' affiche le code avec une opacit\xE9 de 75\xA0%. Pour les th\xE8mes \xE0 fort contraste, utilisez la couleur de th\xE8me 'editorUnnecessaryCode.border' pour souligner le code inutile au lieu d'utiliser la transparence.","Couleur de marqueur de la r\xE8gle d'aper\xE7u pour la mise en surbrillance des plages. La couleur ne doit pas \xEAtre opaque pour ne pas masquer les ornements sous-jacents.","Couleur du marqueur de la r\xE8gle d'aper\xE7u pour les erreurs.","Couleur du marqueur de la r\xE8gle d'aper\xE7u pour les avertissements.","Couleur du marqueur de la r\xE8gle d'aper\xE7u pour les informations."],"vs/editor/contrib/anchorSelect/anchorSelect":["Ancre de s\xE9lection","Ancre d\xE9finie sur {0}:{1}","D\xE9finir l'ancre de s\xE9lection","Atteindre l'ancre de s\xE9lection","S\xE9lectionner de l'ancre au curseur","Annuler l'ancre de s\xE9lection"],"vs/editor/contrib/bracketMatching/bracketMatching":["Couleur du marqueur de la r\xE8gle d'aper\xE7u pour rechercher des parenth\xE8ses.","Atteindre le crochet","S\xE9lectionner jusqu'au crochet","Acc\xE9der au &&crochet"],"vs/editor/contrib/caretOperations/caretOperations":["D\xE9placer le texte s\xE9lectionn\xE9 \xE0 gauche","D\xE9placer le texte s\xE9lectionn\xE9 \xE0 droite"],"vs/editor/contrib/caretOperations/transpose":["Transposer les lettres"],"vs/editor/contrib/clipboard/clipboard":["Co&&uper","Couper","Couper","&&Copier","Copier","Copier","Co&&ller","Coller","Coller","Copier avec la coloration syntaxique"],"vs/editor/contrib/codeAction/codeActionCommands":["Type d'action de code \xE0 ex\xE9cuter.","Contr\xF4le quand les actions retourn\xE9es sont appliqu\xE9es.","Appliquez toujours la premi\xE8re action de code retourn\xE9e.","Appliquez la premi\xE8re action de code retourn\xE9e si elle est la seule.","N'appliquez pas les actions de code retourn\xE9es.","Contr\xF4le si seules les actions de code par d\xE9faut doivent \xEAtre retourn\xE9es.","Une erreur inconnue s'est produite \xE0 l'application de l'action du code","Correction rapide...","Aucune action de code disponible","Aucune action de code pr\xE9f\xE9r\xE9e n'est disponible pour '{0}'","Aucune action de code disponible pour '{0}'","Aucune action de code par d\xE9faut disponible","Aucune action de code disponible","Remanier...","Aucune refactorisation par d\xE9faut disponible pour '{0}'","Aucune refactorisation disponible pour '{0}'","Aucune refactorisation par d\xE9faut disponible","Aucune refactorisation disponible","Action de la source","Aucune action source par d\xE9faut disponible pour '{0}'","Aucune action source disponible pour '{0}'","Aucune action source par d\xE9faut disponible","Aucune action n'est disponible","Organiser les importations","Aucune action organiser les imports disponible","Tout corriger","Aucune action Tout corriger disponible","Corriger automatiquement...","Aucun correctif automatique disponible"],"vs/editor/contrib/codeAction/lightBulbWidget":["Affichez les corrections. Correction pr\xE9f\xE9r\xE9e disponible ({0})","Afficher les correctifs ({0})","Afficher les correctifs"],"vs/editor/contrib/codelens/codelensController":["Afficher les commandes Code Lens de la ligne actuelle"],"vs/editor/contrib/comment/comment":["Activer/d\xE9sactiver le commentaire de ligne","Afficher/masquer le commen&&taire de ligne","Ajouter le commentaire de ligne","Supprimer le commentaire de ligne","Activer/d\xE9sactiver le commentaire de bloc","Afficher/masquer le commentaire de &&bloc"],"vs/editor/contrib/contextmenu/contextmenu":["Afficher le menu contextuel de l'\xE9diteur"],"vs/editor/contrib/cursorUndo/cursorUndo":["Annulation du curseur","Restauration du curseur"],"vs/editor/contrib/find/findController":["Rechercher","&&Rechercher","Rechercher dans la s\xE9lection","Rechercher suivant","Rechercher suivant","Rechercher pr\xE9c\xE9dent","Rechercher pr\xE9c\xE9dent","S\xE9lection suivante","S\xE9lection pr\xE9c\xE9dente","Remplacer","&&Remplacer"],"vs/editor/contrib/find/findWidget":["Ic\xF4ne de l'option Rechercher dans la s\xE9lection dans le widget de recherche de l'\xE9diteur.","Ic\xF4ne permettant d'indiquer que le widget de recherche de l'\xE9diteur est r\xE9duit.","Ic\xF4ne permettant d'indiquer que le widget de recherche de l'\xE9diteur est d\xE9velopp\xE9.","Ic\xF4ne de l'option Remplacer dans le widget de recherche de l'\xE9diteur.","Ic\xF4ne de l'option Tout remplacer dans le widget de recherche de l'\xE9diteur.","Ic\xF4ne de l'option Rechercher pr\xE9c\xE9dent dans le widget de recherche de l'\xE9diteur.","Ic\xF4ne de l'option Rechercher suivant dans le widget de recherche de l'\xE9diteur.","Rechercher","Rechercher","Correspondance pr\xE9c\xE9dente","Prochaine correspondance","Rechercher dans la s\xE9lection","Fermer","Remplacer","Remplacer","Remplacer","Tout remplacer","Changer le mode de remplacement","Seuls les {0} premiers r\xE9sultats sont mis en \xE9vidence, mais toutes les op\xE9rations de recherche fonctionnent sur l\u2019ensemble du texte.","{0} sur {1}","Aucun r\xE9sultat","{0} trouv\xE9(s)","{0} trouv\xE9 pour '{1}'","{0} trouv\xE9 pour '{1}', sur {2}","{0} trouv\xE9 pour '{1}'","La combinaison Ctrl+Entr\xE9e permet d\xE9sormais d'ajouter un saut de ligne au lieu de tout remplacer. Vous pouvez modifier le raccourci clavier de editor.action.replaceAll pour red\xE9finir le comportement."],"vs/editor/contrib/folding/folding":["D\xE9plier","D\xE9plier de mani\xE8re r\xE9cursive","Plier","Activer/d\xE9sactiver le pliage","Plier de mani\xE8re r\xE9cursive","Replier tous les commentaires de bloc","Replier toutes les r\xE9gions","D\xE9plier toutes les r\xE9gions","Plier tout","D\xE9plier tout","Niveau de pliage {0}","Couleur d'arri\xE8re-plan des gammes pli\xE9es. La couleur ne doit pas \xEAtre opaque pour ne pas cacher les d\xE9corations sous-jacentes.","Couleur du contr\xF4le de pliage dans la marge de l'\xE9diteur."],"vs/editor/contrib/folding/foldingDecorations":["Ic\xF4ne des plages d\xE9velopp\xE9es dans la marge de glyphes de l'\xE9diteur.","Ic\xF4ne des plages r\xE9duites dans la marge de glyphes de l'\xE9diteur."],"vs/editor/contrib/fontZoom/fontZoom":["Agrandissement de l'\xE9diteur de polices de caract\xE8res","R\xE9tr\xE9cissement de l'\xE9diteur de polices de caract\xE8res","Remise \xE0 niveau du zoom de l'\xE9diteur de polices de caract\xE8res"],"vs/editor/contrib/format/format":["1\xA0modification de format effectu\xE9e \xE0 la ligne {0}","{0} modifications de format effectu\xE9es \xE0 la ligne {1}","1\xA0modification de format effectu\xE9e entre les lignes {0} et {1}","{0} modifications de format effectu\xE9es entre les lignes {1} et {2}"],"vs/editor/contrib/format/formatActions":["Mettre le document en forme","Mettre la s\xE9lection en forme"],"vs/editor/contrib/gotoError/gotoError":["Aller au probl\xE8me suivant (Erreur, Avertissement, Info)","Ic\xF4ne du prochain marqueur goto.","Aller au probl\xE8me pr\xE9c\xE9dent (Erreur, Avertissement, Info)","Ic\xF4ne du pr\xE9c\xE9dent marqueur goto.","Aller au probl\xE8me suivant dans Fichiers (Erreur, Avertissement, Info)","&&Probl\xE8me suivant","Aller au probl\xE8me pr\xE9c\xE9dent dans Fichiers (Erreur, Avertissement, Info)","&&Probl\xE8me pr\xE9c\xE9dent"],"vs/editor/contrib/gotoError/gotoErrorWidget":["Erreur","Avertissement","Info","Conseil","{0} \xE0 {1}. ","{0}\xA0probl\xE8mes sur\xA0{1}","{0}\xA0probl\xE8me(s) sur {1}","Couleur d'erreur du widget de navigation dans les marqueurs de l'\xE9diteur.","Couleur d'avertissement du widget de navigation dans les marqueurs de l'\xE9diteur.","Couleur d\u2019information du widget de navigation du marqueur de l'\xE9diteur.","Arri\xE8re-plan du widget de navigation dans les marqueurs de l'\xE9diteur."],"vs/editor/contrib/gotoSymbol/goToCommands":["Aper\xE7u","D\xE9finitions","D\xE9finition introuvable pour '{0}'","D\xE9finition introuvable","Atteindre la d\xE9finition","Atteindre la &&d\xE9finition","Ouvrir la d\xE9finition sur le c\xF4t\xE9","Faire un Peek de la D\xE9finition","D\xE9clarations","Aucune d\xE9claration pour '{0}'","Aucune d\xE9claration","Acc\xE9der \xE0 la d\xE9claration","Atteindre la &&d\xE9claration","Aucune d\xE9claration pour '{0}'","Aucune d\xE9claration","Aper\xE7u de la d\xE9claration","D\xE9finitions de type","D\xE9finition de type introuvable pour '{0}'","D\xE9finition de type introuvable","Atteindre la d\xE9finition de type","Acc\xE9der \xE0 la d\xE9finition de &&type","Aper\xE7u de la d\xE9finition du type","Impl\xE9mentations","Impl\xE9mentation introuvable pour '{0}'","Impl\xE9mentation introuvable","Atteindre les impl\xE9mentations","Atteindre les &&impl\xE9mentations","Impl\xE9mentations d'aper\xE7u","Aucune r\xE9f\xE9rence pour '{0}'","Aucune r\xE9f\xE9rence","Atteindre les r\xE9f\xE9rences","Atteindre les &&r\xE9f\xE9rences","R\xE9f\xE9rences","Aper\xE7u des r\xE9f\xE9rences","R\xE9f\xE9rences","Atteindre un symbole","Emplacements","Aucun r\xE9sultat pour \xAB\xA0{0}\xA0\xBB","R\xE9f\xE9rences"],"vs/editor/contrib/gotoSymbol/link/goToDefinitionAtPosition":["Cliquez pour afficher {0}\xA0d\xE9finitions."],"vs/editor/contrib/gotoSymbol/peek/referencesController":["Chargement en cours...","{0} ({1})"],"vs/editor/contrib/gotoSymbol/peek/referencesTree":["{0} r\xE9f\xE9rences","{0} r\xE9f\xE9rence","R\xE9f\xE9rences"],"vs/editor/contrib/gotoSymbol/peek/referencesWidget":["aper\xE7u non disponible","Aucun r\xE9sultat","R\xE9f\xE9rences"],"vs/editor/contrib/gotoSymbol/referencesModel":["symbole dans {0} sur la ligne {1}, colonne {2}","symbole dans {0} \xE0 la ligne {1}, colonne {2}, {3}","1 symbole dans {0}, chemin complet {1}","{0} symboles dans {1}, chemin complet {2}","R\xE9sultats introuvables","1\xA0symbole dans {0}","{0}\xA0symboles dans {1}","{0}\xA0symboles dans {1} fichiers"],"vs/editor/contrib/gotoSymbol/symbolNavigation":["Symbole {0} sur {1}, {2} pour le suivant","Symbole {0} sur {1}"],"vs/editor/contrib/hover/hover":["Afficher par pointage","Afficher le pointeur de l'aper\xE7u de d\xE9finition"],"vs/editor/contrib/hover/markdownHoverParticipant":["Chargement en cours..."],"vs/editor/contrib/hover/markerHoverParticipant":["Voir le probl\xE8me","Aucune solution disponible dans l'imm\xE9diat","Recherche de correctifs rapides...","Aucune solution disponible dans l'imm\xE9diat","Correction rapide..."],"vs/editor/contrib/inPlaceReplace/inPlaceReplace":["Remplacer par la valeur pr\xE9c\xE9dente","Remplacer par la valeur suivante"],"vs/editor/contrib/indentation/indentation":["Convertir les retraits en espaces","Convertir les retraits en tabulations","Taille des tabulations configur\xE9e","S\xE9lectionner la taille des tabulations pour le fichier actuel","Mettre en retrait avec des tabulations","Mettre en retrait avec des espaces","D\xE9tecter la mise en retrait \xE0 partir du contenu","Remettre en retrait les lignes","R\xE9indenter les lignes s\xE9lectionn\xE9es"],"vs/editor/contrib/linesOperations/linesOperations":["Copier la ligne en haut","&&Copier la ligne en haut","Copier la ligne en bas","Co&&pier la ligne en bas","Dupliquer la s\xE9lection","&&Dupliquer la s\xE9lection","D\xE9placer la ligne vers le haut","D\xE9placer la ligne &&vers le haut","D\xE9placer la ligne vers le bas","D\xE9placer la &&ligne vers le bas","Trier les lignes dans l'ordre croissant","Trier les lignes dans l'ordre d\xE9croissant","D\xE9couper l'espace blanc de fin","Supprimer la ligne","Mettre en retrait la ligne","Ajouter un retrait n\xE9gatif \xE0 la ligne","Ins\xE9rer une ligne au-dessus","Ins\xE9rer une ligne sous","Supprimer tout ce qui est \xE0 gauche","Supprimer tout ce qui est \xE0 droite","Joindre les lignes","Transposer les caract\xE8res autour du curseur","Transformer en majuscule","Transformer en minuscule",'Appliquer la casse "1re lettre des mots en majuscule"',"Transformer en snake case"],"vs/editor/contrib/linkedEditing/linkedEditing":["D\xE9marrer la modification li\xE9e","Couleur d'arri\xE8re-plan quand l'\xE9diteur renomme automatiquement le type."],"vs/editor/contrib/links/links":["Ex\xE9cuter la commande","suivre le lien","cmd + clic","ctrl + clic","option + clic","alt + clic","Ex\xE9cuter la commande {0}","\xC9chec de l'ouverture de ce lien, car il n'est pas bien form\xE9\xA0: {0}","\xC9chec de l'ouverture de ce lien, car sa cible est manquante.","Ouvrir le lien"],"vs/editor/contrib/message/messageController":["Indique si l'\xE9diteur affiche un message inline","Impossible de modifier dans l\u2019\xE9diteur en lecture seule"],"vs/editor/contrib/multicursor/multicursor":["Ajouter un curseur au-dessus","&&Ajouter un curseur au-dessus","Ajouter un curseur en dessous","Aj&&outer un curseur en dessous","Ajouter des curseurs \xE0 la fin des lignes","Ajouter des c&&urseurs \xE0 la fin des lignes","Ajouter des curseurs en bas","Ajouter des curseurs en haut","Ajouter la s\xE9lection \xE0 la correspondance de recherche suivante","Ajouter l'occurrence suiva&&nte","Ajouter la s\xE9lection \xE0 la correspondance de recherche pr\xE9c\xE9dente","Ajouter l'occurrence p&&r\xE9c\xE9dente","D\xE9placer la derni\xE8re s\xE9lection vers la correspondance de recherche suivante","D\xE9placer la derni\xE8re s\xE9lection \xE0 la correspondance de recherche pr\xE9c\xE9dente","S\xE9lectionner toutes les occurrences des correspondances de la recherche","S\xE9lectionner toutes les &&occurrences","Modifier toutes les occurrences"],"vs/editor/contrib/parameterHints/parameterHints":["Indicateurs des param\xE8tres Trigger"],"vs/editor/contrib/parameterHints/parameterHintsWidget":["Ic\xF4ne d'affichage du prochain conseil de param\xE8tre.","Ic\xF4ne d'affichage du pr\xE9c\xE9dent conseil de param\xE8tre.","{0}, conseil"],"vs/editor/contrib/peekView/peekView":["Fermer","Couleur d'arri\xE8re-plan de la zone de titre de l'affichage d'aper\xE7u.","Couleur du titre de l'affichage d'aper\xE7u.","Couleur des informations sur le titre de l'affichage d'aper\xE7u.","Couleur des bordures et de la fl\xE8che de l'affichage d'aper\xE7u.","Couleur d'arri\xE8re-plan de la liste des r\xE9sultats de l'affichage d'aper\xE7u.","Couleur de premier plan des noeuds de lignes dans la liste des r\xE9sultats de l'affichage d'aper\xE7u.","Couleur de premier plan des noeuds de fichiers dans la liste des r\xE9sultats de l'affichage d'aper\xE7u.","Couleur d'arri\xE8re-plan de l'entr\xE9e s\xE9lectionn\xE9e dans la liste des r\xE9sultats de l'affichage d'aper\xE7u.","Couleur de premier plan de l'entr\xE9e s\xE9lectionn\xE9e dans la liste des r\xE9sultats de l'affichage d'aper\xE7u.","Couleur d'arri\xE8re-plan de l'\xE9diteur d'affichage d'aper\xE7u.","Couleur d'arri\xE8re-plan de la bordure de l'\xE9diteur d'affichage d'aper\xE7u.","Couleur de mise en surbrillance d'une correspondance dans la liste des r\xE9sultats de l'affichage d'aper\xE7u.","Couleur de mise en surbrillance d'une correspondance dans l'\xE9diteur de l'affichage d'aper\xE7u.","Bordure de mise en surbrillance d'une correspondance dans l'\xE9diteur de l'affichage d'aper\xE7u."],"vs/editor/contrib/quickAccess/gotoLineQuickAccess":["Ouvrez d'abord un \xE9diteur de texte pour acc\xE9der \xE0 une ligne.","Allez \xE0 la ligne {0}, colonne {1}.","Acc\xE9dez \xE0 la ligne {0}.","Ligne actuelle\xA0: {0}, caract\xE8re\xA0: {1}. Tapez un num\xE9ro de ligne entre\xA01 et\xA0{2} auquel acc\xE9der.","Ligne actuelle\xA0: {0}, caract\xE8re\xA0: {1}. Tapez un num\xE9ro de ligne auquel acc\xE9der."],"vs/editor/contrib/quickAccess/gotoSymbolQuickAccess":["Pour acc\xE9der \xE0 un symbole, ouvrez d'abord un \xE9diteur de texte avec des informations de symbole.","L'\xE9diteur de texte actif ne fournit pas les informations de symbole.","Aucun symbole d'\xE9diteur correspondant","Aucun symbole d'\xE9diteur","Ouvrir sur le c\xF4t\xE9","Ouvrir en bas","symboles ({0})","propri\xE9t\xE9s ({0})","m\xE9thodes ({0})","fonctions ({0})","constructeurs ({0})","variables ({0})","classes ({0})","structs ({0})","\xE9v\xE9nements ({0})","op\xE9rateurs ({0})","interfaces ({0})","espaces de noms ({0})","packages ({0})","param\xE8tres de type ({0})","modules ({0})","propri\xE9t\xE9s ({0})","\xE9num\xE9rations ({0})","membres d'\xE9num\xE9ration ({0})","cha\xEEnes ({0})","fichiers ({0})","tableaux ({0})","nombres ({0})","bool\xE9ens ({0})","objets ({0})","cl\xE9s ({0})","champs ({0})","constantes ({0})"],"vs/editor/contrib/rename/rename":["Aucun r\xE9sultat.","Une erreur inconnue s'est produite lors de la r\xE9solution de l'emplacement de renommage","Renommage de '{0}'","Changement du nom de {0}","'{0}' renomm\xE9 en '{1}'. R\xE9capitulatif : {2}","Le renommage n'a pas pu appliquer les modifications","Le renommage n'a pas pu calculer les modifications","Renommer le symbole","Activer/d\xE9sactiver la possibilit\xE9 d'afficher un aper\xE7u des changements avant le renommage"],"vs/editor/contrib/rename/renameInputField":["Renommez l'entr\xE9e. Tapez le nouveau nom et appuyez sur Entr\xE9e pour valider.","{0} pour renommer, {1} pour afficher un aper\xE7u"],"vs/editor/contrib/smartSelect/smartSelect":["\xC9tendre la s\xE9lection","D\xE9v&&elopper la s\xE9lection","R\xE9duire la s\xE9lection","&&R\xE9duire la s\xE9lection"],"vs/editor/contrib/snippet/snippetVariables":["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dim","Lun","Mar","Mer","Jeu","Ven","Sam","Janvier","F\xE9vrier","Mars","Avril","Mai","Juin","Juillet","Ao\xFBt","Septembre","Octobre","Novembre","D\xE9cembre","Jan","F\xE9v","Mar","Avr","Mai","Juin","Jul","Ao\xFB","Sept","Oct","Nov","D\xE9c"],"vs/editor/contrib/suggest/suggestController":["L'acceptation de '{0}' a entra\xEEn\xE9 {1}\xA0modifications suppl\xE9mentaires","Suggestions pour Trigger","Ins\xE9rer","Ins\xE9rer","Remplacer","Remplacer","Ins\xE9rer","afficher moins","afficher plus","R\xE9initialiser la taille du widget de suggestion"],"vs/editor/contrib/suggest/suggestWidget":["Couleur d'arri\xE8re-plan du widget de suggestion.","Couleur de bordure du widget de suggestion.","Couleur de premier plan du widget de suggestion.","Couleur d'arri\xE8re-plan de l'entr\xE9e s\xE9lectionn\xE9e dans le widget de suggestion.","Couleur de la surbrillance des correspondances dans le widget de suggestion.","Chargement en cours...","Pas de suggestions.","{0}, documents\xA0: {1}","Sugg\xE9rer"],"vs/editor/contrib/suggest/suggestWidgetDetails":["Fermer","Chargement en cours..."],"vs/editor/contrib/suggest/suggestWidgetRenderer":["Ic\xF4ne d'affichage d'informations suppl\xE9mentaires dans le widget de suggestion.","Lire la suite"],"vs/editor/contrib/suggest/suggestWidgetStatus":["{0} ({1})"],"vs/editor/contrib/symbolIcons/symbolIcons":["Couleur de premier plan des symboles de tableau. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles bool\xE9ens. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles de classe. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles de couleur. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan pour les symboles de constante. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles de constructeur. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles d'\xE9num\xE9rateur. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles de membre d'\xE9num\xE9rateur. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles d'\xE9v\xE9nement. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles de champ. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles de fichier. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles de dossier. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles de fonction. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles d'interface. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles de cl\xE9. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles de mot cl\xE9. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles de m\xE9thode. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles de module. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles d'espace de noms. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles null. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles de nombre. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles d'objet. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles d'op\xE9rateur. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles de package. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles de propri\xE9t\xE9. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles de r\xE9f\xE9rence. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles d'extrait de code. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles de cha\xEEne. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles de struct. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles de texte. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles de param\xE8tre de type. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles d'unit\xE9. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion.","Couleur de premier plan des symboles de variable. Ces symboles apparaissent dans le plan, la barre de navigation et le widget de suggestion."],"vs/editor/contrib/toggleTabFocusMode/toggleTabFocusMode":["Activer/d\xE9sactiver l'utilisation de la touche Tab pour d\xE9placer le focus","Appuyer sur Tab d\xE9placera le focus vers le prochain \xE9l\xE9ment pouvant \xEAtre d\xE9sign\xE9 comme \xE9l\xE9ment actif","Appuyer sur Tab ins\xE9rera le caract\xE8re de tabulation"],"vs/editor/contrib/tokenization/tokenization":["D\xE9veloppeur\xA0: forcer la retokenisation"],"vs/editor/contrib/unusualLineTerminators/unusualLineTerminators":["Marques de fin de ligne inhabituelles","Marques de fin de ligne inhabituelles d\xE9tect\xE9es",`Ce fichier contient un ou plusieurs caract\xE8res de fin de ligne inhabituels, par exemple le s\xE9parateur de ligne (LS) ou le s\xE9parateur de paragraphe (PS).\r +\r +Il est recommand\xE9 de les supprimer du fichier. Vous pouvez le configurer via 'editor.unusualLineTerminators'.`,"Corriger ce fichier","Ignorer le probl\xE8me pour ce fichier"],"vs/editor/contrib/wordHighlighter/wordHighlighter":["Couleur d'arri\xE8re-plan d'un symbole pendant l'acc\xE8s en lecture, comme la lecture d'une variable. La couleur ne doit pas \xEAtre opaque pour ne pas masquer les ornements sous-jacents.","Couleur d'arri\xE8re-plan d'un symbole pendant l'acc\xE8s en \xE9criture, comme l'\xE9criture d'une variable. La couleur ne doit pas \xEAtre opaque pour ne pas masquer les ornements sous-jacents.","Couleur de bordure d'un symbole durant l'acc\xE8s en lecture, par exemple la lecture d'une variable.","Couleur de bordure d'un symbole durant l'acc\xE8s en \xE9criture, par exemple l'\xE9criture dans une variable.","Couleur de marqueur de la r\xE8gle d'aper\xE7u pour la mise en surbrillance des symboles. La couleur ne doit pas \xEAtre opaque pour ne pas masquer les ornements sous-jacents.","Couleur de marqueur de la r\xE8gle d'aper\xE7u pour la mise en surbrillance des symboles d'acc\xE8s en \xE9criture. La couleur ne doit pas \xEAtre opaque pour ne pas masquer les ornements sous-jacents.","Aller \xE0 la prochaine mise en \xE9vidence de symbole","Aller \xE0 la mise en \xE9vidence de symbole pr\xE9c\xE9dente","D\xE9clencher la mise en \xE9vidence de symbole"],"vs/editor/contrib/wordOperations/wordOperations":["Supprimer le mot"],"vs/platform/actions/browser/menuEntryActionViewItem":["{0} ({1})"],"vs/platform/configuration/common/configurationRegistry":["Substitutions de configuration du langage par d\xE9faut","Configurez les param\xE8tres d'\xE9diteur \xE0 remplacer pour un langage.","Ce param\xE8tre ne prend pas en charge la configuration par langage.","Impossible d'inscrire une propri\xE9t\xE9 vide","Impossible d'inscrire '{0}'. Ceci correspond au mod\xE8le de propri\xE9t\xE9 '\\\\[.*\\\\]$' permettant de d\xE9crire les param\xE8tres d'\xE9diteur sp\xE9cifiques \xE0 un langage. Utilisez la contribution 'configurationDefaults'.","Impossible d'inscrire '{0}'. Cette propri\xE9t\xE9 est d\xE9j\xE0 inscrite."],"vs/platform/contextkey/browser/contextKeyService":["Commande qui retourne des informations sur les cl\xE9s de contexte"],"vs/platform/contextkey/common/contextkeys":["Indique si le syst\xE8me d'exploitation est Windows"],"vs/platform/keybinding/common/abstractKeybindingService":["Touche ({0}) utilis\xE9e. En attente d'une seconde touche...","La combinaison de touches ({0}, {1}) n\u2019est pas une commande."],"vs/platform/list/browser/listService":["Banc d'essai","Mappe vers 'Contr\xF4le' dans Windows et Linux, et vers 'Commande' dans macOS.","Mappe vers 'Alt' dans Windows et Linux, et vers 'Option' dans macOS.","Le modificateur \xE0 utiliser pour ajouter un \xE9l\xE9ment dans les arbres et listes pour une s\xE9lection multiple avec la souris (par exemple dans l\u2019Explorateur, les \xE9diteurs ouverts et la vue scm). Les mouvements de la souris 'Ouvrir \xE0 c\xF4t\xE9' (si pris en charge) s'adapteront tels qu\u2019ils n'entrent pas en conflit avec le modificateur multiselect.","Contr\xF4le l'ouverture des \xE9l\xE9ments dans les arborescences et les listes \xE0 l'aide de la souris (si cela est pris en charge). Notez que certaines arborescences et listes peuvent choisir d'ignorer ce param\xE8tre, s'il est non applicable.","Contr\xF4le si les listes et les arborescences prennent en charge le d\xE9filement horizontal dans le banc d'essai. Avertissement : L'activation de ce param\xE8tre a un impact sur les performances.","Contr\xF4le la mise en retrait de l'arborescence, en pixels.","Contr\xF4le si l'arborescence doit afficher les rep\xE8res de mise en retrait.","D\xE9termine si les listes et les arborescences ont un d\xE9filement fluide.","La navigation au clavier Simple place le focus sur les \xE9l\xE9ments qui correspondent \xE0 l'entr\xE9e de clavier. La mise en correspondance est effectu\xE9e sur les pr\xE9fixes uniquement.","La navigation de mise en surbrillance au clavier met en surbrillance les \xE9l\xE9ments qui correspondent \xE0 l'entr\xE9e de clavier. La navigation ult\xE9rieure vers le haut ou vers le bas parcourt uniquement les \xE9l\xE9ments mis en surbrillance.","La navigation au clavier Filtrer filtre et masque tous les \xE9l\xE9ments qui ne correspondent pas \xE0 l'entr\xE9e de clavier.","Contr\xF4le le style de navigation au clavier pour les listes et les arborescences dans le banc d'essai. Les options sont Simple, Mise en surbrillance et Filtrer.","Contr\xF4le si la navigation au clavier dans les listes et les arborescences est automatiquement d\xE9clench\xE9e simplement par la frappe. Si d\xE9fini sur 'false', la navigation au clavier est seulement d\xE9clench\xE9e avec l'ex\xE9cution de la commande 'list.toggleKeyboardNavigation', \xE0 laquelle vous pouvez attribuer un raccourci clavier.","Contr\xF4le la fa\xE7on dont les dossiers de l'arborescence sont d\xE9velopp\xE9s quand vous cliquez sur les noms de dossiers. Notez que certaines arborescences et listes peuvent choisir d'ignorer ce param\xE8tre, s'il est non applicable."],"vs/platform/markers/common/markers":["Erreur","Avertissement","Info"],"vs/platform/quickinput/browser/commandsQuickAccess":["{0}, {1}","r\xE9cemment utilis\xE9es","autres commandes","La commande '{0}' a entra\xEEn\xE9 une erreur ({1})"],"vs/platform/quickinput/browser/helpQuickAccess":["commandes globales","commandes de l'\xE9diteur","{0}, {1}"],"vs/platform/theme/common/colorRegistry":["Couleur de premier plan globale. Cette couleur est utilis\xE9e si elle n'est pas remplac\xE9e par un composant.","Couleur principale de premier plan pour les messages d'erreur. Cette couleur est utilis\xE9e uniquement si elle n'est pas red\xE9finie par un composant.","Couleur par d\xE9faut des ic\xF4nes du banc d'essai.","Couleur de bordure globale des \xE9l\xE9ments ayant le focus. Cette couleur est utilis\xE9e si elle n'est pas remplac\xE9e par un composant.","Bordure suppl\xE9mentaire autour des \xE9l\xE9ments pour les s\xE9parer des autres et obtenir un meilleur contraste.","Bordure suppl\xE9mentaire autour des \xE9l\xE9ments actifs pour les s\xE9parer des autres et obtenir un meilleur contraste.","Couleur des liens dans le texte.","Couleur d'arri\xE8re-plan des blocs de code dans le texte.","Couleur de l'ombre des widgets, comme rechercher/remplacer, au sein de l'\xE9diteur.","Arri\xE8re-plan de la zone d'entr\xE9e.","Premier plan de la zone d'entr\xE9e.","Bordure de la zone d'entr\xE9e.","Couleur de la bordure des options activ\xE9es dans les champs d'entr\xE9e.","Couleur d'arri\xE8re-plan des options activ\xE9es dans les champs d'entr\xE9e.","Couleur de premier plan des options activ\xE9es dans les champs d'entr\xE9e.","Couleur d'arri\xE8re-plan de la validation d'entr\xE9e pour la gravit\xE9 des informations.","Couleur de premier plan de validation de saisie pour la s\xE9v\xE9rit\xE9 Information.","Couleur de bordure de la validation d'entr\xE9e pour la gravit\xE9 des informations.","Couleur d'arri\xE8re-plan de la validation d'entr\xE9e pour la gravit\xE9 de l'avertissement.","Couleur de premier plan de la validation de la saisie pour la s\xE9v\xE9rit\xE9 Avertissement.","Couleur de bordure de la validation d'entr\xE9e pour la gravit\xE9 de l'avertissement.","Couleur d'arri\xE8re-plan de la validation d'entr\xE9e pour la gravit\xE9 de l'erreur.","Couleur de premier plan de la validation de saisie pour la s\xE9v\xE9rit\xE9 Erreur.","Couleur de bordure de la validation d'entr\xE9e pour la gravit\xE9 de l'erreur. ","Arri\xE8re-plan de la liste d\xE9roulante.","Premier plan de la liste d\xE9roulante.","Couleur de premier plan du bouton.","Couleur d'arri\xE8re-plan du bouton.","Couleur d'arri\xE8re-plan du bouton pendant le pointage.","Couleur de fond des badges. Les badges sont de courts libell\xE9s d'information, ex. le nombre de r\xE9sultats de recherche.","Couleur des badges. Les badges sont de courts libell\xE9s d'information, ex. le nombre de r\xE9sultats de recherche.","Ombre de la barre de d\xE9filement pour indiquer que la vue d\xE9file.","Couleur de fond du curseur de la barre de d\xE9filement.","Couleur de fond du curseur de la barre de d\xE9filement lors du survol.","Couleur d\u2019arri\xE8re-plan de la barre de d\xE9filement lorsqu'on clique dessus.","Couleur de fond pour la barre de progression qui peut s'afficher lors d'op\xE9rations longues.","Couleur d'arri\xE8re-plan du texte d'erreur dans l'\xE9diteur. La couleur ne doit pas \xEAtre opaque pour ne pas masquer les d\xE9corations sous-jacentes.","Couleur de premier plan de la ligne ondul\xE9e marquant les erreurs dans l'\xE9diteur.","Couleur de bordure des zones d'erreur dans l'\xE9diteur.","Couleur d'arri\xE8re-plan du texte d'avertissement dans l'\xE9diteur. La couleur ne doit pas \xEAtre opaque pour ne pas masquer les d\xE9corations sous-jacentes.","Couleur de premier plan de la ligne ondul\xE9e marquant les avertissements dans l'\xE9diteur.","Couleur de bordure des zones d'avertissement dans l'\xE9diteur.","Couleur d'arri\xE8re-plan du texte d'information dans l'\xE9diteur. La couleur ne doit pas \xEAtre opaque pour ne pas masquer les d\xE9corations sous-jacentes.","Couleur de premier plan de la ligne ondul\xE9e marquant les informations dans l'\xE9diteur.","Couleur de bordure des zones d'informations dans l'\xE9diteur.","Couleur de premier plan de la ligne ondul\xE9e d'indication dans l'\xE9diteur.","Couleur de bordure des zones d'indication dans l'\xE9diteur.","Couleur d'arri\xE8re-plan de l'\xE9diteur.","Couleur de premier plan par d\xE9faut de l'\xE9diteur.","Couleur d'arri\xE8re-plan des gadgets de l'\xE9diteur tels que rechercher/remplacer.","Couleur de premier plan des widgets de l'\xE9diteur, notamment Rechercher/remplacer.","Couleur de bordure des widgets de l'\xE9diteur. La couleur est utilis\xE9e uniquement si le widget choisit d'avoir une bordure et si la couleur n'est pas remplac\xE9e par un widget.","Couleur de bordure de la barre de redimensionnement des widgets de l'\xE9diteur. La couleur est utilis\xE9e uniquement si le widget choisit une bordure de redimensionnement et si la couleur n'est pas remplac\xE9e par un widget.","Couleur d'arri\xE8re-plan du s\xE9lecteur rapide. Le widget de s\xE9lecteur rapide est le conteneur de s\xE9lecteurs comme la palette de commandes.","Couleur de premier plan du s\xE9lecteur rapide. Le widget de s\xE9lecteur rapide est le conteneur de s\xE9lecteurs comme la palette de commandes.","Couleur d'arri\xE8re-plan du titre du s\xE9lecteur rapide. Le widget de s\xE9lecteur rapide est le conteneur de s\xE9lecteurs comme la palette de commandes.","Couleur d'arri\xE8re-plan du s\xE9lecteur rapide pour l'\xE9l\xE9ment ayant le focus.","Couleur du s\xE9lecteur rapide pour les \xE9tiquettes de regroupement.","Couleur du s\xE9lecteur rapide pour les bordures de regroupement.","Couleur de la s\xE9lection de l'\xE9diteur.","Couleur du texte s\xE9lectionn\xE9 pour le contraste \xE9lev\xE9.","Couleur de la s\xE9lection dans un \xE9diteur inactif. La couleur ne doit pas \xEAtre opaque pour ne pas masquer les ornements sous-jacents.","Couleur des r\xE9gions dont le contenu est le m\xEAme que celui de la s\xE9lection. La couleur ne doit pas \xEAtre opaque pour ne pas masquer les ornements sous-jacents.","Couleur de bordure des r\xE9gions dont le contenu est identique \xE0 la s\xE9lection.","Couleur du r\xE9sultat de recherche actif.","Couleur des autres correspondances de recherche. La couleur ne doit pas \xEAtre opaque pour ne pas masquer les ornements sous-jacents.","Couleur de la plage limitant la recherche. La couleur ne doit pas \xEAtre opaque pour ne pas masquer les ornements sous-jacents.","Couleur de bordure du r\xE9sultat de recherche actif.","Couleur de bordure des autres r\xE9sultats de recherche.","Couleur de bordure de la plage limitant la recherche. La couleur ne doit pas \xEAtre opaque pour ne pas masquer les ornements sous-jacents.","Surlignage sous le mot s\xE9lectionn\xE9 par pointage. La couleur ne doit pas \xEAtre opaque pour ne pas masquer les ornements sous-jacents.","Couleur d'arri\xE8re-plan du pointage de l'\xE9diteur.","Couleur de premier plan du pointage de l'\xE9diteur.","Couleur de bordure du pointage de l'\xE9diteur.","Couleur d'arri\xE8re-plan de la barre d'\xE9tat du pointage de l'\xE9diteur.","Couleur des liens actifs.","Couleur de premier plan des indicateurs inline","Couleur d'arri\xE8re-plan des indicateurs inline","Couleur utilis\xE9e pour l'ic\xF4ne d'ampoule sugg\xE9rant des actions.","Couleur utilis\xE9e pour l'ic\xF4ne d'ampoule sugg\xE9rant des actions de correction automatique.","Couleur d'arri\xE8re-plan du texte ins\xE9r\xE9. La couleur ne doit pas \xEAtre opaque pour ne pas masquer les ornements sous-jacents.","Couleur d'arri\xE8re-plan du texte supprim\xE9. La couleur ne doit pas \xEAtre opaque pour ne pas masquer les ornements sous-jacents.","Couleur de contour du texte ins\xE9r\xE9.","Couleur de contour du texte supprim\xE9.","Couleur de bordure entre les deux \xE9diteurs de texte.","Couleur du remplissage diagonal de l'\xE9diteur de diff\xE9rences. Le remplissage diagonal est utilis\xE9 dans les vues de diff\xE9rences c\xF4te \xE0 c\xF4te.","Couleur d'arri\xE8re-plan de la liste/l'arborescence pour l'\xE9l\xE9ment ayant le focus quand la liste/l'arborescence est active. Une liste/arborescence active peut \xEAtre s\xE9lectionn\xE9e au clavier, elle ne l'est pas quand elle est inactive.","Couleur de premier plan de la liste/l'arborescence pour l'\xE9l\xE9ment ayant le focus quand la liste/l'arborescence est active. Une liste/arborescence active peut \xEAtre s\xE9lectionn\xE9e au clavier, elle ne l'est pas quand elle est inactive.","Couleur de contour de la liste/l'arborescence pour l'\xE9l\xE9ment ayant le focus quand la liste/l'arborescence est active. Une liste/arborescence active a le focus clavier, contrairement \xE0 une liste/arborescence inactive.","Couleur d'arri\xE8re-plan de la liste/l'arborescence de l'\xE9l\xE9ment s\xE9lectionn\xE9 quand la liste/l'arborescence est active. Une liste/arborescence active peut \xEAtre s\xE9lectionn\xE9e au clavier, elle ne l'est pas quand elle est inactive.","Couleur de premier plan de la liste/l'arborescence pour l'\xE9l\xE9ment s\xE9lectionn\xE9 quand la liste/l'arborescence est active. Une liste/arborescence active peut \xEAtre s\xE9lectionn\xE9e au clavier, elle ne l'est pas quand elle est inactive.","Couleur d'arri\xE8re-plan de la liste/l'arborescence pour l'\xE9l\xE9ment s\xE9lectionn\xE9 quand la liste/l'arborescence est inactive. Une liste/arborescence active peut \xEAtre s\xE9lectionn\xE9e au clavier, elle ne l'est pas quand elle est inactive.","Couleur de premier plan de la liste/l'arborescence pour l'\xE9l\xE9ment s\xE9lectionn\xE9 quand la liste/l'arborescence est inactive. Une liste/arborescence active peut \xEAtre s\xE9lectionn\xE9e au clavier, elle ne l'est pas quand elle est inactive.","Couleur d'arri\xE8re-plan de la liste/l'arborescence pour l'\xE9l\xE9ment ayant le focus quand la liste/l'arborescence est active. Une liste/arborescence active peut \xEAtre s\xE9lectionn\xE9e au clavier (elle ne l'est pas quand elle est inactive).","Couleur de contour de la liste/l'arborescence pour l'\xE9l\xE9ment ayant le focus quand la liste/l'arborescence est inactive. Une liste/arborescence active a le focus clavier, contrairement \xE0 une liste/arborescence inactive.","Arri\xE8re-plan de la liste/l'arborescence pendant le pointage sur des \xE9l\xE9ments avec la souris.","Premier plan de la liste/l'arborescence pendant le pointage sur des \xE9l\xE9ments avec la souris.","Arri\xE8re-plan de l'op\xE9ration de glisser-d\xE9placer dans une liste/arborescence pendant le d\xE9placement d'\xE9l\xE9ments avec la souris.","Couleur de premier plan dans la liste/l'arborescence pour la surbrillance des correspondances pendant la recherche dans une liste/arborescence.","Couleur d'arri\xE8re-plan du widget de filtre de type dans les listes et les arborescences.","Couleur de contour du widget de filtre de type dans les listes et les arborescences.","Couleur de contour du widget de filtre de type dans les listes et les arborescences, en l'absence de correspondance.","Couleur de trait de l'arborescence pour les rep\xE8res de mise en retrait.","Couleur de trait de l'arborescence pour les rep\xE8res de mise en retrait.","Couleur de bordure des menus.","Couleur de premier plan des \xE9l\xE9ments de menu.","Couleur d'arri\xE8re-plan des \xE9l\xE9ments de menu.","Couleur de premier plan de l'\xE9l\xE9ment de menu s\xE9lectionn\xE9 dans les menus.","Couleur d'arri\xE8re-plan de l'\xE9l\xE9ment de menu s\xE9lectionn\xE9 dans les menus.","Couleur de bordure de l'\xE9l\xE9ment de menu s\xE9lectionn\xE9 dans les menus.","Couleur d'un \xE9l\xE9ment de menu s\xE9parateur dans les menus.","Couleur d\u2019arri\xE8re-plan de mise en surbrillance d\u2019un extrait tabstop.","Couleur de bordure de mise en surbrillance d\u2019un extrait tabstop.","Couleur d\u2019arri\xE8re-plan de mise en surbrillance du tabstop final d\u2019un extrait.","Mettez en surbrillance la couleur de bordure du dernier taquet de tabulation d'un extrait de code.","Couleur de marqueur de la r\xE8gle d'aper\xE7u pour rechercher les correspondances. La couleur ne doit pas \xEAtre opaque pour ne pas masquer les ornements sous-jacents.","Couleur de marqueur de la r\xE8gle d'aper\xE7u pour la mise en surbrillance des s\xE9lections. La couleur ne doit pas \xEAtre opaque pour ne pas masquer les ornements sous-jacents.","Couleur de marqueur de la minimap pour les correspondances.","Couleur de marqueur du minimap pour la s\xE9lection de l'\xE9diteur.","Couleur de marqueur de minimap pour les erreurs.","Couleur de marqueur de minimap pour les avertissements.","Couleur d'arri\xE8re-plan du minimap.","Couleur d'arri\xE8re-plan du curseur de minimap.","Couleur d'arri\xE8re-plan du curseur de minimap pendant le survol.","Couleur d'arri\xE8re-plan du curseur de minimap pendant un clic.","Couleur utilis\xE9e pour l'ic\xF4ne d'erreur des probl\xE8mes.","Couleur utilis\xE9e pour l'ic\xF4ne d'avertissement des probl\xE8mes.","Couleur utilis\xE9e pour l'ic\xF4ne d'informations des probl\xE8mes."],"vs/platform/theme/common/iconRegistry":["ID de la police \xE0 utiliser. Si aucune valeur n'est d\xE9finie, la police d\xE9finie en premier est utilis\xE9e.","Caract\xE8re de police associ\xE9 \xE0 la d\xE9finition d'ic\xF4ne.","Ic\xF4ne de l'action de fermeture dans les widgets."],"vs/platform/undoRedo/common/undoRedoService":["Les fichiers suivants ont \xE9t\xE9 ferm\xE9s et modifi\xE9s sur le disque\xA0: {0}.","Les fichiers suivants ont \xE9t\xE9 modifi\xE9s de mani\xE8re incompatible : {0}.","Impossible d'annuler '{0}' dans tous les fichiers. {1}","Impossible d'annuler '{0}' dans tous les fichiers. {1}","Impossible d'annuler '{0}' dans tous les fichiers, car des modifications ont \xE9t\xE9 apport\xE9es \xE0 {1}","Impossible d'annuler '{0}' dans tous les fichiers, car une op\xE9ration d'annulation ou de r\xE9tablissement est d\xE9j\xE0 en cours d'ex\xE9cution sur {1}","Impossible d'annuler '{0}' dans tous les fichiers, car une op\xE9ration d'annulation ou de r\xE9tablissement s'est produite dans l'intervalle","Souhaitez-vous annuler '{0}' dans tous les fichiers\xA0?","Annuler dans {0} fichiers","Annuler ce fichier","Annuler","Impossible d'annuler '{0}', car une op\xE9ration d'annulation ou de r\xE9tablissement est d\xE9j\xE0 en cours d'ex\xE9cution.","Voulez-vous annuler '{0}'\xA0?","Annuler","Annuler","Impossible de r\xE9p\xE9ter '{0}' dans tous les fichiers. {1}","Impossible de r\xE9p\xE9ter '{0}' dans tous les fichiers. {1}","Impossible de r\xE9p\xE9ter '{0}' dans tous les fichiers, car des modifications ont \xE9t\xE9 apport\xE9es \xE0 {1}","Impossible de r\xE9tablir '{0}' dans tous les fichiers, car une op\xE9ration d'annulation ou de r\xE9tablissement est d\xE9j\xE0 en cours d'ex\xE9cution pour {1}","Impossible de r\xE9tablir '{0}' dans tous les fichiers, car une op\xE9ration d'annulation ou de r\xE9tablissement s'est produite dans l'intervalle","Impossible de r\xE9tablir '{0}', car une op\xE9ration d'annulation ou de r\xE9tablissement est d\xE9j\xE0 en cours d'ex\xE9cution."]}); diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/editor/editor.main.nls.it.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/editor/editor.main.nls.it.js new file mode 100644 index 0000000000..13c210fd3e --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/editor/editor.main.nls.it.js @@ -0,0 +1,6 @@ +/*!----------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Version: 0.23.0(82e8ea39fc101d639262435542c7d43bc20d8aa2) + * Released under the MIT license + * https://github.com/microsoft/vscode/blob/main/LICENSE.txt + *-----------------------------------------------------------*/define("vs/editor/editor.main.nls.it",{"vs/base/browser/ui/actionbar/actionViewItems":["{0} ({1})"],"vs/base/browser/ui/findinput/findInput":["input"],"vs/base/browser/ui/findinput/findInputCheckboxes":["Maiuscole/minuscole","Parola intera","Usa espressione regolare"],"vs/base/browser/ui/findinput/replaceInput":["input","Mantieni maiuscole/minuscole"],"vs/base/browser/ui/iconLabel/iconLabel":["Caricamento..."],"vs/base/browser/ui/inputbox/inputBox":["Errore: {0}","Avviso: {0}","Info: {0}"],"vs/base/browser/ui/keybindingLabel/keybindingLabel":["Non associato"],"vs/base/browser/ui/menu/menu":["{0} ({1})"],"vs/base/browser/ui/tree/abstractTree":["Cancella","Disabilita filtro sul tipo","Abilita filtro sul tipo","Non sono stati trovati elementi","Abbinamento di {0} su {1} elementi"],"vs/base/common/actions":["(vuoto)"],"vs/base/common/errorMessage":["{0}: {1}","Si \xE8 verificato un errore di sistema ({0})","Si \xE8 verificato un errore sconosciuto. Per altri dettagli, vedere il log.","Si \xE8 verificato un errore sconosciuto. Per altri dettagli, vedere il log.","{0} ({1} errori in totale)","Si \xE8 verificato un errore sconosciuto. Per altri dettagli, vedere il log."],"vs/base/common/keybindingLabels":["CTRL","MAIUSC","ALT","Windows","CTRL","MAIUSC","ALT","Super","CTRL","MAIUSC","ALT","Comando","CTRL","MAIUSC","ALT","Windows","CTRL","MAIUSC","ALT","Super"],"vs/base/parts/quickinput/browser/quickInput":["Indietro","{0}/{1}","Digitare per ridurre il numero di risultati.","{0} risultati","{0} selezionati","OK","Personalizzato","Indietro ({0})","Indietro"],"vs/base/parts/quickinput/browser/quickInputList":["Input rapido"],"vs/editor/browser/controller/coreCommands":["Si attiene alla fine anche quando si passa a righe pi\xF9 lunghe","Si attiene alla fine anche quando si passa a righe pi\xF9 lunghe"],"vs/editor/browser/controller/textAreaHandler":["editor","L'editor non \xE8 accessibile in questo momento. Premere {0} per le opzioni."],"vs/editor/browser/core/keybindingCancellation":["Indica se l'editor esegue un'operazione annullabile, ad esempio 'Anteprima riferimenti'"],"vs/editor/browser/editorExtensions":["&&Annulla","Annulla","&&Ripeti","Ripeti","&&Seleziona tutto","Seleziona tutto"],"vs/editor/browser/widget/codeEditorWidget":["Il numero di cursori \xE8 stato limitato a {0}."],"vs/editor/browser/widget/diffEditorWidget":["Effetto di riga per gli inserimenti nell'editor diff.","Effetto di riga per le rimozioni nell'editor diff.","Non \xE8 possibile confrontare i file perch\xE9 uno \xE8 troppo grande."],"vs/editor/browser/widget/diffReview":["Icona per 'Inserisci' nella revisione diff.","Icona per 'Rimuovi' nella revisione diff.","Icona per 'Chiudi' nella revisione diff.","Chiudi","nessuna riga modificata","1 riga modificata","{0} righe modificate","Differenza {0} di {1}: riga originale {2}, {3}, riga modificata {4}, {5}","vuota","{0} riga non modificata {1}","{0} riga originale {1} riga modificata {2}","+ {0} riga modificata {1}","- {0} riga originale {1}","Vai alla differenza successiva","Vai alla differenza precedente"],"vs/editor/browser/widget/inlineDiffMargin":["Copia le righe eliminate","Copia la riga eliminata","Copia la riga eliminata ({0})","Ripristina questa modifica","Copia la riga eliminata ({0})"],"vs/editor/common/config/commonEditorConfig":["Editor","Numero di spazi a cui equivale una tabulazione. Quando `#editor.detectIndentation#` \xE8 attivo, questa impostazione viene sostituita in base al contenuto del file.","Inserisce spazi quando viene premuto TAB. Quando `#editor.detectIndentation#` \xE8 attivo, questa impostazione viene sostituita in base al contenuto del file.","Controlla se `#editor.tabSize#` e `#editor.insertSpaces#` verranno rilevati automaticamente quando un file viene aperto in base al contenuto del file.","Rimuovi gli spazi finali inseriti automaticamente.","Gestione speciale dei file di grandi dimensioni per disabilitare alcune funzionalit\xE0 che fanno un uso intensivo della memoria.","Controlla se calcolare i completamenti in base alle parole presenti nel documento.","Suggerisci parole solo dal documento attivo.","Suggerisci parole da tutti i documenti aperti della stessa lingua.","Suggerisci parole da tutti i documenti aperti.","Controlla i documenti da cui vengono calcolati i completamenti basati su parole.","L'evidenziazione semantica \xE8 abilitata per tutti i temi colore.","L'evidenziazione semantica \xE8 disabilitata per tutti i temi colore.","La configurazione dell'evidenziazione semantica \xE8 gestita tramite l'impostazione `semanticHighlighting` del tema colori corrente.","Controlla se l'evidenziazione semanticHighlighting \xE8 visualizzata per i linguaggi che la supportano.","Mantiene aperti gli editor rapidi anche quando si fa doppio clic sul contenuto o si preme 'ESC'.","Per motivi di prestazioni le righe di lunghezza superiore non verranno tokenizzate","Timeout in millisecondi dopo il quale il calcolo delle differenze viene annullato. Usare 0 per indicare nessun timeout.","Controlla se l'editor diff mostra le differenze affiancate o incorporate.","Se abilitato, l'editor differenze ignora le modifiche relative a spazi vuoti iniziali e finali.","Controlla se l'editor diff mostra gli indicatori +/- per le modifiche aggiunte/rimosse.","Controlla se l'editor visualizza CodeLens.","Il ritorno a capo automatico delle righe non viene mai applicato.","Il ritorno a capo automatico delle righe viene applicato in corrispondenza della larghezza del viewport.","Il ritorno a capo automatico delle righe viene applicato in base all'impostazione `#editor.wordWrap#`."],"vs/editor/common/config/editorOptions":["L'editor user\xE0 le API della piattaforma per rilevare quando viene collegata un'utilit\xE0 per la lettura dello schermo.","L'editor verr\xE0 definitivamente ottimizzato per l'utilizzo con un'utilit\xE0 per la lettura dello schermo. Il ritorno a capo automatico verr\xE0 disabilitato.","L'editor non verr\xE0 mai ottimizzato per l'utilizzo con un'utilit\xE0 per la lettura dello schermo.","Controlla se l'editor deve essere eseguito in una modalit\xE0 ottimizzata per le utilit\xE0 per la lettura dello schermo. Se viene attivata, il ritorno a capo automatico verr\xE0 disabilitato.","Consente di controllare se viene inserito uno spazio quando si aggiungono commenti.","Controlla se ignorare le righe vuote con le opzioni per attivare/disattivare, aggiungere o rimuovere relative ai commenti di riga.","Controlla se, quando si copia senza aver effettuato una selezione, viene copiata la riga corrente.","Controlla se il cursore deve passare direttamente alla ricerca delle corrispondenze durante la digitazione.","Controlla se inizializzare la stringa di ricerca nel Widget Trova con il testo selezionato nell'editor.","Non attivare mai automaticamente la funzione Trova nella selezione (impostazione predefinita)","Attiva sempre automaticamente la funzione Trova nella selezione","Attiva automaticamente la funzione Trova nella selezione quando sono selezionate pi\xF9 righe di contenuto.","Controlla la condizione per attivare automaticamente la funzione Trova nella selezione.","Controlla se il widget Trova deve leggere o modificare gli appunti di ricerca condivisi in macOS.","Controlla se il widget Trova deve aggiungere altre righe nella parte superiore dell'editor. Quando \xE8 true, \xE8 possibile scorrere oltre la prima riga quando il widget Trova \xE8 visibile.","Controlla se la ricerca viene riavviata automaticamente dall'inizio o dalla fine quando non \xE8 possibile trovare ulteriori corrispondenze.","Abilita/Disabilita i caratteri legatura (funzionalit\xE0 dei tipi di carattere 'calt' e 'liga'). Impostare su una stringa per un controllo pi\xF9 specifico sulla propriet\xE0 CSS 'font-feature-settings'.","Propriet\xE0 CSS 'font-feature-settings' esplicita. Se \xE8 necessario solo attivare/disattivare le legature, \xE8 possibile passare un valore booleano.","Consente di configurare i caratteri legatura o le funzionalit\xE0 dei tipi di carattere. Pu\xF2 essere un valore booleano per abilitare/disabilitare le legature o una stringa per il valore della propriet\xE0 CSS 'font-feature-settings'.","Controlla le dimensioni del carattere in pixel.",'Sono consentiti solo le parole chiave "normal" e "bold" o i numeri compresi tra 1 e 1000.','Controlla lo spessore del carattere. Accetta le parole chiave "normal" e "bold" o i numeri compresi tra 1 e 1000.',"Mostra la visualizzazione rapida dei risultati (impostazione predefinita)","Passa al risultato principale e mostra una visualizzazione rapida","Passa al risultato principale e abilita l'esplorazione senza anteprima per gli altri","Questa impostazione \xE8 deprecata. In alternativa, usare impostazioni diverse, come 'editor.editor.gotoLocation.multipleDefinitions' o 'editor.editor.gotoLocation.multipleImplementations'.","Controlla il comportamento del comando 'Vai alla definizione' quando esistono pi\xF9 posizioni di destinazione.","Controlla il comportamento del comando 'Vai alla definizione di tipo' quando esistono pi\xF9 posizioni di destinazione.","Controlla il comportamento del comando 'Vai a dichiarazione' quando esistono pi\xF9 posizioni di destinazione.","Controlla il comportamento del comando 'Vai a implementazioni' quando esistono pi\xF9 posizioni di destinazione.","Controlla il comportamento del comando 'Vai a riferimenti' quando esistono pi\xF9 posizioni di destinazione.","ID comando alternativo eseguito quando il risultato di 'Vai alla definizione' \xE8 la posizione corrente.","ID comando alternativo eseguito quando il risultato di 'Vai alla definizione di tipo' \xE8 la posizione corrente.","ID comando alternativo eseguito quando il risultato di 'Vai a dichiarazione' \xE8 la posizione corrente.","ID comando alternativo eseguito quando il risultato di 'Vai a implementazione' \xE8 la posizione corrente.","ID comando alternativo eseguito quando il risultato di 'Vai a riferimento' \xE8 la posizione corrente.","Controlla se mostrare l'area sensibile al passaggio del mouse.","Controlla il ritardo in millisecondi dopo il quale viene mostrato il passaggio del mouse.","Controlla se l'area sensibile al passaggio del mouse deve rimanere visibile quando vi si passa sopra con il puntatore del mouse.","Abilita la lampadina delle azioni codice nell'editor.","Abilita i suggerimenti inline nell'editor.","Controlla le dimensioni del carattere dei suggerimenti inline nell'editor. Quando \xE8 impostata su `0`, viene usato il 90% del valore di `#editor.fontSize#`.","Controlla la famiglia di caratteri dei suggerimenti inline nell'editor.","Controlla l'altezza della riga. Usare 0 per calcolare l'altezza della riga dalle dimensioni del carattere.","Controlla se la minimappa \xE8 visualizzata.","La minimappa ha le stesse dimensioni del contenuto dell'editor (e potrebbe supportare lo scorrimento).","Se necessario, la minimappa si ridurr\xE0 o si ingrandir\xE0 in modo da adattarsi all'altezza dell'editor (nessuno scorrimento).","Se necessario, la minimappa si ridurr\xE0 in modo che la larghezza non superi mai quella dell'editor (nessuno scorrimento).","Controlla le dimensioni della minimappa.","Definisce il lato in cui eseguire il rendering della minimappa.","Controlla se il dispositivo di scorrimento della minimappa \xE8 visualizzato.","Scala del contenuto disegnato nella minimappa: 1, 2 o 3.","Esegue il rendering dei caratteri effettivi di una riga in contrapposizione ai blocchi colore.","Limita la larghezza della minimappa in modo da eseguire il rendering al massimo di un certo numero di colonne.","Controlla la quantit\xE0 di spazio tra il bordo superiore dell'editor e la prima riga.","Controlla la quantit\xE0 di spazio tra il bordo inferiore dell'editor e l'ultima riga.","Abilita un popup che mostra documentazione sui parametri e informazioni sui tipi mentre si digita.","Controlla se il menu dei suggerimenti per i parametri esegue un ciclo o si chiude quando viene raggiunta la fine dell'elenco.","Abilita i suggerimenti rapidi all'interno di stringhe.","Abilita i suggerimenti rapidi all'interno di commenti.","Abilita i suggerimenti rapidi all'esterno di stringhe e commenti.","Controlla se visualizzare automaticamente i suggerimenti durante la digitazione.","I numeri di riga non vengono visualizzati.","I numeri di riga vengono visualizzati come numeri assoluti.","I numeri di riga vengono visualizzati come distanza in linee alla posizione del cursore.","I numeri di riga vengono visualizzati ogni 10 righe.","Controlla la visualizzazione dei numeri di riga.","Numero di caratteri a spaziatura fissa in corrispondenza del quale verr\xE0 eseguito il rendering di questo righello dell'editor.","Colore di questo righello dell'editor.","Esegue il rendering dei righelli verticali dopo un certo numero di caratteri a spaziatura fissa. Usare pi\xF9 valori per pi\xF9 righelli. Se la matrice \xE8 vuota, non viene disegnato alcun righello.","Inserisce il suggerimento senza sovrascrivere il testo a destra del cursore.","Inserisce il suggerimento e sovrascrive il testo a destra del cursore.","Controlla se le parole vengono sovrascritte quando si accettano i completamenti. Tenere presente che questa opzione dipende dalle estensioni che accettano esplicitamente questa funzionalit\xE0.","Controlla se i suggerimenti di filtro e ordinamento valgono per piccoli errori di battitura.","Controlla se l'ordinamento privilegia le parole che appaiono pi\xF9 vicine al cursore.","Controlla se condividere le selezioni dei suggerimenti memorizzati tra aree di lavoro e finestre (richiede `#editor.suggestSelection#`).","Controlla se un frammento attivo impedisce i suggerimenti rapidi.","Controlla se mostrare o nascondere le icone nei suggerimenti.","Controlla la visibilit\xE0 della barra di stato nella parte inferiore del widget dei suggerimenti.","Controlla se i dettagli del suggerimento vengono visualizzati inline con l'etichetta o solo nel widget dei dettagli","Questa impostazione \xE8 deprecata. Il widget dei suggerimenti pu\xF2 ora essere ridimensionato.","Questa impostazione \xE8 deprecata. In alternativa, usare impostazioni diverse, come 'editor.suggest.showKeywords' o 'editor.suggest.showSnippets'.","Se \xE8 abilitata, IntelliSense mostra i suggerimenti relativi a `method`.","Se \xE8 abilitata, IntelliSense mostra i suggerimenti relativi a `function`.","Se \xE8 abilitata, IntelliSense mostra i suggerimenti relativi a `constructor`.","Se \xE8 abilitata, IntelliSense mostra i suggerimenti relativi a `field`.","Se \xE8 abilitata, IntelliSense mostra i suggerimenti relativi a `variable`.","Se \xE8 abilitata, IntelliSense mostra i suggerimenti relativi a `class`.","Se \xE8 abilitata, IntelliSense mostra i suggerimenti relativi a `struct`.","Se \xE8 abilitata, IntelliSense mostra i suggerimenti relativi a `interface`.","Se \xE8 abilitata, IntelliSense mostra i suggerimenti relativi a `module`.","Se \xE8 abilitata, IntelliSense mostra i suggerimenti relativi a `property`.","Se \xE8 abilitata, IntelliSense mostra i suggerimenti relativi a `event`.","Se \xE8 abilitata, IntelliSense mostra i suggerimenti relativi a `operator`.","Se \xE8 abilitata, IntelliSense mostra i suggerimenti relativi a `unit`.","Se \xE8 abilitata, IntelliSense mostra i suggerimenti relativi a `value`.","Se \xE8 abilitata, IntelliSense mostra i suggerimenti relativi a `constant`.","Se \xE8 abilitata, IntelliSense mostra i suggerimenti relativi a `enum`.","Se \xE8 abilitata, IntelliSense mostra i suggerimenti relativi a `enumMember`.","Se \xE8 abilitata, IntelliSense mostra i suggerimenti relativi a `keyword`.","Se \xE8 abilitata, IntelliSense mostra i suggerimenti relativi a `text`.","Se \xE8 abilitata, IntelliSense mostra i suggerimenti relativi a `color`.","Se \xE8 abilitata, IntelliSense mostra i suggerimenti relativi a `file`.","Se \xE8 abilitata, IntelliSense mostra i suggerimenti relativi a `reference`.","Se \xE8 abilitata, IntelliSense mostra i suggerimenti relativi a `customcolor`.","Se \xE8 abilitata, IntelliSense mostra i suggerimenti relativi a `folder`.","Se \xE8 abilitata, IntelliSense mostra i suggerimenti relativi a `typeParameter`.","Se \xE8 abilitata, IntelliSense mostra i suggerimenti relativi a `snippet`.","Se \xE8 abilitata, IntelliSense mostra i suggerimenti relativi a `user`.","Se \xE8 abilitata, IntelliSense mostra i suggerimenti relativi a `issues`.","Indica se gli spazi vuoti iniziali e finali devono essere sempre selezionati.","Controlla se accettare i suggerimenti con i caratteri di commit. Ad esempio, in JavaScript il punto e virgola (';') pu\xF2 essere un carattere di commit che accetta un suggerimento e digita tale carattere.","Accetta un suggerimento con 'Invio' solo quando si apporta una modifica al testo.","Controlla se i suggerimenti devono essere accettati con 'INVIO' in aggiunta a 'TAB'. In questo modo \xE8 possibile evitare ambiguit\xE0 tra l'inserimento di nuove righe e l'accettazione di suggerimenti.","Controlla il numero di righe nell'editor che possono essere lette da un utilit\xE0 per la lettura dello schermo. Avviso: questa opzione pu\xF2 influire sulle prestazioni se il numero di righe \xE8 superiore a quello predefinito.","Contenuto editor","Usa le configurazioni del linguaggio per determinare la chiusura automatica delle parentesi.","Chiudi automaticamente le parentesi solo quando il cursore si trova alla sinistra di uno spazio vuoto.","Controlla se l'editor deve chiudere automaticamente le parentesi quadre dopo che sono state aperte.","Digita sopra le virgolette o le parentesi quadre di chiusura solo se sono state inserite automaticamente.","Controlla se l'editor deve digitare su virgolette o parentesi quadre.","Usa le configurazioni del linguaggio per determinare la chiusura automatica delle virgolette.","Chiudi automaticamente le virgolette solo quando il cursore si trova alla sinistra di uno spazio vuoto.","Controlla se l'editor deve chiudere automaticamente le citazioni dopo che sono state aperte.","L'editor non inserir\xE0 automaticamente il rientro.","L'editor manterr\xE0 il rientro della riga corrente.","L'editor manterr\xE0 il rientro della riga corrente e rispetter\xE0 le parentesi definite dalla lingua.","L'editor manterr\xE0 il rientro della riga corrente, rispetter\xE0 le parentesi definite dalla lingua e richiamer\xE0 le regole onEnterRules speciali definite dalle lingue.","L'editor manterr\xE0 il rientro della riga corrente, rispetter\xE0 le parentesi definite dalla lingua, richiamer\xE0 le regole onEnterRules speciali definite dalle lingue e rispetter\xE0 le regole indentationRules definite dalle lingue.","Controlla se l'editor deve regolare automaticamente il rientro quando gli utenti digitano, incollano, spostano le righe o applicano il rientro.","Usa le configurazioni del linguaggio per determinare quando racchiudere automaticamente le selezioni tra parentesi quadre o virgolette.","Racchiude la selezione tra virgolette ma non tra parentesi quadre.","Racchiude la selezione tra parentesi quadre ma non tra virgolette.","Controlla se l'editor deve racchiudere automaticamente le selezioni quando si digitano virgolette o parentesi quadre.","Emula il comportamento di selezione dei caratteri di tabulazione quando si usano gli spazi per il rientro. La selezione verr\xE0 applicata alle tabulazioni.","Controlla se l'editor visualizza CodeLens.","Controlla la famiglia di caratteri per CodeLens.","Controlla le dimensioni del carattere in pixel per CodeLens. Quando \xE8 impostata su `0`, viene usato il 90% del valore di `#editor.fontSize#`.","Controlla se l'editor deve eseguire il rendering della selezione colori e degli elementi Decorator di tipo colore inline.","Abilita l'uso di mouse e tasti per la selezione delle colonne.","Controlla se l'evidenziazione della sintassi deve essere copiata negli Appunti.","Controllo dello stile di animazione del cursore.","Controlla se l'animazione del cursore con anti-aliasing deve essere abilitata.","Controlla lo stile del cursore.","Controlla il numero minimo di righe iniziali e finali visibili che circondano il cursore. Noto come 'scrollOff' o 'scrollOffset' in altri editor.","`cursorSurroundingLines` viene applicato solo quando \xE8 attivato tramite la tastiera o l'API.","`cursorSurroundingLines` viene sempre applicato.","Controlla quando deve essere applicato `cursorSurroundingLines`.","Controlla la larghezza del cursore quando `#editor.cursorStyle#` \xE8 impostato su `line`.","Controlla se l'editor deve consentire lo spostamento di selezioni tramite trascinamento della selezione.","Moltiplicatore della velocit\xE0 di scorrimento quando si preme `Alt`.","Controlla se per l'editor \xE8 abilitata la riduzione del codice.","Usa una strategia di riduzione specifica della lingua, se disponibile; altrimenti ne usa una basata sui rientri.","Usa la strategia di riduzione basata sui rientri.","Controlla la strategia per il calcolo degli intervalli di riduzione.","Controlla se l'editor deve evidenziare gli intervalli con riduzione del codice.","Controlla se, facendo clic sul contenuto vuoto dopo una riga ridotta, la riga viene espansa.","Controlla la famiglia di caratteri.","Controlla se l'editor deve formattare automaticamente il contenuto incollato. Deve essere disponibile un formattatore che deve essere in grado di formattare un intervallo in un documento.","Controlla se l'editor deve formattare automaticamente la riga dopo la digitazione.","Controlla se l'editor deve eseguire il rendering del margine verticale del glifo. Il margine del glifo viene usato principalmente per il debug.","Controlla se il cursore deve essere nascosto nel righello delle annotazioni.","Controlla se l'editor deve evidenziare la guida con rientro attiva.","Controlla la spaziatura tra le lettere in pixel.","Controlla se la modifica collegata \xE8 abilitata per l'editor. A seconda del linguaggio, i simboli correlati, ad esempio i tag HTML, vengono aggiornati durante la modifica.","Controlla se l'editor deve individuare i collegamenti e renderli selezionabili.","Evidenzia le parentesi graffe corrispondenti.","Moltiplicatore da usare sui valori `deltaX` e `deltaY` degli eventi di scorrimento della rotellina del mouse.","Ingrandisce il carattere dell'editor quando si usa la rotellina del mouse e si tiene premuto 'CTRL'.","Unire i cursori multipli se sovrapposti.","Rappresenta il tasto 'Control' in Windows e Linux e il tasto 'Comando' in macOS.","Rappresenta il tasto 'Alt' in Windows e Linux e il tasto 'Opzione' in macOS.","Modificatore da usare per aggiungere pi\xF9 cursori con il mouse. I gesti del mouse Vai alla definizione e Apri il collegamento si adatteranno in modo da non entrare in conflitto con il modificatore di selezione multipla. [Altre informazioni](https://code.visualstudio.com/docs/editor/codebasics#_multicursor-modifier).","Ogni cursore incolla una singola riga del testo.","Ogni cursore incolla il testo completo.","Controlla l'operazione Incolla quando il conteggio delle righe del testo incollato corrisponde al conteggio dei cursori.","Controlla se l'editor deve evidenziare le occorrenze di simboli semantici.","Controlla se deve essere disegnato un bordo intorno al righello delle annotazioni.","Sposta lo stato attivo sull'albero quando si apre l'anteprima","Sposta lo stato attivo sull'editor quando si apre l'anteprima","Controlla se spostare lo stato attivo sull'editor inline o sull'albero nel widget di anteprima.","Controlla se il movimento del mouse Vai alla definizione consente sempre di aprire il widget di anteprima.","Controlla il ritardo in millisecondi dopo il quale verranno visualizzati i suggerimenti rapidi.","Controlla se l'editor viene rinominato automaticamente in base al tipo.","Deprecata. In alternativa, usare `editor.linkedEditing`.","Controlla se l'editor deve eseguire il rendering dei caratteri di controllo.","Controlla se l'editor deve eseguire il rendering delle guide con rientro.","Esegue il rendering dell'ultimo numero di riga quando il file termina con un carattere di nuova riga.","Mette in evidenza sia la barra di navigazione sia la riga corrente.","Controlla in che modo l'editor deve eseguire il rendering dell'evidenziazione di riga corrente.","Controlla se l'editor deve eseguire il rendering dell'evidenziazione della riga corrente solo quando l'editor ha lo stato attivo","Esegue il rendering dei caratteri di spazio vuoto ad eccezione dei singoli spazi tra le parole.","Esegui il rendering dei caratteri di spazio vuoto solo nel testo selezionato.","Esegui il rendering solo dei caratteri di spazio vuoto finali","Controlla in che modo l'editor deve eseguire il rendering dei caratteri di spazio vuoto.","Controlla se le selezioni devono avere gli angoli arrotondati.","Controlla il numero di caratteri aggiuntivi oltre i quali l'editor scorrer\xE0 orizzontalmente.","Controlla se l'editor scorrer\xE0 oltre l'ultima riga.","Scorre solo lungo l'asse predominante durante lo scorrimento verticale e orizzontale simultaneo. Impedisce la deviazione orizzontale quando si scorre in verticale su un trackpad.","Controlla se gli appunti primari di Linux devono essere supportati.","Controlla se l'editor deve evidenziare gli elementi corrispondenti simili alla selezione.","Mostra sempre i comandi di riduzione.","Mostra i comandi di riduzione solo quando il mouse \xE8 posizionato sul margine della barra di scorrimento.","Controlla se i controlli di riduzione sul margine della barra di scorrimento vengono visualizzati.","Controllo dissolvenza del codice inutilizzato.","Controlla le variabili deprecate barrate.","Visualizza i suggerimenti del frammento prima degli altri suggerimenti.","Visualizza i suggerimenti del frammento dopo gli altri suggerimenti.","Visualizza i suggerimenti del frammento insieme agli altri suggerimenti.","Non mostrare i suggerimenti del frammento.","Controlla se i frammenti di codice sono visualizzati con altri suggerimenti e il modo in cui sono ordinati.","Controlla se per lo scorrimento dell'editor verr\xE0 usata un'animazione.","Dimensioni del carattere per il widget dei suggerimenti. Se impostato su `0`, viene usato il valore di `#editor.fontSize#`.","Altezza della riga per il widget dei suggerimenti. Se impostato su `0`, viene usato il valore `editor.lineHeight#`. Il valore minimo \xE8 8.","Controlla se i suggerimenti devono essere visualizzati automaticamente durante la digitazione dei caratteri trigger.","Consente di selezionare sempre il primo suggerimento.","Consente di selezionare suggerimenti recenti a meno che continuando a digitare non ne venga selezionato uno, ad esempio `console.| ->; console.log` perch\xE9 `log` \xE8 stato completato di recente.","Consente di selezionare i suggerimenti in base a prefissi precedenti che hanno completato tali suggerimenti, ad esempio `co ->; console` e `con -> const`.","Controlla la modalit\xE0 di preselezione dei suggerimenti durante la visualizzazione dell'elenco dei suggerimenti.","La funzionalit\xE0 di completamento con tasto TAB inserir\xE0 il migliore suggerimento alla pressione del tasto TAB.","Disabilita le funzionalit\xE0 di completamento con tasto TAB.","Completa i frammenti con il tasto TAB quando i rispettivi prefissi corrispondono. Funziona in modo ottimale quando 'quickSuggestions' non \xE8 abilitato.","Abilit\xE0 la funzionalit\xE0 di completamento con tasto TAB.","I caratteri di terminazione di riga insoliti vengono rimossi automaticamente.","I caratteri di terminazione di riga insoliti vengono ignorati.","Prompt per i caratteri di terminazione di riga insoliti da rimuovere.","Rimuovi caratteri di terminazione di riga insoliti che potrebbero causare problemi.","Inserimento ed eliminazione dello spazio vuoto dopo le tabulazioni.","Caratteri che verranno usati come separatori di parola quando si eseguono operazioni o spostamenti correlati a parole.","Il ritorno a capo automatico delle righe non viene mai applicato.","Il ritorno a capo automatico delle righe viene applicato in corrispondenza della larghezza del viewport.","Il ritorno a capo automatico delle righe viene applicato in corrispondenza di `#editor.wordWrapColumn#`.","Il ritorno a capo automatico delle righe viene applicato in corrispondenza della larghezza minima del viewport e di `#editor.wordWrapColumn#`.","Controlla il ritorno a capo automatico delle righe.","Controlla la colonna per il ritorno a capo automatico dell'editor quando il valore di `#editor.wordWrap#` \xE8 `wordWrapColumn` o `bounded`.","Nessun rientro. Le righe con ritorno a capo iniziano dalla colonna 1. ","Le righe con ritorno a capo hanno lo stesso rientro della riga padre.","Le righe con ritorno a capo hanno un rientro di +1 rispetto alla riga padre.","Le righe con ritorno a capo hanno un rientro di +2 rispetto alla riga padre.","Controlla il rientro delle righe con ritorno a capo.","Presuppone che la larghezza sia identica per tutti caratteri. Si tratta di un algoritmo veloce che funziona correttamente per i tipi di carattere a spaziatura fissa e determinati script (come i caratteri latini) in cui i glifi hanno larghezza identica.","Delega il calcolo dei punti di ritorno a capo al browser. Si tratta di un algoritmo lento che potrebbe causare blocchi con file di grandi dimensioni, ma funziona correttamente in tutti gli altri casi.","Controlla l'algoritmo che calcola i punti di ritorno a capo."],"vs/editor/common/editorContextKeys":["Whether the editor text has focus (cursor is blinking)","Whether the editor or an editor widget has focus (e.g. focus is in the find widget)","Whether an editor or a rich text input has focus (cursor is blinking)","Whether the editor is read only","Whether the context is a diff editor","Whether `editor.columnSelection` is enabled","Whether the editor has text selected","Whether the editor has multiple selections","Whether `Tab` will move focus out of the editor","Whether the editor hover is visible","Whether the editor is part of a larger editor (e.g. notebooks)","The language identifier of the editor","Whether the editor has a completion item provider","Whether the editor has a code actions provider","Whether the editor has a code lens provider","Whether the editor has a definition provider","Whether the editor has a declaration provider","Whether the editor has an implementation provider","Whether the editor has a type definition provider","Whether the editor has a hover provider","Whether the editor has a document highlight provider","Whether the editor has a document symbol provider","Whether the editor has a reference provider","Whether the editor has a rename provider","Whether the editor has a signature help provider","Whether the editor has an inline hints provider","Whether the editor has a document formatting provider","Whether the editor has a document selection formatting provider","Whether the editor has multiple document formatting providers","Whether the editor has multiple document selection formatting providers"],"vs/editor/common/model/editStack":["Digitazione"],"vs/editor/common/modes/modesRegistry":["Testo normale"],"vs/editor/common/standaloneStrings":["Nessuna selezione","Riga {0}, colonna {1} ({2} selezionate)","Riga {0}, colonna {1}","{0} selezioni ({1} caratteri selezionati)","{0} selezioni","Modifica dell'impostazione `accessibilitySupport` in `on`.","Apertura della pagina di documentazione sull'accessibilit\xE0 dell'editor.","in un riquadro di sola lettura di un editor diff.","in un riquadro di un editor diff."," in un editor di codice di sola lettura"," in un editor di codice","Per configurare l'editor da ottimizzare per l'utilizzo con un'utilit\xE0 per la lettura dello schermo, premere Comando+E.","Per configurare l'editor da ottimizzare per l'utilizzo con un'utilit\xE0 per la lettura dello schermo, premere CTRL+E.","L'editor \xE8 configurato per essere ottimizzato per l'utilizzo con un'utilit\xE0 per la lettura dello schermo.","L'editor \xE8 configurato per non essere ottimizzato per l'utilizzo con un'utilit\xE0 per la lettura dello schermo, che non viene usata in questo momento.","Premere TAB nell'editor corrente per spostare lo stato attivo sull'elemento con stato attivabile successivo. Per attivare/disattivare questo comportamento, premere {0}.","Premere TAB nell'editor corrente per spostare lo stato attivo sull'elemento con stato attivabile successivo. Il comando {0} non pu\xF2 essere attualmente attivato con un tasto di scelta rapida.","Premere TAB nell'editor corrente per inserire il carattere di tabulazione. Per attivare/disattivare questo comportamento, premere {0}.","Premere TAB nell'editor corrente per inserire il carattere di tabulazione. Il comando {0} non pu\xF2 essere attualmente attivato con un tasto di scelta rapida.","Premere Comando+H per aprire una finestra del browser contenente maggiori informazioni correlate all'accessibilit\xE0 dell'editor.","Premere CTRL+H per aprire una finestra del browser contenente maggiori informazioni correlate all'accessibilit\xE0 dell'editor.","Per chiudere questa descrizione comando e tornare all'editor, premere ESC o MAIUSC+ESC.","Visualizza la Guida sull'accessibilit\xE0","Sviluppatore: Controlla token","Vai a Riga/Colonna...","Mostra tutti i provider di accesso rapido","Riquadro comandi","Mostra ed esegui comandi","Vai al simbolo...","Vai al simbolo per categoria...","Contenuto editor","Premere ALT+F1 per le opzioni di accessibilit\xE0.","Attiva/disattiva tema a contrasto elevato","Effettuate {0} modifiche in {1} file"],"vs/editor/common/view/editorColorRegistry":["Colore di sfondo per l'evidenziazione della riga alla posizione del cursore.","Colore di sfondo per il bordo intorno alla riga alla posizione del cursore.","Colore di sfondo degli intervalli evidenziati, ad esempio dalle funzionalit\xE0 Quick Open e Trova. Il colore non deve essere opaco per evitare di nascondere le decorazioni sottostanti.","Colore di sfondo del bordo intorno agli intervalli selezionati.","Colore di sfondo del simbolo evidenziato, ad esempio per passare alla definizione o al simbolo successivo/precedente. Il colore non deve essere opaco per evitare di nascondere le decorazioni sottostanti.","Colore di sfondo del bordo intorno ai simboli selezionati.","Colore del cursore dell'editor.","Colore di sfondo del cursore editor. Permette di personalizzare il colore di un carattere quando sovrapposto da un blocco cursore.","Colore dei caratteri di spazio vuoto nell'editor.","Colore delle guide per i rientri dell'editor.","Colore delle guide di indentazione dell'editor attivo","Colore dei numeri di riga dell'editor.","Colore del numero di riga attivo dell'editor","Id \xE8 deprecato. In alternativa usare 'editorLineNumber.activeForeground'.","Colore del numero di riga attivo dell'editor","Colore dei righelli dell'editor.","Colore primo piano delle finestre di CodeLens dell'editor","Colore di sfondo delle parentesi corrispondenti","Colore delle caselle di parentesi corrispondenti","Colore del bordo del righello delle annotazioni.","Colore di sfondo del righello delle annotazioni dell'editor. Viene usato solo quando la minimappa \xE8 abilitata e posizionata sul lato destro dell'editor.","Colore di sfondo della barra di navigazione dell'editor. La barra contiene i margini di glifo e i numeri di riga.","Colore del bordo del codice sorgente non necessario (non usato) nell'editor.",`Opacit\xE0 del codice sorgente non necessario (non usato) nell'editor. Ad esempio, con "#000000c0" il rendering del codice verr\xE0 eseguito con il 75% di opacit\xE0. Per i temi a contrasto elevato, usare il colore del tema 'editorUnnecessaryCode.border' per sottolineare il codice non necessario invece di opacizzarlo.`,"Colore del marcatore del righello delle annotazioni per le evidenziazioni degli intervalli. Il colore non deve essere opaco per evitare di nascondere le decorazioni sottostanti.","Colore del marcatore del righello delle annotazioni per gli errori.","Colore del marcatore del righello delle annotazioni per gli avvisi.","Colore del marcatore del righello delle annotazioni per i messaggi di tipo informativo."],"vs/editor/contrib/anchorSelect/anchorSelect":["Ancoraggio della selezione","Ancoraggio impostato alla posizione {0}:{1}","Imposta ancoraggio della selezione","Vai ad ancoraggio della selezione","Seleziona da ancoraggio a cursore","Annulla ancoraggio della selezione"],"vs/editor/contrib/bracketMatching/bracketMatching":["Colore del marcatore del righello delle annotazioni per la corrispondenza delle parentesi.","Vai alla parentesi quadra","Seleziona fino alla parentesi","Vai alla parentesi &&quadra"],"vs/editor/contrib/caretOperations/caretOperations":["Sposta testo selezionato a sinistra","Sposta testo selezionato a destra"],"vs/editor/contrib/caretOperations/transpose":["Trasponi lettere"],"vs/editor/contrib/clipboard/clipboard":["&&Taglia","Taglia","Taglia","&&Copia","Copia","Copia","&&Incolla","Incolla","Incolla","Copia con evidenziazione sintassi"],"vs/editor/contrib/codeAction/codeActionCommands":["Tipo dell'azione codice da eseguire.","Controlla quando vengono applicate le azioni restituite.","Applica sempre la prima azione codice restituita.","Applica la prima azione codice restituita se \xE8 l'unica.","Non applicare le azioni codice restituite.","Controlla se devono essere restituite solo le azioni codice preferite.","Si \xE8 verificato un errore sconosciuto durante l'applicazione dell'azione del codice","Correzione rapida...","Azioni codice non disponibili","Non sono disponibili azioni codice preferite per '{0}'","Non sono disponibili azioni codice per '{0}'","Non sono disponibili azioni codice preferite","Azioni codice non disponibili","Effettua refactoring...","Non sono disponibili refactoring preferiti per '{0}'","Non sono disponibili refactoring per '{0}'","Non sono disponibili refactoring preferiti","Refactoring non disponibili","Azione origine...","Non sono disponibili azioni origine preferite per '{0}'","Non sono disponibili azioni origine per '{0}'","Non sono disponibili azioni origine preferite","Azioni origine non disponibili","Organizza import","Azioni di organizzazione Imports non disponibili","Correggi tutto","Non \xE8 disponibile alcuna azione Correggi tutto","Correzione automatica...","Non sono disponibili correzioni automatiche"],"vs/editor/contrib/codeAction/lightBulbWidget":["Mostra correzioni. Correzione preferita disponibile ({0})","Mostra correzioni ({0})","Mostra correzioni"],"vs/editor/contrib/codelens/codelensController":["Mostra comandi di CodeLens per la riga corrente"],"vs/editor/contrib/comment/comment":["Attiva/disattiva commento per la riga","Attiva/Disattiva commento per la &&riga","Aggiungi commento per la riga","Rimuovi commento per la riga","Attiva/Disattiva commento per il blocco","Attiva/Disattiva commento per il &&blocco"],"vs/editor/contrib/contextmenu/contextmenu":["Mostra il menu di scelta rapida editor"],"vs/editor/contrib/cursorUndo/cursorUndo":["Cursore - Annulla","Cursore - Ripeti"],"vs/editor/contrib/find/findController":["Trova","&&Trova","Trova con selezione","Trova successivo","Trova successivo","Trova precedente","Trova precedente","Trova selezione successiva","Trova selezione precedente","Sostituisci","&&Sostituisci"],"vs/editor/contrib/find/findWidget":["Icona per 'Trova nella selezione' nel widget di ricerca dell'editor.","Icona per indicare che il widget di ricerca dell'editor \xE8 compresso.","Icona per indicare che il widget di ricerca dell'editor \xE8 espanso.","Icona per 'Sostituisci' nel widget di ricerca dell'editor.","Icona per 'Sostituisci tutto' nel widget di ricerca dell'editor.","Icona per 'Trova precedente' nel widget di ricerca dell'editor.","Icona per 'Trova successivo' nel widget di ricerca dell'editor.","Trova","Trova","Corrispondenza precedente","Corrispondenza successiva","Trova nella selezione","Chiudi","Sostituisci","Sostituisci","Sostituisci","Sostituisci tutto","Attiva/Disattiva modalit\xE0 sostituzione","Solo i primi {0} risultati vengono evidenziati, ma tutte le operazioni di ricerca funzionano su tutto il testo.","{0} di {1}","Nessun risultato","{0} trovato","{0} trovati per '{1}'","{0} trovati per '{1}' alla posizione {2}","{0} trovati per '{1}'","Il tasto di scelta rapida CTRL+INVIO ora consente di inserire l'interruzione di linea invece di sostituire tutto. Per eseguire l'override di questo comportamento, \xE8 possibile modificare il tasto di scelta rapida per editor.action.replaceAll."],"vs/editor/contrib/folding/folding":["Espandi","Espandi in modo ricorsivo","Riduci","Attiva/Disattiva riduzione","Riduci in modo ricorsivo","Riduci tutti i blocchi commento","Riduci tutte le regioni","Espandi tutte le regioni","Riduci tutto","Espandi tutto","Livello riduzione {0}","Colore di sfondo degli intervalli con riduzione. Il colore non deve essere opaco per evitare di nascondere le decorazioni sottostanti.","Colore del controllo di riduzione nella barra di navigazione dell'editor."],"vs/editor/contrib/folding/foldingDecorations":["Icona per gli intervalli espansi nel margine del glifo dell'editor.","Icona per gli intervalli compressi nel margine del glifo dell'editor."],"vs/editor/contrib/fontZoom/fontZoom":["Zoom avanti tipo di carattere editor","Zoom indietro tipo di carattere editor","Reimpostazione zoom tipo di carattere editor"],"vs/editor/contrib/format/format":["\xC8 stata apportata 1 modifica di formattazione a riga {0}","Sono state apportate {0} modifiche di formattazione a riga {1}","\xC8 stata apportata 1 modifica di formattazione tra le righe {0} e {1}","Sono state apportate {0} modifiche di formattazione tra le righe {1} e {2}"],"vs/editor/contrib/format/formatActions":["Formatta documento","Formatta selezione"],"vs/editor/contrib/gotoError/gotoError":["Vai al problema successivo (Errore, Avviso, Informazioni)","Icona per il marcatore Vai a successivo.","Vai al problema precedente (Errore, Avviso, Informazioni)","Icona per il marcatore Vai a precedente.","Vai al problema successivo nei file (Errore, Avviso, Informazioni)","&&Problema successivo","Vai al problema precedente nei file (Errore, Avviso, Informazioni)","&&Problema precedente"],"vs/editor/contrib/gotoError/gotoErrorWidget":["Errore","Avviso","Info","Suggerimento","{0} a {1}. ","{0} di {1} problemi","{0} di {1} problema","Colore per gli errori del widget di spostamento tra marcatori dell'editor.","Colore per gli avvisi del widget di spostamento tra marcatori dell'editor.","Colore delle informazioni del widget di navigazione marcatori dell'editor.","Sfondo del widget di spostamento tra marcatori dell'editor."],"vs/editor/contrib/gotoSymbol/goToCommands":["Anteprima","Definizioni","Non \xE8 stata trovata alcuna definizione per '{0}'","Non \xE8 stata trovata alcuna definizione","Vai alla definizione","Vai alla &&definizione","Apri definizione lateralmente","Visualizza in anteprima la definizione","Dichiarazioni","Non \xE8 stata trovata alcuna dichiarazione per '{0}'","Dichiarazione non trovata","Vai a dichiarazione","Vai a &&dichiarazione","Non \xE8 stata trovata alcuna dichiarazione per '{0}'","Dichiarazione non trovata","Anteprima dichiarazione","Definizioni di tipo","Non sono state trovate definizioni di tipi per '{0}'","Non sono state trovate definizioni di tipi","Vai alla definizione di tipo","Vai alla &&definizione di tipo","Anteprima definizione di tipo","Implementazioni","Non sono state trovate implementazioni per '{0}'","Non sono state trovate implementazioni","Vai a implementazioni","Vai a &&Implementazioni","Visualizza implementazioni","Non sono stati trovati riferimenti per '{0}'","Non sono stati trovati riferimenti","Vai a Riferimenti","Vai a &&riferimenti","Riferimenti","Anteprima riferimenti","Riferimenti","Vai a qualsiasi simbolo","Posizioni","Nessun risultato per '{0}'","Riferimenti"],"vs/editor/contrib/gotoSymbol/link/goToDefinitionAtPosition":["Fare clic per visualizzare {0} definizioni."],"vs/editor/contrib/gotoSymbol/peek/referencesController":["Caricamento...","{0} ({1})"],"vs/editor/contrib/gotoSymbol/peek/referencesTree":["{0} riferimenti","{0} riferimento","Riferimenti"],"vs/editor/contrib/gotoSymbol/peek/referencesWidget":["anteprima non disponibile","Nessun risultato","Riferimenti"],"vs/editor/contrib/gotoSymbol/referencesModel":["simbolo in {0} alla riga {1} colonna {2}","simbolo in {0} alla riga {1} colonna {2}, {3}","1 simbolo in {0}, percorso completo {1}","{0} simboli in {1}, percorso completo {2}","Non sono stati trovati risultati","Trovato 1 simbolo in {0}","Trovati {0} simboli in {1}","Trovati {0} simboli in {1} file"],"vs/editor/contrib/gotoSymbol/symbolNavigation":["Simbolo {0} di {1}, {2} per il successivo","Simbolo {0} di {1}"],"vs/editor/contrib/hover/hover":["Visualizza passaggio del mouse","Mostra anteprima definizione al passaggio del mouse"],"vs/editor/contrib/hover/markdownHoverParticipant":["Caricamento..."],"vs/editor/contrib/hover/markerHoverParticipant":["View Problem","Non sono disponibili correzioni rapide","Verifica disponibilit\xE0 correzioni rapide...","Non sono disponibili correzioni rapide","Correzione rapida..."],"vs/editor/contrib/inPlaceReplace/inPlaceReplace":["Sostituisci con il valore precedente","Sostituisci con il valore successivo"],"vs/editor/contrib/indentation/indentation":["Converti rientro in spazi","Converti rientro in tabulazioni","Dimensione tabulazione configurata","Seleziona dimensione tabulazione per il file corrente","Imposta rientro con tabulazioni","Imposta rientro con spazi","Rileva rientro dal contenuto","Imposta nuovo rientro per righe","Re-Indenta le Linee Selezionate"],"vs/editor/contrib/linesOperations/linesOperations":["Copia la riga in alto","&&Copia la riga in alto","Copia la riga in basso","Co&&pia la riga in basso","Duplica selezione","&&Duplica selezione","Sposta la riga in alto","Sposta la riga in &&alto","Sposta la riga in basso","Sposta la riga in &&basso","Ordinamento righe crescente","Ordinamento righe decrescente","Taglia spazio vuoto finale","Elimina riga","Imposta un rientro per la riga","Riduci il rientro per la riga","Inserisci la riga sopra","Inserisci la riga sotto","Elimina tutto a sinistra","Elimina tutto a destra","Unisci righe","Trasponi caratteri intorno al cursore","Converti in maiuscolo","Converti in minuscolo","Trasforma in Tutte Iniziali Maiuscole","Trasforma in snake case"],"vs/editor/contrib/linkedEditing/linkedEditing":["Avvia modifica collegata","Colore di sfondo quando l'editor viene rinominato automaticamente in base al tipo."],"vs/editor/contrib/links/links":["Esegui il comando","Visita il collegamento","CMD+clic","CTRL+clic","Opzione+clic","ALT+clic","Esegue il comando {0}","Non \xE8 stato possibile aprire questo collegamento perch\xE9 il formato non \xE8 valido: {0}","Non \xE8 stato possibile aprire questo collegamento perch\xE9 manca la destinazione.","Apri collegamento"],"vs/editor/contrib/message/messageController":["Indica se l'editor visualizza attualmente un messaggio inline","Non \xE8 possibile modificare nell'editor di sola lettura"],"vs/editor/contrib/multicursor/multicursor":["Aggiungi cursore sopra","&&Aggiungi cursore sopra","Aggiungi cursore sotto","A&&ggiungi cursore sotto","Aggiungi cursori a fine riga","Aggiungi c&&ursori a fine riga","Aggiungi cursori alla fine","Aggiungi cursori all'inizio","Aggiungi selezione a risultato ricerca successivo","Aggiungi &&occorrenza successiva","Aggiungi selezione a risultato ricerca precedente","Aggiungi occorrenza &&precedente","Sposta ultima selezione a risultato ricerca successivo","Sposta ultima selezione a risultato ricerca precedente","Seleziona tutte le occorrenze del risultato ricerca","Seleziona &&tutte le occorrenze","Cambia tutte le occorrenze"],"vs/editor/contrib/parameterHints/parameterHints":["Attiva i suggerimenti per i parametri"],"vs/editor/contrib/parameterHints/parameterHintsWidget":["Icona per visualizzare il suggerimento del parametro successivo.","Icona per visualizzare il suggerimento del parametro precedente.","{0}, suggerimento"],"vs/editor/contrib/peekView/peekView":["Chiudi","Colore di sfondo dell'area del titolo della visualizzazione rapida.","Colore del titolo della visualizzazione rapida.","Colore delle informazioni del titolo della visualizzazione rapida.","Colore dei bordi e della freccia della visualizzazione rapida.","Colore di sfondo dell'elenco risultati della visualizzazione rapida.","Colore primo piano dei nodi riga nell'elenco risultati della visualizzazione rapida.","Colore primo piano dei nodi file nell'elenco risultati della visualizzazione rapida.","Colore di sfondo della voce selezionata nell'elenco risultati della visualizzazione rapida.","Colore primo piano della voce selezionata nell'elenco risultati della visualizzazione rapida.","Colore di sfondo dell'editor di visualizzazioni rapide.","Colore di sfondo della barra di navigazione nell'editor visualizzazione rapida.","Colore dell'evidenziazione delle corrispondenze nell'elenco risultati della visualizzazione rapida.","Colore dell'evidenziazione delle corrispondenze nell'editor di visualizzazioni rapide.","Bordo dell'evidenziazione delle corrispondenze nell'editor di visualizzazioni rapide."],"vs/editor/contrib/quickAccess/gotoLineQuickAccess":["Aprire prima un editor di testo per passare a una riga.","Passa a riga {0} e colonna {1}.","Vai alla riga {0}.","Riga corrente: {0}, carattere: {1}. Digitare un numero di riga a cui passare compreso tra 1 e {2}.","Riga corrente: {0}, Carattere: {1}. Digitare un numero di riga a cui passare."],"vs/editor/contrib/quickAccess/gotoSymbolQuickAccess":["Per passare a un simbolo, aprire prima un editor di testo con informazioni sui simboli.","L'editor di testo attivo non fornisce informazioni sui simboli.","Non ci sono simboli dell'editor corrispondenti","Non ci sono simboli dell'editor","Apri lateralmente","Apri in basso","simboli ({0})","propriet\xE0 ({0})","metodi ({0})","funzioni ({0})","costruttori ({0})","variabili ({0})","classi ({0})","struct ({0})","eventi ({0})","operatori ({0})","interfacce ({0})","spazi dei nomi ({0})","pacchetti ({0})","parametri di tipo ({0})","moduli ({0})","propriet\xE0 ({0})","enumerazioni ({0})","membri di enumerazione ({0})","stringhe ({0})","file ({0})","matrici ({0})","numeri ({0})","valori booleani ({0})","oggetti ({0})","chiavi ({0})","campi ({0})","costanti ({0})"],"vs/editor/contrib/rename/rename":["Nessun risultato.","Si \xE8 verificato un errore sconosciuto durante la risoluzione del percorso di ridenominazione","Ridenominazione di '{0}'","Ridenominazione di {0}","Correttamente rinominato '{0}' in '{1}'. Sommario: {2}","La ridenominazione non \xE8 riuscita ad applicare le modifiche","La ridenominazione non \xE8 riuscita a calcolare le modifiche","Rinomina simbolo","Abilita/Disabilita l'opzione per visualizzare le modifiche in anteprima prima della ridenominazione"],"vs/editor/contrib/rename/renameInputField":["Consente di rinominare l'input. Digitare il nuovo nome e premere INVIO per eseguire il commit.","{0} per rinominare, {1} per visualizzare in anteprima"],"vs/editor/contrib/smartSelect/smartSelect":["Espandi selezione","Espan&&di selezione","Riduci selezione","&&Riduci selezione"],"vs/editor/contrib/snippet/snippetVariables":["Domenica","Luned\xEC","Marted\xEC","Mercoled\xEC","Gioved\xEC","Venerd\xEC","Sabato","Dom","Lun","Mar","Mer","Gio","Ven","Sab","Gennaio","Febbraio","Marzo","Aprile","Mag","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre","Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],"vs/editor/contrib/suggest/suggestController":["In seguito all'accettazione di '{0}' sono state apportate altre {1} modifiche","Attiva suggerimento","Inserisci","Inserisci","Sostituisci","Sostituisci","Inserisci","nascondi dettagli","mostra dettagli","Reimposta le dimensioni del widget dei suggerimenti"],"vs/editor/contrib/suggest/suggestWidget":["Colore di sfondo del widget dei suggerimenti.","Colore del bordo del widget dei suggerimenti.","Colore primo piano del widget dei suggerimenti.","Colore di sfondo della voce selezionata del widget dei suggerimenti.","Colore delle evidenziazioni corrispondenze nel widget dei suggerimenti.","Caricamento...","Non ci sono suggerimenti.","{0}, documenti: {1}","Suggerisci"],"vs/editor/contrib/suggest/suggestWidgetDetails":["Chiudi","Caricamento..."],"vs/editor/contrib/suggest/suggestWidgetRenderer":["Icona per visualizzare altre informazioni nel widget dei suggerimenti.","Altre informazioni"],"vs/editor/contrib/suggest/suggestWidgetStatus":["{0} ({1})"],"vs/editor/contrib/symbolIcons/symbolIcons":["Colore primo piano per i simboli di matrice. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli booleani. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di classe. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di colore. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di costante. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di costruttore. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di enumeratore. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di membro di enumeratore. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di evento. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di campo. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di file. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di cartella. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di funzione. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di interfaccia. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di chiave. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di parola chiave. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di metodo. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di modulo. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di spazio dei nomi. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli Null. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli numerici. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di oggetto. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di operatore. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di pacchetto. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di propriet\xE0. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di riferimento. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di frammento. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di stringa. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di struct. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di testo. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di parametro di tipo. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di unit\xE0. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti.","Colore primo piano per i simboli di variabile. Questi simboli vengono visualizzati nella struttura, nell'elemento di navigazione e nel widget dei suggerimenti."],"vs/editor/contrib/toggleTabFocusMode/toggleTabFocusMode":["Attiva/Disattiva l'uso di TAB per spostare lo stato attivo","Se si preme TAB, lo stato attivo verr\xE0 spostato sull'elemento con stato attivabile successivo.","Se si preme TAB, verr\xE0 inserito il carattere di tabulazione"],"vs/editor/contrib/tokenization/tokenization":["Sviluppatore: Forza retokenizzazione"],"vs/editor/contrib/unusualLineTerminators/unusualLineTerminators":["Caratteri di terminazione di riga insoliti","Sono stati rilevati caratteri di terminazione di riga insoliti","Questo file contiene uno o pi\xF9 caratteri di terminazione di riga insoliti, come separatore di riga (LS) o separatore di paragrafo (PS).\r\n\r\n\xC8 consigliabile rimuoverli dal file. \xC8 possibile configurare questa opzione tramite `editor.unusualLineTerminators`.","Correggi questo file","Ignora il problema per questo file"],"vs/editor/contrib/wordHighlighter/wordHighlighter":["Colore di sfondo di un simbolo durante l'accesso in lettura, ad esempio durante la lettura di una variabile. Il colore non deve essere opaco per evitare di nascondere le decorazioni sottostanti.","Colore di sfondo di un simbolo durante l'accesso in scrittura, ad esempio durante la scrittura in una variabile. Il colore non deve essere opaco per evitare di nascondere le decorazioni sottostanti.","Colore del bordo di un simbolo durante l'accesso in lettura, ad esempio durante la lettura di una variabile.","Colore del bordo di un simbolo durante l'accesso in scrittura, ad esempio durante la scrittura in una variabile.","Colore del marcatore del righello delle annotazioni per le evidenziazioni dei simboli. Il colore non deve essere opaco per evitare di nascondere le decorazioni sottostanti.","Colore del marcatore del righello delle annotazioni per le evidenziazioni dei simboli di accesso in scrittura. Il colore non deve essere opaco per evitare di nascondere le decorazioni sottostanti.","Vai al prossimo simbolo evidenziato","Vai al precedente simbolo evidenziato","Attiva/disattiva evidenziazione simbolo"],"vs/editor/contrib/wordOperations/wordOperations":["Elimina parola"],"vs/platform/actions/browser/menuEntryActionViewItem":["{0} ({1})"],"vs/platform/configuration/common/configurationRegistry":["Override configurazione predefinita del linguaggio","Consente di configurare le impostazioni dell'editor di cui eseguire l'override per un linguaggio.","Questa impostazione non supporta la configurazione per lingua.","Non \xE8 possibile registrare una propriet\xE0 vuota","Non \xE8 possibile registrare '{0}'. Corrisponde al criterio di propriet\xE0 '\\\\[.*\\\\]$' per la descrizione delle impostazioni dell'editor specifiche del linguaggio. Usare il contributo 'configurationDefaults'.","Non \xE8 possibile registrare '{0}'. Questa propriet\xE0 \xE8 gi\xE0 registrata."],"vs/platform/contextkey/browser/contextKeyService":["Comando che restituisce informazioni sulle chiavi di contesto"],"vs/platform/contextkey/common/contextkeys":["Whether the operating system is Windows"],"vs/platform/keybinding/common/abstractKeybindingService":["\xC8 stato premuto ({0}). In attesa del secondo tasto...","La combinazione di tasti ({0}, {1}) non \xE8 un comando."],"vs/platform/list/browser/listService":["Workbench","Rappresenta il tasto 'Control' in Windows e Linux e il tasto 'Comando' in macOS.","Rappresenta il tasto 'Alt' in Windows e Linux e il tasto 'Opzione' in macOS.","Il modificatore da utilizzare per aggiungere un elemento di alberi e liste ad una selezione multipla con il mouse (ad esempio in Esplora Risorse, apre gli editor e le viste scm). Le gesture del mouse 'Apri a lato' - se supportate - si adatteranno in modo da non creare conflitti con il modificatore di selezione multipla.","Controls how to open items in trees and lists using the mouse (if supported). Note that some trees and lists might choose to ignore this setting if it is not applicable.","Controlla se elenchi e alberi supportano lo scorrimento orizzontale nell'area di lavoro. Avviso: l'attivazione di questa impostazione pu\xF2 influire sulle prestazioni.","Controlla il rientro dell'albero in pixel.","Controlla se l'albero deve eseguire il rendering delle guide per i rientri.","Controlla se elenchi e alberi prevedono lo scorrimento uniforme.","Con lo stile di spostamento da tastiera simple lo stato attivo si trova sugli elementi che corrispondono all'input da tastiera. L'abbinamento viene effettuato solo in base ai prefissi.","Con lo stile di spostamento da tastiera highlight vengono evidenziati gli elementi corrispondenti all'input da tastiera. Spostandosi ulteriormente verso l'alto o verso il basso ci si sposter\xE0 solo negli elementi evidenziati.","Con lo stile di spostamento da tastiera filter verranno filtrati e nascosti tutti gli elementi che non corrispondono all'input da tastiera.","Controlla lo stile di spostamento da tastiera per elenchi e alberi nel workbench. Le opzioni sono: simple, highlight e filter.","Controlla se gli spostamenti da tastiera per elenchi e alberi vengono attivati semplicemente premendo un tasto. Se \xE8 impostato su `false`, gli spostamenti da tastiera vengono attivati solo durante l'esecuzione del comando `list.toggleKeyboardNavigation`, al quale \xE8 possibile assegnare un tasto di scelta rapida.","Controlla l'espansione delle cartelle di alberi quando si fa clic sui nomi delle cartelle. Tenere presente che alcuni alberi ed elenchi potrebbero scegliere di ignorare questa impostazione se non \xE8 applicabile."],"vs/platform/markers/common/markers":["Errore","Avviso","Info"],"vs/platform/quickinput/browser/commandsQuickAccess":["{0}, {1}","usate di recente","altri comandi","Il comando '{0}' ha restituito un errore ({1})"],"vs/platform/quickinput/browser/helpQuickAccess":["comandi globali","comandi dell'editor","{0}, {1}"],"vs/platform/theme/common/colorRegistry":["Colore primo piano generale. Questo colore viene usato solo se non \xE8 sostituito da quello di un componente.","Colore primo piano globale per i messaggi di errore. Questo colore viene usato solo se non \xE8 sostituito da quello di un componente.","Colore predefinito per le icone nel workbench.","Colore del bordo globale per gli elementi evidenziati. Questo colore viene usato solo se non \xE8 sostituito da quello di un componente.","Un bordo supplementare attorno agli elementi per contrastarli maggiormente rispetto agli altri.","Un bordo supplementare intorno agli elementi attivi per contrastarli maggiormente rispetto agli altri.","Colore primo piano dei link nel testo.","Colore di sfondo per i blocchi di codice nel testo.","Colore ombreggiatura dei widget, ad es. Trova/Sostituisci all'interno dell'editor.","Sfondo della casella di input.","Primo piano della casella di input.","Bordo della casella di input.","Colore del bordo di opzioni attivate nei campi di input.","Colore di sfondo di opzioni attivate nei campi di input.","Colore primo piano di opzioni attivate nei campi di input.","Colore di sfondo di convalida dell'input di tipo Informazione.","Colore primo piano di convalida dell'input di tipo Informazione.","Colore del bordo della convalida dell'input di tipo Informazione.","Colore di sfondo di convalida dell'input di tipo Avviso.","Colore primo piano di convalida dell'input di tipo Avviso.","Colore del bordo della convalida dell'input di tipo Avviso.","Colore di sfondo di convalida dell'input di tipo Errore.","Colore primo piano di convalida dell'input di tipo Errore.","Colore del bordo della convalida dell'input di tipo Errore.","Sfondo dell'elenco a discesa.","Primo piano dell'elenco a discesa.","Colore primo piano del pulsante.","Colore di sfondo del pulsante.","Colore di sfondo del pulsante al passaggio del mouse.","Colore di sfondo del badge. I badge sono piccole etichette informative, ad esempio per mostrare il conteggio dei risultati della ricerca.","Colore primo piano del badge. I badge sono piccole etichette informative, ad esempio per mostrare il conteggio dei risultati di una ricerca.","Ombra della barra di scorrimento per indicare lo scorrimento della visualizzazione.","Colore di sfondo del cursore della barra di scorrimento.","Colore di sfondo del cursore della barra di scorrimento al passaggio del mouse.","Colore di sfondo del cursore della barra di scorrimento quando si fa clic con il mouse.","Colore di sfondo dell'indicatore di stato che pu\xF2 essere mostrato per operazioni a esecuzione prolungata.","Colore di sfondo del testo dell'errore nell'editor. Il colore non deve essere opaco per evitare di nascondere le decorazioni sottostanti.","Colore primo piano degli indicatori di errore nell'editor.","Colore del bordo delle caselle di errore nell'editor.","Colore di sfondo del testo dell'avviso nell'editor. Il colore non deve essere opaco per evitare di nascondere le decorazioni sottostanti.","Colore primo piano degli indicatori di avviso nell'editor.","Colore del bordo delle caselle di avviso nell'editor.","Colore di sfondo del testo delle informazioni nell'editor. Il colore non deve essere opaco per evitare di nascondere le decorazioni sottostanti.","Colore primo piano degli indicatori di informazioni nell'editor.","Colore del bordo delle caselle informative nell'editor.","Colore primo piano degli indicatori di suggerimento nell'editor.","Colore del bordo delle caselle dei suggerimenti nell'editor.","Colore di sfondo dell'editor.","Colore primo piano predefinito dell'editor.","Colore di sfondo dei widget dell'editor, ad esempio Trova/Sostituisci.","Colore primo piano dei widget dell'editor, ad esempio Trova/Sostituisci.","Colore del bordo dei widget dell'editor. Il colore viene usato solo se il widget sceglie di avere un bordo e se il colore non \xE8 sottoposto a override da un widget.","Colore del bordo della barra di ridimensionamento dei widget dell'editor. Il colore viene usato solo se il widget sceglie di avere un bordo di ridimensionamento e se il colore non \xE8 sostituito da quello di un widget.","Colore di sfondo di Selezione rapida. Il widget Selezione rapida \xE8 il contenitore di selezioni quali il riquadro comandi.","Colore primo piano di Selezione rapida. Il widget Selezione rapida \xE8 il contenitore di selezioni quali il riquadro comandi.","Colore di sfondo del titolo di Selezione rapida. Il widget Selezione rapida \xE8 il contenitore di selezioni quali il riquadro comandi.","Colore di sfondo di Selezione rapida per l'elemento con lo stato attivo.","Colore di selezione rapida per il raggruppamento delle etichette.","Colore di selezione rapida per il raggruppamento dei bordi.","Colore della selezione dell'editor.","Colore del testo selezionato per il contrasto elevato.","Colore della selezione in un editor inattivo. Il colore non deve essere opaco per evitare di nascondere le decorazioni sottostanti.","Colore delle aree con lo stesso contenuto della selezione. Il colore non deve essere opaco per evitare di nascondere le decorazioni sottostanti.","Colore del bordo delle regioni con lo stesso contenuto della selezione.","Colore della corrispondenza di ricerca corrente.","Colore degli altri risultati della ricerca. Il colore non deve essere opaco per evitare di nascondere le decorazioni sottostanti.","Colore dell'intervallo di limite della ricerca. Il colore non deve essere opaco per evitare di nascondere le decorazioni sottostanti.","Colore del bordo della corrispondenza della ricerca corrente.","Colore del bordo delle altre corrispondenze della ricerca.","Colore del bordo dell'intervallo che limita la ricerca. Il colore non deve essere opaco per evitare di nascondere le decorazioni sottostanti.","Evidenziazione sotto la parola per cui \xE8 visualizzata un'area sensibile al passaggio del mouse. Il colore non deve essere opaco per evitare di nascondere le decorazioni sottostanti.","Colore di sfondo dell'area sensibile al passaggio del mouse dell'editor.","Colore primo piano dell'area sensibile al passaggio del mouse dell'editor.","Colore del bordo dell'area sensibile al passaggio del mouse dell'editor.","Colore di sfondo della barra di stato sensibile al passaggio del mouse dell'editor.","Colore dei collegamenti attivi.","Colore primo piano dei suggerimenti inline","Colore di sfondo dei suggerimenti inline","Colore usato per l'icona delle azioni con lampadina.","Colore usato per l'icona delle azioni di correzione automatica con lampadina.","Colore di sfondo per il testo che \xE8 stato inserito. Il colore non deve essere opaco per evitare di nascondere le decorazioni sottostanti.","Colore di sfondo per il testo che \xE8 stato rimosso. Il colore non deve essere opaco per evitare di nascondere le decorazioni sottostanti.","Colore del contorno del testo che \xE8 stato inserito.","Colore del contorno del testo che \xE8 stato rimosso.","Colore del bordo tra due editor di testo.","Colore del riempimento diagonale dell'editor diff. Il riempimento diagonale viene usato nelle visualizzazioni diff affiancate.","Colore di sfondo dell'elenco/albero per l'elemento con lo stato attivo quando l'elenco/albero \xE8 attivo. Un elenco/albero attivo ha lo stato attivo della tastiera, a differenza di uno inattivo.","Colore primo piano dell'elenco/albero per l'elemento con lo stato attivo quando l'elenco/albero \xE8 attivo. Un elenco/albero attivo ha lo stato attivo della tastiera, a differenza di uno inattivo.","Colore del contorno dell'elenco/albero per l'elemento con lo stato attivo quando l'elenco/albero \xE8 attivo. Un elenco/albero attivo ha lo stato attivo della tastiera, a differenza di uno inattivo.","Colore di sfondo dell'elenco/albero per l'elemento selezionato quando l'elenco/albero \xE8 attivo. Un elenco/albero attivo ha lo stato attivo della tastiera, a differenza di uno inattivo.","Colore primo piano dell'elenco/albero per l'elemento selezionato quando l'elenco/albero \xE8 attivo. Un elenco/albero attivo ha lo stato attivo della tastiera, a differenza di uno inattivo.","Colore di sfondo dell'elenco/albero per l'elemento selezionato quando l'elenco/albero \xE8 inattivo. Un elenco/albero attivo ha lo stato attivo della tastiera, a differenza di uno inattivo.","Colore primo piano dell'elenco/albero per l'elemento selezionato quando l'elenco/albero \xE8 inattivo. Un elenco/albero attivo ha lo stato attivo della tastiera, a differenza di uno inattivo.","Colore di sfondo dell'elenco/albero per l'elemento con lo stato attivo quando l'elenco/albero \xE8 inattivo. Un elenco/albero attivo ha lo stato attivo della tastiera, uno inattivo no.","Colore del contorno dell'elenco/albero per l'elemento con lo stato attivo quando l'elenco/albero \xE8 inattivo. Un elenco/albero attivo ha lo stato attivo della tastiera, a differenza di uno inattivo.","Sfondo dell'elenco/albero al passaggio del mouse sugli elementi.","Primo piano dell'elenco/albero al passaggio del mouse sugli elementi.","Sfondo dell'elenco/albero durante il trascinamento degli elementi selezionati.","Colore primo piano Elenco/Struttura ad albero delle occorrenze trovate durante la ricerca nell'Elenco/Struttura ad albero.","Colore di sfondo del widget del filtro per tipo in elenchi e alberi.","Colore del contorno del widget del filtro per tipo in elenchi e alberi.","Colore del contorno del widget del filtro per tipo in elenchi e alberi quando non sono presenti corrispondenze.","Colore del tratto dell'albero per le guide per i rientri.","Colore del tratto dell'albero per le guide per i rientri.","Colore del bordo del menu.","Colore primo piano delle voci di menu.","Colore di sfondo delle voci di menu.","Colore primo piano della voce di menu selezionata nei menu.","Colore di sfondo della voce di menu selezionata nei menu.","Colore del bordo della voce di menu selezionata nei menu.","Colore di un elemento separatore delle voci di menu.","Colore di sfondo dell'evidenziazione della tabulazione di un frammento.","Colore del bordo dell'evidenziazione della tabulazione di un frammento.","Colore di sfondo dell'evidenziazione della tabulazione finale di un frammento.","Colore del bordo dell'evidenziazione della tabulazione finale di un frammento.","Colore del marcatore del righello delle annotazioni per la ricerca di corrispondenze. Il colore non deve essere opaco per evitare di nascondere le decorazioni sottostanti.","Colore del marcatore del righello delle annotazioni per le evidenziazioni delle selezioni. Il colore non deve essere opaco per evitare di nascondere le decorazioni sottostanti.","Colore del marcatore della minimappa per la ricerca delle corrispondenze.","Colore del marcatore della minimappa per la selezione dell'editor.","Colore del marcatore della minimappa per gli errori.","Colore del marcatore della minimappa per gli avvisi.","Colore di sfondo della minimappa.","Colore di sfondo del dispositivo di scorrimento della minimappa.","Colore di sfondo del dispositivo di scorrimento della minimappa al passaggio del mouse.","Colore di sfondo del dispositivo di scorrimento della minimappa quando si fa clic con il mouse.","Colore usato per l'icona di errore dei problemi.","Colore usato per l'icona di avviso dei problemi.","Colore usato per l'icona informazioni dei problemi."],"vs/platform/theme/common/iconRegistry":["ID del tipo di carattere da usare. Se non \xE8 impostato, viene usato il tipo di carattere definito per primo.","Tipo di carattere associato alla definizione di icona.","Icona dell'azione di chiusura nei widget."],"vs/platform/undoRedo/common/undoRedoService":["I file seguenti sono stati chiusi e modificati nel disco: {0}.","I file seguenti sono stati modificati in modo incompatibile: {0}.","Non \xE8 stato possibile annullare '{0}' in tutti i file. {1}","Non \xE8 stato possibile annullare '{0}' in tutti i file. {1}","Non \xE8 stato possibile annullare '{0}' in tutti i file perch\xE9 sono state apportate modifiche a {1}","Non \xE8 stato possibile annullare '{0}' su tutti i file perch\xE9 \xE8 gi\xE0 in esecuzione un'operazione di annullamento o ripetizione su {1}","Non \xE8 stato possibile annullare '{0}' su tutti i file perch\xE9 nel frattempo \xE8 stata eseguita un'operazione di annullamento o ripetizione","Annullare '{0}' in tutti i file?","Annulla in {0} file","Annulla questo file","Annulla","Non \xE8 stato possibile annullare '{0}' perch\xE9 \xE8 gi\xE0 in esecuzione un'operazione di annullamento o ripetizione.","Annullare '{0}'?","Annulla","Annulla","Non \xE8 stato possibile ripetere '{0}' in tutti i file. {1}","Non \xE8 stato possibile ripetere '{0}' in tutti i file. {1}","Non \xE8 stato possibile ripetere '{0}' in tutti i file perch\xE9 sono state apportate modifiche a {1}","Non \xE8 stato possibile ripetere l'operazione '{0}' su tutti i file perch\xE9 \xE8 gi\xE0 in esecuzione un'operazione di annullamento o ripetizione sull'elenco di file {1}","Non \xE8 stato possibile ripetere '{0}' su tutti i file perch\xE9 nel frattempo \xE8 stata eseguita un'operazione di annullamento o ripetizione","Non \xE8 stato possibile ripetere '{0}' perch\xE9 \xE8 gi\xE0 in esecuzione un'operazione di annullamento o ripetizione."]}); diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/editor/editor.main.nls.ja.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/editor/editor.main.nls.ja.js new file mode 100644 index 0000000000..009489ce5f --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/editor/editor.main.nls.ja.js @@ -0,0 +1,8 @@ +/*!----------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Version: 0.23.0(82e8ea39fc101d639262435542c7d43bc20d8aa2) + * Released under the MIT license + * https://github.com/microsoft/vscode/blob/main/LICENSE.txt + *-----------------------------------------------------------*/define("vs/editor/editor.main.nls.ja",{"vs/base/browser/ui/actionbar/actionViewItems":["{0} ({1})"],"vs/base/browser/ui/findinput/findInput":["\u5165\u529B"],"vs/base/browser/ui/findinput/findInputCheckboxes":["\u5927\u6587\u5B57\u3068\u5C0F\u6587\u5B57\u3092\u533A\u5225\u3059\u308B","\u5358\u8A9E\u5358\u4F4D\u3067\u691C\u7D22\u3059\u308B","\u6B63\u898F\u8868\u73FE\u3092\u4F7F\u7528\u3059\u308B"],"vs/base/browser/ui/findinput/replaceInput":["\u5165\u529B","\u4FDD\u6301\u3059\u308B"],"vs/base/browser/ui/iconLabel/iconLabel":["\u8AAD\u307F\u8FBC\u307F\u4E2D..."],"vs/base/browser/ui/inputbox/inputBox":["\u30A8\u30E9\u30FC: {0}","\u8B66\u544A: {0}","\u60C5\u5831: {0}"],"vs/base/browser/ui/keybindingLabel/keybindingLabel":["\u30D0\u30A4\u30F3\u30C9\u306A\u3057"],"vs/base/browser/ui/menu/menu":["{0} ({1})"],"vs/base/browser/ui/tree/abstractTree":["\u30AF\u30EA\u30A2","\u578B\u306E\u30D5\u30A3\u30EB\u30BF\u30FC\u3092\u7121\u52B9\u306B\u3059\u308B","\u578B\u306E\u30D5\u30A3\u30EB\u30BF\u30FC\u3092\u6709\u52B9\u306B\u3059\u308B","\u8981\u7D20\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093","{1} \u500B\u306E\u8981\u7D20\u306E\u3046\u3061 {0} \u500B\u306E\u8981\u7D20\u304C\u4E00\u81F4\u3057\u307E\u3057\u305F"],"vs/base/common/actions":["(\u7A7A)"],"vs/base/common/errorMessage":["{0}: {1}","\u30B7\u30B9\u30C6\u30E0 \u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F ({0})","\u4E0D\u660E\u306A\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u30ED\u30B0\u3067\u8A73\u7D30\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u4E0D\u660E\u306A\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u30ED\u30B0\u3067\u8A73\u7D30\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002","{0} (\u5408\u8A08 {1} \u30A8\u30E9\u30FC)","\u4E0D\u660E\u306A\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u30ED\u30B0\u3067\u8A73\u7D30\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002"],"vs/base/common/keybindingLabels":["Ctrl","Shift","Alt","Windows","Ctrl","Shift","Alt","Super","Control","Shift","Alt","\u30B3\u30DE\u30F3\u30C9","Control","Shift","Alt","Windows","Control","Shift","Alt","Super"],"vs/base/parts/quickinput/browser/quickInput":["\u623B\u308B","{0}/{1}","\u5165\u529B\u3059\u308B\u3068\u7D50\u679C\u304C\u7D5E\u308A\u8FBC\u307E\u308C\u307E\u3059\u3002","{0} \u4EF6\u306E\u7D50\u679C","{0} \u500B\u9078\u629E\u6E08\u307F","OK","\u30AB\u30B9\u30BF\u30E0","\u623B\u308B ({0})","\u623B\u308B"],"vs/base/parts/quickinput/browser/quickInputList":["\u30AF\u30A4\u30C3\u30AF\u5165\u529B"],"vs/editor/browser/controller/coreCommands":["\u9577\u3044\u884C\u306B\u79FB\u52D5\u3057\u3066\u3082\u884C\u672B\u306B\u4F4D\u7F6E\u3057\u307E\u3059","\u9577\u3044\u884C\u306B\u79FB\u52D5\u3057\u3066\u3082\u884C\u672B\u306B\u4F4D\u7F6E\u3057\u307E\u3059"],"vs/editor/browser/controller/textAreaHandler":["\u30A8\u30C7\u30A3\u30BF\u30FC","\u3053\u306E\u6642\u70B9\u3067\u306F\u3001\u30A8\u30C7\u30A3\u30BF\u30FC\u306B\u30A2\u30AF\u30BB\u30B9\u3067\u304D\u307E\u305B\u3093\u3002\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u8868\u793A\u3059\u308B\u306B\u306F\u3001{0} \u3092\u62BC\u3057\u307E\u3059\u3002"],"vs/editor/browser/core/keybindingCancellation":["\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u53D6\u308A\u6D88\u3057\u53EF\u80FD\u306A\u64CD\u4F5C ('\u53C2\u7167\u3092\u3053\u3053\u306B\u8868\u793A' \u306A\u3069) \u3092\u5B9F\u884C\u3059\u308B\u304B\u3069\u3046\u304B"],"vs/editor/browser/editorExtensions":["\u5143\u306B\u623B\u3059(&&U)","\u5143\u306B\u623B\u3059","\u3084\u308A\u76F4\u3057(&&R)","\u3084\u308A\u76F4\u3057","\u3059\u3079\u3066\u9078\u629E(&&S)","\u3059\u3079\u3066\u3092\u9078\u629E"],"vs/editor/browser/widget/codeEditorWidget":["\u30AB\u30FC\u30BD\u30EB\u306E\u6570\u306F {0} \u500B\u306B\u5236\u9650\u3055\u308C\u3066\u3044\u307E\u3059\u3002"],"vs/editor/browser/widget/diffEditorWidget":["\u5DEE\u5206\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u633F\u5165\u3092\u793A\u3059\u7DDA\u306E\u88C5\u98FE\u3002","\u5DEE\u5206\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u524A\u9664\u3092\u793A\u3059\u7DDA\u306E\u88C5\u98FE\u3002","\u4E00\u65B9\u306E\u30D5\u30A1\u30A4\u30EB\u304C\u5927\u304D\u3059\u304E\u308B\u305F\u3081\u3001\u30D5\u30A1\u30A4\u30EB\u3092\u6BD4\u8F03\u3067\u304D\u307E\u305B\u3093\u3002"],"vs/editor/browser/widget/diffReview":["\u5DEE\u5206\u30EC\u30D3\u30E5\u30FC\u3067\u306E '\u633F\u5165' \u306E\u30A2\u30A4\u30B3\u30F3\u3002","\u5DEE\u5206\u30EC\u30D3\u30E5\u30FC\u3067\u306E '\u524A\u9664' \u306E\u30A2\u30A4\u30B3\u30F3\u3002","\u5DEE\u5206\u30EC\u30D3\u30E5\u30FC\u3067\u306E '\u9589\u3058\u308B' \u306E\u30A2\u30A4\u30B3\u30F3\u3002","\u9589\u3058\u308B","\u5909\u66F4\u3055\u308C\u305F\u884C\u306F\u3042\u308A\u307E\u305B\u3093","1 \u884C\u304C\u5909\u66F4\u3055\u308C\u307E\u3057\u305F","{0} \u884C\u304C\u5909\u66F4\u3055\u308C\u307E\u3057\u305F","\u76F8\u9055 {0}/{1}: \u5143\u306E\u884C {2}\u3001{3}\u3002\u5909\u66F4\u3055\u308C\u305F\u884C {4}\u3001{5}","\u7A7A\u767D","{0} \u5909\u66F4\u3055\u308C\u3066\u3044\u306A\u3044\u884C {1}","{0} \u5143\u306E\u884C {1} \u5909\u66F4\u3055\u308C\u305F\u884C {2}","+ {0} \u5909\u66F4\u3055\u308C\u305F\u884C {1}","- {0} \u5143\u306E\u884C {1}","\u6B21\u306E\u5DEE\u5206\u306B\u79FB\u52D5","\u524D\u306E\u5DEE\u5206\u306B\u79FB\u52D5"],"vs/editor/browser/widget/inlineDiffMargin":["\u524A\u9664\u3055\u308C\u305F\u884C\u306E\u30B3\u30D4\u30FC","\u524A\u9664\u3055\u308C\u305F\u884C\u306E\u30B3\u30D4\u30FC","\u524A\u9664\u3055\u308C\u305F\u884C\u306E\u30B3\u30D4\u30FC ({0})","\u3053\u306E\u5909\u66F4\u3092\u5143\u306B\u623B\u3059","\u524A\u9664\u3055\u308C\u305F\u884C\u306E\u30B3\u30D4\u30FC ({0})"],"vs/editor/common/config/commonEditorConfig":["\u30A8\u30C7\u30A3\u30BF\u30FC","1 \u3064\u306E\u30BF\u30D6\u306B\u76F8\u5F53\u3059\u308B\u30B9\u30DA\u30FC\u30B9\u306E\u6570\u3002`#editor.detectIndentation#` \u304C\u30AA\u30F3\u306E\u5834\u5408\u3001\u3053\u306E\u8A2D\u5B9A\u306F\u30D5\u30A1\u30A4\u30EB \u30B3\u30F3\u30C6\u30F3\u30C4\u306B\u57FA\u3065\u3044\u3066\u4E0A\u66F8\u304D\u3055\u308C\u307E\u3059\u3002","`Tab` \u30AD\u30FC\u3092\u62BC\u3059\u3068\u30B9\u30DA\u30FC\u30B9\u304C\u633F\u5165\u3055\u308C\u307E\u3059\u3002`#editor.detectIndentation#` \u304C\u30AA\u30F3\u306E\u5834\u5408\u3001\u3053\u306E\u8A2D\u5B9A\u306F\u30D5\u30A1\u30A4\u30EB \u30B3\u30F3\u30C6\u30F3\u30C4\u306B\u57FA\u3065\u3044\u3066\u4E0A\u66F8\u304D\u3055\u308C\u307E\u3059\u3002","\u30D5\u30A1\u30A4\u30EB\u304C\u30D5\u30A1\u30A4\u30EB\u306E\u5185\u5BB9\u306B\u57FA\u3065\u3044\u3066\u958B\u304B\u308C\u308B\u5834\u5408\u3001`#editor.tabSize#` \u3068 `#editor.insertSpaces#` \u3092\u81EA\u52D5\u7684\u306B\u691C\u51FA\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u81EA\u52D5\u633F\u5165\u3055\u308C\u305F\u672B\u5C3E\u306E\u7A7A\u767D\u3092\u524A\u9664\u3057\u307E\u3059\u3002","\u5927\u304D\u306A\u30D5\u30A1\u30A4\u30EB\u3067\u30E1\u30E2\u30EA\u304C\u96C6\u4E2D\u3059\u308B\u7279\u5B9A\u306E\u6A5F\u80FD\u3092\u7121\u52B9\u306B\u3059\u308B\u305F\u3081\u306E\u7279\u5225\u306A\u51E6\u7406\u3002","\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u5185\u306E\u5358\u8A9E\u306B\u57FA\u3065\u3044\u3066\u5165\u529B\u5019\u88DC\u3092\u8A08\u7B97\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30A2\u30AF\u30C6\u30A3\u30D6\u306A\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u304B\u3089\u306E\u307F\u5358\u8A9E\u306E\u5019\u88DC\u3092\u8868\u793A\u3057\u307E\u3059\u3002","\u540C\u3058\u8A00\u8A9E\u306E\u958B\u3044\u3066\u3044\u308B\u3059\u3079\u3066\u306E\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u304B\u3089\u5358\u8A9E\u306E\u5019\u88DC\u3092\u8868\u793A\u3057\u307E\u3059\u3002","\u958B\u3044\u3066\u3044\u308B\u3059\u3079\u3066\u306E\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u304B\u3089\u5358\u8A9E\u306E\u5019\u88DC\u3092\u8868\u793A\u3057\u307E\u3059\u3002","\u5358\u8A9E\u30D9\u30FC\u30B9\u306E\u88DC\u5B8C\u304C\u8A08\u7B97\u3055\u308C\u308B\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30BB\u30DE\u30F3\u30C6\u30A3\u30C3\u30AF\u306E\u5F37\u8ABF\u8868\u793A\u304C\u3059\u3079\u3066\u306E\u914D\u8272\u30C6\u30FC\u30DE\u306B\u3064\u3044\u3066\u6709\u52B9\u306B\u306A\u308A\u307E\u3057\u305F\u3002","\u30BB\u30DE\u30F3\u30C6\u30A3\u30C3\u30AF\u306E\u5F37\u8ABF\u8868\u793A\u304C\u3059\u3079\u3066\u306E\u914D\u8272\u30C6\u30FC\u30DE\u306B\u3064\u3044\u3066\u7121\u52B9\u306B\u306A\u308A\u307E\u3057\u305F\u3002","\u30BB\u30DE\u30F3\u30C6\u30A3\u30C3\u30AF\u306E\u5F37\u8ABF\u8868\u793A\u306F\u3001\u73FE\u5728\u306E\u914D\u8272\u30C6\u30FC\u30DE\u306E 'semanticHighlighting' \u8A2D\u5B9A\u306B\u3088\u3063\u3066\u69CB\u6210\u3055\u308C\u3066\u3044\u307E\u3059\u3002","semanticHighlighting \u3092\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u308B\u8A00\u8A9E\u3067\u8868\u793A\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u30C0\u30D6\u30EB\u30AF\u30EA\u30C3\u30AF\u3059\u308B\u304B\u3001`Escape` \u30AD\u30FC\u3092\u62BC\u3057\u3066\u3082\u3001\u30D4\u30FC\u30AF \u30A8\u30C7\u30A3\u30BF\u30FC\u3092\u958B\u3044\u305F\u307E\u307E\u306B\u3057\u307E\u3059\u3002","\u3053\u306E\u9577\u3055\u3092\u8D8A\u3048\u308B\u884C\u306F\u3001\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u4E0A\u306E\u7406\u7531\u306B\u3088\u308A\u30C8\u30FC\u30AF\u30F3\u5316\u3055\u308C\u307E\u305B\u3093\u3002","\u5DEE\u5206\u8A08\u7B97\u304C\u53D6\u308A\u6D88\u3055\u308C\u305F\u5F8C\u306E\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8 (\u30DF\u30EA\u79D2\u5358\u4F4D)\u3002\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u306A\u3057\u306B\u306F 0 \u3092\u4F7F\u7528\u3057\u307E\u3059\u3002","\u5DEE\u5206\u30A8\u30C7\u30A3\u30BF\u30FC\u304C\u5DEE\u5206\u3092\u6A2A\u306B\u4E26\u3079\u3066\u8868\u793A\u3059\u308B\u304B\u3001\u884C\u5185\u306B\u8868\u793A\u3059\u308B\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u6709\u52B9\u306B\u3059\u308B\u3068\u3001\u5DEE\u5206\u30A8\u30C7\u30A3\u30BF\u30FC\u306F\u5148\u982D\u307E\u305F\u306F\u672B\u5C3E\u306E\u7A7A\u767D\u6587\u5B57\u306E\u5909\u66F4\u3092\u7121\u8996\u3057\u307E\u3059\u3002","\u5DEE\u5206\u30A8\u30C7\u30A3\u30BF\u30FC\u304C\u8FFD\u52A0/\u524A\u9664\u3055\u308C\u305F\u5909\u66F4\u306B +/- \u30A4\u30F3\u30B8\u30B1\u30FC\u30BF\u30FC\u3092\u793A\u3059\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u3067 CodeLens \u3092\u8868\u793A\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u884C\u3092\u6298\u308A\u8FD4\u3057\u307E\u305B\u3093\u3002","\u884C\u3092\u30D3\u30E5\u30FC\u30DD\u30FC\u30C8\u306E\u5E45\u3067\u6298\u308A\u8FD4\u3057\u307E\u3059\u3002","\u884C\u306F\u3001`#editor.wordWrap#` \u8A2D\u5B9A\u306B\u5F93\u3063\u3066\u6298\u308A\u8FD4\u3055\u308C\u307E\u3059\u3002"],"vs/editor/common/config/editorOptions":["\u30A8\u30C7\u30A3\u30BF\u30FC\u306F\u30B9\u30AF\u30EA\u30FC\u30F3 \u30EA\u30FC\u30C0\u30FC\u304C\u3044\u3064\u63A5\u7D9A\u3055\u308C\u305F\u304B\u3092\u691C\u51FA\u3059\u308B\u305F\u3081\u306B\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0 API \u3092\u4F7F\u7528\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306F\u6C38\u7D9A\u7684\u306B\u30B9\u30AF\u30EA\u30FC\u30F3 \u30EA\u30FC\u30C0\u30FC\u3067\u306E\u4F7F\u7528\u5411\u3051\u306B\u6700\u9069\u5316\u3055\u308C\u307E\u3059\u3002\u5358\u8A9E\u306E\u6298\u308A\u8FD4\u3057\u306F\u7121\u52B9\u306B\u306A\u308A\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306F\u30B9\u30AF\u30EA\u30FC\u30F3 \u30EA\u30FC\u30C0\u30FC\u5411\u3051\u306B\u6700\u9069\u5316\u3055\u308C\u307E\u305B\u3093\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u3092\u30B9\u30AF\u30EA\u30FC\u30F3 \u30EA\u30FC\u30C0\u30FC\u306B\u6700\u9069\u5316\u3055\u308C\u305F\u30E2\u30FC\u30C9\u3067\u5B9F\u884C\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002\u30AA\u30F3\u306B\u8A2D\u5B9A\u3059\u308B\u3068\u5358\u8A9E\u306E\u6298\u308A\u8FD4\u3057\u304C\u7121\u52B9\u306B\u306A\u308A\u307E\u3059\u3002","\u30B3\u30E1\u30F3\u30C8\u6642\u306B\u7A7A\u767D\u6587\u5B57\u3092\u633F\u5165\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u884C\u30B3\u30E1\u30F3\u30C8\u306E\u8FFD\u52A0\u307E\u305F\u306F\u524A\u9664\u30A2\u30AF\u30B7\u30E7\u30F3\u306E\u5207\u308A\u66FF\u3048\u3067\u3001\u7A7A\u306E\u884C\u3092\u7121\u8996\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u9078\u629E\u7BC4\u56F2\u3092\u6307\u5B9A\u3057\u306A\u3044\u3067\u30B3\u30D4\u30FC\u3059\u308B\u5834\u5408\u306B\u73FE\u5728\u306E\u884C\u3092\u30B3\u30D4\u30FC\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u5165\u529B\u4E2D\u306B\u4E00\u81F4\u3092\u691C\u7D22\u3059\u308B\u305F\u3081\u306B\u30AB\u30FC\u30BD\u30EB\u3092\u30B8\u30E3\u30F3\u30D7\u3055\u305B\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u9078\u629E\u7BC4\u56F2\u304B\u3089\u691C\u7D22\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u5185\u306E\u691C\u7D22\u6587\u5B57\u5217\u3092\u4E0E\u3048\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","[\u9078\u629E\u7BC4\u56F2\u3092\u691C\u7D22] \u3092\u81EA\u52D5\u7684\u306B\u30AA\u30F3\u306B\u3057\u306A\u3044 (\u65E2\u5B9A)","[\u9078\u629E\u7BC4\u56F2\u3092\u691C\u7D22] \u3092\u5E38\u306B\u81EA\u52D5\u7684\u306B\u30AA\u30F3\u306B\u3059\u308B","\u8907\u6570\u884C\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u308B\u5834\u5408\u306F\u3001\u81EA\u52D5\u7684\u306B [\u9078\u629E\u7BC4\u56F2\u3092\u691C\u7D22] \u3092\u30AA\u30F3\u306B\u3057\u307E\u3059\u3002","[\u9078\u629E\u7BC4\u56F2\u3092\u691C\u7D22] \u3092\u81EA\u52D5\u7684\u306B\u30AA\u30F3\u306B\u3059\u308B\u6761\u4EF6\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","macOS \u3067\u691C\u7D22\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u304C\u5171\u6709\u306E\u691C\u7D22\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9\u3092\u8AAD\u307F\u53D6\u308A\u307E\u305F\u306F\u5909\u66F4\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u691C\u7D22\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u304C\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u4E0A\u306B\u884C\u3092\u3055\u3089\u306B\u8FFD\u52A0\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002true \u306E\u5834\u5408\u3001\u691C\u7D22\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u304C\u8868\u793A\u3055\u308C\u3066\u3044\u308B\u3068\u304D\u306B\u6700\u521D\u306E\u884C\u3092\u8D85\u3048\u3066\u30B9\u30AF\u30ED\u30FC\u30EB\u3067\u304D\u307E\u3059\u3002","\u4EE5\u964D\u3067\u4E00\u81F4\u304C\u898B\u3064\u304B\u3089\u306A\u3044\u5834\u5408\u306B\u3001\u691C\u7D22\u3092\u5148\u982D\u304B\u3089 (\u307E\u305F\u306F\u672B\u5C3E\u304B\u3089) \u81EA\u52D5\u7684\u306B\u518D\u5B9F\u884C\u3059\u308B\u304B\u3069\u3046\u304B\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30D5\u30A9\u30F3\u30C8\u306E\u5408\u5B57 ('calt' \u304A\u3088\u3073 'liga' \u30D5\u30A9\u30F3\u30C8\u306E\u6A5F\u80FD) \u3092\u6709\u52B9\u307E\u305F\u306F\u7121\u52B9\u306B\u3057\u307E\u3059\u3002'font-feature-settings' CSS \u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u8A73\u7D30\u306B\u5236\u5FA1\u3059\u308B\u306B\u306F\u3001\u3053\u308C\u3092\u6587\u5B57\u5217\u306B\u5909\u66F4\u3057\u307E\u3059\u3002","\u660E\u793A\u7684\u306A 'font-feature-settings' CSS \u30D7\u30ED\u30D1\u30C6\u30A3\u3002\u5408\u5B57\u3092\u6709\u52B9\u307E\u305F\u306F\u7121\u52B9\u306B\u3059\u308B\u5FC5\u8981\u304C\u3042\u308B\u306E\u304C 1 \u3064\u3060\u3051\u3067\u3042\u308B\u5834\u5408\u306F\u3001\u4EE3\u308F\u308A\u306B\u30D6\u30FC\u30EB\u5024\u3092\u6E21\u3059\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002","\u30D5\u30A9\u30F3\u30C8\u306E\u5408\u5B57\u3084\u30D5\u30A9\u30F3\u30C8\u306E\u6A5F\u80FD\u3092\u69CB\u6210\u3057\u307E\u3059\u3002\u5408\u5B57\u3092\u6709\u52B9\u307E\u305F\u306F\u7121\u52B9\u306B\u3059\u308B\u30D6\u30FC\u30EB\u5024\u307E\u305F\u306F CSS 'font-feature-settings' \u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u5024\u306E\u6587\u5B57\u5217\u3092\u6307\u5B9A\u3067\u304D\u307E\u3059\u3002","\u30D5\u30A9\u30F3\u30C8 \u30B5\u30A4\u30BA (\u30D4\u30AF\u30BB\u30EB\u5358\u4F4D) \u3092\u5236\u5FA1\u3057\u307E\u3059\u3002",'\u4F7F\u7528\u3067\u304D\u308B\u306E\u306F "\u6A19\u6E96" \u304A\u3088\u3073 "\u592A\u5B57" \u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u307E\u305F\u306F 1 \uFF5E 1000 \u306E\u6570\u5B57\u306E\u307F\u3067\u3059\u3002','\u30D5\u30A9\u30F3\u30C8\u306E\u592A\u3055\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002"\u6A19\u6E96" \u304A\u3088\u3073 "\u592A\u5B57" \u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u307E\u305F\u306F 1 \uFF5E 1000 \u306E\u6570\u5B57\u3092\u53D7\u3051\u5165\u308C\u307E\u3059\u3002',"\u7D50\u679C\u306E\u30D4\u30FC\u30AF \u30D3\u30E5\u30FC\u3092\u8868\u793A (\u65E2\u5B9A)","\u4E3B\u306A\u7D50\u679C\u306B\u79FB\u52D5\u3057\u3001\u30D4\u30FC\u30AF \u30D3\u30E5\u30FC\u3092\u8868\u793A\u3057\u307E\u3059","\u30D7\u30E9\u30A4\u30DE\u30EA\u7D50\u679C\u306B\u79FB\u52D5\u3057\u3001\u4ED6\u306E\u30E6\u30FC\u30B6\u30FC\u3078\u306E\u30D4\u30FC\u30AF\u30EC\u30B9 \u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3\u3092\u6709\u52B9\u306B\u3057\u307E\u3059","\u3053\u306E\u8A2D\u5B9A\u306F\u975E\u63A8\u5968\u3067\u3059\u3002\u4EE3\u308F\u308A\u306B\u3001'editor.editor.gotoLocation.multipleDefinitions' \u3084 'editor.editor.gotoLocation.multipleImplementations' \u306A\u3069\u306E\u500B\u5225\u306E\u8A2D\u5B9A\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u8907\u6570\u306E\u30BF\u30FC\u30B2\u30C3\u30C8\u306E\u5834\u6240\u304C\u3042\u308B\u3068\u304D\u306E '\u5B9A\u7FA9\u3078\u79FB\u52D5' \u30B3\u30DE\u30F3\u30C9\u306E\u52D5\u4F5C\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u8907\u6570\u306E\u30BF\u30FC\u30B2\u30C3\u30C8\u306E\u5834\u6240\u304C\u3042\u308B\u3068\u304D\u306E '\u578B\u5B9A\u7FA9\u3078\u79FB\u52D5' \u30B3\u30DE\u30F3\u30C9\u306E\u52D5\u4F5C\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u8907\u6570\u306E\u30BF\u30FC\u30B2\u30C3\u30C8\u306E\u5834\u6240\u304C\u3042\u308B\u3068\u304D\u306E '\u5BA3\u8A00\u3078\u79FB\u52D5' \u30B3\u30DE\u30F3\u30C9\u306E\u52D5\u4F5C\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u8907\u6570\u306E\u30BF\u30FC\u30B2\u30C3\u30C8\u306E\u5834\u6240\u304C\u3042\u308B\u3068\u304D\u306E '\u5B9F\u88C5\u306B\u79FB\u52D5' \u30B3\u30DE\u30F3\u30C9\u306E\u52D5\u4F5C\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30BF\u30FC\u30B2\u30C3\u30C8\u306E\u5834\u6240\u304C\u8907\u6570\u5B58\u5728\u3059\u308B\u5834\u5408\u306E '\u53C2\u7167\u3078\u79FB\u52D5' \u30B3\u30DE\u30F3\u30C9\u306E\u52D5\u4F5C\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","'\u5B9A\u7FA9\u3078\u79FB\u52D5' \u306E\u7D50\u679C\u304C\u73FE\u5728\u306E\u5834\u6240\u3067\u3042\u308B\u5834\u5408\u306B\u5B9F\u884C\u3055\u308C\u308B\u4EE3\u66FF\u30B3\u30DE\u30F3\u30C9 ID\u3002","'\u578B\u5B9A\u7FA9\u3078\u79FB\u52D5' \u306E\u7D50\u679C\u304C\u73FE\u5728\u306E\u5834\u6240\u3067\u3042\u308B\u5834\u5408\u306B\u5B9F\u884C\u3055\u308C\u308B\u4EE3\u66FF\u30B3\u30DE\u30F3\u30C9 ID\u3002","'\u5BA3\u8A00\u3078\u79FB\u52D5' \u306E\u7D50\u679C\u304C\u73FE\u5728\u306E\u5834\u6240\u3067\u3042\u308B\u5834\u5408\u306B\u5B9F\u884C\u3055\u308C\u308B\u4EE3\u66FF\u30B3\u30DE\u30F3\u30C9 ID\u3002","'\u5B9F\u88C5\u3078\u79FB\u52D5' \u306E\u7D50\u679C\u304C\u73FE\u5728\u306E\u5834\u6240\u3067\u3042\u308B\u5834\u5408\u306B\u5B9F\u884C\u3055\u308C\u308B\u4EE3\u66FF\u30B3\u30DE\u30F3\u30C9 ID\u3002","'\u53C2\u7167\u3078\u79FB\u52D5' \u306E\u7D50\u679C\u304C\u73FE\u5728\u306E\u5834\u6240\u3067\u3042\u308B\u5834\u5408\u306B\u5B9F\u884C\u3055\u308C\u308B\u4EE3\u66FF\u30B3\u30DE\u30F3\u30C9 ID\u3002","\u30DB\u30D0\u30FC\u3092\u8868\u793A\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30DB\u30D0\u30FC\u3092\u8868\u793A\u5F8C\u306E\u5F85\u3061\u6642\u9593 (\u30DF\u30EA\u79D2) \u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30DB\u30D0\u30FC\u306B\u30DE\u30A6\u30B9\u3092\u79FB\u52D5\u3057\u305F\u3068\u304D\u306B\u3001\u30DB\u30D0\u30FC\u3092\u8868\u793A\u3057\u7D9A\u3051\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u30B3\u30FC\u30C9 \u30A2\u30AF\u30B7\u30E7\u30F3\u306E\u96FB\u7403\u3092\u6709\u52B9\u306B\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u30A4\u30F3\u30E9\u30A4\u30F3 \u30D2\u30F3\u30C8\u3092\u6709\u52B9\u306B\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u30A4\u30F3\u30E9\u30A4\u30F3 \u30D2\u30F3\u30C8\u306E\u30D5\u30A9\u30F3\u30C8 \u30B5\u30A4\u30BA\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002'0' \u306B\u8A2D\u5B9A\u3059\u308B\u3068\u3001`#editor.fontSize#` \u306E 90% \u304C\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u30A4\u30F3\u30E9\u30A4\u30F3 \u30D2\u30F3\u30C8\u306E\u30D5\u30A9\u30F3\u30C8 \u30D5\u30A1\u30DF\u30EA\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u884C\u306E\u9AD8\u3055\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002\u30D5\u30A9\u30F3\u30C8 \u30B5\u30A4\u30BA\u306B\u57FA\u3065\u3044\u3066\u884C\u306E\u9AD8\u3055\u3092\u8A08\u7B97\u3059\u308B\u5834\u5408\u306B\u306F\u30010 \u3092\u4F7F\u7528\u3057\u307E\u3059\u3002","\u30DF\u30CB\u30DE\u30C3\u30D7\u3092\u8868\u793A\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30DF\u30CB\u30DE\u30C3\u30D7\u306E\u30B5\u30A4\u30BA\u306F\u3001\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u3068\u540C\u3058\u3067\u3059 (\u30B9\u30AF\u30ED\u30FC\u30EB\u3059\u308B\u5834\u5408\u304C\u3042\u308A\u307E\u3059)\u3002","\u30DF\u30CB\u30DE\u30C3\u30D7\u306F\u3001\u5FC5\u8981\u306B\u5FDC\u3058\u3066\u3001\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u9AD8\u3055\u3092\u57CB\u3081\u308B\u305F\u3081\u3001\u62E1\u5927\u307E\u305F\u306F\u7E2E\u5C0F\u3057\u307E\u3059 (\u30B9\u30AF\u30ED\u30FC\u30EB\u3057\u307E\u305B\u3093)\u3002","\u30DF\u30CB\u30DE\u30C3\u30D7\u306F\u5FC5\u8981\u306B\u5FDC\u3058\u3066\u7E2E\u5C0F\u3057\u3001\u30A8\u30C7\u30A3\u30BF\u30FC\u3088\u308A\u5927\u304D\u304F\u306A\u308B\u3053\u3068\u306F\u3042\u308A\u307E\u305B\u3093 (\u30B9\u30AF\u30ED\u30FC\u30EB\u3057\u307E\u305B\u3093)\u3002","\u30DF\u30CB\u30DE\u30C3\u30D7\u306E\u30B5\u30A4\u30BA\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30DF\u30CB\u30DE\u30C3\u30D7\u3092\u8868\u793A\u3059\u308B\u5834\u6240\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30DF\u30CB\u30DE\u30C3\u30D7 \u30B9\u30E9\u30A4\u30C0\u30FC\u3092\u8868\u793A\u3059\u308B\u30BF\u30A4\u30DF\u30F3\u30B0\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30DF\u30CB\u30DE\u30C3\u30D7\u306B\u63CF\u753B\u3055\u308C\u308B\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u30B9\u30B1\u30FC\u30EB: 1\u30012\u3001\u307E\u305F\u306F 3\u3002","\u884C\u306B\u30AB\u30E9\u30FC \u30D6\u30ED\u30C3\u30AF\u3067\u306F\u306A\u304F\u5B9F\u969B\u306E\u6587\u5B57\u3092\u8868\u793A\u3057\u307E\u3059\u3002","\u8868\u793A\u3059\u308B\u30DF\u30CB\u30DE\u30C3\u30D7\u306E\u6700\u5927\u5E45\u3092\u7279\u5B9A\u306E\u5217\u6570\u306B\u5236\u9650\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u4E0A\u7AEF\u3068\u6700\u521D\u306E\u884C\u306E\u9593\u306E\u4F59\u767D\u306E\u5927\u304D\u3055\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u4E0B\u7AEF\u3068\u6700\u5F8C\u306E\u884C\u306E\u9593\u306E\u4F59\u767D\u306E\u5927\u304D\u3055\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u5165\u529B\u6642\u306B\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC \u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3068\u578B\u60C5\u5831\u3092\u8868\u793A\u3059\u308B\u30DD\u30C3\u30D7\u30A2\u30C3\u30D7\u3092\u6709\u52B9\u306B\u3057\u307E\u3059\u3002","\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC \u30D2\u30F3\u30C8 \u30E1\u30CB\u30E5\u30FC\u3092\u5468\u56DE\u3059\u308B\u304B\u3001\u30EA\u30B9\u30C8\u306E\u6700\u5F8C\u3067\u9589\u3058\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u6587\u5B57\u5217\u5185\u3067\u30AF\u30A4\u30C3\u30AF\u5019\u88DC\u3092\u6709\u52B9\u306B\u3057\u307E\u3059\u3002","\u30B3\u30E1\u30F3\u30C8\u5185\u3067\u30AF\u30A4\u30C3\u30AF\u5019\u88DC\u3092\u6709\u52B9\u306B\u3057\u307E\u3059\u3002","\u6587\u5B57\u5217\u304A\u3088\u3073\u30B3\u30E1\u30F3\u30C8\u5916\u3067\u30AF\u30A4\u30C3\u30AF\u5019\u88DC\u3092\u6709\u52B9\u306B\u3057\u307E\u3059\u3002","\u5165\u529B\u4E2D\u306B\u5019\u88DC\u3092\u81EA\u52D5\u7684\u306B\u8868\u793A\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u884C\u756A\u53F7\u306F\u8868\u793A\u3055\u308C\u307E\u305B\u3093\u3002","\u884C\u756A\u53F7\u306F\u3001\u7D76\u5BFE\u5024\u3068\u3057\u3066\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u884C\u756A\u53F7\u306F\u3001\u30AB\u30FC\u30BD\u30EB\u4F4D\u7F6E\u307E\u3067\u306E\u884C\u6570\u3068\u3057\u3066\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u884C\u756A\u53F7\u306F 10 \u884C\u3054\u3068\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u884C\u756A\u53F7\u306E\u8868\u793A\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u3053\u306E\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u30EB\u30FC\u30E9\u30FC\u304C\u30EC\u30F3\u30C0\u30EA\u30F3\u30B0\u3059\u308B\u5358\u4E00\u9818\u57DF\u306E\u6587\u5B57\u6570\u3002","\u3053\u306E\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u30EB\u30FC\u30E9\u30FC\u306E\u8272\u3067\u3059\u3002","\u7279\u5B9A\u306E\u7B49\u5E45\u6587\u5B57\u6570\u306E\u5F8C\u306B\u5782\u76F4\u30EB\u30FC\u30E9\u30FC\u3092\u8868\u793A\u3057\u307E\u3059\u3002\u8907\u6570\u306E\u30EB\u30FC\u30E9\u30FC\u306B\u306F\u8907\u6570\u306E\u5024\u3092\u4F7F\u7528\u3057\u307E\u3059\u3002\u914D\u5217\u304C\u7A7A\u306E\u5834\u5408\u306F\u30EB\u30FC\u30E9\u30FC\u3092\u8868\u793A\u3057\u307E\u305B\u3093\u3002","\u30AB\u30FC\u30BD\u30EB\u306E\u53F3\u306E\u30C6\u30AD\u30B9\u30C8\u3092\u4E0A\u66F8\u304D\u305B\u305A\u306B\u5019\u88DC\u3092\u633F\u5165\u3057\u307E\u3059\u3002","\u5019\u88DC\u3092\u633F\u5165\u3057\u3001\u30AB\u30FC\u30BD\u30EB\u306E\u53F3\u306E\u30C6\u30AD\u30B9\u30C8\u3092\u4E0A\u66F8\u304D\u3057\u307E\u3059\u3002","\u5165\u529B\u5019\u88DC\u3092\u53D7\u3051\u5165\u308C\u308B\u3068\u304D\u306B\u5358\u8A9E\u3092\u4E0A\u66F8\u304D\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002\u3053\u308C\u306F\u3001\u3053\u306E\u6A5F\u80FD\u306E\u5229\u7528\u3092\u9078\u629E\u3059\u308B\u62E1\u5F35\u6A5F\u80FD\u306B\u4F9D\u5B58\u3059\u308B\u3053\u3068\u306B\u3054\u6CE8\u610F\u304F\u3060\u3055\u3044\u3002","\u5019\u88DC\u306E\u30D5\u30A3\u30EB\u30BF\u30FC\u51E6\u7406\u3068\u4E26\u3073\u66FF\u3048\u3067\u3055\u3055\u3044\u306A\u5165\u529B\u30DF\u30B9\u3092\u8003\u616E\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u4E26\u3079\u66FF\u3048\u304C\u30AB\u30FC\u30BD\u30EB\u4ED8\u8FD1\u306B\u8868\u793A\u3055\u308C\u308B\u5358\u8A9E\u3092\u512A\u5148\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u4FDD\u5B58\u3055\u308C\u305F\u5019\u88DC\u30BB\u30AF\u30B7\u30E7\u30F3\u3092\u8907\u6570\u306E\u30EF\u30FC\u30AF\u30D7\u30EC\u30FC\u30B9\u3068\u30A6\u30A3\u30F3\u30C9\u30A6\u3067\u5171\u6709\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059 (`#editor.suggestSelection#` \u304C\u5FC5\u8981)\u3002","\u30A2\u30AF\u30C6\u30A3\u30D6 \u30B9\u30CB\u30DA\u30C3\u30C8\u304C\u30AF\u30A4\u30C3\u30AF\u5019\u88DC\u3092\u9632\u6B62\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u63D0\u6848\u306E\u30A2\u30A4\u30B3\u30F3\u3092\u8868\u793A\u3059\u308B\u304B\u3001\u975E\u8868\u793A\u306B\u3059\u308B\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u5019\u88DC\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306E\u4E0B\u90E8\u306B\u3042\u308B\u30B9\u30C6\u30FC\u30BF\u30B9 \u30D0\u30FC\u306E\u8868\u793A\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u5019\u88DC\u306E\u8A73\u7D30\u3092\u30E9\u30D9\u30EB\u4ED8\u304D\u306E\u30A4\u30F3\u30E9\u30A4\u30F3\u3067\u8868\u793A\u3059\u308B\u304B\u3001\u8A73\u7D30\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u306E\u307F\u8868\u793A\u3059\u308B\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059","\u3053\u306E\u8A2D\u5B9A\u306F\u975E\u63A8\u5968\u3067\u3059\u3002\u5019\u88DC\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306E\u30B5\u30A4\u30BA\u5909\u66F4\u304C\u3067\u304D\u308B\u3088\u3046\u306B\u306A\u308A\u307E\u3057\u305F\u3002","\u3053\u306E\u8A2D\u5B9A\u306F\u975E\u63A8\u5968\u3067\u3059\u3002\u4EE3\u308F\u308A\u306B\u3001'editor.suggest.showKeywords' \u3084 'editor.suggest.showSnippets' \u306A\u3069\u306E\u500B\u5225\u306E\u8A2D\u5B9A\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u6709\u52B9\u306B\u3059\u308B\u3068\u3001IntelliSense \u306B `\u30E1\u30BD\u30C3\u30C9` \u5019\u88DC\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6709\u52B9\u306B\u3059\u308B\u3068\u3001IntelliSense \u306B `\u95A2\u6570` \u5019\u88DC\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6709\u52B9\u306B\u3059\u308B\u3068\u3001IntelliSense \u306B `\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF\u30FC` \u5019\u88DC\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6709\u52B9\u306B\u3059\u308B\u3068\u3001IntelliSense \u306B `\u30D5\u30A3\u30FC\u30EB\u30C9` \u5019\u88DC\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6709\u52B9\u306B\u3059\u308B\u3068\u3001IntelliSense \u306B `\u5909\u6570` \u5019\u88DC\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6709\u52B9\u306B\u3059\u308B\u3068\u3001IntelliSense \u306B '\u30AF\u30E9\u30B9' \u5019\u88DC\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6709\u52B9\u306B\u3059\u308B\u3068\u3001IntelliSense \u306B `\u69CB\u9020\u4F53` \u5019\u88DC\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6709\u52B9\u306B\u3059\u308B\u3068\u3001IntelliSense \u306B `\u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30A4\u30B9` \u5019\u88DC\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6709\u52B9\u306B\u3059\u308B\u3068\u3001IntelliSense \u306B `\u30E2\u30B8\u30E5\u30FC\u30EB` \u5019\u88DC\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6709\u52B9\u306B\u3059\u308B\u3068\u3001IntelliSense \u306B `\u30D7\u30ED\u30D1\u30C6\u30A3` \u5019\u88DC\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6709\u52B9\u306B\u3059\u308B\u3068\u3001IntelliSense \u306B `\u30A4\u30D9\u30F3\u30C8` \u5019\u88DC\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6709\u52B9\u306B\u3059\u308B\u3068\u3001IntelliSense \u306B `\u6F14\u7B97\u5B50` \u5019\u88DC\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6709\u52B9\u306B\u3059\u308B\u3068\u3001IntelliSense \u306B `\u30E6\u30CB\u30C3\u30C8` \u5019\u88DC\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6709\u52B9\u306B\u3059\u308B\u3068\u3001IntelliSense \u306B `\u5024` \u5019\u88DC\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6709\u52B9\u306B\u3059\u308B\u3068\u3001IntelliSense \u306B `\u5B9A\u6570` \u5019\u88DC\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6709\u52B9\u306B\u3059\u308B\u3068\u3001IntelliSense \u306B `\u5217\u6319\u578B` \u5019\u88DC\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6709\u52B9\u306B\u3059\u308B\u3068\u3001IntelliSense \u306B `enumMember` \u5019\u88DC\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6709\u52B9\u306B\u3059\u308B\u3068\u3001IntelliSense \u306B `\u30AD\u30FC\u30EF\u30FC\u30C9` \u5019\u88DC\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6709\u52B9\u306B\u3059\u308B\u3068\u3001IntelliSense \u306B '\u30C6\u30AD\u30B9\u30C8' -\u5019\u88DC\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6709\u52B9\u306B\u3059\u308B\u3068\u3001IntelliSense \u306B `\u8272` \u5019\u88DC\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6709\u52B9\u306B\u3059\u308B\u3068\u3001IntelliSense \u306B '\u30D5\u30A1\u30A4\u30EB' \u5019\u88DC\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6709\u52B9\u306B\u3059\u308B\u3068\u3001IntelliSense \u306B `\u53C2\u7167` \u5019\u88DC\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6709\u52B9\u306B\u3059\u308B\u3068\u3001IntelliSense \u306B `customcolor` \u5019\u88DC\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6709\u52B9\u306B\u3059\u308B\u3068\u3001IntelliSense \u306B `\u30D5\u30A9\u30EB\u30C0\u30FC` \u5019\u88DC\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6709\u52B9\u306B\u3059\u308B\u3068\u3001IntelliSense \u306B `typeParameter` \u5019\u88DC\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6709\u52B9\u306B\u3059\u308B\u3068\u3001IntelliSense \u306B `\u30B9\u30CB\u30DA\u30C3\u30C8` \u5019\u88DC\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6709\u52B9\u306A\u5834\u5408\u3001IntelliSense \u306B\u3088\u3063\u3066 '\u30E6\u30FC\u30B6\u30FC' \u5019\u88DC\u304C\u793A\u3055\u308C\u307E\u3059\u3002","\u6709\u52B9\u306B\u3059\u308B\u3068\u3001IntelliSense \u306B\u3088\u3063\u3066 '\u554F\u984C' \u5019\u88DC\u304C\u793A\u3055\u308C\u307E\u3059\u3002","\u5148\u982D\u3068\u672B\u5C3E\u306E\u7A7A\u767D\u3092\u5E38\u306B\u9078\u629E\u3059\u308B\u304B\u3069\u3046\u304B\u3002","\u30B3\u30DF\u30C3\u30C8\u6587\u5B57\u3067\u5019\u88DC\u3092\u53D7\u3051\u5165\u308C\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002\u305F\u3068\u3048\u3070\u3001JavaScript \u3067\u306F\u30BB\u30DF\u30B3\u30ED\u30F3 (`;`) \u3092\u30B3\u30DF\u30C3\u30C8\u6587\u5B57\u306B\u3057\u3066\u3001\u5019\u88DC\u3092\u53D7\u3051\u5165\u308C\u3066\u305D\u306E\u6587\u5B57\u3092\u5165\u529B\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002","\u30C6\u30AD\u30B9\u30C8\u306E\u5909\u66F4\u3092\u884C\u3046\u3068\u304D\u3001`Enter` \u3092\u4F7F\u7528\u3059\u308B\u5834\u5408\u306B\u306E\u307F\u5019\u88DC\u3092\u53D7\u3051\u4ED8\u3051\u307E\u3059\u3002","`Tab` \u30AD\u30FC\u306B\u52A0\u3048\u3066 `Enter` \u30AD\u30FC\u3067\u5019\u88DC\u3092\u53D7\u3051\u5165\u308C\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002\u6539\u884C\u306E\u633F\u5165\u3084\u5019\u88DC\u306E\u53CD\u6620\u306E\u9593\u3067\u3042\u3044\u307E\u3044\u3055\u3092\u89E3\u6D88\u3059\u308B\u306E\u306B\u5F79\u7ACB\u3061\u307E\u3059\u3002","\u30B9\u30AF\u30EA\u30FC\u30F3 \u30EA\u30FC\u30C0\u30FC\u3067\u8AAD\u307F\u4E0A\u3052\u308B\u3053\u3068\u304C\u3067\u304D\u308B\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u884C\u6570\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002\u8B66\u544A: \u65E2\u5B9A\u5024\u3092\u4E0A\u56DE\u308B\u6570\u3092\u6307\u5B9A\u3059\u308B\u3068\u3001\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u306B\u5F71\u97FF\u3092\u4E0E\u3048\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u30B3\u30F3\u30C6\u30F3\u30C4","\u8A00\u8A9E\u8A2D\u5B9A\u3092\u4F7F\u7528\u3057\u3066\u3001\u3044\u3064\u304B\u3063\u3053\u3092\u81EA\u52D5\u30AF\u30ED\u30FC\u30BA\u3059\u308B\u304B\u6C7A\u5B9A\u3057\u307E\u3059\u3002","\u30AB\u30FC\u30BD\u30EB\u304C\u7A7A\u767D\u6587\u5B57\u306E\u5DE6\u306B\u3042\u308B\u3068\u304D\u3060\u3051\u3001\u304B\u3063\u3053\u3092\u81EA\u52D5\u30AF\u30ED\u30FC\u30BA\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u5DE6\u89D2\u304B\u3063\u3053\u3092\u8FFD\u52A0\u3057\u305F\u5F8C\u306B\u81EA\u52D5\u7684\u306B\u53F3\u89D2\u304B\u3063\u3053\u3092\u633F\u5165\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u7D42\u308F\u308A\u5F15\u7528\u7B26\u307E\u305F\u306F\u62EC\u5F27\u304C\u81EA\u52D5\u7684\u306B\u633F\u5165\u3055\u308C\u305F\u5834\u5408\u306B\u306E\u307F\u3001\u305D\u308C\u3089\u3092\u4E0A\u66F8\u304D\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u7D42\u308F\u308A\u5F15\u7528\u7B26\u307E\u305F\u306F\u62EC\u5F27\u3092\u4E0A\u66F8\u304D\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u8A00\u8A9E\u8A2D\u5B9A\u3092\u4F7F\u7528\u3057\u3066\u3001\u3044\u3064\u5F15\u7528\u7B26\u3092\u81EA\u52D5\u30AF\u30ED\u30FC\u30BA\u3059\u308B\u304B\u6C7A\u5B9A\u3057\u307E\u3059\u3002","\u30AB\u30FC\u30BD\u30EB\u304C\u7A7A\u767D\u6587\u5B57\u306E\u5DE6\u306B\u3042\u308B\u3068\u304D\u3060\u3051\u3001\u5F15\u7528\u7B26\u3092\u81EA\u52D5\u30AF\u30ED\u30FC\u30BA\u3057\u307E\u3059\u3002","\u30E6\u30FC\u30B6\u30FC\u304C\u958B\u59CB\u5F15\u7528\u7B26\u3092\u8FFD\u52A0\u3057\u305F\u5F8C\u3001\u30A8\u30C7\u30A3\u30BF\u30FC\u81EA\u52D5\u7684\u306B\u5F15\u7528\u7B26\u3092\u9589\u3058\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306F\u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u81EA\u52D5\u7684\u306B\u633F\u5165\u3057\u307E\u305B\u3093\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306F\u3001\u73FE\u5728\u306E\u884C\u306E\u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u4FDD\u6301\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306F\u3001\u73FE\u5728\u306E\u884C\u306E\u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u4FDD\u6301\u3057\u3001\u8A00\u8A9E\u304C\u5B9A\u7FA9\u3055\u308C\u305F\u304B\u3063\u3053\u3092\u512A\u5148\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306F\u3001\u73FE\u5728\u306E\u884C\u306E\u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u4FDD\u6301\u3057\u3001\u8A00\u8A9E\u304C\u5B9A\u7FA9\u3055\u308C\u305F\u304B\u3063\u3053\u3092\u512A\u5148\u3057\u3001\u8A00\u8A9E\u3067\u5B9A\u7FA9\u3055\u308C\u305F\u7279\u5225\u306A onEnterRules \u3092\u547C\u3073\u51FA\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306F\u3001\u73FE\u5728\u306E\u884C\u306E\u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u4FDD\u6301\u3057\u3001\u8A00\u8A9E\u304C\u5B9A\u7FA9\u3055\u308C\u305F\u304B\u3063\u3053\u3092\u512A\u5148\u3057\u3001\u8A00\u8A9E\u3067\u5B9A\u7FA9\u3055\u308C\u305F\u7279\u5225\u306A onEnterRules \u3092\u547C\u3073\u51FA\u3057\u3001\u8A00\u8A9E\u3067\u5B9A\u7FA9\u3055\u308C\u305F indentationRules \u3092\u512A\u5148\u3057\u307E\u3059\u3002","\u30E6\u30FC\u30B6\u30FC\u304C\u884C\u3092\u5165\u529B\u3001\u8CBC\u308A\u4ED8\u3051\u3001\u79FB\u52D5\u3001\u307E\u305F\u306F\u30A4\u30F3\u30C7\u30F3\u30C8\u3059\u308B\u3068\u304D\u306B\u3001\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u81EA\u52D5\u7684\u306B\u8ABF\u6574\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u8A00\u8A9E\u69CB\u6210\u3092\u4F7F\u7528\u3057\u3066\u3001\u9078\u629E\u7BC4\u56F2\u3092\u3044\u3064\u81EA\u52D5\u7684\u306B\u56F2\u3080\u304B\u3092\u5224\u65AD\u3057\u307E\u3059\u3002","\u89D2\u304B\u3063\u3053\u3067\u306F\u306A\u304F\u3001\u5F15\u7528\u7B26\u3067\u56F2\u307F\u307E\u3059\u3002","\u5F15\u7528\u7B26\u3067\u306F\u306A\u304F\u3001\u89D2\u304B\u3063\u3053\u3067\u56F2\u307F\u307E\u3059\u3002","\u5F15\u7528\u7B26\u307E\u305F\u306F\u89D2\u304B\u3063\u3053\u3092\u5165\u529B\u3059\u308B\u3068\u304D\u306B\u3001\u30A8\u30C7\u30A3\u30BF\u30FC\u304C\u9078\u629E\u7BC4\u56F2\u3092\u81EA\u52D5\u7684\u306B\u56F2\u3080\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30A4\u30F3\u30C7\u30F3\u30C8\u306B\u30B9\u30DA\u30FC\u30B9\u3092\u4F7F\u7528\u3059\u308B\u3068\u304D\u306F\u3001\u30BF\u30D6\u6587\u5B57\u306E\u9078\u629E\u52D5\u4F5C\u3092\u30A8\u30DF\u30E5\u30EC\u30FC\u30C8\u3057\u307E\u3059\u3002\u9078\u629E\u7BC4\u56F2\u306F\u30BF\u30D6\u4F4D\u7F6E\u306B\u7559\u307E\u308A\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u3067 CodeLens \u3092\u8868\u793A\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","CodeLens \u306E\u30D5\u30A9\u30F3\u30C8 \u30D5\u30A1\u30DF\u30EA\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","CodeLens \u306E\u30D5\u30A9\u30F3\u30C8 \u30B5\u30A4\u30BA\u3092\u30D4\u30AF\u30BB\u30EB\u5358\u4F4D\u3067\u5236\u5FA1\u3057\u307E\u3059\u3002'0' \u306B\u8A2D\u5B9A\u3059\u308B\u3068\u3001'#editor.fontSize#' \u306E 90% \u304C\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u30A4\u30F3\u30E9\u30A4\u30F3 \u30AB\u30E9\u30FC \u30C7\u30B3\u30EC\u30FC\u30BF\u30FC\u3068\u8272\u306E\u9078\u629E\u3092\u8868\u793A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30DE\u30A6\u30B9\u3068\u30AD\u30FC\u3067\u306E\u9078\u629E\u306B\u3088\u308A\u5217\u306E\u9078\u629E\u3092\u5B9F\u884C\u3067\u304D\u308B\u3088\u3046\u306B\u3057\u307E\u3059\u3002","\u69CB\u6587\u30CF\u30A4\u30E9\u30A4\u30C8\u3092\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9\u306B\u30B3\u30D4\u30FC\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30AB\u30FC\u30BD\u30EB\u306E\u30A2\u30CB\u30E1\u30FC\u30B7\u30E7\u30F3\u65B9\u5F0F\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u6ED1\u3089\u304B\u306A\u30AD\u30E3\u30EC\u30C3\u30C8\u30A2\u30CB\u30E1\u30FC\u30B7\u30E7\u30F3\u3092\u6709\u52B9\u306B\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30AB\u30FC\u30BD\u30EB\u306E\u30B9\u30BF\u30A4\u30EB\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30AB\u30FC\u30BD\u30EB\u524D\u5F8C\u306E\u8868\u793A\u53EF\u80FD\u306A\u5148\u982D\u3068\u672B\u5C3E\u306E\u884C\u306E\u6700\u5C0F\u6570\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002\u4ED6\u306E\u4E00\u90E8\u306E\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u306F 'scrollOff' \u307E\u305F\u306F `scrollOffset` \u3068\u547C\u3070\u308C\u307E\u3059\u3002","`cursorSurroundingLines` \u306F\u3001\u30AD\u30FC\u30DC\u30FC\u30C9\u307E\u305F\u306F API \u3067\u30C8\u30EA\u30AC\u30FC\u3055\u308C\u305F\u5834\u5408\u306B\u306E\u307F\u5F37\u5236\u3055\u308C\u307E\u3059\u3002","`cursorSurroundingLines` \u306F\u5E38\u306B\u9069\u7528\u3055\u308C\u307E\u3059\u3002","'\u30AB\u30FC\u30BD\u30EB\u306E\u5468\u56F2\u306E\u884C' \u3092\u9069\u7528\u3059\u308B\u30BF\u30A4\u30DF\u30F3\u30B0\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","`#editor.cursorStyle#` \u304C `line` \u306B\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u308B\u5834\u5408\u3001\u30AB\u30FC\u30BD\u30EB\u306E\u5E45\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30C9\u30E9\u30C3\u30B0 \u30A2\u30F3\u30C9 \u30C9\u30ED\u30C3\u30D7\u306B\u3088\u308B\u9078\u629E\u7BC4\u56F2\u306E\u79FB\u52D5\u3092\u30A8\u30C7\u30A3\u30BF\u30FC\u304C\u8A31\u53EF\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","`Alt` \u3092\u62BC\u3059\u3068\u3001\u30B9\u30AF\u30ED\u30FC\u30EB\u901F\u5EA6\u304C\u500D\u5897\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u30B3\u30FC\u30C9\u306E\u6298\u308A\u305F\u305F\u307F\u3092\u6709\u52B9\u306B\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u5229\u7528\u53EF\u80FD\u306A\u5834\u5408\u306F\u8A00\u8A9E\u56FA\u6709\u306E\u6298\u308A\u305F\u305F\u307F\u65B9\u6CD5\u3092\u4F7F\u7528\u3057\u3001\u5229\u7528\u53EF\u80FD\u3067\u306F\u306A\u3044\u5834\u5408\u306F\u30A4\u30F3\u30C7\u30F3\u30C8\u30D9\u30FC\u30B9\u306E\u65B9\u6CD5\u3092\u4F7F\u7528\u3057\u307E\u3059\u3002","\u30A4\u30F3\u30C7\u30F3\u30C8\u30D9\u30FC\u30B9\u306E\u6298\u308A\u305F\u305F\u307F\u65B9\u6CD5\u3092\u4F7F\u7528\u3057\u307E\u3059\u3002","\u6298\u308A\u305F\u305F\u307F\u7BC4\u56F2\u306E\u8A08\u7B97\u65B9\u6CD5\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u6298\u308A\u305F\u305F\u307E\u308C\u305F\u7BC4\u56F2\u3092\u5F37\u8ABF\u8868\u793A\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u3057\u307E\u3059\u3002","\u6298\u308A\u305F\u305F\u307E\u308C\u305F\u7DDA\u306E\u5F8C\u306E\u7A7A\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u30AF\u30EA\u30C3\u30AF\u3059\u308B\u3068\u7DDA\u304C\u5C55\u958B\u3055\u308C\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30D5\u30A9\u30F3\u30C8 \u30D5\u30A1\u30DF\u30EA\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u8CBC\u308A\u4ED8\u3051\u305F\u5185\u5BB9\u304C\u30A8\u30C7\u30A3\u30BF\u30FC\u306B\u3088\u308A\u81EA\u52D5\u7684\u306B\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u3055\u308C\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002\u30D5\u30A9\u30FC\u30DE\u30C3\u30BF\u3092\u4F7F\u7528\u53EF\u80FD\u306B\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002\u307E\u305F\u3001\u30D5\u30A9\u30FC\u30DE\u30C3\u30BF\u304C\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u5185\u306E\u7BC4\u56F2\u3092\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u3067\u304D\u306A\u3051\u308C\u3070\u306A\u308A\u307E\u305B\u3093\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u5165\u529B\u5F8C\u306B\u81EA\u52D5\u7684\u306B\u884C\u306E\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u3092\u884C\u3046\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u7E26\u306E\u30B0\u30EA\u30D5\u4F59\u767D\u304C\u8868\u793A\u3055\u308C\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002\u307B\u3068\u3093\u3069\u306E\u5834\u5408\u3001\u30B0\u30EA\u30D5\u4F59\u767D\u306F\u30C7\u30D0\u30C3\u30B0\u306B\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002","\u6982\u8981\u30EB\u30FC\u30E9\u30FC\u3067\u30AB\u30FC\u30BD\u30EB\u3092\u975E\u8868\u793A\u306B\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u30A2\u30AF\u30C6\u30A3\u30D6\u306A\u30A4\u30F3\u30C7\u30F3\u30C8\u306E\u30AC\u30A4\u30C9\u3092\u5F37\u8ABF\u8868\u793A\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u6587\u5B57\u9593\u9694 (\u30D4\u30AF\u30BB\u30EB\u5358\u4F4D) \u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30EA\u30F3\u30AF\u3055\u308C\u305F\u7DE8\u96C6\u304C\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u6709\u52B9\u306B\u3055\u308C\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002\u8A00\u8A9E\u306B\u3088\u3063\u3066\u306F\u3001\u7DE8\u96C6\u4E2D\u306B HTML \u30BF\u30B0\u306A\u3069\u306E\u95A2\u9023\u3059\u308B\u8A18\u53F7\u304C\u66F4\u65B0\u3055\u308C\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u304C\u30EA\u30F3\u30AF\u3092\u691C\u51FA\u3057\u3066\u30AF\u30EA\u30C3\u30AF\u53EF\u80FD\u306A\u72B6\u614B\u306B\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u5BFE\u5FDC\u3059\u308B\u304B\u3063\u3053\u3092\u5F37\u8ABF\u8868\u793A\u3057\u307E\u3059\u3002","\u30DE\u30A6\u30B9 \u30DB\u30A4\u30FC\u30EB \u30B9\u30AF\u30ED\u30FC\u30EB \u30A4\u30D9\u30F3\u30C8\u306E `deltaX` \u3068 `deltaY` \u3067\u4F7F\u7528\u3055\u308C\u308B\u4E57\u6570\u3002","`Ctrl` \u30AD\u30FC\u3092\u62BC\u3057\u306A\u304C\u3089\u30DE\u30A6\u30B9 \u30DB\u30A4\u30FC\u30EB\u3092\u4F7F\u7528\u3057\u3066\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u30D5\u30A9\u30F3\u30C8\u3092\u30BA\u30FC\u30E0\u3057\u307E\u3059\u3002","\u8907\u6570\u306E\u30AB\u30FC\u30BD\u30EB\u304C\u91CD\u306A\u3063\u3066\u3044\u308B\u3068\u304D\u306F\u3001\u30DE\u30FC\u30B8\u3057\u307E\u3059\u3002","Windows \u304A\u3088\u3073 Linux \u4E0A\u306E `Control` \u30AD\u30FC\u3068 macOS \u4E0A\u306E `Command` \u30AD\u30FC\u306B\u5272\u308A\u5F53\u3066\u307E\u3059\u3002","Windows \u304A\u3088\u3073 Linux \u4E0A\u306E `Alt` \u30AD\u30FC\u3068 macOS \u4E0A\u306E `Option` \u30AD\u30FC\u306B\u5272\u308A\u5F53\u3066\u307E\u3059\u3002","\u30DE\u30A6\u30B9\u3092\u4F7F\u7528\u3057\u3066\u8907\u6570\u306E\u30AB\u30FC\u30BD\u30EB\u3092\u8FFD\u52A0\u3059\u308B\u3068\u304D\u306B\u4F7F\u7528\u3059\u308B\u4FEE\u98FE\u30AD\u30FC\u3067\u3059\u3002\u300C\u5B9A\u7FA9\u306B\u79FB\u52D5\u300D\u3084\u300C\u30EA\u30F3\u30AF\u3092\u958B\u304F\u300D\u306E\u30DE\u30A6\u30B9\u64CD\u4F5C\u306F\u3001\u30DE\u30EB\u30C1\u30AB\u30FC\u30BD\u30EB\u306E\u4FEE\u98FE\u30AD\u30FC\u3068\u7AF6\u5408\u3057\u306A\u3044\u3088\u3046\u306B\u9069\u7528\u3055\u308C\u307E\u3059\u3002[\u8A73\u7D30](https://code.visualstudio.com/docs/editor/codebasics#_multicursor-modifier)","\u30AB\u30FC\u30BD\u30EB\u3054\u3068\u306B\u30C6\u30AD\u30B9\u30C8\u3092 1 \u884C\u305A\u3064\u8CBC\u308A\u4ED8\u3051\u307E\u3059\u3002","\u5404\u30AB\u30FC\u30BD\u30EB\u306F\u5168\u6587\u3092\u8CBC\u308A\u4ED8\u3051\u307E\u3059\u3002","\u8CBC\u308A\u4ED8\u3051\u305F\u30C6\u30AD\u30B9\u30C8\u306E\u884C\u6570\u304C\u30AB\u30FC\u30BD\u30EB\u6570\u3068\u4E00\u81F4\u3059\u308B\u5834\u5408\u306E\u8CBC\u308A\u4ED8\u3051\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u30BB\u30DE\u30F3\u30C6\u30A3\u30C3\u30AF \u30B7\u30F3\u30DC\u30EB\u306E\u51FA\u73FE\u7B87\u6240\u3092\u5F37\u8ABF\u8868\u793A\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u6982\u8981\u30EB\u30FC\u30E9\u30FC\u306E\u5468\u56F2\u306B\u5883\u754C\u7DDA\u304C\u63CF\u753B\u3055\u308C\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30D4\u30FC\u30AF\u3092\u958B\u304F\u3068\u304D\u306B\u30C4\u30EA\u30FC\u306B\u30D5\u30A9\u30FC\u30AB\u30B9\u3059\u308B","\u30D4\u30FC\u30AF\u3092\u958B\u304F\u3068\u304D\u306B\u30A8\u30C7\u30A3\u30BF\u30FC\u306B\u30D5\u30A9\u30FC\u30AB\u30B9\u3059\u308B","\u30D4\u30FC\u30AF \u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306E\u30A4\u30F3\u30E9\u30A4\u30F3 \u30A8\u30C7\u30A3\u30BF\u30FC\u307E\u305F\u306F\u30C4\u30EA\u30FC\u3092\u30D5\u30A9\u30FC\u30AB\u30B9\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","[\u5B9A\u7FA9\u3078\u79FB\u52D5] \u30DE\u30A6\u30B9 \u30B8\u30A7\u30B9\u30C1\u30E3\u30FC\u3067\u3001\u5E38\u306B\u30D4\u30FC\u30AF \u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u3092\u958B\u304F\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30AF\u30A4\u30C3\u30AF\u5019\u88DC\u304C\u8868\u793A\u3055\u308C\u308B\u307E\u3067\u306E\u30DF\u30EA\u79D2\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u306E\u578B\u306E\u81EA\u52D5\u540D\u524D\u5909\u66F4\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u975E\u63A8\u5968\u3067\u3059\u3002\u4EE3\u308F\u308A\u306B\u3001`editor.linkedEditing` \u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u5236\u5FA1\u6587\u5B57\u3092\u8868\u793A\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u30A4\u30F3\u30C7\u30F3\u30C8 \u30AC\u30A4\u30C9\u3092\u8868\u793A\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30D5\u30A1\u30A4\u30EB\u306E\u672B\u5C3E\u304C\u6539\u884C\u306E\u5834\u5408\u306F\u3001\u6700\u5F8C\u306E\u884C\u756A\u53F7\u3092\u8868\u793A\u3057\u307E\u3059\u3002","\u4F59\u767D\u3068\u73FE\u5728\u306E\u884C\u3092\u5F37\u8ABF\u8868\u793A\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u304C\u73FE\u5728\u306E\u884C\u3092\u3069\u306E\u3088\u3046\u306B\u5F37\u8ABF\u8868\u793A\u3059\u308B\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306B\u30D5\u30A9\u30FC\u30AB\u30B9\u304C\u3042\u308B\u5834\u5408\u306B\u306E\u307F\u73FE\u5728\u306E\u884C\u3092\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u5F37\u8ABF\u8868\u793A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059","\u5358\u8A9E\u9593\u306E\u5358\u4E00\u30B9\u30DA\u30FC\u30B9\u4EE5\u5916\u306E\u7A7A\u767D\u6587\u5B57\u3092\u8868\u793A\u3057\u307E\u3059\u3002","\u9078\u629E\u3057\u305F\u30C6\u30AD\u30B9\u30C8\u306B\u306E\u307F\u7A7A\u767D\u6587\u5B57\u3092\u8868\u793A\u3057\u307E\u3059\u3002","\u672B\u5C3E\u306E\u7A7A\u767D\u6587\u5B57\u306E\u307F\u3092\u8868\u793A\u3059\u308B","\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u7A7A\u767D\u6587\u5B57\u3092\u8868\u793A\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u9078\u629E\u7BC4\u56F2\u306E\u89D2\u3092\u4E38\u304F\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u304C\u6C34\u5E73\u65B9\u5411\u306B\u4F59\u5206\u306B\u30B9\u30AF\u30ED\u30FC\u30EB\u3059\u308B\u6587\u5B57\u6570\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u304C\u6700\u5F8C\u306E\u884C\u3092\u8D8A\u3048\u3066\u30B9\u30AF\u30ED\u30FC\u30EB\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u5782\u76F4\u304A\u3088\u3073\u6C34\u5E73\u65B9\u5411\u306E\u4E21\u65B9\u306B\u540C\u6642\u306B\u30B9\u30AF\u30ED\u30FC\u30EB\u3059\u308B\u5834\u5408\u306F\u3001\u4E3B\u8981\u306A\u8EF8\u306B\u6CBF\u3063\u3066\u30B9\u30AF\u30ED\u30FC\u30EB\u3057\u307E\u3059\u3002\u30C8\u30E9\u30C3\u30AF\u30D1\u30C3\u30C9\u4E0A\u3067\u5782\u76F4\u65B9\u5411\u306B\u30B9\u30AF\u30ED\u30FC\u30EB\u3059\u308B\u5834\u5408\u306F\u3001\u6C34\u5E73\u30C9\u30EA\u30D5\u30C8\u3092\u9632\u6B62\u3057\u307E\u3059\u3002","Linux \u306E PRIMARY \u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9\u3092\u30B5\u30DD\u30FC\u30C8\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u304C\u9078\u629E\u9805\u76EE\u3068\u985E\u4F3C\u306E\u4E00\u81F4\u9805\u76EE\u3092\u5F37\u8ABF\u8868\u793A\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u5E38\u306B\u6298\u308A\u305F\u305F\u307F\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u3092\u8868\u793A\u3057\u307E\u3059\u3002","\u30DE\u30A6\u30B9\u304C\u3068\u3058\u3057\u308D\u306E\u4E0A\u306B\u3042\u308B\u3068\u304D\u306B\u306E\u307F\u3001\u6298\u308A\u305F\u305F\u307F\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u3092\u8868\u793A\u3057\u307E\u3059\u3002","\u3068\u3058\u3057\u308D\u306E\u306E\u6298\u308A\u305F\u305F\u307F\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u3092\u8868\u793A\u3059\u308B\u30BF\u30A4\u30DF\u30F3\u30B0\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u4F7F\u7528\u3055\u308C\u3066\u3044\u306A\u3044\u30B3\u30FC\u30C9\u306E\u30D5\u30A7\u30FC\u30C9\u30A2\u30A6\u30C8\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u975E\u63A8\u5968\u306E\u5909\u6570\u306E\u53D6\u308A\u6D88\u3057\u7DDA\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u4ED6\u306E\u5019\u88DC\u306E\u4E0A\u306B\u30B9\u30CB\u30DA\u30C3\u30C8\u306E\u5019\u88DC\u3092\u8868\u793A\u3057\u307E\u3059\u3002","\u4ED6\u306E\u5019\u88DC\u306E\u4E0B\u306B\u30B9\u30CB\u30DA\u30C3\u30C8\u306E\u5019\u88DC\u3092\u8868\u793A\u3057\u307E\u3059\u3002","\u4ED6\u306E\u5019\u88DC\u3068\u4E00\u7DD2\u306B\u30B9\u30CB\u30DA\u30C3\u30C8\u306E\u5019\u88DC\u3092\u8868\u793A\u3057\u307E\u3059\u3002","\u30B9\u30CB\u30DA\u30C3\u30C8\u306E\u5019\u88DC\u3092\u8868\u793A\u3057\u307E\u305B\u3093\u3002","\u4ED6\u306E\u4FEE\u6B63\u5019\u88DC\u3068\u4E00\u7DD2\u306B\u30B9\u30CB\u30DA\u30C3\u30C8\u3092\u8868\u793A\u3059\u308B\u304B\u3069\u3046\u304B\u3001\u304A\u3088\u3073\u305D\u306E\u4E26\u3073\u66FF\u3048\u306E\u65B9\u6CD5\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30A2\u30CB\u30E1\u30FC\u30B7\u30E7\u30F3\u3067\u30A8\u30C7\u30A3\u30BF\u30FC\u3092\u30B9\u30AF\u30ED\u30FC\u30EB\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u5019\u88DC\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306E\u30D5\u30A9\u30F3\u30C8 \u30B5\u30A4\u30BA\u3002`0` \u306B\u8A2D\u5B9A\u3059\u308B\u3068\u3001`#editor.fontSize#` \u306E\u5024\u304C\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002","\u5019\u88DC\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306E\u884C\u306E\u9AD8\u3055\u3002`0` \u306B\u8A2D\u5B9A\u3059\u308B\u3068\u3001`#editor.lineHeight#` \u306E\u5024\u304C\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002\u6700\u5C0F\u5024\u306F 8 \u3067\u3059\u3002","\u30C8\u30EA\u30AC\u30FC\u6587\u5B57\u306E\u5165\u529B\u6642\u306B\u5019\u88DC\u304C\u81EA\u52D5\u7684\u306B\u8868\u793A\u3055\u308C\u308B\u3088\u3046\u306B\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u5E38\u306B\u6700\u521D\u306E\u5019\u88DC\u3092\u9078\u629E\u3057\u307E\u3059\u3002","`console.| -> console.log` \u306A\u3069\u3068\u9078\u629E\u5BFE\u8C61\u306B\u95A2\u3057\u3066\u5165\u529B\u3057\u306A\u3044\u9650\u308A\u306F\u3001\u6700\u8FD1\u306E\u5019\u88DC\u3092\u9078\u629E\u3057\u307E\u3059\u3002`log` \u306F\u6700\u8FD1\u5B8C\u4E86\u3057\u305F\u305F\u3081\u3067\u3059\u3002","\u3053\u308C\u3089\u306E\u5019\u88DC\u3092\u5B8C\u4E86\u3057\u305F\u4EE5\u524D\u306E\u30D7\u30EC\u30D5\u30A3\u30C3\u30AF\u30B9\u306B\u57FA\u3065\u3044\u3066\u5019\u88DC\u3092\u9078\u629E\u3057\u307E\u3059\u3002\u4F8B: `co -> console` \u304A\u3088\u3073 `con -> const`\u3002","\u5019\u88DC\u30EA\u30B9\u30C8\u3092\u8868\u793A\u3059\u308B\u3068\u304D\u306B\u5019\u88DC\u3092\u4E8B\u524D\u306B\u9078\u629E\u3059\u308B\u65B9\u6CD5\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30BF\u30D6\u88DC\u5B8C\u306F\u3001tab \u30AD\u30FC\u3092\u62BC\u3057\u305F\u3068\u304D\u306B\u6700\u9069\u306A\u5019\u88DC\u3092\u633F\u5165\u3057\u307E\u3059\u3002","\u30BF\u30D6\u88DC\u5B8C\u3092\u7121\u52B9\u306B\u3057\u307E\u3059\u3002","\u30D7\u30EC\u30D5\u30A3\u30C3\u30AF\u30B9\u304C\u4E00\u81F4\u3059\u308B\u5834\u5408\u306B\u3001\u30BF\u30D6\u3067\u30B9\u30CB\u30DA\u30C3\u30C8\u3092\u88DC\u5B8C\u3057\u307E\u3059\u3002'quickSuggestions' \u304C\u7121\u52B9\u306A\u5834\u5408\u306B\u6700\u9069\u3067\u3059\u3002","\u30BF\u30D6\u88DC\u5B8C\u3092\u6709\u52B9\u306B\u3057\u307E\u3059\u3002","\u901A\u5E38\u3068\u306F\u7570\u306A\u308B\u884C\u306E\u7D42\u7AEF\u6587\u5B57\u306F\u81EA\u52D5\u7684\u306B\u524A\u9664\u3055\u308C\u308B\u3002","\u901A\u5E38\u3068\u306F\u7570\u306A\u308B\u884C\u306E\u7D42\u7AEF\u6587\u5B57\u306F\u7121\u8996\u3055\u308C\u308B\u3002","\u901A\u5E38\u3068\u306F\u7570\u306A\u308B\u884C\u306E\u7D42\u7AEF\u6587\u5B57\u306E\u524A\u9664\u30D7\u30ED\u30F3\u30D7\u30C8\u304C\u8868\u793A\u3055\u308C\u308B\u3002","\u554F\u984C\u3092\u8D77\u3053\u3059\u53EF\u80FD\u6027\u304C\u3042\u308B\u3001\u666E\u901A\u3067\u306F\u306A\u3044\u884C\u7D42\u7AEF\u8A18\u53F7\u306F\u524A\u9664\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u7A7A\u767D\u306E\u633F\u5165\u3084\u524A\u9664\u306F\u30BF\u30D6\u4F4D\u7F6E\u306B\u5F93\u3063\u3066\u884C\u308F\u308C\u307E\u3059\u3002","\u5358\u8A9E\u306B\u95A2\u9023\u3057\u305F\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3\u307E\u305F\u306F\u64CD\u4F5C\u3092\u5B9F\u884C\u3059\u308B\u3068\u304D\u306B\u3001\u5358\u8A9E\u306E\u533A\u5207\u308A\u6587\u5B57\u3068\u3057\u3066\u4F7F\u7528\u3055\u308C\u308B\u6587\u5B57\u3002","\u884C\u3092\u6298\u308A\u8FD4\u3057\u307E\u305B\u3093\u3002","\u884C\u3092\u30D3\u30E5\u30FC\u30DD\u30FC\u30C8\u306E\u5E45\u3067\u6298\u308A\u8FD4\u3057\u307E\u3059\u3002","`#editor.wordWrapColumn#` \u3067\u884C\u3092\u6298\u308A\u8FD4\u3057\u307E\u3059\u3002","\u30D3\u30E5\u30FC\u30DD\u30FC\u30C8\u3068 `#editor.wordWrapColumn#` \u306E\u6700\u5C0F\u5024\u3067\u884C\u3092\u6298\u308A\u8FD4\u3057\u307E\u3059\u3002","\u884C\u306E\u6298\u308A\u8FD4\u3057\u65B9\u6CD5\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","`#editor.wordWrap#` \u304C `wordWrapColumn` \u307E\u305F\u306F `bounded` \u306E\u5834\u5408\u306B\u3001\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u6298\u308A\u8FD4\u3057\u6841\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30A4\u30F3\u30C7\u30F3\u30C8\u3057\u307E\u305B\u3093\u3002 \u6298\u308A\u8FD4\u3057\u884C\u306F\u5217 1 \u304B\u3089\u59CB\u307E\u308A\u307E\u3059\u3002","\u6298\u308A\u8FD4\u3057\u884C\u306F\u3001\u89AA\u3068\u540C\u3058\u30A4\u30F3\u30C7\u30F3\u30C8\u306B\u306A\u308A\u307E\u3059\u3002","\u6298\u308A\u8FD4\u3057\u884C\u306F\u3001\u89AA +1 \u306E\u30A4\u30F3\u30C7\u30F3\u30C8\u306B\u306A\u308A\u307E\u3059\u3002","\u6298\u308A\u8FD4\u3057\u884C\u306F\u3001\u89AA +2 \u306E\u30A4\u30F3\u30C7\u30F3\u30C8\u306B\u306A\u308A\u307E\u3059\u3002","\u6298\u308A\u8FD4\u3057\u884C\u306E\u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u3059\u3079\u3066\u306E\u6587\u5B57\u306E\u5E45\u304C\u540C\u3058\u3067\u3042\u308B\u3068\u4EEE\u5B9A\u3057\u307E\u3059\u3002\u3053\u308C\u306F\u3001\u30E2\u30CE\u30B9\u30DA\u30FC\u30B9 \u30D5\u30A9\u30F3\u30C8\u3084\u3001\u30B0\u30EA\u30D5\u306E\u5E45\u304C\u7B49\u3057\u3044\u7279\u5B9A\u306E\u30B9\u30AF\u30EA\u30D7\u30C8 (\u30E9\u30C6\u30F3\u6587\u5B57\u306A\u3069) \u3067\u6B63\u3057\u304F\u52D5\u4F5C\u3059\u308B\u9AD8\u901F\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u3067\u3059\u3002","\u6298\u308A\u8FD4\u3057\u30DD\u30A4\u30F3\u30C8\u306E\u8A08\u7B97\u3092\u30D6\u30E9\u30A6\u30B6\u30FC\u306B\u30C7\u30EA\u30B2\u30FC\u30C8\u3057\u307E\u3059\u3002\u3053\u308C\u306F\u3001\u5927\u304D\u306A\u30D5\u30A1\u30A4\u30EB\u306E\u30D5\u30EA\u30FC\u30BA\u3092\u5F15\u304D\u8D77\u3053\u3059\u53EF\u80FD\u6027\u304C\u3042\u308B\u3082\u306E\u306E\u3001\u3059\u3079\u3066\u306E\u30B1\u30FC\u30B9\u3067\u6B63\u3057\u304F\u52D5\u4F5C\u3059\u308B\u4F4E\u901F\u306A\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u3067\u3059\u3002","\u6298\u308A\u8FD4\u3057\u30DD\u30A4\u30F3\u30C8\u3092\u8A08\u7B97\u3059\u308B\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002"],"vs/editor/common/editorContextKeys":["Whether the editor text has focus (cursor is blinking)","Whether the editor or an editor widget has focus (e.g. focus is in the find widget)","Whether an editor or a rich text input has focus (cursor is blinking)","Whether the editor is read only","Whether the context is a diff editor","Whether `editor.columnSelection` is enabled","Whether the editor has text selected","Whether the editor has multiple selections","Whether `Tab` will move focus out of the editor","Whether the editor hover is visible","Whether the editor is part of a larger editor (e.g. notebooks)","The language identifier of the editor","Whether the editor has a completion item provider","Whether the editor has a code actions provider","Whether the editor has a code lens provider","Whether the editor has a definition provider","Whether the editor has a declaration provider","Whether the editor has an implementation provider","Whether the editor has a type definition provider","Whether the editor has a hover provider","Whether the editor has a document highlight provider","Whether the editor has a document symbol provider","Whether the editor has a reference provider","Whether the editor has a rename provider","Whether the editor has a signature help provider","Whether the editor has an inline hints provider","Whether the editor has a document formatting provider","Whether the editor has a document selection formatting provider","Whether the editor has multiple document formatting providers","Whether the editor has multiple document selection formatting providers"],"vs/editor/common/model/editStack":["\u5165\u529B\u3057\u3066\u3044\u307E\u3059"],"vs/editor/common/modes/modesRegistry":["\u30D7\u30EC\u30FC\u30F3\u30C6\u30AD\u30B9\u30C8"],"vs/editor/common/standaloneStrings":["\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093","\u884C {0}\u3001\u5217 {1} ({2} \u500B\u9078\u629E\u6E08\u307F)","\u884C {0}\u3001\u5217 {1}","{0} \u500B\u306E\u9078\u629E\u9805\u76EE ({1} \u6587\u5B57\u3092\u9078\u629E)","{0} \u500B\u306E\u9078\u629E\u9805\u76EE","`accessibilitySupport` \u8A2D\u5B9A\u3092 'on' \u306B\u5909\u66F4\u3057\u3066\u3044\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u30A2\u30AF\u30BB\u30B7\u30D3\u30EA\u30C6\u30A3\u306B\u95A2\u9023\u3059\u308B\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8 \u30DA\u30FC\u30B8\u3092\u958B\u3044\u3066\u3044\u307E\u3059\u3002","\u5DEE\u5206\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u8AAD\u307F\u53D6\u308A\u5C02\u7528\u30A6\u30A3\u30F3\u30C9\u30A6\u5185\u3002","\u5DEE\u5206\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u30A6\u30A3\u30F3\u30C9\u30A6\u5185\u3002","\u8AAD\u307F\u53D6\u308A\u5C02\u7528\u30B3\u30FC\u30C9 \u30A8\u30C7\u30A3\u30BF\u30FC\u5185","\u30B3\u30FC\u30C9 \u30A8\u30C7\u30A3\u30BF\u30FC\u5185","\u30A8\u30C7\u30A3\u30BF\u30FC\u3092\u69CB\u6210\u3057\u3066\u30B9\u30AF\u30EA\u30FC\u30F3 \u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u4F7F\u7528\u3059\u308B\u3088\u3046\u306B\u6700\u9069\u5316\u3059\u308B\u306B\u306F\u3001Command+E \u3092\u62BC\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u3092\u69CB\u6210\u3057\u3066\u30B9\u30AF\u30EA\u30FC\u30F3 \u30EA\u30FC\u30C0\u30FC\u3067\u4F7F\u7528\u3059\u308B\u3088\u3046\u306B\u6700\u9069\u5316\u3059\u308B\u306B\u306F\u3001Control+E \u3092\u62BC\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306F\u3001\u30B9\u30AF\u30EA\u30FC\u30F3 \u30EA\u30FC\u30C0\u30FC\u3067\u4F7F\u7528\u3059\u308B\u3088\u3046\u6700\u9069\u5316\u3055\u308C\u308B\u3088\u3046\u306B\u69CB\u6210\u3055\u308C\u3066\u3044\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306F\u3001\u30B9\u30AF\u30EA\u30FC\u30F3 \u30EA\u30FC\u30C0\u30FC\u3067\u4F7F\u7528\u3059\u308B\u3088\u3046\u6700\u9069\u5316\u3055\u308C\u306A\u3044\u3088\u3046\u306B\u69CB\u6210\u3055\u308C\u3066\u3044\u307E\u3059\u304C\u3001\u73FE\u6642\u70B9\u3067\u3053\u306E\u8A2D\u5B9A\u306F\u5F53\u3066\u306F\u307E\u308A\u307E\u305B\u3093\u3002","\u73FE\u5728\u306E\u30A8\u30C7\u30A3\u30BF\u30FC\u3067 Tab \u30AD\u30FC\u3092\u62BC\u3059\u3068\u3001\u6B21\u306E\u30D5\u30A9\u30FC\u30AB\u30B9\u53EF\u80FD\u306A\u8981\u7D20\u306B\u30D5\u30A9\u30FC\u30AB\u30B9\u3092\u79FB\u52D5\u3057\u307E\u3059\u3002{0} \u3092\u62BC\u3059\u3068\u3001\u3053\u306E\u52D5\u4F5C\u304C\u5207\u308A\u66FF\u308F\u308A\u307E\u3059\u3002","\u73FE\u5728\u306E\u30A8\u30C7\u30A3\u30BF\u30FC\u3067 Tab \u30AD\u30FC\u3092\u62BC\u3059\u3068\u3001\u6B21\u306E\u30D5\u30A9\u30FC\u30AB\u30B9\u53EF\u80FD\u306A\u8981\u7D20\u306B\u30D5\u30A9\u30FC\u30AB\u30B9\u3092\u79FB\u52D5\u3057\u307E\u3059\u3002\u30B3\u30DE\u30F3\u30C9 {0} \u306F\u3001\u30AD\u30FC \u30D0\u30A4\u30F3\u30C9\u3067\u306F\u73FE\u5728\u30C8\u30EA\u30AC\u30FC\u3067\u304D\u307E\u305B\u3093\u3002","\u73FE\u5728\u306E\u30A8\u30C7\u30A3\u30BF\u30FC\u3067 Tab \u30AD\u30FC\u3092\u62BC\u3059\u3068\u3001\u30BF\u30D6\u6587\u5B57\u304C\u633F\u5165\u3055\u308C\u307E\u3059\u3002{0} \u3092\u62BC\u3059\u3068\u3001\u3053\u306E\u52D5\u4F5C\u304C\u5207\u308A\u66FF\u308F\u308A\u307E\u3059\u3002","\u73FE\u5728\u306E\u30A8\u30C7\u30A3\u30BF\u30FC\u3067 Tab \u30AD\u30FC\u3092\u62BC\u3059\u3068\u3001\u30BF\u30D6\u6587\u5B57\u304C\u633F\u5165\u3055\u308C\u307E\u3059\u3002\u30B3\u30DE\u30F3\u30C9 {0} \u306F\u3001\u30AD\u30FC \u30D0\u30A4\u30F3\u30C9\u3067\u306F\u73FE\u5728\u30C8\u30EA\u30AC\u30FC\u3067\u304D\u307E\u305B\u3093\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u30A2\u30AF\u30BB\u30B7\u30D3\u30EA\u30C6\u30A3\u306B\u95A2\u3059\u308B\u8A73\u7D30\u60C5\u5831\u304C\u8A18\u3055\u308C\u305F\u30D6\u30E9\u30A6\u30B6\u30FC \u30A6\u30A3\u30F3\u30C9\u30A6\u3092\u958B\u304F\u306B\u306F\u3001Command+H \u3092\u62BC\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u30A2\u30AF\u30BB\u30B7\u30D3\u30EA\u30C6\u30A3\u306B\u95A2\u3059\u308B\u8A73\u7D30\u60C5\u5831\u304C\u8A18\u3055\u308C\u305F\u30D6\u30E9\u30A6\u30B6\u30FC \u30A6\u30A3\u30F3\u30C9\u30A6\u3092\u958B\u304F\u306B\u306F\u3001Control+H \u3092\u62BC\u3057\u3066\u304F\u3060\u3055\u3044\u3002","Esc \u30AD\u30FC \u304B Shift+Esc \u3092\u62BC\u3059\u3068\u3001\u30D2\u30F3\u30C8\u3092\u6D88\u3057\u3066\u30A8\u30C7\u30A3\u30BF\u30FC\u306B\u623B\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002","\u30A2\u30AF\u30BB\u30B7\u30D3\u30EA\u30C6\u30A3\u306E\u30D8\u30EB\u30D7\u3092\u8868\u793A\u3057\u307E\u3059","\u958B\u767A\u8005: \u30C8\u30FC\u30AF\u30F3\u306E\u691C\u67FB","\u884C/\u5217\u306B\u79FB\u52D5\u3059\u308B...","\u3059\u3079\u3066\u306E\u30AF\u30A4\u30C3\u30AF \u30A2\u30AF\u30BB\u30B9 \u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u3092\u8868\u793A","\u30B3\u30DE\u30F3\u30C9 \u30D1\u30EC\u30C3\u30C8","\u30B3\u30DE\u30F3\u30C9\u306E\u8868\u793A\u3068\u5B9F\u884C","\u30B7\u30F3\u30DC\u30EB\u306B\u79FB\u52D5...","\u30AB\u30C6\u30B4\u30EA\u5225\u306E\u30B7\u30F3\u30DC\u30EB\u3078\u79FB\u52D5...","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u30B3\u30F3\u30C6\u30F3\u30C4","\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3 \u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u8868\u793A\u3059\u308B\u306B\u306F\u3001Alt+F1 \u30AD\u30FC\u3092\u62BC\u3057\u307E\u3059\u3002","\u30CF\u30A4 \u30B3\u30F3\u30C8\u30E9\u30B9\u30C8 \u30C6\u30FC\u30DE\u306E\u5207\u308A\u66FF\u3048","{1} \u500B\u306E\u30D5\u30A1\u30A4\u30EB\u306B {0} \u500B\u306E\u7DE8\u96C6\u304C\u884C\u308F\u308C\u307E\u3057\u305F"],"vs/editor/common/view/editorColorRegistry":["\u30AB\u30FC\u30BD\u30EB\u4F4D\u7F6E\u306E\u884C\u3092\u5F37\u8ABF\u8868\u793A\u3059\u308B\u80CC\u666F\u8272\u3002","\u30AB\u30FC\u30BD\u30EB\u4F4D\u7F6E\u306E\u884C\u306E\u5883\u754C\u7DDA\u3092\u5F37\u8ABF\u8868\u793A\u3059\u308B\u80CC\u666F\u8272\u3002","(Quick Open \u3084\u691C\u51FA\u6A5F\u80FD\u306A\u3069\u306B\u3088\u308A) \u5F37\u8ABF\u8868\u793A\u3055\u308C\u3066\u3044\u308B\u7BC4\u56F2\u306E\u8272\u3002\u3053\u306E\u8272\u306F\u3001\u57FA\u672C\u88C5\u98FE\u304C\u975E\u8868\u793A\u306B\u306A\u3089\u306A\u3044\u3088\u3046\u4E0D\u900F\u660E\u306B\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002","\u5F37\u8ABF\u8868\u793A\u3055\u308C\u305F\u7BC4\u56F2\u306E\u5883\u754C\u7DDA\u306E\u80CC\u666F\u8272\u3002","\u5F37\u8ABF\u8868\u793A\u3055\u308C\u305F\u8A18\u53F7\u306E\u80CC\u666F\u8272 (\u5B9A\u7FA9\u3078\u79FB\u52D5\u3001\u6B21\u307E\u305F\u306F\u524D\u306E\u8A18\u53F7\u3078\u79FB\u52D5\u306A\u3069)\u3002\u57FA\u306B\u306A\u308B\u88C5\u98FE\u304C\u8986\u308F\u308C\u306A\u3044\u3088\u3046\u306B\u3059\u308B\u305F\u3081\u3001\u8272\u3092\u4E0D\u900F\u660E\u306B\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002","\u5F37\u8ABF\u8868\u793A\u3055\u308C\u305F\u8A18\u53F7\u306E\u5468\u308A\u306E\u5883\u754C\u7DDA\u306E\u80CC\u666F\u8272\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u30AB\u30FC\u30BD\u30EB\u306E\u8272\u3002","\u9078\u629E\u3055\u308C\u305F\u6587\u5B57\u5217\u306E\u80CC\u666F\u8272\u3067\u3059\u3002\u9078\u629E\u3055\u308C\u305F\u6587\u5B57\u5217\u306E\u80CC\u666F\u8272\u3092\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u51FA\u6765\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u30B9\u30DA\u30FC\u30B9\u6587\u5B57\u306E\u8272\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC \u30A4\u30F3\u30C7\u30F3\u30C8 \u30AC\u30A4\u30C9\u306E\u8272\u3002","\u30A2\u30AF\u30C6\u30A3\u30D6\u306A\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u30A4\u30F3\u30C7\u30F3\u30C8 \u30AC\u30A4\u30C9\u306E\u8272\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u884C\u756A\u53F7\u306E\u8272\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u30A2\u30AF\u30C6\u30A3\u30D6\u884C\u756A\u53F7\u306E\u8272","id \u306F\u4F7F\u7528\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002\u4EE3\u308F\u308A\u306B 'EditorLineNumber.activeForeground' \u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u30A2\u30AF\u30C6\u30A3\u30D6\u884C\u756A\u53F7\u306E\u8272","\u30A8\u30C7\u30A3\u30BF\u30FC \u30EB\u30FC\u30E9\u30FC\u306E\u8272\u3002","CodeLens \u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u524D\u666F\u8272\u3002","\u4E00\u81F4\u3059\u308B\u304B\u3063\u3053\u306E\u80CC\u666F\u8272","\u4E00\u81F4\u3059\u308B\u304B\u3063\u3053\u5185\u306E\u30DC\u30C3\u30AF\u30B9\u306E\u8272","\u6982\u8981\u30EB\u30FC\u30E9\u30FC\u306E\u5883\u754C\u8272\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u6982\u8981\u30EB\u30FC\u30E9\u30FC\u306E\u80CC\u666F\u8272\u3067\u3059\u3002\u30DF\u30CB\u30DE\u30C3\u30D7\u304C\u6709\u52B9\u3067\u3001\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u53F3\u5074\u306B\u914D\u7F6E\u3055\u308C\u3066\u3044\u308B\u5834\u5408\u306B\u306E\u307F\u4F7F\u7528\u3057\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u4F59\u767D\u306E\u80CC\u666F\u8272\u3002\u4F59\u767D\u306B\u306F\u30B0\u30EA\u30D5 \u30DE\u30FC\u30B8\u30F3\u3068\u884C\u756A\u53F7\u304C\u542B\u307E\u308C\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u306E\u4E0D\u8981\u306A (\u672A\u4F7F\u7528\u306E) \u30BD\u30FC\u30B9 \u30B3\u30FC\u30C9\u306E\u7F6B\u7DDA\u306E\u8272\u3002",`\u30A8\u30C7\u30A3\u30BF\u30FC\u5185\u306E\u4E0D\u8981\u306A (\u672A\u4F7F\u7528\u306E) \u30BD\u30FC\u30B9 \u30B3\u30FC\u30C9\u306E\u4E0D\u900F\u660E\u5EA6\u3002\u305F\u3068\u3048\u3070\u3001"#000000c0" \u306F\u4E0D\u900F\u660E\u5EA6 75% \u3067\u30B3\u30FC\u30C9\u3092\u8868\u793A\u3057\u307E\u3059\u3002\u30CF\u30A4 \u30B3\u30F3\u30C8\u30E9\u30B9\u30C8\u306E\u30C6\u30FC\u30DE\u306E\u5834\u5408\u3001'editorUnnecessaryCode.border' \u30C6\u30FC\u30DE\u8272\u3092\u4F7F\u7528\u3057\u3066\u3001\u4E0D\u8981\u306A\u30B3\u30FC\u30C9\u3092\u30D5\u30A7\u30FC\u30C9\u30A2\u30A6\u30C8\u3059\u308B\u306E\u3067\u306F\u306A\u304F\u4E0B\u7DDA\u3092\u4ED8\u3051\u307E\u3059\u3002`,"\u7BC4\u56F2\u5F37\u8ABF\u8868\u793A\u306E\u305F\u3081\u306E\u6982\u8981\u30EB\u30FC\u30E9\u30FC \u30DE\u30FC\u30AB\u30FC\u306E\u8272\u3002\u3053\u306E\u8272\u306F\u3001\u57FA\u672C\u88C5\u98FE\u304C\u975E\u8868\u793A\u306B\u306A\u3089\u306A\u3044\u3088\u3046\u4E0D\u900F\u660E\u306B\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002","\u30A8\u30E9\u30FC\u3092\u793A\u3059\u6982\u8981\u30EB\u30FC\u30E9\u30FC\u306E\u30DE\u30FC\u30AB\u30FC\u8272\u3002","\u8B66\u544A\u3092\u793A\u3059\u6982\u8981\u30EB\u30FC\u30E9\u30FC\u306E\u30DE\u30FC\u30AB\u30FC\u8272\u3002","\u60C5\u5831\u3092\u793A\u3059\u6982\u8981\u30EB\u30FC\u30E9\u30FC\u306E\u30DE\u30FC\u30AB\u30FC\u8272\u3002"],"vs/editor/contrib/anchorSelect/anchorSelect":["\u9078\u629E\u30A2\u30F3\u30AB\u30FC","\u30A2\u30F3\u30AB\u30FC\u304C {0}:{1} \u306B\u8A2D\u5B9A\u3055\u308C\u307E\u3057\u305F","\u9078\u629E\u30A2\u30F3\u30AB\u30FC\u306E\u8A2D\u5B9A","\u9078\u629E\u30A2\u30F3\u30AB\u30FC\u3078\u79FB\u52D5","\u30A2\u30F3\u30AB\u30FC\u304B\u3089\u30AB\u30FC\u30BD\u30EB\u3078\u9078\u629E","\u9078\u629E\u30A2\u30F3\u30AB\u30FC\u306E\u53D6\u308A\u6D88\u3057"],"vs/editor/contrib/bracketMatching/bracketMatching":["\u4E00\u81F4\u3059\u308B\u30D6\u30E9\u30B1\u30C3\u30C8\u3092\u793A\u3059\u6982\u8981\u30EB\u30FC\u30E9\u30FC\u306E\u30DE\u30FC\u30AB\u30FC\u8272\u3002","\u30D6\u30E9\u30B1\u30C3\u30C8\u3078\u79FB\u52D5","\u30D6\u30E9\u30B1\u30C3\u30C8\u306B\u9078\u629E","\u30D6\u30E9\u30B1\u30C3\u30C8\u306B\u79FB\u52D5(&&B)"],"vs/editor/contrib/caretOperations/caretOperations":["\u9078\u629E\u3057\u305F\u30C6\u30AD\u30B9\u30C8\u3092\u5DE6\u306B\u79FB\u52D5","\u9078\u629E\u3057\u305F\u30C6\u30AD\u30B9\u30C8\u3092\u53F3\u306B\u79FB\u52D5"],"vs/editor/contrib/caretOperations/transpose":["\u6587\u5B57\u306E\u5165\u308C\u66FF\u3048"],"vs/editor/contrib/clipboard/clipboard":["\u5207\u308A\u53D6\u308A(&&T)","\u5207\u308A\u53D6\u308A","\u5207\u308A\u53D6\u308A","\u30B3\u30D4\u30FC(&&C)","\u30B3\u30D4\u30FC","\u30B3\u30D4\u30FC","\u8CBC\u308A\u4ED8\u3051(&&P)","\u8CBC\u308A\u4ED8\u3051","\u8CBC\u308A\u4ED8\u3051","\u69CB\u6587\u3092\u5F37\u8ABF\u8868\u793A\u3057\u3066\u30B3\u30D4\u30FC"],"vs/editor/contrib/codeAction/codeActionCommands":["\u5B9F\u884C\u3059\u308B\u30B3\u30FC\u30C9 \u30A2\u30AF\u30B7\u30E7\u30F3\u306E\u7A2E\u985E\u3002","\u8FD4\u3055\u308C\u305F\u30A2\u30AF\u30B7\u30E7\u30F3\u304C\u9069\u7528\u3055\u308C\u308B\u30BF\u30A4\u30DF\u30F3\u30B0\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u6700\u521D\u306B\u8FD4\u3055\u308C\u305F\u30B3\u30FC\u30C9 \u30A2\u30AF\u30B7\u30E7\u30F3\u3092\u5E38\u306B\u9069\u7528\u3057\u307E\u3059\u3002","\u6700\u521D\u306B\u8FD4\u3055\u308C\u305F\u30B3\u30FC\u30C9 \u30A2\u30AF\u30B7\u30E7\u30F3\u4EE5\u5916\u306B\u8FD4\u3055\u308C\u305F\u30B3\u30FC\u30C9 \u30A2\u30AF\u30B7\u30E7\u30F3\u304C\u306A\u3044\u5834\u5408\u306F\u3001\u305D\u306E\u30A2\u30AF\u30B7\u30E7\u30F3\u3092\u9069\u7528\u3057\u307E\u3059\u3002","\u8FD4\u3055\u308C\u305F\u30B3\u30FC\u30C9 \u30A2\u30AF\u30B7\u30E7\u30F3\u306F\u9069\u7528\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u512A\u5148\u30B3\u30FC\u30C9 \u30A2\u30AF\u30B7\u30E7\u30F3\u306E\u307F\u3092\u8FD4\u3059\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30B3\u30FC\u30C9 \u30A2\u30AF\u30B7\u30E7\u30F3\u306E\u9069\u7528\u4E2D\u306B\u4E0D\u660E\u306A\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F","\u30AF\u30A4\u30C3\u30AF \u30D5\u30A3\u30C3\u30AF\u30B9...","\u5229\u7528\u53EF\u80FD\u306A\u30B3\u30FC\u30C9 \u30A2\u30AF\u30B7\u30E7\u30F3\u306F\u3042\u308A\u307E\u305B\u3093","'{0}' \u306B\u5BFE\u3057\u3066\u4F7F\u7528\u3067\u304D\u308B\u512A\u5148\u30B3\u30FC\u30C9 \u30A2\u30AF\u30B7\u30E7\u30F3\u304C\u3042\u308A\u307E\u305B\u3093","{0}' \u306B\u5BFE\u3057\u3066\u4F7F\u7528\u3067\u304D\u308B\u30B3\u30FC\u30C9 \u30A2\u30AF\u30B7\u30E7\u30F3\u304C\u3042\u308A\u307E\u305B\u3093","\u4F7F\u7528\u3067\u304D\u308B\u512A\u5148\u30B3\u30FC\u30C9 \u30A2\u30AF\u30B7\u30E7\u30F3\u304C\u3042\u308A\u307E\u305B\u3093","\u5229\u7528\u53EF\u80FD\u306A\u30B3\u30FC\u30C9 \u30A2\u30AF\u30B7\u30E7\u30F3\u306F\u3042\u308A\u307E\u305B\u3093","\u30EA\u30D5\u30A1\u30AF\u30BF\u30FC...","'{0}' \u306B\u5BFE\u3057\u3066\u4F7F\u7528\u3067\u304D\u308B\u512A\u5148\u30EA\u30D5\u30A1\u30AF\u30BF\u30EA\u30F3\u30B0\u304C\u3042\u308A\u307E\u305B\u3093","'{0}' \u306B\u5BFE\u3057\u3066\u4F7F\u7528\u3067\u304D\u308B\u30EA\u30D5\u30A1\u30AF\u30BF\u30EA\u30F3\u30B0\u304C\u3042\u308A\u307E\u305B\u3093","\u4F7F\u7528\u3067\u304D\u308B\u512A\u5148\u30EA\u30D5\u30A1\u30AF\u30BF\u30EA\u30F3\u30B0\u304C\u3042\u308A\u307E\u305B\u3093","\u5229\u7528\u53EF\u80FD\u306A\u30EA\u30D5\u30A1\u30AF\u30BF\u30EA\u30F3\u30B0\u306F\u3042\u308A\u307E\u305B\u3093","\u30BD\u30FC\u30B9 \u30A2\u30AF\u30B7\u30E7\u30F3...","'{0}' \u306B\u5BFE\u3057\u3066\u4F7F\u7528\u3067\u304D\u308B\u512A\u5148\u30BD\u30FC\u30B9 \u30A2\u30AF\u30B7\u30E7\u30F3\u304C\u3042\u308A\u307E\u305B\u3093","'{0}' \u306B\u5BFE\u3057\u3066\u4F7F\u7528\u3067\u304D\u308B\u30BD\u30FC\u30B9 \u30A2\u30AF\u30B7\u30E7\u30F3\u304C\u3042\u308A\u307E\u305B\u3093","\u4F7F\u7528\u3067\u304D\u308B\u512A\u5148\u30BD\u30FC\u30B9 \u30A2\u30AF\u30B7\u30E7\u30F3\u304C\u3042\u308A\u307E\u305B\u3093","\u5229\u7528\u53EF\u80FD\u306A\u30BD\u30FC\u30B9 \u30A2\u30AF\u30B7\u30E7\u30F3\u306F\u3042\u308A\u307E\u305B\u3093","\u30A4\u30F3\u30DD\u30FC\u30C8\u3092\u6574\u7406","\u5229\u7528\u53EF\u80FD\u306A\u30A4\u30F3\u30DD\u30FC\u30C8\u306E\u6574\u7406\u30A2\u30AF\u30B7\u30E7\u30F3\u306F\u3042\u308A\u307E\u305B\u3093","\u3059\u3079\u3066\u4FEE\u6B63","\u3059\u3079\u3066\u3092\u4FEE\u6B63\u3059\u308B\u30A2\u30AF\u30B7\u30E7\u30F3\u306F\u5229\u7528\u3067\u304D\u307E\u305B\u3093","\u81EA\u52D5\u4FEE\u6B63...","\u5229\u7528\u53EF\u80FD\u306A\u81EA\u52D5\u4FEE\u6B63\u306F\u3042\u308A\u307E\u305B\u3093"],"vs/editor/contrib/codeAction/lightBulbWidget":["\u4FEE\u6B63\u30D7\u30ED\u30B0\u30E9\u30E0\u3092\u8868\u793A\u3057\u307E\u3059\u3002\u63A8\u5968\u3055\u308C\u308B\u5229\u7528\u53EF\u80FD\u306A\u4FEE\u6B63\u30D7\u30ED\u30B0\u30E9\u30E0 ({0})","\u4FEE\u6B63\u30D7\u30ED\u30B0\u30E9\u30E0 ({0}) \u3092\u8868\u793A\u3059\u308B","\u4FEE\u6B63\u30D7\u30ED\u30B0\u30E9\u30E0\u3092\u8868\u793A\u3059\u308B"],"vs/editor/contrib/codelens/codelensController":["\u73FE\u5728\u306E\u884C\u306E\u30B3\u30FC\u30C9 \u30EC\u30F3\u30BA \u30B3\u30DE\u30F3\u30C9\u3092\u8868\u793A"],"vs/editor/contrib/comment/comment":["\u884C\u30B3\u30E1\u30F3\u30C8\u306E\u5207\u308A\u66FF\u3048","\u884C\u30B3\u30E1\u30F3\u30C8\u306E\u5207\u308A\u66FF\u3048(&&T)","\u884C\u30B3\u30E1\u30F3\u30C8\u306E\u8FFD\u52A0","\u884C\u30B3\u30E1\u30F3\u30C8\u306E\u524A\u9664","\u30D6\u30ED\u30C3\u30AF \u30B3\u30E1\u30F3\u30C8\u306E\u5207\u308A\u66FF\u3048","\u30D6\u30ED\u30C3\u30AF \u30B3\u30E1\u30F3\u30C8\u306E\u5207\u308A\u66FF\u3048(&&B)"],"vs/editor/contrib/contextmenu/contextmenu":["\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8 \u30E1\u30CB\u30E5\u30FC\u306E\u8868\u793A"],"vs/editor/contrib/cursorUndo/cursorUndo":["\u30AB\u30FC\u30BD\u30EB\u3092\u5143\u306B\u623B\u3059","\u30AB\u30FC\u30BD\u30EB\u306E\u3084\u308A\u76F4\u3057"],"vs/editor/contrib/find/findController":["\u691C\u7D22","\u691C\u7D22(&&F)","\u9078\u629E\u7BC4\u56F2\u3067\u691C\u7D22","\u6B21\u3092\u691C\u7D22","\u6B21\u3092\u691C\u7D22","\u524D\u3092\u691C\u7D22","\u524D\u3092\u691C\u7D22","\u6B21\u306E\u9078\u629E\u9805\u76EE\u3092\u691C\u7D22","\u524D\u306E\u9078\u629E\u9805\u76EE\u3092\u691C\u7D22","\u7F6E\u63DB","\u7F6E\u63DB(&&R)"],"vs/editor/contrib/find/findWidget":["\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u691C\u7D22\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u5185\u306E '\u9078\u629E\u7BC4\u56F2\u3092\u691C\u7D22' \u306E\u30A2\u30A4\u30B3\u30F3\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u691C\u7D22\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u304C\u6298\u308A\u305F\u305F\u307E\u308C\u3066\u3044\u308B\u3053\u3068\u3092\u793A\u3059\u30A2\u30A4\u30B3\u30F3\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u691C\u7D22\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u304C\u5C55\u958B\u3055\u308C\u3066\u3044\u308B\u3053\u3068\u3092\u793A\u3059\u30A2\u30A4\u30B3\u30F3\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u691C\u7D22\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u5185\u306E '\u7F6E\u63DB' \u306E\u30A2\u30A4\u30B3\u30F3\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u691C\u7D22\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u5185\u306E '\u3059\u3079\u3066\u7F6E\u63DB' \u306E\u30A2\u30A4\u30B3\u30F3\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u691C\u7D22\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u5185\u306E '\u524D\u3092\u691C\u7D22' \u306E\u30A2\u30A4\u30B3\u30F3\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u691C\u7D22\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u5185\u306E '\u6B21\u3092\u691C\u7D22' \u306E\u30A2\u30A4\u30B3\u30F3\u3002","\u691C\u7D22","\u691C\u7D22","\u524D\u306E\u691C\u7D22\u7D50\u679C","\u6B21\u306E\u4E00\u81F4\u9805\u76EE","\u9078\u629E\u7BC4\u56F2\u3092\u691C\u7D22","\u9589\u3058\u308B","\u7F6E\u63DB","\u7F6E\u63DB","\u7F6E\u63DB","\u3059\u3079\u3066\u7F6E\u63DB","\u7F6E\u63DB\u30E2\u30FC\u30C9\u306E\u5207\u308A\u66FF\u3048","\u6700\u521D\u306E {0} \u4EF6\u306E\u7D50\u679C\u3060\u3051\u304C\u5F37\u8ABF\u8868\u793A\u3055\u308C\u307E\u3059\u304C\u3001\u3059\u3079\u3066\u306E\u691C\u7D22\u64CD\u4F5C\u306F\u30C6\u30AD\u30B9\u30C8\u5168\u4F53\u3067\u6A5F\u80FD\u3057\u307E\u3059\u3002","{0} / {1} \u4EF6","\u7D50\u679C\u306F\u3042\u308A\u307E\u305B\u3093\u3002","{0} \u304C\u898B\u3064\u304B\u308A\u307E\u3057\u305F","{0} \u304C '{1}' \u3067\u898B\u3064\u304B\u308A\u307E\u3057\u305F","{0} \u306F '{1}' \u3067 {2} \u306B\u898B\u3064\u304B\u308A\u307E\u3057\u305F","{0} \u304C '{1}' \u3067\u898B\u3064\u304B\u308A\u307E\u3057\u305F","Ctrl + Enter \u30AD\u30FC\u3092\u62BC\u3059\u3068\u3001\u3059\u3079\u3066\u7F6E\u63DB\u3059\u308B\u306E\u3067\u306F\u306A\u304F\u3001\u6539\u884C\u304C\u633F\u5165\u3055\u308C\u308B\u3088\u3046\u306B\u306A\u308A\u307E\u3057\u305F\u3002editor.action.replaceAll \u306E\u30AD\u30FC\u30D0\u30A4\u30F3\u30C9\u3092\u5909\u66F4\u3057\u3066\u3001\u3053\u306E\u52D5\u4F5C\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3067\u304D\u307E\u3059\u3002"],"vs/editor/contrib/folding/folding":["\u5C55\u958B","\u518D\u5E30\u7684\u306B\u5C55\u958B\u3059\u308B","\u6298\u308A\u305F\u305F\u307F","\u6298\u308A\u305F\u305F\u307F\u306E\u5207\u308A\u66FF\u3048","\u518D\u5E30\u7684\u306B\u6298\u308A\u305F\u305F\u3080","\u3059\u3079\u3066\u306E\u30D6\u30ED\u30C3\u30AF \u30B3\u30E1\u30F3\u30C8\u306E\u6298\u308A\u305F\u305F\u307F","\u3059\u3079\u3066\u306E\u9818\u57DF\u3092\u6298\u308A\u305F\u305F\u3080","\u3059\u3079\u3066\u306E\u9818\u57DF\u3092\u5C55\u958B","\u3059\u3079\u3066\u6298\u308A\u305F\u305F\u307F","\u3059\u3079\u3066\u5C55\u958B","\u30EC\u30D9\u30EB {0} \u3067\u6298\u308A\u305F\u305F\u3080","\u6298\u308A\u66F2\u3052\u308B\u7BC4\u56F2\u306E\u80CC\u666F\u8272\u3002\u57FA\u306E\u88C5\u98FE\u3092\u96A0\u3055\u306A\u3044\u3088\u3046\u306B\u3001\u8272\u306F\u4E0D\u900F\u660E\u3067\u3042\u3063\u3066\u306F\u306A\u308A\u307E\u305B\u3093\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u4F59\u767D\u306B\u3042\u308B\u6298\u308A\u305F\u305F\u307F\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u306E\u8272\u3002"],"vs/editor/contrib/folding/foldingDecorations":["\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u30B0\u30EA\u30D5\u4F59\u767D\u5185\u306E\u5C55\u958B\u3055\u308C\u305F\u7BC4\u56F2\u306E\u30A2\u30A4\u30B3\u30F3\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u30B0\u30EA\u30D5\u4F59\u767D\u5185\u306E\u6298\u308A\u305F\u305F\u307E\u308C\u305F\u7BC4\u56F2\u306E\u30A2\u30A4\u30B3\u30F3\u3002"],"vs/editor/contrib/fontZoom/fontZoom":["\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u30D5\u30A9\u30F3\u30C8\u3092\u62E1\u5927","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u30D5\u30A9\u30F3\u30C8\u3092\u7E2E\u5C0F","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u30D5\u30A9\u30F3\u30C8\u306E\u30BA\u30FC\u30E0\u3092\u30EA\u30BB\u30C3\u30C8"],"vs/editor/contrib/format/format":["\u884C {0} \u3067 1 \u3064\u306E\u66F8\u5F0F\u8A2D\u5B9A\u3092\u7DE8\u96C6","\u884C {1} \u3067 {0} \u500B\u306E\u66F8\u5F0F\u8A2D\u5B9A\u3092\u7DE8\u96C6","\u884C {0} \u3068 {1} \u306E\u9593\u3067 1 \u3064\u306E\u66F8\u5F0F\u8A2D\u5B9A\u3092\u7DE8\u96C6","\u884C {1} \u3068 {2} \u306E\u9593\u3067 {0} \u500B\u306E\u66F8\u5F0F\u8A2D\u5B9A\u3092\u7DE8\u96C6"],"vs/editor/contrib/format/formatActions":["\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u306E\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8","\u9078\u629E\u7BC4\u56F2\u306E\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8"],"vs/editor/contrib/gotoError/gotoError":["\u6B21\u306E\u554F\u984C (\u30A8\u30E9\u30FC\u3001\u8B66\u544A\u3001\u60C5\u5831) \u3078\u79FB\u52D5","\u6B21\u306E\u30DE\u30FC\u30AB\u30FC\u3078\u79FB\u52D5\u3059\u308B\u305F\u3081\u306E\u30A2\u30A4\u30B3\u30F3\u3002","\u524D\u306E\u554F\u984C (\u30A8\u30E9\u30FC\u3001\u8B66\u544A\u3001\u60C5\u5831) \u3078\u79FB\u52D5","\u524D\u306E\u30DE\u30FC\u30AB\u30FC\u3078\u79FB\u52D5\u3059\u308B\u305F\u3081\u306E\u30A2\u30A4\u30B3\u30F3\u3002","\u30D5\u30A1\u30A4\u30EB\u5185\u306E\u6B21\u306E\u554F\u984C (\u30A8\u30E9\u30FC\u3001\u8B66\u544A\u3001\u60C5\u5831) \u3078\u79FB\u52D5","\u6B21\u306E\u554F\u984C\u7B87\u6240(&&P)","\u30D5\u30A1\u30A4\u30EB\u5185\u306E\u524D\u306E\u554F\u984C (\u30A8\u30E9\u30FC\u3001\u8B66\u544A\u3001\u60C5\u5831) \u3078\u79FB\u52D5","\u524D\u306E\u554F\u984C\u7B87\u6240(&&P)"],"vs/editor/contrib/gotoError/gotoErrorWidget":["\u30A8\u30E9\u30FC","\u8B66\u544A","\u60C5\u5831","\u30D2\u30F3\u30C8","{0} ({1})\u3002","{1} \u4EF6\u4E2D {0} \u4EF6\u306E\u554F\u984C","\u554F\u984C {0} / {1}","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u30DE\u30FC\u30AB\u30FC \u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3 \u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306E\u30A8\u30E9\u30FC\u306E\u8272\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u30DE\u30FC\u30AB\u30FC \u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3 \u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306E\u8B66\u544A\u306E\u8272\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u30DE\u30FC\u30AB\u30FC \u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3 \u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306E\u60C5\u5831\u306E\u8272\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u30DE\u30FC\u30AB\u30FC \u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3 \u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306E\u80CC\u666F\u3002"],"vs/editor/contrib/gotoSymbol/goToCommands":["\u30D4\u30FC\u30AF","\u5B9A\u7FA9","'{0}' \u306E\u5B9A\u7FA9\u306F\u898B\u3064\u304B\u308A\u307E\u305B\u3093","\u5B9A\u7FA9\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093","\u5B9A\u7FA9\u3078\u79FB\u52D5","\u5B9A\u7FA9\u306B\u79FB\u52D5(&&D)","\u5B9A\u7FA9\u3092\u6A2A\u306B\u958B\u304F","\u5B9A\u7FA9\u3092\u3053\u3053\u306B\u8868\u793A","\u5BA3\u8A00","'{0}' \u306E\u5BA3\u8A00\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093","\u5BA3\u8A00\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093","\u5BA3\u8A00\u3078\u79FB\u52D5","\u5BA3\u8A00\u3078\u79FB\u52D5(&&D)","'{0}' \u306E\u5BA3\u8A00\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093","\u5BA3\u8A00\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093","\u5BA3\u8A00\u3092\u3053\u3053\u306B\u8868\u793A","\u578B\u5B9A\u7FA9","'{0}' \u306E\u578B\u5B9A\u7FA9\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093","\u578B\u5B9A\u7FA9\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093","\u578B\u5B9A\u7FA9\u3078\u79FB\u52D5","\u578B\u5B9A\u7FA9\u306B\u79FB\u52D5(&&T)","\u578B\u5B9A\u7FA9\u3092\u8868\u793A","\u5B9F\u88C5","'{0}' \u306E\u5B9F\u88C5\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093","\u5B9F\u88C5\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093","\u5B9F\u88C5\u3078\u79FB\u52D5","\u5B9F\u88C5\u7B87\u6240\u306B\u79FB\u52D5(&&I)","\u5B9F\u88C5\u306E\u30D4\u30FC\u30AF","'{0}' \u306E\u53C2\u7167\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093","\u53C2\u7167\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093","\u53C2\u7167\u3078\u79FB\u52D5","\u53C2\u7167\u3078\u79FB\u52D5(&&R)","\u53C2\u7167\u8A2D\u5B9A","\u53C2\u7167\u3092\u3053\u3053\u306B\u8868\u793A","\u53C2\u7167\u8A2D\u5B9A","\u4EFB\u610F\u306E\u8A18\u53F7\u3078\u79FB\u52D5","\u5834\u6240","'{0}' \u306B\u4E00\u81F4\u3059\u308B\u7D50\u679C\u306F\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3067\u3057\u305F","\u53C2\u7167\u8A2D\u5B9A"],"vs/editor/contrib/gotoSymbol/link/goToDefinitionAtPosition":["\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u3001{0} \u306E\u5B9A\u7FA9\u3092\u8868\u793A\u3057\u307E\u3059\u3002"],"vs/editor/contrib/gotoSymbol/peek/referencesController":["\u8AAD\u307F\u8FBC\u3093\u3067\u3044\u307E\u3059...","{0} ({1})"],"vs/editor/contrib/gotoSymbol/peek/referencesTree":["{0} \u500B\u306E\u53C2\u7167","{0} \u500B\u306E\u53C2\u7167","\u53C2\u7167"],"vs/editor/contrib/gotoSymbol/peek/referencesWidget":["\u30D7\u30EC\u30D3\u30E5\u30FC\u3092\u8868\u793A\u3067\u304D\u307E\u305B\u3093","\u7D50\u679C\u306F\u3042\u308A\u307E\u305B\u3093\u3002","\u53C2\u7167\u8A2D\u5B9A"],"vs/editor/contrib/gotoSymbol/referencesModel":["\u5217 {2} \u306E {1} \u884C\u76EE\u306B {0} \u3064\u306E\u30B7\u30F3\u30DC\u30EB","\u5217 {2}\u3001{3} \u306E {1} \u884C\u76EE\u306E {0} \u306B\u3042\u308B\u8A18\u53F7","{0} \u306B 1 \u500B\u306E\u30B7\u30F3\u30DC\u30EB\u3001\u5B8C\u5168\u306A\u30D1\u30B9 {1}","{1} \u306B {0} \u500B\u306E\u30B7\u30F3\u30DC\u30EB\u3001\u5B8C\u5168\u306A\u30D1\u30B9 {2}","\u4E00\u81F4\u3059\u308B\u9805\u76EE\u306F\u3042\u308A\u307E\u305B\u3093","{0} \u306B 1 \u500B\u306E\u30B7\u30F3\u30DC\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u3057\u305F","{1} \u306B {0} \u500B\u306E\u30B7\u30F3\u30DC\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u3057\u305F","{1} \u500B\u306E\u30D5\u30A1\u30A4\u30EB\u306B {0} \u500B\u306E\u30B7\u30F3\u30DC\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u3057\u305F"],"vs/editor/contrib/gotoSymbol/symbolNavigation":["{1} \u306E\u30B7\u30F3\u30DC\u30EB {0}\u3001\u6B21\u306B {2}","\u30B7\u30F3\u30DC\u30EB {0}/{1}"],"vs/editor/contrib/hover/hover":["\u30DB\u30D0\u30FC\u306E\u8868\u793A","\u5B9A\u7FA9\u30D7\u30EC\u30D3\u30E5\u30FC\u306E\u30DB\u30D0\u30FC\u3092\u8868\u793A\u3059\u308B"],"vs/editor/contrib/hover/markdownHoverParticipant":["\u8AAD\u307F\u8FBC\u3093\u3067\u3044\u307E\u3059..."],"vs/editor/contrib/hover/markerHoverParticipant":["View Problem","\u5229\u7528\u3067\u304D\u308B\u30AF\u30A4\u30C3\u30AF\u30D5\u30A3\u30C3\u30AF\u30B9\u306F\u3042\u308A\u307E\u305B\u3093","\u30AF\u30A4\u30C3\u30AF\u30D5\u30A3\u30C3\u30AF\u30B9\u3092\u78BA\u8A8D\u3057\u3066\u3044\u307E\u3059...","\u5229\u7528\u3067\u304D\u308B\u30AF\u30A4\u30C3\u30AF\u30D5\u30A3\u30C3\u30AF\u30B9\u306F\u3042\u308A\u307E\u305B\u3093","\u30AF\u30A4\u30C3\u30AF \u30D5\u30A3\u30C3\u30AF\u30B9..."],"vs/editor/contrib/inPlaceReplace/inPlaceReplace":["\u524D\u306E\u5024\u306B\u7F6E\u63DB","\u6B21\u306E\u5024\u306B\u7F6E\u63DB"],"vs/editor/contrib/indentation/indentation":["\u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u30B9\u30DA\u30FC\u30B9\u306B\u5909\u63DB","\u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u30BF\u30D6\u306B\u5909\u63DB","\u69CB\u6210\u3055\u308C\u305F\u30BF\u30D6\u306E\u30B5\u30A4\u30BA","\u73FE\u5728\u306E\u30D5\u30A1\u30A4\u30EB\u306E\u30BF\u30D6\u306E\u30B5\u30A4\u30BA\u3092\u9078\u629E","\u30BF\u30D6\u306B\u3088\u308B\u30A4\u30F3\u30C7\u30F3\u30C8","\u30B9\u30DA\u30FC\u30B9\u306B\u3088\u308B\u30A4\u30F3\u30C7\u30F3\u30C8","\u5185\u5BB9\u304B\u3089\u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u691C\u51FA","\u884C\u306E\u518D\u30A4\u30F3\u30C7\u30F3\u30C8","\u9078\u629E\u884C\u3092\u518D\u30A4\u30F3\u30C7\u30F3\u30C8"],"vs/editor/contrib/linesOperations/linesOperations":["\u884C\u3092\u4E0A\u3078\u30B3\u30D4\u30FC","\u884C\u3092\u4E0A\u3078\u30B3\u30D4\u30FC(&&C)","\u884C\u3092\u4E0B\u3078\u30B3\u30D4\u30FC","\u884C\u3092\u4E0B\u3078\u30B3\u30D4\u30FC(&&P)","\u9078\u629E\u7BC4\u56F2\u306E\u8907\u88FD","\u9078\u629E\u7BC4\u56F2\u306E\u8907\u88FD(&&D)","\u884C\u3092\u4E0A\u3078\u79FB\u52D5","\u884C\u3092\u4E0A\u3078\u79FB\u52D5(&&V)","\u884C\u3092\u4E0B\u3078\u79FB\u52D5","\u884C\u3092\u4E0B\u3078\u79FB\u52D5(&&L)","\u884C\u3092\u6607\u9806\u306B\u4E26\u3079\u66FF\u3048","\u884C\u3092\u964D\u9806\u306B\u4E26\u3079\u66FF\u3048","\u672B\u5C3E\u306E\u7A7A\u767D\u306E\u30C8\u30EA\u30DF\u30F3\u30B0","\u884C\u306E\u524A\u9664","\u884C\u306E\u30A4\u30F3\u30C7\u30F3\u30C8","\u884C\u306E\u30A4\u30F3\u30C7\u30F3\u30C8\u89E3\u9664","\u884C\u3092\u4E0A\u306B\u633F\u5165","\u884C\u3092\u4E0B\u306B\u633F\u5165","\u5DE6\u5074\u3092\u3059\u3079\u3066\u524A\u9664","\u53F3\u5074\u3092\u3059\u3079\u3066\u524A\u9664","\u884C\u3092\u3064\u306A\u3052\u308B","\u30AB\u30FC\u30BD\u30EB\u306E\u5468\u56F2\u306E\u6587\u5B57\u3092\u5165\u308C\u66FF\u3048\u308B","\u5927\u6587\u5B57\u306B\u5909\u63DB","\u5C0F\u6587\u5B57\u306B\u5909\u63DB","\u5148\u982D\u6587\u5B57\u3092\u5927\u6587\u5B57\u306B\u5909\u63DB\u3059\u308B","\u30B9\u30CD\u30FC\u30AF \u30B1\u30FC\u30B9\u306B\u5909\u63DB\u3059\u308B"],"vs/editor/contrib/linkedEditing/linkedEditing":["\u30EA\u30F3\u30AF\u3055\u308C\u305F\u7DE8\u96C6\u306E\u958B\u59CB","\u30A8\u30C7\u30A3\u30BF\u30FC\u304C\u578B\u306E\u540D\u524D\u306E\u81EA\u52D5\u5909\u66F4\u3092\u884C\u3046\u3068\u304D\u306E\u80CC\u666F\u8272\u3067\u3059\u3002"],"vs/editor/contrib/links/links":["\u30B3\u30DE\u30F3\u30C9\u306E\u5B9F\u884C","\u30EA\u30F3\u30AF\u5148\u3092\u8868\u793A","cmd + \u30AF\u30EA\u30C3\u30AF","ctrl + \u30AF\u30EA\u30C3\u30AF","option + \u30AF\u30EA\u30C3\u30AF","alt + \u30AF\u30EA\u30C3\u30AF","\u30B3\u30DE\u30F3\u30C9 {0} \u306E\u5B9F\u884C","\u3053\u306E\u30EA\u30F3\u30AF\u306F\u5F62\u5F0F\u304C\u6B63\u3057\u304F\u306A\u3044\u305F\u3081\u958B\u304F\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F: {0}","\u3053\u306E\u30EA\u30F3\u30AF\u306F\u30BF\u30FC\u30B2\u30C3\u30C8\u304C\u5B58\u5728\u3057\u306A\u3044\u305F\u3081\u958B\u304F\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002","\u30EA\u30F3\u30AF\u3092\u958B\u304F"],"vs/editor/contrib/message/messageController":["\u30A8\u30C7\u30A3\u30BF\u30FC\u306B\u73FE\u5728\u30A4\u30F3\u30E9\u30A4\u30F3 \u30E1\u30C3\u30BB\u30FC\u30B8\u304C\u8868\u793A\u3055\u308C\u3066\u3044\u308B\u304B\u3069\u3046\u304B","\u8AAD\u307F\u53D6\u308A\u5C02\u7528\u306E\u30A8\u30C7\u30A3\u30BF\u30FC\u306F\u7DE8\u96C6\u3067\u304D\u307E\u305B\u3093"],"vs/editor/contrib/multicursor/multicursor":["\u30AB\u30FC\u30BD\u30EB\u3092\u4E0A\u306B\u633F\u5165","\u30AB\u30FC\u30BD\u30EB\u3092\u4E0A\u306B\u633F\u5165(&&A)","\u30AB\u30FC\u30BD\u30EB\u3092\u4E0B\u306B\u633F\u5165","\u30AB\u30FC\u30BD\u30EB\u3092\u4E0B\u306B\u633F\u5165(&&D)","\u30AB\u30FC\u30BD\u30EB\u3092\u884C\u672B\u306B\u633F\u5165","\u30AB\u30FC\u30BD\u30EB\u3092\u884C\u672B\u306B\u633F\u5165(&&U)","\u30AB\u30FC\u30BD\u30EB\u3092\u4E0B\u306B\u633F\u5165","\u30AB\u30FC\u30BD\u30EB\u3092\u4E0A\u306B\u633F\u5165","\u9078\u629E\u3057\u305F\u9805\u76EE\u3092\u6B21\u306E\u4E00\u81F4\u9805\u76EE\u306B\u8FFD\u52A0","\u6B21\u306E\u51FA\u73FE\u500B\u6240\u3092\u8FFD\u52A0(&&N)","\u9078\u629E\u9805\u76EE\u3092\u6B21\u306E\u4E00\u81F4\u9805\u76EE\u306B\u8FFD\u52A0","\u524D\u306E\u51FA\u73FE\u7B87\u6240\u3092\u8FFD\u52A0(&&R)","\u6700\u5F8C\u306B\u9078\u629E\u3057\u305F\u9805\u76EE\u3092\u6B21\u306E\u4E00\u81F4\u9805\u76EE\u306B\u79FB\u52D5","\u6700\u5F8C\u306B\u9078\u3093\u3060\u9805\u76EE\u3092\u524D\u306E\u4E00\u81F4\u9805\u76EE\u306B\u79FB\u52D5\u3059\u308B","\u4E00\u81F4\u3059\u308B\u3059\u3079\u3066\u306E\u51FA\u73FE\u7B87\u6240\u3092\u9078\u629E\u3057\u307E\u3059","\u3059\u3079\u3066\u306E\u51FA\u73FE\u7B87\u6240\u3092\u9078\u629E(&&O)","\u3059\u3079\u3066\u306E\u51FA\u73FE\u7B87\u6240\u3092\u5909\u66F4"],"vs/editor/contrib/parameterHints/parameterHints":["\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC \u30D2\u30F3\u30C8\u3092\u30C8\u30EA\u30AC\u30FC"],"vs/editor/contrib/parameterHints/parameterHintsWidget":["\u6B21\u306E\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC \u30D2\u30F3\u30C8\u3092\u8868\u793A\u3059\u308B\u305F\u3081\u306E\u30A2\u30A4\u30B3\u30F3\u3002","\u524D\u306E\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC \u30D2\u30F3\u30C8\u3092\u8868\u793A\u3059\u308B\u305F\u3081\u306E\u30A2\u30A4\u30B3\u30F3\u3002","{0}\u3001\u30D2\u30F3\u30C8"],"vs/editor/contrib/peekView/peekView":["\u9589\u3058\u308B","\u30D4\u30FC\u30AF \u30D3\u30E5\u30FC\u306E\u30BF\u30A4\u30C8\u30EB\u9818\u57DF\u306E\u80CC\u666F\u8272\u3002","\u30D4\u30FC\u30AF \u30D3\u30E5\u30FC \u30BF\u30A4\u30C8\u30EB\u306E\u8272\u3002","\u30D4\u30FC\u30AF \u30D3\u30E5\u30FC\u306E\u30BF\u30A4\u30C8\u30EB\u60C5\u5831\u306E\u8272\u3002","\u30D4\u30FC\u30AF \u30D3\u30E5\u30FC\u306E\u5883\u754C\u3068\u77E2\u5370\u306E\u8272\u3002","\u30D4\u30FC\u30AF \u30D3\u30E5\u30FC\u7D50\u679C\u30EA\u30B9\u30C8\u306E\u80CC\u666F\u8272\u3002","\u30D4\u30FC\u30AF \u30D3\u30E5\u30FC\u7D50\u679C\u30EA\u30B9\u30C8\u306E\u30E9\u30A4\u30F3 \u30CE\u30FC\u30C9\u306E\u524D\u666F\u8272\u3002","\u30D4\u30FC\u30AF \u30D3\u30E5\u30FC\u7D50\u679C\u30EA\u30B9\u30C8\u306E\u30D5\u30A1\u30A4\u30EB \u30CE\u30FC\u30C9\u306E\u524D\u666F\u8272\u3002","\u30D4\u30FC\u30AF \u30D3\u30E5\u30FC\u7D50\u679C\u30EA\u30B9\u30C8\u306E\u9078\u629E\u6E08\u307F\u30A8\u30F3\u30C8\u30EA\u306E\u80CC\u666F\u8272\u3002","\u30D4\u30FC\u30AF \u30D3\u30E5\u30FC\u7D50\u679C\u30EA\u30B9\u30C8\u306E\u9078\u629E\u6E08\u307F\u30A8\u30F3\u30C8\u30EA\u306E\u524D\u666F\u8272\u3002","\u30D4\u30FC\u30AF \u30D3\u30E5\u30FC \u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u80CC\u666F\u8272\u3002","\u30D4\u30FC\u30AF \u30D3\u30E5\u30FC \u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u4F59\u767D\u306E\u80CC\u666F\u8272\u3002","\u30D4\u30FC\u30AF \u30D3\u30E5\u30FC\u7D50\u679C\u30EA\u30B9\u30C8\u306E\u4E00\u81F4\u3057\u305F\u5F37\u8ABF\u8868\u793A\u8272\u3002","\u30D4\u30FC\u30AF \u30D3\u30E5\u30FC \u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u4E00\u81F4\u3057\u305F\u5F37\u8ABF\u8868\u793A\u8272\u3002","\u30D4\u30FC\u30AF \u30D3\u30E5\u30FC \u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u4E00\u81F4\u3057\u305F\u5F37\u8ABF\u5883\u754C\u8272\u3002"],"vs/editor/contrib/quickAccess/gotoLineQuickAccess":["\u6700\u521D\u306B\u30C6\u30AD\u30B9\u30C8 \u30A8\u30C7\u30A3\u30BF\u30FC\u3092\u958B\u3044\u3066\u3001\u884C\u306B\u79FB\u52D5\u3057\u307E\u3059\u3002","\u884C {0}\u3001\u5217 {1} \u306B\u79FB\u52D5\u3057\u307E\u3059\u3002","{0} \u884C\u306B\u79FB\u52D5\u3057\u307E\u3059\u3002","\u73FE\u5728\u306E\u884C: {0}\u3001\u6587\u5B57: {1}\u3002\u79FB\u52D5\u5148\u3068\u306A\u308B\u30011 \u304B\u3089 {2} \u307E\u3067\u306E\u884C\u756A\u53F7\u3092\u5165\u529B\u3057\u307E\u3059\u3002","\u73FE\u5728\u306E\u884C: {0}\u3001\u6587\u5B57: {1}\u3002\u79FB\u52D5\u5148\u306E\u884C\u756A\u53F7\u3092\u5165\u529B\u3057\u307E\u3059\u3002"],"vs/editor/contrib/quickAccess/gotoSymbolQuickAccess":["\u30B7\u30F3\u30DC\u30EB\u306B\u79FB\u52D5\u3059\u308B\u306B\u306F\u3001\u307E\u305A\u30B7\u30F3\u30DC\u30EB\u60C5\u5831\u3092\u542B\u3080\u30C6\u30AD\u30B9\u30C8 \u30A8\u30C7\u30A3\u30BF\u30FC\u3092\u958B\u304D\u307E\u3059\u3002","\u30A2\u30AF\u30C6\u30A3\u30D6\u306A\u30C6\u30AD\u30B9\u30C8 \u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u306F\u3001\u30B7\u30F3\u30DC\u30EB\u60C5\u5831\u306F\u8868\u793A\u3055\u308C\u307E\u305B\u3093\u3002","\u4E00\u81F4\u3059\u308B\u30A8\u30C7\u30A3\u30BF\u30FC \u30B7\u30F3\u30DC\u30EB\u304C\u3042\u308A\u307E\u305B\u3093","\u30A8\u30C7\u30A3\u30BF\u30FC \u30B7\u30F3\u30DC\u30EB\u304C\u3042\u308A\u307E\u305B\u3093","\u6A2A\u306B\u4E26\u3079\u3066\u958B\u304F","\u4E00\u756A\u4E0B\u3067\u958B\u304F","\u30B7\u30F3\u30DC\u30EB ({0})","\u30D7\u30ED\u30D1\u30C6\u30A3 ({0})","\u30E1\u30BD\u30C3\u30C9 ({0})","\u95A2\u6570 ({0})","\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF\u30FC ({0})","\u5909\u6570 ({0})","\u30AF\u30E9\u30B9 ({0})","\u69CB\u9020\u4F53 ({0})","\u30A4\u30D9\u30F3\u30C8 ({0})","\u6F14\u7B97\u5B50 ({0})","\u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30A4\u30B9 ({0})","\u540D\u524D\u7A7A\u9593 ({0})","\u30D1\u30C3\u30B1\u30FC\u30B8 ({0})","\u578B\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC ({0})","\u30E2\u30B8\u30E5\u30FC\u30EB ({0})","\u30D7\u30ED\u30D1\u30C6\u30A3 ({0})","\u5217\u6319\u578B ({0})","\u5217\u6319\u578B\u30E1\u30F3\u30D0\u30FC ({0})","\u6587\u5B57\u5217 ({0})","\u30D5\u30A1\u30A4\u30EB ({0})","\u914D\u5217 ({0})","\u6570\u5024 ({0})","\u30D6\u30FC\u30EB\u5024 ({0})","\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8 ({0})","\u30AD\u30FC ({0})","\u30D5\u30A3\u30FC\u30EB\u30C9 ({0})","\u5B9A\u6570 ({0})"],"vs/editor/contrib/rename/rename":["\u7D50\u679C\u304C\u3042\u308A\u307E\u305B\u3093\u3002","\u540D\u524D\u5909\u66F4\u306E\u5834\u6240\u3092\u89E3\u6C7A\u3057\u3088\u3046\u3068\u3057\u3066\u4E0D\u660E\u306A\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F","'{0}' \u306E\u540D\u524D\u306E\u5909\u66F4\u4E2D","{0} \u306E\u540D\u524D\u3092\u5909\u66F4\u3057\u3066\u3044\u307E\u3059","'{0}' \u304B\u3089 '{1}' \u3078\u306E\u540D\u524D\u5909\u66F4\u304C\u6B63\u5E38\u306B\u5B8C\u4E86\u3057\u307E\u3057\u305F\u3002\u6982\u8981: {2}","\u540D\u524D\u306E\u5909\u66F4\u3067\u7DE8\u96C6\u3092\u9069\u7528\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F","\u540D\u524D\u306E\u5909\u66F4\u306B\u3088\u3063\u3066\u7DE8\u96C6\u306E\u8A08\u7B97\u306B\u5931\u6557\u3057\u307E\u3057\u305F","\u30B7\u30F3\u30DC\u30EB\u306E\u540D\u524D\u5909\u66F4","\u540D\u524D\u3092\u5909\u66F4\u3059\u308B\u524D\u306B\u5909\u66F4\u3092\u30D7\u30EC\u30D3\u30E5\u30FC\u3059\u308B\u6A5F\u80FD\u3092\u6709\u52B9\u307E\u305F\u306F\u7121\u52B9\u306B\u3059\u308B"],"vs/editor/contrib/rename/renameInputField":["\u540D\u524D\u5909\u66F4\u5165\u529B\u3002\u65B0\u3057\u3044\u540D\u524D\u3092\u5165\u529B\u3057\u3001Enter \u30AD\u30FC\u3092\u62BC\u3057\u3066\u30B3\u30DF\u30C3\u30C8\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u540D\u524D\u3092\u5909\u66F4\u3059\u308B\u306B\u306F {0}\u3001\u30D7\u30EC\u30D3\u30E5\u30FC\u3059\u308B\u306B\u306F {1}"],"vs/editor/contrib/smartSelect/smartSelect":["\u9078\u629E\u7BC4\u56F2\u3092\u62E1\u5F35","\u9078\u629E\u7BC4\u56F2\u306E\u5C55\u958B(&&E)","\u9078\u629E\u7BC4\u56F2\u3092\u7E2E\u5C0F","\u9078\u629E\u7BC4\u56F2\u306E\u7E2E\u5C0F(&&S)"],"vs/editor/contrib/snippet/snippetVariables":["\u65E5\u66DC\u65E5","\u6708\u66DC\u65E5","\u706B\u66DC\u65E5","\u6C34\u66DC\u65E5","\u6728\u66DC\u65E5","\u91D1\u66DC\u65E5","\u571F\u66DC\u65E5","\u65E5","\u6708","\u706B","\u6C34","\u6728","\u91D1","\u571F","1 \u6708","2 \u6708","3 \u6708","4 \u6708","5 \u6708","6 \u6708","7 \u6708","8 \u6708","9 \u6708","10 \u6708","11 \u6708","12 \u6708","1 \u6708","2 \u6708","3 \u6708","4 \u6708","5 \u6708","6 \u6708","7 \u6708","8 \u6708","9 \u6708","10 \u6708","11 \u6708","12 \u6708"],"vs/editor/contrib/suggest/suggestController":["{1} \u304C\u8FFD\u52A0\u7DE8\u96C6\u3057\u305F '{0}' \u3092\u53D7\u3051\u5165\u308C\u308B","\u5019\u88DC\u3092\u30C8\u30EA\u30AC\u30FC","\u633F\u5165","\u633F\u5165","\u7F6E\u63DB","\u7F6E\u63DB","\u633F\u5165","\u8868\u793A\u3092\u6E1B\u3089\u3059","\u3055\u3089\u306B\u8868\u793A","\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306E\u30B5\u30A4\u30BA\u3092\u30EA\u30BB\u30C3\u30C8"],"vs/editor/contrib/suggest/suggestWidget":["\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306E\u80CC\u666F\u8272\u3002","\u5019\u88DC\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306E\u5883\u754C\u7DDA\u8272\u3002","\u5019\u88DC\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306E\u524D\u666F\u8272\u3002","\u5019\u88DC\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u5185\u3067\u9078\u629E\u6E08\u307F\u30A8\u30F3\u30C8\u30EA\u306E\u80CC\u666F\u8272\u3002","\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u5185\u3067\u4E00\u81F4\u3057\u305F\u30CF\u30A4\u30E9\u30A4\u30C8\u306E\u8272\u3002","\u8AAD\u307F\u8FBC\u3093\u3067\u3044\u307E\u3059...","\u5019\u88DC\u306F\u3042\u308A\u307E\u305B\u3093\u3002","{0}\u3001\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8: {1}","\u63D0\u6848"],"vs/editor/contrib/suggest/suggestWidgetDetails":["\u9589\u3058\u308B","\u8AAD\u307F\u8FBC\u3093\u3067\u3044\u307E\u3059..."],"vs/editor/contrib/suggest/suggestWidgetRenderer":["\u63D0\u6848\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306E\u8A73\u7D30\u60C5\u5831\u306E\u30A2\u30A4\u30B3\u30F3\u3002","\u8A73\u7D30\u3092\u53C2\u7167"],"vs/editor/contrib/suggest/suggestWidgetStatus":["{0} ({1})"],"vs/editor/contrib/symbolIcons/symbolIcons":["\u914D\u5217\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u30D6\u30FC\u30EB\u5024\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u30AF\u30E9\u30B9\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u8272\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u5B9A\u6570\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF\u30FC\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u5217\u6319\u5B50\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u5217\u6319\u5B50\u30E1\u30F3\u30D0\u30FC\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u30A4\u30D9\u30F3\u30C8\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u30D5\u30A3\u30FC\u30EB\u30C9\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u30D5\u30A1\u30A4\u30EB\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u30D5\u30A9\u30EB\u30C0\u30FC\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u95A2\u6570\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30A4\u30B9\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u30AD\u30FC\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u30AD\u30FC\u30EF\u30FC\u30C9\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u30E1\u30BD\u30C3\u30C9\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u30E2\u30B8\u30E5\u30FC\u30EB\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u540D\u524D\u7A7A\u9593\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","Null \u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6570\u5024\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6F14\u7B97\u5B50\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u30D1\u30C3\u30B1\u30FC\u30B8\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u30D7\u30ED\u30D1\u30C6\u30A3\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u53C2\u7167\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u30B9\u30CB\u30DA\u30C3\u30C8\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u6587\u5B57\u5217\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u69CB\u9020\u4F53\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u30C6\u30AD\u30B9\u30C8\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u5358\u4F4D\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002","\u5909\u6570\u8A18\u53F7\u306E\u524D\u666F\u8272\u3002\u3053\u308C\u3089\u306E\u8A18\u53F7\u306F\u3001\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u3001\u968E\u5C64\u30EA\u30F3\u30AF\u3001\u304A\u3088\u3073\u5019\u88DC\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002"],"vs/editor/contrib/toggleTabFocusMode/toggleTabFocusMode":["Tab \u30AD\u30FC\u3092\u5207\u308A\u66FF\u3048\u308B\u3068\u30D5\u30A9\u30FC\u30AB\u30B9\u304C\u79FB\u52D5\u3057\u307E\u3059","Tab \u30AD\u30FC\u3092\u62BC\u3059\u3068\u3001\u6B21\u306E\u30D5\u30A9\u30FC\u30AB\u30B9\u53EF\u80FD\u306A\u8981\u7D20\u306B\u30D5\u30A9\u30FC\u30AB\u30B9\u3092\u79FB\u52D5\u3057\u307E\u3059","Tab \u30AD\u30FC\u3092\u62BC\u3059\u3068\u3001\u30BF\u30D6\u6587\u5B57\u304C\u633F\u5165\u3055\u308C\u307E\u3059"],"vs/editor/contrib/tokenization/tokenization":["\u958B\u767A\u8005: \u30C8\u30FC\u30AF\u30F3\u518D\u4F5C\u6210\u306E\u5F37\u5236"],"vs/editor/contrib/unusualLineTerminators/unusualLineTerminators":["\u666E\u901A\u3067\u306F\u306A\u3044\u884C\u7D42\u7AEF\u8A18\u53F7","\u666E\u901A\u3067\u306F\u306A\u3044\u884C\u7D42\u7AEF\u8A18\u53F7\u304C\u691C\u51FA\u3055\u308C\u307E\u3057\u305F",`\u3053\u306E\u30D5\u30A1\u30A4\u30EB\u306B\u306F\u3001\u884C\u533A\u5207\u308A\u6587\u5B57 (LS) \u3084\u6BB5\u843D\u533A\u5207\u308A\u8A18\u53F7 (PS) \u306A\u3069\u306E\u7279\u6B8A\u306A\u884C\u306E\u7D42\u7AEF\u6587\u5B57\u304C 1 \u3064\u4EE5\u4E0A\u542B\u307E\u308C\u3066\u3044\u307E\u3059\u3002\r +\r +\u305D\u308C\u3089\u306E\u7D42\u7AEF\u6587\u5B57\u306F\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u524A\u9664\u3059\u308B\u3053\u3068\u3092\u304A\u52E7\u3081\u3057\u307E\u3059\u3002\u3053\u308C\u306F 'editor.unusualLineTerminators' \u3092\u4F7F\u7528\u3057\u3066\u69CB\u6210\u3067\u304D\u307E\u3059\u3002`,"\u3053\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u4FEE\u6B63","\u3053\u306E\u30D5\u30A1\u30A4\u30EB\u3067\u306F\u554F\u984C\u3092\u7121\u8996\u3059\u308B"],"vs/editor/contrib/wordHighlighter/wordHighlighter":["\u5909\u6570\u306E\u8AAD\u307F\u53D6\u308A\u306A\u3069\u3001\u8AAD\u307F\u53D6\u308A\u30A2\u30AF\u30BB\u30B9\u4E2D\u306E\u30B7\u30F3\u30DC\u30EB\u306E\u80CC\u666F\u8272\u3002\u4E0B\u306B\u3042\u308B\u88C5\u98FE\u3092\u96A0\u3055\u306A\u3044\u305F\u3081\u306B\u3001\u8272\u306F\u4E0D\u900F\u904E\u3067\u3042\u3063\u3066\u306F\u306A\u308A\u307E\u305B\u3093\u3002","\u5909\u6570\u3078\u306E\u66F8\u304D\u8FBC\u307F\u306A\u3069\u3001\u66F8\u304D\u8FBC\u307F\u30A2\u30AF\u30BB\u30B9\u4E2D\u306E\u30B7\u30F3\u30DC\u30EB\u80CC\u666F\u8272\u3002\u4E0B\u306B\u3042\u308B\u88C5\u98FE\u3092\u96A0\u3055\u306A\u3044\u305F\u3081\u306B\u3001\u8272\u306F\u4E0D\u900F\u904E\u3067\u3042\u3063\u3066\u306F\u306A\u308A\u307E\u305B\u3093\u3002","\u5909\u6570\u306E\u8AAD\u307F\u53D6\u308A\u306A\u3069\u8AAD\u307F\u53D6\u308A\u30A2\u30AF\u30BB\u30B9\u4E2D\u306E\u30B7\u30F3\u30DC\u30EB\u306E\u5883\u754C\u7DDA\u306E\u8272\u3002","\u5909\u6570\u3078\u306E\u66F8\u304D\u8FBC\u307F\u306A\u3069\u66F8\u304D\u8FBC\u307F\u30A2\u30AF\u30BB\u30B9\u4E2D\u306E\u30B7\u30F3\u30DC\u30EB\u306E\u5883\u754C\u7DDA\u306E\u8272\u3002","\u30B7\u30F3\u30DC\u30EB\u306B\u3088\u3063\u3066\u5F37\u8ABF\u8868\u793A\u3055\u308C\u308B\u6982\u8981\u30EB\u30FC\u30E9\u30FC\u306E\u30DE\u30FC\u30AB\u30FC\u306E\u8272\u3002\u30DE\u30FC\u30AB\u30FC\u306E\u8272\u306F\u3001\u57FA\u306B\u306A\u308B\u88C5\u98FE\u3092\u96A0\u3055\u306A\u3044\u3088\u3046\u306B\u4E0D\u900F\u660E\u4EE5\u5916\u306B\u3057\u307E\u3059\u3002","\u66F8\u304D\u8FBC\u307F\u30A2\u30AF\u30BB\u30B9 \u30B7\u30F3\u30DC\u30EB\u3092\u5F37\u8ABF\u8868\u793A\u3059\u308B\u6982\u8981\u30EB\u30FC\u30E9\u30FC\u306E\u30DE\u30FC\u30AB\u30FC\u8272\u3002\u4E0B\u306B\u3042\u308B\u88C5\u98FE\u3092\u96A0\u3055\u306A\u3044\u305F\u3081\u306B\u3001\u8272\u306F\u4E0D\u900F\u904E\u3067\u3042\u3063\u3066\u306F\u306A\u308A\u307E\u305B\u3093\u3002","\u6B21\u306E\u30B7\u30F3\u30DC\u30EB \u30CF\u30A4\u30E9\u30A4\u30C8\u306B\u79FB\u52D5","\u524D\u306E\u30B7\u30F3\u30DC\u30EB \u30CF\u30A4\u30E9\u30A4\u30C8\u306B\u79FB\u52D5","\u30B7\u30F3\u30DC\u30EB \u30CF\u30A4\u30E9\u30A4\u30C8\u3092\u30C8\u30EA\u30AC\u30FC"],"vs/editor/contrib/wordOperations/wordOperations":["\u5358\u8A9E\u306E\u524A\u9664"],"vs/platform/actions/browser/menuEntryActionViewItem":["{0} ({1})"],"vs/platform/configuration/common/configurationRegistry":["\u65E2\u5B9A\u306E\u8A00\u8A9E\u69CB\u6210\u306E\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9","\u8A00\u8A9E\u306B\u5BFE\u3057\u3066\u4E0A\u66F8\u304D\u3055\u308C\u308B\u30A8\u30C7\u30A3\u30BF\u30FC\u8A2D\u5B9A\u3092\u69CB\u6210\u3057\u307E\u3059\u3002","\u3053\u306E\u8A2D\u5B9A\u3067\u306F\u3001\u8A00\u8A9E\u3054\u3068\u306E\u69CB\u6210\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002","\u7A7A\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u306F\u767B\u9332\u3067\u304D\u307E\u305B\u3093","'{0}' \u3092\u767B\u9332\u3067\u304D\u307E\u305B\u3093\u3002\u3053\u308C\u306F\u3001\u8A00\u8A9E\u56FA\u6709\u306E\u30A8\u30C7\u30A3\u30BF\u30FC\u8A2D\u5B9A\u3092\u8A18\u8FF0\u3059\u308B\u30D7\u30ED\u30D1\u30C6\u30A3 \u30D1\u30BF\u30FC\u30F3 '\\\\[.*\\\\]$' \u306B\u4E00\u81F4\u3057\u3066\u3044\u307E\u3059\u3002'configurationDefaults' \u30B3\u30F3\u30C8\u30EA\u30D3\u30E5\u30FC\u30B7\u30E7\u30F3\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002","'{0}' \u3092\u767B\u9332\u3067\u304D\u307E\u305B\u3093\u3002\u3053\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u306F\u65E2\u306B\u767B\u9332\u3055\u308C\u3066\u3044\u307E\u3059\u3002"],"vs/platform/contextkey/browser/contextKeyService":["\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8 \u30AD\u30FC\u306B\u95A2\u3059\u308B\u60C5\u5831\u3092\u8FD4\u3059\u30B3\u30DE\u30F3\u30C9"],"vs/platform/contextkey/common/contextkeys":["Whether the operating system is Windows"],"vs/platform/keybinding/common/abstractKeybindingService":["({0}) \u304C\u6E21\u3055\u308C\u307E\u3057\u305F\u30022 \u756A\u76EE\u306E\u30AD\u30FC\u3092\u5F85\u3063\u3066\u3044\u307E\u3059...","\u30AD\u30FC\u306E\u7D44\u307F\u5408\u308F\u305B ({0}\u3001{1}) \u306F\u30B3\u30DE\u30F3\u30C9\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002"],"vs/platform/list/browser/listService":["\u30EF\u30FC\u30AF\u30D9\u30F3\u30C1","Windows \u304A\u3088\u3073 Linux \u4E0A\u306E `Control` \u30AD\u30FC\u3068 macOS \u4E0A\u306E `Command` \u30AD\u30FC\u306B\u5272\u308A\u5F53\u3066\u307E\u3059\u3002","Windows \u304A\u3088\u3073 Linux \u4E0A\u306E `Alt` \u30AD\u30FC\u3068 macOS \u4E0A\u306E `Option` \u30AD\u30FC\u306B\u5272\u308A\u5F53\u3066\u307E\u3059\u3002","\u30DE\u30A6\u30B9\u3092\u4F7F\u7528\u3057\u3066\u9805\u76EE\u3092\u8907\u6570\u9078\u629E\u3059\u308B\u3068\u304D\u306B\u4F7F\u7528\u3059\u308B\u4FEE\u98FE\u30AD\u30FC\u3067\u3059 (\u305F\u3068\u3048\u3070\u3001\u30A8\u30AF\u30B9\u30D7\u30ED\u30FC\u30E9\u30FC\u3067\u30A8\u30C7\u30A3\u30BF\u30FC\u3068 scm \u30D3\u30E5\u30FC\u3092\u958B\u304F\u306A\u3069)\u3002'\u6A2A\u306B\u4E26\u3079\u3066\u958B\u304F' \u30DE\u30A6\u30B9 \u30B8\u30A7\u30B9\u30C1\u30E3\u30FC (\u304C\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u308B\u5834\u5408) \u306F\u3001\u8907\u6570\u9078\u629E\u306E\u4FEE\u98FE\u30AD\u30FC\u3068\u7AF6\u5408\u3057\u306A\u3044\u3088\u3046\u306B\u8ABF\u6574\u3055\u308C\u307E\u3059\u3002","\u30DE\u30A6\u30B9\u3092\u4F7F\u7528\u3057\u3066\u3001\u30C4\u30EA\u30FC\u3068\u30EA\u30B9\u30C8\u5185\u306E\u9805\u76EE\u3092\u958B\u304F\u65B9\u6CD5\u3092\u5236\u5FA1\u3057\u307E\u3059 (\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u308B\u5834\u5408)\u3002\u9069\u7528\u3067\u304D\u306A\u3044\u5834\u5408\u3001\u4E00\u90E8\u306E\u30C4\u30EA\u30FC\u3084\u30EA\u30B9\u30C8\u3067\u306F\u3053\u306E\u8A2D\u5B9A\u304C\u7121\u8996\u3055\u308C\u308B\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002","\u30EA\u30B9\u30C8\u3068\u30C4\u30EA\u30FC\u304C\u30EF\u30FC\u30AF\u30D9\u30F3\u30C1\u3067\u6C34\u5E73\u30B9\u30AF\u30ED\u30FC\u30EB\u3092\u30B5\u30DD\u30FC\u30C8\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002\u8B66\u544A: \u3053\u306E\u8A2D\u5B9A\u3092\u30AA\u30F3\u306B\u3059\u308B\u3068\u3001\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u306B\u5F71\u97FF\u304C\u3042\u308A\u307E\u3059\u3002","\u30C4\u30EA\u30FC\u306E\u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u30D4\u30AF\u30BB\u30EB\u5358\u4F4D\u3067\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30C4\u30EA\u30FC\u3067\u30A4\u30F3\u30B7\u30C7\u30F3\u30C8\u306E\u30AC\u30A4\u30C9\u3092\u8868\u793A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u30EA\u30B9\u30C8\u3068\u30C4\u30EA\u30FC\u3067\u30B9\u30E0\u30FC\u30BA \u30B9\u30AF\u30ED\u30FC\u30EB\u3092\u4F7F\u7528\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002","\u7C21\u5358\u306A\u30AD\u30FC\u30DC\u30FC\u30C9 \u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3\u306F\u3001\u30AD\u30FC\u30DC\u30FC\u30C9\u5165\u529B\u306B\u4E00\u81F4\u3059\u308B\u8981\u7D20\u306B\u7126\u70B9\u3092\u5F53\u3066\u307E\u3059\u3002\u4E00\u81F4\u51E6\u7406\u306F\u30D7\u30EC\u30D5\u30A3\u30C3\u30AF\u30B9\u3067\u306E\u307F\u5B9F\u884C\u3055\u308C\u307E\u3059\u3002","\u30AD\u30FC\u30DC\u30FC\u30C9 \u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3\u306E\u5F37\u8ABF\u8868\u793A\u3092\u4F7F\u7528\u3059\u308B\u3068\u3001\u30AD\u30FC\u30DC\u30FC\u30C9\u5165\u529B\u306B\u4E00\u81F4\u3059\u308B\u8981\u7D20\u304C\u5F37\u8ABF\u8868\u793A\u3055\u308C\u307E\u3059\u3002\u4E0A\u304A\u3088\u3073\u4E0B\u3078\u306E\u79FB\u52D5\u306F\u3001\u5F37\u8ABF\u8868\u793A\u3055\u308C\u3066\u3044\u308B\u8981\u7D20\u306E\u307F\u3092\u79FB\u52D5\u3057\u307E\u3059\u3002","\u30AD\u30FC\u30DC\u30FC\u30C9 \u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3\u306E\u30D5\u30A3\u30EB\u30BF\u30FC\u3067\u306F\u3001\u30AD\u30FC\u30DC\u30FC\u30C9\u5165\u529B\u306B\u4E00\u81F4\u3057\u306A\u3044\u3059\u3079\u3066\u306E\u8981\u7D20\u304C\u30D5\u30A3\u30EB\u30BF\u30FC\u51E6\u7406\u3055\u308C\u3001\u975E\u8868\u793A\u306B\u306A\u308A\u307E\u3059\u3002","\u30EF\u30FC\u30AF\u30D9\u30F3\u30C1\u306E\u30EA\u30B9\u30C8\u304A\u3088\u3073\u30C4\u30EA\u30FC\u306E\u30AD\u30FC\u30DC\u30FC\u30C9 \u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3 \u30B9\u30BF\u30A4\u30EB\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002\u5358\u7D14\u3001\u5F37\u8ABF\u8868\u793A\u3001\u30D5\u30A3\u30EB\u30BF\u30FC\u3092\u6307\u5B9A\u3067\u304D\u307E\u3059\u3002","\u30EA\u30B9\u30C8\u3084\u30C4\u30EA\u30FC\u3067\u306E\u30AD\u30FC\u30DC\u30FC\u30C9 \u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3\u3092\u3001\u5358\u306B\u5165\u529B\u3059\u308B\u3060\u3051\u3067\u81EA\u52D5\u7684\u306B\u30C8\u30EA\u30AC\u30FC\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002`false` \u306B\u8A2D\u5B9A\u3057\u305F\u5834\u5408\u3001\u30AD\u30FC\u30DC\u30FC\u30C9 \u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3\u306F `list.toggleKeyboardNavigation` \u30B3\u30DE\u30F3\u30C9\u3092\u5B9F\u884C\u3057\u305F\u3068\u304D\u306B\u306E\u307F\u30C8\u30EA\u30AC\u30FC\u3055\u308C\u307E\u3059\u3002\u3053\u308C\u306B\u5BFE\u3057\u3066\u30AD\u30FC\u30DC\u30FC\u30C9 \u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8\u3092\u5272\u308A\u5F53\u3066\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002","\u30D5\u30A9\u30EB\u30C0\u30FC\u540D\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u305F\u3068\u304D\u306B\u30C4\u30EA\u30FC \u30D5\u30A9\u30EB\u30C0\u30FC\u304C\u5C55\u958B\u3055\u308C\u308B\u65B9\u6CD5\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002\u9069\u7528\u3067\u304D\u306A\u3044\u5834\u5408\u3001\u4E00\u90E8\u306E\u30C4\u30EA\u30FC\u3084\u30EA\u30B9\u30C8\u3067\u306F\u3053\u306E\u8A2D\u5B9A\u304C\u7121\u8996\u3055\u308C\u308B\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002"],"vs/platform/markers/common/markers":["\u30A8\u30E9\u30FC","\u8B66\u544A","\u60C5\u5831"],"vs/platform/quickinput/browser/commandsQuickAccess":["{0}, {1}","\u6700\u8FD1\u4F7F\u7528\u3057\u305F\u3082\u306E","\u305D\u306E\u4ED6\u306E\u30B3\u30DE\u30F3\u30C9","\u30B3\u30DE\u30F3\u30C9 '{0}' \u3067\u30A8\u30E9\u30FC ({1}) \u304C\u767A\u751F\u3057\u307E\u3057\u305F"],"vs/platform/quickinput/browser/helpQuickAccess":["\u30B0\u30ED\u30FC\u30D0\u30EB \u30B3\u30DE\u30F3\u30C9","\u30A8\u30C7\u30A3\u30BF\u30FC \u30B3\u30DE\u30F3\u30C9","{0}, {1}"],"vs/platform/theme/common/colorRegistry":["\u5168\u4F53\u306E\u524D\u666F\u8272\u3002\u3053\u306E\u8272\u306F\u3001\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306B\u3088\u3063\u3066\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3055\u308C\u3066\u3044\u306A\u3044\u5834\u5408\u306B\u306E\u307F\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002","\u30A8\u30E9\u30FC \u30E1\u30C3\u30BB\u30FC\u30B8\u5168\u4F53\u306E\u524D\u666F\u8272\u3002\u3053\u306E\u8272\u306F\u3001\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306B\u3088\u3063\u3066\u4E0A\u66F8\u304D\u3055\u308C\u3066\u3044\u306A\u3044\u5834\u5408\u306B\u306E\u307F\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002","\u30EF\u30FC\u30AF\u30D9\u30F3\u30C1\u306E\u30A2\u30A4\u30B3\u30F3\u306E\u65E2\u5B9A\u306E\u8272\u3002","\u30D5\u30A9\u30FC\u30AB\u30B9\u3055\u308C\u305F\u8981\u7D20\u306E\u5883\u754C\u7DDA\u5168\u4F53\u306E\u8272\u3002\u3053\u306E\u8272\u306F\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306B\u3088\u3063\u3066\u4E0A\u66F8\u304D\u3055\u308C\u3066\u3044\u306A\u3044\u5834\u5408\u306B\u306E\u307F\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002","\u30B3\u30F3\u30C8\u30E9\u30B9\u30C8\u3092\u5F37\u3081\u308B\u305F\u3081\u306B\u3001\u4ED6\u306E\u8981\u7D20\u3068\u9694\u3066\u308B\u8FFD\u52A0\u306E\u5883\u754C\u7DDA\u3002","\u30B3\u30F3\u30C8\u30E9\u30B9\u30C8\u3092\u5F37\u3081\u308B\u305F\u3081\u306B\u3001\u30A2\u30AF\u30C6\u30A3\u30D6\u306A\u4ED6\u8981\u7D20\u3068\u9694\u3066\u308B\u8FFD\u52A0\u306E\u5883\u754C\u7DDA\u3002","\u30C6\u30AD\u30B9\u30C8\u5185\u306E\u30EA\u30F3\u30AF\u306E\u524D\u666F\u8272\u3002","\u30C6\u30AD\u30B9\u30C8\u5185\u306E\u30B3\u30FC\u30C9 \u30D6\u30ED\u30C3\u30AF\u306E\u80CC\u666F\u8272\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u5185\u306E\u691C\u7D22/\u7F6E\u63DB\u7A93\u306A\u3069\u3001\u30A8\u30C7\u30A3\u30BF\u30FC \u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306E\u5F71\u306E\u8272\u3002","\u5165\u529B\u30DC\u30C3\u30AF\u30B9\u306E\u80CC\u666F\u3002","\u5165\u529B\u30DC\u30C3\u30AF\u30B9\u306E\u524D\u666F\u3002","\u5165\u529B\u30DC\u30C3\u30AF\u30B9\u306E\u5883\u754C\u7DDA\u3002","\u5165\u529B\u30D5\u30A3\u30FC\u30EB\u30C9\u306E\u30A2\u30AF\u30C6\u30A3\u30D6 \u30AA\u30D7\u30B7\u30E7\u30F3\u306E\u5883\u754C\u7DDA\u306E\u8272\u3002","\u5165\u529B\u30D5\u30A3\u30FC\u30EB\u30C9\u3067\u30A2\u30AF\u30C6\u30A3\u30D6\u5316\u3055\u308C\u305F\u30AA\u30D7\u30B7\u30E7\u30F3\u306E\u80CC\u666F\u8272\u3002","\u5165\u529B\u30D5\u30A3\u30FC\u30EB\u30C9\u3067\u30A2\u30AF\u30C6\u30A3\u30D6\u5316\u3055\u308C\u305F\u30AA\u30D7\u30B7\u30E7\u30F3\u306E\u524D\u666F\u8272\u3002","\u60C5\u5831\u306E\u91CD\u5927\u5EA6\u3092\u793A\u3059\u5165\u529B\u691C\u8A3C\u306E\u80CC\u666F\u8272\u3002","\u60C5\u5831\u306E\u91CD\u5927\u5EA6\u3092\u793A\u3059\u5165\u529B\u691C\u8A3C\u306E\u524D\u666F\u8272\u3002","\u60C5\u5831\u306E\u91CD\u5927\u5EA6\u3092\u793A\u3059\u5165\u529B\u691C\u8A3C\u306E\u5883\u754C\u7DDA\u8272\u3002","\u8B66\u544A\u306E\u91CD\u5927\u5EA6\u3092\u793A\u3059\u5165\u529B\u691C\u8A3C\u306E\u80CC\u666F\u8272\u3002","\u8B66\u544A\u306E\u91CD\u5927\u5EA6\u3092\u793A\u3059\u5165\u529B\u691C\u8A3C\u306E\u524D\u666F\u8272\u3002","\u8B66\u544A\u306E\u91CD\u5927\u5EA6\u3092\u793A\u3059\u5165\u529B\u691C\u8A3C\u306E\u5883\u754C\u7DDA\u8272\u3002","\u30A8\u30E9\u30FC\u306E\u91CD\u5927\u5EA6\u3092\u793A\u3059\u5165\u529B\u691C\u8A3C\u306E\u80CC\u666F\u8272\u3002","\u30A8\u30E9\u30FC\u306E\u91CD\u5927\u5EA6\u3092\u793A\u3059\u5165\u529B\u691C\u8A3C\u306E\u524D\u666F\u8272\u3002","\u30A8\u30E9\u30FC\u306E\u91CD\u5927\u5EA6\u3092\u793A\u3059\u5165\u529B\u691C\u8A3C\u306E\u5883\u754C\u7DDA\u8272\u3002","\u30C9\u30ED\u30C3\u30D7\u30C0\u30A6\u30F3\u306E\u80CC\u666F\u3002","\u30C9\u30ED\u30C3\u30D7\u30C0\u30A6\u30F3\u306E\u524D\u666F\u3002","\u30DC\u30BF\u30F3\u306E\u524D\u666F\u8272\u3002","\u30DC\u30BF\u30F3\u306E\u80CC\u666F\u8272\u3002","\u30DB\u30D0\u30FC\u6642\u306E\u30DC\u30BF\u30F3\u80CC\u666F\u8272\u3002","\u30D0\u30C3\u30B8\u306E\u80CC\u666F\u8272\u3002\u30D0\u30C3\u30B8\u3068\u306F\u5C0F\u3055\u306A\u60C5\u5831\u30E9\u30D9\u30EB\u306E\u3053\u3068\u3067\u3059\u3002\u4F8B:\u691C\u7D22\u7D50\u679C\u306E\u6570","\u30D0\u30C3\u30B8\u306E\u524D\u666F\u8272\u3002\u30D0\u30C3\u30B8\u3068\u306F\u5C0F\u3055\u306A\u60C5\u5831\u30E9\u30D9\u30EB\u306E\u3053\u3068\u3067\u3059\u3002\u4F8B:\u691C\u7D22\u7D50\u679C\u306E\u6570","\u30D3\u30E5\u30FC\u304C\u30B9\u30AF\u30ED\u30FC\u30EB\u3055\u308C\u305F\u3053\u3068\u3092\u793A\u3059\u30B9\u30AF\u30ED\u30FC\u30EB \u30D0\u30FC\u306E\u5F71\u3002","\u30B9\u30AF\u30ED\u30FC\u30EB \u30D0\u30FC\u306E\u30B9\u30E9\u30A4\u30C0\u30FC\u306E\u80CC\u666F\u8272\u3002","\u30DB\u30D0\u30FC\u6642\u306E\u30B9\u30AF\u30ED\u30FC\u30EB \u30D0\u30FC \u30B9\u30E9\u30A4\u30C0\u30FC\u80CC\u666F\u8272\u3002","\u30AF\u30EA\u30C3\u30AF\u6642\u306E\u30B9\u30AF\u30ED\u30FC\u30EB \u30D0\u30FC \u30B9\u30E9\u30A4\u30C0\u30FC\u80CC\u666F\u8272\u3002","\u6642\u9593\u306E\u304B\u304B\u308B\u64CD\u4F5C\u3067\u8868\u793A\u3059\u308B\u30D7\u30ED\u30B0\u30EC\u30B9 \u30D0\u30FC\u306E\u80CC\u666F\u8272\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u5185\u306E\u30A8\u30E9\u30FC \u30C6\u30AD\u30B9\u30C8\u306E\u80CC\u666F\u8272\u3002\u3053\u306E\u8272\u306F\u3001\u57FA\u672C\u88C5\u98FE\u304C\u975E\u8868\u793A\u306B\u306A\u3089\u306A\u3044\u3088\u3046\u4E0D\u900F\u660E\u306B\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u30A8\u30E9\u30FC\u3092\u793A\u3059\u6CE2\u7DDA\u306E\u524D\u666F\u8272\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u5185\u306E\u30A8\u30E9\u30FC \u30DC\u30C3\u30AF\u30B9\u306E\u5883\u754C\u7DDA\u306E\u8272\u3067\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u5185\u306E\u8B66\u544A\u30C6\u30AD\u30B9\u30C8\u306E\u80CC\u666F\u8272\u3002\u3053\u306E\u8272\u306F\u3001\u57FA\u672C\u88C5\u98FE\u304C\u975E\u8868\u793A\u306B\u306A\u3089\u306A\u3044\u3088\u3046\u4E0D\u900F\u660E\u306B\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u8B66\u544A\u3092\u793A\u3059\u6CE2\u7DDA\u306E\u524D\u666F\u8272\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u306E\u8B66\u544A\u30DC\u30C3\u30AF\u30B9\u306E\u5883\u754C\u7DDA\u306E\u8272\u3067\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u5185\u306E\u60C5\u5831\u30C6\u30AD\u30B9\u30C8\u306E\u80CC\u666F\u8272\u3002\u3053\u306E\u8272\u306F\u3001\u57FA\u672C\u88C5\u98FE\u304C\u975E\u8868\u793A\u306B\u306A\u3089\u306A\u3044\u3088\u3046\u4E0D\u900F\u660E\u306B\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u60C5\u5831\u3092\u793A\u3059\u6CE2\u7DDA\u306E\u524D\u666F\u8272\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u5185\u306E\u60C5\u5831\u30DC\u30C3\u30AF\u30B9\u306E\u5883\u754C\u7DDA\u306E\u8272\u3067\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u30D2\u30F3\u30C8\u3092\u793A\u3059\u6CE2\u7DDA\u306E\u524D\u666F\u8272\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u5185\u306E\u30D2\u30F3\u30C8 \u30DC\u30C3\u30AF\u30B9\u306E\u5883\u754C\u7DDA\u306E\u8272\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u80CC\u666F\u8272\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u65E2\u5B9A\u306E\u524D\u666F\u8272\u3002","\u691C\u7D22/\u7F6E\u63DB\u7A93\u306A\u3069\u3001\u30A8\u30C7\u30A3\u30BF\u30FC \u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306E\u80CC\u666F\u8272\u3002","\u691C\u7D22/\u7F6E\u63DB\u306A\u3069\u3092\u884C\u3046\u30A8\u30C7\u30A3\u30BF\u30FC \u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306E\u524D\u666F\u8272\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC \u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306E\u5883\u754C\u7DDA\u8272\u3002\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u5883\u754C\u7DDA\u304C\u3042\u308A\u3001\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u3088\u3063\u3066\u914D\u8272\u3092\u4E0A\u66F8\u304D\u3055\u308C\u3066\u3044\u306A\u3044\u5834\u5408\u3067\u306E\u307F\u3053\u306E\u914D\u8272\u306F\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC \u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306E\u30B5\u30A4\u30BA\u5909\u66F4\u30D0\u30FC\u306E\u5883\u754C\u7DDA\u8272\u3002\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u30B5\u30A4\u30BA\u5909\u66F4\u306E\u5883\u754C\u7DDA\u304C\u3042\u308A\u3001\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u3088\u3063\u3066\u914D\u8272\u3092\u4E0A\u66F8\u304D\u3055\u308C\u3066\u3044\u306A\u3044\u5834\u5408\u3067\u306E\u307F\u3053\u306E\u914D\u8272\u306F\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002","\u30AF\u30A4\u30C3\u30AF \u30D4\u30C3\u30AB\u30FC\u306E\u80CC\u666F\u8272\u3002\u30AF\u30A4\u30C3\u30AF \u30D4\u30C3\u30AB\u30FC \u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306F\u3001\u30B3\u30DE\u30F3\u30C9 \u30D1\u30EC\u30C3\u30C8\u306E\u3088\u3046\u306A\u30D4\u30C3\u30AB\u30FC\u306E\u30B3\u30F3\u30C6\u30CA\u30FC\u3067\u3059\u3002","\u30AF\u30A4\u30C3\u30AF \u30D4\u30C3\u30AB\u30FC\u306E\u524D\u666F\u8272\u3002\u30AF\u30A4\u30C3\u30AF \u30D4\u30C3\u30AB\u30FC \u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306F\u3001\u30B3\u30DE\u30F3\u30C9 \u30D1\u30EC\u30C3\u30C8\u306E\u3088\u3046\u306A\u30D4\u30C3\u30AB\u30FC\u306E\u30B3\u30F3\u30C6\u30CA\u30FC\u3067\u3059\u3002","\u30AF\u30A4\u30C3\u30AF \u30D4\u30C3\u30AB\u30FC \u306E\u30BF\u30A4\u30C8\u30EB\u306E\u80CC\u666F\u8272\u3002\u30AF\u30A4\u30C3\u30AF \u30D4\u30C3\u30AB\u30FC \u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306F\u3001\u30B3\u30DE\u30F3\u30C9 \u30D1\u30EC\u30C3\u30C8\u306E\u3088\u3046\u306A\u30D4\u30C3\u30AB\u30FC\u306E\u30B3\u30F3\u30C6\u30CA\u30FC\u3067\u3059\u3002","\u30D5\u30A9\u30FC\u30AB\u30B9\u3055\u308C\u305F\u9805\u76EE\u306E\u30AF\u30A4\u30C3\u30AF\u9078\u629E\u306E\u80CC\u666F\u8272\u3002","\u30E9\u30D9\u30EB\u3092\u30B0\u30EB\u30FC\u30D7\u5316\u3059\u308B\u305F\u3081\u306E\u30AF\u30EA\u30C3\u30AF\u9078\u629E\u306E\u8272\u3002","\u5883\u754C\u7DDA\u3092\u30B0\u30EB\u30FC\u30D7\u5316\u3059\u308B\u305F\u3081\u306E\u30AF\u30A4\u30C3\u30AF\u9078\u629E\u306E\u8272\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u9078\u629E\u7BC4\u56F2\u306E\u8272\u3002","\u30CF\u30A4 \u30B3\u30F3\u30C8\u30E9\u30B9\u30C8\u306E\u9078\u629E\u6E08\u307F\u30C6\u30AD\u30B9\u30C8\u306E\u8272\u3002","\u975E\u30A2\u30AF\u30C6\u30A3\u30D6\u306A\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u9078\u629E\u7BC4\u56F2\u306E\u8272\u3002\u3053\u306E\u8272\u306F\u3001\u57FA\u672C\u88C5\u98FE\u304C\u975E\u8868\u793A\u306B\u306A\u3089\u306A\u3044\u3088\u3046\u4E0D\u900F\u660E\u306B\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002","\u9078\u629E\u7BC4\u56F2\u306E\u540C\u3058\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u9818\u57DF\u306E\u8272\u3002\u3053\u306E\u8272\u306F\u3001\u57FA\u672C\u88C5\u98FE\u304C\u975E\u8868\u793A\u306B\u306A\u3089\u306A\u3044\u3088\u3046\u4E0D\u900F\u660E\u306B\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002","\u9078\u629E\u7BC4\u56F2\u3068\u540C\u3058\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u5883\u754C\u7DDA\u306E\u8272\u3002","\u73FE\u5728\u306E\u691C\u7D22\u4E00\u81F4\u9805\u76EE\u306E\u8272\u3002","\u305D\u306E\u4ED6\u306E\u691C\u7D22\u6761\u4EF6\u306B\u4E00\u81F4\u3059\u308B\u9805\u76EE\u306E\u8272\u3002\u3053\u306E\u8272\u306F\u3001\u57FA\u672C\u88C5\u98FE\u304C\u975E\u8868\u793A\u306B\u306A\u3089\u306A\u3044\u3088\u3046\u4E0D\u900F\u660E\u306B\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002","\u691C\u7D22\u3092\u5236\u9650\u3059\u308B\u7BC4\u56F2\u306E\u8272\u3002\u3053\u306E\u8272\u306F\u3001\u57FA\u672C\u88C5\u98FE\u304C\u975E\u8868\u793A\u306B\u306A\u3089\u306A\u3044\u3088\u3046\u4E0D\u900F\u660E\u306B\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002","\u73FE\u5728\u306E\u691C\u7D22\u4E00\u81F4\u9805\u76EE\u306E\u5883\u754C\u7DDA\u306E\u8272\u3002","\u4ED6\u306E\u691C\u7D22\u4E00\u81F4\u9805\u76EE\u306E\u5883\u754C\u7DDA\u306E\u8272\u3002","\u691C\u7D22\u3092\u5236\u9650\u3059\u308B\u7BC4\u56F2\u306E\u5883\u754C\u7DDA\u8272\u3002\u3053\u306E\u8272\u306F\u3001\u57FA\u672C\u88C5\u98FE\u304C\u975E\u8868\u793A\u306B\u306A\u3089\u306A\u3044\u3088\u3046\u4E0D\u900F\u660E\u306B\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002","\u30DB\u30D0\u30FC\u304C\u8868\u793A\u3055\u308C\u3066\u3044\u308B\u8A9E\u306E\u4E0B\u3092\u5F37\u8ABF\u8868\u793A\u3057\u307E\u3059\u3002\u3053\u306E\u8272\u306F\u3001\u57FA\u672C\u88C5\u98FE\u304C\u975E\u8868\u793A\u306B\u306A\u3089\u306A\u3044\u3088\u3046\u4E0D\u900F\u660E\u306B\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC \u30DB\u30D0\u30FC\u306E\u80CC\u666F\u8272\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC \u30DB\u30D0\u30FC\u306E\u524D\u666F\u8272\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC \u30DB\u30D0\u30FC\u306E\u5883\u754C\u7DDA\u306E\u8272\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u30DB\u30D0\u30FC\u306E\u30B9\u30C6\u30FC\u30BF\u30B9 \u30D0\u30FC\u306E\u80CC\u666F\u8272\u3002","\u30A2\u30AF\u30C6\u30A3\u30D6\u306A\u30EA\u30F3\u30AF\u306E\u8272\u3002","\u30A4\u30F3\u30E9\u30A4\u30F3 \u30D2\u30F3\u30C8\u306E\u524D\u666F\u8272","\u30A4\u30F3\u30E9\u30A4\u30F3 \u30D2\u30F3\u30C8\u306E\u80CC\u666F\u8272","\u96FB\u7403\u30A2\u30AF\u30B7\u30E7\u30F3 \u30A2\u30A4\u30B3\u30F3\u306B\u4F7F\u7528\u3059\u308B\u8272\u3002","\u81EA\u52D5\u4FEE\u6B63\u306E\u96FB\u7403\u30A2\u30AF\u30B7\u30E7\u30F3 \u30A2\u30A4\u30B3\u30F3\u3068\u3057\u3066\u4F7F\u7528\u3055\u308C\u308B\u8272\u3002","\u633F\u5165\u3055\u308C\u305F\u30C6\u30AD\u30B9\u30C8\u306E\u80CC\u666F\u8272\u3002\u3053\u306E\u8272\u306F\u3001\u57FA\u672C\u88C5\u98FE\u304C\u975E\u8868\u793A\u306B\u306A\u3089\u306A\u3044\u3088\u3046\u4E0D\u900F\u660E\u306B\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002","\u524A\u9664\u3057\u305F\u30C6\u30AD\u30B9\u30C8\u306E\u80CC\u666F\u8272\u3002\u3053\u306E\u8272\u306F\u3001\u57FA\u672C\u88C5\u98FE\u304C\u975E\u8868\u793A\u306B\u306A\u3089\u306A\u3044\u3088\u3046\u4E0D\u900F\u660E\u306B\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002","\u633F\u5165\u3055\u308C\u305F\u30C6\u30AD\u30B9\u30C8\u306E\u8F2A\u90ED\u306E\u8272\u3002","\u524A\u9664\u3055\u308C\u305F\u30C6\u30AD\u30B9\u30C8\u306E\u8F2A\u90ED\u306E\u8272\u3002","2 \u3064\u306E\u30C6\u30AD\u30B9\u30C8 \u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u9593\u306E\u5883\u754C\u7DDA\u306E\u8272\u3002","\u5DEE\u5206\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u5BFE\u89D2\u7DDA\u306E\u5857\u308A\u3064\u3076\u3057\u8272\u3002\u5BFE\u89D2\u7DDA\u306E\u5857\u308A\u3064\u3076\u3057\u306F\u3001\u6A2A\u306B\u4E26\u3079\u3066\u6BD4\u8F03\u3059\u308B\u30D3\u30E5\u30FC\u3067\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002","\u30C4\u30EA\u30FC\u30EA\u30B9\u30C8\u304C\u30A2\u30AF\u30C6\u30A3\u30D6\u306E\u3068\u304D\u3001\u30D5\u30A9\u30FC\u30AB\u30B9\u3055\u308C\u305F\u9805\u76EE\u306E\u30C4\u30EA\u30FC\u30EA\u30B9\u30C8\u80CC\u666F\u8272\u3002\u30A2\u30AF\u30C6\u30A3\u30D6\u306A\u30C4\u30EA\u30FC\u30EA\u30B9\u30C8\u306F\u30AD\u30FC\u30DC\u30FC\u30C9 \u30D5\u30A9\u30FC\u30AB\u30B9\u304C\u3042\u308A\u3001\u975E\u30A2\u30AF\u30C6\u30A3\u30D6\u3067\u306F\u3053\u308C\u304C\u3042\u308A\u307E\u305B\u3093\u3002","\u30C4\u30EA\u30FC\u30EA\u30B9\u30C8\u304C\u30A2\u30AF\u30C6\u30A3\u30D6\u306E\u3068\u304D\u3001\u30D5\u30A9\u30FC\u30AB\u30B9\u3055\u308C\u305F\u9805\u76EE\u306E\u30C4\u30EA\u30FC\u30EA\u30B9\u30C8\u524D\u666F\u8272\u3002\u30A2\u30AF\u30C6\u30A3\u30D6\u306A\u30C4\u30EA\u30FC\u30EA\u30B9\u30C8\u306F\u30AD\u30FC\u30DC\u30FC\u30C9 \u30D5\u30A9\u30FC\u30AB\u30B9\u304C\u3042\u308A\u3001\u975E\u30A2\u30AF\u30C6\u30A3\u30D6\u3067\u306F\u3053\u308C\u304C\u3042\u308A\u307E\u305B\u3093\u3002","\u30EA\u30B9\u30C8\u3084\u30C4\u30EA\u30FC\u304C\u30A2\u30AF\u30C6\u30A3\u30D6\u306A\u5834\u5408\u306E\u3001\u30D5\u30A9\u30FC\u30AB\u30B9\u3055\u308C\u305F\u9805\u76EE\u306E\u30EA\u30B9\u30C8\u3084\u30C4\u30EA\u30FC\u306E\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u8272\u3002\u30A2\u30AF\u30C6\u30A3\u30D6\u306A\u30EA\u30B9\u30C8\u3084\u30C4\u30EA\u30FC\u306B\u306F\u30AD\u30FC\u30DC\u30FC\u30C9 \u30D5\u30A9\u30FC\u30AB\u30B9\u304C\u3042\u308A\u3001\u975E\u30A2\u30AF\u30C6\u30A3\u30D6\u306B\u306F\u3053\u308C\u304C\u3042\u308A\u307E\u305B\u3093\u3002","\u30C4\u30EA\u30FC\u30EA\u30B9\u30C8\u304C\u975E\u30A2\u30AF\u30C6\u30A3\u30D6\u306E\u3068\u304D\u3001\u9078\u629E\u3055\u308C\u305F\u9805\u76EE\u306E\u30C4\u30EA\u30FC\u30EA\u30B9\u30C8\u80CC\u666F\u8272\u3002\u30A2\u30AF\u30C6\u30A3\u30D6\u306A\u30C4\u30EA\u30FC\u30EA\u30B9\u30C8\u306F\u30AD\u30FC\u30DC\u30FC\u30C9 \u30D5\u30A9\u30FC\u30AB\u30B9\u304C\u3042\u308A\u3001\u975E\u30A2\u30AF\u30C6\u30A3\u30D6\u3067\u306F\u3053\u308C\u304C\u3042\u308A\u307E\u305B\u3093\u3002","\u30C4\u30EA\u30FC\u30EA\u30B9\u30C8\u304C\u30A2\u30AF\u30C6\u30A3\u30D6\u306E\u3068\u304D\u3001\u9078\u629E\u3055\u308C\u305F\u9805\u76EE\u306E\u30C4\u30EA\u30FC\u30EA\u30B9\u30C8\u524D\u666F\u8272\u3002\u30A2\u30AF\u30C6\u30A3\u30D6\u306A\u30C4\u30EA\u30FC\u30EA\u30B9\u30C8\u306F\u30AD\u30FC\u30DC\u30FC\u30C9 \u30D5\u30A9\u30FC\u30AB\u30B9\u304C\u3042\u308A\u3001\u975E\u30A2\u30AF\u30C6\u30A3\u30D6\u3067\u306F\u3053\u308C\u304C\u3042\u308A\u307E\u305B\u3093\u3002","\u30C4\u30EA\u30FC\u30EA\u30B9\u30C8\u304C\u975E\u30A2\u30AF\u30C6\u30A3\u30D6\u306E\u3068\u304D\u3001\u9078\u629E\u3055\u308C\u305F\u9805\u76EE\u306E\u30C4\u30EA\u30FC\u30EA\u30B9\u30C8\u80CC\u666F\u8272\u3002\u30A2\u30AF\u30C6\u30A3\u30D6\u306A\u30C4\u30EA\u30FC\u30EA\u30B9\u30C8\u306F\u30AD\u30FC\u30DC\u30FC\u30C9 \u30D5\u30A9\u30FC\u30AB\u30B9\u304C\u3042\u308A\u3001\u975E\u30A2\u30AF\u30C6\u30A3\u30D6\u3067\u306F\u3053\u308C\u304C\u3042\u308A\u307E\u305B\u3093\u3002","\u30C4\u30EA\u30FC\u30EA\u30B9\u30C8\u304C\u975E\u30A2\u30AF\u30C6\u30A3\u30D6\u306E\u3068\u304D\u3001\u9078\u629E\u3055\u308C\u305F\u9805\u76EE\u306E\u30C4\u30EA\u30FC\u30EA\u30B9\u30C8\u524D\u666F\u8272\u3002\u30A2\u30AF\u30C6\u30A3\u30D6\u306A\u30C4\u30EA\u30FC\u30EA\u30B9\u30C8\u306F\u30AD\u30FC\u30DC\u30FC\u30C9 \u30D5\u30A9\u30FC\u30AB\u30B9\u304C\u3042\u308A\u3001\u975E\u30A2\u30AF\u30C6\u30A3\u30D6\u3067\u306F\u3053\u308C\u304C\u3042\u308A\u307E\u305B\u3093\u3002","\u30C4\u30EA\u30FC\u30EA\u30B9\u30C8\u304C\u975E\u30A2\u30AF\u30C6\u30A3\u30D6\u306E\u3068\u304D\u3001\u30D5\u30A9\u30FC\u30AB\u30B9\u3055\u308C\u305F\u9805\u76EE\u306E\u30C4\u30EA\u30FC\u30EA\u30B9\u30C8\u80CC\u666F\u8272\u3002\u30A2\u30AF\u30C6\u30A3\u30D6\u306A\u30C4\u30EA\u30FC\u30EA\u30B9\u30C8\u306F\u30AD\u30FC\u30DC\u30FC\u30C9 \u30D5\u30A9\u30FC\u30AB\u30B9\u304C\u3042\u308A\u3001\u975E\u30A2\u30AF\u30C6\u30A3\u30D6\u3067\u306F\u3053\u308C\u304C\u3042\u308A\u307E\u305B\u3093\u3002","\u30EA\u30B9\u30C8\u3084\u30C4\u30EA\u30FC\u304C\u975E\u30A2\u30AF\u30C6\u30A3\u30D6\u306A\u5834\u5408\u306E\u3001\u30D5\u30A9\u30FC\u30AB\u30B9\u3055\u308C\u305F\u9805\u76EE\u306E\u30EA\u30B9\u30C8\u3084\u30C4\u30EA\u30FC\u306E\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u8272\u3002\u30A2\u30AF\u30C6\u30A3\u30D6\u306A\u30EA\u30B9\u30C8\u3084\u30C4\u30EA\u30FC\u306B\u306F\u30AD\u30FC\u30DC\u30FC\u30C9 \u30D5\u30A9\u30FC\u30AB\u30B9\u304C\u3042\u308A\u3001\u975E\u30A2\u30AF\u30C6\u30A3\u30D6\u306B\u306F\u3053\u308C\u304C\u3042\u308A\u307E\u305B\u3093\u3002","\u30DE\u30A6\u30B9\u64CD\u4F5C\u3067\u9805\u76EE\u3092\u30DB\u30D0\u30FC\u3059\u308B\u3068\u304D\u306E\u30C4\u30EA\u30FC\u30EA\u30B9\u30C8\u80CC\u666F\u3002","\u30DE\u30A6\u30B9\u64CD\u4F5C\u3067\u9805\u76EE\u3092\u30DB\u30D0\u30FC\u3059\u308B\u3068\u304D\u306E\u30C4\u30EA\u30FC\u30EA\u30B9\u30C8\u524D\u666F\u3002","\u30DE\u30A6\u30B9\u64CD\u4F5C\u3067\u9805\u76EE\u3092\u79FB\u52D5\u3059\u308B\u3068\u304D\u306E\u30C4\u30EA\u30FC\u30EA\u30B9\u30C8 \u30C9\u30E9\u30C3\u30B0 \u30A2\u30F3\u30C9 \u30C9\u30ED\u30C3\u30D7\u306E\u80CC\u666F\u3002","\u30C4\u30EA\u30FC\u30EA\u30B9\u30C8\u5185\u3092\u691C\u7D22\u3057\u3066\u3044\u308B\u3068\u304D\u3001\u4E00\u81F4\u3057\u305F\u5F37\u8ABF\u306E\u30C4\u30EA\u30FC\u30EA\u30B9\u30C8\u524D\u666F\u8272\u3002","\u30EA\u30B9\u30C8\u304A\u3088\u3073\u30C4\u30EA\u30FC\u306E\u578B\u30D5\u30A3\u30EB\u30BF\u30FC \u30A6\u30A7\u30B8\u30A7\u30C3\u30C8\u306E\u80CC\u666F\u8272\u3002","\u30EA\u30B9\u30C8\u304A\u3088\u3073\u30C4\u30EA\u30FC\u306E\u578B\u30D5\u30A3\u30EB\u30BF\u30FC \u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306E\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u8272\u3002","\u4E00\u81F4\u9805\u76EE\u304C\u306A\u3044\u5834\u5408\u306E\u3001\u30EA\u30B9\u30C8\u304A\u3088\u3073\u30C4\u30EA\u30FC\u306E\u578B\u30D5\u30A3\u30EB\u30BF\u30FC \u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306E\u30A2\u30A6\u30C8\u30E9\u30A4\u30F3\u8272\u3002","\u30A4\u30F3\u30C7\u30F3\u30C8 \u30AC\u30A4\u30C9\u306E\u30C4\u30EA\u30FC \u30B9\u30C8\u30ED\u30FC\u30AF\u306E\u8272\u3002","\u30A4\u30F3\u30C7\u30F3\u30C8 \u30AC\u30A4\u30C9\u306E\u30C4\u30EA\u30FC \u30B9\u30C8\u30ED\u30FC\u30AF\u306E\u8272\u3002","\u30E1\u30CB\u30E5\u30FC\u306E\u5883\u754C\u7DDA\u8272\u3002","\u30E1\u30CB\u30E5\u30FC\u9805\u76EE\u306E\u524D\u666F\u8272\u3002","\u30E1\u30CB\u30E5\u30FC\u9805\u76EE\u306E\u80CC\u666F\u8272\u3002","\u30E1\u30CB\u30E5\u30FC\u3067\u9078\u629E\u3055\u308C\u305F\u30E1\u30CB\u30E5\u30FC\u9805\u76EE\u306E\u524D\u666F\u8272\u3002","\u30E1\u30CB\u30E5\u30FC\u3067\u9078\u629E\u3055\u308C\u305F\u30E1\u30CB\u30E5\u30FC\u9805\u76EE\u306E\u80CC\u666F\u8272\u3002","\u30E1\u30CB\u30E5\u30FC\u3067\u9078\u629E\u3055\u308C\u305F\u30E1\u30CB\u30E5\u30FC\u9805\u76EE\u306E\u5883\u754C\u7DDA\u8272\u3002","\u30E1\u30CB\u30E5\u30FC\u5185\u306E\u30E1\u30CB\u30E5\u30FC\u9805\u76EE\u306E\u5883\u754C\u7DDA\u8272\u3002","\u30B9\u30CB\u30DA\u30C3\u30C8 tabstop \u306E\u80CC\u666F\u8272\u3092\u5F37\u8ABF\u8868\u793A\u3057\u307E\u3059\u3002","\u30B9\u30CB\u30DA\u30C3\u30C8 tabstop \u306E\u5883\u754C\u7DDA\u306E\u8272\u3092\u5F37\u8ABF\u8868\u793A\u3057\u307E\u3059\u3002","\u30B9\u30CB\u30DA\u30C3\u30C8\u306E\u6700\u5F8C\u306E tabstop \u306E\u80CC\u666F\u8272\u3092\u5F37\u8ABF\u8868\u793A\u3057\u307E\u3059\u3002","\u30B9\u30CB\u30DA\u30C3\u30C8\u306E\u6700\u5F8C\u306E\u30BF\u30D6\u30B9\u30C8\u30C3\u30D7\u3067\u5883\u754C\u7DDA\u306E\u8272\u3092\u5F37\u8ABF\u8868\u793A\u3057\u307E\u3059\u3002","\u691C\u51FA\u3055\u308C\u305F\u4E00\u81F4\u9805\u76EE\u306E\u6982\u8981\u30EB\u30FC\u30E9\u30FC \u30DE\u30FC\u30AB\u30FC\u306E\u8272\u3002\u3053\u306E\u8272\u306F\u3001\u57FA\u672C\u88C5\u98FE\u304C\u975E\u8868\u793A\u306B\u306A\u3089\u306A\u3044\u3088\u3046\u4E0D\u900F\u660E\u306B\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002","\u9078\u629E\u7BC4\u56F2\u3092\u5F37\u8ABF\u8868\u793A\u3059\u308B\u305F\u3081\u306E\u6982\u8981\u30EB\u30FC\u30E9\u30FC \u30DE\u30FC\u30AB\u30FC\u306E\u8272\u3002\u3053\u306E\u8272\u306F\u3001\u57FA\u672C\u88C5\u98FE\u304C\u975E\u8868\u793A\u306B\u306A\u3089\u306A\u3044\u3088\u3046\u4E0D\u900F\u660E\u306B\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002","\u4E00\u81F4\u3092\u691C\u7D22\u3059\u308B\u305F\u3081\u306E\u30DF\u30CB\u30DE\u30C3\u30D7 \u30DE\u30FC\u30AB\u30FC\u306E\u8272\u3002","\u30A8\u30C7\u30A3\u30BF\u30FC\u306E\u9078\u629E\u7BC4\u56F2\u306E\u30DF\u30CB\u30DE\u30C3\u30D7 \u30DE\u30FC\u30AB\u30FC\u306E\u8272\u3002","\u30A8\u30E9\u30FC\u306E\u30DF\u30CB\u30DE\u30C3\u30D7 \u30DE\u30FC\u30AB\u30FC\u306E\u8272\u3002","\u8B66\u544A\u306E\u30DF\u30CB\u30DE\u30C3\u30D7 \u30DE\u30FC\u30AB\u30FC\u306E\u8272\u3002","\u30DF\u30CB\u30DE\u30C3\u30D7\u306E\u80CC\u666F\u8272\u3002","\u30DF\u30CB\u30DE\u30C3\u30D7 \u30B9\u30E9\u30A4\u30C0\u30FC\u306E\u80CC\u666F\u8272\u3002","\u30DB\u30D0\u30FC\u30EA\u30F3\u30B0\u6642\u306E\u30DF\u30CB\u30DE\u30C3\u30D7 \u30B9\u30E9\u30A4\u30C0\u30FC\u306E\u80CC\u666F\u8272\u3002","\u30AF\u30EA\u30C3\u30AF\u3057\u305F\u3068\u304D\u306E\u30DF\u30CB\u30DE\u30C3\u30D7 \u30B9\u30E9\u30A4\u30C0\u30FC\u306E\u80CC\u666F\u8272\u3002","\u554F\u984C\u306E\u30A8\u30E9\u30FC \u30A2\u30A4\u30B3\u30F3\u306B\u4F7F\u7528\u3055\u308C\u308B\u8272\u3002","\u554F\u984C\u306E\u8B66\u544A\u30A2\u30A4\u30B3\u30F3\u306B\u4F7F\u7528\u3055\u308C\u308B\u8272\u3002","\u554F\u984C\u60C5\u5831\u30A2\u30A4\u30B3\u30F3\u306B\u4F7F\u7528\u3055\u308C\u308B\u8272\u3002"],"vs/platform/theme/common/iconRegistry":["\u4F7F\u7528\u3059\u308B\u30D5\u30A9\u30F3\u30C8\u306E ID\u3002\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u306A\u3044\u5834\u5408\u306F\u3001\u6700\u521D\u306B\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u308B\u30D5\u30A9\u30F3\u30C8\u304C\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002","\u30A2\u30A4\u30B3\u30F3\u5B9A\u7FA9\u306B\u95A2\u9023\u4ED8\u3051\u3089\u308C\u305F\u30D5\u30A9\u30F3\u30C8\u6587\u5B57\u3002","\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306B\u3042\u308B\u9589\u3058\u308B\u30A2\u30AF\u30B7\u30E7\u30F3\u306E\u30A2\u30A4\u30B3\u30F3\u3002"],"vs/platform/undoRedo/common/undoRedoService":["\u6B21\u306E\u30D5\u30A1\u30A4\u30EB\u304C\u9589\u3058\u3089\u308C\u3001\u30C7\u30A3\u30B9\u30AF\u4E0A\u3067\u5909\u66F4\u3055\u308C\u307E\u3057\u305F: {0}\u3002","\u4EE5\u4E0B\u306E\u30D5\u30A1\u30A4\u30EB\u306F\u4E92\u63DB\u6027\u306E\u306A\u3044\u65B9\u6CD5\u3067\u5909\u66F4\u3055\u308C\u307E\u3057\u305F: {0}\u3002","\u3059\u3079\u3066\u306E\u30D5\u30A1\u30A4\u30EB\u3067 '{0}' \u3092\u5143\u306B\u623B\u305B\u307E\u305B\u3093\u3067\u3057\u305F\u3002{1}","\u3059\u3079\u3066\u306E\u30D5\u30A1\u30A4\u30EB\u3067 '{0}' \u3092\u5143\u306B\u623B\u305B\u307E\u305B\u3093\u3067\u3057\u305F\u3002{1}","{1} \u306B\u5909\u66F4\u304C\u52A0\u3048\u3089\u308C\u305F\u305F\u3081\u3001\u3059\u3079\u3066\u306E\u30D5\u30A1\u30A4\u30EB\u3067 '{0}' \u3092\u5143\u306B\u623B\u305B\u307E\u305B\u3093\u3067\u3057\u305F","{1} \u3067\u5143\u306B\u623B\u3059\u307E\u305F\u306F\u3084\u308A\u76F4\u3057\u64CD\u4F5C\u304C\u65E2\u306B\u5B9F\u884C\u3055\u308C\u3066\u3044\u308B\u305F\u3081\u3001\u3059\u3079\u3066\u306E\u30D5\u30A1\u30A4\u30EB\u306B\u5BFE\u3057\u3066 '{0}' \u3092\u5143\u306B\u623B\u3059\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F","\u5143\u306B\u623B\u3059\u307E\u305F\u306F\u3084\u308A\u76F4\u3057\u64CD\u4F5C\u304C\u305D\u306E\u671F\u9593\u306B\u5B9F\u884C\u4E2D\u3067\u3042\u3063\u305F\u305F\u3081\u3001\u3059\u3079\u3066\u306E\u30D5\u30A1\u30A4\u30EB\u306B\u5BFE\u3057\u3066 '{0}' \u3092\u5143\u306B\u623B\u3059\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F","\u3059\u3079\u3066\u306E\u30D5\u30A1\u30A4\u30EB\u3067 '{0}' \u3092\u5143\u306B\u623B\u3057\u307E\u3059\u304B?","{0} \u500B\u306E\u30D5\u30A1\u30A4\u30EB\u3067\u5143\u306B\u623B\u3059","\u3053\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u5143\u306B\u623B\u3059","\u30AD\u30E3\u30F3\u30BB\u30EB","\u5143\u306B\u623B\u3059\u307E\u305F\u306F\u3084\u308A\u76F4\u3057\u64CD\u4F5C\u304C\u65E2\u306B\u5B9F\u884C\u3055\u308C\u3066\u3044\u308B\u305F\u3081\u3001'{0}' \u3092\u5143\u306B\u623B\u3059\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002","'{0}' \u3092\u5143\u306B\u623B\u3057\u307E\u3059\u304B?","\u5143\u306B\u623B\u3059","\u30AD\u30E3\u30F3\u30BB\u30EB","\u3059\u3079\u3066\u306E\u30D5\u30A1\u30A4\u30EB\u3067 '{0}' \u3092\u3084\u308A\u76F4\u3057\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002{1}","\u3059\u3079\u3066\u306E\u30D5\u30A1\u30A4\u30EB\u3067 '{0}' \u3092\u3084\u308A\u76F4\u3057\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002{1}","{1} \u306B\u5909\u66F4\u304C\u52A0\u3048\u3089\u308C\u305F\u305F\u3081\u3001\u3059\u3079\u3066\u306E\u30D5\u30A1\u30A4\u30EB\u3067 '{0}' \u3092\u518D\u5B9F\u884C\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F","{1} \u3067\u5143\u306B\u623B\u3059\u307E\u305F\u306F\u3084\u308A\u76F4\u3057\u64CD\u4F5C\u304C\u65E2\u306B\u5B9F\u884C\u3055\u308C\u3066\u3044\u308B\u305F\u3081\u3001\u3059\u3079\u3066\u306E\u30D5\u30A1\u30A4\u30EB\u306B\u5BFE\u3057\u3066 '{0}' \u3092\u3084\u308A\u76F4\u3059\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F","\u5143\u306B\u623B\u3059\u307E\u305F\u306F\u3084\u308A\u76F4\u3057\u64CD\u4F5C\u304C\u305D\u306E\u671F\u9593\u306B\u5B9F\u884C\u4E2D\u3067\u3042\u3063\u305F\u305F\u3081\u3001\u3059\u3079\u3066\u306E\u30D5\u30A1\u30A4\u30EB\u306B\u5BFE\u3057\u3066 '{0}' \u3092\u3084\u308A\u76F4\u3059\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F","\u5143\u306B\u623B\u3059\u307E\u305F\u306F\u3084\u308A\u76F4\u3057\u64CD\u4F5C\u304C\u65E2\u306B\u5B9F\u884C\u3055\u308C\u3066\u3044\u308B\u305F\u3081\u3001'{0}' \u3092\u3084\u308A\u76F4\u3059\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002"]}); diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/editor/editor.main.nls.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/editor/editor.main.nls.js new file mode 100644 index 0000000000..2286f815ae --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/editor/editor.main.nls.js @@ -0,0 +1 @@ +define("vs/editor/editor.main.nls",{"vs/base/browser/ui/actionbar/actionViewItems":["{0} ({1})"],"vs/base/browser/ui/findinput/findInput":["input"],"vs/base/browser/ui/findinput/findInputCheckboxes":["Match Case","Match Whole Word","Use Regular Expression"],"vs/base/browser/ui/findinput/replaceInput":["input","Preserve Case"],"vs/base/browser/ui/iconLabel/iconLabel":["Loading..."],"vs/base/browser/ui/inputbox/inputBox":["Error: {0}","Warning: {0}","Info: {0}"],"vs/base/browser/ui/keybindingLabel/keybindingLabel":["Unbound"],"vs/base/browser/ui/menu/menu":["{0} ({1})"],"vs/base/browser/ui/tree/abstractTree":["Clear","Disable Filter on Type","Enable Filter on Type","No elements found","Matched {0} out of {1} elements"],"vs/base/common/actions":["(empty)"],"vs/base/common/errorMessage":["{0}: {1}","A system error occurred ({0})","An unknown error occurred. Please consult the log for more details.","An unknown error occurred. Please consult the log for more details.","{0} ({1} errors in total)","An unknown error occurred. Please consult the log for more details."],"vs/base/common/keybindingLabels":["Ctrl","Shift","Alt","Windows","Ctrl","Shift","Alt","Super","Control","Shift","Alt","Command","Control","Shift","Alt","Windows","Control","Shift","Alt","Super"],"vs/base/parts/quickinput/browser/quickInput":["Back","{0}/{1}","Type to narrow down results.","{0} Results","{0} Selected","OK","Custom","Back ({0})","Back"],"vs/base/parts/quickinput/browser/quickInputList":["Quick Input"],"vs/editor/browser/controller/coreCommands":["Stick to the end even when going to longer lines","Stick to the end even when going to longer lines"],"vs/editor/browser/controller/textAreaHandler":["editor","The editor is not accessible at this time. Press {0} for options."],"vs/editor/browser/core/keybindingCancellation":["Whether the editor runs a cancellable operation, e.g. like 'Peek References'"],"vs/editor/browser/editorExtensions":["&&Undo","Undo","&&Redo","Redo","&&Select All","Select All"],"vs/editor/browser/widget/codeEditorWidget":["The number of cursors has been limited to {0}."],"vs/editor/browser/widget/diffEditorWidget":["Line decoration for inserts in the diff editor.","Line decoration for removals in the diff editor.","Cannot compare files because one file is too large."],"vs/editor/browser/widget/diffReview":["Icon for 'Insert' in diff review.","Icon for 'Remove' in diff review.","Icon for 'Close' in diff review.","Close","no lines changed","1 line changed","{0} lines changed","Difference {0} of {1}: original line {2}, {3}, modified line {4}, {5}","blank","{0} unchanged line {1}","{0} original line {1} modified line {2}","+ {0} modified line {1}","- {0} original line {1}","Go to Next Difference","Go to Previous Difference"],"vs/editor/browser/widget/inlineDiffMargin":["Copy deleted lines","Copy deleted line","Copy deleted line ({0})","Revert this change","Copy deleted line ({0})"],"vs/editor/common/config/commonEditorConfig":["Editor","The number of spaces a tab is equal to. This setting is overridden based on the file contents when `#editor.detectIndentation#` is on.","Insert spaces when pressing `Tab`. This setting is overridden based on the file contents when `#editor.detectIndentation#` is on.","Controls whether `#editor.tabSize#` and `#editor.insertSpaces#` will be automatically detected when a file is opened based on the file contents.","Remove trailing auto inserted whitespace.","Special handling for large files to disable certain memory intensive features.","Controls whether completions should be computed based on words in the document.","Only suggest words from the active document.","Suggest words from all open documents of the same language.","Suggest words from all open documents.","Controls from what documents word based completions are computed.","Semantic highlighting enabled for all color themes.","Semantic highlighting disabled for all color themes.","Semantic highlighting is configured by the current color theme's `semanticHighlighting` setting.","Controls whether the semanticHighlighting is shown for the languages that support it.","Keep peek editors open even when double clicking their content or when hitting `Escape`.","Lines above this length will not be tokenized for performance reasons","Timeout in milliseconds after which diff computation is cancelled. Use 0 for no timeout.","Controls whether the diff editor shows the diff side by side or inline.","When enabled, the diff editor ignores changes in leading or trailing whitespace.","Controls whether the diff editor shows +/- indicators for added/removed changes.","Controls whether the editor shows CodeLens.","Lines will never wrap.","Lines will wrap at the viewport width.","Lines will wrap according to the `#editor.wordWrap#` setting."],"vs/editor/common/config/editorOptions":["The editor will use platform APIs to detect when a Screen Reader is attached.","The editor will be permanently optimized for usage with a Screen Reader. Word wrapping will be disabled.","The editor will never be optimized for usage with a Screen Reader.","Controls whether the editor should run in a mode where it is optimized for screen readers. Setting to on will disable word wrapping.","Controls whether a space character is inserted when commenting.","Controls if empty lines should be ignored with toggle, add or remove actions for line comments.","Controls whether copying without a selection copies the current line.","Controls whether the cursor should jump to find matches while typing.","Controls whether the search string in the Find Widget is seeded from the editor selection.","Never turn on Find in selection automatically (default)","Always turn on Find in selection automatically","Turn on Find in selection automatically when multiple lines of content are selected.","Controls the condition for turning on find in selection automatically.","Controls whether the Find Widget should read or modify the shared find clipboard on macOS.","Controls whether the Find Widget should add extra lines on top of the editor. When true, you can scroll beyond the first line when the Find Widget is visible.","Controls whether the search automatically restarts from the beginning (or the end) when no further matches can be found.","Enables/Disables font ligatures ('calt' and 'liga' font features). Change this to a string for fine-grained control of the 'font-feature-settings' CSS property.","Explicit 'font-feature-settings' CSS property. A boolean can be passed instead if one only needs to turn on/off ligatures.","Configures font ligatures or font features. Can be either a boolean to enable/disable ligatures or a string for the value of the CSS 'font-feature-settings' property.","Controls the font size in pixels.",'Only "normal" and "bold" keywords or numbers between 1 and 1000 are allowed.','Controls the font weight. Accepts "normal" and "bold" keywords or numbers between 1 and 1000.',"Show peek view of the results (default)","Go to the primary result and show a peek view","Go to the primary result and enable peek-less navigation to others","This setting is deprecated, please use separate settings like 'editor.editor.gotoLocation.multipleDefinitions' or 'editor.editor.gotoLocation.multipleImplementations' instead.","Controls the behavior the 'Go to Definition'-command when multiple target locations exist.","Controls the behavior the 'Go to Type Definition'-command when multiple target locations exist.","Controls the behavior the 'Go to Declaration'-command when multiple target locations exist.","Controls the behavior the 'Go to Implementations'-command when multiple target locations exist.","Controls the behavior the 'Go to References'-command when multiple target locations exist.","Alternative command id that is being executed when the result of 'Go to Definition' is the current location.","Alternative command id that is being executed when the result of 'Go to Type Definition' is the current location.","Alternative command id that is being executed when the result of 'Go to Declaration' is the current location.","Alternative command id that is being executed when the result of 'Go to Implementation' is the current location.","Alternative command id that is being executed when the result of 'Go to Reference' is the current location.","Controls whether the hover is shown.","Controls the delay in milliseconds after which the hover is shown.","Controls whether the hover should remain visible when mouse is moved over it.","Enables the code action lightbulb in the editor.","Enables the inline hints in the editor.","Controls font size of inline hints in the editor. When set to `0`, the 90% of `#editor.fontSize#` is used.","Controls font family of inline hints in the editor.","Controls the line height. Use 0 to compute the line height from the font size.","Controls whether the minimap is shown.","The minimap has the same size as the editor contents (and might scroll).","The minimap will stretch or shrink as necessary to fill the height of the editor (no scrolling).","The minimap will shrink as necessary to never be larger than the editor (no scrolling).","Controls the size of the minimap.","Controls the side where to render the minimap.","Controls when the minimap slider is shown.","Scale of content drawn in the minimap: 1, 2 or 3.","Render the actual characters on a line as opposed to color blocks.","Limit the width of the minimap to render at most a certain number of columns.","Controls the amount of space between the top edge of the editor and the first line.","Controls the amount of space between the bottom edge of the editor and the last line.","Enables a pop-up that shows parameter documentation and type information as you type.","Controls whether the parameter hints menu cycles or closes when reaching the end of the list.","Enable quick suggestions inside strings.","Enable quick suggestions inside comments.","Enable quick suggestions outside of strings and comments.","Controls whether suggestions should automatically show up while typing.","Line numbers are not rendered.","Line numbers are rendered as absolute number.","Line numbers are rendered as distance in lines to cursor position.","Line numbers are rendered every 10 lines.","Controls the display of line numbers.","Number of monospace characters at which this editor ruler will render.","Color of this editor ruler.","Render vertical rulers after a certain number of monospace characters. Use multiple values for multiple rulers. No rulers are drawn if array is empty.","Insert suggestion without overwriting text right of the cursor.","Insert suggestion and overwrite text right of the cursor.","Controls whether words are overwritten when accepting completions. Note that this depends on extensions opting into this feature.","Controls whether filtering and sorting suggestions accounts for small typos.","Controls whether sorting favours words that appear close to the cursor.","Controls whether remembered suggestion selections are shared between multiple workspaces and windows (needs `#editor.suggestSelection#`).","Controls whether an active snippet prevents quick suggestions.","Controls whether to show or hide icons in suggestions.","Controls the visibility of the status bar at the bottom of the suggest widget.","Controls whether suggest details show inline with the label or only in the details widget","This setting is deprecated. The suggest widget can now be resized.","This setting is deprecated, please use separate settings like 'editor.suggest.showKeywords' or 'editor.suggest.showSnippets' instead.","When enabled IntelliSense shows `method`-suggestions.","When enabled IntelliSense shows `function`-suggestions.","When enabled IntelliSense shows `constructor`-suggestions.","When enabled IntelliSense shows `field`-suggestions.","When enabled IntelliSense shows `variable`-suggestions.","When enabled IntelliSense shows `class`-suggestions.","When enabled IntelliSense shows `struct`-suggestions.","When enabled IntelliSense shows `interface`-suggestions.","When enabled IntelliSense shows `module`-suggestions.","When enabled IntelliSense shows `property`-suggestions.","When enabled IntelliSense shows `event`-suggestions.","When enabled IntelliSense shows `operator`-suggestions.","When enabled IntelliSense shows `unit`-suggestions.","When enabled IntelliSense shows `value`-suggestions.","When enabled IntelliSense shows `constant`-suggestions.","When enabled IntelliSense shows `enum`-suggestions.","When enabled IntelliSense shows `enumMember`-suggestions.","When enabled IntelliSense shows `keyword`-suggestions.","When enabled IntelliSense shows `text`-suggestions.","When enabled IntelliSense shows `color`-suggestions.","When enabled IntelliSense shows `file`-suggestions.","When enabled IntelliSense shows `reference`-suggestions.","When enabled IntelliSense shows `customcolor`-suggestions.","When enabled IntelliSense shows `folder`-suggestions.","When enabled IntelliSense shows `typeParameter`-suggestions.","When enabled IntelliSense shows `snippet`-suggestions.","When enabled IntelliSense shows `user`-suggestions.","When enabled IntelliSense shows `issues`-suggestions.","Whether leading and trailing whitespace should always be selected.","Controls whether suggestions should be accepted on commit characters. For example, in JavaScript, the semi-colon (`;`) can be a commit character that accepts a suggestion and types that character.","Only accept a suggestion with `Enter` when it makes a textual change.","Controls whether suggestions should be accepted on `Enter`, in addition to `Tab`. Helps to avoid ambiguity between inserting new lines or accepting suggestions.","Controls the number of lines in the editor that can be read out by a screen reader. Warning: this has a performance implication for numbers larger than the default.","Editor content","Use language configurations to determine when to autoclose brackets.","Autoclose brackets only when the cursor is to the left of whitespace.","Controls whether the editor should automatically close brackets after the user adds an opening bracket.","Type over closing quotes or brackets only if they were automatically inserted.","Controls whether the editor should type over closing quotes or brackets.","Use language configurations to determine when to autoclose quotes.","Autoclose quotes only when the cursor is to the left of whitespace.","Controls whether the editor should automatically close quotes after the user adds an opening quote.","The editor will not insert indentation automatically.","The editor will keep the current line's indentation.","The editor will keep the current line's indentation and honor language defined brackets.","The editor will keep the current line's indentation, honor language defined brackets and invoke special onEnterRules defined by languages.","The editor will keep the current line's indentation, honor language defined brackets, invoke special onEnterRules defined by languages, and honor indentationRules defined by languages.","Controls whether the editor should automatically adjust the indentation when users type, paste, move or indent lines.","Use language configurations to determine when to automatically surround selections.","Surround with quotes but not brackets.","Surround with brackets but not quotes.","Controls whether the editor should automatically surround selections when typing quotes or brackets.","Emulate selection behaviour of tab characters when using spaces for indentation. Selection will stick to tab stops.","Controls whether the editor shows CodeLens.","Controls the font family for CodeLens.","Controls the font size in pixels for CodeLens. When set to `0`, the 90% of `#editor.fontSize#` is used.","Controls whether the editor should render the inline color decorators and color picker.","Enable that the selection with the mouse and keys is doing column selection.","Controls whether syntax highlighting should be copied into the clipboard.","Control the cursor animation style.","Controls whether the smooth caret animation should be enabled.","Controls the cursor style.","Controls the minimal number of visible leading and trailing lines surrounding the cursor. Known as 'scrollOff' or 'scrollOffset' in some other editors.","`cursorSurroundingLines` is enforced only when triggered via the keyboard or API.","`cursorSurroundingLines` is enforced always.","Controls when `cursorSurroundingLines` should be enforced.","Controls the width of the cursor when `#editor.cursorStyle#` is set to `line`.","Controls whether the editor should allow moving selections via drag and drop.","Scrolling speed multiplier when pressing `Alt`.","Controls whether the editor has code folding enabled.","Use a language-specific folding strategy if available, else the indentation-based one.","Use the indentation-based folding strategy.","Controls the strategy for computing folding ranges.","Controls whether the editor should highlight folded ranges.","Controls whether clicking on the empty content after a folded line will unfold the line.","Controls the font family.","Controls whether the editor should automatically format the pasted content. A formatter must be available and the formatter should be able to format a range in a document.","Controls whether the editor should automatically format the line after typing.","Controls whether the editor should render the vertical glyph margin. Glyph margin is mostly used for debugging.","Controls whether the cursor should be hidden in the overview ruler.","Controls whether the editor should highlight the active indent guide.","Controls the letter spacing in pixels.","Controls whether the editor has linked editing enabled. Depending on the language, related symbols, e.g. HTML tags, are updated while editing.","Controls whether the editor should detect links and make them clickable.","Highlight matching brackets.","A multiplier to be used on the `deltaX` and `deltaY` of mouse wheel scroll events.","Zoom the font of the editor when using mouse wheel and holding `Ctrl`.","Merge multiple cursors when they are overlapping.","Maps to `Control` on Windows and Linux and to `Command` on macOS.","Maps to `Alt` on Windows and Linux and to `Option` on macOS.","The modifier to be used to add multiple cursors with the mouse. The Go To Definition and Open Link mouse gestures will adapt such that they do not conflict with the multicursor modifier. [Read more](https://code.visualstudio.com/docs/editor/codebasics#_multicursor-modifier).","Each cursor pastes a single line of the text.","Each cursor pastes the full text.","Controls pasting when the line count of the pasted text matches the cursor count.","Controls whether the editor should highlight semantic symbol occurrences.","Controls whether a border should be drawn around the overview ruler.","Focus the tree when opening peek","Focus the editor when opening peek","Controls whether to focus the inline editor or the tree in the peek widget.","Controls whether the Go to Definition mouse gesture always opens the peek widget.","Controls the delay in milliseconds after which quick suggestions will show up.","Controls whether the editor auto renames on type.","Deprecated, use `editor.linkedEditing` instead.","Controls whether the editor should render control characters.","Controls whether the editor should render indent guides.","Render last line number when the file ends with a newline.","Highlights both the gutter and the current line.","Controls how the editor should render the current line highlight.","Controls if the editor should render the current line highlight only when the editor is focused","Render whitespace characters except for single spaces between words.","Render whitespace characters only on selected text.","Render only trailing whitespace characters","Controls how the editor should render whitespace characters.","Controls whether selections should have rounded corners.","Controls the number of extra characters beyond which the editor will scroll horizontally.","Controls whether the editor will scroll beyond the last line.","Scroll only along the predominant axis when scrolling both vertically and horizontally at the same time. Prevents horizontal drift when scrolling vertically on a trackpad.","Controls whether the Linux primary clipboard should be supported.","Controls whether the editor should highlight matches similar to the selection.","Always show the folding controls.","Only show the folding controls when the mouse is over the gutter.","Controls when the folding controls on the gutter are shown.","Controls fading out of unused code.","Controls strikethrough deprecated variables.","Show snippet suggestions on top of other suggestions.","Show snippet suggestions below other suggestions.","Show snippets suggestions with other suggestions.","Do not show snippet suggestions.","Controls whether snippets are shown with other suggestions and how they are sorted.","Controls whether the editor will scroll using an animation.","Font size for the suggest widget. When set to `0`, the value of `#editor.fontSize#` is used.","Line height for the suggest widget. When set to `0`, the value of `#editor.lineHeight#` is used. The minimum value is 8.","Controls whether suggestions should automatically show up when typing trigger characters.","Always select the first suggestion.","Select recent suggestions unless further typing selects one, e.g. `console.| -> console.log` because `log` has been completed recently.","Select suggestions based on previous prefixes that have completed those suggestions, e.g. `co -> console` and `con -> const`.","Controls how suggestions are pre-selected when showing the suggest list.","Tab complete will insert the best matching suggestion when pressing tab.","Disable tab completions.","Tab complete snippets when their prefix match. Works best when 'quickSuggestions' aren't enabled.","Enables tab completions.","Unusual line terminators are automatically removed.","Unusual line terminators are ignored.","Unusual line terminators prompt to be removed.","Remove unusual line terminators that might cause problems.","Inserting and deleting whitespace follows tab stops.","Characters that will be used as word separators when doing word related navigations or operations.","Lines will never wrap.","Lines will wrap at the viewport width.","Lines will wrap at `#editor.wordWrapColumn#`.","Lines will wrap at the minimum of viewport and `#editor.wordWrapColumn#`.","Controls how lines should wrap.","Controls the wrapping column of the editor when `#editor.wordWrap#` is `wordWrapColumn` or `bounded`.","No indentation. Wrapped lines begin at column 1.","Wrapped lines get the same indentation as the parent.","Wrapped lines get +1 indentation toward the parent.","Wrapped lines get +2 indentation toward the parent.","Controls the indentation of wrapped lines.","Assumes that all characters are of the same width. This is a fast algorithm that works correctly for monospace fonts and certain scripts (like Latin characters) where glyphs are of equal width.","Delegates wrapping points computation to the browser. This is a slow algorithm, that might cause freezes for large files, but it works correctly in all cases.","Controls the algorithm that computes wrapping points."],"vs/editor/common/editorContextKeys":["Whether the editor text has focus (cursor is blinking)","Whether the editor or an editor widget has focus (e.g. focus is in the find widget)","Whether an editor or a rich text input has focus (cursor is blinking)","Whether the editor is read only","Whether the context is a diff editor","Whether `editor.columnSelection` is enabled","Whether the editor has text selected","Whether the editor has multiple selections","Whether `Tab` will move focus out of the editor","Whether the editor hover is visible","Whether the editor is part of a larger editor (e.g. notebooks)","The language identifier of the editor","Whether the editor has a completion item provider","Whether the editor has a code actions provider","Whether the editor has a code lens provider","Whether the editor has a definition provider","Whether the editor has a declaration provider","Whether the editor has an implementation provider","Whether the editor has a type definition provider","Whether the editor has a hover provider","Whether the editor has a document highlight provider","Whether the editor has a document symbol provider","Whether the editor has a reference provider","Whether the editor has a rename provider","Whether the editor has a signature help provider","Whether the editor has an inline hints provider","Whether the editor has a document formatting provider","Whether the editor has a document selection formatting provider","Whether the editor has multiple document formatting providers","Whether the editor has multiple document selection formatting providers"],"vs/editor/common/model/editStack":["Typing"],"vs/editor/common/modes/modesRegistry":["Plain Text"],"vs/editor/common/standaloneStrings":["No selection","Line {0}, Column {1} ({2} selected)","Line {0}, Column {1}","{0} selections ({1} characters selected)","{0} selections","Now changing the setting `accessibilitySupport` to 'on'.","Now opening the Editor Accessibility documentation page."," in a read-only pane of a diff editor."," in a pane of a diff editor."," in a read-only code editor"," in a code editor","To configure the editor to be optimized for usage with a Screen Reader press Command+E now.","To configure the editor to be optimized for usage with a Screen Reader press Control+E now.","The editor is configured to be optimized for usage with a Screen Reader.","The editor is configured to never be optimized for usage with a Screen Reader, which is not the case at this time.","Pressing Tab in the current editor will move focus to the next focusable element. Toggle this behavior by pressing {0}.","Pressing Tab in the current editor will move focus to the next focusable element. The command {0} is currently not triggerable by a keybinding.","Pressing Tab in the current editor will insert the tab character. Toggle this behavior by pressing {0}.","Pressing Tab in the current editor will insert the tab character. The command {0} is currently not triggerable by a keybinding.","Press Command+H now to open a browser window with more information related to editor accessibility.","Press Control+H now to open a browser window with more information related to editor accessibility.","You can dismiss this tooltip and return to the editor by pressing Escape or Shift+Escape.","Show Accessibility Help","Developer: Inspect Tokens","Go to Line/Column...","Show all Quick Access Providers","Command Palette","Show And Run Commands","Go to Symbol...","Go to Symbol by Category...","Editor content","Press Alt+F1 for Accessibility Options.","Toggle High Contrast Theme","Made {0} edits in {1} files"],"vs/editor/common/view/editorColorRegistry":["Background color for the highlight of line at the cursor position.","Background color for the border around the line at the cursor position.","Background color of highlighted ranges, like by quick open and find features. The color must not be opaque so as not to hide underlying decorations.","Background color of the border around highlighted ranges.","Background color of highlighted symbol, like for go to definition or go next/previous symbol. The color must not be opaque so as not to hide underlying decorations.","Background color of the border around highlighted symbols.","Color of the editor cursor.","The background color of the editor cursor. Allows customizing the color of a character overlapped by a block cursor.","Color of whitespace characters in the editor.","Color of the editor indentation guides.","Color of the active editor indentation guides.","Color of editor line numbers.","Color of editor active line number","Id is deprecated. Use 'editorLineNumber.activeForeground' instead.","Color of editor active line number","Color of the editor rulers.","Foreground color of editor CodeLens","Background color behind matching brackets","Color for matching brackets boxes","Color of the overview ruler border.","Background color of the editor overview ruler. Only used when the minimap is enabled and placed on the right side of the editor.","Background color of the editor gutter. The gutter contains the glyph margins and the line numbers.","Border color of unnecessary (unused) source code in the editor.","Opacity of unnecessary (unused) source code in the editor. For example, \"#000000c0\" will render the code with 75% opacity. For high contrast themes, use the 'editorUnnecessaryCode.border' theme color to underline unnecessary code instead of fading it out.","Overview ruler marker color for range highlights. The color must not be opaque so as not to hide underlying decorations.","Overview ruler marker color for errors.","Overview ruler marker color for warnings.","Overview ruler marker color for infos."],"vs/editor/contrib/anchorSelect/anchorSelect":["Selection Anchor","Anchor set at {0}:{1}","Set Selection Anchor","Go to Selection Anchor","Select from Anchor to Cursor","Cancel Selection Anchor"],"vs/editor/contrib/bracketMatching/bracketMatching":["Overview ruler marker color for matching brackets.","Go to Bracket","Select to Bracket","Go to &&Bracket"],"vs/editor/contrib/caretOperations/caretOperations":["Move Selected Text Left","Move Selected Text Right"],"vs/editor/contrib/caretOperations/transpose":["Transpose Letters"],"vs/editor/contrib/clipboard/clipboard":["Cu&&t","Cut","Cut","&&Copy","Copy","Copy","&&Paste","Paste","Paste","Copy With Syntax Highlighting"],"vs/editor/contrib/codeAction/codeActionCommands":["Kind of the code action to run.","Controls when the returned actions are applied.","Always apply the first returned code action.","Apply the first returned code action if it is the only one.","Do not apply the returned code actions.","Controls if only preferred code actions should be returned.","An unknown error occurred while applying the code action","Quick Fix...","No code actions available","No preferred code actions for '{0}' available","No code actions for '{0}' available","No preferred code actions available","No code actions available","Refactor...","No preferred refactorings for '{0}' available","No refactorings for '{0}' available","No preferred refactorings available","No refactorings available","Source Action...","No preferred source actions for '{0}' available","No source actions for '{0}' available","No preferred source actions available","No source actions available","Organize Imports","No organize imports action available","Fix All","No fix all action available","Auto Fix...","No auto fixes available"],"vs/editor/contrib/codeAction/lightBulbWidget":["Show Fixes. Preferred Fix Available ({0})","Show Fixes ({0})","Show Fixes"],"vs/editor/contrib/codelens/codelensController":["Show CodeLens Commands For Current Line"],"vs/editor/contrib/comment/comment":["Toggle Line Comment","&&Toggle Line Comment","Add Line Comment","Remove Line Comment","Toggle Block Comment","Toggle &&Block Comment"],"vs/editor/contrib/contextmenu/contextmenu":["Show Editor Context Menu"],"vs/editor/contrib/cursorUndo/cursorUndo":["Cursor Undo","Cursor Redo"],"vs/editor/contrib/find/findController":["Find","&&Find","Find With Selection","Find Next","Find Next","Find Previous","Find Previous","Find Next Selection","Find Previous Selection","Replace","&&Replace"],"vs/editor/contrib/find/findWidget":["Icon for 'Find in Selection' in the editor find widget.","Icon to indicate that the editor find widget is collapsed.","Icon to indicate that the editor find widget is expanded.","Icon for 'Replace' in the editor find widget.","Icon for 'Replace All' in the editor find widget.","Icon for 'Find Previous' in the editor find widget.","Icon for 'Find Next' in the editor find widget.","Find","Find","Previous match","Next match","Find in selection","Close","Replace","Replace","Replace","Replace All","Toggle Replace mode","Only the first {0} results are highlighted, but all find operations work on the entire text.","{0} of {1}","No results","{0} found","{0} found for '{1}'","{0} found for '{1}', at {2}","{0} found for '{1}'","Ctrl+Enter now inserts line break instead of replacing all. You can modify the keybinding for editor.action.replaceAll to override this behavior."],"vs/editor/contrib/folding/folding":["Unfold","Unfold Recursively","Fold","Toggle Fold","Fold Recursively","Fold All Block Comments","Fold All Regions","Unfold All Regions","Fold All","Unfold All","Fold Level {0}","Background color behind folded ranges. The color must not be opaque so as not to hide underlying decorations.","Color of the folding control in the editor gutter."],"vs/editor/contrib/folding/foldingDecorations":["Icon for expanded ranges in the editor glyph margin.","Icon for collapsed ranges in the editor glyph margin."],"vs/editor/contrib/fontZoom/fontZoom":["Editor Font Zoom In","Editor Font Zoom Out","Editor Font Zoom Reset"],"vs/editor/contrib/format/format":["Made 1 formatting edit on line {0}","Made {0} formatting edits on line {1}","Made 1 formatting edit between lines {0} and {1}","Made {0} formatting edits between lines {1} and {2}"],"vs/editor/contrib/format/formatActions":["Format Document","Format Selection"],"vs/editor/contrib/gotoError/gotoError":["Go to Next Problem (Error, Warning, Info)","Icon for goto next marker.","Go to Previous Problem (Error, Warning, Info)","Icon for goto previous marker.","Go to Next Problem in Files (Error, Warning, Info)","Next &&Problem","Go to Previous Problem in Files (Error, Warning, Info)","Previous &&Problem"],"vs/editor/contrib/gotoError/gotoErrorWidget":["Error","Warning","Info","Hint","{0} at {1}. ","{0} of {1} problems","{0} of {1} problem","Editor marker navigation widget error color.","Editor marker navigation widget warning color.","Editor marker navigation widget info color.","Editor marker navigation widget background."],"vs/editor/contrib/gotoSymbol/goToCommands":["Peek","Definitions","No definition found for '{0}'","No definition found","Go to Definition","Go to &&Definition","Open Definition to the Side","Peek Definition","Declarations","No declaration found for '{0}'","No declaration found","Go to Declaration","Go to &&Declaration","No declaration found for '{0}'","No declaration found","Peek Declaration","Type Definitions","No type definition found for '{0}'","No type definition found","Go to Type Definition","Go to &&Type Definition","Peek Type Definition","Implementations","No implementation found for '{0}'","No implementation found","Go to Implementations","Go to &&Implementations","Peek Implementations","No references found for '{0}'","No references found","Go to References","Go to &&References","References","Peek References","References","Go To Any Symbol","Locations","No results for '{0}'","References"],"vs/editor/contrib/gotoSymbol/link/goToDefinitionAtPosition":["Click to show {0} definitions."],"vs/editor/contrib/gotoSymbol/peek/referencesController":["Loading...","{0} ({1})"],"vs/editor/contrib/gotoSymbol/peek/referencesTree":["{0} references","{0} reference","References"],"vs/editor/contrib/gotoSymbol/peek/referencesWidget":["no preview available","No results","References"],"vs/editor/contrib/gotoSymbol/referencesModel":["symbol in {0} on line {1} at column {2}","symbol in {0} on line {1} at column {2}, {3}","1 symbol in {0}, full path {1}","{0} symbols in {1}, full path {2}","No results found","Found 1 symbol in {0}","Found {0} symbols in {1}","Found {0} symbols in {1} files"],"vs/editor/contrib/gotoSymbol/symbolNavigation":["Symbol {0} of {1}, {2} for next","Symbol {0} of {1}"],"vs/editor/contrib/hover/hover":["Show Hover","Show Definition Preview Hover"],"vs/editor/contrib/hover/markdownHoverParticipant":["Loading..."],"vs/editor/contrib/hover/markerHoverParticipant":["View Problem","No quick fixes available","Checking for quick fixes...","No quick fixes available","Quick Fix..."],"vs/editor/contrib/inPlaceReplace/inPlaceReplace":["Replace with Previous Value","Replace with Next Value"],"vs/editor/contrib/indentation/indentation":["Convert Indentation to Spaces","Convert Indentation to Tabs","Configured Tab Size","Select Tab Size for Current File","Indent Using Tabs","Indent Using Spaces","Detect Indentation from Content","Reindent Lines","Reindent Selected Lines"],"vs/editor/contrib/linesOperations/linesOperations":["Copy Line Up","&&Copy Line Up","Copy Line Down","Co&&py Line Down","Duplicate Selection","&&Duplicate Selection","Move Line Up","Mo&&ve Line Up","Move Line Down","Move &&Line Down","Sort Lines Ascending","Sort Lines Descending","Trim Trailing Whitespace","Delete Line","Indent Line","Outdent Line","Insert Line Above","Insert Line Below","Delete All Left","Delete All Right","Join Lines","Transpose characters around the cursor","Transform to Uppercase","Transform to Lowercase","Transform to Title Case","Transform to Snake Case"],"vs/editor/contrib/linkedEditing/linkedEditing":["Start Linked Editing","Background color when the editor auto renames on type."],"vs/editor/contrib/links/links":["Execute command","Follow link","cmd + click","ctrl + click","option + click","alt + click","Execute command {0}","Failed to open this link because it is not well-formed: {0}","Failed to open this link because its target is missing.","Open Link"],"vs/editor/contrib/message/messageController":["Whether the editor is currently showing an inline message","Cannot edit in read-only editor"],"vs/editor/contrib/multicursor/multicursor":["Add Cursor Above","&&Add Cursor Above","Add Cursor Below","A&&dd Cursor Below","Add Cursors to Line Ends","Add C&&ursors to Line Ends","Add Cursors To Bottom","Add Cursors To Top","Add Selection To Next Find Match","Add &&Next Occurrence","Add Selection To Previous Find Match","Add P&&revious Occurrence","Move Last Selection To Next Find Match","Move Last Selection To Previous Find Match","Select All Occurrences of Find Match","Select All &&Occurrences","Change All Occurrences"],"vs/editor/contrib/parameterHints/parameterHints":["Trigger Parameter Hints"],"vs/editor/contrib/parameterHints/parameterHintsWidget":["Icon for show next parameter hint.","Icon for show previous parameter hint.","{0}, hint"],"vs/editor/contrib/peekView/peekView":["Close","Background color of the peek view title area.","Color of the peek view title.","Color of the peek view title info.","Color of the peek view borders and arrow.","Background color of the peek view result list.","Foreground color for line nodes in the peek view result list.","Foreground color for file nodes in the peek view result list.","Background color of the selected entry in the peek view result list.","Foreground color of the selected entry in the peek view result list.","Background color of the peek view editor.","Background color of the gutter in the peek view editor.","Match highlight color in the peek view result list.","Match highlight color in the peek view editor.","Match highlight border in the peek view editor."],"vs/editor/contrib/quickAccess/gotoLineQuickAccess":["Open a text editor first to go to a line.","Go to line {0} and column {1}.","Go to line {0}.","Current Line: {0}, Character: {1}. Type a line number between 1 and {2} to navigate to.","Current Line: {0}, Character: {1}. Type a line number to navigate to."],"vs/editor/contrib/quickAccess/gotoSymbolQuickAccess":["To go to a symbol, first open a text editor with symbol information.","The active text editor does not provide symbol information.","No matching editor symbols","No editor symbols","Open to the Side","Open to the Bottom","symbols ({0})","properties ({0})","methods ({0})","functions ({0})","constructors ({0})","variables ({0})","classes ({0})","structs ({0})","events ({0})","operators ({0})","interfaces ({0})","namespaces ({0})","packages ({0})","type parameters ({0})","modules ({0})","properties ({0})","enumerations ({0})","enumeration members ({0})","strings ({0})","files ({0})","arrays ({0})","numbers ({0})","booleans ({0})","objects ({0})","keys ({0})","fields ({0})","constants ({0})"],"vs/editor/contrib/rename/rename":["No result.","An unknown error occurred while resolving rename location","Renaming '{0}'","Renaming {0}","Successfully renamed '{0}' to '{1}'. Summary: {2}","Rename failed to apply edits","Rename failed to compute edits","Rename Symbol","Enable/disable the ability to preview changes before renaming"],"vs/editor/contrib/rename/renameInputField":["Rename input. Type new name and press Enter to commit.","{0} to Rename, {1} to Preview"],"vs/editor/contrib/smartSelect/smartSelect":["Expand Selection","&&Expand Selection","Shrink Selection","&&Shrink Selection"],"vs/editor/contrib/snippet/snippetVariables":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sun","Mon","Tue","Wed","Thu","Fri","Sat","January","February","March","April","May","June","July","August","September","October","November","December","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"vs/editor/contrib/suggest/suggestController":["Accepting '{0}' made {1} additional edits","Trigger Suggest","Insert","Insert","Replace","Replace","Insert","show less","show more","Reset Suggest Widget Size"],"vs/editor/contrib/suggest/suggestWidget":["Background color of the suggest widget.","Border color of the suggest widget.","Foreground color of the suggest widget.","Background color of the selected entry in the suggest widget.","Color of the match highlights in the suggest widget.","Loading...","No suggestions.","{0}, docs: {1}","Suggest"],"vs/editor/contrib/suggest/suggestWidgetDetails":["Close","Loading..."],"vs/editor/contrib/suggest/suggestWidgetRenderer":["Icon for more information in the suggest widget.","Read More"],"vs/editor/contrib/suggest/suggestWidgetStatus":["{0} ({1})"],"vs/editor/contrib/symbolIcons/symbolIcons":["The foreground color for array symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for boolean symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for class symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for color symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for constant symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for constructor symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for enumerator symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for enumerator member symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for event symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for field symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for file symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for folder symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for function symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for interface symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for key symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for keyword symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for method symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for module symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for namespace symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for null symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for number symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for object symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for operator symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for package symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for property symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for reference symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for snippet symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for string symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for struct symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for text symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for type parameter symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for unit symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for variable symbols. These symbols appear in the outline, breadcrumb, and suggest widget."],"vs/editor/contrib/toggleTabFocusMode/toggleTabFocusMode":["Toggle Tab Key Moves Focus","Pressing Tab will now move focus to the next focusable element","Pressing Tab will now insert the tab character"],"vs/editor/contrib/tokenization/tokenization":["Developer: Force Retokenize"],"vs/editor/contrib/unusualLineTerminators/unusualLineTerminators":["Unusual Line Terminators","Detected unusual line terminators","This file contains one or more unusual line terminator characters, like Line Separator (LS) or Paragraph Separator (PS).\n\nIt is recommended to remove them from the file. This can be configured via `editor.unusualLineTerminators`.","Fix this file","Ignore problem for this file"],"vs/editor/contrib/wordHighlighter/wordHighlighter":["Background color of a symbol during read-access, like reading a variable. The color must not be opaque so as not to hide underlying decorations.","Background color of a symbol during write-access, like writing to a variable. The color must not be opaque so as not to hide underlying decorations.","Border color of a symbol during read-access, like reading a variable.","Border color of a symbol during write-access, like writing to a variable.","Overview ruler marker color for symbol highlights. The color must not be opaque so as not to hide underlying decorations.","Overview ruler marker color for write-access symbol highlights. The color must not be opaque so as not to hide underlying decorations.","Go to Next Symbol Highlight","Go to Previous Symbol Highlight","Trigger Symbol Highlight"],"vs/editor/contrib/wordOperations/wordOperations":["Delete Word"],"vs/platform/actions/browser/menuEntryActionViewItem":["{0} ({1})"],"vs/platform/configuration/common/configurationRegistry":["Default Language Configuration Overrides","Configure editor settings to be overridden for a language.","This setting does not support per-language configuration.","Cannot register an empty property","Cannot register '{0}'. This matches property pattern '\\\\[.*\\\\]$' for describing language specific editor settings. Use 'configurationDefaults' contribution.","Cannot register '{0}'. This property is already registered."],"vs/platform/contextkey/browser/contextKeyService":["A command that returns information about context keys"],"vs/platform/contextkey/common/contextkeys":["Whether the operating system is Windows"],"vs/platform/keybinding/common/abstractKeybindingService":["({0}) was pressed. Waiting for second key of chord...","The key combination ({0}, {1}) is not a command."],"vs/platform/list/browser/listService":["Workbench","Maps to `Control` on Windows and Linux and to `Command` on macOS.","Maps to `Alt` on Windows and Linux and to `Option` on macOS.","The modifier to be used to add an item in trees and lists to a multi-selection with the mouse (for example in the explorer, open editors and scm view). The 'Open to Side' mouse gestures - if supported - will adapt such that they do not conflict with the multiselect modifier.","Controls how to open items in trees and lists using the mouse (if supported). Note that some trees and lists might choose to ignore this setting if it is not applicable.","Controls whether lists and trees support horizontal scrolling in the workbench. Warning: turning on this setting has a performance implication.","Controls tree indentation in pixels.","Controls whether the tree should render indent guides.","Controls whether lists and trees have smooth scrolling.","Simple keyboard navigation focuses elements which match the keyboard input. Matching is done only on prefixes.","Highlight keyboard navigation highlights elements which match the keyboard input. Further up and down navigation will traverse only the highlighted elements.","Filter keyboard navigation will filter out and hide all the elements which do not match the keyboard input.","Controls the keyboard navigation style for lists and trees in the workbench. Can be simple, highlight and filter.","Controls whether keyboard navigation in lists and trees is automatically triggered simply by typing. If set to `false`, keyboard navigation is only triggered when executing the `list.toggleKeyboardNavigation` command, for which you can assign a keyboard shortcut.","Controls how tree folders are expanded when clicking the folder names. Note that some trees and lists might choose to ignore this setting if it is not applicable."],"vs/platform/markers/common/markers":["Error","Warning","Info"],"vs/platform/quickinput/browser/commandsQuickAccess":["{0}, {1}","recently used","other commands","Command '{0}' resulted in an error ({1})"],"vs/platform/quickinput/browser/helpQuickAccess":["global commands","editor commands","{0}, {1}"],"vs/platform/theme/common/colorRegistry":["Overall foreground color. This color is only used if not overridden by a component.","Overall foreground color for error messages. This color is only used if not overridden by a component.","The default color for icons in the workbench.","Overall border color for focused elements. This color is only used if not overridden by a component.","An extra border around elements to separate them from others for greater contrast.","An extra border around active elements to separate them from others for greater contrast.","Foreground color for links in text.","Background color for code blocks in text.","Shadow color of widgets such as find/replace inside the editor.","Input box background.","Input box foreground.","Input box border.","Border color of activated options in input fields.","Background color of activated options in input fields.","Foreground color of activated options in input fields.","Input validation background color for information severity.","Input validation foreground color for information severity.","Input validation border color for information severity.","Input validation background color for warning severity.","Input validation foreground color for warning severity.","Input validation border color for warning severity.","Input validation background color for error severity.","Input validation foreground color for error severity.","Input validation border color for error severity.","Dropdown background.","Dropdown foreground.","Button foreground color.","Button background color.","Button background color when hovering.","Badge background color. Badges are small information labels, e.g. for search results count.","Badge foreground color. Badges are small information labels, e.g. for search results count.","Scrollbar shadow to indicate that the view is scrolled.","Scrollbar slider background color.","Scrollbar slider background color when hovering.","Scrollbar slider background color when clicked on.","Background color of the progress bar that can show for long running operations.","Background color of error text in the editor. The color must not be opaque so as not to hide underlying decorations.","Foreground color of error squigglies in the editor.","Border color of error boxes in the editor.","Background color of warning text in the editor. The color must not be opaque so as not to hide underlying decorations.","Foreground color of warning squigglies in the editor.","Border color of warning boxes in the editor.","Background color of info text in the editor. The color must not be opaque so as not to hide underlying decorations.","Foreground color of info squigglies in the editor.","Border color of info boxes in the editor.","Foreground color of hint squigglies in the editor.","Border color of hint boxes in the editor.","Editor background color.","Editor default foreground color.","Background color of editor widgets, such as find/replace.","Foreground color of editor widgets, such as find/replace.","Border color of editor widgets. The color is only used if the widget chooses to have a border and if the color is not overridden by a widget.","Border color of the resize bar of editor widgets. The color is only used if the widget chooses to have a resize border and if the color is not overridden by a widget.","Quick picker background color. The quick picker widget is the container for pickers like the command palette.","Quick picker foreground color. The quick picker widget is the container for pickers like the command palette.","Quick picker title background color. The quick picker widget is the container for pickers like the command palette.","Quick picker background color for the focused item.","Quick picker color for grouping labels.","Quick picker color for grouping borders.","Color of the editor selection.","Color of the selected text for high contrast.","Color of the selection in an inactive editor. The color must not be opaque so as not to hide underlying decorations.","Color for regions with the same content as the selection. The color must not be opaque so as not to hide underlying decorations.","Border color for regions with the same content as the selection.","Color of the current search match.","Color of the other search matches. The color must not be opaque so as not to hide underlying decorations.","Color of the range limiting the search. The color must not be opaque so as not to hide underlying decorations.","Border color of the current search match.","Border color of the other search matches.","Border color of the range limiting the search. The color must not be opaque so as not to hide underlying decorations.","Highlight below the word for which a hover is shown. The color must not be opaque so as not to hide underlying decorations.","Background color of the editor hover.","Foreground color of the editor hover.","Border color of the editor hover.","Background color of the editor hover status bar.","Color of active links.","Foreground color of inline hints","Background color of inline hints","The color used for the lightbulb actions icon.","The color used for the lightbulb auto fix actions icon.","Background color for text that got inserted. The color must not be opaque so as not to hide underlying decorations.","Background color for text that got removed. The color must not be opaque so as not to hide underlying decorations.","Outline color for the text that got inserted.","Outline color for text that got removed.","Border color between the two text editors.","Color of the diff editor's diagonal fill. The diagonal fill is used in side-by-side diff views.","List/Tree background color for the focused item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.","List/Tree foreground color for the focused item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.","List/Tree outline color for the focused item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.","List/Tree background color for the selected item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.","List/Tree foreground color for the selected item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.","List/Tree background color for the selected item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.","List/Tree foreground color for the selected item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.","List/Tree background color for the focused item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.","List/Tree outline color for the focused item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.","List/Tree background when hovering over items using the mouse.","List/Tree foreground when hovering over items using the mouse.","List/Tree drag and drop background when moving items around using the mouse.","List/Tree foreground color of the match highlights when searching inside the list/tree.","Background color of the type filter widget in lists and trees.","Outline color of the type filter widget in lists and trees.","Outline color of the type filter widget in lists and trees, when there are no matches.","Tree stroke color for the indentation guides.","Tree stroke color for the indentation guides.","Border color of menus.","Foreground color of menu items.","Background color of menu items.","Foreground color of the selected menu item in menus.","Background color of the selected menu item in menus.","Border color of the selected menu item in menus.","Color of a separator menu item in menus.","Highlight background color of a snippet tabstop.","Highlight border color of a snippet tabstop.","Highlight background color of the final tabstop of a snippet.","Highlight border color of the final tabstop of a snippet.","Overview ruler marker color for find matches. The color must not be opaque so as not to hide underlying decorations.","Overview ruler marker color for selection highlights. The color must not be opaque so as not to hide underlying decorations.","Minimap marker color for find matches.","Minimap marker color for the editor selection.","Minimap marker color for errors.","Minimap marker color for warnings.","Minimap background color.","Minimap slider background color.","Minimap slider background color when hovering.","Minimap slider background color when clicked on.","The color used for the problems error icon.","The color used for the problems warning icon.","The color used for the problems info icon."],"vs/platform/theme/common/iconRegistry":["The id of the font to use. If not set, the font that is defined first is used.","The font character associated with the icon definition.","Icon for the close action in widgets."],"vs/platform/undoRedo/common/undoRedoService":["The following files have been closed and modified on disk: {0}.","The following files have been modified in an incompatible way: {0}.","Could not undo '{0}' across all files. {1}","Could not undo '{0}' across all files. {1}","Could not undo '{0}' across all files because changes were made to {1}","Could not undo '{0}' across all files because there is already an undo or redo operation running on {1}","Could not undo '{0}' across all files because an undo or redo operation occurred in the meantime","Would you like to undo '{0}' across all files?","Undo in {0} Files","Undo this File","Cancel","Could not undo '{0}' because there is already an undo or redo operation running.","Would you like to undo '{0}'?","Undo","Cancel","Could not redo '{0}' across all files. {1}","Could not redo '{0}' across all files. {1}","Could not redo '{0}' across all files because changes were made to {1}","Could not redo '{0}' across all files because there is already an undo or redo operation running on {1}","Could not redo '{0}' across all files because an undo or redo operation occurred in the meantime","Could not redo '{0}' because there is already an undo or redo operation running."]}); \ No newline at end of file diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/editor/editor.main.nls.ko.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/editor/editor.main.nls.ko.js new file mode 100644 index 0000000000..557cb4d36a --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/editor/editor.main.nls.ko.js @@ -0,0 +1,6 @@ +/*!----------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Version: 0.23.0(82e8ea39fc101d639262435542c7d43bc20d8aa2) + * Released under the MIT license + * https://github.com/microsoft/vscode/blob/main/LICENSE.txt + *-----------------------------------------------------------*/define("vs/editor/editor.main.nls.ko",{"vs/base/browser/ui/actionbar/actionViewItems":["{0}({1})"],"vs/base/browser/ui/findinput/findInput":["\uC785\uB825"],"vs/base/browser/ui/findinput/findInputCheckboxes":["\uB300/\uC18C\uBB38\uC790 \uAD6C\uBD84","\uB2E8\uC5B4 \uB2E8\uC704\uB85C","\uC815\uADDC\uC2DD \uC0AC\uC6A9"],"vs/base/browser/ui/findinput/replaceInput":["\uC785\uB825","\uB300/\uC18C\uBB38\uC790 \uBCF4\uC874"],"vs/base/browser/ui/iconLabel/iconLabel":["\uB85C\uB4DC \uC911..."],"vs/base/browser/ui/inputbox/inputBox":["\uC624\uB958: {0}","\uACBD\uACE0: {0}","\uC815\uBCF4: {0}"],"vs/base/browser/ui/keybindingLabel/keybindingLabel":["\uBC14\uC778\uB529 \uC548 \uB428"],"vs/base/browser/ui/menu/menu":["{0}({1})"],"vs/base/browser/ui/tree/abstractTree":["\uC9C0\uC6B0\uAE30","\uD615\uC2DD\uC744 \uAE30\uC900\uC73C\uB85C \uD544\uD130\uB9C1 \uC0AC\uC6A9 \uC548 \uD568","\uD615\uC2DD\uC744 \uAE30\uC900\uC73C\uB85C \uD544\uD130\uB9C1 \uC0AC\uC6A9","\uCC3E\uC740 \uC694\uC18C \uC5C6\uC74C","{1}\uAC1C \uC694\uC18C \uC911 {0}\uAC1C \uC77C\uCE58"],"vs/base/common/actions":["(\uBE44\uC5B4 \uC788\uC74C)"],"vs/base/common/errorMessage":["{0}: {1}","\uC2DC\uC2A4\uD15C \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4({0}).","\uC54C \uC218 \uC5C6\uB294 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4. \uC790\uC138\uD55C \uB0B4\uC6A9\uC740 \uB85C\uADF8\uB97C \uCC38\uC870\uD558\uC138\uC694.","\uC54C \uC218 \uC5C6\uB294 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4. \uC790\uC138\uD55C \uB0B4\uC6A9\uC740 \uB85C\uADF8\uB97C \uCC38\uC870\uD558\uC138\uC694.","{0}(\uCD1D {1}\uAC1C\uC758 \uC624\uB958)","\uC54C \uC218 \uC5C6\uB294 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4. \uC790\uC138\uD55C \uB0B4\uC6A9\uC740 \uB85C\uADF8\uB97C \uCC38\uC870\uD558\uC138\uC694."],"vs/base/common/keybindingLabels":["Ctrl","","","Windows","Ctrl","","","\uC288\uD37C","\uC81C\uC5B4","","","\uBA85\uB839","\uC81C\uC5B4","","","Windows","\uC81C\uC5B4","","","\uC288\uD37C"],"vs/base/parts/quickinput/browser/quickInput":["\uB4A4\uB85C","{0} / {1}","\uACB0\uACFC\uC758 \uBC94\uC704\uB97C \uCD95\uC18C\uD558\uB824\uBA74 \uC785\uB825\uD558\uC138\uC694.","{0}\uAC1C \uACB0\uACFC","{0} \uC120\uD0DD\uB428","\uD655\uC778","\uC0AC\uC6A9\uC790 \uC9C0\uC815","\uB4A4\uB85C({0})","\uB4A4\uB85C"],"vs/base/parts/quickinput/browser/quickInputList":["\uBE60\uB978 \uC785\uB825"],"vs/editor/browser/controller/coreCommands":["\uB354 \uAE34 \uC904\uB85C \uC774\uB3D9\uD558\uB294 \uACBD\uC6B0\uC5D0\uB3C4 \uB05D\uC5D0 \uACE0\uC815","\uB354 \uAE34 \uC904\uB85C \uC774\uB3D9\uD558\uB294 \uACBD\uC6B0\uC5D0\uB3C4 \uB05D\uC5D0 \uACE0\uC815"],"vs/editor/browser/controller/textAreaHandler":["\uD3B8\uC9D1\uAE30","\uD604\uC7AC \uD3B8\uC9D1\uAE30\uC5D0 \uC561\uC138\uC2A4\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC635\uC158\uC744 \uBCF4\uB824\uBA74 {0}\uC744(\uB97C) \uB204\uB985\uB2C8\uB2E4."],"vs/editor/browser/core/keybindingCancellation":["\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uCDE8\uC18C \uAC00\uB2A5\uD55C \uC791\uC5C5(\uC608: '\uCC38\uC870 \uD53C\uD0B9')\uC744 \uC2E4\uD589\uD558\uB294\uC9C0 \uC5EC\uBD80"],"vs/editor/browser/editorExtensions":["\uC2E4\uD589 \uCDE8\uC18C(&&U)","\uC2E4\uD589 \uCDE8\uC18C","\uB2E4\uC2DC \uC2E4\uD589(&&R)","\uB2E4\uC2DC \uC2E4\uD589","\uBAA8\uB450 \uC120\uD0DD(&&S)","\uBAA8\uB450 \uC120\uD0DD"],"vs/editor/browser/widget/codeEditorWidget":["\uCEE4\uC11C \uC218\uB294 {0}(\uC73C)\uB85C \uC81C\uD55C\uB418\uC5C8\uC2B5\uB2C8\uB2E4."],"vs/editor/browser/widget/diffEditorWidget":["diff \uD3B8\uC9D1\uAE30\uC758 \uC0BD\uC785\uC5D0 \uB300\uD55C \uC904 \uB370\uCF54\uB808\uC774\uC158\uC785\uB2C8\uB2E4.","diff \uD3B8\uC9D1\uAE30\uC758 \uC81C\uAC70\uC5D0 \uB300\uD55C \uC904 \uB370\uCF54\uB808\uC774\uC158\uC785\uB2C8\uB2E4.","\uD30C\uC77C 1\uAC1C\uAC00 \uB108\uBB34 \uCEE4\uC11C \uD30C\uC77C\uC744 \uBE44\uAD50\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."],"vs/editor/browser/widget/diffReview":["Diff \uAC80\uD1A0\uC5D0\uC11C '\uC0BD\uC785'\uC758 \uC544\uC774\uCF58\uC785\uB2C8\uB2E4.","Diff \uAC80\uD1A0\uC5D0\uC11C '\uC81C\uAC70'\uC758 \uC544\uC774\uCF58\uC785\uB2C8\uB2E4.","Diff \uAC80\uD1A0\uC5D0\uC11C '\uB2EB\uAE30'\uC758 \uC544\uC774\uCF58\uC785\uB2C8\uB2E4.","\uB2EB\uAE30","\uBCC0\uACBD\uB41C \uC904 \uC5C6\uC74C","\uC120 1\uAC1C \uBCC0\uACBD\uB428","\uC904 {0}\uAC1C \uBCC0\uACBD\uB428","\uCC28\uC774 {0}/{1}: \uC6D0\uB798 \uC904 {2}, {3}, \uC218\uC815\uB41C \uC904 {4}, {5}","\uBE44\uC5B4 \uC788\uC74C","{0} \uBCC0\uACBD\uB418\uC9C0 \uC54A\uC740 \uC904 {1}","{0} \uC6D0\uB798 \uC904 {1} \uC218\uC815\uB41C \uC904 {2}","+ {0} \uC218\uC815\uB41C \uC904 {1}","- {0} \uC6D0\uB798 \uC904 {1}","\uB2E4\uC74C \uB2E4\uB978 \uD56D\uBAA9\uC73C\uB85C \uC774\uB3D9","\uB2E4\uC74C \uB2E4\uB978 \uD56D\uBAA9\uC73C\uB85C \uC774\uB3D9"],"vs/editor/browser/widget/inlineDiffMargin":["\uC0AD\uC81C\uB41C \uC904 \uBCF5\uC0AC","\uC0AD\uC81C\uB41C \uC904 \uBCF5\uC0AC","\uC0AD\uC81C\uB41C \uC904 \uBCF5\uC0AC({0})","\uC774 \uBCC0\uACBD \uB0B4\uC6A9 \uB418\uB3CC\uB9AC\uAE30","\uC0AD\uC81C\uB41C \uC904 \uBCF5\uC0AC({0})"],"vs/editor/common/config/commonEditorConfig":["\uD3B8\uC9D1\uAE30","\uD0ED \uD55C \uAC1C\uC5D0 \uD574\uB2F9\uD558\uB294 \uACF5\uBC31 \uC218\uC785\uB2C8\uB2E4. `#editor.detectIndentation#`\uC774 \uCF1C\uC838 \uC788\uB294 \uACBD\uC6B0 \uC774 \uC124\uC815\uC740 \uD30C\uC77C \uCF58\uD150\uCE20\uC5D0 \uB530\uB77C \uC7AC\uC815\uC758\uB429\uB2C8\uB2E4.","'\uD0ED' \uD0A4\uB97C \uB204\uB97C \uB54C \uACF5\uBC31\uC744 \uC0BD\uC785\uD569\uB2C8\uB2E4. `#editor.detectIndentation#`\uC774 \uCF1C\uC838 \uC788\uB294 \uACBD\uC6B0 \uC774 \uC124\uC815\uC740 \uD30C\uC77C \uCF58\uD150\uCE20\uC5D0 \uB530\uB77C \uC7AC\uC815\uC758\uB429\uB2C8\uB2E4.","\uD30C\uC77C\uC744 \uC5F4 \uB54C \uD30C\uC77C \uCF58\uD150\uCE20\uB97C \uAE30\uBC18\uC73C\uB85C `#editor.tabSize#`\uC640 `#editor.insertSpaces#`\uAC00 \uC790\uB3D9\uC73C\uB85C \uAC80\uC0C9\uB418\uB294\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uB05D\uC5D0 \uC790\uB3D9 \uC0BD\uC785\uB41C \uACF5\uBC31\uC744 \uC81C\uAC70\uD569\uB2C8\uB2E4.","\uD070 \uD30C\uC77C\uC5D0 \uB300\uD55C \uD2B9\uC218 \uCC98\uB9AC\uB85C, \uBA54\uBAA8\uB9AC\uB97C \uB9CE\uC774 \uC0AC\uC6A9\uD558\uB294 \uD2B9\uC815 \uAE30\uB2A5\uC744 \uC0AC\uC6A9\uD558\uC9C0 \uC54A\uB3C4\uB85D \uC124\uC815\uD569\uB2C8\uB2E4.","\uBB38\uC11C \uB0B4 \uB2E8\uC5B4\uB97C \uAE30\uBC18\uC73C\uB85C \uC644\uC131\uC744 \uACC4\uC0B0\uD560\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uD65C\uC131 \uBB38\uC11C\uC5D0\uC11C\uB9CC \uB2E8\uC5B4\uB97C \uC81C\uC548\uD569\uB2C8\uB2E4.","\uAC19\uC740 \uC5B8\uC5B4\uC758 \uBAA8\uB4E0 \uC5F4\uB9B0 \uBB38\uC11C\uC5D0\uC11C \uB2E8\uC5B4\uB97C \uC81C\uC548\uD569\uB2C8\uB2E4.","\uBAA8\uB4E0 \uC5F4\uB9B0 \uBB38\uC11C\uC5D0\uC11C \uB2E8\uC5B4\uB97C \uC81C\uC548\uD569\uB2C8\uB2E4.","\uB2E8\uC5B4 \uAE30\uBC18 \uC644\uC131\uC774 \uCEF4\uD4E8\uD305\uB418\uB294 \uBB38\uC11C\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uBAA8\uB4E0 \uC0C9 \uD14C\uB9C8\uC5D0 \uB300\uD574 \uC758\uBBF8 \uCCB4\uACC4 \uAC15\uC870 \uD45C\uC2DC\uB97C \uC0AC\uC6A9\uD569\uB2C8\uB2E4.","\uBAA8\uB4E0 \uC0C9 \uD14C\uB9C8\uC5D0 \uB300\uD574 \uC758\uBBF8 \uCCB4\uACC4 \uAC15\uC870 \uD45C\uC2DC\uB97C \uC0AC\uC6A9\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.","\uC758\uBBF8 \uCCB4\uACC4 \uAC15\uC870 \uD45C\uC2DC\uB294 \uD604\uC7AC \uC0C9 \uD14C\uB9C8\uC758 `semanticHighlighting` \uC124\uC815\uC5D0 \uB530\uB77C \uAD6C\uC131\uB429\uB2C8\uB2E4.","semanticHighlighting\uC774 \uC9C0\uC6D0\uD558\uB294 \uC5B8\uC5B4\uC5D0 \uB300\uD574 \uD45C\uC2DC\uB418\uB294\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uD574\uB2F9 \uCF58\uD150\uCE20\uB97C \uB450 \uBC88 \uD074\uB9AD\uD558\uAC70\uB098 'Esc' \uD0A4\uB97C \uB204\uB974\uB354\uB77C\uB3C4 Peek \uD3B8\uC9D1\uAE30\uB97C \uC5F4\uB9B0 \uC0C1\uD0DC\uB85C \uC720\uC9C0\uD569\uB2C8\uB2E4.","\uC774 \uAE38\uC774\uB97C \uCD08\uACFC\uD558\uB294 \uC904\uC740 \uC131\uB2A5\uC0C1\uC758 \uC774\uC720\uB85C \uD1A0\uD070\uD654\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.","diff \uACC4\uC0B0\uC774 \uCDE8\uC18C\uB41C \uD6C4 \uBC00\uB9AC\uCD08 \uB2E8\uC704\uB85C \uC2DC\uAC04\uC744 \uC81C\uD55C\uD569\uB2C8\uB2E4. \uC81C\uD55C \uC2DC\uAC04\uC774 \uC5C6\uB294 \uACBD\uC6B0 0\uC744 \uC0AC\uC6A9\uD569\uB2C8\uB2E4.","diff \uD3B8\uC9D1\uAE30\uC5D0\uC11C diff\uB97C \uB098\uB780\uD788 \uD45C\uC2DC\uD560\uC9C0 \uC778\uB77C\uC778\uC73C\uB85C \uD45C\uC2DC\uD560\uC9C0\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uD558\uBA74 Diff \uD3B8\uC9D1\uAE30\uAC00 \uC120\uD589 \uB610\uB294 \uD6C4\uD589 \uACF5\uBC31\uC758 \uBCC0\uACBD \uB0B4\uC6A9\uC744 \uBB34\uC2DC\uD569\uB2C8\uB2E4.","diff \uD3B8\uC9D1\uAE30\uC5D0\uC11C \uCD94\uAC00/\uC81C\uAC70\uB41C \uBCC0\uACBD \uB0B4\uC6A9\uC5D0 \uB300\uD574 +/- \uD45C\uC2DC\uAE30\uB97C \uD45C\uC2DC\uD558\uB294\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC5D0\uC11C CodeLens\uB97C \uD45C\uC2DC\uD560 \uAC83\uC778\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC904\uC774 \uBC14\uB00C\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.","\uBDF0\uD3EC\uD2B8 \uB108\uBE44\uC5D0\uC11C \uC904\uC774 \uBC14\uB01D\uB2C8\uB2E4.","`#editor.wordWrap#` \uC124\uC815\uC5D0 \uB530\uB77C \uC904\uC774 \uBC14\uB01D\uB2C8\uB2E4."],"vs/editor/common/config/editorOptions":["\uD3B8\uC9D1\uAE30\uAC00 \uC2A4\uD06C\uB9B0 \uB9AC\uB354\uAC00 \uC5F0\uACB0\uB418\uBA74 \uD50C\uB7AB\uD3FC API\uB97C \uC0AC\uC6A9\uD558\uC5EC \uAC10\uC9C0\uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uAC00 \uD654\uBA74 \uC77D\uAE30 \uD504\uB85C\uADF8\uB7A8\uACFC \uD568\uAED8 \uC0AC\uC6A9\uB418\uB3C4\uB85D \uC601\uAD6C\uC801\uC73C\uB85C \uCD5C\uC801\uD654\uB418\uBA70, \uC790\uB3D9 \uC904 \uBC14\uAFC8\uC774 \uC0AC\uC6A9\uD558\uC9C0 \uC54A\uB3C4\uB85D \uC124\uC815\uB429\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uAC00 \uC2A4\uD06C\uB9B0 \uB9AC\uB354 \uC0AC\uC6A9\uC744 \uC704\uD574 \uCD5C\uC801\uD654\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uB97C \uD654\uBA74 \uC77D\uAE30 \uD504\uB85C\uADF8\uB7A8\uC5D0 \uCD5C\uC801\uD654\uB41C \uBAA8\uB4DC\uB85C \uC2E4\uD589\uD560\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4. \uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uD558\uBA74 \uC790\uB3D9 \uC904 \uBC14\uAFC8\uC774 \uC0AC\uC6A9\uD558\uC9C0 \uC54A\uB3C4\uB85D \uC124\uC815\uB429\uB2C8\uB2E4.","\uC8FC\uC11D\uC744 \uB2EC \uB54C \uACF5\uBC31 \uBB38\uC790\uB97C \uC0BD\uC785\uD560\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uBE48 \uC904\uC744 \uC904 \uC8FC\uC11D\uC5D0 \uB300\uD55C \uD1A0\uAE00, \uCD94\uAC00 \uB610\uB294 \uC81C\uAC70 \uC791\uC5C5\uC73C\uB85C \uBB34\uC2DC\uD574\uC57C \uD558\uB294\uC9C0\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC120\uD0DD \uC601\uC5ED \uC5C6\uC774 \uD604\uC7AC \uC904 \uBCF5\uC0AC \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC785\uB825\uD558\uB294 \uB3D9\uC548 \uC77C\uCE58 \uD56D\uBAA9\uC744 \uCC3E\uAE30 \uC704\uD55C \uCEE4\uC11C \uC774\uB3D9 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uC120\uD0DD\uC5D0\uC11C Find Widget\uC758 \uAC80\uC0C9 \uBB38\uC790\uC5F4\uC744 \uC2DC\uB529\uD560\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC120\uD0DD \uD56D\uBAA9\uC5D0\uC11C \uCC3E\uAE30\uB97C \uC790\uB3D9\uC73C\uB85C \uCF1C\uC9C0 \uC54A\uC74C(\uAE30\uBCF8\uAC12)","\uC120\uD0DD \uD56D\uBAA9\uC5D0\uC11C \uC790\uB3D9\uC73C\uB85C \uD56D\uC0C1 \uCC3E\uAE30 \uCF1C\uAE30","\uC5EC\uB7EC \uC904\uC758 \uCF58\uD150\uCE20\uB97C \uC120\uD0DD\uD558\uBA74 \uC120\uD0DD \uD56D\uBAA9\uC5D0\uC11C \uCC3E\uAE30\uAC00 \uC790\uB3D9\uC73C\uB85C \uCF1C\uC9D1\uB2C8\uB2E4.","\uC120\uD0DD \uC601\uC5ED\uC5D0\uC11C \uCC3E\uAE30\uB97C \uC790\uB3D9\uC73C\uB85C \uC124\uC815\uD558\uB294 \uC870\uAC74\uC744 \uC81C\uC5B4\uD569\uB2C8\uB2E4.","macOS\uC5D0\uC11C Find Widget\uC774 \uACF5\uC720 \uD074\uB9BD\uBCF4\uB4DC \uCC3E\uAE30\uB97C \uC77D\uC744\uC9C0 \uC218\uC815\uD560\uC9C0 \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC704\uC82F \uCC3E\uAE30\uC5D0\uC11C \uD3B8\uC9D1\uAE30 \uB9E8 \uC704\uC5D0 \uC904\uC744 \uCD94\uAC00\uD574\uC57C \uD558\uB294\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4. true\uC778 \uACBD\uC6B0 \uC704\uC82F \uCC3E\uAE30\uAC00 \uD45C\uC2DC\uB418\uBA74 \uCCAB \uBC88\uC9F8 \uC904 \uC704\uB85C \uC2A4\uD06C\uB864\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.","\uB354 \uC774\uC0C1 \uC77C\uCE58\uD558\uB294 \uD56D\uBAA9\uC774 \uC5C6\uC744 \uB54C \uAC80\uC0C9\uC744 \uCC98\uC74C\uC774\uB098 \uB05D\uC5D0\uC11C \uC790\uB3D9\uC73C\uB85C \uB2E4\uC2DC \uC2DC\uC791\uD560\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uAE00\uAF34 \uD569\uC790('calt' \uBC0F 'liga' \uAE00\uAF34 \uAE30\uB2A5)\uB97C \uC0AC\uC6A9\uD558\uAC70\uB098 \uC0AC\uC6A9\uD558\uC9C0 \uC54A\uB3C4\uB85D \uC124\uC815\uD569\uB2C8\uB2E4. 'font-feature-settings' CSS \uC18D\uC131\uC758 \uC138\uBD84\uD654\uB41C \uC81C\uC5B4\uB97C \uC704\uD574 \uBB38\uC790\uC5F4\uB85C \uBCC0\uACBD\uD569\uB2C8\uB2E4.","\uBA85\uC2DC\uC801 'font-feature-settings' CSS \uC18D\uC131\uC785\uB2C8\uB2E4. \uD569\uC790\uB97C \uCF1C\uAC70\uB098 \uAEBC\uC57C \uD558\uB294 \uACBD\uC6B0\uC5D0\uB9CC \uBD80\uC6B8\uC744 \uB300\uC2E0 \uC804\uB2EC\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.","\uAE00\uAF34 \uD569\uC790 \uB610\uB294 \uAE00\uAF34 \uAE30\uB2A5\uC744 \uAD6C\uC131\uD569\uB2C8\uB2E4. CSS 'font-feature-settings' \uC18D\uC131\uC758 \uAC12\uC5D0 \uB300\uD574 \uD569\uC790 \uB610\uB294 \uBB38\uC790\uC5F4\uC744 \uC0AC\uC6A9\uD558\uAC70\uB098 \uC0AC\uC6A9\uD558\uC9C0 \uC54A\uB3C4\uB85D \uC124\uC815\uD558\uAE30 \uC704\uD55C \uBD80\uC6B8\uC77C \uC218 \uC788\uC2B5\uB2C8\uB2E4.","\uAE00\uAF34 \uD06C\uAE30(\uD53D\uC140)\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.",'"\uD45C\uC900" \uBC0F "\uAD75\uAC8C" \uD0A4\uC6CC\uB4DC \uB610\uB294 1~1000 \uC0AC\uC774\uC758 \uC22B\uC790\uB9CC \uD5C8\uC6A9\uB429\uB2C8\uB2E4.','\uAE00\uAF34 \uB450\uAED8\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4. "\uD45C\uC900" \uBC0F "\uAD75\uAC8C" \uD0A4\uC6CC\uB4DC \uB610\uB294 1~1000 \uC0AC\uC774\uC758 \uC22B\uC790\uB97C \uD5C8\uC6A9\uD569\uB2C8\uB2E4.',"\uACB0\uACFC Peek \uBDF0 \uD45C\uC2DC(\uAE30\uBCF8)","\uAE30\uBCF8 \uACB0\uACFC\uB85C \uC774\uB3D9\uD558\uC5EC Peek \uBCF4\uAE30\uB97C \uD45C\uC2DC\uD569\uB2C8\uB2E4.","\uAE30\uBCF8 \uACB0\uACFC\uB85C \uC774\uB3D9\uD558\uACE0 \uB2E4\uB978 \uD56D\uBAA9\uC5D0 \uB300\uD574 peek \uC5C6\uB294 \uD0D0\uC0C9\uC744 \uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815","\uC774 \uC124\uC815\uC740 \uB354 \uC774\uC0C1 \uC0AC\uC6A9\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uB300\uC2E0 'editor.editor.gotoLocation.multipleDefinitions' \uB610\uB294 'editor.editor.gotoLocation.multipleImplementations'\uC640 \uAC19\uC740 \uBCC4\uB3C4\uC758 \uC124\uC815\uC744 \uC0AC\uC6A9\uD558\uC138\uC694.","\uC5EC\uB7EC \uB300\uC0C1 \uC704\uCE58\uAC00 \uC788\uB294 \uACBD\uC6B0 '\uC815\uC758\uB85C \uC774\uB3D9' \uBA85\uB839 \uB3D9\uC791\uC744 \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC5EC\uB7EC \uB300\uC0C1 \uC704\uCE58\uAC00 \uC788\uB294 \uACBD\uC6B0 '\uC720\uD615 \uC815\uC758\uB85C \uC774\uB3D9' \uBA85\uB839 \uB3D9\uC791\uC744 \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC5EC\uB7EC \uB300\uC0C1 \uC704\uCE58\uAC00 \uC788\uB294 \uACBD\uC6B0 'Go to Declaration' \uBA85\uB839 \uB3D9\uC791\uC744 \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC5EC\uB7EC \uB300\uC0C1 \uC704\uCE58\uAC00 \uC788\uB294 \uACBD\uC6B0 '\uAD6C\uD604\uC73C\uB85C \uC774\uB3D9' \uBA85\uB839 \uB3D9\uC791\uC744 \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC5EC\uB7EC \uB300\uC0C1 \uC704\uCE58\uAC00 \uC788\uB294 \uACBD\uC6B0 '\uCC38\uC870\uB85C \uC774\uB3D9' \uBA85\uB839 \uB3D9\uC791\uC744 \uC81C\uC5B4\uD569\uB2C8\uB2E4.","'\uC815\uC758\uB85C \uC774\uB3D9'\uC758 \uACB0\uACFC\uAC00 \uD604\uC7AC \uC704\uCE58\uC77C \uB54C \uC2E4\uD589\uB418\uB294 \uB300\uCCB4 \uBA85\uB839 ID\uC785\uB2C8\uB2E4.","'\uD615\uC2DD \uC815\uC758\uB85C \uC774\uB3D9'\uC758 \uACB0\uACFC\uAC00 \uD604\uC7AC \uC704\uCE58\uC77C \uB54C \uC2E4\uD589\uB418\uB294 \uB300\uCCB4 \uBA85\uB839 ID\uC785\uB2C8\uB2E4.","'\uC120\uC5B8\uC73C\uB85C \uC774\uB3D9'\uC758 \uACB0\uACFC\uAC00 \uD604\uC7AC \uC704\uCE58\uC77C \uB54C \uC2E4\uD589\uB418\uB294 \uB300\uCCB4 \uBA85\uB839 ID\uC785\uB2C8\uB2E4.","'\uAD6C\uD604\uC73C\uB85C \uC774\uB3D9'\uC758 \uACB0\uACFC\uAC00 \uD604\uC7AC \uC704\uCE58\uC77C \uB54C \uC2E4\uD589\uB418\uB294 \uB300\uCCB4 \uBA85\uB839 ID\uC785\uB2C8\uB2E4.","'\uCC38\uC870\uB85C \uC774\uB3D9'\uC758 \uACB0\uACFC\uAC00 \uD604\uC7AC \uC704\uCE58\uC77C \uB54C \uC2E4\uD589\uB418\uB294 \uB300\uCCB4 \uBA85\uB839 ID\uC785\uB2C8\uB2E4.","\uD638\uBC84 \uD45C\uC2DC \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uD638\uBC84\uAC00 \uD45C\uC2DC\uB418\uAE30 \uC804\uAE4C\uC9C0\uC758 \uC9C0\uC5F0 \uC2DC\uAC04(\uBC00\uB9AC\uCD08)\uC744 \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uB9C8\uC6B0\uC2A4\uB97C \uD574\uB2F9 \uD56D\uBAA9 \uC704\uB85C \uC774\uB3D9\uD560 \uB54C \uD638\uBC84\uB97C \uACC4\uC18D \uD45C\uC2DC\uD560\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uCF54\uB4DC \uB3D9\uC791 \uC804\uAD6C\uB97C \uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uC778\uB77C\uC778 \uD78C\uD2B8\uB97C \uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uC778\uB77C\uC778 \uD78C\uD2B8\uC758 \uAE00\uAF34 \uD06C\uAE30\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4. `0`\uC73C\uB85C \uC124\uC815\uD558\uBA74 `#editor.fontSize#`\uC758 90%\uAC00 \uC0AC\uC6A9\uB429\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uC778\uB77C\uC778 \uD78C\uD2B8\uC758 \uAE00\uAF34 \uD328\uBC00\uB9AC\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC904 \uB192\uC774\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4. \uAE00\uAF34 \uD06C\uAE30\uC5D0\uC11C \uC904 \uB192\uC774\uB97C \uACC4\uC0B0\uD558\uB824\uBA74 0\uC744 \uC0AC\uC6A9\uD569\uB2C8\uB2E4.","\uBBF8\uB2C8\uB9F5 \uD45C\uC2DC \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uBBF8\uB2C8\uB9F5\uC758 \uD06C\uAE30\uB294 \uD3B8\uC9D1\uAE30 \uB0B4\uC6A9\uACFC \uB3D9\uC77C\uD558\uBA70 \uC2A4\uD06C\uB864\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC758 \uB192\uC774\uB97C \uB9DE\uCD94\uAE30 \uC704\uD574 \uD544\uC694\uC5D0 \uB530\uB77C \uBBF8\uB2C8\uB9F5\uC774 \uD655\uC7A5\uB418\uAC70\uB098 \uCD95\uC18C\uB429\uB2C8\uB2E4(\uC2A4\uD06C\uB864 \uC5C6\uC74C).","\uBBF8\uB2C8\uB9F5\uC744 \uD3B8\uC9D1\uAE30\uBCF4\uB2E4 \uC791\uAC8C \uC720\uC9C0\uD560 \uC218 \uC788\uB3C4\uB85D \uD544\uC694\uC5D0 \uB530\uB77C \uBBF8\uB2C8\uB9F5\uC774 \uCD95\uC18C\uB429\uB2C8\uB2E4(\uC2A4\uD06C\uB864 \uC5C6\uC74C).","\uBBF8\uB2C8\uB9F5\uC758 \uD06C\uAE30\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uBBF8\uB2C8\uB9F5\uC744 \uB80C\uB354\uB9C1\uD560 \uCE21\uBA74\uC744 \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uBBF8\uB2C8\uB9F5 \uC2AC\uB77C\uC774\uB354\uAC00 \uD45C\uC2DC\uB418\uB294 \uC2DC\uAE30\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uBBF8\uB2C8\uB9F5\uC5D0 \uADF8\uB824\uC9C4 \uCF58\uD150\uCE20\uC758 \uBC30\uC728: 1, 2 \uB610\uB294 3.","\uC904\uC758 \uC2E4\uC81C \uBB38\uC790(\uC0C9 \uBE14\uB85D \uC544\uB2D8)\uB97C \uB80C\uB354\uB9C1\uD569\uB2C8\uB2E4.","\uCD5C\uB300 \uD2B9\uC815 \uC218\uC758 \uC5F4\uC744 \uB80C\uB354\uB9C1\uD558\uB3C4\uB85D \uBBF8\uB2C8\uB9F5\uC758 \uB108\uBE44\uB97C \uC81C\uD55C\uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC758 \uC704\uCABD \uAC00\uC7A5\uC790\uB9AC\uC640 \uCCAB \uBC88\uC9F8 \uC904 \uC0AC\uC774\uC758 \uACF5\uBC31\uC744 \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC758 \uC544\uB798\uCABD \uAC00\uC7A5\uC790\uB9AC\uC640 \uB9C8\uC9C0\uB9C9 \uC904 \uC0AC\uC774\uC758 \uACF5\uBC31\uC744 \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC785\uB825\uACFC \uB3D9\uC2DC\uC5D0 \uB9E4\uAC1C\uBCC0\uC218 \uBB38\uC11C\uC640 \uC720\uD615 \uC815\uBCF4\uB97C \uD45C\uC2DC\uD558\uB294 \uD31D\uC5C5\uC744 \uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uD569\uB2C8\uB2E4.","\uB9E4\uAC1C\uBCC0\uC218 \uD78C\uD2B8 \uBA54\uB274\uC758 \uC8FC\uAE30 \uD639\uC740 \uBAA9\uB85D\uC758 \uB05D\uC5D0 \uB3C4\uB2EC\uD558\uC600\uC744\uB54C \uC885\uB8CC\uD560 \uAC83\uC778\uC9C0 \uC5EC\uBD80\uB97C \uACB0\uC815\uD569\uB2C8\uB2E4.","\uBB38\uC790\uC5F4 \uB0B4\uC5D0\uC11C \uBE60\uB978 \uC81C\uC548\uC744 \uC0AC\uC6A9\uD569\uB2C8\uB2E4.","\uC8FC\uC11D \uB0B4\uC5D0\uC11C \uBE60\uB978 \uC81C\uC548\uC744 \uC0AC\uC6A9\uD569\uB2C8\uB2E4.","\uBB38\uC790\uC5F4 \uBC0F \uC8FC\uC11D \uC678\uBD80\uC5D0\uC11C \uBE60\uB978 \uC81C\uC548\uC744 \uC0AC\uC6A9\uD569\uB2C8\uB2E4.","\uC785\uB825\uD558\uB294 \uB3D9\uC548 \uC81C\uC548\uC744 \uC790\uB3D9\uC73C\uB85C \uD45C\uC2DC\uD560\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC904 \uBC88\uD638\uB294 \uB80C\uB354\uB9C1\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.","\uC904 \uBC88\uD638\uB294 \uC808\uB300\uAC12\uC73C\uB85C \uB80C\uB354\uB9C1 \uB429\uB2C8\uB2E4.","\uC904 \uBC88\uD638\uB294 \uCEE4\uC11C \uC704\uCE58\uC5D0\uC11C \uC904 \uAC04\uACA9 \uAC70\uB9AC\uB85C \uB80C\uB354\uB9C1 \uB429\uB2C8\uB2E4.","\uC904 \uBC88\uD638\uB294 \uB9E4 10 \uC904\uB9C8\uB2E4 \uB80C\uB354\uB9C1\uC774 \uC774\uB8E8\uC5B4\uC9D1\uB2C8\uB2E4.","\uC904 \uBC88\uD638\uC758 \uD45C\uC2DC \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC774 \uD3B8\uC9D1\uAE30 \uB208\uAE08\uC790\uC5D0\uC11C \uB80C\uB354\uB9C1\uD560 \uACE0\uC815 \uD3ED \uBB38\uC790 \uC218\uC785\uB2C8\uB2E4.","\uC774 \uD3B8\uC9D1\uAE30 \uB208\uAE08\uC790\uC758 \uC0C9\uC785\uB2C8\uB2E4.","\uD2B9\uC815 \uC218\uC758 \uACE0\uC815 \uD3ED \uBB38\uC790 \uB4A4\uC5D0 \uC138\uB85C \uB208\uAE08\uC790\uB97C \uB80C\uB354\uB9C1\uD569\uB2C8\uB2E4. \uC5EC\uB7EC \uB208\uAE08\uC790\uC758 \uACBD\uC6B0 \uC5EC\uB7EC \uAC12\uC744 \uC0AC\uC6A9\uD569\uB2C8\uB2E4. \uBC30\uC5F4\uC774 \uBE44\uC5B4 \uC788\uB294 \uACBD\uC6B0 \uB208\uAE08\uC790\uAC00 \uADF8\uB824\uC9C0\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.","\uCEE4\uC11C\uC758 \uD14D\uC2A4\uD2B8 \uC624\uB978\uCABD\uC744 \uB36E\uC5B4 \uC4F0\uC9C0\uC54A\uACE0 \uC81C\uC548\uC744 \uC0BD\uC785\uD569\uB2C8\uB2E4.","\uC81C\uC548\uC744 \uC0BD\uC785\uD558\uACE0 \uCEE4\uC11C\uC758 \uC624\uB978\uCABD \uD14D\uC2A4\uD2B8\uB97C \uB36E\uC5B4\uC501\uB2C8\uB2E4.","\uC644\uB8CC\uB97C \uC218\uB77D\uD560 \uB54C \uB2E8\uC5B4\uB97C \uB36E\uC5B4\uC4F8\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4. \uC774\uAC83\uC740 \uC774 \uAE30\uB2A5\uC744 \uC120\uD0DD\uD558\uB294 \uD655\uC7A5\uC5D0 \uB530\uB77C \uB2E4\uB985\uB2C8\uB2E4.","\uC81C\uC548 \uD544\uD130\uB9C1 \uBC0F \uC815\uB82C\uC5D0\uC11C \uC791\uC740 \uC624\uD0C0\uB97C \uC124\uBA85\uD558\uB294\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC815\uB82C\uD560 \uB54C \uCEE4\uC11C \uADFC\uCC98\uC5D0 \uD45C\uC2DC\uB418\uB294 \uB2E8\uC5B4\uB97C \uC6B0\uC120\uD560\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC800\uC7A5\uB41C \uC81C\uC548 \uC0AC\uD56D \uC120\uD0DD \uD56D\uBAA9\uC744 \uC5EC\uB7EC \uC791\uC5C5 \uC601\uC5ED \uBC0F \uCC3D\uC5D0\uC11C \uACF5\uC720\uD560 \uAC83\uC778\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4(`#editor.suggestSelection#` \uD544\uC694).","\uD65C\uC131 \uCF54\uB4DC \uC870\uAC01\uC774 \uBE60\uB978 \uC81C\uC548\uC744 \uBC29\uC9C0\uD558\uB294\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC81C\uC548\uC758 \uC544\uC774\uCF58\uC744 \uD45C\uC2DC\uD560\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC81C\uC548 \uC704\uC82F \uD558\uB2E8\uC758 \uC0C1\uD0DC \uD45C\uC2DC\uC904 \uAC00\uC2DC\uC131\uC744 \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC81C\uC548 \uC138\uBD80 \uC815\uBCF4\uAC00 \uB808\uC774\uBE14\uACFC \uD568\uAED8 \uC778\uB77C\uC778\uC5D0 \uD45C\uC2DC\uB418\uB294\uC9C0 \uC544\uB2C8\uBA74 \uC138\uBD80 \uC815\uBCF4 \uC704\uC82F\uC5D0\uB9CC \uD45C\uC2DC\uB418\uB294\uC9C0\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC774 \uC124\uC815\uC740 \uB354 \uC774\uC0C1 \uC0AC\uC6A9\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uC774\uC81C \uC81C\uC548 \uC704\uC82F\uC758 \uD06C\uAE30\uB97C \uC870\uC815\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.","\uC774 \uC124\uC815\uC740 \uB354 \uC774\uC0C1 \uC0AC\uC6A9\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uB300\uC2E0 'editor.suggest.showKeywords'\uB610\uB294 'editor.suggest.showSnippets'\uC640 \uAC19\uC740 \uBCC4\uB3C4\uC758 \uC124\uC815\uC744 \uC0AC\uC6A9\uD558\uC138\uC694.","\uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB418\uBA74 IntelliSense\uC5D0 `\uBA54\uC11C\uB4DC` \uC81C\uC548\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB418\uBA74 IntelliSense\uC5D0 '\uD568\uC218' \uC81C\uC548\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB418\uBA74 IntelliSense\uC5D0 '\uC0DD\uC131\uC790' \uC81C\uC548\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB418\uBA74 IntelliSense\uC5D0 '\uD544\uB4DC' \uC81C\uC548\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB418\uBA74 IntelliSense\uC5D0 '\uBCC0\uC218' \uC81C\uC548\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB418\uBA74 IntelliSense\uC5D0 '\uD074\uB798\uC2A4' \uC81C\uC548\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB418\uBA74 IntelliSense\uC5D0 '\uAD6C\uC870' \uC81C\uC548\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB418\uBA74 IntelliSense\uC5D0 '\uC778\uD130\uD398\uC774\uC2A4' \uC81C\uC548\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB418\uBA74 IntelliSense\uC5D0 '\uBAA8\uB4C8' \uC81C\uC548\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB418\uBA74 IntelliSense\uC5D0 '\uC18D\uC131' \uC81C\uC548\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB418\uBA74 IntelliSense\uC5D0 '\uC774\uBCA4\uD2B8' \uC81C\uC548\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB418\uBA74 IntelliSense\uC5D0 `\uC5F0\uC0B0\uC790` \uC81C\uC548\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB418\uBA74 IntelliSense\uC5D0 '\uB2E8\uC704' \uC81C\uC548\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB418\uBA74 IntelliSense\uC5D0 '\uAC12' \uC81C\uC548\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB418\uBA74 IntelliSense\uC5D0 '\uC0C1\uC218' \uC81C\uC548\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB418\uBA74 IntelliSense\uC5D0 '\uC5F4\uAC70\uD615' \uC81C\uC548\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB418\uBA74 IntelliSense\uC5D0 `enumMember` \uC81C\uC548\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB418\uBA74 IntelliSense\uC5D0 '\uD0A4\uC6CC\uB4DC' \uC81C\uC548\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB418\uBA74 IntelliSense\uC5D0 '\uD14D\uC2A4\uD2B8' \uC81C\uC548\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB418\uBA74 IntelliSense\uC5D0 '\uC0C9' \uC81C\uC548\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB418\uBA74 IntelliSense\uC5D0 `\uD30C\uC77C` \uC81C\uC548\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB418\uBA74 IntelliSense\uC5D0 '\uCC38\uC870' \uC81C\uC548\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB418\uBA74 IntelliSense\uC5D0 '\uC0AC\uC6A9\uC790 \uC9C0\uC815 \uC0C9' \uC81C\uC548\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB418\uBA74 IntelliSense\uC5D0 '\uD3F4\uB354' \uC81C\uC548\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB41C \uACBD\uC6B0 IntelliSense\uC5D0 'typeParameter' \uC81C\uC548\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB418\uBA74 IntelliSense\uC5D0 '\uCF54\uB4DC \uC870\uAC01' \uC81C\uC548\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","IntelliSense\uB97C \uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uD558\uBA74 `user`-\uC81C\uC548\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","IntelliSense\uB97C \uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uD55C \uACBD\uC6B0 `issues`-\uC81C\uC548\uC744 \uD45C\uC2DC\uD569\uB2C8\uB2E4.","\uC120\uD589 \uBC0F \uD6C4\uD589 \uACF5\uBC31\uC744 \uD56D\uC0C1 \uC120\uD0DD\uD574\uC57C \uD558\uB294\uC9C0 \uC5EC\uBD80\uC785\uB2C8\uB2E4.","\uCEE4\uBC0B \uBB38\uC790\uC5D0 \uB300\uD55C \uC81C\uC548\uC744 \uD5C8\uC6A9\uD560\uC9C0\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4. \uC608\uB97C \uB4E4\uC5B4 JavaScript\uC5D0\uC11C\uB294 \uC138\uBBF8\uCF5C\uB860(';')\uC774 \uC81C\uC548\uC744 \uD5C8\uC6A9\uD558\uACE0 \uD574\uB2F9 \uBB38\uC790\uB97C \uC785\uB825\uD558\uB294 \uCEE4\uBC0B \uBB38\uC790\uC77C \uC218 \uC788\uC2B5\uB2C8\uB2E4.","\uD14D\uC2A4\uD2B8\uB97C \uBCC0\uACBD\uD560 \uB54C `Enter` \uD0A4\uB97C \uC0AC\uC6A9\uD55C \uC81C\uC548\uB9CC \uD5C8\uC6A9\uD569\uB2C8\uB2E4.","'Tab' \uD0A4 \uC678\uC5D0 'Enter' \uD0A4\uC5D0 \uB300\uD55C \uC81C\uC548\uB3C4 \uD5C8\uC6A9\uD560\uC9C0\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4. \uC0C8 \uC904\uC744 \uC0BD\uC785\uD558\uB294 \uB3D9\uC791\uACFC \uC81C\uC548\uC744 \uD5C8\uC6A9\uD558\uB294 \uB3D9\uC791 \uAC04\uC758 \uBAA8\uD638\uD568\uC744 \uC5C6\uC568 \uC218 \uC788\uC2B5\uB2C8\uB2E4.","\uD654\uBA74 \uD310\uB3C5\uAE30\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 \uD3B8\uC9D1\uAE30\uC758 \uC904 \uC218\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4. \uACBD\uACE0: \uAE30\uBCF8\uAC12\uBCF4\uB2E4 \uD070 \uC22B\uC790\uC778 \uACBD\uC6B0 \uC131\uB2A5\uC5D0 \uC601\uD5A5\uC744 \uBBF8\uCE69\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uCF58\uD150\uCE20","\uC5B8\uC5B4 \uAD6C\uC131\uC744 \uC0AC\uC6A9\uD558\uC5EC \uB300\uAD04\uD638\uB97C \uC790\uB3D9\uC73C\uB85C \uB2EB\uC744 \uACBD\uC6B0\uB97C \uACB0\uC815\uD569\uB2C8\uB2E4.","\uCEE4\uC11C\uAC00 \uACF5\uBC31\uC758 \uC67C\uCABD\uC5D0 \uC788\uB294 \uACBD\uC6B0\uC5D0\uB9CC \uB300\uAD04\uD638\uB97C \uC790\uB3D9\uC73C\uB85C \uB2EB\uC2B5\uB2C8\uB2E4.","\uC0AC\uC6A9\uC790\uAC00 \uC5EC\uB294 \uAD04\uD638\uB97C \uCD94\uAC00\uD55C \uD6C4 \uD3B8\uC9D1\uAE30\uC5D0\uC11C \uAD04\uD638\uB97C \uC790\uB3D9\uC73C\uB85C \uB2EB\uC744\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uB2EB\uAE30 \uB530\uC634\uD45C \uB610\uB294 \uB300\uAD04\uD638\uAC00 \uC790\uB3D9\uC73C\uB85C \uC0BD\uC785\uB41C \uACBD\uC6B0\uC5D0\uB9CC \uD574\uB2F9 \uD56D\uBAA9 \uC704\uC5D0 \uC785\uB825\uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uC790\uAC00 \uB2EB\uB294 \uB530\uC634\uD45C \uB610\uB294 \uB300\uAD04\uD638 \uC704\uC5D0 \uC785\uB825\uD560\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC5B8\uC5B4 \uAD6C\uC131\uC744 \uC0AC\uC6A9\uD558\uC5EC \uB530\uC634\uD45C\uB97C \uC790\uB3D9\uC73C\uB85C \uB2EB\uC744 \uACBD\uC6B0\uB97C \uACB0\uC815\uD569\uB2C8\uB2E4.","\uCEE4\uC11C\uAC00 \uACF5\uBC31\uC758 \uC67C\uCABD\uC5D0 \uC788\uB294 \uACBD\uC6B0\uC5D0\uB9CC \uB530\uC634\uD45C\uB97C \uC790\uB3D9\uC73C\uB85C \uB2EB\uC2B5\uB2C8\uB2E4.","\uC0AC\uC6A9\uC790\uAC00 \uC5EC\uB294 \uB530\uC634\uD45C\uB97C \uCD94\uAC00\uD55C \uD6C4 \uD3B8\uC9D1\uAE30\uC5D0\uC11C \uB530\uC634\uD45C\uB97C \uC790\uB3D9\uC73C\uB85C \uB2EB\uC744\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uB294 \uB4E4\uC5EC\uC4F0\uAE30\uB97C \uC790\uB3D9\uC73C\uB85C \uC0BD\uC785\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uB294 \uD604\uC7AC \uC904\uC758 \uB4E4\uC5EC\uC4F0\uAE30\uB97C \uC720\uC9C0\uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uB294 \uD604\uC7AC \uC904\uC758 \uB4E4\uC5EC\uC4F0\uAE30\uB97C \uC720\uC9C0\uD558\uACE0 \uC5B8\uC5B4 \uC815\uC758 \uB300\uAD04\uD638\uB97C \uC0AC\uC6A9\uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uB294 \uD604\uC7AC \uC904\uC758 \uB4E4\uC5EC\uC4F0\uAE30\uB97C \uC720\uC9C0\uD558\uACE0 \uC5B8\uC5B4 \uC815\uC758 \uB300\uAD04\uD638\uB97C \uC874\uC911\uD558\uBA70 \uC5B8\uC5B4\uBCC4\uB85C \uC815\uC758\uB41C \uD2B9\uBCC4 EnterRules\uB97C \uD638\uCD9C\uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uB294 \uD604\uC7AC \uC904\uC758 \uB4E4\uC5EC\uC4F0\uAE30\uB97C \uC720\uC9C0\uD558\uACE0, \uC5B8\uC5B4 \uC815\uC758 \uB300\uAD04\uD638\uB97C \uC874\uC911\uD558\uACE0, \uC5B8\uC5B4\uC5D0 \uC758\uD574 \uC815\uC758\uB41C \uD2B9\uBCC4 EnterRules\uB97C \uD638\uCD9C\uD558\uACE0, \uC5B8\uC5B4\uC5D0 \uC758\uD574 \uC815\uC758\uB41C \uB4E4\uC5EC\uC4F0\uAE30 \uADDC\uCE59\uC744 \uC874\uC911\uD569\uB2C8\uB2E4.","\uC0AC\uC6A9\uC790\uAC00 \uC904\uC744 \uC785\uB825, \uBD99\uC5EC\uB123\uAE30, \uC774\uB3D9 \uB610\uB294 \uB4E4\uC5EC\uC4F0\uAE30 \uD560 \uB54C \uD3B8\uC9D1\uAE30\uC5D0\uC11C \uB4E4\uC5EC\uC4F0\uAE30\uB97C \uC790\uB3D9\uC73C\uB85C \uC870\uC815\uD558\uB3C4\uB85D \uD560\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC5B8\uC5B4 \uAD6C\uC131\uC744 \uC0AC\uC6A9\uD558\uC5EC \uC120\uD0DD \uD56D\uBAA9\uC744 \uC790\uB3D9\uC73C\uB85C \uB458\uB7EC\uC300 \uACBD\uC6B0\uB97C \uACB0\uC815\uD569\uB2C8\uB2E4.","\uB300\uAD04\uD638\uAC00 \uC544\uB2CC \uB530\uC634\uD45C\uB85C \uB458\uB7EC\uC309\uB2C8\uB2E4.","\uB530\uC634\uD45C\uAC00 \uC544\uB2CC \uB300\uAD04\uD638\uB85C \uB458\uB7EC\uC309\uB2C8\uB2E4.","\uB530\uC634\uD45C \uB610\uB294 \uB300\uAD04\uD638 \uC785\uB825 \uC2DC \uD3B8\uC9D1\uAE30\uAC00 \uC790\uB3D9\uC73C\uB85C \uC120\uD0DD \uC601\uC5ED\uC744 \uB458\uB7EC\uC300\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uB4E4\uC5EC\uC4F0\uAE30\uC5D0 \uACF5\uBC31\uC744 \uC0AC\uC6A9\uD560 \uB54C \uD0ED \uBB38\uC790\uC758 \uC120\uD0DD \uB3D9\uC791\uC744 \uC5D0\uBBAC\uB808\uC774\uD2B8\uD569\uB2C8\uB2E4. \uC120\uD0DD \uC601\uC5ED\uC774 \uD0ED \uC815\uC9C0\uC5D0 \uACE0\uC815\uB429\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC5D0\uC11C CodeLens\uB97C \uD45C\uC2DC\uD560 \uAC83\uC778\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","CodeLens\uC758 \uAE00\uAF34 \uD328\uBC00\uB9AC\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","CodeLens\uC758 \uAE00\uAF34 \uD06C\uAE30(\uD53D\uC140)\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4. '0'\uC73C\uB85C \uC124\uC815\uD558\uBA74 `#editor.fontSize#`\uC758 90%\uAC00 \uC0AC\uC6A9\uB429\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uC778\uB77C\uC778 \uC0C9 \uB370\uCF54\uB808\uC774\uD130 \uBC0F \uC0C9 \uC120\uD0DD\uC744 \uB80C\uB354\uB9C1\uD560\uC9C0\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uB9C8\uC6B0\uC2A4\uC640 \uD0A4\uB85C \uC120\uD0DD\uD55C \uC601\uC5ED\uC5D0\uC11C \uC5F4\uC744 \uC120\uD0DD\uD558\uB3C4\uB85D \uC124\uC815\uD569\uB2C8\uB2E4.","\uAD6C\uBB38 \uAC15\uC870 \uD45C\uC2DC\uB97C \uD074\uB9BD\uBCF4\uB4DC\uB85C \uBCF5\uC0AC\uD560\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uCEE4\uC11C \uC560\uB2C8\uBA54\uC774\uC158 \uC2A4\uD0C0\uC77C\uC744 \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uB9E4\uB044\uB7EC\uC6B4 \uCE90\uB7FF \uC560\uB2C8\uBA54\uC774\uC158\uC758 \uC0AC\uC6A9 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uCEE4\uC11C \uC2A4\uD0C0\uC77C\uC744 \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uCEE4\uC11C \uC8FC\uC704\uC5D0 \uD45C\uC2DC\uB418\uB294 \uC120\uD589 \uBC0F \uD6C4\uD589 \uC904\uC758 \uCD5C\uC18C \uC218\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4. \uC77C\uBD80 \uB2E4\uB978 \uD3B8\uC9D1\uAE30\uC5D0\uC11C\uB294 'scrollOff' \uB610\uB294 'scrollOffset'\uC774\uB77C\uACE0 \uD569\uB2C8\uB2E4.","'cursorSurroundingLines'\uB294 \uD0A4\uBCF4\uB4DC \uB098 API\uB97C \uD1B5\uD574 \uD2B8\uB9AC\uAC70\uB420 \uB54C\uB9CC \uC801\uC6A9\uB429\uB2C8\uB2E4.","`cursorSurroundingLines`\uB294 \uD56D\uC0C1 \uC801\uC6A9\uB429\uB2C8\uB2E4.","'cursorSurroundingLines'\uB97C \uC801\uC6A9\uD574\uC57C \uD558\uB294 \uACBD\uC6B0\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","`#editor.cursorStyle#` \uC124\uC815\uC774 'line'\uC73C\uB85C \uC124\uC815\uB418\uC5B4 \uC788\uC744 \uB54C \uCEE4\uC11C\uC758 \uB113\uC774\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uB04C\uC5B4\uC11C \uB193\uAE30\uB85C \uC120\uD0DD \uC601\uC5ED\uC744 \uC774\uB3D9\uD560 \uC218 \uC788\uB294\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","'Alt' \uD0A4\uB97C \uB204\uB97C \uB54C \uC2A4\uD06C\uB864 \uC18D\uB3C4 \uC2B9\uC218\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC5D0 \uCF54\uB4DC \uC811\uAE30\uAC00 \uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB418\uB294\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uACBD\uC6B0 \uC5B8\uC5B4\uBCC4 \uC811\uAE30 \uC804\uB7B5\uC744 \uC0AC\uC6A9\uD569\uB2C8\uB2E4. \uADF8\uB807\uC9C0 \uC54A\uC740 \uACBD\uC6B0 \uB4E4\uC5EC\uC4F0\uAE30 \uAE30\uBC18 \uC804\uB7B5\uC744 \uC0AC\uC6A9\uD569\uB2C8\uB2E4.","\uB4E4\uC5EC\uC4F0\uAE30 \uAE30\uBC18 \uC811\uAE30 \uC804\uB7B5\uC744 \uC0AC\uC6A9\uD569\uB2C8\uB2E4.","\uC811\uAE30 \uBC94\uC704\uB97C \uACC4\uC0B0\uD558\uAE30 \uC704\uD55C \uC804\uB7B5\uC744 \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uC811\uD78C \uBC94\uC704\uB97C \uAC15\uC870 \uD45C\uC2DC\uD560\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC811\uD78C \uC904\uC774 \uC904\uC744 \uD3BC\uCE5C \uD6C4 \uBE48 \uCF58\uD150\uCE20\uB97C \uD074\uB9AD\uD560\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uAE00\uAF34 \uD328\uBC00\uB9AC\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uBD99\uC5EC\uB123\uC740 \uCF58\uD150\uCE20\uC758 \uC11C\uC2DD\uC744 \uD3B8\uC9D1\uAE30\uC5D0\uC11C \uC790\uB3D9\uC73C\uB85C \uC9C0\uC815\uD560\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4. \uD3EC\uB9F7\uD130\uB97C \uC0AC\uC6A9\uD560 \uC218 \uC788\uC5B4\uC57C \uD558\uBA70 \uD3EC\uB9F7\uD130\uAC00 \uBB38\uC11C\uC5D0\uC11C \uBC94\uC704\uC758 \uC11C\uC2DD\uC744 \uC9C0\uC815\uD560 \uC218 \uC788\uC5B4\uC57C \uD569\uB2C8\uB2E4.","\uC785\uB825 \uD6C4 \uD3B8\uC9D1\uAE30\uC5D0\uC11C \uC790\uB3D9\uC73C\uB85C \uC904\uC758 \uC11C\uC2DD\uC744 \uC9C0\uC815\uD560\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uC138\uB85C \uBB38\uC790 \uBAA8\uC591 \uC5EC\uBC31\uC744 \uB80C\uB354\uB9C1\uD560\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4. \uBB38\uC790 \uBAA8\uC591 \uC5EC\uBC31\uC740 \uC8FC\uB85C \uB514\uBC84\uAE45\uC5D0 \uC0AC\uC6A9\uB429\uB2C8\uB2E4.","\uCEE4\uC11C\uAC00 \uAC1C\uC694 \uB208\uAE08\uC790\uC5D0\uC11C \uAC00\uB824\uC838\uC57C \uD558\uB294\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uD65C\uC131 \uB4E4\uC5EC\uC4F0\uAE30 \uAC00\uC774\uB4DC\uB97C \uAC15\uC870 \uD45C\uC2DC\uD560\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uBB38\uC790 \uAC04\uACA9(\uD53D\uC140)\uC744 \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uC5F0\uACB0\uB41C \uD3B8\uC9D1\uC774 \uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB418\uC5C8\uB294\uC9C0\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4. \uC5B8\uC5B4\uC5D0 \uB530\uB77C \uAD00\uB828 \uAE30\uD638(\uC608: HTML \uD0DC\uADF8)\uAC00 \uD3B8\uC9D1 \uC911\uC5D0 \uC5C5\uB370\uC774\uD2B8\uB429\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uB9C1\uD06C\uB97C \uAC10\uC9C0\uD558\uACE0 \uD074\uB9AD\uD560 \uC218 \uC788\uAC8C \uB9CC\uB4E4\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC77C\uCE58\uD558\uB294 \uB300\uAD04\uD638\uB97C \uAC15\uC870 \uD45C\uC2DC\uD569\uB2C8\uB2E4.","\uB9C8\uC6B0\uC2A4 \uD720 \uC2A4\uD06C\uB864 \uC774\uBCA4\uD2B8\uC758 `deltaX` \uBC0F `deltaY`\uC5D0\uC11C \uC0AC\uC6A9\uD560 \uC2B9\uC218\uC785\uB2C8\uB2E4.","\uB9C8\uC6B0\uC2A4 \uD720\uC744 \uC0AC\uC6A9\uD560 \uB54C 'Ctrl' \uD0A4\uB97C \uB204\uB974\uACE0 \uC788\uC73C\uBA74 \uD3B8\uC9D1\uAE30\uC758 \uAE00\uAF34\uC744 \uD655\uB300/\uCD95\uC18C\uD569\uB2C8\uB2E4.","\uC5EC\uB7EC \uCEE4\uC11C\uAC00 \uACB9\uCE58\uB294 \uACBD\uC6B0 \uCEE4\uC11C\uB97C \uBCD1\uD569\uD569\uB2C8\uB2E4.","Windows\uC640 Linux\uC758 'Control'\uC744 macOS\uC758 'Command'\uB85C \uB9E4\uD551\uD569\uB2C8\uB2E4.","Windows\uC640 Linux\uC758 'Alt'\uB97C macOS\uC758 'Option'\uC73C\uB85C \uB9E4\uD551\uD569\uB2C8\uB2E4.","\uB9C8\uC6B0\uC2A4\uB85C \uC5EC\uB7EC \uCEE4\uC11C\uB97C \uCD94\uAC00\uD560 \uB54C \uC0AC\uC6A9\uD560 \uC218\uC815\uC790\uC785\uB2C8\uB2E4. [\uC815\uC758\uB85C \uC774\uB3D9] \uBC0F [\uB9C1\uD06C \uC5F4\uAE30] \uB9C8\uC6B0\uC2A4 \uC81C\uC2A4\uCC98\uAC00 \uBA40\uD2F0\uCEE4\uC11C \uC218\uC815\uC790\uC640 \uCDA9\uB3CC\uD558\uC9C0 \uC54A\uB3C4\uB85D \uC870\uC815\uB429\uB2C8\uB2E4. [\uC790\uC138\uD55C \uC815\uBCF4](https://code.visualstudio.com/docs/editor/codebasics#_multicursor-modifier).","\uAC01 \uCEE4\uC11C\uB294 \uD14D\uC2A4\uD2B8 \uD55C \uC904\uC744 \uBD99\uC5EC\uB123\uC2B5\uB2C8\uB2E4.","\uAC01 \uCEE4\uC11C\uB294 \uC804\uCCB4 \uD14D\uC2A4\uD2B8\uB97C \uBD99\uC5EC\uB123\uC2B5\uB2C8\uB2E4.","\uBD99\uC5EC\uB123\uC740 \uD14D\uC2A4\uD2B8\uC758 \uC904 \uC218\uAC00 \uCEE4\uC11C \uC218\uC640 \uC77C\uCE58\uD558\uB294 \uACBD\uC6B0 \uBD99\uC5EC\uB123\uAE30\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uC758\uBBF8 \uCCB4\uACC4 \uAE30\uD638 \uD56D\uBAA9\uC744 \uAC15\uC870 \uD45C\uC2DC\uD560\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uAC1C\uC694 \uB208\uAE08\uC790 \uC8FC\uC704\uC5D0 \uD14C\uB450\uB9AC\uB97C \uADF8\uB9B4\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","Peek\uB97C \uC5EC\uB294 \uB3D9\uC548 \uD2B8\uB9AC\uC5D0 \uD3EC\uCEE4\uC2A4","\uBBF8\uB9AC \uBCF4\uAE30\uB97C \uC5F4 \uB54C \uD3B8\uC9D1\uAE30\uC5D0 \uD3EC\uCEE4\uC2A4","\uBBF8\uB9AC \uBCF4\uAE30 \uC704\uC82F\uC5D0\uC11C \uC778\uB77C\uC778 \uD3B8\uC9D1\uAE30\uC5D0 \uD3EC\uCEE4\uC2A4\uB97C \uB458\uC9C0 \uB610\uB294 \uD2B8\uB9AC\uC5D0 \uD3EC\uCEE4\uC2A4\uB97C \uB458\uC9C0\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC774\uB3D9 \uC815\uC758 \uB9C8\uC6B0\uC2A4 \uC81C\uC2A4\uCC98\uAC00 \uD56D\uC0C1 \uBBF8\uB9AC \uBCF4\uAE30 \uC704\uC82F\uC744 \uC5F4\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uBE60\uB978 \uC81C\uC548\uC744 \uD45C\uC2DC\uD558\uAE30 \uC804\uAE4C\uC9C0\uC758 \uC9C0\uC5F0 \uC2DC\uAC04(\uBC00\uB9AC\uCD08)\uC744 \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uAC00 \uC720\uD615\uC5D0 \uB530\uB77C \uC790\uB3D9\uC73C\uB85C \uC774\uB984\uC744 \uBC14\uAFC0\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC0AC\uC6A9\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uB300\uC2E0 `editor.linkedEditing`\uC744 \uC0AC\uC6A9\uD558\uC138\uC694.","\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uC81C\uC5B4 \uBB38\uC790\uB97C \uB80C\uB354\uB9C1\uD560\uC9C0\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uB4E4\uC5EC\uC4F0\uAE30 \uAC00\uC774\uB4DC\uB97C \uB80C\uB354\uB9C1\uD560\uC9C0\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uD30C\uC77C\uC774 \uC904 \uBC14\uAFC8\uC73C\uB85C \uB05D\uB098\uBA74 \uB9C8\uC9C0\uB9C9 \uC904 \uBC88\uD638\uB97C \uB80C\uB354\uB9C1\uD569\uB2C8\uB2E4.","\uC81C\uBCF8\uC6A9 \uC5EC\uBC31\uACFC \uD604\uC7AC \uC904\uC744 \uBAA8\uB450 \uAC15\uC870 \uD45C\uC2DC\uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uAC00 \uD604\uC7AC \uC904 \uAC15\uC870 \uD45C\uC2DC\uB97C \uB80C\uB354\uB9C1\uD558\uB294 \uBC29\uC2DD\uC744 \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC5D0 \uD3EC\uCEE4\uC2A4\uAC00 \uC788\uB294 \uACBD\uC6B0\uC5D0\uB9CC \uD3B8\uC9D1\uAE30\uC5D0\uC11C \uD604\uC7AC \uC904 \uAC15\uC870 \uD45C\uC2DC\uB97C \uB80C\uB354\uB9C1\uD574\uC57C \uD558\uB294\uC9C0 \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uB2E8\uC5B4 \uC0AC\uC774\uC758 \uACF5\uBC31 \uD558\uB098\uB97C \uC81C\uC678\uD55C \uACF5\uBC31 \uBB38\uC790\uB97C \uB80C\uB354\uB9C1\uD569\uB2C8\uB2E4.","\uC120\uD0DD\uD55C \uD14D\uC2A4\uD2B8\uC5D0\uC11C\uB9CC \uACF5\uBC31 \uBB38\uC790\uB97C \uB80C\uB354\uB9C1\uD569\uB2C8\uB2E4.","\uD6C4\uD589 \uACF5\uBC31 \uBB38\uC790\uB9CC \uB80C\uB354\uB9C1","\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uACF5\uBC31 \uBB38\uC790\uB97C \uB80C\uB354\uB9C1\uD560 \uBC29\uBC95\uC744 \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC120\uD0DD \uD56D\uBAA9\uC758 \uBAA8\uC11C\uB9AC\uB97C \uB465\uAE00\uAC8C \uD560\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uAC00\uB85C\uB85C \uC2A4\uD06C\uB864\uB418\uB294 \uBC94\uC704\uB97C \uBC97\uC5B4\uB098\uB294 \uCD94\uAC00 \uBB38\uC790\uC758 \uC218\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uB9C8\uC9C0\uB9C9 \uC904 \uC774\uD6C4\uB85C \uC2A4\uD06C\uB864\uD560\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC138\uB85C\uC640 \uAC00\uB85C\uB85C \uB3D9\uC2DC\uC5D0 \uC2A4\uD06C\uB864\uD560 \uB54C\uC5D0\uB9CC \uC8FC\uCD95\uC744 \uB530\uB77C\uC11C \uC2A4\uD06C\uB864\uD569\uB2C8\uB2E4. \uD2B8\uB799\uD328\uB4DC\uC5D0\uC11C \uC138\uB85C\uB85C \uC2A4\uD06C\uB864\uD560 \uB54C \uAC00\uB85C \uB4DC\uB9AC\uD504\uD2B8\uB97C \uBC29\uC9C0\uD569\uB2C8\uB2E4.","Linux \uC8FC \uD074\uB9BD\uBCF4\uB4DC\uC758 \uC9C0\uC6D0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uAC00 \uC120\uD0DD \uD56D\uBAA9\uACFC \uC720\uC0AC\uD55C \uC77C\uCE58 \uD56D\uBAA9\uC744 \uAC15\uC870 \uD45C\uC2DC\uD574\uC57C\uD558\uB294\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC811\uAE30 \uCEE8\uD2B8\uB864\uC744 \uD56D\uC0C1 \uD45C\uC2DC\uD569\uB2C8\uB2E4.","\uB9C8\uC6B0\uC2A4\uAC00 \uC5EC\uBC31 \uC704\uC5D0 \uC788\uC744 \uB54C\uC5D0\uB9CC \uC811\uAE30 \uCEE8\uD2B8\uB864\uC744 \uD45C\uC2DC\uD569\uB2C8\uB2E4.","\uC5EC\uBC31\uC758 \uC811\uAE30 \uCEE8\uD2B8\uB864\uC774 \uD45C\uC2DC\uB418\uB294 \uC2DC\uAE30\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC0AC\uC6A9\uD558\uC9C0 \uC54A\uB294 \uCF54\uB4DC\uC758 \uD398\uC774\uB4DC \uC544\uC6C3\uC744 \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uCDE8\uC18C\uC120 \uC0AC\uC6A9\uB418\uC9C0 \uC54A\uB294 \uBCC0\uC218\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uB2E4\uB978 \uC81C\uC548 \uC704\uC5D0 \uC870\uAC01 \uC81C\uC548\uC744 \uD45C\uC2DC\uD569\uB2C8\uB2E4.","\uB2E4\uB978 \uC81C\uC548 \uC544\uB798\uC5D0 \uC870\uAC01 \uC81C\uC548\uC744 \uD45C\uC2DC\uD569\uB2C8\uB2E4.","\uB2E4\uB978 \uC81C\uC548\uACFC \uD568\uAED8 \uC870\uAC01 \uC81C\uC548\uC744 \uD45C\uC2DC\uD569\uB2C8\uB2E4.","\uCF54\uB4DC \uC870\uAC01 \uC81C\uC548\uC744 \uD45C\uC2DC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.","\uCF54\uB4DC \uC870\uAC01\uC774 \uB2E4\uB978 \uCD94\uCC9C\uACFC \uD568\uAED8 \uD45C\uC2DC\uB418\uB294\uC9C0 \uC5EC\uBD80 \uBC0F \uC815\uB82C \uBC29\uBC95\uC744 \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uC560\uB2C8\uBA54\uC774\uC158\uC744 \uC0AC\uC6A9\uD558\uC5EC \uC2A4\uD06C\uB864\uD560\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uC81C\uC548 \uC704\uC82F\uC758 \uAE00\uAF34 \uD06C\uAE30\uC785\uB2C8\uB2E4. '0'\uC73C\uB85C \uC124\uC815\uD558\uBA74 '#editor.fontSize#'\uC758 \uAC12\uC774 \uC0AC\uC6A9\uB429\uB2C8\uB2E4.","\uC81C\uC548 \uC704\uC82F\uC758 \uC904 \uB192\uC774\uC785\uB2C8\uB2E4. '0'\uC73C\uB85C \uC124\uC815\uD558\uBA74 `#editor.lineHeight#`\uC758 \uAC12\uC774 \uC0AC\uC6A9\uB429\uB2C8\uB2E4. \uCD5C\uC19F\uAC12\uC740 8\uC785\uB2C8\uB2E4.","\uD2B8\uB9AC\uAC70 \uBB38\uC790\uB97C \uC785\uB825\uD560 \uB54C \uC81C\uC548\uC744 \uC790\uB3D9\uC73C\uB85C \uD45C\uC2DC\uD560\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uD56D\uC0C1 \uCCAB \uBC88\uC9F8 \uC81C\uC548\uC744 \uC120\uD0DD\uD569\uB2C8\uB2E4.","`log`\uAC00 \uCD5C\uADFC\uC5D0 \uC644\uB8CC\uB418\uC5C8\uC73C\uBBC0\uB85C \uCD94\uAC00 \uC785\uB825\uC5D0\uC11C \uC81C\uC548\uC744 \uC120\uD0DD\uD558\uC9C0 \uC54A\uC740 \uACBD\uC6B0 \uCD5C\uADFC \uC81C\uC548\uC744 \uC120\uD0DD\uD558\uC138\uC694(\uC608: `console.| -> console.log`).","\uD574\uB2F9 \uC81C\uC548\uC744 \uC644\uB8CC\uD55C \uC774\uC804 \uC811\uB450\uC0AC\uC5D0 \uB530\uB77C \uC81C\uC548\uC744 \uC120\uD0DD\uD569\uB2C8\uB2E4(\uC608: `co -> console` \uBC0F `con -> const`).","\uC81C\uC548 \uBAA9\uB85D\uC744 \uD45C\uC2DC\uD560 \uB54C \uC81C\uD55C\uC774 \uBBF8\uB9AC \uC120\uD0DD\uB418\uB294 \uBC29\uC2DD\uC744 \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uD0ED \uC644\uB8CC\uB294 \uD0ED\uC744 \uB204\uB97C \uB54C \uAC00\uC7A5 \uC77C\uCE58\uD558\uB294 \uC81C\uC548\uC744 \uC0BD\uC785\uD569\uB2C8\uB2E4.","\uD0ED \uC644\uC131\uC744 \uC0AC\uC6A9\uD558\uC9C0 \uC54A\uB3C4\uB85D \uC124\uC815\uD569\uB2C8\uB2E4.","\uC811\uB450\uC0AC\uAC00 \uC77C\uCE58\uD558\uB294 \uACBD\uC6B0 \uCF54\uB4DC \uC870\uAC01\uC744 \uD0ED \uC644\uB8CC\uD569\uB2C8\uB2E4. 'quickSuggestions'\uB97C \uC0AC\uC6A9\uD558\uC9C0 \uC54A\uC744 \uB54C \uAC00\uC7A5 \uC798 \uC791\uB3D9\uD569\uB2C8\uB2E4.","\uD0ED \uC644\uC131\uC744 \uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uD569\uB2C8\uB2E4.","\uBE44\uC815\uC0C1\uC801\uC778 \uC904 \uC885\uACB0\uC790\uAC00 \uC790\uB3D9\uC73C\uB85C \uC81C\uAC70\uB429\uB2C8\uB2E4.","\uBE44\uC815\uC0C1\uC801\uC778 \uC904 \uC885\uACB0\uC790\uAC00 \uBB34\uC2DC\uB429\uB2C8\uB2E4.","\uC81C\uAC70\uD560 \uBE44\uC815\uC0C1\uC801\uC778 \uC904 \uC885\uACB0\uC790 \uD504\uB86C\uD504\uD2B8\uC785\uB2C8\uB2E4.","\uBB38\uC81C\uB97C \uC77C\uC73C\uD0AC \uC218 \uC788\uB294 \uBE44\uC815\uC0C1\uC801\uC778 \uC904 \uC885\uACB0\uC790\uB97C \uC81C\uAC70\uD569\uB2C8\uB2E4.","\uD0ED \uC815\uC9C0 \uB4A4\uC5D0 \uACF5\uBC31\uC744 \uC0BD\uC785 \uBC0F \uC0AD\uC81C\uD569\uB2C8\uB2E4.","\uB2E8\uC5B4 \uAD00\uB828 \uD0D0\uC0C9 \uB610\uB294 \uC791\uC5C5\uC744 \uC218\uD589\uD560 \uB54C \uB2E8\uC5B4 \uAD6C\uBD84 \uAE30\uD638\uB85C \uC0AC\uC6A9\uD560 \uBB38\uC790\uC785\uB2C8\uB2E4.","\uC904\uC774 \uBC14\uB00C\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.","\uBDF0\uD3EC\uD2B8 \uB108\uBE44\uC5D0\uC11C \uC904\uC774 \uBC14\uB01D\uB2C8\uB2E4.","`#editor.wordWrapColumn#`\uC5D0\uC11C \uC904\uC774 \uBC14\uB01D\uB2C8\uB2E4.","\uBDF0\uD3EC\uD2B8\uC758 \uCD5C\uC18C\uAC12 \uBC0F `#editor.wordWrapColumn#`\uC5D0\uC11C \uC904\uC774 \uBC14\uB01D\uB2C8\uB2E4.","\uC904 \uBC14\uAFC8 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","`#editor.wordWrap#`\uC774 `wordWrapColumn` \uB610\uB294 'bounded'\uC778 \uACBD\uC6B0 \uD3B8\uC9D1\uAE30\uC758 \uC5F4 \uC904 \uBC14\uAFC8\uC744 \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uB4E4\uC5EC\uC4F0\uAE30\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \uC904 \uBC14\uAFC8 \uD589\uC774 \uC5F4 1\uC5D0\uC11C \uC2DC\uC791\uB429\uB2C8\uB2E4.","\uC904 \uBC14\uAFC8 \uD589\uC758 \uB4E4\uC5EC\uC4F0\uAE30\uAC00 \uBD80\uBAA8\uC640 \uB3D9\uC77C\uD569\uB2C8\uB2E4.","\uC904 \uBC14\uAFC8 \uD589\uC774 \uBD80\uBAA8 \uCABD\uC73C\uB85C +1\uB9CC\uD07C \uB4E4\uC5EC\uC4F0\uAE30\uB429\uB2C8\uB2E4.","\uC904 \uBC14\uAFC8 \uD589\uC774 \uBD80\uBAA8 \uCABD\uC73C\uB85C +2\uB9CC\uD07C \uB4E4\uC5EC\uC4F0\uAE30\uB429\uB2C8\uB2E4.","\uC904 \uBC14\uAFC8 \uD589\uC758 \uB4E4\uC5EC\uC4F0\uAE30\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uBAA8\uB4E0 \uBB38\uC790\uAC00 \uB3D9\uC77C\uD55C \uB108\uBE44\uB77C\uACE0 \uAC00\uC815\uD569\uB2C8\uB2E4. \uC774 \uC54C\uACE0\uB9AC\uC998\uC740 \uACE0\uC815 \uD3ED \uAE00\uAF34\uACFC \uBB38\uC790 \uBAA8\uC591\uC758 \uB108\uBE44\uAC00 \uAC19\uC740 \uD2B9\uC815 \uC2A4\uD06C\uB9BD\uD2B8(\uC608: \uB77C\uD2F4 \uBB38\uC790)\uC5D0 \uC801\uC808\uD788 \uC791\uB3D9\uD558\uB294 \uBE60\uB978 \uC54C\uACE0\uB9AC\uC998\uC785\uB2C8\uB2E4.","\uB798\uD551 \uC810 \uACC4\uC0B0\uC744 \uBE0C\uB77C\uC6B0\uC800\uC5D0 \uC704\uC784\uD569\uB2C8\uB2E4. \uC774 \uC54C\uACE0\uB9AC\uC998\uC740 \uB9E4\uC6B0 \uB290\uB824\uC11C \uB300\uC6A9\uB7C9 \uD30C\uC77C\uC758 \uACBD\uC6B0 \uC911\uB2E8\uB420 \uC218 \uC788\uC9C0\uB9CC \uBAA8\uB4E0 \uACBD\uC6B0\uC5D0 \uC801\uC808\uD788 \uC791\uB3D9\uD569\uB2C8\uB2E4.","\uB798\uD551 \uC810\uC744 \uACC4\uC0B0\uD558\uB294 \uC54C\uACE0\uB9AC\uC998\uC744 \uC81C\uC5B4\uD569\uB2C8\uB2E4."],"vs/editor/common/editorContextKeys":["Whether the editor text has focus (cursor is blinking)","Whether the editor or an editor widget has focus (e.g. focus is in the find widget)","Whether an editor or a rich text input has focus (cursor is blinking)","Whether the editor is read only","Whether the context is a diff editor","Whether `editor.columnSelection` is enabled","Whether the editor has text selected","Whether the editor has multiple selections","Whether `Tab` will move focus out of the editor","Whether the editor hover is visible","Whether the editor is part of a larger editor (e.g. notebooks)","The language identifier of the editor","Whether the editor has a completion item provider","Whether the editor has a code actions provider","Whether the editor has a code lens provider","Whether the editor has a definition provider","Whether the editor has a declaration provider","Whether the editor has an implementation provider","Whether the editor has a type definition provider","Whether the editor has a hover provider","Whether the editor has a document highlight provider","Whether the editor has a document symbol provider","Whether the editor has a reference provider","Whether the editor has a rename provider","Whether the editor has a signature help provider","Whether the editor has an inline hints provider","Whether the editor has a document formatting provider","Whether the editor has a document selection formatting provider","Whether the editor has multiple document formatting providers","Whether the editor has multiple document selection formatting providers"],"vs/editor/common/model/editStack":["\uC785\uB825\uD558\uB294 \uC911"],"vs/editor/common/modes/modesRegistry":["\uC77C\uBC18 \uD14D\uC2A4\uD2B8"],"vs/editor/common/standaloneStrings":["\uC5C6\uC74C \uC120\uD0DD","\uC904 {0}, \uC5F4 {1}({2} \uC120\uD0DD\uB428)\uC785\uB2C8\uB2E4.","\uD589 {0}, \uC5F4 {1}","{0} \uC120\uD0DD \uD56D\uBAA9({1}\uC790 \uC120\uD0DD\uB428)","{0} \uC120\uD0DD \uD56D\uBAA9","\uC774\uC81C 'accessibilitySupport' \uC124\uC815\uC744 'on'\uC73C\uB85C \uBCC0\uACBD\uD569\uB2C8\uB2E4.","\uC9C0\uAE08 \uD3B8\uC9D1\uAE30 \uC811\uADFC\uC131 \uBB38\uC11C \uD398\uC774\uC9C0\uB97C \uC5EC\uC138\uC694.","\uCC28\uC774 \uD3B8\uC9D1\uAE30\uC758 \uC77D\uAE30 \uC804\uC6A9 \uCC3D\uC5D0\uC11C.","diff \uD3B8\uC9D1\uAE30 \uCC3D\uC5D0\uC11C."," \uC77D\uAE30 \uC804\uC6A9 \uCF54\uB4DC \uD3B8\uC9D1\uAE30\uC5D0\uC11C"," \uCF54\uB4DC \uD3B8\uC9D1\uAE30\uC5D0\uC11C","\uD654\uBA74 \uD310\uB3C5\uAE30 \uC0AC\uC6A9\uC5D0 \uCD5C\uC801\uD654\uB418\uB3C4\uB85D \uD3B8\uC9D1\uAE30\uB97C \uAD6C\uC131\uD558\uB824\uBA74 \uC9C0\uAE08 Command+E\uB97C \uB204\uB974\uC138\uC694.","\uD654\uBA74 \uD310\uB3C5\uAE30\uC5D0 \uC0AC\uC6A9\uD560 \uC218 \uC788\uB3C4\uB85D \uD3B8\uC9D1\uAE30\uB97C \uCD5C\uC801\uD654\uD558\uB824\uBA74 \uC9C0\uAE08 Ctrl+E\uB97C \uB204\uB974\uC138\uC694.","\uC5D0\uB514\uD130\uB97C \uD654\uBA74 \uD310\uB3C5\uAE30\uC640 \uD568\uAED8 \uC0AC\uC6A9\uD558\uAE30\uC5D0 \uC801\uD569\uD558\uB3C4\uB85D \uAD6C\uC131\uD588\uC2B5\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uB294 \uD654\uBA74 \uD310\uB3C5\uAE30 \uC0AC\uC6A9\uC744 \uC704\uD574 \uC808\uB300\uB85C \uCD5C\uC801\uD654\uB418\uC9C0 \uC54A\uB3C4\uB85D \uAD6C\uC131\uB429\uB2C8\uB2E4. \uD604\uC7AC\uB85C\uC11C\uB294 \uADF8\uB807\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.","\uD604\uC7AC \uD3B8\uC9D1\uAE30\uC5D0\uC11C \uD0A4\uB97C \uB204\uB974\uBA74 \uD3EC\uCEE4\uC2A4\uAC00 \uB2E4\uC74C \uD3EC\uCEE4\uC2A4 \uAC00\uB2A5\uD55C \uC694\uC18C\uB85C \uC774\uB3D9\uD569\uB2C8\uB2E4. {0}\uC744(\uB97C) \uB20C\uB7EC\uC11C \uC774 \uB3D9\uC791\uC744 \uC124\uC815/\uD574\uC81C\uD569\uB2C8\uB2E4.","\uD604\uC7AC \uD3B8\uC9D1\uAE30\uC5D0\uC11C \uD0A4\uB97C \uB204\uB974\uBA74 \uD3EC\uCEE4\uC2A4\uAC00 \uB2E4\uC74C \uD3EC\uCEE4\uC2A4 \uAC00\uB2A5\uD55C \uC694\uC18C\uB85C \uC774\uB3D9\uD569\uB2C8\uB2E4. {0} \uBA85\uB839\uC740 \uD604\uC7AC \uD0A4 \uBC14\uC778\uB529\uC73C\uB85C \uD2B8\uB9AC\uAC70\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.","\uD604\uC7AC \uD3B8\uC9D1\uAE30\uC5D0\uC11C \uD0A4\uB97C \uB204\uB974\uBA74 \uD0ED \uBB38\uC790\uAC00 \uC0BD\uC785\uB429\uB2C8\uB2E4. {0}\uC744(\uB97C) \uB20C\uB7EC\uC11C \uC774 \uB3D9\uC791\uC744 \uC124\uC815/\uD574\uC81C\uD569\uB2C8\uB2E4.","\uD604\uC7AC \uD3B8\uC9D1\uAE30\uC5D0\uC11C \uD0A4\uB97C \uB204\uB974\uBA74 \uD0ED \uBB38\uC790\uAC00 \uC0BD\uC785\uB429\uB2C8\uB2E4. {0} \uBA85\uB839\uC740 \uD604\uC7AC \uD0A4 \uBC14\uC778\uB529\uC73C\uB85C \uD2B8\uB9AC\uAC70\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.","Command+H\uB97C \uB20C\uB7EC \uD3B8\uC9D1\uAE30 \uC811\uADFC\uC131\uACFC \uAD00\uB828\uB41C \uC790\uC138\uD55C \uC815\uBCF4\uAC00 \uC788\uB294 \uBE0C\uB77C\uC6B0\uC800 \uCC3D\uC744 \uC5EC\uC138\uC694.","Ctrl+H\uB97C \uB20C\uB7EC \uD3B8\uC9D1\uAE30 \uC811\uADFC\uC131\uACFC \uAD00\uB828\uB41C \uC790\uC138\uD55C \uC815\uBCF4\uAC00 \uC788\uB294 \uBE0C\uB77C\uC6B0\uC800 \uCC3D\uC744 \uC5FD\uB2C8\uB2E4.","\uC774 \uB3C4\uAD6C \uC124\uBA85\uC744 \uD574\uC81C\uD558\uACE0 Esc \uD0A4 \uB610\uB294 Shift+Esc\uB97C \uB20C\uB7EC\uC11C \uD3B8\uC9D1\uAE30\uB85C \uB3CC\uC544\uAC08 \uC218 \uC788\uC2B5\uB2C8\uB2E4.","\uC811\uADFC\uC131 \uB3C4\uC6C0\uB9D0 \uD45C\uC2DC","\uAC1C\uBC1C\uC790: \uAC80\uC0AC \uD1A0\uD070","\uC904/\uC5F4\uB85C \uC774\uB3D9...","\uBE60\uB978 \uC561\uC138\uC2A4 \uACF5\uAE09\uC790 \uBAA8\uB450 \uD45C\uC2DC","\uBA85\uB839 \uD314\uB808\uD2B8","\uBA85\uB839 \uD45C\uC2DC \uBC0F \uC2E4\uD589","\uAE30\uD638\uB85C \uAC00\uC11C...","\uBC94\uC8FC\uBCC4 \uAE30\uD638\uB85C \uC774\uB3D9...","\uD3B8\uC9D1\uAE30 \uCF58\uD150\uCE20","\uC811\uADFC\uC131 \uC635\uC158\uC740 Alt+F1\uC744 \uB20C\uB7EC\uC5EC \uD569\uB2C8\uB2E4.","\uACE0\uB300\uBE44 \uD14C\uB9C8\uB85C \uC804\uD658","{1} \uD30C\uC77C\uC5D0\uC11C \uD3B8\uC9D1\uC744 {0}\uAC1C \uD588\uC2B5\uB2C8\uB2E4."],"vs/editor/common/view/editorColorRegistry":["\uCEE4\uC11C \uC704\uCE58\uC758 \uC904 \uAC15\uC870 \uD45C\uC2DC\uC5D0 \uB300\uD55C \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uCEE4\uC11C \uC704\uCE58\uC758 \uC904 \uD14C\uB450\uB9AC\uC5D0 \uB300\uD55C \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uBE60\uB978 \uC5F4\uAE30 \uBC0F \uCC3E\uAE30 \uAE30\uB2A5 \uB4F1\uC744 \uD1B5\uD574 \uAC15\uC870 \uD45C\uC2DC\uB41C \uC601\uC5ED\uC758 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uAE30\uBCF8 \uC7A5\uC2DD\uC744 \uC228\uAE30\uC9C0 \uC54A\uB3C4\uB85D \uC0C9\uC740 \uBD88\uD22C\uBA85\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4.","\uAC15\uC870 \uC601\uC5ED \uC8FC\uBCC0\uC758 \uD14C\uB450\uB9AC\uC5D0 \uB300\uD55C \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4","\uAC15\uC870 \uD45C\uC2DC\uB41C \uAE30\uD638(\uC608: \uC815\uC758\uB85C \uC774\uB3D9 \uB610\uB294 \uB2E4\uC74C/\uC774\uC804 \uAE30\uD638\uB85C \uC774\uB3D9)\uC758 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774 \uC0C9\uC0C1\uC740 \uAE30\uBCF8 \uC7A5\uC2DD\uC744 \uC228\uAE30\uC9C0 \uC54A\uB3C4\uB85D \uBD88\uD22C\uBA85\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4.","\uAC15\uC870 \uD45C\uC2DC\uB41C \uAE30\uD638 \uC8FC\uC704\uC758 \uD14C\uB450\uB9AC \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uCEE4\uC11C \uC0C9\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uCEE4\uC11C\uC758 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uBE14\uB85D \uCEE4\uC11C\uC640 \uACB9\uCE58\uB294 \uAE00\uC790\uC758 \uC0C9\uC0C1\uC744 \uC0AC\uC6A9\uC790 \uC815\uC758\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC758 \uACF5\uBC31 \uBB38\uC790 \uC0C9\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uB4E4\uC5EC\uC4F0\uAE30 \uC548\uB0B4\uC120 \uC0C9\uC785\uB2C8\uB2E4.","\uD65C\uC131 \uD3B8\uC9D1\uAE30 \uB4E4\uC5EC\uC4F0\uAE30 \uC548\uB0B4\uC120 \uC0C9\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uC904 \uBC88\uD638 \uC0C9\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uD65C\uC131 \uC601\uC5ED \uC904\uBC88\uD638 \uC0C9\uC0C1","ID\uB294 \uC0AC\uC6A9\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uB300\uC2E0 'editorLineNumber.activeForeground'\uB97C \uC0AC\uC6A9\uD558\uC138\uC694.","\uD3B8\uC9D1\uAE30 \uD65C\uC131 \uC601\uC5ED \uC904\uBC88\uD638 \uC0C9\uC0C1","\uD3B8\uC9D1\uAE30 \uB208\uAE08\uC758 \uC0C9\uC0C1\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uCF54\uB4DC \uB80C\uC988\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uC77C\uCE58\uD558\uB294 \uAD04\uD638 \uB4A4\uC758 \uBC30\uACBD\uC0C9","\uC77C\uCE58\uD558\uB294 \uBE0C\uB798\uD0B7 \uBC15\uC2A4\uC758 \uC0C9\uC0C1","\uAC1C\uC694 \uB208\uAE08 \uACBD\uACC4\uC758 \uC0C9\uC0C1\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uAC1C\uC694 \uB208\uAE08\uC790\uC758 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uBBF8\uB2C8\uB9F5\uC774 \uC0AC\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uB418\uC5B4 \uD3B8\uC9D1\uAE30\uC758 \uC624\uB978\uCABD\uC5D0 \uBC30\uCE58\uB41C \uACBD\uC6B0\uC5D0\uB9CC \uC0AC\uC6A9\uB429\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uAC70\uD130\uC758 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uAC70\uD130\uC5D0\uB294 \uAE00\uB9AC\uD504 \uC5EC\uBC31\uACFC \uD589 \uC218\uAC00 \uC788\uC2B5\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC758 \uBD88\uD544\uC694\uD55C(\uC0AC\uC6A9\uD558\uC9C0 \uC54A\uB294) \uC18C\uC2A4 \uCF54\uB4DC \uD14C\uB450\uB9AC \uC0C9\uC785\uB2C8\uB2E4.",`\uD3B8\uC9D1\uAE30\uC758 \uBD88\uD544\uC694\uD55C(\uC0AC\uC6A9\uD558\uC9C0 \uC54A\uB294) \uC18C\uC2A4 \uCF54\uB4DC \uBD88\uD22C\uBA85\uB3C4\uC785\uB2C8\uB2E4. \uC608\uB97C \uB4E4\uC5B4 "#000000c0"\uC740 75% \uBD88\uD22C\uBA85\uB3C4\uB85C \uCF54\uB4DC\uB97C \uB80C\uB354\uB9C1\uD569\uB2C8\uB2E4. \uACE0\uB300\uBE44 \uD14C\uB9C8\uC758 \uACBD\uC6B0 \uD398\uC774\uB4DC \uC544\uC6C3\uD558\uC9C0 \uC54A\uACE0 'editorUnnecessaryCode.border' \uD14C\uB9C8 \uC0C9\uC744 \uC0AC\uC6A9\uD558\uC5EC \uBD88\uD544\uC694\uD55C \uCF54\uB4DC\uC5D0 \uBC11\uC904\uC744 \uADF8\uC73C\uC138\uC694.`,"\uBC94\uC704\uC758 \uAC1C\uC694 \uB208\uAE08\uC790 \uD45C\uC2DD \uC0C9\uC774 \uAC15\uC870 \uD45C\uC2DC\uB429\uB2C8\uB2E4. \uAE30\uBCF8 \uC7A5\uC2DD\uC744 \uC228\uAE30\uC9C0 \uC54A\uB3C4\uB85D \uC0C9\uC740 \uBD88\uD22C\uBA85\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4.","\uC624\uB958\uC758 \uAC1C\uC694 \uB208\uAE08\uC790 \uB9C8\uCEE4 \uC0C9\uC785\uB2C8\uB2E4.","\uACBD\uACE0\uC758 \uAC1C\uC694 \uB208\uAE08\uC790 \uB9C8\uCEE4 \uC0C9\uC785\uB2C8\uB2E4.","\uC815\uBCF4\uC758 \uAC1C\uC694 \uB208\uAE08\uC790 \uB9C8\uCEE4 \uC0C9\uC785\uB2C8\uB2E4."],"vs/editor/contrib/anchorSelect/anchorSelect":["\uC120\uD0DD \uC575\uCEE4 \uC9C0\uC810","{0}\uC5D0 \uC124\uC815\uB41C \uC575\uCEE4: {1}","\uC120\uD0DD \uC575\uCEE4 \uC9C0\uC810 \uC124\uC815","\uC120\uD0DD \uC575\uCEE4 \uC9C0\uC810\uC73C\uB85C \uC774\uB3D9","\uC575\uCEE4\uC5D0\uC11C \uCEE4\uC11C\uB85C \uC120\uD0DD","\uC120\uD0DD \uC575\uCEE4 \uC9C0\uC810 \uCDE8\uC18C"],"vs/editor/contrib/bracketMatching/bracketMatching":["\uAD04\uD638\uC5D0 \uD574\uB2F9\uD558\uB294 \uC601\uC5ED\uC744 \uD45C\uC2DC\uC790\uC5D0 \uCC44\uC0C9\uD558\uC5EC \uD45C\uC2DC\uD569\uB2C8\uB2E4.","\uB300\uAD04\uD638\uB85C \uC774\uB3D9","\uAD04\uD638\uAE4C\uC9C0 \uC120\uD0DD","\uB300\uAD04\uD638\uB85C \uC774\uB3D9(&&B)"],"vs/editor/contrib/caretOperations/caretOperations":["\uC120\uD0DD\uD55C \uD14D\uC2A4\uD2B8\uB97C \uC67C\uCABD\uC73C\uB85C \uC774\uB3D9","\uC120\uD0DD\uD55C \uD14D\uC2A4\uD2B8\uB97C \uC624\uB978\uCABD\uC73C\uB85C \uC774\uB3D9"],"vs/editor/contrib/caretOperations/transpose":["\uBB38\uC790 \uBC14\uAFB8\uAE30"],"vs/editor/contrib/clipboard/clipboard":["\uC798\uB77C\uB0B4\uAE30(&&T)","\uC798\uB77C\uB0B4\uAE30","\uC798\uB77C\uB0B4\uAE30","\uBCF5\uC0AC(&&C)","\uBCF5\uC0AC","\uBCF5\uC0AC","\uBD99\uC5EC\uB123\uAE30(&&P)","\uBD99\uC5EC\uB123\uAE30","\uBD99\uC5EC\uB123\uAE30","\uAD6C\uBB38\uC744 \uAC15\uC870 \uD45C\uC2DC\uD558\uC5EC \uBCF5\uC0AC"],"vs/editor/contrib/codeAction/codeActionCommands":["\uC2E4\uD589\uD560 \uCF54\uB4DC \uC791\uC5C5\uC758 \uC885\uB958\uC785\uB2C8\uB2E4.","\uBC18\uD658\uB41C \uC791\uC5C5\uC774 \uC801\uC6A9\uB418\uB294 \uACBD\uC6B0\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uD56D\uC0C1 \uBC18\uD658\uB41C \uCCAB \uBC88\uC9F8 \uCF54\uB4DC \uC791\uC5C5\uC744 \uC801\uC6A9\uD569\uB2C8\uB2E4.","\uCCAB \uBC88\uC9F8 \uBC18\uD658\uB41C \uCF54\uB4DC \uC791\uC5C5\uC744 \uC801\uC6A9\uD569\uB2C8\uB2E4(\uC774 \uC791\uC5C5\uB9CC \uC788\uB294 \uACBD\uC6B0).","\uBC18\uD658\uB41C \uCF54\uB4DC \uC791\uC5C5\uC744 \uC801\uC6A9\uD558\uC9C0 \uB9C8\uC138\uC694.","\uAE30\uBCF8 \uCF54\uB4DC \uC791\uC5C5\uB9CC \uBC18\uD658\uB418\uB3C4\uB85D \uD560\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uCF54\uB4DC \uC791\uC5C5\uC744 \uC801\uC6A9\uD558\uB294 \uC911 \uC54C \uC218 \uC5C6\uB294 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.","\uBE60\uB978 \uC218\uC815...","\uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uCF54\uB4DC \uB3D9\uC791\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.","'{0}'\uC5D0 \uB300\uD55C \uAE30\uBCF8 \uCF54\uB4DC \uC791\uC5C5\uC744 \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC74C","'{0}'\uC5D0 \uB300\uD55C \uCF54\uB4DC \uC791\uC5C5\uC744 \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC74C","\uC0AC\uC6A9\uD560 \uC218 \uC788\uB294 \uAE30\uBCF8 \uCF54\uB4DC \uC791\uC5C5 \uC5C6\uC74C","\uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uCF54\uB4DC \uB3D9\uC791\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.","\uB9AC\uD329\uD130\uB9C1...","'{0}'\uC5D0 \uB300\uD55C \uAE30\uBCF8 \uB9AC\uD329\uD130\uB9C1 \uC5C6\uC74C","'{0}'\uC5D0 \uB300\uD55C \uB9AC\uD329\uD130\uB9C1 \uC5C6\uC74C","\uAE30\uBCF8 \uC124\uC815 \uB9AC\uD329\uD130\uB9C1\uC744 \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC74C","\uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uB9AC\uD399\uD130\uB9C1\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.","\uC18C\uC2A4 \uC791\uC5C5...","'{0}'\uC5D0 \uB300\uD55C \uAE30\uBCF8 \uC18C\uC2A4 \uC791\uC5C5\uC744 \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC74C","'{0}'\uC5D0 \uB300\uD55C \uC18C\uC2A4 \uC791\uC5C5\uC744 \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC74C","\uC0AC\uC6A9\uD560 \uC218 \uC788\uB294 \uAE30\uBCF8 \uC6D0\uBCF8 \uC791\uC5C5 \uC5C6\uC74C","\uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uC18C\uC2A4 \uC791\uC5C5\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.","\uAC00\uC838\uC624\uAE30 \uAD6C\uC131","\uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uAC00\uC838\uC624\uAE30 \uAD6C\uC131 \uC791\uC5C5\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.","\uBAA8\uB450 \uC218\uC815","\uBAA8\uB4E0 \uC791\uC5C5 \uC218\uC815 \uC0AC\uC6A9 \uBD88\uAC00","\uC790\uB3D9 \uC218\uC815...","\uC0AC\uC6A9\uD560 \uC218 \uC788\uB294 \uC790\uB3D9 \uC218\uC815 \uC5C6\uC74C"],"vs/editor/contrib/codeAction/lightBulbWidget":["\uC218\uC815 \uC0AC\uD56D\uC744 \uD45C\uC2DC\uD569\uB2C8\uB2E4. \uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uAE30\uBCF8 \uC218\uC815({0})","\uC218\uC815 \uC0AC\uD56D \uD45C\uC2DC({0})","\uC218\uC815 \uC0AC\uD56D \uD45C\uC2DC"],"vs/editor/contrib/codelens/codelensController":["\uD604\uC7AC \uC904\uC5D0 \uB300\uD55C \uCF54\uB4DC \uB80C\uC988 \uBA85\uB839 \uD45C\uC2DC"],"vs/editor/contrib/comment/comment":["\uC904 \uC8FC\uC11D \uC124\uC815/\uD574\uC81C","\uC904 \uC8FC\uC11D \uC124\uC815/\uD574\uC81C(&&T)","\uC904 \uC8FC\uC11D \uCD94\uAC00","\uC904 \uC8FC\uC11D \uC81C\uAC70","\uBE14\uB85D \uC8FC\uC11D \uC124\uC815/\uD574\uC81C","\uBE14\uB85D \uC8FC\uC11D \uC124\uC815/\uD574\uC81C(&&B)"],"vs/editor/contrib/contextmenu/contextmenu":["\uD3B8\uC9D1\uAE30 \uC0C1\uD669\uC5D0 \uB9DE\uB294 \uBA54\uB274 \uD45C\uC2DC"],"vs/editor/contrib/cursorUndo/cursorUndo":["\uCEE4\uC11C \uC2E4\uD589 \uCDE8\uC18C","\uCEE4\uC11C \uB2E4\uC2DC \uC2E4\uD589"],"vs/editor/contrib/find/findController":["\uCC3E\uAE30","\uCC3E\uAE30(&&F)","\uC120\uD0DD \uC601\uC5ED\uC5D0\uC11C \uCC3E\uAE30","\uB2E4\uC74C \uCC3E\uAE30","\uB2E4\uC74C \uCC3E\uAE30","\uC774\uC804 \uCC3E\uAE30","\uC774\uC804 \uCC3E\uAE30","\uB2E4\uC74C \uC120\uD0DD \uCC3E\uAE30","\uC774\uC804 \uC120\uD0DD \uCC3E\uAE30","\uBC14\uAFB8\uAE30","\uBC14\uAFB8\uAE30(&&R)"],"vs/editor/contrib/find/findWidget":["\uD3B8\uC9D1\uAE30 \uCC3E\uAE30 \uC704\uC82F\uC5D0\uC11C '\uC120\uD0DD \uC601\uC5ED\uC5D0\uC11C \uCC3E\uAE30'\uC758 \uC544\uC774\uCF58\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uCC3E\uAE30 \uC704\uC82F\uC774 \uCD95\uC18C\uB418\uC5C8\uC74C\uC744 \uB098\uD0C0\uB0B4\uB294 \uC544\uC774\uCF58\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uCC3E\uAE30 \uC704\uC82F\uC774 \uD655\uC7A5\uB418\uC5C8\uC74C\uC744 \uB098\uD0C0\uB0B4\uB294 \uC544\uC774\uCF58\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uCC3E\uAE30 \uC704\uC82F\uC5D0\uC11C '\uBC14\uAFB8\uAE30'\uC758 \uC544\uC774\uCF58\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uCC3E\uAE30 \uC704\uC82F\uC5D0\uC11C '\uBAA8\uB450 \uBC14\uAFB8\uAE30'\uC758 \uC544\uC774\uCF58\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uCC3E\uAE30 \uC704\uC82F\uC5D0\uC11C '\uC774\uC804 \uCC3E\uAE30'\uC758 \uC544\uC774\uCF58\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uCC3E\uAE30 \uC704\uC82F\uC5D0\uC11C '\uB2E4\uC74C \uCC3E\uAE30'\uC758 \uC544\uC774\uCF58\uC785\uB2C8\uB2E4.","\uCC3E\uAE30","\uCC3E\uAE30","\uC774\uC804 \uC77C\uCE58","\uB2E4\uC74C \uC77C\uCE58 \uD56D\uBAA9","\uC120\uD0DD \uD56D\uBAA9\uC5D0\uC11C \uCC3E\uAE30","\uB2EB\uAE30","\uBC14\uAFB8\uAE30","\uBC14\uAFB8\uAE30","\uBC14\uAFB8\uAE30","\uBAA8\uB450 \uBC14\uAFB8\uAE30","\uBC14\uAFB8\uAE30 \uBAA8\uB4DC \uC124\uC815/\uD574\uC81C","\uCC98\uC74C {0}\uAC1C\uC758 \uACB0\uACFC\uAC00 \uAC15\uC870 \uD45C\uC2DC\uB418\uC9C0\uB9CC \uBAA8\uB4E0 \uCC3E\uAE30 \uC791\uC5C5\uC740 \uC804\uCCB4 \uD14D\uC2A4\uD2B8\uC5D0 \uB300\uD574 \uC218\uD589\uB429\uB2C8\uB2E4.","{1}\uC758 {0}","\uACB0\uACFC \uC5C6\uC74C","{0}\uAC1C \uCC3E\uC74C","'{1}'\uC5D0 \uB300\uD55C {0}\uC744(\uB97C) \uCC3E\uC74C","{2}\uC5D0\uC11C '{1}'\uC5D0 \uB300\uD55C {0}\uC744(\uB97C) \uCC3E\uC74C","'{1}'\uC5D0 \uB300\uD55C {0}\uC744(\uB97C) \uCC3E\uC74C","Ctrl+Enter\uB97C \uB204\uB974\uBA74 \uC774\uC81C \uBAA8\uB4E0 \uD56D\uBAA9\uC744 \uBC14\uAFB8\uC9C0 \uC54A\uACE0 \uC904 \uBC14\uAFC8\uC744 \uC0BD\uC785\uD569\uB2C8\uB2E4. editor.action.replaceAll\uC758 \uD0A4 \uBC14\uC778\uB529\uC744 \uC218\uC815\uD558\uC5EC \uC774 \uB3D9\uC791\uC744 \uC7AC\uC815\uC758\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4."],"vs/editor/contrib/folding/folding":["\uD3BC\uCE58\uAE30","\uC7AC\uADC0\uC801\uC73C\uB85C \uD3BC\uCE58\uAE30","\uC811\uAE30","\uC811\uAE30 \uC804\uD658","\uC7AC\uADC0\uC801\uC73C\uB85C \uC811\uAE30","\uBAA8\uB4E0 \uBE14\uB85D \uCF54\uBA58\uD2B8\uB97C \uC811\uAE30","\uBAA8\uB4E0 \uC601\uC5ED \uC811\uAE30","\uBAA8\uB4E0 \uC601\uC5ED \uD3BC\uCE58\uAE30","\uBAA8\uB450 \uC811\uAE30","\uBAA8\uB450 \uD3BC\uCE58\uAE30","\uC218\uC900 {0} \uC811\uAE30","\uC811\uD78C \uBC94\uC704\uC758 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC0C9\uC740 \uAE30\uBCF8 \uC7A5\uC2DD\uC744 \uC228\uAE30\uC9C0 \uC54A\uAE30 \uC704\uD574 \uBD88\uD22C\uBA85\uD574\uC11C\uB294 \uC548 \uB429\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uC5EC\uBC31\uC758 \uC811\uAE30 \uCEE8\uD2B8\uB864 \uC0C9\uC785\uB2C8\uB2E4."],"vs/editor/contrib/folding/foldingDecorations":["\uD3B8\uC9D1\uAE30 \uBB38\uC790 \uBAA8\uC591 \uC5EC\uBC31\uC5D0\uC11C \uD655\uC7A5\uB41C \uBC94\uC704\uC758 \uC544\uC774\uCF58\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uBB38\uC790 \uBAA8\uC591 \uC5EC\uBC31\uC5D0\uC11C \uCD95\uC18C\uB41C \uBC94\uC704\uC758 \uC544\uC774\uCF58\uC785\uB2C8\uB2E4."],"vs/editor/contrib/fontZoom/fontZoom":["\uD3B8\uC9D1\uAE30 \uAE00\uAF34 \uD655\uB300","\uD3B8\uC9D1\uAE30 \uAE00\uAF34 \uCD95\uC18C","\uD3B8\uC9D1\uAE30 \uAE00\uAF34 \uD655\uB300/\uCD95\uC18C \uB2E4\uC2DC \uC124\uC815"],"vs/editor/contrib/format/format":["\uC904 {0}\uC5D0\uC11C 1\uAC1C \uC11C\uC2DD \uD3B8\uC9D1\uC744 \uC218\uD589\uD588\uC2B5\uB2C8\uB2E4.","\uC904 {1}\uC5D0\uC11C {0}\uAC1C \uC11C\uC2DD \uD3B8\uC9D1\uC744 \uC218\uD589\uD588\uC2B5\uB2C8\uB2E4.","\uC904 {0}\uACFC(\uC640) {1} \uC0AC\uC774\uC5D0\uC11C 1\uAC1C \uC11C\uC2DD \uD3B8\uC9D1\uC744 \uC218\uD589\uD588\uC2B5\uB2C8\uB2E4.","\uC904 {1}\uACFC(\uC640) {2} \uC0AC\uC774\uC5D0\uC11C {0}\uAC1C \uC11C\uC2DD \uD3B8\uC9D1\uC744 \uC218\uD589\uD588\uC2B5\uB2C8\uB2E4."],"vs/editor/contrib/format/formatActions":["\uBB38\uC11C \uC11C\uC2DD","\uC120\uD0DD \uC601\uC5ED \uC11C\uC2DD"],"vs/editor/contrib/gotoError/gotoError":["\uB2E4\uC74C \uBB38\uC81C\uB85C \uC774\uB3D9 (\uC624\uB958, \uACBD\uACE0, \uC815\uBCF4)","\uB2E4\uC74C \uB9C8\uCEE4\uB85C \uC774\uB3D9\uC758 \uC544\uC774\uCF58\uC785\uB2C8\uB2E4.","\uC774\uC804 \uBB38\uC81C\uB85C \uC774\uB3D9 (\uC624\uB958, \uACBD\uACE0, \uC815\uBCF4)","\uC774\uC804 \uB9C8\uCEE4\uB85C \uC774\uB3D9\uC758 \uC544\uC774\uCF58\uC785\uB2C8\uB2E4.","\uD30C\uC77C\uC758 \uB2E4\uC74C \uBB38\uC81C\uB85C \uC774\uB3D9 (\uC624\uB958, \uACBD\uACE0, \uC815\uBCF4)","\uB2E4\uC74C \uBB38\uC81C(&&P)","\uD30C\uC77C\uC758 \uC774\uC804 \uBB38\uC81C\uB85C \uC774\uB3D9 (\uC624\uB958, \uACBD\uACE0, \uC815\uBCF4)","\uC774\uC804 \uBB38\uC81C(&&P)"],"vs/editor/contrib/gotoError/gotoErrorWidget":["\uC624\uB958","\uACBD\uACE0","\uC815\uBCF4","\uD78C\uD2B8","{1}\uC758 {0}\uC785\uB2C8\uB2E4. ","\uBB38\uC81C {1}\uAC1C \uC911 {0}\uAC1C","\uBB38\uC81C {1}\uAC1C \uC911 {0}\uAC1C","\uD3B8\uC9D1\uAE30 \uD45C\uC2DD \uD0D0\uC0C9 \uC704\uC82F \uC624\uB958 \uC0C9\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uD45C\uC2DD \uD0D0\uC0C9 \uC704\uC82F \uACBD\uACE0 \uC0C9\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uD45C\uC2DD \uD0D0\uC0C9 \uC704\uC82F \uC815\uBCF4 \uC0C9\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uD45C\uC2DD \uD0D0\uC0C9 \uC704\uC82F \uBC30\uACBD\uC785\uB2C8\uB2E4."],"vs/editor/contrib/gotoSymbol/goToCommands":["\uD53C\uD0B9","\uC815\uC758","'{0}'\uC5D0 \uB300\uD55C \uC815\uC758\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.","\uC815\uC758\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC74C","\uC815\uC758\uB85C \uC774\uB3D9","\uC815\uC758\uB85C \uC774\uB3D9(&&D)","\uCE21\uBA74\uC5D0\uC11C \uC815\uC758 \uC5F4\uAE30","\uC815\uC758 \uD53C\uD0B9","\uC120\uC5B8","'{0}'\uC5D0 \uB300\uD55C \uC120\uC5B8\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC74C","\uC120\uC5B8\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC74C","\uC120\uC5B8\uC73C\uB85C \uC774\uB3D9","\uC120\uC5B8\uC73C\uB85C \uC774\uB3D9(&&D)","'{0}'\uC5D0 \uB300\uD55C \uC120\uC5B8\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC74C","\uC120\uC5B8\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC74C","\uC120\uC5B8 \uBBF8\uB9AC \uBCF4\uAE30","\uD615\uC2DD \uC815\uC758","'{0}'\uC5D0 \uB300\uD55C \uD615\uC2DD \uC815\uC758\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.","\uD615\uC2DD \uC815\uC758\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.","\uD615\uC2DD \uC815\uC758\uB85C \uC774\uB3D9","\uD615\uC2DD \uC815\uC758\uB85C \uC774\uB3D9(&&T)","\uD615\uC2DD \uC815\uC758 \uBBF8\uB9AC \uBCF4\uAE30","\uAD6C\uD604","'{0}'\uC5D0 \uB300\uD55C \uAD6C\uD604\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.","\uAD6C\uD604\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.","\uAD6C\uD604\uC73C\uB85C \uC774\uB3D9","\uAD6C\uD604\uC73C\uB85C \uC774\uB3D9(&&I)","\uD53C\uD0B9 \uAD6C\uD604","'{0}'\uC5D0 \uB300\uD55C \uCC38\uC870\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.","\uCC38\uC870\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.","\uCC38\uC870\uB85C \uC774\uB3D9","\uCC38\uC870\uB85C \uC774\uB3D9(&&R)","\uCC38\uC870","\uCC38\uC870 \uBBF8\uB9AC \uBCF4\uAE30","\uCC38\uC870","\uAE30\uD638\uB85C \uC774\uB3D9","\uC704\uCE58","'{0}'\uC5D0 \uB300\uD55C \uAC80\uC0C9 \uACB0\uACFC\uAC00 \uC5C6\uC74C","\uCC38\uC870"],"vs/editor/contrib/gotoSymbol/link/goToDefinitionAtPosition":["{0}\uAC1C \uC815\uC758\uB97C \uD45C\uC2DC\uD558\uB824\uBA74 \uD074\uB9AD\uD558\uC138\uC694."],"vs/editor/contrib/gotoSymbol/peek/referencesController":["\uB85C\uB4DC \uC911...","{0}({1})"],"vs/editor/contrib/gotoSymbol/peek/referencesTree":["\uCC38\uC870 {0}\uAC1C","\uCC38\uC870 {0}\uAC1C","\uCC38\uC870"],"vs/editor/contrib/gotoSymbol/peek/referencesWidget":["\uBBF8\uB9AC \uBCF4\uAE30\uB97C \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC74C","\uACB0\uACFC \uC5C6\uC74C","\uCC38\uC870"],"vs/editor/contrib/gotoSymbol/referencesModel":["{2}\uC5F4, {1}\uC904, {0}\uC758 \uAE30\uD638","\uC5F4 {2}, {3}\uC758 \uC904 {1}\uC5D0 \uC788\uB294 {0}\uC758 \uAE30\uD638","{0}\uC758 \uAE30\uD638 1\uAC1C, \uC804\uCCB4 \uACBD\uB85C {1}","{1}\uC758 \uAE30\uD638 {0}\uAC1C, \uC804\uCCB4 \uACBD\uB85C {2}","\uACB0\uACFC \uC5C6\uC74C","{0}\uC5D0\uC11C \uAE30\uD638 1\uAC1C\uB97C \uCC3E\uC558\uC2B5\uB2C8\uB2E4.","{1}\uC5D0\uC11C \uAE30\uD638 {0}\uAC1C\uB97C \uCC3E\uC558\uC2B5\uB2C8\uB2E4.","{1}\uAC1C \uD30C\uC77C\uC5D0\uC11C \uAE30\uD638 {0}\uAC1C\uB97C \uCC3E\uC558\uC2B5\uB2C8\uB2E4."],"vs/editor/contrib/gotoSymbol/symbolNavigation":["{1}\uC758 {0} \uAE30\uD638, \uB2E4\uC74C\uC758 \uACBD\uC6B0 {2}","{1}\uC758 \uAE30\uD638 {0}"],"vs/editor/contrib/hover/hover":["\uAC00\uB9AC\uD0A4\uAE30 \uD45C\uC2DC","\uC815\uC758 \uBBF8\uB9AC \uBCF4\uAE30 \uAC00\uB9AC\uD0A8 \uD56D\uBAA9 \uD45C\uC2DC"],"vs/editor/contrib/hover/markdownHoverParticipant":["\uB85C\uB4DC \uC911..."],"vs/editor/contrib/hover/markerHoverParticipant":["View Problem","\uBE60\uB978 \uC218\uC815\uC744 \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC74C","\uBE60\uB978 \uC218\uC815\uC744 \uD655\uC778\uD558\uB294 \uC911...","\uBE60\uB978 \uC218\uC815\uC744 \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC74C","\uBE60\uB978 \uC218\uC815..."],"vs/editor/contrib/inPlaceReplace/inPlaceReplace":["\uC774\uC804 \uAC12\uC73C\uB85C \uBC14\uAFB8\uAE30","\uB2E4\uC74C \uAC12\uC73C\uB85C \uBC14\uAFB8\uAE30"],"vs/editor/contrib/indentation/indentation":["\uB4E4\uC5EC\uC4F0\uAE30\uB97C \uACF5\uBC31\uC73C\uB85C \uBCC0\uD658","\uB4E4\uC5EC\uC4F0\uAE30\uB97C \uD0ED\uC73C\uB85C \uBCC0\uD658","\uAD6C\uC131\uB41C \uD0ED \uD06C\uAE30","\uD604\uC7AC \uD30C\uC77C\uC758 \uD0ED \uD06C\uAE30 \uC120\uD0DD","\uD0ED\uC744 \uC0AC\uC6A9\uD55C \uB4E4\uC5EC\uC4F0\uAE30","\uACF5\uBC31\uC744 \uC0AC\uC6A9\uD55C \uB4E4\uC5EC\uC4F0\uAE30","\uCF58\uD150\uCE20\uC5D0\uC11C \uB4E4\uC5EC\uC4F0\uAE30 \uAC10\uC9C0","\uC904 \uB2E4\uC2DC \uB4E4\uC5EC\uC4F0\uAE30","\uC120\uD0DD\uD55C \uC904 \uB2E4\uC2DC \uB4E4\uC5EC\uC4F0\uAE30"],"vs/editor/contrib/linesOperations/linesOperations":["\uC704\uC5D0 \uC904 \uBCF5\uC0AC","\uC704\uC5D0 \uC904 \uBCF5\uC0AC(&&C)","\uC544\uB798\uC5D0 \uC904 \uBCF5\uC0AC","\uC544\uB798\uC5D0 \uC904 \uBCF5\uC0AC(&&P)","\uC911\uBCF5\uB41C \uC120\uD0DD \uC601\uC5ED","\uC911\uBCF5\uB41C \uC120\uD0DD \uC601\uC5ED(&&D)","\uC904 \uC704\uB85C \uC774\uB3D9","\uC904 \uC704\uB85C \uC774\uB3D9(&&V)","\uC904 \uC544\uB798\uB85C \uC774\uB3D9","\uC904 \uC544\uB798\uB85C \uC774\uB3D9(&&L)","\uC904\uC744 \uC624\uB984\uCC28\uC21C \uC815\uB82C","\uC904\uC744 \uB0B4\uB9BC\uCC28\uC21C\uC73C\uB85C \uC815\uB82C","\uD6C4\uD589 \uACF5\uBC31 \uC790\uB974\uAE30","\uC904 \uC0AD\uC81C","\uC904 \uB4E4\uC5EC\uC4F0\uAE30","\uC904 \uB0B4\uC5B4\uC4F0\uAE30","\uC704\uC5D0 \uC904 \uC0BD\uC785","\uC544\uB798\uC5D0 \uC904 \uC0BD\uC785","\uC67C\uCABD \uBAA8\uB450 \uC0AD\uC81C","\uC6B0\uCE21\uC5D0 \uC788\uB294 \uD56D\uBAA9 \uC0AD\uC81C","\uC904 \uC5F0\uACB0","\uCEE4\uC11C \uC8FC\uC704 \uBB38\uC790 \uBC14\uAFB8\uAE30","\uB300\uBB38\uC790\uB85C \uBCC0\uD658","\uC18C\uBB38\uC790\uB85C \uBCC0\uD658","\uB2E8\uC5B4\uC758 \uCCAB \uAE00\uC790\uB97C \uB300\uBB38\uC790\uB85C \uBCC0\uD658","\uC2A4\uB124\uC774\uD06C \uD45C\uAE30\uBC95\uC73C\uB85C \uBCC0\uD658"],"vs/editor/contrib/linkedEditing/linkedEditing":["\uC5F0\uACB0\uB41C \uD3B8\uC9D1 \uC2DC\uC791","\uD615\uC2DD\uC758 \uD3B8\uC9D1\uAE30\uC5D0\uC11C \uC790\uB3D9\uC73C\uB85C \uC774\uB984\uC744 \uBC14\uAFC0 \uB54C\uC758 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4."],"vs/editor/contrib/links/links":["\uBA85\uB839 \uC2E4\uD589","\uB9C1\uD06C\uB85C \uC774\uB3D9","Cmd+\uD074\uB9AD","Ctrl+\uD074\uB9AD","Option+\uD074\uB9AD","Alt+\uD074\uB9AD","\uBA85\uB839 {0} \uC2E4\uD589","{0} \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC73C\uBBC0\uB85C \uC774 \uB9C1\uD06C\uB97C \uC5F4\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4","\uB300\uC0C1\uC774 \uC5C6\uC73C\uBBC0\uB85C \uC774 \uB9C1\uD06C\uB97C \uC5F4\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4.","\uB9C1\uD06C \uC5F4\uAE30"],"vs/editor/contrib/message/messageController":["\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uD604\uC7AC \uC778\uB77C\uC778 \uBA54\uC2DC\uC9C0\uB97C \uD45C\uC2DC\uD558\uB294\uC9C0 \uC5EC\uBD80","\uC77D\uAE30 \uC804\uC6A9 \uD3B8\uC9D1\uAE30\uC5D0\uC11C\uB294 \uD3B8\uC9D1\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."],"vs/editor/contrib/multicursor/multicursor":["\uC704\uC5D0 \uCEE4\uC11C \uCD94\uAC00","\uC704\uC5D0 \uCEE4\uC11C \uCD94\uAC00(&&A)","\uC544\uB798\uC5D0 \uCEE4\uC11C \uCD94\uAC00","\uC544\uB798\uC5D0 \uCEE4\uC11C \uCD94\uAC00(&&D)","\uC904 \uB05D\uC5D0 \uCEE4\uC11C \uCD94\uAC00","\uC904 \uB05D\uC5D0 \uCEE4\uC11C \uCD94\uAC00(&&U)","\uB9E8 \uC544\uB798\uC5D0 \uCEE4\uC11C \uCD94\uAC00","\uB9E8 \uC704\uC5D0 \uCEE4\uC11C \uCD94\uAC00","\uB2E4\uC74C \uC77C\uCE58 \uD56D\uBAA9 \uCC3E\uAE30\uC5D0 \uC120\uD0DD \uD56D\uBAA9 \uCD94\uAC00","\uB2E4\uC74C \uD56D\uBAA9 \uCD94\uAC00(&&N)","\uC774\uC804 \uC77C\uCE58 \uD56D\uBAA9 \uCC3E\uAE30\uC5D0 \uC120\uD0DD \uD56D\uBAA9 \uCD94\uAC00","\uC774\uC804 \uD56D\uBAA9 \uCD94\uAC00(&&R)","\uB2E4\uC74C \uC77C\uCE58 \uD56D\uBAA9 \uCC3E\uAE30\uB85C \uB9C8\uC9C0\uB9C9 \uC120\uD0DD \uD56D\uBAA9 \uC774\uB3D9","\uB9C8\uC9C0\uB9C9 \uC120\uD0DD \uD56D\uBAA9\uC744 \uC774\uC804 \uC77C\uCE58 \uD56D\uBAA9 \uCC3E\uAE30\uB85C \uC774\uB3D9","\uC77C\uCE58 \uD56D\uBAA9 \uCC3E\uAE30\uC758 \uBAA8\uB4E0 \uD56D\uBAA9 \uC120\uD0DD","\uBAA8\uB4E0 \uD56D\uBAA9 \uC120\uD0DD(&&O)","\uBAA8\uB4E0 \uD56D\uBAA9 \uBCC0\uACBD"],"vs/editor/contrib/parameterHints/parameterHints":["\uB9E4\uAC1C \uBCC0\uC218 \uD78C\uD2B8 \uD2B8\uB9AC\uAC70"],"vs/editor/contrib/parameterHints/parameterHintsWidget":["\uB2E4\uC74C \uB9E4\uAC1C \uBCC0\uC218 \uD78C\uD2B8 \uD45C\uC2DC\uC758 \uC544\uC774\uCF58\uC785\uB2C8\uB2E4.","\uC774\uC804 \uB9E4\uAC1C \uBCC0\uC218 \uD78C\uD2B8 \uD45C\uC2DC\uC758 \uC544\uC774\uCF58\uC785\uB2C8\uB2E4.","{0}, \uD78C\uD2B8"],"vs/editor/contrib/peekView/peekView":["\uB2EB\uAE30","Peek \uBDF0 \uC81C\uBAA9 \uC601\uC5ED\uC758 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","Peek \uBDF0 \uC81C\uBAA9 \uC0C9\uC785\uB2C8\uB2E4.","Peek \uBDF0 \uC81C\uBAA9 \uC815\uBCF4 \uC0C9\uC785\uB2C8\uB2E4.","Peek \uBDF0 \uD14C\uB450\uB9AC \uBC0F \uD654\uC0B4\uD45C \uC0C9\uC785\uB2C8\uB2E4.","Peek \uBDF0 \uACB0\uACFC \uBAA9\uB85D\uC758 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","Peek \uBDF0 \uACB0\uACFC \uBAA9\uB85D\uC5D0\uC11C \uB77C\uC778 \uB178\uB4DC\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4.","Peek \uBDF0 \uACB0\uACFC \uBAA9\uB85D\uC5D0\uC11C \uD30C\uC77C \uB178\uB4DC\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4.","Peek \uBDF0 \uACB0\uACFC \uBAA9\uB85D\uC5D0\uC11C \uC120\uD0DD\uB41C \uD56D\uBAA9\uC758 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","Peek \uBDF0 \uACB0\uACFC \uBAA9\uB85D\uC5D0\uC11C \uC120\uD0DD\uB41C \uD56D\uBAA9\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4.","Peek \uBDF0 \uD3B8\uC9D1\uAE30\uC758 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","Peek \uBDF0 \uD3B8\uC9D1\uAE30\uC758 \uAC70\uD130 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","Peek \uBDF0 \uACB0\uACFC \uBAA9\uB85D\uC758 \uC77C\uCE58 \uD56D\uBAA9 \uAC15\uC870 \uD45C\uC2DC \uC0C9\uC785\uB2C8\uB2E4.","Peek \uBDF0 \uD3B8\uC9D1\uAE30\uC758 \uC77C\uCE58 \uD56D\uBAA9 \uAC15\uC870 \uD45C\uC2DC \uC0C9\uC785\uB2C8\uB2E4.","Peek \uBDF0 \uD3B8\uC9D1\uAE30\uC758 \uC77C\uCE58 \uD56D\uBAA9 \uAC15\uC870 \uD45C\uC2DC \uD14C\uB450\uB9AC\uC785\uB2C8\uB2E4."],"vs/editor/contrib/quickAccess/gotoLineQuickAccess":["\uC6B0\uC120 \uD14D\uC2A4\uD2B8 \uD3B8\uC9D1\uAE30\uB97C \uC5F4\uACE0 \uC904\uB85C \uC774\uB3D9\uD569\uB2C8\uB2E4.","{0} \uC904 \uBC0F {1} \uC5F4\uB85C \uC774\uB3D9\uD569\uB2C8\uB2E4.","{0} \uC904\uB85C \uC774\uB3D9\uD569\uB2C8\uB2E4.","\uD604\uC7AC \uC904: {0}, \uBB38\uC790: {1} \uC774\uB3D9\uD560 \uC904 1~{2} \uC0AC\uC774\uC758 \uBC88\uD638\uB97C \uC785\uB825\uD569\uB2C8\uB2E4.","\uD604\uC7AC \uC904: {0}, \uBB38\uC790: {1}. \uC774\uB3D9\uD560 \uC904 \uBC88\uD638\uB97C \uC785\uB825\uD569\uB2C8\uB2E4."],"vs/editor/contrib/quickAccess/gotoSymbolQuickAccess":["\uAE30\uD638\uB85C \uC774\uB3D9\uD558\uB824\uBA74 \uBA3C\uC800 \uAE30\uD638 \uC815\uBCF4\uAC00 \uC788\uB294 \uD14D\uC2A4\uD2B8 \uD3B8\uC9D1\uAE30\uB97C \uC5FD\uB2C8\uB2E4.","\uD65C\uC131 \uC0C1\uD0DC\uC758 \uD14D\uC2A4\uD2B8 \uD3B8\uC9D1\uAE30\uB294 \uAE30\uD638 \uC815\uBCF4\uB97C \uC81C\uACF5\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.","\uC77C\uCE58\uD558\uB294 \uD3B8\uC9D1\uAE30 \uAE30\uD638 \uC5C6\uC74C","\uD3B8\uC9D1\uAE30 \uAE30\uD638 \uC5C6\uC74C","\uCE21\uBA74\uC5D0\uC11C \uC5F4\uAE30","\uD558\uB2E8\uC5D0 \uC5F4\uAE30","\uAE30\uD638({0})","\uC18D\uC131({0})","\uBA54\uC11C\uB4DC({0})","\uD568\uC218({0})","\uC0DD\uC131\uC790({0})","\uBCC0\uC218({0})","\uD074\uB798\uC2A4({0})","\uAD6C\uC870\uCCB4({0})","\uC774\uBCA4\uD2B8({0})","\uC5F0\uC0B0\uC790({0})","\uC778\uD130\uD398\uC774\uC2A4({0})","\uB124\uC784\uC2A4\uD398\uC774\uC2A4({0})","\uD328\uD0A4\uC9C0({0})","\uD615\uC2DD \uB9E4\uAC1C \uBCC0\uC218({0})","\uBAA8\uB4C8({0})","\uC18D\uC131({0})","\uC5F4\uAC70\uD615({0})","\uC5F4\uAC70\uD615 \uBA64\uBC84({0})","\uBB38\uC790\uC5F4({0})","\uD30C\uC77C({0})","\uBC30\uC5F4({0})","\uC22B\uC790({0})","\uBD80\uC6B8({0})","\uAC1C\uCCB4({0})","\uD0A4({0})","\uD544\uB4DC({0})","\uC0C1\uC218({0})"],"vs/editor/contrib/rename/rename":["\uACB0\uACFC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.","\uC704\uCE58 \uC774\uB984\uC744 \uBC14\uAFB8\uB294 \uC911 \uC54C \uC218 \uC5C6\uB294 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.","'{0}'\uC758 \uC774\uB984\uC744 \uBC14\uAFB8\uB294 \uC911","{0} \uC774\uB984 \uBC14\uAFB8\uAE30","'{0}'\uC744(\uB97C) '{1}'(\uC73C)\uB85C \uC774\uB984\uC744 \uBCC0\uACBD\uD588\uC2B5\uB2C8\uB2E4. \uC694\uC57D: {2}","\uC774\uB984 \uBC14\uAFB8\uAE30\uB97C \uD1B5\uD574 \uD3B8\uC9D1 \uB0B4\uC6A9\uC744 \uC801\uC6A9\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4.","\uC774\uB984 \uBC14\uAFB8\uAE30\uB97C \uD1B5\uD574 \uD3B8\uC9D1 \uB0B4\uC6A9\uC744 \uACC4\uC0B0\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4.","\uAE30\uD638 \uC774\uB984 \uBC14\uAFB8\uAE30","\uC774\uB984\uC744 \uBC14\uAFB8\uAE30 \uC804\uC5D0 \uBCC0\uACBD \uB0B4\uC6A9\uC744 \uBBF8\uB9AC \uBCFC \uC218 \uC788\uB294 \uAE30\uB2A5 \uC0AC\uC6A9/\uC0AC\uC6A9 \uC548 \uD568"],"vs/editor/contrib/rename/renameInputField":["\uC785\uB825 \uC774\uB984\uC744 \uBC14\uAFB8\uC138\uC694. \uC0C8 \uC774\uB984\uC744 \uC785\uB825\uD55C \uB2E4\uC74C [Enter] \uD0A4\uB97C \uB20C\uB7EC \uCEE4\uBC0B\uD558\uC138\uC694.","\uC774\uB984 \uBC14\uAFB8\uAE30 {0}, \uBBF8\uB9AC \uBCF4\uAE30 {1}"],"vs/editor/contrib/smartSelect/smartSelect":["\uC120\uD0DD \uC601\uC5ED \uD655\uC7A5","\uC120\uD0DD \uC601\uC5ED \uD655\uC7A5(&&E)","\uC120\uD0DD \uC601\uC5ED \uCD95\uC18C","\uC120\uD0DD \uC601\uC5ED \uCD95\uC18C(&&S)"],"vs/editor/contrib/snippet/snippetVariables":["\uC77C\uC694\uC77C","\uC6D4\uC694\uC77C","\uD654\uC694\uC77C","\uC218\uC694\uC77C","\uBAA9\uC694\uC77C","\uAE08\uC694\uC77C","\uD1A0\uC694\uC77C","\uC77C","\uC6D4","\uD654","\uC218","\uBAA9","\uAE08","\uD1A0","1\uC6D4","2\uC6D4","3\uC6D4","4\uC6D4","5\uC6D4","6\uC6D4","7\uC6D4","8\uC6D4","9\uC6D4","10\uC6D4","11\uC6D4","12\uC6D4","1\uC6D4","2\uC6D4","3\uC6D4","4\uC6D4","5\uC6D4","6\uC6D4","7\uC6D4","8\uC6D4","9\uC6D4","10\uC6D4","11\uC6D4","12\uC6D4"],"vs/editor/contrib/suggest/suggestController":["{0}\uC758 {1}\uAC1C\uC758 \uC218\uC815\uC0AC\uD56D\uC744 \uC218\uB77D\uD558\uB294 \uC911","\uC81C\uC548 \uD56D\uBAA9 \uD2B8\uB9AC\uAC70","\uC0BD\uC785","\uC0BD\uC785","\uBC14\uAFB8\uAE30","\uBC14\uAFB8\uAE30","\uC0BD\uC785","\uAC04\uB2E8\uD788 \uD45C\uC2DC","\uB354 \uBCF4\uAE30","\uC81C\uC548 \uC704\uC82F \uD06C\uAE30 \uB2E4\uC2DC \uC124\uC815"],"vs/editor/contrib/suggest/suggestWidget":["\uC81C\uC548 \uC704\uC82F\uC758 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uC81C\uC548 \uC704\uC82F\uC758 \uD14C\uB450\uB9AC \uC0C9\uC785\uB2C8\uB2E4.","\uC81C\uC548 \uC704\uC82F\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uC81C\uD55C \uC704\uC82F\uC5D0\uC11C \uC120\uD0DD\uB41C \uD56D\uBAA9\uC758 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uC81C\uC548 \uC704\uC82F\uC758 \uC77C\uCE58 \uD56D\uBAA9 \uAC15\uC870 \uD45C\uC2DC \uC0C9\uC785\uB2C8\uB2E4.","\uB85C\uB4DC \uC911...","\uC81C\uC548 \uD56D\uBAA9\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.","{0}, \uBB38\uC11C: {1}","\uC81C\uC548"],"vs/editor/contrib/suggest/suggestWidgetDetails":["\uB2EB\uAE30","\uB85C\uB4DC \uC911..."],"vs/editor/contrib/suggest/suggestWidgetRenderer":["\uC81C\uC548 \uC704\uC82F\uC5D0\uC11C \uC790\uC138\uD55C \uC815\uBCF4\uC758 \uC544\uC774\uCF58\uC785\uB2C8\uB2E4.","\uC790\uC138\uD55C \uC815\uBCF4"],"vs/editor/contrib/suggest/suggestWidgetStatus":["{0} ({1})"],"vs/editor/contrib/symbolIcons/symbolIcons":["\uBC30\uC5F4 \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uB098\uD0C0\uB0A9\uB2C8\uB2E4.","\uBD80\uC6B8 \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uB098\uD0C0\uB0A9\uB2C8\uB2E4.","\uD074\uB798\uC2A4 \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uB098\uD0C0\uB0A9\uB2C8\uB2E4.","\uC0C9 \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548\uC5D0 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC0C1\uC218 \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uB098\uD0C0\uB0A9\uB2C8\uB2E4.","\uC0DD\uC131\uC790 \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC5F4\uAC70\uC790 \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC5F4\uAC70\uC790 \uBA64\uBC84 \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uB098\uD0C0\uB0A9\uB2C8\uB2E4.","\uC774\uBCA4\uD2B8 \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uB098\uD0C0\uB0A9\uB2C8\uB2E4.","\uD544\uB4DC \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uD30C\uC77C \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uB098\uD0C0\uB0A9\uB2C8\uB2E4.","\uD3F4\uB354 \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uB098\uD0C0\uB0A9\uB2C8\uB2E4.","\uD568\uC218 \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uB098\uD0C0\uB0A9\uB2C8\uB2E4.","\uC778\uD130\uD398\uC774\uC2A4 \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uD0A4 \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uD0A4\uC6CC\uB4DC \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uB098\uD0C0\uB0A9\uB2C8\uB2E4.","\uBA54\uC11C\uB4DC \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uBAA8\uB4C8 \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uB098\uD0C0\uB0A9\uB2C8\uB2E4.","\uB124\uC784\uC2A4\uD398\uC774\uC2A4 \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uB098\uD0C0\uB0A9\uB2C8\uB2E4.","null \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uB098\uD0C0\uB0A9\uB2C8\uB2E4.","\uC22B\uC790 \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uAC1C\uCCB4 \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uB098\uD0C0\uB0A9\uB2C8\uB2E4.","\uC5F0\uC0B0\uC790 \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uB098\uD0C0\uB0A9\uB2C8\uB2E4.","\uD328\uD0A4\uC9C0 \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uB098\uD0C0\uB0A9\uB2C8\uB2E4.","\uC18D\uC131 \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uB098\uD0C0\uB0A9\uB2C8\uB2E4.","\uCC38\uC870 \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uB098\uD0C0\uB0A9\uB2C8\uB2E4.","\uCF54\uB4DC \uC870\uAC01 \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uBB38\uC790\uC5F4 \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uAD6C\uC870 \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uD14D\uC2A4\uD2B8 \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uB098\uD0C0\uB0A9\uB2C8\uB2E4.","\uD615\uC2DD \uB9E4\uAC1C\uBCC0\uC218 \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uB2E8\uC704 \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uBCC0\uC218 \uAE30\uD638\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAE30\uD638\uB294 \uAC1C\uC694, \uC774\uB3D9 \uACBD\uB85C \uBC0F \uC81C\uC548 \uC704\uC82F\uC5D0 \uD45C\uC2DC\uB429\uB2C8\uB2E4."],"vs/editor/contrib/toggleTabFocusMode/toggleTabFocusMode":[" \uD0A4\uB85C \uD3EC\uCEE4\uC2A4 \uC774\uB3D9 \uC124\uC815/\uD574\uC81C","\uC774\uC81C \uD0A4\uB97C \uB204\uB974\uBA74 \uD3EC\uCEE4\uC2A4\uAC00 \uB2E4\uC74C \uD3EC\uCEE4\uC2A4 \uAC00\uB2A5\uD55C \uC694\uC18C\uB85C \uC774\uB3D9\uD569\uB2C8\uB2E4.","\uC774\uC81C \uD0A4\uB97C \uB204\uB974\uBA74 \uD0ED \uBB38\uC790\uAC00 \uC0BD\uC785\uB429\uB2C8\uB2E4."],"vs/editor/contrib/tokenization/tokenization":["\uAC1C\uBC1C\uC790: \uAC15\uC81C\uB85C \uB2E4\uC2DC \uD1A0\uD070\uD654"],"vs/editor/contrib/unusualLineTerminators/unusualLineTerminators":["\uBE44\uC815\uC0C1\uC801\uC778 \uC904 \uC885\uACB0\uC790","\uBE44\uC815\uC0C1\uC801\uC778 \uC904 \uC885\uACB0\uC790\uAC00 \uAC80\uC0C9\uB428","\uC774 \uD30C\uC77C\uC5D0 LS(\uC904 \uAD6C\uBD84 \uAE30\uD638) \uB610\uB294 PS(\uB2E8\uB77D \uAD6C\uBD84 \uAE30\uD638) \uAC19\uC740 \uD558\uB098 \uC774\uC0C1\uC758 \uBE44\uC815\uC0C1\uC801\uC778 \uC904 \uC885\uACB0\uC790 \uBB38\uC790\uAC00 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4.\r\n\r\n\uD30C\uC77C\uC5D0\uC11C \uC81C\uAC70\uD558\uB294 \uAC83\uC774 \uC88B\uC2B5\uB2C8\uB2E4. `editor.unusualLineTerminators`\uB97C \uD1B5\uD574 \uAD6C\uC131\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.","\uC774 \uD30C\uC77C \uC218\uC815","\uC774 \uD30C\uC77C\uC758 \uBB38\uC81C \uBB34\uC2DC"],"vs/editor/contrib/wordHighlighter/wordHighlighter":["\uBCC0\uC218 \uC77D\uAE30\uC640 \uAC19\uC740 \uC77D\uAE30 \uC561\uC138\uC2A4 \uC911 \uAE30\uD638\uC758 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uAE30\uBCF8 \uC7A5\uC2DD\uC744 \uC228\uAE30\uC9C0 \uC54A\uB3C4\uB85D \uC0C9\uC740 \uBD88\uD22C\uBA85\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4.","\uBCC0\uC218\uC5D0 \uC4F0\uAE30\uC640 \uAC19\uC740 \uC4F0\uAE30 \uC561\uC138\uC2A4 \uC911 \uAE30\uD638\uC758 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uAE30\uBCF8 \uC7A5\uC2DD\uC744 \uC228\uAE30\uC9C0 \uC54A\uB3C4\uB85D \uC0C9\uC740 \uBD88\uD22C\uBA85\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4.","\uBCC0\uC218 \uC77D\uAE30\uC640 \uAC19\uC740 \uC77D\uAE30 \uC561\uC138\uC2A4 \uC911 \uAE30\uD638\uC758 \uD14C\uB450\uB9AC \uC0C9\uC785\uB2C8\uB2E4.","\uBCC0\uC218\uC5D0 \uC4F0\uAE30\uC640 \uAC19\uC740 \uC4F0\uAE30 \uC561\uC138\uC2A4 \uC911 \uAE30\uD638\uC758 \uD14C\uB450\uB9AC \uC0C9\uC785\uB2C8\uB2E4.","\uAE30\uD638 \uAC15\uC870 \uD45C\uC2DC\uC758 \uAC1C\uC694 \uB208\uAE08\uC790 \uD45C\uC2DD \uC0C9\uC785\uB2C8\uB2E4. \uAE30\uBCF8 \uC7A5\uC2DD\uC744 \uC228\uAE30\uC9C0 \uC54A\uB3C4\uB85D \uC0C9\uC740 \uBD88\uD22C\uBA85\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4.","\uC4F0\uAE30 \uC561\uC138\uC2A4 \uAE30\uD638\uC5D0 \uB300\uD55C \uAC1C\uC694 \uB208\uAE08\uC790 \uD45C\uC2DD \uC0C9\uC774 \uAC15\uC870 \uD45C\uC2DC\uB429\uB2C8\uB2E4. \uAE30\uBCF8 \uC7A5\uC2DD\uC744 \uC228\uAE30\uC9C0 \uC54A\uB3C4\uB85D \uC0C9\uC740 \uBD88\uD22C\uBA85\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4.","\uB2E4\uC74C \uAC15\uC870 \uAE30\uD638\uB85C \uC774\uB3D9","\uC774\uC804 \uAC15\uC870 \uAE30\uD638\uB85C \uC774\uB3D9","\uAE30\uD638 \uAC15\uC870 \uD45C\uC2DC \uD2B8\uB9AC\uAC70"],"vs/editor/contrib/wordOperations/wordOperations":["\uB2E8\uC5B4 \uC0AD\uC81C"],"vs/platform/actions/browser/menuEntryActionViewItem":["{0}({1})"],"vs/platform/configuration/common/configurationRegistry":["\uAE30\uBCF8 \uC5B8\uC5B4 \uAD6C\uC131 \uC7AC\uC815\uC758","\uC5B8\uC5B4\uC5D0 \uB300\uD574 \uC7AC\uC815\uC758\uD560 \uD3B8\uC9D1\uAE30 \uC124\uC815\uC744 \uAD6C\uC131\uD569\uB2C8\uB2E4.","\uC774 \uC124\uC815\uC740 \uC5B8\uC5B4\uBCC4 \uAD6C\uC131\uC744 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.","\uBE48 \uC18D\uC131\uC744 \uB4F1\uB85D\uD560 \uC218 \uC5C6\uC74C","'{0}'\uC744(\uB97C) \uB4F1\uB85D\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC774\uB294 \uC5B8\uC5B4\uBCC4 \uD3B8\uC9D1\uAE30 \uC124\uC815\uC744 \uC124\uBA85\uD558\uB294 \uC18D\uC131 \uD328\uD134\uC778 '\\\\[.*\\\\]$'\uACFC(\uC640) \uC77C\uCE58\uD569\uB2C8\uB2E4. 'configurationDefaults' \uAE30\uC5EC\uB97C \uC0AC\uC6A9\uD558\uC138\uC694.","'{0}'\uC744(\uB97C) \uB4F1\uB85D\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC774 \uC18D\uC131\uC740 \uC774\uBBF8 \uB4F1\uB85D\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4."],"vs/platform/contextkey/browser/contextKeyService":["\uCEE8\uD14D\uC2A4\uD2B8 \uD0A4\uC5D0 \uB300\uD55C \uC815\uBCF4\uB97C \uBC18\uD658\uD558\uB294 \uBA85\uB839"],"vs/platform/contextkey/common/contextkeys":["Whether the operating system is Windows"],"vs/platform/keybinding/common/abstractKeybindingService":["({0})\uC744(\uB97C) \uB20C\uB800\uC2B5\uB2C8\uB2E4. \uB458\uC9F8 \uD0A4\uB294 \uC7A0\uC2DC \uAE30\uB2E4\uB838\uB2E4\uAC00 \uB204\uB974\uC2ED\uC2DC\uC624...","\uD0A4 \uC870\uD569({0}, {1})\uC740 \uBA85\uB839\uC774 \uC544\uB2D9\uB2C8\uB2E4."],"vs/platform/list/browser/listService":["\uC6CC\uD06C\uBCA4\uCE58","Windows\uC640 Linux\uC758 'Control'\uC744 macOS\uC758 'Command'\uB85C \uB9E4\uD551\uD569\uB2C8\uB2E4.","Windows\uC640 Linux\uC758 'Alt'\uB97C macOS\uC758 'Option'\uC73C\uB85C \uB9E4\uD551\uD569\uB2C8\uB2E4.","\uB9C8\uC6B0\uC2A4\uB85C \uD2B8\uB9AC\uC640 \uBAA9\uB85D\uC758 \uD56D\uBAA9\uC744 \uB2E4\uC911 \uC120\uD0DD\uC5D0 \uCD94\uAC00\uD560 \uB54C \uC0AC\uC6A9\uD560 \uD55C\uC815\uC790\uC785\uB2C8\uB2E4(\uC608\uB97C \uB4E4\uC5B4 \uD0D0\uC0C9\uAE30\uC5D0\uC11C \uD3B8\uC9D1\uAE30\uC640 SCM \uBCF4\uAE30\uB97C \uC5EC\uB294 \uACBD\uC6B0). '\uC606\uC5D0\uC11C \uC5F4\uAE30' \uB9C8\uC6B0\uC2A4 \uC81C\uC2A4\uCC98(\uC9C0\uC6D0\uB418\uB294 \uACBD\uC6B0)\uB294 \uB2E4\uC911 \uC120\uD0DD \uD55C\uC815\uC790\uC640 \uCDA9\uB3CC\uD558\uC9C0 \uC54A\uB3C4\uB85D \uC870\uC815\uB429\uB2C8\uB2E4.","\uD2B8\uB9AC\uC640 \uBAA9\uB85D\uC5D0\uC11C \uB9C8\uC6B0\uC2A4\uB97C \uC0AC\uC6A9\uD558\uC5EC \uD56D\uBAA9\uC744 \uC5EC\uB294 \uBC29\uBC95\uC744 \uC81C\uC5B4\uD569\uB2C8\uB2E4(\uC9C0\uC6D0\uB418\uB294 \uACBD\uC6B0). \uC77C\uBD80 \uD2B8\uB9AC\uC640 \uBAA9\uB85D\uC5D0\uC11C\uB294 \uC774 \uC124\uC815\uC744 \uC801\uC6A9\uD560 \uC218 \uC5C6\uB294 \uACBD\uC6B0 \uBB34\uC2DC\uD558\uB3C4\uB85D \uC120\uD0DD\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.","\uC6CC\uD06C\uBCA4\uCE58\uC5D0\uC11C \uBAA9\uB85D \uBC0F \uD2B8\uB9AC\uC758 \uAC00\uB85C \uC2A4\uD06C\uB864 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4. \uACBD\uACE0: \uC774 \uC124\uC815\uC744 \uCF1C\uBA74 \uC131\uB2A5\uC5D0 \uC601\uD5A5\uC744 \uBBF8\uCE69\uB2C8\uB2E4.","\uD2B8\uB9AC \uB4E4\uC5EC\uC4F0\uAE30\uB97C \uD53D\uC140 \uB2E8\uC704\uB85C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uD2B8\uB9AC\uC5D0\uC11C \uB4E4\uC5EC\uC4F0\uAE30 \uAC00\uC774\uB4DC\uB97C \uB80C\uB354\uB9C1\uD560\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uBAA9\uB85D\uACFC \uD2B8\uB9AC\uC5D0 \uBD80\uB4DC\uB7EC\uC6B4 \uD654\uBA74 \uC774\uB3D9 \uAE30\uB2A5\uC774 \uC788\uB294\uC9C0\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.","\uAC04\uB2E8\uD55C \uD0A4\uBCF4\uB4DC \uD0D0\uC0C9\uC5D0\uC11C\uB294 \uD0A4\uBCF4\uB4DC \uC785\uB825\uACFC \uC77C\uCE58\uD558\uB294 \uC694\uC18C\uC5D0 \uC9D1\uC911\uD569\uB2C8\uB2E4. \uC77C\uCE58\uB294 \uC811\uB450\uC0AC\uC5D0\uC11C\uB9CC \uC218\uD589\uB429\uB2C8\uB2E4.","\uD0A4\uBCF4\uB4DC \uD0D0\uC0C9 \uAC15\uC870 \uD45C\uC2DC\uC5D0\uC11C\uB294 \uD0A4\uBCF4\uB4DC \uC785\uB825\uACFC \uC77C\uCE58\uD558\uB294 \uC694\uC18C\uB97C \uAC15\uC870 \uD45C\uC2DC\uD569\uB2C8\uB2E4. \uC774\uD6C4\uB85C \uD0D0\uC0C9\uC5D0\uC11C \uC704 \uBC0F \uC544\uB798\uB85C \uC774\uB3D9\uD558\uB294 \uACBD\uC6B0 \uAC15\uC870 \uD45C\uC2DC\uB41C \uC694\uC18C\uB9CC \uD2B8\uB798\uBC84\uC2A4\uD569\uB2C8\uB2E4.","\uD0A4\uBCF4\uB4DC \uD0D0\uC0C9 \uD544\uD130\uB9C1\uC5D0\uC11C\uB294 \uD0A4\uBCF4\uB4DC \uC785\uB825\uACFC \uC77C\uCE58\uD558\uC9C0 \uC54A\uB294 \uC694\uC18C\uB97C \uBAA8\uB450 \uD544\uD130\uB9C1\uD558\uC5EC \uC228\uAE41\uB2C8\uB2E4.","\uC6CC\uD06C\uBCA4\uCE58\uC758 \uBAA9\uB85D \uBC0F \uD2B8\uB9AC \uD0A4\uBCF4\uB4DC \uD0D0\uC0C9 \uC2A4\uD0C0\uC77C\uC744 \uC81C\uC5B4\uD569\uB2C8\uB2E4. \uAC04\uC18C\uD654\uD558\uACE0, \uAC15\uC870 \uD45C\uC2DC\uD558\uACE0, \uD544\uD130\uB9C1\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.","\uBAA9\uB85D \uBC0F \uD2B8\uB9AC\uC5D0\uC11C \uD0A4\uBCF4\uB4DC \uD0D0\uC0C9\uC774 \uC785\uB825\uB9CC\uC73C\uB85C \uC790\uB3D9 \uD2B8\uB9AC\uAC70\uB418\uB294\uC9C0 \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4. 'false'\uB85C \uC124\uC815\uD558\uBA74 'list.toggleKeyboardNavigation' \uBA85\uB839\uC744 \uC2E4\uD589\uD560 \uB54C\uB9CC \uD0A4\uBCF4\uB4DC \uD0D0\uC0C9\uC774 \uD2B8\uB9AC\uAC70\uB418\uC5B4 \uBC14\uB85C \uAC00\uAE30 \uD0A4\uB97C \uD560\uB2F9\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.","\uD3F4\uB354 \uC774\uB984\uC744 \uD074\uB9AD\uD560 \uB54C \uD2B8\uB9AC \uD3F4\uB354\uAC00 \uD655\uC7A5\uB418\uB294 \uBC29\uBC95\uC744 \uC81C\uC5B4\uD569\uB2C8\uB2E4. \uC77C\uBD80 \uD2B8\uB9AC\uC640 \uBAA9\uB85D\uC5D0\uC11C\uB294 \uC774 \uC124\uC815\uC744 \uC801\uC6A9\uD560 \uC218 \uC5C6\uB294 \uACBD\uC6B0 \uBB34\uC2DC\uD558\uB3C4\uB85D \uC120\uD0DD\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4."],"vs/platform/markers/common/markers":["\uC624\uB958","\uACBD\uACE0","\uC815\uBCF4"],"vs/platform/quickinput/browser/commandsQuickAccess":["{0}, {1}","\uCD5C\uADFC\uC5D0 \uC0AC\uC6A9\uD55C \uD56D\uBAA9","\uAE30\uD0C0 \uBA85\uB839","\uBA85\uB839 '{0}'\uC5D0\uC11C \uC624\uB958({1})\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4."],"vs/platform/quickinput/browser/helpQuickAccess":["\uC804\uC5ED \uBA85\uB839","\uD3B8\uC9D1\uAE30 \uBA85\uB839","{0}, {1}"],"vs/platform/theme/common/colorRegistry":["\uC804\uCCB4 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774 \uC0C9\uC740 \uAD6C\uC131 \uC694\uC18C\uC5D0\uC11C \uC7AC\uC815\uC758\uD558\uC9C0 \uC54A\uC740 \uACBD\uC6B0\uC5D0\uB9CC \uC0AC\uC6A9\uB429\uB2C8\uB2E4.","\uC624\uB958 \uBA54\uC2DC\uC9C0\uC5D0 \uB300\uD55C \uC804\uCCB4 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uC774 \uC0C9\uC740 \uAD6C\uC131 \uC694\uC18C\uC5D0\uC11C \uC7AC\uC815\uC758\uD558\uC9C0 \uC54A\uC740 \uACBD\uC6B0\uC5D0\uB9CC \uC0AC\uC6A9\uB429\uB2C8\uB2E4.","\uC6CC\uD06C\uBCA4\uCE58 \uC544\uC774\uCF58\uC758 \uAE30\uBCF8 \uC0C9\uC0C1\uC785\uB2C8\uB2E4.","\uD3EC\uCEE4\uC2A4\uAC00 \uC788\uB294 \uC694\uC18C\uC758 \uC804\uCCB4 \uD14C\uB450\uB9AC \uC0C9\uC785\uB2C8\uB2E4. \uC774 \uC0C9\uC740 \uAD6C\uC131 \uC694\uC18C\uC5D0\uC11C \uC7AC\uC815\uC758\uD558\uC9C0 \uC54A\uC740 \uACBD\uC6B0\uC5D0\uB9CC \uC0AC\uC6A9\uB429\uB2C8\uB2E4.","\uB354 \uB69C\uB837\uC774 \uB300\uBE44\uB418\uB3C4\uB85D \uC694\uC18C\uB97C \uB2E4\uB978 \uC694\uC18C\uC640 \uAD6C\uBD84\uD558\uB294 \uC694\uC18C \uC8FC\uC704\uC758 \uCD94\uAC00 \uD14C\uB450\uB9AC\uC785\uB2C8\uB2E4.","\uB354 \uB69C\uB837\uC774 \uB300\uBE44\uB418\uB3C4\uB85D \uC694\uC18C\uB97C \uB2E4\uB978 \uC694\uC18C\uC640 \uAD6C\uBD84\uD558\uB294 \uD65C\uC131 \uC694\uC18C \uC8FC\uC704\uC758 \uCD94\uAC00 \uD14C\uB450\uB9AC\uC785\uB2C8\uB2E4.","\uD14D\uC2A4\uD2B8 \uB0B4 \uB9C1\uD06C\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uD14D\uC2A4\uD2B8 \uB0B4 \uCF54\uB4DC \uBE14\uB85D\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uB0B4\uC5D0\uC11C \uCC3E\uAE30/\uBC14\uAFB8\uAE30 \uAC19\uC740 \uC704\uC82F\uC758 \uADF8\uB9BC\uC790 \uC0C9\uC785\uB2C8\uB2E4.","\uC785\uB825 \uC0C1\uC790 \uBC30\uACBD\uC785\uB2C8\uB2E4.","\uC785\uB825 \uC0C1\uC790 \uC804\uACBD\uC785\uB2C8\uB2E4.","\uC785\uB825 \uC0C1\uC790 \uD14C\uB450\uB9AC\uC785\uB2C8\uB2E4.","\uC785\uB825 \uD544\uB4DC\uC5D0\uC11C \uD65C\uC131\uD654\uB41C \uC635\uC158\uC758 \uD14C\uB450\uB9AC \uC0C9\uC785\uB2C8\uB2E4.","\uC785\uB825 \uD544\uB4DC\uC5D0\uC11C \uD65C\uC131\uD654\uB41C \uC635\uC158\uC758 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uC785\uB825 \uD544\uB4DC\uC5D0\uC11C \uD65C\uC131\uD654\uB41C \uC635\uC158\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uC815\uBCF4 \uC2EC\uAC01\uB3C4\uC758 \uC785\uB825 \uC720\uD6A8\uC131 \uAC80\uC0AC \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uC815\uBCF4 \uC2EC\uAC01\uB3C4\uC758 \uC785\uB825 \uC720\uD6A8\uC131 \uAC80\uC0AC \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uC815\uBCF4 \uC2EC\uAC01\uB3C4\uC758 \uC785\uB825 \uC720\uD6A8\uC131 \uAC80\uC0AC \uD14C\uB450\uB9AC \uC0C9\uC785\uB2C8\uB2E4.","\uACBD\uACE0 \uC2EC\uAC01\uB3C4\uC758 \uC785\uB825 \uC720\uD6A8\uC131 \uAC80\uC0AC \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uACBD\uACE0 \uC2EC\uAC01\uB3C4\uC758 \uC785\uB825 \uC720\uD6A8\uC131 \uAC80\uC0AC \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uACBD\uACE0 \uC2EC\uAC01\uB3C4\uC758 \uC785\uB825 \uC720\uD6A8\uC131 \uAC80\uC0AC \uD14C\uB450\uB9AC \uC0C9\uC785\uB2C8\uB2E4.","\uC624\uB958 \uC2EC\uAC01\uB3C4\uC758 \uC785\uB825 \uC720\uD6A8\uC131 \uAC80\uC0AC \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uC624\uB958 \uC2EC\uAC01\uB3C4\uC758 \uC785\uB825 \uC720\uD6A8\uC131 \uAC80\uC0AC \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uC624\uB958 \uC2EC\uAC01\uB3C4\uC758 \uC785\uB825 \uC720\uD6A8\uC131 \uAC80\uC0AC \uD14C\uB450\uB9AC \uC0C9\uC785\uB2C8\uB2E4.","\uB4DC\uB86D\uB2E4\uC6B4 \uBC30\uACBD\uC785\uB2C8\uB2E4.","\uB4DC\uB86D\uB2E4\uC6B4 \uC804\uACBD\uC785\uB2C8\uB2E4.","\uB2E8\uCD94 \uAE30\uBCF8 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uB2E8\uCD94 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uB9C8\uC6B0\uC2A4\uB85C \uAC00\uB9AC\uD0AC \uB54C \uB2E8\uCD94 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uBC30\uC9C0 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uBC30\uC9C0\uB294 \uAC80\uC0C9 \uACB0\uACFC \uC218\uC640 \uAC19\uC740 \uC18C\uB7C9\uC758 \uC815\uBCF4 \uB808\uC774\uBE14\uC785\uB2C8\uB2E4.","\uBC30\uC9C0 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uBC30\uC9C0\uB294 \uAC80\uC0C9 \uACB0\uACFC \uC218\uC640 \uAC19\uC740 \uC18C\uB7C9\uC758 \uC815\uBCF4 \uB808\uC774\uBE14\uC785\uB2C8\uB2E4.","\uC2A4\uD06C\uB864\uB418\uB294 \uBCF4\uAE30\uB97C \uB098\uD0C0\uB0B4\uB294 \uC2A4\uD06C\uB864 \uB9C9\uB300 \uADF8\uB9BC\uC790\uC785\uB2C8\uB2E4.","\uC2A4\uD06C\uB864 \uB9C9\uB300 \uC2AC\uB77C\uC774\uBC84 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uB9C8\uC6B0\uC2A4\uB85C \uAC00\uB9AC\uD0AC \uB54C \uC2A4\uD06C\uB864 \uB9C9\uB300 \uC2AC\uB77C\uC774\uB354 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uD074\uB9AD\uB41C \uC0C1\uD0DC\uC77C \uB54C \uC2A4\uD06C\uB864 \uB9C9\uB300 \uC2AC\uB77C\uC774\uB354 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uC7A5\uAE30 \uC791\uC5C5\uC744 \uB300\uC0C1\uC73C\uB85C \uD45C\uC2DC\uB420 \uC218 \uC788\uB294 \uC9C4\uD589\uB960 \uD45C\uC2DC\uC904\uC758 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uC624\uB958 \uD14D\uC2A4\uD2B8\uC758 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uAE30\uBCF8 \uC7A5\uC2DD\uC744 \uC228\uAE30\uC9C0 \uC54A\uB3C4\uB85D \uC0C9\uC740 \uBD88\uD22C\uBA85\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uB0B4 \uC624\uB958 \uD45C\uC2DC\uC120\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uC624\uB958 \uC0C1\uC790\uC758 \uD14C\uB450\uB9AC \uC0C9\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uACBD\uACE0 \uD14D\uC2A4\uD2B8\uC758 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uAE30\uBCF8 \uC7A5\uC2DD\uC744 \uC228\uAE30\uC9C0 \uC54A\uB3C4\uB85D \uC0C9\uC740 \uBD88\uD22C\uBA85\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uB0B4 \uACBD\uACE0 \uD45C\uC2DC\uC120\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uACBD\uACE0 \uC0C1\uC790\uC758 \uD14C\uB450\uB9AC \uC0C9\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uC815\uBCF4 \uD14D\uC2A4\uD2B8\uC758 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uAE30\uBCF8 \uC7A5\uC2DD\uC744 \uC228\uAE30\uC9C0 \uC54A\uB3C4\uB85D \uC0C9\uC740 \uBD88\uD22C\uBA85\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uB0B4 \uC815\uBCF4 \uD45C\uC2DC\uC120\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uC815\uBCF4 \uC0C1\uC790\uC758 \uD14C\uB450\uB9AC \uC0C9\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uD78C\uD2B8 \uD45C\uC2DC\uC120\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uD78C\uD2B8 \uC0C1\uC790\uC758 \uD14C\uB450\uB9AC \uC0C9\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uAE30\uBCF8 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uCC3E\uAE30/\uBC14\uAFB8\uAE30 \uAC19\uC740 \uD3B8\uC9D1\uAE30 \uC704\uC82F\uC758 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uCC3E\uAE30/\uBC14\uAFB8\uAE30\uC640 \uAC19\uC740 \uD3B8\uC9D1\uAE30 \uC704\uC82F\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uC704\uC82F\uC758 \uD14C\uB450\uB9AC \uC0C9\uC785\uB2C8\uB2E4. \uC704\uC82F\uC5D0 \uD14C\uB450\uB9AC\uAC00 \uC788\uACE0 \uC704\uC82F\uC774 \uC0C9\uC0C1\uC744 \uBB34\uC2DC\uD558\uC9C0 \uC54A\uC744 \uB54C\uB9CC \uC0AC\uC6A9\uB429\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uC704\uC82F \uD06C\uAE30 \uC870\uC815 \uB9C9\uB300\uC758 \uD14C\uB450\uB9AC \uC0C9\uC785\uB2C8\uB2E4. \uC774 \uC0C9\uC740 \uC704\uC82F\uC5D0\uC11C \uD06C\uAE30 \uC870\uC815 \uB9C9\uB300\uB97C \uD45C\uC2DC\uD558\uB3C4\uB85D \uC120\uD0DD\uD558\uACE0 \uC704\uC82F\uC5D0\uC11C \uC0C9\uC744 \uC7AC\uC9C0\uC815\uD558\uC9C0 \uC54A\uB294 \uACBD\uC6B0\uC5D0\uB9CC \uC0AC\uC6A9\uB429\uB2C8\uB2E4.","\uBE60\uB978 \uC120\uD0DD\uAE30 \uBC30\uACBD\uC0C9. \uBE60\uB978 \uC120\uD0DD\uAE30 \uC704\uC82F\uC740 \uBA85\uB839 \uD314\uB808\uD2B8\uC640 \uAC19\uC740 \uC120\uD0DD\uAE30\uB97C \uC704\uD55C \uCEE8\uD14C\uC774\uB108\uC785\uB2C8\uB2E4.","\uBE60\uB978 \uC120\uD0DD\uAE30 \uC804\uACBD\uC0C9. \uC774 \uBE60\uB978 \uC120\uD0DD\uAE30 \uC704\uC82F\uC740 \uBA85\uB839 \uD314\uB808\uD2B8\uC640 \uAC19\uC740 \uC120\uD0DD\uAE30\uB97C \uC704\uD55C \uCEE8\uD14C\uC774\uB108\uC785\uB2C8\uB2E4.","\uBE60\uB978 \uC120\uD0DD\uAE30 \uC81C\uBAA9 \uBC30\uACBD\uC0C9. \uC774 \uBE60\uB978 \uC120\uD0DD\uAE30 \uC704\uC82F\uC740 \uBA85\uB839 \uD314\uB808\uD2B8\uC640 \uAC19\uC740 \uC120\uD0DD\uAE30\uB97C \uC704\uD55C \uCEE8\uD14C\uC774\uB108\uC785\uB2C8\uB2E4.","\uD3EC\uCEE4\uC2A4\uAC00 \uC788\uB294 \uD56D\uBAA9\uC758 \uBE60\uB978 \uC120\uD0DD\uAE30 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uADF8\uB8F9\uD654 \uB808\uC774\uBE14\uC5D0 \uB300\uD55C \uBE60\uB978 \uC120\uD0DD\uAE30 \uC0C9\uC785\uB2C8\uB2E4.","\uADF8\uB8F9\uD654 \uD14C\uB450\uB9AC\uC5D0 \uB300\uD55C \uBE60\uB978 \uC120\uD0DD\uAE30 \uC0C9\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uC120\uD0DD \uC601\uC5ED\uC758 \uC0C9\uC785\uB2C8\uB2E4.","\uACE0\uB300\uBE44\uB97C \uC704\uD55C \uC120\uD0DD \uD14D\uC2A4\uD2B8\uC758 \uC0C9\uC785\uB2C8\uB2E4.","\uBE44\uD65C\uC131 \uD3B8\uC9D1\uAE30\uC758 \uC120\uD0DD \uD56D\uBAA9 \uC0C9\uC785\uB2C8\uB2E4. \uAE30\uBCF8 \uC7A5\uC2DD\uC744 \uC228\uAE30\uC9C0 \uC54A\uB3C4\uB85D \uC0C9\uC740 \uBD88\uD22C\uBA85\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4.","\uC120\uD0DD \uC601\uC5ED\uACFC \uB3D9\uC77C\uD55C \uCF58\uD150\uCE20\uAC00 \uC788\uB294 \uC601\uC5ED\uC758 \uC0C9\uC785\uB2C8\uB2E4. \uAE30\uBCF8 \uC7A5\uC2DD\uC744 \uC228\uAE30\uC9C0 \uC54A\uB3C4\uB85D \uC0C9\uC740 \uBD88\uD22C\uBA85\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4.","\uC120\uD0DD \uC601\uC5ED\uACFC \uB3D9\uC77C\uD55C \uCF58\uD150\uCE20\uAC00 \uC788\uB294 \uC601\uC5ED\uC758 \uD14C\uB450\uB9AC \uC0C9\uC785\uB2C8\uB2E4.","\uD604\uC7AC \uAC80\uC0C9 \uC77C\uCE58 \uD56D\uBAA9\uC758 \uC0C9\uC785\uB2C8\uB2E4.","\uAE30\uD0C0 \uAC80\uC0C9 \uC77C\uCE58 \uD56D\uBAA9\uC758 \uC0C9\uC785\uB2C8\uB2E4. \uAE30\uBCF8 \uC7A5\uC2DD\uC744 \uC228\uAE30\uC9C0 \uC54A\uB3C4\uB85D \uC0C9\uC740 \uBD88\uD22C\uBA85\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4.","\uAC80\uC0C9\uC744 \uC81C\uD55C\uD558\uB294 \uBC94\uC704\uC758 \uC0C9\uC785\uB2C8\uB2E4. \uAE30\uBCF8 \uC7A5\uC2DD\uC744 \uC228\uAE30\uC9C0 \uC54A\uB3C4\uB85D \uC0C9\uC740 \uBD88\uD22C\uBA85\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4.","\uD604\uC7AC \uAC80\uC0C9\uACFC \uC77C\uCE58\uD558\uB294 \uD14C\uB450\uB9AC \uC0C9\uC785\uB2C8\uB2E4.","\uB2E4\uB978 \uAC80\uC0C9\uACFC \uC77C\uCE58\uD558\uB294 \uD14C\uB450\uB9AC \uC0C9\uC785\uB2C8\uB2E4.","\uAC80\uC0C9\uC744 \uC81C\uD55C\uD558\uB294 \uBC94\uC704\uC758 \uD14C\uB450\uB9AC \uC0C9\uC785\uB2C8\uB2E4. \uAE30\uBCF8 \uC7A5\uC2DD\uC744 \uC228\uAE30\uC9C0 \uC54A\uB3C4\uB85D \uC0C9\uC740 \uBD88\uD22C\uBA85\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4.","\uD638\uBC84\uAC00 \uD45C\uC2DC\uB41C \uB2E8\uC5B4 \uC544\uB798\uB97C \uAC15\uC870 \uD45C\uC2DC\uD569\uB2C8\uB2E4. \uAE30\uBCF8 \uC7A5\uC2DD\uC744 \uC228\uAE30\uC9C0 \uC54A\uB3C4\uB85D \uC0C9\uC740 \uBD88\uD22C\uBA85\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uD638\uBC84\uC758 \uBC30\uACBD\uC0C9.","\uD3B8\uC9D1\uAE30 \uD638\uBC84\uC758 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uD638\uBC84\uC758 \uD14C\uB450\uB9AC \uC0C9\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uD638\uBC84 \uC0C1\uD0DC \uD45C\uC2DC\uC904\uC758 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uD65C\uC131 \uB9C1\uD06C\uC758 \uC0C9\uC785\uB2C8\uB2E4.","\uC778\uB77C\uC778 \uD78C\uD2B8\uC758 \uC804\uACBD\uC0C9","\uC778\uB77C\uC778 \uD78C\uD2B8\uC758 \uBC30\uACBD\uC0C9","\uC804\uAD6C \uC791\uC5C5 \uC544\uC774\uCF58\uC5D0 \uC0AC\uC6A9\uB418\uB294 \uC0C9\uC0C1\uC785\uB2C8\uB2E4.","\uC804\uAD6C \uC790\uB3D9 \uC218\uC815 \uC791\uC5C5 \uC544\uC774\uCF58\uC5D0 \uC0AC\uC6A9\uB418\uB294 \uC0C9\uC0C1\uC785\uB2C8\uB2E4.","\uC0BD\uC785\uB41C \uD14D\uC2A4\uD2B8\uC758 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uAE30\uBCF8 \uC7A5\uC2DD\uC744 \uC228\uAE30\uC9C0 \uC54A\uB3C4\uB85D \uC0C9\uC740 \uBD88\uD22C\uBA85\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4.","\uC81C\uAC70\uB41C \uD14D\uC2A4\uD2B8 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uAE30\uBCF8 \uC7A5\uC2DD\uC744 \uC228\uAE30\uC9C0 \uC54A\uB3C4\uB85D \uC0C9\uC740 \uBD88\uD22C\uBA85\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4.","\uC0BD\uC785\uB41C \uD14D\uC2A4\uD2B8\uC758 \uC724\uACFD\uC120 \uC0C9\uC785\uB2C8\uB2E4.","\uC81C\uAC70\uB41C \uD14D\uC2A4\uD2B8\uC758 \uC724\uACFD\uC120 \uC0C9\uC785\uB2C8\uB2E4.","\uB450 \uD14D\uC2A4\uD2B8 \uD3B8\uC9D1\uAE30 \uC0AC\uC774\uC758 \uD14C\uB450\uB9AC \uC0C9\uC785\uB2C8\uB2E4.","diff \uD3B8\uC9D1\uAE30\uC758 \uB300\uAC01\uC120 \uCC44\uC6B0\uAE30 \uC0C9\uC785\uB2C8\uB2E4. \uB300\uAC01\uC120 \uCC44\uC6B0\uAE30\uB294 diff \uB098\uB780\uD788 \uBCF4\uAE30\uC5D0\uC11C \uC0AC\uC6A9\uB429\uB2C8\uB2E4.","\uBAA9\uB85D/\uD2B8\uB9AC\uAC00 \uD65C\uC131 \uC0C1\uD0DC\uC778 \uACBD\uC6B0 \uD3EC\uCEE4\uC2A4\uAC00 \uC788\uB294 \uD56D\uBAA9\uC758 \uBAA9\uB85D/\uD2B8\uB9AC \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uBAA9\uB85D/\uD2B8\uB9AC\uAC00 \uD65C\uC131 \uC0C1\uD0DC\uC774\uBA74 \uD0A4\uBCF4\uB4DC \uD3EC\uCEE4\uC2A4\uB97C \uAC00\uC9C0\uBA70, \uBE44\uD65C\uC131 \uC0C1\uD0DC\uC774\uBA74 \uD3EC\uCEE4\uC2A4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.","\uBAA9\uB85D/\uD2B8\uB9AC\uAC00 \uD65C\uC131 \uC0C1\uD0DC\uC778 \uACBD\uC6B0 \uD3EC\uCEE4\uC2A4\uAC00 \uC788\uB294 \uD56D\uBAA9\uC758 \uBAA9\uB85D/\uD2B8\uB9AC \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uBAA9\uB85D/\uD2B8\uB9AC\uAC00 \uD65C\uC131 \uC0C1\uD0DC\uC774\uBA74 \uD0A4\uBCF4\uB4DC \uD3EC\uCEE4\uC2A4\uB97C \uAC00\uC9C0\uBA70, \uBE44\uD65C\uC131 \uC0C1\uD0DC\uC774\uBA74 \uD3EC\uCEE4\uC2A4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.","\uBAA9\uB85D/\uD2B8\uB9AC\uAC00 \uD65C\uC131 \uC0C1\uD0DC\uC778 \uACBD\uC6B0 \uD3EC\uCEE4\uC2A4\uAC00 \uC788\uB294 \uD56D\uBAA9\uC758 \uBAA9\uB85D/\uD2B8\uB9AC \uC724\uACFD\uC120 \uC0C9\uC785\uB2C8\uB2E4. \uBAA9\uB85D/\uD2B8\uB9AC\uAC00 \uD65C\uC131 \uC0C1\uD0DC\uC774\uBA74 \uD0A4\uBCF4\uB4DC \uD3EC\uCEE4\uC2A4\uB97C \uAC00\uC9C0\uBA70, \uBE44\uD65C\uC131 \uC0C1\uD0DC\uC774\uBA74 \uD3EC\uCEE4\uC2A4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.","\uBAA9\uB85D/\uD2B8\uB9AC\uAC00 \uD65C\uC131 \uC0C1\uD0DC\uC778 \uACBD\uC6B0 \uC120\uD0DD\uD55C \uD56D\uBAA9\uC758 \uBAA9\uB85D/\uD2B8\uB9AC \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uBAA9\uB85D/\uD2B8\uB9AC\uAC00 \uD65C\uC131 \uC0C1\uD0DC\uC774\uBA74 \uD0A4\uBCF4\uB4DC \uD3EC\uCEE4\uC2A4\uB97C \uAC00\uC9C0\uBA70, \uBE44\uD65C\uC131 \uC0C1\uD0DC\uC774\uBA74 \uD3EC\uCEE4\uC2A4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.","\uBAA9\uB85D/\uD2B8\uB9AC\uAC00 \uD65C\uC131 \uC0C1\uD0DC\uC778 \uACBD\uC6B0 \uC120\uD0DD\uD55C \uD56D\uBAA9\uC758 \uBAA9\uB85D/\uD2B8\uB9AC \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uBAA9\uB85D/\uD2B8\uB9AC\uAC00 \uD65C\uC131 \uC0C1\uD0DC\uC774\uBA74 \uD0A4\uBCF4\uB4DC \uD3EC\uCEE4\uC2A4\uB97C \uAC00\uC9C0\uBA70, \uBE44\uD65C\uC131 \uC0C1\uD0DC\uC774\uBA74 \uD3EC\uCEE4\uC2A4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.","\uBAA9\uB85D/\uD2B8\uB9AC\uAC00 \uBE44\uD65C\uC131 \uC0C1\uD0DC\uC778 \uACBD\uC6B0 \uC120\uD0DD\uD55C \uD56D\uBAA9\uC758 \uBAA9\uB85D/\uD2B8\uB9AC \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uBAA9\uB85D/\uD2B8\uB9AC\uAC00 \uD65C\uC131 \uC0C1\uD0DC\uC774\uBA74 \uD0A4\uBCF4\uB4DC \uD3EC\uCEE4\uC2A4\uB97C \uAC00\uC9C0\uBA70, \uBE44\uD65C\uC131 \uC0C1\uD0DC\uC774\uBA74 \uD3EC\uCEE4\uC2A4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.","\uBAA9\uB85D/\uD2B8\uB9AC\uAC00 \uBE44\uD65C\uC131 \uC0C1\uD0DC\uC778 \uACBD\uC6B0 \uC120\uD0DD\uD55C \uD56D\uBAA9\uC758 \uBAA9\uB85D/\uD2B8\uB9AC \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uBAA9\uB85D/\uD2B8\uB9AC\uAC00 \uD65C\uC131 \uC0C1\uD0DC\uC774\uBA74 \uD0A4\uBCF4\uB4DC \uD3EC\uCEE4\uC2A4\uB97C \uAC00\uC9C0\uBA70, \uBE44\uD65C\uC131 \uC0C1\uD0DC\uC774\uBA74 \uD3EC\uCEE4\uC2A4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.","\uBAA9\uB85D/\uD2B8\uB9AC\uAC00 \uBE44\uD65C\uC131 \uC0C1\uD0DC\uC778 \uACBD\uC6B0 \uD3EC\uCEE4\uC2A4\uAC00 \uC788\uB294 \uD56D\uBAA9\uC758 \uBAA9\uB85D/\uD2B8\uB9AC \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4. \uBAA9\uB85D/\uD2B8\uB9AC\uAC00 \uD65C\uC131 \uC0C1\uD0DC\uC774\uBA74 \uD0A4\uBCF4\uB4DC \uD3EC\uCEE4\uC2A4\uB97C \uAC00\uC9C0\uBA70, \uBE44\uD65C\uC131 \uC0C1\uD0DC\uC774\uBA74 \uD3EC\uCEE4\uC2A4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.","\uBAA9\uB85D/\uD2B8\uB9AC\uAC00 \uBE44\uD65C\uC131 \uC0C1\uD0DC\uC778 \uACBD\uC6B0 \uD3EC\uCEE4\uC2A4\uAC00 \uC788\uB294 \uD56D\uBAA9\uC758 \uBAA9\uB85D/\uD2B8\uB9AC \uC724\uACFD\uC120 \uC0C9\uC785\uB2C8\uB2E4. \uBAA9\uB85D/\uD2B8\uB9AC\uAC00 \uD65C\uC131 \uC0C1\uD0DC\uC774\uBA74 \uD0A4\uBCF4\uB4DC \uD3EC\uCEE4\uC2A4\uB97C \uAC00\uC9C0\uBA70, \uBE44\uD65C\uC131 \uC0C1\uD0DC\uC774\uBA74 \uD3EC\uCEE4\uC2A4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.","\uB9C8\uC6B0\uC2A4\uB85C \uD56D\uBAA9\uC744 \uAC00\uB9AC\uD0AC \uB54C \uBAA9\uB85D/\uD2B8\uB9AC \uBC30\uACBD\uC785\uB2C8\uB2E4.","\uB9C8\uC6B0\uC2A4\uB85C \uD56D\uBAA9\uC744 \uAC00\uB9AC\uD0AC \uB54C \uBAA9\uB85D/\uD2B8\uB9AC \uC804\uACBD\uC785\uB2C8\uB2E4.","\uB9C8\uC6B0\uC2A4\uB85C \uD56D\uBAA9\uC744 \uC774\uB3D9\uD560 \uB54C \uBAA9\uB85D/\uD2B8\uB9AC \uB04C\uC5B4\uC11C \uB193\uAE30 \uBC30\uACBD\uC785\uB2C8\uB2E4.","\uBAA9\uB85D/\uD2B8\uB9AC \uB0B4\uC5D0\uC11C \uAC80\uC0C9\uD560 \uB54C \uC77C\uCE58 \uD56D\uBAA9 \uAC15\uC870 \uD45C\uC2DC\uC758 \uBAA9\uB85D/\uD2B8\uB9AC \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uBAA9\uB85D \uBC0F \uD2B8\uB9AC\uC5D0\uC11C \uD615\uC2DD \uD544\uD130 \uC704\uC82F\uC758 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uBAA9\uB85D \uBC0F \uD2B8\uB9AC\uC5D0\uC11C \uD615\uC2DD \uD544\uD130 \uC704\uC82F\uC758 \uC724\uACFD\uC120 \uC0C9\uC785\uB2C8\uB2E4.","\uC77C\uCE58\uD558\uB294 \uD56D\uBAA9\uC774 \uC5C6\uC744 \uB54C \uBAA9\uB85D \uBC0F \uD2B8\uB9AC\uC5D0\uC11C \uD45C\uC2DC\uB418\uB294 \uD615\uC2DD \uD544\uD130 \uC704\uC82F\uC758 \uC724\uACFD\uC120 \uC0C9\uC785\uB2C8\uB2E4.","\uB4E4\uC5EC\uC4F0\uAE30 \uAC00\uC774\uB4DC\uC758 \uD2B8\uB9AC \uC2A4\uD2B8\uB85C\uD06C \uC0C9\uC785\uB2C8\uB2E4.","\uB4E4\uC5EC\uC4F0\uAE30 \uAC00\uC774\uB4DC\uC758 \uD2B8\uB9AC \uC2A4\uD2B8\uB85C\uD06C \uC0C9\uC785\uB2C8\uB2E4.","\uBA54\uB274 \uD14C\uB450\uB9AC \uC0C9\uC785\uB2C8\uB2E4.","\uBA54\uB274 \uD56D\uBAA9 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uBA54\uB274 \uD56D\uBAA9 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uBA54\uB274\uC758 \uC120\uD0DD\uB41C \uBA54\uB274 \uD56D\uBAA9 \uC804\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uBA54\uB274\uC758 \uC120\uD0DD\uB41C \uBA54\uB274 \uD56D\uBAA9 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uBA54\uB274\uC758 \uC120\uD0DD\uB41C \uBA54\uB274 \uD56D\uBAA9 \uD14C\uB450\uB9AC \uC0C9\uC785\uB2C8\uB2E4.","\uBA54\uB274\uC5D0\uC11C \uAD6C\uBD84 \uAE30\uD638 \uBA54\uB274 \uD56D\uBAA9\uC758 \uC0C9\uC785\uB2C8\uB2E4.","\uCF54\uB4DC \uC870\uAC01 \uD0ED \uC815\uC9C0\uC758 \uAC15\uC870 \uD45C\uC2DC \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uCF54\uB4DC \uC870\uAC01 \uD0ED \uC815\uC9C0\uC758 \uAC15\uC870 \uD45C\uC2DC \uD14C\uB450\uB9AC \uC0C9\uC785\uB2C8\uB2E4.","\uCF54\uB4DC \uC870\uAC01 \uB9C8\uC9C0\uB9C9 \uD0ED \uC815\uC9C0\uC758 \uAC15\uC870 \uD45C\uC2DC \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uCF54\uB4DC \uC870\uAC01 \uB9C8\uC9C0\uB9C9 \uD0ED \uC815\uC9C0\uC758 \uAC15\uC870 \uD45C\uC2DC \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uC77C\uCE58 \uD56D\uBAA9 \uCC3E\uAE30\uC758 \uAC1C\uC694 \uB208\uAE08\uC790 \uD45C\uC2DD \uC0C9\uC785\uB2C8\uB2E4. \uAE30\uBCF8 \uC7A5\uC2DD\uC744 \uC228\uAE30\uC9C0 \uC54A\uB3C4\uB85D \uC0C9\uC740 \uBD88\uD22C\uBA85\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4.","\uC120\uD0DD \uD56D\uBAA9\uC758 \uAC1C\uC694 \uB208\uAE08\uC790 \uD45C\uC2DD \uC0C9\uC774 \uAC15\uC870 \uD45C\uC2DC\uB429\uB2C8\uB2E4. \uAE30\uBCF8 \uC7A5\uC2DD\uC744 \uC228\uAE30\uC9C0 \uC54A\uB3C4\uB85D \uC0C9\uC740 \uBD88\uD22C\uBA85\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4.","\uC77C\uCE58\uD558\uB294 \uD56D\uBAA9\uC744 \uCC3E\uAE30 \uC704\uD55C \uBBF8\uB2C8\uB9F5 \uD45C\uC2DD \uC0C9\uC785\uB2C8\uB2E4.","\uD3B8\uC9D1\uAE30 \uC120\uD0DD \uC791\uC5C5\uC744 \uC704\uD55C \uBBF8\uB2C8\uB9F5 \uB9C8\uCEE4 \uC0C9\uC785\uB2C8\uB2E4.","\uC624\uB958\uC5D0 \uB300\uD55C \uBBF8\uB2C8\uB9F5 \uB9C8\uCEE4 \uC0C9\uC0C1\uC785\uB2C8\uB2E4.","\uACBD\uACE0\uC758 \uBBF8\uB2C8\uB9F5 \uB9C8\uCEE4 \uC0C9\uC0C1\uC785\uB2C8\uB2E4.","\uBBF8\uB2C8\uB9F5 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uBBF8\uB2C8\uB9F5 \uC2AC\uB77C\uC774\uB354 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uB9C8\uC6B0\uC2A4\uB85C \uAC00\uB9AC\uD0AC \uB54C \uBBF8\uB2C8\uB9F5 \uC2AC\uB77C\uC774\uB354 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uD074\uB9AD\uD588\uC744 \uB54C \uBBF8\uB2C8\uB9F5 \uC2AC\uB77C\uC774\uB354 \uBC30\uACBD\uC0C9\uC785\uB2C8\uB2E4.","\uBB38\uC81C \uC624\uB958 \uC544\uC774\uCF58\uC5D0 \uC0AC\uC6A9\uB418\uB294 \uC0C9\uC785\uB2C8\uB2E4.","\uBB38\uC81C \uACBD\uACE0 \uC544\uC774\uCF58\uC5D0 \uC0AC\uC6A9\uB418\uB294 \uC0C9\uC785\uB2C8\uB2E4.","\uBB38\uC81C \uC815\uBCF4 \uC544\uC774\uCF58\uC5D0 \uC0AC\uC6A9\uB418\uB294 \uC0C9\uC785\uB2C8\uB2E4."],"vs/platform/theme/common/iconRegistry":["\uC0AC\uC6A9\uD560 \uAE00\uAF34\uC758 ID\uC785\uB2C8\uB2E4. \uC124\uC815\uD558\uC9C0 \uC54A\uC73C\uBA74 \uCCAB \uBC88\uC9F8\uB85C \uC815\uC758\uD55C \uAE00\uAF34\uC774 \uC0AC\uC6A9\uB429\uB2C8\uB2E4.","\uC544\uC774\uCF58 \uC815\uC758\uC640 \uC5F0\uACB0\uB41C \uAE00\uAF34 \uBB38\uC790\uC785\uB2C8\uB2E4.","\uC704\uC82F\uC5D0\uC11C \uB2EB\uAE30 \uC791\uC5C5\uC758 \uC544\uC774\uCF58\uC785\uB2C8\uB2E4."],"vs/platform/undoRedo/common/undoRedoService":["{0} \uD30C\uC77C\uC774 \uB2EB\uD788\uACE0 \uB514\uC2A4\uD06C\uC5D0\uC11C \uC218\uC815\uB418\uC5C8\uC2B5\uB2C8\uB2E4.","{0} \uD30C\uC77C\uC740 \uD638\uD658\uB418\uC9C0 \uC54A\uB294 \uBC29\uC2DD\uC73C\uB85C \uC218\uC815\uB418\uC5C8\uC2B5\uB2C8\uB2E4.","\uBAA8\uB4E0 \uD30C\uC77C\uC5D0\uC11C '{0}'\uC744(\uB97C) \uC2E4\uD589 \uCDE8\uC18C\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. {1}","\uBAA8\uB4E0 \uD30C\uC77C\uC5D0\uC11C '{0}'\uC744(\uB97C) \uC2E4\uD589 \uCDE8\uC18C\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. {1}","{1}\uC5D0 \uBCC0\uACBD \uB0B4\uC6A9\uC774 \uC801\uC6A9\uB418\uC5C8\uC73C\uBBC0\uB85C \uBAA8\uB4E0 \uD30C\uC77C\uC5D0\uC11C '{0}'\uC744(\uB97C) \uC2E4\uD589 \uCDE8\uC18C\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.","{1}\uC5D0\uC11C \uC2E4\uD589 \uCDE8\uC18C \uB610\uB294 \uB2E4\uC2DC \uC2E4\uD589 \uC791\uC5C5\uC774 \uC774\uBBF8 \uC2E4\uD589 \uC911\uC774\uBBC0\uB85C \uBAA8\uB4E0 \uD30C\uC77C\uC5D0\uC11C '{0}'\uC744(\uB97C) \uC2E4\uD589 \uCDE8\uC18C\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.","\uADF8\uB3D9\uC548 \uC2E4\uD589 \uCDE8\uC18C \uB610\uB294 \uB2E4\uC2DC \uC2E4\uD589 \uC791\uC5C5\uC774 \uBC1C\uC0DD\uD588\uAE30 \uB54C\uBB38\uC5D0 \uBAA8\uB4E0 \uD30C\uC77C\uC5D0\uC11C '{0}'\uC744(\uB97C) \uC2E4\uD589 \uCDE8\uC18C\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.","\uBAA8\uB4E0 \uD30C\uC77C\uC5D0\uC11C '{0}'\uC744(\uB97C) \uC2E4\uD589 \uCDE8\uC18C\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?","{0}\uAC1C \uD30C\uC77C\uC5D0\uC11C \uC2E4\uD589 \uCDE8\uC18C","\uC774 \uD30C\uC77C \uC2E4\uD589 \uCDE8\uC18C","\uCDE8\uC18C","\uC2E4\uD589 \uCDE8\uC18C \uB610\uB294 \uB2E4\uC2DC \uC2E4\uD589 \uC791\uC5C5\uC774 \uC774\uBBF8 \uC2E4\uD589 \uC911\uC774\uBBC0\uB85C '{0}'\uC744(\uB97C) \uC2E4\uD589 \uCDE8\uC18C\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.","'{0}'\uC744(\uB97C) \uC2E4\uD589 \uCDE8\uC18C\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?","\uC2E4\uD589 \uCDE8\uC18C","\uCDE8\uC18C","\uBAA8\uB4E0 \uD30C\uC77C\uC5D0\uC11C '{0}'\uC744(\uB97C) \uB2E4\uC2DC \uC2E4\uD589\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. {1}","\uBAA8\uB4E0 \uD30C\uC77C\uC5D0\uC11C '{0}'\uC744(\uB97C) \uB2E4\uC2DC \uC2E4\uD589\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. {1}","{1}\uC5D0 \uBCC0\uACBD \uB0B4\uC6A9\uC774 \uC801\uC6A9\uB418\uC5C8\uC73C\uBBC0\uB85C \uBAA8\uB4E0 \uD30C\uC77C\uC5D0\uC11C '{0}'\uC744(\uB97C) \uB2E4\uC2DC \uC2E4\uD589\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.","{1}\uC5D0\uC11C \uC2E4\uD589 \uCDE8\uC18C \uB610\uB294 \uB2E4\uC2DC \uC2E4\uD589 \uC791\uC5C5\uC774 \uC774\uBBF8 \uC2E4\uD589 \uC911\uC774\uBBC0\uB85C \uBAA8\uB4E0 \uD30C\uC77C\uC5D0\uC11C '{0}'\uC744(\uB97C) \uB2E4\uC2DC \uC2E4\uD589\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.","\uADF8\uB3D9\uC548 \uC2E4\uD589 \uCDE8\uC18C \uB610\uB294 \uB2E4\uC2DC \uC2E4\uD589 \uC791\uC5C5\uC774 \uBC1C\uC0DD\uD588\uAE30 \uB54C\uBB38\uC5D0 \uBAA8\uB4E0 \uD30C\uC77C\uC5D0\uC11C '{0}'\uC744(\uB97C) \uB2E4\uC2DC \uC2E4\uD589\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.","\uC2E4\uD589 \uCDE8\uC18C \uB610\uB294 \uB2E4\uC2DC \uC2E4\uD589 \uC791\uC5C5\uC774 \uC774\uBBF8 \uC2E4\uD589 \uC911\uC774\uBBC0\uB85C '{0}'\uC744(\uB97C) \uB2E4\uC2DC \uC2E4\uD589\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."]}); diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/editor/editor.main.nls.ru.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/editor/editor.main.nls.ru.js new file mode 100644 index 0000000000..205ebca88e --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/editor/editor.main.nls.ru.js @@ -0,0 +1,8 @@ +/*!----------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Version: 0.23.0(82e8ea39fc101d639262435542c7d43bc20d8aa2) + * Released under the MIT license + * https://github.com/microsoft/vscode/blob/main/LICENSE.txt + *-----------------------------------------------------------*/define("vs/editor/editor.main.nls.ru",{"vs/base/browser/ui/actionbar/actionViewItems":["{0} ({1})"],"vs/base/browser/ui/findinput/findInput":["\u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435"],"vs/base/browser/ui/findinput/findInputCheckboxes":["\u0421 \u0443\u0447\u0435\u0442\u043E\u043C \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430","\u0421\u043B\u043E\u0432\u043E \u0446\u0435\u043B\u0438\u043A\u043E\u043C","\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0440\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u043E\u0435 \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435"],"vs/base/browser/ui/findinput/replaceInput":["\u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435","\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0440\u0435\u0433\u0438\u0441\u0442\u0440"],"vs/base/browser/ui/iconLabel/iconLabel":["\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430\u2026"],"vs/base/browser/ui/inputbox/inputBox":["\u041E\u0448\u0438\u0431\u043A\u0430: {0}","\u041F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435: {0}","\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F: {0}"],"vs/base/browser/ui/keybindingLabel/keybindingLabel":["\u0441\u0432\u043E\u0431\u043E\u0434\u043D\u044B\u0439"],"vs/base/browser/ui/menu/menu":["{0} ({1})"],"vs/base/browser/ui/tree/abstractTree":["\u0421\u0431\u0440\u043E\u0441","\u041E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0444\u0438\u043B\u044C\u0442\u0440 \u043F\u043E \u0442\u0438\u043F\u0443","\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0444\u0438\u043B\u044C\u0442\u0440 \u043F\u043E \u0442\u0438\u043F\u0443","\u042D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u044B","\u0421\u043E\u043F\u043E\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u043E \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432: {0} \u0438\u0437 {1}"],"vs/base/common/actions":["(\u043F\u0443\u0441\u0442\u043E)"],"vs/base/common/errorMessage":["{0}: {1}","\u041F\u0440\u043E\u0438\u0437\u043E\u0448\u043B\u0430 \u0441\u0438\u0441\u0442\u0435\u043C\u043D\u0430\u044F \u043E\u0448\u0438\u0431\u043A\u0430 ({0})","\u041F\u0440\u043E\u0438\u0437\u043E\u0448\u043B\u0430 \u043D\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043D\u0430\u044F \u043E\u0448\u0438\u0431\u043A\u0430. \u041F\u043E\u0434\u0440\u043E\u0431\u043D\u044B\u0435 \u0441\u0432\u0435\u0434\u0435\u043D\u0438\u044F \u0441\u043C. \u0432 \u0436\u0443\u0440\u043D\u0430\u043B\u0435.","\u041F\u0440\u043E\u0438\u0437\u043E\u0448\u043B\u0430 \u043D\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043D\u0430\u044F \u043E\u0448\u0438\u0431\u043A\u0430. \u041F\u043E\u0434\u0440\u043E\u0431\u043D\u044B\u0435 \u0441\u0432\u0435\u0434\u0435\u043D\u0438\u044F \u0441\u043C. \u0432 \u0436\u0443\u0440\u043D\u0430\u043B\u0435.","{0} (\u0432\u0441\u0435\u0433\u043E \u043E\u0448\u0438\u0431\u043E\u043A: {1})","\u041F\u0440\u043E\u0438\u0437\u043E\u0448\u043B\u0430 \u043D\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043D\u0430\u044F \u043E\u0448\u0438\u0431\u043A\u0430. \u041F\u043E\u0434\u0440\u043E\u0431\u043D\u044B\u0435 \u0441\u0432\u0435\u0434\u0435\u043D\u0438\u044F \u0441\u043C. \u0432 \u0436\u0443\u0440\u043D\u0430\u043B\u0435."],"vs/base/common/keybindingLabels":["CTRL","SHIFT","ALT","Windows","CTRL","SHIFT","ALT","\u041F\u0440\u0435\u0432\u043E\u0441\u0445\u043E\u0434\u043D\u043E","CTRL","SHIFT","ALT","\u041A\u043E\u043C\u0430\u043D\u0434\u0430","CTRL","SHIFT","ALT","Windows","CTRL","SHIFT","ALT","\u041F\u0440\u0435\u0432\u043E\u0441\u0445\u043E\u0434\u043D\u043E"],"vs/base/parts/quickinput/browser/quickInput":["\u041D\u0430\u0437\u0430\u0434","{0} / {1}","\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u0435\u043A\u0441\u0442, \u0447\u0442\u043E\u0431\u044B \u0443\u043C\u0435\u043D\u044C\u0448\u0438\u0442\u044C \u0447\u0438\u0441\u043B\u043E \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432.","\u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B: {0}","{0} \u0432\u044B\u0431\u0440\u0430\u043D\u043E","OK","\u0414\u0440\u0443\u0433\u043E\u0439","\u041D\u0430\u0437\u0430\u0434 ({0})","\u041D\u0430\u0437\u0430\u0434"],"vs/base/parts/quickinput/browser/quickInputList":["\u0411\u044B\u0441\u0442\u0440\u044B\u0439 \u0432\u0432\u043E\u0434"],"vs/editor/browser/controller/coreCommands":["\u0420\u0430\u0437\u043C\u0435\u0449\u0430\u0442\u044C \u043D\u0430 \u043A\u043E\u043D\u0446\u0435 \u0434\u0430\u0436\u0435 \u0434\u043B\u044F \u0431\u043E\u043B\u0435\u0435 \u0434\u043B\u0438\u043D\u043D\u044B\u0445 \u0441\u0442\u0440\u043E\u043A","\u0420\u0430\u0437\u043C\u0435\u0449\u0430\u0442\u044C \u043D\u0430 \u043A\u043E\u043D\u0446\u0435 \u0434\u0430\u0436\u0435 \u0434\u043B\u044F \u0431\u043E\u043B\u0435\u0435 \u0434\u043B\u0438\u043D\u043D\u044B\u0445 \u0441\u0442\u0440\u043E\u043A"],"vs/editor/browser/controller/textAreaHandler":["\u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440","\u0421\u0435\u0439\u0447\u0430\u0441 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u0435\u043D. \u041D\u0430\u0436\u043C\u0438\u0442\u0435 {0} \u0434\u043B\u044F \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u043E\u0432."],"vs/editor/browser/core/keybindingCancellation":['\u0412\u044B\u043F\u043E\u043B\u043D\u044F\u044E\u0442\u0441\u044F \u043B\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0438, \u0434\u043E\u043F\u0443\u0441\u043A\u0430\u044E\u0449\u0438\u0435 \u043E\u0442\u043C\u0435\u043D\u0443, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, "\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0441\u0441\u044B\u043B\u043A\u0438"'],"vs/editor/browser/editorExtensions":["&&\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C","\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C","&&\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C","\u0412\u0435\u0440\u043D\u0443\u0442\u044C","&&\u0412\u044B\u0434\u0435\u043B\u0438\u0442\u044C \u0432\u0441\u0435","\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0432\u0441\u0435"],"vs/editor/browser/widget/codeEditorWidget":["\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u043A\u0443\u0440\u0441\u043E\u0440\u043E\u0432 \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0435\u043D\u043E {0}."],"vs/editor/browser/widget/diffEditorWidget":["\u041E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u0435 \u0441\u0442\u0440\u043E\u043A\u0438 \u0434\u043B\u044F \u0432\u0441\u0442\u0430\u0432\u043E\u043A \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043D\u0435\u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0439.","\u041E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u0435 \u0441\u0442\u0440\u043E\u043A\u0438 \u0434\u043B\u044F \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0439 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043D\u0435\u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0439.","\u041D\u0435\u043B\u044C\u0437\u044F \u0441\u0440\u0430\u0432\u043D\u0438\u0442\u044C \u0444\u0430\u0439\u043B\u044B, \u043F\u043E\u0442\u043E\u043C\u0443 \u0447\u0442\u043E \u043E\u0434\u0438\u043D \u0438\u0437 \u0444\u0430\u0439\u043B\u043E\u0432 \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0439."],"vs/editor/browser/widget/diffReview":['\u0417\u043D\u0430\u0447\u043E\u043A \u0434\u043B\u044F \u043A\u043D\u043E\u043F\u043A\u0438 "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C" \u0432 \u043E\u043A\u043D\u0435 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438 \u043D\u0435\u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0439.','\u0417\u043D\u0430\u0447\u043E\u043A \u0434\u043B\u044F \u043A\u043D\u043E\u043F\u043A\u0438 "\u0423\u0434\u0430\u043B\u0438\u0442\u044C" \u0432 \u043E\u043A\u043D\u0435 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438 \u043D\u0435\u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0439.','\u0417\u043D\u0430\u0447\u043E\u043A \u0434\u043B\u044F \u043A\u043D\u043E\u043F\u043A\u0438 "\u0417\u0430\u043A\u0440\u044B\u0442\u044C" \u0432 \u043E\u043A\u043D\u0435 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438 \u043D\u0435\u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0439.',"\u0417\u0430\u043A\u0440\u044B\u0442\u044C","\u043D\u0435\u0442 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u043D\u044B\u0445 \u0441\u0442\u0440\u043E\u043A","1 \u0441\u0442\u0440\u043E\u043A\u0430 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0430","\u0421\u0442\u0440\u043E\u043A \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u043E: {0}","\u0420\u0430\u0437\u043B\u0438\u0447\u0438\u0435 {0} \u0438\u0437 {1}: \u0438\u0441\u0445\u043E\u0434\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 {2}, {3}, \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 {4}, {5}","\u043F\u0443\u0441\u0442\u043E\u0439","{0} \u043D\u0435\u0438\u0437\u043C\u0435\u043D\u0435\u043D\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 {1}","{0} \u0438\u0441\u0445\u043E\u0434\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 {1} \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 {2}","+ {0} \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 {1}","- {0} \u0438\u0441\u0445\u043E\u0434\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 {1}","\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u043C\u0443 \u0440\u0430\u0437\u043B\u0438\u0447\u0438\u044E","\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u043F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0435\u043C\u0443 \u0440\u0430\u0437\u043B\u0438\u0447\u0438\u044E"],"vs/editor/browser/widget/inlineDiffMargin":["\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0443\u0434\u0430\u043B\u0435\u043D\u043D\u044B\u0435 \u0441\u0442\u0440\u043E\u043A\u0438","\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0443\u0434\u0430\u043B\u0435\u043D\u043D\u0443\u044E \u0441\u0442\u0440\u043E\u043A\u0443","\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0443\u0434\u0430\u043B\u0435\u043D\u043D\u0443\u044E \u0441\u0442\u0440\u043E\u043A\u0443 ({0})","\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u044D\u0442\u043E \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435","\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0443\u0434\u0430\u043B\u0435\u043D\u043D\u0443\u044E \u0441\u0442\u0440\u043E\u043A\u0443 ({0})"],"vs/editor/common/config/commonEditorConfig":["\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440",'\u0427\u0438\u0441\u043B\u043E \u043F\u0440\u043E\u0431\u0435\u043B\u043E\u0432 \u0432 \u0442\u0430\u0431\u0443\u043B\u044F\u0446\u0438\u0438. \u042D\u0442\u043E\u0442 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u043F\u0435\u0440\u0435\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442\u0441\u044F \u043D\u0430 \u043E\u0441\u043D\u043E\u0432\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0433\u043E \u0444\u0430\u0439\u043B\u0430, \u0435\u0441\u043B\u0438 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 "#editor.detectIndentation#".','\u0412\u0441\u0442\u0430\u0432\u043B\u044F\u0442\u044C \u043F\u0440\u043E\u0431\u0435\u043B\u044B \u043F\u0440\u0438 \u043D\u0430\u0436\u0430\u0442\u0438\u0438 \u043A\u043B\u0430\u0432\u0438\u0448\u0438 TAB. \u042D\u0442\u043E\u0442 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u043F\u0435\u0440\u0435\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442\u0441\u044F \u043D\u0430 \u043E\u0441\u043D\u043E\u0432\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0433\u043E \u0444\u0430\u0439\u043B\u0430, \u0435\u0441\u043B\u0438 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 "#editor.detectIndentation#". ','\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0442\u0435\u043C, \u0431\u0443\u0434\u0443\u0442 \u043B\u0438 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B "#editor.tabSize#" \u0438 "#editor.insertSpaces#" \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0442\u044C\u0441\u044F \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u043F\u0440\u0438 \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u0438 \u0444\u0430\u0439\u043B\u0430 \u043D\u0430 \u043E\u0441\u043D\u043E\u0432\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0433\u043E \u0444\u0430\u0439\u043B\u0430.',"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u0432\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u043C\u044B\u0439 \u043A\u043E\u043D\u0435\u0447\u043D\u044B\u0439 \u043F\u0440\u043E\u0431\u0435\u043B.","\u0421\u043F\u0435\u0446\u0438\u0430\u043B\u044C\u043D\u0430\u044F \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430 \u0434\u043B\u044F \u0431\u043E\u043B\u044C\u0448\u0438\u0445 \u0444\u0430\u0439\u043B\u043E\u0432 \u0441 \u043E\u0442\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435\u043C \u043D\u0435\u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u0444\u0443\u043D\u043A\u0446\u0438\u0439, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0438\u043D\u0442\u0435\u043D\u0441\u0438\u0432\u043D\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u044E\u0442 \u043F\u0430\u043C\u044F\u0442\u044C.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0441\u043B\u0435\u0434\u0443\u0435\u0442 \u043B\u0438 \u043E\u0446\u0435\u043D\u0438\u0432\u0430\u0442\u044C \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u044F \u043D\u0430 \u043E\u0441\u043D\u043E\u0432\u0435 \u0441\u043B\u043E\u0432 \u0432 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0435.","\u041F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0441\u043B\u043E\u0432 \u0442\u043E\u043B\u044C\u043A\u043E \u0438\u0437 \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u0433\u043E \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430.","\u041F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0441\u043B\u043E\u0432 \u0438\u0437 \u0432\u0441\u0435\u0445 \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0445 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432 \u043D\u0430 \u043E\u0434\u043D\u043E\u043C \u044F\u0437\u044B\u043A\u0435.","\u041F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0441\u043B\u043E\u0432 \u0438\u0437 \u0432\u0441\u0435\u0445 \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0445 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0438\u0437 \u043A\u0430\u043A\u0438\u0445 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432 \u0431\u0443\u0434\u0443\u0442 \u0432\u044B\u0447\u0438\u0441\u043B\u044F\u0442\u044C\u0441\u044F \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u044F \u043D\u0430 \u043E\u0441\u043D\u043E\u0432\u0435 \u0441\u043B\u043E\u0432.","\u0421\u0435\u043C\u0430\u043D\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u0435 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u043E \u0434\u043B\u044F \u0432\u0441\u0435\u0445 \u0446\u0432\u0435\u0442\u043E\u0432\u044B\u0445 \u0442\u0435\u043C.","\u0421\u0435\u043C\u0430\u043D\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u0435 \u043E\u0442\u043A\u043B\u044E\u0447\u0435\u043D\u043E \u0434\u043B\u044F \u0432\u0441\u0435\u0445 \u0446\u0432\u0435\u0442\u043E\u0432\u044B\u0445 \u0442\u0435\u043C.",'\u0421\u0435\u043C\u0430\u043D\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u0435 \u043D\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0430 "semanticHighlighting" \u0442\u0435\u043A\u0443\u0449\u0435\u0439 \u0446\u0432\u0435\u0442\u043E\u0432\u043E\u0439 \u0442\u0435\u043C\u044B.',"\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442 \u043F\u043E\u043A\u0430\u0437 \u0441\u0435\u043C\u0430\u043D\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0439 \u043F\u043E\u0434\u0441\u0432\u0435\u0442\u043A\u0438 \u0434\u043B\u044F \u044F\u0437\u044B\u043A\u043E\u0432, \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044E\u0449\u0438\u0445 \u0435\u0435.","\u041E\u0441\u0442\u0430\u0432\u043B\u044F\u0442\u044C \u0431\u044B\u0441\u0442\u0440\u044B\u0439 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u043C \u0434\u0430\u0436\u0435 \u043F\u0440\u0438 \u0434\u0432\u043E\u0439\u043D\u043E\u043C \u0449\u0435\u043B\u0447\u043A\u0435 \u043F\u043E \u0435\u0433\u043E \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u043C\u0443 \u0438 \u043F\u0440\u0438 \u043D\u0430\u0436\u0430\u0442\u0438\u0438 ESC.","\u0421\u0442\u0440\u043E\u043A\u0438, \u0434\u043B\u0438\u043D\u0430 \u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u043F\u0440\u0435\u0432\u044B\u0448\u0430\u0435\u0442 \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435, \u043D\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0437\u043C\u0435\u0447\u0435\u043D\u044B \u0438\u0437 \u0441\u043E\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439 \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u0438","\u0412\u0440\u0435\u043C\u044F \u043E\u0436\u0438\u0434\u0430\u043D\u0438\u044F \u0432 \u043C\u0438\u043B\u043B\u0438\u0441\u0435\u043A\u0443\u043D\u0434\u0430\u0445, \u043F\u043E \u0438\u0441\u0442\u0435\u0447\u0435\u043D\u0438\u0438 \u043A\u043E\u0442\u043E\u0440\u043E\u0433\u043E \u0432\u044B\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u0435 \u043D\u0435\u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0439 \u043E\u0442\u043C\u0435\u043D\u044F\u0435\u0442\u0441\u044F. \u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 0, \u0447\u0442\u043E\u0431\u044B \u043D\u0435 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0432\u0440\u0435\u043C\u044F \u043E\u0436\u0438\u0434\u0430\u043D\u0438\u044F.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u043A\u0430\u043A \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043D\u0435\u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0439 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u043E\u0442\u043B\u0438\u0447\u0438\u044F: \u0440\u044F\u0434\u043E\u043C \u0438\u043B\u0438 \u0432 \u0442\u0435\u043A\u0441\u0442\u0435.","\u041A\u043E\u0433\u0434\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D, \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043D\u0435\u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0439 \u0438\u0433\u043D\u043E\u0440\u0438\u0440\u0443\u0435\u0442 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u043E\u0433\u043E \u0438\u043B\u0438 \u043A\u043E\u043D\u0435\u0447\u043D\u043E\u0433\u043E \u043F\u0440\u043E\u0431\u0435\u043B\u0430.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0434\u043E\u043B\u0436\u043D\u044B \u043B\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C\u0441\u044F \u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\u0440\u044B +/- \u0434\u043B\u044F \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043D\u044B\u0445 \u0438\u043B\u0438 \u0443\u0434\u0430\u043B\u0435\u043D\u043D\u044B\u0445 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044F \u043B\u0438 CodeLens \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435.","\u0421\u0442\u0440\u043E\u043A\u0438 \u043D\u0435 \u0431\u0443\u0434\u0443\u0442 \u043F\u0435\u0440\u0435\u043D\u043E\u0441\u0438\u0442\u044C\u0441\u044F \u043D\u0438\u043A\u043E\u0433\u0434\u0430.","\u0421\u0442\u0440\u043E\u043A\u0438 \u0431\u0443\u0434\u0443\u0442 \u043F\u0435\u0440\u0435\u043D\u043E\u0441\u0438\u0442\u044C\u0441\u044F \u043F\u043E \u0448\u0438\u0440\u0438\u043D\u0435 \u043E\u043A\u043D\u0430 \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0430.",'\u0421\u0442\u0440\u043E\u043A\u0438 \u0431\u0443\u0434\u0443\u0442 \u043F\u0435\u0440\u0435\u043D\u043E\u0441\u0438\u0442\u044C\u0441\u044F \u0432 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u043C "#editor.wordWrap#".'],"vs/editor/common/config/editorOptions":["\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0431\u0443\u0434\u0435\u0442 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0442\u044C, \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043E \u043B\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043E \u0447\u0442\u0435\u043D\u0438\u044F \u0441 \u044D\u043A\u0440\u0430\u043D\u0430, \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E API-\u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043E\u0432 \u043F\u043B\u0430\u0442\u0444\u043E\u0440\u043C\u044B.","\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0431\u0443\u0434\u0435\u0442 \u043E\u043F\u0442\u0438\u043C\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u043D \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F \u0441\u043E \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043E\u043C \u0447\u0442\u0435\u043D\u0438\u044F \u0441 \u044D\u043A\u0440\u0430\u043D\u0430 \u0432 \u043F\u043E\u0441\u0442\u043E\u044F\u043D\u043D\u043E\u043C \u0440\u0435\u0436\u0438\u043C\u0435. \u041F\u0435\u0440\u0435\u043D\u043E\u0441 \u0442\u0435\u043A\u0441\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u043E\u0442\u043A\u043B\u044E\u0447\u0435\u043D.","\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043D\u0438\u043A\u043E\u0433\u0434\u0430 \u043D\u0435 \u0431\u0443\u0434\u0435\u0442 \u043E\u043F\u0442\u0438\u043C\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F \u0441\u043E \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043E\u043C \u0447\u0442\u0435\u043D\u0438\u044F \u0441 \u044D\u043A\u0440\u0430\u043D\u0430.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0441\u043B\u0435\u0434\u0443\u0435\u0442 \u043B\u0438 \u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u044C \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0432 \u0440\u0435\u0436\u0438\u043C\u0435 \u043E\u043F\u0442\u0438\u043C\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043B\u044F \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0447\u0442\u0435\u043D\u0438\u044F \u0441 \u044D\u043A\u0440\u0430\u043D\u0430. \u0415\u0441\u043B\u0438 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D, \u043F\u0435\u0440\u0435\u043D\u043E\u0441 \u0441\u0442\u0440\u043E\u043A \u0431\u0443\u0434\u0435\u0442 \u043E\u0442\u043A\u043B\u044E\u0447\u0435\u043D.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0432\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u043B\u0438 \u043F\u0440\u043E\u0431\u0435\u043B \u043F\u0440\u0438 \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0438.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0434\u043E\u043B\u0436\u043D\u044B \u043B\u0438 \u043F\u0443\u0441\u0442\u044B\u0435 \u0441\u0442\u0440\u043E\u043A\u0438 \u0438\u0433\u043D\u043E\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F, \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u0438\u043B\u0438 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F \u0434\u043B\u044F \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0435\u0432 \u043A \u0441\u0442\u0440\u043E\u043A\u0430\u043C.","\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0442\u0435\u043C, \u043A\u043E\u043F\u0438\u0440\u0443\u0435\u0442\u0441\u044F \u043B\u0438 \u0442\u0435\u043A\u0443\u0449\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 \u043F\u0440\u0438 \u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0438 \u0431\u0435\u0437 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0434\u043E\u043B\u0436\u0435\u043D \u043B\u0438 \u043A\u0443\u0440\u0441\u043E\u0440 \u043F\u0435\u0440\u0435\u043C\u0435\u0449\u0430\u0442\u044C\u0441\u044F \u0434\u043B\u044F \u043F\u043E\u0438\u0441\u043A\u0430 \u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0439 \u043F\u0440\u0438 \u0432\u0432\u043E\u0434\u0435.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u043C\u043E\u0436\u043D\u043E \u043B\u0438 \u043F\u0435\u0440\u0435\u0434\u0430\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443 \u043F\u043E\u0438\u0441\u043A\u0430 \u0432 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u043F\u043E\u0438\u0441\u043A\u0430 \u0438\u0437 \u0442\u0435\u043A\u0441\u0442\u0430, \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u043E\u0433\u043E \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435.",'\u041D\u0438\u043A\u043E\u0433\u0434\u0430 \u043D\u0435 \u0432\u043A\u043B\u044E\u0447\u0430\u0442\u044C \u0444\u0443\u043D\u043A\u0446\u0438\u044E "\u041D\u0430\u0439\u0442\u0438 \u0432 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u0438" \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 (\u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E)','\u0412\u0441\u0435\u0433\u0434\u0430 \u0432\u043A\u043B\u044E\u0447\u0430\u0442\u044C \u0444\u0443\u043D\u043A\u0446\u0438\u044E "\u041D\u0430\u0439\u0442\u0438 \u0432 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u0438" \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438','\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 \u0444\u0443\u043D\u043A\u0446\u0438\u0438 "\u041D\u0430\u0439\u0442\u0438 \u0432 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u0438" \u043F\u0440\u0438 \u0432\u044B\u0431\u043E\u0440\u0435 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u0438\u0445 \u0441\u0442\u0440\u043E\u043A \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0433\u043E.',"\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0443\u0441\u043B\u043E\u0432\u0438\u0435\u043C \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F \u043F\u043E\u0438\u0441\u043A\u0430 \u0432 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u043E\u043C \u0444\u0440\u0430\u0433\u043C\u0435\u043D\u0442\u0435.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0434\u043E\u043B\u0436\u043D\u043E \u043B\u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u043F\u043E\u0438\u0441\u043A\u0430 \u0441\u0447\u0438\u0442\u044B\u0432\u0430\u0442\u044C \u0438\u043B\u0438 \u0438\u0437\u043C\u0435\u043D\u044F\u0442\u044C \u043E\u0431\u0449\u0438\u0439 \u0431\u0443\u0444\u0435\u0440 \u043E\u0431\u043C\u0435\u043D\u0430 \u043F\u043E\u0438\u0441\u043A\u0430 \u0432 macOS.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0434\u043E\u043B\u0436\u043D\u043E \u043B\u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u043F\u043E\u0438\u0441\u043A\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u0441\u0442\u0440\u043E\u043A\u0438 \u0432 \u043D\u0430\u0447\u0430\u043B\u0435 \u043E\u043A\u043D\u0430 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430. \u0415\u0441\u043B\u0438 \u0437\u0430\u0434\u0430\u043D\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 true, \u0432\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u043F\u0440\u043E\u043A\u0440\u0443\u0442\u0438\u0442\u044C \u043F\u0435\u0440\u0432\u0443\u044E \u0441\u0442\u0440\u043E\u043A\u0443 \u043F\u0440\u0438 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0435\u043C\u043E\u043C \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u043E\u0438\u0441\u043A\u0430.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0431\u0443\u0434\u0435\u0442 \u043B\u0438 \u043F\u043E\u0438\u0441\u043A \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u043A\u0430\u0442\u044C\u0441\u044F \u0441 \u043D\u0430\u0447\u0430\u043B\u0430 (\u0438\u043B\u0438 \u0441 \u043A\u043E\u043D\u0446\u0430), \u0435\u0441\u043B\u0438 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043D\u0438\u043A\u0430\u043A\u0438\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0439.",'\u0412\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u0438\u043B\u0438 \u043E\u0442\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u043B\u0438\u0433\u0430\u0442\u0443\u0440\u044B \u0448\u0440\u0438\u0444\u0442\u043E\u0432 (\u0445\u0430\u0440\u0430\u043A\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043A\u0438 \u0448\u0440\u0438\u0444\u0442\u0430 "calt" \u0438 "liga"). \u0418\u0437\u043C\u0435\u043D\u0438\u0442\u0435 \u044D\u0442\u043E\u0442 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u043D\u0430 \u0441\u0442\u0440\u043E\u043A\u0443 \u0434\u043B\u044F \u0434\u0435\u0442\u0430\u043B\u044C\u043D\u043E\u0433\u043E \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u043E\u043C CSS "font-feature-settings".','\u042F\u0432\u043D\u043E\u0435 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u043E CSS "font-feature-settings". \u0415\u0441\u043B\u0438 \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E \u0442\u043E\u043B\u044C\u043A\u043E \u0432\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0438\u043B\u0438 \u043E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043B\u0438\u0433\u0430\u0442\u0443\u0440\u044B, \u0432\u043C\u0435\u0441\u0442\u043E \u043D\u0435\u0433\u043E \u043C\u043E\u0436\u043D\u043E \u043F\u0435\u0440\u0435\u0434\u0430\u0442\u044C \u043B\u043E\u0433\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435.','\u041D\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u043B\u0438\u0433\u0430\u0442\u0443\u0440\u044B \u0438\u043B\u0438 \u0445\u0430\u0440\u0430\u043A\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043A\u0438 \u0448\u0440\u0438\u0444\u0442\u0430. \u041C\u043E\u0436\u043D\u043E \u0443\u043A\u0430\u0437\u0430\u0442\u044C \u043B\u043E\u0433\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435, \u0447\u0442\u043E\u0431\u044B \u0432\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0438\u043B\u0438 \u043E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043B\u0438\u0433\u0430\u0442\u0443\u0440\u044B, \u0438\u043B\u0438 \u0441\u0442\u0440\u043E\u043A\u0443 \u0434\u043B\u044F \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430 CSS "font-feature-settings".',"\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442 \u0440\u0430\u0437\u043C\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430 \u0432 \u043F\u0438\u043A\u0441\u0435\u043B\u044F\u0445.",'\u0414\u043E\u043F\u0443\u0441\u043A\u0430\u044E\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u043A\u043B\u044E\u0447\u0435\u0432\u044B\u0435 \u0441\u043B\u043E\u0432\u0430 "normal" \u0438\u043B\u0438 "bold" \u0438 \u0447\u0438\u0441\u043B\u0430 \u0432 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\u0435 \u043E\u0442 1 \u0434\u043E 1000.','\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u043D\u0430\u0441\u044B\u0449\u0435\u043D\u043D\u043E\u0441\u0442\u044C\u044E \u0448\u0440\u0438\u0444\u0442\u0430. \u0414\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F: \u043A\u043B\u044E\u0447\u0435\u0432\u044B\u0435 \u0441\u043B\u043E\u0432\u0430 "normal" \u0438\u043B\u0438 "bold", \u0430 \u0442\u0430\u043A\u0436\u0435 \u0447\u0438\u0441\u043B\u0430 \u0432 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\u0435 \u043E\u0442 1 \u0434\u043E 1000.',"\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u043F\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B (\u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E)","\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u043E\u0441\u043D\u043E\u0432\u043D\u043E\u043C\u0443 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0443 \u0438 \u043F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0431\u044B\u0441\u0442\u0440\u044B\u0439 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440","\u041F\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043A \u043E\u0441\u043D\u043E\u0432\u043D\u043E\u043C\u0443 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0443 \u0438 \u0432\u043A\u043B\u044E\u0447\u0438\u0442\u0435 \u0431\u044B\u0441\u0442\u0440\u0443\u044E \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044E \u0434\u043B\u044F \u043E\u0441\u0442\u0430\u043B\u044C\u043D\u044B\u0445","\u042D\u0442\u043E\u0442 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0443\u0441\u0442\u0430\u0440\u0435\u043B. \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u0432\u043C\u0435\u0441\u0442\u043E \u043D\u0435\u0433\u043E \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u044B\u0435 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, 'editor.editor.gotoLocation.multipleDefinitions' \u0438\u043B\u0438 'editor.editor.gotoLocation.multipleImplementations'.",'\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u043F\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u0435\u043C \u043A\u043E\u043C\u0430\u043D\u0434\u044B "\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u044E" \u043F\u0440\u0438 \u043D\u0430\u043B\u0438\u0447\u0438\u0438 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u0438\u0445 \u0446\u0435\u043B\u0435\u0432\u044B\u0445 \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0439.','\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u043F\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u0435\u043C \u043A\u043E\u043C\u0430\u043D\u0434\u044B "\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u044E \u0442\u0438\u043F\u0430" \u043F\u0440\u0438 \u043D\u0430\u043B\u0438\u0447\u0438\u0438 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u0438\u0445 \u0446\u0435\u043B\u0435\u0432\u044B\u0445 \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0439.','\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u043F\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u0435\u043C \u043A\u043E\u043C\u0430\u043D\u0434\u044B "\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u043E\u0431\u044A\u044F\u0432\u043B\u0435\u043D\u0438\u044E" \u043F\u0440\u0438 \u043D\u0430\u043B\u0438\u0447\u0438\u0438 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u0438\u0445 \u0446\u0435\u043B\u0435\u0432\u044B\u0445 \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0439.','\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u043F\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u0435\u043C \u043A\u043E\u043C\u0430\u043D\u0434\u044B "\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F\u043C" \u043F\u0440\u0438 \u043D\u0430\u043B\u0438\u0447\u0438\u0438 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u0438\u0445 \u0446\u0435\u043B\u0435\u0432\u044B\u0445 \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0439.','\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u043F\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u0435\u043C \u043A\u043E\u043C\u0430\u043D\u0434\u044B "\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u0441\u0441\u044B\u043B\u043A\u0430\u043C" \u043F\u0440\u0438 \u043D\u0430\u043B\u0438\u0447\u0438\u0438 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u0438\u0445 \u0446\u0435\u043B\u0435\u0432\u044B\u0445 \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0439.','\u0418\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440 \u0430\u043B\u044C\u0442\u0435\u0440\u043D\u0430\u0442\u0438\u0432\u043D\u043E\u0439 \u043A\u043E\u043C\u0430\u043D\u0434\u044B, \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u043C\u043E\u0439 \u0432 \u0442\u043E\u043C \u0441\u043B\u0443\u0447\u0430\u0435, \u043A\u043E\u0433\u0434\u0430 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u043C \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0438 "\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u044E" \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0442\u0435\u043A\u0443\u0449\u0435\u0435 \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435.','\u0418\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440 \u0430\u043B\u044C\u0442\u0435\u0440\u043D\u0430\u0442\u0438\u0432\u043D\u043E\u0439 \u043A\u043E\u043C\u0430\u043D\u0434\u044B, \u043A\u043E\u0442\u043E\u0440\u0430\u044F \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F \u0432 \u0442\u043E\u043C \u0441\u043B\u0443\u0447\u0430\u0435, \u0435\u0441\u043B\u0438 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u043C \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0438 "\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u044E \u0442\u0438\u043F\u0430" \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0442\u0435\u043A\u0443\u0449\u0435\u0435 \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435.','\u0418\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440 \u0430\u043B\u044C\u0442\u0435\u0440\u043D\u0430\u0442\u0438\u0432\u043D\u044B\u0439 \u043A\u043E\u043C\u0430\u043D\u0434\u044B, \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u043C\u043E\u0439 \u0432 \u0442\u043E\u043C \u0441\u043B\u0443\u0447\u0430\u0435, \u043A\u043E\u0433\u0434\u0430 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u043C \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0438 "\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u043E\u0431\u044A\u044F\u0432\u043B\u0435\u043D\u0438\u044E" \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0442\u0435\u043A\u0443\u0449\u0435\u0435 \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435.','\u0418\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440 \u0430\u043B\u044C\u0442\u0435\u0440\u043D\u0430\u0442\u0438\u0432\u043D\u044B\u0439 \u043A\u043E\u043C\u0430\u043D\u0434\u044B, \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u043C\u043E\u0439, \u043A\u043E\u0433\u0434\u0430 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u043C \u043A\u043E\u043C\u0430\u043D\u0434\u044B "\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u0438" \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0442\u0435\u043A\u0443\u0449\u0435\u0435 \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435.','\u0418\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440 \u0430\u043B\u044C\u0442\u0435\u0440\u043D\u0430\u0442\u0438\u0432\u043D\u043E\u0439 \u043A\u043E\u043C\u0430\u043D\u0434\u044B, \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u043C\u043E\u0439 \u0432 \u0442\u043E\u043C \u0441\u043B\u0443\u0447\u0430\u0435, \u043A\u043E\u0433\u0434\u0430 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u043C \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0438 "\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u0441\u0441\u044B\u043B\u043A\u0435" \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0442\u0435\u043A\u0443\u0449\u0435\u0435 \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435.',"\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0442\u0435\u043C, \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044F \u043B\u0438 \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u0438\u0435.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442 \u0432\u0440\u0435\u043C\u044F \u0437\u0430\u0434\u0435\u0440\u0436\u043A\u0438 \u0432 \u043C\u0438\u043B\u043B\u0438\u0441\u0435\u043A\u0443\u043D\u0434\u0430\u0445 \u043F\u0435\u0440\u0435\u0434 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u043C \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u0438\u044F.","\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0442\u0435\u043C, \u0434\u043E\u043B\u0436\u043D\u043E \u043B\u0438 \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u0438\u0435 \u043E\u0441\u0442\u0430\u0432\u0430\u0442\u044C\u0441\u044F \u0432\u0438\u0434\u0438\u043C\u044B\u043C \u043F\u0440\u0438 \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u0438\u0438 \u043D\u0430 \u043D\u0435\u0433\u043E \u043A\u0443\u0440\u0441\u043E\u0440\u0430 \u043C\u044B\u0448\u0438.","\u0412\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\u0440 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u043A\u043E\u0434\u0430 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435.","\u0412\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u0432\u0441\u0442\u0440\u043E\u0435\u043D\u043D\u044B\u0435 \u0443\u043A\u0430\u0437\u0430\u043D\u0438\u044F \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435.",'\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442 \u0440\u0430\u0437\u043C\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430 \u0432\u0441\u0442\u0440\u043E\u0435\u043D\u043D\u044B\u0445 \u0443\u043A\u0430\u0437\u0430\u043D\u0438\u0439 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435. \u0415\u0441\u043B\u0438 \u0437\u0430\u0434\u0430\u043D\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 "0", \u0442\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F 90\xA0% \u043E\u0442 "#editor.fontSize#".',"\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0441\u0435\u043C\u0435\u0439\u0441\u0442\u0432\u043E\u043C \u0448\u0440\u0438\u0444\u0442\u043E\u0432 \u0432\u0441\u0442\u0440\u043E\u0435\u043D\u043D\u044B\u0445 \u0443\u043A\u0430\u0437\u0430\u043D\u0438\u0439 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435.","\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0432\u044B\u0441\u043E\u0442\u043E\u0439 \u0441\u0442\u0440\u043E\u043A. \u0423\u043A\u0430\u0436\u0438\u0442\u0435 0 \u0434\u043B\u044F \u0432\u044B\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u044F \u0432\u044B\u0441\u043E\u0442\u044B \u0441\u0442\u0440\u043E\u043A\u0438 \u043F\u043E \u0440\u0430\u0437\u043C\u0435\u0440\u0443 \u0448\u0440\u0438\u0444\u0442\u0430.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044F \u043B\u0438 \u043C\u0438\u043D\u0438-\u043A\u0430\u0440\u0442\u0430.","\u041C\u0438\u043D\u0438-\u043A\u0430\u0440\u0442\u0430 \u0438\u043C\u0435\u0435\u0442 \u0442\u0430\u043A\u043E\u0439 \u0436\u0435 \u0440\u0430\u0437\u043C\u0435\u0440, \u0447\u0442\u043E \u0438 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0435 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430 (\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u0430 \u043F\u0440\u043E\u043A\u0440\u0443\u0442\u043A\u0430).","\u041C\u0438\u043D\u0438-\u043A\u0430\u0440\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0442\u044F\u0433\u0438\u0432\u0430\u0442\u044C\u0441\u044F \u0438\u043B\u0438 \u0441\u0436\u0438\u043C\u0430\u0442\u044C\u0441\u044F \u043F\u043E \u043C\u0435\u0440\u0435 \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E\u0441\u0442\u0438, \u0447\u0442\u043E\u0431\u044B \u0437\u0430\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043F\u043E \u0432\u044B\u0441\u043E\u0442\u0435 (\u0431\u0435\u0437 \u043F\u0440\u043E\u043A\u0440\u0443\u0442\u043A\u0438).","\u041C\u0438\u043D\u0438\u043A\u0430\u0440\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0443\u043C\u0435\u043D\u044C\u0448\u0430\u0442\u044C\u0441\u044F \u043F\u043E \u043C\u0435\u0440\u0435 \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E\u0441\u0442\u0438, \u0447\u0442\u043E\u0431\u044B \u043D\u0438\u043A\u043E\u0433\u0434\u0430 \u043D\u0435 \u0431\u044B\u0442\u044C \u0431\u043E\u043B\u044C\u0448\u0435, \u0447\u0435\u043C \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 (\u0431\u0435\u0437 \u043F\u0440\u043E\u043A\u0440\u0443\u0442\u043A\u0438).","\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0440\u0430\u0437\u043C\u0435\u0440\u043E\u043C \u043C\u0438\u043D\u0438\u043A\u0430\u0440\u0442\u044B.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0441 \u043A\u0430\u043A\u043E\u0439 \u0441\u0442\u043E\u0440\u043E\u043D\u044B \u0431\u0443\u0434\u0435\u0442 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C\u0441\u044F \u043C\u0438\u043D\u0438-\u043A\u0430\u0440\u0442\u0430.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u043A\u043E\u0433\u0434\u0430 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044F \u043F\u043E\u043B\u0437\u0443\u043D\u043E\u043A \u043C\u0438\u043D\u0438-\u043A\u0430\u0440\u0442\u044B.","\u041C\u0430\u0441\u0448\u0442\u0430\u0431 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0433\u043E, \u043D\u0430\u0440\u0438\u0441\u043E\u0432\u0430\u043D\u043D\u043E\u0433\u043E \u043D\u0430 \u043C\u0438\u043D\u0438-\u043A\u0430\u0440\u0442\u0435: 1, 2 \u0438\u043B\u0438 3.","\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0444\u0430\u043A\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u0432 \u0441\u0442\u0440\u043E\u043A\u0435 \u0432\u043C\u0435\u0441\u0442\u043E \u0446\u0432\u0435\u0442\u043D\u044B\u0445 \u0431\u043B\u043E\u043A\u043E\u0432.","\u041E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0448\u0438\u0440\u0438\u043D\u0443 \u043C\u0438\u043D\u0438-\u043A\u0430\u0440\u0442\u044B, \u0447\u0442\u043E\u0431\u044B \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0435\u043C\u044B\u0445 \u0441\u0442\u043E\u043B\u0431\u0446\u043E\u0432 \u043D\u0435 \u043F\u0440\u0435\u0432\u044B\u0448\u0430\u043B\u043E \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043D\u043E\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E.","\u0417\u0430\u0434\u0430\u0435\u0442 \u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u043E \u043C\u0435\u0436\u0434\u0443 \u0432\u0435\u0440\u0445\u043D\u0438\u043C \u043A\u0440\u0430\u0435\u043C \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430 \u0438 \u043F\u0435\u0440\u0432\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u043E\u0439.","\u0417\u0430\u0434\u0430\u0435\u0442 \u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u043E \u043C\u0435\u0436\u0434\u0443 \u043D\u0438\u0436\u043D\u0438\u043C \u043A\u0440\u0430\u0435\u043C \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430 \u0438 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0441\u0442\u0440\u043E\u043A\u043E\u0439.","\u0412\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u0432\u0441\u043F\u043B\u044B\u0432\u0430\u044E\u0449\u0435\u0435 \u043E\u043A\u043D\u043E \u0441 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\u0446\u0438\u0435\u0439 \u043F\u043E \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0443 \u0438 \u0441\u0432\u0435\u0434\u0435\u043D\u0438\u044F\u043C\u0438 \u043E \u0442\u0438\u043F\u0435, \u043A\u043E\u0442\u043E\u0440\u043E\u0435 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044F \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u043D\u0430\u0431\u043E\u0440\u0430.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u043C\u0435\u043D\u044E \u043F\u043E\u0434\u0441\u043A\u0430\u0437\u043E\u043A \u043E\u0441\u0442\u0430\u0435\u0442\u0441\u044F \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u043C \u0438\u043B\u0438 \u0437\u0430\u043A\u0440\u043E\u0435\u0442\u0441\u044F \u043F\u0440\u0438 \u0434\u043E\u0441\u0442\u0438\u0436\u0435\u043D\u0438\u0438 \u043A\u043E\u043D\u0446\u0430 \u0441\u043F\u0438\u0441\u043A\u0430.","\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435 \u043A\u0440\u0430\u0442\u043A\u0438\u0445 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439 \u0432 \u0441\u0442\u0440\u043E\u043A\u0430\u0445.","\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435 \u043A\u0440\u0430\u0442\u043A\u0438\u0445 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439 \u0432 \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u044F\u0445.","\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435 \u043A\u0440\u0430\u0442\u043A\u0438\u0445 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439 \u0432\u043D\u0435 \u0441\u0442\u0440\u043E\u043A \u0438 \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0435\u0432.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0434\u043E\u043B\u0436\u043D\u044B \u043B\u0438 \u043F\u0440\u0438 \u0432\u0432\u043E\u0434\u0435 \u0442\u0435\u043A\u0441\u0442\u0430 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C\u0441\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F.","\u041D\u043E\u043C\u0435\u0440\u0430 \u0441\u0442\u0440\u043E\u043A \u043D\u0435 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F.","\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0430\u0431\u0441\u043E\u043B\u044E\u0442\u043D\u044B\u0435 \u043D\u043E\u043C\u0435\u0440\u0430 \u0441\u0442\u0440\u043E\u043A.","\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0435\u043C\u044B\u0435 \u043D\u043E\u043C\u0435\u0440\u0430 \u0441\u0442\u0440\u043E\u043A \u0432\u044B\u0447\u0438\u0441\u043B\u044F\u044E\u0442\u0441\u044F \u043A\u0430\u043A \u0440\u0430\u0441\u0441\u0442\u043E\u044F\u043D\u0438\u0435 \u0432 \u0441\u0442\u0440\u043E\u043A\u0430\u0445 \u0434\u043E \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u043A\u0443\u0440\u0441\u043E\u0440\u0430.","\u041D\u043E\u043C\u0435\u0440\u0430 \u0441\u0442\u0440\u043E\u043A \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043A\u0430\u0436\u0434\u044B\u0435 10 \u0441\u0442\u0440\u043E\u043A.","\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u043C \u043D\u043E\u043C\u0435\u0440\u043E\u0432 \u0441\u0442\u0440\u043E\u043A.","\u0427\u0438\u0441\u043B\u043E \u043C\u043E\u043D\u043E\u0448\u0438\u0440\u0438\u043D\u043D\u044B\u0445 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432, \u043F\u0440\u0438 \u043A\u043E\u0442\u043E\u0440\u043E\u043C \u0431\u0443\u0434\u0435\u0442 \u043E\u0442\u0440\u0438\u0441\u043E\u0432\u044B\u0432\u0430\u0442\u044C\u0441\u044F \u043B\u0438\u043D\u0435\u0439\u043A\u0430 \u044D\u0442\u043E\u0433\u043E \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u0426\u0432\u0435\u0442 \u043B\u0438\u043D\u0435\u0439\u043A\u0438 \u044D\u0442\u043E\u0433\u043E \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u0432\u0435\u0440\u0442\u0438\u043A\u0430\u043B\u044C\u043D\u044B\u0435 \u043B\u0438\u043D\u0435\u0439\u043A\u0438 \u043F\u043E\u0441\u043B\u0435 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043D\u043E\u0433\u043E \u0447\u0438\u0441\u043B\u0430 \u043C\u043E\u043D\u043E\u0448\u0438\u0440\u0438\u043D\u043D\u044B\u0445 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432. \u0414\u043B\u044F \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u0438\u0445 \u043B\u0438\u043D\u0435\u0435\u043A \u0443\u043A\u0430\u0436\u0438\u0442\u0435 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439. \u0415\u0441\u043B\u0438 \u043D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D\u043E \u043D\u0438 \u043E\u0434\u043D\u043E\u0433\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F, \u0432\u0435\u0440\u0442\u0438\u043A\u0430\u043B\u044C\u043D\u044B\u0435 \u043B\u0438\u043D\u0435\u0439\u043A\u0438 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C\u0441\u044F \u043D\u0435 \u0431\u0443\u0434\u0443\u0442.","\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0431\u0435\u0437 \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u0438 \u0442\u0435\u043A\u0441\u0442\u0430 \u0441\u043F\u0440\u0430\u0432\u0430 \u043E\u0442 \u043A\u0443\u0440\u0441\u043E\u0440\u0430.","\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0438 \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u0430\u0442\u044C \u0442\u0435\u043A\u0441\u0442 \u0441\u043F\u0440\u0430\u0432\u0430 \u043E\u0442 \u043A\u0443\u0440\u0441\u043E\u0440\u0430.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0431\u0443\u0434\u0443\u0442 \u043B\u0438 \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u044B\u0432\u0430\u0442\u044C\u0441\u044F \u0441\u043B\u043E\u0432\u0430 \u043F\u0440\u0438 \u043F\u0440\u0438\u043D\u044F\u0442\u0438\u0438 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u043E\u0432 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u044F. \u041E\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043D\u0438\u043C\u0430\u043D\u0438\u0435, \u0447\u0442\u043E \u044D\u0442\u043E \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043E\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u0439, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u044E\u0449\u0438\u0445 \u044D\u0442\u0443 \u0444\u0443\u043D\u043A\u0446\u0438\u044E.","\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0442\u0435\u043C, \u0434\u043E\u043F\u0443\u0441\u043A\u0430\u044E\u0442\u0441\u044F \u043B\u0438 \u043D\u0435\u0431\u043E\u043B\u044C\u0448\u0438\u0435 \u043E\u043F\u0435\u0447\u0430\u0442\u043A\u0438 \u0432 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F\u0445 \u0444\u0438\u043B\u044C\u0442\u0440\u0430\u0446\u0438\u0438 \u0438 \u0441\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u0438.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0441\u043B\u0435\u0434\u0443\u0435\u0442 \u043B\u0438 \u0443\u0447\u0438\u0442\u044B\u0432\u0430\u0442\u044C \u043F\u0440\u0438 \u0441\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u0435 \u0441\u043B\u043E\u0432\u0430, \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0435 \u0440\u044F\u0434\u043E\u043C \u0441 \u043A\u0443\u0440\u0441\u043E\u0440\u043E\u043C.",'\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u044E\u0442\u0441\u044F \u043B\u0438 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u043D\u044B\u0435 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u044B \u0432\u044B\u0431\u043E\u0440\u0430 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439 \u0441\u043E\u0432\u043C\u0435\u0441\u0442\u043D\u043E \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u0438\u043C\u0438 \u0440\u0430\u0431\u043E\u0447\u0438\u043C\u0438 \u043E\u0431\u043B\u0430\u0441\u0442\u044F\u043C\u0438 \u0438 \u043E\u043A\u043D\u0430\u043C\u0438 (\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F "#editor.suggestSelection#").',"\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0437\u0430\u043F\u0440\u0435\u0449\u0430\u0435\u0442 \u043B\u0438 \u0430\u043A\u0442\u0438\u0432\u043D\u044B\u0439 \u0444\u0440\u0430\u0433\u043C\u0435\u043D\u0442 \u043A\u043E\u0434\u0430 \u044D\u043A\u0441\u043F\u0440\u0435\u0441\u0441-\u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F.","\u0423\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u0442, \u043D\u0443\u0436\u043D\u043E \u043B\u0438 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u0437\u043D\u0430\u0447\u043A\u0438 \u0432 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F\u0445.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442 \u0432\u0438\u0434\u0438\u043C\u043E\u0441\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0438 \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u044F \u0432 \u043D\u0438\u0436\u043D\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043B\u0438 \u0441\u0432\u0435\u0434\u0435\u043D\u0438\u044F \u043E \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u0432\u0441\u0442\u0440\u043E\u0435\u043D\u043D\u044B\u043C \u043E\u0431\u0440\u0430\u0437\u043E\u043C \u0432\u043C\u0435\u0441\u0442\u0435 \u0441 \u043C\u0435\u0442\u043A\u043E\u0439 \u0438\u043B\u0438 \u0442\u043E\u043B\u044C\u043A\u043E \u0432 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u0441\u0432\u0435\u0434\u0435\u043D\u0438\u0439.","\u042D\u0442\u043E\u0442 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u043D\u0435\u0440\u0435\u043A\u043E\u043C\u0435\u043D\u0434\u0443\u0435\u043C\u044B\u043C. \u0422\u0435\u043F\u0435\u0440\u044C \u0440\u0430\u0437\u043C\u0435\u0440 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439 \u043C\u043E\u0436\u043D\u043E \u0438\u0437\u043C\u0435\u043D\u0438\u0442\u044C.","\u042D\u0442\u043E\u0442 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0443\u0441\u0442\u0430\u0440\u0435\u043B. \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u0432\u043C\u0435\u0441\u0442\u043E \u043D\u0435\u0433\u043E \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u044B\u0435 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, 'editor.suggest.showKeywords' \u0438\u043B\u0438 'editor.suggest.showSnippets'.",'\u041A\u043E\u0433\u0434\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D, \u0432 IntelliSense \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F "method".','\u041A\u043E\u0433\u0434\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D, \u0432 IntelliSense \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F "function".','\u041A\u043E\u0433\u0434\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D, \u0432 IntelliSense \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F "constructor".','\u041A\u043E\u0433\u0434\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D, \u0432 IntelliSense \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F "field".','\u041A\u043E\u0433\u0434\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D, \u0432 IntelliSense \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F "variable".','\u041A\u043E\u0433\u0434\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D, \u0432 IntelliSense \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F "class".','\u041A\u043E\u0433\u0434\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D, \u0432 IntelliSense \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F "struct".','\u041A\u043E\u0433\u0434\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D, \u0432 IntelliSense \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F "interface".','\u041A\u043E\u0433\u0434\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D, \u0432 IntelliSense \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F "module".','\u041A\u043E\u0433\u0434\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D, \u0432 IntelliSense \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F "property".','\u041A\u043E\u0433\u0434\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D, \u0432 IntelliSense \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F "event".','\u041A\u043E\u0433\u0434\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D, \u0432 IntelliSense \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F "operator".','\u041A\u043E\u0433\u0434\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D, \u0432 IntelliSense \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F "unit".','\u041A\u043E\u0433\u0434\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D, \u0432 IntelliSense \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F "value".','\u041A\u043E\u0433\u0434\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D, \u0432 IntelliSense \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F "constant".','\u041A\u043E\u0433\u0434\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D, \u0432 IntelliSense \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F "enum".','\u041A\u043E\u0433\u0434\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D, \u0432 IntelliSense \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F "enumMember".','\u041A\u043E\u0433\u0434\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D, \u0432 IntelliSense \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F "keyword".','\u041A\u043E\u0433\u0434\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D, \u0432 IntelliSense \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F "text".','\u041A\u043E\u0433\u0434\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D, \u0432 IntelliSense \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F "color".','\u041A\u043E\u0433\u0434\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D, \u0432 IntelliSense \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F "file".','\u041A\u043E\u0433\u0434\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D, \u0432 IntelliSense \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F "reference".','\u041A\u043E\u0433\u0434\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D, \u0432 IntelliSense \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F "customcolor".','\u041A\u043E\u0433\u0434\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D, \u0432 IntelliSense \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F "folder".','\u041A\u043E\u0433\u0434\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D, \u0432 IntelliSense \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F "typeParameter".','\u041A\u043E\u0433\u0434\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432\u043A\u043B\u044E\u0447\u0435\u043D, \u0432 IntelliSense \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F "snippet".','\u0412\u043E \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u043E\u043C \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0438 IntelliSense \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u0442 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0442\u0438\u043F\u0430 "\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0438".','\u0412\u043E \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u043E\u043C \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0438 IntelliSense \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0442\u0438\u043F\u0430 "\u043F\u0440\u043E\u0431\u043B\u0435\u043C\u044B".',"\u0414\u043E\u043B\u0436\u043D\u044B \u043B\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u044B\u0442\u044C \u0432\u044B\u0431\u0440\u0430\u043D\u044B \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u044B\u0439 \u0438 \u043A\u043E\u043D\u0435\u0447\u043D\u044B\u0439 \u043F\u0440\u043E\u0431\u0435\u043B\u044B.",'\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0431\u0443\u0434\u0443\u0442 \u043B\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0442\u044C\u0441\u044F \u043F\u0440\u0438 \u0432\u0432\u043E\u0434\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0444\u0438\u043A\u0441\u0430\u0446\u0438\u0438. \u041D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, \u0432 JavaScript \u0442\u043E\u0447\u043A\u0430 \u0441 \u0437\u0430\u043F\u044F\u0442\u043E\u0439 (";") \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u043C \u0444\u0438\u043A\u0441\u0430\u0446\u0438\u0438, \u043F\u0440\u0438 \u0432\u0432\u043E\u0434\u0435 \u043A\u043E\u0442\u043E\u0440\u043E\u0433\u043E \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0435\u0442\u0441\u044F.',"\u041F\u0440\u0438\u043D\u0438\u043C\u0430\u0442\u044C \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u043F\u0440\u0438 \u043D\u0430\u0436\u0430\u0442\u0438\u0438 \u043A\u043B\u0430\u0432\u0438\u0448\u0438 \u0412\u0412\u041E\u0414 \u0442\u043E\u043B\u044C\u043A\u043E \u0432 \u0442\u043E\u043C \u0441\u043B\u0443\u0447\u0430\u0435, \u0435\u0441\u043B\u0438 \u043E\u043D\u043E \u0438\u0437\u043C\u0435\u043D\u044F\u0435\u0442 \u0442\u0435\u043A\u0441\u0442.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0431\u0443\u0434\u0443\u0442 \u043B\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0442\u044C\u0441\u044F \u043A\u043B\u0430\u0432\u0438\u0448\u0435\u0439 \u0412\u0412\u041E\u0414 \u0432 \u0434\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u043A \u043A\u043B\u0430\u0432\u0438\u0448\u0435 TAB. \u042D\u0442\u043E \u043F\u043E\u043C\u043E\u0433\u0430\u0435\u0442 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044C \u043D\u0435\u043E\u0434\u043D\u043E\u0437\u043D\u0430\u0447\u043D\u043E\u0441\u0442\u0438 \u043C\u0435\u0436\u0434\u0443 \u0432\u0441\u0442\u0430\u0432\u043A\u043E\u0439 \u043D\u043E\u0432\u044B\u0445 \u0441\u0442\u0440\u043E\u043A \u0438 \u043F\u0440\u0438\u043D\u044F\u0442\u0438\u0435\u043C \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0417\u0430\u0434\u0430\u0435\u0442 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0441\u0442\u0440\u043E\u043A \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u044B \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043E\u043C \u0447\u0442\u0435\u043D\u0438\u044F \u0441 \u044D\u043A\u0440\u0430\u043D\u0430. \u041F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435: \u0438\u0437-\u0437\u0430 \u0442\u0435\u0445\u043D\u0438\u0447\u0435\u0441\u043A\u0438\u0445 \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0435\u043D\u0438\u0439 \u044D\u0442\u043E \u0447\u0438\u0441\u043B\u043E \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u043F\u0440\u0435\u0432\u044B\u0448\u0430\u0442\u044C \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E.","\u0421\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0435 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430","\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u044F\u0437\u044B\u043A\u0430 \u0434\u043B\u044F \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u0437\u0430\u043A\u0440\u044B\u0442\u0438\u044F \u0441\u043A\u043E\u0431\u043E\u043A.","\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u0437\u0430\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u0441\u043A\u043E\u0431\u043A\u0438 \u0442\u043E\u043B\u044C\u043A\u043E \u0432 \u0442\u043E\u043C \u0441\u043B\u0443\u0447\u0430\u0435, \u0435\u0441\u043B\u0438 \u043A\u0443\u0440\u0441\u043E\u0440 \u043D\u0430\u0445\u043E\u0434\u0438\u0442\u0441\u044F \u0441\u043B\u0435\u0432\u0430 \u043E\u0442 \u043F\u0440\u043E\u0431\u0435\u043B\u0430.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0434\u043E\u043B\u0436\u0435\u043D \u043B\u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u0437\u0430\u043A\u0440\u044B\u0432\u0430\u044E\u0449\u0443\u044E \u0441\u043A\u043E\u0431\u043A\u0443 \u043F\u0440\u0438 \u0432\u0432\u043E\u0434\u0435 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u043C \u043E\u0442\u043A\u0440\u044B\u0432\u0430\u044E\u0449\u0435\u0439 \u0441\u043A\u043E\u0431\u043A\u0438.","\u0417\u0430\u043C\u0435\u043D\u044F\u0442\u044C \u0437\u0430\u043A\u0440\u044B\u0432\u0430\u044E\u0449\u0438\u0435 \u043A\u0430\u0432\u044B\u0447\u043A\u0438 \u0438 \u0441\u043A\u043E\u0431\u043A\u0438 \u043F\u0440\u0438 \u0432\u0432\u043E\u0434\u0435 \u0442\u043E\u043B\u044C\u043A\u043E \u0432 \u0442\u043E\u043C \u0441\u043B\u0443\u0447\u0430\u0435, \u0435\u0441\u043B\u0438 \u043A\u0430\u0432\u044B\u0447\u043A\u0438 \u0438\u043B\u0438 \u0441\u043A\u043E\u0431\u043A\u0438 \u0431\u044B\u043B\u0438 \u0432\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u044B \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0434\u043E\u043B\u0436\u043D\u044B \u043B\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u0437\u0430\u043C\u0435\u043D\u044F\u0442\u044C\u0441\u044F \u0437\u0430\u043A\u0440\u044B\u0432\u0430\u044E\u0449\u0438\u0435 \u043A\u0430\u0432\u044B\u0447\u043A\u0438 \u0438\u043B\u0438 \u0441\u043A\u043E\u0431\u043A\u0438 \u043F\u0440\u0438 \u0432\u0432\u043E\u0434\u0435.","\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u044F\u0437\u044B\u043A\u0430 \u0434\u043B\u044F \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u0437\u0430\u043A\u0440\u044B\u0442\u0438\u044F \u043A\u0430\u0432\u044B\u0447\u0435\u043A.","\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u0437\u0430\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u043A\u0430\u0432\u044B\u0447\u043A\u0438 \u0442\u043E\u043B\u044C\u043A\u043E \u0432 \u0442\u043E\u043C \u0441\u043B\u0443\u0447\u0430\u0435, \u0435\u0441\u043B\u0438 \u043A\u0443\u0440\u0441\u043E\u0440 \u043D\u0430\u0445\u043E\u0434\u0438\u0442\u0441\u044F \u0441\u043B\u0435\u0432\u0430 \u043E\u0442 \u043F\u0440\u043E\u0431\u0435\u043B\u0430.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0434\u043E\u043B\u0436\u0435\u043D \u043B\u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u0437\u0430\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u043A\u0430\u0432\u044B\u0447\u043A\u0438, \u0435\u0441\u043B\u0438 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C \u0434\u043E\u0431\u0430\u0432\u0438\u043B \u043E\u0442\u043A\u0440\u044B\u0432\u0430\u044E\u0449\u0443\u044E \u043A\u0430\u0432\u044B\u0447\u043A\u0443.","\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043D\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0442\u0430\u0432\u043B\u044F\u0442\u044C \u043E\u0442\u0441\u0442\u0443\u043F\u044B \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438.","\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0431\u0443\u0434\u0435\u0442 \u0441\u043E\u0445\u0440\u0430\u043D\u044F\u0442\u044C \u043E\u0442\u0441\u0442\u0443\u043F \u0442\u0435\u043A\u0443\u0449\u0435\u0439 \u0441\u0442\u0440\u043E\u043A\u0438.","\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0431\u0443\u0434\u0435\u0442 \u0441\u043E\u0445\u0440\u0430\u043D\u044F\u0442\u044C \u043E\u0442\u0441\u0442\u0443\u043F\u044B \u0442\u0435\u043A\u0443\u0449\u0435\u0439 \u0441\u0442\u0440\u043E\u043A\u0438 \u0438 \u0443\u0447\u0438\u0442\u044B\u0432\u0430\u0442\u044C \u0441\u043A\u043E\u0431\u043A\u0438 \u0432 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0441\u0438\u043D\u0442\u0430\u043A\u0441\u0438\u0441\u043E\u043C \u044F\u0437\u044B\u043A\u0430.","\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0431\u0443\u0434\u0435\u0442 \u0441\u043E\u0445\u0440\u0430\u043D\u044F\u0442\u044C \u043E\u0442\u0441\u0442\u0443\u043F \u0442\u0435\u043A\u0443\u0449\u0435\u0439 \u0441\u0442\u0440\u043E\u043A\u0438, \u0443\u0447\u0438\u0442\u044B\u0432\u0430\u0442\u044C \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0435 \u044F\u0437\u044B\u043A\u043E\u043C \u0441\u043A\u043E\u0431\u043A\u0438 \u0438 \u0432\u044B\u0437\u044B\u0432\u0430\u0442\u044C \u0441\u043F\u0435\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u0435 \u043F\u0440\u0430\u0432\u0438\u043B\u0430 onEnterRules, \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u043C\u044B\u0435 \u044F\u0437\u044B\u043A\u0430\u043C\u0438.","\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0431\u0443\u0434\u0435\u0442 \u0441\u043E\u0445\u0440\u0430\u043D\u044F\u0442\u044C \u043E\u0442\u0441\u0442\u0443\u043F \u0442\u0435\u043A\u0443\u0449\u0435\u0439 \u0441\u0442\u0440\u043E\u043A\u0438, \u0443\u0447\u0438\u0442\u044B\u0432\u0430\u0442\u044C \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0435 \u044F\u0437\u044B\u043A\u043E\u043C \u0441\u043A\u043E\u0431\u043A\u0438, \u0432\u044B\u0437\u044B\u0432\u0430\u0442\u044C \u0441\u043F\u0435\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u0435 \u043F\u0440\u0430\u0432\u0438\u043B\u0430 onEnterRules, \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u043C\u044B\u0435 \u044F\u0437\u044B\u043A\u0430\u043C\u0438 \u0438 \u0443\u0447\u0438\u0442\u044B\u0432\u0430\u0442\u044C \u043F\u0440\u0430\u0432\u0438\u043B\u0430 \u043E\u0442\u0441\u0442\u0443\u043F\u0430 indentationRules, \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u043C\u044B\u0435 \u044F\u0437\u044B\u043A\u0430\u043C\u0438.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0434\u043E\u043B\u0436\u0435\u043D \u043B\u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u0438\u0437\u043C\u0435\u043D\u044F\u0442\u044C \u043E\u0442\u0441\u0442\u0443\u043F\u044B, \u043A\u043E\u0433\u0434\u0430 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0438 \u0432\u0432\u043E\u0434\u044F\u0442, \u0432\u0441\u0442\u0430\u0432\u043B\u044F\u044E\u0442 \u0438\u043B\u0438 \u043F\u0435\u0440\u0435\u043C\u0435\u0449\u0430\u044E\u0442 \u0442\u0435\u043A\u0441\u0442 \u0438\u043B\u0438 \u0438\u0437\u043C\u0435\u043D\u044F\u044E\u0442 \u043E\u0442\u0441\u0442\u0443\u043F\u044B \u0441\u0442\u0440\u043E\u043A.","\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u044F\u0437\u044B\u043A\u0430 \u0434\u043B\u044F \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u043E\u0431\u0440\u0430\u043C\u043B\u0435\u043D\u0438\u044F \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u0439.","\u041E\u0431\u0440\u0430\u043C\u043B\u044F\u0442\u044C \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u043A\u0430\u0432\u044B\u0447\u0435\u043A, \u0430 \u043D\u0435 \u0441\u043A\u043E\u0431\u043E\u043A.","\u041E\u0431\u0440\u0430\u043C\u043B\u044F\u0442\u044C \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u0441\u043A\u043E\u0431\u043E\u043A, \u0430 \u043D\u0435 \u043A\u0430\u0432\u044B\u0447\u0435\u043A.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0434\u043E\u043B\u0436\u0435\u043D \u043B\u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u043E\u0431\u0440\u0430\u043C\u043B\u044F\u0442\u044C \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u043F\u0440\u0438 \u0432\u0432\u043E\u0434\u0435 \u043A\u0430\u0432\u044B\u0447\u0435\u043A \u0438\u043B\u0438 \u043A\u0432\u0430\u0434\u0440\u0430\u0442\u043D\u044B\u0445 \u0441\u043A\u043E\u0431\u043E\u043A.","\u042D\u043C\u0443\u043B\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u0435 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0442\u0430\u0431\u0443\u043B\u044F\u0446\u0438\u0438 \u043F\u0440\u0438 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0438 \u043F\u0440\u043E\u0431\u0435\u043B\u043E\u0432 \u0434\u043B\u044F \u043E\u0442\u0441\u0442\u0443\u043F\u0430. \u0412\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043F\u0440\u0438\u043C\u0435\u043D\u0435\u043D\u043E \u043A \u043F\u043E\u0437\u0438\u0446\u0438\u044F\u043C \u0442\u0430\u0431\u0443\u043B\u044F\u0446\u0438\u0438.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044F \u043B\u0438 CodeLens \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435.","\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0441\u0435\u043C\u0435\u0439\u0441\u0442\u0432\u043E\u043C \u0448\u0440\u0438\u0444\u0442\u043E\u0432 \u0434\u043B\u044F CodeLens.",'\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442 \u0440\u0430\u0437\u043C\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430 \u0432 \u043F\u0438\u043A\u0441\u0435\u043B\u044F\u0445 \u0434\u043B\u044F CodeLens. \u0415\u0441\u043B\u0438 \u0437\u0430\u0434\u0430\u043D\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 "0", \u0442\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F 90% \u043E\u0442 "#editor.fontSize#".',"\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0434\u043E\u043B\u0436\u043D\u044B \u043B\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C\u0441\u044F \u0432\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u0438\u0435 \u0434\u0435\u043A\u043E\u0440\u0430\u0442\u043E\u0440\u044B \u0446\u0432\u0435\u0442\u0430 \u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043E \u0432\u044B\u0431\u043E\u0440\u0430 \u0446\u0432\u0435\u0442\u0430.","\u0412\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 \u0442\u043E\u0433\u043E, \u0447\u0442\u043E \u0432\u044B\u0431\u043E\u0440 \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u043A\u043B\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044B \u0438 \u043C\u044B\u0448\u0438 \u043F\u0440\u0438\u0432\u043E\u0434\u0438\u0442 \u043A \u0432\u044B\u0431\u043E\u0440\u0443 \u0441\u0442\u043E\u043B\u0431\u0446\u0430.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0431\u0443\u0434\u0435\u0442 \u043B\u0438 \u0442\u0435\u043A\u0441\u0442 \u0441\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D \u0432 \u0431\u0443\u0444\u0435\u0440 \u043E\u0431\u043C\u0435\u043D\u0430 \u0441 \u043F\u043E\u0434\u0441\u0432\u0435\u0442\u043A\u043E\u0439 \u0441\u0438\u043D\u0442\u0430\u043A\u0441\u0438\u0441\u0430.","\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0441\u0442\u0438\u043B\u0435\u043C \u0430\u043D\u0438\u043C\u0430\u0446\u0438\u0438 \u043A\u0443\u0440\u0441\u043E\u0440\u0430.","\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0442\u0435\u043C, \u0441\u043B\u0435\u0434\u0443\u0435\u0442 \u043B\u0438 \u0432\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043F\u043B\u0430\u0432\u043D\u0443\u044E \u0430\u043D\u0438\u043C\u0430\u0446\u0438\u044E \u043A\u0443\u0440\u0441\u043E\u0440\u0430.","\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0441\u0442\u0438\u043B\u0435\u043C \u043A\u0443\u0440\u0441\u043E\u0440\u0430.",'\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442 \u043C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u0447\u0438\u0441\u043B\u043E \u0432\u0438\u0434\u0438\u043C\u044B\u0445 \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u044B\u0445 \u0438 \u043A\u043E\u043D\u0435\u0447\u043D\u044B\u0445 \u043B\u0438\u043D\u0438\u0439, \u043E\u043A\u0440\u0443\u0436\u0430\u044E\u0449\u0438\u0445 \u043A\u0443\u0440\u0441\u043E\u0440. \u042D\u0442\u043E\u0442 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0438\u043C\u0435\u0435\u0442 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 "scrollOff" \u0438\u043B\u0438 "scrollOffset" \u0432 \u043D\u0435\u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430\u0445.','"cursorSurroundingLines" \u043F\u0440\u0438\u043C\u0435\u043D\u044F\u0435\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u0440\u0438 \u0437\u0430\u043F\u0443\u0441\u043A\u0435 \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u043A\u043B\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044B \u0438\u043B\u0438 API.','"cursorSurroundingLines" \u043F\u0440\u0438\u043D\u0443\u0434\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u043F\u0440\u0438\u043C\u0435\u043D\u044F\u0435\u0442\u0441\u044F \u0432\u043E \u0432\u0441\u0435\u0445 \u0441\u043B\u0443\u0447\u0430\u044F\u0445.','\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u043A\u043E\u0433\u0434\u0430 \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E \u043F\u0440\u0438\u043C\u0435\u043D\u044F\u0442\u044C "cursorSurroundingLines".',`\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0448\u0438\u0440\u0438\u043D\u043E\u0439 \u043A\u0443\u0440\u0441\u043E\u0440\u0430, \u043A\u043E\u0433\u0434\u0430 \u0434\u043B\u044F \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0430 "#editor.cursorStyle#" \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 'line'`,"\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0441\u043B\u0435\u0434\u0443\u0435\u0442 \u043B\u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0443 \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044C \u043F\u0435\u0440\u0435\u043C\u0435\u0449\u0435\u043D\u0438\u0435 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0445 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432 \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u043F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u043D\u0438\u044F.","\u041A\u043E\u044D\u0444\u0444\u0438\u0446\u0438\u0435\u043D\u0442 \u0443\u0432\u0435\u043B\u0438\u0447\u0435\u043D\u0438\u044F \u0441\u043A\u043E\u0440\u043E\u0441\u0442\u0438 \u043F\u0440\u043E\u043A\u0440\u0443\u0442\u043A\u0438 \u043F\u0440\u0438 \u043D\u0430\u0436\u0430\u0442\u0438\u0438 \u043A\u043B\u0430\u0432\u0438\u0448\u0438 ALT.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u043E \u043B\u0438 \u0441\u0432\u0435\u0440\u0442\u044B\u0432\u0430\u043D\u0438\u0435 \u043A\u043E\u0434\u0430 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435.","\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044E \u0441\u0432\u0435\u0440\u0442\u044B\u0432\u0430\u043D\u0438\u044F \u0434\u043B\u044F \u043A\u043E\u043D\u043A\u0440\u0435\u0442\u043D\u043E\u0433\u043E \u044F\u0437\u044B\u043A\u0430, \u0435\u0441\u043B\u0438 \u043E\u043D\u0430 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430, \u0432 \u043F\u0440\u043E\u0442\u0438\u0432\u043D\u043E\u043C \u0441\u043B\u0443\u0447\u0430\u0435 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044E \u043D\u0430 \u043E\u0441\u043D\u043E\u0432\u0435 \u043E\u0442\u0441\u0442\u0443\u043F\u043E\u0432.","\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044E \u0441\u0432\u0435\u0440\u0442\u044B\u0432\u0430\u043D\u0438\u044F \u043D\u0430 \u043E\u0441\u043D\u043E\u0432\u0435 \u043E\u0442\u0441\u0442\u0443\u043F\u043E\u0432.","\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0435\u0439 \u0434\u043B\u044F \u0432\u044B\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u044F \u0441\u0432\u0435\u0440\u0442\u044B\u0432\u0430\u0435\u043C\u044B\u0445 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\u043E\u0432.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0434\u043E\u043B\u0436\u0435\u043D \u043B\u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0432\u044B\u0434\u0435\u043B\u044F\u0442\u044C \u0441\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0435 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\u044B.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0431\u0443\u0434\u0435\u0442 \u043B\u0438 \u0449\u0435\u043B\u0447\u043E\u043A \u043F\u0443\u0441\u0442\u043E\u0433\u043E \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0433\u043E \u043F\u043E\u0441\u043B\u0435 \u0441\u0432\u0435\u0440\u043D\u0443\u0442\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044B\u0432\u0430\u0442\u044C \u0435\u0435.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442 \u0441\u0435\u043C\u0435\u0439\u0441\u0442\u0432\u043E \u0448\u0440\u0438\u0444\u0442\u043E\u0432.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0431\u0443\u0434\u0435\u0442 \u043B\u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0432\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u043D\u043E\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0435. \u041C\u043E\u0434\u0443\u043B\u044C \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u0434\u043E\u0441\u0442\u0443\u043F\u0435\u043D \u0438 \u0438\u043C\u0435\u0442\u044C \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u044C \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D \u0432 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0435.","\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u043C, \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u044E\u0449\u0438\u043C, \u0434\u043E\u043B\u0436\u0435\u043D \u043B\u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443 \u043F\u043E\u0441\u043B\u0435 \u0432\u0432\u043E\u0434\u0430.","\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u043C \u0432\u0435\u0440\u0442\u0438\u043A\u0430\u043B\u044C\u043D\u044B\u0445 \u043F\u043E\u043B\u0435\u0439 \u0433\u043B\u0438\u0444\u0430 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435. \u041F\u043E\u043B\u044F \u0433\u043B\u0438\u0444\u0430 \u0432 \u043E\u0441\u043D\u043E\u0432\u043D\u043E\u043C \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u044E\u0442\u0441\u044F \u0434\u043B\u044F \u043E\u0442\u043B\u0430\u0434\u043A\u0438.","\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0441\u043A\u0440\u044B\u0442\u0438\u0435\u043C \u043A\u0443\u0440\u0441\u043E\u0440\u0430 \u0432 \u043E\u0431\u0437\u043E\u0440\u043D\u043E\u0439 \u043B\u0438\u043D\u0435\u0439\u043A\u0435.","\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0442\u0435\u043C, \u0434\u043E\u043B\u0436\u043D\u0430 \u043B\u0438 \u0432\u044B\u0434\u0435\u043B\u044F\u0442\u044C\u0441\u044F \u0430\u043A\u0442\u0438\u0432\u043D\u0430\u044F \u043D\u0430\u043F\u0440\u0430\u0432\u043B\u044F\u044E\u0449\u0430\u044F \u043E\u0442\u0441\u0442\u0443\u043F\u0430 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435.","\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0438\u043D\u0442\u0435\u0440\u0432\u0430\u043B\u043E\u043C \u043C\u0435\u0436\u0434\u0443 \u0431\u0443\u043A\u0432\u0430\u043C\u0438 \u0432 \u043F\u0438\u043A\u0441\u0435\u043B\u044F\u0445.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u0430 \u043B\u0438 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0430 \u0441\u0432\u044F\u0437\u0430\u043D\u043D\u043E\u0433\u043E \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E\u0441\u0442\u0438 \u043E\u0442 \u044F\u0437\u044B\u043A\u0430, \u0441\u0432\u044F\u0437\u0430\u043D\u043D\u044B\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u044B, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, \u0442\u0435\u0433\u0438 HTML, \u043E\u0431\u043D\u043E\u0432\u043B\u044F\u044E\u0442\u0441\u044F \u043F\u0440\u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0438.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0434\u043E\u043B\u0436\u0435\u043D \u043B\u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0442\u044C \u0441\u0441\u044B\u043B\u043A\u0438 \u0438 \u0434\u0435\u043B\u0430\u0442\u044C \u0438\u0445 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u043C\u0438 \u0434\u043B\u044F \u0449\u0435\u043B\u0447\u043A\u0430.","\u0412\u044B\u0434\u0435\u043B\u044F\u0442\u044C \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044E\u0449\u0438\u0435 \u0441\u043A\u043E\u0431\u043A\u0438.","\u041C\u043D\u043E\u0436\u0438\u0442\u0435\u043B\u044C, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u044B\u0439 \u0434\u043B\u044F \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432 deltaX \u0438 deltaY \u0441\u043E\u0431\u044B\u0442\u0438\u0439 \u043F\u0440\u043E\u043A\u0440\u0443\u0442\u043A\u0438 \u043A\u043E\u043B\u0435\u0441\u0438\u043A\u0430 \u043C\u044B\u0448\u0438.","\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435 \u0440\u0430\u0437\u043C\u0435\u0440\u0430 \u0448\u0440\u0438\u0444\u0442\u0430 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043F\u0440\u0438 \u043D\u0430\u0436\u0430\u0442\u043E\u0439 \u043A\u043B\u0430\u0432\u0438\u0448\u0435 CTRL \u0438 \u0434\u0432\u0438\u0436\u0435\u043D\u0438\u0438 \u043A\u043E\u043B\u0435\u0441\u0438\u043A\u0430 \u043C\u044B\u0448\u0438.","\u041E\u0431\u044A\u0435\u0434\u0438\u043D\u0438\u0442\u044C \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u043A\u0443\u0440\u0441\u043E\u0440\u043E\u0432, \u043A\u043E\u0433\u0434\u0430 \u043E\u043D\u0438 \u043F\u0435\u0440\u0435\u043A\u0440\u044B\u0432\u0430\u044E\u0442\u0441\u044F.","\u0421\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043A\u043B\u0430\u0432\u0438\u0448\u0435 CTRL \u0432 Windows \u0438 Linux \u0438 \u043A\u043B\u0430\u0432\u0438\u0448\u0435 COMMAND \u0432 macOS.","\u0421\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043A\u043B\u0430\u0432\u0438\u0448\u0435 ALT \u0432 Windows \u0438 Linux \u0438 \u043A\u043B\u0430\u0432\u0438\u0448\u0435 OPTION \u0432 macOS.",'\u041C\u043E\u0434\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u0434\u043B\u044F \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u0438\u0445 \u043A\u0443\u0440\u0441\u043E\u0440\u043E\u0432 \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u043C\u044B\u0448\u0438. \u0416\u0435\u0441\u0442\u044B \u043C\u044B\u0448\u0438 "\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u044E" \u0438 "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0441\u0441\u044B\u043B\u043A\u0443" \u0431\u0443\u0434\u0443\u0442 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u044B \u0442\u0430\u043A, \u0447\u0442\u043E\u0431\u044B \u043E\u043D\u0438 \u043D\u0435 \u043A\u043E\u043D\u0444\u043B\u0438\u043A\u0442\u043E\u0432\u0430\u043B\u0438 \u0441 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u0438\u043C\u0438 \u043A\u0443\u0440\u0441\u043E\u0440\u0430\u043C\u0438. [\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u0441\u0432\u0435\u0434\u0435\u043D\u0438\u044F](https://code.visualstudio.com/docs/editor/codebasics#_multicursor-modifier). ',"\u041A\u0430\u0436\u0434\u044B\u0439 \u043A\u0443\u0440\u0441\u043E\u0440 \u0432\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442 \u043E\u0434\u043D\u0443 \u0441\u0442\u0440\u043E\u043A\u0443 \u0442\u0435\u043A\u0441\u0442\u0430.","\u041A\u0430\u0436\u0434\u044B\u0439 \u043A\u0443\u0440\u0441\u043E\u0440 \u0432\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442 \u043F\u043E\u043B\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442.","\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0432\u0441\u0442\u0430\u0432\u043A\u043E\u0439, \u043A\u043E\u0433\u0434\u0430 \u0447\u0438\u0441\u043B\u043E \u0432\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u043C\u044B\u0445 \u0441\u0442\u0440\u043E\u043A \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0447\u0438\u0441\u043B\u0443 \u043A\u0443\u0440\u0441\u043E\u0440\u043E\u0432.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0434\u043E\u043B\u0436\u0435\u043D \u043B\u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0432\u044B\u0434\u0435\u043B\u044F\u0442\u044C \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u044B \u0441\u0435\u043C\u0430\u043D\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0445 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0434\u043E\u043B\u0436\u043D\u0430 \u043B\u0438 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C\u0441\u044F \u0433\u0440\u0430\u043D\u0438\u0446\u0430 \u043D\u0430 \u043E\u0431\u0437\u043E\u0440\u043D\u043E\u0439 \u043B\u0438\u043D\u0435\u0439\u043A\u0435.","\u0424\u043E\u043A\u0443\u0441\u0438\u0440\u043E\u0432\u043A\u0430 \u043D\u0430 \u0434\u0435\u0440\u0435\u0432\u0435 \u043F\u0440\u0438 \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u0438 \u043E\u0431\u0437\u043E\u0440\u0430","\u0424\u043E\u043A\u0443\u0441\u0438\u0440\u043E\u0432\u043A\u0430 \u043D\u0430 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043F\u0440\u0438 \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u0438 \u043E\u0431\u0437\u043E\u0440\u0430","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0441\u043B\u0435\u0434\u0443\u0435\u0442 \u043B\u0438 \u043F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0444\u043E\u043A\u0443\u0441 \u043D\u0430 \u0432\u0441\u0442\u0440\u043E\u0435\u043D\u043D\u044B\u0439 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0438\u043B\u0438 \u0434\u0435\u0440\u0435\u0432\u043E \u0432 \u0432\u0438\u0434\u0436\u0435\u0442\u0435 \u043E\u0431\u0437\u043E\u0440\u0430.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0432\u0441\u0435\u0433\u0434\u0430 \u043B\u0438 \u0436\u0435\u0441\u0442 \u043C\u044B\u0448\u044C\u044E \u0434\u043B\u044F \u043F\u0435\u0440\u0435\u0445\u043E\u0434\u0430 \u043A \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u044E \u043E\u0442\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0431\u044B\u0441\u0442\u0440\u043E\u0433\u043E \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F.","\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0434\u043B\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C\u044E \u0437\u0430\u0434\u0435\u0440\u0436\u043A\u0438 (\u0432 \u043C\u0441) \u043F\u0435\u0440\u0435\u0434 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u043C \u043A\u0440\u0430\u0442\u043A\u0438\u0445 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442 \u043B\u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u043F\u0435\u0440\u0435\u0438\u043C\u0435\u043D\u043E\u0432\u0430\u043D\u0438\u0435 \u043F\u043E \u0442\u0438\u043F\u0443.",'\u041D\u0435 \u0440\u0435\u043A\u043E\u043C\u0435\u043D\u0434\u0443\u0435\u0442\u0441\u044F; \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u0432\u043C\u0435\u0441\u0442\u043E \u044D\u0442\u043E\u0433\u043E \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 "editor.linkedEditing".',"\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0434\u043E\u043B\u0436\u043D\u044B \u043B\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C\u0441\u044F \u0443\u043F\u0440\u0430\u0432\u043B\u044F\u044E\u0449\u0438\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u044B.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0434\u043E\u043B\u0436\u043D\u044B \u043B\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C\u0441\u044F \u043D\u0430\u043F\u0440\u0430\u0432\u043B\u044F\u044E\u0449\u0438\u0435 \u043E\u0442\u0441\u0442\u0443\u043F\u0430.","\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u043D\u043E\u043C\u0435\u0440\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0441\u0442\u0440\u043E\u043A\u0438, \u043A\u043E\u0433\u0434\u0430 \u0444\u0430\u0439\u043B \u0437\u0430\u043A\u0430\u043D\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u043D\u043E\u0432\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u043E\u0439.","\u0412\u044B\u0434\u0435\u043B\u044F\u0435\u0442 \u043F\u043E\u043B\u0435 \u0438 \u0442\u0435\u043A\u0443\u0449\u0443\u044E \u0441\u0442\u0440\u043E\u043A\u0443.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0434\u043E\u043B\u0436\u0435\u043D \u043B\u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0432\u044B\u0434\u0435\u043B\u044F\u0442\u044C \u0442\u0435\u043A\u0443\u0449\u0443\u044E \u0441\u0442\u0440\u043E\u043A\u0443.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0434\u043E\u043B\u0436\u0435\u043D \u043B\u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043E\u0442\u0440\u0438\u0441\u043E\u0432\u044B\u0432\u0430\u0442\u044C \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u0435 \u0442\u0435\u043A\u0443\u0449\u0435\u0439 \u0441\u0442\u0440\u043E\u043A\u0438, \u0442\u043E\u043B\u044C\u043A\u043E \u043A\u043E\u0433\u0434\u0430 \u043E\u043D \u043D\u0430\u0445\u043E\u0434\u0438\u0442\u0441\u044F \u0432 \u0444\u043E\u043A\u0443\u0441\u0435","\u041E\u0442\u0440\u0438\u0441\u043E\u0432\u043A\u0430 \u043F\u0440\u043E\u0431\u0435\u043B\u043E\u0432, \u043A\u0440\u043E\u043C\u0435 \u043E\u0434\u0438\u043D\u043E\u0447\u043D\u044B\u0445 \u043F\u0440\u043E\u0431\u0435\u043B\u043E\u0432 \u043C\u0435\u0436\u0434\u0443 \u0441\u043B\u043E\u0432\u0430\u043C\u0438.","\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u043F\u0440\u043E\u0431\u0435\u043B\u044B \u0442\u043E\u043B\u044C\u043A\u043E \u0432 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u043E\u043C \u0442\u0435\u043A\u0441\u0442\u0435.","\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u0442\u043E\u043B\u044C\u043A\u043E \u043A\u043E\u043D\u0435\u0447\u043D\u044B\u0435 \u043F\u0440\u043E\u0431\u0435\u043B\u044B","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0434\u043E\u043B\u0436\u043D\u044B \u043B\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C\u0441\u044F \u043F\u0440\u043E\u0431\u0435\u043B\u044B.","\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0442\u0435\u043C, \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E \u043B\u0438 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u0441\u043A\u0440\u0443\u0433\u043B\u0435\u043D\u043D\u044B\u0435 \u0443\u0433\u043B\u044B \u0434\u043B\u044F \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F.","\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E\u043C \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0445 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432, \u043D\u0430 \u043A\u043E\u0442\u043E\u0440\u043E\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0435 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u043F\u0440\u043E\u043A\u0440\u0443\u0447\u0438\u0432\u0430\u0442\u044C\u0441\u044F \u043F\u043E \u0433\u043E\u0440\u0438\u0437\u043E\u043D\u0442\u0430\u043B\u0438.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0431\u0443\u0434\u0435\u0442 \u043B\u0438 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0435 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430 \u043F\u0440\u043E\u043A\u0440\u0443\u0447\u0438\u0432\u0430\u0442\u044C\u0441\u044F \u0437\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u044E\u044E \u0441\u0442\u0440\u043E\u043A\u0443.","\u041F\u0440\u043E\u043A\u0440\u0443\u0442\u043A\u0430 \u0442\u043E\u043B\u044C\u043A\u043E \u0432\u0434\u043E\u043B\u044C \u043E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 \u043E\u0441\u0438 \u043F\u0440\u0438 \u043F\u0440\u043E\u043A\u0440\u0443\u0442\u043A\u0435 \u043F\u043E \u0432\u0435\u0440\u0442\u0438\u043A\u0430\u043B\u0438 \u0438 \u0433\u043E\u0440\u0438\u0437\u043E\u043D\u0442\u0430\u043B\u0438 \u043E\u0434\u043D\u043E\u0432\u0440\u0435\u043C\u0435\u043D\u043D\u043E. \u041F\u0440\u0435\u0434\u043E\u0442\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043C\u0435\u0449\u0435\u043D\u0438\u0435 \u043F\u043E \u0433\u043E\u0440\u0438\u0437\u043E\u043D\u0442\u0430\u043B\u0438 \u043F\u0440\u0438 \u043F\u0440\u043E\u043A\u0440\u0443\u0442\u043A\u0435 \u043F\u043E \u0432\u0435\u0440\u0442\u0438\u043A\u0430\u043B\u0438 \u043D\u0430 \u0442\u0440\u0435\u043A\u043F\u0430\u0434\u0435.","\u041A\u043E\u043D\u0442\u0440\u043E\u043B\u0438\u0440\u0443\u0435\u0442, \u0441\u043B\u0435\u0434\u0443\u0435\u0442 \u043B\u0438 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044C \u043F\u0435\u0440\u0432\u0438\u0447\u043D\u044B\u0439 \u0431\u0443\u0444\u0435\u0440 \u043E\u0431\u043C\u0435\u043D\u0430 Linux.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0434\u043E\u043B\u0436\u0435\u043D \u043B\u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0432\u044B\u0434\u0435\u043B\u044F\u0442\u044C \u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u044F, \u0430\u043D\u0430\u043B\u043E\u0433\u0438\u0447\u043D\u044B\u0435 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u043C\u0443 \u0444\u0440\u0430\u0433\u043C\u0435\u043D\u0442\u0443.","\u0412\u0441\u0435\u0433\u0434\u0430 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0441\u0432\u0435\u0440\u0442\u044B\u0432\u0430\u0435\u043C\u044B\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F.","\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0442\u043E\u043B\u044C\u043A\u043E \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u0441\u0432\u0435\u0440\u0442\u044B\u0432\u0430\u043D\u0438\u044F, \u043A\u043E\u0433\u0434\u0430 \u0443\u043A\u0430\u0437\u0430\u0442\u0435\u043B\u044C \u043C\u044B\u0448\u0438 \u043D\u0430\u0445\u043E\u0434\u0438\u0442\u0441\u044F \u043D\u0430\u0434 \u043F\u0435\u0440\u0435\u043F\u043B\u0435\u0442\u043E\u043C.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u043A\u043E\u0433\u0434\u0430 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u0441\u0432\u0435\u0440\u0442\u044B\u0432\u0430\u043D\u0438\u044F \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043D\u0430 \u043F\u0435\u0440\u0435\u043F\u043B\u0435\u0442\u0435.","\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0441\u043A\u0440\u044B\u0442\u0438\u0435\u043C \u043D\u0435\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u043E\u0433\u043E \u043A\u043E\u0434\u0430.","\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u043F\u0435\u0440\u0435\u0447\u0435\u0440\u043A\u0438\u0432\u0430\u043D\u0438\u0435\u043C \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0445 \u043F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u044B\u0445.","\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0444\u0440\u0430\u0433\u043C\u0435\u043D\u0442\u043E\u0432 \u043F\u043E\u0432\u0435\u0440\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0444\u0440\u0430\u0433\u043C\u0435\u043D\u0442\u043E\u0432 \u043F\u043E\u0434 \u0434\u0440\u0443\u0433\u0438\u043C\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F\u043C\u0438.","\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0444\u0440\u0430\u0433\u043C\u0435\u043D\u0442\u043E\u0432 \u0440\u044F\u0434\u043E\u043C \u0441 \u0434\u0440\u0443\u0433\u0438\u043C\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F\u043C\u0438.","\u041D\u0435 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0444\u0440\u0430\u0433\u043C\u0435\u043D\u0442\u043E\u0432.","\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u043C \u0444\u0440\u0430\u0433\u043C\u0435\u043D\u0442\u043E\u0432 \u0432\u043C\u0435\u0441\u0442\u0435 \u0441 \u0434\u0440\u0443\u0433\u0438\u043C\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F\u043C\u0438 \u0438 \u0438\u0445 \u0441\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u043E\u0439.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0431\u0443\u0434\u0435\u0442 \u043B\u0438 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u0430\u043D\u0438\u043C\u0430\u0446\u0438\u044F \u043F\u0440\u0438 \u043F\u0440\u043E\u043A\u0440\u0443\u0442\u043A\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0433\u043E \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430",'\u0420\u0430\u0437\u043C\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0441 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F\u043C\u0438. \u0415\u0441\u043B\u0438 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 "0", \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 "#editor.fontSize#".','\u0412\u044B\u0441\u043E\u0442\u0430 \u0441\u0442\u0440\u043E\u043A\u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0441 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F\u043C\u0438. \u0415\u0441\u043B\u0438 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 "0", \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 "#editor.lineHeight#". \u041C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\xA0\u2014 8.',"\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0434\u043E\u043B\u0436\u043D\u044B \u043B\u0438 \u043F\u0440\u0438 \u0432\u0432\u043E\u0434\u0435 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043D\u044B\u0445 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C\u0441\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F.","\u0412\u0441\u0435\u0433\u0434\u0430 \u0432\u044B\u0431\u0438\u0440\u0430\u0442\u044C \u043F\u0435\u0440\u0432\u043E\u0435 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0435.",'\u0412\u044B\u0431\u043E\u0440 \u043D\u0435\u0434\u0430\u0432\u043D\u0438\u0445 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439, \u0435\u0441\u043B\u0438 \u0442\u043E\u043B\u044C\u043A\u043E \u0434\u0430\u043B\u044C\u043D\u0435\u0439\u0448\u0438\u0439 \u0432\u0432\u043E\u0434 \u043D\u0435 \u043F\u0440\u0438\u0432\u043E\u0434\u0438\u0442 \u043A \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044E \u043E\u0434\u043D\u043E\u0433\u043E \u0438\u0437 \u043D\u0438\u0445, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440 "console.| -> console.log", \u0442\u0430\u043A \u043A\u0430\u043A "log" \u043D\u0435\u0434\u0430\u0432\u043D\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043B\u0441\u044F \u0434\u043B\u044F \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u044F.','\u0412\u044B\u0431\u043E\u0440 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439 \u0441 \u0443\u0447\u0435\u0442\u043E\u043C \u043F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0438\u0445 \u043F\u0440\u0435\u0444\u0438\u043A\u0441\u043E\u0432, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u043D\u044B\u0445 \u0434\u043B\u044F \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u044F \u044D\u0442\u0438\u0445 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440 "co -> console" \u0438 "con -> const".',"\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u043F\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u043C \u0432\u044B\u0431\u043E\u0440\u043E\u043C \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439 \u043F\u0440\u0438 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0438 \u0441\u043F\u0438\u0441\u043A\u0430 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u041F\u0440\u0438 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0438 \u0434\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F \u043F\u043E TAB \u0431\u0443\u0434\u0435\u0442 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C\u0441\u044F \u043D\u0430\u0438\u043B\u0443\u0447\u0448\u0435\u0435 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u043F\u0440\u0438 \u043D\u0430\u0436\u0430\u0442\u0438\u0438 \u043A\u043B\u0430\u0432\u0438\u0448\u0438 TAB.","\u041E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0434\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u043F\u043E TAB.",'\u0412\u0441\u0442\u0430\u0432\u043A\u0430 \u0434\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0439 \u043F\u043E TAB \u043F\u0440\u0438 \u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0438 \u0438\u0445 \u043F\u0440\u0435\u0444\u0438\u043A\u0441\u043E\u0432. \u0424\u0443\u043D\u043A\u0446\u0438\u044F \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u043E\u043F\u0442\u0438\u043C\u0430\u043B\u044C\u043D\u043E, \u0435\u0441\u043B\u0438 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 "quickSuggestions" \u043E\u0442\u043A\u043B\u044E\u0447\u0435\u043D.',"\u0412\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u0434\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F \u043F\u043E TAB.","\u041D\u0435\u043E\u0431\u044B\u0447\u043D\u044B\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u044F \u0441\u0442\u0440\u043E\u043A\u0438 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u0443\u0434\u0430\u043B\u044F\u044E\u0442\u0441\u044F.","\u041D\u0435\u043E\u0431\u044B\u0447\u043D\u044B\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u044F \u0441\u0442\u0440\u043E\u043A\u0438 \u0438\u0433\u043D\u043E\u0440\u0438\u0440\u0443\u044E\u0442\u0441\u044F.","\u0414\u043B\u044F \u043D\u0435\u043E\u0431\u044B\u0447\u043D\u044B\u0445 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u044F \u0441\u0442\u0440\u043E\u043A\u0438 \u0437\u0430\u043F\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435.","\u0423\u0434\u0430\u043B\u0438\u0442\u0435 \u043D\u0435\u043E\u0431\u044B\u0447\u043D\u044B\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u044F \u0441\u0442\u0440\u043E\u043A\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043C\u043E\u0433\u0443\u0442 \u0432\u044B\u0437\u0432\u0430\u0442\u044C \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u044B.","\u0412\u0441\u0442\u0430\u0432\u043A\u0430 \u0438 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u043F\u0440\u043E\u0431\u0435\u043B\u043E\u0432 \u043F\u043E\u0441\u043B\u0435 \u043F\u043E\u0437\u0438\u0446\u0438\u0438 \u0442\u0430\u0431\u0443\u043B\u044F\u0446\u0438\u0438","\u0421\u0438\u043C\u0432\u043E\u043B\u044B, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u043A\u0430\u043A \u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u0438 \u0441\u043B\u043E\u0432 \u043F\u0440\u0438 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0438 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438\u043B\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0439, \u0441\u0432\u044F\u0437\u0430\u043D\u043D\u044B\u0445 \u0441\u043E \u0441\u043B\u043E\u0432\u0430\u043C\u0438.","\u0421\u0442\u0440\u043E\u043A\u0438 \u043D\u0435 \u0431\u0443\u0434\u0443\u0442 \u043F\u0435\u0440\u0435\u043D\u043E\u0441\u0438\u0442\u044C\u0441\u044F \u043D\u0438\u043A\u043E\u0433\u0434\u0430.","\u0421\u0442\u0440\u043E\u043A\u0438 \u0431\u0443\u0434\u0443\u0442 \u043F\u0435\u0440\u0435\u043D\u043E\u0441\u0438\u0442\u044C\u0441\u044F \u043F\u043E \u0448\u0438\u0440\u0438\u043D\u0435 \u043E\u043A\u043D\u0430 \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0430.",'\u0421\u0442\u0440\u043E\u043A\u0438 \u0431\u0443\u0434\u0443\u0442 \u043F\u0435\u0440\u0435\u043D\u043E\u0441\u0438\u0442\u044C\u0441\u044F \u043F\u043E "#editor.wordWrapColumn#".','\u0421\u0442\u0440\u043E\u043A\u0438 \u0431\u0443\u0434\u0443\u0442 \u043F\u0435\u0440\u0435\u043D\u0435\u0441\u0435\u043D\u044B \u043F\u043E \u043C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u043C\u0443 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044E \u0438\u0437 \u0434\u0432\u0443\u0445: \u0448\u0438\u0440\u0438\u043D\u0430 \u043E\u043A\u043D\u0430 \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0430 \u0438 "#editor.wordWrapColumn#".',"\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0442\u0435\u043C, \u043A\u0430\u043A \u0441\u043B\u0435\u0434\u0443\u0435\u0442 \u043F\u0435\u0440\u0435\u043D\u043E\u0441\u0438\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0438.",'\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442 \u0441\u0442\u043E\u043B\u0431\u0435\u0446 \u043F\u0435\u0440\u0435\u043D\u043E\u0441\u0430 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430, \u0435\u0441\u043B\u0438 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 "#editor.wordWrap#" \u2014 "wordWrapColumn" \u0438\u043B\u0438 "bounded".',"\u0411\u0435\u0437 \u043E\u0442\u0441\u0442\u0443\u043F\u0430. \u041F\u0435\u0440\u0435\u043D\u043E\u0441 \u0441\u0442\u0440\u043E\u043A \u043D\u0430\u0447\u0438\u043D\u0430\u0435\u0442\u0441\u044F \u0441\u043E \u0441\u0442\u043E\u043B\u0431\u0446\u0430 1.","\u041F\u0435\u0440\u0435\u043D\u0435\u0441\u0435\u043D\u043D\u044B\u0435 \u0441\u0442\u0440\u043E\u043A\u0438 \u043F\u043E\u043B\u0443\u0447\u0430\u0442 \u0442\u043E\u0442 \u0436\u0435 \u043E\u0442\u0441\u0442\u0443\u043F, \u0447\u0442\u043E \u0438 \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430.","\u041F\u0435\u0440\u0435\u043D\u0435\u0441\u0435\u043D\u043D\u044B\u0435 \u0441\u0442\u0440\u043E\u043A\u0438 \u043F\u043E\u043B\u0443\u0447\u0430\u0442 \u043E\u0442\u0441\u0442\u0443\u043F, \u0443\u0432\u0435\u043B\u0438\u0447\u0435\u043D\u043D\u044B\u0439 \u043D\u0430 \u0435\u0434\u0438\u043D\u0438\u0446\u0443 \u043F\u043E \u0441\u0440\u0430\u0432\u043D\u0435\u043D\u0438\u044E \u0441 \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u043E\u0439. ","\u041F\u0435\u0440\u0435\u043D\u0435\u0441\u0435\u043D\u043D\u044B\u0435 \u0441\u0442\u0440\u043E\u043A\u0438 \u043F\u043E\u043B\u0443\u0447\u0430\u0442 \u043E\u0442\u0441\u0442\u0443\u043F, \u0443\u0432\u0435\u043B\u0438\u0447\u0435\u043D\u043D\u044B\u0439 \u043D\u0430 \u0434\u0432\u0430 \u043F\u043E \u0441\u0440\u0430\u0432\u043D\u0435\u043D\u0438\u044E \u0441 \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u043E\u0439.","\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u043E\u0442\u0441\u0442\u0443\u043F\u043E\u043C \u0441\u0442\u0440\u043E\u043A \u0441 \u043F\u0435\u0440\u0435\u043D\u043E\u0441\u043E\u043C \u043F\u043E \u0441\u043B\u043E\u0432\u0430\u043C.","\u041F\u0440\u0435\u0434\u043F\u043E\u043B\u0430\u0433\u0430\u0435\u0442, \u0447\u0442\u043E \u0432\u0441\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u0438\u043C\u0435\u044E\u0442 \u043E\u0434\u0438\u043D\u0430\u043A\u043E\u0432\u0443\u044E \u0448\u0438\u0440\u0438\u043D\u0443. \u042D\u0442\u043E \u0431\u044B\u0441\u0442\u0440\u044B\u0439 \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u043E \u0434\u043B\u044F \u043C\u043E\u043D\u043E\u0448\u0438\u0440\u0438\u043D\u043D\u044B\u0445 \u0448\u0440\u0438\u0444\u0442\u043E\u0432 \u0438 \u043D\u0435\u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u0441\u043A\u0440\u0438\u043F\u0442\u043E\u0432 (\u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, \u043B\u0430\u0442\u0438\u043D\u0441\u043A\u0438\u0445 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432), \u0433\u0434\u0435 \u0433\u043B\u0438\u0444\u044B \u0438\u043C\u0435\u044E\u0442 \u043E\u0434\u0438\u043D\u0430\u043A\u043E\u0432\u0443\u044E \u0448\u0438\u0440\u0438\u043D\u0443.","\u0414\u0435\u043B\u0435\u0433\u0438\u0440\u0443\u0435\u0442 \u0432\u044B\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u0435 \u0442\u043E\u0447\u0435\u043A \u043F\u0435\u0440\u0435\u043D\u043E\u0441\u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0443. \u042D\u0442\u043E \u043C\u0435\u0434\u043B\u0435\u043D\u043D\u044B\u0439 \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u043C\u043E\u0436\u0435\u0442 \u043F\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043A \u0437\u0430\u0432\u0438\u0441\u0430\u043D\u0438\u044F\u043C \u043F\u0440\u0438 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0435 \u0431\u043E\u043B\u044C\u0448\u0438\u0445 \u0444\u0430\u0439\u043B\u043E\u0432, \u043D\u043E \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u043E \u0432\u043E \u0432\u0441\u0435\u0445 \u0441\u043B\u0443\u0447\u0430\u044F\u0445.","\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C\u043E\u043C, \u0432\u044B\u0447\u0438\u0441\u043B\u044F\u044E\u0449\u0438\u043C \u0442\u043E\u0447\u043A\u0438 \u043F\u0435\u0440\u0435\u043D\u043E\u0441\u0430."],"vs/editor/common/editorContextKeys":["\u041D\u0430\u0445\u043E\u0434\u0438\u0442\u0441\u044F \u043B\u0438 \u0444\u043E\u043A\u0443\u0441 \u043D\u0430 \u0442\u0435\u043A\u0441\u0442\u0435 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 (\u043A\u0443\u0440\u0441\u043E\u0440 \u043C\u0438\u0433\u0430\u0435\u0442)","\u041D\u0430\u0445\u043E\u0434\u0438\u0442\u0441\u044F \u043B\u0438 \u0444\u043E\u043A\u0443\u0441 \u043D\u0430 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u0438\u043B\u0438 \u043D\u0430 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430 (\u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, \u0444\u043E\u043A\u0443\u0441 \u043D\u0430\u0445\u043E\u0434\u0438\u0442\u0441\u044F \u043D\u0430 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u043E\u0438\u0441\u043A\u0430)","\u041D\u0430\u0445\u043E\u0434\u0438\u0442\u0441\u044F \u043B\u0438 \u0444\u043E\u043A\u0443\u0441 \u043D\u0430 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u0438\u043B\u0438 \u043D\u0430 \u043F\u043E\u043B\u0435 \u0432\u0432\u043E\u0434\u0430 \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0433\u043E \u0442\u0435\u043A\u0441\u0442\u0430 (\u043A\u0443\u0440\u0441\u043E\u0440 \u043C\u0438\u0433\u0430\u0435\u0442)","\u0414\u043E\u0441\u0442\u0443\u043F\u0435\u043D \u043B\u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0442\u043E\u043B\u044C\u043A\u043E \u0434\u043B\u044F \u0447\u0442\u0435\u043D\u0438\u044F","\u042F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u043B\u0438 \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u043E\u043C \u043D\u0435\u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0439",'\u0412\u043A\u043B\u044E\u0447\u0435\u043D \u043B\u0438 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 "editor.columnSelection"',"\u0415\u0441\u0442\u044C \u043B\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442","\u0415\u0441\u0442\u044C \u043B\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043C\u043D\u043E\u0436\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439 \u0432\u044B\u0431\u043E\u0440","\u041F\u0435\u0440\u0435\u043C\u0435\u0449\u0430\u0435\u0442\u0441\u044F \u043B\u0438 \u0444\u043E\u043A\u0443\u0441 \u0441 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430 \u043F\u0440\u0438 \u043D\u0430\u0436\u0430\u0442\u0438\u0438 \u043A\u043B\u0430\u0432\u0438\u0448\u0438 TAB","\u042F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u043B\u0438 \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u0438\u0435 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u0432\u0438\u0434\u0438\u043C\u044B\u043C","\u042F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u043B\u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0447\u0430\u0441\u0442\u044C\u044E \u0431\u043E\u043B\u044C\u0448\u0435\u0433\u043E \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430 (\u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, \u0437\u0430\u043F\u0438\u0441\u043D\u044B\u0445 \u043A\u043D\u0438\u0436\u0435\u043A)","\u0418\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440 \u044F\u0437\u044B\u043A\u0430 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430","\u0415\u0441\u0442\u044C \u043B\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043F\u043E\u0441\u0442\u0430\u0432\u0449\u0438\u043A \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u044F","\u0415\u0441\u0442\u044C \u043B\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043F\u043E\u0441\u0442\u0430\u0432\u0449\u0438\u043A \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0441 \u043A\u043E\u0434\u043E\u043C","\u0415\u0441\u0442\u044C \u043B\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043F\u043E\u0441\u0442\u0430\u0432\u0449\u0438\u043A CodeLens","\u0415\u0441\u0442\u044C \u043B\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043F\u043E\u0441\u0442\u0430\u0432\u0449\u0438\u043A \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0439","\u0415\u0441\u0442\u044C \u043B\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043F\u043E\u0441\u0442\u0430\u0432\u0449\u0438\u043A \u043E\u0431\u044A\u044F\u0432\u043B\u0435\u043D\u0438\u0439","\u0415\u0441\u0442\u044C \u043B\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043F\u043E\u0441\u0442\u0430\u0432\u0449\u0438\u043A \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u0438","\u0415\u0441\u0442\u044C \u043B\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043F\u043E\u0441\u0442\u0430\u0432\u0449\u0438\u043A \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0439 \u0442\u0438\u043F\u043E\u0432","\u0415\u0441\u0442\u044C \u043B\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043F\u043E\u0441\u0442\u0430\u0432\u0449\u0438\u043A \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u0438\u044F","\u0415\u0441\u0442\u044C \u043B\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043F\u043E\u0441\u0442\u0430\u0432\u0449\u0438\u043A \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432","\u0415\u0441\u0442\u044C \u043B\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043F\u043E\u0441\u0442\u0430\u0432\u0449\u0438\u043A \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430","\u0415\u0441\u0442\u044C \u043B\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043F\u043E\u0441\u0442\u0430\u0432\u0449\u0438\u043A \u0441\u0441\u044B\u043B\u043E\u043A","\u0415\u0441\u0442\u044C \u043B\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043F\u043E\u0441\u0442\u0430\u0432\u0449\u0438\u043A \u043F\u0435\u0440\u0435\u0438\u043C\u0435\u043D\u043E\u0432\u0430\u043D\u0438\u044F","\u0415\u0441\u0442\u044C \u043B\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043F\u043E\u0441\u0442\u0430\u0432\u0449\u0438\u043A \u0441\u043F\u0440\u0430\u0432\u043A\u0438 \u043F\u043E \u0441\u0438\u0433\u043D\u0430\u0442\u0443\u0440\u0430\u043C","\u0415\u0441\u0442\u044C \u043B\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043F\u043E\u0441\u0442\u0430\u0432\u0449\u0438\u043A \u0432\u0441\u0442\u0440\u043E\u0435\u043D\u043D\u044B\u0445 \u043F\u043E\u0434\u0441\u043A\u0430\u0437\u043E\u043A","\u0415\u0441\u0442\u044C \u043B\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043F\u043E\u0441\u0442\u0430\u0432\u0449\u0438\u043A \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432","\u0415\u0441\u0442\u044C \u043B\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043F\u043E\u0441\u0442\u0430\u0432\u0449\u0438\u043A \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0434\u043B\u044F \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432","\u0415\u0441\u0442\u044C \u043B\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u0441\u0442\u0430\u0432\u0449\u0438\u043A\u043E\u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432","\u0415\u0441\u0442\u044C \u043B\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u0441\u0442\u0430\u0432\u0449\u0438\u043A\u043E\u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0434\u043B\u044F \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432"],"vs/editor/common/model/editStack":["\u0412\u0432\u043E\u0434"],"vs/editor/common/modes/modesRegistry":["\u041F\u0440\u043E\u0441\u0442\u043E\u0439 \u0442\u0435\u043A\u0441\u0442"],"vs/editor/common/standaloneStrings":["\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u0432\u044B\u0431\u0440\u0430\u043D\u043E","\u0421\u0442\u0440\u043E\u043A\u0430 {0}, \u0441\u0442\u043E\u043B\u0431\u0435\u0446 {1} (\u0432\u044B\u0431\u0440\u0430\u043D\u043E: {2})","\u0421\u0442\u0440\u043E\u043A\u0430 {0}, \u0441\u0442\u043E\u043B\u0431\u0435\u0446 {1}","\u0412\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u0439: {0} (\u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043E \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432: {1})","\u0412\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u0439: {0}",'\u0422\u0435\u043F\u0435\u0440\u044C \u0434\u043B\u044F \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0430 "accessibilitySupport" \u0443\u0441\u0442\u0430\u043D\u0430\u0432\u043B\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 "\u0432\u043A\u043B".',"\u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\u0446\u0438\u0438 \u043E \u0441\u043F\u0435\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u0445 \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u044F\u0445 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u0432 \u043F\u0430\u043D\u0435\u043B\u0438 \u0442\u043E\u043B\u044C\u043A\u043E \u0434\u043B\u044F \u0447\u0442\u0435\u043D\u0438\u044F \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430 \u043D\u0435\u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0439.","\u043D\u0430 \u043F\u0430\u043D\u0435\u043B\u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430 \u043D\u0435\u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0439."," \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043A\u043E\u0434\u0430 \u0442\u043E\u043B\u044C\u043A\u043E \u0434\u043B\u044F \u0447\u0442\u0435\u043D\u0438\u044F"," \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u043A\u043E\u0434\u0430","\u0427\u0442\u043E\u0431\u044B \u043E\u043F\u0442\u0438\u043C\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F \u0441\u043E \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043E\u043C \u0447\u0442\u0435\u043D\u0438\u044F \u0441 \u044D\u043A\u0440\u0430\u043D\u0430, \u043D\u0430\u0436\u043C\u0438\u0442\u0435 COMMAND+E.","\u0427\u0442\u043E\u0431\u044B \u043E\u043F\u0442\u0438\u043C\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F \u0441\u043E \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043E\u043C \u0447\u0442\u0435\u043D\u0438\u044F \u0441 \u044D\u043A\u0440\u0430\u043D\u0430, \u043D\u0430\u0436\u043C\u0438\u0442\u0435 CTRL+E.","\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043D \u0434\u043B\u044F \u043E\u043F\u0442\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0439 \u0440\u0430\u0431\u043E\u0442\u044B \u0441\u043E \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043E\u043C \u0447\u0442\u0435\u043D\u0438\u044F \u0441 \u044D\u043A\u0440\u0430\u043D\u0430.","\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043D \u0431\u0435\u0437 \u043E\u043F\u0442\u0438\u043C\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0447\u0442\u0435\u043D\u0438\u044F \u0441 \u044D\u043A\u0440\u0430\u043D\u0430, \u0447\u0442\u043E \u043D\u0435 \u043F\u043E\u0434\u0445\u043E\u0434\u0438\u0442 \u0432 \u0434\u0430\u043D\u043D\u043E\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438.","\u041F\u0440\u0438 \u043D\u0430\u0436\u0430\u0442\u0438\u0438 \u043A\u043B\u0430\u0432\u0438\u0448\u0438 TAB \u0432 \u0442\u0435\u043A\u0443\u0449\u0435\u043C \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u0444\u043E\u043A\u0443\u0441 \u0432\u0432\u043E\u0434\u0430 \u043F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u0441\u044F \u043D\u0430 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442, \u0441\u043F\u043E\u0441\u043E\u0431\u043D\u044B\u0439 \u0435\u0433\u043E \u043F\u0440\u0438\u043D\u044F\u0442\u044C. \u0427\u0442\u043E\u0431\u044B \u0438\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u044D\u0442\u043E \u043F\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u0435, \u043D\u0430\u0436\u043C\u0438\u0442\u0435 \u043A\u043B\u0430\u0432\u0438\u0448\u0443 {0}.","\u041F\u0440\u0438 \u043D\u0430\u0436\u0430\u0442\u0438\u0438 \u043A\u043B\u0430\u0432\u0438\u0448\u0438 TAB \u0432 \u0442\u0435\u043A\u0443\u0449\u0435\u043C \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u0444\u043E\u043A\u0443\u0441 \u0432\u0432\u043E\u0434\u0430 \u043F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u0441\u044F \u043D\u0430 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442, \u0441\u043F\u043E\u0441\u043E\u0431\u043D\u044B\u0439 \u0435\u0433\u043E \u043F\u0440\u0438\u043D\u044F\u0442\u044C. \u041A\u043E\u043C\u0430\u043D\u0434\u0443 {0} \u0441\u0435\u0439\u0447\u0430\u0441 \u043D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0432\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u043D\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043C\u043E\u0433\u043E \u0441\u043E\u0447\u0435\u0442\u0430\u043D\u0438\u044F \u043A\u043B\u0430\u0432\u0438\u0448.","\u041F\u0440\u0438 \u043D\u0430\u0436\u0430\u0442\u0438\u0438 \u043A\u043B\u0430\u0432\u0438\u0448\u0438 TAB \u0432 \u0442\u0435\u043A\u0443\u0449\u0435\u043C \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0442\u0430\u0432\u043B\u0435\u043D \u0441\u0438\u043C\u0432\u043E\u043B \u0442\u0430\u0431\u0443\u043B\u044F\u0446\u0438\u0438. \u0427\u0442\u043E\u0431\u044B \u0438\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u044D\u0442\u043E \u043F\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u0435, \u043D\u0430\u0436\u043C\u0438\u0442\u0435 \u043A\u043B\u0430\u0432\u0438\u0448\u0443 {0}.","\u041F\u0440\u0438 \u043D\u0430\u0436\u0430\u0442\u0438\u0438 \u043A\u043B\u0430\u0432\u0438\u0448\u0438 TAB \u0432 \u0442\u0435\u043A\u0443\u0449\u0435\u043C \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0442\u0430\u0432\u043B\u0435\u043D \u0441\u0438\u043C\u0432\u043E\u043B \u0442\u0430\u0431\u0443\u043B\u044F\u0446\u0438\u0438. \u041A\u043E\u043C\u0430\u043D\u0434\u0443 {0} \u0441\u0435\u0439\u0447\u0430\u0441 \u043D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0432\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u043D\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043C\u043E\u0433\u043E \u0441\u043E\u0447\u0435\u0442\u0430\u043D\u0438\u044F \u043A\u043B\u0430\u0432\u0438\u0448.","\u041D\u0430\u0436\u043C\u0438\u0442\u0435 COMMAND+H, \u0447\u0442\u043E\u0431\u044B \u043E\u0442\u043A\u0440\u044B\u0442\u044C \u043E\u043A\u043D\u043E \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0441 \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0439 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0435\u0439 \u043E \u0441\u043F\u0435\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u0445 \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u044F\u0445 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u041D\u0430\u0436\u043C\u0438\u0442\u0435 CTRL+H, \u0447\u0442\u043E\u0431\u044B \u043E\u0442\u043A\u0440\u044B\u0442\u044C \u043E\u043A\u043D\u043E \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0441 \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0439 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0435\u0439 \u043E \u0441\u043F\u0435\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u0445 \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u044F\u0445 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u0412\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u0437\u0430\u043A\u0440\u044B\u0442\u044C \u044D\u0442\u0443 \u043F\u043E\u0434\u0441\u043A\u0430\u0437\u043A\u0443 \u0438 \u0432\u0435\u0440\u043D\u0443\u0442\u044C\u0441\u044F \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440, \u043D\u0430\u0436\u0430\u0432 \u043A\u043B\u0430\u0432\u0438\u0448\u0438 ESCAPE \u0438\u043B\u0438 SHIFT+ESCAPE.","\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0441\u043F\u0440\u0430\u0432\u043A\u0443 \u043F\u043E \u0441\u043F\u0435\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u043C \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u044F\u043C","\u0420\u0430\u0437\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A: \u043F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C \u0442\u043E\u043A\u0435\u043D\u044B","\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u0441\u0442\u0440\u043E\u043A\u0435/\u0441\u0442\u043E\u043B\u0431\u0446\u0443...","\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0432\u0441\u0435\u0445 \u043F\u043E\u0441\u0442\u0430\u0432\u0449\u0438\u043A\u043E\u0432 \u0431\u044B\u0441\u0442\u0440\u043E\u0433\u043E \u0434\u043E\u0441\u0442\u0443\u043F\u0430","\u041F\u0430\u043B\u0438\u0442\u0440\u0430 \u043A\u043E\u043C\u0430\u043D\u0434","\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0438 \u0432\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u043A\u043E\u043C\u0430\u043D\u0434\u044B","\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u0441\u0438\u043C\u0432\u043E\u043B\u0443...","\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u0441\u0438\u043C\u0432\u043E\u043B\u0443 \u043F\u043E \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u044F\u043C...","\u0421\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0435 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430","\u041D\u0430\u0436\u043C\u0438\u0442\u0435 ALT+F1 \u0434\u043B\u044F \u0434\u043E\u0441\u0442\u0443\u043F\u0430 \u043A \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0430\u043C \u0441\u043F\u0435\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u0445 \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u0435\u0439.","\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0432\u044B\u0441\u043E\u043A\u043E\u043A\u043E\u043D\u0442\u0440\u0430\u0441\u0442\u043D\u0443\u044E \u0442\u0435\u043C\u0443","\u0412\u043D\u0435\u0441\u0435\u043D\u043E \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0432 \u0444\u0430\u0439\u043B\u0430\u0445 ({1}): {0}."],"vs/editor/common/view/editorColorRegistry":["\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0434\u043B\u044F \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0441\u0442\u0440\u043E\u043A\u0438 \u0432 \u043F\u043E\u0437\u0438\u0446\u0438\u0438 \u043A\u0443\u0440\u0441\u043E\u0440\u0430.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0433\u0440\u0430\u043D\u0438\u0446 \u0432\u043E\u043A\u0440\u0443\u0433 \u0441\u0442\u0440\u043E\u043A\u0438 \u0432 \u043F\u043E\u0437\u0438\u0446\u0438\u0438 \u043A\u0443\u0440\u0441\u043E\u0440\u0430.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0434\u043B\u044F \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0445 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\u043E\u0432, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440 \u043F\u0440\u0438 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0438 \u0444\u0443\u043D\u043A\u0446\u0438\u0439 Quick Open \u0438\u043B\u0438 \u043F\u043E\u0438\u0441\u043A\u0430. \u0426\u0432\u0435\u0442 \u043D\u0435 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435\u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u044B\u043C, \u0447\u0442\u043E\u0431\u044B \u043D\u0435 \u0441\u043A\u0440\u044B\u0442\u044C \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0435 \u043D\u0438\u0436\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u043E\u0431\u0432\u043E\u0434\u043A\u0438 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F.",'\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u043E\u0433\u043E \u0441\u0438\u043C\u0432\u043E\u043B\u0430, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, \u0432 \u0444\u0443\u043D\u043A\u0446\u0438\u044F\u0445 "\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u044E" \u0438\u043B\u0438 "\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u043C\u0443/\u043F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0435\u043C\u0443 \u0441\u0438\u043C\u0432\u043E\u043B\u0443". \u0426\u0432\u0435\u0442 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u044B\u043C, \u0447\u0442\u043E\u0431\u044B \u043D\u0435 \u0441\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u0435 \u0442\u0435\u043A\u0441\u0442\u0430 \u043F\u043E\u0434 \u043D\u0438\u043C.',"\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0434\u043B\u044F \u0433\u0440\u0430\u043D\u0438\u0446\u044B \u0432\u043E\u043A\u0440\u0443\u0433 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0445 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432.","\u0426\u0432\u0435\u0442 \u043A\u0443\u0440\u0441\u043E\u0440\u0430 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u043A\u0443\u0440\u0441\u043E\u0440\u0430 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430. \u041F\u043E\u0437\u0432\u043E\u043B\u044F\u0435\u0442 \u043D\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044C \u0446\u0432\u0435\u0442 \u0441\u0438\u043C\u0432\u043E\u043B\u0430, \u043F\u0435\u0440\u0435\u043A\u0440\u044B\u0432\u0430\u0435\u043C\u043E\u0433\u043E \u043F\u0440\u044F\u043C\u043E\u0443\u0433\u043E\u043B\u044C\u043D\u044B\u043C \u043A\u0443\u0440\u0441\u043E\u0440\u043E\u043C.","\u0426\u0432\u0435\u0442 \u043F\u0440\u043E\u0431\u0435\u043B\u043E\u0432 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435.","\u0426\u0432\u0435\u0442 \u043D\u0430\u043F\u0440\u0430\u0432\u043B\u044F\u044E\u0449\u0438\u0445 \u0434\u043B\u044F \u043E\u0442\u0441\u0442\u0443\u043F\u043E\u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u0426\u0432\u0435\u0442 \u0430\u043A\u0442\u0438\u0432\u043D\u044B\u0445 \u043D\u0430\u043F\u0440\u0430\u0432\u043B\u044F\u044E\u0449\u0438\u0445 \u0434\u043B\u044F \u043E\u0442\u0441\u0442\u0443\u043F\u043E\u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u0426\u0432\u0435\u0442 \u043D\u043E\u043C\u0435\u0440\u043E\u0432 \u0441\u0442\u0440\u043E\u043A \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u0426\u0432\u0435\u0442 \u043D\u043E\u043C\u0435\u0440\u0430 \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430","\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 'Id' \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u043C. \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u0432\u043C\u0435\u0441\u0442\u043E \u043D\u0435\u0433\u043E \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 'editorLineNumber.activeForeground'.","\u0426\u0432\u0435\u0442 \u043D\u043E\u043C\u0435\u0440\u0430 \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430","\u0426\u0432\u0435\u0442 \u043B\u0438\u043D\u0435\u0439\u043A\u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 CodeLens \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u043F\u0430\u0440\u043D\u044B\u0445 \u0441\u043A\u043E\u0431\u043E\u043A","\u0426\u0432\u0435\u0442 \u043F\u0440\u044F\u043C\u043E\u0443\u0433\u043E\u043B\u044C\u043D\u0438\u043A\u043E\u0432 \u043F\u0430\u0440\u043D\u044B\u0445 \u0441\u043A\u043E\u0431\u043E\u043A","\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446\u044B \u0434\u043B\u044F \u043B\u0438\u043D\u0435\u0439\u043A\u0438 \u0432 \u043E\u043A\u043D\u0435 \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0430.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u043E\u0431\u0437\u043E\u0440\u043D\u043E\u0439 \u043B\u0438\u043D\u0435\u0439\u043A\u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430. \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F, \u0442\u043E\u043B\u044C\u043A\u043E \u0435\u0441\u043B\u0438 \u043C\u0438\u043D\u0438-\u043A\u0430\u0440\u0442\u0430 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u0430 \u0438 \u0440\u0430\u0437\u043C\u0435\u0449\u0435\u043D\u0430 \u0432 \u043F\u0440\u0430\u0432\u043E\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u043F\u043E\u043B\u044F \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435. \u0412 \u043F\u043E\u043B\u0435 \u0440\u0430\u0437\u043C\u0435\u0449\u0430\u044E\u0442\u0441\u044F \u043E\u0442\u0441\u0442\u0443\u043F\u044B \u0433\u043B\u0438\u0444\u043E\u0432 \u0438 \u043D\u043E\u043C\u0435\u0440\u0430 \u0441\u0442\u0440\u043E\u043A.","\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446\u044B \u0434\u043B\u044F \u043D\u0435\u043D\u0443\u0436\u043D\u043E\u0433\u043E (\u043D\u0435\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u043E\u0433\u043E) \u0438\u0441\u0445\u043E\u0434\u043D\u043E\u0433\u043E \u043A\u043E\u0434\u0430 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435.",'\u041D\u0435\u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u043E\u0441\u0442\u044C \u043D\u0435\u043D\u0443\u0436\u043D\u043E\u0433\u043E (\u043D\u0435\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u043E\u0433\u043E) \u0438\u0441\u0445\u043E\u0434\u043D\u043E\u0433\u043E \u043A\u043E\u0434\u0430 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435. \u041D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, "#000000c0" \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u043A\u043E\u0434 \u0441 \u043D\u0435\u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u043E\u0441\u0442\u044C\u044E 75 %. \u0412 \u0432\u044B\u0441\u043E\u043A\u043E\u043A\u043E\u043D\u0442\u0440\u0430\u0441\u0442\u043D\u044B\u0445 \u0442\u0435\u043C\u0430\u0445 \u0434\u043B\u044F \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u043D\u0435\u043D\u0443\u0436\u043D\u043E\u0433\u043E \u043A\u043E\u0434\u0430 \u0432\u043C\u0435\u0441\u0442\u043E \u0437\u0430\u0442\u0435\u043D\u0435\u043D\u0438\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u0446\u0432\u0435\u0442 \u0442\u0435\u043C\u044B "editorUnnecessaryCode.border".',"\u0426\u0432\u0435\u0442 \u043C\u0430\u0440\u043A\u0435\u0440\u0430 \u043E\u0431\u0437\u043E\u0440\u043D\u043E\u0439 \u043B\u0438\u043D\u0435\u0439\u043A\u0438 \u0434\u043B\u044F \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\u043E\u0432. \u0426\u0432\u0435\u0442 \u043D\u0435 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435\u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u044B\u043C, \u0447\u0442\u043E\u0431\u044B \u043D\u0435 \u0441\u043A\u0440\u044B\u0442\u044C \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0435 \u043D\u0438\u0436\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F.","\u0426\u0432\u0435\u0442 \u043C\u0435\u0442\u043A\u0438 \u043B\u0438\u043D\u0435\u0439\u043A\u0438 \u0432 \u043E\u043A\u043D\u0435 \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0430 \u0434\u043B\u044F \u043E\u0448\u0438\u0431\u043E\u043A.","\u0426\u0432\u0435\u0442 \u043C\u0435\u0442\u043A\u0438 \u043B\u0438\u043D\u0435\u0439\u043A\u0438 \u0432 \u043E\u043A\u043D\u0435 \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0430 \u0434\u043B\u044F \u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043C\u0435\u0442\u043A\u0438 \u043B\u0438\u043D\u0435\u0439\u043A\u0438 \u0432 \u043E\u043A\u043D\u0435 \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0430 \u0434\u043B\u044F \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0445 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439."],"vs/editor/contrib/anchorSelect/anchorSelect":["\u041D\u0430\u0447\u0430\u043B\u044C\u043D\u0430\u044F \u0442\u043E\u0447\u043A\u0430 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F","\u041D\u0430\u0447\u0430\u043B\u044C\u043D\u0430\u044F \u0442\u043E\u0447\u043A\u0430 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u0430 \u0432 {0}:{1}","\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u0443\u044E \u0442\u043E\u0447\u043A\u0443 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F","\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u043E\u0439 \u0442\u043E\u0447\u043A\u0435 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F","\u0412\u044B\u0434\u0435\u043B\u0438\u0442\u044C \u0442\u0435\u043A\u0441\u0442 \u043E\u0442 \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u043E\u0439 \u0442\u043E\u0447\u043A\u0438 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0434\u043E \u043A\u0443\u0440\u0441\u043E\u0440\u0430","\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u0443\u044E \u0442\u043E\u0447\u043A\u0443 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F"],"vs/editor/contrib/bracketMatching/bracketMatching":["\u0426\u0432\u0435\u0442 \u043C\u0435\u0442\u043A\u0438 \u043B\u0438\u043D\u0435\u0439\u043A\u0438 \u0432 \u043E\u043A\u043D\u0435 \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0430 \u0434\u043B\u044F \u043F\u0430\u0440 \u0441\u043A\u043E\u0431\u043E\u043A.","\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u0441\u043A\u043E\u0431\u043A\u0435","\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0441\u043A\u043E\u0431\u043A\u0443","\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A &&\u0441\u043A\u043E\u0431\u043A\u0435"],"vs/editor/contrib/caretOperations/caretOperations":["\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442 \u0432\u043B\u0435\u0432\u043E","\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442 \u0432\u043F\u0440\u0430\u0432\u043E"],"vs/editor/contrib/caretOperations/transpose":["\u0422\u0440\u0430\u043D\u0441\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0431\u0443\u043A\u0432\u044B"],"vs/editor/contrib/clipboard/clipboard":["&&\u0412\u044B\u0440\u0435\u0437\u0430\u0442\u044C","\u0412\u044B\u0440\u0435\u0437\u0430\u0442\u044C","\u0412\u044B\u0440\u0435\u0437\u0430\u0442\u044C","&&\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C","\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435","\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435","&&\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C","\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C","\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C","\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u0435\u043C \u0441\u0438\u043D\u0442\u0430\u043A\u0441\u0438\u0441\u0430"],"vs/editor/contrib/codeAction/codeActionCommands":["\u0422\u0438\u043F \u0437\u0430\u043F\u0443\u0441\u043A\u0430\u0435\u043C\u043E\u0433\u043E \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u043A\u043E\u0434\u0430.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u043A\u043E\u0433\u0434\u0430 \u043F\u0440\u0438\u043C\u0435\u043D\u044F\u044E\u0442\u0441\u044F \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0435\u043D\u043D\u044B\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F.","\u0412\u0441\u0435\u0433\u0434\u0430 \u043F\u0440\u0438\u043C\u0435\u043D\u044F\u0442\u044C \u043F\u0435\u0440\u0432\u043E\u0435 \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0435\u043D\u043D\u043E\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043A\u043E\u0434\u0430.","\u041F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C \u043F\u0435\u0440\u0432\u043E\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0435\u043D\u043D\u043E\u0433\u043E \u043A\u043E\u0434\u0430, \u0435\u0441\u043B\u0438 \u043E\u043D\u043E \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0435\u0434\u0438\u043D\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u043C.","\u041D\u0435 \u043F\u0440\u0438\u043C\u0435\u043D\u044F\u0442\u044C \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0435\u043D\u043D\u043E\u0433\u043E \u043A\u043E\u0434\u0430.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0441\u043B\u0435\u0434\u0443\u0435\u0442 \u043B\u0438 \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044C \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u0440\u0435\u0434\u043F\u043E\u0447\u0442\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u043A\u043E\u0434\u0430.","\u041F\u0440\u0438 \u043F\u0440\u0438\u043C\u0435\u043D\u0435\u043D\u0438\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u043A\u043E\u0434\u0430 \u043F\u0440\u043E\u0438\u0437\u043E\u0448\u043B\u0430 \u043D\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043D\u0430\u044F \u043E\u0448\u0438\u0431\u043A\u0430","\u0411\u044B\u0441\u0442\u0440\u043E\u0435 \u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435...","\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u043A\u043E\u0434\u0430 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044E\u0442",'\u041D\u0435\u0442 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0445 \u043F\u0440\u0435\u0434\u043F\u043E\u0447\u0442\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043A\u043E\u0434\u0430 \u0434\u043B\u044F "{0}".','\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u043A\u043E\u0434\u0430 \u0434\u043B\u044F "{0}" \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B',"\u041D\u0435\u0442 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0445 \u043F\u0440\u0435\u0434\u043F\u043E\u0447\u0442\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043A\u043E\u0434\u0430","\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u043A\u043E\u0434\u0430 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044E\u0442","\u0420\u0435\u0444\u0430\u043A\u0442\u043E\u0440\u0438\u043D\u0433...",'\u041D\u0435\u0442 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0445 \u043F\u0440\u0435\u0434\u043F\u043E\u0447\u0442\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0445 \u0440\u0435\u0444\u0430\u043A\u0442\u043E\u0440\u0438\u043D\u0433\u043E\u0432 \u0434\u043B\u044F "{0}"','\u041D\u0435\u0442 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E\u0433\u043E \u0440\u0435\u0444\u0430\u043A\u0442\u043E\u0440\u0438\u043D\u0433\u0430 \u0434\u043B\u044F "{0}"',"\u041D\u0435\u0442 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0445 \u043F\u0440\u0435\u0434\u043F\u043E\u0447\u0442\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0445 \u0440\u0435\u0444\u0430\u043A\u0442\u043E\u0440\u0438\u043D\u0433\u043E\u0432","\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0435 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0438 \u0440\u0435\u0444\u0430\u043A\u0442\u043E\u0440\u0438\u043D\u0433\u0430 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044E\u0442","\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0438\u0441\u0445\u043E\u0434\u043D\u044B\u043C \u043A\u043E\u0434\u043E\u043C...","\u041D\u0435\u0442 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0445 \u043F\u0440\u0435\u0434\u043F\u043E\u0447\u0442\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A\u0430 \u0434\u043B\u044F '{0}'",'\u041D\u0435\u0442 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0445 \u0438\u0441\u0445\u043E\u0434\u043D\u044B\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0434\u043B\u044F "{0}"',"\u041F\u0440\u0435\u0434\u043F\u043E\u0447\u0442\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A\u0430 \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B","\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0435 \u0438\u0441\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044E\u0442","\u041E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u044F \u0438\u043C\u043F\u043E\u0440\u0442\u043E\u0432","\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0434\u043B\u044F \u0443\u043F\u043E\u0440\u044F\u0434\u043E\u0447\u0435\u043D\u0438\u044F \u0438\u043C\u043F\u043E\u0440\u0442\u043E\u0432 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442","\u0418\u0441\u043F\u0440\u0430\u0432\u0438\u0442\u044C \u0432\u0441\u0435","\u041D\u0435\u0442 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E\u0433\u043E \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u043F\u043E \u043E\u0431\u0449\u0435\u043C\u0443 \u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044E","\u0410\u0432\u0442\u043E\u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435...","\u041D\u0435\u0442 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0445 \u0430\u0432\u0442\u043E\u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0439"],"vs/editor/contrib/codeAction/lightBulbWidget":["\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0439. \u0414\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043F\u0440\u0435\u0434\u043F\u043E\u0447\u0438\u0442\u0430\u0435\u043C\u043E\u0435 \u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 ({0})","\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F ({0})","\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F"],"vs/editor/contrib/codelens/codelensController":["\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u043A\u043E\u043C\u0430\u043D\u0434\u044B CodeLens \u0434\u043B\u044F \u0442\u0435\u043A\u0443\u0449\u0435\u0439 \u0441\u0442\u0440\u043E\u043A\u0438"],"vs/editor/contrib/comment/comment":["\u0417\u0430\u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0438\u043B\u0438 \u0440\u0430\u0441\u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443","\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 &&\u0441\u0442\u0440\u043E\u043A\u0438","\u0417\u0430\u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443","\u0420\u0430\u0441\u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443","\u0417\u0430\u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0438\u043B\u0438 \u0440\u0430\u0441\u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0431\u043B\u043E\u043A","\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 &&\u0431\u043B\u043E\u043A\u0430"],"vs/editor/contrib/contextmenu/contextmenu":["\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442\u043D\u043E\u0435 \u043C\u0435\u043D\u044E \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430"],"vs/editor/contrib/cursorUndo/cursorUndo":["\u041E\u0442\u043C\u0435\u043D\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u043A\u0443\u0440\u0441\u043E\u0440\u0430","\u041F\u043E\u0432\u0442\u043E\u0440 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u043A\u0443\u0440\u0441\u043E\u0440\u0430"],"vs/editor/contrib/find/findController":["\u041D\u0430\u0439\u0442\u0438","&&\u041D\u0430\u0439\u0442\u0438","\u041D\u0430\u0439\u0442\u0438 \u0432 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u043C","\u041D\u0430\u0439\u0442\u0438 \u0434\u0430\u043B\u0435\u0435","\u041D\u0430\u0439\u0442\u0438 \u0434\u0430\u043B\u0435\u0435","\u041D\u0430\u0439\u0442\u0438 \u0440\u0430\u043D\u0435\u0435","\u041D\u0430\u0439\u0442\u0438 \u0440\u0430\u043D\u0435\u0435","\u041D\u0430\u0439\u0442\u0438 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u0435 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u0435","\u041D\u0430\u0439\u0442\u0438 \u043F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0435\u0435 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u0435","\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C","&&\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C"],"vs/editor/contrib/find/findWidget":['\u0417\u043D\u0430\u0447\u043E\u043A \u0434\u043B\u044F \u043A\u043D\u043E\u043F\u043A\u0438 "\u041D\u0430\u0439\u0442\u0438 \u0432 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u043C" \u0432 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u043E\u0438\u0441\u043A\u0430 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435.',"\u0417\u043D\u0430\u0447\u043E\u043A, \u0443\u043A\u0430\u0437\u044B\u0432\u0430\u044E\u0449\u0438\u0439, \u0447\u0442\u043E \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u043F\u043E\u0438\u0441\u043A\u0430 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u0441\u0432\u0435\u0440\u043D\u0443\u0442\u043E.","\u0417\u043D\u0430\u0447\u043E\u043A, \u0443\u043A\u0430\u0437\u044B\u0432\u0430\u044E\u0449\u0438\u0439, \u0447\u0442\u043E \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u043F\u043E\u0438\u0441\u043A\u0430 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u0440\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u043E.",'\u0417\u043D\u0430\u0447\u043E\u043A \u0434\u043B\u044F \u043A\u043D\u043E\u043F\u043A\u0438 "\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C" \u0432 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u043E\u0438\u0441\u043A\u0430 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435.','\u0417\u043D\u0430\u0447\u043E\u043A \u0434\u043B\u044F \u043A\u043D\u043E\u043F\u043A\u0438 "\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C \u0432\u0441\u0435" \u0432 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u043E\u0438\u0441\u043A\u0430 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435.','\u0417\u043D\u0430\u0447\u043E\u043A \u0434\u043B\u044F \u043A\u043D\u043E\u043F\u043A\u0438 "\u041D\u0430\u0439\u0442\u0438 \u0440\u0430\u043D\u0435\u0435" \u0432 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u043E\u0438\u0441\u043A\u0430 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435.','\u0417\u043D\u0430\u0447\u043E\u043A \u0434\u043B\u044F \u043A\u043D\u043E\u043F\u043A\u0438 "\u041D\u0430\u0439\u0442\u0438 \u0434\u0430\u043B\u0435\u0435" \u0432 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u043E\u0438\u0441\u043A\u0430 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435.',"\u041D\u0430\u0439\u0442\u0438","\u041D\u0430\u0439\u0442\u0438","\u041F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0435\u0435 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435","\u0421\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u0435 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435","\u041D\u0430\u0439\u0442\u0438 \u0432 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u0438","\u0417\u0430\u043A\u0440\u044B\u0442\u044C","\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C","\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C","\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C","\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C \u0432\u0441\u0435",'\u0420\u0435\u0436\u0438\u043C "\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 \u0437\u0430\u043C\u0435\u043D\u044B"',"\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u0435\u0440\u0432\u044B\u0435 {0} \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432, \u043D\u043E \u0432\u0441\u0435 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0438 \u043F\u043E\u0438\u0441\u043A\u0430 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u044E\u0442\u0441\u044F \u0441\u043E \u0432\u0441\u0435\u043C \u0442\u0435\u043A\u0441\u0442\u043E\u043C.","{0} \u0438\u0437 {1}","\u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044E\u0442","{0} \u043E\u0431\u043D\u0430\u0440\u0443\u0436\u0435\u043D\u043E",'{0} \u043D\u0430\u0439\u0434\u0435\u043D \u0434\u043B\u044F "{1}"','{0} \u043D\u0430\u0439\u0434\u0435\u043D \u0434\u043B\u044F "{1}", \u0432 {2}','{0} \u043D\u0430\u0439\u0434\u0435\u043D \u0434\u043B\u044F "{1}"',"\u0422\u0435\u043F\u0435\u0440\u044C \u043F\u0440\u0438 \u043D\u0430\u0436\u0430\u0442\u0438\u0438 \u043A\u043B\u0430\u0432\u0438\u0448 CTRL+\u0412\u0412\u041E\u0414 \u0432\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0441\u0438\u043C\u0432\u043E\u043B \u043F\u0435\u0440\u0435\u0445\u043E\u0434\u0430 \u043D\u0430 \u043D\u043E\u0432\u0443\u044E \u0441\u0442\u0440\u043E\u043A\u0443 \u0432\u043C\u0435\u0441\u0442\u043E \u0437\u0430\u043C\u0435\u043D\u044B \u0432\u0441\u0435\u0433\u043E \u0442\u0435\u043A\u0441\u0442\u0430. \u0412\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u0438\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0441\u043E\u0447\u0435\u0442\u0430\u043D\u0438\u0435 \u043A\u043B\u0430\u0432\u0438\u0448 editor.action.replaceAll, \u0447\u0442\u043E\u0431\u044B \u043F\u0435\u0440\u0435\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0438\u0442\u044C \u044D\u0442\u043E \u043F\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u0435."],"vs/editor/contrib/folding/folding":["\u0420\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044C","\u0420\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0440\u0435\u043A\u0443\u0440\u0441\u0438\u0432\u043D\u043E","\u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C","\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0441\u0432\u0435\u0440\u0442\u044B\u0432\u0430\u043D\u0438\u0435","\u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0440\u0435\u043A\u0443\u0440\u0441\u0438\u0432\u043D\u043E","\u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0432\u0441\u0435 \u0431\u043B\u043E\u043A\u0438 \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0435\u0432","\u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0432\u0441\u0435 \u0440\u0435\u0433\u0438\u043E\u043D\u044B","\u0420\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0432\u0441\u0435 \u0440\u0435\u0433\u0438\u043E\u043D\u044B","\u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0432\u0441\u0435","\u0420\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0432\u0441\u0435","\u0423\u0440\u043E\u0432\u0435\u043D\u044C \u043F\u0430\u043F\u043A\u0438 {0}","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0437\u0430 \u0441\u0432\u0435\u0440\u043D\u0443\u0442\u044B\u043C\u0438 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\u0430\u043C\u0438. \u042D\u0442\u043E\u0442 \u0446\u0432\u0435\u0442 \u043D\u0435 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435\u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u044B\u043C, \u0447\u0442\u043E\u0431\u044B \u043D\u0435 \u0441\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0435 \u043D\u0438\u0436\u0435 \u0434\u0435\u043A\u043E\u0440\u0430\u0442\u0438\u0432\u043D\u044B\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B.","\u0426\u0432\u0435\u0442 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u0441\u0432\u0435\u0440\u0442\u044B\u0432\u0430\u043D\u0438\u0435\u043C \u0432\u043E \u0432\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u0435\u043C \u043F\u043E\u043B\u0435 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430."],"vs/editor/contrib/folding/foldingDecorations":["\u0417\u043D\u0430\u0447\u043E\u043A \u0434\u043B\u044F \u0440\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044B\u0445 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\u043E\u0432 \u043D\u0430 \u043F\u043E\u043B\u0435 \u0433\u043B\u0438\u0444\u043E\u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u0417\u043D\u0430\u0447\u043E\u043A \u0434\u043B\u044F \u0441\u0432\u0435\u0440\u043D\u0443\u0442\u044B\u0445 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\u043E\u0432 \u043D\u0430 \u043F\u043E\u043B\u0435 \u0433\u043B\u0438\u0444\u043E\u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430."],"vs/editor/contrib/fontZoom/fontZoom":["\u0423\u0432\u0435\u043B\u0438\u0447\u0438\u0442\u044C \u0448\u0440\u0438\u0444\u0442 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430","\u0423\u043C\u0435\u043D\u044C\u0448\u0438\u0442\u044C \u0448\u0440\u0438\u0444\u0442 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430","\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u043C\u0430\u0441\u0448\u0442\u0430\u0431 \u0448\u0440\u0438\u0444\u0442\u0430 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430"],"vs/editor/contrib/format/format":["\u0412\u043D\u0435\u0441\u0435\u043D\u0430 \u043E\u0434\u043D\u0430 \u043F\u0440\u0430\u0432\u043A\u0430 \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0432 \u0441\u0442\u0440\u043E\u043A\u0435 {0}.","\u0412\u043D\u0435\u0441\u0435\u043D\u044B \u043F\u0440\u0430\u0432\u043A\u0438 \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F ({0}) \u0432 \u0441\u0442\u0440\u043E\u043A\u0435 {1}.","\u0412\u043D\u0435\u0441\u0435\u043D\u0430 \u043E\u0434\u043D\u0430 \u043F\u0440\u0430\u0432\u043A\u0430 \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043C\u0435\u0436\u0434\u0443 \u0441\u0442\u0440\u043E\u043A\u0430\u043C\u0438 {0} \u0438 {1}.","\u0412\u043D\u0435\u0441\u0435\u043D\u044B \u043F\u0440\u0430\u0432\u043A\u0438 \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F ({0}) \u043C\u0435\u0436\u0434\u0443 \u0441\u0442\u0440\u043E\u043A\u0430\u043C\u0438 {1} \u0438 {2}."],"vs/editor/contrib/format/formatActions":["\u0424\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442","\u0424\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0439 \u0444\u0440\u0430\u0433\u043C\u0435\u043D\u0442"],"vs/editor/contrib/gotoError/gotoError":["\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u0421\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u0439 \u041F\u0440\u043E\u0431\u043B\u0435\u043C\u0435 (\u041E\u0448\u0438\u0431\u043A\u0435, \u041F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u044E, \u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0438)","\u0417\u043D\u0430\u0447\u043E\u043A \u0434\u043B\u044F \u043F\u0435\u0440\u0435\u0445\u043E\u0434\u0430 \u043A \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u043C\u0443 \u043C\u0430\u0440\u043A\u0435\u0440\u0443.","\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u041F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0435\u0439 \u041F\u0440\u043E\u0431\u043B\u0435\u043C\u0435 (\u041E\u0448\u0438\u0431\u043A\u0435, \u041F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u044E, \u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0438)","\u0417\u043D\u0430\u0447\u043E\u043A \u0434\u043B\u044F \u043F\u0435\u0440\u0435\u0445\u043E\u0434\u0430 \u043A \u043F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0435\u043C\u0443 \u043C\u0430\u0440\u043A\u0435\u0440\u0443.","\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u0439 \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0435 \u0432 \u0444\u0430\u0439\u043B\u0430\u0445 (\u043E\u0448\u0438\u0431\u043A\u0438, \u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u044F, \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F)","\u0421\u043B\u0435\u0434\u0443\u044E\u0449\u0430\u044F &&\u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0430","\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u043F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0435\u0439 \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0435 \u0432 \u0444\u0430\u0439\u043B\u0430\u0445 (\u043E\u0448\u0438\u0431\u043A\u0438, \u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u044F, \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F)","\u041F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0430\u044F &&\u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0430"],"vs/editor/contrib/gotoError/gotoErrorWidget":["\u041E\u0448\u0438\u0431\u043A\u0430","\u041F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435","\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F","\u0423\u043A\u0430\u0437\u0430\u043D\u0438\u0435","{0} \u0432 {1}. ","\u041F\u0440\u043E\u0431\u043B\u0435\u043C\u044B: {0} \u0438\u0437 {1}","\u041F\u0440\u043E\u0431\u043B\u0435\u043C\u044B: {0} \u0438\u0437 {1}","\u0426\u0432\u0435\u0442 \u043E\u0448\u0438\u0431\u043A\u0438 \u0432 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u043F\u043E \u043C\u0435\u0442\u043A\u0430\u043C \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u0426\u0432\u0435\u0442 \u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u044F \u0432 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u043F\u043E \u043C\u0435\u0442\u043A\u0430\u043C \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u0426\u0432\u0435\u0442 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E\u0433\u043E \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u0432 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u043F\u043E \u043C\u0435\u0442\u043A\u0430\u043C \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u0424\u043E\u043D \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u043F\u043E \u043C\u0435\u0442\u043A\u0430\u043C \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430."],"vs/editor/contrib/gotoSymbol/goToCommands":["\u041E\u0431\u0437\u043E\u0440","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u044F",'\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435 \u0434\u043B\u044F "{0}" \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E.',"\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u044B.","\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u044E","\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A &&\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u044E","\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435 \u0441\u0431\u043E\u043A\u0443","\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435","\u041E\u0431\u044A\u044F\u0432\u043B\u0435\u043D\u0438\u044F",'\u041E\u0431\u044A\u044F\u0432\u043B\u0435\u043D\u0438\u0435 \u0434\u043B\u044F "{0}" \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E.',"\u041E\u0431\u044A\u044F\u0432\u043B\u0435\u043D\u0438\u0435 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E","\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u043E\u0431\u044A\u044F\u0432\u043B\u0435\u043D\u0438\u044E","\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A &&\u043E\u0431\u044A\u044F\u0432\u043B\u0435\u043D\u0438\u044E",'\u041E\u0431\u044A\u044F\u0432\u043B\u0435\u043D\u0438\u0435 \u0434\u043B\u044F "{0}" \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E.',"\u041E\u0431\u044A\u044F\u0432\u043B\u0435\u043D\u0438\u0435 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E","\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u043E\u0431\u044A\u044F\u0432\u043B\u0435\u043D\u0438\u0435","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0442\u0438\u043F\u043E\u0432",'\u041D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435 \u0442\u0438\u043F\u0430 \u0434\u043B\u044F "{0}".',"\u041D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435 \u0442\u0438\u043F\u0430.","\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u044E \u0442\u0438\u043F\u0430","\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A &&\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u044E \u0442\u0438\u043F\u0430","\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435 \u0442\u0438\u043F\u0430","\u0420\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u0438",'\u041D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u0430 \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u0434\u043B\u044F "{0}".',"\u041D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u0430 \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F.","\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F\u043C","\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A &&\u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F\u043C","\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u0438",'\u0421\u0441\u044B\u043B\u043A\u0438 \u0434\u043B\u044F "{0}" \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u044B',"\u0421\u0441\u044B\u043B\u043A\u0438 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u044B","\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u0441\u0441\u044B\u043B\u043A\u0430\u043C","\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A &&\u0441\u0441\u044B\u043B\u043A\u0430\u043C","\u0421\u0441\u044B\u043B\u043A\u0438","\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0441\u0441\u044B\u043B\u043A\u0438","\u0421\u0441\u044B\u043B\u043A\u0438","\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u043B\u044E\u0431\u043E\u043C\u0443 \u0441\u0438\u043C\u0432\u043E\u043B\u0443","\u0420\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u044F",'\u041D\u0435\u0442 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432 \u0434\u043B\u044F "{0}"',"\u0421\u0441\u044B\u043B\u043A\u0438"],"vs/editor/contrib/gotoSymbol/link/goToDefinitionAtPosition":["\u0429\u0435\u043B\u043A\u043D\u0438\u0442\u0435, \u0447\u0442\u043E\u0431\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0437\u0438\u0442\u044C \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u044F ({0})."],"vs/editor/contrib/gotoSymbol/peek/referencesController":["\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430...","{0} ({1})"],"vs/editor/contrib/gotoSymbol/peek/referencesTree":["\u0421\u0441\u044B\u043B\u043E\u043A: {0}","{0} \u0441\u0441\u044B\u043B\u043A\u0430","\u0421\u0441\u044B\u043B\u043A\u0438"],"vs/editor/contrib/gotoSymbol/peek/referencesWidget":["\u043F\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u0435\u043D","\u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044E\u0442","\u0421\u0441\u044B\u043B\u043A\u0438"],"vs/editor/contrib/gotoSymbol/referencesModel":["\u0441\u0441\u044B\u043B\u043A\u0430 \u0432 {0} \u0432 \u0441\u0442\u0440\u043E\u043A\u0435 {1} \u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u0435 {2}","\u0441\u0438\u043C\u0432\u043E\u043B \u0432 {0} \u0432 \u0441\u0442\u0440\u043E\u043A\u0435 {1} \u0438 \u0441\u0442\u043E\u043B\u0431\u0446\u0435 {2}, {3}","1 \u0441\u0438\u043C\u0432\u043E\u043B \u0432 {0}, \u043F\u043E\u043B\u043D\u044B\u0439 \u043F\u0443\u0442\u044C: {1}","{0} \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0432 {1}, \u043F\u043E\u043B\u043D\u044B\u0439 \u043F\u0443\u0442\u044C: {2} ","\u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u044B","\u041E\u0431\u043D\u0430\u0440\u0443\u0436\u0435\u043D 1 \u0441\u0438\u043C\u0432\u043E\u043B \u0432 {0}","\u041E\u0431\u043D\u0430\u0440\u0443\u0436\u0435\u043D\u043E {0} \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0432 {1}","\u041E\u0431\u043D\u0430\u0440\u0443\u0436\u0435\u043D\u043E {0} \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0432 {1} \u0444\u0430\u0439\u043B\u0430\u0445"],"vs/editor/contrib/gotoSymbol/symbolNavigation":["\u0421\u0438\u043C\u0432\u043E\u043B {0} \u0438\u0437 {1}, {2} \u0434\u043B\u044F \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u0433\u043E","\u0421\u0438\u043C\u0432\u043E\u043B {0} \u0438\u0437 {1}"],"vs/editor/contrib/hover/hover":["\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u043F\u0440\u0438 \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u0438\u0438","\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u043F\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u043F\u0440\u0438 \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u0438\u0438 \u043A\u0443\u0440\u0441\u043E\u0440\u0430 \u043C\u044B\u0448\u0438"],"vs/editor/contrib/hover/markdownHoverParticipant":["\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430..."],"vs/editor/contrib/hover/markerHoverParticipant":["\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0443","\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B","\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u043D\u0430\u043B\u0438\u0447\u0438\u044F \u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0439...","\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B","\u0411\u044B\u0441\u0442\u0440\u043E\u0435 \u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435..."],"vs/editor/contrib/inPlaceReplace/inPlaceReplace":["\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C \u043F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0438\u043C \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u043C","\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u043C \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u043C"],"vs/editor/contrib/indentation/indentation":["\u041F\u0440\u0435\u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u0442\u044C \u043E\u0442\u0441\u0442\u0443\u043F \u0432 \u043F\u0440\u043E\u0431\u0435\u043B\u044B","\u041F\u0440\u0435\u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u0442\u044C \u043E\u0442\u0441\u0442\u0443\u043F \u0432 \u0448\u0430\u0433\u0438 \u0442\u0430\u0431\u0443\u043B\u044F\u0446\u0438\u0438","\u041D\u0430\u0441\u0442\u0440\u043E\u0435\u043D\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440 \u0448\u0430\u0433\u0430 \u0442\u0430\u0431\u0443\u043B\u044F\u0446\u0438\u0438","\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0440\u0430\u0437\u043C\u0435\u0440 \u0448\u0430\u0433\u0430 \u0442\u0430\u0431\u0443\u043B\u044F\u0446\u0438\u0438 \u0434\u043B\u044F \u0442\u0435\u043A\u0443\u0449\u0435\u0433\u043E \u0444\u0430\u0439\u043B\u0430","\u041E\u0442\u0441\u0442\u0443\u043F \u0441 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u043C \u0442\u0430\u0431\u0443\u043B\u044F\u0446\u0438\u0438","\u041E\u0442\u0441\u0442\u0443\u043F \u0441 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u043C \u043F\u0440\u043E\u0431\u0435\u043B\u043E\u0432","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435 \u043E\u0442\u0441\u0442\u0443\u043F\u0430 \u043E\u0442 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0433\u043E","\u041F\u043E\u0432\u0442\u043E\u0440\u043D\u043E \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043E\u0442\u0441\u0442\u0443\u043F\u044B \u0441\u0442\u0440\u043E\u043A","\u041F\u043E\u0432\u0442\u043E\u0440\u043D\u043E \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043E\u0442\u0441\u0442\u0443\u043F\u044B \u0434\u043B\u044F \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0445 \u0441\u0442\u0440\u043E\u043A"],"vs/editor/contrib/linesOperations/linesOperations":["\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443 \u0441\u0432\u0435\u0440\u0445\u0443","&&\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043D\u0430 \u0441\u0442\u0440\u043E\u043A\u0443 \u0432\u044B\u0448\u0435","\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443 \u0441\u043D\u0438\u0437\u0443","\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043D\u0430 \u0441\u0442\u0440\u043E\u043A\u0443 &&\u043D\u0438\u0436\u0435","\u0414\u0443\u0431\u043B\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0435","&&\u0414\u0443\u0431\u043B\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0435","\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443 \u0432\u0432\u0435\u0440\u0445","\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u043D\u0430 \u0441&&\u0442\u0440\u043E\u043A\u0443 \u0432\u044B\u0448\u0435","\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443 \u0432\u043D\u0438\u0437","&&\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u043D\u0430 \u0441\u0442\u0440\u043E\u043A\u0443 \u043D\u0438\u0436\u0435","\u0421\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u0430 \u0441\u0442\u0440\u043E\u043A \u043F\u043E \u0432\u043E\u0437\u0440\u0430\u0441\u0442\u0430\u043D\u0438\u044E","\u0421\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u0430 \u0441\u0442\u0440\u043E\u043A \u043F\u043E \u0443\u0431\u044B\u0432\u0430\u043D\u0438\u044E","\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043A\u043E\u043D\u0435\u0447\u043D\u044B\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u044B-\u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u0438","\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443","\u0423\u0432\u0435\u043B\u0438\u0447\u0438\u0442\u044C \u043E\u0442\u0441\u0442\u0443\u043F","\u0423\u043C\u0435\u043D\u044C\u0448\u0438\u0442\u044C \u043E\u0442\u0441\u0442\u0443\u043F","\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443 \u0432\u044B\u0448\u0435","\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443 \u043D\u0438\u0436\u0435","\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u0441\u0435 \u0441\u043B\u0435\u0432\u0430","\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u0441\u0435 \u0441\u043F\u0440\u0430\u0432\u0430","_\u041E\u0431\u044A\u0435\u0434\u0438\u043D\u0438\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0438","\u0422\u0440\u0430\u043D\u0441\u043F\u043E\u043D\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u0432\u043E\u043A\u0440\u0443\u0433 \u043A\u0443\u0440\u0441\u043E\u0440\u0430","\u041F\u0440\u0435\u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u0442\u044C \u0432 \u0432\u0435\u0440\u0445\u043D\u0438\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440","\u041F\u0440\u0435\u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u0442\u044C \u0432 \u043D\u0438\u0436\u043D\u0438\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440","\u041F\u0440\u0435\u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u0442\u044C \u0432 \u0437\u0430\u0433\u043B\u0430\u0432\u043D\u044B\u0435 \u0431\u0443\u043A\u0432\u044B","\u041F\u0440\u0435\u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u0442\u044C \u0432 \u043D\u0430\u043F\u0438\u0441\u0430\u043D\u0438\u0435 \u0441 \u043F\u043E\u0434\u0447\u0435\u0440\u043A\u0438\u0432\u0430\u043D\u0438\u044F\u043C\u0438"],"vs/editor/contrib/linkedEditing/linkedEditing":["\u0417\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u044C \u0441\u0432\u044F\u0437\u0430\u043D\u043D\u043E\u0435 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u043F\u0440\u0438 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u043C \u043F\u0435\u0440\u0435\u0438\u043C\u0435\u043D\u043E\u0432\u0430\u043D\u0438\u0438 \u0442\u0438\u043F\u0430 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u043E\u043C."],"vs/editor/contrib/links/links":["\u0412\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u043A\u043E\u043C\u0430\u043D\u0434\u0443","\u043F\u0435\u0440\u0435\u0439\u0442\u0438 \u043F\u043E \u0441\u0441\u044B\u043B\u043A\u0435","\u041A\u043D\u043E\u043F\u043A\u0430 OPTION \u0438 \u0449\u0435\u043B\u0447\u043E\u043A \u043B\u0435\u0432\u043E\u0439 \u043A\u043D\u043E\u043F\u043A\u043E\u0439 \u043C\u044B\u0448\u0438","\u041A\u043D\u043E\u043F\u043A\u0430 CTRL \u0438 \u0449\u0435\u043B\u0447\u043E\u043A \u043B\u0435\u0432\u043E\u0439 \u043A\u043D\u043E\u043F\u043A\u043E\u0439 \u043C\u044B\u0448\u0438","\u041A\u043D\u043E\u043F\u043A\u0430 OPTION \u0438 \u0449\u0435\u043B\u0447\u043E\u043A \u043B\u0435\u0432\u043E\u0439 \u043A\u043D\u043E\u043F\u043A\u043E\u0439 \u043C\u044B\u0448\u0438","\u041A\u043D\u043E\u043F\u043A\u0430 ALT \u0438 \u0449\u0435\u043B\u0447\u043E\u043A \u043B\u0435\u0432\u043E\u0439 \u043A\u043D\u043E\u043F\u043A\u043E\u0439 \u043C\u044B\u0448\u0438","\u0412\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u043A\u043E\u043C\u0430\u043D\u0434\u044B {0}","\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0442\u043A\u0440\u044B\u0442\u044C \u0441\u0441\u044B\u043B\u043A\u0443, \u0442\u0430\u043A \u043A\u0430\u043A \u043E\u043D\u0430 \u0438\u043C\u0435\u0435\u0442 \u043D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442: {0}","\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0442\u043A\u0440\u044B\u0442\u044C \u0441\u0441\u044B\u043B\u043A\u0443, \u0443 \u043D\u0435\u0435 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0446\u0435\u043B\u0435\u0432\u043E\u0439 \u043E\u0431\u044A\u0435\u043A\u0442.","\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0441\u0441\u044B\u043B\u043A\u0443"],"vs/editor/contrib/message/messageController":["\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044F \u043B\u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u0432\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u0435\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435","\u041D\u0435 \u0443\u0434\u0430\u0435\u0442\u0441\u044F \u0432\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u0442\u043E\u043B\u044C\u043A\u043E \u0434\u043B\u044F \u0447\u0442\u0435\u043D\u0438\u044F"],"vs/editor/contrib/multicursor/multicursor":["\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u0443\u0440\u0441\u043E\u0440 \u0432\u044B\u0448\u0435","\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u0443\u0440\u0441\u043E\u0440 &&\u0432\u044B\u0448\u0435","\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u0443\u0440\u0441\u043E\u0440 \u043D\u0438\u0436\u0435","\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u0443\u0440\u0441\u043E\u0440 &&\u043D\u0438\u0436\u0435","\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u0443\u0440\u0441\u043E\u0440\u044B \u043A \u043E\u043A\u043E\u043D\u0447\u0430\u043D\u0438\u044F\u043C \u0441\u0442\u0440\u043E\u043A","\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u0443\u0440\u0441\u043E\u0440\u044B \u0432 &&\u043E\u043A\u043E\u043D\u0447\u0430\u043D\u0438\u044F \u0441\u0442\u0440\u043E\u043A","\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u0443\u0440\u0441\u043E\u0440\u044B \u043D\u0438\u0436\u0435","\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u0443\u0440\u0441\u043E\u0440\u044B \u0432\u044B\u0448\u0435","\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u0435 \u0432 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043D\u043E\u0435 \u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0435","\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C &&\u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u0435 \u0432\u0445\u043E\u0436\u0434\u0435\u043D\u0438\u0435","\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0439 \u0444\u0440\u0430\u0433\u043C\u0435\u043D\u0442 \u0432 \u043F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0435\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043D\u043E\u0435 \u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0435","\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C &&\u043F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0435\u0435 \u0432\u0445\u043E\u0436\u0434\u0435\u043D\u0438\u0435","\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0435 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u0435 \u0432 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043D\u043E\u0435 \u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0435","\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0439 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0439 \u0444\u0440\u0430\u0433\u043C\u0435\u043D\u0442 \u0432 \u043F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0435\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043D\u043E\u0435 \u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0435","\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0432\u0441\u0435 \u0432\u0445\u043E\u0436\u0434\u0435\u043D\u0438\u044F \u043D\u0430\u0439\u0434\u0435\u043D\u043D\u044B\u0445 \u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0439","\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0432\u0441\u0435 &&\u0432\u0445\u043E\u0436\u0434\u0435\u043D\u0438\u044F","\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0432\u0441\u0435 \u0432\u0445\u043E\u0436\u0434\u0435\u043D\u0438\u044F"],"vs/editor/contrib/parameterHints/parameterHints":["\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043F\u043E\u0434\u0441\u043A\u0430\u0437\u043A\u0438 \u043A \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0430\u043C"],"vs/editor/contrib/parameterHints/parameterHintsWidget":["\u0417\u043D\u0430\u0447\u043E\u043A \u0434\u043B\u044F \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F \u043F\u043E\u0434\u0441\u043A\u0430\u0437\u043A\u0438 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u0433\u043E \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0430.","\u0417\u043D\u0430\u0447\u043E\u043A \u0434\u043B\u044F \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F \u043F\u043E\u0434\u0441\u043A\u0430\u0437\u043A\u0438 \u043F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0435\u0433\u043E \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0430.","{0}, \u0443\u043A\u0430\u0437\u0430\u043D\u0438\u0435"],"vs/editor/contrib/peekView/peekView":["\u0417\u0430\u043A\u0440\u044B\u0442\u044C","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u043E\u0431\u043B\u0430\u0441\u0442\u0438 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430 \u0431\u044B\u0441\u0442\u0440\u043E\u0433\u043E \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u0426\u0432\u0435\u0442 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430 \u0431\u044B\u0441\u0442\u0440\u043E\u0433\u043E \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u0426\u0432\u0435\u0442 \u0441\u0432\u0435\u0434\u0435\u043D\u0438\u0439 \u043E \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0435 \u0431\u044B\u0441\u0442\u0440\u043E\u0433\u043E \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446 \u0431\u044B\u0441\u0442\u0440\u043E\u0433\u043E \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430 \u0438 \u043C\u0430\u0441\u0441\u0438\u0432\u0430.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0432 \u0441\u043F\u0438\u0441\u043A\u0435 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u0431\u044B\u0441\u0442\u0440\u043E\u0433\u043E \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0443\u0437\u043B\u043E\u0432 \u0441\u0442\u0440\u043E\u043A\u0438 \u0432 \u0441\u043F\u0438\u0441\u043A\u0435 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432 \u0431\u044B\u0441\u0442\u0440\u043E\u0433\u043E \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0443\u0437\u043B\u043E\u0432 \u0444\u0430\u0439\u043B\u0430 \u0432 \u0441\u043F\u0438\u0441\u043A\u0435 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432 \u0431\u044B\u0441\u0442\u0440\u043E\u0433\u043E \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0439 \u0437\u0430\u043F\u0438\u0441\u0438 \u0432 \u0441\u043F\u0438\u0441\u043A\u0435 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432 \u0431\u044B\u0441\u0442\u0440\u043E\u0433\u043E \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0439 \u0437\u0430\u043F\u0438\u0441\u0438 \u0432 \u0441\u043F\u0438\u0441\u043A\u0435 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432 \u0431\u044B\u0441\u0442\u0440\u043E\u0433\u043E \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0431\u044B\u0441\u0442\u0440\u043E\u0433\u043E \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u043F\u043E\u043B\u044F \u0432 \u043E\u043A\u043D\u0435 \u0431\u044B\u0441\u0442\u0440\u043E\u0433\u043E \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u0426\u0432\u0435\u0442 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0439 \u0432 \u0441\u043F\u0438\u0441\u043A\u0435 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432 \u0431\u044B\u0441\u0442\u0440\u043E\u0433\u043E \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u0426\u0432\u0435\u0442 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0439 \u0432 \u0431\u044B\u0441\u0442\u0440\u043E\u043C \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435.","\u0413\u0440\u0430\u043D\u0438\u0446\u0430 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0439 \u0432 \u0431\u044B\u0441\u0442\u0440\u043E\u043C \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435."],"vs/editor/contrib/quickAccess/gotoLineQuickAccess":["\u0427\u0442\u043E\u0431\u044B \u043F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u0441\u0442\u0440\u043E\u043A\u0435, \u0441\u043D\u0430\u0447\u0430\u043B\u0430 \u043E\u0442\u043A\u0440\u043E\u0439\u0442\u0435 \u0442\u0435\u043A\u0441\u0442\u043E\u0432\u044B\u0439 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440.","\u041F\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043A \u0441\u0442\u0440\u043E\u043A\u0435 {0} \u0438 \u0441\u0442\u043E\u043B\u0431\u0446\u0443 {1}.","\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u0441\u0442\u0440\u043E\u043A\u0435 {0}.","\u0422\u0435\u043A\u0443\u0449\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: {0}, \u0441\u0438\u043C\u0432\u043E\u043B: {1}. \u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043D\u043E\u043C\u0435\u0440 \u0441\u0442\u0440\u043E\u043A\u0438 \u043C\u0435\u0436\u0434\u0443 1 \u0438 {2} \u0434\u043B\u044F \u043F\u0435\u0440\u0435\u0445\u043E\u0434\u0430.","\u0422\u0435\u043A\u0443\u0449\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: {0}, \u0441\u0438\u043C\u0432\u043E\u043B: {1}. \u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043D\u043E\u043C\u0435\u0440 \u0441\u0442\u0440\u043E\u043A\u0438 \u0434\u043B\u044F \u043F\u0435\u0440\u0435\u0445\u043E\u0434\u0430."],"vs/editor/contrib/quickAccess/gotoSymbolQuickAccess":["\u0427\u0442\u043E\u0431\u044B \u043F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u0441\u0438\u043C\u0432\u043E\u043B\u0443, \u0441\u043D\u0430\u0447\u0430\u043B\u0430 \u043E\u0442\u043A\u0440\u043E\u0439\u0442\u0435 \u0442\u0435\u043A\u0441\u0442\u043E\u0432\u044B\u0439 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0441 \u0441\u0438\u043C\u0432\u043E\u043B\u044C\u043D\u043E\u0439 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0435\u0439.","\u0410\u043A\u0442\u0438\u0432\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442\u043E\u0432\u044B\u0439 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043D\u0435 \u043F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442 \u0441\u0438\u043C\u0432\u043E\u043B\u044C\u043D\u0443\u044E \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044E.","\u041D\u0435\u0442 \u0441\u043E\u0432\u043F\u0430\u0434\u0430\u044E\u0449\u0438\u0445 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430","\u041D\u0435\u0442 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430","\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0441\u0431\u043E\u043A\u0443","\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432\u043D\u0438\u0437\u0443","\u0441\u0438\u043C\u0432\u043E\u043B\u044B ({0})","\u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430 ({0})","\u043C\u0435\u0442\u043E\u0434\u044B ({0})","\u0444\u0443\u043D\u043A\u0446\u0438\u0438 ({0})","\u043A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440\u044B ({0})","\u043F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u044B\u0435 ({0})","\u043A\u043B\u0430\u0441\u0441\u044B ({0})","\u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u044B ({0})","\u0441\u043E\u0431\u044B\u0442\u0438\u044F ({0})","\u043E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u044B ({0})","\u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044B ({0})","\u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u0430 \u0438\u043C\u0435\u043D ({0})","\u043F\u0430\u043A\u0435\u0442\u044B ({0})","\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0442\u0438\u043F\u0430 ({0})","\u043C\u043E\u0434\u0443\u043B\u0438 ({0})","\u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430 ({0})","\u043F\u0435\u0440\u0435\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u044F ({0})","\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 \u043F\u0435\u0440\u0435\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u044F ({0})","\u0441\u0442\u0440\u043E\u043A\u0438 ({0})","\u0444\u0430\u0439\u043B\u044B ({0})","\u043C\u0430\u0441\u0441\u0438\u0432\u044B ({0})","\u0447\u0438\u0441\u043B\u0430 ({0})","\u043B\u043E\u0433\u0438\u0447\u0435\u0441\u043A\u0438\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F ({0})","\u043E\u0431\u044A\u0435\u043A\u0442\u044B ({0})","\u043A\u043B\u044E\u0447\u0438 ({0})","\u043F\u043E\u043B\u044F ({0})","\u043A\u043E\u043D\u0441\u0442\u0430\u043D\u0442\u044B ({0})"],"vs/editor/contrib/rename/rename":["\u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044E\u0442.","\u041F\u0440\u043E\u0438\u0437\u043E\u0448\u043B\u0430 \u043D\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043D\u0430\u044F \u043E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0438 \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u043F\u043E\u0441\u043B\u0435 \u043F\u0435\u0440\u0435\u0438\u043C\u0435\u043D\u043E\u0432\u0430\u043D\u0438\u044F",'\u041F\u0435\u0440\u0435\u0438\u043C\u0435\u043D\u043E\u0432\u0430\u043D\u0438\u0435 "{0}"',"\u041F\u0435\u0440\u0435\u0438\u043C\u0435\u043D\u043E\u0432\u0430\u043D\u0438\u0435 {0}","\xAB{0}\xBB \u0443\u0441\u043F\u0435\u0448\u043D\u043E \u043F\u0435\u0440\u0435\u0438\u043C\u0435\u043D\u043E\u0432\u0430\u043D \u0432 \xAB{1}\xBB. \u0421\u0432\u043E\u0434\u043A\u0430: {2}","\u041E\u043F\u0435\u0440\u0430\u0446\u0438\u0438 \u043F\u0435\u0440\u0435\u0438\u043C\u0435\u043D\u043E\u0432\u0430\u043D\u0438\u044F \u043D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C \u043F\u0440\u0430\u0432\u043A\u0438","\u041E\u043F\u0435\u0440\u0430\u0446\u0438\u0438 \u043F\u0435\u0440\u0435\u0438\u043C\u0435\u043D\u043E\u0432\u0430\u043D\u0438\u044F \u043D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0432\u044B\u0447\u0438\u0441\u043B\u0438\u0442\u044C \u043F\u0440\u0430\u0432\u043A\u0438","\u041F\u0435\u0440\u0435\u0438\u043C\u0435\u043D\u043E\u0432\u0430\u0442\u044C \u0441\u0438\u043C\u0432\u043E\u043B","\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C/\u043E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u044C \u043F\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0433\u043E \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0430 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u043F\u0435\u0440\u0435\u0434 \u043F\u0435\u0440\u0435\u0438\u043C\u0435\u043D\u043E\u0432\u0430\u043D\u0438\u0435\u043C"],"vs/editor/contrib/rename/renameInputField":["\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043D\u043E\u0432\u043E\u0435 \u0438\u043C\u044F \u0434\u043B\u044F \u0432\u0445\u043E\u0434\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445 \u0438 \u043D\u0430\u0436\u043C\u0438\u0442\u0435 \u043A\u043B\u0430\u0432\u0438\u0448\u0443 \u0412\u0412\u041E\u0414 \u0434\u043B\u044F \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u044F.","\u041D\u0430\u0436\u043C\u0438\u0442\u0435 {0} \u0434\u043B\u044F \u043F\u0435\u0440\u0435\u0438\u043C\u0435\u043D\u043E\u0432\u0430\u043D\u0438\u044F, {1} \u0434\u043B\u044F \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0430."],"vs/editor/contrib/smartSelect/smartSelect":["\u0420\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0439 \u0444\u0440\u0430\u0433\u043C\u0435\u043D\u0442","&&\u0420\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u0435","\u0423\u043C\u0435\u043D\u044C\u0448\u0438\u0442\u044C \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0439 \u0444\u0440\u0430\u0433\u043C\u0435\u043D\u0442","&&\u0421\u0436\u0430\u0442\u044C \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u0435"],"vs/editor/contrib/snippet/snippetVariables":["\u0432\u043E\u0441\u043A\u0440\u0435\u0441\u0435\u043D\u044C\u0435","\u043F\u043E\u043D\u0435\u0434\u0435\u043B\u044C\u043D\u0438\u043A","\u0432\u0442\u043E\u0440\u043D\u0438\u043A","\u0441\u0440\u0435\u0434\u0430","\u0447\u0435\u0442\u0432\u0435\u0440\u0433","\u043F\u044F\u0442\u043D\u0438\u0446\u0430","\u0441\u0443\u0431\u0431\u043E\u0442\u0430","\u0412\u0441","\u041F\u043D","\u0412\u0442","\u0421\u0440","\u0427\u0442","\u041F\u0442","\u0421\u0431","\u042F\u043D\u0432\u0430\u0440\u044C","\u0424\u0435\u0432\u0440\u0430\u043B\u044C","\u041C\u0430\u0440\u0442","\u0410\u043F\u0440\u0435\u043B\u044C","\u041C\u0430\u0439","\u0418\u044E\u043D\u044C","\u0418\u044E\u043B\u044C","\u0410\u0432\u0433\u0443\u0441\u0442","\u0421\u0435\u043D\u0442\u044F\u0431\u0440\u044C","\u041E\u043A\u0442\u044F\u0431\u0440\u044C","\u041D\u043E\u044F\u0431\u0440\u044C","\u0414\u0435\u043A\u0430\u0431\u0440\u044C","\u042F\u043D\u0432","\u0424\u0435\u0432","\u041C\u0430\u0440","\u0410\u043F\u0440","\u041C\u0430\u0439","\u0418\u044E\u043D","\u0418\u044E\u043B","\u0410\u0432\u0433","\u0421\u0435\u043D","\u041E\u043A\u0442","\u041D\u043E\u044F","\u0414\u0435\u043A"],"vs/editor/contrib/suggest/suggestController":['\u041F\u0440\u0438\u043D\u044F\u0442\u0438\u0435 "{0}" \u043F\u0440\u0438\u0432\u0435\u043B\u043E \u043A \u0432\u043D\u0435\u0441\u0435\u043D\u0438\u044E \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0445 \u043F\u0440\u0430\u0432\u043E\u043A ({1})',"\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0435","\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C","\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C","\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C","\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C","\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C","\u043F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u043C\u0435\u043D\u044C\u0448\u0435","\u043F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0431\u043E\u043B\u044C\u0448\u0435","\u0421\u0431\u0440\u043E\u0441 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0440\u0430\u0437\u043C\u0435\u0440\u0430 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F"],"vs/editor/contrib/suggest/suggestWidget":["\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u043F\u043E\u0434\u0441\u043A\u0430\u0437\u043E\u043A.","\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446 \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u043F\u043E\u0434\u0441\u043A\u0430\u0437\u043E\u043A.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0424\u043E\u043D\u043E\u0432\u044B\u0439 \u0446\u0432\u0435\u0442 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0439 \u0437\u0430\u043F\u0438\u0441\u0438 \u0432 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044F \u0432 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430...","\u041F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044E\u0442.","{0}, \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u044B: {1}","\u041F\u0440\u0435\u0434\u043B\u043E\u0436\u0438\u0442\u044C"],"vs/editor/contrib/suggest/suggestWidgetDetails":["\u0417\u0430\u043A\u0440\u044B\u0442\u044C","\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430..."],"vs/editor/contrib/suggest/suggestWidgetRenderer":["\u0417\u043D\u0430\u0447\u043E\u043A \u0434\u043B\u044F \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u044F \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0445 \u0441\u0432\u0435\u0434\u0435\u043D\u0438\u0439 \u0432 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u041F\u043E\u0434\u0440\u043E\u0431\u043D\u0435\u0435"],"vs/editor/contrib/suggest/suggestWidgetStatus":["{0} ({1})"],"vs/editor/contrib/symbolIcons/symbolIcons":["\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u043C\u0430\u0441\u0441\u0438\u0432\u0430. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u043B\u043E\u0433\u0438\u0447\u0435\u0441\u043A\u0438\u0445 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u043A\u043B\u0430\u0441\u0441\u0430. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0446\u0432\u0435\u0442\u0430. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u043A\u043E\u043D\u0441\u0442\u0430\u043D\u0442\u044B. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u043A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440\u0430. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u043F\u0435\u0440\u0435\u0447\u0438\u0441\u043B\u0438\u0442\u0435\u043B\u044F. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0447\u043B\u0435\u043D\u0430 \u043F\u0435\u0440\u0435\u0447\u0438\u0441\u043B\u0438\u0442\u0435\u043B\u044F. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0441\u043E\u0431\u044B\u0442\u0438\u044F. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u043F\u043E\u043B\u044F. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0444\u0430\u0439\u043B\u0430. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u043F\u0430\u043F\u043A\u0438. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0444\u0443\u043D\u043A\u0446\u0438\u0438. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u043A\u043B\u044E\u0447\u0430. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u043A\u043B\u044E\u0447\u0435\u0432\u043E\u0433\u043E \u0441\u043B\u043E\u0432\u0430. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u043C\u0435\u0442\u043E\u0434\u0430. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u043C\u043E\u0434\u0443\u043B\u044F. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u0430 \u0438\u043C\u0435\u043D. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 NULL. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0447\u0438\u0441\u043B\u0430. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u043E\u0431\u044A\u0435\u043A\u0442\u0430. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u043E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u0430. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u043F\u0430\u043A\u0435\u0442\u0430. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0441\u0441\u044B\u043B\u043A\u0438. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0444\u0440\u0430\u0433\u043C\u0435\u043D\u0442\u0430 \u043A\u043E\u0434\u0430. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0441\u0442\u0440\u043E\u043A\u0438. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u044B. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0442\u0435\u043A\u0441\u0442\u0430. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0442\u0438\u043F\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0435\u0434\u0438\u043D\u0438\u0446. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u043F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u043E\u0439. \u042D\u0442\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435, \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439."],"vs/editor/contrib/toggleTabFocusMode/toggleTabFocusMode":["\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 \u043A\u043B\u0430\u0432\u0438\u0448\u0438 TAB \u043F\u0435\u0440\u0435\u043C\u0435\u0449\u0430\u0435\u0442 \u0444\u043E\u043A\u0443\u0441.","\u041F\u0440\u0438 \u043D\u0430\u0436\u0430\u0442\u0438\u0438 \u043A\u043B\u0430\u0432\u0438\u0448\u0438 TAB \u0444\u043E\u043A\u0443\u0441 \u043F\u0435\u0440\u0435\u0439\u0434\u0435\u0442 \u043D\u0430 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u043C\u043E\u0436\u0435\u0442 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u0444\u043E\u043A\u0443\u0441","\u0422\u0435\u043F\u0435\u0440\u044C \u043F\u0440\u0438 \u043D\u0430\u0436\u0430\u0442\u0438\u0438 \u043A\u043B\u0430\u0432\u0438\u0448\u0438 TAB \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0442\u0430\u0432\u043B\u0435\u043D \u0441\u0438\u043C\u0432\u043E\u043B \u0442\u0430\u0431\u0443\u043B\u044F\u0446\u0438\u0438"],"vs/editor/contrib/tokenization/tokenization":["\u0420\u0430\u0437\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A: \u043F\u0440\u0438\u043D\u0443\u0434\u0438\u0442\u0435\u043B\u044C\u043D\u0430\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u043D\u0430\u044F \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0430 \u0442\u043E\u043A\u0435\u043D\u043E\u0432"],"vs/editor/contrib/unusualLineTerminators/unusualLineTerminators":["\u041D\u0435\u043E\u0431\u044B\u0447\u043D\u044B\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u044F \u0441\u0442\u0440\u043E\u043A\u0438","\u041E\u0431\u043D\u0430\u0440\u0443\u0436\u0435\u043D\u044B \u043D\u0435\u043E\u0431\u044B\u0447\u043D\u044B\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u044F \u0441\u0442\u0440\u043E\u043A\u0438",`\u042D\u0442\u043E\u0442 \u0444\u0430\u0439\u043B \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u0442 \u043E\u0434\u0438\u043D \u0438\u043B\u0438 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u043D\u0435\u043E\u0431\u044B\u0447\u043D\u044B\u0445 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u044F \u0441\u0442\u0440\u043E\u043A\u0438, \u0442\u0430\u043A\u0438\u0445 \u043A\u0430\u043A \u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u0441\u0442\u0440\u043E\u043A (LS) \u0438\u043B\u0438 \u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u0430\u0431\u0437\u0430\u0446\u0435\u0432 (PS).\r +\r +\u0420\u0435\u043A\u043E\u043C\u0435\u043D\u0434\u0443\u0435\u0442\u0441\u044F \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u0438\u0445 \u0438\u0437 \u0444\u0430\u0439\u043B\u0430. \u0423\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u044D\u0442\u0438\u0445 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u043C\u043E\u0436\u043D\u043E \u043D\u0430\u0441\u0442\u0440\u043E\u0438\u0442\u044C \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0430 "editor.unusualLineTerminators".`,"\u0418\u0441\u043F\u0440\u0430\u0432\u0438\u0442\u044C \u044D\u0442\u043E\u0442 \u0444\u0430\u0439\u043B","\u0418\u0433\u043D\u043E\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0443 \u0434\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u0444\u0430\u0439\u043B\u0430"],"vs/editor/contrib/wordHighlighter/wordHighlighter":["\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0441\u0438\u043C\u0432\u043E\u043B\u0430 \u043F\u0440\u0438 \u0434\u043E\u0441\u0442\u0443\u043F\u0435 \u043D\u0430 \u0447\u0442\u0435\u043D\u0438\u0435, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, \u043F\u0440\u0438 \u0447\u0442\u0435\u043D\u0438\u0438 \u043F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u043E\u0439. \u0426\u0432\u0435\u0442 \u043D\u0435 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435\u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u044B\u043C, \u0447\u0442\u043E\u0431\u044B \u043D\u0435 \u0441\u043A\u0440\u044B\u0442\u044C \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0435 \u043D\u0438\u0436\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0434\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u0430 \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u0434\u043E\u0441\u0442\u0443\u043F\u0430 \u043D\u0430 \u0437\u0430\u043F\u0438\u0441\u044C, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440 \u043F\u0440\u0438 \u0437\u0430\u043F\u0438\u0441\u0438 \u0432 \u043F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u0443\u044E. \u0426\u0432\u0435\u0442 \u043D\u0435 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435\u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u044B\u043C, \u0447\u0442\u043E\u0431\u044B \u043D\u0435 \u0441\u043A\u0440\u044B\u0442\u044C \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0435 \u043D\u0438\u0436\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F.","\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446\u044B \u0441\u0438\u043C\u0432\u043E\u043B\u0430 \u043F\u0440\u0438 \u0434\u043E\u0441\u0442\u0443\u043F\u0435 \u043D\u0430 \u0447\u0442\u0435\u043D\u0438\u0435, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, \u043F\u0440\u0438 \u0441\u0447\u0438\u0442\u044B\u0432\u0430\u043D\u0438\u0438 \u043F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u043E\u0439.","\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446\u044B \u0441\u0438\u043C\u0432\u043E\u043B\u0430 \u043F\u0440\u0438 \u0434\u043E\u0441\u0442\u0443\u043F\u0435 \u043D\u0430 \u0437\u0430\u043F\u0438\u0441\u044C, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, \u043F\u0440\u0438 \u0437\u0430\u043F\u0438\u0441\u0438 \u043F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u043E\u0439. ","\u0426\u0432\u0435\u0442 \u043C\u0430\u0440\u043A\u0435\u0440\u0430 \u043E\u0431\u0437\u043E\u0440\u043D\u043E\u0439 \u043B\u0438\u043D\u0435\u0439\u043A\u0438 \u0434\u043B\u044F \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432. \u042D\u0442\u043E\u0442 \u0446\u0432\u0435\u0442 \u043D\u0435 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435\u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u044B\u043C, \u0447\u0442\u043E\u0431\u044B \u043D\u0435 \u0441\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0435 \u043D\u0438\u0436\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F.","\u0426\u0432\u0435\u0442 \u043C\u0430\u0440\u043A\u0435\u0440\u0430 \u043E\u0431\u0437\u043E\u0440\u043D\u043E\u0439 \u043B\u0438\u043D\u0435\u0439\u043A\u0438 \u0434\u043B\u044F \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0434\u043E\u0441\u0442\u0443\u043F\u0430 \u043D\u0430 \u0437\u0430\u043F\u0438\u0441\u044C. \u0426\u0432\u0435\u0442 \u043D\u0435 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435\u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u044B\u043C, \u0447\u0442\u043E\u0431\u044B \u043D\u0435 \u0441\u043A\u0440\u044B\u0442\u044C \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0435 \u043D\u0438\u0436\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F.","\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u043C\u0443 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044E \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432","\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u043F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0435\u043C\u0443 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044E \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432","\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0438\u043B\u0438 \u043E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432"],"vs/editor/contrib/wordOperations/wordOperations":["\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0441\u043B\u043E\u0432\u043E"],"vs/platform/actions/browser/menuEntryActionViewItem":["{0} ({1})"],"vs/platform/configuration/common/configurationRegistry":["\u041F\u0435\u0440\u0435\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u044F\u0437\u044B\u043A\u0430 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E","\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430, \u043F\u0435\u0440\u0435\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u043C\u044B\u0445 \u0434\u043B\u044F \u044F\u0437\u044B\u043A\u0430.","\u042D\u0442\u043E\u0442 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u043D\u0435 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0443 \u0434\u043B\u044F \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u044B\u0445 \u044F\u0437\u044B\u043A\u043E\u0432.","\u041D\u0435 \u0443\u0434\u0430\u0435\u0442\u0441\u044F \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u0443\u0441\u0442\u043E\u0435 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u043E",`\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C "{0}". \u041E\u043D\u043E \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0448\u0430\u0431\u043B\u043E\u043D\u0443 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430 '\\\\[.*\\\\]$' \u0434\u043B\u044F \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430, \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u043C\u044B\u0445 \u044F\u0437\u044B\u043A\u043E\u043C. \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 configurationDefaults.`,'\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C "{0}". \u042D\u0442\u043E \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u043E \u0443\u0436\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u043E.'],"vs/platform/contextkey/browser/contextKeyService":["\u041A\u043E\u043C\u0430\u043D\u0434\u0430, \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u044E\u0449\u0430\u044F \u0441\u0432\u0435\u0434\u0435\u043D\u0438\u044F \u043E \u043A\u043B\u044E\u0447\u0430\u0445 \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442\u0430"],"vs/platform/contextkey/common/contextkeys":["\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u043B\u0438 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u043E\u043D\u043D\u0430\u044F \u0441\u0438\u0441\u0442\u0435\u043C\u0430 Windows"],"vs/platform/keybinding/common/abstractKeybindingService":["\u0411\u044B\u043B\u0430 \u043D\u0430\u0436\u0430\u0442\u0430 \u043A\u043B\u0430\u0432\u0438\u0448\u0430 {0}. \u041E\u0436\u0438\u0434\u0430\u043D\u0438\u0435 \u043D\u0430\u0436\u0430\u0442\u0438\u044F \u0432\u0442\u043E\u0440\u043E\u0439 \u043A\u043B\u0430\u0432\u0438\u0448\u0438 \u0441\u043E\u0447\u0435\u0442\u0430\u043D\u0438\u044F...","\u0421\u043E\u0447\u0435\u0442\u0430\u043D\u0438\u0435 \u043A\u043B\u0430\u0432\u0438\u0448 ({0} \u0438 {1}) \u043D\u0435 \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u043A\u043E\u043C\u0430\u043D\u0434\u043E\u0439."],"vs/platform/list/browser/listService":["\u0420\u0430\u0431\u043E\u0447\u0435\u0435 \u043C\u0435\u0441\u0442\u043E","\u0421\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043A\u043B\u0430\u0432\u0438\u0448\u0435 CTRL \u0432 Windows \u0438 Linux \u0438 \u043A\u043B\u0430\u0432\u0438\u0448\u0435 COMMAND \u0432 macOS.","\u0421\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043A\u043B\u0430\u0432\u0438\u0448\u0435 ALT \u0432 Windows \u0438 Linux \u0438 \u043A\u043B\u0430\u0432\u0438\u0448\u0435 OPTION \u0432 macOS.",'\u041C\u043E\u0434\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u0434\u043B\u044F \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432 \u0432 \u0434\u0435\u0440\u0435\u0432\u044C\u044F\u0445 \u0438 \u0441\u043F\u0438\u0441\u043A\u0430\u0445 \u0432 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u043C\u043D\u043E\u0436\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u0433\u043E \u0432\u044B\u0431\u043E\u0440\u0430 \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u043C\u044B\u0448\u0438 (\u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, \u0432 \u043F\u0440\u043E\u0432\u043E\u0434\u043D\u0438\u043A\u0435, \u0432 \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0445 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430\u0445 \u0438 \u0432 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0438 scm). \u0416\u0435\u0441\u0442\u044B \u043C\u044B\u0448\u0438 "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0441\u0431\u043E\u043A\u0443" (\u0435\u0441\u043B\u0438 \u043E\u043D\u0438 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044E\u0442\u0441\u044F) \u0431\u0443\u0434\u0443\u0442 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u044B \u0442\u0430\u043A\u0438\u043C \u043E\u0431\u0440\u0430\u0437\u043E\u043C, \u0447\u0442\u043E\u0431\u044B \u043E\u043D\u0438 \u043D\u0435 \u043A\u043E\u043D\u0444\u043B\u0438\u043A\u0442\u043E\u0432\u0430\u043B\u0438 \u0441 \u043C\u043E\u0434\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440\u043E\u043C \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 \u043C\u043D\u043E\u0436\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u0433\u043E \u0432\u044B\u0431\u043E\u0440\u0430.',"\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0442\u0435\u043C, \u043A\u0430\u043A \u043E\u0442\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u0432 \u0434\u0435\u0440\u0435\u0432\u044C\u044F\u0445 \u0438 \u0441\u043F\u0438\u0441\u043A\u0430\u0445 \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u043C\u044B\u0448\u0438 (\u0435\u0441\u043B\u0438 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044F). \u041E\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043D\u0438\u043C\u0430\u043D\u0438\u0435, \u0447\u0442\u043E \u044D\u0442\u043E\u0442 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u043C\u043E\u0436\u0435\u0442 \u0438\u0433\u043D\u043E\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u0432 \u043D\u0435\u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u0434\u0435\u0440\u0435\u0432\u044C\u044F\u0445 \u0438 \u0441\u043F\u0438\u0441\u043A\u0430\u0445, \u0435\u0441\u043B\u0438 \u043E\u043D \u043D\u0435 \u043F\u0440\u0438\u043C\u0435\u043D\u044F\u0435\u0442\u0441\u044F \u043A \u043D\u0438\u043C.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044E\u0442 \u043B\u0438 \u0433\u043E\u0440\u0438\u0437\u043E\u043D\u0442\u0430\u043B\u044C\u043D\u0443\u044E \u043F\u0440\u043E\u043A\u0440\u0443\u0442\u043A\u0443 \u0441\u043F\u0438\u0441\u043A\u0438 \u0438 \u0434\u0435\u0440\u0435\u0432\u044C\u044F \u043D\u0430 \u0440\u0430\u0431\u043E\u0447\u0435\u043C \u043C\u0435\u0441\u0442\u0435. \u041F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435! \u0412\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 \u044D\u0442\u043E\u0433\u043E \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0430 \u043C\u043E\u0436\u0435\u0442 \u043F\u043E\u0432\u043B\u0438\u044F\u0442\u044C \u043D\u0430 \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442 \u043E\u0442\u0441\u0442\u0443\u043F \u0434\u043B\u044F \u0434\u0435\u0440\u0435\u0432\u0430 \u0432 \u043F\u0438\u043A\u0441\u0435\u043B\u044F\u0445.","\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u043D\u0443\u0436\u043D\u043E \u043B\u0438 \u0432 \u0434\u0435\u0440\u0435\u0432\u0435 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u043D\u0430\u043F\u0440\u0430\u0432\u043B\u044F\u044E\u0449\u0438\u0435 \u043E\u0442\u0441\u0442\u0443\u043F\u0430.","\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0442\u0435\u043C, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u043B\u0438 \u043F\u043B\u0430\u0432\u043D\u0430\u044F \u043F\u0440\u043E\u043A\u0440\u0443\u0442\u043A\u0430 \u0434\u043B\u044F \u0441\u043F\u0438\u0441\u043A\u043E\u0432 \u0438 \u0434\u0435\u0440\u0435\u0432\u044C\u0435\u0432.","\u041F\u0440\u043E \u043F\u0440\u043E\u0441\u0442\u043E\u0439 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0441 \u043A\u043B\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044B \u0432\u044B\u0431\u0438\u0440\u0430\u044E\u0442\u0441\u044F \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B, \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044E\u0449\u0438\u0435 \u0432\u0432\u043E\u0434\u0438\u043C\u044B\u043C \u0441 \u043A\u043B\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044B \u0434\u0430\u043D\u043D\u044B\u043C. \u0421\u043E\u043F\u043E\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u043E\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u043E \u043F\u0440\u0435\u0444\u0438\u043A\u0441\u0430\u043C.","\u0424\u0443\u043D\u043A\u0446\u0438\u044F \u043F\u043E\u0434\u0441\u0432\u0435\u0442\u043A\u0438 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0441 \u043A\u043B\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044B \u0432\u044B\u0434\u0435\u043B\u044F\u0435\u0442 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B, \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044E\u0449\u0438\u0435 \u0432\u0432\u043E\u0434\u0438\u043C\u044B\u043C \u0441 \u043A\u043B\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044B \u0434\u0430\u043D\u043D\u044B\u043C. \u041F\u0440\u0438 \u0434\u0430\u043B\u044C\u043D\u0435\u0439\u0448\u0435\u0439 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0432\u0432\u0435\u0440\u0445 \u0438 \u0432\u043D\u0438\u0437 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F \u043E\u0431\u0445\u043E\u0434 \u0442\u043E\u043B\u044C\u043A\u043E \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0445 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432.","\u0424\u0438\u043B\u044C\u0442\u0440 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0441 \u043A\u043B\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044B \u043F\u043E\u0437\u0432\u043E\u043B\u044F\u0435\u0442 \u043E\u0442\u0444\u0438\u043B\u044C\u0442\u0440\u043E\u0432\u0430\u0442\u044C \u0438 \u0441\u043A\u0440\u044B\u0442\u044C \u0432\u0441\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B, \u043D\u0435 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044E\u0449\u0438\u0435 \u0432\u0432\u043E\u0434\u0438\u043C\u044B\u043C \u0441 \u043A\u043B\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044B \u0434\u0430\u043D\u043D\u044B\u043C.","\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0441\u0442\u0438\u043B\u0435\u043C \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0441 \u043A\u043B\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044B \u0434\u043B\u044F \u0441\u043F\u0438\u0441\u043A\u043E\u0432 \u0438 \u0434\u0435\u0440\u0435\u0432\u044C\u0435\u0432 \u0432 Workbench. \u0414\u043E\u0441\u0442\u0443\u043F\u0435\u043D \u043F\u0440\u043E\u0441\u0442\u043E\u0439 \u0440\u0435\u0436\u0438\u043C, \u0440\u0435\u0436\u0438\u043C \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0438 \u0440\u0435\u0436\u0438\u043C \u0444\u0438\u043B\u044C\u0442\u0440\u0430\u0446\u0438\u0438.",'\u0423\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u0442, \u0430\u043A\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u0442\u0441\u044F \u043B\u0438 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044F \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u043A\u043B\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044B \u0432 \u0441\u043F\u0438\u0441\u043A\u0430\u0445 \u0438 \u0434\u0435\u0440\u0435\u0432\u044C\u044F\u0445 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u043F\u0440\u043E\u0441\u0442\u044B\u043C \u0432\u0432\u043E\u0434\u043E\u043C. \u0415\u0441\u043B\u0438 \u0437\u0430\u0434\u0430\u043D\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 "false", \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044F \u0441 \u043A\u043B\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044B \u0430\u043A\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u0440\u0438 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0438 \u043A\u043E\u043C\u0430\u043D\u0434\u044B "list.toggleKeyboardNavigation", \u0434\u043B\u044F \u043A\u043E\u0442\u043E\u0440\u043E\u0439 \u043C\u043E\u0436\u043D\u043E \u043D\u0430\u0437\u043D\u0430\u0447\u0438\u0442\u044C \u0441\u043E\u0447\u0435\u0442\u0430\u043D\u0438\u0435 \u043A\u043B\u0430\u0432\u0438\u0448.',"\u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0442\u0435\u043C, \u043A\u0430\u043A \u043F\u0430\u043F\u043A\u0438 \u0434\u0435\u0440\u0435\u0432\u0430 \u0440\u0430\u0437\u0432\u043E\u0440\u0430\u0447\u0438\u0432\u0430\u044E\u0442\u0441\u044F \u043F\u0440\u0438 \u043D\u0430\u0436\u0430\u0442\u0438\u0438 \u043D\u0430 \u0438\u043C\u0435\u043D\u0430 \u043F\u0430\u043F\u043E\u043A. \u041E\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043D\u0438\u043C\u0430\u043D\u0438\u0435, \u0447\u0442\u043E \u044D\u0442\u043E\u0442 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u043C\u043E\u0436\u0435\u0442 \u0438\u0433\u043D\u043E\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u0432 \u043D\u0435\u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u0434\u0435\u0440\u0435\u0432\u044C\u044F\u0445 \u0438 \u0441\u043F\u0438\u0441\u043A\u0430\u0445, \u0435\u0441\u043B\u0438 \u043E\u043D \u043D\u0435 \u043F\u0440\u0438\u043C\u0435\u043D\u044F\u0435\u0442\u0441\u044F \u043A \u043D\u0438\u043C."],"vs/platform/markers/common/markers":["\u041E\u0448\u0438\u0431\u043A\u0430","\u041F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435","\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F"],"vs/platform/quickinput/browser/commandsQuickAccess":["{0}, {1}","\u043D\u0435\u0434\u0430\u0432\u043D\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u043D\u044B\u0435","\u0434\u0440\u0443\u0433\u0438\u0435 \u043A\u043E\u043C\u0430\u043D\u0434\u044B",'\u041A\u043E\u043C\u0430\u043D\u0434\u0430 "{0}" \u043F\u0440\u0438\u0432\u0435\u043B\u0430 \u043A \u043E\u0448\u0438\u0431\u043A\u0435 ({1})'],"vs/platform/quickinput/browser/helpQuickAccess":["\u0433\u043B\u043E\u0431\u0430\u043B\u044C\u043D\u044B\u0435 \u043A\u043E\u043C\u0430\u043D\u0434\u044B","\u043A\u043E\u043C\u0430\u043D\u0434\u044B \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430","{0}, {1}"],"vs/platform/theme/common/colorRegistry":["\u041E\u0431\u0449\u0438\u0439 \u0446\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430. \u042D\u0442\u043E\u0442 \u0446\u0432\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F, \u0442\u043E\u043B\u044C\u043A\u043E \u0435\u0441\u043B\u0438 \u0435\u0433\u043E \u043D\u0435 \u043F\u0435\u0440\u0435\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0438\u0442 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442.","\u041E\u0431\u0449\u0438\u0439 \u0446\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439 \u043E\u0431 \u043E\u0448\u0438\u0431\u043A\u0430\u0445. \u042D\u0442\u043E\u0442 \u0446\u0432\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u0435\u0441\u043B\u0438 \u0435\u0433\u043E \u043D\u0435 \u043F\u0435\u0440\u0435\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442.","\u0426\u0432\u0435\u0442 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u0434\u043B\u044F \u0437\u043D\u0430\u0447\u043A\u043E\u0432 \u043D\u0430 \u0440\u0430\u0431\u043E\u0447\u0435\u043C \u043C\u0435\u0441\u0442\u0435.","\u041E\u0431\u0449\u0438\u0439 \u0446\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446 \u0434\u043B\u044F \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432 \u0441 \u0444\u043E\u043A\u0443\u0441\u043E\u043C. \u042D\u0442\u043E\u0442 \u0446\u0432\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u0432 \u0442\u043E\u043C \u0441\u043B\u0443\u0447\u0430\u0435, \u0435\u0441\u043B\u0438 \u043D\u0435 \u043F\u0435\u0440\u0435\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D \u0432 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0435.","\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u0430\u044F \u0433\u0440\u0430\u043D\u0438\u0446\u0430 \u0432\u043E\u043A\u0440\u0443\u0433 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432, \u043A\u043E\u0442\u043E\u0440\u0430\u044F \u043E\u0442\u0434\u0435\u043B\u044F\u0435\u0442 \u0438\u0445 \u043E\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432 \u0434\u043B\u044F \u0443\u043B\u0443\u0447\u0448\u0435\u043D\u0438\u044F \u043A\u043E\u043D\u0442\u0440\u0430\u0441\u0442\u0430.","\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u0430\u044F \u0433\u0440\u0430\u043D\u0438\u0446\u0430 \u0432\u043E\u043A\u0440\u0443\u0433 \u0430\u043A\u0442\u0438\u0432\u043D\u044B\u0445 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432, \u043A\u043E\u0442\u043E\u0440\u0430\u044F \u043E\u0442\u0434\u0435\u043B\u044F\u0435\u0442 \u0438\u0445 \u043E\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432 \u0434\u043B\u044F \u0443\u043B\u0443\u0447\u0448\u0435\u043D\u0438\u044F \u043A\u043E\u043D\u0442\u0440\u0430\u0441\u0442\u0430.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0441\u044B\u043B\u043E\u043A \u0432 \u0442\u0435\u043A\u0441\u0442\u0435.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0434\u043B\u044F \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u043D\u043E\u0433\u043E \u043A\u043E\u0434\u0430 \u0432 \u0442\u0435\u043A\u0441\u0442\u0435.",'\u0426\u0432\u0435\u0442 \u0442\u0435\u043D\u0438 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0439 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430, \u0442\u0430\u043A\u0438\u0445 \u043A\u0430\u043A "\u041D\u0430\u0439\u0442\u0438/\u0437\u0430\u043C\u0435\u043D\u0438\u0442\u044C".',"\u0424\u043E\u043D \u043F\u043E\u043B\u044F \u0432\u0432\u043E\u0434\u0430.","\u041F\u0435\u0440\u0435\u0434\u043D\u0438\u0439 \u043F\u043B\u0430\u043D \u043F\u043E\u043B\u044F \u0432\u0432\u043E\u0434\u0430.","\u0413\u0440\u0430\u043D\u0438\u0446\u0430 \u043F\u043E\u043B\u044F \u0432\u0432\u043E\u0434\u0430.","\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446 \u0430\u043A\u0442\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0445 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432 \u0432 \u043F\u043E\u043B\u044F\u0445 \u0432\u0432\u043E\u0434\u0430.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0430\u043A\u0442\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0445 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432 \u0432 \u043F\u043E\u043B\u044F\u0445 \u0432\u0432\u043E\u0434\u0430.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0430\u043A\u0442\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0445 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432 \u0432 \u043F\u043E\u043B\u044F\u0445 \u0432\u0432\u043E\u0434\u0430.",'\u0424\u043E\u043D\u043E\u0432\u044B\u0439 \u0446\u0432\u0435\u0442 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438 \u0432\u0432\u043E\u0434\u0430 \u0434\u043B\u044F \u0443\u0440\u043E\u0432\u043D\u044F \u0441\u0435\u0440\u044C\u0435\u0437\u043D\u043E\u0441\u0442\u0438 "\u0421\u0432\u0435\u0434\u0435\u043D\u0438\u044F".','\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u043E\u0431\u043B\u0430\u0441\u0442\u0438 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438 \u0432\u0432\u043E\u0434\u0430 \u0434\u043B\u044F \u0443\u0440\u043E\u0432\u043D\u044F \u0441\u0435\u0440\u044C\u0435\u0437\u043D\u043E\u0441\u0442\u0438 "\u0421\u0432\u0435\u0434\u0435\u043D\u0438\u044F".','\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446\u044B \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438 \u0432\u0432\u043E\u0434\u0430 \u0434\u043B\u044F \u0443\u0440\u043E\u0432\u043D\u044F \u0441\u0435\u0440\u044C\u0435\u0437\u043D\u043E\u0441\u0442\u0438 "\u0421\u0432\u0435\u0434\u0435\u043D\u0438\u044F".','\u0424\u043E\u043D\u043E\u0432\u044B\u0439 \u0446\u0432\u0435\u0442 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438 \u0432\u0432\u043E\u0434\u0430 \u0434\u043B\u044F \u0443\u0440\u043E\u0432\u043D\u044F \u0441\u0435\u0440\u044C\u0435\u0437\u043D\u043E\u0441\u0442\u0438 "\u041F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435".','\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u043E\u0431\u043B\u0430\u0441\u0442\u0438 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438 \u0432\u0432\u043E\u0434\u0430 \u0434\u043B\u044F \u0443\u0440\u043E\u0432\u043D\u044F \u0441\u0435\u0440\u044C\u0435\u0437\u043D\u043E\u0441\u0442\u0438 "\u041F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435".','\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446\u044B \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438 \u0432\u0432\u043E\u0434\u0430 \u0434\u043B\u044F \u0443\u0440\u043E\u0432\u043D\u044F \u0441\u0435\u0440\u044C\u0435\u0437\u043D\u043E\u0441\u0442\u0438 "\u041F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435".','\u0424\u043E\u043D\u043E\u0432\u044B\u0439 \u0446\u0432\u0435\u0442 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438 \u0432\u0432\u043E\u0434\u0430 \u0434\u043B\u044F \u0443\u0440\u043E\u0432\u043D\u044F \u0441\u0435\u0440\u044C\u0435\u0437\u043D\u043E\u0441\u0442\u0438 "\u041E\u0448\u0438\u0431\u043A\u0430".','\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u043E\u0431\u043B\u0430\u0441\u0442\u0438 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438 \u0432\u0432\u043E\u0434\u0430 \u0434\u043B\u044F \u0443\u0440\u043E\u0432\u043D\u044F \u0441\u0435\u0440\u044C\u0435\u0437\u043D\u043E\u0441\u0442\u0438 "\u041E\u0448\u0438\u0431\u043A\u0430".','\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446\u044B \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438 \u0432\u0432\u043E\u0434\u0430 \u0434\u043B\u044F \u0443\u0440\u043E\u0432\u043D\u044F \u0441\u0435\u0440\u044C\u0435\u0437\u043D\u043E\u0441\u0442\u0438 "\u041E\u0448\u0438\u0431\u043A\u0430".',"\u0424\u043E\u043D \u0440\u0430\u0441\u043A\u0440\u044B\u0432\u0430\u044E\u0449\u0435\u0433\u043E\u0441\u044F \u0441\u043F\u0438\u0441\u043A\u0430.","\u041F\u0435\u0440\u0435\u0434\u043D\u0438\u0439 \u043F\u043B\u0430\u043D \u0440\u0430\u0441\u043A\u0440\u044B\u0432\u0430\u044E\u0449\u0435\u0433\u043E\u0441\u044F \u0441\u043F\u0438\u0441\u043A\u0430.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u043A\u043D\u043E\u043F\u043A\u0438.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u043A\u043D\u043E\u043F\u043A\u0438.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u043A\u043D\u043E\u043F\u043A\u0438 \u043F\u0440\u0438 \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u0438\u0438.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0431\u044D\u0434\u0436\u0430. \u0411\u044D\u0434\u0436\u0438 - \u043D\u0435\u0431\u043E\u043B\u044C\u0448\u0438\u0435 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B, \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0449\u0438\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432 \u043F\u043E\u0438\u0441\u043A\u0430.","\u0426\u0432\u0435\u0442 \u0442\u0435\u043A\u0441\u0442\u0430 \u0431\u044D\u0434\u0436\u0430. \u0411\u044D\u0434\u0436\u0438 - \u043D\u0435\u0431\u043E\u043B\u044C\u0448\u0438\u0435 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B, \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0449\u0438\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432 \u043F\u043E\u0438\u0441\u043A\u0430.","\u0426\u0432\u0435\u0442 \u0442\u0435\u043D\u0438 \u043F\u043E\u043B\u043E\u0441\u044B \u043F\u0440\u043E\u043A\u0440\u0443\u0442\u043A\u0438, \u043A\u043E\u0442\u043E\u0440\u0430\u044F \u0441\u0432\u0438\u0434\u0435\u0442\u0435\u043B\u044C\u0441\u0442\u0432\u0443\u0435\u0442 \u043E \u0442\u043E\u043C, \u0447\u0442\u043E \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0435 \u043F\u0440\u043E\u043A\u0440\u0443\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044F.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0434\u043B\u044F \u043F\u043E\u043B\u0437\u0443\u043D\u043A\u0430 \u043F\u043E\u043B\u043E\u0441\u044B \u043F\u0440\u043E\u043A\u0440\u0443\u0442\u043A\u0438.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u043F\u043E\u043B\u0437\u0443\u043D\u043A\u0430 \u043F\u043E\u043B\u043E\u0441\u044B \u043F\u0440\u043E\u043A\u0440\u0443\u0442\u043A\u0438 \u043F\u0440\u0438 \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u0438\u0438 \u043A\u0443\u0440\u0441\u043E\u0440\u0430.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u043F\u043E\u043B\u0437\u0443\u043D\u043A\u0430 \u043F\u043E\u043B\u043E\u0441\u044B \u043F\u0440\u043E\u043A\u0440\u0443\u0442\u043A\u0438 \u043F\u0440\u0438 \u0449\u0435\u043B\u0447\u043A\u0435 \u043F\u043E \u043D\u0435\u043C\u0443.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\u0440\u0430 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u043C\u043E\u0436\u0435\u0442 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C\u0441\u044F \u0434\u043B\u044F \u0434\u043B\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0445 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0439.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0434\u043B\u044F \u0442\u0435\u043A\u0441\u0442\u0430 \u043E\u0448\u0438\u0431\u043A\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435. \u0426\u0432\u0435\u0442 \u043D\u0435 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435\u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u044B\u043C, \u0447\u0442\u043E\u0431\u044B \u043D\u0435 \u0441\u043A\u0440\u044B\u0442\u044C \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0435 \u043D\u0438\u0436\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F.","\u0426\u0432\u0435\u0442 \u0432\u043E\u043B\u043D\u0438\u0441\u0442\u043E\u0439 \u043B\u0438\u043D\u0438\u0438 \u0434\u043B\u044F \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u043E\u0448\u0438\u0431\u043E\u043A \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435.","\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446\u044B \u0434\u043B\u044F \u043E\u043A\u043E\u043D \u043E\u0448\u0438\u0431\u043E\u043A \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0434\u043B\u044F \u0442\u0435\u043A\u0441\u0442\u0430 \u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u044F \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435. \u0426\u0432\u0435\u0442 \u043D\u0435 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435\u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u044B\u043C, \u0447\u0442\u043E\u0431\u044B \u043D\u0435 \u0441\u043A\u0440\u044B\u0442\u044C \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0435 \u043D\u0438\u0436\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F.","\u0426\u0432\u0435\u0442 \u0432\u043E\u043B\u043D\u0438\u0441\u0442\u043E\u0439 \u043B\u0438\u043D\u0438\u0438 \u0434\u043B\u044F \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0439 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435.","\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446\u044B \u0434\u043B\u044F \u043E\u043A\u043E\u043D \u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0439 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0434\u043B\u044F \u0442\u0435\u043A\u0441\u0442\u0430 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E\u0433\u043E \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435. \u0426\u0432\u0435\u0442 \u043D\u0435 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435\u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u044B\u043C, \u0447\u0442\u043E\u0431\u044B \u043D\u0435 \u0441\u043A\u0440\u044B\u0442\u044C \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0435 \u043D\u0438\u0436\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F.","\u0426\u0432\u0435\u0442 \u0432\u043E\u043B\u043D\u0438\u0441\u0442\u043E\u0439 \u043B\u0438\u043D\u0438\u0438 \u0434\u043B\u044F \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0445 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435.","\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446\u044B \u0434\u043B\u044F \u043E\u043A\u043E\u043D \u0441\u0432\u0435\u0434\u0435\u043D\u0438\u0439 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435.","\u0426\u0432\u0435\u0442 \u0432\u043E\u043B\u043D\u0438\u0441\u0442\u043E\u0439 \u043B\u0438\u043D\u0438\u0438 \u0434\u043B\u044F \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u043F\u043E\u0434\u0441\u043A\u0430\u0437\u043E\u043A \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435.","\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446\u044B \u0434\u043B\u044F \u043E\u043A\u043E\u043D \u0443\u043A\u0430\u0437\u0430\u043D\u0438\u0439 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0432\u0438\u0434\u0436\u0435\u0442\u043E\u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430, \u0442\u0430\u043A\u0438\u0445 \u043A\u0430\u043A \u043D\u0430\u0439\u0442\u0438/\u0437\u0430\u043C\u0435\u043D\u0438\u0442\u044C.",'\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0439 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430, \u0442\u0430\u043A\u0438\u0445 \u043A\u0430\u043A "\u041F\u043E\u0438\u0441\u043A/\u0437\u0430\u043C\u0435\u043D\u0430".',"\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446\u044B \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0439 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430. \u042D\u0442\u043E\u0442 \u0446\u0432\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u0432 \u0442\u043E\u043C \u0441\u043B\u0443\u0447\u0430\u0435, \u0435\u0441\u043B\u0438 \u0443 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0435\u0441\u0442\u044C \u0433\u0440\u0430\u043D\u0438\u0446\u0430 \u0438 \u0435\u0441\u043B\u0438 \u044D\u0442\u043E\u0442 \u0446\u0432\u0435\u0442 \u043D\u0435 \u043F\u0435\u0440\u0435\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u043C.","\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446\u044B \u043F\u0430\u043D\u0435\u043B\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0440\u0430\u0437\u043C\u0435\u0440\u0430 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0439 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430. \u042D\u0442\u043E\u0442 \u0446\u0432\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u0432 \u0442\u043E\u043C \u0441\u043B\u0443\u0447\u0430\u0435, \u0435\u0441\u043B\u0438 \u0443 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0435\u0441\u0442\u044C \u0433\u0440\u0430\u043D\u0438\u0446\u0430 \u0434\u043B\u044F \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0440\u0430\u0437\u043C\u0435\u0440\u0430 \u0438 \u0435\u0441\u043B\u0438 \u044D\u0442\u043E\u0442 \u0446\u0432\u0435\u0442 \u043D\u0435 \u043F\u0435\u0440\u0435\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u043C.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0434\u043B\u044F \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0431\u044B\u0441\u0442\u0440\u043E\u0433\u043E \u0432\u044B\u0431\u043E\u0440\u0430. \u041C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0431\u044B\u0441\u0442\u0440\u043E\u0433\u043E \u0432\u044B\u0431\u043E\u0440\u0430 \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u043A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u043E\u043C \u0434\u043B\u044F \u0442\u0430\u043A\u0438\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0432\u044B\u0431\u043E\u0440\u0430, \u043A\u0430\u043A \u043F\u0430\u043B\u0438\u0442\u0440\u0430 \u043A\u043E\u043C\u0430\u043D\u0434.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0431\u044B\u0441\u0442\u0440\u043E\u0433\u043E \u0432\u044B\u0431\u043E\u0440\u0430. \u041C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0431\u044B\u0441\u0442\u0440\u043E\u0433\u043E \u0432\u044B\u0431\u043E\u0440\u0430 \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u043A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u043E\u043C \u0434\u043B\u044F \u0442\u0430\u043A\u0438\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0432\u044B\u0431\u043E\u0440\u0430, \u043A\u0430\u043A \u043F\u0430\u043B\u0438\u0442\u0440\u0430 \u043A\u043E\u043C\u0430\u043D\u0434.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0434\u043B\u044F \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0431\u044B\u0441\u0442\u0440\u043E\u0433\u043E \u0432\u044B\u0431\u043E\u0440\u0430. \u041C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0431\u044B\u0441\u0442\u0440\u043E\u0433\u043E \u0432\u044B\u0431\u043E\u0440\u0430 \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u043A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u043E\u043C \u0434\u043B\u044F \u0442\u0430\u043A\u0438\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0432\u044B\u0431\u043E\u0440\u0430, \u043A\u0430\u043A \u043F\u0430\u043B\u0438\u0442\u0440\u0430 \u043A\u043E\u043C\u0430\u043D\u0434.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0431\u044B\u0441\u0442\u0440\u043E\u0433\u043E \u0432\u044B\u0431\u043E\u0440\u0430 \u0434\u043B\u044F \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430, \u043D\u0430 \u043A\u043E\u0442\u043E\u0440\u043E\u043C \u043D\u0430\u0445\u043E\u0434\u0438\u0442\u0441\u044F \u0444\u043E\u043A\u0443\u0441.","\u0426\u0432\u0435\u0442 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0431\u044B\u0441\u0442\u0440\u043E\u0433\u043E \u0432\u044B\u0431\u043E\u0440\u0430 \u0434\u043B\u044F \u0433\u0440\u0443\u043F\u043F\u0438\u0440\u043E\u0432\u043A\u0438 \u043C\u0435\u0442\u043E\u043A.","\u0426\u0432\u0435\u0442 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0431\u044B\u0441\u0442\u0440\u043E\u0433\u043E \u0432\u044B\u0431\u043E\u0440\u0430 \u0434\u043B\u044F \u0433\u0440\u0443\u043F\u043F\u0438\u0440\u043E\u0432\u043A\u0438 \u0433\u0440\u0430\u043D\u0438\u0446.","\u0426\u0432\u0435\u0442 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u0426\u0432\u0435\u0442 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u043E\u0433\u043E \u0442\u0435\u043A\u0441\u0442\u0430 \u0432 \u0440\u0435\u0436\u0438\u043C\u0435 \u0432\u044B\u0441\u043E\u043A\u043E\u0433\u043E \u043A\u043E\u043D\u0442\u0440\u0430\u0441\u0442\u0430.","\u0426\u0432\u0435\u0442 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0432 \u043D\u0435\u0430\u043A\u0442\u0438\u0432\u043D\u043E\u043C \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435. \u0426\u0432\u0435\u0442 \u043D\u0435 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435\u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u044B\u043C, \u0447\u0442\u043E\u0431\u044B \u043D\u0435 \u0441\u043A\u0440\u044B\u0442\u044C \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0435 \u043D\u0438\u0436\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F.","\u0426\u0432\u0435\u0442 \u0434\u043B\u044F \u043E\u0431\u043B\u0430\u0441\u0442\u0435\u0439, \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0435 \u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u0441\u043E\u0432\u043F\u0430\u0434\u0430\u0435\u0442 \u0441 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u043C \u0444\u0440\u0430\u0433\u043C\u0435\u043D\u0442\u043E\u043C. \u0426\u0432\u0435\u0442 \u043D\u0435 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435\u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u044B\u043C, \u0447\u0442\u043E\u0431\u044B \u043D\u0435 \u0441\u043A\u0440\u044B\u0442\u044C \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0435 \u043D\u0438\u0436\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F.","\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446\u044B \u0440\u0435\u0433\u0438\u043E\u043D\u043E\u0432 \u0441 \u0442\u0435\u043C \u0436\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u044B\u043C, \u0447\u0442\u043E \u0438 \u0432 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u0438.","\u0426\u0432\u0435\u0442 \u0442\u0435\u043A\u0443\u0449\u0435\u0433\u043E \u043F\u043E\u0438\u0441\u043A\u0430 \u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0439 \u043F\u0440\u0438 \u043F\u043E\u0438\u0441\u043A\u0435. \u0426\u0432\u0435\u0442 \u043D\u0435 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435\u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u044B\u043C, \u0447\u0442\u043E\u0431\u044B \u043D\u0435 \u0441\u043A\u0440\u044B\u0442\u044C \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0435 \u043D\u0438\u0436\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F.","\u0426\u0432\u0435\u0442 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\u0430, \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0432\u0430\u044E\u0449\u0435\u0433\u043E \u043F\u043E\u0438\u0441\u043A. \u0426\u0432\u0435\u0442 \u043D\u0435 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435\u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u044B\u043C, \u0447\u0442\u043E\u0431\u044B \u043D\u0435 \u0441\u043A\u0440\u044B\u0442\u044C \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0435 \u043D\u0438\u0436\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F.","\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446\u044B \u0442\u0435\u043A\u0443\u0449\u0435\u0433\u043E \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0430 \u043F\u043E\u0438\u0441\u043A\u0430.","\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446\u044B \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432 \u043F\u043E\u0438\u0441\u043A\u0430.","\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446\u044B \u0434\u043B\u044F \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\u0430, \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0432\u0430\u044E\u0449\u0435\u0433\u043E \u043F\u043E\u0438\u0441\u043A. \u0426\u0432\u0435\u0442 \u043D\u0435 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435\u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u044B\u043C, \u0447\u0442\u043E\u0431\u044B \u043D\u0435 \u0441\u043A\u0440\u044B\u0442\u044C \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0435 \u043D\u0438\u0436\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F.","\u0412\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u0435 \u043F\u043E\u0434 \u0441\u043B\u043E\u0432\u043E\u043C, \u0434\u043B\u044F \u043A\u043E\u0442\u043E\u0440\u043E\u0433\u043E \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044F \u043C\u0435\u043D\u044E \u043F\u0440\u0438 \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u0438\u0438 \u043A\u0443\u0440\u0441\u043E\u0440\u0430. \u0426\u0432\u0435\u0442 \u043D\u0435 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435\u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u044B\u043C, \u0447\u0442\u043E\u0431\u044B \u043D\u0435 \u0441\u043A\u0440\u044B\u0442\u044C \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0435 \u043D\u0438\u0436\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u043F\u0440\u0438 \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u0438\u0438 \u0443\u043A\u0430\u0437\u0430\u0442\u0435\u043B\u044F \u043D\u0430 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u0438\u044F \u0443\u043A\u0430\u0437\u0430\u0442\u0435\u043B\u044F \u043D\u0430 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440.","\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446 \u043F\u0440\u0438 \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u0438\u0438 \u0443\u043A\u0430\u0437\u0430\u0442\u0435\u043B\u044F \u043D\u0430 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0441\u0442\u0440\u043E\u043A\u0438 \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u044F \u043F\u0440\u0438 \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u0438\u0438 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435.","\u0426\u0432\u0435\u0442 \u0430\u043A\u0442\u0438\u0432\u043D\u044B\u0445 \u0441\u0441\u044B\u043B\u043E\u043A.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0432\u0441\u0442\u0440\u043E\u0435\u043D\u043D\u044B\u0445 \u0443\u043A\u0430\u0437\u0430\u043D\u0438\u0439","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0432\u0441\u0442\u0440\u043E\u0435\u043D\u043D\u044B\u0445 \u0443\u043A\u0430\u0437\u0430\u043D\u0438\u0439","\u0426\u0432\u0435\u0442, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u044B\u0439 \u0434\u043B\u044F \u0437\u043D\u0430\u0447\u043A\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0432 \u043C\u0435\u043D\u044E \u043B\u0430\u043C\u043F\u043E\u0447\u043A\u0438.","\u0426\u0432\u0435\u0442, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u044B\u0439 \u0434\u043B\u044F \u0437\u043D\u0430\u0447\u043A\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u0432 \u043C\u0435\u043D\u044E \u043B\u0430\u043C\u043F\u043E\u0447\u043A\u0438.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0434\u043B\u044F \u0432\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u043D\u043E\u0433\u043E \u0442\u0435\u043A\u0441\u0442\u0430. \u0426\u0432\u0435\u0442 \u043D\u0435 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435\u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u044B\u043C, \u0447\u0442\u043E\u0431\u044B \u043D\u0435 \u0441\u043A\u0440\u044B\u0442\u044C \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0435 \u043D\u0438\u0436\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0434\u043B\u044F \u0443\u0434\u0430\u043B\u0435\u043D\u043D\u043E\u0433\u043E \u0442\u0435\u043A\u0441\u0442\u0430. \u0426\u0432\u0435\u0442 \u043D\u0435 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435\u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u044B\u043C, \u0447\u0442\u043E\u0431\u044B \u043D\u0435 \u0441\u043A\u0440\u044B\u0442\u044C \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0435 \u043D\u0438\u0436\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F.","\u0426\u0432\u0435\u0442 \u043A\u043E\u043D\u0442\u0443\u0440\u0430 \u0434\u043B\u044F \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043D\u044B\u0445 \u0441\u0442\u0440\u043E\u043A.","\u0426\u0432\u0435\u0442 \u043A\u043E\u043D\u0442\u0443\u0440\u0430 \u0434\u043B\u044F \u0443\u0434\u0430\u043B\u0435\u043D\u043D\u044B\u0445 \u0441\u0442\u0440\u043E\u043A.","\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446\u044B \u043C\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043C\u044F \u0442\u0435\u043A\u0441\u0442\u043E\u0432\u044B\u043C\u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430\u043C\u0438.","\u0426\u0432\u0435\u0442 \u0434\u0438\u0430\u0433\u043E\u043D\u0430\u043B\u044C\u043D\u043E\u0439 \u0437\u0430\u043B\u0438\u0432\u043A\u0438 \u0434\u043B\u044F \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430 \u043D\u0435\u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0439. \u0414\u0438\u0430\u0433\u043E\u043D\u0430\u043B\u044C\u043D\u0430\u044F \u0437\u0430\u043B\u0438\u0432\u043A\u0430 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u0432 \u0440\u0430\u0437\u043C\u0435\u0449\u0430\u0435\u043C\u044B\u0445 \u0440\u044F\u0434\u043E\u043C \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u044F\u0445 \u043D\u0435\u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0439.","\u0424\u043E\u043D\u043E\u0432\u044B\u0439 \u0446\u0432\u0435\u0442 \u043D\u0430\u0445\u043E\u0434\u044F\u0449\u0435\u0433\u043E\u0441\u044F \u0432 \u0444\u043E\u043A\u0443\u0441\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 List/Tree, \u043A\u043E\u0433\u0434\u0430 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 List/Tree \u0430\u043A\u0442\u0438\u0432\u0435\u043D. \u041D\u0430 \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u043C \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 List/Tree \u0435\u0441\u0442\u044C \u0444\u043E\u043A\u0443\u0441 \u043A\u043B\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044B, \u043D\u0430 \u043D\u0435\u0430\u043A\u0442\u0438\u0432\u043D\u043E\u043C \u2014 \u043D\u0435\u0442.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u043D\u0430\u0445\u043E\u0434\u044F\u0449\u0435\u0433\u043E\u0441\u044F \u0432 \u0444\u043E\u043A\u0443\u0441\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 List/Tree, \u043A\u043E\u0433\u0434\u0430 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 List/Tree \u0430\u043A\u0442\u0438\u0432\u0435\u043D. \u041D\u0430 \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u043C \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 List/Tree \u0435\u0441\u0442\u044C \u0444\u043E\u043A\u0443\u0441 \u043A\u043B\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044B, \u043D\u0430 \u043D\u0435\u0430\u043A\u0442\u0438\u0432\u043D\u043E\u043C \u2014 \u043D\u0435\u0442.","\u0426\u0432\u0435\u0442 \u043A\u043E\u043D\u0442\u0443\u0440\u0430 \u043D\u0430\u0445\u043E\u0434\u044F\u0449\u0435\u0433\u043E\u0441\u044F \u0432 \u0444\u043E\u043A\u0443\u0441\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 List/Tree, \u043A\u043E\u0433\u0434\u0430 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 List/Tree \u0430\u043A\u0442\u0438\u0432\u0435\u043D. \u041D\u0430 \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u043C \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 List/Tree \u0435\u0441\u0442\u044C \u0444\u043E\u043A\u0443\u0441 \u043A\u043B\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044B, \u043D\u0430 \u043D\u0435\u0430\u043A\u0442\u0438\u0432\u043D\u043E\u043C\xA0\u2014 \u043D\u0435\u0442.","\u0424\u043E\u043D\u043E\u0432\u044B\u0439 \u0446\u0432\u0435\u0442 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 List/Tree, \u043A\u043E\u0433\u0434\u0430 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 List/Tree \u0430\u043A\u0442\u0438\u0432\u0435\u043D. \u041D\u0430 \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u043C \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 List/Tree \u0435\u0441\u0442\u044C \u0444\u043E\u043A\u0443\u0441 \u043A\u043B\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044B, \u043D\u0430 \u043D\u0435\u0430\u043A\u0442\u0438\u0432\u043D\u043E\u043C \u2014 \u043D\u0435\u0442.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 List/Tree, \u043A\u043E\u0433\u0434\u0430 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 List/Tree \u0430\u043A\u0442\u0438\u0432\u0435\u043D. \u041D\u0430 \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u043C \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 List/Tree \u0435\u0441\u0442\u044C \u0444\u043E\u043A\u0443\u0441 \u043A\u043B\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044B, \u043D\u0430 \u043D\u0435\u0430\u043A\u0442\u0438\u0432\u043D\u043E\u043C \u2014 \u043D\u0435\u0442.","\u0424\u043E\u043D\u043E\u0432\u044B\u0439 \u0446\u0432\u0435\u0442 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 List/Tree, \u043A\u043E\u0433\u0434\u0430 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 List/Tree \u043D\u0435\u0430\u043A\u0442\u0438\u0432\u0435\u043D. \u041D\u0430 \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u043C \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 List/Tree \u0435\u0441\u0442\u044C \u0444\u043E\u043A\u0443\u0441 \u043A\u043B\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044B, \u043D\u0430 \u043D\u0435\u0430\u043A\u0442\u0438\u0432\u043D\u043E\u043C \u2014 \u043D\u0435\u0442.","\u0426\u0432\u0435\u0442 \u0442\u0435\u043A\u0441\u0442\u0430 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 List/Tree, \u043A\u043E\u0433\u0434\u0430 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 List/Tree \u043D\u0435\u0430\u043A\u0442\u0438\u0432\u0435\u043D. \u041D\u0430 \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u043C \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 List/Tree \u0435\u0441\u0442\u044C \u0444\u043E\u043A\u0443\u0441 \u043A\u043B\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044B, \u043D\u0430 \u043D\u0435\u0430\u043A\u0442\u0438\u0432\u043D\u043E\u043C \u2014 \u043D\u0435\u0442.","\u0424\u043E\u043D\u043E\u0432\u044B\u0439 \u0446\u0432\u0435\u0442 \u043D\u0430\u0445\u043E\u0434\u044F\u0449\u0435\u0433\u043E\u0441\u044F \u0432 \u0444\u043E\u043A\u0443\u0441\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 List/Tree, \u043A\u043E\u0433\u0434\u0430 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 List/Tree \u043D\u0435 \u0430\u043A\u0442\u0438\u0432\u0435\u043D. \u041D\u0430 \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u043C \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 List/Tree \u0435\u0441\u0442\u044C \u0444\u043E\u043A\u0443\u0441 \u043A\u043B\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044B, \u043D\u0430 \u043D\u0435\u0430\u043A\u0442\u0438\u0432\u043D\u043E\u043C \u2014 \u043D\u0435\u0442.","\u0426\u0432\u0435\u0442 \u043A\u043E\u043D\u0442\u0443\u0440\u0430 \u043D\u0430\u0445\u043E\u0434\u044F\u0449\u0435\u0433\u043E\u0441\u044F \u0432 \u0444\u043E\u043A\u0443\u0441\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 List/Tree, \u043A\u043E\u0433\u0434\u0430 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 List/Tree \u043D\u0435 \u0430\u043A\u0442\u0438\u0432\u0435\u043D. \u041D\u0430 \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u043C \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 List/Tree \u0435\u0441\u0442\u044C \u0444\u043E\u043A\u0443\u0441 \u043A\u043B\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044B, \u043D\u0430 \u043D\u0435\u0430\u043A\u0442\u0438\u0432\u043D\u043E\u043C\xA0\u2014 \u043D\u0435\u0442.","\u0424\u043E\u043D\u043E\u0432\u044B\u0439 \u0446\u0432\u0435\u0442 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432 List/Tree \u043F\u0440\u0438 \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u0438\u0438 \u043A\u0443\u0440\u0441\u043E\u0440\u0430 \u043C\u044B\u0448\u0438.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432 List/Tree \u043F\u0440\u0438 \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u0438\u0438 \u043A\u0443\u0440\u0441\u043E\u0440\u0430 \u043C\u044B\u0448\u0438.","\u0424\u043E\u043D\u043E\u0432\u044B\u0439 \u0446\u0432\u0435\u0442 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432 List/Tree \u043F\u0440\u0438 \u043F\u0435\u0440\u0435\u043C\u0435\u0449\u0435\u043D\u0438\u0438 \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u043C\u044B\u0448\u0438.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0434\u043B\u044F \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044F \u043F\u0440\u0438 \u043F\u043E\u0438\u0441\u043A\u0435 \u043F\u043E \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0443 List/Tree.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0434\u043B\u044F \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0444\u0438\u043B\u044C\u0442\u0440\u0430 \u0442\u0438\u043F\u043E\u0432 \u0432 \u0441\u043F\u0438\u0441\u043A\u0430\u0445 \u0438 \u0434\u0435\u0440\u0435\u0432\u044C\u044F\u0445.","\u0426\u0432\u0435\u0442 \u043A\u043E\u043D\u0442\u0443\u0440\u0430 \u0434\u043B\u044F \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0444\u0438\u043B\u044C\u0442\u0440\u0430 \u0442\u0438\u043F\u043E\u0432 \u0432 \u0441\u043F\u0438\u0441\u043A\u0430\u0445 \u0438 \u0434\u0435\u0440\u0435\u0432\u044C\u044F\u0445.","\u0426\u0432\u0435\u0442 \u043A\u043E\u043D\u0442\u0443\u0440\u0430 \u0434\u043B\u044F \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0444\u0438\u043B\u044C\u0442\u0440\u0430 \u0442\u0438\u043F\u043E\u0432 \u0432 \u0441\u043F\u0438\u0441\u043A\u0430\u0445 \u0438 \u0434\u0435\u0440\u0435\u0432\u044C\u044F\u0445 \u043F\u0440\u0438 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u0448\u0442\u0440\u0438\u0445\u0430 \u0434\u0435\u0440\u0435\u0432\u0430 \u0434\u043B\u044F \u043D\u0430\u043F\u0440\u0430\u0432\u043B\u044F\u044E\u0449\u0438\u0445 \u043E\u0442\u0441\u0442\u0443\u043F\u0430.","\u0426\u0432\u0435\u0442 \u0448\u0442\u0440\u0438\u0445\u0430 \u0434\u0435\u0440\u0435\u0432\u0430 \u0434\u043B\u044F \u043D\u0430\u043F\u0440\u0430\u0432\u043B\u044F\u044E\u0449\u0438\u0445 \u043E\u0442\u0441\u0442\u0443\u043F\u0430.","\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446 \u043C\u0435\u043D\u044E.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u043F\u0443\u043D\u043A\u0442\u043E\u0432 \u043C\u0435\u043D\u044E.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u043F\u0443\u043D\u043A\u0442\u043E\u0432 \u043C\u0435\u043D\u044E.","\u0426\u0432\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u043F\u043B\u0430\u043D\u0430 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u043F\u0443\u043D\u043A\u0442\u0430 \u043C\u0435\u043D\u044E \u0432 \u043C\u0435\u043D\u044E.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0434\u043B\u044F \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u043F\u0443\u043D\u043A\u0442\u0430 \u0432 \u043C\u0435\u043D\u044E.","\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446\u044B \u0434\u043B\u044F \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u043F\u0443\u043D\u043A\u0442\u0430 \u0432 \u043C\u0435\u043D\u044E.","\u0426\u0432\u0435\u0442 \u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044F \u043C\u0435\u043D\u044E \u0432 \u043C\u0435\u043D\u044E.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0432 \u043F\u043E\u0437\u0438\u0446\u0438\u0438 \u0442\u0430\u0431\u0443\u043B\u044F\u0446\u0438\u0438 \u0444\u0440\u0430\u0433\u043C\u0435\u043D\u0442\u0430.","\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446\u044B \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0432 \u043F\u043E\u0437\u0438\u0446\u0438\u0438 \u0442\u0430\u0431\u0443\u043B\u044F\u0446\u0438\u0438 \u0444\u0440\u0430\u0433\u043C\u0435\u043D\u0442\u0430.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0432 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u043F\u043E\u0437\u0438\u0446\u0438\u0438 \u0442\u0430\u0431\u0443\u043B\u044F\u0446\u0438\u0438 \u0444\u0440\u0430\u0433\u043C\u0435\u043D\u0442\u0430.","\u0412\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u0435 \u0446\u0432\u0435\u0442\u043E\u043C \u0433\u0440\u0430\u043D\u0438\u0446\u044B \u0432 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u043F\u043E\u0437\u0438\u0446\u0438\u0438 \u0442\u0430\u0431\u0443\u043B\u044F\u0446\u0438\u0438 \u0444\u0440\u0430\u0433\u043C\u0435\u043D\u0442\u0430.","\u0426\u0432\u0435\u0442 \u043C\u0430\u0440\u043A\u0435\u0440\u0430 \u043E\u0431\u0437\u043E\u0440\u043D\u043E\u0439 \u043B\u0438\u043D\u0435\u0439\u043A\u0438 \u0434\u043B\u044F \u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0439 \u043F\u0440\u0438 \u043F\u043E\u0438\u0441\u043A\u0435. \u0426\u0432\u0435\u0442 \u043D\u0435 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435\u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u044B\u043C, \u0447\u0442\u043E\u0431\u044B \u043D\u0435 \u0441\u043A\u0440\u044B\u0442\u044C \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0435 \u043D\u0438\u0436\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F.","\u041C\u0430\u0440\u043A\u0435\u0440 \u043E\u0431\u0437\u043E\u0440\u043D\u043E\u0439 \u043B\u0438\u043D\u0435\u0439\u043A\u0438 \u0434\u043B\u044F \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u0444\u0440\u0430\u0433\u043C\u0435\u043D\u0442\u0430. \u0426\u0432\u0435\u0442 \u043D\u0435 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435\u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u044B\u043C, \u0447\u0442\u043E\u0431\u044B \u043D\u0435 \u0441\u043A\u0440\u044B\u0442\u044C \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0435 \u043D\u0438\u0436\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F.","\u0426\u0432\u0435\u0442 \u043C\u0430\u0440\u043A\u0435\u0440\u0430 \u043C\u0438\u043D\u0438-\u043A\u0430\u0440\u0442\u044B \u0434\u043B\u044F \u043F\u043E\u0438\u0441\u043A\u0430 \u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u043C\u0430\u0440\u043A\u0435\u0440\u0430 \u043C\u0438\u043D\u0438-\u043A\u0430\u0440\u0442\u044B \u0434\u043B\u044F \u0432\u044B\u0431\u043E\u0440\u0430 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430.","\u0426\u0432\u0435\u0442 \u043C\u0430\u0440\u043A\u0435\u0440\u0430 \u043C\u0438\u043D\u0438\u043A\u0430\u0440\u0442\u044B \u0434\u043B\u044F \u043E\u0448\u0438\u0431\u043E\u043A.","\u0426\u0432\u0435\u0442 \u043C\u0430\u0440\u043A\u0435\u0440\u0430 \u043C\u0438\u043D\u0438\u043A\u0430\u0440\u0442\u044B \u0434\u043B\u044F \u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0439.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u043C\u0438\u043D\u0438-\u043A\u0430\u0440\u0442\u044B.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u043F\u043E\u043B\u0437\u0443\u043D\u043A\u0430 \u043C\u0438\u043D\u0438-\u043A\u0430\u0440\u0442\u044B.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u043F\u043E\u043B\u0437\u0443\u043D\u043A\u0430 \u043C\u0438\u043D\u0438-\u043A\u0430\u0440\u0442\u044B \u043F\u0440\u0438 \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u0438\u0438 \u043D\u0430 \u043D\u0435\u0433\u043E \u0443\u043A\u0430\u0437\u0430\u0442\u0435\u043B\u044F.","\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u043F\u043E\u043B\u0437\u0443\u043D\u043A\u0430 \u043C\u0438\u043D\u0438-\u043A\u0430\u0440\u0442\u044B \u043F\u0440\u0438 \u0435\u0433\u043E \u0449\u0435\u043B\u0447\u043A\u0435.","\u0426\u0432\u0435\u0442, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u044B\u0439 \u0434\u043B\u044F \u0437\u043D\u0430\u0447\u043A\u0430 \u043E\u0448\u0438\u0431\u043A\u0438, \u0443\u043A\u0430\u0437\u044B\u0432\u0430\u044E\u0449\u0435\u0433\u043E \u043D\u0430 \u043D\u0430\u043B\u0438\u0447\u0438\u0435 \u043F\u0440\u043E\u0431\u043B\u0435\u043C.","\u0426\u0432\u0435\u0442, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u044B\u0439 \u0434\u043B\u044F \u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0430\u044E\u0449\u0435\u0433\u043E \u0437\u043D\u0430\u0447\u043A\u0430, \u0443\u043A\u0430\u0437\u044B\u0432\u0430\u044E\u0449\u0435\u0433\u043E \u043D\u0430 \u043D\u0430\u043B\u0438\u0447\u0438\u0435 \u043F\u0440\u043E\u0431\u043B\u0435\u043C.","\u0426\u0432\u0435\u0442, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u044B\u0439 \u0434\u043B\u044F \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E\u0433\u043E \u0437\u043D\u0430\u0447\u043A\u0430, \u0443\u043A\u0430\u0437\u044B\u0432\u0430\u044E\u0449\u0435\u0433\u043E \u043D\u0430 \u043D\u0430\u043B\u0438\u0447\u0438\u0435 \u043F\u0440\u043E\u0431\u043B\u0435\u043C."],"vs/platform/theme/common/iconRegistry":["\u0418\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u043E\u0433\u043E \u0448\u0440\u0438\u0444\u0442\u0430. \u0415\u0441\u043B\u0438 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u043D\u0435 \u0437\u0430\u0434\u0430\u043D, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u0448\u0440\u0438\u0444\u0442, \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0439 \u043F\u0435\u0440\u0432\u044B\u043C.","\u0421\u0438\u043C\u0432\u043E\u043B \u0448\u0440\u0438\u0444\u0442\u0430, \u0441\u0432\u044F\u0437\u0430\u043D\u043D\u044B\u0439 \u0441 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435\u043C \u0437\u043D\u0430\u0447\u043A\u0430.","\u0417\u043D\u0430\u0447\u043E\u043A \u0434\u043B\u044F \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u0437\u0430\u043A\u0440\u044B\u0442\u0438\u044F \u0432 \u043C\u0438\u043D\u0438-\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F\u0445."],"vs/platform/undoRedo/common/undoRedoService":["\u0421\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0435 \u0444\u0430\u0439\u043B\u044B \u0431\u044B\u043B\u0438 \u0437\u0430\u043A\u0440\u044B\u0442\u044B \u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u044B \u043D\u0430 \u0434\u0438\u0441\u043A\u0435: {0}.","\u0421\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0435 \u0444\u0430\u0439\u043B\u044B \u0431\u044B\u043B\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u044B \u043D\u0435\u0441\u043E\u0432\u043C\u0435\u0441\u0442\u0438\u043C\u044B\u043C \u043E\u0431\u0440\u0430\u0437\u043E\u043C: {0}.",'\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0442\u043C\u0435\u043D\u0438\u0442\u044C "{0}" \u0434\u043B\u044F \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043B\u043E\u0432. {1}','\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0442\u043C\u0435\u043D\u0438\u0442\u044C "{0}" \u0434\u043B\u044F \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043B\u043E\u0432. {1}','\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u044E "{0}" \u0434\u043B\u044F \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043B\u043E\u0432, \u0442\u0430\u043A \u043A\u0430\u043A \u0431\u044B\u043B\u0438 \u0432\u043D\u0435\u0441\u0435\u043D\u044B \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0432 {1}','\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 "{0}" \u0434\u043B\u044F \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043B\u043E\u0432, \u0442\u0430\u043A \u043A\u0430\u043A \u0432 {1} \u0443\u0436\u0435 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u044F \u043E\u0442\u043C\u0435\u043D\u044B \u0438\u043B\u0438 \u043F\u043E\u0432\u0442\u043E\u0440\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F','\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 "{0}" \u0434\u043B\u044F \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043B\u043E\u0432, \u0442\u0430\u043A \u043A\u0430\u043A \u0443\u0436\u0435 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u043B\u0430\u0441\u044C \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u044F \u043E\u0442\u043C\u0435\u043D\u044B \u0438\u043B\u0438 \u043F\u043E\u0432\u0442\u043E\u0440\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F','\u0412\u044B \u0445\u043E\u0442\u0438\u0442\u0435 \u043E\u0442\u043C\u0435\u043D\u0438\u0442\u044C "{0}" \u0434\u043B\u044F \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043B\u043E\u0432?',"\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0432 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u0438\u0445 \u0444\u0430\u0439\u043B\u0430\u0445 ({0})","\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u044D\u0442\u043E\u0442 \u0444\u0430\u0439\u043B","\u041E\u0442\u043C\u0435\u043D\u0430",'\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 "{0}", \u0442\u0430\u043A \u043A\u0430\u043A \u0443\u0436\u0435 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u044F \u043E\u0442\u043C\u0435\u043D\u044B \u0438\u043B\u0438 \u043F\u043E\u0432\u0442\u043E\u0440\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F','\u0412\u044B \u0445\u043E\u0442\u0438\u0442\u0435 \u043E\u0442\u043C\u0435\u043D\u0438\u0442\u044C "{0}"?',"\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C","\u041E\u0442\u043C\u0435\u043D\u0430",'\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u044E "{0}" \u0434\u043B\u044F \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043B\u043E\u0432. {1}','\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u044E "{0}" \u0434\u043B\u044F \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043B\u043E\u0432. {1}','\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u044E "{0}" \u0434\u043B\u044F \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043B\u043E\u0432, \u0442\u0430\u043A \u043A\u0430\u043A \u0431\u044B\u043B\u0438 \u0432\u043D\u0435\u0441\u0435\u043D\u044B \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0432 {1}','\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 "{0}" \u0434\u043B\u044F \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043B\u043E\u0432, \u0442\u0430\u043A \u043A\u0430\u043A \u0434\u043B\u044F {1} \u0443\u0436\u0435 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u044F \u043E\u0442\u043C\u0435\u043D\u044B \u0438\u043B\u0438 \u043F\u043E\u0432\u0442\u043E\u0440\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F.','\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 "{0}" \u0434\u043B\u044F \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043B\u043E\u0432, \u0442\u0430\u043A \u043A\u0430\u043A \u0443\u0436\u0435 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u043B\u0430\u0441\u044C \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u044F \u043E\u0442\u043C\u0435\u043D\u044B \u0438\u043B\u0438 \u043F\u043E\u0432\u0442\u043E\u0440\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F','\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 "{0}", \u0442\u0430\u043A \u043A\u0430\u043A \u0443\u0436\u0435 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u044F \u043E\u0442\u043C\u0435\u043D\u044B \u0438\u043B\u0438 \u043F\u043E\u0432\u0442\u043E\u0440\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F']}); diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/editor/editor.main.nls.zh-cn.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/editor/editor.main.nls.zh-cn.js new file mode 100644 index 0000000000..036ba6b315 --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/editor/editor.main.nls.zh-cn.js @@ -0,0 +1,8 @@ +/*!----------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Version: 0.23.0(82e8ea39fc101d639262435542c7d43bc20d8aa2) + * Released under the MIT license + * https://github.com/microsoft/vscode/blob/main/LICENSE.txt + *-----------------------------------------------------------*/define("vs/editor/editor.main.nls.zh-cn",{"vs/base/browser/ui/actionbar/actionViewItems":["{0} ({1})"],"vs/base/browser/ui/findinput/findInput":["\u8F93\u5165"],"vs/base/browser/ui/findinput/findInputCheckboxes":["\u533A\u5206\u5927\u5C0F\u5199","\u5168\u5B57\u5339\u914D","\u4F7F\u7528\u6B63\u5219\u8868\u8FBE\u5F0F"],"vs/base/browser/ui/findinput/replaceInput":["\u8F93\u5165","\u4FDD\u7559\u5927\u5C0F\u5199"],"vs/base/browser/ui/iconLabel/iconLabel":["\u6B63\u5728\u52A0\u8F7D\u2026"],"vs/base/browser/ui/inputbox/inputBox":["\u9519\u8BEF: {0}","\u8B66\u544A: {0}","\u4FE1\u606F: {0}"],"vs/base/browser/ui/keybindingLabel/keybindingLabel":["\u672A\u7ED1\u5B9A"],"vs/base/browser/ui/menu/menu":["{0} ({1})"],"vs/base/browser/ui/tree/abstractTree":["\u6E05\u9664","\u7981\u7528\u8F93\u5165\u65F6\u7B5B\u9009","\u542F\u7528\u8F93\u5165\u65F6\u7B5B\u9009","\u672A\u627E\u5230\u5143\u7D20","\u5DF2\u5339\u914D {0} \u4E2A\u5143\u7D20(\u5171 {1} \u4E2A)"],"vs/base/common/actions":["(\u7A7A)"],"vs/base/common/errorMessage":["{0}: {1}","\u53D1\u751F\u4E86\u7CFB\u7EDF\u9519\u8BEF ({0})","\u51FA\u73B0\u672A\u77E5\u9519\u8BEF\u3002\u6709\u5173\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u8BF7\u53C2\u9605\u65E5\u5FD7\u3002","\u51FA\u73B0\u672A\u77E5\u9519\u8BEF\u3002\u6709\u5173\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u8BF7\u53C2\u9605\u65E5\u5FD7\u3002","{0} \u4E2A(\u5171 {1} \u4E2A\u9519\u8BEF)","\u51FA\u73B0\u672A\u77E5\u9519\u8BEF\u3002\u6709\u5173\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u8BF7\u53C2\u9605\u65E5\u5FD7\u3002"],"vs/base/common/keybindingLabels":["Ctrl","Shift","Alt","Windows","Ctrl","Shift","Alt","\u8D85\u952E","Control","Shift","Alt","Command","Control","Shift","Alt","Windows","Control","Shift","Alt","\u8D85\u952E"],"vs/base/parts/quickinput/browser/quickInput":["\u4E0A\u4E00\u6B65","{0}/{1}","\u5728\u6B64\u8F93\u5165\u53EF\u7F29\u5C0F\u7ED3\u679C\u8303\u56F4\u3002","{0} \u4E2A\u7ED3\u679C","\u5DF2\u9009 {0} \u9879","\u786E\u5B9A","\u81EA\u5B9A\u4E49","\u540E\u9000 ({0})","\u4E0A\u4E00\u6B65"],"vs/base/parts/quickinput/browser/quickInputList":["\u5FEB\u901F\u8F93\u5165"],"vs/editor/browser/controller/coreCommands":["\u5373\u4F7F\u8F6C\u5230\u8F83\u957F\u7684\u884C\uFF0C\u4E5F\u4E00\u76F4\u5230\u672B\u5C3E","\u5373\u4F7F\u8F6C\u5230\u8F83\u957F\u7684\u884C\uFF0C\u4E5F\u4E00\u76F4\u5230\u672B\u5C3E"],"vs/editor/browser/controller/textAreaHandler":["\u7F16\u8F91\u5668","\u73B0\u5728\u65E0\u6CD5\u8BBF\u95EE\u7F16\u8F91\u5668\u3002\u6309 {0} \u83B7\u53D6\u9009\u9879\u3002"],"vs/editor/browser/core/keybindingCancellation":["Whether the editor runs a cancellable operation, e.g. like 'Peek References'"],"vs/editor/browser/editorExtensions":["\u64A4\u6D88(&&U)","\u64A4\u6D88","\u6062\u590D(&&R)","\u6062\u590D","\u5168\u9009(&&S)","\u9009\u62E9\u5168\u90E8"],"vs/editor/browser/widget/codeEditorWidget":["\u5149\u6807\u6570\u91CF\u88AB\u9650\u5236\u4E3A {0}\u3002"],"vs/editor/browser/widget/diffEditorWidget":["\u5DEE\u5F02\u7F16\u8F91\u5668\u4E2D\u63D2\u5165\u9879\u7684\u7EBF\u6761\u4FEE\u9970\u3002","\u5DEE\u5F02\u7F16\u8F91\u5668\u4E2D\u5220\u9664\u9879\u7684\u7EBF\u6761\u4FEE\u9970\u3002","\u6587\u4EF6\u8FC7\u5927\uFF0C\u65E0\u6CD5\u6BD4\u8F83\u3002"],"vs/editor/browser/widget/diffReview":["\u5DEE\u5F02\u8BC4\u5BA1\u4E2D\u7684\u201C\u63D2\u5165\u201D\u56FE\u6807\u3002","\u5DEE\u5F02\u8BC4\u5BA1\u4E2D\u7684\u201C\u5220\u9664\u201D\u56FE\u6807\u3002","\u5DEE\u5F02\u8BC4\u5BA1\u4E2D\u7684\u201C\u5173\u95ED\u201D\u56FE\u6807\u3002","\u5173\u95ED","\u672A\u66F4\u6539\u884C","\u66F4\u6539\u4E86 1 \u884C","\u66F4\u6539\u4E86 {0} \u884C","\u5DEE\u5F02 {0}/ {1}: \u539F\u59CB\u884C {2}\uFF0C{3}\uFF0C\u4FEE\u6539\u540E\u7684\u884C {4}\uFF0C{5}","\u7A7A\u767D","{0} \u672A\u66F4\u6539\u7684\u884C {1}","{0}\u539F\u59CB\u884C{1}\u4FEE\u6539\u7684\u884C{2}","+ {0}\u4FEE\u6539\u7684\u884C{1}","- {0}\u539F\u59CB\u884C{1}","\u8F6C\u81F3\u4E0B\u4E00\u4E2A\u5DEE\u5F02","\u8F6C\u81F3\u4E0A\u4E00\u4E2A\u5DEE\u5F02"],"vs/editor/browser/widget/inlineDiffMargin":["\u590D\u5236\u5DF2\u5220\u9664\u7684\u884C","\u590D\u5236\u5DF2\u5220\u9664\u7684\u884C","\u590D\u5236\u5DF2\u5220\u9664\u7684\u884C({0})","\u8FD8\u539F\u6B64\u66F4\u6539","\u590D\u5236\u5DF2\u5220\u9664\u7684\u884C({0})"],"vs/editor/common/config/commonEditorConfig":["\u7F16\u8F91\u5668","\u4E00\u4E2A\u5236\u8868\u7B26\u7B49\u4E8E\u7684\u7A7A\u683C\u6570\u3002\u5728 `#editor.detectIndentation#` \u542F\u7528\u65F6\uFF0C\u6839\u636E\u6587\u4EF6\u5185\u5BB9\uFF0C\u8BE5\u8BBE\u7F6E\u53EF\u80FD\u4F1A\u88AB\u8986\u76D6\u3002","\u6309 `Tab` \u952E\u65F6\u63D2\u5165\u7A7A\u683C\u3002\u8BE5\u8BBE\u7F6E\u5728 `#editor.detectIndentation#` \u542F\u7528\u65F6\u6839\u636E\u6587\u4EF6\u5185\u5BB9\u53EF\u80FD\u4F1A\u88AB\u8986\u76D6\u3002","\u63A7\u5236\u662F\u5426\u5728\u6253\u5F00\u6587\u4EF6\u65F6\uFF0C\u57FA\u4E8E\u6587\u4EF6\u5185\u5BB9\u81EA\u52A8\u68C0\u6D4B `#editor.tabSize#` \u548C `#editor.insertSpaces#`\u3002","\u5220\u9664\u81EA\u52A8\u63D2\u5165\u7684\u5C3E\u968F\u7A7A\u767D\u7B26\u53F7\u3002","\u5BF9\u5927\u578B\u6587\u4EF6\u8FDB\u884C\u7279\u6B8A\u5904\u7406\uFF0C\u7981\u7528\u67D0\u4E9B\u5185\u5B58\u5BC6\u96C6\u578B\u529F\u80FD\u3002","\u63A7\u5236\u662F\u5426\u6839\u636E\u6587\u6863\u4E2D\u7684\u6587\u5B57\u8BA1\u7B97\u81EA\u52A8\u5B8C\u6210\u5217\u8868\u3002","\u4EC5\u5EFA\u8BAE\u6D3B\u52A8\u6587\u6863\u4E2D\u7684\u5B57\u8BCD\u3002","\u5EFA\u8BAE\u4F7F\u7528\u540C\u4E00\u8BED\u8A00\u7684\u6240\u6709\u6253\u5F00\u7684\u6587\u6863\u4E2D\u7684\u5B57\u8BCD\u3002","\u5EFA\u8BAE\u6240\u6709\u6253\u5F00\u7684\u6587\u6863\u4E2D\u7684\u5B57\u8BCD\u3002","\u63A7\u5236\u901A\u8FC7\u4EC0\u4E48\u6587\u6863\u8BA1\u7B97\u57FA\u4E8E\u5B57\u8BCD\u7684\u5B8C\u6210\u6570\u3002","\u5BF9\u6240\u6709\u989C\u8272\u4E3B\u9898\u542F\u7528\u8BED\u4E49\u7A81\u51FA\u663E\u793A\u3002","\u5BF9\u6240\u6709\u989C\u8272\u4E3B\u9898\u7981\u7528\u8BED\u4E49\u7A81\u51FA\u663E\u793A\u3002",'\u8BED\u4E49\u7A81\u51FA\u663E\u793A\u662F\u7531\u5F53\u524D\u989C\u8272\u4E3B\u9898\u7684 "semanticHighlighting" \u8BBE\u7F6E\u914D\u7F6E\u7684\u3002',"\u63A7\u5236\u662F\u5426\u4E3A\u652F\u6301\u5B83\u7684\u8BED\u8A00\u663E\u793A\u8BED\u4E49\u7A81\u51FA\u663E\u793A\u3002","\u5728\u901F\u89C8\u7F16\u8F91\u5668\u4E2D\uFF0C\u5373\u4F7F\u53CC\u51FB\u5176\u4E2D\u7684\u5185\u5BB9\u6216\u8005\u6309 `Esc` \u952E\uFF0C\u4E5F\u4FDD\u6301\u5176\u6253\u5F00\u72B6\u6001\u3002","\u7531\u4E8E\u6027\u80FD\u539F\u56E0\uFF0C\u8D85\u8FC7\u8FD9\u4E2A\u957F\u5EA6\u7684\u884C\u5C06\u4E0D\u4F1A\u88AB\u6807\u8BB0","\u8D85\u65F6(\u4EE5\u6BEB\u79D2\u4E3A\u5355\u4F4D)\uFF0C\u4E4B\u540E\u5C06\u53D6\u6D88\u5DEE\u5F02\u8BA1\u7B97\u3002\u4F7F\u75280\u8868\u793A\u6CA1\u6709\u8D85\u65F6\u3002","\u63A7\u5236\u5DEE\u5F02\u7F16\u8F91\u5668\u7684\u663E\u793A\u65B9\u5F0F\u662F\u5E76\u6392\u8FD8\u662F\u5185\u8054\u3002","\u542F\u7528\u540E\uFF0C\u5DEE\u5F02\u7F16\u8F91\u5668\u5C06\u5FFD\u7565\u524D\u5BFC\u7A7A\u683C\u6216\u5C3E\u968F\u7A7A\u683C\u4E2D\u7684\u66F4\u6539\u3002","\u63A7\u5236\u5DEE\u5F02\u7F16\u8F91\u5668\u662F\u5426\u4E3A\u6DFB\u52A0/\u5220\u9664\u7684\u66F4\u6539\u663E\u793A +/- \u6307\u793A\u7B26\u53F7\u3002","\u63A7\u5236\u662F\u5426\u5728\u7F16\u8F91\u5668\u4E2D\u663E\u793A CodeLens\u3002","\u6C38\u4E0D\u6362\u884C\u3002","\u5C06\u5728\u89C6\u533A\u5BBD\u5EA6\u5904\u6362\u884C\u3002","\u5C06\u6839\u636E `#editor.wordWrap#` \u8BBE\u7F6E\u6362\u884C\u3002"],"vs/editor/common/config/editorOptions":["\u7F16\u8F91\u5668\u5C06\u4F7F\u7528\u5E73\u53F0 API \u4EE5\u68C0\u6D4B\u662F\u5426\u9644\u52A0\u4E86\u5C4F\u5E55\u9605\u8BFB\u5668\u3002","\u7F16\u8F91\u5668\u5C06\u9488\u5BF9\u4E0E\u5C4F\u5E55\u9605\u8BFB\u5668\u642D\u914D\u4F7F\u7528\u8FDB\u884C\u6C38\u4E45\u4F18\u5316\u3002\u5C06\u7981\u7528\u81EA\u52A8\u6362\u884C\u3002","\u7F16\u8F91\u5668\u5C06\u4E0D\u518D\u5BF9\u5C4F\u5E55\u9605\u8BFB\u5668\u7684\u4F7F\u7528\u8FDB\u884C\u4F18\u5316\u3002","\u63A7\u5236\u7F16\u8F91\u5668\u662F\u5426\u5E94\u5728\u5BF9\u5C4F\u5E55\u9605\u8BFB\u5668\u8FDB\u884C\u4E86\u4F18\u5316\u7684\u6A21\u5F0F\u4E0B\u8FD0\u884C\u3002\u8BBE\u7F6E\u4E3A\u201C\u5F00\u201D\u5C06\u7981\u7528\u81EA\u52A8\u6362\u884C\u3002","\u63A7\u5236\u5728\u6CE8\u91CA\u65F6\u662F\u5426\u63D2\u5165\u7A7A\u683C\u5B57\u7B26\u3002","\u63A7\u5236\u5728\u5BF9\u884C\u6CE8\u91CA\u6267\u884C\u5207\u6362\u3001\u6DFB\u52A0\u6216\u5220\u9664\u64CD\u4F5C\u65F6\uFF0C\u662F\u5426\u5E94\u5FFD\u7565\u7A7A\u884C\u3002","\u63A7\u5236\u5728\u6CA1\u6709\u9009\u62E9\u5185\u5BB9\u65F6\u8FDB\u884C\u590D\u5236\u662F\u5426\u590D\u5236\u5F53\u524D\u884C\u3002","\u63A7\u5236\u5728\u952E\u5165\u65F6\u5149\u6807\u662F\u5426\u5E94\u8DF3\u8F6C\u4EE5\u67E5\u627E\u5339\u914D\u9879\u3002","\u63A7\u5236\u662F\u5426\u5C06\u7F16\u8F91\u5668\u9009\u4E2D\u5185\u5BB9\u4F5C\u4E3A\u641C\u7D22\u8BCD\u586B\u5165\u5230\u67E5\u627E\u5C0F\u7EC4\u4EF6\u4E2D\u3002","\u5207\u52FF\u81EA\u52A8\u6253\u5F00\u201C\u9009\u62E9\u4E2D\u67E5\u627E\u201D(\u9ED8\u8BA4)","\u59CB\u7EC8\u81EA\u52A8\u6253\u5F00\u201C\u5728\u9009\u62E9\u4E2D\u67E5\u627E\u201D","\u9009\u62E9\u591A\u884C\u5185\u5BB9\u65F6\uFF0C\u81EA\u52A8\u6253\u5F00\u201C\u5728\u9009\u62E9\u4E2D\u67E5\u627E\u201D\u3002","\u63A7\u5236\u5728\u6240\u9009\u5185\u5BB9\u4E2D\u81EA\u52A8\u5F00\u542F\u67E5\u627E\u7684\u6761\u4EF6\u3002","\u63A7\u5236\u201C\u67E5\u627E\u201D\u5C0F\u7EC4\u4EF6\u662F\u5426\u8BFB\u53D6\u6216\u4FEE\u6539 macOS \u7684\u5171\u4EAB\u67E5\u627E\u526A\u8D34\u677F\u3002",'\u63A7\u5236 "\u67E5\u627E\u5C0F\u90E8\u4EF6" \u662F\u5426\u5E94\u5728\u7F16\u8F91\u5668\u9876\u90E8\u6DFB\u52A0\u989D\u5916\u7684\u884C\u3002\u5982\u679C\u4E3A true, \u5219\u53EF\u4EE5\u5728 "\u67E5\u627E\u5C0F\u5DE5\u5177" \u53EF\u89C1\u65F6\u6EDA\u52A8\u5230\u7B2C\u4E00\u884C\u4E4B\u5916\u3002',"\u63A7\u5236\u5728\u627E\u4E0D\u5230\u5176\u4ED6\u5339\u914D\u9879\u65F6\uFF0C\u662F\u5426\u81EA\u52A8\u4ECE\u5F00\u5934(\u6216\u7ED3\u5C3E)\u91CD\u65B0\u5F00\u59CB\u641C\u7D22\u3002",'\u542F\u7528/\u7981\u7528\u5B57\u4F53\u8FDE\u5B57("calt" \u548C "liga" \u5B57\u4F53\u7279\u6027)\u3002\u5C06\u6B64\u66F4\u6539\u4E3A\u5B57\u7B26\u4E32\uFF0C\u53EF\u5BF9 "font-feature-settings" CSS \u5C5E\u6027\u8FDB\u884C\u7CBE\u7EC6\u63A7\u5236\u3002','\u663E\u5F0F "font-feature-settings" CSS \u5C5E\u6027\u3002\u5982\u679C\u53EA\u9700\u6253\u5F00/\u5173\u95ED\u8FDE\u5B57\uFF0C\u53EF\u4EE5\u6539\u4E3A\u4F20\u9012\u5E03\u5C14\u503C\u3002','\u914D\u7F6E\u5B57\u4F53\u8FDE\u5B57\u6216\u5B57\u4F53\u7279\u6027\u3002\u53EF\u4EE5\u662F\u7528\u4E8E\u542F\u7528/\u7981\u7528\u8FDE\u5B57\u7684\u5E03\u5C14\u503C\uFF0C\u6216\u7528\u4E8E\u8BBE\u7F6E CSS "font-feature-settings" \u5C5E\u6027\u503C\u7684\u5B57\u7B26\u4E32\u3002',"\u63A7\u5236\u5B57\u4F53\u5927\u5C0F(\u50CF\u7D20)\u3002","\u4EC5\u5141\u8BB8\u4F7F\u7528\u5173\u952E\u5B57\u201C\u6B63\u5E38\u201D\u548C\u201C\u52A0\u7C97\u201D\uFF0C\u6216\u4F7F\u7528\u4ECB\u4E8E 1 \u81F3 1000 \u4E4B\u95F4\u7684\u6570\u5B57\u3002","\u63A7\u5236\u5B57\u4F53\u7C97\u7EC6\u3002\u63A5\u53D7\u5173\u952E\u5B57\u201C\u6B63\u5E38\u201D\u548C\u201C\u52A0\u7C97\u201D\uFF0C\u6216\u8005\u63A5\u53D7\u4ECB\u4E8E 1 \u81F3 1000 \u4E4B\u95F4\u7684\u6570\u5B57\u3002","\u663E\u793A\u7ED3\u679C\u7684\u9884\u89C8\u89C6\u56FE (\u9ED8\u8BA4\u503C)","\u8F6C\u5230\u4E3B\u7ED3\u679C\u5E76\u663E\u793A\u9884\u89C8\u89C6\u56FE","\u8F6C\u5230\u4E3B\u7ED3\u679C\uFF0C\u5E76\u5BF9\u5176\u4ED6\u4EBA\u542F\u7528\u9632\u5077\u7AA5\u5BFC\u822A",'\u6B64\u8BBE\u7F6E\u5DF2\u5F03\u7528\uFF0C\u8BF7\u6539\u7528\u5355\u72EC\u7684\u8BBE\u7F6E\uFF0C\u5982"editor.editor.gotoLocation.multipleDefinitions"\u6216"editor.editor.gotoLocation.multipleImplementations"\u3002','\u63A7\u5236\u5B58\u5728\u591A\u4E2A\u76EE\u6807\u4F4D\u7F6E\u65F6"\u8F6C\u5230\u5B9A\u4E49"\u547D\u4EE4\u7684\u884C\u4E3A\u3002','\u63A7\u5236\u5B58\u5728\u591A\u4E2A\u76EE\u6807\u4F4D\u7F6E\u65F6"\u8F6C\u5230\u7C7B\u578B\u5B9A\u4E49"\u547D\u4EE4\u7684\u884C\u4E3A\u3002','\u63A7\u5236\u5B58\u5728\u591A\u4E2A\u76EE\u6807\u4F4D\u7F6E\u65F6"\u8F6C\u5230\u58F0\u660E"\u547D\u4EE4\u7684\u884C\u4E3A\u3002','\u63A7\u5236\u5B58\u5728\u591A\u4E2A\u76EE\u6807\u4F4D\u7F6E\u65F6"\u8F6C\u5230\u5B9E\u73B0"\u547D\u4EE4\u7684\u884C\u4E3A\u3002','\u63A7\u5236\u5B58\u5728\u591A\u4E2A\u76EE\u6807\u4F4D\u7F6E\u65F6"\u8F6C\u5230\u5F15\u7528"\u547D\u4EE4\u7684\u884C\u4E3A\u3002','\u5F53"\u8F6C\u5230\u5B9A\u4E49"\u7684\u7ED3\u679C\u4E3A\u5F53\u524D\u4F4D\u7F6E\u65F6\u5C06\u8981\u6267\u884C\u7684\u66FF\u4EE3\u547D\u4EE4\u7684 ID\u3002','\u5F53"\u8F6C\u5230\u7C7B\u578B\u5B9A\u4E49"\u7684\u7ED3\u679C\u662F\u5F53\u524D\u4F4D\u7F6E\u65F6\u6B63\u5728\u6267\u884C\u7684\u5907\u7528\u547D\u4EE4 ID\u3002','\u5F53"\u8F6C\u5230\u58F0\u660E"\u7684\u7ED3\u679C\u4E3A\u5F53\u524D\u4F4D\u7F6E\u65F6\u5C06\u8981\u6267\u884C\u7684\u66FF\u4EE3\u547D\u4EE4\u7684 ID\u3002','\u5F53"\u8F6C\u5230\u5B9E\u73B0"\u7684\u7ED3\u679C\u4E3A\u5F53\u524D\u4F4D\u7F6E\u65F6\u5C06\u8981\u6267\u884C\u7684\u66FF\u4EE3\u547D\u4EE4\u7684 ID\u3002','\u5F53"\u8F6C\u5230\u5F15\u7528"\u7684\u7ED3\u679C\u662F\u5F53\u524D\u4F4D\u7F6E\u65F6\u6B63\u5728\u6267\u884C\u7684\u66FF\u4EE3\u547D\u4EE4 ID\u3002',"\u63A7\u5236\u662F\u5426\u663E\u793A\u60AC\u505C\u63D0\u793A\u3002","\u63A7\u5236\u663E\u793A\u60AC\u505C\u63D0\u793A\u524D\u7684\u7B49\u5F85\u65F6\u95F4 (\u6BEB\u79D2)\u3002","\u63A7\u5236\u5F53\u9F20\u6807\u79FB\u52A8\u5230\u60AC\u505C\u63D0\u793A\u4E0A\u65F6\uFF0C\u5176\u662F\u5426\u4FDD\u6301\u53EF\u89C1\u3002","\u5728\u7F16\u8F91\u5668\u4E2D\u542F\u7528\u4EE3\u7801\u64CD\u4F5C\u5C0F\u706F\u6CE1\u63D0\u793A\u3002","\u5728\u7F16\u8F91\u5668\u4E2D\u542F\u7528\u5185\u8054\u63D0\u793A\u3002","\u5728\u7F16\u8F91\u5668\u4E2D\u63A7\u5236\u5185\u8054\u63D0\u793A\u7684\u5B57\u53F7\u3002\u8BBE\u7F6E\u4E3A `0` \u65F6\uFF0C\u5C06\u4F7F\u7528 `#editor.fontSize#` \u7684 90%\u3002","\u5728\u7F16\u8F91\u5668\u4E2D\u63A7\u5236\u5185\u8054\u63D0\u793A\u7684\u5B57\u4F53\u7CFB\u5217\u3002","\u63A7\u5236\u884C\u9AD8\u3002\u4E3A 0 \u65F6\u5219\u901A\u8FC7\u5B57\u4F53\u5927\u5C0F\u81EA\u52A8\u8BA1\u7B97\u3002","\u63A7\u5236\u662F\u5426\u663E\u793A\u7F29\u7565\u56FE\u3002","\u8FF7\u4F60\u5730\u56FE\u7684\u5927\u5C0F\u4E0E\u7F16\u8F91\u5668\u5185\u5BB9\u76F8\u540C(\u5E76\u4E14\u53EF\u80FD\u6EDA\u52A8)\u3002","\u8FF7\u4F60\u5730\u56FE\u5C06\u6839\u636E\u9700\u8981\u62C9\u4F38\u6216\u7F29\u5C0F\u4EE5\u586B\u5145\u7F16\u8F91\u5668\u7684\u9AD8\u5EA6(\u4E0D\u6EDA\u52A8)\u3002","\u8FF7\u4F60\u5730\u56FE\u5C06\u6839\u636E\u9700\u8981\u7F29\u5C0F\uFF0C\u6C38\u8FDC\u4E0D\u4F1A\u5927\u4E8E\u7F16\u8F91\u5668(\u4E0D\u6EDA\u52A8)\u3002","\u63A7\u5236\u8FF7\u4F60\u5730\u56FE\u7684\u5927\u5C0F\u3002","\u63A7\u5236\u5728\u54EA\u4E00\u4FA7\u663E\u793A\u7F29\u7565\u56FE\u3002","\u63A7\u5236\u4F55\u65F6\u663E\u793A\u8FF7\u4F60\u5730\u56FE\u6ED1\u5757\u3002","\u5728\u8FF7\u4F60\u5730\u56FE\u4E2D\u7ED8\u5236\u7684\u5185\u5BB9\u6BD4\u4F8B: 1\u30012 \u6216 3\u3002","\u6E32\u67D3\u6BCF\u884C\u7684\u5B9E\u9645\u5B57\u7B26\uFF0C\u800C\u4E0D\u662F\u8272\u5757\u3002","\u9650\u5236\u7F29\u7565\u56FE\u7684\u5BBD\u5EA6\uFF0C\u63A7\u5236\u5176\u6700\u591A\u663E\u793A\u7684\u5217\u6570\u3002","\u63A7\u5236\u7F16\u8F91\u5668\u7684\u9876\u8FB9\u548C\u7B2C\u4E00\u884C\u4E4B\u95F4\u7684\u95F4\u8DDD\u91CF\u3002","\u63A7\u5236\u7F16\u8F91\u5668\u7684\u5E95\u8FB9\u548C\u6700\u540E\u4E00\u884C\u4E4B\u95F4\u7684\u95F4\u8DDD\u91CF\u3002","\u5728\u8F93\u5165\u65F6\u663E\u793A\u542B\u6709\u53C2\u6570\u6587\u6863\u548C\u7C7B\u578B\u4FE1\u606F\u7684\u5C0F\u9762\u677F\u3002","\u63A7\u5236\u53C2\u6570\u63D0\u793A\u83DC\u5355\u5728\u5230\u8FBE\u5217\u8868\u672B\u5C3E\u65F6\u8FDB\u884C\u5FAA\u73AF\u8FD8\u662F\u5173\u95ED\u3002","\u5728\u5B57\u7B26\u4E32\u5185\u542F\u7528\u5FEB\u901F\u5EFA\u8BAE\u3002","\u5728\u6CE8\u91CA\u5185\u542F\u7528\u5FEB\u901F\u5EFA\u8BAE\u3002","\u5728\u5B57\u7B26\u4E32\u548C\u6CE8\u91CA\u5916\u542F\u7528\u5FEB\u901F\u5EFA\u8BAE\u3002","\u63A7\u5236\u662F\u5426\u5728\u952E\u5165\u65F6\u81EA\u52A8\u663E\u793A\u5EFA\u8BAE\u3002","\u4E0D\u663E\u793A\u884C\u53F7\u3002","\u5C06\u884C\u53F7\u663E\u793A\u4E3A\u7EDD\u5BF9\u884C\u6570\u3002","\u5C06\u884C\u53F7\u663E\u793A\u4E3A\u4E0E\u5149\u6807\u76F8\u9694\u7684\u884C\u6570\u3002","\u6BCF 10 \u884C\u663E\u793A\u4E00\u6B21\u884C\u53F7\u3002","\u63A7\u5236\u884C\u53F7\u7684\u663E\u793A\u3002","\u6B64\u7F16\u8F91\u5668\u6807\u5C3A\u5C06\u6E32\u67D3\u7684\u7B49\u5BBD\u5B57\u7B26\u6570\u3002","\u6B64\u7F16\u8F91\u5668\u6807\u5C3A\u7684\u989C\u8272\u3002","\u5728\u4E00\u5B9A\u6570\u91CF\u7684\u7B49\u5BBD\u5B57\u7B26\u540E\u663E\u793A\u5782\u76F4\u6807\u5C3A\u3002\u8F93\u5165\u591A\u4E2A\u503C\uFF0C\u663E\u793A\u591A\u4E2A\u6807\u5C3A\u3002\u82E5\u6570\u7EC4\u4E3A\u7A7A\uFF0C\u5219\u4E0D\u7ED8\u5236\u6807\u5C3A\u3002","\u63D2\u5165\u5EFA\u8BAE\u800C\u4E0D\u8986\u76D6\u5149\u6807\u53F3\u4FA7\u7684\u6587\u672C\u3002","\u63D2\u5165\u5EFA\u8BAE\u5E76\u8986\u76D6\u5149\u6807\u53F3\u4FA7\u7684\u6587\u672C\u3002","\u63A7\u5236\u63A5\u53D7\u8865\u5168\u65F6\u662F\u5426\u8986\u76D6\u5355\u8BCD\u3002\u8BF7\u6CE8\u610F\uFF0C\u8FD9\u53D6\u51B3\u4E8E\u6269\u5C55\u9009\u62E9\u4F7F\u7528\u6B64\u529F\u80FD\u3002","\u63A7\u5236\u5BF9\u5EFA\u8BAE\u7684\u7B5B\u9009\u548C\u6392\u5E8F\u662F\u5426\u8003\u8651\u5C0F\u7684\u62FC\u5199\u9519\u8BEF\u3002","\u63A7\u5236\u6392\u5E8F\u65F6\u662F\u5426\u63D0\u9AD8\u9760\u8FD1\u5149\u6807\u7684\u8BCD\u8BED\u7684\u4F18\u5148\u7EA7\u3002","\u63A7\u5236\u662F\u5426\u5728\u591A\u4E2A\u5DE5\u4F5C\u533A\u548C\u7A97\u53E3\u95F4\u5171\u4EAB\u8BB0\u5FC6\u7684\u5EFA\u8BAE\u9009\u9879(\u9700\u8981 `#editor.suggestSelection#`)\u3002","\u63A7\u5236\u6D3B\u52A8\u4EE3\u7801\u6BB5\u662F\u5426\u963B\u6B62\u5FEB\u901F\u5EFA\u8BAE\u3002","\u63A7\u5236\u662F\u5426\u5728\u5EFA\u8BAE\u4E2D\u663E\u793A\u6216\u9690\u85CF\u56FE\u6807\u3002","\u63A7\u5236\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u5E95\u90E8\u7684\u72B6\u6001\u680F\u7684\u53EF\u89C1\u6027\u3002","\u63A7\u5236\u5EFA\u8BAE\u8BE6\u7EC6\u4FE1\u606F\u662F\u968F\u6807\u7B7E\u4E00\u8D77\u663E\u793A\u8FD8\u662F\u4EC5\u663E\u793A\u5728\u8BE6\u7EC6\u4FE1\u606F\u5C0F\u7EC4\u4EF6\u4E2D","\u6B64\u8BBE\u7F6E\u5DF2\u5F03\u7528\u3002\u73B0\u5728\u53EF\u4EE5\u8C03\u6574\u5EFA\u8BAE\u5C0F\u7EC4\u4EF6\u7684\u5927\u5C0F\u3002",'\u6B64\u8BBE\u7F6E\u5DF2\u5F03\u7528\uFF0C\u8BF7\u6539\u7528\u5355\u72EC\u7684\u8BBE\u7F6E\uFF0C\u5982"editor.suggest.showKeywords"\u6216"editor.suggest.showSnippets"\u3002',"\u542F\u7528\u540E\uFF0CIntelliSense \u5C06\u663E\u793A\u201C\u65B9\u6CD5\u201D\u5EFA\u8BAE\u3002","\u542F\u7528\u540E\uFF0CIntelliSense \u5C06\u663E\u793A\u201C\u51FD\u6570\u201D\u5EFA\u8BAE\u3002","\u542F\u7528\u540E\uFF0CIntelliSense \u5C06\u663E\u793A\u201C\u6784\u9020\u51FD\u6570\u201D\u5EFA\u8BAE\u3002","\u542F\u7528\u540E\uFF0CIntelliSense \u5C06\u663E\u793A\u201C\u5B57\u6BB5\u201D\u5EFA\u8BAE\u3002","\u542F\u7528\u540E\uFF0CIntelliSense \u5C06\u663E\u793A\u201C\u53D8\u91CF\u201D\u5EFA\u8BAE\u3002","\u542F\u7528\u540E\uFF0CIntelliSense \u5C06\u663E\u793A\u201C\u7C7B\u201D\u5EFA\u8BAE\u3002","\u542F\u7528\u540E\uFF0CIntelliSense \u5C06\u663E\u793A\u201C\u7ED3\u6784\u201D\u5EFA\u8BAE\u3002","\u542F\u7528\u540E\uFF0CIntelliSense \u5C06\u663E\u793A\u201C\u63A5\u53E3\u201D\u5EFA\u8BAE\u3002","\u542F\u7528\u540E\uFF0CIntelliSense \u5C06\u663E\u793A\u201C\u6A21\u5757\u201D\u5EFA\u8BAE\u3002","\u542F\u7528\u540E\uFF0CIntelliSense \u5C06\u663E\u793A\u201C\u5C5E\u6027\u201D\u5EFA\u8BAE\u3002","\u542F\u7528\u540E\uFF0CIntelliSense \u5C06\u663E\u793A\u201C\u4E8B\u4EF6\u201D\u5EFA\u8BAE\u3002","\u542F\u7528\u540E\uFF0CIntelliSense \u5C06\u663E\u793A\u201C\u64CD\u4F5C\u7B26\u201D\u5EFA\u8BAE\u3002","\u542F\u7528\u540E\uFF0CIntelliSense \u5C06\u663E\u793A\u201C\u5355\u4F4D\u201D\u5EFA\u8BAE\u3002","\u542F\u7528\u540E\uFF0CIntelliSense \u5C06\u663E\u793A\u201C\u503C\u201D\u5EFA\u8BAE\u3002","\u542F\u7528\u540E\uFF0CIntelliSense \u5C06\u663E\u793A\u201C\u5E38\u91CF\u201D\u5EFA\u8BAE\u3002","\u542F\u7528\u540E\uFF0CIntelliSense \u5C06\u663E\u793A\u201C\u679A\u4E3E\u201D\u5EFA\u8BAE\u3002",'\u542F\u7528\u540E\uFF0CIntelliSense \u5C06\u663E\u793A "enumMember" \u5EFA\u8BAE\u3002',"\u542F\u7528\u540E\uFF0CIntelliSense \u5C06\u663E\u793A\u201C\u5173\u952E\u5B57\u201D\u5EFA\u8BAE\u3002","\u542F\u7528\u540E\uFF0CIntelliSense \u5C06\u663E\u793A\u201C\u6587\u672C\u201D\u5EFA\u8BAE\u3002","\u542F\u7528\u540E\uFF0CIntelliSense \u5C06\u663E\u793A\u201C\u989C\u8272\u201D\u5EFA\u8BAE\u3002","\u542F\u7528\u540E\uFF0CIntelliSense \u5C06\u663E\u793A\u201C\u6587\u4EF6\u201D\u5EFA\u8BAE\u3002","\u542F\u7528\u540E\uFF0CIntelliSense \u5C06\u663E\u793A\u201C\u53C2\u8003\u201D\u5EFA\u8BAE\u3002","\u542F\u7528\u540E\uFF0CIntelliSense \u5C06\u663E\u793A\u201C\u81EA\u5B9A\u4E49\u989C\u8272\u201D\u5EFA\u8BAE\u3002","\u542F\u7528\u540E\uFF0CIntelliSense \u5C06\u663E\u793A\u201C\u6587\u4EF6\u5939\u201D\u5EFA\u8BAE\u3002",'\u542F\u7528\u540E\uFF0CIntelliSense \u5C06\u663E\u793A "typeParameter" \u5EFA\u8BAE\u3002',"\u542F\u7528\u540E\uFF0CIntelliSense \u5C06\u663E\u793A\u201C\u7247\u6BB5\u201D\u5EFA\u8BAE\u3002",'\u542F\u7528\u540E\uFF0CIntelliSense \u5C06\u663E\u793A"\u7528\u6237"\u5EFA\u8BAE\u3002','\u542F\u7528\u540E\uFF0CIntelliSense \u5C06\u663E\u793A"\u95EE\u9898"\u5EFA\u8BAE\u3002',"\u662F\u5426\u5E94\u59CB\u7EC8\u9009\u62E9\u524D\u5BFC\u548C\u5C3E\u968F\u7A7A\u683C\u3002","\u63A7\u5236\u662F\u5426\u5E94\u5728\u9047\u5230\u63D0\u4EA4\u5B57\u7B26\u65F6\u63A5\u53D7\u5EFA\u8BAE\u3002\u4F8B\u5982\uFF0C\u5728 JavaScript \u4E2D\uFF0C\u534A\u89D2\u5206\u53F7 (`;`) \u53EF\u4EE5\u4E3A\u63D0\u4EA4\u5B57\u7B26\uFF0C\u80FD\u591F\u5728\u63A5\u53D7\u5EFA\u8BAE\u7684\u540C\u65F6\u952E\u5165\u8BE5\u5B57\u7B26\u3002","\u4EC5\u5F53\u5EFA\u8BAE\u5305\u542B\u6587\u672C\u6539\u52A8\u65F6\u624D\u53EF\u4F7F\u7528 `Enter` \u952E\u8FDB\u884C\u63A5\u53D7\u3002","\u63A7\u5236\u9664\u4E86 `Tab` \u952E\u4EE5\u5916\uFF0C `Enter` \u952E\u662F\u5426\u540C\u6837\u53EF\u4EE5\u63A5\u53D7\u5EFA\u8BAE\u3002\u8FD9\u80FD\u51CF\u5C11\u201C\u63D2\u5165\u65B0\u884C\u201D\u548C\u201C\u63A5\u53D7\u5EFA\u8BAE\u201D\u547D\u4EE4\u4E4B\u95F4\u7684\u6B67\u4E49\u3002","\u63A7\u5236\u7F16\u8F91\u5668\u4E2D\u53EF\u7531\u5C4F\u5E55\u9605\u8BFB\u5668\u8BFB\u53D6\u7684\u884C\u6570\u3002\u8B66\u544A: \u5BF9\u4E8E\u5927\u4E8E\u9ED8\u8BA4\u503C\u7684\u6570\u5B57\uFF0C\u8FD9\u4F1A\u5F71\u54CD\u6027\u80FD\u3002","\u7F16\u8F91\u5668\u5185\u5BB9","\u4F7F\u7528\u8BED\u8A00\u914D\u7F6E\u786E\u5B9A\u4F55\u65F6\u81EA\u52A8\u95ED\u5408\u62EC\u53F7\u3002","\u4EC5\u5F53\u5149\u6807\u4F4D\u4E8E\u7A7A\u767D\u5B57\u7B26\u5DE6\u4FA7\u65F6\uFF0C\u624D\u81EA\u52A8\u95ED\u5408\u62EC\u53F7\u3002","\u63A7\u5236\u7F16\u8F91\u5668\u662F\u5426\u5728\u5DE6\u62EC\u53F7\u540E\u81EA\u52A8\u63D2\u5165\u53F3\u62EC\u53F7\u3002","\u4EC5\u5728\u81EA\u52A8\u63D2\u5165\u65F6\u624D\u6539\u5199\u53F3\u5F15\u53F7\u6216\u53F3\u62EC\u53F7\u3002","\u63A7\u5236\u7F16\u8F91\u5668\u662F\u5426\u5E94\u6539\u5199\u53F3\u5F15\u53F7\u6216\u53F3\u62EC\u53F7\u3002","\u4F7F\u7528\u8BED\u8A00\u914D\u7F6E\u786E\u5B9A\u4F55\u65F6\u81EA\u52A8\u95ED\u5408\u5F15\u53F7\u3002","\u4EC5\u5F53\u5149\u6807\u4F4D\u4E8E\u7A7A\u767D\u5B57\u7B26\u5DE6\u4FA7\u65F6\uFF0C\u624D\u81EA\u52A8\u95ED\u5408\u5F15\u53F7\u3002","\u63A7\u5236\u7F16\u8F91\u5668\u662F\u5426\u5728\u5DE6\u5F15\u53F7\u540E\u81EA\u52A8\u63D2\u5165\u53F3\u5F15\u53F7\u3002","\u7F16\u8F91\u5668\u4E0D\u4F1A\u81EA\u52A8\u63D2\u5165\u7F29\u8FDB\u3002","\u7F16\u8F91\u5668\u5C06\u4FDD\u7559\u5F53\u524D\u884C\u7684\u7F29\u8FDB\u3002","\u7F16\u8F91\u5668\u5C06\u4FDD\u7559\u5F53\u524D\u884C\u7684\u7F29\u8FDB\u5E76\u9075\u5FAA\u8BED\u8A00\u5B9A\u4E49\u7684\u62EC\u53F7\u3002","\u7F16\u8F91\u5668\u5C06\u4FDD\u7559\u5F53\u524D\u884C\u7684\u7F29\u8FDB\u3001\u4F7F\u7528\u8BED\u8A00\u5B9A\u4E49\u7684\u62EC\u53F7\u5E76\u8C03\u7528\u8BED\u8A00\u5B9A\u4E49\u7684\u7279\u5B9A onEnterRules\u3002","\u7F16\u8F91\u5668\u5C06\u4FDD\u7559\u5F53\u524D\u884C\u7684\u7F29\u8FDB\uFF0C\u4F7F\u7528\u8BED\u8A00\u5B9A\u4E49\u7684\u62EC\u53F7\uFF0C\u8C03\u7528\u7531\u8BED\u8A00\u5B9A\u4E49\u7684\u7279\u6B8A\u8F93\u5165\u89C4\u5219\uFF0C\u5E76\u9075\u5FAA\u7531\u8BED\u8A00\u5B9A\u4E49\u7684\u7F29\u8FDB\u89C4\u5219\u3002","\u63A7\u5236\u7F16\u8F91\u5668\u662F\u5426\u5E94\u5728\u7528\u6237\u952E\u5165\u3001\u7C98\u8D34\u3001\u79FB\u52A8\u6216\u7F29\u8FDB\u884C\u65F6\u81EA\u52A8\u8C03\u6574\u7F29\u8FDB\u3002","\u4F7F\u7528\u8BED\u8A00\u914D\u7F6E\u786E\u5B9A\u4F55\u65F6\u81EA\u52A8\u5305\u4F4F\u6240\u9009\u5185\u5BB9\u3002","\u4F7F\u7528\u5F15\u53F7\u800C\u975E\u62EC\u53F7\u6765\u5305\u4F4F\u6240\u9009\u5185\u5BB9\u3002","\u4F7F\u7528\u62EC\u53F7\u800C\u975E\u5F15\u53F7\u6765\u5305\u4F4F\u6240\u9009\u5185\u5BB9\u3002","\u63A7\u5236\u5728\u952E\u5165\u5F15\u53F7\u6216\u65B9\u62EC\u53F7\u65F6\uFF0C\u7F16\u8F91\u5668\u662F\u5426\u5E94\u81EA\u52A8\u5C06\u6240\u9009\u5185\u5BB9\u62EC\u8D77\u6765\u3002","\u5728\u4F7F\u7528\u7A7A\u683C\u8FDB\u884C\u7F29\u8FDB\u65F6\u6A21\u62DF\u5236\u8868\u7B26\u7684\u9009\u62E9\u884C\u4E3A\u3002\u6240\u9009\u5185\u5BB9\u5C06\u59CB\u7EC8\u4F7F\u7528\u5236\u8868\u7B26\u505C\u6B62\u4F4D\u3002","\u63A7\u5236\u662F\u5426\u5728\u7F16\u8F91\u5668\u4E2D\u663E\u793A CodeLens\u3002","\u63A7\u5236 CodeLens \u7684\u5B57\u4F53\u7CFB\u5217\u3002","\u63A7\u5236 CodeLens \u7684\u5B57\u4F53\u5927\u5C0F(\u50CF\u7D20)\u3002\u8BBE\u7F6E\u4E3A `0` \u65F6\uFF0C\u5C06\u4F7F\u7528 `#editor.fontSize#` \u7684 90%\u3002","\u63A7\u5236\u7F16\u8F91\u5668\u662F\u5426\u663E\u793A\u5185\u8054\u989C\u8272\u4FEE\u9970\u5668\u548C\u989C\u8272\u9009\u53D6\u5668\u3002","\u542F\u7528\u4F7F\u7528\u9F20\u6807\u548C\u952E\u8FDB\u884C\u5217\u9009\u62E9\u3002","\u63A7\u5236\u5728\u590D\u5236\u65F6\u662F\u5426\u540C\u65F6\u590D\u5236\u8BED\u6CD5\u9AD8\u4EAE\u3002","\u63A7\u5236\u5149\u6807\u7684\u52A8\u753B\u6837\u5F0F\u3002","\u63A7\u5236\u662F\u5426\u542F\u7528\u5E73\u6ED1\u63D2\u5165\u52A8\u753B\u3002","\u63A7\u5236\u5149\u6807\u6837\u5F0F\u3002",'\u63A7\u5236\u5149\u6807\u5468\u56F4\u53EF\u89C1\u7684\u524D\u7F6E\u884C\u548C\u5C3E\u968F\u884C\u7684\u6700\u5C0F\u6570\u76EE\u3002\u5728\u5176\u4ED6\u4E00\u4E9B\u7F16\u8F91\u5668\u4E2D\u79F0\u4E3A "scrollOff" \u6216 "scrollOffset"\u3002','\u4EC5\u5F53\u901A\u8FC7\u952E\u76D8\u6216 API \u89E6\u53D1\u65F6\uFF0C\u624D\u4F1A\u5F3A\u5236\u6267\u884C"\u5149\u6807\u73AF\u7ED5\u884C"\u3002','\u59CB\u7EC8\u5F3A\u5236\u6267\u884C "cursorSurroundingLines"','\u63A7\u5236\u4F55\u65F6\u5E94\u5F3A\u5236\u6267\u884C"\u5149\u6807\u73AF\u7ED5\u884C"\u3002',"\u5F53 `#editor.cursorStyle#` \u8BBE\u7F6E\u4E3A `line` \u65F6\uFF0C\u63A7\u5236\u5149\u6807\u7684\u5BBD\u5EA6\u3002","\u63A7\u5236\u5728\u7F16\u8F91\u5668\u4E2D\u662F\u5426\u5141\u8BB8\u901A\u8FC7\u62D6\u653E\u6765\u79FB\u52A8\u9009\u4E2D\u5185\u5BB9\u3002",'\u6309\u4E0B"Alt"\u65F6\u6EDA\u52A8\u901F\u5EA6\u500D\u589E\u3002',"\u63A7\u5236\u7F16\u8F91\u5668\u662F\u5426\u542F\u7528\u4E86\u4EE3\u7801\u6298\u53E0\u3002","\u4F7F\u7528\u7279\u5B9A\u4E8E\u8BED\u8A00\u7684\u6298\u53E0\u7B56\u7565(\u5982\u679C\u53EF\u7528)\uFF0C\u5426\u5219\u4F7F\u7528\u57FA\u4E8E\u7F29\u8FDB\u7684\u7B56\u7565\u3002","\u4F7F\u7528\u57FA\u4E8E\u7F29\u8FDB\u7684\u6298\u53E0\u7B56\u7565\u3002","\u63A7\u5236\u8BA1\u7B97\u6298\u53E0\u8303\u56F4\u7684\u7B56\u7565\u3002","\u63A7\u5236\u7F16\u8F91\u5668\u662F\u5426\u5E94\u7A81\u51FA\u663E\u793A\u6298\u53E0\u8303\u56F4\u3002","\u63A7\u5236\u5355\u51FB\u5DF2\u6298\u53E0\u7684\u884C\u540E\u9762\u7684\u7A7A\u5185\u5BB9\u662F\u5426\u4F1A\u5C55\u5F00\u8BE5\u884C\u3002","\u63A7\u5236\u5B57\u4F53\u7CFB\u5217\u3002","\u63A7\u5236\u7F16\u8F91\u5668\u662F\u5426\u81EA\u52A8\u683C\u5F0F\u5316\u7C98\u8D34\u7684\u5185\u5BB9\u3002\u683C\u5F0F\u5316\u7A0B\u5E8F\u5FC5\u987B\u53EF\u7528\uFF0C\u5E76\u4E14\u80FD\u9488\u5BF9\u6587\u6863\u4E2D\u7684\u67D0\u4E00\u8303\u56F4\u8FDB\u884C\u683C\u5F0F\u5316\u3002","\u63A7\u5236\u7F16\u8F91\u5668\u5728\u952E\u5165\u4E00\u884C\u540E\u662F\u5426\u81EA\u52A8\u683C\u5F0F\u5316\u8BE5\u884C\u3002","\u63A7\u5236\u7F16\u8F91\u5668\u662F\u5426\u5E94\u5448\u73B0\u5782\u76F4\u5B57\u5F62\u8FB9\u8DDD\u3002\u5B57\u5F62\u8FB9\u8DDD\u6700\u5E38\u7528\u4E8E\u8C03\u8BD5\u3002","\u63A7\u5236\u662F\u5426\u5728\u6982\u89C8\u6807\u5C3A\u4E2D\u9690\u85CF\u5149\u6807\u3002","\u63A7\u5236\u662F\u5426\u7A81\u51FA\u663E\u793A\u7F16\u8F91\u5668\u4E2D\u6D3B\u52A8\u7684\u7F29\u8FDB\u53C2\u8003\u7EBF\u3002","\u63A7\u5236\u5B57\u6BCD\u95F4\u8DDD(\u50CF\u7D20)\u3002","\u63A7\u5236\u7F16\u8F91\u5668\u662F\u5426\u5DF2\u542F\u7528\u94FE\u63A5\u7F16\u8F91\u3002\u76F8\u5173\u7B26\u53F7(\u5982 HTML \u6807\u8BB0)\u5728\u7F16\u8F91\u65F6\u8FDB\u884C\u66F4\u65B0\uFF0C\u5177\u4F53\u7531\u8BED\u8A00\u800C\u5B9A\u3002","\u63A7\u5236\u662F\u5426\u5728\u7F16\u8F91\u5668\u4E2D\u68C0\u6D4B\u94FE\u63A5\u5E76\u4F7F\u5176\u53EF\u88AB\u70B9\u51FB\u3002","\u7A81\u51FA\u663E\u793A\u5339\u914D\u7684\u62EC\u53F7\u3002","\u5BF9\u9F20\u6807\u6EDA\u8F6E\u6EDA\u52A8\u4E8B\u4EF6\u7684 `deltaX` \u548C `deltaY` \u4E58\u4E0A\u7684\u7CFB\u6570\u3002","\u6309\u4F4F `Ctrl` \u952E\u5E76\u6EDA\u52A8\u9F20\u6807\u6EDA\u8F6E\u65F6\u5BF9\u7F16\u8F91\u5668\u5B57\u4F53\u5927\u5C0F\u8FDB\u884C\u7F29\u653E\u3002","\u5F53\u591A\u4E2A\u5149\u6807\u91CD\u53E0\u65F6\u8FDB\u884C\u5408\u5E76\u3002","\u6620\u5C04\u4E3A `Ctrl` (Windows \u548C Linux) \u6216 `Command` (macOS)\u3002","\u6620\u5C04\u4E3A `Alt` (Windows \u548C Linux) \u6216 `Option` (macOS)\u3002","\u5728\u901A\u8FC7\u9F20\u6807\u6DFB\u52A0\u591A\u4E2A\u5149\u6807\u65F6\u4F7F\u7528\u7684\u4FEE\u6539\u952E\u3002\u201C\u8F6C\u5230\u5B9A\u4E49\u201D\u548C\u201C\u6253\u5F00\u94FE\u63A5\u201D\u529F\u80FD\u6240\u9700\u7684\u9F20\u6807\u52A8\u4F5C\u5C06\u4F1A\u76F8\u5E94\u8C03\u6574\uFF0C\u4E0D\u4E0E\u591A\u5149\u6807\u4FEE\u6539\u952E\u51B2\u7A81\u3002[\u9605\u8BFB\u8BE6\u7EC6\u4FE1\u606F](https://code.visualstudio.com/docs/editor/codebasics#_multicursor-modifier)\u3002","\u6BCF\u4E2A\u5149\u6807\u7C98\u8D34\u4E00\u884C\u6587\u672C\u3002","\u6BCF\u4E2A\u5149\u6807\u7C98\u8D34\u5168\u6587\u3002","\u63A7\u5236\u7C98\u8D34\u65F6\u7C98\u8D34\u6587\u672C\u7684\u884C\u8BA1\u6570\u4E0E\u5149\u6807\u8BA1\u6570\u76F8\u5339\u914D\u3002","\u63A7\u5236\u7F16\u8F91\u5668\u662F\u5426\u7A81\u51FA\u663E\u793A\u8BED\u4E49\u7B26\u53F7\u7684\u5339\u914D\u9879\u3002","\u63A7\u5236\u662F\u5426\u5728\u6982\u89C8\u6807\u5C3A\u5468\u56F4\u7ED8\u5236\u8FB9\u6846\u3002","\u6253\u5F00\u901F\u89C8\u65F6\u805A\u7126\u6811","\u6253\u5F00\u9884\u89C8\u65F6\u5C06\u7126\u70B9\u653E\u5728\u7F16\u8F91\u5668\u4E0A","\u63A7\u5236\u662F\u5C06\u7126\u70B9\u653E\u5728\u5185\u8054\u7F16\u8F91\u5668\u4E0A\u8FD8\u662F\u653E\u5728\u9884\u89C8\u5C0F\u90E8\u4EF6\u4E2D\u7684\u6811\u4E0A\u3002",'\u63A7\u5236"\u8F6C\u5230\u5B9A\u4E49"\u9F20\u6807\u624B\u52BF\u662F\u5426\u59CB\u7EC8\u6253\u5F00\u9884\u89C8\u5C0F\u90E8\u4EF6\u3002',"\u63A7\u5236\u663E\u793A\u5FEB\u901F\u5EFA\u8BAE\u524D\u7684\u7B49\u5F85\u65F6\u95F4 (\u6BEB\u79D2)\u3002","\u63A7\u5236\u662F\u5426\u5728\u7F16\u8F91\u5668\u4E2D\u8F93\u5165\u65F6\u81EA\u52A8\u91CD\u547D\u540D\u3002",'\u5DF2\u5F03\u7528\uFF0C\u8BF7\u6539\u7528 "editor.linkedEditing"\u3002',"\u63A7\u5236\u7F16\u8F91\u5668\u662F\u5426\u663E\u793A\u63A7\u5236\u5B57\u7B26\u3002","\u63A7\u5236\u7F16\u8F91\u5668\u662F\u5426\u663E\u793A\u7F29\u8FDB\u53C2\u8003\u7EBF\u3002","\u5F53\u6587\u4EF6\u4EE5\u6362\u884C\u7B26\u7ED3\u675F\u65F6, \u5448\u73B0\u6700\u540E\u4E00\u884C\u7684\u884C\u53F7\u3002","\u540C\u65F6\u7A81\u51FA\u663E\u793A\u5BFC\u822A\u7EBF\u548C\u5F53\u524D\u884C\u3002","\u63A7\u5236\u7F16\u8F91\u5668\u7684\u5F53\u524D\u884C\u8FDB\u884C\u9AD8\u4EAE\u663E\u793A\u7684\u65B9\u5F0F\u3002","\u63A7\u5236\u7F16\u8F91\u5668\u662F\u5426\u4EC5\u5728\u7126\u70B9\u5728\u7F16\u8F91\u5668\u65F6\u7A81\u51FA\u663E\u793A\u5F53\u524D\u884C","\u5448\u73B0\u7A7A\u683C\u5B57\u7B26(\u5B57\u8BCD\u4E4B\u95F4\u7684\u5355\u4E2A\u7A7A\u683C\u9664\u5916)\u3002","\u4EC5\u5728\u9009\u5B9A\u6587\u672C\u4E0A\u5448\u73B0\u7A7A\u767D\u5B57\u7B26\u3002","\u4EC5\u5448\u73B0\u5C3E\u968F\u7A7A\u683C\u5B57\u7B26","\u63A7\u5236\u7F16\u8F91\u5668\u5728\u7A7A\u767D\u5B57\u7B26\u4E0A\u663E\u793A\u7B26\u53F7\u7684\u65B9\u5F0F\u3002","\u63A7\u5236\u9009\u533A\u662F\u5426\u6709\u5706\u89D2\u3002","\u63A7\u5236\u7F16\u8F91\u5668\u6C34\u5E73\u6EDA\u52A8\u65F6\u53EF\u4EE5\u8D85\u8FC7\u8303\u56F4\u7684\u5B57\u7B26\u6570\u3002","\u63A7\u5236\u7F16\u8F91\u5668\u662F\u5426\u53EF\u4EE5\u6EDA\u52A8\u5230\u6700\u540E\u4E00\u884C\u4E4B\u540E\u3002","\u540C\u65F6\u5782\u76F4\u548C\u6C34\u5E73\u6EDA\u52A8\u65F6\uFF0C\u4EC5\u6CBF\u4E3B\u8F74\u6EDA\u52A8\u3002\u5728\u89E6\u63A7\u677F\u4E0A\u5782\u76F4\u6EDA\u52A8\u65F6\uFF0C\u53EF\u9632\u6B62\u6C34\u5E73\u6F02\u79FB\u3002","\u63A7\u5236\u662F\u5426\u652F\u6301 Linux \u4E3B\u526A\u8D34\u677F\u3002","\u63A7\u5236\u7F16\u8F91\u5668\u662F\u5426\u5E94\u7A81\u51FA\u663E\u793A\u4E0E\u6240\u9009\u5185\u5BB9\u7C7B\u4F3C\u7684\u5339\u914D\u9879\u3002","\u59CB\u7EC8\u663E\u793A\u6298\u53E0\u63A7\u4EF6\u3002","\u4EC5\u5728\u9F20\u6807\u4F4D\u4E8E\u88C5\u8BA2\u7EBF\u4E0A\u65B9\u65F6\u663E\u793A\u6298\u53E0\u63A7\u4EF6\u3002","\u63A7\u5236\u4F55\u65F6\u663E\u793A\u884C\u53F7\u69FD\u4E0A\u7684\u6298\u53E0\u63A7\u4EF6\u3002","\u63A7\u5236\u662F\u5426\u6DE1\u5316\u672A\u4F7F\u7528\u7684\u4EE3\u7801\u3002","\u63A7\u5236\u52A0\u5220\u9664\u7EBF\u88AB\u5F03\u7528\u7684\u53D8\u91CF\u3002","\u5728\u5176\u4ED6\u5EFA\u8BAE\u4E0A\u65B9\u663E\u793A\u4EE3\u7801\u7247\u6BB5\u5EFA\u8BAE\u3002","\u5728\u5176\u4ED6\u5EFA\u8BAE\u4E0B\u65B9\u663E\u793A\u4EE3\u7801\u7247\u6BB5\u5EFA\u8BAE\u3002","\u5728\u5176\u4ED6\u5EFA\u8BAE\u4E2D\u7A7F\u63D2\u663E\u793A\u4EE3\u7801\u7247\u6BB5\u5EFA\u8BAE\u3002","\u4E0D\u663E\u793A\u4EE3\u7801\u7247\u6BB5\u5EFA\u8BAE\u3002","\u63A7\u5236\u4EE3\u7801\u7247\u6BB5\u662F\u5426\u4E0E\u5176\u4ED6\u5EFA\u8BAE\u4E00\u8D77\u663E\u793A\u53CA\u5176\u6392\u5217\u7684\u4F4D\u7F6E\u3002","\u63A7\u5236\u7F16\u8F91\u5668\u662F\u5426\u5728\u6EDA\u52A8\u65F6\u4F7F\u7528\u52A8\u753B\u3002","\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u7684\u5B57\u53F7\u3002\u5982\u679C\u8BBE\u7F6E\u4E3A `0`\uFF0C\u5219\u4F7F\u7528 `#editor.fontSize#` \u7684\u503C\u3002","\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u7684\u884C\u9AD8\u3002\u5982\u679C\u8BBE\u7F6E\u4E3A `0`\uFF0C\u5219\u4F7F\u7528 `#editor.lineHeight#` \u7684\u503C\u3002\u6700\u5C0F\u503C\u4E3A 8\u3002","\u63A7\u5236\u5728\u952E\u5165\u89E6\u53D1\u5B57\u7B26\u540E\u662F\u5426\u81EA\u52A8\u663E\u793A\u5EFA\u8BAE\u3002","\u59CB\u7EC8\u9009\u62E9\u7B2C\u4E00\u4E2A\u5EFA\u8BAE\u3002","\u9009\u62E9\u6700\u8FD1\u7684\u5EFA\u8BAE\uFF0C\u9664\u975E\u8FDB\u4E00\u6B65\u952E\u5165\u9009\u62E9\u5176\u4ED6\u9879\u3002\u4F8B\u5982 `console. -> console.log`\uFF0C\u56E0\u4E3A\u6700\u8FD1\u8865\u5168\u8FC7 `log`\u3002","\u6839\u636E\u4E4B\u524D\u8865\u5168\u8FC7\u7684\u5EFA\u8BAE\u7684\u524D\u7F00\u6765\u8FDB\u884C\u9009\u62E9\u3002\u4F8B\u5982\uFF0C`co -> console`\u3001`con -> const`\u3002","\u63A7\u5236\u5728\u5EFA\u8BAE\u5217\u8868\u4E2D\u5982\u4F55\u9884\u5148\u9009\u62E9\u5EFA\u8BAE\u3002","\u5728\u6309\u4E0B Tab \u952E\u65F6\u8FDB\u884C Tab \u8865\u5168\uFF0C\u5C06\u63D2\u5165\u6700\u4F73\u5339\u914D\u5EFA\u8BAE\u3002","\u7981\u7528 Tab \u8865\u5168\u3002",'\u5728\u524D\u7F00\u5339\u914D\u65F6\u8FDB\u884C Tab \u8865\u5168\u3002\u5728 "quickSuggestions" \u672A\u542F\u7528\u65F6\u4F53\u9A8C\u6700\u597D\u3002',"\u542F\u7528 Tab \u8865\u5168\u3002","\u81EA\u52A8\u5220\u9664\u5F02\u5E38\u7684\u884C\u7EC8\u6B62\u7B26\u3002","\u5FFD\u7565\u5F02\u5E38\u7684\u884C\u7EC8\u6B62\u7B26\u3002","\u63D0\u793A\u5220\u9664\u5F02\u5E38\u7684\u884C\u7EC8\u6B62\u7B26\u3002","\u5220\u9664\u53EF\u80FD\u5BFC\u81F4\u95EE\u9898\u7684\u5F02\u5E38\u884C\u7EC8\u6B62\u7B26\u3002","\u6839\u636E\u5236\u8868\u4F4D\u63D2\u5165\u548C\u5220\u9664\u7A7A\u683C\u3002","\u6267\u884C\u5355\u8BCD\u76F8\u5173\u7684\u5BFC\u822A\u6216\u64CD\u4F5C\u65F6\u4F5C\u4E3A\u5355\u8BCD\u5206\u9694\u7B26\u7684\u5B57\u7B26\u3002","\u6C38\u4E0D\u6362\u884C\u3002","\u5C06\u5728\u89C6\u533A\u5BBD\u5EA6\u5904\u6362\u884C\u3002","\u5728 `#editor.wordWrapColumn#` \u5904\u6298\u884C\u3002","\u5728\u89C6\u533A\u5BBD\u5EA6\u548C `#editor.wordWrapColumn#` \u4E2D\u7684\u8F83\u5C0F\u503C\u5904\u6298\u884C\u3002","\u63A7\u5236\u6298\u884C\u7684\u65B9\u5F0F\u3002","\u5728 `#editor.wordWrap#` \u4E3A `wordWrapColumn` \u6216 `bounded` \u65F6\uFF0C\u63A7\u5236\u7F16\u8F91\u5668\u7684\u6298\u884C\u5217\u3002","\u6CA1\u6709\u7F29\u8FDB\u3002\u6298\u884C\u4ECE\u7B2C 1 \u5217\u5F00\u59CB\u3002","\u6298\u884C\u7684\u7F29\u8FDB\u91CF\u4E0E\u5176\u7236\u7EA7\u76F8\u540C\u3002","\u6298\u884C\u7684\u7F29\u8FDB\u91CF\u6BD4\u5176\u7236\u7EA7\u591A 1\u3002","\u6298\u884C\u7684\u7F29\u8FDB\u91CF\u6BD4\u5176\u7236\u7EA7\u591A 2\u3002","\u63A7\u5236\u6298\u884C\u7684\u7F29\u8FDB\u3002","\u5047\u5B9A\u6240\u6709\u5B57\u7B26\u7684\u5BBD\u5EA6\u76F8\u540C\u3002\u8FD9\u662F\u4E00\u79CD\u5FEB\u901F\u7B97\u6CD5\uFF0C\u9002\u7528\u4E8E\u7B49\u5BBD\u5B57\u4F53\u548C\u67D0\u4E9B\u5B57\u5F62\u5BBD\u5EA6\u76F8\u7B49\u7684\u6587\u5B57(\u5982\u62C9\u4E01\u5B57\u7B26)\u3002","\u5C06\u5305\u88C5\u70B9\u8BA1\u7B97\u59D4\u6258\u7ED9\u6D4F\u89C8\u5668\u3002\u8FD9\u662F\u4E00\u4E2A\u7F13\u6162\u7B97\u6CD5\uFF0C\u53EF\u80FD\u4F1A\u5BFC\u81F4\u5927\u578B\u6587\u4EF6\u88AB\u51BB\u7ED3\uFF0C\u4F46\u5B83\u5728\u6240\u6709\u60C5\u51B5\u4E0B\u90FD\u6B63\u5E38\u5DE5\u4F5C\u3002","\u63A7\u5236\u8BA1\u7B97\u5305\u88F9\u70B9\u7684\u7B97\u6CD5\u3002"],"vs/editor/common/editorContextKeys":["Whether the editor text has focus (cursor is blinking)","Whether the editor or an editor widget has focus (e.g. focus is in the find widget)","Whether an editor or a rich text input has focus (cursor is blinking)","Whether the editor is read only","Whether the context is a diff editor","Whether `editor.columnSelection` is enabled","Whether the editor has text selected","Whether the editor has multiple selections","Whether `Tab` will move focus out of the editor","Whether the editor hover is visible","Whether the editor is part of a larger editor (e.g. notebooks)","The language identifier of the editor","Whether the editor has a completion item provider","Whether the editor has a code actions provider","Whether the editor has a code lens provider","Whether the editor has a definition provider","Whether the editor has a declaration provider","Whether the editor has an implementation provider","Whether the editor has a type definition provider","Whether the editor has a hover provider","Whether the editor has a document highlight provider","Whether the editor has a document symbol provider","Whether the editor has a reference provider","Whether the editor has a rename provider","Whether the editor has a signature help provider","Whether the editor has an inline hints provider","Whether the editor has a document formatting provider","Whether the editor has a document selection formatting provider","Whether the editor has multiple document formatting providers","Whether the editor has multiple document selection formatting providers"],"vs/editor/common/model/editStack":["\u8F93\u5165"],"vs/editor/common/modes/modesRegistry":["\u7EAF\u6587\u672C"],"vs/editor/common/standaloneStrings":["\u65E0\u9009\u62E9","\u884C {0}, \u5217 {1} (\u9009\u4E2D {2})","\u884C {0}, \u5217 {1}","{0} \u9009\u62E9(\u5DF2\u9009\u62E9 {1} \u4E2A\u5B57\u7B26)","{0} \u9009\u62E9",'\u73B0\u5728\u5C06 "\u8F85\u52A9\u529F\u80FD\u652F\u6301" \u8BBE\u7F6E\u66F4\u6539\u4E3A "\u6253\u5F00"\u3002',"\u73B0\u5728\u6B63\u5728\u6253\u5F00\u201C\u7F16\u8F91\u5668\u8F85\u52A9\u529F\u80FD\u201D\u6587\u6863\u9875\u3002","\u5728\u5DEE\u5F02\u7F16\u8F91\u5668\u7684\u53EA\u8BFB\u7A97\u683C\u4E2D\u3002","\u5728\u4E00\u4E2A\u5DEE\u5F02\u7F16\u8F91\u5668\u7684\u7A97\u683C\u4E2D\u3002","\u5728\u53EA\u8BFB\u4EE3\u7801\u7F16\u8F91\u5668\u4E2D","\u5728\u4EE3\u7801\u7F16\u8F91\u5668\u4E2D","\u82E5\u8981\u914D\u7F6E\u7F16\u8F91\u5668\uFF0C\u5C06\u5176\u8FDB\u884C\u4F18\u5316\u4EE5\u6700\u597D\u5730\u914D\u5408\u5C4F\u5E55\u9605\u8BFB\u5668\u7684\u4F7F\u7528\uFF0C\u8BF7\u7ACB\u5373\u6309 Command+E\u3002","\u82E5\u8981\u914D\u7F6E\u7F16\u8F91\u5668\uFF0C\u5C06\u5176\u8FDB\u884C\u4F18\u5316\u4EE5\u6700\u9AD8\u6548\u5730\u914D\u5408\u5C4F\u5E55\u9605\u8BFB\u5668\u7684\u4F7F\u7528\uFF0C\u6309\u4E0B Ctrl+E\u3002","\u914D\u7F6E\u7F16\u8F91\u5668\uFF0C\u5C06\u5176\u8FDB\u884C\u4F18\u5316\u4EE5\u6700\u597D\u5730\u914D\u5408\u5C4F\u5E55\u8BFB\u53D6\u5668\u7684\u4F7F\u7528\u3002","\u7F16\u8F91\u5668\u88AB\u914D\u7F6E\u4E3A\u6C38\u8FDC\u4E0D\u8FDB\u884C\u4F18\u5316\u4EE5\u914D\u5408\u5C4F\u5E55\u8BFB\u53D6\u5668\u7684\u4F7F\u7528, \u800C\u5F53\u524D\u4E0D\u662F\u8FD9\u79CD\u60C5\u51B5\u3002","\u5728\u5F53\u524D\u7F16\u8F91\u5668\u4E2D\u6309 Tab \u4F1A\u5C06\u7126\u70B9\u79FB\u52A8\u5230\u4E0B\u4E00\u4E2A\u53EF\u805A\u7126\u7684\u5143\u7D20\u3002\u901A\u8FC7\u6309 {0} \u5207\u6362\u6B64\u884C\u4E3A\u3002","\u5728\u5F53\u524D\u7F16\u8F91\u5668\u4E2D\u6309 Tab \u4F1A\u5C06\u7126\u70B9\u79FB\u52A8\u5230\u4E0B\u4E00\u4E2A\u53EF\u805A\u7126\u7684\u5143\u7D20\u3002\u5F53\u524D\u65E0\u6CD5\u901A\u8FC7\u6309\u952E\u7ED1\u5B9A\u89E6\u53D1\u547D\u4EE4 {0}\u3002","\u5728\u5F53\u524D\u7F16\u8F91\u5668\u4E2D\u6309 Tab \u5C06\u63D2\u5165\u5236\u8868\u7B26\u3002\u901A\u8FC7\u6309 {0} \u5207\u6362\u6B64\u884C\u4E3A\u3002","\u5728\u5F53\u524D\u7F16\u8F91\u5668\u4E2D\u6309 Tab \u4F1A\u63D2\u5165\u5236\u8868\u7B26\u3002\u5F53\u524D\u65E0\u6CD5\u901A\u8FC7\u952E\u7ED1\u5B9A\u89E6\u53D1\u547D\u4EE4 {0}\u3002","\u73B0\u5728\u6309 Command+H \u6253\u5F00\u4E00\u4E2A\u6D4F\u89C8\u5668\u7A97\u53E3, \u5176\u4E2D\u5305\u542B\u6709\u5173\u7F16\u8F91\u5668\u8F85\u52A9\u529F\u80FD\u7684\u8BE6\u7EC6\u4FE1\u606F\u3002","\u73B0\u5728\u6309 Ctrl+H \u6253\u5F00\u4E00\u4E2A\u6D4F\u89C8\u5668\u7A97\u53E3, \u5176\u4E2D\u5305\u542B\u6709\u5173\u7F16\u8F91\u5668\u8F85\u52A9\u529F\u80FD\u7684\u66F4\u591A\u4FE1\u606F\u3002","\u4F60\u53EF\u4EE5\u6309 Esc \u6216 Shift+Esc \u6D88\u9664\u6B64\u5DE5\u5177\u63D0\u793A\u5E76\u8FD4\u56DE\u5230\u7F16\u8F91\u5668\u3002","\u663E\u793A\u8F85\u52A9\u529F\u80FD\u5E2E\u52A9","\u5F00\u53D1\u4EBA\u5458: \u68C0\u67E5\u4EE4\u724C","\u8F6C\u5230\u884C/\u5217...","\u663E\u793A\u6240\u6709\u5FEB\u901F\u8BBF\u95EE\u63D0\u4F9B\u7A0B\u5E8F","\u547D\u4EE4\u9762\u677F","\u663E\u793A\u5E76\u8FD0\u884C\u547D\u4EE4","\u8F6C\u5230\u7B26\u53F7...","\u6309\u7C7B\u522B\u8F6C\u5230\u7B26\u53F7...","\u7F16\u8F91\u5668\u5185\u5BB9","\u6309 Alt+F1 \u53EF\u6253\u5F00\u8F85\u52A9\u529F\u80FD\u9009\u9879\u3002","\u5207\u6362\u9AD8\u5BF9\u6BD4\u5EA6\u4E3B\u9898","\u5728 {1} \u4E2A\u6587\u4EF6\u4E2D\u8FDB\u884C\u4E86 {0} \u6B21\u7F16\u8F91"],"vs/editor/common/view/editorColorRegistry":["\u5149\u6807\u6240\u5728\u884C\u9AD8\u4EAE\u5185\u5BB9\u7684\u80CC\u666F\u989C\u8272\u3002","\u5149\u6807\u6240\u5728\u884C\u56DB\u5468\u8FB9\u6846\u7684\u80CC\u666F\u989C\u8272\u3002","\u80CC\u666F\u989C\u8272\u7684\u9AD8\u4EAE\u8303\u56F4\uFF0C\u559C\u6B22\u901A\u8FC7\u5FEB\u901F\u6253\u5F00\u548C\u67E5\u627E\u529F\u80FD\u3002\u989C\u8272\u4E0D\u80FD\u4E0D\u900F\u660E\uFF0C\u4EE5\u514D\u9690\u85CF\u5E95\u5C42\u88C5\u9970\u3002","\u9AD8\u4EAE\u533A\u57DF\u8FB9\u6846\u7684\u80CC\u666F\u989C\u8272\u3002","\u9AD8\u4EAE\u663E\u793A\u7B26\u53F7\u7684\u80CC\u666F\u989C\u8272\uFF0C\u4F8B\u5982\u8F6C\u5230\u5B9A\u4E49\u6216\u8F6C\u5230\u4E0B\u4E00\u4E2A/\u4E0A\u4E00\u4E2A\u7B26\u53F7\u3002\u989C\u8272\u4E0D\u80FD\u662F\u4E0D\u900F\u660E\u7684\uFF0C\u4EE5\u514D\u9690\u85CF\u5E95\u5C42\u88C5\u9970\u3002","\u9AD8\u4EAE\u663E\u793A\u7B26\u53F7\u5468\u56F4\u7684\u8FB9\u6846\u7684\u80CC\u666F\u989C\u8272\u3002","\u7F16\u8F91\u5668\u5149\u6807\u989C\u8272\u3002","\u7F16\u8F91\u5668\u5149\u6807\u7684\u80CC\u666F\u8272\u3002\u53EF\u4EE5\u81EA\u5B9A\u4E49\u5757\u578B\u5149\u6807\u8986\u76D6\u5B57\u7B26\u7684\u989C\u8272\u3002","\u7F16\u8F91\u5668\u4E2D\u7A7A\u767D\u5B57\u7B26\u7684\u989C\u8272\u3002","\u7F16\u8F91\u5668\u7F29\u8FDB\u53C2\u8003\u7EBF\u7684\u989C\u8272\u3002","\u7F16\u8F91\u5668\u6D3B\u52A8\u7F29\u8FDB\u53C2\u8003\u7EBF\u7684\u989C\u8272\u3002","\u7F16\u8F91\u5668\u884C\u53F7\u7684\u989C\u8272\u3002","\u7F16\u8F91\u5668\u6D3B\u52A8\u884C\u53F7\u7684\u989C\u8272",'"Id" \u5DF2\u88AB\u5F03\u7528\uFF0C\u8BF7\u6539\u7528 "editorLineNumber.activeForeground"\u3002',"\u7F16\u8F91\u5668\u6D3B\u52A8\u884C\u53F7\u7684\u989C\u8272","\u7F16\u8F91\u5668\u6807\u5C3A\u7684\u989C\u8272\u3002","\u7F16\u8F91\u5668 CodeLens \u7684\u524D\u666F\u8272","\u5339\u914D\u62EC\u53F7\u7684\u80CC\u666F\u8272","\u5339\u914D\u62EC\u53F7\u5916\u6846\u7684\u989C\u8272","\u6982\u89C8\u6807\u5C3A\u8FB9\u6846\u7684\u989C\u8272\u3002","\u7F16\u8F91\u5668\u6982\u8FF0\u6807\u5C3A\u7684\u80CC\u666F\u8272\u3002\u4EC5\u5F53\u7F29\u7565\u56FE\u5DF2\u542F\u7528\u4E14\u7F6E\u4E8E\u7F16\u8F91\u5668\u53F3\u4FA7\u65F6\u624D\u4F7F\u7528\u3002","\u7F16\u8F91\u5668\u5BFC\u822A\u7EBF\u7684\u80CC\u666F\u8272\u3002\u5BFC\u822A\u7EBF\u5305\u62EC\u8FB9\u7F18\u7B26\u53F7\u548C\u884C\u53F7\u3002","\u7F16\u8F91\u5668\u4E2D\u4E0D\u5FC5\u8981(\u672A\u4F7F\u7528)\u7684\u6E90\u4EE3\u7801\u7684\u8FB9\u6846\u989C\u8272\u3002",'\u975E\u5FC5\u987B(\u672A\u4F7F\u7528)\u4EE3\u7801\u7684\u5728\u7F16\u8F91\u5668\u4E2D\u663E\u793A\u7684\u4E0D\u900F\u660E\u5EA6\u3002\u4F8B\u5982\uFF0C"#000000c0" \u5C06\u4EE5 75% \u7684\u4E0D\u900F\u660E\u5EA6\u663E\u793A\u4EE3\u7801\u3002\u5BF9\u4E8E\u9AD8\u5BF9\u6BD4\u5EA6\u4E3B\u9898\uFF0C\u8BF7\u4F7F\u7528 \u201DeditorUnnecessaryCode.border\u201C \u4E3B\u9898\u6765\u4E3A\u975E\u5FC5\u987B\u4EE3\u7801\u6DFB\u52A0\u4E0B\u5212\u7EBF\uFF0C\u4EE5\u907F\u514D\u989C\u8272\u6DE1\u5316\u3002',"\u7528\u4E8E\u7A81\u51FA\u663E\u793A\u8303\u56F4\u7684\u6982\u8FF0\u6807\u5C3A\u6807\u8BB0\u989C\u8272\u3002\u989C\u8272\u5FC5\u987B\u900F\u660E\uFF0C\u4EE5\u514D\u9690\u85CF\u4E0B\u9762\u7684\u4FEE\u9970\u6548\u679C\u3002","\u6982\u89C8\u6807\u5C3A\u4E2D\u9519\u8BEF\u6807\u8BB0\u7684\u989C\u8272\u3002","\u6982\u89C8\u6807\u5C3A\u4E2D\u8B66\u544A\u6807\u8BB0\u7684\u989C\u8272\u3002","\u6982\u89C8\u6807\u5C3A\u4E2D\u4FE1\u606F\u6807\u8BB0\u7684\u989C\u8272\u3002"],"vs/editor/contrib/anchorSelect/anchorSelect":["\u9009\u62E9\u5B9A\u4F4D\u70B9","\u5B9A\u4F4D\u70B9\u8BBE\u7F6E\u4E3A {0}:{1}","\u8BBE\u7F6E\u9009\u62E9\u5B9A\u4F4D\u70B9","\u8F6C\u5230\u9009\u62E9\u5B9A\u4F4D\u70B9","\u9009\u62E9\u4ECE\u5B9A\u4F4D\u70B9\u5230\u5149\u6807","\u53D6\u6D88\u9009\u62E9\u5B9A\u4F4D\u70B9"],"vs/editor/contrib/bracketMatching/bracketMatching":["\u6982\u89C8\u6807\u5C3A\u4E0A\u8868\u793A\u5339\u914D\u62EC\u53F7\u7684\u6807\u8BB0\u989C\u8272\u3002","\u8F6C\u5230\u62EC\u53F7","\u9009\u62E9\u62EC\u53F7\u6240\u6709\u5185\u5BB9","\u8F6C\u5230\u62EC\u53F7(&&B)"],"vs/editor/contrib/caretOperations/caretOperations":["\u5411\u5DE6\u79FB\u52A8\u6240\u9009\u6587\u672C","\u5411\u53F3\u79FB\u52A8\u6240\u9009\u6587\u672C"],"vs/editor/contrib/caretOperations/transpose":["\u8F6C\u7F6E\u5B57\u6BCD"],"vs/editor/contrib/clipboard/clipboard":["\u526A\u5207(&&T)","\u526A\u5207","\u526A\u5207","\u590D\u5236(&&C)","\u590D\u5236","\u590D\u5236","\u7C98\u8D34(&&P)","\u7C98\u8D34","\u7C98\u8D34","\u590D\u5236\u5E76\u7A81\u51FA\u663E\u793A\u8BED\u6CD5"],"vs/editor/contrib/codeAction/codeActionCommands":["\u8981\u8FD0\u884C\u7684\u4EE3\u7801\u64CD\u4F5C\u7684\u79CD\u7C7B\u3002","\u63A7\u5236\u4F55\u65F6\u5E94\u7528\u8FD4\u56DE\u7684\u64CD\u4F5C\u3002","\u59CB\u7EC8\u5E94\u7528\u7B2C\u4E00\u4E2A\u8FD4\u56DE\u7684\u4EE3\u7801\u64CD\u4F5C\u3002","\u5982\u679C\u4EC5\u8FD4\u56DE\u7684\u7B2C\u4E00\u4E2A\u4EE3\u7801\u64CD\u4F5C\uFF0C\u5219\u5E94\u7528\u8BE5\u64CD\u4F5C\u3002","\u4E0D\u8981\u5E94\u7528\u8FD4\u56DE\u7684\u4EE3\u7801\u64CD\u4F5C\u3002","\u5982\u679C\u53EA\u5E94\u8FD4\u56DE\u9996\u9009\u4EE3\u7801\u64CD\u4F5C\uFF0C\u5219\u5E94\u8FD4\u56DE\u63A7\u4EF6\u3002","\u5E94\u7528\u4EE3\u7801\u64CD\u4F5C\u65F6\u53D1\u751F\u672A\u77E5\u9519\u8BEF","\u5FEB\u901F\u4FEE\u590D...","\u6CA1\u6709\u53EF\u7528\u7684\u4EE3\u7801\u64CD\u4F5C",'\u6CA1\u6709\u9002\u7528\u4E8E"{0}"\u7684\u9996\u9009\u4EE3\u7801\u64CD\u4F5C','\u6CA1\u6709\u9002\u7528\u4E8E"{0}"\u7684\u4EE3\u7801\u64CD\u4F5C',"\u6CA1\u6709\u53EF\u7528\u7684\u9996\u9009\u4EE3\u7801\u64CD\u4F5C","\u6CA1\u6709\u53EF\u7528\u7684\u4EE3\u7801\u64CD\u4F5C","\u91CD\u6784...",'\u6CA1\u6709\u9002\u7528\u4E8E"{0}"\u7684\u9996\u9009\u91CD\u6784','\u6CA1\u6709\u53EF\u7528\u7684"{0}"\u91CD\u6784',"\u6CA1\u6709\u53EF\u7528\u7684\u9996\u9009\u91CD\u6784","\u6CA1\u6709\u53EF\u7528\u7684\u91CD\u6784\u64CD\u4F5C","\u6E90\u4EE3\u7801\u64CD\u4F5C...",'\u6CA1\u6709\u9002\u7528\u4E8E"{0}"\u7684\u9996\u9009\u6E90\u64CD\u4F5C',"\u6CA1\u6709\u9002\u7528\u4E8E\u201C {0}\u201D\u7684\u6E90\u64CD\u4F5C","\u6CA1\u6709\u53EF\u7528\u7684\u9996\u9009\u6E90\u64CD\u4F5C","\u6CA1\u6709\u53EF\u7528\u7684\u6E90\u4EE3\u7801\u64CD\u4F5C","\u6574\u7406 import \u8BED\u53E5","\u6CA1\u6709\u53EF\u7528\u7684\u6574\u7406 import \u8BED\u53E5\u64CD\u4F5C","\u5168\u90E8\u4FEE\u590D","\u6CA1\u6709\u53EF\u7528\u7684\u201C\u5168\u90E8\u4FEE\u590D\u201D\u64CD\u4F5C","\u81EA\u52A8\u4FEE\u590D...","\u6CA1\u6709\u53EF\u7528\u7684\u81EA\u52A8\u4FEE\u590D\u7A0B\u5E8F"],"vs/editor/contrib/codeAction/lightBulbWidget":["\u663E\u793A\u4FEE\u590D\u7A0B\u5E8F\u3002\u9996\u9009\u53EF\u7528\u4FEE\u590D\u7A0B\u5E8F ({0})","\u663E\u793A\u4FEE\u8865\u7A0B\u5E8F({0})","\u663E\u793A\u4FEE\u8865\u7A0B\u5E8F"],"vs/editor/contrib/codelens/codelensController":["\u663E\u793A\u5F53\u524D\u884C\u7684 Code Lens \u547D\u4EE4"],"vs/editor/contrib/comment/comment":["\u5207\u6362\u884C\u6CE8\u91CA","\u5207\u6362\u884C\u6CE8\u91CA(&&T)","\u6DFB\u52A0\u884C\u6CE8\u91CA","\u5220\u9664\u884C\u6CE8\u91CA","\u5207\u6362\u5757\u6CE8\u91CA","\u5207\u6362\u5757\u6CE8\u91CA(&&B)"],"vs/editor/contrib/contextmenu/contextmenu":["\u663E\u793A\u7F16\u8F91\u5668\u4E0A\u4E0B\u6587\u83DC\u5355"],"vs/editor/contrib/cursorUndo/cursorUndo":["\u5149\u6807\u64A4\u6D88","\u5149\u6807\u91CD\u505A"],"vs/editor/contrib/find/findController":["\u67E5\u627E","\u67E5\u627E(&&F)","\u67E5\u627E\u9009\u5B9A\u5185\u5BB9","\u67E5\u627E\u4E0B\u4E00\u4E2A","\u67E5\u627E\u4E0B\u4E00\u4E2A","\u67E5\u627E\u4E0A\u4E00\u4E2A","\u67E5\u627E\u4E0A\u4E00\u4E2A","\u67E5\u627E\u4E0B\u4E00\u4E2A\u9009\u62E9","\u67E5\u627E\u4E0A\u4E00\u4E2A\u9009\u62E9","\u66FF\u6362","\u66FF\u6362(&&R)"],"vs/editor/contrib/find/findWidget":["\u7F16\u8F91\u5668\u67E5\u627E\u5C0F\u7EC4\u4EF6\u4E2D\u7684\u201C\u5728\u9009\u5B9A\u5185\u5BB9\u4E2D\u67E5\u627E\u201D\u56FE\u6807\u3002","\u7528\u4E8E\u6307\u793A\u7F16\u8F91\u5668\u67E5\u627E\u5C0F\u7EC4\u4EF6\u5DF2\u6298\u53E0\u7684\u56FE\u6807\u3002","\u7528\u4E8E\u6307\u793A\u7F16\u8F91\u5668\u67E5\u627E\u5C0F\u7EC4\u4EF6\u5DF2\u5C55\u5F00\u7684\u56FE\u6807\u3002","\u7F16\u8F91\u5668\u67E5\u627E\u5C0F\u7EC4\u4EF6\u4E2D\u7684\u201C\u66FF\u6362\u201D\u56FE\u6807\u3002","\u7F16\u8F91\u5668\u67E5\u627E\u5C0F\u7EC4\u4EF6\u4E2D\u7684\u201C\u5168\u90E8\u66FF\u6362\u201D\u56FE\u6807\u3002","\u7F16\u8F91\u5668\u67E5\u627E\u5C0F\u7EC4\u4EF6\u4E2D\u7684\u201C\u67E5\u627E\u4E0A\u4E00\u4E2A\u201D\u56FE\u6807\u3002","\u7F16\u8F91\u5668\u67E5\u627E\u5C0F\u7EC4\u4EF6\u4E2D\u7684\u201C\u67E5\u627E\u4E0B\u4E00\u4E2A\u201D\u56FE\u6807\u3002","\u67E5\u627E","\u67E5\u627E","\u4E0A\u4E00\u4E2A\u5339\u914D\u9879","\u4E0B\u4E00\u4E2A\u5339\u914D\u9879","\u5728\u9009\u5B9A\u5185\u5BB9\u4E2D\u67E5\u627E","\u5173\u95ED","\u66FF\u6362","\u66FF\u6362","\u66FF\u6362","\u5168\u90E8\u66FF\u6362","\u5207\u6362\u66FF\u6362\u6A21\u5F0F","\u4EC5\u9AD8\u4EAE\u4E86\u524D {0} \u4E2A\u7ED3\u679C\uFF0C\u4F46\u6240\u6709\u67E5\u627E\u64CD\u4F5C\u5747\u9488\u5BF9\u5168\u6587\u3002","{1} \u4E2D\u7684 {0}","\u65E0\u7ED3\u679C","\u627E\u5230 {0}","\u4E3A\u201C{1}\u201D\u627E\u5230 {0}","\u5728 {2} \u5904\u627E\u5230\u201C{1}\u201D\u7684 {0}","\u4E3A\u201C{1}\u201D\u627E\u5230 {0}","Ctrl+Enter \u73B0\u5728\u7531\u5168\u90E8\u66FF\u6362\u6539\u4E3A\u63D2\u5165\u6362\u884C\u3002\u4F60\u53EF\u4EE5\u4FEE\u6539editor.action.replaceAll \u7684\u6309\u952E\u7ED1\u5B9A\u4EE5\u8986\u76D6\u6B64\u884C\u4E3A\u3002"],"vs/editor/contrib/folding/folding":["\u5C55\u5F00","\u4EE5\u9012\u5F52\u65B9\u5F0F\u5C55\u5F00","\u6298\u53E0","\u5207\u6362\u6298\u53E0","\u4EE5\u9012\u5F52\u65B9\u5F0F\u6298\u53E0","\u6298\u53E0\u6240\u6709\u5757\u6CE8\u91CA","\u6298\u53E0\u6240\u6709\u533A\u57DF","\u5C55\u5F00\u6240\u6709\u533A\u57DF","\u5168\u90E8\u6298\u53E0","\u5168\u90E8\u5C55\u5F00","\u6298\u53E0\u7EA7\u522B {0}","\u6298\u53E0\u8303\u56F4\u540E\u9762\u7684\u80CC\u666F\u989C\u8272\u3002\u989C\u8272\u5FC5\u987B\u8BBE\u4E3A\u900F\u660E\uFF0C\u4EE5\u514D\u9690\u85CF\u5E95\u5C42\u88C5\u9970\u3002","\u7F16\u8F91\u5668\u88C5\u8BA2\u7EBF\u4E2D\u6298\u53E0\u63A7\u4EF6\u7684\u989C\u8272\u3002"],"vs/editor/contrib/folding/foldingDecorations":["\u7F16\u8F91\u5668\u5B57\u5F62\u8FB9\u8DDD\u4E2D\u5DF2\u5C55\u5F00\u7684\u8303\u56F4\u7684\u56FE\u6807\u3002","\u7F16\u8F91\u5668\u5B57\u5F62\u8FB9\u8DDD\u4E2D\u5DF2\u6298\u53E0\u7684\u8303\u56F4\u7684\u56FE\u6807\u3002"],"vs/editor/contrib/fontZoom/fontZoom":["\u653E\u5927\u7F16\u8F91\u5668\u5B57\u4F53","\u7F29\u5C0F\u7F16\u8F91\u5668\u5B57\u4F53","\u91CD\u7F6E\u7F16\u8F91\u5668\u5B57\u4F53\u5927\u5C0F"],"vs/editor/contrib/format/format":["\u5728\u7B2C {0} \u884C\u8FDB\u884C\u4E86 1 \u6B21\u683C\u5F0F\u7F16\u8F91","\u5728\u7B2C {1} \u884C\u8FDB\u884C\u4E86 {0} \u6B21\u683C\u5F0F\u7F16\u8F91","\u7B2C {0} \u884C\u5230\u7B2C {1} \u884C\u95F4\u8FDB\u884C\u4E86 1 \u6B21\u683C\u5F0F\u7F16\u8F91","\u7B2C {1} \u884C\u5230\u7B2C {2} \u884C\u95F4\u8FDB\u884C\u4E86 {0} \u6B21\u683C\u5F0F\u7F16\u8F91"],"vs/editor/contrib/format/formatActions":["\u683C\u5F0F\u5316\u6587\u6863","\u683C\u5F0F\u5316\u9009\u5B9A\u5185\u5BB9"],"vs/editor/contrib/gotoError/gotoError":["\u8F6C\u5230\u4E0B\u4E00\u4E2A\u95EE\u9898 (\u9519\u8BEF\u3001\u8B66\u544A\u3001\u4FE1\u606F)","\u201C\u8F6C\u5230\u4E0B\u4E00\u4E2A\u201D\u6807\u8BB0\u7684\u56FE\u6807\u3002","\u8F6C\u5230\u4E0A\u4E00\u4E2A\u95EE\u9898 (\u9519\u8BEF\u3001\u8B66\u544A\u3001\u4FE1\u606F)","\u201C\u8F6C\u5230\u4E0A\u4E00\u4E2A\u201D\u6807\u8BB0\u7684\u56FE\u6807\u3002","\u8F6C\u5230\u6587\u4EF6\u4E2D\u7684\u4E0B\u4E00\u4E2A\u95EE\u9898 (\u9519\u8BEF\u3001\u8B66\u544A\u3001\u4FE1\u606F)","\u4E0B\u4E00\u4E2A\u95EE\u9898(&&P)","\u8F6C\u5230\u6587\u4EF6\u4E2D\u7684\u4E0A\u4E00\u4E2A\u95EE\u9898 (\u9519\u8BEF\u3001\u8B66\u544A\u3001\u4FE1\u606F)","\u4E0A\u4E00\u4E2A\u95EE\u9898(&&P)"],"vs/editor/contrib/gotoError/gotoErrorWidget":["\u9519\u8BEF","\u8B66\u544A","\u4FE1\u606F","\u63D0\u793A","{1} \u4E2D\u7684 {0}","{0} \u4E2A\u95EE\u9898(\u5171 {1} \u4E2A)","{0} \u4E2A\u95EE\u9898(\u5171 {1} \u4E2A)","\u7F16\u8F91\u5668\u6807\u8BB0\u5BFC\u822A\u5C0F\u7EC4\u4EF6\u9519\u8BEF\u989C\u8272\u3002","\u7F16\u8F91\u5668\u6807\u8BB0\u5BFC\u822A\u5C0F\u7EC4\u4EF6\u8B66\u544A\u989C\u8272\u3002","\u7F16\u8F91\u5668\u6807\u8BB0\u5BFC\u822A\u5C0F\u7EC4\u4EF6\u4FE1\u606F\u989C\u8272\u3002","\u7F16\u8F91\u5668\u6807\u8BB0\u5BFC\u822A\u5C0F\u7EC4\u4EF6\u80CC\u666F\u8272\u3002"],"vs/editor/contrib/gotoSymbol/goToCommands":["\u5FEB\u901F\u67E5\u770B","\u5B9A\u4E49","\u672A\u627E\u5230\u201C{0}\u201D\u7684\u4EFB\u4F55\u5B9A\u4E49","\u627E\u4E0D\u5230\u5B9A\u4E49","\u8F6C\u5230\u5B9A\u4E49","\u8F6C\u5230\u5B9A\u4E49(&&D)","\u6253\u5F00\u4FA7\u8FB9\u7684\u5B9A\u4E49","\u901F\u89C8\u5B9A\u4E49","\u58F0\u660E","\u672A\u627E\u5230\u201C{0}\u201D\u7684\u58F0\u660E","\u672A\u627E\u5230\u58F0\u660E","\u8F6C\u5230\u58F0\u660E",'\u8F6C\u5230"\u58F0\u660E"(&&D)',"\u672A\u627E\u5230\u201C{0}\u201D\u7684\u58F0\u660E","\u672A\u627E\u5230\u58F0\u660E","\u67E5\u770B\u58F0\u660E","\u7C7B\u578B\u5B9A\u4E49","\u672A\u627E\u5230\u201C{0}\u201D\u7684\u7C7B\u578B\u5B9A\u4E49","\u672A\u627E\u5230\u7C7B\u578B\u5B9A\u4E49","\u8F6C\u5230\u7C7B\u578B\u5B9A\u4E49","\u8F6C\u5230\u7C7B\u578B\u5B9A\u4E49(&&T)","\u5FEB\u901F\u67E5\u770B\u7C7B\u578B\u5B9A\u4E49","\u5B9E\u73B0","\u672A\u627E\u5230\u201C{0}\u201D\u7684\u5B9E\u73B0","\u672A\u627E\u5230\u5B9E\u73B0","\u8F6C\u5230\u5B9E\u73B0","\u8DF3\u8F6C\u5230\u5B9E\u73B0(&&I)","\u67E5\u770B\u5B9E\u73B0",'\u672A\u627E\u5230"{0}"\u7684\u5F15\u7528',"\u672A\u627E\u5230\u5F15\u7528","\u8F6C\u5230\u5F15\u7528","\u8F6C\u5230\u5F15\u7528(&&R)","\u5F15\u7528","\u67E5\u770B\u5F15\u7528","\u5F15\u7528","\u8F6C\u5230\u4EFB\u4F55\u7B26\u53F7","\u4F4D\u7F6E","\u65E0\u201C{0}\u201D\u7684\u7ED3\u679C","\u5F15\u7528"],"vs/editor/contrib/gotoSymbol/link/goToDefinitionAtPosition":["\u5355\u51FB\u663E\u793A {0} \u4E2A\u5B9A\u4E49\u3002"],"vs/editor/contrib/gotoSymbol/peek/referencesController":["\u6B63\u5728\u52A0\u8F7D...","{0} ({1})"],"vs/editor/contrib/gotoSymbol/peek/referencesTree":["{0} \u4E2A\u5F15\u7528","{0} \u4E2A\u5F15\u7528","\u5F15\u7528"],"vs/editor/contrib/gotoSymbol/peek/referencesWidget":["\u65E0\u53EF\u7528\u9884\u89C8","\u65E0\u7ED3\u679C","\u5F15\u7528"],"vs/editor/contrib/gotoSymbol/referencesModel":["\u5728\u6587\u4EF6 {0} \u7684 {1} \u884C {2} \u5217\u7684\u7B26\u53F7","{0} \u4E2D {1} \u884C {2} \u5217\u7684\u7B26\u53F7\uFF0C{3}","{0} \u4E2D\u6709 1 \u4E2A\u7B26\u53F7\uFF0C\u5B8C\u6574\u8DEF\u5F84: {1}","{1} \u4E2D\u6709 {0} \u4E2A\u7B26\u53F7\uFF0C\u5B8C\u6574\u8DEF\u5F84: {2}","\u672A\u627E\u5230\u7ED3\u679C","\u5728 {0} \u4E2D\u627E\u5230 1 \u4E2A\u7B26\u53F7","\u5728 {1} \u4E2D\u627E\u5230 {0} \u4E2A\u7B26\u53F7","\u5728 {1} \u4E2A\u6587\u4EF6\u4E2D\u627E\u5230 {0} \u4E2A\u7B26\u53F7"],"vs/editor/contrib/gotoSymbol/symbolNavigation":["{1} \u7684\u7B26\u53F7 {0}\uFF0C\u4E0B\u4E00\u4E2A\u4F7F\u7528 {2}","{1} \u7684\u7B26\u53F7 {0}"],"vs/editor/contrib/hover/hover":["\u663E\u793A\u60AC\u505C","\u663E\u793A\u5B9A\u4E49\u9884\u89C8\u60AC\u505C"],"vs/editor/contrib/hover/markdownHoverParticipant":["\u6B63\u5728\u52A0\u8F7D..."],"vs/editor/contrib/hover/markerHoverParticipant":["View Problem","\u6CA1\u6709\u53EF\u7528\u7684\u5FEB\u901F\u4FEE\u590D","\u6B63\u5728\u68C0\u67E5\u5FEB\u901F\u4FEE\u590D...","\u6CA1\u6709\u53EF\u7528\u7684\u5FEB\u901F\u4FEE\u590D","\u5FEB\u901F\u4FEE\u590D..."],"vs/editor/contrib/inPlaceReplace/inPlaceReplace":["\u66FF\u6362\u4E3A\u4E0A\u4E00\u4E2A\u503C","\u66FF\u6362\u4E3A\u4E0B\u4E00\u4E2A\u503C"],"vs/editor/contrib/indentation/indentation":["\u5C06\u7F29\u8FDB\u8F6C\u6362\u4E3A\u7A7A\u683C","\u5C06\u7F29\u8FDB\u8F6C\u6362\u4E3A\u5236\u8868\u7B26","\u5DF2\u914D\u7F6E\u5236\u8868\u7B26\u5927\u5C0F","\u9009\u62E9\u5F53\u524D\u6587\u4EF6\u7684\u5236\u8868\u7B26\u5927\u5C0F",'\u4F7F\u7528 "Tab" \u7F29\u8FDB',"\u4F7F\u7528\u7A7A\u683C\u7F29\u8FDB","\u4ECE\u5185\u5BB9\u4E2D\u68C0\u6D4B\u7F29\u8FDB\u65B9\u5F0F","\u91CD\u65B0\u7F29\u8FDB\u884C","\u91CD\u65B0\u7F29\u8FDB\u6240\u9009\u884C"],"vs/editor/contrib/linesOperations/linesOperations":["\u5411\u4E0A\u590D\u5236\u884C","\u5411\u4E0A\u590D\u5236\u884C(&&C)","\u5411\u4E0B\u590D\u5236\u884C","\u5411\u4E0B\u590D\u5236\u4E00\u884C(&&P)","\u91CD\u590D\u9009\u62E9","\u91CD\u590D\u9009\u62E9(&&D)","\u5411\u4E0A\u79FB\u52A8\u884C","\u5411\u4E0A\u79FB\u52A8\u4E00\u884C(&&V)","\u5411\u4E0B\u79FB\u52A8\u884C","\u5411\u4E0B\u79FB\u52A8\u4E00\u884C(&&L)","\u6309\u5347\u5E8F\u6392\u5217\u884C","\u6309\u964D\u5E8F\u6392\u5217\u884C","\u88C1\u526A\u5C3E\u968F\u7A7A\u683C","\u5220\u9664\u884C","\u884C\u7F29\u8FDB","\u884C\u51CF\u5C11\u7F29\u8FDB","\u5728\u4E0A\u9762\u63D2\u5165\u884C","\u5728\u4E0B\u9762\u63D2\u5165\u884C","\u5220\u9664\u5DE6\u4FA7\u6240\u6709\u5185\u5BB9","\u5220\u9664\u53F3\u4FA7\u6240\u6709\u5185\u5BB9","\u5408\u5E76\u884C","\u8F6C\u7F6E\u5149\u6807\u5904\u7684\u5B57\u7B26","\u8F6C\u6362\u4E3A\u5927\u5199","\u8F6C\u6362\u4E3A\u5C0F\u5199","\u8F6C\u6362\u4E3A\u8BCD\u9996\u5B57\u6BCD\u5927\u5199","\u8F6C\u6362\u4E3A\u86C7\u5F62\u547D\u540D\u6CD5"],"vs/editor/contrib/linkedEditing/linkedEditing":["\u542F\u52A8\u94FE\u63A5\u7F16\u8F91","\u7F16\u8F91\u5668\u6839\u636E\u7C7B\u578B\u81EA\u52A8\u91CD\u547D\u540D\u65F6\u7684\u80CC\u666F\u8272\u3002"],"vs/editor/contrib/links/links":["\u6267\u884C\u547D\u4EE4","\u5173\u6CE8\u94FE\u63A5","cmd + \u5355\u51FB","ctrl + \u5355\u51FB","option + \u5355\u51FB","alt + \u5355\u51FB","\u6267\u884C\u547D\u4EE4 {0}","\u6B64\u94FE\u63A5\u683C\u5F0F\u4E0D\u6B63\u786E\uFF0C\u65E0\u6CD5\u6253\u5F00: {0}","\u6B64\u94FE\u63A5\u76EE\u6807\u5DF2\u4E22\u5931\uFF0C\u65E0\u6CD5\u6253\u5F00\u3002","\u6253\u5F00\u94FE\u63A5"],"vs/editor/contrib/message/messageController":["Whether the editor is currently showing an inline message","\u65E0\u6CD5\u5728\u53EA\u8BFB\u7F16\u8F91\u5668\u4E2D\u7F16\u8F91"],"vs/editor/contrib/multicursor/multicursor":["\u5728\u4E0A\u9762\u6DFB\u52A0\u5149\u6807","\u5728\u4E0A\u9762\u6DFB\u52A0\u5149\u6807(&&A)","\u5728\u4E0B\u9762\u6DFB\u52A0\u5149\u6807","\u5728\u4E0B\u9762\u6DFB\u52A0\u5149\u6807(&&D)","\u5728\u884C\u5C3E\u6DFB\u52A0\u5149\u6807","\u5728\u884C\u5C3E\u6DFB\u52A0\u5149\u6807(&&U)","\u5728\u5E95\u90E8\u6DFB\u52A0\u5149\u6807","\u5728\u9876\u90E8\u6DFB\u52A0\u5149\u6807","\u5C06\u4E0B\u4E00\u4E2A\u67E5\u627E\u5339\u914D\u9879\u6DFB\u52A0\u5230\u9009\u62E9","\u6DFB\u52A0\u4E0B\u4E00\u4E2A\u5339\u914D\u9879(&&N)","\u5C06\u9009\u62E9\u5185\u5BB9\u6DFB\u52A0\u5230\u4E0A\u4E00\u67E5\u627E\u5339\u914D\u9879","\u6DFB\u52A0\u4E0A\u4E00\u4E2A\u5339\u914D\u9879(&&R)","\u5C06\u4E0A\u6B21\u9009\u62E9\u79FB\u52A8\u5230\u4E0B\u4E00\u4E2A\u67E5\u627E\u5339\u914D\u9879","\u5C06\u4E0A\u4E2A\u9009\u62E9\u5185\u5BB9\u79FB\u52A8\u5230\u4E0A\u4E00\u67E5\u627E\u5339\u914D\u9879","\u9009\u62E9\u6240\u6709\u627E\u5230\u7684\u67E5\u627E\u5339\u914D\u9879","\u9009\u62E9\u6240\u6709\u5339\u914D\u9879(&&O)","\u66F4\u6539\u6240\u6709\u5339\u914D\u9879"],"vs/editor/contrib/parameterHints/parameterHints":["\u89E6\u53D1\u53C2\u6570\u63D0\u793A"],"vs/editor/contrib/parameterHints/parameterHintsWidget":["\u201C\u663E\u793A\u4E0B\u4E00\u4E2A\u53C2\u6570\u201D\u63D0\u793A\u7684\u56FE\u6807\u3002","\u201C\u663E\u793A\u4E0A\u4E00\u4E2A\u53C2\u6570\u201D\u63D0\u793A\u7684\u56FE\u6807\u3002","{0}\uFF0C\u63D0\u793A"],"vs/editor/contrib/peekView/peekView":["\u5173\u95ED","\u901F\u89C8\u89C6\u56FE\u6807\u9898\u533A\u57DF\u80CC\u666F\u989C\u8272\u3002","\u901F\u89C8\u89C6\u56FE\u6807\u9898\u989C\u8272\u3002","\u901F\u89C8\u89C6\u56FE\u6807\u9898\u4FE1\u606F\u989C\u8272\u3002","\u901F\u89C8\u89C6\u56FE\u8FB9\u6846\u548C\u7BAD\u5934\u989C\u8272\u3002","\u901F\u89C8\u89C6\u56FE\u7ED3\u679C\u5217\u8868\u80CC\u666F\u8272\u3002","\u901F\u89C8\u89C6\u56FE\u7ED3\u679C\u5217\u8868\u4E2D\u884C\u8282\u70B9\u7684\u524D\u666F\u8272\u3002","\u901F\u89C8\u89C6\u56FE\u7ED3\u679C\u5217\u8868\u4E2D\u6587\u4EF6\u8282\u70B9\u7684\u524D\u666F\u8272\u3002","\u901F\u89C8\u89C6\u56FE\u7ED3\u679C\u5217\u8868\u4E2D\u6240\u9009\u6761\u76EE\u7684\u80CC\u666F\u8272\u3002","\u901F\u89C8\u89C6\u56FE\u7ED3\u679C\u5217\u8868\u4E2D\u6240\u9009\u6761\u76EE\u7684\u524D\u666F\u8272\u3002","\u901F\u89C8\u89C6\u56FE\u7F16\u8F91\u5668\u80CC\u666F\u8272\u3002","\u901F\u89C8\u89C6\u56FE\u7F16\u8F91\u5668\u4E2D\u88C5\u8BA2\u7EBF\u7684\u80CC\u666F\u8272\u3002","\u5728\u901F\u89C8\u89C6\u56FE\u7ED3\u679C\u5217\u8868\u4E2D\u5339\u914D\u7A81\u51FA\u663E\u793A\u989C\u8272\u3002","\u5728\u901F\u89C8\u89C6\u56FE\u7F16\u8F91\u5668\u4E2D\u5339\u914D\u7A81\u51FA\u663E\u793A\u989C\u8272\u3002","\u5728\u901F\u89C8\u89C6\u56FE\u7F16\u8F91\u5668\u4E2D\u5339\u914D\u9879\u7684\u7A81\u51FA\u663E\u793A\u8FB9\u6846\u3002"],"vs/editor/contrib/quickAccess/gotoLineQuickAccess":["\u5148\u6253\u5F00\u6587\u672C\u7F16\u8F91\u5668\u7136\u540E\u8DF3\u8F6C\u5230\u884C\u3002","\u8F6C\u5230\u7B2C {0} \u884C\u3001\u7B2C {1} \u5217\u3002","\u8F6C\u5230\u884C {0}\u3002","\u5F53\u524D\u884C: {0}\uFF0C\u5B57\u7B26: {1}\u3002\u952E\u5165\u8981\u5BFC\u822A\u5230\u7684\u884C\u53F7(\u4ECB\u4E8E 1 \u81F3 {2} \u4E4B\u95F4)\u3002","\u5F53\u524D\u884C: {0}\uFF0C\u5B57\u7B26: {1}\u3002 \u952E\u5165\u8981\u5BFC\u822A\u5230\u7684\u884C\u53F7\u3002"],"vs/editor/contrib/quickAccess/gotoSymbolQuickAccess":["\u8981\u8F6C\u5230\u7B26\u53F7\uFF0C\u9996\u5148\u6253\u5F00\u5177\u6709\u7B26\u53F7\u4FE1\u606F\u7684\u6587\u672C\u7F16\u8F91\u5668\u3002","\u6D3B\u52A8\u6587\u672C\u7F16\u8F91\u5668\u4E0D\u63D0\u4F9B\u7B26\u53F7\u4FE1\u606F\u3002","\u6CA1\u6709\u5339\u914D\u7684\u7F16\u8F91\u5668\u7B26\u53F7","\u6CA1\u6709\u7F16\u8F91\u5668\u7B26\u53F7","\u5728\u4FA7\u8FB9\u6253\u5F00","\u5728\u5E95\u90E8\u6253\u5F00","\u7B26\u53F7({0})","\u5C5E\u6027({0})","\u65B9\u6CD5({0})","\u51FD\u6570({0})","\u6784\u9020\u51FD\u6570 ({0})","\u53D8\u91CF({0})","\u7C7B({0})","\u7ED3\u6784({0})","\u4E8B\u4EF6({0})","\u8FD0\u7B97\u7B26({0})","\u63A5\u53E3({0})","\u547D\u540D\u7A7A\u95F4({0})","\u5305({0})","\u7C7B\u578B\u53C2\u6570({0})","\u6A21\u5757({0})","\u5C5E\u6027({0})","\u679A\u4E3E({0})","\u679A\u4E3E\u6210\u5458({0})","\u5B57\u7B26\u4E32({0})","\u6587\u4EF6({0})","\u6570\u7EC4({0})","\u6570\u5B57({0})","\u5E03\u5C14\u503C({0})","\u5BF9\u8C61({0})","\u952E({0})","\u5B57\u6BB5({0})","\u5E38\u91CF({0})"],"vs/editor/contrib/rename/rename":["\u65E0\u7ED3\u679C\u3002","\u89E3\u6790\u91CD\u547D\u540D\u4F4D\u7F6E\u65F6\u53D1\u751F\u672A\u77E5\u9519\u8BEF","\u6B63\u5728\u91CD\u547D\u540D\u201C{0}\u201D","\u91CD\u547D\u540D {0}","\u6210\u529F\u5C06\u201C{0}\u201D\u91CD\u547D\u540D\u4E3A\u201C{1}\u201D\u3002\u6458\u8981: {2}","\u91CD\u547D\u540D\u65E0\u6CD5\u5E94\u7528\u4FEE\u6539","\u91CD\u547D\u540D\u65E0\u6CD5\u8BA1\u7B97\u4FEE\u6539","\u91CD\u547D\u540D\u7B26\u53F7","\u542F\u7528/\u7981\u7528\u91CD\u547D\u540D\u4E4B\u524D\u9884\u89C8\u66F4\u6539\u7684\u529F\u80FD"],"vs/editor/contrib/rename/renameInputField":['\u91CD\u547D\u540D\u8F93\u5165\u3002\u952E\u5165\u65B0\u540D\u79F0\u5E76\u6309 "Enter" \u63D0\u4EA4\u3002',"\u6309 {0} \u8FDB\u884C\u91CD\u547D\u540D\uFF0C\u6309 {1} \u8FDB\u884C\u9884\u89C8"],"vs/editor/contrib/smartSelect/smartSelect":["\u5C55\u5F00\u9009\u62E9","\u5C55\u5F00\u9009\u5B9A\u5185\u5BB9(&&E)","\u6536\u8D77\u9009\u62E9","\u7F29\u5C0F\u9009\u5B9A\u8303\u56F4(&&S)"],"vs/editor/contrib/snippet/snippetVariables":["\u661F\u671F\u5929","\u661F\u671F\u4E00","\u661F\u671F\u4E8C","\u661F\u671F\u4E09","\u661F\u671F\u56DB","\u661F\u671F\u4E94","\u661F\u671F\u516D","\u5468\u65E5","\u5468\u4E00","\u5468\u4E8C","\u5468\u4E09","\u5468\u56DB","\u5468\u4E94","\u5468\u516D","\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","5\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00\u6708","\u5341\u4E8C\u6708","1\u6708","2\u6708","3\u6708","4\u6708","5\u6708","6\u6708","7\u6708","8\u6708","9\u6708","10\u6708","11 \u6708","12\u6708"],"vs/editor/contrib/suggest/suggestController":["\u9009\u62E9\u201C{0}\u201D\u540E\u8FDB\u884C\u4E86\u5176\u4ED6 {1} \u6B21\u7F16\u8F91","\u89E6\u53D1\u5EFA\u8BAE","\u63D2\u5165","\u63D2\u5165","\u66FF\u6362","\u66FF\u6362","\u63D2\u5165","\u663E\u793A\u66F4\u5C11","\u663E\u793A\u66F4\u591A","\u91CD\u7F6E\u5EFA\u8BAE\u5C0F\u7EC4\u4EF6\u5927\u5C0F"],"vs/editor/contrib/suggest/suggestWidget":["\u5EFA\u8BAE\u5C0F\u7EC4\u4EF6\u7684\u80CC\u666F\u8272\u3002","\u5EFA\u8BAE\u5C0F\u7EC4\u4EF6\u7684\u8FB9\u6846\u989C\u8272\u3002","\u5EFA\u8BAE\u5C0F\u7EC4\u4EF6\u7684\u524D\u666F\u8272\u3002","\u5EFA\u8BAE\u5C0F\u7EC4\u4EF6\u4E2D\u6240\u9009\u6761\u76EE\u7684\u80CC\u666F\u8272\u3002","\u5EFA\u8BAE\u5C0F\u7EC4\u4EF6\u4E2D\u5339\u914D\u5185\u5BB9\u7684\u9AD8\u4EAE\u989C\u8272\u3002","\u6B63\u5728\u52A0\u8F7D...","\u65E0\u5EFA\u8BAE\u3002","{0}\uFF0C\u6587\u6863: {1}","\u5EFA\u8BAE"],"vs/editor/contrib/suggest/suggestWidgetDetails":["\u5173\u95ED","\u6B63\u5728\u52A0\u8F7D\u2026"],"vs/editor/contrib/suggest/suggestWidgetRenderer":["\u5EFA\u8BAE\u5C0F\u7EC4\u4EF6\u4E2D\u7684\u8BE6\u7EC6\u4FE1\u606F\u7684\u56FE\u6807\u3002","\u4E86\u89E3\u8BE6\u7EC6\u4FE1\u606F"],"vs/editor/contrib/suggest/suggestWidgetStatus":["{0} ({1})"],"vs/editor/contrib/symbolIcons/symbolIcons":["\u6570\u7EC4\u7B26\u53F7\u7684\u524D\u666F\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u5C06\u663E\u793A\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u7EC4\u4EF6\u4E2D\u3002","\u5E03\u5C14\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u7C7B\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u989C\u8272\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u5E38\u91CF\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u6784\u9020\u51FD\u6570\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u679A\u4E3E\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u679A\u4E3E\u5668\u6210\u5458\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u4E8B\u4EF6\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u5B57\u6BB5\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u6587\u4EF6\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u6587\u4EF6\u5939\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u51FD\u6570\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u63A5\u53E3\u7B26\u53F7\u7684\u524D\u666F\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u5C06\u663E\u793A\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u7EC4\u4EF6\u4E2D\u3002","\u952E\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u5173\u952E\u5B57\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u65B9\u6CD5\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u6A21\u5757\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u547D\u540D\u7A7A\u95F4\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u8F6E\u5ED3\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u7A7A\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u6570\u5B57\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u5BF9\u8C61\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u8FD0\u7B97\u7B26\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u5305\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u5C5E\u6027\u7B26\u53F7\u7684\u524D\u666F\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u7EC4\u4EF6\u4E2D\u3002","\u53C2\u8003\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u7247\u6BB5\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u5B57\u7B26\u4E32\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u8F6E\u5ED3\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u7ED3\u6784\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u6587\u672C\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u7C7B\u578B\u53C2\u6570\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u5355\u4F4D\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002","\u53D8\u91CF\u7B26\u53F7\u7684\u524D\u666F\u989C\u8272\u3002\u8FD9\u4E9B\u7B26\u53F7\u51FA\u73B0\u5728\u5927\u7EB2\u3001\u75D5\u8FF9\u5BFC\u822A\u680F\u548C\u5EFA\u8BAE\u5C0F\u90E8\u4EF6\u4E2D\u3002"],"vs/editor/contrib/toggleTabFocusMode/toggleTabFocusMode":["\u5207\u6362 Tab \u952E\u79FB\u52A8\u7126\u70B9","Tab \u952E\u5C06\u79FB\u52A8\u5230\u4E0B\u4E00\u53EF\u805A\u7126\u7684\u5143\u7D20","Tab \u952E\u5C06\u63D2\u5165\u5236\u8868\u7B26"],"vs/editor/contrib/tokenization/tokenization":["\u5F00\u53D1\u4EBA\u5458: \u5F3A\u5236\u91CD\u65B0\u8FDB\u884C\u6807\u8BB0"],"vs/editor/contrib/unusualLineTerminators/unusualLineTerminators":["\u5F02\u5E38\u884C\u7EC8\u6B62\u7B26","\u68C0\u6D4B\u5230\u5F02\u5E38\u884C\u7EC8\u6B62\u7B26",`\u6B64\u6587\u4EF6\u5305\u542B\u4E00\u4E2A\u6216\u591A\u4E2A\u5F02\u5E38\u7684\u884C\u7EC8\u6B62\u7B26\uFF0C\u4F8B\u5982\u884C\u5206\u9694\u7B26(LS)\u6216\u6BB5\u843D\u5206\u9694\u7B26(PS)\u3002\r +\r +\u5EFA\u8BAE\u4ECE\u6587\u4EF6\u4E2D\u5220\u9664\u5B83\u4EEC\u3002\u53EF\u901A\u8FC7 "editor.unusualLineTerminators" \u8FDB\u884C\u914D\u7F6E\u3002`,"\u4FEE\u590D\u6B64\u6587\u4EF6","\u5FFD\u7565\u6B64\u6587\u4EF6\u7684\u95EE\u9898"],"vs/editor/contrib/wordHighlighter/wordHighlighter":["\u8BFB\u53D6\u8BBF\u95EE\u671F\u95F4\u7B26\u53F7\u7684\u80CC\u666F\u8272\uFF0C\u4F8B\u5982\u8BFB\u53D6\u53D8\u91CF\u65F6\u3002\u989C\u8272\u5FC5\u987B\u900F\u660E\uFF0C\u4EE5\u514D\u9690\u85CF\u4E0B\u9762\u7684\u4FEE\u9970\u6548\u679C\u3002","\u5199\u5165\u8BBF\u95EE\u8FC7\u7A0B\u4E2D\u7B26\u53F7\u7684\u80CC\u666F\u8272\uFF0C\u4F8B\u5982\u5199\u5165\u53D8\u91CF\u65F6\u3002\u989C\u8272\u5FC5\u987B\u900F\u660E\uFF0C\u4EE5\u514D\u9690\u85CF\u4E0B\u9762\u7684\u4FEE\u9970\u6548\u679C\u3002","\u7B26\u53F7\u5728\u8FDB\u884C\u8BFB\u53D6\u8BBF\u95EE\u64CD\u4F5C\u65F6\u7684\u8FB9\u6846\u989C\u8272\uFF0C\u4F8B\u5982\u8BFB\u53D6\u53D8\u91CF\u3002","\u7B26\u53F7\u5728\u8FDB\u884C\u5199\u5165\u8BBF\u95EE\u64CD\u4F5C\u65F6\u7684\u8FB9\u6846\u989C\u8272\uFF0C\u4F8B\u5982\u5199\u5165\u53D8\u91CF\u3002","\u7528\u4E8E\u7A81\u51FA\u663E\u793A\u7B26\u53F7\u7684\u6982\u8FF0\u6807\u5C3A\u6807\u8BB0\u989C\u8272\u3002\u989C\u8272\u5FC5\u987B\u900F\u660E\uFF0C\u4EE5\u514D\u9690\u85CF\u4E0B\u9762\u7684\u4FEE\u9970\u6548\u679C\u3002","\u7528\u4E8E\u7A81\u51FA\u663E\u793A\u5199\u6743\u9650\u7B26\u53F7\u7684\u6982\u8FF0\u6807\u5C3A\u6807\u8BB0\u989C\u8272\u3002\u989C\u8272\u5FC5\u987B\u900F\u660E\uFF0C\u4EE5\u514D\u9690\u85CF\u4E0B\u9762\u7684\u4FEE\u9970\u6548\u679C\u3002","\u8F6C\u5230\u4E0B\u4E00\u4E2A\u7A81\u51FA\u663E\u793A\u7684\u7B26\u53F7","\u8F6C\u5230\u4E0A\u4E00\u4E2A\u7A81\u51FA\u663E\u793A\u7684\u7B26\u53F7","\u89E6\u53D1\u7B26\u53F7\u9AD8\u4EAE"],"vs/editor/contrib/wordOperations/wordOperations":["\u5220\u9664 Word"],"vs/platform/actions/browser/menuEntryActionViewItem":["{0} ({1})"],"vs/platform/configuration/common/configurationRegistry":["\u9ED8\u8BA4\u8BED\u8A00\u914D\u7F6E\u66FF\u4EE3","\u9488\u5BF9\u67D0\u79CD\u8BED\u8A00\uFF0C\u914D\u7F6E\u66FF\u4EE3\u7F16\u8F91\u5668\u8BBE\u7F6E\u3002","\u6B64\u8BBE\u7F6E\u4E0D\u652F\u6301\u6309\u8BED\u8A00\u914D\u7F6E\u3002","\u65E0\u6CD5\u6CE8\u518C\u7A7A\u5C5E\u6027",'\u65E0\u6CD5\u6CE8\u518C\u201C{0}\u201D\u3002\u5176\u7B26\u5408\u63CF\u8FF0\u7279\u5B9A\u8BED\u8A00\u7F16\u8F91\u5668\u8BBE\u7F6E\u7684\u8868\u8FBE\u5F0F "\\\\[.*\\\\]$"\u3002\u8BF7\u4F7F\u7528 "configurationDefaults"\u3002',"\u65E0\u6CD5\u6CE8\u518C\u201C{0}\u201D\u3002\u6B64\u5C5E\u6027\u5DF2\u6CE8\u518C\u3002"],"vs/platform/contextkey/browser/contextKeyService":["A command that returns information about context keys"],"vs/platform/contextkey/common/contextkeys":["Whether the operating system is Windows"],"vs/platform/keybinding/common/abstractKeybindingService":["({0})\u5DF2\u6309\u4E0B\u3002\u6B63\u5728\u7B49\u5F85\u6309\u4E0B\u7B2C\u4E8C\u4E2A\u952E...","\u7EC4\u5408\u952E({0}\uFF0C{1})\u4E0D\u662F\u547D\u4EE4\u3002"],"vs/platform/list/browser/listService":["\u5DE5\u4F5C\u53F0","\u6620\u5C04\u4E3A `Ctrl` (Windows \u548C Linux) \u6216 `Command` (macOS)\u3002","\u6620\u5C04\u4E3A `Alt` (Windows \u548C Linux) \u6216 `Option` (macOS)\u3002","\u5728\u901A\u8FC7\u9F20\u6807\u591A\u9009\u6811\u548C\u5217\u8868\u6761\u76EE\u65F6\u4F7F\u7528\u7684\u4FEE\u6539\u952E (\u4F8B\u5982\u201C\u8D44\u6E90\u7BA1\u7406\u5668\u201D\u3001\u201C\u6253\u5F00\u7684\u7F16\u8F91\u5668\u201D\u548C\u201C\u6E90\u4EE3\u7801\u7BA1\u7406\u201D\u89C6\u56FE)\u3002\u201C\u5728\u4FA7\u8FB9\u6253\u5F00\u201D\u529F\u80FD\u6240\u9700\u7684\u9F20\u6807\u52A8\u4F5C (\u82E5\u53EF\u7528) \u5C06\u4F1A\u76F8\u5E94\u8C03\u6574\uFF0C\u4E0D\u4E0E\u591A\u9009\u4FEE\u6539\u952E\u51B2\u7A81\u3002","\u63A7\u5236\u5728\u6811\u548C\u5217\u8868\u4E2D\u600E\u6837\u4F7F\u7528\u9F20\u6807\u6765\u5C55\u5F00\u5B50\u9879(\u82E5\u652F\u6301)\u3002\u5BF9\u4E8E\u6811\u4E2D\u7684\u7236\u8282\u70B9\uFF0C\u6B64\u8BBE\u7F6E\u5C06\u63A7\u5236\u662F\u4F7F\u7528\u5355\u51FB\u8FD8\u662F\u53CC\u51FB\u6765\u5C55\u5F00\u3002\u6CE8\u610F\uFF0C\u67D0\u4E9B\u4E0D\u9002\u7528\u4E8E\u6B64\u8BBE\u7F6E\u7684\u6811\u6216\u5217\u8868\u53EF\u80FD\u4F1A\u5FFD\u7565\u6B64\u9879\u3002 ","\u63A7\u5236\u5217\u8868\u548C\u6811\u662F\u5426\u652F\u6301\u5DE5\u4F5C\u53F0\u4E2D\u7684\u6C34\u5E73\u6EDA\u52A8\u3002\u8B66\u544A: \u6253\u5F00\u6B64\u8BBE\u7F6E\u5F71\u54CD\u4F1A\u5F71\u54CD\u6027\u80FD\u3002","\u63A7\u5236\u6811\u7F29\u8FDB(\u4EE5\u50CF\u7D20\u4E3A\u5355\u4F4D)\u3002","\u63A7\u5236\u6811\u662F\u5426\u5E94\u5448\u73B0\u7F29\u8FDB\u53C2\u8003\u7EBF\u3002","\u63A7\u5236\u5217\u8868\u548C\u6811\u662F\u5426\u5177\u6709\u5E73\u6ED1\u6EDA\u52A8\u3002","\u7B80\u5355\u952E\u76D8\u5BFC\u822A\u805A\u7126\u4E0E\u952E\u76D8\u8F93\u5165\u76F8\u5339\u914D\u7684\u5143\u7D20\u3002\u4EC5\u5BF9\u524D\u7F00\u8FDB\u884C\u5339\u914D\u3002","\u9AD8\u4EAE\u952E\u76D8\u5BFC\u822A\u4F1A\u7A81\u51FA\u663E\u793A\u4E0E\u952E\u76D8\u8F93\u5165\u76F8\u5339\u914D\u7684\u5143\u7D20\u3002\u8FDB\u4E00\u6B65\u5411\u4E0A\u548C\u5411\u4E0B\u5BFC\u822A\u5C06\u4EC5\u904D\u5386\u7A81\u51FA\u663E\u793A\u7684\u5143\u7D20\u3002","\u7B5B\u9009\u5668\u952E\u76D8\u5BFC\u822A\u5C06\u7B5B\u9009\u51FA\u5E76\u9690\u85CF\u4E0E\u952E\u76D8\u8F93\u5165\u4E0D\u5339\u914D\u7684\u6240\u6709\u5143\u7D20\u3002","\u63A7\u5236\u5DE5\u4F5C\u53F0\u4E2D\u7684\u5217\u8868\u548C\u6811\u7684\u952E\u76D8\u5BFC\u822A\u6837\u5F0F\u3002\u5B83\u53EF\u4E3A\u201C\u7B80\u5355\u201D\u3001\u201C\u7A81\u51FA\u663E\u793A\u201D\u6216\u201C\u7B5B\u9009\u201D\u3002","\u63A7\u5236\u5217\u8868\u548C\u6811\u4E2D\u7684\u952E\u76D8\u5BFC\u822A\u662F\u5426\u4EC5\u901A\u8FC7\u952E\u5165\u81EA\u52A8\u89E6\u53D1\u3002\u5982\u679C\u8BBE\u7F6E\u4E3A `false` \uFF0C\u952E\u76D8\u5BFC\u822A\u53EA\u5728\u6267\u884C `list.toggleKeyboardNavigation` \u547D\u4EE4\u65F6\u89E6\u53D1\uFF0C\u60A8\u53EF\u4EE5\u4E3A\u8BE5\u547D\u4EE4\u6307\u5B9A\u952E\u76D8\u5FEB\u6377\u65B9\u5F0F\u3002","\u63A7\u5236\u5355\u51FB\u6587\u4EF6\u5939\u540D\u79F0\u65F6\u5982\u4F55\u5C55\u5F00\u6811\u6587\u4EF6\u5939\u3002"],"vs/platform/markers/common/markers":["\u9519\u8BEF","\u8B66\u544A","\u4FE1\u606F"],"vs/platform/quickinput/browser/commandsQuickAccess":["{0}, {1}","\u6700\u8FD1\u4F7F\u7528","\u5176\u4ED6\u547D\u4EE4",'\u547D\u4EE4"{0}"\u5BFC\u81F4\u9519\u8BEF ({1})'],"vs/platform/quickinput/browser/helpQuickAccess":["\u5168\u5C40\u547D\u4EE4","\u7F16\u8F91\u5668\u547D\u4EE4","{0}, {1}"],"vs/platform/theme/common/colorRegistry":["\u6574\u4F53\u524D\u666F\u8272\u3002\u6B64\u989C\u8272\u4EC5\u5728\u4E0D\u88AB\u7EC4\u4EF6\u8986\u76D6\u65F6\u9002\u7528\u3002","\u9519\u8BEF\u4FE1\u606F\u7684\u6574\u4F53\u524D\u666F\u8272\u3002\u6B64\u989C\u8272\u4EC5\u5728\u4E0D\u88AB\u7EC4\u4EF6\u8986\u76D6\u65F6\u9002\u7528\u3002","\u5DE5\u4F5C\u53F0\u4E2D\u56FE\u6807\u7684\u9ED8\u8BA4\u989C\u8272\u3002","\u7126\u70B9\u5143\u7D20\u7684\u6574\u4F53\u8FB9\u6846\u989C\u8272\u3002\u6B64\u989C\u8272\u4EC5\u5728\u4E0D\u88AB\u5176\u4ED6\u7EC4\u4EF6\u8986\u76D6\u65F6\u9002\u7528\u3002","\u5728\u5143\u7D20\u5468\u56F4\u989D\u5916\u7684\u4E00\u5C42\u8FB9\u6846\uFF0C\u7528\u6765\u63D0\u9AD8\u5BF9\u6BD4\u5EA6\u4ECE\u800C\u533A\u522B\u5176\u4ED6\u5143\u7D20\u3002","\u5728\u6D3B\u52A8\u5143\u7D20\u5468\u56F4\u989D\u5916\u7684\u4E00\u5C42\u8FB9\u6846\uFF0C\u7528\u6765\u63D0\u9AD8\u5BF9\u6BD4\u5EA6\u4ECE\u800C\u533A\u522B\u5176\u4ED6\u5143\u7D20\u3002","\u6587\u672C\u4E2D\u94FE\u63A5\u7684\u524D\u666F\u8272\u3002","\u6587\u672C\u4E2D\u4EE3\u7801\u5757\u7684\u80CC\u666F\u989C\u8272\u3002","\u7F16\u8F91\u5668\u5185\u5C0F\u7EC4\u4EF6(\u5982\u67E5\u627E/\u66FF\u6362)\u7684\u9634\u5F71\u989C\u8272\u3002","\u8F93\u5165\u6846\u80CC\u666F\u8272\u3002","\u8F93\u5165\u6846\u524D\u666F\u8272\u3002","\u8F93\u5165\u6846\u8FB9\u6846\u3002","\u8F93\u5165\u5B57\u6BB5\u4E2D\u5DF2\u6FC0\u6D3B\u9009\u9879\u7684\u8FB9\u6846\u989C\u8272\u3002","\u8F93\u5165\u5B57\u6BB5\u4E2D\u6FC0\u6D3B\u9009\u9879\u7684\u80CC\u666F\u989C\u8272\u3002","\u8F93\u5165\u5B57\u6BB5\u4E2D\u5DF2\u6FC0\u6D3B\u7684\u9009\u9879\u7684\u524D\u666F\u8272\u3002","\u8F93\u5165\u9A8C\u8BC1\u7ED3\u679C\u4E3A\u4FE1\u606F\u7EA7\u522B\u65F6\u7684\u80CC\u666F\u8272\u3002","\u8F93\u5165\u9A8C\u8BC1\u7ED3\u679C\u4E3A\u4FE1\u606F\u7EA7\u522B\u65F6\u7684\u524D\u666F\u8272\u3002","\u4E25\u91CD\u6027\u4E3A\u4FE1\u606F\u65F6\u8F93\u5165\u9A8C\u8BC1\u7684\u8FB9\u6846\u989C\u8272\u3002","\u4E25\u91CD\u6027\u4E3A\u8B66\u544A\u65F6\u8F93\u5165\u9A8C\u8BC1\u7684\u80CC\u666F\u8272\u3002","\u8F93\u5165\u9A8C\u8BC1\u7ED3\u679C\u4E3A\u8B66\u544A\u7EA7\u522B\u65F6\u7684\u524D\u666F\u8272\u3002","\u4E25\u91CD\u6027\u4E3A\u8B66\u544A\u65F6\u8F93\u5165\u9A8C\u8BC1\u7684\u8FB9\u6846\u989C\u8272\u3002","\u8F93\u5165\u9A8C\u8BC1\u7ED3\u679C\u4E3A\u9519\u8BEF\u7EA7\u522B\u65F6\u7684\u80CC\u666F\u8272\u3002","\u8F93\u5165\u9A8C\u8BC1\u7ED3\u679C\u4E3A\u9519\u8BEF\u7EA7\u522B\u65F6\u7684\u524D\u666F\u8272\u3002","\u4E25\u91CD\u6027\u4E3A\u9519\u8BEF\u65F6\u8F93\u5165\u9A8C\u8BC1\u7684\u8FB9\u6846\u989C\u8272\u3002","\u4E0B\u62C9\u5217\u8868\u80CC\u666F\u8272\u3002","\u4E0B\u62C9\u5217\u8868\u524D\u666F\u8272\u3002","\u6309\u94AE\u524D\u666F\u8272\u3002","\u6309\u94AE\u80CC\u666F\u8272\u3002","\u6309\u94AE\u5728\u60AC\u505C\u65F6\u7684\u80CC\u666F\u989C\u8272\u3002","Badge \u80CC\u666F\u8272\u3002Badge \u662F\u5C0F\u578B\u7684\u4FE1\u606F\u6807\u7B7E\uFF0C\u5982\u8868\u793A\u641C\u7D22\u7ED3\u679C\u6570\u91CF\u7684\u6807\u7B7E\u3002","Badge \u524D\u666F\u8272\u3002Badge \u662F\u5C0F\u578B\u7684\u4FE1\u606F\u6807\u7B7E\uFF0C\u5982\u8868\u793A\u641C\u7D22\u7ED3\u679C\u6570\u91CF\u7684\u6807\u7B7E\u3002","\u8868\u793A\u89C6\u56FE\u88AB\u6EDA\u52A8\u7684\u6EDA\u52A8\u6761\u9634\u5F71\u3002","\u6EDA\u52A8\u6761\u6ED1\u5757\u80CC\u666F\u8272","\u6EDA\u52A8\u6761\u6ED1\u5757\u5728\u60AC\u505C\u65F6\u7684\u80CC\u666F\u8272","\u6EDA\u52A8\u6761\u6ED1\u5757\u5728\u88AB\u70B9\u51FB\u65F6\u7684\u80CC\u666F\u8272\u3002","\u8868\u793A\u957F\u65F6\u95F4\u64CD\u4F5C\u7684\u8FDB\u5EA6\u6761\u7684\u80CC\u666F\u8272\u3002","\u7F16\u8F91\u5668\u4E2D\u9519\u8BEF\u6587\u672C\u7684\u80CC\u666F\u8272\u3002\u989C\u8272\u5FC5\u987B\u900F\u660E\uFF0C\u4EE5\u514D\u9690\u85CF\u4E0B\u9762\u7684\u4FEE\u9970\u6548\u679C\u3002","\u7F16\u8F91\u5668\u4E2D\u9519\u8BEF\u6CE2\u6D6A\u7EBF\u7684\u524D\u666F\u8272\u3002","\u7F16\u8F91\u5668\u4E2D\u9519\u8BEF\u6846\u7684\u8FB9\u6846\u989C\u8272\u3002","\u7F16\u8F91\u5668\u4E2D\u8B66\u544A\u6587\u672C\u7684\u80CC\u666F\u8272\u3002\u989C\u8272\u5FC5\u987B\u900F\u660E\uFF0C\u4EE5\u514D\u9690\u85CF\u4E0B\u9762\u7684\u4FEE\u9970\u6548\u679C\u3002","\u7F16\u8F91\u5668\u4E2D\u8B66\u544A\u6CE2\u6D6A\u7EBF\u7684\u524D\u666F\u8272\u3002","\u7F16\u8F91\u5668\u4E2D\u8B66\u544A\u6846\u7684\u8FB9\u6846\u989C\u8272\u3002","\u7F16\u8F91\u5668\u4E2D\u4FE1\u606F\u6587\u672C\u7684\u80CC\u666F\u8272\u3002\u989C\u8272\u5FC5\u987B\u900F\u660E\uFF0C\u4EE5\u514D\u9690\u85CF\u4E0B\u9762\u7684\u4FEE\u9970\u6548\u679C\u3002","\u7F16\u8F91\u5668\u4E2D\u4FE1\u606F\u6CE2\u6D6A\u7EBF\u7684\u524D\u666F\u8272\u3002","\u7F16\u8F91\u5668\u4E2D\u4FE1\u606F\u6846\u7684\u8FB9\u6846\u989C\u8272\u3002","\u7F16\u8F91\u5668\u4E2D\u63D0\u793A\u6CE2\u6D6A\u7EBF\u7684\u524D\u666F\u8272\u3002","\u7F16\u8F91\u5668\u4E2D\u63D0\u793A\u6846\u7684\u8FB9\u6846\u989C\u8272\u3002","\u7F16\u8F91\u5668\u80CC\u666F\u8272\u3002","\u7F16\u8F91\u5668\u9ED8\u8BA4\u524D\u666F\u8272\u3002","\u7F16\u8F91\u5668\u7EC4\u4EF6(\u5982\u67E5\u627E/\u66FF\u6362)\u80CC\u666F\u989C\u8272\u3002","\u7F16\u8F91\u5668\u5C0F\u90E8\u4EF6\u7684\u524D\u666F\u8272\uFF0C\u5982\u67E5\u627E/\u66FF\u6362\u3002","\u7F16\u8F91\u5668\u5C0F\u90E8\u4EF6\u7684\u8FB9\u6846\u989C\u8272\u3002\u6B64\u989C\u8272\u4EC5\u5728\u5C0F\u90E8\u4EF6\u6709\u8FB9\u6846\u4E14\u4E0D\u88AB\u5C0F\u90E8\u4EF6\u91CD\u5199\u65F6\u9002\u7528\u3002","\u7F16\u8F91\u5668\u5C0F\u90E8\u4EF6\u5927\u5C0F\u8C03\u6574\u6761\u7684\u8FB9\u6846\u989C\u8272\u3002\u6B64\u989C\u8272\u4EC5\u5728\u5C0F\u90E8\u4EF6\u6709\u8C03\u6574\u8FB9\u6846\u4E14\u4E0D\u88AB\u5C0F\u90E8\u4EF6\u989C\u8272\u8986\u76D6\u65F6\u4F7F\u7528\u3002","\u80CC\u666F\u989C\u8272\u5FEB\u901F\u9009\u53D6\u5668\u3002\u5FEB\u901F\u9009\u53D6\u5668\u5C0F\u90E8\u4EF6\u662F\u9009\u53D6\u5668(\u5982\u547D\u4EE4\u8C03\u8272\u677F)\u7684\u5BB9\u5668\u3002","\u524D\u666F\u989C\u8272\u5FEB\u901F\u9009\u53D6\u5668\u3002\u5FEB\u901F\u9009\u53D6\u5668\u5C0F\u90E8\u4EF6\u662F\u547D\u4EE4\u8C03\u8272\u677F\u7B49\u9009\u53D6\u5668\u7684\u5BB9\u5668\u3002","\u6807\u9898\u80CC\u666F\u989C\u8272\u5FEB\u901F\u9009\u53D6\u5668\u3002\u5FEB\u901F\u9009\u53D6\u5668\u5C0F\u90E8\u4EF6\u662F\u547D\u4EE4\u8C03\u8272\u677F\u7B49\u9009\u53D6\u5668\u7684\u5BB9\u5668\u3002","Quick picker background color for the focused item.","\u5FEB\u901F\u9009\u53D6\u5668\u5206\u7EC4\u6807\u7B7E\u7684\u989C\u8272\u3002","\u5FEB\u901F\u9009\u53D6\u5668\u5206\u7EC4\u8FB9\u6846\u7684\u989C\u8272\u3002","\u7F16\u8F91\u5668\u6240\u9009\u5185\u5BB9\u7684\u989C\u8272\u3002","\u7528\u4EE5\u5F70\u663E\u9AD8\u5BF9\u6BD4\u5EA6\u7684\u6240\u9009\u6587\u672C\u7684\u989C\u8272\u3002","\u975E\u6D3B\u52A8\u7F16\u8F91\u5668\u4E2D\u6240\u9009\u5185\u5BB9\u7684\u989C\u8272\uFF0C\u989C\u8272\u5FC5\u987B\u900F\u660E\uFF0C\u4EE5\u514D\u9690\u85CF\u4E0B\u9762\u7684\u88C5\u9970\u6548\u679C\u3002","\u5177\u6709\u4E0E\u6240\u9009\u9879\u76F8\u5173\u5185\u5BB9\u7684\u533A\u57DF\u7684\u989C\u8272\u3002\u989C\u8272\u5FC5\u987B\u900F\u660E\uFF0C\u4EE5\u514D\u9690\u85CF\u4E0B\u9762\u7684\u4FEE\u9970\u6548\u679C\u3002","\u4E0E\u6240\u9009\u9879\u5185\u5BB9\u76F8\u540C\u7684\u533A\u57DF\u7684\u8FB9\u6846\u989C\u8272\u3002","\u5F53\u524D\u641C\u7D22\u5339\u914D\u9879\u7684\u989C\u8272\u3002","\u5176\u4ED6\u641C\u7D22\u5339\u914D\u9879\u7684\u989C\u8272\u3002\u989C\u8272\u5FC5\u987B\u900F\u660E\uFF0C\u4EE5\u514D\u9690\u85CF\u4E0B\u9762\u7684\u4FEE\u9970\u6548\u679C\u3002","\u9650\u5236\u641C\u7D22\u8303\u56F4\u7684\u989C\u8272\u3002\u989C\u8272\u4E0D\u80FD\u4E0D\u900F\u660E\uFF0C\u4EE5\u514D\u9690\u85CF\u5E95\u5C42\u88C5\u9970\u3002","\u5F53\u524D\u641C\u7D22\u5339\u914D\u9879\u7684\u8FB9\u6846\u989C\u8272\u3002","\u5176\u4ED6\u641C\u7D22\u5339\u914D\u9879\u7684\u8FB9\u6846\u989C\u8272\u3002","\u9650\u5236\u641C\u7D22\u7684\u8303\u56F4\u7684\u8FB9\u6846\u989C\u8272\u3002\u989C\u8272\u5FC5\u987B\u900F\u660E\uFF0C\u4EE5\u514D\u9690\u85CF\u4E0B\u9762\u7684\u4FEE\u9970\u6548\u679C\u3002","\u5728\u4E0B\u9762\u7A81\u51FA\u663E\u793A\u60AC\u505C\u7684\u5B57\u8BCD\u3002\u989C\u8272\u5FC5\u987B\u900F\u660E\uFF0C\u4EE5\u514D\u9690\u85CF\u4E0B\u9762\u7684\u4FEE\u9970\u6548\u679C\u3002","\u7F16\u8F91\u5668\u60AC\u505C\u63D0\u793A\u7684\u80CC\u666F\u989C\u8272\u3002","\u7F16\u8F91\u5668\u60AC\u505C\u7684\u524D\u666F\u989C\u8272\u3002","\u5149\u6807\u60AC\u505C\u65F6\u7F16\u8F91\u5668\u7684\u8FB9\u6846\u989C\u8272\u3002","\u7F16\u8F91\u5668\u60AC\u505C\u72B6\u6001\u680F\u7684\u80CC\u666F\u8272\u3002","\u6D3B\u52A8\u94FE\u63A5\u989C\u8272\u3002","\u5185\u8054\u63D0\u793A\u7684\u524D\u666F\u8272","\u5185\u8054\u63D0\u793A\u7684\u80CC\u666F\u8272","\u7528\u4E8E\u706F\u6CE1\u64CD\u4F5C\u56FE\u6807\u7684\u989C\u8272\u3002","\u7528\u4E8E\u706F\u6CE1\u81EA\u52A8\u4FEE\u590D\u64CD\u4F5C\u56FE\u6807\u7684\u989C\u8272\u3002","\u5DF2\u63D2\u5165\u7684\u6587\u672C\u7684\u80CC\u666F\u8272\u3002\u989C\u8272\u5FC5\u987B\u900F\u660E\uFF0C\u4EE5\u514D\u9690\u85CF\u4E0B\u9762\u7684\u4FEE\u9970\u6548\u679C\u3002","\u5DF2\u5220\u9664\u7684\u6587\u672C\u7684\u80CC\u666F\u8272\u3002\u989C\u8272\u5FC5\u987B\u900F\u660E\uFF0C\u4EE5\u514D\u9690\u85CF\u4E0B\u9762\u7684\u4FEE\u9970\u6548\u679C\u3002","\u63D2\u5165\u7684\u6587\u672C\u7684\u8F6E\u5ED3\u989C\u8272\u3002","\u88AB\u5220\u9664\u6587\u672C\u7684\u8F6E\u5ED3\u989C\u8272\u3002","\u4E24\u4E2A\u6587\u672C\u7F16\u8F91\u5668\u4E4B\u95F4\u7684\u8FB9\u6846\u989C\u8272\u3002","\u5DEE\u5F02\u7F16\u8F91\u5668\u7684\u5BF9\u89D2\u7EBF\u586B\u5145\u989C\u8272\u3002\u5BF9\u89D2\u7EBF\u586B\u5145\u7528\u4E8E\u5E76\u6392\u5DEE\u5F02\u89C6\u56FE\u3002","\u7126\u70B9\u9879\u5728\u5217\u8868\u6216\u6811\u6D3B\u52A8\u65F6\u7684\u80CC\u666F\u989C\u8272\u3002\u6D3B\u52A8\u7684\u5217\u8868\u6216\u6811\u5177\u6709\u952E\u76D8\u7126\u70B9\uFF0C\u975E\u6D3B\u52A8\u7684\u6CA1\u6709\u3002","\u7126\u70B9\u9879\u5728\u5217\u8868\u6216\u6811\u6D3B\u52A8\u65F6\u7684\u524D\u666F\u989C\u8272\u3002\u6D3B\u52A8\u7684\u5217\u8868\u6216\u6811\u5177\u6709\u952E\u76D8\u7126\u70B9\uFF0C\u975E\u6D3B\u52A8\u7684\u6CA1\u6709\u3002","List/Tree outline color for the focused item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.","\u5DF2\u9009\u9879\u5728\u5217\u8868\u6216\u6811\u6D3B\u52A8\u65F6\u7684\u80CC\u666F\u989C\u8272\u3002\u6D3B\u52A8\u7684\u5217\u8868\u6216\u6811\u5177\u6709\u952E\u76D8\u7126\u70B9\uFF0C\u975E\u6D3B\u52A8\u7684\u6CA1\u6709\u3002","\u5DF2\u9009\u9879\u5728\u5217\u8868\u6216\u6811\u6D3B\u52A8\u65F6\u7684\u524D\u666F\u989C\u8272\u3002\u6D3B\u52A8\u7684\u5217\u8868\u6216\u6811\u5177\u6709\u952E\u76D8\u7126\u70B9\uFF0C\u975E\u6D3B\u52A8\u7684\u6CA1\u6709\u3002","\u5DF2\u9009\u9879\u5728\u5217\u8868\u6216\u6811\u975E\u6D3B\u52A8\u65F6\u7684\u80CC\u666F\u989C\u8272\u3002\u6D3B\u52A8\u7684\u5217\u8868\u6216\u6811\u5177\u6709\u952E\u76D8\u7126\u70B9\uFF0C\u975E\u6D3B\u52A8\u7684\u6CA1\u6709\u3002","\u5DF2\u9009\u9879\u5728\u5217\u8868\u6216\u6811\u975E\u6D3B\u52A8\u65F6\u7684\u524D\u666F\u989C\u8272\u3002\u6D3B\u52A8\u7684\u5217\u8868\u6216\u6811\u5177\u6709\u952E\u76D8\u7126\u70B9\uFF0C\u975E\u6D3B\u52A8\u7684\u6CA1\u6709\u3002","\u975E\u6D3B\u52A8\u7684\u5217\u8868\u6216\u6811\u63A7\u4EF6\u4E2D\u7126\u70B9\u9879\u7684\u80CC\u666F\u989C\u8272\u3002\u6D3B\u52A8\u7684\u5217\u8868\u6216\u6811\u5177\u6709\u952E\u76D8\u7126\u70B9\uFF0C\u975E\u6D3B\u52A8\u7684\u6CA1\u6709\u3002","List/Tree outline color for the focused item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.","\u4F7F\u7528\u9F20\u6807\u79FB\u52A8\u9879\u76EE\u65F6\uFF0C\u5217\u8868\u6216\u6811\u7684\u80CC\u666F\u989C\u8272\u3002","\u9F20\u6807\u5728\u9879\u76EE\u4E0A\u60AC\u505C\u65F6\uFF0C\u5217\u8868\u6216\u6811\u7684\u524D\u666F\u989C\u8272\u3002","\u4F7F\u7528\u9F20\u6807\u79FB\u52A8\u9879\u76EE\u65F6\uFF0C\u5217\u8868\u6216\u6811\u8FDB\u884C\u62D6\u653E\u7684\u80CC\u666F\u989C\u8272\u3002","\u5728\u5217\u8868\u6216\u6811\u4E2D\u641C\u7D22\u65F6\uFF0C\u5176\u4E2D\u5339\u914D\u5185\u5BB9\u7684\u9AD8\u4EAE\u989C\u8272\u3002","\u5217\u8868\u548C\u6811\u4E2D\u7C7B\u578B\u7B5B\u9009\u5668\u5C0F\u7EC4\u4EF6\u7684\u80CC\u666F\u8272\u3002","\u5217\u8868\u548C\u6811\u4E2D\u7C7B\u578B\u7B5B\u9009\u5668\u5C0F\u7EC4\u4EF6\u7684\u8F6E\u5ED3\u989C\u8272\u3002","\u5F53\u6CA1\u6709\u5339\u914D\u9879\u65F6\uFF0C\u5217\u8868\u548C\u6811\u4E2D\u7C7B\u578B\u7B5B\u9009\u5668\u5C0F\u7EC4\u4EF6\u7684\u8F6E\u5ED3\u989C\u8272\u3002","\u7F29\u8FDB\u53C2\u8003\u7EBF\u7684\u6811\u63CF\u8FB9\u989C\u8272\u3002","\u7F29\u8FDB\u53C2\u8003\u7EBF\u7684\u6811\u63CF\u8FB9\u989C\u8272\u3002","\u83DC\u5355\u7684\u8FB9\u6846\u989C\u8272\u3002","\u83DC\u5355\u9879\u7684\u524D\u666F\u989C\u8272\u3002","\u83DC\u5355\u9879\u7684\u80CC\u666F\u989C\u8272\u3002","\u83DC\u5355\u4E2D\u9009\u5B9A\u83DC\u5355\u9879\u7684\u524D\u666F\u8272\u3002","\u83DC\u5355\u4E2D\u6240\u9009\u83DC\u5355\u9879\u7684\u80CC\u666F\u8272\u3002","\u83DC\u5355\u4E2D\u6240\u9009\u83DC\u5355\u9879\u7684\u8FB9\u6846\u989C\u8272\u3002","\u83DC\u5355\u4E2D\u5206\u9694\u7EBF\u7684\u989C\u8272\u3002","\u4EE3\u7801\u7247\u6BB5 Tab \u4F4D\u7684\u9AD8\u4EAE\u80CC\u666F\u8272\u3002","\u4EE3\u7801\u7247\u6BB5 Tab \u4F4D\u7684\u9AD8\u4EAE\u8FB9\u6846\u989C\u8272\u3002","\u4EE3\u7801\u7247\u6BB5\u4E2D\u6700\u540E\u7684 Tab \u4F4D\u7684\u9AD8\u4EAE\u80CC\u666F\u8272\u3002","\u4EE3\u7801\u7247\u6BB5\u4E2D\u6700\u540E\u7684\u5236\u8868\u4F4D\u7684\u9AD8\u4EAE\u8FB9\u6846\u989C\u8272\u3002","\u7528\u4E8E\u67E5\u627E\u5339\u914D\u9879\u7684\u6982\u8FF0\u6807\u5C3A\u6807\u8BB0\u989C\u8272\u3002\u989C\u8272\u5FC5\u987B\u900F\u660E\uFF0C\u4EE5\u514D\u9690\u85CF\u4E0B\u9762\u7684\u4FEE\u9970\u6548\u679C\u3002","\u7528\u4E8E\u7A81\u51FA\u663E\u793A\u6240\u9009\u5185\u5BB9\u7684\u6982\u8FF0\u6807\u5C3A\u6807\u8BB0\u989C\u8272\u3002\u989C\u8272\u5FC5\u987B\u900F\u660E\uFF0C\u4EE5\u514D\u9690\u85CF\u4E0B\u9762\u7684\u4FEE\u9970\u6548\u679C\u3002","\u7528\u4E8E\u67E5\u627E\u5339\u914D\u9879\u7684\u8FF7\u4F60\u5730\u56FE\u6807\u8BB0\u989C\u8272\u3002","\u7F16\u8F91\u5668\u9009\u533A\u5728\u8FF7\u4F60\u5730\u56FE\u4E2D\u5BF9\u5E94\u7684\u6807\u8BB0\u989C\u8272\u3002","\u7528\u4E8E\u9519\u8BEF\u7684\u8FF7\u4F60\u5730\u56FE\u6807\u8BB0\u989C\u8272\u3002","\u7528\u4E8E\u8B66\u544A\u7684\u8FF7\u4F60\u5730\u56FE\u6807\u8BB0\u989C\u8272\u3002","\u8FF7\u4F60\u5730\u56FE\u80CC\u666F\u989C\u8272\u3002","\u8FF7\u4F60\u5730\u56FE\u6ED1\u5757\u80CC\u666F\u989C\u8272\u3002","\u60AC\u505C\u65F6\uFF0C\u8FF7\u4F60\u5730\u56FE\u6ED1\u5757\u7684\u80CC\u666F\u989C\u8272\u3002","\u5355\u51FB\u65F6\uFF0C\u8FF7\u4F60\u5730\u56FE\u6ED1\u5757\u7684\u80CC\u666F\u989C\u8272\u3002","\u7528\u4E8E\u95EE\u9898\u9519\u8BEF\u56FE\u6807\u7684\u989C\u8272\u3002","\u7528\u4E8E\u95EE\u9898\u8B66\u544A\u56FE\u6807\u7684\u989C\u8272\u3002","\u7528\u4E8E\u95EE\u9898\u4FE1\u606F\u56FE\u6807\u7684\u989C\u8272\u3002"],"vs/platform/theme/common/iconRegistry":["\u8981\u4F7F\u7528\u7684\u5B57\u4F53\u7684 ID\u3002\u5982\u679C\u672A\u8BBE\u7F6E\uFF0C\u5219\u4F7F\u7528\u6700\u5148\u5B9A\u4E49\u7684\u5B57\u4F53\u3002","\u4E0E\u56FE\u6807\u5B9A\u4E49\u5173\u8054\u7684\u5B57\u4F53\u5B57\u7B26\u3002","\u5C0F\u7EC4\u4EF6\u4E2D\u201C\u5173\u95ED\u201D\u64CD\u4F5C\u7684\u56FE\u6807\u3002"],"vs/platform/undoRedo/common/undoRedoService":["\u4EE5\u4E0B\u6587\u4EF6\u5DF2\u5173\u95ED\u5E76\u4E14\u5DF2\u5728\u78C1\u76D8\u4E0A\u4FEE\u6539: {0}\u3002","\u4EE5\u4E0B\u6587\u4EF6\u5DF2\u4EE5\u4E0D\u517C\u5BB9\u7684\u65B9\u5F0F\u4FEE\u6539: {0}\u3002","\u65E0\u6CD5\u5728\u6240\u6709\u6587\u4EF6\u4E2D\u64A4\u6D88\u201C{0}\u201D\u3002{1}","\u65E0\u6CD5\u5728\u6240\u6709\u6587\u4EF6\u4E2D\u64A4\u6D88\u201C{0}\u201D\u3002{1}","\u65E0\u6CD5\u64A4\u6D88\u6240\u6709\u6587\u4EF6\u7684\u201C{0}\u201D\uFF0C\u56E0\u4E3A\u5DF2\u66F4\u6539 {1}","\u65E0\u6CD5\u8DE8\u6240\u6709\u6587\u4EF6\u64A4\u9500\u201C{0}\u201D\uFF0C\u56E0\u4E3A {1} \u4E0A\u5DF2\u6709\u4E00\u9879\u64A4\u6D88\u6216\u91CD\u505A\u64CD\u4F5C\u6B63\u5728\u8FD0\u884C","\u65E0\u6CD5\u8DE8\u6240\u6709\u6587\u4EF6\u64A4\u9500\u201C{0}\u201D\uFF0C\u56E0\u4E3A\u540C\u65F6\u53D1\u751F\u4E86\u4E00\u9879\u64A4\u6D88\u6216\u91CD\u505A\u64CD\u4F5C","\u662F\u5426\u8981\u5728\u6240\u6709\u6587\u4EF6\u4E2D\u64A4\u6D88\u201C{0}\u201D?","\u5728 {0} \u4E2A\u6587\u4EF6\u4E2D\u64A4\u6D88","\u64A4\u6D88\u6B64\u6587\u4EF6","\u53D6\u6D88","\u65E0\u6CD5\u64A4\u9500\u201C{0}\u201D\uFF0C\u56E0\u4E3A\u5DF2\u6709\u4E00\u9879\u64A4\u6D88\u6216\u91CD\u505A\u64CD\u4F5C\u6B63\u5728\u8FD0\u884C\u3002","\u662F\u5426\u8981\u64A4\u6D88\u201C{0}\u201D?","\u64A4\u6D88","\u53D6\u6D88","\u65E0\u6CD5\u5728\u6240\u6709\u6587\u4EF6\u4E2D\u91CD\u505A\u201C{0}\u201D\u3002{1}","\u65E0\u6CD5\u5728\u6240\u6709\u6587\u4EF6\u4E2D\u91CD\u505A\u201C{0}\u201D\u3002{1}","\u65E0\u6CD5\u5BF9\u6240\u6709\u6587\u4EF6\u91CD\u505A\u201C{0}\u201D\uFF0C\u56E0\u4E3A\u5DF2\u66F4\u6539 {1}","\u65E0\u6CD5\u8DE8\u6240\u6709\u6587\u4EF6\u91CD\u505A\u201C{0}\u201D\uFF0C\u56E0\u4E3A {1} \u4E0A\u5DF2\u6709\u4E00\u9879\u64A4\u6D88\u6216\u91CD\u505A\u64CD\u4F5C\u6B63\u5728\u8FD0\u884C","\u65E0\u6CD5\u8DE8\u6240\u6709\u6587\u4EF6\u91CD\u505A\u201C{0}\u201D\uFF0C\u56E0\u4E3A\u540C\u65F6\u53D1\u751F\u4E86\u4E00\u9879\u64A4\u6D88\u6216\u91CD\u505A\u64CD\u4F5C","\u65E0\u6CD5\u91CD\u505A\u201C{0}\u201D\uFF0C\u56E0\u4E3A\u5DF2\u6709\u4E00\u9879\u64A4\u6D88\u6216\u91CD\u505A\u64CD\u4F5C\u6B63\u5728\u8FD0\u884C\u3002"]}); diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/editor/editor.main.nls.zh-tw.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/editor/editor.main.nls.zh-tw.js new file mode 100644 index 0000000000..e3349d63c1 --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/editor/editor.main.nls.zh-tw.js @@ -0,0 +1,6 @@ +/*!----------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Version: 0.23.0(82e8ea39fc101d639262435542c7d43bc20d8aa2) + * Released under the MIT license + * https://github.com/microsoft/vscode/blob/main/LICENSE.txt + *-----------------------------------------------------------*/define("vs/editor/editor.main.nls.zh-tw",{"vs/base/browser/ui/actionbar/actionViewItems":["{0} ({1})"],"vs/base/browser/ui/findinput/findInput":["\u8F38\u5165"],"vs/base/browser/ui/findinput/findInputCheckboxes":["\u5927\u5C0F\u5BEB\u9808\u76F8\u7B26","\u5168\u5B57\u62FC\u5BEB\u9808\u76F8\u7B26","\u4F7F\u7528\u898F\u5247\u904B\u7B97\u5F0F"],"vs/base/browser/ui/findinput/replaceInput":["\u8F38\u5165","\u4FDD\u7559\u6848\u4F8B"],"vs/base/browser/ui/iconLabel/iconLabel":["\u6B63\u5728\u8F09\u5165..."],"vs/base/browser/ui/inputbox/inputBox":["\u932F\u8AA4: {0}","\u8B66\u544A: {0}","\u8CC7\u8A0A: {0}"],"vs/base/browser/ui/keybindingLabel/keybindingLabel":["\u672A\u7E6B\u7D50"],"vs/base/browser/ui/menu/menu":["{0} ({1})"],"vs/base/browser/ui/tree/abstractTree":["\u6E05\u9664","\u5728\u985E\u578B\u4E0A\u505C\u7528\u7BE9\u9078","\u5728\u985E\u578B\u4E0A\u555F\u7528\u7BE9\u9078","\u627E\u4E0D\u5230\u4EFB\u4F55\u5143\u7D20","{1} \u9805\u5143\u7D20\u4E2D\u6709 {0} \u9805\u76F8\u7B26"],"vs/base/common/actions":["(\u7A7A\u7684)"],"vs/base/common/errorMessage":["{0}: {1}","\u767C\u751F\u7CFB\u7D71\u932F\u8AA4 ({0})","\u767C\u751F\u672A\u77E5\u7684\u932F\u8AA4\u3002\u5982\u9700\u8A73\u7D30\u8CC7\u8A0A\uFF0C\u8ACB\u53C3\u95B1\u8A18\u9304\u6A94\u3002","\u767C\u751F\u672A\u77E5\u7684\u932F\u8AA4\u3002\u5982\u9700\u8A73\u7D30\u8CC7\u8A0A\uFF0C\u8ACB\u53C3\u95B1\u8A18\u9304\u6A94\u3002","{0} (\u7E3D\u8A08 {1} \u500B\u932F\u8AA4)","\u767C\u751F\u672A\u77E5\u7684\u932F\u8AA4\u3002\u5982\u9700\u8A73\u7D30\u8CC7\u8A0A\uFF0C\u8ACB\u53C3\u95B1\u8A18\u9304\u6A94\u3002"],"vs/base/common/keybindingLabels":["Ctrl","Shift","Alt","Windows","Ctrl","Shift","Alt","\u8D85\u7D1A\u9375","Control","Shift","Alt","\u547D\u4EE4","Control","Shift","Alt","Windows","Control","Shift","Alt","\u8D85\u7D1A\u9375"],"vs/base/parts/quickinput/browser/quickInput":["\u4E0A\u4E00\u9801","{0}/{1}","\u8F38\u5165\u4EE5\u7E2E\u5C0F\u7D50\u679C\u7BC4\u570D\u3002","{0} \u500B\u7D50\u679C","\u5DF2\u9078\u64C7 {0}","\u78BA\u5B9A","\u81EA\u8A02","\u80CC\u9762 ({0})","\u4E0A\u4E00\u9801"],"vs/base/parts/quickinput/browser/quickInputList":["\u5FEB\u901F\u8F38\u5165"],"vs/editor/browser/controller/coreCommands":["\u5373\u4F7F\u884C\u7684\u9577\u5EA6\u904E\u9577\uFF0C\u4ECD\u8981\u5805\u6301\u81F3\u7D50\u5C3E","\u5373\u4F7F\u884C\u7684\u9577\u5EA6\u904E\u9577\uFF0C\u4ECD\u8981\u5805\u6301\u81F3\u7D50\u5C3E"],"vs/editor/browser/controller/textAreaHandler":["\u7DE8\u8F2F\u5668","\u76EE\u524D\u7121\u6CD5\u5B58\u53D6\u6B64\u7DE8\u8F2F\u5668\u3002\u8ACB\u6309 {0} \u53D6\u5F97\u9078\u9805\u3002"],"vs/editor/browser/core/keybindingCancellation":["\u7DE8\u8F2F\u5668\u662F\u5426\u57F7\u884C\u53EF\u53D6\u6D88\u7684\u4F5C\u696D\uFF0C\u4F8B\u5982\u300C\u9810\u89BD\u53C3\u8003\u300D"],"vs/editor/browser/editorExtensions":["\u5FA9\u539F(&&U)","\u5FA9\u539F","\u53D6\u6D88\u5FA9\u539F(&&R)","\u91CD\u505A","\u5168\u9078(&&S)","\u5168\u9078"],"vs/editor/browser/widget/codeEditorWidget":["\u6E38\u6A19\u6578\u5DF2\u9650\u5236\u70BA {0} \u500B\u3002"],"vs/editor/browser/widget/diffEditorWidget":["Diff \u7DE8\u8F2F\u5668\u4E2D\u7528\u65BC\u63D2\u5165\u7684\u7DDA\u689D\u88DD\u98FE\u3002","Diff \u7DE8\u8F2F\u5668\u4E2D\u7528\u65BC\u79FB\u9664\u7684\u7DDA\u689D\u88DD\u98FE\u3002","\u56E0\u5176\u4E2D\u4E00\u500B\u6A94\u6848\u904E\u5927\u800C\u7121\u6CD5\u6BD4\u8F03\u3002"],"vs/editor/browser/widget/diffReview":["Diff \u6AA2\u95B1\u4E2D [\u63D2\u5165] \u7684\u5716\u793A\u3002","Diff \u6AA2\u95B1\u4E2D [\u79FB\u9664] \u7684\u5716\u793A\u3002","Diff \u6AA2\u95B1\u4E2D [\u95DC\u9589] \u7684\u5716\u793A\u3002","\u95DC\u9589","\u672A\u8B8A\u66F4\u4EFB\u4E00\u884C","\u5DF2\u8B8A\u66F4 1 \u884C","\u5DF2\u8B8A\u66F4 {0} \u884C","{1} \u9805\u5DEE\u7570\u4E2D\u7684\u7B2C {0} \u9805: \u539F\u59CB\u884C {2}\u3001{3}\uFF0C\u4FEE\u6539\u884C {4}\u3001{5}","\u7A7A\u767D","{0} \u672A\u8B8A\u66F4\u884C {1}","{0} \u539F\u59CB\u884C {1} \u4FEE\u6539\u7684\u884C {2}","+ {0} \u4FEE\u6539\u884C {1}","- {0} \u539F\u59CB\u884C {1}","\u79FB\u81F3\u4E0B\u4E00\u500B\u5DEE\u7570","\u79FB\u81F3\u4E0A\u4E00\u500B\u5DEE\u7570"],"vs/editor/browser/widget/inlineDiffMargin":["\u8907\u88FD\u5DF2\u522A\u9664\u7684\u884C","\u8907\u88FD\u5DF2\u522A\u9664\u7684\u884C","\u8907\u88FD\u5DF2\u522A\u9664\u7684\u884C \uFF08{0}\uFF09","\u9084\u539F\u6B64\u8B8A\u66F4","\u8907\u88FD\u5DF2\u522A\u9664\u7684\u884C \uFF08{0}\uFF09"],"vs/editor/common/config/commonEditorConfig":["\u7DE8\u8F2F\u5668","\u8207 Tab \u76F8\u7B49\u7684\u7A7A\u683C\u6578\u91CF\u3002\u7576 `#editor.detectIndentation#` \u5DF2\u958B\u555F\u6642\uFF0C\u6703\u6839\u64DA\u6A94\u6848\u5167\u5BB9\u8986\u5BEB\u6B64\u8A2D\u5B9A\u3002","\u5728\u6309 `Tab` \u6642\u63D2\u5165\u7A7A\u683C\u3002\u7576 `#editor.detectIndentation#` \u958B\u555F\u6642\uFF0C\u6703\u6839\u64DA\u6A94\u6848\u5167\u5BB9\u8986\u5BEB\u6B64\u8A2D\u5B9A\u3002","\u6839\u64DA\u6A94\u6848\u5167\u5BB9\uFF0C\u63A7\u5236\u7576\u6A94\u6848\u958B\u555F\u6642\uFF0C\u662F\u5426\u81EA\u52D5\u5075\u6E2C `#editor.tabSize#` \u548C `#editor.insertSpaces#`\u3002","\u79FB\u9664\u5C3E\u7AEF\u81EA\u52D5\u63D2\u5165\u7684\u7A7A\u767D\u5B57\u5143\u3002","\u91DD\u5C0D\u5927\u578B\u6A94\u6848\u505C\u7528\u90E8\u5206\u9AD8\u8A18\u61B6\u9AD4\u9700\u6C42\u529F\u80FD\u7684\u7279\u6B8A\u8655\u7406\u65B9\u5F0F\u3002","\u63A7\u5236\u662F\u5426\u61C9\u6839\u64DA\u6587\u4EF6\u4E2D\u7684\u55AE\u5B57\u8A08\u7B97\u81EA\u52D5\u5B8C\u6210\u3002","\u50C5\u5EFA\u8B70\u4F86\u81EA\u4F7F\u7528\u4E2D\u6587\u4EF6\u4E2D\u7684\u5B57\u7D44\u3002","\u5EFA\u8B70\u4F86\u81EA\u6240\u6709\u5DF2\u958B\u555F\u6587\u4EF6\u4E2D\uFF0C\u8A9E\u8A00\u76F8\u540C\u7684\u5B57\u7D44\u3002","\u5EFA\u8B70\u4F86\u81EA\u6240\u6709\u5DF2\u958B\u555F\u6587\u4EF6\u4E2D\u7684\u5B57\u7D44\u3002","\u63A7\u5236\u8981\u5F9E\u54EA\u4E9B\u6587\u4EF6\u8A08\u7B97\u4EE5\u5B57\u7D44\u70BA\u57FA\u790E\u7684\u5B8C\u6210\u4F5C\u696D\u3002","\u6240\u6709\u5F69\u8272\u4E3B\u984C\u7686\u5DF2\u555F\u7528\u8A9E\u610F\u9192\u76EE\u63D0\u793A\u3002","\u6240\u6709\u5F69\u8272\u4E3B\u984C\u7686\u5DF2\u505C\u7528\u8A9E\u610F\u9192\u76EE\u63D0\u793A\u3002","\u8A9E\u610F\u9192\u76EE\u63D0\u793A\u7531\u76EE\u524D\u4E4B\u5F69\u8272\u4F48\u666F\u4E3B\u984C\u7684 'semanticHighlighting' \u8A2D\u5B9A\u6240\u8A2D\u5B9A\u3002","\u63A7\u5236 semanticHighlighting \u662F\u5426\u6703\u70BA\u652F\u63F4\u7684\u8A9E\u8A00\u986F\u793A\u3002","\u5373\u4F7F\u6309\u5169\u4E0B\u5167\u5BB9\u6216\u6309 `Escape`\uFF0C\u4ECD\u4FDD\u6301\u7784\u5B54\u7DE8\u8F2F\u5668\u958B\u555F\u3002","\u56E0\u6548\u80FD\u7684\u7DE3\u6545\uFF0C\u4E0D\u6703\u5C07\u8D85\u904E\u6B64\u9AD8\u5EA6\u7684\u884C Token \u5316","\u53D6\u6D88 Diff \u8A08\u7B97\u524D\u7684\u903E\u6642\u9650\u5236 (\u6BEB\u79D2)\u3002\u82E5\u7121\u903E\u6642\uFF0C\u8ACB\u4F7F\u7528 0\u3002","\u63A7\u5236 Diff \u7DE8\u8F2F\u5668\u8981\u4E26\u6392\u6216\u5167\u5D4C\u986F\u793A Diff\u3002","\u555F\u7528\u6642\uFF0CDiff \u7DE8\u8F2F\u5668\u6703\u5FFD\u7565\u524D\u7F6E\u6216\u5F8C\u7F6E\u7A7A\u683C\u7684\u8B8A\u66F4\u3002","\u63A7\u5236 Diff \u7DE8\u8F2F\u5668\u662F\u5426\u8981\u70BA\u65B0\u589E/\u79FB\u9664\u7684\u8B8A\u66F4\u986F\u793A +/- \u6A19\u8A18\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u662F\u5426\u986F\u793A codelens\u3002","\u4E00\u5F8B\u4E0D\u63DB\u884C\u3002","\u4F9D\u6AA2\u8996\u5340\u5BEC\u5EA6\u63DB\u884C\u3002","\u5C07\u4F9D\u64DA `#editor.wordWrap#` \u8A2D\u5B9A\u81EA\u52D5\u63DB\u884C\u3002"],"vs/editor/common/config/editorOptions":["\u7DE8\u8F2F\u5668\u5C07\u4F7F\u7528\u5E73\u53F0 API \u4EE5\u5075\u6E2C\u87A2\u5E55\u52A9\u8B80\u7A0B\u5F0F\u9644\u52A0\u3002","\u7DE8\u8F2F\u5668\u5C07\u4E00\u5F8B\u6700\u4F73\u5316\u4EE5\u7528\u65BC\u87A2\u5E55\u52A9\u8B80\u7A0B\u5F0F\u3002\u81EA\u52D5\u63DB\u884C\u5C07\u6703\u505C\u7528\u3002","\u7DE8\u8F2F\u5668\u4E0D\u6703\u70BA\u87A2\u5E55\u52A9\u8B80\u7A0B\u5F0F\u7684\u4F7F\u7528\u65B9\u5F0F\u9032\u884C\u6700\u4F73\u5316\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u662F\u5426\u61C9\u65BC\u5DF2\u70BA\u87A2\u5E55\u52A9\u8B80\u7A0B\u5F0F\u6700\u4F73\u5316\u7684\u6A21\u5F0F\u4E2D\u57F7\u884C\u3002\u8A2D\u5B9A\u70BA\u958B\u555F\u6703\u505C\u7528\u81EA\u52D5\u63DB\u884C\u3002","\u63A7\u5236\u662F\u5426\u8981\u5728\u8A3B\u89E3\u6642\u63D2\u5165\u7A7A\u767D\u5B57\u5143\u3002","\u63A7\u5236\u662F\u5426\u61C9\u4EE5\u884C\u8A3B\u89E3\u7684\u5207\u63DB\u3001\u65B0\u589E\u6216\u79FB\u9664\u52D5\u4F5C\uFF0C\u5FFD\u7565\u7A7A\u767D\u7684\u884C\u3002","\u63A7\u5236\u8907\u88FD\u6642\u4E0D\u9078\u53D6\u4EFB\u4F55\u9805\u76EE\u662F\u5426\u6703\u8907\u88FD\u76EE\u524D\u7A0B\u5F0F\u884C\u3002","\u63A7\u5236\u5728\u8F38\u5165\u671F\u9593\u662F\u5426\u8981\u8DF3\u904E\u6E38\u6A19\u4F86\u5C0B\u627E\u76F8\u7B26\u7684\u9805\u76EE\u3002","\u63A7\u5236 [\u5C0B\u627E\u5C0F\u5DE5\u5177] \u4E2D\u7684\u641C\u5C0B\u5B57\u4E32\u662F\u5426\u4F86\u81EA\u7DE8\u8F2F\u5668\u9078\u53D6\u9805\u76EE\u3002","\u6C38\u4E0D\u81EA\u52D5\u958B\u555F [\u5728\u9078\u53D6\u7BC4\u570D\u4E2D\u5C0B\u627E] (\u9810\u8A2D)","\u4E00\u5F8B\u81EA\u52D5\u958B\u555F [\u5728\u9078\u53D6\u7BC4\u570D\u4E2D\u5C0B\u627E]","\u9078\u53D6\u591A\u884C\u5167\u5BB9\u6642\uFF0C\u81EA\u52D5\u958B\u555F [\u5728\u9078\u53D6\u7BC4\u570D\u4E2D\u5C0B\u627E]\u3002","\u63A7\u5236\u81EA\u52D5\u958B\u555F\u5728\u9078\u53D6\u7BC4\u570D\u4E2D\u5C0B\u627E\u7684\u689D\u4EF6\u3002","\u63A7\u5236\u5C0B\u627E\u5C0F\u5DE5\u5177\u662F\u5426\u5728 macOS \u4E0A\u8B80\u53D6\u6216\u4FEE\u6539\u5171\u7528\u5C0B\u627E\u526A\u8CBC\u7C3F\u3002","\u63A7\u5236\u5C0B\u627E\u5C0F\u5DE5\u5177\u662F\u5426\u61C9\u5728\u7DE8\u8F2F\u5668\u9802\u7AEF\u984D\u5916\u65B0\u589E\u884C\u3002\u82E5\u70BA true\uFF0C\u7576\u60A8\u53EF\u770B\u5230\u5C0B\u627E\u5C0F\u5DE5\u5177\u6642\uFF0C\u60A8\u7684\u6372\u52D5\u7BC4\u570D\u6703\u8D85\u904E\u7B2C\u4E00\u884C\u3002","\u7576\u518D\u4E5F\u627E\u4E0D\u5230\u5176\u4ED6\u76F8\u7B26\u9805\u76EE\u6642\uFF0C\u63A7\u5236\u662F\u5426\u81EA\u52D5\u5F9E\u958B\u982D (\u6216\u7D50\u5C3E) \u91CD\u65B0\u958B\u59CB\u641C\u5C0B\u3002","\u555F\u7528/\u505C\u7528\u9023\u5B57\u5B57\u578B ('calt' \u548C 'liga' \u5B57\u578B\u529F\u80FD)\u3002\u5C07\u6B64\u9805\u8B8A\u66F4\u70BA\u5B57\u4E32\uFF0C\u4EE5\u7CBE\u78BA\u63A7\u5236 'font-feature-settings' CSS \u5C6C\u6027\u3002","\u660E\u78BA\u7684 'font-feature-settings' CSS \u5C6C\u6027\u3002\u5982\u679C\u53EA\u9700\u8981\u958B\u555F/\u95DC\u9589\u9023\u5B57\uFF0C\u53EF\u4EE5\u6539\u70BA\u50B3\u905E\u5E03\u6797\u503C\u3002","\u8A2D\u5B9A\u9023\u5B57\u5B57\u578B\u6216\u5B57\u578B\u529F\u80FD\u3002\u53EF\u4EE5\u662F\u5E03\u6797\u503C\u4EE5\u555F\u7528/\u505C\u7528\u9023\u5B57\uFF0C\u6216\u4EE3\u8868 CSS 'font-feature-settings' \u5C6C\u6027\u7684\u5B57\u4E32\u3002","\u63A7\u5236\u5B57\u578B\u5927\u5C0F (\u50CF\u7D20)\u3002","\u53EA\u5141\u8A31\u300C\u4E00\u822C\u300D\u53CA\u300C\u7C97\u9AD4\u300D\u95DC\u9375\u5B57\uFF0C\u6216\u4ECB\u65BC 1 \u5230 1000 \u4E4B\u9593\u7684\u6578\u503C\u3002","\u63A7\u5236\u5B57\u578B\u7C97\u7D30\u3002\u63A5\u53D7\u300C\u4E00\u822C\u300D\u53CA\u300C\u7C97\u9AD4\u300D\u95DC\u9375\u5B57\uFF0C\u6216\u4ECB\u65BC 1 \u5230 1000 \u4E4B\u9593\u7684\u6578\u503C\u3002","\u986F\u793A\u7D50\u679C\u7684\u9810\u89BD\u6AA2\u8996 (\u9810\u8A2D)","\u79FB\u81F3\u4E3B\u8981\u7D50\u679C\u4E26\u986F\u793A\u9810\u89BD\u6AA2\u8996","\u524D\u5F80\u4E3B\u8981\u7D50\u679C\uFF0C\u4E26\u5C0D\u5176\u4ED6\u4EBA\u555F\u7528\u7121\u9810\u89BD\u700F\u89BD","\u6B64\u8A2D\u5B9A\u5DF2\u6DD8\u6C70\uFF0C\u8ACB\u6539\u7528 'editor.editor.gotoLocation.multipleDefinitions' \u6216 'editor.editor.gotoLocation.multipleImplementations' \u7B49\u55AE\u7368\u8A2D\u5B9A\u3002","\u63A7\u5236 'Go to Definition' \u547D\u4EE4\u5728\u6709\u591A\u500B\u76EE\u6A19\u4F4D\u7F6E\u5B58\u5728\u6642\u7684\u884C\u70BA\u3002","\u63A7\u5236 'Go to Type Definition' \u547D\u4EE4\u5728\u6709\u591A\u500B\u76EE\u6A19\u4F4D\u7F6E\u5B58\u5728\u6642\u7684\u884C\u70BA\u3002","\u63A7\u5236 'Go to Declaration' \u547D\u4EE4\u5728\u6709\u591A\u500B\u76EE\u6A19\u4F4D\u7F6E\u5B58\u5728\u6642\u7684\u884C\u70BA\u3002","\u63A7\u5236 'Go to Implementations' \u547D\u4EE4\u5728\u6709\u591A\u500B\u76EE\u6A19\u4F4D\u7F6E\u5B58\u5728\u6642\u7684\u884C\u70BA\u3002","\u63A7\u5236 'Go to References' \u547D\u4EE4\u5728\u6709\u591A\u500B\u76EE\u6A19\u4F4D\u7F6E\u5B58\u5728\u6642\u7684\u884C\u70BA\u3002","\u7576 'Go to Definition' \u7684\u7D50\u679C\u70BA\u76EE\u524D\u4F4D\u7F6E\u6642\uFF0C\u6B63\u5728\u57F7\u884C\u7684\u66FF\u4EE3\u547D\u4EE4\u8B58\u5225\u78BC\u3002","\u7576 'Go to Type Definition' \u7684\u7D50\u679C\u70BA\u76EE\u524D\u4F4D\u7F6E\u6642\uFF0C\u6B63\u5728\u57F7\u884C\u7684\u66FF\u4EE3\u547D\u4EE4\u8B58\u5225\u78BC\u3002","\u7576 'Go to Declaration' \u7684\u7D50\u679C\u70BA\u76EE\u524D\u4F4D\u7F6E\u6642\uFF0C\u6B63\u5728\u57F7\u884C\u7684\u66FF\u4EE3\u547D\u4EE4\u8B58\u5225\u78BC\u3002","\u7576 'Go to Implementation' \u7684\u7D50\u679C\u70BA\u76EE\u524D\u4F4D\u7F6E\u6642\uFF0C\u6B63\u5728\u57F7\u884C\u7684\u66FF\u4EE3\u547D\u4EE4\u8B58\u5225\u78BC\u3002","\u7576 'Go to Reference' \u7684\u7D50\u679C\u70BA\u76EE\u524D\u4F4D\u7F6E\u6642\uFF0C\u6B63\u5728\u57F7\u884C\u7684\u66FF\u4EE3\u547D\u4EE4\u8B58\u5225\u78BC\u3002","\u63A7\u5236\u662F\u5426\u986F\u793A\u66AB\u7559\u3002","\u63A7\u5236\u66AB\u7559\u986F\u793A\u7684\u5EF6\u9072\u6642\u9593 (\u4EE5\u6BEB\u79D2\u70BA\u55AE\u4F4D)\u3002","\u63A7\u5236\u7576\u6ED1\u9F20\u79FB\u904E\u6642\uFF0C\u662F\u5426\u61C9\u4FDD\u6301\u986F\u793A\u66AB\u7559\u3002","\u5728\u7DE8\u8F2F\u5668\u4E2D\u555F\u7528\u7A0B\u5F0F\u78BC\u52D5\u4F5C\u71C8\u6CE1\u3002","\u555F\u7528\u7DE8\u8F2F\u5668\u4E2D\u7684\u5167\u5D4C\u63D0\u793A\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u4E2D\u7684\u5167\u5D4C\u63D0\u793A\u5B57\u578B\u5927\u5C0F\u3002\u8A2D\u5B9A\u70BA `0` \u6642\uFF0C\u6703\u4F7F\u7528 90% \u7684 `#editor.fontSize#`\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u4E2D\u7684\u5167\u5D4C\u63D0\u793A\u5B57\u578B\u5BB6\u65CF\u3002","\u63A7\u5236\u884C\u9AD8\u3002\u4F7F\u7528 0 \u6703\u5F9E\u5B57\u578B\u5927\u5C0F\u8A08\u7B97\u884C\u9AD8\u3002","\u63A7\u5236\u662F\u5426\u6703\u986F\u793A\u7E2E\u5716","\u7E2E\u5716\u5927\u5C0F\u8207\u7DE8\u8F2F\u5668\u5167\u5BB9\u76F8\u540C (\u4E14\u53EF\u80FD\u6703\u6372\u52D5)\u3002","\u7E2E\u5716\u6703\u8996\u9700\u8981\u4F38\u7E2E\uFF0C\u4EE5\u586B\u6EFF\u8A72\u7DE8\u8F2F\u5668\u7684\u9AD8\u5EA6 (\u7121\u6372\u52D5)\u3002","\u7E2E\u5716\u5C07\u8996\u9700\u8981\u7E2E\u5C0F\uFF0C\u4E00\u5F8B\u4E0D\u6703\u5927\u65BC\u8A72\u7DE8\u8F2F\u5668 (\u7121\u6372\u52D5)\u3002","\u63A7\u5236\u7E2E\u5716\u7684\u5927\u5C0F\u3002","\u63A7\u5236\u8981\u5728\u54EA\u7AEF\u5448\u73FE\u7E2E\u5716\u3002","\u63A7\u5236\u4F55\u6642\u986F\u793A\u8FF7\u4F60\u5730\u5716\u6ED1\u687F\u3002","\u7E2E\u5716\u5167\u6240\u7E6A\u88FD\u7684\u5167\u5BB9\u5927\u5C0F: 1\u30012 \u6216 3\u3002","\u986F\u793A\u884C\u4E2D\u7684\u5BE6\u969B\u5B57\u5143\uFF0C\u800C\u4E0D\u662F\u8272\u5F69\u5340\u584A\u3002","\u9650\u5236\u7E2E\u5716\u7684\u5BEC\u5EA6\uFF0C\u6700\u591A\u986F\u793A\u67D0\u500B\u6578\u76EE\u7684\u5217\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u4E0A\u908A\u7DE3\u8207\u7B2C\u4E00\u884C\u4E4B\u9593\u7684\u7A7A\u683C\u6578\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u4E0B\u908A\u7DE3\u8207\u6700\u5F8C\u4E00\u884C\u4E4B\u9593\u7684\u7A7A\u683C\u6578\u3002","\u555F\u7528\u5FEB\u986F\uFF0C\u5728\u60A8\u9375\u5165\u7684\u540C\u6642\u986F\u793A\u53C3\u6578\u6587\u4EF6\u548C\u985E\u578B\u8CC7\u8A0A\u3002","\u63A7\u5236\u63D0\u793A\u529F\u80FD\u8868\u662F\u5426\u5728\u6E05\u55AE\u7D50\u5C3E\u6642\u5FAA\u74B0\u6216\u95DC\u9589\u3002","\u5141\u8A31\u5728\u5B57\u4E32\u5167\u986F\u793A\u5373\u6642\u5EFA\u8B70\u3002","\u5141\u8A31\u5728\u8A3B\u89E3\u4E2D\u986F\u793A\u5373\u6642\u5EFA\u8B70\u3002","\u5141\u8A31\u5728\u5B57\u4E32\u8207\u8A3B\u89E3\u4EE5\u5916\u4E4B\u8655\u986F\u793A\u5373\u6642\u5EFA\u8B70\u3002","\u63A7\u5236\u662F\u5426\u61C9\u5728\u9375\u5165\u6642\u81EA\u52D5\u986F\u793A\u5EFA\u8B70\u3002","\u4E0D\u986F\u793A\u884C\u865F\u3002","\u884C\u865F\u4EE5\u7D55\u5C0D\u503C\u986F\u793A\u3002","\u884C\u865F\u4EE5\u76EE\u524D\u6E38\u6A19\u7684\u76F8\u5C0D\u503C\u986F\u793A\u3002","\u6BCF 10 \u884C\u986F\u793A\u884C\u865F\u3002","\u63A7\u5236\u884C\u865F\u7684\u986F\u793A\u3002","\u9019\u500B\u7DE8\u8F2F\u5668\u5C3A\u898F\u6703\u8F49\u8B6F\u7684\u7B49\u5BEC\u5B57\u5143\u6578\u3002","\u6B64\u7DE8\u8F2F\u5668\u5C3A\u898F\u7684\u8272\u5F69\u3002","\u5728\u67D0\u500B\u6578\u76EE\u7684\u7B49\u5BEC\u5B57\u5143\u4E4B\u5F8C\u986F\u793A\u5782\u76F4\u5C3A\u898F\u3002\u5982\u6709\u591A\u500B\u5C3A\u898F\uFF0C\u5C31\u6703\u4F7F\u7528\u591A\u500B\u503C\u3002\u82E5\u9663\u5217\u7A7A\u767D\uFF0C\u5C31\u4E0D\u6703\u7E6A\u88FD\u4EFB\u4F55\u5C3A\u898F\u3002","\u63D2\u5165\u5EFA\u8B70\u800C\u4E0D\u8986\u5BEB\u6E38\u6A19\u65C1\u7684\u6587\u5B57\u3002","\u63D2\u5165\u5EFA\u8B70\u4E26\u8986\u5BEB\u6E38\u6A19\u65C1\u7684\u6587\u5B57\u3002","\u63A7\u5236\u662F\u5426\u8981\u5728\u63A5\u53D7\u5B8C\u6210\u6642\u8986\u5BEB\u5B57\u7D44\u3002\u8ACB\u6CE8\u610F\uFF0C\u9019\u53D6\u6C7A\u65BC\u52A0\u5165\u6B64\u529F\u80FD\u7684\u5EF6\u4F38\u6A21\u7D44\u3002","\u63A7\u5236\u5C0D\u65BC\u62DA\u932F\u5B57\u662F\u5426\u9032\u884C\u7BE9\u9078\u548C\u6392\u5E8F\u5176\u5EFA\u8B70","\u63A7\u5236\u6392\u5E8F\u662F\u5426\u6703\u504F\u597D\u6E38\u6A19\u9644\u8FD1\u51FA\u73FE\u7684\u5B57\u7D44\u3002","\u63A7\u5236\u8A18\u9304\u7684\u5EFA\u8B70\u9078\u53D6\u9805\u76EE\u662F\u5426\u5728\u591A\u500B\u5DE5\u4F5C\u5340\u548C\u8996\u7A97\u9593\u5171\u7528 (\u9700\u8981 `#editor.suggestSelection#`)\u3002","\u63A7\u5236\u6B63\u5728\u4F7F\u7528\u7684\u7A0B\u5F0F\u78BC\u7247\u6BB5\u662F\u5426\u6703\u907F\u514D\u5FEB\u901F\u5EFA\u8B70\u3002","\u63A7\u5236\u8981\u5728\u5EFA\u8B70\u4E2D\u986F\u793A\u6216\u96B1\u85CF\u5716\u793A\u3002","\u63A7\u5236\u5EFA\u8B70\u5C0F\u5DE5\u5177\u5E95\u4E0B\u7684\u72C0\u614B\u5217\u53EF\u898B\u5EA6\u3002","\u63A7\u5236\u5EFA\u8B70\u8A73\u7D30\u8CC7\u6599\u662F\u4EE5\u5167\u5D4C\u65BC\u6A19\u7C64\u7684\u65B9\u5F0F\u986F\u793A\uFF0C\u9084\u662F\u53EA\u5728\u8A73\u7D30\u8CC7\u6599\u5C0F\u5DE5\u5177\u4E2D\u986F\u793A","\u6B64\u8A2D\u5B9A\u5DF2\u6DD8\u6C70\u3002\u5EFA\u8B70\u5C0F\u5DE5\u5177\u73FE\u53EF\u8ABF\u6574\u5927\u5C0F\u3002","\u6B64\u8A2D\u5B9A\u5DF2\u6DD8\u6C70\uFF0C\u8ACB\u6539\u7528 'editor.suggest.showKeywords' \u6216 'editor.suggest.showSnippets' \u7B49\u55AE\u7368\u8A2D\u5B9A\u3002","\u555F\u7528\u6642\uFF0CIntelliSense \u986F\u793A\u300C\u65B9\u6CD5\u300D\u5EFA\u8B70\u3002","\u555F\u7528\u6642\uFF0CIntelliSense \u986F\u793A\u300C\u51FD\u5F0F\u300D\u5EFA\u8B70\u3002","\u555F\u7528\u6642\uFF0CIntelliSense \u986F\u793A\u300C\u5EFA\u69CB\u51FD\u5F0F\u300D\u5EFA\u8B70\u3002","\u555F\u7528\u6642\uFF0CIntelliSense \u986F\u793A\u300C\u6B04\u4F4D\u300D\u5EFA\u8B70\u3002","\u555F\u7528\u6642\uFF0CIntelliSense \u986F\u793A\u300C\u8B8A\u6578\u300D\u5EFA\u8B70\u3002","\u555F\u7528\u6642\uFF0CIntelliSense \u986F\u793A\u300C\u985E\u5225\u300D\u5EFA\u8B70\u3002","\u555F\u7528\u6642\uFF0CIntelliSense \u986F\u793A\u300C\u7D50\u69CB\u300D\u5EFA\u8B70\u3002","\u555F\u7528\u6642\uFF0CIntelliSense \u986F\u793A\u300C\u4ECB\u9762\u300D\u5EFA\u8B70\u3002","\u555F\u7528\u6642\uFF0CIntelliSense \u986F\u793A\u300C\u6A21\u7D44\u300D\u5EFA\u8B70\u3002","\u555F\u7528\u6642\uFF0CIntelliSense \u986F\u793A\u300C\u5C6C\u6027\u300D\u5EFA\u8B70\u3002","\u555F\u7528\u6642\uFF0CIntelliSense \u986F\u793A\u300C\u4E8B\u4EF6\u300D\u5EFA\u8B70\u3002","\u555F\u7528\u6642\uFF0CIntelliSense \u986F\u793A\u300C\u904B\u7B97\u5B50\u300D\u5EFA\u8B70\u3002","\u555F\u7528\u6642\uFF0CIntelliSense \u986F\u793A\u300C\u55AE\u4F4D\u300D\u5EFA\u8B70\u3002","\u555F\u7528\u6642\uFF0CIntelliSense \u986F\u793A\u300C\u503C\u300D\u5EFA\u8B70\u3002","\u555F\u7528\u6642\uFF0CIntelliSense \u986F\u793A\u300C\u5E38\u6578\u300D\u5EFA\u8B70\u3002","\u555F\u7528\u6642\uFF0CIntelliSense \u986F\u793A\u300C\u5217\u8209\u300D\u5EFA\u8B70\u3002","\u555F\u7528\u6642\uFF0CIntelliSense \u986F\u793A\u300CenumMember\u300D\u5EFA\u8B70\u3002","\u555F\u7528\u6642\uFF0CIntelliSense \u986F\u793A\u300C\u95DC\u9375\u5B57\u300D\u5EFA\u8B70\u3002","\u555F\u7528\u6642\uFF0CIntelliSense \u986F\u793A\u300C\u6587\u5B57\u300D\u5EFA\u8B70\u3002","\u555F\u7528\u6642\uFF0CIntelliSense \u986F\u793A\u300C\u8272\u5F69\u300D\u5EFA\u8B70\u3002","\u555F\u7528\u6642\uFF0CIntelliSense \u986F\u793A\u300C\u6A94\u6848\u300D\u5EFA\u8B70\u3002","\u555F\u7528\u6642\uFF0CIntelliSense \u986F\u793A\u300C\u53C3\u8003\u300D\u5EFA\u8B70\u3002","\u555F\u7528\u6642\uFF0CIntelliSense \u986F\u793A\u300Ccustomcolor\u300D\u5EFA\u8B70\u3002","\u555F\u7528\u6642\uFF0CIntelliSense \u986F\u793A\u300C\u8CC7\u6599\u593E\u300D\u5EFA\u8B70\u3002","\u555F\u7528\u6642\uFF0CIntelliSense \u986F\u793A\u300CtypeParameter\u300D\u5EFA\u8B70\u3002","\u555F\u7528\u6642\uFF0CIntelliSense \u986F\u793A\u300C\u7A0B\u5F0F\u78BC\u7247\u6BB5\u300D\u5EFA\u8B70\u3002","\u555F\u7528\u4E4B\u5F8C\uFF0CIntelliSense \u6703\u986F\u793A `user`-suggestions\u3002","\u555F\u7528\u6642\uFF0CIntelliSense \u6703\u986F\u793A `issues`-suggestions\u3002","\u662F\u5426\u61C9\u4E00\u5F8B\u9078\u53D6\u524D\u7F6E\u548C\u5F8C\u7F6E\u7684\u7A7A\u767D\u5B57\u5143\u3002","\u63A7\u5236\u662F\u5426\u900F\u904E\u8A8D\u53EF\u5B57\u5143\u63A5\u53D7\u5EFA\u8B70\u3002\u4F8B\u5982\u5728 JavaScript \u4E2D\uFF0C\u5206\u865F (';') \u53EF\u4EE5\u662F\u63A5\u53D7\u5EFA\u8B70\u4E26\u9375\u5165\u8A72\u5B57\u5143\u7684\u8A8D\u53EF\u5B57\u5143\u3002","\u5728\u5EFA\u8B70\u9032\u884C\u6587\u5B57\u8B8A\u66F4\u6642\uFF0C\u50C5\u900F\u904E `Enter` \u63A5\u53D7\u5EFA\u8B70\u3002","\u63A7\u5236\u9664\u4E86 'Tab' \u5916\uFF0C\u662F\u5426\u4E5F\u900F\u904E 'Enter' \u63A5\u53D7\u5EFA\u8B70\u3002\u9019\u6709\u52A9\u65BC\u907F\u514D\u6DF7\u6DC6\u8981\u63D2\u5165\u65B0\u884C\u6216\u63A5\u53D7\u5EFA\u8B70\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u4E2D\u87A2\u5E55\u52A9\u8B80\u7A0B\u5F0F\u53EF\u8B80\u51FA\u7684\u884C\u6578\u3002\u8B66\u544A: \u5927\u65BC\u9810\u8A2D\u7684\u6578\u76EE\u6703\u5C0D\u6548\u80FD\u7522\u751F\u5F71\u97FF\u3002","\u7DE8\u8F2F\u5668\u5167\u5BB9","\u4F7F\u7528\u8A9E\u8A00\u914D\u7F6E\u78BA\u5B9A\u4F55\u6642\u81EA\u52D5\u95DC\u9589\u62EC\u865F\u3002","\u50C5\u7576\u6E38\u6A19\u4F4D\u65BC\u7A7A\u767D\u7684\u5DE6\u5074\u6642\u81EA\u52D5\u95DC\u9589\u62EC\u865F\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u662F\u5426\u61C9\u5728\u4F7F\u7528\u8005\u65B0\u589E\u5DE6\u62EC\u5F27\u5F8C\uFF0C\u81EA\u52D5\u52A0\u4E0A\u53F3\u62EC\u5F27\u3002","\u50C5\u5728\u81EA\u52D5\u63D2\u5165\u53F3\u5F15\u865F\u6216\u62EC\u865F\u6642\uFF0C\u624D\u5728\u5176\u4E0A\u65B9\u9375\u5165\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u662F\u5426\u61C9\u5728\u53F3\u5F15\u865F\u6216\u62EC\u865F\u4E0A\u9375\u5165\u3002","\u4F7F\u7528\u8A9E\u8A00\u914D\u7F6E\u78BA\u5B9A\u4F55\u6642\u81EA\u52D5\u95DC\u9589\u5F15\u865F\u3002","\u50C5\u7576\u6E38\u6A19\u4F4D\u65BC\u7A7A\u767D\u7684\u5DE6\u5074\u6642\u81EA\u52D5\u95DC\u9589\u5F15\u865F\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u662F\u5426\u61C9\u5728\u4F7F\u7528\u8005\u65B0\u589E\u958B\u59CB\u5F15\u865F\u5F8C\uFF0C\u81EA\u52D5\u52A0\u4E0A\u95DC\u9589\u5F15\u865F\u3002","\u7DE8\u8F2F\u5668\u4E0D\u6703\u81EA\u52D5\u63D2\u5165\u7E2E\u6392\u3002","\u7DE8\u8F2F\u5668\u6703\u4FDD\u7559\u76EE\u524D\u884C\u7684\u7E2E\u6392\u3002","\u7DE8\u8F2F\u5668\u6703\u4FDD\u7559\u76EE\u524D\u884C\u7684\u7E2E\u6392\u4E26\u63A5\u53D7\u8A9E\u8A00\u5B9A\u7FA9\u7684\u62EC\u865F\u3002","\u7DE8\u8F2F\u5668\u6703\u76EE\u524D\u884C\u7684\u7E2E\u6392\u3001\u63A5\u53D7\u8A9E\u8A00\u5B9A\u7FA9\u7684\u62EC\u865F\u4E26\u53EB\u7528\u8A9E\u8A00\u5B9A\u7FA9\u7684\u7279\u6B8A onEnterRules\u3002","\u7DE8\u8F2F\u5668\u6703\u4FDD\u7559\u76EE\u524D\u884C\u7684\u7E2E\u6392\u3001\u63A5\u53D7\u8A9E\u8A00\u5B9A\u7FA9\u7684\u62EC\u865F\u4E26\u53EB\u7528\u8A9E\u8A00\u5B9A\u7FA9\u7684\u7279\u6B8A onEnterRules \u4E26\u63A5\u53D7\u8A9E\u8A00\u5B9A\u7FA9\u7684 indentationRules\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u662F\u5426\u61C9\u5728\u4F7F\u7528\u8005\u9375\u5165\u3001\u8CBC\u4E0A\u3001\u79FB\u52D5\u6216\u7E2E\u6392\u884C\u6642\u81EA\u52D5\u8ABF\u6574\u7E2E\u6392\u3002","\u4F7F\u7528\u8A9E\u8A00\u7D44\u614B\u4F86\u6C7A\u5B9A\u4F55\u6642\u81EA\u52D5\u74B0\u7E5E\u9078\u53D6\u9805\u76EE\u3002","\u7528\u5F15\u865F\u62EC\u4F4F\uFF0C\u800C\u975E\u4F7F\u7528\u62EC\u5F27\u3002","\u7528\u62EC\u5F27\u62EC\u4F4F\uFF0C\u800C\u975E\u4F7F\u7528\u5F15\u865F\u3002 ","\u63A7\u5236\u7DE8\u8F2F\u5668\u662F\u5426\u61C9\u5728\u9375\u5165\u5F15\u865F\u6216\u62EC\u5F27\u6642\u81EA\u52D5\u5305\u570D\u9078\u53D6\u7BC4\u570D\u3002","\u7576\u4F7F\u7528\u7A7A\u683C\u9032\u884C\u7E2E\u6392\u6642\uFF0C\u6703\u6A21\u64EC\u5B9A\u4F4D\u5B57\u5143\u7684\u9078\u53D6\u884C\u70BA\u3002\u9078\u53D6\u7BC4\u570D\u6703\u4F9D\u5FAA\u5B9A\u4F4D\u505C\u99D0\u9EDE\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u662F\u5426\u986F\u793A codelens\u3002","\u63A7\u5236 CodeLens \u7684\u5B57\u578B\u5BB6\u65CF\u3002","\u63A7\u5236 CodeLens \u7684\u5B57\u578B\u5927\u5C0F (\u50CF\u7D20)\u3002\u8A2D\u5B9A\u70BA `0` \u6642\uFF0C\u6703\u4F7F\u7528 90% \u7684 `#editor.fontSize#`\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u662F\u5426\u61C9\u8F49\u8B6F\u5167\u5D4C\u8272\u5F69\u88DD\u98FE\u9805\u76EE\u8207\u8272\u5F69\u9078\u64C7\u5668\u3002","\u555F\u7528\u5373\u53EF\u4EE5\u6ED1\u9F20\u8207\u6309\u9375\u9078\u53D6\u9032\u884C\u8CC7\u6599\u884C\u9078\u53D6\u3002","\u63A7\u5236\u8A9E\u6CD5\u9192\u76EE\u63D0\u793A\u662F\u5426\u61C9\u8907\u88FD\u5230\u526A\u8CBC\u7C3F\u3002","\u63A7\u5236\u8CC7\u6599\u6307\u6A19\u52D5\u756B\u6A23\u5F0F\u3002","\u63A7\u5236\u662F\u5426\u61C9\u555F\u7528\u5E73\u6ED1\u63D2\u5165\u9EDE\u52D5\u756B\u3002 ","\u63A7\u5236\u8CC7\u6599\u6307\u6A19\u6A23\u5F0F\u3002","\u63A7\u5236\u6E38\u6A19\u4E0A\u4E0B\u5468\u570D\u53EF\u986F\u793A\u7684\u6700\u5C11\u884C\u6578\u3002\u5728\u67D0\u4E9B\u7DE8\u8F2F\u5668\u4E2D\u7A31\u70BA 'scrollOff' \u6216 'scrollOffset'\u3002","\u53EA\u6709\u901A\u904E\u9375\u76E4\u6216 API \u89F8\u767C\u6642\uFF0C\u624D\u6703\u65BD\u884C `cursorSurroundingLines`\u3002","\u4E00\u5F8B\u5F37\u5236\u57F7\u884C `cursorSurroundingLines`","\u63A7\u5236\u61C9\u65BD\u884C `cursorSurroundingLines` \u7684\u6642\u6A5F\u3002","\u63A7\u5236\u6E38\u6A19\u5BEC\u5EA6\uFF0C\u7576 `#editor.cursorStyle#` \u8A2D\u5B9A\u70BA `line` \u6642\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u662F\u5426\u5141\u8A31\u900F\u904E\u62D6\u653E\u4F86\u79FB\u52D5\u9078\u53D6\u9805\u76EE\u3002","\u6309\u4E0B `Alt` \u6642\u7684\u6372\u52D5\u901F\u5EA6\u4E58\u6578\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u662F\u5426\u555F\u7528\u7A0B\u5F0F\u78BC\u647A\u758A\u529F\u80FD\u3002","\u4F7F\u7528\u8A9E\u8A00\u7279\u5B9A\u647A\u758A\u7B56\u7565 (\u5982\u679C\u53EF\u7528)\uFF0C\u5426\u5247\u4F7F\u7528\u7E2E\u6392\u5F0F\u7B56\u7565\u3002","\u4F7F\u7528\u7E2E\u6392\u5F0F\u647A\u758A\u7B56\u7565\u3002","\u63A7\u5236\u8A08\u7B97\u8CC7\u6599\u593E\u7BC4\u570D\u7684\u7B56\u7565\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u662F\u5426\u61C9\u5C07\u6298\u758A\u7684\u7BC4\u570D\u9192\u76EE\u63D0\u793A\u3002","\u63A7\u5236\u6309\u4E00\u4E0B\u5DF2\u6298\u758A\u884C\u5F8C\u65B9\u7684\u7A7A\u767D\u5167\u5BB9\u662F\u5426\u6703\u5C55\u958B\u884C\u3002","\u63A7\u5236\u5B57\u578B\u5BB6\u65CF\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u662F\u5426\u61C9\u81EA\u52D5\u70BA\u8CBC\u4E0A\u7684\u5167\u5BB9\u8A2D\u5B9A\u683C\u5F0F\u3002\u5FC5\u9808\u6709\u53EF\u7528\u7684\u683C\u5F0F\u5668\uFF0C\u800C\u4E14\u683C\u5F0F\u5668\u61C9\u80FD\u5920\u70BA\u6587\u4EF6\u4E2D\u7684\u4E00\u500B\u7BC4\u570D\u8A2D\u5B9A\u683C\u5F0F\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u662F\u5426\u61C9\u81EA\u52D5\u5728\u9375\u5165\u5F8C\u8A2D\u5B9A\u884C\u7684\u683C\u5F0F\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u662F\u5426\u61C9\u8F49\u8B6F\u5782\u76F4\u5B57\u7B26\u908A\u754C\u3002\u5B57\u7B26\u908A\u754C\u6700\u5E38\u7528\u4F86\u9032\u884C\u5075\u932F\u3002","\u63A7\u5236\u6E38\u6A19\u662F\u5426\u61C9\u96B1\u85CF\u5728\u6982\u89C0\u5C3A\u898F\u4E2D\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u662F\u5426\u61C9\u9192\u76EE\u63D0\u793A\u4F7F\u7528\u4E2D\u7684\u7E2E\u6392\u8F14\u52A9\u7DDA\u3002","\u63A7\u5236\u5B57\u6BCD\u9593\u8DDD (\u50CF\u7D20)\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u662F\u5426\u5DF2\u555F\u7528\u9023\u7D50\u7DE8\u8F2F\u3002\u76F8\u95DC\u7B26\u865F (\u4F8B\u5982 HTML \u6A19\u7C64) \u6703\u6839\u64DA\u8A9E\u8A00\u5728\u7DE8\u8F2F\u6642\u66F4\u65B0\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u662F\u5426\u61C9\u5075\u6E2C\u9023\u7D50\u4E26\u4F7F\u5176\u53EF\u4F9B\u9EDE\u9078\u3002","\u5C07\u7B26\u5408\u7684\u62EC\u865F\u9192\u76EE\u63D0\u793A\u3002","\u8981\u7528\u65BC\u6ED1\u9F20\u6EFE\u8F2A\u6372\u52D5\u4E8B\u4EF6 `deltaX` \u548C `deltaY` \u7684\u4E58\u6578\u3002","\u4F7F\u7528\u6ED1\u9F20\u6EFE\u8F2A\u4E26\u6309\u4F4F `Ctrl` \u6642\uFF0C\u7E2E\u653E\u7DE8\u8F2F\u5668\u7684\u5B57\u578B","\u5728\u591A\u500B\u6E38\u6A19\u91CD\u758A\u6642\u5C07\u5176\u5408\u4F75\u3002","\u5C0D\u61C9Windows\u548CLinux\u7684'Control'\u8207\u5C0D\u61C9 macOS \u7684'Command'\u3002","\u5C0D\u61C9Windows\u548CLinux\u7684'Alt'\u8207\u5C0D\u61C9macOS\u7684'Option'\u3002","\u7528\u65BC\u5728\u6ED1\u9F20\u65B0\u589E\u591A\u500B\u6E38\u6A19\u7684\u4E58\u6578\u3002\u300C\u79FB\u81F3\u5B9A\u7FA9\u300D\u548C\u300C\u958B\u555F\u9023\u7D50\u300D\u6ED1\u9F20\u624B\u52E2\u6703\u52A0\u4EE5\u9069\u61C9\uFF0C\u4EE5\u907F\u514D\u8207\u591A\u500B\u6E38\u6A19\u7684\u4E58\u6578\u76F8\u885D\u7A81\u3002[\u6DF1\u5165\u4E86\u89E3](https://code.visualstudio.com/docs/editor/codebasics#_multicursor-modifier)\u3002","\u6BCF\u500B\u6E38\u6A19\u90FD\u6703\u8CBC\u4E0A\u4E00\u884C\u6587\u5B57\u3002","\u6BCF\u500B\u6E38\u6A19\u90FD\u6703\u8CBC\u4E0A\u5168\u6587\u3002","\u7576\u5DF2\u8CBC\u4E0A\u6587\u5B57\u7684\u884C\u6578\u8207\u6E38\u6A19\u6578\u76F8\u7B26\u6642\u63A7\u5236\u8CBC\u4E0A\u529F\u80FD\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u662F\u5426\u61C9\u9192\u76EE\u986F\u793A\u51FA\u73FE\u7684\u8A9E\u610F\u7B26\u865F\u3002","\u63A7\u5236\u662F\u5426\u61C9\u5728\u6982\u89C0\u5C3A\u898F\u5468\u570D\u7E6A\u88FD\u6846\u7DDA\u3002","\u958B\u555F\u9810\u89BD\u6642\u7126\u9EDE\u6A39\u72C0","\u958B\u555F\u6642\u805A\u7126\u7DE8\u8F2F\u5668","\u63A7\u5236\u8981\u805A\u7126\u5167\u5D4C\u7DE8\u8F2F\u5668\u6216\u9810\u89BD\u5C0F\u5DE5\u5177\u4E2D\u7684\u6A39\u7CFB\u3002","\u63A7\u5236\u300C\u524D\u5F80\u5B9A\u7FA9\u300D\u6ED1\u9F20\u624B\u52E2\uFF0C\u662F\u5426\u4E00\u5F8B\u958B\u555F\u7784\u6838\u5C0F\u5DE5\u5177\u3002","\u63A7\u5236\u5728\u5FEB\u901F\u5EFA\u8B70\u986F\u793A\u5F8C\u7684\u5EF6\u9072 (\u4EE5\u6BEB\u79D2\u70BA\u55AE\u4F4D)\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u662F\u5426\u6703\u81EA\u52D5\u4F9D\u985E\u578B\u91CD\u65B0\u547D\u540D\u3002","\u5DF2\u6DD8\u6C70\uFF0C\u8ACB\u6539\u7528 `editor.linkedEditing`\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u662F\u5426\u61C9\u986F\u793A\u63A7\u5236\u5B57\u5143\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u662F\u5426\u61C9\u986F\u793A\u7E2E\u6392\u8F14\u52A9\u7DDA\u3002","\u5728\u6A94\u6848\u7D50\u5C3E\u70BA\u65B0\u884C\u6642\uFF0C\u5448\u73FE\u6700\u5F8C\u4E00\u884C\u7684\u865F\u78BC\u3002","\u9192\u76EE\u63D0\u793A\u88DD\u8A02\u908A\u548C\u76EE\u524D\u7684\u884C\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u5982\u4F55\u986F\u793A\u76EE\u524D\u884C\u7684\u9192\u76EE\u63D0\u793A\u3002","\u7576\u7126\u9EDE\u70BA\u8A72\u7DE8\u8F2F\u5668\u6642\uFF0C\u63A7\u5236\u8A72\u7DE8\u8F2F\u5668\u662F\u5426\u50C5\u61C9\u8F49\u8B6F\u76EE\u524D\u884C\u7684\u9192\u76EE\u63D0\u793A","\u8F49\u8B6F\u7A7A\u767D\u5B57\u5143\uFF0C\u4F46\u6587\u5B57\u4E4B\u9593\u7684\u55AE\u4E00\u7A7A\u683C\u9664\u5916\u3002","\u53EA\u8F49\u8B6F\u6240\u9078\u6587\u5B57\u7684\u7A7A\u767D\u5B57\u5143\u3002","\u53EA\u8F49\u8B6F\u7D50\u5C3E\u7A7A\u767D\u5B57\u5143","\u63A7\u5236\u7DE8\u8F2F\u5668\u61C9\u5982\u4F55\u8F49\u8B6F\u7A7A\u767D\u5B57\u5143\u3002","\u63A7\u5236\u9078\u53D6\u7BC4\u570D\u662F\u5426\u6709\u5713\u89D2","\u63A7\u5236\u7DE8\u8F2F\u5668\u6C34\u5E73\u6372\u52D5\u7684\u984D\u5916\u5B57\u5143\u6578\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u662F\u5426\u6372\u52D5\u5230\u6700\u5F8C\u4E00\u884C\u4E4B\u5916\u3002","\u540C\u6642\u9032\u884C\u5782\u76F4\u8207\u6C34\u5E73\u6372\u52D5\u6642\uFF0C\u50C5\u6CBF\u4E3B\u8EF8\u6372\u52D5\u3002\u907F\u514D\u5728\u8ECC\u8DE1\u677F\u4E0A\u9032\u884C\u5782\u76F4\u6372\u52D5\u6642\u767C\u751F\u6C34\u5E73\u6F02\u79FB\u3002","\u63A7\u5236\u662F\u5426\u652F\u63F4 Linux \u4E3B\u8981\u526A\u8CBC\u7C3F\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u662F\u5426\u61C9\u9192\u76EE\u63D0\u793A\u8207\u9078\u53D6\u9805\u76EE\u985E\u4F3C\u7684\u76F8\u7B26\u9805\u76EE\u3002","\u4E00\u5F8B\u986F\u793A\u647A\u758A\u63A7\u5236\u9805\u3002","\u50C5\u7576\u6ED1\u9F20\u61F8\u505C\u5728\u6D3B\u52D5\u5217\u4E0A\u6642\uFF0C\u624D\u986F\u793A\u6298\u758A\u529F\u80FD\u3002","\u63A7\u5236\u647A\u758A\u63A7\u5236\u9805\u5728\u88DD\u8A02\u908A\u4E0A\u7684\u986F\u793A\u6642\u6A5F\u3002","\u63A7\u5236\u672A\u4F7F\u7528\u7A0B\u5F0F\u78BC\u7684\u6DE1\u51FA\u3002","\u63A7\u5236\u5DF2\u522A\u9664\u7684\u6DD8\u6C70\u8B8A\u6578\u3002","\u5C07\u7A0B\u5F0F\u78BC\u7247\u6BB5\u5EFA\u8B70\u986F\u793A\u65BC\u5176\u4ED6\u5EFA\u8B70\u7684\u9802\u7AEF\u3002","\u5C07\u7A0B\u5F0F\u78BC\u7247\u6BB5\u5EFA\u8B70\u986F\u793A\u65BC\u5176\u4ED6\u5EFA\u8B70\u7684\u4E0B\u65B9\u3002","\u5C07\u7A0B\u5F0F\u78BC\u7247\u6BB5\u5EFA\u8B70\u8207\u5176\u4ED6\u5EFA\u8B70\u4E00\u540C\u986F\u793A\u3002","\u4E0D\u986F\u793A\u7A0B\u5F0F\u78BC\u7247\u6BB5\u5EFA\u8B70\u3002","\u63A7\u5236\u7A0B\u5F0F\u78BC\u7247\u6BB5\u662F\u5426\u96A8\u5176\u4ED6\u5EFA\u8B70\u986F\u793A\uFF0C\u4EE5\u53CA\u5176\u6392\u5E8F\u65B9\u5F0F\u3002","\u63A7\u5236\u7DE8\u8F2F\u5668\u662F\u5426\u6703\u4F7F\u7528\u52D5\u756B\u6372\u52D5","\u5EFA\u8B70\u5C0F\u5DE5\u5177\u7684\u5B57\u578B\u5927\u5C0F\u3002\u7576\u8A2D\u5B9A\u70BA `0` \u6642\uFF0C\u5247\u4F7F\u7528 `#editor.fontSize#` \u503C.","\u5EFA\u8B70\u5C0F\u5DE5\u5177\u7684\u884C\u9AD8\u3002\u7576\u8A2D\u5B9A\u70BA `0` \u6642\uFF0C\u5247\u4F7F\u7528 `#editor.lineHeight#` \u7684\u503C\u3002\u6700\u5C0F\u503C\u70BA 8\u3002","\u63A7\u5236\u5EFA\u8B70\u662F\u5426\u61C9\u5728\u9375\u5165\u89F8\u767C\u5B57\u5143\u6642\u81EA\u52D5\u986F\u793A\u3002","\u4E00\u5F8B\u9078\u53D6\u7B2C\u4E00\u500B\u5EFA\u8B70\u3002","\u9664\u975E\u9032\u4E00\u6B65\u9375\u5165\u9078\u53D6\u4E86\u5EFA\u8B70\uFF0C\u5426\u5247\u9078\u53D6\u6700\u8FD1\u7684\u5EFA\u8B70\uFF0C\u4F8B\u5982 `console.| -> console.log`\uFF0C\u539F\u56E0\u662F\u6700\u8FD1\u5B8C\u6210\u4E86 `log`\u3002","\u6839\u64DA\u5148\u524D\u5DF2\u5B8C\u6210\u8A72\u5EFA\u8B70\u7684\u524D\u7F6E\u8A5E\u9078\u53D6\u5EFA\u8B70\uFF0C\u4F8B\u5982 `co -> console` \u548C `con -> const`\u3002","\u63A7\u5236\u5728\u986F\u793A\u5EFA\u8B70\u6E05\u55AE\u6642\u5982\u4F55\u9810\u5148\u9078\u53D6\u5EFA\u8B70\u3002","\u6309 Tab \u6642\uFF0CTab \u5B8C\u6210\u6703\u63D2\u5165\u6700\u7B26\u5408\u7684\u5EFA\u8B70\u3002","\u505C\u7528 tab \u9375\u81EA\u52D5\u5B8C\u6210\u3002","\u5728\u7A0B\u5F0F\u78BC\u7247\u6BB5\u7684\u9996\u78BC\u76F8\u7B26\u6642\u4F7F\u7528 Tab \u5B8C\u6210\u3002\u672A\u555F\u7528 'quickSuggestions' \u6642\u6548\u679C\u6700\u4F73\u3002","\u555F\u7528 tab \u9375\u81EA\u52D5\u5B8C\u6210\u3002","\u81EA\u52D5\u79FB\u9664\u7570\u5E38\u7684\u884C\u7D50\u675F\u5B57\u5143\u3002","\u5FFD\u7565\u7570\u5E38\u7684\u884C\u7D50\u675F\u5B57\u5143\u3002","\u8981\u79FB\u9664\u4E4B\u7570\u5E38\u7684\u884C\u7D50\u675F\u5B57\u5143\u63D0\u793A\u3002","\u79FB\u9664\u53EF\u80FD\u5C0E\u81F4\u554F\u984C\u7684\u7570\u5E38\u884C\u7D50\u675F\u5B57\u5143\u3002","\u63D2\u5165\u548C\u522A\u9664\u63A5\u5728\u5B9A\u4F4D\u505C\u99D0\u9EDE\u5F8C\u7684\u7A7A\u767D\u5B57\u5143\u3002","\u5728\u57F7\u884C\u6587\u5B57\u76F8\u95DC\u5C0E\u89BD\u6216\u4F5C\u696D\u6642\u8981\u7528\u4F5C\u6587\u5B57\u5206\u9694\u7B26\u865F\u7684\u5B57\u5143","\u4E00\u5F8B\u4E0D\u63DB\u884C\u3002","\u4F9D\u6AA2\u8996\u5340\u5BEC\u5EA6\u63DB\u884C\u3002","\u65BC '#editor.wordWrapColumn#' \u63DB\u884C\u3002","\u7576\u6AA2\u8996\u5340\u7E2E\u81F3\u6700\u5C0F\u4E26\u8A2D\u5B9A '#editor.wordWrapColumn#' \u6642\u63DB\u884C\u3002","\u63A7\u5236\u5982\u4F55\u63DB\u884C\u3002","\u7576 `#editor.wordWrap#` \u70BA `wordWrapColumn` \u6216 `bounded` \u6642\uFF0C\u63A7\u5236\u7DE8\u8F2F\u5668\u4E2D\u7684\u8CC7\u6599\u884C\u63DB\u884C\u3002","\u7121\u7E2E\u6392\u3002\u63DB\u884C\u5F9E\u7B2C 1 \u5217\u958B\u59CB\u3002","\u63DB\u884C\u7684\u7E2E\u6392\u6703\u8207\u7236\u884C\u76F8\u540C\u3002","\u63DB\u884C\u7684\u7E2E\u6392\u70BA\u7236\u884C +1\u3002","\u63DB\u884C\u7E2E\u6392\u70BA\u7236\u884C +2\u3002","\u63A7\u5236\u63DB\u884C\u7684\u7E2E\u6392\u3002","\u5047\u8A2D\u6240\u6709\u5B57\u5143\u7684\u5BEC\u5EA6\u5747\u76F8\u540C\u3002\u9019\u662F\u4E00\u7A2E\u5FEB\u901F\u7684\u6F14\u7B97\u6CD5\uFF0C\u9069\u7528\u65BC\u7B49\u5BEC\u5B57\u578B\uFF0C\u4EE5\u53CA\u5B57\u7B26\u5BEC\u5EA6\u76F8\u540C\u7684\u90E8\u5206\u6307\u4EE4\u78BC (\u4F8B\u5982\u62C9\u4E01\u6587\u5B57\u5143)\u3002","\u5C07\u5916\u570D\u9EDE\u8A08\u7B97\u59D4\u6D3E\u7D66\u700F\u89BD\u5668\u3002\u9019\u662F\u7DE9\u6162\u7684\u6F14\u7B97\u6CD5\uFF0C\u5982\u679C\u6A94\u6848\u8F03\u5927\u53EF\u80FD\u6703\u5C0E\u81F4\u51CD\u7D50\uFF0C\u4F46\u5728\u6240\u6709\u60C5\u6CC1\u4E0B\u90FD\u6B63\u5E38\u904B\u4F5C\u3002","\u63A7\u5236\u8A08\u7B97\u5916\u570D\u9EDE\u7684\u6F14\u7B97\u6CD5\u3002"],"vs/editor/common/editorContextKeys":["Whether the editor text has focus (cursor is blinking)","Whether the editor or an editor widget has focus (e.g. focus is in the find widget)","Whether an editor or a rich text input has focus (cursor is blinking)","Whether the editor is read only","Whether the context is a diff editor","Whether `editor.columnSelection` is enabled","Whether the editor has text selected","Whether the editor has multiple selections","Whether `Tab` will move focus out of the editor","Whether the editor hover is visible","Whether the editor is part of a larger editor (e.g. notebooks)","The language identifier of the editor","Whether the editor has a completion item provider","Whether the editor has a code actions provider","Whether the editor has a code lens provider","Whether the editor has a definition provider","Whether the editor has a declaration provider","Whether the editor has an implementation provider","Whether the editor has a type definition provider","Whether the editor has a hover provider","Whether the editor has a document highlight provider","Whether the editor has a document symbol provider","Whether the editor has a reference provider","Whether the editor has a rename provider","Whether the editor has a signature help provider","Whether the editor has an inline hints provider","Whether the editor has a document formatting provider","Whether the editor has a document selection formatting provider","Whether the editor has multiple document formatting providers","Whether the editor has multiple document selection formatting providers"],"vs/editor/common/model/editStack":["\u6B63\u5728\u9375\u5165"],"vs/editor/common/modes/modesRegistry":["\u7D14\u6587\u5B57"],"vs/editor/common/standaloneStrings":["\u7121\u9078\u53D6\u9805\u76EE","\u7B2C {0} \u884C\uFF0C\u7B2C {1} \u6B04 (\u5DF2\u9078\u53D6 {2})","\u7B2C {0} \u884C\uFF0C\u7B2C {1} \u6B04","{0} \u500B\u9078\u53D6\u9805\u76EE (\u5DF2\u9078\u53D6 {1} \u500B\u5B57\u5143)","{0} \u500B\u9078\u53D6\u9805\u76EE","\u7ACB\u5373\u5C07\u8A2D\u5B9A `accessibilitySupport` \u8B8A\u66F4\u70BA 'on\u2019\u3002","\u7ACB\u5373\u958B\u555F\u7DE8\u8F2F\u5668\u5354\u52A9\u5DE5\u5177\u6587\u4EF6\u9801\u9762\u3002","\u5728 Diff \u7DE8\u8F2F\u5668\u7684\u552F\u8B80\u7A97\u683C\u4E2D\u3002","\u5728 Diff \u7DE8\u8F2F\u5668\u7684\u7A97\u683C\u4E2D\u3002","\u5728\u552F\u8B80\u7A0B\u5F0F\u78BC\u7DE8\u8F2F\u5668\u4E2D","\u5728\u7A0B\u5F0F\u78BC\u7DE8\u8F2F\u5668\u4E2D","\u82E5\u8981\u70BA\u7DE8\u8F2F\u5668\u9032\u884C\u6700\u80FD\u642D\u914D\u87A2\u5E55\u52A9\u8B80\u7A0B\u5F0F\u4F7F\u7528\u7684\u8A2D\u5B9A\uFF0C\u8ACB\u7ACB\u5373\u6309 Command+E\u3002","\u82E5\u8981\u5C07\u7DE8\u8F2F\u5668\u8A2D\u5B9A\u70BA\u91DD\u5C0D\u642D\u914D\u87A2\u5E55\u52A9\u8B80\u7A0B\u5F0F\u4F7F\u7528\u6700\u4F73\u5316\uFF0C\u8ACB\u7ACB\u5373\u6309 Control+E\u3002","\u7DE8\u8F2F\u5668\u5DF2\u8A2D\u5B9A\u70BA\u91DD\u5C0D\u642D\u914D\u87A2\u5E55\u52A9\u8B80\u7A0B\u5F0F\u4F7F\u7528\u6700\u4F73\u5316\u3002","\u5DF2\u5C07\u6B64\u7DE8\u8F2F\u5668\u8A2D\u5B9A\u70BA\u6C38\u9060\u4E0D\u91DD\u5C0D\u642D\u914D\u87A2\u5E55\u52A9\u8B80\u7A0B\u5F0F\u4F7F\u7528\u6700\u4F73\u5316\uFF0C\u4F46\u76EE\u524D\u4E0D\u662F\u6B64\u60C5\u6CC1\u3002","\u5728\u76EE\u524D\u7684\u7DE8\u8F2F\u5668\u4E2D\u6309 Tab \u9375\u6703\u5C07\u7126\u9EDE\u79FB\u81F3\u4E0B\u4E00\u500B\u53EF\u8A2D\u5B9A\u7126\u9EDE\u7684\u5143\u7D20\u3002\u6309 {0} \u53EF\u5207\u63DB\u6B64\u884C\u70BA\u3002","\u5728\u76EE\u524D\u7684\u7DE8\u8F2F\u5668\u4E2D\u6309 Tab \u9375\u6703\u5C07\u7126\u9EDE\u79FB\u81F3\u4E0B\u4E00\u500B\u53EF\u8A2D\u5B9A\u7126\u9EDE\u7684\u5143\u7D20\u3002\u547D\u4EE4 {0} \u76EE\u524D\u7121\u6CD5\u7531\u6309\u9375\u7E6B\u7D50\u95DC\u4FC2\u89F8\u767C\u3002","\u5728\u76EE\u524D\u7684\u7DE8\u8F2F\u5668\u4E2D\u6309 Tab \u9375\u6703\u63D2\u5165\u5B9A\u4F4D\u5B57\u5143\u3002\u6309 {0} \u53EF\u5207\u63DB\u6B64\u884C\u70BA\u3002","\u5728\u76EE\u524D\u7684\u7DE8\u8F2F\u5668\u4E2D\u6309 Tab \u9375\u6703\u63D2\u5165\u5B9A\u4F4D\u5B57\u5143\u3002\u547D\u4EE4 {0} \u76EE\u524D\u7121\u6CD5\u7531\u6309\u9375\u7E6B\u7D50\u95DC\u4FC2\u89F8\u767C\u3002","\u7ACB\u5373\u6309 Command+H\uFF0C\u4EE5\u958B\u555F\u63D0\u4F9B\u7DE8\u8F2F\u5668\u5354\u52A9\u5DE5\u5177\u76F8\u95DC\u8A73\u7D30\u8CC7\u8A0A\u7684\u700F\u89BD\u5668\u8996\u7A97\u3002","\u7ACB\u5373\u6309 Control+H\uFF0C\u4EE5\u958B\u555F\u63D0\u4F9B\u7DE8\u8F2F\u5668\u5354\u52A9\u5DE5\u5177\u76F8\u95DC\u8A73\u7D30\u8CC7\u8A0A\u7684\u700F\u89BD\u5668\u8996\u7A97\u3002","\u60A8\u53EF\u4EE5\u6309 Esc \u9375\u6216 Shift+Esc \u9375\u4F86\u89E3\u9664\u6B64\u5DE5\u5177\u63D0\u793A\u4E26\u8FD4\u56DE\u7DE8\u8F2F\u5668\u3002","\u986F\u793A\u5354\u52A9\u5DE5\u5177\u8AAA\u660E","\u958B\u767C\u4EBA\u54E1: \u6AA2\u67E5\u6B0A\u6756","\u524D\u5F80\u884C/\u6B04...","\u986F\u793A\u6240\u6709\u5FEB\u901F\u5B58\u53D6\u63D0\u4F9B\u8005","\u547D\u4EE4\u9078\u64C7\u5340","\u986F\u793A\u4E26\u57F7\u884C\u547D\u4EE4","\u79FB\u81F3\u7B26\u865F...","\u524D\u5F80\u7B26\u865F (\u4F9D\u985E\u5225)...","\u7DE8\u8F2F\u5668\u5167\u5BB9","\u6309 Alt+F1 \u53EF\u53D6\u5F97\u5354\u52A9\u5DE5\u5177\u9078\u9805\u3002","\u5207\u63DB\u9AD8\u5C0D\u6BD4\u4F48\u666F\u4E3B\u984C","\u5DF2\u5728 {1} \u6A94\u6848\u4E2D\u9032\u884C {0} \u9805\u7DE8\u8F2F"],"vs/editor/common/view/editorColorRegistry":["\u76EE\u524D\u6E38\u6A19\u4F4D\u7F6E\u884C\u7684\u53CD\u767D\u986F\u793A\u80CC\u666F\u8272\u5F69\u3002","\u76EE\u524D\u6E38\u6A19\u4F4D\u7F6E\u884C\u4E4B\u5468\u570D\u6846\u7DDA\u7684\u80CC\u666F\u8272\u5F69\u3002","\u9192\u76EE\u63D0\u793A\u7BC4\u570D\u7684\u80CC\u666F\u8272\u5F69\uFF0C\u4F8B\u5982\u5FEB\u901F\u958B\u555F\u4E26\u5C0B\u627E\u529F\u80FD\u3002\u5176\u4E0D\u5F97\u70BA\u4E0D\u900F\u660E\u8272\u5F69\uFF0C\u4EE5\u514D\u96B1\u85CF\u5E95\u5C64\u88DD\u98FE\u3002","\u53CD\u767D\u986F\u793A\u7BC4\u570D\u5468\u570D\u908A\u6846\u7684\u80CC\u666F\u984F\u8272\u3002","\u9192\u76EE\u63D0\u793A\u7B26\u865F\u7684\u80CC\u666F\u8272\u5F69\uFF0C\u76F8\u4F3C\u65BC\u524D\u5F80\u4E0B\u4E00\u500B\u5B9A\u7FA9\u6216\u524D\u5F80\u4E0B\u4E00\u500B/\u4E0A\u4E00\u500B\u7B26\u865F\u3002\u8272\u5F69\u5FC5\u9808\u900F\u660E\uFF0C\u4EE5\u514D\u96B1\u85CF\u5E95\u5C64\u88DD\u98FE\u3002","\u9192\u76EE\u63D0\u793A\u5468\u570D\u7684\u908A\u754C\u80CC\u666F\u8272\u5F69\u3002","\u7DE8\u8F2F\u5668\u6E38\u6A19\u7684\u8272\u5F69\u3002","\u7DE8\u8F2F\u5668\u6E38\u6A19\u7684\u80CC\u666F\u8272\u5F69\u3002\u5141\u8A31\u81EA\u8A02\u5340\u584A\u6E38\u6A19\u91CD\u758A\u7684\u5B57\u5143\u8272\u5F69\u3002","\u7DE8\u8F2F\u5668\u4E2D\u7A7A\u767D\u5B57\u5143\u7684\u8272\u5F69\u3002","\u7DE8\u8F2F\u5668\u7E2E\u6392\u8F14\u52A9\u7DDA\u7684\u8272\u5F69\u3002","\u4F7F\u7528\u4E2D\u7DE8\u8F2F\u5668\u7E2E\u6392\u8F14\u52A9\u7DDA\u7684\u8272\u5F69\u3002","\u7DE8\u8F2F\u5668\u884C\u865F\u7684\u8272\u5F69\u3002","\u7DE8\u8F2F\u5668\u4F7F\u7528\u4E2D\u884C\u865F\u7684\u8272\u5F69","Id \u5DF2\u53D6\u4EE3\u3002\u8ACB\u6539\u7528 'editorLineNumber.activeForeground' \u3002","\u7DE8\u8F2F\u5668\u4F7F\u7528\u4E2D\u884C\u865F\u7684\u8272\u5F69","\u7DE8\u8F2F\u5668\u5C3A\u898F\u7684\u8272\u5F69","\u7DE8\u8F2F\u5668\u7A0B\u5F0F\u78BC\u6FFE\u93E1\u7684\u524D\u666F\u8272\u5F69","\u6210\u5C0D\u62EC\u865F\u80CC\u666F\u8272\u5F69","\u6210\u5C0D\u62EC\u865F\u908A\u6846\u8272\u5F69","\u9810\u89BD\u6AA2\u8996\u7DE8\u8F2F\u5668\u5C3A\u898F\u7684\u908A\u6846\u8272\u5F69.","\u7DE8\u8F2F\u5668\u6982\u89C0\u5C3A\u898F\u7684\u80CC\u666F\u8272\u5F69\u3002\u50C5\u5728\u555F\u7528\u7E2E\u5716\u4E26\u5C07\u5176\u7F6E\u65BC\u7DE8\u8F2F\u5668\u53F3\u5074\u6642\u4F7F\u7528\u3002","\u7DE8\u8F2F\u5668\u908A\u6846\u7684\u80CC\u666F\u984F\u8272,\u5305\u542B\u884C\u865F\u8207\u5B57\u5F62\u5716\u793A\u7684\u908A\u6846.","\u7DE8\u8F2F\u5668\u4E2D\u4E0D\u5FC5\u8981 (\u672A\u4F7F\u7528) \u539F\u59CB\u7A0B\u5F0F\u78BC\u7684\u6846\u7DDA\u8272\u5F69\u3002",`\u7DE8\u8F2F\u5668\u4E2D\u4E0D\u5FC5\u8981 (\u672A\u4F7F\u7528) \u539F\u59CB\u7A0B\u5F0F\u78BC\u7684\u4E0D\u900F\u660E\u5EA6\u3002\u4F8B\u5982 "#000000c0\u201D \u6703\u4EE5 75% \u7684\u4E0D\u900F\u660E\u5EA6\u8F49\u8B6F\u7A0B\u5F0F\u78BC\u3002\u91DD\u5C0D\u9AD8\u5C0D\u6BD4\u4E3B\u984C\uFF0C\u4F7F\u7528 'editorUnnecessaryCode.border' \u4E3B\u984C\u8272\u5F69\u53EF\u70BA\u4E0D\u5FC5\u8981\u7684\u7A0B\u5F0F\u78BC\u52A0\u4E0A\u5E95\u7DDA\uFF0C\u800C\u4E0D\u662F\u5C07\u5176\u8B8A\u6DE1\u3002`,"\u7BC4\u570D\u9192\u76EE\u63D0\u793A\u7684\u6982\u89C0\u5C3A\u898F\u6A19\u8A18\u8272\u5F69\u3002\u5176\u4E0D\u5F97\u70BA\u4E0D\u900F\u660E\u8272\u5F69\uFF0C\u4EE5\u514D\u96B1\u85CF\u5E95\u5C64\u88DD\u98FE\u3002","\u932F\u8AA4\u7684\u6982\u89C0\u5C3A\u898F\u6A19\u8A18\u8272\u5F69\u3002","\u8B66\u793A\u7684\u6982\u89C0\u5C3A\u898F\u6A19\u8A18\u8272\u5F69\u3002","\u8CC7\u8A0A\u7684\u6982\u89C0\u5C3A\u898F\u6A19\u8A18\u8272\u5F69\u3002"],"vs/editor/contrib/anchorSelect/anchorSelect":["\u9078\u53D6\u7BC4\u570D\u9328\u9EDE","\u8A2D\u5B9A\u9328\u9EDE\u70BA {0}:{1}","\u8A2D\u5B9A\u9078\u53D6\u7BC4\u570D\u9328\u9EDE","\u524D\u5F80\u9078\u53D6\u7BC4\u570D\u9328\u9EDE","\u9078\u53D6\u5F9E\u9328\u9EDE\u5230\u6E38\u6A19\u4E4B\u9593\u7684\u7BC4\u570D","\u53D6\u6D88\u9078\u53D6\u7BC4\u570D\u9328\u9EDE"],"vs/editor/contrib/bracketMatching/bracketMatching":["\u6210\u5C0D\u62EC\u5F27\u7684\u6982\u89C0\u5C3A\u898F\u6A19\u8A18\u8272\u5F69\u3002","\u79FB\u81F3\u65B9\u62EC\u5F27","\u9078\u53D6\u81F3\u62EC\u5F27","\u524D\u5F80\u62EC\u5F27(&&B)"],"vs/editor/contrib/caretOperations/caretOperations":["\u5C07\u6240\u9078\u6587\u5B57\u5411\u5DE6\u79FB\u52D5","\u5C07\u6240\u9078\u6587\u5B57\u5411\u53F3\u79FB\u52D5"],"vs/editor/contrib/caretOperations/transpose":["\u8ABF\u63DB\u5B57\u6BCD"],"vs/editor/contrib/clipboard/clipboard":["\u526A\u4E0B(&&T)","\u526A\u4E0B","\u526A\u4E0B","\u8907\u88FD(&&C)","\u8907\u88FD","\u8907\u88FD","\u8CBC\u4E0A(&&P)","\u8CBC\u4E0A","\u8CBC\u4E0A","\u96A8\u8A9E\u6CD5\u9192\u76EE\u63D0\u793A\u8907\u88FD"],"vs/editor/contrib/codeAction/codeActionCommands":["\u8981\u57F7\u884C\u7A0B\u5F0F\u78BC\u52D5\u4F5C\u7684\u7A2E\u985E\u3002","\u63A7\u5236\u8981\u5957\u7528\u50B3\u56DE\u52D5\u4F5C\u7684\u6642\u6A5F\u3002","\u4E00\u5F8B\u5957\u7528\u7B2C\u4E00\u500B\u50B3\u56DE\u7684\u7A0B\u5F0F\u78BC\u52D5\u4F5C\u3002","\u5982\u679C\u50B3\u56DE\u7684\u7A0B\u5F0F\u78BC\u52D5\u4F5C\u662F\u552F\u4E00\u52D5\u4F5C\uFF0C\u5247\u52A0\u4EE5\u5957\u7528\u3002","\u4E0D\u8981\u5957\u7528\u50B3\u56DE\u7684\u7A0B\u5F0F\u78BC\u52D5\u4F5C\u3002","\u63A7\u5236\u662F\u5426\u50C5\u61C9\u50B3\u56DE\u504F\u597D\u7684\u7A0B\u5F0F\u78BC\u52D5\u4F5C\u3002","\u5957\u7528\u7A0B\u5F0F\u78BC\u52D5\u4F5C\u6642\u767C\u751F\u672A\u77E5\u7684\u932F\u8AA4","\u5FEB\u901F\u4FEE\u5FA9...","\u6C92\u6709\u53EF\u7528\u7684\u7A0B\u5F0F\u78BC\u64CD\u4F5C",'\u6C92\u6709 "{0}" \u7684\u504F\u597D\u7A0B\u5F0F\u78BC\u52D5\u4F5C','\u6C92\u6709 "{0}" \u53EF\u7528\u7684\u7A0B\u5F0F\u78BC\u52D5\u4F5C',"\u6C92\u6709\u53EF\u7528\u7684\u504F\u597D\u7A0B\u5F0F\u78BC\u52D5\u4F5C","\u6C92\u6709\u53EF\u7528\u7684\u7A0B\u5F0F\u78BC\u64CD\u4F5C","\u91CD\u69CB...","\u6C92\u6709\u9069\u7528\u65BC '{0}' \u7684\u504F\u597D\u91CD\u69CB\u3002",'\u6C92\u6709\u53EF\u7528\u7684 "{0}" \u91CD\u69CB',"\u6C92\u6709\u53EF\u7528\u7684\u504F\u597D\u91CD\u69CB","\u6C92\u6709\u53EF\u7528\u7684\u91CD\u69CB","\u4F86\u6E90\u52D5\u4F5C...","\u6C92\u6709\u9069\u7528\u65BC '{0}' \u7684\u504F\u597D\u4F86\u6E90\u52D5\u4F5C",'\u6C92\u6709 "{0}" \u53EF\u7528\u7684\u4F86\u6E90\u52D5\u4F5C',"\u6C92\u6709\u53EF\u7528\u7684\u504F\u597D\u4F86\u6E90\u52D5\u4F5C","\u6C92\u6709\u53EF\u7528\u7684\u4F86\u6E90\u52D5\u4F5C","\u7D44\u7E54\u532F\u5165","\u6C92\u6709\u4EFB\u4F55\u53EF\u7528\u7684\u7D44\u7E54\u532F\u5165\u52D5\u4F5C","\u5168\u90E8\u4FEE\u6B63","\u6C92\u6709\u5168\u90E8\u4FEE\u6B63\u52D5\u4F5C\u53EF\u7528","\u81EA\u52D5\u4FEE\u6B63...","\u6C92\u6709\u53EF\u7528\u7684\u81EA\u52D5\u4FEE\u6B63"],"vs/editor/contrib/codeAction/lightBulbWidget":["\u986F\u793A\u4FEE\u6B63\u7A0B\u5F0F\u3002\u504F\u597D\u7684\u4FEE\u6B63\u7A0B\u5F0F\u53EF\u7528 ({0})","\u986F\u793A\u4FEE\u6B63 ({0})","\u986F\u793A\u4FEE\u6B63"],"vs/editor/contrib/codelens/codelensController":["\u986F\u793A\u76EE\u524D\u884C\u7684 Code Lens \u547D\u4EE4"],"vs/editor/contrib/comment/comment":["\u5207\u63DB\u884C\u8A3B\u89E3","\u5207\u63DB\u884C\u8A3B\u89E3(&&T)","\u52A0\u5165\u884C\u8A3B\u89E3","\u79FB\u9664\u884C\u8A3B\u89E3","\u5207\u63DB\u5340\u584A\u8A3B\u89E3","\u5207\u63DB\u5340\u584A\u8A3B\u89E3(&&B)"],"vs/editor/contrib/contextmenu/contextmenu":["\u986F\u793A\u7DE8\u8F2F\u5668\u5167\u5BB9\u529F\u80FD\u8868"],"vs/editor/contrib/cursorUndo/cursorUndo":["\u6E38\u6A19\u5FA9\u539F","\u6E38\u6A19\u91CD\u505A"],"vs/editor/contrib/find/findController":["\u5C0B\u627E","\u5C0B\u627E(&&F)","\u5C0B\u627E\u9078\u53D6\u9805\u76EE","\u5C0B\u627E\u4E0B\u4E00\u500B","\u5C0B\u627E\u4E0B\u4E00\u500B","\u5C0B\u627E\u4E0A\u4E00\u500B","\u5C0B\u627E\u4E0A\u4E00\u500B","\u5C0B\u627E\u4E0B\u4E00\u500B\u9078\u53D6\u9805\u76EE","\u5C0B\u627E\u4E0A\u4E00\u500B\u9078\u53D6\u9805\u76EE","\u53D6\u4EE3","\u53D6\u4EE3(&&R)"],"vs/editor/contrib/find/findWidget":["\u7DE8\u8F2F\u5668\u5C0B\u627E\u5C0F\u5DE5\u5177\u4E2D [\u5728\u9078\u53D6\u7BC4\u570D\u4E2D\u5C0B\u627E] \u7684\u5716\u793A\u3002","\u8868\u793A\u7DE8\u8F2F\u5668\u5C0B\u627E\u5C0F\u5DE5\u5177\u5DF2\u647A\u758A\u7684\u5716\u793A\u3002","\u8868\u793A\u7DE8\u8F2F\u5668\u5C0B\u627E\u5C0F\u5DE5\u5177\u5DF2\u5C55\u958B\u7684\u5716\u793A\u3002","\u7DE8\u8F2F\u5668\u5C0B\u627E\u5C0F\u5DE5\u5177\u4E2D [\u53D6\u4EE3] \u7684\u5716\u793A\u3002","\u7DE8\u8F2F\u5668\u5C0B\u627E\u5C0F\u5DE5\u5177\u4E2D [\u5168\u90E8\u53D6\u4EE3] \u7684\u5716\u793A\u3002","\u7DE8\u8F2F\u5668\u5C0B\u627E\u5C0F\u5DE5\u5177\u4E2D [\u5C0B\u627E\u4E0A\u4E00\u500B] \u7684\u5716\u793A\u3002","\u7DE8\u8F2F\u5668\u5C0B\u627E\u5C0F\u5DE5\u5177\u4E2D [\u5C0B\u627E\u4E0B\u4E00\u500B] \u7684\u5716\u793A\u3002","\u5C0B\u627E","\u5C0B\u627E","\u4E0A\u4E00\u500B\u7B26\u5408\u9805\u76EE","\u4E0B\u4E00\u500B\u7B26\u5408\u9805\u76EE","\u5728\u9078\u53D6\u7BC4\u570D\u4E2D\u5C0B\u627E","\u95DC\u9589","\u53D6\u4EE3","\u53D6\u4EE3","\u53D6\u4EE3","\u5168\u90E8\u53D6\u4EE3","\u5207\u63DB\u53D6\u4EE3\u6A21\u5F0F","\u50C5\u53CD\u767D\u986F\u793A\u524D {0} \u7B46\u7D50\u679C\uFF0C\u4F46\u6240\u6709\u5C0B\u627E\u4F5C\u696D\u6703\u5728\u5B8C\u6574\u6587\u5B57\u4E0A\u57F7\u884C\u3002","{1} \u7684 {0}","\u67E5\u7121\u7D50\u679C","\u627E\u5230 {0}","\u4EE5 '{1}' \u627E\u5230 {0}","\u4EE5 '{1}' \u627E\u5230 {0}\uFF0C\u4F4D\u65BC {2}","\u5DF2\u4EE5 '{1}' \u627E\u5230 {0}","Ctrl+Enter \u73FE\u5728\u6703\u63D2\u5165\u5206\u884C\u7B26\u865F\uFF0C\u800C\u4E0D\u6703\u5168\u90E8\u53D6\u4EE3\u3002\u60A8\u53EF\u4EE5\u4FEE\u6539 editor.action.replaceAll \u7684\u6309\u9375\u7E6B\u7D50\u95DC\u4FC2\uFF0C\u4EE5\u8986\u5BEB\u6B64\u884C\u70BA\u3002"],"vs/editor/contrib/folding/folding":["\u5C55\u958B","\u4EE5\u905E\u8FF4\u65B9\u5F0F\u5C55\u958B","\u647A\u758A","\u5207\u63DB\u647A\u758A","\u4EE5\u905E\u8FF4\u65B9\u5F0F\u647A\u758A","\u647A\u758A\u5168\u90E8\u5340\u584A\u8A3B\u89E3","\u647A\u758A\u6240\u6709\u5340\u57DF","\u5C55\u958B\u6240\u6709\u5340\u57DF","\u5168\u90E8\u647A\u758A","\u5168\u90E8\u5C55\u958B","\u647A\u758A\u5C64\u7D1A {0}","\u5DF2\u647A\u758A\u7BC4\u570D\u5F8C\u7684\u80CC\u666F\u8272\u5F69\u3002\u8272\u5F69\u4E0D\u5F97\u8655\u65BC\u4E0D\u900F\u660E\u72C0\u614B\uFF0C\u4EE5\u514D\u96B1\u85CF\u5E95\u5C64\u88DD\u98FE\u3002","\u7DE8\u8F2F\u5668\u88DD\u8A02\u908A\u7684\u647A\u758A\u63A7\u5236\u9805\u8272\u5F69\u3002"],"vs/editor/contrib/folding/foldingDecorations":["\u7DE8\u8F2F\u5668\u5B57\u7B26\u908A\u754C\u4E2D [\u5C55\u958B\u7684\u7BC4\u570D] \u7684\u5716\u793A\u3002","\u7DE8\u8F2F\u5668\u5B57\u7B26\u908A\u754C\u4E2D [\u647A\u758A\u7684\u7BC4\u570D] \u7684\u5716\u793A\u3002"],"vs/editor/contrib/fontZoom/fontZoom":["\u7DE8\u8F2F\u5668\u5B57\u9AD4\u653E\u5927","\u7DE8\u8F2F\u5668\u5B57\u578B\u7E2E\u5C0F","\u7DE8\u8F2F\u5668\u5B57\u9AD4\u91CD\u8A2D\u7E2E\u653E"],"vs/editor/contrib/format/format":["\u5728\u884C {0} \u7DE8\u8F2F\u4E86 1 \u9805\u683C\u5F0F","\u5728\u884C {1} \u7DE8\u8F2F\u4E86 {0} \u9805\u683C\u5F0F","\u5728\u884C {0} \u8207\u884C {1} \u4E4B\u9593\u7DE8\u8F2F\u4E86 1 \u9805\u683C\u5F0F","\u5728\u884C {1} \u8207\u884C {2} \u4E4B\u9593\u7DE8\u8F2F\u4E86 {0} \u9805\u683C\u5F0F"],"vs/editor/contrib/format/formatActions":["\u683C\u5F0F\u5316\u6587\u4EF6","\u683C\u5F0F\u5316\u9078\u53D6\u7BC4\u570D"],"vs/editor/contrib/gotoError/gotoError":["\u79FB\u81F3\u4E0B\u4E00\u500B\u554F\u984C (\u932F\u8AA4, \u8B66\u544A, \u8CC7\u8A0A)","[\u524D\u5F80\u4E0B\u4E00\u500B\u6A19\u8A18] \u7684\u5716\u793A\u3002","\u79FB\u81F3\u4E0A\u4E00\u500B\u554F\u984C (\u932F\u8AA4, \u8B66\u544A, \u8CC7\u8A0A)","[\u524D\u5F80\u4E0A\u4E00\u500B\u6A19\u8A18] \u7684\u5716\u793A\u3002","\u79FB\u81F3\u6A94\u6848\u88E1\u9762\u7684\u4E0B\u4E00\u500B\u554F\u984C (\u932F\u8AA4, \u8B66\u544A, \u8CC7\u8A0A)","\u4E0B\u4E00\u500B\u554F\u984C(&&P)","\u79FB\u81F3\u6A94\u6848\u88E1\u9762\u7684\u4E0A\u4E00\u500B\u554F\u984C (\u932F\u8AA4, \u8B66\u544A, \u8CC7\u8A0A)","\u524D\u4E00\u500B\u554F\u984C(&&P)"],"vs/editor/contrib/gotoError/gotoErrorWidget":["\u932F\u8AA4","\u8B66\u544A","\u8CC7\u8A0A","\u63D0\u793A","{0} \u65BC {1}\u3002","{0} \u500B\u554F\u984C (\u5171 {1} \u500B)","{0} \u500B\u554F\u984C (\u5171 {1} \u500B)","\u7DE8\u8F2F\u5668\u6A19\u8A18\u5C0E\u89BD\u5C0F\u5DE5\u5177\u932F\u8AA4\u7684\u8272\u5F69\u3002","\u7DE8\u8F2F\u5668\u6A19\u8A18\u5C0E\u89BD\u5C0F\u5DE5\u5177\u8B66\u544A\u7684\u8272\u5F69\u3002","\u7DE8\u8F2F\u5668\u6A19\u8A18\u5C0E\u89BD\u5C0F\u5DE5\u5177\u8CC7\u8A0A\u7684\u8272\u5F69","\u7DE8\u8F2F\u5668\u6A19\u8A18\u5C0E\u89BD\u5C0F\u5DE5\u5177\u7684\u80CC\u666F\u3002"],"vs/editor/contrib/gotoSymbol/goToCommands":["\u67E5\u770B","\u5B9A\u7FA9","\u627E\u4E0D\u5230 '{0}' \u7684\u5B9A\u7FA9","\u627E\u4E0D\u5230\u4EFB\u4F55\u5B9A\u7FA9","\u79FB\u81F3\u5B9A\u7FA9","\u79FB\u81F3\u5B9A\u7FA9(&&D)","\u5728\u4E00\u5074\u958B\u555F\u5B9A\u7FA9","\u7784\u6838\u5B9A\u7FA9","\u5BA3\u544A","\u627E\u4E0D\u5230 '{0}' \u7684\u5BA3\u544A ","\u627E\u4E0D\u5230\u4EFB\u4F55\u5BA3\u544A","\u79FB\u81F3\u5BA3\u544A","\u524D\u5F80\u5BA3\u544A(&&D)","\u627E\u4E0D\u5230 '{0}' \u7684\u5BA3\u544A ","\u627E\u4E0D\u5230\u4EFB\u4F55\u5BA3\u544A","\u9810\u89BD\u5BA3\u544A","\u985E\u578B\u5B9A\u7FA9","\u627E\u4E0D\u5230 '{0}' \u7684\u4EFB\u4F55\u985E\u578B\u5B9A\u7FA9","\u627E\u4E0D\u5230\u4EFB\u4F55\u985E\u578B\u5B9A\u7FA9","\u79FB\u81F3\u985E\u578B\u5B9A\u7FA9","\u524D\u5F80\u985E\u578B\u5B9A\u7FA9(&&T)","\u9810\u89BD\u985E\u578B\u5B9A\u7FA9","\u5BE6\u4F5C","\u627E\u4E0D\u5230 '{0}' \u7684\u4EFB\u4F55\u5BE6\u4F5C","\u627E\u4E0D\u5230\u4EFB\u4F55\u5BE6\u4F5C","\u524D\u5F80\u5BE6\u4F5C","\u524D\u5F80\u5BE6\u4F5C(&&I)","\u67E5\u770B\u5BE6\u4F5C",'\u672A\u627E\u5230 "{0}" \u7684\u53C3\u8003',"\u672A\u627E\u5230\u53C3\u8003","\u524D\u5F80\u53C3\u8003","\u524D\u5F80\u53C3\u8003(&&R)","\u53C3\u8003","\u9810\u89BD\u53C3\u8003","\u53C3\u8003","\u79FB\u81F3\u4EFB\u4F55\u7B26\u865F","\u4F4D\u7F6E","'{0}' \u6C92\u6709\u7D50\u679C","\u53C3\u8003"],"vs/editor/contrib/gotoSymbol/link/goToDefinitionAtPosition":["\u6309\u4E00\u4E0B\u4EE5\u986F\u793A {0} \u9805\u5B9A\u7FA9\u3002"],"vs/editor/contrib/gotoSymbol/peek/referencesController":["\u6B63\u5728\u8F09\u5165...","{0} ({1})"],"vs/editor/contrib/gotoSymbol/peek/referencesTree":["{0} \u500B\u53C3\u8003","{0} \u500B\u53C3\u8003","\u53C3\u8003"],"vs/editor/contrib/gotoSymbol/peek/referencesWidget":["\u7121\u6CD5\u9810\u89BD","\u67E5\u7121\u7D50\u679C","\u53C3\u8003"],"vs/editor/contrib/gotoSymbol/referencesModel":["\u500B\u7B26\u865F\u4F4D\u65BC {0} \u4E2D\u7684\u7B2C {1} \u884C\u7B2C {2} \u6B04","\u7B26\u865F\u4F4D\u65BC {0} \u4E2D\u7684\u7B2C {1} \u884C\u7B2C {2}\u3001{3} \u6B04","1 \u500B\u7B26\u865F\u4F4D\u65BC {0}, \u5B8C\u6574\u8DEF\u5F91 {1}","{0} \u500B\u7B26\u865F\u4F4D\u65BC {1}, \u5B8C\u6574\u8DEF\u5F91 {2}","\u627E\u4E0D\u5230\u7D50\u679C","\u5728 {0} \u4E2D\u627E\u5230 1 \u500B\u7B26\u865F","\u5728 {1} \u4E2D\u627E\u5230 {0} \u500B\u7B26\u865F","\u5728 {1} \u500B\u6A94\u6848\u4E2D\u627E\u5230 {0} \u500B\u7B26\u865F"],"vs/editor/contrib/gotoSymbol/symbolNavigation":["{1} \u7684\u7B26\u865F {0}\uFF0C{2} \u70BA\u4E0B\u4E00\u500B","{1} \u7684\u7B26\u865F {0}"],"vs/editor/contrib/hover/hover":["\u52D5\u614B\u986F\u793A","\u986F\u793A\u5B9A\u7FA9\u9810\u89BD\u61F8\u505C"],"vs/editor/contrib/hover/markdownHoverParticipant":["\u6B63\u5728\u8F09\u5165..."],"vs/editor/contrib/hover/markerHoverParticipant":["View Problem","\u6C92\u6709\u53EF\u7528\u7684\u5FEB\u901F\u4FEE\u6B63","\u6B63\u5728\u6AA2\u67E5\u5FEB\u901F\u4FEE\u6B63...","\u6C92\u6709\u53EF\u7528\u7684\u5FEB\u901F\u4FEE\u6B63","\u5FEB\u901F\u4FEE\u5FA9..."],"vs/editor/contrib/inPlaceReplace/inPlaceReplace":["\u4EE5\u4E0A\u4E00\u500B\u503C\u53D6\u4EE3","\u4EE5\u4E0B\u4E00\u500B\u503C\u53D6\u4EE3"],"vs/editor/contrib/indentation/indentation":["\u5C07\u7E2E\u6392\u8F49\u63DB\u6210\u7A7A\u683C","\u5C07\u7E2E\u6392\u8F49\u63DB\u6210\u5B9A\u4F4D\u9EDE","\u5DF2\u8A2D\u5B9A\u7684\u5B9A\u4F4D\u9EDE\u5927\u5C0F","\u9078\u53D6\u76EE\u524D\u6A94\u6848\u7684\u5B9A\u4F4D\u9EDE\u5927\u5C0F","\u4F7F\u7528 Tab \u9032\u884C\u7E2E\u6392","\u4F7F\u7528\u7A7A\u683C\u9375\u9032\u884C\u7E2E\u6392","\u5075\u6E2C\u5167\u5BB9\u4E2D\u7684\u7E2E\u6392","\u91CD\u65B0\u5C07\u884C\u7E2E\u6392","\u91CD\u65B0\u5C07\u9078\u53D6\u7684\u884C\u7E2E\u6392"],"vs/editor/contrib/linesOperations/linesOperations":["\u5C07\u884C\u5411\u4E0A\u8907\u88FD","\u5C07\u884C\u5411\u4E0A\u8907\u88FD(&&C)","\u5C07\u884C\u5411\u4E0B\u8907\u88FD","\u5C07\u884C\u5411\u4E0B\u8907\u88FD(&&P)","\u91CD\u8907\u9078\u53D6\u9805\u76EE","\u91CD\u8907\u9078\u53D6\u9805\u76EE(&&D)","\u4E0A\u79FB\u4E00\u884C","\u4E0A\u79FB\u4E00\u884C(&&V)","\u4E0B\u79FB\u4E00\u884C","\u4E0B\u79FB\u4E00\u884C(&&L)","\u905E\u589E\u6392\u5E8F\u884C","\u905E\u6E1B\u6392\u5E8F\u884C","\u4FEE\u526A\u5C3E\u7AEF\u7A7A\u767D","\u522A\u9664\u884C","\u7E2E\u6392\u884C","\u51F8\u6392\u884C","\u5728\u4E0A\u65B9\u63D2\u5165\u884C","\u5728\u4E0B\u65B9\u63D2\u5165\u884C","\u5DE6\u908A\u5168\u90E8\u522A\u9664","\u522A\u9664\u6240\u6709\u53F3\u65B9\u9805\u76EE","\u9023\u63A5\u7DDA","\u8F49\u7F6E\u6E38\u6A19\u5468\u570D\u7684\u5B57\u5143\u6578","\u8F49\u63DB\u5230\u5927\u5BEB","\u8F49\u63DB\u5230\u5C0F\u5BEB","\u8F49\u63DB\u70BA\u5B57\u9996\u5927\u5BEB","\u8F49\u63DB\u70BA\u5E95\u7DDA\u9023\u63A5\u5B57"],"vs/editor/contrib/linkedEditing/linkedEditing":["\u958B\u59CB\u9023\u7D50\u7684\u7DE8\u8F2F","\u7576\u7DE8\u8F2F\u5668\u81EA\u52D5\u91CD\u65B0\u547D\u540D\u985E\u578B\u6642\u7684\u80CC\u666F\u8272\u5F69\u3002"],"vs/editor/contrib/links/links":["\u57F7\u884C\u547D\u4EE4","\u8FFD\u8E64\u9023\u7D50","cmd + \u6309\u4E00\u4E0B","ctrl + \u6309\u4E00\u4E0B","\u9078\u9805 + \u6309\u4E00\u4E0B","alt + \u6309\u4E00\u4E0B","\u57F7\u884C\u547D\u4EE4 {0}","\u56E0\u70BA\u6B64\u9023\u7D50\u7684\u683C\u5F0F\u4E0D\u6B63\u78BA\uFF0C\u6240\u4EE5\u7121\u6CD5\u958B\u555F: {0}","\u56E0\u70BA\u6B64\u9023\u7D50\u76EE\u6A19\u907A\u5931\uFF0C\u6240\u4EE5\u7121\u6CD5\u958B\u555F\u3002","\u958B\u555F\u9023\u7D50"],"vs/editor/contrib/message/messageController":["\u7DE8\u8F2F\u5668\u76EE\u524D\u662F\u5426\u6B63\u5728\u986F\u793A\u5167\u5D4C\u8A0A\u606F","\u7121\u6CD5\u5728\u552F\u8B80\u7DE8\u8F2F\u5668\u4E2D\u7DE8\u8F2F"],"vs/editor/contrib/multicursor/multicursor":["\u5728\u4E0A\u65B9\u52A0\u5165\u6E38\u6A19","\u5728\u4E0A\u65B9\u65B0\u589E\u6E38\u6A19(&&A)","\u5728\u4E0B\u65B9\u52A0\u5165\u6E38\u6A19","\u5728\u4E0B\u65B9\u65B0\u589E\u6E38\u6A19(&&D)","\u5728\u884C\u5C3E\u65B0\u589E\u6E38\u6A19","\u5728\u884C\u5C3E\u65B0\u589E\u6E38\u6A19(&&U)","\u5C07\u6E38\u6A19\u65B0\u589E\u5230\u5E95\u90E8 ","\u5C07\u6E38\u6A19\u65B0\u589E\u5230\u9802\u90E8","\u5C07\u9078\u53D6\u9805\u76EE\u52A0\u5165\u4E0B\u4E00\u500B\u627E\u5230\u7684\u76F8\u7B26\u9805","\u65B0\u589E\u4E0B\u4E00\u500B\u9805\u76EE(&&N)","\u5C07\u9078\u53D6\u9805\u76EE\u52A0\u5165\u524D\u4E00\u500B\u627E\u5230\u7684\u76F8\u7B26\u9805\u4E2D","\u65B0\u589E\u4E0A\u4E00\u500B\u9805\u76EE(&&R)","\u5C07\u6700\u5F8C\u4E00\u500B\u9078\u64C7\u9805\u76EE\u79FB\u81F3\u4E0B\u4E00\u500B\u627E\u5230\u7684\u76F8\u7B26\u9805","\u5C07\u6700\u5F8C\u4E00\u500B\u9078\u64C7\u9805\u76EE\u79FB\u81F3\u524D\u4E00\u500B\u627E\u5230\u7684\u76F8\u7B26\u9805","\u9078\u53D6\u6240\u6709\u627E\u5230\u7684\u76F8\u7B26\u9805\u76EE","\u9078\u53D6\u6240\u6709\u9805\u76EE(&&O)","\u8B8A\u66F4\u6240\u6709\u767C\u751F\u6B21\u6578"],"vs/editor/contrib/parameterHints/parameterHints":["\u89F8\u767C\u53C3\u6578\u63D0\u793A"],"vs/editor/contrib/parameterHints/parameterHintsWidget":["[\u986F\u793A\u4E0B\u4E00\u500B\u53C3\u6578\u63D0\u793A] \u7684\u5716\u793A\u3002","[\u986F\u793A\u4E0A\u4E00\u500B\u53C3\u6578\u63D0\u793A] \u7684\u5716\u793A\u3002","{0}\uFF0C\u63D0\u793A"],"vs/editor/contrib/peekView/peekView":["\u95DC\u9589","\u9810\u89BD\u6AA2\u8996\u6A19\u984C\u5340\u57DF\u7684\u80CC\u666F\u8272\u5F69\u3002","\u9810\u89BD\u6AA2\u8996\u6A19\u984C\u7684\u8272\u5F69\u3002","\u9810\u89BD\u6AA2\u8996\u6A19\u984C\u8CC7\u8A0A\u7684\u8272\u5F69\u3002","\u9810\u89BD\u6AA2\u8996\u4E4B\u6846\u7DDA\u8207\u7BAD\u982D\u7684\u8272\u5F69\u3002","\u9810\u89BD\u6AA2\u8996\u4E2D\u7D50\u679C\u6E05\u55AE\u7684\u80CC\u666F\u8272\u5F69\u3002","\u9810\u89BD\u6AA2\u8996\u7D50\u679C\u5217\u8868\u4E2D\u884C\u7BC0\u9EDE\u7684\u524D\u666F\u8272\u5F69","\u9810\u89BD\u6AA2\u8996\u7D50\u679C\u5217\u8868\u4E2D\u6A94\u6848\u7BC0\u9EDE\u7684\u524D\u666F\u8272\u5F69","\u5728\u9810\u89BD\u6AA2\u8996\u4E4B\u7D50\u679C\u6E05\u55AE\u4E2D\u9078\u53D6\u9805\u76EE\u6642\u7684\u80CC\u666F\u8272\u5F69\u3002","\u5728\u9810\u89BD\u6AA2\u8996\u4E4B\u7D50\u679C\u6E05\u55AE\u4E2D\u9078\u53D6\u9805\u76EE\u6642\u7684\u524D\u666F\u8272\u5F69\u3002","\u9810\u89BD\u6AA2\u8996\u7DE8\u8F2F\u5668\u7684\u80CC\u666F\u8272\u5F69\u3002","\u9810\u89BD\u6AA2\u8996\u7DE8\u8F2F\u5668\u908A\u6846(\u542B\u884C\u865F\u6216\u5B57\u5F62\u5716\u793A)\u7684\u80CC\u666F\u8272\u5F69\u3002","\u5728\u9810\u89BD\u6AA2\u8996\u7DE8\u8F2F\u5668\u4E2D\u6BD4\u5C0D\u6642\u7684\u53CD\u767D\u986F\u793A\u8272\u5F69\u3002","\u9810\u89BD\u6AA2\u8996\u7DE8\u8F2F\u5668\u4E2D\u6BD4\u5C0D\u6642\u7684\u53CD\u767D\u986F\u793A\u8272\u5F69\u3002","\u5728\u9810\u89BD\u6AA2\u8996\u7DE8\u8F2F\u5668\u4E2D\u6BD4\u5C0D\u6642\u7684\u53CD\u767D\u986F\u793A\u908A\u754C\u3002"],"vs/editor/contrib/quickAccess/gotoLineQuickAccess":["\u5148\u958B\u555F\u6587\u5B57\u7DE8\u8F2F\u5668\uFF0C\u524D\u5F80\u67D0\u4E00\u884C\u3002","\u524D\u5F80\u7B2C {0} \u884C\u548C\u7B2C {1} \u6B04\u3002","\u524D\u5F80\u7B2C {0} \u884C\u3002","\u76EE\u524D\u884C: {0}\uFF0C\u5B57\u5143: {1}\u3002\u8ACB\u9375\u5165\u4ECB\u65BC 1 \u5230 {2} \u4E4B\u9593\u884C\u865F\uFF0C\u5C0E\u89BD\u81F3\u8A72\u884C\u3002","\u76EE\u524D\u884C: {0}\uFF0C\u5B57\u5143: {1}\u3002\u8ACB\u9375\u5165\u8981\u5C0E\u89BD\u81F3\u7684\u884C\u865F\u3002"],"vs/editor/contrib/quickAccess/gotoSymbolQuickAccess":["\u82E5\u8981\u524D\u5F80\u7B26\u865F\uFF0C\u8ACB\u5148\u958B\u555F\u5305\u542B\u7B26\u865F\u8CC7\u8A0A\u7684\u6587\u5B57\u7DE8\u8F2F\u5668\u3002","\u4F7F\u7528\u4E2D\u7684\u6587\u5B57\u7DE8\u8F2F\u5668\u4E0D\u63D0\u4F9B\u7B26\u865F\u8CC7\u8A0A\u3002","\u6C92\u6709\u76F8\u7B26\u7684\u7DE8\u8F2F\u5668\u7B26\u865F","\u6C92\u6709\u7DE8\u8F2F\u5668\u7B26\u865F","\u958B\u81F3\u5074\u908A","\u958B\u555F\u5230\u5E95\u90E8","\u7B26\u865F ({0})","\u5C6C\u6027 ({0})","\u65B9\u6CD5 ({0})","\u51FD\u5F0F ({0})","\u5EFA\u69CB\u51FD\u5F0F ({0})","\u8B8A\u6578 ({0})","\u985E\u5225 ({0})","\u7D50\u69CB ({0})","\u4E8B\u4EF6 ({0})","\u904B\u7B97\u5B50 ({0})","\u4ECB\u9762 ({0})","\u547D\u540D\u7A7A\u9593 ({0})","\u5957\u4EF6 ({0})","\u578B\u5225\u53C3\u6578 ({0})","\u6A21\u7D44 ({0})","\u5C6C\u6027 ({0})","\u5217\u8209 ({0})","\u5217\u8209\u6210\u54E1 ({0})","\u5B57\u4E32 ({0})","\u6A94\u6848 ({0})","\u9663\u5217 ({0})","\u6578\u5B57 ({0})","\u5E03\u6797\u503C ({0})","\u7269\u4EF6 ({0})","\u7D22\u5F15\u9375 ({0})","\u6B04\u4F4D ({0})","\u5E38\u6578 ({0})"],"vs/editor/contrib/rename/rename":["\u6C92\u6709\u7D50\u679C\u3002","\u89E3\u6790\u91CD\u65B0\u547D\u540D\u4F4D\u7F6E\u6642\u767C\u751F\u672A\u77E5\u7684\u932F\u8AA4","\u6B63\u5728\u70BA '{0}' \u91CD\u65B0\u547D\u540D","\u6B63\u5728\u91CD\u65B0\u547D\u540D {0}","\u5DF2\u6210\u529F\u5C07 '{0}' \u91CD\u65B0\u547D\u540D\u70BA '{1}'\u3002\u6458\u8981: {2}","\u91CD\u547D\u540D\u7121\u6CD5\u5957\u7528\u7DE8\u8F2F","\u91CD\u65B0\u547D\u540D\u7121\u6CD5\u8A08\u7B97\u7DE8\u8F2F","\u91CD\u65B0\u547D\u540D\u7B26\u865F","\u555F\u7528/\u505C\u7528\u91CD\u65B0\u547D\u540D\u524D\u5148\u9810\u89BD\u8B8A\u66F4\u7684\u529F\u80FD"],"vs/editor/contrib/rename/renameInputField":["\u70BA\u8F38\u5165\u91CD\u65B0\u547D\u540D\u3002\u8ACB\u9375\u5165\u65B0\u540D\u7A31\uFF0C\u7136\u5F8C\u6309 Enter \u4EE5\u8A8D\u53EF\u3002","\u6309 {0} \u9032\u884C\u91CD\u65B0\u547D\u540D\uFF0C\u6309 {1} \u9032\u884C\u9810\u89BD"],"vs/editor/contrib/smartSelect/smartSelect":["\u5C55\u958B\u9078\u53D6\u9805\u76EE","\u5C55\u958B\u9078\u53D6\u7BC4\u570D(&&E)","\u7E2E\u5C0F\u9078\u53D6\u9805\u76EE","\u58D3\u7E2E\u9078\u53D6\u7BC4\u570D(&&S)"],"vs/editor/contrib/snippet/snippetVariables":["\u661F\u671F\u5929","\u661F\u671F\u4E00","\u661F\u671F\u4E8C","\u661F\u671F\u4E09","\u661F\u671F\u56DB","\u661F\u671F\u4E94","\u661F\u671F\u516D","\u9031\u65E5","\u9031\u4E00","\u9031\u4E8C","\u9031\u4E09","\u9031\u56DB","\u9031\u4E94","\u9031\u516D","\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00\u6708","\u5341\u4E8C\u6708","1\u6708","2\u6708","3 \u6708","4\u6708","\u4E94\u6708","6\u6708","7 \u6708","8 \u6708","9 \u6708","10 \u6708","11 \u6708","12 \u6708"],"vs/editor/contrib/suggest/suggestController":["\u63A5\u53D7 \u2018{0}\u2019 \u9032\u884C\u4E86\u5176\u4ED6 {1} \u9805\u7DE8\u8F2F","\u89F8\u767C\u5EFA\u8B70","\u63D2\u5165","\u63D2\u5165","\u53D6\u4EE3","\u53D6\u4EE3","\u63D2\u5165","\u986F\u793A\u66F4\u5C11","\u986F\u793A\u66F4\u591A","\u91CD\u8A2D\u5EFA\u8B70\u5C0F\u5DE5\u5177\u5927\u5C0F"],"vs/editor/contrib/suggest/suggestWidget":["\u5EFA\u8B70\u5C0F\u5DE5\u5177\u7684\u80CC\u666F\u8272\u5F69\u3002","\u5EFA\u8B70\u5C0F\u5DE5\u5177\u7684\u908A\u754C\u8272\u5F69\u3002","\u5EFA\u8B70\u5C0F\u5DE5\u5177\u7684\u524D\u666F\u8272\u5F69\u3002","\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u6240\u9078\u9805\u76EE\u7684\u80CC\u666F\u8272\u5F69\u3002","\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u76F8\u7B26\u9192\u76EE\u63D0\u793A\u7684\u8272\u5F69\u3002","\u6B63\u5728\u8F09\u5165...","\u7121\u5EFA\u8B70\u3002","{0}\uFF0C\u6587\u4EF6: {1}","\u5EFA\u8B70"],"vs/editor/contrib/suggest/suggestWidgetDetails":["\u95DC\u9589","\u6B63\u5728\u8F09\u5165..."],"vs/editor/contrib/suggest/suggestWidgetRenderer":["\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D [\u66F4\u591A\u8A73\u7D30\u8CC7\u8A0A] \u7684\u5716\u793A\u3002","\u95B1\u8B80\u66F4\u591A"],"vs/editor/contrib/suggest/suggestWidgetStatus":["{0} ({1})"],"vs/editor/contrib/symbolIcons/symbolIcons":["\u9663\u5217\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u5E03\u6797\u503C\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u985E\u5225\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u8272\u5F69\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u5E38\u6578\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u5EFA\u69CB\u51FD\u5F0F\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u5217\u8209\u503C\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u5217\u8209\u503C\u6210\u54E1\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u4E8B\u4EF6\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u6B04\u4F4D\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u6A94\u6848\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u8CC7\u6599\u593E\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u51FD\u5F0F\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u4ECB\u9762\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u7D22\u5F15\u9375\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u95DC\u9375\u5B57\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u65B9\u6CD5\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u6A21\u7D44\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u547D\u540D\u7A7A\u9593\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","Null \u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u6578\u5B57\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u7269\u4EF6\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u904B\u7B97\u5B50\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u5957\u4EF6\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u5C6C\u6027\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u53C3\u8003\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u7A0B\u5F0F\u78BC\u7247\u6BB5\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u5B57\u4E32\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u7D50\u69CB\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u6587\u5B57\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u578B\u5225\u53C3\u6578\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u55AE\u4F4D\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002","\u8B8A\u6578\u7B26\u865F\u7684\u524D\u666F\u8272\u5F69\u3002\u9019\u4E9B\u7B26\u865F\u6703\u51FA\u73FE\u5728\u5927\u7DB1\u3001\u968E\u5C64\u9023\u7D50\u548C\u5EFA\u8B70\u5C0F\u5DE5\u5177\u4E2D\u3002"],"vs/editor/contrib/toggleTabFocusMode/toggleTabFocusMode":["\u5207\u63DB TAB \u9375\u79FB\u52D5\u7126\u9EDE","\u6309 Tab \u73FE\u5728\u6703\u5C07\u7126\u9EDE\u79FB\u81F3\u4E0B\u4E00\u500B\u53EF\u8A2D\u5B9A\u7126\u9EDE\u7684\u5143\u7D20\u3002","\u6309 Tab \u73FE\u5728\u6703\u63D2\u5165\u5B9A\u4F4D\u5B57\u5143\u3002"],"vs/editor/contrib/tokenization/tokenization":["\u958B\u767C\u4EBA\u54E1: \u5F37\u5236\u91CD\u65B0\u7F6E\u653E"],"vs/editor/contrib/unusualLineTerminators/unusualLineTerminators":["\u7570\u5E38\u7684\u884C\u7D50\u675F\u5B57\u5143","\u5075\u6E2C\u5230\u7570\u5E38\u7684\u884C\u7D50\u675F\u5B57\u5143","\u6B64\u6A94\u6848\u5305\u542B\u4E00\u6216\u591A\u500B\u7570\u5E38\u7684\u884C\u7D50\u675F\u5B57\u5143\uFF0C\u4F8B\u5982\u884C\u5206\u9694\u7B26\u865F (LS) \u6216\u6BB5\u843D\u5206\u9694\u7B26\u865F (PS)\u3002\r\n\r\n\u5EFA\u8B70\u60A8\u5C07\u5176\u5F9E\u6A94\u6848\u4E2D\u79FB\u9664\u3002\u9019\u53EF\u4EE5\u900F\u904E `editor.unusualLineTerminators` \u9032\u884C\u8A2D\u5B9A\u3002","\u4FEE\u6B63\u6B64\u6A94\u6848","\u5FFD\u7565\u6B64\u6A94\u6848\u7684\u554F\u984C"],"vs/editor/contrib/wordHighlighter/wordHighlighter":["\u8B80\u53D6\u6B0A\u9650\u671F\u9593 (\u5982\u8B80\u53D6\u8B8A\u6578) \u7B26\u865F\u7684\u80CC\u666F\u8272\u5F69\u3002\u5176\u4E0D\u5F97\u70BA\u4E0D\u900F\u660E\u8272\u5F69\uFF0C\u4EE5\u514D\u96B1\u85CF\u5E95\u5C64\u88DD\u98FE\u3002","\u5BEB\u5165\u6B0A\u9650\u671F\u9593 (\u5982\u5BEB\u5165\u8B8A\u6578) \u7B26\u865F\u7684\u80CC\u666F\u8272\u5F69\u3002\u5176\u4E0D\u5F97\u70BA\u4E0D\u900F\u660E\u8272\u5F69\uFF0C\u4EE5\u514D\u96B1\u85CF\u5E95\u5C64\u88DD\u98FE\u3002","\u8B80\u53D6\u5B58\u53D6\u671F\u9593 (\u4F8B\u5982\u8B80\u53D6\u8B8A\u6578\u6642) \u7B26\u865F\u7684\u908A\u6846\u984F\u8272\u3002","\u5BEB\u5165\u5B58\u53D6\u671F\u9593 (\u4F8B\u5982\u5BEB\u5165\u8B8A\u6578\u6642) \u7B26\u865F\u7684\u908A\u6846\u984F\u8272\u3002 ","\u7B26\u865F\u9192\u76EE\u63D0\u793A\u7684\u6982\u89C0\u5C3A\u898F\u6A19\u8A18\u8272\u5F69\u3002\u5176\u4E0D\u5F97\u70BA\u4E0D\u900F\u660E\u8272\u5F69\uFF0C\u4EE5\u514D\u96B1\u85CF\u5E95\u5C64\u88DD\u98FE\u3002","\u5BEB\u5165\u6B0A\u9650\u7B26\u865F\u9192\u76EE\u63D0\u793A\u7684\u6982\u89C0\u5C3A\u898F\u6A19\u8A18\u8272\u5F69\u3002\u5176\u4E0D\u5F97\u70BA\u4E0D\u900F\u660E\u8272\u5F69\uFF0C\u4EE5\u514D\u96B1\u85CF\u5E95\u5C64\u88DD\u98FE\u3002","\u79FB\u81F3\u4E0B\u4E00\u500B\u53CD\u767D\u7B26\u865F","\u79FB\u81F3\u4E0A\u4E00\u500B\u53CD\u767D\u7B26\u865F","\u89F8\u767C\u7B26\u865F\u53CD\u767D\u986F\u793A"],"vs/editor/contrib/wordOperations/wordOperations":["\u522A\u9664\u5B57\u7D44"],"vs/platform/actions/browser/menuEntryActionViewItem":["{0} ({1})"],"vs/platform/configuration/common/configurationRegistry":["\u9810\u8A2D\u8A9E\u8A00\u7D44\u614B\u8986\u5BEB","\u8A2D\u5B9A\u8981\u91DD\u5C0D\u8A9E\u8A00\u8986\u5BEB\u7684\u7DE8\u8F2F\u5668\u8A2D\u5B9A\u3002","\u9019\u500B\u8A2D\u5B9A\u4E0D\u652F\u63F4\u4EE5\u8A9E\u8A00\u70BA\u6839\u64DA\u7684\u7D44\u614B\u3002","\u7121\u6CD5\u8A3B\u518A\u7A7A\u767D\u5C6C\u6027","\u7121\u6CD5\u8A3B\u518A '{0}'\u3002\u9019\u7B26\u5408\u7528\u65BC\u63CF\u8FF0\u8A9E\u8A00\u5C08\u7528\u7DE8\u8F2F\u5668\u8A2D\u5B9A\u7684\u5C6C\u6027\u6A21\u5F0F '\\\\[.*\\\\]$'\u3002\u8ACB\u4F7F\u7528 'configurationDefaults' \u8CA2\u737B\u3002","\u7121\u6CD5\u8A3B\u518A '{0}'\u3002\u6B64\u5C6C\u6027\u5DF2\u7D93\u8A3B\u518A\u3002"],"vs/platform/contextkey/browser/contextKeyService":["\u50B3\u56DE\u6709\u95DC\u5167\u5BB9\u7D22\u5F15\u9375\u8CC7\u8A0A\u7684\u547D\u4EE4"],"vs/platform/contextkey/common/contextkeys":["Whether the operating system is Windows"],"vs/platform/keybinding/common/abstractKeybindingService":["\u5DF2\u6309\u4E0B ({0})\u3002\u7B49\u5F85\u7B2C\u4E8C\u500B\u5957\u7D22\u9375...","\u6309\u9375\u7D44\u5408 ({0}, {1}) \u4E0D\u662F\u547D\u4EE4\u3002"],"vs/platform/list/browser/listService":["\u5DE5\u4F5C\u53F0","\u5C0D\u61C9Windows\u548CLinux\u7684'Control'\u8207\u5C0D\u61C9 macOS \u7684'Command'\u3002","\u5C0D\u61C9Windows\u548CLinux\u7684'Alt'\u8207\u5C0D\u61C9macOS\u7684'Option'\u3002","\u900F\u904E\u6ED1\u9F20\u591A\u9078\uFF0C\u7528\u65BC\u5728\u6A39\u72C0\u76EE\u9304\u8207\u6E05\u55AE\u4E2D\u65B0\u589E\u9805\u76EE\u7684\u8F14\u52A9\u6309\u9375 (\u4F8B\u5982\u5728\u7E3D\u7BA1\u4E2D\u958B\u555F\u7DE8\u8F2F\u5668 \u53CA SCM \u6AA2\u8996)\u3002'\u5728\u5074\u908A\u958B\u555F' \u6ED1\u9F20\u624B\u52E2 (\u82E5\u652F\u63F4) \u5C07\u6703\u9069\u61C9\u4EE5\u907F\u514D\u548C\u591A\u9078\u8F14\u52A9\u6309\u9375\u885D\u7A81\u3002","\u63A7\u5236\u5982\u4F55\u4F7F\u7528\u6ED1\u9F20 (\u5982\u652F\u63F4\u6B64\u7528\u6CD5) \u958B\u555F\u6A39\u72C0\u76EE\u9304\u8207\u6E05\u55AE\u4E2D\u7684\u9805\u76EE\u3002\u82E5\u4E0D\u9069\u7528\uFF0C\u67D0\u4E9B\u6A39\u72C0\u76EE\u9304\u8207\u6E05\u55AE\u53EF\u80FD\u6703\u9078\u64C7\u5FFD\u7565\u6B64\u8A2D\u5B9A\u3002","\u63A7\u5236\u5728\u5DE5\u4F5C\u53F0\u4E2D\uFF0C\u6E05\u55AE\u8207\u6A39\u72C0\u7D50\u69CB\u662F\u5426\u652F\u63F4\u6C34\u5E73\u6372\u52D5\u3002\u8B66\u544A: \u958B\u555F\u6B64\u8A2D\u5B9A\u5C07\u6703\u5F71\u97FF\u6548\u80FD\u3002","\u63A7\u5236\u6A39\u72C0\u7D50\u69CB\u7E2E\u6392 (\u50CF\u7D20)\u3002","\u63A7\u5236\u6A39\u7CFB\u662F\u5426\u61C9\u8F49\u8B6F\u7E2E\u6392\u8F14\u52A9\u7DDA\u3002","\u63A7\u5236\u6E05\u55AE\u548C\u6A39\u72C0\u7D50\u69CB\u662F\u5426\u5177\u6709\u5E73\u6ED1\u6372\u52D5\u3002","\u6BD4\u5C0D\u6309\u9375\u8F38\u5165\u7684\u7C21\u6613\u6309\u9375\u700F\u89BD\u7126\u9EDE\u5143\u7D20\u3002\u50C5\u6BD4\u5C0D\u524D\u7F6E\u8A5E\u3002","\u9192\u76EE\u63D0\u793A\u9375\u76E4\u700F\u89BD\u6703\u9192\u76EE\u63D0\u793A\u7B26\u5408\u9375\u76E4\u8F38\u5165\u7684\u5143\u7D20\u3002\u9032\u4E00\u6B65\u5411\u4E0A\u6216\u5411\u4E0B\u700F\u89BD\u53EA\u6703\u5468\u904A\u9192\u76EE\u63D0\u793A\u7684\u5143\u7D20\u3002","\u7BE9\u9078\u9375\u76E4\u700F\u89BD\u6703\u7BE9\u6389\u4E26\u96B1\u85CF\u4E0D\u7B26\u5408\u9375\u76E4\u8F38\u5165\u7684\u6240\u6709\u5143\u7D20\u3002","\u63A7\u5236 Workbench \u4E2D\u6E05\u55AE\u548C\u6A39\u72C0\u7D50\u69CB\u7684\u9375\u76E4\u700F\u89BD\u6A23\u5F0F\u3002\u53EF\u4EE5\u662F\u7C21\u6613\u7684\u3001\u9192\u76EE\u63D0\u793A\u548C\u7BE9\u9078\u3002","\u63A7\u5236\u662F\u5426\u53EA\u8981\u9375\u5165\u5373\u53EF\u81EA\u52D5\u89F8\u767C\u6E05\u55AE\u548C\u6A39\u72C0\u7D50\u69CB\u4E2D\u7684\u9375\u76E4\u700F\u89BD\u3002\u82E5\u8A2D\u70BA `false`\uFF0C\u53EA\u6709\u5728\u57F7\u884C `list.toggleKeyboardNavigation` \u547D\u4EE4\u6642\uFF0C\u624D\u6703\u89F8\u767C\u9375\u76E4\u700F\u89BD\uFF0C\u60A8\u53EF\u70BA\u5176\u6307\u5B9A\u9375\u76E4\u5FEB\u901F\u9375\u3002","\u63A7\u5236\u7576\u6309\u4E0B\u8CC7\u6599\u593E\u540D\u7A31\u6642\uFF0C\u6A39\u72C0\u76EE\u9304\u8CC7\u6599\u593E\u7684\u5C55\u958B\u65B9\u5F0F\u3002\u8ACB\u6CE8\u610F\uFF0C\u82E5\u4E0D\u9069\u7528\uFF0C\u67D0\u4E9B\u6A39\u72C0\u76EE\u9304\u548C\u6E05\u55AE\u53EF\u80FD\u6703\u9078\u64C7\u5FFD\u7565\u6B64\u8A2D\u5B9A\u3002"],"vs/platform/markers/common/markers":["\u932F\u8AA4","\u8B66\u544A","\u8CC7\u8A0A"],"vs/platform/quickinput/browser/commandsQuickAccess":["{0}, {1}","\u6700\u8FD1\u4F7F\u7528\u7684","\u5176\u4ED6\u547D\u4EE4","\u547D\u4EE4 '{0}' \u9020\u6210\u932F\u8AA4 ({1})"],"vs/platform/quickinput/browser/helpQuickAccess":["\u5168\u57DF\u547D\u4EE4","\u7DE8\u8F2F\u5668\u547D\u4EE4","{0}, {1}"],"vs/platform/theme/common/colorRegistry":["\u6574\u9AD4\u7684\u524D\u666F\u8272\u5F69\u3002\u50C5\u7576\u672A\u88AB\u4EFB\u4F55\u5143\u4EF6\u8986\u758A\u6642\uFF0C\u624D\u6703\u4F7F\u7528\u6B64\u8272\u5F69\u3002","\u6574\u9AD4\u932F\u8AA4\u8A0A\u606F\u7684\u524D\u666F\u8272\u5F69\u3002\u50C5\u7576\u672A\u88AB\u4EFB\u4F55\u5143\u4EF6\u8986\u84CB\u6642\uFF0C\u624D\u6703\u4F7F\u7528\u6B64\u8272\u5F69\u3002","\u5DE5\u4F5C\u53F0\u4E2D\u5716\u793A\u7684\u9810\u8A2D\u8272\u5F69\u3002","\u7126\u9EDE\u9805\u76EE\u7684\u6574\u9AD4\u6846\u7DDA\u8272\u5F69\u3002\u53EA\u5728\u6C92\u6709\u4EFB\u4F55\u5143\u4EF6\u8986\u5BEB\u6B64\u8272\u5F69\u6642\uFF0C\u624D\u6703\u52A0\u4EE5\u4F7F\u7528\u3002","\u9805\u76EE\u5468\u570D\u7684\u984D\u5916\u6846\u7DDA\uFF0C\u53EF\u5C07\u9805\u76EE\u5F9E\u5176\u4ED6\u9805\u76EE\u4E2D\u5340\u9694\u51FA\u4F86\u4EE5\u63D0\u9AD8\u5C0D\u6BD4\u3002","\u4F7F\u7528\u4E2D\u9805\u76EE\u5468\u570D\u7684\u984D\u5916\u908A\u754C\uFF0C\u53EF\u5C07\u9805\u76EE\u5F9E\u5176\u4ED6\u9805\u76EE\u4E2D\u5340\u9694\u51FA\u4F86\u4EE5\u63D0\u9AD8\u5C0D\u6BD4\u3002","\u5167\u6587\u9023\u7D50\u7684\u524D\u666F\u8272\u5F69","\u6587\u5B57\u5340\u584A\u7684\u80CC\u666F\u984F\u8272\u3002","\u5C0F\u5DE5\u5177\u7684\u9670\u5F71\u8272\u5F69\uFF0C\u4F8B\u5982\u7DE8\u8F2F\u5668\u4E2D\u7684\u5C0B\u627E/\u53D6\u4EE3\u3002","\u8F38\u5165\u65B9\u584A\u7684\u80CC\u666F\u3002","\u8F38\u5165\u65B9\u584A\u7684\u524D\u666F\u3002","\u8F38\u5165\u65B9\u584A\u7684\u6846\u7DDA\u3002","\u8F38\u5165\u6B04\u4F4D\u4E2D\u53EF\u4F7F\u7528\u4E4B\u9805\u76EE\u7684\u6846\u7DDA\u8272\u5F69\u3002","\u5728\u8F38\u5165\u6B04\u4F4D\u4E2D\u6240\u555F\u52D5\u9078\u9805\u7684\u80CC\u666F\u8272\u5F69\u3002","\u5728\u8F38\u5165\u6B04\u4F4D\u4E2D\u6240\u555F\u52D5\u9078\u9805\u7684\u524D\u666F\u8272\u5F69\u3002","\u8CC7\u8A0A\u56B4\u91CD\u6027\u7684\u8F38\u5165\u9A57\u8B49\u80CC\u666F\u8272\u5F69\u3002","\u8CC7\u8A0A\u56B4\u91CD\u6027\u7684\u8F38\u5165\u9A57\u8B49\u524D\u666F\u8272\u5F69\u3002","\u8CC7\u8A0A\u56B4\u91CD\u6027\u7684\u8F38\u5165\u9A57\u8B49\u908A\u754C\u8272\u5F69\u3002","\u8B66\u544A\u56B4\u91CD\u6027\u7684\u8F38\u5165\u9A57\u8B49\u80CC\u666F\u8272\u5F69\u3002","\u8B66\u544A\u56B4\u91CD\u6027\u7684\u8F38\u5165\u9A57\u8B49\u524D\u666F\u8272\u5F69\u3002","\u8B66\u544A\u56B4\u91CD\u6027\u7684\u8F38\u5165\u9A57\u8B49\u908A\u754C\u8272\u5F69\u3002","\u932F\u8AA4\u56B4\u91CD\u6027\u7684\u8F38\u5165\u9A57\u8B49\u80CC\u666F\u8272\u5F69\u3002","\u932F\u8AA4\u56B4\u91CD\u6027\u7684\u8F38\u5165\u9A57\u8B49\u524D\u666F\u8272\u5F69\u3002","\u932F\u8AA4\u56B4\u91CD\u6027\u7684\u8F38\u5165\u9A57\u8B49\u908A\u754C\u8272\u5F69\u3002","\u4E0B\u62C9\u5F0F\u6E05\u55AE\u7684\u80CC\u666F\u3002","\u4E0B\u62C9\u5F0F\u6E05\u55AE\u7684\u524D\u666F\u3002","\u6309\u9215\u524D\u666F\u8272\u5F69\u3002","\u6309\u9215\u80CC\u666F\u8272\u5F69\u3002","\u66AB\u7559\u6642\u7684\u6309\u9215\u80CC\u666F\u8272\u5F69\u3002","\u6A19\u8A18\u7684\u80CC\u666F\u984F\u8272\u3002\u6A19\u8A18\u70BA\u5C0F\u578B\u7684\u8A0A\u606F\u6A19\u7C64,\u4F8B\u5982\u641C\u5C0B\u7D50\u679C\u7684\u6578\u91CF\u3002","\u6A19\u8A18\u7684\u524D\u666F\u984F\u8272\u3002\u6A19\u8A18\u70BA\u5C0F\u578B\u7684\u8A0A\u606F\u6A19\u7C64,\u4F8B\u5982\u641C\u5C0B\u7D50\u679C\u7684\u6578\u91CF\u3002","\u6307\u51FA\u5728\u6372\u52D5\u8A72\u6AA2\u8996\u7684\u6372\u8EF8\u9670\u5F71\u3002","\u6372\u8EF8\u6ED1\u687F\u7684\u80CC\u666F\u984F\u8272\u3002","\u52D5\u614B\u986F\u793A\u6642\u6372\u8EF8\u6ED1\u687F\u7684\u80CC\u666F\u984F\u8272\u3002","\u7576\u9EDE\u64CA\u6642\u6372\u8EF8\u6ED1\u687F\u7684\u80CC\u666F\u984F\u8272\u3002","\u9577\u6642\u9593\u904B\u884C\u9032\u5EA6\u689D\u7684\u80CC\u666F\u8272\u5F69.","\u7DE8\u8F2F\u5668\u4E2D\u932F\u8AA4\u6587\u5B57\u7684\u80CC\u666F\u8272\u5F69\u3002\u5176\u4E0D\u5F97\u70BA\u4E0D\u900F\u660E\u8272\u5F69\uFF0C\u4EE5\u514D\u96B1\u85CF\u5E95\u5C64\u88DD\u98FE\u3002","\u7DE8\u8F2F\u5668\u5167\u932F\u8AA4\u63D0\u793A\u7DDA\u7684\u524D\u666F\u8272\u5F69.","\u7DE8\u8F2F\u5668\u4E2D\u932F\u8AA4\u65B9\u584A\u7684\u6846\u7DDA\u8272\u5F69\u3002","\u7DE8\u8F2F\u5668\u4E2D\u8B66\u544A\u6587\u5B57\u7684\u80CC\u666F\u8272\u5F69\u3002\u5176\u4E0D\u5F97\u70BA\u4E0D\u900F\u660E\u8272\u5F69\uFF0C\u4EE5\u514D\u96B1\u85CF\u5E95\u5C64\u88DD\u98FE\u3002","\u7DE8\u8F2F\u5668\u5167\u8B66\u544A\u63D0\u793A\u7DDA\u7684\u524D\u666F\u8272\u5F69.","\u7DE8\u8F2F\u5668\u4E2D\u7684\u8B66\u544A\u65B9\u584A\u6846\u7DDA\u8272\u5F69\u3002","\u7DE8\u8F2F\u5668\u4E2D\u8CC7\u8A0A\u6587\u5B57\u7684\u80CC\u666F\u8272\u5F69\u3002\u5176\u4E0D\u5F97\u70BA\u4E0D\u900F\u660E\u8272\u5F69\uFF0C\u4EE5\u514D\u96B1\u85CF\u5E95\u5C64\u88DD\u98FE\u3002","\u7DE8\u8F2F\u5668\u5167\u8CC7\u8A0A\u63D0\u793A\u7DDA\u7684\u524D\u666F\u8272\u5F69","\u7DE8\u8F2F\u5668\u4E2D\u7684\u8CC7\u8A0A\u65B9\u584A\u6846\u7DDA\u8272\u5F69\u3002","\u7DE8\u8F2F\u5668\u5167\u63D0\u793A\u8A0A\u606F\u7684\u63D0\u793A\u7DDA\u524D\u666F\u8272\u5F69","\u7DE8\u8F2F\u5668\u4E2D\u7684\u63D0\u793A\u65B9\u584A\u6846\u7DDA\u8272\u5F69\u3002","\u7DE8\u8F2F\u5668\u7684\u80CC\u666F\u8272\u5F69\u3002","\u7DE8\u8F2F\u5668\u7684\u9810\u8A2D\u524D\u666F\u8272\u5F69\u3002","\u7DE8\u8F2F\u5668\u5C0F\u5DE5\u5177\u7684\u80CC\u666F\u8272\u5F69\uFF0C\u4F8B\u5982\u5C0B\u627E/\u53D6\u4EE3\u3002","\u7DE8\u8F2F\u5668\u5C0F\u5DE5\u5177 (\u4F8B\u5982\u5C0B\u627E/\u53D6\u4EE3) \u7684\u524D\u666F\u8272\u5F69\u3002","\u7DE8\u8F2F\u5668\u5C0F\u5DE5\u5177\u7684\u908A\u754C\u8272\u5F69\u3002\u5C0F\u5DE5\u5177\u9078\u64C7\u64C1\u6709\u908A\u754C\u6216\u8272\u5F69\u672A\u88AB\u5C0F\u5DE5\u5177\u8986\u5BEB\u6642\uFF0C\u624D\u6703\u4F7F\u7528\u8272\u5F69\u3002","\u7DE8\u8F2F\u5668\u5C0F\u5DE5\u5177\u4E4B\u8ABF\u6574\u5927\u5C0F\u5217\u7684\u908A\u754C\u8272\u5F69\u3002\u53EA\u5728\u5C0F\u5DE5\u5177\u9078\u64C7\u5177\u6709\u8ABF\u6574\u5927\u5C0F\u908A\u754C\u4E14\u672A\u8986\u5BEB\u8A72\u8272\u5F69\u6642\uFF0C\u624D\u4F7F\u7528\u8A72\u8272\u5F69\u3002","\u5FEB\u901F\u9078\u64C7\u5668\u80CC\u666F\u8272\u5F69\u3002\u8A72\u5FEB\u901F\u9078\u64C7\u5668\u5C0F\u5DE5\u5177\u662F\u985E\u4F3C\u547D\u4EE4\u9078\u64C7\u5340\u7684\u9078\u64C7\u5668\u5BB9\u5668\u3002","\u5FEB\u901F\u9078\u64C7\u5668\u524D\u666F\u8272\u5F69\u3002\u5FEB\u901F\u9078\u64C7\u5668\u5C0F\u5DE5\u5177\u662F\u985E\u4F3C\u547D\u4EE4\u9078\u64C7\u5340\u7B49\u9078\u64C7\u5668\u7684\u5BB9\u5668\u3002","\u5FEB\u901F\u9078\u64C7\u5668\u6A19\u984C\u80CC\u666F\u8272\u5F69\u3002\u5FEB\u901F\u9078\u64C7\u5668\u5C0F\u5DE5\u5177\u662F\u985E\u4F3C\u547D\u4EE4\u9078\u64C7\u5340\u7684\u9078\u64C7\u5668\u5BB9\u5668\u3002","\u7126\u9EDE\u9805\u76EE\u7684\u5FEB\u901F\u9078\u64C7\u5668\u80CC\u666F\u8272\u5F69\u3002","\u5206\u7D44\u6A19\u7C64\u7684\u5FEB\u901F\u9078\u64C7\u5668\u8272\u5F69\u3002","\u5206\u7D44\u908A\u754C\u7684\u5FEB\u901F\u9078\u64C7\u5668\u8272\u5F69\u3002","\u7DE8\u8F2F\u5668\u9078\u53D6\u7BC4\u570D\u7684\u8272\u5F69\u3002","\u70BA\u9078\u53D6\u7684\u6587\u5B57\u984F\u8272\u9AD8\u5C0D\u6BD4\u5316","\u975E\u4F7F\u7528\u4E2D\u7DE8\u8F2F\u5668\u5167\u7684\u9078\u53D6\u9805\u76EE\u8272\u5F69\u3002\u5176\u4E0D\u5F97\u70BA\u4E0D\u900F\u660E\u8272\u5F69\uFF0C\u4EE5\u514D\u96B1\u85CF\u5E95\u5C64\u88DD\u98FE\u3002","\u8207\u9078\u53D6\u9805\u76EE\u5167\u5BB9\u76F8\u540C\u4E4B\u5340\u57DF\u7684\u8272\u5F69\u3002\u5176\u4E0D\u5F97\u70BA\u4E0D\u900F\u660E\u8272\u5F69\uFF0C\u4EE5\u514D\u96B1\u85CF\u5E95\u5C64\u88DD\u98FE\u3002","\u9078\u53D6\u6642\uFF0C\u5167\u5BB9\u76F8\u540C\u4E4B\u5340\u57DF\u7684\u6846\u7DDA\u8272\u5F69\u3002","\u7B26\u5408\u76EE\u524D\u641C\u5C0B\u7684\u8272\u5F69\u3002","\u5176\u4ED6\u641C\u5C0B\u76F8\u7B26\u9805\u76EE\u7684\u8272\u5F69\u3002\u5176\u4E0D\u5F97\u70BA\u4E0D\u900F\u660E\u8272\u5F69\uFF0C\u4EE5\u514D\u96B1\u85CF\u5E95\u5C64\u88DD\u98FE\u3002","\u9650\u5236\u641C\u5C0B\u4E4B\u7BC4\u570D\u7684\u8272\u5F69\u3002\u5176\u4E0D\u5F97\u70BA\u4E0D\u900F\u660E\u8272\u5F69\uFF0C\u4EE5\u514D\u96B1\u85CF\u5E95\u5C64\u88DD\u98FE\u3002","\u7B26\u5408\u76EE\u524D\u641C\u5C0B\u7684\u6846\u7DDA\u8272\u5F69\u3002","\u7B26\u5408\u5176\u4ED6\u641C\u5C0B\u7684\u6846\u7DDA\u8272\u5F69\u3002","\u9650\u5236\u641C\u5C0B\u4E4B\u7BC4\u570D\u7684\u6846\u7DDA\u8272\u5F69\u3002\u5176\u4E0D\u5F97\u70BA\u4E0D\u900F\u660E\u8272\u5F69\uFF0C\u4EE5\u514D\u96B1\u85CF\u5E95\u5C64\u88DD\u98FE\u3002","\u5728\u986F\u793A\u52D5\u614B\u986F\u793A\u7684\u6587\u5B57\u4E0B\u9192\u76EE\u63D0\u793A\u3002\u5176\u4E0D\u5F97\u70BA\u4E0D\u900F\u660E\u8272\u5F69\uFF0C\u4EE5\u514D\u96B1\u85CF\u5E95\u5C64\u88DD\u98FE\u3002","\u7DE8\u8F2F\u5668\u52D5\u614B\u986F\u793A\u7684\u80CC\u666F\u8272\u5F69\u3002","\u7DE8\u8F2F\u5668\u52D5\u614B\u986F\u793A\u7684\u524D\u666F\u8272\u5F69\u3002","\u7DE8\u8F2F\u5668\u52D5\u614B\u986F\u793A\u7684\u6846\u7DDA\u8272\u5F69\u3002","\u7DE8\u8F2F\u5668\u66AB\u7559\u72C0\u614B\u5217\u7684\u80CC\u666F\u8272\u5F69\u3002","\u4F7F\u7528\u4E2D\u4E4B\u9023\u7D50\u7684\u8272\u5F69\u3002","\u5167\u5D4C\u63D0\u793A\u7684\u524D\u666F\u8272\u5F69","\u5167\u5D4C\u63D0\u793A\u7684\u80CC\u666F\u8272\u5F69","\u7528\u65BC\u71C8\u6CE1\u52D5\u4F5C\u5716\u793A\u7684\u8272\u5F69\u3002","\u7528\u65BC\u71C8\u6CE1\u81EA\u52D5\u4FEE\u6B63\u52D5\u4F5C\u5716\u793A\u7684\u8272\u5F69\u3002","\u5DF2\u63D2\u5165\u6587\u5B57\u7684\u80CC\u666F\u8272\u5F69\u3002\u5176\u4E0D\u5F97\u70BA\u4E0D\u900F\u660E\u8272\u5F69\uFF0C\u4EE5\u514D\u96B1\u85CF\u5E95\u5C64\u88DD\u98FE\u3002","\u5DF2\u79FB\u9664\u6587\u5B57\u7684\u80CC\u666F\u8272\u5F69\u3002\u5176\u4E0D\u5F97\u70BA\u4E0D\u900F\u660E\u8272\u5F69\uFF0C\u4EE5\u514D\u96B1\u85CF\u5E95\u5C64\u88DD\u98FE\u3002","\u63D2\u5165\u7684\u6587\u5B57\u5916\u6846\u8272\u5F69\u3002","\u79FB\u9664\u7684\u6587\u5B57\u5916\u6846\u8272\u5F69\u3002","\u5169\u500B\u6587\u5B57\u7DE8\u8F2F\u5668\u4E4B\u9593\u7684\u6846\u7DDA\u8272\u5F69\u3002","Diff \u7DE8\u8F2F\u5668\u7684\u659C\u7D0B\u586B\u6EFF\u8272\u5F69\u3002\u659C\u7D0B\u586B\u6EFF\u7528\u65BC\u4E26\u6392 Diff \u6AA2\u8996\u3002","\u7576\u6E05\u55AE/\u6A39\u72C0\u70BA\u4F7F\u7528\u4E2D\u72C0\u614B\u6642\uFF0C\u7126\u9EDE\u9805\u76EE\u7684\u6E05\u55AE/\u6A39\u72C0\u80CC\u666F\u8272\u5F69\u3002\u4F7F\u7528\u4E2D\u7684\u6E05\u55AE/\u6A39\u72C0\u6709\u9375\u76E4\u7126\u9EDE\uFF0C\u975E\u4F7F\u7528\u4E2D\u8005\u5247\u6C92\u6709\u3002","\u7576\u6E05\u55AE/\u6A39\u72C0\u70BA\u4F7F\u7528\u4E2D\u72C0\u614B\u6642\uFF0C\u7126\u9EDE\u9805\u76EE\u7684\u6E05\u55AE/\u6A39\u72C0\u524D\u666F\u8272\u5F69\u3002\u4F7F\u7528\u4E2D\u7684\u6E05\u55AE/\u6A39\u72C0\u6709\u9375\u76E4\u7126\u9EDE\uFF0C\u975E\u4F7F\u7528\u4E2D\u8005\u5247\u6C92\u6709\u3002","\u7576\u6E05\u55AE/\u6A39\u72C0\u76EE\u9304\u70BA\u4F7F\u7528\u4E2D\u72C0\u614B\u6642\uFF0C\u7126\u9EDE\u9805\u76EE\u7684\u6E05\u55AE/\u6A39\u72C0\u76EE\u9304\u5916\u6846\u8272\u5F69\u3002\u4F7F\u7528\u4E2D\u7684\u6E05\u55AE/\u6A39\u72C0\u76EE\u9304\u6709\u9375\u76E4\u7126\u9EDE\uFF0C\u975E\u4F7F\u7528\u4E2D\u8005\u5247\u6C92\u6709\u3002","\u7576\u6E05\u55AE/\u6A39\u72C0\u70BA\u4F7F\u7528\u4E2D\u72C0\u614B\u6642\uFF0C\u6240\u9078\u9805\u76EE\u7684\u6E05\u55AE/\u6A39\u72C0\u80CC\u666F\u8272\u5F69\u3002\u4F7F\u7528\u4E2D\u7684\u6E05\u55AE/\u6A39\u72C0\u6709\u9375\u76E4\u7126\u9EDE\uFF0C\u975E\u4F7F\u7528\u4E2D\u8005\u5247\u6C92\u6709\u3002","\u7576\u6E05\u55AE/\u6A39\u72C0\u70BA\u4F7F\u7528\u4E2D\u72C0\u614B\u6642\uFF0C\u6240\u9078\u9805\u76EE\u7684\u6E05\u55AE/\u6A39\u72C0\u524D\u666F\u8272\u5F69\u3002\u4F7F\u7528\u4E2D\u7684\u6E05\u55AE/\u6A39\u72C0\u6709\u9375\u76E4\u7126\u9EDE\uFF0C\u975E\u4F7F\u7528\u4E2D\u8005\u5247\u6C92\u6709\u3002","\u7576\u6E05\u55AE/\u6A39\u72C0\u70BA\u975E\u4F7F\u7528\u4E2D\u72C0\u614B\u6642\uFF0C\u6240\u9078\u9805\u76EE\u7684\u6E05\u55AE/\u6A39\u72C0\u80CC\u666F\u8272\u5F69\u3002\u4F7F\u7528\u4E2D\u7684\u6E05\u55AE/\u6A39\u72C0\u6709\u9375\u76E4\u7126\u9EDE\uFF0C\u975E\u4F7F\u7528\u4E2D\u8005\u5247\u6C92\u6709\u3002","\u7576\u6E05\u55AE/\u6A39\u72C0\u70BA\u4F7F\u7528\u4E2D\u72C0\u614B\u6642\uFF0C\u6240\u9078\u9805\u76EE\u7684\u6E05\u55AE/\u6A39\u72C0\u524D\u666F\u8272\u5F69\u3002\u4F7F\u7528\u4E2D\u7684\u6E05\u55AE/\u6A39\u72C0\u6709\u9375\u76E4\u7126\u9EDE\uFF0C\u975E\u4F7F\u7528\u4E2D\u5247\u6C92\u6709\u3002","\u7576\u6E05\u55AE/\u6A39\u72C0\u70BA\u975E\u4F7F\u7528\u4E2D\u72C0\u614B\u6642\uFF0C\u7126\u9EDE\u9805\u76EE\u7684\u6E05\u55AE/\u6A39\u72C0\u80CC\u666F\u8272\u5F69\u3002\u4F7F\u7528\u4E2D\u7684\u6E05\u55AE/\u6A39\u72C0\u6709\u9375\u76E4\u7126\u9EDE\uFF0C\u975E\u4F7F\u7528\u4E2D\u8005\u5247\u6C92\u6709\u3002","\u7576\u6E05\u55AE/\u6A39\u72C0\u76EE\u9304\u70BA\u975E\u4F7F\u7528\u4E2D\u72C0\u614B\u6642\uFF0C\u7126\u9EDE\u9805\u76EE\u7684\u6E05\u55AE/\u6A39\u72C0\u76EE\u9304\u5916\u6846\u8272\u5F69\u3002\u4F7F\u7528\u4E2D\u7684\u6E05\u55AE/\u6A39\u72C0\u76EE\u9304\u6709\u9375\u76E4\u7126\u9EDE\uFF0C\u975E\u4F7F\u7528\u4E2D\u8005\u5247\u6C92\u6709\u3002","\u4F7F\u7528\u6ED1\u9F20\u66AB\u7559\u5728\u9805\u76EE\u6642\u7684\u6E05\u55AE/\u6A39\u72C0\u80CC\u666F\u3002","\u6ED1\u9F20\u66AB\u7559\u5728\u9805\u76EE\u6642\u7684\u6E05\u55AE/\u6A39\u72C0\u524D\u666F\u3002","\u4F7F\u7528\u6ED1\u9F20\u56DB\u8655\u79FB\u52D5\u9805\u76EE\u6642\u7684\u6E05\u55AE/\u6A39\u72C0\u62D6\u653E\u80CC\u666F\u3002","\u5728\u6E05\u55AE/\u6A39\u72C0\u5167\u641C\u5C0B\u6642\uFF0C\u76F8\u7B26\u9192\u76EE\u63D0\u793A\u7684\u6E05\u55AE/\u6A39\u72C0\u524D\u666F\u8272\u5F69\u3002","\u6E05\u55AE\u548C\u6A39\u72C0\u7D50\u69CB\u4E2D\u985E\u578B\u7BE9\u9078\u5C0F\u5DE5\u5177\u7684\u80CC\u666F\u8272\u5F69\u3002","\u6E05\u55AE\u548C\u6A39\u72C0\u7D50\u69CB\u4E2D\u985E\u578B\u7BE9\u9078\u5C0F\u5DE5\u5177\u7684\u5927\u7DB1\u8272\u5F69\u3002","\u5728\u6C92\u6709\u76F8\u7B26\u9805\u76EE\u6642\uFF0C\u6E05\u55AE\u548C\u6A39\u72C0\u7D50\u69CB\u4E2D\u985E\u578B\u7BE9\u9078\u5C0F\u5DE5\u5177\u7684\u5927\u7DB1\u8272\u5F69\u3002","\u7E2E\u6392\u8F14\u52A9\u7DDA\u7684\u6A39\u72C0\u7B46\u89F8\u8272\u5F69\u3002","\u7E2E\u6392\u8F14\u52A9\u7DDA\u7684\u6A39\u72C0\u7B46\u89F8\u8272\u5F69\u3002","\u529F\u80FD\u8868\u7684\u908A\u6846\u8272\u5F69\u3002","\u529F\u80FD\u8868\u9805\u76EE\u7684\u524D\u666F\u8272\u5F69\u3002","\u529F\u80FD\u8868\u9805\u76EE\u7684\u80CC\u666F\u8272\u5F69\u3002","\u529F\u80FD\u8868\u4E2D\u6240\u9078\u529F\u80FD\u8868\u9805\u76EE\u7684\u524D\u666F\u8272\u5F69\u3002","\u529F\u80FD\u8868\u4E2D\u6240\u9078\u529F\u80FD\u8868\u9805\u76EE\u7684\u80CC\u666F\u8272\u5F69\u3002","\u529F\u80FD\u8868\u4E2D\u6240\u9078\u529F\u80FD\u8868\u9805\u76EE\u7684\u6846\u7DDA\u8272\u5F69\u3002","\u529F\u80FD\u8868\u4E2D\u5206\u9694\u7DDA\u529F\u80FD\u8868\u9805\u76EE\u7684\u8272\u5F69\u3002","\u7A0B\u5F0F\u78BC\u7247\u6BB5\u5B9A\u4F4D\u505C\u99D0\u9EDE\u7684\u53CD\u767D\u986F\u793A\u80CC\u666F\u8272\u5F69\u3002","\u7A0B\u5F0F\u78BC\u7247\u6BB5\u5B9A\u4F4D\u505C\u99D0\u9EDE\u7684\u53CD\u767D\u986F\u793A\u908A\u754C\u8272\u5F69\u3002","\u7A0B\u5F0F\u78BC\u7247\u6BB5\u6700\u7D42\u5B9A\u4F4D\u505C\u99D0\u9EDE\u7684\u53CD\u767D\u986F\u793A\u80CC\u666F\u8272\u5F69\u3002","\u7A0B\u5F0F\u78BC\u7247\u6BB5\u6700\u7D42\u5B9A\u4F4D\u505C\u99D0\u9EDE\u7684\u9192\u76EE\u63D0\u793A\u6846\u7DDA\u8272\u5F69\u3002","\u5C0B\u627E\u76F8\u7B26\u9805\u76EE\u7684\u6982\u89C0\u5C3A\u898F\u6A19\u8A18\u8272\u5F69\u3002\u5176\u4E0D\u5F97\u70BA\u4E0D\u900F\u660E\u8272\u5F69\uFF0C\u4EE5\u514D\u96B1\u85CF\u5E95\u5C64\u88DD\u98FE\u3002","\u9078\u53D6\u9805\u76EE\u9192\u76EE\u63D0\u793A\u7684\u6982\u89C0\u5C3A\u898F\u6A19\u8A18\u3002\u5176\u4E0D\u5F97\u70BA\u4E0D\u900F\u660E\u8272\u5F69\uFF0C\u4EE5\u514D\u96B1\u85CF\u5E95\u5C64\u88DD\u98FE\u3002","\u7528\u65BC\u5C0B\u627E\u76F8\u7B26\u9805\u76EE\u7684\u7E2E\u5716\u6A19\u8A18\u8272\u5F69\u3002","\u7DE8\u8F2F\u5668\u9078\u53D6\u7BC4\u570D\u7684\u8FF7\u4F60\u5730\u5716\u6A19\u8A18\u8272\u5F69\u3002","\u932F\u8AA4\u7684\u7E2E\u5716\u6A19\u8A18\u8272\u5F69\u3002","\u8B66\u544A\u7684\u7E2E\u5716\u6A19\u8A18\u8272\u5F69\u3002","\u7E2E\u5716\u80CC\u666F\u8272\u5F69\u3002","\u7E2E\u5716\u6ED1\u687F\u80CC\u666F\u8272\u5F69\u3002","\u66AB\u7559\u6642\u7684\u7E2E\u5716\u6ED1\u687F\u80CC\u666F\u8272\u5F69\u3002","\u6309\u4E00\u4E0B\u6642\u7684\u7E2E\u5716\u6ED1\u687F\u80CC\u666F\u8272\u5F69\u3002","\u7528\u65BC\u554F\u984C\u932F\u8AA4\u5716\u793A\u7684\u8272\u5F69\u3002","\u7528\u65BC\u554F\u984C\u8B66\u544A\u5716\u793A\u7684\u8272\u5F69\u3002","\u7528\u65BC\u554F\u984C\u8CC7\u8A0A\u5716\u793A\u7684\u8272\u5F69\u3002"],"vs/platform/theme/common/iconRegistry":["\u8981\u4F7F\u7528\u7684\u5B57\u578B\u8B58\u5225\u78BC\u3002\u5982\u672A\u8A2D\u5B9A\uFF0C\u5C31\u6703\u4F7F\u7528\u6700\u5148\u5B9A\u7FA9\u7684\u5B57\u578B\u3002","\u8207\u5716\u793A\u5B9A\u7FA9\u5EFA\u7ACB\u95DC\u806F\u7684\u5B57\u578B\u5B57\u5143\u3002","\u5C0F\u5DE5\u5177\u4E2D\u95DC\u9589\u52D5\u4F5C\u7684\u5716\u793A\u3002"],"vs/platform/undoRedo/common/undoRedoService":["\u5DF2\u5728\u78C1\u789F\u4E0A\u95DC\u9589\u4E26\u4FEE\u6539\u4EE5\u4E0B\u6A94\u6848: {0}\u3002","\u4E0B\u5217\u6A94\u6848\u5DF2\u4F7F\u7528\u4E0D\u76F8\u5BB9\u7684\u65B9\u5F0F\u4FEE\u6539: {0}\u3002","\u7121\u6CD5\u5FA9\u539F\u6240\u6709\u6A94\u6848\u7684 '{0}'\u3002{1}","\u7121\u6CD5\u5FA9\u539F\u6240\u6709\u6A94\u6848\u7684 '{0}'\u3002{1}","\u56E0\u70BA\u5DF2\u5C0D {1} \u9032\u884C\u8B8A\u66F4\uFF0C\u6240\u4EE5\u7121\u6CD5\u5FA9\u539F\u6240\u6709\u6A94\u6848\u7684 '{0}'","\u56E0\u70BA {1} \u4E2D\u5DF2\u7D93\u6709\u6B63\u5728\u57F7\u884C\u7684\u5FA9\u539F\u6216\u91CD\u505A\u4F5C\u696D\uFF0C\u6240\u4EE5\u7121\u6CD5\u70BA\u6240\u6709\u6A94\u6848\u5FA9\u539F '{0}'","\u56E0\u70BA\u540C\u6642\u767C\u751F\u5176\u4ED6\u5FA9\u539F\u6216\u91CD\u505A\u4F5C\u696D\uFF0C\u6240\u4EE5\u7121\u6CD5\u70BA\u6240\u6709\u6A94\u6848\u5FA9\u539F '{0}'","\u8981\u5FA9\u539F\u6240\u6709\u6A94\u6848\u7684 '{0}' \u55CE?","\u5728 {0} \u500B\u6A94\u6848\u4E2D\u5FA9\u539F","\u5FA9\u539F\u6B64\u6A94\u6848","\u53D6\u6D88","\u56E0\u70BA\u5DF2\u7D93\u6709\u6B63\u5728\u57F7\u884C\u7684\u5FA9\u539F\u6216\u91CD\u505A\u4F5C\u696D\uFF0C\u6240\u4EE5\u7121\u6CD5\u5FA9\u539F '{0}'\u3002","\u8981\u5FA9\u539F '{0}' \u55CE?","\u5FA9\u539F","\u53D6\u6D88","\u7121\u6CD5\u5FA9\u539F\u6240\u6709\u6A94\u6848\u7684 '{0}'\u3002{1}","\u7121\u6CD5\u5FA9\u539F\u6240\u6709\u6A94\u6848\u7684 '{0}'\u3002{1}","\u56E0\u70BA\u5DF2\u5C0D {1} \u9032\u884C\u8B8A\u66F4\uFF0C\u6240\u4EE5\u7121\u6CD5\u5FA9\u539F\u6240\u6709\u6A94\u6848\u7684 '{0}'","\u56E0\u70BA {1} \u4E2D\u5DF2\u7D93\u6709\u6B63\u5728\u57F7\u884C\u7684\u5FA9\u539F\u6216\u91CD\u505A\u4F5C\u696D\uFF0C\u6240\u4EE5\u7121\u6CD5\u70BA\u6240\u6709\u6A94\u6848\u91CD\u505A '{0}'","\u56E0\u70BA\u540C\u6642\u767C\u751F\u5176\u4ED6\u5FA9\u539F\u6216\u91CD\u505A\u4F5C\u696D\uFF0C\u6240\u4EE5\u7121\u6CD5\u70BA\u6240\u6709\u6A94\u6848\u91CD\u505A '{0}'","\u56E0\u70BA\u5DF2\u7D93\u6709\u6B63\u5728\u57F7\u884C\u7684\u5FA9\u539F\u6216\u91CD\u505A\u4F5C\u696D\uFF0C\u6240\u4EE5\u7121\u6CD5\u91CD\u505A '{0}'\u3002"]}); diff --git a/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/language/css/cssMode.js b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/language/css/cssMode.js new file mode 100644 index 0000000000..c4b71c0cd5 --- /dev/null +++ b/yudao-server/src/main/resources/admin-ui/libs/monaco-editor/vs/language/css/cssMode.js @@ -0,0 +1,7 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * monaco-css version: 3.3.0(ed57760e69ec24098de2b4e49fa5be7f48be019a) + * Released under the MIT license + * https://github.com/Microsoft/monaco-css/blob/master/LICENSE.md + *-----------------------------------------------------------------------------*/ +define("vs/language/css/workerManager",["require","exports","./fillers/monaco-editor-core"],(function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.WorkerManager=void 0;var r=function(){function e(e){var t=this;this._defaults=e,this._worker=null,this._idleCheckInterval=window.setInterval((function(){return t._checkIfIdle()}),3e4),this._lastUsedTime=0,this._configChangeListener=this._defaults.onDidChange((function(){return t._stopWorker()}))}return e.prototype._stopWorker=function(){this._worker&&(this._worker.dispose(),this._worker=null),this._client=null},e.prototype.dispose=function(){clearInterval(this._idleCheckInterval),this._configChangeListener.dispose(),this._stopWorker()},e.prototype._checkIfIdle=function(){this._worker&&(Date.now()-this._lastUsedTime>12e4&&this._stopWorker())},e.prototype._getClient=function(){return this._lastUsedTime=Date.now(),this._client||(this._worker=n.editor.createWebWorker({moduleId:"vs/language/css/cssWorker",label:this._defaults.languageId,createData:{languageSettings:this._defaults.diagnosticsOptions,languageId:this._defaults.languageId}}),this._client=this._worker.getProxy()),this._client},e.prototype.getLanguageServiceWorker=function(){for(var e,t=this,n=[],r=0;rthis.source.length)return!1;for(var t=0;t=d&&e<=p&&(this.stream.advance(t+1),this.stream.advanceWhileChar((function(e){return e>=d&&e<=p||0===t&&e===V})),!0)},e.prototype._newline=function(e){var t=this.stream.peekChar();switch(t){case _:case P:case R:return this.stream.advance(1),e.push(String.fromCharCode(t)),t===_&&this.stream.advanceIfChar(R)&&e.push("\n"),!0}return!1},e.prototype._escape=function(e,t){var n=this.stream.peekChar();if(n===F){this.stream.advance(1),n=this.stream.peekChar();for(var r=0;r<6&&(n>=d&&n<=p||n>=i&&n<=o||n>=a&&n<=l);)this.stream.advance(1),n=this.stream.peekChar(),r++;if(r>0){try{var s=parseInt(this.stream.substring(this.stream.pos()-r),16);s&&e.push(String.fromCharCode(s))}catch(e){}return n===N||n===M?this.stream.advance(1):this._newline([]),!0}if(n!==_&&n!==P&&n!==R)return this.stream.advance(1),e.push(String.fromCharCode(n)),!0;if(t)return this._newline(e)}return!1},e.prototype._stringChar=function(e,t){var n=this.stream.peekChar();return 0!==n&&n!==e&&n!==F&&n!==_&&n!==P&&n!==R&&(this.stream.advance(1),t.push(String.fromCharCode(n)),!0)},e.prototype._string=function(e){if(this.stream.peekChar()===I||this.stream.peekChar()===z){var t=this.stream.nextChar();for(e.push(String.fromCharCode(t));this._stringChar(t,e)||this._escape(e,!0););return this.stream.peekChar()===t?(this.stream.nextChar(),e.push(String.fromCharCode(t)),n.String):n.BadString}return null},e.prototype._unquotedChar=function(e){var t=this.stream.peekChar();return 0!==t&&t!==F&&t!==I&&t!==z&&t!==w&&t!==x&&t!==N&&t!==M&&t!==R&&t!==P&&t!==_&&(this.stream.advance(1),e.push(String.fromCharCode(t)),!0)},e.prototype._unquotedString=function(e){for(var t=!1;this._unquotedChar(e)||this._escape(e);)t=!0;return t},e.prototype._whitespace=function(){return this.stream.advanceWhileChar((function(e){return e===N||e===M||e===R||e===P||e===_}))>0},e.prototype._name=function(e){for(var t=!1;this._identChar(e)||this._escape(e);)t=!0;return t},e.prototype.ident=function(e){var t=this.stream.pos();if(this._minus(e)&&this._minus(e)){if(this._identFirstChar(e)||this._escape(e)){for(;this._identChar(e)||this._escape(e););return!0}}else if(this._identFirstChar(e)||this._escape(e)){for(;this._identChar(e)||this._escape(e););return!0}return this.stream.goBackTo(t),!1},e.prototype._identFirstChar=function(e){var t=this.stream.peekChar();return(t===b||t>=i&&t<=s||t>=a&&t<=c||t>=128&&t<=65535)&&(this.stream.advance(1),e.push(String.fromCharCode(t)),!0)},e.prototype._minus=function(e){var t=this.stream.peekChar();return t===g&&(this.stream.advance(1),e.push(String.fromCharCode(t)),!0)},e.prototype._identChar=function(e){var t=this.stream.peekChar();return(t===b||t===g||t>=i&&t<=s||t>=a&&t<=c||t>=d&&t<=p||t>=128&&t<=65535)&&(this.stream.advance(1),e.push(String.fromCharCode(t)),!0)},e}();t.Scanner=G})),function(e){if("object"==typeof module&&"object"==typeof module.exports){var t=e(require,exports);void 0!==t&&(module.exports=t)}else"function"==typeof define&&define.amd&&define("vscode-css-languageservice/utils/strings",["require","exports"],e)}((function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.trim=t.getLimitedString=t.difference=t.endsWith=t.startsWith=void 0,t.startsWith=function(e,t){if(e.length0?e.lastIndexOf(t)===n:0===n&&e===t},t.difference=function(e,t,n){void 0===n&&(n=4);var r=Math.abs(e.length-t.length);if(r>n)return 0;var i,o,s=[],a=[];for(i=0;ie.end?null:(e.accept((function(e){return-1===e.offset&&-1===e.length||e.offset<=t&&e.end>=t&&(n?e.length<=n.length&&(n=e):n=e,!0)})),n)}!function(e){e[e.Undefined=0]="Undefined",e[e.Identifier=1]="Identifier",e[e.Stylesheet=2]="Stylesheet",e[e.Ruleset=3]="Ruleset",e[e.Selector=4]="Selector",e[e.SimpleSelector=5]="SimpleSelector",e[e.SelectorInterpolation=6]="SelectorInterpolation",e[e.SelectorCombinator=7]="SelectorCombinator",e[e.SelectorCombinatorParent=8]="SelectorCombinatorParent",e[e.SelectorCombinatorSibling=9]="SelectorCombinatorSibling",e[e.SelectorCombinatorAllSiblings=10]="SelectorCombinatorAllSiblings",e[e.SelectorCombinatorShadowPiercingDescendant=11]="SelectorCombinatorShadowPiercingDescendant",e[e.Page=12]="Page",e[e.PageBoxMarginBox=13]="PageBoxMarginBox",e[e.ClassSelector=14]="ClassSelector",e[e.IdentifierSelector=15]="IdentifierSelector",e[e.ElementNameSelector=16]="ElementNameSelector",e[e.PseudoSelector=17]="PseudoSelector",e[e.AttributeSelector=18]="AttributeSelector",e[e.Declaration=19]="Declaration",e[e.Declarations=20]="Declarations",e[e.Property=21]="Property",e[e.Expression=22]="Expression",e[e.BinaryExpression=23]="BinaryExpression",e[e.Term=24]="Term",e[e.Operator=25]="Operator",e[e.Value=26]="Value",e[e.StringLiteral=27]="StringLiteral",e[e.URILiteral=28]="URILiteral",e[e.EscapedValue=29]="EscapedValue",e[e.Function=30]="Function",e[e.NumericValue=31]="NumericValue",e[e.HexColorValue=32]="HexColorValue",e[e.MixinDeclaration=33]="MixinDeclaration",e[e.MixinReference=34]="MixinReference",e[e.VariableName=35]="VariableName",e[e.VariableDeclaration=36]="VariableDeclaration",e[e.Prio=37]="Prio",e[e.Interpolation=38]="Interpolation",e[e.NestedProperties=39]="NestedProperties",e[e.ExtendsReference=40]="ExtendsReference",e[e.SelectorPlaceholder=41]="SelectorPlaceholder",e[e.Debug=42]="Debug",e[e.If=43]="If",e[e.Else=44]="Else",e[e.For=45]="For",e[e.Each=46]="Each",e[e.While=47]="While",e[e.MixinContentReference=48]="MixinContentReference",e[e.MixinContentDeclaration=49]="MixinContentDeclaration",e[e.Media=50]="Media",e[e.Keyframe=51]="Keyframe",e[e.FontFace=52]="FontFace",e[e.Import=53]="Import",e[e.Namespace=54]="Namespace",e[e.Invocation=55]="Invocation",e[e.FunctionDeclaration=56]="FunctionDeclaration",e[e.ReturnStatement=57]="ReturnStatement",e[e.MediaQuery=58]="MediaQuery",e[e.FunctionParameter=59]="FunctionParameter",e[e.FunctionArgument=60]="FunctionArgument",e[e.KeyframeSelector=61]="KeyframeSelector",e[e.ViewPort=62]="ViewPort",e[e.Document=63]="Document",e[e.AtApplyRule=64]="AtApplyRule",e[e.CustomPropertyDeclaration=65]="CustomPropertyDeclaration",e[e.CustomPropertySet=66]="CustomPropertySet",e[e.ListEntry=67]="ListEntry",e[e.Supports=68]="Supports",e[e.SupportsCondition=69]="SupportsCondition",e[e.NamespacePrefix=70]="NamespacePrefix",e[e.GridLine=71]="GridLine",e[e.Plugin=72]="Plugin",e[e.UnknownAtRule=73]="UnknownAtRule",e[e.Use=74]="Use",e[e.ModuleConfiguration=75]="ModuleConfiguration",e[e.Forward=76]="Forward",e[e.ForwardVisibility=77]="ForwardVisibility",e[e.Module=78]="Module"}(n=t.NodeType||(t.NodeType={})),function(e){e[e.Mixin=0]="Mixin",e[e.Rule=1]="Rule",e[e.Variable=2]="Variable",e[e.Function=3]="Function",e[e.Keyframe=4]="Keyframe",e[e.Unknown=5]="Unknown",e[e.Module=6]="Module",e[e.Forward=7]="Forward",e[e.ForwardVisibility=8]="ForwardVisibility"}(t.ReferenceType||(t.ReferenceType={})),t.getNodeAtOffset=i,t.getNodePath=function(e,t){for(var n=i(e,t),r=[];n;)r.unshift(n),n=n.parent;return r},t.getParentDeclaration=function(e){var t=e.findParent(n.Declaration),r=t&&t.getValue();return r&&r.encloses(e)?t:null};var o=function(){function e(e,t,n){void 0===e&&(e=-1),void 0===t&&(t=-1),this.parent=null,this.offset=e,this.length=t,n&&(this.nodeType=n)}return Object.defineProperty(e.prototype,"end",{get:function(){return this.offset+this.length},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"type",{get:function(){return this.nodeType||n.Undefined},set:function(e){this.nodeType=e},enumerable:!1,configurable:!0}),e.prototype.getTextProvider=function(){for(var e=this;e&&!e.textProvider;)e=e.parent;return e?e.textProvider:function(){return"unknown"}},e.prototype.getText=function(){return this.getTextProvider()(this.offset,this.length)},e.prototype.matches=function(e){return this.length===e.length&&this.getTextProvider()(this.offset,this.length)===e},e.prototype.startsWith=function(e){return this.length>=e.length&&this.getTextProvider()(this.offset,e.length)===e},e.prototype.endsWith=function(e){return this.length>=e.length&&this.getTextProvider()(this.end-e.length,e.length)===e},e.prototype.accept=function(e){if(e(this)&&this.children)for(var t=0,n=this.children;t=0&&e.parent.children.splice(n,1)}e.parent=this;var r=this.children;return r||(r=this.children=[]),-1!==t?r.splice(t,0,e):r.push(e),e},e.prototype.attachTo=function(e,t){return void 0===t&&(t=-1),e&&e.adoptChild(this,t),this},e.prototype.collectIssues=function(e){this.issues&&e.push.apply(e,this.issues)},e.prototype.addIssue=function(e){this.issues||(this.issues=[]),this.issues.push(e)},e.prototype.hasIssue=function(e){return Array.isArray(this.issues)&&this.issues.some((function(t){return t.getRule()===e}))},e.prototype.isErroneous=function(e){return void 0===e&&(e=!1),!!(this.issues&&this.issues.length>0)||e&&Array.isArray(this.children)&&this.children.some((function(e){return e.isErroneous(!0)}))},e.prototype.setNode=function(e,t,n){return void 0===n&&(n=-1),!!t&&(t.attachTo(this,n),this[e]=t,!0)},e.prototype.addChild=function(e){return!!e&&(this.children||(this.children=[]),e.attachTo(this),this.updateOffsetAndLength(e),!0)},e.prototype.updateOffsetAndLength=function(e){(e.offsetthis.end||-1===this.length)&&(this.length=t-this.offset)},e.prototype.hasChildren=function(){return!!this.children&&this.children.length>0},e.prototype.getChildren=function(){return this.children?this.children.slice(0):[]},e.prototype.getChild=function(e){return this.children&&e=0;n--)if((t=this.children[n]).offset<=e)return t;return null},e.prototype.findChildAtOffset=function(e,t){var n=this.findFirstChildBeforeOffset(e);return n&&n.end>=e?t&&n.findChildAtOffset(e,!0)||n:null},e.prototype.encloses=function(e){return this.offset<=e.offset&&this.offset+this.length>=e.offset+e.length},e.prototype.getParent=function(){for(var e=this.parent;e instanceof s;)e=e.parent;return e},e.prototype.findParent=function(e){for(var t=this;t&&t.type!==e;)t=t.parent;return t},e.prototype.findAParent=function(){for(var e=[],t=0;t/g,">")}function i(e,t){if(!e.description||""===e.description)return"";if("string"!=typeof e.description)return e.description.value;var r="";if(!1!==(null==t?void 0:t.documentation)){e.status&&(r+=n(e.status)),r+=e.description;var i=s(e.browsers);i&&(r+="\n("+i+")"),"syntax"in e&&(r+="\n\nSyntax: "+e.syntax)}return e.references&&e.references.length>0&&!1!==(null==t?void 0:t.references)&&(r.length>0&&(r+="\n\n"),r+=e.references.map((function(e){return e.name+": "+e.url})).join(" | ")),r}function o(e,t){if(!e.description||""===e.description)return"";var i="";if(!1!==(null==t?void 0:t.documentation)){e.status&&(i+=n(e.status)),i+=r("string"==typeof e.description?e.description:e.description.value);var o=s(e.browsers);o&&(i+="\n\n("+r(o)+")"),"syntax"in e&&e.syntax&&(i+="\n\nSyntax: "+r(e.syntax))}return e.references&&e.references.length>0&&!1!==(null==t?void 0:t.references)&&(i.length>0&&(i+="\n\n"),i+=e.references.map((function(e){return"["+e.name+"]("+e.url+")"})).join(" | ")),i}function s(e){return void 0===e&&(e=[]),0===e.length?null:e.map((function(e){var n="",r=e.match(/([A-Z]+)(\d+)?/),i=r[1],o=r[2];return i in t.browserNames&&(n+=t.browserNames[i]),o&&(n+=" "+o),n})).join(", ")}Object.defineProperty(t,"__esModule",{value:!0}),t.getBrowserLabel=t.textToMarkedString=t.getEntryDescription=t.browserNames=void 0,t.browserNames={E:"Edge",FF:"Firefox",S:"Safari",C:"Chrome",IE:"IE",O:"Opera"},t.getEntryDescription=function(e,t,n){var r;if(""!==(r=t?{kind:"markdown",value:o(e,n)}:{kind:"plaintext",value:i(e,n)}).value)return r},t.textToMarkedString=r,t.getBrowserLabel=s})),function(e){if("object"==typeof module&&"object"==typeof module.exports){var t=e(require,exports);void 0!==t&&(module.exports=t)}else"function"==typeof define&&define.amd&&define("vscode-css-languageservice/languageFacts/colors",["require","exports","../parser/cssNodes","vscode-nls"],e)}((function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getColorValue=t.hslFromColor=t.colorFromHSL=t.colorFrom256RGB=t.colorFromHex=t.hexDigit=t.isColorValue=t.isColorConstructor=t.colorKeywords=t.colors=t.colorFunctions=void 0;var n=e("../parser/cssNodes"),r=e("vscode-nls").loadMessageBundle();function i(e,t){var n=e.getText().match(/^([-+]?[0-9]*\.?[0-9]+)(%?)$/);if(n){n[2]&&(t=100);var r=parseFloat(n[1])/t;if(r>=0&&r<=1)return r}throw new Error}function o(e){var t=e.getName();return!!t&&/^(rgb|rgba|hsl|hsla)$/gi.test(t)}t.colorFunctions=[{func:"rgb($red, $green, $blue)",desc:r("css.builtin.rgb","Creates a Color from red, green, and blue values.")},{func:"rgba($red, $green, $blue, $alpha)",desc:r("css.builtin.rgba","Creates a Color from red, green, blue, and alpha values.")},{func:"hsl($hue, $saturation, $lightness)",desc:r("css.builtin.hsl","Creates a Color from hue, saturation, and lightness values.")},{func:"hsla($hue, $saturation, $lightness, $alpha)",desc:r("css.builtin.hsla","Creates a Color from hue, saturation, lightness, and alpha values.")}],t.colors={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgrey:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",grey:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rebeccapurple:"#663399",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},t.colorKeywords={currentColor:"The value of the 'color' property. The computed value of the 'currentColor' keyword is the computed value of the 'color' property. If the 'currentColor' keyword is set on the 'color' property itself, it is treated as 'color:inherit' at parse time.",transparent:"Fully transparent. This keyword can be considered a shorthand for rgba(0,0,0,0) which is its computed value."},t.isColorConstructor=o,t.isColorValue=function(e){if(e.type===n.NodeType.HexColorValue)return!0;if(e.type===n.NodeType.Function)return o(e);if(e.type===n.NodeType.Identifier){if(e.parent&&e.parent.type!==n.NodeType.Term)return!1;var r=e.getText().toLowerCase();if("none"===r)return!1;if(t.colors[r])return!0}return!1};function s(e){return e<48?0:e<=57?e-48:(e<97&&(e+=32),e>=97&&e<=102?e-97+10:0)}function a(e){if("#"!==e[0])return null;switch(e.length){case 4:return{red:17*s(e.charCodeAt(1))/255,green:17*s(e.charCodeAt(2))/255,blue:17*s(e.charCodeAt(3))/255,alpha:1};case 5:return{red:17*s(e.charCodeAt(1))/255,green:17*s(e.charCodeAt(2))/255,blue:17*s(e.charCodeAt(3))/255,alpha:17*s(e.charCodeAt(4))/255};case 7:return{red:(16*s(e.charCodeAt(1))+s(e.charCodeAt(2)))/255,green:(16*s(e.charCodeAt(3))+s(e.charCodeAt(4)))/255,blue:(16*s(e.charCodeAt(5))+s(e.charCodeAt(6)))/255,alpha:1};case 9:return{red:(16*s(e.charCodeAt(1))+s(e.charCodeAt(2)))/255,green:(16*s(e.charCodeAt(3))+s(e.charCodeAt(4)))/255,blue:(16*s(e.charCodeAt(5))+s(e.charCodeAt(6)))/255,alpha:(16*s(e.charCodeAt(7))+s(e.charCodeAt(8)))/255}}return null}function l(e,t,n,r){if(void 0===r&&(r=1),0===t)return{red:n,green:n,blue:n,alpha:r};var i=function(e,t,n){for(;n<0;)n+=6;for(;n>=6;)n-=6;return n<1?(t-e)*n+e:n<3?t:n<4?(t-e)*(4-n)+e:e},o=n<=.5?n*(t+1):n+t-n*t,s=2*n-o;return{red:i(s,o,(e/=60)+2),green:i(s,o,e),blue:i(s,o,e-2),alpha:r}}t.hexDigit=s,t.colorFromHex=a,t.colorFrom256RGB=function(e,t,n,r){return void 0===r&&(r=1),{red:e/255,green:t/255,blue:n/255,alpha:r}},t.colorFromHSL=l,t.hslFromColor=function(e){var t=e.red,n=e.green,r=e.blue,i=e.alpha,o=Math.max(t,n,r),s=Math.min(t,n,r),a=0,l=0,c=(s+o)/2,d=o-s;if(d>0){switch(l=Math.min(c<=.5?d/(2*c):d/(2-2*c),1),o){case t:a=(n-r)/d+(n4)return null;try{var c=4===s.length?i(s[3],1):1;if("rgb"===o||"rgba"===o)return{red:i(s[0],255),green:i(s[1],255),blue:i(s[2],255),alpha:c};if("hsl"===o||"hsla"===o)return l(function(e){var t=e.getText();if(t.match(/^([-+]?[0-9]*\.?[0-9]+)(deg)?$/))return parseFloat(t)%360;throw new Error}(s[0]),i(s[1],100),i(s[2],100),c)}catch(e){return null}}else if(e.type===n.NodeType.Identifier){if(e.parent&&e.parent.type!==n.NodeType.Term)return null;var d=e.parent;if(d&&d.parent&&d.parent.type===n.NodeType.BinaryExpression){var p=d.parent;if(p.parent&&p.parent.type===n.NodeType.ListEntry&&p.parent.key===p)return null}var h=e.getText().toLowerCase();if("none"===h)return null;var u=t.colors[h];if(u)return a(u)}return null}})),function(e){if("object"==typeof module&&"object"==typeof module.exports){var t=e(require,exports);void 0!==t&&(module.exports=t)}else"function"==typeof define&&define.amd&&define("vscode-css-languageservice/languageFacts/builtinData",["require","exports"],e)}((function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.pageBoxDirectives=t.svgElements=t.html5Tags=t.units=t.basicShapeFunctions=t.transitionTimingFunctions=t.imageFunctions=t.cssWideKeywords=t.geometryBoxKeywords=t.boxKeywords=t.lineWidthKeywords=t.lineStyleKeywords=t.repeatStyleKeywords=t.positionKeywords=void 0,t.positionKeywords={bottom:"Computes to ‘100%’ for the vertical position if one or two values are given, otherwise specifies the bottom edge as the origin for the next offset.",center:"Computes to ‘50%’ (‘left 50%’) for the horizontal position if the horizontal position is not otherwise specified, or ‘50%’ (‘top 50%’) for the vertical position if it is.",left:"Computes to ‘0%’ for the horizontal position if one or two values are given, otherwise specifies the left edge as the origin for the next offset.",right:"Computes to ‘100%’ for the horizontal position if one or two values are given, otherwise specifies the right edge as the origin for the next offset.",top:"Computes to ‘0%’ for the vertical position if one or two values are given, otherwise specifies the top edge as the origin for the next offset."},t.repeatStyleKeywords={"no-repeat":"Placed once and not repeated in this direction.",repeat:"Repeated in this direction as often as needed to cover the background painting area.","repeat-x":"Computes to ‘repeat no-repeat’.","repeat-y":"Computes to ‘no-repeat repeat’.",round:"Repeated as often as will fit within the background positioning area. If it doesn’t fit a whole number of times, it is rescaled so that it does.",space:"Repeated as often as will fit within the background positioning area without being clipped and then the images are spaced out to fill the area."},t.lineStyleKeywords={dashed:"A series of square-ended dashes.",dotted:"A series of round dots.",double:"Two parallel solid lines with some space between them.",groove:"Looks as if it were carved in the canvas.",hidden:"Same as ‘none’, but has different behavior in the border conflict resolution rules for border-collapsed tables.",inset:"Looks as if the content on the inside of the border is sunken into the canvas.",none:"No border. Color and width are ignored.",outset:"Looks as if the content on the inside of the border is coming out of the canvas.",ridge:"Looks as if it were coming out of the canvas.",solid:"A single line segment."},t.lineWidthKeywords=["medium","thick","thin"],t.boxKeywords={"border-box":"The background is painted within (clipped to) the border box.","content-box":"The background is painted within (clipped to) the content box.","padding-box":"The background is painted within (clipped to) the padding box."},t.geometryBoxKeywords={"margin-box":"Uses the margin box as reference box.","fill-box":"Uses the object bounding box as reference box.","stroke-box":"Uses the stroke bounding box as reference box.","view-box":"Uses the nearest SVG viewport as reference box."},t.cssWideKeywords={initial:"Represents the value specified as the property’s initial value.",inherit:"Represents the computed value of the property on the element’s parent.",unset:"Acts as either `inherit` or `initial`, depending on whether the property is inherited or not."},t.imageFunctions={"url()":"Reference an image file by URL","image()":"Provide image fallbacks and annotations.","-webkit-image-set()":"Provide multiple resolutions. Remember to use unprefixed image-set() in addition.","image-set()":"Provide multiple resolutions of an image and const the UA decide which is most appropriate in a given situation.","-moz-element()":"Use an element in the document as an image. Remember to use unprefixed element() in addition.","element()":"Use an element in the document as an image.","cross-fade()":"Indicates the two images to be combined and how far along in the transition the combination is.","-webkit-gradient()":"Deprecated. Use modern linear-gradient() or radial-gradient() instead.","-webkit-linear-gradient()":"Linear gradient. Remember to use unprefixed version in addition.","-moz-linear-gradient()":"Linear gradient. Remember to use unprefixed version in addition.","-o-linear-gradient()":"Linear gradient. Remember to use unprefixed version in addition.","linear-gradient()":"A linear gradient is created by specifying a straight gradient line, and then several colors placed along that line.","-webkit-repeating-linear-gradient()":"Repeating Linear gradient. Remember to use unprefixed version in addition.","-moz-repeating-linear-gradient()":"Repeating Linear gradient. Remember to use unprefixed version in addition.","-o-repeating-linear-gradient()":"Repeating Linear gradient. Remember to use unprefixed version in addition.","repeating-linear-gradient()":"Same as linear-gradient, except the color-stops are repeated infinitely in both directions, with their positions shifted by multiples of the difference between the last specified color-stop’s position and the first specified color-stop’s position.","-webkit-radial-gradient()":"Radial gradient. Remember to use unprefixed version in addition.","-moz-radial-gradient()":"Radial gradient. Remember to use unprefixed version in addition.","radial-gradient()":"Colors emerge from a single point and smoothly spread outward in a circular or elliptical shape.","-webkit-repeating-radial-gradient()":"Repeating radial gradient. Remember to use unprefixed version in addition.","-moz-repeating-radial-gradient()":"Repeating radial gradient. Remember to use unprefixed version in addition.","repeating-radial-gradient()":"Same as radial-gradient, except the color-stops are repeated infinitely in both directions, with their positions shifted by multiples of the difference between the last specified color-stop’s position and the first specified color-stop’s position."},t.transitionTimingFunctions={ease:"Equivalent to cubic-bezier(0.25, 0.1, 0.25, 1.0).","ease-in":"Equivalent to cubic-bezier(0.42, 0, 1.0, 1.0).","ease-in-out":"Equivalent to cubic-bezier(0.42, 0, 0.58, 1.0).","ease-out":"Equivalent to cubic-bezier(0, 0, 0.58, 1.0).",linear:"Equivalent to cubic-bezier(0.0, 0.0, 1.0, 1.0).","step-end":"Equivalent to steps(1, end).","step-start":"Equivalent to steps(1, start).","steps()":"The first parameter specifies the number of intervals in the function. The second parameter, which is optional, is either the value “start†or “endâ€.","cubic-bezier()":"Specifies a cubic-bezier curve. The four values specify points P1 and P2 of the curve as (x1, y1, x2, y2).","cubic-bezier(0.6, -0.28, 0.735, 0.045)":"Ease-in Back. Overshoots.","cubic-bezier(0.68, -0.55, 0.265, 1.55)":"Ease-in-out Back. Overshoots.","cubic-bezier(0.175, 0.885, 0.32, 1.275)":"Ease-out Back. Overshoots.","cubic-bezier(0.6, 0.04, 0.98, 0.335)":"Ease-in Circular. Based on half circle.","cubic-bezier(0.785, 0.135, 0.15, 0.86)":"Ease-in-out Circular. Based on half circle.","cubic-bezier(0.075, 0.82, 0.165, 1)":"Ease-out Circular. Based on half circle.","cubic-bezier(0.55, 0.055, 0.675, 0.19)":"Ease-in Cubic. Based on power of three.","cubic-bezier(0.645, 0.045, 0.355, 1)":"Ease-in-out Cubic. Based on power of three.","cubic-bezier(0.215, 0.610, 0.355, 1)":"Ease-out Cubic. Based on power of three.","cubic-bezier(0.95, 0.05, 0.795, 0.035)":"Ease-in Exponential. Based on two to the power ten.","cubic-bezier(1, 0, 0, 1)":"Ease-in-out Exponential. Based on two to the power ten.","cubic-bezier(0.19, 1, 0.22, 1)":"Ease-out Exponential. Based on two to the power ten.","cubic-bezier(0.47, 0, 0.745, 0.715)":"Ease-in Sine.","cubic-bezier(0.445, 0.05, 0.55, 0.95)":"Ease-in-out Sine.","cubic-bezier(0.39, 0.575, 0.565, 1)":"Ease-out Sine.","cubic-bezier(0.55, 0.085, 0.68, 0.53)":"Ease-in Quadratic. Based on power of two.","cubic-bezier(0.455, 0.03, 0.515, 0.955)":"Ease-in-out Quadratic. Based on power of two.","cubic-bezier(0.25, 0.46, 0.45, 0.94)":"Ease-out Quadratic. Based on power of two.","cubic-bezier(0.895, 0.03, 0.685, 0.22)":"Ease-in Quartic. Based on power of four.","cubic-bezier(0.77, 0, 0.175, 1)":"Ease-in-out Quartic. Based on power of four.","cubic-bezier(0.165, 0.84, 0.44, 1)":"Ease-out Quartic. Based on power of four.","cubic-bezier(0.755, 0.05, 0.855, 0.06)":"Ease-in Quintic. Based on power of five.","cubic-bezier(0.86, 0, 0.07, 1)":"Ease-in-out Quintic. Based on power of five.","cubic-bezier(0.23, 1, 0.320, 1)":"Ease-out Quintic. Based on power of five."},t.basicShapeFunctions={"circle()":"Defines a circle.","ellipse()":"Defines an ellipse.","inset()":"Defines an inset rectangle.","polygon()":"Defines a polygon."},t.units={length:["em","rem","ex","px","cm","mm","in","pt","pc","ch","vw","vh","vmin","vmax"],angle:["deg","rad","grad","turn"],time:["ms","s"],frequency:["Hz","kHz"],resolution:["dpi","dpcm","dppx"],percentage:["%","fr"]},t.html5Tags=["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rb","rp","rt","rtc","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","title","tr","track","u","ul","const","video","wbr"],t.svgElements=["circle","clipPath","cursor","defs","desc","ellipse","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","foreignObject","g","hatch","hatchpath","image","line","linearGradient","marker","mask","mesh","meshpatch","meshrow","metadata","mpath","path","pattern","polygon","polyline","radialGradient","rect","set","solidcolor","stop","svg","switch","symbol","text","textPath","tspan","use","view"],t.pageBoxDirectives=["@bottom-center","@bottom-left","@bottom-left-corner","@bottom-right","@bottom-right-corner","@left-bottom","@left-middle","@left-top","@right-bottom","@right-middle","@right-top","@top-center","@top-left","@top-left-corner","@top-right","@top-right-corner"]}));var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),__exportStar=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||__createBinding(t,e,n)};!function(e){if("object"==typeof module&&"object"==typeof module.exports){var t=e(require,exports);void 0!==t&&(module.exports=t)}else"function"==typeof define&&define.amd&&define("vscode-css-languageservice/languageFacts/facts",["require","exports","./entry","./colors","./builtinData"],e)}((function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),__exportStar(e("./entry"),t),__exportStar(e("./colors"),t),__exportStar(e("./builtinData"),t)})),function(e){if("object"==typeof module&&"object"==typeof module.exports){var t=e(require,exports);void 0!==t&&(module.exports=t)}else"function"==typeof define&&define.amd&&define("vscode-css-languageservice/utils/objects",["require","exports"],e)}((function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isDefined=t.values=void 0,t.values=function(e){return Object.keys(e).map((function(t){return e[t]}))},t.isDefined=function(e){return void 0!==e}})),function(e){if("object"==typeof module&&"object"==typeof module.exports){var t=e(require,exports);void 0!==t&&(module.exports=t)}else"function"==typeof define&&define.amd&&define("vscode-css-languageservice/parser/cssParser",["require","exports","./cssScanner","./cssNodes","./cssErrors","../languageFacts/facts","../utils/objects"],e)}((function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Parser=void 0;var n=e("./cssScanner"),r=e("./cssNodes"),i=e("./cssErrors"),o=e("../languageFacts/facts"),s=e("../utils/objects"),a=function(){function e(e){void 0===e&&(e=new n.Scanner),this.keyframeRegex=/^@(\-(webkit|ms|moz|o)\-)?keyframes$/i,this.scanner=e,this.token={type:n.TokenType.EOF,offset:-1,len:0,text:""},this.prevToken=void 0}return e.prototype.peekIdent=function(e){return n.TokenType.Ident===this.token.type&&e.length===this.token.text.length&&e===this.token.text.toLowerCase()},e.prototype.peekKeyword=function(e){return n.TokenType.AtKeyword===this.token.type&&e.length===this.token.text.length&&e===this.token.text.toLowerCase()},e.prototype.peekDelim=function(e){return n.TokenType.Delim===this.token.type&&e===this.token.text},e.prototype.peek=function(e){return e===this.token.type},e.prototype.peekOne=function(e){return-1!==e.indexOf(this.token.type)},e.prototype.peekRegExp=function(e,t){return e===this.token.type&&t.test(this.token.text)},e.prototype.hasWhitespace=function(){return!!this.prevToken&&this.prevToken.offset+this.prevToken.len!==this.token.offset},e.prototype.consumeToken=function(){this.prevToken=this.token,this.token=this.scanner.scan()},e.prototype.mark=function(){return{prev:this.prevToken,curr:this.token,pos:this.scanner.pos()}},e.prototype.restoreAtMark=function(e){this.prevToken=e.prev,this.token=e.curr,this.scanner.goBackTo(e.pos)},e.prototype.try=function(e){var t=this.mark(),n=e();return n||(this.restoreAtMark(t),null)},e.prototype.acceptOneKeyword=function(e){if(n.TokenType.AtKeyword===this.token.type)for(var t=0,r=e;te.offset?o-e.offset:0}return e},e.prototype.markError=function(e,t,n,i){this.token!==this.lastErrorToken&&(e.addIssue(new r.Marker(e,t,r.Level.Error,void 0,this.token.offset,this.token.len)),this.lastErrorToken=this.token),(n||i)&&this.resync(n,i)},e.prototype.parseStylesheet=function(e){var t=e.version,n=e.getText();return this.internalParse(n,this._parseStylesheet,(function(r,i){if(e.version!==t)throw new Error("Underlying model has changed, AST is no longer valid");return n.substr(r,i)}))},e.prototype.internalParse=function(e,t,n){this.scanner.setSource(e),this.token=this.scanner.scan();var r=t.bind(this)();return r&&(r.textProvider=n||function(t,n){return e.substr(t,n)}),r},e.prototype._parseStylesheet=function(){for(var e=this.create(r.Stylesheet);e.addChild(this._parseStylesheetStart()););var t=!1;do{var o=!1;do{o=!1;var s=this._parseStylesheetStatement();for(s&&(e.addChild(s),o=!0,t=!1,this.peek(n.TokenType.EOF)||!this._needsSemicolonAfter(s)||this.accept(n.TokenType.SemiColon)||this.markError(e,i.ParseError.SemiColonExpected));this.accept(n.TokenType.SemiColon)||this.accept(n.TokenType.CDO)||this.accept(n.TokenType.CDC);)o=!0,t=!1}while(o);if(this.peek(n.TokenType.EOF))break;t||(this.peek(n.TokenType.AtKeyword)?this.markError(e,i.ParseError.UnknownAtRule):this.markError(e,i.ParseError.RuleOrSelectorExpected),t=!0),this.consumeToken()}while(!this.peek(n.TokenType.EOF));return this.finish(e)},e.prototype._parseStylesheetStart=function(){return this._parseCharset()},e.prototype._parseStylesheetStatement=function(e){return void 0===e&&(e=!1),this.peek(n.TokenType.AtKeyword)?this._parseStylesheetAtStatement(e):this._parseRuleset(e)},e.prototype._parseStylesheetAtStatement=function(e){return void 0===e&&(e=!1),this._parseImport()||this._parseMedia(e)||this._parsePage()||this._parseFontFace()||this._parseKeyframe()||this._parseSupports(e)||this._parseViewPort()||this._parseNamespace()||this._parseDocument()||this._parseUnknownAtRule()},e.prototype._tryParseRuleset=function(e){var t=this.mark();if(this._parseSelector(e)){for(;this.accept(n.TokenType.Comma)&&this._parseSelector(e););if(this.accept(n.TokenType.CurlyL))return this.restoreAtMark(t),this._parseRuleset(e)}return this.restoreAtMark(t),null},e.prototype._parseRuleset=function(e){void 0===e&&(e=!1);var t=this.create(r.RuleSet),o=t.getSelectors();if(!o.addChild(this._parseSelector(e)))return null;for(;this.accept(n.TokenType.Comma);)if(!o.addChild(this._parseSelector(e)))return this.finish(t,i.ParseError.SelectorExpected);return this._parseBody(t,this._parseRuleSetDeclaration.bind(this))},e.prototype._parseRuleSetDeclarationAtStatement=function(){return this._parseAtApply()||this._parseUnknownAtRule()},e.prototype._parseRuleSetDeclaration=function(){return this.peek(n.TokenType.AtKeyword)?this._parseRuleSetDeclarationAtStatement():this._parseDeclaration()},e.prototype._parseAtApply=function(){if(!this.peekKeyword("@apply"))return null;var e=this.create(r.AtApplyRule);return this.consumeToken(),e.setIdentifier(this._parseIdent([r.ReferenceType.Variable]))?this.finish(e):this.finish(e,i.ParseError.IdentifierExpected)},e.prototype._needsSemicolonAfter=function(e){switch(e.type){case r.NodeType.Keyframe:case r.NodeType.ViewPort:case r.NodeType.Media:case r.NodeType.Ruleset:case r.NodeType.Namespace:case r.NodeType.If:case r.NodeType.For:case r.NodeType.Each:case r.NodeType.While:case r.NodeType.MixinDeclaration:case r.NodeType.FunctionDeclaration:case r.NodeType.MixinContentDeclaration:return!1;case r.NodeType.ExtendsReference:case r.NodeType.MixinContentReference:case r.NodeType.ReturnStatement:case r.NodeType.MediaQuery:case r.NodeType.Debug:case r.NodeType.Import:case r.NodeType.AtApplyRule:case r.NodeType.CustomPropertyDeclaration:return!0;case r.NodeType.VariableDeclaration:return e.needsSemicolon;case r.NodeType.MixinReference:return!e.getContent();case r.NodeType.Declaration:return!e.getNestedProperties()}return!1},e.prototype._parseDeclarations=function(e){var t=this.create(r.Declarations);if(!this.accept(n.TokenType.CurlyL))return null;for(var o=e();t.addChild(o)&&!this.peek(n.TokenType.CurlyR);){if(this._needsSemicolonAfter(o)&&!this.accept(n.TokenType.SemiColon))return this.finish(t,i.ParseError.SemiColonExpected,[n.TokenType.SemiColon,n.TokenType.CurlyR]);for(o&&this.prevToken&&this.prevToken.type===n.TokenType.SemiColon&&(o.semicolonPosition=this.prevToken.offset);this.accept(n.TokenType.SemiColon););o=e()}return this.accept(n.TokenType.CurlyR)?this.finish(t):this.finish(t,i.ParseError.RightCurlyExpected,[n.TokenType.CurlyR,n.TokenType.SemiColon])},e.prototype._parseBody=function(e,t){return e.setDeclarations(this._parseDeclarations(t))?this.finish(e):this.finish(e,i.ParseError.LeftCurlyExpected,[n.TokenType.CurlyR,n.TokenType.SemiColon])},e.prototype._parseSelector=function(e){var t=this.create(r.Selector),n=!1;for(e&&(n=t.addChild(this._parseCombinator()));t.addChild(this._parseSimpleSelector());)n=!0,t.addChild(this._parseCombinator());return n?this.finish(t):null},e.prototype._parseDeclaration=function(e){var t=this._tryParseCustomPropertyDeclaration(e);if(t)return t;var o=this.create(r.Declaration);return o.setProperty(this._parseProperty())?this.accept(n.TokenType.Colon)?(this.prevToken&&(o.colonPosition=this.prevToken.offset),o.setValue(this._parseExpr())?(o.addChild(this._parsePrio()),this.peek(n.TokenType.SemiColon)&&(o.semicolonPosition=this.token.offset),this.finish(o)):this.finish(o,i.ParseError.PropertyValueExpected)):this.finish(o,i.ParseError.ColonExpected,[n.TokenType.Colon],e||[n.TokenType.SemiColon]):null},e.prototype._tryParseCustomPropertyDeclaration=function(e){if(!this.peekRegExp(n.TokenType.Ident,/^--/))return null;var t=this.create(r.CustomPropertyDeclaration);if(!t.setProperty(this._parseProperty()))return null;if(!this.accept(n.TokenType.Colon))return this.finish(t,i.ParseError.ColonExpected,[n.TokenType.Colon]);this.prevToken&&(t.colonPosition=this.prevToken.offset);var o=this.mark();if(this.peek(n.TokenType.CurlyL)){var a=this.create(r.CustomPropertySet),l=this._parseDeclarations(this._parseRuleSetDeclaration.bind(this));if(a.setDeclarations(l)&&!l.isErroneous(!0)&&(a.addChild(this._parsePrio()),this.peek(n.TokenType.SemiColon)))return this.finish(a),t.setPropertySet(a),t.semicolonPosition=this.token.offset,this.finish(t);this.restoreAtMark(o)}var c=this._parseExpr();return c&&!c.isErroneous(!0)&&(this._parsePrio(),this.peekOne(e||[n.TokenType.SemiColon]))?(t.setValue(c),t.semicolonPosition=this.token.offset,this.finish(t)):(this.restoreAtMark(o),t.addChild(this._parseCustomPropertyValue(e)),t.addChild(this._parsePrio()),s.isDefined(t.colonPosition)&&this.token.offset===t.colonPosition+1?this.finish(t,i.ParseError.PropertyValueExpected):this.finish(t))},e.prototype._parseCustomPropertyValue=function(e){var t=this;void 0===e&&(e=[n.TokenType.CurlyR]);var o=this.create(r.Node),s=function(){return 0===l&&0===c&&0===d},a=function(){return-1!==e.indexOf(t.token.type)},l=0,c=0,d=0;e:for(;;){switch(this.token.type){case n.TokenType.SemiColon:case n.TokenType.Exclamation:if(s())break e;break;case n.TokenType.CurlyL:l++;break;case n.TokenType.CurlyR:if(--l<0){if(a()&&0===c&&0===d)break e;return this.finish(o,i.ParseError.LeftCurlyExpected)}break;case n.TokenType.ParenthesisL:c++;break;case n.TokenType.ParenthesisR:if(--c<0){if(a()&&0===d&&0===l)break e;return this.finish(o,i.ParseError.LeftParenthesisExpected)}break;case n.TokenType.BracketL:d++;break;case n.TokenType.BracketR:if(--d<0)return this.finish(o,i.ParseError.LeftSquareBracketExpected);break;case n.TokenType.BadString:break e;case n.TokenType.EOF:var p=i.ParseError.RightCurlyExpected;return d>0?p=i.ParseError.RightSquareBracketExpected:c>0&&(p=i.ParseError.RightParenthesisExpected),this.finish(o,p)}this.consumeToken()}return this.finish(o)},e.prototype._tryToParseDeclaration=function(e){var t=this.mark();return this._parseProperty()&&this.accept(n.TokenType.Colon)?(this.restoreAtMark(t),this._parseDeclaration(e)):(this.restoreAtMark(t),null)},e.prototype._parseProperty=function(){var e=this.create(r.Property),t=this.mark();return(this.acceptDelim("*")||this.acceptDelim("_"))&&this.hasWhitespace()?(this.restoreAtMark(t),null):e.setIdentifier(this._parsePropertyIdentifier())?this.finish(e):null},e.prototype._parsePropertyIdentifier=function(){return this._parseIdent()},e.prototype._parseCharset=function(){if(!this.peek(n.TokenType.Charset))return null;var e=this.create(r.Node);return this.consumeToken(),this.accept(n.TokenType.String)?this.accept(n.TokenType.SemiColon)?this.finish(e):this.finish(e,i.ParseError.SemiColonExpected):this.finish(e,i.ParseError.IdentifierExpected)},e.prototype._parseImport=function(){if(!this.peekKeyword("@import"))return null;var e=this.create(r.Import);return this.consumeToken(),e.addChild(this._parseURILiteral())||e.addChild(this._parseStringLiteral())?(this.peek(n.TokenType.SemiColon)||this.peek(n.TokenType.EOF)||e.setMedialist(this._parseMediaQueryList()),this.finish(e)):this.finish(e,i.ParseError.URIOrStringExpected)},e.prototype._parseNamespace=function(){if(!this.peekKeyword("@namespace"))return null;var e=this.create(r.Namespace);return this.consumeToken(),e.addChild(this._parseURILiteral())||(e.addChild(this._parseIdent()),e.addChild(this._parseURILiteral())||e.addChild(this._parseStringLiteral()))?this.accept(n.TokenType.SemiColon)?this.finish(e):this.finish(e,i.ParseError.SemiColonExpected):this.finish(e,i.ParseError.URIExpected,[n.TokenType.SemiColon])},e.prototype._parseFontFace=function(){if(!this.peekKeyword("@font-face"))return null;var e=this.create(r.FontFace);return this.consumeToken(),this._parseBody(e,this._parseRuleSetDeclaration.bind(this))},e.prototype._parseViewPort=function(){if(!this.peekKeyword("@-ms-viewport")&&!this.peekKeyword("@-o-viewport")&&!this.peekKeyword("@viewport"))return null;var e=this.create(r.ViewPort);return this.consumeToken(),this._parseBody(e,this._parseRuleSetDeclaration.bind(this))},e.prototype._parseKeyframe=function(){if(!this.peekRegExp(n.TokenType.AtKeyword,this.keyframeRegex))return null;var e=this.create(r.Keyframe),t=this.create(r.Node);return this.consumeToken(),e.setKeyword(this.finish(t)),t.matches("@-ms-keyframes")&&this.markError(t,i.ParseError.UnknownKeyword),e.setIdentifier(this._parseKeyframeIdent())?this._parseBody(e,this._parseKeyframeSelector.bind(this)):this.finish(e,i.ParseError.IdentifierExpected,[n.TokenType.CurlyR])},e.prototype._parseKeyframeIdent=function(){return this._parseIdent([r.ReferenceType.Keyframe])},e.prototype._parseKeyframeSelector=function(){var e=this.create(r.KeyframeSelector);if(!e.addChild(this._parseIdent())&&!this.accept(n.TokenType.Percentage))return null;for(;this.accept(n.TokenType.Comma);)if(!e.addChild(this._parseIdent())&&!this.accept(n.TokenType.Percentage))return this.finish(e,i.ParseError.PercentageExpected);return this._parseBody(e,this._parseRuleSetDeclaration.bind(this))},e.prototype._tryParseKeyframeSelector=function(){var e=this.create(r.KeyframeSelector),t=this.mark();if(!e.addChild(this._parseIdent())&&!this.accept(n.TokenType.Percentage))return null;for(;this.accept(n.TokenType.Comma);)if(!e.addChild(this._parseIdent())&&!this.accept(n.TokenType.Percentage))return this.restoreAtMark(t),null;return this.peek(n.TokenType.CurlyL)?this._parseBody(e,this._parseRuleSetDeclaration.bind(this)):(this.restoreAtMark(t),null)},e.prototype._parseSupports=function(e){if(void 0===e&&(e=!1),!this.peekKeyword("@supports"))return null;var t=this.create(r.Supports);return this.consumeToken(),t.addChild(this._parseSupportsCondition()),this._parseBody(t,this._parseSupportsDeclaration.bind(this,e))},e.prototype._parseSupportsDeclaration=function(e){return void 0===e&&(e=!1),e?this._tryParseRuleset(!0)||this._tryToParseDeclaration()||this._parseStylesheetStatement(!0):this._parseStylesheetStatement(!1)},e.prototype._parseSupportsCondition=function(){var e=this.create(r.SupportsCondition);if(this.acceptIdent("not"))e.addChild(this._parseSupportsConditionInParens());else if(e.addChild(this._parseSupportsConditionInParens()),this.peekRegExp(n.TokenType.Ident,/^(and|or)$/i))for(var t=this.token.text.toLowerCase();this.acceptIdent(t);)e.addChild(this._parseSupportsConditionInParens());return this.finish(e)},e.prototype._parseSupportsConditionInParens=function(){var e=this.create(r.SupportsCondition);if(this.accept(n.TokenType.ParenthesisL))return this.prevToken&&(e.lParent=this.prevToken.offset),e.addChild(this._tryToParseDeclaration([n.TokenType.ParenthesisR]))||this._parseSupportsCondition()?this.accept(n.TokenType.ParenthesisR)?(this.prevToken&&(e.rParent=this.prevToken.offset),this.finish(e)):this.finish(e,i.ParseError.RightParenthesisExpected,[n.TokenType.ParenthesisR],[]):this.finish(e,i.ParseError.ConditionExpected);if(this.peek(n.TokenType.Ident)){var t=this.mark();if(this.consumeToken(),!this.hasWhitespace()&&this.accept(n.TokenType.ParenthesisL)){for(var o=1;this.token.type!==n.TokenType.EOF&&0!==o;)this.token.type===n.TokenType.ParenthesisL?o++:this.token.type===n.TokenType.ParenthesisR&&o--,this.consumeToken();return this.finish(e)}this.restoreAtMark(t)}return this.finish(e,i.ParseError.LeftParenthesisExpected,[],[n.TokenType.ParenthesisL])},e.prototype._parseMediaDeclaration=function(e){return void 0===e&&(e=!1),e?this._tryParseRuleset(!0)||this._tryToParseDeclaration()||this._parseStylesheetStatement(!0):this._parseStylesheetStatement(!1)},e.prototype._parseMedia=function(e){if(void 0===e&&(e=!1),!this.peekKeyword("@media"))return null;var t=this.create(r.Media);return this.consumeToken(),t.addChild(this._parseMediaQueryList())?this._parseBody(t,this._parseMediaDeclaration.bind(this,e)):this.finish(t,i.ParseError.MediaQueryExpected)},e.prototype._parseMediaQueryList=function(){var e=this.create(r.Medialist);if(!e.addChild(this._parseMediaQuery([n.TokenType.CurlyL])))return this.finish(e,i.ParseError.MediaQueryExpected);for(;this.accept(n.TokenType.Comma);)if(!e.addChild(this._parseMediaQuery([n.TokenType.CurlyL])))return this.finish(e,i.ParseError.MediaQueryExpected);return this.finish(e)},e.prototype._parseMediaQuery=function(e){var t=this.create(r.MediaQuery),o=!0,s=!1;if(!this.peek(n.TokenType.ParenthesisL)){if(this.acceptIdent("only")||this.acceptIdent("not"),!t.addChild(this._parseIdent()))return null;s=!0,o=this.acceptIdent("and")}for(;o;)if(t.addChild(this._parseMediaContentStart()))o=this.acceptIdent("and");else{if(!this.accept(n.TokenType.ParenthesisL))return s?this.finish(t,i.ParseError.LeftParenthesisExpected,[],e):null;if(!t.addChild(this._parseMediaFeatureName()))return this.finish(t,i.ParseError.IdentifierExpected,[],e);if(this.accept(n.TokenType.Colon)&&!t.addChild(this._parseExpr()))return this.finish(t,i.ParseError.TermExpected,[],e);if(!this.accept(n.TokenType.ParenthesisR))return this.finish(t,i.ParseError.RightParenthesisExpected,[],e);o=this.acceptIdent("and")}return this.finish(t)},e.prototype._parseMediaContentStart=function(){return null},e.prototype._parseMediaFeatureName=function(){return this._parseIdent()},e.prototype._parseMedium=function(){var e=this.create(r.Node);return e.addChild(this._parseIdent())?this.finish(e):null},e.prototype._parsePageDeclaration=function(){return this._parsePageMarginBox()||this._parseRuleSetDeclaration()},e.prototype._parsePage=function(){if(!this.peekKeyword("@page"))return null;var e=this.create(r.Page);if(this.consumeToken(),e.addChild(this._parsePageSelector()))for(;this.accept(n.TokenType.Comma);)if(!e.addChild(this._parsePageSelector()))return this.finish(e,i.ParseError.IdentifierExpected);return this._parseBody(e,this._parsePageDeclaration.bind(this))},e.prototype._parsePageMarginBox=function(){if(!this.peek(n.TokenType.AtKeyword))return null;var e=this.create(r.PageBoxMarginBox);return this.acceptOneKeyword(o.pageBoxDirectives)||this.markError(e,i.ParseError.UnknownAtRule,[],[n.TokenType.CurlyL]),this._parseBody(e,this._parseRuleSetDeclaration.bind(this))},e.prototype._parsePageSelector=function(){if(!this.peek(n.TokenType.Ident)&&!this.peek(n.TokenType.Colon))return null;var e=this.create(r.Node);return e.addChild(this._parseIdent()),this.accept(n.TokenType.Colon)&&!e.addChild(this._parseIdent())?this.finish(e,i.ParseError.IdentifierExpected):this.finish(e)},e.prototype._parseDocument=function(){if(!this.peekKeyword("@-moz-document"))return null;var e=this.create(r.Document);return this.consumeToken(),this.resync([],[n.TokenType.CurlyL]),this._parseBody(e,this._parseStylesheetStatement.bind(this))},e.prototype._parseUnknownAtRule=function(){if(!this.peek(n.TokenType.AtKeyword))return null;var e=this.create(r.UnknownAtRule);e.addChild(this._parseUnknownAtRuleName());var t=0,o=0,s=0,a=0;e:for(;;){switch(this.token.type){case n.TokenType.SemiColon:if(0===o&&0===s&&0===a)break e;break;case n.TokenType.EOF:return o>0?this.finish(e,i.ParseError.RightCurlyExpected):a>0?this.finish(e,i.ParseError.RightSquareBracketExpected):s>0?this.finish(e,i.ParseError.RightParenthesisExpected):this.finish(e);case n.TokenType.CurlyL:t++,o++;break;case n.TokenType.CurlyR:if(o--,t>0&&0===o){if(this.consumeToken(),a>0)return this.finish(e,i.ParseError.RightSquareBracketExpected);if(s>0)return this.finish(e,i.ParseError.RightParenthesisExpected);break e}if(o<0){if(0===s&&0===a)break e;return this.finish(e,i.ParseError.LeftCurlyExpected)}break;case n.TokenType.ParenthesisL:s++;break;case n.TokenType.ParenthesisR:if(--s<0)return this.finish(e,i.ParseError.LeftParenthesisExpected);break;case n.TokenType.BracketL:a++;break;case n.TokenType.BracketR:if(--a<0)return this.finish(e,i.ParseError.LeftSquareBracketExpected)}this.consumeToken()}return e},e.prototype._parseUnknownAtRuleName=function(){var e=this.create(r.Node);return this.accept(n.TokenType.AtKeyword)?this.finish(e):e},e.prototype._parseOperator=function(){if(this.peekDelim("/")||this.peekDelim("*")||this.peekDelim("+")||this.peekDelim("-")||this.peek(n.TokenType.Dashmatch)||this.peek(n.TokenType.Includes)||this.peek(n.TokenType.SubstringOperator)||this.peek(n.TokenType.PrefixOperator)||this.peek(n.TokenType.SuffixOperator)||this.peekDelim("=")){var e=this.createNode(r.NodeType.Operator);return this.consumeToken(),this.finish(e)}return null},e.prototype._parseUnaryOperator=function(){if(!this.peekDelim("+")&&!this.peekDelim("-"))return null;var e=this.create(r.Node);return this.consumeToken(),this.finish(e)},e.prototype._parseCombinator=function(){if(this.peekDelim(">")){var e=this.create(r.Node);this.consumeToken();var t=this.mark();if(!this.hasWhitespace()&&this.acceptDelim(">")){if(!this.hasWhitespace()&&this.acceptDelim(">"))return e.type=r.NodeType.SelectorCombinatorShadowPiercingDescendant,this.finish(e);this.restoreAtMark(t)}return e.type=r.NodeType.SelectorCombinatorParent,this.finish(e)}if(this.peekDelim("+")){e=this.create(r.Node);return this.consumeToken(),e.type=r.NodeType.SelectorCombinatorSibling,this.finish(e)}if(this.peekDelim("~")){e=this.create(r.Node);return this.consumeToken(),e.type=r.NodeType.SelectorCombinatorAllSiblings,this.finish(e)}if(this.peekDelim("/")){e=this.create(r.Node);this.consumeToken();t=this.mark();if(!this.hasWhitespace()&&this.acceptIdent("deep")&&!this.hasWhitespace()&&this.acceptDelim("/"))return e.type=r.NodeType.SelectorCombinatorShadowPiercingDescendant,this.finish(e);this.restoreAtMark(t)}return null},e.prototype._parseSimpleSelector=function(){var e=this.create(r.SimpleSelector),t=0;for(e.addChild(this._parseElementName())&&t++;(0===t||!this.hasWhitespace())&&e.addChild(this._parseSimpleSelectorBody());)t++;return t>0?this.finish(e):null},e.prototype._parseSimpleSelectorBody=function(){return this._parsePseudo()||this._parseHash()||this._parseClass()||this._parseAttrib()},e.prototype._parseSelectorIdent=function(){return this._parseIdent()},e.prototype._parseHash=function(){if(!this.peek(n.TokenType.Hash)&&!this.peekDelim("#"))return null;var e=this.createNode(r.NodeType.IdentifierSelector);if(this.acceptDelim("#")){if(this.hasWhitespace()||!e.addChild(this._parseSelectorIdent()))return this.finish(e,i.ParseError.IdentifierExpected)}else this.consumeToken();return this.finish(e)},e.prototype._parseClass=function(){if(!this.peekDelim("."))return null;var e=this.createNode(r.NodeType.ClassSelector);return this.consumeToken(),this.hasWhitespace()||!e.addChild(this._parseSelectorIdent())?this.finish(e,i.ParseError.IdentifierExpected):this.finish(e)},e.prototype._parseElementName=function(){var e=this.mark(),t=this.createNode(r.NodeType.ElementNameSelector);return t.addChild(this._parseNamespacePrefix()),t.addChild(this._parseSelectorIdent())||this.acceptDelim("*")?this.finish(t):(this.restoreAtMark(e),null)},e.prototype._parseNamespacePrefix=function(){var e=this.mark(),t=this.createNode(r.NodeType.NamespacePrefix);return!t.addChild(this._parseIdent())&&this.acceptDelim("*"),this.acceptDelim("|")?this.finish(t):(this.restoreAtMark(e),null)},e.prototype._parseAttrib=function(){if(!this.peek(n.TokenType.BracketL))return null;var e=this.create(r.AttributeSelector);return this.consumeToken(),e.setNamespacePrefix(this._parseNamespacePrefix()),e.setIdentifier(this._parseIdent())?(e.setOperator(this._parseOperator())&&(e.setValue(this._parseBinaryExpr()),this.acceptIdent("i")),this.accept(n.TokenType.BracketR)?this.finish(e):this.finish(e,i.ParseError.RightSquareBracketExpected)):this.finish(e,i.ParseError.IdentifierExpected)},e.prototype._parsePseudo=function(){var e=this,t=this._tryParsePseudoIdentifier();if(t){if(!this.hasWhitespace()&&this.accept(n.TokenType.ParenthesisL)){if(t.addChild(this.try((function(){var t=e.create(r.Node);if(!t.addChild(e._parseSelector(!1)))return null;for(;e.accept(n.TokenType.Comma)&&t.addChild(e._parseSelector(!1)););return e.peek(n.TokenType.ParenthesisR)?e.finish(t):null}))||this._parseBinaryExpr()),!this.accept(n.TokenType.ParenthesisR))return this.finish(t,i.ParseError.RightParenthesisExpected)}return this.finish(t)}return null},e.prototype._tryParsePseudoIdentifier=function(){if(!this.peek(n.TokenType.Colon))return null;var e=this.mark(),t=this.createNode(r.NodeType.PseudoSelector);return this.consumeToken(),this.hasWhitespace()?(this.restoreAtMark(e),null):(this.accept(n.TokenType.Colon),this.hasWhitespace()||!t.addChild(this._parseIdent())?this.finish(t,i.ParseError.IdentifierExpected):this.finish(t))},e.prototype._tryParsePrio=function(){var e=this.mark(),t=this._parsePrio();return t||(this.restoreAtMark(e),null)},e.prototype._parsePrio=function(){if(!this.peek(n.TokenType.Exclamation))return null;var e=this.createNode(r.NodeType.Prio);return this.accept(n.TokenType.Exclamation)&&this.acceptIdent("important")?this.finish(e):null},e.prototype._parseExpr=function(e){void 0===e&&(e=!1);var t=this.create(r.Expression);if(!t.addChild(this._parseBinaryExpr()))return null;for(;;){if(this.peek(n.TokenType.Comma)){if(e)return this.finish(t);this.consumeToken()}if(!t.addChild(this._parseBinaryExpr()))break}return this.finish(t)},e.prototype._parseNamedLine=function(){if(!this.peek(n.TokenType.BracketL))return null;var e=this.createNode(r.NodeType.GridLine);for(this.consumeToken();e.addChild(this._parseIdent()););return this.accept(n.TokenType.BracketR)?this.finish(e):this.finish(e,i.ParseError.RightSquareBracketExpected)},e.prototype._parseBinaryExpr=function(e,t){var n=this.create(r.BinaryExpression);if(!n.setLeft(e||this._parseTerm()))return null;if(!n.setOperator(t||this._parseOperator()))return this.finish(n);if(!n.setRight(this._parseTerm()))return this.finish(n,i.ParseError.TermExpected);n=this.finish(n);var o=this._parseOperator();return o&&(n=this._parseBinaryExpr(n,o)),this.finish(n)},e.prototype._parseTerm=function(){var e=this.create(r.Term);return e.setOperator(this._parseUnaryOperator()),e.setExpression(this._parseTermExpression())?this.finish(e):null},e.prototype._parseTermExpression=function(){return this._parseURILiteral()||this._parseFunction()||this._parseIdent()||this._parseStringLiteral()||this._parseNumeric()||this._parseHexColor()||this._parseOperation()||this._parseNamedLine()},e.prototype._parseOperation=function(){if(!this.peek(n.TokenType.ParenthesisL))return null;var e=this.create(r.Node);return this.consumeToken(),e.addChild(this._parseExpr()),this.accept(n.TokenType.ParenthesisR)?this.finish(e):this.finish(e,i.ParseError.RightParenthesisExpected)},e.prototype._parseNumeric=function(){if(this.peek(n.TokenType.Num)||this.peek(n.TokenType.Percentage)||this.peek(n.TokenType.Resolution)||this.peek(n.TokenType.Length)||this.peek(n.TokenType.EMS)||this.peek(n.TokenType.EXS)||this.peek(n.TokenType.Angle)||this.peek(n.TokenType.Time)||this.peek(n.TokenType.Dimension)||this.peek(n.TokenType.Freq)){var e=this.create(r.NumericValue);return this.consumeToken(),this.finish(e)}return null},e.prototype._parseStringLiteral=function(){if(!this.peek(n.TokenType.String)&&!this.peek(n.TokenType.BadString))return null;var e=this.createNode(r.NodeType.StringLiteral);return this.consumeToken(),this.finish(e)},e.prototype._parseURILiteral=function(){if(!this.peekRegExp(n.TokenType.Ident,/^url(-prefix)?$/i))return null;var e=this.mark(),t=this.createNode(r.NodeType.URILiteral);return this.accept(n.TokenType.Ident),this.hasWhitespace()||!this.peek(n.TokenType.ParenthesisL)?(this.restoreAtMark(e),null):(this.scanner.inURL=!0,this.consumeToken(),t.addChild(this._parseURLArgument()),this.scanner.inURL=!1,this.accept(n.TokenType.ParenthesisR)?this.finish(t):this.finish(t,i.ParseError.RightParenthesisExpected))},e.prototype._parseURLArgument=function(){var e=this.create(r.Node);return this.accept(n.TokenType.String)||this.accept(n.TokenType.BadString)||this.acceptUnquotedString()?this.finish(e):null},e.prototype._parseIdent=function(e){if(!this.peek(n.TokenType.Ident))return null;var t=this.create(r.Identifier);return e&&(t.referenceTypes=e),t.isCustomProperty=this.peekRegExp(n.TokenType.Ident,/^--/),this.consumeToken(),this.finish(t)},e.prototype._parseFunction=function(){var e=this.mark(),t=this.create(r.Function);if(!t.setIdentifier(this._parseFunctionIdentifier()))return null;if(this.hasWhitespace()||!this.accept(n.TokenType.ParenthesisL))return this.restoreAtMark(e),null;if(t.getArguments().addChild(this._parseFunctionArgument()))for(;this.accept(n.TokenType.Comma)&&!this.peek(n.TokenType.ParenthesisR);)t.getArguments().addChild(this._parseFunctionArgument())||this.markError(t,i.ParseError.ExpressionExpected);return this.accept(n.TokenType.ParenthesisR)?this.finish(t):this.finish(t,i.ParseError.RightParenthesisExpected)},e.prototype._parseFunctionIdentifier=function(){if(!this.peek(n.TokenType.Ident))return null;var e=this.create(r.Identifier);if(e.referenceTypes=[r.ReferenceType.Function],this.acceptIdent("progid")){if(this.accept(n.TokenType.Colon))for(;this.accept(n.TokenType.Ident)&&this.acceptDelim("."););return this.finish(e)}return this.consumeToken(),this.finish(e)},e.prototype._parseFunctionArgument=function(){var e=this.create(r.FunctionArgument);return e.setValue(this._parseExpr(!0))?this.finish(e):null},e.prototype._parseHexColor=function(){if(this.peekRegExp(n.TokenType.Hash,/^#([A-Fa-f0-9]{3}|[A-Fa-f0-9]{4}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$/g)){var e=this.create(r.HexColorValue);return this.consumeToken(),this.finish(e)}return null},e}();t.Parser=a})),function(e){if("object"==typeof module&&"object"==typeof module.exports){var t=e(require,exports);void 0!==t&&(module.exports=t)}else"function"==typeof define&&define.amd&&define("vscode-css-languageservice/utils/arrays",["require","exports"],e)}((function(e,t){"use strict";function n(e,t){return-1!==e.indexOf(t)}Object.defineProperty(t,"__esModule",{value:!0}),t.union=t.includes=t.findFirst=void 0,t.findFirst=function(e,t){var n=0,r=e.length;if(0===r)return 0;for(;ne+t||this.offset===e&&this.length===t?this.findInScope(e,t):null},e.prototype.findInScope=function(e,t){void 0===t&&(t=0);var n=e+t,i=r.findFirst(this.children,(function(e){return e.offset>n}));if(0===i)return this;var o=this.children[i-1];return o.offset<=e&&o.offset+o.length>=e+t?o.findInScope(e,t):this},e.prototype.addSymbol=function(e){this.symbols.push(e)},e.prototype.getSymbol=function(e,t){for(var n=0;n0&&(i.arguments=n),i},e.is=function(e){var t=e;return E.defined(t)&&E.string(t.title)&&E.string(t.command)}}(c=t.Command||(t.Command={})),function(e){e.replace=function(e,t){return{range:e,newText:t}},e.insert=function(e,t){return{range:{start:e,end:e},newText:t}},e.del=function(e){return{range:e,newText:""}},e.is=function(e){var t=e;return E.objectLiteral(t)&&E.string(t.newText)&&i.is(t.range)}}(d=t.TextEdit||(t.TextEdit={})),function(e){e.create=function(e,t,n){var r={label:e};return void 0!==t&&(r.needsConfirmation=t),void 0!==n&&(r.description=n),r},e.is=function(e){var t=e;return void 0!==t&&E.objectLiteral(t)&&E.string(t.label)&&(E.boolean(t.needsConfirmation)||void 0===t.needsConfirmation)&&(E.string(t.description)||void 0===t.description)}}(p=t.ChangeAnnotation||(t.ChangeAnnotation={})),function(e){e.is=function(e){return"string"==typeof e}}(h=t.ChangeAnnotationIdentifier||(t.ChangeAnnotationIdentifier={})),function(e){e.replace=function(e,t,n){return{range:e,newText:t,annotationId:n}},e.insert=function(e,t,n){return{range:{start:e,end:e},newText:t,annotationId:n}},e.del=function(e,t){return{range:e,newText:"",annotationId:t}},e.is=function(e){var t=e;return d.is(t)&&(p.is(t.annotationId)||h.is(t.annotationId))}}(u=t.AnnotatedTextEdit||(t.AnnotatedTextEdit={})),function(e){e.create=function(e,t){return{textDocument:e,edits:t}},e.is=function(e){var t=e;return E.defined(t)&&v.is(t.textDocument)&&Array.isArray(t.edits)}}(m=t.TextDocumentEdit||(t.TextDocumentEdit={})),function(e){e.create=function(e,t,n){var r={kind:"create",uri:e};return void 0===t||void 0===t.overwrite&&void 0===t.ignoreIfExists||(r.options=t),void 0!==n&&(r.annotationId=n),r},e.is=function(e){var t=e;return t&&"create"===t.kind&&E.string(t.uri)&&(void 0===t.options||(void 0===t.options.overwrite||E.boolean(t.options.overwrite))&&(void 0===t.options.ignoreIfExists||E.boolean(t.options.ignoreIfExists)))&&(void 0===t.annotationId||h.is(t.annotationId))}}(f=t.CreateFile||(t.CreateFile={})),function(e){e.create=function(e,t,n,r){var i={kind:"rename",oldUri:e,newUri:t};return void 0===n||void 0===n.overwrite&&void 0===n.ignoreIfExists||(i.options=n),void 0!==r&&(i.annotationId=r),i},e.is=function(e){var t=e;return t&&"rename"===t.kind&&E.string(t.oldUri)&&E.string(t.newUri)&&(void 0===t.options||(void 0===t.options.overwrite||E.boolean(t.options.overwrite))&&(void 0===t.options.ignoreIfExists||E.boolean(t.options.ignoreIfExists)))&&(void 0===t.annotationId||h.is(t.annotationId))}}(g=t.RenameFile||(t.RenameFile={})),function(e){e.create=function(e,t,n){var r={kind:"delete",uri:e};return void 0===t||void 0===t.recursive&&void 0===t.ignoreIfNotExists||(r.options=t),void 0!==n&&(r.annotationId=n),r},e.is=function(e){var t=e;return t&&"delete"===t.kind&&E.string(t.uri)&&(void 0===t.options||(void 0===t.options.recursive||E.boolean(t.options.recursive))&&(void 0===t.options.ignoreIfNotExists||E.boolean(t.options.ignoreIfNotExists)))&&(void 0===t.annotationId||h.is(t.annotationId))}}(b=t.DeleteFile||(t.DeleteFile={})),function(e){e.is=function(e){var t=e;return t&&(void 0!==t.changes||void 0!==t.documentChanges)&&(void 0===t.documentChanges||t.documentChanges.every((function(e){return E.string(e.kind)?f.is(e)||g.is(e)||b.is(e):m.is(e)})))}}(y=t.WorkspaceEdit||(t.WorkspaceEdit={}));var v,w,x,S,k=function(){function e(e,t){this.edits=e,this.changeAnnotations=t}return e.prototype.insert=function(e,t,n){var r,i;if(void 0===n?r=d.insert(e,t):h.is(n)?(i=n,r=u.insert(e,t,n)):(this.assertChangeAnnotations(this.changeAnnotations),i=this.changeAnnotations.manage(n),r=u.insert(e,t,i)),this.edits.push(r),void 0!==i)return i},e.prototype.replace=function(e,t,n){var r,i;if(void 0===n?r=d.replace(e,t):h.is(n)?(i=n,r=u.replace(e,t,n)):(this.assertChangeAnnotations(this.changeAnnotations),i=this.changeAnnotations.manage(n),r=u.replace(e,t,i)),this.edits.push(r),void 0!==i)return i},e.prototype.delete=function(e,t){var n,r;if(void 0===t?n=d.del(e):h.is(t)?(r=t,n=u.del(e,t)):(this.assertChangeAnnotations(this.changeAnnotations),r=this.changeAnnotations.manage(t),n=u.del(e,r)),this.edits.push(n),void 0!==r)return r},e.prototype.add=function(e){this.edits.push(e)},e.prototype.all=function(){return this.edits},e.prototype.clear=function(){this.edits.splice(0,this.edits.length)},e.prototype.assertChangeAnnotations=function(e){if(void 0===e)throw new Error("Text edit change is not configured to manage change annotations.")},e}(),C=function(){function e(e){this._annotations=void 0===e?Object.create(null):e,this._counter=0,this._size=0}return e.prototype.all=function(){return this._annotations},Object.defineProperty(e.prototype,"size",{get:function(){return this._size},enumerable:!1,configurable:!0}),e.prototype.manage=function(e,t){var n;if(h.is(e)?n=e:(n=this.nextId(),t=e),void 0!==this._annotations[n])throw new Error("Id "+n+" is already in use.");if(void 0===t)throw new Error("No annotation provided for id "+n);return this._annotations[n]=t,this._size++,n},e.prototype.nextId=function(){return this._counter++,this._counter.toString()},e}(),T=function(){function e(e){var t=this;this._textEditChanges=Object.create(null),void 0!==e?(this._workspaceEdit=e,e.documentChanges?(this._changeAnnotations=new C(e.changeAnnotations),e.changeAnnotations=this._changeAnnotations.all(),e.documentChanges.forEach((function(e){if(m.is(e)){var n=new k(e.edits,t._changeAnnotations);t._textEditChanges[e.textDocument.uri]=n}}))):e.changes&&Object.keys(e.changes).forEach((function(n){var r=new k(e.changes[n]);t._textEditChanges[n]=r}))):this._workspaceEdit={}}return Object.defineProperty(e.prototype,"edit",{get:function(){return this.initDocumentChanges(),void 0!==this._changeAnnotations&&(0===this._changeAnnotations.size?this._workspaceEdit.changeAnnotations=void 0:this._workspaceEdit.changeAnnotations=this._changeAnnotations.all()),this._workspaceEdit},enumerable:!1,configurable:!0}),e.prototype.getTextEditChange=function(e){if(v.is(e)){if(this.initDocumentChanges(),void 0===this._workspaceEdit.documentChanges)throw new Error("Workspace edit is not configured for document changes.");var t={uri:e.uri,version:e.version};if(!(r=this._textEditChanges[t.uri])){var n={textDocument:t,edits:i=[]};this._workspaceEdit.documentChanges.push(n),r=new k(i,this._changeAnnotations),this._textEditChanges[t.uri]=r}return r}if(this.initChanges(),void 0===this._workspaceEdit.changes)throw new Error("Workspace edit is not configured for normal text edit changes.");var r;if(!(r=this._textEditChanges[e])){var i=[];this._workspaceEdit.changes[e]=i,r=new k(i),this._textEditChanges[e]=r}return r},e.prototype.initDocumentChanges=function(){void 0===this._workspaceEdit.documentChanges&&void 0===this._workspaceEdit.changes&&(this._changeAnnotations=new C,this._workspaceEdit.documentChanges=[],this._workspaceEdit.changeAnnotations=this._changeAnnotations.all())},e.prototype.initChanges=function(){void 0===this._workspaceEdit.documentChanges&&void 0===this._workspaceEdit.changes&&(this._workspaceEdit.changes=Object.create(null))},e.prototype.createFile=function(e,t,n){if(this.initDocumentChanges(),void 0===this._workspaceEdit.documentChanges)throw new Error("Workspace edit is not configured for document changes.");var r,i,o;if(p.is(t)||h.is(t)?r=t:n=t,void 0===r?i=f.create(e,n):(o=h.is(r)?r:this._changeAnnotations.manage(r),i=f.create(e,n,o)),this._workspaceEdit.documentChanges.push(i),void 0!==o)return o},e.prototype.renameFile=function(e,t,n,r){if(this.initDocumentChanges(),void 0===this._workspaceEdit.documentChanges)throw new Error("Workspace edit is not configured for document changes.");var i,o,s;if(p.is(n)||h.is(n)?i=n:r=n,void 0===i?o=g.create(e,t,r):(s=h.is(i)?i:this._changeAnnotations.manage(i),o=g.create(e,t,r,s)),this._workspaceEdit.documentChanges.push(o),void 0!==s)return s},e.prototype.deleteFile=function(e,t,n){if(this.initDocumentChanges(),void 0===this._workspaceEdit.documentChanges)throw new Error("Workspace edit is not configured for document changes.");var r,i,o;if(p.is(t)||h.is(t)?r=t:n=t,void 0===r?i=b.create(e,n):(o=h.is(r)?r:this._changeAnnotations.manage(r),i=b.create(e,n,o)),this._workspaceEdit.documentChanges.push(i),void 0!==o)return o},e}();t.WorkspaceChange=T,function(e){e.create=function(e){return{uri:e}},e.is=function(e){var t=e;return E.defined(t)&&E.string(t.uri)}}(t.TextDocumentIdentifier||(t.TextDocumentIdentifier={})),function(e){e.create=function(e,t){return{uri:e,version:t}},e.is=function(e){var t=e;return E.defined(t)&&E.string(t.uri)&&E.integer(t.version)}}(t.VersionedTextDocumentIdentifier||(t.VersionedTextDocumentIdentifier={})),function(e){e.create=function(e,t){return{uri:e,version:t}},e.is=function(e){var t=e;return E.defined(t)&&E.string(t.uri)&&(null===t.version||E.integer(t.version))}}(v=t.OptionalVersionedTextDocumentIdentifier||(t.OptionalVersionedTextDocumentIdentifier={})),function(e){e.create=function(e,t,n,r){return{uri:e,languageId:t,version:n,text:r}},e.is=function(e){var t=e;return E.defined(t)&&E.string(t.uri)&&E.string(t.languageId)&&E.integer(t.version)&&E.string(t.text)}}(t.TextDocumentItem||(t.TextDocumentItem={})),function(e){e.PlainText="plaintext",e.Markdown="markdown"}(w=t.MarkupKind||(t.MarkupKind={})),function(e){e.is=function(t){var n=t;return n===e.PlainText||n===e.Markdown}}(w=t.MarkupKind||(t.MarkupKind={})),function(e){e.is=function(e){var t=e;return E.objectLiteral(e)&&w.is(t.kind)&&E.string(t.value)}}(x=t.MarkupContent||(t.MarkupContent={})),function(e){e.Text=1,e.Method=2,e.Function=3,e.Constructor=4,e.Field=5,e.Variable=6,e.Class=7,e.Interface=8,e.Module=9,e.Property=10,e.Unit=11,e.Value=12,e.Enum=13,e.Keyword=14,e.Snippet=15,e.Color=16,e.File=17,e.Reference=18,e.Folder=19,e.EnumMember=20,e.Constant=21,e.Struct=22,e.Event=23,e.Operator=24,e.TypeParameter=25}(t.CompletionItemKind||(t.CompletionItemKind={})),function(e){e.PlainText=1,e.Snippet=2}(t.InsertTextFormat||(t.InsertTextFormat={})),function(e){e.Deprecated=1}(t.CompletionItemTag||(t.CompletionItemTag={})),function(e){e.create=function(e,t,n){return{newText:e,insert:t,replace:n}},e.is=function(e){var t=e;return t&&E.string(t.newText)&&i.is(t.insert)&&i.is(t.replace)}}(t.InsertReplaceEdit||(t.InsertReplaceEdit={})),function(e){e.asIs=1,e.adjustIndentation=2}(t.InsertTextMode||(t.InsertTextMode={})),function(e){e.create=function(e){return{label:e}}}(t.CompletionItem||(t.CompletionItem={})),function(e){e.create=function(e,t){return{items:e||[],isIncomplete:!!t}}}(t.CompletionList||(t.CompletionList={})),function(e){e.fromPlainText=function(e){return e.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")},e.is=function(e){var t=e;return E.string(t)||E.objectLiteral(t)&&E.string(t.language)&&E.string(t.value)}}(S=t.MarkedString||(t.MarkedString={})),function(e){e.is=function(e){var t=e;return!!t&&E.objectLiteral(t)&&(x.is(t.contents)||S.is(t.contents)||E.typedArray(t.contents,S.is))&&(void 0===e.range||i.is(e.range))}}(t.Hover||(t.Hover={})),function(e){e.create=function(e,t){return t?{label:e,documentation:t}:{label:e}}}(t.ParameterInformation||(t.ParameterInformation={})),function(e){e.create=function(e,t){for(var n=[],r=2;r=0;s--){var a=i[s],l=e.offsetAt(a.range.start),c=e.offsetAt(a.range.end);if(!(c<=o))throw new Error("Overlapping edit");r=r.substring(0,l)+a.newText+r.substring(c,r.length),o=l}return r}}(t.TextDocument||(t.TextDocument={}));var E,F=function(){function e(e,t,n,r){this._uri=e,this._languageId=t,this._version=n,this._content=r,this._lineOffsets=void 0}return Object.defineProperty(e.prototype,"uri",{get:function(){return this._uri},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"languageId",{get:function(){return this._languageId},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"version",{get:function(){return this._version},enumerable:!1,configurable:!0}),e.prototype.getText=function(e){if(e){var t=this.offsetAt(e.start),n=this.offsetAt(e.end);return this._content.substring(t,n)}return this._content},e.prototype.update=function(e,t){this._content=e.text,this._version=t,this._lineOffsets=void 0},e.prototype.getLineOffsets=function(){if(void 0===this._lineOffsets){for(var e=[],t=this._content,n=!0,r=0;r0&&e.push(t.length),this._lineOffsets=e}return this._lineOffsets},e.prototype.positionAt=function(e){e=Math.max(Math.min(e,this._content.length),0);var t=this.getLineOffsets(),n=0,i=t.length;if(0===i)return r.create(0,e);for(;ne?i=o:n=o+1}var s=n-1;return r.create(s,e-t[s])},e.prototype.offsetAt=function(e){var t=this.getLineOffsets();if(e.line>=t.length)return this._content.length;if(e.line<0)return 0;var n=t[e.line],r=e.line+1e?r=i:n=i+1}var o=n-1;return{line:o,character:e-t[o]}},e.prototype.offsetAt=function(e){var t=this.getLineOffsets();if(e.line>=t.length)return this._content.length;if(e.line<0)return 0;var n=t[e.line],r=e.line+1n.line||t.line===n.line&&t.character>n.character?{start:n,end:t}:e}function s(e){var t=o(e.range);return t!==e.range?{newText:e.newText,range:t}:e}!function(e){e.create=function(e,t,r,i){return new n(e,t,r,i)},e.update=function(e,t,r){if(e instanceof n)return e.update(t,r),e;throw new Error("TextDocument.update: document must be created by TextDocument.create")},e.applyEdits=function(e,t){for(var n=e.getText(),i=0,o=[],a=0,l=r(t.map(s),(function(e,t){var n=e.range.start.line-t.range.start.line;return 0===n?e.range.start.character-t.range.start.character:n}));ai&&o.push(n.substring(i,d)),c.newText.length&&o.push(c.newText),i=e.offsetAt(c.range.end)}return o.push(n.substr(i)),o.join("")}}(t.TextDocument||(t.TextDocument={}))})),define("vscode-languageserver-textdocument",["vscode-languageserver-textdocument/main"],(function(e){return e})),function(e){if("object"==typeof module&&"object"==typeof module.exports){var t=e(require,exports);void 0!==t&&(module.exports=t)}else"function"==typeof define&&define.amd&&define("vscode-css-languageservice/cssLanguageTypes",["require","exports","vscode-languageserver-types","vscode-languageserver-textdocument"],e)}((function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.FileType=t.ClientCapabilities=t.DocumentHighlightKind=t.VersionedTextDocumentIdentifier=t.TextDocumentEdit=t.CodeActionKind=t.TextEdit=t.WorkspaceEdit=t.DocumentLink=t.DocumentHighlight=t.CodeAction=t.Command=t.CodeActionContext=t.MarkedString=t.Hover=t.Location=t.DocumentSymbol=t.SymbolKind=t.SymbolInformation=t.InsertTextFormat=t.CompletionItemTag=t.CompletionList=t.CompletionItemKind=t.CompletionItem=t.DiagnosticSeverity=t.Diagnostic=t.SelectionRange=t.FoldingRangeKind=t.FoldingRange=t.ColorPresentation=t.ColorInformation=t.Color=t.MarkupKind=t.MarkupContent=t.Position=t.Range=t.TextDocument=void 0;var n=e("vscode-languageserver-types");Object.defineProperty(t,"Range",{enumerable:!0,get:function(){return n.Range}}),Object.defineProperty(t,"Position",{enumerable:!0,get:function(){return n.Position}}),Object.defineProperty(t,"MarkupContent",{enumerable:!0,get:function(){return n.MarkupContent}}),Object.defineProperty(t,"MarkupKind",{enumerable:!0,get:function(){return n.MarkupKind}}),Object.defineProperty(t,"Color",{enumerable:!0,get:function(){return n.Color}}),Object.defineProperty(t,"ColorInformation",{enumerable:!0,get:function(){return n.ColorInformation}}),Object.defineProperty(t,"ColorPresentation",{enumerable:!0,get:function(){return n.ColorPresentation}}),Object.defineProperty(t,"FoldingRange",{enumerable:!0,get:function(){return n.FoldingRange}}),Object.defineProperty(t,"FoldingRangeKind",{enumerable:!0,get:function(){return n.FoldingRangeKind}}),Object.defineProperty(t,"SelectionRange",{enumerable:!0,get:function(){return n.SelectionRange}}),Object.defineProperty(t,"Diagnostic",{enumerable:!0,get:function(){return n.Diagnostic}}),Object.defineProperty(t,"DiagnosticSeverity",{enumerable:!0,get:function(){return n.DiagnosticSeverity}}),Object.defineProperty(t,"CompletionItem",{enumerable:!0,get:function(){return n.CompletionItem}}),Object.defineProperty(t,"CompletionItemKind",{enumerable:!0,get:function(){return n.CompletionItemKind}}),Object.defineProperty(t,"CompletionList",{enumerable:!0,get:function(){return n.CompletionList}}),Object.defineProperty(t,"CompletionItemTag",{enumerable:!0,get:function(){return n.CompletionItemTag}}),Object.defineProperty(t,"InsertTextFormat",{enumerable:!0,get:function(){return n.InsertTextFormat}}),Object.defineProperty(t,"SymbolInformation",{enumerable:!0,get:function(){return n.SymbolInformation}}),Object.defineProperty(t,"SymbolKind",{enumerable:!0,get:function(){return n.SymbolKind}}),Object.defineProperty(t,"DocumentSymbol",{enumerable:!0,get:function(){return n.DocumentSymbol}}),Object.defineProperty(t,"Location",{enumerable:!0,get:function(){return n.Location}}),Object.defineProperty(t,"Hover",{enumerable:!0,get:function(){return n.Hover}}),Object.defineProperty(t,"MarkedString",{enumerable:!0,get:function(){return n.MarkedString}}),Object.defineProperty(t,"CodeActionContext",{enumerable:!0,get:function(){return n.CodeActionContext}}),Object.defineProperty(t,"Command",{enumerable:!0,get:function(){return n.Command}}),Object.defineProperty(t,"CodeAction",{enumerable:!0,get:function(){return n.CodeAction}}),Object.defineProperty(t,"DocumentHighlight",{enumerable:!0,get:function(){return n.DocumentHighlight}}),Object.defineProperty(t,"DocumentLink",{enumerable:!0,get:function(){return n.DocumentLink}}),Object.defineProperty(t,"WorkspaceEdit",{enumerable:!0,get:function(){return n.WorkspaceEdit}}),Object.defineProperty(t,"TextEdit",{enumerable:!0,get:function(){return n.TextEdit}}),Object.defineProperty(t,"CodeActionKind",{enumerable:!0,get:function(){return n.CodeActionKind}}),Object.defineProperty(t,"TextDocumentEdit",{enumerable:!0,get:function(){return n.TextDocumentEdit}}),Object.defineProperty(t,"VersionedTextDocumentIdentifier",{enumerable:!0,get:function(){return n.VersionedTextDocumentIdentifier}}),Object.defineProperty(t,"DocumentHighlightKind",{enumerable:!0,get:function(){return n.DocumentHighlightKind}});var r=e("vscode-languageserver-textdocument");Object.defineProperty(t,"TextDocument",{enumerable:!0,get:function(){return r.TextDocument}}),function(e){e.LATEST={textDocument:{completion:{completionItem:{documentationFormat:[n.MarkupKind.Markdown,n.MarkupKind.PlainText]}},hover:{contentFormat:[n.MarkupKind.Markdown,n.MarkupKind.PlainText]}}}}(t.ClientCapabilities||(t.ClientCapabilities={})),function(e){e[e.Unknown=0]="Unknown",e[e.File=1]="File",e[e.Directory=2]="Directory",e[e.SymbolicLink=64]="SymbolicLink"}(t.FileType||(t.FileType={}))})),function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define("vscode-uri/index",[],t);else{var n=t();for(var r in n)("object"==typeof exports?exports:e)[r]=n[r]}}(this,(function(){return(()=>{"use strict";var e={470:e=>{function t(e){if("string"!=typeof e)throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}function n(e,t){for(var n,r="",i=0,o=-1,s=0,a=0;a<=e.length;++a){if(a2){var l=r.lastIndexOf("/");if(l!==r.length-1){-1===l?(r="",i=0):i=(r=r.slice(0,l)).length-1-r.lastIndexOf("/"),o=a,s=0;continue}}else if(2===r.length||1===r.length){r="",i=0,o=a,s=0;continue}t&&(r.length>0?r+="/..":r="..",i=2)}else r.length>0?r+="/"+e.slice(o+1,a):r=e.slice(o+1,a),i=a-o-1;o=a,s=0}else 46===n&&-1!==s?++s:s=-1}return r}var r={resolve:function(){for(var e,r="",i=!1,o=arguments.length-1;o>=-1&&!i;o--){var s;o>=0?s=arguments[o]:(void 0===e&&(e=process.cwd()),s=e),t(s),0!==s.length&&(r=s+"/"+r,i=47===s.charCodeAt(0))}return r=n(r,!i),i?r.length>0?"/"+r:"/":r.length>0?r:"."},normalize:function(e){if(t(e),0===e.length)return".";var r=47===e.charCodeAt(0),i=47===e.charCodeAt(e.length-1);return 0!==(e=n(e,!r)).length||r||(e="."),e.length>0&&i&&(e+="/"),r?"/"+e:e},isAbsolute:function(e){return t(e),e.length>0&&47===e.charCodeAt(0)},join:function(){if(0===arguments.length)return".";for(var e,n=0;n0&&(void 0===e?e=i:e+="/"+i)}return void 0===e?".":r.normalize(e)},relative:function(e,n){if(t(e),t(n),e===n)return"";if((e=r.resolve(e))===(n=r.resolve(n)))return"";for(var i=1;ic){if(47===n.charCodeAt(a+p))return n.slice(a+p+1);if(0===p)return n.slice(a+p)}else s>c&&(47===e.charCodeAt(i+p)?d=p:0===p&&(d=0));break}var h=e.charCodeAt(i+p);if(h!==n.charCodeAt(a+p))break;47===h&&(d=p)}var u="";for(p=i+d+1;p<=o;++p)p!==o&&47!==e.charCodeAt(p)||(0===u.length?u+="..":u+="/..");return u.length>0?u+n.slice(a+d):(a+=d,47===n.charCodeAt(a)&&++a,n.slice(a))},_makeLong:function(e){return e},dirname:function(e){if(t(e),0===e.length)return".";for(var n=e.charCodeAt(0),r=47===n,i=-1,o=!0,s=e.length-1;s>=1;--s)if(47===(n=e.charCodeAt(s))){if(!o){i=s;break}}else o=!1;return-1===i?r?"/":".":r&&1===i?"//":e.slice(0,i)},basename:function(e,n){if(void 0!==n&&"string"!=typeof n)throw new TypeError('"ext" argument must be a string');t(e);var r,i=0,o=-1,s=!0;if(void 0!==n&&n.length>0&&n.length<=e.length){if(n.length===e.length&&n===e)return"";var a=n.length-1,l=-1;for(r=e.length-1;r>=0;--r){var c=e.charCodeAt(r);if(47===c){if(!s){i=r+1;break}}else-1===l&&(s=!1,l=r+1),a>=0&&(c===n.charCodeAt(a)?-1==--a&&(o=r):(a=-1,o=l))}return i===o?o=l:-1===o&&(o=e.length),e.slice(i,o)}for(r=e.length-1;r>=0;--r)if(47===e.charCodeAt(r)){if(!s){i=r+1;break}}else-1===o&&(s=!1,o=r+1);return-1===o?"":e.slice(i,o)},extname:function(e){t(e);for(var n=-1,r=0,i=-1,o=!0,s=0,a=e.length-1;a>=0;--a){var l=e.charCodeAt(a);if(47!==l)-1===i&&(o=!1,i=a+1),46===l?-1===n?n=a:1!==s&&(s=1):-1!==n&&(s=-1);else if(!o){r=a+1;break}}return-1===n||-1===i||0===s||1===s&&n===i-1&&n===r+1?"":e.slice(n,i)},format:function(e){if(null===e||"object"!=typeof e)throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof e);return function(e,t){var n=t.dir||t.root,r=t.base||(t.name||"")+(t.ext||"");return n?n===t.root?n+r:n+"/"+r:r}(0,e)},parse:function(e){t(e);var n={root:"",dir:"",base:"",ext:"",name:""};if(0===e.length)return n;var r,i=e.charCodeAt(0),o=47===i;o?(n.root="/",r=1):r=0;for(var s=-1,a=0,l=-1,c=!0,d=e.length-1,p=0;d>=r;--d)if(47!==(i=e.charCodeAt(d)))-1===l&&(c=!1,l=d+1),46===i?-1===s?s=d:1!==p&&(p=1):-1!==s&&(p=-1);else if(!c){a=d+1;break}return-1===s||-1===l||0===p||1===p&&s===l-1&&s===a+1?-1!==l&&(n.base=n.name=0===a&&o?e.slice(1,l):e.slice(a,l)):(0===a&&o?(n.name=e.slice(1,s),n.base=e.slice(1,l)):(n.name=e.slice(a,s),n.base=e.slice(a,l)),n.ext=e.slice(s,l)),a>0?n.dir=e.slice(0,a-1):o&&(n.dir="/"),n},sep:"/",delimiter:":",win32:null,posix:null};r.posix=r,e.exports=r},465:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Utils=t.URI=void 0;var r=n(796);Object.defineProperty(t,"URI",{enumerable:!0,get:function(){return r.URI}});var i=n(679);Object.defineProperty(t,"Utils",{enumerable:!0,get:function(){return i.Utils}})},674:(e,t)=>{if(Object.defineProperty(t,"__esModule",{value:!0}),t.isWindows=void 0,"object"==typeof process)t.isWindows="win32"===process.platform;else if("object"==typeof navigator){var n=navigator.userAgent;t.isWindows=n.indexOf("Windows")>=0}},796:function(e,t,n){var r,i,o=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0}),t.uriToFsPath=t.URI=void 0;var s=n(674),a=/^\w[\w\d+.-]*$/,l=/^\//,c=/^\/\//,d="",p="/",h=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/,u=function(){function e(e,t,n,r,i,o){void 0===o&&(o=!1),"object"==typeof e?(this.scheme=e.scheme||d,this.authority=e.authority||d,this.path=e.path||d,this.query=e.query||d,this.fragment=e.fragment||d):(this.scheme=function(e,t){return e||t?e:"file"}(e,o),this.authority=t||d,this.path=function(e,t){switch(e){case"https":case"http":case"file":t?t[0]!==p&&(t=p+t):t=p}return t}(this.scheme,n||d),this.query=r||d,this.fragment=i||d,function(e,t){if(!e.scheme&&t)throw new Error('[UriError]: Scheme is missing: {scheme: "", authority: "'+e.authority+'", path: "'+e.path+'", query: "'+e.query+'", fragment: "'+e.fragment+'"}');if(e.scheme&&!a.test(e.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if(e.path)if(e.authority){if(!l.test(e.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(c.test(e.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}(this,o))}return e.isUri=function(t){return t instanceof e||!!t&&"string"==typeof t.authority&&"string"==typeof t.fragment&&"string"==typeof t.path&&"string"==typeof t.query&&"string"==typeof t.scheme&&"function"==typeof t.fsPath&&"function"==typeof t.with&&"function"==typeof t.toString},Object.defineProperty(e.prototype,"fsPath",{get:function(){return v(this,!1)},enumerable:!1,configurable:!0}),e.prototype.with=function(e){if(!e)return this;var t=e.scheme,n=e.authority,r=e.path,i=e.query,o=e.fragment;return void 0===t?t=this.scheme:null===t&&(t=d),void 0===n?n=this.authority:null===n&&(n=d),void 0===r?r=this.path:null===r&&(r=d),void 0===i?i=this.query:null===i&&(i=d),void 0===o?o=this.fragment:null===o&&(o=d),t===this.scheme&&n===this.authority&&r===this.path&&i===this.query&&o===this.fragment?this:new f(t,n,r,i,o)},e.parse=function(e,t){void 0===t&&(t=!1);var n=h.exec(e);return n?new f(n[2]||d,k(n[4]||d),k(n[5]||d),k(n[7]||d),k(n[9]||d),t):new f(d,d,d,d,d)},e.file=function(e){var t=d;if(s.isWindows&&(e=e.replace(/\\/g,p)),e[0]===p&&e[1]===p){var n=e.indexOf(p,2);-1===n?(t=e.substring(2),e=p):(t=e.substring(2,n),e=e.substring(n)||p)}return new f("file",t,e,d,d)},e.from=function(e){return new f(e.scheme,e.authority,e.path,e.query,e.fragment)},e.prototype.toString=function(e){return void 0===e&&(e=!1),w(this,e)},e.prototype.toJSON=function(){return this},e.revive=function(t){if(t){if(t instanceof e)return t;var n=new f(t);return n._formatted=t.external,n._fsPath=t._sep===m?t.fsPath:null,n}return t},e}();t.URI=u;var m=s.isWindows?1:void 0,f=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._formatted=null,t._fsPath=null,t}return o(t,e),Object.defineProperty(t.prototype,"fsPath",{get:function(){return this._fsPath||(this._fsPath=v(this,!1)),this._fsPath},enumerable:!1,configurable:!0}),t.prototype.toString=function(e){return void 0===e&&(e=!1),e?w(this,!0):(this._formatted||(this._formatted=w(this,!1)),this._formatted)},t.prototype.toJSON=function(){var e={$mid:1};return this._fsPath&&(e.fsPath=this._fsPath,e._sep=m),this._formatted&&(e.external=this._formatted),this.path&&(e.path=this.path),this.scheme&&(e.scheme=this.scheme),this.authority&&(e.authority=this.authority),this.query&&(e.query=this.query),this.fragment&&(e.fragment=this.fragment),e},t}(u),g=((i={})[58]="%3A",i[47]="%2F",i[63]="%3F",i[35]="%23",i[91]="%5B",i[93]="%5D",i[64]="%40",i[33]="%21",i[36]="%24",i[38]="%26",i[39]="%27",i[40]="%28",i[41]="%29",i[42]="%2A",i[43]="%2B",i[44]="%2C",i[59]="%3B",i[61]="%3D",i[32]="%20",i);function b(e,t){for(var n=void 0,r=-1,i=0;i=97&&o<=122||o>=65&&o<=90||o>=48&&o<=57||45===o||46===o||95===o||126===o||t&&47===o)-1!==r&&(n+=encodeURIComponent(e.substring(r,i)),r=-1),void 0!==n&&(n+=e.charAt(i));else{void 0===n&&(n=e.substr(0,i));var s=g[o];void 0!==s?(-1!==r&&(n+=encodeURIComponent(e.substring(r,i)),r=-1),n+=s):-1===r&&(r=i)}}return-1!==r&&(n+=encodeURIComponent(e.substring(r))),void 0!==n?n:e}function y(e){for(var t=void 0,n=0;n1&&"file"===e.scheme?"//"+e.authority+e.path:47===e.path.charCodeAt(0)&&(e.path.charCodeAt(1)>=65&&e.path.charCodeAt(1)<=90||e.path.charCodeAt(1)>=97&&e.path.charCodeAt(1)<=122)&&58===e.path.charCodeAt(2)?t?e.path.substr(1):e.path[1].toLowerCase()+e.path.substr(2):e.path,s.isWindows&&(n=n.replace(/\//g,"\\")),n}function w(e,t){var n=t?y:b,r="",i=e.scheme,o=e.authority,s=e.path,a=e.query,l=e.fragment;if(i&&(r+=i,r+=":"),(o||"file"===i)&&(r+=p,r+=p),o){var c=o.indexOf("@");if(-1!==c){var d=o.substr(0,c);o=o.substr(c+1),-1===(c=d.indexOf(":"))?r+=n(d,!1):(r+=n(d.substr(0,c),!1),r+=":",r+=n(d.substr(c+1),!1)),r+="@"}-1===(c=(o=o.toLowerCase()).indexOf(":"))?r+=n(o,!1):(r+=n(o.substr(0,c),!1),r+=o.substr(c))}if(s){if(s.length>=3&&47===s.charCodeAt(0)&&58===s.charCodeAt(2))(h=s.charCodeAt(1))>=65&&h<=90&&(s="/"+String.fromCharCode(h+32)+":"+s.substr(3));else if(s.length>=2&&58===s.charCodeAt(1)){var h;(h=s.charCodeAt(0))>=65&&h<=90&&(s=String.fromCharCode(h+32)+":"+s.substr(2))}r+=n(s,!0)}return a&&(r+="?",r+=n(a,!1)),l&&(r+="#",r+=t?l:b(l,!1)),r}function x(e){try{return decodeURIComponent(e)}catch(t){return e.length>3?e.substr(0,3)+x(e.substr(3)):e}}t.uriToFsPath=v;var S=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function k(e){return e.match(S)?e.replace(S,(function(e){return x(e)})):e}},679:function(e,t,n){var r=this&&this.__spreadArrays||function(){for(var e=0,t=0,n=arguments.length;t0&&i[i.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]=0&&-1===' \t\n\r":{[()]},*>+'.indexOf(r.charAt(n));)n--;return r.substring(n+1,t)}(e,this.offset),this.defaultReplaceRange=a.Range.create(a.Position.create(this.position.line,this.position.character-this.currentWord.length),this.position),this.textDocument=e,this.styleSheet=n,this.documentSettings=i;try{var o={isIncomplete:!1,items:[]};this.nodePath=r.getNodePath(this.styleSheet,this.offset);for(var s=this.nodePath.length-1;s>=0;s--){var l=this.nodePath[s];if(l instanceof r.Property)this.getCompletionsForDeclarationProperty(l.getParent(),o);else if(l instanceof r.Expression)l.parent instanceof r.Interpolation?this.getVariableProposals(null,o):this.getCompletionsForExpression(l,o);else if(l instanceof r.SimpleSelector){var c=l.findAParent(r.NodeType.ExtendsReference,r.NodeType.Ruleset);if(c)if(c.type===r.NodeType.ExtendsReference)this.getCompletionsForExtendsReference(c,l,o);else{var d=c;this.getCompletionsForSelector(d,d&&d.isNested(),o)}}else if(l instanceof r.FunctionArgument)this.getCompletionsForFunctionArgument(l,l.getParent(),o);else if(l instanceof r.Declarations)this.getCompletionsForDeclarations(l,o);else if(l instanceof r.VariableDeclaration)this.getCompletionsForVariableDeclaration(l,o);else if(l instanceof r.RuleSet)this.getCompletionsForRuleSet(l,o);else if(l instanceof r.Interpolation)this.getCompletionsForInterpolation(l,o);else if(l instanceof r.FunctionDeclaration)this.getCompletionsForFunctionDeclaration(l,o);else if(l instanceof r.MixinReference)this.getCompletionsForMixinReference(l,o);else if(l instanceof r.Function)this.getCompletionsForFunctionArgument(null,l,o);else if(l instanceof r.Supports)this.getCompletionsForSupports(l,o);else if(l instanceof r.SupportsCondition)this.getCompletionsForSupportsCondition(l,o);else if(l instanceof r.ExtendsReference)this.getCompletionsForExtendsReference(l,null,o);else if(l.type===r.NodeType.URILiteral)this.getCompletionForUriLiteralValue(l,o);else if(null===l.parent)this.getCompletionForTopLevel(o);else{if(l.type!==r.NodeType.StringLiteral||!this.isImportPathParent(l.parent.type))continue;this.getCompletionForImportPath(l,o)}if(o.items.length>0||this.offset>l.offset)return this.finalize(o)}return this.getCompletionsForStylesheet(o),0===o.items.length&&this.variablePrefix&&0===this.currentWord.indexOf(this.variablePrefix)&&this.getVariableProposals(null,o),this.finalize(o)}finally{this.position=null,this.currentWord=null,this.textDocument=null,this.styleSheet=null,this.symbolContext=null,this.defaultReplaceRange=null,this.nodePath=null}},e.prototype.isImportPathParent=function(e){return e===r.NodeType.Import},e.prototype.finalize=function(e){return e},e.prototype.findInNodePath=function(){for(var e=[],t=0;t=0;n--){var r=this.nodePath[n];if(-1!==e.indexOf(r.type))return r}return null},e.prototype.getCompletionsForDeclarationProperty=function(e,t){return this.getPropertyProposals(e,t)},e.prototype.getPropertyProposals=function(e,t){var r=this,i=this.isTriggerPropertyValueCompletionEnabled,l=this.isCompletePropertyWithSemicolonEnabled;return this.cssDataManager.getProperties().forEach((function(d){var p,h,u=!1;e?(p=r.getCompletionRange(e.getProperty()),h=d.name,c.isDefined(e.colonPosition)||(h+=": ",u=!0)):(p=r.getCompletionRange(null),h=d.name+": ",u=!0),!e&&l&&(h+="$0;"),e&&!e.semicolonPosition&&l&&r.offset>=r.textDocument.offsetAt(p.end)&&(h+="$0;");var f={label:d.name,documentation:o.getEntryDescription(d,r.doesSupportMarkdown()),tags:m(d)?[a.CompletionItemTag.Deprecated]:[],textEdit:a.TextEdit.replace(p,h),insertTextFormat:a.InsertTextFormat.Snippet,kind:a.CompletionItemKind.Property};d.restrictions||(u=!1),i&&u&&(f.command={title:"Suggest",command:"editor.action.triggerSuggest"});var g=(255-("number"==typeof d.relevance?Math.min(Math.max(d.relevance,0),99):50)).toString(16),b=s.startsWith(d.name,"-")?n.VendorPrefixed:n.Normal;f.sortText=b+"_"+g,t.items.push(f)})),this.completionParticipants.forEach((function(e){e.onCssProperty&&e.onCssProperty({propertyName:r.currentWord,range:r.defaultReplaceRange})})),t},Object.defineProperty(e.prototype,"isTriggerPropertyValueCompletionEnabled",{get:function(){var e,t;return null===(t=null===(e=this.documentSettings)||void 0===e?void 0:e.triggerPropertyValueCompletion)||void 0===t||t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isCompletePropertyWithSemicolonEnabled",{get:function(){var e,t;return null===(t=null===(e=this.documentSettings)||void 0===e?void 0:e.completePropertyWithSemicolon)||void 0===t||t},enumerable:!1,configurable:!0}),e.prototype.getCompletionsForDeclarationValue=function(e,t){for(var n=this,i=e.getFullPropertyName(),o=this.cssDataManager.getProperty(i),s=e.getValue()||null;s&&s.hasChildren();)s=s.findChildAtOffset(this.offset,!1);if(this.completionParticipants.forEach((function(e){e.onCssPropertyValue&&e.onCssPropertyValue({propertyName:i,propertyValue:n.currentWord,range:n.getCompletionRange(s)})})),o){if(o.restrictions)for(var l=0,c=o.restrictions;l=e.offset+2&&this.getVariableProposals(null,t),t},e.prototype.getVariableProposals=function(e,t){for(var i=0,o=this.getSymbolContext().findSymbolsAtOffset(this.offset,r.ReferenceType.Variable);i0){var s=this.currentWord.match(/^-?\d[\.\d+]*/);s&&(i=s[0],n.isIncomplete=i.length===this.currentWord.length)}else 0===this.currentWord.length&&(n.isIncomplete=!0);if(t&&t.parent&&t.parent.type===r.NodeType.Term&&(t=t.getParent()),e.restrictions)for(var l=0,c=e.restrictions;l=n.end?this.getCompletionForTopLevel(t):!n||this.offset<=n.offset?this.getCompletionsForSelector(e,e.isNested(),t):this.getCompletionsForDeclarations(e.getDeclarations(),t)},e.prototype.getCompletionsForSelector=function(e,t,i){var l=this,c=this.findInNodePath(r.NodeType.PseudoSelector,r.NodeType.IdentifierSelector,r.NodeType.ClassSelector,r.NodeType.ElementNameSelector);if(!c&&this.hasCharacterAtPosition(this.offset-this.currentWord.length-1,":")&&(this.currentWord=":"+this.currentWord,this.hasCharacterAtPosition(this.offset-this.currentWord.length-1,":")&&(this.currentWord=":"+this.currentWord),this.defaultReplaceRange=a.Range.create(a.Position.create(this.position.line,this.position.character-this.currentWord.length),this.position)),this.cssDataManager.getPseudoClasses().forEach((function(e){var t=g(e.name),r={label:e.name,textEdit:a.TextEdit.replace(l.getCompletionRange(c),t),documentation:o.getEntryDescription(e,l.doesSupportMarkdown()),tags:m(e)?[a.CompletionItemTag.Deprecated]:[],kind:a.CompletionItemKind.Function,insertTextFormat:e.name!==t?h:void 0};s.startsWith(e.name,":-")&&(r.sortText=n.VendorPrefixed),i.items.push(r)})),this.cssDataManager.getPseudoElements().forEach((function(e){var t=g(e.name),r={label:e.name,textEdit:a.TextEdit.replace(l.getCompletionRange(c),t),documentation:o.getEntryDescription(e,l.doesSupportMarkdown()),tags:m(e)?[a.CompletionItemTag.Deprecated]:[],kind:a.CompletionItemKind.Function,insertTextFormat:e.name!==t?h:void 0};s.startsWith(e.name,"::-")&&(r.sortText=n.VendorPrefixed),i.items.push(r)})),!t){for(var d=0,p=o.html5Tags;d0){var t=v.substr(e.offset,e.length);return"."!==t.charAt(0)||y[t]||(y[t]=!0,i.items.push({label:t,textEdit:a.TextEdit.replace(l.getCompletionRange(c),t),kind:a.CompletionItemKind.Keyword})),!1}return!0})),e&&e.isNested()){var w=e.getSelectors().findFirstChildBeforeOffset(this.offset);w&&0===e.getSelectors().getChildren().indexOf(w)&&this.getPropertyProposals(null,i)}return i},e.prototype.getCompletionsForDeclarations=function(e,t){if(!e||this.offset===e.offset)return t;var n=e.findFirstChildBeforeOffset(this.offset);if(!n)return this.getCompletionsForDeclarationProperty(null,t);if(n instanceof r.AbstractDeclaration){var i=n;if(!c.isDefined(i.colonPosition)||this.offset<=i.colonPosition)return this.getCompletionsForDeclarationProperty(i,t);if(c.isDefined(i.semicolonPosition)&&i.semicolonPositione.colonPosition&&this.getVariableProposals(e.getValue(),t),t},e.prototype.getCompletionsForExpression=function(e,t){var n=e.getParent();if(n instanceof r.FunctionArgument)return this.getCompletionsForFunctionArgument(n,n.getParent(),t),t;var i=e.findParent(r.NodeType.Declaration);if(!i)return this.getTermProposals(void 0,null,t),t;var o=e.findChildAtOffset(this.offset,!0);return o?o instanceof r.NumericValue||o instanceof r.Identifier?this.getCompletionsForDeclarationValue(i,t):t:this.getCompletionsForDeclarationValue(i,t)},e.prototype.getCompletionsForFunctionArgument=function(e,t,n){var r=t.getIdentifier();return r&&r.matches("var")&&(t.getArguments().hasChildren()&&t.getArguments().getChild(0)!==e||this.getVariableProposalsForCSSVarFunction(n)),n},e.prototype.getCompletionsForFunctionDeclaration=function(e,t){var n=e.getDeclarations();return n&&this.offset>n.offset&&this.offsete.lParent&&(!c.isDefined(e.rParent)||this.offset<=e.rParent)?this.getCompletionsForDeclarationProperty(null,t):t},e.prototype.getCompletionsForSupports=function(e,t){var n=e.getDeclarations();if(!n||this.offset<=n.offset){var i=e.findFirstChildBeforeOffset(this.offset);return i instanceof r.SupportsCondition?this.getCompletionsForSupportsCondition(i,t):t}return this.getCompletionForTopLevel(t)},e.prototype.getCompletionsForExtendsReference=function(e,t,n){return n},e.prototype.getCompletionForUriLiteralValue=function(e,t){var n,r,i;if(e.hasChildren()){var o=e.getChild(0);n=o.getText(),r=this.position,i=this.getCompletionRange(o)}else{n="",r=this.position;var s=this.textDocument.positionAt(e.offset+"url(".length);i=a.Range.create(s,s)}return this.completionParticipants.forEach((function(e){e.onCssURILiteralValue&&e.onCssURILiteralValue({uriValue:n,position:r,range:i})})),t},e.prototype.getCompletionForImportPath=function(e,t){var n=this;return this.completionParticipants.forEach((function(t){t.onCssImportPath&&t.onCssImportPath({pathValue:e.getText(),position:n.position,range:n.getCompletionRange(e)})})),t},e.prototype.hasCharacterAtPosition=function(e,t){var n=this.textDocument.getText();return e>=0&&e"),this.writeLine(t,r.join(""))}},e}();!function(e){function t(e){var t=e.match(/^['"](.*)["']$/);return t?t[1]:e}e.ensure=function(e,n){return n+t(e)+n},e.remove=t}(l||(l={}));var d=function(){this.id=0,this.attr=0,this.tag=0};function p(e,t){for(var r=new o,i=0,s=e.getChildren();i1){var p=t.cloneWithParent();r.addChild(p.findRoot()),r=p}r.append(c[d])}}break;case n.NodeType.SelectorPlaceholder:if(a.matches("@at-root"))return r;case n.NodeType.ElementNameSelector:var u=a.getText();r.addAttr("name","*"===u?"element":h(u));break;case n.NodeType.ClassSelector:r.addAttr("class",h(a.getText().substring(1)));break;case n.NodeType.IdentifierSelector:r.addAttr("id",h(a.getText().substring(1)));break;case n.NodeType.MixinDeclaration:r.addAttr("class",a.getName());break;case n.NodeType.PseudoSelector:r.addAttr(h(a.getText()),"");break;case n.NodeType.AttributeSelector:var m=a,f=m.getIdentifier();if(f){var g=m.getValue(),b=m.getOperator(),y=void 0;if(g&&b)switch(h(b.getText())){case"|=":y=l.remove(h(g.getText()))+"-…";break;case"^=":y=l.remove(h(g.getText()))+"…";break;case"$=":y="…"+l.remove(h(g.getText()));break;case"~=":y=" … "+l.remove(h(g.getText()))+" … ";break;case"*=":y="…"+l.remove(h(g.getText()))+"…";break;default:y=l.remove(h(g.getText()))}r.addAttr(h(f.getText()),y)}}}return r}function h(e){var t=new r.Scanner;t.setSource(e);var n=t.scanUnquotedString();return n?n.text:e}t.toElement=p;var u=function(){function e(e){this.cssDataManager=e}return e.prototype.selectorToMarkedString=function(e){var t=g(e);if(t){var n=new c('"').print(t);return n.push(this.selectorToSpecificityMarkedString(e)),n}return[]},e.prototype.simpleSelectorToMarkedString=function(e){var t=p(e),n=new c('"').print(t);return n.push(this.selectorToSpecificityMarkedString(e)),n},e.prototype.isPseudoElementIdentifier=function(e){var t=e.match(/^::?([\w-]+)/);return!!t&&!!this.cssDataManager.getPseudoElement("::"+t[1])},e.prototype.selectorToSpecificityMarkedString=function(e){var t=this,r=function(e){for(var i=0,s=e.getChildren();i0&&r(a)}},o=new d;return r(e),i("specificity","[Selector Specificity](https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity): ({0}, {1}, {2})",o.id,o.attr,o.tag)},e}();t.SelectorPrinting=u;var m=function(){function e(e){this.prev=null,this.element=e}return e.prototype.processSelector=function(e){var t=null;if(!(this.element instanceof s)&&e.getChildren().some((function(e){return e.hasChildren()&&e.getChild(0).type===n.NodeType.SelectorCombinator}))){var r=this.element.findRoot();r.parent instanceof s&&(t=this.element,this.element=r.parent,this.element.removeChild(r),this.prev=null)}for(var i=0,o=e.getChildren();i=0;l--){var c=r[l].getSelectors().getChild(0);c&&a.processSelector(c)}return a.processSelector(e),t}t.selectorToElement=g})),function(e){if("object"==typeof module&&"object"==typeof module.exports){var t=e(require,exports);void 0!==t&&(module.exports=t)}else"function"==typeof define&&define.amd&&define("vscode-css-languageservice/services/cssHover",["require","exports","../parser/cssNodes","../languageFacts/facts","./selectorPrinting","../utils/strings","../cssLanguageTypes","../utils/objects"],e)}((function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CSSHover=void 0;var n=e("../parser/cssNodes"),r=e("../languageFacts/facts"),i=e("./selectorPrinting"),o=e("../utils/strings"),s=e("../cssLanguageTypes"),a=e("../utils/objects"),l=function(){function e(e,t){this.clientCapabilities=e,this.cssDataManager=t,this.selectorPrinting=new i.SelectorPrinting(t)}return e.prototype.configure=function(e){this.defaultSettings=e},e.prototype.doHover=function(e,t,i,a){function l(t){return s.Range.create(e.positionAt(t.offset),e.positionAt(t.end))}void 0===a&&(a=this.defaultSettings);for(var c=e.offsetAt(t),d=n.getNodePath(i,c),p=null,h=0;h0&&i[i.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]=a.length/2&&l.push({property:e.name,score:t})})),l.sort((function(e,t){return t.score-e.score||e.property.localeCompare(t.property)}));for(var c=3,d=0,p=l;d=0;c--){var d=l[c];if(d instanceof n.Declaration){var p=d.getProperty();if(p&&p.offset===s&&p.end===a)return void this.getFixesForUnknownProperty(e,p,r,o)}}},e}();t.CSSCodeActions=a})),function(e){if("object"==typeof module&&"object"==typeof module.exports){var t=e(require,exports);void 0!==t&&(module.exports=t)}else"function"==typeof define&&define.amd&&define("vscode-css-languageservice/services/lintUtil",["require","exports","../utils/arrays"],e)}((function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Element=void 0;var n=e("../utils/arrays"),r=function(e){this.fullPropertyName=e.getFullPropertyName().toLowerCase(),this.node=e};function i(e,t,r,i){var o=e[t];o.value=r,r&&(n.includes(o.properties,i)||o.properties.push(i))}function o(e,t,n,r){"top"===t||"right"===t||"bottom"===t||"left"===t?i(e,t,n,r):function(e,t,n){i(e,"top",t,n),i(e,"right",t,n),i(e,"bottom",t,n),i(e,"left",t,n)}(e,n,r)}function s(e,t,n){switch(t.length){case 1:o(e,void 0,t[0],n);break;case 2:o(e,"top",t[0],n),o(e,"bottom",t[0],n),o(e,"right",t[1],n),o(e,"left",t[1],n);break;case 3:o(e,"top",t[0],n),o(e,"right",t[1],n),o(e,"left",t[1],n),o(e,"bottom",t[2],n);break;case 4:o(e,"top",t[0],n),o(e,"right",t[1],n),o(e,"bottom",t[2],n),o(e,"left",t[3],n)}}function a(e,t){for(var n=0,r=t;n0)for(var w=this.fetch(r,"float"),x=0;x0)for(w=this.fetch(r,"vertical-align"),x=0;x1)for(var D=0;D".charCodeAt(0),m=".".charCodeAt(0),f=("@".charCodeAt(0),n.TokenType.CustomToken);t.VariableName=f++,t.InterpolationFunction=f++,t.Default=f++,t.EqualsOperator=f++,t.NotEqualsOperator=f++,t.GreaterEqualsOperator=f++,t.SmallerEqualsOperator=f++,t.Ellipsis=f++,t.Module=f++;var g=function(e){function f(){return null!==e&&e.apply(this,arguments)||this}return __extends(f,e),f.prototype.scanNext=function(r){if(this.stream.advanceIfChar(a)){var i=["$"];if(this.ident(i))return this.finishToken(r,t.VariableName,i.join(""));this.stream.goBackTo(r)}return this.stream.advanceIfChars([l,c])?this.finishToken(r,t.InterpolationFunction):this.stream.advanceIfChars([d,d])?this.finishToken(r,t.EqualsOperator):this.stream.advanceIfChars([p,d])?this.finishToken(r,t.NotEqualsOperator):this.stream.advanceIfChar(h)?this.stream.advanceIfChar(d)?this.finishToken(r,t.SmallerEqualsOperator):this.finishToken(r,n.TokenType.Delim):this.stream.advanceIfChar(u)?this.stream.advanceIfChar(d)?this.finishToken(r,t.GreaterEqualsOperator):this.finishToken(r,n.TokenType.Delim):this.stream.advanceIfChars([m,m,m])?this.finishToken(r,t.Ellipsis):e.prototype.scanNext.call(this,r)},f.prototype.comment=function(){return!!e.prototype.comment.call(this)||!(this.inURL||!this.stream.advanceIfChars([r,r]))&&(this.stream.advanceWhileChar((function(e){switch(e){case i:case o:case s:return!1;default:return!0}})),!0)},f}(n.Scanner);t.SCSSScanner=g})),function(e){if("object"==typeof module&&"object"==typeof module.exports){var t=e(require,exports);void 0!==t&&(module.exports=t)}else"function"==typeof define&&define.amd&&define("vscode-css-languageservice/parser/scssErrors",["require","exports","vscode-nls"],e)}((function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SCSSParseError=t.SCSSIssueType=void 0;var n=e("vscode-nls").loadMessageBundle(),r=function(e,t){this.id=e,this.message=t};t.SCSSIssueType=r,t.SCSSParseError={FromExpected:new r("scss-fromexpected",n("expected.from","'from' expected")),ThroughOrToExpected:new r("scss-throughexpected",n("expected.through","'through' or 'to' expected")),InExpected:new r("scss-fromexpected",n("expected.in","'in' expected"))}}));__extends=this&&this.__extends||function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();!function(e){if("object"==typeof module&&"object"==typeof module.exports){var t=e(require,exports);void 0!==t&&(module.exports=t)}else"function"==typeof define&&define.amd&&define("vscode-css-languageservice/parser/scssParser",["require","exports","./scssScanner","./cssScanner","./cssParser","./cssNodes","./scssErrors","./cssErrors"],e)}((function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SCSSParser=void 0;var n=e("./scssScanner"),r=e("./cssScanner"),i=e("./cssParser"),o=e("./cssNodes"),s=e("./scssErrors"),a=e("./cssErrors"),l=function(e){function t(){return e.call(this,new n.SCSSScanner)||this}return __extends(t,e),t.prototype._parseStylesheetStatement=function(t){return void 0===t&&(t=!1),this.peek(r.TokenType.AtKeyword)?this._parseWarnAndDebug()||this._parseControlStatement()||this._parseMixinDeclaration()||this._parseMixinContent()||this._parseMixinReference()||this._parseFunctionDeclaration()||this._parseForward()||this._parseUse()||this._parseRuleset(t)||e.prototype._parseStylesheetAtStatement.call(this,t):this._parseRuleset(!0)||this._parseVariableDeclaration()},t.prototype._parseImport=function(){if(!this.peekKeyword("@import"))return null;var e=this.create(o.Import);if(this.consumeToken(),!e.addChild(this._parseURILiteral())&&!e.addChild(this._parseStringLiteral()))return this.finish(e,a.ParseError.URIOrStringExpected);for(;this.accept(r.TokenType.Comma);)if(!e.addChild(this._parseURILiteral())&&!e.addChild(this._parseStringLiteral()))return this.finish(e,a.ParseError.URIOrStringExpected);return this.peek(r.TokenType.SemiColon)||this.peek(r.TokenType.EOF)||e.setMedialist(this._parseMediaQueryList()),this.finish(e)},t.prototype._parseVariableDeclaration=function(e){if(void 0===e&&(e=[]),!this.peek(n.VariableName))return null;var t=this.create(o.VariableDeclaration);if(!t.setVariable(this._parseVariable()))return null;if(!this.accept(r.TokenType.Colon))return this.finish(t,a.ParseError.ColonExpected);if(this.prevToken&&(t.colonPosition=this.prevToken.offset),!t.setValue(this._parseExpr()))return this.finish(t,a.ParseError.VariableValueExpected,[],e);for(;this.peek(r.TokenType.Exclamation);)if(t.addChild(this._tryParsePrio()));else{if(this.consumeToken(),!this.peekRegExp(r.TokenType.Ident,/^(default|global)$/))return this.finish(t,a.ParseError.UnknownKeyword);this.consumeToken()}return this.peek(r.TokenType.SemiColon)&&(t.semicolonPosition=this.token.offset),this.finish(t)},t.prototype._parseMediaContentStart=function(){return this._parseInterpolation()},t.prototype._parseMediaFeatureName=function(){return this._parseModuleMember()||this._parseFunction()||this._parseIdent()||this._parseVariable()},t.prototype._parseKeyframeSelector=function(){return this._tryParseKeyframeSelector()||this._parseControlStatement(this._parseKeyframeSelector.bind(this))||this._parseVariableDeclaration()||this._parseMixinContent()},t.prototype._parseVariable=function(){if(!this.peek(n.VariableName))return null;var e=this.create(o.Variable);return this.consumeToken(),e},t.prototype._parseModuleMember=function(){var e=this.mark(),t=this.create(o.Module);return t.setIdentifier(this._parseIdent([o.ReferenceType.Module]))?this.hasWhitespace()||!this.acceptDelim(".")||this.hasWhitespace()?(this.restoreAtMark(e),null):t.addChild(this._parseVariable()||this._parseFunction())?t:this.finish(t,a.ParseError.IdentifierOrVariableExpected):null},t.prototype._parseIdent=function(e){var t=this;if(!this.peek(r.TokenType.Ident)&&!this.peek(n.InterpolationFunction)&&!this.peekDelim("-"))return null;var i=this.create(o.Identifier);i.referenceTypes=e,i.isCustomProperty=this.peekRegExp(r.TokenType.Ident,/^--/);for(var s,a=!1;(this.accept(r.TokenType.Ident)||i.addChild((s=void 0,s=t.mark(),t.acceptDelim("-")&&(t.hasWhitespace()||t.acceptDelim("-"),t.hasWhitespace())?(t.restoreAtMark(s),null):t._parseInterpolation()))||a&&this.acceptRegexp(/^[\w-]/))&&(a=!0,!this.hasWhitespace()););return a?this.finish(i):null},t.prototype._parseTermExpression=function(){return this._parseModuleMember()||this._parseVariable()||this._parseSelectorCombinator()||e.prototype._parseTermExpression.call(this)},t.prototype._parseInterpolation=function(){if(this.peek(n.InterpolationFunction)){var e=this.create(o.Interpolation);return this.consumeToken(),e.addChild(this._parseExpr())||this._parseSelectorCombinator()?this.accept(r.TokenType.CurlyR)?this.finish(e):this.finish(e,a.ParseError.RightCurlyExpected):this.accept(r.TokenType.CurlyR)?this.finish(e):this.finish(e,a.ParseError.ExpressionExpected)}return null},t.prototype._parseOperator=function(){if(this.peek(n.EqualsOperator)||this.peek(n.NotEqualsOperator)||this.peek(n.GreaterEqualsOperator)||this.peek(n.SmallerEqualsOperator)||this.peekDelim(">")||this.peekDelim("<")||this.peekIdent("and")||this.peekIdent("or")||this.peekDelim("%")){var t=this.createNode(o.NodeType.Operator);return this.consumeToken(),this.finish(t)}return e.prototype._parseOperator.call(this)},t.prototype._parseUnaryOperator=function(){if(this.peekIdent("not")){var t=this.create(o.Node);return this.consumeToken(),this.finish(t)}return e.prototype._parseUnaryOperator.call(this)},t.prototype._parseRuleSetDeclaration=function(){return this.peek(r.TokenType.AtKeyword)?this._parseKeyframe()||this._parseImport()||this._parseMedia(!0)||this._parseFontFace()||this._parseWarnAndDebug()||this._parseControlStatement()||this._parseFunctionDeclaration()||this._parseExtends()||this._parseMixinReference()||this._parseMixinContent()||this._parseMixinDeclaration()||this._parseRuleset(!0)||this._parseSupports(!0)||e.prototype._parseRuleSetDeclarationAtStatement.call(this):this._parseVariableDeclaration()||this._tryParseRuleset(!0)||e.prototype._parseRuleSetDeclaration.call(this)},t.prototype._parseDeclaration=function(e){var t=this._tryParseCustomPropertyDeclaration(e);if(t)return t;var n=this.create(o.Declaration);if(!n.setProperty(this._parseProperty()))return null;if(!this.accept(r.TokenType.Colon))return this.finish(n,a.ParseError.ColonExpected,[r.TokenType.Colon],e||[r.TokenType.SemiColon]);this.prevToken&&(n.colonPosition=this.prevToken.offset);var i=!1;if(n.setValue(this._parseExpr())&&(i=!0,n.addChild(this._parsePrio())),this.peek(r.TokenType.CurlyL))n.setNestedProperties(this._parseNestedProperties());else if(!i)return this.finish(n,a.ParseError.PropertyValueExpected);return this.peek(r.TokenType.SemiColon)&&(n.semicolonPosition=this.token.offset),this.finish(n)},t.prototype._parseNestedProperties=function(){var e=this.create(o.NestedProperties);return this._parseBody(e,this._parseDeclaration.bind(this))},t.prototype._parseExtends=function(){if(this.peekKeyword("@extend")){var e=this.create(o.ExtendsReference);if(this.consumeToken(),!e.getSelectors().addChild(this._parseSimpleSelector()))return this.finish(e,a.ParseError.SelectorExpected);for(;this.accept(r.TokenType.Comma);)e.getSelectors().addChild(this._parseSimpleSelector());return this.accept(r.TokenType.Exclamation)&&!this.acceptIdent("optional")?this.finish(e,a.ParseError.UnknownKeyword):this.finish(e)}return null},t.prototype._parseSimpleSelectorBody=function(){return this._parseSelectorCombinator()||this._parseSelectorPlaceholder()||e.prototype._parseSimpleSelectorBody.call(this)},t.prototype._parseSelectorCombinator=function(){if(this.peekDelim("&")){var e=this.createNode(o.NodeType.SelectorCombinator);for(this.consumeToken();!this.hasWhitespace()&&(this.acceptDelim("-")||this.accept(r.TokenType.Num)||this.accept(r.TokenType.Dimension)||e.addChild(this._parseIdent())||this.acceptDelim("&")););return this.finish(e)}return null},t.prototype._parseSelectorPlaceholder=function(){if(this.peekDelim("%")){var e=this.createNode(o.NodeType.SelectorPlaceholder);return this.consumeToken(),this._parseIdent(),this.finish(e)}if(this.peekKeyword("@at-root")){e=this.createNode(o.NodeType.SelectorPlaceholder);return this.consumeToken(),this.finish(e)}return null},t.prototype._parseElementName=function(){var t=this.mark(),n=e.prototype._parseElementName.call(this);return n&&!this.hasWhitespace()&&this.peek(r.TokenType.ParenthesisL)?(this.restoreAtMark(t),null):n},t.prototype._tryParsePseudoIdentifier=function(){return this._parseInterpolation()||e.prototype._tryParsePseudoIdentifier.call(this)},t.prototype._parseWarnAndDebug=function(){if(!this.peekKeyword("@debug")&&!this.peekKeyword("@warn")&&!this.peekKeyword("@error"))return null;var e=this.createNode(o.NodeType.Debug);return this.consumeToken(),e.addChild(this._parseExpr()),this.finish(e)},t.prototype._parseControlStatement=function(e){return void 0===e&&(e=this._parseRuleSetDeclaration.bind(this)),this.peek(r.TokenType.AtKeyword)?this._parseIfStatement(e)||this._parseForStatement(e)||this._parseEachStatement(e)||this._parseWhileStatement(e):null},t.prototype._parseIfStatement=function(e){return this.peekKeyword("@if")?this._internalParseIfStatement(e):null},t.prototype._internalParseIfStatement=function(e){var t=this.create(o.IfStatement);if(this.consumeToken(),!t.setExpression(this._parseExpr(!0)))return this.finish(t,a.ParseError.ExpressionExpected);if(this._parseBody(t,e),this.acceptKeyword("@else"))if(this.peekIdent("if"))t.setElseClause(this._internalParseIfStatement(e));else if(this.peek(r.TokenType.CurlyL)){var n=this.create(o.ElseStatement);this._parseBody(n,e),t.setElseClause(n)}return this.finish(t)},t.prototype._parseForStatement=function(e){if(!this.peekKeyword("@for"))return null;var t=this.create(o.ForStatement);return this.consumeToken(),t.setVariable(this._parseVariable())?this.acceptIdent("from")?t.addChild(this._parseBinaryExpr())?this.acceptIdent("to")||this.acceptIdent("through")?t.addChild(this._parseBinaryExpr())?this._parseBody(t,e):this.finish(t,a.ParseError.ExpressionExpected,[r.TokenType.CurlyR]):this.finish(t,s.SCSSParseError.ThroughOrToExpected,[r.TokenType.CurlyR]):this.finish(t,a.ParseError.ExpressionExpected,[r.TokenType.CurlyR]):this.finish(t,s.SCSSParseError.FromExpected,[r.TokenType.CurlyR]):this.finish(t,a.ParseError.VariableNameExpected,[r.TokenType.CurlyR])},t.prototype._parseEachStatement=function(e){if(!this.peekKeyword("@each"))return null;var t=this.create(o.EachStatement);this.consumeToken();var n=t.getVariables();if(!n.addChild(this._parseVariable()))return this.finish(t,a.ParseError.VariableNameExpected,[r.TokenType.CurlyR]);for(;this.accept(r.TokenType.Comma);)if(!n.addChild(this._parseVariable()))return this.finish(t,a.ParseError.VariableNameExpected,[r.TokenType.CurlyR]);return this.finish(n),this.acceptIdent("in")?t.addChild(this._parseExpr())?this._parseBody(t,e):this.finish(t,a.ParseError.ExpressionExpected,[r.TokenType.CurlyR]):this.finish(t,s.SCSSParseError.InExpected,[r.TokenType.CurlyR])},t.prototype._parseWhileStatement=function(e){if(!this.peekKeyword("@while"))return null;var t=this.create(o.WhileStatement);return this.consumeToken(),t.addChild(this._parseBinaryExpr())?this._parseBody(t,e):this.finish(t,a.ParseError.ExpressionExpected,[r.TokenType.CurlyR])},t.prototype._parseFunctionBodyDeclaration=function(){return this._parseVariableDeclaration()||this._parseReturnStatement()||this._parseWarnAndDebug()||this._parseControlStatement(this._parseFunctionBodyDeclaration.bind(this))},t.prototype._parseFunctionDeclaration=function(){if(!this.peekKeyword("@function"))return null;var e=this.create(o.FunctionDeclaration);if(this.consumeToken(),!e.setIdentifier(this._parseIdent([o.ReferenceType.Function])))return this.finish(e,a.ParseError.IdentifierExpected,[r.TokenType.CurlyR]);if(!this.accept(r.TokenType.ParenthesisL))return this.finish(e,a.ParseError.LeftParenthesisExpected,[r.TokenType.CurlyR]);if(e.getParameters().addChild(this._parseParameterDeclaration()))for(;this.accept(r.TokenType.Comma)&&!this.peek(r.TokenType.ParenthesisR);)if(!e.getParameters().addChild(this._parseParameterDeclaration()))return this.finish(e,a.ParseError.VariableNameExpected);return this.accept(r.TokenType.ParenthesisR)?this._parseBody(e,this._parseFunctionBodyDeclaration.bind(this)):this.finish(e,a.ParseError.RightParenthesisExpected,[r.TokenType.CurlyR])},t.prototype._parseReturnStatement=function(){if(!this.peekKeyword("@return"))return null;var e=this.createNode(o.NodeType.ReturnStatement);return this.consumeToken(),e.addChild(this._parseExpr())?this.finish(e):this.finish(e,a.ParseError.ExpressionExpected)},t.prototype._parseMixinDeclaration=function(){if(!this.peekKeyword("@mixin"))return null;var e=this.create(o.MixinDeclaration);if(this.consumeToken(),!e.setIdentifier(this._parseIdent([o.ReferenceType.Mixin])))return this.finish(e,a.ParseError.IdentifierExpected,[r.TokenType.CurlyR]);if(this.accept(r.TokenType.ParenthesisL)){if(e.getParameters().addChild(this._parseParameterDeclaration()))for(;this.accept(r.TokenType.Comma)&&!this.peek(r.TokenType.ParenthesisR);)if(!e.getParameters().addChild(this._parseParameterDeclaration()))return this.finish(e,a.ParseError.VariableNameExpected);if(!this.accept(r.TokenType.ParenthesisR))return this.finish(e,a.ParseError.RightParenthesisExpected,[r.TokenType.CurlyR])}return this._parseBody(e,this._parseRuleSetDeclaration.bind(this))},t.prototype._parseParameterDeclaration=function(){var e=this.create(o.FunctionParameter);return e.setIdentifier(this._parseVariable())?(this.accept(n.Ellipsis),this.accept(r.TokenType.Colon)&&!e.setDefaultValue(this._parseExpr(!0))?this.finish(e,a.ParseError.VariableValueExpected,[],[r.TokenType.Comma,r.TokenType.ParenthesisR]):this.finish(e)):null},t.prototype._parseMixinContent=function(){if(!this.peekKeyword("@content"))return null;var e=this.create(o.MixinContentReference);if(this.consumeToken(),this.accept(r.TokenType.ParenthesisL)){if(e.getArguments().addChild(this._parseFunctionArgument()))for(;this.accept(r.TokenType.Comma)&&!this.peek(r.TokenType.ParenthesisR);)if(!e.getArguments().addChild(this._parseFunctionArgument()))return this.finish(e,a.ParseError.ExpressionExpected);if(!this.accept(r.TokenType.ParenthesisR))return this.finish(e,a.ParseError.RightParenthesisExpected)}return this.finish(e)},t.prototype._parseMixinReference=function(){if(!this.peekKeyword("@include"))return null;var e=this.create(o.MixinReference);this.consumeToken();var t=this._parseIdent([o.ReferenceType.Mixin]);if(!e.setIdentifier(t))return this.finish(e,a.ParseError.IdentifierExpected,[r.TokenType.CurlyR]);if(!this.hasWhitespace()&&this.acceptDelim(".")&&!this.hasWhitespace()){var n=this._parseIdent([o.ReferenceType.Mixin]);if(!n)return this.finish(e,a.ParseError.IdentifierExpected,[r.TokenType.CurlyR]);var i=this.create(o.Module);t.referenceTypes=[o.ReferenceType.Module],i.setIdentifier(t),e.setIdentifier(n),e.addChild(i)}if(this.accept(r.TokenType.ParenthesisL)){if(e.getArguments().addChild(this._parseFunctionArgument()))for(;this.accept(r.TokenType.Comma)&&!this.peek(r.TokenType.ParenthesisR);)if(!e.getArguments().addChild(this._parseFunctionArgument()))return this.finish(e,a.ParseError.ExpressionExpected);if(!this.accept(r.TokenType.ParenthesisR))return this.finish(e,a.ParseError.RightParenthesisExpected)}return(this.peekIdent("using")||this.peek(r.TokenType.CurlyL))&&e.setContent(this._parseMixinContentDeclaration()),this.finish(e)},t.prototype._parseMixinContentDeclaration=function(){var e=this.create(o.MixinContentDeclaration);if(this.acceptIdent("using")){if(!this.accept(r.TokenType.ParenthesisL))return this.finish(e,a.ParseError.LeftParenthesisExpected,[r.TokenType.CurlyL]);if(e.getParameters().addChild(this._parseParameterDeclaration()))for(;this.accept(r.TokenType.Comma)&&!this.peek(r.TokenType.ParenthesisR);)if(!e.getParameters().addChild(this._parseParameterDeclaration()))return this.finish(e,a.ParseError.VariableNameExpected);if(!this.accept(r.TokenType.ParenthesisR))return this.finish(e,a.ParseError.RightParenthesisExpected,[r.TokenType.CurlyL])}return this.peek(r.TokenType.CurlyL)&&this._parseBody(e,this._parseMixinReferenceBodyStatement.bind(this)),this.finish(e)},t.prototype._parseMixinReferenceBodyStatement=function(){return this._tryParseKeyframeSelector()||this._parseRuleSetDeclaration()},t.prototype._parseFunctionArgument=function(){var e=this.create(o.FunctionArgument),t=this.mark(),i=this._parseVariable();if(i)if(this.accept(r.TokenType.Colon))e.setIdentifier(i);else{if(this.accept(n.Ellipsis))return e.setValue(i),this.finish(e);this.restoreAtMark(t)}return e.setValue(this._parseExpr(!0))?(this.accept(n.Ellipsis),e.addChild(this._parsePrio()),this.finish(e)):e.setValue(this._tryParsePrio())?this.finish(e):null},t.prototype._parseURLArgument=function(){var t=this.mark(),n=e.prototype._parseURLArgument.call(this);if(!n||!this.peek(r.TokenType.ParenthesisR)){this.restoreAtMark(t);var i=this.create(o.Node);return i.addChild(this._parseBinaryExpr()),this.finish(i)}return n},t.prototype._parseOperation=function(){if(!this.peek(r.TokenType.ParenthesisL))return null;var e=this.create(o.Node);for(this.consumeToken();e.addChild(this._parseListElement());)this.accept(r.TokenType.Comma);return this.accept(r.TokenType.ParenthesisR)?this.finish(e):this.finish(e,a.ParseError.RightParenthesisExpected)},t.prototype._parseListElement=function(){var e=this.create(o.ListEntry),t=this._parseBinaryExpr();if(!t)return null;if(this.accept(r.TokenType.Colon)){if(e.setKey(t),!e.setValue(this._parseBinaryExpr()))return this.finish(e,a.ParseError.ExpressionExpected)}else e.setValue(t);return this.finish(e)},t.prototype._parseUse=function(){if(!this.peekKeyword("@use"))return null;var e=this.create(o.Use);if(this.consumeToken(),!e.addChild(this._parseStringLiteral()))return this.finish(e,a.ParseError.StringLiteralExpected);if(!this.peek(r.TokenType.SemiColon)&&!this.peek(r.TokenType.EOF)){if(!this.peekRegExp(r.TokenType.Ident,/as|with/))return this.finish(e,a.ParseError.UnknownKeyword);if(this.acceptIdent("as")&&!e.setIdentifier(this._parseIdent([o.ReferenceType.Module]))&&!this.acceptDelim("*"))return this.finish(e,a.ParseError.IdentifierOrWildcardExpected);if(this.acceptIdent("with")){if(!this.accept(r.TokenType.ParenthesisL))return this.finish(e,a.ParseError.LeftParenthesisExpected,[r.TokenType.ParenthesisR]);if(!e.getParameters().addChild(this._parseModuleConfigDeclaration()))return this.finish(e,a.ParseError.VariableNameExpected);for(;this.accept(r.TokenType.Comma)&&!this.peek(r.TokenType.ParenthesisR);)if(!e.getParameters().addChild(this._parseModuleConfigDeclaration()))return this.finish(e,a.ParseError.VariableNameExpected);if(!this.accept(r.TokenType.ParenthesisR))return this.finish(e,a.ParseError.RightParenthesisExpected)}}return this.accept(r.TokenType.SemiColon)||this.accept(r.TokenType.EOF)?this.finish(e):this.finish(e,a.ParseError.SemiColonExpected)},t.prototype._parseModuleConfigDeclaration=function(){var e=this.create(o.ModuleConfiguration);return e.setIdentifier(this._parseVariable())?this.accept(r.TokenType.Colon)&&e.setValue(this._parseExpr(!0))?!this.accept(r.TokenType.Exclamation)||!this.hasWhitespace()&&this.acceptIdent("default")?this.finish(e):this.finish(e,a.ParseError.UnknownKeyword):this.finish(e,a.ParseError.VariableValueExpected,[],[r.TokenType.Comma,r.TokenType.ParenthesisR]):null},t.prototype._parseForward=function(){if(!this.peekKeyword("@forward"))return null;var e=this.create(o.Forward);if(this.consumeToken(),!e.addChild(this._parseStringLiteral()))return this.finish(e,a.ParseError.StringLiteralExpected);if(this.acceptIdent("with")){if(!this.accept(r.TokenType.ParenthesisL))return this.finish(e,a.ParseError.LeftParenthesisExpected,[r.TokenType.ParenthesisR]);if(!e.getParameters().addChild(this._parseModuleConfigDeclaration()))return this.finish(e,a.ParseError.VariableNameExpected);for(;this.accept(r.TokenType.Comma)&&!this.peek(r.TokenType.ParenthesisR);)if(!e.getParameters().addChild(this._parseModuleConfigDeclaration()))return this.finish(e,a.ParseError.VariableNameExpected);if(!this.accept(r.TokenType.ParenthesisR))return this.finish(e,a.ParseError.RightParenthesisExpected)}if(!this.peek(r.TokenType.SemiColon)&&!this.peek(r.TokenType.EOF)){if(!this.peekRegExp(r.TokenType.Ident,/as|hide|show/))return this.finish(e,a.ParseError.UnknownKeyword);if(this.acceptIdent("as")){var t=this._parseIdent([o.ReferenceType.Forward]);if(!e.setIdentifier(t))return this.finish(e,a.ParseError.IdentifierExpected);if(this.hasWhitespace()||!this.acceptDelim("*"))return this.finish(e,a.ParseError.WildcardExpected)}if((this.peekIdent("hide")||this.peekIdent("show"))&&!e.addChild(this._parseForwardVisibility()))return this.finish(e,a.ParseError.IdentifierOrVariableExpected)}return this.accept(r.TokenType.SemiColon)||this.accept(r.TokenType.EOF)?this.finish(e):this.finish(e,a.ParseError.SemiColonExpected)},t.prototype._parseForwardVisibility=function(){var e=this.create(o.ForwardVisibility);for(e.setIdentifier(this._parseIdent());e.addChild(this._parseVariable()||this._parseIdent());)this.accept(r.TokenType.Comma);return e.getChildren().length>1?e:null},t.prototype._parseSupportsCondition=function(){return this._parseInterpolation()||e.prototype._parseSupportsCondition.call(this)},t}(i.Parser);t.SCSSParser=l}));__extends=this&&this.__extends||function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();!function(e){if("object"==typeof module&&"object"==typeof module.exports){var t=e(require,exports);void 0!==t&&(module.exports=t)}else"function"==typeof define&&define.amd&&define("vscode-css-languageservice/services/scssCompletion",["require","exports","./cssCompletion","../parser/cssNodes","../cssLanguageTypes","vscode-nls"],e)}((function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SCSSCompletion=void 0;var n=e("./cssCompletion"),r=e("../parser/cssNodes"),i=e("../cssLanguageTypes"),o=e("vscode-nls").loadMessageBundle(),s=function(e){function t(n,r){var i=e.call(this,"$",n,r)||this;return a(t.scssModuleLoaders),a(t.scssModuleBuiltIns),i}return __extends(t,e),t.prototype.isImportPathParent=function(t){return t===r.NodeType.Forward||t===r.NodeType.Use||e.prototype.isImportPathParent.call(this,t)},t.prototype.getCompletionForImportPath=function(n,o){var s=n.getParent().type;if(s===r.NodeType.Forward||s===r.NodeType.Use)for(var a=0,l=t.scssModuleBuiltIns;a0){var t="string"==typeof e.documentation?{kind:"markdown",value:e.documentation}:{kind:"markdown",value:e.documentation.value};t.value+="\n\n",t.value+=e.references.map((function(e){return"["+e.name+"]("+e.url+")"})).join(" | "),e.documentation=t}}))}t.SCSSCompletion=s}));__extends=this&&this.__extends||function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();!function(e){if("object"==typeof module&&"object"==typeof module.exports){var t=e(require,exports);void 0!==t&&(module.exports=t)}else"function"==typeof define&&define.amd&&define("vscode-css-languageservice/parser/lessScanner",["require","exports","./cssScanner"],e)}((function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.LESSScanner=t.Ellipsis=void 0;var n=e("./cssScanner"),r="/".charCodeAt(0),i="\n".charCodeAt(0),o="\r".charCodeAt(0),s="\f".charCodeAt(0),a="`".charCodeAt(0),l=".".charCodeAt(0),c=n.TokenType.CustomToken;t.Ellipsis=c++;var d=function(e){function c(){return null!==e&&e.apply(this,arguments)||this}return __extends(c,e),c.prototype.scanNext=function(n){var r=this.escapedJavaScript();return null!==r?this.finishToken(n,r):this.stream.advanceIfChars([l,l,l])?this.finishToken(n,t.Ellipsis):e.prototype.scanNext.call(this,n)},c.prototype.comment=function(){return!!e.prototype.comment.call(this)||!(this.inURL||!this.stream.advanceIfChars([r,r]))&&(this.stream.advanceWhileChar((function(e){switch(e){case i:case o:case s:return!1;default:return!0}})),!0)},c.prototype.escapedJavaScript=function(){return this.stream.peekChar()===a?(this.stream.advance(1),this.stream.advanceWhileChar((function(e){return e!==a})),this.stream.advanceIfChar(a)?n.TokenType.EscapedJavaScript:n.TokenType.BadEscapedJavaScript):null},c}(n.Scanner);t.LESSScanner=d}));__extends=this&&this.__extends||function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();!function(e){if("object"==typeof module&&"object"==typeof module.exports){var t=e(require,exports);void 0!==t&&(module.exports=t)}else"function"==typeof define&&define.amd&&define("vscode-css-languageservice/parser/lessParser",["require","exports","./lessScanner","./cssScanner","./cssParser","./cssNodes","./cssErrors"],e)}((function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.LESSParser=void 0;var n=e("./lessScanner"),r=e("./cssScanner"),i=e("./cssParser"),o=e("./cssNodes"),s=e("./cssErrors"),a=function(e){function t(){return e.call(this,new n.LESSScanner)||this}return __extends(t,e),t.prototype._parseStylesheetStatement=function(t){return void 0===t&&(t=!1),this.peek(r.TokenType.AtKeyword)?this._parseVariableDeclaration()||this._parsePlugin()||e.prototype._parseStylesheetAtStatement.call(this,t):this._tryParseMixinDeclaration()||this._tryParseMixinReference()||this._parseFunction()||this._parseRuleset(!0)},t.prototype._parseImport=function(){if(!this.peekKeyword("@import")&&!this.peekKeyword("@import-once"))return null;var e=this.create(o.Import);if(this.consumeToken(),this.accept(r.TokenType.ParenthesisL)){if(!this.accept(r.TokenType.Ident))return this.finish(e,s.ParseError.IdentifierExpected,[r.TokenType.SemiColon]);do{if(!this.accept(r.TokenType.Comma))break}while(this.accept(r.TokenType.Ident));if(!this.accept(r.TokenType.ParenthesisR))return this.finish(e,s.ParseError.RightParenthesisExpected,[r.TokenType.SemiColon])}return e.addChild(this._parseURILiteral())||e.addChild(this._parseStringLiteral())?(this.peek(r.TokenType.SemiColon)||this.peek(r.TokenType.EOF)||e.setMedialist(this._parseMediaQueryList()),this.finish(e)):this.finish(e,s.ParseError.URIOrStringExpected,[r.TokenType.SemiColon])},t.prototype._parsePlugin=function(){if(!this.peekKeyword("@plugin"))return null;var e=this.createNode(o.NodeType.Plugin);return this.consumeToken(),e.addChild(this._parseStringLiteral())?this.accept(r.TokenType.SemiColon)?this.finish(e):this.finish(e,s.ParseError.SemiColonExpected):this.finish(e,s.ParseError.StringLiteralExpected)},t.prototype._parseMediaQuery=function(t){var n=e.prototype._parseMediaQuery.call(this,t);if(!n){var r=this.create(o.MediaQuery);return r.addChild(this._parseVariable())?this.finish(r):null}return n},t.prototype._parseMediaDeclaration=function(e){return void 0===e&&(e=!1),this._tryParseRuleset(e)||this._tryToParseDeclaration()||this._tryParseMixinDeclaration()||this._tryParseMixinReference()||this._parseDetachedRuleSetMixin()||this._parseStylesheetStatement(e)},t.prototype._parseMediaFeatureName=function(){return this._parseIdent()||this._parseVariable()},t.prototype._parseVariableDeclaration=function(e){void 0===e&&(e=[]);var t=this.create(o.VariableDeclaration),n=this.mark();if(!t.setVariable(this._parseVariable(!0)))return null;if(!this.accept(r.TokenType.Colon))return this.restoreAtMark(n),null;if(this.prevToken&&(t.colonPosition=this.prevToken.offset),t.setValue(this._parseDetachedRuleSet()))t.needsSemicolon=!1;else if(!t.setValue(this._parseExpr()))return this.finish(t,s.ParseError.VariableValueExpected,[],e);return t.addChild(this._parsePrio()),this.peek(r.TokenType.SemiColon)&&(t.semicolonPosition=this.token.offset),this.finish(t)},t.prototype._parseDetachedRuleSet=function(){var e=this.mark();if(this.peekDelim("#")||this.peekDelim(".")){if(this.consumeToken(),this.hasWhitespace()||!this.accept(r.TokenType.ParenthesisL))return this.restoreAtMark(e),null;var t=this.create(o.MixinDeclaration);if(t.getParameters().addChild(this._parseMixinParameter()))for(;(this.accept(r.TokenType.Comma)||this.accept(r.TokenType.SemiColon))&&!this.peek(r.TokenType.ParenthesisR);)t.getParameters().addChild(this._parseMixinParameter())||this.markError(t,s.ParseError.IdentifierExpected,[],[r.TokenType.ParenthesisR]);if(!this.accept(r.TokenType.ParenthesisR))return this.restoreAtMark(e),null}if(!this.peek(r.TokenType.CurlyL))return null;var n=this.create(o.BodyDeclaration);return this._parseBody(n,this._parseDetachedRuleSetBody.bind(this)),this.finish(n)},t.prototype._parseDetachedRuleSetBody=function(){return this._tryParseKeyframeSelector()||this._parseRuleSetDeclaration()},t.prototype._addLookupChildren=function(e){if(!e.addChild(this._parseLookupValue()))return!1;for(var t=!1;this.peek(r.TokenType.BracketL)&&(t=!0),e.addChild(this._parseLookupValue());)t=!1;return!t},t.prototype._parseLookupValue=function(){var e=this.create(o.Node),t=this.mark();return this.accept(r.TokenType.BracketL)&&((e.addChild(this._parseVariable(!1,!0))||e.addChild(this._parsePropertyIdentifier()))&&this.accept(r.TokenType.BracketR)||this.accept(r.TokenType.BracketR))?e:(this.restoreAtMark(t),null)},t.prototype._parseVariable=function(e,t){void 0===e&&(e=!1),void 0===t&&(t=!1);var n=!e&&this.peekDelim("$");if(!this.peekDelim("@")&&!n&&!this.peek(r.TokenType.AtKeyword))return null;for(var i=this.create(o.Variable),s=this.mark();this.acceptDelim("@")||!e&&this.acceptDelim("$");)if(this.hasWhitespace())return this.restoreAtMark(s),null;return(this.accept(r.TokenType.AtKeyword)||this.accept(r.TokenType.Ident))&&(t||!this.peek(r.TokenType.BracketL)||this._addLookupChildren(i))?i:(this.restoreAtMark(s),null)},t.prototype._parseTermExpression=function(){return this._parseVariable()||this._parseEscaped()||e.prototype._parseTermExpression.call(this)||this._tryParseMixinReference(!1)},t.prototype._parseEscaped=function(){if(this.peek(r.TokenType.EscapedJavaScript)||this.peek(r.TokenType.BadEscapedJavaScript)){var e=this.createNode(o.NodeType.EscapedValue);return this.consumeToken(),this.finish(e)}if(this.peekDelim("~")){e=this.createNode(o.NodeType.EscapedValue);return this.consumeToken(),this.accept(r.TokenType.String)||this.accept(r.TokenType.EscapedJavaScript)?this.finish(e):this.finish(e,s.ParseError.TermExpected)}return null},t.prototype._parseOperator=function(){var t=this._parseGuardOperator();return t||e.prototype._parseOperator.call(this)},t.prototype._parseGuardOperator=function(){if(this.peekDelim(">")){var e=this.createNode(o.NodeType.Operator);return this.consumeToken(),this.acceptDelim("="),e}if(this.peekDelim("=")){e=this.createNode(o.NodeType.Operator);return this.consumeToken(),this.acceptDelim("<"),e}if(this.peekDelim("<")){e=this.createNode(o.NodeType.Operator);return this.consumeToken(),this.acceptDelim("="),e}return null},t.prototype._parseRuleSetDeclaration=function(){return this.peek(r.TokenType.AtKeyword)?this._parseKeyframe()||this._parseMedia(!0)||this._parseImport()||this._parseSupports(!0)||this._parseDetachedRuleSetMixin()||this._parseVariableDeclaration()||e.prototype._parseRuleSetDeclarationAtStatement.call(this):this._tryParseMixinDeclaration()||this._tryParseRuleset(!0)||this._tryParseMixinReference()||this._parseFunction()||this._parseExtend()||e.prototype._parseRuleSetDeclaration.call(this)},t.prototype._parseKeyframeIdent=function(){return this._parseIdent([o.ReferenceType.Keyframe])||this._parseVariable()},t.prototype._parseKeyframeSelector=function(){return this._parseDetachedRuleSetMixin()||e.prototype._parseKeyframeSelector.call(this)},t.prototype._parseSimpleSelectorBody=function(){return this._parseSelectorCombinator()||e.prototype._parseSimpleSelectorBody.call(this)},t.prototype._parseSelector=function(e){var t=this.create(o.Selector),n=!1;for(e&&(n=t.addChild(this._parseCombinator()));t.addChild(this._parseSimpleSelector());){n=!0;var i=this.mark();if(t.addChild(this._parseGuard())&&this.peek(r.TokenType.CurlyL))break;this.restoreAtMark(i),t.addChild(this._parseCombinator())}return n?this.finish(t):null},t.prototype._parseSelectorCombinator=function(){if(this.peekDelim("&")){var e=this.createNode(o.NodeType.SelectorCombinator);for(this.consumeToken();!this.hasWhitespace()&&(this.acceptDelim("-")||this.accept(r.TokenType.Num)||this.accept(r.TokenType.Dimension)||e.addChild(this._parseIdent())||this.acceptDelim("&")););return this.finish(e)}return null},t.prototype._parseSelectorIdent=function(){if(!this.peekInterpolatedIdent())return null;var e=this.createNode(o.NodeType.SelectorInterpolation);return this._acceptInterpolatedIdent(e)?this.finish(e):null},t.prototype._parsePropertyIdentifier=function(e){void 0===e&&(e=!1);var t=/^[\w-]+/;if(!this.peekInterpolatedIdent()&&!this.peekRegExp(this.token.type,t))return null;var n=this.mark(),r=this.create(o.Identifier);r.isCustomProperty=this.acceptDelim("-")&&this.acceptDelim("-");return(e?r.isCustomProperty?r.addChild(this._parseIdent()):r.addChild(this._parseRegexp(t)):r.isCustomProperty?this._acceptInterpolatedIdent(r):this._acceptInterpolatedIdent(r,t))?(e||this.hasWhitespace()||(this.acceptDelim("+"),this.hasWhitespace()||this.acceptIdent("_")),this.finish(r)):(this.restoreAtMark(n),null)},t.prototype.peekInterpolatedIdent=function(){return this.peek(r.TokenType.Ident)||this.peekDelim("@")||this.peekDelim("$")||this.peekDelim("-")},t.prototype._acceptInterpolatedIdent=function(e,t){for(var n=this,i=!1,o=function(){var e=n.mark();return n.acceptDelim("-")&&(n.hasWhitespace()||n.acceptDelim("-"),n.hasWhitespace())?(n.restoreAtMark(e),null):n._parseInterpolation()},s=t?function(){return n.acceptRegexp(t)}:function(){return n.accept(r.TokenType.Ident)};(s()||e.addChild(this._parseInterpolation()||this.try(o)))&&(i=!0,!this.hasWhitespace()););return i},t.prototype._parseInterpolation=function(){var e=this.mark();if(this.peekDelim("@")||this.peekDelim("$")){var t=this.createNode(o.NodeType.Interpolation);return this.consumeToken(),this.hasWhitespace()||!this.accept(r.TokenType.CurlyL)?(this.restoreAtMark(e),null):t.addChild(this._parseIdent())?this.accept(r.TokenType.CurlyR)?this.finish(t):this.finish(t,s.ParseError.RightCurlyExpected):this.finish(t,s.ParseError.IdentifierExpected)}return null},t.prototype._tryParseMixinDeclaration=function(){var e=this.mark(),t=this.create(o.MixinDeclaration);if(!t.setIdentifier(this._parseMixinDeclarationIdentifier())||!this.accept(r.TokenType.ParenthesisL))return this.restoreAtMark(e),null;if(t.getParameters().addChild(this._parseMixinParameter()))for(;(this.accept(r.TokenType.Comma)||this.accept(r.TokenType.SemiColon))&&!this.peek(r.TokenType.ParenthesisR);)t.getParameters().addChild(this._parseMixinParameter())||this.markError(t,s.ParseError.IdentifierExpected,[],[r.TokenType.ParenthesisR]);return this.accept(r.TokenType.ParenthesisR)?(t.setGuard(this._parseGuard()),this.peek(r.TokenType.CurlyL)?this._parseBody(t,this._parseMixInBodyDeclaration.bind(this)):(this.restoreAtMark(e),null)):(this.restoreAtMark(e),null)},t.prototype._parseMixInBodyDeclaration=function(){return this._parseFontFace()||this._parseRuleSetDeclaration()},t.prototype._parseMixinDeclarationIdentifier=function(){var e;if(this.peekDelim("#")||this.peekDelim(".")){if(e=this.create(o.Identifier),this.consumeToken(),this.hasWhitespace()||!e.addChild(this._parseIdent()))return null}else{if(!this.peek(r.TokenType.Hash))return null;e=this.create(o.Identifier),this.consumeToken()}return e.referenceTypes=[o.ReferenceType.Mixin],this.finish(e)},t.prototype._parsePseudo=function(){if(!this.peek(r.TokenType.Colon))return null;var t=this.mark(),n=this.create(o.ExtendsReference);return this.consumeToken(),this.acceptIdent("extend")?this._completeExtends(n):(this.restoreAtMark(t),e.prototype._parsePseudo.call(this))},t.prototype._parseExtend=function(){if(!this.peekDelim("&"))return null;var e=this.mark(),t=this.create(o.ExtendsReference);return this.consumeToken(),!this.hasWhitespace()&&this.accept(r.TokenType.Colon)&&this.acceptIdent("extend")?this._completeExtends(t):(this.restoreAtMark(e),null)},t.prototype._completeExtends=function(e){if(!this.accept(r.TokenType.ParenthesisL))return this.finish(e,s.ParseError.LeftParenthesisExpected);var t=e.getSelectors();if(!t.addChild(this._parseSelector(!0)))return this.finish(e,s.ParseError.SelectorExpected);for(;this.accept(r.TokenType.Comma);)if(!t.addChild(this._parseSelector(!0)))return this.finish(e,s.ParseError.SelectorExpected);return this.accept(r.TokenType.ParenthesisR)?this.finish(e):this.finish(e,s.ParseError.RightParenthesisExpected)},t.prototype._parseDetachedRuleSetMixin=function(){if(!this.peek(r.TokenType.AtKeyword))return null;var e=this.mark(),t=this.create(o.MixinReference);return!t.addChild(this._parseVariable(!0))||!this.hasWhitespace()&&this.accept(r.TokenType.ParenthesisL)?this.accept(r.TokenType.ParenthesisR)?this.finish(t):this.finish(t,s.ParseError.RightParenthesisExpected):(this.restoreAtMark(e),null)},t.prototype._tryParseMixinReference=function(e){void 0===e&&(e=!0);for(var t=this.mark(),n=this.create(o.MixinReference),i=this._parseMixinDeclarationIdentifier();i;){this.acceptDelim(">");var a=this._parseMixinDeclarationIdentifier();if(!a)break;n.getNamespaces().addChild(i),i=a}if(!n.setIdentifier(i))return this.restoreAtMark(t),null;var l=!1;if(this.accept(r.TokenType.ParenthesisL)){if(l=!0,n.getArguments().addChild(this._parseMixinArgument()))for(;(this.accept(r.TokenType.Comma)||this.accept(r.TokenType.SemiColon))&&!this.peek(r.TokenType.ParenthesisR);)if(!n.getArguments().addChild(this._parseMixinArgument()))return this.finish(n,s.ParseError.ExpressionExpected);if(!this.accept(r.TokenType.ParenthesisR))return this.finish(n,s.ParseError.RightParenthesisExpected);i.referenceTypes=[o.ReferenceType.Mixin]}else i.referenceTypes=[o.ReferenceType.Mixin,o.ReferenceType.Rule];return this.peek(r.TokenType.BracketL)?e||this._addLookupChildren(n):n.addChild(this._parsePrio()),l||this.peek(r.TokenType.SemiColon)||this.peek(r.TokenType.CurlyR)||this.peek(r.TokenType.EOF)?this.finish(n):(this.restoreAtMark(t),null)},t.prototype._parseMixinArgument=function(){var e=this.create(o.FunctionArgument),t=this.mark(),n=this._parseVariable();return n&&(this.accept(r.TokenType.Colon)?e.setIdentifier(n):this.restoreAtMark(t)),e.setValue(this._parseDetachedRuleSet()||this._parseExpr(!0))?this.finish(e):(this.restoreAtMark(t),null)},t.prototype._parseMixinParameter=function(){var e=this.create(o.FunctionParameter);if(this.peekKeyword("@rest")){var t=this.create(o.Node);return this.consumeToken(),this.accept(n.Ellipsis)?(e.setIdentifier(this.finish(t)),this.finish(e)):this.finish(e,s.ParseError.DotExpected,[],[r.TokenType.Comma,r.TokenType.ParenthesisR])}if(this.peek(n.Ellipsis)){var i=this.create(o.Node);return this.consumeToken(),e.setIdentifier(this.finish(i)),this.finish(e)}var a=!1;return e.setIdentifier(this._parseVariable())&&(this.accept(r.TokenType.Colon),a=!0),e.setDefaultValue(this._parseDetachedRuleSet()||this._parseExpr(!0))||a?this.finish(e):null},t.prototype._parseGuard=function(){if(!this.peekIdent("when"))return null;var e=this.create(o.LessGuard);if(this.consumeToken(),e.isNegated=this.acceptIdent("not"),!e.getConditions().addChild(this._parseGuardCondition()))return this.finish(e,s.ParseError.ConditionExpected);for(;this.acceptIdent("and")||this.accept(r.TokenType.Comma);)if(!e.getConditions().addChild(this._parseGuardCondition()))return this.finish(e,s.ParseError.ConditionExpected);return this.finish(e)},t.prototype._parseGuardCondition=function(){if(!this.peek(r.TokenType.ParenthesisL))return null;var e=this.create(o.GuardCondition);return this.consumeToken(),e.addChild(this._parseExpr()),this.accept(r.TokenType.ParenthesisR)?this.finish(e):this.finish(e,s.ParseError.RightParenthesisExpected)},t.prototype._parseFunction=function(){var e=this.mark(),t=this.create(o.Function);if(!t.setIdentifier(this._parseFunctionIdentifier()))return null;if(this.hasWhitespace()||!this.accept(r.TokenType.ParenthesisL))return this.restoreAtMark(e),null;if(t.getArguments().addChild(this._parseMixinArgument()))for(;(this.accept(r.TokenType.Comma)||this.accept(r.TokenType.SemiColon))&&!this.peek(r.TokenType.ParenthesisR);)if(!t.getArguments().addChild(this._parseMixinArgument()))return this.finish(t,s.ParseError.ExpressionExpected);return this.accept(r.TokenType.ParenthesisR)?this.finish(t):this.finish(t,s.ParseError.RightParenthesisExpected)},t.prototype._parseFunctionIdentifier=function(){if(this.peekDelim("%")){var t=this.create(o.Identifier);return t.referenceTypes=[o.ReferenceType.Function],this.consumeToken(),this.finish(t)}return e.prototype._parseFunctionIdentifier.call(this)},t.prototype._parseURLArgument=function(){var t=this.mark(),n=e.prototype._parseURLArgument.call(this);if(!n||!this.peek(r.TokenType.ParenthesisR)){this.restoreAtMark(t);var i=this.create(o.Node);return i.addChild(this._parseBinaryExpr()),this.finish(i)}return n},t}(i.Parser);t.LESSParser=a}));__extends=this&&this.__extends||function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();!function(e){if("object"==typeof module&&"object"==typeof module.exports){var t=e(require,exports);void 0!==t&&(module.exports=t)}else"function"==typeof define&&define.amd&&define("vscode-css-languageservice/services/lessCompletion",["require","exports","./cssCompletion","../cssLanguageTypes","vscode-nls"],e)}((function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.LESSCompletion=void 0;var n=e("./cssCompletion"),r=e("../cssLanguageTypes"),i=e("vscode-nls").loadMessageBundle(),o=function(e){function t(t,n){return e.call(this,"@",t,n)||this}return __extends(t,e),t.prototype.createFunctionProposals=function(e,t,n,i){for(var o=0,s=e;o 50%"),example:"percentage(@number);",type:"percentage"},{name:"round",description:i("less.builtin.round","rounds a number to a number of places"),example:"round(number, [places: 0]);"},{name:"sqrt",description:i("less.builtin.sqrt","calculates square root of a number"),example:"sqrt(number);"},{name:"sin",description:i("less.builtin.sin","sine function"),example:"sin(number);"},{name:"tan",description:i("less.builtin.tan","tangent function"),example:"tan(number);"},{name:"atan",description:i("less.builtin.atan","arctangent - inverse of tangent function"),example:"atan(number);"},{name:"pi",description:i("less.builtin.pi","returns pi"),example:"pi();"},{name:"pow",description:i("less.builtin.pow","first argument raised to the power of the second argument"),example:"pow(@base, @exponent);"},{name:"mod",description:i("less.builtin.mod","first argument modulus second argument"),example:"mod(number, number);"},{name:"min",description:i("less.builtin.min","returns the lowest of one or more values"),example:"min(@x, @y);"},{name:"max",description:i("less.builtin.max","returns the lowest of one or more values"),example:"max(@x, @y);"}],t.colorProposals=[{name:"argb",example:"argb(@color);",description:i("less.builtin.argb","creates a #AARRGGBB")},{name:"hsl",example:"hsl(@hue, @saturation, @lightness);",description:i("less.builtin.hsl","creates a color")},{name:"hsla",example:"hsla(@hue, @saturation, @lightness, @alpha);",description:i("less.builtin.hsla","creates a color")},{name:"hsv",example:"hsv(@hue, @saturation, @value);",description:i("less.builtin.hsv","creates a color")},{name:"hsva",example:"hsva(@hue, @saturation, @value, @alpha);",description:i("less.builtin.hsva","creates a color")},{name:"hue",example:"hue(@color);",description:i("less.builtin.hue","returns the `hue` channel of `@color` in the HSL space")},{name:"saturation",example:"saturation(@color);",description:i("less.builtin.saturation","returns the `saturation` channel of `@color` in the HSL space")},{name:"lightness",example:"lightness(@color);",description:i("less.builtin.lightness","returns the `lightness` channel of `@color` in the HSL space")},{name:"hsvhue",example:"hsvhue(@color);",description:i("less.builtin.hsvhue","returns the `hue` channel of `@color` in the HSV space")},{name:"hsvsaturation",example:"hsvsaturation(@color);",description:i("less.builtin.hsvsaturation","returns the `saturation` channel of `@color` in the HSV space")},{name:"hsvvalue",example:"hsvvalue(@color);",description:i("less.builtin.hsvvalue","returns the `value` channel of `@color` in the HSV space")},{name:"red",example:"red(@color);",description:i("less.builtin.red","returns the `red` channel of `@color`")},{name:"green",example:"green(@color);",description:i("less.builtin.green","returns the `green` channel of `@color`")},{name:"blue",example:"blue(@color);",description:i("less.builtin.blue","returns the `blue` channel of `@color`")},{name:"alpha",example:"alpha(@color);",description:i("less.builtin.alpha","returns the `alpha` channel of `@color`")},{name:"luma",example:"luma(@color);",description:i("less.builtin.luma","returns the `luma` value (perceptual brightness) of `@color`")},{name:"saturate",example:"saturate(@color, 10%);",description:i("less.builtin.saturate","return `@color` 10% points more saturated")},{name:"desaturate",example:"desaturate(@color, 10%);",description:i("less.builtin.desaturate","return `@color` 10% points less saturated")},{name:"lighten",example:"lighten(@color, 10%);",description:i("less.builtin.lighten","return `@color` 10% points lighter")},{name:"darken",example:"darken(@color, 10%);",description:i("less.builtin.darken","return `@color` 10% points darker")},{name:"fadein",example:"fadein(@color, 10%);",description:i("less.builtin.fadein","return `@color` 10% points less transparent")},{name:"fadeout",example:"fadeout(@color, 10%);",description:i("less.builtin.fadeout","return `@color` 10% points more transparent")},{name:"fade",example:"fade(@color, 50%);",description:i("less.builtin.fade","return `@color` with 50% transparency")},{name:"spin",example:"spin(@color, 10);",description:i("less.builtin.spin","return `@color` with a 10 degree larger in hue")},{name:"mix",example:"mix(@color1, @color2, [@weight: 50%]);",description:i("less.builtin.mix","return a mix of `@color1` and `@color2`")},{name:"greyscale",example:"greyscale(@color);",description:i("less.builtin.greyscale","returns a grey, 100% desaturated color")},{name:"contrast",example:"contrast(@color1, [@darkcolor: black], [@lightcolor: white], [@threshold: 43%]);",description:i("less.builtin.contrast","return `@darkcolor` if `@color1 is> 43% luma` otherwise return `@lightcolor`, see notes")},{name:"multiply",example:"multiply(@color1, @color2);"},{name:"screen",example:"screen(@color1, @color2);"},{name:"overlay",example:"overlay(@color1, @color2);"},{name:"softlight",example:"softlight(@color1, @color2);"},{name:"hardlight",example:"hardlight(@color1, @color2);"},{name:"difference",example:"difference(@color1, @color2);"},{name:"exclusion",example:"exclusion(@color1, @color2);"},{name:"average",example:"average(@color1, @color2);"},{name:"negation",example:"negation(@color1, @color2);"}],t}(n.CSSCompletion);t.LESSCompletion=o})),function(e){if("object"==typeof module&&"object"==typeof module.exports){var t=e(require,exports);void 0!==t&&(module.exports=t)}else"function"==typeof define&&define.amd&&define("vscode-css-languageservice/services/cssFolding",["require","exports","../parser/cssScanner","../parser/scssScanner","../parser/lessScanner"],e)}((function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getFoldingRanges=void 0;var n=e("../parser/cssScanner"),r=e("../parser/scssScanner"),i=e("../parser/lessScanner");function o(e,t){if(0===e.length)return null;for(var n=e.length-1;n>=0;n--)if(e[n].type===t&&e[n].isStart)return e.splice(n,1)[0];return null}t.getFoldingRanges=function(e,t){return function(e,t){var n=t&&t.rangeLimit||Number.MAX_VALUE,r=e.sort((function(e,t){var n=e.startLine-t.startLine;return 0===n&&(n=e.endLine-t.endLine),n})),i=[],o=-1;return r.forEach((function(e){e.startLine && ]#",relevance:50,description:"@counter-style descriptor. Specifies the symbols used by the marker-construction algorithm specified by the system descriptor. Needs to be specified if the counter system is 'additive'.",restrictions:["integer","string","image","identifier"]},{name:"align-content",values:[{name:"center",description:"Lines are packed toward the center of the flex container."},{name:"flex-end",description:"Lines are packed toward the end of the flex container."},{name:"flex-start",description:"Lines are packed toward the start of the flex container."},{name:"space-around",description:"Lines are evenly distributed in the flex container, with half-size spaces on either end."},{name:"space-between",description:"Lines are evenly distributed in the flex container."},{name:"stretch",description:"Lines stretch to take up the remaining space."}],syntax:"normal | | | ? ",relevance:60,description:"Aligns a flex container’s lines within the flex container when there is extra space in the cross-axis, similar to how 'justify-content' aligns individual items within the main-axis.",restrictions:["enum"]},{name:"align-items",values:[{name:"baseline",description:"If the flex item’s inline axis is the same as the cross axis, this value is identical to 'flex-start'. Otherwise, it participates in baseline alignment."},{name:"center",description:"The flex item’s margin box is centered in the cross axis within the line."},{name:"flex-end",description:"The cross-end margin edge of the flex item is placed flush with the cross-end edge of the line."},{name:"flex-start",description:"The cross-start margin edge of the flex item is placed flush with the cross-start edge of the line."},{name:"stretch",description:"If the cross size property of the flex item computes to auto, and neither of the cross-axis margins are auto, the flex item is stretched."}],syntax:"normal | stretch | | [ ? ]",relevance:83,description:"Aligns flex items along the cross axis of the current line of the flex container.",restrictions:["enum"]},{name:"justify-items",values:[{name:"auto"},{name:"normal"},{name:"end"},{name:"start"},{name:"flex-end",description:'"Flex items are packed toward the end of the line."'},{name:"flex-start",description:'"Flex items are packed toward the start of the line."'},{name:"self-end",description:"The item is packed flush to the edge of the alignment container of the end side of the item, in the appropriate axis."},{name:"self-start",description:"The item is packed flush to the edge of the alignment container of the start side of the item, in the appropriate axis.."},{name:"center",description:"The items are packed flush to each other toward the center of the of the alignment container."},{name:"left"},{name:"right"},{name:"baseline"},{name:"first baseline"},{name:"last baseline"},{name:"stretch",description:"If the cross size property of the flex item computes to auto, and neither of the cross-axis margins are auto, the flex item is stretched."},{name:"save"},{name:"unsave"},{name:"legacy"}],syntax:"normal | stretch | | ? [ | left | right ] | legacy | legacy && [ left | right | center ]",relevance:51,description:"Defines the default justify-self for all items of the box, giving them the default way of justifying each box along the appropriate axis",restrictions:["enum"]},{name:"justify-self",values:[{name:"auto"},{name:"normal"},{name:"end"},{name:"start"},{name:"flex-end",description:'"Flex items are packed toward the end of the line."'},{name:"flex-start",description:'"Flex items are packed toward the start of the line."'},{name:"self-end",description:"The item is packed flush to the edge of the alignment container of the end side of the item, in the appropriate axis."},{name:"self-start",description:"The item is packed flush to the edge of the alignment container of the start side of the item, in the appropriate axis.."},{name:"center",description:"The items are packed flush to each other toward the center of the of the alignment container."},{name:"left"},{name:"right"},{name:"baseline"},{name:"first baseline"},{name:"last baseline"},{name:"stretch",description:"If the cross size property of the flex item computes to auto, and neither of the cross-axis margins are auto, the flex item is stretched."},{name:"save"},{name:"unsave"}],syntax:"auto | normal | stretch | | ? [ | left | right ]",relevance:52,description:"Defines the way of justifying a box inside its container along the appropriate axis.",restrictions:["enum"]},{name:"align-self",values:[{name:"auto",description:"Computes to the value of 'align-items' on the element’s parent, or 'stretch' if the element has no parent. On absolutely positioned elements, it computes to itself."},{name:"baseline",description:"If the flex item’s inline axis is the same as the cross axis, this value is identical to 'flex-start'. Otherwise, it participates in baseline alignment."},{name:"center",description:"The flex item’s margin box is centered in the cross axis within the line."},{name:"flex-end",description:"The cross-end margin edge of the flex item is placed flush with the cross-end edge of the line."},{name:"flex-start",description:"The cross-start margin edge of the flex item is placed flush with the cross-start edge of the line."},{name:"stretch",description:"If the cross size property of the flex item computes to auto, and neither of the cross-axis margins are auto, the flex item is stretched."}],syntax:"auto | normal | stretch | | ? ",relevance:70,description:"Allows the default alignment along the cross axis to be overridden for individual flex items.",restrictions:["enum"]},{name:"all",browsers:["E79","FF27","S9.1","C37","O24"],values:[],syntax:"initial | inherit | unset | revert",relevance:52,references:[{name:"MDN Reference",url:"https://developer.mozilla.org/docs/Web/CSS/all"}],description:"Shorthand that resets all properties except 'direction' and 'unicode-bidi'.",restrictions:["enum"]},{name:"alt",browsers:["S9"],values:[],relevance:50,references:[{name:"MDN Reference",url:"https://developer.mozilla.org/docs/Web/CSS/alt"}],description:"Provides alternative text for assistive technology to replace the generated content of a ::before or ::after element.",restrictions:["string","enum"]},{name:"animation",values:[{name:"alternate",description:"The animation cycle iterations that are odd counts are played in the normal direction, and the animation cycle iterations that are even counts are played in a reverse direction."},{name:"alternate-reverse",description:"The animation cycle iterations that are odd counts are played in the reverse direction, and the animation cycle iterations that are even counts are played in a normal direction."},{name:"backwards",description:"The beginning property value (as defined in the first @keyframes at-rule) is applied before the animation is displayed, during the period defined by 'animation-delay'."},{name:"both",description:"Both forwards and backwards fill modes are applied."},{name:"forwards",description:"The final property value (as defined in the last @keyframes at-rule) is maintained after the animation completes."},{name:"infinite",description:"Causes the animation to repeat forever."},{name:"none",description:"No animation is performed"},{name:"normal",description:"Normal playback."},{name:"reverse",description:"All iterations of the animation are played in the reverse direction from the way they were specified."}],syntax:"#",relevance:80,references:[{name:"MDN Reference",url:"https://developer.mozilla.org/docs/Web/CSS/animation"}],description:"Shorthand property combines six of the animation properties into a single property.",restrictions:["time","timing-function","enum","identifier","number"]},{name:"animation-delay",syntax:"